[
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non: [push, pull_request]\n\njobs:\n  codespell:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: codespell-project/actions-codespell@v2\n        with:\n            ignore_words_file: spelling.ignore.txt\n            skip: alectryon\n  build:\n    strategy:\n      fail-fast: false\n      matrix:\n        project: [\"c\", \"haskell\"] # coq takes a very long time and times out at 6 hours...\n        os: [\"ubuntu-latest\", macos-latest]\n        channel: [\"nixos-25.05\", \"nixpkgs-unstable\"]\n    runs-on: ${{ matrix.os }}\n    permissions:\n      id-token: write\n      contents: read\n    steps:\n      - uses: actions/checkout@v4\n      - uses: DeterminateSystems/nix-installer-action@v17\n      - name: Update channel ${{matrix.channel}}\n        run: |\n          nix-channel --add https://nixos.org/channels/${{matrix.channel}} nixpkgs\n          nix-channel --update\n      - run: nix-build -A ${{matrix.project}}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Tech report\nSimplicity-TR.pdf\n*.eps\n# Haskell\n/Haskell/*.pdf\ndist-newstyle\ncabal.project.local\n# Nix\nresult\nresult-doc\n# Coq\n/Coq/*Makefile*\n/Coq/.Makefile.d\n/Coq/.nia.cache\n.lia.cache\n*.vok\n*.vos\n*.glob\n*.aux\n*.vo\n*.crashcoqide\nalectryon-doc\n# C\n/C/test\n*.o\n*.out\n*.a\n# Coverage\n*.gcda\n*.gcno\n*.gcov\n*.info\n# Gen\n/*.rs\n/*.c\n/*.h\n/*.inc\n"
  },
  {
    "path": "C/Makefile",
    "content": "CORE_OBJS := bitstream.o dag.o deserialize.o eval.o frame.o jets.o jets-secp256k1.o rsort.o sha256.o type.o typeInference.o\nBITCOIN_OBJS := bitcoin/env.o bitcoin/ops.o bitcoin/bitcoinJets.o bitcoin/primitive.o bitcoin/txEnv.o\nELEMENTS_OBJS := elements/env.o elements/exec.o elements/ops.o elements/elementsJets.o elements/primitive.o elements/cmr.o elements/txEnv.o\nTEST_OBJS := test.o ctx8Pruned.o ctx8Unpruned.o hashBlock.o regression4.o schnorr0.o schnorr6.o typeSkipTest.o elements/checkSigHashAllTx1.o\n\n# From https://fastcompression.blogspot.com/2019/01/compiler-warnings.html\nCWARN := -Werror -Wall -Wextra -Wcast-qual -Wcast-align -Wstrict-aliasing -Wpointer-arith -Winit-self -Wshadow -Wswitch-enum -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wfloat-equal -Wundef -Wconversion\n\nifneq ($(doCheck), 1)\nCPPFLAGS := $(CPPFLAGS) -DPRODUCTION\nendif\n\nCFLAGS := $(CFLAGS) -I include\n\n# libsecp256k1 is full of conversion warnings, so we compile jets-secp256k1.c separately.\njets-secp256k1.o: jets-secp256k1.c\n\t$(CC) -c $(CFLAGS) $(CWARN) -Wno-conversion $(CPPFLAGS) -o $@ $<\n\nelements/elementsJets.o: elements/elementsJets.c\n\t$(CC) -c $(CFLAGS) $(CWARN) -Wno-switch-enum -Wswitch $(CPPFLAGS) -o $@ $<\n\nsha256.o: sha256.c\n\t$(CC) -c $(CFLAGS) $(X86_SHANI_CXXFLAGS) $(CWARN) -Wno-cast-align -Wno-sign-conversion $(CPPFLAGS) -o $@ $<\n\n%.o: %.c\n\t$(CC) -c $(CFLAGS) $(CWARN) $(CPPFLAGS) -o $@ $<\n\nlibBitcoinSimplicity.a: $(CORE_OBJS) $(BITCOIN_OBJS)\n\tar rcs $@ $^\n\nlibElementsSimplicity.a: $(CORE_OBJS) $(ELEMENTS_OBJS)\n\tar rcs $@ $^\n\ntest: $(TEST_OBJS) libElementsSimplicity.a\n\t$(CC) $^ -o $@ $(LDFLAGS)\n\ninstall: libBitcoinSimplicity.a libElementsSimplicity.a\n\tmkdir -p $(out)/lib\n\tcp $^ $(out)/lib/\n\tcp -R include $(out)/include\n\ncheck: test\n\t./test\n\nclean:\n\t-rm -f test libElementsSimplicity.a $(TEST_OBJS) $(OBJS)\n\n.PHONY: install check clean\n"
  },
  {
    "path": "C/bitcoin/bitcoinJets.c",
    "content": "#include \"bitcoinJets.h\"\n\n#include \"ops.h\"\n#include \"txEnv.h\"\n#include \"../taptweak.h\"\n#include \"../simplicity_assert.h\"\n\n/* Read a 256-bit hash value from the 'src' frame, advancing the cursor 256 cells.\n *\n * Precondition: '*src' is a valid read frame for 256 more cells;\n *               NULL != h;\n */\nstatic void readHash(sha256_midstate* h, frameItem *src) {\n  read32s(h->s, 8, src);\n}\n\n/* Write a 256-bit hash value to the 'dst' frame, advancing the cursor 256 cells.\n *\n * Precondition: '*dst' is a valid write frame for 256 more cells;\n *               NULL != h;\n */\nstatic void writeHash(frameItem* dst, const sha256_midstate* h) {\n  write32s(dst, h->s, 8);\n}\n\n/* Write an outpoint value to the 'dst' frame, advancing the cursor 288 cells.\n *\n * Precondition: '*dst' is a valid write frame for 288 more cells;\n *               NULL != op;\n */\nstatic void prevOutpoint(frameItem* dst, const outpoint* op) {\n  writeHash(dst, &op->txid);\n  simplicity_write32(dst, op->ix);\n}\n\nstatic uint_fast32_t lockHeight(const bitcoinTransaction* tx) {\n  return !tx->isFinal && tx->lockTime < 500000000U ? tx->lockTime : 0;\n}\n\nstatic uint_fast32_t lockTime(const bitcoinTransaction* tx) {\n  return !tx->isFinal && 500000000U <= tx->lockTime ? tx->lockTime : 0;\n}\n\nstatic uint_fast16_t lockDistance(const bitcoinTransaction* tx, uint_fast32_t ix) {\n  simplicity_assert(ix < tx->numInputs);\n  if (2 <= tx->version &&\n      tx->input[ix].sequence < 0x80000000 &&\n      !(tx->input[ix].sequence & ((uint_fast32_t)1 << 22))) {\n    return tx->input[ix].sequence & 0xffff;\n  } else {\n    return 0;\n  }\n}\n\nstatic uint_fast16_t lockDuration(const bitcoinTransaction* tx, uint_fast32_t ix) {\n  simplicity_assert(ix < tx->numInputs);\n  if (2 <= tx->version &&\n      tx->input[ix].sequence < 0x80000000 &&\n      !!(tx->input[ix].sequence & ((uint_fast32_t)1 << 22))) {\n    return tx->input[ix].sequence & 0xffff;\n  } else {\n    return 0;\n  }\n}\n\n/* version : ONE |- TWO^32 */\nbool simplicity_bitcoin_version(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->version);\n  return true;\n}\n\n/* lock_time : ONE |- TWO^32 */\nbool simplicity_bitcoin_lock_time(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->lockTime);\n  return true;\n}\n\n/* input_prev_outpoint : TWO^32 |- S (TWO^256 * TWO^32) */\nbool simplicity_bitcoin_input_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    prevOutpoint(dst, &env->tx->input[i].prevOutpoint);\n  } else {\n    skipBits(dst, 288);\n  }\n  return true;\n}\n\n/* input_value : TWO^32 |- S TWO^64 */\nbool simplicity_bitcoin_input_value(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    simplicity_write64(dst, env->tx->input[i].txo.value);\n  } else {\n    skipBits(dst, 64);\n  }\n  return true;\n}\n\n/* input_script_hash : TWO^32 |- S TWO^256 */\nbool simplicity_bitcoin_input_script_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    writeHash(dst, &env->tx->input[i].txo.scriptPubKey);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* input_sequence : TWO^32 |- S TWO^32 */\nbool simplicity_bitcoin_input_sequence(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    simplicity_write32(dst, env->tx->input[i].sequence);\n  } else {\n    skipBits(dst, 32);\n  }\n  return true;\n}\n\n/* input_annex_hash : TWO^32 |- S (S (TWO^256)) */\nbool simplicity_bitcoin_input_annex_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    if (writeBit(dst, env->tx->input[i].hasAnnex)) {\n      writeHash(dst, &env->tx->input[i].annexHash);\n    } else {\n      skipBits(dst, 256);\n    }\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* input_script_sig_hash : TWO^32 |- (S (TWO^256) */\nbool simplicity_bitcoin_input_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    writeHash(dst, &env->tx->input[i].scriptSigHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* output_value : TWO^32 |- S (TWO^64) */\nbool simplicity_bitcoin_output_value(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    simplicity_write64(dst, env->tx->output[i].value);\n  } else {\n    skipBits(dst, 64);\n  }\n  return true;\n}\n\n/* output_script_hash : TWO^32 |- S TWO^256 */\nbool simplicity_bitcoin_output_script_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    writeHash(dst, &env->tx->output[i].scriptPubKey);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* fee : ONE |- TWO^64 */\nbool simplicity_bitcoin_fee(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write64(dst, env->tx->totalInputValue - env->tx->totalOutputValue);\n  return true;\n}\n\n/* total_input_value : ONE |- TWO^64 */\nbool simplicity_bitcoin_total_input_value(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write64(dst, env->tx->totalInputValue);\n  return true;\n}\n\n/* total_output_value : ONE |- TWO^64 */\nbool simplicity_bitcoin_total_output_value(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write64(dst, env->tx->totalOutputValue);\n  return true;\n}\n\n/* script_cmr : ONE |- TWO^256 */\nbool simplicity_bitcoin_script_cmr(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  write32s(dst, env->taproot->scriptCMR.s, 8);\n  return true;\n}\n\n/* transaction_id : ONE |- TWO^256 */\nbool simplicity_bitcoin_transaction_id(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  write32s(dst, env->tx->txid.s, 8);\n  return true;\n}\n\n/* current_index : ONE |- TWO^32 */\nbool simplicity_bitcoin_current_index(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->ix);\n  return true;\n}\n\n/* current_prev_outpoint : ONE |- TWO^256 * TWO^32 */\nbool simplicity_bitcoin_current_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  prevOutpoint(dst, &env->tx->input[env->ix].prevOutpoint);\n  return true;\n}\n\n/* current_value : ONE |- (TWO^64) */\nbool simplicity_bitcoin_current_value(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  simplicity_write64(dst, env->tx->input[env->ix].txo.value);\n  return true;\n}\n\n/* current_script_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_current_script_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  writeHash(dst, &env->tx->input[env->ix].txo.scriptPubKey);\n  return true;\n}\n\n/* current_sequence : ONE |- TWO^32 */\nbool simplicity_bitcoin_current_sequence(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  simplicity_write32(dst, env->tx->input[env->ix].sequence);\n  return true;\n}\n\n/* current_script_sig_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_current_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  writeHash(dst, &env->tx->input[env->ix].scriptSigHash);\n  return true;\n}\n\n/* current_annex_hash : ONE |- S (TWO^256) */\nbool simplicity_bitcoin_current_annex_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  if (writeBit(dst, env->tx->input[env->ix].hasAnnex)) {\n    writeHash(dst, &env->tx->input[env->ix].annexHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* tapleaf_version : ONE |- TWO^8 */\nbool simplicity_bitcoin_tapleaf_version(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write8(dst, env->taproot->leafVersion);\n  return true;\n}\n\n/* tappath : TWO^8 |- S (TWO^256) */\nbool simplicity_bitcoin_tappath(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast8_t i = simplicity_read8(&src);\n  if (writeBit(dst, i < env->taproot->pathLen)) {\n    writeHash(dst, &env->taproot->path[i]);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* internal_key : ONE |- TWO^256 */\nbool simplicity_bitcoin_internal_key(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->internalKey);\n  return true;\n}\n\n/* num_inputs : ONE |- TWO^32 */\nbool simplicity_bitcoin_num_inputs(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->numInputs);\n  return true;\n}\n\n/* num_outputs : ONE |- TWO^32 */\nbool simplicity_bitcoin_num_outputs(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->numOutputs);\n  return true;\n}\n\n/* tx_is_final : ONE |- TWO */\nbool simplicity_bitcoin_tx_is_final(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeBit(dst, env->tx->isFinal);\n  return true;\n}\n\n/* tx_lock_height : ONE |- TWO^32 */\nbool simplicity_bitcoin_tx_lock_height(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, lockHeight(env->tx));\n  return true;\n}\n\n/* tx_lock_time : ONE |- TWO^32 */\nbool simplicity_bitcoin_tx_lock_time(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, lockTime(env->tx));\n  return true;\n}\n\n/* tx_lock_distance : ONE |- TWO^16 */\nbool simplicity_bitcoin_tx_lock_distance(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  simplicity_write16(dst, lockDistance(env->tx, env->ix));\n  return true;\n}\n\n/* tx_lock_duration : ONE |- TWO^16 */\nbool simplicity_bitcoin_tx_lock_duration(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  simplicity_write16(dst, lockDuration(env->tx, env->ix));\n  return true;\n}\n\n/* check_lock_height : TWO^32 |- ONE */\nbool simplicity_bitcoin_check_lock_height(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  uint_fast32_t x = simplicity_read32(&src);\n  return x <= lockHeight(env->tx);\n}\n\n/* check_lock_time : TWO^32 |- ONE */\nbool simplicity_bitcoin_check_lock_time(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  uint_fast32_t x = simplicity_read32(&src);\n  return x <= lockTime(env->tx);\n}\n\n/* check_lock_distance : TWO^16 |- ONE */\nbool simplicity_bitcoin_check_lock_distance(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  uint_fast16_t x = simplicity_read16(&src);\n  return x <= lockDistance(env->tx, env->ix);\n}\n\n/* check_lock_duration : TWO^16 |- ONE */\nbool simplicity_bitcoin_check_lock_duration(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  uint_fast16_t x = simplicity_read16(&src);\n  return x <= lockDuration(env->tx, env->ix);\n}\n\n/* build_tapleaf_simplicity : TWO^256 |- TWO^256 */\nbool simplicity_bitcoin_build_tapleaf_simplicity(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate cmr;\n  readHash(&cmr, &src);\n  sha256_midstate result = simplicity_bitcoin_make_tapleaf(0xbe, &cmr);\n  writeHash(dst, &result);\n  return true;\n}\n\n/* build_tapbranch : TWO^256 * TWO^256 |- TWO^256 */\nbool simplicity_bitcoin_build_tapbranch(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate a, b;\n  readHash(&a, &src);\n  readHash(&b, &src);\n\n  sha256_midstate result = simplicity_bitcoin_make_tapbranch(&a, &b);\n  writeHash(dst, &result);\n  return true;\n}\n\n/* build_taptweak : PUBKEY * TWO^256 |- PUBKEY */\nbool simplicity_bitcoin_build_taptweak(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  static unsigned char taptweak[] = \"TapTweak\";\n  return simplicity_generic_taptweak(dst, &src, taptweak, sizeof(taptweak)-1);\n}\n\n/* outpoint_hash : CTX8 * TWO^256 * TWO^32 |- CTX8 */\nbool simplicity_bitcoin_outpoint_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate midstate;\n  unsigned char buf[36];\n  sha256_context ctx = {.output = midstate.s};\n\n  /* Read a SHA-256 context. */\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  /* Read an outpoint (hash and index). */\n  read8s(buf, 36, &src);\n  sha256_uchars(&ctx, buf, 36);\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* annex_hash : CTX8 * S TWO^256 |- CTX8 */\nbool simplicity_bitcoin_annex_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate midstate;\n  unsigned char buf[32];\n  sha256_context ctx = {.output = midstate.s};\n\n  /* Read a SHA-256 context. */\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  /* Read an optional hash. (257 bits) */\n  if (readBit(&src)) {\n    /* Read a hash. (256 bits) */\n    read8s(buf, 32, &src);\n    sha256_uchar(&ctx, 0x01);\n    sha256_uchars(&ctx, buf, 32);\n  } else {\n    /* No hash. */\n    sha256_uchar(&ctx, 0x00);\n  }\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* output_amounts_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_output_values_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputValuesHash);\n  return true;\n}\n\n/* output_scripts_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_output_scripts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputScriptsHash);\n  return true;\n}\n\n/* outputs_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_outputs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputsHash);\n  return true;\n}\n\n/* output_hash : TWO^32 |- S TWO^256 */\nbool simplicity_bitcoin_output_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    const sigOutput* output = &env->tx->output[i];\n    sha256_midstate midstate;\n    sha256_context ctx = sha256_init(midstate.s);\n    sha256_u64be(&ctx, output->value);\n    sha256_hash(&ctx, &output->scriptPubKey);\n    sha256_finalize(&ctx);\n    writeHash(dst, &midstate);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* input_outpoints_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_input_outpoints_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputOutpointsHash);\n  return true;\n}\n\n/* input_values_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_input_values_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputValuesHash);\n  return true;\n}\n\n/* input_scripts_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_input_scripts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputScriptsHash);\n  return true;\n}\n\n/* input_utxos_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_input_utxos_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputUTXOsHash);\n  return true;\n}\n\n/* input_utxo_hash : TWO^32 |- S TWO^256 */\nbool simplicity_bitcoin_input_utxo_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const sigOutput* txo = &env->tx->input[i].txo;\n    sha256_midstate midstate;\n    sha256_context ctx = sha256_init(midstate.s);\n    sha256_u64be(&ctx, txo->value);\n    sha256_hash(&ctx, &txo->scriptPubKey);\n    sha256_finalize(&ctx);\n    writeHash(dst, &midstate);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* input_sequences_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_input_sequences_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputSequencesHash);\n  return true;\n}\n\n/* input_annexes_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_input_annexes_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputAnnexesHash);\n  return true;\n}\n\n/* input_script_sigs_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_input_script_sigs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputScriptSigsHash);\n  return true;\n}\n\n/* inputs_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_inputs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputsHash);\n  return true;\n}\n\n/* input_hash : TWO^32 |- S TWO^256 */\nbool simplicity_bitcoin_input_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const sigInput* input = &env->tx->input[i];\n    sha256_midstate midstate;\n    sha256_context ctx = sha256_init(midstate.s);\n    sha256_hash(&ctx, &input->prevOutpoint.txid);\n    sha256_u32be(&ctx, input->prevOutpoint.ix);\n    sha256_u32be(&ctx, input->sequence);\n    if (input->hasAnnex) {\n      sha256_uchar(&ctx, 1);\n      sha256_hash(&ctx, &input->annexHash);\n    } else {\n      sha256_uchar(&ctx, 0);\n    }\n    sha256_finalize(&ctx);\n    writeHash(dst, &midstate);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* tx_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_tx_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->txHash);\n  return true;\n}\n\n/* tapleaf_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_tapleaf_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->tapLeafHash);\n  return true;\n}\n\n/* tappath_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_tappath_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->tappathHash);\n  return true;\n}\n\n/* tap_env_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_tap_env_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->tapEnvHash);\n  return true;\n}\n\n/* sig_all_hash : ONE |- TWO^256 */\nbool simplicity_bitcoin_sig_all_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->sigAllHash);\n  return true;\n}\n"
  },
  {
    "path": "C/bitcoin/bitcoinJets.h",
    "content": "/* This module defines primitives and jets that are specific to the Bitcoin application for Simplicity.\n */\n#ifndef SIMPLICITY_BITCOIN_BITCOINJETS_H\n#define SIMPLICITY_BITCOIN_BITCOINJETS_H\n\n#include \"../jets.h\"\n\n/* Jets for the Bitcoin application of Simplicity. */\nbool simplicity_bitcoin_version(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_lock_time(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_value(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_script_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_sequence(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_annex_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_output_value(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_output_script_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_fee(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_total_input_value(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_total_output_value(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_script_cmr(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_transaction_id(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_current_index(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_current_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_current_value(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_current_script_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_current_sequence(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_current_annex_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_current_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tapleaf_version(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tappath(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_internal_key(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_num_inputs(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_num_outputs(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tx_is_final(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tx_lock_height(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tx_lock_time(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tx_lock_distance(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tx_lock_duration(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_check_lock_height(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_check_lock_time(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_check_lock_distance(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_check_lock_duration(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_build_tapleaf_simplicity(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_build_tapbranch(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_build_taptweak(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_outpoint_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_annex_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_output_values_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_output_scripts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_outputs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_output_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_outpoints_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_values_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_scripts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_utxos_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_utxo_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_sequences_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_annexes_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_script_sigs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_inputs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_input_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tx_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tapleaf_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tappath_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_tap_env_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bitcoin_sig_all_hash(frameItem* dst, frameItem src, const txEnv* env);\n\n#endif\n"
  },
  {
    "path": "C/bitcoin/decodeBitcoinJets.inc",
    "content": "/* This file has been automatically generated. */\n\n{\n  int32_t code;\n  code = simplicity_decodeUptoMaxInt(stream);\n  if (code < 0) return (simplicity_err)code;\n  switch (code) {\n    case 1:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = SIG_ALL_HASH; return SIMPLICITY_NO_ERROR;\n        case 2: *result = TX_HASH; return SIMPLICITY_NO_ERROR;\n        case 3: *result = TAP_ENV_HASH; return SIMPLICITY_NO_ERROR;\n        case 4: *result = OUTPUTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 5: *result = INPUTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 6: *result = INPUT_UTXOS_HASH; return SIMPLICITY_NO_ERROR;\n        case 7: *result = OUTPUT_HASH; return SIMPLICITY_NO_ERROR;\n        case 8: *result = OUTPUT_VALUES_HASH; return SIMPLICITY_NO_ERROR;\n        case 9: *result = OUTPUT_SCRIPTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 10: *result = INPUT_HASH; return SIMPLICITY_NO_ERROR;\n        case 11: *result = INPUT_OUTPOINTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 12: *result = INPUT_SEQUENCES_HASH; return SIMPLICITY_NO_ERROR;\n        case 13: *result = INPUT_ANNEXES_HASH; return SIMPLICITY_NO_ERROR;\n        case 14: *result = INPUT_SCRIPT_SIGS_HASH; return SIMPLICITY_NO_ERROR;\n        case 15: *result = INPUT_UTXO_HASH; return SIMPLICITY_NO_ERROR;\n        case 16: *result = INPUT_VALUES_HASH; return SIMPLICITY_NO_ERROR;\n        case 17: *result = INPUT_SCRIPTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 18: *result = TAPLEAF_HASH; return SIMPLICITY_NO_ERROR;\n        case 19: *result = TAPPATH_HASH; return SIMPLICITY_NO_ERROR;\n        case 20: *result = OUTPOINT_HASH; return SIMPLICITY_NO_ERROR;\n        case 21: *result = ANNEX_HASH; return SIMPLICITY_NO_ERROR;\n        case 22: *result = BUILD_TAPLEAF_SIMPLICITY; return SIMPLICITY_NO_ERROR;\n        case 23: *result = BUILD_TAPBRANCH; return SIMPLICITY_NO_ERROR;\n        case 24: *result = BUILD_TAPTWEAK; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n    case 2:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = CHECK_LOCK_HEIGHT; return SIMPLICITY_NO_ERROR;\n        case 2: *result = CHECK_LOCK_TIME; return SIMPLICITY_NO_ERROR;\n        case 3: *result = CHECK_LOCK_DISTANCE; return SIMPLICITY_NO_ERROR;\n        case 4: *result = CHECK_LOCK_DURATION; return SIMPLICITY_NO_ERROR;\n        case 5: *result = TX_LOCK_HEIGHT; return SIMPLICITY_NO_ERROR;\n        case 6: *result = TX_LOCK_TIME; return SIMPLICITY_NO_ERROR;\n        case 7: *result = TX_LOCK_DISTANCE; return SIMPLICITY_NO_ERROR;\n        case 8: *result = TX_LOCK_DURATION; return SIMPLICITY_NO_ERROR;\n        case 9: *result = TX_IS_FINAL; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n    case 3:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = SCRIPT_CMR; return SIMPLICITY_NO_ERROR;\n        case 2: *result = INTERNAL_KEY; return SIMPLICITY_NO_ERROR;\n        case 3: *result = CURRENT_INDEX; return SIMPLICITY_NO_ERROR;\n        case 4: *result = NUM_INPUTS; return SIMPLICITY_NO_ERROR;\n        case 5: *result = NUM_OUTPUTS; return SIMPLICITY_NO_ERROR;\n        case 6: *result = LOCK_TIME; return SIMPLICITY_NO_ERROR;\n        case 7: *result = FEE; return SIMPLICITY_NO_ERROR;\n        case 8: *result = OUTPUT_VALUE; return SIMPLICITY_NO_ERROR;\n        case 9: *result = OUTPUT_SCRIPT_HASH; return SIMPLICITY_NO_ERROR;\n        case 10: *result = TOTAL_OUTPUT_VALUE; return SIMPLICITY_NO_ERROR;\n        case 11: *result = CURRENT_PREV_OUTPOINT; return SIMPLICITY_NO_ERROR;\n        case 12: *result = CURRENT_VALUE; return SIMPLICITY_NO_ERROR;\n        case 13: *result = CURRENT_SCRIPT_HASH; return SIMPLICITY_NO_ERROR;\n        case 14: *result = CURRENT_SEQUENCE; return SIMPLICITY_NO_ERROR;\n        case 15: *result = CURRENT_ANNEX_HASH; return SIMPLICITY_NO_ERROR;\n        case 16: *result = CURRENT_SCRIPT_SIG_HASH; return SIMPLICITY_NO_ERROR;\n        case 17: *result = INPUT_PREV_OUTPOINT; return SIMPLICITY_NO_ERROR;\n        case 18: *result = INPUT_VALUE; return SIMPLICITY_NO_ERROR;\n        case 19: *result = INPUT_SCRIPT_HASH; return SIMPLICITY_NO_ERROR;\n        case 20: *result = INPUT_SEQUENCE; return SIMPLICITY_NO_ERROR;\n        case 21: *result = INPUT_ANNEX_HASH; return SIMPLICITY_NO_ERROR;\n        case 22: *result = INPUT_SCRIPT_SIG_HASH; return SIMPLICITY_NO_ERROR;\n        case 23: *result = TOTAL_INPUT_VALUE; return SIMPLICITY_NO_ERROR;\n        case 24: *result = TAPLEAF_VERSION; return SIMPLICITY_NO_ERROR;\n        case 25: *result = TAPPATH; return SIMPLICITY_NO_ERROR;\n        case 26: *result = VERSION; return SIMPLICITY_NO_ERROR;\n        case 27: *result = TRANSACTION_ID; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n  }\n}"
  },
  {
    "path": "C/bitcoin/env.c",
    "content": "#include <simplicity/bitcoin/env.h>\n\n#include <stdalign.h>\n#include <stddef.h>\n#include <string.h>\n#include \"txEnv.h\"\n#include \"ops.h\"\n#include \"../sha256.h\"\n#include \"../simplicity_assert.h\"\n#include \"../simplicity_alloc.h\"\n\n#define PADDING(alignType, allocated) ((alignof(alignType) - (allocated) % alignof(alignType)) % alignof(alignType))\n\n/* Compute the SHA-256 hash of a scriptPubKey and write it into 'result'.\n *\n * Precondition: NULL != result;\n *               NULL != scriptPubKey;\n */\nstatic void hashBuffer(sha256_midstate* result, const rawBitcoinBuffer* buffer) {\n  sha256_context ctx = sha256_init(result->s);\n  sha256_uchars(&ctx, buffer->buf, buffer->len);\n  sha256_finalize(&ctx);\n}\n\n/* Initialize a 'sigOutput' from a 'rawOutput', copying or hashing the data as needed.\n *\n * Precondition: NULL != result;\n *               NULL != output;\n */\nstatic void copyOutput(sigOutput* result, const rawBitcoinOutput* output) {\n  hashBuffer(&result->scriptPubKey, &output->scriptPubKey);\n  result->value = output->value;\n}\n\n/* Initialize a 'sigInput' from a 'rawBitcoinInput', copying or hashing the data as needed.\n *\n * Precondition: NULL != result;\n *               NULL != input;\n */\nstatic void copyInput(sigInput* result, const rawBitcoinInput* input) {\n  *result = (sigInput){ .prevOutpoint = { .ix = input->prevIx }\n                      , .sequence = input->sequence\n                      , .hasAnnex = !!input->annex\n                      };\n\n  if (input->annex) hashBuffer(&result->annexHash, input->annex);\n  sha256_toMidstate(result->prevOutpoint.txid.s, input->prevTxid);\n  copyOutput(&result->txo, &input->txo);\n  hashBuffer(&result->scriptSigHash, &input->scriptSig);\n}\n\n/* Allocate and initialize a 'bitcoinTransaction' from a 'rawBitcoinTransaction', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: NULL != rawTx\n */\nextern bitcoinTransaction* simplicity_bitcoin_mallocTransaction(const rawBitcoinTransaction* rawTx) {\n  if (!rawTx) return NULL;\n\n  size_t allocationSize = sizeof(bitcoinTransaction);\n\n  const size_t pad1 = PADDING(sigInput, allocationSize);\n  if (SIZE_MAX - allocationSize < pad1) return NULL;\n  allocationSize += pad1;\n\n  /* Multiply by (size_t)1 to disable type-limits warning. */\n  if (SIZE_MAX / sizeof(sigInput) < (size_t)1 * rawTx->numInputs) return NULL;\n  if (SIZE_MAX - allocationSize < rawTx->numInputs * sizeof(sigInput)) return NULL;\n  allocationSize += rawTx->numInputs * sizeof(sigInput);\n\n  const size_t pad2 = PADDING(sigOutput, allocationSize);\n  if (SIZE_MAX - allocationSize < pad2) return NULL;\n  allocationSize += pad2;\n\n  /* Multiply by (size_t)1 to disable type-limits warning. */\n  if (SIZE_MAX / sizeof(sigOutput) < (size_t)1 * rawTx->numOutputs) return NULL;\n  if (SIZE_MAX - allocationSize < rawTx->numOutputs * sizeof(sigOutput)) return NULL;\n  allocationSize += rawTx->numOutputs * sizeof(sigOutput);\n\n  char *allocation = simplicity_malloc(allocationSize);\n  if (!allocation) return NULL;\n\n  /* Casting through void* to avoid warning about pointer alignment.\n   * Our padding is done carefully to ensure alignment.\n   */\n  bitcoinTransaction* const tx = (bitcoinTransaction*)(void*)allocation;\n  allocation += sizeof(bitcoinTransaction) + pad1;\n\n  sigInput* const input = (sigInput*)(void*)allocation;\n  allocation += rawTx->numInputs * sizeof(sigInput) + pad2;\n\n  sigOutput* const output = (sigOutput*)(void*)allocation;\n\n  *tx = (bitcoinTransaction){ .input = input\n                            , .output = output\n                            , .numInputs = rawTx->numInputs\n                            , .numOutputs = rawTx->numOutputs\n                            , .version = rawTx->version\n                            , .lockTime = rawTx->lockTime\n                            , .isFinal = true\n                            };\n\n  sha256_toMidstate(tx->txid.s, rawTx->txid);\n  {\n    sha256_context ctx_inputOutpointsHash = sha256_init(tx->inputOutpointsHash.s);\n    sha256_context ctx_inputValuesHash = sha256_init(tx->inputValuesHash.s);\n    sha256_context ctx_inputScriptsHash = sha256_init(tx->inputScriptsHash.s);\n    sha256_context ctx_inputUTXOsHash = sha256_init(tx->inputUTXOsHash.s);\n    sha256_context ctx_inputSequencesHash = sha256_init(tx->inputSequencesHash.s);\n    sha256_context ctx_inputAnnexesHash = sha256_init(tx->inputAnnexesHash.s);\n    sha256_context ctx_inputScriptSigsHash = sha256_init(tx->inputScriptSigsHash.s);\n    sha256_context ctx_inputsHash = sha256_init(tx->inputsHash.s);\n    for (uint_fast32_t i = 0; i < tx->numInputs; ++i) {\n      copyInput(&input[i], &rawTx->input[i]);\n      tx->totalInputValue += input[i].txo.value;\n      if (input[i].sequence < 0xffffffff) { tx->isFinal = false; }\n      sha256_hash(&ctx_inputOutpointsHash, &input[i].prevOutpoint.txid);\n      sha256_u32be(&ctx_inputOutpointsHash, input[i].prevOutpoint.ix);\n      sha256_u64be(&ctx_inputValuesHash, input[i].txo.value);\n      sha256_hash(&ctx_inputScriptsHash, &input[i].txo.scriptPubKey);\n      sha256_u32be(&ctx_inputSequencesHash, input[i].sequence);\n      if (input[i].hasAnnex) {\n        sha256_uchar(&ctx_inputAnnexesHash, 1);\n        sha256_hash(&ctx_inputAnnexesHash, &input[i].annexHash);\n      } else {\n        sha256_uchar(&ctx_inputAnnexesHash, 0);\n      }\n      sha256_hash(&ctx_inputScriptSigsHash, &input[i].scriptSigHash);\n    }\n    sha256_finalize(&ctx_inputOutpointsHash);\n    sha256_finalize(&ctx_inputValuesHash);\n    sha256_finalize(&ctx_inputScriptsHash);\n    sha256_finalize(&ctx_inputSequencesHash);\n    sha256_finalize(&ctx_inputAnnexesHash);\n    sha256_finalize(&ctx_inputScriptSigsHash);\n\n    sha256_hash(&ctx_inputUTXOsHash, &tx->inputValuesHash);\n    sha256_hash(&ctx_inputUTXOsHash, &tx->inputScriptsHash);\n    sha256_finalize(&ctx_inputUTXOsHash);\n\n    sha256_hash(&ctx_inputsHash, &tx->inputOutpointsHash);\n    sha256_hash(&ctx_inputsHash, &tx->inputSequencesHash);\n    sha256_hash(&ctx_inputsHash, &tx->inputAnnexesHash);\n    sha256_finalize(&ctx_inputsHash);\n  }\n\n  {\n    sha256_context ctx_outputValuesHash = sha256_init(tx->outputValuesHash.s);\n    sha256_context ctx_outputScriptsHash = sha256_init(tx->outputScriptsHash.s);\n    sha256_context ctx_outputsHash = sha256_init(tx->outputsHash.s);\n\n    for (uint_fast32_t i = 0; i < tx->numOutputs; ++i) {\n      copyOutput(&output[i], &rawTx->output[i]);\n      tx->totalOutputValue += output[i].value;\n      sha256_u64be(&ctx_outputValuesHash, output[i].value);\n      sha256_hash(&ctx_outputScriptsHash, &output[i].scriptPubKey);\n    }\n\n    sha256_finalize(&ctx_outputValuesHash);\n    sha256_finalize(&ctx_outputScriptsHash);\n\n    sha256_hash(&ctx_outputsHash, &tx->outputValuesHash);\n    sha256_hash(&ctx_outputsHash, &tx->outputScriptsHash);\n    sha256_finalize(&ctx_outputsHash);\n  }\n  {\n    sha256_context ctx_txHash = sha256_init(tx->txHash.s);\n    sha256_u32be(&ctx_txHash, tx->version);\n    sha256_u32be(&ctx_txHash, tx->lockTime);\n    sha256_hash(&ctx_txHash, &tx->inputsHash);\n    sha256_hash(&ctx_txHash, &tx->outputsHash);\n    sha256_hash(&ctx_txHash, &tx->inputUTXOsHash);\n    sha256_finalize(&ctx_txHash);\n  }\n\n  return tx;\n}\n\n/* Free a pointer to 'bitcoinTransaction'.\n */\nextern void simplicity_bitcoin_freeTransaction(bitcoinTransaction* tx) {\n  simplicity_free(tx);\n}\n\n/* Allocate and initialize a 'bitcoinTapEnv' from a 'rawBitcoinTapEnv', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: *rawEnv is well-formed (i.e. rawEnv->pathLen <= 128.)\n */\nextern bitcoinTapEnv* simplicity_bitcoin_mallocTapEnv(const rawBitcoinTapEnv* rawEnv) {\n  if (!rawEnv) return NULL;\n  if (128 < rawEnv->pathLen) return NULL;\n\n  size_t allocationSize = sizeof(bitcoinTapEnv);\n\n  const size_t numMidstate = rawEnv->pathLen;\n  const size_t pad1 = PADDING(sha256_midstate, allocationSize);\n\n  if (numMidstate) {\n    if (SIZE_MAX - allocationSize < pad1) return NULL;\n    allocationSize += pad1;\n\n    if (SIZE_MAX / sizeof(sha256_midstate) < numMidstate) return NULL;\n    if (SIZE_MAX - allocationSize < numMidstate * sizeof(sha256_midstate)) return NULL;\n    allocationSize += numMidstate * sizeof(sha256_midstate);\n  }\n\n  char *allocation = simplicity_malloc(allocationSize);\n  if (!allocation) return NULL;\n\n  /* Casting through void* to avoid warning about pointer alignment.\n   * Our padding is done carefully to ensure alignment.\n   */\n  bitcoinTapEnv* const env = (bitcoinTapEnv*)(void*)allocation;\n  sha256_midstate* path = NULL;\n  sha256_midstate internalKey;\n\n  sha256_toMidstate(internalKey.s,  &rawEnv->controlBlock[1]);\n\n  if (numMidstate)  {\n    allocation += sizeof(bitcoinTapEnv) + pad1;\n\n    if (rawEnv->pathLen) {\n      path = (sha256_midstate*)(void*)allocation;\n    }\n  }\n\n  *env = (bitcoinTapEnv){ .leafVersion = rawEnv->controlBlock[0] & 0xfe\n                        , .internalKey = internalKey\n                        , .path = path\n                        , .pathLen = rawEnv->pathLen\n                        };\n  sha256_toMidstate(env->scriptCMR.s, rawEnv->scriptCMR);\n\n  {\n    sha256_context ctx = sha256_init(env->tappathHash.s);\n    for (int i = 0; i < env->pathLen; ++i) {\n      sha256_toMidstate(path[i].s,  &rawEnv->controlBlock[33+32*i]);\n      sha256_hash(&ctx, &path[i]);\n    }\n    sha256_finalize(&ctx);\n  }\n\n  env->tapLeafHash = simplicity_bitcoin_make_tapleaf(env->leafVersion, &env->scriptCMR);\n\n  {\n    sha256_context ctx = sha256_init(env->tapEnvHash.s);\n    sha256_hash(&ctx, &env->tapLeafHash);\n    sha256_hash(&ctx, &env->tappathHash);\n    sha256_hash(&ctx, &env->internalKey);\n    sha256_finalize(&ctx);\n  }\n  return env;\n}\n\n/* Free a pointer to 'bitcoinTapEnv'.\n */\nextern void simplicity_bitcoin_freeTapEnv(bitcoinTapEnv* env) {\n  simplicity_free(env);\n}\n"
  },
  {
    "path": "C/bitcoin/ops.c",
    "content": "#include \"ops.h\"\n\n/* Compute Bitcoins's tapleaf hash from a tapleaf version and a 256-bit script value.\n * A reimplementation of ComputeTapleafHash from Bitcoin's 'interpreter.cpp'.\n * Only 256-bit script values are supported as that is the size used for Simplicity CMRs.\n *\n * Precondition: NULL != cmr;\n */\nsha256_midstate simplicity_bitcoin_make_tapleaf(unsigned char version, const sha256_midstate* cmr) {\n  sha256_midstate result;\n  sha256_midstate tapleafTag;\n  {\n    static unsigned char tagName[] = \"TapLeaf\";\n    sha256_context ctx = sha256_init(tapleafTag.s);\n    sha256_uchars(&ctx, tagName, sizeof(tagName) - 1);\n    sha256_finalize(&ctx);\n  }\n  sha256_context ctx = sha256_init(result.s);\n  sha256_hash(&ctx, &tapleafTag);\n  sha256_hash(&ctx, &tapleafTag);\n  sha256_uchar(&ctx, version);\n  sha256_uchar(&ctx, 32);\n  sha256_hash(&ctx, cmr);\n  sha256_finalize(&ctx);\n\n  return result;\n}\n\n/* Compute Bitcoins's tapbrach hash from two branches.\n *\n * Precondition: NULL != a;\n *               NULL != b;\n */\nsha256_midstate simplicity_bitcoin_make_tapbranch(const sha256_midstate* a, const sha256_midstate* b) {\n  sha256_midstate result;\n  sha256_midstate tapbranchTag;\n  {\n    static unsigned char tagName[] = \"TapBranch\";\n    sha256_context ctx = sha256_init(tapbranchTag.s);\n    sha256_uchars(&ctx, tagName, sizeof(tagName) - 1);\n    sha256_finalize(&ctx);\n  }\n  sha256_context ctx = sha256_init(result.s);\n  sha256_hash(&ctx, &tapbranchTag);\n  sha256_hash(&ctx, &tapbranchTag);\n  if (sha256_cmp_be(a, b) < 0) {\n    sha256_hash(&ctx, a);\n    sha256_hash(&ctx, b);\n  } else {\n    sha256_hash(&ctx, b);\n    sha256_hash(&ctx, a);\n  }\n  sha256_finalize(&ctx);\n\n  return result;\n}\n"
  },
  {
    "path": "C/bitcoin/ops.h",
    "content": "/* This module defines operations used in the construction the environment ('txEnv') and some jets.\n */\n#ifndef SIMPLICITY_BITCOIN_OPS_H\n#define SIMPLICITY_BITCOIN_OPS_H\n\n#include \"../sha256.h\"\n\n/* Compute Bitcoin's tapleaf hash from a tapleaf version and a 256-bit script value.\n * A reimplementation of ComputeTapleafHash from Bitcoin's 'interpreter.cpp'.\n * Only 256-bit script values are supported as that is the size used for Simplicity CMRs.\n *\n * Precondition: NULL != cmr;\n */\nsha256_midstate simplicity_bitcoin_make_tapleaf(unsigned char version, const sha256_midstate* cmr);\n\n/* Compute an Bitcoin's tapbrach hash from two branches.\n *\n * Precondition: NULL != a;\n *               NULL != b;\n */\nsha256_midstate simplicity_bitcoin_make_tapbranch(const sha256_midstate* a, const sha256_midstate* b);\n\n#endif\n"
  },
  {
    "path": "C/bitcoin/primitive.c",
    "content": "/* This module implements the 'primitive.h' interface for the Bitcoin application of Simplicity.\n */\n#include \"primitive.h\"\n\n#include \"bitcoinJets.h\"\n#include \"../limitations.h\"\n#include \"../simplicity_alloc.h\"\n#include \"../simplicity_assert.h\"\n\n/* An enumeration of all the types we need to construct to specify the input and output types of all jets created by 'decodeJet'. */\nenum TypeNamesForJets {\n#include \"primitiveEnumTy.inc\"\n  NumberOfTypeNames\n};\n\n/* Allocate a fresh set of unification variables bound to at least all the types necessary\n * for all the jets that can be created by 'decodeJet', and also the type 'TWO^256',\n * and also allocate space for 'extra_var_len' many unification variables.\n * Return the number of non-trivial bindings created.\n *\n * However, if malloc fails, then return 0.\n *\n * Precondition: NULL != bound_var;\n *               NULL != word256_ix;\n *               NULL != extra_var_start;\n *               extra_var_len <= 6*DAG_LEN_MAX;\n *\n * Postcondition: Either '*bound_var == NULL' and the function returns 0\n *                or 'unification_var (*bound_var)[*extra_var_start + extra_var_len]' is an array of unification variables\n *                   such that for any 'jet : A |- B' there is some 'i < *extra_var_start' and 'j < *extra_var_start' such that\n *                      '(*bound_var)[i]' is bound to 'A' and '(*bound_var)[j]' is bound to 'B'\n *                   and, '*word256_ix < *extra_var_start' and '(*bound_var)[*word256_ix]' is bound the type 'TWO^256'\n */\nsize_t simplicity_bitcoin_mallocBoundVars(unification_var** bound_var, size_t* word256_ix, size_t* extra_var_start, size_t extra_var_len) {\n  static_assert(1 <= NumberOfTypeNames, \"Missing TypeNamesForJets.\");\n  static_assert(NumberOfTypeNames <= NUMBER_OF_TYPENAMES_MAX, \"Too many TypeNamesForJets.\");\n  static_assert(DAG_LEN_MAX <= (SIZE_MAX - NumberOfTypeNames) / 6, \"NumberOfTypeNames + 6*DAG_LEN_MAX doesn't fit in size_t\");\n  static_assert(NumberOfTypeNames + 6*DAG_LEN_MAX <= SIZE_MAX/sizeof(unification_var) , \"bound_var array too large\");\n  static_assert(NumberOfTypeNames + 6*DAG_LEN_MAX - 1 <= UINT32_MAX, \"bound_var array index doesn't fit in uint32_t\");\n  simplicity_assert(extra_var_len <= 6*DAG_LEN_MAX);\n  *bound_var = simplicity_malloc((NumberOfTypeNames + extra_var_len) * sizeof(unification_var));\n  if (!(*bound_var)) return 0;\n#include \"primitiveInitTy.inc\"\n  *word256_ix = ty_w256;\n  *extra_var_start = NumberOfTypeNames;\n\n  /* 'ty_u' is a trivial binding, so we made 'NumberOfTypeNames - 1' non-trivial bindings. */\n  return NumberOfTypeNames - 1;\n};\n\n/* An enumeration of the names of Bitcoin specific jets and primitives. */\ntypedef enum jetName\n{\n#include \"primitiveEnumJet.inc\"\n  NUMBER_OF_JET_NAMES\n} jetName;\n\n/* Decode an Bitcoin specific jet name from 'stream' into 'result'.\n * All jets begin with a bit prefix of '1' which needs to have already been consumed from the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the stream's prefix doesn't match any valid code for a jet.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'result' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: NULL != result\n *               NULL != stream\n */\nstatic simplicity_err decodePrimitive(jetName* result, bitstream* stream) {\n  int32_t bit = read1Bit(stream);\n  if (bit < 0) return (simplicity_err)bit;\n  if (!bit) {\n    /* Core jets */\n#include \"../decodeCoreJets.inc\"\n    return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n  } else {\n    /* Bitcoin jets */\n#include \"decodeBitcoinJets.inc\"\n    return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n  }\n}\n\n/* Return a copy of the Simplicity node corresponding to the given Bitcoin specific jet 'name'. */\nstatic dag_node jetNode(jetName name) {\n  static const dag_node jet_node[] = {\n    #include \"primitiveJetNode.inc\"\n  };\n\n  return jet_node[name];\n}\n\n/* Decode a Bitcoin specific jet from 'stream' into 'node'.\n * All jets begin with a bit prefix of '1' which needs to have already been consumed from the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the stream's prefix doesn't match any valid code for a jet.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'dag' may be modified.\n * Returns 'SIMPLICITY_NO_ERR' if successful.\n *\n * Precondition: NULL != node\n *               NULL != stream\n */\nsimplicity_err simplicity_bitcoin_decodeJet(dag_node* node, bitstream* stream) {\n  jetName name;\n  simplicity_err error = decodePrimitive(&name, stream);\n  if (!IS_OK(error)) return error;\n  *node = jetNode(name);\n  return SIMPLICITY_NO_ERROR;\n}\n"
  },
  {
    "path": "C/bitcoin/primitive.h",
    "content": "/* Implements the primitive.h interface for the Bitcoin Simplicity application.\n */\n#ifndef SIMPLICITY_BITCOIN_PRIMITIVE_H\n#define SIMPLICITY_BITCOIN_PRIMITIVE_H\n\n#include \"../bitstream.h\"\n#include \"../typeInference.h\"\n\n/* Allocate a fresh set of unification variables bound to at least all the types necessary\n * for all the jets that can be created by 'decodeJet', and also the type 'TWO^256',\n * and also allocate space for 'extra_var_len' many unification variables.\n * Return the number of non-trivial bindings created.\n *\n * However, if malloc fails, then return 0.\n *\n * Precondition: NULL != bound_var;\n *               NULL != word256_ix;\n *               NULL != extra_var_start;\n *               extra_var_len <= 6*DAG_LEN_MAX;\n *\n * Postcondition: Either '*bound_var == NULL' and the function returns 0\n *                or 'unification_var (*bound_var)[*extra_var_start + extra_var_len]' is an array of unification variables\n *                   such that for any 'jet : A |- B' there is some 'i < *extra_var_start' and 'j < *extra_var_start' such that\n *                      '(*bound_var)[i]' is bound to 'A' and '(*bound_var)[j]' is bound to 'B'\n *                   and, '*word256_ix < *extra_var_start' and '(*bound_var)[*word256_ix]' is bound the type 'TWO^256'\n */\nsize_t simplicity_bitcoin_mallocBoundVars(unification_var** bound_var, size_t* word256_ix, size_t* extra_var_start, size_t extra_var_len);\n\n/* Decode a Bitcoin specific jet from 'stream' into 'node'.\n * All jets begin with a bit prefix of '1' which needs to have already been consumed from the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the stream's prefix doesn't match any valid code for a jet.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'dag' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: NULL != node\n *               NULL != stream\n */\nsimplicity_err simplicity_bitcoin_decodeJet(dag_node* node, bitstream* stream);\n\n#endif\n"
  },
  {
    "path": "C/bitcoin/primitiveEnumJet.inc",
    "content": "/* This file has been automatically generated. */\nADD_16,\nADD_32,\nADD_64,\nADD_8,\nALL_16,\nALL_32,\nALL_64,\nALL_8,\nAND_1,\nAND_16,\nAND_32,\nAND_64,\nAND_8,\nANNEX_HASH,\nBIP_0340_VERIFY,\nBUILD_TAPBRANCH,\nBUILD_TAPLEAF_SIMPLICITY,\nBUILD_TAPTWEAK,\nCH_1,\nCH_16,\nCH_32,\nCH_64,\nCH_8,\nCHECK_LOCK_DISTANCE,\nCHECK_LOCK_DURATION,\nCHECK_LOCK_HEIGHT,\nCHECK_LOCK_TIME,\nCHECK_SIG_VERIFY,\nCOMPLEMENT_1,\nCOMPLEMENT_16,\nCOMPLEMENT_32,\nCOMPLEMENT_64,\nCOMPLEMENT_8,\nCURRENT_ANNEX_HASH,\nCURRENT_INDEX,\nCURRENT_PREV_OUTPOINT,\nCURRENT_SCRIPT_HASH,\nCURRENT_SCRIPT_SIG_HASH,\nCURRENT_SEQUENCE,\nCURRENT_VALUE,\nDECOMPRESS,\nDECREMENT_16,\nDECREMENT_32,\nDECREMENT_64,\nDECREMENT_8,\nDIV_MOD_128_64,\nDIV_MOD_16,\nDIV_MOD_32,\nDIV_MOD_64,\nDIV_MOD_8,\nDIVIDE_16,\nDIVIDE_32,\nDIVIDE_64,\nDIVIDE_8,\nDIVIDES_16,\nDIVIDES_32,\nDIVIDES_64,\nDIVIDES_8,\nEQ_1,\nEQ_16,\nEQ_256,\nEQ_32,\nEQ_64,\nEQ_8,\nFE_ADD,\nFE_INVERT,\nFE_IS_ODD,\nFE_IS_ZERO,\nFE_MULTIPLY,\nFE_MULTIPLY_BETA,\nFE_NEGATE,\nFE_NORMALIZE,\nFE_SQUARE,\nFE_SQUARE_ROOT,\nFEE,\nFULL_ADD_16,\nFULL_ADD_32,\nFULL_ADD_64,\nFULL_ADD_8,\nFULL_DECREMENT_16,\nFULL_DECREMENT_32,\nFULL_DECREMENT_64,\nFULL_DECREMENT_8,\nFULL_INCREMENT_16,\nFULL_INCREMENT_32,\nFULL_INCREMENT_64,\nFULL_INCREMENT_8,\nFULL_LEFT_SHIFT_16_1,\nFULL_LEFT_SHIFT_16_2,\nFULL_LEFT_SHIFT_16_4,\nFULL_LEFT_SHIFT_16_8,\nFULL_LEFT_SHIFT_32_1,\nFULL_LEFT_SHIFT_32_16,\nFULL_LEFT_SHIFT_32_2,\nFULL_LEFT_SHIFT_32_4,\nFULL_LEFT_SHIFT_32_8,\nFULL_LEFT_SHIFT_64_1,\nFULL_LEFT_SHIFT_64_16,\nFULL_LEFT_SHIFT_64_2,\nFULL_LEFT_SHIFT_64_32,\nFULL_LEFT_SHIFT_64_4,\nFULL_LEFT_SHIFT_64_8,\nFULL_LEFT_SHIFT_8_1,\nFULL_LEFT_SHIFT_8_2,\nFULL_LEFT_SHIFT_8_4,\nFULL_MULTIPLY_16,\nFULL_MULTIPLY_32,\nFULL_MULTIPLY_64,\nFULL_MULTIPLY_8,\nFULL_RIGHT_SHIFT_16_1,\nFULL_RIGHT_SHIFT_16_2,\nFULL_RIGHT_SHIFT_16_4,\nFULL_RIGHT_SHIFT_16_8,\nFULL_RIGHT_SHIFT_32_1,\nFULL_RIGHT_SHIFT_32_16,\nFULL_RIGHT_SHIFT_32_2,\nFULL_RIGHT_SHIFT_32_4,\nFULL_RIGHT_SHIFT_32_8,\nFULL_RIGHT_SHIFT_64_1,\nFULL_RIGHT_SHIFT_64_16,\nFULL_RIGHT_SHIFT_64_2,\nFULL_RIGHT_SHIFT_64_32,\nFULL_RIGHT_SHIFT_64_4,\nFULL_RIGHT_SHIFT_64_8,\nFULL_RIGHT_SHIFT_8_1,\nFULL_RIGHT_SHIFT_8_2,\nFULL_RIGHT_SHIFT_8_4,\nFULL_SUBTRACT_16,\nFULL_SUBTRACT_32,\nFULL_SUBTRACT_64,\nFULL_SUBTRACT_8,\nGE_IS_ON_CURVE,\nGE_NEGATE,\nGEJ_ADD,\nGEJ_DOUBLE,\nGEJ_EQUIV,\nGEJ_GE_ADD,\nGEJ_GE_ADD_EX,\nGEJ_GE_EQUIV,\nGEJ_INFINITY,\nGEJ_IS_INFINITY,\nGEJ_IS_ON_CURVE,\nGEJ_NEGATE,\nGEJ_NORMALIZE,\nGEJ_RESCALE,\nGEJ_X_EQUIV,\nGEJ_Y_IS_ODD,\nGENERATE,\nHASH_TO_CURVE,\nHIGH_1,\nHIGH_16,\nHIGH_32,\nHIGH_64,\nHIGH_8,\nINCREMENT_16,\nINCREMENT_32,\nINCREMENT_64,\nINCREMENT_8,\nINPUT_ANNEX_HASH,\nINPUT_ANNEXES_HASH,\nINPUT_HASH,\nINPUT_OUTPOINTS_HASH,\nINPUT_PREV_OUTPOINT,\nINPUT_SCRIPT_HASH,\nINPUT_SCRIPT_SIG_HASH,\nINPUT_SCRIPT_SIGS_HASH,\nINPUT_SCRIPTS_HASH,\nINPUT_SEQUENCE,\nINPUT_SEQUENCES_HASH,\nINPUT_UTXO_HASH,\nINPUT_UTXOS_HASH,\nINPUT_VALUE,\nINPUT_VALUES_HASH,\nINPUTS_HASH,\nINTERNAL_KEY,\nIS_ONE_16,\nIS_ONE_32,\nIS_ONE_64,\nIS_ONE_8,\nIS_ZERO_16,\nIS_ZERO_32,\nIS_ZERO_64,\nIS_ZERO_8,\nLE_16,\nLE_32,\nLE_64,\nLE_8,\nLEFT_EXTEND_16_32,\nLEFT_EXTEND_16_64,\nLEFT_EXTEND_1_16,\nLEFT_EXTEND_1_32,\nLEFT_EXTEND_1_64,\nLEFT_EXTEND_1_8,\nLEFT_EXTEND_32_64,\nLEFT_EXTEND_8_16,\nLEFT_EXTEND_8_32,\nLEFT_EXTEND_8_64,\nLEFT_PAD_HIGH_16_32,\nLEFT_PAD_HIGH_16_64,\nLEFT_PAD_HIGH_1_16,\nLEFT_PAD_HIGH_1_32,\nLEFT_PAD_HIGH_1_64,\nLEFT_PAD_HIGH_1_8,\nLEFT_PAD_HIGH_32_64,\nLEFT_PAD_HIGH_8_16,\nLEFT_PAD_HIGH_8_32,\nLEFT_PAD_HIGH_8_64,\nLEFT_PAD_LOW_16_32,\nLEFT_PAD_LOW_16_64,\nLEFT_PAD_LOW_1_16,\nLEFT_PAD_LOW_1_32,\nLEFT_PAD_LOW_1_64,\nLEFT_PAD_LOW_1_8,\nLEFT_PAD_LOW_32_64,\nLEFT_PAD_LOW_8_16,\nLEFT_PAD_LOW_8_32,\nLEFT_PAD_LOW_8_64,\nLEFT_ROTATE_16,\nLEFT_ROTATE_32,\nLEFT_ROTATE_64,\nLEFT_ROTATE_8,\nLEFT_SHIFT_16,\nLEFT_SHIFT_32,\nLEFT_SHIFT_64,\nLEFT_SHIFT_8,\nLEFT_SHIFT_WITH_16,\nLEFT_SHIFT_WITH_32,\nLEFT_SHIFT_WITH_64,\nLEFT_SHIFT_WITH_8,\nLEFTMOST_16_1,\nLEFTMOST_16_2,\nLEFTMOST_16_4,\nLEFTMOST_16_8,\nLEFTMOST_32_1,\nLEFTMOST_32_16,\nLEFTMOST_32_2,\nLEFTMOST_32_4,\nLEFTMOST_32_8,\nLEFTMOST_64_1,\nLEFTMOST_64_16,\nLEFTMOST_64_2,\nLEFTMOST_64_32,\nLEFTMOST_64_4,\nLEFTMOST_64_8,\nLEFTMOST_8_1,\nLEFTMOST_8_2,\nLEFTMOST_8_4,\nLINEAR_COMBINATION_1,\nLINEAR_VERIFY_1,\nLOCK_TIME,\nLOW_1,\nLOW_16,\nLOW_32,\nLOW_64,\nLOW_8,\nLT_16,\nLT_32,\nLT_64,\nLT_8,\nMAJ_1,\nMAJ_16,\nMAJ_32,\nMAJ_64,\nMAJ_8,\nMAX_16,\nMAX_32,\nMAX_64,\nMAX_8,\nMEDIAN_16,\nMEDIAN_32,\nMEDIAN_64,\nMEDIAN_8,\nMIN_16,\nMIN_32,\nMIN_64,\nMIN_8,\nMODULO_16,\nMODULO_32,\nMODULO_64,\nMODULO_8,\nMULTIPLY_16,\nMULTIPLY_32,\nMULTIPLY_64,\nMULTIPLY_8,\nNEGATE_16,\nNEGATE_32,\nNEGATE_64,\nNEGATE_8,\nNUM_INPUTS,\nNUM_OUTPUTS,\nONE_16,\nONE_32,\nONE_64,\nONE_8,\nOR_1,\nOR_16,\nOR_32,\nOR_64,\nOR_8,\nOUTPOINT_HASH,\nOUTPUT_HASH,\nOUTPUT_SCRIPT_HASH,\nOUTPUT_SCRIPTS_HASH,\nOUTPUT_VALUE,\nOUTPUT_VALUES_HASH,\nOUTPUTS_HASH,\nPARSE_LOCK,\nPARSE_SEQUENCE,\nPOINT_VERIFY_1,\nRIGHT_EXTEND_16_32,\nRIGHT_EXTEND_16_64,\nRIGHT_EXTEND_32_64,\nRIGHT_EXTEND_8_16,\nRIGHT_EXTEND_8_32,\nRIGHT_EXTEND_8_64,\nRIGHT_PAD_HIGH_16_32,\nRIGHT_PAD_HIGH_16_64,\nRIGHT_PAD_HIGH_1_16,\nRIGHT_PAD_HIGH_1_32,\nRIGHT_PAD_HIGH_1_64,\nRIGHT_PAD_HIGH_1_8,\nRIGHT_PAD_HIGH_32_64,\nRIGHT_PAD_HIGH_8_16,\nRIGHT_PAD_HIGH_8_32,\nRIGHT_PAD_HIGH_8_64,\nRIGHT_PAD_LOW_16_32,\nRIGHT_PAD_LOW_16_64,\nRIGHT_PAD_LOW_1_16,\nRIGHT_PAD_LOW_1_32,\nRIGHT_PAD_LOW_1_64,\nRIGHT_PAD_LOW_1_8,\nRIGHT_PAD_LOW_32_64,\nRIGHT_PAD_LOW_8_16,\nRIGHT_PAD_LOW_8_32,\nRIGHT_PAD_LOW_8_64,\nRIGHT_ROTATE_16,\nRIGHT_ROTATE_32,\nRIGHT_ROTATE_64,\nRIGHT_ROTATE_8,\nRIGHT_SHIFT_16,\nRIGHT_SHIFT_32,\nRIGHT_SHIFT_64,\nRIGHT_SHIFT_8,\nRIGHT_SHIFT_WITH_16,\nRIGHT_SHIFT_WITH_32,\nRIGHT_SHIFT_WITH_64,\nRIGHT_SHIFT_WITH_8,\nRIGHTMOST_16_1,\nRIGHTMOST_16_2,\nRIGHTMOST_16_4,\nRIGHTMOST_16_8,\nRIGHTMOST_32_1,\nRIGHTMOST_32_16,\nRIGHTMOST_32_2,\nRIGHTMOST_32_4,\nRIGHTMOST_32_8,\nRIGHTMOST_64_1,\nRIGHTMOST_64_16,\nRIGHTMOST_64_2,\nRIGHTMOST_64_32,\nRIGHTMOST_64_4,\nRIGHTMOST_64_8,\nRIGHTMOST_8_1,\nRIGHTMOST_8_2,\nRIGHTMOST_8_4,\nSCALAR_ADD,\nSCALAR_INVERT,\nSCALAR_IS_ZERO,\nSCALAR_MULTIPLY,\nSCALAR_MULTIPLY_LAMBDA,\nSCALAR_NEGATE,\nSCALAR_NORMALIZE,\nSCALAR_SQUARE,\nSCALE,\nSCRIPT_CMR,\nSHA_256_BLOCK,\nSHA_256_CTX_8_ADD_1,\nSHA_256_CTX_8_ADD_128,\nSHA_256_CTX_8_ADD_16,\nSHA_256_CTX_8_ADD_2,\nSHA_256_CTX_8_ADD_256,\nSHA_256_CTX_8_ADD_32,\nSHA_256_CTX_8_ADD_4,\nSHA_256_CTX_8_ADD_512,\nSHA_256_CTX_8_ADD_64,\nSHA_256_CTX_8_ADD_8,\nSHA_256_CTX_8_ADD_BUFFER_511,\nSHA_256_CTX_8_FINALIZE,\nSHA_256_CTX_8_INIT,\nSHA_256_IV,\nSIG_ALL_HASH,\nSOME_1,\nSOME_16,\nSOME_32,\nSOME_64,\nSOME_8,\nSUBTRACT_16,\nSUBTRACT_32,\nSUBTRACT_64,\nSUBTRACT_8,\nSWU,\nTAP_ENV_HASH,\nTAPDATA_INIT,\nTAPLEAF_HASH,\nTAPLEAF_VERSION,\nTAPPATH,\nTAPPATH_HASH,\nTOTAL_INPUT_VALUE,\nTOTAL_OUTPUT_VALUE,\nTRANSACTION_ID,\nTX_HASH,\nTX_IS_FINAL,\nTX_LOCK_DISTANCE,\nTX_LOCK_DURATION,\nTX_LOCK_HEIGHT,\nTX_LOCK_TIME,\nVERIFY,\nVERSION,\nXOR_1,\nXOR_16,\nXOR_32,\nXOR_64,\nXOR_8,\nXOR_XOR_1,\nXOR_XOR_16,\nXOR_XOR_32,\nXOR_XOR_64,\nXOR_XOR_8,\n"
  },
  {
    "path": "C/bitcoin/primitiveEnumTy.inc",
    "content": "/* This file has been automatically generated. */\nty_u = 0,\nty_b = 1,\nty_w2 = 2,\nty_w4 = 3,\nty_w8 = 4,\nty_w16 = 5,\nty_w32 = 6,\nty_w64 = 7,\nty_w128 = 8,\nty_w256 = 9,\nty_w512 = 10,\nty_w1Ki = 11,\nty_w2Ki = 12,\nty_w4Ki = 13,\nty_w8Ki = 14,\nty_w16Ki = 15,\nty_w32Ki = 16,\nty_w64Ki = 17,\nty_w128Ki = 18,\nty_w256Ki = 19,\nty_w512Ki = 20,\nty_w1Mi = 21,\nty_w2Mi = 22,\nty_w4Mi = 23,\nty_w8Mi = 24,\nty_w16Mi = 25,\nty_w32Mi = 26,\nty_w64Mi = 27,\nty_w128Mi = 28,\nty_w256Mi = 29,\nty_w512Mi = 30,\nty_w1Gi = 31,\nty_w2Gi = 32,\nty_mw8,\nty_mw16,\nty_mw32,\nty_mw64,\nty_mw128,\nty_mw256,\nty_mw512,\nty_mw1Ki,\nty_mw2Ki,\nty_mmw256,\nty_msw16w16,\nty_mpw256w32,\nty_sw16w16,\nty_sw32w32,\nty_pbw2,\nty_pbw8,\nty_pbw16,\nty_pbw32,\nty_pbw64,\nty_pbw128,\nty_pbw256,\nty_pbpw4w8,\nty_pbpw4w16,\nty_pbpw8w32,\nty_pbpw8w64,\nty_pw2w8,\nty_pw2w16,\nty_pw2w32,\nty_pw2w64,\nty_pw4w8,\nty_pw4w16,\nty_pw4w32,\nty_pw4w64,\nty_pw8b,\nty_pw8w2,\nty_pw8w4,\nty_pw8w16,\nty_pw8w32,\nty_pw8w64,\nty_pw16b,\nty_pw16w2,\nty_pw16w4,\nty_pw16w8,\nty_pw16w32,\nty_pw16w64,\nty_pw32b,\nty_pw32w2,\nty_pw32w4,\nty_pw32w8,\nty_pw32w16,\nty_pw32w64,\nty_pw64b,\nty_pw64w2,\nty_pw64w4,\nty_pw64w8,\nty_pw64w16,\nty_pw64w32,\nty_pw64w128,\nty_pw64w256,\nty_pw128w64,\nty_pw256w32,\nty_pw256w512,\nty_pw256pbw256,\nty_pw256pw512w256,\nty_pw512w256,\nty_pmw16mw8,\nty_pmw32pmw16mw8,\nty_pmw64pmw32pmw16mw8,\nty_pmw128pmw64pmw32pmw16mw8,\nty_pmw256pmw128pmw64pmw32pmw16mw8,\nty_pmw512pmw256pmw128pmw64pmw32pmw16mw8,\nty_pmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8,\nty_pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8,\nty_ppw256w512w256,\nty_ppw256w512w512,\nty_ppw256pbw256w256,\nty_ppw256pw512w256w256,\nty_ppw512w256w256,\nty_ppw512w256w512,\nty_ppw512w256pw512w256,\nty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256,\nty_pppw256w512w256w512,\nty_pppw256pbw256w256pbw256,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w8,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w16,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w32,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w64,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w128,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w256,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w512,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w1Ki,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w2Ki,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w4Ki,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mw256,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pw256w32,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8,\n"
  },
  {
    "path": "C/bitcoin/primitiveInitTy.inc",
    "content": "/* This file has been automatically generated. */\n(*bound_var)[ty_u] = (unification_var){ .isBound = true, .bound = { .kind = ONE }};\n(*bound_var)[ty_b] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_u] } }};\n(*bound_var)[ty_w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_w128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_w1Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_w2Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w1Ki], &(*bound_var)[ty_w1Ki] } }};\n(*bound_var)[ty_w4Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2Ki], &(*bound_var)[ty_w2Ki] } }};\n(*bound_var)[ty_w8Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4Ki], &(*bound_var)[ty_w4Ki] } }};\n(*bound_var)[ty_w16Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8Ki], &(*bound_var)[ty_w8Ki] } }};\n(*bound_var)[ty_w32Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16Ki], &(*bound_var)[ty_w16Ki] } }};\n(*bound_var)[ty_w64Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32Ki], &(*bound_var)[ty_w32Ki] } }};\n(*bound_var)[ty_w128Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64Ki], &(*bound_var)[ty_w64Ki] } }};\n(*bound_var)[ty_w256Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128Ki], &(*bound_var)[ty_w128Ki] } }};\n(*bound_var)[ty_w512Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256Ki], &(*bound_var)[ty_w256Ki] } }};\n(*bound_var)[ty_w1Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512Ki], &(*bound_var)[ty_w512Ki] } }};\n(*bound_var)[ty_w2Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w1Mi], &(*bound_var)[ty_w1Mi] } }};\n(*bound_var)[ty_w4Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2Mi], &(*bound_var)[ty_w2Mi] } }};\n(*bound_var)[ty_w8Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4Mi], &(*bound_var)[ty_w4Mi] } }};\n(*bound_var)[ty_w16Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8Mi], &(*bound_var)[ty_w8Mi] } }};\n(*bound_var)[ty_w32Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16Mi], &(*bound_var)[ty_w16Mi] } }};\n(*bound_var)[ty_w64Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32Mi], &(*bound_var)[ty_w32Mi] } }};\n(*bound_var)[ty_w128Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64Mi], &(*bound_var)[ty_w64Mi] } }};\n(*bound_var)[ty_w256Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128Mi], &(*bound_var)[ty_w128Mi] } }};\n(*bound_var)[ty_w512Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256Mi], &(*bound_var)[ty_w256Mi] } }};\n(*bound_var)[ty_w1Gi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512Mi], &(*bound_var)[ty_w512Mi] } }};\n(*bound_var)[ty_w2Gi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w1Gi], &(*bound_var)[ty_w1Gi] } }};\n(*bound_var)[ty_mw8] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_mw16] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_mw32] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_mw64] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_mw128] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_mw256] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_mw512] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_mw1Ki] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w1Ki] } }};\n(*bound_var)[ty_mw2Ki] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w2Ki] } }};\n(*bound_var)[ty_mmw256] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_mw256] } }};\n(*bound_var)[ty_msw16w16] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_sw16w16] } }};\n(*bound_var)[ty_mpw256w32] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_pw256w32] } }};\n(*bound_var)[ty_sw16w16] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_sw32w32] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pbw2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pbw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pbw16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pbw32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pbw64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pbw128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_pbw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pbpw4w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw4w8] } }};\n(*bound_var)[ty_pbpw4w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw4w16] } }};\n(*bound_var)[ty_pbpw8w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw8w32] } }};\n(*bound_var)[ty_pbpw8w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw8w64] } }};\n(*bound_var)[ty_pw2w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw2w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw2w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw2w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw4w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw4w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw4w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw4w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw8b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw8w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw8w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw8w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw8w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw8w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw16b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw16w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw16w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw16w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw16w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw16w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw32b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw32w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw32w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw32w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw32w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw32w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw64b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw64w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw64w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw64w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw64w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw64w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw64w128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_pw64w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pw128w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw256w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_pw256pbw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_pbw256] } }};\n(*bound_var)[ty_pw256pw512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_pw512w256] } }};\n(*bound_var)[ty_pw512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw16], &(*bound_var)[ty_mw8] } }};\n(*bound_var)[ty_pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw32], &(*bound_var)[ty_pmw16mw8] } }};\n(*bound_var)[ty_pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw64], &(*bound_var)[ty_pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw128], &(*bound_var)[ty_pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw256], &(*bound_var)[ty_pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw512], &(*bound_var)[ty_pmw256pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw1Ki], &(*bound_var)[ty_pmw512pmw256pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw2Ki], &(*bound_var)[ty_pmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_ppw256w512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256w512], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw256w512w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256w512], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_ppw256pbw256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256pbw256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw256pw512w256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256pw512w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw512w256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw512w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw512w256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw512w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_ppw512w256pw512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw512w256], &(*bound_var)[ty_pw512w256] } }};\n(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pmw256pmw128pmw64pmw32pmw16mw8], &(*bound_var)[ty_pw64w256] } }};\n(*bound_var)[ty_pppw256w512w256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppw256w512w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_pppw256pbw256w256pbw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppw256pbw256w256], &(*bound_var)[ty_pbw256] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w1Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w1Ki] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w2Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w2Ki] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w4Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w4Ki] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_mw256] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pw256w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_pw256w32] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] } }};\n"
  },
  {
    "path": "C/bitcoin/primitiveJetNode.inc",
    "content": "/* This file has been automatically generated. */\n[ADD_16] =\n{ .tag = JET\n, .jet = simplicity_add_16\n, .cmr = {{0x49425a86u, 0xe20a676du, 0x8b87e3c1u, 0xa9b8ea6eu, 0xc75d859cu, 0x12c51bcbu, 0x7fa9f969u, 0x12c349cfu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw16\n, .cost = 80 /* milli weight units */\n}\n,[ADD_32] =\n{ .tag = JET\n, .jet = simplicity_add_32\n, .cmr = {{0x4668cd55u, 0xe8d15919u, 0x53327014u, 0xec64c8e7u, 0xd52b86b5u, 0x3e11c014u, 0x57eaf2c3u, 0xd3cebf9fu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw32\n, .cost = 92 /* milli weight units */\n}\n,[ADD_64] =\n{ .tag = JET\n, .jet = simplicity_add_64\n, .cmr = {{0xbe2b7519u, 0x303a67eeu, 0xa6b48295u, 0x0eda8343u, 0x5e1de855u, 0x9c394a23u, 0x6222ff5bu, 0xf089d346u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_pbw64\n, .cost = 105 /* milli weight units */\n}\n,[ADD_8] =\n{ .tag = JET\n, .jet = simplicity_add_8\n, .cmr = {{0xdfa179adu, 0xf4550b28u, 0x4873bf30u, 0x123e0d4eu, 0x54069b08u, 0x5834ce56u, 0x5815ef7eu, 0x45784acbu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw8\n, .cost = 97 /* milli weight units */\n}\n,[ALL_16] =\n{ .tag = JET\n, .jet = simplicity_all_16\n, .cmr = {{0x24f482a5u, 0x13d33362u, 0x015d28dfu, 0x4bb6c3eeu, 0x08ab8afbu, 0xbd25571fu, 0x0ea89d8cu, 0xaba31404u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 60 /* milli weight units */\n}\n,[ALL_32] =\n{ .tag = JET\n, .jet = simplicity_all_32\n, .cmr = {{0xa716522du, 0x0f3787c8u, 0xb4d50764u, 0x7f1f807bu, 0x67f320d6u, 0xeb67b84bu, 0x609cec1du, 0x2f12218au}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 62 /* milli weight units */\n}\n,[ALL_64] =\n{ .tag = JET\n, .jet = simplicity_all_64\n, .cmr = {{0x7aeefe2eu, 0xce24bab3u, 0x7c6e5430u, 0xeed419fcu, 0xd5f03791u, 0x2d1770cbu, 0x7d6520dcu, 0xe525291au}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 63 /* milli weight units */\n}\n,[ALL_8] =\n{ .tag = JET\n, .jet = simplicity_all_8\n, .cmr = {{0x4637f40eu, 0x5f4726b0u, 0x0570765au, 0xc794e29eu, 0xd1bb2655u, 0xffc412b2u, 0xdc41258eu, 0x41aac624u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 50 /* milli weight units */\n}\n,[AND_1] =\n{ .tag = JET\n, .jet = simplicity_and_1\n, .cmr = {{0x10684d0du, 0xd72cb0a8u, 0x26a86383u, 0x4e011f50u, 0xfa0d558bu, 0xa77d6b9fu, 0x49a1ac22u, 0x902a6ad0u}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 77 /* milli weight units */\n}\n,[AND_16] =\n{ .tag = JET\n, .jet = simplicity_and_16\n, .cmr = {{0x373c730fu, 0xad3e8847u, 0x991aa417u, 0xd9f080eeu, 0x1cb88a7fu, 0x7206f3fau, 0x840b1950u, 0x7761fb23u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 83 /* milli weight units */\n}\n,[AND_32] =\n{ .tag = JET\n, .jet = simplicity_and_32\n, .cmr = {{0x13b02c4cu, 0x60ae6ea4u, 0x91161649u, 0xacf9a47au, 0x7025af84u, 0x7d5f581eu, 0x6f1cccfbu, 0x21d3001du}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 77 /* milli weight units */\n}\n,[AND_64] =\n{ .tag = JET\n, .jet = simplicity_and_64\n, .cmr = {{0x92185535u, 0xd4505407u, 0xdea3c8a6u, 0x0826ede6u, 0x4a8fbb3du, 0xb486d56fu, 0x642d217cu, 0x29cbd795u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 78 /* milli weight units */\n}\n,[AND_8] =\n{ .tag = JET\n, .jet = simplicity_and_8\n, .cmr = {{0x269a1b44u, 0x6266f8f4u, 0xa4a38fa7u, 0xe7e39182u, 0xf1521436u, 0x142badedu, 0xf3aa63fbu, 0x2f172d2fu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 98 /* milli weight units */\n}\n,[ANNEX_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_annex_hash\n, .cmr = {{0x51fa1913u, 0xa6297348u, 0x4a700af3u, 0xff932694u, 0xd3890ae0u, 0xad87a455u, 0xdaf4906fu, 0x224a48d5u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mw256\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1491 /* milli weight units */\n}\n,[BIP_0340_VERIFY] =\n{ .tag = JET\n, .jet = simplicity_bip_0340_verify\n, .cmr = {{0x491565feu, 0x23a7bdc1u, 0x842be749u, 0x509337f9u, 0x6890d5b3u, 0x58b36520u, 0x90da5566u, 0x54e29549u}}\n, .sourceIx = ty_w1Ki\n, .targetIx = ty_u\n, .cost = 49421 /* milli weight units */\n}\n,[BUILD_TAPBRANCH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_build_tapbranch\n, .cmr = {{0xef8e9291u, 0x9b2608eau, 0x6b5bcdd3u, 0x9c5178e5u, 0x46249553u, 0x914b0f8du, 0x33735d28u, 0x86e1a5e8u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 2554 /* milli weight units */\n}\n,[BUILD_TAPLEAF_SIMPLICITY] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_build_tapleaf_simplicity\n, .cmr = {{0x22411909u, 0x984147deu, 0x8f5a0428u, 0x358b4716u, 0xdb087664u, 0xa7285608u, 0x52b0e616u, 0xebc62d30u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 1927 /* milli weight units */\n}\n,[BUILD_TAPTWEAK] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_build_taptweak\n, .cmr = {{0xf192db17u, 0x06608defu, 0x165dbddau, 0x72a38c88u, 0x82cb36c6u, 0xda47070du, 0x8a5f5896u, 0xfbda8434u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 77780 /* milli weight units */\n}\n,[CH_1] =\n{ .tag = JET\n, .jet = simplicity_ch_1\n, .cmr = {{0x73b2a981u, 0xd721986fu, 0x8cded697u, 0xe06305d4u, 0x5854102du, 0xff20c0e5u, 0xb98ae176u, 0x232ff25bu}}\n, .sourceIx = ty_pbw2\n, .targetIx = ty_b\n, .cost = 50 /* milli weight units */\n}\n,[CH_16] =\n{ .tag = JET\n, .jet = simplicity_ch_16\n, .cmr = {{0x78de465eu, 0x61d9a50fu, 0x78252ff4u, 0xab23c9e6u, 0x3ae68c76u, 0x9d366612u, 0x71207dc6u, 0x93f469b4u}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 83 /* milli weight units */\n}\n,[CH_32] =\n{ .tag = JET\n, .jet = simplicity_ch_32\n, .cmr = {{0xed93bef1u, 0xf66e3a75u, 0xe6120602u, 0xecee6740u, 0x653e7bd4u, 0x6e07eb77u, 0x144ef1bbu, 0x2c9de53du}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 69 /* milli weight units */\n}\n,[CH_64] =\n{ .tag = JET\n, .jet = simplicity_ch_64\n, .cmr = {{0xced0079bu, 0x0bd1cc00u, 0x209a7cbcu, 0x23f13dfdu, 0x202808f0u, 0xf5257d8au, 0x50ac543eu, 0x64ee3a05u}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 78 /* milli weight units */\n}\n,[CH_8] =\n{ .tag = JET\n, .jet = simplicity_ch_8\n, .cmr = {{0xc707ca72u, 0x3e24f6b2u, 0x5bf394a9u, 0x9a4d75e8u, 0x1379b467u, 0x8438ac78u, 0x9dee188eu, 0xdcce75fau}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 86 /* milli weight units */\n}\n,[CHECK_LOCK_DISTANCE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_check_lock_distance\n, .cmr = {{0x38fdf7ddu, 0x28538670u, 0xfb34c1bfu, 0xe72f17e2u, 0xca5784f8u, 0x7fed88eau, 0xb584792bu, 0x3974bd18u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_u\n, .cost = 84 /* milli weight units */\n}\n,[CHECK_LOCK_DURATION] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_check_lock_duration\n, .cmr = {{0x77503832u, 0x6eae25c7u, 0x209b2443u, 0x06eaa9f9u, 0x204c7eceu, 0x2dd63b45u, 0x2e10017fu, 0xa4ea53cfu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_u\n, .cost = 78 /* milli weight units */\n}\n,[CHECK_LOCK_HEIGHT] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_check_lock_height\n, .cmr = {{0xb90f151fu, 0x45b4eb37u, 0x210621f9u, 0x700a36c8u, 0xc504bee0u, 0x67771163u, 0xa8b83a77u, 0x18e6686au}}\n, .sourceIx = ty_w32\n, .targetIx = ty_u\n, .cost = 108 /* milli weight units */\n}\n,[CHECK_LOCK_TIME] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_check_lock_time\n, .cmr = {{0xa451ebb2u, 0x25d6b133u, 0xa5e63539u, 0x7800d487u, 0xb3968b0du, 0xe55c96ebu, 0x82f290ecu, 0xff9c2590u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_u\n, .cost = 123 /* milli weight units */\n}\n,[CHECK_SIG_VERIFY] =\n{ .tag = JET\n, .jet = simplicity_check_sig_verify\n, .cmr = {{0xb5801554u, 0x6d285266u, 0x5dd21bf1u, 0x12662670u, 0x20fa5e27u, 0x5001dd46u, 0x18fa4156u, 0x25952e68u}}\n, .sourceIx = ty_ppw256w512w512\n, .targetIx = ty_u\n, .cost = 50000 /* milli weight units */\n}\n,[COMPLEMENT_1] =\n{ .tag = JET\n, .jet = simplicity_complement_1\n, .cmr = {{0x1bcfae13u, 0xd5d237a0u, 0xbb9b1d75u, 0x32047462u, 0xb27690deu, 0x5cac0e20u, 0x19298964u, 0x57934060u}}\n, .sourceIx = ty_b\n, .targetIx = ty_b\n, .cost = 51 /* milli weight units */\n}\n,[COMPLEMENT_16] =\n{ .tag = JET\n, .jet = simplicity_complement_16\n, .cmr = {{0x81ad4d2cu, 0x3d16bf34u, 0x0af3886du, 0x355cc5bdu, 0x1d5967e1u, 0x6ace924fu, 0x19ecf7d4u, 0x86d6c7e9u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w16\n, .cost = 86 /* milli weight units */\n}\n,[COMPLEMENT_32] =\n{ .tag = JET\n, .jet = simplicity_complement_32\n, .cmr = {{0x13742c18u, 0x04a96e6cu, 0x039528bfu, 0xd03b8cf2u, 0xb462526bu, 0xb181a3d8u, 0xb432f99au, 0xc4f5a7efu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w32\n, .cost = 58 /* milli weight units */\n}\n,[COMPLEMENT_64] =\n{ .tag = JET\n, .jet = simplicity_complement_64\n, .cmr = {{0x65b7bd09u, 0x3639c56du, 0xa285cefau, 0x2d046464u, 0x5e14dd13u, 0x642f3495u, 0x7d4737bdu, 0x52fac588u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w64\n, .cost = 64 /* milli weight units */\n}\n,[COMPLEMENT_8] =\n{ .tag = JET\n, .jet = simplicity_complement_8\n, .cmr = {{0x954b70dcu, 0xec539e6bu, 0x67dffec5u, 0x3cf24a66u, 0x9939608bu, 0x223f5f8bu, 0x6d129daau, 0x48ca1cf0u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w8\n, .cost = 62 /* milli weight units */\n}\n,[CURRENT_ANNEX_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_current_annex_hash\n, .cmr = {{0xced9022eu, 0xdc69241fu, 0xe70749a7u, 0xf5d489c3u, 0x135ee8c9u, 0x6fe64c44u, 0x64401f98u, 0x51d7a17du}}\n, .sourceIx = ty_u\n, .targetIx = ty_mw256\n, .cost = 74 /* milli weight units */\n}\n,[CURRENT_INDEX] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_current_index\n, .cmr = {{0x0e8c964cu, 0x2f2b3490u, 0x362f3bbcu, 0x7483dea3u, 0x7fda810bu, 0x69314ff6u, 0x64fea0e3u, 0x2708ec8fu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 66 /* milli weight units */\n}\n,[CURRENT_PREV_OUTPOINT] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_current_prev_outpoint\n, .cmr = {{0x6443391bu, 0x34408684u, 0x6d5a17a6u, 0x2e3e0628u, 0x2ad6962cu, 0x4dfced2fu, 0x6a83d0dfu, 0xbf6a5c54u}}\n, .sourceIx = ty_u\n, .targetIx = ty_pw256w32\n, .cost = 130 /* milli weight units */\n}\n,[CURRENT_SCRIPT_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_current_script_hash\n, .cmr = {{0x23498dd6u, 0x645ed138u, 0xb344937cu, 0xf654aaffu, 0xa627f85au, 0x47caa689u, 0x54f13f4cu, 0x6a4dc772u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 127 /* milli weight units */\n}\n,[CURRENT_SCRIPT_SIG_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_current_script_sig_hash\n, .cmr = {{0x34a3c55du, 0x147374d8u, 0xf3a1761bu, 0xbab28696u, 0x8455404cu, 0x2ca03f69u, 0x393f6339u, 0xd0f58b59u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 126 /* milli weight units */\n}\n,[CURRENT_SEQUENCE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_current_sequence\n, .cmr = {{0xc49f76acu, 0x79f8f15cu, 0x409ba815u, 0xc16edcb8u, 0xd11e9a07u, 0x565c8e09u, 0xb63e7fdfu, 0x3103009fu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 66 /* milli weight units */\n}\n,[CURRENT_VALUE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_current_value\n, .cmr = {{0x91b96e82u, 0x9e3b4972u, 0xb0cb091au, 0x0a904ba4u, 0x11338abfu, 0xc08da786u, 0xd5a84f04u, 0x9b5ba3b8u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 85 /* milli weight units */\n}\n,[DECOMPRESS] =\n{ .tag = JET\n, .jet = simplicity_decompress\n, .cmr = {{0x890056dfu, 0x828a766eu, 0xe9f65607u, 0x221e8946u, 0xfa77c256u, 0xbb96e231u, 0xe194d300u, 0x8cf356f6u}}\n, .sourceIx = ty_pbw256\n, .targetIx = ty_mw512\n, .cost = 10495 /* milli weight units */\n}\n,[DECREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_decrement_16\n, .cmr = {{0x35fda38bu, 0x672c3831u, 0xd8ca11a4u, 0xf3a95962u, 0x22529eb1u, 0xc15f8c70u, 0x5013977du, 0x7dfb5d8bu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw16\n, .cost = 58 /* milli weight units */\n}\n,[DECREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_decrement_32\n, .cmr = {{0x3b2b1939u, 0x552284f6u, 0x14694ba1u, 0x8dce70ceu, 0xe476ff42u, 0xdcd089e1u, 0xa3c0a42bu, 0xebd108f6u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw32\n, .cost = 57 /* milli weight units */\n}\n,[DECREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_decrement_64\n, .cmr = {{0x7ef7bdd3u, 0x5db685aeu, 0x99055337u, 0x35a2c7a7u, 0xccbc1708u, 0xae636f93u, 0x1b5ce026u, 0xe5a17fedu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw64\n, .cost = 79 /* milli weight units */\n}\n,[DECREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_decrement_8\n, .cmr = {{0xe364f2e5u, 0xc08ae011u, 0x8ebe993eu, 0x8b3c958cu, 0x2bcc6062u, 0xa33baab9u, 0x28c04b3eu, 0xc932f51bu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_pbw8\n, .cost = 77 /* milli weight units */\n}\n,[DIV_MOD_128_64] =\n{ .tag = JET\n, .jet = simplicity_div_mod_128_64\n, .cmr = {{0x9a9443a2u, 0xb541e29fu, 0x272ffd56u, 0x7d1bf742u, 0xd68ccbe9u, 0x538a8729u, 0x1b0ca638u, 0x1563ac2cu}}\n, .sourceIx = ty_pw128w64\n, .targetIx = ty_w128\n, .cost = 169 /* milli weight units */\n}\n,[DIV_MOD_16] =\n{ .tag = JET\n, .jet = simplicity_div_mod_16\n, .cmr = {{0x39bcb5c0u, 0x1dc1805cu, 0x4919895cu, 0xb59e8f3bu, 0x41446717u, 0xf7ff48fdu, 0xc937dd03u, 0x8024a08au}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w32\n, .cost = 92 /* milli weight units */\n}\n,[DIV_MOD_32] =\n{ .tag = JET\n, .jet = simplicity_div_mod_32\n, .cmr = {{0xfb1202f4u, 0xe8663a87u, 0xf568992au, 0x185024c7u, 0x0b4f079fu, 0xbe953001u, 0x0f6db284u, 0x218af6cdu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w64\n, .cost = 90 /* milli weight units */\n}\n,[DIV_MOD_64] =\n{ .tag = JET\n, .jet = simplicity_div_mod_64\n, .cmr = {{0x6764df5eu, 0x2aa03032u, 0x6ee544c6u, 0xe53ff38eu, 0xf0b28517u, 0x915eec65u, 0xc72ea57au, 0x129828ebu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w128\n, .cost = 82 /* milli weight units */\n}\n,[DIV_MOD_8] =\n{ .tag = JET\n, .jet = simplicity_div_mod_8\n, .cmr = {{0xd300244eu, 0x480dd974u, 0x1213e4cbu, 0x0eba836du, 0x3059e778u, 0xb8122f78u, 0x90032673u, 0x739c6a2cu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w16\n, .cost = 91 /* milli weight units */\n}\n,[DIVIDE_16] =\n{ .tag = JET\n, .jet = simplicity_divide_16\n, .cmr = {{0x52abfef1u, 0x79754c90u, 0xf9a4260fu, 0x323a8ca4u, 0x95159290u, 0x2b8ecbd6u, 0x4ba42656u, 0xfac05968u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 85 /* milli weight units */\n}\n,[DIVIDE_32] =\n{ .tag = JET\n, .jet = simplicity_divide_32\n, .cmr = {{0x4a8ae535u, 0x44e147edu, 0x02250423u, 0x7934cc25u, 0x4479bcf9u, 0x3de1e197u, 0x4ddab3bbu, 0x516e606cu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 82 /* milli weight units */\n}\n,[DIVIDE_64] =\n{ .tag = JET\n, .jet = simplicity_divide_64\n, .cmr = {{0xd7025d05u, 0xadfae66bu, 0x4710d0ffu, 0x1e87e828u, 0x15573e9cu, 0xb631b4c7u, 0xd13d2f1bu, 0xe4dd26d2u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 81 /* milli weight units */\n}\n,[DIVIDE_8] =\n{ .tag = JET\n, .jet = simplicity_divide_8\n, .cmr = {{0x40cd1dacu, 0xea24669bu, 0x6a589b61u, 0x475474afu, 0x31d14f8du, 0x46877084u, 0x52d3df37u, 0x30253126u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 85 /* milli weight units */\n}\n,[DIVIDES_16] =\n{ .tag = JET\n, .jet = simplicity_divides_16\n, .cmr = {{0x10bb1818u, 0x0eab5badu, 0xdc165d03u, 0x37c4ada0u, 0x88e157b1u, 0xaa678334u, 0x2a4520a3u, 0x24dd9d2bu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 84 /* milli weight units */\n}\n,[DIVIDES_32] =\n{ .tag = JET\n, .jet = simplicity_divides_32\n, .cmr = {{0xf5e8e78cu, 0x82769a48u, 0xc9103e44u, 0xddb47f84u, 0x1d7693b0u, 0x419e5e7du, 0xa4e68b78u, 0xb237a572u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 80 /* milli weight units */\n}\n,[DIVIDES_64] =\n{ .tag = JET\n, .jet = simplicity_divides_64\n, .cmr = {{0x9ebd55fau, 0xe418885eu, 0xea04c3cdu, 0xfff531b7u, 0xd714d059u, 0x4fa7da87u, 0xeb6555d3u, 0x6b953db2u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 67 /* milli weight units */\n}\n,[DIVIDES_8] =\n{ .tag = JET\n, .jet = simplicity_divides_8\n, .cmr = {{0xa236bc3eu, 0x5cf4d256u, 0x408ba38cu, 0x1eaee736u, 0x9a9c402fu, 0x74bcd1c8u, 0x02f9094fu, 0xbf36803du}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 73 /* milli weight units */\n}\n,[EQ_1] =\n{ .tag = JET\n, .jet = simplicity_eq_1\n, .cmr = {{0x6549f986u, 0x203a6497u, 0x356e432bu, 0x2aa160d6u, 0xee870b11u, 0x190865bdu, 0x36a47cb0u, 0x470433a5u}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 63 /* milli weight units */\n}\n,[EQ_16] =\n{ .tag = JET\n, .jet = simplicity_eq_16\n, .cmr = {{0x0c5402b0u, 0xadc8fc65u, 0x701bb75bu, 0x3254c835u, 0xf8fec130u, 0x81cd35e1u, 0x328f2bd7u, 0xdbd23fa6u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 68 /* milli weight units */\n}\n,[EQ_256] =\n{ .tag = JET\n, .jet = simplicity_eq_256\n, .cmr = {{0x260e1d13u, 0x6dd744fcu, 0xb0507a2du, 0x277027a7u, 0x724354ebu, 0x176b2fbfu, 0x31c6c7d7u, 0xfb3ecd6fu}}\n, .sourceIx = ty_w512\n, .targetIx = ty_b\n, .cost = 188 /* milli weight units */\n}\n,[EQ_32] =\n{ .tag = JET\n, .jet = simplicity_eq_32\n, .cmr = {{0xf5d6edc8u, 0xb6164e12u, 0x5bbbef08u, 0xc9e08a1eu, 0x6fd492f5u, 0xbdca6fdcu, 0x8b5f5a6fu, 0x05c5ab96u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 74 /* milli weight units */\n}\n,[EQ_64] =\n{ .tag = JET\n, .jet = simplicity_eq_64\n, .cmr = {{0x1f93acb8u, 0x092fa06du, 0xeaf3c387u, 0xf54a18ffu, 0xeaa69a47u, 0xa6f5caf4u, 0xae497e5cu, 0xc2b36c43u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 82 /* milli weight units */\n}\n,[EQ_8] =\n{ .tag = JET\n, .jet = simplicity_eq_8\n, .cmr = {{0xd752fa7fu, 0x51473014u, 0xebb69e1eu, 0x1d2c86d5u, 0x1148b6bau, 0xa02137a4u, 0x8f62d57eu, 0xaf8df1cdu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 76 /* milli weight units */\n}\n,[FE_ADD] =\n{ .tag = JET\n, .jet = simplicity_fe_add\n, .cmr = {{0xa6c90e02u, 0xfde4ee6eu, 0xef666737u, 0x492e14afu, 0xc8762504u, 0x974af5d5u, 0x472bb943u, 0x3ad2d294u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 777 /* milli weight units */\n}\n,[FE_INVERT] =\n{ .tag = JET\n, .jet = simplicity_fe_invert\n, .cmr = {{0x7c4abaceu, 0x33c72b3bu, 0xe1fd0ee3u, 0x9fc6cb3eu, 0xe5c8f11eu, 0xf21998c0u, 0x602b5215u, 0xaa2a75c2u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 3237 /* milli weight units */\n}\n,[FE_IS_ODD] =\n{ .tag = JET\n, .jet = simplicity_fe_is_odd\n, .cmr = {{0x30f5171fu, 0x58f1089du, 0x5dcfb6e6u, 0x683f5adeu, 0x984c0799u, 0x763ca738u, 0x3f75df1cu, 0xa0813efeu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_b\n, .cost = 313 /* milli weight units */\n}\n,[FE_IS_ZERO] =\n{ .tag = JET\n, .jet = simplicity_fe_is_zero\n, .cmr = {{0xb0b74d86u, 0x51ff557cu, 0xa96044ddu, 0x97281338u, 0xa8f7d3acu, 0xb3847d03u, 0xacbf3d32u, 0xd96fae55u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_b\n, .cost = 277 /* milli weight units */\n}\n,[FE_MULTIPLY] =\n{ .tag = JET\n, .jet = simplicity_fe_multiply\n, .cmr = {{0x506b9319u, 0xc17a14a9u, 0x469d4627u, 0x61a3303au, 0xb47ddb3au, 0x3079fba3u, 0x4073aa55u, 0x4216a388u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 813 /* milli weight units */\n}\n,[FE_MULTIPLY_BETA] =\n{ .tag = JET\n, .jet = simplicity_fe_multiply_beta\n, .cmr = {{0x6e180eeau, 0xbe8422b7u, 0x9968e711u, 0xdd00a4b6u, 0x578bb275u, 0xbef47fe5u, 0xff968f14u, 0x72d76f2au}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 607 /* milli weight units */\n}\n,[FE_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_fe_negate\n, .cmr = {{0xd437ea00u, 0x339880b3u, 0x83d85fb2u, 0xaeaf201bu, 0xbe8ffc83u, 0x705062f9u, 0xc968590du, 0x5db337f6u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 541 /* milli weight units */\n}\n,[FE_NORMALIZE] =\n{ .tag = JET\n, .jet = simplicity_fe_normalize\n, .cmr = {{0xec0c3dd9u, 0xc5286364u, 0x78bec0e1u, 0x60e50ad9u, 0xbf452c5bu, 0x6f84e940u, 0xe16584ebu, 0x085ace38u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 656 /* milli weight units */\n}\n,[FE_SQUARE] =\n{ .tag = JET\n, .jet = simplicity_fe_square\n, .cmr = {{0xb904772du, 0x74a185b8u, 0x28eb1547u, 0x28d249c5u, 0x084711e9u, 0xa1832b89u, 0xcaf2af59u, 0xf960e118u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 570 /* milli weight units */\n}\n,[FE_SQUARE_ROOT] =\n{ .tag = JET\n, .jet = simplicity_fe_square_root\n, .cmr = {{0x16fb9aceu, 0xbe8b5b87u, 0xf2ea7db6u, 0xaa3a2af8u, 0x8ca2b58fu, 0x02cdc87eu, 0x7ce6be0cu, 0x1ffce014u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_mw256\n, .cost = 10162 /* milli weight units */\n}\n,[FEE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_fee\n, .cmr = {{0xfb9ca939u, 0x81673d1du, 0x23aed24du, 0x612c1f5du, 0xc7cd49f8u, 0x6d348e67u, 0xa15bc4a7u, 0x130ae185u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 65 /* milli weight units */\n}\n,[FULL_ADD_16] =\n{ .tag = JET\n, .jet = simplicity_full_add_16\n, .cmr = {{0xc503b078u, 0xdde399c6u, 0x3ac4a232u, 0xbd2a329bu, 0x04308c75u, 0xeaec53a2u, 0xf889b8dfu, 0x0d033472u}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw16\n, .cost = 106 /* milli weight units */\n}\n,[FULL_ADD_32] =\n{ .tag = JET\n, .jet = simplicity_full_add_32\n, .cmr = {{0xa7afd040u, 0xfcb0b2f2u, 0x7190781au, 0xe53a6ccau, 0x00e9fe59u, 0x531115c2u, 0x58ccb69du, 0x3be5a213u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw32\n, .cost = 96 /* milli weight units */\n}\n,[FULL_ADD_64] =\n{ .tag = JET\n, .jet = simplicity_full_add_64\n, .cmr = {{0x80a3ef6cu, 0xdb84ae7cu, 0x8dbcf3a1u, 0x842484c0u, 0x98df6f19u, 0x427a5a4au, 0xdfe76cd5u, 0xff2836cau}}\n, .sourceIx = ty_pbw128\n, .targetIx = ty_pbw64\n, .cost = 93 /* milli weight units */\n}\n,[FULL_ADD_8] =\n{ .tag = JET\n, .jet = simplicity_full_add_8\n, .cmr = {{0x4b9076b8u, 0xc1ad56c9u, 0xdb6bb3bau, 0xf5938954u, 0x46ce61c7u, 0x4f797eb8u, 0xb230d205u, 0x421c9617u}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw8\n, .cost = 131 /* milli weight units */\n}\n,[FULL_DECREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_16\n, .cmr = {{0xfba3c978u, 0x6ea307f6u, 0xd85434fdu, 0xa2562482u, 0x43a00bacu, 0x9a5353b6u, 0x1ed39c60u, 0x55b693b0u}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw16\n, .cost = 60 /* milli weight units */\n}\n,[FULL_DECREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_32\n, .cmr = {{0x623d21d0u, 0x467922c0u, 0x01c56568u, 0x61d0ddb8u, 0x60c0c9a8u, 0x6bd4cfdcu, 0x37a14c14u, 0x06e3446eu}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw32\n, .cost = 71 /* milli weight units */\n}\n,[FULL_DECREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_64\n, .cmr = {{0x148b3ee1u, 0xf749ea0bu, 0xfba763beu, 0xe999a296u, 0x77456eaeu, 0x9ef53ad8u, 0x78f8b614u, 0x94f08f00u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw64\n, .cost = 71 /* milli weight units */\n}\n,[FULL_DECREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_8\n, .cmr = {{0xb41afe97u, 0x4eaa1182u, 0xac461052u, 0x1e282781u, 0x318ce295u, 0xa3f23f0bu, 0x876ae269u, 0x673fb1dfu}}\n, .sourceIx = ty_pbw8\n, .targetIx = ty_pbw8\n, .cost = 68 /* milli weight units */\n}\n,[FULL_INCREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_full_increment_16\n, .cmr = {{0xa68eccdbu, 0x9ead2926u, 0xc3e45b4bu, 0xae431cc4u, 0x66d58b8fu, 0xacc95a1bu, 0x4844b912u, 0xdf5676dfu}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw16\n, .cost = 70 /* milli weight units */\n}\n,[FULL_INCREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_full_increment_32\n, .cmr = {{0xd0eb0e94u, 0xa5c25713u, 0xeb944cadu, 0x4d701c6au, 0x968809bcu, 0x1af903fdu, 0xb11e6fadu, 0x0bb31b10u}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw32\n, .cost = 57 /* milli weight units */\n}\n,[FULL_INCREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_full_increment_64\n, .cmr = {{0xc003d2e9u, 0xb0a510c2u, 0xdd783e7du, 0x64eb87b3u, 0x3855d329u, 0x90dfc286u, 0x266e478du, 0xa4e74791u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw64\n, .cost = 68 /* milli weight units */\n}\n,[FULL_INCREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_full_increment_8\n, .cmr = {{0x0bea2429u, 0x18f2dd17u, 0x64777811u, 0xe4442863u, 0x935225b0u, 0xf8b239c2u, 0x3752f9d8u, 0x5392a139u}}\n, .sourceIx = ty_pbw8\n, .targetIx = ty_pbw8\n, .cost = 73 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_1\n, .cmr = {{0xb366a816u, 0x922fc455u, 0x010fe88au, 0x5f6a5cf2u, 0xcea917e1u, 0x2bd140aeu, 0x6d43b641u, 0xe57f42b3u}}\n, .sourceIx = ty_pw16b\n, .targetIx = ty_pbw16\n, .cost = 76 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_2\n, .cmr = {{0x27960d0du, 0xf2fbbc38u, 0x993d86fbu, 0x8f0cd2c3u, 0x434edb11u, 0x048213c1u, 0x411893cau, 0x9933b2eeu}}\n, .sourceIx = ty_pw16w2\n, .targetIx = ty_pw2w16\n, .cost = 59 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_4\n, .cmr = {{0x655137beu, 0xc5c0368fu, 0x29bc992cu, 0x88421a15u, 0x98564039u, 0x7b617fc4u, 0x8d33210fu, 0xc0053ad1u}}\n, .sourceIx = ty_pw16w4\n, .targetIx = ty_pw4w16\n, .cost = 68 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_8] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_8\n, .cmr = {{0x168f576au, 0xa56ea47eu, 0x070646e7u, 0x8896beb2u, 0x498b1ae6u, 0xb1ff9c78u, 0x6270e955u, 0x65841929u}}\n, .sourceIx = ty_pw16w8\n, .targetIx = ty_pw8w16\n, .cost = 68 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_1\n, .cmr = {{0xd7cd5224u, 0x49118e81u, 0x00a7662fu, 0x4df039f8u, 0xcaebf433u, 0xeb039edcu, 0x42e88237u, 0x92ccea8au}}\n, .sourceIx = ty_pw32b\n, .targetIx = ty_pbw32\n, .cost = 58 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_16] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_16\n, .cmr = {{0x8bd80d4du, 0x2f8b2246u, 0xc12315c4u, 0x2841b4e4u, 0x0a71ae76u, 0x966a0895u, 0x4d666b86u, 0x32867437u}}\n, .sourceIx = ty_pw32w16\n, .targetIx = ty_pw16w32\n, .cost = 52 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_2\n, .cmr = {{0x13063d62u, 0x93832931u, 0x1fb7dabbu, 0x15c3fe58u, 0xc2887683u, 0x0097ecc6u, 0xbfdd480bu, 0xe1988146u}}\n, .sourceIx = ty_pw32w2\n, .targetIx = ty_pw2w32\n, .cost = 73 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_4\n, .cmr = {{0x25a1b5ddu, 0xe5db284eu, 0x8a882126u, 0x7c265301u, 0x14bbe671u, 0xcfafb44au, 0x60d75027u, 0x67db782eu}}\n, .sourceIx = ty_pw32w4\n, .targetIx = ty_pw4w32\n, .cost = 59 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_8] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_8\n, .cmr = {{0xce5470afu, 0xbfadbfbau, 0x68f9b2d5u, 0xb0645a44u, 0x08be6f85u, 0xa69c7f09u, 0xd0964553u, 0x68048764u}}\n, .sourceIx = ty_pw32w8\n, .targetIx = ty_pw8w32\n, .cost = 60 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_1\n, .cmr = {{0x051f3605u, 0x86c379acu, 0x2ce399cbu, 0xeb687e77u, 0x53b15d73u, 0x03dd316cu, 0xbd123012u, 0x087cc66fu}}\n, .sourceIx = ty_pw64b\n, .targetIx = ty_pbw64\n, .cost = 74 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_16] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_16\n, .cmr = {{0xb248be4du, 0xfcb88c5du, 0x89b1ca61u, 0x86a041e9u, 0x02b4c8a6u, 0x2bb16e09u, 0xfe15616eu, 0x0e3abd6du}}\n, .sourceIx = ty_pw64w16\n, .targetIx = ty_pw16w64\n, .cost = 69 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_2\n, .cmr = {{0x34bb5162u, 0x6b1d6b89u, 0x7abc155du, 0x034fe066u, 0x3a0ec0fdu, 0x8f640e5fu, 0xe1bf3cb7u, 0x670a2925u}}\n, .sourceIx = ty_pw64w2\n, .targetIx = ty_pw2w64\n, .cost = 70 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_32] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_32\n, .cmr = {{0x9dac8cd7u, 0xfd8b4888u, 0x9e55c5aau, 0x12fe97b7u, 0x29febc04u, 0x1a9fff44u, 0xc4d9b6f1u, 0xe07eb442u}}\n, .sourceIx = ty_pw64w32\n, .targetIx = ty_pw32w64\n, .cost = 73 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_4\n, .cmr = {{0x94b73dadu, 0xc3eeeb2eu, 0xe4a4d444u, 0xdd0f72acu, 0x306201f2u, 0xffcf714bu, 0x8ebe7982u, 0x744c0c7eu}}\n, .sourceIx = ty_pw64w4\n, .targetIx = ty_pw4w64\n, .cost = 66 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_8] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_8\n, .cmr = {{0x0ef71475u, 0x7ecf11cau, 0x3c73ce25u, 0xef24ee72u, 0x95dd4171u, 0xcc16287fu, 0xe6971bd6u, 0x7b478b46u}}\n, .sourceIx = ty_pw64w8\n, .targetIx = ty_pw8w64\n, .cost = 68 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_8_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_8_1\n, .cmr = {{0x9bfa48b7u, 0xad510091u, 0xba608544u, 0x62d859efu, 0xd1a2aa18u, 0x731b5f0cu, 0x9e2ba4d8u, 0x9d3aa843u}}\n, .sourceIx = ty_pw8b\n, .targetIx = ty_pbw8\n, .cost = 60 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_8_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_8_2\n, .cmr = {{0x797c2087u, 0x01b2a4e1u, 0x049e83d6u, 0x95f554b9u, 0x84f5db28u, 0x21525558u, 0x7c373421u, 0x51b7241du}}\n, .sourceIx = ty_pw8w2\n, .targetIx = ty_pw2w8\n, .cost = 64 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_8_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_8_4\n, .cmr = {{0x37bdac91u, 0x538f2219u, 0xcb89df0eu, 0xf9f197cdu, 0x68031f27u, 0x67e894f0u, 0x01c26fffu, 0x5eeb58cdu}}\n, .sourceIx = ty_pw8w4\n, .targetIx = ty_pw4w8\n, .cost = 72 /* milli weight units */\n}\n,[FULL_MULTIPLY_16] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_16\n, .cmr = {{0x09baff92u, 0x1e9f14d1u, 0x208d1dd8u, 0x264cf1f3u, 0xb854c9afu, 0x21f778b2u, 0xb55a8a42u, 0x6dfe8928u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 99 /* milli weight units */\n}\n,[FULL_MULTIPLY_32] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_32\n, .cmr = {{0x10c4b8c4u, 0xc0acd973u, 0x90f85cb3u, 0xf5ffe36au, 0x292037c1u, 0x90eebab3u, 0xe98934feu, 0x93b2ed90u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 87 /* milli weight units */\n}\n,[FULL_MULTIPLY_64] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_64\n, .cmr = {{0x2db19dbau, 0x90ef867bu, 0x5a3e914bu, 0x89fda2dau, 0x637ca80cu, 0x4267e198u, 0x1837ee3cu, 0x6fe3daf5u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w128\n, .cost = 103 /* milli weight units */\n}\n,[FULL_MULTIPLY_8] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_8\n, .cmr = {{0x7f46ee72u, 0x84f39e73u, 0x4275a250u, 0x9a0b737eu, 0xd939115fu, 0x0219a574u, 0xd469cd30u, 0xb819efe3u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 95 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_1\n, .cmr = {{0x7ebe0c66u, 0xc3c7dc16u, 0xa5469e91u, 0x79098417u, 0xac5f20a3u, 0x9cc41ac3u, 0x82fb1dbdu, 0x98e8e30fu}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pw16b\n, .cost = 55 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_2\n, .cmr = {{0x8db0c216u, 0x19c62d63u, 0xd4c27bfcu, 0xf647d709u, 0xce37bed0u, 0x5718e93eu, 0x4515e29eu, 0xf3730cf4u}}\n, .sourceIx = ty_pw2w16\n, .targetIx = ty_pw16w2\n, .cost = 60 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_4\n, .cmr = {{0x5c74b132u, 0x06317917u, 0xe070e5fcu, 0x1c82f4c5u, 0xc2fbe9f3u, 0x1b812946u, 0xba230d8cu, 0x94d40616u}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_pw16w4\n, .cost = 64 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_8] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_8\n, .cmr = {{0x1105818au, 0xc948d7bbu, 0x634707e6u, 0x9dbf1f67u, 0x9058a13du, 0x35fac2a6u, 0x4df97262u, 0xf242b63bu}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_pw16w8\n, .cost = 55 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_1\n, .cmr = {{0x9b42c8f3u, 0x3bc5750eu, 0x2a83aadbu, 0xf29cc7fcu, 0xb950fe5au, 0x40aa0ec5u, 0x2452e533u, 0xf825a115u}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pw32b\n, .cost = 49 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_16] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_16\n, .cmr = {{0x0ae5659cu, 0x2fa75794u, 0x78ebd57cu, 0x4c98aee7u, 0x77015645u, 0xb2843181u, 0x64fcbd30u, 0x65fc873cu}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_pw32w16\n, .cost = 48 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_2\n, .cmr = {{0x57fb1c03u, 0xc2eb17f6u, 0x23478734u, 0xfd6937f9u, 0xe3ef027cu, 0x1560038fu, 0xa6066905u, 0x1789e368u}}\n, .sourceIx = ty_pw2w32\n, .targetIx = ty_pw32w2\n, .cost = 66 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_4\n, .cmr = {{0x8582cdfau, 0x74ef466bu, 0x8127b197u, 0x88134593u, 0x998e4969u, 0x00b38f0fu, 0x3d375818u, 0xd673451eu}}\n, .sourceIx = ty_pw4w32\n, .targetIx = ty_pw32w4\n, .cost = 49 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_8] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_8\n, .cmr = {{0xd905932eu, 0xbfca2a38u, 0x619d807eu, 0x28ff2e0du, 0x3be08a26u, 0x0676d257u, 0xefa040c3u, 0x05aadc33u}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_pw32w8\n, .cost = 66 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_1\n, .cmr = {{0x3c15209bu, 0x99d2845eu, 0x225e14e1u, 0xe9e5e6a4u, 0x878bc8ceu, 0xa3f9f36bu, 0x8b535ac6u, 0x83e29d00u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pw64b\n, .cost = 60 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_16] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_16\n, .cmr = {{0x0285257bu, 0x090d8da1u, 0x28ef64a8u, 0x0c8d16fdu, 0xc3bf5ce5u, 0x0fcd56feu, 0xc5f90255u, 0xd9c8df47u}}\n, .sourceIx = ty_pw16w64\n, .targetIx = ty_pw64w16\n, .cost = 73 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_2\n, .cmr = {{0x7ec2dd65u, 0xc9e013e3u, 0xe4ce90fbu, 0xeb3fb1c7u, 0x8ccc5d2au, 0x7d26d8afu, 0x77f99de8u, 0x4cf72973u}}\n, .sourceIx = ty_pw2w64\n, .targetIx = ty_pw64w2\n, .cost = 76 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_32] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_32\n, .cmr = {{0x356f7dd4u, 0x6ba33f84u, 0xb06672fdu, 0xe9a2972eu, 0x80f3ea96u, 0x5ae8bc0bu, 0xff67aa2fu, 0x69f10b56u}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_pw64w32\n, .cost = 73 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_4\n, .cmr = {{0x05464a33u, 0x35afbb09u, 0xd046828au, 0x922c4da0u, 0xeceeb109u, 0x77e46801u, 0xc93cdd66u, 0x8f22ee63u}}\n, .sourceIx = ty_pw4w64\n, .targetIx = ty_pw64w4\n, .cost = 56 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_8] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_8\n, .cmr = {{0x70172e1au, 0x6948bf40u, 0x120e68fbu, 0x8b4b23bcu, 0x355a1200u, 0x2ccc1db6u, 0x47c89b12u, 0xd10ec506u}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_pw64w8\n, .cost = 68 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_8_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_8_1\n, .cmr = {{0x5669dbfcu, 0xc633ec0bu, 0xdf59e22fu, 0x03ed4b64u, 0x192095f5u, 0xdf20ffc1u, 0x2dd90d7cu, 0xda11374fu}}\n, .sourceIx = ty_pbw8\n, .targetIx = ty_pw8b\n, .cost = 59 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_8_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_8_2\n, .cmr = {{0x1f944361u, 0x09df52b3u, 0x45fa3a89u, 0xac2a49edu, 0xc9d285f2u, 0x1f45ed11u, 0xd775f7f7u, 0xf39d3e8fu}}\n, .sourceIx = ty_pw2w8\n, .targetIx = ty_pw8w2\n, .cost = 49 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_8_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_8_4\n, .cmr = {{0x714698a2u, 0x7684b5bau, 0xa6b6480eu, 0xe3b257cbu, 0xb7cdab74u, 0x72f371a6u, 0x270618c0u, 0xab12908bu}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_pw8w4\n, .cost = 51 /* milli weight units */\n}\n,[FULL_SUBTRACT_16] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_16\n, .cmr = {{0x40096152u, 0xb54e7425u, 0x4555a65du, 0xccc629dfu, 0x57b979c8u, 0x47005450u, 0x36fe190au, 0x6af3d38au}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw16\n, .cost = 99 /* milli weight units */\n}\n,[FULL_SUBTRACT_32] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_32\n, .cmr = {{0xe7930d64u, 0x35a9680bu, 0xefb49db7u, 0xd87c2f50u, 0xafd46d98u, 0x880ded50u, 0xe5055fa3u, 0x09e1afcau}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw32\n, .cost = 92 /* milli weight units */\n}\n,[FULL_SUBTRACT_64] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_64\n, .cmr = {{0xff281df8u, 0xc42a3159u, 0xd9ffa925u, 0x16ca893eu, 0x23b0eb93u, 0x8b4cb0b3u, 0xf134468eu, 0x9f4ebc46u}}\n, .sourceIx = ty_pbw128\n, .targetIx = ty_pbw64\n, .cost = 109 /* milli weight units */\n}\n,[FULL_SUBTRACT_8] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_8\n, .cmr = {{0x7e3dcfe4u, 0x56ae3c5cu, 0x87debf04u, 0x7189c274u, 0x82a4ff4eu, 0x8cfd1f17u, 0x30c87d2bu, 0x7bff73bau}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw8\n, .cost = 106 /* milli weight units */\n}\n,[GE_IS_ON_CURVE] =\n{ .tag = JET\n, .jet = simplicity_ge_is_on_curve\n, .cmr = {{0x7d448719u, 0xf5f9572bu, 0xf5402e12u, 0xd193aff6u, 0x77482d66u, 0xff3dcf27u, 0x48f25c6bu, 0x7377028cu}}\n, .sourceIx = ty_w512\n, .targetIx = ty_b\n, .cost = 688 /* milli weight units */\n}\n,[GE_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_ge_negate\n, .cmr = {{0x3d2c8de4u, 0xc7015fd3u, 0x132695fdu, 0x66dfcf0fu, 0x1778c791u, 0x85268e9fu, 0xae7789dau, 0x538eca59u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w512\n, .cost = 1071 /* milli weight units */\n}\n,[GEJ_ADD] =\n{ .tag = JET\n, .jet = simplicity_gej_add\n, .cmr = {{0x45ba7f3du, 0x1e1e6d34u, 0x9fcf8698u, 0x7b0e7f7au, 0xce662e82u, 0x201d3502u, 0x60454e2fu, 0xfeecb54du}}\n, .sourceIx = ty_ppw512w256pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 3000 /* milli weight units */\n}\n,[GEJ_DOUBLE] =\n{ .tag = JET\n, .jet = simplicity_gej_double\n, .cmr = {{0x23e978f3u, 0x4154119bu, 0xdefc5d13u, 0xfcfd0a34u, 0xa75e3726u, 0xd6cb2581u, 0x3370ad7du, 0x9de5e133u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 1862 /* milli weight units */\n}\n,[GEJ_EQUIV] =\n{ .tag = JET\n, .jet = simplicity_gej_equiv\n, .cmr = {{0xb94b2aacu, 0x73a67f44u, 0x95859913u, 0x4de23017u, 0x9e9d6bb6u, 0x47fd0611u, 0x158aaba7u, 0x0b73e400u}}\n, .sourceIx = ty_ppw512w256pw512w256\n, .targetIx = ty_b\n, .cost = 2376 /* milli weight units */\n}\n,[GEJ_GE_ADD] =\n{ .tag = JET\n, .jet = simplicity_gej_ge_add\n, .cmr = {{0xf1160b6fu, 0x5ee2c582u, 0xe49566e6u, 0xc386b380u, 0x94abc1a7u, 0x182d33a1u, 0x501fa2aau, 0xf00af3eau}}\n, .sourceIx = ty_ppw512w256w512\n, .targetIx = ty_pw512w256\n, .cost = 2609 /* milli weight units */\n}\n,[GEJ_GE_ADD_EX] =\n{ .tag = JET\n, .jet = simplicity_gej_ge_add_ex\n, .cmr = {{0xc3d7347fu, 0xfe2d9c83u, 0x9aac567eu, 0x2998e016u, 0xaf394e2au, 0x1929314bu, 0x52e31eedu, 0x678e30bfu}}\n, .sourceIx = ty_ppw512w256w512\n, .targetIx = ty_pw256pw512w256\n, .cost = 2860 /* milli weight units */\n}\n,[GEJ_GE_EQUIV] =\n{ .tag = JET\n, .jet = simplicity_gej_ge_equiv\n, .cmr = {{0x27c29969u, 0x139f8d57u, 0xedc9895cu, 0x30403df0u, 0x15c50ce7u, 0x21c381fbu, 0x197c0c04u, 0x03f1db0cu}}\n, .sourceIx = ty_ppw512w256w512\n, .targetIx = ty_b\n, .cost = 1823 /* milli weight units */\n}\n,[GEJ_INFINITY] =\n{ .tag = JET\n, .jet = simplicity_gej_infinity\n, .cmr = {{0xaafb9380u, 0xd61a7f14u, 0x7846806bu, 0x2cc374fbu, 0xe82dd1aeu, 0xd485b98au, 0x0f164b3au, 0x54c2c0b0u}}\n, .sourceIx = ty_u\n, .targetIx = ty_pw512w256\n, .cost = 765 /* milli weight units */\n}\n,[GEJ_IS_INFINITY] =\n{ .tag = JET\n, .jet = simplicity_gej_is_infinity\n, .cmr = {{0xdb495fd1u, 0x3142e9b3u, 0x3763fc6du, 0x48d2fb0eu, 0x71b0d9d9u, 0x9bd726f4u, 0x7ad13fc5u, 0x560670a2u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_b\n, .cost = 701 /* milli weight units */\n}\n,[GEJ_IS_ON_CURVE] =\n{ .tag = JET\n, .jet = simplicity_gej_is_on_curve\n, .cmr = {{0xbf4ca13fu, 0xf212e34bu, 0xf17d90c1u, 0x2e453d08u, 0xac7daa4au, 0x47d57e85u, 0xb43f2d43u, 0x66d43ddau}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_b\n, .cost = 1039 /* milli weight units */\n}\n,[GEJ_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_gej_negate\n, .cmr = {{0x01bd1a35u, 0x1fb8164cu, 0x813d916du, 0x07774999u, 0x6b7db118u, 0xd31586cau, 0x9d75e756u, 0x3518f454u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 1549 /* milli weight units */\n}\n,[GEJ_NORMALIZE] =\n{ .tag = JET\n, .jet = simplicity_gej_normalize\n, .cmr = {{0xec597d17u, 0xe2efb6d2u, 0xa002d50eu, 0x677527d3u, 0xd4a2907au, 0x119d68f1u, 0x2284b9a1u, 0xb0d2303au}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_mw512\n, .cost = 4184 /* milli weight units */\n}\n,[GEJ_RESCALE] =\n{ .tag = JET\n, .jet = simplicity_gej_rescale\n, .cmr = {{0x2977d953u, 0xef7a1156u, 0xcec6db2du, 0xc2925412u, 0x75cbc82fu, 0xb829fd67u, 0x1b972e89u, 0xebed0c24u}}\n, .sourceIx = ty_ppw512w256w256\n, .targetIx = ty_pw512w256\n, .cost = 2011 /* milli weight units */\n}\n,[GEJ_X_EQUIV] =\n{ .tag = JET\n, .jet = simplicity_gej_x_equiv\n, .cmr = {{0xf9f189fcu, 0x00b61f72u, 0xf10baaa2u, 0x1bcd88e5u, 0xd22e0aa9u, 0xb7509ae1u, 0x62a183a4u, 0xb664a4afu}}\n, .sourceIx = ty_pw256pw512w256\n, .targetIx = ty_b\n, .cost = 1103 /* milli weight units */\n}\n,[GEJ_Y_IS_ODD] =\n{ .tag = JET\n, .jet = simplicity_gej_y_is_odd\n, .cmr = {{0x9eb6e453u, 0x5fb69bf6u, 0x09916599u, 0xf1345ad7u, 0x735da3f3u, 0x948d0686u, 0x908e44f4u, 0x5b2ff60cu}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_b\n, .cost = 3702 /* milli weight units */\n}\n,[GENERATE] =\n{ .tag = JET\n, .jet = simplicity_generate\n, .cmr = {{0x148885acu, 0x73813113u, 0xc523e809u, 0xbea47ffdu, 0x8b1daf37u, 0x8d9dd54bu, 0xf966ccb8u, 0x83b1a984u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_pw512w256\n, .cost = 49851 /* milli weight units */\n}\n,[HASH_TO_CURVE] =\n{ .tag = JET\n, .jet = simplicity_hash_to_curve\n, .cmr = {{0xef4f548bu, 0x3c6c7517u, 0x5f2ce2d1u, 0x993b2d19u, 0x9beb16c0u, 0xa140175cu, 0x48a1277eu, 0xfc43a99bu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w512\n, .cost = 69844 /* milli weight units */\n}\n,[HIGH_1] =\n{ .tag = JET\n, .jet = simplicity_high_1\n, .cmr = {{0xb109cf1cu, 0xce35f7e9u, 0xb649671au, 0x9b45dbc2u, 0x4099a713u, 0xaeb9a89cu, 0xc4cf6ef6u, 0xed8b308bu}}\n, .sourceIx = ty_u\n, .targetIx = ty_b\n, .cost = 42 /* milli weight units */\n}\n,[HIGH_16] =\n{ .tag = JET\n, .jet = simplicity_high_16\n, .cmr = {{0x035dadd9u, 0xd7bf7433u, 0x6445e71du, 0xdc4d8202u, 0x24ff7e38u, 0xe0b8d52bu, 0xec9729b5u, 0x72b531f9u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 50 /* milli weight units */\n}\n,[HIGH_32] =\n{ .tag = JET\n, .jet = simplicity_high_32\n, .cmr = {{0xc5f1df0du, 0x64a2737au, 0x631b3aaeu, 0x8f260e8bu, 0x8dc1957bu, 0xd092911bu, 0x91d2078au, 0xd21e418au}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 64 /* milli weight units */\n}\n,[HIGH_64] =\n{ .tag = JET\n, .jet = simplicity_high_64\n, .cmr = {{0xa312633eu, 0x0a2305e6u, 0x9b3f341du, 0x91d683ddu, 0x94196a2fu, 0x9005c9b1u, 0x872a2c15u, 0xad46cf17u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 52 /* milli weight units */\n}\n,[HIGH_8] =\n{ .tag = JET\n, .jet = simplicity_high_8\n, .cmr = {{0xcbd78d50u, 0xaf779985u, 0x5adc4903u, 0xdbbefc13u, 0x45d51484u, 0xf03d3c75u, 0x5caaa5cau, 0xa97d4a14u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 59 /* milli weight units */\n}\n,[INCREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_increment_16\n, .cmr = {{0x86774949u, 0x39b27b86u, 0xcb5a8c7fu, 0x8172ad55u, 0x509531c9u, 0xb0e11e99u, 0x757e296cu, 0xc3c7c192u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw16\n, .cost = 56 /* milli weight units */\n}\n,[INCREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_increment_32\n, .cmr = {{0x6bdbab7cu, 0xfc16c503u, 0x363c2f07u, 0x7e02c335u, 0xda406175u, 0xd192fbefu, 0x50c07fc2u, 0x79b3f40cu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw32\n, .cost = 73 /* milli weight units */\n}\n,[INCREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_increment_64\n, .cmr = {{0x20e75e71u, 0x7cb76d46u, 0x95564f7cu, 0x20221b7au, 0x01431387u, 0x38f151aau, 0x195eb170u, 0xec13c049u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw64\n, .cost = 64 /* milli weight units */\n}\n,[INCREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_increment_8\n, .cmr = {{0x5f4e056eu, 0xf4ed8d68u, 0xbf911fc5u, 0xcb69037eu, 0xbf6c9221u, 0x7343a890u, 0x5d38c432u, 0xc183233cu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_pbw8\n, .cost = 69 /* milli weight units */\n}\n,[INPUT_ANNEX_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_annex_hash\n, .cmr = {{0x945b147eu, 0x5f0edb83u, 0x2d62348cu, 0xaeeac224u, 0x56eee944u, 0x65376dbfu, 0x596b9d62u, 0x985b01b6u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 77 /* milli weight units */\n}\n,[INPUT_ANNEXES_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_annexes_hash\n, .cmr = {{0x89b60270u, 0x44141f20u, 0x65b6f236u, 0xcfcc13b9u, 0x68485e00u, 0x746b7859u, 0x286903c6u, 0x8c7f880du}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 124 /* milli weight units */\n}\n,[INPUT_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_hash\n, .cmr = {{0x3ad22231u, 0xd6b9dff6u, 0xa0b4dbcfu, 0xf044e11cu, 0x082e0468u, 0x4e73ce95u, 0xc205e0c4u, 0x496e5ecau}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 832 /* milli weight units */\n}\n,[INPUT_OUTPOINTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_outpoints_hash\n, .cmr = {{0x1759c6f4u, 0x70b9aba6u, 0x2a31791eu, 0xa01056e3u, 0x608bdf22u, 0xf5dd43bfu, 0x7db00ea5u, 0x823f7cceu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 126 /* milli weight units */\n}\n,[INPUT_PREV_OUTPOINT] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_prev_outpoint\n, .cmr = {{0x5d171242u, 0x09ee0521u, 0x24e55238u, 0xe0b6a6feu, 0x85a48688u, 0xc1e15e61u, 0x81de94f7u, 0x8db04018u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mpw256w32\n, .cost = 140 /* milli weight units */\n}\n,[INPUT_SCRIPT_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_script_hash\n, .cmr = {{0x0562412fu, 0x021da481u, 0x9b019c8cu, 0xd887d530u, 0x492b9f94u, 0x2c4ebf21u, 0xae39ed32u, 0x330d7cfeu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 143 /* milli weight units */\n}\n,[INPUT_SCRIPT_SIG_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_script_sig_hash\n, .cmr = {{0x1c7efb37u, 0xcbc4b996u, 0xd9b8c617u, 0x08e66573u, 0xce87c1f0u, 0xaa0522d0u, 0x65ba9025u, 0x056e3f80u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 137 /* milli weight units */\n}\n,[INPUT_SCRIPT_SIGS_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_script_sigs_hash\n, .cmr = {{0xe729c5f5u, 0x8a938908u, 0x1a5ca845u, 0xf76cb980u, 0xf08599ceu, 0xb3c7d7eau, 0xe1145b53u, 0xa60ae3d5u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 127 /* milli weight units */\n}\n,[INPUT_SCRIPTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_scripts_hash\n, .cmr = {{0xf177671du, 0x60960e46u, 0x3a9a8f7eu, 0x1f5213aau, 0xba9122d2u, 0xdb75fe91u, 0xf8f1cf91u, 0xbe001907u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 129 /* milli weight units */\n}\n,[INPUT_SEQUENCE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_sequence\n, .cmr = {{0x5dd17fe1u, 0x550f48f7u, 0xbaed4d06u, 0x8008d4a1u, 0xff98cbebu, 0xe2541c5du, 0xc77ac53au, 0xd83fa779u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw32\n, .cost = 78 /* milli weight units */\n}\n,[INPUT_SEQUENCES_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_sequences_hash\n, .cmr = {{0x55973d64u, 0x43457472u, 0x81377364u, 0xbad2a80bu, 0x758f4566u, 0x60c18de5u, 0xc01a3882u, 0x071d50e8u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 125 /* milli weight units */\n}\n,[INPUT_UTXO_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_utxo_hash\n, .cmr = {{0x931e4e95u, 0xe0a64760u, 0x276e91b5u, 0xdc746780u, 0xd0697d0au, 0xf5aaf5bbu, 0xc81dbeb3u, 0x98596abbu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 824 /* milli weight units */\n}\n,[INPUT_UTXOS_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_utxos_hash\n, .cmr = {{0xd6f90cd1u, 0x04e1a5c6u, 0x1a4b5000u, 0xad9aba8du, 0x43004bf9u, 0x43df325fu, 0xa636d1a2u, 0x2beca0cbu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 122 /* milli weight units */\n}\n,[INPUT_VALUE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_value\n, .cmr = {{0x7d3c3f95u, 0x5b2cf0d0u, 0xd1280a1bu, 0xb1204692u, 0x92d1329cu, 0x83a9c2ffu, 0x7e7e1eb3u, 0xf69783a3u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw64\n, .cost = 81 /* milli weight units */\n}\n,[INPUT_VALUES_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_input_values_hash\n, .cmr = {{0x29839eadu, 0x0eb03fe4u, 0x6542e36du, 0x71e9e6afu, 0xdf969301u, 0x533d74eeu, 0x099b1266u, 0xa250552cu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 126 /* milli weight units */\n}\n,[INPUTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_inputs_hash\n, .cmr = {{0xabbfe1c7u, 0xd115c419u, 0x1f504839u, 0xf98c3f20u, 0x422b84e7u, 0xfa14da14u, 0x02896c4du, 0x98bfa8d8u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 122 /* milli weight units */\n}\n,[INTERNAL_KEY] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_internal_key\n, .cmr = {{0x37483699u, 0x2810022fu, 0x88e0145bu, 0xcad77f4au, 0x8491fa80u, 0x83cb51c3u, 0x01fcf7a1u, 0x3478c2ccu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 124 /* milli weight units */\n}\n,[IS_ONE_16] =\n{ .tag = JET\n, .jet = simplicity_is_one_16\n, .cmr = {{0x1bd3a253u, 0xdb243fcau, 0x45533799u, 0xfe914838u, 0xc38e3806u, 0xb12bd7e8u, 0x5ca71207u, 0xa88462b0u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 64 /* milli weight units */\n}\n,[IS_ONE_32] =\n{ .tag = JET\n, .jet = simplicity_is_one_32\n, .cmr = {{0x78b1bae0u, 0x99ec9c59u, 0xcbf41262u, 0x51c1e967u, 0x41b350d5u, 0x63bd74d5u, 0x4418ba78u, 0xebea25bfu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 64 /* milli weight units */\n}\n,[IS_ONE_64] =\n{ .tag = JET\n, .jet = simplicity_is_one_64\n, .cmr = {{0x817b95a5u, 0x395efbecu, 0xbb8515a5u, 0x5b3ffe1au, 0x4d7bac6eu, 0x23dbca54u, 0xad606666u, 0x2f202b93u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 66 /* milli weight units */\n}\n,[IS_ONE_8] =\n{ .tag = JET\n, .jet = simplicity_is_one_8\n, .cmr = {{0xf6925491u, 0xd34b3774u, 0x2cb08decu, 0x193ee512u, 0x5f933cadu, 0xcc232aedu, 0xeedb572du, 0x1260ffd5u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 47 /* milli weight units */\n}\n,[IS_ZERO_16] =\n{ .tag = JET\n, .jet = simplicity_is_zero_16\n, .cmr = {{0x1ba7213bu, 0x588be092u, 0xb446599cu, 0x2a60ff54u, 0x67136a79u, 0x7599610bu, 0xd7a5f178u, 0x04e32a2cu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 52 /* milli weight units */\n}\n,[IS_ZERO_32] =\n{ .tag = JET\n, .jet = simplicity_is_zero_32\n, .cmr = {{0x5ebf1466u, 0x93f0e2d2u, 0xf9361b47u, 0x6dba3485u, 0x8b832d66u, 0xfacf713bu, 0xfb32c3bbu, 0x8db9eebfu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 58 /* milli weight units */\n}\n,[IS_ZERO_64] =\n{ .tag = JET\n, .jet = simplicity_is_zero_64\n, .cmr = {{0x19ab9ac0u, 0xcf426682u, 0x19ba6cb8u, 0x97e487feu, 0x3680937fu, 0xffa8d203u, 0x511db75du, 0xbb10c7e5u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 68 /* milli weight units */\n}\n,[IS_ZERO_8] =\n{ .tag = JET\n, .jet = simplicity_is_zero_8\n, .cmr = {{0x8eff6208u, 0x4407e9afu, 0xd540f318u, 0xf66bcf31u, 0xdf1d42a5u, 0xc161cae3u, 0x5a294818u, 0x0ca2aa2eu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 59 /* milli weight units */\n}\n,[LE_16] =\n{ .tag = JET\n, .jet = simplicity_le_16\n, .cmr = {{0x016705a7u, 0xd7dce1afu, 0xc63eab84u, 0x203f5f42u, 0xd6b6bbadu, 0x75cee38cu, 0xec5a515bu, 0x5997489fu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 83 /* milli weight units */\n}\n,[LE_32] =\n{ .tag = JET\n, .jet = simplicity_le_32\n, .cmr = {{0x5351fc5du, 0xebe5b298u, 0xad7057e4u, 0xa5a76a3bu, 0x9c658acdu, 0xe7d1bb52u, 0xe5889ca1u, 0xe38f5efbu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 99 /* milli weight units */\n}\n,[LE_64] =\n{ .tag = JET\n, .jet = simplicity_le_64\n, .cmr = {{0xae2de1e0u, 0xcf730d1du, 0xcc96d7ccu, 0xfe71168au, 0x240deaf8u, 0x04615a7bu, 0xa920dc16u, 0xfd6ea45fu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 79 /* milli weight units */\n}\n,[LE_8] =\n{ .tag = JET\n, .jet = simplicity_le_8\n, .cmr = {{0xaf29f616u, 0x8ebdc09eu, 0xfbe0e639u, 0xcb750b12u, 0x05788f90u, 0x21d666efu, 0xcefe13f1u, 0x2f9671f0u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 93 /* milli weight units */\n}\n,[LEFT_EXTEND_16_32] =\n{ .tag = JET\n, .jet = simplicity_left_extend_16_32\n, .cmr = {{0x289997fbu, 0xa1fae7ecu, 0x1c4531c5u, 0x0bbf8671u, 0xb897139bu, 0xdd3aad97u, 0xa3763957u, 0x4a047c80u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 72 /* milli weight units */\n}\n,[LEFT_EXTEND_16_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_16_64\n, .cmr = {{0x5dff21f6u, 0xe6124775u, 0xc578eaf4u, 0x855c0b01u, 0x64f7879bu, 0x1760f902u, 0x7cb50f7bu, 0x5acb4918u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 69 /* milli weight units */\n}\n,[LEFT_EXTEND_1_16] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_16\n, .cmr = {{0x8c87d756u, 0xd14bd3d9u, 0xa7869081u, 0x2912b894u, 0x29c0171au, 0x41103a58u, 0xc6e9f225u, 0x141a0222u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 50 /* milli weight units */\n}\n,[LEFT_EXTEND_1_32] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_32\n, .cmr = {{0xc8f154d4u, 0x6d2e7895u, 0xda1b33c2u, 0xb315e6d4u, 0xd4851ddeu, 0xe28aef8bu, 0x70709061u, 0x6bc7eea0u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 48 /* milli weight units */\n}\n,[LEFT_EXTEND_1_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_64\n, .cmr = {{0xa3404df6u, 0x8cc92075u, 0x4c6e1847u, 0x207db384u, 0x5d11c749u, 0x09d07ca8u, 0x2ad1f1ccu, 0x67bf3a9bu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 49 /* milli weight units */\n}\n,[LEFT_EXTEND_1_8] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_8\n, .cmr = {{0x3bca3397u, 0xb83c27f3u, 0x6316f8b8u, 0xb303350au, 0xfe8ba007u, 0x8f77f1d4u, 0x2a9b7892u, 0xb2a4dbeeu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 46 /* milli weight units */\n}\n,[LEFT_EXTEND_32_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_32_64\n, .cmr = {{0x42cbeb01u, 0xfe7a3a6du, 0xd3311db3u, 0x365f91e5u, 0xc118c7e4u, 0x1f03aae7u, 0xb283de6bu, 0xb9053e6bu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 69 /* milli weight units */\n}\n,[LEFT_EXTEND_8_16] =\n{ .tag = JET\n, .jet = simplicity_left_extend_8_16\n, .cmr = {{0x9a57c96au, 0xf5714896u, 0xb724de45u, 0xeb9fe97du, 0x73697de6u, 0x2e8dad78u, 0x71eb58f5u, 0x81a011bbu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 58 /* milli weight units */\n}\n,[LEFT_EXTEND_8_32] =\n{ .tag = JET\n, .jet = simplicity_left_extend_8_32\n, .cmr = {{0xd624bd40u, 0x40763cb1u, 0x3ccad498u, 0xf53d38c1u, 0x12f19295u, 0x6826dafeu, 0xc9ac9165u, 0x792b347au}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 86 /* milli weight units */\n}\n,[LEFT_EXTEND_8_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_8_64\n, .cmr = {{0x9dc4a205u, 0x4d5d2634u, 0x2ac590b6u, 0x67f1b01du, 0xf54fd0cdu, 0xaa405ef8u, 0xcbb76fd8u, 0xf9b00ee5u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 98 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_16_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_16_32\n, .cmr = {{0x0545c4b5u, 0x8f004a21u, 0xe7f129a4u, 0xc0518997u, 0x1714caa2u, 0xd91d1dfdu, 0x5fad3e63u, 0x24499428u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 71 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_16_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_16_64\n, .cmr = {{0x1c61d03du, 0x493bbd05u, 0x822259d1u, 0x730a8d7au, 0x5f55b0bau, 0x2a9391a6u, 0xc8881eb4u, 0x7504affdu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 82 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_16\n, .cmr = {{0x56fdf54fu, 0x1fcd1982u, 0x5e7c3b79u, 0x0615c1d3u, 0xfe82886cu, 0x747bc487u, 0x5987f505u, 0x16945fb3u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 106 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_32\n, .cmr = {{0xdb33059au, 0xbe2d432du, 0x67f42b1eu, 0x942756dcu, 0xa6cde637u, 0x85e5bd43u, 0x0dc8f4aeu, 0xfc31b8dfu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 220 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_64\n, .cmr = {{0x1d669c1fu, 0xa5fd3ef6u, 0x6eb4aef6u, 0x186e3ec1u, 0x36ee7584u, 0x10df3edeu, 0xbb31bf26u, 0xd4562051u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 302 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_8] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_8\n, .cmr = {{0x9a1bad3du, 0x8ab90030u, 0x3da202f0u, 0xf449f0b7u, 0xe6795c2au, 0x7c121718u, 0x800ac40cu, 0x87d82729u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 73 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_32_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_32_64\n, .cmr = {{0x3920cc4bu, 0x33baf7efu, 0xa5caf9e7u, 0x80014467u, 0x06f6e4e8u, 0x26567405u, 0x7eed8717u, 0x78089e94u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 69 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_8_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_8_16\n, .cmr = {{0x752e29f2u, 0xfe2becc3u, 0xf66290feu, 0x44e1aeb3u, 0x784180ddu, 0x905e1962u, 0x4e195f21u, 0x6c07c57cu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 65 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_8_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_8_32\n, .cmr = {{0xbee88f1cu, 0x8c30634cu, 0x6e95caccu, 0x0e9add49u, 0x413221fdu, 0xabbd8d4cu, 0x0accf1cau, 0xe2d2a778u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 105 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_8_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_8_64\n, .cmr = {{0x392387f6u, 0xdc04bfc5u, 0x4dd4a281u, 0x19c81d15u, 0xd7a5809bu, 0xbf62fcc2u, 0x7dc55cf8u, 0x2e9e5ee6u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 113 /* milli weight units */\n}\n,[LEFT_PAD_LOW_16_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_16_32\n, .cmr = {{0x4ffd6cb3u, 0x40230582u, 0x1dd89970u, 0xd722d1c1u, 0x3f1ff773u, 0x9fd5f34bu, 0xa16c7365u, 0x3b044718u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 65 /* milli weight units */\n}\n,[LEFT_PAD_LOW_16_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_16_64\n, .cmr = {{0xbe3eb85cu, 0x5f199153u, 0xfb1c4613u, 0x5c04facfu, 0xdbc6f1b7u, 0x8c2bb7aeu, 0x75f155bcu, 0x3ea08a8bu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 68 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_16\n, .cmr = {{0xddd0153eu, 0xf312f28du, 0x642cd94cu, 0xb36f3297u, 0x75b00da8u, 0x8fccc4ceu, 0xa1bae89bu, 0xad13be6bu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 59 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_32\n, .cmr = {{0xbc9d3114u, 0x35467bc0u, 0x8b1008e5u, 0x47aa7a07u, 0xe83b1514u, 0x6861a9e9u, 0xb5413be3u, 0x1b82b6b5u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 47 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_64\n, .cmr = {{0x8bc62f93u, 0x60894e48u, 0xa4732c95u, 0x769c8faau, 0xe9568f9du, 0xe8e8a200u, 0x836bd4e5u, 0x0b02cd84u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 46 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_8] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_8\n, .cmr = {{0xf66cd7a4u, 0x2b320f97u, 0xc19f2d54u, 0x16cde087u, 0x253a2791u, 0x2965d55bu, 0x65712ad8u, 0x09b83cfdu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 48 /* milli weight units */\n}\n,[LEFT_PAD_LOW_32_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_32_64\n, .cmr = {{0xa33a07b9u, 0xbcf945f6u, 0x4f072b8bu, 0x9c914839u, 0xa585bfa9u, 0xf3425b14u, 0x7754ab55u, 0xa8ba6c0fu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 62 /* milli weight units */\n}\n,[LEFT_PAD_LOW_8_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_8_16\n, .cmr = {{0x2a516a79u, 0x3f97c45fu, 0xeaebb1ccu, 0x961a156du, 0x80354928u, 0x79789d6eu, 0xdc9b57e7u, 0x2f11e5b5u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 56 /* milli weight units */\n}\n,[LEFT_PAD_LOW_8_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_8_32\n, .cmr = {{0x1aa2e4d0u, 0x4bd69055u, 0x123dd6aau, 0xfe27f5f7u, 0xf47c3b30u, 0x90c3a827u, 0x2973fe2fu, 0x75165a5du}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 75 /* milli weight units */\n}\n,[LEFT_PAD_LOW_8_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_8_64\n, .cmr = {{0xb652e0aeu, 0xdd0f4f66u, 0xf6a1cd4bu, 0xebf875ffu, 0x7bbb2dd9u, 0x9b065b2du, 0xb5b5b590u, 0x5361614du}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 116 /* milli weight units */\n}\n,[LEFT_ROTATE_16] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_16\n, .cmr = {{0x8a12ff6au, 0x4bf23715u, 0xdd3b766bu, 0x9967c715u, 0x8bf3ed74u, 0xb3dce730u, 0xaffcf466u, 0x16478ecbu}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 88 /* milli weight units */\n}\n,[LEFT_ROTATE_32] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_32\n, .cmr = {{0x2fcb5217u, 0x2fd49c36u, 0x217deae0u, 0xc2371432u, 0x1f69f5f1u, 0x3f6e94b2u, 0xbdfe4b74u, 0x88697fd5u}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 62 /* milli weight units */\n}\n,[LEFT_ROTATE_64] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_64\n, .cmr = {{0x72ccd6c4u, 0xe5fdf68au, 0xd33b6d58u, 0xfb372be4u, 0xf1b80eefu, 0x701f9db7u, 0xe5ed859bu, 0x96b36209u}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 68 /* milli weight units */\n}\n,[LEFT_ROTATE_8] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_8\n, .cmr = {{0x1aaec9f3u, 0xb75d89f8u, 0x2a649845u, 0x8c4483cbu, 0x9a784489u, 0x05f3bb39u, 0xfc083f14u, 0xddccdc9bu}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 66 /* milli weight units */\n}\n,[LEFT_SHIFT_16] =\n{ .tag = JET\n, .jet = simplicity_left_shift_16\n, .cmr = {{0x37ac6387u, 0x21ab097au, 0x9602ba4du, 0xc92e19b5u, 0xa185b232u, 0x9f1aa600u, 0xcb9c1561u, 0x5a0081f8u}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 109 /* milli weight units */\n}\n,[LEFT_SHIFT_32] =\n{ .tag = JET\n, .jet = simplicity_left_shift_32\n, .cmr = {{0x8e3c473bu, 0x2867f154u, 0x73b3632du, 0xbfdd9977u, 0x5551ef5fu, 0x9dba475eu, 0x9cf09075u, 0x8070f0bfu}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 79 /* milli weight units */\n}\n,[LEFT_SHIFT_64] =\n{ .tag = JET\n, .jet = simplicity_left_shift_64\n, .cmr = {{0x5049f404u, 0xd173299au, 0x3aee04cbu, 0xc2462cb3u, 0x4c8069c1u, 0xb6db7fedu, 0x0e388ff6u, 0xd467a086u}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 70 /* milli weight units */\n}\n,[LEFT_SHIFT_8] =\n{ .tag = JET\n, .jet = simplicity_left_shift_8\n, .cmr = {{0x832f636eu, 0x63446cefu, 0xba8df3a4u, 0x6efbb361u, 0x59c18854u, 0x567768adu, 0xc9b8db8au, 0x07492a58u}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 72 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_16] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_16\n, .cmr = {{0xe64762b1u, 0xc5e6144au, 0x7181eaafu, 0x4dd9d9b3u, 0xaa43aad9u, 0x55158198u, 0xee2090ebu, 0xd9e4bb0du}}\n, .sourceIx = ty_pbpw4w16\n, .targetIx = ty_w16\n, .cost = 72 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_32] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_32\n, .cmr = {{0x6476ba89u, 0x95f83b5eu, 0xe1ebc22cu, 0xb416f558u, 0x157f2e57u, 0x699a5cafu, 0x84291ff3u, 0xfc1483c1u}}\n, .sourceIx = ty_pbpw8w32\n, .targetIx = ty_w32\n, .cost = 87 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_64] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_64\n, .cmr = {{0x06b8fe67u, 0xcfc58632u, 0x2397af02u, 0x4fde2911u, 0xf7ae87a0u, 0x6abc6c59u, 0x30934097u, 0x15691c19u}}\n, .sourceIx = ty_pbpw8w64\n, .targetIx = ty_w64\n, .cost = 97 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_8] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_8\n, .cmr = {{0xb1ac9c68u, 0x2358c45bu, 0xabf40695u, 0x56fe6e37u, 0x5b4554deu, 0x9e10c591u, 0xc1483984u, 0x47ac180eu}}\n, .sourceIx = ty_pbpw4w8\n, .targetIx = ty_w8\n, .cost = 104 /* milli weight units */\n}\n,[LEFTMOST_16_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_1\n, .cmr = {{0x5bff4cb5u, 0x587605d5u, 0xfd059d77u, 0x33490d7du, 0xd22d278bu, 0x599e06d3u, 0xb5db6d79u, 0xf3c923bdu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 68 /* milli weight units */\n}\n,[LEFTMOST_16_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_2\n, .cmr = {{0x536db486u, 0xb12227e5u, 0xb09d6febu, 0xd2776b1au, 0xbbc67499u, 0x96aa783eu, 0xd7e53744u, 0x6bbf151bu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w2\n, .cost = 58 /* milli weight units */\n}\n,[LEFTMOST_16_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_4\n, .cmr = {{0xf2321367u, 0x496d1a77u, 0xeea05e95u, 0xe3b807d3u, 0xba5f0513u, 0x6ce0912au, 0xe717c83au, 0x0261b2e1u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w4\n, .cost = 51 /* milli weight units */\n}\n,[LEFTMOST_16_8] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_8\n, .cmr = {{0x24148ef3u, 0x0ad43ebeu, 0xc5637283u, 0x22c3ce11u, 0x79aed7a7u, 0x8216d799u, 0x888bf18bu, 0x39570671u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 62 /* milli weight units */\n}\n,[LEFTMOST_32_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_1\n, .cmr = {{0xb92e15ecu, 0x5da07ee8u, 0xed397cb9u, 0xf60a4c5du, 0xa8386293u, 0x1a907359u, 0xd27caeb6u, 0x0e60ef8au}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 53 /* milli weight units */\n}\n,[LEFTMOST_32_16] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_16\n, .cmr = {{0xadb027b2u, 0x06567358u, 0x5326c01cu, 0x3be2faebu, 0x386349e2u, 0x9009b657u, 0x6ee53a85u, 0x5512cc67u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 63 /* milli weight units */\n}\n,[LEFTMOST_32_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_2\n, .cmr = {{0xb75b31c5u, 0x59123d3du, 0x63359859u, 0x32b8b1b2u, 0x664ee597u, 0xafb15fd1u, 0xa499d007u, 0xcff2755cu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w2\n, .cost = 62 /* milli weight units */\n}\n,[LEFTMOST_32_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_4\n, .cmr = {{0xcb757e47u, 0x1e9d9a40u, 0x771dd1cfu, 0x3c1bf5d2u, 0x3c17ed68u, 0xcdbdb22du, 0xada17a73u, 0xa7b407b2u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w4\n, .cost = 61 /* milli weight units */\n}\n,[LEFTMOST_32_8] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_8\n, .cmr = {{0xbfc534b4u, 0x9e06006eu, 0x19f3b68eu, 0x0a02391cu, 0x149f9a34u, 0xf43ee36bu, 0x9f1d79a7u, 0x9c9a9e4du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w8\n, .cost = 60 /* milli weight units */\n}\n,[LEFTMOST_64_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_1\n, .cmr = {{0x1b1d4e92u, 0x384b8b15u, 0x9ba0d806u, 0x558b5494u, 0xe3614eedu, 0xe03c946cu, 0xeaf141f3u, 0x6f01c79bu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 65 /* milli weight units */\n}\n,[LEFTMOST_64_16] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_16\n, .cmr = {{0x0debdc1au, 0xa0433034u, 0x42e18fe0u, 0x3d8a99d2u, 0xbe6bb8a8u, 0x691aba19u, 0x566259e3u, 0x6760f7f9u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w16\n, .cost = 62 /* milli weight units */\n}\n,[LEFTMOST_64_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_2\n, .cmr = {{0x839ecfa3u, 0x18705c25u, 0x3d0c52ffu, 0x27b90464u, 0x923d8c0eu, 0x55a82c0du, 0x16240239u, 0x7f365378u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w2\n, .cost = 61 /* milli weight units */\n}\n,[LEFTMOST_64_32] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_32\n, .cmr = {{0x929197a9u, 0x642861a7u, 0x7bd66258u, 0x051197beu, 0x86ff08e6u, 0x28e30f7eu, 0xfcbd2c4du, 0xfecf9bddu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 77 /* milli weight units */\n}\n,[LEFTMOST_64_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_4\n, .cmr = {{0x02bd1645u, 0xd575f04bu, 0x3cbbaa6du, 0x8ca986efu, 0x1c8cd0ffu, 0xe1658903u, 0x939db764u, 0x562a2647u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w4\n, .cost = 80 /* milli weight units */\n}\n,[LEFTMOST_64_8] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_8\n, .cmr = {{0x3558b31bu, 0x3b6e8f9au, 0x288fdc72u, 0xf24602beu, 0x05581910u, 0x71a54a99u, 0xfa03a025u, 0x34f88005u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w8\n, .cost = 54 /* milli weight units */\n}\n,[LEFTMOST_8_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_8_1\n, .cmr = {{0x2865efd4u, 0x2983cbe3u, 0xf816373au, 0xb8a882f1u, 0x8317194du, 0xc1aba38du, 0xa0304b8cu, 0x144b1da4u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 54 /* milli weight units */\n}\n,[LEFTMOST_8_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_8_2\n, .cmr = {{0x51964cb0u, 0x7405a8d2u, 0x3d218774u, 0x1a9ed304u, 0xbcb469d9u, 0xac9f5d92u, 0x55825cfdu, 0xa3da07c0u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w2\n, .cost = 71 /* milli weight units */\n}\n,[LEFTMOST_8_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_8_4\n, .cmr = {{0x883c94f8u, 0xa26cdab7u, 0xbc5cd631u, 0xe52255a8u, 0x5ef6e070u, 0x766457f6u, 0x321e2ccbu, 0x119d9b2bu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w4\n, .cost = 65 /* milli weight units */\n}\n,[LINEAR_COMBINATION_1] =\n{ .tag = JET\n, .jet = simplicity_linear_combination_1\n, .cmr = {{0x3410a9eeu, 0x333df8c8u, 0xa01c1411u, 0x5b544327u, 0xe324e287u, 0xaa1107e0u, 0x1955bd20u, 0x506ea987u}}\n, .sourceIx = ty_ppw256pw512w256w256\n, .targetIx = ty_pw512w256\n, .cost = 85743 /* milli weight units */\n}\n,[LINEAR_VERIFY_1] =\n{ .tag = JET\n, .jet = simplicity_linear_verify_1\n, .cmr = {{0xdc66d331u, 0xc17f3fddu, 0xa3994698u, 0x1b39b357u, 0xd0555c35u, 0x62ecae02u, 0xaa2dad16u, 0x3e6c9a2eu}}\n, .sourceIx = ty_pppw256w512w256w512\n, .targetIx = ty_u\n, .cost = 43579 /* milli weight units */\n}\n,[LOCK_TIME] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_lock_time\n, .cmr = {{0x9ae0acc3u, 0x7bc20447u, 0x79b07c3du, 0x4602a5fdu, 0xe8bc33f8u, 0x79f66b73u, 0x9b10f01au, 0xeb1154ecu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 66 /* milli weight units */\n}\n,[LOW_1] =\n{ .tag = JET\n, .jet = simplicity_low_1\n, .cmr = {{0xfe6214f9u, 0x67156dcdu, 0xe6dd49fdu, 0xc55efb86u, 0x5069feabu, 0xfff0fe93u, 0x1dba8531u, 0x34eed130u}}\n, .sourceIx = ty_u\n, .targetIx = ty_b\n, .cost = 40 /* milli weight units */\n}\n,[LOW_16] =\n{ .tag = JET\n, .jet = simplicity_low_16\n, .cmr = {{0x7493cf69u, 0x8a4882e5u, 0xc3579d06u, 0x518e7ecau, 0x2b8428f6u, 0x2e2b5138u, 0x02abe622u, 0x170c20feu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 60 /* milli weight units */\n}\n,[LOW_32] =\n{ .tag = JET\n, .jet = simplicity_low_32\n, .cmr = {{0x362d66a4u, 0xf0aeb965u, 0x84a56757u, 0x8271b1f7u, 0xbbfcc2deu, 0x0dcf9579u, 0x6b6f7a82u, 0x6b2a8af7u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 52 /* milli weight units */\n}\n,[LOW_64] =\n{ .tag = JET\n, .jet = simplicity_low_64\n, .cmr = {{0x973323bcu, 0x2b92e428u, 0x04d2e4f5u, 0x8b86f65bu, 0x56f91deeu, 0xb4810eabu, 0x8a1deda9u, 0x697a0872u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 50 /* milli weight units */\n}\n,[LOW_8] =\n{ .tag = JET\n, .jet = simplicity_low_8\n, .cmr = {{0xcd1a8558u, 0xef99a322u, 0x60217a76u, 0x49ff5140u, 0xda69da70u, 0x0672690bu, 0x27917b07u, 0xd7c14c67u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 45 /* milli weight units */\n}\n,[LT_16] =\n{ .tag = JET\n, .jet = simplicity_lt_16\n, .cmr = {{0x04aca87eu, 0x3e17f805u, 0xa21cf291u, 0x7aee9957u, 0xb950b2dbu, 0x5d7ae5c8u, 0x26d4ac2eu, 0xc97b5a52u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 83 /* milli weight units */\n}\n,[LT_32] =\n{ .tag = JET\n, .jet = simplicity_lt_32\n, .cmr = {{0x23a0a5c1u, 0x97747e3au, 0x9579e90eu, 0x0f22f84au, 0x29bfb5f0u, 0x7b84b59bu, 0x26688a0cu, 0xd59dfebdu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 89 /* milli weight units */\n}\n,[LT_64] =\n{ .tag = JET\n, .jet = simplicity_lt_64\n, .cmr = {{0xd299901cu, 0x7b5b3a59u, 0xffc8dd09u, 0x545a3238u, 0x24b779a9u, 0x9b2d1a2fu, 0x87452d9eu, 0x4befaf30u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 71 /* milli weight units */\n}\n,[LT_8] =\n{ .tag = JET\n, .jet = simplicity_lt_8\n, .cmr = {{0xdd94413bu, 0x529c298cu, 0x1696e9fbu, 0x08e66767u, 0xb3f8337au, 0xc02e44b0u, 0x68e94014u, 0xf7c41f2au}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 86 /* milli weight units */\n}\n,[MAJ_1] =\n{ .tag = JET\n, .jet = simplicity_maj_1\n, .cmr = {{0x0e6fb40fu, 0xe31a3a52u, 0x6b44cf0bu, 0x7c7936c7u, 0x77cbba89u, 0x65a72552u, 0x32a7cf53u, 0xa922885au}}\n, .sourceIx = ty_pbw2\n, .targetIx = ty_b\n, .cost = 54 /* milli weight units */\n}\n,[MAJ_16] =\n{ .tag = JET\n, .jet = simplicity_maj_16\n, .cmr = {{0x38669ce5u, 0xe1e17147u, 0x5400731bu, 0xeeb60bcau, 0xfad66604u, 0xc9394016u, 0x0cd71288u, 0x35559342u}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 85 /* milli weight units */\n}\n,[MAJ_32] =\n{ .tag = JET\n, .jet = simplicity_maj_32\n, .cmr = {{0x5554349bu, 0x584f5c38u, 0x72c7f4f2u, 0x57829e2au, 0xe822d823u, 0x424ceb95u, 0x98f08318u, 0x586a8807u}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 73 /* milli weight units */\n}\n,[MAJ_64] =\n{ .tag = JET\n, .jet = simplicity_maj_64\n, .cmr = {{0x734903bau, 0xefb71d5eu, 0xa41648ffu, 0x43eee698u, 0x94e063b3u, 0x88ea422fu, 0x96aede19u, 0x3ceab839u}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 79 /* milli weight units */\n}\n,[MAJ_8] =\n{ .tag = JET\n, .jet = simplicity_maj_8\n, .cmr = {{0xba47a399u, 0xdc9435e1u, 0x8e080a4eu, 0x18af7c65u, 0x7fd39f7cu, 0xe7d6052eu, 0x46902311u, 0xb078d585u}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 64 /* milli weight units */\n}\n,[MAX_16] =\n{ .tag = JET\n, .jet = simplicity_max_16\n, .cmr = {{0xaa552374u, 0x6cabfaf5u, 0x668e9e07u, 0x37e56b06u, 0x062251d7u, 0xe80ab9b9u, 0x106d8f17u, 0x2dc84dd6u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 80 /* milli weight units */\n}\n,[MAX_32] =\n{ .tag = JET\n, .jet = simplicity_max_32\n, .cmr = {{0x6922965du, 0x144345c9u, 0x13ecb30bu, 0x5ed47e88u, 0xdae35c12u, 0x21f26aa9u, 0x2dd5a5f6u, 0x15dbdb53u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 70 /* milli weight units */\n}\n,[MAX_64] =\n{ .tag = JET\n, .jet = simplicity_max_64\n, .cmr = {{0x8a9be907u, 0xb6a4c30au, 0xbcc0f22du, 0x013074c2u, 0xd56bb081u, 0xf2621857u, 0xd538cc97u, 0x131e4409u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 75 /* milli weight units */\n}\n,[MAX_8] =\n{ .tag = JET\n, .jet = simplicity_max_8\n, .cmr = {{0xb4bf9323u, 0x4022e860u, 0xfe76c0b5u, 0x360e8b36u, 0xff81ee67u, 0x05b593acu, 0xdf655ac6u, 0xe6d7aebau}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 79 /* milli weight units */\n}\n,[MEDIAN_16] =\n{ .tag = JET\n, .jet = simplicity_median_16\n, .cmr = {{0x17e2e87fu, 0x0760f4fbu, 0x3c9fd0beu, 0xd000d739u, 0x73ab60f5u, 0xe6c2c1fau, 0xb17f9b23u, 0xee6aca48u}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 80 /* milli weight units */\n}\n,[MEDIAN_32] =\n{ .tag = JET\n, .jet = simplicity_median_32\n, .cmr = {{0x1160ae8eu, 0xa8d30f9au, 0x2233c48eu, 0x731240f8u, 0x4493b828u, 0xb55793e2u, 0xf4042a19u, 0x82ac26a5u}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 77 /* milli weight units */\n}\n,[MEDIAN_64] =\n{ .tag = JET\n, .jet = simplicity_median_64\n, .cmr = {{0xc8737364u, 0x9e7e4050u, 0xbb73337eu, 0x08eb5de4u, 0x5228ab86u, 0xad4e1f41u, 0x91e5202au, 0xa6afa0c5u}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 89 /* milli weight units */\n}\n,[MEDIAN_8] =\n{ .tag = JET\n, .jet = simplicity_median_8\n, .cmr = {{0xc3b4e089u, 0x8a21bde9u, 0x4daed37au, 0x20adf90cu, 0x8be5691au, 0x03b6a1e5u, 0x56385d42u, 0xeb19022bu}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 77 /* milli weight units */\n}\n,[MIN_16] =\n{ .tag = JET\n, .jet = simplicity_min_16\n, .cmr = {{0x5fd0051eu, 0xdb3719a6u, 0x45b272a0u, 0x2108efbbu, 0x3d9bc0f6u, 0x0621bf5au, 0x5babe116u, 0xd555d578u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 83 /* milli weight units */\n}\n,[MIN_32] =\n{ .tag = JET\n, .jet = simplicity_min_32\n, .cmr = {{0xd80782a2u, 0xb5d86ab6u, 0xb9c9c3fbu, 0x778a3473u, 0xf600b185u, 0xfe1925eeu, 0x9fc2e877u, 0x7ed26601u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 96 /* milli weight units */\n}\n,[MIN_64] =\n{ .tag = JET\n, .jet = simplicity_min_64\n, .cmr = {{0xc5c09d50u, 0x1338e9a5u, 0x12cf8976u, 0xca4b32b9u, 0x2480bef6u, 0xaeb29d36u, 0xd590d35bu, 0xf9f9ece1u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 82 /* milli weight units */\n}\n,[MIN_8] =\n{ .tag = JET\n, .jet = simplicity_min_8\n, .cmr = {{0x81d21e12u, 0x81423881u, 0x802c0e0cu, 0x7d22bd34u, 0xd26bd12au, 0x4c4f1b70u, 0x68e7e183u, 0x820848e9u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 78 /* milli weight units */\n}\n,[MODULO_16] =\n{ .tag = JET\n, .jet = simplicity_modulo_16\n, .cmr = {{0xb6b87cfau, 0xb67e5519u, 0xf1c998dau, 0x479437bbu, 0x79e674f7u, 0x15e9a2e5u, 0x38eec5ecu, 0x18e18ea5u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 85 /* milli weight units */\n}\n,[MODULO_32] =\n{ .tag = JET\n, .jet = simplicity_modulo_32\n, .cmr = {{0x8d486e83u, 0x1654f38au, 0x32da35ebu, 0x7bb655a6u, 0xed694dbfu, 0xa058957du, 0x9f5cbfccu, 0x5792c65bu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 81 /* milli weight units */\n}\n,[MODULO_64] =\n{ .tag = JET\n, .jet = simplicity_modulo_64\n, .cmr = {{0x14df20d9u, 0x3dfdefe2u, 0x559bac50u, 0xed38193bu, 0xd78bd63fu, 0x929d86fbu, 0x4f29a7c5u, 0xaf3242adu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 71 /* milli weight units */\n}\n,[MODULO_8] =\n{ .tag = JET\n, .jet = simplicity_modulo_8\n, .cmr = {{0x2c758a7cu, 0x0f59e800u, 0xe94f3dc5u, 0xa001bf8eu, 0xd9435f75u, 0xa2d96930u, 0xc57eaab0u, 0xcd80af5cu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 85 /* milli weight units */\n}\n,[MULTIPLY_16] =\n{ .tag = JET\n, .jet = simplicity_multiply_16\n, .cmr = {{0x75bd41f2u, 0xd2b339f0u, 0x69bfdfd8u, 0x02d61e6cu, 0xa8e3bad6u, 0xfb6d95b6u, 0x72095b93u, 0x345f047fu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w32\n, .cost = 79 /* milli weight units */\n}\n,[MULTIPLY_32] =\n{ .tag = JET\n, .jet = simplicity_multiply_32\n, .cmr = {{0x84cbe6ceu, 0x87037992u, 0x13877c1bu, 0xd505c764u, 0x34336900u, 0x2e502c43u, 0xd97f3d57u, 0x772d6c87u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w64\n, .cost = 78 /* milli weight units */\n}\n,[MULTIPLY_64] =\n{ .tag = JET\n, .jet = simplicity_multiply_64\n, .cmr = {{0x92987b80u, 0x1b92f679u, 0xeb961368u, 0x8444a178u, 0x8750a850u, 0x6e03a921u, 0x8c21ecc7u, 0x2082dc6au}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w128\n, .cost = 72 /* milli weight units */\n}\n,[MULTIPLY_8] =\n{ .tag = JET\n, .jet = simplicity_multiply_8\n, .cmr = {{0x764cab71u, 0xdb9459a7u, 0x696d944au, 0x50095b1au, 0xebdfd928u, 0x4bdb7496u, 0xa7b30241u, 0xccba3eceu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w16\n, .cost = 79 /* milli weight units */\n}\n,[NEGATE_16] =\n{ .tag = JET\n, .jet = simplicity_negate_16\n, .cmr = {{0xe760ee40u, 0x29c34f89u, 0x7406ffdeu, 0xa5558486u, 0x62e89c98u, 0x3e6070bdu, 0x0272ad0fu, 0xa342efa3u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw16\n, .cost = 69 /* milli weight units */\n}\n,[NEGATE_32] =\n{ .tag = JET\n, .jet = simplicity_negate_32\n, .cmr = {{0x8495b740u, 0x09ad07c9u, 0x302a25aeu, 0x56c3e973u, 0x3f00c2bau, 0xa410eac4u, 0xa58e75dbu, 0x83af1d22u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw32\n, .cost = 56 /* milli weight units */\n}\n,[NEGATE_64] =\n{ .tag = JET\n, .jet = simplicity_negate_64\n, .cmr = {{0x34e89fafu, 0x345afd5eu, 0x7b290014u, 0x52fc5fc2u, 0xe3783af7u, 0xf2101643u, 0xbd76706au, 0x6fc3f36au}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw64\n, .cost = 56 /* milli weight units */\n}\n,[NEGATE_8] =\n{ .tag = JET\n, .jet = simplicity_negate_8\n, .cmr = {{0xe81be0b1u, 0x5c671ab8u, 0xdf1f4869u, 0xc57f1111u, 0x18cb6683u, 0x54975c63u, 0x66ecb2b8u, 0xbb7c15cfu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_pbw8\n, .cost = 69 /* milli weight units */\n}\n,[NUM_INPUTS] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_num_inputs\n, .cmr = {{0x5c5ac4ffu, 0x6da56cb3u, 0x72b23266u, 0x6e8334b9u, 0xe2cfb0dcu, 0xb418f161u, 0xbff149e8u, 0x4ec92c3eu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 74 /* milli weight units */\n}\n,[NUM_OUTPUTS] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_num_outputs\n, .cmr = {{0x98a1cca7u, 0x05dfcfafu, 0xd3a69e9au, 0xdc05ba47u, 0xe1fefa6au, 0x29f34286u, 0x2048e496u, 0x8648c3d7u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 68 /* milli weight units */\n}\n,[ONE_16] =\n{ .tag = JET\n, .jet = simplicity_one_16\n, .cmr = {{0x2e5e3d95u, 0xe4531688u, 0x8e4f3709u, 0xef832b9fu, 0xd9e15f30u, 0x719bf55fu, 0xc2e0e09au, 0x3657d882u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 45 /* milli weight units */\n}\n,[ONE_32] =\n{ .tag = JET\n, .jet = simplicity_one_32\n, .cmr = {{0x06426b85u, 0x3c1bcb33u, 0x8aedbe1fu, 0x89a6d9b7u, 0xa3da038cu, 0xd00a4471u, 0x18369349u, 0x669e2976u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 45 /* milli weight units */\n}\n,[ONE_64] =\n{ .tag = JET\n, .jet = simplicity_one_64\n, .cmr = {{0xab1d2cd9u, 0x9678da3cu, 0x128d39adu, 0x9fe6ffa9u, 0x55c16e5eu, 0xf2c25bb4u, 0x31831559u, 0x6951f427u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 45 /* milli weight units */\n}\n,[ONE_8] =\n{ .tag = JET\n, .jet = simplicity_one_8\n, .cmr = {{0x3cc5f523u, 0xd6a6355du, 0xc924ee0au, 0xc1f5fe2cu, 0x521275e3u, 0xaa9f21d3u, 0x1b082db2u, 0xac230d9du}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 46 /* milli weight units */\n}\n,[OR_1] =\n{ .tag = JET\n, .jet = simplicity_or_1\n, .cmr = {{0xc4659643u, 0x69fca209u, 0x7f83530cu, 0x87bcbc90u, 0xc306579du, 0x9f3bfeddu, 0xf4a172a4u, 0xea0b58ecu}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 56 /* milli weight units */\n}\n,[OR_16] =\n{ .tag = JET\n, .jet = simplicity_or_16\n, .cmr = {{0x5a985e04u, 0x3b85273bu, 0x90f90e20u, 0xf82b7532u, 0x3351cf2au, 0x4e62a7f9u, 0xcb2f0596u, 0x402e9e28u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 78 /* milli weight units */\n}\n,[OR_32] =\n{ .tag = JET\n, .jet = simplicity_or_32\n, .cmr = {{0x3552383au, 0x57ffb48du, 0x63a0337au, 0xf0dd6efau, 0xb6b46c5du, 0xe1720e42u, 0x0bdd1c82u, 0x276bc9a9u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 80 /* milli weight units */\n}\n,[OR_64] =\n{ .tag = JET\n, .jet = simplicity_or_64\n, .cmr = {{0x51a173dau, 0xdca01ac6u, 0xf62e75d5u, 0xcd3522f0u, 0x9fde62b1u, 0x1513e068u, 0x422852a4u, 0x9167b606u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 71 /* milli weight units */\n}\n,[OR_8] =\n{ .tag = JET\n, .jet = simplicity_or_8\n, .cmr = {{0x79efbdcbu, 0x537bebcbu, 0x188d1116u, 0xb78a109bu, 0xffbc2a6cu, 0xe3d1f870u, 0x154a7956u, 0x091b342fu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 81 /* milli weight units */\n}\n,[OUTPOINT_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_outpoint_hash\n, .cmr = {{0x3a1ae90eu, 0x167fb40du, 0x6e13b451u, 0xad67410du, 0x8dd991c8u, 0x7d6a4a59u, 0xcc76c63fu, 0x3b9e5e56u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pw256w32\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1788 /* milli weight units */\n}\n,[OUTPUT_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_output_hash\n, .cmr = {{0x91211fc6u, 0x011a6493u, 0x00c6bee9u, 0x4fdd48a9u, 0x7fa2a9b6u, 0xf284be01u, 0x5d462d17u, 0xde664ac3u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 822 /* milli weight units */\n}\n,[OUTPUT_SCRIPT_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_output_script_hash\n, .cmr = {{0xbdfdb231u, 0xf4f1a62cu, 0x9d7b0393u, 0x1e7f19a4u, 0x546af234u, 0x754cbf70u, 0x059fdd42u, 0xbbbc4126u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 135 /* milli weight units */\n}\n,[OUTPUT_SCRIPTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_output_scripts_hash\n, .cmr = {{0xff20bc43u, 0x65e71707u, 0x571c6e17u, 0x38e1ed32u, 0x6f7c351du, 0xe13022aeu, 0xa3d6406bu, 0x8aee8e3bu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 123 /* milli weight units */\n}\n,[OUTPUT_VALUE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_output_value\n, .cmr = {{0x933643b6u, 0xc5a6220au, 0xbbca6f35u, 0x09feff6du, 0x13efa6c9u, 0xfae95924u, 0x575364f2u, 0xb164d2bcu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw64\n, .cost = 82 /* milli weight units */\n}\n,[OUTPUT_VALUES_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_output_values_hash\n, .cmr = {{0x22899379u, 0x0057066fu, 0x2016971du, 0xf55e6f67u, 0xd252efb6u, 0xdaabd0fcu, 0x566a8d21u, 0x56efbbfcu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 119 /* milli weight units */\n}\n,[OUTPUTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_outputs_hash\n, .cmr = {{0xf2eb6d0fu, 0x018e6f15u, 0xe35baa82u, 0xe57e14feu, 0x343796f2u, 0x196826beu, 0xd7c78755u, 0x98d6641du}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 117 /* milli weight units */\n}\n,[PARSE_LOCK] =\n{ .tag = JET\n, .jet = simplicity_parse_lock\n, .cmr = {{0x3db84535u, 0xfa3d90efu, 0x0b581e22u, 0xb61d2127u, 0x844b2116u, 0xe84f814au, 0x5cbac52du, 0xf515f2d2u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_sw32w32\n, .cost = 82 /* milli weight units */\n}\n,[PARSE_SEQUENCE] =\n{ .tag = JET\n, .jet = simplicity_parse_sequence\n, .cmr = {{0x38b2533fu, 0x5fede869u, 0xbaa17069u, 0x83df4c89u, 0xd62d5f90u, 0x800b47eau, 0xb2111331u, 0x1a5aaec9u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_msw16w16\n, .cost = 93 /* milli weight units */\n}\n,[POINT_VERIFY_1] =\n{ .tag = JET\n, .jet = simplicity_point_verify_1\n, .cmr = {{0xbe2a9890u, 0xf1d5b615u, 0x147f8241u, 0xe0609b5cu, 0xac01ece0u, 0xa3f92368u, 0x67b2bfdeu, 0xa1b8044eu}}\n, .sourceIx = ty_pppw256pbw256w256pbw256\n, .targetIx = ty_u\n, .cost = 41394 /* milli weight units */\n}\n,[RIGHT_EXTEND_16_32] =\n{ .tag = JET\n, .jet = simplicity_right_extend_16_32\n, .cmr = {{0xdbf18d87u, 0xa7892139u, 0xa388e9a9u, 0x83c48992u, 0xac35a845u, 0x56ee0defu, 0xc1dadf0cu, 0x5f471a26u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 73 /* milli weight units */\n}\n,[RIGHT_EXTEND_16_64] =\n{ .tag = JET\n, .jet = simplicity_right_extend_16_64\n, .cmr = {{0xd011acc7u, 0x94e3c478u, 0x9accd0d5u, 0xfe4997d3u, 0x34d91f08u, 0x31a1eb35u, 0x04b4cb2du, 0xdf4797afu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 70 /* milli weight units */\n}\n,[RIGHT_EXTEND_32_64] =\n{ .tag = JET\n, .jet = simplicity_right_extend_32_64\n, .cmr = {{0xa5aa5db1u, 0xe535e723u, 0x2ad36dafu, 0xba6d5a20u, 0x0d54eb85u, 0x3b75dc70u, 0xa594ed64u, 0xaa6bd9abu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 62 /* milli weight units */\n}\n,[RIGHT_EXTEND_8_16] =\n{ .tag = JET\n, .jet = simplicity_right_extend_8_16\n, .cmr = {{0x8106d58au, 0x8066ee6eu, 0x15e55ca5u, 0x2cb7afd8u, 0xe3277587u, 0xbfd7dec0u, 0xbe37d406u, 0x742a3931u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 63 /* milli weight units */\n}\n,[RIGHT_EXTEND_8_32] =\n{ .tag = JET\n, .jet = simplicity_right_extend_8_32\n, .cmr = {{0xdfa4bafau, 0x432a5338u, 0xd374deb6u, 0xb724b7f6u, 0xeae55861u, 0xfe731d43u, 0x048aa304u, 0xd1f7f9a2u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 69 /* milli weight units */\n}\n,[RIGHT_EXTEND_8_64] =\n{ .tag = JET\n, .jet = simplicity_right_extend_8_64\n, .cmr = {{0x620a3703u, 0x8b6fa127u, 0x495f0b46u, 0x496f6435u, 0xdd2dad7eu, 0xf0c0fd2cu, 0xd65f54dcu, 0x185e997bu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 141 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_16_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_16_32\n, .cmr = {{0x2b6abc38u, 0x321a7c54u, 0x2fb16974u, 0x621ced80u, 0x880db519u, 0xbb486093u, 0x426e8ce1u, 0x8e0169b1u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 66 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_16_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_16_64\n, .cmr = {{0xad90d8ffu, 0xa57450b3u, 0xb5e90962u, 0x25349ed8u, 0xf072e101u, 0x7293f392u, 0xef854e03u, 0x19abc934u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 81 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_16\n, .cmr = {{0x288158b1u, 0xc910877bu, 0x7eea3dfcu, 0xf2b2b788u, 0x922808b6u, 0xd6fa75f8u, 0x96771904u, 0x8b141249u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 114 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_32\n, .cmr = {{0xee2ad77fu, 0x668d3d6au, 0x2e68506eu, 0x4904cf50u, 0xa08460e1u, 0xd2b86a81u, 0xe14e41f8u, 0xda4cddf2u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 220 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_64\n, .cmr = {{0x3d6a7fe6u, 0x9a11642au, 0xced6842bu, 0x89aa1bb8u, 0x413e3990u, 0x63cc1678u, 0x6af7c033u, 0xdad58b95u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 313 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_8] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_8\n, .cmr = {{0x2844bdfdu, 0x6aba29dfu, 0x03f93aa6u, 0xaeb21c06u, 0x4028db05u, 0xff77d8d9u, 0x1cfdcdefu, 0xb190c5bdu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 73 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_32_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_32_64\n, .cmr = {{0xb432e532u, 0x1ae1714cu, 0xe19529d8u, 0x5f24ff89u, 0x87910ebcu, 0xf015f87fu, 0x15bbed55u, 0xf0a0e892u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 62 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_8_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_8_16\n, .cmr = {{0x6f2d96c9u, 0x5413ca9au, 0xa8cc550fu, 0x2573e166u, 0x9956d607u, 0x692cf1cau, 0x6dc76d2fu, 0x2b4a3ac8u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 75 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_8_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_8_32\n, .cmr = {{0xdf2c7f92u, 0x9900a449u, 0x01e6ff65u, 0x276a951au, 0xeb95df25u, 0x0b139714u, 0xd4195404u, 0xd77898edu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 81 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_8_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_8_64\n, .cmr = {{0x79c01da3u, 0xe60b9c69u, 0x35ce3e15u, 0x98b17840u, 0xaf82dcb0u, 0xddc63aefu, 0x4a06e7f9u, 0xca5d2741u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 118 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_16_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_16_32\n, .cmr = {{0x6f201027u, 0xcc759802u, 0x30a07085u, 0x9c3e3802u, 0x36a1cb10u, 0xe61a01aau, 0x1f6d231du, 0x15142f25u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 62 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_16_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_16_64\n, .cmr = {{0xb86e1f0bu, 0xfec65598u, 0xd0a3d1ecu, 0x960305b9u, 0x6745673eu, 0x1b16bf32u, 0x7a716805u, 0x83d71d90u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 98 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_16\n, .cmr = {{0x052a6499u, 0xc93ee6bcu, 0x1ae657f8u, 0x5fd4d4feu, 0x677abceeu, 0x540d1340u, 0x33542e9au, 0xb60a63ddu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 60 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_32\n, .cmr = {{0x5b70d428u, 0x960e95ccu, 0x40d51846u, 0xf53a4d0au, 0x35c9015du, 0x1500b6bcu, 0x849b7283u, 0x5e2bd440u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 47 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_64\n, .cmr = {{0x44efeb87u, 0xca2ad7fdu, 0x4b73f163u, 0x07c7f059u, 0x02656f35u, 0x090fb0a4u, 0x326c6489u, 0x88ae1d39u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 57 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_8] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_8\n, .cmr = {{0x9340398bu, 0xcc8ea83eu, 0xc840be72u, 0x9dbb8b81u, 0x207824eeu, 0x875d1582u, 0x59d6dad2u, 0x0a83930cu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 48 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_32_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_32_64\n, .cmr = {{0x693e2810u, 0x1e04fda4u, 0x3b97e611u, 0xf0fe9800u, 0x0e14302eu, 0x5dcd6ed6u, 0x5eee42e3u, 0x4014242fu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 74 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_8_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_8_16\n, .cmr = {{0x096b25c3u, 0xc8415f04u, 0xd8832743u, 0xeb2f8456u, 0xd5f0a644u, 0x913d3ec5u, 0x9d34f455u, 0x2501fa20u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 62 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_8_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_8_32\n, .cmr = {{0xfc7f5722u, 0xa62aa220u, 0x18cc81cdu, 0x00a9326cu, 0x7fe9c63au, 0xbce2bda4u, 0xc0e66a3fu, 0x47c67c53u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 69 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_8_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_8_64\n, .cmr = {{0xa5bb7d5eu, 0xfca0e48du, 0x9d80c502u, 0x7115b485u, 0x781051e0u, 0xef46e4d6u, 0x08317a1cu, 0x4261bc46u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 98 /* milli weight units */\n}\n,[RIGHT_ROTATE_16] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_16\n, .cmr = {{0x482ea7e1u, 0x214501d9u, 0x3c9ad16fu, 0xa8b97bf5u, 0xb384fc2bu, 0x54789b8cu, 0xd9e784ccu, 0xd0eb9d57u}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 67 /* milli weight units */\n}\n,[RIGHT_ROTATE_32] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_32\n, .cmr = {{0x0941b6eeu, 0xea9af819u, 0x5b028afcu, 0x0bd2a534u, 0x218bf90du, 0x1a0e373du, 0x74741854u, 0x0b726d73u}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 77 /* milli weight units */\n}\n,[RIGHT_ROTATE_64] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_64\n, .cmr = {{0x444dbbc3u, 0xdd2a11a5u, 0xc7b0439fu, 0xdba99ac7u, 0x4a11b8eeu, 0xb2db301eu, 0x243ea891u, 0x22907152u}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 64 /* milli weight units */\n}\n,[RIGHT_ROTATE_8] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_8\n, .cmr = {{0x7265a30cu, 0x2e836e65u, 0x544aba91u, 0x1b64d18fu, 0xa69b1765u, 0x45856c77u, 0xc4f0d76fu, 0xc3f58351u}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 72 /* milli weight units */\n}\n,[RIGHT_SHIFT_16] =\n{ .tag = JET\n, .jet = simplicity_right_shift_16\n, .cmr = {{0xcd57a3d3u, 0xab2d92d4u, 0xf0865504u, 0x3a8b8bb6u, 0x738981fau, 0xe6da0134u, 0xb4dedaceu, 0x5f008860u}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 60 /* milli weight units */\n}\n,[RIGHT_SHIFT_32] =\n{ .tag = JET\n, .jet = simplicity_right_shift_32\n, .cmr = {{0xd6b326b1u, 0xa32357a3u, 0x32807d3fu, 0xa1b156c2u, 0x8b1622f7u, 0x38def126u, 0x81467f34u, 0x9bd3494bu}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 69 /* milli weight units */\n}\n,[RIGHT_SHIFT_64] =\n{ .tag = JET\n, .jet = simplicity_right_shift_64\n, .cmr = {{0xb2095f2du, 0x47335d5fu, 0x98c85434u, 0xa2faf5b0u, 0xf75cf899u, 0x012a34bbu, 0xcd0a14cbu, 0xedb61107u}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 68 /* milli weight units */\n}\n,[RIGHT_SHIFT_8] =\n{ .tag = JET\n, .jet = simplicity_right_shift_8\n, .cmr = {{0x4b2b1aa2u, 0xef732173u, 0x170d621au, 0x38deb261u, 0xe473c07cu, 0x558b055au, 0x25a86e4eu, 0x321afc04u}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 63 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_16] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_16\n, .cmr = {{0x14b77685u, 0x47b3d3f4u, 0x7ee5c2b8u, 0x0d9bdae2u, 0xaec1f9c6u, 0x594ed312u, 0x7b12645au, 0xdcf59754u}}\n, .sourceIx = ty_pbpw4w16\n, .targetIx = ty_w16\n, .cost = 83 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_32] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_32\n, .cmr = {{0x327b6e98u, 0xa6fd340cu, 0x60cf83aau, 0x64993311u, 0x4cb8d84fu, 0x590e0121u, 0x3a261001u, 0x2b4607eau}}\n, .sourceIx = ty_pbpw8w32\n, .targetIx = ty_w32\n, .cost = 78 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_64] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_64\n, .cmr = {{0x062fa74au, 0xf3476e59u, 0x387be08eu, 0x6949a005u, 0x43bc84a2u, 0xb689ea39u, 0xad6eed7fu, 0x756785d4u}}\n, .sourceIx = ty_pbpw8w64\n, .targetIx = ty_w64\n, .cost = 72 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_8] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_8\n, .cmr = {{0x141be47eu, 0x967b2fd7u, 0xc7126c5au, 0xdf2dfe47u, 0x315bbc10u, 0x53bbe605u, 0xb38898dbu, 0xed49f227u}}\n, .sourceIx = ty_pbpw4w8\n, .targetIx = ty_w8\n, .cost = 71 /* milli weight units */\n}\n,[RIGHTMOST_16_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_1\n, .cmr = {{0x3f3c4346u, 0x87174226u, 0x5e87f001u, 0xb46de7d1u, 0x98751b34u, 0xfaa18018u, 0xde60c846u, 0x8d9b98a4u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 70 /* milli weight units */\n}\n,[RIGHTMOST_16_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_2\n, .cmr = {{0xc18b9fddu, 0x340a267au, 0xc16d4f39u, 0xee754356u, 0x52aaca52u, 0x5650b51au, 0x45879804u, 0x8e627d51u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w2\n, .cost = 65 /* milli weight units */\n}\n,[RIGHTMOST_16_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_4\n, .cmr = {{0xc6c53fa7u, 0x1e230cf0u, 0x585158f4u, 0x70588bacu, 0x5c518f84u, 0xf9fc2386u, 0x52f175fbu, 0x6ea18c11u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w4\n, .cost = 72 /* milli weight units */\n}\n,[RIGHTMOST_16_8] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_8\n, .cmr = {{0xee769c1cu, 0xc8a3fdd1u, 0x838fc9f0u, 0x490ce703u, 0x93fd91bau, 0x3cbd4abdu, 0x08649fb9u, 0xc44311bdu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 69 /* milli weight units */\n}\n,[RIGHTMOST_32_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_1\n, .cmr = {{0x1c442369u, 0xfb81f611u, 0xd328010bu, 0x864bccb7u, 0xf35ed477u, 0xdfa38555u, 0x74c13564u, 0xcdbdb860u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 70 /* milli weight units */\n}\n,[RIGHTMOST_32_16] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_16\n, .cmr = {{0xadd2c339u, 0x0d9af7c2u, 0x4a159a37u, 0xd69d4484u, 0xd2c24a2cu, 0xb5b0eb2du, 0x3c493d98u, 0x12acfd74u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 56 /* milli weight units */\n}\n,[RIGHTMOST_32_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_2\n, .cmr = {{0x00b8815au, 0xd7423dd5u, 0x8cb98be8u, 0x2cad2667u, 0x5c3bf54au, 0x0bedbadeu, 0x3464b4feu, 0x5a4e8ce6u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w2\n, .cost = 74 /* milli weight units */\n}\n,[RIGHTMOST_32_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_4\n, .cmr = {{0x84fa5a54u, 0xf7729f9du, 0x68994beau, 0xb93ae79bu, 0x8c4a10d5u, 0xb7ae9727u, 0xaa1716e5u, 0x7d033b74u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w4\n, .cost = 57 /* milli weight units */\n}\n,[RIGHTMOST_32_8] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_8\n, .cmr = {{0x7d3805d3u, 0xc78c4eeau, 0x91e3d35eu, 0xfdd47eedu, 0xd421af84u, 0xd2191032u, 0x9332a0b5u, 0x487fab63u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w8\n, .cost = 55 /* milli weight units */\n}\n,[RIGHTMOST_64_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_1\n, .cmr = {{0xd3b164c5u, 0xdc66cc7eu, 0xf9234fedu, 0xe4dc7f0du, 0xa5cd71c1u, 0xc1d4cad6u, 0x0fb4ec57u, 0x3e2b8a75u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 61 /* milli weight units */\n}\n,[RIGHTMOST_64_16] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_16\n, .cmr = {{0xeae43478u, 0xf9f2f452u, 0xefac15eeu, 0xe60f8b52u, 0x53d80a2du, 0x32129b4eu, 0x5ba38300u, 0xad9852fdu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w16\n, .cost = 63 /* milli weight units */\n}\n,[RIGHTMOST_64_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_2\n, .cmr = {{0x9cd4a98bu, 0xbdb8a335u, 0x85c00f47u, 0xd6adab7au, 0xf54286fbu, 0x8ae60f72u, 0x3011fb84u, 0xc0ee78f9u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w2\n, .cost = 65 /* milli weight units */\n}\n,[RIGHTMOST_64_32] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_32\n, .cmr = {{0x7f2420aeu, 0x5b0f5a3fu, 0x6f2e60b6u, 0x1f8a415cu, 0x088b94b2u, 0x1c1a62a3u, 0xfdaac749u, 0xdbdf4c71u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 64 /* milli weight units */\n}\n,[RIGHTMOST_64_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_4\n, .cmr = {{0xe265552au, 0x24fbcdecu, 0x0583d718u, 0x3e48ebc2u, 0xff6d3165u, 0x57bac591u, 0x5c03cb23u, 0x35d23295u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w4\n, .cost = 57 /* milli weight units */\n}\n,[RIGHTMOST_64_8] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_8\n, .cmr = {{0x98cd95f9u, 0x5d46641bu, 0x049e77bfu, 0x90eea598u, 0xadf29ee5u, 0x00e65072u, 0x87548bb1u, 0xcdaf784du}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w8\n, .cost = 49 /* milli weight units */\n}\n,[RIGHTMOST_8_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_8_1\n, .cmr = {{0x0876fcd4u, 0x698591f3u, 0x31910157u, 0x4ce153fcu, 0xdfe94f58u, 0x1aac5e75u, 0xf3cd7446u, 0xdf56f3c7u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 65 /* milli weight units */\n}\n,[RIGHTMOST_8_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_8_2\n, .cmr = {{0xb9f7b290u, 0xafe7f189u, 0xe32aebf2u, 0xcc4ddca9u, 0x6bb00764u, 0xc7be2887u, 0xdce054d0u, 0x9e38c353u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w2\n, .cost = 63 /* milli weight units */\n}\n,[RIGHTMOST_8_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_8_4\n, .cmr = {{0xf28e9af5u, 0xaf4c9ccau, 0x4b43cc6au, 0xdf9d9d8du, 0x169c87c5u, 0x559f9f3cu, 0xcac8f235u, 0x2b629f18u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w4\n, .cost = 56 /* milli weight units */\n}\n,[SCALAR_ADD] =\n{ .tag = JET\n, .jet = simplicity_scalar_add\n, .cmr = {{0x11ddbebau, 0xebf42180u, 0xa0b7eddfu, 0xfdc48ec7u, 0x511330fbu, 0x3315fa65u, 0xd58aff66u, 0xb9caf2d4u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 778 /* milli weight units */\n}\n,[SCALAR_INVERT] =\n{ .tag = JET\n, .jet = simplicity_scalar_invert\n, .cmr = {{0xa6392725u, 0xbb2dadbbu, 0x1e76df2du, 0xec57df55u, 0xc3fcc577u, 0x3b62218au, 0xec55a75eu, 0x14f3d60du}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 3178 /* milli weight units */\n}\n,[SCALAR_IS_ZERO] =\n{ .tag = JET\n, .jet = simplicity_scalar_is_zero\n, .cmr = {{0xf75eda06u, 0xce6af09fu, 0xae37db4eu, 0x6225e6a8u, 0xac86a236u, 0x37627d62u, 0x6409190fu, 0xf3b39d90u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_b\n, .cost = 271 /* milli weight units */\n}\n,[SCALAR_MULTIPLY] =\n{ .tag = JET\n, .jet = simplicity_scalar_multiply\n, .cmr = {{0x4a61672au, 0xcec48877u, 0x56de1db6u, 0x0421a12bu, 0x901a858au, 0x6ee6352eu, 0x559d4ce5u, 0x973352beu}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 793 /* milli weight units */\n}\n,[SCALAR_MULTIPLY_LAMBDA] =\n{ .tag = JET\n, .jet = simplicity_scalar_multiply_lambda\n, .cmr = {{0x49ea9c3fu, 0xb1d8ff52u, 0xd2db0346u, 0x9fdfe850u, 0x503fddebu, 0x45e16d26u, 0xe8928addu, 0x25870e91u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 567 /* milli weight units */\n}\n,[SCALAR_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_scalar_negate\n, .cmr = {{0x1dbf8b49u, 0x1ec66580u, 0x3f633330u, 0xd3ffb0e7u, 0x81e67c18u, 0x01ac9d49u, 0xbbf43589u, 0xabf782bfu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 516 /* milli weight units */\n}\n,[SCALAR_NORMALIZE] =\n{ .tag = JET\n, .jet = simplicity_scalar_normalize\n, .cmr = {{0x4633180eu, 0xa02c4df7u, 0x819d3d54u, 0xa401734fu, 0x965b31acu, 0xc784054eu, 0xbfb73168u, 0x16b029ecu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 500 /* milli weight units */\n}\n,[SCALAR_SQUARE] =\n{ .tag = JET\n, .jet = simplicity_scalar_square\n, .cmr = {{0x8a279e6fu, 0x613aa9e9u, 0x34f2f2a3u, 0x43c0d329u, 0x1c3670e2u, 0x97ddae20u, 0x529e8250u, 0x69efea0eu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 571 /* milli weight units */\n}\n,[SCALE] =\n{ .tag = JET\n, .jet = simplicity_scale\n, .cmr = {{0x126e2212u, 0x5bac80b9u, 0x9b7b7343u, 0xb4e5e586u, 0x60821610u, 0x5d4de6f7u, 0x94add34eu, 0x23b195cau}}\n, .sourceIx = ty_pw256pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 73548 /* milli weight units */\n}\n,[SCRIPT_CMR] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_script_cmr\n, .cmr = {{0xa8a4a622u, 0x10b5e495u, 0x0e253424u, 0x7c7411d1u, 0xc8ff2286u, 0x5b5456bbu, 0xb21638e9u, 0x14f5e528u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 122 /* milli weight units */\n}\n,[SHA_256_BLOCK] =\n{ .tag = JET\n, .jet = simplicity_sha_256_block\n, .cmr = {{0x4535f3e1u, 0xab9f1b75u, 0x7a069137u, 0xe1d5b1cau, 0xad8e31f7u, 0x8dc5fbd0u, 0x734649f9u, 0x40a7fc96u}}\n, .sourceIx = ty_pw256w512\n, .targetIx = ty_w256\n, .cost = 765 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_1] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_1\n, .cmr = {{0x9a4711b8u, 0xc5690e58u, 0x7e5f79e6u, 0x8d6eca04u, 0x7458aa63u, 0xb8bc9ee5u, 0x68086a4au, 0x1b56d834u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w8\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 664 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_128] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_128\n, .cmr = {{0x1cb1db8au, 0x055b3197u, 0xacf0f08cu, 0xe9c635adu, 0xd695b60fu, 0x234b18e0u, 0xb323c937u, 0xb0385aeau}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w1Ki\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1778 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_16] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_16\n, .cmr = {{0xe0845475u, 0xebb90140u, 0xfa4e01afu, 0x8a943599u, 0x1ad87af9u, 0x8c08aeceu, 0x110e99cbu, 0xcecdee79u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w128\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 781 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_2] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_2\n, .cmr = {{0x7d69138fu, 0x1c942beeu, 0x2fdf600cu, 0xe44b36ffu, 0x97839dc2u, 0xbbdafbd5u, 0xfab4dfbcu, 0x3c976f29u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w16\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 674 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_256] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_256\n, .cmr = {{0x4f5c29d5u, 0x3686c060u, 0x62b38324u, 0xf8aff17eu, 0xc556a295u, 0xff098b10u, 0xe705dd22u, 0xe13bc3c9u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w2Ki\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 2894 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_32] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_32\n, .cmr = {{0xd57b67b1u, 0x74e78e38u, 0xf9bca8e0u, 0x7add61c7u, 0x53e2c156u, 0xd8e9832au, 0xa6620455u, 0x00f51a80u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w256\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 928 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_4] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_4\n, .cmr = {{0x95da3299u, 0x3f5c7d00u, 0x83064cdfu, 0xf1bec3b9u, 0x36c63833u, 0x7adec547u, 0x487af232u, 0xd69fdf65u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w32\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 656 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_512] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_512\n, .cmr = {{0x4acb163au, 0xa48f09d5u, 0xf26d2b2au, 0xb188a6c6u, 0xb6c4aedfu, 0x23c91900u, 0x1c02ee15u, 0xb337a96eu}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w4Ki\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 5161 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_64] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_64\n, .cmr = {{0x52e53ec5u, 0x770f9be4u, 0x069aeefcu, 0xb21322b1u, 0x3ab6e394u, 0x1fdc2c85u, 0xf4b41be6u, 0x7d38ea7eu}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w512\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1220 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_8] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_8\n, .cmr = {{0xc26b28afu, 0xe5e866d8u, 0x4616814du, 0x1a13fb86u, 0x30b9e84eu, 0x5d781556u, 0xc6d8236eu, 0xfb45dff9u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w64\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 694 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_BUFFER_511] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_buffer_511\n, .cmr = {{0xad699046u, 0x48a8238du, 0x00d85163u, 0xfce81963u, 0xa0047ab5u, 0x82be97a4u, 0x14006559u, 0x79cfdd28u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 5137 /* milli weight units */\n}\n,[SHA_256_CTX_8_FINALIZE] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_finalize\n, .cmr = {{0x8e45bdc3u, 0x87d4edfau, 0x733525f3u, 0xab19e42bu, 0x58ecb1b5u, 0xf6dccf94u, 0xedbf5995u, 0x8ae3e116u}}\n, .sourceIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .targetIx = ty_w256\n, .cost = 833 /* milli weight units */\n}\n,[SHA_256_CTX_8_INIT] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_init\n, .cmr = {{0x635f6405u, 0x848685c0u, 0x11febd41u, 0xfaac874bu, 0xbbf5b24du, 0x5fb12fedu, 0xbcb6cbffu, 0x95a0f366u}}\n, .sourceIx = ty_u\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 123 /* milli weight units */\n}\n,[SHA_256_IV] =\n{ .tag = JET\n, .jet = simplicity_sha_256_iv\n, .cmr = {{0x12e45937u, 0x51c9463bu, 0x562503c1u, 0x40d78b3bu, 0x757a1f4fu, 0x16321d28u, 0x62d32543u, 0x8538971bu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 92 /* milli weight units */\n}\n,[SIG_ALL_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_sig_all_hash\n, .cmr = {{0x0978b9e5u, 0x0b9e8e09u, 0x8b27f2b8u, 0xb59de54fu, 0x62ba7c13u, 0x33df3bedu, 0x221e2662u, 0x6805bc55u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 120 /* milli weight units */\n}\n,[SOME_1] =\n{ .tag = JET\n, .jet = simplicity_some_1\n, .cmr = {{0x15ca4e4bu, 0x82c2f91bu, 0x9a792992u, 0xcdc1b292u, 0xab86a2d2u, 0x939c9a64u, 0xb50be60bu, 0xda6ab4cau}}\n, .sourceIx = ty_b\n, .targetIx = ty_b\n, .cost = 60 /* milli weight units */\n}\n,[SOME_16] =\n{ .tag = JET\n, .jet = simplicity_some_16\n, .cmr = {{0xa9dfbbeau, 0xb59df72au, 0x45fc3fc7u, 0xac581ec8u, 0xda713f2fu, 0x8103f787u, 0xaa1cee4eu, 0x0ba64866u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 52 /* milli weight units */\n}\n,[SOME_32] =\n{ .tag = JET\n, .jet = simplicity_some_32\n, .cmr = {{0x4633a397u, 0x742ef482u, 0xbe2fa3fbu, 0x6410ec79u, 0xc3738365u, 0x69fbbcb1u, 0xf948ec32u, 0x487378b7u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 49 /* milli weight units */\n}\n,[SOME_64] =\n{ .tag = JET\n, .jet = simplicity_some_64\n, .cmr = {{0x1dc245acu, 0x6f5b422bu, 0xd1886ef5u, 0x144c4dc7u, 0x2c967315u, 0x5966076cu, 0xd839681du, 0x9ec7f8f5u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 62 /* milli weight units */\n}\n,[SOME_8] =\n{ .tag = JET\n, .jet = simplicity_some_8\n, .cmr = {{0x33afb9c6u, 0x454e590eu, 0xc13ed75eu, 0x1b7d9c3au, 0x3de6752bu, 0xcc7c1d4cu, 0xb363fa51u, 0x828bcb74u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 57 /* milli weight units */\n}\n,[SUBTRACT_16] =\n{ .tag = JET\n, .jet = simplicity_subtract_16\n, .cmr = {{0x4e06ec31u, 0x376222e2u, 0x5e27d015u, 0x9dc1c071u, 0x4a44ca6au, 0xacf9505cu, 0xaad280e9u, 0x73fb5cabu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw16\n, .cost = 93 /* milli weight units */\n}\n,[SUBTRACT_32] =\n{ .tag = JET\n, .jet = simplicity_subtract_32\n, .cmr = {{0xb9c0f36eu, 0x7522a8d9u, 0x49050d51u, 0x6a05ce20u, 0x3a1f9a9eu, 0x372fd263u, 0xde38b0e9u, 0x03134198u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw32\n, .cost = 87 /* milli weight units */\n}\n,[SUBTRACT_64] =\n{ .tag = JET\n, .jet = simplicity_subtract_64\n, .cmr = {{0x1cdb5c74u, 0xadd102f5u, 0x0f938ed8u, 0x86f496e5u, 0xbab2755cu, 0x3c484e88u, 0x87903d2fu, 0x6a57f3aau}}\n, .sourceIx = ty_w128\n, .targetIx = ty_pbw64\n, .cost = 125 /* milli weight units */\n}\n,[SUBTRACT_8] =\n{ .tag = JET\n, .jet = simplicity_subtract_8\n, .cmr = {{0x4f2117a0u, 0xe81059ffu, 0x0cd64d84u, 0x886542e5u, 0x75ea8d6eu, 0xc03108fdu, 0x0b508b39u, 0x208cd0efu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw8\n, .cost = 96 /* milli weight units */\n}\n,[SWU] =\n{ .tag = JET\n, .jet = simplicity_swu\n, .cmr = {{0x00f51f4fu, 0x4bece790u, 0x03ecad48u, 0x1a125af7u, 0x176e4de9u, 0x8c339242u, 0x5cb91466u, 0x26c13b3bu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w512\n, .cost = 32780 /* milli weight units */\n}\n,[TAP_ENV_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tap_env_hash\n, .cmr = {{0x19d9944cu, 0x4d457c70u, 0xbabc45ccu, 0xcbd573b3u, 0x9a51d0c9u, 0x9115b412u, 0x783b4900u, 0x82fd0e58u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 120 /* milli weight units */\n}\n,[TAPDATA_INIT] =\n{ .tag = JET\n, .jet = simplicity_tapdata_init\n, .cmr = {{0xa4d022efu, 0x5cf467bcu, 0xa0325e46u, 0x3fcace7cu, 0xbdd64ff8u, 0xf71c5c7fu, 0x63e60784u, 0xaa0ac486u}}\n, .sourceIx = ty_u\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1233 /* milli weight units */\n}\n,[TAPLEAF_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tapleaf_hash\n, .cmr = {{0x0c0716feu, 0x5d978ea8u, 0xe0c75adcu, 0x8210d660u, 0x062e3da0u, 0x6f1a6661u, 0x317927d3u, 0xb84b5073u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 116 /* milli weight units */\n}\n,[TAPLEAF_VERSION] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tapleaf_version\n, .cmr = {{0xe2ecb1cbu, 0x0ed4ed93u, 0x483545fdu, 0x8a62f8aau, 0x10175349u, 0xffcc5ad3u, 0xde7f3484u, 0xea1f103fu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 66 /* milli weight units */\n}\n,[TAPPATH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tappath\n, .cmr = {{0x99e8211eu, 0x8c1be6d9u, 0xca98d3d4u, 0x3d914256u, 0x7e06a840u, 0x22393303u, 0xfab0b57du, 0x394074e8u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_mw256\n, .cost = 76 /* milli weight units */\n}\n,[TAPPATH_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tappath_hash\n, .cmr = {{0x0211546du, 0x0778e787u, 0x141ece65u, 0xdf6cd1dbu, 0x31388fc1u, 0x421968c8u, 0xcfd8d759u, 0x26db47b3u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 123 /* milli weight units */\n}\n,[TOTAL_INPUT_VALUE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_total_input_value\n, .cmr = {{0x81287a15u, 0x89ddc217u, 0x9926b706u, 0x5e9b2677u, 0xb7fb099bu, 0x95f947a7u, 0xdd590cddu, 0x4ccf4a56u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 69 /* milli weight units */\n}\n,[TOTAL_OUTPUT_VALUE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_total_output_value\n, .cmr = {{0xba032f3eu, 0x62f8fcb0u, 0x4b0429a2u, 0x53b5ec57u, 0xe4c87ae2u, 0xe951e145u, 0xd7650e7fu, 0x0c63e555u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 71 /* milli weight units */\n}\n,[TRANSACTION_ID] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_transaction_id\n, .cmr = {{0x5c49ea98u, 0x6b328be2u, 0xa4e0b315u, 0xb6b3fef2u, 0x3c1f6856u, 0xbbc3b056u, 0xc99cf59fu, 0xbd546e65u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 122 /* milli weight units */\n}\n,[TX_HASH] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tx_hash\n, .cmr = {{0x54e53c99u, 0x93abd55du, 0x1f8523d2u, 0xbb217b32u, 0xe6fe861fu, 0x84c986b7u, 0xee8bdc68u, 0x8106874au}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 119 /* milli weight units */\n}\n,[TX_IS_FINAL] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tx_is_final\n, .cmr = {{0x7b0e4f4cu, 0xa8e5af61u, 0xa1d3454eu, 0x11ef9ab6u, 0x88706121u, 0x1c0090ebu, 0xa9553da2u, 0xe45d8473u}}\n, .sourceIx = ty_u\n, .targetIx = ty_b\n, .cost = 62 /* milli weight units */\n}\n,[TX_LOCK_DISTANCE] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tx_lock_distance\n, .cmr = {{0xb6fbaac2u, 0x10a306beu, 0x8b58d0d7u, 0xb1563f62u, 0x2336d2aeu, 0xb56c393du, 0x276445a9u, 0xa22cc4a7u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 72 /* milli weight units */\n}\n,[TX_LOCK_DURATION] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tx_lock_duration\n, .cmr = {{0x53572818u, 0xe7e5b98fu, 0x968c9da7u, 0xdf5090d9u, 0x826f9bcfu, 0x84b63639u, 0x5eea321bu, 0x6909ece9u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 66 /* milli weight units */\n}\n,[TX_LOCK_HEIGHT] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tx_lock_height\n, .cmr = {{0x449f61dfu, 0x1a7bad8du, 0x9e0a9667u, 0x14227e57u, 0x1007f93cu, 0x517b805du, 0x616510e8u, 0xff62172bu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 72 /* milli weight units */\n}\n,[TX_LOCK_TIME] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_tx_lock_time\n, .cmr = {{0x31df363fu, 0x17b2cfc9u, 0x7a1f9372u, 0xc14a3258u, 0x64d7cb13u, 0xaa8d5215u, 0xfb253d33u, 0x10917762u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 72 /* milli weight units */\n}\n,[VERIFY] =\n{ .tag = JET\n, .jet = simplicity_verify\n, .cmr = {{0xcdca2a05u, 0xe52cefa5u, 0x9dc7a5b0u, 0xdae22098u, 0xfb896e39u, 0x13bfdd44u, 0x6b594e1fu, 0x9250783eu}}\n, .sourceIx = ty_b\n, .targetIx = ty_u\n, .cost = 44 /* milli weight units */\n}\n,[VERSION] =\n{ .tag = JET\n, .jet = simplicity_bitcoin_version\n, .cmr = {{0x83735864u, 0x00b6790bu, 0x46ab0410u, 0x523cf01eu, 0xb74d10fau, 0xf48a3accu, 0x86c4c51du, 0x06a52c49u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 78 /* milli weight units */\n}\n,[XOR_1] =\n{ .tag = JET\n, .jet = simplicity_xor_1\n, .cmr = {{0x8c4e4e6eu, 0xbf4630b2u, 0x9b5a57eau, 0x79f0c9afu, 0x6bff54c4u, 0xd2d769bfu, 0x51594774u, 0xa52b99c9u}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 60 /* milli weight units */\n}\n,[XOR_16] =\n{ .tag = JET\n, .jet = simplicity_xor_16\n, .cmr = {{0xd9f0af3fu, 0xe3fd247cu, 0x1df34a25u, 0x2713b2e9u, 0x33a945a5u, 0x6719487fu, 0x8ed7f563u, 0xea861ab5u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 73 /* milli weight units */\n}\n,[XOR_32] =\n{ .tag = JET\n, .jet = simplicity_xor_32\n, .cmr = {{0xd5ae2712u, 0xedeaf676u, 0x520fa3bau, 0x0f40bf4au, 0x1657437eu, 0xffbd9986u, 0xd06ae81bu, 0x29a4f98cu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 77 /* milli weight units */\n}\n,[XOR_64] =\n{ .tag = JET\n, .jet = simplicity_xor_64\n, .cmr = {{0xc4df1ccfu, 0x333edebdu, 0xd40dea9au, 0x0e6cbb83u, 0x0631e83au, 0x94bb779fu, 0xe6007bc6u, 0xcb53a544u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 68 /* milli weight units */\n}\n,[XOR_8] =\n{ .tag = JET\n, .jet = simplicity_xor_8\n, .cmr = {{0x4ab14a81u, 0x4a39528au, 0x80fdb430u, 0x589ba450u, 0x104b9c72u, 0x09aa2fe2u, 0x85cd60c0u, 0x9043114au}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 80 /* milli weight units */\n}\n,[XOR_XOR_1] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_1\n, .cmr = {{0x18b9446au, 0x4166a3feu, 0xe2bcb254u, 0x5bb90118u, 0xdcf0e8f8u, 0x86a1076du, 0x4c386006u, 0x0cde1a51u}}\n, .sourceIx = ty_pbw2\n, .targetIx = ty_b\n, .cost = 50 /* milli weight units */\n}\n,[XOR_XOR_16] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_16\n, .cmr = {{0x946cde87u, 0x2e30e650u, 0x9daff405u, 0xf0e0fefeu, 0x275547b4u, 0x0eb20384u, 0xafe9a863u, 0x60fc80efu}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 82 /* milli weight units */\n}\n,[XOR_XOR_32] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_32\n, .cmr = {{0x6527df67u, 0xa50d148du, 0xb4fc8feeu, 0xc7845564u, 0x99a8c7f0u, 0xfa7d28e6u, 0x278e997fu, 0x4959be39u}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 82 /* milli weight units */\n}\n,[XOR_XOR_64] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_64\n, .cmr = {{0xf162f9e6u, 0x5663a69au, 0xc5f92a5eu, 0xb52c0332u, 0x392edd1eu, 0xd1ba355eu, 0x6f19406eu, 0xabe3f6edu}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 80 /* milli weight units */\n}\n,[XOR_XOR_8] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_8\n, .cmr = {{0xe06d694cu, 0x5b407ddau, 0xd7aa1f88u, 0x0716bcb7u, 0x0acdba75u, 0x85ca4009u, 0x9a0a0a61u, 0xf3ad2db5u}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 86 /* milli weight units */\n}\n"
  },
  {
    "path": "C/bitcoin/txEnv.c",
    "content": "#include \"txEnv.h\"\n\n/* Construct a txEnv structure from its components.\n * This function will precompute any cached values.\n *\n * Precondition: NULL != tx\n *               NULL != taproot\n *               ix < tx->numInputs\n */\ntxEnv simplicity_bitcoin_build_txEnv(const bitcoinTransaction* tx, const bitcoinTapEnv* taproot, uint_fast32_t ix) {\n  txEnv result = { .tx = tx\n                 , .taproot = taproot\n                 , .ix = ix\n                 };\n  sha256_context ctx = sha256_init(result.sigAllHash.s);\n  sha256_hash(&ctx, &tx->txHash);\n  sha256_hash(&ctx, &taproot->tapEnvHash);\n  sha256_u32be(&ctx, ix);\n  sha256_finalize(&ctx);\n\n  return result;\n}\n"
  },
  {
    "path": "C/bitcoin/txEnv.h",
    "content": "/* This module defines the environment ('txEnv') for Simplicity evaluation for Bitcoin.\n * It includes the transaction data and input index of the input whose Simplicity program is being executed.\n * It also includes the commitment Merkle root of the program being executed.\n */\n#ifndef SIMPLICITY_BITCOIN_TXENV_H\n#define SIMPLICITY_BITCOIN_TXENV_H\n\n#include <stdbool.h>\n#include \"../sha256.h\"\n\n/* An Bitcoin 'outpoint' consists of a transaction id and output index within that transaction.\n */\ntypedef struct outpoint {\n  sha256_midstate txid;\n  uint_fast32_t ix;\n} outpoint;\n\n/* A structure representing data from one output from a Bitcoin transaction.\n * 'scriptPubKey' is the SHA-256 hash of the outputs scriptPubKey.\n */\ntypedef struct sigOutput {\n  uint_fast64_t value;\n  sha256_midstate scriptPubKey;\n} sigOutput;\n\n/* A structure representing data from one input from a Bitcoin transaction along with the utxo data of the output being redeemed.\n * When 'hasAnnex' then 'annexHash' is a cache of the hash of the input's segwit annex.\n */\ntypedef struct sigInput {\n  sha256_midstate annexHash;\n  sha256_midstate scriptSigHash;\n  outpoint prevOutpoint;\n  sigOutput txo;\n  uint_fast32_t sequence;\n  bool hasAnnex;\n} sigInput;\n\n/* A structure representing data from a Bitcoin transaction (along with the utxo data of the outputs being redeemed).\n * Includes a variety of cached hash values that are used in signature hash jets.\n */\ntypedef struct bitcoinTransaction {\n  const sigInput* input;\n  const sigOutput* output;\n  sha256_midstate outputValuesHash;\n  sha256_midstate outputScriptsHash;\n  sha256_midstate outputsHash;\n  sha256_midstate inputOutpointsHash;\n  sha256_midstate inputValuesHash;\n  sha256_midstate inputScriptsHash;\n  sha256_midstate inputUTXOsHash;\n  sha256_midstate inputSequencesHash;\n  sha256_midstate inputAnnexesHash;\n  sha256_midstate inputScriptSigsHash;\n  sha256_midstate inputsHash;\n  sha256_midstate txHash;\n  sha256_midstate txid;\n  uint_fast64_t totalInputValue;\n  uint_fast64_t totalOutputValue;\n  uint_fast32_t numInputs;\n  uint_fast32_t numOutputs;\n  uint_fast32_t version;\n  uint_fast32_t lockTime;\n  bool isFinal;\n} bitcoinTransaction;\n\n/* A structure representing taproot spending data from a Bitcoin transaction.\n *\n * Invariant: pathLen <= 128\n *            sha256_midstate path[pathLen];\n */\ntypedef struct bitcoinTapEnv {\n  const sha256_midstate *path;\n  sha256_midstate tapLeafHash;\n  sha256_midstate tappathHash;\n  sha256_midstate tapEnvHash;\n  sha256_midstate internalKey;\n  sha256_midstate scriptCMR;\n  unsigned char pathLen;\n  unsigned char leafVersion;\n} bitcoinTapEnv;\n\n/* The 'txEnv' structure used by the Bitcoin application of Simplicity.\n *\n * It includes\n * + the transaction data, which may be shared when Simplicity expressions are used for multiple inputs in the same transaction),\n * + the input index under consideration,\n */\ntypedef struct txEnv {\n  const bitcoinTransaction* tx;\n  const bitcoinTapEnv* taproot;\n  sha256_midstate sigAllHash;\n  uint_fast32_t ix;\n} txEnv;\n\n/* Construct a txEnv structure from its components.\n * This function will precompute any cached values.\n *\n * Precondition: NULL != tx\n *               NULL != taproot\n *               ix < tx->numInputs\n */\ntxEnv simplicity_bitcoin_build_txEnv(const bitcoinTransaction* tx, const bitcoinTapEnv* taproot, uint_fast32_t ix);\n\n#endif\n"
  },
  {
    "path": "C/bitstream.c",
    "content": "#include \"bitstream.h\"\n\n#include <limits.h>\n#include \"simplicity_assert.h\"\n\n/* Closes a bitstream by consuming all remaining bits.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES' if CHAR_BIT or more bits remain in the stream.\n * Otherwise, returns 'SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING' if any remaining bits are non-zero.\n * Otherwise returns 'SIMPLICITY_NO_ERROR'.\n *\n * Precondition: NULL != stream\n */\nsimplicity_err simplicity_closeBitstream(bitstream* stream) {\n  if (1 < stream->len) return SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES;        /* If there is more than one byte remaining. */\n  if (1 == stream->len) {\n    if (0 == stream->offset) return SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES;  /* If there is one byte remaining */\n    if (0 != (*stream->arr & (UCHAR_MAX >> stream->offset))) {                /* If any of the unconsumed bits are non-zero */\n      return SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING;\n    }\n  }\n  /* Otherwise there are either 0 bits remaining or there are between 1 and CHAR_BITS-1 bits remaining and they are all zero. */\n  *stream = (bitstream){0};\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* Fetches up to 31 bits from 'stream' as the 'n' least significant bits of return value.\n * The 'n' bits are set from the MSB to the LSB.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_EOF' if not enough bits are available.\n *\n * Precondition: 0 <= n < 32\n *               NULL != stream\n */\nint32_t simplicity_readNBits(int n, bitstream* stream) {\n  simplicity_assert(0 <= n && n < 32);\n\n  uint32_t result = 0;\n  while (CHAR_BIT <= stream->offset + n) {\n    if (!stream->len) return SIMPLICITY_ERR_BITSTREAM_EOF;\n    n -= CHAR_BIT - stream->offset;\n    result |= (uint32_t)(*stream->arr & (UCHAR_MAX >> stream->offset)) << n;\n    stream->arr++; stream->len--; stream->offset = 0;\n  }\n  /* stream->offset + n < CHAR_BIT */\n  if (n) {\n    if (!stream->len) return SIMPLICITY_ERR_BITSTREAM_EOF;\n    stream->offset += (unsigned char)n;\n    result |= (*stream->arr >> (CHAR_BIT - stream->offset)) & ((UCHAR_MAX >> (CHAR_BIT - n)));\n  }\n  return (int32_t)result;\n}\n/* Decode an encoded bitstring up to length 1.\n * If successful returns the length of the bitstring and 'result' contains the decoded bits.\n * The decoded bitstring is stored in the LSBs of 'result', with the LSB being the last bit decoded.\n * Any remaining bits in 'result' are reset to 0.\n * If the decoded bitstring would be too long 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned ('result' may be modified).\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned ('result' may be modified).\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned ('result' may be modified).\n *\n * Precondition: NULL != result\n *               NULL != stream\n */\nstatic int32_t decodeUpto1Bit(int32_t* result, bitstream* stream) {\n  *result = read1Bit(stream);\n  if (*result <= 0) return *result;\n\n  *result = read1Bit(stream);\n  if (*result < 0) return *result;\n  if (0 != *result) return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n\n  *result = read1Bit(stream);\n  if (*result < 0) return *result;\n  return 1;\n}\n\n/* Decode an encoded number between 1 and 3 inclusive.\n * When successful returns the decoded result.\n * If the decoded value would be too large, 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned.\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned.\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned.\n *\n * Precondition: NULL != stream\n */\nstatic int32_t decodeUpto3(bitstream* stream) {\n  int32_t result;\n  int32_t len = decodeUpto1Bit(&result, stream);\n  if (len < 0) return len;\n  result |= 1 << len;\n  return result;\n}\n\n/* Decode an encoded bitstring up to length 3.\n * If successful returns the length of the bitstring and 'result' contains the decoded bits.\n * The decoded bitstring is stored in the LSBs of 'result', with the LSB being the last bit decoded.\n * Any remaining bits in 'result' are reset to 0.\n * If the decoded bitstring would be too long 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned ('result' may be modified).\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned ('result' may be modified).\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned ('result' may be modified).\n *\n * Precondition: NULL != result\n *               NULL != stream\n */\nstatic int32_t decodeUpto3Bits(int32_t* result, bitstream* stream) {\n  int32_t bit = read1Bit(stream);\n  if (bit < 0) return bit;\n\n  *result = 0;\n  if (0 == bit) {\n    return 0;\n  } else {\n    int32_t n = decodeUpto3(stream);\n    if (0 <= n) {\n      *result = simplicity_readNBits(n, stream);\n      if (*result < 0) return *result;\n    }\n    return n;\n  }\n}\n\n/* Decode an encoded number between 1 and 15 inclusive.\n * When successful returns the decoded result.\n * If the decoded value would be too large, 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned.\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned.\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned.\n *\n * Precondition: NULL != stream\n */\nstatic int32_t decodeUpto15(bitstream* stream) {\n  int32_t result;\n  int32_t len = decodeUpto3Bits(&result, stream);\n  if (len < 0) return len;\n  result |= 1 << len;\n  return result;\n}\n\n/* Decode an encoded bitstring up to length 15.\n * If successful returns the length of the bitstring and 'result' contains the decoded bits.\n * The decoded bitstring is stored in the LSBs of 'result', with the LSB being the last bit decoded.\n * Any remaining bits in 'result' are reset to 0.\n * If the decoded bitstring would be too long 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned ('result' may be modified).\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned ('result' may be modified).\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned ('result' may be modified).\n *\n * Precondition: NULL != result\n *               NULL != stream\n */\nstatic int32_t decodeUpto15Bits(int32_t* result, bitstream* stream) {\n  int32_t bit = read1Bit(stream);\n  if (bit < 0) return bit;\n\n  *result = 0;\n  if (0 == bit) {\n    return 0;\n  } else {\n    int32_t n = decodeUpto15(stream);\n    if (0 <= n) {\n      *result = simplicity_readNBits(n, stream);\n      if (*result < 0) return *result;\n    }\n    return n;\n  }\n}\n\n/* Decode an encoded number between 1 and 65535 inclusive.\n * When successful returns the decoded result.\n * If the decoded value would be too large, 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned.\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned.\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned.\n *\n * Precondition: NULL != stream\n */\nstatic int32_t decodeUpto65535(bitstream* stream) {\n  int32_t result;\n  int32_t len = decodeUpto15Bits(&result, stream);\n  if (len < 0) return len;\n  result |= 1 << len;\n  return result;\n}\n\n/* Decode an encoded number between 1 and 2^31 - 1 inclusive.\n * When successful returns the decoded result.\n * If the decoded value would be too large, 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned.\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned.\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned.\n *\n * Precondition: NULL != stream\n */\nint32_t simplicity_decodeUptoMaxInt(bitstream* stream) {\n  int32_t bit = read1Bit(stream);\n  if (bit < 0) return bit;\n  if (0 == bit) {\n    return 1;\n  } else {\n    int32_t n = decodeUpto65535(stream);\n    if (n < 0) return n;\n    if (30 < n) return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n    {\n      int32_t result = simplicity_readNBits(n, stream);\n      if (result < 0) return result;\n      return ((1 << n) | result);\n    }\n  }\n}\n\n/* Fills a 'bitstring' containing 'n' bits from 'stream'.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_EOF' if not enough bits are available.\n * If successful, '*result' is set to a bitstring with 'n' bits read from 'stream' and 'SIMPLICITY_NO_ERROR' is returned.\n *\n * If an error is returned '*result' might be modified.\n *\n * Precondition: NULL != result\n *               n <= 2^31\n *               NULL != stream\n */\nsimplicity_err simplicity_readBitstring(bitstring* result, size_t n, bitstream* stream) {\n  static_assert(0x80000000u + 2*(CHAR_BIT - 1) <= SIZE_MAX, \"size_t needs to be at least 32-bits\");\n  simplicity_assert(n <= 0x80000000u);\n  size_t total_offset = n + stream->offset;\n  /* |= stream->len * CHAR_BIT < total_offset iff stream->len < (total_offset + (CHAR_BIT - 1)) / CHAR_BIT */\n  if (stream->len < (total_offset + (CHAR_BIT - 1)) / CHAR_BIT) return SIMPLICITY_ERR_BITSTREAM_EOF;\n  /* total_offset <= stream->len * CHAR_BIT */\n  *result = (bitstring)\n          { .arr = stream->arr\n          , .offset = stream->offset\n          , .len = n\n          };\n  {\n    size_t delta = total_offset / CHAR_BIT;\n    stream->arr += delta; stream->len -= delta;\n    stream->offset = total_offset % CHAR_BIT;\n    /* Note that if 0 == stream->len then 0 == stream->offset. */\n  }\n  return SIMPLICITY_NO_ERROR;\n}\n"
  },
  {
    "path": "C/bitstream.h",
    "content": "/* This module provides functions for initializing and reading from a stream of bits from a 'FILE'. */\n#ifndef SIMPLICITY_BITSTREAM_H\n#define SIMPLICITY_BITSTREAM_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdbool.h>\n#include <simplicity/errorCodes.h>\n#include \"bitstring.h\"\n\n/* :TODO: consider adding an 'invalid' state that can be set when parsing has failed and should not be resumed. */\n/* Datatype representing a bit stream.\n * Bits are streamed from MSB to LSB.\n *\n * Invariant: unsigned char arr[len]\n *            0 <= offset < CHAR_BIT\n *            0 == len implies 0 == offset\n */\ntypedef struct bitstream {\n  const unsigned char *arr;  /* Underlying byte array */\n  size_t len;                /* Length of arr (in bytes) */\n  unsigned char offset;      /* Number of bits parsed from the beginning of arr */\n} bitstream;\n\n/* Initialize a bit stream, 'stream', from a given byte array.\n * Precondition: unsigned char arr[len];\n */\nstatic inline bitstream initializeBitstream(const unsigned char* arr, size_t len) {\n  return (bitstream){ .arr = arr, .len = len };\n}\n\n/* Closes a bitstream by consuming all remaining bits.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES' if CHAR_BIT or more bits remain in the stream.\n * Otherwise, returns 'SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING' if any remaining bits are non-zero.\n * Otherwise returns 'SIMPLICITY_NO_ERROR'.\n *\n * Precondition: NULL != stream\n */\nsimplicity_err simplicity_closeBitstream(bitstream* stream);\n\n/* Fetches up to 31 bits from 'stream' as the 'n' least significant bits of return value.\n * The 'n' bits are set from the MSB to the LSB.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_EOF' if not enough bits are available.\n *\n * Precondition: 0 <= n < 32\n *               NULL != stream\n */\nint32_t simplicity_readNBits(int n, bitstream* stream);\n\n/* Returns one bit from 'stream', 0 or 1.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_EOF' if no bits are available.\n *\n * Precondition: NULL != stream\n */\nstatic inline int32_t read1Bit(bitstream* stream) {\n  return simplicity_readNBits(1, stream);\n}\n\n/* Decode an encoded number between 1 and 2^31 - 1 inclusive.\n * When successful returns the decoded result.\n * If the decoded value would be too large, 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' is returned.\n * If more bits are needed than available in the 'stream', 'SIMPLICITY_ERR_BITSTRING_EOF' is returned.\n * If an I/O error occurs when reading from the 'stream', 'SIMPLICITY_ERR_BISTRING_ERROR' is returned.\n *\n * Precondition: NULL != stream\n */\nint32_t simplicity_decodeUptoMaxInt(bitstream* stream);\n\n/* Fills a 'bitstring' containing 'n' bits from 'stream'.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_EOF' if not enough bits are available.\n * If successful, '*result' is set to a bitstring with 'n' bits read from 'stream' and 'SIMPLICITY_NO_ERROR' is returned.\n *\n * If an error is returned '*result' might be modified.\n *\n * Precondition: NULL != result\n *               n <= 2^31\n *               NULL != stream\n */\nsimplicity_err simplicity_readBitstring(bitstring* result, size_t n, bitstream* stream);\n#endif\n"
  },
  {
    "path": "C/bitstring.h",
    "content": "/* This modules defines a structure representing bit strings. */\n#ifndef SIMPLICITY_BITSTRING_H\n#define SIMPLICITY_BITSTRING_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <limits.h>\n#include <stdbool.h>\n#include \"simplicity_assert.h\"\n\n/* Represents a bitstring of length 'len' bits using an array of unsigned char.\n * The bit at index 'n', where 0 <= 'n' < 'len', is located at bit '1 << (CHAR_BIT - 1 - (offset + n) % CHAR_BIT)' of\n * array element 'arr[(offset + n) / CHAR_BIT]'.\n * Other bits in the array may be any value.\n *\n * Invariant: len <= 2^31\n *            offset + length <= SIZE_MAX\n *            0 < len implies unsigned char arr[(offset + len - 1) / CHAR_BIT + 1];\n */\ntypedef struct bitstring {\n  const unsigned char* arr;\n  size_t len;\n  size_t offset;\n} bitstring;\n\n/* Return the nth bit from a bitstring.\n *\n * Precondition: NULL != s\n *               n < s->len;\n */\nstatic inline bool getBit(const bitstring *s, size_t n) {\n  size_t total_offset = s->offset + n;\n  simplicity_assert(n < s->len);\n  return 1 & (s->arr[total_offset / CHAR_BIT] >> (CHAR_BIT - 1 - (total_offset % CHAR_BIT)));\n}\n\n/* Return 8 bits from a bitstring staring from the nth bit.\n *\n * Precondition: NULL != s\n *               n + 8 <= s->len;\n */\nstatic inline uint_fast8_t getByte(const bitstring *s, size_t n) {\n  simplicity_assert(8 <= s->len);\n  simplicity_assert(n <= s->len - 8);\n  size_t total_offset = s->offset + n;\n  if (total_offset % CHAR_BIT <= CHAR_BIT - 8) {\n    return (uint_fast8_t)(0xff & (s->arr[total_offset / CHAR_BIT] >> (CHAR_BIT - 8 - (total_offset % CHAR_BIT))));\n  } else {\n    /* CHAR_BIT < total_offset % CHAR_BIT + 8 */\n    return (uint_fast8_t)(0xff & (((1U * s->arr[total_offset / CHAR_BIT]) << (total_offset % CHAR_BIT - (CHAR_BIT - 8)))\n                                  | (s->arr[total_offset / CHAR_BIT + 1] >> (CHAR_BIT - (total_offset % CHAR_BIT - (CHAR_BIT - 8))))));\n  }\n}\n#endif\n"
  },
  {
    "path": "C/bounded.h",
    "content": "#ifndef SIMPLICITY_BOUNDED_H\n#define SIMPLICITY_BOUNDED_H\n\n#include <stdbool.h>\n#include <stdint.h>\n\ntypedef uint_least32_t ubounded;\n#define UBOUNDED_MAX UINT32_MAX\n\nstatic inline ubounded bounded_max(ubounded x, ubounded y) {\n  return x <= y ? y : x;\n}\n\n/* Returns min(x + y, UBOUNDED_MAX) */\nstatic inline ubounded bounded_add(ubounded x, ubounded y) {\n  return UBOUNDED_MAX < x ? UBOUNDED_MAX\n       : UBOUNDED_MAX - x < y ? UBOUNDED_MAX\n       : x + y;\n}\n\n/* *x = min(*x + 1, UBOUNDED_MAX) */\nstatic inline void bounded_inc(ubounded* x) {\n  if (*x < UBOUNDED_MAX) (*x)++;\n}\n\n/* 'pad(false, a, b)' computes the PADL(a, b) function.\n * 'pad( true, a, b)' computes the PADR(a, b) function.\n */\nstatic inline ubounded pad(bool right, ubounded a, ubounded b) {\n  return bounded_max(a, b) - (right ? b : a);\n}\n\nenum { overhead = 100 }; /* milli weight units */\n#endif\n"
  },
  {
    "path": "C/ctx8Pruned.c",
    "content": "#include \"ctx8Pruned.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\n *      (ctx8Init &&& scribe (toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn vector16 >>> ctx8Finalize) >>>\n *     eq >>> verify\n */\nconst unsigned char ctx8Pruned[] = {\n  0xeb, 0x11, 0xe9, 0x20, 0x40, 0x82, 0xe0, 0x2c, 0x02, 0x98, 0x8a, 0x05, 0x88, 0x58, 0xe2, 0x2c, 0x42, 0x9a, 0x45, 0x02,\n  0xc4, 0x2d, 0x3a, 0x45, 0xb7, 0x21, 0x40, 0xb7, 0xec, 0x17, 0x00, 0xd8, 0x28, 0x16, 0x01, 0x68, 0x0b, 0x80, 0x70, 0x11,\n  0x70, 0x00, 0xb7, 0x69, 0x14, 0x0b, 0x66, 0xf1, 0x70, 0x5e, 0x0a, 0x27, 0x02, 0x15, 0x0b, 0x10, 0xb5, 0x05, 0xc1, 0xf8,\n  0x38, 0x9c, 0x0c, 0x5c, 0x37, 0x88, 0x04, 0xe0, 0x42, 0xa1, 0x70, 0xce, 0x20, 0x16, 0x41, 0x6c, 0xe1, 0x82, 0x81, 0x62,\n  0x17, 0x12, 0x71, 0x40, 0xb8, 0x00, 0x5b, 0x38, 0xa4, 0x50, 0x2d, 0x3c, 0x46, 0x2e, 0x25, 0xe2, 0x81, 0x40, 0xb0, 0x0b,\n  0x48, 0x5c, 0x10, 0x2e, 0x25, 0xe3, 0x11, 0x71, 0x3f, 0x00, 0x14, 0x0b, 0x8a, 0x38, 0xb0, 0x5c, 0x37, 0x81, 0x8a, 0x05,\n  0x80, 0x5c, 0x41, 0xc5, 0x42, 0xe1, 0x5c, 0x72, 0x28, 0x17, 0x0e, 0xe0, 0x82, 0xe2, 0x9e, 0x30, 0x14, 0x0b, 0x00, 0xb4,\n  0x05, 0xc7, 0x3c, 0x62, 0x2e, 0x29, 0xe2, 0x21, 0x40, 0xb8, 0xd7, 0x90, 0x62, 0xe3, 0xee, 0x40, 0x8b, 0x8a, 0x02, 0xa1,\n  0x62, 0x17, 0x1e, 0xe0, 0x2e, 0x2c, 0xe2, 0xc1, 0x40, 0xb9, 0x0f, 0x98, 0xb8, 0xb7, 0x8a, 0x85, 0x02, 0xc0, 0x2d, 0x01,\n  0x70, 0x10, 0xb8, 0x84, 0x4e, 0x4a, 0x93, 0x92, 0xc4, 0xe4, 0xb9, 0x39, 0x30, 0x4e, 0x4c, 0x8a, 0x05, 0x80, 0x59, 0x05,\n  0xa0, 0x2e, 0x4e, 0x85, 0xc9, 0xce, 0x4e, 0x08, 0x10, 0x20, 0x5c, 0x9c, 0xe4, 0x40, 0xb9, 0x43, 0xc8, 0xe1, 0x40, 0xb8,\n  0x7f, 0x27, 0xc5, 0xca, 0x0e, 0x4e, 0x8a, 0x05, 0x80, 0x5c, 0xa4, 0xe5, 0x08, 0x81, 0x31, 0x17, 0x24, 0xb8, 0x98, 0x5c,\n  0x84, 0xe5, 0x00, 0xa0, 0x58, 0x05, 0xa0, 0x2e, 0x3b, 0xe2, 0x41, 0x72, 0x4f, 0x94, 0x82, 0x71, 0x88, 0xa8, 0x5c, 0x9b,\n  0xe5, 0x40, 0xb9, 0x2b, 0xc9, 0x71, 0x40, 0xb9, 0x55, 0xc9, 0xe1, 0x72, 0x64, 0x2a, 0x16, 0x61, 0x6c, 0x0b, 0x96, 0x1c,\n  0xad, 0x17, 0x2f, 0x38, 0xe0, 0x50, 0x2e, 0x59, 0xf2, 0xbc, 0x5c, 0xb8, 0xe5, 0x10, 0xa0, 0x58, 0x05, 0xca, 0xfe, 0x16,\n  0x2e, 0x60, 0xf9, 0x70, 0x28, 0x17, 0x30, 0x3c, 0x9e, 0x17, 0x27, 0xf9, 0x7c, 0x28, 0x16, 0x01, 0x68, 0x0b, 0x97, 0x9c,\n  0xad, 0x17, 0x29, 0x39, 0x7e, 0x28, 0x17, 0x2a, 0xf9, 0x74, 0x2e, 0x5b, 0x71, 0x38, 0xa0, 0x58, 0x05, 0xcc, 0x37, 0x15,\n  0x0b, 0x91, 0xdc, 0xc9, 0x0a, 0x05, 0xcc, 0x67, 0x2c, 0x85, 0xcc, 0x3f, 0x30, 0x42, 0x81, 0x60, 0x16, 0x80, 0xb8, 0x00,\n  0x5c, 0x40, 0x17, 0x1e, 0x05, 0xc8, 0x10, 0xb9, 0x77, 0xc9, 0x91, 0x73, 0x21, 0xcb, 0x71, 0x40, 0xb9, 0x73, 0xcc, 0x68,\n  0x9c, 0xc0, 0x8a, 0x85, 0xcc, 0x5f, 0x32, 0xe2, 0xe6, 0x63, 0x99, 0xd1, 0x40, 0xb9, 0x69, 0xc6, 0x02, 0x81, 0x64, 0x17,\n  0x30, 0x5c, 0xc8, 0x89, 0xcd, 0x28, 0xb9, 0x9d, 0xe5, 0x38, 0x9c, 0x88, 0x15, 0x0b, 0x9a, 0x3e, 0x69, 0xc4, 0xe5, 0x20,\n  0xb9, 0x9d, 0xe6, 0x84, 0x5c, 0xd6, 0xf3, 0x1e, 0x28, 0x16, 0x01, 0x66, 0x16, 0xd0, 0xb8, 0x51, 0x06, 0x20, 0xc3, 0x85,\n  0x80, 0xd9, 0x20, 0xc3, 0x85, 0x80, 0xda, 0xd0, 0x61, 0xc2, 0xc0, 0x6e, 0x00, 0x83, 0x0e, 0x16, 0x04, 0x18, 0x61, 0xf3,\n  0x14, 0x20, 0xe3, 0x0f, 0xb0, 0x50, 0x83, 0x8c, 0x3f, 0x01, 0x14, 0x20, 0xe3, 0x0f, 0xc1, 0x85, 0x08, 0x38, 0xc3, 0xf0,\n  0xb1, 0x42, 0x0e, 0x30, 0xfc, 0x40, 0x28, 0x3f, 0x11, 0x14, 0x51, 0x38, 0xa8, 0x30, 0x0c, 0x88, 0x30, 0xc1, 0x60, 0x3e,\n  0x06, 0xe3, 0x21, 0x41, 0xf8, 0xd0, 0xa4, 0x90, 0x2a, 0x28, 0x9c, 0x7e, 0x18, 0x06, 0x91, 0xf8, 0x01, 0xb8, 0x60, 0xa0,\n  0xa0, 0xe2, 0x07, 0x02, 0x03, 0x88, 0x88, 0x30, 0xc1, 0x60, 0x3e, 0x06, 0xe4, 0x70, 0xa0, 0xfc, 0x90, 0x29, 0x24, 0x12,\n  0x0a, 0x05, 0x88, 0xa2, 0x72, 0x74, 0x30, 0x0d, 0x63, 0xf0, 0x23, 0x71, 0xd0, 0xa0, 0xa0, 0xe2, 0x07, 0x04, 0x03, 0x90,\n  0x04, 0x18, 0x60, 0xb0, 0x1f, 0x03, 0x72, 0xb0, 0x50, 0x7e, 0x57, 0x14, 0x92, 0x09, 0x09, 0x45, 0x02, 0xc0, 0x2c, 0xc5,\n  0x20, 0x80, 0xd0, 0x37, 0x0f, 0xc1, 0x4d, 0xc9, 0xb1, 0x41, 0x41, 0xc4, 0x0e, 0x0e, 0x07, 0x28, 0x48, 0x30, 0xc1, 0x60,\n  0x3e, 0x06, 0xe0, 0x02, 0x83, 0xf0, 0x22, 0x92, 0x41, 0x21, 0x29, 0x30, 0x14, 0x0b, 0x00, 0xb2, 0x0b, 0x48, 0xa6, 0xca,\n  0xad, 0x50, 0x85, 0x14, 0xbd, 0x6d, 0x6d, 0xad, 0x37, 0xa5, 0x07, 0xba, 0x95, 0x2c, 0xf8, 0x91, 0x3f, 0x0f, 0x42, 0xdb,\n  0x25, 0xb0, 0x76, 0x43, 0x02, 0xb2, 0xae, 0xaf, 0x27, 0x59, 0x4a, 0x0c, 0x03, 0x78, 0xfc, 0x18, 0xdc, 0xbd, 0x14, 0x14,\n  0x1c, 0x40, 0xe1, 0x00, 0x73, 0x06, 0x41, 0x86, 0x0b, 0x03, 0x0f, 0x76, 0x12, 0x30, 0xd0, 0xcd, 0xd8, 0x6d, 0x5b, 0x74,\n  0x5e, 0x53, 0x67, 0xcc, 0xca, 0x74, 0xe2, 0xea, 0x56, 0xe6, 0x45, 0x35, 0x9b, 0x25, 0xd0, 0x89, 0x73, 0xa7, 0x91, 0xc4,\n  0xa6, 0x59, 0x1f, 0x13, 0x73, 0x1c, 0x28, 0x28, 0x38, 0x81, 0x98, 0x1c, 0xca, 0x10, 0x71, 0x82, 0xc0, 0xd9, 0x8d, 0x82,\n  0xc2, 0x75, 0x1d, 0x9f, 0x26, 0xee, 0x14, 0x13, 0x63, 0x40, 0x32, 0x54, 0x75, 0xc1, 0xad, 0xd6, 0xdd, 0x32, 0xda, 0x3d,\n  0xcf, 0x22, 0x69, 0xba, 0x1c, 0xe5, 0x60, 0x30, 0xb7, 0xc1, 0x73, 0x66, 0x6e, 0x6c, 0x8e, 0x48, 0xba, 0x11, 0xfa, 0x1b,\n  0x85, 0xd0, 0x26, 0x13, 0xa0, 0x4c, 0x4e, 0x81, 0x30, 0x62, 0x16, 0x64, 0x90, 0x27, 0x21, 0x4d, 0xc3, 0x92, 0x28, 0x3f,\n  0x43, 0xc9, 0xfa, 0x1f, 0x43, 0x00, 0xc0, 0x7e, 0x71, 0x52, 0x2e, 0x27, 0x01, 0x89, 0x87, 0x82, 0x83, 0x0f, 0x05, 0x06,\n  0x1e, 0x0a, 0x0c, 0x3c, 0x14, 0x18, 0x78, 0x28, 0x30, 0xf0, 0x50, 0x0e, 0x0c, 0x17, 0x3b, 0x63, 0x85, 0xc2, 0x86, 0xe7,\n  0x64, 0xfc, 0xed, 0x0a, 0x0e, 0x3f, 0x3b, 0xc6, 0x1e, 0x0a, 0x0e, 0x17, 0x15, 0x0d, 0xce, 0xf1, 0xf9, 0xdf, 0x14, 0x1c,\n  0x6e, 0x46, 0x9f, 0x9e, 0x43, 0x0f, 0x05, 0x07, 0x0b, 0x21, 0xb9, 0xe4, 0x3f, 0x3c, 0xa2, 0x83, 0x8d, 0xc9, 0x83, 0xf3,\n  0xd4, 0x61, 0xe0, 0xa0, 0xe1, 0x64, 0x41, 0x86, 0x1e, 0x0a, 0x0e, 0x37, 0x29, 0x4f, 0x99, 0x87, 0x82, 0x83, 0x85, 0x91,\n  0x06, 0x18, 0x78, 0x28, 0x38, 0xdc, 0xb2, 0x3e, 0x66, 0x1e, 0x0a, 0x0e, 0x16, 0x43, 0x72, 0xe4, 0xc3, 0xc1, 0x41, 0xc6,\n  0xe5, 0xf1, 0xf9, 0x7e, 0x61, 0xe0, 0xa0, 0xe1, 0x64, 0x27, 0x27, 0xce, 0x3f, 0x30, 0xe1, 0x83, 0x8b, 0xca, 0x43, 0x83,\n  0x88, 0xe0, 0xe2, 0x3f, 0x29, 0xc3, 0xa4, 0x70, 0x6e, 0xb3, 0x83, 0x42, 0xcc, 0x0e, 0x04, 0x17, 0x0a, 0x0b, 0x86, 0xf1,\n  0x58, 0x18, 0x0b, 0x84, 0x8f, 0xc4, 0x47, 0xe1, 0xa6, 0xe6, 0x74, 0x50, 0x2c, 0x00, 0xc8, 0x0d, 0x40, 0x71, 0x50, 0x5c,\n  0x64, 0x3f, 0x1c, 0x1c, 0x7d, 0x26, 0xe4, 0x40, 0xa0, 0x0d, 0x02, 0xc4, 0x7d, 0xc7, 0xd0, 0x6e, 0x40, 0x8a, 0x05, 0x80,\n  0x19, 0x01, 0xb8, 0x0e, 0x43, 0x85, 0xc8, 0xf1, 0xf9, 0x2a, 0x71, 0xf8, 0xe0, 0xdd, 0x09, 0x02, 0x80, 0x34, 0x0b, 0x11,\n  0xf8, 0xf4, 0xfa, 0x0d, 0xc9, 0xe1, 0x40, 0xb0, 0x03, 0x20, 0x37, 0x01, 0xca, 0x40, 0xb9, 0x58, 0x3f, 0x42, 0xa9, 0xc7,\n  0xe4, 0xa1, 0xba, 0x17, 0x45, 0x00, 0x68, 0x16, 0x23, 0xf2, 0x64, 0xfa, 0x0d, 0xd0, 0xbc, 0x28, 0x16, 0x00, 0x64, 0x06,\n  0xe0, 0x39, 0x7e, 0x17, 0x30, 0xe3, 0xf4, 0x35, 0x1c, 0x7e, 0x58, 0x9b, 0xa1, 0xc8, 0x50, 0x06, 0x81, 0x62, 0x3f, 0x2d,\n  0x8f, 0xa0, 0xdd, 0x0e, 0x62, 0x81, 0x60, 0x06, 0x40, 0x6e, 0x03, 0x99, 0xa0, 0xb9, 0xa1, 0x1f, 0xa1, 0xfc, 0xe3, 0xf3,\n  0x1c, 0x6e, 0x88, 0x71, 0x40, 0x1a, 0x05, 0x88, 0xfc, 0xc9, 0x9f, 0x41, 0xba, 0x22, 0x05, 0x02, 0xc0, 0x0c, 0x80, 0xdc,\n  0x48, 0xb9, 0xa6, 0x01, 0xce, 0x89, 0xfa, 0x25, 0x45, 0x00, 0xc8, 0x0e, 0x6e, 0x80, 0xe7, 0x70, 0x07, 0x35, 0xa0, 0xe7,\n  0x84, 0x27, 0x3d, 0x0c, 0xe8, 0x86, 0x73, 0x90, 0xb3, 0xcf, 0xfe, 0xdf, 0x1a, 0x67, 0xf3, 0x5f, 0x4e, 0x6e, 0x69, 0xc3,\n  0x92, 0x10, 0xd0, 0x9f, 0xdd, 0xb9, 0x18, 0x9a, 0x14, 0xc2, 0x25, 0xa7, 0x7e, 0x6c, 0x26, 0x2e, 0x83, 0x03, 0x40, 0xc4,\n  0x27, 0x45, 0x21, 0xfa, 0x29, 0x41, 0x00, 0xe7, 0xd0, 0x0e, 0x7d, 0xc0, 0xe8, 0x95, 0x1f, 0x9a, 0xf1, 0x40, 0x18, 0x03,\n  0xa2, 0x78, 0x7e, 0x6f, 0x85, 0x00, 0x60, 0x0e, 0x8a, 0x71, 0xf9, 0xcd, 0x14, 0x01, 0x80, 0x3a, 0x2c, 0x07, 0xe7, 0xbc,\n  0x50, 0x06, 0x00, 0xe0, 0xdd, 0x21, 0x14, 0x1c, 0x70, 0xb0, 0x0b, 0xa2, 0xa0, 0x2e, 0x80, 0x8e, 0x90, 0xd0, 0x9d, 0x21,\n  0xa1, 0x3a, 0x43, 0x40, 0xe8, 0x0c, 0x0b, 0x12, 0x45, 0xd1, 0x2e, 0x37, 0x48, 0x81, 0x9f, 0x0d, 0x87, 0x1b, 0x6e, 0x13,\n  0xeb, 0xe9, 0x84, 0x31, 0x41, 0x77, 0xfd, 0x15, 0xb1, 0xe7, 0xfa, 0x6e, 0x78, 0x95, 0x30, 0x7a, 0x23, 0x00, 0xba, 0x5d,\n  0x0b, 0xea, 0x69, 0xb8, 0x62, 0xe6, 0x03, 0x00, 0xc0, 0x70, 0xba, 0x24, 0x46, 0xe9, 0x13, 0x0b, 0xa2, 0x34, 0xca, 0x83,\n  0x43, 0x4d, 0x37, 0xa9, 0x79, 0x7b, 0x4f, 0xe6, 0x86, 0x21, 0xc6, 0x0f, 0x1e, 0xe4, 0xc8, 0x86, 0x24, 0x5f, 0x79, 0x83,\n  0x96, 0xa6, 0xc1, 0x8f, 0x0c, 0x9d, 0x81, 0xa6, 0x47, 0x58, 0x01, 0x80, 0x62, 0x38, 0x5d, 0x10, 0x23, 0x74, 0x8b, 0x05,\n  0xd0, 0xfa, 0x0b, 0x30, 0x60, 0x38, 0x5d, 0x0d, 0xc6, 0x71, 0xfa, 0x14, 0xba, 0x34, 0x32, 0x6b, 0x1e, 0x91, 0x86, 0xae,\n  0x9b, 0x3a, 0x19, 0x02, 0xdf, 0x58, 0xa1, 0x2d, 0xd9, 0x14, 0x70, 0xfc, 0x94, 0x47, 0x07, 0x8b, 0x87, 0xea, 0xc9, 0xa2,\n  0x86, 0x0b, 0xa1, 0x80, 0x14, 0x70, 0xba, 0x15, 0xcc, 0x64, 0x0e, 0x5c, 0x36, 0x1d, 0x88, 0x6c, 0x0b, 0x2b, 0xdc, 0xee,\n  0x38, 0x18, 0xae, 0xe8, 0xd6, 0xca, 0x39, 0x18, 0x15, 0x60, 0x8e, 0xe5, 0x36, 0x0c, 0xb2, 0xd1, 0x0a, 0x53, 0x24, 0x32,\n  0x7c, 0x17, 0x12, 0x82, 0x8e, 0x17, 0x41, 0xf8, 0xfc, 0x52, 0x2e, 0x91, 0xe7, 0x48, 0xf0, 0x41, 0x82, 0xc0, 0x17, 0x0a,\n  0x06, 0x63, 0x04, 0xe2, 0xf0, 0x71, 0xc0, 0x1c, 0x54, 0x49, 0x02, 0x0d, 0xd2, 0xaa, 0x64, 0x71, 0x50, 0xab, 0xa3, 0x18,\n  0x7c, 0x56, 0x9e, 0x23, 0x69, 0xde, 0xf6, 0x19, 0x8d, 0x77, 0x9a, 0xd8, 0xe0, 0x86, 0x77, 0xf7, 0x5d, 0xa0, 0x9d, 0x47,\n  0xc8, 0xba, 0x7f, 0x6c, 0x27, 0x59, 0xc0, 0xc0, 0x3a, 0x0a, 0xc6, 0x24, 0x5d, 0x0e, 0x46, 0x60, 0x42, 0x24, 0xce, 0x38,\n  0xf2, 0x26, 0xe2, 0xae, 0x17, 0x27, 0x8e, 0xf8, 0x0d, 0xc1, 0x09, 0xc7, 0xfd, 0xeb, 0xe4, 0x23, 0x85, 0xe3, 0x0c, 0x83,\n  0xff, 0x8e, 0x9e, 0xf7, 0x4c, 0x39, 0xc9, 0x2f, 0x41, 0xe1, 0x81, 0xa0, 0x62, 0x30, 0xe1, 0x6a, 0x0b, 0x80, 0x12, 0x2e,\n  0x89, 0x90, 0x78, 0x17, 0x01, 0x04, 0x18, 0x91, 0x74, 0x5b, 0x83, 0xc1, 0xf8, 0x30, 0x20, 0xc3, 0x85, 0x99, 0x22, 0xe8,\n  0xd5, 0x07, 0x87, 0x70, 0xd0, 0x41, 0x81, 0xe2, 0x1e, 0x20, 0x07, 0x23, 0x87, 0x0b, 0x01, 0xc7, 0x0b, 0x60, 0xe3, 0x85,\n  0xc2, 0xc6, 0x24, 0x0e, 0x93, 0xc8, 0x81, 0x02, 0xbd, 0x21, 0x01, 0x50, 0xa8, 0x1a, 0x09, 0x03, 0xa5, 0xbc, 0x2e, 0x91,\n  0x28, 0xdd, 0x22, 0x03, 0x74, 0x22, 0x1f, 0xa0, 0x70, 0x50, 0x6e, 0x90, 0xf9, 0xba, 0x0f, 0x4f, 0xd0, 0x40, 0x28, 0x37,\n  0x48, 0x78, 0xdd, 0x06, 0xc7, 0xe8, 0x24, 0x14, 0x1b, 0xa0, 0xc8, 0xdd, 0x05, 0xa7, 0xe8, 0x28, 0x14, 0x1b, 0xa0, 0xa4,\n  0xdd, 0x04, 0x87, 0xe8, 0x2c, 0x14, 0x01, 0xd0, 0x76, 0x2c, 0x46, 0xe8, 0x30, 0x3f, 0x41, 0x80, 0xa0, 0x0e, 0x84, 0x03,\n  0xf4, 0x16, 0x8a, 0x05, 0xb3, 0x48, 0x20, 0x1a, 0x40, 0xe0, 0x01, 0x70, 0x41, 0xba, 0x12, 0x0f, 0xb0, 0x50, 0x06, 0x47,\n  0xe8, 0x4c, 0x38, 0x54, 0x6e, 0x04, 0x6c, 0x0f, 0xd0, 0xa2, 0x28, 0x16, 0x00, 0x64, 0x06, 0xe0, 0x38, 0x90, 0x2e, 0x28,\n  0x1b, 0xa4, 0x90, 0x6e, 0x84, 0xc3, 0x85, 0x40, 0x66, 0x7e, 0x92, 0x69, 0xc2, 0xa3, 0x66, 0x6c, 0x0f, 0xd2, 0x52, 0x14,\n  0x0b, 0x00, 0x32, 0x03, 0x78, 0x1c, 0x72, 0x17, 0x1e, 0x8d, 0xd2, 0x5e, 0x37, 0x42, 0xe9, 0xc2, 0xa0, 0x33, 0x3f, 0x49,\n  0x8c, 0xe1, 0x51, 0xb3, 0x36, 0x07, 0xe9, 0x34, 0x0a, 0x05, 0x80, 0x19, 0x01, 0xbc, 0x0e, 0x47, 0x05, 0xc9, 0x21, 0xba,\n  0x4e, 0x86, 0xe8, 0x6e, 0x38, 0x54, 0x06, 0x67, 0xe9, 0x3c, 0x9c, 0x2a, 0x36, 0x66, 0xc0, 0xfd, 0x27, 0xe1, 0x40, 0xb0,\n  0x03, 0x20, 0x37, 0x8f, 0xd2, 0x88, 0x04, 0x03, 0x94, 0xa0, 0x72, 0xa3, 0xa6, 0x88, 0x2e, 0x94, 0x60, 0xdd, 0x28, 0x73,\n  0x74, 0x55, 0x9f, 0xa2, 0x40, 0x50, 0x6e, 0x94, 0x31, 0xba, 0x29, 0x0f, 0xd1, 0x28, 0x28, 0x37, 0x4a, 0x14, 0xdd, 0x13,\n  0xa7, 0xe8, 0x98, 0x14, 0x1b, 0xa2, 0x64, 0xdd, 0x12, 0x87, 0xe8, 0x9c, 0x14, 0x01, 0xd2, 0x8e, 0x16, 0x23, 0x74, 0x50,\n  0x1f, 0xa2, 0x80, 0x50, 0x07, 0x4a, 0x4c, 0xfd, 0x13, 0xa2, 0x81, 0x6c, 0xd2, 0x08, 0x06, 0x90, 0x38, 0x00, 0x5c, 0x10,\n  0x6e, 0x94, 0xd9, 0xf6, 0x0a, 0x00, 0xc8, 0xfd, 0x29, 0xf3, 0x85, 0x46, 0xe0, 0x46, 0xc0, 0xfd, 0x2a, 0x41, 0x40, 0xb0,\n  0x03, 0x20, 0x37, 0x01, 0xc4, 0x81, 0x71, 0x40, 0xdd, 0x2b, 0x03, 0x74, 0x5e, 0x1c, 0x2a, 0x03, 0x33, 0xf4, 0xad, 0x4e,\n  0x15, 0x1b, 0x33, 0x60, 0x7e, 0x95, 0xd0, 0xa0, 0x58, 0x01, 0x90, 0x1b, 0xc0, 0xe3, 0x90, 0xb8, 0xf4, 0x6e, 0x96, 0x31,\n  0xba, 0x33, 0x4e, 0x15, 0x01, 0x99, 0xfa, 0x59, 0x67, 0x0a, 0x8d, 0x99, 0xb0, 0x3f, 0x4b, 0x40, 0x50, 0x2c, 0x00, 0xc8,\n  0x0d, 0xe3, 0xf4, 0xb6, 0x81, 0x00, 0xe4, 0x80, 0x1c, 0x93, 0x18, 0x70, 0xb9, 0xbe, 0x03, 0xa4, 0x49, 0xd0, 0xa0, 0x07,\n  0x42, 0x68, 0x39, 0xc0, 0xe9, 0xcf, 0x0b, 0xa5, 0xc8, 0x37, 0x4b, 0x7c, 0xdd, 0x20, 0x33, 0xf4, 0x91, 0xc5, 0x06, 0xe9,\n  0x6f, 0x1b, 0xa3, 0xf0, 0xfd, 0x24, 0xb1, 0x41, 0xba, 0x5b, 0xa6, 0xe8, 0xf5, 0x3f, 0x49, 0x3c, 0x50, 0x6e, 0x8f, 0x13,\n  0x74, 0x76, 0x1f, 0xa4, 0xa6, 0x28, 0x37, 0x47, 0x41, 0xba, 0x38, 0xcf, 0xd2, 0x57, 0x14, 0x1b, 0xa3, 0x80, 0xdd, 0x1b,\n  0x67, 0xe9, 0x2d, 0x8a, 0x00, 0xe8, 0xf1, 0x16, 0x21, 0x74, 0x61, 0x74, 0x62, 0x01, 0xd1, 0xe8, 0x27, 0x46, 0x28, 0xb4,\n  0xe4, 0x08, 0x06, 0x40, 0x6d, 0x0b, 0x80, 0x85, 0xd1, 0x75, 0xd1, 0x78, 0x06, 0x02, 0x74, 0x5e, 0x9b, 0xa3, 0x34, 0xdd,\n  0x18, 0xe7, 0xe9, 0x00, 0x0a, 0x05, 0x80, 0x19, 0x01, 0xa8, 0x0e, 0x1a, 0x17, 0x10, 0x85, 0xd1, 0x6d, 0xd1, 0x70, 0x06,\n  0x02, 0x74, 0x5c, 0x9b, 0xa3, 0xe0, 0xdd, 0x18, 0x67, 0xe9, 0x0c, 0x8a, 0x05, 0x80, 0x19, 0x01, 0xa8, 0x0e, 0x2d, 0x0b,\n  0x8c, 0x42, 0xe8, 0xb2, 0xe8, 0xb4, 0x03, 0x01, 0x3a, 0x2d, 0x4d, 0xd2, 0x10, 0x37, 0x45, 0xf9, 0xfa, 0x62, 0xa2, 0x81,\n  0x60, 0x06, 0x40, 0x6a, 0x03, 0x8f, 0x42, 0xe4, 0x08, 0x5d, 0x15, 0xdd, 0x16, 0x00, 0x60, 0x27, 0x45, 0x89, 0xba, 0x45,\n  0x26, 0xe8, 0xbb, 0x3f, 0x4c, 0x98, 0x50, 0x2c, 0x00, 0xc8, 0x0d, 0x40, 0x72, 0x34, 0x2e, 0x48, 0x85, 0xd1, 0x55, 0xd1,\n  0x58, 0x06, 0x02, 0x74, 0x56, 0x9b, 0xa4, 0x84, 0x6e, 0x8b, 0x73, 0xf4, 0xcd, 0xc5, 0x02, 0xc0, 0x0c, 0x80, 0xd4, 0x03,\n  0xa2, 0xb0, 0x1c, 0x9e, 0x01, 0xcd, 0xc8, 0x39, 0x44, 0x07, 0x29, 0x42, 0xe8, 0x5b, 0x1f, 0xa2, 0x3c, 0xc3, 0x74, 0x48,\n  0x98, 0x61, 0xba, 0x5a, 0x87, 0x18, 0x61, 0xfa, 0x69, 0xe7, 0x18, 0x61, 0xfa, 0x6a, 0x82, 0x81, 0x66, 0x16, 0xc0, 0xb8,\n  0x00, 0xdd, 0x14, 0x29, 0x20, 0xb0, 0x50, 0x2b, 0x45, 0x02, 0xc3, 0x11, 0x50, 0xa8, 0x57, 0x11, 0x61, 0x80, 0xa0, 0x58,\n  0x05, 0xaf, 0x58, 0x81, 0x68, 0x0b, 0x56, 0xd1, 0x34, 0x0a, 0x85, 0x99, 0x02, 0x84, 0x90, 0x58, 0x28, 0x14, 0x82, 0x81,\n  0x63, 0x88, 0x98, 0x0a, 0x85, 0x71, 0x13, 0x11, 0x50, 0xb4, 0xe4, 0x20, 0x5b, 0x36, 0x89, 0xb0, 0x4d, 0x22, 0xc0, 0x2c,\n  0xc6, 0xe9, 0xbf, 0x1b, 0xa5, 0x4a, 0x61, 0xc7, 0x0b, 0x11, 0x3a, 0x19, 0x84, 0xe9, 0xc5, 0x01, 0xd2, 0x0a, 0x03, 0xa4,\n  0x10, 0x0c, 0x46, 0xe9, 0x40, 0x18, 0x2e, 0x9c, 0x58, 0x1d, 0x03, 0x7d, 0x02, 0x60, 0x81, 0x74, 0xa6, 0x3a, 0x71, 0xc6,\n  0xe9, 0xc2, 0x9f, 0xa7, 0x14, 0x28, 0x37, 0x4e, 0x20, 0xfd, 0x38, 0x81, 0x40, 0x1d, 0x39, 0x03, 0xf4, 0xa8, 0x85, 0x06,\n  0xe9, 0xc6, 0x9b, 0xa5, 0x4a, 0x7e, 0x9c, 0x80, 0xa0, 0x0e, 0x9c, 0xb8, 0xb1, 0x0b, 0x56, 0x80, 0x40, 0x34, 0x81, 0xc0,\n  0x07, 0xe9, 0x5c, 0x8a, 0x0d, 0xd3, 0x9f, 0x30, 0xdb, 0x0f, 0xd3, 0xa2, 0x14, 0x01, 0xa4, 0x58, 0x8d, 0xd3, 0xa6, 0x3e,\n  0x81, 0x41, 0xf8, 0x20, 0xa0, 0x19, 0x01, 0xb8, 0x6e, 0x9d, 0x90, 0x20, 0x1c, 0x4c, 0x07, 0x14, 0x0d, 0xd2, 0xa1, 0x30,\n  0xc1, 0x74, 0xee, 0x40, 0xe6, 0x2f, 0xa4, 0x76, 0x08, 0x37, 0x4b, 0x00, 0x5d, 0x3b, 0xd0, 0x39, 0xfb, 0xe7, 0xcc, 0x10,\n  0x2e, 0x96, 0xbf, 0x4f, 0x00, 0xdd, 0x3b, 0xc3, 0xf4, 0xef, 0x05, 0x00, 0x74, 0xf1, 0x0f, 0xd2, 0xdc, 0x14, 0x1b, 0xa7,\n  0x82, 0x6e, 0x96, 0xf9, 0xfa, 0x78, 0x82, 0x80, 0x3a, 0x79, 0x62, 0xc4, 0x2d, 0x5a, 0x01, 0x00, 0xd2, 0x37, 0x4f, 0x40,\n  0x10, 0x0e, 0x04, 0x07, 0x04, 0x03, 0x84, 0x8f, 0xd2, 0xb9, 0x38, 0xe1, 0x3a, 0x7b, 0x07, 0xe9, 0xe9, 0x8b, 0xa5, 0xce,\n  0x3f, 0x4f, 0x40, 0x5d, 0x2d, 0xc1, 0xfa, 0x5c, 0x42, 0xe9, 0x68, 0x8f, 0xd2, 0xd7, 0x17, 0x4b, 0x1c, 0x2e, 0x79, 0xfa,\n  0x55, 0x40, 0xe7, 0xa4, 0x0e, 0x79, 0xc0, 0xc0, 0x7e, 0x96, 0xb8, 0xa0, 0xdd, 0x2e, 0x03, 0x0d, 0xcf, 0x99, 0xfa, 0x5c,\n  0x62, 0x80, 0x34, 0x8b, 0x11, 0xba, 0x5c, 0xe7, 0xd0, 0x28, 0x3f, 0x3f, 0x62, 0x80, 0x64, 0x06, 0xe0, 0x38, 0x38, 0xfd,\n  0x2f, 0x51, 0x41, 0xba, 0x5f, 0xc6, 0x1b, 0xa0, 0x20, 0xfd, 0x30, 0x11, 0x40, 0x1a, 0x45, 0x88, 0xdd, 0x30, 0x53, 0xe8,\n  0x14, 0x1f, 0xa0, 0x40, 0x50, 0x0c, 0x80, 0xdc, 0x07, 0x15, 0x0f, 0xd3, 0x13, 0x14, 0x1b, 0xa7, 0xfe, 0x61, 0xba, 0x07,\n  0x4f, 0xd4, 0x01, 0x0a, 0x00, 0xd2, 0x2c, 0x46, 0xea, 0x01, 0x8f, 0xa0, 0x50, 0x7e, 0x82, 0x51, 0x40, 0x32, 0x03, 0x70,\n  0x1c, 0x7a, 0x3f, 0x4c, 0xbc, 0x50, 0x6e, 0xa0, 0x54, 0xc3, 0x74, 0x19, 0x1f, 0xa8, 0x18, 0x14, 0x01, 0xa4, 0x58, 0x8d,\n  0xd4, 0x0e, 0x1f, 0x40, 0xa0, 0xfd, 0x07, 0x42, 0x80, 0x64, 0x06, 0xe1, 0xba, 0x82, 0x80, 0x40, 0x39, 0x24, 0x17, 0x50,\n  0x57, 0xd3, 0x3c, 0x37, 0x50, 0x4c, 0x6e, 0x9a, 0x21, 0xfa, 0x82, 0x41, 0x40, 0xb9, 0x98, 0xe6, 0x54, 0x1c, 0xcd, 0x01,\n  0xcc, 0xa8, 0x18, 0x05, 0xa0, 0x6e, 0xa0, 0xc0, 0xfc, 0xd2, 0x0a, 0x00, 0xc8, 0xfd, 0x41, 0xa1, 0xc2, 0xa3, 0x73, 0x54,\n  0x6c, 0x0f, 0xd4, 0x1c, 0x8a, 0x05, 0x80, 0x19, 0x01, 0xb8, 0x7e, 0xa1, 0x0c, 0x10, 0x0e, 0x14, 0x07, 0x0c, 0x0b, 0x96,\n  0x61, 0x73, 0x26, 0x37, 0x50, 0x86, 0x7e, 0x9b, 0x31, 0xfa, 0x6c, 0xc2, 0x81, 0x60, 0x37, 0x50, 0x86, 0x7e, 0x9b, 0x01,\n  0xfa, 0x6c, 0x02, 0x81, 0x60, 0x37, 0x4d, 0x60, 0xfd, 0x35, 0x83, 0xf4, 0xd6, 0x05, 0x02, 0xc0, 0x6e, 0x9a, 0x81, 0xfa,\n  0x6a, 0x07, 0xe9, 0xa8, 0x0a, 0x05, 0x80, 0xdd, 0x34, 0x93, 0xf4, 0xd2, 0x4f, 0xd3, 0x49, 0x14, 0x0b, 0x00, 0x1d, 0x33,\n  0x33, 0x74, 0xd2, 0x4f, 0xd3, 0x49, 0x3f, 0x4d, 0x24, 0x50, 0x2c, 0x00, 0x74, 0xce, 0x45, 0x98, 0x1b, 0x86, 0xe9, 0xae,\n  0x9f, 0xa6, 0xba, 0x7e, 0x9a, 0xe8, 0xa0, 0x58, 0x00, 0xcc, 0x59, 0x81, 0xc2, 0xc6, 0xe9, 0xb9, 0x1f, 0xa6, 0xe4, 0x7e,\n  0x9b, 0x90, 0xa0, 0x58, 0x00, 0xcc, 0x59, 0x81, 0xc5, 0x03, 0x74, 0xe1, 0xcf, 0xd3, 0x87, 0x3f, 0x4e, 0x1c, 0x50, 0x2c,\n  0x00, 0x66, 0x2c, 0xc0, 0xe3, 0x51, 0xba, 0x73, 0x47, 0xe9, 0xcd, 0x1f, 0xa7, 0x34, 0x28, 0x16, 0x00, 0x33, 0x16, 0x60,\n  0x72, 0x08, 0x0e, 0x9d, 0x88, 0x5d, 0x3a, 0xde, 0x9d, 0x88, 0xba, 0x76, 0x63, 0xf4, 0xdd, 0x0f, 0xd3, 0x7b, 0x0c, 0x03,\n  0x8c, 0x00, 0xe2, 0xb8, 0x28, 0x07, 0x1c, 0x01, 0xc4, 0xd0, 0x50, 0x0e, 0x40, 0x01, 0xc4, 0x30, 0x50, 0x0e, 0x44, 0x01,\n  0xc3, 0x20, 0xa0, 0x1c, 0x90, 0x03, 0x83, 0xc1, 0x40, 0x38, 0x18, 0x5c, 0x18, 0x07, 0x40, 0xd8, 0xba, 0x78, 0x63, 0x80,\n  0xe8, 0x1e, 0x30, 0xe1, 0x74, 0x10, 0x00, 0xe8, 0x22, 0x37, 0x41, 0x59, 0xc2, 0xa3, 0x71, 0x09, 0x87, 0x0b, 0x01, 0xba,\n  0x7a, 0x27, 0xe9, 0xec, 0x0a, 0x0f, 0xc5, 0x02, 0x83, 0x0e, 0x16, 0x80, 0xba, 0x7b, 0x5d, 0x3f, 0x90, 0x72, 0x67, 0xa7,\n  0x22, 0x0e, 0x4a, 0x74, 0xe4, 0x85, 0x00, 0xe5, 0x08, 0x1c, 0x8f, 0x82, 0x80, 0x72, 0xa4, 0x0e, 0x45, 0x41, 0x40, 0x39,\n  0x62, 0x07, 0x21, 0x60, 0xa0, 0x1c, 0xb9, 0x03, 0x90, 0x10, 0x50, 0x0e, 0x00, 0x3f, 0x4e, 0xe8, 0xe1, 0x3a, 0x8c, 0xc3,\n  0xf5, 0x18, 0xe2, 0xe9, 0x2c, 0x8f, 0xd4, 0x62, 0x0b, 0xa4, 0xd8, 0x3f, 0x4f, 0x58, 0x5d, 0x27, 0xf0, 0xba, 0x53, 0x5d,\n  0x29, 0x80, 0x74, 0xa7, 0x80, 0xe9, 0x4c, 0x81, 0x80, 0xfd, 0x3d, 0x61, 0x41, 0xba, 0x7b, 0xe6, 0x1b, 0xa5, 0x50, 0x7e,\n  0x9f, 0x10, 0xa0, 0x0d, 0x22, 0xc4, 0x6e, 0x9f, 0x31, 0xf4, 0x0a, 0x0f, 0xd2, 0xb0, 0x14, 0x03, 0x20, 0x37, 0x01, 0xc1,\n  0xc7, 0xe9, 0xfa, 0x0a, 0x0d, 0xd4, 0x70, 0x18, 0x6e, 0x95, 0xe9, 0xfa, 0x8e, 0x31, 0x40, 0x1a, 0x45, 0x88, 0xdd, 0x47,\n  0x39, 0xf4, 0x0a, 0x0f, 0xd2, 0xc5, 0x14, 0x03, 0x20, 0x37, 0x01, 0xc5, 0x43, 0xf5, 0x02, 0x02, 0x83, 0x75, 0x1e, 0xc6,\n  0x1b, 0xa5, 0xa4, 0x7e, 0xa3, 0xe4, 0x50, 0x06, 0x91, 0x62, 0x37, 0x51, 0xfa, 0x7d, 0x02, 0x83, 0xf4, 0xb6, 0x85, 0x00,\n  0xc8, 0x0d, 0xc3, 0x75, 0x21, 0x20, 0x80, 0x71, 0xf8, 0x1c, 0xf1, 0x74, 0x1c, 0x83, 0xa2, 0x03, 0x9c, 0x81, 0x40, 0xb0,\n  0x01, 0xcc, 0x38, 0x3a, 0x83, 0x30, 0xba, 0x91, 0x11, 0x80, 0x74, 0x46, 0x8b, 0x91, 0x83, 0x00, 0xe8, 0x90, 0x37, 0x50,\n  0x72, 0x28, 0x37, 0x50, 0xb4, 0x28, 0x17, 0x44, 0xef, 0x2a, 0x80, 0xe8, 0x96, 0x3f, 0x50, 0x7e, 0x28, 0x3f, 0x50, 0xc0,\n  0x28, 0x16, 0x60, 0x72, 0xac, 0x2e, 0x5b, 0xf2, 0xc4, 0xc3, 0x72, 0xc8, 0xfd, 0x42, 0x39, 0x87, 0xe8, 0xaa, 0x14, 0x0b,\n  0x10, 0xb3, 0x1f, 0x49, 0xf9, 0x74, 0x7d, 0x00, 0xe8, 0x75, 0xe8, 0x7c, 0x07, 0x13, 0x74, 0x2f, 0xa4, 0x0e, 0xa7, 0xcc,\n  0x4e, 0xa4, 0xd0, 0x0e, 0x80, 0xc0, 0x61, 0xd4, 0xfa, 0x89, 0xd4, 0x9b, 0x81, 0xc5, 0xc0, 0xc0, 0x2d, 0x21, 0x6b, 0x01,\n  0xcd, 0x98, 0x3a, 0x85, 0xf0, 0xba, 0x93, 0xd1, 0x86, 0x18, 0x07, 0x45, 0xd9, 0xfa, 0x86, 0x80, 0x74, 0x0d, 0x74, 0x39,\n  0x1f, 0xa8, 0x42, 0x13, 0xa9, 0x46, 0x3f, 0x52, 0x82, 0x2e, 0x94, 0x08, 0xfd, 0x49, 0xf0, 0xba, 0x52, 0x81, 0x74, 0xab,\n  0xfa, 0x55, 0xa0, 0xe9, 0x59, 0x81, 0xd2, 0xae, 0x03, 0x01, 0xfa, 0x85, 0xb1, 0x41, 0xba, 0x94, 0x73, 0x0d, 0xd2, 0xbd,\n  0x3f, 0x52, 0x94, 0x28, 0x03, 0x48, 0xb1, 0x1b, 0xa9, 0x4e, 0x3e, 0x81, 0x41, 0xfa, 0x58, 0xa2, 0x80, 0x64, 0x06, 0xe0,\n  0x38, 0x38, 0xfd, 0x43, 0xb8, 0xa0, 0xdd, 0x4a, 0xe9, 0x86, 0xe9, 0x69, 0x1f, 0xa9, 0x60, 0x14, 0x01, 0xa4, 0x58, 0x8d,\n  0xd4, 0xb2, 0x1f, 0x40, 0xa0, 0xfd, 0x2d, 0xa1, 0x40, 0x32, 0x03, 0x70, 0xdd, 0x4b, 0x80, 0x20, 0x1c, 0x58, 0x03, 0xa2,\n  0x84, 0x1d, 0x17, 0x20, 0x72, 0x0f, 0xa9, 0xd7, 0x13, 0xa9, 0x76, 0x03, 0xa3, 0x10, 0x1c, 0x80, 0x0b, 0x10, 0xb8, 0xd8,\n  0x07, 0x3e, 0x40, 0xe3, 0x90, 0xb9, 0x4a, 0x38, 0x0e, 0x8f, 0x81, 0x71, 0xf0, 0x0e, 0x8f, 0xa1, 0x72, 0x4c, 0x2e, 0x4a,\n  0x85, 0xc9, 0x70, 0xb9, 0x32, 0x38, 0xe1, 0x72, 0x94, 0x2e, 0x90, 0x60, 0x5d, 0x21, 0x1e, 0x90, 0xd8, 0xba, 0x43, 0xbd,\n  0x21, 0xd1, 0x40, 0xba, 0x43, 0xdd, 0x21, 0xc1, 0x74, 0x87, 0x7a, 0x43, 0xa2, 0x81, 0x60, 0x17, 0x48, 0x8b, 0xa4, 0x44,\n  0x26, 0x81, 0x65, 0x05, 0x02, 0xc4, 0x26, 0xe1, 0x74, 0x8a, 0x3a, 0x43, 0xc2, 0x74, 0x87, 0x84, 0xda, 0x2e, 0x91, 0x5f,\n  0x48, 0xb0, 0x4e, 0x02, 0x2e, 0x91, 0x1f, 0x48, 0x8c, 0x4e, 0x04, 0x2a, 0x16, 0x41, 0x38, 0x40, 0xba, 0x45, 0xbd, 0x22,\n  0x71, 0x74, 0x8d, 0x3a, 0x45, 0x22, 0xe1, 0x01, 0x50, 0xba, 0x46, 0x9d, 0x22, 0xc1, 0x70, 0x90, 0xb8, 0x67, 0x0d, 0x14,\n  0x0b, 0x10, 0x9c, 0x44, 0x2e, 0x20, 0xe9, 0x18, 0x8b, 0x85, 0xf4, 0x8e, 0x85, 0x02, 0xe9, 0x1e, 0x74, 0x8f, 0x04, 0xa2,\n  0xa1, 0x38, 0xa4, 0x5d, 0x23, 0x8d, 0xa2, 0xe9, 0x1f, 0xf1, 0x10, 0xa0, 0x5d, 0x23, 0xce, 0x92, 0x20, 0x9c, 0x04, 0x5c,\n  0x2f, 0xa4, 0x80, 0x28, 0x16, 0x21, 0x38, 0xc8, 0x5c, 0x3f, 0x8c, 0x45, 0xd2, 0x4a, 0xe2, 0xf1, 0x40, 0xb8, 0xcf, 0x89,\n  0xc5, 0xc4, 0xbc, 0x68, 0x28, 0x16, 0x01, 0x38, 0xe8, 0x5c, 0x53, 0xb8, 0x5c, 0x6d, 0xd2, 0x54, 0x14, 0x0b, 0x8a, 0xb8,\n  0xa8, 0x5d, 0x24, 0xde, 0x04, 0x28, 0x16, 0x01, 0x39, 0x04, 0x2e, 0x92, 0xcf, 0x13, 0x0b, 0x83, 0xf4, 0x96, 0x05, 0x02,\n  0xe4, 0x07, 0x49, 0x70, 0x5c, 0x50, 0x15, 0x09, 0xc8, 0x91, 0x71, 0x6f, 0x49, 0x6c, 0x5d, 0x25, 0xfe, 0x93, 0x08, 0xa0,\n  0x5c, 0x41, 0xc8, 0xa1, 0x72, 0x33, 0x8f, 0xc5, 0x02, 0xc0, 0x27, 0x24, 0x45, 0xc8, 0xfe, 0x47, 0x8b, 0x91, 0xbc, 0x8e,\n  0x14, 0x0b, 0xa4, 0xdb, 0xc8, 0x31, 0x72, 0x47, 0xa4, 0xd4, 0x28, 0x16, 0x01, 0x39, 0x32, 0x2e, 0x93, 0x97, 0x1e, 0x89,\n  0xb4, 0x5c, 0x99, 0xe4, 0x50, 0xba, 0x4e, 0xbd, 0x26, 0xe1, 0x40, 0xb0, 0x09, 0xca, 0x01, 0x71, 0xa7, 0x26, 0xc5, 0xc9,\n  0x0e, 0x49, 0x8a, 0x05, 0xca, 0x2e, 0x93, 0xd0, 0xb9, 0x39, 0xc9, 0x61, 0x40, 0xb0, 0x09, 0xca, 0x81, 0x74, 0x9d, 0xf9,\n  0x4e, 0x2e, 0x4c, 0x72, 0x94, 0x50, 0x2e, 0x53, 0x72, 0x48, 0x5c, 0x99, 0xe9, 0x42, 0x8a, 0x05, 0x80, 0x4e, 0x58, 0x0b,\n  0x95, 0x9d, 0x28, 0x71, 0x34, 0x8b, 0x91, 0xfc, 0x18, 0x50, 0x27, 0x2d, 0x45, 0xca, 0x7e, 0x94, 0x38, 0x9b, 0x85, 0xc9,\n  0xee, 0x94, 0x30, 0x9a, 0x05, 0x42, 0x72, 0xec, 0x5c, 0xad, 0xe5, 0x98, 0x9c, 0x5e, 0x2e, 0x94, 0x7f, 0x4a, 0x58, 0x5c,\n  0x92, 0xe5, 0x28, 0xa0, 0x58, 0x04, 0xe6, 0x08, 0x5c, 0xbd, 0xe5, 0xd0, 0x9c, 0x0c, 0x5d, 0x29, 0x3e, 0x59, 0x8b, 0x98,\n  0x1e, 0x56, 0x0a, 0x05, 0x80, 0x4e, 0x62, 0x45, 0xc8, 0x0e, 0x37, 0x17, 0x2d, 0xfa, 0x54, 0x22, 0xe6, 0x1f, 0x98, 0x71,\n  0x40, 0xb0, 0x09, 0xcc, 0x78, 0xb9, 0x67, 0xcb, 0xe1, 0x39, 0x81, 0x17, 0x2d, 0x79, 0x8d, 0x17, 0x2e, 0x79, 0x8a, 0x14,\n  0x0b, 0x00, 0x9c, 0xcb, 0x0b, 0xa5, 0x51, 0xcc, 0x18, 0x9c, 0x76, 0x2e, 0x56, 0x74, 0xaa, 0x84, 0xe4, 0xe0, 0xa8, 0x4e,\n  0x67, 0x05, 0xcc, 0xd7, 0x33, 0x02, 0xe6, 0x73, 0x99, 0x81, 0x40, 0xb9, 0x8c, 0xe9, 0x57, 0x09, 0xc6, 0xe2, 0xa1, 0x39,\n  0xa3, 0x17, 0x4a, 0xf3, 0x98, 0xa1, 0x73, 0x39, 0xd2, 0xb3, 0x14, 0x0b, 0x97, 0x5c, 0xba, 0x17, 0x32, 0xdc, 0xca, 0x0a,\n  0x05, 0x80, 0x4e, 0x6a, 0xc5, 0xd2, 0xc0, 0xe6, 0x74, 0x5c, 0xae, 0x0b, 0x9a, 0xbe, 0x96, 0x20, 0xb9, 0xac, 0xe6, 0x48,\n  0x50, 0x2c, 0x02, 0x73, 0x64, 0x2e, 0x67, 0xf9, 0x86, 0x13, 0x95, 0x22, 0xe6, 0x6f, 0x9a, 0x31, 0x71, 0x80, 0x54, 0x27,\n  0x37, 0x02, 0xe6, 0xcf, 0xa5, 0x9a, 0x2e, 0x18, 0x17, 0x33, 0xdd, 0x2d, 0x31, 0x73, 0x6f, 0xcc, 0x78, 0xa0, 0x58, 0x04,\n  0xe6, 0xfc, 0x5c, 0xdf, 0x73, 0x6e, 0x27, 0x33, 0xc2, 0xe9, 0x6d, 0x73, 0x72, 0x2e, 0x6f, 0xba, 0x5b, 0x62, 0x81, 0x60,\n  0x13, 0x9c, 0x61, 0x73, 0x71, 0xce, 0x08, 0xb9, 0x04, 0x17, 0x38, 0x7c, 0xe3, 0x8b, 0x9c, 0x1e, 0x96, 0xf0, 0xa0, 0x58,\n  0x04, 0xe7, 0x34, 0x5c, 0xcb, 0xf2, 0x84, 0x5d, 0x2d, 0xce, 0x48, 0x8a, 0x04, 0xe7, 0x44, 0x5c, 0xe6, 0xf3, 0x7c, 0x2e,\n  0x53, 0x85, 0xcd, 0xd7, 0x4b, 0xa0, 0x4e, 0x27, 0x15, 0x09, 0xce, 0xb8, 0xba, 0x5d, 0xdd, 0x2e, 0x91, 0x73, 0x79, 0xd2,\n  0xe7, 0x14, 0x0b, 0x9c, 0x1e, 0x97, 0x98, 0xa8, 0x54, 0x27, 0x3b, 0xc2, 0xe7, 0x77, 0xa5, 0xee, 0x2e, 0x25, 0x0b, 0x9d,\n  0xbe, 0x73, 0x44, 0xe6, 0x54, 0x54, 0x27, 0x3c, 0x82, 0xe7, 0x23, 0x9d, 0x61, 0x74, 0xbf, 0x39, 0xe4, 0x14, 0x0b, 0x9c,\n  0xbe, 0x97, 0xf0, 0xba, 0x5f, 0xbc, 0xde, 0x0a, 0x05, 0x80, 0x4e, 0x7b, 0x05, 0xd2, 0xfe, 0xe7, 0x6c, 0x4e, 0x4e, 0x0b,\n  0x9e, 0x6e, 0x7a, 0x85, 0xc7, 0x61, 0x50, 0x9c, 0xf9, 0x0b, 0x9f, 0x0e, 0x98, 0x38, 0x9a, 0xc5, 0xcf, 0x7f, 0x3c, 0x62,\n  0xe9, 0x86, 0x74, 0xc2, 0x85, 0x02, 0xc0, 0x27, 0x3f, 0x22, 0xe7, 0x83, 0x9f, 0x71, 0x38, 0x50, 0xba, 0x62, 0x9d, 0x31,\n  0x01, 0x73, 0xf5, 0xd3, 0x0e, 0x14, 0x0b, 0x00, 0x9d, 0x00, 0x02, 0xe7, 0x9f, 0x9e, 0xd1, 0x72, 0x78, 0x2e, 0x80, 0x1e,\n  0x80, 0x11, 0x71, 0x18, 0x54, 0x27, 0x40, 0x30, 0xb9, 0xda, 0xe9, 0x8e, 0x89, 0xcf, 0x50, 0xba, 0x01, 0x3a, 0x62, 0xe2,\n  0x71, 0x28, 0xa8, 0x4e, 0x80, 0xc1, 0x73, 0xc7, 0xcd, 0x98, 0xb9, 0x79, 0xce, 0x08, 0xa0, 0x4e, 0x81, 0x01, 0x73, 0xfb,\n  0xcf, 0xa0, 0x9c, 0x92, 0x17, 0x40, 0x27, 0x3c, 0xc2, 0x73, 0x12, 0x2a, 0x13, 0xa0, 0x58, 0x5d, 0x32, 0xde, 0x80, 0x31,\n  0x72, 0x94, 0x2e, 0x7f, 0xf9, 0xff, 0x17, 0x4c, 0xaf, 0xa0, 0x60, 0x50, 0x2c, 0x02, 0x74, 0x0e, 0x8b, 0xa0, 0x03, 0x01,\n  0x73, 0xe5, 0xd0, 0x3a, 0x2e, 0x99, 0xc7, 0x40, 0xd0, 0xa0, 0x58, 0x04, 0xe8, 0x23, 0x17, 0x40, 0x57, 0x40, 0xf8, 0xb9,\n  0x44, 0x17, 0x40, 0x97, 0x4c, 0xe8, 0x5c, 0xb9, 0x0a, 0x84, 0xe8, 0x29, 0x17, 0x40, 0xc7, 0x4d, 0x00, 0x4e, 0x80, 0x11,\n  0x74, 0xd0, 0xba, 0x67, 0x42, 0xe1, 0x41, 0x50, 0x9d, 0x05, 0xe2, 0xe8, 0x1e, 0xe8, 0x16, 0x17, 0x4c, 0xff, 0xa6, 0x7e,\n  0x28, 0x17, 0x38, 0xfc, 0xf4, 0x8a, 0x04, 0xe8, 0x35, 0x17, 0x41, 0x6f, 0x4d, 0x1c, 0x5d, 0x06, 0x3d, 0x05, 0x02, 0x81,\n  0x74, 0xd3, 0x7a, 0x0d, 0x84, 0xe7, 0xb4, 0x54, 0x27, 0x41, 0xe0, 0xba, 0x6a, 0x7d, 0x06, 0xe2, 0x71, 0xe8, 0xba, 0x0a,\n  0xfa, 0x0e, 0x44, 0xe2, 0x01, 0x50, 0x9d, 0x08, 0x42, 0xe0, 0xfd, 0x02, 0x82, 0xe9, 0xad, 0x74, 0x15, 0x0b, 0x9d, 0x40,\n  0xa8, 0x4e, 0x84, 0x71, 0x74, 0xd7, 0xba, 0x0e, 0x44, 0xe9, 0xae, 0x0b, 0xa1, 0x13, 0xa0, 0x74, 0x5c, 0x4e, 0x15, 0x09,\n  0xd0, 0x9a, 0x2e, 0x9a, 0xff, 0x41, 0x08, 0xb9, 0x94, 0x0b, 0xa6, 0xd1, 0xd3, 0x68, 0x17, 0x4d, 0x8b, 0xa1, 0x30, 0x50,\n  0x2c, 0x02, 0x74, 0x2a, 0x0b, 0xa6, 0xd3, 0xd3, 0x66, 0x13, 0x9b, 0x81, 0x74, 0x2a, 0xf4, 0x29, 0x09, 0xd0, 0xa8, 0x2a,\n  0x13, 0xa1, 0x68, 0x5d, 0x08, 0x5d, 0x04, 0xe2, 0xe8, 0x5a, 0xe9, 0xb8, 0x0b, 0xa0, 0x28, 0x2a, 0x13, 0xa1, 0x7c, 0x5d,\n  0x37, 0x1e, 0x85, 0x11, 0x3a, 0x09, 0x85, 0xd0, 0x49, 0xce, 0x58, 0xa0, 0x4e, 0x86, 0x41, 0x74, 0xdc, 0xfa, 0x18, 0x05,\n  0xd0, 0x8e, 0x17, 0x4d, 0xe3, 0xa1, 0x78, 0x5c, 0xcb, 0x05, 0x42, 0x74, 0x35, 0x0b, 0xa1, 0x47, 0xa0, 0xf8, 0x4e, 0x61,\n  0xc5, 0xce, 0xd7, 0x34, 0x62, 0x81, 0x3a, 0x1b, 0xc5, 0xd0, 0x87, 0xd0, 0xce, 0x2e, 0x81, 0x40, 0xba, 0x18, 0xfa, 0x18,\n  0xc5, 0xd0, 0x8a, 0x15, 0x09, 0xd0, 0xea, 0x2e, 0x9c, 0x77, 0x42, 0x48, 0x9d, 0x0c, 0x42, 0xe6, 0x93, 0x9e, 0x51, 0x40,\n  0x9d, 0x0f, 0x42, 0xe7, 0x8b, 0x9b, 0xf1, 0x65, 0xcd, 0x20, 0xa0, 0x4e, 0x87, 0xe1, 0x74, 0x29, 0x74, 0x3d, 0x09, 0xcd,\n  0xe8, 0xba, 0x1e, 0xfa, 0x19, 0x04, 0xe3, 0x81, 0x50, 0x9d, 0x10, 0x82, 0xe9, 0xc9, 0xf4, 0x3f, 0x89, 0xd0, 0x70, 0x2e,\n  0x87, 0xee, 0x87, 0xe1, 0x74, 0x3f, 0xf4, 0x3a, 0x0a, 0x05, 0x80, 0x4e, 0x88, 0xb1, 0x74, 0x44, 0xf4, 0x43, 0x0b, 0xa1,\n  0x78, 0x2e, 0x87, 0xfe, 0x88, 0xc1, 0x72, 0xac, 0x2a, 0x13, 0xa2, 0x44, 0x5d, 0x08, 0x9c, 0xf6, 0x8b, 0xa2, 0x2b, 0xa7,\n  0x56, 0x2e, 0x57, 0x05, 0x42, 0x74, 0x4b, 0x0b, 0xa0, 0x47, 0xa7, 0x58, 0x2e, 0x88, 0xfe, 0x87, 0xb1, 0x71, 0x18, 0x54,\n  0x27, 0x44, 0xd8, 0x1d, 0x20, 0x10, 0x66, 0x06, 0xd0, 0x38, 0x20, 0x1c, 0x30, 0x0e, 0x23, 0x03, 0x8a, 0x00, 0xe2, 0xe0,\n  0x38, 0xd4, 0x0e, 0x3b, 0x03, 0x90, 0x40, 0x72, 0x20, 0x0e, 0x47, 0x01, 0xc9, 0x50, 0x39, 0x3a, 0x07, 0x29, 0x00, 0xe5,\n  0x50, 0x1c, 0xb1, 0x03, 0x97, 0x20, 0x73, 0x00, 0x07, 0x30, 0xe0, 0x73, 0x1c, 0x07, 0x32, 0xa0, 0x73, 0x3a, 0x07, 0x34,\n  0x80, 0x73, 0x52, 0x07, 0x36, 0x00, 0x73, 0x6e, 0x07, 0x37, 0xe0, 0x73, 0x8e, 0x07, 0x39, 0xc0, 0x73, 0xae, 0x07, 0x3b,\n  0xc0, 0x73, 0xcc, 0x07, 0x3d, 0xa0, 0x73, 0xe4, 0x07, 0x3f, 0x40, 0x74, 0x01, 0x01, 0xd0, 0x14, 0x07, 0x40, 0x88, 0x1d,\n  0x03, 0x20, 0x74, 0x11, 0x01, 0xd0, 0x54, 0x07, 0x41, 0x88, 0x1d, 0x07, 0x20, 0x74, 0x20, 0x01, 0xd0, 0x90, 0x07, 0x42,\n  0x80, 0x1d, 0x0a, 0xe0, 0x74, 0x2e, 0x81, 0xd0, 0xcc, 0x07, 0x43, 0x78, 0x1d, 0x0e, 0xe0, 0x74, 0x40, 0x01, 0xd1, 0x12,\n  0x07, 0x44, 0x88, 0x1d, 0x13, 0x40, 0x74, 0x51, 0x81, 0xd1, 0x5a, 0x07, 0x45, 0xa8, 0x1d, 0x18, 0x00, 0x74, 0x65, 0x81,\n  0xd1, 0xb2, 0x07, 0x4f, 0xe4, 0x2e, 0xa0, 0x40, 0x2e, 0x9f, 0x2f, 0x48, 0xf0, 0x0e, 0x9e, 0xf9, 0xba, 0x49, 0xe7, 0xe9,\n  0x28, 0x0a, 0x00, 0xe9, 0xf1, 0x8b, 0x11, 0xba, 0xa9, 0x13, 0x0f, 0x05, 0x00, 0x74, 0xfa, 0x4d, 0xd2, 0xc0, 0x3f, 0x4b,\n  0x04, 0x50, 0x07, 0x4f, 0xb4, 0x58, 0x85, 0xac, 0x6e, 0x96, 0x29, 0xfa, 0x58, 0xc2, 0x80, 0x3a, 0x7e, 0x66, 0xe9, 0x2e,\n  0x9f, 0xa4, 0xbc, 0x28, 0x03, 0xa7, 0xee, 0x2c, 0x46, 0xe9, 0x1e, 0x9f, 0xa4, 0x7c, 0x28, 0x03, 0xa7, 0xf8, 0x2e, 0x92,\n  0xe7, 0x49, 0x54, 0x0e, 0x9f, 0xf0, 0xa8, 0x5a, 0x02, 0xe0, 0x40, 0x71, 0x28, 0x1d, 0x41, 0xb8, 0x1d, 0x42, 0x50, 0x1d,\n  0x4e, 0xd8, 0x1d, 0x5c, 0xa8, 0x5d, 0x5f, 0xd8, 0xdd, 0x42, 0x40, 0x9d, 0x42, 0x41, 0xba, 0xb9, 0x51, 0x3a, 0x84, 0x73,\n  0x75, 0x3f, 0x42, 0xea, 0x9c, 0x89, 0x29, 0xa2, 0x20, 0x6b, 0xfd, 0x45, 0x83, 0x30, 0x32, 0x7e, 0x3b, 0x3a, 0xb6, 0x2d,\n  0x00, 0x7e, 0xa5, 0xfb, 0xbd, 0x7f, 0x18, 0x1d, 0x4b, 0xa6, 0x34, 0x91, 0xd5, 0x86, 0x93, 0x69, 0xb3, 0xa5, 0x97, 0x83,\n  0x00, 0xc4, 0x1b, 0x80, 0x33, 0x06, 0x81, 0xd5, 0x43, 0x04, 0xea, 0xa0, 0x58, 0x47, 0xb8, 0xe2, 0x3c, 0x48, 0x98, 0x86,\n  0xff, 0xdf, 0xbf, 0x88, 0x0d, 0xc1, 0xd1, 0xe5, 0x6a, 0x80, 0x96, 0xf0, 0xbf, 0x90, 0x6f, 0xcc, 0xe9, 0x7c, 0x79, 0xa7,\n  0x1c, 0x46, 0x79, 0xe4, 0x74, 0xf8, 0x06, 0x01, 0x80, 0x1d, 0x54, 0xc0, 0x4e, 0xaa, 0x4c, 0xf4, 0x39, 0x81, 0x40, 0xea,\n  0xaa, 0x82, 0x75, 0x54, 0xa7, 0xa1, 0xd8, 0x05, 0x03, 0xaa, 0xbc, 0x09, 0xd5, 0x5b, 0x9e, 0x87, 0x80, 0x81, 0x40, 0xea,\n  0xb3, 0x02, 0x75, 0x58, 0xe7, 0xa1, 0xe0, 0xc0, 0x50, 0x3a, 0xad, 0xb0, 0x9d, 0x56, 0xb9, 0xe8, 0x78, 0x58, 0x14, 0x0e,\n  0x2a, 0x0b, 0xa5, 0x47, 0xd2, 0x9d, 0x14, 0x1f, 0x00, 0xf1, 0x08, 0x14, 0x0e, 0x32, 0x1f, 0xab, 0x50, 0x30, 0xf0, 0x50,\n  0x2c, 0x47, 0xcc, 0x3c, 0x54, 0x05, 0x03, 0xab, 0x09, 0xea, 0x8c, 0x01, 0x00, 0xe3, 0xf0\n};\n\nconst size_t sizeof_ctx8Pruned = sizeof(ctx8Pruned);\nconst unsigned char ctx8Pruned_witness[] = \"\";\n\n\nconst size_t sizeof_ctx8Pruned_witness = 0;\n\n/* The commitment Merkle root of the above ctx8Pruned Simplicity expression. */\nconst uint32_t ctx8Pruned_cmr[] = {\n  0x7f11746fu, 0xb68fdaedu, 0x3cadda80u, 0xc7cd0245u, 0xa341b927u, 0xe98e60f8u, 0x745dc441u, 0xe11ce1a3u\n};\n\n/* The identity hash of the root of the above ctx8Pruned Simplicity expression. */\nconst uint32_t ctx8Pruned_ihr[] = {\n  0x8e8742acu, 0x27f42d29u, 0xd87f5229u, 0x02bc0ae2u, 0xbcfc1298u, 0x1641a2ddu, 0x77091830u, 0xb79bf12du\n};\n\n/* The annotated Merkle root of the above ctx8Pruned Simplicity expression. */\nconst uint32_t ctx8Pruned_amr[] = {\n  0x6ee37b0cu, 0x66d30684u, 0x7f3c8290u, 0xbbd9e65fu, 0x30576a3au, 0x904cae07u, 0x932c3790u, 0x92a8310du\n};\n\n/* The cost of the above ctx8Pruned Simplicity expression in milli weight units. */\nconst ubounded ctx8Pruned_cost = 274149781;\n"
  },
  {
    "path": "C/ctx8Pruned.h",
    "content": "#ifndef SIMPLICITY_CTX8PRUNED_H\n#define SIMPLICITY_CTX8PRUNED_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\n *      (ctx8Init &&& scribe (toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn vector16 >>> ctx8Finalize) >>>\n *     eq >>> verify\n */\nextern const unsigned char ctx8Pruned[];\nextern const size_t sizeof_ctx8Pruned;\nextern const unsigned char ctx8Pruned_witness[];\nextern const size_t sizeof_ctx8Pruned_witness;\n\n/* The commitment Merkle root of the above ctx8Pruned Simplicity expression. */\nextern const uint32_t ctx8Pruned_cmr[];\n\n/* The identity hash of the root of the above ctx8Pruned Simplicity expression. */\nextern const uint32_t ctx8Pruned_ihr[];\n\n/* The annotated Merkle root of the above ctx8Pruned Simplicity expression. */\nextern const uint32_t ctx8Pruned_amr[];\n\n/* The cost of the above ctx8Pruned Simplicity expression in milli weight units. */\nextern const ubounded ctx8Pruned_cost;\n\n#endif\n"
  },
  {
    "path": "C/ctx8Unpruned.c",
    "content": "#include \"ctx8Unpruned.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\n *      (ctx8Init &&& scribe (toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn vector16 >>> ctx8Finalize) >>>\n *     eq >>> verify\n */\nconst unsigned char ctx8Unpruned[] = {\n  0xeb, 0x1a, 0x49, 0x20, 0x40, 0x82, 0xe0, 0x2c, 0x02, 0x98, 0x8a, 0x05, 0x88, 0x58, 0xe2, 0x2c, 0x42, 0x9a, 0x45, 0x02,\n  0xc4, 0x2d, 0x3a, 0x45, 0xb7, 0x21, 0x40, 0xb7, 0xec, 0x17, 0x00, 0xd8, 0x28, 0x16, 0x01, 0x68, 0x0b, 0x80, 0x70, 0x11,\n  0x70, 0x00, 0xb7, 0x69, 0x14, 0x0b, 0x66, 0xf1, 0x70, 0x5e, 0x0a, 0x27, 0x02, 0x15, 0x0b, 0x10, 0xb5, 0x05, 0xc1, 0xf8,\n  0x38, 0x9c, 0x0c, 0x5c, 0x37, 0x88, 0x04, 0xe0, 0x42, 0xa1, 0x70, 0xce, 0x20, 0x16, 0x41, 0x6c, 0xe1, 0x82, 0x81, 0x62,\n  0x17, 0x12, 0x71, 0x40, 0xb8, 0x00, 0x5b, 0x38, 0xa4, 0x50, 0x2d, 0x3c, 0x46, 0x2e, 0x25, 0xe2, 0x81, 0x40, 0xb0, 0x0b,\n  0x48, 0x5c, 0x10, 0x2e, 0x25, 0xe3, 0x11, 0x71, 0x3f, 0x00, 0x14, 0x0b, 0x8a, 0x38, 0xb0, 0x5c, 0x37, 0x81, 0x8a, 0x05,\n  0x80, 0x5c, 0x41, 0xc5, 0x42, 0xe1, 0x5c, 0x72, 0x28, 0x17, 0x0e, 0xe0, 0x82, 0xe2, 0x9e, 0x30, 0x14, 0x0b, 0x00, 0xb4,\n  0x05, 0xc7, 0x3c, 0x62, 0x2e, 0x29, 0xe2, 0x21, 0x40, 0xb8, 0xd7, 0x90, 0x62, 0xe3, 0xee, 0x40, 0x8b, 0x8a, 0x02, 0xa1,\n  0x62, 0x17, 0x1e, 0xe0, 0x2e, 0x2c, 0xe2, 0xc1, 0x40, 0xb9, 0x0f, 0x98, 0xb8, 0xb7, 0x8a, 0x85, 0x02, 0xc0, 0x2d, 0x01,\n  0x70, 0x10, 0xb8, 0x84, 0x4e, 0x4a, 0x93, 0x92, 0xc4, 0xe4, 0xb9, 0x39, 0x30, 0x4e, 0x4c, 0x93, 0x93, 0x42, 0x81, 0x60,\n  0x16, 0x41, 0x68, 0x0b, 0x50, 0x5c, 0x9d, 0xe4, 0xe8, 0x81, 0x02, 0x05, 0xc9, 0xde, 0x44, 0x8b, 0x94, 0x5c, 0x8f, 0x14,\n  0x0b, 0x88, 0x39, 0x40, 0x2e, 0x50, 0xf2, 0x78, 0x50, 0x2c, 0x02, 0xe5, 0x2f, 0x28, 0x84, 0x09, 0x88, 0xb9, 0x27, 0xc4,\n  0xe2, 0xe4, 0x2f, 0x28, 0x45, 0x02, 0xc0, 0x2d, 0x01, 0x71, 0xe7, 0x12, 0x8b, 0x92, 0x9c, 0xa5, 0x13, 0x8c, 0x85, 0x42,\n  0xe4, 0xe7, 0x2a, 0x45, 0xc9, 0x6e, 0x4c, 0x0a, 0x05, 0xca, 0xbe, 0x4f, 0x8b, 0x93, 0x41, 0x50, 0xb3, 0x0b, 0x60, 0x5c,\n  0xb1, 0xe5, 0x70, 0xb9, 0x7b, 0xc7, 0x22, 0x81, 0x72, 0xd3, 0x96, 0x02, 0xe5, 0xcf, 0x28, 0xc5, 0x02, 0xc0, 0x2e, 0x58,\n  0x70, 0xb1, 0x73, 0x09, 0xcb, 0x91, 0x40, 0xb9, 0x82, 0xe4, 0xf8, 0xb9, 0x41, 0xcb, 0xf1, 0x40, 0xb0, 0x0b, 0x40, 0x5c,\n  0xbd, 0xe5, 0x70, 0xb9, 0x4b, 0xcc, 0x00, 0xa0, 0x5c, 0xac, 0xe5, 0xd8, 0xb9, 0x6f, 0xc4, 0xe2, 0x81, 0x60, 0x17, 0x30,\n  0xfc, 0x54, 0x2e, 0x47, 0xf3, 0x26, 0x28, 0x17, 0x31, 0xbc, 0xb3, 0x17, 0x31, 0x1c, 0xc1, 0x8a, 0x05, 0x80, 0x5a, 0x02,\n  0xe0, 0x01, 0x71, 0x00, 0x5c, 0x78, 0x17, 0x20, 0x42, 0xe5, 0xe7, 0x26, 0x85, 0xcc, 0x8f, 0x2e, 0x05, 0x02, 0xe5, 0xd7,\n  0x31, 0xc2, 0x73, 0x04, 0x2a, 0x17, 0x31, 0x9c, 0xcc, 0x0b, 0x99, 0x9e, 0x67, 0x85, 0x02, 0xe5, 0xaf, 0x18, 0x0a, 0x05,\n  0x90, 0x5c, 0xc1, 0xf3, 0x24, 0x27, 0x34, 0xc2, 0xe6, 0x7b, 0x95, 0x02, 0x72, 0x20, 0x54, 0x2e, 0x69, 0x39, 0xa8, 0x13,\n  0x94, 0xa2, 0xe6, 0x7b, 0x9a, 0x21, 0x73, 0x5d, 0xcc, 0x80, 0xa0, 0x58, 0x05, 0x98, 0x5b, 0x42, 0xe1, 0x44, 0x18, 0x83,\n  0x0e, 0x16, 0x03, 0x64, 0x83, 0x0e, 0x16, 0x03, 0x6b, 0x41, 0x87, 0x0b, 0x01, 0xb8, 0x02, 0x0c, 0x38, 0x58, 0x10, 0x61,\n  0x87, 0xcc, 0x50, 0x83, 0x8c, 0x3e, 0xc1, 0x42, 0x0e, 0x30, 0xfc, 0x04, 0x50, 0x83, 0x8c, 0x3f, 0x06, 0x14, 0x20, 0xe3,\n  0x0f, 0xc2, 0xc5, 0x08, 0x38, 0xc3, 0xf1, 0x00, 0xa0, 0xfc, 0x44, 0x51, 0x44, 0xe2, 0xa0, 0xc0, 0x32, 0x20, 0xc3, 0x05,\n  0x80, 0xf8, 0x1b, 0x8c, 0x85, 0x07, 0xe3, 0x42, 0x92, 0x40, 0xa8, 0xa2, 0x71, 0xf8, 0x60, 0x1a, 0x47, 0xe0, 0x06, 0xe1,\n  0x82, 0x82, 0x83, 0x88, 0x1c, 0x08, 0x0e, 0x22, 0x20, 0xc3, 0x05, 0x80, 0xf8, 0x1b, 0x91, 0xc2, 0x83, 0xf2, 0x40, 0xa4,\n  0x90, 0x48, 0x28, 0x16, 0x22, 0x89, 0xc9, 0xd0, 0xc0, 0x35, 0x8f, 0xc0, 0x8d, 0xc7, 0x42, 0x82, 0x83, 0x88, 0x1c, 0x10,\n  0x0e, 0x40, 0x10, 0x61, 0x82, 0xc0, 0x7c, 0x0d, 0xca, 0xc1, 0x41, 0xf9, 0x5c, 0x52, 0x48, 0x24, 0x25, 0x14, 0x0b, 0x00,\n  0xb3, 0x14, 0x82, 0x03, 0x40, 0xdc, 0x3f, 0x05, 0x37, 0x26, 0xc5, 0x05, 0x07, 0x10, 0x38, 0x38, 0x1c, 0xa1, 0x20, 0xc3,\n  0x05, 0x80, 0xf8, 0x1b, 0x80, 0x0a, 0x0f, 0xc0, 0x8a, 0x49, 0x04, 0x84, 0xa4, 0xc0, 0x50, 0x2c, 0x02, 0xc8, 0x2d, 0x22,\n  0x90, 0x40, 0x68, 0x1c, 0x00, 0x7e, 0x0e, 0x6e, 0x5f, 0x0a, 0x0a, 0x0e, 0x20, 0x70, 0x90, 0x39, 0x84, 0x20, 0xc3, 0x05,\n  0x80, 0xf8, 0x1b, 0x80, 0x0a, 0x0f, 0xc0, 0x8a, 0x49, 0x04, 0x84, 0xa4, 0xc0, 0x98, 0x8a, 0x05, 0x80, 0x59, 0x05, 0xa0,\n  0x2d, 0x62, 0x90, 0x40, 0x68, 0x1c, 0x08, 0x7e, 0x12, 0x6e, 0x68, 0xc5, 0x05, 0x07, 0x10, 0x38, 0x58, 0x1c, 0xd4, 0x90,\n  0x71, 0x82, 0xc0, 0x90, 0x3a, 0x09, 0x12, 0x50, 0x9c, 0xe4, 0xa0, 0xc3, 0xf3, 0x98, 0x90, 0x3a, 0x0a, 0x05, 0x42, 0xc4,\n  0x6e, 0x72, 0xcf, 0xce, 0x60, 0xa0, 0xe3, 0x6b, 0x3f, 0x3a, 0x26, 0x1e, 0x0a, 0x0e, 0x16, 0x43, 0x73, 0xa2, 0x7e, 0x74,\n  0x85, 0x07, 0x1f, 0x9d, 0x63, 0x0f, 0x05, 0x07, 0x0b, 0x85, 0x0d, 0xce, 0xb1, 0xf9, 0xd7, 0x14, 0x1c, 0x6e, 0x20, 0x3f,\n  0x3b, 0x86, 0x1e, 0x0a, 0x0e, 0x16, 0x44, 0x18, 0x61, 0xe0, 0xa0, 0xe3, 0x71, 0x69, 0xf3, 0x30, 0xf0, 0x50, 0x70, 0xb2,\n  0x20, 0xc3, 0x0f, 0x05, 0x07, 0x1b, 0x8e, 0x8f, 0x99, 0x87, 0x82, 0x83, 0x85, 0x90, 0xdc, 0x81, 0x30, 0xf0, 0x50, 0x71,\n  0xb9, 0x0c, 0x7e, 0x43, 0x98, 0x78, 0x28, 0x38, 0x59, 0x12, 0x41, 0xc7, 0xe4, 0x80, 0x60, 0xe2, 0xe4, 0x70, 0x71, 0x1c,\n  0x1c, 0x42, 0xe4, 0xc6, 0xb3, 0xf4, 0x6e, 0x1f, 0xa3, 0x80, 0x30, 0x0c, 0x07, 0x07, 0x70, 0xe0, 0xde, 0x00, 0x70, 0x68,\n  0x5b, 0x00, 0xe1, 0x01, 0x71, 0x00, 0x5c, 0x47, 0xc6, 0x20, 0x60, 0x2e, 0x1e, 0x3f, 0x14, 0x1f, 0x88, 0xcd, 0xca, 0xb1,\n  0x40, 0xb0, 0x03, 0x20, 0x35, 0x01, 0xc6, 0x01, 0x71, 0xc0, 0xfc, 0x7c, 0x71, 0xf4, 0x9b, 0x91, 0xc2, 0x80, 0x34, 0x0b,\n  0x11, 0xf7, 0x1f, 0x41, 0xb9, 0x0e, 0x28, 0x16, 0x00, 0x64, 0x06, 0xe0, 0x39, 0x1a, 0x17, 0x25, 0x47, 0xe4, 0xd9, 0xc7,\n  0xe3, 0xe3, 0x74, 0x20, 0x0a, 0x00, 0xd0, 0x2c, 0x47, 0xe4, 0x19, 0xf4, 0x1b, 0x94, 0x82, 0x81, 0x60, 0x06, 0x40, 0x6e,\n  0x03, 0x95, 0x41, 0x72, 0xc8, 0x7e, 0x84, 0xd3, 0x8f, 0xc9, 0xa3, 0x74, 0x2a, 0x8a, 0x00, 0xd0, 0x2c, 0x47, 0xe4, 0xf9,\n  0xf4, 0x1b, 0xa1, 0x58, 0x50, 0x2c, 0x00, 0xc8, 0x0d, 0xc0, 0x73, 0x0a, 0x17, 0x31, 0x83, 0xf4, 0x31, 0x1c, 0x7e, 0x5b,\n  0x9b, 0xa1, 0xa8, 0x50, 0x06, 0x81, 0x62, 0x3f, 0x2f, 0x0f, 0xa0, 0xdd, 0x0d, 0x62, 0x81, 0x60, 0x06, 0x40, 0x6e, 0x03,\n  0x99, 0xf0, 0xb9, 0xa7, 0x1f, 0xa1, 0xdc, 0xe3, 0xf3, 0x28, 0x6e, 0x87, 0xf1, 0x40, 0x1a, 0x05, 0x88, 0xfc, 0xcc, 0x9f,\n  0x41, 0xba, 0x20, 0x05, 0x02, 0xc0, 0x0c, 0x80, 0xdc, 0x07, 0x37, 0x40, 0x73, 0x84, 0x31, 0x9d, 0x10, 0xce, 0x72, 0x16,\n  0x79, 0xff, 0xdb, 0xe3, 0x4c, 0xfe, 0x6b, 0xe9, 0xcd, 0xcd, 0x38, 0x72, 0x42, 0x1a, 0x13, 0xfb, 0xb7, 0x23, 0x13, 0x42,\n  0x98, 0x44, 0xb4, 0xef, 0xcd, 0x84, 0xc5, 0xc3, 0xd0, 0x40, 0x05, 0x1c, 0x7e, 0x7e, 0xce, 0x37, 0x3b, 0xa2, 0x83, 0x73,\n  0xfe, 0x92, 0x0b, 0x05, 0x02, 0xb4, 0x50, 0x2c, 0x31, 0x15, 0x0a, 0x85, 0x71, 0x16, 0x18, 0x0a, 0x05, 0x80, 0x5a, 0xf5,\n  0x88, 0x16, 0x80, 0xb5, 0x6d, 0x13, 0x40, 0xa8, 0x59, 0x90, 0x28, 0x49, 0x05, 0x82, 0x81, 0x48, 0x28, 0x16, 0x38, 0x89,\n  0x80, 0xa8, 0x57, 0x11, 0x31, 0x15, 0x0b, 0x4e, 0x42, 0x05, 0xb3, 0x68, 0x9b, 0x04, 0xd2, 0x2c, 0x02, 0xcc, 0x6e, 0x8b,\n  0xa3, 0x73, 0xde, 0x61, 0xc7, 0x0b, 0x11, 0x39, 0xfe, 0x13, 0xa3, 0x18, 0x0e, 0x47, 0x01, 0xc8, 0xc0, 0x62, 0x37, 0x39,\n  0x46, 0x0b, 0xa3, 0x1c, 0x6e, 0x8c, 0x23, 0x73, 0xdc, 0x7e, 0x74, 0x45, 0x06, 0xe8, 0xc1, 0x37, 0x3c, 0xe7, 0xe7, 0x54,\n  0x50, 0x6e, 0x78, 0xcd, 0xce, 0xf1, 0xf9, 0xd9, 0x14, 0x1b, 0x9d, 0xa3, 0x73, 0xaa, 0x7e, 0x77, 0x45, 0x00, 0x73, 0xd8,\n  0x2c, 0x46, 0xe7, 0x84, 0xfc, 0xf0, 0x8a, 0x00, 0xe7, 0xc4, 0xfc, 0xef, 0x0a, 0x05, 0xb3, 0x48, 0x20, 0x1a, 0x40, 0xe0,\n  0x01, 0x70, 0x41, 0xb9, 0xf9, 0x3e, 0xc1, 0x40, 0x19, 0x1f, 0x9f, 0xd3, 0x85, 0x46, 0xe0, 0x46, 0xc0, 0xfd, 0x00, 0x42,\n  0x81, 0x60, 0x06, 0x40, 0x6e, 0x03, 0x89, 0x02, 0xe2, 0x81, 0xba, 0x3a, 0xcd, 0xcf, 0xe9, 0xc2, 0xa0, 0x33, 0x3f, 0x47,\n  0x81, 0xc2, 0xa3, 0x66, 0x6c, 0x0f, 0xd1, 0xea, 0x28, 0x16, 0x00, 0x64, 0x06, 0xf0, 0x38, 0xe4, 0x2e, 0x3d, 0x1b, 0xa4,\n  0x02, 0x6e, 0x80, 0xe3, 0x85, 0x40, 0x66, 0x7e, 0x90, 0x31, 0xc2, 0xa3, 0x66, 0x6c, 0x0f, 0xd2, 0x0b, 0x14, 0x0b, 0x00,\n  0x32, 0x03, 0x78, 0xfd, 0x21, 0x50, 0x40, 0x39, 0x20, 0x17, 0x41, 0x87, 0x48, 0x60, 0xdd, 0x20, 0xf3, 0xf4, 0x85, 0x05,\n  0x06, 0xe9, 0x09, 0x1f, 0xa4, 0x24, 0x28, 0x03, 0xa4, 0x34, 0x7e, 0x83, 0xa1, 0x41, 0xba, 0x42, 0xe6, 0xe8, 0x3d, 0x3f,\n  0x48, 0x68, 0x50, 0x07, 0x48, 0x84, 0x58, 0x85, 0xab, 0x40, 0x20, 0x1a, 0x40, 0xe0, 0x03, 0xf4, 0x28, 0x8a, 0x0d, 0xd2,\n  0x29, 0x30, 0xdb, 0x0f, 0xd2, 0x2c, 0x14, 0x01, 0xa4, 0x58, 0x8d, 0xd2, 0x30, 0x3e, 0x81, 0x41, 0xf8, 0x20, 0xa0, 0x19,\n  0x01, 0xb8, 0x6e, 0x91, 0xe0, 0x20, 0x1c, 0x4c, 0x07, 0x14, 0x0d, 0xd0, 0x72, 0x61, 0x82, 0xe9, 0x21, 0x8d, 0xd2, 0x3e,\n  0x37, 0x43, 0x51, 0xfa, 0x20, 0x45, 0x06, 0xe9, 0x1e, 0x9b, 0xa1, 0x8c, 0xfd, 0x10, 0xa2, 0x83, 0x74, 0x2f, 0x9b, 0xa1,\n  0x68, 0xfd, 0x11, 0x22, 0x83, 0x74, 0x2b, 0x1b, 0xa1, 0x44, 0xfd, 0x11, 0xa2, 0x83, 0x74, 0x27, 0x1b, 0xa1, 0x24, 0xfd,\n  0x12, 0x22, 0x80, 0x3a, 0x17, 0xc5, 0x88, 0x5d, 0x05, 0x5d, 0x05, 0x80, 0x74, 0x31, 0x09, 0xd0, 0x5a, 0x2d, 0x39, 0x02,\n  0x01, 0x90, 0x1b, 0x42, 0xe0, 0x21, 0x74, 0x11, 0x74, 0x12, 0x01, 0x80, 0x9d, 0x04, 0xa6, 0xe8, 0x35, 0x37, 0x41, 0x79,\n  0xfa, 0x1b, 0x85, 0x02, 0xc0, 0x0c, 0x80, 0xd4, 0x07, 0x0d, 0x0b, 0x88, 0x42, 0xe8, 0x1e, 0xe8, 0x20, 0x03, 0x01, 0x3a,\n  0x08, 0x4d, 0xd0, 0xcc, 0x6e, 0x82, 0xb3, 0xf4, 0x43, 0x8a, 0x05, 0x80, 0x19, 0x01, 0xa8, 0x0e, 0x2d, 0x0b, 0x8c, 0x42,\n  0xe8, 0x1a, 0xe8, 0x1c, 0x03, 0x01, 0x3a, 0x07, 0x4d, 0xd0, 0xfc, 0x6e, 0x82, 0x73, 0xf4, 0x9d, 0x45, 0x02, 0xc0, 0x0c,\n  0x80, 0xd4, 0x07, 0x1e, 0x85, 0xc8, 0x10, 0xba, 0x05, 0xba, 0x06, 0x00, 0xc0, 0x4e, 0x81, 0x93, 0x74, 0x4b, 0x9b, 0xa0,\n  0x8c, 0xfd, 0x28, 0x61, 0x40, 0xb0, 0x03, 0x20, 0x35, 0x00, 0xe8, 0x19, 0x07, 0x23, 0x86, 0xe8, 0xa4, 0x17, 0x4a, 0x4c,\n  0x6e, 0x94, 0x71, 0xba, 0x2e, 0x8f, 0xd1, 0x54, 0x28, 0x37, 0x4a, 0x34, 0xdd, 0x16, 0x67, 0xe8, 0xae, 0x14, 0x1b, 0xa2,\n  0xbc, 0xdd, 0x15, 0x47, 0xe8, 0xb2, 0x14, 0x01, 0xd2, 0x96, 0x16, 0x23, 0x74, 0x5b, 0x1f, 0xa2, 0xd8, 0x50, 0x07, 0x4a,\n  0x6c, 0xfd, 0x16, 0x62, 0x81, 0x6c, 0xd2, 0x08, 0x06, 0x90, 0x38, 0x00, 0x5c, 0x10, 0x6e, 0x95, 0x19, 0xf6, 0x0a, 0x00,\n  0xc8, 0xfd, 0x2a, 0x73, 0x85, 0x46, 0xe0, 0x46, 0xc0, 0xfd, 0x2a, 0xc1, 0x40, 0xb0, 0x03, 0x20, 0x37, 0x01, 0xc4, 0x81,\n  0x71, 0x40, 0xdd, 0x2b, 0x83, 0x74, 0x69, 0x1c, 0x2a, 0x03, 0x33, 0xf4, 0xaf, 0x4e, 0x15, 0x1b, 0x33, 0x60, 0x7e, 0x96,\n  0x10, 0xa0, 0x58, 0x01, 0x90, 0x1b, 0xc7, 0xe9, 0x66, 0x02, 0x01, 0xc7, 0x61, 0x74, 0x7a, 0x74, 0xb3, 0xcd, 0xd2, 0xcb,\n  0x3f, 0x4b, 0x2c, 0x50, 0x07, 0x4b, 0x4c, 0xfd, 0x1f, 0x22, 0x83, 0x74, 0xb4, 0x0d, 0xd1, 0xf8, 0x7e, 0x96, 0x98, 0xa0,\n  0x0e, 0x96, 0xd0, 0xb1, 0x0b, 0x56, 0x80, 0x40, 0x34, 0x8d, 0xd2, 0xdf, 0x04, 0x03, 0x81, 0x01, 0xc1, 0x00, 0xe4, 0x90,\n  0xfd, 0x1a, 0xc7, 0x1c, 0x27, 0x4b, 0x9c, 0xfd, 0x2e, 0x21, 0x74, 0x81, 0x07, 0xe9, 0x6f, 0x8b, 0xa3, 0xe4, 0x7e, 0x8f,\n  0xf1, 0x74, 0x77, 0x0f, 0xd1, 0xe8, 0x2e, 0x8e, 0x40, 0xb9, 0x96, 0xe8, 0xc1, 0x07, 0x33, 0x00, 0x73, 0x2c, 0x06, 0x03,\n  0xf4, 0x7a, 0x0a, 0x0d, 0xd1, 0xfa, 0x61, 0xb9, 0xa2, 0x3f, 0x48, 0x00, 0x50, 0x06, 0x91, 0x62, 0x37, 0x48, 0x10, 0xfa,\n  0x05, 0x07, 0xe6, 0xa8, 0x50, 0x0c, 0x80, 0xdc, 0x07, 0x07, 0x1f, 0xa4, 0x24, 0x28, 0x37, 0x48, 0x6c, 0xc3, 0x73, 0x6e,\n  0x7e, 0x90, 0xf0, 0xa0, 0x0d, 0x22, 0xc4, 0x6e, 0x91, 0x11, 0xf4, 0x0a, 0x0f, 0xcd, 0xf8, 0xa0, 0x19, 0x01, 0xb8, 0x0e,\n  0x2a, 0x1f, 0xa4, 0x60, 0x28, 0x37, 0x4c, 0x38, 0xc3, 0x73, 0x98, 0x7e, 0x98, 0x88, 0xa0, 0x0d, 0x22, 0xc4, 0x6e, 0x98,\n  0xa9, 0xf4, 0x0a, 0x0f, 0xce, 0xa0, 0xa0, 0x19, 0x01, 0xb8, 0x0e, 0x3d, 0x1f, 0xa4, 0x98, 0x28, 0x37, 0x4c, 0x90, 0xc3,\n  0x73, 0xc2, 0x7e, 0x99, 0x38, 0xa0, 0x0d, 0x22, 0xc4, 0x6e, 0x99, 0x59, 0xf4, 0x0a, 0x0f, 0xcf, 0x48, 0xa0, 0x19, 0x01,\n  0xb8, 0x6e, 0x99, 0xb8, 0x20, 0x1c, 0x92, 0x0b, 0xa6, 0x75, 0xd2, 0x59, 0x37, 0x4c, 0xd4, 0xdd, 0x26, 0x13, 0xf4, 0xcc,\n  0xc5, 0x02, 0xe8, 0x1d, 0xe8, 0x1a, 0x07, 0x40, 0xf8, 0x1d, 0x03, 0x40, 0x60, 0x16, 0x81, 0xba, 0x67, 0xe7, 0xe8, 0x29,\n  0x14, 0x01, 0x91, 0xfa, 0x68, 0x67, 0x0a, 0x8d, 0xd0, 0x5e, 0x6c, 0x0f, 0xd3, 0x48, 0x14, 0x0b, 0x00, 0x32, 0x03, 0x70,\n  0xfd, 0x35, 0x20, 0x40, 0x38, 0x50, 0x1c, 0x30, 0x2e, 0x59, 0x85, 0xd0, 0x30, 0x37, 0x4d, 0x48, 0xfd, 0x28, 0x23, 0xf4,\n  0xa0, 0x85, 0x02, 0xc0, 0x6e, 0x9a, 0x91, 0xfa, 0x4f, 0xa7, 0xe9, 0x3e, 0x8a, 0x05, 0x80, 0xdd, 0x27, 0x53, 0xf4, 0x9d,\n  0x4f, 0xd2, 0x75, 0x14, 0x0b, 0x01, 0xba, 0x4d, 0xa7, 0xe9, 0x36, 0x9f, 0xa4, 0xda, 0x28, 0x16, 0x03, 0x74, 0x99, 0x8f,\n  0xd2, 0x66, 0x3f, 0x49, 0x98, 0x50, 0x2c, 0x00, 0x74, 0x92, 0x8d, 0xd2, 0x66, 0x3f, 0x49, 0x98, 0xfd, 0x26, 0x61, 0x40,\n  0xb0, 0x01, 0xd2, 0x50, 0x16, 0x60, 0x6e, 0x1b, 0xa4, 0xf4, 0x7e, 0x93, 0xd1, 0xfa, 0x4f, 0x42, 0x81, 0x60, 0x03, 0x31,\n  0x66, 0x07, 0x0b, 0x1b, 0xa5, 0x1e, 0x7e, 0x94, 0x79, 0xfa, 0x51, 0xe2, 0x81, 0x60, 0x03, 0x31, 0x66, 0x07, 0x14, 0x0d,\n  0xd2, 0xa4, 0x3f, 0x4a, 0x90, 0xfd, 0x2a, 0x41, 0x40, 0xb0, 0x01, 0x98, 0xb3, 0x03, 0x8d, 0x46, 0xe9, 0x5b, 0x9f, 0xa5,\n  0x6e, 0x7e, 0x95, 0xb8, 0xa0, 0x58, 0x00, 0xcc, 0x59, 0x81, 0xc8, 0x20, 0x3a, 0x59, 0xc1, 0x74, 0xb2, 0x7a, 0x59, 0xc2,\n  0xe9, 0x68, 0x0f, 0xd2, 0x91, 0x3f, 0x4a, 0x60, 0x30, 0x0e, 0x30, 0x03, 0x8a, 0xe0, 0xa0, 0x1c, 0x70, 0x07, 0x13, 0x41,\n  0x40, 0x39, 0x00, 0x07, 0x10, 0xc1, 0x40, 0x39, 0x10, 0x07, 0x0c, 0x82, 0x80, 0x72, 0x40, 0x0e, 0x0f, 0x05, 0x00, 0xe0,\n  0x61, 0x70, 0x60, 0x1d, 0x1d, 0xc2, 0xe9, 0x6f, 0x8e, 0x03, 0xa3, 0xc4, 0xc3, 0x85, 0xd1, 0xe6, 0x03, 0xa3, 0xd4, 0xdd,\n  0x1f, 0xc7, 0x0a, 0x8d, 0xc4, 0x26, 0x1c, 0x2c, 0x06, 0xe9, 0x76, 0x9f, 0xa5, 0xea, 0x28, 0x3f, 0x14, 0x0a, 0x0c, 0x38,\n  0x5a, 0x07, 0xe9, 0xe6, 0x8b, 0xa5, 0xee, 0x07, 0x26, 0xba, 0x55, 0xc0, 0xe4, 0xaf, 0x4a, 0xbc, 0x50, 0x0e, 0x51, 0x01,\n  0xc9, 0x08, 0x28, 0x07, 0x2a, 0x80, 0xe4, 0x5c, 0x14, 0x03, 0x96, 0x40, 0x72, 0x1a, 0x0a, 0x01, 0xcb, 0xa0, 0x39, 0x03,\n  0x05, 0x00, 0xe0, 0x03, 0xf4, 0xb6, 0x0e, 0x13, 0xa7, 0xb8, 0x6e, 0x97, 0x21, 0xfa, 0x7b, 0x02, 0x83, 0xf4, 0xf5, 0x45,\n  0xd1, 0xb4, 0x3f, 0x4b, 0xd4, 0x5d, 0x1d, 0xa1, 0x74, 0x82, 0x3a, 0x40, 0xc0, 0xe9, 0x06, 0x01, 0xd2, 0x07, 0x03, 0x01,\n  0xfa, 0x5e, 0xa2, 0x83, 0x74, 0xbf, 0x8c, 0x37, 0x48, 0x58, 0xfd, 0x30, 0x11, 0x40, 0x1a, 0x45, 0x88, 0xdd, 0x30, 0x53,\n  0xe8, 0x14, 0x1f, 0xa4, 0x3c, 0x28, 0x06, 0x40, 0x6e, 0x03, 0x83, 0x8f, 0xd3, 0x13, 0x14, 0x1b, 0xa7, 0xe2, 0x61, 0xba,\n  0x45, 0x67, 0xe9, 0xfa, 0x0a, 0x00, 0xd2, 0x2c, 0x46, 0xe9, 0xfc, 0x1f, 0x40, 0xa0, 0xfd, 0x23, 0x31, 0x40, 0x32, 0x03,\n  0x70, 0x1c, 0x54, 0x3f, 0x4c, 0xbc, 0x50, 0x6e, 0xa0, 0x1c, 0xc3, 0x74, 0x90, 0x0f, 0xd4, 0x05, 0x0a, 0x00, 0xd2, 0x2c,\n  0x46, 0xea, 0x03, 0x8f, 0xa0, 0x50, 0x7e, 0x92, 0x40, 0xa0, 0x19, 0x01, 0xb8, 0x6e, 0xa0, 0x68, 0x10, 0x0e, 0x40, 0x01,\n  0xcf, 0x27, 0x41, 0xd8, 0x3a, 0x40, 0xfc, 0xe5, 0x0a, 0x05, 0x80, 0x0e, 0x62, 0x41, 0xd3, 0x51, 0x0b, 0xa8, 0x22, 0x18,\n  0x07, 0x49, 0x88, 0x5c, 0x8d, 0x18, 0x07, 0x49, 0x94, 0xdd, 0x35, 0x71, 0x41, 0xb9, 0x46, 0x28, 0x17, 0x49, 0xcb, 0x95,\n  0x80, 0x74, 0x9a, 0xcf, 0xd3, 0x5d, 0x14, 0x1f, 0x95, 0x22, 0x81, 0x66, 0x07, 0x2b, 0x42, 0xe5, 0xcf, 0x2c, 0xcc, 0x37,\n  0x2d, 0x0f, 0xd3, 0x65, 0x30, 0xfd, 0x27, 0xf1, 0x40, 0xb1, 0x0b, 0x31, 0xf4, 0x9f, 0x97, 0x87, 0xd0, 0x0e, 0x8b, 0x0e,\n  0x90, 0x18, 0x38, 0x9b, 0xa1, 0x85, 0x20, 0x75, 0x20, 0xa2, 0x75, 0x08, 0xa0, 0x74, 0x07, 0x03, 0x0e, 0xa4, 0x1c, 0x4e,\n  0xa1, 0x20, 0x0e, 0x2e, 0x06, 0x01, 0x69, 0x0b, 0x58, 0x0e, 0x6d, 0x41, 0xd3, 0x7d, 0x0b, 0xa8, 0x4e, 0x18, 0x61, 0x80,\n  0x74, 0xa4, 0x0f, 0xd3, 0x87, 0x07, 0x40, 0xe7, 0x43, 0xa1, 0xfa, 0x6c, 0x22, 0x75, 0x0a, 0xe6, 0xe9, 0xb6, 0x1f, 0xa8,\n  0x53, 0x14, 0x1f, 0xa8, 0x50, 0x17, 0x44, 0xf0, 0x5d, 0x17, 0x3d, 0x16, 0xe0, 0xe8, 0xbd, 0x03, 0xa2, 0xe0, 0x0c, 0x07,\n  0xe9, 0xbd, 0x8a, 0x0d, 0xd4, 0x2c, 0x98, 0x6e, 0x8c, 0x73, 0xf5, 0x0b, 0x82, 0x80, 0x34, 0x8b, 0x11, 0xba, 0x86, 0x03,\n  0xe8, 0x14, 0x1f, 0xa3, 0x3c, 0x50, 0x0c, 0x80, 0xdc, 0x07, 0x07, 0x1f, 0xa7, 0x2e, 0x28, 0x37, 0x50, 0xde, 0x61, 0xba,\n  0x37, 0x0f, 0xd4, 0x39, 0x0a, 0x00, 0xd2, 0x2c, 0x46, 0xea, 0x1d, 0x8f, 0xa0, 0x50, 0x7e, 0x8e, 0x41, 0x40, 0x32, 0x03,\n  0x70, 0xdd, 0x44, 0x10, 0x20, 0x1c, 0x5a, 0x03, 0xa2, 0x90, 0x1d, 0x1e, 0xa0, 0x72, 0x13, 0xa8, 0xe9, 0x13, 0xa8, 0x88,\n  0x03, 0xa4, 0x98, 0x0e, 0x40, 0x85, 0x88, 0x5c, 0x6e, 0x03, 0x9f, 0x50, 0x71, 0xd0, 0x5c, 0xa6, 0x1c, 0x07, 0x4b, 0x38,\n  0x5c, 0x7e, 0x03, 0xa5, 0xa0, 0x2e, 0x4a, 0x05, 0xc9, 0x60, 0xb9, 0x30, 0x17, 0x26, 0x87, 0x1c, 0x2e, 0x53, 0x05, 0xd2,\n  0xe2, 0x0b, 0xa5, 0xcf, 0xd2, 0xf1, 0x17, 0x4b, 0xcf, 0xa5, 0xe6, 0x28, 0x17, 0x4b, 0xd3, 0xa5, 0xe4, 0x2e, 0x97, 0x9f,\n  0x4b, 0xcc, 0x50, 0x2c, 0x02, 0xe9, 0x7c, 0x74, 0xbe, 0x04, 0xd0, 0x2c, 0xa0, 0xa0, 0x58, 0x84, 0xdc, 0x2e, 0x97, 0xf7,\n  0x4b, 0xd0, 0x4e, 0x97, 0xa0, 0x9b, 0x45, 0xd3, 0x01, 0xe9, 0x81, 0x09, 0xc0, 0x45, 0xd2, 0xf9, 0xe9, 0x7c, 0x89, 0xc0,\n  0x85, 0x42, 0xc8, 0x27, 0x08, 0x17, 0x4c, 0x0f, 0xa5, 0xfa, 0x2e, 0x98, 0x57, 0x4b, 0xfc, 0x5c, 0x20, 0x2a, 0x17, 0x4c,\n  0x2b, 0xa6, 0x04, 0x2e, 0x12, 0x17, 0x0c, 0xe1, 0xa2, 0x81, 0x62, 0x13, 0x88, 0x85, 0xc4, 0x1d, 0x30, 0x71, 0x70, 0xbe,\n  0x98, 0x80, 0xa0, 0x5d, 0x31, 0x2e, 0x98, 0x90, 0x94, 0x54, 0x27, 0x14, 0x8b, 0xa6, 0x1d, 0xb4, 0x5d, 0x31, 0x5e, 0x22,\n  0x14, 0x0b, 0xa6, 0x25, 0xd3, 0x1a, 0x13, 0x80, 0x8b, 0x85, 0xf4, 0xc5, 0x85, 0x02, 0xc4, 0x27, 0x19, 0x0b, 0x87, 0xf1,\n  0x88, 0xba, 0x64, 0x1c, 0x5e, 0x28, 0x17, 0x19, 0xf1, 0x38, 0xb8, 0x97, 0x8d, 0x05, 0x02, 0xc0, 0x27, 0x1d, 0x0b, 0x8a,\n  0x77, 0x0b, 0x8d, 0xba, 0x65, 0x42, 0x81, 0x71, 0x57, 0x15, 0x0b, 0xa6, 0x47, 0xc0, 0x85, 0x02, 0xc0, 0x27, 0x20, 0x85,\n  0xd3, 0x2f, 0xe2, 0x61, 0x70, 0x7e, 0x99, 0x70, 0xa0, 0x5c, 0x80, 0xe9, 0x99, 0x0b, 0x8a, 0x02, 0xa1, 0x39, 0x12, 0x2e,\n  0x2d, 0xe9, 0x98, 0x8b, 0xa6, 0x6b, 0xd3, 0x37, 0x14, 0x0b, 0x88, 0x39, 0x14, 0x2e, 0x46, 0x71, 0xf8, 0xa0, 0x58, 0x04,\n  0xe4, 0x88, 0xb9, 0x1f, 0xc8, 0xf1, 0x72, 0x37, 0x91, 0xc2, 0x81, 0x74, 0xd0, 0xf9, 0x06, 0x2e, 0x48, 0xf4, 0xd0, 0x05,\n  0x02, 0xc0, 0x27, 0x26, 0x45, 0xd3, 0x48, 0xe3, 0xd1, 0x36, 0x8b, 0x93, 0x3c, 0x8a, 0x17, 0x4d, 0x2f, 0xa6, 0x88, 0x28,\n  0x16, 0x01, 0x39, 0x40, 0x2e, 0x34, 0xe4, 0xd8, 0xb9, 0x21, 0xc9, 0x31, 0x40, 0xb9, 0x45, 0xd3, 0x50, 0x17, 0x27, 0x39,\n  0x2c, 0x28, 0x16, 0x01, 0x39, 0x50, 0x2e, 0x9a, 0x6f, 0x29, 0xc5, 0xc9, 0x8e, 0x52, 0x8a, 0x05, 0xca, 0x6e, 0x49, 0x0b,\n  0x93, 0x3d, 0x35, 0xb1, 0x40, 0xb0, 0x09, 0xcb, 0x01, 0x72, 0xb3, 0xa6, 0xba, 0x26, 0x91, 0x72, 0x3f, 0x83, 0x0a, 0x04,\n  0xe5, 0xa8, 0xb9, 0x4f, 0xd3, 0x5d, 0x13, 0x70, 0xb9, 0x3d, 0xd3, 0x5c, 0x13, 0x40, 0xa8, 0x4e, 0x5d, 0x8b, 0x95, 0xbc,\n  0xb3, 0x13, 0x8b, 0xc5, 0xd3, 0x65, 0xe9, 0xb6, 0x0b, 0x92, 0x5c, 0xa5, 0x14, 0x0b, 0x00, 0x9c, 0xc1, 0x0b, 0x97, 0xbc,\n  0xba, 0x13, 0x81, 0x8b, 0xa6, 0xd3, 0xcb, 0x31, 0x73, 0x03, 0xca, 0xc1, 0x40, 0xb0, 0x09, 0xcc, 0x48, 0xb9, 0x01, 0xc6,\n  0xe2, 0xe5, 0xbf, 0x4d, 0xdc, 0x5c, 0xc3, 0xf3, 0x0e, 0x28, 0x16, 0x01, 0x39, 0x8f, 0x17, 0x2c, 0xf9, 0x7c, 0x27, 0x30,\n  0x22, 0xe5, 0xaf, 0x31, 0xa2, 0xe5, 0xcf, 0x31, 0x42, 0x81, 0x60, 0x13, 0x99, 0x61, 0x74, 0xdf, 0xb9, 0x83, 0x13, 0x8e,\n  0xc5, 0xca, 0xce, 0x9c, 0x00, 0x9c, 0x9c, 0x15, 0x09, 0xcc, 0xe0, 0xb9, 0x9a, 0xe6, 0x60, 0x5c, 0xce, 0x73, 0x30, 0x28,\n  0x17, 0x31, 0x9d, 0x38, 0x41, 0x38, 0xdc, 0x54, 0x27, 0x34, 0x62, 0xe9, 0xc9, 0x73, 0x14, 0x2e, 0x67, 0x3a, 0x71, 0x22,\n  0x81, 0x72, 0xeb, 0x97, 0x42, 0xe6, 0x5b, 0x99, 0x41, 0x40, 0xb0, 0x09, 0xcd, 0x58, 0xba, 0x72, 0xdc, 0xce, 0x8b, 0x95,\n  0xc1, 0x73, 0x57, 0xd3, 0x9a, 0x17, 0x35, 0x9c, 0xc9, 0x0a, 0x05, 0x80, 0x4e, 0x6c, 0x85, 0xcc, 0xff, 0x30, 0xc2, 0x72,\n  0xa4, 0x5c, 0xcd, 0xf3, 0x46, 0x2e, 0x30, 0x0a, 0x84, 0xe6, 0xe0, 0x5c, 0xd9, 0xf4, 0xe8, 0xc5, 0xc3, 0x02, 0xe6, 0x7b,\n  0xa7, 0x52, 0x2e, 0x6d, 0xf9, 0x8f, 0x14, 0x0b, 0x00, 0x9c, 0xdf, 0x8b, 0x9b, 0xee, 0x6d, 0xc4, 0xe6, 0x78, 0x5d, 0x3b,\n  0x0e, 0x6e, 0x45, 0xcd, 0xf7, 0x4e, 0xc4, 0x50, 0x2c, 0x02, 0x73, 0x8c, 0x2e, 0x6e, 0x39, 0xc1, 0x17, 0x20, 0x82, 0xe7,\n  0x0f, 0x9c, 0x71, 0x73, 0x83, 0xd3, 0xb4, 0x14, 0x0b, 0x00, 0x9c, 0xe6, 0x8b, 0x99, 0x7e, 0x50, 0x8b, 0xa7, 0x65, 0xc9,\n  0x11, 0x40, 0x9c, 0xe8, 0x8b, 0x9c, 0xde, 0x6f, 0x85, 0xca, 0x70, 0xb9, 0xba, 0xe9, 0xdf, 0x09, 0xc4, 0xe2, 0xa1, 0x39,\n  0xd7, 0x17, 0x4f, 0x13, 0xa7, 0x7e, 0x2e, 0x6f, 0x3a, 0x77, 0xa2, 0x81, 0x73, 0x83, 0xd3, 0xc9, 0x15, 0x0a, 0x84, 0xe7,\n  0x78, 0x5c, 0xee, 0xf4, 0xf3, 0x45, 0xc4, 0xa1, 0x73, 0xb7, 0xce, 0x68, 0x9c, 0xca, 0x8a, 0x84, 0xe7, 0x90, 0x5c, 0xe4,\n  0x73, 0xac, 0x2e, 0x9e, 0x97, 0x3c, 0x82, 0x81, 0x73, 0x97, 0xd3, 0xd4, 0x17, 0x4f, 0x4f, 0x9b, 0xc1, 0x40, 0xb0, 0x09,\n  0xcf, 0x60, 0xba, 0x7a, 0x9c, 0xed, 0x89, 0xc9, 0xc1, 0x73, 0xcd, 0xcf, 0x50, 0xb8, 0xec, 0x2a, 0x13, 0x9f, 0x21, 0x73,\n  0xe1, 0xd3, 0xdd, 0x13, 0x58, 0xb9, 0xef, 0xe7, 0x8c, 0x5d, 0x3e, 0x2e, 0x9f, 0x00, 0xa0, 0x58, 0x04, 0xe7, 0xe4, 0x5c,\n  0xf0, 0x73, 0xee, 0x27, 0x0a, 0x17, 0x4f, 0xab, 0xa7, 0xcc, 0x2e, 0x7e, 0xba, 0x7c, 0x82, 0x81, 0x60, 0x13, 0xa0, 0x00,\n  0x5c, 0xf3, 0xf3, 0xda, 0x2e, 0x4f, 0x05, 0xd0, 0x03, 0xd0, 0x02, 0x2e, 0x23, 0x0a, 0x84, 0xe8, 0x06, 0x17, 0x3b, 0x5d,\n  0x3f, 0x31, 0x39, 0xea, 0x17, 0x40, 0x27, 0x4f, 0xb4, 0x4e, 0x25, 0x15, 0x09, 0xd0, 0x18, 0x2e, 0x78, 0xf9, 0xb3, 0x17,\n  0x2f, 0x39, 0xc1, 0x14, 0x09, 0xd0, 0x20, 0x2e, 0x7f, 0x79, 0xf4, 0x13, 0x92, 0x42, 0xe8, 0x04, 0xe7, 0x98, 0x4e, 0x62,\n  0x45, 0x42, 0x74, 0x0b, 0x0b, 0xa8, 0x03, 0xe8, 0x03, 0x17, 0x29, 0x42, 0xe7, 0xff, 0x9f, 0xf1, 0x75, 0x00, 0x3d, 0x03,\n  0x02, 0x81, 0x60, 0x13, 0xa0, 0x74, 0x5d, 0x00, 0x18, 0x0b, 0x9f, 0x2e, 0x81, 0xd1, 0x75, 0x01, 0xdd, 0x03, 0x42, 0x81,\n  0x60, 0x13, 0xa0, 0x8c, 0x5d, 0x01, 0x5d, 0x03, 0xe2, 0xe5, 0x10, 0x5d, 0x02, 0x5d, 0x40, 0x80, 0xb9, 0x72, 0x15, 0x09,\n  0xd0, 0x52, 0x2e, 0x81, 0x8e, 0xa0, 0x58, 0x4e, 0x80, 0x11, 0x75, 0x03, 0x1d, 0x40, 0x80, 0xb8, 0x50, 0x54, 0x27, 0x41,\n  0x78, 0xba, 0x07, 0xba, 0x05, 0x85, 0xd4, 0x0a, 0xf5, 0x02, 0xa2, 0x81, 0x73, 0x8f, 0xcf, 0x48, 0xa0, 0x4e, 0x83, 0x51,\n  0x74, 0x16, 0xf5, 0x03, 0xa2, 0xe8, 0x31, 0xe8, 0x28, 0x14, 0x0b, 0xa8, 0x23, 0xe8, 0x36, 0x13, 0x9e, 0xd1, 0x50, 0x9d,\n  0x07, 0x82, 0xea, 0x0a, 0x7a, 0x0d, 0xc4, 0xe3, 0xd1, 0x74, 0x15, 0xf4, 0x1c, 0x89, 0xc4, 0x02, 0xa1, 0x3a, 0x10, 0x85,\n  0xc1, 0xfa, 0x05, 0x05, 0xd4, 0x18, 0x74, 0x15, 0x0b, 0x9d, 0x40, 0xa8, 0x4e, 0x84, 0x71, 0x75, 0x06, 0x9d, 0x07, 0x22,\n  0x75, 0x06, 0x42, 0xe8, 0x44, 0xe8, 0x1d, 0x17, 0x13, 0x85, 0x42, 0x74, 0x26, 0x8b, 0xa8, 0x35, 0xe8, 0x21, 0x17, 0x32,\n  0x81, 0x75, 0x07, 0xdd, 0x41, 0xf0, 0xba, 0x83, 0x8e, 0x84, 0xc1, 0x40, 0xb0, 0x09, 0xd0, 0xa8, 0x2e, 0xa0, 0xff, 0xa8,\n  0x3c, 0x13, 0x9b, 0x81, 0x74, 0x2a, 0xf4, 0x29, 0x09, 0xd0, 0xa8, 0x2a, 0x13, 0xa1, 0x68, 0x5d, 0x08, 0x5d, 0x04, 0xe2,\n  0xe8, 0x5a, 0xea, 0x11, 0x85, 0xd0, 0x14, 0x15, 0x09, 0xd0, 0xbe, 0x2e, 0xa1, 0x1f, 0xa1, 0x44, 0x4e, 0x82, 0x61, 0x74,\n  0x12, 0x73, 0x96, 0x28, 0x13, 0xa1, 0x90, 0x5d, 0x42, 0x4f, 0x43, 0x00, 0xba, 0x11, 0xc2, 0xea, 0x13, 0xba, 0x17, 0x85,\n  0xcc, 0xb0, 0x54, 0x27, 0x43, 0x50, 0xba, 0x14, 0x7a, 0x0f, 0x84, 0xe6, 0x1c, 0x5c, 0xed, 0x73, 0x46, 0x28, 0x13, 0xa1,\n  0xbc, 0x5d, 0x08, 0x7d, 0x0c, 0xe2, 0xe8, 0x14, 0x0b, 0xa1, 0x8f, 0xa1, 0x8c, 0x5d, 0x08, 0xa1, 0x50, 0x9d, 0x0e, 0xa2,\n  0xea, 0x19, 0x3a, 0x12, 0x44, 0xe8, 0x62, 0x17, 0x34, 0x9c, 0xf2, 0x8a, 0x04, 0xe8, 0x7a, 0x17, 0x3c, 0x5c, 0xdf, 0x8b,\n  0x2e, 0x69, 0x05, 0x02, 0x74, 0x3f, 0x0b, 0xa1, 0x4b, 0xa1, 0xe8, 0x4e, 0x6f, 0x45, 0xd0, 0xf7, 0xd0, 0xc8, 0x27, 0x1c,\n  0x0a, 0x84, 0xe8, 0x84, 0x17, 0x50, 0xd3, 0xd0, 0xfe, 0x27, 0x41, 0xc0, 0xba, 0x1f, 0xba, 0x1f, 0x85, 0xd0, 0xff, 0xd0,\n  0xe8, 0x28, 0x16, 0x01, 0x3a, 0x22, 0xc5, 0xd1, 0x13, 0xd1, 0x0c, 0x2e, 0x85, 0xe0, 0xba, 0x1f, 0xfa, 0x23, 0x05, 0xca,\n  0xb0, 0xa8, 0x4e, 0x89, 0x11, 0x74, 0x22, 0x73, 0xda, 0x2e, 0x88, 0xae, 0xa2, 0x04, 0x5c, 0xae, 0x0a, 0x84, 0xe8, 0x96,\n  0x17, 0x40, 0x8f, 0x51, 0x04, 0x2e, 0x88, 0xfe, 0x87, 0xb1, 0x71, 0x18, 0x54, 0x27, 0x44, 0xd8, 0x1d, 0x20, 0x20, 0x66,\n  0x06, 0xd0, 0x38, 0x20, 0x1c, 0x30, 0x0e, 0x23, 0x03, 0x8a, 0x00, 0xe2, 0xe0, 0x38, 0xd4, 0x0e, 0x3b, 0x03, 0x90, 0x40,\n  0x72, 0x20, 0x0e, 0x47, 0x01, 0xc9, 0x50, 0x39, 0x3a, 0x07, 0x29, 0x00, 0xe5, 0x50, 0x1c, 0xb1, 0x03, 0x97, 0x20, 0x73,\n  0x00, 0x07, 0x30, 0xe0, 0x73, 0x1c, 0x07, 0x32, 0xa0, 0x73, 0x3a, 0x07, 0x34, 0x80, 0x73, 0x52, 0x07, 0x36, 0x00, 0x73,\n  0x6e, 0x07, 0x37, 0xe0, 0x73, 0x8e, 0x07, 0x39, 0xc0, 0x73, 0xae, 0x07, 0x3b, 0xc0, 0x73, 0xcc, 0x07, 0x3d, 0xa0, 0x73,\n  0xe4, 0x07, 0x3f, 0x40, 0x74, 0x01, 0x01, 0xd0, 0x14, 0x07, 0x40, 0x88, 0x1d, 0x03, 0x20, 0x74, 0x11, 0x01, 0xd0, 0x54,\n  0x07, 0x41, 0x88, 0x1d, 0x07, 0x20, 0x74, 0x20, 0x01, 0xd0, 0x90, 0x07, 0x42, 0x80, 0x1d, 0x0a, 0xe0, 0x74, 0x2e, 0x81,\n  0xd0, 0xcc, 0x07, 0x43, 0x78, 0x1d, 0x0e, 0xe0, 0x74, 0x40, 0x01, 0xd1, 0x12, 0x07, 0x44, 0x88, 0x1d, 0x13, 0x40, 0x74,\n  0x51, 0x81, 0xd1, 0x5a, 0x07, 0x45, 0xa8, 0x1d, 0x18, 0x00, 0x74, 0x65, 0x81, 0xd1, 0xb2, 0x07, 0x51, 0x9e, 0x17, 0x51,\n  0xcc, 0x17, 0x51, 0x77, 0xd2, 0x3d, 0x03, 0xa8, 0xb5, 0x37, 0x49, 0x40, 0xfd, 0x25, 0x11, 0x40, 0x1d, 0x45, 0xc8, 0xb1,\n  0x1b, 0xa9, 0xb1, 0x30, 0xf0, 0x50, 0x07, 0x51, 0x7e, 0x6e, 0x96, 0x19, 0xfa, 0x58, 0x82, 0x80, 0x3a, 0x8c, 0x31, 0x62,\n  0x16, 0xb1, 0xba, 0x59, 0x07, 0xe9, 0x64, 0x8a, 0x00, 0xea, 0x32, 0x4d, 0xd2, 0x5e, 0x3f, 0x49, 0x7c, 0x50, 0x07, 0x51,\n  0x9a, 0x2c, 0x46, 0xe9, 0x1f, 0x1f, 0xa4, 0x7e, 0x28, 0x03, 0xa8, 0xd2, 0x17, 0x49, 0x77, 0xa4, 0xac, 0x07, 0x51, 0xa8,\n  0x2a, 0x16, 0x80, 0xb8, 0x10, 0x1c, 0x4a, 0x07, 0x52, 0x1a, 0x17, 0x52, 0x24, 0x17, 0x53, 0xba, 0x0b, 0xaa, 0xa6, 0x37,\n  0x55, 0x4a, 0x72, 0x45, 0xd5, 0x9d, 0xf5, 0x6c, 0x42, 0xea, 0xc1, 0x82, 0x75, 0x60, 0xc2, 0x75, 0x60, 0xc0, 0xc4, 0x2c,\n  0xc9, 0x20, 0x4e, 0xa8, 0xe1, 0x22, 0xea, 0x77, 0x40, 0x75, 0x31, 0xc6, 0xea, 0x63, 0x8f, 0xd4, 0xc7, 0x8a, 0x0c, 0x3c,\n  0x14, 0x18, 0x78, 0x28, 0x30, 0xf0, 0x50, 0x61, 0xe0, 0xa0, 0xc3, 0xc1, 0x40, 0x3a, 0x5f, 0x21, 0x75, 0x58, 0xc3, 0x85,\n  0xc1, 0x82, 0xea, 0x7f, 0xfa, 0x9f, 0xd0, 0x3a, 0x9a, 0x61, 0x3a, 0xa0, 0x00, 0x75, 0x28, 0x80, 0x62, 0x07, 0x0f, 0x01,\n  0xd5, 0x02, 0x83, 0x89, 0x02, 0x71, 0x5a, 0x0c, 0x0f, 0x52, 0x90, 0x06, 0x01, 0x3a, 0xad, 0x93, 0xf5, 0x5b, 0x40, 0x80,\n  0x71, 0xb0, 0x1d, 0x50, 0xb8, 0x1d, 0x56, 0x50, 0xfd, 0x4f, 0x90, 0xa0, 0x0c, 0x01, 0xd5, 0x69, 0x8f, 0xd5, 0x00, 0x8a,\n  0x00, 0xc0, 0x1d, 0x56, 0xe0, 0xfd, 0x50, 0x78, 0xa0, 0x0c, 0x01, 0xd5, 0x72, 0x8f, 0xd3, 0x1c, 0x14, 0x01, 0x80, 0x38,\n  0x37, 0x56, 0x8c, 0x7e, 0xa5, 0x70, 0x50, 0x2e, 0xab, 0x6c, 0x2e, 0x44, 0x75, 0x69, 0xa2, 0x75, 0x69, 0xa2, 0x75, 0x69,\n  0xa0, 0xe4, 0x60, 0x58, 0x92, 0x2e, 0xab, 0x28, 0x6e, 0xad, 0x4d, 0x20, 0x75, 0x6a, 0xc2, 0xea, 0xba, 0xc6, 0x07, 0x10,\n  0x33, 0x1c, 0x2e, 0xab, 0x1c, 0x6e, 0xad, 0x70, 0x5d, 0x56, 0x18, 0x2e, 0xab, 0xf4, 0x18, 0x0e, 0x17, 0x55, 0x6c, 0x37,\n  0x56, 0xc2, 0x2e, 0xaa, 0xc8, 0x17, 0x56, 0x10, 0x0c, 0x07, 0x0b, 0xaa, 0xa3, 0x1b, 0xab, 0x66, 0x17, 0x55, 0x3e, 0x0b,\n  0xaa, 0x96, 0x06, 0x03, 0x85, 0xd5, 0x46, 0x85, 0xd5, 0xb6, 0x75, 0x6d, 0x86, 0x0b, 0xaa, 0x8a, 0x05, 0xd5, 0x3f, 0x83,\n  0x11, 0xc2, 0xea, 0x9d, 0x82, 0xcf, 0x33, 0x05, 0xd5, 0x39, 0x82, 0xea, 0x99, 0x81, 0x88, 0xc1, 0x38, 0xc8, 0x1c, 0x72,\n  0x07, 0x16, 0x92, 0x40, 0x84, 0x8b, 0xaa, 0x85, 0x1b, 0xab, 0xe3, 0x49, 0x46, 0x07, 0x00, 0x32, 0x18, 0x91, 0x75, 0x55,\n  0x82, 0xf3, 0x04, 0x60, 0x75, 0x81, 0x80, 0xc3, 0x85, 0xa4, 0x2e, 0x06, 0x48, 0xba, 0xad, 0x21, 0xba, 0xa7, 0x20, 0xf0,\n  0x40, 0x28, 0xc4, 0x8b, 0xaa, 0xf1, 0x17, 0xa5, 0xf0, 0x60, 0x78, 0x58, 0x18, 0x0c, 0x38, 0x5a, 0x49, 0x17, 0x56, 0x22,\n  0x49, 0x46, 0x07, 0x89, 0x40, 0xc4, 0x61, 0x79, 0x2e, 0x60, 0x78, 0xa8, 0x0e, 0x4e, 0x0e, 0x16, 0x43, 0x8e, 0x17, 0x01,\n  0x1c, 0x70, 0xb8, 0x8c, 0x60, 0xb9, 0x47, 0xca, 0x31, 0x02, 0xe5, 0x2f, 0x56, 0x9e, 0x2a, 0x15, 0x03, 0x20, 0x3a, 0xa9,\n  0xbe, 0xb0, 0x3a, 0x2e, 0xad, 0x8c, 0x6e, 0xad, 0x78, 0xdd, 0x54, 0x79, 0xfa, 0xa6, 0x81, 0x40, 0x1d, 0x4a, 0x78, 0xb1,\n  0x1b, 0xab, 0x65, 0x3f, 0x4e, 0x24, 0x50, 0x07, 0x52, 0xa8, 0x7e, 0xa5, 0x50, 0x50, 0x6e, 0x9c, 0x71, 0xba, 0x95, 0x73,\n  0xf5, 0x6d, 0xa2, 0x81, 0x60, 0x06, 0x40, 0x6d, 0x1f, 0xab, 0x77, 0x04, 0x03, 0x83, 0x01, 0xd5, 0x59, 0xf5, 0x83, 0x41,\n  0x75, 0x6f, 0x63, 0x75, 0x6e, 0xc6, 0xea, 0xa9, 0xcf, 0xd5, 0x46, 0x8a, 0x00, 0xea, 0x2c, 0x05, 0x88, 0xdd, 0x5b, 0xe9,\n  0xfa, 0x64, 0xc2, 0x80, 0x3a, 0x8b, 0x53, 0xf5, 0x16, 0xa2, 0x83, 0x74, 0xca, 0xcd, 0xd4, 0x5c, 0x1f, 0xab, 0x85, 0x14,\n  0x0b, 0x00, 0x32, 0x03, 0x68, 0xfd, 0x5c, 0x78, 0x20, 0x1c, 0x18, 0x0e, 0x12, 0x30, 0xe1, 0x71, 0xa0, 0x1c, 0xf3, 0x75,\n  0x41, 0xa0, 0x75, 0x59, 0x60, 0xea, 0xb4, 0x7a, 0xc2, 0xa0, 0xba, 0xb9, 0x91, 0xba, 0xb9, 0x43, 0x75, 0x58, 0xa7, 0xea,\n  0xb4, 0x85, 0x00, 0x75, 0x21, 0x42, 0xc4, 0x2e, 0xa8, 0x6f, 0xaa, 0x1d, 0x03, 0xa9, 0x0d, 0x13, 0xaa, 0x1e, 0x37, 0x55,\n  0x72, 0x6e, 0xa8, 0xa0, 0xfd, 0x5d, 0x00, 0xa0, 0x58, 0x01, 0x90, 0x1a, 0x80, 0x75, 0x5b, 0xc0, 0xe0, 0x40, 0x38, 0xcc,\n  0x1c, 0x18, 0x0e, 0x12, 0x17, 0x31, 0xc3, 0xf5, 0x63, 0x46, 0x1b, 0xab, 0x1c, 0x30, 0xc3, 0x75, 0x67, 0xa7, 0x18, 0x61,\n  0xfa, 0xbb, 0x83, 0x8c, 0x30, 0xfd, 0x5d, 0xe8, 0xa0, 0x59, 0x85, 0xb0, 0x2e, 0x00, 0x03, 0xa0, 0x88, 0x1c, 0x10, 0x0e,\n  0x76, 0x40, 0xea, 0xf2, 0x02, 0xeb, 0x05, 0xe3, 0x70, 0x21, 0x38, 0x11, 0xba, 0xbc, 0x81, 0x38, 0x09, 0xb9, 0xf8, 0x17,\n  0x55, 0x64, 0x49, 0x44, 0x81, 0x80, 0x62, 0x0d, 0xc0, 0x19, 0x83, 0x40, 0xea, 0xb1, 0xc2, 0x75, 0x58, 0x49, 0x20, 0xe3,\n  0xe4, 0x18, 0x06, 0x40, 0x75, 0x5b, 0x61, 0x3a, 0xad, 0x64, 0x90, 0x71, 0xf2, 0x0c, 0x03, 0x20, 0x3a, 0xaf, 0x00, 0x9d,\n  0x57, 0x59, 0x39, 0xef, 0x38, 0xf8, 0x86, 0x01, 0x88, 0x1d, 0x58, 0x20, 0x4e, 0xab, 0xfc, 0x9c, 0xd2, 0x9c, 0x7c, 0x43,\n  0x00, 0xc4, 0x0e, 0xac, 0x54, 0x27, 0x56, 0x22, 0x4e, 0x9d, 0x69, 0xc7, 0xc4, 0x30, 0x0c, 0x40, 0xea, 0xc9, 0xc2, 0x75,\n  0x64, 0x47, 0xea, 0x8d, 0xcf, 0x80, 0x60, 0x18, 0x01, 0xc6, 0xc1, 0x74, 0xf4, 0x7a, 0x79, 0x62, 0x83, 0xf4, 0x2a, 0x1f,\n  0x10, 0xc0, 0x30, 0x03, 0x8f, 0xc7, 0xea, 0xe4, 0x0c, 0x3c, 0x14, 0x0b, 0x11, 0x39, 0xe5, 0x38, 0xfa, 0x43, 0x00, 0xc4,\n  0x0e, 0xab, 0xc3, 0xa0, 0xf4, 0x10, 0x0e, 0x47, 0x00\n};\n\nconst size_t sizeof_ctx8Unpruned = sizeof(ctx8Unpruned);\nconst unsigned char ctx8Unpruned_witness[] = \"\";\n\n\nconst size_t sizeof_ctx8Unpruned_witness = 0;\n\n/* The commitment Merkle root of the above ctx8Unpruned Simplicity expression. */\nconst uint32_t ctx8Unpruned_cmr[] = {\n  0x7f11746fu, 0xb68fdaedu, 0x3cadda80u, 0xc7cd0245u, 0xa341b927u, 0xe98e60f8u, 0x745dc441u, 0xe11ce1a3u\n};\n\n/* The identity hash of the root of the above ctx8Unpruned Simplicity expression. */\nconst uint32_t ctx8Unpruned_ihr[] = {\n  0x8e8742acu, 0x27f42d29u, 0xd87f5229u, 0x02bc0ae2u, 0xbcfc1298u, 0x1641a2ddu, 0x77091830u, 0xb79bf12du\n};\n\n/* The annotated Merkle root of the above ctx8Unpruned Simplicity expression. */\nconst uint32_t ctx8Unpruned_amr[] = {\n  0x3e7c69acu, 0xf73edce8u, 0x386c121eu, 0xc3b4d11bu, 0x14923861u, 0xe97ae926u, 0xcccd9f1fu, 0x85a076d5u\n};\n\n/* The cost of the above ctx8Unpruned Simplicity expression in milli weight units. */\nconst ubounded ctx8Unpruned_cost = UBOUNDED_MAX;\n"
  },
  {
    "path": "C/ctx8Unpruned.h",
    "content": "#ifndef SIMPLICITY_CTX8UNPRUNED_H\n#define SIMPLICITY_CTX8UNPRUNED_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\n *      (ctx8Init &&& scribe (toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn vector16 >>> ctx8Finalize) >>>\n *     eq >>> verify\n */\nextern const unsigned char ctx8Unpruned[];\nextern const size_t sizeof_ctx8Unpruned;\nextern const unsigned char ctx8Unpruned_witness[];\nextern const size_t sizeof_ctx8Unpruned_witness;\n\n/* The commitment Merkle root of the above ctx8Unpruned Simplicity expression. */\nextern const uint32_t ctx8Unpruned_cmr[];\n\n/* The identity hash of the root of the above ctx8Unpruned Simplicity expression. */\nextern const uint32_t ctx8Unpruned_ihr[];\n\n/* The annotated Merkle root of the above ctx8Unpruned Simplicity expression. */\nextern const uint32_t ctx8Unpruned_amr[];\n\n/* The cost of the above ctx8Unpruned Simplicity expression in milli weight units. */\nextern const ubounded ctx8Unpruned_cost;\n\n#endif\n"
  },
  {
    "path": "C/dag.c",
    "content": "#include \"dag.h\"\n\n#include <stdbool.h>\n#include \"bounded.h\"\n#include \"precomputed.h\"\n#include \"rsort.h\"\n#include \"sha256.h\"\n#include \"simplicity_alloc.h\"\n#include \"uword.h\"\n\n/* Given a tag for a node, return the SHA-256 hash of its associated CMR tag.\n * This is the \"initial value\" for computing the commitment Merkle root for that expression.\n *\n * Precondition: 'tag' \\notin {HIDDEN, JET, WORD}\n */\nstatic sha256_midstate cmrIV(tag_t tag) {\n  switch (tag) {\n   case COMP: return cmr_compIV;\n   case ASSERTL:\n   case ASSERTR:\n   case CASE: return cmr_caseIV;\n   case PAIR: return cmr_pairIV;\n   case DISCONNECT: return cmr_disconnectIV;\n   case INJL: return cmr_injlIV;\n   case INJR: return cmr_injrIV;\n   case TAKE: return cmr_takeIV;\n   case DROP: return cmr_dropIV;\n   case IDEN: return cmr_idenIV;\n   case UNIT: return cmr_unitIV;\n   case WITNESS: return cmr_witnessIV;\n   /* Precondition violated. */\n   case WORD:\n   case HIDDEN:\n   case JET:\n    break;\n  }\n  SIMPLICITY_UNREACHABLE;\n}\n\n/* Given a tag for a node, return the SHA-256 hash of its associated IMR tag.\n * This is the \"initial value\" for computing the commitment Merkle root for that expression.\n *\n * Precondition: 'tag' \\notin {HIDDEN, JET, WORD}\n */\nstatic sha256_midstate imrIV(tag_t tag) {\n  return DISCONNECT == tag ? imr_disconnectIV\n       : WITNESS == tag ? imr_witnessIV\n       : cmrIV(tag);\n}\n\n/* Given a tag for a node, return the SHA-256 hash of its associated AMR tag.\n * This is the \"initial value\" for computing the annotated Merkle root for that expression.\n *\n * Precondition: 'tag' \\notin {HIDDEN, JET, WORD}\n */\nstatic sha256_midstate amrIV(tag_t tag) {\n  switch (tag) {\n   case COMP: return amr_compIV;\n   case ASSERTL: return amr_assertlIV;\n   case ASSERTR: return amr_assertrIV;\n   case CASE: return amr_caseIV;\n   case PAIR: return amr_pairIV;\n   case DISCONNECT: return amr_disconnectIV;\n   case INJL: return amr_injlIV;\n   case INJR: return amr_injrIV;\n   case TAKE: return amr_takeIV;\n   case DROP: return amr_dropIV;\n   case IDEN: return amr_idenIV;\n   case UNIT: return amr_unitIV;\n   case WITNESS: return amr_witnessIV;\n   /* Precondition violated. */\n   case HIDDEN:\n   case JET:\n   case WORD:\n    break;\n  }\n  SIMPLICITY_UNREACHABLE;\n}\n\n/* Given the identity hash of a jet specification, return the CMR for a jet that implements that specification.\n *\n * Precondition: uint32_t ih[8]\n */\nstatic sha256_midstate mkJetCMR(uint32_t *ih, uint_fast64_t weight) {\n  sha256_midstate result = jetIV;\n  uint32_t block[16] = {0};\n  block[6] = (uint32_t)(weight >> 32);\n  block[7] = (uint32_t)weight;\n  memcpy(&block[8], ih, sizeof(uint32_t[8]));\n  simplicity_sha256_compression(result.s, block);\n\n  return result;\n}\n\n/* Compute the CMR of a jet of scribe(v) : ONE |- TWO^(2^n) that outputs a given bitstring.\n *\n * Precondition: 2^n == value->len\n */\nsha256_midstate simplicity_computeWordCMR(const bitstring* value, size_t n) {\n  /* 'stack' is an array of 30 hashes consisting of 8 'uint32_t's each. */\n  uint32_t stack[8*30] = {0};\n  uint32_t *stack_ptr = stack;\n  sha256_midstate ih = identityIV;\n  simplicity_assert(n < 32);\n  simplicity_assert((size_t)1 << n == value->len);\n  /* Pass 1: Compute the CMR for the expression that writes 'value'.\n   * This expression consists of deeply nested PAIRs of expressions that write one bit each.\n   */\n  /* stack[0..7] (8 bytes) is kept as all zeros for later.\n   * We start the stack_ptr at the second item.\n   */\n  if (n < 3) {\n    stack_ptr += 8;\n    size_t i;\n    switch(n) {\n     case 0: i = getBit(value, 0); break;\n     case 1: i = 2 + ((1U * getBit(value, 0) << 1) | getBit(value, 1)); break;\n     case 2: i = 6 + ((1U * getBit(value, 0) << 3) | (1U * getBit(value, 1) << 2) | (1U * getBit(value, 2) << 1) | getBit(value, 3)); break;\n    }\n    memcpy(stack_ptr, &word_cmr[i], sizeof(uint32_t[8]));\n  } else {\n    for (size_t i = 0; i < value->len >> 3; ++i) {\n      /* stack_ptr == stack + 8*<count of the number of set bits in the value i> */\n      stack_ptr += 8;\n      memcpy(stack_ptr, &word_cmr[22 + getByte(value, 8*i)], sizeof(uint32_t[8]));\n      /* This inner for loop runs in amortized constant time. */\n      for (size_t j = i; j & 1; j = j >> 1) {\n        sha256_midstate pair = cmrIV(PAIR);\n        stack_ptr -= 8;\n        simplicity_sha256_compression(pair.s, stack_ptr);\n        memcpy(stack_ptr, pair.s, sizeof(uint32_t[8]));\n      }\n    }\n  }\n  /* value->len is a power of 2.*/\n  simplicity_assert(stack_ptr == stack + 8);\n\n  /* Pass 2: Compute the identity hash for the expression by adding the type roots of ONE and TWO^(2^n) to the CMR. */\n  simplicity_sha256_compression(ih.s, stack);\n  memcpy(&stack[0], word_type_root[0].s, sizeof(uint32_t[8]));\n  memcpy(&stack[8], word_type_root[n+1].s, sizeof(uint32_t[8]));\n  simplicity_sha256_compression(ih.s, stack);\n\n  /* Pass 3: Compute the jet's CMR from the specificion's identity hash. */\n  return mkJetCMR(ih.s, ((uint_fast64_t)1 << n));\n}\n\n/* Given a well-formed dag[i + 1], such that for all 'j', 0 <= 'j' < 'i',\n * 'dag[j].cmr' is the CMR of the subexpression denoted by the slice\n *\n *     (dag_nodes[j + 1])dag,\n *\n * then we set the value of 'dag[i].cmr' to be the CMR of the subexpression denoted by 'dag'.\n *\n * Precondition: dag_node dag[i + 1] and 'dag' is well-formed.\n *               dag[i].'tag' \\notin {HIDDEN, JET, WORD}\n */\nvoid simplicity_computeCommitmentMerkleRoot(dag_node* dag, const uint_fast32_t i) {\n  uint32_t block[16] = {0};\n  size_t j = 8;\n\n  simplicity_assert(HIDDEN != dag[i].tag);\n  simplicity_assert(JET != dag[i].tag);\n  simplicity_assert(WORD != dag[i].tag);\n\n  dag[i].cmr = cmrIV(dag[i].tag);\n\n  /* Hash the child sub-expression's CMRs (if there are any children). */\n  switch (dag[i].tag) {\n   case COMP:\n   case ASSERTL:\n   case ASSERTR:\n   case CASE:\n   case PAIR:\n    memcpy(block + j, dag[dag[i].child[1]].cmr.s, sizeof(uint32_t[8]));\n    j = 0;\n    /*@fallthrough@*/\n   case DISCONNECT: /* Only the first child is used in the CMR. */\n   case INJL:\n   case INJR:\n   case TAKE:\n   case DROP:\n    memcpy(block + j, dag[dag[i].child[0]].cmr.s, sizeof(uint32_t[8]));\n    simplicity_sha256_compression(dag[i].cmr.s, block);\n   case IDEN:\n   case UNIT:\n   case WITNESS:\n   case HIDDEN:\n   case JET:\n   case WORD:\n    break;\n  }\n}\n\n/* Computes the identity hash roots of every subexpression in a well-typed 'dag' with witnesses.\n * 'ihr[i]' is set to the identity hash of the root of the subexpression 'dag[i]'.\n * When 'HIDDEN == dag[i].tag', then 'ihr[i]' is instead set to a hidden root hash for that hidden node.\n *\n * Precondition: sha256_midstate ihr[len];\n *               dag_node dag[len] and 'dag' is well-typed with 'type_dag' and contains witnesses.\n */\nstatic void computeIdentityHashRoots(sha256_midstate* ihr, const dag_node* dag, const type* type_dag, const uint_fast32_t len) {\n  /* Pass 1 */\n  for (size_t i = 0; i < len; ++i) {\n    uint32_t block[16] = {0};\n    size_t j = 8;\n\n    /* For jets, the first pass identity Merkle root is the same as their commitment Merkle root. */\n    ihr[i] = HIDDEN == dag[i].tag ? dag[i].cmr\n           : JET == dag[i].tag ? dag[i].cmr\n           : WORD == dag[i].tag ? dag[i].cmr\n           : imrIV(dag[i].tag);\n    switch (dag[i].tag) {\n     case WITNESS:\n      simplicity_sha256_bitstring(block, &dag[i].compactValue);\n      memcpy(block + 8, type_dag[WITNESS_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(ihr[i].s, block);\n      break;\n     case COMP:\n     case ASSERTL:\n     case ASSERTR:\n     case CASE:\n     case PAIR:\n     case DISCONNECT:\n      memcpy(block + j, ihr[dag[i].child[1]].s, sizeof(uint32_t[8]));\n      j = 0;\n      /*@fallthrough@*/\n     case INJL:\n     case INJR:\n     case TAKE:\n     case DROP:\n      memcpy(block + j, ihr[dag[i].child[0]].s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(ihr[i].s, block);\n     case IDEN:\n     case UNIT:\n     case HIDDEN:\n     case JET:\n     case WORD:\n      break;\n    }\n  }\n\n  /* Pass 2 */\n  for (size_t i = 0; i < len; ++i) {\n    uint32_t block[16] = {0};\n\n    if (HIDDEN == dag[i].tag) {\n      memcpy(block + 8, ihr[i].s, sizeof(uint32_t[8]));\n      ihr[i] = hiddenIV;\n      simplicity_sha256_compression(ihr[i].s, block);\n    } else {\n      memcpy(block + 8, ihr[i].s, sizeof(uint32_t[8]));\n      ihr[i] = identityIV;\n      simplicity_sha256_compression(ihr[i].s, block);\n      memcpy(block, type_dag[dag[i].sourceType].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[dag[i].targetType].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(ihr[i].s, block);\n    }\n  }\n}\n\n/* Given a well-typed dag representing a Simplicity expression, compute the annotated Merkle roots of all subexpressions.\n * For all 'i', 0 <= 'i' < 'len', 'analysis[i].annotatedMerkleRoot' will be the AMR of the subexpression denoted by the slice\n *\n *     (dag_nodes[i + 1])dag.\n *\n * The AMR of the overall expression will be 'analysis[len - 1].annotatedMerkleRoot'.\n *\n * Precondition: analyses analysis[len];\n *               dag_node dag[len] and 'dag' has witness data and is well-typed with 'type_dag'.\n * Postconditon: analyses analysis[len] contains the annotated Merkle roots of each subexpressions of 'dag'.\n */\nvoid simplicity_computeAnnotatedMerkleRoot(analyses* analysis, const dag_node* dag, const type* type_dag, const uint_fast32_t len) {\n  for (uint_fast32_t i = 0; i < len; ++i) {\n    uint32_t block[16] = {0};\n\n    /* For jets, their annotated Merkle root is the same as their commitment Merkle root. */\n    analysis[i].annotatedMerkleRoot = HIDDEN == dag[i].tag ? dag[i].cmr\n                                    : JET == dag[i].tag ? dag[i].cmr\n                                    : WORD == dag[i].tag ? dag[i].cmr\n                                    : amrIV(dag[i].tag);\n    switch (dag[i].tag) {\n     case ASSERTL:\n     case ASSERTR:\n     case CASE:\n      memcpy(block, type_dag[CASE_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8,\n             type_dag[CASE_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, type_dag[CASE_C(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[CASE_D(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, analysis[dag[i].child[0]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, analysis[dag[i].child[1]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case DISCONNECT:\n      memcpy(block, type_dag[DISCONNECT_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[DISCONNECT_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, type_dag[DISCONNECT_C(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[DISCONNECT_D(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, analysis[dag[i].child[0]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, analysis[dag[i].child[1]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case COMP:\n      memcpy(block + 8, type_dag[COMP_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, type_dag[COMP_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[COMP_C(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, analysis[dag[i].child[0]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, analysis[dag[i].child[1]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case PAIR:\n      memcpy(block + 8, type_dag[PAIR_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, type_dag[PAIR_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[PAIR_C(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, analysis[dag[i].child[0]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, analysis[dag[i].child[1]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case INJL:\n     case INJR:\n      memcpy(block, type_dag[INJ_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[INJ_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, type_dag[INJ_C(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, analysis[dag[i].child[0]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case TAKE:\n     case DROP:\n      memcpy(block, type_dag[PROJ_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[PROJ_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, type_dag[PROJ_C(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, analysis[dag[i].child[0]].annotatedMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case IDEN:\n      memcpy(block + 8, type_dag[IDEN_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case UNIT:\n      memcpy(block + 8, type_dag[UNIT_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case WITNESS:\n      memcpy(block + 8, type_dag[WITNESS_A(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      memcpy(block, type_dag[WITNESS_B(dag, type_dag, i)].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_bitstring(block + 8, &dag[i].compactValue);\n      simplicity_sha256_compression(analysis[i].annotatedMerkleRoot.s, block);\n      break;\n     case HIDDEN:\n     case JET:\n     case WORD:\n      break;\n    }\n  }\n}\n\n/* Verifies that the 'dag' is in canonical order, meaning that nodes under the left branches have lower indices than nodes under\n * right branches, with the exception that nodes under right branches may (cross-)reference identical nodes that already occur under\n * left branches.\n *\n * Returns 'SIMPLICITY_NO_ERROR' if the 'dag' is in canonical order, and returns 'SIMPLICITY_ERR_DATA_OUT_OF_ORDER' if it is not.\n *\n * May modify dag[i].aux values and invalidate dag[i].sourceType and dag[i].targetType.\n * This function should only be used prior to calling 'mallocTypeInference'.\n *\n * Precondition: dag_node dag[len] and 'dag' is well-formed.\n */\nsimplicity_err simplicity_verifyCanonicalOrder(dag_node* dag, const uint_fast32_t len) {\n  uint_fast32_t bottom = 0;\n  uint_fast32_t top = len-1; /* Underflow is checked below. */\n\n  if (!len) {\n    simplicity_assert(false); /* A well-formed dag has non-zero length */\n    return SIMPLICITY_NO_ERROR; /* However, an empty dag is technically in canonical order */\n  }\n\n  /* We use dag[i].aux as a \"stack\" to manage the traversal of the DAG. */\n  dag[top].aux = len; /* We will set top to 'len' to indicate we are finished. */\n\n  /* Each time any particular 'top' value is revisited in this loop, bottom has increased to be strictly larger than the last 'child'\n     value examined.  Therefore we will make further progress in the loop the next time around.\n     By this reasoning any given 'top' value will be visited no more than numChildren(dag[top].tag) + 1 <= 3 times.\n     Thus this loop iterates at most O('len') times.\n   */\n  while (top < len) {\n    /* We determine canonical order by iterating through the dag in canonical (pre-)order,\n       incrementing 'bottom' each time we encounter a node that is (correctly) placed at the 'bottom' index.\n       We take advantage of the precondition that the dag is well-formed to know in advance that any children\n       of a node have index strictly less than the node itself.\n     */\n\n    /* Check first child. */\n    uint_fast32_t child = dag[top].child[0];\n    switch (dag[top].tag) {\n     case ASSERTL:\n     case ASSERTR:\n     case CASE:\n     case DISCONNECT:\n     case COMP:\n     case PAIR:\n     case INJL:\n     case INJR:\n     case TAKE:\n     case DROP:\n      if (bottom < child) {\n        dag[child].aux = top;\n        top = child;\n        continue;\n      }\n      if (bottom == child) bottom++;\n     case IDEN:\n     case UNIT:\n     case WITNESS:\n     case HIDDEN:\n     case JET:\n     case WORD:\n      break;\n    }\n\n    /* Check second child. */\n    child = dag[top].child[1];\n    switch (dag[top].tag) {\n     case ASSERTL:\n     case ASSERTR:\n     case CASE:\n     case DISCONNECT:\n     case COMP:\n     case PAIR:\n      if (bottom < child) {\n        dag[child].aux = top;\n        top = child;\n        continue;\n      }\n      if (bottom == child) bottom++;\n     case INJL:\n     case INJR:\n     case TAKE:\n     case DROP:\n     case IDEN:\n     case UNIT:\n     case WITNESS:\n     case HIDDEN:\n     case JET:\n     case WORD:\n      break;\n    }\n\n    /* Check current node. */\n    if (bottom < top) return SIMPLICITY_ERR_DATA_OUT_OF_ORDER;\n    if (bottom == top) bottom++;\n    /* top < bottom */\n    top = dag[top].aux; /* Return. */\n  }\n  simplicity_assert(bottom == top && top == len);\n\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* This function fills in the 'WITNESS' nodes of a 'dag' with the data from 'witness'.\n * For each 'WITNESS' : A |- B expression in 'dag', the bits from the 'witness' bitstring are decoded in turn\n * to construct a compact representation of a witness value of type B.\n * If there are not enough bits, then 'SIMPLICITY_ERR_WITNESS_EOF' is returned.\n * If a witness node would end up with more than CELLS_MAX bits, then 'SIMPLICITY_ERR_EXEC_MEMORY' is returned.\n * Otherwise, returns 'SIMPLICITY_NO_ERROR'.\n *\n * Precondition: dag_node dag[len] and 'dag' without witness data and is well-typed with 'type_dag';\n *               witness is a valid bitstream;\n *\n * Postcondition: dag_node dag[len] and 'dag' has witness data and is well-typed with 'type_dag'\n *                  when the result is 'SIMPLICITY_NO_ERROR';\n */\nsimplicity_err simplicity_fillWitnessData(dag_node* dag, type* type_dag, const uint_fast32_t len, bitstream *witness) {\n  static_assert(CELLS_MAX <= 0x80000000, \"CELLS_MAX is too large.\");\n  for (uint_fast32_t i = 0; i < len; ++i) {\n    if (WITNESS == dag[i].tag) {\n      if (CELLS_MAX < type_dag[WITNESS_B(dag, type_dag, i)].bitSize) return SIMPLICITY_ERR_EXEC_MEMORY;\n      if (witness->len <= 0) {\n        /* There is no data in the witness. */\n        dag[i].compactValue = (bitstring){0};\n        /* This is fine as long as the witness type is trivial */\n        if (type_dag[WITNESS_B(dag, type_dag, i)].bitSize) return SIMPLICITY_ERR_WITNESS_EOF;\n      } else {\n        dag[i].compactValue = (bitstring)\n          { .arr = witness->arr\n          , .offset = witness->offset\n          , .len = 0 /* The value of .len will computed within the while loop. */\n          };\n\n        /* Traverse the witness type to parse the witness's compact representation as a bit string. */\n        size_t cur = typeSkip(WITNESS_B(dag, type_dag, i), type_dag);\n        bool calling = true;\n        setTypeBack(cur, type_dag, 0);\n        while (cur) {\n          if (SUM == type_dag[cur].kind) {\n            /* Parse one bit and traverse the left type or the right type depending on the value of the bit parsed. */\n            simplicity_assert(calling);\n            int32_t bit = read1Bit(witness);\n            if (bit < 0) return SIMPLICITY_ERR_WITNESS_EOF;\n            dag[i].compactValue.len++;\n            size_t next = typeSkip(type_dag[cur].typeArg[bit], type_dag);\n            if (next) {\n              setTypeBack(next, type_dag, type_dag[cur].back);\n              cur = next;\n            } else {\n              cur = type_dag[cur].back;\n              calling = false;\n            }\n          } else {\n            simplicity_assert(PRODUCT == type_dag[cur].kind);\n            size_t next;\n            if (calling) {\n              next = typeSkip(type_dag[cur].typeArg[0], type_dag);\n              /* Note: Because we are using 'typeSkip' we have an invarant on 'cur' such that whenever type_dag[cur].kind == PRODUCT,\n                 then it is a product of two non-trival types.  This implies that 'next' cannot actually be 0. */\n              if (next) {\n                /* Traverse the first element of the product type, if it has any data. */\n                setTypeBack(next, type_dag, cur);\n                cur = next;\n                continue;\n              }\n            }\n            next = typeSkip(type_dag[cur].typeArg[1], type_dag);\n            /* Note: Because we are using 'typeSkip' we have an invarant on 'cur' such that whenever type_dag[cur].kind == PRODUCT,\n               then it is a product of two non-trival types.  This implies that 'next' cannot actually be 0. */\n            if (next) {\n              /* Traverse the second element of the product type, if it has any data. */\n              setTypeBack(next, type_dag, type_dag[cur].back);\n              cur = next;\n              calling = true;\n            } else {\n              cur = type_dag[cur].back;\n              calling = false;\n            }\n          }\n        }\n\n        /* Note: Above we use 'typeSkip' to skip over long chains of products against trivial types\n         * This avoids a potential DOS vulnerability where a DAG of deeply nested products of unit types with sharing is traversed,\n         * taking exponential time.\n         * While traversing still could take exponential time in terms of the size of the type's dag,\n         * at least one bit of witness data is required per PRODUCT type encountered.\n         * This ought to limit the total number of times through the above loop to no more that 3 * dag[i].witness.len.\n         */\n      }\n    }\n  }\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* Verifies that identity hash of every subexpression in a well-typed 'dag' with witnesses are all unique,\n * including that each hidden root hash for every 'HIDDEN' node is unique.\n *\n * if 'ihr' is not NULL, then '*ihr' is set to the identity hash of the root of the 'dag'.\n *\n * If malloc fails, returns 'SIMPLICITY_ERR_MALLOC'.\n * If all the identity hahes (and hidden roots) are all unique, returns 'SIMPLICITY_NO_ERROR'.\n * Otherwise returns 'SIMPLICITY_ERR_UNSHARED_SUBEXPRESSION'.\n *\n * Precondition: dag_node dag[len] and 'dag' is well-typed with 'type_dag' and contains witnesses.\n */\nsimplicity_err simplicity_verifyNoDuplicateIdentityHashes(sha256_midstate* ihr, const dag_node* dag, const type* type_dag, const uint_fast32_t dag_len) {\n  simplicity_assert(0 < dag_len);\n  simplicity_assert(dag_len <= DAG_LEN_MAX);\n  sha256_midstate* ih_buf = simplicity_malloc((size_t)dag_len * sizeof(sha256_midstate));\n  if (!ih_buf) return SIMPLICITY_ERR_MALLOC;\n\n  computeIdentityHashRoots(ih_buf, dag, type_dag, dag_len);\n\n  if (ihr) *ihr = ih_buf[dag_len-1];\n\n  int result = simplicity_hasDuplicates(ih_buf, dag_len);\n\n  simplicity_free(ih_buf);\n\n  switch (result) {\n  case -1: return SIMPLICITY_ERR_MALLOC;\n  case 0: return SIMPLICITY_NO_ERROR;\n  default: return SIMPLICITY_ERR_UNSHARED_SUBEXPRESSION;\n  }\n}\n"
  },
  {
    "path": "C/dag.h",
    "content": "/* This module defines the structure for Simplicity DAGs, and functions for some analysis of that structure,\n * such as computing Merkle Roots.\n */\n#ifndef SIMPLICITY_DAG_H\n#define SIMPLICITY_DAG_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <simplicity/errorCodes.h>\n#include \"bitstream.h\"\n#include \"bitstring.h\"\n#include \"bounded.h\"\n#include \"jets.h\"\n#include \"simplicity_assert.h\"\n#include \"type.h\"\n\n/* An enumeration of the various kinds of Simplicity nodes. */\ntypedef enum tag_t\n{ COMP\n, CASE\n, ASSERTL\n, ASSERTR\n, PAIR\n, DISCONNECT\n, INJL\n, INJR\n, TAKE\n, DROP\n, IDEN\n, UNIT\n, HIDDEN\n, WITNESS\n, JET\n, WORD\n} tag_t;\n\n/* This structure is use to count the different kinds of combinators in a Simplicity DAG. */\ntypedef struct combinator_counters {\n  size_t comp_cnt, case_cnt, pair_cnt, disconnect_cnt,\n         injl_cnt, injr_cnt, take_cnt, drop_cnt;\n} combinator_counters;\n\n/* Given a tag for an expression, add it to the 'census'.\n */\nstatic inline void enumerator(combinator_counters* census, tag_t tag) {\n  if (!census) return;\n  switch (tag) {\n   case COMP: census->comp_cnt++; return;\n   case ASSERTL:\n   case ASSERTR: /* Assertions are counted as CASE combinators. */\n   case CASE: census->case_cnt++; return;\n   case PAIR: census->pair_cnt++; return;\n   case DISCONNECT: census->disconnect_cnt++; return;\n   case INJL: census->injl_cnt++; return;\n   case INJR: census->injr_cnt++; return;\n   case TAKE: census->take_cnt++; return;\n   case DROP: census->drop_cnt++; return;\n\n   /* These tags are not accounted for in the census. */\n   case IDEN:\n   case UNIT:\n   case HIDDEN:\n   case WITNESS:\n   case JET:\n   case WORD:\n    return;\n  }\n}\n\n/* Returns the number of children that a Simplicity combinator of the 'tag' kind has.\n */\nstatic inline size_t numChildren(tag_t tag) {\n  switch (tag) {\n   case COMP:\n   case ASSERTL:\n   case ASSERTR:\n   case CASE:\n   case PAIR:\n   case DISCONNECT:\n    return 2;\n   case INJL:\n   case INJR:\n   case TAKE:\n   case DROP:\n    return 1;\n   case IDEN:\n   case UNIT:\n   case HIDDEN:\n   case WITNESS:\n   case JET:\n   case WORD:\n    return 0;\n  }\n}\n\n/* Compute the CMR of a jet of scribe(v) : ONE |- TWO^(2^n) that outputs a given bitstring.\n *\n * Precondition: 2^n == value->len\n */\nsha256_midstate simplicity_computeWordCMR(const bitstring* value, size_t n);\n\n/* A node the the DAG of a Simplicity expression.\n * It consists of a 'tag' indicating the kind of expression the node represents.\n * The contents of a node depend on the kind of the expressions.\n * The node may have references to children, when it is a combinator kind of expression.\n *\n * Invariant: 'NULL != jet' when 'tag == JET';\n *            bitstring compactValue is active when tag == WITNESS and the node has witness data;\n *            bitstring compactValue is also active and has a length that is a power of 2 when tag == WORD;\n *            size_t sourceIx is active when tag == JET;\n *            unbounded cost is active when tag == JET;\n *            size_t child[numChildren(tag)] when tag \\notin {HIDDEN, WITNESS, JET, WORD};\n */\ntypedef struct dag_node {\n  jet_ptr jet;\n  sha256_midstate cmr;\n  union {\n    uint_fast32_t aux; /* Used as scratch space for verifyCanonicalOrder. */\n    struct {\n       size_t sourceType, targetType;\n    };\n  };\n  union {\n    struct {\n      size_t sourceIx;\n    };\n    struct {\n      uint_fast32_t child[2];\n    };\n    bitstring compactValue;\n  };\n  size_t targetIx;\n  /* cost is normalized so that the 'CheckSigVerify' jet has 50 000 milli weight units.  */\n  ubounded cost; /* in milli weight units */\n  tag_t tag;\n} dag_node;\n\n/* Inline functions for accessing the type annotations of combinators */\nstatic inline size_t IDEN_A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(IDEN == dag[i].tag);\n  return dag[i].sourceType;\n}\n\nstatic inline size_t UNIT_A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(UNIT == dag[i].tag);\n  return dag[i].sourceType;\n}\n\nstatic inline size_t COMP_A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(COMP == dag[i].tag);\n  return dag[i].sourceType;\n}\n\nstatic inline size_t COMP_B(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(COMP == dag[i].tag);\n  return dag[dag[i].child[1]].sourceType;\n}\n\nstatic inline size_t COMP_C(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(COMP == dag[i].tag);\n  return dag[i].targetType;\n}\n\nstatic inline size_t CASE_A(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(CASE == dag[i].tag || ASSERTL == dag[i].tag || ASSERTR == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].sourceType].kind);\n  simplicity_debug_assert(SUM == type_dag[type_dag[dag[i].sourceType].typeArg[0]].kind);\n  return type_dag[type_dag[dag[i].sourceType].typeArg[0]].typeArg[0];\n}\n\nstatic inline size_t CASE_B(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(CASE == dag[i].tag || ASSERTL == dag[i].tag || ASSERTR == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].sourceType].kind);\n  simplicity_debug_assert(SUM == type_dag[type_dag[dag[i].sourceType].typeArg[0]].kind);\n  return type_dag[type_dag[dag[i].sourceType].typeArg[0]].typeArg[1];\n}\n\nstatic inline size_t CASE_C(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(CASE == dag[i].tag || ASSERTL == dag[i].tag || ASSERTR == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].sourceType].kind);\n  return type_dag[dag[i].sourceType].typeArg[1];\n}\n\nstatic inline size_t CASE_D(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(CASE == dag[i].tag || ASSERTL == dag[i].tag || ASSERTR == dag[i].tag);\n  return dag[i].targetType;\n}\n\nstatic inline size_t PAIR_A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(PAIR == dag[i].tag);\n  return dag[i].sourceType;\n}\n\nstatic inline size_t PAIR_B(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(PAIR == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].targetType].kind);\n  return type_dag[dag[i].targetType].typeArg[0];\n}\n\nstatic inline size_t PAIR_C(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(PAIR == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].targetType].kind);\n  return type_dag[dag[i].targetType].typeArg[1];\n}\n\nstatic inline size_t DISCONNECT_A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(DISCONNECT == dag[i].tag);\n  return dag[i].sourceType;\n}\n\nstatic inline size_t DISCONNECT_B(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(DISCONNECT == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].targetType].kind);\n  return type_dag[dag[i].targetType].typeArg[0];\n}\n\nstatic inline size_t DISCONNECT_C(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(DISCONNECT == dag[i].tag);\n  return dag[dag[i].child[1]].sourceType;\n}\n\nstatic inline size_t DISCONNECT_D(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(DISCONNECT == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].targetType].kind);\n  return type_dag[dag[i].targetType].typeArg[1];\n}\n\nstatic inline size_t DISCONNECT_W256A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(DISCONNECT == dag[i].tag);\n  return dag[dag[i].child[0]].sourceType;\n}\n\nstatic inline size_t DISCONNECT_BC(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(DISCONNECT == dag[i].tag);\n  return dag[dag[i].child[0]].targetType;\n}\n\nstatic inline size_t INJ_A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(INJL == dag[i].tag || INJR == dag[i].tag);\n  return dag[i].sourceType;\n}\n\nstatic inline size_t INJ_B(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(INJL == dag[i].tag || INJR == dag[i].tag);\n  simplicity_debug_assert(SUM == type_dag[dag[i].targetType].kind);\n  return type_dag[dag[i].targetType].typeArg[0];\n}\n\nstatic inline size_t INJ_C(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(INJL == dag[i].tag || INJR == dag[i].tag);\n  simplicity_debug_assert(SUM == type_dag[dag[i].targetType].kind);\n  return type_dag[dag[i].targetType].typeArg[1];\n}\n\nstatic inline size_t PROJ_A(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(TAKE == dag[i].tag || DROP == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].sourceType].kind);\n  return type_dag[dag[i].sourceType].typeArg[0];\n}\n\nstatic inline size_t PROJ_B(const dag_node* dag, const type* type_dag, size_t i) {\n  simplicity_debug_assert(TAKE == dag[i].tag || DROP == dag[i].tag);\n  simplicity_debug_assert(PRODUCT == type_dag[dag[i].sourceType].kind);\n  return type_dag[dag[i].sourceType].typeArg[1];\n}\n\nstatic inline size_t PROJ_C(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(TAKE == dag[i].tag || DROP == dag[i].tag);\n  return dag[i].targetType;\n}\n\nstatic inline size_t WITNESS_A(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(WITNESS == dag[i].tag);\n  return dag[i].sourceType;\n}\n\nstatic inline size_t WITNESS_B(const dag_node* dag, const type* type_dag, size_t i) {\n  (void)type_dag;\n  simplicity_debug_assert(WITNESS == dag[i].tag);\n  return dag[i].targetType;\n}\n\n/* A well-formed Simplicity DAG is an array of 'dag_node's,\n *\n *     dag_node dag[len],\n *\n * such that\n *\n *     1 <= len <= DAG_LEN_MAX\n *\n * and for all 'i', 0 <= 'i' < 'len' and for all 'j', 0 <= 'j' < 'numChildren(dag[i].tag)',\n *\n *     dag[i].child[j] < i\n *\n * and for all 'i', 0 <= 'i' < 'len',\n *\n *     if dag[dag[i].child[0]].tag == HIDDEN then dag[i].tag == ASSERTR\n *\n *     and\n *\n *     if dag[dag[i].child[1]].tag == HIDDEN then dag[i].tag == ASSERTL\n *\n * Note that a well-formed Simplicity DAG is not necessarily a well-typed Simplicity DAG.\n */\n\n/* A structure of static analyses for a particular node of a Simplicity DAG.\n * 'annotatedMerkleRoot' is the a Merkle root to includes the type annotations of all subexpressions.\n */\ntypedef struct analyses {\n  sha256_midstate annotatedMerkleRoot;\n} analyses;\n\n/* Given a well-formed dag[i + 1], such that for all 'j', 0 <= 'j' < 'i',\n * 'dag[j].cmr' is the CMR of the subexpression denoted by the slice\n *\n *     (dag_nodes[j + 1])dag,\n *\n * then we set the value of 'dag[i].cmr' to be the CMR of the subexpression denoted by 'dag'.\n *\n * Precondition: dag_node dag[i + 1] and 'dag' is well-formed.\n *               dag[i].'tag' \\notin {HIDDEN, JET, WORD}\n */\nvoid simplicity_computeCommitmentMerkleRoot(dag_node* dag, uint_fast32_t i);\n\n/* Given a well-typed dag representing a Simplicity expression, compute the annotated Merkle roots of all subexpressions.\n * For all 'i', 0 <= 'i' < 'len', 'analysis[i].annotatedMerkleRoot' will be the AMR of the subexpression denoted by the slice\n *\n *     (dag_nodes[i + 1])dag.\n *\n * The AMR of the overall expression will be 'analysis[len - 1].annotatedMerkleRoot'.\n *\n * Precondition: analyses analysis[len];\n *               dag_node dag[len] and 'dag' has witness data and is well-typed with 'type_dag'.\n * Postconditon: analyses analysis[len] contains the annotated Merkle roots of each subexpressions of 'dag'.\n */\nvoid simplicity_computeAnnotatedMerkleRoot(analyses* analysis, const dag_node* dag, const type* type_dag, uint_fast32_t len);\n\n/* Verifies that the 'dag' is in canonical order, meaning that nodes under the left branches have lower indices than nodes under\n * right branches, with the exception that nodes under right branches may (cross-)reference identical nodes that already occur under\n * left branches.\n *\n * Returns 'SIMPLICITY_NO_ERROR' if the 'dag' is in canonical order, and returns 'SIMPLICITY_ERR_DATA_OUT_OF_ORDER' if it is not.\n *\n * May modify dag[i].aux values and invalidate dag[i].sourceType and dag[i].targetType.\n * This function should only be used prior to calling 'mallocTypeInference'.\n *\n * Precondition: dag_node dag[len] and 'dag' is well-formed.\n */\nsimplicity_err simplicity_verifyCanonicalOrder(dag_node* dag, const uint_fast32_t len);\n\n/* This function fills in the 'WITNESS' nodes of a 'dag' with the data from 'witness'.\n * For each 'WITNESS' : A |- B expression in 'dag', the bits from the 'witness' bitstring are decoded in turn\n * to construct a compact representation of a witness value of type B.\n * If there are not enough bits, then 'SIMPLICITY_ERR_WITNESS_EOF' is returned.\n * If a witness node would end up with more than CELLS_MAX bits, then 'SIMPLICITY_ERR_EXEC_MEMORY' is returned.\n * Otherwise, returns 'SIMPLICITY_NO_ERROR'.\n *\n * Precondition: dag_node dag[len] and 'dag' without witness data and is well-typed with 'type_dag';\n *               witness is a valid bitstream;\n *\n * Postcondition: dag_node dag[len] and 'dag' has witness data and is well-typed with 'type_dag'\n *                  when the result is 'SIMPLICITY_NO_ERROR';\n */\nsimplicity_err simplicity_fillWitnessData(dag_node* dag, type* type_dag, const uint_fast32_t len, bitstream *witness);\n\n/* Verifies that identity hash of every subexpression in a well-typed 'dag' with witnesses are all unique,\n * including that each hidden root hash for every 'HIDDEN' node is unique.\n *\n * if 'ihr' is not NULL, then '*ihr' is set to the identity hash of the root of the 'dag'.\n *\n * If malloc fails, returns 'SIMPLICITY_ERR_MALLOC'.\n * If all the identity hahes (and hidden roots) are all unique, returns 'SIMPLICITY_NO_ERROR'.\n * Otherwise returns 'SIMPLICITY_ERR_UNSHARED_SUBEXPRESSION'.\n *\n * Precondition: dag_node dag[len] and 'dag' is well-typed with 'type_dag' and contains witnesses.\n */\nsimplicity_err simplicity_verifyNoDuplicateIdentityHashes(sha256_midstate* ihr, const dag_node* dag, const type* type_dag, const uint_fast32_t dag_len);\n\n#endif\n"
  },
  {
    "path": "C/decodeCoreJets.inc",
    "content": "/* This file has been automatically generated. */\n\n{\n  int32_t code;\n  code = simplicity_decodeUptoMaxInt(stream);\n  if (code < 0) return (simplicity_err)code;\n  switch (code) {\n    case 1:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = VERIFY; return SIMPLICITY_NO_ERROR;\n        case 2:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = LOW_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = LOW_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = LOW_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = LOW_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = LOW_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 3:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = HIGH_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = HIGH_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = HIGH_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = HIGH_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = HIGH_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 4:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = COMPLEMENT_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = COMPLEMENT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = COMPLEMENT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = COMPLEMENT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = COMPLEMENT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 5:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = AND_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = AND_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = AND_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = AND_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = AND_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 6:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = OR_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = OR_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = OR_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = OR_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = OR_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 7:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = XOR_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = XOR_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = XOR_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = XOR_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = XOR_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 8:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = MAJ_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = MAJ_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = MAJ_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = MAJ_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = MAJ_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 9:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = XOR_XOR_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = XOR_XOR_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = XOR_XOR_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = XOR_XOR_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = XOR_XOR_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 10:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = CH_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = CH_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = CH_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = CH_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = CH_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 11:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = SOME_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = SOME_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = SOME_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = SOME_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = SOME_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 12:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = ALL_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = ALL_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = ALL_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = ALL_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 13:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = EQ_1; return SIMPLICITY_NO_ERROR;\n            case 3: *result = EQ_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = EQ_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = EQ_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = EQ_64; return SIMPLICITY_NO_ERROR;\n            case 8: *result = EQ_256; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 14:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = FULL_LEFT_SHIFT_8_1; return SIMPLICITY_NO_ERROR;\n                case 4: *result = FULL_LEFT_SHIFT_16_1; return SIMPLICITY_NO_ERROR;\n                case 5: *result = FULL_LEFT_SHIFT_32_1; return SIMPLICITY_NO_ERROR;\n                case 6: *result = FULL_LEFT_SHIFT_64_1; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 2:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 2: *result = FULL_LEFT_SHIFT_8_2; return SIMPLICITY_NO_ERROR;\n                case 3: *result = FULL_LEFT_SHIFT_16_2; return SIMPLICITY_NO_ERROR;\n                case 4: *result = FULL_LEFT_SHIFT_32_2; return SIMPLICITY_NO_ERROR;\n                case 5: *result = FULL_LEFT_SHIFT_64_2; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 3:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_LEFT_SHIFT_8_4; return SIMPLICITY_NO_ERROR;\n                case 2: *result = FULL_LEFT_SHIFT_16_4; return SIMPLICITY_NO_ERROR;\n                case 3: *result = FULL_LEFT_SHIFT_32_4; return SIMPLICITY_NO_ERROR;\n                case 4: *result = FULL_LEFT_SHIFT_64_4; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_LEFT_SHIFT_16_8; return SIMPLICITY_NO_ERROR;\n                case 2: *result = FULL_LEFT_SHIFT_32_8; return SIMPLICITY_NO_ERROR;\n                case 3: *result = FULL_LEFT_SHIFT_64_8; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_LEFT_SHIFT_32_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = FULL_LEFT_SHIFT_64_16; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_LEFT_SHIFT_64_32; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 15:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = FULL_RIGHT_SHIFT_8_1; return SIMPLICITY_NO_ERROR;\n                case 4: *result = FULL_RIGHT_SHIFT_16_1; return SIMPLICITY_NO_ERROR;\n                case 5: *result = FULL_RIGHT_SHIFT_32_1; return SIMPLICITY_NO_ERROR;\n                case 6: *result = FULL_RIGHT_SHIFT_64_1; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 2:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 2: *result = FULL_RIGHT_SHIFT_8_2; return SIMPLICITY_NO_ERROR;\n                case 3: *result = FULL_RIGHT_SHIFT_16_2; return SIMPLICITY_NO_ERROR;\n                case 4: *result = FULL_RIGHT_SHIFT_32_2; return SIMPLICITY_NO_ERROR;\n                case 5: *result = FULL_RIGHT_SHIFT_64_2; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 3:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_RIGHT_SHIFT_8_4; return SIMPLICITY_NO_ERROR;\n                case 2: *result = FULL_RIGHT_SHIFT_16_4; return SIMPLICITY_NO_ERROR;\n                case 3: *result = FULL_RIGHT_SHIFT_32_4; return SIMPLICITY_NO_ERROR;\n                case 4: *result = FULL_RIGHT_SHIFT_64_4; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_RIGHT_SHIFT_16_8; return SIMPLICITY_NO_ERROR;\n                case 2: *result = FULL_RIGHT_SHIFT_32_8; return SIMPLICITY_NO_ERROR;\n                case 3: *result = FULL_RIGHT_SHIFT_64_8; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_RIGHT_SHIFT_32_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = FULL_RIGHT_SHIFT_64_16; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = FULL_RIGHT_SHIFT_64_32; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 16:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = LEFTMOST_8_1; return SIMPLICITY_NO_ERROR;\n                case 4: *result = LEFTMOST_16_1; return SIMPLICITY_NO_ERROR;\n                case 5: *result = LEFTMOST_32_1; return SIMPLICITY_NO_ERROR;\n                case 6: *result = LEFTMOST_64_1; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 2:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 2: *result = LEFTMOST_8_2; return SIMPLICITY_NO_ERROR;\n                case 3: *result = LEFTMOST_16_2; return SIMPLICITY_NO_ERROR;\n                case 4: *result = LEFTMOST_32_2; return SIMPLICITY_NO_ERROR;\n                case 5: *result = LEFTMOST_64_2; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 3:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFTMOST_8_4; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFTMOST_16_4; return SIMPLICITY_NO_ERROR;\n                case 3: *result = LEFTMOST_32_4; return SIMPLICITY_NO_ERROR;\n                case 4: *result = LEFTMOST_64_4; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFTMOST_16_8; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFTMOST_32_8; return SIMPLICITY_NO_ERROR;\n                case 3: *result = LEFTMOST_64_8; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFTMOST_32_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFTMOST_64_16; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFTMOST_64_32; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 17:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = RIGHTMOST_8_1; return SIMPLICITY_NO_ERROR;\n                case 4: *result = RIGHTMOST_16_1; return SIMPLICITY_NO_ERROR;\n                case 5: *result = RIGHTMOST_32_1; return SIMPLICITY_NO_ERROR;\n                case 6: *result = RIGHTMOST_64_1; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 2:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 2: *result = RIGHTMOST_8_2; return SIMPLICITY_NO_ERROR;\n                case 3: *result = RIGHTMOST_16_2; return SIMPLICITY_NO_ERROR;\n                case 4: *result = RIGHTMOST_32_2; return SIMPLICITY_NO_ERROR;\n                case 5: *result = RIGHTMOST_64_2; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 3:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHTMOST_8_4; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHTMOST_16_4; return SIMPLICITY_NO_ERROR;\n                case 3: *result = RIGHTMOST_32_4; return SIMPLICITY_NO_ERROR;\n                case 4: *result = RIGHTMOST_64_4; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHTMOST_16_8; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHTMOST_32_8; return SIMPLICITY_NO_ERROR;\n                case 3: *result = RIGHTMOST_64_8; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHTMOST_32_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHTMOST_64_16; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHTMOST_64_32; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 18:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = LEFT_PAD_LOW_1_8; return SIMPLICITY_NO_ERROR;\n                case 4: *result = LEFT_PAD_LOW_1_16; return SIMPLICITY_NO_ERROR;\n                case 5: *result = LEFT_PAD_LOW_1_32; return SIMPLICITY_NO_ERROR;\n                case 6: *result = LEFT_PAD_LOW_1_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_PAD_LOW_8_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFT_PAD_LOW_8_32; return SIMPLICITY_NO_ERROR;\n                case 3: *result = LEFT_PAD_LOW_8_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_PAD_LOW_16_32; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFT_PAD_LOW_16_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_PAD_LOW_32_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 19:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = LEFT_PAD_HIGH_1_8; return SIMPLICITY_NO_ERROR;\n                case 4: *result = LEFT_PAD_HIGH_1_16; return SIMPLICITY_NO_ERROR;\n                case 5: *result = LEFT_PAD_HIGH_1_32; return SIMPLICITY_NO_ERROR;\n                case 6: *result = LEFT_PAD_HIGH_1_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_PAD_HIGH_8_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFT_PAD_HIGH_8_32; return SIMPLICITY_NO_ERROR;\n                case 3: *result = LEFT_PAD_HIGH_8_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_PAD_HIGH_16_32; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFT_PAD_HIGH_16_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_PAD_HIGH_32_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 20:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = LEFT_EXTEND_1_8; return SIMPLICITY_NO_ERROR;\n                case 4: *result = LEFT_EXTEND_1_16; return SIMPLICITY_NO_ERROR;\n                case 5: *result = LEFT_EXTEND_1_32; return SIMPLICITY_NO_ERROR;\n                case 6: *result = LEFT_EXTEND_1_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_EXTEND_8_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFT_EXTEND_8_32; return SIMPLICITY_NO_ERROR;\n                case 3: *result = LEFT_EXTEND_8_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_EXTEND_16_32; return SIMPLICITY_NO_ERROR;\n                case 2: *result = LEFT_EXTEND_16_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = LEFT_EXTEND_32_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 21:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = RIGHT_PAD_LOW_1_8; return SIMPLICITY_NO_ERROR;\n                case 4: *result = RIGHT_PAD_LOW_1_16; return SIMPLICITY_NO_ERROR;\n                case 5: *result = RIGHT_PAD_LOW_1_32; return SIMPLICITY_NO_ERROR;\n                case 6: *result = RIGHT_PAD_LOW_1_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_PAD_LOW_8_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHT_PAD_LOW_8_32; return SIMPLICITY_NO_ERROR;\n                case 3: *result = RIGHT_PAD_LOW_8_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_PAD_LOW_16_32; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHT_PAD_LOW_16_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_PAD_LOW_32_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 22:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 3: *result = RIGHT_PAD_HIGH_1_8; return SIMPLICITY_NO_ERROR;\n                case 4: *result = RIGHT_PAD_HIGH_1_16; return SIMPLICITY_NO_ERROR;\n                case 5: *result = RIGHT_PAD_HIGH_1_32; return SIMPLICITY_NO_ERROR;\n                case 6: *result = RIGHT_PAD_HIGH_1_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_PAD_HIGH_8_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHT_PAD_HIGH_8_32; return SIMPLICITY_NO_ERROR;\n                case 3: *result = RIGHT_PAD_HIGH_8_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_PAD_HIGH_16_32; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHT_PAD_HIGH_16_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_PAD_HIGH_32_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 23:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 4:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_EXTEND_8_16; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHT_EXTEND_8_32; return SIMPLICITY_NO_ERROR;\n                case 3: *result = RIGHT_EXTEND_8_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 5:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_EXTEND_16_32; return SIMPLICITY_NO_ERROR;\n                case 2: *result = RIGHT_EXTEND_16_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 6:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = RIGHT_EXTEND_32_64; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n          }\n          break;\n        case 24:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = LEFT_SHIFT_WITH_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = LEFT_SHIFT_WITH_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = LEFT_SHIFT_WITH_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = LEFT_SHIFT_WITH_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 25:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = RIGHT_SHIFT_WITH_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = RIGHT_SHIFT_WITH_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = RIGHT_SHIFT_WITH_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = RIGHT_SHIFT_WITH_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 26:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = LEFT_SHIFT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = LEFT_SHIFT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = LEFT_SHIFT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = LEFT_SHIFT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 27:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = RIGHT_SHIFT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = RIGHT_SHIFT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = RIGHT_SHIFT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = RIGHT_SHIFT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 28:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = LEFT_ROTATE_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = LEFT_ROTATE_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = LEFT_ROTATE_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = LEFT_ROTATE_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 29:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = RIGHT_ROTATE_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = RIGHT_ROTATE_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = RIGHT_ROTATE_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = RIGHT_ROTATE_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n      }\n      break;\n    case 2:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = ONE_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = ONE_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = ONE_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = ONE_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 2:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = FULL_ADD_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = FULL_ADD_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = FULL_ADD_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = FULL_ADD_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 3:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = ADD_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = ADD_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = ADD_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = ADD_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 4:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = FULL_INCREMENT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = FULL_INCREMENT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = FULL_INCREMENT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = FULL_INCREMENT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 5:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = INCREMENT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = INCREMENT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = INCREMENT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = INCREMENT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 7:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = FULL_SUBTRACT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = FULL_SUBTRACT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = FULL_SUBTRACT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = FULL_SUBTRACT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 8:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = SUBTRACT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = SUBTRACT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = SUBTRACT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = SUBTRACT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 9:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = NEGATE_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = NEGATE_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = NEGATE_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = NEGATE_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 10:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = FULL_DECREMENT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = FULL_DECREMENT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = FULL_DECREMENT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = FULL_DECREMENT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 11:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = DECREMENT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = DECREMENT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = DECREMENT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = DECREMENT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 12:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = FULL_MULTIPLY_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = FULL_MULTIPLY_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = FULL_MULTIPLY_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = FULL_MULTIPLY_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 13:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = MULTIPLY_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = MULTIPLY_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = MULTIPLY_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = MULTIPLY_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 14:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = IS_ZERO_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = IS_ZERO_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = IS_ZERO_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = IS_ZERO_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 15:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = IS_ONE_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = IS_ONE_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = IS_ONE_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = IS_ONE_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 16:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = LE_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = LE_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = LE_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = LE_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 17:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = LT_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = LT_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = LT_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = LT_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 18:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = MIN_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = MIN_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = MIN_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = MIN_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 19:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = MAX_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = MAX_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = MAX_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = MAX_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 20:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = MEDIAN_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = MEDIAN_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = MEDIAN_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = MEDIAN_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 21:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 6: *result = DIV_MOD_128_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 22:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = DIV_MOD_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = DIV_MOD_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = DIV_MOD_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = DIV_MOD_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 23:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = DIVIDE_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = DIVIDE_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = DIVIDE_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = DIVIDE_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 24:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = MODULO_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = MODULO_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = MODULO_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = MODULO_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 25:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 3: *result = DIVIDES_8; return SIMPLICITY_NO_ERROR;\n            case 4: *result = DIVIDES_16; return SIMPLICITY_NO_ERROR;\n            case 5: *result = DIVIDES_32; return SIMPLICITY_NO_ERROR;\n            case 6: *result = DIVIDES_64; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n      }\n      break;\n    case 3:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = SHA_256_BLOCK; return SIMPLICITY_NO_ERROR;\n            case 2: *result = SHA_256_IV; return SIMPLICITY_NO_ERROR;\n            case 3:\n              code = simplicity_decodeUptoMaxInt(stream);\n              if (code < 0) return (simplicity_err)code;\n              switch (code) {\n                case 1: *result = SHA_256_CTX_8_ADD_1; return SIMPLICITY_NO_ERROR;\n                case 2: *result = SHA_256_CTX_8_ADD_2; return SIMPLICITY_NO_ERROR;\n                case 3: *result = SHA_256_CTX_8_ADD_4; return SIMPLICITY_NO_ERROR;\n                case 4: *result = SHA_256_CTX_8_ADD_8; return SIMPLICITY_NO_ERROR;\n                case 5: *result = SHA_256_CTX_8_ADD_16; return SIMPLICITY_NO_ERROR;\n                case 6: *result = SHA_256_CTX_8_ADD_32; return SIMPLICITY_NO_ERROR;\n                case 7: *result = SHA_256_CTX_8_ADD_64; return SIMPLICITY_NO_ERROR;\n                case 8: *result = SHA_256_CTX_8_ADD_128; return SIMPLICITY_NO_ERROR;\n                case 9: *result = SHA_256_CTX_8_ADD_256; return SIMPLICITY_NO_ERROR;\n                case 10: *result = SHA_256_CTX_8_ADD_512; return SIMPLICITY_NO_ERROR;\n              }\n              break;\n            case 4: *result = SHA_256_CTX_8_ADD_BUFFER_511; return SIMPLICITY_NO_ERROR;\n            case 5: *result = SHA_256_CTX_8_FINALIZE; return SIMPLICITY_NO_ERROR;\n            case 6: *result = SHA_256_CTX_8_INIT; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n      }\n      break;\n    case 4:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = POINT_VERIFY_1; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 2: *result = DECOMPRESS; return SIMPLICITY_NO_ERROR;\n        case 3:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = LINEAR_VERIFY_1; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 4:\n          code = simplicity_decodeUptoMaxInt(stream);\n          if (code < 0) return (simplicity_err)code;\n          switch (code) {\n            case 1: *result = LINEAR_COMBINATION_1; return SIMPLICITY_NO_ERROR;\n          }\n          break;\n        case 5: *result = SCALE; return SIMPLICITY_NO_ERROR;\n        case 6: *result = GENERATE; return SIMPLICITY_NO_ERROR;\n        case 7: *result = GEJ_INFINITY; return SIMPLICITY_NO_ERROR;\n        case 8: *result = GEJ_NORMALIZE; return SIMPLICITY_NO_ERROR;\n        case 9: *result = GEJ_NEGATE; return SIMPLICITY_NO_ERROR;\n        case 10: *result = GE_NEGATE; return SIMPLICITY_NO_ERROR;\n        case 11: *result = GEJ_DOUBLE; return SIMPLICITY_NO_ERROR;\n        case 12: *result = GEJ_ADD; return SIMPLICITY_NO_ERROR;\n        case 13: *result = GEJ_GE_ADD_EX; return SIMPLICITY_NO_ERROR;\n        case 14: *result = GEJ_GE_ADD; return SIMPLICITY_NO_ERROR;\n        case 15: *result = GEJ_RESCALE; return SIMPLICITY_NO_ERROR;\n        case 16: *result = GEJ_IS_INFINITY; return SIMPLICITY_NO_ERROR;\n        case 17: *result = GEJ_EQUIV; return SIMPLICITY_NO_ERROR;\n        case 18: *result = GEJ_GE_EQUIV; return SIMPLICITY_NO_ERROR;\n        case 19: *result = GEJ_X_EQUIV; return SIMPLICITY_NO_ERROR;\n        case 20: *result = GEJ_Y_IS_ODD; return SIMPLICITY_NO_ERROR;\n        case 21: *result = GEJ_IS_ON_CURVE; return SIMPLICITY_NO_ERROR;\n        case 22: *result = GE_IS_ON_CURVE; return SIMPLICITY_NO_ERROR;\n        case 23: *result = SCALAR_NORMALIZE; return SIMPLICITY_NO_ERROR;\n        case 24: *result = SCALAR_NEGATE; return SIMPLICITY_NO_ERROR;\n        case 25: *result = SCALAR_ADD; return SIMPLICITY_NO_ERROR;\n        case 26: *result = SCALAR_SQUARE; return SIMPLICITY_NO_ERROR;\n        case 27: *result = SCALAR_MULTIPLY; return SIMPLICITY_NO_ERROR;\n        case 28: *result = SCALAR_MULTIPLY_LAMBDA; return SIMPLICITY_NO_ERROR;\n        case 29: *result = SCALAR_INVERT; return SIMPLICITY_NO_ERROR;\n        case 30: *result = SCALAR_IS_ZERO; return SIMPLICITY_NO_ERROR;\n        case 35: *result = FE_NORMALIZE; return SIMPLICITY_NO_ERROR;\n        case 36: *result = FE_NEGATE; return SIMPLICITY_NO_ERROR;\n        case 37: *result = FE_ADD; return SIMPLICITY_NO_ERROR;\n        case 38: *result = FE_SQUARE; return SIMPLICITY_NO_ERROR;\n        case 39: *result = FE_MULTIPLY; return SIMPLICITY_NO_ERROR;\n        case 40: *result = FE_MULTIPLY_BETA; return SIMPLICITY_NO_ERROR;\n        case 41: *result = FE_INVERT; return SIMPLICITY_NO_ERROR;\n        case 42: *result = FE_SQUARE_ROOT; return SIMPLICITY_NO_ERROR;\n        case 43: *result = FE_IS_ZERO; return SIMPLICITY_NO_ERROR;\n        case 44: *result = FE_IS_ODD; return SIMPLICITY_NO_ERROR;\n        case 46: *result = HASH_TO_CURVE; return SIMPLICITY_NO_ERROR;\n        case 47: *result = SWU; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n    case 5:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = CHECK_SIG_VERIFY; return SIMPLICITY_NO_ERROR;\n        case 2: *result = BIP_0340_VERIFY; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n    case 7:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = PARSE_LOCK; return SIMPLICITY_NO_ERROR;\n        case 2: *result = PARSE_SEQUENCE; return SIMPLICITY_NO_ERROR;\n        case 3: *result = TAPDATA_INIT; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n  }\n}"
  },
  {
    "path": "C/deserialize.c",
    "content": "#include \"deserialize.h\"\n\n#include <limits.h>\n#include \"limitations.h\"\n#include \"simplicity_alloc.h\"\n#include \"simplicity_assert.h\"\n\n/* Fetches 'len' 'uint32_t's from 'stream' into 'result'.\n * The bits in each 'uint32_t' are set from the MSB to the LSB and the 'uint32_t's of 'result' are set from 0 up to 'len'.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_EOF' if not enough bits are available ('result' may be modified).\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: uint32_t result[len];\n *               NULL != stream\n */\nstatic simplicity_err getWord32Array(uint32_t* result, const size_t len, bitstream* stream) {\n  for (size_t i = 0; i < len; ++i) {\n    /* Due to error codes, readNBits cannot fetch 32 bits at once. Instead we fetch two groups of 16 bits. */\n    int32_t bits16 = simplicity_readNBits(16, stream);\n    if (bits16 < 0) return (simplicity_err)bits16;\n    result[i] = (uint32_t)bits16 << 16;\n    bits16 = simplicity_readNBits(16, stream);\n    if (bits16 < 0) return (simplicity_err)bits16;\n    result[i] |= (uint32_t)bits16;\n  }\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* Fetches a 256-bit hash value from 'stream' into 'result'.\n * Returns 'SIMPLICITY_ERR_BITSTREAM_EOF' if not enough bits are available ('result' may be modified).\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: NULL != result\n *               NULL != stream\n */\nstatic simplicity_err getHash(sha256_midstate* result, bitstream* stream) {\n  return getWord32Array(result->s, 8, stream);\n}\n\n\n/* Decode a single node of a Simplicity dag from 'stream' into 'dag'['i'].\n * Returns 'SIMPLICITY_ERR_FAIL_CODE' if the encoding of a fail expression is encountered\n *   (all fail subexpressions ought to have been pruned prior to serialization).\n * Returns 'SIMPLICITY_ERR_RESERVED_CODE' if a reserved codeword is encountered.\n * Returns 'SIMPLICITY_ERR_HIDDEN' if the decoded node has a HIDDEN child in a position where it is not allowed.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the node's child isn't a reference to one of the preceding nodes.\n *                                            or some encoding for a non-existent jet is encountered\n *                                            or the size of a WORD encoding is greater than 2^31 bits.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'dag' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: dag_node dag[i + 1];\n *               i < 2^31 - 1\n *               NULL != stream\n */\nstatic simplicity_err decodeNode(dag_node* dag, simplicity_callback_decodeJet decodeJet, uint_fast32_t i, bitstream* stream) {\n  int32_t bit = read1Bit(stream);\n  if (bit < 0) return (simplicity_err)bit;\n  dag[i] = (dag_node){0};\n  if (bit) {\n    bit = read1Bit(stream);\n    if (bit < 0) return (simplicity_err)bit;\n    if (bit) {\n      return decodeJet(&dag[i], stream);\n    } else {\n      /* Decode WORD. */\n      int32_t depth = simplicity_decodeUptoMaxInt(stream);\n      if (depth < 0) return (simplicity_err)depth;\n      if (32 < depth) return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n      {\n        simplicity_err error = simplicity_readBitstring(&dag[i].compactValue, (size_t)1 << (depth - 1), stream);\n        if (!IS_OK(error)) return error;\n      }\n      dag[i].tag = WORD;\n      dag[i].targetIx = (size_t)depth;\n      dag[i].cmr = simplicity_computeWordCMR(&dag[i].compactValue, (size_t)(depth - 1));\n    }\n  } else {\n    int32_t code = simplicity_readNBits(2, stream);\n    if (code < 0) return (simplicity_err)code;\n    int32_t subcode = simplicity_readNBits(code < 3 ? 2 : 1, stream);\n    if (subcode < 0) return (simplicity_err)subcode;\n    for (int32_t j = 0; j < 2 - code; ++j) {\n      int32_t ix = simplicity_decodeUptoMaxInt(stream);\n      if (ix < 0) return (simplicity_err)ix;\n      if (i < (uint_fast32_t)ix) return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n      dag[i].child[j] = i - (uint_fast32_t)ix;\n    }\n    switch (code) {\n     case 0:\n      switch (subcode) {\n       case 0: dag[i].tag = COMP; break;\n       case 1:\n        dag[i].tag = (HIDDEN == dag[dag[i].child[0]].tag) ? ASSERTR\n                   : (HIDDEN == dag[dag[i].child[1]].tag) ? ASSERTL\n                   : CASE;\n        break;\n       case 2: dag[i].tag = PAIR; break;\n       case 3: dag[i].tag = DISCONNECT; break;\n      }\n      break;\n     case 1:\n      switch (subcode) {\n       case 0: dag[i].tag = INJL; break;\n       case 1: dag[i].tag = INJR; break;\n       case 2: dag[i].tag = TAKE; break;\n       case 3: dag[i].tag = DROP; break;\n      }\n      break;\n     case 2:\n      switch (subcode) {\n       case 0: dag[i].tag = IDEN; break;\n       case 1: dag[i].tag = UNIT; break;\n       case 2: return SIMPLICITY_ERR_FAIL_CODE;\n       case 3: return SIMPLICITY_ERR_RESERVED_CODE;\n      }\n      break;\n     case 3:\n      switch (subcode) {\n       case 0:\n        dag[i].tag = HIDDEN;\n        return getHash(&(dag[i].cmr), stream);\n       case 1:\n        dag[i].tag = WITNESS;\n        break;\n      }\n      break;\n    }\n\n    /* Verify that there are no illegal HIDDEN children. */\n    for (int32_t j = 0; j < 2 - code; ++j) {\n       if (HIDDEN == dag[dag[i].child[j]].tag && dag[i].tag != (j ? ASSERTL : ASSERTR)) return SIMPLICITY_ERR_HIDDEN;\n    }\n\n    simplicity_computeCommitmentMerkleRoot(dag, i);\n  }\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* Decode a Simplicity DAG consisting of 'len' nodes from 'stream' into 'dag'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if some node's child isn't a reference to one of the preceding nodes.\n * Returns 'SIMPLICITY_ERR_FAIL_CODE' if the encoding of a fail expression is encountered\n *   (all fail subexpressions ought to have been pruned prior to deserialization).\n * Returns 'SIMPLICITY_ERR_RESERVED_CODE' if a reserved codeword is encountered.\n * Returns 'SIMPLICITY_ERR_HIDDEN' if the decoded node has a HIDDEN child in a position where it is not allowed.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'dag' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: dag_node dag[len];\n *               len < 2^31\n *               NULL != stream\n */\nstatic simplicity_err decodeDag(dag_node* dag, simplicity_callback_decodeJet decodeJet, const uint_fast32_t len, combinator_counters* census, bitstream* stream) {\n  for (uint_fast32_t i = 0; i < len; ++i) {\n    simplicity_err error = decodeNode(dag, decodeJet, i, stream);\n    if (!IS_OK(error)) return error;\n\n    enumerator(census, dag[i].tag);\n  }\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* Decode a length-prefixed Simplicity DAG from 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' the length prefix's value is too large.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if some node's child isn't a reference to one of the preceding nodes.\n * Returns 'SIMPLICITY_ERR_FAIL_CODE' if the encoding of a fail expression is encountered\n *  (all fail subexpressions ought to have been pruned prior to deserialization).\n * Returns 'SIMPLICITY_ERR_RESERVED_CODE' if a reserved codeword is encountered.\n * Returns 'SIMPLICITY_ERR_HIDDEN' if the decoded node has a HIDDEN child in a position where it is not allowed.\n * Returns 'SIMPLICITY_ERR_HIDDEN_ROOT' if the root of the DAG is a HIDDEN node.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_ORDER' if nodes are not serialized in the canonical order.\n * Returns 'SIMPLICITY_ERR_MALLOC' if malloc fails.\n * In the above error cases, '*dag' is set to NULL.\n * If successful, returns a positive value equal to the length of an allocated array of (*dag).\n *\n * Precondition: NULL != dag\n *               NULL != stream\n *\n * Postcondition: if the return value of the function is positive\n *                  then (dag_node (*dag)[return_value] and '*dag' is a well-formed dag without witness data);\n *                '*census' contains a tally of the different tags that occur in 'dag' when the return value\n *                          of the function is positive and when NULL != census;\n *                NULL == *dag when the return value is negative.\n */\nint_fast32_t simplicity_decodeMallocDag(dag_node** dag, simplicity_callback_decodeJet decodeJet, combinator_counters* census, bitstream* stream) {\n  *dag = NULL;\n  int32_t dagLen = simplicity_decodeUptoMaxInt(stream);\n  if (dagLen <= 0) return dagLen;\n  static_assert(DAG_LEN_MAX <= (uint32_t)INT32_MAX, \"DAG_LEN_MAX exceeds supported parsing range.\");\n  if (DAG_LEN_MAX < (uint32_t)dagLen) return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n  static_assert(DAG_LEN_MAX <= SIZE_MAX / sizeof(dag_node), \"dag array too large.\");\n  static_assert(1 <= DAG_LEN_MAX, \"DAG_LEN_MAX is zero.\");\n  static_assert(DAG_LEN_MAX - 1 <= UINT32_MAX, \"dag array index does not fit in uint32_t.\");\n  *dag = simplicity_malloc((size_t)dagLen * sizeof(dag_node));\n  if (!*dag) return SIMPLICITY_ERR_MALLOC;\n\n  if (census) *census = (combinator_counters){0};\n  simplicity_err error = decodeDag(*dag, decodeJet, (uint_fast32_t)dagLen, census, stream);\n\n  if (IS_OK(error)) {\n    error = HIDDEN == (*dag)[dagLen - 1].tag\n          ? SIMPLICITY_ERR_HIDDEN_ROOT\n          : simplicity_verifyCanonicalOrder(*dag, (uint_fast32_t)(dagLen));\n  }\n\n  if (IS_OK(error)) {\n    return dagLen;\n  } else {\n    simplicity_free(*dag);\n    *dag = NULL;\n    return (int_fast32_t)error;\n  }\n}\n"
  },
  {
    "path": "C/deserialize.h",
    "content": "/* This module provides functions for deserializing Simplicity's bit-wise prefix coding. */\n#ifndef SIMPLICITY_DESERIALIZE_H\n#define SIMPLICITY_DESERIALIZE_H\n\n#include <simplicity/errorCodes.h>\n#include \"bitstream.h\"\n#include \"dag.h\"\n\n/* Decode an application specific jet from 'stream' into 'node'.\n * All jets begin with a bit prefix of '1' which needs to have already been consumed from the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the stream's prefix doesn't match any valid code for a jet.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'dag' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: NULL != node\n *               NULL != stream\n */\ntypedef simplicity_err (*simplicity_callback_decodeJet)(dag_node* node, bitstream* stream);\n\n/* Decode a length-prefixed Simplicity DAG from 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' the length prefix's value is too large.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if some node's child isn't a reference to one of the preceding nodes.\n * Returns 'SIMPLICITY_ERR_FAIL_CODE' if the encoding of a fail expression is encountered\n *  (all fail subexpressions ought to have been pruned prior to deserialization).\n * Returns 'SIMPLICITY_ERR_RESERVED_CODE' if a reserved codeword is encountered.\n * Returns 'SIMPLICITY_ERR_HIDDEN' if the decoded node has a HIDDEN child in a position where it is not allowed.\n * Returns 'SIMPLICITY_ERR_HIDDEN_ROOT' if the root of the DAG is a HIDDEN node.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * Returns 'SIMPLICITY_ERR_MALLOC' if malloc fails.\n * In the above error cases, '*dag' is set to NULL.\n * If successful, returns a positive value equal to the length of an allocated array of (*dag).\n *\n * Precondition: NULL != dag\n *               NULL != stream\n *\n * Postcondition: if the return value of the function is positive\n *                  then (dag_node (*dag)[return_value] and '*dag' is a well-formed dag without witness data);\n *                '*census' contains a tally of the different tags that occur in 'dag' when the return value\n *                          of the function is positive and when NULL != census;\n *                NULL == *dag when the return value is negative.\n */\nint_fast32_t simplicity_decodeMallocDag(dag_node** dag, simplicity_callback_decodeJet decodeJet, combinator_counters* census, bitstream* stream);\n\n#endif\n"
  },
  {
    "path": "C/elements/checkSigHashAllTx1.c",
    "content": "#include \"checkSigHashAllTx1.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     Simplicity.Programs.CheckSig.Lib.checkSigVerify' Simplicity.Elements.Programs.SigHash.Lib.sigAllHash\n *     (Simplicity.LibSecp256k1.Spec.PubKey 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63)\n *     (Simplicity.LibSecp256k1.Spec.Sig 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n *                                       0xcb176adea9659b35a79d44c78b940b363d0d6b6356b9ac8bb1dd1fbe9ba36986)\n * with jets.\n */\nconst unsigned char elementsCheckSigHashAllTx1[] = {\n  0xd3, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x78, 0xce, 0x56, 0x3f, 0x89, 0xa0,\n  0xed, 0x94, 0x14, 0xf5, 0xaa, 0x28, 0xad, 0x0d, 0x96, 0xd6, 0x79, 0x5f, 0x9c, 0x63, 0x47, 0x07, 0x02, 0xc0, 0xe2, 0x8d,\n  0x88, 0x10\n};\n\nconst size_t sizeof_elementsCheckSigHashAllTx1 = sizeof(elementsCheckSigHashAllTx1);\nconst unsigned char elementsCheckSigHashAllTx1_witness[] = {\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x78, 0xce, 0x56, 0x3f, 0x89, 0xa0, 0xed, 0x94,\n  0x14, 0xf5, 0xaa, 0x28, 0xad, 0x0d, 0x96, 0xd6, 0x79, 0x5f, 0x9c, 0x63, 0xcb, 0x17, 0x6a, 0xde, 0xa9, 0x65, 0x9b, 0x35,\n  0xa7, 0x9d, 0x44, 0xc7, 0x8b, 0x94, 0x0b, 0x36, 0x3d, 0x0d, 0x6b, 0x63, 0x56, 0xb9, 0xac, 0x8b, 0xb1, 0xdd, 0x1f, 0xbe,\n  0x9b, 0xa3, 0x69, 0x86\n};\n\nconst size_t sizeof_elementsCheckSigHashAllTx1_witness = sizeof(elementsCheckSigHashAllTx1_witness);\n\n/* The commitment Merkle root of the above elementsCheckSigHashAllTx1 Simplicity expression. */\nconst uint32_t elementsCheckSigHashAllTx1_cmr[] = {\n  0xf3cd4537u, 0xd7ebb201u, 0x73220319u, 0x5b30b549u, 0xb8dc0c2cu, 0x6257b3a0u, 0xd53bedb0u, 0x8ea02874u\n};\n\n/* The identity hash of the root of the above elementsCheckSigHashAllTx1 Simplicity expression. */\nconst uint32_t elementsCheckSigHashAllTx1_ihr[] = {\n  0xd3a5130du, 0xf6abce06u, 0x51eb717au, 0x6dd04222u, 0xb7517651u, 0x9117ec5cu, 0x07bb9edbu, 0xac335e1bu\n};\n\n/* The annotated Merkle root of the above elementsCheckSigHashAllTx1 Simplicity expression. */\nconst uint32_t elementsCheckSigHashAllTx1_amr[] = {\n  0xb1a514f7u, 0x85458faeu, 0x8e900fefu, 0x45e97fa6u, 0xaa8276deu, 0x181f0a9du, 0x448a10adu, 0x6c38034du\n};\n\n/* The cost of the above elementsCheckSigHashAllTx1 Simplicity expression in milli weight units. */\nconst ubounded elementsCheckSigHashAllTx1_cost = 54361;\n"
  },
  {
    "path": "C/elements/checkSigHashAllTx1.h",
    "content": "#ifndef SIMPLICITY_ELEMENTS_CHECKSIGHASHALLTX1_H\n#define SIMPLICITY_ELEMENTS_CHECKSIGHASHALLTX1_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"../bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     Simplicity.Programs.CheckSig.Lib.checkSigVerify' Simplicity.Elements.Programs.SigHash.Lib.sigAllHash\n *     (Simplicity.LibSecp256k1.Spec.PubKey 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63)\n *     (Simplicity.LibSecp256k1.Spec.Sig 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n *                                       0xcb176adea9659b35a79d44c78b940b363d0d6b6356b9ac8bb1dd1fbe9ba36986)\n * with jets.\n */\nextern const unsigned char elementsCheckSigHashAllTx1[];\nextern const size_t sizeof_elementsCheckSigHashAllTx1;\nextern const unsigned char elementsCheckSigHashAllTx1_witness[];\nextern const size_t sizeof_elementsCheckSigHashAllTx1_witness;\n\n/* The commitment Merkle root of the above elementsCheckSigHashAllTx1 Simplicity expression. */\nextern const uint32_t elementsCheckSigHashAllTx1_cmr[];\n\n/* The identity hash of the root of the above elementsCheckSigHashAllTx1 Simplicity expression. */\nextern const uint32_t elementsCheckSigHashAllTx1_ihr[];\n\n/* The annotated Merkle root of the above elementsCheckSigHashAllTx1 Simplicity expression. */\nextern const uint32_t elementsCheckSigHashAllTx1_amr[];\n\n/* The cost of the above elementsCheckSigHashAllTx1 Simplicity expression in milli weight units. */\nextern const ubounded elementsCheckSigHashAllTx1_cost;\n\n#endif\n"
  },
  {
    "path": "C/elements/cmr.c",
    "content": "#include <simplicity/elements/cmr.h>\n\n#include \"../deserialize.h\"\n#include \"../limitations.h\"\n#include \"../simplicity_alloc.h\"\n#include \"../simplicity_assert.h\"\n#include \"primitive.h\"\n\n/* Deserialize a Simplicity 'program' and compute its CMR.\n *\n * Caution: no typechecking is performed, only a well-formedness check.\n *\n * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned,\n * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value.\n *\n * If the operation completes successfully then '*error' is set to 'SIMPLICITY_NO_ERROR', and the 'cmr' array is filled in with the program's computed CMR.\n *\n * Precondition: NULL != error;\n *               unsigned char cmr[32]\n *               unsigned char program[program_len]\n */\nbool simplicity_elements_computeCmr( simplicity_err* error, unsigned char* cmr\n                                   , const unsigned char* program, size_t program_len) {\n  simplicity_assert(NULL != error);\n  simplicity_assert(NULL != cmr);\n  simplicity_assert(NULL != program || 0 == program_len);\n\n  bitstream stream = initializeBitstream(program, program_len);\n  dag_node* dag = NULL;\n  int_fast32_t dag_len = simplicity_decodeMallocDag(&dag, simplicity_elements_decodeJet, NULL, &stream);\n  if (dag_len <= 0) {\n    simplicity_assert(dag_len < 0);\n    *error = (simplicity_err)dag_len;\n  } else {\n    simplicity_assert(NULL != dag);\n    simplicity_assert((uint_fast32_t)dag_len <= DAG_LEN_MAX);\n    *error = simplicity_closeBitstream(&stream);\n    sha256_fromMidstate(cmr, dag[dag_len-1].cmr.s);\n  }\n\n  simplicity_free(dag);\n  return IS_PERMANENT(*error);\n}\n"
  },
  {
    "path": "C/elements/decodeElementsJets.inc",
    "content": "/* This file has been automatically generated. */\n\n{\n  int32_t code;\n  code = simplicity_decodeUptoMaxInt(stream);\n  if (code < 0) return (simplicity_err)code;\n  switch (code) {\n    case 1:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = SIG_ALL_HASH; return SIMPLICITY_NO_ERROR;\n        case 2: *result = TX_HASH; return SIMPLICITY_NO_ERROR;\n        case 3: *result = TAP_ENV_HASH; return SIMPLICITY_NO_ERROR;\n        case 4: *result = OUTPUTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 5: *result = INPUTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 6: *result = ISSUANCES_HASH; return SIMPLICITY_NO_ERROR;\n        case 7: *result = INPUT_UTXOS_HASH; return SIMPLICITY_NO_ERROR;\n        case 8: *result = OUTPUT_HASH; return SIMPLICITY_NO_ERROR;\n        case 9: *result = OUTPUT_AMOUNTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 10: *result = OUTPUT_SCRIPTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 11: *result = OUTPUT_NONCES_HASH; return SIMPLICITY_NO_ERROR;\n        case 12: *result = OUTPUT_RANGE_PROOFS_HASH; return SIMPLICITY_NO_ERROR;\n        case 13: *result = OUTPUT_SURJECTION_PROOFS_HASH; return SIMPLICITY_NO_ERROR;\n        case 14: *result = INPUT_HASH; return SIMPLICITY_NO_ERROR;\n        case 15: *result = INPUT_OUTPOINTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 16: *result = INPUT_SEQUENCES_HASH; return SIMPLICITY_NO_ERROR;\n        case 17: *result = INPUT_ANNEXES_HASH; return SIMPLICITY_NO_ERROR;\n        case 18: *result = INPUT_SCRIPT_SIGS_HASH; return SIMPLICITY_NO_ERROR;\n        case 19: *result = ISSUANCE_HASH; return SIMPLICITY_NO_ERROR;\n        case 20: *result = ISSUANCE_ASSET_AMOUNTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 21: *result = ISSUANCE_TOKEN_AMOUNTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 22: *result = ISSUANCE_RANGE_PROOFS_HASH; return SIMPLICITY_NO_ERROR;\n        case 23: *result = ISSUANCE_BLINDING_ENTROPY_HASH; return SIMPLICITY_NO_ERROR;\n        case 24: *result = INPUT_UTXO_HASH; return SIMPLICITY_NO_ERROR;\n        case 25: *result = INPUT_AMOUNTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 26: *result = INPUT_SCRIPTS_HASH; return SIMPLICITY_NO_ERROR;\n        case 27: *result = TAPLEAF_HASH; return SIMPLICITY_NO_ERROR;\n        case 28: *result = TAPPATH_HASH; return SIMPLICITY_NO_ERROR;\n        case 29: *result = OUTPOINT_HASH; return SIMPLICITY_NO_ERROR;\n        case 30: *result = ASSET_AMOUNT_HASH; return SIMPLICITY_NO_ERROR;\n        case 31: *result = NONCE_HASH; return SIMPLICITY_NO_ERROR;\n        case 32: *result = ANNEX_HASH; return SIMPLICITY_NO_ERROR;\n        case 33: *result = BUILD_TAPLEAF_SIMPLICITY; return SIMPLICITY_NO_ERROR;\n        case 34: *result = BUILD_TAPBRANCH; return SIMPLICITY_NO_ERROR;\n        case 35: *result = BUILD_TAPTWEAK; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n    case 2:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = CHECK_LOCK_HEIGHT; return SIMPLICITY_NO_ERROR;\n        case 2: *result = CHECK_LOCK_TIME; return SIMPLICITY_NO_ERROR;\n        case 3: *result = BROKEN_DO_NOT_USE_CHECK_LOCK_DISTANCE; return SIMPLICITY_NO_ERROR;\n        case 4: *result = BROKEN_DO_NOT_USE_CHECK_LOCK_DURATION; return SIMPLICITY_NO_ERROR;\n        case 5: *result = TX_LOCK_HEIGHT; return SIMPLICITY_NO_ERROR;\n        case 6: *result = TX_LOCK_TIME; return SIMPLICITY_NO_ERROR;\n        case 7: *result = BROKEN_DO_NOT_USE_TX_LOCK_DISTANCE; return SIMPLICITY_NO_ERROR;\n        case 8: *result = BROKEN_DO_NOT_USE_TX_LOCK_DURATION; return SIMPLICITY_NO_ERROR;\n        case 9: *result = TX_IS_FINAL; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n    case 3:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = ISSUANCE; return SIMPLICITY_NO_ERROR;\n        case 2: *result = ISSUANCE_ASSET; return SIMPLICITY_NO_ERROR;\n        case 3: *result = ISSUANCE_TOKEN; return SIMPLICITY_NO_ERROR;\n        case 4: *result = ISSUANCE_ENTROPY; return SIMPLICITY_NO_ERROR;\n        case 5: *result = CALCULATE_ISSUANCE_ENTROPY; return SIMPLICITY_NO_ERROR;\n        case 6: *result = CALCULATE_ASSET; return SIMPLICITY_NO_ERROR;\n        case 7: *result = CALCULATE_EXPLICIT_TOKEN; return SIMPLICITY_NO_ERROR;\n        case 8: *result = CALCULATE_CONFIDENTIAL_TOKEN; return SIMPLICITY_NO_ERROR;\n        case 9: *result = LBTC_ASSET; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n    case 4:\n      code = simplicity_decodeUptoMaxInt(stream);\n      if (code < 0) return (simplicity_err)code;\n      switch (code) {\n        case 1: *result = SCRIPT_CMR; return SIMPLICITY_NO_ERROR;\n        case 2: *result = INTERNAL_KEY; return SIMPLICITY_NO_ERROR;\n        case 3: *result = CURRENT_INDEX; return SIMPLICITY_NO_ERROR;\n        case 4: *result = NUM_INPUTS; return SIMPLICITY_NO_ERROR;\n        case 5: *result = NUM_OUTPUTS; return SIMPLICITY_NO_ERROR;\n        case 6: *result = LOCK_TIME; return SIMPLICITY_NO_ERROR;\n        case 7: *result = OUTPUT_ASSET; return SIMPLICITY_NO_ERROR;\n        case 8: *result = OUTPUT_AMOUNT; return SIMPLICITY_NO_ERROR;\n        case 9: *result = OUTPUT_NONCE; return SIMPLICITY_NO_ERROR;\n        case 10: *result = OUTPUT_SCRIPT_HASH; return SIMPLICITY_NO_ERROR;\n        case 11: *result = OUTPUT_NULL_DATUM; return SIMPLICITY_NO_ERROR;\n        case 12: *result = OUTPUT_IS_FEE; return SIMPLICITY_NO_ERROR;\n        case 13: *result = OUTPUT_SURJECTION_PROOF; return SIMPLICITY_NO_ERROR;\n        case 14: *result = OUTPUT_RANGE_PROOF; return SIMPLICITY_NO_ERROR;\n        case 15: *result = TOTAL_FEE; return SIMPLICITY_NO_ERROR;\n        case 16: *result = CURRENT_PEGIN; return SIMPLICITY_NO_ERROR;\n        case 17: *result = CURRENT_PREV_OUTPOINT; return SIMPLICITY_NO_ERROR;\n        case 18: *result = CURRENT_ASSET; return SIMPLICITY_NO_ERROR;\n        case 19: *result = CURRENT_AMOUNT; return SIMPLICITY_NO_ERROR;\n        case 20: *result = CURRENT_SCRIPT_HASH; return SIMPLICITY_NO_ERROR;\n        case 21: *result = CURRENT_SEQUENCE; return SIMPLICITY_NO_ERROR;\n        case 22: *result = CURRENT_ANNEX_HASH; return SIMPLICITY_NO_ERROR;\n        case 23: *result = CURRENT_SCRIPT_SIG_HASH; return SIMPLICITY_NO_ERROR;\n        case 24: *result = CURRENT_REISSUANCE_BLINDING; return SIMPLICITY_NO_ERROR;\n        case 25: *result = CURRENT_NEW_ISSUANCE_CONTRACT; return SIMPLICITY_NO_ERROR;\n        case 26: *result = CURRENT_REISSUANCE_ENTROPY; return SIMPLICITY_NO_ERROR;\n        case 27: *result = CURRENT_ISSUANCE_ASSET_AMOUNT; return SIMPLICITY_NO_ERROR;\n        case 28: *result = CURRENT_ISSUANCE_TOKEN_AMOUNT; return SIMPLICITY_NO_ERROR;\n        case 29: *result = CURRENT_ISSUANCE_ASSET_PROOF; return SIMPLICITY_NO_ERROR;\n        case 30: *result = CURRENT_ISSUANCE_TOKEN_PROOF; return SIMPLICITY_NO_ERROR;\n        case 31: *result = INPUT_PEGIN; return SIMPLICITY_NO_ERROR;\n        case 32: *result = INPUT_PREV_OUTPOINT; return SIMPLICITY_NO_ERROR;\n        case 33: *result = INPUT_ASSET; return SIMPLICITY_NO_ERROR;\n        case 34: *result = INPUT_AMOUNT; return SIMPLICITY_NO_ERROR;\n        case 35: *result = INPUT_SCRIPT_HASH; return SIMPLICITY_NO_ERROR;\n        case 36: *result = INPUT_SEQUENCE; return SIMPLICITY_NO_ERROR;\n        case 37: *result = INPUT_ANNEX_HASH; return SIMPLICITY_NO_ERROR;\n        case 38: *result = INPUT_SCRIPT_SIG_HASH; return SIMPLICITY_NO_ERROR;\n        case 39: *result = REISSUANCE_BLINDING; return SIMPLICITY_NO_ERROR;\n        case 40: *result = NEW_ISSUANCE_CONTRACT; return SIMPLICITY_NO_ERROR;\n        case 41: *result = REISSUANCE_ENTROPY; return SIMPLICITY_NO_ERROR;\n        case 42: *result = ISSUANCE_ASSET_AMOUNT; return SIMPLICITY_NO_ERROR;\n        case 43: *result = ISSUANCE_TOKEN_AMOUNT; return SIMPLICITY_NO_ERROR;\n        case 44: *result = ISSUANCE_ASSET_PROOF; return SIMPLICITY_NO_ERROR;\n        case 45: *result = ISSUANCE_TOKEN_PROOF; return SIMPLICITY_NO_ERROR;\n        case 46: *result = TAPLEAF_VERSION; return SIMPLICITY_NO_ERROR;\n        case 47: *result = TAPPATH; return SIMPLICITY_NO_ERROR;\n        case 48: *result = VERSION; return SIMPLICITY_NO_ERROR;\n        case 49: *result = GENESIS_BLOCK_HASH; return SIMPLICITY_NO_ERROR;\n        case 50: *result = TRANSACTION_ID; return SIMPLICITY_NO_ERROR;\n      }\n      break;\n  }\n}"
  },
  {
    "path": "C/elements/elementsJets.c",
    "content": "#include \"elementsJets.h\"\n\n#include \"ops.h\"\n#include \"txEnv.h\"\n#include \"../taptweak.h\"\n#include \"../simplicity_assert.h\"\n\n/* Read a 256-bit hash value from the 'src' frame, advancing the cursor 256 cells.\n *\n * Precondition: '*src' is a valid read frame for 256 more cells;\n *               NULL != h;\n */\nstatic void readHash(sha256_midstate* h, frameItem *src) {\n  read32s(h->s, 8, src);\n}\n\n/* Write a 256-bit hash value to the 'dst' frame, advancing the cursor 256 cells.\n *\n * Precondition: '*dst' is a valid write frame for 256 more cells;\n *               NULL != h;\n */\nstatic void writeHash(frameItem* dst, const sha256_midstate* h) {\n  write32s(dst, h->s, 8);\n}\n\n/* Write an outpoint value to the 'dst' frame, advancing the cursor 288 cells.\n *\n * Precondition: '*dst' is a valid write frame for 288 more cells;\n *               NULL != op;\n */\nstatic void prevOutpoint(frameItem* dst, const outpoint* op) {\n  writeHash(dst, &op->txid);\n  simplicity_write32(dst, op->ix);\n}\n\n/* Write an confidential asset to the 'dst' frame, advancing the cursor 258 cells.\n *\n * Precondition: '*dst' is a valid write frame for 258 more cells;\n *               NULL != asset;\n */\nstatic void asset(frameItem* dst, const confidential* asset) {\n  if (writeBit(dst, EXPLICIT == asset->prefix)) {\n    skipBits(dst, 1);\n  } else {\n    writeBit(dst, ODD_Y == asset->prefix);\n  }\n  writeHash(dst, &asset->data);\n}\n\n/* Write an confidential amount to the 'dst' frame, advancing the cursor 258 cells.\n *\n * Precondition: '*dst' is a valid write frame for 258 more cells;\n *               NULL != amt;\n */\nstatic void amt(frameItem* dst, const confAmount* amt) {\n  if (writeBit(dst, EXPLICIT == amt->prefix)) {\n    skipBits(dst, 1 + 256 - 64);\n    simplicity_write64(dst, amt->explicit);\n  } else {\n    writeBit(dst, ODD_Y == amt->prefix);\n    writeHash(dst, &amt->confidential);\n  }\n}\n\n/* Write an optional confidential nonce to the 'dst' frame, advancing the cursor 259 cells.\n *\n * Precondition: '*dst' is a valid write frame for 259 more cells;\n *               NULL != nonce;\n */\nstatic void nonce(frameItem* dst, const confidential* nonce) {\n  if (writeBit(dst, NONE != nonce->prefix)) {\n    if (writeBit(dst, EXPLICIT == nonce->prefix)) {\n      skipBits(dst, 1);\n    } else {\n      writeBit(dst, ODD_Y == nonce->prefix);\n    }\n    writeHash(dst, &nonce->data);\n  } else {\n    skipBits(dst, 1+1+256);\n  }\n}\n\n/* Write an optional 'blindingNonce' from an 'assetIssuance' to the 'dst' frame, advancing the cursor 257 cells.\n *\n * Precondition: '*dst' is a valid write frame for 257 more cells;\n *               NULL != issuance;\n */\nstatic void reissuanceBlinding(frameItem* dst, const assetIssuance* issuance) {\n  if (writeBit(dst, REISSUANCE == issuance->type)) {\n    writeHash(dst, &issuance->blindingNonce);\n  } else {\n    skipBits(dst, 256);\n  }\n}\n\n/* Write an optional 'contractHash' from an 'assetIssuance' to the 'dst' frame, advancing the cursor 257 cells.\n *\n * Precondition: '*dst' is a valid write frame for 257 more cells;\n *               NULL != issuance;\n */\nstatic void newIssuanceContract(frameItem* dst, const assetIssuance* issuance) {\n  if (writeBit(dst, NEW_ISSUANCE == issuance->type)) {\n    writeHash(dst, &issuance->contractHash);\n  } else {\n    skipBits(dst, 256);\n  }\n}\n\n/* Write an optional 'entropy' from an 'assetIssuance' to the 'dst' frame, advancing the cursor 257 cells.\n *\n * Precondition: '*dst' is a valid write frame for 257 more cells;\n *               NULL != issuance;\n */\nstatic void reissuanceEntropy(frameItem* dst, const assetIssuance* issuance) {\n  if (writeBit(dst, REISSUANCE == issuance->type)) {\n    writeHash(dst, &issuance->entropy);\n  } else {\n    skipBits(dst, 256);\n  }\n}\n\n/* Write an optional confidential asset amount from an 'assetIssuance' to the 'dst' frame, advancing the cursor 259 cells.\n *\n * Precondition: '*dst' is a valid write frame for 259 more cells;\n *               NULL != issuance;\n */\nstatic void issuanceAssetAmt(frameItem* dst, const assetIssuance* issuance) {\n  if (writeBit(dst, NO_ISSUANCE != issuance->type)) {\n    amt(dst, &issuance->assetAmt);\n  } else {\n    skipBits(dst, 258);\n  }\n}\n\n/* Write an optional confidential token amount from an 'assetIssuance' to the 'dst' frame, advancing the cursor.\n *\n * Precondition: '*dst' is a valid write frame for 259 more cells;\n *               NULL != issuance;\n */\nstatic void issuanceTokenAmt(frameItem* dst, const assetIssuance* issuance) {\n  if (writeBit(dst, NO_ISSUANCE != issuance->type)) {\n    amt(dst, NEW_ISSUANCE == issuance->type ? &issuance->tokenAmt : &(confAmount){ .prefix = EXPLICIT, .explicit = 0});\n  } else {\n    skipBits(dst, 258);\n  }\n}\n\nstatic uint_fast32_t lockHeight(const elementsTransaction* tx) {\n  return !tx->isFinal && tx->lockTime < 500000000U ? tx->lockTime : 0;\n}\n\nstatic uint_fast32_t lockTime(const elementsTransaction* tx) {\n  return !tx->isFinal && 500000000U <= tx->lockTime ? tx->lockTime : 0;\n}\n\nstatic uint_fast16_t obsolete_lockDistance(const elementsTransaction* tx) {\n  return 2 <= tx->version ? tx->obsolete_lockDistance : 0;\n}\n\nstatic uint_fast16_t obsolete_lockDuration(const elementsTransaction* tx) {\n  return 2 <= tx->version ? tx->obsolete_lockDuration : 0;\n}\n\nstatic bool isFee(const sigOutput* output) {\n  /* As specified in https://github.com/ElementsProject/elements/blob/de942511a67c3a3fcbdf002a8ee7e9ba49679b78/src/primitives/transaction.h#L304-L307. */\n  return output->emptyScript && EXPLICIT == output->asset.prefix && EXPLICIT == output->amt.prefix;\n}\n\n/* Lookup the assetFee from a sorted array of feeOutputs by the given assetid, returning 0 if no entry is found.\n *\n * Precondition: NULL != assetid;\n *               feeOutputs is uniquely sorted by it asset.data.s field, which is to say\n *               for all 0 <= i < j < len,\n *                 0 < memcmp(feeOutputs[j]->asset.data.s, feeOutputs[i]->asset.data.s, sizeof(feeOutputs[i]->asset.data.s));\n */\nstatic uint_fast64_t lookup_fee(const sha256_midstate* assetid, const sigOutput* const * feeOutputs, uint_fast32_t len) {\n  /* This loop runs in O(log(len)) time. */\n  while(len) {\n    int cmp = memcmp(assetid->s, feeOutputs[len/2]->asset.data.s, sizeof(assetid->s));\n    if (0 == cmp) return feeOutputs[len/2]->assetFee;\n    if (0 < cmp) {\n      feeOutputs += len/2 + 1;\n      len -= len/2 + 1;\n    } else {\n      len /= 2;\n    }\n  }\n  return 0;\n}\n\n/* version : ONE |- TWO^32 */\nbool simplicity_version(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->version);\n  return true;\n}\n\n/* lock_time : ONE |- TWO^32 */\nbool simplicity_lock_time(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->lockTime);\n  return true;\n}\n\n/* input_pegin : TWO^32 |- S (S TWO^256) */\nbool simplicity_input_pegin(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    if (writeBit(dst, env->tx->input[i].isPegin)) {\n      writeHash(dst, &env->tx->input[i].pegin);\n    } else {\n      skipBits(dst, 256);\n    }\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* input_prev_outpoint : TWO^32 |- S (TWO^256 * TWO^32) */\nbool simplicity_input_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    prevOutpoint(dst, &env->tx->input[i].prevOutpoint);\n  } else {\n    skipBits(dst, 288);\n  }\n  return true;\n}\n\n/* input_asset : TWO^32 |- S (Conf TWO^256) */\nbool simplicity_input_asset(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    asset(dst, &env->tx->input[i].txo.asset);\n  } else {\n    skipBits(dst, 258);\n  }\n  return true;\n}\n\n/* input_amount : TWO^32 |- S (Conf TWO^256, Conf TWO^64) */\nbool simplicity_input_amount(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    asset(dst, &env->tx->input[i].txo.asset);\n    amt(dst, &env->tx->input[i].txo.amt);\n  } else {\n    skipBits(dst, 516);\n  }\n  return true;\n}\n\n/* input_script_hash : TWO^32 |- S TWO^256 */\nbool simplicity_input_script_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    writeHash(dst, &env->tx->input[i].txo.scriptPubKey);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* input_sequence : TWO^32 |- S TWO^32 */\nbool simplicity_input_sequence(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    simplicity_write32(dst, env->tx->input[i].sequence);\n  } else {\n    skipBits(dst, 32);\n  }\n  return true;\n}\n\n/* reissuance_blinding : TWO^32 |- S (S TWO^256) */\nbool simplicity_reissuance_blinding(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    reissuanceBlinding(dst, &env->tx->input[i].issuance);\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* new_issuance_contract : TWO^32 |- S (S TWO^256) */\nbool simplicity_new_issuance_contract(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    newIssuanceContract(dst, &env->tx->input[i].issuance);\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* reissuance_entropy : TWO^32 |- S (S TWO^256) */\nbool simplicity_reissuance_entropy(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    reissuanceEntropy(dst, &env->tx->input[i].issuance);\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* issuance_asset_amount : TWO^32 |- S (S (Conf TWO^64)) */\nbool simplicity_issuance_asset_amount(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    issuanceAssetAmt(dst, &env->tx->input[i].issuance);\n  } else {\n    skipBits(dst, 259);\n  }\n  return true;\n}\n\n/* issuance_token_amount : TWO^32 |- S (S (Conf TWO^64)) */\nbool simplicity_issuance_token_amount(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    issuanceTokenAmt(dst, &env->tx->input[i].issuance);\n  } else {\n    skipBits(dst, 259);\n  }\n  return true;\n}\n\n/* issuance_asset_proof : TWO^32 |- S TWO^256 */\nbool simplicity_issuance_asset_proof(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    writeHash(dst, &env->tx->input[i].issuance.assetRangeProofHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* issuance_token_proof : TWO^32 |- S TWO^256 */\nbool simplicity_issuance_token_proof(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    writeHash(dst, &env->tx->input[i].issuance.tokenRangeProofHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* input_annex_hash : TWO^32 |- S (S (TWO^256)) */\nbool simplicity_input_annex_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    if (writeBit(dst, env->tx->input[i].hasAnnex)) {\n      writeHash(dst, &env->tx->input[i].annexHash);\n    } else {\n      skipBits(dst, 256);\n    }\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* input_script_sig_hash : TWO^32 |- (S (TWO^256) */\nbool simplicity_input_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    writeHash(dst, &env->tx->input[i].scriptSigHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* output_asset : TWO^32 |- S (Conf TWO^256) */\nbool simplicity_output_asset(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    asset(dst, &env->tx->output[i].asset);\n  } else {\n    skipBits(dst, 258);\n  }\n  return true;\n}\n\n/* output_amount : TWO^32 |- S (Conf TWO^256, Conf TWO^64) */\nbool simplicity_output_amount(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    asset(dst, &env->tx->output[i].asset);\n    amt(dst, &env->tx->output[i].amt);\n  } else {\n    skipBits(dst, 516);\n  }\n  return true;\n}\n\n/* output_nonce : TWO^32 |- S (S (Conf TWO^256)) */\nbool simplicity_output_nonce(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    nonce(dst, &env->tx->output[i].nonce);\n  } else {\n    skipBits(dst, 259);\n  }\n  return true;\n}\n\n/* output_script_hash : TWO^32 |- S TWO^256 */\nbool simplicity_output_script_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    writeHash(dst, &env->tx->output[i].scriptPubKey);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* output_null_datum : TWO^32 * TWO^32 |- S (S (TWO^2 * TWO^256 + (TWO + TWO^4)))  */\nbool simplicity_output_null_datum(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs && env->tx->output[i].isNullData)) {\n    uint_fast32_t j = simplicity_read32(&src);\n    if (writeBit(dst, j < env->tx->output[i].pnd.len)) {\n      if (writeBit(dst, OP_PUSHDATA4 < env->tx->output[i].pnd.op[j].code)) {\n        skipBits(dst, 2 + 256 - 5);\n        if (writeBit(dst, OP_1 <= env->tx->output[i].pnd.op[j].code)) {\n          switch (env->tx->output[i].pnd.op[j].code) {\n            case OP_1 : writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 0); break;\n            case OP_2 : writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 1); break;\n            case OP_3 : writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 0); break;\n            case OP_4 : writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 1); break;\n            case OP_5 : writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 0); break;\n            case OP_6 : writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 1); break;\n            case OP_7 : writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 0); break;\n            case OP_8 : writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 1); break;\n            case OP_9 : writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 0); break;\n            case OP_10: writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 0); writeBit(dst, 1); break;\n            case OP_11: writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 0); break;\n            case OP_12: writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 1); writeBit(dst, 1); break;\n            case OP_13: writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 0); break;\n            case OP_14: writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 0); writeBit(dst, 1); break;\n            case OP_15: writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 0); break;\n            case OP_16: writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 1); writeBit(dst, 1); break;\n            default: SIMPLICITY_UNREACHABLE;\n          }\n        } else {\n          simplicity_debug_assert(OP_RESERVED == env->tx->output[i].pnd.op[j].code ||\n                 OP_1NEGATE == env->tx->output[i].pnd.op[j].code);\n          skipBits(dst, 3);\n          writeBit(dst, OP_RESERVED == env->tx->output[i].pnd.op[j].code);\n        }\n      } else {\n        switch (env->tx->output[i].pnd.op[j].code) {\n          case OP_IMMEDIATE: writeBit(dst, 0); writeBit(dst, 0); break;\n          case OP_PUSHDATA: writeBit(dst, 0); writeBit(dst, 1); break;\n          case OP_PUSHDATA2: writeBit(dst, 1); writeBit(dst, 0); break;\n          case OP_PUSHDATA4: writeBit(dst, 1); writeBit(dst, 1); break;\n          default: SIMPLICITY_UNREACHABLE;\n        }\n        writeHash(dst, &env->tx->output[i].pnd.op[j].dataHash);\n      }\n    } else {\n      skipBits(dst, 1 + 2 + 256);\n    }\n  } else {\n    skipBits(dst, 1 + 1 + 2 + 256);\n  }\n  return true;\n}\n\n/* output_is_fee : TWO^32 |- S TWO */\nbool simplicity_output_is_fee(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    writeBit(dst, isFee(&env->tx->output[i]));\n  } else {\n    skipBits(dst, 1);\n  }\n  return true;\n}\n\n/* output_surjection_proof : TWO^32 |- S TWO^256 */\nbool simplicity_output_surjection_proof(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    writeHash(dst, &env->tx->output[i].surjectionProofHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* output_range_proof : TWO^32 |- S TWO^256 */\nbool simplicity_output_range_proof(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    writeHash(dst, &env->tx->output[i].rangeProofHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* total_fee : TWO^256 |- TWO^64 */\nbool simplicity_total_fee(frameItem* dst, frameItem src, const txEnv* env) {\n  sha256_midstate assetid;\n  readHash(&assetid, &src);\n  simplicity_write64(dst, lookup_fee(&assetid, env->tx->feeOutputs, env->tx->numFees));\n  return true;\n}\n\n/* genesis_block_hash : ONE |- TWO^256 */\nbool simplicity_genesis_block_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  write32s(dst, env->genesisHash.s, 8);\n  return true;\n}\n\n/* script_cmr : ONE |- TWO^256 */\nbool simplicity_script_cmr(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  write32s(dst, env->taproot->scriptCMR.s, 8);\n  return true;\n}\n\n/* transaction_id : ONE |- TWO^256 */\nbool simplicity_transaction_id(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  write32s(dst, env->tx->txid.s, 8);\n  return true;\n}\n\n/* current_index : ONE |- TWO^32 */\nbool simplicity_current_index(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->ix);\n  return true;\n}\n\n/* current_pegin : ONE |- S TWO^256 */\nbool simplicity_current_pegin(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  if (writeBit(dst, env->tx->input[env->ix].isPegin)) {\n    writeHash(dst, &env->tx->input[env->ix].pegin);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* current_prev_outpoint : ONE |- TWO^256 * TWO^32 */\nbool simplicity_current_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  prevOutpoint(dst, &env->tx->input[env->ix].prevOutpoint);\n  return true;\n}\n\n/* current_asset : ONE |- Conf TWO^256 */\nbool simplicity_current_asset(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  asset(dst, &env->tx->input[env->ix].txo.asset);\n  return true;\n}\n\n/* current_amount : ONE |- (Conf TWO^256, Conf TWO^64) */\nbool simplicity_current_amount(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  asset(dst, &env->tx->input[env->ix].txo.asset);\n  amt(dst, &env->tx->input[env->ix].txo.amt);\n  return true;\n}\n\n/* current_script_hash : ONE |- TWO^256 */\nbool simplicity_current_script_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  writeHash(dst, &env->tx->input[env->ix].txo.scriptPubKey);\n  return true;\n}\n\n/* current_sequence : ONE |- TWO^32 */\nbool simplicity_current_sequence(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  simplicity_write32(dst, env->tx->input[env->ix].sequence);\n  return true;\n}\n\n/* current_reissuance_blinding : ONE |- S (Conf TWO^256) */\nbool simplicity_current_reissuance_blinding(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  reissuanceBlinding(dst, &env->tx->input[env->ix].issuance);\n  return true;\n}\n\n/* current_new_issuance_contract : ONE |- S (Conf TWO^256) */\nbool simplicity_current_new_issuance_contract(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  newIssuanceContract(dst, &env->tx->input[env->ix].issuance);\n  return true;\n}\n\n/* current_reissuance_entropy : ONE |- S (Conf TWO^256) */\nbool simplicity_current_reissuance_entropy(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  reissuanceEntropy(dst, &env->tx->input[env->ix].issuance);\n  return true;\n}\n\n/* current_issuance_asset_amount : ONE |- S (Conf TWO^64) */\nbool simplicity_current_issuance_asset_amount(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  issuanceAssetAmt(dst, &env->tx->input[env->ix].issuance);\n  return true;\n}\n\n/* current_issuance_token_amount : ONE |- S (Conf TWO^64) */\nbool simplicity_current_issuance_token_amount(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  issuanceTokenAmt(dst, &env->tx->input[env->ix].issuance);\n  return true;\n}\n\n/* current_issuance_asset_proof : ONE |- TWO^256 */\nbool simplicity_current_issuance_asset_proof(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  writeHash(dst, &env->tx->input[env->ix].issuance.assetRangeProofHash);\n  return true;\n}\n\n/* current_issuance_token_proof : ONE |- TWO^256 */\nbool simplicity_current_issuance_token_proof(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  writeHash(dst, &env->tx->input[env->ix].issuance.tokenRangeProofHash);\n  return true;\n}\n\n/* current_script_sig_hash : ONE |- TWO^256 */\nbool simplicity_current_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  writeHash(dst, &env->tx->input[env->ix].scriptSigHash);\n  return true;\n}\n\n/* current_annex_hash : ONE |- S (TWO^256) */\nbool simplicity_current_annex_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  if (env->tx->numInputs <= env->ix) return false;\n  if (writeBit(dst, env->tx->input[env->ix].hasAnnex)) {\n    writeHash(dst, &env->tx->input[env->ix].annexHash);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* tapleaf_version : ONE |- TWO^8 */\nbool simplicity_tapleaf_version(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write8(dst, env->taproot->leafVersion);\n  return true;\n}\n\n/* tappath : TWO^8 |- S (TWO^256) */\nbool simplicity_tappath(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast8_t i = simplicity_read8(&src);\n  if (writeBit(dst, i < env->taproot->pathLen)) {\n    writeHash(dst, &env->taproot->path[i]);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* internal_key : ONE |- TWO^256 */\nbool simplicity_internal_key(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->internalKey);\n  return true;\n}\n\n/* num_inputs : ONE |- TWO^32 */\nbool simplicity_num_inputs(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->numInputs);\n  return true;\n}\n\n/* num_outputs : ONE |- TWO^32 */\nbool simplicity_num_outputs(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, env->tx->numOutputs);\n  return true;\n}\n\n/* tx_is_final : ONE |- TWO */\nbool simplicity_tx_is_final(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeBit(dst, env->tx->isFinal);\n  return true;\n}\n\n/* tx_lock_height : ONE |- TWO^32 */\nbool simplicity_tx_lock_height(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, lockHeight(env->tx));\n  return true;\n}\n\n/* tx_lock_time : ONE |- TWO^32 */\nbool simplicity_tx_lock_time(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write32(dst, lockTime(env->tx));\n  return true;\n}\n\n/* tx_lock_distance : ONE |- TWO^16 */\nbool simplicity_broken_do_not_use_tx_lock_distance(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write16(dst, obsolete_lockDistance(env->tx));\n  return true;\n}\n\n/* tx_lock_duration : ONE |- TWO^16 */\nbool simplicity_broken_do_not_use_tx_lock_duration(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  simplicity_write16(dst, obsolete_lockDuration(env->tx));\n  return true;\n}\n\n/* check_lock_height : TWO^32 |- ONE */\nbool simplicity_check_lock_height(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  uint_fast32_t x = simplicity_read32(&src);\n  return x <= lockHeight(env->tx);\n}\n\n/* check_lock_time : TWO^32 |- ONE */\nbool simplicity_check_lock_time(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  uint_fast32_t x = simplicity_read32(&src);\n  return x <= lockTime(env->tx);\n}\n\n/* check_lock_distance : TWO^16 |- ONE */\nbool simplicity_broken_do_not_use_check_lock_distance(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  uint_fast16_t x = simplicity_read16(&src);\n  return x <= obsolete_lockDistance(env->tx);\n}\n\n/* check_lock_duration : TWO^16 |- ONE */\nbool simplicity_broken_do_not_use_check_lock_duration(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  uint_fast16_t x = simplicity_read16(&src);\n  return x <= obsolete_lockDuration(env->tx);\n}\n\n/* calculate_issuance_entropy : TWO^256 * TWO^32 * TWO^256 |- TWO^256 */\nbool simplicity_calculate_issuance_entropy(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  outpoint op;\n  sha256_midstate contract;\n  sha256_midstate result;\n\n  read32s(op.txid.s, 8, &src);\n  op.ix = simplicity_read32(&src);\n  read32s(contract.s, 8, &src);\n\n  result = simplicity_generateIssuanceEntropy(&op, &contract);\n  writeHash(dst, &result);\n  return true;\n}\n\n/* calculate_asset : TWO^256 |- TWO^256 */\nbool simplicity_calculate_asset(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate entropy;\n  sha256_midstate result;\n\n  read32s(entropy.s, 8, &src);\n  result = simplicity_calculateAsset(&entropy);\n\n  writeHash(dst, &result);\n  return true;\n}\n\n/* calculate_explicit_token : TWO^256 |- TWO^256 */\nbool simplicity_calculate_explicit_token(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate entropy;\n  sha256_midstate result;\n\n  read32s(entropy.s, 8, &src);\n  result = simplicity_calculateToken(&entropy, EXPLICIT);\n\n  writeHash(dst, &result);\n  return true;\n}\n\n/* calculate_confidential_token : TWO^256 |- TWO^256 */\nbool simplicity_calculate_confidential_token(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate entropy;\n  sha256_midstate result;\n\n  read32s(entropy.s, 8, &src);\n  result = simplicity_calculateToken(&entropy, EVEN_Y /* ODD_Y would also work. */);\n\n  writeHash(dst, &result);\n  return true;\n}\n\n/* lbtc_asset : ONE |- TWO^256 */\nbool simplicity_lbtc_asset(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused.\n  (void) env; // env is unused.\n  const sha256_midstate lbtc_assetid = {{\n    0x6d521c38u, 0xec1ea157u, 0x34ae22b7u, 0xc4606441u, 0x2829c0d0u, 0x579f0a71u, 0x3d1c04edu, 0xe979026fu\n  }};\n\n  writeHash(dst, &lbtc_assetid);\n  return true;\n}\n\n/* build_tapleaf_simplicity : TWO^256 |- TWO^256 */\nbool simplicity_build_tapleaf_simplicity(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate cmr;\n  readHash(&cmr, &src);\n  sha256_midstate result = simplicity_make_tapleaf(0xbe, &cmr);\n  writeHash(dst, &result);\n  return true;\n}\n\n/* build_tapbranch : TWO^256 * TWO^256 |- TWO^256 */\nbool simplicity_build_tapbranch(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate a, b;\n  readHash(&a, &src);\n  readHash(&b, &src);\n\n  sha256_midstate result = simplicity_make_tapbranch(&a, &b);\n  writeHash(dst, &result);\n  return true;\n}\n\n/* build_taptweak : PUBKEY * TWO^256 |- PUBKEY */\nbool simplicity_build_taptweak(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  static unsigned char taptweak[] = \"TapTweak/elements\";\n  return simplicity_generic_taptweak(dst, &src, taptweak, sizeof(taptweak)-1);\n}\n\n/* outpoint_hash : CTX8 * S TWO^256 * TWO^256 * TWO^32 |- CTX8 */\nbool simplicity_outpoint_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate midstate;\n  unsigned char buf[36];\n  sha256_context ctx = {.output = midstate.s};\n\n  /* Read a SHA-256 context. */\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  /* Read an optional pegin parent chain hash. */\n  if (readBit(&src)) {\n    /* Read a pegin parent chain hash. */\n    read8s(buf, 32, &src);\n    sha256_uchar(&ctx, 0x01);\n    sha256_uchars(&ctx, buf, 32);\n  } else {\n    /* No pegin. */\n    sha256_uchar(&ctx, 0x00);\n    forwardBits(&src, 256);\n  }\n\n  /* Read an outpoint (hash and index). */\n  read8s(buf, 36, &src);\n  sha256_uchars(&ctx, buf, 36);\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* asset_amount_hash : CTX8 * Conf TWO^256 * Conf TWO^64 |- CTX8 */\nbool simplicity_asset_amount_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate midstate;\n  unsigned char buf[32];\n  sha256_context ctx = {.output = midstate.s};\n\n  /* Read a SHA-256 context. */\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  /* Read an asset id prefix. (2 bits) */\n  if (readBit(&src)) {\n    /* Read an explicit asset id prefix. (1 bit) */\n    forwardBits(&src, 1);\n    sha256_uchar(&ctx, 0x01);\n  } else {\n    /* Read an confidential asset id prefix. (1 bit) */\n    if (readBit(&src)) {\n      sha256_uchar(&ctx, 0x0b);\n    } else {\n      sha256_uchar(&ctx, 0x0a);\n    }\n  }\n  /* Read an asset id body (both confidential and explicit asset bodies are the same size). (256 bits) */\n  read8s(buf, 32, &src);\n  sha256_uchars(&ctx, buf, 32);\n\n  /* Read an amount. (258 bits) */\n  if (readBit(&src)) {\n    /* Read an explicit amount. (257 bits) */\n    sha256_uchar(&ctx, 0x01);\n    forwardBits(&src, 257-64);\n    read8s(buf, 8, &src);\n    sha256_uchars(&ctx, buf, 8);\n  } else {\n    /* Read an confidential amount. (257 bits) */\n    if (readBit(&src)) {\n      sha256_uchar(&ctx, 0x09);\n    } else {\n      sha256_uchar(&ctx, 0x08);\n    }\n    read8s(buf, 32, &src);\n    sha256_uchars(&ctx, buf, 32);\n  }\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* nonce_hash : CTX8 * S (Conf TWO^256) |- CTX8 */\nbool simplicity_nonce_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate midstate;\n  unsigned char buf[32];\n  sha256_context ctx = {.output = midstate.s};\n\n  /* Read a SHA-256 context. */\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  /* Read an optional nonce. (259 bits) */\n  if (readBit(&src)) {\n    /* Read a nonce prefix. (2 bits) */\n    if (readBit(&src)) {\n      /* Read an explicit none prefix. (1 bit) */\n      forwardBits(&src, 1);\n      sha256_uchar(&ctx, 0x01);\n    } else {\n      /* Read a confidential none prefix. (1 bit) */\n      if (readBit(&src)) {\n        sha256_uchar(&ctx, 0x03);\n      } else {\n        sha256_uchar(&ctx, 0x02);\n      }\n    }\n    /* Read a nonce id body (both confidential and explicit nonce bodies are the same size). (256 bits) */\n    read8s(buf, 32, &src);\n    sha256_uchars(&ctx, buf, 32);\n  } else {\n    sha256_uchar(&ctx, 0x00);\n  }\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* annex_hash : CTX8 * S TWO^256 |- CTX8 */\nbool simplicity_annex_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused.\n  sha256_midstate midstate;\n  unsigned char buf[32];\n  sha256_context ctx = {.output = midstate.s};\n\n  /* Read a SHA-256 context. */\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  /* Read an optional hash. (257 bits) */\n  if (readBit(&src)) {\n    /* Read a hash. (256 bits) */\n    read8s(buf, 32, &src);\n    sha256_uchar(&ctx, 0x01);\n    sha256_uchars(&ctx, buf, 32);\n  } else {\n    /* No hash. */\n    sha256_uchar(&ctx, 0x00);\n  }\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* issuance : TWO^256 |- S (S TWO) */\nbool simplicity_issuance(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const sigInput* input = &env->tx->input[i];\n    if (writeBit(dst, NO_ISSUANCE != input->issuance.type)) {\n      writeBit(dst, REISSUANCE == input->issuance.type);\n    } else {\n      skipBits(dst, 1);\n    }\n  } else {\n    skipBits(dst, 2);\n  }\n  return true;\n}\n\n/* issuance_entropy : TWO^256 |- S (S TWO^256) */\nbool simplicity_issuance_entropy(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const sigInput* input = &env->tx->input[i];\n    if (writeBit(dst, NO_ISSUANCE != input->issuance.type)) {\n      writeHash(dst, &input->issuance.entropy);\n    } else {\n      skipBits(dst, 256);\n    }\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* issuance_asset : TWO^256 |- S (S TWO^256) */\nbool simplicity_issuance_asset(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const sigInput* input = &env->tx->input[i];\n    if (writeBit(dst, NO_ISSUANCE != input->issuance.type)) {\n      writeHash(dst, &input->issuance.assetId);\n    } else {\n      skipBits(dst, 256);\n    }\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* issuance_token : TWO^256 |- S (S TWO^256) */\nbool simplicity_issuance_token(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const sigInput* input = &env->tx->input[i];\n    if (writeBit(dst, NO_ISSUANCE != input->issuance.type)) {\n      writeHash(dst, &input->issuance.tokenId);\n    } else {\n      skipBits(dst, 256);\n    }\n  } else {\n    skipBits(dst, 257);\n  }\n  return true;\n}\n\n/* output_amounts_hash : ONE |- TWO^256 */\nbool simplicity_output_amounts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputAssetAmountsHash);\n  return true;\n}\n\n/* output_nonces_hash : ONE |- TWO^256 */\nbool simplicity_output_nonces_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputNoncesHash);\n  return true;\n}\n\n/* output_scripts_hash : ONE |- TWO^256 */\nbool simplicity_output_scripts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputScriptsHash);\n  return true;\n}\n\n/* output_range_proofs_hash : ONE |- TWO^256 */\nbool simplicity_output_range_proofs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputRangeProofsHash);\n  return true;\n}\n\n/* output_surjection_proofs_hash : ONE |- TWO^256 */\nbool simplicity_output_surjection_proofs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputSurjectionProofsHash);\n  return true;\n}\n\n/* outputs_hash : ONE |- TWO^256 */\nbool simplicity_outputs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->outputsHash);\n  return true;\n}\n\n/* output_hash : TWO^32 |- S TWO^256 */\nbool simplicity_output_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numOutputs)) {\n    const sigOutput* output = &env->tx->output[i];\n    sha256_midstate midstate;\n    sha256_context ctx = sha256_init(midstate.s);\n    simplicity_sha256_confAsset(&ctx, &output->asset);\n    simplicity_sha256_confAmt(&ctx, &output->amt);\n    simplicity_sha256_confNonce(&ctx, &output->nonce);\n    sha256_hash(&ctx, &output->scriptPubKey);\n    sha256_hash(&ctx, &output->rangeProofHash);\n    sha256_finalize(&ctx);\n    writeHash(dst, &midstate);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* input_outpoints_hash : ONE |- TWO^256 */\nbool simplicity_input_outpoints_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputOutpointsHash);\n  return true;\n}\n\n/* input_amounts_hash : ONE |- TWO^256 */\nbool simplicity_input_amounts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputAssetAmountsHash);\n  return true;\n}\n\n/* input_scripts_hash : ONE |- TWO^256 */\nbool simplicity_input_scripts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputScriptsHash);\n  return true;\n}\n\n/* input_utxos_hash : ONE |- TWO^256 */\nbool simplicity_input_utxos_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputUTXOsHash);\n  return true;\n}\n\n/* input_utxo_hash : TWO^32 |- S TWO^256 */\nbool simplicity_input_utxo_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const utxo* txo = &env->tx->input[i].txo;\n    sha256_midstate midstate;\n    sha256_context ctx = sha256_init(midstate.s);\n    simplicity_sha256_confAsset(&ctx, &txo->asset);\n    simplicity_sha256_confAmt(&ctx, &txo->amt);\n    sha256_hash(&ctx, &txo->scriptPubKey);\n    sha256_finalize(&ctx);\n    writeHash(dst, &midstate);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* input_sequences_hash : ONE |- TWO^256 */\nbool simplicity_input_sequences_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputSequencesHash);\n  return true;\n}\n\n/* input_annexes_hash : ONE |- TWO^256 */\nbool simplicity_input_annexes_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputAnnexesHash);\n  return true;\n}\n\n/* input_script_sigs_hash : ONE |- TWO^256 */\nbool simplicity_input_script_sigs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputScriptSigsHash);\n  return true;\n}\n\n/* inputs_hash : ONE |- TWO^256 */\nbool simplicity_inputs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->inputsHash);\n  return true;\n}\n\n/* input_hash : TWO^32 |- S TWO^256 */\nbool simplicity_input_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const sigInput* input = &env->tx->input[i];\n    sha256_midstate midstate;\n    sha256_context ctx = sha256_init(midstate.s);\n    if (input->isPegin) {\n      sha256_uchar(&ctx, 1);\n      sha256_hash(&ctx, &input->pegin);\n    } else {\n      sha256_uchar(&ctx, 0);\n    }\n    sha256_hash(&ctx, &input->prevOutpoint.txid);\n    sha256_u32be(&ctx, input->prevOutpoint.ix);\n    sha256_u32be(&ctx, input->sequence);\n    if (input->hasAnnex) {\n      sha256_uchar(&ctx, 1);\n      sha256_hash(&ctx, &input->annexHash);\n    } else {\n      sha256_uchar(&ctx, 0);\n    }\n    sha256_finalize(&ctx);\n    writeHash(dst, &midstate);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* issuance_asset_amounts_hash : ONE |- TWO^256 */\nbool simplicity_issuance_asset_amounts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->issuanceAssetAmountsHash);\n  return true;\n}\n\n/* issuance_token_amounts_hash : ONE |- TWO^256 */\nbool simplicity_issuance_token_amounts_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->issuanceTokenAmountsHash);\n  return true;\n}\n\n/* issuance_range_proofs_hash : ONE |- TWO^256 */\nbool simplicity_issuance_range_proofs_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->issuanceRangeProofsHash);\n  return true;\n}\n\n/* issuance_blinding_entropy_hash : ONE |- TWO^256 */\nbool simplicity_issuance_blinding_entropy_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->issuanceBlindingEntropyHash);\n  return true;\n}\n\n/* issuances_hash : ONE |- TWO^256 */\nbool simplicity_issuances_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->issuancesHash);\n  return true;\n}\n\n/* issuance_hash : TWO^32 |- S TWO^256 */\nbool simplicity_issuance_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  uint_fast32_t i = simplicity_read32(&src);\n  if (writeBit(dst, i < env->tx->numInputs)) {\n    const assetIssuance* issuance = &env->tx->input[i].issuance;\n    sha256_midstate midstate;\n    sha256_context ctx = sha256_init(midstate.s);\n    if (NO_ISSUANCE == issuance->type) {\n      sha256_uchar(&ctx, 0);\n      sha256_uchar(&ctx, 0);\n      sha256_uchar(&ctx, 0);\n      sha256_uchar(&ctx, 0);\n      sha256_hash(&ctx, &issuance->assetRangeProofHash);\n      sha256_hash(&ctx, &issuance->tokenRangeProofHash);\n      sha256_uchar(&ctx, 0);\n    } else {\n      simplicity_sha256_confAsset(&ctx, &(confidential){ .prefix = EXPLICIT, .data = issuance->assetId});\n      simplicity_sha256_confAmt(&ctx, &issuance->assetAmt);\n      simplicity_sha256_confAsset(&ctx, &(confidential){ .prefix = EXPLICIT, .data = issuance->tokenId});\n      simplicity_sha256_confAmt(&ctx, NEW_ISSUANCE == issuance->type\n                                         ? &issuance->tokenAmt\n                                         : &(confAmount){ .prefix = EXPLICIT, .explicit = 0});\n      sha256_hash(&ctx, &issuance->assetRangeProofHash);\n      sha256_hash(&ctx, &issuance->tokenRangeProofHash);\n      sha256_uchar(&ctx, 1);\n      if (NEW_ISSUANCE == issuance->type) {\n        sha256_uchars(&ctx, (unsigned char[32]){0}, 32);\n        sha256_hash(&ctx, &issuance->contractHash);\n      } else {\n        sha256_hash(&ctx, &issuance->blindingNonce);\n        sha256_hash(&ctx, &issuance->entropy);\n      }\n    }\n    sha256_finalize(&ctx);\n    writeHash(dst, &midstate);\n  } else {\n    skipBits(dst, 256);\n  }\n  return true;\n}\n\n/* tx_hash : ONE |- TWO^256 */\nbool simplicity_tx_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->tx->txHash);\n  return true;\n}\n\n/* tapleaf_hash : ONE |- TWO^256 */\nbool simplicity_tapleaf_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->tapLeafHash);\n  return true;\n}\n\n/* tappath_hash : ONE |- TWO^256 */\nbool simplicity_tappath_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->tappathHash);\n  return true;\n}\n\n/* tap_env_hash : ONE |- TWO^256 */\nbool simplicity_tap_env_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->taproot->tapEnvHash);\n  return true;\n}\n\n/* sig_all_hash : ONE |- TWO^256 */\nbool simplicity_sig_all_hash(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  writeHash(dst, &env->sigAllHash);\n  return true;\n}\n"
  },
  {
    "path": "C/elements/elementsJets.h",
    "content": "/* This module defines primitives and jets that are specific to the Elements application for Simplicity.\n */\n#ifndef SIMPLICITY_ELEMENTS_ELEMENTSJETS_H\n#define SIMPLICITY_ELEMENTS_ELEMENTSJETS_H\n\n#include \"../jets.h\"\n\n/* Jets for the Elements application of Simplicity. */\nbool simplicity_version(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_lock_time(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_pegin(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_asset(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_amount(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_script_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_sequence(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_annex_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_reissuance_blinding(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_new_issuance_contract(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_reissuance_entropy(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_asset_amount(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_token_amount(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_asset_proof(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_token_proof(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_asset(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_amount(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_nonce(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_script_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_null_datum(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_is_fee(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_surjection_proof(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_range_proof(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_total_fee(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_genesis_block_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_script_cmr(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_transaction_id(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_index(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_pegin(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_prev_outpoint(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_asset(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_amount(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_script_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_sequence(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_reissuance_blinding(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_new_issuance_contract(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_reissuance_entropy(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_issuance_asset_amount(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_issuance_token_amount(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_issuance_asset_proof(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_issuance_token_proof(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_annex_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_current_script_sig_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tapleaf_version(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tappath(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_internal_key(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_num_inputs(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_num_outputs(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tx_is_final(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tx_lock_height(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tx_lock_time(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_broken_do_not_use_tx_lock_distance(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_broken_do_not_use_tx_lock_duration(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_check_lock_height(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_check_lock_time(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_broken_do_not_use_check_lock_distance(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_broken_do_not_use_check_lock_duration(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_calculate_issuance_entropy(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_calculate_asset(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_calculate_explicit_token(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_calculate_confidential_token(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_lbtc_asset(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_build_tapleaf_simplicity(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_build_tapbranch(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_build_taptweak(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_outpoint_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_asset_amount_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_nonce_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_annex_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_entropy(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_asset(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_token(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_amounts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_nonces_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_scripts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_range_proofs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_surjection_proofs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_outputs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_output_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_outpoints_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_amounts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_scripts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_utxos_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_utxo_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_sequences_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_annexes_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_script_sigs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_inputs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_input_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_asset_amounts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_token_amounts_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_range_proofs_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_blinding_entropy_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuances_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_issuance_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tx_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tapleaf_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tappath_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tap_env_hash(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sig_all_hash(frameItem* dst, frameItem src, const txEnv* env);\n\n#endif\n"
  },
  {
    "path": "C/elements/env.c",
    "content": "#include <simplicity/elements/env.h>\n\n#include <stdalign.h>\n#include <stddef.h>\n#include <string.h>\n#include \"txEnv.h\"\n#include \"ops.h\"\n#include \"../rsort.h\"\n#include \"../sha256.h\"\n#include \"../simplicity_assert.h\"\n#include \"../simplicity_alloc.h\"\n\n#define PADDING(alignType, allocated) ((alignof(alignType) - (allocated) % alignof(alignType)) % alignof(alignType))\n\n/* Compute the SHA-256 hash of a scriptPubKey and write it into 'result'.\n *\n * Precondition: NULL != result;\n *               NULL != scriptPubKey;\n */\nstatic void hashBuffer(sha256_midstate* result, const rawElementsBuffer* buffer) {\n  sha256_context ctx = sha256_init(result->s);\n  sha256_uchars(&ctx, buffer->buf, buffer->len);\n  sha256_finalize(&ctx);\n}\n\n/* Initialize a 'confidential' asset or 'confidential' nonce from an unsigned char array from a 'rawElementsTransaction'.\n *\n * Precondition: NULL != conf;\n *               unsigned char rawConf[33] or rawConf == NULL;\n */\nstatic void copyRawConfidential(confidential* conf, const unsigned char* rawConf) {\n  if (rawConf) {\n    *conf = (confidential){ .prefix = 0x01 == rawConf[0] ? EXPLICIT\n                                    : 0x01 == (0x01 & rawConf[0]) ? ODD_Y\n                                    : EVEN_Y\n                          };\n    sha256_toMidstate(conf->data.s, &rawConf[1]);\n  } else {\n    *conf = (confidential){0};\n  }\n}\n\n/* Initialize a 'confAmount' from an unsigned char array from a 'rawElementsTransaction'.\n *\n * Precondition: NULL != amt;\n *               unsigned char rawAmt[rawAmt[0] == 0x01 ? 9 : 33] or rawAmt == NULL\n */\nstatic void copyRawAmt(confAmount* amt, const unsigned char* rawAmt) {\n  if (rawAmt) {\n    if (0x01 == rawAmt[0]) {\n      amt->prefix = EXPLICIT;\n      amt->explicit = ReadBE64(&rawAmt[1]);\n    } else {\n      amt->prefix = 0x01 == (0x01 & rawAmt[0]) ? ODD_Y : EVEN_Y;\n      sha256_toMidstate(amt->confidential.s, &rawAmt[1]);\n    }\n  } else {\n    amt->prefix = EXPLICIT;\n    amt->explicit = 0;\n  }\n}\n\n/* Initialize a 'sigInput' from a 'rawElementsInput', copying or hashing the data as needed.\n *\n * Precondition: NULL != result;\n *               NULL != input;\n */\nstatic void copyInput(sigInput* result, const rawElementsInput* input) {\n  *result = (sigInput){ .prevOutpoint = { .ix = input->prevIx }\n                      , .sequence = input->sequence\n                      , .isPegin = !!input->pegin\n                      , .hasAnnex = !!input->annex\n                      };\n\n  if (input->annex) hashBuffer(&result->annexHash, input->annex);\n  if (input->pegin) sha256_toMidstate(result->pegin.s, input->pegin);\n  sha256_toMidstate(result->prevOutpoint.txid.s, input->prevTxid);\n  hashBuffer(&result->txo.scriptPubKey, &input->txo.scriptPubKey);\n  copyRawConfidential(&result->txo.asset, input->txo.asset);\n  copyRawAmt(&result->txo.amt, input->txo.value);\n  hashBuffer(&result->scriptSigHash, &input->scriptSig);\n  hashBuffer(&result->issuance.assetRangeProofHash, &(rawElementsBuffer){0});\n  hashBuffer(&result->issuance.tokenRangeProofHash, &(rawElementsBuffer){0});\n  if (input->issuance.amount || input->issuance.inflationKeys) {\n    sha256_toMidstate(result->issuance.blindingNonce.s, input->issuance.blindingNonce);\n    copyRawAmt(&result->issuance.assetAmt, input->issuance.amount);\n    if (is_confidential(result->issuance.assetAmt.prefix)) hashBuffer(&result->issuance.assetRangeProofHash, &input->issuance.amountRangePrf);\n    if (0 == result->issuance.blindingNonce.s[0] && 0 == result->issuance.blindingNonce.s[1] &&\n        0 == result->issuance.blindingNonce.s[2] && 0 == result->issuance.blindingNonce.s[3] &&\n        0 == result->issuance.blindingNonce.s[4] && 0 == result->issuance.blindingNonce.s[5] &&\n        0 == result->issuance.blindingNonce.s[6] && 0 == result->issuance.blindingNonce.s[7]) {\n      sha256_toMidstate(result->issuance.contractHash.s, input->issuance.assetEntropy);\n      result->issuance.entropy = simplicity_generateIssuanceEntropy(&result->prevOutpoint, &result->issuance.contractHash);\n      copyRawAmt(&result->issuance.tokenAmt, input->issuance.inflationKeys);\n      if (is_confidential(result->issuance.tokenAmt.prefix)) hashBuffer(&result->issuance.tokenRangeProofHash, &input->issuance.inflationKeysRangePrf);\n      result->issuance.type = NEW_ISSUANCE;\n    } else {\n      sha256_toMidstate(result->issuance.entropy.s, input->issuance.assetEntropy);\n      result->issuance.type = REISSUANCE;\n    }\n    result->issuance.assetId = simplicity_calculateAsset(&result->issuance.entropy);\n    result->issuance.tokenId = simplicity_calculateToken(&result->issuance.entropy, result->issuance.assetAmt.prefix);\n  }\n}\n\n/* As specified in https://github.com/ElementsProject/elements/blob/de942511a67c3a3fcbdf002a8ee7e9ba49679b78/src/primitives/transaction.h#L304-L307. */\nstatic bool isFee(const rawElementsOutput* output) {\n  return 0 == output->scriptPubKey.len &&                 /* Empty scriptPubKey */\n    NULL != output->asset && 0x01 == output->asset[0] &&  /* Explicit asset */\n    NULL != output->value && 0x01 == output->value[0];    /* Explicit amount */\n}\n\nstatic uint_fast32_t countFeeOutputs(const rawElementsTransaction* rawTx) {\n  uint_fast32_t result = 0;\n  for (uint_fast32_t i = 0; i < rawTx->numOutputs; ++i) {\n    result += isFee(&rawTx->output[i]);\n  }\n  return result;\n}\n\n/* If the 'scriptPubKey' is a TX_NULL_DATA, return a count of the number of \"push only\" operations (this excludes the OP_RETURN).\n * Otherwise return 0.\n *\n * Note: that a TX_NULL_DATA could have zero \"push only\" operations,\n * in which case 0 is returned even though it is a TX_NULL_DATA scriptPubKey.\n *\n * Precondition: NULL != scriptPubKey\n */\nstatic uint_fast32_t countNullDataCodes(const rawElementsBuffer* scriptPubKey) {\n  if (0 == scriptPubKey->len || 0x6a != scriptPubKey->buf[0] ) return 0;\n\n  uint_fast32_t result = 0;\n  for (uint_fast32_t i = 1; i < scriptPubKey->len;) {\n    uint_fast32_t skip = 0;\n    unsigned char code = scriptPubKey->buf[i++];\n    if (0x60 < code) return 0;\n    if (code < 0x4c) {\n      skip = code;\n    } else if (code < 0x4f) {\n      if (scriptPubKey->len == i) return 0;\n      skip = scriptPubKey->buf[i++];\n      if (0x4d <= code) {\n        if (scriptPubKey->len == i) return 0;\n        skip += (uint_fast32_t)(scriptPubKey->buf[i++]) << 8;\n        if (0x4e <= code) {\n          if (scriptPubKey->len == i) return 0;\n          skip += (uint_fast32_t)(scriptPubKey->buf[i++]) << 16;\n          if (scriptPubKey->len == i) return 0;\n          skip += (uint_fast32_t)(scriptPubKey->buf[i++]) << 24;\n        }\n      }\n    }\n    if (scriptPubKey->len - i < skip) return 0;\n    i += skip;\n    result++;\n  }\n  return result;\n}\n\n/* Return a count of the total number of \"push only\" operations in all output scriptPubKey's that are TX_NULL_DATA.\n *\n * Precondition: NULL != rawTx\n */\nstatic uint_fast64_t countTotalNullDataCodes(const rawElementsTransaction* rawTx) {\n  uint_fast64_t result = 0;\n  for (uint_fast32_t i = 0; i < rawTx->numOutputs; ++i) {\n    result += countNullDataCodes(&rawTx->output[i].scriptPubKey);\n  }\n  return result;\n}\n\n/* Determine if 'scriptPubKey' is a TX_NULL_DATA script, and fill 'result' with (digests of) the push data opcodes.\n * If 'scriptPubKey' isn't a TX_NULL_DATA, then 'result->op' is set to NULL.\n * Otherwise '*result' is set to '(parsedNullData){ .op = *allocation, .len = countNullDataCodes(scriptPubKey) }.\n * and then the 'opcode result->op[result->len]' array is filled in with (digests of) the pus data opcode.\n *      and '*allocation' is incremented by 'result->len'\n *      and '*allocationLen' is decremented by 'result->len'.\n * Values in the '*allocation' array may be modified.\n *\n * Note: even if '*allocationLen == 0' we require that '*allocation != NULL' as a precondition\n * in order for 'result' to distinguish between non-NULL_TX_DATA and empty NULL_TX_data\n *\n * Precondition: NULL != result;\n *               NULL != *allocation;\n *               opcode (*allocation)[*allocationLen];\n *               NULL != scriptPubKey;\n *               countNullDataCodes(scriptPubKey) <= *allocationLen\n */\nstatic void parseNullData(parsedNullData* result, opcode** allocation, size_t* allocationLen, const rawElementsBuffer* scriptPubKey) {\n  *result = (parsedNullData){ .op = *allocation };\n\n  if (0 == scriptPubKey->len || 0x6a != scriptPubKey->buf[0] ) { result->op = NULL; return; }\n\n  for (uint_fast32_t i = 1; i < scriptPubKey->len; ++result->len) {\n    unsigned char code = scriptPubKey->buf[i++];\n    if (*allocationLen <= result->len || 0x60 < code) { result->op = NULL; return; }\n    if (0x4f <= code) {\n      (*allocation)[result->len].code = OP_1NEGATE + (code - 0x4f);\n    } else {\n      uint_fast32_t skip = 0;\n      if (code < 0x4c) {\n        skip = code;\n        (*allocation)[result->len].code = OP_IMMEDIATE;\n      } else {\n        if (scriptPubKey->len == i) { result->op = NULL; return; }\n        skip = scriptPubKey->buf[i++];\n        if (code < 0x4d) {\n          (*allocation)[result->len].code = OP_PUSHDATA;\n        } else {\n          if (scriptPubKey->len == i) { result->op = NULL; return; }\n          skip += (uint_fast32_t)(scriptPubKey->buf[i++]) << 8;\n          if (code < 0x4e) {\n            (*allocation)[result->len].code = OP_PUSHDATA2;\n          } else {\n            if (scriptPubKey->len == i) { result->op = NULL; return; }\n            skip += (uint_fast32_t)(scriptPubKey->buf[i++]) << 16;\n            if (scriptPubKey->len == i) { result->op = NULL; return; }\n            skip += (uint_fast32_t)(scriptPubKey->buf[i++]) << 24;\n            (*allocation)[result->len].code = OP_PUSHDATA4;\n          }\n        }\n      }\n      if (scriptPubKey->len - i < skip) { result->op = NULL; return; }\n      {\n        sha256_context ctx = sha256_init((*allocation)[result->len].dataHash.s);\n        sha256_uchars(&ctx, &scriptPubKey->buf[i], skip);\n        sha256_finalize(&ctx);\n      }\n      i += skip;\n    }\n  }\n  *allocation += result->len; /* C requires '*allocation != NULL', even when 'result->len == 0'. */\n  *allocationLen -= result->len;\n}\n\n/* Initialize a 'sigOutput' from a 'rawElementsOutput', copying or hashing the data as needed.\n *\n * '*allocation' is incremented by 'countNullDataCodes(&output->scriptPubKey)'\n * '*allocationLen' is decremented by 'countNullDataCodes(&output->scriptPubKey)'.\n * Values in the '*allocation' array may be modified.\n *\n * Precondition: NULL != result;\n *               NULL != *allocation;\n *               opcode (*allocation)[*allocationLen];\n *               NULL != output;\n *               countNullDataCodes(&output->scriptPubKey) <= *allocationLen\n */\nstatic void copyOutput(sigOutput* result, opcode** allocation, size_t* allocationLen, const rawElementsOutput* output) {\n  hashBuffer(&result->scriptPubKey, &output->scriptPubKey);\n  result->emptyScript = 0 == output->scriptPubKey.len;\n  copyRawConfidential(&result->asset, output->asset);\n  copyRawAmt(&result->amt, output->value);\n  copyRawConfidential(&result->nonce, output->nonce);\n  parseNullData(&result->pnd, allocation, allocationLen, &output->scriptPubKey);\n  result->isNullData = NULL != result->pnd.op;\n  hashBuffer(&result->surjectionProofHash, is_confidential(result->asset.prefix) ? &output->surjectionProof : &(rawElementsBuffer){0});\n  hashBuffer(&result->rangeProofHash, is_confidential(result->amt.prefix) ? &output->rangeProof : &(rawElementsBuffer){0});\n  result->assetFee = 0;\n}\n\n/* Tally a sorted list of feeOutputs\n *\n * Given a sorted array of feeOutput pointers, tally all the (explicit) amounts of the entries with the same asset id,\n * which are all necessarily next to each other, into the assetFee field of the first entry of the bunch.\n *\n * Discard all entries other than the first one of each bunch.\n * Return 'ret_value', the number of remaining entries in the array after these discards.\n *\n * Note: the array is not re-allocated, so there will be \"junk\" values in the array past the end of 'ret_value'.\n *\n * Precondition: feeOutputs is sorted by it asset.data.s field, which is to say\n *               for all 0 <= i <= j < numFees,\n *                 0 <= memcmp(feeOutputs[j]->asset.data.s, feeOutputs[i]->asset.data.s, sizeof(feeOutputs[i]->asset.data.s));\n *               for all 0 <= i < numFees,\n *                feeOutputs[i]->assetFee = 0 and\n *                feeOutputs[i]->amt.explicit is the active union member.\n * Postcondition: feeOutputs is uniquely sorted by it asset.data.s field, which is to say\n *                for all 0 <= i < j < ret_value,\n *                  0 < memcmp(feeOutputs[j]->asset.data.s, feeOutputs[i]->asset.data.s, sizeof(feeOutputs[i]->asset.data.s));\n *                for all ret_value <= i < numFees,\n *                  feeOutputs[i] remains allocated.\n */\nstatic uint_fast32_t sumFees(sigOutput** feeOutputs, uint_fast32_t numFees) {\n  uint_fast32_t result = 0;\n\n  if (numFees < 1) return result;\n\n  for(uint_fast32_t i = 0; i < numFees; ++i) {\n    int cmp = memcmp(feeOutputs[i]->asset.data.s, feeOutputs[result]->asset.data.s, sizeof(feeOutputs[i]->asset.data.s));\n    simplicity_assert(0 <= cmp);\n    if (0 < cmp) {\n      result++;\n      feeOutputs[result] = feeOutputs[i];\n    }\n\n    static_assert(0 == offsetof(sigOutput, asset.data), \"asset ID is not first field of sigOutput.\");\n    /* In Elements consensus rules, the total about of fees is not allowed to exceed MoneyRange:\n     * https://github.com/ElementsProject/elements/blob/de942511a67c3a3fcbdf002a8ee7e9ba49679b78/src/confidential_validation.cpp#L36-L38\n     *\n     * In case of invalid transaction environments, we end up taking the result modulo the size of uint_fast64_t,\n     * which in turn is compatible with our jet specification which returns the tally modulo 2^64.\n     */\n    feeOutputs[result]->assetFee += feeOutputs[i]->amt.explicit;\n  }\n\n  return result + 1;\n}\n\n/* Allocate and initialize a 'elementsTransaction' from a 'rawElementsTransaction', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: NULL != rawTx\n */\nextern elementsTransaction* simplicity_elements_mallocTransaction(const rawElementsTransaction* rawTx) {\n  if (!rawTx) return NULL;\n\n  size_t allocationSize = sizeof(elementsTransaction);\n\n  const size_t pad1 = PADDING(sigInput, allocationSize);\n  if (SIZE_MAX - allocationSize < pad1) return NULL;\n  allocationSize += pad1;\n\n  /* Multiply by (size_t)1 to disable type-limits warning. */\n  if (SIZE_MAX / sizeof(sigInput) < (size_t)1 * rawTx->numInputs) return NULL;\n  if (SIZE_MAX - allocationSize < rawTx->numInputs * sizeof(sigInput)) return NULL;\n  allocationSize += rawTx->numInputs * sizeof(sigInput);\n\n  const size_t pad2 = PADDING(sigOutput, allocationSize);\n  if (SIZE_MAX - allocationSize < pad2) return NULL;\n  allocationSize += pad2;\n\n  /* Multiply by (size_t)1 to disable type-limits warning. */\n  if (SIZE_MAX / sizeof(sigOutput) < (size_t)1 * rawTx->numOutputs) return NULL;\n  if (SIZE_MAX - allocationSize < rawTx->numOutputs * sizeof(sigOutput)) return NULL;\n  allocationSize += rawTx->numOutputs * sizeof(sigOutput);\n\n  const size_t pad3 = PADDING(sigOutput*, allocationSize);\n  if (SIZE_MAX - allocationSize < pad3) return NULL;\n  allocationSize += pad3;\n\n  const uint_fast32_t numFees = countFeeOutputs(rawTx);\n  /* Multiply by (size_t)1 to disable type-limits warning. */\n  if (SIZE_MAX / sizeof(sigOutput*) < (size_t)1 * numFees) return NULL;\n  if (SIZE_MAX - allocationSize < numFees * sizeof(sigOutput*)) return NULL;\n  allocationSize += numFees * sizeof(sigOutput*);\n\n  const size_t pad4 = PADDING(opcode, allocationSize);\n  if (SIZE_MAX - allocationSize < pad4) return NULL;\n  allocationSize += pad4;\n\n  const uint_fast64_t totalNullDataCodes = countTotalNullDataCodes(rawTx);\n  /* Multiply by (size_t)1 to disable type-limits warning. */\n  if (SIZE_MAX / sizeof(opcode) < (size_t)1 * totalNullDataCodes) return NULL;\n  if (SIZE_MAX - allocationSize < totalNullDataCodes * sizeof(opcode)) return NULL;\n  allocationSize += (size_t)totalNullDataCodes * sizeof(opcode);\n\n  char *allocation = simplicity_malloc(allocationSize);\n  if (!allocation) return NULL;\n\n  /* Casting through void* to avoid warning about pointer alignment.\n   * Our padding is done carefully to ensure alignment.\n   */\n  elementsTransaction* const tx = (elementsTransaction*)(void*)allocation;\n  allocation += sizeof(elementsTransaction) + pad1;\n\n  sigInput* const input = (sigInput*)(void*)allocation;\n  allocation += rawTx->numInputs * sizeof(sigInput) + pad2;\n\n  sigOutput* const output = (sigOutput*)(void*)allocation;\n  allocation += rawTx->numOutputs * sizeof(sigOutput) + pad3;\n\n  sigOutput** const feeOutputs = (sigOutput**)(void*)allocation;\n  allocation += numFees * sizeof(sigOutput*) + pad4;\n\n  opcode* ops = (opcode*)(void*)allocation;\n  size_t opsLen = (size_t)totalNullDataCodes;\n\n  /* In C++ an assignment from (sigOutput**) to (const sigOutput * const *) is allowed,\n     but C forgoes the complicated specification of C++.  Therefore we must make an explicit cast of feeOutputs in C.\n     See <https://c-faq.com/ansi/constmismatch.html> for details.\n  */\n  *tx = (elementsTransaction){ .input = input\n                             , .output = output\n                             , .feeOutputs = (sigOutput const * const *)feeOutputs\n                             , .numInputs = rawTx->numInputs\n                             , .numOutputs = rawTx->numOutputs\n                             , .version = rawTx->version\n                             , .lockTime = rawTx->lockTime\n                             , .isFinal = true\n                             };\n\n  sha256_toMidstate(tx->txid.s, rawTx->txid);\n  {\n    sha256_context ctx_inputOutpointsHash = sha256_init(tx->inputOutpointsHash.s);\n    sha256_context ctx_inputAssetAmountsHash = sha256_init(tx->inputAssetAmountsHash.s);\n    sha256_context ctx_inputScriptsHash = sha256_init(tx->inputScriptsHash.s);\n    sha256_context ctx_inputUTXOsHash = sha256_init(tx->inputUTXOsHash.s);\n    sha256_context ctx_inputSequencesHash = sha256_init(tx->inputSequencesHash.s);\n    sha256_context ctx_inputAnnexesHash = sha256_init(tx->inputAnnexesHash.s);\n    sha256_context ctx_inputScriptSigsHash = sha256_init(tx->inputScriptSigsHash.s);\n    sha256_context ctx_inputsHash = sha256_init(tx->inputsHash.s);\n    sha256_context ctx_issuanceAssetAmountsHash = sha256_init(tx->issuanceAssetAmountsHash.s);\n    sha256_context ctx_issuanceTokenAmountsHash = sha256_init(tx->issuanceTokenAmountsHash.s);\n    sha256_context ctx_issuanceRangeProofsHash = sha256_init(tx->issuanceRangeProofsHash.s);\n    sha256_context ctx_issuanceBlindingEntropyHash = sha256_init(tx->issuanceBlindingEntropyHash.s);\n    sha256_context ctx_issuancesHash = sha256_init(tx->issuancesHash.s);\n    for (uint_fast32_t i = 0; i < tx->numInputs; ++i) {\n      copyInput(&input[i], &rawTx->input[i]);\n      if (input[i].sequence < 0xffffffff) { tx->isFinal = false; }\n      if (input[i].sequence < 0x80000000) {\n        const uint_fast16_t maskedSequence = input[i].sequence & 0xffff;\n        if (input[i].sequence & ((uint_fast32_t)1 << 22)) {\n          if (tx->obsolete_lockDuration < maskedSequence) tx->obsolete_lockDuration = maskedSequence;\n        } else {\n          if (tx->obsolete_lockDistance < maskedSequence) tx->obsolete_lockDistance = maskedSequence;\n        }\n      }\n      if (input[i].isPegin) {\n        sha256_uchar(&ctx_inputOutpointsHash, 1);\n        sha256_hash(&ctx_inputOutpointsHash, &input[i].pegin);\n      } else {\n        sha256_uchar(&ctx_inputOutpointsHash, 0);\n      }\n      sha256_hash(&ctx_inputOutpointsHash, &input[i].prevOutpoint.txid);\n      sha256_u32be(&ctx_inputOutpointsHash, input[i].prevOutpoint.ix);\n      simplicity_sha256_confAsset(&ctx_inputAssetAmountsHash, &input[i].txo.asset);\n      simplicity_sha256_confAmt(&ctx_inputAssetAmountsHash, &input[i].txo.amt);\n      sha256_hash(&ctx_inputScriptsHash, &input[i].txo.scriptPubKey);\n      sha256_u32be(&ctx_inputSequencesHash, input[i].sequence);\n      if (input[i].hasAnnex) {\n        sha256_uchar(&ctx_inputAnnexesHash, 1);\n        sha256_hash(&ctx_inputAnnexesHash, &input[i].annexHash);\n      } else {\n        sha256_uchar(&ctx_inputAnnexesHash, 0);\n      }\n      sha256_hash(&ctx_inputScriptSigsHash, &input[i].scriptSigHash);\n      if (NO_ISSUANCE == input[i].issuance.type) {\n        sha256_uchar(&ctx_issuanceAssetAmountsHash, 0);\n        sha256_uchar(&ctx_issuanceAssetAmountsHash, 0);\n        sha256_uchar(&ctx_issuanceTokenAmountsHash, 0);\n        sha256_uchar(&ctx_issuanceTokenAmountsHash, 0);\n        sha256_uchar(&ctx_issuanceBlindingEntropyHash, 0);\n      } else {\n        simplicity_sha256_confAsset(&ctx_issuanceAssetAmountsHash, &(confidential){ .prefix = EXPLICIT, .data = input[i].issuance.assetId});\n        simplicity_sha256_confAsset(&ctx_issuanceTokenAmountsHash, &(confidential){ .prefix = EXPLICIT, .data = input[i].issuance.tokenId});\n        simplicity_sha256_confAmt(&ctx_issuanceAssetAmountsHash, &input[i].issuance.assetAmt);\n        simplicity_sha256_confAmt(&ctx_issuanceTokenAmountsHash, NEW_ISSUANCE == input[i].issuance.type\n                                                    ? &input[i].issuance.tokenAmt\n                                                    : &(confAmount){ .prefix = EXPLICIT, .explicit = 0});\n        sha256_uchar(&ctx_issuanceBlindingEntropyHash, 1);\n        if (NEW_ISSUANCE == input[i].issuance.type) {\n          sha256_uchars(&ctx_issuanceBlindingEntropyHash, (unsigned char[32]){0}, 32);\n          sha256_hash(&ctx_issuanceBlindingEntropyHash, &input[i].issuance.contractHash);\n        } else {\n          sha256_hash(&ctx_issuanceBlindingEntropyHash, &input[i].issuance.blindingNonce);\n          sha256_hash(&ctx_issuanceBlindingEntropyHash, &input[i].issuance.entropy);\n        }\n      }\n      sha256_hash(&ctx_issuanceRangeProofsHash, &input[i].issuance.assetRangeProofHash);\n      sha256_hash(&ctx_issuanceRangeProofsHash, &input[i].issuance.tokenRangeProofHash);\n    }\n    sha256_finalize(&ctx_inputOutpointsHash);\n    sha256_finalize(&ctx_inputAssetAmountsHash);\n    sha256_finalize(&ctx_inputScriptsHash);\n    sha256_finalize(&ctx_inputSequencesHash);\n    sha256_finalize(&ctx_inputAnnexesHash);\n    sha256_finalize(&ctx_inputScriptSigsHash);\n\n    sha256_hash(&ctx_inputUTXOsHash, &tx->inputAssetAmountsHash);\n    sha256_hash(&ctx_inputUTXOsHash, &tx->inputScriptsHash);\n    sha256_finalize(&ctx_inputUTXOsHash);\n\n    sha256_hash(&ctx_inputsHash, &tx->inputOutpointsHash);\n    sha256_hash(&ctx_inputsHash, &tx->inputSequencesHash);\n    sha256_hash(&ctx_inputsHash, &tx->inputAnnexesHash);\n    sha256_finalize(&ctx_inputsHash);\n\n    sha256_finalize(&ctx_issuanceAssetAmountsHash);\n    sha256_finalize(&ctx_issuanceTokenAmountsHash);\n    sha256_finalize(&ctx_issuanceRangeProofsHash);\n    sha256_finalize(&ctx_issuanceBlindingEntropyHash);\n\n    sha256_hash(&ctx_issuancesHash, &tx->issuanceAssetAmountsHash);\n    sha256_hash(&ctx_issuancesHash, &tx->issuanceTokenAmountsHash);\n    sha256_hash(&ctx_issuancesHash, &tx->issuanceRangeProofsHash);\n    sha256_hash(&ctx_issuancesHash, &tx->issuanceBlindingEntropyHash);\n    sha256_finalize(&ctx_issuancesHash);\n  }\n\n  {\n    sha256_context ctx_outputAssetAmountsHash = sha256_init(tx->outputAssetAmountsHash.s);\n    sha256_context ctx_outputNoncesHash = sha256_init(tx->outputNoncesHash.s);\n    sha256_context ctx_outputScriptsHash = sha256_init(tx->outputScriptsHash.s);\n    sha256_context ctx_outputRangeProofsHash = sha256_init(tx->outputRangeProofsHash.s);\n    sha256_context ctx_outputSurjectionProofsHash = sha256_init(tx->outputSurjectionProofsHash.s);\n    sha256_context ctx_outputsHash = sha256_init(tx->outputsHash.s);\n    uint_fast32_t ix_fee = 0;\n\n    /* perm is a temporary array the same length (numFees) and size as feeOutputs.\n     * perm is used to initialize feeOutputs and is not used afterward.\n     * This makes it safe for perm to use the same memory allocation as feeOutputs.\n     */\n    static_assert(sizeof(const sha256_midstate*) == sizeof(sigOutput*), \"Pointers (to structures) ought to have the same size.\");\n    static_assert(alignof(const sha256_midstate*) == alignof(sigOutput*), \"Pointers (to structures) ought to have the same alignment.\");\n    const sha256_midstate** const perm = (const sha256_midstate**)(void*)feeOutputs;\n\n    for (uint_fast32_t i = 0; i < tx->numOutputs; ++i) {\n      copyOutput(&output[i], &ops, &opsLen, &rawTx->output[i]);\n      if (isFee(&rawTx->output[i])) {\n        simplicity_assert(ix_fee < numFees);\n        perm[ix_fee] = &output[i].asset.data;\n        ++ix_fee;\n      }\n      simplicity_sha256_confAsset(&ctx_outputAssetAmountsHash, &output[i].asset);\n      simplicity_sha256_confAmt(&ctx_outputAssetAmountsHash, &output[i].amt);\n      simplicity_sha256_confNonce(&ctx_outputNoncesHash, &output[i].nonce);\n      sha256_hash(&ctx_outputScriptsHash, &output[i].scriptPubKey);\n      sha256_hash(&ctx_outputRangeProofsHash, &output[i].rangeProofHash);\n      sha256_hash(&ctx_outputSurjectionProofsHash, &output[i].surjectionProofHash);\n    }\n\n    simplicity_assert(numFees == ix_fee);\n    if (!simplicity_rsort(perm, numFees)) {\n      simplicity_free(tx);\n      return NULL;\n    }\n\n    /* Initialize the feeOutputs array from the perm array.\n     * Because the perm array entries are the same size as the feeOutputs array entries, it is safe to initialize one by one.\n     *\n     * In practical C implementations, the feeOutputs array entries are initialized to the same value as the perm array entries.\n     * In practical C implementations, this is a no-op, and generally compilers are able to see this fact and eliminate this loop.\n     *\n     * We keep the loop in the code just to be pedantic.\n     */\n    for (size_t i = 0; i < numFees; ++i) {\n      static_assert(0 == offsetof(sigOutput, asset.data), \"asset ID is not first field of sigOutput.\");\n      /* The uintptr_t cast is to suppress warning about both casting away const and a change in pointer alignment.\n       * Each pointer in perm is pointing the the first field of some (non-const) sigOutput*, so this cast is safe.\n       */\n      feeOutputs[i] = (sigOutput*)(uintptr_t)(perm[i]);\n    }\n    tx->numFees = sumFees(feeOutputs, numFees);\n\n    sha256_finalize(&ctx_outputAssetAmountsHash);\n    sha256_finalize(&ctx_outputNoncesHash);\n    sha256_finalize(&ctx_outputScriptsHash);\n    sha256_finalize(&ctx_outputRangeProofsHash);\n    sha256_finalize(&ctx_outputSurjectionProofsHash);\n\n    sha256_hash(&ctx_outputsHash, &tx->outputAssetAmountsHash);\n    sha256_hash(&ctx_outputsHash, &tx->outputNoncesHash);\n    sha256_hash(&ctx_outputsHash, &tx->outputScriptsHash);\n    sha256_hash(&ctx_outputsHash, &tx->outputRangeProofsHash);\n    sha256_finalize(&ctx_outputsHash);\n  }\n  {\n    sha256_context ctx_txHash = sha256_init(tx->txHash.s);\n    sha256_u32be(&ctx_txHash, tx->version);\n    sha256_u32be(&ctx_txHash, tx->lockTime);\n    sha256_hash(&ctx_txHash, &tx->inputsHash);\n    sha256_hash(&ctx_txHash, &tx->outputsHash);\n    sha256_hash(&ctx_txHash, &tx->issuancesHash);\n    sha256_hash(&ctx_txHash, &tx->outputSurjectionProofsHash);\n    sha256_hash(&ctx_txHash, &tx->inputUTXOsHash);\n    sha256_finalize(&ctx_txHash);\n  }\n\n  return tx;\n}\n\n/* Free a pointer to 'elementsTransaction'.\n */\nextern void simplicity_elements_freeTransaction(elementsTransaction* tx) {\n  simplicity_free(tx);\n}\n\n/* Allocate and initialize a 'elementsTapEnv' from a 'rawElementsTapEnv', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: *rawEnv is well-formed (i.e. rawEnv->pathLen <= 128.)\n */\nextern elementsTapEnv* simplicity_elements_mallocTapEnv(const rawElementsTapEnv* rawEnv) {\n  if (!rawEnv) return NULL;\n  if (128 < rawEnv->pathLen) return NULL;\n\n  size_t allocationSize = sizeof(elementsTapEnv);\n\n  const size_t numMidstate = rawEnv->pathLen;\n  const size_t pad1 = PADDING(sha256_midstate, allocationSize);\n\n  if (numMidstate) {\n    if (SIZE_MAX - allocationSize < pad1) return NULL;\n    allocationSize += pad1;\n\n    if (SIZE_MAX / sizeof(sha256_midstate) < numMidstate) return NULL;\n    if (SIZE_MAX - allocationSize < numMidstate * sizeof(sha256_midstate)) return NULL;\n    allocationSize += numMidstate * sizeof(sha256_midstate);\n  }\n\n  char *allocation = simplicity_malloc(allocationSize);\n  if (!allocation) return NULL;\n\n  /* Casting through void* to avoid warning about pointer alignment.\n   * Our padding is done carefully to ensure alignment.\n   */\n  elementsTapEnv* const env = (elementsTapEnv*)(void*)allocation;\n  sha256_midstate* path = NULL;\n  sha256_midstate internalKey;\n\n  sha256_toMidstate(internalKey.s,  &rawEnv->controlBlock[1]);\n\n  if (numMidstate)  {\n    allocation += sizeof(elementsTapEnv) + pad1;\n\n    if (rawEnv->pathLen) {\n      path = (sha256_midstate*)(void*)allocation;\n    }\n  }\n\n  *env = (elementsTapEnv){ .leafVersion = rawEnv->controlBlock[0] & 0xfe\n                         , .internalKey = internalKey\n                         , .path = path\n                         , .pathLen = rawEnv->pathLen\n                         };\n  sha256_toMidstate(env->scriptCMR.s, rawEnv->scriptCMR);\n\n  {\n    sha256_context ctx = sha256_init(env->tappathHash.s);\n    for (int i = 0; i < env->pathLen; ++i) {\n      sha256_toMidstate(path[i].s,  &rawEnv->controlBlock[33+32*i]);\n      sha256_hash(&ctx, &path[i]);\n    }\n    sha256_finalize(&ctx);\n  }\n\n  env->tapLeafHash = simplicity_make_tapleaf(env->leafVersion, &env->scriptCMR);\n\n  {\n    sha256_context ctx = sha256_init(env->tapEnvHash.s);\n    sha256_hash(&ctx, &env->tapLeafHash);\n    sha256_hash(&ctx, &env->tappathHash);\n    sha256_hash(&ctx, &env->internalKey);\n    sha256_finalize(&ctx);\n  }\n  return env;\n}\n\n/* Free a pointer to 'elementsTapEnv'.\n */\nextern void simplicity_elements_freeTapEnv(elementsTapEnv* env) {\n  simplicity_free(env);\n}\n"
  },
  {
    "path": "C/elements/exec.c",
    "content": "#include <simplicity/elements/exec.h>\n\n#include <stdalign.h>\n#include <string.h>\n#include \"primitive.h\"\n#include \"txEnv.h\"\n#include \"../deserialize.h\"\n#include \"../eval.h\"\n#include \"../limitations.h\"\n#include \"../simplicity_alloc.h\"\n#include \"../simplicity_assert.h\"\n#include \"../typeInference.h\"\n\n/* Deserialize a Simplicity 'program' with its 'witness' data and execute it in the environment of the 'ix'th input of 'tx' with `taproot`.\n *\n * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned,\n * meaning we were unable to determine the result of the simplicity program.\n * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value.\n *\n * If deserialization, analysis, or execution fails, then '*error' is set to some simplicity_err.\n * In particular, if the cost analysis exceeds the budget, or exceeds BUDGET_MAX, then '*error' is set to 'SIMPLICITY_ERR_EXEC_BUDGET'.\n * On the other hand, if the cost analysis is less than or equal to minCost, then '*error' is set to 'SIMPLICITY_ERR_OVERWEIGHT'.\n *\n * Note that minCost and budget parameters are in WU, while the cost analysis will be performed in milliWU.\n * Thus the minCost and budget specify a half open interval (minCost, budget] of acceptable cost values in milliWU.\n * Setting minCost to 0 effectively disables the minCost check as every Simplicity program has a non-zero cost analysis.\n *\n * If 'amr != NULL' and the annotated Merkle root of the decoded expression doesn't match 'amr' then '*error' is set to 'SIMPLICITY_ERR_AMR'.\n *\n * Otherwise '*error' is set to 'SIMPLICITY_NO_ERROR'.\n *\n * If 'ihr != NULL' and '*error' is set to 'SIMPLICITY_NO_ERROR', then the identity hash of the root of the decoded expression is written to 'ihr'.\n * Otherwise if 'ihr != NULL'  and '*error' is not set to 'SIMPLCITY_NO_ERROR', then 'ihr' may or may not be written to.\n *\n * Precondition: NULL != error;\n *               NULL != ihr implies unsigned char ihr[32]\n *               NULL != tx;\n *               NULL != taproot;\n *               unsigned char genesisBlockHash[32]\n *               0 <= minCost <= budget;\n *               NULL != amr implies unsigned char amr[32]\n *               unsigned char program[program_len]\n *               unsigned char witness[witness_len]\n */\nextern bool simplicity_elements_execSimplicity( simplicity_err* error, unsigned char* ihr\n                                              , const elementsTransaction* tx, uint_fast32_t ix, const elementsTapEnv* taproot\n                                              , const unsigned char* genesisBlockHash\n                                              , int64_t minCost, int64_t budget\n                                              , const unsigned char* amr\n                                              , const unsigned char* program, size_t program_len\n                                              , const unsigned char* witness, size_t witness_len) {\n  simplicity_assert(NULL != error);\n  simplicity_assert(NULL != tx);\n  simplicity_assert(NULL != taproot);\n  simplicity_assert(NULL != genesisBlockHash);\n  simplicity_assert(0 <= minCost);\n  simplicity_assert(minCost <= budget);\n  simplicity_assert(NULL != program || 0 == program_len);\n  simplicity_assert(NULL != witness || 0 == witness_len);\n\n  combinator_counters census;\n  dag_node* dag = NULL;\n  int_fast32_t dag_len;\n  sha256_midstate amr_hash, genesis_hash;\n\n  if (amr) sha256_toMidstate(amr_hash.s, amr);\n  sha256_toMidstate(genesis_hash.s, genesisBlockHash);\n\n  {\n    bitstream stream = initializeBitstream(program, program_len);\n    dag_len = simplicity_decodeMallocDag(&dag, simplicity_elements_decodeJet, &census, &stream);\n    if (dag_len <= 0) {\n      simplicity_assert(dag_len < 0);\n      *error = (simplicity_err)dag_len;\n      return IS_PERMANENT(*error);\n    }\n    simplicity_assert(NULL != dag);\n    simplicity_assert((uint_fast32_t)dag_len <= DAG_LEN_MAX);\n    *error = simplicity_closeBitstream(&stream);\n  }\n\n  if (IS_OK(*error)) {\n    if (0 != memcmp(taproot->scriptCMR.s, dag[dag_len-1].cmr.s, sizeof(uint32_t[8]))) {\n      *error = SIMPLICITY_ERR_CMR;\n    }\n  }\n\n  if (IS_OK(*error)) {\n    type* type_dag = NULL;\n    *error = simplicity_mallocTypeInference(&type_dag, simplicity_elements_mallocBoundVars, dag, (uint_fast32_t)dag_len, &census);\n    if (IS_OK(*error)) {\n      simplicity_assert(NULL != type_dag);\n      if (0 != dag[dag_len-1].sourceType || 0 != dag[dag_len-1].targetType) {\n        *error = SIMPLICITY_ERR_TYPE_INFERENCE_NOT_PROGRAM;\n      }\n    }\n    if (IS_OK(*error)) {\n      bitstream witness_stream = initializeBitstream(witness, witness_len);\n      *error = simplicity_fillWitnessData(dag, type_dag, (uint_fast32_t)dag_len, &witness_stream);\n      if (IS_OK(*error)) {\n        *error = simplicity_closeBitstream(&witness_stream);\n        if (SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES == *error) *error = SIMPLICITY_ERR_WITNESS_TRAILING_BYTES;\n        if (SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING == *error) *error = SIMPLICITY_ERR_WITNESS_ILLEGAL_PADDING;\n      }\n    }\n    if (IS_OK(*error)) {\n      sha256_midstate ihr_buf;\n      *error = simplicity_verifyNoDuplicateIdentityHashes(&ihr_buf, dag, type_dag, (uint_fast32_t)dag_len);\n      if (IS_OK(*error) && ihr) sha256_fromMidstate(ihr, ihr_buf.s);\n    }\n    if (IS_OK(*error) && amr) {\n      static_assert(DAG_LEN_MAX <= SIZE_MAX / sizeof(analyses), \"analysis array too large.\");\n      static_assert(1 <= DAG_LEN_MAX, \"DAG_LEN_MAX is zero.\");\n      static_assert(DAG_LEN_MAX - 1 <= UINT32_MAX, \"analysis array index does nto fit in uint32_t.\");\n      analyses *analysis = simplicity_malloc((size_t)dag_len * sizeof(analyses));\n      if (analysis) {\n        simplicity_computeAnnotatedMerkleRoot(analysis, dag, type_dag, (uint_fast32_t)dag_len);\n        if (0 != memcmp(amr_hash.s, analysis[dag_len-1].annotatedMerkleRoot.s, sizeof(uint32_t[8]))) {\n          *error = SIMPLICITY_ERR_AMR;\n        }\n      } else {\n        /* malloc failed which counts as a transient error. */\n        *error = SIMPLICITY_ERR_MALLOC;\n      }\n      simplicity_free(analysis);\n    }\n    if (IS_OK(*error)) {\n      txEnv env = simplicity_elements_build_txEnv(tx, taproot, &genesis_hash, ix);\n      static_assert(BUDGET_MAX <= UBOUNDED_MAX, \"BUDGET_MAX doesn't fit in ubounded.\");\n      *error = evalTCOProgram( dag, type_dag, (size_t)dag_len\n                             , minCost <= BUDGET_MAX ? (ubounded)minCost : BUDGET_MAX\n                             , &(ubounded){budget <= BUDGET_MAX ? (ubounded)budget : BUDGET_MAX}\n                             , &env);\n    }\n    simplicity_free(type_dag);\n  }\n\n  simplicity_free(dag);\n  return IS_PERMANENT(*error);\n}\n"
  },
  {
    "path": "C/elements/ops.c",
    "content": "#include \"ops.h\"\n\n/* Add an 'confidential' value to be consumed by an ongoing SHA-256 evaluation.\n * If the 'confidential' value is blinded, then the 'evenPrefix' used if the y coordinate is even,\n * and the 'oddPrefix' is used if the y coordinate is odd.\n * If the 'confidential' value is explicit, then '0x01' is used as the prefix.\n * If the 'confidential' value is \"NULL\" then only '0x00' added.\n *\n * Precondition: NULL != ctx;\n *               NULL != conf;\n */\nvoid simplicity_sha256_confidential(unsigned char evenPrefix, unsigned char oddPrefix, sha256_context* ctx, const confidential* conf) {\n  switch (conf->prefix) {\n   case NONE: sha256_uchar(ctx, 0x00); return;\n   case EXPLICIT: sha256_uchar(ctx, 0x01); break;\n   case EVEN_Y: sha256_uchar(ctx, evenPrefix); break;\n   case ODD_Y: sha256_uchar(ctx, oddPrefix); break;\n  }\n  sha256_hash(ctx, &conf->data);\n}\n\n/* Add an 'confidential' asset to be consumed by an ongoing SHA-256 evaluation.\n *\n * Precondition: NULL != ctx;\n *               NULL != asset;\n */\nvoid simplicity_sha256_confAsset(sha256_context* ctx, const confidential* asset) {\n  simplicity_sha256_confidential(0x0a, 0x0b, ctx, asset);\n}\n\n/* Add an 'confidential' nonce to be consumed by an ongoing SHA-256 evaluation.\n *\n * Precondition: NULL != ctx;\n *               NULL != nonce;\n */\nvoid simplicity_sha256_confNonce(sha256_context* ctx, const confidential* nonce) {\n  simplicity_sha256_confidential(0x02, 0x03, ctx, nonce);\n}\n\n/* Add an 'confidential' amount to be consumed by an ongoing SHA-256 evaluation.\n *\n * Precondition: NULL != ctx;\n *               NULL != amt;\n */\nvoid simplicity_sha256_confAmt(sha256_context* ctx, const confAmount* amt) {\n  switch (amt->prefix) {\n   case NONE: SIMPLICITY_UNREACHABLE;\n   case EXPLICIT:\n    sha256_uchar(ctx, 0x01);\n    sha256_u64be(ctx, amt->explicit);\n    return;\n   case EVEN_Y:\n   case ODD_Y:\n    sha256_uchar(ctx, EVEN_Y == amt->prefix ? 0x08 : 0x09);\n    sha256_hash(ctx, &amt->confidential);\n    return;\n  }\n}\n\n/* Compute an Element's entropy value from a prevoutpoint and a contract hash.\n * A reimplementation of GenerateAssetEntropy from Element's 'issuance.cpp'.\n *\n * Precondition: NULL != op;\n *               NULL != contract;\n */\nsha256_midstate simplicity_generateIssuanceEntropy(const outpoint* op, const sha256_midstate* contract) {\n  uint32_t block[16];\n  unsigned char buf[32];\n  sha256_midstate result;\n\n  /* First hash the outpoint data. */\n  {\n    sha256_context ctx = sha256_init(result.s);\n    sha256_fromMidstate(buf, op->txid.s);\n    sha256_uchars(&ctx, buf, 32);\n    sha256_u32le(&ctx, op->ix);\n    sha256_finalize(&ctx);\n  }\n  /* Fill in the first half of the block with the double hashed outpoint data. */\n  {\n    sha256_context ctx = sha256_init(&block[0]);\n    sha256_fromMidstate(buf, result.s);\n    sha256_uchars(&ctx, buf, 32);\n    sha256_finalize(&ctx);\n  }\n\n  memcpy(&block[8], contract->s, sizeof(contract->s));\n  sha256_iv(result.s);\n  simplicity_sha256_compression(result.s, block);\n\n  return result;\n}\n\n/* Compute an Element's issuance Asset ID value from an entropy value.\n * A reimplementation of CalculateAsset from Element's 'issuance.cpp'.\n *\n * Precondition: NULL != entropy;\n */\nsha256_midstate simplicity_calculateAsset(const sha256_midstate* entropy) {\n  uint32_t block[16] = {0};\n  sha256_midstate result;\n\n  memcpy(&block[0], entropy->s, sizeof(entropy->s));\n  sha256_iv(result.s);\n  simplicity_sha256_compression(result.s, block);\n\n  return result;\n}\n\n/* Compute an Element's issuance Token ID value from an entropy value and an amount prefix.\n * A reimplementation of CalculateReissuanceToken from Element's 'issuance.cpp'.\n *\n * Precondition: NULL != entropy;\n */\nsha256_midstate simplicity_calculateToken(const sha256_midstate* entropy, confPrefix prefix) {\n  uint32_t block[16] = {0};\n  sha256_midstate result;\n\n  memcpy(&block[0], entropy->s, sizeof(entropy->s));\n  block[8] = is_confidential(prefix) ? 0x02000000 : 0x01000000;\n  sha256_iv(result.s);\n  simplicity_sha256_compression(result.s, block);\n\n  return result;\n}\n\n/* Compute an Element's tapleaf hash from a tapleaf version and a 256-bit script value.\n * A reimplementation of ComputeTapleafHash from Element's 'interpreter.cpp'.\n * Only 256-bit script values are supported as that is the size used for Simplicity CMRs.\n *\n * Precondition: NULL != cmr;\n */\nsha256_midstate simplicity_make_tapleaf(unsigned char version, const sha256_midstate* cmr) {\n  sha256_midstate result;\n  sha256_midstate tapleafTag;\n  {\n    static unsigned char tagName[] = \"TapLeaf/elements\";\n    sha256_context ctx = sha256_init(tapleafTag.s);\n    sha256_uchars(&ctx, tagName, sizeof(tagName) - 1);\n    sha256_finalize(&ctx);\n  }\n  sha256_context ctx = sha256_init(result.s);\n  sha256_hash(&ctx, &tapleafTag);\n  sha256_hash(&ctx, &tapleafTag);\n  sha256_uchar(&ctx, version);\n  sha256_uchar(&ctx, 32);\n  sha256_hash(&ctx, cmr);\n  sha256_finalize(&ctx);\n\n  return result;\n}\n\n/* Compute an Element's tapbrach hash from two branches.\n *\n * Precondition: NULL != a;\n *               NULL != b;\n */\nsha256_midstate simplicity_make_tapbranch(const sha256_midstate* a, const sha256_midstate* b) {\n  sha256_midstate result;\n  sha256_midstate tapbranchTag;\n  {\n    static unsigned char tagName[] = \"TapBranch/elements\";\n    sha256_context ctx = sha256_init(tapbranchTag.s);\n    sha256_uchars(&ctx, tagName, sizeof(tagName) - 1);\n    sha256_finalize(&ctx);\n  }\n  sha256_context ctx = sha256_init(result.s);\n  sha256_hash(&ctx, &tapbranchTag);\n  sha256_hash(&ctx, &tapbranchTag);\n  if (sha256_cmp_be(a, b) < 0) {\n    sha256_hash(&ctx, a);\n    sha256_hash(&ctx, b);\n  } else {\n    sha256_hash(&ctx, b);\n    sha256_hash(&ctx, a);\n  }\n  sha256_finalize(&ctx);\n\n  return result;\n}\n"
  },
  {
    "path": "C/elements/ops.h",
    "content": "/* This module defines operations used in the construction the environment ('txEnv') and some jets.\n */\n#ifndef SIMPLICITY_ELEMENTS_OPS_H\n#define SIMPLICITY_ELEMENTS_OPS_H\n\n#include \"../sha256.h\"\n#include \"txEnv.h\"\n\n/* Add an 'confidential' value to be consumed by an ongoing SHA-256 evaluation.\n * If the 'confidential' value is blinded, then the 'evenPrefix' used if the y coordinate is even,\n * and the 'oddPrefix' is used if the y coordinate is odd.\n * If the 'confidential' value is explicit, then '0x01' is used as the prefix.\n * If the 'confidential' value is \"NULL\" then only '0x00' added.\n *\n * Precondition: NULL != ctx;\n *               NULL != conf;\n */\nvoid simplicity_sha256_confidential(unsigned char evenPrefix, unsigned char oddPrefix, sha256_context* ctx, const confidential* conf);\n\n/* Add an 'confidential' asset to be consumed by an ongoing SHA-256 evaluation.\n *\n * Precondition: NULL != ctx;\n *               NULL != asset;\n */\nvoid simplicity_sha256_confAsset(sha256_context* ctx, const confidential* asset);\n\n/* Add an 'confidential' nonce to be consumed by an ongoing SHA-256 evaluation.\n *\n * Precondition: NULL != ctx;\n *               NULL != nonce;\n */\nvoid simplicity_sha256_confNonce(sha256_context* ctx, const confidential* nonce);\n\n/* Add an 'confidential' amount to be consumed by an ongoing SHA-256 evaluation.\n *\n * Precondition: NULL != ctx;\n *               NULL != amt;\n */\nvoid simplicity_sha256_confAmt(sha256_context* ctx, const confAmount* amt);\n\n/* Compute an Element's entropy value from a prevoutpoint and a contract hash.\n * A reimplementation of GenerateAssetEntropy from Element's 'issuance.cpp'.\n *\n * Precondition: NULL != op;\n *               NULL != contract;\n */\nsha256_midstate simplicity_generateIssuanceEntropy(const outpoint* op, const sha256_midstate* contract);\n\n/* Compute an Element's issuance Asset ID value from an entropy value.\n * A reimplementation of CalculateAsset from Element's 'issuance.cpp'.\n *\n * Precondition: NULL != entropy;\n */\nsha256_midstate simplicity_calculateAsset(const sha256_midstate* entropy);\n\n/* Compute an Element's issuance Token ID value from an entropy value and an amount prefix.\n * A reimplementation of CalculateReissuanceToken from Element's 'issuance.cpp'.\n *\n * Precondition: NULL != entropy;\n */\nsha256_midstate simplicity_calculateToken(const sha256_midstate* entropy, confPrefix prefix);\n\n/* Compute an Element's tapleaf hash from a tapleaf version and a 256-bit script value.\n * A reimplementation of ComputeTapleafHash from Element's 'interpreter.cpp'.\n * Only 256-bit script values are supported as that is the size used for Simplicity CMRs.\n *\n * Precondition: NULL != cmr;\n */\nsha256_midstate simplicity_make_tapleaf(unsigned char version, const sha256_midstate* cmr);\n\n/* Compute an Element's tapbrach hash from two branches.\n *\n * Precondition: NULL != a;\n *               NULL != b;\n */\nsha256_midstate simplicity_make_tapbranch(const sha256_midstate* a, const sha256_midstate* b);\n\n#endif\n"
  },
  {
    "path": "C/elements/primitive.c",
    "content": "#include \"primitive.h\"\n\n#include \"elementsJets.h\"\n#include \"../limitations.h\"\n#include \"../simplicity_alloc.h\"\n#include \"../simplicity_assert.h\"\n\n/* An enumeration of all the types we need to construct to specify the input and output types of all jets created by 'decodeJet'. */\nenum TypeNamesForJets {\n#include \"primitiveEnumTy.inc\"\n  NumberOfTypeNames\n};\n\n/* Allocate a fresh set of unification variables bound to at least all the types necessary\n * for all the jets that can be created by 'decodeJet', and also the type 'TWO^256',\n * and also allocate space for 'extra_var_len' many unification variables.\n * Return the number of non-trivial bindings created.\n *\n * However, if malloc fails, then return 0.\n *\n * Precondition: NULL != bound_var;\n *               NULL != word256_ix;\n *               NULL != extra_var_start;\n *               extra_var_len <= 6*DAG_LEN_MAX;\n *\n * Postcondition: Either '*bound_var == NULL' and the function returns 0\n *                or 'unification_var (*bound_var)[*extra_var_start + extra_var_len]' is an array of unification variables\n *                   such that for any 'jet : A |- B' there is some 'i < *extra_var_start' and 'j < *extra_var_start' such that\n *                      '(*bound_var)[i]' is bound to 'A' and '(*bound_var)[j]' is bound to 'B'\n *                   and, '*word256_ix < *extra_var_start' and '(*bound_var)[*word256_ix]' is bound the type 'TWO^256'\n */\nsize_t simplicity_elements_mallocBoundVars(unification_var** bound_var, size_t* word256_ix, size_t* extra_var_start, size_t extra_var_len) {\n  static_assert(1 <= NumberOfTypeNames, \"Missing TypeNamesForJets.\");\n  static_assert(NumberOfTypeNames <= NUMBER_OF_TYPENAMES_MAX, \"Too many TypeNamesForJets.\");\n  static_assert(DAG_LEN_MAX <= (SIZE_MAX - NumberOfTypeNames) / 6, \"NumberOfTypeNames + 6*DAG_LEN_MAX doesn't fit in size_t\");\n  static_assert(NumberOfTypeNames + 6*DAG_LEN_MAX <= SIZE_MAX/sizeof(unification_var) , \"bound_var array too large\");\n  static_assert(NumberOfTypeNames + 6*DAG_LEN_MAX - 1 <= UINT32_MAX, \"bound_var array index doesn't fit in uint32_t\");\n  simplicity_assert(extra_var_len <= 6*DAG_LEN_MAX);\n  *bound_var = simplicity_malloc((NumberOfTypeNames + extra_var_len) * sizeof(unification_var));\n  if (!(*bound_var)) return 0;\n#include \"primitiveInitTy.inc\"\n  *word256_ix = ty_w256;\n  *extra_var_start = NumberOfTypeNames;\n\n  /* 'ty_u' is a trivial binding, so we made 'NumberOfTypeNames - 1' non-trivial bindings. */\n  return NumberOfTypeNames - 1;\n};\n\n/* An enumeration of the names of Elements specific jets and primitives. */\ntypedef enum jetName\n{\n#include \"primitiveEnumJet.inc\"\n  NUMBER_OF_JET_NAMES\n} jetName;\n\n/* Decode an Elements specific jet name from 'stream' into 'result'.\n * All jets begin with a bit prefix of '1' which needs to have already been consumed from the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the stream's prefix doesn't match any valid code for a jet.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'result' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: NULL != result\n *               NULL != stream\n */\nstatic simplicity_err decodePrimitive(jetName* result, bitstream* stream) {\n  int32_t bit = read1Bit(stream);\n  if (bit < 0) return (simplicity_err)bit;\n  if (!bit) {\n    /* Core jets */\n#include \"../decodeCoreJets.inc\"\n    return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n  } else {\n    /* Elements jets */\n#include \"decodeElementsJets.inc\"\n    return SIMPLICITY_ERR_DATA_OUT_OF_RANGE;\n  }\n}\n\n/* Return a copy of the Simplicity node corresponding to the given Elements specific jet 'name'. */\nstatic dag_node jetNode(jetName name) {\n  static const dag_node jet_node[] = {\n    #include \"primitiveJetNode.inc\"\n  };\n\n  return jet_node[name];\n}\n\n/* Decode an Elements specific jet from 'stream' into 'node'.\n * All jets begin with a bit prefix of '1' which needs to have already been consumed from the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the stream's prefix doesn't match any valid code for a jet.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'dag' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: NULL != node\n *               NULL != stream\n */\nsimplicity_err simplicity_elements_decodeJet(dag_node* node, bitstream* stream) {\n  jetName name;\n  simplicity_err error = decodePrimitive(&name, stream);\n  if (!IS_OK(error)) return error;\n  *node = jetNode(name);\n  return SIMPLICITY_NO_ERROR;\n}\n"
  },
  {
    "path": "C/elements/primitive.h",
    "content": "/* Implements the required callbacks for the Elements Simplicity application.\n */\n#ifndef SIMPLICITY_ELEMENTS_PRIMITIVE_H\n#define SIMPLICITY_ELEMENTS_PRIMITIVE_H\n\n#include \"../bitstream.h\"\n#include \"../typeInference.h\"\n\n/* Allocate a fresh set of unification variables bound to at least all the types necessary\n * for all the jets that can be created by 'decodeJet', and also the type 'TWO^256',\n * and also allocate space for 'extra_var_len' many unification variables.\n * Return the number of non-trivial bindings created.\n *\n * However, if malloc fails, then return 0.\n *\n * Precondition: NULL != bound_var;\n *               NULL != word256_ix;\n *               NULL != extra_var_start;\n *               extra_var_len <= 6*DAG_LEN_MAX;\n *\n * Postcondition: Either '*bound_var == NULL' and the function returns 0\n *                or 'unification_var (*bound_var)[*extra_var_start + extra_var_len]' is an array of unification variables\n *                   such that for any 'jet : A |- B' there is some 'i < *extra_var_start' and 'j < *extra_var_start' such that\n *                      '(*bound_var)[i]' is bound to 'A' and '(*bound_var)[j]' is bound to 'B'\n *                   and, '*word256_ix < *extra_var_start' and '(*bound_var)[*word256_ix]' is bound the type 'TWO^256'\n */\nsize_t simplicity_elements_mallocBoundVars(unification_var** bound_var, size_t* word256_ix, size_t* extra_var_start, size_t extra_var_len);\n\n/* Decode an Elements specific jet from 'stream' into 'node'.\n * All jets begin with a bit prefix of '1' which needs to have already been consumed from the 'stream'.\n * Returns 'SIMPLICITY_ERR_DATA_OUT_OF_RANGE' if the stream's prefix doesn't match any valid code for a jet.\n * Returns 'SIMPLICITY_ERR_BITSTRING_EOF' if not enough bits are available in the 'stream'.\n * In the above error cases, 'dag' may be modified.\n * Returns 'SIMPLICITY_NO_ERROR' if successful.\n *\n * Precondition: NULL != node\n *               NULL != stream\n */\nsimplicity_err simplicity_elements_decodeJet(dag_node* node, bitstream* stream);\n\n#endif\n"
  },
  {
    "path": "C/elements/primitiveEnumJet.inc",
    "content": "/* This file has been automatically generated. */\nADD_16,\nADD_32,\nADD_64,\nADD_8,\nALL_16,\nALL_32,\nALL_64,\nALL_8,\nAND_1,\nAND_16,\nAND_32,\nAND_64,\nAND_8,\nANNEX_HASH,\nASSET_AMOUNT_HASH,\nBIP_0340_VERIFY,\nBROKEN_DO_NOT_USE_CHECK_LOCK_DISTANCE,\nBROKEN_DO_NOT_USE_CHECK_LOCK_DURATION,\nBROKEN_DO_NOT_USE_TX_LOCK_DISTANCE,\nBROKEN_DO_NOT_USE_TX_LOCK_DURATION,\nBUILD_TAPBRANCH,\nBUILD_TAPLEAF_SIMPLICITY,\nBUILD_TAPTWEAK,\nCALCULATE_ASSET,\nCALCULATE_CONFIDENTIAL_TOKEN,\nCALCULATE_EXPLICIT_TOKEN,\nCALCULATE_ISSUANCE_ENTROPY,\nCH_1,\nCH_16,\nCH_32,\nCH_64,\nCH_8,\nCHECK_LOCK_HEIGHT,\nCHECK_LOCK_TIME,\nCHECK_SIG_VERIFY,\nCOMPLEMENT_1,\nCOMPLEMENT_16,\nCOMPLEMENT_32,\nCOMPLEMENT_64,\nCOMPLEMENT_8,\nCURRENT_AMOUNT,\nCURRENT_ANNEX_HASH,\nCURRENT_ASSET,\nCURRENT_INDEX,\nCURRENT_ISSUANCE_ASSET_AMOUNT,\nCURRENT_ISSUANCE_ASSET_PROOF,\nCURRENT_ISSUANCE_TOKEN_AMOUNT,\nCURRENT_ISSUANCE_TOKEN_PROOF,\nCURRENT_NEW_ISSUANCE_CONTRACT,\nCURRENT_PEGIN,\nCURRENT_PREV_OUTPOINT,\nCURRENT_REISSUANCE_BLINDING,\nCURRENT_REISSUANCE_ENTROPY,\nCURRENT_SCRIPT_HASH,\nCURRENT_SCRIPT_SIG_HASH,\nCURRENT_SEQUENCE,\nDECOMPRESS,\nDECREMENT_16,\nDECREMENT_32,\nDECREMENT_64,\nDECREMENT_8,\nDIV_MOD_128_64,\nDIV_MOD_16,\nDIV_MOD_32,\nDIV_MOD_64,\nDIV_MOD_8,\nDIVIDE_16,\nDIVIDE_32,\nDIVIDE_64,\nDIVIDE_8,\nDIVIDES_16,\nDIVIDES_32,\nDIVIDES_64,\nDIVIDES_8,\nEQ_1,\nEQ_16,\nEQ_256,\nEQ_32,\nEQ_64,\nEQ_8,\nFE_ADD,\nFE_INVERT,\nFE_IS_ODD,\nFE_IS_ZERO,\nFE_MULTIPLY,\nFE_MULTIPLY_BETA,\nFE_NEGATE,\nFE_NORMALIZE,\nFE_SQUARE,\nFE_SQUARE_ROOT,\nFULL_ADD_16,\nFULL_ADD_32,\nFULL_ADD_64,\nFULL_ADD_8,\nFULL_DECREMENT_16,\nFULL_DECREMENT_32,\nFULL_DECREMENT_64,\nFULL_DECREMENT_8,\nFULL_INCREMENT_16,\nFULL_INCREMENT_32,\nFULL_INCREMENT_64,\nFULL_INCREMENT_8,\nFULL_LEFT_SHIFT_16_1,\nFULL_LEFT_SHIFT_16_2,\nFULL_LEFT_SHIFT_16_4,\nFULL_LEFT_SHIFT_16_8,\nFULL_LEFT_SHIFT_32_1,\nFULL_LEFT_SHIFT_32_16,\nFULL_LEFT_SHIFT_32_2,\nFULL_LEFT_SHIFT_32_4,\nFULL_LEFT_SHIFT_32_8,\nFULL_LEFT_SHIFT_64_1,\nFULL_LEFT_SHIFT_64_16,\nFULL_LEFT_SHIFT_64_2,\nFULL_LEFT_SHIFT_64_32,\nFULL_LEFT_SHIFT_64_4,\nFULL_LEFT_SHIFT_64_8,\nFULL_LEFT_SHIFT_8_1,\nFULL_LEFT_SHIFT_8_2,\nFULL_LEFT_SHIFT_8_4,\nFULL_MULTIPLY_16,\nFULL_MULTIPLY_32,\nFULL_MULTIPLY_64,\nFULL_MULTIPLY_8,\nFULL_RIGHT_SHIFT_16_1,\nFULL_RIGHT_SHIFT_16_2,\nFULL_RIGHT_SHIFT_16_4,\nFULL_RIGHT_SHIFT_16_8,\nFULL_RIGHT_SHIFT_32_1,\nFULL_RIGHT_SHIFT_32_16,\nFULL_RIGHT_SHIFT_32_2,\nFULL_RIGHT_SHIFT_32_4,\nFULL_RIGHT_SHIFT_32_8,\nFULL_RIGHT_SHIFT_64_1,\nFULL_RIGHT_SHIFT_64_16,\nFULL_RIGHT_SHIFT_64_2,\nFULL_RIGHT_SHIFT_64_32,\nFULL_RIGHT_SHIFT_64_4,\nFULL_RIGHT_SHIFT_64_8,\nFULL_RIGHT_SHIFT_8_1,\nFULL_RIGHT_SHIFT_8_2,\nFULL_RIGHT_SHIFT_8_4,\nFULL_SUBTRACT_16,\nFULL_SUBTRACT_32,\nFULL_SUBTRACT_64,\nFULL_SUBTRACT_8,\nGE_IS_ON_CURVE,\nGE_NEGATE,\nGEJ_ADD,\nGEJ_DOUBLE,\nGEJ_EQUIV,\nGEJ_GE_ADD,\nGEJ_GE_ADD_EX,\nGEJ_GE_EQUIV,\nGEJ_INFINITY,\nGEJ_IS_INFINITY,\nGEJ_IS_ON_CURVE,\nGEJ_NEGATE,\nGEJ_NORMALIZE,\nGEJ_RESCALE,\nGEJ_X_EQUIV,\nGEJ_Y_IS_ODD,\nGENERATE,\nGENESIS_BLOCK_HASH,\nHASH_TO_CURVE,\nHIGH_1,\nHIGH_16,\nHIGH_32,\nHIGH_64,\nHIGH_8,\nINCREMENT_16,\nINCREMENT_32,\nINCREMENT_64,\nINCREMENT_8,\nINPUT_AMOUNT,\nINPUT_AMOUNTS_HASH,\nINPUT_ANNEX_HASH,\nINPUT_ANNEXES_HASH,\nINPUT_ASSET,\nINPUT_HASH,\nINPUT_OUTPOINTS_HASH,\nINPUT_PEGIN,\nINPUT_PREV_OUTPOINT,\nINPUT_SCRIPT_HASH,\nINPUT_SCRIPT_SIG_HASH,\nINPUT_SCRIPT_SIGS_HASH,\nINPUT_SCRIPTS_HASH,\nINPUT_SEQUENCE,\nINPUT_SEQUENCES_HASH,\nINPUT_UTXO_HASH,\nINPUT_UTXOS_HASH,\nINPUTS_HASH,\nINTERNAL_KEY,\nIS_ONE_16,\nIS_ONE_32,\nIS_ONE_64,\nIS_ONE_8,\nIS_ZERO_16,\nIS_ZERO_32,\nIS_ZERO_64,\nIS_ZERO_8,\nISSUANCE,\nISSUANCE_ASSET,\nISSUANCE_ASSET_AMOUNT,\nISSUANCE_ASSET_AMOUNTS_HASH,\nISSUANCE_ASSET_PROOF,\nISSUANCE_BLINDING_ENTROPY_HASH,\nISSUANCE_ENTROPY,\nISSUANCE_HASH,\nISSUANCE_RANGE_PROOFS_HASH,\nISSUANCE_TOKEN,\nISSUANCE_TOKEN_AMOUNT,\nISSUANCE_TOKEN_AMOUNTS_HASH,\nISSUANCE_TOKEN_PROOF,\nISSUANCES_HASH,\nLBTC_ASSET,\nLE_16,\nLE_32,\nLE_64,\nLE_8,\nLEFT_EXTEND_16_32,\nLEFT_EXTEND_16_64,\nLEFT_EXTEND_1_16,\nLEFT_EXTEND_1_32,\nLEFT_EXTEND_1_64,\nLEFT_EXTEND_1_8,\nLEFT_EXTEND_32_64,\nLEFT_EXTEND_8_16,\nLEFT_EXTEND_8_32,\nLEFT_EXTEND_8_64,\nLEFT_PAD_HIGH_16_32,\nLEFT_PAD_HIGH_16_64,\nLEFT_PAD_HIGH_1_16,\nLEFT_PAD_HIGH_1_32,\nLEFT_PAD_HIGH_1_64,\nLEFT_PAD_HIGH_1_8,\nLEFT_PAD_HIGH_32_64,\nLEFT_PAD_HIGH_8_16,\nLEFT_PAD_HIGH_8_32,\nLEFT_PAD_HIGH_8_64,\nLEFT_PAD_LOW_16_32,\nLEFT_PAD_LOW_16_64,\nLEFT_PAD_LOW_1_16,\nLEFT_PAD_LOW_1_32,\nLEFT_PAD_LOW_1_64,\nLEFT_PAD_LOW_1_8,\nLEFT_PAD_LOW_32_64,\nLEFT_PAD_LOW_8_16,\nLEFT_PAD_LOW_8_32,\nLEFT_PAD_LOW_8_64,\nLEFT_ROTATE_16,\nLEFT_ROTATE_32,\nLEFT_ROTATE_64,\nLEFT_ROTATE_8,\nLEFT_SHIFT_16,\nLEFT_SHIFT_32,\nLEFT_SHIFT_64,\nLEFT_SHIFT_8,\nLEFT_SHIFT_WITH_16,\nLEFT_SHIFT_WITH_32,\nLEFT_SHIFT_WITH_64,\nLEFT_SHIFT_WITH_8,\nLEFTMOST_16_1,\nLEFTMOST_16_2,\nLEFTMOST_16_4,\nLEFTMOST_16_8,\nLEFTMOST_32_1,\nLEFTMOST_32_16,\nLEFTMOST_32_2,\nLEFTMOST_32_4,\nLEFTMOST_32_8,\nLEFTMOST_64_1,\nLEFTMOST_64_16,\nLEFTMOST_64_2,\nLEFTMOST_64_32,\nLEFTMOST_64_4,\nLEFTMOST_64_8,\nLEFTMOST_8_1,\nLEFTMOST_8_2,\nLEFTMOST_8_4,\nLINEAR_COMBINATION_1,\nLINEAR_VERIFY_1,\nLOCK_TIME,\nLOW_1,\nLOW_16,\nLOW_32,\nLOW_64,\nLOW_8,\nLT_16,\nLT_32,\nLT_64,\nLT_8,\nMAJ_1,\nMAJ_16,\nMAJ_32,\nMAJ_64,\nMAJ_8,\nMAX_16,\nMAX_32,\nMAX_64,\nMAX_8,\nMEDIAN_16,\nMEDIAN_32,\nMEDIAN_64,\nMEDIAN_8,\nMIN_16,\nMIN_32,\nMIN_64,\nMIN_8,\nMODULO_16,\nMODULO_32,\nMODULO_64,\nMODULO_8,\nMULTIPLY_16,\nMULTIPLY_32,\nMULTIPLY_64,\nMULTIPLY_8,\nNEGATE_16,\nNEGATE_32,\nNEGATE_64,\nNEGATE_8,\nNEW_ISSUANCE_CONTRACT,\nNONCE_HASH,\nNUM_INPUTS,\nNUM_OUTPUTS,\nONE_16,\nONE_32,\nONE_64,\nONE_8,\nOR_1,\nOR_16,\nOR_32,\nOR_64,\nOR_8,\nOUTPOINT_HASH,\nOUTPUT_AMOUNT,\nOUTPUT_AMOUNTS_HASH,\nOUTPUT_ASSET,\nOUTPUT_HASH,\nOUTPUT_IS_FEE,\nOUTPUT_NONCE,\nOUTPUT_NONCES_HASH,\nOUTPUT_NULL_DATUM,\nOUTPUT_RANGE_PROOF,\nOUTPUT_RANGE_PROOFS_HASH,\nOUTPUT_SCRIPT_HASH,\nOUTPUT_SCRIPTS_HASH,\nOUTPUT_SURJECTION_PROOF,\nOUTPUT_SURJECTION_PROOFS_HASH,\nOUTPUTS_HASH,\nPARSE_LOCK,\nPARSE_SEQUENCE,\nPOINT_VERIFY_1,\nREISSUANCE_BLINDING,\nREISSUANCE_ENTROPY,\nRIGHT_EXTEND_16_32,\nRIGHT_EXTEND_16_64,\nRIGHT_EXTEND_32_64,\nRIGHT_EXTEND_8_16,\nRIGHT_EXTEND_8_32,\nRIGHT_EXTEND_8_64,\nRIGHT_PAD_HIGH_16_32,\nRIGHT_PAD_HIGH_16_64,\nRIGHT_PAD_HIGH_1_16,\nRIGHT_PAD_HIGH_1_32,\nRIGHT_PAD_HIGH_1_64,\nRIGHT_PAD_HIGH_1_8,\nRIGHT_PAD_HIGH_32_64,\nRIGHT_PAD_HIGH_8_16,\nRIGHT_PAD_HIGH_8_32,\nRIGHT_PAD_HIGH_8_64,\nRIGHT_PAD_LOW_16_32,\nRIGHT_PAD_LOW_16_64,\nRIGHT_PAD_LOW_1_16,\nRIGHT_PAD_LOW_1_32,\nRIGHT_PAD_LOW_1_64,\nRIGHT_PAD_LOW_1_8,\nRIGHT_PAD_LOW_32_64,\nRIGHT_PAD_LOW_8_16,\nRIGHT_PAD_LOW_8_32,\nRIGHT_PAD_LOW_8_64,\nRIGHT_ROTATE_16,\nRIGHT_ROTATE_32,\nRIGHT_ROTATE_64,\nRIGHT_ROTATE_8,\nRIGHT_SHIFT_16,\nRIGHT_SHIFT_32,\nRIGHT_SHIFT_64,\nRIGHT_SHIFT_8,\nRIGHT_SHIFT_WITH_16,\nRIGHT_SHIFT_WITH_32,\nRIGHT_SHIFT_WITH_64,\nRIGHT_SHIFT_WITH_8,\nRIGHTMOST_16_1,\nRIGHTMOST_16_2,\nRIGHTMOST_16_4,\nRIGHTMOST_16_8,\nRIGHTMOST_32_1,\nRIGHTMOST_32_16,\nRIGHTMOST_32_2,\nRIGHTMOST_32_4,\nRIGHTMOST_32_8,\nRIGHTMOST_64_1,\nRIGHTMOST_64_16,\nRIGHTMOST_64_2,\nRIGHTMOST_64_32,\nRIGHTMOST_64_4,\nRIGHTMOST_64_8,\nRIGHTMOST_8_1,\nRIGHTMOST_8_2,\nRIGHTMOST_8_4,\nSCALAR_ADD,\nSCALAR_INVERT,\nSCALAR_IS_ZERO,\nSCALAR_MULTIPLY,\nSCALAR_MULTIPLY_LAMBDA,\nSCALAR_NEGATE,\nSCALAR_NORMALIZE,\nSCALAR_SQUARE,\nSCALE,\nSCRIPT_CMR,\nSHA_256_BLOCK,\nSHA_256_CTX_8_ADD_1,\nSHA_256_CTX_8_ADD_128,\nSHA_256_CTX_8_ADD_16,\nSHA_256_CTX_8_ADD_2,\nSHA_256_CTX_8_ADD_256,\nSHA_256_CTX_8_ADD_32,\nSHA_256_CTX_8_ADD_4,\nSHA_256_CTX_8_ADD_512,\nSHA_256_CTX_8_ADD_64,\nSHA_256_CTX_8_ADD_8,\nSHA_256_CTX_8_ADD_BUFFER_511,\nSHA_256_CTX_8_FINALIZE,\nSHA_256_CTX_8_INIT,\nSHA_256_IV,\nSIG_ALL_HASH,\nSOME_1,\nSOME_16,\nSOME_32,\nSOME_64,\nSOME_8,\nSUBTRACT_16,\nSUBTRACT_32,\nSUBTRACT_64,\nSUBTRACT_8,\nSWU,\nTAP_ENV_HASH,\nTAPDATA_INIT,\nTAPLEAF_HASH,\nTAPLEAF_VERSION,\nTAPPATH,\nTAPPATH_HASH,\nTOTAL_FEE,\nTRANSACTION_ID,\nTX_HASH,\nTX_IS_FINAL,\nTX_LOCK_HEIGHT,\nTX_LOCK_TIME,\nVERIFY,\nVERSION,\nXOR_1,\nXOR_16,\nXOR_32,\nXOR_64,\nXOR_8,\nXOR_XOR_1,\nXOR_XOR_16,\nXOR_XOR_32,\nXOR_XOR_64,\nXOR_XOR_8,\n"
  },
  {
    "path": "C/elements/primitiveEnumTy.inc",
    "content": "/* This file has been automatically generated. */\nty_u = 0,\nty_b = 1,\nty_w2 = 2,\nty_w4 = 3,\nty_w8 = 4,\nty_w16 = 5,\nty_w32 = 6,\nty_w64 = 7,\nty_w128 = 8,\nty_w256 = 9,\nty_w512 = 10,\nty_w1Ki = 11,\nty_w2Ki = 12,\nty_w4Ki = 13,\nty_w8Ki = 14,\nty_w16Ki = 15,\nty_w32Ki = 16,\nty_w64Ki = 17,\nty_w128Ki = 18,\nty_w256Ki = 19,\nty_w512Ki = 20,\nty_w1Mi = 21,\nty_w2Mi = 22,\nty_w4Mi = 23,\nty_w8Mi = 24,\nty_w16Mi = 25,\nty_w32Mi = 26,\nty_w64Mi = 27,\nty_w128Mi = 28,\nty_w256Mi = 29,\nty_w512Mi = 30,\nty_w1Gi = 31,\nty_w2Gi = 32,\nty_mb,\nty_mw8,\nty_mw16,\nty_mw32,\nty_mw64,\nty_mw128,\nty_mw256,\nty_mw512,\nty_mw1Ki,\nty_mw2Ki,\nty_mmb,\nty_mmw256,\nty_mmspbw256w64,\nty_mmspbw256w256,\nty_mmspw2w256sbw4,\nty_msw16w16,\nty_mspbw256w64,\nty_mspbw256w256,\nty_mspw2w256sbw4,\nty_mpw256w32,\nty_mpspbw256w256spbw256w64,\nty_sbw4,\nty_sw16w16,\nty_sw32w32,\nty_spbw256w64,\nty_spbw256w256,\nty_spw2w256sbw4,\nty_pbw2,\nty_pbw8,\nty_pbw16,\nty_pbw32,\nty_pbw64,\nty_pbw128,\nty_pbw256,\nty_pbpw4w8,\nty_pbpw4w16,\nty_pbpw8w32,\nty_pbpw8w64,\nty_pw2w8,\nty_pw2w16,\nty_pw2w32,\nty_pw2w64,\nty_pw2w256,\nty_pw4w8,\nty_pw4w16,\nty_pw4w32,\nty_pw4w64,\nty_pw8b,\nty_pw8w2,\nty_pw8w4,\nty_pw8w16,\nty_pw8w32,\nty_pw8w64,\nty_pw16b,\nty_pw16w2,\nty_pw16w4,\nty_pw16w8,\nty_pw16w32,\nty_pw16w64,\nty_pw32b,\nty_pw32w2,\nty_pw32w4,\nty_pw32w8,\nty_pw32w16,\nty_pw32w64,\nty_pw64b,\nty_pw64w2,\nty_pw64w4,\nty_pw64w8,\nty_pw64w16,\nty_pw64w32,\nty_pw64w128,\nty_pw64w256,\nty_pw128w64,\nty_pw256w32,\nty_pw256w512,\nty_pw256pbw256,\nty_pw256pw512w256,\nty_pw512w256,\nty_pmw16mw8,\nty_pmw32pmw16mw8,\nty_pmw64pmw32pmw16mw8,\nty_pmw128pmw64pmw32pmw16mw8,\nty_pmw256pw256w32,\nty_pmw256pmw128pmw64pmw32pmw16mw8,\nty_pmw512pmw256pmw128pmw64pmw32pmw16mw8,\nty_pmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8,\nty_pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8,\nty_pspbw256w256spbw256w64,\nty_ppw256w32w256,\nty_ppw256w512w256,\nty_ppw256w512w512,\nty_ppw256pbw256w256,\nty_ppw256pw512w256w256,\nty_ppw512w256w256,\nty_ppw512w256w512,\nty_ppw512w256pw512w256,\nty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256,\nty_pppw256w512w256w512,\nty_pppw256pbw256w256pbw256,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w8,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w16,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w32,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w64,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w128,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w256,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w512,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w1Ki,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w2Ki,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w4Ki,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mw256,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mspbw256w256,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw256pw256w32,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8,\nty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pspbw256w256spbw256w64,\n"
  },
  {
    "path": "C/elements/primitiveInitTy.inc",
    "content": "/* This file has been automatically generated. */\n(*bound_var)[ty_u] = (unification_var){ .isBound = true, .bound = { .kind = ONE }};\n(*bound_var)[ty_b] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_u] } }};\n(*bound_var)[ty_w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_w128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_w1Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_w2Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w1Ki], &(*bound_var)[ty_w1Ki] } }};\n(*bound_var)[ty_w4Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2Ki], &(*bound_var)[ty_w2Ki] } }};\n(*bound_var)[ty_w8Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4Ki], &(*bound_var)[ty_w4Ki] } }};\n(*bound_var)[ty_w16Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8Ki], &(*bound_var)[ty_w8Ki] } }};\n(*bound_var)[ty_w32Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16Ki], &(*bound_var)[ty_w16Ki] } }};\n(*bound_var)[ty_w64Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32Ki], &(*bound_var)[ty_w32Ki] } }};\n(*bound_var)[ty_w128Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64Ki], &(*bound_var)[ty_w64Ki] } }};\n(*bound_var)[ty_w256Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128Ki], &(*bound_var)[ty_w128Ki] } }};\n(*bound_var)[ty_w512Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256Ki], &(*bound_var)[ty_w256Ki] } }};\n(*bound_var)[ty_w1Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512Ki], &(*bound_var)[ty_w512Ki] } }};\n(*bound_var)[ty_w2Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w1Mi], &(*bound_var)[ty_w1Mi] } }};\n(*bound_var)[ty_w4Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2Mi], &(*bound_var)[ty_w2Mi] } }};\n(*bound_var)[ty_w8Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4Mi], &(*bound_var)[ty_w4Mi] } }};\n(*bound_var)[ty_w16Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8Mi], &(*bound_var)[ty_w8Mi] } }};\n(*bound_var)[ty_w32Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16Mi], &(*bound_var)[ty_w16Mi] } }};\n(*bound_var)[ty_w64Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32Mi], &(*bound_var)[ty_w32Mi] } }};\n(*bound_var)[ty_w128Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64Mi], &(*bound_var)[ty_w64Mi] } }};\n(*bound_var)[ty_w256Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128Mi], &(*bound_var)[ty_w128Mi] } }};\n(*bound_var)[ty_w512Mi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256Mi], &(*bound_var)[ty_w256Mi] } }};\n(*bound_var)[ty_w1Gi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512Mi], &(*bound_var)[ty_w512Mi] } }};\n(*bound_var)[ty_w2Gi] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w1Gi], &(*bound_var)[ty_w1Gi] } }};\n(*bound_var)[ty_mb] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_mw8] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_mw16] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_mw32] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_mw64] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_mw128] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_mw256] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_mw512] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_mw1Ki] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w1Ki] } }};\n(*bound_var)[ty_mw2Ki] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_w2Ki] } }};\n(*bound_var)[ty_mmb] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_mb] } }};\n(*bound_var)[ty_mmw256] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_mw256] } }};\n(*bound_var)[ty_mmspbw256w64] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_mspbw256w64] } }};\n(*bound_var)[ty_mmspbw256w256] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_mspbw256w256] } }};\n(*bound_var)[ty_mmspw2w256sbw4] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_mspw2w256sbw4] } }};\n(*bound_var)[ty_msw16w16] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_sw16w16] } }};\n(*bound_var)[ty_mspbw256w64] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_spbw256w64] } }};\n(*bound_var)[ty_mspbw256w256] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_spbw256w256] } }};\n(*bound_var)[ty_mspw2w256sbw4] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_spw2w256sbw4] } }};\n(*bound_var)[ty_mpw256w32] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_pw256w32] } }};\n(*bound_var)[ty_mpspbw256w256spbw256w64] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_u], &(*bound_var)[ty_pspbw256w256spbw256w64] } }};\n(*bound_var)[ty_sbw4] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_sw16w16] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_sw32w32] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_spbw256w64] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_pbw256], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_spbw256w256] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_pbw256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_spw2w256sbw4] = (unification_var){ .isBound = true, .bound = { .kind = SUM, .arg = { &(*bound_var)[ty_pw2w256], &(*bound_var)[ty_sbw4] } }};\n(*bound_var)[ty_pbw2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pbw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pbw16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pbw32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pbw64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pbw128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_pbw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pbpw4w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw4w8] } }};\n(*bound_var)[ty_pbpw4w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw4w16] } }};\n(*bound_var)[ty_pbpw8w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw8w32] } }};\n(*bound_var)[ty_pbpw8w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_b], &(*bound_var)[ty_pw8w64] } }};\n(*bound_var)[ty_pw2w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw2w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw2w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw2w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw2w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w2], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pw4w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw4w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw4w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw4w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w4], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw8b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw8w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw8w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw8w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw8w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw8w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w8], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw16b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw16w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw16w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw16w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw16w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw16w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w16], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw32b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw32w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw32w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw32w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw32w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw32w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w32], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw64b] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_b] } }};\n(*bound_var)[ty_pw64w2] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w2] } }};\n(*bound_var)[ty_pw64w4] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w4] } }};\n(*bound_var)[ty_pw64w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pw64w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pw64w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw64w128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_pw64w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w64], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pw128w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w128], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pw256w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pw256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_pw256pbw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_pbw256] } }};\n(*bound_var)[ty_pw256pw512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w256], &(*bound_var)[ty_pw512w256] } }};\n(*bound_var)[ty_pw512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_w512], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw16], &(*bound_var)[ty_mw8] } }};\n(*bound_var)[ty_pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw32], &(*bound_var)[ty_pmw16mw8] } }};\n(*bound_var)[ty_pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw64], &(*bound_var)[ty_pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw128], &(*bound_var)[ty_pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw256pw256w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw256], &(*bound_var)[ty_pw256w32] } }};\n(*bound_var)[ty_pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw256], &(*bound_var)[ty_pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw512], &(*bound_var)[ty_pmw256pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw1Ki], &(*bound_var)[ty_pmw512pmw256pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_mw2Ki], &(*bound_var)[ty_pmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pspbw256w256spbw256w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_spbw256w256], &(*bound_var)[ty_spbw256w64] } }};\n(*bound_var)[ty_ppw256w32w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256w32], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw256w512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256w512], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw256w512w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256w512], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_ppw256pbw256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256pbw256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw256pw512w256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw256pw512w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw512w256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw512w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_ppw512w256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw512w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_ppw512w256pw512w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pw512w256], &(*bound_var)[ty_pw512w256] } }};\n(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_pmw256pmw128pmw64pmw32pmw16mw8], &(*bound_var)[ty_pw64w256] } }};\n(*bound_var)[ty_pppw256w512w256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppw256w512w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_pppw256pbw256w256pbw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppw256pbw256w256], &(*bound_var)[ty_pbw256] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w8] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w16] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w16] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w32] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w64] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w128] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w128] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w256] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w512] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w512] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w1Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w1Ki] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w2Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w2Ki] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w4Ki] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_w4Ki] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mw256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_mw256] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mspbw256w256] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_mspbw256w256] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw256pw256w32] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_pmw256pw256w32] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8] } }};\n(*bound_var)[ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pspbw256w256spbw256w64] = (unification_var){ .isBound = true, .bound = { .kind = PRODUCT, .arg = { &(*bound_var)[ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256], &(*bound_var)[ty_pspbw256w256spbw256w64] } }};\n"
  },
  {
    "path": "C/elements/primitiveJetNode.inc",
    "content": "/* This file has been automatically generated. */\n[ADD_16] =\n{ .tag = JET\n, .jet = simplicity_add_16\n, .cmr = {{0x26ae0994u, 0xce8b771au, 0xf7ad2851u, 0xb83b49a5u, 0x95053658u, 0x9f67bd85u, 0x59470460u, 0x29751c0du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw16\n, .cost = 108 /* milli weight units */\n}\n,[ADD_32] =\n{ .tag = JET\n, .jet = simplicity_add_32\n, .cmr = {{0x3d767446u, 0x6ed69e1du, 0xbedcd480u, 0x57a9e628u, 0x8c222532u, 0xfbc50480u, 0x49928cfbu, 0x77f829d9u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw32\n, .cost = 117 /* milli weight units */\n}\n,[ADD_64] =\n{ .tag = JET\n, .jet = simplicity_add_64\n, .cmr = {{0x9b56e61eu, 0xefe2805cu, 0xa87396bdu, 0xfb03f5e1u, 0xb1385f7au, 0xc4bff768u, 0x4026a07cu, 0xf97fb6f6u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_pbw64\n, .cost = 109 /* milli weight units */\n}\n,[ADD_8] =\n{ .tag = JET\n, .jet = simplicity_add_8\n, .cmr = {{0xd7328c09u, 0x14ee999eu, 0xfa0a6cb2u, 0x6eb40912u, 0xc215c062u, 0xe58a981au, 0xe6b2e4a8u, 0x0474a1dau}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw8\n, .cost = 112 /* milli weight units */\n}\n,[ALL_16] =\n{ .tag = JET\n, .jet = simplicity_all_16\n, .cmr = {{0x16f0c930u, 0x7eb8f4c1u, 0xfdd1bafau, 0xef287924u, 0x2958498eu, 0x8f5b2e0du, 0x29f06553u, 0xdc06a0bdu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 62 /* milli weight units */\n}\n,[ALL_32] =\n{ .tag = JET\n, .jet = simplicity_all_32\n, .cmr = {{0x0eb8b40du, 0x29021747u, 0xeec451d4u, 0xe663586au, 0x436c2db0u, 0x932675dau, 0xf2166123u, 0xbfe452a6u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 65 /* milli weight units */\n}\n,[ALL_64] =\n{ .tag = JET\n, .jet = simplicity_all_64\n, .cmr = {{0xa65c82d5u, 0x3d382ee2u, 0x9aa88b77u, 0x18a97fbbu, 0xce6475ecu, 0x32c4b4cdu, 0x6908fde4u, 0x5d81b624u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 79 /* milli weight units */\n}\n,[ALL_8] =\n{ .tag = JET\n, .jet = simplicity_all_8\n, .cmr = {{0x1d3ec7fbu, 0x6a07847cu, 0x92b8a998u, 0xe1f6b478u, 0x319d050au, 0x387642f4u, 0x032d2f7du, 0x2e027fcdu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 76 /* milli weight units */\n}\n,[AND_1] =\n{ .tag = JET\n, .jet = simplicity_and_1\n, .cmr = {{0xb773cefau, 0x418957feu, 0xa7dfb49cu, 0x6c43b3dbu, 0xfa35fa3du, 0x80de8cfdu, 0x4d70c08du, 0x945f5fbau}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 79 /* milli weight units */\n}\n,[AND_16] =\n{ .tag = JET\n, .jet = simplicity_and_16\n, .cmr = {{0x57dd730bu, 0x1c8ddff1u, 0x3cae2769u, 0x562be0abu, 0xc6ca3bc8u, 0x02da0abbu, 0xb7fc138cu, 0xa463da59u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 88 /* milli weight units */\n}\n,[AND_32] =\n{ .tag = JET\n, .jet = simplicity_and_32\n, .cmr = {{0x753e332du, 0xdfa096f0u, 0x8399ffaau, 0x7ec4da40u, 0x35bcbaa1u, 0x42e6e38du, 0x4cb607ceu, 0x1f0b051du}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 94 /* milli weight units */\n}\n,[AND_64] =\n{ .tag = JET\n, .jet = simplicity_and_64\n, .cmr = {{0xf1ad5e6cu, 0x63ee5c89u, 0x0b0f2e71u, 0x1561b905u, 0x316487acu, 0x4044dd23u, 0x0cf6a736u, 0xf81bd4f3u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 93 /* milli weight units */\n}\n,[AND_8] =\n{ .tag = JET\n, .jet = simplicity_and_8\n, .cmr = {{0xac828b72u, 0x4c5f5340u, 0xb51e76e7u, 0xb6e8b23au, 0xeab7533fu, 0xd8c091aeu, 0x2a515530u, 0xae7ab200u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 91 /* milli weight units */\n}\n,[ANNEX_HASH] =\n{ .tag = JET\n, .jet = simplicity_annex_hash\n, .cmr = {{0xeba1b7fbu, 0x2ea8d57au, 0xf3b6273eu, 0x5182fb99u, 0xdb1708b2u, 0xd0afb9c6u, 0xad0358ccu, 0x3f647dc8u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mw256\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 241 /* milli weight units */\n}\n,[ASSET_AMOUNT_HASH] =\n{ .tag = JET\n, .jet = simplicity_asset_amount_hash\n, .cmr = {{0xa864d1f1u, 0xf83950b6u, 0x3196fe88u, 0xbaec2e42u, 0x28953230u, 0xbe45c88cu, 0x4e0b9917u, 0x8b338f07u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pspbw256w256spbw256w64\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 308 /* milli weight units */\n}\n,[BIP_0340_VERIFY] =\n{ .tag = JET\n, .jet = simplicity_bip_0340_verify\n, .cmr = {{0xc9c45a8au, 0xec865914u, 0x3bfe2af6u, 0xead48d4eu, 0x0542453au, 0xcae84b9bu, 0xbb97656bu, 0x670bdfddu}}\n, .sourceIx = ty_w1Ki\n, .targetIx = ty_u\n, .cost = 49087 /* milli weight units */\n}\n,[BROKEN_DO_NOT_USE_CHECK_LOCK_DISTANCE] =\n{ .tag = JET\n, .jet = simplicity_broken_do_not_use_check_lock_distance\n, .cmr = {{0x7f78c7a7u, 0x7a25ada2u, 0x23267d23u, 0x9a5922f7u, 0x64b8ac0cu, 0x2fcef68eu, 0xb93c0d92u, 0xda4af515u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_u\n, .cost = 105 /* milli weight units */\n}\n,[BROKEN_DO_NOT_USE_CHECK_LOCK_DURATION] =\n{ .tag = JET\n, .jet = simplicity_broken_do_not_use_check_lock_duration\n, .cmr = {{0x73dac8e2u, 0x5d87eaf3u, 0x82c2a772u, 0x06ad38b9u, 0x384361e7u, 0xd0dc87c0u, 0xfa7af7eau, 0x524597b7u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_u\n, .cost = 102 /* milli weight units */\n}\n,[BROKEN_DO_NOT_USE_TX_LOCK_DISTANCE] =\n{ .tag = JET\n, .jet = simplicity_broken_do_not_use_tx_lock_distance\n, .cmr = {{0x4c7773b8u, 0x18cb7ee5u, 0xf54f925au, 0xad015677u, 0xa043a72fu, 0x316a187cu, 0xc28c696cu, 0xfcb90807u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 91 /* milli weight units */\n}\n,[BROKEN_DO_NOT_USE_TX_LOCK_DURATION] =\n{ .tag = JET\n, .jet = simplicity_broken_do_not_use_tx_lock_duration\n, .cmr = {{0xcc9c64c8u, 0xb6eb4bf0u, 0x9694af5au, 0x35d957a4u, 0x05e66c1bu, 0x35224ed6u, 0x75878918u, 0x452440b2u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 84 /* milli weight units */\n}\n,[BUILD_TAPBRANCH] =\n{ .tag = JET\n, .jet = simplicity_build_tapbranch\n, .cmr = {{0xcbecf9bcu, 0xe172c50fu, 0x585951dfu, 0xf0e0523du, 0xb109e570u, 0x25ec37deu, 0x2c3a74d4u, 0xa673f225u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 2563 /* milli weight units */\n}\n,[BUILD_TAPLEAF_SIMPLICITY] =\n{ .tag = JET\n, .jet = simplicity_build_tapleaf_simplicity\n, .cmr = {{0x736e9fceu, 0xfb5b873eu, 0x09f2681eu, 0x74e49f5au, 0x1056f90au, 0xf52ab3ecu, 0x5b197727u, 0xd39834beu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 1843 /* milli weight units */\n}\n,[BUILD_TAPTWEAK] =\n{ .tag = JET\n, .jet = simplicity_build_taptweak\n, .cmr = {{0x38741f80u, 0xa2bf10f8u, 0xf8723077u, 0xc6741cbeu, 0xae2dcac8u, 0x57901b81u, 0x3725806fu, 0x21898ee3u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 92813 /* milli weight units */\n}\n,[CALCULATE_ASSET] =\n{ .tag = JET\n, .jet = simplicity_calculate_asset\n, .cmr = {{0x676f988eu, 0x547251e7u, 0xa09eede1u, 0x920a9c5du, 0x35e75759u, 0xe6d8d49bu, 0x580ceb3eu, 0x146bcf7eu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 807 /* milli weight units */\n}\n,[CALCULATE_CONFIDENTIAL_TOKEN] =\n{ .tag = JET\n, .jet = simplicity_calculate_confidential_token\n, .cmr = {{0x8e402905u, 0x60743398u, 0x40c0e700u, 0x9b66f382u, 0xbb98d7ddu, 0xe719dd2cu, 0x9f2fd3acu, 0xd9325ac6u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 707 /* milli weight units */\n}\n,[CALCULATE_EXPLICIT_TOKEN] =\n{ .tag = JET\n, .jet = simplicity_calculate_explicit_token\n, .cmr = {{0x87522802u, 0x0b456c99u, 0x8aad3ac5u, 0xc4836f71u, 0x9445dcbeu, 0x6bd274e8u, 0xca145d82u, 0x797e1b92u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 771 /* milli weight units */\n}\n,[CALCULATE_ISSUANCE_ENTROPY] =\n{ .tag = JET\n, .jet = simplicity_calculate_issuance_entropy\n, .cmr = {{0xa6e7c434u, 0xaee5a733u, 0x0c1fc246u, 0xf71dcf05u, 0x1ce54bdeu, 0xe7b8e639u, 0x57be18c2u, 0xd751c653u}}\n, .sourceIx = ty_ppw256w32w256\n, .targetIx = ty_w256\n, .cost = 2095 /* milli weight units */\n}\n,[CH_1] =\n{ .tag = JET\n, .jet = simplicity_ch_1\n, .cmr = {{0xb841b857u, 0xa4aa50eau, 0xca27a26fu, 0x7442fcbfu, 0xe954677au, 0xe6d455f6u, 0x05654989u, 0xe35aeb13u}}\n, .sourceIx = ty_pbw2\n, .targetIx = ty_b\n, .cost = 78 /* milli weight units */\n}\n,[CH_16] =\n{ .tag = JET\n, .jet = simplicity_ch_16\n, .cmr = {{0x9cff11a0u, 0x9b6041e5u, 0xf2639ae4u, 0xc065a18fu, 0xc675db2fu, 0xbd985408u, 0xe28f027au, 0x99110e11u}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 94 /* milli weight units */\n}\n,[CH_32] =\n{ .tag = JET\n, .jet = simplicity_ch_32\n, .cmr = {{0x071cef80u, 0x39c79f71u, 0x31cd6a5fu, 0xe493dc26u, 0x8f9db58fu, 0x7b20a855u, 0x55e297bdu, 0xd216cf40u}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 91 /* milli weight units */\n}\n,[CH_64] =\n{ .tag = JET\n, .jet = simplicity_ch_64\n, .cmr = {{0xd555d219u, 0x63b0192fu, 0xc97214b6u, 0x3dc1c3afu, 0x758b2911u, 0x58f0e1a3u, 0xbcfdea67u, 0x9c666da6u}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 91 /* milli weight units */\n}\n,[CH_8] =\n{ .tag = JET\n, .jet = simplicity_ch_8\n, .cmr = {{0x353f63b0u, 0xf8cb54f5u, 0xae6575afu, 0x8ca2242cu, 0xeee9f27au, 0x84186eb8u, 0x0e620d5eu, 0x2e8548ecu}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 77 /* milli weight units */\n}\n,[CHECK_LOCK_HEIGHT] =\n{ .tag = JET\n, .jet = simplicity_check_lock_height\n, .cmr = {{0x9e7898d0u, 0x37627134u, 0xd2bd70c7u, 0xfca9cba4u, 0x5eaf267du, 0x4d09ad50u, 0xa9ef717au, 0x8f2749dbu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_u\n, .cost = 77 /* milli weight units */\n}\n,[CHECK_LOCK_TIME] =\n{ .tag = JET\n, .jet = simplicity_check_lock_time\n, .cmr = {{0x68673d12u, 0xe2732faau, 0x1d39e213u, 0x6b1406afu, 0xa098a84cu, 0x96e8d605u, 0x02a2dd61u, 0xc59570bbu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_u\n, .cost = 93 /* milli weight units */\n}\n,[CHECK_SIG_VERIFY] =\n{ .tag = JET\n, .jet = simplicity_check_sig_verify\n, .cmr = {{0xb5801554u, 0x6d285266u, 0x5dd21bf1u, 0x12662670u, 0x20fa5e27u, 0x5001dd46u, 0x18fa4156u, 0x25952e68u}}\n, .sourceIx = ty_ppw256w512w512\n, .targetIx = ty_u\n, .cost = 50000 /* milli weight units */\n}\n,[COMPLEMENT_1] =\n{ .tag = JET\n, .jet = simplicity_complement_1\n, .cmr = {{0xed74eeb8u, 0x3a00c713u, 0xcc14f33eu, 0xfe553383u, 0xcd0411ccu, 0x3020fd89u, 0x27931667u, 0x5d910e66u}}\n, .sourceIx = ty_b\n, .targetIx = ty_b\n, .cost = 79 /* milli weight units */\n}\n,[COMPLEMENT_16] =\n{ .tag = JET\n, .jet = simplicity_complement_16\n, .cmr = {{0x61fdd904u, 0xa4aeb7ebu, 0x7684af61u, 0x8e25aae9u, 0x07cd1db0u, 0xf62d9703u, 0xc5b854e1u, 0x663cac9fu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w16\n, .cost = 75 /* milli weight units */\n}\n,[COMPLEMENT_32] =\n{ .tag = JET\n, .jet = simplicity_complement_32\n, .cmr = {{0xfeb02cc3u, 0x6e195b46u, 0x2ae504a9u, 0x12dadfe6u, 0x6ad47f23u, 0xa0cb3baeu, 0xa21d31aau, 0xa0ce101du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w32\n, .cost = 93 /* milli weight units */\n}\n,[COMPLEMENT_64] =\n{ .tag = JET\n, .jet = simplicity_complement_64\n, .cmr = {{0x45072d5au, 0xa0e5c37cu, 0x9e521dccu, 0x92e8f39au, 0x5f75e7d9u, 0x28670acau, 0xb79cd8c8u, 0xb5b59e1au}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w64\n, .cost = 88 /* milli weight units */\n}\n,[COMPLEMENT_8] =\n{ .tag = JET\n, .jet = simplicity_complement_8\n, .cmr = {{0x6916b28fu, 0xb574d9c9u, 0x08a3f33fu, 0x74bf06f7u, 0xed937254u, 0x247f9efcu, 0x2603d717u, 0x1dd497beu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w8\n, .cost = 80 /* milli weight units */\n}\n,[CURRENT_AMOUNT] =\n{ .tag = JET\n, .jet = simplicity_current_amount\n, .cmr = {{0x9e7bc96du, 0x06c1f4a4u, 0xd2bd4333u, 0xd55643cbu, 0xa6863d3au, 0x338e31dcu, 0x0d179558u, 0x4156ea69u}}\n, .sourceIx = ty_u\n, .targetIx = ty_pspbw256w256spbw256w64\n, .cost = 225 /* milli weight units */\n}\n,[CURRENT_ANNEX_HASH] =\n{ .tag = JET\n, .jet = simplicity_current_annex_hash\n, .cmr = {{0x5f68bdafu, 0xd417febbu, 0x10dee16bu, 0x1d47c21fu, 0xa97efc91u, 0x9157c7f7u, 0xbc54a61du, 0xc4f9f7d6u}}\n, .sourceIx = ty_u\n, .targetIx = ty_mw256\n, .cost = 79 /* milli weight units */\n}\n,[CURRENT_ASSET] =\n{ .tag = JET\n, .jet = simplicity_current_asset\n, .cmr = {{0x03c84459u, 0xa5ecdfdbu, 0x46e3d38eu, 0xcb79ff22u, 0x243fdcf7u, 0x0d80da1bu, 0xa45699e7u, 0x008eecfeu}}\n, .sourceIx = ty_u\n, .targetIx = ty_spbw256w256\n, .cost = 171 /* milli weight units */\n}\n,[CURRENT_INDEX] =\n{ .tag = JET\n, .jet = simplicity_current_index\n, .cmr = {{0x15e1051fu, 0xf23f851cu, 0x19131f0du, 0xe6edc488u, 0x2376a257u, 0x90dbd910u, 0x2824aa22u, 0xa889ae84u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 88 /* milli weight units */\n}\n,[CURRENT_ISSUANCE_ASSET_AMOUNT] =\n{ .tag = JET\n, .jet = simplicity_current_issuance_asset_amount\n, .cmr = {{0xdc410ec6u, 0x9946f08bu, 0x9c4a40cfu, 0x38819cbbu, 0x014e98fcu, 0xe0a9b196u, 0x51455747u, 0x7fe1c2a7u}}\n, .sourceIx = ty_u\n, .targetIx = ty_mspbw256w64\n, .cost = 165 /* milli weight units */\n}\n,[CURRENT_ISSUANCE_ASSET_PROOF] =\n{ .tag = JET\n, .jet = simplicity_current_issuance_asset_proof\n, .cmr = {{0xe5c1c6f7u, 0xea029614u, 0x8e76f8b1u, 0x79d41519u, 0x8273dcc8u, 0xe1fd891fu, 0x83ef2bdfu, 0xb0692936u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 140 /* milli weight units */\n}\n,[CURRENT_ISSUANCE_TOKEN_AMOUNT] =\n{ .tag = JET\n, .jet = simplicity_current_issuance_token_amount\n, .cmr = {{0xe3ea9c61u, 0x70955f27u, 0xb01b120cu, 0xd63a3608u, 0x50cc700fu, 0x4725193bu, 0xdff88e01u, 0xdfb04eadu}}\n, .sourceIx = ty_u\n, .targetIx = ty_mspbw256w64\n, .cost = 188 /* milli weight units */\n}\n,[CURRENT_ISSUANCE_TOKEN_PROOF] =\n{ .tag = JET\n, .jet = simplicity_current_issuance_token_proof\n, .cmr = {{0x92e7d9ddu, 0xbf756e3eu, 0x622a44d4u, 0xd00e8423u, 0x6bcce42fu, 0x16f3200eu, 0x8b89c03cu, 0x441e458au}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 144 /* milli weight units */\n}\n,[CURRENT_NEW_ISSUANCE_CONTRACT] =\n{ .tag = JET\n, .jet = simplicity_current_new_issuance_contract\n, .cmr = {{0x23781567u, 0x5e9e9cf4u, 0xd8548560u, 0xc761e3bau, 0x7f64dcf2u, 0x5c99521bu, 0xe9d857e4u, 0xea41d868u}}\n, .sourceIx = ty_u\n, .targetIx = ty_mw256\n, .cost = 145 /* milli weight units */\n}\n,[CURRENT_PEGIN] =\n{ .tag = JET\n, .jet = simplicity_current_pegin\n, .cmr = {{0x369ad5f6u, 0xd760481cu, 0xb353a9bau, 0xcf900ff1u, 0x62b76040u, 0xc07ad0a8u, 0x3e52fcceu, 0xf1295790u}}\n, .sourceIx = ty_u\n, .targetIx = ty_mw256\n, .cost = 147 /* milli weight units */\n}\n,[CURRENT_PREV_OUTPOINT] =\n{ .tag = JET\n, .jet = simplicity_current_prev_outpoint\n, .cmr = {{0xa1ec909cu, 0x81e508e8u, 0x6e1361bau, 0x82e5fb47u, 0xa2c76bffu, 0xba7321a6u, 0xfc13cb12u, 0xaf7f697cu}}\n, .sourceIx = ty_u\n, .targetIx = ty_pw256w32\n, .cost = 156 /* milli weight units */\n}\n,[CURRENT_REISSUANCE_BLINDING] =\n{ .tag = JET\n, .jet = simplicity_current_reissuance_blinding\n, .cmr = {{0xb71550c8u, 0xf62e7aacu, 0xff13e8d3u, 0xc0ae054eu, 0xf036409du, 0x76c06579u, 0xc026ad68u, 0xa1b561f8u}}\n, .sourceIx = ty_u\n, .targetIx = ty_mw256\n, .cost = 94 /* milli weight units */\n}\n,[CURRENT_REISSUANCE_ENTROPY] =\n{ .tag = JET\n, .jet = simplicity_current_reissuance_entropy\n, .cmr = {{0x8b271532u, 0x7a0ac6b0u, 0xd18a2e51u, 0xfbda46c4u, 0xb118ee06u, 0x37d114aeu, 0x3e58a23bu, 0x45d67ff8u}}\n, .sourceIx = ty_u\n, .targetIx = ty_mw256\n, .cost = 85 /* milli weight units */\n}\n,[CURRENT_SCRIPT_HASH] =\n{ .tag = JET\n, .jet = simplicity_current_script_hash\n, .cmr = {{0xbfaf8584u, 0x43cec833u, 0x7e37839du, 0xc4113502u, 0x7184580cu, 0x892157ceu, 0x730418c0u, 0x8d5ed838u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 134 /* milli weight units */\n}\n,[CURRENT_SCRIPT_SIG_HASH] =\n{ .tag = JET\n, .jet = simplicity_current_script_sig_hash\n, .cmr = {{0x8baa9df8u, 0x54fe33eeu, 0xea66195cu, 0x97ce18edu, 0x701e107eu, 0xea7e02fbu, 0x2603b2c1u, 0x21575066u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 139 /* milli weight units */\n}\n,[CURRENT_SEQUENCE] =\n{ .tag = JET\n, .jet = simplicity_current_sequence\n, .cmr = {{0x0f4224f9u, 0xaa8644f5u, 0xc0f7910fu, 0x1739041au, 0xec8e7af7u, 0x7b5f38cfu, 0xdca0fdf4u, 0x8267a6c3u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 89 /* milli weight units */\n}\n,[DECOMPRESS] =\n{ .tag = JET\n, .jet = simplicity_decompress\n, .cmr = {{0x13973317u, 0xd587418eu, 0xf3063631u, 0xa6edb0acu, 0xfa1cbe49u, 0x83d7574bu, 0x1b305f96u, 0x61c048cbu}}\n, .sourceIx = ty_pbw256\n, .targetIx = ty_mw512\n, .cost = 10861 /* milli weight units */\n}\n,[DECREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_decrement_16\n, .cmr = {{0xe34db118u, 0x79272b32u, 0x7a3bd034u, 0xc0f61ef6u, 0x0a2be96fu, 0xdfe0b2d5u, 0x7ffe39ceu, 0x714c78fbu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw16\n, .cost = 85 /* milli weight units */\n}\n,[DECREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_decrement_32\n, .cmr = {{0x019ead5au, 0x7305606du, 0xc950fb55u, 0x476d09c1u, 0x7d66f570u, 0xdab510b9u, 0x0d2a27e2u, 0x266599cfu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw32\n, .cost = 91 /* milli weight units */\n}\n,[DECREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_decrement_64\n, .cmr = {{0x34752cf4u, 0xe1d0a431u, 0xf017a68bu, 0xebfab741u, 0xbbc88affu, 0xb57cc0b3u, 0x025ccfddu, 0x67622f35u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw64\n, .cost = 89 /* milli weight units */\n}\n,[DECREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_decrement_8\n, .cmr = {{0x2892ceb3u, 0xb6ec5325u, 0xd0c1b9f5u, 0x20425e4bu, 0x05c2e1f4u, 0x37e0b3f5u, 0x81f41b9du, 0x0f7dff4du}}\n, .sourceIx = ty_w8\n, .targetIx = ty_pbw8\n, .cost = 79 /* milli weight units */\n}\n,[DIV_MOD_128_64] =\n{ .tag = JET\n, .jet = simplicity_div_mod_128_64\n, .cmr = {{0x2296b70fu, 0x600e8a21u, 0x4ad070b2u, 0x194a677du, 0x3051bc1cu, 0x49018397u, 0x5f2a1d3eu, 0x0cade378u}}\n, .sourceIx = ty_pw128w64\n, .targetIx = ty_w128\n, .cost = 208 /* milli weight units */\n}\n,[DIV_MOD_16] =\n{ .tag = JET\n, .jet = simplicity_div_mod_16\n, .cmr = {{0x648fab86u, 0x4374846au, 0xbf4f9d9du, 0xefe27561u, 0x4d33f482u, 0x9c36a47eu, 0xcb53d7bfu, 0xb605485fu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w32\n, .cost = 118 /* milli weight units */\n}\n,[DIV_MOD_32] =\n{ .tag = JET\n, .jet = simplicity_div_mod_32\n, .cmr = {{0xbd3d4d55u, 0x2d7b347bu, 0xd8a44e3eu, 0xe224c846u, 0xbe230ff6u, 0xe2044ddbu, 0x97f48e27u, 0xd20c4225u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w64\n, .cost = 115 /* milli weight units */\n}\n,[DIV_MOD_64] =\n{ .tag = JET\n, .jet = simplicity_div_mod_64\n, .cmr = {{0xfa6bad6au, 0x95e2aba4u, 0x305bfe91u, 0xcc47acc3u, 0xd99b92e6u, 0x75e69d3bu, 0x37bb0913u, 0x3d390d0fu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w128\n, .cost = 86 /* milli weight units */\n}\n,[DIV_MOD_8] =\n{ .tag = JET\n, .jet = simplicity_div_mod_8\n, .cmr = {{0x48cd501bu, 0xb2aa2acau, 0xe014fe20u, 0x8bb9941du, 0x07a9bffeu, 0x1ad6cd3du, 0x36fc6b08u, 0x60f6eba7u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w16\n, .cost = 128 /* milli weight units */\n}\n,[DIVIDE_16] =\n{ .tag = JET\n, .jet = simplicity_divide_16\n, .cmr = {{0x470b01a5u, 0x7c4f9d8fu, 0x997fcde0u, 0x06191611u, 0xdda4c98bu, 0xa2a5f1dau, 0x134ae4c2u, 0x2d52e920u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 98 /* milli weight units */\n}\n,[DIVIDE_32] =\n{ .tag = JET\n, .jet = simplicity_divide_32\n, .cmr = {{0xab03acd8u, 0x93610c3cu, 0x6582e7f7u, 0xfbe5e756u, 0x2574a7b2u, 0x6646f1c2u, 0xfdc6e76eu, 0x445a77a1u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 100 /* milli weight units */\n}\n,[DIVIDE_64] =\n{ .tag = JET\n, .jet = simplicity_divide_64\n, .cmr = {{0xebfc56fbu, 0xb8a47e73u, 0xffabb7eau, 0x228ac784u, 0x37be820eu, 0xddfa4781u, 0x4ccebd26u, 0x1bd8cfffu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 101 /* milli weight units */\n}\n,[DIVIDE_8] =\n{ .tag = JET\n, .jet = simplicity_divide_8\n, .cmr = {{0x2ccfbc7cu, 0x02bf4d53u, 0x0493bb22u, 0x867a951du, 0x8ae91312u, 0x66875972u, 0x84e9bbb3u, 0xe1e7e349u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 108 /* milli weight units */\n}\n,[DIVIDES_16] =\n{ .tag = JET\n, .jet = simplicity_divides_16\n, .cmr = {{0x5fc3ac38u, 0x4d5f4540u, 0x4156971au, 0x768d93bcu, 0x064bc17cu, 0x15a37c27u, 0x019ddeefu, 0x17046dd4u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 93 /* milli weight units */\n}\n,[DIVIDES_32] =\n{ .tag = JET\n, .jet = simplicity_divides_32\n, .cmr = {{0xcc45b405u, 0x246438f7u, 0x65740b4fu, 0xb0a34dc8u, 0x1b347801u, 0x98863b0fu, 0xb186446au, 0xdfbb09deu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 87 /* milli weight units */\n}\n,[DIVIDES_64] =\n{ .tag = JET\n, .jet = simplicity_divides_64\n, .cmr = {{0xdc473bfdu, 0xec30ab98u, 0xd48cd088u, 0x84ef4fffu, 0xef3d4b16u, 0xad5c3711u, 0x2a2035b9u, 0x9bb77458u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 91 /* milli weight units */\n}\n,[DIVIDES_8] =\n{ .tag = JET\n, .jet = simplicity_divides_8\n, .cmr = {{0x0b5502acu, 0x4f21f230u, 0xa09ccfafu, 0xfaac77a7u, 0xc41b2bf3u, 0x0b146848u, 0x1e4dfb98u, 0xb6187a0du}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 98 /* milli weight units */\n}\n,[EQ_1] =\n{ .tag = JET\n, .jet = simplicity_eq_1\n, .cmr = {{0x607f6b8fu, 0x5d25b80eu, 0x05a2bf79u, 0xd62e8707u, 0x99522cc3u, 0xe39ce962u, 0x57455293u, 0xf9b2b2edu}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 74 /* milli weight units */\n}\n,[EQ_16] =\n{ .tag = JET\n, .jet = simplicity_eq_16\n, .cmr = {{0xc996e42bu, 0x979abc53u, 0x0cc27163u, 0x6671e920u, 0x54876a1eu, 0xcaed1433u, 0xfd619a25u, 0xfe6d03adu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 84 /* milli weight units */\n}\n,[EQ_256] =\n{ .tag = JET\n, .jet = simplicity_eq_256\n, .cmr = {{0x778d1506u, 0xc735d277u, 0x6b950facu, 0xefc159b6u, 0x78dec038u, 0x28cf0273u, 0xeeea64a9u, 0xda98c12cu}}\n, .sourceIx = ty_w512\n, .targetIx = ty_b\n, .cost = 225 /* milli weight units */\n}\n,[EQ_32] =\n{ .tag = JET\n, .jet = simplicity_eq_32\n, .cmr = {{0x66d38903u, 0xe73b1a13u, 0x20c68a4au, 0x3970d71fu, 0x94ba9e2bu, 0x15168399u, 0x43fb15e4u, 0x4ebf57fbu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 88 /* milli weight units */\n}\n,[EQ_64] =\n{ .tag = JET\n, .jet = simplicity_eq_64\n, .cmr = {{0xd6a666b4u, 0xe0f9f575u, 0x508dbf3bu, 0x31ceea68u, 0x393c7db2u, 0xe98bc592u, 0xfdd26faeu, 0x837a0b87u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 100 /* milli weight units */\n}\n,[EQ_8] =\n{ .tag = JET\n, .jet = simplicity_eq_8\n, .cmr = {{0x99787ba2u, 0x672dd0ebu, 0x4d7d2ea9u, 0x9449de8fu, 0x798e7cb1u, 0x81a5e166u, 0xe1a53f98u, 0x02b62064u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 95 /* milli weight units */\n}\n,[FE_ADD] =\n{ .tag = JET\n, .jet = simplicity_fe_add\n, .cmr = {{0xb0593e18u, 0x7ee7333cu, 0x47a05467u, 0xdf66d582u, 0x0a6f5befu, 0x914a4b76u, 0xe5d16331u, 0x4b5ef20eu}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 755 /* milli weight units */\n}\n,[FE_INVERT] =\n{ .tag = JET\n, .jet = simplicity_fe_invert\n, .cmr = {{0x343e9c90u, 0xf1285060u, 0x56b548d2u, 0xed5e223cu, 0x81f5b06au, 0x1ed86b7cu, 0xd9354057u, 0xaa595102u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 3175 /* milli weight units */\n}\n,[FE_IS_ODD] =\n{ .tag = JET\n, .jet = simplicity_fe_is_odd\n, .cmr = {{0xdcf0375du, 0x20818a99u, 0xf723f812u, 0x3cbd051au, 0x3878a428u, 0x24b3740fu, 0x6821a5fau, 0x123f14c7u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_b\n, .cost = 290 /* milli weight units */\n}\n,[FE_IS_ZERO] =\n{ .tag = JET\n, .jet = simplicity_fe_is_zero\n, .cmr = {{0x28ff4169u, 0x9a881aafu, 0xb7a976c0u, 0xc576353fu, 0x7fe54463u, 0xb6aa754cu, 0xf2c6329au, 0xf2650e3bu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_b\n, .cost = 268 /* milli weight units */\n}\n,[FE_MULTIPLY] =\n{ .tag = JET\n, .jet = simplicity_fe_multiply\n, .cmr = {{0x5669929bu, 0x5f31fa3du, 0x02c5839du, 0xd06354cdu, 0x171635f3u, 0xa0727f32u, 0x2abfc994u, 0xba6290deu}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 808 /* milli weight units */\n}\n,[FE_MULTIPLY_BETA] =\n{ .tag = JET\n, .jet = simplicity_fe_multiply_beta\n, .cmr = {{0x7a781345u, 0x0d82e935u, 0x690f433eu, 0x65df707au, 0x4dd17534u, 0xa00ddd40u, 0xdd85e3e3u, 0xf78402c3u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 579 /* milli weight units */\n}\n,[FE_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_fe_negate\n, .cmr = {{0x3b0d7b5cu, 0x2e6c3aebu, 0x5e00085bu, 0x9d30585au, 0xff054e32u, 0x5a998361u, 0x113bfd23u, 0x28c008f6u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 531 /* milli weight units */\n}\n,[FE_NORMALIZE] =\n{ .tag = JET\n, .jet = simplicity_fe_normalize\n, .cmr = {{0xc51beffau, 0x215e9cdeu, 0x8e933bb9u, 0x4680bae0u, 0x12c4daabu, 0x3d04b6cbu, 0xf0733fd7u, 0x35733538u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 521 /* milli weight units */\n}\n,[FE_SQUARE] =\n{ .tag = JET\n, .jet = simplicity_fe_square\n, .cmr = {{0x5a6e7b2eu, 0xac73f4e4u, 0x4dfa28fbu, 0x86bb117bu, 0x65606f28u, 0x74d565c9u, 0x799c63e0u, 0xfe692b1au}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 556 /* milli weight units */\n}\n,[FE_SQUARE_ROOT] =\n{ .tag = JET\n, .jet = simplicity_fe_square_root\n, .cmr = {{0xe00142eau, 0x03094a30u, 0x4ac82bc1u, 0xe2d2dc71u, 0xfb064ed0u, 0x82856735u, 0xb14ff2c7u, 0xfaf036f0u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_mw256\n, .cost = 10275 /* milli weight units */\n}\n,[FULL_ADD_16] =\n{ .tag = JET\n, .jet = simplicity_full_add_16\n, .cmr = {{0xfc9e5df8u, 0x3bfdb902u, 0x8c87d139u, 0xf8583903u, 0xcb2a0704u, 0x2a73e534u, 0x81deb52fu, 0xf1f1f884u}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw16\n, .cost = 121 /* milli weight units */\n}\n,[FULL_ADD_32] =\n{ .tag = JET\n, .jet = simplicity_full_add_32\n, .cmr = {{0xa7d98d50u, 0xd045cb90u, 0x6b195e65u, 0x11879495u, 0xc8510959u, 0x49a9c01eu, 0x6039a84bu, 0x2a5ec909u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw32\n, .cost = 119 /* milli weight units */\n}\n,[FULL_ADD_64] =\n{ .tag = JET\n, .jet = simplicity_full_add_64\n, .cmr = {{0x7aecc8c9u, 0x053bb2fbu, 0x170c1c97u, 0x2fd40025u, 0x64e152a0u, 0x6d9f4580u, 0x75e38c7au, 0x0698a7f4u}}\n, .sourceIx = ty_pbw128\n, .targetIx = ty_pbw64\n, .cost = 121 /* milli weight units */\n}\n,[FULL_ADD_8] =\n{ .tag = JET\n, .jet = simplicity_full_add_8\n, .cmr = {{0xed3ba5b7u, 0x9ea45b18u, 0x7a2d43e8u, 0xed802de1u, 0xed442659u, 0x6cbe32e7u, 0x57c85119u, 0x15ffa5cfu}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw8\n, .cost = 127 /* milli weight units */\n}\n,[FULL_DECREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_16\n, .cmr = {{0xd4c2eddau, 0x872c0550u, 0x6f792cf5u, 0x46a89d4du, 0x7cffcb1eu, 0x17f5da61u, 0x03100e7eu, 0x73a7737du}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw16\n, .cost = 92 /* milli weight units */\n}\n,[FULL_DECREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_32\n, .cmr = {{0x7cc2304du, 0x17431210u, 0x2e9b7363u, 0x45c77f77u, 0x1d1f6a9cu, 0x9e1d1cd8u, 0xdb8cb461u, 0x3980c8c2u}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw32\n, .cost = 107 /* milli weight units */\n}\n,[FULL_DECREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_64\n, .cmr = {{0x15c16345u, 0x4bcd7544u, 0x30da5579u, 0xbbcaad26u, 0xe57e95c7u, 0x72224b7bu, 0x83c705f7u, 0xdeb64aa6u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw64\n, .cost = 81 /* milli weight units */\n}\n,[FULL_DECREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_full_decrement_8\n, .cmr = {{0x7c5e94a9u, 0x98028182u, 0x1737b1ceu, 0x73bfda4cu, 0x79ef649bu, 0x3d05cc1cu, 0x00c4a8b6u, 0x4b949bbeu}}\n, .sourceIx = ty_pbw8\n, .targetIx = ty_pbw8\n, .cost = 91 /* milli weight units */\n}\n,[FULL_INCREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_full_increment_16\n, .cmr = {{0x81380adau, 0xa3a547f1u, 0xbc4bbb64u, 0x6bda9d9fu, 0xb7bd4dc1u, 0xb3a9f3ddu, 0x220b56a4u, 0x7c2798fbu}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw16\n, .cost = 89 /* milli weight units */\n}\n,[FULL_INCREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_full_increment_32\n, .cmr = {{0xa760a844u, 0x9a2ab5deu, 0xdb4ee51bu, 0xf5c25a8fu, 0x06af0666u, 0xdf7fc419u, 0xb498b909u, 0x76d698cbu}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw32\n, .cost = 104 /* milli weight units */\n}\n,[FULL_INCREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_full_increment_64\n, .cmr = {{0xc6af30ddu, 0x286d6e21u, 0xc38860edu, 0x1e2f212au, 0x21b2fd1eu, 0xdeadb5e0u, 0xfce2e3fdu, 0x75b7f3c2u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw64\n, .cost = 99 /* milli weight units */\n}\n,[FULL_INCREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_full_increment_8\n, .cmr = {{0xd304ea28u, 0xa95d496du, 0x14b4f2fbu, 0x5c860372u, 0xecf247beu, 0xfde3ea3bu, 0x2ad67bceu, 0x99039dbcu}}\n, .sourceIx = ty_pbw8\n, .targetIx = ty_pbw8\n, .cost = 72 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_1\n, .cmr = {{0x14dcc346u, 0x6fa828a3u, 0xf0740451u, 0xb8037d7au, 0xd603eadcu, 0x80aaeadcu, 0x664434acu, 0x2ad7fd9cu}}\n, .sourceIx = ty_pw16b\n, .targetIx = ty_pbw16\n, .cost = 83 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_2\n, .cmr = {{0xafb7e928u, 0xb052c228u, 0x7921662cu, 0xd8ab122fu, 0xe074efd2u, 0x51a5c9cfu, 0xbcaa369du, 0x06337392u}}\n, .sourceIx = ty_pw16w2\n, .targetIx = ty_pw2w16\n, .cost = 83 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_4\n, .cmr = {{0x166f348cu, 0x59e26f89u, 0xa83a991fu, 0x67e5dbf7u, 0x10cfae3du, 0x6d969382u, 0x82bb44c1u, 0xafa7109bu}}\n, .sourceIx = ty_pw16w4\n, .targetIx = ty_pw4w16\n, .cost = 89 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_16_8] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_16_8\n, .cmr = {{0xc0cd015du, 0xe8ac4fccu, 0xd8db89f4u, 0xe5142fdeu, 0x279755b5u, 0x42a24f57u, 0xa2a3c7c1u, 0xf50d1db5u}}\n, .sourceIx = ty_pw16w8\n, .targetIx = ty_pw8w16\n, .cost = 65 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_1\n, .cmr = {{0xce33b5d0u, 0xc58d2d0bu, 0x9b5a9944u, 0xd3dabda0u, 0x23cd4464u, 0x7be67cf4u, 0x082830bbu, 0x205f8fbbu}}\n, .sourceIx = ty_pw32b\n, .targetIx = ty_pbw32\n, .cost = 84 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_16] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_16\n, .cmr = {{0x1cb36e6fu, 0x99308515u, 0xd4b71190u, 0x9c574b21u, 0x24c1ff42u, 0x2d8d7d94u, 0x82e25d87u, 0x88b3b957u}}\n, .sourceIx = ty_pw32w16\n, .targetIx = ty_pw16w32\n, .cost = 81 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_2\n, .cmr = {{0x3faea9b5u, 0x73fc069du, 0x8f430facu, 0xa897b687u, 0x1ea09573u, 0xc715094bu, 0x1f1be081u, 0x8488a716u}}\n, .sourceIx = ty_pw32w2\n, .targetIx = ty_pw2w32\n, .cost = 67 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_4\n, .cmr = {{0xcdbb0d23u, 0x31059011u, 0x3c934fe6u, 0x6004d2a1u, 0x1da9cbf8u, 0x873d00deu, 0xe7f02296u, 0xff0a2f12u}}\n, .sourceIx = ty_pw32w4\n, .targetIx = ty_pw4w32\n, .cost = 84 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_32_8] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_32_8\n, .cmr = {{0xccd924e1u, 0xa6184942u, 0x0ff62ed8u, 0xb245a3aau, 0x18c98c41u, 0xf9c5a3c0u, 0xb885863cu, 0x449b7d14u}}\n, .sourceIx = ty_pw32w8\n, .targetIx = ty_pw8w32\n, .cost = 91 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_1\n, .cmr = {{0xd463ccdcu, 0x7fd14e5eu, 0x894162b2u, 0xae714128u, 0xa10dc920u, 0x00b54c84u, 0x3b649ccbu, 0x775626e5u}}\n, .sourceIx = ty_pw64b\n, .targetIx = ty_pbw64\n, .cost = 99 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_16] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_16\n, .cmr = {{0x882dce21u, 0x2a0e61f8u, 0xf94cb5e3u, 0x2e00a528u, 0x7cf64f20u, 0xc21fca84u, 0xf1e3df7fu, 0x4a6291cdu}}\n, .sourceIx = ty_pw64w16\n, .targetIx = ty_pw16w64\n, .cost = 90 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_2\n, .cmr = {{0x48c89b19u, 0x1a51b6abu, 0x034c80eau, 0xff348238u, 0xd93fb31cu, 0x1e92e7f2u, 0xae49317eu, 0x0e33f82du}}\n, .sourceIx = ty_pw64w2\n, .targetIx = ty_pw2w64\n, .cost = 94 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_32] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_32\n, .cmr = {{0x39759073u, 0x33e12730u, 0x6255b7f8u, 0x8939e285u, 0x7f42ae1bu, 0xf0c66240u, 0xa8224c8du, 0xa38bb1beu}}\n, .sourceIx = ty_pw64w32\n, .targetIx = ty_pw32w64\n, .cost = 86 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_4\n, .cmr = {{0x293132ebu, 0x15ddf417u, 0x74b0005au, 0x3b5c5095u, 0x9fa8982bu, 0x759e8328u, 0x27c74fa8u, 0x2850666cu}}\n, .sourceIx = ty_pw64w4\n, .targetIx = ty_pw4w64\n, .cost = 94 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_64_8] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_64_8\n, .cmr = {{0xe6abded8u, 0xbe585eb0u, 0xb6d46e0cu, 0x5eb28a74u, 0x5f4e5c56u, 0xfd6521f8u, 0xf396cb21u, 0xa758f74cu}}\n, .sourceIx = ty_pw64w8\n, .targetIx = ty_pw8w64\n, .cost = 86 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_8_1] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_8_1\n, .cmr = {{0x733fed08u, 0x47a2ffacu, 0x9aabf50au, 0x2feb5059u, 0x8984f16du, 0x8b732468u, 0xb3d315c0u, 0x1ea4299bu}}\n, .sourceIx = ty_pw8b\n, .targetIx = ty_pbw8\n, .cost = 96 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_8_2] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_8_2\n, .cmr = {{0xb4474d0bu, 0xa1cf4fa2u, 0xd64cd4feu, 0x67bdc92cu, 0xb89efa70u, 0xcb99af77u, 0x91bf7ef6u, 0xe909d2c7u}}\n, .sourceIx = ty_pw8w2\n, .targetIx = ty_pw2w8\n, .cost = 96 /* milli weight units */\n}\n,[FULL_LEFT_SHIFT_8_4] =\n{ .tag = JET\n, .jet = simplicity_full_left_shift_8_4\n, .cmr = {{0x8eb522b9u, 0x970474adu, 0xbb7ab0deu, 0x37c4e7a0u, 0x56a1cb21u, 0x2e4103e4u, 0xa8cbbbb6u, 0x3d975606u}}\n, .sourceIx = ty_pw8w4\n, .targetIx = ty_pw4w8\n, .cost = 85 /* milli weight units */\n}\n,[FULL_MULTIPLY_16] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_16\n, .cmr = {{0x88470cbfu, 0x9b4dec37u, 0xea05d7b6u, 0x30f2f112u, 0x547567d3u, 0x4f33d96eu, 0x5f611bd9u, 0xda97abb5u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 112 /* milli weight units */\n}\n,[FULL_MULTIPLY_32] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_32\n, .cmr = {{0x28040600u, 0xa66e1a0cu, 0x52258520u, 0x488b94c8u, 0x20c6cf86u, 0xca27ae39u, 0x034dddcau, 0xb904d1d5u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 96 /* milli weight units */\n}\n,[FULL_MULTIPLY_64] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_64\n, .cmr = {{0x53014f35u, 0xa8df2091u, 0xaf3ef9b8u, 0xd16b38b9u, 0xbc9661bfu, 0xdbc95733u, 0x3fba2a94u, 0x8c1e8c25u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w128\n, .cost = 127 /* milli weight units */\n}\n,[FULL_MULTIPLY_8] =\n{ .tag = JET\n, .jet = simplicity_full_multiply_8\n, .cmr = {{0xd3d24554u, 0xc466dd60u, 0x37545247u, 0x36a71eb2u, 0x35def9b5u, 0x06965e32u, 0xd56826e1u, 0x9fbad6c1u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 109 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_1\n, .cmr = {{0xb379e296u, 0xe9a98fb3u, 0xb5662b8bu, 0xa04e3cc1u, 0xa43c7442u, 0x9e931233u, 0xfdd7fc8fu, 0xe6b7a2e0u}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pw16b\n, .cost = 80 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_2\n, .cmr = {{0xaeb8c608u, 0x06a47920u, 0x7758e390u, 0x83b4a9a7u, 0xa14da4eeu, 0x9bc1097fu, 0xc5cb4b75u, 0x540d7578u}}\n, .sourceIx = ty_pw2w16\n, .targetIx = ty_pw16w2\n, .cost = 79 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_4\n, .cmr = {{0x60b7f084u, 0x75cc0cceu, 0x64dca12du, 0x9f6a919cu, 0x30618110u, 0xeda14065u, 0x929c004eu, 0x7fc1b0fbu}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_pw16w4\n, .cost = 88 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_16_8] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_16_8\n, .cmr = {{0xf79dba3eu, 0x0af3d6a5u, 0x59a9e9dfu, 0xfea710afu, 0x623fe6e6u, 0x644b8979u, 0x95d71b8au, 0x4167ddb0u}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_pw16w8\n, .cost = 57 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_1\n, .cmr = {{0xad0d5c75u, 0xea684371u, 0x91770d7fu, 0xdf804bbcu, 0x9d573d5fu, 0x10199823u, 0xd809c9c4u, 0x6cd275adu}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pw32b\n, .cost = 74 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_16] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_16\n, .cmr = {{0x455299fdu, 0x6f42ab49u, 0xdbb709e6u, 0x5a3b5366u, 0x250bdc54u, 0x5d6229e8u, 0xe236056du, 0xdd1977fdu}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_pw32w16\n, .cost = 64 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_2\n, .cmr = {{0x44384b15u, 0x06d443d2u, 0xf8a2882bu, 0x4563d793u, 0x1a7ebce6u, 0x4acf0d02u, 0xee59ec69u, 0xd3065239u}}\n, .sourceIx = ty_pw2w32\n, .targetIx = ty_pw32w2\n, .cost = 63 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_4\n, .cmr = {{0x2e9a8ab5u, 0xa1817bd0u, 0xb8a46626u, 0x994917a0u, 0xde1a745eu, 0x99520ce6u, 0xebcc67d4u, 0x636551b7u}}\n, .sourceIx = ty_pw4w32\n, .targetIx = ty_pw32w4\n, .cost = 71 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_32_8] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_32_8\n, .cmr = {{0xaf47d4f9u, 0x6e7d8026u, 0xd44e6ecau, 0x1b807f73u, 0x344ce2eau, 0xf700b2c8u, 0x2b4bb002u, 0x61a86f94u}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_pw32w8\n, .cost = 84 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_1\n, .cmr = {{0x03afb547u, 0xc30913f1u, 0x6f3e370du, 0x7f9ca029u, 0x0b615b42u, 0x85051bb9u, 0x3c3c1a9bu, 0x72ee8de4u}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pw64b\n, .cost = 99 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_16] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_16\n, .cmr = {{0x1fb056fcu, 0xb690cee3u, 0xcff72c7du, 0xecda806du, 0x2146c492u, 0xae731a6bu, 0x94b8bb4fu, 0x1599b0ccu}}\n, .sourceIx = ty_pw16w64\n, .targetIx = ty_pw64w16\n, .cost = 86 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_2\n, .cmr = {{0x0673bff2u, 0x1e375e5du, 0xbcaf3804u, 0x664825ddu, 0x674844d2u, 0xfdb784a4u, 0xfefbc925u, 0xcf6b27adu}}\n, .sourceIx = ty_pw2w64\n, .targetIx = ty_pw64w2\n, .cost = 86 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_32] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_32\n, .cmr = {{0x356f7dd4u, 0x6ba33f84u, 0xb06672fdu, 0xe9a2972eu, 0x80f3ea96u, 0x5ae8bc0bu, 0xff67aa2fu, 0x69f10b56u}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_pw64w32\n, .cost = 73 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_4\n, .cmr = {{0x4c25f601u, 0x1fd3d1acu, 0x18e11eb4u, 0x3061fad6u, 0x9f3ce39fu, 0x7a99cedeu, 0x50cc85bfu, 0x88bfba82u}}\n, .sourceIx = ty_pw4w64\n, .targetIx = ty_pw64w4\n, .cost = 93 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_64_8] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_64_8\n, .cmr = {{0xa51df944u, 0x8602fa81u, 0x001aa1b5u, 0xb13be88du, 0x4b2f4d0fu, 0x60740801u, 0xcef99100u, 0x2fe37d6du}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_pw64w8\n, .cost = 99 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_8_1] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_8_1\n, .cmr = {{0xd9d4b16du, 0x37e4eb5cu, 0xc5150426u, 0xe3e86cf6u, 0x0abbdfa1u, 0xd0ecb415u, 0x82965e80u, 0x00cbd291u}}\n, .sourceIx = ty_pbw8\n, .targetIx = ty_pw8b\n, .cost = 88 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_8_2] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_8_2\n, .cmr = {{0x079aa166u, 0x17198ad5u, 0xdf2c98a6u, 0x3af76c1bu, 0x3e120fd2u, 0x106b225fu, 0x63fd06acu, 0x571d04a4u}}\n, .sourceIx = ty_pw2w8\n, .targetIx = ty_pw8w2\n, .cost = 86 /* milli weight units */\n}\n,[FULL_RIGHT_SHIFT_8_4] =\n{ .tag = JET\n, .jet = simplicity_full_right_shift_8_4\n, .cmr = {{0x9d9d3f63u, 0x8a846386u, 0xa21e715fu, 0x39461686u, 0x4a2ef798u, 0x4a88cd95u, 0x50556629u, 0x7be7e06cu}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_pw8w4\n, .cost = 89 /* milli weight units */\n}\n,[FULL_SUBTRACT_16] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_16\n, .cmr = {{0x1fc88e23u, 0x29f4aaf1u, 0x2b30513fu, 0x7a21cf5du, 0x8de24b60u, 0x0a19a217u, 0x41281b4du, 0x61aac633u}}\n, .sourceIx = ty_pbw32\n, .targetIx = ty_pbw16\n, .cost = 121 /* milli weight units */\n}\n,[FULL_SUBTRACT_32] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_32\n, .cmr = {{0x782705fbu, 0x42e36a7eu, 0xf831200cu, 0x617738d3u, 0x1e13b1d0u, 0xe7ceed69u, 0x3f133388u, 0x35b30acbu}}\n, .sourceIx = ty_pbw64\n, .targetIx = ty_pbw32\n, .cost = 116 /* milli weight units */\n}\n,[FULL_SUBTRACT_64] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_64\n, .cmr = {{0xb2856a91u, 0x80231beeu, 0x3cb89230u, 0xf75c292au, 0xf3e75239u, 0xdbeb3965u, 0x48441e6bu, 0x5a27e813u}}\n, .sourceIx = ty_pbw128\n, .targetIx = ty_pbw64\n, .cost = 98 /* milli weight units */\n}\n,[FULL_SUBTRACT_8] =\n{ .tag = JET\n, .jet = simplicity_full_subtract_8\n, .cmr = {{0x6885e141u, 0xae234c1eu, 0x2a7e4f23u, 0x52989390u, 0x36969c95u, 0x0f2cefd4u, 0x59b498acu, 0x3dd89220u}}\n, .sourceIx = ty_pbw16\n, .targetIx = ty_pbw8\n, .cost = 126 /* milli weight units */\n}\n,[GE_IS_ON_CURVE] =\n{ .tag = JET\n, .jet = simplicity_ge_is_on_curve\n, .cmr = {{0x69f0e7a0u, 0xc5fff870u, 0x84ed6925u, 0xf8db762eu, 0x419e057bu, 0x96834dceu, 0x9699b0b0u, 0x09423059u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_b\n, .cost = 642 /* milli weight units */\n}\n,[GE_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_ge_negate\n, .cmr = {{0x1ed0ced8u, 0xdd2558e3u, 0x485f6fc3u, 0x2d69a240u, 0x5ecaee31u, 0x2dc4dc65u, 0xe0fd3477u, 0x73f5983du}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w512\n, .cost = 945 /* milli weight units */\n}\n,[GEJ_ADD] =\n{ .tag = JET\n, .jet = simplicity_gej_add\n, .cmr = {{0x5a1c3103u, 0x49e8ff5cu, 0x5a61ac3eu, 0x10123f74u, 0xe87faba1u, 0x4c78bc83u, 0xf9e34136u, 0x87ecf28bu}}\n, .sourceIx = ty_ppw512w256pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 2897 /* milli weight units */\n}\n,[GEJ_DOUBLE] =\n{ .tag = JET\n, .jet = simplicity_gej_double\n, .cmr = {{0x1edd0582u, 0xe2fcad99u, 0xb12d506du, 0x29b50a63u, 0x017f6769u, 0x28be5113u, 0x69006e07u, 0xcb80d982u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 1764 /* milli weight units */\n}\n,[GEJ_EQUIV] =\n{ .tag = JET\n, .jet = simplicity_gej_equiv\n, .cmr = {{0x02747105u, 0x9487a12cu, 0xa207f094u, 0x0594d6cdu, 0x87fc930au, 0x8b5b3143u, 0x4a16a2d6u, 0x7f1d8dd4u}}\n, .sourceIx = ty_ppw512w256pw512w256\n, .targetIx = ty_b\n, .cost = 2220 /* milli weight units */\n}\n,[GEJ_GE_ADD] =\n{ .tag = JET\n, .jet = simplicity_gej_ge_add\n, .cmr = {{0x1ea710d5u, 0x6eafee32u, 0x5d2607ddu, 0xb45ff017u, 0x0adec2e0u, 0xee9bcc68u, 0xe4b93e1du, 0xe6ad3568u}}\n, .sourceIx = ty_ppw512w256w512\n, .targetIx = ty_pw512w256\n, .cost = 2477 /* milli weight units */\n}\n,[GEJ_GE_ADD_EX] =\n{ .tag = JET\n, .jet = simplicity_gej_ge_add_ex\n, .cmr = {{0x78f0871bu, 0x8173abdeu, 0x71871126u, 0x3b3ac1d9u, 0x22337ed5u, 0xed138d29u, 0x4962d65cu, 0xe559bd92u}}\n, .sourceIx = ty_ppw512w256w512\n, .targetIx = ty_pw256pw512w256\n, .cost = 2719 /* milli weight units */\n}\n,[GEJ_GE_EQUIV] =\n{ .tag = JET\n, .jet = simplicity_gej_ge_equiv\n, .cmr = {{0xba899a00u, 0x6216d1c9u, 0x3bd5ecbeu, 0x0080d907u, 0x8a500a72u, 0x9bbd396au, 0x004af51du, 0x4ff7d93au}}\n, .sourceIx = ty_ppw512w256w512\n, .targetIx = ty_b\n, .cost = 1765 /* milli weight units */\n}\n,[GEJ_INFINITY] =\n{ .tag = JET\n, .jet = simplicity_gej_infinity\n, .cmr = {{0x88a952dbu, 0x3816e942u, 0x59a67537u, 0xfa8fca1au, 0x35a907a8u, 0x6f51ede4u, 0x51fd32ecu, 0x253d9c62u}}\n, .sourceIx = ty_u\n, .targetIx = ty_pw512w256\n, .cost = 716 /* milli weight units */\n}\n,[GEJ_IS_INFINITY] =\n{ .tag = JET\n, .jet = simplicity_gej_is_infinity\n, .cmr = {{0x2980a735u, 0x414e4321u, 0xafeffefau, 0x8837edb0u, 0xa3309a33u, 0x7d59b7bdu, 0xea921c13u, 0x056b0428u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_b\n, .cost = 666 /* milli weight units */\n}\n,[GEJ_IS_ON_CURVE] =\n{ .tag = JET\n, .jet = simplicity_gej_is_on_curve\n, .cmr = {{0x0187e1e5u, 0xef7634a5u, 0xf016124du, 0x4feb5a93u, 0xdde6aa78u, 0x176cda48u, 0xb165a9aau, 0x8e0449f2u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_b\n, .cost = 1016 /* milli weight units */\n}\n,[GEJ_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_gej_negate\n, .cmr = {{0xb32c74cau, 0xb2c7500bu, 0x73f8ec05u, 0x60fe23fcu, 0x4c21aa66u, 0x596d7f2au, 0xcf496788u, 0x6b76d856u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 1381 /* milli weight units */\n}\n,[GEJ_NORMALIZE] =\n{ .tag = JET\n, .jet = simplicity_gej_normalize\n, .cmr = {{0x5de0976au, 0xe7f38b36u, 0xf0022814u, 0x966db2bau, 0xed5c4767u, 0x14944d74u, 0x1a8979c4u, 0xbcf8be25u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_mw512\n, .cost = 4099 /* milli weight units */\n}\n,[GEJ_RESCALE] =\n{ .tag = JET\n, .jet = simplicity_gej_rescale\n, .cmr = {{0xdcfc72a7u, 0x68d5be77u, 0x0f8db278u, 0xaeafd18eu, 0x27704c64u, 0xf8b40fa6u, 0xfe54ca94u, 0x727a076eu}}\n, .sourceIx = ty_ppw512w256w256\n, .targetIx = ty_pw512w256\n, .cost = 1908 /* milli weight units */\n}\n,[GEJ_X_EQUIV] =\n{ .tag = JET\n, .jet = simplicity_gej_x_equiv\n, .cmr = {{0x52cc2147u, 0x09c0d9fcu, 0xa9db1d09u, 0xcc807c75u, 0xcf5a6313u, 0xca540a77u, 0x2d4ea992u, 0x1f37e624u}}\n, .sourceIx = ty_pw256pw512w256\n, .targetIx = ty_b\n, .cost = 1047 /* milli weight units */\n}\n,[GEJ_Y_IS_ODD] =\n{ .tag = JET\n, .jet = simplicity_gej_y_is_odd\n, .cmr = {{0xfe0106afu, 0xb9d9e24fu, 0xd4dbe545u, 0x11fe272fu, 0x4dcb307au, 0x0ea56d59u, 0x1ceb93abu, 0x4bf88745u}}\n, .sourceIx = ty_pw512w256\n, .targetIx = ty_b\n, .cost = 3651 /* milli weight units */\n}\n,[GENERATE] =\n{ .tag = JET\n, .jet = simplicity_generate\n, .cmr = {{0xdf44e17du, 0x2a559dd0u, 0xa7034954u, 0xab333777u, 0x78b151f1u, 0xcd1e4f9fu, 0xd31b361du, 0x34a8d973u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_pw512w256\n, .cost = 50071 /* milli weight units */\n}\n,[GENESIS_BLOCK_HASH] =\n{ .tag = JET\n, .jet = simplicity_genesis_block_hash\n, .cmr = {{0x0060b60du, 0x02b13360u, 0x72846acfu, 0xf44dd0f4u, 0x346c74a3u, 0x5e7b5642u, 0x3f9519c4u, 0x42d15dafu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 148 /* milli weight units */\n}\n,[HASH_TO_CURVE] =\n{ .tag = JET\n, .jet = simplicity_hash_to_curve\n, .cmr = {{0x76f7ca1du, 0xb944ee31u, 0x5ed362feu, 0xe0673c58u, 0x94f8853bu, 0x44607090u, 0x1b857901u, 0xf9499d9bu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w512\n, .cost = 68094 /* milli weight units */\n}\n,[HIGH_1] =\n{ .tag = JET\n, .jet = simplicity_high_1\n, .cmr = {{0xc32d877eu, 0x670d6c03u, 0x7cb33533u, 0x289e19a7u, 0x24c368aau, 0x7551daa6u, 0xd2dacccdu, 0x8c95f4d0u}}\n, .sourceIx = ty_u\n, .targetIx = ty_b\n, .cost = 57 /* milli weight units */\n}\n,[HIGH_16] =\n{ .tag = JET\n, .jet = simplicity_high_16\n, .cmr = {{0x4164ab6eu, 0x2ff8eef6u, 0x3c06c080u, 0xf1dec697u, 0x0b4c5c31u, 0xc02305abu, 0xccd8ed2cu, 0x5e1c45ceu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 66 /* milli weight units */\n}\n,[HIGH_32] =\n{ .tag = JET\n, .jet = simplicity_high_32\n, .cmr = {{0xd3a7ce9cu, 0xd5d5fb67u, 0x9a98ef57u, 0xb8632277u, 0x0cb66fb6u, 0xf0616e16u, 0x34cfa84cu, 0x8f6809c6u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 58 /* milli weight units */\n}\n,[HIGH_64] =\n{ .tag = JET\n, .jet = simplicity_high_64\n, .cmr = {{0x4af91fafu, 0x8e39f4dau, 0x7c28a879u, 0x6594a922u, 0x8213d732u, 0x3eea2ca6u, 0x30752ce4u, 0xc57f16e1u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 68 /* milli weight units */\n}\n,[HIGH_8] =\n{ .tag = JET\n, .jet = simplicity_high_8\n, .cmr = {{0xcbd78d50u, 0xaf779985u, 0x5adc4903u, 0xdbbefc13u, 0x45d51484u, 0xf03d3c75u, 0x5caaa5cau, 0xa97d4a14u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 59 /* milli weight units */\n}\n,[INCREMENT_16] =\n{ .tag = JET\n, .jet = simplicity_increment_16\n, .cmr = {{0xdf274888u, 0xce4cebddu, 0x5708b38du, 0xc3dbb19cu, 0xc2f0364bu, 0x2463e99cu, 0xf5aab4f8u, 0xa23ea58au}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw16\n, .cost = 69 /* milli weight units */\n}\n,[INCREMENT_32] =\n{ .tag = JET\n, .jet = simplicity_increment_32\n, .cmr = {{0x54f757aeu, 0xa76bc7a3u, 0x9fc43d19u, 0xb8dd563au, 0x6807df02u, 0x77a56fcbu, 0x501089ceu, 0x7d06774cu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw32\n, .cost = 92 /* milli weight units */\n}\n,[INCREMENT_64] =\n{ .tag = JET\n, .jet = simplicity_increment_64\n, .cmr = {{0x79ed5f77u, 0x99fb09dau, 0x510429a2u, 0x0128bed0u, 0x91d85876u, 0x47071285u, 0xcdec3a0cu, 0x95709e5bu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw64\n, .cost = 87 /* milli weight units */\n}\n,[INCREMENT_8] =\n{ .tag = JET\n, .jet = simplicity_increment_8\n, .cmr = {{0x0c717e84u, 0xdf67823fu, 0x5741b3d5u, 0x5dbeb472u, 0x9c2bd62fu, 0x5d1def3cu, 0xabccdd6cu, 0xb8dcb56cu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_pbw8\n, .cost = 85 /* milli weight units */\n}\n,[INPUT_AMOUNT] =\n{ .tag = JET\n, .jet = simplicity_input_amount\n, .cmr = {{0xdd65ac32u, 0xc87d996bu, 0x407200feu, 0xefc479a9u, 0x119c1f28u, 0xcaa488b0u, 0xaac3acf5u, 0x9378d6bau}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mpspbw256w256spbw256w64\n, .cost = 285 /* milli weight units */\n}\n,[INPUT_AMOUNTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_amounts_hash\n, .cmr = {{0x2b4df47eu, 0x758ffe88u, 0xe9cd5d39u, 0x6df3d7f9u, 0xec2fbd5au, 0x5395a6d8u, 0xc1ab7044u, 0x00c64f70u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 140 /* milli weight units */\n}\n,[INPUT_ANNEX_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_annex_hash\n, .cmr = {{0x0fd9e4c6u, 0x316b3728u, 0x6e885443u, 0x0e7d7418u, 0x21dc8954u, 0x4a3a59f0u, 0x3dfa40e5u, 0x32b8107fu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 90 /* milli weight units */\n}\n,[INPUT_ANNEXES_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_annexes_hash\n, .cmr = {{0xded1522eu, 0xfa5a2b37u, 0x6173e440u, 0xde227ad0u, 0xc92be2edu, 0xce7c23b5u, 0x1480e50au, 0x77fc564bu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 155 /* milli weight units */\n}\n,[INPUT_ASSET] =\n{ .tag = JET\n, .jet = simplicity_input_asset\n, .cmr = {{0x872b3653u, 0xd65ae7f9u, 0x166cbf70u, 0xd4fd3140u, 0x4798884du, 0x611b647fu, 0xb9f4a307u, 0xc48011b8u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mspbw256w256\n, .cost = 162 /* milli weight units */\n}\n,[INPUT_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_hash\n, .cmr = {{0x3309bb46u, 0xb3158d23u, 0x124f8cedu, 0xaaa1ed3bu, 0x09a8aefeu, 0x81212e11u, 0x335523b6u, 0xb207c544u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 965 /* milli weight units */\n}\n,[INPUT_OUTPOINTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_outpoints_hash\n, .cmr = {{0x140a2baeu, 0xad083baau, 0xc806128au, 0xb649e52bu, 0xbd3c6456u, 0x700cbcfcu, 0x6dbb2959u, 0x173a4df2u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 142 /* milli weight units */\n}\n,[INPUT_PEGIN] =\n{ .tag = JET\n, .jet = simplicity_input_pegin\n, .cmr = {{0xdb376f4au, 0xe84ec051u, 0xa494d766u, 0x8039727bu, 0x53353be5u, 0xae045be7u, 0x6c4b04dau, 0xbd5bbfbbu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 151 /* milli weight units */\n}\n,[INPUT_PREV_OUTPOINT] =\n{ .tag = JET\n, .jet = simplicity_input_prev_outpoint\n, .cmr = {{0x91f4d6ecu, 0x484f60cau, 0xe9297858u, 0xcac47dadu, 0x50db07dcu, 0x1f937ac6u, 0x144c9cb4u, 0xa9ef79d2u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mpw256w32\n, .cost = 160 /* milli weight units */\n}\n,[INPUT_SCRIPT_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_script_hash\n, .cmr = {{0xc316df21u, 0x778e6241u, 0x05ca5990u, 0x4b9208e2u, 0xd423228bu, 0x3eb1cf68u, 0xb8eca47bu, 0xbc7b2ff3u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 147 /* milli weight units */\n}\n,[INPUT_SCRIPT_SIG_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_script_sig_hash\n, .cmr = {{0x941f2b4fu, 0x3b7f2097u, 0xd6ea00e9u, 0x7c1e2ba0u, 0x1cb26487u, 0xc5d2f472u, 0x3738b37cu, 0x732c05c4u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 153 /* milli weight units */\n}\n,[INPUT_SCRIPT_SIGS_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_script_sigs_hash\n, .cmr = {{0x6c748142u, 0x0124b664u, 0x5d32ff9bu, 0x454a1c92u, 0xc6718641u, 0x0e23cf60u, 0x9915df90u, 0x72120fc6u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 138 /* milli weight units */\n}\n,[INPUT_SCRIPTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_scripts_hash\n, .cmr = {{0xdc13519eu, 0x753e5875u, 0x3c709885u, 0x41ad8a0bu, 0xb5888d08u, 0x46e35e4du, 0x4273f656u, 0x85322ae9u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 137 /* milli weight units */\n}\n,[INPUT_SEQUENCE] =\n{ .tag = JET\n, .jet = simplicity_input_sequence\n, .cmr = {{0x3c6e4a3cu, 0x21ced524u, 0x736c545cu, 0x20e4e2deu, 0xf7678f08u, 0x4cd12bcdu, 0x6506a520u, 0x0b5c1738u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw32\n, .cost = 99 /* milli weight units */\n}\n,[INPUT_SEQUENCES_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_sequences_hash\n, .cmr = {{0xc888c873u, 0x302b92b0u, 0x0f206852u, 0xc9eaef00u, 0x0b40109au, 0x53dd686au, 0x53f11db5u, 0x074d9937u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 142 /* milli weight units */\n}\n,[INPUT_UTXO_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_utxo_hash\n, .cmr = {{0x8503d052u, 0x6ba95a8fu, 0xba8ca135u, 0x1c7991c2u, 0xa386b72fu, 0xa81431eau, 0xdbab62ccu, 0x1f5dc518u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 1996 /* milli weight units */\n}\n,[INPUT_UTXOS_HASH] =\n{ .tag = JET\n, .jet = simplicity_input_utxos_hash\n, .cmr = {{0x9c48ab31u, 0xc050ed06u, 0x5aed5168u, 0x66c16c1bu, 0x96c195eau, 0x8e18b024u, 0xbfc0b817u, 0x5849f04eu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 140 /* milli weight units */\n}\n,[INPUTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_inputs_hash\n, .cmr = {{0x523cd71cu, 0x5789882fu, 0x8375a5a5u, 0x4560def8u, 0x463d1c51u, 0xe56b7e11u, 0x2693e77bu, 0x844f4740u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 154 /* milli weight units */\n}\n,[INTERNAL_KEY] =\n{ .tag = JET\n, .jet = simplicity_internal_key\n, .cmr = {{0x9b742e47u, 0x1b0e591au, 0x972b0d44u, 0x21f9c965u, 0x9397f5dau, 0xba2c14dau, 0xc62c4a33u, 0x9cc3e7ecu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 152 /* milli weight units */\n}\n,[IS_ONE_16] =\n{ .tag = JET\n, .jet = simplicity_is_one_16\n, .cmr = {{0x8435879cu, 0xcb864419u, 0x8dcb9a0cu, 0xd73546d7u, 0x01fdd5a4u, 0xc44323f5u, 0x63971599u, 0xc37d16fbu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 82 /* milli weight units */\n}\n,[IS_ONE_32] =\n{ .tag = JET\n, .jet = simplicity_is_one_32\n, .cmr = {{0xddfbd9f0u, 0xa2e67c07u, 0xdedb89e8u, 0x96b6c4f7u, 0xd45c5147u, 0xeed0614eu, 0x4ce7d087u, 0x69aff82du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 65 /* milli weight units */\n}\n,[IS_ONE_64] =\n{ .tag = JET\n, .jet = simplicity_is_one_64\n, .cmr = {{0x35c52554u, 0x8e48eea0u, 0xf77b3bf9u, 0x7ab67a1fu, 0xfe8fb094u, 0xede3325eu, 0x4064b165u, 0x9c6d0765u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 83 /* milli weight units */\n}\n,[IS_ONE_8] =\n{ .tag = JET\n, .jet = simplicity_is_one_8\n, .cmr = {{0x0aba9e57u, 0x6e64d280u, 0x4c8ac468u, 0x2bbba539u, 0x0ebc31a6u, 0xe3e2650fu, 0x9219235du, 0xf4a6ecbbu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 91 /* milli weight units */\n}\n,[IS_ZERO_16] =\n{ .tag = JET\n, .jet = simplicity_is_zero_16\n, .cmr = {{0xa25abd9cu, 0xd2a4070cu, 0x742ef8deu, 0xb0682922u, 0x46032b96u, 0xa517223bu, 0x128cfc12u, 0xd215c5bau}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 75 /* milli weight units */\n}\n,[IS_ZERO_32] =\n{ .tag = JET\n, .jet = simplicity_is_zero_32\n, .cmr = {{0x612a480cu, 0xed6a79dau, 0x6119546eu, 0x056b8df9u, 0xfa95d112u, 0x4b96d601u, 0xe1d3ea91u, 0x8cc56069u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 85 /* milli weight units */\n}\n,[IS_ZERO_64] =\n{ .tag = JET\n, .jet = simplicity_is_zero_64\n, .cmr = {{0x18e8e177u, 0x6ba080ccu, 0xd3e1d60cu, 0xb7534145u, 0x36bf70dfu, 0x185f72c9u, 0xe070796fu, 0x4c63cc71u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 80 /* milli weight units */\n}\n,[IS_ZERO_8] =\n{ .tag = JET\n, .jet = simplicity_is_zero_8\n, .cmr = {{0xb4baa509u, 0x38108426u, 0x740d82cfu, 0x1211e0edu, 0x126de3b7u, 0x6b8d259cu, 0x50ad4b8fu, 0xcab10ab6u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 77 /* milli weight units */\n}\n,[ISSUANCE] =\n{ .tag = JET\n, .jet = simplicity_issuance\n, .cmr = {{0x5c646312u, 0xc169c680u, 0x27979e1bu, 0xc326c5dcu, 0x95e5c516u, 0x8d00d98eu, 0x9d504a7cu, 0xde21d768u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmb\n, .cost = 91 /* milli weight units */\n}\n,[ISSUANCE_ASSET] =\n{ .tag = JET\n, .jet = simplicity_issuance_asset\n, .cmr = {{0x690bf918u, 0xe1527756u, 0xcfbbf51cu, 0x83136214u, 0x3756d52du, 0x04e1294fu, 0x1264950cu, 0x6267e5c9u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 151 /* milli weight units */\n}\n,[ISSUANCE_ASSET_AMOUNT] =\n{ .tag = JET\n, .jet = simplicity_issuance_asset_amount\n, .cmr = {{0x83605146u, 0xff26a49cu, 0xa16f1c4au, 0x6e0ce0b7u, 0xc214df12u, 0xc377f522u, 0x523deb6du, 0x5d0ee44du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmspbw256w64\n, .cost = 162 /* milli weight units */\n}\n,[ISSUANCE_ASSET_AMOUNTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_issuance_asset_amounts_hash\n, .cmr = {{0x70f11c3bu, 0x3b5d1657u, 0xd3b7c7eeu, 0xec850c30u, 0xa32ea96au, 0xa36426fau, 0x30ebf549u, 0x9851a880u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 139 /* milli weight units */\n}\n,[ISSUANCE_ASSET_PROOF] =\n{ .tag = JET\n, .jet = simplicity_issuance_asset_proof\n, .cmr = {{0x0b061f9fu, 0x670c05dcu, 0x39f43831u, 0x3c1379d9u, 0xbf63f44fu, 0x9876b956u, 0x693b41b7u, 0xf94c6c9du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 150 /* milli weight units */\n}\n,[ISSUANCE_BLINDING_ENTROPY_HASH] =\n{ .tag = JET\n, .jet = simplicity_issuance_blinding_entropy_hash\n, .cmr = {{0xbfb6a934u, 0x44e2a0b3u, 0xfb7c13d1u, 0x589a787bu, 0x66e84b69u, 0xb6274ceau, 0x20ad9999u, 0xeb8ca67cu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 129 /* milli weight units */\n}\n,[ISSUANCE_ENTROPY] =\n{ .tag = JET\n, .jet = simplicity_issuance_entropy\n, .cmr = {{0x6ddf99f2u, 0x8c70198du, 0x65417a83u, 0x6074f1b9u, 0xb610f21fu, 0x5119fd55u, 0x0f60b6f8u, 0xe995bbf3u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 153 /* milli weight units */\n}\n,[ISSUANCE_HASH] =\n{ .tag = JET\n, .jet = simplicity_issuance_hash\n, .cmr = {{0x6e9f8ae8u, 0xc45bfb7eu, 0x4e0cf2d0u, 0x0f66832bu, 0x479de758u, 0x2cdbc851u, 0xd0b3230fu, 0xdfbbb78du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 3738 /* milli weight units */\n}\n,[ISSUANCE_RANGE_PROOFS_HASH] =\n{ .tag = JET\n, .jet = simplicity_issuance_range_proofs_hash\n, .cmr = {{0x7e97f519u, 0x534831c7u, 0x7acf73a2u, 0x0fd53cb3u, 0x1d1d156cu, 0x9acbbf87u, 0x3d1492d6u, 0x0d1367d8u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 129 /* milli weight units */\n}\n,[ISSUANCE_TOKEN] =\n{ .tag = JET\n, .jet = simplicity_issuance_token\n, .cmr = {{0xbc2cb7e9u, 0x64b2a2aeu, 0xd79b75c5u, 0xf4408fe8u, 0x4a6dc9b9u, 0xe8cd2c69u, 0x4d57c5f9u, 0xb61205b9u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 149 /* milli weight units */\n}\n,[ISSUANCE_TOKEN_AMOUNT] =\n{ .tag = JET\n, .jet = simplicity_issuance_token_amount\n, .cmr = {{0x7e106464u, 0xa13b6764u, 0xce74d3feu, 0x6ba1cbd5u, 0xf4aeb86bu, 0xbbdf5888u, 0xddf9901du, 0xd8b619aau}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmspbw256w64\n, .cost = 196 /* milli weight units */\n}\n,[ISSUANCE_TOKEN_AMOUNTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_issuance_token_amounts_hash\n, .cmr = {{0x94b5a459u, 0x5b674dbfu, 0xc49c4e8eu, 0xa1a9abc9u, 0x3ed2f770u, 0x7c4212a3u, 0x2b5b86acu, 0x1318c9deu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 138 /* milli weight units */\n}\n,[ISSUANCE_TOKEN_PROOF] =\n{ .tag = JET\n, .jet = simplicity_issuance_token_proof\n, .cmr = {{0x46ed5275u, 0xf55ab341u, 0xf57c3519u, 0xffedf4e3u, 0x7f3f59c9u, 0x7ce9b8e1u, 0x7fffae16u, 0xc6cc1c0eu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 150 /* milli weight units */\n}\n,[ISSUANCES_HASH] =\n{ .tag = JET\n, .jet = simplicity_issuances_hash\n, .cmr = {{0x58659f3fu, 0x7e0130c4u, 0xfc916f49u, 0xbc32eaa0u, 0x883acb90u, 0x22fcad5eu, 0x7805839au, 0x99e50cf9u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 141 /* milli weight units */\n}\n,[LBTC_ASSET] =\n{ .tag = JET\n, .jet = simplicity_lbtc_asset\n, .cmr = {{0x2af7f73au, 0xe3fbbfa2u, 0xd23a8774u, 0xe6e3ca09u, 0x3254da2fu, 0xd2a9f397u, 0xa6ae0a30u, 0xbb48f0d7u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 145 /* milli weight units */\n}\n,[LE_16] =\n{ .tag = JET\n, .jet = simplicity_le_16\n, .cmr = {{0x63da727cu, 0xcb4c6a9du, 0x4e000964u, 0xe763bff9u, 0x34eaafd0u, 0x44287e12u, 0x68d07ecdu, 0xfde207e1u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 112 /* milli weight units */\n}\n,[LE_32] =\n{ .tag = JET\n, .jet = simplicity_le_32\n, .cmr = {{0xdee29a91u, 0x656d7ae7u, 0x3df4956fu, 0xd8a2c6b6u, 0x27aab51cu, 0x1129f9feu, 0x7f6ed3e3u, 0x4792c762u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 93 /* milli weight units */\n}\n,[LE_64] =\n{ .tag = JET\n, .jet = simplicity_le_64\n, .cmr = {{0x01c55df7u, 0xd4465966u, 0x659ddfc9u, 0x4b36d033u, 0x242c2ec5u, 0x93cee121u, 0x22440775u, 0x66ed015fu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 93 /* milli weight units */\n}\n,[LE_8] =\n{ .tag = JET\n, .jet = simplicity_le_8\n, .cmr = {{0x0fb72d9fu, 0x8ee2370au, 0xba55663au, 0x4899162eu, 0x40ca5514u, 0x713efb25u, 0xe4a89e2au, 0x104b34dbu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 109 /* milli weight units */\n}\n,[LEFT_EXTEND_16_32] =\n{ .tag = JET\n, .jet = simplicity_left_extend_16_32\n, .cmr = {{0xdcf42b65u, 0x42f6d41cu, 0xb7b50e7cu, 0x772f3c7fu, 0x6e432232u, 0xf2ba2079u, 0xb386a05du, 0x7b466addu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 86 /* milli weight units */\n}\n,[LEFT_EXTEND_16_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_16_64\n, .cmr = {{0x2eee48a9u, 0x2237947cu, 0x1a517df9u, 0x95f44f1du, 0xfef20ddbu, 0x4e9b530bu, 0x22d18a0au, 0x7fd628aau}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 89 /* milli weight units */\n}\n,[LEFT_EXTEND_1_16] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_16\n, .cmr = {{0x9a48a477u, 0x8e7c3c28u, 0x5ab65329u, 0xd1ccc499u, 0x9d2d194eu, 0x005bd794u, 0x6949533du, 0x8cba806cu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 67 /* milli weight units */\n}\n,[LEFT_EXTEND_1_32] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_32\n, .cmr = {{0xdab6a533u, 0xcbcbe836u, 0x2cf1d5a1u, 0x6ea37cbcu, 0x7edc7fc8u, 0xa9428571u, 0xe171ec6eu, 0xe44d0800u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 60 /* milli weight units */\n}\n,[LEFT_EXTEND_1_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_64\n, .cmr = {{0x110e5c1eu, 0xf0b469a7u, 0x638570dau, 0x944d232eu, 0x0f28c461u, 0x51a22535u, 0x7de3e904u, 0x57a88ea2u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 76 /* milli weight units */\n}\n,[LEFT_EXTEND_1_8] =\n{ .tag = JET\n, .jet = simplicity_left_extend_1_8\n, .cmr = {{0x5a831ca9u, 0x9621517au, 0x2b354e5cu, 0xac38bc3au, 0x30c4001fu, 0x20d25d77u, 0x97addcacu, 0x5da86106u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 65 /* milli weight units */\n}\n,[LEFT_EXTEND_32_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_32_64\n, .cmr = {{0x84fcc69bu, 0xa1db50dbu, 0xd5363cf2u, 0x77795760u, 0x1de2568au, 0xdf07af41u, 0x61debb1eu, 0x5e37310au}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 63 /* milli weight units */\n}\n,[LEFT_EXTEND_8_16] =\n{ .tag = JET\n, .jet = simplicity_left_extend_8_16\n, .cmr = {{0xfea1f25au, 0x82fdf6f8u, 0x669cc40fu, 0xbb8e54a9u, 0x2658bfabu, 0x94eb082fu, 0x717ba265u, 0xb5d844b4u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 88 /* milli weight units */\n}\n,[LEFT_EXTEND_8_32] =\n{ .tag = JET\n, .jet = simplicity_left_extend_8_32\n, .cmr = {{0x09d703cau, 0x46f75d05u, 0x1a93d0e8u, 0xa2af0501u, 0xa38e8486u, 0x83ef109cu, 0x1fb4b5beu, 0x20e6315du}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 90 /* milli weight units */\n}\n,[LEFT_EXTEND_8_64] =\n{ .tag = JET\n, .jet = simplicity_left_extend_8_64\n, .cmr = {{0xd3dafcbdu, 0xab69a2bbu, 0x320f8d23u, 0x0cefd09cu, 0x27a154c5u, 0x1e7e5cd5u, 0x334eafedu, 0x19e20df4u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 107 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_16_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_16_32\n, .cmr = {{0x888c7e0au, 0xb0031475u, 0xc514f9b3u, 0x7c81f45au, 0x47314984u, 0xe5027508u, 0xddc5eb8du, 0x8d10beb9u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 91 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_16_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_16_64\n, .cmr = {{0x526b3505u, 0x450136d6u, 0x81a50b4bu, 0xde4fa612u, 0xda9d69bdu, 0x08170ea3u, 0x2d0a2651u, 0x115072ebu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 110 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_16\n, .cmr = {{0x93aed6f6u, 0x8750774bu, 0x2dbf8314u, 0xcadebe5au, 0x415243fbu, 0xdf7c2eeau, 0x8b223df3u, 0x261e3bdbu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 141 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_32\n, .cmr = {{0x008298f8u, 0x2fb6cf37u, 0xe9dc703eu, 0xa4f94956u, 0x5c2965a7u, 0xc7f4fa22u, 0xf5545642u, 0x3408a3abu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 263 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_64\n, .cmr = {{0x2b454ebdu, 0x791ec7dau, 0xcedcb86cu, 0x69d02679u, 0x4a5dc372u, 0x5261e7dcu, 0x1650cc88u, 0x8117fc4fu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 422 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_1_8] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_1_8\n, .cmr = {{0x6c277c4cu, 0xd053dd35u, 0x02dbe0bbu, 0xc14eb0b3u, 0x6a201abeu, 0xf3b174b0u, 0xebfe0520u, 0x18b67e67u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 99 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_32_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_32_64\n, .cmr = {{0x5d41221cu, 0xf6158297u, 0xb06c1957u, 0x112c0d12u, 0xf3eb917au, 0x2f509a53u, 0x9d5c9b79u, 0x10219b65u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 93 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_8_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_8_16\n, .cmr = {{0x2178dc76u, 0xc04c79d9u, 0x1815d38cu, 0x967f3421u, 0x3ffcc6c5u, 0xf243c956u, 0x2973f090u, 0xca5caefau}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 88 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_8_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_8_32\n, .cmr = {{0xa4e86b53u, 0xe5d00fafu, 0x0b3e9d53u, 0x202af773u, 0x8dcb8887u, 0xa18dfee5u, 0xbe34c497u, 0x698ca6b7u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 103 /* milli weight units */\n}\n,[LEFT_PAD_HIGH_8_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_high_8_64\n, .cmr = {{0xc843a72cu, 0x41170f40u, 0x3433c436u, 0xa39b05cfu, 0x193c27d8u, 0xbe3530f9u, 0xb94e42d7u, 0x63003d54u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 136 /* milli weight units */\n}\n,[LEFT_PAD_LOW_16_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_16_32\n, .cmr = {{0x21537f7du, 0x8f97f220u, 0x3cccb035u, 0xef1d4628u, 0x9ee8aa50u, 0xf0236077u, 0xd0d0b210u, 0x700440a1u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 69 /* milli weight units */\n}\n,[LEFT_PAD_LOW_16_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_16_64\n, .cmr = {{0x6b2ea963u, 0x0c5dde03u, 0x7aab2bf7u, 0x33219b99u, 0xc7edc2ecu, 0xedb9a03au, 0xdfd16943u, 0x0b08bb9cu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 106 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_16\n, .cmr = {{0x4aa40520u, 0xfaed72e6u, 0xe9be3be6u, 0x930f1e32u, 0xb0b182c4u, 0x327ada94u, 0xa71f006du, 0x149015f9u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 65 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_32\n, .cmr = {{0xcfb4753bu, 0xb9ba3621u, 0xba093782u, 0x5fade643u, 0x098e385eu, 0xd68efb16u, 0xff58ecf3u, 0x65d7e5e2u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 63 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_64\n, .cmr = {{0xe6f1c09bu, 0x5fe126d0u, 0xea86e7bfu, 0xc0b28e84u, 0x9f8f7efdu, 0x31064ea4u, 0xfd1cca07u, 0x1b45db93u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 61 /* milli weight units */\n}\n,[LEFT_PAD_LOW_1_8] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_1_8\n, .cmr = {{0xdc5a47f8u, 0xd77765c9u, 0x94cbe86au, 0xae44a9c5u, 0xff2ebc38u, 0x10d79cd8u, 0x3bd2c409u, 0x8c762bf5u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 56 /* milli weight units */\n}\n,[LEFT_PAD_LOW_32_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_32_64\n, .cmr = {{0x2d88e4d0u, 0x1e0108c0u, 0xd6880f3cu, 0xe8482bb0u, 0x951f2b3fu, 0xc5df4b1au, 0xdb184a1bu, 0xfd1f6465u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 91 /* milli weight units */\n}\n,[LEFT_PAD_LOW_8_16] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_8_16\n, .cmr = {{0xac1a4c97u, 0x83e4dbedu, 0x2700eb29u, 0x52e3062au, 0x5a72712fu, 0x82159861u, 0xb08e67efu, 0x4a71f5f2u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 66 /* milli weight units */\n}\n,[LEFT_PAD_LOW_8_32] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_8_32\n, .cmr = {{0x3da5f1a8u, 0xc97819aeu, 0x7e10b936u, 0x4ff84996u, 0xd0d73e69u, 0x8a49da69u, 0x1f69a273u, 0x254201cdu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 61 /* milli weight units */\n}\n,[LEFT_PAD_LOW_8_64] =\n{ .tag = JET\n, .jet = simplicity_left_pad_low_8_64\n, .cmr = {{0x25bc18d4u, 0x9f934072u, 0x277d3f61u, 0x3bf16c11u, 0x8df197bcu, 0x92872d2au, 0xffe417adu, 0xeaaf1a85u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 112 /* milli weight units */\n}\n,[LEFT_ROTATE_16] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_16\n, .cmr = {{0x88c12337u, 0xcd754f83u, 0x80986d86u, 0xfe3a89e2u, 0x62746653u, 0xe1badd9cu, 0xc9b47645u, 0xfe57195au}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 77 /* milli weight units */\n}\n,[LEFT_ROTATE_32] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_32\n, .cmr = {{0x39816ccdu, 0x9e9cf119u, 0x1f065d2eu, 0xb7a7fb83u, 0x828d91ecu, 0x7d9977a1u, 0xfc70be9bu, 0x31a468b9u}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 106 /* milli weight units */\n}\n,[LEFT_ROTATE_64] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_64\n, .cmr = {{0x8b2355c3u, 0x1e3b614bu, 0xd4b41c3eu, 0xcf277424u, 0xd026766bu, 0x37bc6c10u, 0x5621f4f6u, 0xa16f9bdfu}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 98 /* milli weight units */\n}\n,[LEFT_ROTATE_8] =\n{ .tag = JET\n, .jet = simplicity_left_rotate_8\n, .cmr = {{0x9e966e88u, 0x0c6b0c48u, 0x3c90beeeu, 0xd7c5737cu, 0xa5f3facfu, 0x85aab3d5u, 0x31ad34bdu, 0x7b1a9b68u}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 88 /* milli weight units */\n}\n,[LEFT_SHIFT_16] =\n{ .tag = JET\n, .jet = simplicity_left_shift_16\n, .cmr = {{0xb0536018u, 0x4d0602b5u, 0x81405e32u, 0x960b31c0u, 0x5219358du, 0xe89efdf4u, 0x9464723du, 0xd625617au}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 72 /* milli weight units */\n}\n,[LEFT_SHIFT_32] =\n{ .tag = JET\n, .jet = simplicity_left_shift_32\n, .cmr = {{0x34bf54f5u, 0x94c26210u, 0x07f8c78bu, 0x30fad396u, 0x72009bb3u, 0x66aace1eu, 0x5e41ee4du, 0x9cc541a8u}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 78 /* milli weight units */\n}\n,[LEFT_SHIFT_64] =\n{ .tag = JET\n, .jet = simplicity_left_shift_64\n, .cmr = {{0x5de953f0u, 0x4deaed90u, 0x47567647u, 0xa1eb7abeu, 0x665feccbu, 0xe7ed10cbu, 0x7dbe6912u, 0x73c094b0u}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 82 /* milli weight units */\n}\n,[LEFT_SHIFT_8] =\n{ .tag = JET\n, .jet = simplicity_left_shift_8\n, .cmr = {{0xab9d3e9au, 0xc39038adu, 0x88b103f0u, 0x72254c0eu, 0xc6e27475u, 0xe275c245u, 0xe88cce0du, 0x072e6446u}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 91 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_16] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_16\n, .cmr = {{0xe2910788u, 0x5550450eu, 0xb727d0cfu, 0x14e104aeu, 0x12f83a24u, 0xe2e2aca3u, 0xcce433deu, 0x2f35d7b3u}}\n, .sourceIx = ty_pbpw4w16\n, .targetIx = ty_w16\n, .cost = 83 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_32] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_32\n, .cmr = {{0xf39250c4u, 0x5a1310ccu, 0x638c788du, 0xeec5c365u, 0xb4d176d1u, 0x0efbf4c6u, 0x01cf5eebu, 0xe0a573e9u}}\n, .sourceIx = ty_pbpw8w32\n, .targetIx = ty_w32\n, .cost = 95 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_64] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_64\n, .cmr = {{0xad8794cfu, 0xaef2b7f7u, 0x74fa68d3u, 0x09bbc98du, 0xfee58c40u, 0x400b2eb5u, 0x78a212f4u, 0x38bd07abu}}\n, .sourceIx = ty_pbpw8w64\n, .targetIx = ty_w64\n, .cost = 103 /* milli weight units */\n}\n,[LEFT_SHIFT_WITH_8] =\n{ .tag = JET\n, .jet = simplicity_left_shift_with_8\n, .cmr = {{0xdd9cc1ceu, 0xa7490948u, 0x1ff58f87u, 0x6ff66e0fu, 0x5d52bf89u, 0xb0258fa9u, 0x5b320002u, 0xc32a7915u}}\n, .sourceIx = ty_pbpw4w8\n, .targetIx = ty_w8\n, .cost = 107 /* milli weight units */\n}\n,[LEFTMOST_16_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_1\n, .cmr = {{0xde6a4c98u, 0x337e680du, 0x6e6ee2bfu, 0x36d3a081u, 0x7d2a9a98u, 0x325f87e5u, 0xeceb8a6fu, 0x1168f5cau}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 93 /* milli weight units */\n}\n,[LEFTMOST_16_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_2\n, .cmr = {{0x005809b8u, 0x051a2a50u, 0x2833b22cu, 0x2c17981eu, 0xaf9dd1d3u, 0xdbc8f8c8u, 0x94516c1du, 0x5f31146cu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w2\n, .cost = 90 /* milli weight units */\n}\n,[LEFTMOST_16_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_4\n, .cmr = {{0x9c50ee22u, 0x84d857c4u, 0x7c054447u, 0x1354105eu, 0x98dfe027u, 0x54d2e42du, 0xe11d3234u, 0xed10b642u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w4\n, .cost = 75 /* milli weight units */\n}\n,[LEFTMOST_16_8] =\n{ .tag = JET\n, .jet = simplicity_leftmost_16_8\n, .cmr = {{0x5a1a7291u, 0x4e149c22u, 0xb464c8f6u, 0xa3d9cf41u, 0xb07192beu, 0xf0d8a1ccu, 0x7cbe5704u, 0xa9e8ea70u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 71 /* milli weight units */\n}\n,[LEFTMOST_32_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_1\n, .cmr = {{0x5fb8e634u, 0x2ab74ee2u, 0xc9225b87u, 0x2fa0c912u, 0x046a69dbu, 0xb719bcd6u, 0xc8d79b76u, 0x60c4ebcau}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 77 /* milli weight units */\n}\n,[LEFTMOST_32_16] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_16\n, .cmr = {{0x54ae50b4u, 0x6b5b2e68u, 0xf536c01cu, 0x39617b0cu, 0xee42e1c4u, 0x9a2cd1d2u, 0x6af8ea87u, 0x15ac4d11u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 102 /* milli weight units */\n}\n,[LEFTMOST_32_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_2\n, .cmr = {{0x12306855u, 0x4595427eu, 0x3c1de243u, 0xbab66f33u, 0x48368aaau, 0x44617d6au, 0x02479fb7u, 0x04bcfd1eu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w2\n, .cost = 66 /* milli weight units */\n}\n,[LEFTMOST_32_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_4\n, .cmr = {{0x55a87b66u, 0xc339e363u, 0xe03d4daau, 0xc62290ebu, 0xa93c1a3au, 0x7382cbf6u, 0x1f20b34au, 0x505124adu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w4\n, .cost = 52 /* milli weight units */\n}\n,[LEFTMOST_32_8] =\n{ .tag = JET\n, .jet = simplicity_leftmost_32_8\n, .cmr = {{0x9f345beeu, 0x0b162d42u, 0xa035718fu, 0x8ca1adc8u, 0xac2f710du, 0xc40052a8u, 0x2566e6d8u, 0x07bef8b8u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w8\n, .cost = 103 /* milli weight units */\n}\n,[LEFTMOST_64_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_1\n, .cmr = {{0xb924d33bu, 0x5efefc8eu, 0x20420819u, 0x25917cffu, 0x239b31c8u, 0xbdbdf4acu, 0xae6bb8d9u, 0xcd217b4fu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 78 /* milli weight units */\n}\n,[LEFTMOST_64_16] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_16\n, .cmr = {{0x12aa85e0u, 0x5c1e9622u, 0x279c4c2du, 0xdcf897c9u, 0x5ddcc011u, 0x3997283bu, 0x6b3e0949u, 0xbc8113cbu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w16\n, .cost = 88 /* milli weight units */\n}\n,[LEFTMOST_64_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_2\n, .cmr = {{0xbcec97f4u, 0x3ba55cd4u, 0x0d85a1e7u, 0x6cbade7bu, 0x0b1e9f13u, 0x9747793du, 0xcb3480beu, 0xe1f751cau}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w2\n, .cost = 71 /* milli weight units */\n}\n,[LEFTMOST_64_32] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_32\n, .cmr = {{0x9c896939u, 0x86e55733u, 0xab962a30u, 0x0b057950u, 0x3d83de8au, 0xc19b179bu, 0x417e1ca2u, 0x5385b38fu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 90 /* milli weight units */\n}\n,[LEFTMOST_64_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_4\n, .cmr = {{0xd2d64520u, 0x92d6566fu, 0x89a1f64eu, 0x736596f9u, 0x000e5e6fu, 0x63e40017u, 0xd0cb80f3u, 0xf7adfd18u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w4\n, .cost = 79 /* milli weight units */\n}\n,[LEFTMOST_64_8] =\n{ .tag = JET\n, .jet = simplicity_leftmost_64_8\n, .cmr = {{0xf77b62bbu, 0x01b90511u, 0xb6d06ebfu, 0x2e36c065u, 0x65acb5aau, 0xd1efc77cu, 0x36a10a26u, 0x1de921dau}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w8\n, .cost = 86 /* milli weight units */\n}\n,[LEFTMOST_8_1] =\n{ .tag = JET\n, .jet = simplicity_leftmost_8_1\n, .cmr = {{0x5a730b58u, 0xe3abcb2fu, 0x4de22159u, 0x80302310u, 0x2cd66421u, 0x911920cau, 0x21a2a05cu, 0x9b211ce8u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 90 /* milli weight units */\n}\n,[LEFTMOST_8_2] =\n{ .tag = JET\n, .jet = simplicity_leftmost_8_2\n, .cmr = {{0x25790856u, 0x103dce6cu, 0x7bbb3dd7u, 0x18b16910u, 0x9cae8537u, 0x99d12456u, 0xc85d8349u, 0xec18dc53u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w2\n, .cost = 90 /* milli weight units */\n}\n,[LEFTMOST_8_4] =\n{ .tag = JET\n, .jet = simplicity_leftmost_8_4\n, .cmr = {{0x73d9f018u, 0x157a1478u, 0x4ee70b21u, 0x9ceb4042u, 0xfa621d0eu, 0xe6d545a0u, 0xfdbab944u, 0x4346e331u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w4\n, .cost = 87 /* milli weight units */\n}\n,[LINEAR_COMBINATION_1] =\n{ .tag = JET\n, .jet = simplicity_linear_combination_1\n, .cmr = {{0x6d9f4a87u, 0x0fbf740cu, 0x220efff3u, 0x07b5ed91u, 0xa58c5e51u, 0xa8adfc3bu, 0x159030f5u, 0x12d39941u}}\n, .sourceIx = ty_ppw256pw512w256w256\n, .targetIx = ty_pw512w256\n, .cost = 84674 /* milli weight units */\n}\n,[LINEAR_VERIFY_1] =\n{ .tag = JET\n, .jet = simplicity_linear_verify_1\n, .cmr = {{0x278313d7u, 0xce4ad589u, 0x11de24eeu, 0x540d19ecu, 0xebb62f4au, 0xb4a71e2au, 0xadd4512bu, 0x2e4bc2e2u}}\n, .sourceIx = ty_pppw256w512w256w512\n, .targetIx = ty_u\n, .cost = 43364 /* milli weight units */\n}\n,[LOCK_TIME] =\n{ .tag = JET\n, .jet = simplicity_lock_time\n, .cmr = {{0xa16897c5u, 0xdb4927c6u, 0xcb07b165u, 0xbd2cc38bu, 0x36a60268u, 0x6c74a190u, 0x34aa3787u, 0xac582a0bu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 85 /* milli weight units */\n}\n,[LOW_1] =\n{ .tag = JET\n, .jet = simplicity_low_1\n, .cmr = {{0xf27b69bbu, 0x091609f5u, 0x9e003305u, 0x0d01a5bcu, 0x77ff07d9u, 0x42707a79u, 0xcf5ee410u, 0xa998a043u}}\n, .sourceIx = ty_u\n, .targetIx = ty_b\n, .cost = 38 /* milli weight units */\n}\n,[LOW_16] =\n{ .tag = JET\n, .jet = simplicity_low_16\n, .cmr = {{0x977cbd1eu, 0x7ffc05e7u, 0x16d9c1b4u, 0x9f7d517fu, 0x853dbf3eu, 0x98a4c748u, 0x046eacf4u, 0x17f89c2fu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 69 /* milli weight units */\n}\n,[LOW_32] =\n{ .tag = JET\n, .jet = simplicity_low_32\n, .cmr = {{0xbe416982u, 0x8f076778u, 0xb60d5456u, 0xf7886ed7u, 0xf30b101du, 0x6ccbd9eau, 0x0c4db142u, 0xeac66b12u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 62 /* milli weight units */\n}\n,[LOW_64] =\n{ .tag = JET\n, .jet = simplicity_low_64\n, .cmr = {{0x019a66bfu, 0xba175168u, 0x8be71389u, 0xed7bf371u, 0xb3014dfbu, 0x329562acu, 0x3b3e9dfeu, 0x9206a5bcu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 47 /* milli weight units */\n}\n,[LOW_8] =\n{ .tag = JET\n, .jet = simplicity_low_8\n, .cmr = {{0x217b5643u, 0x956b4833u, 0xaa5622f0u, 0x0f0688bau, 0x860d4adbu, 0xf940cbdcu, 0xd2b59f26u, 0xd61593b1u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 47 /* milli weight units */\n}\n,[LT_16] =\n{ .tag = JET\n, .jet = simplicity_lt_16\n, .cmr = {{0x56a20d55u, 0xedb44388u, 0x180544c3u, 0xed404145u, 0xa3b66fd2u, 0xc4113842u, 0xf64eaeafu, 0xbad4bb06u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 123 /* milli weight units */\n}\n,[LT_32] =\n{ .tag = JET\n, .jet = simplicity_lt_32\n, .cmr = {{0xcab0dc5bu, 0x0ecbf6d2u, 0x4816fc20u, 0x10fc3119u, 0x3663c306u, 0x968d9ceeu, 0x3b004c0bu, 0xc184b478u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 107 /* milli weight units */\n}\n,[LT_64] =\n{ .tag = JET\n, .jet = simplicity_lt_64\n, .cmr = {{0x47d67e52u, 0xb27ba78eu, 0xdd075aa2u, 0x70ded007u, 0xa7a9a684u, 0x99344f28u, 0x62f50690u, 0x49a0cefeu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_b\n, .cost = 76 /* milli weight units */\n}\n,[LT_8] =\n{ .tag = JET\n, .jet = simplicity_lt_8\n, .cmr = {{0x73d00446u, 0x55c0df45u, 0xc271a171u, 0x3ff9b9a4u, 0x3dde56e6u, 0x74d1754eu, 0x76edb16fu, 0x949c4fabu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 107 /* milli weight units */\n}\n,[MAJ_1] =\n{ .tag = JET\n, .jet = simplicity_maj_1\n, .cmr = {{0xcb2d986du, 0x7f00107au, 0x3c25f6b2u, 0xf14891d0u, 0x2e20ae16u, 0xf0a1252cu, 0x92d9b58au, 0xe73388aau}}\n, .sourceIx = ty_pbw2\n, .targetIx = ty_b\n, .cost = 62 /* milli weight units */\n}\n,[MAJ_16] =\n{ .tag = JET\n, .jet = simplicity_maj_16\n, .cmr = {{0x0af6d0c1u, 0x71fe33a2u, 0x159bf988u, 0x00f0412cu, 0x2597e997u, 0x84d074fdu, 0xfa33d7fdu, 0xe597ddfdu}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 80 /* milli weight units */\n}\n,[MAJ_32] =\n{ .tag = JET\n, .jet = simplicity_maj_32\n, .cmr = {{0x3060838du, 0x48456f33u, 0x92d5d69bu, 0x5eec0892u, 0x76cd58bbu, 0x67a12c64u, 0x2ec73aebu, 0x9adacbddu}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 96 /* milli weight units */\n}\n,[MAJ_64] =\n{ .tag = JET\n, .jet = simplicity_maj_64\n, .cmr = {{0x8ebcc174u, 0x57ea2b14u, 0x231b0e90u, 0x1ea7b1d4u, 0x7b9b7898u, 0x6372a441u, 0x6fe73f67u, 0x63feb24bu}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 93 /* milli weight units */\n}\n,[MAJ_8] =\n{ .tag = JET\n, .jet = simplicity_maj_8\n, .cmr = {{0x8930d1d0u, 0x991b0a58u, 0x1d0b1d85u, 0xad72147du, 0x6649a359u, 0x93283fc9u, 0x7214431fu, 0x0b6a7aa8u}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 94 /* milli weight units */\n}\n,[MAX_16] =\n{ .tag = JET\n, .jet = simplicity_max_16\n, .cmr = {{0xe0114717u, 0x691ac1a7u, 0x39288fc6u, 0xffa1c650u, 0x7c43e6f1u, 0xd4c18770u, 0xffa166aeu, 0x839dd533u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 114 /* milli weight units */\n}\n,[MAX_32] =\n{ .tag = JET\n, .jet = simplicity_max_32\n, .cmr = {{0x1d723cb3u, 0x89942219u, 0xec103485u, 0x317fa5d8u, 0x7ee15c24u, 0xb2080f50u, 0x46650d80u, 0x308b189du}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 92 /* milli weight units */\n}\n,[MAX_64] =\n{ .tag = JET\n, .jet = simplicity_max_64\n, .cmr = {{0x0073ac3cu, 0x6ea939dcu, 0xc7eee4eau, 0x63dcfd75u, 0x2037355bu, 0x484f6e70u, 0x16b300e2u, 0xd28c07c3u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 104 /* milli weight units */\n}\n,[MAX_8] =\n{ .tag = JET\n, .jet = simplicity_max_8\n, .cmr = {{0x6bc10370u, 0xf3e7a7b9u, 0x2acb1423u, 0xbbdf0b3du, 0x7e3cd0d2u, 0xdbc705a3u, 0x4d8dc99cu, 0x910422fbu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 96 /* milli weight units */\n}\n,[MEDIAN_16] =\n{ .tag = JET\n, .jet = simplicity_median_16\n, .cmr = {{0x2414e3c4u, 0x39659d8au, 0xa9d087e1u, 0xade77266u, 0x673d1c8bu, 0xd4e7501bu, 0x22ac46a3u, 0xff39975du}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 123 /* milli weight units */\n}\n,[MEDIAN_32] =\n{ .tag = JET\n, .jet = simplicity_median_32\n, .cmr = {{0x0792356bu, 0x610b57d0u, 0xec199e98u, 0x535ea9bcu, 0xcce843a5u, 0xdf5dd240u, 0x8c414886u, 0xdfd6bd1eu}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 101 /* milli weight units */\n}\n,[MEDIAN_64] =\n{ .tag = JET\n, .jet = simplicity_median_64\n, .cmr = {{0x0766d89bu, 0x430ffdf0u, 0x38691b18u, 0x439cd6fcu, 0x4929172eu, 0xa884fdafu, 0x166936b3u, 0x8b15fd0cu}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 109 /* milli weight units */\n}\n,[MEDIAN_8] =\n{ .tag = JET\n, .jet = simplicity_median_8\n, .cmr = {{0xa4a0b631u, 0x0ff0ed4au, 0x4c3e03ebu, 0xc7a91306u, 0xef660424u, 0xbc95a0d3u, 0xf2fdb71fu, 0xb6afd8b7u}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 122 /* milli weight units */\n}\n,[MIN_16] =\n{ .tag = JET\n, .jet = simplicity_min_16\n, .cmr = {{0xf158f40au, 0x860993b4u, 0x107fb271u, 0xfb4c8f95u, 0x5ba4542au, 0xd1821cd2u, 0xf13c880cu, 0xa4bee2e2u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 97 /* milli weight units */\n}\n,[MIN_32] =\n{ .tag = JET\n, .jet = simplicity_min_32\n, .cmr = {{0xe5e413dcu, 0x5de5e22du, 0x66f32d8du, 0xbf50053eu, 0xd278e175u, 0xc0d4b344u, 0xebd461beu, 0xb108e55eu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 113 /* milli weight units */\n}\n,[MIN_64] =\n{ .tag = JET\n, .jet = simplicity_min_64\n, .cmr = {{0x43d82f6cu, 0x6128aa01u, 0xa997bb17u, 0xe5e7f501u, 0xe7be7db9u, 0x589e566du, 0xe97a32eau, 0xe7e7b339u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 102 /* milli weight units */\n}\n,[MIN_8] =\n{ .tag = JET\n, .jet = simplicity_min_8\n, .cmr = {{0x6b012ca3u, 0x185dc005u, 0xe8942cfbu, 0xc9f238dcu, 0xedaf0c00u, 0x43526447u, 0xe3ec31ceu, 0xfa6e4064u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 99 /* milli weight units */\n}\n,[MODULO_16] =\n{ .tag = JET\n, .jet = simplicity_modulo_16\n, .cmr = {{0x62c179acu, 0x84c5750bu, 0x425f9a1bu, 0x8f81edaau, 0x7f5cf22cu, 0x19d86b0du, 0xcf96dea6u, 0xbad99b3bu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 103 /* milli weight units */\n}\n,[MODULO_32] =\n{ .tag = JET\n, .jet = simplicity_modulo_32\n, .cmr = {{0xa1f01c10u, 0x6fc36a76u, 0x4e99b233u, 0x98e21e7cu, 0x267f889fu, 0xccebd148u, 0x7d3de1ccu, 0x67c32bd9u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 102 /* milli weight units */\n}\n,[MODULO_64] =\n{ .tag = JET\n, .jet = simplicity_modulo_64\n, .cmr = {{0x50c82fd0u, 0x3109c98bu, 0x7237e916u, 0x74041964u, 0x381e6c2eu, 0xbbe25bf3u, 0xe0d37a9fu, 0x060f1502u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 85 /* milli weight units */\n}\n,[MODULO_8] =\n{ .tag = JET\n, .jet = simplicity_modulo_8\n, .cmr = {{0x5c63c77au, 0x1608e2f6u, 0xa3748c11u, 0x0fbb9a1cu, 0x569fb4d5u, 0x40f3dd2eu, 0x4f80e90du, 0xd5ea9982u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 102 /* milli weight units */\n}\n,[MULTIPLY_16] =\n{ .tag = JET\n, .jet = simplicity_multiply_16\n, .cmr = {{0x46e62abfu, 0x8e30a774u, 0x6de0e929u, 0xf7beeddbu, 0xde8b269bu, 0xab08f76eu, 0x9547108bu, 0x1c360174u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w32\n, .cost = 90 /* milli weight units */\n}\n,[MULTIPLY_32] =\n{ .tag = JET\n, .jet = simplicity_multiply_32\n, .cmr = {{0x2decdc5bu, 0x0c6ff63du, 0x11f53852u, 0xe0deed11u, 0x4481355bu, 0xb6c6ce15u, 0x46ae9f81u, 0x5bee7750u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w64\n, .cost = 90 /* milli weight units */\n}\n,[MULTIPLY_64] =\n{ .tag = JET\n, .jet = simplicity_multiply_64\n, .cmr = {{0xbfa8626du, 0xbf10001du, 0xe390d997u, 0xf2ee7b19u, 0x0c24a78cu, 0xfecb91f5u, 0xd7c10c3fu, 0x9ddbb1e6u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w128\n, .cost = 85 /* milli weight units */\n}\n,[MULTIPLY_8] =\n{ .tag = JET\n, .jet = simplicity_multiply_8\n, .cmr = {{0x29da1337u, 0x4f7cb308u, 0x405fe230u, 0xf899485cu, 0x500e6e95u, 0x20c15e8au, 0x76e53a92u, 0xe7ac64d6u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w16\n, .cost = 93 /* milli weight units */\n}\n,[NEGATE_16] =\n{ .tag = JET\n, .jet = simplicity_negate_16\n, .cmr = {{0xf642173bu, 0x85ef2196u, 0x9d8d9048u, 0x807e3d4fu, 0xacf3f5f9u, 0xe59aa5cfu, 0x0c60f874u, 0x22ed7c8fu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw16\n, .cost = 70 /* milli weight units */\n}\n,[NEGATE_32] =\n{ .tag = JET\n, .jet = simplicity_negate_32\n, .cmr = {{0x549b65ceu, 0x97c6b334u, 0xb8ae9456u, 0x960e365bu, 0xb284d76du, 0x4005e921u, 0xf489bc36u, 0x26171b06u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw32\n, .cost = 85 /* milli weight units */\n}\n,[NEGATE_64] =\n{ .tag = JET\n, .jet = simplicity_negate_64\n, .cmr = {{0x35acca27u, 0xce658579u, 0xef1c55adu, 0x1abea005u, 0x0d9366d1u, 0x2209ad13u, 0x052549c3u, 0x436491d0u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw64\n, .cost = 94 /* milli weight units */\n}\n,[NEGATE_8] =\n{ .tag = JET\n, .jet = simplicity_negate_8\n, .cmr = {{0xd871c542u, 0x473f4dd9u, 0x02d31fe3u, 0xfc9ac0f3u, 0x319e42e8u, 0x0cae2181u, 0xffc85e6cu, 0x60fb0988u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_pbw8\n, .cost = 91 /* milli weight units */\n}\n,[NEW_ISSUANCE_CONTRACT] =\n{ .tag = JET\n, .jet = simplicity_new_issuance_contract\n, .cmr = {{0xdb64808cu, 0x3ff44880u, 0xd72bc295u, 0xd9ac0643u, 0xe51404deu, 0x5398ad9eu, 0x931bd3d2u, 0xadbca6c4u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 157 /* milli weight units */\n}\n,[NONCE_HASH] =\n{ .tag = JET\n, .jet = simplicity_nonce_hash\n, .cmr = {{0xfb1e0344u, 0xdcdaf9dbu, 0x91b987e8u, 0xf9661067u, 0x9f05deb2u, 0x06b40105u, 0x7502a484u, 0xaa87f8bfu}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256mspbw256w256\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 317 /* milli weight units */\n}\n,[NUM_INPUTS] =\n{ .tag = JET\n, .jet = simplicity_num_inputs\n, .cmr = {{0xb2288ebau, 0xadcbcfceu, 0x1c631964u, 0xc86b127du, 0x6f91dc65u, 0x7c59a7fbu, 0x453e9111u, 0xd87481f5u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 86 /* milli weight units */\n}\n,[NUM_OUTPUTS] =\n{ .tag = JET\n, .jet = simplicity_num_outputs\n, .cmr = {{0x267d4165u, 0x4493903eu, 0x0257751au, 0xe6d42d9cu, 0xe1bb9224u, 0x6d0ef767u, 0xc337b0c3u, 0x2b1972fdu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 79 /* milli weight units */\n}\n,[ONE_16] =\n{ .tag = JET\n, .jet = simplicity_one_16\n, .cmr = {{0x3f9f8dd1u, 0x4c46ee02u, 0x47155792u, 0x9ac2bb6cu, 0x1aca0052u, 0x1d8afaf0u, 0xdcd9f2cau, 0x7f31e604u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w16\n, .cost = 60 /* milli weight units */\n}\n,[ONE_32] =\n{ .tag = JET\n, .jet = simplicity_one_32\n, .cmr = {{0x478dc39du, 0xc3995e2eu, 0xdb7ec674u, 0x656cae79u, 0x8f52e572u, 0x926174a6u, 0x68cc97bcu, 0xa448d1ccu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 59 /* milli weight units */\n}\n,[ONE_64] =\n{ .tag = JET\n, .jet = simplicity_one_64\n, .cmr = {{0xa392cefcu, 0x0da53c65u, 0xaee612f5u, 0xc6816ca8u, 0x92fc156du, 0x43714876u, 0xb3a00568u, 0xe1ba3ebau}}\n, .sourceIx = ty_u\n, .targetIx = ty_w64\n, .cost = 59 /* milli weight units */\n}\n,[ONE_8] =\n{ .tag = JET\n, .jet = simplicity_one_8\n, .cmr = {{0xff594e22u, 0xbfd75813u, 0xc056e0a2u, 0x34ed12fau, 0x8287d1d5u, 0x316f2390u, 0x2bf079dbu, 0xcc4f4ea8u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 62 /* milli weight units */\n}\n,[OR_1] =\n{ .tag = JET\n, .jet = simplicity_or_1\n, .cmr = {{0x9bf59174u, 0x410a809du, 0x3da2b58cu, 0x7e0d05c5u, 0x5cec38bdu, 0xaa5fcac3u, 0x82a31177u, 0x0ee0eb38u}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 77 /* milli weight units */\n}\n,[OR_16] =\n{ .tag = JET\n, .jet = simplicity_or_16\n, .cmr = {{0xdd9a3193u, 0xd619d959u, 0xfa0b6d8bu, 0x47af7854u, 0xf7e0467bu, 0xa35901ceu, 0x43d800fcu, 0xaf730ff9u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 94 /* milli weight units */\n}\n,[OR_32] =\n{ .tag = JET\n, .jet = simplicity_or_32\n, .cmr = {{0x9a019f07u, 0xdf4996b3u, 0x3e647f4du, 0xe7e56c1du, 0x8f03269cu, 0xbfa3c758u, 0x2cfe808eu, 0x909870b7u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 105 /* milli weight units */\n}\n,[OR_64] =\n{ .tag = JET\n, .jet = simplicity_or_64\n, .cmr = {{0xc24f3580u, 0x05f80377u, 0x2b1c3e43u, 0x9cf1b709u, 0xbd9f4d42u, 0x52759130u, 0x3a36f6b1u, 0xc3cf29ccu}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 99 /* milli weight units */\n}\n,[OR_8] =\n{ .tag = JET\n, .jet = simplicity_or_8\n, .cmr = {{0x84b53689u, 0xf21d4e69u, 0x7d0fe898u, 0x8ce736abu, 0x72c9c86fu, 0x847589dau, 0xa9ae6a78u, 0x4630e620u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 93 /* milli weight units */\n}\n,[OUTPOINT_HASH] =\n{ .tag = JET\n, .jet = simplicity_outpoint_hash\n, .cmr = {{0x8d2a5aa0u, 0x6e98c41bu, 0x30fd0703u, 0xe5e54c86u, 0xb42bee33u, 0xbc89cb60u, 0x93cdb094u, 0x05a72d9du}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw256pw256w32\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 319 /* milli weight units */\n}\n,[OUTPUT_AMOUNT] =\n{ .tag = JET\n, .jet = simplicity_output_amount\n, .cmr = {{0x55e41399u, 0x2169408eu, 0x338e11a8u, 0xd7be602bu, 0x3ec9511eu, 0x7eb691dfu, 0x32d9797au, 0x6395a1a1u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mpspbw256w256spbw256w64\n, .cost = 298 /* milli weight units */\n}\n,[OUTPUT_AMOUNTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_output_amounts_hash\n, .cmr = {{0x40236963u, 0xe10ef8adu, 0x9cb6e0a7u, 0xc79ac866u, 0x0d2fc1a5u, 0x7feff885u, 0x15a78527u, 0x91b186cbu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 140 /* milli weight units */\n}\n,[OUTPUT_ASSET] =\n{ .tag = JET\n, .jet = simplicity_output_asset\n, .cmr = {{0x575a49bau, 0xb21ffee8u, 0xe5bd00edu, 0xce324061u, 0x04a05ddeu, 0xf5fc31a1u, 0xa645b129u, 0x548c8f3eu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mspbw256w256\n, .cost = 170 /* milli weight units */\n}\n,[OUTPUT_HASH] =\n{ .tag = JET\n, .jet = simplicity_output_hash\n, .cmr = {{0x7cb17f8fu, 0xc7a1ae4eu, 0xfce30a14u, 0x54e52f85u, 0x85213cd0u, 0xf367a127u, 0xac27bb97u, 0x66ea9eeeu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 2849 /* milli weight units */\n}\n,[OUTPUT_IS_FEE] =\n{ .tag = JET\n, .jet = simplicity_output_is_fee\n, .cmr = {{0x9fbbe8aeu, 0xbdedd577u, 0xae466280u, 0xa99b67b7u, 0x343287efu, 0x34069253u, 0x4a009803u, 0x15e51772u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mb\n, .cost = 92 /* milli weight units */\n}\n,[OUTPUT_NONCE] =\n{ .tag = JET\n, .jet = simplicity_output_nonce\n, .cmr = {{0x7175fd99u, 0xa2baa1c3u, 0xafaaf7fau, 0xbdaa67c2u, 0xc827483bu, 0xc8a0b976u, 0x50cb7942u, 0xea295a18u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmspbw256w256\n, .cost = 196 /* milli weight units */\n}\n,[OUTPUT_NONCES_HASH] =\n{ .tag = JET\n, .jet = simplicity_output_nonces_hash\n, .cmr = {{0x50f18766u, 0xde9828dbu, 0x0a8c41d7u, 0xbeb840f7u, 0x7bc6e121u, 0xff123d54u, 0x96f1ea0du, 0x6a78b83au}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 151 /* milli weight units */\n}\n,[OUTPUT_NULL_DATUM] =\n{ .tag = JET\n, .jet = simplicity_output_null_datum\n, .cmr = {{0x38a5a7e8u, 0x61b3b36cu, 0xce683a77u, 0x2db0c862u, 0x8b7fd3b4u, 0xcf8e7bceu, 0x70758fa6u, 0xf6f147bfu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_mmspw2w256sbw4\n, .cost = 87 /* milli weight units */\n}\n,[OUTPUT_RANGE_PROOF] =\n{ .tag = JET\n, .jet = simplicity_output_range_proof\n, .cmr = {{0x6ff9ef3du, 0xac504310u, 0xdfbc6056u, 0x1d2addebu, 0x44932f77u, 0x7e7f13adu, 0xf0774eb6u, 0xb14df966u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 154 /* milli weight units */\n}\n,[OUTPUT_RANGE_PROOFS_HASH] =\n{ .tag = JET\n, .jet = simplicity_output_range_proofs_hash\n, .cmr = {{0x0d7d8ac9u, 0x7af9539au, 0xbba64d81u, 0x04d17e97u, 0x0854677cu, 0x27461d25u, 0xdf21a7f6u, 0xb662081eu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 136 /* milli weight units */\n}\n,[OUTPUT_SCRIPT_HASH] =\n{ .tag = JET\n, .jet = simplicity_output_script_hash\n, .cmr = {{0x2f513926u, 0x6f143a33u, 0xe1668e59u, 0x4f43e8d1u, 0x394407e3u, 0xa9b8b802u, 0xb39a5e1eu, 0xdc54e851u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 151 /* milli weight units */\n}\n,[OUTPUT_SCRIPTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_output_scripts_hash\n, .cmr = {{0x21333ac9u, 0x58a4ebfdu, 0x5eab7956u, 0xdb73ed03u, 0x269426afu, 0x8d7d2498u, 0xde57eef6u, 0x8704fb0au}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 142 /* milli weight units */\n}\n,[OUTPUT_SURJECTION_PROOF] =\n{ .tag = JET\n, .jet = simplicity_output_surjection_proof\n, .cmr = {{0x09166008u, 0x1d52c33fu, 0x17a956bdu, 0xdac62aa2u, 0xd2ed928fu, 0x8cffef4cu, 0xf8dbb697u, 0xb153aa65u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mw256\n, .cost = 151 /* milli weight units */\n}\n,[OUTPUT_SURJECTION_PROOFS_HASH] =\n{ .tag = JET\n, .jet = simplicity_output_surjection_proofs_hash\n, .cmr = {{0x3630b520u, 0x8302641bu, 0xf19c4bf5u, 0xca047ac3u, 0xeb7af54du, 0x5d3f5bf8u, 0xf1d41312u, 0x499d6384u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 138 /* milli weight units */\n}\n,[OUTPUTS_HASH] =\n{ .tag = JET\n, .jet = simplicity_outputs_hash\n, .cmr = {{0x95b3511au, 0xea00d043u, 0xa4e028b2u, 0x5a171c74u, 0x2ec2ff7au, 0xd3a7df2fu, 0x1f6edad0u, 0x8bad2b69u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 135 /* milli weight units */\n}\n,[PARSE_LOCK] =\n{ .tag = JET\n, .jet = simplicity_parse_lock\n, .cmr = {{0x3d3836fdu, 0x3085c1fbu, 0xac6cd5fau, 0x0dbf4a3fu, 0xb2554593u, 0x17a266d6u, 0xd6f7382bu, 0xb05f07adu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_sw32w32\n, .cost = 97 /* milli weight units */\n}\n,[PARSE_SEQUENCE] =\n{ .tag = JET\n, .jet = simplicity_parse_sequence\n, .cmr = {{0x74f35c01u, 0x9ef514b7u, 0x0ab008bfu, 0x2a126de7u, 0xe00f6e3cu, 0xcd285d51u, 0xdbd3ac71u, 0xbea9c88du}}\n, .sourceIx = ty_w32\n, .targetIx = ty_msw16w16\n, .cost = 116 /* milli weight units */\n}\n,[POINT_VERIFY_1] =\n{ .tag = JET\n, .jet = simplicity_point_verify_1\n, .cmr = {{0x90a3d669u, 0xb00da795u, 0xefb2bed8u, 0xc370c9e3u, 0xea0f19c4u, 0x1c7cf23eu, 0x492e3317u, 0x1a47f5ffu}}\n, .sourceIx = ty_pppw256pbw256w256pbw256\n, .targetIx = ty_u\n, .cost = 41494 /* milli weight units */\n}\n,[REISSUANCE_BLINDING] =\n{ .tag = JET\n, .jet = simplicity_reissuance_blinding\n, .cmr = {{0xeb6e581eu, 0x20ba0babu, 0xe904c8dau, 0x71a81f7cu, 0x88b9cf4fu, 0x42d78b54u, 0x0c1b398cu, 0x3f105cccu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 91 /* milli weight units */\n}\n,[REISSUANCE_ENTROPY] =\n{ .tag = JET\n, .jet = simplicity_reissuance_entropy\n, .cmr = {{0xd1d22c49u, 0x7f129c6du, 0x6fdbe491u, 0x364a3513u, 0xbcd66e15u, 0x618cbbe2u, 0xe50739bdu, 0x834db7f8u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_mmw256\n, .cost = 93 /* milli weight units */\n}\n,[RIGHT_EXTEND_16_32] =\n{ .tag = JET\n, .jet = simplicity_right_extend_16_32\n, .cmr = {{0x780716d3u, 0xe8291a51u, 0xe45ada50u, 0x558efe41u, 0x1c475c08u, 0x5eec5a28u, 0xad9791c3u, 0x12fee2bcu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 74 /* milli weight units */\n}\n,[RIGHT_EXTEND_16_64] =\n{ .tag = JET\n, .jet = simplicity_right_extend_16_64\n, .cmr = {{0xc770497eu, 0x452308ebu, 0xf52e51b0u, 0x585e9151u, 0xe0ffc350u, 0x86ab772du, 0x7241532au, 0x1be15e07u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 82 /* milli weight units */\n}\n,[RIGHT_EXTEND_32_64] =\n{ .tag = JET\n, .jet = simplicity_right_extend_32_64\n, .cmr = {{0x42b43adcu, 0x74b5266cu, 0x91d73df4u, 0x91dcae59u, 0x738804ebu, 0x440b23dau, 0x32753048u, 0x7486b7e8u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 94 /* milli weight units */\n}\n,[RIGHT_EXTEND_8_16] =\n{ .tag = JET\n, .jet = simplicity_right_extend_8_16\n, .cmr = {{0xbcb2683au, 0x8cb8b8c2u, 0x35faa896u, 0xa9c069e1u, 0xb55bb055u, 0x8e739e70u, 0xe2891421u, 0x1e3275c8u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 76 /* milli weight units */\n}\n,[RIGHT_EXTEND_8_32] =\n{ .tag = JET\n, .jet = simplicity_right_extend_8_32\n, .cmr = {{0x6ddb5548u, 0xfd583cd2u, 0xd3586e6bu, 0x8bf99524u, 0x6b61934fu, 0x49764467u, 0x77dd5740u, 0xb319e462u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 106 /* milli weight units */\n}\n,[RIGHT_EXTEND_8_64] =\n{ .tag = JET\n, .jet = simplicity_right_extend_8_64\n, .cmr = {{0xda4f9c21u, 0x45512682u, 0x0758a2e4u, 0xb53fceb4u, 0x523e6e7au, 0x2923a1a1u, 0x61fc3789u, 0x2ac8da2au}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 124 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_16_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_16_32\n, .cmr = {{0x3e4e5e9eu, 0x71e137a2u, 0x686343e0u, 0x5ac56316u, 0xacfc5899u, 0x1cb38db1u, 0xb3234413u, 0xf730a142u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 70 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_16_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_16_64\n, .cmr = {{0xde09df9du, 0x43ddad2du, 0x69120498u, 0x6cf0819du, 0x6b8045bcu, 0xa414d80au, 0xf2162892u, 0xa9257eadu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 88 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_16\n, .cmr = {{0xff1297d8u, 0x78e26e19u, 0x59bcc7e8u, 0xaef97ac0u, 0xb65adc39u, 0x923ec650u, 0x5e50f983u, 0x05733b6cu}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 143 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_32\n, .cmr = {{0x283f8afbu, 0x41382d2bu, 0xe18f8a77u, 0xc314ba17u, 0x76cb80c8u, 0xec36ca12u, 0xaa67b32bu, 0xb64ed843u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 223 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_64\n, .cmr = {{0xa3423528u, 0x60a3350du, 0x79c3e9fcu, 0x7a4ab378u, 0x9b8b0297u, 0x856fd169u, 0xca4d7de2u, 0x5f7d7cc4u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 476 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_1_8] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_1_8\n, .cmr = {{0x7103c0feu, 0x00f522a2u, 0x216c4a6bu, 0xe5f7e0ebu, 0x4d703ca7u, 0x8f9c598fu, 0x6b3dfde4u, 0x37d80c84u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 107 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_32_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_32_64\n, .cmr = {{0x5dc9107du, 0x4534958cu, 0xe4422767u, 0x563a031au, 0x380f60d3u, 0x837148abu, 0x3c8cc9c4u, 0xc7d996a2u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 94 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_8_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_8_16\n, .cmr = {{0xc0e2fd46u, 0xf7883b12u, 0x85a6f1a1u, 0xdb96d93cu, 0x2548040fu, 0xcd3f5c23u, 0xfbb20b5eu, 0x83037c96u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 89 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_8_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_8_32\n, .cmr = {{0x291e6277u, 0x08520c2cu, 0xa6aece32u, 0xa877b778u, 0x49c4a7a2u, 0x13cb89e1u, 0xbda7c5c5u, 0xfe755f73u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 110 /* milli weight units */\n}\n,[RIGHT_PAD_HIGH_8_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_high_8_64\n, .cmr = {{0x6b6fa237u, 0x2ed25e4au, 0x34d4ae17u, 0x2342adbbu, 0x259be898u, 0x7600db19u, 0x2ecb8da4u, 0x34b9d88fu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 107 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_16_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_16_32\n, .cmr = {{0x7731d560u, 0xd37592d1u, 0xa31f7362u, 0x967ab2e4u, 0x7592aca6u, 0xe92ab858u, 0x823792dau, 0xe5d2db52u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w32\n, .cost = 71 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_16_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_16_64\n, .cmr = {{0x0fe1c0dbu, 0x9d4a2d63u, 0xe2ba4a33u, 0x117aadbau, 0x64514a2bu, 0x87a7a4e7u, 0x93faacfeu, 0x6b363447u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w64\n, .cost = 96 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_16\n, .cmr = {{0x7914c8f2u, 0x2247c2c3u, 0x4b9c84e9u, 0x2d1444aeu, 0xc2e17a0eu, 0xf586bab2u, 0x788ee6efu, 0x68840d98u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w16\n, .cost = 81 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_32\n, .cmr = {{0x31b6ce26u, 0xe559f76cu, 0xf366f480u, 0x6985ecc2u, 0x99550f15u, 0xd4c3a672u, 0x9e29d70eu, 0x39895652u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w32\n, .cost = 75 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_64\n, .cmr = {{0xc5524ae6u, 0x548acd63u, 0x082d9489u, 0x3e18f9edu, 0xbb9231e7u, 0x6bb4e11bu, 0xbff6a7bdu, 0x16f4b029u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w64\n, .cost = 73 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_1_8] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_1_8\n, .cmr = {{0x59d72270u, 0xef0e8f77u, 0x0c8d11f3u, 0x1773f9b6u, 0xe90a4aecu, 0xeb5bfb3du, 0xfe968c4eu, 0x9dac5fe8u}}\n, .sourceIx = ty_b\n, .targetIx = ty_w8\n, .cost = 68 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_32_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_32_64\n, .cmr = {{0xd4227d06u, 0x6f18b911u, 0xd6f5d9bfu, 0xb9d9f46eu, 0x9aeadbbeu, 0xfa34d474u, 0x432a1e78u, 0x9e4886ffu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w64\n, .cost = 80 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_8_16] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_8_16\n, .cmr = {{0xaba47a53u, 0x6e1227e1u, 0x22baacf1u, 0x9cfd2823u, 0xb9b78d79u, 0xcc06d34cu, 0x348b14a1u, 0xa15abd64u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w16\n, .cost = 75 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_8_32] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_8_32\n, .cmr = {{0x8f80a6c2u, 0x74716b67u, 0x22041134u, 0xea1c68aau, 0xbf021329u, 0x8f4e18f8u, 0xf492dc53u, 0x808a3174u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w32\n, .cost = 77 /* milli weight units */\n}\n,[RIGHT_PAD_LOW_8_64] =\n{ .tag = JET\n, .jet = simplicity_right_pad_low_8_64\n, .cmr = {{0xd69c85e7u, 0xb2d7e949u, 0x436cb129u, 0x5e4aa705u, 0x57d75e7cu, 0xbdec02ccu, 0xa85fbfb1u, 0x3308b210u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w64\n, .cost = 82 /* milli weight units */\n}\n,[RIGHT_ROTATE_16] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_16\n, .cmr = {{0xe5107082u, 0x47f91b4fu, 0x0a8a22a4u, 0x46b8137du, 0x0d42bee7u, 0x4c8c1eddu, 0x6d446edbu, 0x2013b598u}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 99 /* milli weight units */\n}\n,[RIGHT_ROTATE_32] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_32\n, .cmr = {{0x98915731u, 0x412922dbu, 0xc516a737u, 0x3afc4de6u, 0x4809f83bu, 0x264bcfcau, 0x6ae74883u, 0xdbe104d6u}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 92 /* milli weight units */\n}\n,[RIGHT_ROTATE_64] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_64\n, .cmr = {{0x9e2fb98au, 0xdf102933u, 0x9dbe45a2u, 0x2a54a390u, 0xca0986edu, 0xcea32eacu, 0xb82ebcc8u, 0x94a2711au}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 93 /* milli weight units */\n}\n,[RIGHT_ROTATE_8] =\n{ .tag = JET\n, .jet = simplicity_right_rotate_8\n, .cmr = {{0x00c7c26du, 0x95a50b5au, 0xf9349ffeu, 0x47e1d43fu, 0x3d761f17u, 0xa7453c98u, 0x4791e87du, 0xc6a311c8u}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 75 /* milli weight units */\n}\n,[RIGHT_SHIFT_16] =\n{ .tag = JET\n, .jet = simplicity_right_shift_16\n, .cmr = {{0x8b5e0febu, 0x958130f0u, 0x50833215u, 0x9e54c2dfu, 0x98af8352u, 0x1acab308u, 0x4fd4f7c3u, 0xa2ccea77u}}\n, .sourceIx = ty_pw4w16\n, .targetIx = ty_w16\n, .cost = 84 /* milli weight units */\n}\n,[RIGHT_SHIFT_32] =\n{ .tag = JET\n, .jet = simplicity_right_shift_32\n, .cmr = {{0x4b1f2580u, 0xe0850d38u, 0xe2a11573u, 0x38052f1cu, 0x379f9d81u, 0x57f62d33u, 0x890af24fu, 0xd9a7f73eu}}\n, .sourceIx = ty_pw8w32\n, .targetIx = ty_w32\n, .cost = 88 /* milli weight units */\n}\n,[RIGHT_SHIFT_64] =\n{ .tag = JET\n, .jet = simplicity_right_shift_64\n, .cmr = {{0x91a297d7u, 0xb58a393bu, 0xf5902594u, 0x7747c86du, 0xd487659cu, 0xc56fb5a6u, 0xf6439955u, 0x129a9563u}}\n, .sourceIx = ty_pw8w64\n, .targetIx = ty_w64\n, .cost = 91 /* milli weight units */\n}\n,[RIGHT_SHIFT_8] =\n{ .tag = JET\n, .jet = simplicity_right_shift_8\n, .cmr = {{0xa4c3546fu, 0xf27e56d6u, 0x4e918ab2u, 0xfa6d00fcu, 0x2704585bu, 0x25bde004u, 0x9d6d8f48u, 0xd8cf1cd0u}}\n, .sourceIx = ty_pw4w8\n, .targetIx = ty_w8\n, .cost = 88 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_16] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_16\n, .cmr = {{0xfd977030u, 0xe3a25a32u, 0xe775b8d5u, 0xe87174a7u, 0xa9e8731eu, 0xc36cf132u, 0x6420ad91u, 0x502e6e98u}}\n, .sourceIx = ty_pbpw4w16\n, .targetIx = ty_w16\n, .cost = 105 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_32] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_32\n, .cmr = {{0x2829ba02u, 0x1f54077au, 0xffb66ac6u, 0xb6dfd3feu, 0xf38bc414u, 0x91845a41u, 0xce9dd370u, 0x586c2d04u}}\n, .sourceIx = ty_pbpw8w32\n, .targetIx = ty_w32\n, .cost = 92 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_64] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_64\n, .cmr = {{0x006fa3c5u, 0x45797547u, 0x86fc64dcu, 0x32e19a22u, 0x5cc152c9u, 0x4deeb3c6u, 0xab2967ddu, 0xbfc64653u}}\n, .sourceIx = ty_pbpw8w64\n, .targetIx = ty_w64\n, .cost = 97 /* milli weight units */\n}\n,[RIGHT_SHIFT_WITH_8] =\n{ .tag = JET\n, .jet = simplicity_right_shift_with_8\n, .cmr = {{0xfcb5be65u, 0x07f0ca44u, 0xbe2be1ccu, 0x3c3cfe39u, 0x94404b80u, 0x83bd7602u, 0xb2102cb1u, 0xfcfa2c61u}}\n, .sourceIx = ty_pbpw4w8\n, .targetIx = ty_w8\n, .cost = 103 /* milli weight units */\n}\n,[RIGHTMOST_16_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_1\n, .cmr = {{0x3f3c4346u, 0x87174226u, 0x5e87f001u, 0xb46de7d1u, 0x98751b34u, 0xfaa18018u, 0xde60c846u, 0x8d9b98a4u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 70 /* milli weight units */\n}\n,[RIGHTMOST_16_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_2\n, .cmr = {{0x78f17147u, 0x6a3b0ed1u, 0xe3a5455au, 0x5fbbcc90u, 0x1981b323u, 0x0fea1264u, 0x204dacd0u, 0x81f94080u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w2\n, .cost = 82 /* milli weight units */\n}\n,[RIGHTMOST_16_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_4\n, .cmr = {{0x75a1dfb6u, 0xae2c066bu, 0x2d0e2093u, 0x048adbc5u, 0x0d465065u, 0x6fb2d357u, 0x8b57d9deu, 0x4c61c8b5u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w4\n, .cost = 76 /* milli weight units */\n}\n,[RIGHTMOST_16_8] =\n{ .tag = JET\n, .jet = simplicity_rightmost_16_8\n, .cmr = {{0xee769c1cu, 0xc8a3fdd1u, 0x838fc9f0u, 0x490ce703u, 0x93fd91bau, 0x3cbd4abdu, 0x08649fb9u, 0xc44311bdu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 69 /* milli weight units */\n}\n,[RIGHTMOST_32_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_1\n, .cmr = {{0xcb0db569u, 0xa36186a2u, 0x5605a9d2u, 0xe4e10a20u, 0xc111d50cu, 0x34f17246u, 0x520bc454u, 0xd8682836u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 90 /* milli weight units */\n}\n,[RIGHTMOST_32_16] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_16\n, .cmr = {{0x06faa3beu, 0x678cd6fdu, 0xd7f3112eu, 0xbf2c4862u, 0x7afa7875u, 0xf7068d26u, 0xa9cc045bu, 0x2c8f11bcu}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 64 /* milli weight units */\n}\n,[RIGHTMOST_32_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_2\n, .cmr = {{0x00b8815au, 0xd7423dd5u, 0x8cb98be8u, 0x2cad2667u, 0x5c3bf54au, 0x0bedbadeu, 0x3464b4feu, 0x5a4e8ce6u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w2\n, .cost = 74 /* milli weight units */\n}\n,[RIGHTMOST_32_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_4\n, .cmr = {{0x3dfa7a20u, 0x198e42d6u, 0xa7948c8eu, 0xd8e0d47eu, 0xc7c0007bu, 0x3d6866cau, 0x15e3da04u, 0x5b8563c7u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w4\n, .cost = 92 /* milli weight units */\n}\n,[RIGHTMOST_32_8] =\n{ .tag = JET\n, .jet = simplicity_rightmost_32_8\n, .cmr = {{0x17b58d6eu, 0x304b1c7eu, 0x5dbf0c4du, 0xf6fcc803u, 0xc008944cu, 0x7995555bu, 0x94e1289bu, 0x2549be99u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w8\n, .cost = 78 /* milli weight units */\n}\n,[RIGHTMOST_64_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_1\n, .cmr = {{0x5e8fb49fu, 0xace03448u, 0x1dc65361u, 0x8e2a8b65u, 0xeaf0993fu, 0x28844cc9u, 0xb130caccu, 0xe45e82deu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 77 /* milli weight units */\n}\n,[RIGHTMOST_64_16] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_16\n, .cmr = {{0xc64ca996u, 0x5536f237u, 0xbc4d166eu, 0x4aeca56eu, 0xac2662e6u, 0x3accb98bu, 0x6e542560u, 0xf9e538dau}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w16\n, .cost = 86 /* milli weight units */\n}\n,[RIGHTMOST_64_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_2\n, .cmr = {{0x83d2da6fu, 0x3420d779u, 0xbcb8f60du, 0x0b696eedu, 0x74c31db0u, 0x8addbebdu, 0x1235a5dfu, 0x8f59c42fu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w2\n, .cost = 74 /* milli weight units */\n}\n,[RIGHTMOST_64_32] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_32\n, .cmr = {{0x7d2dff6eu, 0x3dd504bbu, 0x0e5703a0u, 0x33586d27u, 0xd96644c0u, 0x48ab34a4u, 0x5bf53512u, 0x9d501167u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 76 /* milli weight units */\n}\n,[RIGHTMOST_64_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_4\n, .cmr = {{0x841bbd65u, 0x2742ddd3u, 0xadeae43cu, 0xfed6329fu, 0x2fd62e6fu, 0xecd0fd58u, 0xe3c3fb8bu, 0x5a0e4dd5u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w4\n, .cost = 70 /* milli weight units */\n}\n,[RIGHTMOST_64_8] =\n{ .tag = JET\n, .jet = simplicity_rightmost_64_8\n, .cmr = {{0xa0a61c76u, 0x58a18623u, 0xbf1d011au, 0x9792d518u, 0xfbd02414u, 0x2a904400u, 0xecdeea92u, 0x457a0a81u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w8\n, .cost = 69 /* milli weight units */\n}\n,[RIGHTMOST_8_1] =\n{ .tag = JET\n, .jet = simplicity_rightmost_8_1\n, .cmr = {{0x999b686eu, 0x60b3d1ecu, 0xd6c6d77fu, 0xbca82cb2u, 0xabbd4182u, 0xc8211267u, 0x475fa0c1u, 0x901d89f9u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 79 /* milli weight units */\n}\n,[RIGHTMOST_8_2] =\n{ .tag = JET\n, .jet = simplicity_rightmost_8_2\n, .cmr = {{0x5307ffbfu, 0x516cd0eeu, 0xf3ff4387u, 0xb9052c14u, 0x4a4dfa23u, 0x29237c6bu, 0x274992b2u, 0xc8047b60u}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w2\n, .cost = 98 /* milli weight units */\n}\n,[RIGHTMOST_8_4] =\n{ .tag = JET\n, .jet = simplicity_rightmost_8_4\n, .cmr = {{0x7f52e645u, 0xbbbbd792u, 0x69c43ef0u, 0x2db982f8u, 0xc63633c1u, 0x79e40691u, 0x73933604u, 0xcc635bcau}}\n, .sourceIx = ty_w8\n, .targetIx = ty_w4\n, .cost = 98 /* milli weight units */\n}\n,[SCALAR_ADD] =\n{ .tag = JET\n, .jet = simplicity_scalar_add\n, .cmr = {{0x34baa40bu, 0x2e0aa8cbu, 0x7e97c73eu, 0x3ed3b365u, 0xa15b7c3fu, 0x7661fb19u, 0x715ec605u, 0xc1149d11u}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 739 /* milli weight units */\n}\n,[SCALAR_INVERT] =\n{ .tag = JET\n, .jet = simplicity_scalar_invert\n, .cmr = {{0x6231bdabu, 0x73ca34eau, 0x7e837daau, 0xd692ede5u, 0xbabfae09u, 0xb5756d2au, 0xb36c5a36u, 0x475a6589u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 3193 /* milli weight units */\n}\n,[SCALAR_IS_ZERO] =\n{ .tag = JET\n, .jet = simplicity_scalar_is_zero\n, .cmr = {{0xf75eda06u, 0xce6af09fu, 0xae37db4eu, 0x6225e6a8u, 0xac86a236u, 0x37627d62u, 0x6409190fu, 0xf3b39d90u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_b\n, .cost = 271 /* milli weight units */\n}\n,[SCALAR_MULTIPLY] =\n{ .tag = JET\n, .jet = simplicity_scalar_multiply\n, .cmr = {{0xb2bcc390u, 0xd637b9e0u, 0x3fbfc42fu, 0xff71d22eu, 0x7200f693u, 0x29cef716u, 0x9e68a8c7u, 0x1a7f0a4bu}}\n, .sourceIx = ty_w512\n, .targetIx = ty_w256\n, .cost = 774 /* milli weight units */\n}\n,[SCALAR_MULTIPLY_LAMBDA] =\n{ .tag = JET\n, .jet = simplicity_scalar_multiply_lambda\n, .cmr = {{0x89d5855cu, 0x5f85c003u, 0x5d27b0c0u, 0x9e20330bu, 0x001c684bu, 0x5986abceu, 0xd8360cd3u, 0x9b08c4e1u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 557 /* milli weight units */\n}\n,[SCALAR_NEGATE] =\n{ .tag = JET\n, .jet = simplicity_scalar_negate\n, .cmr = {{0x0705acdfu, 0xb8664000u, 0x0e3d3badu, 0x509a14a7u, 0x8c171f61u, 0xedc08423u, 0xb042b947u, 0x48439cf8u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 490 /* milli weight units */\n}\n,[SCALAR_NORMALIZE] =\n{ .tag = JET\n, .jet = simplicity_scalar_normalize\n, .cmr = {{0xa061e19du, 0x75c325a2u, 0x6d565aadu, 0x7e3f9ae2u, 0x6b222f25u, 0xe802174fu, 0x6bacd511u, 0x277aeaa5u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 472 /* milli weight units */\n}\n,[SCALAR_SQUARE] =\n{ .tag = JET\n, .jet = simplicity_scalar_square\n, .cmr = {{0x49f734a2u, 0x659ca0abu, 0x7c9e67fcu, 0xfc3c0d72u, 0xaf0f917cu, 0x9edcb992u, 0x9d177a0fu, 0x0de89d59u}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w256\n, .cost = 575 /* milli weight units */\n}\n,[SCALE] =\n{ .tag = JET\n, .jet = simplicity_scale\n, .cmr = {{0xc04543dcu, 0x85ef1137u, 0x4a930f4au, 0x948eb735u, 0xa6500a1au, 0x7158d573u, 0x123f0721u, 0x7175f318u}}\n, .sourceIx = ty_pw256pw512w256\n, .targetIx = ty_pw512w256\n, .cost = 72675 /* milli weight units */\n}\n,[SCRIPT_CMR] =\n{ .tag = JET\n, .jet = simplicity_script_cmr\n, .cmr = {{0xec15f59cu, 0x524d9414u, 0x69811954u, 0x654f6358u, 0x30ecd7deu, 0x517662b2u, 0x5ca4e8d0u, 0x5c2cce89u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 136 /* milli weight units */\n}\n,[SHA_256_BLOCK] =\n{ .tag = JET\n, .jet = simplicity_sha_256_block\n, .cmr = {{0x0c97a008u, 0xade87bb1u, 0xe0ac06b7u, 0xd0313023u, 0x362858efu, 0x90ec14ecu, 0x9cb95f0du, 0xa964e008u}}\n, .sourceIx = ty_pw256w512\n, .targetIx = ty_w256\n, .cost = 771 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_1] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_1\n, .cmr = {{0x37066c67u, 0xad95249du, 0x4ba6e181u, 0x44ca0a41u, 0x5d9c832au, 0xa6b60628u, 0xe97c967eu, 0xb1793383u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w8\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 642 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_128] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_128\n, .cmr = {{0x2dcf484cu, 0x257f6794u, 0x0ca375bau, 0x98e83ce0u, 0xe2a71e16u, 0xda5051d1u, 0xbb19fb5fu, 0x346f154fu}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w1Ki\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1779 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_16] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_16\n, .cmr = {{0x82992520u, 0x40cb39e3u, 0x26a248d5u, 0xc788f951u, 0x6d15a2ffu, 0x4145bb64u, 0xad6577aeu, 0x1a3ef727u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w128\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 747 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_2] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_2\n, .cmr = {{0x8bae3e7eu, 0x1ed4dcbau, 0x6e645aa1u, 0x4341bbaeu, 0x0dbb3ae2u, 0x1bb63dc0u, 0x30ca0e44u, 0x7a857ec2u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w16\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 661 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_256] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_256\n, .cmr = {{0x44b717e1u, 0x970999b6u, 0x6b693d8cu, 0x9d1d3b06u, 0x05c2b7a6u, 0x213e6ba5u, 0x6c69af8du, 0x7fae1686u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w2Ki\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 2912 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_32] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_32\n, .cmr = {{0x39239a43u, 0xa84bac6fu, 0x2969bfa9u, 0x5bfe6a04u, 0xfcba8092u, 0x895939f1u, 0x2a1ce0e2u, 0x6321ec10u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w256\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 896 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_4] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_4\n, .cmr = {{0xd7d74561u, 0x4b37a7e0u, 0x7dce22f6u, 0x4e7b1edfu, 0xe23beda8u, 0x51f1e76fu, 0x1a6b028fu, 0xcc5e9fc0u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w32\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 645 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_512] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_512\n, .cmr = {{0xbe368032u, 0xd86ebcf2u, 0x13ca45bau, 0x6ecab54cu, 0xb1f2661du, 0x403da059u, 0x06300bc5u, 0x1137aab5u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w4Ki\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 5299 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_64] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_64\n, .cmr = {{0xfdc434ceu, 0x83dbdce0u, 0x782aa36du, 0x418def7fu, 0x99af8293u, 0xafb29e83u, 0x9fe4948fu, 0x6234f77fu}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w512\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1187 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_8] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_8\n, .cmr = {{0x9c988330u, 0x799a680bu, 0xfe73d7cau, 0xa3689fe4u, 0xe483da4eu, 0xe6d81858u, 0x7927c7f4u, 0x3392def7u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256w64\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 674 /* milli weight units */\n}\n,[SHA_256_CTX_8_ADD_BUFFER_511] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_add_buffer_511\n, .cmr = {{0xc027e106u, 0x2996ae94u, 0xac3971a2u, 0xc4fae549u, 0x97ebf09bu, 0x9f7da575u, 0x639be617u, 0x167f02e3u}}\n, .sourceIx = ty_pppmw256pmw128pmw64pmw32pmw16mw8pw64w256pmw2Kipmw1Kipmw512pmw256pmw128pmw64pmw32pmw16mw8\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 5060 /* milli weight units */\n}\n,[SHA_256_CTX_8_FINALIZE] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_finalize\n, .cmr = {{0xcbba1f1du, 0x8a97ab4du, 0x1fa9686eu, 0x7aeef066u, 0xfb5bf290u, 0x716eae10u, 0xe70b6199u, 0x96c59594u}}\n, .sourceIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .targetIx = ty_w256\n, .cost = 835 /* milli weight units */\n}\n,[SHA_256_CTX_8_INIT] =\n{ .tag = JET\n, .jet = simplicity_sha_256_ctx_8_init\n, .cmr = {{0xa53c7679u, 0xe3ae0347u, 0xd4d79126u, 0xa7c7e49au, 0xc0dec90cu, 0xdf935799u, 0xcddb58dau, 0x8f4496e4u}}\n, .sourceIx = ty_u\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 118 /* milli weight units */\n}\n,[SHA_256_IV] =\n{ .tag = JET\n, .jet = simplicity_sha_256_iv\n, .cmr = {{0x7389f002u, 0x5305dce8u, 0x28d4a1feu, 0x83743046u, 0xa367c923u, 0xf18abf36u, 0x5e391e5bu, 0x04af1a47u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 93 /* milli weight units */\n}\n,[SIG_ALL_HASH] =\n{ .tag = JET\n, .jet = simplicity_sig_all_hash\n, .cmr = {{0x6ac53d3fu, 0x93b8caf3u, 0xea8534aeu, 0x612abd32u, 0x325d2b0fu, 0xec17de36u, 0xaf0f71aau, 0x978f7cdeu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 133 /* milli weight units */\n}\n,[SOME_1] =\n{ .tag = JET\n, .jet = simplicity_some_1\n, .cmr = {{0xfbdad6b0u, 0x22a0c78fu, 0xf35604aau, 0xfacd27ccu, 0x10f51ee0u, 0x698c41f1u, 0xada90397u, 0x618d526fu}}\n, .sourceIx = ty_b\n, .targetIx = ty_b\n, .cost = 70 /* milli weight units */\n}\n,[SOME_16] =\n{ .tag = JET\n, .jet = simplicity_some_16\n, .cmr = {{0x7e2ccdbfu, 0xc24dd8d8u, 0xa904b017u, 0xdd4f57e7u, 0xc8749634u, 0x8aca7d04u, 0x58c9d16bu, 0x68bcda1cu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_b\n, .cost = 63 /* milli weight units */\n}\n,[SOME_32] =\n{ .tag = JET\n, .jet = simplicity_some_32\n, .cmr = {{0x4536aeb1u, 0x21c4273fu, 0xfc2a48feu, 0xd9eed031u, 0x2ebd972du, 0xec5681f4u, 0x7ead0f62u, 0xd954452au}}\n, .sourceIx = ty_w32\n, .targetIx = ty_b\n, .cost = 64 /* milli weight units */\n}\n,[SOME_64] =\n{ .tag = JET\n, .jet = simplicity_some_64\n, .cmr = {{0x7f0bbd9du, 0x6631c130u, 0x9f901c2fu, 0x0d7a0d28u, 0x4a34416cu, 0xf750db1fu, 0xe2b9f3d6u, 0xed709409u}}\n, .sourceIx = ty_w64\n, .targetIx = ty_b\n, .cost = 93 /* milli weight units */\n}\n,[SOME_8] =\n{ .tag = JET\n, .jet = simplicity_some_8\n, .cmr = {{0x2d8c8f71u, 0xee5e7582u, 0xf0ed65f5u, 0x26c02605u, 0xdcb93c0bu, 0xddb9433au, 0xff3f25c2u, 0x28acda8au}}\n, .sourceIx = ty_w8\n, .targetIx = ty_b\n, .cost = 75 /* milli weight units */\n}\n,[SUBTRACT_16] =\n{ .tag = JET\n, .jet = simplicity_subtract_16\n, .cmr = {{0x569e6c6bu, 0x39e7d812u, 0x659b67aau, 0xc08ad150u, 0x99eead79u, 0x8fd1d42du, 0xa17ee3f0u, 0xd4d4492au}}\n, .sourceIx = ty_w32\n, .targetIx = ty_pbw16\n, .cost = 113 /* milli weight units */\n}\n,[SUBTRACT_32] =\n{ .tag = JET\n, .jet = simplicity_subtract_32\n, .cmr = {{0x19d35e0au, 0xf1e16514u, 0xa6dfc29au, 0x91418713u, 0x3964c480u, 0xf660e7ebu, 0x924ee16du, 0xbaa249cbu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_pbw32\n, .cost = 118 /* milli weight units */\n}\n,[SUBTRACT_64] =\n{ .tag = JET\n, .jet = simplicity_subtract_64\n, .cmr = {{0x523e1186u, 0x28bf3ac1u, 0xa6be5a72u, 0xbdb1141bu, 0x89e0e001u, 0xe402addau, 0x82587900u, 0x03f88ad8u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_pbw64\n, .cost = 115 /* milli weight units */\n}\n,[SUBTRACT_8] =\n{ .tag = JET\n, .jet = simplicity_subtract_8\n, .cmr = {{0x40950b86u, 0xf6f1f993u, 0x55dee11fu, 0x77daf279u, 0xa0cb6c6du, 0x156ae44bu, 0x7d5d2571u, 0x64b267c5u}}\n, .sourceIx = ty_w16\n, .targetIx = ty_pbw8\n, .cost = 109 /* milli weight units */\n}\n,[SWU] =\n{ .tag = JET\n, .jet = simplicity_swu\n, .cmr = {{0xabf70be0u, 0x0b30f577u, 0xf987cb50u, 0x488996bau, 0x3596dbf9u, 0xc1e844a8u, 0xb1b8b710u, 0x853b65ebu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w512\n, .cost = 32120 /* milli weight units */\n}\n,[TAP_ENV_HASH] =\n{ .tag = JET\n, .jet = simplicity_tap_env_hash\n, .cmr = {{0x72270771u, 0x93ec1741u, 0x8ebf7877u, 0xafdc7097u, 0xbd5eed57u, 0xe826df66u, 0x05c64869u, 0x1d003403u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 162 /* milli weight units */\n}\n,[TAPDATA_INIT] =\n{ .tag = JET\n, .jet = simplicity_tapdata_init\n, .cmr = {{0x6c67e5c1u, 0x0735305eu, 0xe7deb59au, 0x6c6ac2efu, 0xfcab4ff7u, 0xbb479ea7u, 0x0081606eu, 0x60484ca7u}}\n, .sourceIx = ty_u\n, .targetIx = ty_ppmw256pmw128pmw64pmw32pmw16mw8pw64w256\n, .cost = 1178 /* milli weight units */\n}\n,[TAPLEAF_HASH] =\n{ .tag = JET\n, .jet = simplicity_tapleaf_hash\n, .cmr = {{0xd45a661fu, 0xc9100e2eu, 0xa9df789cu, 0xa2346da8u, 0x42717ef6u, 0xa8c82418u, 0x4f2da8c7u, 0xfb016203u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 136 /* milli weight units */\n}\n,[TAPLEAF_VERSION] =\n{ .tag = JET\n, .jet = simplicity_tapleaf_version\n, .cmr = {{0xddb0edd6u, 0xce1e0798u, 0x3d1a6226u, 0xf00b1251u, 0x89af13bdu, 0x5cd06812u, 0x3ad43f48u, 0x201b006fu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w8\n, .cost = 105 /* milli weight units */\n}\n,[TAPPATH] =\n{ .tag = JET\n, .jet = simplicity_tappath\n, .cmr = {{0x42c0c1f2u, 0xef0e28aeu, 0x7defa15eu, 0x84a06f35u, 0xfbf6fc89u, 0x7b29f683u, 0xfe1a24e3u, 0x0dc58bafu}}\n, .sourceIx = ty_w8\n, .targetIx = ty_mw256\n, .cost = 83 /* milli weight units */\n}\n,[TAPPATH_HASH] =\n{ .tag = JET\n, .jet = simplicity_tappath_hash\n, .cmr = {{0x9da906e3u, 0xec086065u, 0xbe144136u, 0xb51620b6u, 0x6ddf4d71u, 0x3857354eu, 0xba3b97c7u, 0x7585f443u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 143 /* milli weight units */\n}\n,[TOTAL_FEE] =\n{ .tag = JET\n, .jet = simplicity_total_fee\n, .cmr = {{0x4eba3f22u, 0xbac0a465u, 0xe4d08a9au, 0xc40518efu, 0x972c2e86u, 0x12090a51u, 0xe3203fcbu, 0xd2f4edbeu}}\n, .sourceIx = ty_w256\n, .targetIx = ty_w64\n, .cost = 230 /* milli weight units */\n}\n,[TRANSACTION_ID] =\n{ .tag = JET\n, .jet = simplicity_transaction_id\n, .cmr = {{0x08b8eb3cu, 0x2d2d9584u, 0x58e163e9u, 0x4334950cu, 0x0bb914a0u, 0xb9d214fcu, 0x5e9de8f7u, 0x0a17a0d4u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 139 /* milli weight units */\n}\n,[TX_HASH] =\n{ .tag = JET\n, .jet = simplicity_tx_hash\n, .cmr = {{0xc36102aeu, 0xda8bcf62u, 0xa85e714bu, 0x18e4c50cu, 0xd417ffbfu, 0x86d73734u, 0xe02cbfcbu, 0x5313fccfu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w256\n, .cost = 143 /* milli weight units */\n}\n,[TX_IS_FINAL] =\n{ .tag = JET\n, .jet = simplicity_tx_is_final\n, .cmr = {{0x8b314572u, 0x2470a07du, 0xe90a28bau, 0x89f3f886u, 0x42610096u, 0x54ce866cu, 0xd8eaf76cu, 0x5d8626ebu}}\n, .sourceIx = ty_u\n, .targetIx = ty_b\n, .cost = 71 /* milli weight units */\n}\n,[TX_LOCK_HEIGHT] =\n{ .tag = JET\n, .jet = simplicity_tx_lock_height\n, .cmr = {{0xc20257f8u, 0xe76ecd0au, 0xe7ad634fu, 0x5dfa68aeu, 0x9a5eded0u, 0xe2eebe4eu, 0xe52cb47au, 0xcfb0264cu}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 80 /* milli weight units */\n}\n,[TX_LOCK_TIME] =\n{ .tag = JET\n, .jet = simplicity_tx_lock_time\n, .cmr = {{0x3ee19005u, 0x42d01efdu, 0x4e9a01d4u, 0xefb1f9ddu, 0x992ced35u, 0xb7a752f8u, 0x3da59338u, 0x1538dea4u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 80 /* milli weight units */\n}\n,[VERIFY] =\n{ .tag = JET\n, .jet = simplicity_verify\n, .cmr = {{0x343e6dc1u, 0x6b3f52e8u, 0x3e3b4cccu, 0x99b8c6f9u, 0x6a074fe3u, 0x99327af3u, 0x64bc285eu, 0x299745a2u}}\n, .sourceIx = ty_b\n, .targetIx = ty_u\n, .cost = 57 /* milli weight units */\n}\n,[VERSION] =\n{ .tag = JET\n, .jet = simplicity_version\n, .cmr = {{0x087fc95cu, 0x41003348u, 0x759fd840u, 0x372c6f91u, 0x2d9be4e6u, 0x1eee3c6au, 0x7a40dc13u, 0xc9c1bc70u}}\n, .sourceIx = ty_u\n, .targetIx = ty_w32\n, .cost = 93 /* milli weight units */\n}\n,[XOR_1] =\n{ .tag = JET\n, .jet = simplicity_xor_1\n, .cmr = {{0x9dc9fe42u, 0xf7eb3464u, 0x9f1c72d2u, 0xe5dd167du, 0xb21be532u, 0x1372d5cau, 0x7f6a184fu, 0x93e05ee3u}}\n, .sourceIx = ty_w2\n, .targetIx = ty_b\n, .cost = 67 /* milli weight units */\n}\n,[XOR_16] =\n{ .tag = JET\n, .jet = simplicity_xor_16\n, .cmr = {{0x1fcaf40bu, 0xdedd72e7u, 0x97b09fe7u, 0x8753b0abu, 0x27872c0bu, 0xd12b0349u, 0x55fbfac2u, 0x3812ef26u}}\n, .sourceIx = ty_w32\n, .targetIx = ty_w16\n, .cost = 83 /* milli weight units */\n}\n,[XOR_32] =\n{ .tag = JET\n, .jet = simplicity_xor_32\n, .cmr = {{0x1d49fc94u, 0xf22b5d31u, 0xb7f9efb5u, 0x378e5f8au, 0x42626aedu, 0x4e927993u, 0x48d6b788u, 0xdfe86b1cu}}\n, .sourceIx = ty_w64\n, .targetIx = ty_w32\n, .cost = 92 /* milli weight units */\n}\n,[XOR_64] =\n{ .tag = JET\n, .jet = simplicity_xor_64\n, .cmr = {{0x7a3f3f55u, 0x20478365u, 0x3344311du, 0x1dc509d3u, 0x5b6639c0u, 0xd8b967a2u, 0x07806cd8u, 0x7d31d6e6u}}\n, .sourceIx = ty_w128\n, .targetIx = ty_w64\n, .cost = 95 /* milli weight units */\n}\n,[XOR_8] =\n{ .tag = JET\n, .jet = simplicity_xor_8\n, .cmr = {{0xd8335f48u, 0x90c1d8edu, 0x766c7135u, 0x902e01a0u, 0x094e3a98u, 0x16f70c84u, 0x7cc3d7c0u, 0x00406efeu}}\n, .sourceIx = ty_w16\n, .targetIx = ty_w8\n, .cost = 85 /* milli weight units */\n}\n,[XOR_XOR_1] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_1\n, .cmr = {{0x1e107b05u, 0xff941d31u, 0xd7578b43u, 0x7328ba52u, 0xf3ff20a0u, 0x68c0d2bdu, 0xef087680u, 0x93cc7c63u}}\n, .sourceIx = ty_pbw2\n, .targetIx = ty_b\n, .cost = 72 /* milli weight units */\n}\n,[XOR_XOR_16] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_16\n, .cmr = {{0xb776989du, 0xa5095c4bu, 0xe94b1aefu, 0x759466e1u, 0x1f639c19u, 0x39471fa1u, 0x8e36e7e4u, 0x90c38961u}}\n, .sourceIx = ty_pw16w32\n, .targetIx = ty_w16\n, .cost = 79 /* milli weight units */\n}\n,[XOR_XOR_32] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_32\n, .cmr = {{0xd168fac1u, 0xac7fc483u, 0x57be1b65u, 0x3375ec5eu, 0x3f05823au, 0xae6ac985u, 0xe9403eeau, 0xb12bb9f8u}}\n, .sourceIx = ty_pw32w64\n, .targetIx = ty_w32\n, .cost = 96 /* milli weight units */\n}\n,[XOR_XOR_64] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_64\n, .cmr = {{0x361c5793u, 0x0ef97d49u, 0xcbc679fau, 0xef1e3bcfu, 0xfb787995u, 0xb961e553u, 0x7d2b1eebu, 0xc9c9a6e8u}}\n, .sourceIx = ty_pw64w128\n, .targetIx = ty_w64\n, .cost = 93 /* milli weight units */\n}\n,[XOR_XOR_8] =\n{ .tag = JET\n, .jet = simplicity_xor_xor_8\n, .cmr = {{0xc2da6e9cu, 0xa64d8a73u, 0xc1772667u, 0xb3d7a093u, 0x8bcb8a6cu, 0x43fd0473u, 0xeec71b77u, 0x494aad94u}}\n, .sourceIx = ty_pw8w16\n, .targetIx = ty_w8\n, .cost = 98 /* milli weight units */\n}\n"
  },
  {
    "path": "C/elements/txEnv.c",
    "content": "#include \"txEnv.h\"\n\n/* Construct a txEnv structure from its components.\n * This function will precompute any cached values.\n *\n * Precondition: NULL != tx\n *               NULL != taproot\n *               NULL != genesisHash\n *               ix < tx->numInputs\n */\ntxEnv simplicity_elements_build_txEnv(const elementsTransaction* tx, const elementsTapEnv* taproot, const sha256_midstate* genesisHash, uint_fast32_t ix) {\n  txEnv result = { .tx = tx\n                 , .taproot = taproot\n                 , .genesisHash = *genesisHash\n                 , .ix = ix\n                 };\n  sha256_context ctx = sha256_init(result.sigAllHash.s);\n  sha256_hash(&ctx, genesisHash);\n  sha256_hash(&ctx, genesisHash);\n  sha256_hash(&ctx, &tx->txHash);\n  sha256_hash(&ctx, &taproot->tapEnvHash);\n  sha256_u32be(&ctx, ix);\n  sha256_finalize(&ctx);\n\n  return result;\n}\n"
  },
  {
    "path": "C/elements/txEnv.h",
    "content": "/* This module defines the environment ('txEnv') for Simplicity evaluation for Elements.\n * It includes the transaction data and input index of the input whose Simplicity program is being executed.\n * It also includes the commitment Merkle root of the program being executed.\n */\n#ifndef SIMPLICITY_ELEMENTS_TXENV_H\n#define SIMPLICITY_ELEMENTS_TXENV_H\n\n#include <stdbool.h>\n#include \"../sha256.h\"\n\n/* An Elements 'outpoint' consists of a transaction id and output index within that transaction.\n * The transaction id can be a either a transaction within the chain, or the transaction id from another chain in case of a peg-in.\n */\ntypedef struct outpoint {\n  sha256_midstate txid;\n  uint_fast32_t ix;\n} outpoint;\n\n/* In Elements, many fields can optionally be blinded and encoded as a point on the secp256k1 curve.\n * This prefix determines the parity of the y-coordinate of that point point, or indicates the value is explicit.\n * Sometimes values are entirely optional, in which case 'NONE' is a possibility.\n */\ntypedef enum confPrefix {\n  NONE = 0,\n  EXPLICIT = 1,\n  EVEN_Y = 2,\n  ODD_Y = 3\n} confPrefix;\n\n/* Returns true when the prefix indicates the associated value is a confidential value. */\nstatic inline bool is_confidential(confPrefix prefix) {\n  return EVEN_Y == prefix || ODD_Y == prefix;\n}\n\n/* A confidential (256-bit) hash.\n * When 'prefix' is either 'EVEN_Y' or 'ODD_Y' then 'data' contains the x-coordinate of the point on the secp256k1 curve\n * representing the blinded value.\n * When 'prefix' is 'EXPLICIT' then 'data' is the unblinded 256-bit hash.\n * When 'prefix' is 'NONE' the value is \"NULL\" and the 'data' field is unused.\n */\ntypedef struct confidential {\n  sha256_midstate data;\n  confPrefix prefix;\n} confidential;\n\n/* A confidential 64-bit value.\n * When 'prefix' is either 'EVEN_Y' or 'ODD_Y' then 'confidential' contains the x-coordinate of the point on the secp256k1 curve\n * representing the blinded value.\n * When 'prefix' is 'EXPLICIT' then 'explicit' is the unblinded 256-bit hash.\n * invariant: 'prefix' != 'NONE'\n */\ntypedef struct confAmount {\n  union {\n    sha256_midstate confidential;\n    uint_fast64_t explicit;\n  };\n  confPrefix prefix;\n} confAmount;\n\n/* In Elements, a null-data scriptPubKey consists of an OP_RETURN followed by data only pushes (i.e. only opcodes less than OP_16).\n * This is an enumeration of all such data only push operation names.\n * OP_IMMEDIATE represents OP_0 and all the one-byte prefixes of data pushes up to 75 bytes.\n */\ntypedef enum opcodeType {\n  OP_IMMEDIATE,\n  OP_PUSHDATA,\n  OP_PUSHDATA2,\n  OP_PUSHDATA4,\n  OP_1NEGATE,\n  OP_RESERVED,\n  OP_1,\n  OP_2,\n  OP_3,\n  OP_4,\n  OP_5,\n  OP_6,\n  OP_7,\n  OP_8,\n  OP_9,\n  OP_10,\n  OP_11,\n  OP_12,\n  OP_13,\n  OP_14,\n  OP_15,\n  OP_16\n} opcodeType;\n\n/* In Elements, a null-data scriptPubKey consists of an OP_RETURN followed by data only pushes (i.e. only opcodes less than OP_16).\n * This is a structure represents a digest of all such operations.\n * 'code' represents the operation name.\n * If 'code' \\in {OP_IMMEDIATE, OP_PUSHDATA, OP_PUSHDATA2, OP_PUSHDATA4} then 'dataHash' represents the SHA-256 hash of data pushed\n * by the push operation.\n */\ntypedef struct opcode {\n  sha256_midstate dataHash;\n  opcodeType code;\n} opcode;\n\n/* In Elements, a null-data scriptPubKey consists of an OP_RETURN followed by data only pushes (i.e. only opcodes less than OP_16).\n * This is an structure for an array of digets of null-data scriptPubKeys.\n * 'op' is an array of the (digests of) each data push.\n * Note that 'len' is 0 for a null-data scriptPubKey consisting of only an OP_RETURN.\n *\n * Invariant: opcode op[len] (or op == NULL and len == 0)\n */\ntypedef struct parsedNullData {\n  const opcode* op;\n  uint_fast32_t len;\n} parsedNullData;\n\n/* A structure representing data from one output from an Elements transaction.\n * 'surjectionProofHash' is the SHA-256 hash of the output's surjection proof.\n * 'rangeProofHash' is the SHA-256 hash of the output's range proof.\n * 'scriptPubKey' is the SHA-256 hash of the outputs scriptPubKey.\n * 'isNullData' is true if the output has a null-data scriptPubKey.\n */\ntypedef struct sigOutput {\n  confidential asset;\n  sha256_midstate surjectionProofHash;\n  sha256_midstate rangeProofHash;\n  confAmount amt;\n  confidential nonce;\n  sha256_midstate scriptPubKey;\n  uint_fast64_t assetFee;\n  parsedNullData pnd;\n  bool isNullData;\n  bool emptyScript;\n} sigOutput;\n\n/* The data held by an Elements unspent transaction output database.\n * This 'scriptPubKey' of the unspent transaction output, which in our application is digested as a SHA-256 hash.\n * This also includes the asset and amount of the output, each of which may or may not be blinded.\n */\ntypedef struct utxo {\n  sha256_midstate scriptPubKey;\n  confidential asset;\n  confAmount amt;\n} utxo;\n\n/* In Elements, a transaction input can optionally issue a new asset or reissue an existing asset.\n * This enumerates those possibilities.\n */\ntypedef enum issuanceType {\n  NO_ISSUANCE = 0,\n  NEW_ISSUANCE,\n  REISSUANCE\n} issuanceType;\n\n/* In Elements, a transaction input can optionally issue a new asset or reissue an existing asset.\n * This structure contains data about such an issuance.\n * 'assetRangeProofHash' is the SHA-256 hash of the asset amount's range proof.\n * 'tokenRangeProofHash' is the SHA-256 hash of the token amount's range proof.\n *\n * Invariant: If 'type == NEW_ISSUANCE' then 'contractHash' and 'tokenAmt' are active;\n *            If 'type == REISSUANCE' then 'blindingNonce' is active;\n */\ntypedef struct assetIssuance {\n  union {\n    struct {\n      sha256_midstate contractHash;\n      confAmount tokenAmt;\n    };\n    struct {\n      sha256_midstate blindingNonce;\n    };\n  };\n  sha256_midstate entropy;\n  sha256_midstate assetRangeProofHash;\n  sha256_midstate tokenRangeProofHash;\n  sha256_midstate assetId; /* Cached asset ID calculation. */\n  sha256_midstate tokenId; /* Cached token ID calculation. */\n  confAmount assetAmt;\n  issuanceType type;\n} assetIssuance;\n\n/* A structure representing data from one input from an Elements transaction along with the utxo data of the output being redeemed.\n * When 'hasAnnex' then 'annexHash' is a cache of the hash of the input's segwit annex.\n * When 'isPegin' then the 'prevOutpoint' represents an outpoint of another chain\n * and 'pegin' contains the hash of the parent chain's genesis block.\n */\ntypedef struct sigInput {\n  sha256_midstate annexHash;\n  sha256_midstate pegin;\n  sha256_midstate scriptSigHash;\n  outpoint prevOutpoint;\n  utxo txo;\n  uint_fast32_t sequence;\n  assetIssuance issuance;\n  bool hasAnnex;\n  bool isPegin;\n} sigInput;\n\n/* A structure representing data from an Elements transaction (along with the utxo data of the outputs being redeemed).\n * Includes a variety of cached hash values that are used in signature hash jets.\n */\ntypedef struct elementsTransaction {\n  const sigInput* input;\n  const sigOutput* output;\n  const sigOutput* const * feeOutputs;\n  sha256_midstate outputAssetAmountsHash;\n  sha256_midstate outputNoncesHash;\n  sha256_midstate outputScriptsHash;\n  sha256_midstate outputRangeProofsHash;\n  sha256_midstate outputSurjectionProofsHash;\n  sha256_midstate outputsHash;\n  sha256_midstate inputOutpointsHash;\n  sha256_midstate inputAssetAmountsHash;\n  sha256_midstate inputScriptsHash;\n  sha256_midstate inputUTXOsHash;\n  sha256_midstate inputSequencesHash;\n  sha256_midstate inputAnnexesHash;\n  sha256_midstate inputScriptSigsHash;\n  sha256_midstate inputsHash;\n  sha256_midstate issuanceAssetAmountsHash;\n  sha256_midstate issuanceTokenAmountsHash;\n  sha256_midstate issuanceRangeProofsHash;\n  sha256_midstate issuanceBlindingEntropyHash;\n  sha256_midstate issuancesHash;\n  sha256_midstate txHash;\n  sha256_midstate txid;\n  uint_fast32_t numInputs;\n  uint_fast32_t numOutputs;\n  uint_fast32_t numFees;\n  uint_fast32_t version;\n  uint_fast32_t lockTime;\n  /* These two fields are used to implement broken jets and only remain here for consensus purposes. */\n  uint_fast16_t obsolete_lockDistance;\n  uint_fast16_t obsolete_lockDuration;\n  bool isFinal;\n} elementsTransaction;\n\n/* A structure representing taproot spending data from an Elements transaction.\n *\n * Invariant: pathLen <= 128\n *            sha256_midstate path[pathLen];\n */\ntypedef struct elementsTapEnv {\n  const sha256_midstate *path;\n  sha256_midstate tapLeafHash;\n  sha256_midstate tappathHash;\n  sha256_midstate tapEnvHash;\n  sha256_midstate internalKey;\n  sha256_midstate scriptCMR;\n  unsigned char pathLen;\n  unsigned char leafVersion;\n} elementsTapEnv;\n\n/* The 'txEnv' structure used by the Elements application of Simplicity.\n *\n * It includes\n * + the transaction data, which may be shared when Simplicity expressions are used for multiple inputs in the same transaction),\n * + the input index under consideration,\n * + the hash of the genesis block for the chain,\n */\ntypedef struct txEnv {\n  const elementsTransaction* tx;\n  const elementsTapEnv* taproot;\n  sha256_midstate genesisHash;\n  sha256_midstate sigAllHash;\n  uint_fast32_t ix;\n} txEnv;\n\n/* Construct a txEnv structure from its components.\n * This function will precompute any cached values.\n *\n * Precondition: NULL != tx\n *               NULL != taproot\n *               NULL != genesisHash\n *               ix < tx->numInputs\n */\ntxEnv simplicity_elements_build_txEnv(const elementsTransaction* tx, const elementsTapEnv* taproot, const sha256_midstate* genesisHash, uint_fast32_t ix);\n\n#endif\n"
  },
  {
    "path": "C/elements-sources.mk",
    "content": "# - All Variables ending in _HEADERS or _SOURCES confuse automake, so the\n#     _INT postfix is applied.\n# - The %reldir% is the relative path from the Makefile.am.\n\nELEMENTS_SIMPLICITY_INCLUDE_DIR_INT = %reldir%/include\n\nELEMENTS_SIMPLICITY_DIST_HEADERS_INT =\nELEMENTS_SIMPLICITY_DIST_HEADERS_INT += %reldir%/include/simplicity/errorCodes.h\nELEMENTS_SIMPLICITY_DIST_HEADERS_INT += %reldir%/include/simplicity/elements/cmr.h\nELEMENTS_SIMPLICITY_DIST_HEADERS_INT += %reldir%/include/simplicity/elements/env.h\nELEMENTS_SIMPLICITY_DIST_HEADERS_INT += %reldir%/include/simplicity/elements/exec.h\n\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT =\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/bitstream.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/dag.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/deserialize.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/eval.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/frame.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/jets-secp256k1.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/jets.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/rsort.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/sha256.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/type.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/typeInference.c\n\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/elements/cmr.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/elements/env.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/elements/exec.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/elements/elementsJets.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/elements/ops.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/elements/primitive.c\nELEMENTS_SIMPLICITY_LIB_SOURCES_INT += %reldir%/elements/txEnv.c\n\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT =\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/bitstream.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/bitstring.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/bounded.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/dag.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/decodeCoreJets.inc\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/deserialize.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/eval.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/frame.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/jets.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/limitations.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/precomputed.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/rsort.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/sha256.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/sha256_x86.inc\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/simplicity_alloc.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/simplicity_assert.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/taptweak.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/type.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/typeInference.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/uword.h\n\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/assumptions.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/eckey.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/eckey_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/ecmult.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/ecmult_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/extrakeys.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/extrakeys_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/field.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/field_5x52.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/field_5x52_asm_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/field_5x52_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/field_5x52_int128_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/field_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/generator.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/generator_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/group.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/group_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/int128.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/int128_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/int128_native.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/int128_native_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/int128_struct.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/int128_struct_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/modinv64.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/modinv64_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/precomputed_ecmult.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/scalar.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/scalar_4x64.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/scalar_4x64_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/scalar_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/schnorrsig.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/schnorrsig_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/secp256k1.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/secp256k1_impl.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/secp256k1/util.h\n\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/decodeElementsJets.inc\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/elementsJets.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/ops.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/primitive.h\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/primitiveEnumJet.inc\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/primitiveEnumTy.inc\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/primitiveInitTy.inc\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/primitiveJetNode.inc\nELEMENTS_SIMPLICITY_LIB_HEADERS_INT += %reldir%/elements/txEnv.h\n"
  },
  {
    "path": "C/eval.c",
    "content": "#include \"eval.h\"\n\n#include <string.h>\n#include \"bounded.h\"\n#include \"limitations.h\"\n#include \"simplicity_alloc.h\"\n#include \"simplicity_assert.h\"\n\n/* We choose an unusual representation for frames of the Bit Machine.\n *\n * An 'n'-bit frame is stored in the array of 'UWORD's of length 'l' where 'l' is the least value such that 'n <= l * UWORD_BIT'.\n * Thus there may be extra \"padding\" bits in the array when 'n < l * UWORD_BIT'.\n *\n * We choose to store the frames bits in a sequence with the first bits in the last element of the array and\n * the last bits in the first element of the array.\n * Within a 'UWORD' array element, the bits of the frame are stored with the first bits in the most significant positions\n * and the last bits in the least significant positions.\n * We choose to put padding bits entirely within the most significant bits of the last element of the array.\n *\n * Thus the last bit of the frame will always be the least significant bit of the first element of the array.\n * When there are no padding bits, the first bit of the frame will be the most significant bit of the last element of the array.\n * When there are padding bits, the first bit of the frame will occur at the most significant non-padding bit.\n *\n * More precisely, bit 'm' of an 'n'-bit frame (with '0 <= m < n') is the bit at position '1 << ((n-m-1) % UWORD_BIT)'\n * of the element of the array at index '(n-m-1 / UWORD_BIT)'.\n *\n * 0-bit frames are allowed, in which case the array will have length 0.\n *\n * Rationale:\n *\n * The Bit Machine's standard library of jets operates using a \"big endian\" representation of integers\n * from the Bit Machine's perspective.\n * It is often the case that we encounter types that are sums of various integers sizes.\n * For example, the Bitcoin primitive 'outputValue : TWO^32 |- ONE + TWO^64' has a target type\n * that is the sum of 64-bit integer (with a 0-bit integer).\n *\n * When a frame is generated from a type such as 'ONE + TWO^64' our representation places the tag for this type\n * by itself as the least significant bit of the last element of the frame's array (as long as 'UWORD_BIT' divides 64).\n * When this frame contains a value of the right-hand type, 'TWO^64', this value entirely fits perfectly within\n * the within the first elements of the array (again, as long as 'UWORD_BIT' divides 64).\n * Furthermore, if 'UWORD_BIT == 8', then this representation place this value of type 'TWO^64'\n * into the machine's memory in little endian byte order.\n *\n * All of the above means that when jets need to marshal values from the Bit Machine's representation\n * to the architecture's representation, it will often be the case that the data is already byte-aligned and\n * in the correct order for little endian processors.\n * When a jet marshals a architecture-sized word, and 'UWORD' is the architecture's native integer size, then\n * it will often be the case that the data is word-aligned (for both big and little endian processors).\n * Only the case when 'UWORD_BIT == 8' and architecture's processor is big-endian will the compiler need to emit\n * byte-swapping instructions.\n *\n * Nevertheless, our implementation is independent of architecture and will function correctly on all architectures\n * for any value of UWORD_BIT.\n *\n * Note: while we do attempt make the fast path for marshaling values for jets common, when assigning discounts to jets\n * it is important to only consider the worst case, slow path, behaviour, as good byte or bit alignment is not guaranteed in\n * presence of oddly shaped pairs of values.\n */\n\n/* The main memory used by the Bit Machine during execution is contained in a single allocation of an array of 'UWORD's\n * named 'cells'.\n * The read and write frames used by the Bit Machine during execution are slices of this single array allocation.\n * We represent the read frame and write frame stacks within 'cells' using a [gap buffer](https://en.wikipedia.org/wiki/Gap_buffer).\n * The frames of the read frame stack are assigned to the beginning of the cell array\n * with the active read frame occurring as the last of these frames.\n * The frames of the write frame stack are assigned to the end of the cell array\n * with the active write frame occurring as the first of these frames.\n * This leaves a (possibly empty) gap of unused UWORDs between the '.edge' of the active read frame\n * and the '.edge' of the active write frame.\n * This gap will shrink / grow / move during the execution of the Bit Machine.\n * Thus whether a particular UWORD from 'cells' belongs to some read frame or write frame will vary during the execution.\n * Static analysis determines a safe size that is acceptable for the 'cells' array.\n */\n\n/* To keep track of the individual frames of the read frame and write frame stacks we another single allocation of\n * an array of 'frameItem's called 'frames'.\n * This 'frames' array is another instance of a [gap buffer](https://en.wikipedia.org/wiki/Gap_buffer).\n * The read frames are tracked by 'frameItem's occurring at the beginning of the 'frames' array\n * with the active read frame tracked the last of these 'frameItem's.\n * The write frames are tracked by 'frameItem's occurring at the end of the 'frames' array\n * with the active write frame tracked the first of these 'frameItem's.\n * This leaves a (possibly empty) gap of unused 'frameItem's between the item that tracks active read frame\n * and the item that tracks the active write frame.\n * This gap will shrink / grow / move during the execution of the Bit Machine.\n * Thus whether a particular 'frameItem' from 'frames' tracks a read frame or write frame will vary during the execution.\n * The 'frameItem' that tracks the active read frame is located at 'state.activeReadFrame'.\n * The 'frameItem' that tracks the active write frame is located at 'state.activeWriteFrame'.\n * There is always an active read frame and an active write frame, though these frames are initially of size 0\n * when evaluating Simplicity programs.\n * Static analysis determines a safe size that is acceptable for the 'frames' array.\n */\n\n/* When a 'frameItem' tracks a read frame, its '.edge' field points to the UWORD from 'cell' that is\n * one-past-the-end of the 'cells' slice that makes up that frame.\n * The '.offset' value indirectly tracks the position of the read frame's cursor.\n * A cursor at the beginning of a read frame is denoted by an '.offset' value equal to that frame's padding.\n * When the frame has no padding, a cursor at the beginning of a read frame is denoted by an '.offset' of 0.\n * For each subsequent cursor position within the read frame, the '.offset' increments by one.\n * When the cursor is at (one-cell past) the end of the read frame, the '.offset' value will be equal to the total number of bits\n * allocated for the frame (including padding bits), which is necessarily some multiple of (UWORD_BIT).\n * We say \"a read frame is valid for /n/ more cells\" when '.edge - ROUND_UWORD(.offset + n)' points to a\n * 'UWORD[ROUND_UWORD(.offset + n)]' array of initialized values.\n * We say \"a read frame is valid\" if it is valid for 0 more cells.\n *\n * When a 'frameItem' tracks a write frame, its '.edge' field points the UWORD from 'cell' that is\n * the first element of the 'cells' slice that makes up that frame.\n * The '.offset' value indirectly tracks the position of the write frame's cursor.\n * A cursor at the beginning of a read frame is denoted by an '.offset' value equal to\n * that frame's number of bits (excluding padding).\n * For each subsequent cursor position within the write frame, the '.offset' decrements by one.\n * When the cursor is at (one-cell past) the end of the write frame, the '.offset' value will be equal to 0.\n * We say \"a write frame is valid for /n/ more cells\" when '.edge' points to an 'UWORD[ROUND_UWORD(.offset)]' array of\n * initialized values and 'n <= .offset'.\n * We say \"a write frame is valid\" if it is valid for 0 more cells.\n *\n * Notice that the interpretation of the fields of a 'frameItem' depends on whether the 'frameItem' is tracking a read frame or\n * a write frame.\n */\n\n/* Given a read frame, advance its cursor by 'n' cells.\n *\n * Precondition: NULL != frame.\n */\nstatic void forward(frameItem* frame, size_t n) {\n  frame->offset += n;\n}\n\n/* Given a read frame, move its cursor backwards by 'n' cells.\n *\n * Precondition: n <= frame->offset\n */\nstatic void backward(frameItem* frame, size_t n) {\n  simplicity_debug_assert(n <= frame->offset);\n  frame->offset -= n;\n}\n\n/* Given a write frame, advance its cursor by 'n' cells.\n *\n * Precondition: n <= frame->offset\n */\nstatic void skip(frameItem* frame, size_t n) {\n  simplicity_debug_assert(n <= frame->offset);\n  frame->offset -= n;\n}\n\n/* Given a compact bit representation of a value 'v : B', write the value 'v' to a write frame, skipping cells as needed\n * and advance its cursor.\n * Cells in front of the '*dst's cursor's final position may be overwritten.\n *\n * :TODO: Consider writing an optimized version of this function for word type 'TWO^(2^n)' which is a very common case and\n * doesn't need any skipping of cells.\n *\n * Precondition: '*dst' is a valid write frame for 'bitSize(B)' more cells;\n *               'compactValue' is a compact bitstring representation of a value 'v : B';\n *               'type_dag[typeIx]' is a type dag for the type B.\n */\nstatic void writeValue(frameItem* dst, const bitstring* compactValue, size_t typeIx, type* type_dag) {\n  size_t cur = typeSkip(typeIx, type_dag);\n  size_t offset = 0;\n  bool calling = true;\n  setTypeBack(cur, type_dag, 0);\n  while (cur) {\n    if (SUM == type_dag[cur].kind) {\n      simplicity_debug_assert(calling);\n\n      /* Write one bit to the write frame and then skip over any padding bits. */\n      bool bit = getBit(compactValue, offset);\n      offset++;\n      writeBit(dst, bit);\n      skip(dst, pad(bit, type_dag[type_dag[cur].typeArg[0]].bitSize, type_dag[type_dag[cur].typeArg[1]].bitSize));\n\n      size_t next = typeSkip(type_dag[cur].typeArg[bit], type_dag);\n      if (next) {\n        setTypeBack(next, type_dag, type_dag[cur].back);\n        cur = next;\n      } else {\n        cur = type_dag[cur].back;\n        calling = false;\n      }\n    } else {\n      simplicity_debug_assert(PRODUCT == type_dag[cur].kind);\n      size_t next;\n      if (calling) {\n        next = typeSkip(type_dag[cur].typeArg[0], type_dag);\n        /* Note: Because we are using 'typeSkip' we have an invarant on 'cur' such that whenever type_dag[cur].kind == PRODUCT,\n           then it is a product of two non-trival types.  This implies that 'next' cannot actually be 0. */\n        if (next) {\n          /* Traverse the first element of the product type, if it has any data. */\n          setTypeBack(next, type_dag, cur);\n          cur = next;\n          continue;\n        }\n      }\n      next = typeSkip(type_dag[cur].typeArg[1], type_dag);\n      /* Note: Because we are using 'typeSkip' we have an invarant on 'cur' such that whenever type_dag[cur].kind == PRODUCT,\n         then it is a product of two non-trival types.  This implies that 'next' cannot actually be 0. */\n      if (next) {\n        /* Traverse the second element of the product type, if it has any data. */\n        setTypeBack(next, type_dag, type_dag[cur].back);\n        cur = next;\n        calling = true;\n      } else {\n        cur = type_dag[cur].back;\n        calling = false;\n      }\n    }\n  }\n  /* Note: Above we use 'typeSkip' to skip over long chains of products against trivial types\n   * This avoids a potential DOS vulnerability where a DAG of deeply nested products of unit types with sharing is traversed,\n   * taking exponential time.\n   * While traversing still could take exponential time in terms of the size of the type's dag,\n   * at least one bit of witness data is required per PRODUCT type encountered.\n   * This ought to limit the total number of times through the above loop to no more that 3 * compactValue->len.\n   */\n}\n\n/* Our representation of the Bit Machine state consists of a gap buffer of 'frameItem's.\n * The gap buffer is allocated at 'frame'\n * The read frames of the gap buffer extends from the beginning of the buffer to '.activeReadFrame'.\n * The write frames extend from the end of the buffer down to '.activeWriteFrame'.\n */\ntypedef struct evalState {\n  frameItem* activeReadFrame;\n  frameItem* activeWriteFrame;\n} evalState;\n\n/* 'call' is an item is used to track the \"call stack\" of the Bit Machine during evaluation.\n * Each call stack frame remembers where to return to after the call and a set of flags to hold various bits of state.\n */\ntypedef struct call {\n  size_t return_to;\n  flags_type flags;\n} call;\n\n#define FLAG_TCO        0x01 // Whether TCO is on (1) or off (0).\n#define FLAG_LAST_CASE  0x02 // For case combinators, last branch executed was right (1) or left (0).\n#define FLAG_EXEC       0x10 // Whether this combinator has ever been executed (1) or not (0).\n#define FLAG_CASE_LEFT  0x20 // For case combinators, whether the left branch has ever been executed (1) or not (0).\n#define FLAG_CASE_RIGHT 0x40 // For case combinators, whether the right branch has ever been executed (1) or not (0).\n\nstatic inline bool get_tco_flag(const call *stack) {\n  return FLAG_TCO == (stack->flags & FLAG_TCO);\n}\n\nstatic inline void set_tco_flag(call *stack, bool flag) {\n  if (flag) {\n     stack->flags |= FLAG_TCO;\n  } else {\n     stack->flags &= (flags_type)(~FLAG_TCO);\n  }\n}\n\nstatic inline bool get_case_last_flag(const call *stack) {\n  return FLAG_LAST_CASE == (stack->flags & FLAG_LAST_CASE);\n}\n\nstatic inline void set_case_last_flag(call *stack, bool flag) {\n  if (flag) {\n     stack->flags |= FLAG_LAST_CASE;\n  } else {\n     stack->flags &= (flags_type)(~FLAG_LAST_CASE);\n  }\n}\n\n/* Starting from the Bit Machine 'state',\n * run the machine with the TCO (off) program generated by the well-typed Simplicity expression 'dag[len]' of type 'A |- B'.\n * If some jet execution fails, returns 'SIMPLICITY_ERR_EXEC_JET'.\n * If some 'assertr' or 'assertl' combinator fails, returns 'SIMPLICITY_ERR_EXEC_ASSERT'.\n * Otherwise returns 'SIMPLICITY_NO_ERROR'.\n *\n * The 'state' of the Bit Machine is whatever the state is after the last successfully executed Bit Machine instruction.\n *\n * ** No heap allocations are allowed in 'runTCO' or any of its subroutines. **\n *\n * Precondition: The gap between 'state.activeReadFrame' and 'state.activeWriteFrame' is sufficient for execution of 'dag'\n *                 and the values are initialized;\n *               The gap between 'activeReadFrame(state)->edge' and 'activeWriteFrame(state)->edge'\n *                 is sufficient for execution of 'dag';\n *               '*activeReadFrame(state)' is a valid read frame for 'bitSize(A)' more cells.\n *               '*activeWriteFrame(state)' is a valid write frame for 'bitSize(B)' more cells.\n *               call stack[len];\n *               for all i < len, stack[i].flags = 0;\n *               dag_node dag[len] and 'dag' is well-typed with 'type_dag';\n *               if 'dag[len]' represents a Simplicity expression with primitives then 'NULL != env';\n */\nstatic simplicity_err runTCO(evalState state, call* stack, const dag_node* dag, type* type_dag, size_t len, const txEnv* env) {\n/* The program counter, 'pc', is the current combinator being interpreted.  */\n  size_t pc = len - 1;\n\n/* 'stack' represents the interpreter's call stack.\n * However, the stack is not directly represented as an array.\n * Instead, the bottom of the call stack is located at 'stack[len - 1]' and the top of the call stack is located at 'stack[pc]'.\n * The intermediate call stack items are somewhere between 'pc' and 'len - 1'.\n * The each call stack item references the one below it through the 'stack[i].return_to' values.\n * The bottom of the stack's '.return_to' value is set to 'len' which is an out-of-bounds index.\n *\n * During CALLs, a new 'stack[i]' value is created where 'i' is index of the combinator being called,\n * and 'stack[i].return_to' is set to the current 'pc' value.\n * During TAIL_CALLs, 'stack[i].return_to' is instead set to the 'stack[pc].return_to' value.\n * During RETURNs, the 'pc' is set to the 'stack[pc].return_to' value.\n * TAIL_CALLs allows for faster returns within the interpreter (unrelated to Simplicity's TCO),\n * skipping over intermediate combinators.\n */\n  stack[pc].return_to = len;\n  set_tco_flag(&stack[pc], false);\n\n/* 'calling' lets us know if we are entering a CALL or returning from a CALL. */\n  bool calling = true;\n\n  /* :TODO: Use static analysis to limit the number of iterations through this loop. */\n  while(pc < len) {\n    stack[pc].flags |= FLAG_EXEC;\n    tag_t tag = dag[pc].tag;\n    simplicity_debug_assert(state.activeReadFrame < state.activeWriteFrame);\n    simplicity_debug_assert(state.activeReadFrame->edge <= state.activeWriteFrame->edge);\n    if (dag[pc].jet) {\n      if(!dag[pc].jet(state.activeWriteFrame, *state.activeReadFrame, env)) return SIMPLICITY_ERR_EXEC_JET;\n      /* Like IDEN and WITNESS, we want to \"fallthrough\" to the UNIT case. */\n      tag = UNIT;\n    }\n    switch (tag) {\n     case COMP:\n      if (calling) {\n        /* NEW_FRAME(BITSIZE(B)) */\n        *(state.activeWriteFrame - 1) = initWriteFrame(type_dag[COMP_B(dag, type_dag, pc)].bitSize, state.activeWriteFrame->edge);\n        state.activeWriteFrame--;\n\n        /* CALL(dag[pc].child[0], SAME_TCO) */\n        stack[dag[pc].child[0]].return_to = pc;\n        set_tco_flag(&stack[dag[pc].child[0]], get_tco_flag(&stack[pc]));\n        pc = dag[pc].child[0];\n      } else {\n        /* MOVE_FRAME */\n        simplicity_debug_assert(0 == state.activeWriteFrame->offset);\n        memmove( state.activeReadFrame->edge, state.activeWriteFrame->edge\n               , (size_t)((state.activeWriteFrame + 1)->edge - state.activeWriteFrame->edge) * sizeof(UWORD)\n               );\n        *(state.activeReadFrame + 1) = initReadFrame(type_dag[COMP_B(dag, type_dag, pc)].bitSize, state.activeReadFrame->edge);\n        state.activeWriteFrame++; state.activeReadFrame++;\n\n        /* TAIL_CALL(dag[pc].child[1], true) */\n        calling = true;\n        stack[dag[pc].child[1]].return_to = stack[pc].return_to;\n        set_tco_flag(&stack[dag[pc].child[1]], true);\n        pc = dag[pc].child[1];\n      }\n      break;\n     case ASSERTL:\n     case ASSERTR:\n     case CASE:\n      if (calling) {\n        bool bit = peekBit(state.activeReadFrame);\n\n        if (bit) {\n           stack[pc].flags |= FLAG_CASE_RIGHT;\n        } else {\n           stack[pc].flags |= FLAG_CASE_LEFT;\n        }\n\n        /* FWD(1 + PADL(A,B) when bit = 0; FWD(1 + PADR(A,B) when bit = 1 */\n        forward(state.activeReadFrame, 1 + pad( bit\n                                     , type_dag[CASE_A(dag, type_dag, pc)].bitSize\n                                     , type_dag[CASE_B(dag, type_dag, pc)].bitSize));\n\n        /* CONDITIONAL_TAIL_CALL(dag[pc].child[bit]); */\n        stack[dag[pc].child[bit]].return_to = get_tco_flag(&stack[pc]) ? stack[pc].return_to : pc;\n        set_tco_flag(&stack[dag[pc].child[bit]], get_tco_flag(&stack[pc]));\n\n        /* Remember the bit we peeked at for the case when we return. */\n        set_case_last_flag(&stack[pc], bit);\n\n        pc = dag[pc].child[bit];\n      } else {\n        /* BWD(1 + PADL(A,B) when bit = 0; BWD(1 + PADR(A,B) when bit = 1 */\n        backward(state.activeReadFrame, 1 + pad( get_case_last_flag(&stack[pc])\n                                      , type_dag[CASE_A(dag, type_dag, pc)].bitSize\n                                      , type_dag[CASE_B(dag, type_dag, pc)].bitSize));\n\n        /* RETURN; */\n        pc = stack[pc].return_to;\n      }\n      break;\n     case PAIR:\n      if (calling) {\n        /* CALL(dag[pc].child[0], false); */\n        stack[dag[pc].child[0]].return_to = pc;\n        set_tco_flag(&stack[dag[pc].child[0]], false);\n        pc = dag[pc].child[0];\n      } else {\n        /* TAIL_CALL(dag[pc].child[1], SAME_TCO); */\n        calling = true;\n        stack[dag[pc].child[1]].return_to = stack[pc].return_to;\n        set_tco_flag(&stack[dag[pc].child[1]], get_tco_flag(&stack[pc]));\n        pc = dag[pc].child[1];\n      }\n      break;\n     case DISCONNECT:\n      if (calling) {\n        /* NEW_FRAME(BITSIZE(WORD256 * A)) */\n        *(state.activeWriteFrame - 1) = initWriteFrame(type_dag[DISCONNECT_W256A(dag, type_dag, pc)].bitSize,\n                                                       state.activeWriteFrame->edge);\n        state.activeWriteFrame--;\n\n        /* WRITE_HASH(dag[dag[pc].child[1]].cmr) */\n        write32s(state.activeWriteFrame, dag[dag[pc].child[1]].cmr.s, 8);\n\n        /* COPY(BITSIZE(A)) */\n        simplicity_copyBits(state.activeWriteFrame, state.activeReadFrame, type_dag[DISCONNECT_A(dag, type_dag, pc)].bitSize);\n\n        if (get_tco_flag(&stack[pc])) {\n          /* DROP_FRAME */\n          state.activeReadFrame--;\n        }\n\n        /* MOVE_FRAME */\n        simplicity_debug_assert(0 == state.activeWriteFrame->offset);\n        memmove( state.activeReadFrame->edge, state.activeWriteFrame->edge\n               , (size_t)((state.activeWriteFrame + 1)->edge - state.activeWriteFrame->edge) * sizeof(UWORD)\n               );\n        *(state.activeReadFrame + 1) = initReadFrame(type_dag[DISCONNECT_W256A(dag, type_dag, pc)].bitSize,\n                                                     state.activeReadFrame->edge);\n        state.activeWriteFrame++; state.activeReadFrame++;\n\n        /* NEW_FRAME(BITSIZE(B * C)) */\n        *(state.activeWriteFrame - 1) = initWriteFrame(type_dag[DISCONNECT_BC(dag, type_dag, pc)].bitSize,\n                                                       state.activeWriteFrame->edge);\n        state.activeWriteFrame--;\n\n        /* CALL(dag[pc].child[0], true) */\n        stack[dag[pc].child[0]].return_to = pc;\n        set_tco_flag(&stack[dag[pc].child[0]], true);\n        pc = dag[pc].child[0];\n      } else {\n        /* MOVE_FRAME */\n        simplicity_debug_assert(0 == state.activeWriteFrame->offset);\n        memmove( state.activeReadFrame->edge, state.activeWriteFrame->edge\n               , (size_t)((state.activeWriteFrame + 1)->edge - state.activeWriteFrame->edge) * sizeof(UWORD)\n               );\n        *(state.activeReadFrame + 1) = initReadFrame(type_dag[DISCONNECT_BC(dag, type_dag, pc)].bitSize,\n                                                     state.activeReadFrame->edge);\n        state.activeWriteFrame++; state.activeReadFrame++;\n\n        /* COPY(BITSIZE(B)) */\n        simplicity_copyBits(state.activeWriteFrame, state.activeReadFrame, type_dag[DISCONNECT_B(dag, type_dag, pc)].bitSize);\n\n        /* FWD(BITSIZE(B)) */\n        forward(state.activeReadFrame, type_dag[DISCONNECT_B(dag, type_dag, pc)].bitSize);\n\n        /* TAIL_CALL(dag[pc].child[1], true) */\n        calling = true;\n        stack[dag[pc].child[1]].return_to = stack[pc].return_to;\n        set_tco_flag(&stack[dag[pc].child[1]], true);\n        pc = dag[pc].child[1];\n      }\n      break;\n     case INJL:\n     case INJR:\n      /* WRITE(0) when INJL; WRITE(1) when INJR */\n      writeBit(state.activeWriteFrame, INJR == dag[pc].tag);\n\n      /* SKIP(PADL(A,B)) when INJL; SKIP(PADR(A,B)) when INJR */\n      skip(state.activeWriteFrame, pad( INJR == dag[pc].tag\n                                 , type_dag[INJ_B(dag, type_dag, pc)].bitSize\n                                 , type_dag[INJ_C(dag, type_dag, pc)].bitSize));\n      /*@fallthrough@*/\n     case TAKE:\n      simplicity_debug_assert(calling);\n      /* TAIL_CALL(dag[pc].child[0], SAME_TCO); */\n      stack[dag[pc].child[0]].return_to = stack[pc].return_to;\n      set_tco_flag(&stack[dag[pc].child[0]], get_tco_flag(&stack[pc]));\n      pc = dag[pc].child[0];\n      break;\n     case DROP:\n      if (calling) {\n        /* FWD(BITSIZE(A)) */\n        forward(state.activeReadFrame, type_dag[PROJ_A(dag, type_dag, pc)].bitSize);\n\n        /* CONDITIONAL_TAIL_CALL(dag[pc].child[0]); */\n        stack[dag[pc].child[0]].return_to = get_tco_flag(&stack[pc]) ? stack[pc].return_to : pc;\n        set_tco_flag(&stack[dag[pc].child[0]], get_tco_flag(&stack[pc]));\n        pc = dag[pc].child[0];\n      } else {\n        /* BWD(BITSIZE(A)) */\n        backward(state.activeReadFrame, type_dag[PROJ_A(dag, type_dag, pc)].bitSize);\n\n        /* RETURN; */\n        pc = stack[pc].return_to;\n      }\n      break;\n     case IDEN:\n     case WORD:\n     case WITNESS:\n      if (IDEN == tag) {\n        /* COPY(BITSIZE(A)) */\n        simplicity_copyBits(state.activeWriteFrame, state.activeReadFrame, type_dag[IDEN_A(dag, type_dag, pc)].bitSize);\n      } else {\n        writeValue(state.activeWriteFrame, &dag[pc].compactValue, dag[pc].targetType, type_dag);\n      }\n      /*@fallthrough@*/\n     case UNIT:\n      simplicity_debug_assert(calling);\n      if (get_tco_flag(&stack[pc])) {\n        /* DROP_FRAME */\n        state.activeReadFrame--;\n      }\n\n      /* RETURN; */\n      calling = false;\n      pc = stack[pc].return_to;\n      break;\n     case HIDDEN: return SIMPLICITY_ERR_EXEC_ASSERT; /* We have failed an 'ASSERTL' or 'ASSERTR' combinator. */\n     case JET:\n      /* Jets (and primitives) should already have been processed by dag[i].jet already */\n      SIMPLICITY_UNREACHABLE;\n    }\n  }\n  simplicity_assert(pc == len);\n\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* Inspects the stack contents after a successful runTCO execution to verify anti-DOS properties:\n * 1. If 'checks' includes 'CHECK_EXEC', then check that all non-HIDDEN dag nodes were executed at least once.\n * 2. If 'checks' includes 'CHECK_CASE', then check that both branches of every CASE node were executed.\n *\n * If these are violated, it means that the dag had unpruned nodes.\n *\n * Returns 'SIMPLICITY_ERR_ANTIDOS' if any of the anti-DOS checks fail.\n * Otherwise returns 'SIMPLICITY_NO_ERR'.\n *\n * Precondition: call stack[len];\n *               dag_node dag[len];\n */\nstatic simplicity_err antiDos(flags_type checks, const call* stack, const dag_node* dag, size_t len) {\n  static_assert(CHECK_EXEC == FLAG_EXEC, \"CHECK_EXEC does not match FLAG_EXEC\");\n  static_assert(CHECK_CASE == (FLAG_CASE_LEFT | FLAG_CASE_RIGHT), \"CHECK_CASE does not match FLAG_CASE\");\n  simplicity_assert(CHECK_CASE == (checks & CHECK_CASE) || 0 == (checks & CHECK_CASE));\n\n  if (!checks) return SIMPLICITY_NO_ERROR;\n\n  for(size_t i = 0; i < len; ++i) {\n    /* All non-HIDDEN nodes must be executed at least once. */\n    /* Both branches of every case combinator must be executed at least once. */\n    flags_type test_flags = (HIDDEN != dag[i].tag ? CHECK_EXEC : 0)\n                          | (CASE == dag[i].tag ? CHECK_CASE : 0);\n\n    /* Only enable requested checks */\n    test_flags &= checks;\n    if (test_flags != (test_flags & stack[i].flags)) {\n      return SIMPLICITY_ERR_ANTIDOS;\n    }\n  }\n\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* This structure is used by the static analysis that computes bounds on the working memory that suffices for\n * the Simplicity interpreter, and the CPU cost bounds in milliWU\n */\ntypedef struct boundsAnalysis {\n  ubounded extraCellsBound[2];\n  ubounded extraUWORDBound[2];\n  ubounded extraFrameBound[2]; /* extraFrameBound[0] is for TCO off and extraFrameBound[1] is for TCO on */\n  ubounded cost; /* milliWU */\n} boundsAnalysis;\n\n/* :TODO: Document extraFrameBound in the Tech Report (and implement it in Haskell) */\n/* Given a well-typed dag representing a Simplicity expression, compute the memory and CPU requirements for evaluation.\n *\n * If 'malloc' fails, then returns SIMPLICITY_ERR_MALLOC.\n * When maxCells < UBOUNDED_MAX, if the bounds on the number of cells needed for evaluation of 'dag' on an idealized Bit Machine exceeds maxCells,\n * then return SIMPLICITY_ERR_EXEC_MEMORY.\n * When maxCost < UBOUNDED_MAX, if the bounds on the dag's CPU cost exceeds 'maxCost', then return SIMPLICITY_ERR_EXEC_BUDGET.\n * If the bounds on the dag's CPU cost is less than or equal to 'minCost', then return SIMPLICITY_ERR_OVERWEIGHT.\n * Otherwise returns SIMPLICITY_NO_ERR.\n *\n * Precondition: NULL != cellsBound\n *               NULL != UWORDBound\n *               NULL != frameBound\n *               NULL != costBound\n *               dag_node dag[len] and 'dag' is well-typed with 'type_dag'.\n * Postcondition: if the result is 'SIMPLICITY_NO_ERR'\n *                then if maxCost < UBOUNDED_MAX then '*costBound' bounds the dag's CPU cost measured in milli weight units\n *                 and if maxCells < UBOUNDED_MAX then '*cellsBound' bounds the number of cells needed for evaluation of 'dag' on an idealized Bit Machine\n *                 and if maxCells < UBOUNDED_MAX then '*UWORDBound' bounds the number of UWORDs needed for the frames during evaluation of 'dag'\n *                 and if maxCells < UBOUNDED_MAX then '*frameBound' bounds the number of stack frames needed during execution of 'dag'.\n */\nsimplicity_err simplicity_analyseBounds( ubounded *cellsBound, ubounded *UWORDBound, ubounded *frameBound, ubounded *costBound\n                                       , ubounded maxCells, ubounded minCost, ubounded maxCost, const dag_node* dag, const type* type_dag, const size_t len) {\n  static_assert(DAG_LEN_MAX <= SIZE_MAX / sizeof(boundsAnalysis), \"bound array too large.\");\n  static_assert(1 <= DAG_LEN_MAX, \"DAG_LEN_MAX is zero.\");\n  static_assert(DAG_LEN_MAX - 1 <= UINT32_MAX, \"bound array index does not fit in uint32_t.\");\n  simplicity_assert(1 <= len);\n  simplicity_assert(len <= DAG_LEN_MAX);\n  boundsAnalysis* bound = simplicity_malloc(len * sizeof(boundsAnalysis));\n  if (!bound) return SIMPLICITY_ERR_MALLOC;\n\n  /* Sum up the total costs.\n   * The computations for extraCells and cost are clipped at UBOUNDED_MAX,\n   * so a result of UBOUNDED_MAX means \"UBOUNDED_MAX or larger\".\n   *\n   * The extraUWORD computation may produce unsigned overflow.\n   * However the extraUWORD true value is less than the true value of extraCells.\n   * As long as extraCells is strictly less than UBOUNDED_MAX, extraUWORD will be too.\n   *\n   * The extraFrame computation is bounded by DAG_LEN, and cannot overflow.\n   */\n  for (size_t i = 0; i < len; ++i) {\n    switch (dag[i].tag) {\n     case ASSERTL:\n     case ASSERTR:\n     case CASE:\n      bound[i].extraCellsBound[0] = bounded_max( bound[dag[i].child[0]].extraCellsBound[0]\n                                       , bound[dag[i].child[1]].extraCellsBound[0] );\n      bound[i].extraCellsBound[1] = bounded_max( bound[dag[i].child[0]].extraCellsBound[1]\n                                       , bound[dag[i].child[1]].extraCellsBound[1] );\n\n      bound[i].extraUWORDBound[0] = bounded_max( bound[dag[i].child[0]].extraUWORDBound[0]\n                                       , bound[dag[i].child[1]].extraUWORDBound[0] );\n      bound[i].extraUWORDBound[1] = bounded_max( bound[dag[i].child[0]].extraUWORDBound[1]\n                                       , bound[dag[i].child[1]].extraUWORDBound[1] );\n\n      bound[i].extraFrameBound[0] = bounded_max( bound[dag[i].child[0]].extraFrameBound[0]\n                                       , bound[dag[i].child[1]].extraFrameBound[0] );\n      bound[i].extraFrameBound[1] = bounded_max( bound[dag[i].child[0]].extraFrameBound[1]\n                                       , bound[dag[i].child[1]].extraFrameBound[1] );\n      bound[i].cost = bounded_add(overhead, bounded_max( bound[dag[i].child[0]].cost\n                                               , bound[dag[i].child[1]].cost ));\n      break;\n     case DISCONNECT:\n      bound[i].extraCellsBound[1] = type_dag[DISCONNECT_W256A(dag, type_dag, i)].bitSize;\n      bound[i].extraCellsBound[0] = bounded_max(\n        bounded_add( type_dag[DISCONNECT_BC(dag, type_dag, i)].bitSize\n                   , bounded_max( bounded_add(bound[i].extraCellsBound[1], bound[dag[i].child[0]].extraCellsBound[1])\n                                , bounded_max(bound[dag[i].child[0]].extraCellsBound[0], bound[dag[i].child[1]].extraCellsBound[1]))),\n        bound[dag[i].child[1]].extraCellsBound[0]);\n      bound[i].extraUWORDBound[1] = (ubounded)ROUND_UWORD(type_dag[DISCONNECT_W256A(dag, type_dag, i)].bitSize);\n      bound[i].extraUWORDBound[0] = bounded_max(\n          (ubounded)ROUND_UWORD(type_dag[DISCONNECT_BC(dag, type_dag, i)].bitSize) +\n          bounded_max( bound[i].extraUWORDBound[1] + bound[dag[i].child[0]].extraUWORDBound[1]\n             , bounded_max(bound[dag[i].child[0]].extraUWORDBound[0], bound[dag[i].child[1]].extraUWORDBound[1])),\n        bound[dag[i].child[1]].extraUWORDBound[0]);\n\n      bound[i].extraFrameBound[1] = bounded_max( bound[dag[i].child[0]].extraFrameBound[1] + 1\n                                       , bound[dag[i].child[1]].extraFrameBound[1]);\n      bound[i].extraFrameBound[0] = bound[i].extraFrameBound[1] + 1;\n      bound[i].cost = bounded_add(overhead\n                    , bounded_add(type_dag[DISCONNECT_W256A(dag, type_dag, i)].bitSize\n                    , bounded_add(type_dag[DISCONNECT_W256A(dag, type_dag, i)].bitSize /* counted twice because the frame is both filled in and moved. */\n                    , bounded_add(type_dag[DISCONNECT_BC(dag, type_dag, i)].bitSize\n                    , bounded_add(type_dag[DISCONNECT_B(dag, type_dag, i)].bitSize\n                    , bounded_add(bound[dag[i].child[0]].cost, bound[dag[i].child[1]].cost))))));\n      break;\n     case COMP:\n      bound[i].extraCellsBound[0] = bounded_max( bounded_add( type_dag[COMP_B(dag, type_dag, i)].bitSize\n                                                            , bounded_max( bound[dag[i].child[0]].extraCellsBound[0]\n                                                                         , bound[dag[i].child[1]].extraCellsBound[1] ))\n                                               , bound[dag[i].child[1]].extraCellsBound[0] );\n      bound[i].extraCellsBound[1] = bounded_add( type_dag[COMP_B(dag, type_dag, i)].bitSize\n                                               , bound[dag[i].child[0]].extraCellsBound[1] );\n      bound[i].extraUWORDBound[0] = bounded_max( (ubounded)ROUND_UWORD(type_dag[COMP_B(dag, type_dag, i)].bitSize) +\n                                         bounded_max( bound[dag[i].child[0]].extraUWORDBound[0]\n                                            , bound[dag[i].child[1]].extraUWORDBound[1] )\n                                       , bound[dag[i].child[1]].extraUWORDBound[0] );\n      bound[i].extraUWORDBound[1] = (ubounded)ROUND_UWORD(type_dag[COMP_B(dag, type_dag, i)].bitSize)\n                                  + bound[dag[i].child[0]].extraUWORDBound[1];\n\n      bound[i].extraFrameBound[0] = bounded_max( bound[dag[i].child[0]].extraFrameBound[0]\n                                       , bound[dag[i].child[1]].extraFrameBound[1] )\n                                  + 1;\n      bound[i].extraFrameBound[1] = bounded_max( bound[dag[i].child[0]].extraFrameBound[1] + 1\n                                       , bound[dag[i].child[1]].extraFrameBound[1] );\n      bound[i].cost = bounded_add(overhead\n                    , bounded_add(type_dag[COMP_B(dag, type_dag, i)].bitSize\n                    , bounded_add(bound[dag[i].child[0]].cost, bound[dag[i].child[1]].cost)));\n      break;\n     case PAIR:\n      bound[i].extraCellsBound[0] = bound[dag[i].child[1]].extraCellsBound[0];\n      bound[i].extraCellsBound[1] = bounded_max( bound[dag[i].child[0]].extraCellsBound[0]\n                                       , bounded_max( bound[dag[i].child[0]].extraCellsBound[1]\n                                            , bound[dag[i].child[1]].extraCellsBound[1] ));\n\n      bound[i].extraUWORDBound[0] = bound[dag[i].child[1]].extraUWORDBound[0];\n      bound[i].extraUWORDBound[1] = bounded_max( bound[dag[i].child[0]].extraUWORDBound[0]\n                                       , bounded_max( bound[dag[i].child[0]].extraUWORDBound[1]\n                                            , bound[dag[i].child[1]].extraUWORDBound[1] ));\n\n      bound[i].extraFrameBound[0] = bounded_max( bound[dag[i].child[0]].extraFrameBound[0]\n                                       , bound[dag[i].child[1]].extraFrameBound[0] );\n      bound[i].extraFrameBound[1] = bounded_max( bound[dag[i].child[0]].extraFrameBound[0]\n                                       , bound[dag[i].child[1]].extraFrameBound[1] );\n      bound[i].cost = bounded_add(overhead, bounded_add( bound[dag[i].child[0]].cost\n                                                       , bound[dag[i].child[1]].cost ));\n      break;\n     case INJL:\n     case INJR:\n     case TAKE:\n     case DROP:\n      bound[i].extraCellsBound[0] = bound[dag[i].child[0]].extraCellsBound[0];\n      bound[i].extraCellsBound[1] = bound[dag[i].child[0]].extraCellsBound[1];\n\n      bound[i].extraUWORDBound[0] = bound[dag[i].child[0]].extraUWORDBound[0];\n      bound[i].extraUWORDBound[1] = bound[dag[i].child[0]].extraUWORDBound[1];\n\n      bound[i].extraFrameBound[0] = bound[dag[i].child[0]].extraFrameBound[0];\n      bound[i].extraFrameBound[1] = bound[dag[i].child[0]].extraFrameBound[1];\n      bound[i].cost = bounded_add(overhead, bound[dag[i].child[0]].cost);\n      break;\n     case IDEN:\n     case UNIT:\n     case HIDDEN:\n     case WITNESS:\n     case JET:\n     case WORD:\n      bound[i].extraCellsBound[0] = bound[i].extraCellsBound[1] = 0;\n      bound[i].extraUWORDBound[0] = bound[i].extraUWORDBound[1] = 0;\n      bound[i].extraFrameBound[0] = bound[i].extraFrameBound[1] = 0;\n      bound[i].cost = IDEN == dag[i].tag ? bounded_add(overhead, type_dag[IDEN_A(dag, type_dag, i)].bitSize)\n                    : WITNESS == dag[i].tag || WORD == dag[i].tag ? bounded_add(overhead, type_dag[dag[i].targetType].bitSize)\n                    : JET == dag[i].tag ? bounded_add(overhead, dag[i].cost)\n                    : HIDDEN == dag[i].tag ? 0\n                    : overhead;\n    }\n  }\n\n  {\n    const ubounded inputSize = type_dag[dag[len-1].sourceType].bitSize;\n    const ubounded outputSize = type_dag[dag[len-1].targetType].bitSize;\n    *cellsBound = bounded_add( bounded_add(inputSize, outputSize)\n                             , bounded_max(bound[len-1].extraCellsBound[0], bound[len-1].extraCellsBound[1])\n                             );\n    *UWORDBound = (ubounded)ROUND_UWORD(inputSize) + (ubounded)ROUND_UWORD(outputSize)\n                + bounded_max(bound[len-1].extraUWORDBound[0], bound[len-1].extraUWORDBound[1]);\n    *frameBound = bound[len-1].extraFrameBound[0] + 2; /* add the initial input and output frames to the count. */\n    *costBound = bound[len-1].cost;\n  }\n  simplicity_free(bound);\n  /* Note that the cellsBound and costBound computations have been clipped at UBOUNDED_MAX.\n   * Therefore setting maxCells or maxCost to UBOUNDED_MAX will disable the corresponding error check.\n   */\n  return (maxCells < *cellsBound) ? SIMPLICITY_ERR_EXEC_MEMORY\n       : (maxCost < *costBound) ? SIMPLICITY_ERR_EXEC_BUDGET\n       : (*costBound <= minCost) ? SIMPLICITY_ERR_OVERWEIGHT\n       : SIMPLICITY_NO_ERROR;\n}\n\n/* Run the Bit Machine on the well-typed Simplicity expression 'dag[len]' of type A |- B.\n * If bitSize(A) > 0, initialize the active read frame's data with 'input[ROUND_UWORD(bitSize(A))]'.\n *\n * If malloc fails, returns 'SIMPLICITY_ERR_MALLOC'.\n * When a budget is given, if static analysis results determines the bound on cpu requirements exceed the allowed budget, returns 'SIMPLICITY_ERR_EXEC_BUDGET'.\n * If static analysis results determines the bound on cpu requirements is less than or equal to the minCost, returns 'SIMPLICITY_ERR_OVERWEIGHT'.\n * If static analysis results determines the bound on memory allocation requirements exceed the allowed limits, returns 'SIMPLICITY_ERR_EXEC_MEMORY'.\n * If during execution some jet execution fails, returns 'SIMPLICITY_ERR_EXEC_JET'.\n * If during execution some 'assertr' or 'assertl' combinator fails, returns 'SIMPLICITY_ERR_EXEC_ASESRT'.\n *\n * Note that minCost and budget parameters are in WU, while the cost analysis will be performed in milliWU.\n * Thus the minCost and budget specify a half open interval (minCost, budget] of acceptable cost values in milliWU.\n * Setting minCost to 0 effectively disables the minCost check as every Simplicity program has a non-zero cost analysis.\n *\n * If none of the above conditions fail and bitSize(B) > 0, then a copy the final active write frame's data is written to 'output[roundWord(bitSize(B))]'.\n *\n * If 'anti_dos_checks' includes the 'CHECK_EXEC' flag, and not every non-HIDDEN dag node is executed, returns 'SIMPLICITY_ERR_ANTIDOS'\n * If 'anti_dos_checks' includes the 'CHECK_CASE' flag, and not every case node has both branches executed, returns 'SIMPLICITY_ERR_ANTIDOS'\n *\n * Otherwise 'SIMPLICITY_NO_ERROR' is returned.\n *\n * Precondition: dag_node dag[len] and 'dag' is well-typed with 'type_dag' for an expression of type A |- B;\n *               bitSize(A) == 0 or UWORD input[ROUND_UWORD(bitSize(A))];\n *               bitSize(B) == 0 or UWORD output[ROUND_UWORD(bitSize(B))];\n *               if NULL != budget then *budget <= BUDGET_MAX\n *               if NULL != budget then minCost <= *budget\n *               minCost <= BUDGET_MAX\n *               if 'dag[len]' represents a Simplicity expression with primitives then 'NULL != env';\n */\nsimplicity_err simplicity_evalTCOExpression( flags_type anti_dos_checks, UWORD* output, const UWORD* input\n                                           , const dag_node* dag, type* type_dag, size_t len, ubounded minCost, const ubounded* budget, const txEnv* env\n                                           ) {\n  simplicity_assert(1 <= len);\n  simplicity_assert(len <= DAG_LEN_MAX);\n  if (budget) {\n    simplicity_assert(*budget <= BUDGET_MAX);\n    simplicity_assert(minCost <= *budget);\n  }\n  simplicity_assert(minCost <= BUDGET_MAX);\n  static_assert(1 <= UBOUNDED_MAX, \"UBOUNDED_MAX is zero.\");\n  static_assert(BUDGET_MAX <= (UBOUNDED_MAX - 1) / 1000, \"BUDGET_MAX is too large.\");\n  static_assert(CELLS_MAX < UBOUNDED_MAX, \"CELLS_MAX is too large.\");\n  ubounded cellsBound, UWORDBound, frameBound, costBound;\n  simplicity_err result = simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, CELLS_MAX, minCost*1000, budget ? *budget*1000 : UBOUNDED_MAX, dag, type_dag, len);\n  if (!IS_OK(result)) return result;\n\n  /* frameBound is at most 2*len. */\n  static_assert(DAG_LEN_MAX <= UBOUNDED_MAX / 2, \"2*DAG_LEN_MAX does not fit in size_t.\");\n  simplicity_assert(frameBound <= 2*len);\n\n  /* UWORDBound * UWORD_BIT, the number of bits actually allocacted, is at most the cellBound count plus (worse case) padding bits in each frame. */\n  static_assert(1 <= UWORD_BIT, \"UWORD_BIT is zero.\");\n  static_assert(2*DAG_LEN_MAX <= (SIZE_MAX - CELLS_MAX) / (UWORD_BIT - 1), \"cellsBound + frameBound*(UWORD_BIT - 1) doesn't fit in size_t.\");\n  simplicity_assert(UWORDBound <= (cellsBound + frameBound*(UWORD_BIT - 1)) / UWORD_BIT);\n\n  /* UWORDBound, is also at most the cellsBound, with an entire UWORD per cell (the rest of the UWORD being padding). */\n  simplicity_assert(UWORDBound <= cellsBound);\n\n  /* We use calloc for 'cells' because the frame data must be initialized before we can perform bitwise operations. */\n  static_assert(CELLS_MAX - 1 <= UINT32_MAX, \"cells array index does not fit in uint32_t.\");\n  UWORD* cells = simplicity_calloc(UWORDBound ? UWORDBound : 1, sizeof(UWORD));\n  static_assert(2*DAG_LEN_MAX <= SIZE_MAX / sizeof(frameItem), \"frames array does not fit in size_t.\");\n  static_assert(1 <= DAG_LEN_MAX, \"DAG_LEN_MAX is zero.\");\n  static_assert(2*DAG_LEN_MAX - 1 <= UINT32_MAX, \"frames array index does not fit in uint32_t.\");\n  frameItem* frames = simplicity_malloc(frameBound * sizeof(frameItem));\n  call* stack = simplicity_calloc(len, sizeof(call));\n\n  result = cells && frames && stack ? SIMPLICITY_NO_ERROR : SIMPLICITY_ERR_MALLOC;\n  if (IS_OK(result)) {\n    const ubounded inputSize = type_dag[dag[len-1].sourceType].bitSize;\n    const ubounded outputSize = type_dag[dag[len-1].targetType].bitSize;\n    simplicity_assert(NULL != input || 0 == inputSize);\n    if (inputSize) memcpy(cells, input, ROUND_UWORD(inputSize) * sizeof(UWORD));\n\n    evalState state =\n      { .activeReadFrame = frames\n      , .activeWriteFrame = frames + (frameBound - 1)\n      };\n    *(state.activeReadFrame) = initReadFrame(inputSize, cells);\n    *(state.activeWriteFrame) = initWriteFrame(outputSize, cells + UWORDBound);\n\n    result = runTCO(state, stack, dag, type_dag, len, env);\n\n    if (IS_OK(result)) {\n      simplicity_assert(NULL != output || 0 == outputSize);\n      if (outputSize) memcpy(output, state.activeWriteFrame->edge, ROUND_UWORD(outputSize) * sizeof(UWORD));\n\n      result = antiDos(anti_dos_checks, stack, dag, len);\n    }\n  }\n\n  simplicity_free(stack);\n  simplicity_free(frames);\n  simplicity_free(cells);\n  return result;\n}\n"
  },
  {
    "path": "C/eval.h",
    "content": "/* This module provides functions for evaluating Simplicity programs and expressions.\n */\n#ifndef SIMPLICITY_EVAL_H\n#define SIMPLICITY_EVAL_H\n\n#include \"bounded.h\"\n#include \"dag.h\"\n\ntypedef unsigned char flags_type;\n#define CHECK_NONE 0\n#define CHECK_EXEC 0x10\n#define CHECK_CASE 0x60\n#define CHECK_ALL ((flags_type)(-1))\n\n/* Given a well-typed dag representing a Simplicity expression, compute the memory and CPU requirements for evaluation.\n *\n * If 'malloc' fails, then returns SIMPLICITY_ERR_MALLOC.\n * When maxCells < UBOUNDED_MAX, if the bounds on the number of cells needed for evaluation of 'dag' on an idealized Bit Machine exceeds maxCells,\n * then return SIMPLICITY_ERR_EXEC_MEMORY.\n * When maxCost < UBOUNDED_MAX, if the bounds on the dag's CPU cost exceeds 'maxCost', then return SIMPLICITY_ERR_EXEC_BUDGET.\n * If the bounds on the dag's CPU cost is less than or equal to 'minCost', then return SIMPLICITY_ERR_OVERWEIGHT.\n * Otherwise returns SIMPLICITY_NO_ERR.\n *\n * Precondition: NULL != cellsBound\n *               NULL != UWORDBound\n *               NULL != frameBound\n *               NULL != costBound\n *               dag_node dag[len] and 'dag' is well-typed with 'type_dag'.\n * Postcondition: if the result is 'SIMPLICITY_NO_ERR'\n *                then if maxCost < UBOUNDED_MAX then '*costBound' bounds the dag's CPU cost measured in milli weight units\n *                 and if maxCells < UBOUNDED_MAX then '*cellsBound' bounds the number of cells needed for evaluation of 'dag' on an idealized Bit Machine\n *                 and if maxCells < UBOUNDED_MAX then '*UWORDBound' bounds the number of UWORDs needed for the frames during evaluation of 'dag'\n *                 and if maxCells < UBOUNDED_MAX then '*frameBound' bounds the number of stack frames needed during execution of 'dag'.\n */\nsimplicity_err simplicity_analyseBounds( ubounded *cellsBound, ubounded *UWORDBound, ubounded *frameBound, ubounded *costBound\n                                       , ubounded maxCells, ubounded minCost, ubounded maxCost, const dag_node* dag, const type* type_dag, const size_t len);\n\n/* Run the Bit Machine on the well-typed Simplicity expression 'dag[len]' of type A |- B.\n * If bitSize(A) > 0, initialize the active read frame's data with 'input[ROUND_UWORD(bitSize(A))]'.\n *\n * If malloc fails, returns 'SIMPLICITY_ERR_MALLOC'.\n * When a budget is given, if static analysis results determines the bound on cpu requirements exceed the allowed budget, returns 'SIMPLICITY_ERR_EXEC_BUDGET'.\n * If static analysis results determines the bound on cpu requirements is less than or equal to the minCost, returns 'SIMPLICITY_ERR_OVERWEIGHT'.\n * If static analysis results determines the bound on memory allocation requirements exceed the allowed limits, returns 'SIMPLICITY_ERR_EXEC_MEMORY'.\n * If during execution some jet execution fails, returns 'SIMPLICITY_ERR_EXEC_JET'.\n * If during execution some 'assertr' or 'assertl' combinator fails, returns 'SIMPLICITY_ERR_EXEC_ASESRT'.\n *\n * Note that minCost and budget parameters are in WU, while the cost analysis will be performed in milliWU.\n * Thus the minCost and budget specify a half open interval (minCost, budget] of acceptable cost values in milliWU.\n * Setting minCost to 0 effectively disables the minCost check as every Simplicity program has a non-zero cost analysis.\n *\n * If none of the above conditions fail and bitSize(B) > 0, then a copy the final active write frame's data is written to 'output[roundWord(bitSize(B))]'.\n *\n * If 'anti_dos_checks' includes the 'CHECK_EXEC' flag, and not every non-HIDDEN dag node is executed, returns 'SIMPLICITY_ERR_ANTIDOS'\n * If 'anti_dos_checks' includes the 'CHECK_CASE' flag, and not every case node has both branches executed, returns 'SIMPLICITY_ERR_ANTIDOS'\n *\n * Otherwise 'SIMPLICITY_NO_ERROR' is returned.\n *\n * Precondition: dag_node dag[len] and 'dag' is well-typed with 'type_dag' for an expression of type A |- B;\n *               bitSize(A) == 0 or UWORD input[ROUND_UWORD(bitSize(A))];\n *               bitSize(B) == 0 or UWORD output[ROUND_UWORD(bitSize(B))];\n *               if NULL != budget then *budget <= BUDGET_MAX\n *               if NULL != budget then minCost <= *budget\n *               minCost <= BUDGET_MAX\n *               if 'dag[len]' represents a Simplicity expression with primitives then 'NULL != env';\n */\nsimplicity_err simplicity_evalTCOExpression( flags_type anti_dos_checks, UWORD* output, const UWORD* input\n                                           , const dag_node* dag, type* type_dag, size_t len, ubounded minCost, const ubounded* budget, const txEnv* env\n                                           );\n\n/* Run the Bit Machine on the well-typed Simplicity program 'dag[len]'.\n *\n * If malloc fails, returns 'SIMPLICITY_ERR_MALLOC'.\n * When a budget is given, if static analysis results determines the bound on cpu requirements exceed the allowed budget, returns 'SIMPLICITY_ERR_EXEC_BUDGET'.\n * If static analysis results determines the bound on cpu requirements is less than or equal to the minCost, returns 'SIMPLICITY_ERR_OVERWEIGHT'.\n * If static analysis results determines the bound on memory allocation requirements exceed the allowed limits, returns 'SIMPLICITY_ERR_EXEC_MEMORY'.\n * If during execution some jet execution fails, returns 'SIMPLICITY_ERR_EXEC_JET'.\n * If during execution some 'assertr' or 'assertl' combinator fails, returns 'SIMPLICITY_ERR_EXEC_ASESRT'.\n *\n * Note that minCost and budget parameters are in WU, while the cost analysis will be performed in milliWU.\n * Thus the minCost and budget specify a half open interval (minCost, budget] of acceptable cost values in milliWU.\n * Setting minCost to 0 effectively disables the minCost check as every Simplicity program has a non-zero cost analysis.\n *\n * If not every non-HIDDEN dag node is executed, returns 'SIMPLICITY_ERR_ANTIDOS'\n * If not every case node has both branches executed, returns 'SIMPLICITY_ERR_ANTIDOS'\n *\n * Otherwise 'SIMPLICITY_NO_ERROR' is returned.\n *\n * Precondition: dag_node dag[len] and 'dag' is well-typed with 'type_dag' for an expression of type ONE |- ONE;\n *               if NULL != budget then *budget <= BUDGET_MAX\n *               if NULL != budget then minCost <= *budget\n *               minCost <= BUDGET_MAX\n *               if 'dag[len]' represents a Simplicity expression with primitives then 'NULL != env';\n */\nstatic inline simplicity_err evalTCOProgram(const dag_node* dag, type* type_dag, size_t len, ubounded minCost, const ubounded* budget, const txEnv* env) {\n  return simplicity_evalTCOExpression(CHECK_ALL, NULL, NULL, dag, type_dag, len, minCost, budget, env);\n}\n#endif\n"
  },
  {
    "path": "C/frame.c",
    "content": "#include \"frame.h\"\n\n#define READ_(bits,size)                                                    \\\n/* Given a read frame, return the value of the bits cells after the cursor and advance the frame's cursor by bits##.          \\\n * The cell values are returned with the first cell in the MSB of the result and the last cell in the LSB of the result.      \\\n *                                                                                                                            \\\n * Precondition: '*frame' is a valid read frame for bits more cells.                                                          \\\n */                                                                                                                           \\\nuint_fast##size##_t simplicity_read##bits(frameItem* frame) {                                                                 \\\n  static_assert(bits <= size, \"Return type too small to hold the requested number of bits.\");                                 \\\n  uint_fast##size##_t result = 0;                                                                                             \\\n  /* Pointers to the UWORD of the read frame that contains the frame's cursor (or is immediately after the cursor). */        \\\n  UWORD* frame_ptr = frame->edge - 1 - frame->offset / UWORD_BIT;                                                             \\\n  /* The specific bit within the above UWORD that is immediately in front of the cursor.                                      \\\n   * That bit is specifically '1 << (frame_shift - 1)'.                                                                       \\\n   */                                                                                                                         \\\n  size_t frame_shift = UWORD_BIT - (frame->offset % UWORD_BIT);                                                               \\\n  size_t n = bits;                                                                                                            \\\n  if (frame_shift < n) {                                                                                                      \\\n    /* We may only want part of the LSBs from the read frame's current UWORD.                                                 \\\n     * Copy that data to 'x', and move the frame_ptr to the frame's next UWORD.                                               \\\n     */                                                                                                                       \\\n    result |= (uint_fast##size##_t)((uint_fast##size##_t)LSBkeep(*frame_ptr, frame_shift) << (n - frame_shift));              \\\n    frame->offset += frame_shift;                                                                                             \\\n    n -= frame_shift;                                                                                                         \\\n    frame_shift = UWORD_BIT;                                                                                                  \\\n    frame_ptr--;                                                                                                              \\\n    while (UWORD_BIT < n) {                                                                                                   \\\n      /* Copy the entire read frame's current UWORD to 'x', and move the frame_ptr to the frame's next UWORD. */              \\\n      result |= (uint_fast##size##_t)((uint_fast##size##_t)(*frame_ptr) << (n - UWORD_BIT));                                  \\\n      frame->offset += UWORD_BIT;                                                                                             \\\n      n -= UWORD_BIT;                                                                                                         \\\n      frame_ptr--;                                                                                                            \\\n    }                                                                                                                         \\\n  }                                                                                                                           \\\n  /* We may only want part of the bits from the middle of the read frame's current UWORD.                                     \\\n   * Copy that data to fill the remainder of 'x'.                                                                             \\\n   */                                                                                                                         \\\n  result |= (uint_fast##size##_t)(LSBkeep((UWORD)(*frame_ptr >> (frame_shift - n)), n));                                      \\\n  frame->offset += n;                                                                                                         \\\n  return result;                                                                                                              \\\n}\nREAD_(4,8)\nREAD_(8,8)\nREAD_(16,16)\nREAD_(32,32)\nREAD_(64,64)\n\n#define WRITE_(bits)                                                                                                          \\\n/* Given a write frame, set the value of the bits cells after the cursor and advance the frame's cursor by bits##.            \\\n * The first cell is set to the value of the MSB of 'x' and the last cell is set to the LSB of 'x'.                           \\\n * Cells in front of the cursor's final position may be overwritten.                                                          \\\n *                                                                                                                            \\\n * Precondition: '*frame' is a valid write frame for bits more cells.                                                         \\\n */                                                                                                                           \\\nvoid simplicity_write##bits(frameItem* frame, uint_fast##bits##_t x) {                                                        \\\n  /* Pointers to the UWORD of the write frame that contains the frame's cursor (or is immediately after the cursor). */       \\\n  UWORD* frame_ptr = frame->edge + (frame->offset - 1) / UWORD_BIT;                                                           \\\n  /* The specific bit within the above UWORD that is immediately in front of the cursor.                                      \\\n   * That bit is specifically '1 << (frame_shift - 1)'.                                                                       \\\n   */                                                                                                                         \\\n  size_t frame_shift = (frame->offset - 1) % UWORD_BIT + 1;                                                                   \\\n  size_t n = bits;                                                                                                            \\\n  if (frame_shift < n) {                                                                                                      \\\n    /* The write frame's current UWORD may be partially filled.                                                               \\\n     * Fill the rest of it with data from 'x', and move the frame_ptr to the frame's next UWORD.                              \\\n     */                                                                                                                       \\\n    *frame_ptr = LSBclear(*frame_ptr, frame_shift) | LSBkeep((UWORD)(x >> (n - frame_shift)), frame_shift);                   \\\n    frame->offset -= frame_shift;                                                                                             \\\n    n -= frame_shift;                                                                                                         \\\n    frame_shift = UWORD_BIT;                                                                                                  \\\n    frame_ptr--;                                                                                                              \\\n    while (UWORD_BIT < n) {                                                                                                   \\\n      /* Fill the write frame's entire current UWORD with data from 'x', and move the frame_ptr to the frame's next UWORD. */ \\\n      *frame_ptr = (UWORD)(x >> (n - UWORD_BIT));                                                                             \\\n      frame->offset -= UWORD_BIT;                                                                                             \\\n      n -= UWORD_BIT;                                                                                                         \\\n      frame_ptr--;                                                                                                            \\\n    }                                                                                                                         \\\n  }                                                                                                                           \\\n  /* The current write frame's UWORD may be partially filled.                                                                 \\\n   * Fill the UWORD with the last of the data from 'x', which may or may not be enough to fill the rest of the UWORD.         \\\n   */                                                                                                                         \\\n  *frame_ptr = (UWORD)(LSBclear(*frame_ptr, frame_shift) | (LSBkeep((UWORD)x, n) << (frame_shift - n)));                      \\\n  frame->offset -= n;                                                                                                         \\\n}\nWRITE_(8)\nWRITE_(16)\nWRITE_(32)\nWRITE_(64)\n\n/* Read bytes from a Simplicity buffer of type (TWO^8)^<2^(n+1) into 'buf'.\n * Set 'len' to the number of bytes read from the buffer.\n * Advance the 'src' frame to the end of the buffer type.\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: unsigned char buf[2^(n+1)-1];\n *               NULL != len;\n *               '*src' is a valid read frame for 8*(2^(n+1)-1)+n+1 more cells;\n *               0 <= n < 16\n */\nvoid simplicity_read_buffer8(unsigned char* buf, size_t* len, frameItem* src, int n) {\n  simplicity_debug_assert(0 <= n && n < 16);\n  *len = 0;\n\n  for (size_t i = (size_t)1 << n; 0 < i; i /= 2) {\n    if (readBit(src)) {\n      read8s(buf, i, src);\n      buf += i; *len += i;\n    } else {\n      forwardBits(src, i*8);\n    }\n  }\n}\n\n/* Write 'len' bytes to a Simplicity buffer of type (TWO^8)^<2^(n+1) from 'buf'.\n * Advance the 'dst' frame to the end of the buffer type.\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: '*dst' is a valid write frame for 8*(2^(n+1)-1)+n+1 more cells;\n *               unsigned char buf[len];\n *               len < 2^(n+1);\n *               0 <= n < 16;\n */\nvoid simplicity_write_buffer8(frameItem* dst, const unsigned char* buf, size_t len, int n) {\n  simplicity_debug_assert(0 <= n && n < 16);\n  simplicity_debug_assert(len < ((size_t)1<<(n+1)));\n  for (size_t i = (size_t)1 << n; 0 < i; i /= 2) {\n    if (writeBit(dst, i <= len)) {\n      write8s(dst, buf, i);\n      buf += i; len -= i;\n    } else {\n      skipBits(dst, i*8);\n    }\n  }\n}\n\n/* Read data from a Simplicity CTX8 type (TWO^8)^<2^64 * TWO^64 * TWO^256 and fill in a sha256_context value.\n * Advance the 'src' frame to the end of the CTX8 type.\n * Returns false if the context's counter is too large (i.e. the compression count is greater than or equal to 2^55).\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: NULL != ctx->output;\n *               '*src' is a valid read frame for 838 more cells;\n */\nbool simplicity_read_sha256_context(sha256_context* ctx, frameItem* src) {\n  size_t len;\n  uint_fast64_t compressionCount;\n\n  simplicity_read_buffer8(ctx->block, &len, src, 5);\n  compressionCount = simplicity_read64(src);\n  ctx->counter = ((compressionCount*1U) << 6) + len;\n  read32s(ctx->output, 8, src);\n  ctx->overflow = (sha256_max_counter >> 6) <= compressionCount;\n  return !ctx->overflow;\n}\n\n/* Write data to a Simplicity CTX8 type (TWO^8)^<2^64 * TWO^64 * TWO^256 from a sha256_context value.\n * Advance the 'dst' frame to the end of the CTX8 type.\n * Returns false if the ctx had overflowed.\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: '*dst' is a valid write frame for 838 more cells;\n *               NULL != ctx->output;\n *               ctx->counter < 2^61;\n */\nbool simplicity_write_sha256_context(frameItem* dst, const sha256_context* ctx) {\n  simplicity_write_buffer8(dst, ctx->block, ctx->counter % 64, 5);\n  simplicity_write64(dst, ctx->counter >> 6);\n  write32s(dst, ctx->output, 8);\n  return !ctx->overflow;\n}\n\n/* Given a write frame and a read frame, copy 'n' cells from after the read frame's cursor to after the write frame's cursor,\n * Cells in within the write frame beyond 'n' cells after the write frame's cursor may also be overwritten.\n *\n * Precondition: '*dst' is a valid write frame for 'n' more cells;\n *               '*src' is a valid read frame for 'n' more cells;\n *               '0 < n';\n */\nstatic void copyBitsHelper(const frameItem* dst, const frameItem *src, size_t n) {\n  /* Pointers to the UWORDs of the read and write frame that contain the frame's cursor. */\n  UWORD* src_ptr = src->edge - 1 - src->offset / UWORD_BIT;\n  UWORD* dst_ptr = dst->edge + (dst->offset - 1) / UWORD_BIT;\n  /* The specific bit within those UWORDs that is immediately in front of their respective cursors.\n   * That bit is specifically '1 << (src_shift - 1)' for the read frame,\n   * and '1 << (dst_shift - 1)' for the write frame, unless 'dst_shift == 0', in which case it is '1 << (UWORD_BIT - 1)'.\n   */\n  size_t src_shift = UWORD_BIT - (src->offset % UWORD_BIT);\n  size_t dst_shift = dst->offset % UWORD_BIT;\n  if (dst_shift) {\n    /* The write frame's current UWORD is partially filled.\n     * Fill the rest of it without overwriting the existing data.\n     */\n    *dst_ptr = LSBclear(*dst_ptr, dst_shift);\n\n    if (src_shift < dst_shift) {\n      /* The read frame's current UWORD doesn't have enough data to entirely fill the rest of the write frame's current UWORD.\n       * Fill as much as we can and move src_ptr to the read frame's next UWORD.\n       */\n      *dst_ptr |= (UWORD)(LSBkeep(*src_ptr, src_shift) << (dst_shift - src_shift));\n      if (n <= src_shift) return;\n      n -= src_shift;\n      dst_shift -= src_shift;\n      src_ptr--;\n      src_shift = UWORD_BIT;\n    }\n\n    /* Fill the rest of the write frame's current UWORD and move dst_ptr to the write frame's next UWORD. */\n    *dst_ptr |= LSBkeep((UWORD)(*src_ptr >> (src_shift - dst_shift)), dst_shift);\n    if (n <= dst_shift) return;\n    n -= dst_shift;\n    src_shift -= dst_shift;\n    dst_ptr--;\n  }\n  /* The next cell in the write frame to be filled begins at the boundary of a UWORD. */\n\n  /* :TODO: Use static analysis to limit the total amount of copied memory. */\n  if (0 == src_shift % UWORD_BIT) {\n    /* The next cell in the read frame to be filled also begins at the boundary of a UWORD.\n     * We can use 'memcpy' to copy data in bulk.\n     */\n    size_t m = ROUND_UWORD(n);\n    /* If we went through the previous 'if (dst_shift)' block then 'src_shift == 0' and we need to decrement src_ptr.\n     * If we did not go through the previous 'if (dst_shift)' block then 'src_shift == UWORD_BIT'\n     * and we do not need to decrement src_ptr.\n     * We have folded this conditional decrement into the equation applied to 'src_ptr' below.\n     */\n    memcpy(dst_ptr - (m - 1), src_ptr - (m - src_shift / UWORD_BIT), m * sizeof(UWORD));\n  } else {\n    while(1) {\n      /* Fill the write frame's UWORD by copying the LSBs of the read frame's current UWORD\n       * to the MSBs of the write frame's current UWORD,\n       * and copy the MSBs of the read frame's next UWORD to the LSBs of the write frame's current UWORD.\n       * Then move both the src_ptr and dst_ptr to their next UWORDs.\n       */\n      *dst_ptr = (UWORD)(LSBkeep(*src_ptr, src_shift) << (UWORD_BIT - src_shift));\n      if (n <= src_shift) return;\n\n      *dst_ptr |= (UWORD)(*(src_ptr - 1) >> src_shift);\n      if (n <= UWORD_BIT) return;\n      n -= UWORD_BIT;\n      dst_ptr--; src_ptr--;\n    }\n  }\n}\n\n/* Given a write frame and a read frame, copy 'n' cells from after the read frame's cursor to after the write frame's cursor,\n * and then advance the write frame's cursor by 'n'.\n * Cells in front of the '*dst's cursor's final position may be overwritten.\n *\n * Precondition: '*dst' is a valid write frame for 'n' more cells;\n *               '*src' is a valid read frame for 'n' more cells;\n */\nvoid simplicity_copyBits(frameItem* dst, const frameItem* src, size_t n) {\n  if (0 == n) return;\n  copyBitsHelper(dst, src, n);\n  dst->offset -= n;\n}\n"
  },
  {
    "path": "C/frame.h",
    "content": "/* This module provides functions writing initial data to and reading results from the frame used during evaluation\n * of Simplicity expressions.\n * These helper functions are also used for marshaling data to and from jets.\n */\n#ifndef SIMPLICITY_FRAME_H\n#define SIMPLICITY_FRAME_H\n\n#include <stdbool.h>\n#include \"sha256.h\"\n#include \"simplicity_assert.h\"\n#include \"uword.h\"\n\n/* A Bit Machine frame contains an '.edge' pointer to a slice of an array of UWORDs to hold the frame's cells.\n * The '.offset' is used to represent the cursors position.\n * For a read frame, the '.edge' points to one-past-the-end of the slice of the UWORDs array for the frame's cells,\n * and the '.offset' value is equal to the frame's cursor position plus the amount of padding used in the frame.\n * For a write frame, the '.edge' points to the beginning of the slice of the UWORDs array for the frame's cells,\n * and the '.offset' value is equal to the total number of cells minus the frame's cursor position.\n */\ntypedef struct frameItem {\n  UWORD* edge;\n  size_t offset;\n} frameItem;\n\n/* Initialize a new read frame.\n * 'n' is the number of cells for the read frame.\n * 'from' is a pointer to the beginning of the new slice for the array of UWORDS to hold the frame's cells.\n *\n * Precondition: UWORD from[ROUND_UWORD(n)];\n */\nstatic inline frameItem initReadFrame(size_t n, UWORD* from) {\n  const size_t len = ROUND_UWORD(n);\n/* '(1U * len) * UWORD_BIT - n' equals the number of padding bits in a frame of size 'n'.\n * Note that even if (len * UWORD_BIT) overflows,\n * (1) We have ensured an unsigned computation by multiplying by 1U so the behaviour is well-defined.\n * (2) after subtracting 'n' we are left with a value in the range 0 .. UWORD-BIT - 1.\n */\n  return (frameItem){ .edge = from + len, .offset = (1U * len) * UWORD_BIT - n };\n}\n\n/* Initialize a new write frame.\n * 'n' is the number of cells for the write frame.\n * 'from' is a pointer to the one-past-the-end of the new slice for the array of UWORDS to hold the frame's cells.\n *\n * Precondition: UWORD (from - ROUND_UWORD(n))[ROUND_UWORD(n)];\n */\nstatic inline frameItem initWriteFrame(size_t n, UWORD* from) {\n  return (frameItem){ .edge = from - ROUND_UWORD(n), .offset = n };\n}\n\n/* Given a read frame, return the value of the cell at the cursor.\n *\n * Precondition: '*frame' is a valid read frame for 1 more cell.\n */\nstatic inline bool peekBit(const frameItem* frame) {\n  return 1 & (*(frame->edge - 1 - frame->offset / UWORD_BIT) >> (UWORD_BIT - (frame->offset % UWORD_BIT) - 1));\n}\n\n/* Given a read frame, return the value of the cell at the cursor and advance the cursor by one cell.\n *\n * Precondition: '*frame' is a valid read frame for 1 more cell.\n */\nstatic inline bool readBit(frameItem* frame) {\n  bool result = peekBit(frame);\n  frame->offset++;\n  return result;\n}\n\n/* Given a write frame, set its cursor's cell to 'bit' and advance the cursor by one cell.\n * Cells in front of the cursor's final position may be overwritten.\n *\n * The function returns the same value as bit.  This facilitates using 'writeBit' within an 'if' statement\n *\n *     if (writeBit(frame, bit)) { ... } else { ... }\n *\n * so that one can both decide conditions based on a Boolean value while at the same time writing to the frame the choice made.\n *\n * Precondition: '*frame' is a valid write frame for 1 more cell.\n */\nstatic inline bool writeBit(frameItem* frame, bool bit) {\n  simplicity_debug_assert(0 < frame->offset);\n  frame->offset--;\n  UWORD* dst_ptr = frame->edge + frame->offset / UWORD_BIT;\n  if (bit) {\n    *dst_ptr |= (UWORD)((UWORD)1 << (frame->offset % UWORD_BIT));\n  } else {\n    *dst_ptr = LSBclear(*dst_ptr, frame->offset % UWORD_BIT + 1);\n  }\n  return bit;\n}\n\n/* Given a read frame, advance the cursor by 'n' cells.\n *\n * Precondition: '*frame' is a valid read frame for 'n' more cells.\n */\nstatic inline void forwardBits(frameItem* frame, size_t n) {\n  frame->offset += n;\n}\n\n/* Given a write frame, advance the cursor by 'n' cells.\n *\n * Precondition: '*frame' is a valid write frame for 'n' more cells.\n */\nstatic inline void skipBits(frameItem* frame, size_t n) {\n  simplicity_debug_assert(n <= frame->offset);\n  frame->offset -= n;\n}\n\n/* Given a read frame, the 'readN' function returns the value of the 'N' cells after the cursor and\n * advances the frame's cursor by 'N'.\n * The cell values are returned with the first cell in the MSB of the result and the last cell in the LSB of the result.\n *\n * Precondition: '*frame' is a valid read frame for 'N' more cells.\n */\nuint_fast8_t simplicity_read4(frameItem* frame);\nuint_fast8_t simplicity_read8(frameItem* frame);\nuint_fast16_t simplicity_read16(frameItem* frame);\nuint_fast32_t simplicity_read32(frameItem* frame);\nuint_fast64_t simplicity_read64(frameItem* frame);\n\n/* Given a write frame, the 'writeN' function sets the value of the 'N' cells after the cursor and\n * advances the frame's cursor by 'N'.\n * The first cell is set to the value of the MSB of 'x' and the last cell is set to the LSB of 'x'.\n * Cells in front of the cursor's final position may be overwritten.\n *\n * Precondition: '*frame' is a valid write frame for 'N' more cells.\n */\nvoid simplicity_write8(frameItem* frame, uint_fast8_t x);\nvoid simplicity_write16(frameItem* frame, uint_fast16_t x);\nvoid simplicity_write32(frameItem* frame, uint_fast32_t x);\nvoid simplicity_write64(frameItem* frame, uint_fast64_t x);\n\nstatic inline void read8s(unsigned char* x, size_t n, frameItem* frame) {\n  for(; n; --n) *(x++) = (unsigned char)simplicity_read8(frame);\n}\n\nstatic inline void write8s(frameItem* frame, const unsigned char* x, size_t n) {\n  for(; n; --n) simplicity_write8(frame, *(x++));\n}\n\nstatic inline void read32s(uint32_t* x, size_t n, frameItem* frame) {\n  for(; n; --n) *(x++) = (uint32_t)simplicity_read32(frame);\n}\n\nstatic inline void write32s(frameItem* frame, const uint32_t* x, size_t n) {\n  for(; n; --n) simplicity_write32(frame, *(x++));\n}\n\n/* Read bytes from a Simplicity buffer of type (TWO^8)^<2^(n+1) into 'buf'.\n * Set 'len' to the number of bytes read from the buffer.\n * Advance the 'src' frame to the end of the buffer type.\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: unsigned char buf[2^(n+1)-1];\n *               NULL != len;\n *               '*src' is a valid read frame for 8*(2^(n+1)-1)+n+1 more cells;\n *               0 <= n < 16\n */\nvoid simplicity_read_buffer8(unsigned char* buf, size_t* len, frameItem* src, int n);\n\n/* Write 'len' bytes to a Simplicity buffer of type (TWO^8)^<2^(n+1) from 'buf'.\n * Advance the 'dst' frame to the end of the buffer type.\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: '*dst' is a valid write frame for 8*(2^(n+1)-1)+n+1 more cells;\n *               unsigned char buf[len];\n *               len < 2^(n+1);\n *               0 <= n < 16;\n */\nvoid simplicity_write_buffer8(frameItem* dst, const unsigned char* buf, size_t len, int n);\n\n/* Read data from a Simplicity CTX8 type (TWO^8)^<2^64 * TWO^64 * TWO^256 and fill in a sha256_context value.\n * Advance the 'src' frame to the end of the CTX8 type.\n * Returns false if the context's counter is too large (i.e. the compression count is greater than or equal to 2^55).\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: NULL != ctx->output;\n *               '*src' is a valid read frame for 838 more cells;\n */\nbool simplicity_read_sha256_context(sha256_context* ctx, frameItem* src);\n\n/* Write data to a Simplicity CTX8 type (TWO^8)^<2^64 * TWO^64 * TWO^256 from a sha256_context value.\n * Advance the 'dst' frame to the end of the CTX8 type.\n * Returns false if the ctx had overflowed.\n *\n * The notation X^<2 is notation for the type (S X)\n * The notation X^<(2*n) is notation for the type S (X^n) * X^<n\n *\n * Precondition: '*dst' is a valid write frame for 838 more cells;\n *               NULL != ctx->output;\n *               ctx->counter < 2^61;\n */\nbool simplicity_write_sha256_context(frameItem* dst, const sha256_context* ctx);\n\n/* Given a write frame and a read frame, copy 'n' cells from after the read frame's cursor to after the write frame's cursor,\n * and then advance the write frame's cursor by 'n'.\n * Cells in front of the '*dst's cursor's final position may be overwritten.\n *\n * Precondition: '*dst' is a valid write frame for 'n' more cells;\n *               '*src' is a valid read frame for 'n' more cells;\n */\nvoid simplicity_copyBits(frameItem* dst, const frameItem* src, size_t n);\n#endif\n"
  },
  {
    "path": "C/hashBlock.c",
    "content": "#include \"hashBlock.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     hashBlock\n */\nconst unsigned char hashBlock[] = {\n  0xea, 0x70, 0x50, 0x62, 0x48, 0x2c, 0x14, 0x0a, 0xd1, 0x40, 0xb0, 0xc4, 0x54, 0x2a, 0x15, 0xc4, 0x58, 0x60, 0x28, 0x16,\n  0x01, 0x6b, 0xd6, 0x20, 0x5a, 0x02, 0xd5, 0xb4, 0x4d, 0x02, 0xa1, 0x66, 0x40, 0xa1, 0x24, 0x16, 0x0a, 0x05, 0x20, 0xa0,\n  0x58, 0xe2, 0x26, 0x02, 0xa1, 0x5c, 0x44, 0xc4, 0x54, 0x2d, 0x39, 0x08, 0x16, 0xcd, 0xa2, 0x6c, 0x13, 0x48, 0xb0, 0x0b,\n  0x32, 0x0c, 0x34, 0x30, 0xc3, 0x0e, 0x38, 0x59, 0x92, 0x42, 0x05, 0x08, 0x30, 0xc3, 0xc1, 0x41, 0xc8, 0x30, 0xfa, 0x0c,\n  0x3c, 0x14, 0x1c, 0x2c, 0x88, 0x30, 0xc3, 0xc1, 0x41, 0xc6, 0xdc, 0x7c, 0xcc, 0x3c, 0x14, 0x1c, 0x2c, 0x88, 0x30, 0xc3,\n  0xc1, 0x41, 0xc6, 0xe1, 0x67, 0xcc, 0xc3, 0xc1, 0x41, 0xc2, 0xc8, 0x83, 0x0c, 0x3c, 0x14, 0x1c, 0x6e, 0x28, 0x3e, 0x66,\n  0x1e, 0x0a, 0x0e, 0x16, 0x43, 0x71, 0x79, 0x87, 0x82, 0x83, 0x8d, 0xc6, 0x87, 0xe3, 0x53, 0x0f, 0x05, 0x07, 0x0b, 0x22,\n  0x48, 0x38, 0xfc, 0x7c, 0x18, 0x38, 0xb9, 0x1c, 0x1c, 0x47, 0x07, 0x10, 0xb9, 0x0d, 0xad, 0x25, 0x1c, 0x4a, 0x70, 0x68,\n  0x19, 0x8e, 0x0f, 0x01, 0x1c, 0x1b, 0xc0, 0xce, 0x0d, 0x0b, 0x78, 0x1c, 0x2c, 0x2e, 0x23, 0x0b, 0x89, 0xb8, 0xd0, 0x0c,\n  0x05, 0xc4, 0x43, 0xf1, 0x59, 0xf8, 0x98, 0xdc, 0x9c, 0x14, 0x0b, 0x00, 0x32, 0x03, 0x50, 0x1c, 0x66, 0x17, 0x1d, 0x8f,\n  0xc8, 0x13, 0x8f, 0xa4, 0xdc, 0x91, 0x14, 0x01, 0xa0, 0x58, 0x8f, 0xb8, 0xfa, 0x0d, 0xc8, 0xa1, 0x40, 0xb0, 0x03, 0x20,\n  0x37, 0x01, 0xc9, 0x00, 0xb9, 0x30, 0x3f, 0x27, 0x8e, 0x3f, 0x20, 0x4d, 0xca, 0xe1, 0x40, 0x1a, 0x05, 0x88, 0xfc, 0x86,\n  0x3e, 0x83, 0x72, 0x9c, 0x50, 0x2c, 0x00, 0xc8, 0x0d, 0xc0, 0x72, 0xb4, 0x2e, 0x5a, 0x8f, 0xcb, 0xb3, 0x8f, 0xc9, 0xd3,\n  0x73, 0x18, 0x28, 0x03, 0x40, 0xb1, 0x1f, 0x94, 0x47, 0xd0, 0x6e, 0x61, 0x05, 0x02, 0xc0, 0x0c, 0x80, 0xdc, 0x07, 0x31,\n  0x41, 0x73, 0x26, 0x3f, 0x33, 0x27, 0x1f, 0x97, 0x46, 0xe6, 0xa4, 0x50, 0x06, 0x81, 0x62, 0x3f, 0x2f, 0xcf, 0xa0, 0xdc,\n  0xd1, 0x0a, 0x05, 0x80, 0x19, 0x01, 0xb8, 0x0e, 0x6a, 0x07, 0xe6, 0xd4, 0x10, 0x0e, 0x6b, 0xc7, 0xe6, 0xe0, 0xe3, 0x73,\n  0x06, 0x60, 0xb9, 0xbc, 0x1b, 0x9a, 0xf3, 0x73, 0x52, 0x7e, 0x62, 0x85, 0x06, 0xe6, 0x94, 0xdc, 0xd0, 0x1f, 0x98, 0xe1,\n  0x41, 0xb9, 0x9c, 0x37, 0x32, 0xe7, 0xe6, 0x48, 0x50, 0x6e, 0x64, 0xcd, 0xcc, 0x71, 0xf9, 0x96, 0x14, 0x01, 0xcd, 0x28,\n  0xb1, 0x1b, 0x99, 0xa3, 0xf3, 0x34, 0x28, 0x03, 0x9a, 0xa3, 0xf3, 0x2e, 0x28, 0x16, 0xcd, 0x20, 0x80, 0x69, 0x03, 0x80,\n  0x05, 0xc1, 0x06, 0xe6, 0xc8, 0xfb, 0x05, 0x00, 0x64, 0x7e, 0x6d, 0x8e, 0x15, 0x1b, 0x81, 0x1b, 0x03, 0xf3, 0x76, 0x28,\n  0x16, 0x00, 0x64, 0x06, 0xe0, 0x38, 0x90, 0x2e, 0x28, 0x1b, 0x9c, 0xf3, 0x73, 0x6c, 0x70, 0xa8, 0x0c, 0xcf, 0xce, 0xa1,\n  0xc2, 0xa3, 0x66, 0x6c, 0x0f, 0xce, 0xc8, 0xa0, 0x58, 0x01, 0x90, 0x1b, 0xc0, 0xe3, 0x90, 0xb8, 0xf4, 0x6e, 0x7b, 0x8d,\n  0xce, 0x39, 0xc2, 0xa0, 0x33, 0x3f, 0x3e, 0x67, 0x0a, 0x8d, 0x99, 0xb0, 0x3f, 0x3f, 0x02, 0x81, 0x60, 0x06, 0x40, 0x6f,\n  0x1f, 0xa0, 0x28, 0x10, 0x0e, 0x48, 0x05, 0xcf, 0x4f, 0x40, 0x69, 0xb9, 0xf3, 0x3f, 0x40, 0x08, 0xa0, 0xdc, 0xfb, 0x1f,\n  0x9f, 0x61, 0x40, 0x1d, 0x00, 0xe7, 0xe7, 0xcc, 0x50, 0x6e, 0x7e, 0xcd, 0xcf, 0xb1, 0xf9, 0xfe, 0x14, 0x01, 0xd0, 0x1c,\n  0x2c, 0x42, 0xd5, 0xa0, 0x10, 0x0d, 0x20, 0x70, 0x01, 0xfa, 0x03, 0x05, 0x06, 0xe8, 0x16, 0x30, 0xdb, 0x0f, 0xd0, 0x32,\n  0x28, 0x03, 0x48, 0xb1, 0x1b, 0xa0, 0x74, 0xfa, 0x05, 0x07, 0xe0, 0x82, 0x80, 0x64, 0x06, 0xe1, 0xba, 0x0c, 0x41, 0x00,\n  0xe2, 0x60, 0x38, 0xa0, 0x6e, 0x7c, 0x8c, 0x30, 0x5d, 0x07, 0x03, 0x74, 0x15, 0x9b, 0xa0, 0x94, 0xfd, 0x05, 0x02, 0x83,\n  0x74, 0x10, 0x9b, 0xa0, 0x70, 0xfd, 0x05, 0x82, 0x83, 0x74, 0x0c, 0x1b, 0xa0, 0x4c, 0xfd, 0x06, 0x02, 0x83, 0x74, 0x07,\n  0x9b, 0xa0, 0x28, 0xfd, 0x06, 0x82, 0x83, 0x74, 0x03, 0x9b, 0xa0, 0x08, 0xfd, 0x07, 0x02, 0x80, 0x3a, 0x06, 0x05, 0x88,\n  0x5c, 0xf0, 0x73, 0xc4, 0x07, 0x40, 0xd8, 0x9c, 0xf1, 0x8b, 0x4e, 0x40, 0x80, 0x64, 0x06, 0xd0, 0xb8, 0x08, 0x5c, 0xec,\n  0x73, 0xb4, 0x06, 0x02, 0x73, 0xb6, 0x6e, 0x7a, 0xcd, 0xcf, 0x29, 0xfa, 0x09, 0xc5, 0x02, 0xc0, 0x0c, 0x80, 0xd4, 0x07,\n  0x0d, 0x0b, 0x88, 0x42, 0xe7, 0x53, 0x9d, 0x60, 0x30, 0x13, 0x9d, 0x73, 0x74, 0x0f, 0x9b, 0x9e, 0x13, 0xf4, 0x20, 0x0a,\n  0x05, 0x80, 0x19, 0x01, 0xa8, 0x0e, 0x2d, 0x0b, 0x8c, 0x42, 0xe7, 0x43, 0x9d, 0x20, 0x30, 0x13, 0x9d, 0x33, 0x74, 0x1b,\n  0x9b, 0x9d, 0xd3, 0xf4, 0x2c, 0x8a, 0x05, 0x80, 0x19, 0x01, 0xa8, 0x0e, 0x3d, 0x0b, 0x90, 0x21, 0x73, 0x99, 0xce, 0x70,\n  0x18, 0x09, 0xce, 0x79, 0xba, 0x14, 0x0d, 0xce, 0xc9, 0xfa, 0x1c, 0xc5, 0x02, 0xc0, 0x0c, 0x80, 0xd4, 0x03, 0x9d, 0x00,\n  0x72, 0x38, 0x6e, 0x85, 0xd1, 0x74, 0x44, 0x0d, 0xd0, 0xf6, 0x6e, 0x87, 0x53, 0xf4, 0x31, 0x8a, 0x0d, 0xd0, 0xe2, 0x6e,\n  0x86, 0xc3, 0xf4, 0x33, 0x8a, 0x0d, 0xd0, 0xd0, 0x6e, 0x86, 0x33, 0xf4, 0x35, 0x8a, 0x00, 0xe8, 0x7a, 0x16, 0x23, 0x74,\n  0x37, 0x9f, 0xa1, 0xbc, 0x50, 0x07, 0x43, 0xf9, 0xfa, 0x1b, 0x05, 0x02, 0xd9, 0xa4, 0x10, 0x0d, 0x20, 0x70, 0x00, 0xb8,\n  0x20, 0xdd, 0x10, 0xe7, 0xd8, 0x28, 0x03, 0x23, 0xf4, 0x45, 0x9c, 0x2a, 0x37, 0x02, 0x36, 0x07, 0xe8, 0x90, 0x14, 0x0b,\n  0x00, 0x32, 0x03, 0x70, 0x1c, 0x48, 0x17, 0x14, 0x0d, 0xd1, 0x4a, 0x6e, 0x88, 0xb3, 0x85, 0x40, 0x66, 0x7e, 0x8a, 0xa3,\n  0x85, 0x46, 0xcc, 0xd8, 0x1f, 0xa2, 0xbc, 0x50, 0x2c, 0x00, 0xc8, 0x0d, 0xe3, 0xf4, 0x60, 0x82, 0x01, 0xc7, 0x61, 0x74,\n  0x57, 0xf4, 0x62, 0x1b, 0xa2, 0xe0, 0xfd, 0x17, 0x02, 0x80, 0x3a, 0x32, 0x0f, 0xd1, 0x68, 0x28, 0x37, 0x45, 0xe9, 0xba,\n  0x2d, 0xcf, 0xd1, 0x80, 0x28, 0x03, 0xa3, 0x3c, 0x58, 0x85, 0xab, 0x40, 0x20, 0x1a, 0x46, 0xe8, 0xd4, 0x04, 0x03, 0x81,\n  0x01, 0xc1, 0x00, 0xe4, 0x90, 0xfd, 0x11, 0xe7, 0x1c, 0x27, 0x46, 0xe1, 0xfa, 0x33, 0xc5, 0xd1, 0x7a, 0x3f, 0x46, 0x18,\n  0xba, 0x2c, 0x87, 0xe8, 0xb8, 0x17, 0x45, 0x38, 0xfd, 0x15, 0xa2, 0xe8, 0x9d, 0x0b, 0x99, 0x6e, 0x87, 0x70, 0x73, 0x30,\n  0x07, 0x32, 0xc0, 0x60, 0x3f, 0x45, 0x68, 0xa0, 0xdd, 0x16, 0xc6, 0x1b, 0x9a, 0x23, 0xf4, 0x5c, 0x8a, 0x00, 0xd2, 0x2c,\n  0x46, 0xe8, 0xbd, 0x3e, 0x81, 0x41, 0xf9, 0xaa, 0x14, 0x03, 0x20, 0x37, 0x01, 0xc1, 0xc7, 0xe8, 0xcb, 0x14, 0x1b, 0xa3,\n  0x50, 0xc3, 0x73, 0x6e, 0x7e, 0x8d, 0x71, 0x40, 0x1a, 0x45, 0x88, 0xdd, 0x1b, 0x67, 0xd0, 0x28, 0x3f, 0x37, 0xe2, 0x80,\n  0x64, 0x06, 0xe0, 0x38, 0xa8, 0x7e, 0x8e, 0x91, 0x41, 0xba, 0x3c, 0x8c, 0x37, 0x39, 0x87, 0xe8, 0xf5, 0x14, 0x01, 0xa4,\n  0x58, 0x8d, 0xd1, 0xf2, 0x7d, 0x02, 0x83, 0xf3, 0xa8, 0x28, 0x06, 0x40, 0x6e, 0x03, 0x8f, 0x47, 0xe9, 0x03, 0x8a, 0x0d,\n  0xd2, 0x11, 0x30, 0xdc, 0xf0, 0x9f, 0xa4, 0x28, 0x28, 0x03, 0x48, 0xb1, 0x1b, 0xa4, 0x30, 0x7d, 0x02, 0x83, 0xf3, 0xd2,\n  0x28, 0x06, 0x40, 0x6e, 0x1b, 0xa4, 0x58, 0x08, 0x07, 0x24, 0x82, 0xe9, 0x17, 0xf4, 0x84, 0x8d, 0xd2, 0x22, 0x37, 0x48,\n  0x70, 0xfd, 0x21, 0x71, 0x40, 0xba, 0x07, 0x7a, 0x06, 0x81, 0xd0, 0x3e, 0x07, 0x40, 0xd0, 0x18, 0x05, 0xa0, 0x6e, 0x91,\n  0x61, 0xfa, 0x0a, 0x45, 0x00, 0x64, 0x7e, 0x91, 0x81, 0xc2, 0xa3, 0x74, 0x17, 0x9b, 0x03, 0xf4, 0x8d, 0x45, 0x02, 0xc0,\n  0x0c, 0x80, 0xdc, 0x3f, 0x49, 0x1c, 0x10, 0x0e, 0x14, 0x07, 0x0c, 0x0b, 0x96, 0x61, 0x74, 0x0c, 0x0d, 0xd2, 0x3f, 0x3f,\n  0x48, 0xfc, 0xfd, 0x23, 0xf1, 0x40, 0xb0, 0x1b, 0xa4, 0x6c, 0x7e, 0x91, 0xb1, 0xfa, 0x46, 0xc2, 0x81, 0x60, 0x37, 0x48,\n  0xb8, 0xfd, 0x22, 0xe3, 0xf4, 0x8b, 0x85, 0x02, 0xc0, 0x6e, 0x91, 0x31, 0xfa, 0x44, 0xc7, 0xe9, 0x13, 0x0a, 0x05, 0x80,\n  0xdd, 0x21, 0xf3, 0xf4, 0x87, 0xcf, 0xd2, 0x1f, 0x14, 0x0b, 0x00, 0x1d, 0x20, 0x03, 0x74, 0x87, 0xcf, 0xd2, 0x1f, 0x3f,\n  0x48, 0x7c, 0x50, 0x2c, 0x00, 0x74, 0x81, 0x85, 0x98, 0x1b, 0x86, 0xe9, 0x19, 0x9f, 0xa4, 0x66, 0x7e, 0x91, 0x98, 0xa0,\n  0x58, 0x00, 0xcc, 0x59, 0x81, 0xc2, 0xc6, 0xe9, 0x24, 0x1f, 0xa4, 0x90, 0x7e, 0x92, 0x40, 0xa0, 0x58, 0x00, 0xcc, 0x59,\n  0x81, 0xc5, 0x03, 0x74, 0x97, 0x4f, 0xd2, 0x5d, 0x3f, 0x49, 0x74, 0x50, 0x2c, 0x00, 0x66, 0x2c, 0xc0, 0xe3, 0x51, 0xba,\n  0x4e, 0x47, 0xe9, 0x39, 0x1f, 0xa4, 0xe4, 0x28, 0x16, 0x00, 0x33, 0x16, 0x60, 0x72, 0x08, 0x0e, 0x94, 0x60, 0xdd, 0x1b,\n  0x07, 0xe9, 0x47, 0x8a, 0x05, 0xd2, 0x90, 0x1f, 0xa4, 0x98, 0x7e, 0x92, 0x98, 0x60, 0x1c, 0x64, 0x07, 0x16, 0xc1, 0x40,\n  0x38, 0xe8, 0x0e, 0x28, 0x82, 0x80, 0x72, 0x08, 0x0e, 0x23, 0x82, 0x80, 0x72, 0x28, 0x0e, 0x1d, 0x05, 0x00, 0xe4, 0x90,\n  0x1c, 0x26, 0x0a, 0x01, 0xc0, 0xc2, 0xe1, 0x00, 0x3a, 0x3c, 0x85, 0xd1, 0xe0, 0x38, 0x0e, 0x8f, 0x53, 0x0e, 0x17, 0x47,\n  0xb8, 0x0e, 0x8f, 0x93, 0x74, 0xab, 0x0e, 0x15, 0x1b, 0x88, 0x4c, 0x38, 0x58, 0x0d, 0xd1, 0xfc, 0x7e, 0x95, 0xa8, 0xa0,\n  0xfc, 0x50, 0x28, 0x30, 0xe1, 0x68, 0x1f, 0xa5, 0x68, 0x2e, 0x30, 0x03, 0x93, 0x9d, 0x26, 0x90, 0x72, 0x5f, 0xa4, 0xd4,\n  0x28, 0x07, 0x29, 0x00, 0xe4, 0x94, 0x14, 0x03, 0x95, 0x80, 0x72, 0x36, 0x0a, 0x01, 0xcb, 0x40, 0x39, 0x11, 0x05, 0x00,\n  0xe5, 0xe0, 0x1c, 0x83, 0x82, 0x80, 0x70, 0x01, 0xfa, 0x52, 0x67, 0x09, 0xd2, 0xd3, 0x37, 0x4a, 0x7c, 0xfd, 0x2c, 0x71,\n  0x41, 0xfa, 0x57, 0x62, 0xe8, 0xdc, 0x1f, 0xa5, 0x60, 0x2e, 0x8e, 0xf0, 0xba, 0x41, 0x5d, 0x20, 0x80, 0x74, 0x83, 0x80,\n  0xe9, 0x04, 0x81, 0x80, 0xfd, 0x2b, 0x01, 0x41, 0xba, 0x57, 0x26, 0x1b, 0xa4, 0x30, 0x7e, 0x95, 0xe0, 0xa0, 0x0d, 0x22,\n  0xc4, 0x6e, 0x96, 0x01, 0xf4, 0x0a, 0x0f, 0xd2, 0x20, 0x14, 0x03, 0x20, 0x37, 0x01, 0xc1, 0xc7, 0xe9, 0x67, 0x0a, 0x0d,\n  0xd2, 0xd7, 0x30, 0xdd, 0x22, 0xd3, 0xf4, 0xb6, 0x85, 0x00, 0x69, 0x16, 0x23, 0x74, 0xb7, 0x8f, 0xa0, 0x50, 0x7e, 0x91,\n  0xa8, 0xa0, 0x19, 0x01, 0xb8, 0x0e, 0x2a, 0x1f, 0xa5, 0xd8, 0x28, 0x37, 0x4b, 0xd8, 0xc3, 0x74, 0x90, 0x8f, 0xd2, 0xf9,\n  0x14, 0x01, 0xa4, 0x58, 0x8d, 0xd2, 0xfd, 0x3e, 0x81, 0x41, 0xfa, 0x49, 0x42, 0x80, 0x64, 0x06, 0xe1, 0xba, 0x62, 0x20,\n  0x80, 0x72, 0x00, 0x0e, 0x79, 0xba, 0x0f, 0x41, 0xd2, 0x09, 0xe7, 0x30, 0x50, 0x2c, 0x00, 0x73, 0x16, 0x0e, 0x93, 0x08,\n  0x5d, 0x31, 0x81, 0x80, 0x74, 0x99, 0x85, 0xc8, 0xd1, 0x80, 0x74, 0x9a, 0x4d, 0xcc, 0x80, 0xa0, 0xdc, 0xa3, 0x14, 0x0b,\n  0xa6, 0x41, 0xca, 0xc0, 0x3a, 0x4d, 0xe7, 0xe6, 0x58, 0x50, 0x7e, 0x54, 0x8a, 0x05, 0x98, 0x1c, 0xad, 0x0b, 0x97, 0x3c,\n  0xb3, 0x30, 0xdc, 0xb4, 0x3f, 0x49, 0xd8, 0xc3, 0xf4, 0xcb, 0x45, 0x02, 0xc4, 0x2c, 0xc7, 0xd2, 0x7e, 0x5e, 0x1f, 0x40,\n  0x3a, 0x2c, 0xba, 0x40, 0xa0, 0xe2, 0x6e, 0x86, 0x34, 0x81, 0xd2, 0xde, 0x13, 0xa6, 0x78, 0x07, 0x40, 0x80, 0xba, 0x5c,\n  0x3d, 0x2e, 0x10, 0x62, 0x13, 0xa6, 0x80, 0x07, 0x17, 0x83, 0x10, 0xb5, 0x05, 0xb0, 0x07, 0x37, 0x00, 0xe9, 0x47, 0x05,\n  0xd3, 0x45, 0x18, 0x61, 0x80, 0x74, 0xa5, 0x4f, 0xcd, 0xd8, 0x3a, 0x07, 0xfa, 0x1d, 0xcf, 0xd3, 0x1d, 0x13, 0xa6, 0x9e,\n  0x6e, 0x99, 0x41, 0xfa, 0x68, 0x62, 0x83, 0xf4, 0xcd, 0xc5, 0xd1, 0x42, 0x17, 0x45, 0xe7, 0x45, 0xd0, 0x3a, 0x30, 0x00,\n  0xe8, 0xbb, 0x03, 0x01, 0xfa, 0x66, 0xe2, 0x83, 0x74, 0xd0, 0x0c, 0x37, 0x46, 0x51, 0xfa, 0x68, 0x62, 0x80, 0x34, 0x8b,\n  0x11, 0xba, 0x68, 0xe7, 0xd0, 0x28, 0x3f, 0x46, 0x90, 0xa0, 0x19, 0x01, 0xb8, 0x0e, 0x0e, 0x3f, 0x4d, 0x54, 0x50, 0x6e,\n  0x9a, 0xf9, 0x86, 0xe8, 0xdf, 0x3f, 0x4d, 0x88, 0x50, 0x06, 0x91, 0x62, 0x37, 0x4d, 0x98, 0xfa, 0x05, 0x07, 0xe8, 0xe7,\n  0x14, 0x03, 0x20, 0x37, 0x0d, 0xd3, 0x7a, 0x04, 0x03, 0x8b, 0x40, 0x74, 0x53, 0x83, 0xa3, 0xe0, 0x2e, 0x40, 0xf2, 0x04,\n  0x40, 0x39, 0x0e, 0x13, 0xa7, 0x04, 0x07, 0x49, 0x44, 0x1c, 0x83, 0x0b, 0x30, 0xb8, 0xe4, 0x07, 0x3f, 0x40, 0xe3, 0xc0,\n  0xb9, 0x52, 0x38, 0x0e, 0x96, 0xa8, 0xb9, 0x02, 0x03, 0xa5, 0xae, 0x2e, 0x4b, 0x85, 0xc9, 0x90, 0xb9, 0x36, 0x17, 0x27,\n  0x47, 0x1c, 0x2e, 0x54, 0x85, 0xd3, 0x96, 0x0b, 0xa7, 0x37, 0xd3, 0xa5, 0x17, 0x4e, 0x9f, 0xa7, 0x4e, 0x28, 0x17, 0x4e,\n  0xa3, 0xa7, 0x4c, 0x2e, 0x9d, 0x3f, 0x4e, 0x9c, 0x50, 0x2c, 0x02, 0xe9, 0xd6, 0x74, 0xeb, 0x04, 0xd0, 0x2c, 0xa0, 0xa0,\n  0x58, 0x84, 0xdc, 0x2e, 0x9d, 0x97, 0x4e, 0xa0, 0x4e, 0x9d, 0x40, 0x9b, 0x45, 0xd3, 0xb5, 0xe9, 0xdb, 0x09, 0xc0, 0x45,\n  0xd3, 0xad, 0xe9, 0xd6, 0x89, 0xc0, 0x85, 0x42, 0xc8, 0x27, 0x08, 0x17, 0x4e, 0xdf, 0xa7, 0x62, 0x2e, 0x9d, 0xf7, 0x4e,\n  0xcc, 0x5c, 0x20, 0x2a, 0x17, 0x4e, 0xfb, 0xa7, 0x6c, 0x2e, 0x12, 0x17, 0x0c, 0xe1, 0xa2, 0x81, 0x62, 0x13, 0x88, 0x85,\n  0xc4, 0x1d, 0x3b, 0xb1, 0x70, 0xbe, 0x9e, 0x20, 0xa0, 0x5d, 0x3c, 0x6e, 0x9e, 0x30, 0x94, 0x54, 0x27, 0x14, 0x8b, 0xa7,\n  0x85, 0xb4, 0x5d, 0x3c, 0x9e, 0x22, 0x14, 0x0b, 0xa7, 0x8d, 0xd3, 0xce, 0x13, 0x80, 0x8b, 0x85, 0xf4, 0xf2, 0x85, 0x02,\n  0xc4, 0x27, 0x19, 0x0b, 0x87, 0xf1, 0x88, 0xba, 0x7a, 0x9c, 0x5e, 0x28, 0x17, 0x19, 0xf1, 0x38, 0xb8, 0x97, 0x8d, 0x05,\n  0x02, 0xc0, 0x27, 0x1d, 0x0b, 0x8a, 0x77, 0x0b, 0x8d, 0xba, 0x7b, 0xc2, 0x81, 0x71, 0x57, 0x15, 0x0b, 0xa7, 0xaf, 0xc0,\n  0x85, 0x02, 0xc0, 0x27, 0x20, 0x85, 0xd3, 0xe3, 0xe2, 0x61, 0x70, 0x7e, 0x9f, 0x10, 0xa0, 0x5c, 0x80, 0xe9, 0xf3, 0x0b,\n  0x8a, 0x02, 0xa1, 0x39, 0x12, 0x2e, 0x2d, 0xe9, 0xf2, 0x8b, 0xa7, 0xd3, 0xd3, 0xeb, 0x14, 0x0b, 0x88, 0x39, 0x14, 0x2e,\n  0x46, 0x71, 0xf8, 0xa0, 0x58, 0x04, 0xe4, 0x88, 0xb9, 0x1f, 0xc8, 0xf1, 0x72, 0x37, 0x91, 0xc2, 0x81, 0x74, 0xfd, 0xf9,\n  0x06, 0x2e, 0x48, 0xf4, 0xfd, 0x05, 0x02, 0xc0, 0x27, 0x26, 0x45, 0xd3, 0xfc, 0xe3, 0xd1, 0x36, 0x8b, 0x93, 0x3c, 0x8a,\n  0x17, 0x4f, 0xff, 0xa7, 0xf0, 0x28, 0x16, 0x01, 0x39, 0x40, 0x2e, 0x34, 0xe4, 0xd8, 0xb9, 0x21, 0xc9, 0x31, 0x40, 0xb9,\n  0x45, 0xd4, 0x02, 0x0b, 0x93, 0x9c, 0x96, 0x14, 0x0b, 0x00, 0x9c, 0xa8, 0x17, 0x50, 0x03, 0xca, 0x71, 0x72, 0x63, 0x94,\n  0xa2, 0x81, 0x72, 0x9b, 0x92, 0x42, 0xe4, 0xcf, 0x50, 0x1e, 0x28, 0x16, 0x01, 0x39, 0x60, 0x2e, 0x56, 0x75, 0x02, 0x22,\n  0x69, 0x17, 0x23, 0xf8, 0x30, 0xa0, 0x4e, 0x5a, 0x8b, 0x94, 0xfd, 0x40, 0x88, 0x9b, 0x85, 0xc9, 0xee, 0xa0, 0x40, 0x4d,\n  0x02, 0xa1, 0x39, 0x76, 0x2e, 0x56, 0xf2, 0xcc, 0x4e, 0x2f, 0x17, 0x50, 0x33, 0xd4, 0x10, 0x0b, 0x92, 0x5c, 0xa5, 0x14,\n  0x0b, 0x00, 0x9c, 0xc1, 0x0b, 0x97, 0xbc, 0xba, 0x13, 0x81, 0x8b, 0xa8, 0x1d, 0xe5, 0x98, 0xb9, 0x81, 0xe5, 0x60, 0xa0,\n  0x58, 0x04, 0xe6, 0x24, 0x5c, 0x80, 0xe3, 0x71, 0x72, 0xdf, 0xa8, 0x2b, 0x17, 0x30, 0xfc, 0xc3, 0x8a, 0x05, 0x80, 0x4e,\n  0x63, 0xc5, 0xcb, 0x3e, 0x5f, 0x09, 0xcc, 0x08, 0xb9, 0x6b, 0xcc, 0x68, 0xb9, 0x73, 0xcc, 0x50, 0xa0, 0x58, 0x04, 0xe6,\n  0x58, 0x5d, 0x41, 0x97, 0x30, 0x62, 0x71, 0xd8, 0xb9, 0x59, 0xd4, 0x1a, 0x09, 0xc9, 0xc1, 0x50, 0x9c, 0xce, 0x0b, 0x99,\n  0xae, 0x66, 0x05, 0xcc, 0xe7, 0x33, 0x02, 0x81, 0x73, 0x19, 0xd4, 0x1c, 0x09, 0xc6, 0xe2, 0xa1, 0x39, 0xa3, 0x17, 0x50,\n  0x8d, 0xcc, 0x50, 0xb9, 0x9c, 0xea, 0x0f, 0x45, 0x02, 0xe5, 0xd7, 0x2e, 0x85, 0xcc, 0xb7, 0x32, 0x82, 0x81, 0x60, 0x13,\n  0x9a, 0xb1, 0x75, 0x09, 0x5c, 0xce, 0x8b, 0x95, 0xc1, 0x73, 0x57, 0xd4, 0x27, 0x0b, 0x9a, 0xce, 0x64, 0x85, 0x02, 0xc0,\n  0x27, 0x36, 0x42, 0xe6, 0x7f, 0x98, 0x61, 0x39, 0x52, 0x2e, 0x66, 0xf9, 0xa3, 0x17, 0x18, 0x05, 0x42, 0x73, 0x70, 0x2e,\n  0x6c, 0xfa, 0x85, 0x71, 0x70, 0xc0, 0xb9, 0x9e, 0xea, 0x17, 0x45, 0xcd, 0xbf, 0x31, 0xe2, 0x81, 0x60, 0x13, 0x9b, 0xf1,\n  0x73, 0x7d, 0xcd, 0xb8, 0x9c, 0xcf, 0x0b, 0xa8, 0x64, 0xe6, 0xe4, 0x5c, 0xdf, 0x75, 0x0c, 0xa2, 0x81, 0x60, 0x13, 0x9c,\n  0x61, 0x73, 0x71, 0xce, 0x08, 0xb9, 0x04, 0x17, 0x38, 0x7c, 0xe3, 0x8b, 0x9c, 0x1e, 0xa1, 0xa0, 0x50, 0x2c, 0x02, 0x73,\n  0x9a, 0x2e, 0x65, 0xf9, 0x42, 0x2e, 0xa1, 0x9b, 0x92, 0x22, 0x81, 0x39, 0xd1, 0x17, 0x39, 0xbc, 0xdf, 0x0b, 0x94, 0xe1,\n  0x73, 0x75, 0xd4, 0x39, 0x09, 0xc4, 0xe2, 0xa1, 0x39, 0xd7, 0x17, 0x50, 0xf1, 0xd4, 0x39, 0x8b, 0x9b, 0xce, 0xa1, 0xc4,\n  0x50, 0x2e, 0x70, 0x7a, 0x87, 0xd1, 0x50, 0xa8, 0x4e, 0x77, 0x85, 0xce, 0xef, 0x51, 0x02, 0x2e, 0x25, 0x0b, 0x9d, 0xbe,\n  0x73, 0x44, 0xe6, 0x54, 0x54, 0x27, 0x3c, 0x82, 0xe7, 0x23, 0x9d, 0x61, 0x75, 0x10, 0xdc, 0xf2, 0x0a, 0x05, 0xce, 0x5f,\n  0x51, 0x10, 0x2e, 0xa2, 0x1f, 0x9b, 0xc1, 0x40, 0xb0, 0x09, 0xcf, 0x60, 0xba, 0x88, 0x8e, 0x76, 0xc4, 0xe4, 0xe0, 0xb9,\n  0xe6, 0xe7, 0xa8, 0x5c, 0x76, 0x15, 0x09, 0xcf, 0x90, 0xb9, 0xf0, 0xea, 0x24, 0x44, 0xd6, 0x2e, 0x7b, 0xf9, 0xe3, 0x17,\n  0x51, 0x2d, 0xd4, 0x4a, 0x0a, 0x05, 0x80, 0x4e, 0x7e, 0x45, 0xcf, 0x07, 0x3e, 0xe2, 0x70, 0xa1, 0x75, 0x13, 0xdd, 0x44,\n  0xd0, 0xb9, 0xfa, 0xea, 0x26, 0x05, 0x02, 0xc0, 0x27, 0x40, 0x00, 0xb9, 0xe7, 0xe7, 0xb4, 0x5c, 0x9e, 0x0b, 0xa0, 0x07,\n  0xa0, 0x04, 0x5c, 0x46, 0x15, 0x09, 0xd0, 0x0c, 0x2e, 0x76, 0xba, 0x8a, 0x71, 0x39, 0xea, 0x17, 0x40, 0x27, 0x51, 0x42,\n  0x27, 0x12, 0x8a, 0x84, 0xe8, 0x0c, 0x17, 0x3c, 0x7c, 0xd9, 0x8b, 0x97, 0x9c, 0xe0, 0x8a, 0x04, 0xe8, 0x10, 0x17, 0x3f,\n  0xbc, 0xfa, 0x09, 0xc9, 0x21, 0x74, 0x02, 0x73, 0xcc, 0x27, 0x31, 0x22, 0xa1, 0x3a, 0x05, 0x85, 0xd4, 0x5b, 0xf4, 0x01,\n  0x8b, 0x94, 0xa1, 0x73, 0xff, 0xcf, 0xf8, 0xba, 0x8b, 0x5e, 0x81, 0x81, 0x40, 0xb0, 0x09, 0xd0, 0x3a, 0x2e, 0x80, 0x0c,\n  0x05, 0xcf, 0x97, 0x40, 0xe8, 0xba, 0x8c, 0x2e, 0x81, 0xa1, 0x40, 0xb0, 0x09, 0xd0, 0x46, 0x2e, 0x80, 0xae, 0x81, 0xf1,\n  0x72, 0x88, 0x2e, 0x81, 0x2e, 0xa3, 0x10, 0x5c, 0xb9, 0x0a, 0x84, 0xe8, 0x29, 0x17, 0x40, 0xc7, 0x51, 0x94, 0x27, 0x40,\n  0x08, 0xba, 0x8c, 0xce, 0xa3, 0x10, 0x5c, 0x28, 0x2a, 0x13, 0xa0, 0xbc, 0x5d, 0x03, 0xdd, 0x02, 0xc2, 0xea, 0x32, 0x7a,\n  0x8c, 0x91, 0x40, 0xb9, 0xc7, 0xe7, 0xa4, 0x50, 0x27, 0x41, 0xa8, 0xba, 0x0b, 0x7a, 0x8d, 0x11, 0x74, 0x18, 0xf4, 0x14,\n  0x0a, 0x05, 0xd4, 0x6b, 0xf4, 0x1b, 0x09, 0xcf, 0x68, 0xa8, 0x4e, 0x83, 0xc1, 0x75, 0x1b, 0xbd, 0x06, 0xe2, 0x71, 0xe8,\n  0xba, 0x0a, 0xfa, 0x0e, 0x44, 0xe2, 0x01, 0x50, 0x9d, 0x08, 0x42, 0xe0, 0xfd, 0x02, 0x82, 0xea, 0x39, 0x3a, 0x0a, 0x85,\n  0xce, 0xa0, 0x54, 0x27, 0x42, 0x38, 0xba, 0x8e, 0x8e, 0x83, 0x91, 0x3a, 0x8e, 0x61, 0x74, 0x22, 0x74, 0x0e, 0x8b, 0x89,\n  0xc2, 0xa1, 0x3a, 0x13, 0x45, 0xd4, 0x74, 0xf4, 0x10, 0x8b, 0x99, 0x40, 0xba, 0x8f, 0x2e, 0xa3, 0xc8, 0x5d, 0x47, 0x67,\n  0x42, 0x60, 0xa0, 0x58, 0x04, 0xe8, 0x54, 0x17, 0x51, 0xe7, 0xd4, 0x78, 0x09, 0xcd, 0xc0, 0xba, 0x15, 0x7a, 0x14, 0x84,\n  0xe8, 0x54, 0x15, 0x09, 0xd0, 0xb4, 0x2e, 0x84, 0x2e, 0x82, 0x71, 0x74, 0x2d, 0x75, 0x1f, 0x42, 0xe8, 0x0a, 0x0a, 0x84,\n  0xe8, 0x5f, 0x17, 0x51, 0xf7, 0xd0, 0xa2, 0x27, 0x41, 0x30, 0xba, 0x09, 0x39, 0xcb, 0x14, 0x09, 0xd0, 0xc8, 0x2e, 0xa3,\n  0xf7, 0xa1, 0x80, 0x5d, 0x08, 0xe1, 0x75, 0x20, 0x5d, 0x0b, 0xc2, 0xe6, 0x58, 0x2a, 0x13, 0xa1, 0xa8, 0x5d, 0x0a, 0x3d,\n  0x07, 0xc2, 0x73, 0x0e, 0x2e, 0x76, 0xb9, 0xa3, 0x14, 0x09, 0xd0, 0xde, 0x2e, 0x84, 0x3e, 0x86, 0x71, 0x74, 0x0a, 0x05,\n  0xd0, 0xc7, 0xd0, 0xc6, 0x2e, 0x84, 0x50, 0xa8, 0x4e, 0x87, 0x51, 0x75, 0x23, 0x1d, 0x09, 0x22, 0x74, 0x31, 0x0b, 0x9a,\n  0x4e, 0x79, 0x45, 0x02, 0x74, 0x3d, 0x0b, 0x9e, 0x2e, 0x6f, 0xc5, 0x97, 0x34, 0x82, 0x81, 0x3a, 0x1f, 0x85, 0xd0, 0xa5,\n  0xd0, 0xf4, 0x27, 0x37, 0xa2, 0xe8, 0x7b, 0xe8, 0x64, 0x13, 0x8e, 0x05, 0x42, 0x74, 0x42, 0x0b, 0xa9, 0x1d, 0xe8, 0x7f,\n  0x13, 0xa0, 0xe0, 0x5d, 0x0f, 0xdd, 0x0f, 0xc2, 0xe8, 0x7f, 0xe8, 0x74, 0x14, 0x0b, 0x00, 0x9d, 0x11, 0x62, 0xe8, 0x89,\n  0xe8, 0x86, 0x17, 0x42, 0xf0, 0x5d, 0x0f, 0xfd, 0x11, 0x82, 0xe5, 0x58, 0x54, 0x27, 0x44, 0x88, 0xba, 0x11, 0x39, 0xed,\n  0x17, 0x44, 0x57, 0x52, 0x6a, 0x2e, 0x57, 0x05, 0x42, 0x74, 0x4b, 0x0b, 0xa0, 0x47, 0xa9, 0x36, 0x17, 0x44, 0x7f, 0x43,\n  0xd8, 0xb8, 0x8c, 0x2a, 0x13, 0xa2, 0x6c, 0x0e, 0x90, 0x28, 0x33, 0x03, 0x68, 0x1c, 0x10, 0x0e, 0x18, 0x07, 0x11, 0x81,\n  0xc5, 0x00, 0x71, 0x70, 0x1c, 0x6a, 0x07, 0x1d, 0x81, 0xc8, 0x20, 0x39, 0x10, 0x07, 0x23, 0x80, 0xe4, 0xa8, 0x1c, 0x9d,\n  0x03, 0x94, 0x80, 0x72, 0xa8, 0x0e, 0x58, 0x81, 0xcb, 0x90, 0x39, 0x80, 0x03, 0x98, 0x70, 0x39, 0x8e, 0x03, 0x99, 0x50,\n  0x39, 0x9d, 0x03, 0x9a, 0x40, 0x39, 0xa9, 0x03, 0x9b, 0x00, 0x39, 0xb7, 0x03, 0x9b, 0xf0, 0x39, 0xc7, 0x03, 0x9c, 0xe0,\n  0x39, 0xd7, 0x03, 0x9d, 0xe0, 0x39, 0xe6, 0x03, 0x9e, 0xd0, 0x39, 0xf2, 0x03, 0x9f, 0xa0, 0x3a, 0x00, 0x80, 0xe8, 0x0a,\n  0x03, 0xa0, 0x44, 0x0e, 0x81, 0x90, 0x3a, 0x08, 0x80, 0xe8, 0x2a, 0x03, 0xa0, 0xc4, 0x0e, 0x83, 0x90, 0x3a, 0x10, 0x00,\n  0xe8, 0x48, 0x03, 0xa1, 0x40, 0x0e, 0x85, 0x70, 0x3a, 0x17, 0x40, 0xe8, 0x66, 0x03, 0xa1, 0xbc, 0x0e, 0x87, 0x70, 0x3a,\n  0x20, 0x00, 0xe8, 0x89, 0x03, 0xa2, 0x44, 0x0e, 0x89, 0xa0, 0x3a, 0x28, 0xc0, 0xe8, 0xad, 0x03, 0xa2, 0xd4, 0x0e, 0x8c,\n  0x00, 0x3a, 0x32, 0xc0, 0xe8, 0xd9, 0x03, 0xa9, 0x83, 0x0b, 0xa9, 0x9a, 0x0b, 0xa9, 0x6c, 0xe9, 0x20, 0x01, 0xd4, 0x5e,\n  0x1b, 0xa4, 0xa6, 0x7e, 0x92, 0xa0, 0xa0, 0x0e, 0xa3, 0x00, 0x58, 0x8d, 0xd2, 0xe7, 0x30, 0xf0, 0x50, 0x07, 0x51, 0x8c,\n  0x6e, 0x96, 0x31, 0xfa, 0x58, 0xe2, 0x80, 0x3a, 0x8c, 0xa1, 0x62, 0x16, 0xb1, 0xba, 0x59, 0x67, 0xe9, 0x66, 0x0a, 0x00,\n  0xea, 0x34, 0x0d, 0xd2, 0x61, 0x3f, 0x49, 0x88, 0x50, 0x07, 0x51, 0xa8, 0x2c, 0x46, 0xe9, 0x20, 0x1f, 0xa4, 0x82, 0x28,\n  0x03, 0xa8, 0xd9, 0x17, 0x49, 0x83, 0xa4, 0xb2, 0x07, 0x51, 0xb6, 0x2a, 0x16, 0x80, 0xb8, 0x10, 0x1c, 0x4a\n};\n\nconst size_t sizeof_hashBlock = sizeof(hashBlock);\nconst unsigned char hashBlock_witness[] = \"\";\n\n\nconst size_t sizeof_hashBlock_witness = 0;\n\n/* The commitment Merkle root of the above hashBlock Simplicity expression. */\nconst uint32_t hashBlock_cmr[] = {\n  0xa07dd7d8u, 0x22aed1adu, 0x40576a7au, 0x69fa1082u, 0x52d3dd89u, 0x539b1e4eu, 0x1f567851u, 0x9abf54e5u\n};\n\n/* The identity hash of the root of the above hashBlock Simplicity expression. */\nconst uint32_t hashBlock_ihr[] = {\n  0x609cc145u, 0x9375db72u, 0x8f2172c9u, 0x62807e31u, 0x61df4cceu, 0xd6592d2cu, 0x4e594a77u, 0x79ab3175u\n};\n\n/* The annotated Merkle root of the above hashBlock Simplicity expression. */\nconst uint32_t hashBlock_amr[] = {\n  0xc0b19e09u, 0x2443349au, 0x09b8b92fu, 0x369c1cd1u, 0x66d58d87u, 0x3e9d10cbu, 0x8d8ec427u, 0x707874fcu\n};\n\n/* The cost of the above hashBlock Simplicity expression in milli weight units. */\nconst ubounded hashBlock_cost = 258978952;\n"
  },
  {
    "path": "C/hashBlock.h",
    "content": "#ifndef SIMPLICITY_HASHBLOCK_H\n#define SIMPLICITY_HASHBLOCK_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     hashBlock\n */\nextern const unsigned char hashBlock[];\nextern const size_t sizeof_hashBlock;\nextern const unsigned char hashBlock_witness[];\nextern const size_t sizeof_hashBlock_witness;\n\n/* The commitment Merkle root of the above hashBlock Simplicity expression. */\nextern const uint32_t hashBlock_cmr[];\n\n/* The identity hash of the root of the above hashBlock Simplicity expression. */\nextern const uint32_t hashBlock_ihr[];\n\n/* The annotated Merkle root of the above hashBlock Simplicity expression. */\nextern const uint32_t hashBlock_amr[];\n\n/* The cost of the above hashBlock Simplicity expression in milli weight units. */\nextern const ubounded hashBlock_cost;\n\n#endif\n"
  },
  {
    "path": "C/include/simplicity/bitcoin/env.h",
    "content": "#ifndef SIMPLICITY_BITCOIN_ENV_H\n#define SIMPLICITY_BITCOIN_ENV_H\n\n#include <stdbool.h>\n#include <stdint.h>\n\n/* This section builds the 'rawBitcoinTransaction' structure which is the transaction data needed to build a Bitcoin 'txEnv' environment\n * for evaluating Simplicity expressions within.\n * The 'rawBitcoinTransaction' is copied into an opaque 'bitcoinTransaction' structure that can be reused within evaluating Simplicity on multiple\n * inputs within the same transaction.\n */\n\n/* A type for an unparsed buffer\n *\n * Invariant: if 0 < len then unsigned char buf[len]\n */\ntypedef struct rawBitcoinBuffer {\n  const unsigned char* buf;\n  uint32_t len;\n} rawBitcoinBuffer;\n\n/* A structure representing data for one output from a Bitcoin transaction.\n */\ntypedef struct rawBitcoinOutput {\n  uint64_t value;\n  rawBitcoinBuffer scriptPubKey;\n} rawBitcoinOutput;\n\n/* A structure representing data for one input from a Bitcoin transaction, including its taproot annex,\n * plus the TXO data of the output being redeemed.\n *\n * Invariant: unsigned char prevTxid[32];\n */\ntypedef struct rawInput {\n  const rawBitcoinBuffer* annex;\n  const unsigned char* prevTxid;\n  rawBitcoinOutput txo;\n  rawBitcoinBuffer scriptSig;\n  uint32_t prevIx;\n  uint32_t sequence;\n} rawBitcoinInput;\n\n/* A structure representing data for a Bitcoin transaction, including the TXO data of each output being redeemed.\n *\n * Invariant: unsigned char txid[32];\n *            rawBitcoinInput input[numInputs];\n *            rawBitcoinOutput output[numOutputs];\n */\ntypedef struct rawBitcoinTransaction {\n  const unsigned char* txid; /* While in theory we could recompute the txid ourselves, it is easier and safer for it to be provided. */\n  const rawBitcoinInput* input;\n  const rawBitcoinOutput* output;\n  uint32_t numInputs;\n  uint32_t numOutputs;\n  uint32_t version;\n  uint32_t lockTime;\n} rawBitcoinTransaction;\n\n/* A forward declaration for the structure containing a copy (and digest) of the rawTransaction data */\ntypedef struct bitcoinTransaction bitcoinTransaction;\n\n/* Allocate and initialize a 'bitcoinTransaction' from a 'rawBitcoinTransaction', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: NULL != rawTx\n */\nextern bitcoinTransaction* simplicity_bitcoin_mallocTransaction(const rawBitcoinTransaction* rawTx);\n\n/* Free a pointer to 'bitcoinTransaction'.\n */\nextern void simplicity_bitcoin_freeTransaction(bitcoinTransaction* tx);\n\n/* A structure representing taproot spending data for a Bitcoin transaction.\n *\n * Invariant: pathLen <= 128;\n *            unsigned char controlBlock[33+pathLen*32];\n *            unsigned char scriptCMR[32];\n */\ntypedef struct rawBitcoinTapEnv {\n  const unsigned char* controlBlock;\n  const unsigned char* scriptCMR;\n  unsigned char pathLen;\n} rawBitcoinTapEnv;\n\n/* A forward declaration for the structure containing a copy (and digest) of the rawBitcoinTapEnv data */\ntypedef struct bitcoinTapEnv bitcoinTapEnv;\n\n/* Allocate and initialize a 'bitcoinTapEnv' from a 'rawBitcoinTapEnv', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: *rawEnv is well-formed (i.e. rawEnv->pathLen <= 128.)\n */\nextern bitcoinTapEnv* simplicity_bitcoin_mallocTapEnv(const rawBitcoinTapEnv* rawEnv);\n\n/* Free a pointer to 'bitcoinTapEnv'.\n */\nextern void simplicity_bitcoin_freeTapEnv(bitcoinTapEnv* env);\n#endif\n"
  },
  {
    "path": "C/include/simplicity/elements/cmr.h",
    "content": "#ifndef SIMPLICITY_ELEMENTS_CMR_H\n#define SIMPLICITY_ELEMENTS_CMR_H\n\n#include <stdbool.h>\n#include <stddef.h>\n#include <simplicity/errorCodes.h>\n\n/* Deserialize a Simplicity 'program' and compute its CMR.\n *\n * Caution: no typechecking is performed, only a well-formedness check.\n *\n * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned,\n * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value.\n *\n * If the operation completes successfully then '*error' is set to 'SIMPLICITY_NO_ERROR', and the 'cmr' array is filled in with the program's computed CMR.\n *\n * Precondition: NULL != error;\n *               unsigned char cmr[32]\n *               unsigned char program[program_len]\n */\nextern bool simplicity_elements_computeCmr( simplicity_err* error, unsigned char* cmr\n                                          , const unsigned char* program, size_t program_len);\n#endif\n"
  },
  {
    "path": "C/include/simplicity/elements/env.h",
    "content": "#ifndef SIMPLICITY_ELEMENTS_ENV_H\n#define SIMPLICITY_ELEMENTS_ENV_H\n\n#include <stdbool.h>\n#include <stdint.h>\n\n/* This section builds the 'rawElementsTransaction' structure which is the transaction data needed to build an Elements 'txEnv' environment\n * for evaluating Simplicity expressions within.\n * The 'rawElementsTransaction' is copied into an opaque 'elementsTransaction' structure that can be reused within evaluating Simplicity on multiple\n * inputs within the same transaction.\n */\n\n/* A type for an unparsed buffer\n *\n * Invariant: if 0 < len then unsigned char buf[len]\n */\ntypedef struct rawElementsBuffer {\n  const unsigned char* buf;\n  uint32_t len;\n} rawElementsBuffer;\n\n/* A structure representing data for one output from an Elements transaction.\n *\n * Invariant: unsigned char asset[33] or asset == NULL;\n *            unsigned char value[value[0] == 1 ? 9 : 33] or value == NULL;\n *            unsigned char nonce[33] or nonce == NULL;\n */\ntypedef struct rawElementsOutput {\n  const unsigned char* asset;\n  const unsigned char* value;\n  const unsigned char* nonce;\n  rawElementsBuffer scriptPubKey;\n  rawElementsBuffer surjectionProof;\n  rawElementsBuffer rangeProof;\n} rawElementsOutput;\n\n/* A structure representing data for one input from an Elements transaction, including its taproot annex,\n * plus the TXO data of the output being redeemed.\n *\n * Invariant: unsigned char prevTxid[32];\n *            unsigned char pegin[32] or pegin == NULL;\n *            unsigned char issuance.blindingNonce[32] or (issuance.amount == NULL and issuance.inflationKeys == NULL);\n *            unsigned char issuance.assetEntropy[32] or (issuance.amount == NULL and issuance.inflationKeys == NULL);\n *            unsigned char issuance.amount[issuance.amount[0] == 1 ? 9 : 33] or issuance.amount == NULL;\n *            unsigned char issuance.inflationKeys[issuance.inflaitonKeys[0] == 1 ? 9 : 33] or issuance.inflationKeys == NULL;\n *            unsigned char txo.asset[33] or txo.asset == NULL;\n *            unsigned char txo.value[txo.value[0] == 1 ? 9 : 33] or txo.value == NULL;\n */\ntypedef struct rawElementsInput {\n  const rawElementsBuffer* annex;\n  const unsigned char* prevTxid;\n  const unsigned char* pegin;\n  struct {\n    const unsigned char* blindingNonce;\n    const unsigned char* assetEntropy;\n    const unsigned char* amount;\n    const unsigned char* inflationKeys;\n    rawElementsBuffer amountRangePrf;\n    rawElementsBuffer inflationKeysRangePrf;\n  } issuance;\n  struct {\n    const unsigned char* asset;\n    const unsigned char* value;\n    rawElementsBuffer scriptPubKey;\n  } txo;\n  rawElementsBuffer scriptSig;\n  uint32_t prevIx;\n  uint32_t sequence;\n} rawElementsInput;\n\n/* A structure representing data for an Elements transaction, including the TXO data of each output being redeemed.\n *\n * Invariant: unsigned char txid[32];\n *            rawElementsInput input[numInputs];\n *            rawElementsOutput output[numOutputs];\n */\ntypedef struct rawElementsTransaction {\n  const unsigned char* txid; /* While in theory we could recompute the txid ourselves, it is easier and safer for it to be provided. */\n  const rawElementsInput* input;\n  const rawElementsOutput* output;\n  uint32_t numInputs;\n  uint32_t numOutputs;\n  uint32_t version;\n  uint32_t lockTime;\n} rawElementsTransaction;\n\n/* A forward declaration for the structure containing a copy (and digest) of the rawElementsTransaction data */\ntypedef struct elementsTransaction elementsTransaction;\n\n/* Allocate and initialize a 'elementsTransaction' from a 'rawElementsTransaction', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: NULL != rawTx\n */\nextern elementsTransaction* simplicity_elements_mallocTransaction(const rawElementsTransaction* rawTx);\n\n/* Free a pointer to 'elementsTransaction'.\n */\nextern void simplicity_elements_freeTransaction(elementsTransaction* tx);\n\n/* A structure representing taproot spending data for an Elements transaction.\n *\n * Invariant: pathLen <= 128;\n *            unsigned char controlBlock[33+pathLen*32];\n *            unsigned char scriptCMR[32];\n */\ntypedef struct rawElementsTapEnv {\n  const unsigned char* controlBlock;\n  const unsigned char* scriptCMR;\n  unsigned char pathLen;\n} rawElementsTapEnv;\n\n/* A forward declaration for the structure containing a copy (and digest) of the rawElementsTapEnv data */\ntypedef struct elementsTapEnv elementsTapEnv;\n\n/* Allocate and initialize a 'elementsTapEnv' from a 'rawElementsTapEnv', copying or hashing the data as needed.\n * Returns NULL if malloc fails (or if malloc cannot be called because we require an allocation larger than SIZE_MAX).\n *\n * Precondition: *rawEnv is well-formed (i.e. rawEnv->pathLen <= 128.)\n */\nextern elementsTapEnv* simplicity_elements_mallocTapEnv(const rawElementsTapEnv* rawEnv);\n\n/* Free a pointer to 'elementsTapEnv'.\n */\nextern void simplicity_elements_freeTapEnv(elementsTapEnv* env);\n#endif\n"
  },
  {
    "path": "C/include/simplicity/elements/exec.h",
    "content": "#ifndef SIMPLICITY_ELEMENTS_EXEC_H\n#define SIMPLICITY_ELEMENTS_EXEC_H\n\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <simplicity/errorCodes.h>\n#include <simplicity/elements/env.h>\n\n/* Deserialize a Simplicity 'program' with its 'witness' data and execute it in the environment of the 'ix'th input of 'tx' with `taproot`.\n *\n * If at any time malloc fails then '*error' is set to 'SIMPLICITY_ERR_MALLOC' and 'false' is returned,\n * meaning we were unable to determine the result of the simplicity program.\n * Otherwise, 'true' is returned indicating that the result was successfully computed and returned in the '*error' value.\n *\n * If deserialization, analysis, or execution fails, then '*error' is set to some simplicity_err.\n * In particular, if the cost analysis exceeds the budget, or exceeds BUDGET_MAX, then '*error' is set to 'SIMPLICITY_ERR_EXEC_BUDGET'.\n * On the other hand, if the cost analysis is less than or equal to minCost, then '*error' is set to 'SIMPLICITY_ERR_OVERWEIGHT'.\n *\n * Note that minCost and budget parameters are in WU, while the cost analysis will be performed in milliWU.\n * Thus the minCost and budget specify a half open interval (minCost, budget] of acceptable cost values in milliWU.\n * Setting minCost to 0 effectively disables the minCost check as every Simplicity program has a non-zero cost analysis.\n *\n * If 'amr != NULL' and the annotated Merkle root of the decoded expression doesn't match 'amr' then '*error' is set to 'SIMPLICITY_ERR_AMR'.\n *\n * Otherwise '*error' is set to 'SIMPLICITY_NO_ERROR'.\n *\n * If 'ihr != NULL' and '*error' is set to 'SIMPLICITY_NO_ERROR', then the identity hash of the root of the decoded expression is written to 'ihr'.\n * Otherwise if 'ihr != NULL'  and '*error' is not set to 'SIMPLCITY_NO_ERROR', then 'ihr' may or may not be written to.\n *\n * Precondition: NULL != error;\n *               NULL != ihr implies unsigned char ihr[32]\n *               NULL != tx;\n *               NULL != taproot;\n *               unsigned char genesisBlockHash[32]\n *               0 <= minCost <= budget;\n *               NULL != amr implies unsigned char amr[32]\n *               unsigned char program[program_len]\n *               unsigned char witness[witness_len]\n */\nextern bool simplicity_elements_execSimplicity( simplicity_err* error, unsigned char* ihr\n                                              , const elementsTransaction* tx, uint_fast32_t ix, const elementsTapEnv* taproot\n                                              , const unsigned char* genesisBlockHash\n                                              , int64_t minCost, int64_t budget\n                                              , const unsigned char* amr\n                                              , const unsigned char* program, size_t program_len\n                                              , const unsigned char* witness, size_t witness_len);\n#endif\n"
  },
  {
    "path": "C/include/simplicity/errorCodes.h",
    "content": "/* This module defines some constants used for error codes when processing Simplicity.\n * Errors can either indicate a transient or a permanent failure.\n */\n#ifndef SIMPLICITY_ERRORCODES_H\n#define SIMPLICITY_ERRORCODES_H\n\n#include <stdbool.h>\n\n/* By convention, odd error codes are transient failures (i.e. out of memory)\n * while even error codes are permanent failures (i.e. unexpected end of file or parsing error, etc.)\n */\ntypedef enum {\n  SIMPLICITY_NO_ERROR = 0,\n  SIMPLICITY_ERR_MALLOC = -1,\n  SIMPLICITY_ERR_NOT_YET_IMPLEMENTED = -3,\n  SIMPLICITY_ERR_DATA_OUT_OF_RANGE = -2,\n  SIMPLICITY_ERR_DATA_OUT_OF_ORDER = -4,\n  SIMPLICITY_ERR_FAIL_CODE = -6,\n  SIMPLICITY_ERR_RESERVED_CODE = -8,\n  SIMPLICITY_ERR_HIDDEN = -10,\n  SIMPLICITY_ERR_BITSTREAM_EOF = -12,\n  SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES = -14,\n  SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING = -16,\n  SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION = -18,\n  SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK = -20,\n  SIMPLICITY_ERR_TYPE_INFERENCE_NOT_PROGRAM = -22,\n  SIMPLICITY_ERR_WITNESS_EOF = -24,\n  SIMPLICITY_ERR_WITNESS_TRAILING_BYTES = -26,\n  SIMPLICITY_ERR_WITNESS_ILLEGAL_PADDING = -28,\n  SIMPLICITY_ERR_UNSHARED_SUBEXPRESSION = -30,\n  SIMPLICITY_ERR_CMR = -32,\n  SIMPLICITY_ERR_EXEC_BUDGET = -34,\n  SIMPLICITY_ERR_EXEC_MEMORY = -36,\n  SIMPLICITY_ERR_EXEC_JET = -38,\n  SIMPLICITY_ERR_EXEC_ASSERT = -40,\n  SIMPLICITY_ERR_ANTIDOS = -42,\n  SIMPLICITY_ERR_HIDDEN_ROOT = -44,\n  SIMPLICITY_ERR_AMR = -46,\n  SIMPLICITY_ERR_OVERWEIGHT = -48,\n} simplicity_err;\n\n/* Check if failure is permanent (or success which is always permanent). */\nstatic inline bool IS_PERMANENT(simplicity_err err) {\n  return !(err & 1);\n}\n\n/* Check if no failure. */\nstatic inline bool IS_OK(simplicity_err err) {\n  return SIMPLICITY_NO_ERROR == err;\n}\n\nstatic inline const char * SIMPLICITY_ERR_MSG(simplicity_err err) {\n  switch (err) {\n  case SIMPLICITY_NO_ERROR:\n    return \"No error\";\n  case SIMPLICITY_ERR_MALLOC:\n    return \"Memory allocation failed\";\n  case SIMPLICITY_ERR_NOT_YET_IMPLEMENTED:\n    return \"Incomplete implementation (this should not occur)\";\n  case SIMPLICITY_ERR_DATA_OUT_OF_RANGE:\n    return \"Value out of range\";\n  case SIMPLICITY_ERR_DATA_OUT_OF_ORDER:\n    return \"Non-canonical order\";\n  case SIMPLICITY_ERR_FAIL_CODE:\n    return \"Program has FAIL node\";\n  case SIMPLICITY_ERR_RESERVED_CODE:\n    return \"Program has reserved codeword\";\n  case SIMPLICITY_ERR_HIDDEN:\n    return \"Program has node with a HIDDEN child in a position where it is not allowed\";\n  case SIMPLICITY_ERR_BITSTREAM_EOF:\n    return \"Unexpected end of bitstream\";\n  case SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES:\n    return \"Trailing bytes after final byte of program\";\n  case SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING:\n    return \"Illegal padding in final byte of program\";\n  case SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION:\n    return \"Unification failure\";\n  case SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK:\n    return \"Occurs check failure\";\n  case SIMPLICITY_ERR_TYPE_INFERENCE_NOT_PROGRAM:\n    return \"Expression not unit to unit\";\n  case SIMPLICITY_ERR_WITNESS_EOF:\n    return \"Unexpected end of witness block\";\n  case SIMPLICITY_ERR_WITNESS_TRAILING_BYTES:\n    return \"Trailing bytes after final byte of witness\";\n  case SIMPLICITY_ERR_WITNESS_ILLEGAL_PADDING:\n    return \"Illegal padding in final byte of witness\";\n  case SIMPLICITY_ERR_UNSHARED_SUBEXPRESSION:\n    return \"Subexpression not properly shared\";\n  case SIMPLICITY_ERR_CMR:\n    return \"Program's CMR does not match\";\n  case SIMPLICITY_ERR_EXEC_BUDGET:\n    return \"Program's execution cost could exceed budget\";\n  case SIMPLICITY_ERR_EXEC_MEMORY:\n    return \"Program's memory cost could exceed limit\";\n  case SIMPLICITY_ERR_EXEC_JET:\n    return \"Assertion failed inside jet\";\n  case SIMPLICITY_ERR_EXEC_ASSERT:\n    return \"Assertion failed\";\n  case SIMPLICITY_ERR_ANTIDOS:\n    return \"Anti-DOS check failed\";\n  case SIMPLICITY_ERR_HIDDEN_ROOT:\n    return \"Program's root is HIDDEN\";\n  case SIMPLICITY_ERR_AMR:\n    return \"Program's AMR does not match\";\n  case SIMPLICITY_ERR_OVERWEIGHT:\n    return \"Program's budget is too large\";\n  default:\n    return \"Unknown error code\";\n  }\n}\n\n#endif\n"
  },
  {
    "path": "C/jets-secp256k1.c",
    "content": "#include \"jets.h\"\n#include \"taptweak.h\"\n\n#include \"precomputed.h\"\n#include \"sha256.h\"\n#include \"secp256k1/secp256k1_impl.h\"\n\n/* Tests to see if a secp256k1 jacobian point is on curve.\n *\n * This function doesn't occur in the libsecp256k1 library, so we implement it here.\n * We test if the point satisfies the jacobian equation y^2 = x^3 + 7*z^6.\n *\n * Warning, the degenerate point (0, 0, 0) is accepted by this definition even though arguably it isn't on curve.\n * However libsecp256k1 sets the point to (0, 0, 0) when the infinity flag is set See 'secp256k1_gej_set_infinity',\n * and we end up using it as a canonical representative of infinity.\n */\nstatic bool simplicity_gej_is_valid_var(const secp256k1_gej *a) {\n  secp256k1_fe x3, y2, z6;\n  secp256k1_fe_sqr(&y2, &a->y);\n  secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);\n  secp256k1_fe_sqr(&z6, &a->z); secp256k1_fe_mul(&z6, &z6, &a->z); secp256k1_fe_sqr(&z6, &z6);\n  secp256k1_fe_mul_int(&z6, 7);\n  secp256k1_fe_add(&x3, &z6);\n  return secp256k1_fe_equal_var(&y2, &x3);\n}\n\n/* Read a secp256k1 field element value from the 'src' frame, advancing the cursor 256 cells.\n *\n * Precondition: '*src' is a valid read frame for 256 more cells;\n *               NULL != r;\n */\nstatic inline void read_fe(secp256k1_fe* r, frameItem* src) {\n  unsigned char buf[32];\n\n  read8s(buf, 32, src);\n  if (!secp256k1_fe_set_b32(r, buf)) secp256k1_fe_normalize_var(r);\n}\n\n/* Write a secp256k1 field element value to the 'dst' frame, advancing the cursor 256 cells.\n * The field value 'r' is normalized as a side-effect.\n *\n * Precondition: '*dst' is a valid write frame for 256 more cells;\n *               NULL != r;\n */\nstatic inline void write_fe(frameItem* dst, secp256k1_fe* r) {\n  unsigned char buf[32];\n\n  secp256k1_fe_normalize_var(r);\n  secp256k1_fe_get_b32(buf, r);\n  write8s(dst, buf, 32);\n}\n\n/* Skip 256 cells, the size of a secp256k1 field element value, in the 'dst' frame.\n *\n * Precondition: '*dst' is a valid write frame for 256 more cells;\n */\nstatic inline void skip_fe(frameItem* dst) {\n  skipBits(dst, 256);\n}\n\n/* Read a (non-infinity) secp256k1 affine group element value from the 'src' frame, advancing the cursor 512 cells.\n *\n * Precondition: '*src' is a valid read frame for 512 more cells;\n *               NULL != r;\n */\nstatic inline void read_ge(secp256k1_ge* r, frameItem* src) {\n  read_fe(&r->x, src);\n  read_fe(&r->y, src);\n  r->infinity = 0;\n}\n\n/* Write a secp256k1 affine group element value to the 'dst' frame, advancing the cursor 512 cells.\n *\n * Precondition: '*dst' is a valid write frame for 512 more cells;\n *               NULL != r;\n */\nstatic inline void write_ge(frameItem* dst, secp256k1_ge* r) {\n  write_fe(dst, &r->x);\n  write_fe(dst, &r->y);\n}\n\n/* Skip 512 cells, the size of a secp256k1 affine group element value, in the 'dst' frame.\n *\n * Precondition: '*dst' is a valid write frame for 512 more cells;\n */\nstatic inline void skip_ge(frameItem* dst) {\n  skip_fe(dst);\n  skip_fe(dst);\n}\n\n/* Read a secp256k1 jacobian group element value from the 'src' frame, advancing the cursor 768 cells.\n *\n * Precondition: '*src' is a valid read frame for 768 more cells;\n *               NULL != r;\n */\nstatic inline void read_gej(secp256k1_gej* r, frameItem* src) {\n  read_fe(&r->x, src);\n  read_fe(&r->y, src);\n  read_fe(&r->z, src);\n  r->infinity = secp256k1_fe_is_zero(&r->z);\n}\n\n/* Write a secp256k1 jacobian group element value to the 'dst' frame, advancing the cursor 768 cells.\n * If 'r->infinity' then an fe_zero value to all coordinates in the 'dst' frame.\n * The components of 'r' may be normalized as a side-effect.\n *\n * Precondition: '*dst' is a valid write frame for 768 more cells;\n *               NULL != r;\n */\nstatic inline void write_gej(frameItem* dst, secp256k1_gej* r) {\n  write_fe(dst, &r->x);\n  write_fe(dst, &r->y);\n  write_fe(dst, &r->z);\n}\n\n/* Read a secp256k1 scalar element value from the 'src' frame, advancing the cursor 256 cells.\n *\n * Precondition: '*src' is a valid read frame for 256 more cells;\n *               NULL != r;\n */\nstatic inline void read_scalar(secp256k1_scalar* r, frameItem* src) {\n  unsigned char buf[32];\n\n  read8s(buf, 32, src);\n  secp256k1_scalar_set_b32(r, buf, NULL);\n}\n\n/* Write a secp256k1 scalar element value to the 'dst' frame, advancing the cursor 256 cells.\n *\n * Precondition: '*dst' is a valid write frame for 256 more cells;\n *               NULL != r;\n */\nstatic inline void write_scalar(frameItem* dst, const secp256k1_scalar* r) {\n  unsigned char buf[32];\n\n  secp256k1_scalar_get_b32(buf, r);\n  write8s(dst, buf, 32);\n}\n\nbool simplicity_fe_normalize(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a;\n  read_fe(&a, &src);\n  write_fe(dst, &a);\n  return true;\n}\n\nbool simplicity_fe_negate(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a;\n  read_fe(&a, &src);\n  secp256k1_fe_negate(&a, &a, 1);\n  write_fe(dst, &a);\n  return true;\n}\n\nbool simplicity_fe_add(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a, b;\n  read_fe(&a, &src);\n  read_fe(&b, &src);\n  secp256k1_fe_add(&a, &b);\n  write_fe(dst, &a);\n  return true;\n}\n\nbool simplicity_fe_square(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a;\n  read_fe(&a, &src);\n  secp256k1_fe_sqr(&a, &a);\n  write_fe(dst, &a);\n  return true;\n}\n\nbool simplicity_fe_multiply(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a, b;\n  read_fe(&a, &src);\n  read_fe(&b, &src);\n  secp256k1_fe_mul(&a, &a, &b);\n  write_fe(dst, &a);\n  return true;\n}\n\nbool simplicity_fe_multiply_beta(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a;\n  read_fe(&a, &src);\n  secp256k1_fe_mul(&a, &a, &secp256k1_const_beta);\n  write_fe(dst, &a);\n  return true;\n}\n\nbool simplicity_fe_invert(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a;\n  read_fe(&a, &src);\n  secp256k1_fe_inv_var(&a, &a);\n  write_fe(dst, &a);\n  return true;\n}\n\nbool simplicity_fe_square_root(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe r, a;\n  read_fe(&a, &src);\n  int result = secp256k1_fe_sqrt_var(&r, &a);\n  if (writeBit(dst, result)) {\n    write_fe(dst, &r);\n  } else {\n    skip_fe(dst);\n  }\n  return true;\n}\n\nbool simplicity_fe_is_zero(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a;\n  read_fe(&a, &src);\n  writeBit(dst, secp256k1_fe_is_zero(&a));\n  return true;\n}\n\nbool simplicity_fe_is_odd(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe a;\n  read_fe(&a, &src);\n  writeBit(dst, secp256k1_fe_is_odd(&a));\n  return true;\n}\n\nbool simplicity_scalar_normalize(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a;\n  read_scalar(&a, &src);\n  write_scalar(dst, &a);\n  return true;\n}\n\nbool simplicity_scalar_negate(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a;\n  read_scalar(&a, &src);\n  secp256k1_scalar_negate(&a, &a);\n  write_scalar(dst, &a);\n  return true;\n}\n\nbool simplicity_scalar_add(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a, b;\n  read_scalar(&a, &src);\n  read_scalar(&b, &src);\n  secp256k1_scalar_add(&a, &a, &b);\n  write_scalar(dst, &a);\n  return true;\n}\n\nbool simplicity_scalar_square(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a;\n  read_scalar(&a, &src);\n  secp256k1_scalar_mul(&a, &a, &a);\n  write_scalar(dst, &a);\n  return true;\n}\n\nbool simplicity_scalar_multiply(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a, b;\n  read_scalar(&a, &src);\n  read_scalar(&b, &src);\n  secp256k1_scalar_mul(&a, &a, &b);\n  write_scalar(dst, &a);\n  return true;\n}\n\nbool simplicity_scalar_multiply_lambda(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a;\n  read_scalar(&a, &src);\n  secp256k1_scalar_mul(&a, &a, &secp256k1_const_lambda);\n  write_scalar(dst, &a);\n  return true;\n}\n\nbool simplicity_scalar_invert(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a;\n  read_scalar(&a, &src);\n  secp256k1_scalar_inverse_var(&a, &a);\n  write_scalar(dst, &a);\n  return true;\n}\n\nbool simplicity_scalar_is_zero(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_scalar a;\n  read_scalar(&a, &src);\n  writeBit(dst, secp256k1_scalar_is_zero(&a));\n  return true;\n}\n\nbool simplicity_gej_infinity(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) src; // src is unused;\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  secp256k1_gej_set_infinity(&a);\n  write_gej(dst, &a);\n  return true;\n}\n\nbool simplicity_gej_rescale(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  secp256k1_fe c;\n  read_gej(&a, &src);\n  read_fe(&c, &src);\n  secp256k1_gej_rescale(&a, &c);\n  write_gej(dst, &a);\n  return true;\n}\n\nbool simplicity_gej_normalize(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  secp256k1_ge r;\n  read_gej(&a, &src);\n  if (writeBit(dst, !secp256k1_gej_is_infinity(&a))) {\n     secp256k1_ge_set_gej_var(&r, &a);\n     write_ge(dst, &r);\n  } else {\n     skip_ge(dst);\n  }\n  return true;\n}\n\nbool simplicity_gej_negate(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  read_gej(&a, &src);\n  secp256k1_gej_neg(&a, &a);\n  write_gej(dst, &a);\n  return true;\n}\n\nbool simplicity_ge_negate(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_ge a;\n  read_ge(&a, &src);\n  secp256k1_ge_neg(&a, &a);\n  write_ge(dst, &a);\n  return true;\n}\n\nbool simplicity_gej_double(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  read_gej(&a, &src);\n  secp256k1_gej_double_var(&a, &a, NULL);\n  write_gej(dst, &a);\n  return true;\n}\n\nbool simplicity_gej_add(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a, b;\n  read_gej(&a, &src);\n  read_gej(&b, &src);\n  secp256k1_gej_add_var(&a, &a, &b, NULL);\n  write_gej(dst, &a);\n  return true;\n}\n\nbool simplicity_gej_ge_add_ex(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  secp256k1_ge b;\n  secp256k1_fe rzr;\n  secp256k1_fe_clear(&rzr);\n  read_gej(&a, &src);\n  read_ge(&b, &src);\n  secp256k1_gej_add_ge_var(&a, &a, &b, &rzr);\n  write_fe(dst, &rzr);\n  write_gej(dst, &a);\n  return true;\n}\n\nbool simplicity_gej_ge_add(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  secp256k1_ge b;\n  read_gej(&a, &src);\n  read_ge(&b, &src);\n  secp256k1_gej_add_ge_var(&a, &a, &b, NULL);\n  write_gej(dst, &a);\n  return true;\n}\n\nbool simplicity_gej_is_infinity(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  read_gej(&a, &src);\n  writeBit(dst, secp256k1_gej_is_infinity(&a));\n  return true;\n}\n\nbool simplicity_gej_equiv(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a, b;\n  read_gej(&a, &src);\n  read_gej(&b, &src);\n  writeBit(dst, secp256k1_gej_eq_var(&a, &b));\n  return true;\n}\n\nbool simplicity_gej_ge_equiv(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  secp256k1_ge b;\n  read_gej(&a, &src);\n  read_ge(&b, &src);\n  writeBit(dst, secp256k1_gej_eq_ge_var(&a, &b));\n  return true;\n}\n\nbool simplicity_gej_x_equiv(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe x;\n  secp256k1_gej a;\n  read_fe(&x, &src);\n  read_gej(&a, &src);\n  writeBit(dst, (!secp256k1_gej_is_infinity(&a)) && secp256k1_gej_eq_x_var(&x, &a));\n  return true;\n}\n\nbool simplicity_gej_y_is_odd(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  secp256k1_ge b;\n  read_gej(&a, &src);\n  if (secp256k1_gej_is_infinity(&a)) {\n     writeBit(dst, false);\n  } else {\n    secp256k1_ge_set_gej_var(&b, &a);\n    secp256k1_fe_normalize_var(&b.y);\n    writeBit(dst, secp256k1_fe_is_odd(&b.y));\n  }\n  return true;\n}\n\nbool simplicity_gej_is_on_curve(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej a;\n  read_gej(&a, &src);\n  writeBit(dst, simplicity_gej_is_valid_var(&a));\n  return true;\n}\n\nbool simplicity_ge_is_on_curve(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_ge a;\n  read_ge(&a, &src);\n  writeBit(dst, secp256k1_ge_is_valid_var(&a));\n  return true;\n}\n\nbool simplicity_off_curve_scale(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej r, a;\n  secp256k1_scalar na;\n  static const secp256k1_scalar ng = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);\n\n  read_scalar(&na, &src);\n  read_gej(&a, &src);\n  secp256k1_ecmult(&r, &a, &na, &ng);\n  write_gej(dst, &r);\n  return true;\n}\n\nbool simplicity_scale(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej r, a;\n  secp256k1_scalar na;\n  static const secp256k1_scalar ng = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);\n\n  read_scalar(&na, &src);\n  read_gej(&a, &src);\n  if (simplicity_gej_is_valid_var(&a)) {\n    secp256k1_ecmult(&r, &a, &na, &ng);\n    write_gej(dst, &r);\n    return true;\n  } else {\n    return false;\n  }\n}\n\nbool simplicity_generate(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej r;\n  static const secp256k1_gej a = SECP256K1_GEJ_CONST_INFINITY;\n  static const secp256k1_scalar na = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);\n  secp256k1_scalar ng;\n\n  read_scalar(&ng, &src);\n  secp256k1_ecmult(&r, &a, &na, &ng);\n  write_gej(dst, &r);\n  return true;\n}\n\nbool simplicity_off_curve_linear_combination_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej r, a;\n  secp256k1_scalar na, ng;\n\n  read_scalar(&na, &src);\n  read_gej(&a, &src);\n  read_scalar(&ng, &src);\n  secp256k1_ecmult(&r, &a, &na, &ng);\n  write_gej(dst, &r);\n  return true;\n}\n\nbool simplicity_linear_combination_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_gej r, a;\n  secp256k1_scalar na, ng;\n\n  read_scalar(&na, &src);\n  read_gej(&a, &src);\n  read_scalar(&ng, &src);\n  if (simplicity_gej_is_valid_var(&a)) {\n    secp256k1_ecmult(&r, &a, &na, &ng);\n    write_gej(dst, &r);\n    return true;\n  } else {\n    return false;\n  }\n}\n\nbool simplicity_linear_verify_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  (void) env; // env is unused;\n\n  secp256k1_ge a, b;\n  secp256k1_scalar na, ng;\n\n  read_scalar(&na, &src);\n  read_ge(&a, &src);\n  read_scalar(&ng, &src);\n  read_ge(&b, &src);\n  if (secp256k1_ge_is_valid_var(&a) &&\n      secp256k1_ge_is_valid_var(&b)) {\n    secp256k1_gej r, a0;\n    secp256k1_gej_set_ge(&a0, &a);\n    secp256k1_ge_neg(&b, &b);\n    secp256k1_ecmult(&r, &a0, &na, &ng);\n    secp256k1_gej_add_ge_var(&r, &r, &b, NULL);\n    return secp256k1_gej_is_infinity(&r);\n  } else {\n    return false;\n  }\n}\n\nbool simplicity_decompress(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n\n  secp256k1_fe x;\n  secp256k1_ge r;\n  bool y = readBit(&src);\n  read_fe(&x, &src);\n  if (writeBit(dst, secp256k1_ge_set_xo_var(&r, &x, y))) {\n    write_ge(dst, &r);\n  } else {\n    skip_ge(dst);\n  }\n\n  return true;\n}\n\nbool simplicity_point_verify_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  (void) env; // env is unused;\n\n  bool ay, by;\n  secp256k1_fe ax, bx;\n  secp256k1_ge a, b;\n  secp256k1_scalar na, ng;\n\n  read_scalar(&na, &src);\n  ay = readBit(&src);\n  read_fe(&ax, &src);\n  read_scalar(&ng, &src);\n  by = readBit(&src);\n  read_fe(&bx, &src);\n  if (secp256k1_ge_set_xo_var(&a, &ax, ay) &&\n      secp256k1_ge_set_xo_var(&b, &bx, by)) {\n    secp256k1_gej r, a0;\n    secp256k1_gej_set_ge(&a0, &a);\n    secp256k1_ge_neg(&b, &b);\n    secp256k1_ecmult(&r, &a0, &na, &ng);\n    secp256k1_gej_add_ge_var(&r, &r, &b, NULL);\n    return secp256k1_gej_is_infinity(&r);\n  } else {\n    return false;\n  }\n}\n\nbool simplicity_bip_0340_verify(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  (void) env; // env is unused;\n\n  unsigned char buf[32];\n  secp256k1_xonly_pubkey pubkey;\n  unsigned char msg[32];\n  unsigned char sig[64];\n\n  read8s(buf, 32, &src);\n  if (!secp256k1_xonly_pubkey_parse(&pubkey, buf)) return false;\n\n  read8s(msg, 32, &src);\n  read8s(sig, 64, &src);\n\n  return secp256k1_schnorrsig_verify(sig, msg, sizeof(msg), &pubkey);\n}\n\n/* check_sig_verify : TWO^256*TWO^512*TWO^512 |- ONE */\nbool simplicity_check_sig_verify(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) dst; // dst is unused;\n  (void) env; // env is unused;\n\n  unsigned char buf[32];\n  secp256k1_xonly_pubkey pubkey;\n  unsigned char msg[64];\n  unsigned char sig[64];\n\n  read8s(buf, 32, &src);\n  if (!secp256k1_xonly_pubkey_parse(&pubkey, buf)) return false;\n\n  {\n    sha256_midstate output;\n    sha256_context ctx = sha256_tagged_init(output.s, &signatureIV);\n    read8s(msg, 64, &src);\n    sha256_uchars(&ctx, msg, 64);\n    sha256_finalize(&ctx);\n    sha256_fromMidstate(buf, output.s);\n  }\n\n  read8s(sig, 64, &src);\n  return secp256k1_schnorrsig_verify(sig, buf, sizeof(buf), &pubkey);\n}\n\n/* swu : FE |- GE */\nbool simplicity_swu(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n  secp256k1_fe t;\n  secp256k1_ge ge;\n  read_fe(&t, &src);\n  shallue_van_de_woestijne(&ge, &t);\n  write_ge(dst, &ge);\n  return true;\n}\n\n/* hash_to_curve : TWO^256 |- GE */\nbool simplicity_hash_to_curve(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; // env is unused;\n  unsigned char key[32];\n  secp256k1_generator gen;\n  secp256k1_ge ge;\n  read8s(key, 32, &src);\n  if(!secp256k1_generator_generate(&gen, key)) return false;\n  secp256k1_generator_load(&ge, &gen);\n  write_ge(dst, &ge);\n  return true;\n}\n\n/* THIS IS NOT A JET.  It doesn't have the type signature of a jet\n * This is a generic taptweak jet implementation parameterized by the tag used in the hash.\n * It is designed to be specialized to implement slightly different taptweak operations for Bitcoin and Elements.\n *\n * PUBKEY * TWO^256 |- PUBKEY\n *\n * Precondition: unsigned char[tagLen] tag\n */\nbool simplicity_generic_taptweak(frameItem* dst, frameItem *src, const unsigned char *tagName, size_t tagLen) {\n  unsigned char buf[32];\n  secp256k1_xonly_pubkey input_pubkey, output_pubkey;\n  secp256k1_pubkey pubkey;\n  sha256_midstate taptweakTag, input_hash, output_hash;\n  {\n    sha256_context ctx = sha256_init(taptweakTag.s);\n    sha256_uchars(&ctx, tagName, tagLen);\n    sha256_finalize(&ctx);\n  }\n  sha256_context ctx = sha256_init(output_hash.s);\n  sha256_hash(&ctx, &taptweakTag);\n  sha256_hash(&ctx, &taptweakTag);\n\n  read8s(buf, 32, src);\n  sha256_uchars(&ctx, buf, 32);\n  if (!secp256k1_xonly_pubkey_parse(&input_pubkey, buf)) return false;\n  read32s(input_hash.s, 8, src);\n  sha256_hash(&ctx, &input_hash);\n  sha256_finalize(&ctx);\n  sha256_fromMidstate(buf, output_hash.s);\n  if (!secp256k1_xonly_pubkey_tweak_add(&pubkey, &input_pubkey, buf)) return false;\n  if (!secp256k1_xonly_pubkey_from_pubkey(&output_pubkey, NULL, &pubkey)) return false;\n  if (!secp256k1_xonly_pubkey_serialize(buf,&output_pubkey)) return false;\n  write8s(dst, buf, 32);\n  return true;\n}\n"
  },
  {
    "path": "C/jets.c",
    "content": "#include \"jets.h\"\n#include \"secp256k1/secp256k1.h\"\n#include \"secp256k1/util.h\"\n#ifdef SECP256K1_WIDEMUL_INT128\n# include \"secp256k1/int128.h\"\n# include \"secp256k1/int128_impl.h\"\n#else\n# include \"secp256k1/int128_struct.h\"\n# include \"secp256k1/int128_struct_impl.h\"\n#endif\n\nstatic void write128(frameItem* frame, const secp256k1_uint128* x) {\n  simplicity_write64(frame, secp256k1_u128_hi_u64(x));\n  simplicity_write64(frame, secp256k1_u128_to_u64(x));\n}\n\n/* verify : TWO |- ONE */\nbool simplicity_verify(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  (void) dst; /* dst is unused. */\n  return readBit(&src);\n}\n\n/* low_1 : ONE |- TWO */\nbool simplicity_low_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  (void) src; /* src is unused. */\n  writeBit(dst, 0);\n  return true;\n}\n\n#define LOW_(bits)                                                            \\\n/* low_n : ONE |- TWO^n */                                                    \\\nbool simplicity_low_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  (void) src; /* src is unused. */                                            \\\n  simplicity_write##bits(dst, 0);                                             \\\n  return true;                                                                \\\n}\nLOW_(8)\nLOW_(16)\nLOW_(32)\nLOW_(64)\n\n/* high_1 : ONE |- TWO */\nbool simplicity_high_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  (void) src; /* src is unused. */\n  writeBit(dst, 1);\n  return true;\n}\n\n#define HIGH_(bits)                                                            \\\n/* high_n : ONE |- TWO^n */                                                    \\\nbool simplicity_high_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                             \\\n  (void) src; /* src is unused. */                                             \\\n  simplicity_write##bits(dst, UINT##bits##_MAX);                               \\\n  return true;                                                                 \\\n}\nHIGH_(8)\nHIGH_(16)\nHIGH_(32)\nHIGH_(64)\n\n/* complement_1 : TWO |- TWO */\nbool simplicity_complement_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  writeBit(dst, !x);\n  return true;\n}\n\n#define COMPLEMENT_(bits)                                                            \\\n/* complement_n : TWO^n |- TWO^n */                                                  \\\nbool simplicity_complement_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                   \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                               \\\n  simplicity_write##bits(dst, ~(1U*x));                                              \\\n  return true;                                                                       \\\n}\nCOMPLEMENT_(8)\nCOMPLEMENT_(16)\nCOMPLEMENT_(32)\nCOMPLEMENT_(64)\n\n/* and_1 : TWO * TWO |- TWO */\nbool simplicity_and_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  bool y = readBit(&src);\n  writeBit(dst, x && y);\n  return true;\n}\n\n#define AND_(bits)                                                            \\\n/* and_n : TWO^n * TWO^n |- TWO^n */                                          \\\nbool simplicity_and_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                        \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                        \\\n  simplicity_write##bits(dst, x & y);                                         \\\n  return true;                                                                \\\n}\nAND_(8)\nAND_(16)\nAND_(32)\nAND_(64)\n\n/* or_1 : TWO * TWO |- TWO */\nbool simplicity_or_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  bool y = readBit(&src);\n  writeBit(dst, x || y);\n  return true;\n}\n\n#define OR_(bits)                                                            \\\n/* or_n : TWO^n * TWO^n |- TWO^n */                                          \\\nbool simplicity_or_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                           \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                       \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                       \\\n  simplicity_write##bits(dst, x | y);                                        \\\n  return true;                                                               \\\n}\nOR_(8)\nOR_(16)\nOR_(32)\nOR_(64)\n\n/* xor_1 : TWO * TWO |- TWO */\nbool simplicity_xor_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  bool y = readBit(&src);\n  writeBit(dst, x ^ y);\n  return true;\n}\n\n#define XOR_(bits)                                                            \\\n/* xor_n : TWO^n * TWO^n |- TWO^n */                                          \\\nbool simplicity_xor_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                        \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                        \\\n  simplicity_write##bits(dst, x ^ y);                                         \\\n  return true;                                                                \\\n}\nXOR_(8)\nXOR_(16)\nXOR_(32)\nXOR_(64)\n\n/* maj_1 : TWO * TWO * TWO |- TWO */\nbool simplicity_maj_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  bool y = readBit(&src);\n  bool z = readBit(&src);\n  writeBit(dst, (x && y) || (y && z) || (z && x));\n  return true;\n}\n\n#define MAJ_(bits)                                                            \\\n/* maj_n : TWO^n * TWO^n * TWO^n |- TWO^n */                                  \\\nbool simplicity_maj_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                        \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                        \\\n  uint_fast##bits##_t z = simplicity_read##bits(&src);                        \\\n  simplicity_write##bits(dst, (x&y) | (y&z) | (z&x));                         \\\n  return true;                                                                \\\n}\nMAJ_(8)\nMAJ_(16)\nMAJ_(32)\nMAJ_(64)\n\n/* xor_xor_1 : TWO * TWO * TWO |- TWO */\nbool simplicity_xor_xor_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  bool y = readBit(&src);\n  bool z = readBit(&src);\n  writeBit(dst, x ^ y ^ z);\n  return true;\n}\n\n#define XOR_XOR_(bits)                                                            \\\n/* xor_xor_n : TWO^n * TWO^n * TWO^n |- TWO^n */                                  \\\nbool simplicity_xor_xor_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                            \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                            \\\n  uint_fast##bits##_t z = simplicity_read##bits(&src);                            \\\n  simplicity_write##bits(dst, x ^ y ^ z);                                         \\\n  return true;                                                                    \\\n}\nXOR_XOR_(8)\nXOR_XOR_(16)\nXOR_XOR_(32)\nXOR_XOR_(64)\n\n/* ch_1 : TWO * TWO * TWO |- TWO */\nbool simplicity_ch_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  bool y = readBit(&src);\n  bool z = readBit(&src);\n  writeBit(dst, x ? y : z);\n  return true;\n}\n\n#define CH_(bits)                                                            \\\n/* ch_n : TWO^n * TWO^n * TWO^n |- TWO^n */                                  \\\nbool simplicity_ch_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                           \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                       \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                       \\\n  uint_fast##bits##_t z = simplicity_read##bits(&src);                       \\\n  simplicity_write##bits(dst, ((x&y) | ((~(1U*x))&z)));                      \\\n  return true;                                                               \\\n}\nCH_(8)\nCH_(16)\nCH_(32)\nCH_(64)\n\n/* some_1 : TWO |- TWO */\nbool simplicity_some_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  writeBit(dst, x);\n  return true;\n}\n\n#define SOME_(bits)                                                            \\\n/* some_n : TWO^n |- TWO */                                                    \\\nbool simplicity_some_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                             \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                         \\\n  writeBit(dst, x != 0);                                                       \\\n  return true;                                                                 \\\n}\nSOME_(8)\nSOME_(16)\nSOME_(32)\nSOME_(64)\n\n#define ALL_(bits)                                                            \\\n/* all_n : TWO^n |- TWO */                                                    \\\nbool simplicity_all_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                        \\\n  writeBit(dst, x == UINT##bits##_MAX);                                       \\\n  return true;                                                                \\\n}\nALL_(8)\nALL_(16)\nALL_(32)\nALL_(64)\n\n/* eq_1 : TWO * TWO |- TWO */\nbool simplicity_eq_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  bool x = readBit(&src);\n  bool y = readBit(&src);\n  writeBit(dst, x == y);\n  return true;\n}\n\n#define EQ_(bits)                                                            \\\n/* eq_n : TWO^n * TWO^n |- TWO */                                            \\\nbool simplicity_eq_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                           \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                       \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                       \\\n  writeBit(dst, x == y);                                                     \\\n  return true;                                                               \\\n}\nEQ_(8)\nEQ_(16)\nEQ_(32)\nEQ_(64)\n\n/* eq_256 : TWO^256 * TWO^256 |- TWO */\nbool simplicity_eq_256(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  uint32_t arr[16];\n  read32s(arr, 16, &src);\n  for (int i = 0; i < 8; ++i) {\n    if (arr[i] != arr[i+8]) {\n      writeBit(dst, false);\n      return true;\n    }\n  }\n  writeBit(dst, true);\n  return true;\n}\n\n#define FULL_LEFT_SHIFT_(bitsN, bitsM)                                                                    \\\n/* full_left_shift_n_m : TWO^n * TWO^m |- TWO^m * TWO^n */                                                \\\nbool simplicity_full_left_shift_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {      \\\n  (void) env; /* env is unused. */                                                                        \\\n  static_assert(0 <= (bitsM) && (bitsM) <= (bitsN) && (bitsN) <= 64, \"Bad arguments for bitsN or bitsM\"); \\\n  simplicity_copyBits(dst, &src, (bitsN) + (bitsM));                                                      \\\n  return true;                                                                                            \\\n}\nFULL_LEFT_SHIFT_(8,1)\nFULL_LEFT_SHIFT_(8,2)\nFULL_LEFT_SHIFT_(8,4)\nFULL_LEFT_SHIFT_(16,1)\nFULL_LEFT_SHIFT_(16,2)\nFULL_LEFT_SHIFT_(16,4)\nFULL_LEFT_SHIFT_(16,8)\nFULL_LEFT_SHIFT_(32,1)\nFULL_LEFT_SHIFT_(32,2)\nFULL_LEFT_SHIFT_(32,4)\nFULL_LEFT_SHIFT_(32,8)\nFULL_LEFT_SHIFT_(32,16)\nFULL_LEFT_SHIFT_(64,1)\nFULL_LEFT_SHIFT_(64,2)\nFULL_LEFT_SHIFT_(64,4)\nFULL_LEFT_SHIFT_(64,8)\nFULL_LEFT_SHIFT_(64,16)\nFULL_LEFT_SHIFT_(64,32)\n\n#define FULL_RIGHT_SHIFT_(bitsN, bitsM)                                                                   \\\n/* full_right_shift_n_m : TWO^m * TWO^n |- TWO^n * TWO^m */                                               \\\nbool simplicity_full_right_shift_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {     \\\n  (void) env; /* env is unused. */                                                                        \\\n  static_assert(0 <= (bitsM) && (bitsM) <= (bitsN) && (bitsN) <= 64, \"Bad arguments for bitsN or bitsM\"); \\\n  simplicity_copyBits(dst, &src, (bitsN) + (bitsM));                                                      \\\n  return true;                                                                                            \\\n}\nFULL_RIGHT_SHIFT_(8,1)\nFULL_RIGHT_SHIFT_(8,2)\nFULL_RIGHT_SHIFT_(8,4)\nFULL_RIGHT_SHIFT_(16,1)\nFULL_RIGHT_SHIFT_(16,2)\nFULL_RIGHT_SHIFT_(16,4)\nFULL_RIGHT_SHIFT_(16,8)\nFULL_RIGHT_SHIFT_(32,1)\nFULL_RIGHT_SHIFT_(32,2)\nFULL_RIGHT_SHIFT_(32,4)\nFULL_RIGHT_SHIFT_(32,8)\nFULL_RIGHT_SHIFT_(32,16)\nFULL_RIGHT_SHIFT_(64,1)\nFULL_RIGHT_SHIFT_(64,2)\nFULL_RIGHT_SHIFT_(64,4)\nFULL_RIGHT_SHIFT_(64,8)\nFULL_RIGHT_SHIFT_(64,16)\nFULL_RIGHT_SHIFT_(64,32)\n\n#define LEFTMOST_(bitsN, bitsM)                                                                           \\\n/* leftmost_n_m : TWO^n |- TWO^m */                                                                       \\\nbool simplicity_leftmost_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {             \\\n  (void) env; /* env is unused. */                                                                        \\\n  static_assert(0 <= (bitsM) && (bitsM) <= (bitsN) && (bitsN) <= 64, \"Bad arguments for bitsN or bitsM\"); \\\n  simplicity_copyBits(dst, &src, (bitsM));                                                                \\\n  return true;                                                                                            \\\n}\nLEFTMOST_(8,1)\nLEFTMOST_(8,2)\nLEFTMOST_(8,4)\nLEFTMOST_(16,1)\nLEFTMOST_(16,2)\nLEFTMOST_(16,4)\nLEFTMOST_(16,8)\nLEFTMOST_(32,1)\nLEFTMOST_(32,2)\nLEFTMOST_(32,4)\nLEFTMOST_(32,8)\nLEFTMOST_(32,16)\nLEFTMOST_(64,1)\nLEFTMOST_(64,2)\nLEFTMOST_(64,4)\nLEFTMOST_(64,8)\nLEFTMOST_(64,16)\nLEFTMOST_(64,32)\n\n#define RIGHTMOST_(bitsN, bitsM)                                                                          \\\n/* rightmost_n_m : TWO^n |- TWO^m */                                                                      \\\nbool simplicity_rightmost_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {            \\\n  (void) env; /* env is unused. */                                                                        \\\n  static_assert(0 <= (bitsM) && (bitsM) <= (bitsN) && (bitsN) <= 64, \"Bad arguments for bitsN or bitsM\"); \\\n  forwardBits(&src, (bitsN) - (bitsM));                                                                   \\\n  simplicity_copyBits(dst, &src, (bitsM));                                                                \\\n  return true;                                                                                            \\\n}\nRIGHTMOST_(8,1)\nRIGHTMOST_(8,2)\nRIGHTMOST_(8,4)\nRIGHTMOST_(16,1)\nRIGHTMOST_(16,2)\nRIGHTMOST_(16,4)\nRIGHTMOST_(16,8)\nRIGHTMOST_(32,1)\nRIGHTMOST_(32,2)\nRIGHTMOST_(32,4)\nRIGHTMOST_(32,8)\nRIGHTMOST_(32,16)\nRIGHTMOST_(64,1)\nRIGHTMOST_(64,2)\nRIGHTMOST_(64,4)\nRIGHTMOST_(64,8)\nRIGHTMOST_(64,16)\nRIGHTMOST_(64,32)\n\n#define LEFT_PAD_LOW_1_(bitsM)                                                            \\\n/* left_pad_low_1_m : TWO |- TWO^m */                                                     \\\nbool simplicity_left_pad_low_1_##bitsM(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                        \\\n  bool bit = readBit(&src);                                                               \\\n  simplicity_write##bitsM(dst, bit);                                                      \\\n  return true;                                                                            \\\n}\nLEFT_PAD_LOW_1_(8)\nLEFT_PAD_LOW_1_(16)\nLEFT_PAD_LOW_1_(32)\nLEFT_PAD_LOW_1_(64)\n\n#define LEFT_PAD_LOW_(bitsN, bitsM)                                                               \\\n/* left_pad_low_n_m : TWO^n |- TWO^m */                                                           \\\nbool simplicity_left_pad_low_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                                \\\n  static_assert(0 < (bitsN) && (bitsN) <= 64, \"bitsN is out of range\");                           \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                           \\\n  static_assert(0 == (bitsM) % (bitsN), \"bitsM is not a multiple of bitsN\");                      \\\n  for(int i = 0; i < (bitsM)/(bitsN) - 1; ++i) { simplicity_write##bitsN(dst, 0); }               \\\n  simplicity_copyBits(dst, &src, (bitsN));                                                        \\\n  return true;                                                                                    \\\n}\nLEFT_PAD_LOW_(8,16)\nLEFT_PAD_LOW_(8,32)\nLEFT_PAD_LOW_(8,64)\nLEFT_PAD_LOW_(16,32)\nLEFT_PAD_LOW_(16,64)\nLEFT_PAD_LOW_(32,64)\n\n#define LEFT_PAD_HIGH_1_(bitsM)                                                            \\\n/* left_pad_high_1_m : TWO |- TWO^m */                                                     \\\nbool simplicity_left_pad_high_1_##bitsM(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                         \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                    \\\n  for(int i = 0; i < (bitsM) - 1; ++i) { writeBit(dst, true); }                            \\\n  simplicity_copyBits(dst, &src, 1);                                                       \\\n  return true;                                                                             \\\n}\nLEFT_PAD_HIGH_1_(8)\nLEFT_PAD_HIGH_1_(16)\nLEFT_PAD_HIGH_1_(32)\nLEFT_PAD_HIGH_1_(64)\n\n#define LEFT_PAD_HIGH_(bitsN, bitsM)                                                                \\\n/* left_pad_high_n_m : TWO^n |- TWO^m */                                                            \\\nbool simplicity_left_pad_high_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {  \\\n  (void) env; /* env is unused. */                                                                  \\\n  static_assert(0 < (bitsN) && (bitsN) <= 64, \"bitsN is out of range\");                             \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                             \\\n  static_assert(0 == (bitsM) % (bitsN), \"bitsM is not a multiple of bitsN\");                        \\\n  for(int i = 0; i < (bitsM)/(bitsN) - 1; ++i) { simplicity_write##bitsN(dst, UINT##bitsN##_MAX); } \\\n  simplicity_copyBits(dst, &src, (bitsN));                                                          \\\n  return true;                                                                                      \\\n}\nLEFT_PAD_HIGH_(8,16)\nLEFT_PAD_HIGH_(8,32)\nLEFT_PAD_HIGH_(8,64)\nLEFT_PAD_HIGH_(16,32)\nLEFT_PAD_HIGH_(16,64)\nLEFT_PAD_HIGH_(32,64)\n\n#define LEFT_EXTEND_1_(bitsM)                                                            \\\n/* left_extend_1_m : TWO |- TWO^m */                                                     \\\nbool simplicity_left_extend_1_##bitsM(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                       \\\n  bool bit = readBit(&src);                                                              \\\n  simplicity_write##bitsM(dst, bit ? UINT##bitsM##_MAX : 0);                             \\\n  return true;                                                                           \\\n}\nLEFT_EXTEND_1_(8)\nLEFT_EXTEND_1_(16)\nLEFT_EXTEND_1_(32)\nLEFT_EXTEND_1_(64)\n\n#define LEFT_EXTEND_(bitsN, bitsM)                                                                            \\\n/* left_extend_n_m : TWO^n |- TWO^m */                                                                        \\\nbool simplicity_left_extend_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {              \\\n  (void) env; /* env is unused. */                                                                            \\\n  static_assert(0 < (bitsN) && (bitsN) <= 64, \"bitsN is out of range\");                                       \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                                       \\\n  static_assert(0 == (bitsM) % (bitsN), \"bitsM is not a multiple of bitsN\");                                  \\\n  uint_fast##bitsN##_t input = simplicity_read##bitsN(&src);                                                  \\\n  bool msb = input >> ((bitsN) - 1);                                                                          \\\n  for(int i = 0; i < (bitsM)/(bitsN) - 1; ++i) { simplicity_write##bitsN(dst, msb ? UINT##bitsN##_MAX : 0); } \\\n  simplicity_write##bitsN(dst, input);                                                                        \\\n  return true;                                                                                                \\\n}\nLEFT_EXTEND_(8,16)\nLEFT_EXTEND_(8,32)\nLEFT_EXTEND_(8,64)\nLEFT_EXTEND_(16,32)\nLEFT_EXTEND_(16,64)\nLEFT_EXTEND_(32,64)\n\n#define RIGHT_PAD_LOW_1_(bitsM)                                                                     \\\n/* right_pad_low_1_m : TWO |- TWO^m */                                                              \\\nbool simplicity_right_pad_low_1_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {          \\\n  (void) env; /* env is unused. */                                                                  \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                             \\\n  bool bit = readBit(&src);                                                                         \\\n  simplicity_write##bitsM(dst, (uint_fast##bitsM##_t)((uint_fast##bitsM##_t)bit << ((bitsM) - 1))); \\\n  return true;                                                                                      \\\n}\nRIGHT_PAD_LOW_1_(8)\nRIGHT_PAD_LOW_1_(16)\nRIGHT_PAD_LOW_1_(32)\nRIGHT_PAD_LOW_1_(64)\n\n#define RIGHT_PAD_LOW_(bitsN, bitsM)                                                               \\\n/* right_pad_low_n_m : TWO^n |- TWO^m */                                                           \\\nbool simplicity_right_pad_low_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                                 \\\n  static_assert(0 < (bitsN) && (bitsN) <= 64, \"bitsN is out of range\");                            \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                            \\\n  static_assert(0 == (bitsM) % (bitsN), \"bitsM is not a multiple of bitsN\");                       \\\n  simplicity_copyBits(dst, &src, (bitsN));                                                         \\\n  for(int i = 0; i < (bitsM)/(bitsN) - 1; ++i) { simplicity_write##bitsN(dst, 0); }                \\\n  return true;                                                                                     \\\n}\nRIGHT_PAD_LOW_(8,16)\nRIGHT_PAD_LOW_(8,32)\nRIGHT_PAD_LOW_(8,64)\nRIGHT_PAD_LOW_(16,32)\nRIGHT_PAD_LOW_(16,64)\nRIGHT_PAD_LOW_(32,64)\n\n#define RIGHT_PAD_HIGH_1_(bitsM)                                                            \\\n/* right_pad_high_1_m : TWO |- TWO^m */                                                     \\\nbool simplicity_right_pad_high_1_##bitsM(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                          \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                     \\\n  simplicity_copyBits(dst, &src, 1);                                                        \\\n  for(int i = 0; i < (bitsM) - 1; ++i) { writeBit(dst, true); }                             \\\n  return true;                                                                              \\\n}\nRIGHT_PAD_HIGH_1_(8)\nRIGHT_PAD_HIGH_1_(16)\nRIGHT_PAD_HIGH_1_(32)\nRIGHT_PAD_HIGH_1_(64)\n\n#define RIGHT_PAD_HIGH_(bitsN, bitsM)                                                               \\\n/* right_pad_high_n_m : TWO^n |- TWO^m */                                                           \\\nbool simplicity_right_pad_high_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                                  \\\n  static_assert(0 < (bitsN) && (bitsN) <= 64, \"bitsN is out of range\");                             \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                             \\\n  static_assert(0 == (bitsM) % (bitsN), \"bitsM is not a multiple of bitsN\");                        \\\n  simplicity_copyBits(dst, &src, (bitsN));                                                          \\\n  for(int i = 0; i < (bitsM)/(bitsN) - 1; ++i) { simplicity_write##bitsN(dst, UINT##bitsN##_MAX); } \\\n  return true;                                                                                      \\\n}\nRIGHT_PAD_HIGH_(8,16)\nRIGHT_PAD_HIGH_(8,32)\nRIGHT_PAD_HIGH_(8,64)\nRIGHT_PAD_HIGH_(16,32)\nRIGHT_PAD_HIGH_(16,64)\nRIGHT_PAD_HIGH_(32,64)\n\n#define RIGHT_EXTEND_(bitsN, bitsM)                                                                           \\\n/* right_extend_n_m : TWO^n |- TWO^m */                                                                       \\\nbool simplicity_right_extend_##bitsN##_##bitsM(frameItem* dst, frameItem src, const txEnv* env) {             \\\n  (void) env; /* env is unused. */                                                                            \\\n  static_assert(0 < (bitsN) && (bitsN) <= 64, \"bitsN is out of range\");                                       \\\n  static_assert(0 < (bitsM) && (bitsM) <= 64, \"bitsM is out of range\");                                       \\\n  static_assert(0 == (bitsM) % (bitsN), \"bitsM is not a multiple of bitsN\");                                  \\\n  uint_fast##bitsN##_t input = simplicity_read##bitsN(&src);                                                  \\\n  bool lsb = input & 1;                                                                                       \\\n  simplicity_write##bitsN(dst, input);                                                                        \\\n  for(int i = 0; i < (bitsM)/(bitsN) - 1; ++i) { simplicity_write##bitsN(dst, lsb ? UINT##bitsN##_MAX : 0); } \\\n  return true;                                                                                                \\\n}\nRIGHT_EXTEND_(8,16)\nRIGHT_EXTEND_(8,32)\nRIGHT_EXTEND_(8,64)\nRIGHT_EXTEND_(16,32)\nRIGHT_EXTEND_(16,64)\nRIGHT_EXTEND_(32,64)\n\n#define LEFT_SHIFT_(log, bits)                                                            \\\nstatic inline void left_shift_helper_##bits(bool with, frameItem* dst, frameItem *src) {  \\\n  static_assert(log <= 8, \"Only log parameter up to 8 is supported.\");                    \\\n  uint_fast8_t amt = simplicity_read##log(src);                                           \\\n  uint_fast##bits##_t output = simplicity_read##bits(src);                                \\\n  if (with) output = UINT##bits##_MAX ^ output;                                           \\\n  if (amt < bits) {                                                                       \\\n    output = (uint_fast##bits##_t)((1U * output) << amt);                                 \\\n  } else {                                                                                \\\n    output = 0;                                                                           \\\n  }                                                                                       \\\n  if (with) output = UINT##bits##_MAX ^ output;                                           \\\n  simplicity_write##bits(dst, output);                                                    \\\n}                                                                                         \\\n                                                                                          \\\n/* left_shift_with_n : TWO * TWO^l * TWO^n |- TWO^n */                                    \\\nbool simplicity_left_shift_with_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                        \\\n  bool with = readBit(&src);                                                              \\\n  left_shift_helper_##bits(with, dst, &src);                                              \\\n  return true;                                                                            \\\n}                                                                                         \\\n                                                                                          \\\n/* left_shift_n : TWO^l * TWO^n |- TWO^n */                                               \\\nbool simplicity_left_shift_##bits(frameItem* dst, frameItem src, const txEnv* env) {      \\\n  (void) env; /* env is unused. */                                                        \\\n  left_shift_helper_##bits(0, dst, &src);                                                 \\\n  return true;                                                                            \\\n}\nLEFT_SHIFT_(4,8)\nLEFT_SHIFT_(4,16)\nLEFT_SHIFT_(8,32)\nLEFT_SHIFT_(8,64)\n\n#define RIGHT_SHIFT_(log, bits)                                                            \\\nstatic inline void right_shift_helper_##bits(bool with, frameItem* dst, frameItem *src) {  \\\n  static_assert(log <= 8, \"Only log parameter up to 8 is supported.\");                     \\\n  uint_fast8_t amt = simplicity_read##log(src);                                            \\\n  uint_fast##bits##_t output = simplicity_read##bits(src);                                 \\\n  if (with) output = UINT##bits##_MAX ^ output;                                            \\\n  if (amt < bits) {                                                                        \\\n    output = (uint_fast##bits##_t)(output >> amt);                                         \\\n  } else {                                                                                 \\\n    output = 0;                                                                            \\\n  }                                                                                        \\\n  if (with) output = UINT##bits##_MAX ^ output;                                            \\\n  simplicity_write##bits(dst, output);                                                     \\\n}                                                                                          \\\n                                                                                           \\\n/* right_shift_with_n : TWO * TWO^l * TWO^n |- TWO^n */                                    \\\nbool simplicity_right_shift_with_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                         \\\n  bool with = readBit(&src);                                                               \\\n  right_shift_helper_##bits(with, dst, &src);                                              \\\n  return true;                                                                             \\\n}                                                                                          \\\n                                                                                           \\\n/* right_shift_n : TWO^l * TWO^n |- TWO^n */                                               \\\nbool simplicity_right_shift_##bits(frameItem* dst, frameItem src, const txEnv* env) {      \\\n  (void) env; /* env is unused. */                                                         \\\n  right_shift_helper_##bits(0, dst, &src);                                                 \\\n  return true;                                                                             \\\n}\nRIGHT_SHIFT_(4,8)\nRIGHT_SHIFT_(4,16)\nRIGHT_SHIFT_(8,32)\nRIGHT_SHIFT_(8,64)\n\n#define ROTATE_(log, bits)                                                                     \\\n/* Precondition: 0 <= amt < bits */                                                            \\\nstatic inline uint_fast##bits##_t rotate_##bits(uint_fast##bits##_t value, uint_fast8_t amt) { \\\n  if (amt) {                                                                                   \\\n    return (uint_fast##bits##_t)((1U * value << amt) | value >> (bits - amt));                 \\\n  } else {                                                                                     \\\n    return value;                                                                              \\\n  }                                                                                            \\\n}                                                                                              \\\n                                                                                               \\\n/* left_rotate_n : TWO^l * TWO^n |- TWO^n */                                                   \\\nbool simplicity_left_rotate_##bits(frameItem* dst, frameItem src, const txEnv* env) {          \\\n  (void) env; /* env is unused. */                                                             \\\n  uint_fast8_t amt = simplicity_read##log(&src) % bits;                                        \\\n  uint_fast##bits##_t input = simplicity_read##bits(&src);                                     \\\n  simplicity_write##bits(dst, rotate_##bits(input, amt));                                      \\\n  return true;                                                                                 \\\n}                                                                                              \\\n                                                                                               \\\n/* right_rotate_n : TWO^l * TWO^n |- TWO^n */                                                  \\\nbool simplicity_right_rotate_##bits(frameItem* dst, frameItem src, const txEnv* env) {         \\\n  static_assert(bits <= UINT8_MAX, \"'bits' is too large.\");                                    \\\n  (void) env; /* env is unused. */                                                             \\\n  uint_fast8_t amt = simplicity_read##log(&src) % bits;                                        \\\n  uint_fast##bits##_t input = simplicity_read##bits(&src);                                     \\\n  simplicity_write##bits(dst, rotate_##bits(input, (uint_fast8_t)((bits - amt) % bits)));      \\\n  return true;                                                                                 \\\n}\nROTATE_(4,8)\nROTATE_(4,16)\nROTATE_(8,32)\nROTATE_(8,64)\n\n#define ONE_(bits)                                                            \\\n/* one_n : ONE |- TWO^n */                                                    \\\nbool simplicity_one_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  (void) src; /* src is unused. */                                            \\\n  simplicity_write##bits(dst, 1);                                             \\\n  return true;                                                                \\\n}\nONE_(8)\nONE_(16)\nONE_(32)\nONE_(64)\n\n#define ADD_(bits)                                                            \\\n/* add_n : TWO^n * TWO^n |- TWO * TWO^n */                                    \\\nbool simplicity_add_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                        \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                        \\\n  writeBit(dst, 1U * UINT##bits##_MAX - y < x);                               \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x + y));             \\\n  return true;                                                                \\\n}\nADD_(8)\nADD_(16)\nADD_(32)\nADD_(64)\n\n#define FULL_ADD_(bits)                                                                   \\\n/* full_add_n : TWO * TWO^n * TWO^n |- TWO * TWO^n */                                     \\\nbool simplicity_full_add_##bits(frameItem* dst, frameItem src, const txEnv* env) {        \\\n  (void) env; /* env is unused. */                                                        \\\n  bool z = readBit(&src);                                                                 \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                                    \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                                    \\\n  writeBit(dst, 1U * UINT##bits##_MAX - y < x || 1U * UINT##bits##_MAX - z < 1U * x + y); \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x + y + z));                     \\\n  return true;                                                                            \\\n}\nFULL_ADD_(8)\nFULL_ADD_(16)\nFULL_ADD_(32)\nFULL_ADD_(64)\n\n#define FULL_INCREMENT_(bits)                                                            \\\n/* full_increment_n : TWO * TWO^n |- TWO * TWO^n */                                      \\\nbool simplicity_full_increment_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                       \\\n  bool z = readBit(&src);                                                                \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                                   \\\n  writeBit(dst, 1U * UINT##bits##_MAX - z < x);                                          \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x + z));                        \\\n  return true;                                                                           \\\n}\nFULL_INCREMENT_(8)\nFULL_INCREMENT_(16)\nFULL_INCREMENT_(32)\nFULL_INCREMENT_(64)\n\n#define INCREMENT_(bits)                                                            \\\n/* increment_n : TWO^n |- TWO * TWO^n */                                            \\\nbool simplicity_increment_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                  \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                              \\\n  writeBit(dst, 1U * UINT##bits##_MAX - 1 < x);                                     \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x + 1));                   \\\n  return true;                                                                      \\\n}\nINCREMENT_(8)\nINCREMENT_(16)\nINCREMENT_(32)\nINCREMENT_(64)\n\n#define SUBTRACT_(bits)                                                            \\\n/* subtract_n : TWO^n * TWO^n |- TWO * TWO^n */                                    \\\nbool simplicity_subtract_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                 \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                             \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                             \\\n  writeBit(dst, x < y);                                                            \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x - y));                  \\\n  return true;                                                                     \\\n}\nSUBTRACT_(8)\nSUBTRACT_(16)\nSUBTRACT_(32)\nSUBTRACT_(64)\n\n#define NEGATE_(bits)                                                            \\\n/* negate_n : TWO^n |- TWO * TWO^n */                                            \\\nbool simplicity_negate_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                               \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                           \\\n  writeBit(dst, x != 0);                                                         \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(- (1U * x)));                \\\n  return true;                                                                   \\\n}\nNEGATE_(8)\nNEGATE_(16)\nNEGATE_(32)\nNEGATE_(64)\n\n#define FULL_DECREMENT_(bits)                                                            \\\n/* full_decrement_n : TWO * TWO^n |- TWO * TWO^n */                                      \\\nbool simplicity_full_decrement_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                       \\\n  bool z = readBit(&src);                                                                \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                                   \\\n  writeBit(dst, 1U * x < 1U * z);                                                        \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x - z));                        \\\n  return true;                                                                           \\\n}\nFULL_DECREMENT_(8)\nFULL_DECREMENT_(16)\nFULL_DECREMENT_(32)\nFULL_DECREMENT_(64)\n\n#define DECREMENT_(bits)                                                            \\\n/* decrement_n : TWO^n |- TWO * TWO^n */                                            \\\nbool simplicity_decrement_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                  \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                              \\\n  writeBit(dst, x < 1);                                                             \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x - 1));                   \\\n  return true;                                                                      \\\n}\nDECREMENT_(8)\nDECREMENT_(16)\nDECREMENT_(32)\nDECREMENT_(64)\n\n#define FULL_SUBTRACT_(bits)                                                            \\\n/* full_subtract_n : TWO * TWO^n * TWO^n |- TWO * TWO^n */                              \\\nbool simplicity_full_subtract_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                      \\\n  bool z = readBit(&src);                                                               \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                                  \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                                  \\\n  writeBit(dst, 1U * x < 1U * y || 1U * x - y < 1U * z);                                \\\n  simplicity_write##bits(dst, (uint_fast##bits##_t)(1U * x - y - z));                   \\\n  return true;                                                                          \\\n}\nFULL_SUBTRACT_(8)\nFULL_SUBTRACT_(16)\nFULL_SUBTRACT_(32)\nFULL_SUBTRACT_(64)\n\n#define MULTIPLY_(bits,bitsx2)                                                     \\\nbool simplicity_multiply_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                 \\\n  uint_fast##bitsx2##_t x = simplicity_read##bits(&src);                           \\\n  uint_fast##bitsx2##_t y = simplicity_read##bits(&src);                           \\\n  simplicity_write##bitsx2(dst, x * y);                                            \\\n  return true;                                                                     \\\n}\nMULTIPLY_(8, 16)\nMULTIPLY_(16, 32)\nMULTIPLY_(32, 64)\n\nbool simplicity_multiply_64(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  uint_fast64_t x = simplicity_read64(&src);\n  uint_fast64_t y = simplicity_read64(&src);\n  secp256k1_uint128 r;\n  secp256k1_u128_mul(&r, x, y);\n  write128(dst, &r);\n  return true;\n}\n\n#define FULL_MULTIPLY_(bits,bitsx2)                                                     \\\nbool simplicity_full_multiply_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                      \\\n  uint_fast##bitsx2##_t x = simplicity_read##bits(&src);                                \\\n  uint_fast##bitsx2##_t y = simplicity_read##bits(&src);                                \\\n  uint_fast##bitsx2##_t z = simplicity_read##bits(&src);                                \\\n  uint_fast##bitsx2##_t w = simplicity_read##bits(&src);                                \\\n  simplicity_write##bitsx2(dst, x * y + z + w);                                         \\\n  return true;                                                                          \\\n}\nFULL_MULTIPLY_(8, 16)\nFULL_MULTIPLY_(16, 32)\nFULL_MULTIPLY_(32, 64)\n\nbool simplicity_full_multiply_64(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  uint_fast64_t x = simplicity_read64(&src);\n  uint_fast64_t y = simplicity_read64(&src);\n  uint_fast64_t z = simplicity_read64(&src);\n  uint_fast64_t w = simplicity_read64(&src);\n  secp256k1_uint128 r;\n  secp256k1_u128_mul(&r, x, y);\n  secp256k1_u128_accum_u64(&r, z);\n  secp256k1_u128_accum_u64(&r, w);\n  write128(dst, &r);\n  return true;\n}\n\n#define IS_ZERO_(bits)                                                            \\\n/* is_zero_n : TWO^n |- TWO */                                                    \\\nbool simplicity_is_zero_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                            \\\n  writeBit(dst, x == 0);                                                          \\\n  return true;                                                                    \\\n}\nIS_ZERO_(8)\nIS_ZERO_(16)\nIS_ZERO_(32)\nIS_ZERO_(64)\n\n#define IS_ONE_(bits)                                                            \\\n/* is_one_n : TWO^n |- TWO */                                                    \\\nbool simplicity_is_one_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                               \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                           \\\n  writeBit(dst, x == 1);                                                         \\\n  return true;                                                                   \\\n}\nIS_ONE_(8)\nIS_ONE_(16)\nIS_ONE_(32)\nIS_ONE_(64)\n\n#define LE_(bits)                                                            \\\n/* le_n : TWO^n * TWO^n |- TWO */                                            \\\nbool simplicity_le_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                           \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                       \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                       \\\n  writeBit(dst, x <= y);                                                     \\\n  return true;                                                               \\\n}\nLE_(8)\nLE_(16)\nLE_(32)\nLE_(64)\n\n#define LT_(bits)                                                            \\\n/* lt_n : TWO^n * TWO^n |- TWO */                                            \\\nbool simplicity_lt_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                           \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                       \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                       \\\n  writeBit(dst, x < y);                                                      \\\n  return true;                                                               \\\n}\nLT_(8)\nLT_(16)\nLT_(32)\nLT_(64)\n\n#define MIN_(bits)                                                            \\\n/* min_n : TWO^n * TWO^n |- TWO^n */                                          \\\nbool simplicity_min_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                        \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                        \\\n  simplicity_write##bits(dst, x < y ? x : y);                                 \\\n  return true;                                                                \\\n}\nMIN_(8)\nMIN_(16)\nMIN_(32)\nMIN_(64)\n\n#define MAX_(bits)                                                            \\\n/* max_n : TWO^n * TWO^n |- TWO^n */                                          \\\nbool simplicity_max_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                            \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                        \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                        \\\n  simplicity_write##bits(dst, x < y ? y : x);                                 \\\n  return true;                                                                \\\n}\nMAX_(8)\nMAX_(16)\nMAX_(32)\nMAX_(64)\n\n#define MEDIAN_(bits)                                                            \\\n/* median_n : TWO^n * TWO^n * TWO^n |- TWO^n */                                  \\\nbool simplicity_median_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                               \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                           \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                           \\\n  uint_fast##bits##_t z = simplicity_read##bits(&src);                           \\\n  simplicity_write##bits(dst, x < y                                              \\\n                 ? (y < z ? y : (z < x ? x : z))                                 \\\n                 : (x < z ? x : (z < y ? y : z)));                               \\\n  return true;                                                                   \\\n}\nMEDIAN_(8)\nMEDIAN_(16)\nMEDIAN_(32)\nMEDIAN_(64)\n\n#define DIV_MOD_(bits)                                                            \\\n/* div_mod_n : TWO^n * TWO^n |- TWO^n * TWO^n */                                  \\\nbool simplicity_div_mod_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                            \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                            \\\n  simplicity_write##bits(dst, 0 == y ? 0 : x / y);                                \\\n  simplicity_write##bits(dst, 0 == y ? x : x % y);                                \\\n  return true;                                                                    \\\n}\nDIV_MOD_(8)\nDIV_MOD_(16)\nDIV_MOD_(32)\nDIV_MOD_(64)\n\n#define DIVIDE_(bits)                                                            \\\n/* divide_n : TWO^n * TWO^n |- TWO^n */                                          \\\nbool simplicity_divide_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                               \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                           \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                           \\\n  simplicity_write##bits(dst, 0 == y ? 0 : x / y);                               \\\n  return true;                                                                   \\\n}\nDIVIDE_(8)\nDIVIDE_(16)\nDIVIDE_(32)\nDIVIDE_(64)\n\n#define MODULO_(bits)                                                            \\\n/* modulo_n : TWO^n * TWO^n |- TWO^n */                                          \\\nbool simplicity_modulo_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                               \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                           \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                           \\\n  simplicity_write##bits(dst, 0 == y ? x : x % y);                               \\\n  return true;                                                                   \\\n}\nMODULO_(8)\nMODULO_(16)\nMODULO_(32)\nMODULO_(64)\n\n#define DIVIDES_(bits)                                                            \\\n/* divides_n : TWO^n * TWO^n |- TWO */                                            \\\nbool simplicity_divides_##bits(frameItem* dst, frameItem src, const txEnv* env) { \\\n  (void) env; /* env is unused. */                                                \\\n  uint_fast##bits##_t x = simplicity_read##bits(&src);                            \\\n  uint_fast##bits##_t y = simplicity_read##bits(&src);                            \\\n  writeBit(dst, 0 == (0 == x ? y : y % x));                                       \\\n  return true;                                                                    \\\n}\nDIVIDES_(8)\nDIVIDES_(16)\nDIVIDES_(32)\nDIVIDES_(64)\n\n/* Implements the 3n/2n division algorithm for n=32 bits.\n * For more details see \"Fast Recursive Division\" by Christoph Burnikel and Joachim Ziegler, MPI-I-98-1-022, Oct. 1998.\n *\n * Given a 96 bit (unsigned) value A and a 64 bit value B, set *q and *r to the quotient and remainder of A divided by B.\n *\n * ah is passed the high 64 bits of A, and al is passed the low 32 bits of A.\n * We say that A = [ah;al] where [ah;al] denotes ah * 2^32 + al.\n *\n * The value of B is passed in as b.\n *\n * This algorithm requires certain preconditons:\n * 1. A < [B;0]\n * 2. 2^63 <= B.\n *\n * Preconditon 1 ensures that the quotient fits in 32-bits.\n *\n * We define the quotient Q and remainder R by the equation:\n *   A == Q * B + R where 0 <= R < B.\n *\n * The algorithm works by estimating the value of Q by\n *   estQ = (A >> 32) / (B >> 32).\n *\n * Preconditon 2 ensures that this estimate is close to the true value of Q.  In fact Q <= estQ <= Q + 2 (see proof below)\n *\n * There is a corresponding estR value satisfying the equation estR = A - estQ * B.\n * This estR is one of {R, R - B, R - 2B}.\n * Therefore if estR is non-negative, then estR is equal to the true R value, and hence estQ is equal to the true Q value.\n *\n * If estR is negative we decrement our estimated value of Q and repeatedly try again until the computed remainder is non-negative.\n *\n * Lemma 1: Q <= estQ.\n * A - estQ * B == [ah;al] - estQ * [bh;bl]\n *              == [ah - estQ * bh; al - estQ * bl]\n *              == [ah % bh; al] - estQ * bl\n *              <= [ah % bh; al]\n *              <  [(ah % bh) + 1; 0]\n *              <= [bh; 0]\n *              <= B\n * Therefore A - (estQ + 1)*B < 0, and hence Q == A/B < estQ + 1.\n *\n * Lemma 2: estQ < [1;2] (== 2^32 + 2).\n * First note that ah - [bh;0] < [1;0] because\n * ah < B (by precondition 1)\n *    < [bh+1;0]\n *    == [bh;0] + [1;0]\n *\n * ah - [1;2]*bh == ah - [bh;2*bh]\n *               < [1;0] - [0;2*bh]\n *               <= 0 (by precondition 2.)\n * Therefore estQ == ah / bh < [1;2].\n *\n * Lemma 3: estQ - 2 <= Q.\n * A - (estQ - 2)*B == 2*B + estR\n *                  == 2*B + [ah % bh; al] - estQ * bl\n *                  >= 2*B - estQ * bl\n *                  == 2*[bh;bl] - estQ * bl\n *                  == [2*bh;0] + 2*bl - estQ * bl\n *                  == [2*bh;0] - (estQ - 2) * bl\n *                  >  [2*bh;0] - [1;0] * bl (by lemma 2.)\n *                  == [2*bh - bl;0]\n *                  >= 0 (by precondition 2.)\n * Therefore Q = A/B >= estQ - 2.\n */\nstatic void div_mod_96_64(uint_fast32_t *q, uint_fast64_t *r,\n                          uint_fast64_t ah, uint_fast32_t al,\n                          uint_fast64_t b) {\n  simplicity_debug_assert(ah < b);\n  simplicity_debug_assert(0x8000000000000000u <= b);\n  uint_fast64_t bh = b >> 32;\n  uint_fast64_t bl = b & 0xffffffffu;\n  /* B == b == [bh;bl] */\n  uint_fast64_t estQ = ah / bh;\n\n  /* Precondition 1 guarantees Q is 32-bits, if estQ is greater than UINT32_MAX, then reduce our initial estimated quotient to UINT32_MAX. */\n  *q = estQ <= UINT32_MAX ? (uint_fast32_t)estQ : UINT32_MAX;\n\n  /* *q * bh <= estQ * bh <= ah */\n  uint_fast64_t rh = ah - 1u * *q * bh;\n  uint_fast64_t d = 1u * *q * bl;\n\n  /* Test if our estimated remainder, A - *q * B is negative.\n   * A - *q * B  == [ah;al] - *q * [bh;bl]\n   *             == [ah - *q * bh;al - *q * bl]\n   *             == [rh;al] - d\n   *\n   * This value is negative when [rh;al] < d.\n   * Note that d is 64 bit and thus if rh is greater than UINT32_MAX, then this value cannot be negative.\n   */\n  /* This loop is executed at most twice. */\n  while (rh <= UINT32_MAX && 0x100000000u*rh + al < d) {\n    /* Our estimated remainder, A - *q * B is negative. */\n    /* 0 < d == *q * bl and hence 0 < *q, so this decrement does not underflow. */\n    (*q)--;\n    rh += bh;\n    /* rh == ah - *q * bh */\n    d -= bl;\n    /* d == *q * bl */;\n  }\n  /* *q is the correct quotient. */\n\n  /* Compute the remainder.\n   * The computation below is performed modulo 2^64.\n   * However since we know the remainder lies within [0,b) which is within [0,2^64),\n   * the computation must end up with the correct result even if overflow/underflow occurs.\n   */\n  *r = 0x100000000u*rh + al - d;\n}\n\n/* div_mod_128_64 : TWO^128 * TWO^64 |- TWO^64 * TWO^64 */\nbool simplicity_div_mod_128_64(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  uint_fast32_t qh, ql;\n  uint_fast64_t r;\n  uint_fast64_t ah = simplicity_read64(&src);\n  uint_fast32_t am = simplicity_read32(&src);\n  uint_fast32_t al = simplicity_read32(&src);\n  uint_fast64_t b = simplicity_read64(&src);\n\n  /* div2n1n is only defined when 2^(n-1) <= b and when the quotient q < 2^n. */\n  if (0x8000000000000000 <= b && ah < b) {\n    /* We compute the division and remainder of A = [[ah;am];al] by B = b by long division with 32-bit \"digits\"\n     *\n     * 1.       Q\n     *      ______\n     *    BB) AAAA\n     *        XXX\n     *        ---\n     *         RR\n     *\n     * First divide the high 3 \"digit\"s (96-bits) of A by the two \"digit\"s (64-bits) of B,\n     * returning the first \"digit\" (high 32-bits) of the quotient, and an intermediate remainder consisiting of 2 \"digit\"s (64-bits).\n     */\n    div_mod_96_64(&qh, &r, ah, am, b);\n    simplicity_debug_assert(r < b);\n    /* 2.       QQ\n     *      ______\n     *    BB) AAA|\n     *        XXX|\n     *        ---|\n     *         RRA\n     *         XXX\n     *         ---\n     *          RR\n     *\n     * Then append the last \"digit\" of A to the intermediate remainder and divide that value (96_bits) by the two \"digit\"s (64-bits) of B,\n     * returning the second \"digit\" (low 32-bits) of the quotient, and the final remainder consisiting of 2 \"digit\"s (64-bits).\n     */\n    div_mod_96_64(&ql, &r, r, al, b);\n    simplicity_write32(dst, qh);\n    simplicity_write32(dst, ql);\n    simplicity_write64(dst, r);\n  } else {\n    /* Set all the bits in the output when the input is out of bounds. */\n    simplicity_write64(dst, (uint64_t)(-1));\n    simplicity_write64(dst, (uint64_t)(-1));\n  }\n  return true;\n}\n\n/* sha_256_iv : ONE |- TWO^256 */\nbool simplicity_sha_256_iv(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  (void) src; /* env is unused. */\n\n  uint32_t iv[8];\n  sha256_iv(iv);\n\n  write32s(dst, iv, 8);\n  return true;\n}\n\n/* sha_256_block : TWO^256 * TWO^512 |- TWO^256 */\nbool simplicity_sha_256_block(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  uint32_t h[8];\n  uint32_t block[16];\n  read32s(h, 8, &src);\n  read32s(block, 16, &src);\n  simplicity_sha256_compression(h, block);\n  write32s(dst, h, 8);\n  return true;\n}\n\n/* sha_256_ctx_8_init : ONE |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_init(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  (void) src; /* env is unused. */\n\n  uint32_t iv[8];\n  sha256_context ctx = sha256_init(iv);\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* sha_256_ctx_8_add_n : CTX8 * (TWO^8)^n |- CTX8\n * where\n * n is a power of 2 less than or equal to 512\n * and\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nstatic bool sha_256_ctx_8_add_n(frameItem* dst, frameItem *src, size_t n) {\n  simplicity_debug_assert(0 < n && n <= 512 && (n & (n - 1)) == 0);\n  sha256_midstate midstate;\n  unsigned char buf[512];\n  sha256_context ctx = {.output = midstate.s};\n\n  if (!simplicity_read_sha256_context(&ctx, src)) return false;\n  read8s(buf, n, src);\n  sha256_uchars(&ctx, buf, n);\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* sha_256_ctx_8_add_1 : CTX8 * TWO^8 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_1(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 1);\n}\n\n/* sha_256_ctx_8_add_2 : CTX8 * (TWO^8)^2 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_2(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 2);\n}\n\n/* sha_256_ctx_8_add_4 : CTX8 * (TWO^8)^4 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_4(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 4);\n}\n\n/* sha_256_ctx_8_add_8 : CTX8 * (TWO^8)^8 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_8(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 8);\n}\n\n/* sha_256_ctx_8_add_16 : CTX8 * (TWO^8)^16 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_16(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 16);\n}\n\n/* sha_256_ctx_8_add_32 : CTX8 * (TWO^8)^32 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_32(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 32);\n}\n\n/* sha_256_ctx_8_add_64 : CTX8 * (TWO^8)^64 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_64(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 64);\n}\n\n/* sha_256_ctx_8_add_128 : CTX8 * (TWO^8)^128 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_128(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 128);\n}\n\n/* sha_256_ctx_8_add_256 : CTX8 * (TWO^8)^256 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_256(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 256);\n}\n\n/* sha_256_ctx_8_add_512 : CTX8 * (TWO^8)^512 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_512(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  return sha_256_ctx_8_add_n(dst, &src, 512);\n}\n\n/* sha_256_ctx_8_add_buffer_511 : CTX8 * (TWO^8)^<512 |- CTX8\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_add_buffer_511(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  sha256_midstate midstate;\n  unsigned char buf[511];\n  size_t buf_len;\n  sha256_context ctx = {.output = midstate.s};\n\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  simplicity_read_buffer8(buf, &buf_len, &src, 8);\n  sha256_uchars(&ctx, buf, buf_len);\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n\n/* sha_256_ctx_8_finalize : CTX8 |- TWO^256\n * where\n * CTX8 = (TWO^8)^<64 * TWO^64 * TWO^256\n */\nbool simplicity_sha_256_ctx_8_finalize(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  sha256_midstate midstate;\n  sha256_context ctx = {.output = midstate.s};\n\n  if (!simplicity_read_sha256_context(&ctx, &src)) return false;\n\n  sha256_finalize(&ctx);\n  write32s(dst, midstate.s, 8);\n  return true;\n}\n\n/* parse_sequence : TWO^32 |- TWO^32 + TWO^32 */\nbool simplicity_parse_lock(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  uint_fast32_t nLockTime = simplicity_read32(&src);\n  writeBit(dst, 500000000U <= nLockTime);\n  simplicity_write32(dst, nLockTime);\n  return true;\n}\n\n/* parse_sequence : TWO^32 |- S (TWO^16 + TWO^16) */\nbool simplicity_parse_sequence(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  uint_fast32_t nSequence = simplicity_read32(&src);\n  if (writeBit(dst, nSequence < ((uint_fast32_t)1 << 31))) {\n    writeBit(dst, nSequence & ((uint_fast32_t)1 << 22));\n    simplicity_write16(dst, nSequence & 0xffff);\n  } else {\n    skipBits(dst, 17);\n  }\n  return true;\n}\n\n/* simplicity_tapdata_init : ONE |- CTX8 */\nbool simplicity_tapdata_init(frameItem* dst, frameItem src, const txEnv* env) {\n  (void) env; /* env is unused. */\n  (void) src; /* env is unused. */\n\n  sha256_midstate tapleafTag;\n  {\n    static const unsigned char tagName[] = \"TapData\";\n    sha256_context ctx = sha256_init(tapleafTag.s);\n    sha256_uchars(&ctx, tagName, sizeof(tagName) - 1);\n    sha256_finalize(&ctx);\n  }\n  uint32_t iv[8];\n  sha256_context ctx = sha256_init(iv);\n  sha256_hash(&ctx, &tapleafTag);\n  sha256_hash(&ctx, &tapleafTag);\n\n  return simplicity_write_sha256_context(dst, &ctx);\n}\n"
  },
  {
    "path": "C/jets.h",
    "content": "/* This module defines jets that simulate various Simplicity expressions.\n * Their specifications are given by the specific Simplicity expressions they are simulating.\n */\n#ifndef SIMPLICITY_JETS_H\n#define SIMPLICITY_JETS_H\n\n#include \"frame.h\"\n\n/* Forward declaration of the structure holding the environment in which a Simplicity expression is evaluated within. */\ntypedef struct txEnv txEnv;\n\n/* A jet simulates the execution of some Simplicity expression (without witnesses or delegation) of A |- B.\n * It reads data from a read frame 'src', and writes its output to a write frame 'dst'.\n * If successful then 'true' is returned.\n * If the expression being simulated would fail an 'ASSERTL' or 'ASSERTR' combinator, then 'false' is returned.\n * Cells in front of 'dst's cursor's final position may be overwritten.\n *\n * Precondition: 'src' is a valid read frame for 'bitSize(A)' more cells;\n *               '*dst' is a valid write frame for 'bitSize(B)' more cells;\n *               if the jet simulates a Simplicity expression with primitives then 'NULL != env';\n */\ntypedef bool (*jet_ptr)(frameItem* dst, frameItem src, const txEnv* env);\n\nbool simplicity_verify(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_low_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_low_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_low_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_low_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_low_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_high_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_high_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_high_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_high_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_high_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_complement_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_complement_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_complement_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_complement_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_complement_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_and_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_and_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_and_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_and_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_and_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_or_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_or_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_or_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_or_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_or_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_maj_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_maj_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_maj_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_maj_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_maj_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_xor_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_xor_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_xor_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_xor_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_xor_xor_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_ch_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_ch_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_ch_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_ch_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_ch_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_some_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_some_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_some_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_some_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_some_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_all_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_all_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_all_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_all_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_one_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_one_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_one_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_one_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_eq_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_eq_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_eq_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_eq_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_eq_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_eq_256(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_8_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_8_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_8_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_16_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_16_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_16_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_16_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_32_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_32_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_32_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_32_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_32_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_64_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_64_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_64_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_64_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_64_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_left_shift_64_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_8_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_8_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_8_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_16_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_16_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_16_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_16_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_32_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_32_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_32_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_32_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_32_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_64_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_64_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_64_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_64_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_64_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_right_shift_64_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_8_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_8_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_8_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_16_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_16_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_16_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_16_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_32_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_32_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_32_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_32_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_32_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_64_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_64_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_64_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_64_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_64_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_leftmost_64_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_8_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_8_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_8_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_16_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_16_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_16_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_16_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_32_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_32_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_32_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_32_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_32_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_64_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_64_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_64_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_64_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_64_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_rightmost_64_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_1_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_1_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_8_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_1_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_8_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_16_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_1_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_8_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_16_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_low_32_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_1_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_1_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_8_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_1_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_8_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_16_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_1_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_8_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_16_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_pad_high_32_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_1_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_1_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_8_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_1_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_8_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_16_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_1_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_8_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_16_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_extend_32_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_1_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_1_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_8_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_1_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_8_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_16_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_1_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_8_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_16_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_low_32_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_1_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_1_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_8_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_1_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_8_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_16_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_1_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_8_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_16_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_pad_high_32_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_extend_8_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_extend_8_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_extend_16_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_extend_8_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_extend_16_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_extend_32_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_with_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_with_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_with_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_with_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_shift_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_with_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_with_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_with_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_with_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_shift_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_rotate_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_rotate_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_rotate_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_left_rotate_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_rotate_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_rotate_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_rotate_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_right_rotate_64(frameItem* dst, frameItem src, const txEnv* env);\n\nbool simplicity_add_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_add_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_add_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_add_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_add_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_add_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_add_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_add_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_increment_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_increment_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_increment_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_increment_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_increment_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_increment_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_increment_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_increment_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_subtract_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_subtract_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_subtract_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_subtract_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_negate_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_negate_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_negate_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_negate_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_decrement_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_decrement_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_decrement_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_decrement_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_decrement_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_decrement_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_decrement_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_decrement_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_subtract_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_subtract_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_subtract_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_subtract_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_multiply_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_multiply_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_multiply_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_multiply_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_multiply_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_multiply_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_multiply_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_full_multiply_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_zero_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_zero_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_zero_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_zero_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_one_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_one_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_one_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_is_one_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_le_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_le_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_le_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_le_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_lt_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_lt_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_lt_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_lt_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_min_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_min_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_min_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_min_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_max_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_max_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_max_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_max_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_median_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_median_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_median_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_median_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_div_mod_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_div_mod_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_div_mod_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_div_mod_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divide_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divide_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divide_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divide_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_modulo_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_modulo_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_modulo_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_modulo_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divides_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divides_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divides_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_divides_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_div_mod_128_64(frameItem* dst, frameItem src, const txEnv* env);\n\nbool simplicity_sha_256_iv(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_block(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_init(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_2(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_4(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_8(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_16(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_32(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_64(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_128(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_256(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_512(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_add_buffer_511(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_sha_256_ctx_8_finalize(frameItem* dst, frameItem src, const txEnv* env);\n\nbool simplicity_fe_normalize(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_negate(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_add(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_square(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_multiply(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_multiply_beta(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_invert(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_square_root(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_is_zero(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_fe_is_odd(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_normalize(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_negate(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_add(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_square(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_multiply(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_multiply_lambda(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_invert(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scalar_is_zero(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_infinity(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_rescale(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_normalize(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_negate(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_ge_negate(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_double(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_add(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_ge_add_ex(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_ge_add(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_is_infinity(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_equiv(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_ge_equiv(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_x_equiv(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_y_is_odd(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_gej_is_on_curve(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_ge_is_on_curve(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_off_curve_scale(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_scale(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_generate(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_off_curve_linear_combination_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_linear_combination_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_linear_verify_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_decompress(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_point_verify_1(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_swu(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_hash_to_curve(frameItem* dst, frameItem src, const txEnv* env);\n\nbool simplicity_check_sig_verify(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_bip_0340_verify(frameItem* dst, frameItem src, const txEnv* env);\n\nbool simplicity_parse_lock(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_parse_sequence(frameItem* dst, frameItem src, const txEnv* env);\nbool simplicity_tapdata_init(frameItem* dst, frameItem src, const txEnv* env);\n\n#endif\n"
  },
  {
    "path": "C/limitations.h",
    "content": "#ifndef SIMPLICITY_LIMITATIONS_H\n#define SIMPLICITY_LIMITATIONS_H\n\n#include <stdint.h>\n\n#define DAG_LEN_MAX 8000000U\n#define NUMBER_OF_TYPENAMES_MAX 0x1000U\n#define CELLS_MAX 0x500000U /* 5120 Kibibits ought to be enough for anyone. */\n#define BUDGET_MAX 4000050U\n_Static_assert(DAG_LEN_MAX <= SIZE_MAX , \"DAG_LEN_MAX doesn't fit in size_t.\");\n_Static_assert(NUMBER_OF_TYPENAMES_MAX <= SIZE_MAX, \"NUMBER_OF_TYPENAMES_MAX doesn't fit in size_t.\");\n_Static_assert(CELLS_MAX <= SIZE_MAX, \"CELLS_MAX doesn't fit in size_t.\");\n_Static_assert(BUDGET_MAX <= UINT32_MAX, \"BUDGET_MAX doesn't fit in uint32_t.\");\n\n#endif\n"
  },
  {
    "path": "C/precomputed.h",
    "content": "/* This file has been automatically generated by GenPecomputed.hs */\n#ifndef SIMPLICITY_PRECOMPUTED_H\n#define SIMPLICITY_PRECOMPUTED_H\n\n#include \"sha256.h\"\n\n/* Initial values for Simplicity's standard tagged message digest. */\nstatic const sha256_midstate signatureIV =\n  {{0xedebc74bu, 0x774c1bb2u, 0xcb6be27eu, 0x38d63c82u, 0x6f0c6ee6u, 0x02399eb6u, 0x483bde91u, 0x270a1b9bu}};\n\n/* Initial values for all the 'typeName's. */\nstatic const sha256_midstate unitIV =\n  {{0x50b38cd7u, 0x6475ff89u, 0x29288bfcu, 0xd0d9df0eu, 0x4a241c0au, 0x5708572au, 0xd264192au, 0x4fe67beeu}};\nstatic const sha256_midstate sumIV =\n  {{0x920cfd83u, 0xcf96bb32u, 0x7317360fu, 0x6d3ad760u, 0x1eef0a16u, 0xdd53146cu, 0x2e5de35fu, 0x51ef8da4u}};\nstatic const sha256_midstate prodIV =\n  {{0xae992a3eu, 0xe0713bf6u, 0x195d3bacu, 0x1af505a7u, 0x29c14d47u, 0x9558f0d6u, 0x299630f7u, 0xfa972ef8u}};\n\n/* Initial values for all the tags for 'CMR's, 'AMR's and 'IMR's. */\nstatic const sha256_midstate cmr_compIV =\n  {{0x57ec23a2u, 0xa4778e01u, 0x58a6217au, 0xea3ef742u, 0x8ba09092u, 0x73b973fau, 0x1432a927u, 0x843e927au}};\nstatic const sha256_midstate cmr_caseIV =\n  {{0x295e2a6du, 0xc8c5ce59u, 0xe4edcfe9u, 0xb4d8f764u, 0x133aa551u, 0x4bd3ee8bu, 0x4b75ec8fu, 0x4deb08beu}};\nstatic const sha256_midstate cmr_pairIV =\n  {{0x7d5e6dacu, 0x15b1428au, 0x0d260c94u, 0x29dbe889u, 0x6593f31fu, 0x708627eeu, 0x75b27eeeu, 0xfdd05005u}};\nstatic const sha256_midstate cmr_disconnectIV =\n  {{0x35338b5bu, 0x81740c6du, 0x67dc1ea3u, 0xc831e4c0u, 0xafd86409u, 0xbc04d0ddu, 0x4324b7d9u, 0xd583f4ebu}};\nstatic const sha256_midstate cmr_injlIV =\n  {{0x54e91d18u, 0xd8f81f6du, 0x2986bb58u, 0x479a54ebu, 0x630e9523u, 0xb69ee853u, 0x2980d055u, 0x58194f15u}};\nstatic const sha256_midstate cmr_injrIV =\n  {{0xd70ffdceu, 0x97777b4du, 0xfe31fd9fu, 0xf5d017a6u, 0x305d7ec6u, 0x0df3b1bfu, 0x6d25e816u, 0x33ded4bfu}};\nstatic const sha256_midstate cmr_takeIV =\n  {{0x505fc081u, 0xb5ba2acdu, 0x095067c3u, 0xdfb8ea12u, 0x6fa15d55u, 0xcb211e6au, 0xed34e8d1u, 0xe37af0fau}};\nstatic const sha256_midstate cmr_dropIV =\n  {{0x8a308d38u, 0xa113a260u, 0xb4c7145au, 0xbdc5224du, 0xeb701379u, 0x590e0c8cu, 0x38860babu, 0x1271a8a8u}};\nstatic const sha256_midstate cmr_idenIV =\n  {{0x541a1a69u, 0xbd4bcbdau, 0x7f34310eu, 0x3078f726u, 0x443122fbu, 0xcc1cb536u, 0x0c7864ecu, 0x0d323ac0u}};\nstatic const sha256_midstate cmr_unitIV =\n  {{0xc40a1026u, 0x3f7436b4u, 0x160acbefu, 0x1c36fba4u, 0xbe4d95dfu, 0x181a968au, 0xfeab5eacu, 0x247adff7u}};\nstatic const sha256_midstate cmr_witnessIV =\n  {{0xa0fc8debu, 0xd6796917u, 0xc86b77adu, 0xed82e6c6u, 0x1649889au, 0xe8f2ed65u, 0xb57b41aau, 0x9d90e375u}};\nstatic const sha256_midstate amr_assertlIV =\n  {{0xd5ddd741u, 0xd727e220u, 0x3556b0f8u, 0xba4f7fd0u, 0xb48f8dbfu, 0x7a858487u, 0x9baba8d6u, 0xecaa43efu}};\nstatic const sha256_midstate amr_assertrIV =\n  {{0xc5fecd9cu, 0xadc16a7au, 0x08cf215au, 0xe75840f6u, 0xd205e7aau, 0x27f6fff2u, 0x6bfa1e6bu, 0x3a0f76fau}};\nstatic const sha256_midstate amr_compIV =\n  {{0x737fd053u, 0x08d60500u, 0x3bde8eb2u, 0x0a3b9397u, 0xc1daaae5u, 0x43d8a4e4u, 0xfeef4838u, 0x76859384u}};\nstatic const sha256_midstate amr_caseIV =\n  {{0x595814f9u, 0xe0c889b4u, 0x847aba1du, 0x51e14e04u, 0x8f95344bu, 0x2a432091u, 0xf81bd3b8u, 0x36ec3504u}};\nstatic const sha256_midstate amr_pairIV =\n  {{0x7996b3bfu, 0xa6033673u, 0x2515a124u, 0x3f6b3c23u, 0x6bff0eb0u, 0x662f8addu, 0x54af0c98u, 0xd1fddda7u}};\nstatic const sha256_midstate amr_disconnectIV =\n  {{0x27ebbcaau, 0x5a537c25u, 0xd8bb4340u, 0x37bb2fffu, 0x6b881535u, 0x435e6d60u, 0xa5f85cd0u, 0xf05a6147u}};\nstatic const sha256_midstate amr_injlIV =\n  {{0xbacb6356u, 0x6980dcacu, 0x45591f5au, 0xef0d91d4u, 0x9ea4c1e0u, 0x072b1ce3u, 0xdd207521u, 0xc9ead808u}};\nstatic const sha256_midstate amr_injrIV =\n  {{0x7b116ebcu, 0x3f909eefu, 0x13879871u, 0x99844b91u, 0xbcc7402cu, 0x2430c485u, 0x2975d48fu, 0x490c547au}};\nstatic const sha256_midstate amr_takeIV =\n  {{0x4175a134u, 0xe6b4d15bu, 0xb48ac582u, 0xd9bc83a2u, 0x9484c7ecu, 0x27004dffu, 0x94aae4cbu, 0x5d876fb6u}};\nstatic const sha256_midstate amr_dropIV =\n  {{0x3b3293abu, 0xbcc9b9dbu, 0xe1bd70a3u, 0x315f38ffu, 0x2605fb30u, 0xe31f3ceeu, 0x7b251a88u, 0x31c15689u}};\nstatic const sha256_midstate amr_idenIV =\n  {{0x451f688cu, 0x41509968u, 0x3a8d36a7u, 0x09ba4249u, 0xe6def71bu, 0x3529b4c1u, 0xf2e4d563u, 0x855491afu}};\nstatic const sha256_midstate amr_unitIV =\n  {{0xdbfee784u, 0x3b591e8fu, 0x7ce485dcu, 0xb5d66bccu, 0x23984810u, 0xbd6be52au, 0xa76eaf2bu, 0x25cb4423u}};\nstatic const sha256_midstate amr_witnessIV =\n  {{0x6bc620cbu, 0x52f90c63u, 0x0ef8c80du, 0x5f690db4u, 0xe9930ad0u, 0xfa707136u, 0x5b5c93e0u, 0x391bd796u}};\nstatic const sha256_midstate imr_disconnectIV =\n  {{0x4eb7995fu, 0xb5dde5d0u, 0x85f47085u, 0xcd953d16u, 0x845411edu, 0xc689e27au, 0xf9c3dea2u, 0xfb1225d5u}};\nstatic const sha256_midstate imr_witnessIV =\n  {{0xcb37ff70u, 0x01c62d94u, 0x424f987fu, 0x3023b35eu, 0x30d21723u, 0x96276f89u, 0xd09f07aau, 0x67b62196u}};\nstatic const sha256_midstate identityIV =\n  {{0x0c5bc1ceu, 0xc8f14185u, 0x0e333e28u, 0xea01c05au, 0xc642eb30u, 0xb49e692cu, 0x56b122bbu, 0x6949c5cdu}};\nstatic const sha256_midstate hiddenIV =\n  {{0x104d6d85u, 0x2466c4b4u, 0x18aee81au, 0x256f3432u, 0x00bead20u, 0x2c95ccd6u, 0x8c1ef894u, 0x956a16d9u}};\nstatic const sha256_midstate jetIV =\n  {{0x9532ee28u, 0xcdca69deu, 0xc8a0a218u, 0xb79be362u, 0xf740ceafu, 0x647f15b3u, 0x8aed9168u, 0x163f921bu}};\n\n/* This array contains the cmr of all canonical expressions of type X |- TWO through X |- TWO^8 that output distinct values.\n * word_cmr[0..1] contain the cmrs for scribe(0) .. scribe(1) : X | - TWO\n * word_cmr[2..5] contain the cmrs for scribe(0) .. scribe(3) : X | - TWO^2\n * word_cmr[6..21] contain the cmrs for scribe(0) .. scribe(15) : X | - TWO^4\n * word_cmr[22..277] contain the cmrs for scribe(0) .. scribe(255) : X | - TWO^8\n */\nstatic const sha256_midstate word_cmr[] =\n  { {{0x8881aff5u, 0x160cc0c9u, 0xf8ecead8u, 0xb401fa97u, 0xeef5fc60u, 0x752e98d2u, 0x47561a4du, 0xa6ce965eu}}\n  , {{0xa0438b72u, 0x3648727bu, 0x3f2d185fu, 0xcd9569e0u, 0x22a4478eu, 0xb25fdfa5u, 0x38eac59du, 0x817c311cu}}\n  , {{0xd7fe8db3u, 0x4cbe07fbu, 0xbbbe2dfbu, 0x5f93f678u, 0x35f28251u, 0xc5699d69u, 0x7e5329b1u, 0x098e557du}}\n  , {{0xc8acfd1eu, 0xc3362653u, 0xd5116e84u, 0x1ed1c856u, 0x56a1b140u, 0x4b27285cu, 0xd5583292u, 0x869dbea0u}}\n  , {{0xc05e06a0u, 0x597a5ca6u, 0x380337fau, 0x9ee62e6cu, 0x756b80b9u, 0x8e26ec2eu, 0x4cd8854du, 0x53a53ce1u}}\n  , {{0xcadff522u, 0xee374c32u, 0x9fa84480u, 0x7ac2d8e7u, 0x4034c5efu, 0x19a40043u, 0x149fcc1du, 0x5e14c2cbu}}\n  , {{0x93e415c1u, 0x81757105u, 0x3d8603feu, 0x85585840u, 0xe43c6af1u, 0x699fbc63u, 0x74018768u, 0x7793713fu}}\n  , {{0xa50f9ad3u, 0x2f7b9900u, 0x4c1d1354u, 0x1cb3202bu, 0x20edcbbau, 0xdf50d062u, 0xf0b4a4edu, 0x0b741549u}}\n  , {{0x7a1223a2u, 0x8ac472d8u, 0xc64f003fu, 0x88d8a2d1u, 0x81045f4cu, 0x32b95bd4u, 0x9f1df21fu, 0x371d5ab0u}}\n  , {{0x04f7548fu, 0xb4659eb8u, 0xce4e38dau, 0x517cb5a9u, 0x19e9bb82u, 0x8abb2fa2u, 0xeb5f5d0bu, 0x7a09aa0bu}}\n  , {{0xc4a49fc4u, 0xceadccc2u, 0x34b9d2eau, 0xabdba05fu, 0xee8627b5u, 0xa93898fau, 0x1b7b5b54u, 0x36dcdf25u}}\n  , {{0x60e08b90u, 0x8aac6e49u, 0x242aeaadu, 0x15883170u, 0x4da76a92u, 0xc31971d4u, 0xb8783db7u, 0x77bd9cd9u}}\n  , {{0x7b9d9624u, 0xa92159e0u, 0xc0240863u, 0x041f3049u, 0x130f6965u, 0xa7f8e3b7u, 0x8037469bu, 0xf9b0a971u}}\n  , {{0xd0018e78u, 0x8cec5176u, 0x93687f27u, 0x42c86d09u, 0xf7c7749fu, 0xb15da620u, 0x0871fbbau, 0x88945e73u}}\n  , {{0xece5ca22u, 0xe2b1a94bu, 0xd10a64aeu, 0x731a3223u, 0xf42e5bbeu, 0x5feb55cbu, 0x453b5484u, 0xdb5837a0u}}\n  , {{0x7090ebfbu, 0xa23c088cu, 0xd4b3050au, 0xfa96246eu, 0xbeda85c0u, 0x700e3ae5u, 0x3b321f29u, 0x647097f0u}}\n  , {{0x0513c250u, 0xb0b5f8d8u, 0x3de6b1ecu, 0xfed51b4cu, 0xe57682a9u, 0x5a78c03du, 0x06de85d6u, 0x34213f8bu}}\n  , {{0x534b3c8bu, 0xe145a334u, 0x7725f932u, 0x141fcc04u, 0x04f0aa53u, 0x42ee18efu, 0xa5fc9a4bu, 0xc65a22c7u}}\n  , {{0xe64a6c69u, 0xb1abc702u, 0xa217faa9u, 0x967f6059u, 0xe884565fu, 0xdcf472ffu, 0xea8f5f4fu, 0x9aa642d8u}}\n  , {{0xd5dd3331u, 0xf2ff9417u, 0x607ab989u, 0x91218d15u, 0xbb09575cu, 0x02ecb7dfu, 0x1bfc1445u, 0x146e2a90u}}\n  , {{0xb93d3419u, 0x19ae147du, 0x305b477au, 0x4b5a1728u, 0x2f935014u, 0x1c3808ffu, 0xc8df5633u, 0x64f6f456u}}\n  , {{0x3a95256eu, 0x380d2cb8u, 0x2c38d940u, 0x3f358478u, 0x6fef84a5u, 0x08dd1ddau, 0x3eded3bcu, 0x93e198bbu}}\n  , {{0x7af386bau, 0x2dba1bcbu, 0x4cddb26fu, 0xfd493045u, 0x8f02c364u, 0xd7df7cbfu, 0xa351055eu, 0x045a5624u}}\n  , {{0xdc8b76c8u, 0x65959c63u, 0x1049ec2au, 0x3f6061aeu, 0x2789a890u, 0x5a8657e8u, 0x05c06ac3u, 0xfaf3f20au}}\n  , {{0xa74f73d3u, 0x71924a85u, 0x342d08a6u, 0x0882d544u, 0x3ab1cac3u, 0xdebe1f85u, 0xcd8d2b8au, 0x70ffa2b4u}}\n  , {{0x7c2151ecu, 0x89df8159u, 0x0d4a67b3u, 0x08fae25bu, 0x502d0fc2u, 0xf3e960d4u, 0xf42cc7bfu, 0xaf33c46bu}}\n  , {{0x085a83d4u, 0x649cbf51u, 0x0aaa3885u, 0x230c0150u, 0x2d0a2e71u, 0xe2b2a153u, 0x054c8b95u, 0x67941422u}}\n  , {{0xddfee6aau, 0x30ccfbb8u, 0x24c56798u, 0x52bbad8eu, 0xe543bf78u, 0x8c962badu, 0x38a4a141u, 0x5cfe3a76u}}\n  , {{0x2f348af8u, 0xb030cad1u, 0x7ae72777u, 0x83b829a0u, 0xc2d19f52u, 0x9a77dfc8u, 0xc2baf39fu, 0x2fae450cu}}\n  , {{0x2d570cf0u, 0x76e8d4e2u, 0x7543a45du, 0x1f5bee5au, 0x81be4535u, 0xf23930bbu, 0x987a68dcu, 0xb60f1f86u}}\n  , {{0x576c5225u, 0x997d8223u, 0x3019bcc9u, 0xe5d3c8dfu, 0xaf078862u, 0xd3b7ea3eu, 0x16dc7330u, 0xe16a2cbfu}}\n  , {{0xce8ca19au, 0x8407af50u, 0x6f3edbc4u, 0xd3ee91a5u, 0xc968e144u, 0xc41e28b2u, 0x7ecf0745u, 0xdefa07c5u}}\n  , {{0xda82e2beu, 0x43bd8bbcu, 0x1cafb331u, 0xf3750d68u, 0x5f97e5adu, 0x2d7000a0u, 0xc7037536u, 0x8a510714u}}\n  , {{0x7395c56cu, 0x670c8f34u, 0x03683dbdu, 0x862ca100u, 0x164e8b9du, 0xb2027299u, 0xe17a1645u, 0xa0801ab8u}}\n  , {{0xef0bf612u, 0x951a8e36u, 0x43819010u, 0x2706aa8bu, 0x1892a3a3u, 0x6db218b9u, 0x340a69a4u, 0xa55862a3u}}\n  , {{0xf06564ccu, 0x99b9724du, 0x3efd8362u, 0xdfd36b4bu, 0x390b6124u, 0xfdadfe00u, 0x9c894204u, 0x617f0078u}}\n  , {{0x1b33142eu, 0x08b15183u, 0xbf91fc20u, 0xaf3e9b6au, 0xa5836c51u, 0xbb4d77b9u, 0x996a5261u, 0x6f769a25u}}\n  , {{0x3a838808u, 0x7015d689u, 0x0dd6717au, 0x8610b2cfu, 0xda3c40cfu, 0xf0137c21u, 0x6169ce21u, 0x3e0ffdc5u}}\n  , {{0xff46be6bu, 0x5d9754e6u, 0x09038295u, 0xbf0a3802u, 0xf365e046u, 0x54f92221u, 0x2a530f8au, 0x3e222141u}}\n  , {{0x86eec208u, 0x2178d995u, 0x5aa89733u, 0x6a724bf9u, 0x65fd9f63u, 0x71b62259u, 0x3bb05a9du, 0x51055d82u}}\n  , {{0x04ae4eacu, 0xdfd605a7u, 0x4f2750f5u, 0xdf8b2b1bu, 0xbc7d8945u, 0x1fd724b2u, 0xfe4dddebu, 0x3211b6e9u}}\n  , {{0xe228a2f7u, 0x32bb3aedu, 0x6f300730u, 0x1546921fu, 0x8157829cu, 0x53747272u, 0x7f9c4213u, 0x5775dba6u}}\n  , {{0x7718994fu, 0x958c3720u, 0x0875df07u, 0xa114a10bu, 0x8c1e8e93u, 0x5021f268u, 0xb04d53e0u, 0xd654cc48u}}\n  , {{0xb84e0c64u, 0x57dd2154u, 0x71856fc4u, 0x5a0b4106u, 0x6eee35dcu, 0xa74cfdcfu, 0xee7bae6eu, 0xb54ed8d4u}}\n  , {{0xc65d5665u, 0x63138546u, 0xcf0ecde9u, 0x8e9c7300u, 0xd7062243u, 0x557cf251u, 0x6113c746u, 0x87afc6bdu}}\n  , {{0x774f921cu, 0x22654db7u, 0x665ac7e4u, 0x836eccbau, 0x60ff12c3u, 0x18332504u, 0x365b2d74u, 0xcb82c9b9u}}\n  , {{0x6fdd10b6u, 0x3568dea4u, 0x43523abeu, 0x2db21e75u, 0x44ac3d9fu, 0x537fc089u, 0xe9d367a3u, 0x1d730620u}}\n  , {{0x528b7e54u, 0x2d73ee93u, 0x428d1c04u, 0x6c1b074bu, 0x63f9b150u, 0x8257c564u, 0x4437aebdu, 0x8da9a3b2u}}\n  , {{0x93ec0116u, 0x9ef97b96u, 0xf80b5fd6u, 0x35bed90fu, 0xa72f50ceu, 0x8c2f542cu, 0x05ed2a7eu, 0xa086905cu}}\n  , {{0xabadfbd9u, 0x7b91ebeeu, 0xc3977bc9u, 0x35f4163fu, 0xf8a09ef3u, 0xa835ba5eu, 0x145587b8u, 0x8d93ce70u}}\n  , {{0x92e8a32eu, 0xc0e57496u, 0xc879e9c3u, 0xc0ba82eeu, 0xd79e3df4u, 0xb7856e9bu, 0x5b351b23u, 0x584299a4u}}\n  , {{0xa08d6434u, 0x035f00c7u, 0x425c4e4cu, 0x34bc182fu, 0x88086971u, 0x69819395u, 0x85906ca7u, 0x73e5db87u}}\n  , {{0x3bbf58e0u, 0x104a8656u, 0x569b2b72u, 0xd80508eau, 0xb56530ffu, 0xdcd10bfau, 0x79d860efu, 0x1e6bf4ecu}}\n  , {{0xbf43761eu, 0x6c61aa76u, 0xdd83c661u, 0xc3ca525du, 0x1572beb3u, 0x8ed941c6u, 0x399b091bu, 0x49d9c94eu}}\n  , {{0x335787ceu, 0xe4790768u, 0xd626d0c1u, 0x620cd412u, 0x7553fc4fu, 0x31d32b31u, 0xe22e3531u, 0xafde9be6u}}\n  , {{0x3c89503du, 0x06382c53u, 0xd609d313u, 0x59dcbaceu, 0xf90c33d2u, 0x7dd98f14u, 0xae1c8b1au, 0x169eb72au}}\n  , {{0xf2c5c8afu, 0xd7f16b6cu, 0xcca7198bu, 0x950a458cu, 0x36ffeec7u, 0x57899517u, 0x34e0daa8u, 0x04f98167u}}\n  , {{0xa2d4ce23u, 0x2ce7a434u, 0x4c4030e7u, 0xa2d7ec4au, 0xf825d95cu, 0xa7e69cd9u, 0xf810c342u, 0x67ef5e19u}}\n  , {{0x112a580bu, 0xe7b645edu, 0x9f612d82u, 0xf6624e6fu, 0x224acea1u, 0xf0821ccfu, 0x9af5e277u, 0xcef4e11bu}}\n  , {{0x1294d6a3u, 0x0fda6450u, 0xf611d0dfu, 0x7f894fa2u, 0x4b6df6deu, 0x13114b7du, 0x28a64223u, 0xde243d99u}}\n  , {{0x40177006u, 0xb04b8ce8u, 0x7446db11u, 0xdf60ff64u, 0xb543a571u, 0x4d71eeb1u, 0x39e81fb2u, 0x161bb453u}}\n  , {{0x003ec054u, 0x98e706a2u, 0xcaeceed4u, 0xf359a871u, 0x237368ceu, 0xd508d9fcu, 0xf91f712cu, 0x0f120945u}}\n  , {{0xe017e771u, 0xbf1aa56bu, 0xa842da71u, 0x3726cd00u, 0x0e14ac94u, 0xa2485260u, 0xc0a0bc86u, 0xd3afefdau}}\n  , {{0xc71c3c3eu, 0x8c6413d4u, 0xb47f6d14u, 0xc76e04a4u, 0x95a58d0bu, 0xf513f744u, 0x4fc25e3cu, 0x3779c94fu}}\n  , {{0x11214efcu, 0x6772d86au, 0x06ae1070u, 0x96e34304u, 0x40580232u, 0x70d82997u, 0x126f5ebeu, 0x58ffd0cdu}}\n  , {{0x1dabf0d7u, 0xc373eadcu, 0xe71013fbu, 0x2003af54u, 0xf779e7abu, 0x726b893du, 0xcbf997d1u, 0x6a63c74cu}}\n  , {{0x5c5a1d47u, 0x669c9180u, 0x5c821252u, 0x8d1cb84du, 0x4340aeb1u, 0x5bdf28dcu, 0x9b8c064fu, 0x642ec9f0u}}\n  , {{0x7b45407cu, 0xf7763dabu, 0xee06fcf2u, 0xc615738du, 0x15b20a54u, 0x2e5b9fa8u, 0xd5724994u, 0x6be06582u}}\n  , {{0xbef11188u, 0x0909ae61u, 0x9732762du, 0x12808df4u, 0xe4c2f2fcu, 0xac70d5d5u, 0x642a996bu, 0x3a56bcd0u}}\n  , {{0x8b721a4du, 0x80ac5b88u, 0x8944ae2fu, 0xbe233738u, 0x4edbae77u, 0xe6bc121au, 0x999a426du, 0x676fca18u}}\n  , {{0x78288b41u, 0x565dbfbau, 0x4a26d6bcu, 0x358a565fu, 0x7981f946u, 0xba70e14au, 0x5022adf3u, 0x2da1a8b8u}}\n  , {{0x32e1aaaau, 0xf2a3c56eu, 0xcfbb82c0u, 0xf0077491u, 0xedb21b37u, 0xb2399c89u, 0x6a844b58u, 0x42cd1a0du}}\n  , {{0xb2c2b29au, 0x5cfbbdc6u, 0xb7645201u, 0x82ca33d0u, 0x9128060du, 0x45b057efu, 0xecaa5055u, 0xdb42d3d9u}}\n  , {{0x5826dab9u, 0x024e7b4cu, 0x4358613eu, 0x33d5ca04u, 0xd0de2a11u, 0x7cd421a8u, 0x7f4bb4c8u, 0x3aa74ad8u}}\n  , {{0x594385a2u, 0x82fae7e9u, 0xf8e1d695u, 0x09bbe964u, 0x9df669b2u, 0x9c3838e4u, 0x9f08c079u, 0x1618f8e8u}}\n  , {{0xb84ca35fu, 0x17078b58u, 0x58e21da6u, 0x0aaaae22u, 0x1536c234u, 0xed4fdc92u, 0x00500267u, 0x6f7053a5u}}\n  , {{0x00ece731u, 0x0ba27fd6u, 0xb2895533u, 0x46a6edc4u, 0xebbc7971u, 0xb0fa8ca0u, 0x5c5bb51bu, 0xce90dec1u}}\n  , {{0x86e74263u, 0x7060d5aau, 0xcb006749u, 0x364ee363u, 0x77dd0a42u, 0x58724ab5u, 0x6c6a5e8au, 0xc3934a3eu}}\n  , {{0x49902ee2u, 0xa9b81468u, 0x7f684d28u, 0x717def47u, 0x1dba668cu, 0x360cfadbu, 0x8a2bce66u, 0xcdfecc74u}}\n  , {{0x510783b0u, 0x73eb460eu, 0xa6b34d54u, 0x58f6045eu, 0x79020b94u, 0xda666351u, 0xf1e8bab0u, 0x7a73dbd8u}}\n  , {{0x5a5c0326u, 0xde3b7cb5u, 0x11251baau, 0xc579c859u, 0xd7c5e905u, 0x9779a170u, 0x70858233u, 0x78e6b376u}}\n  , {{0xa1933200u, 0xb5b1dfbau, 0xddc2f9b9u, 0xdb601632u, 0xe5e2a795u, 0xf2785d4du, 0x365e92bcu, 0xe6fa605au}}\n  , {{0xae10d77au, 0x1c3cc3bbu, 0x88631cc9u, 0xc749ec95u, 0x92e90a98u, 0x298cfd39u, 0xebf35bfbu, 0xc09d9d14u}}\n  , {{0x6bd30773u, 0x5ac41660u, 0x63b74b6bu, 0xef346c6au, 0x5b7c3f48u, 0x6e54b40au, 0x0f4ff301u, 0x6dcd69acu}}\n  , {{0xa63f0760u, 0x8957b089u, 0x91724dbcu, 0x9f1dcf1fu, 0xb7ecce71u, 0x3442af80u, 0x8c75fcb6u, 0x76a2cd1du}}\n  , {{0x95e8b5f2u, 0xee0c1bdfu, 0x0b230fe5u, 0xe7f67345u, 0xdb138f02u, 0x7f20b43cu, 0x2fee5c16u, 0x379181d6u}}\n  , {{0x37a76af1u, 0x334d475du, 0x5fb22a4du, 0xc9b664e1u, 0xa4274c0au, 0x604369f3u, 0x8ecc14c4u, 0xc3ec4a41u}}\n  , {{0x2ca9322eu, 0x3ab25ba6u, 0x9a7c8d90u, 0x325789aau, 0x7dd4a212u, 0x93e6465au, 0x9c9913eau, 0x55bfa458u}}\n  , {{0x95bd1d21u, 0xeddac5b2u, 0x081a12d0u, 0xc25f96edu, 0x671d9860u, 0xb3bc8c5eu, 0xad62cfd2u, 0xf5410bb9u}}\n  , {{0x689e2a53u, 0x16a6f286u, 0xec59ae9du, 0xc99d9aa5u, 0x3fb75854u, 0x3bdc86f2u, 0x5d1152d6u, 0x8005afe0u}}\n  , {{0x817bbba4u, 0x6e72d2ccu, 0x38bb1b02u, 0xeacdf1a3u, 0x09544e88u, 0x4b620eb7u, 0x37eb0345u, 0xbbb686afu}}\n  , {{0x9446e9c6u, 0xd7ea74f0u, 0x07f57646u, 0x65b79b9cu, 0x2f6f6586u, 0x149bac74u, 0x805d3b25u, 0xaadfa18au}}\n  , {{0x8a4d77c2u, 0x0051373fu, 0x021c5271u, 0x3c45af4au, 0x9ac374c8u, 0x31030728u, 0x5693cc99u, 0x19d50d5eu}}\n  , {{0x7317b344u, 0x700bbca6u, 0xb18b51eau, 0x838a31dfu, 0x28803ab8u, 0xa9a15ca5u, 0x3b2af97fu, 0x9428102du}}\n  , {{0x58fbea49u, 0x5a05759fu, 0x88c32195u, 0x9ad75f2fu, 0x9d2d2b97u, 0x45ab6995u, 0xfa4330fcu, 0x132b5effu}}\n  , {{0x10bc5aafu, 0xae2a5de3u, 0x73c80018u, 0x397410e0u, 0x286f3834u, 0xbf7e1203u, 0xa4727050u, 0x7eb64e45u}}\n  , {{0xb547c037u, 0xade214d4u, 0x796bb50bu, 0xaf8ce99eu, 0xdfe33427u, 0xf8aa8395u, 0x16ea3b94u, 0xcee0d95du}}\n  , {{0x2ad83c37u, 0xccec3890u, 0xb3c5b30au, 0x5575adfcu, 0xc6311cc9u, 0x55c10b8fu, 0x7f049030u, 0x603b0835u}}\n  , {{0xa2abb142u, 0x1ede519bu, 0x82877fb1u, 0x0ca9c014u, 0x87c9026du, 0x5d224cf5u, 0xd7f0dd34u, 0x626b72bbu}}\n  , {{0x8a81fd8au, 0xf1400fc9u, 0xf6c9a63fu, 0x90ee83b3u, 0xd5b2e7d0u, 0x57903fd6u, 0xea0a2ceeu, 0x5857bb2du}}\n  , {{0x720358b3u, 0x3aabc2c0u, 0xfd0009a7u, 0x7a593883u, 0x349cd076u, 0x2026347fu, 0xbe8d0959u, 0x20f5eb05u}}\n  , {{0xad38b4c4u, 0x75a32d41u, 0x8be764c1u, 0x7c9ea0aau, 0xc84aa8d8u, 0xbf970a51u, 0xea1b5d68u, 0xb51428ddu}}\n  , {{0xe234ec92u, 0x7a048d41u, 0x4814c73fu, 0x220cd890u, 0x63821238u, 0x247c7c06u, 0x8dba1ca6u, 0x882718e9u}}\n  , {{0xae03e99au, 0xff0e082fu, 0xc239043fu, 0x089d6765u, 0xeb57fd63u, 0x0d55602eu, 0xdd02cc06u, 0xf21f851fu}}\n  , {{0x6ce618c6u, 0x2008977fu, 0xaf2a1654u, 0x09bff5cdu, 0xcb5c9d0bu, 0xf8a61e96u, 0x887f2c6eu, 0x1d0c1955u}}\n  , {{0x8ee10390u, 0x3d620adeu, 0x5e0899f5u, 0xc632f709u, 0x0ba0d949u, 0x2908d785u, 0x8a3497ffu, 0x2bcfaafeu}}\n  , {{0xcfe85a6fu, 0xda12d49eu, 0x13ac4f2bu, 0xc9cab203u, 0xd8cd0cabu, 0x1f9fe0ddu, 0xb1504fb0u, 0x3f50f184u}}\n  , {{0x5db317b3u, 0xeba483c7u, 0xa89f3b27u, 0xe9bd4d70u, 0xde78f8ceu, 0x7ab815f7u, 0x8b88b45cu, 0x7a370a41u}}\n  , {{0x36ccbcdau, 0x0431a6d8u, 0x2c1d98deu, 0x91003adfu, 0x697505b0u, 0xefac170au, 0xe8065645u, 0x4577e8dbu}}\n  , {{0x8cff3cb5u, 0x177087cbu, 0xda437870u, 0x3458a663u, 0x2e96f5acu, 0x7e6909e4u, 0x72e1a8bbu, 0x9589cf79u}}\n  , {{0x035f48b3u, 0xa8a1defcu, 0x2593f837u, 0xcb64fe74u, 0xe548ebb1u, 0x6966a690u, 0x8ace11bau, 0x52b03f5cu}}\n  , {{0xd8f4c06du, 0x0258f2f4u, 0x5c0f0d93u, 0x6516d9a7u, 0x8487db6fu, 0x19c8d23cu, 0x699360b0u, 0x6c30bf63u}}\n  , {{0x45a27b9au, 0xdc0eaa64u, 0x40681c5eu, 0x58ea6736u, 0x3bcb8eafu, 0xf176393au, 0xc60073cau, 0x4a775ce4u}}\n  , {{0x7c0808a9u, 0xa43174d9u, 0x32d86268u, 0xb1b3c01du, 0x4f5b64edu, 0x2502510fu, 0x02392347u, 0xd538b82bu}}\n  , {{0x9ae50028u, 0x7372249bu, 0x965cdf67u, 0xf3a833aeu, 0xce688ccfu, 0xaaff863du, 0x0a017fb5u, 0x24fff828u}}\n  , {{0xc8cbe524u, 0x4bde4a6eu, 0xc7e5d793u, 0x3d25d7cfu, 0x8b75e238u, 0x27922b3bu, 0xf0623d7fu, 0xc8c8142du}}\n  , {{0x7338081au, 0xd9090720u, 0x40f3243du, 0x1acefe20u, 0xd825518au, 0xcf51bfeeu, 0xa0f288a0u, 0x05f456ecu}}\n  , {{0x6c220d6au, 0x62fdf981u, 0xab22fd10u, 0x4ace7eccu, 0x42f42570u, 0x7d202bccu, 0x8b865ae1u, 0xabf85d97u}}\n  , {{0xecdfaf14u, 0x8dabc954u, 0xa06e5176u, 0x19fba2a1u, 0x88cbefdau, 0x2560a82cu, 0xf926f46bu, 0xe3d4713fu}}\n  , {{0x6bc2637fu, 0xef5178a0u, 0xee7571fcu, 0x5e4e9dccu, 0x45ce4662u, 0xd7e3854du, 0x5a3596a1u, 0x4da1e0cbu}}\n  , {{0x5fb15b2du, 0xd674f9e7u, 0x4b93904au, 0xe3dbd15cu, 0x68bf4990u, 0xf7510666u, 0x64b7711eu, 0x29e10024u}}\n  , {{0x7b7094f3u, 0x940f6395u, 0x1ce1d63bu, 0x0a6f22e3u, 0x4ccf5064u, 0x0ac42beau, 0xa39118f8u, 0xec84c974u}}\n  , {{0x086676eeu, 0xbbfce104u, 0xaf841c81u, 0xd067dda0u, 0x16d4c87fu, 0xa53317dcu, 0xbcda8f86u, 0x847a62a7u}}\n  , {{0x2c081733u, 0xb9f6f047u, 0xc7332df9u, 0xce7c66b7u, 0x1bef3a19u, 0x3a1ffd91u, 0x051db82bu, 0x5f20a004u}}\n  , {{0x78dfc225u, 0x397d87e8u, 0x9258aafbu, 0xb0ae997au, 0xd7d3a627u, 0x0628a32du, 0x7e44b2a1u, 0x352bbcbfu}}\n  , {{0xd2905a9bu, 0xe541b58eu, 0xbecf1464u, 0x07dedf96u, 0x577abd7bu, 0x0c16a93bu, 0xc553f854u, 0xb1d7f29eu}}\n  , {{0x7ed7c765u, 0x9000e0a7u, 0x3c1f3815u, 0xaeca6f9fu, 0x03334dd5u, 0x56b7d69du, 0x85d4ce57u, 0x7a665ab0u}}\n  , {{0xbd06db38u, 0x62d73dd5u, 0x86eebef1u, 0x4da03fa8u, 0x3693ea45u, 0x6ca89a49u, 0xaa9fb74du, 0x08a8599du}}\n  , {{0x6f5c80b5u, 0x48497abdu, 0x0021959fu, 0x1e7606e2u, 0x83e6e733u, 0xb32928f4u, 0x1ee3017fu, 0xb6a6a8f0u}}\n  , {{0xc64061f8u, 0x13b20e04u, 0xf126e92cu, 0x284de8b4u, 0xbe3eb7a5u, 0x32b7578fu, 0x9a5f615fu, 0xc82fa3acu}}\n  , {{0x61c40db2u, 0x736a1f2cu, 0xa04eaa5fu, 0x6c99aa1fu, 0x9a732428u, 0x62d963ccu, 0xa6f23ca8u, 0x67e35d89u}}\n  , {{0x591ecd64u, 0x95b8457bu, 0x424b2068u, 0xa9ba4a7au, 0xb423667bu, 0x80331407u, 0xd495c111u, 0x909a1979u}}\n  , {{0x2f1f9101u, 0x30bb343bu, 0x53671b2cu, 0xd623b95eu, 0xf034bf93u, 0xba473eaeu, 0x70c001fdu, 0x47f57248u}}\n  , {{0x84e2e69du, 0x5f1609c2u, 0x356b3cb1u, 0x0c052276u, 0x9ac1985du, 0x66a3993fu, 0x23bcd574u, 0xbfdb33c3u}}\n  , {{0xca29e6f4u, 0xb89f869fu, 0x20392386u, 0xe3ca2bc5u, 0x7eb0468cu, 0x17f39441u, 0x6a44797cu, 0xa118224bu}}\n  , {{0x8c70f23fu, 0xbd648e3du, 0x820c22d7u, 0xfaba113au, 0xae6d6625u, 0xe92d9f00u, 0xb5442c17u, 0x2f2ce0dfu}}\n  , {{0x9e2d45f8u, 0x6f0bce71u, 0x2c9b25bbu, 0xe67792e4u, 0x5986178bu, 0xb4d241e1u, 0x42b63f98u, 0x8c133a2fu}}\n  , {{0x06fadaf1u, 0x9d6b44cbu, 0x87afaf2du, 0x58bfe1beu, 0x5a1cafb1u, 0x19bf0313u, 0x2395a67au, 0x287553fdu}}\n  , {{0x3feb8cb3u, 0xbc7d3238u, 0xa5db2b43u, 0xa0afb89fu, 0x47660580u, 0xb4f5e17au, 0x6b1f4ef3u, 0xd1c0bb99u}}\n  , {{0x28f2000fu, 0x7f878befu, 0xe1ab3167u, 0x082a32abu, 0x5da2b30du, 0xe3e049f3u, 0x335b2be2u, 0x89ebc172u}}\n  , {{0x1a9d7cd6u, 0xfd9cf159u, 0xd8ecb47eu, 0x74f8b22au, 0xe32ff663u, 0x6c38f85bu, 0x7e305932u, 0xc48a521au}}\n  , {{0x6327cafau, 0x7750f660u, 0xb0be35eau, 0xcd725011u, 0x9a61d94bu, 0xe0b93e24u, 0xc4b98d92u, 0x161f4b8du}}\n  , {{0x4b4b1b00u, 0x7d849c50u, 0xf37ed980u, 0x58a1bdbfu, 0x2c201ecfu, 0xddf66277u, 0x252470e5u, 0x90615a58u}}\n  , {{0x184b7b4au, 0x9f2c8001u, 0x2f6494c2u, 0x99ebca93u, 0x93a9bf75u, 0x187de481u, 0x01b3460eu, 0x594986e8u}}\n  , {{0xda98ab73u, 0x32ae887eu, 0x337ed116u, 0xb11065c8u, 0x4a17e7c8u, 0xa0f91481u, 0x4a8cbcbau, 0x99a25188u}}\n  , {{0xf910c893u, 0x775caafdu, 0x93747d15u, 0xa2205ed2u, 0x9972b702u, 0x8c376bf0u, 0xf21305dbu, 0x6fc8ab7cu}}\n  , {{0xd1efcc17u, 0x8558c3cau, 0x12e6c646u, 0xeef412dcu, 0x33ae886bu, 0x994e1ba5u, 0x6a7b4d24u, 0xc22bd303u}}\n  , {{0xce8e5d29u, 0x7bdb24bfu, 0x83d7832cu, 0x49b47ab5u, 0xa57552f0u, 0xc817bec2u, 0x21661502u, 0x7fe0f638u}}\n  , {{0x911fd813u, 0x96bd4782u, 0xe2a9e2dbu, 0xaa7ab5c5u, 0x172cdb49u, 0x4ec4d2f5u, 0x259d2c1au, 0xd1b1e83eu}}\n  , {{0xb3cb70b7u, 0x949a4792u, 0x9cd2753fu, 0xf6b68487u, 0xca6cd0b3u, 0x1a65cf4eu, 0xdf56c447u, 0x4c4e4227u}}\n  , {{0x86498119u, 0x58ce17d4u, 0xf0a32405u, 0xfed9ef3eu, 0x35f0df5bu, 0x8809dc4au, 0xa120e67eu, 0x3deb0842u}}\n  , {{0x62c04f9fu, 0x816c4bd1u, 0xea6ac04cu, 0xdc4600b8u, 0x3f7bcba3u, 0xfffcecceu, 0xa7679292u, 0xa53aef23u}}\n  , {{0x07bc00acu, 0xcae840c8u, 0x408a2c40u, 0xf608310au, 0x9171b4e2u, 0x223b7e6au, 0x71eb99d4u, 0x5072bfb1u}}\n  , {{0x026f105du, 0x623151d4u, 0x5586d9a5u, 0x0bbde830u, 0xbf8c487du, 0xf338083bu, 0xf639a777u, 0xfdc2eb1eu}}\n  , {{0x56939254u, 0x21e8c198u, 0xbddb71f8u, 0x9282da1du, 0x043f0272u, 0x92f8c5e4u, 0xafa5a733u, 0x9c6e8ef2u}}\n  , {{0x2cb8b721u, 0x491a2bbdu, 0x4ebbc5feu, 0xbdaecb46u, 0x5194c580u, 0xe9341942u, 0x1c93307du, 0x6da78311u}}\n  , {{0x74834eedu, 0x49e94e99u, 0xaa83043bu, 0x61dd1755u, 0x5b7af916u, 0xfd5d444du, 0xc369991bu, 0xe7cb9c50u}}\n  , {{0x9db79ffdu, 0x4486c177u, 0x59e8e5e9u, 0xda7ac2f9u, 0x0bb922e1u, 0xc9d3cce5u, 0xc949886bu, 0x393b3a23u}}\n  , {{0x9130caecu, 0x4b423f18u, 0x7e61830au, 0x1be27f02u, 0x85c8dffcu, 0xadb4203cu, 0x9042ff76u, 0x680d9543u}}\n  , {{0xdabccd0fu, 0x34950409u, 0x9ee227f6u, 0xf4865405u, 0x9402a46fu, 0x29afa893u, 0x81f23d91u, 0x525b62edu}}\n  , {{0xd9774b6eu, 0x64174d48u, 0x50df0d50u, 0xbb8e7b46u, 0x70017a1cu, 0x3dca99d8u, 0xa2c3ce42u, 0xcb8b5d33u}}\n  , {{0xa8e8a5bau, 0xdfb1fae7u, 0xc50342dfu, 0x7ef60084u, 0xb9b1e1d0u, 0xb424e72bu, 0x440c2572u, 0xf4ab40efu}}\n  , {{0x28bfd97cu, 0xa7a93bfeu, 0x1e66ca17u, 0x60bf4f82u, 0x91c2becau, 0x209181bbu, 0xee3b86c4u, 0xd4a5e21du}}\n  , {{0x44270abdu, 0x9e8f8af5u, 0x2435c2adu, 0x20c71e3bu, 0x744242c6u, 0xc5b1c529u, 0x2706d6f1u, 0x9129aeecu}}\n  , {{0x7cfc0331u, 0x0aa3e6c2u, 0x2eab8f15u, 0x0b590e4fu, 0x94b0ac31u, 0x3f964065u, 0x8d841245u, 0xddfaea03u}}\n  , {{0xc4b150a3u, 0x9f4d47c3u, 0x1f032ba4u, 0x5b4d225cu, 0x611493ddu, 0x41c80959u, 0x5b0c8414u, 0xdc40bfb2u}}\n  , {{0x47f29041u, 0xd9671966u, 0x2ed87b95u, 0xf1a6373bu, 0xee156b12u, 0x82c31f15u, 0x565eab23u, 0x89012f13u}}\n  , {{0xd64df74cu, 0xb4f8c0a2u, 0xac12c43fu, 0x08dc865eu, 0xfe43333bu, 0x069f896fu, 0x503dc328u, 0xe3e91b5au}}\n  , {{0xbae755b4u, 0x5e457cfcu, 0xd06e4ef0u, 0x9baa13c0u, 0xa19ad608u, 0xcfa2874fu, 0xe08679ecu, 0xd5577456u}}\n  , {{0x5946aaecu, 0x93249c62u, 0x4ebd6fbbu, 0x28df54fcu, 0x1b01954du, 0xbb2c3ceeu, 0x6c00471fu, 0x22a999bfu}}\n  , {{0x73b65849u, 0xe783acc3u, 0xc766b53eu, 0xc4b851b2u, 0xb80d5f11u, 0xed2228f3u, 0x0b4fe370u, 0x6bcf163au}}\n  , {{0x633f8ca7u, 0xb2924d50u, 0xb701ef5au, 0xd86df4adu, 0x8cf48f5eu, 0x46903a43u, 0x51ec8c38u, 0x288271d4u}}\n  , {{0x1593c5a1u, 0x12044a28u, 0xe057f893u, 0x1fef0a22u, 0x3f8cc57fu, 0xaa6cd14bu, 0xb4898df3u, 0xa1acc3beu}}\n  , {{0x97b0f607u, 0x640bdf95u, 0x176cf9dbu, 0xd802cfcbu, 0x1f80fa8du, 0x0f64746cu, 0x51f26a85u, 0x0748f57du}}\n  , {{0x99453d1fu, 0x55fa3326u, 0x63faccb9u, 0x05c3d1a7u, 0xacbaac0fu, 0x6a0d07a9u, 0xe653b602u, 0x66ff8c8eu}}\n  , {{0x50dafa99u, 0x9bef043au, 0xa18779dbu, 0x0b66a1bau, 0xd5c2cdeeu, 0xc5f6c915u, 0xdc9d91d2u, 0xbcfdb7b2u}}\n  , {{0x3d1a146cu, 0x0faca35au, 0xa3ce32dbu, 0x5c1838a0u, 0x07e1378eu, 0x9ae92bd7u, 0x3ae6f193u, 0x968403aau}}\n  , {{0x9f3577f3u, 0xf70a09ccu, 0xf845199cu, 0x752c9f01u, 0xff7a0760u, 0x4ac8d6abu, 0x16071074u, 0xf95e366fu}}\n  , {{0x21ac87bau, 0xedc2ffb8u, 0x525de77au, 0x45580a01u, 0xdc4703bbu, 0xfc7b832du, 0xd806a989u, 0xce467334u}}\n  , {{0x43eebf50u, 0x5f5a341au, 0x2d2145dau, 0x95337d81u, 0x11ec5a46u, 0x36b80734u, 0x1158c995u, 0xbb291b38u}}\n  , {{0xf80de696u, 0x93c9d7d1u, 0x0205dc3du, 0xe4d52138u, 0x525b548cu, 0xd2960d07u, 0x3a1dc5edu, 0x13df4ff6u}}\n  , {{0xcda15b5bu, 0xb8da7b0du, 0x2881e1e5u, 0xfaaf4796u, 0x9bf0f3ffu, 0x246a58c7u, 0x9ee8e88du, 0xde19f9b5u}}\n  , {{0xd647006au, 0x138f229bu, 0x54cf5891u, 0x4c4eaceeu, 0x4ad5521eu, 0x641adf44u, 0x5ae9e9b6u, 0x2de36b3fu}}\n  , {{0x579b656cu, 0x26f32bb4u, 0x3d314711u, 0xfb8e800cu, 0x0d3e5269u, 0x10cd983fu, 0xecdcb79fu, 0xb9825518u}}\n  , {{0x97b9b35au, 0x8f0009e9u, 0x4415aee7u, 0x0fe5e44au, 0x5158cb85u, 0x7afc0ce3u, 0xa61c8aadu, 0xbce307f6u}}\n  , {{0x7a5c0e10u, 0x4ceadd76u, 0x6a1e791fu, 0x39a166ebu, 0x811ea154u, 0x6c92ceedu, 0xa1601d6du, 0x8813c256u}}\n  , {{0x8ad81c44u, 0xe8064c20u, 0x04e11f02u, 0xd466d3d0u, 0x36253252u, 0xda759fefu, 0xe0eb2296u, 0x9c927e26u}}\n  , {{0x391275c4u, 0x29786f8eu, 0x97402e28u, 0xa7dda26eu, 0x0c5f5561u, 0x3a235411u, 0x45e58fbfu, 0x082b9661u}}\n  , {{0xa8424715u, 0x1cc3ebe3u, 0xc07208b9u, 0xb936a09du, 0x2ada1fd3u, 0xa81d3a7du, 0x8e3a6d23u, 0x1f5485c0u}}\n  , {{0x2a42095cu, 0x58bc6325u, 0x604e59bdu, 0x43054802u, 0xbf7bd71au, 0xd837d3bfu, 0x6d37da62u, 0x6458fa12u}}\n  , {{0x0c8309c0u, 0xca0f8df8u, 0x3f16a2aeu, 0x71c09750u, 0x160c402du, 0x170f24d2u, 0xc79545e3u, 0x285cbf1bu}}\n  , {{0x6ec57517u, 0x8c1018d0u, 0xd6c4f51fu, 0xb8e3ff5au, 0xc4f0831eu, 0x642fa9d7u, 0x7d39e19fu, 0x20426abfu}}\n  , {{0x1d553e53u, 0x5bdfb6cfu, 0x22b31f05u, 0x83c9ebe1u, 0xab636504u, 0xc05aa703u, 0x4fa3bc93u, 0x87e64ed3u}}\n  , {{0x437f4bffu, 0x872d10c9u, 0x6f7a7760u, 0x925c3754u, 0x9fdcfb1fu, 0x35c65249u, 0x7d6156e2u, 0x891587c0u}}\n  , {{0x8d5bec24u, 0x94cc41ecu, 0x7ce875d6u, 0x452bb540u, 0x64e74605u, 0x343ca4d7u, 0x7e2cdfeeu, 0xe88010ceu}}\n  , {{0x7f6b100au, 0x58dbc757u, 0x02a5c8c4u, 0x65b0d0b9u, 0x06c82edcu, 0x294355f0u, 0x9f943bbcu, 0x1e597447u}}\n  , {{0x0db209b9u, 0x0b78d2beu, 0x870df440u, 0x81e4bce4u, 0x01e0c2a2u, 0xc4f33c28u, 0xf246e49au, 0x6f66976au}}\n  , {{0x81b892efu, 0x24b78228u, 0x17691ff0u, 0x455f9207u, 0xf941fbcbu, 0x11c980e1u, 0x45c617b1u, 0x02178859u}}\n  , {{0xff91e758u, 0x48a55007u, 0x605458f9u, 0x68619833u, 0xafeeeae3u, 0x82540ebdu, 0xfc9d3f12u, 0x5e53a897u}}\n  , {{0xf224084du, 0x98efd35au, 0xda99ce75u, 0x99f27640u, 0x719efa11u, 0x69f15a45u, 0xa34861a1u, 0xa79d5ef3u}}\n  , {{0x624cf155u, 0x2af774f0u, 0xb8b71a81u, 0x629d8f33u, 0x240b6138u, 0x27030c75u, 0x61b15751u, 0xe8871eb6u}}\n  , {{0x6eee4475u, 0x5f014a5bu, 0xbc724336u, 0xf364403cu, 0x1f45b32bu, 0xc81ddc5eu, 0x836f51beu, 0xba92ef74u}}\n  , {{0x8ecb6a9eu, 0x4d20d935u, 0x2e2bab8bu, 0x67cae793u, 0x8533338du, 0xd43d05b4u, 0x48fecccdu, 0xdba4901au}}\n  , {{0x7ba358f9u, 0x03b0f67fu, 0x8dec7c4eu, 0xbea69a77u, 0x5c118944u, 0x928178eau, 0xaad0e2e0u, 0x2228a989u}}\n  , {{0xbcd86730u, 0xfb320141u, 0xd6d0bb5cu, 0x3c262042u, 0xe50cd398u, 0x3d934e15u, 0xfaac21d4u, 0xd3910232u}}\n  , {{0x5fbdde64u, 0x60ca1aa2u, 0xb6c01000u, 0xde6ef674u, 0xa192fb3bu, 0x1862a85fu, 0x08285c29u, 0x0d2acef6u}}\n  , {{0x5b613c33u, 0xeab49406u, 0x6a1aff5au, 0x71743c9bu, 0x0f49d921u, 0xb3a447c0u, 0x2be157dcu, 0xcb9d8ec1u}}\n  , {{0x97073c08u, 0xd57e8a2fu, 0x5397126fu, 0x17074a29u, 0x353528b5u, 0x65ad3b97u, 0x642784a9u, 0x6c734426u}}\n  , {{0xd2291db2u, 0xd501e9fbu, 0x4d6cefe1u, 0x8faa9bfcu, 0x78e3eb0au, 0x1b910da3u, 0xabb03144u, 0x2b772712u}}\n  , {{0x5babcd3au, 0xc364f6e7u, 0x1052de02u, 0x3f870903u, 0x7677d682u, 0x3884cae5u, 0x4d970746u, 0x8e9c8ca5u}}\n  , {{0xbbaa82a5u, 0xc665e47eu, 0x5659b399u, 0x741f89bdu, 0xe6526ac2u, 0x0b3db8feu, 0x52aa30cau, 0x2f698dadu}}\n  , {{0x3c292246u, 0x623a5860u, 0x642cfb41u, 0xf41f56d5u, 0x9e19b345u, 0x6befa319u, 0xb73797adu, 0x15538874u}}\n  , {{0xc3be2380u, 0xbb222cc0u, 0xe2a9965cu, 0x22da2a89u, 0x4e2cefc8u, 0x32e714feu, 0x860f3495u, 0xf04b5b99u}}\n  , {{0x996c3463u, 0x3e0e5f63u, 0x970730b7u, 0xc13a8a0au, 0xe65ac408u, 0x4882ab16u, 0x3b68e5ecu, 0xce616620u}}\n  , {{0x0d39ca65u, 0x451af6a7u, 0x4dc33900u, 0x4615bf50u, 0x92c783e0u, 0xf7be031bu, 0x13a69127u, 0x5796e260u}}\n  , {{0x45a63234u, 0xc81f6235u, 0x13ab2474u, 0x070682d7u, 0xf1a52234u, 0x6c080863u, 0x63a61fddu, 0xf8fcc539u}}\n  , {{0x7da0701eu, 0xbfdbb918u, 0x52219ed9u, 0x261d6f65u, 0x454a13e4u, 0x537ac788u, 0xaa9abfd3u, 0x4f42b60bu}}\n  , {{0x8855a91cu, 0x921f8fe2u, 0x630b5368u, 0x139a14d2u, 0xea0bc7d6u, 0xcf93e506u, 0xa3846410u, 0xd0a7468eu}}\n  , {{0x83ad6566u, 0x1de347c2u, 0x92266fcbu, 0x78bf6ad4u, 0xad27f915u, 0xbe50c53au, 0x119c5d28u, 0xa42cff20u}}\n  , {{0x851a3c3cu, 0xf89f7be6u, 0xd7c59fdfu, 0xa9052fd8u, 0x31670667u, 0x6155b367u, 0xbb7a0f7au, 0x4d854288u}}\n  , {{0x59621ebcu, 0x5a011db1u, 0x5e2ab89bu, 0xfaf6b4f9u, 0x828568a8u, 0xaf32ae94u, 0xff151df2u, 0xd417ba5eu}}\n  , {{0x5d3eefedu, 0x83c56c91u, 0xca413d0bu, 0x98dd1669u, 0xf9099fe5u, 0xee266e4au, 0x65f8c3d7u, 0xf8155d37u}}\n  , {{0xb419a583u, 0xd6dfe1abu, 0x72b7349au, 0xdb66489fu, 0x0a43caa7u, 0xceb259e4u, 0x4343cac5u, 0xb84cfe69u}}\n  , {{0x9d9d77ddu, 0x8717759cu, 0x959499b8u, 0x18b70b1eu, 0xa55bf8f4u, 0xa18941b8u, 0x7b82c31fu, 0xf2cf21dau}}\n  , {{0xafbad0d0u, 0xa3895ac7u, 0x469903e3u, 0x5449558du, 0x8842a578u, 0x68755aaau, 0x88702018u, 0x26fda7b7u}}\n  , {{0x815a828cu, 0x2d0cd41du, 0xa1ed61f2u, 0x2914df98u, 0x72e8d28bu, 0x98a0dee9u, 0x493706e7u, 0xb2700c78u}}\n  , {{0x53ff110fu, 0x1e8ac892u, 0xd3cbba91u, 0x987434cdu, 0x61f34407u, 0xee742f9fu, 0xb97cdd80u, 0x0dcfd719u}}\n  , {{0x8cce2a93u, 0xf1cd10acu, 0x004cf1bfu, 0x2bb67328u, 0xd455f4a2u, 0xcf85d7f1u, 0xaedcb905u, 0xa2cfb840u}}\n  , {{0x675dc32bu, 0xe9c55317u, 0xeb4da59eu, 0xb5833bc2u, 0x5bd8468eu, 0xf84bd69au, 0x312d160fu, 0x6c541b09u}}\n  , {{0xd02036a5u, 0xad7498e7u, 0xd2562389u, 0x1311da79u, 0x8c2790edu, 0xe75660f7u, 0xd9c25a42u, 0xcd81de59u}}\n  , {{0xa71a6371u, 0xacae3841u, 0x3aa6a748u, 0x4f143459u, 0xc7e3fc57u, 0x2164b2f0u, 0xbf0aad80u, 0x80ac3c46u}}\n  , {{0x0d8a20ebu, 0x4f02c90au, 0xae14abb1u, 0xfca46237u, 0xe02ce550u, 0x7b5f8f92u, 0xe4ffb942u, 0xf8ec1910u}}\n  , {{0x3a4d5afdu, 0xfc7e1438u, 0x92e105e2u, 0xc4724671u, 0xc076ea27u, 0xfee68c89u, 0x1e4607edu, 0x4801fa30u}}\n  , {{0x07fb0b10u, 0xe7dbb106u, 0x64e26a2fu, 0xd25ecb2du, 0xdfb17f78u, 0x01f1807au, 0xfa17d9f1u, 0xbef0cbbau}}\n  , {{0x6798e89cu, 0xbc3c9eebu, 0x33843251u, 0x901fd826u, 0x34ab8ea8u, 0xe0a10a58u, 0x8991998eu, 0x4bb781b5u}}\n  , {{0x559cea96u, 0x57cbceb5u, 0xa9ed0ebau, 0x4eefadacu, 0xec12e596u, 0xa4f25834u, 0x1a929036u, 0xbe058561u}}\n  , {{0x125e31f8u, 0x2eb6bd56u, 0xfbbcf45bu, 0xb9c7370fu, 0xd29d066cu, 0x27e11154u, 0xf5b5a2b0u, 0x909faae0u}}\n  , {{0xa738e749u, 0x3be6cde5u, 0x38fecc05u, 0x99419484u, 0x5369123cu, 0x73e2aab0u, 0x6a81eec8u, 0xfffea92du}}\n  , {{0x32e1b335u, 0x6ab69305u, 0x08520477u, 0xffca0098u, 0x62fd2e63u, 0xcf706d45u, 0x96c5e2d1u, 0xb83140cfu}}\n  , {{0xd0c746b7u, 0xb4e3af74u, 0xfb1557ccu, 0x40a60b38u, 0x112934c2u, 0xa8c0b0a0u, 0x2efc3194u, 0x45cda8f7u}}\n  , {{0x27997665u, 0x67db5937u, 0xcb66d8ebu, 0xbe2e4e07u, 0x393077d3u, 0x1f128668u, 0x4a68bcc1u, 0xce8e0041u}}\n  , {{0x19d64885u, 0x1c9f40aau, 0xf0a1cfe9u, 0x9d14a634u, 0x5956b543u, 0x982b6c13u, 0x8499d6e6u, 0x7bed2782u}}\n  , {{0x10272b2fu, 0x79b00972u, 0x35263c59u, 0x10f00216u, 0x7d0735bau, 0x652f3a98u, 0x7f45773au, 0x225ce8e6u}}\n  , {{0xf6ff5664u, 0xc0f7783du, 0x2fe858bcu, 0x4e5203bau, 0x1263c2edu, 0x06c81bb2u, 0xc2dbb7a4u, 0xd02cd35du}}\n  , {{0xe4829d2bu, 0xf98b3486u, 0x43a2eee7u, 0x8b5c2218u, 0xe180e73bu, 0x183ccca3u, 0xad96a88eu, 0x6ba8af4au}}\n  , {{0x3675668au, 0x3991f960u, 0xbbd4e887u, 0x10de87cfu, 0x544b554eu, 0x4a9895d0u, 0x4fe5e6c5u, 0x3527b39fu}}\n  , {{0x709c2eb2u, 0xfb759d30u, 0x12cdced6u, 0x8d33b266u, 0x86c1fbddu, 0xc6c3ddffu, 0x80429129u, 0x6d014bc5u}}\n  , {{0xccb5dedau, 0xe6888c9fu, 0xf5c63104u, 0x6891c3f1u, 0xa93f432eu, 0xb715dd7au, 0xe55a7a3cu, 0x67304423u}}\n  , {{0x00790e93u, 0xa9532f30u, 0x46de3e2au, 0x38b79242u, 0x7258614eu, 0x11f40dc2u, 0x0fdf33a8u, 0xb5d82625u}}\n  , {{0x5a8fd5edu, 0x42ea2ed6u, 0x388da92au, 0x2e574f66u, 0x3672eec8u, 0x453e50a5u, 0xde631cdau, 0xbf253394u}}\n  , {{0x75543666u, 0xa82c1c19u, 0xd914a943u, 0x0639a3c9u, 0xedd12fb3u, 0xd4bc83aeu, 0x00bf9b09u, 0x6ea321f6u}}\n  , {{0xe10eb310u, 0x0fa7be69u, 0x08cfeb8cu, 0x797fbe5au, 0x4b12f9d1u, 0xed857a7fu, 0x17adc968u, 0x84f723e2u}}\n  , {{0x4bc32595u, 0x0fb88e2au, 0x92860fa8u, 0x71238772u, 0x24fede8cu, 0x8231982bu, 0xd28156a1u, 0x657134e6u}}\n  , {{0xd39514b6u, 0xe75ed246u, 0xe0a572cdu, 0x1ca95222u, 0x2a7ce8c0u, 0x79cccc9du, 0x4842b1dbu, 0xc995a67au}}\n  , {{0x19640f96u, 0x448114ecu, 0xdc30139du, 0xcbdff79bu, 0x264a933cu, 0xc8c5a32fu, 0x9745de2du, 0xbdc10085u}}\n  , {{0xbea2163du, 0xd4861003u, 0x5da78be1u, 0xa7545006u, 0x981f2b5au, 0x91f2d1cdu, 0xade23398u, 0xde59cef5u}}\n  , {{0xfad705d3u, 0x86889cb6u, 0x60d0bc19u, 0x0dbd1c2cu, 0x582badfeu, 0x7565647du, 0x79d38681u, 0xccd9b9adu}}\n  , {{0xdfec881fu, 0x681227abu, 0xd922d952u, 0xa27c6fb8u, 0x2f6b3adeu, 0x1ec605aau, 0x5d3347a1u, 0x7e036865u}}\n  , {{0x4a225c47u, 0x38987e6eu, 0x23876ea9u, 0x03dcb053u, 0x1a50f3b9u, 0xd00c0272u, 0x5797c032u, 0xda753132u}}\n  , {{0xca0d5c3cu, 0x68e28ce8u, 0x8edd2a1bu, 0x9113bdb8u, 0xc64ce2f6u, 0x2420127cu, 0xc60b0fabu, 0x59632173u}}\n  , {{0xc8ed088bu, 0xb317143du, 0x4ecdb573u, 0x04fde044u, 0xa5db2ef6u, 0x112ecd16u, 0xbe002ec9u, 0xa368ce39u}}\n  , {{0xaf57849fu, 0xd42e8638u, 0xf990ac40u, 0xbf0b852eu, 0xf6e99bf1u, 0x307df888u, 0xf555eca0u, 0x47c46112u}}\n  , {{0x2af14e2cu, 0x9be86b3cu, 0xae1a2d7bu, 0x914deda1u, 0xc3aa0319u, 0x45d3f7feu, 0x983426fbu, 0xcc90ed6bu}}\n  , {{0x64b0f02fu, 0xab280716u, 0x803b2b44u, 0xefda680bu, 0x12b94f13u, 0xe8ac1f23u, 0xb775dae8u, 0xf0e7c3abu}}\n  , {{0x9c1989d9u, 0x7fc6ad53u, 0xd5807b12u, 0x6d9f22ebu, 0x8120c767u, 0x0c107b58u, 0x0088b630u, 0x5b1aff80u}}\n  , {{0xe1571617u, 0x46970d7cu, 0x4645e23bu, 0x903a537eu, 0xac56c358u, 0x63a81e08u, 0xfe420b78u, 0x1b12a8feu}}\n  , {{0x0ee369a9u, 0x97c8fb63u, 0x6b4762b5u, 0x4624bc82u, 0x932cde16u, 0xfb3fcdbdu, 0x19fe3c41u, 0x2ad6ed6bu}}\n  , {{0x83c36c89u, 0xdd96b088u, 0xb010995fu, 0x50d1f4aau, 0x25f2240du, 0x3ff7e691u, 0xe0c96800u, 0x493d34d9u}}\n  , {{0xeadedcaeu, 0x45ec7f03u, 0x47420869u, 0xe4073311u, 0x2fe75d42u, 0x14e64af7u, 0x7e5706feu, 0xb44fbb07u}}\n  , {{0xe19c92b2u, 0x3abc447eu, 0x89ba0cdau, 0xdd020377u, 0x522f42d2u, 0xa03cfee5u, 0xc5ccf7b6u, 0x2def4e34u}}\n  , {{0xc524fcbcu, 0x1fca61a8u, 0x788aedc0u, 0x151c7988u, 0xc9aef898u, 0xa7933be4u, 0x305490f1u, 0xf6b36a48u}}\n  , {{0x9ae6cd99u, 0x0e7dba7cu, 0x58377496u, 0xac228a91u, 0x23de5910u, 0x24189780u, 0x9b6c6d6cu, 0xc0cf3dd3u}}\n  , {{0x109a6c47u, 0xa79efb78u, 0x7c678ce0u, 0x76c5727du, 0xc408fecfu, 0x95858794u, 0x4e885c8au, 0x7f050e06u}}\n  , {{0x92bb2826u, 0xb52ab062u, 0x5e04cbcfu, 0xab35462au, 0xf7fbb1c8u, 0x2cb2c8e0u, 0x4a537755u, 0xfe9e57b3u}}\n  , {{0x6c2c48b8u, 0x52ac9e1fu, 0x13226c66u, 0x80099d96u, 0xd7e29b9au, 0x3abe558eu, 0xdbd659c1u, 0xd9b72c35u}}\n  , {{0x2fbae8e1u, 0x66edb0deu, 0x34f72e99u, 0xd748bb85u, 0xe8d30e01u, 0x28aa3d64u, 0xd9c420a6u, 0xcd1a82e2u}}\n  , {{0x93bed54eu, 0xc80f5a0bu, 0x4a94d31au, 0x2cedd559u, 0x865fecb1u, 0x8e5a6485u, 0x78891723u, 0x2e205115u}}\n  , {{0xcb4c3a4cu, 0x805bb36fu, 0xe35b1793u, 0x64c756bdu, 0x5275b49au, 0x82f1bfecu, 0x77784f53u, 0xc0bf962cu}} };\n\n/* word_type_root[0] contains the type root of the ONE type.\n * word_type_root[1] contains the type root of the TWO type.\n * word_type_root[2] contains the type root of the TWO^2 type.\n * word_type_root[3] contains the type root of the TWO^4 type.\n * ...\n * word_type_root[32] contains the type root of the TWO^(2^31) type.\n */\nstatic const sha256_midstate word_type_root[] =\n  { {{0x50b38cd7u, 0x6475ff89u, 0x29288bfcu, 0xd0d9df0eu, 0x4a241c0au, 0x5708572au, 0xd264192au, 0x4fe67beeu}}\n  , {{0x885a22deu, 0x3edb3f40u, 0xdb0609c2u, 0x4023303fu, 0xec6787beu, 0x4d4921e4u, 0x5ee9d983u, 0xacb5d89du}}\n  , {{0x5522ba1cu, 0x92894df2u, 0x5723cfebu, 0x5af259f4u, 0xc55a5cfcu, 0x8200d59bu, 0xad096499u, 0x7f9b2b04u}}\n  , {{0xfa28ba9fu, 0x0f07b4fau, 0xe4dd8623u, 0x614112ffu, 0x3bafabe2u, 0x9c415d2eu, 0x0c1ed3c4u, 0x135128e0u}}\n  , {{0xd343e4d5u, 0xfaa4cea4u, 0x4bb711efu, 0x4b1b96b7u, 0xe0fb26cfu, 0xa85a9604u, 0x39ba8458u, 0xc0b6c5c3u}}\n  , {{0x628c361fu, 0x09cb2e5bu, 0xaad9c6b7u, 0x26a9fa95u, 0xd1da6779u, 0x7ee24ccfu, 0x01410c97u, 0x93399500u}}\n  , {{0xb1a9f968u, 0x7833dc44u, 0xbc8f17d3u, 0xcbc255b7u, 0xaa499a78u, 0xfec85cc9u, 0x8a0c335cu, 0x86ed26e9u}}\n  , {{0xfd75bcd8u, 0xcb55a5e4u, 0x24e09288u, 0xac8eb429u, 0x42534ec1u, 0x099b72beu, 0xce0ea2c5u, 0x479bf3e7u}}\n  , {{0xe394d2a0u, 0x516d738du, 0x6e0459b9u, 0x1bb0dd47u, 0x1d0daa77u, 0x9671a531u, 0x3b62140eu, 0xc70a226eu}}\n  , {{0xe4c4728du, 0x876749beu, 0xbe4d6297u, 0xdfadd42cu, 0xe2684450u, 0x0d96c5e9u, 0x14615750u, 0x8eb9098fu}}\n  , {{0x1ae545b7u, 0xc3fd85feu, 0x816c70eau, 0x4c78b741u, 0x9d8be3c1u, 0xfb3f7223u, 0xfa7d8d50u, 0x3675518fu}}\n  , {{0x6a9c7240u, 0xe5d71d5au, 0x8330b3b3u, 0xb6650bc3u, 0x666c3fefu, 0x2e803ed8u, 0x64f12fcdu, 0x8feac1cau}}\n  , {{0x0a2a587au, 0xebc96b0eu, 0x3e260138u, 0x2eb32a9fu, 0x1e29c850u, 0x1cbdd80eu, 0x8705c0e7u, 0xd3f5b34fu}}\n  , {{0xb3edb6fdu, 0x838ec405u, 0x7b768c86u, 0xb0e8a96du, 0x1ce3f169u, 0x54314dcdu, 0x3dbf7285u, 0xeba563a9u}}\n  , {{0xd0474c0cu, 0x1e2c09d9u, 0xc5f05098u, 0x9357ce71u, 0xab5d904eu, 0x8e2e8287u, 0x4286c0c2u, 0x12de3e71u}}\n  , {{0x379246dcu, 0x866d370du, 0xbfc9704fu, 0xbc57cd7au, 0x6eb5ede7u, 0x97a00c4au, 0x72b3b4a5u, 0xd9f09fe1u}}\n  , {{0x8a59e83fu, 0x43e2a1f9u, 0x07d3a296u, 0x6753336au, 0x1da20d23u, 0xfe636328u, 0x58f94ec0u, 0x7d1913d2u}}\n  , {{0x0f519568u, 0x9f556d00u, 0xbe92fc2du, 0xc57bcbb1u, 0x25620ffcu, 0x00963c09u, 0x14b19615u, 0x1a77841cu}}\n  , {{0x6d2a4799u, 0xa16eb678u, 0x4e4966b8u, 0x1da627d3u, 0x5aa708fdu, 0x9725d604u, 0x777b143eu, 0x28d4acf0u}}\n  , {{0x2a075c50u, 0xca10e500u, 0x927786cau, 0x86a52bb7u, 0xe52ddb16u, 0x42e37745u, 0xfb441491u, 0x39b32d67u}}\n  , {{0xf567c81bu, 0x825dc900u, 0xe0bc0c59u, 0xcea6aa1fu, 0x1f34283fu, 0xcbeeff73u, 0x2db8e217u, 0x576c2255u}}\n  , {{0x0aee1039u, 0xd3c8af91u, 0x41bcb9fdu, 0xf3f8241eu, 0xf9fd4b85u, 0x853a79bau, 0xbcfb2ab4u, 0xdb8ef38cu}}\n  , {{0x30aae9b8u, 0xf2c6faf0u, 0x7a62072fu, 0x55b29698u, 0x5dd73bc1u, 0x0442c802u, 0x7932fff4u, 0x1f2a2d72u}}\n  , {{0xbc146cb5u, 0xae67e00au, 0x6d8e3fd0u, 0x56fb7a72u, 0x820484c6u, 0x1acf17feu, 0xccf130cbu, 0xa622d27fu}}\n  , {{0xa867bacfu, 0xf8d1c25cu, 0x9e824f1bu, 0x63a49c17u, 0x679bba8au, 0xd87699a0u, 0xcdf77defu, 0x0a1b7511u}}\n  , {{0xc128dc7eu, 0x8d794a7au, 0x48081495u, 0xa6eb2b2du, 0x3cb66bc0u, 0xe033273bu, 0xf9ddbc98u, 0x6c226892u}}\n  , {{0x199ffde4u, 0x7d2791a3u, 0x58f23ae5u, 0x082516c6u, 0x5e57f55au, 0xe66ddf44u, 0x65baab4bu, 0xfa3c3a5fu}}\n  , {{0x4038095du, 0xbb32e27eu, 0x6e316652u, 0x7bcedda8u, 0x4e8b21f6u, 0xd42f7e56u, 0xeaff2185u, 0x6ad204a2u}}\n  , {{0xc3a0a6f8u, 0x7e6c3f02u, 0xbf98051cu, 0xe45d6d69u, 0x55382478u, 0xf10fa06au, 0xdd5130e5u, 0x9917f8c7u}}\n  , {{0x7c25bf44u, 0x7a45ba13u, 0x23e8db8bu, 0x817887a8u, 0x858bee25u, 0x6e5ca352u, 0x8e79cfbcu, 0x2d419ce3u}}\n  , {{0x75a77a6cu, 0x7b6de91du, 0x23c1004du, 0x8eb0b35du, 0x9cdf6fa1u, 0xdfc7cabdu, 0x046692f1u, 0xa2431417u}}\n  , {{0x9fc24ab6u, 0x9970f866u, 0x6d7b1e52u, 0x5a3a8e79u, 0x439976e7u, 0x792bfe1au, 0x1b0d0d84u, 0xff038434u}}\n  , {{0x64251ab9u, 0x7077170eu, 0x19911576u, 0x5e9343e7u, 0x1b590e41u, 0x7888f2a8u, 0x364311d8u, 0x6540edfau}} };\n\n#endif\n"
  },
  {
    "path": "C/regression4.c",
    "content": "#include \"regression4.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     uWitness OneV : f 15 ++ [uComp (3*2^16) 1]\n *      where\n *       f 0 = [uIden, uTake 1, uIden, uDrop 1, uComp 3 1]\n *       f n = rec ++ rec ++ [uComp (3*2^n) 1]\n *        where\n *         rec = f (n-1)\n */\nconst unsigned char regression4[] = {\n  0xf0, 0x18, 0x00, 0x0b, 0xa0, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00,\n  0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00,\n  0x07, 0x4c, 0x00, 0x0e, 0xa8, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39,\n  0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03,\n  0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e,\n  0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07,\n  0x44, 0x00, 0x1d, 0x30, 0x00, 0x3a, 0xa0, 0x00, 0x3a, 0xe0, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c,\n  0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07,\n  0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75, 0x40, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80,\n  0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73,\n  0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07,\n  0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x01, 0xd5, 0x00, 0x01, 0xd7, 0x00, 0x00, 0xec, 0x80,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00,\n  0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01,\n  0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38,\n  0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x00,\n  0xea, 0x80, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00,\n  0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07,\n  0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3,\n  0x00, 0x03, 0xaa, 0x00, 0x03, 0xae, 0x00, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40,\n  0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70,\n  0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x07, 0x54, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00,\n  0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00,\n  0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00,\n  0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x00, 0x1d, 0x50, 0x00, 0x1d, 0x70, 0x00, 0x0e, 0xc8, 0x00, 0x03, 0xb6, 0x00,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00,\n  0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70,\n  0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x01,\n  0xd5, 0x00, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00,\n  0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e,\n  0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6,\n  0x00, 0x07, 0x54, 0x00, 0x07, 0x5c, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80,\n  0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07,\n  0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0,\n  0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x0e, 0xa8, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01,\n  0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00,\n  0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00,\n  0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x00, 0x3a, 0xa0, 0x00, 0x3a, 0xe0, 0x00, 0x1d, 0x90, 0x00, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00,\n  0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce,\n  0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03,\n  0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x00, 0x1d, 0x50, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40,\n  0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72,\n  0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a,\n  0x20, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75, 0x40,\n  0x00, 0x75, 0xc0, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39,\n  0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07,\n  0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00,\n  0x74, 0xc0, 0x00, 0xea, 0x80, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00,\n  0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74,\n  0x40, 0x01, 0xd3, 0x00, 0x03, 0xaa, 0x00, 0x03, 0xae, 0x00, 0x01, 0xd9, 0x00, 0x00, 0x76, 0xc0, 0x00, 0x0e, 0xe8, 0x00,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01,\n  0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07,\n  0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0,\n  0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x03,\n  0xaa, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00,\n  0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c,\n  0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c,\n  0x00, 0x0e, 0xa8, 0x00, 0x0e, 0xb8, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00,\n  0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e,\n  0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0,\n  0x03, 0xa2, 0x00, 0x0e, 0x98, 0x00, 0x1d, 0x50, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01,\n  0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00,\n  0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75, 0x40, 0x00, 0x75, 0xc0, 0x00, 0x3b, 0x20, 0x00, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00,\n  0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c,\n  0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07,\n  0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x00, 0x3a, 0xa0, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80,\n  0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74,\n  0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x00, 0xea, 0x80,\n  0x00, 0xeb, 0x80, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72,\n  0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e,\n  0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00,\n  0xe9, 0x80, 0x01, 0xd5, 0x00, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01,\n  0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8,\n  0x80, 0x03, 0xa6, 0x00, 0x07, 0x54, 0x00, 0x07, 0x5c, 0x00, 0x03, 0xb2, 0x00, 0x00, 0xed, 0x80, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01,\n  0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38,\n  0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e,\n  0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75, 0x40, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00,\n  0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8,\n  0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x01, 0xd5, 0x00,\n  0x01, 0xd7, 0x00, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c,\n  0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01,\n  0xd3, 0x00, 0x03, 0xaa, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1,\n  0x00, 0x07, 0x4c, 0x00, 0x0e, 0xa8, 0x00, 0x0e, 0xb8, 0x00, 0x07, 0x64, 0x00, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e,\n  0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01,\n  0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00,\n  0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x07, 0x54, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39,\n  0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d,\n  0x10, 0x00, 0x74, 0xc0, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x00, 0x1d, 0x50, 0x00, 0x1d, 0x70, 0x00,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c,\n  0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00,\n  0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72,\n  0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00,\n  0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x00, 0x3a,\n  0xa0, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03,\n  0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07,\n  0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0,\n  0x00, 0xea, 0x80, 0x00, 0xeb, 0x80, 0x00, 0x76, 0x40, 0x00, 0x1d, 0xb0, 0x00, 0x03, 0xba, 0x00, 0x00, 0x3b, 0xe0, 0x00,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e,\n  0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0,\n  0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x07,\n  0x54, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00,\n  0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39,\n  0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98,\n  0x00, 0x1d, 0x50, 0x00, 0x1d, 0x70, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00,\n  0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c,\n  0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80,\n  0x07, 0x44, 0x00, 0x1d, 0x30, 0x00, 0x3a, 0xa0, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07,\n  0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03,\n  0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03,\n  0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01,\n  0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x00, 0xea, 0x80, 0x00, 0xeb, 0x80, 0x00, 0x76, 0x40, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01,\n  0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38,\n  0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e,\n  0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75, 0x40, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00,\n  0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8,\n  0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x01, 0xd5, 0x00,\n  0x01, 0xd7, 0x00, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c,\n  0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01,\n  0xd3, 0x00, 0x03, 0xaa, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1,\n  0x00, 0x07, 0x4c, 0x00, 0x0e, 0xa8, 0x00, 0x0e, 0xb8, 0x00, 0x07, 0x64, 0x00, 0x01, 0xdb, 0x00, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03,\n  0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70,\n  0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c,\n  0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x00, 0xea, 0x80, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00,\n  0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1,\n  0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x03, 0xaa, 0x00,\n  0x03, 0xae, 0x00, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39,\n  0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03,\n  0xa6, 0x00, 0x07, 0x54, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07,\n  0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03,\n  0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28,\n  0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2,\n  0x00, 0x0e, 0x98, 0x00, 0x1d, 0x50, 0x00, 0x1d, 0x70, 0x00, 0x0e, 0xc8, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c,\n  0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03,\n  0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00,\n  0x3a, 0x60, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03,\n  0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x0e, 0xa8, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72,\n  0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a,\n  0x20, 0x00, 0xe9, 0x80, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x00, 0x3a, 0xa0, 0x00, 0x3a, 0xe0, 0x01,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39,\n  0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00,\n  0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00,\n  0x3a, 0x20, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75,\n  0x40, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e,\n  0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80,\n  0x01, 0xd5, 0x00, 0x01, 0xd7, 0x00, 0x00, 0xec, 0x80, 0x00, 0x3b, 0x60, 0x00, 0x07, 0x74, 0x00, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07,\n  0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0,\n  0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39,\n  0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03,\n  0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x01, 0xd5, 0x00, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00,\n  0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28,\n  0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2,\n  0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x07, 0x54, 0x00,\n  0x07, 0x5c, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80,\n  0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73,\n  0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07,\n  0x4c, 0x00, 0x0e, 0xa8, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e,\n  0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50,\n  0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44,\n  0x00, 0x1d, 0x30, 0x00, 0x3a, 0xa0, 0x00, 0x3a, 0xe0, 0x00, 0x1d, 0x90, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39,\n  0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07,\n  0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00,\n  0x74, 0xc0, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x00, 0x1d, 0x50, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74,\n  0x40, 0x01, 0xd3, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75, 0x40, 0x00, 0x75, 0xc0, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72,\n  0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00,\n  0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00,\n  0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x00, 0xea,\n  0x80, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c,\n  0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00,\n  0x03, 0xaa, 0x00, 0x03, 0xae, 0x00, 0x01, 0xd9, 0x00, 0x00, 0x76, 0xc0, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72,\n  0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e,\n  0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00,\n  0xe9, 0x80, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x00, 0x3a, 0xa0, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80,\n  0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca,\n  0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8,\n  0x80, 0x03, 0xa6, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x00, 0x74, 0xc0, 0x00, 0xea, 0x80, 0x00, 0xeb, 0x80, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00,\n  0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01,\n  0xca, 0x00, 0x39, 0xc0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00,\n  0xe8, 0x80, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c,\n  0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20, 0x00, 0xe9, 0x80, 0x01, 0xd5,\n  0x00, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03,\n  0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00, 0x1d, 0x10, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30,\n  0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x00, 0x1d, 0x30, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0,\n  0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39,\n  0xc0, 0x03, 0xa2, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x00, 0xe8, 0x80, 0x03, 0xa6, 0x00,\n  0x07, 0x54, 0x00, 0x07, 0x5c, 0x00, 0x03, 0xb2, 0x00, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80,\n  0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39,\n  0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00,\n  0x0e, 0x88, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20,\n  0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c,\n  0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8,\n  0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41,\n  0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07,\n  0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40,\n  0x07, 0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x03, 0xaa, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01,\n  0xc6, 0x00, 0x72, 0x80, 0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c,\n  0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03,\n  0x9c, 0x00, 0x3a, 0x20, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5,\n  0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60,\n  0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80,\n  0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x01, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29,\n  0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1,\n  0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32,\n  0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x07, 0x44, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71,\n  0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60,\n  0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00,\n  0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x07, 0x4c, 0x00, 0x0e, 0xa8, 0x00, 0x0e, 0xb8, 0x00, 0x41, 0x88, 0x38, 0x14,\n  0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38,\n  0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62,\n  0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31,\n  0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70,\n  0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00,\n  0xe3, 0x00, 0x39, 0x40, 0x07, 0x38, 0x00, 0x74, 0x40, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18,\n  0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x07, 0x18, 0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00,\n  0x39, 0x40, 0x07, 0x38, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a,\n  0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81,\n  0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72,\n  0x80, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x01, 0xce, 0x00,\n  0x1d, 0x10, 0x00, 0x74, 0xc0, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18,\n  0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c,\n  0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00,\n  0xe5, 0x01, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c,\n  0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03,\n  0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01,\n  0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a,\n  0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05,\n  0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38,\n  0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c,\n  0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08,\n  0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0,\n  0x38, 0x40, 0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x02, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e,\n  0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06,\n  0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40,\n  0x1c, 0x60, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06,\n  0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03,\n  0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83,\n  0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41,\n  0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20,\n  0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05,\n  0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38,\n  0xc0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80,\n  0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40,\n  0x6c, 0x03, 0x84, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02,\n  0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x0d, 0x80, 0x70, 0x80, 0x38, 0xc0, 0x0e, 0x50, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44,\n  0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81,\n  0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e,\n  0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82,\n  0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0,\n  0x0e, 0x10, 0x07, 0x18, 0x01, 0xca, 0x00, 0x39, 0xc0, 0x03, 0xa2, 0x00, 0x0e, 0x98, 0x00, 0x1d, 0x50, 0x01, 0x06, 0x20,\n  0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b,\n  0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x03, 0x94, 0x00, 0x73, 0x80, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60,\n  0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c,\n  0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36,\n  0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x03, 0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x01, 0xd1, 0x00, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19,\n  0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c,\n  0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07,\n  0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03,\n  0x8c, 0x00, 0xe5, 0x00, 0x1c, 0xe0, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10,\n  0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c,\n  0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e,\n  0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x80, 0x70, 0x82, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x07, 0x18,\n  0x01, 0xca, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x07,\n  0x38, 0x00, 0x74, 0x40, 0x01, 0xd3, 0x00, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02,\n  0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e, 0x30, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x04, 0x18, 0x83, 0x81,\n  0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x0e,\n  0x30, 0x03, 0x94, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0,\n  0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20,\n  0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x04, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91,\n  0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc2, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x60, 0x1c, 0x20, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0,\n  0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x03, 0x84, 0x01, 0xc6, 0x00, 0x72, 0x80,\n  0x0e, 0x70, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40,\n  0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10,\n  0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88,\n  0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c,\n  0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0,\n  0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06,\n  0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83,\n  0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07,\n  0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20,\n  0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90,\n  0x1b, 0x00, 0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83,\n  0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41,\n  0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07,\n  0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83,\n  0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x00, 0x3a, 0x20,\n  0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d,\n  0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06,\n  0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0,\n  0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x41, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x03, 0x8c, 0x00, 0xe5, 0x01, 0x06, 0x20, 0xe0,\n  0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70,\n  0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10,\n  0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00,\n  0xe1, 0x00, 0x71, 0x81, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70,\n  0x28, 0x19, 0x01, 0xb0, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38,\n  0x14, 0x0c, 0x80, 0xd8, 0x07, 0x08, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90,\n  0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x44, 0x18, 0x83, 0x81, 0x48,\n  0x31, 0x07, 0x02, 0x81, 0x90, 0x1b, 0x00, 0xe1, 0x00, 0x71, 0x80, 0x1c, 0xa0, 0x03, 0x9c, 0x02, 0x0c, 0x41, 0xc0, 0xa4,\n  0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50, 0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52,\n  0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88,\n  0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4,\n  0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2,\n  0x00, 0xe3, 0x02, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x83, 0x10, 0x70, 0x29, 0x06, 0x20, 0xe0, 0x50,\n  0x32, 0x03, 0x61, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x01, 0xb0, 0x0e, 0x10, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4,\n  0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x00, 0xe3, 0x00, 0x39, 0x40, 0x41, 0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28,\n  0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20, 0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14,\n  0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01, 0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62,\n  0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8, 0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31,\n  0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64, 0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x41,\n  0x88, 0x38, 0x14, 0x83, 0x10, 0x70, 0x28, 0x19, 0x10, 0x62, 0x0e, 0x05, 0x20, 0xc4, 0x1c, 0x0a, 0x06, 0x40, 0x6c, 0x20,\n  0xc4, 0x1c, 0x0a, 0x41, 0x88, 0x38, 0x14, 0x0c, 0x88, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x20, 0x36, 0x01,\n  0xc2, 0x08, 0x31, 0x07, 0x02, 0x90, 0x62, 0x0e, 0x05, 0x03, 0x22, 0x0c, 0x41, 0xc0, 0xa4, 0x18, 0x83, 0x81, 0x40, 0xc8,\n  0x0d, 0x84, 0x18, 0x83, 0x81, 0x48, 0x31, 0x07, 0x02, 0x81, 0x91, 0x06, 0x20, 0xe0, 0x52, 0x0c, 0x41, 0xc0, 0xa0, 0x64,\n  0x06, 0xc0, 0x38, 0x40, 0x1c, 0x60, 0x07, 0x28, 0x00, 0xe7, 0x00, 0x0e, 0x88, 0x00, 0x3a, 0x60, 0x00, 0x75, 0x40, 0x00,\n  0x75, 0xc0, 0x00, 0x3b, 0x20, 0x00, 0x0e, 0xd8, 0x00, 0x01, 0xdd, 0x00, 0x00, 0x1d, 0xf0, 0x00, 0x00, 0xf0, 0x08, 0x00,\n  0x00, 0x3c, 0x06, 0x00, 0x00\n};\n\nconst size_t sizeof_regression4 = sizeof(regression4);\n"
  },
  {
    "path": "C/regression4.h",
    "content": "#ifndef SIMPLICITY_REGRESSION4_H\n#define SIMPLICITY_REGRESSION4_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     uWitness OneV : f 15 ++ [uComp (3*2^16) 1]\n *      where\n *       f 0 = [uIden, uTake 1, uIden, uDrop 1, uComp 3 1]\n *       f n = rec ++ rec ++ [uComp (3*2^n) 1]\n *        where\n *         rec = f (n-1)\n */\nextern const unsigned char regression4[];\nextern const size_t sizeof_regression4;\n\n#endif\n"
  },
  {
    "path": "C/rsort.c",
    "content": "#include \"rsort.h\"\n\n#include <string.h>\n\n#include \"simplicity_assert.h\"\n#include \"simplicity_alloc.h\"\n\nstatic_assert(UCHAR_MAX < SIZE_MAX, \"UCHAR_MAX >= SIZE_MAX\");\n#define CHAR_COUNT ((size_t)1 << CHAR_BIT)\n\n/* Return the 'i'th char of the object representation of the midstate pointed to by a.\n *\n * In C, values are represented as 'unsigned char [sizeof(v)]' array.  However the exact\n * specification of how this representation works is implementation defined.\n *\n * For the 'uint32_t' values of 'sha256_midstate', the object representation of these values will differ\n * between big endian and little endian architectures.\n *\n * Precondition: NULL != a\n *               i < sizeof(a->s);\n */\nstatic unsigned char readIndex(const sha256_midstate* a, unsigned int i) {\n  return ((const unsigned char*)(a->s))[i];\n}\n\n/* Given an array of midstate pointers,\n * count the frequencies of the values of the 'j'th character of each midstate's internal representation.\n * Returns 'true' if the 'j'th character of every entry is the same, otherwise returns 'false'.\n *\n * The time complexity of 'freq' is O('len').\n *\n * Precondition: uint32_t result[CHAR_COUNT];\n *               for all 0 <= i < len, NULL != a[i];\n *               j < sizeof((*a)->s)\n */\nstatic bool freq(uint32_t* result, const sha256_midstate * const * a, uint_fast32_t len, unsigned int j) {\n  memset(result, 0, CHAR_COUNT * sizeof(uint32_t));\n\n  if (0 == len) return true;\n\n  for (size_t i = 0; i < len - 1; ++i) {\n    result[readIndex(a[i],j)]++;\n  }\n\n  /* Check the final iteration to see if the frequency is equal to 'len'. */\n  return len == ++result[readIndex(a[len-1],j)];\n}\n\n/* Given an array of bucket sizes, and an initial value 'bucketEdge[0]',\n * add subsequent bucket edges of the given bucket sizes.\n *\n * Precondition: uint32_t bucketEdge[CHAR_COUNT];\n *               const uint32_t sizes[CHAR_COUNT];\n */\nstatic void cumulative(uint32_t* restrict bucketEdge, const uint32_t* restrict sizes) {\n  uint32_t accumulator = bucketEdge[0] + sizes[0];\n  for (unsigned int i = 1; i < CHAR_COUNT; ++i) {\n    bucketEdge[i] = accumulator;\n    accumulator += sizes[i];\n  }\n}\n\n/* Exchange two pointers.\n * (a == b is acceptable.)\n *\n * Precondition: NULL != a;\n *               NULL != b;\n */\nstatic void swap(const sha256_midstate** a, const sha256_midstate** b) {\n  const sha256_midstate* tmp = *a;\n  *a = *b;\n  *b = tmp;\n}\n\n/* Sort the subarray a[begin:end) by their ix-th character,\n * where begin = bucketEdge[0] and end = bucketEdge[UMAX_CHAR] + bucketSize[UMAX_CHAR].\n *\n * We expect that the ix-length prefix of every entry in a[being:end) to be identical\n * so that the result is that the a[begin:end) subarray ends up sorted by their first 'ix + 1' characters.\n *\n * Precondition: For all begin <= i < end, NULL != a[i];\n *               for all i < CHAR_COUNT, bucketSize[i] is the number of of entries in the subentries in a[begin:end) whose ix-th character is 'i'.\n *               for all i < UMAX_CHAR, bucketEdge[i] + bucketSize[i] = bucketEdge[i+1];\n *               ix < sizeof((*a)->s);\n * Postcondition: The contents of bucketSize is not preserved!\n */\nstatic void sort_buckets(const sha256_midstate** a, uint32_t* restrict bucketSize, const uint32_t* restrict bucketEdge, unsigned int ix) {\n  /* The implementation works by finding the first non-empty bucket and then swapping the first element of that bucket into its position\n     at the far end of the bucket where it belongs.\n\n     After moving the element into that position the size of the target bucket is decreased by one,\n     and thus the next element that will be swapped into that bucket will be placed behind it.\n\n     This process continues until the first element of the first non-empty bucket gets swapped with itself\n     and its own bucket is decremented from size 1 to size 0.\n\n     At that point we search again for the next non-empty bucket and repeat this process until there are no more non-empty buckets.\n   */\n  for (unsigned int i = 0; i < CHAR_COUNT; ++i) {\n    size_t start = bucketEdge[i];\n    while (bucketSize[i]) {\n      /* Each time through this while loop some bucketSize is decremented.\n         Therefore this body is executed 'sum(i < CHAR_COUNT, bucketSize[i]) = end - begin' many times.\n       */\n      size_t bucket = readIndex(a[start], ix);\n      simplicity_assert(bucketSize[bucket]);\n      bucketSize[bucket]--;\n      swap(a + start, a + bucketEdge[bucket] + bucketSize[bucket]);\n    }\n  }\n}\n\n/* Attempts to (partially) sort an array of pointers to 'sha256_midstate's in place in memcmp order.\n * If NULL == hasDuplicates then sorting is always run to completion.\n * Otherwise, if NULL != hasDuplicates and if duplicate entries are found, the sorting is aborted and\n * *hasDuplicates is set to one of pointers of a duplicate entry.\n * If NULL != hasDuplicates and no duplicate entries are found, then *hasDuplicates is set to NULL.\n *\n * The time complexity of rsort is O('len').\n *\n * Precondition: For all 0 <= i < len, NULL != a[i];\n *               uint32_t stack[(CHAR_COUNT - 1)*(sizeof(*a)->s) + 1];\n */\nstatic void rsort_ex(const sha256_midstate** a, uint_fast32_t len, const sha256_midstate** hasDuplicates, uint32_t* stack) {\n  unsigned int depth = 0;\n  size_t bucketCount[sizeof((*a)->s) + 1];\n  size_t totalBucketCount = 1;\n\n  static_assert(sizeof((*a)->s) <= UINT_MAX, \"UINT_MAX too small to hold depth.\");\n  stack[0]=0;\n  bucketCount[depth] = 1;\n\n  /* This implementation contains a 'stack' of 'totalBucketCount' many subarrays (called buckets)\n     that have been partially sorted up to various prefix length.\n\n     The buckets are disjoint and cover the entire array from 0 up to len.\n     As sorting proceeds, the end of the array will be sorted first.\n     We will decrease len as we go as we find out that items at the end of the array are in their proper, sorted position.\n\n     The 'i'th bucket is the subarray a[stack[i]:stack[i+1]),\n     except for the last bucket which is the subarray a[stack[totalBucketCount-1]:len).\n\n     The depth to which various buckets are sorted increases the further down the stack you go.\n     The 'bucketCount' stores how many buckets are sorted to various depths.\n\n     * for all i <= depth, the subarray a[sum(j < i, bucketCount[i]):end) have their first i characters sorted.\n     * for all i <= depth, the (sum(j < i, bucketCount[i]))th and later buckets have all the first i characters of their entries identical.\n\n     So all buckets are sorted up to a prefix length of 0 many characters.\n     Then, if 1 <= depth, all bucket except for the first bucketCount[0]-many buckets are sorted by their 1 character prefix\n     And then, if 2 <= depth, all bucket except for the first (bucketCount[0] + bucket[1])-many buckets are sorted by their 2 character prefix\n     And so on.\n\n     It is always the case that 'totalBucketCount = sum(i <= depth, bucketCount[i])',\n     and thus the last bucket in the stack is located at stack[totalBucketCount-1].\n     'totalBucketCount' and 'bucketCount' items are always increased and decreased in tandum.\n\n     The loop is initialized with a 'totalBucketCount' of 1 and this one bucket contains the whole array a[0:len).\n     'depth' is initialized to 0, and all the entries are trivialy sorted by the first 0-many characters.\n\n     As we go through the loop, the last bucket is \"popped\" off the stack and processed, which can go one of two ways.\n\n     If the last bucket is size 2 or greater, we proceed to sort it by its 'depth' character and partition the bucket into 256 sub-buckets\n     which are then pushed onto the stack (notice this causes a net increase of the stack size by 255 items, because one was popped off).\n\n     If ever the depth is beyond the size of the data being sorted,\n     we can immediately halt as we have found 2 or more item that are identical.\n\n     Note: there is an added optimization where by if there is only one non-empty bucket found when attempting to sort,\n     i.e. it happens that every bucket item already has identical 'depth' characters,\n     we skip the subdivision and move onto the next depth immediately.\n     (This is equivalent to pushing the one non-empty bucket onto the stack and immediately popping it back off.)\n\n     If the last bucket is of size 0 or 1, it must be already be sorted.\n     Since this bucket is at the end of the array we decrease 'len'.\n   */\n  while(totalBucketCount) {\n    /* Find the correct \"depth\" of the last bucket. */\n    while(0 == bucketCount[depth]) {\n      simplicity_assert(depth);\n      depth--;\n    }\n\n    /* \"pop\" last bucket off the stack. */\n    bucketCount[depth]--; totalBucketCount--;\n\n    if (2 <= len - stack[totalBucketCount]) {\n      uint32_t bucketSize[CHAR_COUNT];\n      uint32_t* bucketEdge = stack + totalBucketCount;\n      uint32_t begin = bucketEdge[0];\n\n      /* Set bucketSize[i] to the count of the number of items in the array whose 'depth' character is 'i'.\n         The time complexity of 'freq' is O('len - begin').\n         WARNING: the 'freq' function modifies the contents of 'bucketSize' but is only executed when depth < sizeof((*a)->s).\n       */\n      while (depth < sizeof((*a)->s) && freq(bucketSize, a + begin, len - begin, depth)) {\n        /* Optimize the case where there is only one bucket. i.e. when the 'depth' character of the interval [begin, len) are all identical. */\n        depth++;\n        bucketCount[depth] = 0;\n      };\n\n      if (depth < sizeof((*a)->s)) {\n        /* Using bucketSize, compute all then next set of bucket edges based on\n           where items will end up when they are sorted by their 'depth' character.\n         */\n        cumulative(bucketEdge, bucketSize);\n        simplicity_assert(len == bucketEdge[UCHAR_MAX] + bucketSize[UCHAR_MAX]);\n\n        /* Sort this bucket by their depth character, placing them into their proper buckets based on their bucketEdges. */\n        sort_buckets(a, bucketSize, bucketEdge, depth);\n\n        depth++; bucketCount[depth] = CHAR_COUNT; totalBucketCount += CHAR_COUNT;\n        continue;\n      }\n      if (hasDuplicates) {\n        /* Early return if we are searching for duplicates and have found a bucket of size 2 or more\n           whose \"prefix\" agree up to then entire length of the hash value, and hence are all identical.\n         */\n        *hasDuplicates = a[begin];\n        return;\n      }\n    }\n    /* len - stack[totalBucketCount] < 2 || sizeof((*a)->s) == depth */\n\n    /* When the last bucket size is 0 or 1, or when the depth exceeds sizeof((*a)->s), there is no sorting to do within the bucket.\n       It is already sorted, and since it is at the end we can decrease len.\n    */\n    len = stack[totalBucketCount];\n  }\n  simplicity_assert(0 == len);\n\n  if (hasDuplicates) *hasDuplicates = NULL;\n}\n\n/* Sorts an array of pointers to 'sha256_midstate's in place in memcmp order.\n * If malloc fails, returns false.\n * Otherwise, returns true.\n *\n * The time complexity of rsort is O('len').\n *\n * We are sorting in memcmp order, which is the lexicographical order of the object representation, i.e. the order that one\n * gets when casting 'sha256_midstate' to a 'unsigned char[]'. This representation is implementation defined, and will differ\n * on big endian and little endian architectures.\n *\n * It is critical that the details of this order remain unobservable from the consensus rules.\n *\n * Precondition: For all 0 <= i < len, NULL != a[i];\n */\nbool simplicity_rsort(const sha256_midstate** a, uint_fast32_t len) {\n  uint32_t *stack = simplicity_malloc(((CHAR_COUNT - 1)*(sizeof((*a)->s)) + 1) * sizeof(uint32_t));\n  if (!stack) return false;\n  rsort_ex(a, len, NULL, stack);\n  simplicity_free(stack);\n  return true;\n}\n\n/* Searches for duplicates in an array of 'sha256_midstate's.\n * If malloc fails, returns -1.\n * If no duplicates are found, returns 0.\n * If duplicates are found, returns a positive value.\n *\n * Precondition: const sha256_midstate a[len];\n *               len <= DAG_LEN_MAX;\n */\nint simplicity_hasDuplicates(const sha256_midstate* a, uint_fast32_t len) {\n  if (len < 2) return 0;\n  static_assert(sizeof(a->s) * CHAR_BIT == 256, \"sha256_midstate.s has unnamed padding.\");\n  static_assert(DAG_LEN_MAX <= UINT32_MAX, \"DAG_LEN_MAX does not fit in uint32_t.\");\n  static_assert(DAG_LEN_MAX <= SIZE_MAX / sizeof(const sha256_midstate*), \"perm array too large.\");\n  simplicity_assert((size_t)len <= SIZE_MAX / sizeof(const sha256_midstate*));\n  const sha256_midstate **perm = simplicity_malloc(len * sizeof(const sha256_midstate*));\n  uint32_t *stack = simplicity_malloc(((CHAR_COUNT - 1)*(sizeof((*perm)->s)) + 1) * sizeof(uint32_t));\n  int result = perm && stack ? 0 : -1;\n\n  if (0 <= result) {\n    for (uint_fast32_t i = 0; i < len; ++i) {\n      perm[i] = a + i;\n    }\n\n    const sha256_midstate *duplicate;\n    rsort_ex(perm, len, &duplicate, stack);\n    result = NULL != duplicate;\n  }\n\n  simplicity_free(perm);\n  simplicity_free(stack);\n  return result;\n}\n"
  },
  {
    "path": "C/rsort.h",
    "content": "#ifndef SIMPLICITY_RSORT_H\n#define SIMPLICITY_RSORT_H\n\n#include <limits.h>\n#include <stdbool.h>\n#include <stdint.h>\n\n#include \"limitations.h\"\n#include \"sha256.h\"\n\n/* Sorts an array of pointers to 'sha256_midstate's in place in memcmp order.\n * If malloc fails, returns false.\n * Otherwise, returns true.\n *\n * The time complexity of rsort is O('len').\n *\n * We are sorting in memcmp order, which is the lexicographical order of the object representation, i.e. the order that one\n * gets when casting 'sha256_midstate' to a 'unsigned char[]'. This representation is implementation defined, and will differ\n * on big endian and little endian architectures.\n *\n * It is critical that the details of this order remain unobservable from the consensus rules.\n *\n * Precondition: For all 0 <= i < len, NULL != a[i];\n */\nbool simplicity_rsort(const sha256_midstate** a, uint_fast32_t len);\n\n/* Searches for duplicates in an array of 'sha256_midstate's.\n * If malloc fails, returns -1.\n * If no duplicates are found, returns 0.\n * If duplicates are found, returns a positive value.\n *\n * Precondition: const sha256_midstate a[len];\n *               len <= DAG_LEN_MAX;\n */\nint simplicity_hasDuplicates(const sha256_midstate* a, uint_fast32_t len);\n\n#endif\n"
  },
  {
    "path": "C/schnorr0.c",
    "content": "#include \"schnorr0.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0xF9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9) &&&\n *      zero word256) &&&\n *      witness (toWord512 0xE907831F80848D1069A5371B402410364BDF1C5F8307B0084C55F1CE2DCA821525F66A4A85EA8B71E482A74F382D2CE5EBEEE8FDB2172F477DF4900D310536C0) >>>\n *     Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\n * with jets.\n */\nconst unsigned char schnorr0[] = {\n  0xc6, 0xd5, 0xf2, 0x61, 0x14, 0x03, 0x24, 0xb1, 0x86, 0x20, 0x92, 0x68, 0x9f, 0x0b, 0xf1, 0x3a, 0xa4, 0x53, 0x6a, 0x63,\n  0x90, 0x8b, 0x06, 0xdf, 0x33, 0x61, 0x0c, 0x03, 0xe2, 0x27, 0x79, 0xc0, 0x6d, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x8d, 0x8c, 0x04, 0x00\n};\n\nconst size_t sizeof_schnorr0 = sizeof(schnorr0);\nconst unsigned char schnorr0_witness[] = {\n  0xe9, 0x07, 0x83, 0x1f, 0x80, 0x84, 0x8d, 0x10, 0x69, 0xa5, 0x37, 0x1b, 0x40, 0x24, 0x10, 0x36, 0x4b, 0xdf, 0x1c, 0x5f,\n  0x83, 0x07, 0xb0, 0x08, 0x4c, 0x55, 0xf1, 0xce, 0x2d, 0xca, 0x82, 0x15, 0x25, 0xf6, 0x6a, 0x4a, 0x85, 0xea, 0x8b, 0x71,\n  0xe4, 0x82, 0xa7, 0x4f, 0x38, 0x2d, 0x2c, 0xe5, 0xeb, 0xee, 0xe8, 0xfd, 0xb2, 0x17, 0x2f, 0x47, 0x7d, 0xf4, 0x90, 0x0d,\n  0x31, 0x05, 0x36, 0xc0\n};\n\nconst size_t sizeof_schnorr0_witness = sizeof(schnorr0_witness);\n\n/* The commitment Merkle root of the above schnorr0 Simplicity expression. */\nconst uint32_t schnorr0_cmr[] = {\n  0x8a9e9767u, 0x6b24be77u, 0x97d9ee0bu, 0xf32dd76bu, 0xcd78028eu, 0x973025f7u, 0x85eae8dcu, 0x91c8a0dau\n};\n\n/* The identity hash of the root of the above schnorr0 Simplicity expression. */\nconst uint32_t schnorr0_ihr[] = {\n  0xad7c38b1u, 0x6b912964u, 0x6dc89b52u, 0xcff144deu, 0x94a80e38u, 0x3c4983b5u, 0x3de65e35u, 0x75abcf38u\n};\n\n/* The annotated Merkle root of the above schnorr0 Simplicity expression. */\nconst uint32_t schnorr0_amr[] = {\n  0xec97c877u, 0x4cb6bfb3u, 0x81fdbbccu, 0x8d964380u, 0xfb3a3b45u, 0x77932262u, 0x4490d623u, 0x1ae777a4u\n};\n\n/* The cost of the above schnorr0 Simplicity expression in milli weight units. */\nconst ubounded schnorr0_cost = 51635;\n"
  },
  {
    "path": "C/schnorr0.h",
    "content": "#ifndef SIMPLICITY_SCHNORR0_H\n#define SIMPLICITY_SCHNORR0_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0xF9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9) &&&\n *      zero word256) &&&\n *      witness (toWord512 0xE907831F80848D1069A5371B402410364BDF1C5F8307B0084C55F1CE2DCA821525F66A4A85EA8B71E482A74F382D2CE5EBEEE8FDB2172F477DF4900D310536C0) >>>\n *     Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\n * with jets.\n */\nextern const unsigned char schnorr0[];\nextern const size_t sizeof_schnorr0;\nextern const unsigned char schnorr0_witness[];\nextern const size_t sizeof_schnorr0_witness;\n\n/* The commitment Merkle root of the above schnorr0 Simplicity expression. */\nextern const uint32_t schnorr0_cmr[];\n\n/* The identity hash of the root of the above schnorr0 Simplicity expression. */\nextern const uint32_t schnorr0_ihr[];\n\n/* The annotated Merkle root of the above schnorr0 Simplicity expression. */\nextern const uint32_t schnorr0_amr[];\n\n/* The cost of the above schnorr0 Simplicity expression in milli weight units. */\nextern const ubounded schnorr0_cost;\n\n#endif\n"
  },
  {
    "path": "C/schnorr6.c",
    "content": "#include \"schnorr6.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659) &&&\n *      scribe (toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C)) &&&\n *      witness (toWord512 0xFFF97BD5755EEEA420453A14355235D382F6472F8568A18B2F057A14602975563CC27944640AC607CD107AE10923D9EF7A73C643E166BE5EBEAFA34B1AC553E2) >>>\n *     Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\n * with jets.\n */\nconst unsigned char schnorr6[] = {\n  0xc6, 0xd5, 0xbf, 0xe3, 0xae, 0xfe, 0x54, 0xce, 0x38, 0xbe, 0x6c, 0x30, 0x6e, 0x4d, 0xb6, 0x46, 0x83, 0x7c, 0xb1, 0xfd,\n  0x5c, 0x3b, 0x45, 0xbd, 0x9d, 0xb0, 0x86, 0x48, 0x1e, 0xf6, 0xa0, 0x57, 0x4c, 0xb2, 0xbc, 0x5a, 0xb1, 0xb1, 0x67, 0x79,\n  0xbe, 0x35, 0x75, 0xbd, 0x8f, 0x05, 0x20, 0xa9, 0xf2, 0x1b, 0xb5, 0x30, 0x0b, 0x55, 0x6a, 0xd8, 0xee, 0x66, 0x60, 0x49,\n  0x73, 0xa1, 0x4a, 0x11, 0x6e, 0xb8, 0xe2, 0x8d, 0x8c, 0x04, 0x00\n};\n\nconst size_t sizeof_schnorr6 = sizeof(schnorr6);\nconst unsigned char schnorr6_witness[] = {\n  0xff, 0xf9, 0x7b, 0xd5, 0x75, 0x5e, 0xee, 0xa4, 0x20, 0x45, 0x3a, 0x14, 0x35, 0x52, 0x35, 0xd3, 0x82, 0xf6, 0x47, 0x2f,\n  0x85, 0x68, 0xa1, 0x8b, 0x2f, 0x05, 0x7a, 0x14, 0x60, 0x29, 0x75, 0x56, 0x3c, 0xc2, 0x79, 0x44, 0x64, 0x0a, 0xc6, 0x07,\n  0xcd, 0x10, 0x7a, 0xe1, 0x09, 0x23, 0xd9, 0xef, 0x7a, 0x73, 0xc6, 0x43, 0xe1, 0x66, 0xbe, 0x5e, 0xbe, 0xaf, 0xa3, 0x4b,\n  0x1a, 0xc5, 0x53, 0xe2\n};\n\nconst size_t sizeof_schnorr6_witness = sizeof(schnorr6_witness);\n\n/* The commitment Merkle root of the above schnorr6 Simplicity expression. */\nconst uint32_t schnorr6_cmr[] = {\n  0x83b6b5bcu, 0xc9bdc956u, 0xaf326376u, 0xf201aa7au, 0x2e65bb9eu, 0xedca6a06u, 0x65976452u, 0x5203cf68u\n};\n\n/* The identity hash of the root of the above schnorr6 Simplicity expression. */\nconst uint32_t schnorr6_ihr[] = {\n  0x53acece2u, 0xa5e61e36u, 0xd6c57f92u, 0x4cff9c45u, 0x0a283badu, 0x853aab59u, 0xebdf384du, 0x26264fefu\n};\n\n/* The annotated Merkle root of the above schnorr6 Simplicity expression. */\nconst uint32_t schnorr6_amr[] = {\n  0x76440feau, 0x109aaf4cu, 0xd2e62eeeu, 0xd46f168cu, 0xf848b90eu, 0x9f11cb54u, 0x445b7d45u, 0x5e20a18eu\n};\n\n/* The cost of the above schnorr6 Simplicity expression in milli weight units. */\nconst ubounded schnorr6_cost = 51635;\n"
  },
  {
    "path": "C/schnorr6.h",
    "content": "#ifndef SIMPLICITY_SCHNORR6_H\n#define SIMPLICITY_SCHNORR6_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     (scribe (toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659) &&&\n *      scribe (toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C)) &&&\n *      witness (toWord512 0xFFF97BD5755EEEA420453A14355235D382F6472F8568A18B2F057A14602975563CC27944640AC607CD107AE10923D9EF7A73C643E166BE5EBEAFA34B1AC553E2) >>>\n *     Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\n * with jets.\n */\nextern const unsigned char schnorr6[];\nextern const size_t sizeof_schnorr6;\nextern const unsigned char schnorr6_witness[];\nextern const size_t sizeof_schnorr6_witness;\n\n/* The commitment Merkle root of the above schnorr6 Simplicity expression. */\nextern const uint32_t schnorr6_cmr[];\n\n/* The identity hash of the root of the above schnorr6 Simplicity expression. */\nextern const uint32_t schnorr6_ihr[];\n\n/* The annotated Merkle root of the above schnorr6 Simplicity expression. */\nextern const uint32_t schnorr6_amr[];\n\n/* The cost of the above schnorr6 Simplicity expression in milli weight units. */\nextern const ubounded schnorr6_cost;\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/README.md",
    "content": "This directory contains a modified copy of the libsecp256k1 at `bdf39000b9c6a0818e7149ccb500873d079e6e85` from <https://github.com/bitcoin-core/secp256k1/tree/v0.3.0>.\nIn general, the files in this directory should be compared with the corresponding files in the `src` directory from libsecp256k1.\nThere are some exceptions however:\n\n* `precompute_ecmult.h` should be compared with `src/precompute_ecmult.c`\n* `secp256k1.h` should be compared with `include/secp256k1.h`.\n* `secp256k1_impl.h` should be compared with `src/secp256k1.c`.\n* `extrakeys.h` should be compared with `include/secp256k1_extrakeys.h`.\n* `extrakeys_impl.h` should be compared with `src/modules/extrakeys/main_impl.h`.\n* `schnorrsig.h` should be compared with `include/secp256k1_schnorrsig.h`.\n* `schnorrsig_impl.h` should be compared with `src/modules/schnorrsig/main_impl.h`.\n* `generator.h` should be compared with `include/secp256k1_generator.h` from <https://github.com/BlockstreamResearch/secp256k1-zkp/tree/d47e4d40ca487bb573e895723bd4b0659ae8eee5>.\n* `generator_impl.h` should be compared with `src/modules/generator/main_impl.h` from <https://github.com/BlockstreamResearch/secp256k1-zkp/tree/d47e4d40ca487bb573e895723bd4b0659ae8eee5>; however see `shallue_van_de_woestijne` below.\n\nOur use of libsecp256k1 for various jets requires access to the internal functions that are not exposed by their API, so we cannot use libsecp256k1's normal interface.\nFurthermore, because Simplicity has no abstract data types, the specific details of the representation of field and group elements computed by jetted functions ends up being consensus critical.\nTherefore, even if libsecp256k1's interface exposed the functionality we needed, we still wouldn't be able perform libsecp256k1 version upgrades because different versions of libsecp256k1 do not guarantee that their functions won't change the representation of computed field and group elements.\nEven libsecp256k1's configuration options, including `ECMULT_WINDOW_SIZE`, all can affect the representation of the computed group elements.\nTherefore we need to fix these options to specific values.\n\nSimplicity computations are on public data and therefore we do not jet functions that manipulate private or secret data.\nIn particular, we only need to jet variable-time algorithms when there is a choice of variable-time or constant-time algorithms.\n\nIn incorporating the libsecp256k1 library into the Simplicity library, there is a tension between making minimal changes to the library versus removing configuration options and other code that, if they were activated, could cause consensus incompatible changes in functionality.\nBecause we will not be able to easily migrate to newer versions of libsecp256k1 anyways, we have taken a heavy-handed approach to trimming unused configuration options, dead code, functions specific to working with secret data, etc.\nIn some cases we have made minor code changes:\n\n* `secp256k1_fe_sqrt` has been modified to call `secp256k1_fe_equal_var` (as `secp256k1_fe_equal` has been removed).  The function has been renamed to `secp256k1_fe_sqrt_var` and similar for other indirect callers.\n* The implementation of `secp256k1_gej_eq_ge_var` is taken from <https://github.com/bitcoin-core/secp256k1/tree/a47cd97d51e37c38ecf036d04e48518f6b0063f7>.\n* The use of secp256k1's `hash.h` for Schnorr signatures has been replaced with calls to Simplicity's internal `sha256.h` implementation.  This removes the duplication of functionality ~~and replaces the non-portable use of the `WORDS_BIGENDIAN` flag in `hash_impl.h` with our portable implementation~~.\n* `checked_malloc` and `checked_realloc` have been removed along with any functions that called them.\n* `ARG_CHECK` doesn't call the callback.\n* Callbacks have been removed.\n* `secp256k1_context` has been removed.\n* `shallue_van_de_woestijne`'s implementation is taken from https://github.com/BlockstreamResearch/secp256k1-zkp/blob/03aecafe4c45f51736ce05b339d2e8bcc2e5da55/src/modules/generator/main_impl.h>, which fixes <https://github.com/BlockstreamResearch/secp256k1-zkp/issues/279>.\n\nAdditionally, some changes have been made to ensure that the `infinity` flag of `secp256k1_gej` always corresponds to whether or not the z-coordinate is zero or not.\nAdjustments have been made in the following functions:\n\n* `secp256k1_gej_set_ge`\n* `secp256k1_gej_double_var`\n* `secp256k1_gej_add_zinv_var`\n\nAlso, our jets are designed to operate on off-curve points.\nHowever, the ecmult algorithms in libsecp256k1 are not designed to handle extremely low order, off-curve points[^1].\nWe have patched `secp256k1_gej_add_ge_var` to ensure `rzr` is set even when `a` is infinity.\n\nLastly, all active uses of normalize are replaced with the variable-time implementation.\n\n[^1]: More specifically, the when a point has a very low and odd order, the `ai` values in the `secp256k1_ecmult_odd_multiples_table` can reach infinity, violating libsecp256k1's assumption that `secp256k1_gej_add_ge_var`'s `a` parameter is never infinity.\nThe value we set to the `rzr` in this case does not matter since it ends up only being multiplied with zero in `secp256k1_ge_table_set_globalz`.\nIt just needs to be set to some value to avoid reading uninitialized memory.\n"
  },
  {
    "path": "C/secp256k1/assumptions.h",
    "content": "/***********************************************************************\n * Copyright (c) 2020 Pieter Wuille                                    *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_ASSUMPTIONS_H\n#define SECP256K1_ASSUMPTIONS_H\n\n#include <limits.h>\n\n#include \"util.h\"\n#if defined(SECP256K1_INT128_NATIVE)\n#include \"int128_native.h\"\n#endif\n\n/* This library, like most software, relies on a number of compiler implementation defined (but not undefined)\n   behaviours. Although the behaviours we require are essentially universal we test them specifically here to\n   reduce the odds of experiencing an unwelcome surprise.\n*/\n\nstruct secp256k1_assumption_checker {\n    /* This uses a trick to implement a static assertion in C89: a type with an array of negative size is not\n       allowed. */\n    int dummy_array[(\n        /* Bytes are 8 bits. */\n        (CHAR_BIT == 8) &&\n\n        /* No integer promotion for uint32_t. This ensures that we can multiply uintXX_t values where XX >= 32\n           without signed overflow, which would be undefined behaviour. */\n        (UINT_MAX <= UINT32_MAX) &&\n\n        /* Conversions from unsigned to signed outside of the bounds of the signed type are\n           implementation-defined. Verify that they function as reinterpreting the lower\n           bits of the input in two's complement notation. Do this for conversions:\n           - from uint(N)_t to int(N)_t with negative result\n           - from uint(2N)_t to int(N)_t with negative result\n           - from int(2N)_t to int(N)_t with negative result\n           - from int(2N)_t to int(N)_t with positive result */\n\n        /* To int8_t. */\n        ((int8_t)(uint8_t)0xAB == (int8_t)-(int8_t)0x55) &&\n        ((int8_t)(uint16_t)0xABCD == (int8_t)-(int8_t)0x33) &&\n        ((int8_t)(int16_t)(uint16_t)0xCDEF == (int8_t)(uint8_t)0xEF) &&\n        ((int8_t)(int16_t)(uint16_t)0x9234 == (int8_t)(uint8_t)0x34) &&\n\n        /* To int16_t. */\n        ((int16_t)(uint16_t)0xBCDE == (int16_t)-(int16_t)0x4322) &&\n        ((int16_t)(uint32_t)0xA1B2C3D4 == (int16_t)-(int16_t)0x3C2C) &&\n        ((int16_t)(int32_t)(uint32_t)0xC1D2E3F4 == (int16_t)(uint16_t)0xE3F4) &&\n        ((int16_t)(int32_t)(uint32_t)0x92345678 == (int16_t)(uint16_t)0x5678) &&\n\n        /* To int32_t. */\n        ((int32_t)(uint32_t)0xB2C3D4E5 == (int32_t)-(int32_t)0x4D3C2B1B) &&\n        ((int32_t)(uint64_t)0xA123B456C789D012ULL == (int32_t)-(int32_t)0x38762FEE) &&\n        ((int32_t)(int64_t)(uint64_t)0xC1D2E3F4A5B6C7D8ULL == (int32_t)(uint32_t)0xA5B6C7D8) &&\n        ((int32_t)(int64_t)(uint64_t)0xABCDEF0123456789ULL == (int32_t)(uint32_t)0x23456789) &&\n\n        /* To int64_t. */\n        ((int64_t)(uint64_t)0xB123C456D789E012ULL == (int64_t)-(int64_t)0x4EDC3BA928761FEEULL) &&\n#if defined(SECP256K1_INT128_NATIVE)\n        ((int64_t)(((uint128_t)0xA1234567B8901234ULL << 64) + 0xC5678901D2345678ULL) == (int64_t)-(int64_t)0x3A9876FE2DCBA988ULL) &&\n        (((int64_t)(int128_t)(((uint128_t)0xB1C2D3E4F5A6B7C8ULL << 64) + 0xD9E0F1A2B3C4D5E6ULL)) == (int64_t)(uint64_t)0xD9E0F1A2B3C4D5E6ULL) &&\n        (((int64_t)(int128_t)(((uint128_t)0xABCDEF0123456789ULL << 64) + 0x0123456789ABCDEFULL)) == (int64_t)(uint64_t)0x0123456789ABCDEFULL) &&\n\n        /* To int128_t. */\n        ((int128_t)(((uint128_t)0xB1234567C8901234ULL << 64) + 0xD5678901E2345678ULL) == (int128_t)(-(int128_t)0x8E1648B3F50E80DCULL * 0x8E1648B3F50E80DDULL + 0x5EA688D5482F9464ULL)) &&\n#endif\n\n        /* Right shift on negative signed values is implementation defined. Verify that it\n           acts as a right shift in two's complement with sign extension (i.e duplicating\n           the top bit into newly added bits). */\n        ((((int8_t)0xE8) >> 2) == (int8_t)(uint8_t)0xFA) &&\n        ((((int16_t)0xE9AC) >> 4) == (int16_t)(uint16_t)0xFE9A) &&\n        ((((int32_t)0x937C918A) >> 9) == (int32_t)(uint32_t)0xFFC9BE48) &&\n        ((((int64_t)0xA8B72231DF9CF4B9ULL) >> 19) == (int64_t)(uint64_t)0xFFFFF516E4463BF3ULL) &&\n#if defined(SECP256K1_INT128_NATIVE)\n        ((((int128_t)(((uint128_t)0xCD833A65684A0DBCULL << 64) + 0xB349312F71EA7637ULL)) >> 39) == (int128_t)(((uint128_t)0xFFFFFFFFFF9B0674ULL << 64) + 0xCAD0941B79669262ULL)) &&\n#endif\n    1) * 2 - 1];\n};\n\n#endif /* SECP256K1_ASSUMPTIONS_H */\n"
  },
  {
    "path": "C/secp256k1/eckey.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_ECKEY_H\n#define SECP256K1_ECKEY_H\n\n#include <stddef.h>\n\n#include \"group.h\"\n#include \"scalar.h\"\n#if 0\n#include \"ecmult.h\"\n#include \"ecmult_gen.h\"\n\nstatic int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size);\nstatic int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed);\n\nstatic int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak);\n#endif\nstatic int secp256k1_eckey_pubkey_tweak_add(secp256k1_ge *key, const secp256k1_scalar *tweak);\n#if 0\nstatic int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak);\nstatic int secp256k1_eckey_pubkey_tweak_mul(secp256k1_ge *key, const secp256k1_scalar *tweak);\n#endif\n\n#endif /* SECP256K1_ECKEY_H */\n"
  },
  {
    "path": "C/secp256k1/eckey_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_ECKEY_IMPL_H\n#define SECP256K1_ECKEY_IMPL_H\n\n#include \"eckey.h\"\n\n#include \"scalar.h\"\n#include \"field.h\"\n#include \"group.h\"\n#if 0\n#include \"ecmult_gen.h\"\n\nstatic int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size) {\n    if (size == 33 && (pub[0] == SECP256K1_TAG_PUBKEY_EVEN || pub[0] == SECP256K1_TAG_PUBKEY_ODD)) {\n        secp256k1_fe x;\n        return secp256k1_fe_set_b32(&x, pub+1) && secp256k1_ge_set_xo_var(elem, &x, pub[0] == SECP256K1_TAG_PUBKEY_ODD);\n    } else if (size == 65 && (pub[0] == SECP256K1_TAG_PUBKEY_UNCOMPRESSED || pub[0] == SECP256K1_TAG_PUBKEY_HYBRID_EVEN || pub[0] == SECP256K1_TAG_PUBKEY_HYBRID_ODD)) {\n        secp256k1_fe x, y;\n        if (!secp256k1_fe_set_b32(&x, pub+1) || !secp256k1_fe_set_b32(&y, pub+33)) {\n            return 0;\n        }\n        secp256k1_ge_set_xy(elem, &x, &y);\n        if ((pub[0] == SECP256K1_TAG_PUBKEY_HYBRID_EVEN || pub[0] == SECP256K1_TAG_PUBKEY_HYBRID_ODD) &&\n            secp256k1_fe_is_odd(&y) != (pub[0] == SECP256K1_TAG_PUBKEY_HYBRID_ODD)) {\n            return 0;\n        }\n        return secp256k1_ge_is_valid_var(elem);\n    } else {\n        return 0;\n    }\n}\n\nstatic int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed) {\n    if (secp256k1_ge_is_infinity(elem)) {\n        return 0;\n    }\n    secp256k1_fe_normalize_var(&elem->x);\n    secp256k1_fe_normalize_var(&elem->y);\n    secp256k1_fe_get_b32(&pub[1], &elem->x);\n    if (compressed) {\n        *size = 33;\n        pub[0] = secp256k1_fe_is_odd(&elem->y) ? SECP256K1_TAG_PUBKEY_ODD : SECP256K1_TAG_PUBKEY_EVEN;\n    } else {\n        *size = 65;\n        pub[0] = SECP256K1_TAG_PUBKEY_UNCOMPRESSED;\n        secp256k1_fe_get_b32(&pub[33], &elem->y);\n    }\n    return 1;\n}\n\nstatic int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak) {\n    secp256k1_scalar_add(key, key, tweak);\n    return !secp256k1_scalar_is_zero(key);\n}\n#endif\n\nstatic int secp256k1_eckey_pubkey_tweak_add(secp256k1_ge *key, const secp256k1_scalar *tweak) {\n    secp256k1_gej pt;\n    secp256k1_scalar one;\n    secp256k1_gej_set_ge(&pt, key);\n    secp256k1_scalar_set_int(&one, 1);\n    secp256k1_ecmult(&pt, &pt, &one, tweak);\n\n    if (secp256k1_gej_is_infinity(&pt)) {\n        return 0;\n    }\n    secp256k1_ge_set_gej_var(key, &pt);\n    return 1;\n}\n\n#if 0\nstatic int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak) {\n    int ret;\n    ret = !secp256k1_scalar_is_zero(tweak);\n\n    secp256k1_scalar_mul(key, key, tweak);\n    return ret;\n}\n\nstatic int secp256k1_eckey_pubkey_tweak_mul(secp256k1_ge *key, const secp256k1_scalar *tweak) {\n    secp256k1_scalar zero;\n    secp256k1_gej pt;\n    if (secp256k1_scalar_is_zero(tweak)) {\n        return 0;\n    }\n\n    secp256k1_scalar_set_int(&zero, 0);\n    secp256k1_gej_set_ge(&pt, key);\n    secp256k1_ecmult(&pt, &pt, tweak, &zero);\n    secp256k1_ge_set_gej(key, &pt);\n    return 1;\n}\n#endif\n\n#endif /* SECP256K1_ECKEY_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/ecmult.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014, 2017 Pieter Wuille, Andrew Poelstra       *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_ECMULT_H\n#define SECP256K1_ECMULT_H\n\n#include \"group.h\"\n#include \"scalar.h\"\n\n#define ECMULT_WINDOW_SIZE 15\n\n/** The number of entries a table with precomputed multiples needs to have. */\n#define ECMULT_TABLE_SIZE(w) (1L << ((w)-2))\n\n/** Double multiply: R = na*A + ng*G */\nstatic void secp256k1_ecmult(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng);\n\n#if 0\ntypedef int (secp256k1_ecmult_multi_callback)(secp256k1_scalar *sc, secp256k1_ge *pt, size_t idx, void *data);\n\n/**\n * Multi-multiply: R = inp_g_sc * G + sum_i ni * Ai.\n * Chooses the right algorithm for a given number of points and scratch space\n * size. Resets and overwrites the given scratch space. If the points do not\n * fit in the scratch space the algorithm is repeatedly run with batches of\n * points. If no scratch space is given then a simple algorithm is used that\n * simply multiplies the points with the corresponding scalars and adds them up.\n * Returns: 1 on success (including when inp_g_sc is NULL and n is 0)\n *          0 if there is not enough scratch space for a single point or\n *          callback returns 0\n */\nstatic int secp256k1_ecmult_multi_var(const secp256k1_callback* error_callback, secp256k1_scratch *scratch, secp256k1_gej *r, const secp256k1_scalar *inp_g_sc, secp256k1_ecmult_multi_callback cb, void *cbdata, size_t n);\n#endif\n\n#endif /* SECP256K1_ECMULT_H */\n"
  },
  {
    "path": "C/secp256k1/ecmult_impl.h",
    "content": "/******************************************************************************\n * Copyright (c) 2013, 2014, 2017 Pieter Wuille, Andrew Poelstra, Jonas Nick  *\n * Distributed under the MIT software license, see the accompanying           *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.       *\n ******************************************************************************/\n\n#ifndef SECP256K1_ECMULT_IMPL_H\n#define SECP256K1_ECMULT_IMPL_H\n\n#include <string.h>\n#include <stdint.h>\n\n#include \"util.h\"\n#include \"group.h\"\n#include \"scalar.h\"\n#include \"ecmult.h\"\n#include \"precomputed_ecmult.h\"\n\n#if defined(EXHAUSTIVE_TEST_ORDER)\n/* We need to lower these values for exhaustive tests because\n * the tables cannot have infinities in them (this breaks the\n * affine-isomorphism stuff which tracks z-ratios) */\n#  if EXHAUSTIVE_TEST_ORDER > 128\n#    define WINDOW_A 5\n#  elif EXHAUSTIVE_TEST_ORDER > 8\n#    define WINDOW_A 4\n#  else\n#    define WINDOW_A 2\n#  endif\n#else\n/* optimal for 128-bit and 256-bit exponents. */\n#  define WINDOW_A 5\n/** Larger values for ECMULT_WINDOW_SIZE result in possibly better\n *  performance at the cost of an exponentially larger precomputed\n *  table. The exact table size is\n *      (1 << (WINDOW_G - 2)) * sizeof(secp256k1_ge_storage)  bytes,\n *  where sizeof(secp256k1_ge_storage) is typically 64 bytes but can\n *  be larger due to platform-specific padding and alignment.\n *  Two tables of this size are used (due to the endomorphism\n *  optimization).\n */\n#endif\n\n#define WNAF_BITS 128\n#define WNAF_SIZE_BITS(bits, w) (((bits) + (w) - 1) / (w))\n#define WNAF_SIZE(w) WNAF_SIZE_BITS(WNAF_BITS, w)\n\n/* The number of objects allocated on the scratch space for ecmult_multi algorithms */\n#define PIPPENGER_SCRATCH_OBJECTS 6\n#define STRAUSS_SCRATCH_OBJECTS 5\n\n#define PIPPENGER_MAX_BUCKET_WINDOW 12\n\n/* Minimum number of points for which pippenger_wnaf is faster than strauss wnaf */\n#define ECMULT_PIPPENGER_THRESHOLD 88\n\n#define ECMULT_MAX_POINTS_PER_BATCH 5000000\n\n/** Fill a table 'pre_a' with precomputed odd multiples of a.\n *  pre_a will contain [1*a,3*a,...,(2*n-1)*a], so it needs space for n group elements.\n *  zr needs space for n field elements.\n *\n *  Although pre_a is an array of _ge rather than _gej, it actually represents elements\n *  in Jacobian coordinates with their z coordinates omitted. The omitted z-coordinates\n *  can be recovered using z and zr. Using the notation z(b) to represent the omitted\n *  z coordinate of b:\n *  - z(pre_a[n-1]) = 'z'\n *  - z(pre_a[i-1]) = z(pre_a[i]) / zr[i] for n > i > 0\n *\n *  Lastly the zr[0] value, which isn't used above, is set so that:\n *  - a.z = z(pre_a[0]) / zr[0]\n */\nstatic void secp256k1_ecmult_odd_multiples_table(int n, secp256k1_ge *pre_a, secp256k1_fe *zr, secp256k1_fe *z, const secp256k1_gej *a) {\n    secp256k1_gej d, ai;\n    secp256k1_ge d_ge;\n    int i;\n\n    VERIFY_CHECK(!a->infinity);\n\n    secp256k1_gej_double_var(&d, a, NULL);\n\n    /*\n     * Perform the additions using an isomorphic curve Y^2 = X^3 + 7*C^6 where C := d.z.\n     * The isomorphism, phi, maps a secp256k1 point (x, y) to the point (x*C^2, y*C^3) on the other curve.\n     * In Jacobian coordinates phi maps (x, y, z) to (x*C^2, y*C^3, z) or, equivalently to (x, y, z/C).\n     *\n     *     phi(x, y, z) = (x*C^2, y*C^3, z) = (x, y, z/C)\n     *   d_ge := phi(d) = (d.x, d.y, 1)\n     *     ai := phi(a) = (a.x*C^2, a.y*C^3, a.z)\n     *\n     * The group addition functions work correctly on these isomorphic curves.\n     * In particular phi(d) is easy to represent in affine coordinates under this isomorphism.\n     * This lets us use the faster secp256k1_gej_add_ge_var group addition function that we wouldn't be able to use otherwise.\n     */\n    secp256k1_ge_set_xy(&d_ge, &d.x, &d.y);\n    secp256k1_ge_set_gej_zinv(&pre_a[0], a, &d.z);\n    secp256k1_gej_set_ge(&ai, &pre_a[0]);\n    ai.z = a->z;\n\n    /* pre_a[0] is the point (a.x*C^2, a.y*C^3, a.z*C) which is equivalent to a.\n     * Set zr[0] to C, which is the ratio between the omitted z(pre_a[0]) value and a.z.\n     */\n    zr[0] = d.z;\n\n    for (i = 1; i < n; i++) {\n        secp256k1_gej_add_ge_var(&ai, &ai, &d_ge, &zr[i]);\n        secp256k1_ge_set_xy(&pre_a[i], &ai.x, &ai.y);\n    }\n\n    /* Multiply the last z-coordinate by C to undo the isomorphism.\n     * Since the z-coordinates of the pre_a values are implied by the zr array of z-coordinate ratios,\n     * undoing the isomorphism here undoes the isomorphism for all pre_a values.\n     */\n    secp256k1_fe_mul(z, &ai.z, &d.z);\n}\n\n#define SECP256K1_ECMULT_TABLE_VERIFY(n,w) \\\n    VERIFY_CHECK(((n) & 1) == 1); \\\n    VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \\\n    VERIFY_CHECK((n) <=  ((1 << ((w)-1)) - 1));\n\nSECP256K1_INLINE static void secp256k1_ecmult_table_get_ge(secp256k1_ge *r, const secp256k1_ge *pre, int n, int w) {\n    SECP256K1_ECMULT_TABLE_VERIFY(n,w)\n    if (n > 0) {\n        *r = pre[(n-1)/2];\n    } else {\n        *r = pre[(-n-1)/2];\n        secp256k1_fe_negate(&(r->y), &(r->y), 1);\n    }\n}\n\nSECP256K1_INLINE static void secp256k1_ecmult_table_get_ge_lambda(secp256k1_ge *r, const secp256k1_ge *pre, const secp256k1_fe *x, int n, int w) {\n    SECP256K1_ECMULT_TABLE_VERIFY(n,w)\n    if (n > 0) {\n        secp256k1_ge_set_xy(r, &x[(n-1)/2], &pre[(n-1)/2].y);\n    } else {\n        secp256k1_ge_set_xy(r, &x[(-n-1)/2], &pre[(-n-1)/2].y);\n        secp256k1_fe_negate(&(r->y), &(r->y), 1);\n    }\n}\n\nSECP256K1_INLINE static void secp256k1_ecmult_table_get_ge_storage(secp256k1_ge *r, const secp256k1_ge_storage *pre, int n, int w) {\n    SECP256K1_ECMULT_TABLE_VERIFY(n,w)\n    if (n > 0) {\n        secp256k1_ge_from_storage(r, &pre[(n-1)/2]);\n    } else {\n        secp256k1_ge_from_storage(r, &pre[(-n-1)/2]);\n        secp256k1_fe_negate(&(r->y), &(r->y), 1);\n    }\n}\n\n/** Convert a number to WNAF notation. The number becomes represented by sum(2^i * wnaf[i], i=0..bits),\n *  with the following guarantees:\n *  - each wnaf[i] is either 0, or an odd integer between -(1<<(w-1) - 1) and (1<<(w-1) - 1)\n *  - two non-zero entries in wnaf are separated by at least w-1 zeroes.\n *  - the number of set values in wnaf is returned. This number is at most 256, and at most one more\n *    than the number of bits in the (absolute value) of the input.\n */\nstatic int secp256k1_ecmult_wnaf(int *wnaf, int len, const secp256k1_scalar *a, int w) {\n    secp256k1_scalar s;\n    int last_set_bit = -1;\n    int bit = 0;\n    int sign = 1;\n    int carry = 0;\n\n    VERIFY_CHECK(wnaf != NULL);\n    VERIFY_CHECK(0 <= len && len <= 256);\n    VERIFY_CHECK(a != NULL);\n    VERIFY_CHECK(2 <= w && w <= 31);\n\n    memset(wnaf, 0, len * sizeof(wnaf[0]));\n\n    s = *a;\n    if (secp256k1_scalar_get_bits(&s, 255, 1)) {\n        secp256k1_scalar_negate(&s, &s);\n        sign = -1;\n    }\n\n    while (bit < len) {\n        int now;\n        int word;\n        if (secp256k1_scalar_get_bits(&s, bit, 1) == (unsigned int)carry) {\n            bit++;\n            continue;\n        }\n\n        now = w;\n        if (now > len - bit) {\n            now = len - bit;\n        }\n\n        word = secp256k1_scalar_get_bits_var(&s, bit, now) + carry;\n\n        carry = (word >> (w-1)) & 1;\n        word -= carry << w;\n\n        wnaf[bit] = sign * word;\n        last_set_bit = bit;\n\n        bit += now;\n    }\n#ifdef VERIFY\n    {\n        int verify_bit = bit;\n\n        VERIFY_CHECK(carry == 0);\n\n        while (verify_bit < 256) {\n            VERIFY_CHECK(secp256k1_scalar_get_bits(&s, verify_bit, 1) == 0);\n            verify_bit++;\n        }\n    }\n#endif\n    return last_set_bit + 1;\n}\n\nstruct secp256k1_strauss_point_state {\n    int wnaf_na_1[129];\n    int wnaf_na_lam[129];\n    int bits_na_1;\n    int bits_na_lam;\n};\n\nstruct secp256k1_strauss_state {\n    /* aux is used to hold z-ratios, and then used to hold pre_a[i].x * BETA values. */\n    secp256k1_fe* aux;\n    secp256k1_ge* pre_a;\n    struct secp256k1_strauss_point_state* ps;\n};\n\nstatic void secp256k1_ecmult_strauss_wnaf(const struct secp256k1_strauss_state *state, secp256k1_gej *r, size_t num, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng) {\n    secp256k1_ge tmpa;\n    secp256k1_fe Z;\n    /* Split G factors. */\n    secp256k1_scalar ng_1, ng_128;\n    int wnaf_ng_1[129];\n    int bits_ng_1 = 0;\n    int wnaf_ng_128[129];\n    int bits_ng_128 = 0;\n    int i;\n    int bits = 0;\n    size_t np;\n    size_t no = 0;\n\n    secp256k1_fe_set_int(&Z, 1);\n    for (np = 0; np < num; ++np) {\n        secp256k1_gej tmp;\n        secp256k1_scalar na_1, na_lam;\n        if (secp256k1_scalar_is_zero(&na[np]) || secp256k1_gej_is_infinity(&a[np])) {\n            continue;\n        }\n        /* split na into na_1 and na_lam (where na = na_1 + na_lam*lambda, and na_1 and na_lam are ~128 bit) */\n        secp256k1_scalar_split_lambda(&na_1, &na_lam, &na[np]);\n\n        /* build wnaf representation for na_1 and na_lam. */\n        state->ps[no].bits_na_1   = secp256k1_ecmult_wnaf(state->ps[no].wnaf_na_1,   129, &na_1,   WINDOW_A);\n        state->ps[no].bits_na_lam = secp256k1_ecmult_wnaf(state->ps[no].wnaf_na_lam, 129, &na_lam, WINDOW_A);\n        VERIFY_CHECK(state->ps[no].bits_na_1 <= 129);\n        VERIFY_CHECK(state->ps[no].bits_na_lam <= 129);\n        if (state->ps[no].bits_na_1 > bits) {\n            bits = state->ps[no].bits_na_1;\n        }\n        if (state->ps[no].bits_na_lam > bits) {\n            bits = state->ps[no].bits_na_lam;\n        }\n\n        /* Calculate odd multiples of a.\n         * All multiples are brought to the same Z 'denominator', which is stored\n         * in Z. Due to secp256k1' isomorphism we can do all operations pretending\n         * that the Z coordinate was 1, use affine addition formulae, and correct\n         * the Z coordinate of the result once at the end.\n         * The exception is the precomputed G table points, which are actually\n         * affine. Compared to the base used for other points, they have a Z ratio\n         * of 1/Z, so we can use secp256k1_gej_add_zinv_var, which uses the same\n         * isomorphism to efficiently add with a known Z inverse.\n         */\n        tmp = a[np];\n        if (no) {\n#ifdef VERIFY\n            secp256k1_fe_normalize_var(&Z);\n#endif\n            secp256k1_gej_rescale(&tmp, &Z);\n        }\n        secp256k1_ecmult_odd_multiples_table(ECMULT_TABLE_SIZE(WINDOW_A), state->pre_a + no * ECMULT_TABLE_SIZE(WINDOW_A), state->aux + no * ECMULT_TABLE_SIZE(WINDOW_A), &Z, &tmp);\n        if (no) secp256k1_fe_mul(state->aux + no * ECMULT_TABLE_SIZE(WINDOW_A), state->aux + no * ECMULT_TABLE_SIZE(WINDOW_A), &(a[np].z));\n\n        ++no;\n    }\n\n    /* Bring them to the same Z denominator. */\n    secp256k1_ge_table_set_globalz(ECMULT_TABLE_SIZE(WINDOW_A) * no, state->pre_a, state->aux);\n\n    for (np = 0; np < no; ++np) {\n        for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {\n            secp256k1_fe_mul(&state->aux[np * ECMULT_TABLE_SIZE(WINDOW_A) + i], &state->pre_a[np * ECMULT_TABLE_SIZE(WINDOW_A) + i].x, &secp256k1_const_beta);\n        }\n    }\n\n    if (ng) {\n        /* split ng into ng_1 and ng_128 (where gn = gn_1 + gn_128*2^128, and gn_1 and gn_128 are ~128 bit) */\n        secp256k1_scalar_split_128(&ng_1, &ng_128, ng);\n\n        /* Build wnaf representation for ng_1 and ng_128 */\n        bits_ng_1   = secp256k1_ecmult_wnaf(wnaf_ng_1,   129, &ng_1,   WINDOW_G);\n        bits_ng_128 = secp256k1_ecmult_wnaf(wnaf_ng_128, 129, &ng_128, WINDOW_G);\n        if (bits_ng_1 > bits) {\n            bits = bits_ng_1;\n        }\n        if (bits_ng_128 > bits) {\n            bits = bits_ng_128;\n        }\n    }\n\n    secp256k1_gej_set_infinity(r);\n\n    for (i = bits - 1; i >= 0; i--) {\n        int n;\n        secp256k1_gej_double_var(r, r, NULL);\n        for (np = 0; np < no; ++np) {\n            if (i < state->ps[np].bits_na_1 && (n = state->ps[np].wnaf_na_1[i])) {\n                secp256k1_ecmult_table_get_ge(&tmpa, state->pre_a + np * ECMULT_TABLE_SIZE(WINDOW_A), n, WINDOW_A);\n                secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);\n            }\n            if (i < state->ps[np].bits_na_lam && (n = state->ps[np].wnaf_na_lam[i])) {\n                secp256k1_ecmult_table_get_ge_lambda(&tmpa, state->pre_a + np * ECMULT_TABLE_SIZE(WINDOW_A), state->aux + np * ECMULT_TABLE_SIZE(WINDOW_A), n, WINDOW_A);\n                secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);\n            }\n        }\n        if (i < bits_ng_1 && (n = wnaf_ng_1[i])) {\n            secp256k1_ecmult_table_get_ge_storage(&tmpa, secp256k1_pre_g, n, WINDOW_G);\n            secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);\n        }\n        if (i < bits_ng_128 && (n = wnaf_ng_128[i])) {\n            secp256k1_ecmult_table_get_ge_storage(&tmpa, secp256k1_pre_g_128, n, WINDOW_G);\n            secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);\n        }\n    }\n\n    if (!r->infinity) {\n        secp256k1_fe_mul(&r->z, &r->z, &Z);\n    }\n}\n\nstatic void secp256k1_ecmult(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng) {\n    secp256k1_fe aux[ECMULT_TABLE_SIZE(WINDOW_A)];\n    secp256k1_ge pre_a[ECMULT_TABLE_SIZE(WINDOW_A)];\n    struct secp256k1_strauss_point_state ps[1];\n    struct secp256k1_strauss_state state;\n\n    state.aux = aux;\n    state.pre_a = pre_a;\n    state.ps = ps;\n    secp256k1_ecmult_strauss_wnaf(&state, r, 1, a, na, ng);\n}\n\n#if 0\nstatic size_t secp256k1_strauss_scratch_size(size_t n_points) {\n    static const size_t point_size = (sizeof(secp256k1_ge) + sizeof(secp256k1_fe)) * ECMULT_TABLE_SIZE(WINDOW_A) + sizeof(struct secp256k1_strauss_point_state) + sizeof(secp256k1_gej) + sizeof(secp256k1_scalar);\n    return n_points*point_size;\n}\n\nstatic int secp256k1_ecmult_strauss_batch(const secp256k1_callback* error_callback, secp256k1_scratch *scratch, secp256k1_gej *r, const secp256k1_scalar *inp_g_sc, secp256k1_ecmult_multi_callback cb, void *cbdata, size_t n_points, size_t cb_offset) {\n    secp256k1_gej* points;\n    secp256k1_scalar* scalars;\n    struct secp256k1_strauss_state state;\n    size_t i;\n    const size_t scratch_checkpoint = secp256k1_scratch_checkpoint(error_callback, scratch);\n\n    secp256k1_gej_set_infinity(r);\n    if (inp_g_sc == NULL && n_points == 0) {\n        return 1;\n    }\n\n    /* We allocate STRAUSS_SCRATCH_OBJECTS objects on the scratch space. If these\n     * allocations change, make sure to update the STRAUSS_SCRATCH_OBJECTS\n     * constant and strauss_scratch_size accordingly. */\n    points = (secp256k1_gej*)secp256k1_scratch_alloc(error_callback, scratch, n_points * sizeof(secp256k1_gej));\n    scalars = (secp256k1_scalar*)secp256k1_scratch_alloc(error_callback, scratch, n_points * sizeof(secp256k1_scalar));\n    state.aux = (secp256k1_fe*)secp256k1_scratch_alloc(error_callback, scratch, n_points * ECMULT_TABLE_SIZE(WINDOW_A) * sizeof(secp256k1_fe));\n    state.pre_a = (secp256k1_ge*)secp256k1_scratch_alloc(error_callback, scratch, n_points * ECMULT_TABLE_SIZE(WINDOW_A) * sizeof(secp256k1_ge));\n    state.ps = (struct secp256k1_strauss_point_state*)secp256k1_scratch_alloc(error_callback, scratch, n_points * sizeof(struct secp256k1_strauss_point_state));\n\n    if (points == NULL || scalars == NULL || state.aux == NULL || state.pre_a == NULL || state.ps == NULL) {\n        secp256k1_scratch_apply_checkpoint(error_callback, scratch, scratch_checkpoint);\n        return 0;\n    }\n\n    for (i = 0; i < n_points; i++) {\n        secp256k1_ge point;\n        if (!cb(&scalars[i], &point, i+cb_offset, cbdata)) {\n            secp256k1_scratch_apply_checkpoint(error_callback, scratch, scratch_checkpoint);\n            return 0;\n        }\n        secp256k1_gej_set_ge(&points[i], &point);\n    }\n    secp256k1_ecmult_strauss_wnaf(&state, r, n_points, points, scalars, inp_g_sc);\n    secp256k1_scratch_apply_checkpoint(error_callback, scratch, scratch_checkpoint);\n    return 1;\n}\n\n/* Wrapper for secp256k1_ecmult_multi_func interface */\nstatic int secp256k1_ecmult_strauss_batch_single(const secp256k1_callback* error_callback, secp256k1_scratch *scratch, secp256k1_gej *r, const secp256k1_scalar *inp_g_sc, secp256k1_ecmult_multi_callback cb, void *cbdata, size_t n) {\n    return secp256k1_ecmult_strauss_batch(error_callback, scratch, r, inp_g_sc, cb, cbdata, n, 0);\n}\n\nstatic size_t secp256k1_strauss_max_points(const secp256k1_callback* error_callback, secp256k1_scratch *scratch) {\n    return secp256k1_scratch_max_allocation(error_callback, scratch, STRAUSS_SCRATCH_OBJECTS) / secp256k1_strauss_scratch_size(1);\n}\n\n/** Convert a number to WNAF notation.\n *  The number becomes represented by sum(2^{wi} * wnaf[i], i=0..WNAF_SIZE(w)+1) - return_val.\n *  It has the following guarantees:\n *  - each wnaf[i] is either 0 or an odd integer between -(1 << w) and (1 << w)\n *  - the number of words set is always WNAF_SIZE(w)\n *  - the returned skew is 0 or 1\n */\nstatic int secp256k1_wnaf_fixed(int *wnaf, const secp256k1_scalar *s, int w) {\n    int skew = 0;\n    int pos;\n    int max_pos;\n    int last_w;\n    const secp256k1_scalar *work = s;\n\n    if (secp256k1_scalar_is_zero(s)) {\n        for (pos = 0; pos < WNAF_SIZE(w); pos++) {\n            wnaf[pos] = 0;\n        }\n        return 0;\n    }\n\n    if (secp256k1_scalar_is_even(s)) {\n        skew = 1;\n    }\n\n    wnaf[0] = secp256k1_scalar_get_bits_var(work, 0, w) + skew;\n    /* Compute last window size. Relevant when window size doesn't divide the\n     * number of bits in the scalar */\n    last_w = WNAF_BITS - (WNAF_SIZE(w) - 1) * w;\n\n    /* Store the position of the first nonzero word in max_pos to allow\n     * skipping leading zeros when calculating the wnaf. */\n    for (pos = WNAF_SIZE(w) - 1; pos > 0; pos--) {\n        int val = secp256k1_scalar_get_bits_var(work, pos * w, pos == WNAF_SIZE(w)-1 ? last_w : w);\n        if(val != 0) {\n            break;\n        }\n        wnaf[pos] = 0;\n    }\n    max_pos = pos;\n    pos = 1;\n\n    while (pos <= max_pos) {\n        int val = secp256k1_scalar_get_bits_var(work, pos * w, pos == WNAF_SIZE(w)-1 ? last_w : w);\n        if ((val & 1) == 0) {\n            wnaf[pos - 1] -= (1 << w);\n            wnaf[pos] = (val + 1);\n        } else {\n            wnaf[pos] = val;\n        }\n        /* Set a coefficient to zero if it is 1 or -1 and the proceeding digit\n         * is strictly negative or strictly positive respectively. Only change\n         * coefficients at previous positions because above code assumes that\n         * wnaf[pos - 1] is odd.\n         */\n        if (pos >= 2 && ((wnaf[pos - 1] == 1 && wnaf[pos - 2] < 0) || (wnaf[pos - 1] == -1 && wnaf[pos - 2] > 0))) {\n            if (wnaf[pos - 1] == 1) {\n                wnaf[pos - 2] += 1 << w;\n            } else {\n                wnaf[pos - 2] -= 1 << w;\n            }\n            wnaf[pos - 1] = 0;\n        }\n        ++pos;\n    }\n\n    return skew;\n}\n\nstruct secp256k1_pippenger_point_state {\n    int skew_na;\n    size_t input_pos;\n};\n\nstruct secp256k1_pippenger_state {\n    int *wnaf_na;\n    struct secp256k1_pippenger_point_state* ps;\n};\n\n/*\n * pippenger_wnaf computes the result of a multi-point multiplication as\n * follows: The scalars are brought into wnaf with n_wnaf elements each. Then\n * for every i < n_wnaf, first each point is added to a \"bucket\" corresponding\n * to the point's wnaf[i]. Second, the buckets are added together such that\n * r += 1*bucket[0] + 3*bucket[1] + 5*bucket[2] + ...\n */\nstatic int secp256k1_ecmult_pippenger_wnaf(secp256k1_gej *buckets, int bucket_window, struct secp256k1_pippenger_state *state, secp256k1_gej *r, const secp256k1_scalar *sc, const secp256k1_ge *pt, size_t num) {\n    size_t n_wnaf = WNAF_SIZE(bucket_window+1);\n    size_t np;\n    size_t no = 0;\n    int i;\n    int j;\n\n    for (np = 0; np < num; ++np) {\n        if (secp256k1_scalar_is_zero(&sc[np]) || secp256k1_ge_is_infinity(&pt[np])) {\n            continue;\n        }\n        state->ps[no].input_pos = np;\n        state->ps[no].skew_na = secp256k1_wnaf_fixed(&state->wnaf_na[no*n_wnaf], &sc[np], bucket_window+1);\n        no++;\n    }\n    secp256k1_gej_set_infinity(r);\n\n    if (no == 0) {\n        return 1;\n    }\n\n    for (i = n_wnaf - 1; i >= 0; i--) {\n        secp256k1_gej running_sum;\n\n        for(j = 0; j < ECMULT_TABLE_SIZE(bucket_window+2); j++) {\n            secp256k1_gej_set_infinity(&buckets[j]);\n        }\n\n        for (np = 0; np < no; ++np) {\n            int n = state->wnaf_na[np*n_wnaf + i];\n            struct secp256k1_pippenger_point_state point_state = state->ps[np];\n            secp256k1_ge tmp;\n            int idx;\n\n            if (i == 0) {\n                /* correct for wnaf skew */\n                int skew = point_state.skew_na;\n                if (skew) {\n                    secp256k1_ge_neg(&tmp, &pt[point_state.input_pos]);\n                    secp256k1_gej_add_ge_var(&buckets[0], &buckets[0], &tmp, NULL);\n                }\n            }\n            if (n > 0) {\n                idx = (n - 1)/2;\n                secp256k1_gej_add_ge_var(&buckets[idx], &buckets[idx], &pt[point_state.input_pos], NULL);\n            } else if (n < 0) {\n                idx = -(n + 1)/2;\n                secp256k1_ge_neg(&tmp, &pt[point_state.input_pos]);\n                secp256k1_gej_add_ge_var(&buckets[idx], &buckets[idx], &tmp, NULL);\n            }\n        }\n\n        for(j = 0; j < bucket_window; j++) {\n            secp256k1_gej_double_var(r, r, NULL);\n        }\n\n        secp256k1_gej_set_infinity(&running_sum);\n        /* Accumulate the sum: bucket[0] + 3*bucket[1] + 5*bucket[2] + 7*bucket[3] + ...\n         *                   = bucket[0] +   bucket[1] +   bucket[2] +   bucket[3] + ...\n         *                   +         2 *  (bucket[1] + 2*bucket[2] + 3*bucket[3] + ...)\n         * using an intermediate running sum:\n         * running_sum = bucket[0] +   bucket[1] +   bucket[2] + ...\n         *\n         * The doubling is done implicitly by deferring the final window doubling (of 'r').\n         */\n        for(j = ECMULT_TABLE_SIZE(bucket_window+2) - 1; j > 0; j--) {\n            secp256k1_gej_add_var(&running_sum, &running_sum, &buckets[j], NULL);\n            secp256k1_gej_add_var(r, r, &running_sum, NULL);\n        }\n\n        secp256k1_gej_add_var(&running_sum, &running_sum, &buckets[0], NULL);\n        secp256k1_gej_double_var(r, r, NULL);\n        secp256k1_gej_add_var(r, r, &running_sum, NULL);\n    }\n    return 1;\n}\n\n/**\n * Returns optimal bucket_window (number of bits of a scalar represented by a\n * set of buckets) for a given number of points.\n */\nstatic int secp256k1_pippenger_bucket_window(size_t n) {\n    if (n <= 1) {\n        return 1;\n    } else if (n <= 4) {\n        return 2;\n    } else if (n <= 20) {\n        return 3;\n    } else if (n <= 57) {\n        return 4;\n    } else if (n <= 136) {\n        return 5;\n    } else if (n <= 235) {\n        return 6;\n    } else if (n <= 1260) {\n        return 7;\n    } else if (n <= 4420) {\n        return 9;\n    } else if (n <= 7880) {\n        return 10;\n    } else if (n <= 16050) {\n        return 11;\n    } else {\n        return PIPPENGER_MAX_BUCKET_WINDOW;\n    }\n}\n\n/**\n * Returns the maximum optimal number of points for a bucket_window.\n */\nstatic size_t secp256k1_pippenger_bucket_window_inv(int bucket_window) {\n    switch(bucket_window) {\n        case 1: return 1;\n        case 2: return 4;\n        case 3: return 20;\n        case 4: return 57;\n        case 5: return 136;\n        case 6: return 235;\n        case 7: return 1260;\n        case 8: return 1260;\n        case 9: return 4420;\n        case 10: return 7880;\n        case 11: return 16050;\n        case PIPPENGER_MAX_BUCKET_WINDOW: return SIZE_MAX;\n    }\n    return 0;\n}\n\n\nSECP256K1_INLINE static void secp256k1_ecmult_endo_split(secp256k1_scalar *s1, secp256k1_scalar *s2, secp256k1_ge *p1, secp256k1_ge *p2) {\n    secp256k1_scalar tmp = *s1;\n    secp256k1_scalar_split_lambda(s1, s2, &tmp);\n    secp256k1_ge_mul_lambda(p2, p1);\n\n    if (secp256k1_scalar_is_high(s1)) {\n        secp256k1_scalar_negate(s1, s1);\n        secp256k1_ge_neg(p1, p1);\n    }\n    if (secp256k1_scalar_is_high(s2)) {\n        secp256k1_scalar_negate(s2, s2);\n        secp256k1_ge_neg(p2, p2);\n    }\n}\n\n/**\n * Returns the scratch size required for a given number of points (excluding\n * base point G) without considering alignment.\n */\nstatic size_t secp256k1_pippenger_scratch_size(size_t n_points, int bucket_window) {\n    size_t entries = 2*n_points + 2;\n    size_t entry_size = sizeof(secp256k1_ge) + sizeof(secp256k1_scalar) + sizeof(struct secp256k1_pippenger_point_state) + (WNAF_SIZE(bucket_window+1)+1)*sizeof(int);\n    return (sizeof(secp256k1_gej) << bucket_window) + sizeof(struct secp256k1_pippenger_state) + entries * entry_size;\n}\n\nstatic int secp256k1_ecmult_pippenger_batch(const secp256k1_callback* error_callback, secp256k1_scratch *scratch, secp256k1_gej *r, const secp256k1_scalar *inp_g_sc, secp256k1_ecmult_multi_callback cb, void *cbdata, size_t n_points, size_t cb_offset) {\n    const size_t scratch_checkpoint = secp256k1_scratch_checkpoint(error_callback, scratch);\n    /* Use 2(n+1) with the endomorphism, when calculating batch\n     * sizes. The reason for +1 is that we add the G scalar to the list of\n     * other scalars. */\n    size_t entries = 2*n_points + 2;\n    secp256k1_ge *points;\n    secp256k1_scalar *scalars;\n    secp256k1_gej *buckets;\n    struct secp256k1_pippenger_state *state_space;\n    size_t idx = 0;\n    size_t point_idx = 0;\n    int i, j;\n    int bucket_window;\n\n    secp256k1_gej_set_infinity(r);\n    if (inp_g_sc == NULL && n_points == 0) {\n        return 1;\n    }\n    bucket_window = secp256k1_pippenger_bucket_window(n_points);\n\n    /* We allocate PIPPENGER_SCRATCH_OBJECTS objects on the scratch space. If\n     * these allocations change, make sure to update the\n     * PIPPENGER_SCRATCH_OBJECTS constant and pippenger_scratch_size\n     * accordingly. */\n    points = (secp256k1_ge *) secp256k1_scratch_alloc(error_callback, scratch, entries * sizeof(*points));\n    scalars = (secp256k1_scalar *) secp256k1_scratch_alloc(error_callback, scratch, entries * sizeof(*scalars));\n    state_space = (struct secp256k1_pippenger_state *) secp256k1_scratch_alloc(error_callback, scratch, sizeof(*state_space));\n    if (points == NULL || scalars == NULL || state_space == NULL) {\n        secp256k1_scratch_apply_checkpoint(error_callback, scratch, scratch_checkpoint);\n        return 0;\n    }\n    state_space->ps = (struct secp256k1_pippenger_point_state *) secp256k1_scratch_alloc(error_callback, scratch, entries * sizeof(*state_space->ps));\n    state_space->wnaf_na = (int *) secp256k1_scratch_alloc(error_callback, scratch, entries*(WNAF_SIZE(bucket_window+1)) * sizeof(int));\n    buckets = (secp256k1_gej *) secp256k1_scratch_alloc(error_callback, scratch, (1<<bucket_window) * sizeof(*buckets));\n    if (state_space->ps == NULL || state_space->wnaf_na == NULL || buckets == NULL) {\n        secp256k1_scratch_apply_checkpoint(error_callback, scratch, scratch_checkpoint);\n        return 0;\n    }\n\n    if (inp_g_sc != NULL) {\n        scalars[0] = *inp_g_sc;\n        points[0] = secp256k1_ge_const_g;\n        idx++;\n        secp256k1_ecmult_endo_split(&scalars[0], &scalars[1], &points[0], &points[1]);\n        idx++;\n    }\n\n    while (point_idx < n_points) {\n        if (!cb(&scalars[idx], &points[idx], point_idx + cb_offset, cbdata)) {\n            secp256k1_scratch_apply_checkpoint(error_callback, scratch, scratch_checkpoint);\n            return 0;\n        }\n        idx++;\n        secp256k1_ecmult_endo_split(&scalars[idx - 1], &scalars[idx], &points[idx - 1], &points[idx]);\n        idx++;\n        point_idx++;\n    }\n\n    secp256k1_ecmult_pippenger_wnaf(buckets, bucket_window, state_space, r, scalars, points, idx);\n\n    /* Clear data */\n    for(i = 0; (size_t)i < idx; i++) {\n        secp256k1_scalar_clear(&scalars[i]);\n        state_space->ps[i].skew_na = 0;\n        for(j = 0; j < WNAF_SIZE(bucket_window+1); j++) {\n            state_space->wnaf_na[i * WNAF_SIZE(bucket_window+1) + j] = 0;\n        }\n    }\n    for(i = 0; i < 1<<bucket_window; i++) {\n        secp256k1_gej_clear(&buckets[i]);\n    }\n    secp256k1_scratch_apply_checkpoint(error_callback, scratch, scratch_checkpoint);\n    return 1;\n}\n\n/* Wrapper for secp256k1_ecmult_multi_func interface */\nstatic int secp256k1_ecmult_pippenger_batch_single(const secp256k1_callback* error_callback, secp256k1_scratch *scratch, secp256k1_gej *r, const secp256k1_scalar *inp_g_sc, secp256k1_ecmult_multi_callback cb, void *cbdata, size_t n) {\n    return secp256k1_ecmult_pippenger_batch(error_callback, scratch, r, inp_g_sc, cb, cbdata, n, 0);\n}\n\n/**\n * Returns the maximum number of points in addition to G that can be used with\n * a given scratch space. The function ensures that fewer points may also be\n * used.\n */\nstatic size_t secp256k1_pippenger_max_points(const secp256k1_callback* error_callback, secp256k1_scratch *scratch) {\n    size_t max_alloc = secp256k1_scratch_max_allocation(error_callback, scratch, PIPPENGER_SCRATCH_OBJECTS);\n    int bucket_window;\n    size_t res = 0;\n\n    for (bucket_window = 1; bucket_window <= PIPPENGER_MAX_BUCKET_WINDOW; bucket_window++) {\n        size_t n_points;\n        size_t max_points = secp256k1_pippenger_bucket_window_inv(bucket_window);\n        size_t space_for_points;\n        size_t space_overhead;\n        size_t entry_size = sizeof(secp256k1_ge) + sizeof(secp256k1_scalar) + sizeof(struct secp256k1_pippenger_point_state) + (WNAF_SIZE(bucket_window+1)+1)*sizeof(int);\n\n        entry_size = 2*entry_size;\n        space_overhead = (sizeof(secp256k1_gej) << bucket_window) + entry_size + sizeof(struct secp256k1_pippenger_state);\n        if (space_overhead > max_alloc) {\n            break;\n        }\n        space_for_points = max_alloc - space_overhead;\n\n        n_points = space_for_points/entry_size;\n        n_points = n_points > max_points ? max_points : n_points;\n        if (n_points > res) {\n            res = n_points;\n        }\n        if (n_points < max_points) {\n            /* A larger bucket_window may support even more points. But if we\n             * would choose that then the caller couldn't safely use any number\n             * smaller than what this function returns */\n            break;\n        }\n    }\n    return res;\n}\n\n/* Computes ecmult_multi by simply multiplying and adding each point. Does not\n * require a scratch space */\nstatic int secp256k1_ecmult_multi_simple_var(secp256k1_gej *r, const secp256k1_scalar *inp_g_sc, secp256k1_ecmult_multi_callback cb, void *cbdata, size_t n_points) {\n    size_t point_idx;\n    secp256k1_scalar szero;\n    secp256k1_gej tmpj;\n\n    secp256k1_scalar_set_int(&szero, 0);\n    secp256k1_gej_set_infinity(r);\n    secp256k1_gej_set_infinity(&tmpj);\n    /* r = inp_g_sc*G */\n    secp256k1_ecmult(r, &tmpj, &szero, inp_g_sc);\n    for (point_idx = 0; point_idx < n_points; point_idx++) {\n        secp256k1_ge point;\n        secp256k1_gej pointj;\n        secp256k1_scalar scalar;\n        if (!cb(&scalar, &point, point_idx, cbdata)) {\n            return 0;\n        }\n        /* r += scalar*point */\n        secp256k1_gej_set_ge(&pointj, &point);\n        secp256k1_ecmult(&tmpj, &pointj, &scalar, NULL);\n        secp256k1_gej_add_var(r, r, &tmpj, NULL);\n    }\n    return 1;\n}\n\n/* Compute the number of batches and the batch size given the maximum batch size and the\n * total number of points */\nstatic int secp256k1_ecmult_multi_batch_size_helper(size_t *n_batches, size_t *n_batch_points, size_t max_n_batch_points, size_t n) {\n    if (max_n_batch_points == 0) {\n        return 0;\n    }\n    if (max_n_batch_points > ECMULT_MAX_POINTS_PER_BATCH) {\n        max_n_batch_points = ECMULT_MAX_POINTS_PER_BATCH;\n    }\n    if (n == 0) {\n        *n_batches = 0;\n        *n_batch_points = 0;\n        return 1;\n    }\n    /* Compute ceil(n/max_n_batch_points) and ceil(n/n_batches) */\n    *n_batches = 1 + (n - 1) / max_n_batch_points;\n    *n_batch_points = 1 + (n - 1) / *n_batches;\n    return 1;\n}\n\ntypedef int (*secp256k1_ecmult_multi_func)(const secp256k1_callback* error_callback, secp256k1_scratch*, secp256k1_gej*, const secp256k1_scalar*, secp256k1_ecmult_multi_callback cb, void*, size_t);\nstatic int secp256k1_ecmult_multi_var(const secp256k1_callback* error_callback, secp256k1_scratch *scratch, secp256k1_gej *r, const secp256k1_scalar *inp_g_sc, secp256k1_ecmult_multi_callback cb, void *cbdata, size_t n) {\n    size_t i;\n\n    int (*f)(const secp256k1_callback* error_callback, secp256k1_scratch*, secp256k1_gej*, const secp256k1_scalar*, secp256k1_ecmult_multi_callback cb, void*, size_t, size_t);\n    size_t n_batches;\n    size_t n_batch_points;\n\n    secp256k1_gej_set_infinity(r);\n    if (inp_g_sc == NULL && n == 0) {\n        return 1;\n    } else if (n == 0) {\n        secp256k1_scalar szero;\n        secp256k1_scalar_set_int(&szero, 0);\n        secp256k1_ecmult(r, r, &szero, inp_g_sc);\n        return 1;\n    }\n    if (scratch == NULL) {\n        return secp256k1_ecmult_multi_simple_var(r, inp_g_sc, cb, cbdata, n);\n    }\n\n    /* Compute the batch sizes for Pippenger's algorithm given a scratch space. If it's greater than\n     * a threshold use Pippenger's algorithm. Otherwise use Strauss' algorithm.\n     * As a first step check if there's enough space for Pippenger's algo (which requires less space\n     * than Strauss' algo) and if not, use the simple algorithm. */\n    if (!secp256k1_ecmult_multi_batch_size_helper(&n_batches, &n_batch_points, secp256k1_pippenger_max_points(error_callback, scratch), n)) {\n        return secp256k1_ecmult_multi_simple_var(r, inp_g_sc, cb, cbdata, n);\n    }\n    if (n_batch_points >= ECMULT_PIPPENGER_THRESHOLD) {\n        f = secp256k1_ecmult_pippenger_batch;\n    } else {\n        if (!secp256k1_ecmult_multi_batch_size_helper(&n_batches, &n_batch_points, secp256k1_strauss_max_points(error_callback, scratch), n)) {\n            return secp256k1_ecmult_multi_simple_var(r, inp_g_sc, cb, cbdata, n);\n        }\n        f = secp256k1_ecmult_strauss_batch;\n    }\n    for(i = 0; i < n_batches; i++) {\n        size_t nbp = n < n_batch_points ? n : n_batch_points;\n        size_t offset = n_batch_points*i;\n        secp256k1_gej tmp;\n        if (!f(error_callback, scratch, &tmp, i == 0 ? inp_g_sc : NULL, cb, cbdata, nbp, offset)) {\n            return 0;\n        }\n        secp256k1_gej_add_var(r, r, &tmp, NULL);\n        n -= nbp;\n    }\n    return 1;\n}\n#endif\n\n#endif /* SECP256K1_ECMULT_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/extrakeys.h",
    "content": "#ifndef SECP256K1_EXTRAKEYS_H\n#define SECP256K1_EXTRAKEYS_H\n\n#include \"secp256k1.h\"\n\n/** Opaque data structure that holds a parsed and valid \"x-only\" public key.\n *  An x-only pubkey encodes a point whose Y coordinate is even. It is\n *  serialized using only its X coordinate (32 bytes). See BIP-340 for more\n *  information about x-only pubkeys.\n *\n *  The exact representation of data inside is implementation defined and not\n *  guaranteed to be portable between different platforms or versions. It is\n *  however guaranteed to be 64 bytes in size, and can be safely copied/moved.\n *  If you need to convert to a format suitable for storage, transmission, use\n *  use secp256k1_xonly_pubkey_serialize and secp256k1_xonly_pubkey_parse. To\n *  compare keys, use secp256k1_xonly_pubkey_cmp.\n */\ntypedef struct {\n    unsigned char data[64];\n} secp256k1_xonly_pubkey;\n\n/** Parse a 32-byte sequence into a xonly_pubkey object.\n *\n *  Returns: 1 if the public key was fully valid.\n *           0 if the public key could not be parsed or is invalid.\n *\n *  Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a\n *               parsed version of input. If not, it's set to an invalid value.\n *  In: input32: pointer to a serialized xonly_pubkey.\n */\nstatic SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_parse(\n    secp256k1_xonly_pubkey* pubkey,\n    const unsigned char *input32\n) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);\n\n/** Serialize an xonly_pubkey object into a 32-byte sequence.\n *\n *  Returns: 1 always.\n *\n *  Out: output32: a pointer to a 32-byte array to place the serialized key in.\n *  In:    pubkey: a pointer to a secp256k1_xonly_pubkey containing an initialized public key.\n */\nstatic int secp256k1_xonly_pubkey_serialize(\n    unsigned char *output32,\n    const secp256k1_xonly_pubkey* pubkey\n) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);\n/** Converts a secp256k1_pubkey into a secp256k1_xonly_pubkey.\n *\n *  Returns: 1 always.\n *\n *  Out: xonly_pubkey: pointer to an x-only public key object for placing the converted public key.\n *          pk_parity: Ignored if NULL. Otherwise, pointer to an integer that\n *                     will be set to 1 if the point encoded by xonly_pubkey is\n *                     the negation of the pubkey and set to 0 otherwise.\n *  In:        pubkey: pointer to a public key that is converted.\n */\nstatic SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_from_pubkey(\n    secp256k1_xonly_pubkey *xonly_pubkey,\n    int *pk_parity,\n    const secp256k1_pubkey *pubkey\n) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3);\n\n/** Tweak an x-only public key by adding the generator multiplied with tweak32\n *  to it.\n *\n *  Note that the resulting point can not in general be represented by an x-only\n *  pubkey because it may have an odd Y coordinate. Instead, the output_pubkey\n *  is a normal secp256k1_pubkey.\n *\n *  Returns: 0 if the arguments are invalid or the resulting public key would be\n *           invalid (only when the tweak is the negation of the corresponding\n *           secret key). 1 otherwise.\n *\n *  Out:  output_pubkey: pointer to a public key to store the result. Will be set\n *                       to an invalid value if this function returns 0.\n *  In: internal_pubkey: pointer to an x-only pubkey to apply the tweak to.\n *              tweak32: pointer to a 32-byte tweak. If the tweak is invalid\n *                       according to secp256k1_ec_seckey_verify, this function\n *                       returns 0. For uniformly random 32-byte arrays the\n *                       chance of being invalid is negligible (around 1 in 2^128).\n */\nstatic SECP256K1_WARN_UNUSED_RESULT int secp256k1_xonly_pubkey_tweak_add(\n    secp256k1_pubkey *output_pubkey,\n    const secp256k1_xonly_pubkey *internal_pubkey,\n    const unsigned char *tweak32\n) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);\n#endif /* SECP256K1_EXTRAKEYS_H */\n"
  },
  {
    "path": "C/secp256k1/extrakeys_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2020 Jonas Nick                                       *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_EXTRAKEYS_IMPL\n#define SECP256K1_EXTRAKEYS_IMPL\n\n#include \"secp256k1.h\"\n#include \"extrakeys.h\"\n\nstatic SECP256K1_INLINE int secp256k1_xonly_pubkey_load(secp256k1_ge *ge, const secp256k1_xonly_pubkey *pubkey) {\n    return secp256k1_pubkey_load(ge, (const secp256k1_pubkey *) pubkey);\n}\n\nstatic SECP256K1_INLINE void secp256k1_xonly_pubkey_save(secp256k1_xonly_pubkey *pubkey, secp256k1_ge *ge) {\n    secp256k1_pubkey_save((secp256k1_pubkey *) pubkey, ge);\n}\n\nstatic int secp256k1_xonly_pubkey_parse(secp256k1_xonly_pubkey *pubkey, const unsigned char *input32) {\n    secp256k1_ge pk;\n    secp256k1_fe x;\n\n    ARG_CHECK(pubkey != NULL);\n    memset(pubkey, 0, sizeof(*pubkey));\n    ARG_CHECK(input32 != NULL);\n\n    if (!secp256k1_fe_set_b32(&x, input32)) {\n        return 0;\n    }\n    if (!secp256k1_ge_set_xo_var(&pk, &x, 0)) {\n        return 0;\n    }\n    if (!secp256k1_ge_is_in_correct_subgroup(&pk)) {\n        return 0;\n    }\n    secp256k1_xonly_pubkey_save(pubkey, &pk);\n    return 1;\n}\n\nstatic int secp256k1_xonly_pubkey_serialize(unsigned char *output32, const secp256k1_xonly_pubkey *pubkey) {\n    secp256k1_ge pk;\n\n    ARG_CHECK(output32 != NULL);\n    memset(output32, 0, 32);\n    ARG_CHECK(pubkey != NULL);\n\n    if (!secp256k1_xonly_pubkey_load(&pk, pubkey)) {\n        return 0;\n    }\n    secp256k1_fe_get_b32(output32, &pk.x);\n    return 1;\n}\n\n/** Keeps a group element as is if it has an even Y and otherwise negates it.\n *  y_parity is set to 0 in the former case and to 1 in the latter case.\n *  Requires that the coordinates of r are normalized. */\nstatic int secp256k1_extrakeys_ge_even_y(secp256k1_ge *r) {\n    int y_parity = 0;\n    VERIFY_CHECK(!secp256k1_ge_is_infinity(r));\n\n    if (secp256k1_fe_is_odd(&r->y)) {\n        secp256k1_fe_negate(&r->y, &r->y, 1);\n        y_parity = 1;\n    }\n    return y_parity;\n}\n\nstatic int secp256k1_xonly_pubkey_from_pubkey(secp256k1_xonly_pubkey *xonly_pubkey, int *pk_parity, const secp256k1_pubkey *pubkey) {\n    secp256k1_ge pk;\n    int tmp;\n\n    ARG_CHECK(xonly_pubkey != NULL);\n    ARG_CHECK(pubkey != NULL);\n\n    if (!secp256k1_pubkey_load(&pk, pubkey)) {\n        return 0;\n    }\n    tmp = secp256k1_extrakeys_ge_even_y(&pk);\n    if (pk_parity != NULL) {\n        *pk_parity = tmp;\n    }\n    secp256k1_xonly_pubkey_save(xonly_pubkey, &pk);\n    return 1;\n}\n\nstatic int secp256k1_xonly_pubkey_tweak_add(secp256k1_pubkey *output_pubkey, const secp256k1_xonly_pubkey *internal_pubkey, const unsigned char *tweak32) {\n    secp256k1_ge pk;\n\n    ARG_CHECK(output_pubkey != NULL);\n    memset(output_pubkey, 0, sizeof(*output_pubkey));\n    ARG_CHECK(internal_pubkey != NULL);\n    ARG_CHECK(tweak32 != NULL);\n\n    if (!secp256k1_xonly_pubkey_load(&pk, internal_pubkey)\n        || !secp256k1_ec_pubkey_tweak_add_helper(&pk, tweak32)) {\n        return 0;\n    }\n    secp256k1_pubkey_save(output_pubkey, &pk);\n    return 1;\n}\n#endif\n"
  },
  {
    "path": "C/secp256k1/field.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_FIELD_H\n#define SECP256K1_FIELD_H\n\n/** Field element module.\n *\n *  Field elements can be represented in several ways, but code accessing\n *  it (and implementations) need to take certain properties into account:\n *  - Each field element can be normalized or not.\n *  - Each field element has a magnitude, which represents how far away\n *    its representation is away from normalization. Normalized elements\n *    always have a magnitude of 0 or 1, but a magnitude of 1 doesn't\n *    imply normality.\n */\n\n#include \"util.h\"\n\n#if defined(SECP256K1_WIDEMUL_INT128)\n#include \"field_5x52.h\"\n#else\n#error \"Please select wide multiplication implementation\"\n#endif\n\nstatic const secp256k1_fe secp256k1_fe_one = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1);\nstatic const secp256k1_fe secp256k1_const_beta = SECP256K1_FE_CONST(\n    0x7ae96a2bul, 0x657c0710ul, 0x6e64479eul, 0xac3434e9ul,\n    0x9cf04975ul, 0x12f58995ul, 0xc1396c28ul, 0x719501eeul\n);\n\n#if 0\n/** Normalize a field element. This brings the field element to a canonical representation, reduces\n *  its magnitude to 1, and reduces it modulo field size `p`.\n */\nstatic void secp256k1_fe_normalize(secp256k1_fe *r);\n#endif\n\n/** Weakly normalize a field element: reduce its magnitude to 1, but don't fully normalize. */\nstatic void secp256k1_fe_normalize_weak(secp256k1_fe *r);\n\n/** Normalize a field element, without constant-time guarantee. */\nstatic void secp256k1_fe_normalize_var(secp256k1_fe *r);\n\n#if 0\n/** Verify whether a field element represents zero i.e. would normalize to a zero value. */\nstatic int secp256k1_fe_normalizes_to_zero(const secp256k1_fe *r);\n#endif\n\n/** Verify whether a field element represents zero i.e. would normalize to a zero value,\n *  without constant-time guarantee. */\nstatic int secp256k1_fe_normalizes_to_zero_var(const secp256k1_fe *r);\n\n/** Set a field element equal to a small (not greater than 0x7FFF), non-negative integer.\n *  Resulting field element is normalized; it has magnitude 0 if a == 0, and magnitude 1 otherwise.\n */\nstatic void secp256k1_fe_set_int(secp256k1_fe *r, int a);\n\n/** Sets a field element equal to zero, initializing all fields. */\nstatic void secp256k1_fe_clear(secp256k1_fe *a);\n\n/** Verify whether a field element is zero. Requires the input to be normalized. */\nstatic int secp256k1_fe_is_zero(const secp256k1_fe *a);\n\n/** Check the \"oddness\" of a field element. Requires the input to be normalized. */\nstatic int secp256k1_fe_is_odd(const secp256k1_fe *a);\n\n#if 0\n/** Compare two field elements. Requires magnitude-1 inputs. */\nstatic int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b);\n#endif\n\n/** Same as secp256k1_fe_equal, but may be variable time. */\nstatic int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b);\n\n#if 0\n/** Compare two field elements. Requires both inputs to be normalized */\nstatic int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b);\n#endif\n\n/** Set a field element equal to 32-byte big endian value. If successful, the resulting field element is normalized. */\nstatic int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a);\n\n/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */\nstatic void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a);\n\n/** Set a field element equal to the additive inverse of another. Takes a maximum magnitude of the input\n *  as an argument. The magnitude of the output is one higher. */\nstatic void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m);\n\n/** Adds a small integer (up to 0x7FFF) to r. The resulting magnitude increases by one. */\nstatic void secp256k1_fe_add_int(secp256k1_fe *r, int a);\n\n/** Multiplies the passed field element with a small integer constant. Multiplies the magnitude by that\n *  small integer. */\nstatic void secp256k1_fe_mul_int(secp256k1_fe *r, int a);\n\n/** Adds a field element to another. The result has the sum of the inputs' magnitudes as magnitude. */\nstatic void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a);\n\n/** Sets a field element to be the product of two others. Requires the inputs' magnitudes to be at most 8.\n *  The output magnitude is 1 (but not guaranteed to be normalized). */\nstatic void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b);\n\n/** Sets a field element to be the square of another. Requires the input's magnitude to be at most 8.\n *  The output magnitude is 1 (but not guaranteed to be normalized). */\nstatic void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a);\n\n/** If a has a square root, it is computed in r and 1 is returned. If a does not\n *  have a square root, the root of its negation is computed and 0 is returned.\n *  The input's magnitude can be at most 8. The output magnitude is 1 (but not\n *  guaranteed to be normalized). The result in r will always be a square\n *  itself.\n *  No constant-time guarantee. */\nstatic int secp256k1_fe_sqrt_var(secp256k1_fe *r, const secp256k1_fe *a);\n\n#if 0\n/** Sets a field element to be the (modular) inverse of another. Requires the input's magnitude to be\n *  at most 8. The output magnitude is 1 (but not guaranteed to be normalized). */\nstatic void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a);\n#endif\n\n/** Potentially faster version of secp256k1_fe_inv, without constant-time guarantee. */\nstatic void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a);\n\n/** Convert a field element to the storage type. */\nstatic void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a);\n\n/** Convert a field element back from the storage type. */\nstatic void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a);\n\n#if 0\n/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time.  Both *r and *a must be initialized.*/\nstatic void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag);\n#endif\n\n/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time.  Both *r and *a must be initialized.*/\nstatic void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag);\n\n/** Halves the value of a field element modulo the field prime. Constant-time.\n *  For an input magnitude 'm', the output magnitude is set to 'floor(m/2) + 1'.\n *  The output is not guaranteed to be normalized, regardless of the input. */\nstatic void secp256k1_fe_half(secp256k1_fe *r);\n\n#if 0\n/** Sets each limb of 'r' to its upper bound at magnitude 'm'. The output will also have its\n *  magnitude set to 'm' and is normalized if (and only if) 'm' is zero. */\nstatic void secp256k1_fe_get_bounds(secp256k1_fe *r, int m);\n\n/** Determine whether a is a square (modulo p). */\nstatic int secp256k1_fe_is_square_var(const secp256k1_fe *a);\n#endif\n\n#endif /* SECP256K1_FIELD_H */\n"
  },
  {
    "path": "C/secp256k1/field_5x52.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_FIELD_REPR_H\n#define SECP256K1_FIELD_REPR_H\n\n#include <stdint.h>\n\ntypedef struct {\n    /* X = sum(i=0..4, n[i]*2^(i*52)) mod p\n     * where p = 2^256 - 0x1000003D1\n     */\n    uint64_t n[5];\n#ifdef VERIFY\n    int magnitude;\n    int normalized;\n#endif\n} secp256k1_fe;\n\n/* Unpacks a constant into a overlapping multi-limbed FE element. */\n#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \\\n    (d0) | (((uint64_t)(d1) & 0xFFFFFUL) << 32), \\\n    ((uint64_t)(d1) >> 20) | (((uint64_t)(d2)) << 12) | (((uint64_t)(d3) & 0xFFUL) << 44), \\\n    ((uint64_t)(d3) >> 8) | (((uint64_t)(d4) & 0xFFFFFFFUL) << 24), \\\n    ((uint64_t)(d4) >> 28) | (((uint64_t)(d5)) << 4) | (((uint64_t)(d6) & 0xFFFFUL) << 36), \\\n    ((uint64_t)(d6) >> 16) | (((uint64_t)(d7)) << 16) \\\n}\n\n#ifdef VERIFY\n#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1}\n#else\n#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))}\n#endif\n\ntypedef struct {\n    uint64_t n[4];\n} secp256k1_fe_storage;\n\n#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ \\\n    (d0) | (((uint64_t)(d1)) << 32), \\\n    (d2) | (((uint64_t)(d3)) << 32), \\\n    (d4) | (((uint64_t)(d5)) << 32), \\\n    (d6) | (((uint64_t)(d7)) << 32) \\\n}}\n\n#define SECP256K1_FE_STORAGE_CONST_GET(d) \\\n    (uint32_t)(d.n[3] >> 32), (uint32_t)d.n[3], \\\n    (uint32_t)(d.n[2] >> 32), (uint32_t)d.n[2], \\\n    (uint32_t)(d.n[1] >> 32), (uint32_t)d.n[1], \\\n    (uint32_t)(d.n[0] >> 32), (uint32_t)d.n[0]\n\n#endif /* SECP256K1_FIELD_REPR_H */\n"
  },
  {
    "path": "C/secp256k1/field_5x52_asm_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013-2014 Diederik Huys, Pieter Wuille                *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n/**\n * Changelog:\n * - March 2013, Diederik Huys:    original version\n * - November 2014, Pieter Wuille: updated to use Peter Dettman's parallel multiplication algorithm\n * - December 2014, Pieter Wuille: converted from YASM to GCC inline assembly\n */\n\n#ifndef SECP256K1_FIELD_INNER5X52_IMPL_H\n#define SECP256K1_FIELD_INNER5X52_IMPL_H\n\nSECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) {\n/**\n * Registers: rdx:rax = multiplication accumulator\n *            r9:r8   = c\n *            r15:rcx = d\n *            r10-r14 = a0-a4\n *            rbx     = b\n *            rdi     = r\n *            rsi     = a / t?\n */\n  uint64_t tmp1, tmp2, tmp3;\n__asm__ __volatile__(\n    \"movq 0(%%rsi),%%r10\\n\"\n    \"movq 8(%%rsi),%%r11\\n\"\n    \"movq 16(%%rsi),%%r12\\n\"\n    \"movq 24(%%rsi),%%r13\\n\"\n    \"movq 32(%%rsi),%%r14\\n\"\n\n    /* d += a3 * b0 */\n    \"movq 0(%%rbx),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"movq %%rax,%%rcx\\n\"\n    \"movq %%rdx,%%r15\\n\"\n    /* d += a2 * b1 */\n    \"movq 8(%%rbx),%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a1 * b2 */\n    \"movq 16(%%rbx),%%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d = a0 * b3 */\n    \"movq 24(%%rbx),%%rax\\n\"\n    \"mulq %%r10\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* c = a4 * b4 */\n    \"movq 32(%%rbx),%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"movq %%rax,%%r8\\n\"\n    \"movq %%rdx,%%r9\\n\"\n    /* d += (c & M) * R */\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* c >>= 52 (%%r8 only) */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    /* t3 (tmp1) = d & M */\n    \"movq %%rcx,%%rsi\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rsi\\n\"\n    \"movq %%rsi,%q1\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%r15,%%rcx\\n\"\n    \"xorq %%r15,%%r15\\n\"\n    /* d += a4 * b0 */\n    \"movq 0(%%rbx),%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a3 * b1 */\n    \"movq 8(%%rbx),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a2 * b2 */\n    \"movq 16(%%rbx),%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a1 * b3 */\n    \"movq 24(%%rbx),%%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a0 * b4 */\n    \"movq 32(%%rbx),%%rax\\n\"\n    \"mulq %%r10\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += c * R */\n    \"movq %%r8,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* t4 = d & M (%%rsi) */\n    \"movq %%rcx,%%rsi\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rsi\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%r15,%%rcx\\n\"\n    \"xorq %%r15,%%r15\\n\"\n    /* tx = t4 >> 48 (tmp3) */\n    \"movq %%rsi,%%rax\\n\"\n    \"shrq $48,%%rax\\n\"\n    \"movq %%rax,%q3\\n\"\n    /* t4 &= (M >> 4) (tmp2) */\n    \"movq $0xffffffffffff,%%rax\\n\"\n    \"andq %%rax,%%rsi\\n\"\n    \"movq %%rsi,%q2\\n\"\n    /* c = a0 * b0 */\n    \"movq 0(%%rbx),%%rax\\n\"\n    \"mulq %%r10\\n\"\n    \"movq %%rax,%%r8\\n\"\n    \"movq %%rdx,%%r9\\n\"\n    /* d += a4 * b1 */\n    \"movq 8(%%rbx),%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a3 * b2 */\n    \"movq 16(%%rbx),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a2 * b3 */\n    \"movq 24(%%rbx),%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a1 * b4 */\n    \"movq 32(%%rbx),%%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* u0 = d & M (%%rsi) */\n    \"movq %%rcx,%%rsi\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rsi\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%r15,%%rcx\\n\"\n    \"xorq %%r15,%%r15\\n\"\n    /* u0 = (u0 << 4) | tx (%%rsi) */\n    \"shlq $4,%%rsi\\n\"\n    \"movq %q3,%%rax\\n\"\n    \"orq %%rax,%%rsi\\n\"\n    /* c += u0 * (R >> 4) */\n    \"movq $0x1000003d1,%%rax\\n\"\n    \"mulq %%rsi\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* r[0] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rax\\n\"\n    \"movq %%rax,0(%%rdi)\\n\"\n    /* c >>= 52 */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    \"xorq %%r9,%%r9\\n\"\n    /* c += a1 * b0 */\n    \"movq 0(%%rbx),%%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* c += a0 * b1 */\n    \"movq 8(%%rbx),%%rax\\n\"\n    \"mulq %%r10\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* d += a4 * b2 */\n    \"movq 16(%%rbx),%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a3 * b3 */\n    \"movq 24(%%rbx),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a2 * b4 */\n    \"movq 32(%%rbx),%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* c += (d & M) * R */\n    \"movq %%rcx,%%rax\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%r15,%%rcx\\n\"\n    \"xorq %%r15,%%r15\\n\"\n    /* r[1] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rax\\n\"\n    \"movq %%rax,8(%%rdi)\\n\"\n    /* c >>= 52 */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    \"xorq %%r9,%%r9\\n\"\n    /* c += a2 * b0 */\n    \"movq 0(%%rbx),%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* c += a1 * b1 */\n    \"movq 8(%%rbx),%%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* c += a0 * b2 (last use of %%r10 = a0) */\n    \"movq 16(%%rbx),%%rax\\n\"\n    \"mulq %%r10\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* fetch t3 (%%r10, overwrites a0), t4 (%%rsi) */\n    \"movq %q2,%%rsi\\n\"\n    \"movq %q1,%%r10\\n\"\n    /* d += a4 * b3 */\n    \"movq 24(%%rbx),%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* d += a3 * b4 */\n    \"movq 32(%%rbx),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax,%%rcx\\n\"\n    \"adcq %%rdx,%%r15\\n\"\n    /* c += (d & M) * R */\n    \"movq %%rcx,%%rax\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* d >>= 52 (%%rcx only) */\n    \"shrdq $52,%%r15,%%rcx\\n\"\n    /* r[2] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rax\\n\"\n    \"movq %%rax,16(%%rdi)\\n\"\n    /* c >>= 52 */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    \"xorq %%r9,%%r9\\n\"\n    /* c += t3 */\n    \"addq %%r10,%%r8\\n\"\n    /* c += d * R */\n    \"movq %%rcx,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* r[3] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"movq $0xfffffffffffff,%%rdx\\n\"\n    \"andq %%rdx,%%rax\\n\"\n    \"movq %%rax,24(%%rdi)\\n\"\n    /* c >>= 52 (%%r8 only) */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    /* c += t4 (%%r8 only) */\n    \"addq %%rsi,%%r8\\n\"\n    /* r[4] = c */\n    \"movq %%r8,32(%%rdi)\\n\"\n: \"+S\"(a), \"=m\"(tmp1), \"=m\"(tmp2), \"=m\"(tmp3)\n: \"b\"(b), \"D\"(r)\n: \"%rax\", \"%rcx\", \"%rdx\", \"%r8\", \"%r9\", \"%r10\", \"%r11\", \"%r12\", \"%r13\", \"%r14\", \"%r15\", \"cc\", \"memory\"\n);\n}\n\nSECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) {\n/**\n * Registers: rdx:rax = multiplication accumulator\n *            r9:r8   = c\n *            rcx:rbx = d\n *            r10-r14 = a0-a4\n *            r15     = M (0xfffffffffffff)\n *            rdi     = r\n *            rsi     = a / t?\n */\n  uint64_t tmp1, tmp2, tmp3;\n__asm__ __volatile__(\n    \"movq 0(%%rsi),%%r10\\n\"\n    \"movq 8(%%rsi),%%r11\\n\"\n    \"movq 16(%%rsi),%%r12\\n\"\n    \"movq 24(%%rsi),%%r13\\n\"\n    \"movq 32(%%rsi),%%r14\\n\"\n    \"movq $0xfffffffffffff,%%r15\\n\"\n\n    /* d = (a0*2) * a3 */\n    \"leaq (%%r10,%%r10,1),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"movq %%rax,%%rbx\\n\"\n    \"movq %%rdx,%%rcx\\n\"\n    /* d += (a1*2) * a2 */\n    \"leaq (%%r11,%%r11,1),%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* c = a4 * a4 */\n    \"movq %%r14,%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"movq %%rax,%%r8\\n\"\n    \"movq %%rdx,%%r9\\n\"\n    /* d += (c & M) * R */\n    \"andq %%r15,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* c >>= 52 (%%r8 only) */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    /* t3 (tmp1) = d & M */\n    \"movq %%rbx,%%rsi\\n\"\n    \"andq %%r15,%%rsi\\n\"\n    \"movq %%rsi,%q1\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%rcx,%%rbx\\n\"\n    \"xorq %%rcx,%%rcx\\n\"\n    /* a4 *= 2 */\n    \"addq %%r14,%%r14\\n\"\n    /* d += a0 * a4 */\n    \"movq %%r10,%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* d+= (a1*2) * a3 */\n    \"leaq (%%r11,%%r11,1),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* d += a2 * a2 */\n    \"movq %%r12,%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* d += c * R */\n    \"movq %%r8,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* t4 = d & M (%%rsi) */\n    \"movq %%rbx,%%rsi\\n\"\n    \"andq %%r15,%%rsi\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%rcx,%%rbx\\n\"\n    \"xorq %%rcx,%%rcx\\n\"\n    /* tx = t4 >> 48 (tmp3) */\n    \"movq %%rsi,%%rax\\n\"\n    \"shrq $48,%%rax\\n\"\n    \"movq %%rax,%q3\\n\"\n    /* t4 &= (M >> 4) (tmp2) */\n    \"movq $0xffffffffffff,%%rax\\n\"\n    \"andq %%rax,%%rsi\\n\"\n    \"movq %%rsi,%q2\\n\"\n    /* c = a0 * a0 */\n    \"movq %%r10,%%rax\\n\"\n    \"mulq %%r10\\n\"\n    \"movq %%rax,%%r8\\n\"\n    \"movq %%rdx,%%r9\\n\"\n    /* d += a1 * a4 */\n    \"movq %%r11,%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* d += (a2*2) * a3 */\n    \"leaq (%%r12,%%r12,1),%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* u0 = d & M (%%rsi) */\n    \"movq %%rbx,%%rsi\\n\"\n    \"andq %%r15,%%rsi\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%rcx,%%rbx\\n\"\n    \"xorq %%rcx,%%rcx\\n\"\n    /* u0 = (u0 << 4) | tx (%%rsi) */\n    \"shlq $4,%%rsi\\n\"\n    \"movq %q3,%%rax\\n\"\n    \"orq %%rax,%%rsi\\n\"\n    /* c += u0 * (R >> 4) */\n    \"movq $0x1000003d1,%%rax\\n\"\n    \"mulq %%rsi\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* r[0] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"andq %%r15,%%rax\\n\"\n    \"movq %%rax,0(%%rdi)\\n\"\n    /* c >>= 52 */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    \"xorq %%r9,%%r9\\n\"\n    /* a0 *= 2 */\n    \"addq %%r10,%%r10\\n\"\n    /* c += a0 * a1 */\n    \"movq %%r10,%%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* d += a2 * a4 */\n    \"movq %%r12,%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* d += a3 * a3 */\n    \"movq %%r13,%%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* c += (d & M) * R */\n    \"movq %%rbx,%%rax\\n\"\n    \"andq %%r15,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* d >>= 52 */\n    \"shrdq $52,%%rcx,%%rbx\\n\"\n    \"xorq %%rcx,%%rcx\\n\"\n    /* r[1] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"andq %%r15,%%rax\\n\"\n    \"movq %%rax,8(%%rdi)\\n\"\n    /* c >>= 52 */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    \"xorq %%r9,%%r9\\n\"\n    /* c += a0 * a2 (last use of %%r10) */\n    \"movq %%r10,%%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* fetch t3 (%%r10, overwrites a0),t4 (%%rsi) */\n    \"movq %q2,%%rsi\\n\"\n    \"movq %q1,%%r10\\n\"\n    /* c += a1 * a1 */\n    \"movq %%r11,%%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* d += a3 * a4 */\n    \"movq %%r13,%%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax,%%rbx\\n\"\n    \"adcq %%rdx,%%rcx\\n\"\n    /* c += (d & M) * R */\n    \"movq %%rbx,%%rax\\n\"\n    \"andq %%r15,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* d >>= 52 (%%rbx only) */\n    \"shrdq $52,%%rcx,%%rbx\\n\"\n    /* r[2] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"andq %%r15,%%rax\\n\"\n    \"movq %%rax,16(%%rdi)\\n\"\n    /* c >>= 52 */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    \"xorq %%r9,%%r9\\n\"\n    /* c += t3 */\n    \"addq %%r10,%%r8\\n\"\n    /* c += d * R */\n    \"movq %%rbx,%%rax\\n\"\n    \"movq $0x1000003d10,%%rdx\\n\"\n    \"mulq %%rdx\\n\"\n    \"addq %%rax,%%r8\\n\"\n    \"adcq %%rdx,%%r9\\n\"\n    /* r[3] = c & M */\n    \"movq %%r8,%%rax\\n\"\n    \"andq %%r15,%%rax\\n\"\n    \"movq %%rax,24(%%rdi)\\n\"\n    /* c >>= 52 (%%r8 only) */\n    \"shrdq $52,%%r9,%%r8\\n\"\n    /* c += t4 (%%r8 only) */\n    \"addq %%rsi,%%r8\\n\"\n    /* r[4] = c */\n    \"movq %%r8,32(%%rdi)\\n\"\n: \"+S\"(a), \"=m\"(tmp1), \"=m\"(tmp2), \"=m\"(tmp3)\n: \"D\"(r)\n: \"%rax\", \"%rbx\", \"%rcx\", \"%rdx\", \"%r8\", \"%r9\", \"%r10\", \"%r11\", \"%r12\", \"%r13\", \"%r14\", \"%r15\", \"cc\", \"memory\"\n);\n}\n\n#endif /* SECP256K1_FIELD_INNER5X52_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/field_5x52_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_FIELD_REPR_IMPL_H\n#define SECP256K1_FIELD_REPR_IMPL_H\n\n#include \"util.h\"\n#include \"field.h\"\n#include \"modinv64_impl.h\"\n\n#if defined(USE_ASM_X86_64)\n#include \"field_5x52_asm_impl.h\"\n#else\n#include \"field_5x52_int128_impl.h\"\n#endif\n\n/** Implements arithmetic modulo FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F,\n *  represented as 5 uint64_t's in base 2^52, least significant first. Note that the limbs are allowed to\n *  contain >52 bits each.\n *\n *  Each field element has a 'magnitude' associated with it. Internally, a magnitude M means:\n *  - 2*M*(2^48-1) is the max (inclusive) of the most significant limb\n *  - 2*M*(2^52-1) is the max (inclusive) of the remaining limbs\n *\n *  Operations have different rules for propagating magnitude to their outputs. If an operation takes a\n *  magnitude M as a parameter, that means the magnitude of input field elements can be at most M (inclusive).\n *\n *  Each field element also has a 'normalized' flag. A field element is normalized if its magnitude is either\n *  0 or 1, and its value is already reduced modulo the order of the field.\n */\n\n#ifdef VERIFY\nstatic void secp256k1_fe_verify(const secp256k1_fe *a) {\n    const uint64_t *d = a->n;\n    int m = a->normalized ? 1 : 2 * a->magnitude, r = 1;\n   /* secp256k1 'p' value defined in \"Standards for Efficient Cryptography\" (SEC2) 2.7.1. */\n    r &= (d[0] <= 0xFFFFFFFFFFFFFULL * m);\n    r &= (d[1] <= 0xFFFFFFFFFFFFFULL * m);\n    r &= (d[2] <= 0xFFFFFFFFFFFFFULL * m);\n    r &= (d[3] <= 0xFFFFFFFFFFFFFULL * m);\n    r &= (d[4] <= 0x0FFFFFFFFFFFFULL * m);\n    r &= (a->magnitude >= 0);\n    r &= (a->magnitude <= 2048);\n    if (a->normalized) {\n        r &= (a->magnitude <= 1);\n        if (r && (d[4] == 0x0FFFFFFFFFFFFULL) && ((d[3] & d[2] & d[1]) == 0xFFFFFFFFFFFFFULL)) {\n            r &= (d[0] < 0xFFFFEFFFFFC2FULL);\n        }\n    }\n    VERIFY_CHECK(r == 1);\n}\n#endif\n\n#if 0\nstatic void secp256k1_fe_get_bounds(secp256k1_fe *r, int m) {\n    VERIFY_CHECK(m >= 0);\n    VERIFY_CHECK(m <= 2048);\n    r->n[0] = 0xFFFFFFFFFFFFFULL * 2 * m;\n    r->n[1] = 0xFFFFFFFFFFFFFULL * 2 * m;\n    r->n[2] = 0xFFFFFFFFFFFFFULL * 2 * m;\n    r->n[3] = 0xFFFFFFFFFFFFFULL * 2 * m;\n    r->n[4] = 0x0FFFFFFFFFFFFULL * 2 * m;\n#ifdef VERIFY\n    r->magnitude = m;\n    r->normalized = (m == 0);\n    secp256k1_fe_verify(r);\n#endif\n}\n\nstatic void secp256k1_fe_normalize(secp256k1_fe *r) {\n    uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];\n\n    /* Reduce t4 at the start so there will be at most a single carry from the first pass */\n    uint64_t m;\n    uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;\n\n    /* The first pass ensures the magnitude is 1, ... */\n    t0 += x * 0x1000003D1ULL;\n    t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;\n    t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1;\n    t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2;\n    t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3;\n\n    /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */\n    VERIFY_CHECK(t4 >> 49 == 0);\n\n    /* At most a single final reduction is needed; check if the value is >= the field characteristic */\n    x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL)\n        & (t0 >= 0xFFFFEFFFFFC2FULL));\n\n    /* Apply the final reduction (for constant-time behaviour, we do it always) */\n    t0 += x * 0x1000003D1ULL;\n    t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;\n    t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;\n    t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;\n    t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;\n\n    /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */\n    VERIFY_CHECK(t4 >> 48 == x);\n\n    /* Mask off the possible multiple of 2^256 from the final reduction */\n    t4 &= 0x0FFFFFFFFFFFFULL;\n\n    r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;\n\n#ifdef VERIFY\n    r->magnitude = 1;\n    r->normalized = 1;\n    secp256k1_fe_verify(r);\n#endif\n}\n#endif\n\nstatic void secp256k1_fe_normalize_weak(secp256k1_fe *r) {\n    uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];\n\n    /* Reduce t4 at the start so there will be at most a single carry from the first pass */\n    uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;\n\n    /* The first pass ensures the magnitude is 1, ... */\n    t0 += x * 0x1000003D1ULL;\n    t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;\n    t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;\n    t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;\n    t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;\n\n    /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */\n    VERIFY_CHECK(t4 >> 49 == 0);\n\n    r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;\n\n#ifdef VERIFY\n    r->magnitude = 1;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nstatic void secp256k1_fe_normalize_var(secp256k1_fe *r) {\n    uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];\n\n    /* Reduce t4 at the start so there will be at most a single carry from the first pass */\n    uint64_t m;\n    uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;\n\n    /* The first pass ensures the magnitude is 1, ... */\n    t0 += x * 0x1000003D1ULL;\n    t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;\n    t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1;\n    t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2;\n    t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3;\n\n    /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */\n    VERIFY_CHECK(t4 >> 49 == 0);\n\n    /* At most a single final reduction is needed; check if the value is >= the field characteristic */\n    x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL)\n        & (t0 >= 0xFFFFEFFFFFC2FULL));\n\n    if (x) {\n        t0 += 0x1000003D1ULL;\n        t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;\n        t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;\n        t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;\n        t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;\n\n        /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */\n        VERIFY_CHECK(t4 >> 48 == x);\n\n        /* Mask off the possible multiple of 2^256 from the final reduction */\n        t4 &= 0x0FFFFFFFFFFFFULL;\n    }\n\n    r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;\n\n#ifdef VERIFY\n    r->magnitude = 1;\n    r->normalized = 1;\n    secp256k1_fe_verify(r);\n#endif\n}\n\n#if 0\nstatic int secp256k1_fe_normalizes_to_zero(const secp256k1_fe *r) {\n    uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];\n\n    /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */\n    uint64_t z0, z1;\n\n    /* Reduce t4 at the start so there will be at most a single carry from the first pass */\n    uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;\n\n    /* The first pass ensures the magnitude is 1, ... */\n    t0 += x * 0x1000003D1ULL;\n    t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; z0  = t0; z1  = t0 ^ 0x1000003D0ULL;\n    t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1;\n    t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2;\n    t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3;\n                                                z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL;\n\n    /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */\n    VERIFY_CHECK(t4 >> 49 == 0);\n\n    return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL);\n}\n#endif\n\nstatic int secp256k1_fe_normalizes_to_zero_var(const secp256k1_fe *r) {\n    uint64_t t0, t1, t2, t3, t4;\n    uint64_t z0, z1;\n    uint64_t x;\n\n    t0 = r->n[0];\n    t4 = r->n[4];\n\n    /* Reduce t4 at the start so there will be at most a single carry from the first pass */\n    x = t4 >> 48;\n\n    /* The first pass ensures the magnitude is 1, ... */\n    t0 += x * 0x1000003D1ULL;\n\n    /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */\n    z0 = t0 & 0xFFFFFFFFFFFFFULL;\n    z1 = z0 ^ 0x1000003D0ULL;\n\n    /* Fast return path should catch the majority of cases */\n    if ((z0 != 0ULL) & (z1 != 0xFFFFFFFFFFFFFULL)) {\n        return 0;\n    }\n\n    t1 = r->n[1];\n    t2 = r->n[2];\n    t3 = r->n[3];\n\n    t4 &= 0x0FFFFFFFFFFFFULL;\n\n    t1 += (t0 >> 52);\n    t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1;\n    t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2;\n    t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3;\n                                                z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL;\n\n    /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */\n    VERIFY_CHECK(t4 >> 49 == 0);\n\n    return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL);\n}\n\nSECP256K1_INLINE static void secp256k1_fe_set_int(secp256k1_fe *r, int a) {\n    VERIFY_CHECK(0 <= a && a <= 0x7FFF);\n    r->n[0] = a;\n    r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0;\n#ifdef VERIFY\n    r->magnitude = (a != 0);\n    r->normalized = 1;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nSECP256K1_INLINE static int secp256k1_fe_is_zero(const secp256k1_fe *a) {\n    const uint64_t *t = a->n;\n#ifdef VERIFY\n    VERIFY_CHECK(a->normalized);\n    secp256k1_fe_verify(a);\n#endif\n    return (t[0] | t[1] | t[2] | t[3] | t[4]) == 0;\n}\n\nSECP256K1_INLINE static int secp256k1_fe_is_odd(const secp256k1_fe *a) {\n#ifdef VERIFY\n    VERIFY_CHECK(a->normalized);\n    secp256k1_fe_verify(a);\n#endif\n    return a->n[0] & 1;\n}\n\nSECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) {\n    int i;\n#ifdef VERIFY\n    a->magnitude = 0;\n    a->normalized = 1;\n#endif\n    for (i=0; i<5; i++) {\n        a->n[i] = 0;\n    }\n}\n\n#if 0\nstatic int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b) {\n    int i;\n#ifdef VERIFY\n    VERIFY_CHECK(a->normalized);\n    VERIFY_CHECK(b->normalized);\n    secp256k1_fe_verify(a);\n    secp256k1_fe_verify(b);\n#endif\n    for (i = 4; i >= 0; i--) {\n        if (a->n[i] > b->n[i]) {\n            return 1;\n        }\n        if (a->n[i] < b->n[i]) {\n            return -1;\n        }\n    }\n    return 0;\n}\n#endif\n\nstatic int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a) {\n    int ret;\n    r->n[0] = (uint64_t)a[31]\n            | ((uint64_t)a[30] << 8)\n            | ((uint64_t)a[29] << 16)\n            | ((uint64_t)a[28] << 24)\n            | ((uint64_t)a[27] << 32)\n            | ((uint64_t)a[26] << 40)\n            | ((uint64_t)(a[25] & 0xF)  << 48);\n    r->n[1] = (uint64_t)((a[25] >> 4) & 0xF)\n            | ((uint64_t)a[24] << 4)\n            | ((uint64_t)a[23] << 12)\n            | ((uint64_t)a[22] << 20)\n            | ((uint64_t)a[21] << 28)\n            | ((uint64_t)a[20] << 36)\n            | ((uint64_t)a[19] << 44);\n    r->n[2] = (uint64_t)a[18]\n            | ((uint64_t)a[17] << 8)\n            | ((uint64_t)a[16] << 16)\n            | ((uint64_t)a[15] << 24)\n            | ((uint64_t)a[14] << 32)\n            | ((uint64_t)a[13] << 40)\n            | ((uint64_t)(a[12] & 0xF) << 48);\n    r->n[3] = (uint64_t)((a[12] >> 4) & 0xF)\n            | ((uint64_t)a[11] << 4)\n            | ((uint64_t)a[10] << 12)\n            | ((uint64_t)a[9]  << 20)\n            | ((uint64_t)a[8]  << 28)\n            | ((uint64_t)a[7]  << 36)\n            | ((uint64_t)a[6]  << 44);\n    r->n[4] = (uint64_t)a[5]\n            | ((uint64_t)a[4] << 8)\n            | ((uint64_t)a[3] << 16)\n            | ((uint64_t)a[2] << 24)\n            | ((uint64_t)a[1] << 32)\n            | ((uint64_t)a[0] << 40);\n    ret = !((r->n[4] == 0x0FFFFFFFFFFFFULL) & ((r->n[3] & r->n[2] & r->n[1]) == 0xFFFFFFFFFFFFFULL) & (r->n[0] >= 0xFFFFEFFFFFC2FULL));\n#ifdef VERIFY\n    r->magnitude = 1;\n    if (ret) {\n        r->normalized = 1;\n        secp256k1_fe_verify(r);\n    } else {\n        r->normalized = 0;\n    }\n#endif\n    return ret;\n}\n\n/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */\nstatic void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a) {\n#ifdef VERIFY\n    VERIFY_CHECK(a->normalized);\n    secp256k1_fe_verify(a);\n#endif\n    r[0] = (a->n[4] >> 40) & 0xFF;\n    r[1] = (a->n[4] >> 32) & 0xFF;\n    r[2] = (a->n[4] >> 24) & 0xFF;\n    r[3] = (a->n[4] >> 16) & 0xFF;\n    r[4] = (a->n[4] >> 8) & 0xFF;\n    r[5] = a->n[4] & 0xFF;\n    r[6] = (a->n[3] >> 44) & 0xFF;\n    r[7] = (a->n[3] >> 36) & 0xFF;\n    r[8] = (a->n[3] >> 28) & 0xFF;\n    r[9] = (a->n[3] >> 20) & 0xFF;\n    r[10] = (a->n[3] >> 12) & 0xFF;\n    r[11] = (a->n[3] >> 4) & 0xFF;\n    r[12] = ((a->n[2] >> 48) & 0xF) | ((a->n[3] & 0xF) << 4);\n    r[13] = (a->n[2] >> 40) & 0xFF;\n    r[14] = (a->n[2] >> 32) & 0xFF;\n    r[15] = (a->n[2] >> 24) & 0xFF;\n    r[16] = (a->n[2] >> 16) & 0xFF;\n    r[17] = (a->n[2] >> 8) & 0xFF;\n    r[18] = a->n[2] & 0xFF;\n    r[19] = (a->n[1] >> 44) & 0xFF;\n    r[20] = (a->n[1] >> 36) & 0xFF;\n    r[21] = (a->n[1] >> 28) & 0xFF;\n    r[22] = (a->n[1] >> 20) & 0xFF;\n    r[23] = (a->n[1] >> 12) & 0xFF;\n    r[24] = (a->n[1] >> 4) & 0xFF;\n    r[25] = ((a->n[0] >> 48) & 0xF) | ((a->n[1] & 0xF) << 4);\n    r[26] = (a->n[0] >> 40) & 0xFF;\n    r[27] = (a->n[0] >> 32) & 0xFF;\n    r[28] = (a->n[0] >> 24) & 0xFF;\n    r[29] = (a->n[0] >> 16) & 0xFF;\n    r[30] = (a->n[0] >> 8) & 0xFF;\n    r[31] = a->n[0] & 0xFF;\n}\n\nSECP256K1_INLINE static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m) {\n#ifdef VERIFY\n    VERIFY_CHECK(a->magnitude <= m);\n    secp256k1_fe_verify(a);\n    VERIFY_CHECK(0xFFFFEFFFFFC2FULL * 2 * (m + 1) >= 0xFFFFFFFFFFFFFULL * 2 * m);\n    VERIFY_CHECK(0xFFFFFFFFFFFFFULL * 2 * (m + 1) >= 0xFFFFFFFFFFFFFULL * 2 * m);\n    VERIFY_CHECK(0x0FFFFFFFFFFFFULL * 2 * (m + 1) >= 0x0FFFFFFFFFFFFULL * 2 * m);\n#endif\n    r->n[0] = 0xFFFFEFFFFFC2FULL * 2 * (m + 1) - a->n[0];\n    r->n[1] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[1];\n    r->n[2] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[2];\n    r->n[3] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[3];\n    r->n[4] = 0x0FFFFFFFFFFFFULL * 2 * (m + 1) - a->n[4];\n#ifdef VERIFY\n    r->magnitude = m + 1;\n    r->normalized = 0;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nSECP256K1_INLINE static void secp256k1_fe_mul_int(secp256k1_fe *r, int a) {\n    r->n[0] *= a;\n    r->n[1] *= a;\n    r->n[2] *= a;\n    r->n[3] *= a;\n    r->n[4] *= a;\n#ifdef VERIFY\n    r->magnitude *= a;\n    r->normalized = 0;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nSECP256K1_INLINE static void secp256k1_fe_add_int(secp256k1_fe *r, int a) {\n#ifdef VERIFY\n    secp256k1_fe_verify(r);\n    VERIFY_CHECK(a >= 0);\n    VERIFY_CHECK(a <= 0x7FFF);\n#endif\n    r->n[0] += a;\n#ifdef VERIFY\n    r->magnitude += 1;\n    r->normalized = 0;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nSECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a) {\n#ifdef VERIFY\n    secp256k1_fe_verify(a);\n#endif\n    r->n[0] += a->n[0];\n    r->n[1] += a->n[1];\n    r->n[2] += a->n[2];\n    r->n[3] += a->n[3];\n    r->n[4] += a->n[4];\n#ifdef VERIFY\n    r->magnitude += a->magnitude;\n    r->normalized = 0;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nstatic void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {\n#ifdef VERIFY\n    VERIFY_CHECK(a->magnitude <= 8);\n    VERIFY_CHECK(b->magnitude <= 8);\n    secp256k1_fe_verify(a);\n    secp256k1_fe_verify(b);\n    VERIFY_CHECK(r != b);\n    VERIFY_CHECK(a != b);\n#endif\n    secp256k1_fe_mul_inner(r->n, a->n, b->n);\n#ifdef VERIFY\n    r->magnitude = 1;\n    r->normalized = 0;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nstatic void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {\n#ifdef VERIFY\n    VERIFY_CHECK(a->magnitude <= 8);\n    secp256k1_fe_verify(a);\n#endif\n    secp256k1_fe_sqr_inner(r->n, a->n);\n#ifdef VERIFY\n    r->magnitude = 1;\n    r->normalized = 0;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nstatic SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag) {\n    uint64_t mask0, mask1;\n#if 0\n    SECP256K1_CHECKMEM_CHECK_VERIFY(r->n, sizeof(r->n));\n#endif\n    mask0 = flag + ~((uint64_t)0);\n    mask1 = ~mask0;\n    r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);\n    r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);\n    r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);\n    r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);\n    r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);\n#ifdef VERIFY\n    if (flag) {\n        r->magnitude = a->magnitude;\n        r->normalized = a->normalized;\n    }\n#endif\n}\n\nstatic SECP256K1_INLINE void secp256k1_fe_half(secp256k1_fe *r) {\n    uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];\n    uint64_t one = (uint64_t)1;\n    uint64_t mask = -(t0 & one) >> 12;\n\n#ifdef VERIFY\n    secp256k1_fe_verify(r);\n    VERIFY_CHECK(r->magnitude < 32);\n#endif\n\n    /* Bounds analysis (over the rationals).\n     *\n     * Let m = r->magnitude\n     *     C = 0xFFFFFFFFFFFFFULL * 2\n     *     D = 0x0FFFFFFFFFFFFULL * 2\n     *\n     * Initial bounds: t0..t3 <= C * m\n     *                     t4 <= D * m\n     */\n\n    t0 += 0xFFFFEFFFFFC2FULL & mask;\n    t1 += mask;\n    t2 += mask;\n    t3 += mask;\n    t4 += mask >> 4;\n\n    VERIFY_CHECK((t0 & one) == 0);\n\n    /* t0..t3: added <= C/2\n     *     t4: added <= D/2\n     *\n     * Current bounds: t0..t3 <= C * (m + 1/2)\n     *                     t4 <= D * (m + 1/2)\n     */\n\n    r->n[0] = (t0 >> 1) + ((t1 & one) << 51);\n    r->n[1] = (t1 >> 1) + ((t2 & one) << 51);\n    r->n[2] = (t2 >> 1) + ((t3 & one) << 51);\n    r->n[3] = (t3 >> 1) + ((t4 & one) << 51);\n    r->n[4] = (t4 >> 1);\n\n    /* t0..t3: shifted right and added <= C/4 + 1/2\n     *     t4: shifted right\n     *\n     * Current bounds: t0..t3 <= C * (m/2 + 1/2)\n     *                     t4 <= D * (m/2 + 1/4)\n     */\n\n#ifdef VERIFY\n    /* Therefore the output magnitude (M) has to be set such that:\n     *     t0..t3: C * M >= C * (m/2 + 1/2)\n     *         t4: D * M >= D * (m/2 + 1/4)\n     *\n     * It suffices for all limbs that, for any input magnitude m:\n     *     M >= m/2 + 1/2\n     *\n     * and since we want the smallest such integer value for M:\n     *     M == floor(m/2) + 1\n     */\n    r->magnitude = (r->magnitude >> 1) + 1;\n    r->normalized = 0;\n    secp256k1_fe_verify(r);\n#endif\n}\n\n#if 0\nstatic SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag) {\n    uint64_t mask0, mask1;\n    SECP256K1_CHECKMEM_CHECK_VERIFY(r->n, sizeof(r->n));\n    mask0 = flag + ~((uint64_t)0);\n    mask1 = ~mask0;\n    r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);\n    r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);\n    r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);\n    r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);\n}\n#endif\n\nstatic void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {\n#ifdef VERIFY\n    VERIFY_CHECK(a->normalized);\n#endif\n    r->n[0] = a->n[0] | a->n[1] << 52;\n    r->n[1] = a->n[1] >> 12 | a->n[2] << 40;\n    r->n[2] = a->n[2] >> 24 | a->n[3] << 28;\n    r->n[3] = a->n[3] >> 36 | a->n[4] << 16;\n}\n\nstatic SECP256K1_INLINE void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a) {\n    r->n[0] = a->n[0] & 0xFFFFFFFFFFFFFULL;\n    r->n[1] = a->n[0] >> 52 | ((a->n[1] << 12) & 0xFFFFFFFFFFFFFULL);\n    r->n[2] = a->n[1] >> 40 | ((a->n[2] << 24) & 0xFFFFFFFFFFFFFULL);\n    r->n[3] = a->n[2] >> 28 | ((a->n[3] << 36) & 0xFFFFFFFFFFFFFULL);\n    r->n[4] = a->n[3] >> 16;\n#ifdef VERIFY\n    r->magnitude = 1;\n    r->normalized = 1;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nstatic void secp256k1_fe_from_signed62(secp256k1_fe *r, const secp256k1_modinv64_signed62 *a) {\n    const uint64_t M52 = UINT64_MAX >> 12;\n    const uint64_t a0 = a->v[0], a1 = a->v[1], a2 = a->v[2], a3 = a->v[3], a4 = a->v[4];\n\n    /* The output from secp256k1_modinv64{_var} should be normalized to range [0,modulus), and\n     * have limbs in [0,2^62). The modulus is < 2^256, so the top limb must be below 2^(256-62*4).\n     */\n    VERIFY_CHECK(a0 >> 62 == 0);\n    VERIFY_CHECK(a1 >> 62 == 0);\n    VERIFY_CHECK(a2 >> 62 == 0);\n    VERIFY_CHECK(a3 >> 62 == 0);\n    VERIFY_CHECK(a4 >> 8 == 0);\n\n    r->n[0] =  a0                   & M52;\n    r->n[1] = (a0 >> 52 | a1 << 10) & M52;\n    r->n[2] = (a1 >> 42 | a2 << 20) & M52;\n    r->n[3] = (a2 >> 32 | a3 << 30) & M52;\n    r->n[4] = (a3 >> 22 | a4 << 40);\n\n#ifdef VERIFY\n    r->magnitude = 1;\n    r->normalized = 1;\n    secp256k1_fe_verify(r);\n#endif\n}\n\nstatic void secp256k1_fe_to_signed62(secp256k1_modinv64_signed62 *r, const secp256k1_fe *a) {\n    const uint64_t M62 = UINT64_MAX >> 2;\n    const uint64_t a0 = a->n[0], a1 = a->n[1], a2 = a->n[2], a3 = a->n[3], a4 = a->n[4];\n\n#ifdef VERIFY\n    VERIFY_CHECK(a->normalized);\n#endif\n\n    r->v[0] = (a0       | a1 << 52) & M62;\n    r->v[1] = (a1 >> 10 | a2 << 42) & M62;\n    r->v[2] = (a2 >> 20 | a3 << 32) & M62;\n    r->v[3] = (a3 >> 30 | a4 << 22) & M62;\n    r->v[4] =  a4 >> 40;\n}\n\nstatic const secp256k1_modinv64_modinfo secp256k1_const_modinfo_fe = {\n    {{-0x1000003D1LL, 0, 0, 0, 256}},\n    0x27C7F6E22DDACACFLL\n};\n\n#if 0\nstatic void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *x) {\n    secp256k1_fe tmp;\n    secp256k1_modinv64_signed62 s;\n\n    tmp = *x;\n    secp256k1_fe_normalize(&tmp);\n    secp256k1_fe_to_signed62(&s, &tmp);\n    secp256k1_modinv64(&s, &secp256k1_const_modinfo_fe);\n    secp256k1_fe_from_signed62(r, &s);\n\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == secp256k1_fe_normalizes_to_zero(&tmp));\n#endif\n}\n#endif\n\nstatic void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {\n    secp256k1_fe tmp;\n    secp256k1_modinv64_signed62 s;\n\n    tmp = *x;\n    secp256k1_fe_normalize_var(&tmp);\n    secp256k1_fe_to_signed62(&s, &tmp);\n    secp256k1_modinv64_var(&s, &secp256k1_const_modinfo_fe);\n    secp256k1_fe_from_signed62(r, &s);\n\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == secp256k1_fe_normalizes_to_zero(&tmp));\n#endif\n}\n\n#if 0\nstatic int secp256k1_fe_is_square_var(const secp256k1_fe *x) {\n    secp256k1_fe tmp;\n    secp256k1_modinv64_signed62 s;\n    int jac, ret;\n\n    tmp = *x;\n    secp256k1_fe_normalize_var(&tmp);\n    /* secp256k1_jacobi64_maybe_var cannot deal with input 0. */\n    if (secp256k1_fe_is_zero(&tmp)) return 1;\n    secp256k1_fe_to_signed62(&s, &tmp);\n    jac = secp256k1_jacobi64_maybe_var(&s, &secp256k1_const_modinfo_fe);\n    if (jac == 0) {\n        /* secp256k1_jacobi64_maybe_var failed to compute the Jacobi symbol. Fall back\n         * to computing a square root. This should be extremely rare with random\n         * input (except in VERIFY mode, where a lower iteration count is used). */\n        secp256k1_fe dummy;\n        ret = secp256k1_fe_sqrt_var(&dummy, &tmp);\n    } else {\n#ifdef VERIFY\n        secp256k1_fe dummy;\n        VERIFY_CHECK(jac == 2*secp256k1_fe_sqrt_var(&dummy, &tmp) - 1);\n#endif\n        ret = jac >= 0;\n    }\n    return ret;\n}\n#endif\n#endif /* SECP256K1_FIELD_REPR_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/field_5x52_int128_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_FIELD_INNER5X52_IMPL_H\n#define SECP256K1_FIELD_INNER5X52_IMPL_H\n\n#include <stdint.h>\n\n#include \"int128.h\"\n\n#ifdef VERIFY\n#define VERIFY_BITS(x, n) VERIFY_CHECK(((x) >> (n)) == 0)\n#define VERIFY_BITS_128(x, n) VERIFY_CHECK(secp256k1_u128_check_bits((x), (n)))\n#else\n#define VERIFY_BITS(x, n) do { } while(0)\n#define VERIFY_BITS_128(x, n) do { } while(0)\n#endif\n\nSECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) {\n    secp256k1_uint128 c, d;\n    uint64_t t3, t4, tx, u0;\n    uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];\n    const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;\n\n    VERIFY_BITS(a[0], 56);\n    VERIFY_BITS(a[1], 56);\n    VERIFY_BITS(a[2], 56);\n    VERIFY_BITS(a[3], 56);\n    VERIFY_BITS(a[4], 52);\n    VERIFY_BITS(b[0], 56);\n    VERIFY_BITS(b[1], 56);\n    VERIFY_BITS(b[2], 56);\n    VERIFY_BITS(b[3], 56);\n    VERIFY_BITS(b[4], 52);\n    VERIFY_CHECK(r != b);\n    VERIFY_CHECK(a != b);\n\n    /*  [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n.\n     *  for 0 <= x <= 4, px is a shorthand for sum(a[i]*b[x-i], i=0..x).\n     *  for 4 <= x <= 8, px is a shorthand for sum(a[i]*b[x-i], i=(x-4)..4)\n     *  Note that [x 0 0 0 0 0] = [x*R].\n     */\n\n    secp256k1_u128_mul(&d, a0, b[3]);\n    secp256k1_u128_accum_mul(&d, a1, b[2]);\n    secp256k1_u128_accum_mul(&d, a2, b[1]);\n    secp256k1_u128_accum_mul(&d, a3, b[0]);\n    VERIFY_BITS_128(&d, 114);\n    /* [d 0 0 0] = [p3 0 0 0] */\n    secp256k1_u128_mul(&c, a4, b[4]);\n    VERIFY_BITS_128(&c, 112);\n    /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */\n    secp256k1_u128_accum_mul(&d, R, secp256k1_u128_to_u64(&c)); secp256k1_u128_rshift(&c, 64);\n    VERIFY_BITS_128(&d, 115);\n    VERIFY_BITS_128(&c, 48);\n    /* [(c<<12) 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */\n    t3 = secp256k1_u128_to_u64(&d) & M; secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS(t3, 52);\n    VERIFY_BITS_128(&d, 63);\n    /* [(c<<12) 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */\n\n    secp256k1_u128_accum_mul(&d, a0, b[4]);\n    secp256k1_u128_accum_mul(&d, a1, b[3]);\n    secp256k1_u128_accum_mul(&d, a2, b[2]);\n    secp256k1_u128_accum_mul(&d, a3, b[1]);\n    secp256k1_u128_accum_mul(&d, a4, b[0]);\n    VERIFY_BITS_128(&d, 115);\n    /* [(c<<12) 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n    secp256k1_u128_accum_mul(&d, R << 12, secp256k1_u128_to_u64(&c));\n    VERIFY_BITS_128(&d, 116);\n    /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n    t4 = secp256k1_u128_to_u64(&d) & M; secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS(t4, 52);\n    VERIFY_BITS_128(&d, 64);\n    /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n    tx = (t4 >> 48); t4 &= (M >> 4);\n    VERIFY_BITS(tx, 4);\n    VERIFY_BITS(t4, 48);\n    /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n\n    secp256k1_u128_mul(&c, a0, b[0]);\n    VERIFY_BITS_128(&c, 112);\n    /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */\n    secp256k1_u128_accum_mul(&d, a1, b[4]);\n    secp256k1_u128_accum_mul(&d, a2, b[3]);\n    secp256k1_u128_accum_mul(&d, a3, b[2]);\n    secp256k1_u128_accum_mul(&d, a4, b[1]);\n    VERIFY_BITS_128(&d, 115);\n    /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    u0 = secp256k1_u128_to_u64(&d) & M; secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS(u0, 52);\n    VERIFY_BITS_128(&d, 63);\n    /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    u0 = (u0 << 4) | tx;\n    VERIFY_BITS(u0, 56);\n    /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    secp256k1_u128_accum_mul(&c, u0, R >> 4);\n    VERIFY_BITS_128(&c, 115);\n    /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    r[0] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[0], 52);\n    VERIFY_BITS_128(&c, 61);\n    /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */\n\n    secp256k1_u128_accum_mul(&c, a0, b[1]);\n    secp256k1_u128_accum_mul(&c, a1, b[0]);\n    VERIFY_BITS_128(&c, 114);\n    /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */\n    secp256k1_u128_accum_mul(&d, a2, b[4]);\n    secp256k1_u128_accum_mul(&d, a3, b[3]);\n    secp256k1_u128_accum_mul(&d, a4, b[2]);\n    VERIFY_BITS_128(&d, 114);\n    /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */\n    secp256k1_u128_accum_mul(&c, secp256k1_u128_to_u64(&d) & M, R); secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS_128(&c, 115);\n    VERIFY_BITS_128(&d, 62);\n    /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */\n    r[1] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[1], 52);\n    VERIFY_BITS_128(&c, 63);\n    /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */\n\n    secp256k1_u128_accum_mul(&c, a0, b[2]);\n    secp256k1_u128_accum_mul(&c, a1, b[1]);\n    secp256k1_u128_accum_mul(&c, a2, b[0]);\n    VERIFY_BITS_128(&c, 114);\n    /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */\n    secp256k1_u128_accum_mul(&d, a3, b[4]);\n    secp256k1_u128_accum_mul(&d, a4, b[3]);\n    VERIFY_BITS_128(&d, 114);\n    /* [d 0 0 t4 t3 c t1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    secp256k1_u128_accum_mul(&c, R, secp256k1_u128_to_u64(&d)); secp256k1_u128_rshift(&d, 64);\n    VERIFY_BITS_128(&c, 115);\n    VERIFY_BITS_128(&d, 50);\n    /* [(d<<12) 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n\n    r[2] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[2], 52);\n    VERIFY_BITS_128(&c, 63);\n    /* [(d<<12) 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    secp256k1_u128_accum_mul(&c, R << 12, secp256k1_u128_to_u64(&d));\n    secp256k1_u128_accum_u64(&c, t3);\n    VERIFY_BITS_128(&c, 100);\n    /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    r[3] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[3], 52);\n    VERIFY_BITS_128(&c, 48);\n    /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    r[4] = secp256k1_u128_to_u64(&c) + t4;\n    VERIFY_BITS(r[4], 49);\n    /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n}\n\nSECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) {\n    secp256k1_uint128 c, d;\n    uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];\n    int64_t t3, t4, tx, u0;\n    const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;\n\n    VERIFY_BITS(a[0], 56);\n    VERIFY_BITS(a[1], 56);\n    VERIFY_BITS(a[2], 56);\n    VERIFY_BITS(a[3], 56);\n    VERIFY_BITS(a[4], 52);\n\n    /**  [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n.\n     *  px is a shorthand for sum(a[i]*a[x-i], i=0..x).\n     *  Note that [x 0 0 0 0 0] = [x*R].\n     */\n\n    secp256k1_u128_mul(&d, a0*2, a3);\n    secp256k1_u128_accum_mul(&d, a1*2, a2);\n    VERIFY_BITS_128(&d, 114);\n    /* [d 0 0 0] = [p3 0 0 0] */\n    secp256k1_u128_mul(&c, a4, a4);\n    VERIFY_BITS_128(&c, 112);\n    /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */\n    secp256k1_u128_accum_mul(&d, R, secp256k1_u128_to_u64(&c)); secp256k1_u128_rshift(&c, 64);\n    VERIFY_BITS_128(&d, 115);\n    VERIFY_BITS_128(&c, 48);\n    /* [(c<<12) 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */\n    t3 = secp256k1_u128_to_u64(&d) & M; secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS(t3, 52);\n    VERIFY_BITS_128(&d, 63);\n    /* [(c<<12) 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */\n\n    a4 *= 2;\n    secp256k1_u128_accum_mul(&d, a0, a4);\n    secp256k1_u128_accum_mul(&d, a1*2, a3);\n    secp256k1_u128_accum_mul(&d, a2, a2);\n    VERIFY_BITS_128(&d, 115);\n    /* [(c<<12) 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n    secp256k1_u128_accum_mul(&d, R << 12, secp256k1_u128_to_u64(&c));\n    VERIFY_BITS_128(&d, 116);\n    /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n    t4 = secp256k1_u128_to_u64(&d) & M; secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS(t4, 52);\n    VERIFY_BITS_128(&d, 64);\n    /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n    tx = (t4 >> 48); t4 &= (M >> 4);\n    VERIFY_BITS(tx, 4);\n    VERIFY_BITS(t4, 48);\n    /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */\n\n    secp256k1_u128_mul(&c, a0, a0);\n    VERIFY_BITS_128(&c, 112);\n    /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */\n    secp256k1_u128_accum_mul(&d, a1, a4);\n    secp256k1_u128_accum_mul(&d, a2*2, a3);\n    VERIFY_BITS_128(&d, 114);\n    /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    u0 = secp256k1_u128_to_u64(&d) & M; secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS(u0, 52);\n    VERIFY_BITS_128(&d, 62);\n    /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    u0 = (u0 << 4) | tx;\n    VERIFY_BITS(u0, 56);\n    /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    secp256k1_u128_accum_mul(&c, u0, R >> 4);\n    VERIFY_BITS_128(&c, 113);\n    /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */\n    r[0] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[0], 52);\n    VERIFY_BITS_128(&c, 61);\n    /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */\n\n    a0 *= 2;\n    secp256k1_u128_accum_mul(&c, a0, a1);\n    VERIFY_BITS_128(&c, 114);\n    /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */\n    secp256k1_u128_accum_mul(&d, a2, a4);\n    secp256k1_u128_accum_mul(&d, a3, a3);\n    VERIFY_BITS_128(&d, 114);\n    /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */\n    secp256k1_u128_accum_mul(&c, secp256k1_u128_to_u64(&d) & M, R); secp256k1_u128_rshift(&d, 52);\n    VERIFY_BITS_128(&c, 115);\n    VERIFY_BITS_128(&d, 62);\n    /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */\n    r[1] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[1], 52);\n    VERIFY_BITS_128(&c, 63);\n    /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */\n\n    secp256k1_u128_accum_mul(&c, a0, a2);\n    secp256k1_u128_accum_mul(&c, a1, a1);\n    VERIFY_BITS_128(&c, 114);\n    /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */\n    secp256k1_u128_accum_mul(&d, a3, a4);\n    VERIFY_BITS_128(&d, 114);\n    /* [d 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    secp256k1_u128_accum_mul(&c, R, secp256k1_u128_to_u64(&d)); secp256k1_u128_rshift(&d, 64);\n    VERIFY_BITS_128(&c, 115);\n    VERIFY_BITS_128(&d, 50);\n    /* [(d<<12) 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    r[2] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[2], 52);\n    VERIFY_BITS_128(&c, 63);\n    /* [(d<<12) 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n\n    secp256k1_u128_accum_mul(&c, R << 12, secp256k1_u128_to_u64(&d));\n    secp256k1_u128_accum_u64(&c, t3);\n    VERIFY_BITS_128(&c, 100);\n    /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    r[3] = secp256k1_u128_to_u64(&c) & M; secp256k1_u128_rshift(&c, 52);\n    VERIFY_BITS(r[3], 52);\n    VERIFY_BITS_128(&c, 48);\n    /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n    r[4] = secp256k1_u128_to_u64(&c) + t4;\n    VERIFY_BITS(r[4], 49);\n    /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */\n}\n\n#endif /* SECP256K1_FIELD_INNER5X52_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/field_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_FIELD_IMPL_H\n#define SECP256K1_FIELD_IMPL_H\n\n#include \"util.h\"\n\n#if defined(SECP256K1_WIDEMUL_INT128)\n#include \"field_5x52_impl.h\"\n#else\n#error \"Please select wide multiplication implementation\"\n#endif\n\n#if 0\nSECP256K1_INLINE static int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b) {\n    secp256k1_fe na;\n    secp256k1_fe_negate(&na, a, 1);\n    secp256k1_fe_add(&na, b);\n    return secp256k1_fe_normalizes_to_zero(&na);\n}\n#endif\n\nSECP256K1_INLINE static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b) {\n    secp256k1_fe na;\n    secp256k1_fe_negate(&na, a, 1);\n    secp256k1_fe_add(&na, b);\n    return secp256k1_fe_normalizes_to_zero_var(&na);\n}\n\nstatic int secp256k1_fe_sqrt_var(secp256k1_fe *r, const secp256k1_fe *a) {\n    /** Given that p is congruent to 3 mod 4, we can compute the square root of\n     *  a mod p as the (p+1)/4'th power of a.\n     *\n     *  As (p+1)/4 is an even number, it will have the same result for a and for\n     *  (-a). Only one of these two numbers actually has a square root however,\n     *  so we test at the end by squaring and comparing to the input.\n     *  Also because (p+1)/4 is an even number, the computed square root is\n     *  itself always a square (a ** ((p+1)/4) is the square of a ** ((p+1)/8)).\n     */\n    secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1;\n    int j;\n\n    VERIFY_CHECK(r != a);\n\n    /** The binary representation of (p + 1)/4 has 3 blocks of 1s, with lengths in\n     *  { 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block:\n     *  1, [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223]\n     */\n\n    secp256k1_fe_sqr(&x2, a);\n    secp256k1_fe_mul(&x2, &x2, a);\n\n    secp256k1_fe_sqr(&x3, &x2);\n    secp256k1_fe_mul(&x3, &x3, a);\n\n    x6 = x3;\n    for (j=0; j<3; j++) {\n        secp256k1_fe_sqr(&x6, &x6);\n    }\n    secp256k1_fe_mul(&x6, &x6, &x3);\n\n    x9 = x6;\n    for (j=0; j<3; j++) {\n        secp256k1_fe_sqr(&x9, &x9);\n    }\n    secp256k1_fe_mul(&x9, &x9, &x3);\n\n    x11 = x9;\n    for (j=0; j<2; j++) {\n        secp256k1_fe_sqr(&x11, &x11);\n    }\n    secp256k1_fe_mul(&x11, &x11, &x2);\n\n    x22 = x11;\n    for (j=0; j<11; j++) {\n        secp256k1_fe_sqr(&x22, &x22);\n    }\n    secp256k1_fe_mul(&x22, &x22, &x11);\n\n    x44 = x22;\n    for (j=0; j<22; j++) {\n        secp256k1_fe_sqr(&x44, &x44);\n    }\n    secp256k1_fe_mul(&x44, &x44, &x22);\n\n    x88 = x44;\n    for (j=0; j<44; j++) {\n        secp256k1_fe_sqr(&x88, &x88);\n    }\n    secp256k1_fe_mul(&x88, &x88, &x44);\n\n    x176 = x88;\n    for (j=0; j<88; j++) {\n        secp256k1_fe_sqr(&x176, &x176);\n    }\n    secp256k1_fe_mul(&x176, &x176, &x88);\n\n    x220 = x176;\n    for (j=0; j<44; j++) {\n        secp256k1_fe_sqr(&x220, &x220);\n    }\n    secp256k1_fe_mul(&x220, &x220, &x44);\n\n    x223 = x220;\n    for (j=0; j<3; j++) {\n        secp256k1_fe_sqr(&x223, &x223);\n    }\n    secp256k1_fe_mul(&x223, &x223, &x3);\n\n    /* The final result is then assembled using a sliding window over the blocks. */\n\n    t1 = x223;\n    for (j=0; j<23; j++) {\n        secp256k1_fe_sqr(&t1, &t1);\n    }\n    secp256k1_fe_mul(&t1, &t1, &x22);\n    for (j=0; j<6; j++) {\n        secp256k1_fe_sqr(&t1, &t1);\n    }\n    secp256k1_fe_mul(&t1, &t1, &x2);\n    secp256k1_fe_sqr(&t1, &t1);\n    secp256k1_fe_sqr(r, &t1);\n\n    /* Check that a square root was actually calculated */\n\n    secp256k1_fe_sqr(&t1, r);\n    return secp256k1_fe_equal_var(&t1, a);\n}\n\n#endif /* SECP256K1_FIELD_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/generator.h",
    "content": "#ifndef SECP256K1_GENERATOR_H\n# define SECP256K1_GENERATOR_H\n\n# include \"secp256k1.h\"\n\n#include <stdint.h>\n\n/** Opaque data structure that stores a base point\n *\n *  The exact representation of data inside is implementation defined and not\n *  guaranteed to be portable between different platforms or versions. It is\n *  however guaranteed to be 64 bytes in size, and can be safely copied/moved.\n *  If you need to convert to a format suitable for storage, transmission, or\n *  comparison, use secp256k1_generator_serialize and secp256k1_generator_parse.\n */\ntypedef struct {\n    unsigned char data[64];\n} secp256k1_generator;\n\n/** Generate a generator for the curve.\n *\n *  Returns: 0 in the highly unlikely case the seed is not acceptable,\n *           1 otherwise.\n *  Out:  gen:     a generator object\n *  In:   seed32:  a 32-byte seed\n *\n *  If successful a valid generator will be placed in gen. The produced\n *  generators are distributed uniformly over the curve, and will not have a\n *  known discrete logarithm with respect to any other generator produced,\n *  or to the base generator G.\n */\nstatic SECP256K1_WARN_UNUSED_RESULT int secp256k1_generator_generate(\n    secp256k1_generator *gen,\n    const unsigned char *seed32\n) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/generator_impl.h",
    "content": "/**********************************************************************\n * Copyright (c) 2016 Andrew Poelstra & Pieter Wuille                 *\n * Distributed under the MIT software license, see the accompanying   *\n * file COPYING or http://www.opensource.org/licenses/mit-license.php.*\n **********************************************************************/\n\n#ifndef SECP256K1_GENERATOR_IMPL_H\n#define SECP256K1_GENERATOR_IMPL_H\n\n#include \"field.h\"\n#include \"group.h\"\n#include \"generator.h\"\n#include \"../sha256.h\"\n#include \"scalar.h\"\n\n#if 0\n#include \"../generator/pedersen_impl.h\"\n\n/** Alternative generator for secp256k1.\n *  This is the sha256 of 'g' after standard encoding (without compression),\n *  which happens to be a point on the curve. More precisely, the generator is\n *  derived by running the following script with the sage mathematics software.\n\n    import hashlib\n    F = FiniteField (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F)\n    G = '0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'\n    H = EllipticCurve ([F (0), F (7)]).lift_x(F(int(hashlib.sha256(G.decode('hex')).hexdigest(),16)))\n    print('%x %x' % H.xy())\n */\nstatic const secp256k1_generator secp256k1_generator_h_internal = {{\n    0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e,\n    0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0,\n    0x31, 0xd3, 0xc6, 0x86, 0x39, 0x73, 0x92, 0x6e, 0x04, 0x9e, 0x63, 0x7c, 0xb1, 0xb5, 0xf4, 0x0a,\n    0x36, 0xda, 0xc2, 0x8a, 0xf1, 0x76, 0x69, 0x68, 0xc3, 0x0c, 0x23, 0x13, 0xf3, 0xa3, 0x89, 0x04\n}};\n\nconst secp256k1_generator *secp256k1_generator_h = &secp256k1_generator_h_internal;\n#endif\n\nstatic void secp256k1_generator_load(secp256k1_ge* ge, const secp256k1_generator* gen) {\n    int succeed;\n    succeed = secp256k1_fe_set_b32(&ge->x, &gen->data[0]);\n    VERIFY_CHECK(succeed != 0);\n    succeed = secp256k1_fe_set_b32(&ge->y, &gen->data[32]);\n    VERIFY_CHECK(succeed != 0);\n    ge->infinity = 0;\n    (void) succeed;\n}\n\nstatic void secp256k1_generator_save(secp256k1_generator *gen, secp256k1_ge* ge) {\n    VERIFY_CHECK(!secp256k1_ge_is_infinity(ge));\n    secp256k1_fe_normalize_var(&ge->x);\n    secp256k1_fe_normalize_var(&ge->y);\n    secp256k1_fe_get_b32(&gen->data[0], &ge->x);\n    secp256k1_fe_get_b32(&gen->data[32], &ge->y);\n}\n\n#if 0\nint secp256k1_generator_parse(const secp256k1_context* ctx, secp256k1_generator* gen, const unsigned char *input) {\n    secp256k1_fe x;\n    secp256k1_ge ge;\n\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(gen != NULL);\n    ARG_CHECK(input != NULL);\n\n    if ((input[0] & 0xFE) != 10 ||\n        !secp256k1_fe_set_b32(&x, &input[1]) ||\n        !secp256k1_ge_set_xquad(&ge, &x)) {\n        return 0;\n    }\n    if (input[0] & 1) {\n        secp256k1_ge_neg(&ge, &ge);\n    }\n    secp256k1_generator_save(gen, &ge);\n    return 1;\n}\n\nint secp256k1_generator_serialize(const secp256k1_context* ctx, unsigned char *output, const secp256k1_generator* gen) {\n    secp256k1_ge ge;\n\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(output != NULL);\n    ARG_CHECK(gen != NULL);\n\n    secp256k1_generator_load(&ge, gen);\n\n    output[0] = 11 ^ secp256k1_fe_is_quad_var(&ge.y);\n    secp256k1_fe_normalize_var(&ge.x);\n    secp256k1_fe_get_b32(&output[1], &ge.x);\n    return 1;\n}\n#endif\n\nstatic void shallue_van_de_woestijne(secp256k1_ge* ge, const secp256k1_fe* t) {\n    /* Implements the algorithm from:\n     *    Indifferentiable Hashing to Barreto-Naehrig Curves\n     *    Pierre-Alain Fouque and Mehdi Tibouchi\n     *    Latincrypt 2012\n     */\n\n    /* Basic algorithm:\n\n       c = sqrt(-3)\n       d = (c - 1)/2\n\n       w = c * t / (1 + b + t^2)  [with b = 7]\n       x1 = d - t*w\n       x2 = -(x1 + 1)\n       x3 = 1 + 1/w^2\n\n       To avoid the 2 divisions, compute the joint denominator j = wd * x3d, where\n       wd = 1 + b + t^2\n       x3d = c^2 * t^2 = -3 * t^2\n\n       so that if j != 0, then\n\n       1 / wd = 1/j * x3d\n       1 / x3d = 1/j * wd\n\n       x1 = d - c * t^2 * x3d / j\n       x3 = 1 + wd^3 / j\n\n       If j = 0, the function outputs the point (d, f(d)). This point is equal\n       to (x1, f(x1)) as defined above if division by 0 is defined to be 0. In\n       below code this is not special-cased because secp256k1_fe_inv returns 0\n       on input 0.\n\n       j = 0 happens only when t = 0 (since wd != 0 as -8 is not a square).\n    */\n\n    static const secp256k1_fe negc = SECP256K1_FE_CONST(0xf5d2d456, 0xcaf80e20, 0xdcc88f3d, 0x586869d3, 0x39e092ea, 0x25eb132b, 0x8272d850, 0xe32a03dd);\n    static const secp256k1_fe d = SECP256K1_FE_CONST(0x851695d4, 0x9a83f8ef, 0x919bb861, 0x53cbcb16, 0x630fb68a, 0xed0a766a, 0x3ec693d6, 0x8e6afa40);\n\n    secp256k1_fe wd, x3d, jinv, tmp, x1, x2, x3, alphain, betain, gammain, y1, y2, y3;\n    int alphaquad, betaquad;\n\n    /* wd = t^2 */\n    secp256k1_fe_sqr(&wd, t); /* mag 1 */\n    /* x1 = -c * t^2 */\n    secp256k1_fe_mul(&x1, &negc, &wd); /* mag 1 */\n    /* x3d = t^2 */\n    x3d = wd; /* mag 1 */\n    /* x3d = 3 * t^2 */\n    secp256k1_fe_mul_int(&x3d, 3); /* mag 3 */\n    /* x3d = -3 * t^2 */\n    secp256k1_fe_negate(&x3d, &x3d, 3); /* mag 4 */\n    /* wd = 1 + b + t^2 */\n    secp256k1_fe_add_int(&wd, SECP256K1_B + 1); /* mag 2 */\n    /* jinv = wd * x3d */\n    secp256k1_fe_mul(&jinv, &wd, &x3d); /* mag 1 */\n    /* jinv = 1/(wd * x3d) */\n    secp256k1_fe_inv_var(&jinv, &jinv); /* mag 1 */\n    /* x1 = -c * t^2 * x3d */\n    secp256k1_fe_mul(&x1, &x1, &x3d); /* mag 1 */\n    /* x1 = -c * t^2 * x3d * 1/j */\n    secp256k1_fe_mul(&x1, &x1, &jinv); /* mag 1 */\n    /* x1 = d + -c * t^2 * x3d * 1/j */\n    secp256k1_fe_add(&x1, &d); /* mag 2 */\n    /* x2 = x1 */\n    x2 = x1; /* mag 2 */\n    /* x2 = x1 + 1 */\n    secp256k1_fe_add_int(&x2, 1); /* mag 3 */\n    /* x2 = - (x1 + 1) */\n    secp256k1_fe_negate(&x2, &x2, 3); /* mag 4 */\n    /* x3 = wd^2 */\n    secp256k1_fe_sqr(&x3, &wd); /* mag 1 */\n    /* x3 = wd^3 */\n    secp256k1_fe_mul(&x3, &x3, &wd); /* mag 1 */\n    /* x3 = wd^3 * 1/j */\n    secp256k1_fe_mul(&x3, &x3, &jinv); /* mag 1 */\n    /* x3 = 1 + (wd^3 * 1/j) */\n    secp256k1_fe_add_int(&x3, 1); /* mag 2 */\n\n    secp256k1_fe_sqr(&alphain, &x1); /* mag 1 */\n    secp256k1_fe_mul(&alphain, &alphain, &x1); /* mag 1 */\n    secp256k1_fe_add_int(&alphain, SECP256K1_B); /* mag 2 */\n    secp256k1_fe_sqr(&betain, &x2); /* mag 1 */\n    secp256k1_fe_mul(&betain, &betain, &x2); /* mag 1 */\n    secp256k1_fe_add_int(&betain, SECP256K1_B); /* mag 2 */\n    secp256k1_fe_sqr(&gammain, &x3); /* mag 1 */\n    secp256k1_fe_mul(&gammain, &gammain, &x3); /* mag 1 */\n    secp256k1_fe_add_int(&gammain, SECP256K1_B); /* mag 2 */\n\n    alphaquad = secp256k1_fe_sqrt_var(&y1, &alphain);\n    betaquad = secp256k1_fe_sqrt_var(&y2, &betain);\n    secp256k1_fe_sqrt_var(&y3, &gammain);\n\n    secp256k1_fe_cmov(&x1, &x2, (!alphaquad) & betaquad);\n    secp256k1_fe_cmov(&y1, &y2, (!alphaquad) & betaquad);\n    secp256k1_fe_cmov(&x1, &x3, (!alphaquad) & !betaquad);\n    secp256k1_fe_cmov(&y1, &y3, (!alphaquad) & !betaquad);\n\n    secp256k1_ge_set_xy(ge, &x1, &y1);\n\n    /* The linked algorithm from the paper uses the Jacobi symbol of t to\n     * determine the Jacobi symbol of the produced y coordinate. Since the\n     * rest of the algorithm only uses t^2, we can safely use another criterion\n     * as long as negation of t results in negation of the y coordinate. Here\n     * we choose to use t's oddness, as it is faster to determine. */\n    secp256k1_fe_negate(&tmp, &ge->y, 1);\n    secp256k1_fe_cmov(&ge->y, &tmp, secp256k1_fe_is_odd(t));\n}\n\nstatic int secp256k1_generator_generate_internal(secp256k1_generator* gen, const unsigned char *key32, const unsigned char *blind32) {\n    static const unsigned char prefix1[17] = \"1st generation: \";\n    static const unsigned char prefix2[17] = \"2nd generation: \";\n    secp256k1_fe t = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 4);\n    secp256k1_ge add;\n    secp256k1_gej accum;\n    int overflow;\n    sha256_midstate sha256_buf;\n    unsigned char b32[32];\n    int ret = 1;\n\n    if (blind32) {\n        static const secp256k1_gej inf = SECP256K1_GEJ_CONST_INFINITY;\n        static const secp256k1_scalar zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);\n        secp256k1_scalar blind;\n        secp256k1_scalar_set_b32(&blind, blind32, &overflow);\n        ret = !overflow;\n        secp256k1_ecmult(&accum, &inf, &zero, &blind);\n    }\n\n    {\n        sha256_context sha256_ctx = sha256_init(sha256_buf.s);\n        sha256_uchars(&sha256_ctx, prefix1, 16);\n        sha256_uchars(&sha256_ctx, key32, 32);\n        sha256_finalize(&sha256_ctx);\n        sha256_fromMidstate(b32, sha256_buf.s);\n    }\n    ret &= secp256k1_fe_set_b32(&t, b32);\n    shallue_van_de_woestijne(&add, &t);\n    if (blind32) {\n        secp256k1_gej_add_ge_var(&accum, &accum, &add, NULL);\n    } else {\n        secp256k1_gej_set_ge(&accum, &add);\n    }\n\n    {\n        sha256_context sha256_ctx = sha256_init(sha256_buf.s);\n        sha256_uchars(&sha256_ctx, prefix2, 16);\n        sha256_uchars(&sha256_ctx, key32, 32);\n        sha256_finalize(&sha256_ctx);\n        sha256_fromMidstate(b32, sha256_buf.s);\n    }\n    ret &= secp256k1_fe_set_b32(&t, b32);\n    shallue_van_de_woestijne(&add, &t);\n    secp256k1_gej_add_ge_var(&accum, &accum, &add, NULL);\n\n    secp256k1_ge_set_gej_var(&add, &accum);\n    secp256k1_generator_save(gen, &add);\n    return ret;\n}\n\nint secp256k1_generator_generate(secp256k1_generator* gen, const unsigned char *key32) {\n    ARG_CHECK(gen != NULL);\n    ARG_CHECK(key32 != NULL);\n    return secp256k1_generator_generate_internal(gen, key32, NULL);\n}\n\n#if 0\nint secp256k1_generator_generate_blinded(const secp256k1_context* ctx, secp256k1_generator* gen, const unsigned char *key32, const unsigned char *blind32) {\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(gen != NULL);\n    ARG_CHECK(key32 != NULL);\n    ARG_CHECK(blind32 != NULL);\n    ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));\n    return secp256k1_generator_generate_internal(ctx, gen, key32, blind32);\n}\n\nstatic void secp256k1_pedersen_commitment_load(secp256k1_ge* ge, const secp256k1_pedersen_commitment* commit) {\n    secp256k1_fe fe;\n    secp256k1_fe_set_b32(&fe, &commit->data[1]);\n    secp256k1_ge_set_xquad(ge, &fe);\n    if (commit->data[0] & 1) {\n        secp256k1_ge_neg(ge, ge);\n    }\n}\n\nstatic void secp256k1_pedersen_commitment_save(secp256k1_pedersen_commitment* commit, secp256k1_ge* ge) {\n    secp256k1_fe_normalize(&ge->x);\n    secp256k1_fe_get_b32(&commit->data[1], &ge->x);\n    commit->data[0] = 9 ^ secp256k1_fe_is_quad_var(&ge->y);\n}\n\nint secp256k1_pedersen_commitment_parse(const secp256k1_context* ctx, secp256k1_pedersen_commitment* commit, const unsigned char *input) {\n    secp256k1_fe x;\n    secp256k1_ge ge;\n\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(commit != NULL);\n    ARG_CHECK(input != NULL);\n    (void) ctx;\n\n    if ((input[0] & 0xFE) != 8 ||\n        !secp256k1_fe_set_b32(&x, &input[1]) ||\n        !secp256k1_ge_set_xquad(&ge, &x)) {\n        return 0;\n    }\n    if (input[0] & 1) {\n        secp256k1_ge_neg(&ge, &ge);\n    }\n    secp256k1_pedersen_commitment_save(commit, &ge);\n    return 1;\n}\n\nint secp256k1_pedersen_commitment_serialize(const secp256k1_context* ctx, unsigned char *output, const secp256k1_pedersen_commitment* commit) {\n    secp256k1_ge ge;\n\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(output != NULL);\n    ARG_CHECK(commit != NULL);\n\n    secp256k1_pedersen_commitment_load(&ge, commit);\n\n    output[0] = 9 ^ secp256k1_fe_is_quad_var(&ge.y);\n    secp256k1_fe_normalize_var(&ge.x);\n    secp256k1_fe_get_b32(&output[1], &ge.x);\n    return 1;\n}\n\n/* Generates a pedersen commitment: *commit = blind * G + value * G2. The blinding factor is 32 bytes.*/\nint secp256k1_pedersen_commit(const secp256k1_context* ctx, secp256k1_pedersen_commitment *commit, const unsigned char *blind, uint64_t value, const secp256k1_generator* gen) {\n    secp256k1_ge genp;\n    secp256k1_gej rj;\n    secp256k1_ge r;\n    secp256k1_scalar sec;\n    int overflow;\n    int ret = 0;\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));\n    ARG_CHECK(commit != NULL);\n    ARG_CHECK(blind != NULL);\n    ARG_CHECK(gen != NULL);\n    secp256k1_generator_load(&genp, gen);\n    secp256k1_scalar_set_b32(&sec, blind, &overflow);\n    if (!overflow) {\n        secp256k1_pedersen_ecmult(&ctx->ecmult_gen_ctx, &rj, &sec, value, &genp);\n        if (!secp256k1_gej_is_infinity(&rj)) {\n            secp256k1_ge_set_gej(&r, &rj);\n            secp256k1_pedersen_commitment_save(commit, &r);\n            ret = 1;\n        }\n        secp256k1_gej_clear(&rj);\n        secp256k1_ge_clear(&r);\n    }\n    secp256k1_scalar_clear(&sec);\n    return ret;\n}\n\n/** Takes a list of n pointers to 32 byte blinding values, the first negs of which are treated with positive sign and the rest\n *  negative, then calculates an additional blinding value that adds to zero.\n */\nint secp256k1_pedersen_blind_sum(const secp256k1_context* ctx, unsigned char *blind_out, const unsigned char * const *blinds, size_t n, size_t npositive) {\n    secp256k1_scalar acc;\n    secp256k1_scalar x;\n    size_t i;\n    int overflow;\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(blind_out != NULL);\n    ARG_CHECK(blinds != NULL);\n    ARG_CHECK(npositive <= n);\n    (void) ctx;\n    secp256k1_scalar_set_int(&acc, 0);\n    for (i = 0; i < n; i++) {\n        secp256k1_scalar_set_b32(&x, blinds[i], &overflow);\n        if (overflow) {\n            return 0;\n        }\n        if (i >= npositive) {\n            secp256k1_scalar_negate(&x, &x);\n        }\n        secp256k1_scalar_add(&acc, &acc, &x);\n    }\n    secp256k1_scalar_get_b32(blind_out, &acc);\n    secp256k1_scalar_clear(&acc);\n    secp256k1_scalar_clear(&x);\n    return 1;\n}\n\n/* Takes two lists of commitments and sums the first set and subtracts the second and verifies that they sum to excess. */\nint secp256k1_pedersen_verify_tally(const secp256k1_context* ctx, const secp256k1_pedersen_commitment * const* commits, size_t pcnt, const secp256k1_pedersen_commitment * const* ncommits, size_t ncnt) {\n    secp256k1_gej accj;\n    secp256k1_ge add;\n    size_t i;\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(!pcnt || (commits != NULL));\n    ARG_CHECK(!ncnt || (ncommits != NULL));\n    (void) ctx;\n    secp256k1_gej_set_infinity(&accj);\n    for (i = 0; i < ncnt; i++) {\n        secp256k1_pedersen_commitment_load(&add, ncommits[i]);\n        secp256k1_gej_add_ge_var(&accj, &accj, &add, NULL);\n    }\n    secp256k1_gej_neg(&accj, &accj);\n    for (i = 0; i < pcnt; i++) {\n        secp256k1_pedersen_commitment_load(&add, commits[i]);\n        secp256k1_gej_add_ge_var(&accj, &accj, &add, NULL);\n    }\n    return secp256k1_gej_is_infinity(&accj);\n}\n\nint secp256k1_pedersen_blind_generator_blind_sum(const secp256k1_context* ctx, const uint64_t *value, const unsigned char* const* generator_blind, unsigned char* const* blinding_factor, size_t n_total, size_t n_inputs) {\n    secp256k1_scalar sum;\n    secp256k1_scalar tmp;\n    size_t i;\n\n    VERIFY_CHECK(ctx != NULL);\n    ARG_CHECK(n_total == 0 || value != NULL);\n    ARG_CHECK(n_total == 0 || generator_blind != NULL);\n    ARG_CHECK(n_total == 0 || blinding_factor != NULL);\n    ARG_CHECK(n_total > n_inputs);\n    (void) ctx;\n\n    if (n_total == 0) {\n        return 1;\n    }\n\n    secp256k1_scalar_set_int(&sum, 0);\n    secp256k1_scalar_set_int(&tmp, 0);\n\n    /* Here, n_total > 0. Thus the loop runs at least once.\n       Thus we may use a do-while loop, which checks the loop\n       condition only at the end.\n\n       The do-while loop helps GCC prove that the loop runs at least\n       once and suppresses a -Wmaybe-uninitialized warning. */\n    i = 0;\n    do {\n        int overflow = 0;\n        secp256k1_scalar addend;\n        secp256k1_scalar_set_u64(&addend, value[i]);  /* s = v */\n\n        secp256k1_scalar_set_b32(&tmp, generator_blind[i], &overflow);\n        if (overflow == 1) {\n            secp256k1_scalar_clear(&tmp);\n            secp256k1_scalar_clear(&addend);\n            secp256k1_scalar_clear(&sum);\n            return 0;\n        }\n        secp256k1_scalar_mul(&addend, &addend, &tmp); /* s = vr */\n\n        secp256k1_scalar_set_b32(&tmp, blinding_factor[i], &overflow);\n        if (overflow == 1) {\n            secp256k1_scalar_clear(&tmp);\n            secp256k1_scalar_clear(&addend);\n            secp256k1_scalar_clear(&sum);\n            return 0;\n        }\n        secp256k1_scalar_add(&addend, &addend, &tmp); /* s = vr + r' */\n        secp256k1_scalar_cond_negate(&addend, i < n_inputs);  /* s is negated if it's an input */\n        secp256k1_scalar_add(&sum, &sum, &addend);    /* sum += s */\n        secp256k1_scalar_clear(&addend);\n\n        i++;\n    } while (i < n_total);\n\n    /* Right now tmp has the last pedersen blinding factor. Subtract the sum from it. */\n    secp256k1_scalar_negate(&sum, &sum);\n    secp256k1_scalar_add(&tmp, &tmp, &sum);\n    secp256k1_scalar_get_b32(blinding_factor[n_total - 1], &tmp);\n\n    secp256k1_scalar_clear(&tmp);\n    secp256k1_scalar_clear(&sum);\n    return 1;\n}\n\n#endif\n#endif\n"
  },
  {
    "path": "C/secp256k1/group.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_GROUP_H\n#define SECP256K1_GROUP_H\n\n#include \"field.h\"\n\n/** A group element in affine coordinates on the secp256k1 curve,\n *  or occasionally on an isomorphic curve of the form y^2 = x^3 + 7*t^6.\n *  Note: For exhaustive test mode, secp256k1 is replaced by a small subgroup of a different curve.\n */\ntypedef struct {\n    secp256k1_fe x;\n    secp256k1_fe y;\n    int infinity; /* whether this represents the point at infinity */\n} secp256k1_ge;\n\n#define SECP256K1_GE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), 0}\n#define SECP256K1_GE_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1}\n\n/** A group element of the secp256k1 curve, in jacobian coordinates.\n *  Note: For exhastive test mode, secp256k1 is replaced by a small subgroup of a different curve.\n */\ntypedef struct {\n    secp256k1_fe x; /* actual X: x/z^2 */\n    secp256k1_fe y; /* actual Y: y/z^3 */\n    secp256k1_fe z;\n    int infinity; /* whether this represents the point at infinity */\n} secp256k1_gej;\n\n#define SECP256K1_GEJ_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1), 0}\n#define SECP256K1_GEJ_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1}\n\ntypedef struct {\n    secp256k1_fe_storage x;\n    secp256k1_fe_storage y;\n} secp256k1_ge_storage;\n\n#define SECP256K1_GE_STORAGE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_STORAGE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_STORAGE_CONST((i),(j),(k),(l),(m),(n),(o),(p))}\n\n#define SECP256K1_GE_STORAGE_CONST_GET(t) SECP256K1_FE_STORAGE_CONST_GET(t.x), SECP256K1_FE_STORAGE_CONST_GET(t.y)\n\n/** Set a group element equal to the point with given X and Y coordinates */\nstatic void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y);\n\n/** Set a group element (affine) equal to the point with the given X coordinate, and given oddness\n *  for Y. Return value indicates whether the result is valid. */\nstatic int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd);\n\n/** Check whether a group element is the point at infinity. */\nstatic int secp256k1_ge_is_infinity(const secp256k1_ge *a);\n\n/** Check whether a group element is valid (i.e., on the curve). */\nstatic int secp256k1_ge_is_valid_var(const secp256k1_ge *a);\n\n/** Set r equal to the inverse of a (i.e., mirrored around the X axis) */\nstatic void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a);\n\n#if 0\n/** Set a group element equal to another which is given in jacobian coordinates. Constant time. */\nstatic void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a);\n#endif\n\n/** Set a group element equal to another which is given in jacobian coordinates. */\nstatic void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a);\n\n#if 0\n/** Set a batch of group elements equal to the inputs given in jacobian coordinates */\nstatic void secp256k1_ge_set_all_gej_var(secp256k1_ge *r, const secp256k1_gej *a, size_t len);\n#endif\n\n/** Bring a batch of inputs to the same global z \"denominator\", based on ratios between\n *  (omitted) z coordinates of adjacent elements.\n *\n *  Although the elements a[i] are _ge rather than _gej, they actually represent elements\n *  in Jacobian coordinates with their z coordinates omitted.\n *\n *  Using the notation z(b) to represent the omitted z coordinate of b, the array zr of\n *  z coordinate ratios must satisfy zr[i] == z(a[i]) / z(a[i-1]) for 0 < 'i' < len.\n *  The zr[0] value is unused.\n *\n *  This function adjusts the coordinates of 'a' in place so that for all 'i', z(a[i]) == z(a[len-1]).\n *  In other words, the initial value of z(a[len-1]) becomes the global z \"denominator\". Only the\n *  a[i].x and a[i].y coordinates are explicitly modified; the adjustment of the omitted z coordinate is\n *  implicit.\n *\n *  The coordinates of the final element a[len-1] are not changed.\n */\nstatic void secp256k1_ge_table_set_globalz(size_t len, secp256k1_ge *a, const secp256k1_fe *zr);\n\n/** Set a group element (affine) equal to the point at infinity. */\nstatic void secp256k1_ge_set_infinity(secp256k1_ge *r);\n\n/** Set a group element (jacobian) equal to the point at infinity. */\nstatic void secp256k1_gej_set_infinity(secp256k1_gej *r);\n\n/** Set a group element (jacobian) equal to another which is given in affine coordinates. */\nstatic void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a);\n\n/** Check two group elements (jacobian) for equality in variable time. */\nstatic int secp256k1_gej_eq_var(const secp256k1_gej *a, const secp256k1_gej *b);\n\n/** Check two group elements (jacobian and affine) for equality in variable time. */\nstatic int secp256k1_gej_eq_ge_var(const secp256k1_gej *a, const secp256k1_ge *b);\n\n/** Compare the X coordinate of a group element (jacobian). */\nstatic int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a);\n\n/** Set r equal to the inverse of a (i.e., mirrored around the X axis) */\nstatic void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a);\n\n/** Check whether a group element is the point at infinity. */\nstatic int secp256k1_gej_is_infinity(const secp256k1_gej *a);\n\n/** Set r equal to the double of a. Constant time. */\nstatic void secp256k1_gej_double(secp256k1_gej *r, const secp256k1_gej *a);\n\n/** Set r equal to the double of a. If rzr is not-NULL this sets *rzr such that r->z == a->z * *rzr (where infinity means an implicit z = 0). */\nstatic void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr);\n\n/** Set r equal to the sum of a and b. If rzr is non-NULL this sets *rzr such that r->z == a->z * *rzr (a cannot be infinity in that case). */\nstatic void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr);\n\n#if 0\n/** Set r equal to the sum of a and b (with b given in affine coordinates, and not infinity). */\nstatic void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b);\n#endif\n\n/** Set r equal to the sum of a and b (with b given in affine coordinates). This is more efficient\n    than secp256k1_gej_add_var. It is identical to secp256k1_gej_add_ge but without constant-time\n    guarantee, and b is allowed to be infinity. If rzr is non-NULL this sets *rzr such that r->z == a->z * *rzr (a cannot be infinity in that case). */\nstatic void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr);\n\n/** Set r equal to the sum of a and b (with the inverse of b's Z coordinate passed as bzinv). */\nstatic void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv);\n\n#if 0\n/** Set r to be equal to lambda times a, where lambda is chosen in a way such that this is very fast. */\nstatic void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a);\n\n/** Clear a secp256k1_gej to prevent leaking sensitive information. */\nstatic void secp256k1_gej_clear(secp256k1_gej *r);\n\n/** Clear a secp256k1_ge to prevent leaking sensitive information. */\nstatic void secp256k1_ge_clear(secp256k1_ge *r);\n#endif\n\n/** Convert a group element to the storage type. */\nstatic void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a);\n\n/** Convert a group element back from the storage type. */\nstatic void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a);\n\n#if 0\n/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time.  Both *r and *a must be initialized.*/\nstatic void secp256k1_gej_cmov(secp256k1_gej *r, const secp256k1_gej *a, int flag);\n\n/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time.  Both *r and *a must be initialized.*/\nstatic void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag);\n#endif\n\n/** Rescale a jacobian point by b which must be non-zero. Constant-time. */\nstatic void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *b);\n\n/** Determine if a point (which is assumed to be on the curve) is in the correct (sub)group of the curve.\n *\n * In normal mode, the used group is secp256k1, which has cofactor=1 meaning that every point on the curve is in the\n * group, and this function returns always true.\n *\n * When compiling in exhaustive test mode, a slightly different curve equation is used, leading to a group with a\n * (very) small subgroup, and that subgroup is what is used for all cryptographic operations. In that mode, this\n * function checks whether a point that is on the curve is in fact also in that subgroup.\n */\nstatic int secp256k1_ge_is_in_correct_subgroup(const secp256k1_ge* ge);\n\n#endif /* SECP256K1_GROUP_H */\n"
  },
  {
    "path": "C/secp256k1/group_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_GROUP_IMPL_H\n#define SECP256K1_GROUP_IMPL_H\n\n#include \"field.h\"\n#include \"group.h\"\n\n/* Begin of section generated by sage/gen_exhaustive_groups.sage. */\n#define SECP256K1_G_ORDER_7 SECP256K1_GE_CONST(\\\n    0x66625d13, 0x317ffe44, 0x63d32cff, 0x1ca02b9b,\\\n    0xe5c6d070, 0x50b4b05e, 0x81cc30db, 0xf5166f0a,\\\n    0x1e60e897, 0xa7c00c7c, 0x2df53eb6, 0x98274ff4,\\\n    0x64252f42, 0x8ca44e17, 0x3b25418c, 0xff4ab0cf\\\n)\n#define SECP256K1_G_ORDER_13 SECP256K1_GE_CONST(\\\n    0xa2482ff8, 0x4bf34edf, 0xa51262fd, 0xe57921db,\\\n    0xe0dd2cb7, 0xa5914790, 0xbc71631f, 0xc09704fb,\\\n    0x942536cb, 0xa3e49492, 0x3a701cc3, 0xee3e443f,\\\n    0xdf182aa9, 0x15b8aa6a, 0x166d3b19, 0xba84b045\\\n)\n#define SECP256K1_G_ORDER_199 SECP256K1_GE_CONST(\\\n    0x7fb07b5c, 0xd07c3bda, 0x553902e2, 0x7a87ea2c,\\\n    0x35108a7f, 0x051f41e5, 0xb76abad5, 0x1f2703ad,\\\n    0x0a251539, 0x5b4c4438, 0x952a634f, 0xac10dd4d,\\\n    0x6d6f4745, 0x98990c27, 0x3a4f3116, 0xd32ff969\\\n)\n/** Generator for secp256k1, value 'g' defined in\n *  \"Standards for Efficient Cryptography\" (SEC2) 2.7.1.\n */\n#define SECP256K1_G SECP256K1_GE_CONST(\\\n    0x79be667e, 0xf9dcbbac, 0x55a06295, 0xce870b07,\\\n    0x029bfcdb, 0x2dce28d9, 0x59f2815b, 0x16f81798,\\\n    0x483ada77, 0x26a3c465, 0x5da4fbfc, 0x0e1108a8,\\\n    0xfd17b448, 0xa6855419, 0x9c47d08f, 0xfb10d4b8\\\n)\n/* These exhaustive group test orders and generators are chosen such that:\n * - The field size is equal to that of secp256k1, so field code is the same.\n * - The curve equation is of the form y^2=x^3+B for some small constant B.\n * - The subgroup has a generator 2*P, where P.x is as small as possible.\n * - The subgroup has size less than 1000 to permit exhaustive testing.\n * - The subgroup admits an endomorphism of the form lambda*(x,y) == (beta*x,y).\n */\nstatic const secp256k1_ge secp256k1_ge_const_g = SECP256K1_G;\n#define SECP256K1_B 7\n\n/* End of section generated by sage/gen_exhaustive_groups.sage. */\n\nstatic const secp256k1_fe secp256k1_fe_const_b = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, SECP256K1_B);\n\nstatic void secp256k1_ge_set_gej_zinv(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zi) {\n    secp256k1_fe zi2;\n    secp256k1_fe zi3;\n    VERIFY_CHECK(!a->infinity);\n    secp256k1_fe_sqr(&zi2, zi);\n    secp256k1_fe_mul(&zi3, &zi2, zi);\n    secp256k1_fe_mul(&r->x, &a->x, &zi2);\n    secp256k1_fe_mul(&r->y, &a->y, &zi3);\n    r->infinity = a->infinity;\n}\n\nstatic void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y) {\n    r->infinity = 0;\n    r->x = *x;\n    r->y = *y;\n}\n\nstatic int secp256k1_ge_is_infinity(const secp256k1_ge *a) {\n    return a->infinity;\n}\n\nstatic void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a) {\n    *r = *a;\n    secp256k1_fe_normalize_weak(&r->y);\n    secp256k1_fe_negate(&r->y, &r->y, 1);\n}\n\n#if 0\nstatic void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a) {\n    secp256k1_fe z2, z3;\n    r->infinity = a->infinity;\n    secp256k1_fe_inv(&a->z, &a->z);\n    secp256k1_fe_sqr(&z2, &a->z);\n    secp256k1_fe_mul(&z3, &a->z, &z2);\n    secp256k1_fe_mul(&a->x, &a->x, &z2);\n    secp256k1_fe_mul(&a->y, &a->y, &z3);\n    secp256k1_fe_set_int(&a->z, 1);\n    r->x = a->x;\n    r->y = a->y;\n}\n#endif\n\nstatic void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a) {\n    secp256k1_fe z2, z3;\n    if (a->infinity) {\n        secp256k1_ge_set_infinity(r);\n        return;\n    }\n    secp256k1_fe_inv_var(&a->z, &a->z);\n    secp256k1_fe_sqr(&z2, &a->z);\n    secp256k1_fe_mul(&z3, &a->z, &z2);\n    secp256k1_fe_mul(&a->x, &a->x, &z2);\n    secp256k1_fe_mul(&a->y, &a->y, &z3);\n    secp256k1_fe_set_int(&a->z, 1);\n    secp256k1_ge_set_xy(r, &a->x, &a->y);\n}\n\n#if 0\nstatic void secp256k1_ge_set_all_gej_var(secp256k1_ge *r, const secp256k1_gej *a, size_t len) {\n    secp256k1_fe u;\n    size_t i;\n    size_t last_i = SIZE_MAX;\n\n    for (i = 0; i < len; i++) {\n        if (a[i].infinity) {\n            secp256k1_ge_set_infinity(&r[i]);\n        } else {\n            /* Use destination's x coordinates as scratch space */\n            if (last_i == SIZE_MAX) {\n                r[i].x = a[i].z;\n            } else {\n                secp256k1_fe_mul(&r[i].x, &r[last_i].x, &a[i].z);\n            }\n            last_i = i;\n        }\n    }\n    if (last_i == SIZE_MAX) {\n        return;\n    }\n    secp256k1_fe_inv_var(&u, &r[last_i].x);\n\n    i = last_i;\n    while (i > 0) {\n        i--;\n        if (!a[i].infinity) {\n            secp256k1_fe_mul(&r[last_i].x, &r[i].x, &u);\n            secp256k1_fe_mul(&u, &u, &a[last_i].z);\n            last_i = i;\n        }\n    }\n    VERIFY_CHECK(!a[last_i].infinity);\n    r[last_i].x = u;\n\n    for (i = 0; i < len; i++) {\n        if (!a[i].infinity) {\n            secp256k1_ge_set_gej_zinv(&r[i], &a[i], &r[i].x);\n        }\n    }\n}\n#endif\n\nstatic void secp256k1_ge_table_set_globalz(size_t len, secp256k1_ge *a, const secp256k1_fe *zr) {\n    size_t i = len - 1;\n    secp256k1_fe zs;\n\n    if (len > 0) {\n        /* Ensure all y values are in weak normal form for fast negation of points */\n        secp256k1_fe_normalize_weak(&a[i].y);\n        zs = zr[i];\n\n        /* Work our way backwards, using the z-ratios to scale the x/y values. */\n        while (i > 0) {\n            secp256k1_gej tmpa;\n            if (i != len - 1) {\n                secp256k1_fe_mul(&zs, &zs, &zr[i]);\n            }\n            i--;\n            tmpa.x = a[i].x;\n            tmpa.y = a[i].y;\n            tmpa.infinity = 0;\n            secp256k1_ge_set_gej_zinv(&a[i], &tmpa, &zs);\n        }\n    }\n}\n\nstatic void secp256k1_gej_set_infinity(secp256k1_gej *r) {\n    r->infinity = 1;\n    secp256k1_fe_clear(&r->x);\n    secp256k1_fe_clear(&r->y);\n    secp256k1_fe_clear(&r->z);\n}\n\nstatic void secp256k1_ge_set_infinity(secp256k1_ge *r) {\n    r->infinity = 1;\n    secp256k1_fe_clear(&r->x);\n    secp256k1_fe_clear(&r->y);\n}\n\n#if 0\nstatic void secp256k1_gej_clear(secp256k1_gej *r) {\n    r->infinity = 0;\n    secp256k1_fe_clear(&r->x);\n    secp256k1_fe_clear(&r->y);\n    secp256k1_fe_clear(&r->z);\n}\n\nstatic void secp256k1_ge_clear(secp256k1_ge *r) {\n    r->infinity = 0;\n    secp256k1_fe_clear(&r->x);\n    secp256k1_fe_clear(&r->y);\n}\n#endif\n\nstatic int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd) {\n    secp256k1_fe x2, x3;\n    r->x = *x;\n    secp256k1_fe_sqr(&x2, x);\n    secp256k1_fe_mul(&x3, x, &x2);\n    r->infinity = 0;\n    secp256k1_fe_add_int(&x3, SECP256K1_B);\n    if (!secp256k1_fe_sqrt_var(&r->y, &x3)) {\n        return 0;\n    }\n    secp256k1_fe_normalize_var(&r->y);\n    if (secp256k1_fe_is_odd(&r->y) != odd) {\n        secp256k1_fe_negate(&r->y, &r->y, 1);\n    }\n    return 1;\n\n}\n\nstatic void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a) {\n   r->infinity = a->infinity;\n   r->x = a->x;\n   r->y = a->y;\n   secp256k1_fe_set_int(&r->z, !r->infinity);\n}\n\nstatic int secp256k1_gej_eq_var(const secp256k1_gej *a, const secp256k1_gej *b) {\n    secp256k1_gej tmp;\n    secp256k1_gej_neg(&tmp, a);\n    secp256k1_gej_add_var(&tmp, &tmp, b, NULL);\n    return secp256k1_gej_is_infinity(&tmp);\n}\n\nstatic int secp256k1_gej_eq_ge_var(const secp256k1_gej *a, const secp256k1_ge *b) {\n    secp256k1_gej tmp;\n    secp256k1_gej_neg(&tmp, a);\n    secp256k1_gej_add_ge_var(&tmp, &tmp, b, NULL);\n    return secp256k1_gej_is_infinity(&tmp);\n}\n\nstatic int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a) {\n    secp256k1_fe r, r2;\n    VERIFY_CHECK(!a->infinity);\n    secp256k1_fe_sqr(&r, &a->z); secp256k1_fe_mul(&r, &r, x);\n    r2 = a->x; secp256k1_fe_normalize_weak(&r2);\n    return secp256k1_fe_equal_var(&r, &r2);\n}\n\nstatic void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a) {\n    r->infinity = a->infinity;\n    r->x = a->x;\n    r->y = a->y;\n    r->z = a->z;\n    secp256k1_fe_normalize_weak(&r->y);\n    secp256k1_fe_negate(&r->y, &r->y, 1);\n}\n\nstatic int secp256k1_gej_is_infinity(const secp256k1_gej *a) {\n    return a->infinity;\n}\n\nstatic int secp256k1_ge_is_valid_var(const secp256k1_ge *a) {\n    secp256k1_fe y2, x3;\n    if (a->infinity) {\n        return 0;\n    }\n    /* y^2 = x^3 + 7 */\n    secp256k1_fe_sqr(&y2, &a->y);\n    secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);\n    secp256k1_fe_add_int(&x3, SECP256K1_B);\n    secp256k1_fe_normalize_weak(&x3);\n    return secp256k1_fe_equal_var(&y2, &x3);\n}\n\nstatic SECP256K1_INLINE void secp256k1_gej_double(secp256k1_gej *r, const secp256k1_gej *a) {\n    /* Operations: 3 mul, 4 sqr, 8 add/half/mul_int/negate */\n    secp256k1_fe l, s, t;\n\n    r->infinity = a->infinity;\n\n    /* Formula used:\n     * L = (3/2) * X1^2\n     * S = Y1^2\n     * T = -X1*S\n     * X3 = L^2 + 2*T\n     * Y3 = -(L*(X3 + T) + S^2)\n     * Z3 = Y1*Z1\n     */\n\n    secp256k1_fe_mul(&r->z, &a->z, &a->y); /* Z3 = Y1*Z1 (1) */\n    secp256k1_fe_sqr(&s, &a->y);           /* S = Y1^2 (1) */\n    secp256k1_fe_sqr(&l, &a->x);           /* L = X1^2 (1) */\n    secp256k1_fe_mul_int(&l, 3);           /* L = 3*X1^2 (3) */\n    secp256k1_fe_half(&l);                 /* L = 3/2*X1^2 (2) */\n    secp256k1_fe_negate(&t, &s, 1);        /* T = -S (2) */\n    secp256k1_fe_mul(&t, &t, &a->x);       /* T = -X1*S (1) */\n    secp256k1_fe_sqr(&r->x, &l);           /* X3 = L^2 (1) */\n    secp256k1_fe_add(&r->x, &t);           /* X3 = L^2 + T (2) */\n    secp256k1_fe_add(&r->x, &t);           /* X3 = L^2 + 2*T (3) */\n    secp256k1_fe_sqr(&s, &s);              /* S' = S^2 (1) */\n    secp256k1_fe_add(&t, &r->x);           /* T' = X3 + T (4) */\n    secp256k1_fe_mul(&r->y, &t, &l);       /* Y3 = L*(X3 + T) (1) */\n    secp256k1_fe_add(&r->y, &s);           /* Y3 = L*(X3 + T) + S^2 (2) */\n    secp256k1_fe_negate(&r->y, &r->y, 2);  /* Y3 = -(L*(X3 + T) + S^2) (3) */\n}\n\nstatic void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) {\n    if (a->infinity) {\n        secp256k1_gej_set_infinity(r);\n        if (rzr != NULL) {\n            secp256k1_fe_set_int(rzr, 1);\n        }\n        return;\n    }\n\n    if (rzr != NULL) {\n        *rzr = a->y;\n        secp256k1_fe_normalize_weak(rzr);\n    }\n\n    secp256k1_gej_double(r, a);\n\n    /** For secp256k1, 2Q is infinity if and only if Q is infinity. This is because if 2Q = infinity,\n     *  Q must equal -Q, or that Q.y == -(Q.y), or Q.y is 0. For a point on y^2 = x^3 + 7 to have\n     *  y=0, x^3 must be -7 mod p. However, -7 has no cube root mod p.\n     *\n     *  Having said this, if this function receives a point on a sextic twist,\n     *  it is possible for y to be 0. This happens for y^2 = x^3 + 6,\n     *  since -6 does have a cube root mod p. For this point, gej_double will not set\n     *  the infinity flag even though the point doubles to infinity, so we explicitly set it to infinity.\n     */\n    r->infinity = secp256k1_fe_normalizes_to_zero_var(&r->z);\n}\n\nstatic void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr) {\n    /* 12 mul, 4 sqr, 11 add/negate/normalizes_to_zero (ignoring special cases) */\n    secp256k1_fe z22, z12, u1, u2, s1, s2, h, i, h2, h3, t;\n\n    if (a->infinity) {\n        VERIFY_CHECK(rzr == NULL);\n        *r = *b;\n        return;\n    }\n    if (b->infinity) {\n        if (rzr != NULL) {\n            secp256k1_fe_set_int(rzr, 1);\n        }\n        *r = *a;\n        return;\n    }\n\n    secp256k1_fe_sqr(&z22, &b->z);\n    secp256k1_fe_sqr(&z12, &a->z);\n    secp256k1_fe_mul(&u1, &a->x, &z22);\n    secp256k1_fe_mul(&u2, &b->x, &z12);\n    secp256k1_fe_mul(&s1, &a->y, &z22); secp256k1_fe_mul(&s1, &s1, &b->z);\n    secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);\n    secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);\n    secp256k1_fe_negate(&i, &s2, 1); secp256k1_fe_add(&i, &s1);\n    if (secp256k1_fe_normalizes_to_zero_var(&h)) {\n        if (secp256k1_fe_normalizes_to_zero_var(&i)) {\n            secp256k1_gej_double_var(r, a, rzr);\n        } else {\n            if (rzr != NULL) {\n                secp256k1_fe_set_int(rzr, 0);\n            }\n            secp256k1_gej_set_infinity(r);\n        }\n        return;\n    }\n\n    r->infinity = 0;\n    secp256k1_fe_mul(&t, &h, &b->z);\n    if (rzr != NULL) {\n        *rzr = t;\n    }\n    secp256k1_fe_mul(&r->z, &a->z, &t);\n\n    secp256k1_fe_sqr(&h2, &h);\n    secp256k1_fe_negate(&h2, &h2, 1);\n    secp256k1_fe_mul(&h3, &h2, &h);\n    secp256k1_fe_mul(&t, &u1, &h2);\n\n    secp256k1_fe_sqr(&r->x, &i);\n    secp256k1_fe_add(&r->x, &h3);\n    secp256k1_fe_add(&r->x, &t);\n    secp256k1_fe_add(&r->x, &t);\n\n    secp256k1_fe_add(&t, &r->x);\n    secp256k1_fe_mul(&r->y, &t, &i);\n    secp256k1_fe_mul(&h3, &h3, &s1);\n    secp256k1_fe_add(&r->y, &h3);\n}\n\nstatic void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr) {\n    /* 8 mul, 3 sqr, 13 add/negate/normalize_weak/normalizes_to_zero (ignoring special cases) */\n    secp256k1_fe z12, u1, u2, s1, s2, h, i, h2, h3, t;\n    if (a->infinity) {\n        VERIFY_CHECK(rzr == NULL);\n        if (rzr != NULL) {\n            secp256k1_fe_clear(rzr);\n        }\n        secp256k1_gej_set_ge(r, b);\n        return;\n    }\n    if (b->infinity) {\n        if (rzr != NULL) {\n            secp256k1_fe_set_int(rzr, 1);\n        }\n        *r = *a;\n        return;\n    }\n\n    secp256k1_fe_sqr(&z12, &a->z);\n    u1 = a->x; secp256k1_fe_normalize_weak(&u1);\n    secp256k1_fe_mul(&u2, &b->x, &z12);\n    s1 = a->y; secp256k1_fe_normalize_weak(&s1);\n    secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);\n    secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);\n    secp256k1_fe_negate(&i, &s2, 1); secp256k1_fe_add(&i, &s1);\n    if (secp256k1_fe_normalizes_to_zero_var(&h)) {\n        if (secp256k1_fe_normalizes_to_zero_var(&i)) {\n            secp256k1_gej_double_var(r, a, rzr);\n        } else {\n            if (rzr != NULL) {\n                secp256k1_fe_set_int(rzr, 0);\n            }\n            secp256k1_gej_set_infinity(r);\n        }\n        return;\n    }\n\n    r->infinity = 0;\n    if (rzr != NULL) {\n        *rzr = h;\n    }\n    secp256k1_fe_mul(&r->z, &a->z, &h);\n\n    secp256k1_fe_sqr(&h2, &h);\n    secp256k1_fe_negate(&h2, &h2, 1);\n    secp256k1_fe_mul(&h3, &h2, &h);\n    secp256k1_fe_mul(&t, &u1, &h2);\n\n    secp256k1_fe_sqr(&r->x, &i);\n    secp256k1_fe_add(&r->x, &h3);\n    secp256k1_fe_add(&r->x, &t);\n    secp256k1_fe_add(&r->x, &t);\n\n    secp256k1_fe_add(&t, &r->x);\n    secp256k1_fe_mul(&r->y, &t, &i);\n    secp256k1_fe_mul(&h3, &h3, &s1);\n    secp256k1_fe_add(&r->y, &h3);\n}\n\nstatic void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv) {\n    /* 9 mul, 3 sqr, 13 add/negate/normalize_weak/normalizes_to_zero (ignoring special cases) */\n    secp256k1_fe az, z12, u1, u2, s1, s2, h, i, h2, h3, t;\n\n    if (a->infinity) {\n        secp256k1_fe bzinv2, bzinv3;\n        r->infinity = b->infinity;\n        secp256k1_fe_sqr(&bzinv2, bzinv);\n        secp256k1_fe_mul(&bzinv3, &bzinv2, bzinv);\n        secp256k1_fe_mul(&r->x, &b->x, &bzinv2);\n        secp256k1_fe_mul(&r->y, &b->y, &bzinv3);\n        secp256k1_fe_set_int(&r->z, !r->infinity);\n        return;\n    }\n    if (b->infinity) {\n        *r = *a;\n        return;\n    }\n\n    /** We need to calculate (rx,ry,rz) = (ax,ay,az) + (bx,by,1/bzinv). Due to\n     *  secp256k1's isomorphism we can multiply the Z coordinates on both sides\n     *  by bzinv, and get: (rx,ry,rz*bzinv) = (ax,ay,az*bzinv) + (bx,by,1).\n     *  This means that (rx,ry,rz) can be calculated as\n     *  (ax,ay,az*bzinv) + (bx,by,1), when not applying the bzinv factor to rz.\n     *  The variable az below holds the modified Z coordinate for a, which is used\n     *  for the computation of rx and ry, but not for rz.\n     */\n    secp256k1_fe_mul(&az, &a->z, bzinv);\n\n    secp256k1_fe_sqr(&z12, &az);\n    u1 = a->x; secp256k1_fe_normalize_weak(&u1);\n    secp256k1_fe_mul(&u2, &b->x, &z12);\n    s1 = a->y; secp256k1_fe_normalize_weak(&s1);\n    secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &az);\n    secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);\n    secp256k1_fe_negate(&i, &s2, 1); secp256k1_fe_add(&i, &s1);\n    if (secp256k1_fe_normalizes_to_zero_var(&h)) {\n        if (secp256k1_fe_normalizes_to_zero_var(&i)) {\n            secp256k1_gej_double_var(r, a, NULL);\n        } else {\n            secp256k1_gej_set_infinity(r);\n        }\n        return;\n    }\n\n    r->infinity = 0;\n    secp256k1_fe_mul(&r->z, &a->z, &h);\n\n    secp256k1_fe_sqr(&h2, &h);\n    secp256k1_fe_negate(&h2, &h2, 1);\n    secp256k1_fe_mul(&h3, &h2, &h);\n    secp256k1_fe_mul(&t, &u1, &h2);\n\n    secp256k1_fe_sqr(&r->x, &i);\n    secp256k1_fe_add(&r->x, &h3);\n    secp256k1_fe_add(&r->x, &t);\n    secp256k1_fe_add(&r->x, &t);\n\n    secp256k1_fe_add(&t, &r->x);\n    secp256k1_fe_mul(&r->y, &t, &i);\n    secp256k1_fe_mul(&h3, &h3, &s1);\n    secp256k1_fe_add(&r->y, &h3);\n}\n\n\n#if 0\nstatic void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b) {\n    /* Operations: 7 mul, 5 sqr, 24 add/cmov/half/mul_int/negate/normalize_weak/normalizes_to_zero */\n    secp256k1_fe zz, u1, u2, s1, s2, t, tt, m, n, q, rr;\n    secp256k1_fe m_alt, rr_alt;\n    int degenerate;\n    VERIFY_CHECK(!b->infinity);\n    VERIFY_CHECK(a->infinity == 0 || a->infinity == 1);\n\n    /*  In:\n     *    Eric Brier and Marc Joye, Weierstrass Elliptic Curves and Side-Channel Attacks.\n     *    In D. Naccache and P. Paillier, Eds., Public Key Cryptography, vol. 2274 of Lecture Notes in Computer Science, pages 335-345. Springer-Verlag, 2002.\n     *  we find as solution for a unified addition/doubling formula:\n     *    lambda = ((x1 + x2)^2 - x1 * x2 + a) / (y1 + y2), with a = 0 for secp256k1's curve equation.\n     *    x3 = lambda^2 - (x1 + x2)\n     *    2*y3 = lambda * (x1 + x2 - 2 * x3) - (y1 + y2).\n     *\n     *  Substituting x_i = Xi / Zi^2 and yi = Yi / Zi^3, for i=1,2,3, gives:\n     *    U1 = X1*Z2^2, U2 = X2*Z1^2\n     *    S1 = Y1*Z2^3, S2 = Y2*Z1^3\n     *    Z = Z1*Z2\n     *    T = U1+U2\n     *    M = S1+S2\n     *    Q = -T*M^2\n     *    R = T^2-U1*U2\n     *    X3 = R^2+Q\n     *    Y3 = -(R*(2*X3+Q)+M^4)/2\n     *    Z3 = M*Z\n     *  (Note that the paper uses xi = Xi / Zi and yi = Yi / Zi instead.)\n     *\n     *  This formula has the benefit of being the same for both addition\n     *  of distinct points and doubling. However, it breaks down in the\n     *  case that either point is infinity, or that y1 = -y2. We handle\n     *  these cases in the following ways:\n     *\n     *    - If b is infinity we simply bail by means of a VERIFY_CHECK.\n     *\n     *    - If a is infinity, we detect this, and at the end of the\n     *      computation replace the result (which will be meaningless,\n     *      but we compute to be constant-time) with b.x : b.y : 1.\n     *\n     *    - If a = -b, we have y1 = -y2, which is a degenerate case.\n     *      But here the answer is infinity, so we simply set the\n     *      infinity flag of the result, overriding the computed values\n     *      without even needing to cmov.\n     *\n     *    - If y1 = -y2 but x1 != x2, which does occur thanks to certain\n     *      properties of our curve (specifically, 1 has nontrivial cube\n     *      roots in our field, and the curve equation has no x coefficient)\n     *      then the answer is not infinity but also not given by the above\n     *      equation. In this case, we cmov in place an alternate expression\n     *      for lambda. Specifically (y1 - y2)/(x1 - x2). Where both these\n     *      expressions for lambda are defined, they are equal, and can be\n     *      obtained from each other by multiplication by (y1 + y2)/(y1 + y2)\n     *      then substitution of x^3 + 7 for y^2 (using the curve equation).\n     *      For all pairs of nonzero points (a, b) at least one is defined,\n     *      so this covers everything.\n     */\n\n    secp256k1_fe_sqr(&zz, &a->z);                       /* z = Z1^2 */\n    u1 = a->x; secp256k1_fe_normalize_weak(&u1);        /* u1 = U1 = X1*Z2^2 (1) */\n    secp256k1_fe_mul(&u2, &b->x, &zz);                  /* u2 = U2 = X2*Z1^2 (1) */\n    s1 = a->y; secp256k1_fe_normalize_weak(&s1);        /* s1 = S1 = Y1*Z2^3 (1) */\n    secp256k1_fe_mul(&s2, &b->y, &zz);                  /* s2 = Y2*Z1^2 (1) */\n    secp256k1_fe_mul(&s2, &s2, &a->z);                  /* s2 = S2 = Y2*Z1^3 (1) */\n    t = u1; secp256k1_fe_add(&t, &u2);                  /* t = T = U1+U2 (2) */\n    m = s1; secp256k1_fe_add(&m, &s2);                  /* m = M = S1+S2 (2) */\n    secp256k1_fe_sqr(&rr, &t);                          /* rr = T^2 (1) */\n    secp256k1_fe_negate(&m_alt, &u2, 1);                /* Malt = -X2*Z1^2 */\n    secp256k1_fe_mul(&tt, &u1, &m_alt);                 /* tt = -U1*U2 (2) */\n    secp256k1_fe_add(&rr, &tt);                         /* rr = R = T^2-U1*U2 (3) */\n    /* If lambda = R/M = R/0 we have a problem (except in the \"trivial\"\n     * case that Z = z1z2 = 0, and this is special-cased later on). */\n    degenerate = secp256k1_fe_normalizes_to_zero(&m);\n    /* This only occurs when y1 == -y2 and x1^3 == x2^3, but x1 != x2.\n     * This means either x1 == beta*x2 or beta*x1 == x2, where beta is\n     * a nontrivial cube root of one. In either case, an alternate\n     * non-indeterminate expression for lambda is (y1 - y2)/(x1 - x2),\n     * so we set R/M equal to this. */\n    rr_alt = s1;\n    secp256k1_fe_mul_int(&rr_alt, 2);       /* rr = Y1*Z2^3 - Y2*Z1^3 (2) */\n    secp256k1_fe_add(&m_alt, &u1);          /* Malt = X1*Z2^2 - X2*Z1^2 */\n\n    secp256k1_fe_cmov(&rr_alt, &rr, !degenerate);\n    secp256k1_fe_cmov(&m_alt, &m, !degenerate);\n    /* Now Ralt / Malt = lambda and is guaranteed not to be Ralt / 0.\n     * From here on out Ralt and Malt represent the numerator\n     * and denominator of lambda; R and M represent the explicit\n     * expressions x1^2 + x2^2 + x1x2 and y1 + y2. */\n    secp256k1_fe_sqr(&n, &m_alt);                       /* n = Malt^2 (1) */\n    secp256k1_fe_negate(&q, &t, 2);                     /* q = -T (3) */\n    secp256k1_fe_mul(&q, &q, &n);                       /* q = Q = -T*Malt^2 (1) */\n    /* These two lines use the observation that either M == Malt or M == 0,\n     * so M^3 * Malt is either Malt^4 (which is computed by squaring), or\n     * zero (which is \"computed\" by cmov). So the cost is one squaring\n     * versus two multiplications. */\n    secp256k1_fe_sqr(&n, &n);\n    secp256k1_fe_cmov(&n, &m, degenerate);              /* n = M^3 * Malt (2) */\n    secp256k1_fe_sqr(&t, &rr_alt);                      /* t = Ralt^2 (1) */\n    secp256k1_fe_mul(&r->z, &a->z, &m_alt);             /* r->z = Z3 = Malt*Z (1) */\n    secp256k1_fe_add(&t, &q);                           /* t = Ralt^2 + Q (2) */\n    r->x = t;                                           /* r->x = X3 = Ralt^2 + Q (2) */\n    secp256k1_fe_mul_int(&t, 2);                        /* t = 2*X3 (4) */\n    secp256k1_fe_add(&t, &q);                           /* t = 2*X3 + Q (5) */\n    secp256k1_fe_mul(&t, &t, &rr_alt);                  /* t = Ralt*(2*X3 + Q) (1) */\n    secp256k1_fe_add(&t, &n);                           /* t = Ralt*(2*X3 + Q) + M^3*Malt (3) */\n    secp256k1_fe_negate(&r->y, &t, 3);                  /* r->y = -(Ralt*(2*X3 + Q) + M^3*Malt) (4) */\n    secp256k1_fe_half(&r->y);                           /* r->y = Y3 = -(Ralt*(2*X3 + Q) + M^3*Malt)/2 (3) */\n\n    /* In case a->infinity == 1, replace r with (b->x, b->y, 1). */\n    secp256k1_fe_cmov(&r->x, &b->x, a->infinity);\n    secp256k1_fe_cmov(&r->y, &b->y, a->infinity);\n    secp256k1_fe_cmov(&r->z, &secp256k1_fe_one, a->infinity);\n\n    /* Set r->infinity if r->z is 0.\n     *\n     * If a->infinity is set, then r->infinity = (r->z == 0) = (1 == 0) = false,\n     * which is correct because the function assumes that b is not infinity.\n     *\n     * Now assume !a->infinity. This implies Z = Z1 != 0.\n     *\n     * Case y1 = -y2:\n     * In this case we could have a = -b, namely if x1 = x2.\n     * We have degenerate = true, r->z = (x1 - x2) * Z.\n     * Then r->infinity = ((x1 - x2)Z == 0) = (x1 == x2) = (a == -b).\n     *\n     * Case y1 != -y2:\n     * In this case, we can't have a = -b.\n     * We have degenerate = false, r->z = (y1 + y2) * Z.\n     * Then r->infinity = ((y1 + y2)Z == 0) = (y1 == -y2) = false. */\n    r->infinity = secp256k1_fe_normalizes_to_zero(&r->z);\n}\n#endif\n\nstatic void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *s) {\n    /* Operations: 4 mul, 1 sqr */\n    secp256k1_fe zz;\n    VERIFY_CHECK(!secp256k1_fe_is_zero(s));\n    secp256k1_fe_sqr(&zz, s);\n    secp256k1_fe_mul(&r->x, &r->x, &zz);                /* r->x *= s^2 */\n    secp256k1_fe_mul(&r->y, &r->y, &zz);\n    secp256k1_fe_mul(&r->y, &r->y, s);                  /* r->y *= s^3 */\n    secp256k1_fe_mul(&r->z, &r->z, s);                  /* r->z *= s   */\n}\n\nstatic void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a) {\n    secp256k1_fe x, y;\n    VERIFY_CHECK(!a->infinity);\n    x = a->x;\n    secp256k1_fe_normalize_var(&x);\n    y = a->y;\n    secp256k1_fe_normalize_var(&y);\n    secp256k1_fe_to_storage(&r->x, &x);\n    secp256k1_fe_to_storage(&r->y, &y);\n}\n\nstatic void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a) {\n    secp256k1_fe_from_storage(&r->x, &a->x);\n    secp256k1_fe_from_storage(&r->y, &a->y);\n    r->infinity = 0;\n}\n\n#if 0\nstatic SECP256K1_INLINE void secp256k1_gej_cmov(secp256k1_gej *r, const secp256k1_gej *a, int flag) {\n    secp256k1_fe_cmov(&r->x, &a->x, flag);\n    secp256k1_fe_cmov(&r->y, &a->y, flag);\n    secp256k1_fe_cmov(&r->z, &a->z, flag);\n\n    r->infinity ^= (r->infinity ^ a->infinity) & flag;\n}\n\nstatic SECP256K1_INLINE void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag) {\n    secp256k1_fe_storage_cmov(&r->x, &a->x, flag);\n    secp256k1_fe_storage_cmov(&r->y, &a->y, flag);\n}\n\nstatic void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a) {\n    *r = *a;\n    secp256k1_fe_mul(&r->x, &r->x, &secp256k1_const_beta);\n}\n#endif\n\nstatic int secp256k1_ge_is_in_correct_subgroup(const secp256k1_ge* ge) {\n    (void)ge;\n    /* The real secp256k1 group has cofactor 1, so the subgroup is the entire curve. */\n    return 1;\n}\n\n#endif /* SECP256K1_GROUP_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/int128.h",
    "content": "#ifndef SECP256K1_INT128_H\n#define SECP256K1_INT128_H\n\n#include \"util.h\"\n\n#if defined(SECP256K1_WIDEMUL_INT128)\n#  if defined(SECP256K1_INT128_NATIVE)\n#    include \"int128_native.h\"\n#  elif defined(SECP256K1_INT128_STRUCT)\n#    include \"int128_struct.h\"\n#  else\n#    error \"Please select int128 implementation\"\n#  endif\n\n/* Construct an unsigned 128-bit value from a high and a low 64-bit value. */\nstatic SECP256K1_INLINE void secp256k1_u128_load(secp256k1_uint128 *r, uint64_t hi, uint64_t lo);\n\n/* Multiply two unsigned 64-bit values a and b and write the result to r. */\nstatic SECP256K1_INLINE void secp256k1_u128_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b);\n\n/* Multiply two unsigned 64-bit values a and b and add the result to r.\n * The final result is taken modulo 2^128.\n */\nstatic SECP256K1_INLINE void secp256k1_u128_accum_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b);\n\n/* Add an unsigned 64-bit value a to r.\n * The final result is taken modulo 2^128.\n */\nstatic SECP256K1_INLINE void secp256k1_u128_accum_u64(secp256k1_uint128 *r, uint64_t a);\n\n/* Unsigned (logical) right shift.\n * Non-constant time in n.\n */\nstatic SECP256K1_INLINE void secp256k1_u128_rshift(secp256k1_uint128 *r, unsigned int n);\n\n/* Return the low 64-bits of a 128-bit value as an unsigned 64-bit value. */\nstatic SECP256K1_INLINE uint64_t secp256k1_u128_to_u64(const secp256k1_uint128 *a);\n\n/* Return the high 64-bits of a 128-bit value as an unsigned 64-bit value. */\nstatic SECP256K1_INLINE uint64_t secp256k1_u128_hi_u64(const secp256k1_uint128 *a);\n\n/* Write an unsigned 64-bit value to r. */\nstatic SECP256K1_INLINE void secp256k1_u128_from_u64(secp256k1_uint128 *r, uint64_t a);\n\n/* Tests if r is strictly less than to 2^n.\n * n must be strictly less than 128.\n */\nstatic SECP256K1_INLINE int secp256k1_u128_check_bits(const secp256k1_uint128 *r, unsigned int n);\n\n/* Construct an signed 128-bit value from a high and a low 64-bit value. */\nstatic SECP256K1_INLINE void secp256k1_i128_load(secp256k1_int128 *r, int64_t hi, uint64_t lo);\n\n/* Multiply two signed 64-bit values a and b and write the result to r. */\nstatic SECP256K1_INLINE void secp256k1_i128_mul(secp256k1_int128 *r, int64_t a, int64_t b);\n\n/* Multiply two signed 64-bit values a and b and add the result to r.\n * Overflow or underflow from the addition is undefined behaviour.\n */\nstatic SECP256K1_INLINE void secp256k1_i128_accum_mul(secp256k1_int128 *r, int64_t a, int64_t b);\n\n/* Compute a*d - b*c from signed 64-bit values and write the result to r. */\nstatic SECP256K1_INLINE void secp256k1_i128_det(secp256k1_int128 *r, int64_t a, int64_t b, int64_t c, int64_t d);\n\n/* Signed (arithmetic) right shift.\n * Non-constant time in b.\n */\nstatic SECP256K1_INLINE void secp256k1_i128_rshift(secp256k1_int128 *r, unsigned int b);\n\n/* Return the input value modulo 2^64. */\nstatic SECP256K1_INLINE uint64_t secp256k1_i128_to_u64(const secp256k1_int128 *a);\n\n/* Return the value as a signed 64-bit value.\n * Requires the input to be between INT64_MIN and INT64_MAX.\n */\nstatic SECP256K1_INLINE int64_t secp256k1_i128_to_i64(const secp256k1_int128 *a);\n\n/* Write a signed 64-bit value to r. */\nstatic SECP256K1_INLINE void secp256k1_i128_from_i64(secp256k1_int128 *r, int64_t a);\n\n/* Compare two 128-bit values for equality. */\nstatic SECP256K1_INLINE int secp256k1_i128_eq_var(const secp256k1_int128 *a, const secp256k1_int128 *b);\n\n/* Tests if r is equal to sign*2^n (sign must be 1 or -1).\n * n must be strictly less than 127.\n */\nstatic SECP256K1_INLINE int secp256k1_i128_check_pow2(const secp256k1_int128 *r, unsigned int n, int sign);\n\n#endif\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/int128_impl.h",
    "content": "#ifndef SECP256K1_INT128_IMPL_H\n#define SECP256K1_INT128_IMPL_H\n\n#include \"util.h\"\n\n#include \"int128.h\"\n\n#if defined(SECP256K1_WIDEMUL_INT128)\n#  if defined(SECP256K1_INT128_NATIVE)\n#    include \"int128_native_impl.h\"\n#  elif defined(SECP256K1_INT128_STRUCT)\n#    include \"int128_struct_impl.h\"\n#  else\n#    error \"Please select int128 implementation\"\n#  endif\n#endif\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/int128_native.h",
    "content": "#ifndef SECP256K1_INT128_NATIVE_H\n#define SECP256K1_INT128_NATIVE_H\n\n#include <stdint.h>\n#include \"util.h\"\n\n#if !defined(UINT128_MAX) && defined(__SIZEOF_INT128__)\nSECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t;\nSECP256K1_GNUC_EXT typedef __int128 int128_t;\n# define UINT128_MAX ((uint128_t)(-1))\n# define INT128_MAX ((int128_t)(UINT128_MAX >> 1))\n# define INT128_MIN (-INT128_MAX - 1)\n/* No (U)INT128_C macros because compilers providing __int128 do not support 128-bit literals.  */\n#endif\n\ntypedef uint128_t secp256k1_uint128;\ntypedef int128_t secp256k1_int128;\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/int128_native_impl.h",
    "content": "#ifndef SECP256K1_INT128_NATIVE_IMPL_H\n#define SECP256K1_INT128_NATIVE_IMPL_H\n\n#include \"int128.h\"\n\nstatic SECP256K1_INLINE void secp256k1_u128_load(secp256k1_uint128 *r, uint64_t hi, uint64_t lo) {\n    *r = (((uint128_t)hi) << 64) + lo;\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b) {\n   *r = (uint128_t)a * b;\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_accum_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b) {\n   *r += (uint128_t)a * b;\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_accum_u64(secp256k1_uint128 *r, uint64_t a) {\n   *r += a;\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_rshift(secp256k1_uint128 *r, unsigned int n) {\n   VERIFY_CHECK(n < 128);\n   *r >>= n;\n}\n\nstatic SECP256K1_INLINE uint64_t secp256k1_u128_to_u64(const secp256k1_uint128 *a) {\n   return (uint64_t)(*a);\n}\n\nstatic SECP256K1_INLINE uint64_t secp256k1_u128_hi_u64(const secp256k1_uint128 *a) {\n   return (uint64_t)(*a >> 64);\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_from_u64(secp256k1_uint128 *r, uint64_t a) {\n   *r = a;\n}\n\nstatic SECP256K1_INLINE int secp256k1_u128_check_bits(const secp256k1_uint128 *r, unsigned int n) {\n   VERIFY_CHECK(n < 128);\n   return (*r >> n == 0);\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_load(secp256k1_int128 *r, int64_t hi, uint64_t lo) {\n   *r = (secp256k1_int128)((((uint128_t)(uint64_t)hi) << 64) + lo);\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_mul(secp256k1_int128 *r, int64_t a, int64_t b) {\n   *r = (int128_t)a * b;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_accum_mul(secp256k1_int128 *r, int64_t a, int64_t b) {\n   int128_t ab = (int128_t)a * b;\n   VERIFY_CHECK(0 <= ab ? *r <= INT128_MAX - ab : INT128_MIN - ab <= *r);\n   *r += ab;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_det(secp256k1_int128 *r, int64_t a, int64_t b, int64_t c, int64_t d) {\n   int128_t ad = (int128_t)a * d;\n   int128_t bc = (int128_t)b * c;\n   VERIFY_CHECK(0 <= bc ? INT128_MIN + bc <= ad : ad <= INT128_MAX + bc);\n   *r = ad - bc;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_rshift(secp256k1_int128 *r, unsigned int n) {\n   VERIFY_CHECK(n < 128);\n   *r >>= n;\n}\n\nstatic SECP256K1_INLINE uint64_t secp256k1_i128_to_u64(const secp256k1_int128 *a) {\n   return (uint64_t)*a;\n}\n\nstatic SECP256K1_INLINE int64_t secp256k1_i128_to_i64(const secp256k1_int128 *a) {\n   VERIFY_CHECK(INT64_MIN <= *a && *a <= INT64_MAX);\n   return (int64_t)*a;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_from_i64(secp256k1_int128 *r, int64_t a) {\n   *r = a;\n}\n\nstatic SECP256K1_INLINE int secp256k1_i128_eq_var(const secp256k1_int128 *a, const secp256k1_int128 *b) {\n   return *a == *b;\n}\n\nstatic SECP256K1_INLINE int secp256k1_i128_check_pow2(const secp256k1_int128 *r, unsigned int n, int sign) {\n   VERIFY_CHECK(n < 127);\n   VERIFY_CHECK(sign == 1 || sign == -1);\n   return (*r == (int128_t)((uint128_t)sign << n));\n}\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/int128_struct.h",
    "content": "#ifndef SECP256K1_INT128_STRUCT_H\n#define SECP256K1_INT128_STRUCT_H\n\n#include <stdint.h>\n#include \"util.h\"\n\ntypedef struct secp256k1_uint128 {\n  uint64_t lo;\n  uint64_t hi;\n} secp256k1_uint128;\n\ntypedef secp256k1_uint128 secp256k1_int128;\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/int128_struct_impl.h",
    "content": "#ifndef SECP256K1_INT128_STRUCT_IMPL_H\n#define SECP256K1_INT128_STRUCT_IMPL_H\n\n#include \"int128.h\"\n\n#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64)) /* MSVC */\n#    include <intrin.h>\n#    if defined(_M_ARM64) || defined(SECP256K1_MSVC_MULH_TEST_OVERRIDE)\n/* On ARM64 MSVC, use __(u)mulh for the upper half of 64x64 multiplications.\n   (Define SECP256K1_MSVC_MULH_TEST_OVERRIDE to test this code path on X64,\n   which supports both __(u)mulh and _umul128.) */\n#        if defined(SECP256K1_MSVC_MULH_TEST_OVERRIDE)\n#            pragma message(__FILE__ \": SECP256K1_MSVC_MULH_TEST_OVERRIDE is defined, forcing use of __(u)mulh.\")\n#        endif\nstatic SECP256K1_INLINE uint64_t secp256k1_umul128(uint64_t a, uint64_t b, uint64_t* hi) {\n    *hi = __umulh(a, b);\n    return a * b;\n}\n\nstatic SECP256K1_INLINE int64_t secp256k1_mul128(int64_t a, int64_t b, int64_t* hi) {\n    *hi = __mulh(a, b);\n    return (uint64_t)a * (uint64_t)b;\n}\n#    else\n/* On x84_64 MSVC, use native _(u)mul128 for 64x64->128 multiplications. */\n#        define secp256k1_umul128 _umul128\nstatic SECP256K1_INLINE uint64_t secp256k1_mul128(int64_t a, int64_t b, int64_t* hi) {\n    return (uint64_t)_mul128(a, b, hi);\n}\n#    endif\n#else\n/* On other systems, emulate 64x64->128 multiplications using 32x32->64 multiplications. */\nstatic SECP256K1_INLINE uint64_t secp256k1_umul128(uint64_t a, uint64_t b, uint64_t* hi) {\n    uint64_t ll = (uint64_t)(uint32_t)a * (uint32_t)b;\n    uint64_t lh = (uint32_t)a * (b >> 32);\n    uint64_t hl = (a >> 32) * (uint32_t)b;\n    uint64_t hh = (a >> 32) * (b >> 32);\n    uint64_t mid34 = (ll >> 32) + (uint32_t)lh + (uint32_t)hl;\n    *hi = hh + (lh >> 32) + (hl >> 32) + (mid34 >> 32);\n    return (mid34 << 32) + (uint32_t)ll;\n}\n\nstatic SECP256K1_INLINE uint64_t secp256k1_mul128(int64_t a, int64_t b, int64_t* hi) {\n    uint64_t ll = (uint64_t)(uint32_t)a * (uint32_t)b;\n    int64_t lh = (uint32_t)a * (b >> 32);\n    int64_t hl = (a >> 32) * (uint32_t)b;\n    int64_t hh = (a >> 32) * (b >> 32);\n    uint64_t mid34 = (ll >> 32) + (uint32_t)lh + (uint32_t)hl;\n    *hi = hh + (lh >> 32) + (hl >> 32) + (int64_t)(mid34 >> 32);\n    return (mid34 << 32) + (uint32_t)ll;\n}\n#endif\n\nstatic SECP256K1_INLINE void secp256k1_u128_load(secp256k1_uint128 *r, uint64_t hi, uint64_t lo) {\n    r->hi = hi;\n    r->lo = lo;\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b) {\n   r->lo = secp256k1_umul128(a, b, &r->hi);\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_accum_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b) {\n   uint64_t lo, hi;\n   lo = secp256k1_umul128(a, b, &hi);\n   r->lo += lo;\n   r->hi += hi + (r->lo < lo);\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_accum_u64(secp256k1_uint128 *r, uint64_t a) {\n   r->lo += a;\n   r->hi += r->lo < a;\n}\n\n/* Unsigned (logical) right shift.\n * Non-constant time in n.\n */\nstatic SECP256K1_INLINE void secp256k1_u128_rshift(secp256k1_uint128 *r, unsigned int n) {\n   VERIFY_CHECK(n < 128);\n   if (n >= 64) {\n     r->lo = r->hi >> (n-64);\n     r->hi = 0;\n   } else if (n > 0) {\n     r->lo = ((1U * r->hi) << (64-n)) | r->lo >> n;\n     r->hi >>= n;\n   }\n}\n\nstatic SECP256K1_INLINE uint64_t secp256k1_u128_to_u64(const secp256k1_uint128 *a) {\n   return a->lo;\n}\n\nstatic SECP256K1_INLINE uint64_t secp256k1_u128_hi_u64(const secp256k1_uint128 *a) {\n   return a->hi;\n}\n\nstatic SECP256K1_INLINE void secp256k1_u128_from_u64(secp256k1_uint128 *r, uint64_t a) {\n   r->hi = 0;\n   r->lo = a;\n}\n\nstatic SECP256K1_INLINE int secp256k1_u128_check_bits(const secp256k1_uint128 *r, unsigned int n) {\n   VERIFY_CHECK(n < 128);\n   return n >= 64 ? r->hi >> (n - 64) == 0\n                  : r->hi == 0 && r->lo >> n == 0;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_load(secp256k1_int128 *r, int64_t hi, uint64_t lo) {\n    r->hi = (uint64_t)hi;\n    r->lo = lo;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_mul(secp256k1_int128 *r, int64_t a, int64_t b) {\n   int64_t hi;\n   r->lo = secp256k1_mul128(a, b, &hi);\n   r->hi = (uint64_t)hi;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_accum_mul(secp256k1_int128 *r, int64_t a, int64_t b) {\n   int64_t hi;\n   uint64_t lo = secp256k1_mul128(a, b, &hi);\n   r->lo += lo;\n   hi += r->lo < lo;\n   /* Verify no overflow.\n    * If r represents a positive value (the sign bit is not set) and the value we are adding is a positive value (the sign bit is not set),\n    * then we require that the resulting value also be positive (the sign bit is not set).\n    * Note that (X <= Y) means (X implies Y) when X and Y are boolean values (i.e. 0 or 1).\n    */\n   VERIFY_CHECK((r->hi <= 0x7fffffffffffffffu && (uint64_t)hi <= 0x7fffffffffffffffu) <= (r->hi + (uint64_t)hi <= 0x7fffffffffffffffu));\n   /* Verify no underflow.\n    * If r represents a negative value (the sign bit is set) and the value we are adding is a negative value (the sign bit is set),\n    * then we require that the resulting value also be negative (the sign bit is set).\n    */\n   VERIFY_CHECK((r->hi > 0x7fffffffffffffffu && (uint64_t)hi > 0x7fffffffffffffffu) <= (r->hi + (uint64_t)hi > 0x7fffffffffffffffu));\n   r->hi += (uint64_t)hi;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_dissip_mul(secp256k1_int128 *r, int64_t a, int64_t b) {\n   int64_t hi;\n   uint64_t lo = secp256k1_mul128(a, b, &hi);\n   hi += r->lo < lo;\n   /* Verify no overflow.\n    * If r represents a positive value (the sign bit is not set) and the value we are subtracting is a negative value (the sign bit is set),\n    * then we require that the resulting value also be positive (the sign bit is not set).\n    */\n   VERIFY_CHECK((r->hi <= 0x7fffffffffffffffu && (uint64_t)hi > 0x7fffffffffffffffu) <= (r->hi - (uint64_t)hi <= 0x7fffffffffffffffu));\n   /* Verify no underflow.\n    * If r represents a negative value (the sign bit is set) and the value we are subtracting is a positive value (the sign sign bit is not set),\n    * then we require that the resulting value also be negative (the sign bit is set).\n    */\n   VERIFY_CHECK((r->hi > 0x7fffffffffffffffu && (uint64_t)hi <= 0x7fffffffffffffffu) <= (r->hi - (uint64_t)hi > 0x7fffffffffffffffu));\n   r->hi -= (uint64_t)hi;\n   r->lo -= lo;\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_det(secp256k1_int128 *r, int64_t a, int64_t b, int64_t c, int64_t d) {\n   secp256k1_i128_mul(r, a, d);\n   secp256k1_i128_dissip_mul(r, b, c);\n}\n\n/* Signed (arithmetic) right shift.\n * Non-constant time in n.\n */\nstatic SECP256K1_INLINE void secp256k1_i128_rshift(secp256k1_int128 *r, unsigned int n) {\n   VERIFY_CHECK(n < 128);\n   if (n >= 64) {\n     r->lo = (uint64_t)((int64_t)(r->hi) >> (n-64));\n     r->hi = (uint64_t)((int64_t)(r->hi) >> 63);\n   } else if (n > 0) {\n     r->lo = ((1U * r->hi) << (64-n)) | r->lo >> n;\n     r->hi = (uint64_t)((int64_t)(r->hi) >> n);\n   }\n}\n\nstatic SECP256K1_INLINE uint64_t secp256k1_i128_to_u64(const secp256k1_int128 *a) {\n   return a->lo;\n}\n\nstatic SECP256K1_INLINE int64_t secp256k1_i128_to_i64(const secp256k1_int128 *a) {\n   /* Verify that a represents a 64 bit signed value by checking that the high bits are a sign extension of the low bits. */\n   VERIFY_CHECK(a->hi == -(a->lo >> 63));\n   return (int64_t)secp256k1_i128_to_u64(a);\n}\n\nstatic SECP256K1_INLINE void secp256k1_i128_from_i64(secp256k1_int128 *r, int64_t a) {\n   r->hi = (uint64_t)(a >> 63);\n   r->lo = (uint64_t)a;\n}\n\nstatic SECP256K1_INLINE int secp256k1_i128_eq_var(const secp256k1_int128 *a, const secp256k1_int128 *b) {\n   return a->hi == b->hi && a->lo == b->lo;\n}\n\nstatic SECP256K1_INLINE int secp256k1_i128_check_pow2(const secp256k1_int128 *r, unsigned int n, int sign) {\n    VERIFY_CHECK(n < 127);\n    VERIFY_CHECK(sign == 1 || sign == -1);\n    return n >= 64 ? r->hi == (uint64_t)sign << (n - 64) && r->lo == 0\n                   : r->hi == (uint64_t)((sign - 1) >> 1) && r->lo == (uint64_t)sign << n;\n}\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/modinv64.h",
    "content": "/***********************************************************************\n * Copyright (c) 2020 Peter Dettman                                    *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n **********************************************************************/\n\n#ifndef SECP256K1_MODINV64_H\n#define SECP256K1_MODINV64_H\n\n#include \"util.h\"\n\n#ifndef SECP256K1_WIDEMUL_INT128\n#error \"modinv64 requires 128-bit wide multiplication support\"\n#endif\n\n/* A signed 62-bit limb representation of integers.\n *\n * Its value is sum(v[i] * 2^(62*i), i=0..4). */\ntypedef struct secp256k1_modinv64_signed62 {\n    int64_t v[5];\n} secp256k1_modinv64_signed62;\n\ntypedef struct secp256k1_modinv64_modinfo {\n    /* The modulus in signed62 notation, must be odd and in [3, 2^256]. */\n    secp256k1_modinv64_signed62 modulus;\n\n    /* modulus^{-1} mod 2^62 */\n    uint64_t modulus_inv62;\n} secp256k1_modinv64_modinfo;\n\nstatic inline void secp256k1_modinv64_signed62_assign(secp256k1_modinv64_signed62 *dst, const secp256k1_modinv64_signed62 *src) {\n#ifdef VST\n  dst->v[0] = src->v[0];\n  dst->v[1] = src->v[1];\n  dst->v[2] = src->v[2];\n  dst->v[3] = src->v[3];\n  dst->v[4] = src->v[4];\n#else\n  *dst = *src;\n#endif\n}\n\n/* Replace x with its modular inverse mod modinfo->modulus. x must be in range [0, modulus).\n * If x is zero, the result will be zero as well. If not, the inverse must exist (i.e., the gcd of\n * x and modulus must be 1). These rules are automatically satisfied if the modulus is prime.\n *\n * On output, all of x's limbs will be in [0, 2^62).\n */\nstatic void secp256k1_modinv64_var(secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo);\n\n#if 0\n/* Same as secp256k1_modinv64_var, but constant time in x (not in the modulus). */\nstatic void secp256k1_modinv64(secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo);\n\n/* Compute the Jacobi symbol for (x | modinfo->modulus). x must be coprime with modulus (and thus\n * cannot be 0, as modulus >= 3). All limbs of x must be non-negative. Returns 0 if the result\n * cannot be computed. */\nstatic int secp256k1_jacobi64_maybe_var(const secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo);\n#endif\n\n#endif /* SECP256K1_MODINV64_H */\n"
  },
  {
    "path": "C/secp256k1/modinv64_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2020 Peter Dettman                                    *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n **********************************************************************/\n\n#ifndef SECP256K1_MODINV64_IMPL_H\n#define SECP256K1_MODINV64_IMPL_H\n\n#include \"int128.h\"\n#include \"modinv64.h\"\n\n/* This file implements modular inversion based on the paper \"Fast constant-time gcd computation and\n * modular inversion\" by Daniel J. Bernstein and Bo-Yin Yang.\n *\n * For an explanation of the algorithm, see doc/safegcd_implementation.md. This file contains an\n * implementation for N=62, using 62-bit signed limbs represented as int64_t.\n */\n\n/* Data type for transition matrices (see section 3 of explanation).\n *\n * t = [ u  v ]\n *     [ q  r ]\n */\ntypedef struct secp256k1_modinv64_trans2x2 {\n    int64_t u, v, q, r;\n} secp256k1_modinv64_trans2x2;\n\n#ifdef VERIFY\n/* Helper function to compute the absolute value of an int64_t.\n * (we don't use abs/labs/llabs as it depends on the int sizes). */\nstatic int64_t secp256k1_modinv64_abs(int64_t v) {\n    VERIFY_CHECK(v > INT64_MIN);\n    if (v < 0) return -v;\n    return v;\n}\n\nstatic const secp256k1_modinv64_signed62 SECP256K1_SIGNED62_ONE = {{1}};\n\n/* Compute a*factor and put it in r. All but the top limb in r will be in range [0,2^62). */\nstatic void secp256k1_modinv64_mul_62(secp256k1_modinv64_signed62 *r, const secp256k1_modinv64_signed62 *a, int alen, int64_t factor) {\n    const uint64_t M62 = UINT64_MAX >> 2;\n    secp256k1_int128 c, d;\n    int i;\n    secp256k1_i128_from_i64(&c, 0);\n    for (i = 0; i < 4; ++i) {\n        if (i < alen) secp256k1_i128_accum_mul(&c, a->v[i], factor);\n        r->v[i] = secp256k1_i128_to_u64(&c) & M62; secp256k1_i128_rshift(&c, 62);\n    }\n    if (4 < alen) secp256k1_i128_accum_mul(&c, a->v[4], factor);\n    secp256k1_i128_from_i64(&d, secp256k1_i128_to_i64(&c));\n    VERIFY_CHECK(secp256k1_i128_eq_var(&c, &d));\n    r->v[4] = secp256k1_i128_to_i64(&c);\n}\n\n/* Return -1 for a<b*factor, 0 for a==b*factor, 1 for a>b*factor. A has alen limbs; b has 5. */\nstatic int secp256k1_modinv64_mul_cmp_62(const secp256k1_modinv64_signed62 *a, int alen, const secp256k1_modinv64_signed62 *b, int64_t factor) {\n    int i;\n    secp256k1_modinv64_signed62 am, bm;\n    secp256k1_modinv64_mul_62(&am, a, alen, 1); /* Normalize all but the top limb of a. */\n    secp256k1_modinv64_mul_62(&bm, b, 5, factor);\n    for (i = 0; i < 4; ++i) {\n        /* Verify that all but the top limb of a and b are normalized. */\n        VERIFY_CHECK(am.v[i] >> 62 == 0);\n        VERIFY_CHECK(bm.v[i] >> 62 == 0);\n    }\n    for (i = 4; i >= 0; --i) {\n        if (am.v[i] < bm.v[i]) return -1;\n        if (am.v[i] > bm.v[i]) return 1;\n    }\n    return 0;\n}\n\n/* Check if the determinant of t is equal to 1 << n. If abs, check if |det t| == 1 << n. */\nstatic int secp256k1_modinv64_det_check_pow2(const secp256k1_modinv64_trans2x2 *t, unsigned int n, int abs) {\n    secp256k1_int128 a;\n    secp256k1_i128_det(&a, t->u, t->v, t->q, t->r);\n    if (secp256k1_i128_check_pow2(&a, n, 1)) return 1;\n    if (abs && secp256k1_i128_check_pow2(&a, n, -1)) return 1;\n    return 0;\n}\n#endif\n\n/* Take as input a signed62 number in range (-2*modulus,modulus), and add a multiple of the modulus\n * to it to bring it to range [0,modulus). If sign < 0, the input will also be negated in the\n * process. The input must have limbs in range (-2^62,2^62). The output will have limbs in range\n * [0,2^62). */\nstatic void secp256k1_modinv64_normalize_62(secp256k1_modinv64_signed62 *r, int64_t sign, const secp256k1_modinv64_modinfo *modinfo) {\n    const int64_t M62 = (int64_t)(UINT64_MAX >> 2);\n    int64_t r0 = r->v[0], r1 = r->v[1], r2 = r->v[2], r3 = r->v[3], r4 = r->v[4];\n    int64_t cond_add, cond_negate;\n\n#ifdef VERIFY\n    /* Verify that all limbs are in range (-2^62,2^62). */\n    int i;\n    for (i = 0; i < 5; ++i) {\n        VERIFY_CHECK(r->v[i] >= -M62);\n        VERIFY_CHECK(r->v[i] <= M62);\n    }\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(r, 5, &modinfo->modulus, -2) > 0); /* r > -2*modulus */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(r, 5, &modinfo->modulus, 1) < 0); /* r < modulus */\n#endif\n\n    /* In a first step, add the modulus if the input is negative, and then negate if requested.\n     * This brings r from range (-2*modulus,modulus) to range (-modulus,modulus). As all input\n     * limbs are in range (-2^62,2^62), this cannot overflow an int64_t. Note that the right\n     * shifts below are signed sign-extending shifts (see assumptions.h for tests that that is\n     * indeed the behavior of the right shift operator). */\n    cond_add = r4 >> 63;\n    r0 += modinfo->modulus.v[0] & cond_add;\n    r1 += modinfo->modulus.v[1] & cond_add;\n    r2 += modinfo->modulus.v[2] & cond_add;\n    r3 += modinfo->modulus.v[3] & cond_add;\n    r4 += modinfo->modulus.v[4] & cond_add;\n    cond_negate = sign >> 63;\n    r0 = (r0 ^ cond_negate) - cond_negate;\n    r1 = (r1 ^ cond_negate) - cond_negate;\n    r2 = (r2 ^ cond_negate) - cond_negate;\n    r3 = (r3 ^ cond_negate) - cond_negate;\n    r4 = (r4 ^ cond_negate) - cond_negate;\n    /* Propagate the top bits, to bring limbs back to range (-2^62,2^62). */\n    r1 += r0 >> 62; r0 &= M62;\n    r2 += r1 >> 62; r1 &= M62;\n    r3 += r2 >> 62; r2 &= M62;\n    r4 += r3 >> 62; r3 &= M62;\n\n    /* In a second step add the modulus again if the result is still negative, bringing\n     * r to range [0,modulus). */\n    cond_add = r4 >> 63;\n    r0 += modinfo->modulus.v[0] & cond_add;\n    r1 += modinfo->modulus.v[1] & cond_add;\n    r2 += modinfo->modulus.v[2] & cond_add;\n    r3 += modinfo->modulus.v[3] & cond_add;\n    r4 += modinfo->modulus.v[4] & cond_add;\n    /* And propagate again. */\n    r1 += r0 >> 62; r0 &= M62;\n    r2 += r1 >> 62; r1 &= M62;\n    r3 += r2 >> 62; r2 &= M62;\n    r4 += r3 >> 62; r3 &= M62;\n\n    r->v[0] = r0;\n    r->v[1] = r1;\n    r->v[2] = r2;\n    r->v[3] = r3;\n    r->v[4] = r4;\n\n#ifdef VERIFY\n    VERIFY_CHECK(r0 >> 62 == 0);\n    VERIFY_CHECK(r1 >> 62 == 0);\n    VERIFY_CHECK(r2 >> 62 == 0);\n    VERIFY_CHECK(r3 >> 62 == 0);\n    VERIFY_CHECK(r4 >> 62 == 0);\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(r, 5, &modinfo->modulus, 0) >= 0); /* r >= 0 */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(r, 5, &modinfo->modulus, 1) < 0); /* r < modulus */\n#endif\n}\n\n#if 0\n/* Compute the transition matrix and eta for 59 divsteps (where zeta=-(delta+1/2)).\n * Note that the transformation matrix is scaled by 2^62 and not 2^59.\n *\n * Input:  zeta: initial zeta\n *         f0:   bottom limb of initial f\n *         g0:   bottom limb of initial g\n * Output: t: transition matrix\n * Return: final zeta\n *\n * Implements the divsteps_n_matrix function from the explanation.\n */\nstatic int64_t secp256k1_modinv64_divsteps_59(int64_t zeta, uint64_t f0, uint64_t g0, secp256k1_modinv64_trans2x2 *t) {\n    /* u,v,q,r are the elements of the transformation matrix being built up,\n     * starting with the identity matrix times 8 (because the caller expects\n     * a result scaled by 2^62). Semantically they are signed integers\n     * in range [-2^62,2^62], but here represented as unsigned mod 2^64. This\n     * permits left shifting (which is UB for negative numbers). The range\n     * being inside [-2^63,2^63) means that casting to signed works correctly.\n     */\n    uint64_t u = 8, v = 0, q = 0, r = 8;\n    uint64_t c1, c2, f = f0, g = g0, x, y, z;\n    int i;\n\n    for (i = 3; i < 62; ++i) {\n        VERIFY_CHECK((f & 1) == 1); /* f must always be odd */\n        VERIFY_CHECK((u * f0 + v * g0) == f << i);\n        VERIFY_CHECK((q * f0 + r * g0) == g << i);\n        /* Compute conditional masks for (zeta < 0) and for (g & 1). */\n        c1 = zeta >> 63;\n        c2 = -(g & 1);\n        /* Compute x,y,z, conditionally negated versions of f,u,v. */\n        x = (f ^ c1) - c1;\n        y = (u ^ c1) - c1;\n        z = (v ^ c1) - c1;\n        /* Conditionally add x,y,z to g,q,r. */\n        g += x & c2;\n        q += y & c2;\n        r += z & c2;\n        /* In what follows, c1 is a condition mask for (zeta < 0) and (g & 1). */\n        c1 &= c2;\n        /* Conditionally change zeta into -zeta-2 or zeta-1. */\n        zeta = (zeta ^ c1) - 1;\n        /* Conditionally add g,q,r to f,u,v. */\n        f += g & c1;\n        u += q & c1;\n        v += r & c1;\n        /* Shifts */\n        g >>= 1;\n        u <<= 1;\n        v <<= 1;\n        /* Bounds on zeta that follow from the bounds on iteration count (max 10*59 divsteps). */\n        VERIFY_CHECK(zeta >= -591 && zeta <= 591);\n    }\n    /* Return data in t and return value. */\n    t->u = (int64_t)u;\n    t->v = (int64_t)v;\n    t->q = (int64_t)q;\n    t->r = (int64_t)r;\n#ifdef VERIFY\n    /* The determinant of t must be a power of two. This guarantees that multiplication with t\n     * does not change the gcd of f and g, apart from adding a power-of-2 factor to it (which\n     * will be divided out again). As each divstep's individual matrix has determinant 2, the\n     * aggregate of 59 of them will have determinant 2^59. Multiplying with the initial\n     * 8*identity (which has determinant 2^6) means the overall outputs has determinant\n     * 2^65. */\n    VERIFY_CHECK(secp256k1_modinv64_det_check_pow2(t, 65, 0));\n#endif\n    return zeta;\n}\n#endif\n\n/* Compute the transition matrix and eta for 62 divsteps (variable time, eta=-delta).\n *\n * Input:  eta: initial eta\n *         f0:  bottom limb of initial f\n *         g0:  bottom limb of initial g\n * Output: t: transition matrix\n * Return: final eta\n *\n * Implements the divsteps_n_matrix_var function from the explanation.\n */\nstatic int64_t secp256k1_modinv64_divsteps_62_var(int64_t eta, uint64_t f0, uint64_t g0, secp256k1_modinv64_trans2x2 *t) {\n    /* Transformation matrix; see comments in secp256k1_modinv64_divsteps_62. */\n    uint64_t u = 1, v = 0, q = 0, r = 1;\n    uint64_t f = f0, g = g0, m;\n    uint32_t w;\n    int i = 62, limit, zeros;\n\n    for (;;) {\n        /* Use a sentinel bit to count zeros only up to i. */\n        zeros = secp256k1_ctz64_var(g | (UINT64_MAX << i));\n        /* Perform zeros divsteps at once; they all just divide g by two. */\n        g >>= zeros;\n        u <<= zeros;\n        v <<= zeros;\n        eta -= zeros;\n        i -= zeros;\n        /* We're done once we've done 62 divsteps. */\n        if (i == 0) break;\n        VERIFY_CHECK((f & 1) == 1);\n        VERIFY_CHECK((g & 1) == 1);\n        VERIFY_CHECK((u * f0 + v * g0) == f << (62 - i));\n        VERIFY_CHECK((q * f0 + r * g0) == g << (62 - i));\n        /* Bounds on eta that follow from the bounds on iteration count (max 12*62 divsteps). */\n        VERIFY_CHECK(eta >= -745 && eta <= 745);\n        /* If eta is negative, negate it and replace f,g with g,-f. */\n        if (eta < 0) {\n            uint64_t tmp;\n            eta = -eta;\n            tmp = f; f = g; g = -tmp;\n            tmp = u; u = q; q = -tmp;\n            tmp = v; v = r; r = -tmp;\n            /* Use a formula to cancel out up to 6 bits of g. Also, no more than i can be cancelled\n             * out (as we'd be done before that point), and no more than eta+1 can be done as its\n             * sign will flip again once that happens. */\n            limit = ((int)eta + 1) > i ? i : ((int)eta + 1);\n            VERIFY_CHECK(limit > 0 && limit <= 62);\n            /* m is a mask for the bottom min(limit, 6) bits. */\n            m = (UINT64_MAX >> (64 - limit)) & 63U;\n            /* Find what multiple of f must be added to g to cancel its bottom min(limit, 6)\n             * bits. */\n            w = (f * g * (f * f - 2)) & m;\n        } else {\n            /* In this branch, use a simpler formula that only lets us cancel up to 4 bits of g, as\n             * eta tends to be smaller here. */\n            limit = ((int)eta + 1) > i ? i : ((int)eta + 1);\n            VERIFY_CHECK(limit > 0 && limit <= 62);\n            /* m is a mask for the bottom min(limit, 4) bits. */\n            m = (UINT64_MAX >> (64 - limit)) & 15U;\n            /* Find what multiple of f must be added to g to cancel its bottom min(limit, 4)\n             * bits. */\n            w = f + (((f + 1) & 4) << 1);\n            w = (-w * g) & m;\n        }\n        g += f * w;\n        q += u * w;\n        r += v * w;\n        VERIFY_CHECK((g & m) == 0);\n    }\n    /* Return data in t and return value. */\n    t->u = (int64_t)u;\n    t->v = (int64_t)v;\n    t->q = (int64_t)q;\n    t->r = (int64_t)r;\n#ifdef VERIFY\n    /* The determinant of t must be a power of two. This guarantees that multiplication with t\n     * does not change the gcd of f and g, apart from adding a power-of-2 factor to it (which\n     * will be divided out again). As each divstep's individual matrix has determinant 2, the\n     * aggregate of 62 of them will have determinant 2^62. */\n    VERIFY_CHECK(secp256k1_modinv64_det_check_pow2(t, 62, 0));\n#endif\n    return eta;\n}\n\n#if 0\n/* Compute the transition matrix and eta for 62 posdivsteps (variable time, eta=-delta), and keeps track\n * of the Jacobi symbol along the way. f0 and g0 must be f and g mod 2^64 rather than 2^62, because\n * Jacobi tracking requires knowing (f mod 8) rather than just (f mod 2).\n *\n * Input:        eta: initial eta\n *               f0:  bottom limb of initial f\n *               g0:  bottom limb of initial g\n * Output:       t: transition matrix\n * Input/Output: (*jacp & 1) is bitflipped if and only if the Jacobi symbol of (f | g) changes sign\n *               by applying the returned transformation matrix to it. The other bits of *jacp may\n *               change, but are meaningless.\n * Return:       final eta\n */\nstatic int64_t secp256k1_modinv64_posdivsteps_62_var(int64_t eta, uint64_t f0, uint64_t g0, secp256k1_modinv64_trans2x2 *t, int *jacp) {\n    /* Transformation matrix; see comments in secp256k1_modinv64_divsteps_62. */\n    uint64_t u = 1, v = 0, q = 0, r = 1;\n    uint64_t f = f0, g = g0, m;\n    uint32_t w;\n    int i = 62, limit, zeros;\n    int jac = *jacp;\n\n    for (;;) {\n        /* Use a sentinel bit to count zeros only up to i. */\n        zeros = secp256k1_ctz64_var(g | (UINT64_MAX << i));\n        /* Perform zeros divsteps at once; they all just divide g by two. */\n        g >>= zeros;\n        u <<= zeros;\n        v <<= zeros;\n        eta -= zeros;\n        i -= zeros;\n        /* Update the bottom bit of jac: when dividing g by an odd power of 2,\n         * if (f mod 8) is 3 or 5, the Jacobi symbol changes sign. */\n        jac ^= (zeros & ((f >> 1) ^ (f >> 2)));\n        /* We're done once we've done 62 posdivsteps. */\n        if (i == 0) break;\n        VERIFY_CHECK((f & 1) == 1);\n        VERIFY_CHECK((g & 1) == 1);\n        VERIFY_CHECK((u * f0 + v * g0) == f << (62 - i));\n        VERIFY_CHECK((q * f0 + r * g0) == g << (62 - i));\n        /* If eta is negative, negate it and replace f,g with g,f. */\n        if (eta < 0) {\n            uint64_t tmp;\n            eta = -eta;\n            tmp = f; f = g; g = tmp;\n            tmp = u; u = q; q = tmp;\n            tmp = v; v = r; r = tmp;\n            /* Update bottom bit of jac: when swapping f and g, the Jacobi symbol changes sign\n             * if both f and g are 3 mod 4. */\n            jac ^= ((f & g) >> 1);\n            /* Use a formula to cancel out up to 6 bits of g. Also, no more than i can be cancelled\n             * out (as we'd be done before that point), and no more than eta+1 can be done as its\n             * sign will flip again once that happens. */\n            limit = ((int)eta + 1) > i ? i : ((int)eta + 1);\n            VERIFY_CHECK(limit > 0 && limit <= 62);\n            /* m is a mask for the bottom min(limit, 6) bits. */\n            m = (UINT64_MAX >> (64 - limit)) & 63U;\n            /* Find what multiple of f must be added to g to cancel its bottom min(limit, 6)\n             * bits. */\n            w = (f * g * (f * f - 2)) & m;\n        } else {\n            /* In this branch, use a simpler formula that only lets us cancel up to 4 bits of g, as\n             * eta tends to be smaller here. */\n            limit = ((int)eta + 1) > i ? i : ((int)eta + 1);\n            VERIFY_CHECK(limit > 0 && limit <= 62);\n            /* m is a mask for the bottom min(limit, 4) bits. */\n            m = (UINT64_MAX >> (64 - limit)) & 15U;\n            /* Find what multiple of f must be added to g to cancel its bottom min(limit, 4)\n             * bits. */\n            w = f + (((f + 1) & 4) << 1);\n            w = (-w * g) & m;\n        }\n        g += f * w;\n        q += u * w;\n        r += v * w;\n        VERIFY_CHECK((g & m) == 0);\n    }\n    /* Return data in t and return value. */\n    t->u = (int64_t)u;\n    t->v = (int64_t)v;\n    t->q = (int64_t)q;\n    t->r = (int64_t)r;\n#ifdef VERIFY\n    /* The determinant of t must be a power of two. This guarantees that multiplication with t\n     * does not change the gcd of f and g, apart from adding a power-of-2 factor to it (which\n     * will be divided out again). As each divstep's individual matrix has determinant 2 or -2,\n     * the aggregate of 62 of them will have determinant 2^62 or -2^62. */\n    VERIFY_CHECK(secp256k1_modinv64_det_check_pow2(t, 62, 1));\n#endif\n    *jacp = jac;\n    return eta;\n}\n#endif\n\n/* Compute (t/2^62) * [d, e] mod modulus, where t is a transition matrix scaled by 2^62.\n *\n * On input and output, d and e are in range (-2*modulus,modulus). All output limbs will be in range\n * (-2^62,2^62).\n *\n * This implements the update_de function from the explanation.\n */\nstatic void secp256k1_modinv64_update_de_62(secp256k1_modinv64_signed62 *d, secp256k1_modinv64_signed62 *e, const secp256k1_modinv64_trans2x2 *t, const secp256k1_modinv64_modinfo* modinfo) {\n    const uint64_t M62 = UINT64_MAX >> 2;\n    const int64_t d0 = d->v[0], d1 = d->v[1], d2 = d->v[2], d3 = d->v[3], d4 = d->v[4];\n    const int64_t e0 = e->v[0], e1 = e->v[1], e2 = e->v[2], e3 = e->v[3], e4 = e->v[4];\n    const int64_t u = t->u, v = t->v, q = t->q, r = t->r;\n    int64_t md, me, sd, se;\n    secp256k1_int128 cd, ce;\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(d, 5, &modinfo->modulus, -2) > 0); /* d > -2*modulus */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(d, 5, &modinfo->modulus, 1) < 0);  /* d <    modulus */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(e, 5, &modinfo->modulus, -2) > 0); /* e > -2*modulus */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(e, 5, &modinfo->modulus, 1) < 0);  /* e <    modulus */\n    VERIFY_CHECK(secp256k1_modinv64_abs(u) <= (((int64_t)1 << 62) - secp256k1_modinv64_abs(v))); /* |u|+|v| <= 2^62 */\n    VERIFY_CHECK(secp256k1_modinv64_abs(q) <= (((int64_t)1 << 62) - secp256k1_modinv64_abs(r))); /* |q|+|r| <= 2^62 */\n#endif\n    /* [md,me] start as zero; plus [u,q] if d is negative; plus [v,r] if e is negative. */\n    sd = d4 >> 63;\n    se = e4 >> 63;\n    md = (u & sd) + (v & se);\n    me = (q & sd) + (r & se);\n    /* Begin computing t*[d,e]. */\n    secp256k1_i128_mul(&cd, u, d0);\n    secp256k1_i128_accum_mul(&cd, v, e0);\n    secp256k1_i128_mul(&ce, q, d0);\n    secp256k1_i128_accum_mul(&ce, r, e0);\n    /* Correct md,me so that t*[d,e]+modulus*[md,me] has 62 zero bottom bits. */\n    md -= (modinfo->modulus_inv62 * secp256k1_i128_to_u64(&cd) + md) & M62;\n    me -= (modinfo->modulus_inv62 * secp256k1_i128_to_u64(&ce) + me) & M62;\n    /* Update the beginning of computation for t*[d,e]+modulus*[md,me] now md,me are known. */\n    secp256k1_i128_accum_mul(&cd, modinfo->modulus.v[0], md);\n    secp256k1_i128_accum_mul(&ce, modinfo->modulus.v[0], me);\n    /* Verify that the low 62 bits of the computation are indeed zero, and then throw them away. */\n    VERIFY_CHECK((secp256k1_i128_to_u64(&cd) & M62) == 0); secp256k1_i128_rshift(&cd, 62);\n    VERIFY_CHECK((secp256k1_i128_to_u64(&ce) & M62) == 0); secp256k1_i128_rshift(&ce, 62);\n    /* Compute limb 1 of t*[d,e]+modulus*[md,me], and store it as output limb 0 (= down shift). */\n    secp256k1_i128_accum_mul(&cd, u, d1);\n    secp256k1_i128_accum_mul(&cd, v, e1);\n    secp256k1_i128_accum_mul(&ce, q, d1);\n    secp256k1_i128_accum_mul(&ce, r, e1);\n    if (modinfo->modulus.v[1]) { /* Optimize for the case where limb of modulus is zero. */\n        secp256k1_i128_accum_mul(&cd, modinfo->modulus.v[1], md);\n        secp256k1_i128_accum_mul(&ce, modinfo->modulus.v[1], me);\n    }\n    d->v[0] = secp256k1_i128_to_u64(&cd) & M62; secp256k1_i128_rshift(&cd, 62);\n    e->v[0] = secp256k1_i128_to_u64(&ce) & M62; secp256k1_i128_rshift(&ce, 62);\n    /* Compute limb 2 of t*[d,e]+modulus*[md,me], and store it as output limb 1. */\n    secp256k1_i128_accum_mul(&cd, u, d2);\n    secp256k1_i128_accum_mul(&cd, v, e2);\n    secp256k1_i128_accum_mul(&ce, q, d2);\n    secp256k1_i128_accum_mul(&ce, r, e2);\n    if (modinfo->modulus.v[2]) { /* Optimize for the case where limb of modulus is zero. */\n        secp256k1_i128_accum_mul(&cd, modinfo->modulus.v[2], md);\n        secp256k1_i128_accum_mul(&ce, modinfo->modulus.v[2], me);\n    }\n    d->v[1] = secp256k1_i128_to_u64(&cd) & M62; secp256k1_i128_rshift(&cd, 62);\n    e->v[1] = secp256k1_i128_to_u64(&ce) & M62; secp256k1_i128_rshift(&ce, 62);\n    /* Compute limb 3 of t*[d,e]+modulus*[md,me], and store it as output limb 2. */\n    secp256k1_i128_accum_mul(&cd, u, d3);\n    secp256k1_i128_accum_mul(&cd, v, e3);\n    secp256k1_i128_accum_mul(&ce, q, d3);\n    secp256k1_i128_accum_mul(&ce, r, e3);\n    if (modinfo->modulus.v[3]) { /* Optimize for the case where limb of modulus is zero. */\n        secp256k1_i128_accum_mul(&cd, modinfo->modulus.v[3], md);\n        secp256k1_i128_accum_mul(&ce, modinfo->modulus.v[3], me);\n    }\n    d->v[2] = secp256k1_i128_to_u64(&cd) & M62; secp256k1_i128_rshift(&cd, 62);\n    e->v[2] = secp256k1_i128_to_u64(&ce) & M62; secp256k1_i128_rshift(&ce, 62);\n    /* Compute limb 4 of t*[d,e]+modulus*[md,me], and store it as output limb 3. */\n    secp256k1_i128_accum_mul(&cd, u, d4);\n    secp256k1_i128_accum_mul(&cd, v, e4);\n    secp256k1_i128_accum_mul(&ce, q, d4);\n    secp256k1_i128_accum_mul(&ce, r, e4);\n    secp256k1_i128_accum_mul(&cd, modinfo->modulus.v[4], md);\n    secp256k1_i128_accum_mul(&ce, modinfo->modulus.v[4], me);\n    d->v[3] = secp256k1_i128_to_u64(&cd) & M62; secp256k1_i128_rshift(&cd, 62);\n    e->v[3] = secp256k1_i128_to_u64(&ce) & M62; secp256k1_i128_rshift(&ce, 62);\n    /* What remains is limb 5 of t*[d,e]+modulus*[md,me]; store it as output limb 4. */\n    d->v[4] = secp256k1_i128_to_i64(&cd);\n    e->v[4] = secp256k1_i128_to_i64(&ce);\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(d, 5, &modinfo->modulus, -2) > 0); /* d > -2*modulus */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(d, 5, &modinfo->modulus, 1) < 0);  /* d <    modulus */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(e, 5, &modinfo->modulus, -2) > 0); /* e > -2*modulus */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(e, 5, &modinfo->modulus, 1) < 0);  /* e <    modulus */\n#endif\n}\n\n#if 0\n/* Compute (t/2^62) * [f, g], where t is a transition matrix scaled by 2^62.\n *\n * This implements the update_fg function from the explanation.\n */\nstatic void secp256k1_modinv64_update_fg_62(secp256k1_modinv64_signed62 *f, secp256k1_modinv64_signed62 *g, const secp256k1_modinv64_trans2x2 *t) {\n    const uint64_t M62 = UINT64_MAX >> 2;\n    const int64_t f0 = f->v[0], f1 = f->v[1], f2 = f->v[2], f3 = f->v[3], f4 = f->v[4];\n    const int64_t g0 = g->v[0], g1 = g->v[1], g2 = g->v[2], g3 = g->v[3], g4 = g->v[4];\n    const int64_t u = t->u, v = t->v, q = t->q, r = t->r;\n    secp256k1_int128 cf, cg;\n    /* Start computing t*[f,g]. */\n    secp256k1_i128_mul(&cf, u, f0);\n    secp256k1_i128_accum_mul(&cf, v, g0);\n    secp256k1_i128_mul(&cg, q, f0);\n    secp256k1_i128_accum_mul(&cg, r, g0);\n    /* Verify that the bottom 62 bits of the result are zero, and then throw them away. */\n    VERIFY_CHECK((secp256k1_i128_to_u64(&cf) & M62) == 0); secp256k1_i128_rshift(&cf, 62);\n    VERIFY_CHECK((secp256k1_i128_to_u64(&cg) & M62) == 0); secp256k1_i128_rshift(&cg, 62);\n    /* Compute limb 1 of t*[f,g], and store it as output limb 0 (= down shift). */\n    secp256k1_i128_accum_mul(&cf, u, f1);\n    secp256k1_i128_accum_mul(&cf, v, g1);\n    secp256k1_i128_accum_mul(&cg, q, f1);\n    secp256k1_i128_accum_mul(&cg, r, g1);\n    f->v[0] = secp256k1_i128_to_u64(&cf) & M62; secp256k1_i128_rshift(&cf, 62);\n    g->v[0] = secp256k1_i128_to_u64(&cg) & M62; secp256k1_i128_rshift(&cg, 62);\n    /* Compute limb 2 of t*[f,g], and store it as output limb 1. */\n    secp256k1_i128_accum_mul(&cf, u, f2);\n    secp256k1_i128_accum_mul(&cf, v, g2);\n    secp256k1_i128_accum_mul(&cg, q, f2);\n    secp256k1_i128_accum_mul(&cg, r, g2);\n    f->v[1] = secp256k1_i128_to_u64(&cf) & M62; secp256k1_i128_rshift(&cf, 62);\n    g->v[1] = secp256k1_i128_to_u64(&cg) & M62; secp256k1_i128_rshift(&cg, 62);\n    /* Compute limb 3 of t*[f,g], and store it as output limb 2. */\n    secp256k1_i128_accum_mul(&cf, u, f3);\n    secp256k1_i128_accum_mul(&cf, v, g3);\n    secp256k1_i128_accum_mul(&cg, q, f3);\n    secp256k1_i128_accum_mul(&cg, r, g3);\n    f->v[2] = secp256k1_i128_to_u64(&cf) & M62; secp256k1_i128_rshift(&cf, 62);\n    g->v[2] = secp256k1_i128_to_u64(&cg) & M62; secp256k1_i128_rshift(&cg, 62);\n    /* Compute limb 4 of t*[f,g], and store it as output limb 3. */\n    secp256k1_i128_accum_mul(&cf, u, f4);\n    secp256k1_i128_accum_mul(&cf, v, g4);\n    secp256k1_i128_accum_mul(&cg, q, f4);\n    secp256k1_i128_accum_mul(&cg, r, g4);\n    f->v[3] = secp256k1_i128_to_u64(&cf) & M62; secp256k1_i128_rshift(&cf, 62);\n    g->v[3] = secp256k1_i128_to_u64(&cg) & M62; secp256k1_i128_rshift(&cg, 62);\n    /* What remains is limb 5 of t*[f,g]; store it as output limb 4. */\n    f->v[4] = secp256k1_i128_to_i64(&cf);\n    g->v[4] = secp256k1_i128_to_i64(&cg);\n}\n#endif\n\n/* Compute (t/2^62) * [f, g], where t is a transition matrix for 62 divsteps.\n *\n * Version that operates on a variable number of limbs in f and g.\n *\n * This implements the update_fg function from the explanation.\n */\nstatic void secp256k1_modinv64_update_fg_62_var(int len, secp256k1_modinv64_signed62 *f, secp256k1_modinv64_signed62 *g, const secp256k1_modinv64_trans2x2 *t) {\n    const uint64_t M62 = UINT64_MAX >> 2;\n    const int64_t u = t->u, v = t->v, q = t->q, r = t->r;\n    int64_t fi, gi;\n    secp256k1_int128 cf, cg;\n    int i;\n    VERIFY_CHECK(len > 0);\n    /* Start computing t*[f,g]. */\n    fi = f->v[0];\n    gi = g->v[0];\n    secp256k1_i128_mul(&cf, u, fi);\n    secp256k1_i128_accum_mul(&cf, v, gi);\n    secp256k1_i128_mul(&cg, q, fi);\n    secp256k1_i128_accum_mul(&cg, r, gi);\n    /* Verify that the bottom 62 bits of the result are zero, and then throw them away. */\n    VERIFY_CHECK((secp256k1_i128_to_u64(&cf) & M62) == 0); secp256k1_i128_rshift(&cf, 62);\n    VERIFY_CHECK((secp256k1_i128_to_u64(&cg) & M62) == 0); secp256k1_i128_rshift(&cg, 62);\n    /* Now iteratively compute limb i=1..len of t*[f,g], and store them in output limb i-1 (shifting\n     * down by 62 bits). */\n    for (i = 1; i < len; ++i) {\n        fi = f->v[i];\n        gi = g->v[i];\n        secp256k1_i128_accum_mul(&cf, u, fi);\n        secp256k1_i128_accum_mul(&cf, v, gi);\n        secp256k1_i128_accum_mul(&cg, q, fi);\n        secp256k1_i128_accum_mul(&cg, r, gi);\n        f->v[i - 1] = secp256k1_i128_to_u64(&cf) & M62; secp256k1_i128_rshift(&cf, 62);\n        g->v[i - 1] = secp256k1_i128_to_u64(&cg) & M62; secp256k1_i128_rshift(&cg, 62);\n    }\n    /* What remains is limb (len) of t*[f,g]; store it as output limb (len-1). */\n    f->v[len - 1] = secp256k1_i128_to_i64(&cf);\n    g->v[len - 1] = secp256k1_i128_to_i64(&cg);\n}\n\n#if 0\n/* Compute the inverse of x modulo modinfo->modulus, and replace x with it (constant time in x). */\nstatic void secp256k1_modinv64(secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo) {\n    /* Start with d=0, e=1, f=modulus, g=x, zeta=-1. */\n    secp256k1_modinv64_signed62 d = {{0, 0, 0, 0, 0}};\n    secp256k1_modinv64_signed62 e = {{1, 0, 0, 0, 0}};\n    secp256k1_modinv64_signed62 f = modinfo->modulus;\n    secp256k1_modinv64_signed62 g = *x;\n    int i;\n    int64_t zeta = -1; /* zeta = -(delta+1/2); delta starts at 1/2. */\n\n    /* Do 10 iterations of 59 divsteps each = 590 divsteps. This suffices for 256-bit inputs. */\n    for (i = 0; i < 10; ++i) {\n        /* Compute transition matrix and new zeta after 59 divsteps. */\n        secp256k1_modinv64_trans2x2 t;\n        zeta = secp256k1_modinv64_divsteps_59(zeta, f.v[0], g.v[0], &t);\n        /* Update d,e using that transition matrix. */\n        secp256k1_modinv64_update_de_62(&d, &e, &t, modinfo);\n        /* Update f,g using that transition matrix. */\n#ifdef VERIFY\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, 5, &modinfo->modulus, -1) > 0); /* f > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, 5, &modinfo->modulus, 1) <= 0); /* f <= modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, 5, &modinfo->modulus, -1) > 0); /* g > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, 5, &modinfo->modulus, 1) < 0);  /* g <  modulus */\n#endif\n        secp256k1_modinv64_update_fg_62(&f, &g, &t);\n#ifdef VERIFY\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, 5, &modinfo->modulus, -1) > 0); /* f > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, 5, &modinfo->modulus, 1) <= 0); /* f <= modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, 5, &modinfo->modulus, -1) > 0); /* g > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, 5, &modinfo->modulus, 1) < 0);  /* g <  modulus */\n#endif\n    }\n\n    /* At this point sufficient iterations have been performed that g must have reached 0\n     * and (if g was not originally 0) f must now equal +/- GCD of the initial f, g\n     * values i.e. +/- 1, and d now contains +/- the modular inverse. */\n#ifdef VERIFY\n    /* g == 0 */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, 5, &SECP256K1_SIGNED62_ONE, 0) == 0);\n    /* |f| == 1, or (x == 0 and d == 0 and |f|=modulus) */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, 5, &SECP256K1_SIGNED62_ONE, -1) == 0 ||\n                 secp256k1_modinv64_mul_cmp_62(&f, 5, &SECP256K1_SIGNED62_ONE, 1) == 0 ||\n                 (secp256k1_modinv64_mul_cmp_62(x, 5, &SECP256K1_SIGNED62_ONE, 0) == 0 &&\n                  secp256k1_modinv64_mul_cmp_62(&d, 5, &SECP256K1_SIGNED62_ONE, 0) == 0 &&\n                  (secp256k1_modinv64_mul_cmp_62(&f, 5, &modinfo->modulus, 1) == 0 ||\n                   secp256k1_modinv64_mul_cmp_62(&f, 5, &modinfo->modulus, -1) == 0)));\n#endif\n\n    /* Optionally negate d, normalize to [0,modulus), and return it. */\n    secp256k1_modinv64_normalize_62(&d, f.v[4], modinfo);\n    *x = d;\n}\n#endif\n\n/* Compute the inverse of x modulo modinfo->modulus, and replace x with it (variable time). */\nstatic void secp256k1_modinv64_var(secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo) {\n    /* Start with d=0, e=1, f=modulus, g=x, eta=-1. */\n    secp256k1_modinv64_signed62 d = {{0, 0, 0, 0, 0}};\n    secp256k1_modinv64_signed62 e = {{1, 0, 0, 0, 0}};\n    secp256k1_modinv64_signed62 f, g;\n    secp256k1_modinv64_signed62_assign(&(f), &(modinfo->modulus));\n    secp256k1_modinv64_signed62_assign(&(g), &(*x));\n\n#ifdef VERIFY\n    int i = 0;\n#endif\n    int j, len = 5;\n    int64_t eta = -1; /* eta = -delta; delta is initially 1 */\n    int64_t cond, fn, gn;\n\n    /* Do iterations of 62 divsteps each until g=0. */\n    while (1) {\n        /* Compute transition matrix and new eta after 62 divsteps. */\n        secp256k1_modinv64_trans2x2 t;\n        eta = secp256k1_modinv64_divsteps_62_var(eta, f.v[0], g.v[0], &t);\n        /* Update d,e using that transition matrix. */\n        secp256k1_modinv64_update_de_62(&d, &e, &t, modinfo);\n        /* Update f,g using that transition matrix. */\n#ifdef VERIFY\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, -1) > 0); /* f > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, 1) <= 0); /* f <= modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, -1) > 0); /* g > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, 1) < 0);  /* g <  modulus */\n#endif\n        secp256k1_modinv64_update_fg_62_var(len, &f, &g, &t);\n        /* If the bottom limb of g is zero, there is a chance that g=0. */\n        if (g.v[0] == 0) {\n            cond = 0;\n            /* Check if the other limbs are also 0. */\n            for (j = 1; j < len; ++j) {\n                cond |= g.v[j];\n            }\n            /* If so, we're done. */\n            if (cond == 0) break;\n        }\n\n        /* Determine if len>1 and limb (len-1) of both f and g is 0 or -1. */\n        fn = f.v[len - 1];\n        gn = g.v[len - 1];\n        cond = ((int64_t)len - 2) >> 63;\n        cond |= fn ^ (fn >> 63);\n        cond |= gn ^ (gn >> 63);\n        /* If so, reduce length, propagating the sign of f and g's top limb into the one below. */\n        if (cond == 0) {\n            f.v[len - 2] |= (uint64_t)fn << 62;\n            g.v[len - 2] |= (uint64_t)gn << 62;\n            --len;\n        }\n#ifdef VERIFY\n        VERIFY_CHECK(++i < 12); /* We should never need more than 12*62 = 744 divsteps */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, -1) > 0); /* f > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, 1) <= 0); /* f <= modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, -1) > 0); /* g > -modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, 1) < 0);  /* g <  modulus */\n#endif\n    }\n\n    /* At this point g is 0 and (if g was not originally 0) f must now equal +/- GCD of\n     * the initial f, g values i.e. +/- 1, and d now contains +/- the modular inverse. */\n#ifdef VERIFY\n    /* g == 0 */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &SECP256K1_SIGNED62_ONE, 0) == 0);\n    /* |f| == 1, or (x == 0 and d == 0 and |f|=modulus) */\n    VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &SECP256K1_SIGNED62_ONE, -1) == 0 ||\n                 secp256k1_modinv64_mul_cmp_62(&f, len, &SECP256K1_SIGNED62_ONE, 1) == 0 ||\n                 (secp256k1_modinv64_mul_cmp_62(x, 5, &SECP256K1_SIGNED62_ONE, 0) == 0 &&\n                  secp256k1_modinv64_mul_cmp_62(&d, 5, &SECP256K1_SIGNED62_ONE, 0) == 0 &&\n                  (secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, 1) == 0 ||\n                   secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, -1) == 0)));\n#endif\n\n    /* Optionally negate d, normalize to [0,modulus), and return it. */\n    secp256k1_modinv64_normalize_62(&d, f.v[len - 1], modinfo);\n    secp256k1_modinv64_signed62_assign(&(*x), &(d));\n}\n\n#if 0\n/* Do up to 25 iterations of 62 posdivsteps (up to 1550 steps; more is extremely rare) each until f=1.\n * In VERIFY mode use a lower number of iterations (744, close to the median 756), so failure actually occurs. */\n#ifdef VERIFY\n#define JACOBI64_ITERATIONS 12\n#else\n#define JACOBI64_ITERATIONS 25\n#endif\n\n/* Compute the Jacobi symbol of x modulo modinfo->modulus (variable time). gcd(x,modulus) must be 1. */\nstatic int secp256k1_jacobi64_maybe_var(const secp256k1_modinv64_signed62 *x, const secp256k1_modinv64_modinfo *modinfo) {\n    /* Start with f=modulus, g=x, eta=-1. */\n    secp256k1_modinv64_signed62 f = modinfo->modulus;\n    secp256k1_modinv64_signed62 g = *x;\n    int j, len = 5;\n    int64_t eta = -1; /* eta = -delta; delta is initially 1 */\n    int64_t cond, fn, gn;\n    int jac = 0;\n    int count;\n\n    /* The input limbs must all be non-negative. */\n    VERIFY_CHECK(g.v[0] >= 0 && g.v[1] >= 0 && g.v[2] >= 0 && g.v[3] >= 0 && g.v[4] >= 0);\n\n    /* If x > 0, then if the loop below converges, it converges to f=g=gcd(x,modulus). Since we\n     * require that gcd(x,modulus)=1 and modulus>=3, x cannot be 0. Thus, we must reach f=1 (or\n     * time out). */\n    VERIFY_CHECK((g.v[0] | g.v[1] | g.v[2] | g.v[3] | g.v[4]) != 0);\n\n    for (count = 0; count < JACOBI64_ITERATIONS; ++count) {\n        /* Compute transition matrix and new eta after 62 posdivsteps. */\n        secp256k1_modinv64_trans2x2 t;\n        eta = secp256k1_modinv64_posdivsteps_62_var(eta, f.v[0] | ((uint64_t)f.v[1] << 62), g.v[0] | ((uint64_t)g.v[1] << 62), &t, &jac);\n        /* Update f,g using that transition matrix. */\n#ifdef VERIFY\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, 0) > 0); /* f > 0 */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, 1) <= 0); /* f <= modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, 0) > 0); /* g > 0 */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, 1) < 0);  /* g < modulus */\n#endif\n        secp256k1_modinv64_update_fg_62_var(len, &f, &g, &t);\n        /* If the bottom limb of f is 1, there is a chance that f=1. */\n        if (f.v[0] == 1) {\n            cond = 0;\n            /* Check if the other limbs are also 0. */\n            for (j = 1; j < len; ++j) {\n                cond |= f.v[j];\n            }\n            /* If so, we're done. When f=1, the Jacobi symbol (g | f)=1. */\n            if (cond == 0) return 1 - 2*(jac & 1);\n        }\n\n        /* Determine if len>1 and limb (len-1) of both f and g is 0. */\n        fn = f.v[len - 1];\n        gn = g.v[len - 1];\n        cond = ((int64_t)len - 2) >> 63;\n        cond |= fn;\n        cond |= gn;\n        /* If so, reduce length. */\n        if (cond == 0) --len;\n#ifdef VERIFY\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, 0) > 0); /* f > 0 */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&f, len, &modinfo->modulus, 1) <= 0); /* f <= modulus */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, 0) > 0); /* g > 0 */\n        VERIFY_CHECK(secp256k1_modinv64_mul_cmp_62(&g, len, &modinfo->modulus, 1) < 0);  /* g < modulus */\n#endif\n    }\n\n    /* The loop failed to converge to f=g after 1550 iterations. Return 0, indicating unknown result. */\n    return 0;\n}\n#endif\n\n#endif /* SECP256K1_MODINV64_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/precomputed_ecmult.h",
    "content": "#ifndef SECP256K1_PRECOMPUTED_ECMULT_H\n#define SECP256K1_PRECOMPUTED_ECMULT_H\n\n/* This file was automatically generated by precompute_ecmult. */\n/* This file contains an array secp256k1_pre_g with odd multiples of the base point G and\n * an array secp256k1_pre_g_128 with odd multiples of 2^128*G for accelerating the computation of a*P + b*G.\n */\n#include \"group.h\"\n#include \"ecmult.h\"\n#ifdef S\n   #error macro identifier S already in use.\n#endif\n#define S(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) SECP256K1_GE_STORAGE_CONST(0x##a##u,0x##b##u,0x##c##u,0x##d##u,0x##e##u,0x##f##u,0x##g##u,0x##h##u,0x##i##u,0x##j##u,0x##k##u,0x##l##u,0x##m##u,0x##n##u,0x##o##u,0x##p##u)\n#if ECMULT_WINDOW_SIZE > 15\n   #error configuration mismatch, invalid ECMULT_WINDOW_SIZE. Try deleting precomputed_ecmult.c before the build.\n#endif\n#ifdef EXHAUSTIVE_TEST_ORDER\n#    error Cannot compile precomputed_ecmult.c in exhaustive test mode\n#endif /* EXHAUSTIVE_TEST_ORDER */\n#define WINDOW_G ECMULT_WINDOW_SIZE\nstatic const secp256k1_ge_storage secp256k1_pre_g[ECMULT_TABLE_SIZE(WINDOW_G)]\n#ifndef VST\n = {\n S(79be667e,f9dcbbac,55a06295,ce870b07,29bfcdb,2dce28d9,59f2815b,16f81798,483ada77,26a3c465,5da4fbfc,e1108a8,fd17b448,a6855419,9c47d08f,fb10d4b8)\n#if WINDOW_G > 2\n,S(f9308a01,9258c310,49344f85,f89d5229,b531c845,836f99b0,8601f113,bce036f9,388f7b0f,632de814,fe337e6,2a37f356,6500a999,34c2231b,6cb9fd75,84b8e672)\n#endif\n#if WINDOW_G > 3\n,S(2f8bde4d,1a072093,55b4a725,a5c5128,e88b84bd,dc619ab7,cba8d569,b240efe4,d8ac2226,36e5e3d6,d4dba9dd,a6c9c426,f788271b,ab0d6840,dca87d3a,a6ac62d6)\n,S(5cbdf064,6e5db4ea,a398f365,f2ea7a0e,3d419b7e,330e39c,e92bdded,cac4f9bc,6aebca40,ba255960,a3178d6d,861a54db,a813d0b8,13fde7b5,a5082628,87264da)\n#endif\n#if WINDOW_G > 4\n,S(acd484e2,f0c7f653,9ad178a,9f559abd,e0979697,4c57e714,c35f110d,fc27ccbe,cc338921,b0a7d9fd,64380971,763b61e9,add888a4,375f8e0f,5cc262a,c64f9c37)\n,S(774ae7f8,58a9411e,5ef4246b,70c65aac,5649980b,e5c17891,bbec1789,5da008cb,d984a032,eb6b5e19,243dd56,d7b7b365,372db1e2,dff9d6a8,301d74c9,c953c61b)\n,S(f28773c2,d975288b,c7d1d205,c3748651,b075fbc6,610e58cd,deeddf8f,19405aa8,ab0902e,8d880a89,758212eb,65cdaf47,3a1a06da,521fa91f,29b5cb52,db03ed81)\n,S(d7924d4f,7d43ea96,5a465ae3,95ff411,31e5946f,3c85f79e,44adbcf8,e27e080e,581e2872,a86c72a6,83842ec2,28cc6def,ea40af2b,d896d3a5,c504dc9f,f6a26b58)\n#endif\n#if WINDOW_G > 5\n,S(defdea4c,db677750,a420fee8,7eacf21,eb9898ae,79b97687,66e4faa0,4a2d4a34,4211ab06,94635168,e997b0ea,d2a93dae,ced1f4a0,4a95c0f6,cfb199f6,9e56eb77)\n,S(2b4ea0a7,97a443d2,93ef5cff,444f4979,f06acfeb,d7e86d27,74756561,38385b6c,85e89bc0,37945d93,b343083b,5a1c8613,1a01f60c,50269763,b570c854,e5c09b7a)\n,S(352bbf4a,4cdd1256,4f93fa33,2ce33330,1d9ad402,71f81071,81340aef,25be59d5,321eb407,5348f534,d59c1825,9dda3e1f,4a1b3b2e,71b1039c,67bd3d8b,cf81998c)\n,S(2fa2104d,6b38d11b,2300105,59879124,e42ab8df,eff5ff29,dc9cdadd,4ecacc3f,2de1068,295dd865,b6456933,5bd5dd80,181d70ec,fc882648,423ba76b,532b7d67)\n,S(9248279b,9b4d68d,ab21a9b0,66edda83,263c3d84,e09572e2,69ca0cd7,f5453714,73016f7b,f234aade,5d1aa71b,dea2b1ff,3fc0de2a,887912ff,e54a32ce,97cb3402)\n,S(daed4f2b,e3a8bf27,8e70132f,b0beb752,2f570e14,4bf615c0,7e996d44,3dee8729,a69dce4a,7d6c98e8,d4a1aca8,7ef8d700,3f83c230,f3afa726,ab40e522,90be1c55)\n,S(c44d12c7,65d812e,8acf28d7,cbb19f90,11ecd9e9,fdf281b0,e6a3b5e8,7d22e7db,2119a460,ce326cdc,76c45926,c982fdac,e106e86,1edf61c5,a039063f,e0e6482)\n,S(6a245bf6,dc698504,c89a20cf,ded60853,152b6953,36c28063,b61c65cb,d269e6b4,e022cf42,c2bd4a70,8b3f5126,f16a24ad,8b33ba48,d0423b6e,fd5e6348,100d8a82)\n#endif\n#if WINDOW_G > 6\n,S(1697ffa6,fd9de627,c077e3d2,fe541084,ce13300b,bec1146,f95ae57f,d0bd6a5,b9c398f1,86806f5d,27561506,e4557433,a2cf1500,9e498ae7,adee9d63,d01b2396)\n,S(605bdb01,9981718b,986d0f07,e834cb0d,9deb8360,ffb7f61d,f982345e,f27a7479,2972d2d,e4f8d206,81a78d93,ec96fe23,c26bfae8,4fb14db4,3b01e1e9,56b8c49)\n,S(62d14dab,4150bf49,7402fdc4,5a215e10,dcb01c35,4959b10c,fe31c7e9,d87ff33d,80fc06bd,8cc5b010,98088a19,50eed0db,1aa1329,67ab4722,35f56424,83b25eaf)\n,S(80c60ad0,40f27da,de5b4b06,c408e56b,2c50e9f5,6b9b8b42,5e555c2f,86308b6f,1c38303f,1cc5c30f,26e66bad,7fe72f70,a65eed4c,be7024eb,1aa01f56,430bd57a)\n,S(7a9375ad,6167ad54,aa74c634,8cc54d34,4cc5dc94,87d84704,9d5eabb0,fa03c8fb,d0e3fa9,eca87269,9559e0d,79269046,bdc59ea1,c70ce2b,2d499ec,224dc7f7)\n,S(d528ecd9,b696b54c,907a9ed0,45447a79,bb408ec3,9b68df50,4bb51f45,9bc3ffc9,eecf4125,3136e5f9,9966f218,81fd656e,bc434540,5c520dbc,63465b5,21409933)\n,S(49370a4,b5f43412,ea25f514,e8ecdad0,5266115e,4a7ecb13,87231808,f8b45963,758f3f41,afd6ed42,8b3081b0,512fd62a,54c3f3af,bb5b6764,b653052a,12949c9a)\n,S(77f23093,6ee88cbb,d73df930,d64702ef,881d811e,e1498e2,f1c13eb1,fc345d74,958ef42a,7886b640,a08266e,9ba1b378,96c95330,d97077cb,be8eb3c7,671c60d6)\n,S(f2dac991,cc4ce4b9,ea44887e,5c7c0bce,58c80074,ab9d4dba,eb28531b,7739f530,e0dedc9b,3b2f8dad,4da1f32d,ec2531df,9eb5fbeb,598e4fd,1a117dba,703a3c37)\n,S(463b3d9f,662621fb,1b4be8fb,be252012,5a216cdf,c9dae3de,bcba4850,c690d45b,5ed430d7,8c296c35,43114306,dd8622d7,c622e27c,970a1de3,1cb377b0,1af7307e)\n,S(f16f8042,44e46e2a,9232d4a,ff3b5997,6b98fac1,4328a2d1,a32496b4,9998f247,cedabd9b,82203f7e,13d206fc,df4e33d9,2a6c53c2,6e5cce26,d6579962,c4e31df6)\n,S(caf75427,2dc84563,b0352b7a,14311af5,5d245315,ace27c65,369e15f7,151d41d1,cb474660,ef35f5f2,a41b643f,a5e46057,5f4fa9b7,962232a5,c32f9083,18a04476)\n,S(2600ca4b,282cb986,f85d0f17,9979d8b,44a09c07,cb86d7c1,24497bc8,6f082120,4119b887,53c15bd6,a693b03f,cddbb45d,5ac6be74,ab5f0ef4,4b0be947,5a7e4b40)\n,S(7635ca72,d7e8432c,338ec53c,d12220bc,1c48685,e24f7dc8,c602a774,6998e435,91b6496,9489d61,3d1d5e59,f78e6d7,4ecfc061,d57048ba,d9e76f30,2c5b9c61)\n,S(754e3239,f325570c,dbbf4a87,deee8a66,b7f2b334,79d468fb,c1a50743,bf56cc18,673fb86,e5bda30f,b3cd0ed3,4ea49a0,23ee33d0,197a695d,c5d9809,3c536683)\n,S(e3e6bd10,71a1e96a,ff57859c,82d570f0,33080066,1d1c952f,9fe26946,91d9b9e8,59c9e0bb,a394e76f,40c0aa58,379a3cb6,a5a22839,93e90c41,67002af4,920e37f5)\n#endif\n#if WINDOW_G > 7\n,S(186b483d,56a0338,26ae73d8,8f732985,c4ccb1f3,2ba35f4b,4cc47fdc,f04aa6eb,3b952d32,c67cf77e,2e17446e,204180ab,21fb8090,895138b4,a4a797f8,6e80888b)\n,S(df9d70a6,b9876ce5,44c98561,f4be4f72,5442e6d2,b737d9c9,1a832172,4ce0963f,55eb2daf,d84d6ccd,5f862b78,5dc39d4a,b1572227,20ef9da2,17b8c45c,f2ba2417)\n,S(5edd5cc2,3c51e87a,497ca815,d5dce0f8,ab52554f,849ed899,5de64c5f,34ce7143,efae9c8d,bc141306,61e8cec0,30c89ad0,c13c66c0,d17a2905,cdc706ab,7399a868)\n,S(290798c2,b6476830,da12fe02,287e9e77,7aa3fba1,c355b17a,722d362f,84614fba,e38da76d,cd440621,988d00bc,f79af25d,5b29c094,db2a2314,6d003afd,41943e7a)\n,S(af3c423a,95d9f5b3,54754ef,a150ac39,cd29552f,e3602573,62dfdece,f4053b45,f98a3fd8,31eb2b74,9a93b0e6,f35cfb40,c8cd5aa6,67a15581,bc2feded,498fd9c6)\n,S(766dbb24,d134e745,cccaa28c,99bf2749,6bb66b2,6dcf98df,8d2fed50,d884249a,744b1152,eacbe5e3,8dcc8879,80da38b8,97584a65,fa06cedd,2c924f97,cbac5996)\n,S(59dbf46f,8c94759b,a21277c3,3784f416,45f7b44f,6c596a58,ce92e666,191abe3e,c534ad44,175fbc30,f4ea6ce,648309a0,42ce739a,7919798c,d85e216c,4a307f6e)\n,S(f13ada95,103c4537,305e691e,74e9a4a8,dd647e71,1a95e73c,b62dc601,8cfd87b8,e13817b4,4ee14de6,63bf4bc8,8341f32,6949e21a,6a75c257,778419b,daf5733d)\n,S(7754b4fa,e8aced0,6d4167a2,c59cca4c,da1869c0,6ebadfb6,48855001,5a88522c,30e93e86,4e669d82,224b967c,3020b8fa,8d1e4e35,b6cbcc5,37a48b57,841163a2)\n,S(948dcadf,5990e048,aa3874d4,6abef9d7,1858f95,de8041d2,a6828c99,e2262519,e491a425,37f6e597,d5d28a32,24b1bc25,df9154ef,bd2ef1d2,cbba2cae,5347d57e)\n,S(79624144,50c76c16,89c7b48f,8202ec37,fb224cf5,ac0bfa15,70328a8a,3d7c77ab,100b610e,c4ffb476,d5c1fc1,33ef6f6b,12507a05,1f04ac57,60afa5b2,9db83437)\n,S(35140878,34964b54,b15b1606,44d91548,5a169772,25b8847b,b0dd0851,37ec47ca,ef0afbb2,5620544,8e1652c4,8e8127fc,6039e77c,15c2378b,7e7d15a0,de293311)\n,S(d3cc30ad,6b483e4b,c79ce2c9,dd8bc549,93e947eb,8df787b4,42943d3f,7b527eaf,8b378a22,d827278d,89c5e9be,8f9508ae,3c2ad462,90358630,afb34db0,4eede0a4)\n,S(1624d847,80732860,ce1c78fc,bfefe08b,2b29823d,b913f649,3975ba0f,f4847610,68651cf9,b6da903e,914448c,6cd9d4ca,896878f5,282be4c8,cc06e2a4,4078575)\n,S(733ce80d,a955a8a2,6902c956,33e62a98,5192474b,5af207da,6df7b4fd,5fc61cd4,f5435a2b,d2badf7d,485a4d8b,8db9fcce,3e1ef8e0,201e4578,c54673bc,1dc5ea1d)\n,S(15d94412,54945064,cf1a1c33,bbd3b49f,8966c509,2171e699,ef258dfa,b81c045c,d56eb30b,69463e72,34f5137b,73b84177,434800ba,cebfc685,fc37bbe9,efe4070d)\n,S(a1d0fcf2,ec9de675,b612136e,5ce70d27,1c21417c,9d2b8aaa,ac138599,d0717940,edd77f50,bcb5a3ca,b2e90737,309667f2,641462a5,4070f3d5,19212d39,c197a629)\n,S(e22fbe15,c0af8ccc,5780c073,5f84dbe9,a790bade,e8245c06,c7ca3733,1cb36980,a855bab,ad5cd60c,88b430a6,9f53a1a7,a3828915,4964799b,e43d06d7,7d31da06)\n,S(311091dd,9860e8e2,ee13473,c1155f5f,69635e39,4704eaa7,40094522,46cfa9b3,66db656f,87d1f04f,ffd1f047,88c06830,871ec5a6,4feee685,bd80f0b1,286d8374)\n,S(34c1fd04,d301be89,b31c0442,d3e6ac24,883928b4,5a934078,1867d423,2ec2dbdf,9414685,e97b1b59,54bd46f7,30174136,d57f1cee,b487443d,c5321857,ba73abee)\n,S(f219ea5d,6b54701c,1c14de5b,557eb42a,8d13f3ab,bcd08aff,cc2a5e6b,49b8d63,4cb95957,e83d40b0,f73af454,4cccf6b1,f4b08d3c,7b27fb8,d8c2962a,400766d1)\n,S(d7b8740f,74a8fbaa,b1f683db,8f45de26,543a5490,bca62708,72369124,69a0b448,fa779681,28d9c92e,e1010f33,7ad4717e,ff15db5e,d3c049b3,411e0315,eaa4593b)\n,S(32d31c22,2f8f6f0e,f86f7c98,d3a3335e,ad5bcd32,abdd9428,9fe4d309,1aa824bf,5f3032f5,892156e3,9ccd3d79,15b9e1da,2e6dac9e,6f26e961,118d14b8,462e1661)\n,S(7461f371,914ab326,71045a15,5d9831ea,8793d77c,d59592c4,340f86cb,c18347b5,8ec0ba23,8b96bec0,cbdddcae,aa44254,2eee1ff5,c986ea6,b39847b3,cc092ff6)\n,S(ee079adb,1df18600,74356a25,aa38206a,6d716b2c,3e67453d,287698ba,d7b2b2d6,8dc2412a,afe3be5c,4c5f37e0,ecc5f9f6,a446989a,f04c4e25,ebaac479,ec1c8c1e)\n,S(16ec93e4,47ec83f0,467b1830,2ee620f7,e65de331,874c9dc7,2bfd8616,ba9da6b5,5e463115,e62fb40,d0e8c2a7,ca5804a3,9d58186a,50e49713,9626778e,25b0674d)\n,S(eaa5f980,c245f6f0,38978290,afa70b6b,d8855897,f98b6aa4,85b96065,d537bd99,f65f5d3e,292c2e08,19a52839,1c994624,d784869d,7e6ea67f,b1804102,4edc07dc)\n,S(78c9407,544ac132,692ee191,a024399,58ae0487,7151342e,a96c4b6b,35a49f51,f3e03191,69eb9b85,d5404795,539a5e68,fa1fbd58,3c064d24,62b675f1,94a3ddb4)\n,S(494f4be2,19a1a770,16dcd838,431aea00,1cdc8ae,7a6fc688,726578d9,702857a5,42242a96,9283a5f3,39ba7f07,5e36ba2a,f925ce30,d767ed6e,55f4b031,880d562c)\n,S(a598a803,da6d86c,6bc7f2f5,144ea549,d28211ea,58faa70e,bf4c1e66,5c1fe9b5,204b5d6f,84822c30,7e4b4a71,40737aec,23fc63b6,5b35f86a,10026dbd,2d864e6b)\n,S(c4191636,5abb2b5d,9192f5f,2dbeafec,208f020f,12570a18,4dbadc3e,58595997,4f14351,d0087efa,49d245b3,28984989,d5caf945,f34bfc0,ed16e96b,58fa9913)\n,S(841d6063,a586fa47,5a724604,da03bc5b,92a2e0d2,e0a36acf,e4c73a55,14742881,73867f5,9c0659e8,1904f9a1,c7543698,e62562d6,744c169c,e7a36de0,1a8d6154)\n#endif\n#if WINDOW_G > 8\n,S(5e95bb39,9a6971d3,76026947,f89bde2f,282b3381,928be4d,ed112ac4,d70e20d5,39f23f36,6809085b,eebfc711,81313775,a99c9aed,7d8ba38b,161384c7,46012865)\n,S(36e4641a,53948fd4,76c39f8a,99fd974e,5ec07564,b5315d8b,f99471bc,a0ef2f66,d2424b1b,1abe4eb8,164227b0,85c9aa94,56ea1349,3fd563e0,6fd51cf5,694c78fc)\n,S(336581e,a7bfbbb2,90c191a2,f507a41c,f5643842,170e914f,aeab27c2,c579f726,ead12168,595fe1be,99252129,b6e56b33,91f7ab14,10cd1e0e,f3dcdcab,d2fda224)\n,S(8ab89816,dadfd6b6,a1f2634f,cf00ec84,3781025,ed6890c4,84974270,6bd43ede,6fdcef09,f2f6d0a0,44e654ae,f624136f,503d459c,3e898458,58a47a91,29cdd24e)\n,S(1e33f1a7,46c9c577,8133344d,9299fcaa,20b0938e,8acff254,4bb40284,b8c5fb94,6066025,7dd11b3a,a9c8ed61,8d24edff,2306d320,f1d03010,e33a7d20,57f3b3b6)\n,S(85b7c1dc,b3cec1b7,ee7f30de,d79dd20a,ed1f4cc,18cbcfcf,a410361f,d8f08f31,3d98a9cd,d026dd43,f39048f2,5a8847f4,fcafad18,95d7a633,c6fed3c3,5e999511)\n,S(29df9fbd,8d9e4650,9275f4b1,25d6d45d,7fbe9a3b,878a7af8,72a28006,61ac5f51,b4c4fe9,9c775a60,6e2d8862,179139ff,da61dc86,1c019e55,cd2876eb,2a27d84b)\n,S(a0b1cae0,6b0a847a,3fea6e67,1aaf8adf,dfe58ca2,f768105c,8082b2e4,49fce252,ae434102,edde0958,ec4b19d9,17a6a28e,6b72da18,34aff0e6,50f04950,3a296cf2)\n,S(4e8ceaf,b9b3e9a1,36dc7ff6,7e840295,b499dfb3,b2133e4b,a113f2e4,c0e121e5,cf217411,8c8b6d7a,4b48f6d5,34ce5c79,422c086a,63460502,b827ce62,a326683c)\n,S(d24a44e0,47e19b6f,5afb81c7,ca2f6908,a507668,9a010919,f42725c2,b789a33b,6fb8d559,1b466f8f,c63db50f,1c0f1c69,13f9968,87b8244d,2cdec417,afea8fa3)\n,S(ea01606a,7a6c9cdd,249fdfcf,acb99584,1edd28,abbab77b,5104e98e,8e3b35d4,322af490,8c7312b0,cfbfe369,f7a7b3cd,b7d4494b,c2823700,cfd65218,8a3ea98d)\n,S(af8addbf,2b661c8a,6c632865,5eb96651,252007d8,c5ea31be,4ad196de,8ce2131f,6749e67c,29b85f5,2a034eaf,d096836b,25208186,80e26ac8,f3dfbcdb,71749700)\n,S(e3ae19,74566ca0,6cc516d4,7e0fb165,a674a3da,bcfca15e,722f0e34,50f45889,2aeabe7e,45315101,16217f07,bf4d0730,de97e48,74f81f53,3420a72e,eb0bd6a4)\n,S(591ee355,313d9972,1cf6993f,fed1e3e3,1993ff3,ed258802,75ea8ce,d397e246,b0ea558a,113c30be,a60fc477,5460c790,1ff0b053,d25ca2bd,eee98f1a,4be5d196)\n,S(11396d55,fda54c49,f19aa973,18d8da61,fa8584e4,7b084945,77cf032,55b52984,998c74a8,cd45ac01,289d5833,a7beb474,4ff536b0,1b257be4,c5767bea,93ea57a4)\n,S(3c5d2a1b,a39c5a17,90000738,c9e0c40b,8dcdfd54,68754b64,5540157,e017aa7a,b2284279,995a34e2,f9d4de73,96fc18b8,f9b8b9f,dd270f66,61f79ca4,c81bd257)\n,S(cc8704b8,a60a0def,a3a99a72,99f2e9c3,fbc395af,b04ac078,425ef8a1,793cc030,bdd46039,feed1788,1d1e0862,db347f8c,f395b74f,c4bcdc4e,940b74e3,ac1f1b13)\n,S(c533e4f7,ea8555aa,cd9777ac,5cad29b9,7dd4defc,cc53ee7e,a204119b,2889b197,6f0a256b,c5efdf42,9a2fb624,2f1a43a2,d9b925bb,4a4b3a26,bb8e0f45,eb596096)\n,S(c14f8f2,ccb27d6f,109f6d08,d03cc96a,69ba8c34,eec07bbc,f566d48e,33da6593,c359d692,3bb398f7,fd4473e1,6fe1c284,75b740dd,98075e6,c0e86491,13dc3a38)\n,S(a6cbc304,6bc6a450,bac24789,fa17115a,4c9739ed,75f8f21c,e441f72e,b90e6ef,21ae7f4,680e889b,b130619e,2c0f95a3,60ceb573,c7060313,9862afd6,17fa9b9f)\n,S(347d6d9a,2c48927,ebfb86c1,359b1caf,130a3c02,67d11ce6,344b39f9,9d43cc38,60ea7f61,a353524d,1c987f6e,cec92f08,6d565ab6,87870cb1,2689ff1e,31c74448)\n,S(da6545d2,181db8d9,83f7dcb3,75ef5866,d47c67b1,bf31c8cf,855ef743,7b72656a,49b96715,ab6878a7,9e78f07c,e5680c5d,6673051b,4935bd89,7fea824b,77dc208a)\n,S(c40747cc,9d012cb1,a13b8148,309c6de7,ec25d694,5d657146,b9d5994b,8feb1111,5ca56075,3be2a12f,c6de6caf,2cb48956,5db93615,6b9514e1,bb5e8303,7e0fa2d4)\n,S(4e42c8ec,82c99798,ccf3a610,be870e78,338c7f71,3348bd34,c8203ef4,37f3502,7571d74e,e5e0fb92,a7a8b33a,7783341,a5492144,cc54bcc4,a944736,93606437)\n,S(3775ab70,89bc6af8,23aba2e1,af70b236,d251cadb,c867432,87522a1b,3b0dedea,be52d107,bcfa09d8,bcb9736a,828cfa7f,ac8db17b,f7a76a2c,42ad9614,9018cf7)\n,S(cee31cbf,7e34ec37,9d94fb81,4d3d775a,d954595d,1314ba88,46959e3e,82f74e26,8fd64a14,c06b589c,26b947ae,2bcf6bfa,149ef0b,e14ed4d8,f448a01,c43b1c6d)\n,S(b4f9eaea,9b69176,19f6ea6a,4eb5464e,fddb58fd,45b1ebef,cdc1a01d,8b47986,39e5c992,5b5a54b0,7433a4f1,8c61726f,8bb131c0,12ca542e,b24a8ac0,7200682a)\n,S(d4263dfc,3d2df923,a0179a48,966d30ce,84e2515a,fc3dccc1,b7790779,2ebcc60e,62dfaf07,a0f78feb,30e30d62,95853ce1,89e12776,ad6cf7f,ae164e12,2a208d54)\n,S(48457524,820fa65a,4f8d35eb,6930857c,32acc0,a4a2de42,2233eeda,897612c4,25a748ab,367979d9,8733c38a,1fa1c2e7,dc6cc07d,b2d60a9a,e7a76aaa,49bd0f77)\n,S(dfeeef18,81101f2c,b11644f3,a2afdfc2,45e1991,9152923f,367a1767,c11cceda,ecfb7056,cf1de042,f9420bab,396793c0,c390bde7,4b4bbdff,16a83ae0,9a9a7517)\n,S(6d7ef6b1,7543f837,3c573f44,e1f38983,5d89bcbc,6062ced3,6c82df83,b8fae859,cd450ec3,35438986,dfefa10c,57fea9bc,c521a095,9b2d80bb,f74b190d,ca712d10)\n,S(e75605d5,9102a5a2,684500d3,b991f2e3,f3c88b93,22554703,5af25af6,6e04541f,f5c54754,a8f71ee5,40b9b487,28473e31,4f729ac5,308b0693,8360990e,2bfad125)\n,S(eb98660f,4c4dfaa0,6a2be453,d5020bc9,9a0c2e60,abe38845,7dd43fef,b1ed620c,6cb9a887,6d9cb852,609af3a,dd26cd20,a0a7cd8a,9411131c,e85f4410,99223e)\n,S(13e87b02,7d8514d3,5939f2e6,892b1992,21545969,41888336,dc3563e3,b8dba942,fef5a3c6,8059a6de,c5d62411,4bf1e91a,ac2b9da5,68d6abeb,2570d556,46b8adf1)\n,S(ee163026,e9fd6fe0,17c38f06,a5be6fc1,25424b37,1ce2708e,7bf44916,91e5764a,1acb250f,255dd61c,43d94ccc,670d0f58,f49ae3fa,15b96623,e5430da0,ad6c62b2)\n,S(b268f5ef,9ad51e4d,78de3a75,c2dc89b,1e626d43,50586799,9932e5db,33af3d80,5f310d4b,3c99b9eb,b19f77d4,1c1dee01,8cf0d34f,d4191614,3e945a,1216e423)\n,S(ff07f311,8a9df035,e9fad85e,b6c7bfe4,2b02f01c,a99ceea3,bf7ffdba,93c4750d,438136d6,3e858a3,a5c440c3,8eccbadd,c1d29421,14e2eddd,4740d098,ced1f0d8)\n,S(8d8b9855,c7c052a3,4146fd20,ffb658be,a4b9f69e,d825ebe,c16e8c3c,e2b526a1,cdb559ee,dc2d79f9,26baf44f,b84ea4d4,4bcf50fe,e51d7ceb,30e2e7f4,63036758)\n,S(52db0b53,84dfbf05,bfa9d472,d7ae26df,e4b851ce,ca91b1eb,a5426318,da32b63,c3b997d,50ee5d4,23ebaf66,a6db9f57,b3180c90,2875679d,e924b69d,84a7b375)\n,S(e62f9490,d3d51da6,395efd24,e80919cc,7d0f29c3,f3fa48c6,fff543be,cbd43352,6d89ad7b,a4876b0b,22c2ca28,c682862,f342c859,1f1daf51,70e07bfd,9ccafa7d)\n,S(7f30ea24,76b399b4,957509c8,8f77d019,1afa2ff5,cb7b14fd,6d8e7d65,aaab1193,ca5ef7d4,b231c94c,3b15389a,5f6311e9,daff7bb6,7b103e98,80ef4bff,637acaec)\n,S(5098ff1e,1d9f14fb,46a210fa,da6c903f,ef0fb7b4,a1dd1d9a,c60a0361,800b7a00,9731141,d81fc8f8,84d37c6,e7542006,b3ee1b40,d60dfe53,62a5b132,fd17ddc0)\n,S(32b78c7d,e9ee512a,72895be6,b9cbefa6,e2f3c4cc,ce445c96,b9f2c81e,2778ad58,ee1849f5,13df71e3,2efc3896,ee28260c,73bb8054,7ae2275b,a4972377,94c8753c)\n,S(e2cb74fd,dc8e9fbc,d076eef2,a7c72b0c,e37d50f0,8269dfc0,74b58155,547a4f7,d3aa2ed7,1c9dd224,7a62df06,2736eb0b,addea9e3,6122d2be,8641abcb,5cc4a4)\n,S(84384475,66d4d7be,dadc2994,96ab3574,26009a35,f235cb14,1be0d99c,d10ae3a8,c4e10209,16980a4d,a5d01ac5,e6ad3307,34ef0d79,6631c4f,2390426b,2edd791f)\n,S(4162d488,b8940203,9b584c6f,c6c30887,587d9c4,6f660b87,8ab65c82,c711d67e,67163e90,3236289f,776f22c2,5fb8a3af,c1732f2b,84b4e95d,bda47ae5,a0852649)\n,S(3fad3fa8,4caf0f34,f0f89bfd,2dcf54fc,175d767a,ec3e5068,4f3ba4a4,bf5f683d,cd1bc7c,b6cc407b,b2f0ca64,7c718a73,cf71872,e7d0d2a5,3fa20efc,dfe61826)\n,S(674f2600,a3007a00,568c1a7c,e05d0816,c1fb84bf,1370798f,1c69532f,aeb1a86b,299d21f9,413f33b3,edf43b25,7004580b,70db57da,b182259,e09eecc6,9e0d38a5)\n,S(d32f4da5,4ade74ab,b81b815a,d1fb3b26,3d82d6c6,92714bcf,f87d29bd,5ee9f08f,f9429e73,8b8e53b9,68e99016,c0597077,82e14f45,35359d58,2fc41691,b3eea87)\n,S(30e4e670,43538555,6e593657,135845d3,6fbb6931,f72b08cb,1ed954f1,e3ce3ff6,462f9bce,61989863,84993501,13bbc9b1,a878d35,da70740d,c695a559,eb88db7b)\n,S(be206200,3c51cc30,4682904,330e4dee,7f3dcd10,b01e580b,f1971b04,d4cad297,62188bc4,9d61e542,8573d48a,74e1c655,b1c61090,905682a0,d5558ed7,2dccb9bc)\n,S(93144423,ace3451e,d29e0fb9,ac2af211,cb6e84a6,1df5993,c419859f,ff5df04a,7c10dfb1,64c3425f,5c71a3f9,d7992038,f1065224,f72bb9d1,d902a6d1,3037b47c)\n,S(b015f804,4f5fcbdc,f21ca26d,6c34fb81,97829205,c7b7d2a7,cb66418c,157b112c,ab8c1e08,6d04e813,744a655b,2df8d5f8,3b3cdc6f,aa3088c1,d3aea145,4e3a1d5f)\n,S(d5e9e1da,649d97d8,9e486811,7a465a3a,4f8a18de,57a140d3,6b3f2af3,41a21b52,4cb04437,f391ed73,111a13cc,1d4dd0db,1693465c,2240480d,8955e859,2f27447a)\n,S(d3ae4104,7dd7ca06,5dbf8ed7,7b992439,983005cd,72e16d6f,996a5316,d36966bb,bd1aeb21,ad22ebb2,2a10f030,3417c6d9,64f8cdd7,df0aca61,4b10dc14,d125ac46)\n,S(463e2763,d885f958,fc66cdd2,2800f0a4,87197d0a,82e377b4,9f80af87,c897b065,bfefacdb,e5d0fd7,df3a311a,94de062b,26b80c61,fbc97508,b7999267,1ef7ca7f)\n,S(7985fdfd,127c0567,c6f53ec1,bb63ec31,58e597c4,bfe747c,83cddfc9,10641917,603c12da,f3d9862e,f2b25fe1,de289aed,24ed291e,ec67087,3a5bd56,7f32ed03)\n,S(74a1ad6b,5f76e39d,b2dd2494,10eac7f9,9e74c59c,b83d2d0e,d5ff1543,da7703e9,cc6157ef,18c9c63c,d6193d83,631bbea0,93e0968,942e8c33,d5737fd7,90e0db08)\n,S(30682a50,703375f6,2d41666,4ba19b7f,c9bab42c,72747463,a71d0896,b22f6da3,553e04f6,b018b4fa,6c8f39e7,f311d317,6290d0e0,f19ca73f,17714d99,77a22ff8)\n,S(9e2158f0,d7c0d5f2,6c3791ef,efa79597,654e7a2b,2464f52b,1ee6c134,7769ef57,712fcdd,1b9053f0,9003a348,1fa7762e,9ffd7c8e,f35a3850,9e2fbf26,29008373)\n,S(176e2698,9a43c9cf,eba4029c,202538c2,8172e566,e3c4fce7,322857f3,be327d66,ed8cc9d0,4b29eb87,7d270b48,78dc43c1,9aefd31f,4eee09ee,7b47834c,1fa4b1c3)\n,S(75d46efe,a3771e6e,68abb89a,13ad747e,cf189239,3dfc4f1b,7004788c,50374da8,9852390a,99507679,fd0b86fd,2b39a868,d7efc221,51346e1a,3ca47265,86a6bed8)\n,S(809a20c6,7d64900f,fb698c4c,825f6d5f,2310fb04,51c86934,5b7319f6,45605721,9e994980,d9917e22,b76b0619,27fa0414,3d096ccc,54963e6a,5ebfa5f3,f8e286c1)\n,S(1b38903a,43f7f114,ed4500b4,eac7083f,defece1c,f29c6352,8d563446,f972c180,4036edc9,31a60ae8,89353f77,fd53de4a,2708b26b,6f5da72a,d3394119,daf408f9)\n#endif\n#if WINDOW_G > 9\n,S(90a80db6,eb294b9e,ab0b4e8d,dfa3efe7,263458ce,2d07566d,f4e6c588,68feef23,753c8b9f,9754f18d,87f21145,d9e2936b,5ee050b2,7bbd9681,442c76e9,2fcf91e6)\n,S(c2c80f84,4b705998,12d62546,f60340e,3e6f3605,4a14546e,6dc25d47,376bea9b,86ca160d,68f4d4e7,18b495b8,91d3b1b5,73b871a7,2b4cf61,23abd448,3aa79c64)\n,S(9cf60674,4cf4b5f3,fdf989d3,f19fb265,2d00cfe1,d5fcd692,a323ce11,a28e7553,8147cbf7,b973fcc1,5b57b6a3,cfad6863,edd0f30e,3c45b85d,c300c513,c247759d)\n,S(57488fa2,8742c6b2,5a493fd6,60d936e,a6280b0c,742005ab,ce98f585,5ad82208,31b3ca45,5073bea5,58adbe56,c27b470b,af949ae6,50213921,dc287844,f1a29574)\n,S(f1133cbe,6be8bbc8,dc8df2b8,d75963c2,d40ed616,c758cdc8,4edbc5eb,4899447d,57fc2447,2225b23f,5714626d,8d67d561,10bd3a60,dd7a1687,cbbb893,f652f50f)\n,S(95083e75,3301bd78,7f8989c7,9065bb81,3f3d69bf,f3e42505,f4e0417,5bbe89c0,844adb5c,e7d10de9,4617c73c,a77040e4,ee4e92e0,156b3c70,cc593fa4,94b33482)\n,S(1a908355,cbb75675,5e576ed2,9c99af63,8668c7b3,63c8d973,62100443,bc5c75c6,d765466c,6e556e35,2f778722,25627d80,a7353807,4b44ff27,57ad22e,2f2454a2)\n,S(c5922f74,bd343d5,aa867308,fad97f9f,8a2d1f63,c5f31db4,f04df3be,f349b648,77b1f068,7cfcdbe8,812605e5,d8b752c,da811844,236a4c43,77f53c94,6e7bd648)\n,S(64e1b196,9f910297,7691a404,31b0b672,55dcf31,163897d9,96434420,e6c95dc9,c16f60c7,c11fc3c9,eb27fa26,a9035b66,9bfb77d2,1cef371d,dce94e32,9222550c)\n,S(33b2e76,687744ed,6c521bad,3333dd37,c602f8a7,549e9ce7,808fb7ea,7ce08de,e1bcfe7f,c8ed8ae9,5cf6c243,7fdd94bf,d742e8ca,a6de7811,4c25112a,86988efd)\n,S(20f18f4c,866d8a1c,c2a31033,17b4ac31,89fbf30f,f294a75c,951473be,45e4f294,8d6857c9,d08ef7b4,fd888336,3d37bee7,fe8529f,7173f589,43fcae81,d2d0ea0e)\n,S(4d1623c9,44c9c716,a0eb4c68,5e2a8b9d,2df34653,54643bef,d1444176,d7b69a8b,ddf1b9fe,8744ad03,f996bf6b,96ec3496,2b601bd5,ed952f78,54f58388,8917be80)\n,S(a901b0db,e8ab292d,280d6b36,85894785,4faad0a4,dd0da7e2,d4ad0ff5,3db079e0,3f27e7e1,834f1a61,af6f04dc,61e7ae64,716bc5e0,a6b063b3,1d0e60e,47298a9d)\n,S(7e0af071,30218ffd,50bd66f4,484645b1,2f42a24f,7c80889b,3031c9a6,ebfc9a70,50bc23f3,926cd0c4,9f53fbb2,35eb1e89,d579517,f5bdc3ab,2416db78,5aaedb3f)\n,S(7ba8187e,1a7b25a2,c185d335,440a9038,b47f0528,546e9da4,ef82aab0,5aebf20d,6e6aee6c,9625370a,f866c25c,7ca5dd78,527efbc,e7d8b3a3,9ab24930,9a185187)\n,S(8c050fc3,4d83b279,b6000816,e18fca38,9767b796,e926772,55b84a39,d93a6807,986314ef,75b68fb2,827c2965,4198139,5d699fcd,81cf23ce,7019bc41,35174870)\n,S(53b7849a,78e4df86,25860583,a5249948,9d7201a2,cbf50620,2a7b8b1b,c99c2ec9,4e31ea12,ac607d07,5de4b22d,e1be2c52,e0a44d25,4728d2c5,44d2ddf9,e3e469c0)\n,S(9bdf9e67,a5d0c995,6a075a01,fe762be,b6335004,31dee78e,febc527e,53313b33,94264621,a5960e0e,e24c2792,6f16cad2,907f2636,762e8d5a,17e94afd,8e9d2bb0)\n,S(7caa72b3,7a8ab3bd,bac031a,47606f89,17d9f42c,6ec2d2fb,429fd990,4a381f34,5b5853ab,7ee5de8d,34e3d6be,b201094f,ff8fbd1e,682f7f1,ef87ddd6,5d7303c9)\n,S(2ef29b9f,9827975,79c0295f,c3f48db7,925d62c7,5532493d,de16b97e,3993d81a,496c944d,d9875ba6,a537ef9,6bf4c714,a0afff24,387d95e8,9b42337a,33110753)\n,S(df157cad,95b07875,573c1860,ae5d02c6,4029e952,ec354e6a,9e5c34be,97317ff8,f2eccac7,75922b50,899c979a,2b3cc30,b629e62e,85693ba4,70f6ee38,1284c162)\n,S(dd55c150,a29ca526,b6182e64,3b9eb544,e651d236,b71920e7,b15a9870,16454b1d,44c757a5,42f4ea2e,b39605d4,268c2510,ac685aab,d77a8f5c,4d95e23f,4c2e9368)\n,S(16886cf4,6ed42c79,19147763,63d3256,c4d5d393,87f01723,25b9e4b8,98227f27,7421a220,7ee73299,d46192fc,93ca03de,c824ed8d,e2f48367,ec538317,a17fffb)\n,S(6ff180fc,daa30618,8e8b306,d6f0acff,27968c22,484ff45e,56aeaa7b,2b60732f,7d16d654,f0c2aff0,fc254dad,63761a2,6c8d4022,ea85b8cc,22f3ea1e,f69961a9)\n,S(3ea4511,a00dc2a0,3eb4f51f,40ee677c,aa912b55,39f685c4,f8bcc8ea,dc395e36,6c9ed1f1,528b0215,93a39839,340ddb53,a2f2e36,5290c498,24b035c6,73c9259d)\n,S(b82cd70,dc3de9ea,b38742d8,f32dfb8d,53e4150a,835e54b6,3c7cca20,f253081d,e8bcbfe,1f7f6e75,d32e2049,9329765f,2effc56,a922f268,60d4bc0a,add0e24d)\n,S(fe2fc3e0,748745,84ee23bf,105a69a6,6d056f0,17327d49,b7b38b57,a196c77f,3e18941c,c3c6d297,cc9a32f6,95807b1c,7da8561d,e4fde71d,4f9bbdb6,e9bf3916)\n,S(4b90176,cdaa3693,47e8778b,12db9d6e,e8b00114,46ea35ec,845dbf57,4bb7858b,f60547ab,6e9c5fd3,eca6e349,b85880c6,1fdad0fc,2f7ab155,295caaec,b973c154)\n,S(35f38251,1d34600b,4b8c86a9,f0dbc9ed,defc4272,f59528a0,cd3ec10a,5944c6d2,29a835f6,ef7fa1e5,f6f37a80,cf96ca98,43762bb1,b12a0dae,ae83234b,d0b5ccd5)\n,S(1d74b297,311b7ff,a1027e26,587d3f5b,e1d0e9ac,3f0111cd,f3cc2371,722cb94a,5c7bcf8b,57f114e0,b73bcfb8,10f5c60d,35dc99ae,9dc7f0e2,606cc1f7,28c2071e)\n,S(50a094f3,9c6f956,b020737,b9ec722e,4f75d1b7,c41593e6,f934a68a,98450428,a286e222,dfe10cfd,9689eaba,6a81f044,89c86db6,869aa1b5,54a90f1e,83778eee)\n,S(9b65bb81,2129157c,dfecf12e,275ec38c,282dbcd9,14b48105,99b0a6d6,27c63db7,c582db1a,3f0f2242,1913b2e9,51e98a78,660b4c40,ad08fd65,528593bc,18223188)\n,S(8b4544fc,1fdfa06e,456c1115,a1dc831c,85e7f1c5,e620eca5,1c20802d,36a4bc6b,e3e77c41,288f2602,e722af7f,4b70e64d,e4116fb9,955b03b0,6ea8b19f,7a20350d)\n,S(6c709880,b959eb7c,5179b29c,c5578fdc,6cb2ae13,ddcede29,d5f81d95,de0ab4aa,c9e33fae,bd8eba42,6736c0c7,6f3deaba,ee2b59c5,953fb43,c2dcc513,9e7c4bdc)\n,S(77760b51,37ba6a71,95d891f7,94a087a0,76fc9d67,802b81e7,85b5677,3d537806,f5202cf5,aaeea58b,f4f58c7e,df4417be,1b87ffde,e68e77f0,d7e81abe,158e3a25)\n,S(1a8bd783,6a0b0c82,e9a904a8,a8c91a67,e23cd4f8,efd625d0,df4c426e,7e163102,61fe64ca,b0952cae,3c574f28,2f74a87d,c2a96316,b7009f2e,4e9c5fcc,12285844)\n,S(fe217db6,59079913,fb1e453e,d24d91d6,a3fb3099,e69471d7,53db5390,864abc30,5dcf9abb,a9625ed6,80b0f20f,b1f047d5,93a0c61c,53969253,8cdf6b03,4d730b58)\n,S(2504d637,54afd5eb,c38f58b6,5ead696d,7e3abd7,48cb6c5f,212aed49,f5b33b91,79a6bf43,75f1469c,4f5321c6,c72fbbf4,ba7cec10,5675f437,b5e013ad,7b5d75d4)\n,S(b06f702,f47b22d7,89a9bd3f,687105c3,6160abbf,5cc8976b,7fbddcaf,db197b5c,7669bbd4,19a4d491,f592a35b,6aa3dfe4,5bd2fe7f,d179c778,1cd5f918,d732f63d)\n,S(803b203b,b31f9cf9,4034eeb9,31b54480,a6f3f99e,bd23d0ac,bc2128a6,d044e23,308abc8d,f271f759,59b20c5c,7fa62baf,bfc9ccbf,49b946a9,54e5381c,1728d1c7)\n,S(266a9cb4,c5f5cead,bb50e5bd,a03a7312,e52de1de,8e95a8dc,d57289fe,302749a,9eea970b,a856b2fa,a3e82877,cc84ed4f,3dc0efba,1e7c3baa,8b386ffc,46e0ae7e)\n,S(fd8a9d95,d80c7ad5,2599a7ab,98163df3,64c4c141,e9abea35,5d7360bc,f84eba94,a9fb1702,100953b3,59b2e268,8ae7fd33,a30377da,47bfda71,3e2d7d73,dfb1030c)\n,S(a7322df3,9f28f23,59fc339a,8b2c80be,6e84acc5,b7b0b8f8,f2cb6f26,f9db0a7d,22f6fe9d,21749501,7fdb7f5b,2f12fa57,95f40e1,31714885,c12a2ea1,6edb6be6)\n,S(82a8c10f,336a6649,63a104dd,bf7f0f18,bd4c461a,ea569ffc,82c3c7e4,cb052d36,737ceca2,c0ef7227,8b90501c,cb71b671,5e5c31d4,cd0478c1,18fe1287,95f1dd0c)\n,S(9b50d1b6,8e3bf795,7cd12f,5a60c26,6c4ef2b7,5ba5c516,c54784a9,4f15d6df,2afc8d09,b79176d8,d003fd2a,4f18d526,403fff27,2d47e778,7376feb7,cbddd8fd)\n,S(3f9083dd,c8b423fe,7de3a822,81d3056a,b8dcb9d7,ee82cb80,6718595f,bae08d32,cb13c152,fd511d91,a9e0ed90,afa021a0,81f77f6d,20cc1376,e2195ffc,f28fa758)\n,S(c75c85c1,ee17c1a2,56eff6bd,592666cb,c9231706,59d50bfa,dbd1074e,f2167faf,1ab4eabe,5e09409d,75cca892,2647f48d,bd698a16,d4f7cc85,96daf169,40023a52)\n,S(c5341fea,f8a0f5d3,b4d0cf0d,2f7aad7c,60ea8e2b,3d4b7fb9,5c68d576,98656045,95f9f4e9,7e5b9f,a48fa422,a26ab982,dc48a4d5,4d712398,6e6d3ab9,74e88915)\n,S(83acda3e,2a8997e0,d52bd4c6,8705dd22,220852b7,752d67fd,8967a032,60c2d89b,dce1bae1,d655ba51,7f5b5580,99711757,a77cd3b,dd4b8e8e,330e9779,1bc31df0)\n,S(5b819146,8b299074,5b9c4164,e29d594c,f1c0d571,6c5d3962,5bd279b3,25237b,cc3636a0,3fddddfa,bed88daa,b081f359,1c48d2ca,71ba34fc,f6989f4a,f7625d8e)\n,S(64778122,214e38ef,f8041796,166104e7,32f5f664,d38d7721,9b89045e,2c3b0e6c,329cf049,7e15eec7,b8eafc4a,b8a7d1c,d8b63203,8d4aef81,974cf984,4611a32d)\n,S(ed4d826a,fe5762f4,79509909,9aee8664,2b475a9d,6da1017c,43d0cb9f,1af12323,8c6f81be,3fafa5ee,c8296f92,8ac7919d,c4d88c9a,59442274,d0531b7b,f7e48e78)\n,S(38b42924,419aecc3,acd6f551,346fd61a,4d82ac2b,55f7afe9,7a06eb40,cd109c4a,7f42c096,2feb2f73,b2b0965a,1f359a6a,de49d768,a2ce6b07,b5acb92b,73e05583)\n,S(c3cad4a8,d8bb94a7,b434cf70,183e8615,bb2a8f62,24f216e3,446ac2e9,82138911,f649be27,8cad9764,20742ce3,82dce3a1,420e372e,f1b25b27,59a8ed38,7282765e)\n,S(2d408ff4,d3d236fd,54fae40d,ce3ea9ec,d9212e57,36591a9e,55588e4a,54bd6538,d596adf0,e8692a06,bc6284bf,299bef6,85e2a171,585aa132,4b9a05b5,ce815b7)\n,S(ee7adf6d,247f25fb,76e90cf8,13f888eb,d67423a3,a3c6fdae,bafb7eaa,7a33c854,e077184b,4ae8f705,6c10dd9e,f541689d,143f6871,789e1801,deaefc1d,527a8fb4)\n,S(2f9457c8,a9ffaca1,3d91151d,c4c5e89d,dd5d37a3,7c9a864b,7c811f3e,1144b34,eb4c9848,9093d573,a295407e,1d6fc48a,787120ce,b3d3dcfb,b40634e0,e75e221d)\n,S(d3f332b8,a0f11582,1ce3478c,efe18de3,60120483,ef531c27,7b30c46e,b7fec294,ea75b9b2,5d717861,d1af1c01,9c372941,c8968b90,ef134f9f,323215e1,bb0b2155)\n,S(183408d3,38b05aad,3521fcd8,6ef36dd7,5f3ddb86,66b52f7e,9a4cdf1f,8e152b91,66998520,6edf4ac6,f39be21f,20c98824,210e204c,e4499809,5de35537,1641218c)\n,S(283fec5d,b1145e53,ba8f1f0f,f9cf89a7,21faffd6,c2534686,3d395609,5f40374e,70b01237,74af550e,68e68e5f,65ca6e98,8846e03,cf39af77,8511be82,bc32fefe)\n,S(ce7570a,4f943cfa,413bd249,d8e7dbfc,ebc73579,770fd6da,f54a0dfb,dd52fa62,e115b14b,ef4695cf,fb85bdf9,8ba3985c,bd5e5b89,83e05390,7c36f9ce,8b75d41d)\n,S(7e9c4f19,c8f4ec3f,1269f648,cd919525,df790315,74cbeb15,37794a4c,838fd470,e9d9dbfe,8cf5f5cc,a855d6cc,bd11f480,60fafa8d,ad6bd3e9,c86df5ce,b0fa5270)\n,S(e2a9bbe6,d5d5bfe,a7c7f919,df2309f9,ba04f4c,722a3ec2,3bf451b4,64cb001b,e4177ce1,c3cd6ac7,78925bd6,7e72cb77,d1925b91,d06a7f16,98411a47,86393fb0)\n,S(504512a4,3e17ef50,e43bf37d,42a94990,f55e641b,1558c265,e7099002,75271012,954a5fd8,57ba3acf,2d4b1f41,e8e1f2cd,1f21c4b9,6899781b,742a49d2,e61ed18b)\n,S(81d1f013,a6bb325f,4b2d1d51,ba72c721,859945d8,a17b3411,cd5cbe87,285f850d,2d5d2fb1,f0c30855,3b1fe249,298b2059,259d3d49,d4d7071a,dce4bcc5,dc937193)\n,S(5b66c2df,c1d28266,18a87276,7e66c33d,d90dd514,14a3b87c,a733383d,1d895022,9bd0178e,38189569,2217267b,7407e987,27fcaeda,12d8cf54,49eb5472,d554e0ff)\n,S(aeb5f70e,98ec5e38,dbd2d544,bdbff8ab,99b583d9,af58c597,afaf8688,20381186,618bd6b0,d25ca70d,f08b7692,9336e421,691b0973,f2f5a05,2e7adc17,3584427b)\n,S(b289eff,e841943b,84761e3c,67a9c02a,557679ca,76ad753a,707a9821,2505052e,7a981f0,c21862a8,53b4f895,dc62482c,530ed738,5e5d1e33,cfb9d0f,e879992c)\n,S(abae3945,8b12199e,6b0c8360,cfd28288,3f585917,e44e1200,f81bd356,f619291c,adb23bcd,b3d069c5,e83be30b,2469b068,b2a81b7,b667e934,233b75ef,b5753f28)\n,S(4a9583a6,485b5a5a,81ac224a,518eb29d,1e0f658c,8d91b013,9419c809,55fbacaa,d8003c9e,e3c842f5,ede375a8,a7768db4,803ecf11,9b7b37de,cea15631,b4e8dbca)\n,S(d52f630e,dba6f7cb,65fcf465,44ab0d9e,ea236ac1,460f17ae,3a210102,10ebc169,21155748,9fa93b88,3e5bea50,da005c53,68e21a0c,41bc83d9,145c13e1,370d26d0)\n,S(bdc5237,82c75858,f5c50fc0,52e4c1e9,c74a2a63,35bca9bf,8d10e120,9add6a4d,abb1d9f8,74637668,e214efba,fbf529d3,12ff023b,c1d5723e,58540436,6834f189)\n,S(44770a33,8bf0aab8,3bb64e47,6eb6167a,88156d16,8f13ce86,26ee0912,e59ad087,5b5930f1,2e9c40bc,b3393a89,5c2d6457,6a3abd23,b7291b99,c965c33d,ef60a55c)\n,S(b15e7b32,2e404aee,319ac203,23e36672,6503108d,8ee8e1c8,3e32d924,515e1679,5246a819,bbfb291,5f82ed56,50796f50,5ced5c25,87347d57,a873ceaf,3d997e7a)\n,S(a1ed7557,5225cd0,f2c50f75,8a1c1df9,665ae108,d5e04190,27bbd9ae,ddb00f22,3c83145d,ad9f8748,7b97e746,4850ed02,d71dbd04,93281a1,3d212776,6a791ee2)\n,S(e8aaf361,6a1bc60f,d9bfc43c,2c60580f,479e9ec9,c23a37a2,3cf8afb3,1d918af5,6ce693b6,4a37c672,7e141041,ab9a0d58,9ab9c303,a5ac3d3e,c89b6f27,9e79827c)\n,S(5dc6f8cd,2c855e63,52a4a4ef,6187a6d6,759c043,38a3db76,c5a3aa37,54c20a3,f602c342,8593a9a8,d671d1bc,7c1d8834,fe9f5f5,2e6a7f0f,bb870146,4e6f4838)\n,S(63327311,67bed8af,68a063ef,22aa489c,f6563620,461af26a,5f1a07cb,6b42f3a6,b8f7c3b2,20701320,f20ca036,761d3e56,bf94a700,9a919f1a,3ea0cb81,b74424a6)\n,S(8a40d925,9a393b38,2305c201,7e8654db,ad66e50a,d798a0d3,535230f9,48080263,afb6a74d,9849454e,dd7f703a,5c6616d1,43f9cbcc,9a9a5d6f,6a7b5d1f,9d9fcaff)\n,S(e7147107,27c7420a,f517fd3f,9a05b7de,a6a02c8b,cc20b17d,cdfdeaf8,2078645a,da7d67cb,c1ede9d4,fedd5dcd,c96b04f9,a3561ba0,2581b055,eaa144eb,4217daca)\n,S(6131291c,d95fb878,1e42a68,553952c2,9922bce8,91c026c0,cae1f69c,9661c82d,160e1c1c,13342fd4,59d4f989,8ae632b8,42b89479,13733b89,384fc104,2d30bf01)\n,S(4bc4f845,b6764692,d0a9bfa8,1788809e,fc5e2aa9,da5003bf,b782bcf1,d1ca4951,87092dcb,b9c3d254,e3b055ff,3a76ec05,64c4a7c5,7fb1783c,efdc40fc,10b751f0)\n,S(45a880a2,7bbee9df,29f9bff5,c985f364,52865b5d,582a201f,698e6eca,a2be67df,fe49a6a8,b5e46bf1,ef679714,dabd590e,a831d46b,8ee94eb6,13132ba3,7855fabb)\n,S(6a826a38,317c0c86,64d6847a,220145d1,877e5495,b21500d3,f21f1a0d,4af4f2a4,4521954e,fcc98263,df2f14e0,e6e6b47a,f6b83f0b,bc20722c,15445f87,e05f4513)\n,S(15356506,f255f7e9,6cc8aa1b,9dce572,8bd860de,7c6cc75f,613e8a34,366a23a9,cd15abbc,d744d485,d5e401f,1f89a5df,122f37b4,e362b4ce,e3e53b1c,110bf3)\n,S(f3bc12ae,f53d9f5f,6b865178,2dac2ec,cacff3a5,cca6443a,2b5e1ca0,f2b89b91,cfd4d36b,eb2e11f2,41fd0f36,7a0737ad,303e915f,f247f131,368ca509,18e00957)\n,S(7e3c8c6d,fa04a536,f7a26ef1,8b387649,22320bef,58453373,6f728297,335c0fd4,72ea16b5,32a7336d,3332400b,303c0236,b6a1294d,88ce7fe9,15571284,d1f7c189)\n,S(198cbfcf,a0575fc2,c161c696,d85155fe,6943ab9b,d6e17223,d8844608,ad0369d8,d5e6268b,30952422,be59fe0e,fe7ba2e7,3215994,827a46c2,f2972b26,153cf7ae)\n,S(1e056e89,b68cf35a,22183c08,9089b90d,5a147caa,780b1fd6,3aeb1350,afb0e5e8,b8241453,abc44c57,ddad6ff3,86d416f4,3e258a39,c6f8837,9f80472b,943f32b9)\n,S(dc7ff974,8d827e7e,a6173b2f,1a646d47,d8108144,ce7f98fb,3fac729e,72faaa21,c1fdac5a,ef4c6f0f,fcb8e1c5,c4417c71,3e3d5f07,146daa1a,aaf2e7fe,e70c4914)\n,S(71b95efc,c4981e07,5354bc1,1cdfbc48,36b2eff0,bf8f8ec2,9a99da1b,2fd28e79,fd5a3197,6fad6aee,c304752c,c3ebbc51,1f3695b0,9a737fa3,af42cc6,efd684cc)\n,S(43854caf,29dc2bd6,c9f3e8ff,a25bba83,f6b96121,897044ae,6876883a,de542b3a,56365176,897632f,8dde3167,7a24f558,34c5c9a5,5c1cbf36,fd8b4480,3c9c6c81)\n,S(2adfe17,90e9f9c,708c9b73,d5fd084,b6eff990,fb877961,45c2ecf2,d427b222,b5ce3160,5d6dd9c6,22cae425,ccd28912,c4439820,c06950cd,4c86d9b4,53abd7ed)\n,S(a123452c,2b7eaf31,15b3a534,3b3ff31a,9f70c54,ae33c620,471e3e82,27a9d6f9,933d3483,78a71f44,3788194a,afc545e7,f53e37a6,f779f96e,8fa14ccd,ede3b4eb)\n,S(9b89a3c2,ca995a81,86c15217,61348737,aab166ae,7decca60,3d06e32c,cec0a6ab,2a7d3701,a8724b12,bd7c4830,224ac083,cbea83d0,543b5414,80ba8c8a,e7731232)\n,S(64dd7457,e7d9d739,8e2b9a0,dc45272b,384b0433,9ed8b2ed,c9079646,11e9e9b2,ea90f8aa,e214ee16,ed608a72,36699899,4e311dc7,780ef885,b29290c3,823c470e)\n,S(59227431,be607c6b,d327fd71,4eb71c87,20abba42,1c7f550a,6b35767d,6fa2176c,cb7571c4,71c5527,65bd289e,a3cf3f38,796da2b1,2c953d0b,8705125c,4861d598)\n,S(53d765cd,adb26e9e,1c80ddf1,99374363,843b7d08,a7237bdc,8c5106ef,795fe2c2,7bbbb198,eb39973b,76d87f81,94d45150,a66d4f3b,128a40be,c989a405,ad7c287b)\n,S(e507de9e,c16b3bf3,523a989c,f5ff6c1,452ee90,9b66ffc1,6d7b519a,57bb66af,a2f2f02a,8272de6e,3dc8b395,8959ad2,51b6d3d0,4c81952,59a501e2,8ff7892a)\n,S(16f48c6,eb84fb2,81903b8c,b9f60b7a,65601d76,e2a57983,5569c983,39b4a6f2,8613bb84,8398681d,66f1e75d,5b6ef44f,d827b629,f4956a4,41d8f503,dd32b289)\n,S(650471ae,774265e3,270b5132,33d12d85,bb98e38,2a3b3af9,cab6339,e1446056,838e7793,34aa6fe6,cae90a62,d359c339,187b4032,15d97cda,4e62724a,a5a50306)\n,S(15dea416,fa34584f,cc90e19d,69825fae,348d1ba1,fd7ac821,559aac2a,bc21dda8,1fcabf2,1e19ce68,ee12a3d2,84bd1304,10fa5f5,d45f9c15,d4070243,a8433047)\n,S(b42b2495,4f1f70ed,3db90087,8357ba46,ee9d6a07,b4f7c751,dc5cba07,b05b46e2,e15723eb,e0bdbe6,d6f28d6d,a0443c63,4851f5b4,c551bec6,9f9196a0,969ed71)\n,S(8e9e4f5,c6aeac31,1dab1125,dec9b460,6ab10b7e,8e250960,a17fc57f,c0230f83,ffb0e211,c79fbb79,78bd4e53,a05a267f,f1e32c34,d6287dee,64576d31,ab959ab2)\n,S(87be7323,73bd4b73,8627fb63,bd4d50bf,d6f2bb81,f804b528,29549fe9,3fe1ac2e,f6a9186f,f147b9b5,ffc844b2,ec0e255a,1ae5537d,75624288,ce8421f8,7e94e1a4)\n,S(43601d61,c8363874,85e9514a,b5c8924d,d2cfd466,af34ac95,2727e1,659d60f7,8791c000,7c09c94d,b328034b,88c5bbbc,11333536,6679eb09,9a5e75b5,83bc2c2a)\n,S(341b1580,f83071c5,365f0bcb,ba66af96,6902e394,2a2560ac,a0daafa3,2ab49d0d,4b985b13,c5499026,7ff564d2,d4649c6f,7e8fdbe1,ba101d94,1c034e14,64877b20)\n,S(175e7cb3,ce4a3a43,7c7181e2,c79fb154,33ac1aa8,e56492eb,57627171,f14dad95,31ce61a8,7834f52e,fcf8703f,93696f42,58130155,63ca5d9c,e92d8fc2,81135b0d)\n,S(5ad430cc,64e61c61,e3b3c848,2ca3ecac,89c1e495,4c80ba98,249e45c1,307165ad,bea2a060,505c13bc,317ca083,c5a8b85c,9ead5f6e,1ac23fbe,ac7cecea,9251c791)\n,S(41dce0d9,6dace318,988602df,7fa84c1,80f0ce3,dd7d09f2,8aefefa6,db8b837,74962c3f,ed9a6e9c,896635ea,855323b6,8850091,f84dee33,3cdff8d0,d2827928)\n,S(a5ef4498,87104dda,103c1dc2,52067643,9aed2d5e,432fe5b,a23cc142,39961bcc,1cbcf83e,a363e0d9,3e6ecc32,8653ba7a,a165c526,765b09f0,696b0d61,f122db3a)\n,S(4da26ece,9ad46003,38bdf68b,852a2cbe,18225f2e,2d6d5e62,6db57235,fb3a9d45,d10b5a63,7ab546bf,cc610e2d,1c3d61f4,61b0a806,e7ba29c7,3d3de909,e9fae659)\n,S(6e621e6f,53d2408e,488d8eb1,6a19a4f7,e9d95585,11e69111,29dedc69,f98f4763,7b148ef2,73e1b131,341ad477,9342c7bc,7b945a2c,b52c448e,4bb5fd50,3cea1a19)\n,S(ebaf5764,5bed7469,9b57ea75,8a395a90,66bae20a,8f082ab6,da4554d5,278be83b,5847f4e0,6c653033,5e29ea94,389ee3e6,d916314a,60126028,650ab9e0,bfcfbba7)\n,S(c0f88a71,711b632d,24b55dbf,52b15d2,faa38ca1,1438c17a,6a6ff635,3310182f,2cbfad4d,16c07021,86611eec,408082fb,fb2e9898,141a5248,1c59e44e,cd0676ff)\n,S(5d9b6c18,84b79498,c6244fbf,262922c6,dc1cddb7,3cf70ae0,1b5287b0,5b5c6350,328e831d,2f2b162c,4abe1644,bb54cc85,18db178c,5b6ae97e,5e85110c,7d7fdf1d)\n,S(d1d1360f,37ed6e69,d4f214c6,323a53b7,e57d7595,55904016,654c49f0,4e02e21c,627eea93,c6c9b53f,94559414,40a8b100,6eba68d4,6c922b6a,1521f394,6dd15e4e)\n,S(efc987cb,f1023af5,58acfa18,97b1b2b2,ace29a83,65674703,e4969ccb,ee411731,195a6a65,d3790bec,71642986,3bcef432,e38242fc,9f565dbb,e159bc42,f5740c69)\n,S(f3026b97,163df3bd,61b88b78,73864480,968d1d7b,83ef6b01,31090faa,18284ff0,177c3a61,682363ab,bf281615,d59f06ff,5f87644c,84d670e9,a6c56ac1,b611509b)\n,S(5d34ff5f,123b5b69,92ac92c6,8c9cff46,deeecf9,68ff830b,5622090d,682c5873,2d1a0b9c,8eaba065,43204df1,48eb1618,25443efa,80f8aff3,d49b6626,c5955ac8)\n,S(cbf9ba17,94a95247,c39da065,84308cc8,e0ee591d,31a9b0bb,dac67280,468447f4,549b18c3,10feaea1,225fade,934112d3,4058101d,74f00538,1b82796a,d0461736)\n,S(920975ba,9e2261b,bf5982a6,b57a7344,8e7747b8,368d7a53,79acacd4,c7dcd31f,e95e0508,81af550d,9221f5a,e9541031,6367d24b,d545bdcb,434e7638,acb46dbd)\n,S(815b2ae4,6fdcb55d,926cdce8,2b4f25d0,39132312,3bc180ff,33fcf132,7eeca64,62f637c6,7d886374,8f1e2e26,865118b9,99285b87,55f25512,c968b4fe,49b8c971)\n,S(1bb9a6c2,8e28d4ba,30ea8639,7a4d387e,27ca8025,da231926,de3c454,f7e0b16e,a0cbc016,5e32171c,8184265e,ac7e0147,206349d5,41035a94,f56efc49,dcd7ab93)\n,S(6f0153fe,dffd83ea,b099d29d,dde278f1,9c05a4ba,78eb4c3d,34d337c6,da68bc22,a532d00d,35013f85,9f4041d3,aa231f2b,9fc49967,e0e2f82,4d5051f9,e7f0c626)\n,S(3454f73b,3bee77a4,d00d384,71bf555a,ed23e5e6,c6dae855,2e9cb7a9,1b20258a,92c20846,cfdf1e8f,3fe5bcaa,6bdedc3,9926833a,3f40d28f,23a8f952,d8d18dde)\n,S(367807c9,a3606b4e,1b8c2616,ad528030,1dfcf686,40eddf02,fc59317c,230e9a86,1f023f2f,a2bbece7,3dba14c,124095cb,fdc4f92f,281a14,8304a412,c16ecae6)\n,S(8ec4fdc3,9891f6af,1374e06f,c44b815,1b82541,75fc4909,acba5941,201af62b,2dc6cae5,cac2d887,83dca0e5,3c798f8,fe067bcf,5fc29751,13756cf7,ef4e5f1b)\n#endif\n#if WINDOW_G > 10\n,S(5cc24a6d,4c5b24f9,14542f91,e5fa937f,ffa08551,51b8b842,8729b06a,9178a263,b1da8635,81531a1f,bfb38a4e,419fa1fe,ca8d55a8,3ddbcb98,da19d5cf,fb7da472)\n,S(83905926,c03905c3,a9644a6c,da810dd2,92602a50,50c52a21,9134fc4d,e3599e9f,4293260f,e8af6792,a20b115e,aa837638,9094298b,21d9de16,cf20e0c5,7a46089a)\n,S(944b097e,4721e9dd,f8204ac3,d3878fa,e8fa6c14,34ae4822,481b2985,6589b6c7,5fc47565,30e9b095,f8b79643,1e745b99,1525bd4c,4764e8e,e8af4b96,9bd6ddf6)\n,S(ab0b4a3f,cfb7c134,e1caaf04,a63a7331,17327a1e,5fa90301,7b5ebbf,3423b73d,e1e79263,a5bbba8a,cd78c92c,faeccd3a,b84944d3,785c0781,3763bf1a,ce96c9da)\n,S(57a344b5,220f2b0e,f7bf7fbf,5a2e4e7,1aa2c3d8,7bf090bc,f803dfee,fe8b85f,f82b7d0e,8ef9620,e48c9f13,53a72a95,a9e11a3c,1678cf10,576e639b,b1a7d04e)\n,S(6e053e1a,800b7c4c,51f8c4c9,5cf0f4ff,3608e396,ec46188d,a1a9263f,c8d81ac5,86389e98,e3c823c9,e1b5384f,fce428c3,62e36579,7202fdba,dc3d8c49,395e7473)\n,S(62d76406,1804717f,b30d4a7c,7567b545,48a289ec,7f083f1c,59deae25,ce485cb7,f1d6314b,661d1f8d,8531d57b,9470fb53,d1509b2d,a626a0fc,4cafc941,b668be84)\n,S(e5db28f2,219fb2aa,830cf108,bd2449a,5c4d0800,82d34658,9e347f31,dd29250f,c296e646,32f97dd5,ba3b7012,ead44b6f,324fcfd2,f35f8b24,8e58fe68,888bd453)\n,S(4725b3e9,a3d00de4,8a53177c,9fff831f,733ec89b,c2994ab2,3fe815f1,9b32729,ac3b7747,de38c00f,145fdb74,1482bb52,324127cd,2979ee12,d4a9e689,b9f8e778)\n,S(d0d3afb6,492c72e7,394ed918,7013e347,b036b65e,a76e0569,bbe9e346,41d72b3e,2dd3a45b,94aafe07,53061caa,a28560,bd952b0b,2f63f13,96f42fb7,8e02fef3)\n,S(7853e735,d717c857,97b85654,a24acff3,104143ed,cf4b4b4c,7869068f,c304632c,a873d9,e70fd14a,c2777a8f,b5a02922,bae3a31a,14938e69,cb535355,de1efadd)\n,S(6db26b3,7d4fdc59,13a1a01a,14c92356,ee44e2c9,7f9d72ca,7789de33,8ee904a4,14fe2225,bf2ba0cc,28c1c409,e9849c4a,d8adf792,63869b68,54a28ae9,631941fb)\n,S(b52f0869,bb98af3c,b2f7f5c,669fa43e,538e400f,63a9cce6,99aa2ef8,eb2848df,24566b24,55bc454a,e7b378cc,a0e57b6a,8b821c8c,a76fb858,bb616e17,8907be5a)\n,S(8614dde1,1ee6af03,eb34a9e9,970fa7c3,234152c0,1384f7e4,c1e1f93a,197b448,2a1125a2,ac996870,2ba22b5a,d230c40e,4e5c7e55,d8ba6ba1,5e54d3cc,7b72f3cc)\n,S(982a37ae,625f6e5b,78e71c18,f20bdd0,8b3308eb,59d0cab2,dbc20937,938c1cfa,671fe16f,a65128,591249e2,b5070bf,2a689e2b,dd6c57dc,18e5309a,b6a40d0c)\n,S(6bea9305,26b4829c,ec99742f,c9231c00,627a09af,22ca9d9b,4081a2fd,4c3e703a,aec5402a,54517b4c,1f344d14,b1943e69,d7541f10,c45bd483,2b02b059,499a6cc1)\n,S(b5724781,8694487e,7cc188b3,36d116b0,54016a99,20731920,ba7bd29,96583edb,5cbbd186,1f80a4bd,3d58262d,ebc58ffd,1d278fb3,b4d7fec6,208f6286,77845cdc)\n,S(de1ade62,7ba00e91,786f4f53,18ac5392,4df5a534,704edbb6,2e0e9e2d,997c5412,7ef486c5,bf23bfb,fc6dc15a,41c0673f,a9d003e6,e1d09a8e,4bffee9d,ae2021e0)\n,S(3738a57c,b1721c41,9f9e465d,fb80e1d7,33720398,bc01166d,d476d36f,3398c0a0,e1f25bb2,1662b16d,6d28a629,ad84385a,43df566c,52924bfd,11854a78,b70c22f5)\n,S(4cae21c1,6b2a1239,a85575f1,2ddf6daa,1955feb8,b7502e37,6940006e,7a81885d,2affe855,388660d8,27671e89,c82832b2,25fa2c9b,29d559e2,37af565c,b4dc99c3)\n,S(4c511a1f,ba8a0be3,6e37cf55,85bcc3a7,97bfa7ee,1baa6039,5732faf8,dcc2bd7b,ea69f794,5c6babff,23400fd4,a95d6833,abb27269,887c372d,8a6a45ca,b25651af)\n,S(d811d8c4,323b4370,2607c25a,de936c0a,c2e4a44b,2ba51f83,20c5179e,745a7e29,6ff970a2,17bf47f8,da0aeab,cb490e3b,46c6df3f,69f9e93c,3c4dd94a,e7c05345)\n,S(101eb5d3,b5e5aaff,e39bbafd,f13b5ffa,33db68ae,1fb09b0b,1cae25e6,16c43eee,9d6a5514,9867725a,607a1c96,eb03120c,a4970939,34e0cf4a,1631a63a,bac5ddb3)\n,S(89eb1152,b8dde45f,e141f21f,62fead1,ecdc7f70,eff8f968,de21cf8b,72480519,f8a337c4,3181e3d5,69ec99d7,f2bc4770,cb6703a8,63fbd95b,41fdb07c,b697b447)\n,S(53d633f3,f48ea44d,273d8f1e,455019a9,49d95eeb,68de70cd,bd1e964d,9ad0dc16,1b26ed76,964dcf1b,3f7fe6f3,2e6db7e6,8e8ff4ee,48fe63af,48ffd33b,cd1645fe)\n,S(de106910,49891106,59a94d26,b9cedb64,6ce3db4b,8398ad1a,92f8f95f,d8d9be6a,87640b41,dbd99d16,578a3d06,d23d4088,8768a4e6,dcf83e7b,5b9d9133,5eb43d32)\n,S(40ed1e6f,b9ee245,ac189a9a,7809da10,cc6daa7b,41a163ca,f761773c,6af5bea2,ffed1501,7298fb9a,78eb7bdf,1430ac04,82bae82e,a7197adb,50bcc1e1,fc217b2e)\n,S(55faaaee,59a20b9a,3784d171,9ea529cc,1b7ab3a3,29f26dfa,a3b11bd6,67ba15c1,a9f8939b,52ac53e3,5ed4771d,8e47065c,d7f2805,a7e5475c,37353ddf,182f4a65)\n,S(b51de64e,21cf88af,2180ca17,24956d10,a95ac607,f034fccb,a53bd02b,fa8af3fb,175d9b70,1c652ebf,46b99f1f,6e66c4a6,9b840019,a48b1ac4,878b386c,3b7f81e)\n,S(5156b0dc,bcd91e82,4bb235be,9367cf40,7b8927e8,cd874171,556f997b,7b07b143,1d457c0f,a29d4c3f,e65ded19,1127016d,d40ada90,cbb0d8de,c2af4bf8,20cc91dc)\n,S(3bf51d72,60b4973,161fac55,88e441a7,f1993c06,791b6bcd,e11d8e,96dd63d,7bc6b470,90a7afdb,fc63905d,df698499,73e1e4e2,af74f126,63eae8a4,f4722d49)\n,S(d2971091,20088102,1154f4d3,ba6f2da1,22fa74c6,4faae05a,d76db7b0,9ad61fe5,7350ebaa,f2ccf3c8,f940cc14,151c23c2,bc33cb73,65528156,92648f6b,628e3fc8)\n,S(c2ee47ca,8e17112f,a255a520,21ffd30b,6d7a3b7e,2341526c,559b60a9,c768013d,2e6e8b6b,d83b7f5b,1dc8e83b,edb3b23a,80d9ff08,2029831a,45305016,2bece448)\n,S(559998d6,9ddcce0d,9e0da39e,96cc4c00,c5ef444b,561dbaaa,e475adbd,3e70b6cf,c49c2a00,95aeee5b,8deb5e8c,db4d21e4,cf0f3173,1af2fac5,25c534c2,34ffb328)\n,S(4b4b02c3,e4c8badd,e45305c3,9721a98d,7c1955dd,90dcb2f9,e9d54901,6bbaf363,a0b67b7e,be8f59b3,c25d546e,3dc304d,d22a6a64,615bcfb9,25b685e3,18d43468)\n,S(fbafe7fd,7836b427,51cf897c,5d42897c,7650ade8,ee1ed01f,e0d7dd2c,aac549c5,2f511943,52d07e51,7b7841f5,8eda5225,229a7e28,9a453aeb,5e70110e,12668436)\n,S(ccd306f9,c65b8a0,7884e620,b73ac4e6,81b21bd0,2a4b219f,954de1b6,7076c06c,823fa47f,a7b0b50c,907056dc,73e04574,3f68a7,5a4c8566,8ab5f5b1,5657510b)\n,S(bafbd838,995a691d,3b5a870a,7847452d,9124155d,d89a9980,820b8d56,18195a3b,8df4c9fa,c94829ee,fb0e7f52,1020b5b0,4f05f4d5,839c8687,4e893e7d,8ad92a3)\n,S(d125cc3a,8073156e,a166af8,ff940a64,713d8f37,b86919fb,157cc380,224f458f,a030e8b6,ac4e37a7,df01054a,ea23a78e,1bb7a22e,f26052a3,a034ecbc,bc35abde)\n,S(7d491f28,1b5ddaba,ef2c6433,be22e42d,f2d1bbfd,8a7e8866,8cbf278e,cb8187c2,ca18161d,70360966,ca381ea3,f760b2fe,28b040c7,ebc82af9,bea27ba6,f4dfe8ed)\n,S(31ccda33,9f29123a,86c2995c,6a9f4979,6d70a595,5079b961,6015f07b,cdf8c39e,aeb27d0b,edf61fac,99528a9f,f060d1f2,376626b0,bc807a19,561c2e4f,e8b49f65)\n,S(79e64c7,f45f9189,6c92073e,71b76fb1,e5ec912f,de11ba7,d7439f4a,297807ba,57d93436,b354963c,5891abe3,825d89b4,d17685bc,c9632e7e,fe85ded7,5823c921)\n,S(d6232edf,fccb3868,71ef057b,60bda43f,69f422d2,debce06c,78a31f6a,8c42274e,13daefa0,b2e2e09d,36f472f2,29b5f7d1,58a18f63,ac3dc4d6,d62cc7d7,ec0ef826)\n,S(21c0f298,b2d6e3a5,3738fc00,c8289458,722d78d2,48a33ea6,a7ebb667,446e368e,867553ec,17d2fd95,b895eede,15da569e,cbb3f25a,e5f334a2,b20660df,df062383)\n,S(1d1a3d01,dcbf799,d551621c,54f74720,eaa2311c,3fd9b1d0,f4f2caee,4c3196c8,d5a7a115,9900f90c,879b1a30,13945d8c,5453bf1c,7e5e33d,6f8faeae,439734eb)\n,S(57488680,8fa99ede,ca97d1,8582a151,62e26d5c,7753a561,4f4bb1dc,28e76735,debda859,7117ede0,dcc0ecc5,4ec1a494,b3bbee34,95db2b1e,ebaa1db9,2fc17c6f)\n,S(b6dd34d3,4ce1dffa,4e1e820c,4c8bde9f,607194d3,1c1ce07c,9f6fadc8,9791715a,8bf48868,e405d533,2adc0ec9,49bc7cf,1487e554,3a043200,71786521,8a39cc9d)\n,S(90f9ded5,69088772,ca2bc887,1522df9b,5821df6c,9e20b160,f3504bd,4a91d0de,d17e64a,dd534a6e,fdd0af26,b4494339,f76b3c1b,126397f9,a2beba76,eaf902ac)\n,S(c55f34e8,58d19353,9106e4a0,c3002873,db07b239,9b10299d,260acc65,6b2cfa59,7d9f38d4,74b5a22e,72949f7f,e2cefb34,9a8fe1fb,c16b8dda,11f162de,30e50f5b)\n,S(6ae44192,d38981c5,9b3f8452,c4a2b627,f39c16d2,b6f52575,c5f1722,56b8ecad,9bbba8dd,7c49204a,9edc4b91,e38e4973,fa61de1c,eda6ad61,603d9715,7f0b099d)\n,S(33a7d639,423e1b36,6a93ad99,eab6444c,bd0c251f,6cd8b79a,e0344eef,6fdcffbc,c26112cc,6dca2a,fa52684f,c9ed22d3,2f067891,d5bac2c0,2bb86e3b,9411c61e)\n,S(48471331,eac48670,28fa6642,a76ca6c5,3380c1d9,f52a4b2,ea640d47,f159af0a,b4ea8546,93fde01c,fb903a31,18bb61f5,c5047b94,705a714d,5b586d47,a0142704)\n,S(565ac39,9ae731c0,4cffaab7,43d24b71,72defd79,beb8ce86,d46012a5,c2587917,deb56aa5,d45031ea,fc411fec,e09a9646,14664989,fd4f40d7,79c02981,98bbab48)\n,S(964838b5,3b6c2b7d,6a8d017d,c5a32fc,99549094,6dcbf773,eaa7085c,98314c0b,2daf9f3c,ec44034f,c8a71ee0,ee76bd77,ac6fdc9e,fa042a2f,6caf9c5e,fd130b97)\n,S(bc00da90,7b8d078b,9d83522d,ae548b14,6f9bff0d,2ef887c,4aae2f1e,c4eb88d5,6bd0fd11,f9e2db73,65f21dd1,34cb29f6,fef4d7f,b419abef,eafe15a4,20ddb152)\n,S(1a59f855,f89f0c,f13dd8ae,9f5e550c,a2082bb3,27fb111d,75455ab,dba7bea4,7ea2fb40,d460adff,c9e25c53,a65c508,e77e6e76,e2e435c2,150c870a,7600c823)\n,S(7a3b611b,d3bffc6a,d4508162,45695024,452706a3,279a6fda,d88598a5,4eccc764,16e09589,68066e52,c873d6ef,e549d3aa,83d30bd6,a1d730d3,68aa1ad2,32233145)\n,S(2fed5577,9cbe0a5a,786fa95b,5c56e27a,a0a1cc28,51112bef,4cd5e1b7,15d6d91,7eeacc27,b2297fb5,63d691fa,36dc650a,f66fd3e6,6fe5e637,9959d46e,2d4bddfa)\n,S(267ad217,952edf65,673efaea,6bebb44b,18326dd,f1b36d02,f0154a0d,774a9558,77593cc0,7e9d5e5e,688a7b33,bf54a01,703cc9b7,a0485e6d,907515bb,11a13fef)\n,S(eb6ed62c,239b99c8,6978ccec,a5f32145,e0d341b,ca7eab10,6fa05ee1,7f6687e8,ad899e22,50f6a8e8,ce29b225,83ad8755,2a6e6ab8,9061d33b,6629fbfc,52c0a241)\n,S(ca5cf17c,e03d214f,b4ef33c,41686c4f,5087a59b,f88ca7b1,891094d,430a9e5b,17e44eeb,473f75ba,cffae683,c8ea0299,e1935180,7257803e,f9963ad3,d0989ce9)\n,S(4c7bc29c,acf0642e,63f035ec,a93e6b6c,c82f21cf,46623a2f,e4c7215e,51e82f7c,7c55e76e,8756796c,143f64e7,e40a402b,eb537be4,f1f5322,e59d2be2,82776875)\n,S(57cab8e9,b42289f0,503e5013,acf4dd7,79783184,2389fd20,80b61bc3,671058e3,78225318,6671273d,a7b0b884,e72e9bee,2b048c45,9430d2ca,7c398aaa,9fd9e2bc)\n,S(3c2bf23d,f1120c34,de813a82,a56843f5,abf3d272,ed2e6c27,53ff6310,9bc4823e,1759db63,88aed233,ce0c5b47,ec9dcb88,76740928,e12fe9d0,d08eb759,2d3f1990)\n,S(c010a9ac,83e0742a,d3348dc,3dcfddd2,34170aa2,28d36856,d8581b1a,eab38d2,634c97ed,644a68f,e1f1da1f,190cf920,2b2dc810,446b78ea,9cd27684,3c76aafd)\n,S(a4abd9ee,548ba468,e4cb632,b3d9c8a9,4f1b773f,ba3a9660,5504593a,92071994,3a14266a,ba263297,fc6ab00a,8403565d,c9390b48,ebffcb61,11b5e8ef,c8f87182)\n,S(dc02c852,efc115f1,c5c08540,deceffe5,d68b82e5,99b78711,5a7a333d,e8dda172,e4e6593a,8e1ae842,ca7f4eae,d8cccaa2,8a35f8dc,cb8549ba,2367faf5,5f6c29c6)\n,S(ee4769e8,223822ff,c28a5a4b,5f29fd7c,a54fc81,72175cac,1b6db5a2,91ec57c8,fca2c6bc,4076c8eb,a0978b9a,2b0158c4,33890514,28094619,38413fe6,c020385f)\n,S(f3006c1d,34910c0f,d435a6de,cf088c38,2cf990cf,3124f2ab,b11d2727,d93ef066,7629f5,aa367f51,a29ebaf1,235cf267,f8016a6c,88dfcd9b,82d36904,c949eae2)\n,S(7cfb203d,7bf5669,129f0a3e,325c3fd6,b1b9c804,4932f0f3,794b9357,1e7313b7,4f76b9fd,24339c38,c88c4217,387b016d,e4ae08fe,67182d39,82a45bb4,e82bc60f)\n,S(cca3ce0,36e00993,9d30be8,e70455ad,efeabe71,83aeb206,a324d0eb,32312c0a,9674ae58,fe947c6d,34c63725,2058c88c,91b437dd,98da58b2,efd7e8d,1615b9e5)\n,S(9fb64148,81cd5c27,82da071c,1f98d71,d9815fd2,2389d212,c66ace66,ab0d9c8,4c25454,1a513742,5f75e515,c04f1c73,d11d5047,9c76b09b,ce23c13e,d1813251)\n,S(1dbbebf,3e3d459,10d39de2,32560b4d,eb5d2ad8,6aa1542,c2c070b6,51558b25,ec68e71c,2e94e490,4194753f,d7484ca1,940eae51,69831876,877b9ce7,2d0b9db1)\n,S(7751d219,92f47421,7742856b,4c84d41,5a890ee9,24185e21,5a210a3f,a46bb5f7,2915a9c5,b770c86c,edd32749,3f698c17,6371f6a1,4cac5a22,73a3c648,1b237fef)\n,S(39a849a0,5b189c3e,20782983,ecf664b1,e7b89c96,4e11d737,70797fca,ecf36a2d,d3e6f8f1,6191db06,be2274d1,56685895,48e69253,54f41114,f43b5ed1,13690c5)\n,S(67e56125,b29ced20,f9f95522,d412d67c,80e3d628,b8bfddea,768117cb,e79b25bb,608dfc15,7e3c23f4,4aa0fd88,3d02d293,3c83edcf,66ea57f,9167b712,8d03da21)\n,S(a51aeda,2f7d59d,d31eec20,e95839f6,ecdd01ef,529327bb,5cb229b7,b78f1525,704967df,93fb862b,3d38b18f,4c6818ab,6621c7d0,80d92cdd,1f0092c0,d7847903)\n,S(c980693e,73a1cb46,f5eb71b7,73b00389,f8bcb36f,fb489e7a,aae64c23,6ac1745d,bf3b808e,fe6b7efb,771853e5,6fbba6e8,b3b21fef,706bd4,274cc058,b6fae474)\n,S(c78df930,bcf54c1c,28e27aab,2975e9f3,94167bd2,948d4713,6b17a374,a1391a9,9a424f36,6d3a79be,55bb5e9a,283be1e0,163bfe22,1bc65e5e,318f0de,304d9ae7)\n,S(9a75f7bc,c6d2f3a9,e6168ebc,8f7f1e50,a998b1e4,e67316e5,fb242fc4,6d284089,cb478e6,dff8b9aa,3ad06c6e,8fc7e35a,39bf6ec3,787977bf,d40f3159,bf169e01)\n,S(76b2131a,db0bb3e7,db48277d,95ce73e4,7eba1e7c,b6f801c0,d20b71a3,8b6e6224,32e3cda,ef60e55b,a9e36e6,cd287737,196c5af8,120c47b2,f79d2492,9979263a)\n,S(21898361,4ec5971d,f55f96c9,3da89483,cdcc4c46,deb8de68,f32a42b3,5c1384e1,2c396c50,44a4953a,b22a2d22,47769741,c5eda54a,d9c9ac97,d6486b5f,126dac3e)\n,S(ac0b0a49,4e9d180d,101dbe1c,a528fecb,a08449a6,cf5d82a9,aa14f875,e3db8adc,26d1d412,25a1b583,2dd53b9c,56a6a8e8,371dd19f,31462dd9,b2aefe3e,70412554)\n,S(f869b58c,851a65f,bd6d3329,75f596a2,9d1a78cd,bbf04a1b,6dca6c27,30e04625,40dee344,fc6f5c72,c18b1603,e149949c,a0cfb31b,b8b91b09,c3cbabb0,c6a5bff0)\n,S(f74f02db,2406250f,8984a5f2,273c63ed,a640a43a,8e7d72aa,ecf78d6e,b9544c3a,882e3a6d,cacc1e92,8a3c1a61,85f2bcf1,5e364f7a,1eeeaaea,1c0af593,cf86185b)\n,S(c0613eb6,1d6755eb,2ebc9284,a0aa69d2,88c39050,4b7e869f,f3d943aa,67ea65d,72f61ae5,27b5c82e,4afa8966,55d9289d,29931c1b,f0d36c09,fe4213c5,27848cba)\n,S(eb66ff98,60ba08a6,3c0fd8c4,7117aeb0,ae0dbf63,524307a7,eb739f08,f31285db,c3142ca,54bcf2ae,8b05dfb9,4e40f4ba,7d3662f3,774e616,55c7515a,87ddc5d5)\n,S(3a7108e6,a1256061,fc25d58b,ca534602,e41c6b15,156c15b8,71a516f0,ec4a861d,daae2d02,41cabb2,191b5be,c17e7e88,957bfcd7,66df1226,a183064e,3c4393a6)\n,S(d17e3a58,c83169d1,33ee7371,7b205f2c,ea1a2ff3,4e744958,949e9403,b8f89d5f,98c35f7d,69e5d98b,920ffafa,6d15d349,2d75fcb9,81ca5022,5ac7ff32,618b1a20)\n,S(d6e32892,cefbb8ed,14350cbf,2618e2fe,98caf6d4,f7679385,fff36bab,bf6541c,7175462e,be0f5ec0,7872b55,356f2498,976196bc,edbe021e,8081ebd,b2636298)\n,S(318d49ff,60e900ae,6e8e2182,f38ec006,82ddc8ae,93aa6291,86d5ddf8,affef75,6e97ec27,dd7d614d,c1ed4fd8,fdf6aa70,8dcc3eb,be288831,a9888166,66333b2)\n,S(fd6f9e30,1772db8b,a68ea5ae,b585abbd,c075e72b,68d6f67c,5a2f8144,98cf6346,dadd16e7,64775bd5,ca5c5f51,35843556,d7608230,aaff4125,4d4eab38,1d28d2c0)\n,S(8fe25b38,a2c74761,a90ed08d,4bce768c,f074282a,e9560d31,566ae43a,182ddd36,6ee1e84a,77c6ab78,a2cda1b3,2fbdfe2e,51d66843,271d15c7,3f8e1a82,1e4c23a2)\n,S(37cf0ed2,88ed8fef,4ae17bcf,f6bfb815,3e12bab2,a46d7e5d,2e6feb99,9793bef8,92e7a57,18eb0751,c99254f4,ddb5c278,e17a417b,21793339,119a146d,bbe3e0d3)\n,S(688c2061,6b9d0c8,76deb812,b60000e8,eca0e04f,531ed1e0,9158442,7bf403c,bab4b2ba,41ba4d53,df512e76,32200bdc,11d8583,f2ceb5bd,a8b7eb14,5ccc01fe)\n,S(4b4caaaa,f5399535,d822371d,63965216,d1b53584,d89a84e9,d868395a,70b3d804,3ddd27af,cd18049a,3b01d043,7761e4ea,652fbd91,115c470a,e4c7bd40,51ee73d2)\n,S(6f5acbc4,4135da60,758ed9a5,18b39b5f,47cca398,24e20e56,1444dd52,e2fa1d2e,5dc9d46,e5f6d94d,48af2efc,2f197a2,f729f1d7,335fa569,524d37c,4acd58c4)\n,S(79d2d449,3dffcb91,6fda527b,f8b6b622,661d6f23,738288c6,ce94313d,c267fc42,b2683bf1,3fa8f7fc,be302823,dfbc9153,8d902791,d5d6dde1,d2805f37,a0c08db)\n,S(33a8e87e,246b7b9c,9c77a6b0,7cc67d41,f3915dbc,2180118,c0800b33,f9f95524,baa8244c,584fd05f,2655e36b,e2e5c459,207d30ef,dcdb2294,70b34333,9d16ff8f)\n,S(9a169132,f3887df8,20561a7a,e4bd5461,3235ddb2,fba7a19,3f4daaba,79868e95,686fc317,995446c4,42945216,1a96595a,a233b100,e5f8bbc0,71990229,44630bcd)\n,S(790b74f4,8405ce3f,9abdc7e9,439f2f5,c859989e,2ca5e6fc,29046104,8783ac42,8961c913,562385ca,990593a3,77111a5d,1dc6762b,b1a928a6,6ebb304b,8a24a701)\n,S(e2a3d0cf,ae1fc2d9,87caaeb6,9f32fcd6,95471785,f524e438,b5487aa3,72f9e49c,9cc24205,ecf2708c,357edb54,308ce452,11f7dc03,98fb48db,4982d337,14c93046)\n,S(cb30c43,5992c195,76d372b1,96f2ae68,cfd2653e,63e3ba7a,2b3c21ec,960bcbea,f65735b9,708338c9,acc9cba1,4b491b8a,fb683058,266a483d,4987cdd3,89ccd0b4)\n,S(1faedc95,d6310bee,6298ffb1,6fb3e6a3,296ca66b,7c995d2d,fe924381,10e8b46a,35039e3f,8201e904,e5378d03,2bd8b766,26d9f0ce,4425d2ce,e7bbd24f,b8725089)\n,S(a646cf5a,2be8c1d1,3f05410c,ed51b3f5,8e93ea53,1e28bf31,8f6c750b,52b3e8f9,58c58ecb,7727a920,b47a7e78,e1e51d11,e427d7e4,465429bd,a01f4650,a4c102bb)\n,S(32734727,18537d38,e9b8c397,a5cc322d,1c77c0c6,15eded39,dcebc020,debe2205,c2debc89,58c3f60b,d4c7b072,d475a7d5,c1ea784b,c3e532bb,72c02490,9a42d65)\n,S(16a1a718,855a212,c068c095,d930a270,9906dd22,e7db3f4d,4ce2f393,d572827e,d389d64b,b30ba9eb,6ce80335,cbe8f7dd,b1ef3016,a8b74660,2196b724,d115605c)\n,S(b4bf4d14,5de25571,33694b86,76166e90,eeb1ebf8,4a7402e9,a61af4cf,23687596,49db20a4,d82397e5,6318640a,6b605e96,37d38961,a58ae3db,fac2fc11,bbd11242)\n,S(d4ed67a9,ccf4665e,418a0de0,8d9380cb,fc311413,e90a964b,bf367b9b,b892630,8ff7e57c,e79a0883,1fe8a972,92493764,7472b77,61b055fa,37105d18,b51df131)\n,S(8ad256f1,9f413ef2,eae906f,c1c2ca4,44d5dfdc,f916d366,b32f1f47,f54fe70d,bdeeeb41,8d2c4dc5,82547f65,91c97219,34778f5e,d25eff4,94e243ed,a6d34da7)\n,S(8dd3e2fa,fe55b5f1,f13723e0,1a5587b9,c67d22ee,21f1f62f,7f62a15,31f17f8e,aa23d2a4,7d6b717e,55d7c6b6,5d9c46c6,8f2db41c,ba66960b,4b4bf93f,5fc88cb0)\n,S(44fd9e28,2a8e30af,ac34db01,a7b0e939,3c13917,554d9a67,8e577a5d,4b3d0f6,cb079061,353319b3,a1669d59,295bdbe2,18927d06,ccb1290e,4840cc16,911a61d0)\n,S(5d249a02,4464ed65,831d2aa9,c9645f46,2db7c9f4,e5a46477,746b1a71,88b7aa42,2bff7386,527d6b5c,2c595f80,e08b4d20,23bb8dfb,f294da12,b54f8b14,77281d0)\n,S(d98eb458,1edcd51d,465e123c,d891c481,ddd18b54,b9408ca,85ac47c8,e10fb23,15bfd3be,d3756ac6,f2f1f9e6,f254c9b,2b153717,1b265081,6a2cc21b,78b4dcf2)\n,S(2f12c369,19a2aeb6,2132134d,2e85150f,6edb486e,9d672eb5,876804d6,44db6082,c0111edd,3b4d28c4,edd264b8,dc2bd0e3,20834dc7,bda82dd0,827133c5,7f8cf73b)\n,S(4d949684,7099c9f8,421d35df,ebce57aa,71326034,8f07e3e6,f03017c3,144b4624,9afb5a57,d71369c7,28db308f,b8b07da0,b91f954d,b182eadb,126b1fff,ddb673da)\n,S(cf1db910,5e95f1c8,e360b39a,752ab17e,fca8f24,d9ddc8b2,a9768700,e2af2466,e7c99f66,c49c8674,a6c1b94b,4b964019,5e645ca7,b3d2e004,ad8dc73,f647ca5f)\n,S(e71eb425,7d2ffa8a,b79d63a2,42c67585,d4b1747f,5b27f22,a9ee4284,6aa62b85,a906aeec,f901a376,7d721f45,da53e342,3bc0a779,870e33c3,d10f6426,6a2c8865)\n,S(bcd987d3,b2575f4,3bc5c3e1,b4a299bf,21c58b6c,a27ebb21,8f9882ab,30559887,403804c9,4339ae27,2bafd894,e63a4eb4,690c1b4c,9289db00,761e9b3a,1d483f65)\n,S(b74d5cf7,48af7162,395d2d5e,8a69f740,7a2bebba,69564042,ea9c7e34,b1f8cab0,b5c5fddb,332bfb59,835e9a23,4afa4543,5728dfaa,7dcfca3e,a3c57deb,e849b336)\n,S(46f3def5,9835c9ae,1a7b3b13,a920bea9,e9bc12ee,633b3edc,57251b72,3560837d,587b2e1f,2e8eb9cb,37aa6977,870214ec,818fb71c,1035eeca,91d53e68,150ce67b)\n,S(8d3418fd,eb3f0968,de51f4d7,cbb60299,a50ceba4,1915d8b6,5774cfb7,7667d572,cee79910,16a28462,aa9da7c0,f67b4c7,e8b3dd38,f4b2203,9d05115a,ac661db8)\n,S(98cb0f09,4510695d,78a0a672,eb67253a,30f4327b,7864fbcf,529cf212,ad6f7c10,25952dac,4e1b5035,9b47e9b5,52852d1f,300fde75,a6bd532f,9fd56af,2a0ab333)\n,S(96045e4c,ca075fc,4a5383f3,f03de105,a34c7c4c,b030ceff,b58b98e1,2b39a3cf,f527b8fd,92234151,ba11f24f,7bd5dfed,6ebd03e3,a5048c6e,8f2d5231,7201bafe)\n,S(f262e891,42addef8,cba26a9c,ad779761,c3f4b3e5,5990a93e,703bf56a,99cc6030,275cc764,86c86a90,f597dd6,7092ecff,5382c7b7,33939ca1,d1f3218d,6f0b594b)\n,S(cd79c02,ee175336,5f9f7900,be51bb2b,ad75ef81,3c6c5634,7cc717db,156d17fe,b5ebe8ff,b30de5bd,a5326044,16abbae1,4ff9198e,b491794a,c4500031,947a985d)\n,S(28b4bf22,5b1d40dd,e0122e03,e630830a,d9ba4629,cc51c9d2,80a225f9,48f858f4,24756189,98bb414d,4a534c6b,e300297b,aadf4ffc,b10e6795,4ea36e25,2cf3cac0)\n,S(f018f206,7dd55df3,9c53344b,c6128a5f,cc765c36,c7b0bea0,16c8465c,c6ed2ff7,d9fc5ab2,cd619d4a,c66c1cd2,251504cc,cda34a76,86c5661a,960a00f8,e4aa7e66)\n,S(496968cf,8086d02,9a5dd5c7,4f47cbda,7f661ef1,488b3942,18ed886c,424a7a13,d7d8df98,442060e0,f17a363,579c6600,360b5124,2774e2df,c8d4b787,1e1874e7)\n,S(242d4c59,e9113b77,68e48574,93600da7,b984355c,a1d07949,8921016b,22efedab,470dcfd7,b0c8c2ed,63a28074,a505573b,42f50920,6b0ae577,27a8b796,7a0f42b1)\n,S(b6b804cc,1a1a59d3,84c4afac,c5e5050f,466280bc,d5ab1586,1d20f4dd,1385e8c7,2f789346,2a636a9,9ba2a1d2,32829f41,39b57967,bb26d0c,898798bb,6521d439)\n,S(dc30a3d0,7ecc5fdd,38b8048a,f281024b,46904b2d,2a4c51ca,d1b49b7,1d918a4e,326409b0,70550e97,58f53698,7936a54a,b701f7b6,78a7d10f,ebb511a6,c18cc917)\n,S(e1fe434d,345bf330,83abb628,f4f44ac,5fb22934,977813c2,c015f2b,43d3fab8,1b251ca5,2af897ac,4c08df48,ce3d1607,d3b31b2c,2dcd7f7a,59a95b07,774c4d83)\n,S(a8ed88da,e08ac5e2,afbe4a40,ee775645,82c2f513,cfd72060,bd1fd5d1,76fb8d08,f4fb60b0,74419630,fbaf5b53,717b2a6f,5cc2d98f,1d29481b,77b1f9f3,84175729)\n,S(b52cf828,de1e9cd7,c95c083e,ec50d228,8e770713,a0e2543f,76fa5790,2c7c6481,635a3953,46fbbf,903dc729,d3e3b52b,43eebdc5,3748ed83,3c95eaf7,1b75790f)\n,S(702079ae,f76d9bfd,ccb957a9,4aad93fc,b1297c54,d634978e,4dc78292,161d5e83,4983c08b,f2d81c52,d3b3a202,e0c6ddb9,32a43a45,c4b95f82,c8c10642,5a783b52)\n,S(4638d4d1,8e9de1ce,ef4fe8cb,db4378e2,3ed3dcb9,513cc9a0,dd73ee2e,be57bbf5,561ee032,45cc3066,968853f7,51fa36be,cb50740,a5951e87,cf77ef20,cb27e110)\n,S(eeb34eb7,5facadde,d561dc5e,e3d0a039,d98e4880,910439cb,ecfb22d9,3b386bfc,f2b23cff,5ebdc8c,558db8c,1c311a94,e9d8f63a,d1cf4af4,c21c2349,a6e57c4c)\n,S(7f2c6e5,becf3213,c1d07df0,cfbe8e39,f70a8c64,3df7575e,5c56859e,c52c45ca,950499c0,19719dae,fda0424,8d851e52,cf9d66ee,b211d89a,77be40de,22b6c89d)\n,S(6ec76722,1ec5d27c,f7e11064,d4f8b016,3cea090f,6a950f81,85623303,23e53647,9b03c757,9704e839,c8eec7d0,f063c4fd,d0aa7ba0,5ad75254,984b1703,ae69a3d6)\n,S(98f6f69d,320d5eca,1f184b0,378f67cd,b44a707a,c5b2af54,99e9f8a4,524dea7e,26ef6b3d,7b037663,979333fe,56bc33a,ca54a3dd,78c9244d,79ef5426,f2b69a02)\n,S(cf1ef445,58b82c76,5d77ac99,8c0170c9,2d308668,2d9ed7af,2961cf05,5b47e390,8bcc1d05,fb880ec7,8762d8f3,f5afefe8,f4345bd8,36397d23,befdf446,498511c3)\n,S(10e01651,efa26f2e,f88cc5c1,594f378,9ab62b82,5a0875aa,37c280a1,8c6f07e8,2e6a15e1,1f776335,30fb2cdb,788aaa98,83105da3,7e28c0a,8fad503e,b9779df2)\n,S(b94e2fe0,41ce209b,6efd77d7,44983130,af90945,120b9a58,5427966,e93eee4a,8f7abf1,103e92f5,5dcb1dde,746df10d,a86bfb8d,2776a0f0,1d07142d,c9bca443)\n,S(cf9e7d02,c671a9ea,145d233e,244d8af6,6d71cc34,e17f2ccc,1225d2b3,16d41154,82eeb8a1,f0b966f,bbc3858a,3878f969,a853e2bb,e1b60c4e,e13eff85,d2d2ca7)\n,S(da3a3c29,94ad3b91,319d18eb,dcf4b934,df8e4f2b,e052f436,6d539aff,4bd48bb2,28f9d653,c4042478,831ccfe7,bec86663,5e0d32ed,f6db4f54,25669a91,d1dc0193)\n,S(ab812818,2b80378b,d914c9fc,d2831f30,a0a095c9,d0e52450,d4ba27b0,f1eec101,5abc582,274876d6,3dce366a,fbb1d80a,2286dc2a,dc0c078f,1424d45e,26666b3)\n,S(ea5b82a2,bf02caa5,d5d64391,c0965c53,f0edd967,f8df94ab,831408f7,e5c4977a,81fe8299,f320837,acddd504,7b888e6,2518d53e,897dacac,5d28bce8,ff3d9339)\n,S(50605c0b,ab201d7d,3dd618b,e3da2d29,318aeac1,7df58d2c,a95b8fbc,fbe70fa2,e50b1e,7b5693,c4ecc160,d928cd6e,d4c978fc,6c2a68af,c03f397d,72a60383)\n,S(f76c50b6,6d7dcace,f45409d8,854f79b6,51356661,108b7168,31b58b25,ea1191dd,7d055b74,b0195140,bc0e2e93,a97f07b3,a3040148,7720df86,d3bd1810,6df3cc72)\n,S(de5053ba,d716047c,cc2367db,272e4e11,41312690,2bd79b32,f6d3d959,93260e7d,1c54a2d3,9c34b0db,deb61b5,b5f46033,b1e4c581,5113bf3,d3f38de1,c97cc7e2)\n,S(ad3e719f,180e946b,1b98a332,bde18e54,437f1a24,949d712,1aff7c8d,fa06499d,b458d7f1,390fa4d7,d2473863,abedc063,ef310adf,7ca2f2c8,82bcad3e,2f1b554)\n,S(270a0234,5560af6b,6310c867,332f8b79,839a3ae7,6e2666ec,b46c840c,c36bae4b,8daab84b,92157d16,ca0f160,99877a1,ef7ef072,1bdb5bc6,89d16a19,4ebedeaf)\n,S(eb5ed17e,3027c9c4,c87ffdb2,94a84ff7,25ba2b5b,2bf72d30,f98334ee,68624621,39fffcb3,8f74d471,9be8d1a2,14c61ad3,df4a91bf,d599c3ae,3b54b4ec,860a942)\n,S(b9c11df2,8a0b98cc,623f4e80,75acd469,fb1f6621,a7572d6a,7bac135c,2ce0a5dd,5bfa8a78,d42b95ef,327eb0c3,692b3ba9,5eb506a2,4e2fca1e,391ec545,40a76278)\n,S(eed17043,80abe259,fe661106,6eda0408,f60f1399,3c49a21c,a8a6310c,ebe74b5c,6dcb6276,cbe37b91,162a243f,57afcd9a,8cc2c661,652c324a,567d5db7,22a0d750)\n,S(8e4b0f6f,5f5b9cf4,68e5524a,4adf62b6,8c68e310,5ee374c2,5265000c,53aa97a7,d1f880ae,c18d0191,b74578c1,6d0418f6,c7e59f2d,157c0d56,e25137ec,c1b7f74a)\n,S(77ae21bd,fc6596b9,ae85ce9c,93112b1d,a7f393da,1238d76e,90cf59c8,caa5ebbe,f4484581,1e3266cd,f4625390,e729154f,51694717,3206ef9b,9106c547,ff4a21d1)\n,S(1d379ca8,71c02ef4,59a8bd35,f5066265,92922533,f0503999,e16d6b07,dbd2346f,c0550b9a,72899a7b,42197cfe,d195c704,a6333d5e,178d91c1,d50b772,4140cad0)\n,S(625017f3,28fc16ae,99367199,5f02772a,5c7ea721,7d47c296,cbad670c,3fef1ccc,1b44e253,af3b214f,edbeb4ac,50110df6,d7056d06,617c2bf3,6189a74d,64450603)\n,S(c7a4fe49,6bdc3509,3ae3f508,d43877e8,d1019d16,740a5eb7,8eaa72b8,638412d,1b5b12a8,95fb7130,e8792406,74b8f735,6730938b,675996fb,a30a9744,960febef)\n,S(cff9f83c,e8f9c4ef,3e80102c,bc48c409,b65c6166,b74f052f,a5628348,b2441d3f,4cc418f8,2180207e,fc846a41,ed6973f2,814ceb07,a8bd252e,338e32cd,e352ee6f)\n,S(84027710,45b8c295,c938ae98,a9ea11dc,2fd23ae5,7ade6ef8,2c604721,66700541,72946592,d3c11404,881b972c,eba81d4f,f3f80dcd,40b15da5,f56e0723,841e4f99)\n,S(f7ab1330,e00cb9ec,61a346b,d8f5522d,5e304a4e,a94f84af,b5c70614,d2e0d2c,5d4ac851,89350a54,af58def4,6f3f3d69,2ef0f6a3,9dd4ef86,6bb1101b,df5e6144)\n,S(a7c84e19,2303b778,8c1a4d5b,786c9829,d0da4ddc,c13f692c,7851884c,6fd4e618,56e32e5b,8fc2db2f,21d64bad,35e3f115,65928533,a829d744,939ba456,bb1774fe)\n,S(b8b0c884,a680dac0,363bc55a,fa677a72,c65f4139,7f5cdcc,f199d80d,ac98c43a,43e4188a,c92606c1,cd6bec5b,a4edb045,6569f87a,625db932,d0f8e71e,516b8127)\n,S(816ec443,d0576135,5a3bc33c,1db4a179,c5bef98e,943af8dd,ac250482,a65e0df6,89a7b2c9,e9f3588d,990f6fa1,96e366b6,54f9a30,1218a2a9,c9b87c48,55f0b360)\n,S(8ded2103,823d07d5,33fba24f,7fccc47c,b101960f,3b717fd2,af39d49a,a91e28a0,3f03ed1f,be1a661e,f43ef9f7,d753eaad,e3e1a391,2a682ad4,fb19526c,c0011728)\n,S(b1c4b39c,e874d478,bfbdf9e3,ce8c3165,ff4f7c4,bee20c87,4849aeaa,d0d6260b,38af8b61,30701881,fbbfe724,5396adc9,32c25b84,dfbc4dbd,a54bd236,c04b4fde)\n,S(7d5bce3b,e5953eb3,a17f657c,fabc8209,f011bcf2,7e10b90d,e75dad9,fab2c971,7380d686,5f5fd782,b0708b3b,62c39e49,864b2ba7,4066167c,bbcede2a,b0f84787)\n,S(2af5111a,422af2cd,14e7717f,bc7171c4,96af178,8b229497,a54d2b87,4c00f285,4468bf1b,ee43f100,7e800b68,b7b3b243,2f3445c5,c8aca59f,7534beae,bb771f41)\n,S(b46e29c0,6dc8ddef,f8bdfb65,f4043b61,fe010dae,a2d0955d,c81a7b49,637af766,62777495,ae16314f,d7d0cef8,24a27a9f,748c5c9b,9c51645,9c1ec9dd,9d7b59f5)\n,S(105786d3,f44ea40f,71eb3bd5,339cd514,aef6d8fa,5923b4a5,89b219c,fba6b1ea,2a4ea7da,c87522cb,7d92c450,8e86d0b9,39fad024,9fc2cf15,1ba005cd,b743d0bc)\n,S(1f3c0c81,be856e30,18934573,892ceb22,d2d2d8ef,f08b7857,5c624f48,16adb23f,7321690,de24499c,f52f4840,89c4d7b4,11158d52,d32731c9,faaea567,8bf6072b)\n,S(16dcbae3,a95a95fa,912484f,f833ba0e,e437876b,f16f9c9f,5abf46aa,468bd2b3,56727c07,247b12d6,c1ade473,3c691700,30e5582a,cde14034,3449f241,59ffa44d)\n,S(114be56c,d6723c8f,924ff3c0,f5edabc6,e42314a6,49edbfff,1c794438,dae70726,984dd72,855cdeae,7c580046,b32cfa7a,45b61b75,944735e1,d5fd9065,268ac521)\n,S(8d0cb2e6,1f98472,e169dbac,7f5babff,51766b3a,8d74e17d,747b7eac,d903fdaf,d1593bf5,b9e793f7,25cea368,2ceabb11,f06b36ab,899e160a,f1f736a,80bc9b92)\n,S(5b420754,188c82e4,db72f3a2,c8049691,34e3b43e,484b45ca,ab4727f5,31714db3,4a89307d,27d7f360,7acd1643,719be148,1c7eed5c,77598883,8bf6cc13,a4723d9f)\n,S(91e3761d,95761d96,8d856a72,800fe0b5,9f01c62e,1cc446ed,18c1b58f,88cbf74b,b5ab61e3,96f88376,28f3389e,9999ef55,b73a58c0,d33debc7,25812530,2b96c772)\n,S(31380b83,dc77e5f2,9c2f5548,abe052a,16e0f1f,2d8aad3,5b05d29c,5c1a4655,23ccafae,cc84ea72,3c434342,b839cd0a,b42173bc,1aa1db20,1073fe26,6593403d)\n,S(ae40198c,bcd54264,904b44c7,c9019553,8f3f3727,a0c9639a,764cda80,b21edd27,3a57f08,ffecccfc,cd9a0e7c,827d98a2,ffceea9a,6c39d200,5cfae623,34eeba8f)\n,S(f4729787,abeac0f1,249b1d3a,c19bb025,5764a854,727b415f,73e24c88,a8a981c8,e31161a5,68d81328,c7f9783f,de146d07,b51aae15,bfe719d,ab4e9e,ae65d172)\n,S(f92f02b8,34148934,f7059b61,7e84d0a6,f52d3b8c,a7d7b69,ce4c8175,7ed5884a,faed7ef8,82733020,888eb530,5c6dea4b,cacd208f,fbb66b7,6f3cf41,a8864080)\n,S(a2bed8aa,e93bd682,be8cc4d,d1f84fc2,9efe4022,b2b0dec4,9ed3ce17,7cc93363,287ab9c9,62126fb7,e0340f29,9edeb89e,7bf235b3,b3f08213,d630c9df,198ada1d)\n,S(5a42cfcd,3d1811d1,99b09dc8,9308134,cf6219e2,e029598e,899418f9,b7af4724,95ce721c,39929d76,b0ea83b1,80bf25c2,e301413d,60fb8717,2e0ee8f0,593f8423)\n,S(1d27ab05,67e8bf19,323f1eca,44175085,2e768a6b,a1436789,40ba2b94,5b0e530f,18439939,496d29a1,58a532be,76b04932,a23e3ddd,d51a1b07,c6c33e6a,11e1afa8)\n,S(592bf859,22c05bf4,4b42fcf6,e4cdf3fd,bbbf8088,b7263d31,9bc74914,6eab4326,84cbd8c3,8dccf0ef,de3946f3,ba2eac25,3aaab976,8f7f601e,7d95bc74,4c7f65)\n,S(66730a70,5ae3dab8,bfc01f4a,deeadc41,d4df156,d03c4fcf,1dd9e16f,9359d5,c04c7cc4,4ea1d8b2,273b9170,19b9efb3,6e8f422c,4863f718,582f57a0,778273ee)\n,S(3d002600,532420ac,9fb246d,84e48560,1ce6897b,979491ae,7c5914e,dbb7fe83,5bd73264,2f16d4e7,7bcc4855,72494523,c221fa1d,321c552a,53241dd7,94c7d98e)\n,S(d42ae36,2b5dd22f,d2089d37,d22e2c2a,750395ad,710aa1c0,61ed4275,43a24487,84439e00,1571e1ea,53bcc24b,a11b6f7c,ded0a649,b2a12fc9,c2a618fe,cb39ada7)\n,S(37c761ca,486fabfd,b306d,c18e9074,409e101e,5bdd1670,edef1253,aa253743,e53840e3,1110db1,89ec241a,e7b2cb89,29669da9,5c07f3d0,6277f667,b90cad12)\n,S(4e672ef8,bbafbc8e,eb819f37,15ac0d6c,2afa9781,a197345b,2889ed0a,f3b0e788,9c10f0db,bb16d807,4680133f,e62e0eab,130cb0b9,51937852,4afcf4c,38814061)\n,S(c1f2943b,23c07929,e9c635ae,66f62949,8e1df12,f35aba68,ed8791d6,8fd51fec,3376b6c8,93ad5ec5,991f7ef9,6a6b1105,2f2262c6,680045fd,fc4d4bfe,ea64ae75)\n,S(3df2461e,739cd984,72cf10cd,f663e651,351e826d,7afdcffc,e17602ae,c0370be6,5e48fcb3,3ed9c0ec,3594eeb0,81adaaa,bd5ec5a5,7eeaf01f,c9f00d02,c692cb06)\n,S(d4d3d528,f98b92d5,f4c4ecfb,ab60fd85,50f12327,5b63b3fd,5518c1f3,d62a82b7,64496d50,85435de6,991a838e,d984bc09,2554053b,54b05a2e,490d2ce,da7d5b76)\n,S(ecd8399b,4aa3368f,1a7a4113,63ff03a7,ad644847,e225108,b3ee7d02,1209236b,2e1209fb,a7921c29,e351e61,73c02cb5,c629d88f,4ca51af,30f37123,75355213)\n,S(d5990be5,7e6a0da9,333354a,fb344d59,416d1a70,785cdae3,8c332e09,cdf78722,b2a2cd8b,73f76f3d,1079198d,34441008,278f73c8,93979ece,eefc5911,7ba17814)\n,S(7598ab65,1d8ced00,af3d5978,661d801e,b57e9089,287bd74f,85ef042a,90374b1b,589fc426,9466b1ff,b9c0cbd4,b022e9ee,7edaae87,8f4cc240,b60db60d,6c28f04f)\n,S(fd071417,b12d2d31,852048b7,61c5301b,be088cfd,98ebce7d,7e0922cf,41f694e7,2d9c53f1,ee63b93,2adf679d,96b548d8,d47d8f74,58ef8b45,9664da23,be32c363)\n,S(5a5b4990,e290868a,d1d571ac,8e9347f2,b1e513bf,cbc2b8d1,5e56ce01,2b72ca0e,c76852f5,7159524,541569f6,3c4c9c7d,424285e7,e83145d5,e5161998,efebf968)\n,S(93deec24,3cd4f146,42f5a415,f6ea6f36,25c90081,5f3d20f5,9728c056,fde7f2bd,88f919be,b9993a16,61f78145,f54149f4,6abfa859,1907736d,d5e85f25,bf2dc7cb)\n,S(9224d17b,a65ad967,969104c9,3068d439,9c9bec7e,7613a602,f5c9917e,46df82b6,346c98e3,2bc2a4e8,c7689e54,eeb1064c,1b5691fb,cf5a4710,55cefbcf,18a32f65)\n,S(851acc91,24ddff9c,14cf054b,87347a71,cfc91637,6e559189,f055143,3b79c38e,d959bdf0,58d21cc3,430527e8,cc49dc56,2dd20bf1,30f0e13a,55cc69cc,1e116f35)\n,S(ff6c1303,b7c111c5,87e01ef,44829510,eff0a612,931f9212,2b71075f,2cea4d96,24f09bbf,7bcf50aa,ca239be,b925505e,7e99d0ff,5a959574,5370eea1,7b4841f6)\n,S(f23bd9f0,55e7bd1d,433fb51e,c8b6ecb6,fd5014f,4f4ca9d0,6a4bc636,435fdac0,9652b458,9d269ad9,68ee7012,aee47447,25ba917d,f120bda6,9d2194ee,a56d7b60)\n,S(9d622c56,ea6d5d19,7b823e60,1bbd4af0,1fe070f9,391bb564,2a05527a,49f46ff7,8061bb94,d6485fe,d9fbd557,66db3dca,c648c7c4,2e025494,e6c3a91c,fd5c609e)\n,S(9494efe4,cff5d5e7,6394b67c,407b9961,2915afde,56933b80,370d0adf,2f020c13,ab0c7e38,c85ee1cc,27964b2,de42372f,fd86ecb8,fd3f0a81,84f5af38,58a7e4ea)\n,S(a8e4d7ba,ffbc52fc,a8cb6c,2938a01c,e028c259,97403268,dbe1600a,952e1a86,8d5b83d,dc3022c,4f79723,c6f16722,cc7eeeb9,c964496f,c9f67c29,351a0bed)\n,S(83841f64,938e460f,eff191ad,4d72d7a5,203c01af,1519cdf1,f17c3bb5,e4927ac5,f5868f2,c2e87249,21373397,40415c4a,ecb1f30d,b204fe41,80e01d79,eb536800)\n,S(ee8974d9,5ef03f8a,860dcba6,7b597fb2,af2a2df6,950aeacb,d623c883,20612f6,5cf10d74,3085dd7,cc695145,3f9f763d,6596abfa,eb7cf216,34ee07f8,a4f141ac)\n,S(68e88d8c,23616ca3,b136e5fa,3427628d,a92dde6b,2691d857,b2d01a60,b6579606,5a9090,3766d6eb,c58c5d60,9b6a5675,e5ec7b73,86a17c41,2574d179,a0fd5450)\n,S(fe34dd8a,c62ec8b6,20dbea79,44ccca40,cfe6ab5a,ce3b2e7c,50ac589a,9522345b,88cf0055,adf1e122,535611d7,bd3e00a7,30c9edd5,898d25bf,f0abb9bf,6bd6c8c0)\n,S(423a7a9c,c0f81489,aaa62479,c1317368,9989366,fd18bff7,f6a5f235,8251bc1f,c926b3dd,519241d,2e776ea,16112e41,259ce896,472ce71f,de4261bd,29c678ee)\n,S(7fa60bf9,7cbf54ff,e61bb840,b2e08d91,ffb0eb4,727c0e73,ed4f157,ad0b98f4,d5b1aadf,84d387b8,fddc7b26,a7f736a6,7e296fed,7978e81f,6e7b3b09,e94d733)\n,S(9e53cb0e,f1eddebc,77edf8a6,6917f915,8294815d,eef898c,f1e77433,60153a66,5358daf2,60fea2a1,b9a4c6f1,b8bebe09,4983499c,fe5577a2,ed8f817f,46b41ccf)\n,S(adf93641,c616c677,99b44ad5,354332c0,1404718e,8ec91e96,31e69552,3ad6f119,da3c66af,e4cfb3df,f55f6761,5c6ac42a,8dc17241,5ad38619,dfe2a13b,7e42ff9e)\n,S(701e3ec,485db367,b0687ddb,2be15f4b,5b6242c4,396f6f0c,9726ecb6,474e4ca8,1098fa76,13dce1c5,29f7fea,30740377,691aa3cf,3d13cf94,6f2d8191,2d3b9e83)\n,S(d8fc5ba5,d3ecaa05,9e9a7e04,2c52500a,d513645e,6149e84,aac0d910,f8ccfefc,72724b4d,eec94da,7494b4d9,83a2df06,df96ee83,e578d920,c2597089,7b4b3d8a)\n,S(7bc88f9a,8279ffb7,658a186,faaa5f0c,c900cb9d,4a33b8dc,c9eea83e,ff71398e,cdcd21df,e5ed8151,1a2d8c77,e08b76f7,4939d39f,1f5581b0,aa956066,fa14a7c)\n,S(8578d531,bc79e1f,6e219bc7,7f2172a3,e5fb92a5,efbf9919,f46ea11,6f5ef0e5,fcd1b2ac,39c262c6,94eef5e0,52338f9c,cac2d04d,ed17c290,768759cd,13b7d550)\n,S(98bc22d7,3ea2661b,545eb5f4,37e1cc0a,d4124020,44bb9093,5cdde758,a8020a62,143c7dde,d33ba5b,c2ac8d83,cc462f94,2607bff2,a1aa32d9,f32e14c2,82232226)\n,S(7fcf821e,95d2176d,d088106c,a5bf0855,9980f265,ea3c401a,aca44b0a,d5e8ee10,27c341ae,87e7afee,f8af4598,e8e27cab,c127b054,1b389cfb,266ec9d2,fe400284)\n,S(898a39b9,d440ef05,f87e195b,6a334f93,67acd67a,1fc76ca8,316292ea,216a5f1,eb642fbb,fe3274e5,2fd1cae9,744fabfa,c0db80e6,2bd4f7c3,fc2ca43b,18ce52ef)\n,S(3ee974a2,8918c216,a962480,1f18bf9a,87d6a627,83323e3c,bf138bf4,3f2192a4,f5b386df,ac71eb35,499d5b2a,960fd20e,fde39fc,10dd5c63,dc50b55b,cd660d9c)\n,S(bdd10d2f,de76df34,9ab753ee,d06c1251,9766bbf4,2fb610a5,7ddc3f36,4047c14a,504532ed,34f97eb9,b8b27664,ab440032,2b8b47f6,9c403bbd,6bc74330,16923dec)\n,S(2c179437,39784124,4ff9a4a0,eb9ff292,477a5148,c4176b23,c000a1ce,3bedd63d,a367b584,4f9b7b2b,a82fccca,b9a12a8c,2c1ca5f7,3e630173,e37e600f,f2fcfb6)\n,S(282ef30e,f2d61d13,6f71e6df,6ee97ebd,a83036a3,2d3cd841,36289798,b3e71580,90b0cd33,c350ea2e,54c25264,7a3fc91f,5b4f9dc3,1f58e86f,c47825dc,e3d0f43a)\n,S(a42b4d55,42acfa7c,b54ab3d5,ee0bebd,85bf6ea,db138ef7,1ea38c73,899eff23,17e38880,f10b9927,764c4997,326b0b9f,63d0e03a,fd2f0bd,b1ff3cca,1f566bb7)\n,S(b23acc64,c5b00c8f,4b580d47,49589559,a06fcea5,75f3d38b,1a02251e,ff7ef00e,66bb180a,7eaa64d8,4bfe6a17,d457f5e7,73964ac,ff908729,3bc540aa,1cb6464f)\n,S(942dce6,96aeb063,4681ce7a,407516e9,89df029c,ecc77023,411a628f,75885ea7,e208be8a,88be7b3f,6b6b06ce,a3aafb45,c439f0ba,d517a784,ba13f80b,707caf14)\n,S(b8a6a2b9,52194ec0,8238e4db,e71eb948,23e64a94,e10ea0e1,610465ab,88392d16,f8029f31,b8e5ee3f,77a758ae,343be258,34c7bef4,c1b555c7,4cb63d51,cba5fec1)\n,S(a36d3369,a1ee05f7,b1fdb083,ea614cb6,f15feac4,17a416d9,cc83fc2,868fc20,e4abd7f9,fe40f27d,5b7b7651,6a9fd714,aacd2ae0,5f0a1f10,e94327e3,76f0af52)\n,S(4ea30108,3d711ae6,ffccc89b,9d6fd4d5,6f03bd68,f4508cc0,ebef5e43,88dda1d,81e9997a,8b1c5949,6554bcf,154166d3,40f9ea5f,ce55ec83,eed793d5,5ca3e513)\n,S(20228716,1c1c89c7,64742e62,e427b712,fee118f,406a175e,ce2f424e,2affdc55,7837965e,cf26a7f3,428d2864,41e1d09a,91eaff0c,5ecd2c28,bc817766,67fa35b1)\n,S(d3c072fc,8e4bf160,5790d429,61206123,95be9092,f166784c,f5adb7e8,6070d20c,72688262,594c75bb,bb55c0fa,af7991c8,f412e0eb,afd1c0c,f5bcab82,d8daf31a)\n,S(294dac7c,e307fa7c,cf0e8f34,28a354d2,94003dbd,ca763dad,3e6df60e,530ec82,479fc222,a7bcaa62,aee807c4,ba6309e6,cfbcc783,afd49ecc,fb9b45f,cf84673d)\n,S(3956ca5c,c09fe8d9,e4042a8d,67b276fe,225de609,ea24575c,7075d9ac,4e732fae,1c965fe7,a8219052,9d25ee0c,e1fd62f3,7196431d,7bd78302,e287a26a,2eeaa23e)\n,S(24d2e396,da144b48,e736eb06,84940175,4f4109d6,6d87a9e6,97ee82bf,91fb3def,bb79e772,24b02fcf,dd1e3c9c,edbad212,ea875c75,1fe7c81e,76d7d0d9,a372236e)\n,S(638d4042,f16e5c07,fcbf9619,dd9c2f91,18852889,3e12cd3a,b49e2b9b,99a2aa5e,d0d97842,4f0010a4,df9eb8b,8e5d8147,f618da43,74b8a4db,222e4ab2,b32b3d92)\n,S(f91ad5b,a99972ba,bb323a1f,d3032e1d,94202d88,63680c5c,d7d67828,8f0d866c,60b66d45,a693175a,3a38bb4f,efb32dac,1cb558e1,b0d13571,e24a14d5,9452bdc0)\n,S(3154137d,779c25f1,4ff1fb88,a6d0370b,9e6af48d,88e7fc39,c6417272,eaa69b7c,eb3bd91e,9c09178a,398e112a,9264484e,c1980c19,b1993b13,560d39fb,92295f7a)\n,S(f8821e1f,dfdf9fc8,1e3acb3c,1d1d7a65,f710be2d,94a19355,721cb93,61549597,bb507868,c1e05282,51b635b9,dcf28e5a,c5770c05,c7afc2a3,f4b4c45b,7d8993ec)\n,S(8409463a,521404a5,a2d8aa90,50e3ad8,ec5d6faf,870333b0,6dd4f63e,8354a655,cc99452b,85092ca5,39cc1b66,83b7ab37,1b8a6525,269a1ecf,91b857be,e1db3bd4)\n,S(96802411,12d370b5,6da22eb5,35745d9e,314380e5,68229e09,f7241066,3bc471,ddac2d37,7f03c201,ffa0419d,6596d103,27d6c703,13bb492f,f495f946,285d8f38)\n,S(9d1abaec,9f5715a1,5c762824,4170951e,f85e87f,68ca5393,d3f9fc3f,a23a69c8,f21ee700,50dbb61c,238c89e6,29423538,71b010e7,98867bdd,149ad28b,3f28cadf)\n,S(1fb96691,8db3af46,c37234b6,a4b04371,9886d6a0,5859ba32,f72742d6,141f7ae6,8bc13ecc,207efd91,f7f4c442,6e9a425a,a17b5578,20404eca,b09d5582,d41f7379)\n,S(22d9e364,b9274dab,98bcb23,e0428e8a,416d54f0,5a781281,ee221db6,9e1ec7b8,5dc23258,f93d7db5,e5799195,b74e9519,4c300a91,28f924c1,c1e4865e,2d8407d)\n,S(625fa450,aed083fb,30166766,d5874131,adb168c0,247cbff8,3987297b,f873e45d,720a8104,473dc904,65585ed2,1a0244f0,fbb5a286,5b8e5117,5a21f644,8776bb7b)\n,S(24acb1c1,9b6dfc25,defb01c2,e2681ae8,2deacc0f,f21ae8ff,1f82f37,a6a2147f,f729d335,210e8061,8a8abdcd,b71aabe1,93f50ada,dfaf7d52,783991dd,d3ca5d4b)\n,S(d2856803,a99d30d4,f3a328e3,bbf7db3b,6c6d1896,ba5b339f,33c1302c,f75ab555,9649994d,64705b87,62c98bbf,1b41b725,2b814a89,3e780fdf,5689c9da,692d6ff)\n,S(80529e65,9d196884,b15e95ef,871e5fd8,8fb5298f,3bc7831b,50a0bc98,4cb5fe0a,868b3e4f,9ae4bea8,efde50bf,c5a5b268,b74b4a8,74e86de6,e9ae476f,10b3b778)\n,S(7f9199aa,3b8201ed,5d288e49,49c43277,e0bb316,953f1dde,d0674d7e,8728e183,1aba673,d0372029,546c174a,3a72268c,ee9d7e41,dd97de2f,fcbe1f9f,1a5288b9)\n,S(7d32c885,8e959f6,48c4674c,dcccb191,29b4566d,644d2fb7,6d0c8966,2c29ecbc,d90e94ec,b50bfee8,c951afb8,e65c7386,875ea99e,31f553e8,66e00342,6d39698)\n,S(f2b961c0,9291ecc8,576ce67e,bbd1bf01,1f1727ff,ad9eb74c,bf8819e3,2d1abfbf,ebfe5849,5a1e6a36,46c38220,8656f638,ed0aec0a,d40c0524,1707102,3126f795)\n,S(d9a0c689,95283291,972d6a72,897181b2,6b4ae317,4e98a676,f75bbfbf,81be876e,d36ae886,a0acbc9a,d1564d97,4d3f0309,e9039b93,bb350d92,2b7f8c7a,c6bfa042)\n,S(c7a36324,6aeb7c8c,991b2aa7,10abdf5c,fff29912,30b3a69f,be2dd481,7c7c3e0a,1298fdd7,e448d2d,79986302,6b4b2d49,2b32148,d6d1e5f8,15f5b0c0,5c9e21f)\n#endif\n#if WINDOW_G > 11\n,S(635cd7a0,5064d3bc,66535a0,4dbf563a,640d2464,c7fe0ac4,8304214f,e4985a86,e40265,913e77f6,46735cfc,af9e2f30,e8d5f047,f3281a4c,e0453e27,e9e3ae1f)\n,S(5da624f,38edea25,37f5b632,695b481a,eca54bb7,2169cadc,c5b91e10,989ee5f5,d3ea6dba,a1080300,fffaeeb2,43a5256e,48c28822,37b16505,a220d771,ca721779)\n,S(aa4f64a2,b19775ec,92c1f687,1fe4b6d5,ce05278c,2976c80e,fe19284f,e87d4d5e,f39f117e,95fce0fb,6976e949,9583a66c,224ea028,8396518e,293793dc,3ed4f240)\n,S(9b6518ea,99ff1b42,22a93f26,62e05551,d60969ec,ebe378c1,477b5c36,427e0641,2e9f1655,8650fb3b,43aea9dd,30532ff9,bebdf7c5,1d421656,27b7487d,8f93165a)\n,S(6c9b9aa2,b5972e0f,a1e01138,1ddcbeb8,6547f47f,fb101159,4b193d00,ae97b562,af09d91c,8d4c71d2,be523d0f,9d205bda,a6e78eb2,67476d3b,1624a038,6275e27d)\n,S(a2a1c880,3cdc95c5,5e636541,c7112a0,cf80aec6,a37e5f71,f5366612,db467cbe,c4cf570f,3638f040,ffe5410d,50d4b175,802e2e1a,c422fc2,73eb9b2d,4e23fc09)\n,S(63d3750,c961ccd6,34a5af10,48897366,13102bae,20f2c8a9,ca8437e5,ab650427,87415332,74b39a76,72de90dc,698742a1,f21125f0,71393fa0,6d670045,8e339248)\n,S(8d070e66,e4428255,a53e8fb,5845d14c,bcc97dbf,19b6930e,1f5160b2,52bdd04a,4bc98c82,4f2b4f04,c9884099,f173cd22,48cdef90,ceef4bb2,497da8dd,99487ecd)\n,S(f1fe56a7,2e5f008b,b5014395,cc1658f,e3f3d4df,7b361456,175bfd2b,4a91c8bd,be5ffebe,e57a7da5,d01e302a,d3688567,a19caa5f,fe8a57b2,be2c866e,f5f275f2)\n,S(802c9adb,d2eb969e,9ba71a95,675bcc7,b412399d,5aecd635,7476a1fe,73554b21,42132026,f547ce69,66e6527d,370f9c0e,cc3344c9,be1047ef,b7422e13,6772bc5e)\n,S(95b1b6c0,9d6ced22,f0a5cd,abc7a594,9d24cda4,f178a745,c718204b,1493db56,bc143681,53033d16,ac8ce5e9,a6cf240d,27b2331d,36cb23dd,f69009d4,b6adb01d)\n,S(eaed529,1f94eae,183b2aa4,e17022f1,7b79a06e,d76b169d,2d6483a6,a6ede35d,53d5b276,91c5899c,ddac1efa,3ad6baf0,bc6e377c,99ac7f8f,9cb27fb9,5dd559b3)\n,S(77c44fe5,9f6f448c,72eb485b,6ef3f7f3,906d690e,367beabe,ac7b7359,9c27d770,bcd75022,6c440f80,2ccf0360,4e3d6b38,e6629c9f,facc49d3,83322eeb,fb1102fd)\n,S(e863b2e2,f00f0a46,b6752002,cd936a88,11b6279,5411944e,fadae5fb,e40a0306,b5c79ba3,6da29f17,5b9caff,631e8ead,c2ed937d,66008358,b36fe044,67243a5f)\n,S(226f5bef,93df71d0,b2feedda,4ada3098,3883adb4,f3dcedec,2721e72e,eef8f191,a09204b5,2bcebc14,8a0a08fb,e8458618,f966078b,d75ccfbc,c13233ce,741707c3)\n,S(aa222fb0,8c1e7c53,9f3a82b3,9c6f08de,c33beda4,aff7c46e,3a4e9036,83467184,41105cf,21cafd39,821a7c3a,a6dff931,c1653d29,906b5d4a,c5dd6431,7c1c3765)\n,S(1879c2cd,26ef4ed3,dc5220bb,397b1501,f94482cc,1236da82,239754f1,e1fec96a,912d5f35,75eade14,91fb1609,21d63042,4fc68951,cb73d351,464725b7,71f0d67d)\n,S(be39e4a4,e7eed88b,f4a4cfc5,970d4b7e,6df6211e,bdc2bb76,7657ecb1,ac9902e0,d8b1e4f1,13fca7b7,6306d9a2,b4cf5a49,32ae54a4,5615c899,f94cc476,7e27cb4e)\n,S(1ea72fce,33378c3d,d0302836,86c3f8a8,1c2912e4,7cf44631,d3fbdc2f,752d5786,e20f4558,fe1cdd14,ccff261a,fe506b78,cb6e2b0,807fc7c9,aed0b888,3748906e)\n,S(56e33dd,67bff57d,e8c638e6,f32bc396,2d0ca011,b74db242,3ac662fa,da036806,4039c0cc,165e7130,9317d4e,41de57bf,50d78ecf,3e14ee2e,fbb3b93f,c393f461)\n,S(51981691,a5f1d8df,1cafb95a,738b9e3e,d036ce54,f10a7447,c470cc2,e80f37ad,9fb9047,67cf2a99,766e3c2,6e97f045,d03fabdc,471ef664,d31aa662,c5972261)\n,S(ef3a5685,77a59783,6b0be7f9,5f927996,b90db9b9,bcd57f30,16ec5979,98869dbd,51cfe457,ff22749e,949782c6,ae1f4783,fabe1136,4bb524d3,72ac3d8c,1b7c5e07)\n,S(efc652a1,8c3a85ba,7ee9e0b1,6e3c6433,79a66882,5304a22,523c060d,af196415,8a656c14,cef91af3,1db2498,f5987083,8fcee71c,98c09d49,737447b3,54f7b2a5)\n,S(cdda1fef,f4d5ce2c,d9802198,389880f1,8adc7962,c04a95de,f07370a1,884bbf82,8bc26ffc,b0c9dc05,d799174b,4a478162,4417f9ab,8536235a,e55c9b0,49e31d6c)\n,S(6f3f3985,3454aa13,134b76d7,77dedd40,d46bb6ac,dc3a3a3f,93886847,b96cf0d4,a8ba499c,4f7ca1b5,ae7e5192,ea408344,b6e32491,e5649637,e4eec5c9,2cadba81)\n,S(e52d11af,91abfb83,ea842065,ed8d804f,a2a3627d,85149ee8,61cd5df,e54b13e4,59f3106d,619e5672,cb21f6ed,4e73285d,2e132a3d,e3ed069,46838e12,a9cfff97)\n,S(89fec736,f0de1cb6,45654d13,b32b3cab,8fb91869,c30e2ac0,66c0cfa3,9e7256ff,f9417ae8,4d3e1a6d,b6ab938d,9dfde62d,73e708db,b58f5ded,46b455ae,7e44274)\n,S(5140f56,91b10553,ce86ce73,3028749f,52261520,a8903f75,31bdac09,22b70b29,91a1962b,9e02c23d,61f4ce,21c0ce90,ad0acf0b,fa250afd,dd67d72,aa2dc024)\n,S(3c16130,93109917,1075e199,ed32f94b,579d0eb,85520d09,c0f90fc8,7d267b5c,d50d04df,e4040db9,3aa0010,7693ac01,e9f156ca,5e800e51,a5f7d36b,78ac64c3)\n,S(fd87690e,63a50237,258b8a58,f0240552,a2d0b952,911d1fa8,be13eeb8,9be8bac9,406dc1ac,ccb968f5,6fa3ee35,247fc66b,b40f04e3,ac512474,58e4fea4,8a1b9225)\n,S(8e4d1de,17e78f3,2ce8ad59,973b328e,99005ce0,6a8d9347,ebc7434b,d5a12a81,c6348f3e,744ca65d,744c843b,4bbf0d8a,992bafa8,8c31b6da,42919401,b1a2a8ae)\n,S(382c7bcf,ea62c678,173b6eeb,ba58caaa,f4988104,1677bff6,ea739a0c,6c7743c2,190a5da,77e64243,53df7f27,e01c0f6a,67e9addc,afcd3523,7cf5539a,69c5eb7d)\n,S(f56a8b4e,74b84807,539fa471,bea50795,25b0dac9,53bf5d29,e87d90d5,f914ed0f,5456d908,da57e612,3ab881c6,56a6ea24,8f9f201c,13915a48,c50151fb,c096db8b)\n,S(908e9ffb,6a5e557a,1fef8ea2,b16b80c4,3af3652c,55f12a04,4ecfdb06,17965b80,beae28c9,d1b14cf0,f8182ca0,7ebc3137,b9c01094,ed6b6043,562de75a,878bc2ce)\n,S(a6c30718,433381fd,16b22533,52934eb,3fad254b,99d41e78,7ef2e6e9,bec86ef4,47a9a286,a60d5102,4d129e4,e0309c72,9e266f82,5ee26f4,4bf90057,623fb818)\n,S(948bad86,6c3e2c26,2d46163,52be20ae,30a652e3,4a299361,4766eb7,98b3e903,30d30622,ad478a2b,99c43b0f,915de0c,4321da4a,76a18d33,95b4c484,d9c35164)\n,S(d6c92b9d,cb8a17ae,77788125,18782d36,9d536edc,f96d2c9f,c9e84d2,1cf6a3f2,dd9367a0,93518377,97b0ae88,1aec5d4b,ed68624,8ec2207b,9e0104af,2ade09b9)\n,S(f9ff3d7b,7d8b13d6,46c641ca,64df802f,7b082209,a75ae328,54cef0fd,65566abd,ac58619e,1f192095,f7223022,43d811d1,b9269d28,a18711c8,c84e5960,32deec98)\n,S(3dae1dba,3a70e0f7,209a920,42837ed5,7f4e767f,834d14e1,c3528f6e,92c8d5e0,7ae2468d,6ea1f2cf,e1fcdfad,3ffe87c9,5c7816d9,ea99332e,8b4d055,280f797f)\n,S(27045105,6fcc937c,9cbffe13,f2aaeb0,8ffd227e,dbbc7ca,d0b4b01d,19b49937,11766a54,6c24fdfe,220d3724,661d6c75,bbd801f5,c4286ad4,d08a698f,1ffa4397)\n,S(f9d95ff9,6c3260ee,cd434075,262fba81,2024c556,649c4865,bb90d65e,20defd22,37cbf7fd,8f741411,80a632ba,8304730b,a89d54a,1a5b1dda,24b026bc,17a13c2d)\n,S(4e8df18,f90f67e9,fed8c6d5,b66cfbe6,ff0a86bb,db990214,48ab57c5,c5a7021f,7e69f8c5,ccf56413,453a2b1b,3b34843c,e9badfd,3a83729e,a2293fda,f2a621f5)\n,S(8c2a4d2a,710a7fb2,1ba78383,63c66458,ab3d32bd,3be35821,c8a5b779,d2ffef9f,d532447d,27e42583,46171515,71bd6577,f82d8f91,ff39d205,caa5aac6,365511d6)\n,S(28b7f3a0,19749cce,6fc677af,a8fae72e,c10e811e,d4b04e19,63143cef,87654b75,30471eb,3245ab39,1597c881,e71f4a1d,e241ba31,a678fe39,2ced5a63,845ec782)\n,S(cb474d0f,fcb8e72c,257b5acb,999ec8e,d89f6494,cf4b008,8f6d7db,59be416b,ff7cd0ce,fc293cbb,8ab9a950,8759f856,9a0e59b3,effc00c7,e3a3051a,a16622fd)\n,S(c33e6982,5dbebc40,265567fb,ede2a4a5,1a180034,2e9963f5,bd57b35f,4055b36c,22ff3ff5,7ce265ce,253b5061,599ab066,82c0cb5,91a51e0d,b798ec2c,c546be18)\n,S(84bfc106,44d37123,71a441a8,4444a9ab,257e0745,b3d0ca0e,ee341838,19bd2237,7cbe56d5,7b7af706,c33d13ff,b3e4197b,afd7f421,1ece235a,e1c2187b,289ef6f1)\n,S(9c312ec,d53b244e,fd40f003,f7e0835f,6063028a,5b0488dc,73599653,f97b713a,11bcbd0f,58fc77ef,854d0b16,188b4e8,59698ba5,fee41fe6,165449b1,4eb76d14)\n,S(5c06af59,a22d6f2d,cd83bf4,e3bbcf21,d474f61a,e01d0433,2d0a82dc,af15cefc,476b4be9,f1c265fd,a8c6d70d,6c669aaf,41fbefb1,425e2be2,9048165a,4322aae8)\n,S(777259c6,81a3ed43,b4c0eb54,7af39ebb,f44f0d71,c84602bf,2d6d45b3,f1b6bdcf,8a9d3753,5481858a,eec44851,4c834667,d6742b9c,f563ebba,22fde187,fb3bf754)\n,S(b370601e,ae1fc1d3,14e4328b,4d0244de,174b8c4,766283c,e3820c50,41266842,8ef05079,2174c3b0,752a9abc,8d980ee3,eda7b5aa,4042a932,3e136834,bc125ac0)\n,S(5af94ac0,7f8d6492,a472ad40,67097206,78086856,b01528bf,8248ac8e,dafe6584,8a54c7ce,57eade51,1d5f32ef,cef5f56c,b40dffd7,8cfe5655,2a9c3966,e62daf1a)\n,S(8fe3c19c,e2e87055,385d4f23,c5832f37,4f84b41f,3f945945,81acb8e7,5b0586c6,f923099f,d16f44c3,a4314d49,1af193c9,2f5e2017,156f860,674f5ac,91728c28)\n,S(d580961d,2642bd1e,5f9211b3,9b65eb5,e531d17f,a37bafc3,b5f288fc,13ac9a71,500c0554,337e8b43,36e50a6e,b12fa86,d9678cdc,5b38f650,e4f897e9,1b4185cb)\n,S(255dced,529fa623,49e46033,86790c32,234e7967,5a9c5405,256cfbf1,4295e82b,7eeda9c4,7f3e1c7b,fc3253d3,faa46317,5dfba7cd,94f6cb10,c8f4b4a,7d799815)\n,S(4b7ebfa7,9240451f,ab8476a4,ae48e55f,1a27c338,a8dd8458,bdbe422,ec891557,dfb260e9,f89135f6,fca23cf,ad7ed812,c12622d7,e4285284,8c63d83e,85b59085)\n,S(919d0780,9e6092a9,a3b5819e,c67719d,3119569d,3bd14c7d,8f47f555,1f2fbf28,ca0b6af8,76d70f2c,ecbb2fa5,98d6118,c204d3d4,a30e24fd,cbcaf283,843d8094)\n,S(466867a9,de89a944,5bed73bd,5ae342a4,9b8c896b,59eebf42,393dd536,8c70ee78,2a5d9707,b3e15823,79bd6ca,e8b7ed09,9cbb9f93,4ee96029,385d5678,aae042e1)\n,S(71274d08,c8784517,8921526f,cf71258d,fc740d5b,be655f3c,d985cba2,c1db3f7b,e0af0130,a5be1434,f8d652bc,4406177b,3cdd2ca6,6abe7f56,d848def,fb4b25e0)\n,S(a46e9048,2d25241d,13c693c1,f4e6068f,b6e8256d,1fb3111f,a0ae0e37,7ebe2bcd,7567700c,f22aab69,8126e7ac,961726ad,fdd708bf,d5ae5111,40f921be,94474eda)\n,S(f7590b91,f2431126,85873b0f,77be6851,10ea918b,a26d3b5b,aec02bfa,a5e84abd,481848f8,594c94d0,c9b5d6cc,858dcbc8,2d25128d,5ea28e2e,ded935a4,62708999)\n,S(2d7aa8e5,1282e1da,dad39d64,398f0790,4f966edf,aff5e3bc,9a22edde,428c2edf,12b2133c,42032099,eb33ea24,f1755f9d,a30b4da1,708cdfb5,7635b61a,335d9d79)\n,S(91313f40,3302c47f,d9f113a5,581f135c,82280927,5f658607,99550fa9,7236d0e3,f8b6ec07,5e7804bf,461daee9,1f21285b,aa9e96c2,2e0cff27,c323f627,90838a77)\n,S(da248119,9d385a7,8468e86e,1b146fbd,e0be031c,3a19d0de,2f44a1d5,6c6743cb,c07c897b,5f76f6ee,f2c62511,19b37c47,5d418b6,1d2cda66,6d39ef67,40348cbf)\n,S(95e36a24,b1bc2e3,fb5e6082,de9ed432,760ec3f9,6f01dbd6,2e820268,dde82220,be6990d7,3abc4a3a,8f03b209,dcb4202b,52a74a87,1e1e3d01,7665e9d1,1ce1cb63)\n,S(8b05b060,3abd75b0,c57489e4,51f811e1,afe54a87,15045cdf,4888333f,3ebc6e8b,1d10f881,45db40fb,889e2ddc,e81bda7c,27f5b615,acd6179d,bb30f4fe,7f40fb39)\n,S(ffabca3b,764a327a,750bbb2b,a1cb8329,d43ec0b7,dcd8f728,55a9d30c,f3020f54,93970a65,c90ba260,5b2fb393,a4e994b4,c791965c,b60a1302,cf585443,6dd0f05a)\n,S(b3a85aef,ef35e4a9,8f0f05fa,9752998a,d3514868,b133e7c0,a18fb053,b866c72,30115ee1,c21e5b9e,3d6b36c,54e700e8,9ee78c7,e88a2752,38f46d1f,5b6005e2)\n,S(a4f1fd5f,4c233cf2,b9c5659,f666d51,5b78fc32,ebcb52d5,d155250c,c95b7ab5,91d19f85,726a1258,444419fe,c5219c7,33754325,89d92d52,c363d61c,81faa0da)\n,S(97b84b4b,7baecf13,94bf3923,2b58b5ed,9eb14637,d29b3c98,bec3e624,15bbb0a,497db4af,be8e7b3a,13493d73,ca92b4b6,5eac7f30,d86dbbf4,8b86f495,2d162435)\n,S(2ceba0d9,203e3666,75e78e96,51b5b57b,a9de5f82,3cc8569a,1c274d19,946312b3,d4c2fe86,f042cfde,41f0a88a,6d77c188,b7805db6,c6ab440a,488a75c3,8ed2b437)\n,S(ab8b1930,6cddaca2,8be57b78,b4836998,912391cb,c6a41e10,e91b86a2,3f2b7009,fdbbabdc,79fba1ae,9d8472a1,7a648206,7abed651,36892a03,35128650,374172cf)\n,S(2763029,1ff140b1,57eac2b5,9938f26b,c149705d,aa2dacd,6bb0d305,1a15b394,c2b6b32a,38dcb9e2,f4640838,c52f5ca0,55359479,86ecd875,a91504ac,49374ee6)\n,S(22d1edbd,1cc1514c,7f91d793,3e9dd124,9e703fd0,8c65ed8e,6cc79eb5,cafc78c5,7453e7ee,a53ae741,13024fca,208a3816,a93942c1,2378ff7a,5e65678,c0a85efe)\n,S(70d869c0,c5729e94,270fa559,bdb3fb8,b6146527,5ecedb7c,c8e7c9bd,acffe222,4bfcad32,8ce78fb4,617baec8,48c2c3a8,f8d41474,9c131657,115dcbb8,f6ec30c5)\n,S(a25b45de,da8d5782,64f60dcc,da97bd28,ed9039c0,6bb7c97d,d4a24eb8,791b1647,8fd84983,fd2ad956,32376555,4c43a664,f306f11e,2f030c7d,fe1c68d8,aa43db8f)\n,S(823fcd6c,9b237c0d,5aa38336,6737066f,3e77fa14,b975a5cf,39ca8a74,3b1024b8,e691a44d,29a4f2dd,e99c2ba3,bb6d4345,d1433e4b,d1c65d72,198f16b5,4424dde0)\n,S(39a5a63,8244aef6,432b1247,d394d305,ee594bd2,6ed2433a,3a96c4ce,5a158d0c,147ced39,dd8b8494,d57ff37e,a24cb108,ee4b9f43,50c556cd,32df8b27,626a8023)\n,S(8f9febb5,b85bb2dc,74aaf7b,81b27796,2a18f6bb,4879f5f8,de94aa56,b3206487,48daebd6,d4175a00,e37dbde,c2b57b3d,dc7474f2,ab6a093c,32a86acb,f610c2a2)\n,S(fc16fb14,2f500856,4509158a,5f6b4e35,6a08db53,36e9d3f8,4f7a03d,9143f60c,8e9326f2,7e02b73a,10f4ada5,9db85fe7,4027584e,6b32aeaf,58bcf804,dc1f7a36)\n,S(7db09ea7,17446f6e,9115d8f0,987eba83,eaecae01,f4201d78,8e292486,85c5a281,b4469cee,426d455d,f736b2ad,c12fd17e,79fd2167,c5a6f864,2733e327,c215742b)\n,S(d45d1bf5,28baef1c,3ea56fda,b1f8d3c6,3df7caf5,c7ecb0b8,564fbc94,a4d9a57e,91e26984,64830e89,1cd21d3d,81ad7000,ad0c84d1,3c05a191,c1a172e1,16aeccc1)\n,S(3faf0b75,1b6f85d8,550a9ffa,a7a26bb1,6a4d9c99,ae97678a,d43a1a91,75f03901,8a5d062a,a4e43cf6,5caaa39f,6386311c,be775d14,3b8d9368,b555c436,1844328f)\n,S(54608cbe,8e08a472,79cc5e39,c65e1ec0,1eefdba3,3b127107,4926b06c,76efd121,a7695bc,40def81e,48ec5f91,cc98fc2b,9bdc2776,71d05afd,cb789e20,c540f038)\n,S(559a0d89,50dfcd4,364e6955,23b56972,e8a201da,4e196d46,64dd580d,909823ec,7bf8e1ad,d6528b90,cedb8d5c,87f5953,5641e32b,6a6a7b4,c46e8052,e8dc71c3)\n,S(166e8858,b5e2b9f2,b1648c34,41e5fc28,bb305ea9,b0679c3,1a996b94,acf467a8,9c9b306d,ff82fb42,acd8a6b9,108f9994,dc1b7c37,dd0c9d2a,f64205a3,92e5bdb2)\n,S(40e29e8c,e66e83ba,a94ec5fc,3ae438ee,e5284f94,c5efe5a8,d41da738,38fe1941,7c71f71c,c01e7868,1cf154e2,73a23d0b,84ae684f,b0e709c3,9551884d,39acb2dc)\n,S(6829c8f9,eb659ce6,7f87fc76,4661b400,6aeb8b3d,bf674408,1a844380,72d4ee7e,1d35530a,8332dc05,54e82522,5e9ff30b,6647fcb3,304fd908,ea506945,ca22913b)\n,S(4a3fe05a,322e9fd3,93393b13,6e2af237,e25a2540,42d10e7a,dbb35d41,13658196,859a41f8,d4527641,a93c40d9,ef0ab175,78dbdc45,7edeaea1,f147018c,7901574c)\n,S(de5817c9,a675eb2e,c1567ad5,a6467cc2,9e9ddec2,177f382,25a5e101,9aa44f94,4050ebd0,5413311c,df17e625,6d4bf102,71b45e17,4c8fcaf5,ec36567a,ccf723a4)\n,S(fde29245,4f07f411,abdf1a2,6f3d8f38,daa7b9b3,1b51fe7a,155da5eb,5662a108,f2a4e6d3,7b39e929,ccf347a3,ac6c719f,f09d1756,e407371e,d98dfdc8,b727808a)\n,S(f28d3cfb,6eb98ba1,76fc536d,6a772861,b0917415,d08c22e8,a43a90ed,eff42436,4508be2b,b328250d,e043dc82,d8894aa4,1971fe8c,42e6cb61,e9d02735,1279d1bf)\n,S(c7655c30,4d1cb5b7,d0992afb,119a6df7,7bb65496,420f78c7,117b951,7f16e3ee,898162c2,cdb730dc,4b986b1c,b0de79c1,a348b0be,51b9070d,2e427e2d,e71dfdfd)\n,S(e57d97c7,2fa3ee66,71d67936,eb62f4d8,53ffba74,f2158d0d,7ae3eca0,7b4b147,b1e3012c,a3d92975,91ab80b9,a668ca13,1ed42660,47c34958,c07c720f,e1fecd64)\n,S(eada8642,155025bf,c0644f92,fe014ccb,6cd3d37b,76686a44,bccdf8c1,e22b0c01,89035d7d,71d71bb0,117c37c5,540f82a5,7152aac,af79fe91,6aed7d2,9dfeeed)\n,S(3e76267e,3f172198,9f9d7e8e,11fa3ff,62dbf8f9,77503e27,5567ec84,e60d0e25,a1835790,9631c6db,a453001e,c7e3973a,416f8bc7,e2fe0871,82d8a236,6e1160b6)\n,S(a11d97d8,9c262f35,2279e69,2d66be7e,5de7235,18e6750c,6972d250,91a3df70,d18df8a3,dd6fb016,df2e48fe,ab889165,44768d77,e9488b71,fd31c6db,d52a69dd)\n,S(b16e3f75,cefec06e,edd54bf8,dae7cc29,a5ab5208,fd58d787,922f4221,f5f20651,57fbfeb4,5a6e32ed,74fc1989,16909891,233ae90,c539b81d,a758761a,a6d0eb2d)\n,S(37de800a,3f73ea6e,9eb564c2,faf147a4,837339b3,44a33d9f,beb25784,c74628b2,59339259,9da55803,196b7e5,3596aad7,e33fc96c,fa2ae0a0,2f41ec13,e6254050)\n,S(6f68412d,65b3abaf,6fcb781d,8b6e6baa,4ae57fb0,9325a1f1,9beec438,cbd68055,884fd59d,406171bc,b31042,21abb5d,27dc1433,ef49af08,ec031543,2f8d3bcc)\n,S(91479a9e,6bc5e261,24cf0ce2,b52f070f,980f1f9a,f60bca79,572902d6,cb6e4366,2304f70a,22de4435,99f6025d,4b13be27,47932524,112f64a,ef935d1a,9c2f5288)\n,S(8ba6b0df,36ac8708,8c1e7c1e,4177dcc9,4cceabc7,4a6c7701,8358c194,4d19bd8a,e96b720e,e9d515e2,922abe8a,177ac755,989dff1b,789a85ba,ad17f859,62ab9ed4)\n,S(ab152195,871f3fcc,58f59a8c,a35514f0,f11b8a69,54e4ec9e,f4aacb7b,29d567cc,c1ddad48,623ebda1,42899ad1,75f88ff1,965ec1ca,651b419c,3c8ea037,f267fb4)\n,S(7eb23f48,5eb92bd0,1c0e6448,e19adc22,6ca45c46,d4d5c756,e552ce7d,551600c5,953e9b12,4278b939,7b3de07,63e30c55,a300ef97,a8587328,b3dc27b1,a7c57ac5)\n,S(b23f4c2b,a4b2700d,c7520a92,25890491,e0212fb7,eeb1f0a,2f624905,4e21ee17,a38b6772,9e95b3af,2cc7d5a5,c10386c2,8a2c287e,6349f811,457ae0dd,8b598530)\n,S(85d2e723,387e55b6,a2c1a02b,96cfad64,67a6c12e,b75424a9,a10ab77,2769c2a4,727abdac,223898af,1b077fb,7d481434,ded380cf,21a131d0,db845150,c8e4d303)\n,S(27c1715e,8dba4cc,41383d59,e669f66a,54ae6901,88a794be,9fd8da6c,9b09273d,2767ca54,306e6ca2,3517d884,1e7f30f3,e16e22c5,cf2bbf9d,998d5cd4,b5b1a266)\n,S(e70b8cd3,7f9a5e8e,9e0c4fb5,6f85a6ab,42cf4042,4080350f,4465cf8b,95eed89,2e3d8c58,94788d1b,9734e93c,7508cad,faacdf06,319854fe,5ec4b0fe,6b0cb31a)\n,S(e23dd455,24058396,98c81a39,f3f076ae,93932c61,d0e7f65e,e2c2013c,dde956b9,6c53cbd0,cd8ab8,bf5cef85,a8aa0b64,52b57e79,cb53315b,1dcdb68b,78cf77c9)\n,S(5e923f81,ccc49813,11a09f2c,47677cbb,9aaf0832,10c683b7,d7a07399,4d919c9f,604d7112,e64cad06,fe0e64a8,af7054fe,7059667c,fb5159f7,738b97f4,38306873)\n,S(23d9f253,1a9fa278,e02b71d7,113fde6b,1380e543,633286a5,60037ab7,70142507,55dc8247,b6eb6119,a6ef49f6,bb4e85e3,a9fd201,4f696564,42d3372b,fe44a9ac)\n,S(eeb23095,ad2551ef,15dbb281,5ef6d252,886c79ef,12c7318a,50f5d89,d73b8f24,d1a71b94,b9810ce8,eb0c3896,3e7cfb90,56a80f82,9d384eac,67d9859b,11ba1ddb)\n,S(64a6de7b,57bdf7e2,54beee53,6efeea9b,899a8436,e421e3c0,e7a2682b,54b7c21b,6427936e,2e344fca,c402e2d,2902fc6f,181ad190,e3f0d537,cf40c96f,27b4755b)\n,S(9e4676ce,d76daf3f,1c1aad5e,51e700b8,8207fd45,3cec846d,779f02c2,cc270073,5685c781,1d7610ad,4655019,5d8a844b,6ffc4acc,eb458c38,d9d74f4b,cbdc9e42)\n,S(95ee1228,80616ba1,76e0ee23,14428c7b,1d83c635,6ec843e5,d134b359,8d645473,7be34c64,41914c07,58081278,9b254c71,49a60d13,c6ee3a3,7d12e29e,a3bf4054)\n,S(e53ffeef,d92081a2,f91df506,6453cbdf,d0b1089a,c598da9,94fe4c03,fc6516ad,560f02c1,4a600d02,a2e70b28,5164618f,5dcd1b67,ac071929,ecc1d891,e4c59c2f)\n,S(9c332744,7c75488c,5a14f1ad,fa3d9974,90d4eb10,63afba83,fafcc3ea,62a7b68,9cc759fb,9a7fc3b,4d0ff7d2,24d0cc54,cacfb78f,5590eb8a,d689b6ee,19791c63)\n,S(e826d500,2f4315ff,77eb22b0,c8b74142,f1d1037e,81e3c58e,4ea39430,973d3c45,3a466e58,82f971f4,3ab9316d,fc7d53a4,e8ab16e0,2ae75045,5d8d1999,bc8b65de)\n,S(ced4df0e,af93b5c4,8dcf196c,6e9b16bc,dd38a87b,3fd67512,d387b388,115e13c7,fe08a63b,dd149dca,b4f2c930,99cd11e1,8c754271,cedd597e,910462c6,d68b74cc)\n,S(b056ed27,88ea50df,2b220182,df38f54f,8065e36d,e0218b27,ee8c5416,db7eb33d,97338375,cef457f9,ebe43aa8,28e9a1e9,8d514d9f,fc300a6b,a1a83db,dacf6409)\n,S(35dec74,2fef94a,7fe60b66,7341f6a3,eba030c0,4061d156,1c9ee288,5b7830df,2599121,39c810fd,e7f02fe6,eb6e9221,3eb8be6e,4d8f045c,aba1f058,789b933e)\n,S(3f23cc8,7733213f,d2e15cb9,942af44f,d7981e97,37c5af1f,81addfb,324e020b,24e8ccc0,d43ccde3,4e392455,dcdec100,7ffc0c61,3b5f865a,c8afc051,756e8f83)\n,S(9ba96c76,c0805cea,d7ecfa43,dba0d86f,c8471dcc,8bce9bc1,e06537ef,2bbabbdb,c1a3c433,1c2ae04d,be2f8e3a,8f4f07b1,622d9820,607ee3ae,e93bc37,f943def3)\n,S(83c1479a,31475395,8d510396,5decc9ce,1d414f41,610e2ac5,c2e887d7,d16a3815,84d4d018,1354cd46,e5f39bbf,f9fffbba,c123d470,d07c292c,7f085740,289b5b7a)\n,S(bacf627a,2db11d88,76e6714a,2857db8,a8d7010d,7b349ab1,fcb5ebc7,efe0a32d,a287dc0d,a44c448e,68b777b7,36ace20a,14b3e586,bab7ef5e,d57ae303,e8c83129)\n,S(73063c55,30129f79,10bfd2d3,a0147167,4ca888d1,d64d24d4,619c5cff,2776ebd7,d57941d9,44ccf8c8,2fab0362,b14986c5,9d71906c,d28584ea,368c4bb2,2c159489)\n,S(4ee8632,df55ad15,12ba4ce3,4ddb403e,a3f51a12,d445a011,4d08a00b,3b5d6637,c29f7199,dc30275a,39ff01a3,19723d19,91687901,9616fd81,88ae6c45,92b14820)\n,S(fc46e66d,68bbd41f,98b18a16,a23efaca,8f5345ef,b567786c,cd42afe7,d7e7ef28,8b42a2df,abf8849d,53daf38a,4a4c28b9,a0238231,ec8f69d5,d702715,a643c18a)\n,S(a71ad1b0,158d7978,7eece5e,2a3907b1,3f9b6b98,aefc7963,8a9de618,b3a7dc13,6fd7e86d,a956c464,e538a864,41b9b7d2,ccfc5c44,e80a66ea,4375e6a1,ef08bf90)\n,S(602185f3,6075a67f,d7bb9957,60c6af59,61a7c553,d51d828d,ed37768,f1860a3a,90d312db,706b835e,647a027c,e7a89d39,2265cd4,dd52e802,165c32bd,4d10b2e7)\n,S(db0fca83,76729191,b9d9976d,37dc62c3,36b4437f,943706b5,98e7b7df,607a77ca,23dedd6e,8eba7ebf,e0c9f0b3,2a1802fa,78699a68,99507dd9,c4f4841d,82efc29d)\n,S(6919b861,598d4f09,2a159909,fff8de82,237d0aec,339d884,7618f257,a4a54939,ab9f82fe,1fa53aa3,b85c0784,59a4e191,27a1a214,392c3ff2,f3e1cbdb,6f34b90c)\n,S(f4a7d2e9,f1f51ba7,c3cf0a5d,5d53a00e,877ec118,f7e39e39,299efb2e,8074bd59,9f050900,6aa6ace2,da4e6380,cbce7983,c9bea9d,99741be0,ef17e190,2c5bd257)\n,S(8a5d7210,d4f1de13,1091ae23,2fffbd96,3927317e,54197656,366b2e35,cd453da3,9aff8a1b,5b71da0e,a6558a05,a9306adb,4cae1004,e532aa98,abcd1644,b0580a54)\n,S(99eb23dc,e40d7159,b0a0406b,ea04b87a,2c9195c2,2afd79f3,f938018e,b8e86f16,2ef21938,a66efdec,7ff6cdda,a79fcabf,b1f17fde,9e80db37,82b47d41,64ecff66)\n,S(3bf16e84,1a874418,ac7f0d0b,9abbe781,611ad0e4,7acbe904,a99ba65a,b4d37472,1d3cb9f4,e1948cb2,fc88c0f1,9277437c,7d1138b2,8aef4355,1fb35121,a3e714ad)\n,S(a3ef83ff,19eb394e,b87c133,36388a86,561811ce,5449895a,f459fe4f,e7f01f3e,1955dd39,8bdcaccb,cdc7ddb4,711d08e1,9d687ccd,d335a4a1,45d13a4,8178cbab)\n,S(26816f51,da9b4e81,3edc024c,223dd6b4,5a344d11,f5ade552,63ef17e,70b1af90,46278e1d,1d6b67a3,57280967,6604e897,65611b7f,bbccfd30,22007a60,294aabd6)\n,S(5e1653c0,d640f148,ecbb14f6,97940b0f,1d47dcc9,48e7525a,909e8444,afdea823,9b8b81ed,e7cb8350,ecfaef22,92bdc528,8e499cc9,6feedc86,cd45cccf,4cb092c7)\n,S(1bd88e45,b0d3694,56348c23,125b12b6,b7725d6f,addc08f2,47fe9dbd,e828de9e,182939e3,2d8bddda,577dae7c,a1d40164,9f6faf68,69808fe2,98dba2f,b8a95db0)\n,S(4b03fe06,3adc4e40,315e754f,bebb7802,b80ab716,d4201fbd,31b12c5f,d9b73c02,a864d0a8,e2c5e519,ced537,e03f98e3,a5623c31,ea4a430e,73e8cf54,1c80fb06)\n,S(e20a515,7818f33,1ed927f1,3c46f3b5,2146860f,d085e68c,5884f1e8,45d35f61,a1c12002,1a79d6c5,89e466c4,3fd48f66,a924e9a0,a3d20db0,484875e6,96bcf328)\n,S(e3d11a4e,74a1e1cd,8be24d87,4885e1eb,4aaecea1,c802ba73,2db925c7,f81e37be,8f1ec01e,a1ef01f,63806787,b8831d4b,22b0a9c,7b44bc7f,73d2a3b6,861645f5)\n,S(8a233215,57fe0dbe,e8e92b58,4729b163,da71fa32,f400617,d1e2a081,3e37f6e5,af5e471a,bb8c7505,aea1ed74,bd7798cb,267dbd29,61c35f5e,93889056,aecce950)\n,S(3bbc0a2c,b43f4683,151070e0,7015cd6,997e8dfa,99685cbe,99f9a76d,6851d20d,9a1dfb8e,a5f14c40,b9968e88,b6083111,fd140843,96fa8278,bb0e351b,7cb4f97d)\n,S(8c04d781,82d83ab,e8c59dac,9407b4b9,65380f38,39431184,811e133c,911d1deb,4d74e493,fdb22316,fcf21340,88039534,c0a3e098,7198ceab,4a65260b,4c0a3db4)\n,S(467d4d0e,72312cde,df0aa7c4,62e03644,1ed9f915,c9e7e8c8,5770a4d6,d6a0291f,83db40a9,d7c2954a,30c624dd,f11d565a,f117e240,183a81fc,d4dda1d,70a1ce32)\n,S(b62f60cd,8e55a101,ab060186,941cbd52,ce73ae2d,e19ac195,d55f498c,45a3dc8c,59da48b0,7c6d2562,eeb0ed09,158cd20b,4a5108b8,fbf6fcef,428cc301,b314ef41)\n,S(6b5d6210,f98aee61,df36d7f1,9546efe9,166e88cc,6492183,379dd1b5,cb9e681f,dbfb1748,59c88a6b,72c8afca,830045c2,7c6de87a,c47228e7,7f246e6f,698a0d76)\n,S(88744d04,e8c7842b,68d2cc9e,f58977cc,548768db,48d3c286,49ecd0a,22300c97,84573aa5,1ea3c51e,5a0b0e42,5c7c90b6,149d2993,91085bc0,393f58a2,8fb9c38c)\n,S(fdf2c824,40f2ac58,19b06571,216ad938,d0218ba5,be4d3d4b,ada80e32,c32e37c8,c2abc4b5,9e961ffb,e48c6f20,58602dfd,9172031a,740668b5,5876d5aa,5d538f74)\n,S(4d2fdf64,1f5a883b,322273bd,24755405,15178ce0,9b4ce8a9,36648957,ef777559,22ba1d01,210bf31c,6421b89b,9b3217ae,b2837f01,c344a9fa,bed0b385,4aa41b11)\n,S(ec7cbca1,e743bfdf,81af3fae,a5c64a8f,5a54dccc,2afca269,9c461592,34ddc633,9f193da9,ea76a050,7b528c05,e5a10107,dc5263e4,98fcee29,5f57816e,4eab0917)\n,S(ff2fa113,771998b8,b801e779,3cb804c,da9cd6df,9d371943,c7fabbc0,44b44fdf,962127f2,1ac57670,c79d966d,b8cd6f0a,2aec6824,22cac54,23746bcb,2df6093c)\n,S(6d1b406b,2dfb02d2,34ec21be,c436d6af,4fd418c9,29f175ee,6475e77a,8a57580,b8945668,9dba8e2f,8f0693d6,d3e7b602,f157efe5,38b9ef07,b2dea23d,bce895eb)\n,S(4abb9dfb,449e00ce,46476727,dc6b96,317bff7,74c21df5,87bef539,644d7963,6086f2b7,c016c69b,2ad80786,89af1c98,4d6dbba8,7545d8e4,9c2c58bd,f86e6407)\n,S(db0c51cc,634a4096,374b0b89,5584a3ca,2fb3bea4,fd0ee236,1f8db63a,650fcee6,7ec0bd2b,aea1ae18,4bd16fd3,97b0e64d,5d28257f,85836486,367fe33c,c5b6e6a0)\n,S(ae6f6dbc,d0664919,a65e02ed,646de704,6996a382,21aa8e74,4954d22c,37fdb287,abe70eae,f8ae7404,11931379,19f9102e,c5bbb2f5,f5fefd1b,b76fb6a1,c3f2f201)\n,S(aea3eb97,cb321f30,bd0771a9,17fc9770,f4079a62,fac51fda,63dd3ac8,d35f6227,b6a53416,398515c5,e9133704,a287dfdf,878145a1,4416b525,6f1ae46,6abf39b6)\n,S(90c9f8cf,711d50de,81f7234e,f6c13af8,39355c06,3e891ded,51bca1c,852233be,8d95778,18f19649,f2d3d452,81358783,17d2c32e,aa01551e,d7fe21c8,3421bff5)\n,S(5ad7ece5,ab1d0344,5528dcde,34b48efe,fd954aab,920260e2,1495ed8c,86d976e0,2df2163b,2c3c63ab,bef274e9,3c46b6e0,62ac9444,b17843d8,70014b03,f78569b0)\n,S(b6ba2e2c,8e942ef0,16e6d3ee,13ab0cac,1d80ae7d,588a831c,b7844e8e,3bd28d9a,41180a35,f923dfdf,501b6b06,7d241160,a2ebf453,d00b501d,855ddb7,1bef7fb4)\n,S(7e409bc9,bba26c7d,fabdd450,bc84589c,799555a9,c6809cc4,13a4c674,7ff5f37d,c518961,9cc5afe2,e41c4260,481d8fdf,6066b034,19fe030c,e423dee7,79c9e6b1)\n,S(9486cd14,70b2f2ee,28d01060,6c7c4c22,2c72636a,a50b64e0,3008516e,de4f602c,886ccb8c,fc5b006f,df931785,f732367e,c062e9a3,49f452ce,aacfb74b,deb467af)\n,S(e7c11d7b,c8b07205,1e1af6d8,745ba05e,94b1ee9c,5482d83b,1af9ed8b,21338d2a,fdc4d293,828cab1e,fc9062aa,192f35a9,6ad4683d,797fcf79,c74852de,d75c8e50)\n,S(dfe627b,ff315cb0,1b1b67b2,776ded35,19b1a85d,8e802217,c98000f0,93d50bcd,993c55eb,bb65087b,6fdd2480,c9d68e6b,ea0f69d1,b95efc28,5f32a8ee,55f9e773)\n,S(a0f0cc17,fd00a2cb,5fc7c981,860f02f3,eb31c26d,54841dde,189eac65,a446f516,bfae884c,31d58a3b,f11077a7,d3edd37e,14bbe4ea,bd30fa74,ff5c295e,4b3b8969)\n,S(c1dbb6bc,bc14286e,d6eef926,c946b52b,d37e7f53,91fe1dd9,dd7b72ba,a3e37338,67b02d87,bd336882,f4b6fdc8,1a3a88d7,aa5e2735,139e1bd0,e793e6a6,12df7bf0)\n,S(20b9065b,c7d495c4,c92cb1f0,6eedf5ef,7025511,10343eeb,e82505bc,bb4bebb2,a6987316,5c231d92,bd21a4f9,60242d9,4fec71a7,4b24fbd,55d51246,10756835)\n,S(7bedfdd0,c4d8c38,dda9544d,38fc8786,55ab9a66,4f8dbf2e,3c54810,eda69190,9994f0b0,d4f52de,6ead0049,172fee05,365556e5,3c9d4591,690715a6,f8af77a1)\n,S(26762eaf,997983f6,ac63815b,720e97cb,5adcadd2,419d368,df4d385e,6b5918e0,81f5448c,e11b4dbc,24be2e9,be5620fd,25f0c0d6,76aae549,2792188d,5a27e6be)\n,S(7148cae7,ee18e152,c3354ff5,dda86e13,ea14f175,92d0d3d9,a944f4cd,f387bb79,bdb35fa,f6f86e90,41465efe,dac6bc0e,ffd42a0b,eee83365,93dcb4de,2310b18d)\n,S(27e45dd9,33ae2c33,a69ae00b,156845b5,bb4d8f06,593c2723,5038ce17,87bdbc90,a2bce33f,a93579a3,f8d9c75c,9271a2b1,7dfe36a0,590f2db1,f7cabfd6,51801ac9)\n,S(af0c7215,5b28ae8c,2a2d79c7,d81e603c,d0539c11,fed2aa98,fa2bf2b2,d7d6b7d7,ae6bdfcf,a25109c0,b80bfc,71cfac3e,3b5b26e1,e4f2c856,40d2c69a,a7ac41f9)\n,S(7b63c408,d4f8d34f,314e609b,21e8e372,de0f5a19,1accabec,7ecfe02a,63cbabf4,aa08009a,78fa96bd,8ceb6f65,e88859b6,236925d0,bccba7c,e0db29be,94f16327)\n,S(ab768853,14f3e88b,d63cffb6,8f4f3232,4f4b4801,41aeff93,94d58f9b,85c6890c,1a71c833,d6d96bc1,c33610e,d7ff1481,c9ff9841,157c59e0,5d3a036f,cf7f192c)\n,S(641437f0,7ad75112,f8375487,cc0ed859,ccd308da,4b25e5a9,953e351c,9e3bd32e,3c58f7e6,b255346a,f50f1ba8,3f008662,7d2ec950,84c326b0,ccc3a388,81a9b131)\n,S(f532fd2d,600ed478,c1dcceaf,fd01ae87,60f7ecc8,7739580b,9b4a7649,67a082cb,7393514c,71117d7f,7cdbb4d6,c803c9f3,221847ad,697c945e,440bcfa1,1285fa96)\n,S(33679959,2c4bab44,d89e6f60,8f882938,db73dbd4,75f0dc3e,e1fbd075,b1c7631,4c1f8004,6fe89cf3,6d078251,5ff57cde,17125d62,5cf675aa,1fd70163,49694fbc)\n,S(e184c16d,2a34ca57,b06b5396,28cac285,6f18b7e0,32970a5b,e2221a07,be56c9cb,7dffc17b,51ef9c4d,f16ab068,8c66df57,d646cd34,46b509c7,7f85e03d,e2c5bf73)\n,S(f8a97d16,2fb49d55,bb8de990,9a20c1e3,4f6ce6d6,efb8c68f,e26c884,6415d419,3cd3cc53,4dbfca01,9492e161,61f2e86c,5f20a83a,866874a7,ded4c2e4,42061146)\n,S(9eb6aa2f,6c6ad821,d46dd612,38d3dc53,28cfc406,ad71964e,b32de0ea,12475781,14501a83,79d32e09,3664ce34,1a419b28,53dfe3e8,fbc204af,cb33e347,6c45c299)\n,S(ebc2566a,68e68955,e1e42740,323fd401,7c40315f,ceba7642,5f887a3c,3602668a,75e8109,96ff56e2,655f9f85,ae9ec9a5,fab3bdc1,42ef063a,a06931e4,d4c7ea39)\n,S(55646438,a966ce5c,2fa5b29d,ba4840cb,ab9c5e4b,4074a9fd,674b7eb2,f52bc392,34631a86,76034a89,cfc3f68a,45cd52e6,2987d80c,e9a8e28f,a37020f,981c8d66)\n,S(b87f8309,befb81f3,313257b8,c7dd914c,82eff5d,6729f2e7,eceb0337,7b16575e,bea66832,59e4002d,6fbdf03f,b80bec1b,eda5e1c2,cc55c630,deedb7fd,a96ea298)\n,S(45957585,b440d63e,acf598b2,16e435e,24b6cf15,2892c8d7,953471df,70a0a93e,f4cb6260,776a4f4f,23ac366a,565067fb,b29739fc,233493a0,b3eaaea,c4b71427)\n,S(2c90f64c,8d9c42bb,1824c821,8f9cc057,3fe8d648,b960ee11,1487bbe4,9648ca87,829bcd57,ac643cb6,9f000a9,f22fcf57,69bebf7d,6b1d8ab4,da21be41,d3c25a8a)\n,S(eb327ac7,779c9abd,9546a3fc,c7731729,2e753912,2ba9f7be,36db0548,144b5efe,21ac2c85,8d2fcd38,8c32c594,d6e74803,2cbbf365,238565a0,8c439190,518c9435)\n,S(95ec7e2,272ccca7,aa2b07fd,d37d0f08,daa35418,1ae30e6a,dba0cb1d,2c6d007d,733786ef,59df6050,552ac913,c10b8890,2d589e7e,4f740f33,75f78fc5,2ba12b5f)\n,S(4b7a6698,8b4fa080,f27c845d,7ff17371,91104a29,2c6195f5,fc367c69,fc0cbbd1,8b043bd0,a3605612,87b38fd4,d99b29e4,8e52494d,8241207c,9284581b,63a85b8f)\n,S(89b2c58b,6df581df,352ab28a,619027c0,a9233792,fc6525e7,47dabd31,a342e6b2,300b1b34,d459e65b,e265edea,203b74bc,9b053feb,888e81f4,10045a10,d7f53a2b)\n,S(41099b5d,9f6a28d0,e4a7ff0d,b75ec487,1c926327,89f0c800,7ada8114,9bc43cf1,2a0aba96,2e2b92b6,e949253b,e06588d1,3e07919a,3594b26,995c15b7,7a62cae5)\n,S(bcb0fc64,9ec508c3,507396b2,9a663555,8825ea9c,1389c817,af7fd616,7229be4,168c7992,cf3bf5ab,6c3a12ae,922e647,13664db9,2d7bfe5c,2c746933,3a07d606)\n,S(7a3fc958,5a6256af,9e314ca7,55a8096,9cd3b3d6,f70349a5,ec719cd,ed8b762e,fe8b280c,29cd0716,35288526,b7179d90,dadecd78,39128f22,17d445cb,d3df1346)\n,S(377093e1,b968a35e,e0f229e1,e656da9a,7583c1e6,d06fe1,c89e3f06,61a8176a,e7c0860d,f6c9f461,7e6a4dd0,b8c0d800,6aba8e88,20aeb82,e6e0f8a0,c2c601d9)\n,S(c5eff3da,f4a5cccc,f1f27a93,361301a1,919b1dd2,5a98ea37,5ba63f14,4aafecd8,34e11634,26f983dc,18c8a02c,2222c2fd,a94129f,4e3f1d67,f424964c,dcb97a1c)\n,S(fc7919,eb560d33,44230f72,8368afcb,3c0fa6f1,52ec54e9,84ea9ccb,e63ffb27,1c7d3782,af766ff9,bc1cb838,8e4a7dd0,a04bc4ce,adad3fa9,4132842a,9859a6b3)\n,S(2783d7fb,49386d72,54434cd6,edc6f46f,b3118322,43d381c6,287d8b24,861ca5bd,a3aaf271,b806ac0,e3c45026,28f89c79,e4c68574,81710111,a9316e38,c7fa5c70)\n,S(7407a478,68d4e0d0,f77f8949,5e5bbf95,88f54a6f,fd35d229,8ad4b30f,2d8a02f3,1250d562,96e18cb0,aa5b393e,a933297e,debf3d94,59ac1ce,24cc11b5,87fdec9c)\n,S(c2d2cce3,2940ecda,77ac108e,71544079,c5899fa4,f8461df6,cc54dd21,a861a321,f0beb1fa,40bb8071,928b05e3,ecc8545b,a919eaa,e830db72,9e6de85b,f05a1909)\n,S(8cf6b189,c5051956,6a94e1f5,ab5e9530,d459a935,4cb13eb,349fac3e,ade8a56f,bf6a9d70,32e52886,ce6d06d3,b22d47a8,327aa788,1621338c,1606054b,cfcf9c96)\n,S(d6b07586,ed9f8471,f96ac5f,53277d1e,2deeaa2b,7fd09d51,ece6766d,29a94968,dab4d4b4,ce5655cf,4aef0d0d,5e3fa292,2f79041e,d2e23c9c,75be83f5,f09c5326)\n,S(a720b733,60a03edf,f33a0921,90795834,9e661d33,44da800f,b857227b,ef4d647,1f213c6a,721c2d82,6037e3a5,a0f4867f,13d79dff,bd44f5b1,1bb5c0b5,4884ea63)\n,S(558a5698,3b03c6c6,717db862,e59dd075,b39f9ba2,ca01b0ac,95a69cec,1f3a5ff7,7e07c752,db21b68b,21738458,a045fc60,fe3ae869,887fd557,92ecc6c7,d4ffb1a4)\n,S(b927dfc3,278668a8,c5329941,f11d0e0a,a7c2d9d7,f8d6c263,9cab5550,10e14ca4,3ce83725,9954227b,b420e35f,77705225,72f4d854,999af552,4b8795c2,b723388c)\n,S(2b70d499,1085aff5,88e23ed5,ab55a374,3c35f71c,651c0165,13f98ecc,4f0e6da8,df413b4d,aa1e5c9c,a2398469,7d82762f,a701413,1cae25cd,1a94f02a,506a8b06)\n,S(b8836cdc,f72f6e00,99a9181d,94ba77e9,e1368e54,a62e1144,1421f2ef,2daefe56,9ad452f,e31f26d,cad7014b,68ceaeb6,1beecaa,5394c359,afa52209,e50427ce)\n,S(252b297b,65f0e23a,9788b48,f33809a,ec66b445,cd90db00,4dcb6a80,c4af93a7,8cc4e0c4,3c346211,736a3bcf,c24a58bf,9f77c7d0,c53350e8,6cb0de2,60916838)\n,S(9f3d30ca,1c15cc66,8efd5fa0,3d6b7bdb,d34f2704,cd729892,aad9171c,debe6330,448b6434,f95ee7a,bc056974,f1476171,353d9b98,4e22057b,38662327,b23211b0)\n,S(8225e16e,5bc9add9,ff8a771b,5bc7bce1,653b545e,4e54b9e6,6e2d2985,2fd35e49,6254c5e3,aaefa2c1,6ca4e1de,87f09d94,df836b9d,d100612c,7174aa75,7d0570fa)\n,S(a7dcee48,4d6e99b1,b72a80b7,4de255b1,74f4767,4d3c5799,4669ca6,aad02ebe,1d6f0cfa,76a2901f,4861f541,bef7a948,78586178,8c7c42a4,2db583ba,1c170a7)\n,S(a91445a8,5d4ce90e,98d3372f,d2c664b8,9a6baa2b,a396fd1e,210e315e,809976b4,adc4c68b,99b072b1,b51d1512,cd94007c,72deacf9,4e7c5449,f1d83876,78b1d100)\n,S(7462c9ce,907c9655,75c41096,3510e00f,6f6ea6ad,886cdc79,ed685ee2,2a7ce1f1,4ffa41c5,f02c2299,c42df5ac,79cc4140,47a854e8,332f8f2a,e67ffa20,bb71c7df)\n,S(d42895f3,dea495bd,af8e36bb,6a79f234,dfd85544,965a8506,5d38ca86,28cd4f40,2fedeb18,13a11c42,e7869b20,7bb8486c,9821710f,a80d9bbd,59c92ae0,b50d9cf5)\n,S(ef9b6b62,ce85588a,f13434b2,7ef53d12,e8291e6d,76a65669,c29d99a1,4d388adc,159f5fcf,9af0c962,ed907955,e91407ca,80261255,45b6938a,db18aee0,9bbf912f)\n,S(4003f1a0,bc659daf,df5fb7bd,bc96afff,92877c7e,2a693f39,2afb06c8,fdbc9f32,ebffcaa1,7458f0b0,28ff1dcb,74be865d,7faeafa6,c2707cc9,ea685eb5,7961fef9)\n,S(4390488b,6b03d851,648786f0,7486f5cd,aa9ae1d9,4867de,bed7036a,6ac09a8b,78329de5,a10db56b,1c35b88a,21ddf393,452001c1,29a0bd6e,5dd76a63,8682f07a)\n,S(ae6da0d2,9ea3fb66,b6006c56,5dff8b41,6074ee16,f9ff86b9,60574067,abfadea1,74caaa63,dd012a63,e76f0916,f370614e,29e3f01e,b88b49c0,5ca33234,c11cdac7)\n,S(78f879df,98614721,b7c65652,4e806f6,35942e0,950514fb,2fad8a86,bbcfc72a,4194e58c,478ae80b,fab661b7,ffb85cc7,2318aad3,88d61c68,a755296d,38281ac6)\n,S(80684365,4f41b0c6,d6cd51cc,838355dc,352e028,7b1c1d1d,edd2f96e,5fc97e01,8b0c223f,13c61b4e,1e141a0d,35f29a7,7546bc7e,3b1e5c45,262033eb,92b62461)\n,S(29509d9f,4fd975f4,6efd1169,1d97d0aa,f83b5934,9c797010,5cb3908,4b87466c,1477eb75,69a0af96,c9cfccbe,135e3c86,a33de585,2ead38da,8a0eba6a,6d0da81)\n,S(191d1443,3d9c722f,c1532fe,33c63a9c,4e3d5741,6ebf799c,2d8ffeae,df1dfa4a,5bd00409,b6b571ad,745ecf83,91884eed,a5e3c7b6,65ec9706,eae4b4dd,703a2cd8)\n,S(2843d42e,d2738168,5eed65af,eea82bf2,a50f0e1e,3db201e1,ebf8b159,1b0155a8,807cea66,c0fa9f53,b47e6e2c,232cb225,77edafb8,99a6f98,ff87d091,bbc63ee8)\n,S(5568b7b0,9656d36f,5347514b,8e8212f8,e96ed02d,4516c018,4d653bd1,2bc8f644,5b44eba6,54836dc4,3fbda30d,7ea36406,4960459b,a4128911,8b2d8638,50e60d87)\n,S(5b84e0e0,809e44a6,9e8d81ab,595b32f8,4a7dd421,c073fd6e,5f38ec5e,b145e803,1a65a2d0,fa791ced,72fa1522,ae431155,7e6109c0,fe934243,cb43d3ef,ad13d398)\n,S(ef42c56b,dd241071,47e1519a,18d32910,675ba842,92cc8ede,900a64ea,bedfa672,70151747,33359977,611e0c25,4addbf6b,26a618a2,31474e3c,c9e7bcd3,8bff75ac)\n,S(48dff2dc,b50d4a56,4be6ed00,3b1415b4,adc653ec,87eae94c,92b7c129,5656eb63,a9be97fb,53afecf6,f0bc59e9,8bfad542,fa29e63d,f701f6b5,f0f66081,8d643928)\n,S(672e90f5,246ad174,10c9a2df,c22b098c,d1923bd4,19fdc337,f881e4fb,4ae938d4,73fd3380,1fda6db6,883e678b,31e5f09e,f331b624,5617ec9e,97aa28b9,a1781f19)\n,S(59cdb9b1,71fb819c,909e094a,95dc15de,dbfe5521,4a7cb723,ee7cb761,4b315cde,55ac212,670b4a63,ecf3f8e7,3082009d,7f2d38d9,e490ca18,7a6db01b,e88351a2)\n,S(5ce38d0a,357a58ab,134db879,b99994c4,6b827f82,8e1ce8f0,43108de,ad2ddb18,5e816202,d9c1d86e,c2f84b33,ddbcc51b,94748c67,1089c9c1,745a14d9,3b97f716)\n,S(c982196a,7466fbbb,b0e27a94,b6af926,c1a74d5a,d07128c8,2824a11b,5398afda,7a91f9ea,e64438af,b9ce6448,a1c133db,2d8fb925,4e4546b6,f001637d,50901f55)\n,S(383cb084,79e61bec,dca81d29,7796d00f,60bfbcc2,83c83d31,725f5329,839ec818,26e26fa2,49008933,8bde0498,15f34d9,bbc3426,ad8644ff,db1a190f,79dec91e)\n,S(e6945731,2ad4f14a,71917b52,448011df,28b88c9b,6ac84550,248ca4fd,102f612b,30ed2082,51fc701e,5ebeddda,c9eb0b44,c81cc86f,9706889c,1b1c3386,4d76f53d)\n,S(2d0071ba,8f799352,212168d2,1262a729,250809f2,24fa58a7,f283c4c6,bb9976f7,cdca6901,4e4873f1,16945544,800079d,ccc118f1,a5709b03,c872b017,5f1dfd8b)\n,S(c82b9457,65b74fbf,91cf35f0,679877b9,da35c2b0,8437d789,8d748f22,1e927e,2e504dd1,bb06bfc,7e057dae,9aac8f07,b57a0f2a,39b1533d,9313d9f2,45fd6a2)\n,S(9c1a4c2e,7eac21a9,fed135ed,e737dd19,2654eda2,fb3a4227,63cb6328,75bbf0a6,f3134b6c,12f71c58,226c9128,9b7b5a06,80eb6646,e9da2e60,20008efe,10e9197f)\n,S(971d3d9b,bc693222,ed8bd645,e80b7cf9,9b170a36,2d57753b,6a2ac27e,8d6c9b28,d63d49a,e296dc2c,6c4a73af,7fc5e86d,e2039433,f3858980,80a36f7f,91d22e2e)\n,S(f5493a73,86bc1151,23f29f2a,e0619e05,660a317a,bf5ac23f,a67802fa,8b917d2b,e6adbccb,8b780530,2b305157,b427b8b5,38455e02,80133e23,9642306e,65e0f1d7)\n,S(831f123e,500e0a0a,e497a321,5ebde2ad,763244fd,40b386da,dde05537,99b6e014,35616862,2ff588ac,552fa508,ceef5ef9,ac04af0a,9db6b950,f44719c8,cb221d6c)\n,S(9b8ce06d,18474c,3394c334,2ef385d6,7a338c22,98e92975,f1728c87,897cfb35,76940220,b8dc3e04,7cda50c4,c1f53747,7ce8757,a4a3731d,712cea05,42a40d72)\n,S(f70a916b,a98d2bc9,60172410,42bf3e14,14f06cad,dffa7cb,1e8137a7,3fc5b855,f1b8c1f4,70d7896f,f39a3fbe,997a88f3,b5426d84,43c4023f,ff98fffb,280275a2)\n,S(2d2ab7bb,c44e7fe4,ab283661,2f621d05,a64d6909,fd94e599,92d52afa,c0763d56,53450e00,2a6991c8,68fe044e,8b61c2d3,c5fec8af,3605728a,e57d32cc,c55328e8)\n,S(8178deb8,c516978c,ea25423f,3a913157,321ff7c5,5d8058f3,dc9b9d46,f4d10005,16a71b2b,46c9d303,f4ae6a28,235249bd,f9c00146,a26b6bfb,5983bfb6,8d6ff4bc)\n,S(b470bb76,d012ba7e,67ef9c32,add59940,1f700ca,16003011,26e6a692,36b56a64,f7d093e0,7d179861,871f36f1,58d26987,1775f082,a2fbfa69,27cc2272,614fd95c)\n,S(164f2aba,837cac12,19b48eb3,30f02141,d3a89921,1cdb3f78,fe17133f,e2de29ce,3bc05608,95f7d034,4a9ec79e,b821c06,c2837c50,66925197,2c076374,871d28dc)\n,S(c77a3a04,2a86d2e,f512268b,35cbb89d,e6a210ea,883e2283,ec59fec5,12e725f4,2ebcd56b,edf1a07f,e587e592,8ed602b3,6d1db4e2,5b49e914,8dc9eedc,131cfba2)\n,S(e2defa1,f714cf71,557a3f1d,71c6abe8,11df5504,da38e9f,60ad335,3b11349,5ed64303,7a53bbc7,2f41912e,a657d944,c5107da,3b9ab54b,d88b545a,e045f229)\n,S(ee2d12cb,b4cd9e4c,163fca1e,5a4330af,35280ce9,cc1d57b2,d2112443,b6313e3c,e28b1dc1,a4377c65,838ecafa,bfffb696,4057fb6f,dd4baf08,49f9223a,ee153262)\n,S(4392c96,73e6deca,f3c39c34,f5be7c3d,a2109b45,2271467c,78f256d6,7d9e28bd,7fe4c183,ae352533,b049edd5,343a6bb4,747d63d7,d0f406fd,5902a886,110c50)\n,S(5972e2ee,167374ad,93a655f1,6008f49a,f5586b2,f81197a6,712ff31c,a0d6960,6d70fc55,d0a57c74,8a2e485a,d903bd72,779343fc,7c090847,bc3dec1a,6f7c71d6)\n,S(a85d800a,fc2c0315,889f1faa,29e5766a,a180f31a,400e3c19,85589af0,302c78aa,7429d7f4,903c76a0,a4437b41,92865b7a,ff5aca7a,52dd32a5,8f8b00d,b97ec85e)\n,S(c9836b0f,d594fcc,9a89e85d,7d506386,ccee3f38,72759cdc,9548569f,a5f1c245,9f0b1926,93b7fed6,2f1a7d06,fd716727,bed1c2c5,9bb431ed,943b7082,d094fac0)\n,S(ca2184fd,b2b84654,d0348e5f,6d963193,75f2c441,ae64622b,588cae7f,d202bd3b,d1222820,3d657aac,493dbb2,fe9729b9,e2563cc8,1f671626,83c4f0fd,726a4de9)\n,S(9e0515c6,3c9b9664,8762704,80605d56,b5dea0cc,c7a4c66b,44a2e605,36941fd8,29de3224,a2eb2d86,afef789e,2dba061e,95f0b762,117ede50,6d4b21c9,54be831a)\n,S(42042c25,33203a7f,c22cf7a,fa5f3d79,8a3447da,51d66f60,53a8f000,af5dc1cc,f075a67a,6d6c3872,315420d5,bc13d13,c54f3c1d,61f73d9d,ff688da7,f5e6c05a)\n,S(6645a1bd,4eab02be,45884ffd,288955fe,3f5a68ca,9ae431bc,cd3967c7,12295b96,231f79f9,1d264ed4,28ed4b30,f0e92c4c,bf902865,24050b67,30cccd12,bb84cfad)\n,S(4e281e6d,2c316e88,231482ab,1587de37,6898f3a8,870f475f,30bd1ee8,d4b32f9f,f48cadc8,1c119edd,e5f78062,cddc3416,c3f708d5,f37e4910,11ef7581,c065602c)\n,S(77236414,96e41e9f,f13c7ffb,c7a66203,4fbaf7d3,e432ce02,fcd54ef0,4aaf5136,222e0174,d6cc01e,fb4b4bf2,9000f697,98bec7a0,657f328c,80083074,242dd218)\n,S(3f2b704c,8d467859,ada6070c,b1221840,18ab009f,f7b5ebdd,af31d977,dd45860,a47167a5,146aeb5e,8c38dd21,5d61a2df,e2b6ab8b,fd05ea9f,b59faea8,3b4dd88a)\n,S(794ec130,d243d811,2ebb70f0,35f983db,84b3acd0,ae4c5b51,640b9e92,ecad4146,49edecbe,95c25c7c,eeca537f,937aef5c,658f2dd5,d8c0de71,c80777aa,d07be84d)\n,S(750ff9ec,e363e12b,79b04cf4,a7b1c0b1,49c554cd,6e9fe3ba,808c9614,95a96aa3,5a28269d,d1c5a3ed,f4e70f14,9a060b42,2d4474bf,1e4c6dfb,2de1502f,7a1d59a9)\n,S(d65c05d7,df6668ec,b96c9ec1,fd129462,263b082c,9b7f4169,6335fb2a,b66272cf,d7728c5,1c10d42d,242cc5b7,fc77fdad,7e48be06,6b2f7c37,891ba4f0,de188839)\n,S(d3804cb6,8cb2e9e9,b5b9d270,db9a172,aecffe39,72a3d2f6,1225bef5,595190c3,11fb350c,9568648b,30af4131,46053428,2879023e,6ff0d613,482c2471,b5e30d5e)\n,S(f762de26,35c6349f,6cc95c61,9ecf8d37,6a938241,1106db3d,b34e9e84,70351bf6,dc67f9e0,c8a50f9e,e753352d,a99112e4,ccfe22d,3e88410b,1cadc0ba,bc9fd814)\n,S(ab18b4bf,a827ff4b,17ee163e,d17e3927,d7dcecee,ba87ce7d,ac5e5767,53b87a71,6db83bd5,73e40926,c882bc09,c4d07f72,29706d1c,d2b1ded5,b57ea9b9,2b0da919)\n,S(f754c248,fec21ae8,da343a87,459622a,b12478ad,8f63ad8b,f5c66695,198c95e,2cfb76a2,5f9c8776,b848d8e6,7f544774,e056ca7a,32bbae52,93b27992,6052b1bd)\n,S(f8d9473e,3c3f0798,f893ecdb,716bca16,103516c3,1341c8e2,c2462d4f,9a46c51c,55f0065f,a422fe3a,26b314da,c7547835,5c53bd3b,e11b4686,9e05be92,d7924e02)\n,S(8639942,d294cbc8,9a75fa22,5b29fda9,2f7c5ab4,bfbc4395,352d050d,754eb741,3913ea2a,445de35a,36d79abd,db3ed7cf,741da883,4cb81c29,6779d8a9,e7d11e4d)\n,S(2a588c6c,706a388b,f1719230,b5a71b4a,6857282,83aec61,794d1a78,bb95d5c2,af25ed77,1a56f6d9,6407f07e,a7e11f97,61f458ae,bfbb1b00,96842c4b,6cc47592)\n,S(137bd1ee,8931b9a8,b26dba4a,d9a5edb0,a5459717,22e1fe3,37ee8d54,20a0cb6,cde9fb7b,8197c77d,273e9f0e,e87d76a1,eaea105e,21154b7f,f5848a30,17ceea62)\n,S(46580345,c686313c,97152371,13af2c2a,f9b5fea,a1e0bb48,d21bbe32,d2de2bbf,75bc5d7b,b6329ffb,2bfbc79d,b66f4c2a,7edade8e,a16bb051,a3a8ee9,ec92ef64)\n,S(4a149252,afaf5acd,982fc491,c26af545,2ef93d6,1b282a85,56d5ef64,391bd233,fbc100bc,10b55b60,96656ea3,863f5d4b,bb9e83fc,5a25e59a,3b53d78f,60cfe285)\n,S(894ebda6,fc0bcf8f,e025131,3475d64b,95bdf089,7d9753fa,ad0f92f2,15a01f18,b25f3150,155772cf,c69d0251,97d37ae0,1e4ede02,e2994377,9fae26cf,5f5ec056)\n,S(e70d8a93,a91b891,30def1b2,bfd720ac,2deedca6,f9e5a85a,3c2a6eae,45eb032e,bd3aee53,a3b0ff6b,45fb96ea,4911cb02,fe102681,878a1b0a,693fdf11,4cd9f9cc)\n,S(7cb1fdc3,e5ccb1dd,4a16765b,f9546b6a,1189883f,135d447e,eb245fbb,4eb36852,90ee0d6,becf5ff7,b80edbe1,75dbf258,d1889008,a8fed4e0,1968e2ca,8fca582d)\n,S(51278ad8,331da17,8fc90a21,432b9058,b39f57d0,31210685,bf9bfbc2,87b9bfc1,5aaf547,f39ce678,8c3ad759,b25db3e5,7bc1f9e1,f75bc040,536ddce9,d3a66b6f)\n,S(f0eeaa1f,c52b3068,48b56308,22fcf0f3,fee5008,54e276ce,e9fe9904,54f59cdd,90ff89b,944d70bd,eb5e5e01,6afbeb30,d51cf7fa,81182e63,ab3bb2c9,f2124f02)\n,S(36fc9bf2,8bf90fd2,613670c2,27b51c00,df5b4caf,252b5df6,648ddb6b,3aeea71,887c3876,f1ac6c28,606c8161,4ddbbbe7,d975ecc6,9fd9075e,13d0e3a3,e7836683)\n,S(6e31e26b,cf9436c,e14d2d04,1c29f62e,135c549d,5e65bacd,ba4df2a8,9b91b68b,2389684,9e63bdaa,b5f7d9f7,7a778b31,94c1af87,d09a9a85,85896188,acd0e7ae)\n,S(c5044649,a4b1c2bf,ac6a8a1c,ead33aa0,3da9fad8,4f742eac,35792672,1d98e864,6d2602d2,83e696bb,717d1327,cc1143b,45fdc84d,b8d400af,537b201d,a7a1027b)\n,S(a933e71,f13c44d5,bda8e963,b5a007bb,b9b2e84c,c45211e6,eca804ec,6a99ca28,931bf3bc,ec45e2f6,e6571207,31d42fdc,c3ce0279,542114f5,c1c0f659,f6200faa)\n,S(9003f61d,840c2d62,1ba98884,e117038b,b8559d0,b132a1aa,83adf65d,f8e4a58b,50c75124,f72b3952,9feb7ece,cba26854,1388a1ac,73631532,b67f56dc,e8d30895)\n,S(fc807c18,3cb370cc,8638abdf,c17281a6,914e21a9,e9f3e2c5,33fb7c37,caa0a886,3ac79d3e,75ac1d5b,a9af7263,9d564256,1ccf6fd0,6b8d2cde,e9d24a1b,e8af00ba)\n,S(3d072ae4,aca4ac23,b43b608f,150bcd4b,cd780dae,7e4073c1,86293cce,dfee9cbd,6d9e443,f721c9f8,a98fc563,8d7627,f9c60414,67da3857,92fd55d2,7e65d9b6)\n,S(d0cb8594,7061b4a7,d2bc5eed,522faf8b,ba6e26bc,7acb1d3d,106aabd9,a7f80dc0,fbfd0f26,e9d0dcc1,a0107b82,d1a9876b,8d7562f1,41f0892c,9b739e47,7b012e0a)\n,S(e4edc0ab,6416c644,1e59f46c,c7221cc0,267aadac,242cee32,41a6d25b,635bc9fd,f41c3ae9,cea7b4c4,4834482,980807d1,c496fd4e,bb06964,b84c1fc3,4fcdc71e)\n,S(6233b50b,2d3d9101,8f5a83c8,84be0f5e,ffb80641,1b0b5271,557d32ab,dd7eb4b2,8dfaad24,ffdd2ac2,5770f21e,328588b1,34a3a2b,dda40399,7911ef19,855dbcc5)\n,S(6ca00162,e27265e2,27b4e544,7e981f6b,c427e65e,bde295df,9434b7dc,52a19ab5,d33f5f63,a8f227e0,a43fe297,babb3a07,223e8916,e153a5c,e0f57e65,1154cce1)\n,S(c01205aa,5d2a8d5d,c0d328ae,7ce7cb16,d6c9d992,8b6105b3,cd68666e,36fefcfc,b65e5f99,c4f48095,e1bd6f6f,6af8ba7e,cf2988ab,ffa9bb45,3ad01859,e831d3e)\n,S(e3965393,e6268cb,61d6fb19,58050f39,7b8a597,4a6c4abb,4e0b78d2,dae0e155,1f78ad46,2ed6e1d9,18004892,85383b2c,3f971fa5,cda0c828,a2f289bf,80731737)\n,S(27bfd0f3,702a9d43,50c1a6,9fd990fd,3dc03af8,50bd84f8,1248222,6cb099ce,22e16b60,e8caaebd,19b0c0bc,e40be7c0,c49fd3f0,d9094f39,fec1b1c,bc643de8)\n,S(8210fbc0,23319565,9eec1777,12997a89,2a37172c,6f75e3c6,cbf080a0,6f96a2f0,1ddd7792,101166cb,bb11d552,85e1eeb3,bfacbb25,6d1a5097,16dea91e,46afee8d)\n,S(15cc66b6,5fcbbd80,df15298a,25e2ff80,ae4d5065,f8befab0,89cd21a7,4e347b5e,944b47e9,35748296,deb324c9,f5616d28,7b225b34,488fb34b,6ddacd32,7937c97)\n,S(eb7b7aa2,45960169,1ea1a482,a9e6c35e,c7bb08fc,726c2c4b,ff801ae0,94c97976,4d2e9570,cc187791,fcbd20e9,3f0656a,f5596f4e,104c3f2,27c23f82,2ed1b1f6)\n,S(4598fafc,ed29e844,c22436e0,996a8469,18e7c106,b40a5ea1,5fb0e7df,5e9ba12c,e73d96b6,d292ea2c,39779dfe,7f716609,978a8555,e5b09629,7dce228f,f35e6093)\n,S(49835a86,3612e594,572a2591,76f90e18,e57d4dfc,1910c705,8e37eeb3,1a8600f7,3b7613a,fbd2cc1,cc23b147,e0e80d36,464c08a2,e488d7b9,8250ed37,dfcfa531)\n,S(3a6d6fed,1fcc8067,32a3177b,4dbdc33,3cbfe0b7,d19305b9,965916f7,ce335351,cc3f3d8a,314d617f,148a6706,d7f10641,11eb2b56,1bd1dd0d,f2986925,5a6624ea)\n,S(21208586,6860fe30,ce92d2ef,b2035b74,f672a024,ee7baa78,fb0d6c7b,3ad7a9f5,aaf145be,51b1ec,3fee8be1,1f6e9d73,96ff0ce3,41f25d7c,e1074a09,78bebbb7)\n,S(f819132a,c9bb2f09,663d609c,51cb11b9,833ac082,6ceffcc8,67cda04d,266e4e06,b1fde638,ec6a305c,aaffd1a0,6404aeec,c52f48ef,7646abb3,7e227239,4c891de5)\n,S(536c05d8,8786640c,43734d72,aed62d9,168385a1,213c4428,423a9437,c2ec009d,7f4be100,d827de18,68bc2b43,c83a08c5,fd84ddee,1fa9ef13,4b489325,db6df0d5)\n,S(4328123e,c4c6db76,37ee3ed3,42c8a859,9de2fb1,a39a24bd,650b73ba,a1df722b,81c002ea,1277753,e6a22fa7,1b4f86f5,4ee11f10,f5d5b15,94c9d7e9,63a40857)\n,S(f3e156fe,f8529951,86a9e536,f985c1,6a85fc32,d50e9a08,1550da68,112a5f17,91ffd66b,56ff0e6f,65d67e83,c362b853,a2f441ce,7418d091,5d5dd09a,b48892d2)\n,S(32ba7359,84e13f42,d2e8a716,a54c40ac,6645a1af,eaf030e6,8242a8d8,8b456cc9,67ffcf1e,1c32b150,a82ab317,8ef24c93,f055765c,9e7e6200,f868b183,bcb4c6f5)\n,S(cb9c2b3a,43d105e,518674cf,64d8b4aa,9c868b93,18abbddd,ccabc0ac,59829311,1fc67ef2,233f076b,ded3ac47,99c859d1,834bea5f,bd2bd5db,242607ee,842b691f)\n,S(e14f2858,b7bf7070,32349695,e09bcd3b,5effa957,abc19e85,6efa31bd,2e9234f0,3e04e49d,d3f3fd39,883cbc25,80d5ff06,cf8cbf0d,4a895761,f3cd15e4,dce08bdb)\n,S(156beb7b,1c27b8e3,cc78113,c97ff026,74810dec,58409e01,d7b7388,87550d82,c711730a,80216ec8,352adf2f,d5939991,3a8e92c6,c16c17b,16e27a91,90bc5371)\n,S(de5ea7e6,b9b46864,4b80e495,9a2ddaa1,a24a3399,f8039355,7b798b5b,2c55d600,8901a027,e6a823d2,dc0a9d24,e182cd52,b9b1de67,22b7f7d5,3a03c615,8cd48ee8)\n,S(8eddd368,8bfaed46,25b7312e,7b2bf0ec,aea07414,a1281ade,b79b9e3f,ec17c3c7,2db43af9,26171d34,d5ca48a8,9223e57b,59b885b1,5c4f7231,6d8edb6c,7955da7b)\n,S(5c971b6a,665ad1de,8fa489ae,22237ed9,87872e0f,ef95eb85,fb2ad3d7,f0b1d4e3,4d71f598,37c2af6f,af32ff7,42ba01d9,aa8d4d7b,302d39a6,c4fc693a,5f8b1f66)\n,S(edfb253c,28212b6a,d5b66589,a2a8f1cd,bd3586ef,34254768,85cfb70a,46b9e228,3e5b6608,b7e81f69,b8cb26b8,4f306292,594e42e0,25134c1d,7f7b2a24,b2616c00)\n,S(4395f24a,e127772c,db163dd4,e22574bb,d2373cc6,b2c67384,737c56b7,dd525c13,bac6e725,4c800c2c,64896913,df739574,676581dc,1b4447a,819be64c,10103526)\n,S(81100ad5,73a766b7,f8913b64,b5f5a87f,8c782353,5f62a3eb,182f0ff1,946866f5,52cac16e,325b0899,9d068f7d,51dd9d5,c6afb8ba,9870a9c9,d28b4170,e9a00c73)\n,S(fd3a0551,41168146,6ae358c3,aa14216d,dee3a05e,e5ddee40,7f72347b,eb95120f,2af2f30d,45ceb12a,b89b7b88,b7e04b20,11a3c607,58ce7250,e4c7bcd3,da8ee5b7)\n,S(17a55b58,a7eceefa,3ff05b6d,fa17d6c2,76d1a032,abd198fa,4e3fc3ef,e6435ff9,d7273958,a3ad67c1,fdcee72,e71f0536,418f35a4,57e06240,bc99bf71,b9574d4f)\n,S(870cb7b8,e2ca5ea0,8c5c73ae,e15e8b22,793fd005,5ed7003b,c49b4089,3b789b6d,c33c8b40,7b701caf,26d7a9bc,e22644a9,4badbec,ad509cc6,a7b0ee04,1be67aa3)\n,S(f951c5fc,dc46ef00,adc53c89,a50ca0a7,ffbf7c36,d80e4897,5452cc1b,4e71f8a7,6ae2f821,7849cc24,30864d7d,24df9e59,c1705b92,5792e648,75120738,c792c95f)\n,S(aeb8077f,3b92c676,ae11bb06,a18ada3f,6cbd832a,1637ed61,31e4902c,96a0caf1,29f41d1d,f5d4a430,94e75fb9,8bf317ff,6c8a6d7d,b37ccfd,e0232e1e,afcc1e35)\n,S(d46f4d97,5d2f2e58,6d18a7e,5d8587c3,8482b78b,595de60c,b9d2035f,313b78f9,95d781aa,3bdc1176,396154ef,31fee42,f704e199,4316e33c,1053491a,e86392f0)\n,S(6afb44,4b4bd89f,2e21b54a,c49b9ec3,af810b97,73c76eaf,4f3a5f1c,7a29b201,3502901f,d7d3b4ce,134ed90d,1388ab37,64db460d,bed334e,af061822,6ebf932f)\n,S(5f02e582,a38b1703,a7bf6086,9587af5d,e6634954,cfaf8394,932f7ed,ebd86976,a0487cde,92f3a796,b24b06bf,740b8fe2,ccfa5d0c,a2b68a7d,ef46a005,2d7afec2)\n,S(26427482,60432ced,5a07b885,f354667f,ad70eb75,9c556e33,c6652d3a,a0599fe,119238fe,2560382f,d76ea737,9340453b,a63867cf,6e044c62,949f858e,b828ce85)\n,S(6b2a3e5a,d327adda,52b19a7d,d5e837ed,4f03a5a7,e1e5b7ff,2cd66660,469f91dc,2f9f4526,6b482fa,f336560,1da9e945,354ed265,e8d7e57a,22f04bce,8a54c6d9)\n,S(2588b88b,7e214fba,ab10934d,def13e8a,e5fbaf77,d7497dc4,fcc0345c,435daa79,3e5cf90b,d3ba6d4c,8d7f142c,ef1a51da,61ca644f,acba35e1,51ebc114,c5435bbf)\n,S(d9484146,92852eef,fa8178b4,a01404a,e4e3d846,c20c3fcb,cff5cff9,de551a93,d5b0fd7f,e628c427,434a1219,6ad99862,13ea0abd,969864cc,dbb8258b,96a6d5a4)\n,S(5cf81fdc,3a2f2087,cb64b1c,9b6f4754,5ccc1e78,67cee5eb,9fe9c4ea,3b0de2ff,e0b0ab1c,f6bb8e5d,f7ddc700,5ec73471,e7ff3125,daf113,1b78fb8c,15bc0d7d)\n,S(41b4ef7e,b719fdb5,704b3f17,4132c694,f8ed2471,1677a320,3b866660,dbe879a7,a6fe65b1,cbae2235,cda8b459,eeac19a4,9f44c2aa,1c8a881a,e12093b8,3621c85f)\n,S(43ed572c,41f691e2,a8dd1691,86404ec8,7a4c0a3f,406f3bdc,5c2709a9,bb117af7,b7b9e1b8,90b40334,6bacbbab,7be4d477,90a2b093,dafbac3,fd4d2073,fa481da3)\n,S(4e010a19,223086a6,314bb526,2f1955e,81722b41,e85fae42,1c338e46,1b397de3,f0d3f11c,3475ed8,44876e7b,3bd0bb8c,283b44e3,70c46ec4,a6159a27,eba65fa2)\n,S(b3609cbb,7fc86bcc,4dbc385e,81edcd84,45e15d2a,7d355e22,41dd442f,ee11f36b,8607e5ac,a3df34ff,804017dc,977bba88,c308911a,aa1698e2,e6190c8,dc9c5f68)\n,S(445e60b2,543fbd3,7bd68cdf,6db1125e,d1bdd6b6,b27249d1,df96e43e,df965b4e,a5fa458a,8c4ab47a,bebfdc7c,f922e713,c65f8b52,287a65b0,b5dcf0b,c7715fd1)\n,S(709f8227,9264c99f,86b59a7b,ef14c189,be875b49,e00cb64c,f9dbb643,10f50fc9,168027f0,cd28d2be,8a69064b,468e4de5,3d4903ff,faaaf628,83f15031,58960d10)\n,S(62aa200d,cbd1240b,a252e725,a333f21c,8a2e9d5e,fbf18cdb,e1567ff9,29fb4ba3,19aafd6c,7017bdbc,4b906b46,843e41ac,1ec3282b,12dee1b7,b18e3f28,9e0a1347)\n,S(2ba73958,8ed54646,fa9f2389,802e2ab9,e123987f,c881ae11,f38f10ac,b882c09e,f37daa1c,9c0a98ae,f86cc45d,34801353,d8f8a193,77518423,721f3e12,375a25a6)\n,S(8672b9cc,e8fbb69a,ae5c0f54,9b59dfe1,e266e9e0,3592a397,7314e6f,79005de8,20d8476a,efb61c79,adcaac68,fbf9eae,c411e875,a66b5aa3,99a97a86,9b05af65)\n,S(334cb002,84202999,79fdbac1,5ee5c17,1f32bee6,133300ed,a26571e8,bdab6ab5,8827d99f,3da7878f,46b45bfd,579c5cb8,e4e972b6,49d6438d,96e5a188,5aa574d4)\n,S(32b30e07,d260ec07,354cad6a,2f64f81c,e9f25f4e,47bf1afe,602f229a,35ac6d4d,71ffcf0d,64ee9078,6f290418,1126c44e,5c5e3688,f3063941,85660874,3c3c0427)\n,S(e5099658,7a4b4e63,43e401ff,299e9bfb,3b5ce402,5c38fa05,761e600,a39a8451,7b0382a8,65429a86,94eacccf,5c6b3380,683a3916,70fc7241,f132c465,b3bb2ece)\n,S(b3872c4c,2bf539bc,e0aea035,3b3d786d,ca684121,29db66ab,d316e930,e5d6477d,7ce04af,e4c8c86f,3b37ed1f,a9dd4161,59391c71,22d0f4f9,2424d090,901e285)\n,S(d2b56fdf,9156e3ab,2e414d96,49f4c418,6095e74,a2df8908,f3b406de,9935d07b,443c2c1b,67668c56,a84b4925,946a8e5f,b06a33af,371552aa,adc3b500,efe3b23f)\n,S(f69867e,1074c765,923f32e1,ec9f41b3,4e8288fd,62b0a081,15db15a9,f37fbacb,fd6c6e25,2a11a516,9ce04c6e,d719c22b,68709be7,6fdd0e58,cd0505c6,413fca16)\n,S(bc1830b4,a9ab11c1,ad8778c8,688fccec,cae23898,555b6579,62670d8a,b9e64988,b6244089,f3c46133,1979a0fa,f3d0c8f2,8e95cdcb,12db9ea5,b6d95ac4,c22e3c81)\n,S(fabaae21,dc729fda,98c4bbe8,3cd5fb92,126cfa1e,a21f43b7,445e4b47,f38dbafc,1b569775,64465832,c73513b3,ed6aed9f,177ce1ba,b2c09fbc,c4c33600,582d8cdc)\n,S(93386101,4d5d4c3d,f912497e,a248d8e3,bcd3fc03,216dd57b,5473d96d,791f8bd4,3d8fc96a,c141163c,4ff3add5,44a6ad71,9e57f22b,8e806d95,1d630fa3,6c936725)\n,S(c5312d5f,85c42820,59546b8e,ec6b186e,da0a4324,d30147f2,94a83fe,a6fd07f8,f8ae6e2a,79ba0756,523be12c,8d544734,332898e8,b35b651b,edaf806c,45d2992f)\n,S(a08f2496,52c52f40,6db75c4d,da022f41,b73b1128,11aa7388,558480b5,f203b057,a396c7de,9ab5e1d9,5e9aa925,1ecfe3ca,191d7a25,37c4cccc,845dc745,2f3eb2e5)\n,S(93d5330f,e8df6fa6,a74b34f,a251a6,a036e0b5,89b8a05b,c525e4bd,40f634df,ca15faea,10f424e5,5d6774f7,7c87da28,c4df567,7d153a08,f5ac560b,71838756)\n,S(4622bcc,dfcab72b,e850a994,1f652110,5c35b813,f05a4f6,17055f92,aab51fa2,d960702d,31eeb256,d25cd245,695b53c8,e883d2a4,60965a8c,d29b41e9,d7ca2d4f)\n,S(a326036c,7dd885d9,94ba5872,8138c30d,fb6c83e,d17c8d88,7aee086,e0ef9fe5,b465ce69,3719a155,31caafcd,e7689a17,456a6ce1,c75e5a53,4893cd67,32cb9bf7)\n,S(2354417e,19637e79,71b0c887,bfa5c553,f3d5e7a9,84a6c946,b1d20b5a,7eef77a5,815a9721,b6ead3cb,b254fbf9,9f34f409,ea740053,3cf4ed4d,2169f48b,29f4bd4b)\n,S(9d346d6d,fc53174f,5cda746b,23810d7,3a407819,ddd5df9f,2b07cc8b,b7ce6fca,9b6cc06b,64293e5c,a55a8ff9,f1e90551,4a199b03,df08e9b9,8512b357,9776c806)\n,S(73c82b8e,c643a7b7,f95f000a,debe210f,bba638b4,5508564,bb5a3330,fd48dd01,fff15699,a0885c61,fe35f61b,84cb2bda,7d2acf5c,df0d6f07,5fff1369,805b614)\n,S(902469d5,a0b2d5d1,cf931672,88506b95,f2d29bf,6ca291af,c9b39cbf,fc798ac8,356d011,d71c769d,342378bf,fcafe4ff,cd78addb,abe8b0d4,fa63de89,1fc3ade4)\n,S(e670a0fb,3a0c86f0,53523afb,819b8944,dc4013e9,fd500371,b1efe23e,1f110637,869136b,cd13dcb2,157db5a3,d07e59ef,272557e0,9dcb250a,9bf659df,260b31b8)\n,S(f3fef06d,526581e6,b0f68e27,cfb9cc9,b57f11e5,849545fc,b9ad3d5b,8a05c395,32b2e997,144420ec,c4c45176,efa5fbbd,570752d1,4b092f4,ff375544,19b8f553)\n,S(72a37663,3958d844,560fc28a,8cc19d88,f942c09c,471d2cac,70ca5d39,396a05bd,de9b1b0e,6e121070,f684b3b8,402e8d8d,729ce846,d2f7ba8,503f4548,735ee1ad)\n,S(38b78ad9,c43b7def,4119c3a8,190cde68,4172894f,a84cdae2,2b637bd8,805300b0,a181567,6c4f5f51,87204f17,5bff32e9,de7cc69,dc851c84,23de74a8,b3d01e6f)\n,S(db968ac8,1d2e7c53,6c66fac9,e194fb23,540e2e89,8cbd3af,68e158ff,2b34752e,4d5c57ab,79d9972b,ac6b4af0,a6347271,4179e8e,fd14c769,a24e5a73,aab48a0a)\n,S(2ace1679,2d3a4d83,71114f28,c1ed35b2,505dd4f9,97c72435,a145d367,a8aad318,5314312a,246874e4,cec63b87,f685f6d1,405b0ef,a1ae3539,cc88e73f,3626f625)\n,S(32d80e69,c390ded,db8a4600,862727c4,bb1fda18,2563277e,852f93af,3dbae108,3c7d96f,ea89d06a,6d3cb3f8,181f7cdb,bc1c3e12,3d9f1d08,cbd557a9,60dc7c07)\n,S(3ef49e8a,e7fe6b40,628e61a2,945db3cb,f1bf050d,e525d521,d8e8a408,76ee3908,4381c75c,62f45fb2,4d431b54,d63115af,3ff72d27,58c3c92b,d3d1de08,1a123f2)\n,S(853808d5,cdb82cd0,39b517d4,1c88d7b0,e280ee6,59e5c640,5aa27542,3c9722da,c1677c44,9b2a9626,698a652f,81722242,3ed18d03,92d4200f,b4dc229f,5f7e8f5e)\n,S(572fd483,490c05fe,857520bd,8861fccb,306ee4f3,29adef49,58c1db78,1fc8584f,82acc906,10392302,cf0107c0,6b3b6194,d38e9155,b31ebca0,be300036,3413f4a5)\n,S(b1cbabb2,9aa8ca31,75aa9a2d,d4d956e4,fa771344,d4592481,38c93583,376e1386,888cc0f1,7f9afdf0,6ba1de03,41409c1,265cb2f6,c015fc,bc58d2dd,66292ec9)\n,S(f856cb92,42393134,7580a65a,149a6e81,2c5c960d,670701a1,6ddbbb98,2f6bab20,c33511ba,192c00e9,991f580f,65c111df,77d9d6c2,d5d63869,c5595011,48536674)\n,S(e1601cd4,773e129e,2c042887,b56bbb3b,9eed92fb,6c128e23,fffc3a7,ee73920e,180748c8,a38c7796,ee247c71,49ba1fcc,a78648c,a0508ec9,6f4a016f,301054ca)\n,S(98ee20d4,5ffb6177,5ca206a5,b0cbf1d8,e8b37cab,97489534,a98928e3,367c7e72,2df4ace1,ea42db51,68ab5e6e,88fc405d,854b70e0,4521bc30,6978e465,6273c610)\n,S(4796ca57,acde905a,31dcfe95,bedd1e13,5417bc41,f5acc246,ec0ad4ee,ddfe179f,7413f522,395a3802,b37637e5,9564c239,5bc565a3,463f815f,8ff962a1,f0a367a8)\n,S(b367c864,38adb0b8,d5b627fd,56c7df9f,cfd55536,9abbdd40,6c68bdd,1a341200,c0364744,b99e816,7982f365,72268702,b4986cf5,c9c5749d,fd22499e,2e8fba51)\n,S(db36884b,723ddecf,7e2244c0,20de844,e740760a,4f27d386,a747f4a7,88914d29,8ae487cc,2a743a3c,2a1e0750,7def0f2b,fef90e24,fda0e3b4,e5f3333,7d79e023)\n,S(65971818,f71c212b,a8e45821,31eef4f9,76b4732e,6c6c3123,ccf5c6a0,99a316c4,415f6791,353350d3,3b087f39,13761119,526a2831,c70375db,4cd07754,e13604db)\n,S(f2f4eb3a,13a8f4b2,42182a63,97eb6cd9,9053903f,961a1338,fcbccac7,60ebd65a,a575d67b,667e94d7,20adc8b7,4eab8ebc,18811b3f,3a3bcb6e,7950cafe,8ef9ca8)\n,S(a24e7a0d,a058f0c6,3328fa51,fd3c927f,884b3f77,cc068a47,e8c6b4d3,1d113a49,be8db830,79aca569,9eb2fe3f,829719d5,bcee615,645e4c81,a9a7212f,450ef78b)\n,S(e59a3ccb,77e11797,7db6cc32,5ebd5981,42212da7,48f0a4b8,981db72,41efad5a,a8e07545,fdda2668,cc0a10a2,2389a2d8,d6903416,a4a05299,9d4c2d4e,4a800d9)\n,S(3191b263,a3c70be5,bec721f9,3dabe9c9,fc6c1a75,aaa94e9f,daf6060,fe4b8f32,339192cc,1c7a9bc7,2a9a87c4,ea3cbab0,c7af7b27,53e74491,717b1f99,5df38a96)\n,S(63dd5fc6,4f9ddb0,8fd47e27,5e839b20,12f408e5,3c139463,8b97874f,9187023a,1af048b4,2e8b7e6,d456cccf,d12ef7ef,67e0910,4162239b,84f35cbc,8504bd9a)\n,S(a92e457,cd8312ec,cb87229b,7f751c4b,2e1d8640,c2b8e5c1,2d3dbf4b,671bcf13,d7aedb56,5447eb5d,18449241,3a07d672,be46ab4f,3d5b4b3f,551f292e,5ffba768)\n,S(1ee6b970,b9e09d22,2b20f02,14f00bb4,4789f55e,585f35ba,6c0dd6f8,39b10495,7c910fec,eff9eef5,d1a3c8a0,46252885,9dcf73bb,d4a0b2be,3f8d10e0,dc9e9462)\n,S(b19c23b9,c2ac1957,5328d7c,43d04870,1abe9e97,30285ceb,e4fd1659,8f06a76a,79a811be,c07c8b70,6f380f8c,fe369e45,c605607c,d08c8a49,2745b283,37a38398)\n,S(3c20db9f,9ed35fc2,7c0888f5,e266a455,4f3fbf98,b8b2a016,b1e9aef3,14f49a5,bb3ac294,3f29e63a,f610815a,4a1e5a12,9327c1b5,ccf489ea,7d8950e3,5bfbc4d5)\n,S(fd1ccdba,b4746e9e,44eb5904,d338244,efa29ffc,8ce8014,f6b922c5,2eea4389,e1065546,52146f90,fa52439f,c43ce4eb,73961a52,10f6c040,97a82032,9a8df06e)\n,S(e30fd18e,abdeb8a6,ef252dc7,3c2b0d75,83641a29,8db37ab5,1e2da099,9b64020c,49663672,1824f481,962bcab8,6716eb41,8e195d29,6afe9704,cfbc24c1,28dce88b)\n,S(4bc1f789,26ddf930,e1aea784,83a9dc09,5cd72300,5540548,e6e217e7,515bda37,966b32b6,95dc1b00,8dcbfa2e,734bd9ab,36d8a26c,2a52c471,63a4cfcd,d200ca69)\n,S(23d3e27b,9c864b8b,40f0f7d2,6ece9bc4,9004f98e,d46b539a,affffea1,54f036d4,be4617eb,f680a27c,cc4143d6,ac150d51,b3dfefbb,2892a6c7,1b36c794,8ac0b05d)\n,S(28adcbd0,14cd3b70,f46e0a89,477b5cc0,4a513091,cb6c1aab,56de4894,3e6009c0,7c49a838,75204cca,38f250b4,608cfe4c,25040dc7,3ded4fda,f4a92cce,fce31601)\n,S(776084b8,a86f0823,a5044ab8,70d84f60,ea52ec7b,a545ea0c,c86f219f,1ca29d08,60bbbecb,1048d250,b410bc38,49e567db,def17272,58570b2c,d0834532,581c60db)\n,S(45df2e0f,fd32ef48,95d9667b,c6044951,e3db94b9,ed6af5fb,d4fe1e7d,228f2350,a732464b,1a8cfe06,69e4076e,d4164b98,4de155cb,68bb3994,73fd7918,63eaf095)\n,S(6904976b,46a5fd1f,a74bff80,c493a2fc,8ae9bbe8,783cfebe,7f69f0e1,be7dd7ea,19d071b8,df9d1436,6241a22,1a00b340,30f1df45,5e66fcfd,5ad621ae,ca2c3e64)\n,S(849d8728,f977d075,a8de805c,8e80980f,e01def35,1ee80f0b,ef528e85,29aef659,d84955c4,6c886283,b9d7adad,bc069d0d,8042dd9a,ec7246ff,edf31594,ae5bf428)\n,S(e3d64b4c,234506e6,e7facec,8d7534ac,54588dc7,ea685281,e27c6746,472d58eb,4a32ad3c,cf822a84,74447baf,68aea598,11a9c839,4c9970ef,bc61f363,ae5a36eb)\n,S(f41c7928,57d15a31,19b6f132,3b67639a,889877aa,e9213ece,c787d53,5463bbaa,73cfcd0e,c84c55,4d007594,152d9ddc,630c458e,7ea456d0,7cc60503,794d9328)\n,S(e1d21747,47ab84c,e47a4a02,caed939f,e0cba1c,41e7b21d,67f52fd7,79186079,17b0b628,aa4bc0a3,ed9728a3,e24a8101,fb26da66,9ac92f63,af81aafe,7db2b668)\n,S(a8a0018a,f8f86795,3189da2d,d52b4db0,5d7ddb4b,8d290c80,95a8e7dc,d86ef1d8,8bb9606c,84b88a1e,df980c7e,9360823e,25b927d7,9cab4c17,fc8aba7d,6826518b)\n,S(7383c671,6ee05e44,daba57c0,50ebda60,e4e0c0e1,3df338f4,cd8d627f,736fffed,3bdcb946,5f164a74,638cb973,fc77daaf,38eafd48,9521cba0,4ad896c,8e89f0e0)\n,S(61fa7e1c,8bc8ac97,96be6431,20858063,1ca36af4,520cc1e,858f90b,ad372dfd,3f0d6768,36c3e694,32287909,c8841de0,a5f646b0,94b0c207,8d634486,c3eba33d)\n,S(86029e2b,ca0ac601,99092def,cf4882a8,b4f14349,43bf116d,3cb310a3,b2c4a740,b8be906e,cd9056f0,f3261cff,d12216c8,ef5f1553,dd708480,15463b7d,241c2f7c)\n,S(e172f7e5,912aa487,589d6c4c,d0d6b9ab,48c4a6b0,5fc5f90e,2f6474c0,4fad95cc,edbd23c1,2b0a0ed3,b899920c,e8b64d7d,d7bfd79,5009c290,ea0673dc,8acc401)\n,S(7986ba8d,322efc24,8b7b22ab,f838de93,2d931c78,cd6a8616,d1f37dbe,32873494,693eab22,4c750592,319b7544,d29fe0c,2420a5d3,d3b7e01e,e6ebc968,12a13634)\n,S(ba594138,4a727673,7600a6d8,8d36b133,400bb5d3,6a8a9d46,3e8c65c,e1e00383,746f4e28,bc1b812b,227fc953,531058bf,d9c68545,2f6219bd,86799dbf,3c2ce557)\n,S(45ff41c9,92d6b117,c86eeb77,bb17789f,6bf96cd7,2cf0c6b9,802af869,20476c8f,9324f5bf,6422e3ae,2010c9e1,27167d8,4f522e86,87fc95cb,ec3d6972,2002b59f)\n,S(bad79e35,487a4da0,7171c282,e8666ed4,d00bada4,d9576a7d,9a93ecc3,c16ed68f,19397a2e,efb184a4,31a02e12,91db0cd4,5b153517,9038a920,7a6d50dc,787b57d2)\n,S(ddfe2107,2d8875ec,60c4d583,59755bfc,22cf890d,d3665b79,cfa403bc,9e3c8a41,c62bd917,491d0a8a,9215674c,28c28872,8dbe0d3f,87c10d90,ce22b608,473f62e7)\n,S(925f6a53,c07f923f,968ccadf,bef9d95c,d7594269,a3d9fa64,b1180edb,667eb299,1080e8ff,1f918e6,6f08b26b,7f9cee48,58f00038,b8ca50b7,b2939960,b1e7809c)\n,S(c28e49dd,a75f0283,38e5d2c7,d1f03af0,12768bd0,6b0e0d0d,87878ba8,2720dd80,670f8989,c941a49b,cc512c5b,4987e167,ec5ae6b4,d7f68a98,331845ab,5d0db12b)\n,S(7a9053e,95035be8,8188c196,d5e8e05a,b21dae48,d59406f3,7b9f86ca,2c837cbb,40ee088e,8e7694b7,994774e7,9d097d76,6de026f6,f7fbe352,e7f2bd0f,443a7e1c)\n,S(33af78ea,bfbb00c5,4d88ef81,e9661b16,e0b32c85,a1b61b95,6c6a79fd,e036aa2,713e7aaf,537a796,c4d79644,c855d0b,15331988,5ef4629,d8048c69,d3cfd3c0)\n,S(c588d014,5a3f3d33,29695573,96d674c3,1326dfa4,797d63d,f9a0c720,49583bd0,b5c0cfd1,6c67cdad,ababaa8f,cfd2cd76,7f747024,8caf60d7,37531c66,ac53cdfa)\n,S(96b3d5ed,b93742c6,7c48ef12,c649341b,97223f22,1f0edd5a,2f2ab523,8038d29e,db475caa,38a3a05d,3719a2e6,4ce7b4ed,bf25fe57,4b28d6aa,9961ec0c,b0e44c4e)\n,S(412f4b6e,3d894ee6,fb0cb00b,14662a9c,1eea3a42,5a286782,a62da77f,5644f0c7,a84ef636,ab9bc805,bffde813,93874429,a8503e89,8c03f1d6,f139af86,f6a676fe)\n,S(25f0a785,c7b43028,52f1421d,a32c418d,32fdfdc4,89c39049,3794e1fa,e4563252,efeb090d,457190b5,89c953a3,aebef406,da716af5,1dc6e334,a0226883,6004e4bc)\n,S(50fd4ab7,f367faf4,acb4403a,49ea3e7f,f02fed58,4327acfd,e0bd58a4,ed741c6f,78abc1a7,3c9dcd48,6520cb52,adb1c3a,2d08abcf,a079607e,a56307c6,3d46dd5f)\n,S(157583d4,cfaf7f79,33b8fa66,430f107e,c357621f,4b94f313,bbcfbed1,46a477a,9aa6b235,ce8cd1fe,60cd4355,c46d4859,fe35ed8d,659d2aaf,fc09cdea,297e8db5)\n,S(3c44bb62,5d262603,e44affc1,65b35976,f2edcedf,8be6b494,f4b3bc4a,5b3300be,88b1c561,67973ab8,5ecd4594,90598152,1ef0e8c7,1ff707b9,79ec2bf,3cbc2535)\n,S(31d4264d,e1606b97,f2f71d19,33f23cc4,8fc5d9c6,e087dd93,5ee25b8f,ba298958,460609c0,a3aa1d26,2865180c,98555b98,c8e41db6,2e62b2c4,4ae01190,718251cb)\n,S(1f551f0a,8ff14724,60ab206d,3dc1834b,352d1d1d,80a8fb78,a87247ae,5d03ad2f,24253c06,a4c8b148,db944f81,802bee34,fcb97ab6,50957b32,eccea33e,c116a6e3)\n,S(de2c4e1d,27f08407,31334311,9ff5a8c4,206a1f73,2aaec3a8,7aab6bb5,c1cf333e,dc813ba1,40fecd3a,31ff4a8e,41fa498d,9226ca2a,cb2d5a71,c5a5cfe2,8195170d)\n,S(6fdc5db2,adf54ac8,132c4a22,c382c2f0,c1f54bd1,8aed5620,a54bc4c1,18a95612,db3fa4e5,f318e94d,c0c11053,61d21643,cf60b0ca,a6dc4d26,944e8915,970e221e)\n,S(c7eb76c6,ea0e1c51,a3aea6f4,dd7eba10,bb76650d,85df0fc,7fd77b73,53680603,5ae1c1d7,b788092a,3c41c3d,7bc32ef2,a4f4a39,a82b53e0,e6f47712,df5bf655)\n,S(c81505a2,b7e78b5b,64ce048e,6312bfba,1a52c7b7,8219d857,b4813a98,c8aa89ed,46db2842,6d6ce211,5e1e49be,459f033d,c222be7f,96b247fa,87d5dfc0,df096806)\n,S(cad75255,15f9c3d5,8705ff0d,83ac3508,f7dec312,bdc71c9,a17eb9e,78503bf8,32b36a02,76cfdb97,ecd2ddc7,638e4d61,6231be5,25b6b4c5,2d19c12c,6e6bd719)\n,S(94d22144,e22b7e30,56eca8a4,7d6b15d8,f17f3c65,82533fab,c70e900d,be4cdd25,12c0760d,5fef2f85,d89dfbbd,bd0124cb,828bf72d,79b4ae5f,6121a84d,47d93bf9)\n,S(325c5c23,ef00601f,ddf52040,7721bde2,13cba19f,c0f2e225,3b112b8b,916731a3,59d3cb98,c09c1643,993f3dd3,64c7d29,5cb38cb2,45d8f70e,9628e5ee,d62498e0)\n,S(9c907089,544b8316,4a251516,81bdfda6,7d187438,3e7f4a7c,da96d861,91ee2318,f639dee7,e7010630,364539eb,5c225059,547117de,9fbe4911,d9718e6f,8372d20d)\n,S(34f14807,ede9c06c,4cb2a1d8,97a4fb81,ec5544dc,eac1bfc0,f32f9835,302b7a82,78437a8c,ec6aa228,f5f18813,a68bde68,3c54c367,5d6be482,8d01f2a4,96d9c57)\n,S(9498d30b,3f080828,e03d459a,fcb81fdd,490b47ff,c344d75,3887b600,1639788b,7a5c8305,b97abe3e,b241627d,c5187a9c,677865b3,567cfd2e,ce136852,e42522f7)\n,S(eba08f6f,efd36e37,aa53ec32,d3cef88e,5d4f36ff,ebb978c8,76d452f5,7754f226,fe0e66b5,43aa54ca,7afeade9,b38cbe0b,39e17178,4d029470,608c7e38,bd2015c1)\n,S(555d4bc2,bd21729,f6119b77,ae8c9bce,c8ef49bd,992cde50,4c794484,7240091b,cccebdb8,69521e33,2ca86941,593eb4a7,6c9052ff,a54f8315,d30119cc,7f437b54)\n,S(33729b9c,19da3474,42f33833,d1723d45,3f3060ec,c692d823,679f087b,ffe8872,a94b6a4f,283af604,eb885405,6bfb8044,fac2f007,d7ebc800,b4abd64c,5c34fc30)\n,S(2a1a889f,afe64678,647b060a,73ab92cf,78124ee0,d44c7c32,d8ae15e0,df1dc11,626f963d,3bf11f8e,686ba46b,e6dbbf0e,75aba0d0,7ef91218,98605ff3,fc8b75d8)\n,S(4702854c,a303e6fc,ffc62f70,258bb2f5,639148b3,4e3927ff,f2dbcb0b,7c197d6f,7da261b2,8513257c,d1475c2d,e059372e,2da76eb3,f3b2c51,95c44447,d71e1156)\n,S(7002edc5,a0cc23a0,65015cae,6e49e7b,51d90cfd,7da04e03,4857c596,cd319c5b,6f2845bd,6b7aa58,7ad2d2ae,19fd6115,78c47b56,84fc6975,db63e230,c3db73bb)\n,S(273294d4,483d610d,b2169f05,71d5450f,f4cc5bc8,725d8ae6,7c1adf0b,6f48d485,99b241a2,ffec9e0,a039a003,18239aa2,a71e3cc1,1cfbb6d3,7268874b,67d942b1)\n,S(1beccf82,3055b440,fad26a53,5a852a5d,710c72a,c4d28e83,b0335e8f,e98c9a69,f3ab566,ac0eee20,7c8ce0a4,d471eac,2c5db716,5e24b489,e2fde03f,7b8aecfc)\n,S(dbe4eecf,4f033d53,5d949cae,c8fe672c,a1902323,77892197,fae8e192,53128160,b3f50bc7,927f0e5b,56241c72,24960fc5,896fc806,1c0a8a1f,5fd3d47c,d5aa566f)\n,S(6643fc75,bed80c69,4591887a,5dc573ff,caf7f484,b0ae2631,133ecf4a,39bd1e20,4701285,f7ac7c93,bac1875f,dc4a26e3,8ec1e69c,293c3b7a,1f8b5c5f,878d58e5)\n,S(99f90bde,cf1dcd5e,7158280,53f820e7,ef19d936,bca63f14,516342fe,5422a21,a04dfd30,6dfc615b,5390a86,8bebead6,5cfd7719,33f91e2a,180d2d79,b99cd4fd)\n,S(54e7ce48,3184b7fe,45fb4e35,192b5678,bcf71f7e,49c033e,aad1dd32,86e33433,cac2833b,65ba9cb7,83a8b85c,b7f4e4e2,4d4f8546,3c6a2c3c,4decec88,14c0e8ef)\n,S(cf864a4f,fb60993e,444f4e7b,8f4a9973,4705aa16,295627d3,1f7686b8,4bf02e08,7a98d20f,b736eb4d,465db874,ce98bdf1,6b8a1951,7744aa51,af276c7c,db6f1bde)\n,S(6ff160d6,516fff91,5ae2cd45,7a98afe2,a2569345,60a7f26,c9e07212,6d59d1ae,5d1f1355,bf1410ac,e4f8b415,350f9c75,7db5d5ed,1f34de,aff5c197,b4eedc4a)\n,S(9adba62,aefd2690,1d77f2a2,c6287da9,a56fe35b,3702da46,f231fe4c,9f5dfcc9,ba58ec45,cb4a359b,7126af,fd2c4bdd,2e708d43,41d96e7e,4825f153,abb04161)\n,S(204ea41e,bbdcdc48,cd4ea945,72c10dfe,b5d90060,e9dcf5d6,52c0e2aa,14a2402d,7b2889ac,a1952f3c,b2c5db8a,9924a6fa,fb0b9e32,3ec09809,789f780b,ac36ae38)\n,S(f7d6c669,364d3114,225a6826,c20d26ba,a4b4f190,e842696a,82aace97,5fc8ba22,15abb177,b42538c5,67d160,cb3c761b,1ff47cf4,4b0cbd16,36f67a5c,879d3470)\n,S(7bc4d30a,87dd28c7,8b066e00,c02bd221,e50a7e64,45b57f0d,cb466f27,7d352587,f4ed4854,2e7e0164,da66e0c9,fcb04a1e,6efbc9c1,206b552e,c68cab96,d0c294d4)\n,S(55442584,b046bee6,c245dfb9,59f20629,c200eb21,b42509d7,8564943b,1e316ef1,2e2aa971,c8111ed9,6666353a,103f2e4e,a29c4162,d19da280,905031a9,48580d82)\n,S(8e7df8c0,de88903e,71224c97,3a8ca65a,923f872,841f2dcc,bcd69e64,b1dce1eb,e4153083,9ae86d51,e7147873,f1fba8db,c31205e2,34c94662,52ae43c1,25d2a0cc)\n,S(672321dc,69d8aa18,25569d06,65fae079,b84a9bc9,35bda491,5d546f51,c651de8f,8ad6430b,8708897d,be809ab1,803a6eee,f977b1f1,6b34c188,d333d6f6,e7ef005f)\n,S(f4e2bbc1,43e99b00,52032718,285d7698,1b8beb9a,f693dbfc,2d20f472,89ac3abc,e54990f5,dc330eab,2e722b7f,70cd426f,6d80e93e,205eba89,7eabf0b1,5d651a2a)\n,S(5aa3aa5f,c6d2258c,907c7275,805c160a,72694f46,6b5fdad8,9134f1,d39ffff,22d72170,617eafa5,b843e82b,5f670cc2,3146aa98,cb07644a,7f4c0600,48ea9531)\n,S(34752ff9,d2bf499a,c6b3acbd,1b78633c,9e9a31ea,45c34383,be3eb008,7be2e7ef,b53ea374,2cf3d886,51f7d076,3f67c8bb,39d73ca9,8306bedd,91a6db47,2c1104f8)\n,S(d6502624,2ea44f7,d9b4c9b,5069e1c5,88977062,db2bad6b,51735366,27047327,52f5c99a,f2f2a8be,c034db3f,b573757e,d8014321,86db2c28,8c7151fc,4ab16f2d)\n,S(52b3aec6,553d025f,d164a0e0,b1f39abd,915d4a9,ed5db2ac,b4593c30,11f4cc9,51547402,1c17b2bb,9d401683,931b25d7,77af18bc,e0e7bba2,432a7717,f4e2f8c9)\n,S(8cbb677e,f7979224,12728418,68b79c12,eaa0ec6e,ba4f9b17,4d99547e,827ef9ca,a32809b8,b07e1312,b6a40ec6,411b60be,92974f98,bfedce19,ae590f98,40183f2)\n,S(d8f55de0,e2eef17d,e94b1564,d74734b9,3f89f2d6,c317a248,7f1724e3,d531d47b,e9fd46f5,da576370,e0416f71,f271e64c,fa7dc64c,5e086930,523e92c,9ab7d770)\n,S(fa6fc9bb,faa2b31f,f9d57301,4777169f,a4ddb8ed,ed4bab79,d0f4cf62,356b6fdb,b6ff57cd,dfdd790c,7aefd1e4,d4b111d8,43a2adcf,9f781b33,1b4420e0,f57d494)\n,S(239f028c,e748edd9,69f752d9,abad0498,f9359017,653e6ae6,bb93f09d,61b58e9a,17dffeb7,8831f6ba,7ba463b7,bb7b142d,d55c8aa2,91bdaf7c,644e8ec,14f8b516)\n,S(2ef6cbfb,728d976f,99c71db0,5389bba4,ecad3c14,8f2597bd,99af8f74,965e4f3b,19a27ba7,a382078c,3f1ebe8c,1d93a37b,deeef542,cf174273,b411b60f,79b0fd00)\n,S(972d732b,9af8315e,88f042f1,3377871e,1a429247,d8537436,98b975d9,33064a0e,308153ba,ba4c3b87,40a380fe,e4bcbba2,a5c2ae3f,25fde1d4,f40af4db,aa4fd28b)\n,S(3d378b34,ba4998f1,833aa295,185414be,e788bced,af422ed3,3c4f2747,6e062a4c,46a4559c,9217f919,80887b50,29f75c01,3c3d5238,d3758170,93eda1a8,f2c4c8a3)\n,S(fbb2003b,1fc1b3aa,fd32b289,abe3b362,b13d70f2,7d6451e3,76bf882d,395c3087,97c866a5,c462362a,4ceb96bb,9c17db03,f28e5b1d,4e418a81,653a315c,4dfdabd)\n,S(28fa94e,8eeab1fa,bd27a9,258e26c4,295efdb7,afb5a47e,6e14de8f,877a0471,f7619d0a,f2eee8f3,c0c7b5e2,8ce9d0f,62221919,4d1762a5,5145a909,9d23276)\n,S(4708a285,7eb9c115,71627ede,6fa8fe29,4be27233,8798f25,c12cca0e,f9308ae9,f35f9964,2e773990,b2e0ab60,1a92cf56,85403466,87a8c35,50e36b91,ca4fa449)\n,S(93408097,6ff4b874,d88903dc,b3ceed6e,a82427cb,36b62c6a,6364f2f8,9848a62f,e25a6962,d4e26764,9ab2d4fe,a0babf7,daf64d48,98bc60ae,ff3cfb63,e95f3c6f)\n,S(f4a42ba0,818201ca,e3195da9,3a566623,9e0d24dd,256cbcac,3959dbc,720ddf9a,8fd26fcc,be3eff0,75d194af,e7391285,10bd4c8e,7230f96a,60fd27e0,a000f86)\n,S(c5ada616,e65bcd40,cf39ef6,197e0a97,791cacef,b41b0991,9c51b166,e3a6240c,e4c65d68,fe41c62d,c85b0b32,39106ae9,cc26787a,60d351a0,4a7008a7,f96eb8c3)\n,S(7c193ec3,d3f1d91b,cbd7c62e,5061a5a5,e8b1fa48,561102ba,ca2ae100,80c640e7,cc7cf895,511408f3,e400ff31,8a53685,3b8e068,1d4b333a,26b59cad,97873ccd)\n,S(77542543,8e7cf128,32165629,3e6a1c19,22b76355,1ec716f1,d96002b0,ad1bd3c3,3747169d,212c37be,1906eec2,8860af9,edf7d932,c187c4,debbf800,8bd2137f)\n,S(92dd5399,fa75e786,fa5c0f7f,90abd1a8,bb48ff43,e54dac5a,3b9990f6,27d90992,5cb1be8e,f93783e0,c2e5c824,ac6c5348,ee493231,9932e9a4,6e54921,3f11b7ba)\n,S(c1770828,468eeb90,10b55053,2a532fe0,4f66e7a7,b7a1cb37,6eb6ddef,d693157d,da5643d,a0147d47,fd29e262,f61ae4a2,70e5e9a,77a76bc2,d2e7d24a,819a2e11)\n,S(1372e116,e90ae522,4649a534,111392fd,a8baabe5,be8a8ad5,33cfddcc,af6378c8,5efbd4a2,695775bb,dc38c2aa,f8da6f45,1d0a1cf3,2bc584d6,e9b2b6e5,c8346af9)\n,S(2bbdf21e,9fa1a2b2,bcd52009,7f30929d,5e2b7fa,e1038c00,8f32d86a,65dda936,51b78998,6008bddc,616c0dcd,2a883361,1806ebcc,5843b64c,b0ba02c9,339d45ec)\n,S(36694ca4,d0495ed7,78230d49,e6f21217,9b63cc7c,26ee3f7f,6a7438bd,753005e1,2e49e3f3,bbdcb133,3ff1e17d,b18d5267,a87f48b6,95b5f907,5f5aa0d1,70bc0af8)\n,S(243d84b1,dc9ce143,a6913bf8,d13c4aaf,6fbc1373,6bb8a7e8,5e648958,32013b8,39317ad,b6bec71d,ffe3c2dc,6dec5e10,21a3dd83,2dffeb91,108abd5b,6e7f28bf)\n,S(1d888387,5255f3f6,838eab82,1a12a8fe,ba6dfde,f190585d,e039542b,2d91ec92,a9d38be2,e919f815,5d633538,d2f0aef3,9ccabdad,dbd912bc,46c2037f,3324b489)\n,S(39a21f75,4c0d3376,f7560e2a,a743751d,5512d628,7a480955,6456f9ac,b1be3765,3cf324a5,2a7fd79e,3bc188c4,d55bb449,ef4950b1,3a4531bd,e0b2ea9d,4035e005)\n,S(a10ff60c,d8e25df2,a1d394a9,52c67f6d,18ab0a1f,a56569e9,48d9278e,b42e21c8,b45f2d63,3ce82ef8,1dc0c0bd,4f891473,89fd2b35,f02cb237,bfd4f502,df9e991)\n,S(bc269792,d5042f7,1051f7a6,46b971f9,bb801acd,dc24a2b2,5bbc459e,b7bcbcb1,b70445fc,1c032061,61b01530,c9205d7e,c7fab6de,1d83f1f4,78b35bd7,71235665)\n,S(3d7279fe,fd5a3682,a82a7f95,d1db4442,5f0ef448,f6bccda9,9a61c240,9037cb95,df5226ca,e6365b7e,22b42cca,2ba2494d,9a2ea193,cd92162,2de6602f,70159740)\n,S(e0c56d30,ef92af00,b936c2bd,951b3d51,bc439ad0,e4216e2f,d552c2d5,e8dbe588,c2bd177d,2a75c44,40dbd186,27669a0f,f35189c7,a4873e0f,6484b3b,68555fee)\n,S(9bf960e5,2b7bbf52,fd839830,634baf1c,f0d6e332,4272bc15,d9999ae2,7873315b,b28719d,20e01dcc,b0016cb1,6a453739,551862f7,d9cc81c9,6662387,1d8d0405)\n,S(20df196b,e60ba71a,e617a6b1,44757e0e,87fffb45,d447d9dc,d5480a0,34351198,9c722d43,c0d071b,a07d4953,9ad0abaa,f12ba358,42fee0ae,9960ce1f,26eb07d8)\n,S(843c136,208b40b,9459693d,8154980,455a5f71,23b5f633,a26661d,ca9bac17,d5b5bd8d,9095fc40,d2d1820d,31dba542,d0c74f23,86770ede,c9b4df46,f2f12078)\n,S(9109b4df,702c1ea0,dea4ee0c,ab46d6ef,708a3fcb,72f9dc03,e05bc722,408d11a0,75baa2c1,8be5801c,b5315195,4c2c3024,7348e9c7,913bb242,cf4ecc8b,96dc507a)\n,S(f10cd1f5,c960a9bb,12adff03,c203c59d,8e51552e,3727edb2,329eef3c,5991113c,a84ac8e1,6f65daa6,16574689,8fee662c,9d2e03c6,4796151b,8f3f0bf1,5e8c465a)\n,S(9f07713c,ffd3602f,ad077b69,a8a5f539,ae0d6d0,df58ba07,1eafe6ad,10e747a8,adfcc873,42b59083,cdc3d735,782f8ec1,cbb4ea3a,57970afe,58cd5e5c,8fee867b)\n,S(6d1d9d0e,32905734,13b2b870,fff8978c,5ce9ec6c,b120d9f3,64063342,cd95801a,650be4a8,95d3b602,4d745f7c,23bbdce3,25a3f597,922e50ef,ba154f8c,6831018f)\n,S(497185a5,6b3acc94,7a27791c,7e1fb149,5c649f99,dc767fa7,12820cc6,6cdcbd82,7d511b7c,11dae1b1,7e4078b2,fe7565a0,f33ce5bf,74181c3d,f5b6a951,fe6568c)\n,S(fff738f9,848eeb9c,4ddb8bc7,52cd87c1,9a35f7be,14a470a2,c3154ff3,100a743f,106b8a55,cd913c97,76837cdc,f45c58a0,211b979a,17085df5,7bdff373,2f2c38ec)\n,S(320391a4,8d3546cb,4466876a,37d60015,41899ef4,5dfc8e38,ccb9021b,981b4830,46f63030,b4559411,e742f303,25707b4b,23fa2d7d,e633800f,9c71205,6651b102)\n,S(be44ce40,a925e88d,26937f7f,b7631f18,55879106,122813f9,adf16e00,5d85fe9e,1755ade7,d22e6dc6,7e6806d4,bf44b6e2,ca6948ca,9a418893,24db0266,2b6e1dc4)\n,S(8d3f06b1,58ddd609,f83b0531,466fc2a3,da6aa80b,433a92dd,eeb20435,cf33ddae,2d554a99,efde513b,b8b6e5f4,dbd2e942,f1d0a641,98c3df2c,4c74705d,4b37af63)\n,S(f814a79c,f258f553,255c1cb3,a054fcc0,d0c71d74,742b6627,210ea846,91596729,119fc95,be48b4b2,23c80c42,fd1f3d45,271ce8a,edeb82dc,31813f75,a32d867d)\n,S(95e8fd46,1c37f1db,5da62bfb,ee2ad305,d77e57fb,ef917ec8,109e6425,e942fb60,ddc28b1e,dfdbcda1,aa5ace31,60b458b9,d3d5b1fe,306b4d09,a030302a,8e2db93)\n,S(c06543fc,47e18816,bc720604,cfc20826,6f4e5cc0,f436e149,e2dab0e8,a7981e77,22070465,f3a4a7c2,1134819a,c194cc9d,28185431,17ec634e,e6634831,97021441)\n,S(4983d95b,3716aefa,4a14d116,bded84e1,fd5b050,bd6001ca,a2b97086,b4d5c68e,1373426d,a2efcd14,333d47bc,ebd3befc,f5e609a6,6fac1b02,80cdae2c,7f0a279)\n,S(a2bd5cc6,92e84b97,3ba2cd09,25e0850f,ad8054ed,e6b73ef6,1fdcc958,3eafe6ab,cca6e78a,f9141b1e,6159011b,99f8024d,33d8d797,9795aa4e,4f0b2767,e6a5ce2b)\n,S(61c99231,a18f4e73,95076281,b367d084,b8f85226,3117ab60,bf698d4f,6b6d741a,82314b97,9e7f1d30,64861609,a08c019,af886db0,67d49929,9d340814,6e6cbfe5)\n,S(4a5acfef,32c55299,3a7114fc,7913321a,d4072a2f,6c6bcdb7,3ed60bfd,6ab34304,7295a29,c06859b2,69bf9f29,64b26dbf,1323e89,4affa4da,9f61b056,9a0c03c9)\n,S(e0467755,866f494c,2b36dcb6,c65ecac6,604e5013,4216ad48,7d4f5b68,bb7f4023,dead03c5,974dfa1b,f532f955,826189ad,ae945975,28ece029,d9e5a42c,30b336b3)\n,S(686fdf05,c9265fdf,5b54ca74,b5b1e231,c4e8be60,20844596,40dc0d2b,bb215ea7,f4d43e1c,edf9b974,aef950e,bff3677b,c93723f2,c5901710,b6561e53,d57ea7da)\n,S(12476985,f9b20c,ea62b7d7,b0d96d2f,e2bcd924,d1f15cb9,fce5ecbb,8bd21253,d3437cb3,9e904fc6,43a7b356,b4389c0b,3f1950f2,43dd7842,e32de16d,2b522004)\n,S(656bdcec,9a87c9b2,e5b32291,9f657b,b5eb1e1e,d2fa724e,45388026,2ad17b1b,c7748d0c,47b6e4f7,f63f704b,3fdc08ff,cdfc830,d17c1d11,6aa3dce2,f92fa64d)\n,S(5b7f710e,f721612,ca79b24,483ced12,7a3d403e,60ebc04c,3aebeb96,b483e4b5,1b5157a7,f0688aee,634196e8,de5a9eec,11db4b72,bd96b86b,698f7284,bfb08080)\n,S(bfca66d0,552ba6f5,5795bf18,40f90d85,2545213d,81d2cdea,bc8d3d04,a1e6b4da,4910b0cc,290d4257,c04c4638,30cb3a10,223043a0,bddd8690,84b6dd1a,f1754e75)\n,S(663fa68f,b79dcbbe,4798f8ef,2057bd14,1447c11b,cec70924,7f566032,88496f16,3ace2efa,1f3bbd23,d885598a,91d1f420,a42597a2,ab30f951,f2b27aa6,83c41786)\n,S(27cce333,8a3db8f2,1fef2f86,ede68a25,7c1675ae,80cf004,6085f1de,495c4321,7156bd8c,8babe472,eb144a00,263d4fdf,7aefa69f,da2a9c29,4b16a82b,24d373ae)\n,S(d49c06c4,52ec5c09,be27940e,13c575ef,b727be4b,1c0e8ce3,5aa5bc4d,64bd9560,2c653518,b298100a,72a66469,f9a03635,5d7ad789,546df3c2,f5175238,e78d18b0)\n,S(6960807e,bd028026,d3cecd25,140d3bd6,3d7bf4fd,10afd129,cfa017f7,544ad08a,a785044f,28befae7,2b7cb546,5bda6bdf,6f9a6383,aa9abf4c,f7baeac0,920e7c7c)\n,S(8382bf36,54b63a71,a3b75abe,ba57dbae,fc9263c5,5a54faa1,edeb5325,3df8faa1,e05eb9dc,c319cb53,4461da26,9627661e,dc9bef3d,945766dc,b6d0fcf1,849b011)\n,S(803b9379,30ec876e,78c8cca9,fa932f22,b7e7059a,f605379a,cc45a3d1,4ab0bffb,7db2341c,5202d1c2,c6fec7d0,b7869471,cb90d1dd,17cd1152,b52af046,55e5790f)\n,S(cb4db129,ab6ae9f,11165ff4,f73fab02,cb78fb0e,89647e08,f998ba11,d2c5292c,ccaef9a,1776384b,b5a80ad6,5bb366fe,745c2408,d754ee9e,f6154188,d7d1c9c2)\n,S(fab28757,50e9f672,3838be8a,fc070fc7,8fd6af7b,84c9579a,a8152acd,ecd115a2,d59fe028,89cd562d,5397d3b8,3ae85303,764ee931,d9c6e495,6c311490,c0b3f065)\n,S(dd879eba,f870ee3d,f6e3f03,60833e12,fbdf844c,d6a5b76c,19802485,6649bbc1,e7bb04c3,a99a5c11,dd7a324c,1d5696c8,b041a12a,c6a538f7,3094716c,9943c55a)\n,S(7aa4afbe,29b06a1e,da9319d5,72572b13,1df68f74,1b5f8d8e,d00ccc04,80f8016e,15f79a9f,b77b8587,7f02e3c1,3202b972,423fd00d,937c0d2d,c9d94b17,53fe7130)\n#endif\n#if WINDOW_G > 12\n,S(9145f3f5,876a3265,5d7fee64,f2d6e660,c34354e9,1571d68b,a19e4cc5,8c39f890,45e0a95d,cf369fd0,5bc9ba7f,da108d6f,37650c1d,5766b6c9,98ecda28,b285d8ff)\n,S(5450b752,36fb010d,1ef37afa,2077f3dc,a5a7f6c8,91a21317,13df740f,4511ac9e,a7c7ed57,62bef86d,4de1084d,3ded2d7b,13ff563a,67109ef0,8b6f0180,fe6ba175)\n,S(ba6c0d72,5e48de2c,cb8256d6,7417d075,bbf2766f,d13501b8,4c32cf88,c0666a0f,cd2a9132,7137299f,50eda669,3a599032,bdecd64b,91bcc640,5ed186f3,e525e442)\n,S(b94821ff,1feeebb4,6fd1006b,798fbdf5,d25a649d,aad58b05,53adb7b3,9605c921,21589ba0,79bb92a2,c7c3d950,c574afcd,f45ccfae,eec4365a,72dc58ab,f9077c05)\n,S(46436446,497f7c76,b70e0d7a,5a963cc8,432f14de,93d61f81,98f8879f,da0681d,29344a4e,90c4d810,10da8aab,5ea25e5f,48c367e5,b3ec9239,8a3e608d,49c83a5f)\n,S(bd8e5ac6,a2e210be,4959185b,7bcb0cf1,bd3be917,5baa0d08,2bb0b38,e4c1ae1d,6b381be4,6dcc9755,da7773a5,eec888a6,69c6f71a,7c3ec0a9,4edf08aa,2db1fa19)\n,S(c27c1e1a,c428a7a5,f4c3405,58ace76d,7fb64593,b3942319,74cd18ff,99f22493,fc95d661,c12f7b3a,1cb1884c,fa9f5994,25108af3,c05e04a4,9544f919,c59cf57c)\n,S(a1765561,837e4ca5,5268168e,ed90466c,44c17c01,4040fc02,9e53af22,77eb30d5,8a2dede2,b8d488bf,cd655d0b,30e6e2f7,3032c775,d0fa15ae,cfc8b66c,b6c28eb5)\n,S(2bf6930d,35cacc91,87e9279f,678ba368,e9eea737,8300ef93,b03e98c1,81ddbea9,8a2d4d43,3aaa8bb0,3ffee538,38ca8e16,d0f3f930,c35d0db4,6e2fa069,e625209d)\n,S(766a7725,9cc5aefd,90f005f4,d6755924,a36d085a,3a5856a,6a066a70,6877c8d7,db3fac97,4fd9e2e7,f05bfad1,5e938ef0,90b46d04,bf40bdc4,171c1e33,48049190)\n,S(d25a60cd,953f21d4,5fcc333c,97329da,134196e3,9a913242,88792ff9,18461268,89bf2be8,bd04835f,dbb874e7,12352980,a07ad598,9035270f,397f24ce,790c7863)\n,S(c7b28e9e,8b7125b2,6721f467,b665eafd,9bf56986,8ca180b3,60dfe429,cad95d68,ac28d58,b3a7b61a,71f947ed,8bca4768,9ec7bf34,7646a167,b37c3aa7,9e95c398)\n,S(e2a5208a,c61f8c29,ada2d7a7,4cfce985,20c29160,f1f7a97,ce8b34dd,7c59bc24,de8ba14,49708a04,ccb4483b,4e90e383,a152ce27,777fce4a,880d9f5b,3dc70830)\n,S(e1e8e4cd,2e8df95,d3b2b152,a540967d,6976e001,88287ca5,3e844adf,12e205b1,a5dbc6f9,cdc7547b,cb3f0091,8233723e,d34aa97,f546a491,a77d8cef,43bfc9e2)\n,S(b20f0a51,4a684e55,2b228480,3f3b1c2a,3c3143b3,b895f75b,ea454bf0,9d2b6512,bc3db380,676d0d14,9c0b0c3,1941a07c,f7c95585,cd44ec31,e0edda96,e80d02c9)\n,S(b71a6923,b1adbf77,94cd9d8d,407ac96f,9582cbc9,b9748949,9cfa696a,c29d3ec,75182389,9d59558f,b93113c8,d38c72d2,7b6d75ee,7679fb1c,89bfce1a,64b4f151)\n,S(ca47adac,68ba38d1,8ccef76c,7565788,a82f415f,d9dda65,2004d5c6,a7d3bb3f,bd598ab,1b783382,44035385,e165fd5a,ccd8454c,3969d378,42fad050,4a8701df)\n,S(5fade148,aceee9ee,9fb4eeec,edd5e4c9,4fb989c4,d99f65ee,a45f99d0,2d40e441,ba6fca3a,e82e5581,ac5104ca,c8dd2c00,15afd1cb,3943f1cb,5e61dd4c,d73831f0)\n,S(767dc9d2,14fccf00,900ba01,a1cf30fa,e834c851,e633849e,8adada63,fe5f84e9,8c650911,aca30e56,2d6b97a5,2fd7cbfd,1a5bcd1,9ae197d6,9ee3215e,64404639)\n,S(27f8f961,445e2a20,5daa7648,fc3c06d9,523544d7,477e686b,91d7178b,7e4f06d9,39110b27,82cd7be9,75596bce,6b79e5de,37933242,21be8172,427cdfd,82a73a60)\n,S(8de0485b,343b5e4b,ada4070b,f79dde48,8a1b2889,839735bc,6a403165,3f3de668,90305767,6f43e0f7,d7d1c1a4,4c59124a,12fbba72,8302e143,1c2cfae2,ed5729d)\n,S(5e43db6c,8770e8ae,8ab8d318,8e700c28,5b6af8a1,eec95fe1,b68e5cc5,952df0ff,6882628d,d85fbcfe,3a2a1091,15e59c78,9aeebb3d,37075f90,ae02a439,506c7aa6)\n,S(7db2baab,4bf4300d,e7caf4e3,52df1423,6102863c,edfeb7a0,89311f42,59a4ed54,387561a2,fbbb44be,303fbbcd,685909cd,e553a84c,a3d4c0cb,d33026fe,178e8a84)\n,S(96da8525,39106887,d1fdf9e8,232db3e4,cdbefdcc,abb90bbe,fc04d10d,b996c6f1,65271a31,49127341,9fb5d651,3dc33287,45948c92,b7fcc509,4023d300,9bf9edcc)\n,S(84eff1cb,14eb1284,f5ba51fa,838b485e,64cd4c0f,acb97b00,81ba7848,add50613,926c9c8,a6540a8d,7b1e602b,6ce818c7,609f4511,32f284fc,7f578c52,a6febd9e)\n,S(1eb96371,8e2a2a0f,f5ee6000,7bf94a00,416e6a92,25d59705,7fe19941,e2adfbbe,4870aad8,9635ddfa,dc3d4011,500639aa,d3cf0523,cff0dbb0,9c9f6a1,3005b855)\n,S(2994a36a,6ea3f307,1bda8696,baf193df,c75fd4a1,f7683fd8,d454dcb8,77bdc098,e465e8ee,a7273d4c,d786bd0b,e96fd3e8,9969bf03,1b76aeb3,fc82c4c4,bf856766)\n,S(25e7fb70,f3d357a2,c29b115b,5e2d97d9,d2b68fcb,b7f2fc00,237758d5,9d26c414,4959a370,a3bb895e,bf530fa0,13a86ab8,206b7330,efaca631,fed26773,f356c4f2)\n,S(fc387f98,80bf6bbe,19f0481a,2d66bc5b,c3945c52,588860ea,dfd5893,347c0623,89d7b80e,83caf032,9c9d07af,734604aa,7ba33274,c1081ff,16e663eb,b49d67c4)\n,S(c50af368,c25fc9fe,10220fa8,2f177720,ef5c00b4,85fa99,e2f03294,fe01e1d4,c3777b26,41983094,912b80d,9e94af7b,27d9f10f,978c931b,a4294cb6,b97579fb)\n,S(a0f9d109,d524d9ba,a2e00362,941a5f20,d7015c48,554f5bea,7c97617e,10041f94,28c51c02,daa5e108,3e77ff2,c64560e1,2eae923a,3a699f1,daf3c62a,710e9ad0)\n,S(41d12627,58b708,58727138,908004b3,2138bc23,cbcdfa28,5da862a3,48316de1,6277029,153bcec9,5c95f451,3d515d90,341d90a4,90eb2999,d29df4f0,7c1b9673)\n,S(944c58ce,fe6cf543,d93afb77,e33adb3a,5774448c,d61d621c,fb80f856,6e99ca87,c071ec1c,9b7fc717,ca91c557,66bcb222,3294958a,b7d7b056,e7473170,284d66b5)\n,S(3307ab12,e06d71ce,9c029bf1,88eebb58,9a27be59,17290635,f2babebf,be437145,889c3cb9,28cf9091,4748dd9b,f89e9809,4a6966d0,97d854c3,c6b6a949,c861d213)\n,S(42baf011,1eb2224e,4ca03abd,24307b6,72b74572,2db6a8ac,dee1b7f3,45cb9ae6,bf32e128,d608dea2,4b564bec,38d22c5e,879515d2,7379cb11,25695faa,2e12ee06)\n,S(856baabb,be7b4bd0,49fbe898,110d1175,166c69c0,a2bc86bf,e734c854,c402c621,24a323c9,b6d31fd3,cd424161,be229e89,1f825197,9ed4721b,943d7418,4912ac0c)\n,S(38dbc18e,d998143d,874c224e,de83834d,95aeeadc,805cac1c,3216d830,d24a9cd4,273ec126,f7e85778,ea38e2ea,a90ab5c5,271c6eee,7f934a03,570891e5,167eae4a)\n,S(359dc85b,ffcd2329,3166bb20,c8374af1,5e24c065,a5f48d92,c981eb81,4988dc59,de5dedf7,deef588b,90237d06,e437bdfe,c4a05703,f77b584a,e58162fa,bfbf39c6)\n,S(e1068065,e2e91c88,3de2f73a,6a5f3da7,1d872a74,9d7f283b,b1ca35b7,c63666ea,810c3a52,b5df0851,87928afa,a7685035,a7e155fa,c8dd4523,c5ed1f01,73752cd9)\n,S(50767f71,37e7c9a6,6e317183,cddfdfc,b564956d,cbd5f3c7,fd8506d,dbb19d83,e1c2dd5f,5e9d5fed,807d24dd,3f2e0ae2,393b6167,563db9fa,5e338664,a0d4fff8)\n,S(44cecbf0,cdf88355,f1216d0d,efcea137,5e01275f,f53d8a72,5a0b5980,e6e65864,469568e,5094e9b9,ee290550,e67bc636,e8e3f022,f15c8d2e,25c3ad6,f51cd40e)\n,S(1830c8ea,43cbb07e,fa2fe597,6afca2bb,87ed8a92,602e05e8,86ce3447,96aa18b3,df551328,e064aee7,67f56203,7fa31c11,3c8ce2fa,b5445d65,8bf1dd84,2f1da49d)\n,S(58d54b7a,473a7ab2,51c33417,a41f4ee4,708245ea,c4f8eb79,9bf90aa4,bd9326c6,a191f338,15e2e07c,ca4c331b,fb1cb2ca,a1692093,faf5e789,1ce45a2e,c49b2a85)\n,S(f0dce604,9507812e,603af104,42fc9861,70a18b6e,44e81af7,ba192b55,12c6792c,c221a221,b5e86ed6,23e48df5,5cf0f560,4cc60eb4,c54d95ce,3ada7b09,bbb966e4)\n,S(42fb09e5,72c0302b,286aaa04,644b26ae,e4b958cf,ae5293d4,d7ba505,59dd2ab5,79c10573,a00e6888,fbc7ec76,983e7d17,f46e1ba8,27494099,43781bd5,19f2299f)\n,S(7adf1551,ddae0c9a,8628db25,e0dad10c,935465bc,88b005de,ea2d0412,f3502ecb,657c0ba2,143cea92,c9ef5c3,69d110a1,2e031e67,9d945a9b,b3c5886f,29acfd20)\n,S(dd5a48b9,56fdf6a6,d6271310,afc2f5bd,3a7bfdc9,28125345,4dffd91c,282c7a5a,7390d037,2e067f36,fab52107,29590464,2ac6b0cd,91a161e3,85df7cc1,7ca52657)\n,S(631850b5,15374594,be1c783b,104d2ce0,13ac763b,1d36301d,2936c2d8,8a1466fe,2490ce1e,a9b67e44,a9241416,c5729ace,2016d202,b77efa85,78bf3228,c590882e)\n,S(332e39e4,d6732229,aed85cd5,83a3ccc4,24466869,bdc6a8e0,741b0e06,f3a0bca5,90840f03,60db52ae,a58b1b4,74ad65c,b66ac30d,f4d465aa,60244d48,5d7578e7)\n,S(de019556,f0c7e1c1,6567224e,826532f1,d72c0eb2,91e70980,de7513a4,362f0c97,39a3d79d,1cc98840,4162227a,66382529,d75fa5bd,64977e47,9af0aed8,68411ea3)\n,S(4c44c0c8,e675da80,c6ffbf2,61b82e46,4f81b76c,a3f902a6,8094a2cb,24ed859f,59e1ee88,1ecc45de,d8ff2800,243ab8ac,c5497897,1a3a2246,63b2b593,e45ac34)\n,S(e60339b8,481e19e,5c1f4d1a,85ddcec6,a4e0dcbe,113e7d28,2793654f,309286a2,9a1eeacc,a607941f,b51c7998,ed2a5a98,bc58e3f9,4737f72d,1b08a706,a49d9d59)\n,S(10f42ee3,e7292f3,9f4bc472,708ffec5,c6ad955,c5285be0,d44d02c3,d8a25e66,6f365f0,53ebe28f,db9d5f2b,c967cf14,183e130d,f01a5106,34a975c,ec916a25)\n,S(7e0931ca,d1286687,7d2fb0f3,1c58d74b,703af3ae,593a9548,b6d53d86,6729c445,5e4b9fc,75eab41d,663caf7e,8056f4c8,a9c34af9,22773ffb,f5a12174,1f6b0b0b)\n,S(36313f7e,f9613c6c,ff14cd1a,78362f7d,b7f1acc0,db278f1c,6a011435,57963f22,1e6946ab,2a94231,4ac6627f,5494205c,33960a91,ba663a69,8641bab4,43d7edc2)\n,S(223eeed8,8eedc265,b2e18a63,ceaa2e9e,83f9ba59,2fc8f3bb,55cec574,2869fe01,72122173,4ae29bfc,f3632cc8,92d72d10,5593f7b8,d687e5ff,eff21095,c1bbd71c)\n,S(b6bd5ec9,33302c5e,3fb9b32,18795a11,60dbb2bc,f9a9b5fc,31b7a5a6,28b3ec20,fb9f87f2,98a8e5fe,b15f051d,63b48bac,34f373f3,9b42a42c,d0f1d2d9,c99dd495)\n,S(a365a760,3b1c24fb,157f69ce,8fd57ae,5a802dbf,3b8f92c9,8f0a8b01,4ce24668,73e6422b,7746abda,2a38cc7,298180e6,578005b4,1b0d3760,6f2bec3f,5c0a89f9)\n,S(e86f8fac,43e436f6,f4adba30,9d446a07,e24bac1e,d379e13a,a235ca1e,d7cebe6e,1e7bb4ef,aa75a9bd,713a592c,42a01134,930b7402,77cc1cd4,a913d6db,f4a166af)\n,S(f5a57dfa,d2b25571,dad09304,cfde1da2,5cab3e2,e85895cc,9933e868,eb9bd5ac,d265de5e,8fc90e41,d518dad2,68997a24,8eb90906,becba9b0,c768c5e9,877c1ff6)\n,S(e1dcd17a,7259374,7e6fd8ca,b2464a9d,6656607c,a2bf10f1,45c45947,75f76c7b,efa2c310,23f86d2,6489feb6,1232bd44,dff819ce,6b95678a,130de640,4af9a20e)\n,S(83f8abdd,84996ad,1be74b80,a05da9ab,cb3774fd,cca40c3b,afd386cd,cfa801ff,267ebd64,329fb10e,56ee792d,966868d8,1c85ff37,6aa24287,3d37c63a,4bc3f63d)\n,S(54cc9d79,6ca85a90,27487c71,6511485b,ca324b1a,f34fe454,ea9ba54b,4f259fae,18c39071,ef0b861d,7d016e9e,deb6e83a,3c6ce8c1,517ce0f2,e201da0b,fab2da2a)\n,S(9d12a52a,e0091654,e2875ac1,b11f8744,1c3f65ac,940e6a51,6351c219,31402ba4,5ffbb334,276219af,418d17f3,9f5fad63,c6d7e42d,d53f6e52,bbee2f01,38e81d2e)\n,S(659bfdb7,66821a91,cd030917,ff21aea4,488007f0,b7ef3824,4f23b665,e6496998,2ad708bc,4506e85a,341ef96b,78bc247f,d7321a8e,bc21f9db,8444e7ca,254784e0)\n,S(e2cc4e33,d4a08374,4866a253,81549a6a,76ba1b4f,57312413,d601296e,5eb4670b,528b2b25,347e7f34,7b79780e,a64c3718,80497f0b,a3b28e18,79714089,a4672476)\n,S(529c0b9c,9e21c36c,9b2164c0,fa505601,e8dbbac4,cfcac131,e248e103,e6edec68,7fa44821,72a0ca01,33669e6a,bd2e0386,6cb74f5f,9cbb7e4,96770129,567125f4)\n,S(289d6baf,be6a7d1c,154d6532,a80fb65b,3d89e57b,eb2f1dda,654d3553,683b63a1,801f4863,d3ce8d61,60e2c62c,55267877,db149ff0,c3cdbb53,38893168,7d005400)\n,S(d16a84c9,e3b36660,7c005bb3,425ab432,2eab9b58,58d1899e,51f2ecf0,790f14a1,2c6f5dab,10715328,f9ffc5ea,4ad6e0f1,46ec79cf,19cb2313,79bb5198,5156dd07)\n,S(d03cac39,4fdabfbf,440a6893,e410dab2,a7062df3,ecbe1aff,d30703b1,6b6348f1,152313ce,f530b317,70d85c08,7de95b1b,5dc4a86d,38e4040a,e5d1ba34,449d19f9)\n,S(b66b3c6c,a673c4a9,77ca7d85,1f969858,d4c4b604,bc497101,c89207b5,a863379b,54ba2563,771c6aac,482c63cb,7156961c,4b00faff,187f0560,9a470b06,31624da4)\n,S(be684644,11c47cd7,dfd3127f,4e7d7308,2a43fb68,79c5e86,236e4516,a98c8c45,79290f83,c61d368c,2e395aae,b9cc50e9,7d78ddc2,fdee9f19,a15fae85,826733da)\n,S(478ac3a0,9f34f463,4d61de70,9ee01878,4ca421f,91d20e0c,5c62bfb7,afcbde9b,f752f3b2,ccbc1096,1ae7526f,5574b5f6,e4bc7d4b,f77edc34,f6e37655,7b0988bf)\n,S(745f355a,f2ed71a9,9d4d7de9,c9bd4a13,7271a2a0,c077c796,e7064179,8f3dcfc8,18ea61f4,6b0c87f0,9ed05816,c31e1992,d4fe8826,630c5f6e,67242063,86e288b9)\n,S(54e7bd6f,9878a8b0,909aede5,9286427c,a3157a8e,38ab94b2,18db520e,86760ce0,d7b7d80d,c1eab448,d1f3c638,675dc0b4,e04bdba5,340d3f2d,dc1d24f3,dfb8e49)\n,S(ff56afb6,55eb431e,f3c6f5c7,fcc6febf,99b018ae,3dc95208,27e4a01f,a07d510e,9bfabdb8,42d7b1c7,9f4388b4,49a28d6,ec723210,ea27509,655e9b44,2591e371)\n,S(c2bcc099,ed298fc8,679d0250,6d8ea790,ea511b41,5ff3ebe3,82d39d21,fe9cda72,6c7bf2c4,35ecf773,5b6c31a5,82fd38c4,825de4f0,58efb070,aa1ecb58,530f971f)\n,S(2383f144,9811331e,6c54b9a1,19c681fe,c8549e36,890b80f5,99a80187,8e2ec4e,13ab411f,d846b6b5,938a999a,704470f0,d8fff03e,9dd35cb1,44860a0e,3533a1f9)\n,S(2f2271c0,d4fa1d8b,f8a44584,ba4f5266,9953f72,89de16b8,17d6bf0c,6e096048,646ef05d,b40e50e8,b6f32c22,63ef553f,a957173d,a6f14ab5,7cd60b60,2fb42fc4)\n,S(b7b49b1b,f067a27,eedbe55c,bb011eeb,809e7ada,ada5d08,9bf1f26a,25e951c7,fec760ac,a8160525,ad6ec95c,7cb0329,4a9b7f20,45907331,5b2dee2c,7f7c33ed)\n,S(36c8e1ca,d9933e5c,971866eb,12daf81e,7765d4cb,9f0af557,94181aa5,e5409223,895eb6d0,a0252282,d71cc730,9116ea95,22f2e35f,52498853,e291932a,dc8b8fdf)\n,S(3cbe9127,63283592,13173e01,8cc2b0e0,fa5b8a11,5684cd6a,6ee7bde3,bc1ed523,7b2d3dc9,22f96c9b,9970aa9d,c75f1e15,c5149ab3,d0993055,e4df30cf,ce44dc81)\n,S(76e94d41,c4639419,23448d38,8b239e6,fe0aec99,314ed16,4e67e97b,6247213c,8ee4a6c3,2f010749,103460bf,d75fa38f,f9efe4e4,bf283cb5,a3bc186b,21fa1278)\n,S(493925cb,12c0e7e7,a15749e0,7fe9dba,5b265d27,8eec0c08,506f3433,4b1851ec,70900c6b,3960a465,6cab318f,9f730a66,e4a2400e,d819da9a,1f5b16bc,4c62b193)\n,S(b37fdaba,d1a1393d,79820eb4,a4823d38,3873306a,a9f5e6b7,51173aed,c43cdcbf,8506f0de,57fad139,e20df67b,e30a75a7,dfd325f2,9e35652f,28fec608,f27030a)\n,S(4451960c,48e95c49,32b0c90e,9f90724,8f2b7023,9c6c703,3c29f4a5,b0a5e8c1,83553a18,d9ce9f66,961c9e1a,47766a4e,28bc404f,bef524de,53b1b687,d4d7490c)\n,S(9b0ac1a8,697c69b9,80cab20e,b3f98718,7857721b,c869c704,caf63b80,dfea3449,210e4c53,bf1bbf3f,71e32a58,22809853,61b61723,72e845d,65b5661d,fa7e60e9)\n,S(e6697355,ccae4f7e,122d62de,1c00dcc5,32eca4fa,7dbd1ceb,e92684b4,781e0851,1f122cff,dbe5ef3c,944353f7,18806a82,9d3ded91,427bdda1,736ba236,e9bdc3cb)\n,S(ffa890f1,1a1aa4ca,1f26f86,1288bac7,ad480a4e,1cc47f2a,fe39f260,f167201e,1688dfc4,1716fc3d,473c4149,77d0ee8c,ac569cda,b01ab5d,69d449ca,85439cb4)\n,S(9088d4f2,6ce238cf,63eb09b1,5c04a04c,c41fcc57,946c6c14,cd3b1b4f,54b6bf47,9e380417,bc61004e,3d5c9943,b3d359db,2ae4ec81,2b70e909,bfe265d5,e4d2c2b9)\n,S(a3395dda,c1e760e0,fe7f7e5f,e3296bc2,99949ca2,2c034707,67c08ffc,d9576a91,4f8a879a,54036d17,16f07016,23dfcfba,3141850c,de003870,6ee940e7,452393d3)\n,S(11e54d64,54aac1e0,58cef234,51f686a9,1a77300d,75330ecb,d208678b,2b8ad651,749b2960,5a8419f9,c5521dfe,f552a24d,aaa53f45,908d2679,6e08b396,c9c020f2)\n,S(c8f13cdf,7b41e822,ab6d5a70,7c701d29,98f5f0da,8e4c9746,75e808fc,64327f30,489a69df,17c09c1c,dec329d6,a1f34f60,445d7aad,d609d94d,44168947,c3199404)\n,S(9175e6dc,cf674838,a94c628c,3e1a9dc2,9487f394,8a25e50c,d463cf6e,92d84442,8705713f,ed377125,51e37e51,78ca7a7,c13e193b,1b83c729,8cb08186,8fde1c22)\n,S(8eed492f,b6d5f0e9,ee78f6b8,953ac0a0,5df8b9ec,db17a09d,22863bf4,3620099b,23a45742,17672e98,d9cf8b94,62439ec8,82e1acfd,40db9d9,9ece889d,1e0ff1bf)\n,S(cb95ce23,dbac06ef,79793f54,3105f5d7,5cde90bc,651b7756,bebfa367,d5c2dd9,9612a6ba,c023b0c0,73b5ed99,271ddeb4,57d22d74,f7ecea4f,c618be5e,164a9a48)\n,S(667218c8,bbd3ff37,d42a8ebf,8b5a7791,d8fdd493,9ce447c9,15dac906,67a3c980,dd401179,9e19afdd,46b44aab,1055b554,452a21e7,6750f2a,ce98083c,8cec26c0)\n,S(884799c6,ded4851,ce53e855,dc429698,c7627b5,a0ed3852,19b59af8,32f76e5f,238d75ed,84e6408c,79cd2d37,152cde78,22e34377,fccf05ac,3afda662,c21c4a6b)\n,S(8d98f36b,5fc0082c,597a05ba,e24ea6d2,2cc8bb90,3a6bf96a,256eeead,6911d143,26e8ad1a,fc902a6d,505b2fcf,80168177,de7df931,b1dc1516,f2ad7b38,e0ab3cd3)\n,S(ba9062ca,c0ddc6d3,27f2cbc2,8d2efb1f,d1db2388,c86741ae,7403f4b8,3fd70ad2,473b335b,3036e754,d9d71ccd,53814455,674539fd,7b73d9f7,8f24bb0a,668b38c2)\n,S(4a2d36d7,3bf0e609,7a69be67,55621051,7453ca53,11e288f0,1ff1dc03,acdca29,ff691e7,a90331cd,44e83ac6,c298f5fa,9d694a81,48db01d8,595a4386,b2ca8f83)\n,S(e868f28f,d99c4b16,b64fb0d9,32c325c8,6b365136,e0055c4f,cd362e1d,cf37d0c4,ad3346c1,83401034,8e8e0440,e889109a,40e5fa11,37d94bca,2742adec,4cd4a9eb)\n,S(6c5e8689,830a6ca5,12d77e56,62239833,ea77e696,da40feea,99da3519,2babbf3b,c29e05f1,5fd00b60,7bdc333d,d753647f,56b9830d,46a597c1,2bee9465,ad779540)\n,S(b3a172a5,6ebf2dff,aeb91cc8,6b9d5a91,c317adc6,250ae210,e1a25bec,1c046344,28f6dd79,9ae40d6d,bd31fff9,9a4c2fa,f06401c0,de7a5d11,9fc5faf8,3b4ac3d5)\n,S(198f05d2,e2f9d779,a50aed67,39468a8c,ac4a22ec,71a3ab80,91a94e2,100d8f47,cc6a183f,c9813173,caee3baa,f3fcb223,39708968,360c02b3,cbf899e0,b7cd0414)\n,S(78b2178f,a943a791,4bc7703a,e850b07b,41ae77db,79fc39d8,9f0f50aa,b077f48e,85fd3e34,f2cbb092,8bb89004,e1801be1,d78fceec,c29eabeb,11b9cb15,625274e7)\n,S(6f70df00,1d4c5175,f997a795,170e28a4,23828ef9,d5f72dcc,cec43fb8,d9943f3e,26315213,b77183e4,5979c34b,e730e2a6,956a66c2,a8dfbee5,f0f1eedc,ce8315ce)\n,S(ab813144,3c946d29,d05509e3,b45b5926,e3964b2d,1cd0fbd0,9cfc359d,b5a9dccc,aebdf315,c1273af,a0c5e587,6c6c6132,16b7710b,3f505062,6336ca9,4f5c5ac)\n,S(e72b3791,dd751127,23723e62,77e5e6ed,6b94569e,ba3321a2,a3e883e,5473ad3,131b3074,2dbcaaa0,fd3109ab,5e3a2847,9c2091ac,8830b19f,d4df4c82,9b28a3d8)\n,S(ca5a3296,ecdd5e50,38fdf77a,fcc507da,bb525d7c,56b50c74,61928432,ce3ded63,8bdb6794,b7e177ba,9027258e,42b365bc,5a14209d,2bdce54b,3f865fc6,ffc4ab9e)\n,S(eaa3be9f,26ae8cff,cedbe59d,cc03b202,e7d2e815,a7269819,c881a700,e31a9222,1b5a2cd7,a367d34c,60ef8026,51df2d3b,36ac2816,7cd7eacc,735e45c1,9524ec1c)\n,S(ebba882d,3ab4ff6a,e162076d,56791554,35a011e6,74872206,582b03de,e8e97728,94222a05,3d8dd2cd,cdaf2ac7,69ed8c65,8a004c58,7bdfd0ed,355be474,65be16ac)\n,S(ca0d97ea,537a5dd1,147cb784,eda20601,ba88e0d1,68e8df44,6d8923c8,353aba86,874ac858,89eb86f1,88ebb979,a4490e65,96c97892,874b5b68,167ca99,f68fba1f)\n,S(51de2965,34807454,7e798f98,c5fc19c5,84a90a0b,e1dda24,7718cfb3,ebb797e1,81374e3a,ad04e6b9,55c1952b,fcdf9a7,ace0ee4b,99e487bf,87ceff58,3f7c54d)\n,S(69d611f,3136be2,cce39bd,a1d48fb6,87b52135,365b8df5,151c6ec8,c1387509,75e2d820,563b64ca,c4d127e1,a5c29720,fb84c0aa,6b271fa7,e9da2c22,3195bde0)\n,S(31163083,558660f,23220456,1dcde218,6fa4a4c0,de450a9c,b2f57de1,3a8aa135,25d6d496,b1341688,3008c636,ae1d8b76,29e14207,e5fbb817,539ddbf6,ff46eae2)\n,S(84e342aa,efa9cd4d,4d82e5b4,4d0ad9a9,11f4623d,8684c274,cc3cd561,2c7ac334,fb90dbff,260f9997,c84f0a32,4fe5d2f6,f552affb,50aed654,fb8f660,2a92a70e)\n,S(95efc402,969db115,22446814,3d4e3aa0,fa812aac,8867a5bc,64d66692,67bf6562,315bcc31,6149252c,56f3f00d,445255fa,e4567d9f,d77ab4b3,e82c1359,9f371883)\n,S(5223623c,f87e9da0,bd289993,a55bb9be,55b40149,bb501507,e3d5c9e8,d78d07fe,6bfd0a21,dd2df437,9b1c16,b0076f88,832e921,db3cbdef,fa5808fc,ac613b56)\n,S(f212d199,a6b707e,61d87ab3,109e1178,ea180f19,66b0a55d,f5f4cb97,c0cb0a4f,3280446c,7edbb64e,e47c3142,7c0ea113,7f511422,19ec3824,12f6b069,a0f7c84b)\n,S(6b55063f,f25d76f8,2154431b,20058f96,e1e19ce2,210e1b50,835cf58c,31cfe8c9,5427dd62,36450762,46e99707,6f60ffed,558a82a3,dd7e31c6,492088da,9069f8bf)\n,S(2539e5cf,a09690c0,12ae0c12,9e6f8b27,c9388d41,a82e1e96,47219d57,9b23045,94cb83f6,1e26a4dc,d1b93000,e5113347,31d804b4,a259e24a,77c457ad,d9021ac3)\n,S(aa9b6ad3,4aaf1c30,71aed31e,8f28c3f7,9106421e,f0e53fb6,297fae54,a47d51d,dc0958e4,9fe4ae00,98b4e7db,10ab4d99,58cbd87e,ca443d3e,d1c9de77,83544c47)\n,S(a850a313,aad224fb,f5ed6e63,5a3f6b0f,e08964e5,e9ca262f,780532f6,13487ad,7e476ad5,4cbc55c2,3b9708ca,eef3479,d9a5e570,26f15a4c,43b83363,ed4ccbe7)\n,S(314fec33,f4fd0c96,d04889fa,b18e29d2,5da44132,6477b28c,7418d4ae,5fa09c1a,a2c9513,a98ffb7,9b5dd4f5,49534fdc,d9b4b8d3,1aa6a4a9,76b7b94f,ebd25f42)\n,S(6e7dc3c8,9ec57e79,ae1581ae,1afbdcef,183998b8,cf52dc85,329afa35,4f3d0963,6b636805,6d5a8e9f,9651e3a8,2598ab1b,8f057830,fccac964,a83515f8,9d9f87d8)\n,S(596df693,fc4ba2d5,20497a50,7d1841c4,38b6cfc0,58c274ad,9557d400,573337c5,6609ede9,1c97b09b,3a171723,e9ec5cfe,74b75c33,d5ccb3c6,bd03fd04,b37f4ff5)\n,S(235f8dd4,10de7800,58550e8e,77bd42d4,ee3ba259,97bcb4ee,13cf0a12,14e8afb7,bf6e0ccd,b8e8e136,800f8d59,510a4455,53b72c33,824b71bd,189e158b,6cfa6712)\n,S(a9d8ba97,b259e91f,125fbb28,c80e81f0,3f03906a,ef692279,4c9cc23,13db8b47,e668b954,19b580f2,67472afe,221f5895,5e6ce6f6,45ba737b,f14754ac,ec048656)\n,S(53b44dc6,4f74c170,142bc629,51349b88,c4e2cc35,b7d9a7f4,827b07e8,4a288e5c,4aff13e1,404562c4,d8f006ea,dfee7b5a,32216187,d8c96c7e,5896e157,97075d4)\n,S(76e6e038,a6baf9f7,1acb56ca,1494486a,a9187279,486f62f,947b5a02,580af1a0,51a5d110,66884076,44c18348,be045910,3b57e0d7,2266ffd4,465e6b4d,e1f0f0fa)\n,S(7761ff19,2fc70129,10eda284,dde864bc,1c45b4c7,1bec7870,2bcf53bf,9bc1e6b5,80980f70,a82f7196,61f7e1fd,fc3e7d37,e0bb75cb,b1ab47c1,d947dac4,296e11b2)\n,S(8199c9d6,1224f51f,e6dcdc33,3869d860,95c0bd8e,210d2d7f,8fed2804,a89aadf9,be89724f,5cbd2384,ae9bbd73,f030dc74,a158ee7d,2a9d292d,daae3057,4b1ec89b)\n,S(15c279fc,760a2556,bbd62680,3bd779d8,8bd4dcb,e508b3b7,99d27405,91c55c0e,fd5038bf,ed80c963,4915d352,bca040fd,ea0b9b0,67215dee,3373e4d3,53390c39)\n,S(fb3f8d06,b2804047,6f7b46a3,ecc2e7ed,9724ace4,14831a8,3c111615,f8a39b46,f9250cb6,ff851b61,3b3fd70c,63c1bd72,3177ed50,ac991185,4fbfb3cf,6bd2154e)\n,S(39b2b547,3c964125,da2723e3,97c3fde,f9faf415,db0b389b,5eac9a6e,ba012edb,8ac1c2a5,a586f413,bd68aedf,1f65f231,6bce7bae,ddf9564,2882f2,1bfb7547)\n,S(42d5dffa,e476151a,1d3f6d0b,bb24e8cd,bf72d73e,ac87e848,20cff44a,47f1552b,631d9645,d941c001,627ebe3a,f403bcf6,663f6e46,17d86ee2,922fadb4,b8847ee4)\n,S(84dc96c6,24ecabf0,a5edd071,1e922d9a,630a0bd2,6d9c6158,e311fb7a,e6e0bd8f,40af318a,16b7324d,2acff10a,8bd2fc25,c795cc71,c0aa5a8,2cc8eae3,ef8703c6)\n,S(636e760a,797bceee,11b812af,37bf7cbb,4663ba02,c36d93bf,1873983,4bbf505e,ed5c5e4b,6cc8cf76,436dab98,104b9458,69924f40,57d92ff,d74f703a,65f724d2)\n,S(137fd025,4bb5ee78,669ca6f4,ae278064,7d32bc0f,f6175090,d4ff7580,98d06ae4,282d6aa2,25eaaaa0,e9b186a3,36e92e7,e07ec23d,e9ce4bc8,8fb7f09,328d0fd4)\n,S(218ab848,39e49256,b55bc7a5,cb250fc0,df781f60,17abcb61,1b6734d2,12459e92,7eb14f56,b53fb0dc,430c49c8,d32f39f0,1a7212fc,701ca444,c994b3ce,4d0e1599)\n,S(6b3f7ba0,106f22f8,df69e3a7,8f137605,1b2f0a99,ebb4f4fb,61915495,5f8eda65,c5788c4,4c946bef,86d9a4ab,481e8873,6c831000,5d36d3b7,aaafb7b7,2330d299)\n,S(9b414ecb,a2de1195,196fdf19,62eb5b86,131ad1ca,f7fefd08,c5de31fd,d9e8ceca,38e6f31f,9550df40,80db0626,9da9f4e6,51e94e85,95e74797,639225e,a725a637)\n,S(436b07a1,857425e1,86933af0,d1d444d6,156a4a8e,f3f2df8e,cbaf661b,26940653,94a52f35,f124ebde,ca642713,724fcc63,c6822dd1,bce4c53a,ce155b31,443f2d44)\n,S(cc0a9338,9b25f82,33419bd1,87b5e290,b8d76f28,2099b4d1,fff32cd5,128fbc6b,cc7e86d,ec7ac7a9,448cb627,875500e0,e713ad7a,430ee9ec,220bfe87,6e3f458e)\n,S(5a1b316e,aaf877af,cc7b1907,eaf8dcab,7ea684ea,72fbf888,8f21fe83,c3a19858,4af0339a,da08846a,6b6b3466,da69412e,74411094,22dbc450,cf7424ce,cd81e7e1)\n,S(faf89165,74444bb2,1fe1e411,40398b25,ac4a5725,2f9ff274,e7d409,6d6c53ee,cfa7795f,af75547f,5dcb6426,3b16c9c5,d87984ac,81083cb3,99714f6c,99a43100)\n,S(39e5fd8a,ca141623,1840c68c,6c6cb028,c94cd22d,49619e33,aa9e4dea,d174f248,f8121f65,7083da65,74013e78,88f66276,a8d3686,528aa105,61d10a6f,8c3c1ff1)\n,S(20a135ec,147d0cf2,ccd3cddf,6fbe1356,a64b8ed4,219bc0e9,25743098,325cbc1,b17514ab,ea1a3725,4c101fd2,675d30a9,fa1d170a,811f06a7,15622ae6,ee82c013)\n,S(a181a1b8,af48f73f,a13d69e2,ac75b13b,9903ca11,8a8851fa,b461c2b4,2c72320a,c96c8467,3f487e62,3d72c432,ad5887a0,a66fbd3a,c43aa5a,219c84b2,97a6df20)\n,S(395fc031,720a5da2,faf5d76a,9516de8d,eb462695,5eb87fc2,752462c7,7db3ee4f,4aebc86b,53783895,ab4e14e7,c3ec449c,962ac869,9b340523,1288bf41,c759ad6a)\n,S(a36de9ec,f6df2b96,87d632a6,1bb6337d,3fffce5,71b9fd17,4246b33d,1b64fa6f,784e4c4f,a133d140,1b212e14,77deb40d,620fe29f,d0f05ea9,cdbdc862,651999f4)\n,S(8cb5a899,ecee4430,f7381820,4535f57,e55a3ab8,3dbdc359,d04746e2,9840ba8c,12a7282a,e9c3a3c1,2c1df0ec,c3d28b4d,731dedb1,ef02cb2c,b92da5de,17ff59a)\n,S(de441e1,4d9c9ba1,90e37201,22fd1fbc,4cee72d8,b26b1f29,9c450b66,60b60985,add1a30e,d12ddd33,d4f740d4,427fbeb6,2927b3c6,75032110,508e2114,271b63e)\n,S(88e38b56,b5e5544a,f2f3c1b,7128d118,520646c3,97295067,4078207a,9b9fbab7,8833208e,d44e9656,e5bac529,cbdaf184,dc8ea020,a2d8f4b7,8101d8e6,1000e5e3)\n,S(a4f0f992,f5616420,b9ffa3d1,58d2d729,3ee217c9,60f5266c,6c5f3374,f4640a7,da6741a8,437a86bc,40ec9188,a1af42fd,b131a8e,81289e71,3d80e201,f82e6ddb)\n,S(5f00a8cf,f2d1aaae,604a40be,e451d8d2,86899fbf,37f96ad7,efe52407,1c5c945b,135fc8b6,9ea76d6e,39d1549f,b4692d5b,b48ead3,ae6c662a,424b63d2,b59deb12)\n,S(59351a0e,bfd6fca2,ee04c799,838ddb8f,9d168967,a9e6cda0,b416ce31,88f99218,6e01a267,3184f4a8,28e27b6d,4291e7c8,fc4159d,73a465b6,4fe3d4e9,d50fdb34)\n,S(175ee35,f5c533b3,de87387a,5f263d0c,6705ef73,e77f39f7,2c796f91,2cb1aecf,a3792715,4540e426,1e0d40fc,4c5fbd60,5fca3b63,3cd7b506,a80d0280,b9d9513f)\n,S(75189b41,597b18ac,9ab6362f,a7905ad4,5655951d,fad033b0,2047dfbb,f347b8fe,f536fd21,ffa10ea,57c023de,256a59ed,aa246842,845afed5,b0177b77,21b2527e)\n,S(91af9ec3,2522d65c,70bd2a31,57efd23a,43885573,6b5a1c72,49a414,a19bd4ae,312007c3,8462b858,6b44898e,d0b4419b,31c9cc19,a2ca6d6e,6436bb08,741a32de)\n,S(ddb2fc8d,41fad5d0,5d109443,2f283c5c,732273a4,1a14db04,712a1d84,a4565c27,4f7e30c5,2cec6f4,201673a0,9893d092,8f6ac9b6,d7f2da38,d63ba2fa,d69c1d0a)\n,S(9ce65d22,d7240dc3,50144936,ea412539,ad40a907,f2b04f96,f7ddc1df,f63641a6,af93e587,7f25bc64,2460b425,76062f54,c3037e43,80542340,cf927609,79d97c8c)\n,S(7dc0d0d4,1fedec58,91c3932e,b0bf492d,5489f1b0,1e7f95f5,4936d76f,776e9a2b,d55a279e,760c3c13,bfa1c7a4,93831a14,1e9bbcf5,a535934f,a5269995,b107c47a)\n,S(d01215c,b6b4d728,9dd8d351,f3e4aa7e,f190d40f,3281c8c1,63d03a95,4c0e5ead,ef98344b,ccbd7eee,723ce7fe,641854d,c68be6c6,99eea25,48b2c881,b0fdc662)\n,S(d4d1c31,a9faef8f,5991b0d2,9bdff3d4,bb6498c6,2933eaf3,e1d06767,8d7cb92f,98f3a848,ac6b91fa,85bccd42,f2185e46,715faedb,a4f6590a,4df5f862,ae6a4831)\n,S(cc659ecf,42abf24c,3da2d83c,84b1e32,3d718f0c,41a1b5a4,9fad2f24,c6080839,7bbdfd55,4d843399,b6edf249,ae795758,c7aef094,3f84ccbb,f0f2761a,c81f963c)\n,S(19ba1567,d5cff385,9d074e94,478bef34,f0eb4775,6708d04e,594d1641,71ea4b04,34ea281b,d536b02e,da858311,4e59c110,30555c91,c8b90ed5,d4f53485,4a820f9a)\n,S(3f0f02e3,1a6e5907,631960e5,fd52d2da,e825d8e7,529586a5,437798f5,d7bbc30f,b93e27c3,3aecd4da,59079ddc,be2cd6a5,62a3bf29,7b40519a,3509061,e3e63c3b)\n,S(9884c48f,35f63fd9,5a9dd895,b0f382b4,8d0fb096,e5fab23e,df07924,149ab12,5688c266,7070437c,3d5e321f,58b6f41b,e011545e,989feaa0,13f241fb,4180eb44)\n,S(940f2a93,79bc9c55,3082e85a,c2f83e5a,bb4a6fe0,2b23cb47,4489bb7c,c46c7b4d,b4b82380,77ba9d8f,51e7c735,cbc6a784,2aa7429d,2cae2284,700c0e2c,7f21fd9d)\n,S(a9a7699c,e5353d9f,41afeccb,b5343ea4,5f4beb03,42f9001c,e0742eb,58b782f0,3c759eaa,b3e18cf1,a4341f77,8a601ac9,b0536fbc,5fb498b4,c7ca9597,9587c994)\n,S(a21e348a,9cdb00,56e36cc2,82d0112a,93f4da1d,23f274af,b1522263,b218913,141543fa,652f9506,6ecb8e28,a701e663,c70b1873,b1e778da,588c1f4c,7ebe89ed)\n,S(d6d54d95,1121e118,52b298d6,18ce738,e8142906,306a5ca4,1f048fb3,5a5fd383,897dccb8,de891fe2,304fe9d0,38d8eed2,8f76c8f3,535a2912,41253445,828a7a83)\n,S(7e0a635d,c937eafb,488c7f7b,5efb12fa,6232b464,a3a47ebe,21cc0f1d,c31e6cda,d2d1d4a,75525e1d,2ce5b34e,3adcbf36,74489c86,ced61e82,2d63ac63,8de921e2)\n,S(4ce2080f,66a21c68,428870e8,36b3fae9,55bafa14,fac200d3,afea00b8,d451a659,29e1fa26,565b02fd,318d0f3e,f0df93ae,f0ca1b92,73e31b1d,891f055f,6c7da4c4)\n,S(dab86b87,b633bf65,59cd5caf,1b89e815,e6d4b7b4,d8f58f7f,c091f542,712bad2e,8e49b109,d79a55f3,8d8159d7,f55bd930,4506a634,7e57bbdf,8fd15eb3,53c85b5e)\n,S(c6a14ac2,90fa32e4,e8b5386e,a7672d39,ba16224a,152897a5,6ae29001,b365aca9,42aadcd6,dcc588fe,2421967a,42ff615e,45cd5f2d,fa258164,b2c0eac7,735dbc67)\n,S(2599fa40,880b108f,28f24400,4f3458f6,63510bac,c8a1041d,e694e214,ea450a27,54792ad,4ae1cdf4,6a7a973a,1a02bfd2,a424c46e,548c13e6,951d94c8,7ba57a01)\n,S(f6ab0cb4,a6afa8f7,aaed8fe9,e79ec43d,31265533,6fa4553b,bf3d7476,8ed9f9ff,4ea12589,c4ba0090,48c1a476,1907fcd6,82e913bc,57af13f9,73fd9746,845026ef)\n,S(f51bd48b,ab8f020e,2d97ecdb,d3ff4da7,72738ff2,bc71dbeb,dfdd48b2,707f1dfc,6b168ba0,947f47fa,8a7fe7bc,e7ef90f9,b361c752,248bde43,8c93f3f,4a697c40)\n,S(b601f114,6c9ca90c,af798f2b,1d0bf7d2,a50b286,53521362,5c898f0a,4a2a3443,a6ca3041,36b6b675,5f317a11,59f0f110,6877fed0,fcc167ed,f0cf2391,c61f87dd)\n,S(792dd67a,e5957c04,76f0511f,c5b7191,5be6a158,f2871ccb,37e90651,f85f974b,9b7f5cb9,bec59f69,3a44774d,d2f463e1,1a4c1c5c,84ac3bcb,94175809,4b1dd44b)\n,S(7d884669,33b6f4ad,b3700eb4,f02514ac,4c29c420,33c34377,93101302,8bb093f9,2fc8c35e,674500db,5287ead3,5e46c306,2ebeb5f8,a5134885,a2f9461f,b5e2cb3b)\n,S(9c76eb91,6d0f860b,21b82038,77089435,ead4bc41,df82c249,10edb80,692a5351,72badbf3,38800156,1e235a6d,a8c7769f,e51d1e0,d6de06b0,d9998290,f5c88b62)\n,S(a49b5638,3d8a93e1,55e52a2a,a1e47c33,8fef18d8,2dafc24e,cf5bb0f3,1fd807f9,1bc271b3,9bf34c4c,ee4b0760,bc934646,9dc392e6,1fce976d,bee58e8d,901d3ae0)\n,S(4d3135a,675bb0b0,ca9d5cc9,68f1c72e,a704c9fe,77aea9e0,a4d6247c,dc634460,ae5d7cbe,72f5f4bc,f2f1ffea,cf02b13a,cb74bcef,68cced38,395a76ee,280cfc4e)\n,S(59572fbe,17dd6e38,fc0421b9,b42f192c,eff95583,a9204e37,11f33089,9e53f588,57134640,a8cb3f9e,6a1ab805,1d60a047,a01c8f2f,9b72782a,39c45421,de1c7c24)\n,S(73cccc6d,49b4780e,caaa1c61,228d2e9a,a5fff08,f5605a5,cb5ea1e6,712d9511,463a8d74,f986c8f1,1c12ea8b,59b158d3,6a52c06d,6a85b08e,dbb2cd4f,e3752cf4)\n,S(b6c8ebfd,db620aa9,476f7280,e8fdcf6e,ae3885f1,87683d1e,e503c2a3,8c4c1e46,9a6faed9,f0210048,be575c2a,c8194a5e,76a25d55,f3215dde,b4091060,e7d39802)\n,S(b4162e0f,92de5493,da996c53,93067de3,b9cc4a8d,4c21df7e,b507fc9c,4c5e392e,ccce10d0,c9211d36,46397873,3060d982,eecf2217,7b8ed120,a4052561,6a3b385b)\n,S(46bf2566,ca4235d7,abe91955,2a0b8d40,a581008d,6544d9b7,a2a469d7,8d2b33a2,6f66fd6b,b8278841,92d82e39,cd0bc9d5,285b5cf0,2171ef1,b77c87f,c6785040)\n,S(78446da4,e869a9cf,8badfcd1,b89c135d,b5422a68,2a9ef6b7,419a914e,3d59ab2f,4215b131,db7e46c1,9e03c051,f33bebde,3f5f31bf,2d428983,27d2b586,5a8c9ce3)\n,S(86886a05,511080cd,42bdc762,95eb8edb,fa2b01ca,5cbd1d1f,4bebf001,5605f3b7,c71b69f3,5579c0dc,7078854a,83add404,f9b753ed,597a77d7,67507e77,f7914466)\n,S(a02e675e,37f8fc43,fd38675a,744406e0,36d5fafc,b28a7371,e16d94bc,83713388,d6f9a541,835c80d4,eae16251,277e9eac,4ee66bd5,a1899c36,de3173de,fc41239e)\n,S(a16b6aa8,432c6ced,cd110096,697bc04c,9b299777,ee287f14,ea4cc889,8492bf26,5c11a70,ef9e42ac,d0ed644,6ea7e14e,1e734da1,89ef1ace,d2fd7241,4e0db298)\n,S(66a3f2fe,775fe5e5,d0ba1205,f7b81fca,12d7fc2b,f8685c5c,97114b98,e0f45b5a,5059bd14,a49ad49d,550daad0,30b4eb21,e626e2,95ed01c8,c1823050,5e5e3eaf)\n,S(9a47a3ce,bf9a04c6,755c6321,61150ba,a1f09460,ea855785,96213784,5314b3a1,22da5ece,8f387e6a,f37c7045,b9296927,efd3a3f2,2b95eacb,c6cefc0e,ec40a80a)\n,S(1c014014,9027b9a1,e3ce3c28,8f18fa87,12b25a53,49f9ac6f,97af6273,5b6628c5,672190fc,d048d3d6,b78bc34f,f160f978,87b49934,5753bd35,3a456c96,e448a4f)\n,S(c2d9670a,1de5e876,5ac965cd,497e0765,8d137400,9e4ea31d,57effe5,2e8d84cc,ff818647,a6ddfbb1,3ab56b58,52956d08,b97a2e8c,f852379,cc7a7271,f13ccdf1)\n,S(1a9fec47,16fd6a69,70ce094c,4141d68f,d21339e5,5396a691,e01b1e5,c996ec1d,e38eb2eb,6c8373fe,94f7639b,595de291,d29b8738,11f5d40c,24006d8b,93f8557e)\n,S(b7df52ed,15e91a6d,40e9e500,6b1ab26c,53a51466,98d63bae,77856afb,1d8c464,ea60f1bf,d915fd8f,99d0706f,ff180d51,705c360d,a5fdac1,162ec530,b6e21254)\n,S(2f95cca,bd092e2f,bdc86a53,40353350,918ba7f8,8488b9d1,295f9959,d7db6b5f,31456814,fe6ced86,59ea9c3d,f09bf38d,d5b0f893,8db1ea7b,5234648d,a1693ad2)\n,S(763926c8,64dfe4db,6a1a432c,a37e4022,3b6ae1a3,7def3fea,883a6612,bd8a7c1c,f34d5b72,4378d10e,bb4b3e63,d80f1f98,a3e741e5,b9e4fa41,bd3f0a5,c361bd1f)\n,S(2e43be7a,12916cf6,f312a513,fcb6c98b,708ce2dd,18dc4ebf,72a807c9,c8a31b0d,db919224,ce1b7e57,16e57b6c,ed514cd0,a3a9dc09,8cb59c5,971e99d0,dc24acfa)\n,S(7d65e48f,1a867d28,76731984,afc6873c,2d1acdfb,13a5adf9,a56960c1,cd4a5561,9c73b955,f0957ad2,ff0e2d4b,caf795d8,bc992436,be7e69da,7b97ccbe,d983ebfc)\n,S(1c6becc0,3131b772,cae166f0,4d715390,6b132c87,c5c76b7c,10b94a71,7819d725,2c3c64ff,94998533,97dd26c,dafdf608,41b84a22,cfb4906e,318c4d24,b23280ad)\n,S(f5042a5d,5d118102,32ac83c7,d7edf079,aff339b0,7e9d20f8,198b2a64,13347675,19c10fbc,e644fc6d,2f238802,a045052,b2723f57,5a8bdd20,b597dffd,79a3e4c8)\n,S(7c387866,c2c0353e,6e00c887,240e084f,e0ee9f0,2de12539,b4833588,bd4be300,ccc66f94,587fc58d,42fc49c6,d074800f,56f08855,6caf4ab4,c37b43,ef2b8f79)\n,S(ece8ad23,d33adc2b,6ce38194,58ba2ede,104b35d1,1691f4e0,b7b206e4,eab3c140,eec976c0,7fa1d3f5,f3c245a1,2c9b728f,1c7e672f,53665e7c,5c6a408f,7c0c0a88)\n,S(822b0926,a274dc38,c9eefecc,7d021774,b951cf19,3e2cbc56,a1baf58f,19d12b9d,48bcb10a,f9cac375,8314d2c4,9fcf0512,3638f008,510fe63f,1be0c2de,44118313)\n,S(d26a3a03,6ef5f428,fa058d25,7ce62fe3,401dfe47,80c468a8,5cd2e77b,f85b8c3,98c39762,3a644329,7d5c6759,a308c2db,62f1bbcf,9bae4ba0,10fb1175,126a6fa7)\n,S(7febb81d,8aa0cbbd,3002ab6,ca247d1d,24c8fcdf,bb1664be,b5b3c346,93019090,ee625bcb,12ca6da7,544ca6c0,2a84b9bf,966dc923,d8b23b44,6cfa4604,a6c3ec26)\n,S(839e44e7,2d43b6bb,e6f63a75,cc3644ba,b7aa002a,6de2c087,33df2b0e,51d3473c,8368f635,26f41422,a563806,d775bf68,2d876d98,542b3da4,3e591e31,340fb9a9)\n,S(52e947da,1c96e07c,9e2c84f3,23f2eed9,7e049b97,86d21135,ea958eac,db0d7afe,6bcfdec9,e0c70d3d,39de19a9,9fa72ba,bdbbe50e,dc44897d,9fa670e6,d473a831)\n,S(72ec5426,5e4a743,1d7f6dd7,1c8e9e4c,c8b22074,cfcb00ce,db18c6b4,c67f3603,ddb9360b,7f9def94,f5ea6d71,51eed4ba,49455cf8,15bc9023,6156d4fa,786b5ee5)\n,S(370a3f15,59a55689,16bf9ba,f2863d11,2ac051e9,d6a90f36,af39add3,1406c849,854cbda6,8517cee6,95ab5d3,20b1067b,ee80d993,235d1dda,ba3a0ec6,1f005840)\n,S(12e57888,60d2fbdb,cb3af527,577ef6a1,41d1cf0c,f719ac6a,714f9a39,9bef5dc2,f5af7aca,5dd8126f,7dbb79ea,d5a4b475,a094969c,64adc821,ab46c5c1,86bd9ea2)\n,S(b494abcd,b2fa5de,17b1abad,757bf9d2,8b7905c8,aca0a5bd,fe2ad8c3,30a2b722,c397ffd6,dad8619d,9ff8d8ae,e401a4f8,cbacf710,c6409adf,bf991d72,9294cb87)\n,S(2957692d,900d0b94,b208245c,f71bdcb,118ea6e4,499dea83,1064605e,8ab9d89c,a3c55447,9284afea,37e94,fc24d50,f129342b,7ebbaa91,857d655a,40444a7b)\n,S(61101879,f325e072,bca13642,dc14a5e7,1969aed3,2e49ccda,39cbf723,a1bd20eb,4e199c82,4816e4bb,d5b67269,e9d8eb0b,e5c2483e,d66757a9,c1d59847,e443b3)\n,S(9eea48b2,99f3474f,8aa8c648,c2721fbe,c65f6ad4,990ab4e4,29a9c41a,ba55ab18,13954697,35ced1bc,7e857049,7f2b5a1f,b6802892,fbee0654,c1d7d89c,1f234443)\n,S(dbb054d7,8ba7b707,ca475982,6a36808d,3fff42b6,31f1bc5c,c9df403b,518bd97a,396ef6c0,96343a55,dd404885,427e781f,a55a1f8,1ab95d4a,89d87975,611b923a)\n,S(dba95bd5,7fdd2ef4,9dbcc0ea,35c14dc9,b2f62541,5b08e75c,d70f3caa,b61bbcf1,2af0965e,b7a17e46,18b6dba8,415159ba,b8f76ac,ae9384cc,64a90e32,d20a3d)\n,S(6c312c9,7979bb0f,e72d8feb,c3c755db,bf1a132,722f6ef5,297beafb,8ad0e5be,36366388,db74739d,df78d5ea,3d8fab54,6c435961,71f78643,8be00718,8202c6ea)\n,S(65eb7057,a494bc8f,549b8638,e18cd717,ad987030,aa3161e5,b9fe31b6,dc8825cd,458202a1,67f285e0,9196b4ac,f87068e2,160b7b42,2095bc92,7656694c,2fa80312)\n,S(a0696917,b0e868da,ed5db7cb,d2aebd1e,c1117426,d842c0d6,b567e2b9,4effa7f6,c874d20d,a1bb4dc8,f01cb828,be8bda8b,c797ec3e,37feb0f5,ba55675c,41ecba78)\n,S(4191bb82,19372a13,2dd37830,1086b64d,10874479,1d3b7879,3b27c65,782cced2,c74907c9,8ce4d218,d1ee52bf,82e130bc,49335279,2497b4a,34892fca,67dc3f2c)\n,S(75f37d33,721293ee,5923b9b2,b95c958f,945e3f2,909c38f,3c3e7f5c,79b218c3,ac041f8e,c6b222a7,a2f28e18,1cf11aa2,a7d2fda1,1f402a33,9afdeace,a5928be7)\n,S(cbc3173a,b58b2f29,20b3bef,6f18a84a,6004d1f7,1dd6c65,78571afb,96fb154e,c413a0b7,6f264414,2d3c166d,e9577ee1,b8f36ec9,618e8892,26de4de0,f9fd5c37)\n,S(64e56b09,a139fa59,69688832,419cd1bd,64f212f4,5bf4cdd9,2a5e4370,dae226cc,a9194eee,f2429016,4b41eb3d,b429415,d10915a8,62a02fa7,671bc19e,50fbbbe)\n,S(e33795c5,e2886cf2,9a22c2fb,8e02f913,34e13350,9cfc14f,73bcfb49,355285a6,7890fd21,f33d48c7,24e580cb,7b4bb065,f7c575d0,c6cdf5e1,5c2d6423,1afb304)\n,S(7975e6b,7a73d0a0,d1543d2c,76c79233,6e6a0994,35eb7699,8f25ce75,a6b0b6dc,10b160ae,c68993ed,d5e48d5f,7562bc24,8f16eb10,a27f7115,121ce2f,f63eb06f)\n,S(6d0d13cb,f9c13967,92e093d0,801f441b,c1ca4484,92ce3ce0,2ad71cdd,d1580f6f,17ae4238,84caf022,bbddcfe3,37a44309,4bdb25d4,71da56f1,bae4bf2c,ebb45746)\n,S(2195f14a,23af2b59,c9fd3f90,42608037,60d39867,3fbd0856,a974a20,1bdf0154,fc05b38c,9a44ef01,f4db3a10,b500a372,5ff1aa58,86ff6111,da53ee14,f8136a8d)\n,S(47679c73,60acf8b9,d1b54e16,7d1dd1a2,1f558288,3844fc4d,ac2a7fdf,8b713628,82a02225,f3b8e81d,e4d4bbde,94f7cd97,7ca0180a,ff3a4751,a93f6ca,17803ea7)\n,S(b0bd02f5,1636a69b,23ffe514,cc2166bf,8cb4ff2e,2f7c8655,ac9aa7c9,de30831a,73fad62,48bacbc5,2a7ffc51,fbeba3d8,f4843b3f,ba6c8814,48add0d0,8fd5f518)\n,S(dfaeffd6,bfe9f81f,ed3f81af,adbec5b8,aab5f15,23cb7452,c689b01,a3660158,3f54d105,c3ef4814,e6ca4bf9,ccb5b54f,30c4bf80,10d7b24d,f3b5f3da,c9240583)\n,S(eb016abb,da661e49,8f53d2e7,96fd6be4,80dffae3,eb7e4ba7,46ae06b,f40d42ed,310d6dbb,aa7659a9,6cd4d50a,dc2e5e85,10f005ed,6d29d1f5,18bf83a2,7af895be)\n,S(989e1bc4,3c0880b3,6d35b5eb,137f8e61,7263784c,d2f35173,e517afb0,c99fb2ed,4c4ceb5f,110cccc5,3a35963d,11df77d8,999b3bb4,c2cd92fe,b53b7476,9dfaa1d8)\n,S(beb0170,be4a7bbf,1f65bd40,776d5efc,dd801d6f,909250bb,fbee1198,c2033811,1356b98a,1d329a38,57a99820,26d3ce6c,f52349d,fcc59644,ff4dcc13,8486461f)\n,S(2d90bc1,986f9a4d,6f75e596,96c4296a,ea9bc55d,5b60d12e,337cb42a,ffc0b145,7d57cf64,734d1997,bf84b721,e67eafb6,b377ccbe,d2ef3b5b,48dc9f06,f71a0c4c)\n,S(6b7a6a54,c9608062,de196848,dc3673bd,59fd53f3,fee72481,e829ca77,789f51bf,6a9ee208,157b8a69,f0879f30,c58afbe3,dd4dc42b,43cbf21a,5795224e,6c09af23)\n,S(c99244c7,32cbdfe7,68df8fa8,7b7e7eeb,16faf0e8,8870fa8b,f4abcb68,368e8393,20ad1b55,53ba2ad2,40563453,b2dae2e8,58cc9b8c,c6a49951,bc0c0fc2,875620ae)\n,S(553fc07b,402a8dc5,5f1cf4fc,609a01fd,350fef26,9c1f93f6,d2871f94,70f01b6b,3b518c75,39616def,fa7cd0dc,7d7d53ab,9b310217,7e470290,9c199137,34e5a824)\n,S(c5930378,6ed8a7c,b3cdfc80,a34c85bb,721fa927,9492e369,a4e4bec0,c0fe2f69,3699e469,8a3e9129,3796dea6,213fd702,d7580e67,9f446300,1e1c7a53,3717c149)\n,S(cb6f1118,f4d59964,b8f4613d,8c349d74,8cda0e7f,f1d11c6a,79dbecc8,911e7eb5,62b0ae88,98b0d5cf,723cc88f,48257c47,ca0fe3d,7de676f4,cf4835c8,fdde20ee)\n,S(da2cab8f,8c26668d,d9722ae6,1decb99c,78b5d48c,966889a9,46fc522a,31a26db9,6a03377e,234f949,4a614cb7,c93b131,1808496b,12485ad8,fc21e1a7,6d0c7e98)\n,S(fc6a4d42,3f9be3c7,fe337411,f03eef,fa595b83,9a6eca82,b228d5e6,b43b7d86,6c089544,eb8fbe1a,3dc78fdd,ac253fa8,27dfbd6e,269196f5,bb476865,a298beff)\n,S(73c9a91a,b9c6e0d0,773258e8,3ca9460c,3d09fb49,9426fe09,db73756d,e3dee882,8b314327,efc0508a,d5a90259,c9ed876b,52040a10,45d06224,78cd635f,e571d2b3)\n,S(a69f061,45b8cd1c,343e6127,14b80996,2bc02848,ae976762,933744ca,3b4516d3,87518d90,b4503741,ec16caf0,18615e27,96b6d91b,47f649ae,a86da209,d70ebe3d)\n,S(1cbe4a25,70df40b7,1cddfb2a,c15ba441,376a430f,446a2572,fc95235f,28ed9691,12554ecc,f262e1aa,cf2a2d10,ab3953ee,c8ac69f3,99c5380b,6ef5d202,5613de85)\n,S(8dea49c7,406dccfb,4305ac85,ba08b191,4ee2f11a,8827852f,d13c837d,b788e27d,c73d61a8,3b517c3e,bab8b15a,b7a0506c,2b6071e5,697b4056,d902957b,cfe9d9b0)\n,S(de926377,b175cc3b,1ecab5af,81d38d6a,5e4b717d,55bc94f,6e4c43a4,86d0ade5,29d5f3e7,9169d974,d4289115,d8d4b8b1,6be387ac,e60d1cb9,73c387d5,17d0e11f)\n,S(6e76eaa7,aeb37ab4,ab455a2f,3d525140,f6e8a9cc,5eb18fa3,8a9a25b0,d3b41497,7e3cc5a,78909d15,bbffb936,a47aabd9,44c40a3c,d690908a,89f193e4,95e066fa)\n,S(37131ecf,22d57f0d,a662b03f,c9891f99,4678539d,37f5ff8f,9eed0f8,bc607574,c03b2d21,69d42968,f611d596,e173d4b9,281323aa,6abae6ac,c177a1c9,1249f3b3)\n,S(72088814,82c89957,28e76633,bcdf0ebb,65155c8f,4979a4e7,66713f37,4a5d8152,6783c59f,8c0adc8b,da8e26f8,1990a00c,588a7974,b48aee92,d2a762e5,c974eedc)\n,S(1b8263df,baca44b2,a7fa7a7a,dbf9d3ce,d4567fcd,144d9e8a,db712365,d3241864,1fc7e3e,24f01143,1944b98d,b2dac036,edf36680,80196785,783a41be,d788606d)\n,S(7a372de,27ca7f2b,8199714d,bd583edf,ea41bae0,5a1313df,f1a8c260,cef5fd43,a0e3216b,b32c5785,b5c60f22,f5e4ed5,a5d3ab64,ba0eb2e2,916f1b9,b6281142)\n,S(71815daa,55254491,c8bb9432,755ac1f0,c30f22fd,79d4232a,72bec0ea,8cd02300,8b341392,8de15c16,5fafcc68,84ebe3c0,3ade0918,4c463804,876f1600,c76471b4)\n,S(1a54b7a,d3cfcc64,b62d866a,9f2056e,5535d4c,12c89c78,5d1c5c53,ff654d2b,b7c77ae3,9f4b87bd,22c77395,a91ec307,e9f5aef9,dd2892e8,41d8390b,47a12f19)\n,S(85cb4457,1fc973e5,dcb0b695,3d75a2ec,22cd2820,74039987,7262b7ed,999c44a6,efdd1df3,bd13fe66,c0d4ef02,8e142093,58037a7a,bd06ed53,280d3318,9d0f6aa5)\n,S(98e8649c,64a010c9,424b305a,2407a36a,cd72df8e,138df962,c35bdf75,fcfd4e4e,a804c569,34395d7c,549f7770,4c3faed1,624a8cf6,fcce08ef,cd3aa486,d5a6c60b)\n,S(1eac47e6,a297e5a8,8f433895,874fac8b,5019a164,69c6a881,7e500b94,74a5a72b,8b7daa6b,784ddeae,f380bb1f,fe64b9ed,43a10a2,95c30325,f519e4ae,da11105)\n,S(f079ac65,91f27363,17e9e0ab,6a723e25,e29950c7,a02a66bc,96c4ae68,44f42f5,ea87d1bf,c99f4374,4acc3ca0,214a1ef7,490186d0,3d924562,24981469,c432dfc5)\n,S(d6d09d79,bf1f30e0,f011c3ad,a077b1d8,fa0d94e8,8683186e,ba471caa,32539643,8770bc64,fac8f541,f730494d,cdad2d48,ef510037,466bc049,876f5cc9,7caa8adf)\n,S(376e4bd9,f8963368,7059565,68313f89,d6416ca6,b1e4e91e,3aff3ba0,b8351f65,ba436de5,67248f1d,5e99e8b9,6447cb28,497deea,47fae95b,78a5378d,e65f13f1)\n,S(270f3a18,4b42c799,a2193dae,c96f834c,b17cb53,bba1610c,6578c741,b9f20d7,ccceb12b,9ab98bbb,a0fb0d0,1673377e,3a7054a9,f4a3b000,21b67328,57e7e5bc)\n,S(ae271b64,1a1e5348,29e47a8a,93b496d0,b055d2b7,fa98ade2,f505a5d,ec1a599,14e9552f,39b481f2,522a9a23,f87afa9d,5847908a,53c1581e,45dfb244,7fc2bdd3)\n,S(569eacfb,177d8a74,a9288ad6,4ee5390e,db36a93a,943fd6a2,5ec869b5,a7f28c8c,1cf62c32,9127642b,99a7508a,a6f4f136,bfda9af5,45f52844,cb9c71b,5f732f7c)\n,S(77c7f27f,fdc4e7ba,a326a246,89790f8c,41bfb5ed,6d365e46,f277cf81,5f15b558,4d3440dc,138be5d9,566a6828,852c2ec0,e0f970eb,4501a43,25af933b,821c3007)\n,S(d66292db,f1730306,a87f67e9,b044fef9,7d46761e,7b8301ed,132ed7d8,94adbb25,ceef7755,8ceca4ed,92145f23,8bfcb32b,3d36db14,6fc50209,cb0e58f6,2c8b83c5)\n,S(1c42832e,12ea6f44,b77927ef,7ebb1f3,8769e3bb,f5507a49,25e8565e,a77ed0d6,8b9383a4,b31b4f5d,a717917d,9e1e41da,786a62a3,327be11e,280e538a,9c29d5ee)\n,S(63e57eff,942262a8,cc362911,fb98cf30,60832435,3cd394cc,5d6abf77,b21f7968,9e3c1e2d,fb9083f2,4c344e7d,322ea530,146062e2,a25fb6b0,4502ea35,59b009be)\n,S(be233fa1,86f38a5c,72c88e59,19094ea8,cf3ed3a9,b4ea3f9b,2a51489,97b83c90,402eb2b3,362fadb2,6e389ef9,edc537bd,40bd48ea,6296956f,efd19d0d,eddba564)\n,S(636ddb80,4e7c74fa,9c5f4d06,5a730fce,f2cc6956,4a24b579,aaa0c3f1,61844b78,6a4a3569,583212c6,22feb59,897eac8a,6aa31ffb,916262e7,deef47eb,e6a2496c)\n,S(d251c1d1,7250d87f,f7b5af1e,ee2f2566,215ae7c2,b6e69e60,5bdd6c2c,dee1c5e7,245accf5,7df52fa8,cab5c986,2b96658c,5de60d06,c84584cb,f554b518,7fb4ae78)\n,S(405d4cb8,c62f133b,7051cbe0,54b06f42,9055f917,3ba8248c,c3bdc744,198ed407,8463df10,a8963cb4,298e8031,bd2bc3ed,523553fc,60746720,1a9abba7,305deb54)\n,S(97f05aee,9ab33a07,e14a0314,4fda5be4,ab329394,1ce8f003,546ed8e3,9be983b8,59e62a26,7fd9138b,c4c70b15,533782cb,d321f120,1e3d1a7c,3be4ad5b,eb849261)\n,S(3388161,18e125c0,6a9060f2,6b9ad691,c99fdf8d,4309553d,ea160749,eb91ac8,583e918b,5b8e1a68,c053af0d,245a9902,a571788f,dbdc0c88,7281767d,9404384b)\n,S(ddd20c46,6bbe6a25,9f706b1a,ddc3b607,8cf65366,3369fc31,dc8f7fd3,3d17a9f9,b2df7b29,b4ea9868,bbaadcf4,6621ccf1,7833e159,acb43daa,7cf78e89,c1de5a99)\n,S(923c6d2f,71ae0ee5,596c26bc,31389cbc,eecd0712,e8df91cf,dfe00172,3bdfc9f7,6fdb28ad,27c41243,6a41ae96,99a03d40,5ff2ed87,3207f082,414a4370,34be948)\n,S(6d42a6bd,28d57e87,66a12461,b8a7d111,a448876c,149071a7,fde9df18,dca09e65,4df07ab8,1dbe97c,3585554d,f0226234,dcdd2826,747f2775,640bed6b,95fd28bf)\n,S(7fd42961,59f9f259,d3c3610d,8539ece1,70efe104,31c9a3f0,4b9630ec,21d761ae,fd695441,b8ce2bf5,1037d00c,4d50e640,e85b6001,6d5d26dc,787f1df1,25d7e280)\n,S(48c1050b,128d97df,e7900a01,70559990,944045dd,f408d8a7,5b59bb25,ea6770b5,8f7ceda0,4b6e319c,1cc61b31,53538a09,d450e49f,8863061e,f9b017c1,6cf66559)\n,S(54462d9d,a12d62dc,96abaa1b,4883c67c,b3214c40,de5a4a09,689658f7,dee2a686,7673ad6f,916011d7,fd33bb5,eee819e,6a3f0016,d51ae37,bcfec2e,59ccd957)\n,S(698534c4,e4e11d89,82a5a46e,44b771f0,95c5fe47,54d7a261,44373982,1e6435e8,36d602ac,b2720c71,8d619a8a,5e7d6873,9faba099,f71c1137,6a8f41d4,e1cbba18)\n,S(4493f759,51c681c3,bb376b0d,7c88ecd9,d0bc2a21,26fd341a,d8c4832a,be77ecc,e553e21d,d4d99aad,97f15857,4bfd54be,df7143f4,e829c12a,39109892,c120351e)\n,S(b054daa9,330080e1,89784cf5,f917c024,6c06325e,687e6ec8,cf8be248,ccf8313b,51f04715,5c9ce55a,c755f2a4,602420d,4ed52a5a,1dee9a83,b0688b1d,b767d866)\n,S(4b4272a4,fa996b1f,9ffe6796,e6519db2,c1f8cfc9,606fbc57,1fe03713,c029583e,9526f2d0,dce7c53d,5cb36f8c,fcbc517b,cecde833,4384d10c,f5fc80a6,ff0edb83)\n,S(d61eb681,c69de82e,caed8e64,7d1a3948,6cf63f83,f1f04bff,46a04aa3,63e29604,9b5a92fb,156d7b8f,37c6d9a4,30ae28eb,f62fdf5d,5bf441df,aa386259,721f08b8)\n,S(bf8f002,57f979c0,9f973c8f,3dc15eb8,8349e340,efd8d57d,5763e4e0,c2bf507f,561d862f,1041e670,fdc265a8,36d363a3,43346739,f4f177d9,f66414a0,820614fe)\n,S(63b254e2,a7a6fad6,4d9ca03f,7293a86f,b471fd45,51ec72d5,eb03e289,774cb498,f4145111,3a4ce922,dc7b3819,a2de49cd,f5be7d53,6befd880,837bbe7,51948c8b)\n,S(bae6facd,e1da6ed8,63491f33,c4c9efe7,50fdd908,6b93c09a,e0418a29,d3968725,7c7dc955,e483176,f6bdf74c,6654e6a2,e4ca46c5,2526349b,b4d66090,6ea30533)\n,S(f56285f8,ea15aa08,f3ed8139,59c660b0,d30a6317,5380429b,59584623,aceb34af,110033c1,a202194a,40703c9d,ea2dcb9a,d9a0f6da,7b99b8ee,31eb1ce9,55a9eb9)\n,S(876c7c95,3de3d451,edb9191c,60e8e36a,eafbad2,198ec6a5,40d72633,8151d87a,95efff74,72ce0c6c,4010d17,7e52a859,cf55011d,1005bd27,df54e25e,972279b8)\n,S(e956c7ed,77c7bd5,68096902,4ab1c758,a024d86d,ba3f30e3,fbfd83ac,940a6d30,1b5dfca6,f0d19ab7,7a57a9da,259a564a,5aa5759,ce6826b,45c71771,7aad9da)\n,S(f53fde61,abdb4543,1456e9c0,65048cd7,ab743b5a,81a468bd,8fe2ffaa,99dd3f16,1d28b539,47ea22b5,178e86b,ab3561bd,a65ac78e,e0e2a6bc,1a26b64e,d790222f)\n,S(b91a8681,52eb435d,475b9103,936a7c62,5e49b0b4,f7bcc3b5,f5d36449,c8043ad9,c758d17,56939bc0,61696f3d,11dd1bd5,722dc90d,1e8be88b,b3430062,a13aaa75)\n,S(5a87bc70,23e32927,db4c55d0,abc97536,61f5adcb,b24c2897,b16f08cf,8d8f8cc7,9ceaae4b,aa6a0d5c,46d2120,fbff74b4,9d1ac32d,88a89b2c,3d2aa6e0,6f731e54)\n,S(ac0b1b43,e54eb354,3bca80b9,efc5cdb1,215622a8,66b66e80,de979f79,71ceb034,a891575e,5731e152,17bc2b87,197da9b5,439477fb,d2bf07f6,9bd13f3,f4638d8d)\n,S(d3c41ebc,2017cd82,76f4d6f3,f6ba2370,e84f1949,df3abdc1,45073467,e85ca915,52ab1d52,8be55945,1f6b1e91,610fcf35,bc1e9576,3ba3ece6,9da5e4d,8cdcf7b7)\n,S(68cffc57,f4c82cc6,f7900d00,fe1b0f36,ab842e4f,49ee9063,4d1ebe95,47923b02,729955bf,aac10741,c3fda281,c18a306b,367ba904,baed26b2,6fe6a485,9ab1d8e2)\n,S(7e0f58e1,246299ee,e08566b3,35324a66,579dc765,343f874c,d30f2553,8c177d9c,39652583,587293f0,809af7b,5d366740,86b9015,6a05928d,cd340196,8821447c)\n,S(c72abbdb,d1816498,eb53d4bf,1b325fd6,5dc45086,73257bbb,97a15eb8,e4c9b542,3c8fafa5,5df5f3d2,88441ed3,e46cd318,841a068c,b681b782,88e77afb,2b25a7b9)\n,S(74747f5d,3eb09144,1f64d76c,ef690378,943654ca,73fe15a1,b720abb5,d2363d0d,12c6724,bc7e8f7,321f993a,5caf0547,bf54c1a6,41f959b9,746fad7c,1c443649)\n,S(f2a702d1,ab1de7c4,34cb5d71,dad689a9,29db862c,d1fb06e1,212ffc8f,91b67067,5b91e2c,c730ac9a,cb7452bc,7fb4dcfb,1d5ec11a,bd146429,62c7bd16,37afd854)\n,S(a92d4f08,14e76b46,5fda87b6,201c46e8,c2535b3d,4be91e1b,530b5634,d00d9340,4d829a8f,3c02fb40,569fd9bf,e754dad8,38d96dbc,2350f0be,6f4ba065,5cd0277)\n,S(79e30cb1,ac06c3b3,f90ea320,60a80fba,df5ea142,84a15746,2aaf917a,26f205a1,ad220a0a,81459495,5ac8a79e,d0cba974,7f17364a,9f6168d5,3521f276,c8d5c82f)\n,S(6d55dc53,d412577f,463252b,e240fa32,88c8d6a3,babd6ff3,20231b6,8c9401d1,83a41c96,aa3b32c0,59155345,2679f056,c98e17c8,a0a5e154,d732fd3,7b006eb3)\n,S(cf9c9f1f,604eb909,b37ea5eb,4cb8a0c2,11ef14e2,d3e2f48,7c83b56a,49b3f20a,2b90b9f6,4e649988,77260b5b,ecb441de,da24eaf9,df56ff93,dd3d1c8b,a247dff8)\n,S(60d4299f,29ed994a,b3367780,9ef6fcac,e30f435b,ba9a8346,a2fd925e,186b35dd,df69b88,b8aab4c5,8ff86ddd,2d8e424b,40d51a4,9d189437,37b23695,4760331e)\n,S(d93a6edd,1b674a60,6b6bbb85,4114a3bf,7de3be59,82cd2122,887c5376,d9493540,87da37d7,dc79197b,c0159006,4f921ae7,acfdb08c,447ed230,423c51bf,f9e5f7ff)\n,S(cf8c3d37,7e108d98,b72bb6b3,1cb7b5f5,fd5869da,1a06fc60,25d9191a,bd652962,6f5cd02,bb96ad02,db42b034,321b3cae,fc54271a,879edc93,afc9c8b1,34128fbb)\n,S(6ca99247,4637ecf9,827ab65a,c7b9ca0c,715b9048,f24c42a6,90847e68,8cdf29eb,51378da5,fefa454e,d96a446e,dab57c3e,8bb6160d,d015c1f6,d93983e4,feb55439)\n,S(6f7d2c04,3cb813d5,dea67758,cacf2e3f,3cc3064d,7b9f08c5,58ed686d,28d17afd,4794e278,13ecec48,33f9106c,17c5e161,b590a5f2,ac293c8,c65a6cc6,5233bc6f)\n,S(f8aee0d0,bc9883f,ab6a82b0,184e9199,e818d01a,7d99f475,d2ca8a24,e924f3e1,acf9cb2b,69135df0,9426bfa,c6b1b3de,44f1055e,5cd21b8a,b526f34a,839442b5)\n,S(8b00fcbf,c1a203f4,4bf123fc,7f4c91c1,a85c8ea,e9187f9d,22242b46,ce781c,61e9e58a,3e81e690,ec026428,ee5442a,a8de699,dadfbcac,478985cc,89d35bc9)\n,S(fbacbb07,8e84a2b2,c201ebbc,1cc3212c,a7278523,e984bc1a,b0eb7fa1,39d6dd4d,2c6c9dd6,f5eb0899,797df675,ccbbaa25,4e557d5f,d16c6083,3aa84a7e,4c3a0f52)\n,S(1556875c,2f32f053,8d28f993,53ba2804,5ba601bb,3df8a175,bfa33dac,ac5c0611,53623050,c3da9464,8e9fb540,5888e387,d2eb783a,10e45cf8,ebaafe84,a4e240b7)\n,S(b602b095,7f5b5e98,ce3e690e,c683f803,49a8ced0,5985f79e,2e972bb0,2d93d77,78868390,ddd6b821,e30046ac,b1bb7b31,ff358838,af5b89d9,60d39b4e,85435227)\n,S(2a110165,23a5244e,89d66f8,a06f0553,7a846216,75fe4377,24f51501,da2dd17a,24d3b525,e1ca62e9,b02de498,30737f3a,b881d078,7d2c2bff,938c53a1,b8825159)\n,S(7314759,1148f9a9,ce326a8e,4f43d2d9,a13edb92,56fc9d38,35a35da6,457efce0,b195cc94,80d0aa04,d3ac7cfa,45766472,1ad5adf0,3060b790,c7fb0ff7,77b2d8b3)\n,S(a36e4fe4,c7e23d7,16362979,c5a9d8e0,525d864,37d96e3d,b2f45edd,b36206fc,56ace785,a428db4,a8a70de8,708339a4,346699f,697a6707,c745635e,66844751)\n,S(97864be7,a2c54118,5d61b61d,5a2494f4,85b877d7,e8864402,3444d778,f43cac9a,43332a78,a85b8391,551dcd90,e93e71c,3a6c5428,71b980ab,138eda2,b9f2ff69)\n,S(34a52dbf,2449eea6,da2c92c8,45dcd47f,daa7ca41,5ff02458,b74eb996,8519893e,add41829,900f26c9,f7ba8d55,21f3bb23,b3545a35,699d41b9,4270547f,e303ece4)\n,S(e250aba9,94eea617,5fb7b2b4,8631f5bb,d8bdbbb,799f6fcf,5afde8a6,2ff3d629,803f34f5,9db0fa86,bcb6fae,689530fa,2e92c4ec,bff1757,409bd836,8143b0ea)\n,S(18356a6d,b5946e2,1149347a,4558e116,7953042e,e3b2a372,869ae29,b871ae00,56ef0971,6b176f81,e1f98ec8,dca127c4,ba6de23,ba8c1f08,f19e9abb,995385cb)\n,S(35a8ebf5,e5306084,365ef3f,30c29e56,ca5932d6,f73d688e,ed3cf2a9,10205533,9eae5d95,42954de,23d41032,5ada759e,20d30fd5,c2d058c4,53a18520,7f259958)\n,S(37e06f5,25ea8fe9,ea862b92,53a965f,7b3dbe90,9ca487bd,a705041f,e6a4e1b9,83919fd3,5e489bea,23f13b60,41a19940,3f2f6568,fdcf60d7,3f57fb6,1fceb97c)\n,S(abbbe697,ac6c002f,11062947,6e4a6ffd,48316646,718d8713,1a4dec19,5e131c27,b2c926cb,9d5122ff,7f8d8a24,a20eaf4e,fd704944,9aa48300,92971572,b12f9dcb)\n,S(4df36acb,1484dcc3,f7c29c8b,78915315,5a1a3636,aeaca043,68a585a4,69b05878,fe16fe6f,c08af026,3fc417fb,19564534,aa059f4b,b7fced09,d4fc20de,6a41c41d)\n,S(5ff14ee3,10256a0a,889570e5,ebdaf6af,c8f49c60,dc7c4731,23a7d29b,e799d0d7,96ff1538,55eb2fac,8f2a923e,ead9851a,95382d6c,56cfd0d8,9891d2bc,f7e65d7b)\n,S(16a12c52,c1d422f4,791281a1,b7ab7186,a24dbac8,36af6810,4f62dea2,855d119a,7a6ef272,f67356de,46996cb3,8bbaaba9,d36a4bf4,60e3b2a,b3a81723,24c17478)\n,S(8f4c9c33,83688920,a48b3d15,4fd567e4,5fcdbac,bea44eda,60600ffa,a1489ef5,2bb5bc4d,e06444c7,b2bc0082,d629e2e5,a4b0abd4,8cbb9b4e,37d564ca,db885717)\n,S(498bf39b,7547010,854ca399,e50399ca,19236d2f,d05f5777,6abd6d2a,aab83310,8e2debff,cb58e36,bcc7beb5,8a45d4ba,b5edcd46,2c355d0c,4dde51a6,6afd691c)\n,S(78147e0a,2978d396,b22247d1,74958336,2ba51d90,11e89c11,71e6e136,eefb5996,a66b7b0c,a73b661b,e71bf0fb,2eb4410c,4c75bff5,b8b05fd4,1d830d27,ff85989)\n,S(351298d9,fb236c7e,5477aea1,d2df0048,47e112a2,e16adf66,3f4d77dd,828d4927,6c9c91af,8b6f23a9,d15c3884,e618ae51,241094d4,5878ff20,67f2ac81,dcfe00f9)\n,S(fb5ffc0c,88fb609c,24cffc14,848549ad,c1814668,9e5f8a67,a342bcbe,16399d10,a995e13f,9ced94cb,90feff32,8e92e978,88cf5791,c885ca09,46f46e5f,b8229ab3)\n,S(8352b7c4,4cc09c5d,717bd197,40dcaaa0,89565e94,77cd76b3,6c7a4fa0,4832097b,9507c998,fa25d9,758ca78,6774ae68,f91c8fab,694c5e23,6f8af6c7,7d0fe6bc)\n,S(1be65c0f,273a2746,d6d014d7,6bb1c595,5d5ed1db,62ad940b,d8204115,85919f4a,dac98f30,2a38f839,a3d470a8,3ef83ae8,f044e93c,80b23552,da3da359,5c09a3f2)\n,S(7107f3a5,2f4be227,eeb65037,ae800f64,8de14d89,ebf743a7,ed65f98c,b58418e,bfcf1c09,bd1af327,d14e429d,18eeae45,927b2df2,aa15ce60,69f6a74a,69fca7a4)\n,S(117284b,e8edae5b,1ce54a13,3b1f9d98,983389cc,a4ccff,9dd04973,97312e3e,91e48c1e,724fed49,8bf51999,4c84d0b8,84e3af77,86e61539,638b45c3,8212b03d)\n,S(a08d86de,b1ff9ab4,651f1cd0,d89b6714,41c243b6,c7e655de,d31b44a7,b00de54e,4d0fe7f6,344d39d1,57764fee,f74cc949,a72ed8d4,c2dbc12c,ec2629c,830f0d2f)\n,S(9c44c1ce,df67418a,eef2cbf3,68d48a08,98cfc633,de711550,3f78ecb5,a4e8c25f,3cda2020,86d3f096,31da959b,9f9870c3,de3d3c6d,e4c1b35f,81f64dbe,31e743fa)\n,S(d933e475,5215c065,bab118da,6f24d714,f8597949,a52ae319,250338b2,2339f149,5fb0f28e,313af04d,de3abfa6,4981287,e277e39,d2f19dcb,547d6fc,88baec45)\n,S(7fe1f197,ddd0532c,a2010528,9f243bc6,4c2f9e53,65aad5ff,63c0f1d3,188a42cb,813b133f,a1869218,ee361828,6561e75d,a9ec6bac,6ba2ac7c,d3f5678f,fe472af7)\n,S(e3568521,89612102,7ad0789c,72dc6d57,7ba412ae,b3d7551a,96aab952,c507f79c,7645c505,8e2ca8ac,ae5fe225,eddf4d45,7d820114,cd5e69a8,4966465a,423e3a30)\n,S(c56afd46,8a5644a2,abebcefc,3b6a9da0,c667a183,b822780d,146ecf82,b6ebece4,9e41c655,a80e2844,89fc587c,b686549a,2915ba14,1c691e75,cc635f9,54f1a8d4)\n,S(b242eb39,60e6a8f0,73b6042e,1095f0e1,440f9f8f,d1abed56,ad1f26,a1589345,944da76d,f063f0a0,3602decb,696f2a34,378579ad,e8469ca4,bb5041e5,876dfde0)\n,S(3a52fd66,6d2e2e2e,888a43f2,fce68703,78f835a6,b5c3bd42,af57b107,323bb827,12e51177,a7b37a46,2755cea0,18f4f29e,96c7d6,d0e434cc,4874da99,a7af91c7)\n,S(b77d5615,c8831ad1,147072d2,598a8c6b,4a71c0fe,967a6cf,70877aea,24d28f53,25d5b7cf,a068a665,deadf83d,5f793605,f5cff2c3,36a8d176,d18c634,9ebf3132)\n,S(e4420c3b,61e435a8,53784728,8426aa27,f23d224f,4ff7a14d,79898369,c08530dc,422b04b4,857984b9,9bebd74e,1588ad96,9b3c67a9,89b119a7,f7cd2c84,ecca8572)\n,S(888bfdbf,c6ab299e,3ba0fadd,a614fb01,236e3c44,98ad07ce,cae08105,630aaaea,86e7253d,58cfe580,628fb94a,a1a8f40b,7ada97c9,d8713453,f06f4773,3770eb3c)\n,S(f74d258b,f7d78b30,ddbde398,a1398164,d850f2d,48616cce,8ef4c436,10ef419c,d13d49af,1e6dadfc,94332213,cbb12d32,5d60eb6,d48cec9d,fcaa7ff2,53029204)\n,S(a8b33e90,98d60483,a7009786,11b92257,65cea0d4,b7ac0ae0,67914110,5cda6df0,58cc238c,c08d957b,1172598e,96ff4762,1182b6c0,652c9ddc,650f3b51,3521c553)\n,S(5af8b154,7477fad9,8e5dbbe3,d4a1a15e,7a4a6cb6,5ae13cb8,9699470a,1a3ef1ff,525ed201,d0c61832,36c8fac1,366e8173,3c0a8c15,b6ef7672,cc84b1a3,7d6f25bf)\n,S(155c454,6d4c5c4a,21d14383,3df8662a,fa71e665,ab7ff0bc,8119f29e,3bec21c,20e99f67,2f641185,cdceaefe,8fd7247f,63842282,edeff6d0,378966bf,50411aae)\n,S(53918586,ee182d66,e7c22aea,5a663770,c8fd7f0c,6738d473,1010660c,7425a56e,c7fea092,3052ec1d,7e2564a1,e70b8924,cdbf727a,7212052f,abc58d9d,1856152e)\n,S(f7964dd9,a0fab716,74804abb,a7740f4d,cc52d7f2,8d5acd4f,67998bba,3bad6414,6a989f64,aba0f60c,e7bdc5c2,aec11de6,d469a122,f1bbfccb,31cac834,89f62c59)\n,S(741c8c8a,f514f2de,7880a909,b327c6ee,ffd72ee2,b5b1658e,72059edb,cd663183,f35d276d,e5de1460,dc53532d,48afe736,e40b6b31,fb6fdb49,1224544,a487b2ae)\n,S(de8c69bf,6cc2a28a,fc6ea9f1,26ef4f22,606e55f1,312177e9,b2ef8835,8b47945a,8de62853,6900d614,780e2fec,b4ff7066,70d84742,3b1c852c,8b85ca4b,40a48a02)\n,S(81e16f39,619bb41c,d8a523b2,d3dd0135,d6a8d5fd,9a8446af,cd058ea3,6f57c537,6786fc73,7cd2ecca,d146de9b,951deec4,375c434d,7dbac32f,2395c265,bbf4b31e)\n,S(459e9589,d079b22e,8c5625b8,a725b30a,e70f7f04,8ab21a20,f0123aae,7a6f988d,a56ede93,5b71a292,c4ad26ac,cc3506cc,915de21a,4557512e,e767e8c4,33f38e08)\n,S(b079d755,4faba7ff,20818806,a70b4ead,f2e5bb51,d1abb758,2284f385,868ebddd,495ddc2d,552f174b,210f6577,3e434fa9,20b6c0c4,574601dc,fcf5b701,fe74dffe)\n,S(75391bbb,5983fb21,41580de1,dd5b10b4,bb30af17,3f05c100,569abd2c,674f288b,57c7a6ba,c9154ab9,eb66032f,2135a52a,b319f534,d1f1c80d,b58a4af7,de958d67)\n,S(71436957,f2848f75,fc461069,e4fc691f,5bda94f7,32fcbe7d,5a89e136,41524db4,1287f852,ef4fadd5,65a2813c,51b93c81,95658a5a,5cef224f,e92511db,df3f0007)\n,S(b9038b33,fa75d097,dcc74c9,e25970ec,94ad076b,7279f785,3b7c98f1,41543f9c,a28c3169,69295ed0,3fbc1bf4,8e39c8d6,af59cef3,d6f66660,73470ab0,dbcf838e)\n,S(b2c63c28,a9fbd900,fbc664e6,36dbe0cb,f259bdb9,d67c34b0,83b8af17,a5f86196,a8f050fc,69c63c4,67308421,89510ca5,b7920723,6f5c12b0,ee7103ee,cd49ebdd)\n,S(cdd2a5be,a32b2195,f4a7edfa,dfb7c785,d06bf346,f38e928a,5c92cc7a,2417f39c,ab66e78,ac421c36,3203ee7,22b380ae,2133864c,83829f04,d2daddd6,b7fa621b)\n,S(825d0864,b079a737,acef03a8,28838ec5,a27d740c,724f9c39,780cfa61,9f3db80f,bf3ee8b7,749e44a6,7f27e427,fe05eba5,c2154fad,bc2e2b43,a877219b,461071d3)\n,S(37b79e3c,bf6bf402,c96930a8,79f4ce3d,d0c36477,f0b0e218,608b890f,bf5e24c7,d97142c7,cec5630b,a090ff4c,9213c2f0,c32a5bb2,f7b0ee29,2045ad03,10f66f1d)\n,S(fba64ad0,678ea75d,409105bf,5b452ebf,89560b0e,fbb079d8,aed22c33,552b6135,e665362d,e4e637a8,a85dd844,1a806ad7,5c628f19,7d6dbe3b,df63c0b2,d1f938c)\n,S(76787b8e,77ed36f,9d84897d,e84c476f,d3bd490d,184327a8,59ea3f97,ecd9cf72,cf79f14,1a3f38c3,cc126011,d1d78dfc,e3ba228b,33d64158,210cd942,3980a9b3)\n,S(26babdd0,ffb3a334,85e6ba1c,5661a551,f16a129e,42f9fe8a,3691a50d,157b31,1b3a4ae2,b1cf1a46,fb666e33,a20370b2,e66a6c71,27edc8ee,e4c4072d,8c2c530d)\n,S(15aedbb7,7a2fa1e9,7a6aa864,7729f28,7ca4d3f2,36046008,c1b031d6,9f76307a,3342a142,bf8b2360,6a574643,9c05f36b,f9408878,5354c788,a6dcfd96,ff073649)\n,S(98ece0a3,9bb7cd4f,df4d5767,c6ef4cc1,c2b072a0,dfde5fb3,de100f57,466fe467,c4e924a8,218c93e7,eb829d0f,839556c6,1e679d29,6a0a6bba,6f4f463e,ab227e28)\n,S(7d867505,fc213eed,4cdffafa,b067bb71,8a48cda2,fb323304,1989b6a8,3ff373a9,5df51ff0,3c212078,197c417e,f4a4014c,96e167f8,8cea0c1b,9199ef75,7c97d47c)\n,S(f24f19d7,43578e1f,be3ece8b,7b00d5e2,bf269a48,9d76d17f,410b73a2,95b3001f,644a43ff,55448b66,7b048bbb,b34f4c79,16d2b547,5148020d,53e53627,623631f)\n,S(93853304,5c22296e,1e911281,ed4bea22,1fd1061d,2039a27b,923dd3bc,800efd59,22988cf6,cd2d15,f799bbf,e4cc905e,2607da21,e9fad162,8c2fe699,8beb7040)\n,S(f090c705,39834f16,253b14ee,8e4d2685,b91ff4ec,9897df0d,af1531c9,46319743,c1171885,1d30271d,a8a08391,f53a02b6,28c59c8c,9af3ad2a,bf158341,280bd522)\n,S(e8fc8ec,ab5bf3b7,4a0234ae,b2a8eafc,df9bb08,a90078e6,7fb6cd3e,fea78c6e,b08165,34ce9bb7,46efcd71,362e0a75,a8397c0b,490e75c2,9b007b28,26ddabe5)\n,S(46258cd1,87cb43e7,3003cef6,94af37e3,c7426dba,c8033aa0,9b0a0d71,9f126785,846141a7,5f060822,764dd82e,2c369821,75576ebf,7082c6d4,601ad237,55ad4fc4)\n,S(e7f38b3b,db3887ef,529d27c3,f433410b,94109bf3,45f9b7a1,e65bee6a,cca3e430,f52440f1,5eaec702,90adec0c,b07e8ac,ab1fafb7,adbc8f81,9fac349,2acd589f)\n,S(2d29e833,1472798d,75fd5b75,1f569da,fa9a0167,f73fc62e,da5b03a5,2f537aec,52d3dd1a,b117b9fa,a17c58cf,c0593603,d9e2f55f,5a230001,d18976e9,792d2be6)\n,S(a3b2ec9c,abf7a7b7,77fb44c9,c7552dd8,f47609a4,6f943c7c,8ac97d1c,3891ffb6,6ce38c70,f091381f,53093385,22a5ad66,4d528061,5b01b417,d559cbbf,3cfc19de)\n,S(afcb3c1e,7582a56c,e6504dd,ab3d1a8e,6cefe762,58543015,a21f65d3,3100f473,6baf1f9d,fbeb8499,8a6afc61,8e193103,67edbd87,57b2c4a3,8e5a76c6,8b171af8)\n,S(88b2f212,dc899567,bf62bbea,9466a8c2,6650f74a,490b86ec,cdd35625,d90e2ac8,73fd757b,def6153f,d7f6d4f5,da1723e2,6ecd6c42,d994a08e,7e458a64,d18c30a5)\n,S(bfdea9f,4ca32916,651c971d,7da6a2a7,395c5945,5c4940d4,93d991be,1dadef3c,82747044,7ef3f684,4200adea,5b8077cc,4166bc65,1f6d4a17,578b64d8,21bc20d8)\n,S(5d45cb81,aa765d69,ca52e386,9491ecf0,e8fdf6a6,3d64e65b,5213647e,e4973ae5,a4a4a32b,51a76d77,773517e7,c103a7dc,fdab36fe,3cafa2bd,b17f82b1,2fd019db)\n,S(f3a503ce,e14e9994,aa34fa53,1c43e5db,6d6fe092,45d2f3ae,87d06753,7ae7109d,2b1714c0,a24d50b4,20722daa,d1951b63,568aa5ba,7325785,ac555e55,f3ec49e8)\n,S(94c3a76d,6f812ed2,454c225e,ab8e6b8a,4261953,37d1d2d9,b666ade3,88cbeeb5,bb89cee6,aa406746,dd4893b9,5bf1818a,3d1351fa,d66e104c,bc8d63a1,efa953e3)\n,S(23dbfe81,5232403,39d5a662,51fda5bd,b9a2d3d1,181dea3c,c0c908c8,f0f4c050,caef3a71,229f10ef,488f8385,c79ed0e4,b5c16899,d40ab679,4e45b84b,4deae6b2)\n,S(3907e3d1,20ef8619,c11dc69d,c57935f5,d2dcbeca,1b4bbb88,e4629ec6,acbbf1d2,438f96b7,d74e2b9d,cc17b0a6,c936844,e6aad1bc,58a20055,ba298446,1415e853)\n,S(c140b19,3eeb04fd,80aa6a37,3407f591,651c944b,33788b71,e6f05e1,672b7d9c,949bfd15,59e24543,9d5fef6b,70763b63,899450ef,430d2e64,1f7077b9,29e44072)\n,S(977cf05b,c96a39c8,1dd2fe26,930f75e4,2563c3b6,b06e28d1,740a547e,f2ea56c,3802e3a,8508164c,36e95e23,46ca468b,7e15878,36a9edc0,e70c0e6b,9aa10d52)\n,S(1069c0d6,3995e0d4,cad51e5a,9e4e57f6,795a7bb3,9ee3c376,1e827b20,d8a034e3,e1aa1487,9c0e4c65,581d89c4,7abb5e48,47963aac,788fe804,1d2c194c,5a7fe33b)\n,S(ff78c680,c3414181,ff3ab10c,74e2a755,42419af5,3527a45b,ba3825b3,c93e3682,eeb70adb,f05390f3,76b2382e,20b2dbed,86c8c574,df2f256e,1fc4a376,24d3615e)\n,S(5ec9eb03,3acd3d6a,9c04c3ff,5838a6a0,2b0cb26b,d5c37d05,9056afd9,86bcddc7,92a287f6,eed0df0,17c0bed1,ed9445c3,e39d92b4,8c3a9c8b,9ae26749,732aff03)\n,S(eaa206ba,792dd34b,7ee67e14,d8dbc7e8,bef0a54d,a7dc7ee9,339d8ec8,471b37d1,5577e65e,be719ca0,7fef2530,c40c1617,55e00d21,1d78e5e2,695107c6,8d1ee92e)\n,S(26d062f5,6034012a,3d76789d,455cefa2,689ef08e,d3d87f54,af952afd,ceb3ed7,5eff1dac,ef6f5877,99c340c5,f0d1f6dd,dbe6faa2,5ace9109,4e7b5836,d1323424)\n,S(800d415a,e50db62a,4f49e449,d11eda8e,1a2413f9,c341bbd1,492f2271,1e602d48,569cad6d,5d19b5d,2299ec5c,fd12d9f3,d5c8cb0e,756036fb,dc5957f5,7c02eb50)\n,S(6c01a352,bc16dc19,973aaca5,f1a21676,e1531fbe,f8586bb,9853c627,9c9a1c90,833dd742,c9596a0f,2767226a,b2548139,a39a17d2,d64d6765,4c073b18,f8cc04e7)\n,S(3accc922,f1b3ff0c,504e7c4d,4738d1ad,f0b914b8,d08ef8e8,a54e431,37742c26,aa9cd483,27d60b34,304dee26,c52b2979,52a2d118,82e10b17,86a09acb,3cb0ad7)\n,S(a0df5c72,828b73f2,a380f75,3f8e6352,f8d978c1,ee6ebedf,2ec70ff1,d0f8ec72,b230adbe,f1e0bd13,1e622689,379e7232,b1327db6,eb0ee306,80d7a89f,a4ac6670)\n,S(9d5f0d94,9776ec98,607a8dbb,d54865c6,d4bbc970,d3ff85a4,49d57b97,33b52c73,ff08efba,f4893add,54b8a056,ff60d345,ad7faf15,7d11acf2,2cea0f2,afc1a8)\n,S(def5d92d,9ea1822e,dea5b293,58a51ec8,228f54b5,a6738917,fb7f2108,6dd3d84e,b6c740d,b94aebc3,138d3ad0,202bff37,9d5bc20a,d7c0307a,479599ee,8b3129)\n,S(fa90b105,cdc8d74e,3f87136c,f4d075f,643fb0f1,ba6eb832,73642e65,84df33de,3e6b28c3,73f58eba,49e9e852,f0f0e244,3a180d92,52624c27,3c079dea,50bba36d)\n,S(8212e821,ff2f7b90,c01c8461,3d4d9df9,ce077cb2,9706a349,575b8cd1,a3d0eb52,d59c05db,2fa3e756,fda56e8f,33540639,d24bb5ed,2c8aeb5b,8f8e43ff,703185f0)\n,S(ee340cc8,1d1f71d7,4b1a641e,101d15e5,24f155b7,2afb4e49,f9cd8b20,ec61220d,915d833f,25355fd7,f1efa796,4a8e8b04,86f8141e,f5811438,f0083382,ae286f37)\n,S(2c535525,dd2e3d83,740b257f,bb7223e2,302b5009,7f8366b5,aa26f65,442afee1,1cd4514e,f945b668,4f38f966,2f3b5402,92d43a79,7f73f947,67272713,b61cf765)\n,S(df7763cf,8b57a288,cf4a9083,a2a5f977,404b9e1d,6e814f2b,aae9ad45,fa67d94d,4f7dc336,31fdb48c,612276bd,d388ee9d,bf05295c,1a92709c,b4fc33ac,b1580ce2)\n,S(3514c240,d6d0f218,11374b92,8cd6d063,8ff99b8f,4d5e4da1,8fd126a0,ecdcee60,2a0d1f4a,1a1baf80,3c98421c,7777ed1a,ac17abb2,720975ce,e530a5c6,4197fca2)\n,S(3de75d9,e58bcb81,94dde551,ab541d54,237a1b58,d935f60a,b54bd3c,6ae40a27,9ada14db,be2db058,c6bad8c4,86f25037,3ec422da,fdd5bddc,455b2b8d,25d97c75)\n,S(a728ce0b,1804355b,c5c144f8,1d5eb1c2,90ad3d52,f502c5dd,ae28a08a,6de0420f,4387cca8,f72b51a0,cfb4893f,a85491fd,42cce3b9,ec3344f7,ac93d001,47ddad3d)\n,S(ec3c9a8a,5b844c0,947b22e0,2503a815,1d8234ab,aa94032e,16c1d874,5551c39b,7b08bcef,45f0fa93,660845ca,44edfae8,c8ac51ce,e836b043,3825e410,8ebd7fa6)\n,S(b0173d56,24945acb,3bab7e6c,617532cf,e619e7cc,e9872e93,26a8ec55,a24761db,78d27b5f,3e9a0761,d0feff12,198dcb11,72a81df3,1320f10d,44591ae3,5f1b381)\n,S(d9eb3bf3,cd43dc8b,977c3890,ed3a4b8f,4e04bd11,f95963a7,970d9600,40cd73f6,98196b5c,c42e808a,3f1db718,98c50048,510b9e4,c9b69c41,e7f5b2fd,63b23044)\n,S(fbda51af,8a40230a,c7602606,21f92b38,29bbf1b0,1c027f10,7ca54c08,65a84e74,64833994,aa453bd5,4c8729e4,e9010fcb,8fd427ba,3bbe7c71,e812513b,fcd6ccf5)\n,S(ae4b9a7,51be1966,f564661,61262faf,472b14c5,f0532cf8,8af872f,ba583f9d,8b2c248b,aa9d7e5a,6f0c6eed,9ad3ab5f,e2bd4078,da4fa281,f4b672e4,9695ee5e)\n,S(58040152,6088026,1668c6a2,e462845c,f29764e0,31edf6dd,a40b6e0c,4ccf6ff5,d2f96ae6,4a83c04d,a072f9a4,e39976d8,a2e5f88f,fed070cd,5fb1a701,db329485)\n,S(4c28d686,57380f81,639abbd9,fafcf47f,cf477e26,1c46a03b,57ca7326,4c7e029e,694b8a9c,4fa75e14,56a67e8,acfac16,3122a941,150da022,59fb024e,ced8a70)\n,S(de205ab3,9e005587,f23b51a7,3d806f81,6984fc77,7179a6b9,465a92c,ff25c9a4,ed84325e,12efc1c2,db42cf1f,eacc12c,48f68e42,9aec9135,5af5c327,c5273d83)\n,S(5ea82868,c2cb0a7,4b658dd5,721e6571,b968f589,6d22a5f1,b3ec6b69,594273f4,88d10eb0,8db264f8,13adecce,636f6c58,e1828539,1e538ad,6e2237d2,384a9499)\n,S(189cf7c8,64497416,420bd98a,3e3db4e7,c3b0dd46,d7b9bc9c,37f2d036,324998ba,bb3409ce,d46dff28,36601b1c,f7dd606d,7422118d,723f7da2,4d25802,1edaa083)\n,S(70a17187,38f50d43,8868026,58100245,3c3c41d7,8ee5e14d,3cf536f9,bc82789f,15c95120,e112537e,41f33870,18f09d1e,101dc445,a9f36296,2b9462d7,bc27c1d6)\n,S(578ac0ff,622adb6e,8c20eed,f3011085,8e4271aa,46833865,cff46b9b,fb3a368,f711a1dd,f5f3172d,2b9b2f7d,9d50818a,6b0ceaf5,1d67e15f,1f01ca5b,bbd7f851)\n,S(dc9fbc03,476aa747,d64738ba,ddce8a5b,5887f177,fa6cdaea,3e3b05e2,8d840071,c0f6752c,8087dd25,f8d94a19,d294e550,8bd26774,cf4e7ab9,515f0a4e,89eee1b4)\n,S(9749acff,a348cd5f,2e84dec0,b3d73151,4bb817dc,4596d78f,e0295215,47b0294d,df667dea,35e54810,daeec20b,e0e7d203,d89856c9,94501167,23de84e0,5781a1c6)\n,S(e39fbdcf,2fd2730d,c3359f21,fa815478,ae8e7a98,d6b132e8,e92d343e,32657d85,bafe9881,70a78596,76a6ae3e,364885a2,62441578,8c31c283,20a06b0b,e5b5e01c)\n,S(6009014e,27f13712,c00bda4,dc913516,e04b692a,ea32b89,e0fab8bf,91402c09,34910894,f6bd1cd2,cb796f58,8ddba661,eb4006a8,6cec32e5,7086099d,42359f6b)\n,S(bf04f247,d02e46d8,2fb9bec4,f76b3eef,b644c92d,43622162,d419488e,87f2f773,d646f4e8,bb3c2e4c,f19ab00,4674e354,302e125b,c1ed684d,32b1cebc,7c2172f6)\n,S(9609f7ec,b122b353,85871efd,915c6d99,3e5468ab,c30e9acf,f5b4dfaa,31e5e3c3,106bc52e,b933f0b8,71578ac7,74e2ad89,ebb4d9f9,eeb95592,5d6b50dd,988f9a27)\n,S(b690cc3a,e1ebe25,a07440fb,5cbdf56f,f5ae581d,4dec7366,8da2ad62,bab9abe,83cd0023,fd3a3ddb,2cda9603,2b6c1657,35e5f9f6,249a535f,b9666a97,e049dbd1)\n,S(72da508c,ed507744,1aa2bc11,4a9098d8,2c947948,395bf38d,6cd00977,91d326d4,165baa93,3433ea2b,e978036,4fec922e,e5d743db,b8117e09,5eafb467,3f668457)\n,S(e0fd116e,540a3009,2954322f,5125a72d,1133201b,985d1017,29b1c9b7,a9851c37,c6bc7276,48aa707e,549e899d,630d3155,a516a06b,777997ac,8509045e,e5b88a92)\n,S(9d4b8bea,85d4e412,ee0d6389,e883f9db,297f01c,d0695c13,abe2b682,94c10af1,5e2280d7,3f7c0832,d9ae62fd,6a884973,5bb66ebb,e68a38d3,8a95258a,97556181)\n,S(eef84395,aa4b6e04,ddc56123,cd5eb31d,69f1255,1c216d25,5057a2d4,388e08ff,45098aa4,34e14364,40d8b26c,73179c48,87797e6d,59963928,b1d6b61,d62d2376)\n,S(66fe5c7d,56e38e48,6134371e,76ef427,b4652daf,6e60cde7,39aa1165,c90d7654,2d72926b,b6edc93b,7e40ad43,3cbb6c4d,96d4c384,966ca582,a108a84d,c11a2fba)\n,S(5135f9cc,1818caec,cc55a304,aa983c98,82f9e1c2,939f27af,dc2c6df2,c08ea2ed,5a526dd2,7dfe1750,4f8baf4e,115ae1b4,2619b5e1,47986954,27ca3621,e03f22d6)\n,S(1a37c089,af7f4a9c,2ffa2bc,c22a3e29,82e3318a,ce1ae29c,3fdf9b62,3e6487ca,d389c033,8522230b,a96b33d2,373672cf,509b0312,35d2ec18,3c955ff0,3d2464a5)\n,S(49f7a5ff,15daaf40,913c68df,c9016f95,ed1edb22,22fb1576,e4a11848,47a248a0,f9b55b01,3d637bc9,e9794246,fa6bbef4,d5ebec82,1a5d7f61,1a18c7a7,b9abd8fd)\n,S(8247845e,5d9ef839,207f0f1e,26eb0470,3b87f835,ac3af130,253aaf88,1e641ed7,577d790c,1a23984e,7f1b1947,4cb42ad7,b4409c8f,23f391de,3e2440a9,e53c5f1e)\n,S(8295984e,cd160241,ace92ef6,10853e8e,57b7823e,25eea4fb,8f118593,d90e0749,635321a6,6798d5f7,39a450e7,67b1c38a,2c5dac96,780c83c1,4c38dbc8,c0ac8353)\n,S(d4c32bf6,d8fcf5ff,be0ba34e,770c68b5,fb5db412,b1341537,7b2e9c80,3dd75461,b3c73602,e23845b3,2c44272b,4eda70b9,a1a71e51,66d13353,74153f66,4485f93d)\n,S(1a08e32d,4a968e6,a44703af,6b526a32,3babe7ca,6882cd84,9fd3f769,6cc897ff,46ed98bd,b77bed4a,25c2e19b,e2b14a8d,3fdc8209,70344b39,9a6b2a8e,afad4141)\n,S(8559be0e,96723f04,4b05965,da8c9777,6b40e1ee,ce49de82,e7cfdc34,354f4af7,63e24b88,854e20d1,2c3f049b,2dd0906a,ba4db6de,aba42dc0,5af03dd4,91333ef6)\n,S(e0e0b223,fc7a478a,849c0ee3,f2ef2a6,edd0f08d,e8ccc8c5,5e28bdc6,5e211e8,ca38832c,3aaffac1,206d38e1,25b8847a,6609a5e,d1288d1a,511d6037,9fca60fc)\n,S(a237be98,2d8ed250,75801eaa,5917582c,265c3424,5679b4e2,34539ce,68e40a19,f4cd227,976a3780,454d5de4,7026d668,dc1bfc32,9003c87c,f48982a5,5a231318)\n,S(28a84882,1eb08d07,f03fe770,5a16f2bc,5edbd0d6,b4367ef2,474f9b60,1205ccf2,9067d3e9,e7d77628,ba0526b1,71d23da9,162551bd,f00fa301,eecb5fc3,f856a17c)\n,S(142fe8d5,42bd6b5d,325b8fdc,3820de5b,cc83e2ee,13d59d16,f4c69adc,98c1d5e8,2973f278,32533b9,559d1421,38d7fa60,1b66d106,1bf9c453,9c8310a1,dc75b150)\n,S(5b3b611c,5d20649d,19bb00a,11b4b928,8f3d5ffb,700fb6b9,9c97b012,98ad87d2,849059c8,cde0e12,cdfa7621,9ed70bb4,192ead87,5a22c58f,8ebcb58a,f2519182)\n,S(248a2249,5d4905a3,f61f74c3,5f35f6f5,2edbdc63,9454cf6b,192c7ce,50beb8af,b5a6f3ff,b707c108,1cd97b24,38867a1d,61eaf73e,9b89b5c3,b1136ac7,bbfd4c83)\n,S(8a474a2a,292b50e9,d4d1fa99,a229023e,31ea2093,2d3a5d2,875384d3,dbff075c,7745285c,7d5341b1,e5c39289,16cf8fd2,45b5f045,d30d5dc8,721d6b65,ef804dd9)\n,S(3fa01255,7fc042ea,67cbe4ea,86637313,826d10d2,48d5bb22,8ca8d113,5015ffec,10b9d325,f59b4b8e,ecbdca5a,58c48e18,162d436c,a3228b25,e3f75f27,26a937b3)\n,S(b77b5c0e,7b94f1a4,dd88f007,1af049b3,6b778d5f,c8a828c0,46ac2195,9fd65648,31246bc0,6722bbea,8c9d5722,26edd609,e2b65d2e,9df6c21a,d54cb157,faaeccc5)\n,S(2635f482,67e82b97,6c2ccad7,89bd4bb4,5671846e,d5d1d8e0,8f2c41ff,8535b44a,7edc804e,956091fb,667f9e4d,47b7353d,d2ce39c,b53234d,afb6d5a7,a72b8def)\n,S(2306b52d,ae0952c9,c6b6f39b,6d1ea36b,ed0012da,18d77238,4a4e0866,361b474d,438250b8,8d7b8f6b,9a63688b,b2cefcf4,bd767472,bcd21221,582b56cf,325486c0)\n,S(caa866b8,dde8284,8f586f9e,ed5a1d1f,aa5604ee,a8c0016e,248d897b,a9f74b4c,2818f140,349f78c4,572834ce,b805a424,e33746a7,d58fb8f2,9954a55f,dc09c341)\n,S(818def5a,a0793d50,5f5e9cc4,29c01ed3,fb5e577b,b25277cb,b74c70fe,88bb1641,da9eee80,f7621031,80e2d54d,796367d1,f48ea2b4,93a1445f,bddb3ee2,ee4f276d)\n,S(2c62cdfa,568d412f,cd764ed0,1bcac5bb,c36e11c3,5a295bf0,8b12df92,447bf736,e8b8e025,58117062,705ef985,9aba6418,ee73eabf,195325a8,f82c051a,3ec31979)\n,S(28ab54d9,9db06e8c,d4a2f7cd,517d049,4e477f1a,b6eb3416,59bce807,e1f04adb,993b5319,a5cb9602,be656276,bf3e7d84,4fb00304,1ecbfb08,72aa29e6,7494541c)\n,S(493e7c16,2254a40c,54b4eca4,223a8241,d6c2abf5,f15ebbb6,3ea4814c,512b6061,56387f7b,588d9d4c,fee36b59,7ae8f21e,5fcf817b,f097ec89,7def80ba,3ceed628)\n,S(672e11be,e7439165,4fe118dd,a2c5d389,8922a68e,222c9bce,902d2062,b9c51d4f,3555134a,2382a9d,b4bcfbca,45e9d62b,db6bbfa,bfce7c5f,c5102dc3,23dc36e1)\n,S(8f8d0f6e,e3b86889,8de86c06,b59f8e5c,27524b2c,2959e701,38b2c3,8eda550a,e7def281,9e27abc5,9940fed6,687bcb3b,f364296c,26bf1fd4,5d417103,49212f34)\n,S(da8c5783,4a11f0a5,797cf4c7,9179f30b,118f2802,1205d495,e8213fb5,78b293e3,6ecfe35c,6f663975,86bb1c3,ab5dc518,7c7a0ce1,b6338d28,a2c01df3,89c35f91)\n,S(4953e0f5,3b1965ff,3efec2d6,fa99ba0c,fbce09b3,83e20ef4,2657faa1,49681955,c210c78d,9d1635b2,3e468324,7980766,3c28fa97,18d0ca39,fc09b541,975541c6)\n,S(5491fdaf,48a0e1e1,be21f7fd,be910bd6,5cd3e0c8,16da38db,6c742042,3775f293,65273688,5d1c5338,a3be9b29,9b51f4f3,9c82de96,318643e,3d34ecd2,fc7ffae7)\n,S(b9c4afa8,42363b9,fb583885,8f17d1b6,b0a8529,43c907f0,af3ec9b5,abc168d1,ebd3106b,1b75ebed,5d013aa1,eca7d8d5,e24d511b,6d4178e,514fe156,4b550d9a)\n,S(918da36c,444847a1,b5f9826d,eab809d5,d6802e73,3abca386,24237683,92d2bd62,6e6237af,d7cc87e6,15e14113,ab38989e,889d5e6e,6166eeca,abf1ddc,8a53e218)\n,S(777d2994,da1f514a,800240e,59b743cc,748eb42f,4572ac93,a2e42e37,1d3392a,6193d7,e9eb3195,2cab96f4,14e1d24f,9d92505a,9d21f864,5e6dd3a3,8a9680c6)\n,S(108e6ea0,9a08c5c5,e27b8b3e,af24ef55,3988c650,34ef954c,4d17f232,5723bf3d,1a8b974b,86db6bb4,7c314ebf,f811937a,b8a0dd76,e824dbe2,88fde1bf,fc13b2eb)\n,S(36d9dadb,65a54d49,1198a486,8deae1fd,3c2dcef4,4a682839,b5dac54a,456bf185,25e84356,d93b5d86,25eec306,565bef19,1edd9bf8,347dcd8d,785024b,2147bbf7)\n,S(3e0ebab1,43ece776,729d8a9e,302726ce,aab89654,23292fe3,ab2e71d3,66531fa7,6e7b2608,556d6236,8948f32b,2fb04b34,8e38eae1,3d9abd5c,691383d9,958d41cd)\n,S(923dc76a,f315f31a,a1de9521,a13ee9ab,ab08ab42,157f483,2babdb5c,18fa3728,7a8f17b6,7439857b,3141bfca,6d89e649,7facf685,6331003e,f6bee07c,ed3ae47)\n,S(f87fff32,2dfeae3,4ce9cb81,51ce2e17,6bee02a9,37baac6d,e85c4ea0,3d6a6618,74e49037,aa726e0a,357ace25,603cdbfe,7c14a4cc,2e1e4e13,c7176121,585a03e0)\n,S(1388065d,dd7f69a0,11dec106,b539f7e9,e00b5aff,7568820,e33f9c1,18881ed,acab1d8f,140661dd,422f72a5,5ab4242c,65d1a932,23fe732c,92b32317,4d13408e)\n,S(e5476b1e,a99b6a08,83731542,7a3751b8,3d685b34,acc5201e,59e9b623,ac4b6941,57d5b2f1,c4dd795a,323c794c,aa8fa754,bc86dd67,3cc8577b,b418b2e9,5f3b4e21)\n,S(f938ff60,f1e8ebea,4c229d89,4c98418e,90c14981,4ed7909c,3dd47cb0,15cd1f15,d7172212,1a0cc646,a0576e29,372bfbd6,37fe2c5,b6ed6821,4da50318,eebb13e1)\n,S(b31bd410,7c4a5108,1795544d,5854f9bd,180b494f,a08878ad,8ad5a3bd,98a30aa3,94261097,6bd58962,5e941aff,a007eab3,d33828f0,e12b31c1,8fb6f5c0,50519e82)\n,S(b3ed87ba,83210d01,1a2df141,b9a6c6d3,33abd692,55da3af7,b4447d03,f4c1cb2f,949dd379,29c757e1,a970273c,b6341e66,b90be71b,347e747a,be0914aa,4dd632b3)\n,S(60e6c240,1ea790d8,4bb95e78,731bca08,89a57c0e,38b87f46,668ee16d,31221e17,f247bf35,c722098f,2a5c800a,571eaf0,36738704,4050d98c,c03bd146,ca9465c2)\n,S(2ae806b0,4cc8d047,e7dd8d37,713cd71,eaf3e16a,f74c3b87,994afaf1,c3750a80,a8d978ac,b29771b5,1a87fafe,605ca0ee,6facf6a2,41aa135a,e38de4eb,b2e2e954)\n,S(9af178a4,bbba2d29,e7a0bb15,51f6f3a9,d2384386,3779f439,58a424c2,29bb5c47,c1031fba,a0238857,a487ac85,72fbb3d1,4052a4ba,adcdf259,78101a21,ae79abd3)\n,S(9dd6a721,e9cb27af,2e7da097,c9e8a250,fd78a531,330ecb2c,3a116d99,6008f523,e6837b7d,647309c9,4712adb1,4bc65787,fc4e975d,f4e82173,57dc9d3f,e7f36080)\n,S(cf5f16be,d7a1a1e5,3b3e3f1d,e44efbb7,fcb717b6,9a28bf0f,e31a1da,a5e91c52,9549ebd5,4d87207b,c63912c9,99920cf4,b0c80a0d,8a69d4b1,4852834a,c4487497)\n,S(c6794890,810954d0,782466a3,c52a0149,de577cfb,3a2001af,d45e905e,dfa64722,4a4fdf51,deb64031,bfca5fbd,5c827829,8621b625,1be69187,fcc2460d,f75ca468)\n,S(a25fffcb,bee9e0ff,1659c1ea,41406aa,b03b4920,fe1a63e4,442d5241,30599713,176b9e06,5a821189,ac3fc28a,fb72a1ba,40fab791,4de987e2,1236f244,bf41486a)\n,S(6079a722,fd5d923b,16acfafc,7248e329,128cab6a,cae9e5ec,dca49774,e0c5bf71,c09972de,99ca5a45,c4f6f1d9,10337efe,23f5292,bd5ecc45,df0f7aeb,d18c4bcc)\n,S(188cb43d,9d4078e7,18fffc42,8b16723e,f64b950f,cab7582c,8139dcb9,2b66b403,a038fa37,ec9ea240,9a2879,9556916d,fcc8c2f3,358ab14c,140f7f1a,23af5404)\n,S(e310fc40,cb575c68,f5792506,65567ec8,c445ca34,68cfd02c,d781b27e,f819bb30,31328a65,5ba312ee,5e901def,66e7b946,e0c18336,a0f1784d,df66b89e,2abe625e)\n,S(dd86485d,1c8245dd,d940bdeb,1f462cc8,f15693df,246c3c8e,52b574bf,77dea4ac,cd6bb7c2,56c9a270,4c690175,ba298a09,8963a8b4,7e743b48,33fc09c6,9966ce2)\n,S(1b7ed20c,f81567b8,6f7dc67c,ab69e197,dba77399,9b36097b,de85d02a,7019aef,f814e92a,d1cb4386,550d89b5,9a4bc378,df428d54,d314d531,be6fc35e,f0e3d1bb)\n,S(a15587b,2d528338,ed146a03,670b3f1d,9b41cd0c,a0645897,a0f719a7,b5ded284,2aefe34b,5aba1a4e,e30d225c,c4023ee7,12fc1522,ad6b452b,fe6ea727,122e925d)\n,S(57bb9f9,c99da691,98cfcf20,9a0940ce,8d19463,9e4d1054,484953e,936a5484,63d0fba8,d90226e8,2c7be5e4,1d77bf0f,700dc57b,d8d3079e,9a6a47c8,331660e4)\n,S(224295b3,7fa1b4a0,d7d7f7a1,2113b21,291f84fb,8fa4b746,bab925d5,93bd262c,d60ac40,b1e4b0da,7563eb74,c222660a,46ed388e,c4517ddc,ea2962b9,38195796)\n,S(2434eae6,a34ec53e,7c031b2,9e74354e,d6101ca0,f228055e,53b39a6b,5453b0e3,2ff5ed61,d57a04bb,138f3956,33a20e60,8b04f775,6476d0ed,6ce7a382,743ce23d)\n,S(448de592,907c1113,bdb04c64,9fb22b05,ef2e6ab6,36d0a03b,700a5871,89885ce9,d7aacffd,6ab35068,debe6dea,25b02930,63af8b10,d4592880,3d0421cc,a879eabc)\n,S(8405cf73,5aef7674,7feb92e7,1aa3ba0,defc0a1c,c1da698f,7c2a3718,6393dd76,5795d006,49cd10a0,4a661c78,3f4a8711,89c9ef2f,ba86853f,c7955258,e6c407f2)\n,S(698974c1,e5c1487d,fe9349aa,371eb86,9318accd,72c66d5,581211cd,6e08efc9,37c2238c,dc8f4bf5,1f76536c,2ab9af61,bcec872a,bb84ce15,90bc1c0f,ef84509c)\n,S(8a37857a,be3cabc6,7197781d,f315f78b,e6548c61,1b846d8d,ce2e5732,643fee05,29882f68,9154cd0,7e455e4d,9e3866d4,5e28e99b,21dde0b7,8b87698b,4cf674ed)\n,S(a871b34f,5cdd39fe,13104c96,87a8a717,25ec8cdf,fa60846,793bce03,2397eaef,84f96417,9de103c0,9f7e2dc6,86c9213c,642312de,8de6cc5d,f3ffd7a2,c387cb28)\n,S(49bcafb8,9f78a7f5,a8857905,e99e74ac,9ec66ec7,aeab8fb4,fd964ce6,8286f44a,e7db8ccb,5641ab74,a791d2ca,7bd193ea,71124a61,2716d94f,4eae407c,ed9eff6f)\n,S(d5c7d92f,2f05c9e5,8f586289,dffe8499,40d9b84b,79feb686,c3f71300,f68b6df6,a68b2a5c,219ea38e,a04b272c,e1cf42bb,6fcb2b2b,fce36043,4f1802af,1d51c08e)\n,S(2ac2fe3c,fea4cd7b,9c74a249,cb0c8ed0,6a825cbe,2826c56c,fe4a8db5,3b286696,7d90a659,b008a51e,ca2f6031,c6ca6078,505bb46c,f00a3834,a67e7804,b60f43f)\n,S(7c09acbc,62827ecf,4f63a85f,5a0eda7a,5b0069ef,b03b51d9,2f61c5aa,10a39234,e07d2539,c29128c5,685f8641,45fdc318,854b56f2,962b001,5a96c688,69624836)\n,S(e886dd56,7e1b42e7,69941ae7,13b2fad3,3bb4ff02,34a27a7f,2c496bbf,6ffbf9f0,d4b2277b,abeef80f,371c097f,df4e5de,5a4666f3,c630b010,81d1172d,c667a877)\n,S(edf65cc8,e83983,c5a178f0,ff60bb1b,8ca8a6e5,85344464,73a199d,59c2dc,a2426713,f0c5309f,84a4710a,2de1cdfb,118a4db,1070d23a,92c76244,89ab2d5e)\n,S(29c12f04,b78a6ebb,9356dbbe,5b152323,435ad7bb,a3d2d036,a746af6e,d26d17f8,8399275,bf6211aa,78ea211f,39ec451a,b3336d27,fa059935,8b7fcece,216eae4a)\n,S(d5db8b8c,280e9914,f0a034ac,3e0f9fcf,169f2046,4a618789,994f8a79,6663c3e2,41163c3a,85a0039,f5e5635a,819941f7,98f27078,aa65ecbb,eb60d577,c263412b)\n,S(990a4fa5,630eb00d,958e57ac,8bb4f7fe,10e1055a,c547d165,7000a17c,d9135f8d,f25ee025,491fa289,446a0364,68c71217,eb252414,f8fcf291,2ecb23d7,4bc9653b)\n,S(d784ecf0,1c7849dc,ec901c3b,3315cf53,4e3049ec,c68d71b7,41637b57,9e9c0935,5de98d22,cc382aed,d8c82a84,1ec6fd46,30672008,8567dde,6b2d64fb,6b4205ce)\n,S(6576cd0,58850cbb,aaf53b67,bdf3c19d,9b4d38e5,19c99338,3204cd35,6ce38193,a329993e,92d1e56e,31c1fbeb,27648fe3,d984960e,30bf3420,658f74c6,5710eaca)\n,S(957788e5,f675c0c6,4649a808,1c4549ff,20ccb177,3d26e4d8,bb94844e,bc35efce,7ea4431c,dc4bee37,d95c3948,615e17cf,1d32906,9bc10a8c,515aa0e,521d9b5b)\n,S(8af7ca80,5053b537,ec501abd,78c13ff0,da5549f3,b045096b,1452c05,e39e4a2e,25e86225,aac042e4,cfb235e6,da40543,6a436206,e9d67fb8,e1b5836a,2d7e8402)\n,S(49bf0393,e16e634e,202ff642,ad79c179,e6eb7456,637b2ba2,623937d0,e215236c,8590613f,401de0d4,1cc0ce1e,e9a13441,41e5f80c,179ac722,d603e697,a431a85d)\n,S(c82e2a25,2572863,527b6858,18c9b6dd,df3653ed,a264b5af,dc5ebd19,d4192063,3b86f800,cd87c1bd,3d70af04,47f9e939,c2717ff7,376f91c7,b2675e3e,39a6de8c)\n,S(9ce43920,2b9a8f7c,3aefc9c3,fe4d227d,42ec1355,158b2041,a3712dfd,d8eedbf3,dbbb5b05,859aedd3,faef15d5,9a939ff9,53a54bb3,dc2ee6e2,6d5a20c9,ff5b52f6)\n,S(e07009e,49de05ca,52d20221,3ecab4b8,baa707ad,96ef24a,168bdb6b,16fe6227,6a35b0bf,e752ba26,81b865b0,ade8d4eb,2583833c,a1523b2e,4178f9ce,6cbc33c9)\n,S(eb4dcdb4,7e09af61,e4694814,79612715,d588615f,f4c23fab,65015bd,821da888,63e38168,584602fa,1e06536a,d4c8115c,86305c,41040083,4a55d153,e9661b8f)\n,S(be5f8681,2bf20113,1d257015,dd29dacf,a2c65907,26078f7b,f864f339,10e49db6,d0f420e4,56174aff,5995a92d,a73fa511,43c4f1b8,c40e9f30,8f04011d,956d9da7)\n,S(3b32dc39,10e75f9d,98fa1318,edd7e8ef,db214a5c,b31d5ed7,4a61f881,355b99a8,1a12de86,19c2e9e5,9fddf756,e752e54b,6e4e0aac,572fbc42,18baf1a2,a3a18bc5)\n,S(95ac5dce,5c06e885,65d2922e,a3f386b7,dde10735,169729d0,a3c3e7a4,86e04db1,1a22cd87,ab1b1821,e3c49e85,616b7b49,680edb77,251969fd,e77b5b27,3ef39838)\n,S(6e4ed0fb,a4b0f13e,335d1b74,a5ed295e,7dad591e,a8dc5cc,d301836d,7ce708eb,9056166a,c61c4e09,ed988e6e,59cd9ab0,16a2ef99,e99c1a54,ac37f152,a34b931)\n,S(8b7c3394,208e0ee1,374925e1,7827d849,ea8d9a79,91d2d859,898eba2c,23a42e10,b6ab9237,96720bcc,910e6440,75ef3ff,2c8bebf6,2f21ad0d,3abeb2,7043d193)\n,S(fda7b47,f6690d73,884965b9,8b6f5dca,dd48ab4d,8f96edcc,8e20584b,b0f871c6,9b402435,a272cc6d,28b487e8,b54b473c,30929222,55e47560,e18b8e6b,ca926c5d)\n,S(f15da0f5,395a5a1a,ef8beb53,4c0e9aa3,6e63018b,cc91a55d,ad6106a3,3dbcb217,28cf69ea,bb3b0151,917571ac,48609723,80be252f,bcf98f6d,db6ebf76,578a8f1c)\n,S(c6e266dd,2c7817e0,c92378e6,38709a97,d9a208b8,7fa832f4,abfd881b,bcaf9253,2af100c1,fa9bb3a3,c8e95e3,5d0bef58,5ffa7adc,93232082,84291ee7,cb769626)\n,S(4bf8aa02,fdd201e,488c21a8,33925687,7f5a727a,4fdab13f,d133d08,b6e28753,58812658,ad9c4d59,a15c6bd7,9e6c622,d8fe5f05,95cbdd88,f39be9d3,cd5fc8b8)\n,S(aa985f28,6dd485a,5589fc39,da77fb95,5cda673,db61e48b,972fc129,7cd0a6d3,abb0f897,2f1163b3,29a5a92d,a1ff02e0,7c277710,10e24a04,e1e5f60d,1e4b75b2)\n,S(8174d101,ec13a1cf,4eb9f88d,88c14121,6c2fa04b,ced197c,8e1732ec,61c41c9d,c6765dc2,31b02e7f,eaf7a662,5a639b00,c6e5d94b,1a791bbb,46f6a758,8fd79aa7)\n,S(f9f64ea9,d6039297,b728fe09,85a9a3a2,92573aac,fdbe6cbb,8702f04f,6df3d876,4146c7c1,406067d0,160950f2,1172e879,188069fb,d87eef9b,1a67d2c9,9a4ca01a)\n,S(3e643a70,5a6885eb,3d34454a,2a5de925,f8067cbc,1ca92951,d8865ecc,a8f1b3b4,2deca704,5525534e,de9d54d1,d777a996,8b5e5882,7162ef11,b0fe08b7,e2fb0355)\n,S(444df411,fcc3ac07,7e95d200,d6f76d03,caae45d2,b87a882e,4c0966f3,376c63c5,b4566598,643d964a,a7cd1a4d,f2decf3d,ec520c93,ac6e32bc,64350aa5,5416cc23)\n,S(12a2f61f,58be35fe,314a7beb,1a6810a4,19cdaa6a,8424d465,bbb7a87a,646946a0,9a7bdf44,94c2cc8f,f1953946,1a69fbca,48410b31,95d79069,8dfd535d,290ba47d)\n,S(bdd72692,462573c7,3d48af94,b687bd22,511b2b7a,93f48793,3d52b2b7,e264cb9f,56e6c4e,b794fab0,bd5ac992,3f7469aa,858e6df7,dc40f4ed,955c0df7,a2123874)\n,S(e1bd5558,77c3f55d,12b4f156,ea4da9ef,c974bd29,d7d043d6,ec7fe56,a4066bdd,8dcd9b99,fbe7436a,2382bea5,6c5a32f7,789cbf1b,1c44433f,f5a95075,c3233170)\n,S(a7c68de4,781c8294,bea46609,f4a1f550,fc064eb8,b071985d,804351d2,60132ad9,a08278b6,3d9efeb5,1062b240,d45989ba,6f6bbf9b,ebfa0766,8428862b,adb42c32)\n,S(4f3a8769,b4c6e369,cbdeb90f,5137d07a,5fa0d66,3d8ca79a,56b3c70d,2a9aa855,f6c051c,5f701e15,348ed9f2,c4707584,b9d6db2c,b62bf93e,35b6486e,ea6ea169)\n,S(deaabc1c,8089ebfd,841cac66,d8a6bb58,36fd047f,cb435a8d,74463dde,f444f232,fb7cc4ba,49c26e7a,a826e654,7c8a6d64,ccd14a49,62a6d4f9,f50c293,c228e8a1)\n,S(c411af61,547b1b38,12551e1f,4ef2b32e,fd7f33ab,7cfce378,8b5b8f93,319c0695,d2bee7d7,3d50f82a,e9266d21,2fcfbb76,294ace4e,f6222ab4,797bbf88,558cb66b)\n,S(d0ff6a94,485bdda8,d0c28494,5b9dddc4,4a35f101,d0a89637,8210bdea,909ec5e7,ab3f60fd,2923a8f2,d02b7e83,d8f953c4,cb1910ff,83a92a65,e2121f22,364f620f)\n,S(a0d05cc,9555ed92,2851baea,35ad6cb1,6f2744,b3fe424,98235aa7,1f08c0f1,843b1105,237158a7,bd7e67c,a20b2705,50afe2ad,318077dc,4714c7c9,d6339948)\n,S(bea08445,eb295fba,5c83ef6,7d909978,7d599642,893fb9d0,568e5920,1e3f5d32,2a81a7ff,b3f7f453,d78bb2bb,41d12ed1,e26594d6,bd4f5cc7,908f322a,6cce10e3)\n,S(e8ebcc4c,431be689,9eb5aea6,f6ab9700,551c3098,c5acece3,e822c7de,e6f0d5f0,ef99a461,760ae4f5,8fbd511f,59a2ae79,6d65db64,eaa0d61e,97d0a3b,31fa902e)\n,S(4948606c,dd73dc44,ecf1db77,c796d8b6,806bab5,85877cd1,d9630bce,966e8fd2,3c67333f,786c8c67,841630aa,639446a8,cb8c13ed,f3db9123,bc64b925,beb95f80)\n,S(4f259b32,40d9efba,4e3e40cc,a66cd494,fb5a19a6,5b5c8a16,5c18792e,9ea778c2,fdd88087,78c26999,c4a00605,49f4ea2c,b1590f7f,4748cefb,1b68eaae,4d17446d)\n,S(f303a493,e14d7f52,f276e2b4,3e118eeb,1e7e918d,e7aa7f33,7e350fa4,7adfcc29,c49fa46d,befe53f,5f5bc49d,aa6ad265,453f7977,c5fe4163,cfa1bd4b,69141b57)\n,S(e00c4b17,f4c0800e,c1b11859,c40a560d,58b9fdfc,29df5a41,ea4b2f53,c1df595d,62441a66,c3ec4d29,d18d0d95,7b4ccd18,a72a1003,d34832fb,8c81fb75,9763b99d)\n,S(484b8486,1af6af52,a47603bd,2b754be7,ca16bef2,21581171,4cfb2301,db72ce70,36f84ff5,a0ac79a3,fe696865,2a0a6759,cf72e5c5,8c76359,d477e72c,4d32fbc7)\n,S(88be58ea,d8b51f44,a1be6a8a,7cbc149b,ca07fece,11a7adab,210467b8,4cd93f14,94c10caf,7037fbc1,71cd6cd6,a0697b19,8ebbebf4,9f00c67d,4d46ebca,92687fdc)\n,S(abf6ceaf,9fddd7ef,44a75e11,b10119b7,7372a3d4,7c163b77,384de944,47da781b,5cadb30c,6320c67a,e9dfe2f3,b9bb4ef5,41718392,81c4a59a,7960eccc,6795d290)\n,S(e8c26522,9ef665b2,67fcf10a,17c6c3cd,4e221e0d,95663deb,74f8384e,b89d173a,9a69fbad,f9b050ef,d231965b,30d91646,bec7ba26,9fcd0934,35ae11f,ca2aeeb3)\n,S(66652bd8,bf72ecb9,5e670a24,e8683155,e031f3ea,91fff58d,f60fa4ff,d9c6c23e,4844ec08,3f182b73,22c2fbb6,6f6630a6,5fa6901,52dcfb3b,4b65a3a9,30be994e)\n,S(207880c2,d8421040,dc8202c4,45bf6d58,75cac841,532aaf0b,adf252dd,4c2c0964,2b1819d7,3eb24de1,ae4ef316,7c92a7b1,a562d93,80fdc54,e916d1f0,c1860cfd)\n,S(46b9bde4,53d0692e,ec933485,ed0dff68,7e8f262c,7d9270cc,763fd959,2013f581,58af9be6,3ae599c0,f499b0d6,3085b7d5,394cc786,9f2fe225,6ecabd2c,a14f9bf7)\n,S(5d9b2574,dbebe5d0,9756e2f,29af3aa,a2fa2555,d629a78b,82b1d679,75ea3e11,ed9f40ac,aa6ac68f,cee3dd50,7629758f,f3a64190,1658f0f0,2b87b645,ee59263)\n,S(ecb5ad82,8b986425,9a76a649,1774338b,dc598fd7,77cfec52,d086c172,6e590e4f,2b78936,73c6d87e,a954b5bf,52f8212f,65d33ea7,ccc4b4e3,1d98df2,c9887886)\n,S(b32b64c1,5e711b8a,1d174725,de55c,ddd62e99,fc90e96e,8f3ca532,3924ea67,af5d61d3,6dceadf2,34a7a94d,e7e4be1a,4d81b84d,e0fe16a5,403b0c24,a6ac2083)\n,S(5137f71b,71582334,a6d57aa1,5cf6ab3c,8b7f6842,a800b4ab,1c308fc5,820cd364,f7ea5fec,c9b17dab,c6a248d,49757711,e4a3b38,95658381,efa652a4,4df1eab4)\n,S(b9bb0e1a,390b5889,3e113a89,801c3f5c,25f94e65,63161539,e7c56297,ce9ea866,d8db3c90,3c3d35fb,ae4e14ec,e81e4e31,247f60a8,2539880e,6b66951f,8324a11)\n,S(3f091967,6da40ec2,4691c21,1c42f47b,88cc1192,ec1827d3,17beb468,924fe9af,f1b44826,3e882c1f,18ae6a81,238d0724,ba4c04bd,d3fcd395,8775df5c,16bb8de9)\n,S(b5fa25f1,dad4600e,8d55e7af,c70a1b2c,3767da47,d625ced8,d55ac88,d893b4fe,7575f661,f2ba296c,7ed3a190,8a49d099,83e49503,ba17a70e,1d6939b2,8ad22347)\n,S(a0371ce2,dc6a025b,78db797e,90373069,e4ca06ea,6b1cc018,3d4c6f7d,680d17b0,92b5a8a8,9a5005ce,e851c521,4599b774,24f0ff74,5c4af6bc,6937c432,e859919d)\n,S(5aae6e90,a49107,78863967,d7d42020,cd0a9828,da25ac8c,7b19942a,1ee2f210,ed9cc20,82a54f3f,fd7218f7,b79ec399,7e82fdc4,cd783957,5760e4f7,b7ee8fd7)\n,S(54e7daec,f4a9b6f4,b100f964,850deb65,64efddb2,e6ce7b05,3fed2a28,1a0841a0,d9ada32a,54773a81,d5a857ad,8b34d96,70d46785,70943dae,cc83deca,97c9c63d)\n,S(e9b29910,d8bcef46,b48d8be0,c7649b84,383ed752,391ecd7a,bdb454c8,8fbf44e8,eb268094,f669e91f,a5173965,50e4c40b,d7a26792,9a8df3de,b84c703c,261d6b69)\n,S(43f95222,f254a513,1977c589,577d1d9d,3f537a1c,9fe14ef6,384e1779,da546a97,d7d3c653,43345c47,f245b305,b662a2df,eef80b3,97b3f5e1,4b0eceb5,71cb18cc)\n,S(9fb45fd5,3999fb92,830bc090,216ae485,6723385c,7224b1d,cc91294b,a6c3b103,5b47081b,dbfd82d3,90d7bf7f,39a494bb,6731b506,b827213a,277f7ac9,febdf451)\n,S(dd92282b,835529cd,3295919b,2eb466f5,9ca840e,20ad87f2,3cbc824b,b71dcce9,ec45f6e7,bc59d668,b1ef4a29,d1e23bcd,f3796268,3b58fb7a,d58a9e1c,5f726371)\n,S(7482f012,9fbdd7,bf99def4,f3de23c5,fe29036f,c1ad5c38,686c05da,dc16348d,a43c4a0d,5497f6f0,bf2b2a20,b65bad11,73fc0dba,c24e65f8,db1663a6,b840abd1)\n,S(fa4cfd95,97fd6278,1dd2f587,a5b03195,537fca30,f7a9a377,a69a6869,70ebd9a5,4568b6c9,9ddbf778,bd31d269,be18a8fd,e2a35031,a30505c,1b8ebe1d,c7ae823a)\n,S(51e0d3da,e7763e8e,81905e1b,4f1ffebe,2f1078d3,27944c53,d9b7d110,3fa60b9e,118da0c4,ab572fac,cf9f20b9,2108ed0,1da673a5,2395f3f7,bfa2ff2a,36da6740)\n,S(7d8e567c,c0552335,38c3b857,289e96f4,502fc674,f40ebf86,c482a668,dbc9530,76c3fc46,c6446a,4b9fe552,ba8b2614,7484581c,585c8ad7,600c2ea6,8eb37571)\n,S(d924c6d3,b400196f,dd1f216f,dfa18c79,1c316d67,9ef4c0ed,8d12b94a,cd1dfb1f,ec33cee,881c04b8,b11eb3f2,88dd9b92,90b9d119,26c692e5,9d82aa80,4febcea8)\n,S(8dcb330b,6f629c8,d18d28b9,7a99d82b,3965cb1a,bf953b8f,33074457,5e93c0db,3d8a2d19,8323902d,1b129b57,313f81a8,b58b7340,f6f7c97a,b6d74f37,a46857a3)\n,S(dd1c4a3b,94b06378,8cf86797,ddaeb671,57910f1d,35a32e80,d3f749f6,bea5d2b5,efbec0c7,5a69583d,643e5be9,ab78cb78,3d2afebc,73d7c64c,869bede,b3230777)\n,S(2b03de34,1dfad7f7,395f6ec4,84d292c1,ec0275f2,bc762dab,7658a885,37f5e772,3235e8fb,3818582c,55bd48bb,49f78e5e,803d7d1,ae49bbdf,97166a76,c3c0d0e3)\n,S(3a795b0f,ba145bc9,7e7a80ef,a6b77132,677f06bd,4c3e7f39,47978c83,1428dde2,f4125b9d,df038a26,37cbc9e1,eed40aec,81af644e,a3f1352b,526df579,44914691)\n,S(ecf813b,a133d6cb,9c46c081,b0a851db,121f5c21,788d1e59,ef8c0588,684fcbbf,69e0daf2,a7b7b473,7f2becd0,789529c2,597e3915,ebe12093,ecd7738,13e53560)\n,S(637c4982,c14163e4,1037191d,d4e09d3f,74383245,5368cc33,57669186,d6217d5a,da5a2ab8,fd83d2e3,25baaa5c,a378318,f6fb3747,5ac64b77,a74da573,deecb410)\n,S(19fe73a2,d8875b57,dcff5fac,20530da0,54255658,1251f7c6,b198b3e3,71b90e87,3b03ac18,2ccc2518,c367a77a,1fe5e8b9,a3264681,28fc1ad3,5a39f7a0,d8151ca0)\n,S(16ea62a,d4cdc00,9d151b3,b6680b0,c68b4cbd,f144c234,71d55b7f,3bb7ebb2,8cac4a1c,53672e59,338612a8,995980c1,35f02060,2e3b9f6a,8fffce9d,e53fa629)\n,S(6b9d68b5,454c6d21,678e5413,279f9a28,e1eed485,fbf512e8,49f35394,22a40970,b63f5044,98ebe37d,af9e6969,da888eb7,907f8565,4b05d472,fa4b1b27,ae365482)\n,S(1fa20c8c,8f0812c,2e7dc948,afb7ec92,32c3c27d,23165d05,868dd127,b5ed3e6,c5257f4d,82133642,7df68606,2c229fea,6cd16857,280a60cf,ed84deb6,29838076)\n,S(73a83c92,7daeb4de,1cf1df6b,31d8f536,af15bb38,be506263,e8e8a6a1,bf6acc86,a08acbe4,cd6c30b,82b4e24d,e8c9b891,26a21dab,e4df40ab,2fb7ad6a,82eb8adc)\n,S(3a995664,924e2dee,ca278cf9,3ce265e2,85ba90ce,fd2a55a4,8e1761ee,7588bdbe,f3221adc,99eb33d3,52465d93,91caf18e,d011a1bd,3b7cf39,dd48d45c,44cbbb0e)\n,S(7c65ee19,b032f5cc,1d45cd9b,9c160e86,5ca516fa,b4f88596,5e07f269,3d429c26,47c7faf9,e3df277,d31076ae,4be2224d,8cc54a5e,3743e287,ff9572a4,23704c5)\n,S(c010694c,6750dbbd,bd953118,dccb8d03,2f05e6d9,65db8fb0,3dc00b22,e4d397dc,3b4914c6,dd6c5441,59dfde10,a196f132,5a5e6101,52d41be2,39583b80,6c8e730c)\n,S(e255848e,d28d8b6d,6f95a12b,92136131,a33dcb2c,a723fae7,5e317cf6,62519d57,62f7d5aa,1757dad7,98207dcd,18183b24,377c9ac0,1e106fe4,d36d9264,3fcfb7b6)\n,S(f31418e5,73232992,3a878dfb,f1de30d1,a9669da7,76effc45,bd1a56d0,2c236ed9,e62ab884,dce0d946,55e34c8a,630b5aef,16a1eff6,1f889552,af7234b8,ae56b84c)\n,S(9adb945,b876313b,ac9c290d,47c1e6aa,1f3f3c9a,e8c67770,61512c2b,bd703181,b21fc142,b4632616,4820b82b,edddf2b2,51531d0e,df0f0f86,50f74d1e,9f0908fd)\n,S(c4682b2b,9d4a63a1,855132e9,b35b390b,ca04b846,b83bf36,1726c3c5,808da322,f25a906a,7100ba32,1b659762,23e36f04,14e9075a,835ce5a2,6eeb5d03,d35f6972)\n,S(ebb0fd6d,60f49c47,8167c405,597c765e,559159f3,ae04003d,a99a1066,ea80d63a,eb37d160,667ac862,1da2ffcf,28b431c8,c4202f67,706f4350,afdc868e,6aa0b0f7)\n,S(78f12d20,70d8bcb4,267cbb,bff637f1,65ffb098,95f5734e,3551bcbc,9a5597a,42976ab3,36621756,1bb574d2,c87d99cb,7419a3e3,39973740,7de17090,2bbb78f8)\n,S(3dffc4a,f6214b63,9839fbc2,b949621a,35ae41bb,e7679eee,5798afbe,85919f69,58174b6b,1b4021ae,22dd15a4,29d97502,a13480fe,902860e9,36fead8,57f2c456)\n,S(410c9393,a4ed42ca,2115198f,4db76eb8,bd16bf0d,324528bf,55d5d745,b55a15cc,404ff4b1,df71b89b,c14c2cf9,bca25176,83c2981a,731fc3d7,59faa0a,5ed58306)\n,S(6b4d5156,87d6b079,3df36632,6fe6977c,b93e6569,66797196,6c16c495,be4e3649,647a4894,bbac207f,5d2a0315,2db1760c,1a25560a,95511c81,5d6c11a5,e969f4e3)\n,S(58ffad7a,e87d5986,f0bccfd8,5005d9c1,6f0d8724,6be4dfd9,4a771c5b,a5f34247,ad8b7ad8,f9ab15fa,f50d6f93,ec8629c3,b33fba6b,ee36ace5,e505cf00,f0069817)\n,S(e6d3e41d,1835fade,af27738,23e883b4,adb95669,72892c72,b310eacf,a6a757fd,a136c88c,b580ece7,cef03e42,5dbdb8ef,d6395cab,b427ae61,45a0ef0,21359c15)\n,S(fc47c62b,43aaa030,ac104479,21bc1026,3b561b42,a2d32a5,573ae947,d953b35,5d318d1d,65fc7806,732b5810,40a1f511,62723626,b393b29,50230600,246224f0)\n,S(ceae2867,cbcb37bb,8e78da9,3553866,d0a1b8a2,933cb1ca,36bacb7c,6fdb251b,48bf2c7e,c163aa95,79417b37,343727b7,956cc629,3a188c16,d4c2d1dd,abb3dfd)\n,S(abb12378,c84735b5,c23408d8,2516d887,9195fb74,c8972d78,daa8243e,1befeab0,5a0bf64b,da5a465,d9d0be91,3c8a56d9,ce901c36,67041a02,abb591b3,3f66698e)\n,S(d7781e39,8330c7c9,2185302b,e116316,1a576ce9,43a4824f,274ea700,3159eeaf,6341a432,4e07c5c7,3ee7398d,d1be3d7d,261aed99,96f6f310,fbb464af,d06651a)\n,S(a6918dcd,46ec2045,72d71646,d2a21df1,6f3ad133,dfd41a6d,be5b7684,7e4c760c,c0e51aba,378d498d,9a70e4b5,3521397c,1d6c7cfb,2f6634e5,1f056e7d,932fa9c)\n,S(413a4ee4,fbb5de60,392b340a,65fd9706,7785e2e0,248d2770,6ef044ca,83d1a204,a0362506,c18a8f34,3bebc668,d1b08fd1,6595a674,51db27c3,43af172f,8a3dd197)\n,S(e1a7bc24,de8b0920,f6c4aa08,2fbd1126,87fd8766,237311a8,9681581c,5e04001c,3e3ba9fd,d0a2873d,149aeea2,61a55c65,3a3d90b1,efa8e49b,29bab100,1a6bed16)\n,S(ff9292a0,a147ccc4,b5ae077f,8a337e05,ab1dde9b,1795942d,8a9a0fc3,dd333a75,e50f027c,5f7a3463,7654b412,25ad5dfe,b555ea2b,8305c7a4,3b6f5b78,7a23a166)\n,S(eae56623,437c9dd3,9dc7a36b,45c2d3,afe849c6,1980140d,900039d4,4ccb9c0c,f1b8c9e9,92847436,dcab5a9b,22fe7e78,55e62e40,372d77be,39f68974,dd32e043)\n,S(7dd20cbe,3467a3df,e1eda0f3,48c39e5,7f9c6004,bcc89227,3d002cb5,54bd5282,ec4d2f23,f035d2d5,4cf4c3f8,31772a46,ee922582,8ddfd4c6,4eb6a689,7c1485d0)\n,S(359811cc,5acf1291,547b8870,33bda3c3,e4e245eb,db0dbfc7,3a02da3f,12a877eb,ed2f5087,8b97a3de,6ff916f,511c3a27,7702d1be,2b683a59,bb6acd98,e908a792)\n,S(fb33e89c,f2bcca4e,4ead57ea,1a24d1b,5a6c76ca,bc605a2,c031102e,49a71c24,c75e02f5,ca602705,7ab5b958,42a9272f,d7fca940,c26e980e,192861d,2f1c9f45)\n,S(a1cd33e,5eed74a0,1534f836,b05a5129,b7b2970e,f293b606,9d1ebb56,e5f687aa,f90d1ab9,ccfc345,3b2b60cc,1e4380e9,bdefc37a,896a1abc,c9978d08,1ec4a6b0)\n,S(461696b9,3643b7a,bfb383cf,ced8ac92,5d9f169e,1db30999,b8553504,c4213614,674f5c77,5f300fa0,c8f40a85,9aebffd3,ee91c4ce,695998d6,de0d59a,3033bc72)\n,S(6c6aaa22,1b589f6b,ccc885ae,93f7e8aa,1fd5cdf2,27471727,f390d5bd,e14ab025,a77c5e03,40e1b90d,1ad64483,fb50fa76,aeb84417,88ca415c,9f8d2cbb,aa077538)\n,S(c918d391,927f3310,d032c7ee,6e729e6d,792eff1a,72acc268,3874fcd7,4e61c38b,58fd746c,346048f8,eda1bed0,e5b6cb58,fce24a72,6e27f965,74243c80,780dfb5b)\n,S(48679e16,1ca0a3f5,e4ac2654,213c494d,9240c3f0,33fbe2c2,142ec589,6dea5918,556f93fe,300cafe3,e93a2966,767840e3,b2a19fe7,9cf204a9,a30d1f1e,3e1d1a41)\n,S(c68c05a9,e46b6440,a72d6eed,eaac085a,5e945659,ac46a584,69968a30,c6e7b858,b8b4b5dc,35d4ff80,be3d64a1,d036a117,c768746a,4d2bf2b6,1b126460,15de450d)\n,S(d133ef10,6358489f,8f976dc4,b6c54699,21e3dfe3,6f326dc9,f0538757,9d444e6a,2c66abc4,db690d2c,272b0f57,afd66a6e,327ec3eb,e32b45be,cbf3c502,baf968cb)\n,S(53544f59,8d759dea,b10766dc,48a7e2da,61ca0a60,a201d193,92dad05b,3df976ae,449a205e,61cb7aef,204e3f0,3a199ad7,993d711,537e17e8,79a42bfe,2869cd47)\n,S(3108a074,fda5133,39e26385,14b6b7c0,9254c65d,ee374a62,2fe34acb,83b8b331,42edc90d,54263fea,8b1a473d,ac2f2244,d6fc05d1,f59e115b,5d930132,268b6243)\n,S(1666c40d,52c1c04,d9e95099,aeb55861,2ee58ac0,6b22f962,154cd8ca,7cb4b23c,5065bb41,ae046638,aab55923,e0752954,abafc247,d201e84f,b6c444b1,93a82fb9)\n,S(c96d07eb,d3eee6a8,f001290d,f76b2d82,ed80fa90,bbd5ead5,3a572457,ee47722e,d3d69c04,447fb7e9,a3416af1,798b749d,13ba06e4,78a432c8,d00dc2cc,7e20baf3)\n,S(a9ffc39,b11b5b05,78769a9e,8ce7542c,647fa7bd,7b2c3479,fce84d91,1d81b49d,bec21248,82e928f7,e98894dc,25840712,80a64449,38e53747,375d2122,68bcbee7)\n,S(52ca128c,cd4c9380,8e55d3f5,29320fd3,e825787f,1a600f27,37fc5fbb,f7af0632,846e8a80,95a98cb7,b4ebab01,4d9dbfb9,37ffa493,83676ec3,70f42cde,3135f7c4)\n,S(ff92aac1,77fd9927,7b8abc41,e49f7c94,698525,2329b9ae,8e0fa34e,a9407c20,af0d8cdd,5aaf5273,ebbbf2a9,b7230373,dafd9a93,42a47331,a3379f45,8ffdcfb5)\n,S(a692a73e,d3c10a3c,38163c97,314d02fa,5fb653b1,d729ff09,a541d01b,27991e0c,722f55a,3e5bd3e8,d863d00,6b82415a,aa05c949,9a537809,cff9be69,e468b905)\n,S(d9e59c3f,7a629a93,e32fc4cd,2c98d480,6b813ba6,315ce4e2,e2fc7fed,4120aefd,24ce2594,23073119,4f5bf658,909a47fd,3234be39,13aa8d30,eb08e14f,af0214bb)\n,S(74e5270f,7771b109,64991ef7,9abcf05b,4dde8d5a,605ab587,14b8e534,4a0f6ff,2ad861a3,a4a83f09,687a285f,1356b1e3,71ced066,69154887,14bb0461,b3b1670f)\n,S(b9169230,1c43f7e7,61a85615,7957c3a2,744668a4,8587ff58,7a201f59,31d4420c,bd36065b,c1268280,4cd818e0,c6515a5b,659ea423,f5b23e5b,ebe1f74e,5819536f)\n,S(37faf253,864568da,972d7211,505b7fb2,cd01fdc9,5953bcd8,79239d90,364d51ee,b69ae2ce,749db3e7,e6aea736,a3bc961,d8c12523,6f7be823,65749ead,3bc15f85)\n,S(e194114c,4a1c138b,34882477,f0dcd065,1c379f98,c198614b,43b087bb,a20cf8d2,7a3afb4b,b90ae22e,3b182cf0,6514a998,889f2ad3,d71d4d67,89e3758a,e898a93b)\n,S(2ce2db01,d3fb451,7388e4b3,c81588d1,1c8b13ef,917333c,ca054379,fa17ddaa,9232da9d,af0e76a9,85e1529a,ed1a5568,74285cb3,8010c922,e2c30d77,367bbbc0)\n,S(c292ec48,4bdb7045,3dce2e82,1fea7688,bd66c6e,59635f49,98618f9f,3d6f051f,210a74f0,6b81e69c,4d0af49b,fd153247,12b77736,126f4887,2b119ec8,97b57d6d)\n,S(15bcc9c0,97618aef,697b423c,cd83ad3e,933db83,d77b42ad,3e132036,a5acfeee,e9fc7ef1,1bb996fd,bfb3c490,14912ca1,a1bb98a9,e9611c,1a83a806,b88a7a33)\n,S(46119caf,50f13bd7,97be45fe,55f2d298,848639c6,99d5b113,fd24cb24,6e1e7785,6a203f91,f4c56eb9,7762cf8f,9ef932b4,ba301501,5aeb1215,b1327a93,842ea3b)\n,S(f3a17794,3e4df182,a9549a3d,2da1f9fd,cf141094,5e6b3a64,9d9df885,b6f9ecf4,b34eb7cc,5e82ad39,fc2b6619,859f8328,444a1dff,c82ee115,c80cec10,6ecf7e8f)\n,S(cef90a74,84a7f468,db9cbd45,f5b9a0c5,fa98bdfa,50297d67,536075c6,b7913fe4,d090eead,2a43fbc2,86702946,52507875,fb79a555,e5c55737,30fa40a2,6a301815)\n,S(21d8a214,987aa938,ec4b88b2,4bfa5661,26c528b6,b9060b06,833c6ed2,a35702ce,c354340d,5b65a23b,c628167c,8a2830,f736dfe9,a501fc8e,94b66f26,d84579e4)\n,S(6b18ff27,9049be4a,62a04f6c,f82dbd24,e19196fa,46e0761d,5d139518,3a1ca53e,ef806f0c,52c01367,8f81e9b2,6698fa32,6343f0d7,2522f8d8,6cacfdb2,c5ffa3b7)\n,S(7d8ef4f2,452cc04,d5332afb,ea3e673c,bab07c36,c081a0ee,850ae31d,cb466e6f,32461667,55a2ceef,273367d0,df10f6c9,d224da47,f19117bc,137a6244,2cfa0c0d)\n,S(c7de1821,55d15649,f5bb6327,65ac74a2,3413560,b1d31afd,6994b488,20d12cab,d9965856,c5fb2c0f,c93b8659,5c3240d8,7fbe0136,11d7e844,48252ce7,96eaa23a)\n,S(4cecb33a,915e2c3b,189eb6ee,45fa4eb3,eddeff09,729945c6,f893bd,4381b294,cf17f112,b5e61cb8,44625035,7b700cd7,3534d6e1,3310b6ff,d1bbbd8e,1ea3aeb1)\n,S(826cf464,bfce606b,b4c3ab5d,4cf00fe4,1c9bc72b,285c8c10,204aa658,66255749,6ba3b431,527d285b,5156fabf,b150aa2f,6d7ca564,b18011cb,b878e235,7b6849c4)\n,S(c812dac6,f497d245,5192ba92,2d6fc10d,de51d608,d82e828e,b2187e7,648f8f62,d02e8c7,73630680,8126ee1a,efaf53fc,2be94dd8,7773e8f6,1ba6b4ab,b08b317e)\n,S(5269550e,bd967f47,e45eaa8b,c9f14ebb,aa45926b,6e38cd1e,3c6d5d3f,e0ff8851,a1597d20,26e3eced,443422ff,cd1b3fd1,b45963d0,3086a95a,38b8661f,99a7455b)\n,S(7fcfcb29,80e652cf,bc42721f,cdc40ba8,c7c2ae6d,54a51e9b,af1afee7,e84d7676,abf72d90,4a408e34,ec6bcbaa,ac8f19d6,a4d044f5,66a9cce9,f95debf8,882cfcdd)\n,S(85f01aa0,4597e104,848e18a2,132a6a07,3d5f25eb,8baa857c,79dc4b6,64a9f451,f7463ceb,8a058187,7bbb71ab,35bcf456,5398cec1,cb4e0132,4b4ec47,e5f081af)\n,S(95b4a1a,7dcd860f,ac3fee1d,10febeec,dc1a5fbc,224035fd,a01f8dff,92885628,2a0cdf9c,5bd94467,efa9dfa6,94c6ee3e,1f80bced,23738d97,f70406ec,bef7f772)\n,S(4f624a6,24dddd0b,b254b38c,e37753d8,8cd95cac,ec4709f0,49b90ecd,7f6c51c5,874a9a83,2efecd9,2a20dcd,8ccfd454,668de4eb,1b976bd0,70ce584b,c77a4fa5)\n,S(39e06912,e18b537b,ce440f58,545e9c6e,a2914d85,698d4043,437dd66d,7506b48d,eff20e0a,16e93096,abc80153,c128aa12,f06c6d,4695bef1,8db7a167,6f352e0)\n,S(52edc132,66d67831,74ff4f59,cadb979,4c1d41b6,5efb9310,7a717b46,78f1ace9,e569e202,c6781e3f,e32c0bf4,9684d7d3,cb07cf55,8f46927c,3af6bbc1,c4d402d1)\n,S(e3764b48,964b8107,3e287f07,c915fc8d,e4e9458d,6f2a8d3a,1dfa43f3,4328465f,bde2a64b,fb13e0ba,351b460f,6d0d7574,5b7261aa,53a79b6c,3ad5c8f3,4cfdb023)\n,S(80efe507,7c77698e,3ec38768,ef81732b,e1c81aad,9c42cebe,75627eff,bcf513e6,690c671b,c54391e9,695e6059,953d3d9e,a9df2e17,5aed4bc3,483f104a,388b709)\n,S(484ac7d5,ebcc497,a2f2bcac,87cd23ef,19b0bf7e,93f8e728,5173f70f,c908b641,1d9570e6,f3b17236,9f2b8551,653f3271,5bc8c995,14c2aeb6,1b44ea5e,90ef371e)\n,S(9c989e3f,bf1fbdd8,4dfca53e,4415cdfa,adf26c26,3801ff65,36b8fb5f,77e3d124,a34ae61f,5755163b,964b3b80,28fee3ac,2993c442,d7f16dd4,c79aab0c,88212a38)\n,S(8b8fb0f,601afe7f,6456570f,19e37f80,32846dd2,97b0d8e0,9308c57d,75a5066b,7858afe,ffc4e6c9,b2e32f10,fd67a1,d6166c72,26f03b3c,240b29e0,e848c9e7)\n,S(e37d0e74,ee1d79a,981baa79,e0a5d807,bce0953a,211c00ef,451d9d60,7ee78177,d28a1285,2ad25f4,df1b5625,bfe59875,a07d0593,aab4ee6f,4bd23ebf,b09f8f9c)\n,S(80c8577e,9a003683,ad658e75,47657b1f,281052d5,54cd0e19,4b2a9e70,1325c147,b3fd0cd,7ca3a2ea,ec7ba8a0,d7297347,fe2baf99,bcfbbfe4,32a6346f,564d945c)\n,S(e7045d6d,34121e5,536f7902,67ae01a9,50f6ba8d,2d05349a,ddeb3833,3ea8c6a1,7306a8db,326994df,e15571d9,c2a5dd24,60b37c2f,e97559e4,e7d88ab8,8a181fba)\n,S(55d2da4b,850a47fb,6b3af0b1,3c03889a,d87554f7,cb346980,4f2978c8,652e0d71,6ac0f982,c861d0f6,cd20b7b4,f22eee5d,189a56d,5cc46780,72361e79,dfe16e7c)\n,S(ce562e09,55a22f7f,c83a5ff2,11500c03,a1e86d1c,404019f5,5bd1cdb0,b1a38d2f,91de004d,b4aac47b,c6b0a165,edc5f82e,47407032,6f1ced31,4bd6d96b,521bb865)\n,S(74e00e1f,596af05,7f91bd64,53107f1d,cd0eb8,6b93b6fe,cc7592e3,7854773b,11ca88a3,38e52a53,eb311867,b10a146d,6fa9f015,11791374,e13fb749,d8e1d217)\n,S(ae8f0b6b,c194f6c9,1d83e400,ac92ed97,68214d39,95868530,a2e99f9e,2104eb48,e973fc42,dc0a930,36127de9,eb57cbf8,d4aa8f73,14646362,c855ceec,d7ce4cf2)\n,S(40a8c06c,8df83675,e108e0c0,565f33d3,7854e722,6f76b674,1582fdcd,ef891ae7,16ba7850,b5116afd,3d29e0b0,40faabed,b8ff9c09,83af624e,a100555d,887bf7ed)\n,S(61ea9e54,5c57f6fa,a2ab410f,861f1fff,926795b0,4d240e48,7f6df1bc,6df83b33,c69ec12a,e0b217c3,72e1791f,7d4529f2,b9063e67,38a8c03c,49071581,da79ed15)\n,S(1c889cd4,440caaa4,fcdf55f7,2145fc17,d73e25ec,264831cc,30a0cb5e,c1d37632,41b5246,131fa67c,7314a223,7db5e4b0,574f5b86,11560166,ee55bc94,22d72fdf)\n,S(ff295890,791d87e7,982a99d3,ab50bfa5,c58e0d06,25392abb,4ab166a1,8e49525d,a09664de,19951364,19649baf,88806fbe,c370879f,efbe4a58,e619a01a,19454570)\n,S(5eb2eabf,cfca1fd0,7c939e5,b8f890cd,74e399ae,d9bdf785,7bca8767,84e95f99,4c42e970,1c9a783c,201aff12,16265d8,1f46f25,fe110f63,31fb8fb,f72c9871)\n,S(43e5508c,dbccc93b,5b3f8ce1,7a071c1b,3b17bf4d,8153f61f,cfc7b6b4,f6cbaf91,b5ed8f78,438ba71e,509ec388,d09a5307,c853bb73,db240638,15a07343,9bdfdcfc)\n,S(f5d16930,23cb20df,c8607261,cafe533c,eb513f87,7f6e2c99,5b0c0f75,fdb56f53,e539b168,1528332,f7fc4bf8,73e2965c,2557dd40,6eb2c8f4,92ce0dc2,126ece68)\n,S(db9d66d1,5dc5a918,46180a62,d662a2eb,72313c6f,ba511eb6,c7fe0c0f,78aba2a1,c96de8a3,61f0dc5a,9e2762d9,2257857c,3cfb46b5,81c3f0b1,f89a20f2,a1517227)\n,S(e760d3d8,46fd63bc,4f565bfe,7bf5133b,56ffce08,27b99ab6,833a64b8,868ecdf2,60ee6685,8be2eb4,1821cc82,54062e01,2c1c1e12,285c8381,e60e5d4,12f102ce)\n,S(2bdb2299,caca7ab,d22533e7,12e37004,e3a956b0,31da4d99,1351d790,5c33e026,64675cdf,c2738105,dac3e877,e27d00e7,80193286,24cbbf82,a784713f,b6e44731)\n,S(1cce0bfd,5992134,b7813773,9fd6c844,7be48d20,e001bbbf,c3c87b9a,8166bee4,2d4a8ee5,1ed7fe30,c3a1253c,4cd9e83e,b5eeb73e,c166f4cc,42788bbd,cad37057)\n,S(6d6be3c3,7f5dae7b,ff5b5bd8,ec6b8c65,ec8405c5,bb6575bd,6ebf89a5,77641075,4fd3cc1f,5c6fd3bc,6011507f,7c4eaf4b,24d1938d,35159b80,39246ccf,ac9c2c7f)\n,S(d82c180,d96e781d,783fb1ca,8758fa1d,b3c67f2f,143e836c,c6007d8b,bdb22351,3802f669,952aada8,93b3e9a9,74a43218,37415af6,7964b1e1,51a7b8e2,7ad0c7d9)\n,S(4ec61edd,7e03fd34,f91dfed1,b546f1b8,fbf9fcee,8c73e343,b228ce18,3db3cd71,e1199709,b5b2e2ec,8af90340,de9ec3c6,db7d948f,aa941cff,b1984856,b03ba9a9)\n,S(31aad469,73aea11b,a54744d7,bead13ee,a8df7a8f,8e735643,add781e9,e17a034b,64676f41,3e49f606,3f68bdf5,7ced7486,a94680f8,e60e2913,f13b674f,84b37adb)\n,S(a9842189,2fccdb8e,f6515903,b589ea62,1f946bd,97e2931a,5eb1ce4d,4d173e02,50be76ac,3b2dd7a3,a3370e13,3cd6fb37,7ea266d,a566049,abe488a4,89a3908b)\n,S(822b54f3,3ec00433,7a6cfa09,277540ce,fee79b08,a50695e3,f8fe0ece,b7bef099,393623c6,20d3f604,7343ddce,d8805bf0,7405d336,fda8c712,8d044851,236bf7f6)\n,S(100f6b55,fe3d7000,c5f8de14,ebfc5d7e,15793d10,e99dea3d,33adf25c,15065e0b,d1bb44f7,58c4dde2,7c928267,6d6c1114,a352ffd0,dcec8e51,9b2cd74a,4eecb4c2)\n,S(ca5d8318,6a09c227,481aa6ec,d195d094,6a54257c,5adb71bb,2d4e8836,d6142f7f,d890847f,b9747a0a,f3ba0c38,84ae057f,878d8d31,fc73933d,e014f4d9,2677b42d)\n,S(e91c25f4,2234d20e,2931a352,f98ff610,e8ffe53f,101b56ca,fa5da12e,24bfbf14,b1ec15e5,441ec52b,c71740f6,d60e99a7,7a26bcf5,143ceb41,872b4a22,964dbb86)\n,S(57a8c8dc,310902d8,8569b290,22e99ae7,acb54547,2ccf7065,9e9d42c,1ae34445,85224541,442e09d,f4e92db5,64866aee,50e7cc3f,b8c20acc,b9c6161e,30ab1fb7)\n,S(232b8c67,2502d16d,badd0d41,28c02b6f,55a8531d,a6fe87d9,581045b0,7104500f,38110a0e,9e7d8587,227c476f,6549492f,4f5255d9,e618cf39,9a7a40f5,85f93fb9)\n,S(7d0be68a,d71f69b3,4f5d4876,319f7e7a,750d5c7,e3dc876,187627fe,77004fec,3e72a050,7d0af3e6,1d6f5402,8a5b971e,a12b1d18,2ca45e67,ca09efcd,45124633)\n,S(4dd85f0b,77c2a271,c95fa436,90c43485,b70b02c4,9a46cd83,6ba7a2d2,7af93292,843642e5,c9554d98,48ab6ff8,5dada7a0,f139e64d,2081978e,8c9e3bf5,1c11d597)\n,S(537a93f5,88f02004,70b531a1,74ba9a7a,3eb2e5c1,eb767214,9e264e2f,712e52f8,b0d9b3a0,dc009266,8e25f06,71895af3,94efa1f9,78257ebb,3f839b61,340e161f)\n,S(13faf471,325b1e57,98ce60a4,6f82bfd1,ab346590,82588ae8,b972b331,9ee48684,a6720384,e84eb529,e22f2585,79b2201a,dce7ba18,845b8bfa,49a21ade,7634f743)\n,S(691e24ed,5861b344,e015dbea,809dede7,ca17c482,22d9e06b,e1be4405,cfe8acb8,e3564adc,c197b0f,cc520d90,9d9c6347,5ad00294,3d0f3f96,6f49b76b,91c529ab)\n,S(36543b91,aaaea850,15aa394f,fb334923,b754b3f8,9047f73f,423c15dc,7d3d7ea2,73b4693,b79b800e,8e48c838,9218094b,9dff44fe,5a1fafd5,2d68a2f1,bbbe5799)\n,S(ff25abe0,394180cb,1e045045,5320ea80,e007bb0,fe3bc8a2,24f20b07,8433f05b,a512b109,26dfe650,e6dbd678,ad9db412,938f69e0,8aee6c2,f903631e,530b7e51)\n,S(1dec07b,5faafdaf,51051f57,cd0247ac,cc607bc1,70c53222,72d389a1,7d87e443,7e77e937,382b2bc0,5a2207a9,2598dad4,d870ce67,d0e138d3,bb35094b,9fa9a325)\n,S(2f10f776,f62f8632,ea20147e,d14e0919,485ab78d,fc636236,29c2994,9f413c32,3b2c5fc6,e760462e,b9d8c8b,5aa6b1f6,35c23668,33e7ef5a,d25269ec,68d2184a)\n,S(7974f394,e61c2cdb,acf09681,4bcafb4a,ade31943,cc180188,31160022,dabd73ca,e1b34da0,3bc1aa66,87df854e,813ba451,2be4cde8,310e4056,73c83600,89e98309)\n,S(54c5f39,3c5cc416,56577469,84aa3695,32af1ede,3a51b14,436748cf,1701c332,3dc67b49,49769cc5,22b0626a,eeab6ba,ddbde8ac,ef78a0cd,800c1b6a,5043e4e)\n,S(199aa296,f047c7eb,1d8a972a,318585ae,8092e905,e555915d,81c1a3b,425f3783,f5823679,64d17a96,b4ca7946,dfd3a266,585154e1,cee02e2,b87e8fc7,eb46c262)\n,S(d15d39d6,fb616dfa,6c292a3b,a1fc58e7,cbcdf0be,7976be87,9a7f088a,9bb7f299,4c8ae97c,4e37f837,bdbd4912,f43bfc79,679dd418,b57d061,f705ba60,2bd7a900)\n,S(76d65134,880e7dfc,81a332c6,a04b82bd,bff26eca,9a5aedf5,a6f6683f,364ef58b,b71ae708,bbd22d83,a1ec9048,6975b9a2,7b4aa5bc,5bf1246a,6464406b,401507e7)\n,S(1eb4d2a5,d4dffe36,30ae9ead,792ffa9b,452ef0e1,94c06a02,a0308143,dcae51b7,88d978c1,e6ab8e79,9a286af4,58cb3eda,7cc94b67,589b144c,9a55cdbd,6ff47b0b)\n,S(dee03251,35708790,361c3451,6710623d,e474bdd2,4513562f,95512f0c,dddf571d,d22dbcfd,cbf6d809,2c68a28d,c118ffec,496d9623,b20667c3,7fc487a,1690f565)\n,S(2eb0272d,c98ac6bd,ff68f0d5,5f13f509,bf1dbd9d,f36385ae,ef02356e,56d4760a,f80d4355,4aaf4eba,27aa1832,90573687,5c69ad44,7211f746,111ca02b,26a04277)\n,S(eaf62e69,7509672d,8ff6ff7f,c7788822,b75853ea,27636b5,c39b0321,ab0eabf3,442e56aa,1c8fe22d,71b88b96,90733f1c,8614e160,35070095,6effdedb,2e0a3b7c)\n,S(2059070a,13d96fd9,6bdc442c,236ef463,cbc70185,b8799d3b,15ef72ae,4592858,bc9042e8,3f259ae8,f6221d7f,46ae56d8,f426fbfe,901b94a2,80da34bd,14961ec8)\n,S(ff2ef7fd,9e7f3e7e,6f7b4cee,a44ec281,4b8b4a44,208c462a,f925d27,ad2f52fe,6ace74fb,fa6f72b4,8156cb52,a67f5137,956a447,6b69fe3b,233ce4f3,df0a5e24)\n,S(e3e5cef6,fc4553fb,d337a7b0,4357ff1d,d8fd0de6,4df17bf6,20f7f9d8,9d14d83,acddfda1,baa7b60f,d0d1863f,769a475f,e667b6fe,8a047365,1b84f44d,238f0460)\n,S(97a8726a,41c02880,e9942341,a66b9c21,a0c64577,bde3c54e,c11119cd,bf57a6c3,b5f37cae,27023d07,78cc5c7,26d845e1,fe160aff,3459d164,681cc38d,8b67b4e8)\n,S(ab01e6e9,4862f943,8639484a,119eadb4,12fd9002,1d7781c4,1b020450,9dcc81e6,6ae50c32,101b5c3a,51fab05,2ed79e5,48853cf4,15a30043,6b11ee05,7483b14b)\n,S(c464410,da2dcf6b,2e6ba5a,c8d8479e,58ed9a4c,a8c2b0d,5a2ea15f,7673668f,3698c590,62392c7d,e597f333,cd3ce45b,eadee944,5209d361,adbbc386,b499945)\n,S(17eacc68,5f721f3e,2013b0e6,76c10795,ee49d524,26edbd86,48f098f4,17867534,cc3116e9,cb19f49,bbf7214b,b3ab76fb,fec0f856,e994a01b,d6b63ece,189ef300)\n,S(c040dd40,2908ef17,539b77bd,5befd53d,3ed2e8bc,d7d3608f,2b114dea,d4c00d73,7a6384ae,55ec2580,4d1403d8,45113dce,b2053ecb,6ce0d3d7,427835b4,15279c00)\n,S(a5963498,3658f70c,2ec25fed,6659a290,41bf2ba2,ba92db93,41b03e39,2ebddb42,dc114caf,260ec4a7,a8e8bf4,1695785d,1ce7c2d2,82359600,a950ade4,d79f4872)\n,S(44fe22d4,51dcf63f,c7e33d09,533836c7,66382372,339de279,9897cea1,1b29aa0d,1718c4e7,3d4bd434,929e9ffa,e2496f79,4f3bf80f,ae805a9e,53b577cc,4c4279b3)\n,S(8bd718aa,1358c15e,fa3b246d,e244bfd8,4fc6b5f3,ed5ec91c,ff466a11,2c71647b,172f1a88,ba6c11f0,1b7deb8d,e4002793,65a0a3c8,443b2fa5,f406dfe8,4bd737fa)\n,S(8ebdcc25,bbe6aa23,809aa53c,3ff3a7a5,d7ad4cd5,5dcf3cfc,d9ff8ce1,738680d1,5c563b26,af86adfa,c3728c,f886d83c,5be64766,78ac5872,cd798875,45e5641a)\n,S(5cf54e1f,688faabc,99742fb8,be896cfa,b469e5d2,feb72f4e,9dbc67e0,e91713d2,d82d6590,d06330d8,2f86393e,190155b3,4920e8a8,86324b18,5694786b,e4fd09c5)\n,S(6c0d96e4,3f01a1a7,2ec16ff4,e04571ed,387185c1,4c8a2f8c,db4c187a,85845f1a,f399a14b,763ec2ec,f3415c1b,b9bb6f70,abcf013a,3117ddd6,e55a96a6,b0798c08)\n,S(eae928fe,fb6a2fdc,d05f1515,5726a133,9a15ef0b,ea716ad6,90d32dc3,92b74046,bdf87ad9,f086339d,cbfda797,8d6ed40e,f6fd4626,60d6db09,84ecc577,14c76bc)\n,S(e5e5e30c,bbe72fde,d9f0dbbd,e08dda,b61d5cb3,1aa688f0,d572008e,447b3a21,9fb4adb8,f80b6e67,47c6ec03,d5171ce8,5de65682,a105435c,5610065a,85b248ae)\n,S(711212ac,c9e26bb7,c5ace176,26b300bc,78df6b0c,a79a0b79,7dbcca,138223ee,dc68858,4ef44ddd,9e6b343b,c4c73fe3,6b873239,18e11cbb,dc3aa72a,ef027757)\n,S(3b52ebb3,531aa4f6,ddbb9ea3,fb5e5784,c4cf11b2,a4c67d50,6b6340f0,21c5e22c,3da3eebd,dc0046a1,3facf02e,46818640,b698c8a6,3c5fb9de,55a9996b,b190938a)\n,S(30f28481,110345e2,7dee7292,fe1c7a56,45294a17,e96cadf9,1eb76bdc,cf56b78b,70c610fc,26ece34b,f047864d,25116fac,3c149164,a1deb08,8e6d702b,77abb049)\n,S(4a844a8,12c55b6,4e4d37b6,1ca4a1f1,5cfef527,699d5ab5,edf1564d,e930ff58,49874548,508de6e4,dbbe6bd3,8d0a9ff6,5826f9c0,63274cd3,f3189d59,683dfa3c)\n,S(a5ca561e,a7c8484a,642e0fd9,a999e14c,5ce2b5d,edc51026,4519e6c6,7868b06f,cc917942,a5e2eeea,ac09b00e,affa7f6b,7abe386a,241de5a4,7a7c43a3,85afa7ed)\n,S(f61b7ed3,1e16c456,c3851a68,e10f614a,1fa547c6,456e57ef,3c1f8ee4,dfd6e72c,cb26d0b7,fc401865,91f5fbdb,4d17bfa6,a0c5a811,4d099a54,734a3280,5f622f2b)\n,S(f8e4d462,889700c4,b52859f9,e766fbe6,55976866,a22207fc,aee56185,15f678b2,30bb039f,c1b16fb0,aa09c271,bfbb76b1,6791e95,9dd51ae,6f01aa4e,bac77554)\n,S(89cafc1a,5d25915,b2f6f71,71814a2f,d5d97a06,a717a91c,a392909d,332ab653,1a24a0ab,b4e4858,d29c0055,714f34e1,5eac02da,60e87ce1,6fe2f144,257ab76e)\n,S(d285370b,d04f5dcf,caa01dca,7a2ad510,33c5b555,6aea60bb,4a48d97d,477c4f20,d4b427b7,32e885d0,13a2adf8,ec705145,c61386b2,c6981b41,6c44d202,4693b9d4)\n,S(3c532f2,d9bdbfb3,219dc90d,17aba269,fd335066,e1fd4974,9026f66a,4df217c0,86fd5e7c,a6c97fd0,2c33c7b4,28413977,2791a6f9,f8c80576,75b3e306,66ac5d59)\n,S(24d1950b,fc35706a,21b17a16,53037226,2984453e,37e26924,b730314c,cc8ac1ee,4d22a45d,6a31a90,bb247c68,59ae9a75,b05bb9e0,8b57ded8,4b9c1ea9,c9f918ac)\n,S(cc6ab0f3,6227b1ab,149f8ace,ea036fc2,d8505341,ab67d44,59582b36,4e7615a9,f9ad93cc,40b1258,67c806b1,20fa6f21,bac918af,54a0f7d7,107680a3,83761cb8)\n,S(de24a954,f36e94b6,ca816bcf,f730b99d,6320f20d,9b141cde,f08ff71b,25318cf,3e34b1d9,1ac24a49,b982d235,44afd62f,8475c35e,a48394d9,67904a41,db899933)\n,S(77ab04c3,4900aba9,d83a12c,7953cfbd,5f8243db,48fab618,f83ff252,5a1ffec7,6265ac27,3bcd77ff,496265af,75a8db31,231c871a,30a32bd,ae873efe,bcac2f00)\n,S(a47af706,5f4699e5,e0079885,d19580a2,51ff8dee,1dab741e,ce84ad51,16e78209,393cbbfd,f1b1f78b,a563f7cb,3465ab97,5b786088,3daffabf,bb8f34b9,7a257440)\n,S(a9f5f9fd,c55c7b7,4dd170fb,d0322026,93d709e1,d52a37ea,8a545e9e,9cd7016d,98717925,4badf22e,8fd847b2,e9e80ab2,54f0d327,f6b6162b,8734b105,f1d5e0e1)\n,S(d57e9ebc,96b938a2,8fa200c4,e586e7e1,ba866864,a947b71,6cc7cd63,4e18ec38,9aa0d2ef,68239110,5b4c8b7c,b412df87,25de16ea,f28596a3,62a6aac,d1b6bd36)\n,S(7463a8d8,fb4dc14d,5618e66c,aa85d73a,e27ccc1c,ab820611,9f506829,faa58e9,82fd6ab2,275af504,aa0645a2,8438db86,ae7990c4,b4c389f,569aad0,68d4829f)\n,S(2e7a708a,29c44831,9a02d03e,4eb331b1,3927ae64,534db2fc,a3c6e7cf,d53bf412,84f3f199,73500cdc,aeae0073,f39b3b2b,ebdf6824,ec018160,fd2e3b3d,4b1e11d1)\n,S(8707b0bf,540bc058,faf2f3c2,e8ba304e,180d094b,b7fa8dda,414d30c4,d9dd5e03,70b61175,fb791033,50c6bd25,aa0594d7,18db5ee9,9667c25d,fbb49c20,f100b915)\n,S(3fdb370c,3ce6cd02,886070a7,28e66749,22f67dce,1b6c08b9,613aa2d6,53ca842d,163518f2,474a0344,a5c4c5ec,10b1efef,5d3a5ef9,94010063,17a486b0,c8e0dafc)\n,S(c37da302,412cd549,a01411e7,6f58d4b,33077960,94b31af,2a283d89,48472f62,aa08f287,16c642f4,8702d1da,aa0a82bd,ca849000,b8ad1d26,801c6fe1,3a21f92a)\n,S(3eba0550,381ab0f9,251f923b,5c7a339,60ade9ec,2b0b47cf,25726fc7,a5e08a1c,1427b0eb,b681dd3a,88639652,5afc4e00,492a1ad9,a0c5a396,55741a5f,cf0fa7d9)\n,S(96723ea1,8ce5d5d4,bf64628f,7754fa0e,e43f20a7,85356e01,94eaf8e6,bb50cee8,5ad09fbb,b9bbbf10,e86eef51,2d448aed,6cf51b5b,b28c8e8a,713066a5,81f49bdd)\n,S(d7645211,7ecfb6cd,3a09d346,55d5c58,ab822892,67910f13,29f8d604,a3663748,ab7cc104,d20fde08,2c889dbe,2baaa9cf,bf2c9b10,c225da46,eebb8031,c28540f7)\n,S(1f6b23dc,7e0ab136,20d907af,ad4bc944,8c866065,b4ac7e43,4dca8906,d0ada5e6,8c37b25d,6bc639da,ad092040,5daa9eb1,56041440,e48f6602,398ec256,763e247c)\n,S(46ff04bb,aa06a168,79479e64,bc0e8ed7,6abb5a12,8afd1f9d,9bd80d50,75459945,b1104ec2,6af2ba0e,39133bb9,e47a61ab,e7e9d229,41d71764,91ef9da4,f51bcd4a)\n,S(ca1b3c25,38888069,3b076e54,58bb0451,3bcdffb3,d824af86,f3f4a883,2a597ce2,f02916fb,dd1b6dc4,76109d11,bd9e81ed,dfc9d6f5,79847622,51bfe2,a1e0285a)\n,S(c961e9a,adb69ec4,8efec7fe,dcdbdfb0,5fad1277,2b801763,ee747a10,99ece6b4,469a6c33,e0b253e5,270bb70a,d16c4b70,56bb9b3c,35f0a2a9,84e2f269,9d8fb6e4)\n,S(3a2ea279,1418cc94,d3f81708,9d44e777,7b3132f5,b9b67393,ea4f28bf,939d99dc,15805143,c035d921,be217dc7,18d13e2e,b981bf8e,6525f88,31a96c65,6bf164be)\n,S(416dcdf,b3a1f0be,1a3fd6ad,52fb1c03,4e24d48c,cf34d189,e7dedea6,b65a7a4a,76909ec2,bbc93359,ac177781,2132db31,47e90a0a,3c6ca35b,ebadd113,60c204c3)\n,S(b397c245,9aefc175,8ba5177,2d4b3ed3,2ed9d1c4,85d2a2b1,7318545b,93c63eb3,a106a360,30763676,ab418ffc,692043ee,22813574,e3117a7e,4471ccb6,f5e71748)\n,S(75c5589b,efd61646,329dbb75,5e809b2a,c1bdb8c0,d29a3065,32ef3909,d40637df,26f3e1e5,1492105c,90ea19dd,81fce6bb,95e60295,a1fe347d,cba27adf,a3e6f631)\n,S(2eeecd12,a3517432,17d5158c,439a9046,e4b0dc80,119e58b6,620e6f08,969135a5,e1deebd0,48c58ed3,1b53d753,9c4c5791,13606467,14147707,806f491d,2daaba4c)\n,S(a981f091,5d39d650,66b1d52e,5addda67,8cab860a,c75ac124,aa100593,9cbe65d1,4cb09fcb,7ab60293,2d98b23c,96e5109,88d4f149,4f334e7b,66c60040,7d3ed069)\n,S(1a19fae3,a7e81d02,a1260c9,a759e79e,545cd869,2666b31a,9aa4c0a0,9bd4ef62,2807d657,8af25c69,e29bf7bf,d877dc7b,79714df0,68ae0707,89c5b72a,b0937902)\n,S(cff8696c,1ee7d196,d76f139,2662e776,9b0f4314,99d30567,1952813d,2420c61a,8497e013,8a399690,25c04b1a,136bb816,3581f122,b62b70c1,47fc52c5,e6d16df8)\n,S(6817a420,4a8b3479,caaa9582,4d48eb04,9669115a,9e5a5cd6,6cc905e2,1e27ce8c,9585468b,c3377a5c,98725465,35c8385e,8182a0c2,763226fd,95e72937,7b3052ad)\n,S(9ceffc84,6e0ecc26,af13eb99,579478f3,7d114b19,59253233,bcd33d6c,8dd9d58e,e01aca1a,5cf8fa1b,67c4d4a,fef1c7ec,51060234,3ea64426,856d0aa8,fa5d2582)\n,S(6a6e1dc6,f203f7fd,d9796589,2301e5fb,995a3731,8c410543,835f0edc,d3456c49,2a072b98,98b93e9e,b05f9ad8,6a97546d,83b579bf,6efd3482,f93baca1,3784496b)\n,S(7e7bae1a,588d761b,5158b4f0,fb9186e8,8ba3a521,89ac36d2,4dd31d7c,d2a9129b,5198f63b,37995cc7,289e60e5,7d0f8738,17e6bbbc,d40d29d,cc4856fa,ab3dbdd6)\n,S(13fc3a8,63deab2b,ed54966f,fa85e553,ffa15863,ee12f9f8,5dc5b35,6bd253,e31c3245,91275056,ffca59e7,6e76a957,a8b77c82,702e5d58,b3b5b577,73821459)\n,S(ffe28deb,3f39d917,f6b6dbed,ae89ea4b,e5650326,d148ccb,becbc6d1,16e9c167,8d8a52b3,b878444d,e5385760,4e02b3fd,383c4be1,128c5b2c,262aaed6,9dbb988a)\n,S(28ed423,9bf26de7,d0379a88,30fa0ecc,481c4354,1dcbc3cd,44483b0f,5cc57be,192122e2,ea018e67,4520d860,b4b8d859,2d560872,19bd0ac3,7bc0405b,10ce126e)\n,S(7bf3827c,7be8c484,52acc00,eee769da,5aa4ca38,2f806d72,76c72c8b,bf8a708,925f3eee,e505529b,45c601fa,1d71d706,24a75d07,1ad29172,6bb243e8,a559eebe)\n,S(cf1a7e99,21a01c3,f8ede862,71f7b6bd,2acb5aab,330a17a4,a7be1380,6fce7000,21365a83,7b3ba611,16a3e740,33a3463,5f1e70a3,f38a878a,7c3a155d,59d3d673)\n,S(e779ea37,d1517cc4,e36c812,1bd0a986,af3bdd67,52626944,afcbcae9,11bb29c7,32c635ac,4b19775a,a04e2c6c,29c6f42,6472bb6d,45c1bf81,e8ac8015,d78a8a2f)\n,S(10309d2b,76b54210,1599785d,6c381d52,f9697728,8e0182a1,638b7f68,f26c2a92,21edf83,4c859870,efb9b37,7f931316,f3abceac,c19b6a1a,438d020,658265a9)\n,S(79927b09,701e46d4,2eb2240d,e9132036,f2b6b311,a7140701,813e721a,533a27f9,fb7c6513,a81886c1,a4c75640,36136104,8a0f47ee,b8d2b905,3b3d84ed,3b58920f)\n,S(743b4e33,77da3429,9f593e68,3ce24e3f,85b1de0,4a3dd37e,fdd8c73,1528849e,37900069,b5ee63ec,7b3f178c,aae73281,fbba7de6,849e14f1,8164d6b6,742f3216)\n,S(d73cd2e1,ce1bb7f,1aacd9b4,9951fe6a,e46064fb,a73acbf,49868605,c4f04da,e6a762e4,4cc6e71f,f5887fcd,6a33ff1c,cae7f84e,2f22a096,14b7f4ad,b253dde8)\n,S(3e1c00d3,f563246b,3ff318a1,77b3ebf1,ba632481,47c073e8,ed32d697,95f6fa68,df2b60cf,87d5c129,1036aecb,80e381d,18ce2e00,c23fcef6,b4a72f0d,2d0776d3)\n,S(96e07f90,92da1653,e5cf10e6,87526db4,ed90c2e4,c629b221,a32fdc6c,d968053c,d65c1c3b,b8a2ea6b,9ee20ea5,bfad3b9a,1f8517fe,2e5e3616,4ab20787,4dc2bd66)\n,S(6d230440,26b1ee02,531cc124,b2e0796a,d27a7652,33862854,d8e177aa,afe1debb,f3a8f995,faa14689,50fbde47,1e4ec008,e3dc6228,a8cfd2c2,5983bc09,ed79bbd3)\n,S(8dda9f5c,1f949dc0,314e43c4,9e716138,ad7d4511,a4b06d9d,c76fcef1,e5707781,d0563faa,7585b0a5,12b674f5,db737435,ad9d9bef,ae5ba77,5c78a582,6801310d)\n,S(5070613f,98667363,f5eda369,fffda417,b4bf17fa,b4c276c4,e5aa357b,bbde97cd,b20eff,4fe77ea3,4185751f,9b16db86,eb40e47e,486a4817,8a0cf09b,dc34ebc2)\n,S(3a4a70f0,bfab1456,b9b8838e,ac1aa188,4986d74,6a9b3a8e,fc792eb0,af16bce7,e4524a93,19168eda,a1832980,c04e8423,843b3e89,82381e24,8bdf5a3c,adc4f3e5)\n,S(2cdcf892,183159a9,da9a82f5,4630773e,db5fba99,3bcdda38,b5291230,aab33532,c88ea6ea,c9113f32,85e299e7,42abce8d,fd95692,32292044,e0a35870,757677b9)\n,S(1a85928d,f8f15f61,12e0cd6,f33199ea,2b7fed02,98c203d,781a2dde,28955c99,1b3986b2,821c76a3,fe13a6b0,30725c29,534a124,51ebe945,5682ce39,74db4299)\n,S(86d14da1,d6b03065,a1520663,41b9f010,dde01966,3e622c1a,6b66b84f,1da1d388,679514ec,764f5cc9,e884a6f9,f38042cd,cfe5683e,1f6e5055,fd1380c2,8399b2de)\n,S(e41f754f,bdfc879,43334341,5a5078e3,30045999,7c245441,565d0357,16201cc2,dd059641,c21d191e,dfef119f,492ee9b4,743f5e0,bb3cee47,dcbb0fdd,790e8e8e)\n,S(b7ec9268,45b5bec4,79668d8f,4e444643,2946e17a,8338e2fc,756996d3,4475cae4,ab4a18b,b7539e90,10e210f5,779476b4,d945e350,978ec2cb,7cc62e71,4fdda53b)\n,S(240fd9dc,f1eade19,1662554a,a25850b,bf3ecfbc,83249d4,56b769d4,b7518912,af03fa5e,e0ba3908,853a3a62,eaa6a804,5318a897,31352207,76a06b08,d104515b)\n,S(353c4ec,ee7d3114,979e39d2,88cc3faa,2b88aadf,8f1cc129,a5c57237,875bb769,9fa7ec40,90af4e12,e940118b,ad70ab8e,28e607b8,5ae33cf0,2a0da4fc,d12d147e)\n,S(f4eed58a,a8556688,11606ae1,1628fd1b,89340988,cbe0482d,39e80376,2bd933de,4278cf64,fe74e070,d071969c,a8ceb40d,18b40bfa,52d7feb9,1606f0f8,df3b3d44)\n,S(698ffae2,e2d02660,434c17d5,b5552d4,b284f0a,736bc0fa,1a1290e,266ef1ce,1966cc8d,7845b74,1da7e53a,496fc12f,8bd50cff,b0bd143f,ab608198,e1ffc970)\n,S(b53b596d,5c88c140,d6e0587d,417c8945,22d884a0,4fb596b,5957121a,65314098,ddff60b9,9befe76,c87de485,76c32eec,25deeb70,4cc19a56,77197ae8,8f2c745a)\n,S(97604b21,d4393bf9,d6e4cba6,7e9f2768,79151865,9f626d65,52712fb7,1a13066a,e7aef384,e1cf7f7c,65c5b0d1,7357f266,7d871c54,fa027616,36062623,4a8d17f8)\n,S(7a35c9ba,6edaee60,312b234c,1062f7bd,3b38760e,da1d47ed,b63484e9,51bb8623,33897a7b,a4546761,6ae92b58,6ef704a0,769f3a57,86ef8245,7ebd6a42,4d84a5b1)\n,S(86d40c75,f989115d,ca26e0cc,9263010e,c9638b17,86707e01,b6a20d95,d1e2804,759bd762,4ffd8c1e,e71dcc8,a846b5c9,dddf2842,c4170410,c0f38742,ec315ca3)\n,S(603bff47,9a4bb79f,663ddea4,93b90e5d,fc77f6e9,b2a401ce,3e8deb31,609badb7,62879fc,65281aaa,6aeeefff,cd33a02f,358c86dd,dc03720e,e1e23998,9da4f4b4)\n,S(5c8b8f3,c7dc7a7d,721e0bbf,8a75a36c,fa13ebdc,14987d7b,5dee68b1,32203ed,6b601f38,2bc4c6bd,7d9d304d,88fcd6e5,3faa43ca,141bd90c,e7749340,ce08e7d3)\n,S(313c1ec5,a91694c2,41e7a55f,f83b7378,25a6f27e,90090505,a7963ce8,7544fb05,9c3153ff,9a4365fa,fb644699,bc4462c5,1ed858e,24752e59,82566037,103c6384)\n,S(51aca51,4616aefb,30268cb2,968e0fa0,150b4bd5,a79746bf,98b01543,a9d923bd,7c51f9b4,73a7747,bfd63ca4,f4e2b361,a0a66ec4,31df41cc,203457a7,4ee028b4)\n,S(4ae8d399,27ea0648,4936d3f9,2bbe97a9,353071d6,7743ca12,2ab7b6c3,2619677d,f9dc519b,c251bce8,38ea332b,9110538,f350f5e,4352e7c9,19e677d4,3c8a47a3)\n,S(6bd1c95d,3f9cb5a0,8c1a054a,884d4bbf,b100c289,c4af257b,aa0784de,a256dcca,7936283b,de39b12f,6f71fc40,1b07de78,80192357,a8887e71,39654ef8,6b803b5b)\n,S(e2278a29,4642caad,ae370a62,e07fbbcb,5737f700,9ef9e8ce,19bdd283,aa49480e,43122fcd,f3943ce7,35b570b7,ed82f61d,87bc8b5,83d64f77,b36f143b,4837dd01)\n,S(68537cd5,9f9469fd,d104bb01,93335830,8d24fb2c,b22471f,feef4ac4,fe96c644,765360ef,41107a51,dbf99ff3,26e3b19c,4003ab45,979de4a7,32063c81,8400050e)\n,S(5ec9ffc6,69c99f9f,8f8a0735,fc088824,70be08ef,3f81bb54,b1290a07,765af330,abb54008,e76f8716,78c3229,56b47c0,1f4f1cdc,dd1cbb38,1a421397,1163b222)\n,S(4e00188e,5d4930fb,a9471aba,465154a1,1a330f6,15cae31d,b2399874,704dfae9,7e76f30,282436aa,73f656dd,35b40209,5ed3fe29,d2086bba,57fbb81d,4d317868)\n,S(4ae347a4,d480152e,ffd39ede,b4c2f3fb,a2659ce4,bd3b6e3c,8aaddfd5,f15ed984,383e2f46,d44cfdf,4fab8ba7,ba72c635,65bb6ac1,f35c7307,ca2c5c3,62d4e523)\n,S(32cade24,a8d3ac0e,f96d90fc,86509a5e,35fd09c4,d8f7719c,603ce1b8,9c6665ef,87273873,5c63b137,5b63c5aa,6ca89f9a,266939f2,e0c936af,55c10d0a,fb8bea36)\n,S(8e4ef195,60147576,6ace6891,f87c22f,20c703c3,d4f7204f,5f422444,51cfcbee,2fa72e3,89d97c1b,79eda0af,c00fbcfe,cd5b9d0c,c949c666,459706e,6ed47af)\n,S(35fd575c,4adc03f6,c4d54991,18607a01,559d7316,9efc2509,aae7e7ff,a4a2c30a,f9a5779d,274881e7,cb700926,dcd10ac7,dbf3eecd,9c948aa1,3474add1,ca48e000)\n,S(932e4c50,7fd02595,148929a5,2c4126c7,efc12f5f,5f5db287,3c635fed,c90a9cf6,ce6bca21,bbaca19c,29f6b1b2,4d1982c0,9e84effb,cdbf1f28,75f61ef9,ba8ba783)\n,S(cad8de44,22a051c1,be36a37f,2f459707,55d3e2ad,35debfb2,11a45d73,49fbea11,48b0df1d,4f6669f2,80a41c90,34f86f11,308eebd7,8a9fd3e0,53323a66,f01c347a)\n,S(9fc7d304,c847fae7,d016aa64,6cb36383,1919ffc8,fceb757b,462fbe90,6c9594d6,dd17c0e1,3bc6a187,cda9dd38,a7afdca4,1963676c,e4d4bc9e,516e3a45,d9860ff)\n,S(41ba6cdf,10d4a05d,c6865453,894debb8,8300e4f7,4c17c0b4,c8935761,988b5849,7eb62b15,8c3f0965,e571e278,b2833321,ece57e84,cf153ac5,9309841f,e47ad4c5)\n,S(1ff9fe5a,aef36ae6,a2d74248,cefb8693,d5bbf30d,f057e884,b227ba44,11c7377b,6ba24b6c,585c0038,49c9cf41,fcb55f09,50690850,5be64692,16520575,f1e74278)\n,S(299d7c44,d706d29,e6d9d070,4856c272,6d134814,1f8f7ebd,893f38c6,cbf5d660,e4a74f3,4d0374e0,ca9b4887,76de9acc,62f7d1ff,9b494040,fc85eea,2d03ff32)\n,S(a0333ed9,ec1c987,6e318ceb,83d6e93a,b607c2d,cea512d6,9f7b2bfd,72e3a67d,da7dd365,5f51769d,35b37393,21fe7b50,19f83e3b,b6b8941e,d685919,fba0539e)\n,S(5a4412a2,2e52a330,534093d0,ba96865f,2821cf01,564ea0d2,e75b84fa,404251e0,6a4788e0,7e6c570e,8390bc0a,b06d293b,3675ab27,54eb700c,7cd4078d,8f0e4313)\n,S(d772ec4c,3b141dc6,e534ea6,a69f9b65,783351d,c2fe7cdc,3e823cf6,32b7b0b5,bd93400d,1036487e,7090979d,ddab3821,c9ccd92f,db89bcfd,da929be6,689ac0df)\n,S(949782d2,c7694c3b,ffb3e1cd,6e40f807,d4452fa4,eca1321c,d04a2367,6df89336,e7c5e67f,b8ba22b5,4372e5db,bcd63c55,9f4e2c14,c97bc930,b68d459c,bad436dc)\n,S(7ee7d5f5,75e6f59f,3e0a9e4d,4c49c71f,6d9ca0c8,6177470e,2334f616,a457e6de,4462da9c,76123e66,c9074add,76fa310a,9cbbbe02,d6a07d01,97e732ee,d7d9f3ee)\n,S(7a4b630a,e08d47b5,b785ba7c,15417951,8a554847,bb8320b,50faebb7,b13f843e,ca24e44f,b86801e9,7163a524,db4980de,69a3b219,7f9e5dc,6b5d7076,9d937c00)\n,S(d2d90a42,428ac40a,40aa5503,2bb623c1,3a18eef3,2994f793,9c31c6cb,1aa82b96,75852e33,2367d59f,30039e06,40b1e0e1,394a3b6e,582dfb66,7464d5a3,f234972a)\n,S(d92499ab,6206dfb3,da1b5606,62ed4f2f,a4809b5c,48349b91,340e0b16,e95d13e0,423544ed,26a4fe1a,8f940074,993aba60,fa4dfc64,be002941,11f29b2a,b271be38)\n,S(ec0c1ec2,58875e66,d24e2d31,5b7ff87a,bba6f2be,6c6bf4dc,8d5830f5,c5d09a23,e526a7f1,648abd18,1c49a237,e608bf79,8b798c98,75804d7a,ee8ba416,28591421)\n,S(69380968,835b5989,885b4805,290ea050,3a6ae508,17798c2e,f30e1009,6bba8863,71bea39d,80f0ba63,45297137,a14d07c7,7522df75,8192f345,a6170f5e,2f11e5f4)\n,S(d66b1da1,9fd1637e,44cfe8d2,e1ff2fed,15a40a5d,f596c62b,ebbadc8d,fca9ab23,68cf64eb,bd2b4bb7,1ca17c4e,607b3315,5cc5d91d,26583b68,78a69476,586b9946)\n,S(9dd98ca2,c6fa62cb,92750d70,c9931641,5036475c,a6b59695,a510dc88,3298c95f,55a88bb8,53b99cd6,f8d278b7,e63b31db,40750905,d98ffc81,87a0e07d,acfbe821)\n,S(1b66bc2c,842cf1bb,ea4ecccd,c1e2d71,4efd848c,db7a9b92,5b9a9ade,d141bfa2,fe0b4701,55fe82b8,af43d88b,68423cb6,402b3501,8831ca89,ddb9a70,83673bea)\n,S(b280dc4,8a9231de,d396a61c,2922e003,c7d2d5c9,f0e8312,c1c075ca,c8eb688a,81b745a6,a2f8be66,b32cb3ad,62babaf0,498c8261,531cfff7,da9ce306,d2738a74)\n,S(7bc5951c,9eb3ba1c,828125ad,510e2e92,413e906c,f015680f,8cf1cdc5,f18a6b5d,41b905d8,480ba8bd,b8a6fc7f,49adc6d4,fbda2f0,ee229a1c,d43af5a6,98352a07)\n,S(69ff74d1,2318548d,76a53095,25ca8695,11647908,dc4f2ea3,4ed2c53b,f6eabfc1,f3a3e628,8eb99f78,12eaca1e,b3adf5fd,1d617397,dcc95bde,d4be775,afde2419)\n,S(5fe6dd3f,1f6d3a5,9fa8f8cd,de7f689a,ffa46098,aa0f03b9,2c552e1a,c84af209,9eeae901,acb8d022,4ed197a9,15510eaf,f356cc16,274a1aac,d6dbc74f,60dbfb55)\n,S(469e9122,cb0475db,7469fafe,9c53f911,d3b52bc7,8cce23b1,21d22e59,c505f5f0,fe7487a8,38b2ba6b,f5a5825f,a4d22c26,80d8a580,9db637e,cb84e2fc,1058d812)\n,S(1f4a3ebf,6b62923,b2df816e,8b30f8e4,72a5e718,70c1cc1c,6d63b4d,9160e6ab,98da1295,7602ae19,89938bd4,298a67d,1ebeebde,88706d39,b77c6a61,4dc89e2f)\n,S(d8ea95fe,1c12ff0c,cec226ac,26f510a0,4117222d,d0fa4773,c2f78ebd,53b86b0f,155bef9e,dde6f293,b88bebb3,ce92c249,f154b59b,a01d7f5b,25fef472,8c6288d9)\n,S(1ad8a3c7,97b38071,2214b2cf,87045300,2bb36f5d,dc7f2527,1797bd4f,1227cac6,680a77aa,3755237f,15418957,6fcf51ed,58398c5d,4d56a1c,cfa3c05f,4857814c)\n,S(ffea7104,5d1d26e,d942646,9f0b0f88,355540b2,c32aa92a,3fdec318,24fa7d66,eca244e2,2d8da06c,44ec8db7,5702edd4,81f67af,2ca64ed4,cb5d04c2,2434eac8)\n,S(4ac55ba3,f7fc8898,54a141c8,cfd6f675,d3abe9ba,55d90f3f,c1764ac8,b959d8ab,9c7b2b91,f135fb7b,fd252d14,118b104b,714821b4,1bd879ce,15bbc93b,f8be2bd2)\n,S(5f814467,7aa9a4ce,f29de0eb,865b8a02,bc7061a9,ca525536,fe27af50,bb718ac4,bda965dc,4062b26f,e6434071,6301fb02,2b8cb894,73e39b36,69acf101,90d9c042)\n,S(f372cb04,37917498,4b29f213,5981f32,da5f96a4,d1acb903,88beb154,75dd88bb,82d68f5c,1e62d500,1a0a0ea0,7694194c,7ceda2ec,e32c4efc,b2a0ab46,1a367d89)\n,S(fb12bc5,45760478,36313375,3fbfa4b2,878ec6f2,243e2692,7a3c5320,bb59b128,3f820118,67dae1b5,bb5ac0cb,a24ca681,96193077,fd7bfe17,a926be5c,4953aef5)\n,S(3d9759ac,918a4a34,f4307560,17a9747f,4adafea1,b0a92447,316ff819,60c0ea07,cd9dbcf,6d6a330a,b671d5dd,aa96497c,caa317a6,77bebecc,6fca559a,56018aaa)\n,S(eae0aab3,699c521c,3fb49be4,669bc7dd,9f476fdf,58e42909,84455c82,fe3e00ce,badce8dd,450ee7c2,99b77b56,25e808a3,62c7ef1e,11e30bdd,9777fae1,4f17259e)\n,S(fed252ee,c2c0ceaa,57625d0e,925ee5d3,43718a7d,24ca3384,55e0abed,451eb851,66bbb6ae,56ceefcc,21d66b27,70756f64,dd07211c,5cf0bb4c,457a5a8a,e82c648f)\n,S(da639ebd,22ac3c1,417fb04d,3bab0b22,2362af2f,9d3013c9,bc08793a,2d7f9dbd,83f27620,55f1e9f2,fa74ed0d,536bbe54,3627aaea,3e7a031c,10aa7b4e,822466d5)\n,S(524d24de,d77345af,4d4d3ac6,7c71df91,32ced2a6,acae682c,e097cfc2,7eab90dd,e4cf5cf7,c6927c5c,31b6f55c,90fe7cff,2d010a00,887b3b01,b2f7a074,fab7f5c2)\n,S(7dac2ed5,fb52b60c,35c7cde0,c28617b4,28672da4,5fbc21c4,b24c5268,54ae4f94,cc6acc7a,e9168866,70b5c4a2,bd2466c2,f6cc11b6,d282b09e,a578ee0f,e7794038)\n,S(5f46b64d,da61f59f,6b99d10d,e9291a,887e5d9c,a3893ea6,f7c51cbe,e56083ae,6043d055,da252655,506dcfb9,c5572929,9bfa6ba,7e1b582e,5ee1f3d9,e283a8ae)\n,S(8863ec33,b6a25f21,6e641ec2,b8c5df0f,48ef0fc2,38a7f635,175961a1,7de14aa3,9d6618f3,1e52581c,2f829277,7490655b,45b2a583,da0ff7a1,17dcb12b,eb42541)\n,S(85403446,3ac459ce,6d8184c7,ef26f91f,b377f3f7,3e92ea03,a1bd6a68,33a2f9f4,2d1f1296,8ac56499,b252a5b1,8313fe35,8f7719f2,3b0c9430,438f7278,c5b399cb)\n,S(bf6b3f6,217e412b,fe651dbc,362266b4,6a325d27,5eb7f201,379cadd6,5e223c7f,a1160954,c14aa455,fb041e7d,ceee3ded,ebfad90d,6af1beaf,a9b1aef,97ba748b)\n,S(4b20202d,3c186135,4aa079ea,409aa4cf,860ca219,8ba1bffc,77124e5a,bed9e59d,9f684503,c107c0b0,ba5d858f,2f11d904,7703eb45,510602ba,b555e8a9,f5b8873)\n,S(4087f880,6d679a4b,3a24f533,127b5931,99c050f2,627cbe28,2686a5aa,6421dd2,4838ad84,b3d9d488,33c8c883,698f5a59,69880041,589f921b,5a5707d2,bd88e8b9)\n,S(15a79287,cb2e7406,a2db91e0,5a4fc34,53877504,c790eac7,66d9131a,fe97b79c,9f4ef322,76572e3,d3fce497,c2c6160f,1bd597cf,b96a83fa,df2a41a6,b94a238a)\n,S(1c4fa063,c0524bc4,ff233d61,bcb3d40a,404fb10a,7e222812,2739b343,e3bcecbe,2a8561ec,a2d82eeb,97209e9e,bd730b2b,d39c90b2,bf4d0353,3aa8c73d,62d48bd6)\n,S(a0708ba7,43c1b2c5,267936c1,85312f2a,bb50b8a6,d4886c26,56d163b5,adf2a636,958f45f1,916988cc,6c9b8155,12e1d2c,7dc66a62,359a4324,5845e94d,371a20ea)\n,S(d7960b4d,f01a42e6,e109d71f,2e33ffd,9b79754,b129a858,c213793c,e8acad7d,8caf19aa,5a841d2b,61c3d0e1,dc65730a,33566193,63118707,d81c1e19,dbdeb920)\n,S(7a03dc6b,f8ba70d5,96e25ba3,8fca1b32,a7c4506e,6e8a3789,daac3240,bf8ba611,70f19e22,292d6856,5a63e378,b773e170,48a3681,d096b881,fcb84a4f,7f7d9028)\n,S(53a9a662,a8fa3411,c3989850,c6c83aa5,da516ca0,726fddba,c2f38f25,c7443b97,5deac250,6179c31b,f313279e,844d1e5e,2adcfdc5,b803036e,140ff59e,3945e25)\n,S(86b946b6,3dbb0d86,ffe69af6,3c1bbaa9,b7ee99b2,876836f2,a450d9c,feb2cdf7,44407783,d3d0e2a6,cb18ea1b,a1e4f133,7cbc39c0,19997a62,ed74b598,f74b1fa)\n,S(ce81cf5,cb884b46,f6956726,20d2423f,6b28c8ff,ba71d9ba,bef152e6,ef752d8e,75afd973,8120644c,349bf924,c04c1aaa,979177ff,2890c926,2d0b5404,5ea9248c)\n,S(41106e41,3a464d2d,9f86cb9e,47d57d47,7b791d43,133a2b8f,bc6ce92d,e1172ed9,e2ca44c2,30e920b8,5601a2,773a0f88,2ce4e42a,7379b374,d2ec6fa1,f76741c6)\n,S(e9c1f2a0,4e830a12,e546541e,c7ac6f6b,bca3f1ca,2052c152,4e141b4a,20b49777,51df3843,8dd12c2,29973fcd,516712c8,5ca73721,f5d50308,86b91f9b,32a58124)\n,S(8bb9e12d,c5e8ff3e,4ba25775,f1552e3b,9be21f27,4250d511,fce5cf15,e73bbf2c,8a822b7a,273c3730,1c24fcf5,c19c4de,b4d0968a,bc23962f,91ef11a8,d00d1152)\n,S(b0058ef1,da227791,e4694c3e,ef66e031,697f3f3e,297d139,9ad597a7,acb6bd0f,7f5bab4a,5793814,d8c0bee6,8ffe8025,e5deb644,7d2ba978,c805b2f0,be205a2a)\n,S(1dedd42d,8df5fdd6,52e02b78,4dfcab0,6dfc3557,4b8725c8,db95368c,ac2522a5,3055a449,23730d25,18ff4a8f,983b61b8,24b918de,f357654f,5b46559e,b6bca540)\n,S(761a5248,c6794ba9,3f45b0b5,12bc39db,e471813d,9d5c5f7d,a46f2ef4,380ea544,185ded30,c4f5ceac,5e18d0a3,95ba8ed6,9f703408,5fad1fc5,c60d10b0,832c1292)\n,S(f1d5b60,e515d0cc,8dc20982,a13c1b5b,a1749687,501a4f2f,fefab898,e3aa5caf,55fd766c,395fd8c2,173a9e4,8eb63f07,ee6f9ab7,54994708,e42ed9cf,78a0d91d)\n,S(569cb44c,9b7900aa,576ba0bf,61c4455a,fb09ff4b,c30242d7,fba993fd,bb37425f,dfdeb8d2,ff1ae3d4,1e78f646,ac7dda3d,c1131de8,e2566d0,d3340272,cc350b1)\n,S(3e59b69a,d99839e8,51947a78,7d8f850b,9c2dda11,7dcd0776,d22c787c,ba1851eb,732cd2a4,8bfeb030,6bdd9358,37ec4f27,7050745e,b2c9f6d4,34cd8834,592e20b3)\n,S(a46d6621,7b45682,98250240,3fc0886d,81acec57,32c3087b,e6ea4c4,95296967,140cccf4,29a5b062,24097a73,f9a8208d,46147884,e6127464,51acef,b9763d33)\n,S(b920e59c,f25c53ba,7c00c427,d1575c9c,4ad70efe,daeb7927,74d16c46,5079ab1c,606160f1,d4ba888d,1d5435a6,1656b937,9201ec5f,37f585c9,d43197c1,f045b67f)\n,S(12cf1ae1,e7d837b9,eafda1ef,db270db6,3b88b6d9,8d05c713,896e06b7,f8bfa8c5,e0d66613,181b934b,9f23d7b,e9cfd8b3,c4c1d66d,485075d9,1e8cca69,39c99c0f)\n,S(6aad27ae,a4eaca2,e60620e5,a328154e,eb93a900,be13a302,87ff39d3,8dc0ec1f,932155c5,caa21539,e27e8cd2,dc57fd7a,d4681474,342c0811,2fe626bb,94a1f46a)\n,S(134cd94e,7cb166be,82b48916,6c06c1b8,8d168bf9,21f75c36,ce9343ec,acf870a0,42a673c5,e956fd45,e82a51cf,ff09a399,2f7c8fe7,e73d14c0,fab88c3b,9453236)\n,S(d5dcd58c,7b7cc786,8c42971f,a1c85cee,429b1d18,dca68e2c,56d9f5b5,5a3989ee,e0ca4130,ef1bcae4,ecda0529,7a338bc7,45bedd0a,f0bb75c5,e316624e,21208100)\n,S(951d6534,c344908b,905fa4cd,b691f33b,3e3567bd,1538a861,f66ac9d0,e0d8c8e,eef35922,eb847928,6681a990,345255f6,95a5f691,9a7d79f9,d575f306,ed7046f1)\n,S(cedba44b,25f7964d,76d84c9c,9b521156,690af0ba,966ede27,b33665cf,c1cdd0fc,806a9049,cb8e9af1,d187b6b6,493316b6,187e7124,91a8f7d9,4c21b79a,87c79e7e)\n,S(4ff03660,d1306bee,29abd39d,32beca15,d1c7d2d1,14492a20,49c6f4aa,d8a10b54,c2c75e69,8fd89951,e36e8bc8,be71f689,4990f25d,d2ff1893,d99e2773,6d1e574)\n,S(c08bd508,8dbd6465,e87b7702,dfb7200,c78061a2,683b9824,389042ce,ce2e0ca7,562019d6,1343497a,b1640884,23a9f171,1db329b6,8c63e78,41793255,f88d7307)\n,S(48dfdcaa,6fd2ceb2,3b85cdd2,28bac318,955bdda8,274a1e3a,7afd5db,4bf9857d,2a46622e,896167ba,5154e76f,ce429554,af60f4b5,1431d171,d55ffa2,ea0287ce)\n,S(40420900,d81af883,cbf76b47,17025382,802c1479,a33a3cee,bbfacff3,16a1f236,866044e0,dbbcb53b,308f50fa,2b54255c,7831e96e,f19e1b4b,e4168d1b,7b85e3f7)\n,S(96a3747b,23b667c7,70ec2018,4e99208e,ec1e3142,3b1156f,8b12f37e,322bdc42,67b0b3c8,df8c4647,3310b04b,ad325d6f,dc7545f4,a4a07af7,98c7cd86,3cf22ab2)\n,S(cf07017d,e4037969,24361f0c,b151484b,f1db3e91,a8d16784,5039132b,c8460182,b7a1b107,62f29e30,d0f6e762,f6940638,e2eb60c9,e65ad067,99b1bb39,3797939d)\n,S(12b5b8b2,5b0bb6f7,ad1b90de,d75fdd5b,93507aa3,dd7276dc,805cf5a,218beb15,5d3d4767,8cefa19b,80ed6368,d40ca199,5a5bc165,b3609ae,e89b56ed,b78933da)\n,S(879b449c,e866e6d9,3998b9ac,e18b6f19,77ecd299,bd9b727d,cd99c37a,13a46765,b0c480eb,758cfb12,acf50c4e,91a8d9e5,f0c45215,f03e6bae,c6c13a83,63781c63)\n,S(2ec48783,e9d3a01d,d1fa401d,d3fef249,e502280c,cb36d21d,d2b7b90a,cc7dead,fb029124,78f9e2ca,1a5e6150,5eb469a2,83fd8f81,6798703,ca2f0c7e,85a67fce)\n,S(79cca258,27bedb07,39fe8fcd,2145956a,5b7878fb,bd873a83,aee22093,437c3ce7,ff488a93,d82e8750,14cb7c48,3eb74b30,bee990b2,2c1915a8,d3381cea,9cac467e)\n,S(c444a4ca,3d2b8b7a,826b9eed,40616aa6,8e146a80,d49a9cd9,3e93cdd5,5adbd207,4d1368a9,63d504c2,541ae338,1ded0684,ac00ad0f,b8fc3231,9d1fc273,92d0f18)\n,S(3ee47c50,cc0e44b2,5864e205,835e8d6,dbed328a,60493c26,7ee5529b,cff3e7a8,fa555339,56ea87b,c3249640,145e243c,b6229a30,3d1b91f,84e1ca9e,90a5f095)\n,S(e963c987,3036bb7f,422251a2,9f9b0f47,8e69e2d9,2d1920a8,1c012d7d,c809980c,ff95bb0,779bbf2f,1242bfa4,880b173e,140f92d6,c7f8e5e6,18027a3c,55c52fd6)\n,S(aaf6075b,b6a1b8b9,afe4b747,a46fa394,23738e50,e686c8bd,3f711cc6,548fc07d,4cdb0aec,6d11ca1c,1e85bd16,2eb411ea,53ab326e,bbdf898b,1bbd5219,aaf2b0cb)\n,S(691e4817,d8e9756d,8e174a18,d5d708aa,842b44d5,ea921298,6e4c7585,4157ac0f,9eaeba0b,3bfa7ad7,80d0eb15,72f92873,4bb9a8df,29f508c2,d1ff4076,a0c0c222)\n,S(c3e6fdbb,45af4a48,941c9d4c,583dad8c,c77dbfb3,1caf3fd8,1d9e087f,e744996a,ca998d1e,65ab29b8,fee07bfd,1ac4e979,b869474,b5498a73,e642bc9,608366f2)\n,S(edbd6320,a55d25cf,21f2630b,e7c5c996,923eadf8,333d386,8cec00b3,940701f,d65192e7,afcef5e4,c88cd12b,fe28f94a,5e3d3d50,f6b2c3e3,f7a14243,4de4889e)\n,S(c959ed83,a80ae0b8,ac2fd249,43c37412,b29684ed,9d4d85da,d7cb4c34,ea95d336,80c1dabb,8dccf252,ad8b0e97,25970c1,4de5f58e,12f7e5f,8b59a2e1,a72b168b)\n,S(778cc574,471004e9,d88c9022,4d2d5cfa,2c5bc6ed,da64a312,74e3df83,3eed9237,eea23d31,6b2a1c02,7b92e502,db921d9d,675720fe,51cc3609,46b2dc93,92916c17)\n,S(a1f87438,8c3656af,43f299f8,1d98d2c0,173e7e46,d3fbed9a,5c2afc96,63b42055,10bc8443,820d6c5,b3150e79,b9936785,5d874afe,dc72a84e,abb987a7,d56f4afc)\n,S(c8ad7f0b,2d5f8b8a,cd9a1839,c3d043ee,8f7fa583,7540f6a3,d002091f,68224a5d,3018b580,eebe5b9a,2d1507cf,18a7fe4a,2a1cd4b5,1157dec3,8e65f191,c7aebf8b)\n,S(c25d5264,b93fd7b,b7e4e426,1ae767f7,1ecf3840,a2a7ad20,bea810db,4820055f,fa15c8c7,6e3f2b0f,a29fffbc,eb48ed32,bf331aec,3a147524,c349e8e2,465ad684)\n,S(d0b972eb,7e4cbfad,baf224dc,cb2d873b,28316877,88b5f2f2,ccc62bf5,e978f92b,ef5d3ca1,606a5852,aafbcb4c,f23e787a,75610b31,8420bf56,e94e420d,f7ab8e3b)\n,S(f8b44c83,58564479,6448791a,b98132b6,d393e851,bbc294ab,56c8042b,1b0a2d07,c28242bf,42040be,e9851362,fc8e764e,2dbe0c01,d5bb0ed0,b8e1edfe,e870a27c)\n,S(e7cb8901,6f72aade,39410adc,12fd1234,5d942419,51a6d36,8acb7c83,da5666b7,de367522,46b6d9d7,efd4ee6c,53a1656f,f0c87e80,cb0f8f63,95341c35,d6b21697)\n,S(8b2128f,14e3f4aa,92e89478,64c5eaf5,f40f93e4,95cce167,fb2c7424,c279d87f,e7ed384a,f469b4b1,1812068,a830303e,699926d5,b8304c11,cbeb0e49,cf5d246)\n,S(f34db5db,3cbcd586,38b6a5f3,ab5b31f4,1f3f631d,785e8317,658408f5,93b4afb,dfce7372,bb2c8466,fa31a1c7,4ffc1ac4,5bf11263,4c98ef2d,56e30fd5,c3dd3d9)\n,S(c3689e09,a445d685,daca48ea,bca533b9,10b4fee4,dd251c86,a965d5c2,ecaabdb8,7804d05a,6a263fbb,c33efbe4,f4075d1f,d62e187e,3a5917a1,55c1f22f,1679e3f4)\n,S(7ff995ec,f776a10d,7a66d62,6095892f,f1e47d4a,2b47ca78,d708a0cb,3f005cbc,edcdc774,5f17e430,cdca4d11,56d08288,e3911d0,e92999f5,cd5c5eac,ca6ea90d)\n,S(3662a262,62234bf9,69b18351,2423ebb5,db78bd6,1cfca8e4,1c0253ec,427d4d27,88a62042,f07e69c,f40f671,ccaca36b,d550ef9b,79b4999f,c41cabac,1c2e1b09)\n,S(2c127c2e,6d9c42e,970e66ee,24a07388,b6b4ebe9,1614b951,1763b414,3f54e8d1,a4773eb8,dacbadfa,afa26c8f,f4adae30,856be023,6022d93a,aae59c9d,fdd6629)\n,S(c420ffa6,116f161f,fd94863a,9fe30b7e,b7dfcb0b,8cf9acb3,7f6d6515,4ac17802,e6cc469c,25c68f6c,8499e9cf,95eda8c1,7fd76d97,2ee8fbc0,79b143b,e50a028c)\n,S(77896743,220343dd,58c2f06f,d3217468,34d386a7,e7fc969b,50c77847,eae3de0d,4350d59e,4408dcd9,710bcd7d,629e92a8,cd906759,627921f8,57054a4d,21fd9369)\n,S(cf7ea42c,1a14dcb4,3334f9b,636ff0f7,7147688f,19133c83,dc127139,349f5827,b9c02c80,166bf9dd,139c2846,895e4aa6,ad1a689,66460a29,f8e951dd,d99e6d9d)\n,S(d1793439,ab1fabdd,ada8ab1b,33c9f96e,417b1c84,7f753630,9d815fa5,a673a91f,ac13d659,3b5941b2,3b19f6f7,f9a67d0f,b429add2,5a40d05f,9bc0d1cf,ced3b3e0)\n,S(bb1568d6,727dde70,c52f5863,133dc9e,54722577,4a74026b,e9864f02,9e92b420,b5654756,268d74c6,cc6adf80,ceee29c0,9e137d2b,e15aafe7,b170c95,22af3992)\n,S(732912d7,83e8a5a3,a7468177,231ba93f,ce07c42d,778dc205,35cdea7a,db877dcc,d34b8388,1b128d23,e68ffd7c,29c7a945,1664f5d3,fed3dbab,6f78c8e,77df80a2)\n,S(c74f0f71,fb8532e8,2c3e1865,1684d3b7,4927b6dd,22504afa,9084688c,7297074c,9da5ea61,c0bd178e,8bfe5a92,dd040c6e,35984bd4,1102806a,53a9f1a7,bd006ac1)\n,S(bd4fa939,8bda5a0c,5a4e9e49,43060d9b,1785a613,3c970aac,91fcbc68,9e3283b0,631d4fed,b6614b49,459be1ca,ccbac0d6,e79cfdbb,f14de95c,5d2a5cda,30e433a)\n,S(9fa65462,733f13d3,2483e0c8,15cb6bd3,e9bc2d79,7b89ba72,f2465c64,a341cc8f,7051fc5b,afc5b18d,748ada32,c4a27151,443505fc,2f14f130,10fa02e2,6a12db04)\n,S(eaea6f7d,ab3dbf1e,816434a9,ddbe53bf,715168fe,2c1ebd4a,6cd40744,c35e31aa,b96962c2,4f202b96,c2080619,ff4ba905,a594b9b0,1f709e6a,76a1a7ab,9784d61d)\n,S(b3df7ab6,3b947504,f33e6d5b,7b8e2553,9a117c8a,497f8751,6b97bfc5,3b17a2fc,72df7500,a35ae6ce,d6fa6265,1a759dd,f11f00ea,9152a5b5,ec51bbc4,9d758b9b)\n,S(ef875ecc,46da48ae,45619be9,950e294f,4341df09,726417fa,3a8d1ac6,c3281bbf,7ab9e204,af4c05b6,d6d0eb6e,8306c987,51ced2c2,b9e8dbc2,8a642bb3,7f1c72f5)\n,S(74c3c446,576a8a3a,5082f234,afca508b,3d748757,4cbf14e7,fc26f36c,70024fdc,73d57916,4ddb6fa8,72dd2afb,f9d8a307,b6ccac9c,94a4eae8,8c4fe8e1,dc136506)\n,S(959c4b2c,409f2e3e,6c020493,33ba2f18,c06b7182,5a664e1a,cf33846d,cf39274,17cab35c,7401629f,b73cd398,dc5bedd,d319919f,1a3995d9,45f42f68,2c9aad47)\n,S(404f0dd6,94195313,1953b53c,67fdfab7,f67c24bc,92fb4d69,a9479a9b,6c9175fb,857c75e7,f40a48d3,ab156085,1d42b037,7e7d3e79,86efd570,147917bd,f24d87b3)\n,S(3e040511,233b0f5a,53df4d5a,b0854137,2db4ecef,170b566,807c4923,6ce82075,f9337271,dd443843,77a35ebf,56753b22,1fda08e0,1b790e02,b9603827,600df3d3)\n,S(942ea853,10dfdc3e,1f7993e7,47bdac04,ecc8692b,94847bd3,e044cdf2,2cd77e6e,bbf2f7c8,e688b6e9,b4510bbe,58c41b1d,f33e9afa,5428ce51,e02e624b,9ea155e5)\n,S(1e577a74,9883a5fb,85593809,7d0180a1,dce21791,e10b2c0a,3fe6cea1,cd03b532,a147662f,856f5e15,dba53000,7278e878,7b575612,d5dcd790,19417ec3,ac41c003)\n,S(ebc9d95a,8a237b64,212e9dfa,607fe4a3,7a05fbfe,7c5594c8,ae472c4f,6ffeaa5a,39406dc0,e311a47c,cf15fb45,8f8b48d3,8fec2fd8,6b4afc05,b1747957,e7f1162a)\n,S(c78eaf60,1afdfc20,2123d228,8496189,b9081637,1fb2c475,2773faf0,63cac063,95325b1,e0c22dc5,df6e84c5,16d396f9,bacb42cf,6c1fe9c7,6df83b3f,3eb42de7)\n,S(b5918719,a1d504d2,b44a3d0e,117c2798,4f2e536a,3571db8,752685cf,df6d34a0,9b01e8cb,585cb7c8,fa29828a,ac899050,16beacb2,5e62ea35,6d54e9a6,18184abe)\n,S(8706a73e,b59fc9d1,92907dfd,cc6f75b6,454f1045,4a5e9584,bdac978e,8e0042cd,8b1b5f56,6f1f78d6,f528405a,2b6a87e8,4265e2dd,1e34c1ce,7109286d,5bdc3a49)\n,S(93e9256e,4ddb4bfb,6f4a9289,6e2ad04,793e5642,3a22230a,e645529d,712d6ca,83b242db,d9b3dfec,3640ea62,f0e3989b,d874f247,90a75cd6,9756a8ed,6eafdcea)\n,S(2dad49af,8702f39b,cb353956,a1d5601b,a24fffbf,58ab527f,e9ac6ff9,ea2ac295,b5af68b8,e6040762,55c0704e,2cace8c0,ed403611,40dc02fe,2773a625,27e4675b)\n,S(5ffc1899,4da42fa4,54962719,5ebe332c,86a2c364,f43b14f7,59710c54,4f6950a0,22eac0a8,79815faa,220e6141,9db053cd,4542ad2f,9ba9f63f,4331ad5,c2c9bb88)\n,S(71be09bb,1832a799,c4e21bb8,a2bb5ad0,324c639c,e6e62b6e,69fa60bf,d41c51ba,c5227fc5,719a5b8f,28c40767,b54eb249,950588dc,c15e1656,e4ff238d,54dda472)\n,S(4f94305,f92799f0,a64a3cb3,7df2bac4,56d661d6,44568277,bac0ed6,6a587212,4c48691f,bd8683d6,b94ddc7c,ad8d1d7e,6baf796d,6d00f344,511fc13,13c054ab)\n,S(55ef868b,6fc2923e,e624fc09,65f61852,b3aeb38c,e2c6b3bc,54b86b3a,60f0ab81,ec198aea,ab16b4cc,5354d0ad,c66051fb,76cff6df,22dc1a0e,72ce6e79,1622efab)\n,S(26ad5590,46e19dbf,e60953e,d40a3958,a357f6bc,23642279,cbcc355,74fdab68,af6fc5ef,906721c0,553c6a74,60bc6894,e5bb77e7,4dbc25e2,184fb3f0,fa795508)\n,S(739fb43a,b1b07155,39c0b0ae,43901bf2,bc051a69,8ee8d503,84fcc1f0,ec37312a,c1223704,3c882226,2d4abe33,1de6ab4d,ff90d6b8,4c0b59e7,a193e763,6c6b7e28)\n,S(2144649d,508cf5da,a7b422f8,22e9125f,d5a10965,a9d32c6c,c299bad4,6616771d,1153178c,e33c445,f03ef96b,35067ceb,76ddeaca,d9ddba1a,74acd229,d01ca76e)\n,S(62cc463c,16ee8e8f,16ea8517,5508278d,4d5577e3,556d3580,ec8d90e3,bbb97072,cd294843,e299c500,846a6c91,c913395b,56b48efa,2f9ab3fc,b81863fe,8a6a891e)\n,S(1196301,33edf190,d14fdb00,640f74cc,4317e1dd,b9dff1c9,707eac33,53ef9c21,f16ab4e5,e3a3ee6d,74385187,6da07034,caa4f519,6106a0c8,3136d21,5420494c)\n,S(b250bf86,3fdaf93f,28f15bae,d9555287,777d4e34,2673c16,2b4a6319,2289adcd,295c05be,de343d28,87d3543f,6b40d5f9,da1e06ef,39fad6f8,28ad5ac1,39b3d2c1)\n,S(93a40bbc,ae584739,9f10945a,72c199b1,27ef008,14e87e69,6f4f46f6,483e7c6c,81ed70c0,29809674,f5f289a4,5926864b,f088e2e0,af66173,89fe8cbc,aa858a09)\n,S(b9e6761b,4e909d75,b17e76b3,4e9825e0,19ff7ddd,4faa9f90,eff8c0c0,f60978cc,640c1503,5fb91270,8881b70f,bf2c8575,65c75e3b,c98d211b,76279090,7b5aa117)\n,S(4dc22812,fe3d9ba4,687e260c,f5b2dc08,ae454751,b022b9be,ebf4360d,10cfec24,9c35ef4a,56858135,552e986d,a4d68056,27f0822e,43031c43,5b2df5f,7f9a90d1)\n,S(431276b3,1127f9c2,406b94ba,683d2d3b,e198e225,23663540,9348286c,4c9deadf,2265ed84,c7f1df86,4b46280d,ddc8cbee,c26d39c8,ddd5b743,13938c4a,e01efb3e)\n,S(75c5b6c3,c99058f4,2b4b81d7,6cfaa917,328f1736,b8788360,aa810acb,3683632a,549f009f,def17b7f,70a309ef,49a890f1,4a5aaa1b,a80f0464,affdb5c5,a8f719d)\n,S(3c900027,205af742,976b1a37,7a4801df,26d4d4e9,12ea757c,815ef99d,cea827d7,e28cff3,37eca7de,2387fa7c,339dab2,7a2446,fe7184c,83c578b1,8649cc0)\n,S(5660f31a,3676b95f,9fa8ab0,d5c23f30,c89637bd,3a8ea97f,3a87aeab,3310d9ff,d6069cd6,6bc4ca0a,7d892ff3,e4d9aff3,955bb76c,2ba3f839,efbd786c,b11c568b)\n,S(2b8b68a4,1b45dc86,7f7979ce,5b71d778,e6733cd4,79af6f61,8cd786ff,5f3babe9,7c831244,d5441b33,c20923f6,3ad9a093,840f89c4,6c1421ab,40ac52c5,8de4097a)\n,S(8635004d,b817bcdc,4b357886,96b3fca0,1d369d4b,303e9290,44229cea,89c18610,2472da40,2bd46e6b,e2f84cc0,5158da1c,7e9f3512,1fc4b00c,4c3ec329,6eb909e2)\n,S(6c991a6b,6eeb4f97,9b7afbde,46e1eccd,b0d39d03,dc64fb69,3a56a234,88cb28d0,1e5df74f,c2cd6350,50277188,d3eb4473,e0b753e,4cd41372,2bc119ef,65c95620)\n,S(acdac19d,4283cc91,b9698ed7,e92288b8,554569a4,962ffa0c,a52a197e,9f41570c,fa536d87,523c8541,f530c6bf,e71742ba,451d41a6,f97d9afe,ea03a520,c6d7b66e)\n,S(b1496ba3,f696cbb9,548b107c,3d28a7cb,85bba7f0,aeb50abb,a3e2a596,465fc6c0,77fb6cd5,727a4a6e,e0fc8f8e,ae807827,487740bb,ff5cc57a,8572ef3d,c86318ad)\n,S(3fd97db5,6098e9ca,fccab31,d6d128e6,c2c9f878,adb07ec9,4d854034,d9b09126,1bd77c36,1494e374,fc45127,38b246f7,24e37d4b,27e14a2,2c0401f3,222b4578)\n,S(5e8df855,f2a468ed,5476d5c4,409c7cfa,eb174cff,ad793338,8982ae2e,c2aefce9,52e73a82,3bb8ca88,a0977184,38701841,d50da8ec,c46f357a,17eb8cb1,36a6845f)\n,S(99f106eb,1417cb69,e95e6fb0,a0fb932c,62021a1d,b940c661,3f814086,c64672bd,9e7fb038,e1e70011,6a926e6,a1c27fe5,e484d843,d184d533,7e9825ff,f7a6501d)\n,S(686fc498,5526d87f,fd11d686,4ff0e208,68bb14fd,4a5c71f7,ac43063a,7e51ef8c,1d28f532,d793af85,bc96dd6b,2e0f23fe,4137dc5f,5b3d6244,22f60919,44588e5b)\n,S(cfa5df56,cc450bca,914f3a85,b370f864,e4c83600,560bfb20,93df96bc,bff6b83d,cefb9a46,bab7ffc9,1b1d96c7,48f81706,61cf56f0,264e203f,78b05f3b,8d37604b)\n,S(991b6b4c,3fbb9693,f7641eed,534e7cbe,8937606a,962a83e8,b39089e4,713e404e,3ffeba6b,be556688,d3b8a0a2,f4b92b8a,98dab79,d5847c71,13bb60ee,be3f8d3e)\n,S(d104c5d3,b9b0121c,58a1fa14,f226c513,2955c4e3,56938bcd,6891bb92,13c8c0d7,8c8399a,814d7cfd,32cea21,85c77738,91ddb00,a091196a,3d90d056,b0caa6e9)\n,S(76192853,a45c3648,749c9a40,719424eb,415a06f7,c74b31bc,ad93194b,e355dfce,31139287,3cbb5012,d7ebc934,52613c62,b5517b37,91475ecf,84ef3745,324ad2fc)\n,S(173304a8,509c1f4,c05b1de5,c51093b2,10c7f9b9,81a7d6c8,8059fb1a,e5070725,43bfbd98,c8e08394,543db2e9,c692297a,800cdc8b,398c13d5,f9e21f89,341d353e)\n,S(aca057e1,d28c5514,107f5b6a,9e46fc95,9eaccaa8,b14d4c4,6b7ae515,bda104a,e17f1717,70bd76ff,18095be9,a4b72b8c,cb00e6cd,23f6d702,4dcba433,e6bf6ce8)\n,S(fb202550,e0098fb1,c30a7385,900a7dc3,85b2945f,60e6eb04,b7e8489d,3476dbaa,1aaf8420,3f72c68d,bd3bc98c,77f473cf,cedda922,dfc3c996,45e4f565,ef9a0f28)\n,S(e95b710c,a0227ab8,e5b66c66,c2958be3,af1aa298,422c501c,8f879bc,e11ae7ac,e645f4e1,ab5cf4b7,da909022,cedd01f8,c745a968,d9ca30a2,c5525d50,9f97cf19)\n,S(6db4525c,3589bff9,605cf203,cced45ff,ab136c6c,ce77ea15,14766f3d,e844770a,e6b7f403,f5f7584b,2331d295,82c0698b,799cd7bb,3c59c903,eb5d6848,72658c81)\n,S(8893aa9e,49daeae7,15fc2959,e4db9c45,1690438a,6964a2c8,fbe73133,35085eb3,70fbd83e,ae803f3b,6377a4b0,265f62c9,bd15cec5,baec8c10,d01c7094,e5987cdd)\n,S(be57f6cf,ac6e8cda,871e3ece,8aa78bc9,2cd9e2c4,8f3adfd5,6e39414d,8e0207a0,78170872,99abf89c,fdcd141d,899aa7ba,8893eedd,36bb3aa1,58120f2b,ee93d5f2)\n,S(77fa6d2,85a01129,c5e05ddd,8d02b5d4,a2f69bf4,5a9e7562,6718cb54,20b34925,315bb23c,13a3d218,ce886288,ec0edfeb,37a2da99,e017b97,ce04db45,326455cc)\n,S(2fed7bfe,8414dc33,62c834ca,767ffb0e,61094ad,978ddd00,b2ea09b8,d1f4dc03,14e5e8f7,aa0b3d31,565e434f,11c61b,63332a60,b6c4cff2,a6de2c5,98117e01)\n,S(9f4c2cd0,5a871ba1,fcb43df2,bf03ee3f,7f8af242,ce8ee6a1,1aeac89,b4d66c6,eb421f52,f2427887,8ff8a2ab,dc384e23,d0fd7df5,fc341acf,83bc5940,be922920)\n,S(53c0e0b6,824a04cc,b7203ef6,e37383f0,15f0a48b,bbc1d3ce,7c8fa7ca,5dbea647,6a9b598d,9246ca1a,539729f9,be809397,13c59d5e,105a8e91,836fd3a1,4d618cf9)\n,S(dbc0cc82,d7906b84,b6b7bba5,433d68eb,bb20fdbf,7b4eefd5,c0a3ad8a,ad17d714,5ebc1f86,23ff2c3a,6f81b090,4e5e6338,8aee42e2,85306e37,a4fc7676,2dcd7211)\n,S(7862af32,a3c08e04,7b1a8cbb,8131d55e,ca93a478,40c52165,af20aa6d,248f5f0b,bb5f6607,6b10353c,8a367a64,587b3bf9,7e8c272e,8da92684,f1efdc33,8bfc15d8)\n,S(d3571fc,800158b7,6ed2bad8,15c93b1,f8238fc9,b8753752,4e44c0ca,931049ee,162dc9e8,3e6630aa,9d0872fa,915af449,70a9e6f9,526bf15f,4d26bc74,82a44bc3)\n,S(a851c894,cebbc758,642b98e5,5df3584f,b9f531da,88faea26,e908b0b7,88589d9b,74702d5c,adfac1ef,71df3898,3ae433ad,1e1af1f9,b5fae0e1,151258e3,b375b422)\n,S(a92e43f4,12effaa,e0978a08,cdb2e885,2d9af1f9,1f0931e,972016ce,da58012d,d8f5a09d,5560170e,b35d7bd1,28252096,535c687b,23bc13c6,bb903b95,d02fb668)\n,S(75cafe44,8b4369c8,42e658c6,4760ecda,bb29e129,d283c24c,9007fb5,f3cff6bb,ca0e12e2,43c73553,1e2affab,51d4738a,db1ea5a2,fba215f5,3c9477b1,b55dc39)\n,S(ab0066,4db959ec,2f17a233,78023b5a,c48c4177,7b6e6b56,a2148453,8c41d006,8cf9e2fc,35545169,f46762fb,940758ad,e3d3387d,eb72e9b7,b5d37175,9f5d8b31)\n,S(27510ef8,2e4b2134,180855bf,469d1f0,f89b9afd,573f2781,4a1bea50,9db7ecb7,20fe00e8,86b54c06,1fe07355,5be99fd3,b0a1b20c,dec68aeb,90055c34,acfb87e1)\n,S(773ff5a8,d388277b,7921405c,99c9c207,f4a6c2ee,3b59ac1d,7452c8ca,4db16d3a,cf45e631,f51cc65b,afc806bd,87318e3a,f75caf,3e734284,8d7435be,f8a52f8e)\n,S(2f8f2c98,e69ebfc3,b7277e35,9da1a8ef,4293fc37,2e24386f,e14cc455,1ef45746,f85d23ec,c4dcaba0,23c3e406,604aaae8,8150a6c8,feea2c36,42ccad40,9968ec06)\n,S(1878acda,ab8dd0e2,a0884952,26356ce5,74575678,64da41c0,61a83de9,6277f67f,412c868d,64e092c,ade96f05,bfa48af3,ecbcc128,e6d09bb,9684565a,d5477020)\n,S(8cf281a,eac4e4e2,7ec4f3cd,d1373f62,c5a17b0f,49cf69c4,cad8c4bc,4f5618c1,2f17f995,29c9ea27,cda3911e,de33029a,7dbf09db,64ffa625,cd9fd86f,29ed5973)\n,S(3a597c9f,f165369e,5d90d191,3dc2aefe,a0957936,717f1ec3,9ea20698,d08939f9,8c2203b2,90c9a2de,5b464b0,988e07,a7b48c86,f5891926,da462b4e,b00a14d4)\n,S(cbe3205,96f10ff,5de9c861,55290393,b9ceec90,bbac68ac,5054facb,950ca15e,446cb06a,b76aba12,c32b4855,716001cb,9bf7c72c,ade16bd0,5472b947,4fee27f4)\n,S(4313c9cf,8224e70,18413b09,e6544731,1cde7100,5ee60bd5,3a8db041,56fed594,dfaf359d,d3045a8c,b181021f,9a025208,e80bbd4,abc4a331,7ab9d735,1b329a96)\n,S(cead2b51,f8d8adec,2d89651b,2da5ffa5,1f5cbfab,19fb7688,2bdf0faa,bf73c60e,ab2a2480,6992f0e8,c73e7932,2bf144ae,6dd3bda7,ed2d221b,f8451ca4,56a25897)\n,S(9ce75c8d,848762f,645164b8,45ee6eee,98e34dad,9f8be0e5,2d8f27ae,4a7b79a0,e0556d4f,e11ba906,6b97c04c,8b742a26,9f627559,b9163571,d0a29dbc,9aa30a05)\n,S(6024489c,621de255,f92106bf,8c23847b,10214b83,1d653a9,6ba00889,326741d7,950eb24,80a90200,ec932621,6b82e5e,abf63e08,6626faa9,b1fd8e2e,104ea858)\n,S(d3c746f0,108f6bcd,406c2638,c07255fd,1f55e1a3,c6845e11,546d22ed,5f08e51d,d124dbe5,d349c739,e641a776,c57ef3db,35ed4e1a,6ffc165e,25d0bcce,438dfab6)\n,S(a1eb5f5c,d85dc222,f97b9e11,e08594dd,a69c69f9,bcfa4c63,52cf2717,136514b8,46ed3d35,a393e017,76247ddd,7dda3ba0,ff5e3f76,30253b68,750a7c,f8a15fff)\n,S(2b24a357,fa3ac2cb,faa5f1c6,1c14147c,e4406556,b82c7639,721f7561,485a8736,d67219bd,707aad55,1a8fd7ae,d5721d45,ad192a5f,5d0b643c,18330cd,1bd73ade)\n,S(9901a1ab,9dc60159,63cc9cfb,42ecb41a,ab6a623e,62e9f306,126a4f6c,fd87b2ec,8f766594,17cd7f2,fff7a3df,6cb414e7,eb5950c1,ee265730,633ccd8f,f0339317)\n,S(311e8445,5890e2f1,e1d8e600,37d58c83,28a2a4e1,b21c3763,4aeb9965,8477e8da,cf593f67,6cc75762,a1b0dd00,f6703bc1,e017e927,1e61c829,a0459056,ecce030c)\n,S(905f72e3,97140f6e,298ad8b8,c8faf66f,122d27e4,6fee88b3,67a8ecc7,9e83bb77,c03f155d,bde9c265,d90b94fc,1b5b253a,2d98528a,a12e19b4,698714a6,f1b65257)\n,S(61df77a5,d5940001,2fcc2f02,199cbb4c,39eafd33,27dc85e,4a3f55b,a339350c,27c88b7d,de9b3f,73b0603f,2d6e40f5,f3664020,8d6dc05f,684626a2,d9049161)\n,S(e1f8e199,886d4b1d,5dd6af90,6eec06c7,de36dd4,ef026129,5bc42bac,5df18c28,502c12e9,b956eaf1,2865bc4b,ae7e6348,56a98db5,4c65a5e2,9ecf8ab7,51ca45a8)\n,S(ade2f5b8,3804a21c,7dfe6a7,7044cf96,9180e154,79a4aac1,9b686076,fbb8565a,d0d65e1d,7c8168c,308985d6,f5d267e5,98a9e6f6,45715eee,3751bc26,ef066aca)\n,S(c55820bb,154f972,ac345dd5,c62880b8,9f7f6b85,a1755b88,ea5821de,6f268187,911b0fea,1e6ca659,263b698c,8a17488d,4dc35f5a,d817e7a2,1241e56b,cc613086)\n,S(ea20966e,321020f4,53964352,b8ccc2d2,1285888c,152ddd08,9f7039c6,6c7778b5,c942f591,cdc81e52,6abdc9bd,643429c1,66f5476c,dde18d39,59e29f26,9f4fc18c)\n,S(3c57552d,9c2dfe5a,67301bbd,3e1ef84a,220c908a,8e80c707,9f9f4df4,607e2bf5,d49fa0ff,bc4a6397,3e71a0a1,7265ff65,6fd34754,ed508522,b9f0200b,e71f39e3)\n,S(f188ccc6,e1043ec0,59e8e133,94ada165,a3fd5c0b,cf7f071f,eb5a0951,9bd4e1c3,5f1f371f,e53e79d0,2d6fb190,8207649b,db045c41,a2fe1cf,94486053,7bfdbe4)\n,S(a0145fd2,7e72232e,8055a146,aa7bfb49,447112a2,d1ca53ca,d4835e42,c11c8c6a,7bc018a0,e5e70ccc,c4bb675,f0709cb0,ceb874bf,22c7ecc5,243e49c,3de679cc)\n,S(53400de8,c221153,1fb85706,b558185,c17b7bd8,b17416bd,9c93df80,f16ff48e,e1228e47,3ba565f1,e50840b6,a36ea970,2df87320,8a66a44c,89cd33da,41a6cc6f)\n,S(82115d2d,9d37e3,50ce3482,1d59af85,cc8960b4,52b99904,8c6c6674,ce64b1ac,98deaa09,659a0c24,4aadab0,3b9d1881,bffc1b3d,e9226f05,e75fb9ef,b61eb048)\n,S(273d8c18,53d86f1c,c49e6e9d,450dce26,8669cb7c,3083968,1fc17894,59fe7c3c,6c5531aa,8ad026c8,174c25a2,51efbadb,14974e1f,7f7f88af,2e16d101,c2ea00)\n,S(616e16,a7e38191,70e33f4f,bf428fcc,41e68ccb,5b059bfe,4036751b,ba5ee319,7dbcad21,182a3efd,b99173f5,cca99374,7c7dc3c7,3e8af2ea,ba84b0e4,f506748a)\n,S(6761896a,76a39812,1f773402,d033f210,dc566610,275f6774,52c37c01,60b82812,7fdd01cf,1b40939f,8091184c,8e2c8ce5,11848df1,a23607eb,e760782e,67302c9b)\n,S(77f7abaa,e97605da,12535bd9,e177b6b0,bd6eb020,92345fe6,dd4a6d4f,89e508b9,fb04996c,cc7b830d,fcf5fd19,bb7c9332,dbf20fa,10d61231,889e4b65,cc7f0b9e)\n,S(c12f6717,3a2e2bba,3da97378,501f9cf1,bc4b4a8a,67b0c5a4,a0d8caa3,98bce311,de930986,44d31401,510012aa,3b6cb541,97cd133,6e583853,a330319f,779a47a8)\n,S(6553a2de,19c7552c,8db9d268,ddf3a034,4afe8ffa,a76bb304,ee77ef95,c18e66aa,91a72010,7c180bb7,2af4dbb7,752d374d,69f95bce,c9bbb7f5,37377060,70edb93c)\n,S(f54b4be,353f4185,22e2e936,3400caa9,bba98023,e6a3d3ee,c1fc5046,b7b834e3,96be786c,bdd5f1f0,a835afde,219745ab,ab6f78b4,577d3a5,1246437c,8e96f17e)\n,S(c2d317c2,a0fa6522,bbc806e,45b4dc8b,f86be37c,4b677c64,c0d5b4b4,eadbb2a,c5710969,bd68cabb,718cb16d,fc9994a7,100f078d,4a3aeaf5,8e8eb35e,d313ab6a)\n,S(52a567c6,a5b8a64f,dc74b9c9,57f5d472,cc43e143,4136fcce,fe1ff313,1b89f384,332631bf,a314298a,dd45f7d6,b8192956,d7de27e9,7d835d48,5c16f7a2,9c9e8f53)\n,S(f7dc086c,891a4412,88543527,831247bd,3530f0f1,99b4c5e9,8d24a207,1dba4e20,734ed712,452e59ae,b0ef5f75,10485860,da055003,ff1067e7,b82de345,b74444aa)\n,S(954f9fa9,7bb6dbc0,cbed8d8c,de6f8f75,b3f2ae51,e512cd3e,90520d8b,22ec06c6,b65b43bb,8bd9660f,4bdb3017,bb4f8214,5426f614,8f04378b,f65c39db,185dd9bb)\n,S(20e69b98,41416588,20b66947,f775cd96,6def2dbe,416b545e,8188db14,2604e87e,e6514659,bd12b9b,35ae45a3,d43f6023,dcce04d,87df1f51,caa67f89,28632539)\n,S(5cde5b82,2dc42f04,44187fb5,33029577,71bed484,2ab39dc3,709e7c57,c72ed1c,a0f7bad8,64e405b5,94416e7,53fd6137,cea3dcbe,7625fe41,b4929299,a9a0ea9f)\n,S(b586cb4c,6ba6b0dc,2aafd03f,49d4d6e8,45b20460,5de71c34,6e73b131,fb26421f,ced613e7,c26ea3b2,a31de623,506afb86,6767b469,98bb116d,2b4ac9ab,58948744)\n,S(7d3f6170,35803a82,c8e13dbf,a8d601c5,4e192a54,377e4a8b,2a2a5de6,90ba6ede,138e810e,62f413c2,fb56477,80c0bcbd,77eaf84b,e78e900f,1969f4d5,2ec6cb15)\n,S(e7a314be,fc4af863,e7fe6713,5304ab81,c9fa32dd,80fa9b41,d8577ec2,8f7eb925,cd978600,f0e04acf,fa99b6d0,7da970c1,13ec94ce,c50808fb,91a44f4,80f3eb1f)\n,S(179c3be4,9f41902e,e21cd8e8,10f0dfc8,ba5fc0ad,9e454231,ec090263,d3c6a577,75f9f60e,fb9b9aa0,29eb03f5,a50b7e4e,64021689,a4e889dc,5b9ff0cb,4c9cf184)\n,S(10a55871,464bc182,b957808e,25754fa5,8d76269,5cf8c6f,e50610b0,91e6401f,d36493b9,6d2bda2c,e305c679,f906ba9e,99a787f2,aa8cb8b3,29516a3,41b56ff4)\n,S(4a903722,5e858c84,15508d45,b31ec7f6,585827a2,f3a9c99f,96af3e9a,e88e555e,da4d45a7,fb9e44d0,cc52463f,20fcde14,31c9a477,d02c464c,70c7d132,3247d145)\n,S(6d109d8c,2505808f,7b4052d6,b170ec80,c68373bb,e02f2b62,1cd29773,a96acb3e,c8dea0de,511f6e40,5141088e,cb023bff,200c870b,9cb952ad,c5038b28,eadc9a57)\n,S(9c219898,6d202467,c055c734,73557505,6105b3e,2874dbf2,8f7f0c39,66e1af88,8637496c,8eddff12,f9dd4146,36565e0f,efddf5cd,52d48455,ec9fb2d,8dd0914a)\n#endif\n#if WINDOW_G > 13\n,S(22ca5039,e660f60,1036dd75,2bb973b,dcd104b5,dcb8f2e7,4de8edc6,c292b03a,86fd4471,1ef6b81e,4416449a,708fa0c9,cb6731ba,c403e58e,da5e915f,646b11e8)\n,S(cfc18f02,cc004640,f2116fdd,1f6ca202,2e39be25,df75e27c,80bde842,e6b6f938,d62b58df,4f79d0e5,97ba2923,f708cbe5,c09236a4,d9d01398,6451d684,6290df7d)\n,S(3388bcc2,3425458e,991f46ca,6235c50a,57490556,becbaf25,9d3c14f9,9a80a087,7d4aa2f8,6f65783,1c22316,6958fbf3,6c3dca5,d4ac413b,3102e13e,a645c016)\n,S(d26bd013,1b8c12de,3dd8fefc,136d9f95,44ac963d,4cbcbaa8,2ba941e,f0b46a19,66f89ea3,31b6795c,6b694872,4cab492a,d045a7d,a6780653,cb10ac25,b68d3a99)\n,S(dcd3370c,db67e8f2,163960ed,fef5f66b,465a03d4,d447f5ca,1d99d29e,57d1fdb9,8b93747a,320abf87,2cf8d448,393bf732,8a9eb4bd,9b64ded9,922616a7,347084ef)\n,S(74074d05,e602ad56,337105af,59c63819,21d449bb,3fe0806f,80589f3f,4f8d8e7a,1a4d4bd4,adee80ad,44fd515,a1dd5236,bf0dd8f6,c44782cf,e19b8414,b03d574d)\n,S(a89cc81,f3a23ebb,6a8df438,a78092a9,97120394,d6bb4dd,732373a8,2f05c174,4b6f83dd,676df063,4e5ddc9f,db979dec,326a9ce7,5707fd77,873a9644,a3c4fda4)\n,S(8f1a10ba,fa913f0e,1902ae36,b07f964a,6443c540,b60ace03,7dda380f,6616424c,1028d644,45c177c3,24416ad4,e740f31d,14e3a462,d5a0326e,86998555,5de5525f)\n,S(ad8fda79,14f9a236,a7957268,ada499ad,9154a2f8,478fa6d6,f4c74048,89e27b51,9ca1d2ab,1f7da6c6,f76deffc,5c3c933,703b74f0,26063834,6174e4be,320e82ae)\n,S(6c6e990a,797b2970,4408cc24,6f238e2f,2192700f,e4fb3c87,4d15e32c,fd67fbe7,1ffc1798,f355659,9fa5b32c,c040da31,39811b87,93d4d9e1,be83061a,3f91dac1)\n,S(202b13ea,31ad2abd,9635351d,e09f237b,9f86f75c,a340a47c,edc1f9a3,25118969,c52fb505,a14e37f4,d5111184,ebc81873,868a4521,700004c0,fe3cc535,181bcba0)\n,S(5355f0a1,25142fa,b0dc7c7c,f9855953,34053c6,12326f5f,d2284291,d7b748a5,75bbe36a,553501f6,c1c8ff9d,e60ee3ef,9cddd36a,781c518f,4b1ccf17,7e281949)\n,S(b8852d78,eacbdec9,d1cf1664,4a83aec2,79a39ab1,34706235,f913aeac,c29829d7,763bab50,52b3c61f,ae42735d,2e89ec3b,8d51eed0,f729e0fa,eb431613,df183156)\n,S(cab2e44b,294df78e,1c17d4d6,a09ecd0d,696d18e8,b0f188b,eecced5b,7057ae2,f351b09a,501a499a,ced49607,c55b506e,de28bfad,5b20ed5,4059a068,19ff2f43)\n,S(1400b9c9,9c6d555a,2bd2355e,b54b756b,b16f9f36,b9b86658,9d46853c,57056b31,8b290816,62f41167,a0a6993b,3d4211df,5709b91f,96f24436,e569c32a,dfa077a8)\n,S(52ae372e,973e9c1c,687ae7a9,a111446b,b3d31b19,5588d8a5,fbec6e6,bfd9141e,f982b40d,e6d0e42d,b9638721,a4590db4,1f87cfcc,d8ece56b,71ebfe0d,82351ccb)\n,S(3d14ffbd,40824625,be241e14,850dc030,1139b708,b937f2e0,fe5f65db,61899c24,b10a64fa,477ee047,4d9cf16b,8d2213a2,799882ef,d3766872,981fc761,88a1dfb7)\n,S(c6f52adf,54e0c197,a8bbc270,d4c987b,e7ab3fd1,a95fe46e,82415ecd,baa48930,7524c06f,b53873b4,9050281c,99fa44b,b9ef9193,2adeba8f,77e5afd9,3856811d)\n,S(90089264,bdc47cb6,7a3c838a,4c79c1c0,5f2d1dd8,6d18f55,9fe60a3e,c944c1aa,18963846,d70b3226,6a9d582c,c430e4b6,ca140bcb,91de7064,eea0fb39,d2ee04de)\n,S(e27c24ea,478b37c1,6275b2d4,ce8212a5,2db74166,96f3c6eb,c1bf7091,efda0662,27ec5279,c3a267cb,fad532bb,5031791b,bb99f4da,fc3b7b7d,8537cf09,12783de3)\n,S(ca5daa12,9cf1d6eb,70025d85,7955d3bf,2549b8ee,6064092b,917eff84,c40a3eb2,682d4905,500f6f7d,33e7c7c2,7d420b4b,7c4aa5f2,77b89e9e,f6a84259,de7a9811)\n,S(9069ec0f,2b2ac688,46623fb5,c89d1424,6c98ac5b,4250c170,4871699e,fc877f55,cc500ec4,eff83712,16c0617e,e2407dfe,a6c3c3a8,c8b80266,975d3a56,e71fb05e)\n,S(5fe1feeb,bd5ee1b,6ba742d3,c5e8aba0,536393c,592650f,b8cb1391,c3bda16c,db11b327,1ac64ed,3425ba06,8072f76f,ea02ae6a,4375daf5,3bf942b7,9865a34b)\n,S(a4a91a5,f168f883,49035b6c,f90e4e0a,6bf2602a,85e0ccb8,31866c4a,ac1b2c34,5bfeea8,fe36ed1d,18af2ff8,e2b898aa,ff7265a9,c08f4857,ce082030,7f837596)\n,S(f4135f36,f0c35b52,4a870505,4eaabe4d,43f5366e,d3c7d9e3,5f06f746,fa884849,1c6707f1,b8b6c078,b4d9d0ea,43075d75,ba1a5d30,c3a9c52d,d55fc4b2,650c526b)\n,S(d5a8998a,9363fbae,d2b44992,883e84b8,14a504d,92b41e0f,dcc3a9f3,94380203,96016b03,6fddc805,8bb8ae7c,6d46cd7f,2f20c5af,a62abd4b,bf9b3da,ea60e9fb)\n,S(8804ca34,4b30dbd,a07fb62,210c1938,d50297e7,9910dfa8,cc38b9be,4bf3d176,5b64bee5,79927c63,7788c55f,f3871631,eb65db50,b11cac91,24caede7,57d37b0d)\n,S(8691c1fc,440c21b6,bc48e78e,78bda5a5,c947c74,7d098e74,ac5dbf6,2b811021,fd8ec1c5,35f51181,556c330a,f02a7110,682f4539,f66c1c09,3d48bca,d7b1787e)\n,S(445fc1f6,343be2e1,fdebfe3f,894e9293,c3ee5fab,b0ed01eb,58a40637,ef093229,857f17fe,6737f853,d04aa1b7,3eded13b,c3c087f3,48da90af,32907bdb,7d85b605)\n,S(5c397fde,a657d1b0,b2e3aaf9,5b88c4d6,af1a5555,a1dcf966,7d1c5001,a76493b4,9ce74820,7b6f3c75,2d736aee,6a9fc54f,ce5cb52c,f487fd32,de79a06f,df0aff0a)\n,S(9b5565cb,28d7e028,361d2bc5,bdfe1912,d9f53584,372d30c1,d7e36fa4,c7fc1b7e,7d5cfa8d,2de2a832,58a57f05,4e3f6c6d,a23af075,d98b062d,82799b11,63879eea)\n,S(afbdec63,1bbf870d,3971b165,71bb195a,a5229a9f,1012bb4b,89654da3,c9194f1d,cfcba749,b9492525,f9874ad1,bbb0a267,83fe5714,1f54316a,773c2453,8f27e296)\n,S(7712abcb,ca3a5347,5cbc6160,5e9e9ec7,a7cc11c6,2c4b3f4d,e01d688,acad916b,7b91c9bc,eb12555,ad2b43af,8c3bd332,b57cbbfd,1ffefead,c68f0a2,6a4b82fb)\n,S(3c452346,f2935e41,2e5fe506,fdf5066b,11b43a11,66e75c9f,7a2d38b,1ca2b7e2,fd3f6de1,27f96829,3af532f8,d4811fd9,e02038a,352b6696,2c608c7f,f59cd800)\n,S(bd8582f,b4dbda3f,c7da53d6,70c994b8,e04eda44,ddf0b054,7d182db0,aa48b7be,799e2769,c18268bb,8c16b282,ee7d0828,ef0dc4b7,9767033a,d6de8c63,45285c68)\n,S(c41010a7,8dd9dd40,62bfb71c,1691338f,befe03ea,d99eb719,74dce6cf,b2c84112,5008c39d,e71ebc22,3b1c5dbc,f824a63c,f270f807,3143e08d,29b162da,42a2ff83)\n,S(e89e807e,6cf4ba27,6586a6,a509bc8f,f786bc5d,dedb5f4a,1b6253cc,2521d311,aadecb79,7c4948de,9379fcfc,4c040029,2228f9c1,c099117a,ad6d9949,f2fea2cc)\n,S(363df1b3,be2dbf90,64137919,51218c34,84091f73,866f3fdb,dca1b90f,dcb08577,aefd04e,5634e36c,49621493,f7e76f20,f9ea5b64,6309a605,7e3bdf0f,75848bae)\n,S(5c8d1638,83d2824e,48121322,85cc44bb,ca8fe33a,34d5c3be,cd4a3c8b,c78ea16e,f66f91d9,c7ce66c0,89500591,49f7525a,355347df,8f31a685,872aebae,1ac0456f)\n,S(10ac6676,83583ed,d837789e,ed9254da,4181dd58,be75dff4,8085e87,eacbe126,6d3eaade,23f3e7bb,7465acb,c6b25af,72e0dba0,1815ea1a,1f57ebe,bb17d22d)\n,S(1e79a1ea,7bb65540,44567796,2208ea3e,974c4c0f,9b61f7da,8dba697a,8c153048,b63e3d79,20a34888,68987406,4a8008eb,e07d35be,33a055dd,394ef2a5,f0787fc4)\n,S(db0d1c73,97b0a23f,508df2ab,b00ff13e,11699118,11d6476a,7bebcd09,53fa9a5b,1c9d0877,3ca74f1e,d1972431,2b5c8eef,2f85fd41,6629cdc9,d0b9e328,4900dfe8)\n,S(e1fdd7b3,481ece8d,266bdc22,92e775bf,96904223,e620f622,3a03ed,cb385f27,3cfab39f,28953ff7,d6dee65,83fdc6a7,d9b31f93,e2103e6d,9e4066a,970a4c77)\n,S(96797134,2b69bb8f,3d6701c9,22130c8f,9ed85fe5,bf189880,3b2df11a,a223ffd3,2d43343f,630b6f9f,7c4b6d93,cd29a3e6,632c0dc6,c095794e,5997e47,e631d31)\n,S(dfb40218,6e27d494,c69d2a0f,399dd480,ec0a776d,9a99fba8,cba81417,d9c33efc,332d91dc,e9f93273,15e45bcb,79603050,9bd8501c,17820f48,61f7b12b,5d37796e)\n,S(6b65c5eb,ed13dca4,51608da7,b5c1a331,171de004,7fbe35e5,189b8468,c27681ec,afd0ee8,e0aebc0b,2f246b51,f6fd4f85,3e71fc4d,f5bb9f43,e2679c8e,89a34f62)\n,S(bc1c3da1,60b03965,e26396aa,5d426df3,21e5c22,fdfcd004,80a390f5,28c4b619,fd657174,65e4fea9,ad7862c,422c11b,86ad94cd,35acbbc8,76ed464,aca31640)\n,S(589b1d17,96d6ca35,53f8a6a8,cbc587e1,9026406,c2c6f8e2,de613dfa,8c05913a,e655d5ec,ac254f46,e279365d,e3bba2a4,3c7b6469,da45ec87,9742cbae,503fb3e0)\n,S(9e726385,6d1e6c2a,94dc2ef5,c92d94bd,6ada63cf,cea75677,6125bf98,78ae4ed5,8c238df5,1e5b38f8,b628a48e,dc7aa2b,a83bc40,43c91896,69f5341,60e304dd)\n,S(12269d78,14e0f74f,ba40c551,b2080e00,4f9bd3af,255218d5,7eab5dbd,c6764263,f0f70bd,6584975c,106febcd,bbd16920,daee58c7,c22dda70,4a95f864,e385b3d6)\n,S(d3212f2f,cc509014,e0c48cdd,6273effc,5c73fdbf,1676faa3,15e9173b,573088a6,39af39f1,673f51f,362618c8,49c6934c,ff59b6ea,853fafc0,9db64084,4832df82)\n,S(c535f72b,9bcc0bad,44014e72,4f649623,4ef288fd,9f42adcc,dae45a20,84250052,3f79985b,6fb7631b,62814a17,f7ce829a,88447302,293000a7,4655c7ee,4a271022)\n,S(4f5b7126,9b169fa5,8602bb18,60ed0df7,271e3912,ec0d7c12,1c80fad3,93399605,b60fc104,7f2a58ea,9102c6cd,b97c932a,576f63f2,6204fb5,dbe41363,cdcfd0a7)\n,S(cb459b3b,244c38b1,af2c2863,e0029c14,ec70e7d,737a7851,de9c8f1b,b7d5d065,7b67b15d,3c0376c8,2f646241,1e890b3a,a888bd15,692c90ea,53a74a4f,1957fbd0)\n,S(787d61c7,ebde0c5,18f121bb,7f434196,d389f563,d1a46597,ea72a1fa,4e19054e,5baf56f2,5fcf8cb8,c271cf39,6b3d150b,f42e9ebb,d72b54ba,4b93bcbe,ae72a658)\n,S(c38afc2a,31d0b0c9,4b77d97c,bd639082,3373538a,602352ba,cc93b6eb,c5f6115c,b925dfca,b138fcc2,4b9a26a4,c645f8d5,875e098b,d2e58469,d842688,43ee529f)\n,S(37661e3b,8e606e95,b9dc6ad5,e5b9b25f,39a5dd0b,8ab7a82a,d6ec879a,ff406d0a,ab735e5d,430d8fce,1317e07b,d6cf9441,60d8bc39,132382a4,df1b1638,a7e9b977)\n,S(e5127851,b8c22b47,c3d8e934,8dc0c677,88ea5ad9,f64e6062,abd68a16,51e256ba,5847f77e,349eb7,90b4b7dc,5537ffa,5b1e7d4d,b87044b3,f947f387,270405c6)\n,S(f3c7f45d,a6b8a8a1,3713e7cb,7380fe06,127a3698,520bb41,955647b9,ad7382e9,2acf9a11,eb1b9d31,f71decd0,90093677,4b469301,719d4a51,ddfe5fbd,f63e7c87)\n,S(86de4047,e8d5b252,523733a1,848a990a,79125f95,3bb0e4de,ff4b2f0,84d745ba,71e6a472,dac005d,2b284cf7,d5de92d3,56921105,1a9ee007,4279a746,71bc969a)\n,S(c6115c30,72259d66,d960cd96,3f3aa16a,3029d9ca,c0c5ec63,5e2875c2,f3f57504,18d690d0,b33fdd78,d797f56c,23c821a1,ced02401,3443c770,50d12850,9f7a712f)\n,S(cb545099,8b43473b,91838cbd,76929b05,8bfae0f1,e2bfbc6a,c61d3674,42f53c5b,4119d74d,79e34f08,cd7684b4,f9b9df55,c00ba8ba,7bfb4ddf,de38db78,91572bbf)\n,S(d0dce704,b9362bb4,fb1771e2,660a98a2,a333b73,c6d09372,5a752f28,52922d2a,f92c3b70,7947ce0d,f1f3891a,259cc2ee,124d3f54,a4c518ff,de5a3915,96e37e47)\n,S(db93e238,e5aa5986,38eab857,655cc53,d4270259,e7d73a96,249a19bf,216b20a4,8d19dc8b,670e8eb6,50b4f60c,d26ef657,3ab17895,c62fc94c,815d7eb5,fbbcc7c5)\n,S(c387c37f,d8cebef8,29e07e54,b0796129,4d6c6cfc,bbf11835,ba85d4ef,68c3f486,852580d9,ae7eb300,6ca0f7d7,f12d7fe7,c8e3ae0d,b6258897,994fe78e,11ddeda9)\n,S(ebb58d34,f04de551,37c01b5b,192bb4b6,4d3b22dd,23ad9092,f943749c,7606c232,1b979d05,9c99f9d4,db1d3e82,905abc9b,d92ae72c,509c912b,c59488fc,ddd1ae16)\n,S(7891cc66,acfda29b,765810b1,730cad13,2f13178a,fbf238d8,2525ce42,96e38e6b,22193729,20188c6c,462987ad,7ecaec3,a21ff6e7,db00adb9,72facf65,367caaf1)\n,S(c0b02542,e4bc1e8d,2c2578a5,3793fd8c,acec800,c0a311f4,72c50de3,5814d081,24bdc71,f5917c0,1ae6bb5,71c09197,76b1a884,ebffd673,13698bc1,b57f8371)\n,S(ea15d574,b8704507,f12fd9a3,e40ea603,c2000cf4,4eb3d4b2,f07a36b5,c426d2dd,b6596d4f,4d8ca39f,4e0faf58,ab7e3894,c5cdc16c,589a524b,6ca25a51,8a30944e)\n,S(77d387df,c35a6af7,b88d5726,a249d34e,70877698,1358c672,6e51b779,cf9604de,e5daeecd,2d70a962,d2d3c235,14fa2b1d,45916506,de017249,93fcd9a4,f08b4a87)\n,S(a92742cb,7d1a24fb,c1a4dc2f,9d6fefbb,1064f9d4,c3152db8,3296a9dc,9dccd7ec,665a9cf9,8cdaf0a4,ec346df6,823f3c6,66d4f163,b3e7225a,d9d18e42,31679f76)\n,S(253e54f7,9f0c393d,5d34053d,37b55304,f62de9da,29e0eb6f,36cb105f,a6316a46,54e168cd,ed78ec0c,32a9417a,c5b27ef0,67c8577f,8fe0bfd7,b2ae33eb,ce7155e0)\n,S(d13048e0,e9c38720,6179586f,9e38029a,55fc01c7,b33d8443,4ee45cc0,3fbf2,7c4466db,94502477,85490689,7b251c39,af257840,b9bc61e3,64075080,84743f37)\n,S(e9234110,387c2122,2887d079,7bdbc9aa,a632b237,2a5632c8,8e604653,70a284a2,2b98b08c,4ca3521b,4ffb3afe,66f98ed9,839a2651,f740f63a,e80b0cfb,6f6523c4)\n,S(302e03a7,ab6978ef,73891a5a,7bb25764,7428341c,94f8a713,32ba9dad,83a29be5,4abe0adb,210c35be,b2ee850d,2e56bb3f,e8430db,644082ee,a98a2f83,5710120b)\n,S(53701389,44400f30,dca0571e,eb0f8c7a,4fea8bdc,31d68859,8d7cd156,11665368,ca345664,39c1f221,a5731bbe,5a9a36e1,a712e2db,f16a6d19,71b1a74f,eaa97cbe)\n,S(8c0e8186,645d7cb8,fad2b6f7,a5a2d399,656aaadd,5423cff4,9579529a,f28383cd,2ef275ea,14c44981,9307319d,18fbb482,63c6d24e,c94e18ff,cdcd7757,4c48d27f)\n,S(64a70831,26baa3c9,a11615c4,5ff8ca99,adddc512,c697901d,afc43d7a,5fad8af5,ba43c48b,59a65f6a,c3a45c35,4bb17968,148efe4a,288f742c,43253e70,aafe29d5)\n,S(fdbd066e,82ff8e24,b2f785e2,e166245f,63559acf,b4f56680,51db47aa,5d438e06,60dadcf,a19ed8c2,376a5d38,28b9499e,875731d5,b2417def,144e2a84,12973d63)\n,S(b287ccb8,1ff90731,19ddba01,d9461512,82cf15cf,2dcb3e0a,f1b26f41,eead174f,6ff15339,7a9a0bee,4b38a463,5db66ed2,36d1beab,c0039bd1,acfbdc09,fb74e090)\n,S(18047a48,b65234a4,fa5f2188,8b3032fb,3b3f8457,1bdec3c,962d5cd7,fd068116,13627669,18198832,306c5444,6cea5681,80134209,101a117b,1f34e15a,624574b)\n,S(f1d3b54f,be4e2ce5,88a2dd32,8a41e136,6b74ffe9,5bd4aaae,ce7e7a8,235f914,37c25d41,300e817e,b4ae1471,e8486232,c0c21165,97efe33b,e86d6277,a8a3981a)\n,S(9b0da9e9,5046dfab,7ff509a6,10ad56d,9770da36,c5e22a83,9ce3a36d,853bec4a,27d60345,30c25a36,e80bbc3f,f43829cf,df757c19,1a2924d9,6da77503,38135faa)\n,S(d0833bd9,5155d18b,be55d40,3717568e,2d3e4d24,f2eb65f9,f13d8d65,d899c5cc,e509aec3,b5044ab5,11fb1e4c,56db7146,ffeefb82,ec4e9de1,3c473bc9,964741e8)\n,S(8c41627c,185f17e4,28a01b40,27980e6b,ed62ad62,17c9f8a6,26c329e2,2fc37117,75ca226c,3316a552,37e8a1e7,483f73ee,a36da441,c732dca7,7d95b7b9,3a3662f7)\n,S(371f0105,e43aaa30,5cc7099e,9a13b97c,2d75c26e,5b50b11e,7cc6283b,27728d27,c969dbe7,d0976d68,8cc64312,4538ead,b1194426,cedf149b,293b80c,6ab3ce99)\n,S(5102f59a,4238a358,f8b4d3a1,85d864c2,d94aeb83,7a8f3e03,541ffbdc,2ccb1710,9e14c4f9,adb63c3f,4cd30606,cd41cabd,bbffdc3,89e996ce,91522093,85ef1445)\n,S(ca21b6c,fd40403c,78353c7,836162f0,a7f57eaf,bd4a8cc2,6df2baa7,1ff08beb,108a3c46,47eba55b,3fd9f2ef,751edb0f,d6b68482,1424bffe,e6ae3e58,1f7f12f9)\n,S(d9cd44b3,ff40d19c,e8368bc8,200e3dc9,7ec3642c,acc40769,7c94e68a,31d775d9,b6b6fb6c,683ef701,d4cf7101,79de4af,fd7c4a1b,5babf3cb,85c95eb,485f0901)\n,S(9a1354b2,cbcb6888,bb564426,71bd4904,510da508,3fcc61e1,4fbdf44,15a10360,3f5f5291,707c48b4,4da3a2a8,93e24037,bc4927f3,81dd9b9b,710e8b82,874f953a)\n,S(c5e55e0f,271a81c4,ae7deb0b,ceb0fdbe,20fc60c5,38692941,bd50ab9d,ad0fdf79,138a0f35,eab49301,7a53e7c,c62ae93a,85ed9e7d,708a00ae,cb10776f,fdc83a63)\n,S(5ebc2f64,7f66bd3d,2290e4dc,6cc5f662,7c67ea72,599d2c6,9a004aed,9060f919,68f7dbce,df2085e2,27cf7920,65369637,3ec1e860,b10c8f1e,56e996d6,854659c)\n,S(4f28eb9c,7d060dd0,5051a5a7,9a79c960,161d7081,d3a58b2d,a421075c,cf966e03,ec378861,5434741,bb2aeb8e,4a2afe78,44849f3d,2cf12a6c,2eff3e05,d267fafc)\n,S(f50e20d1,ce113e09,850c7a9a,10b347c9,9fa039ee,57ec85c0,efe15b4a,1a83fe8f,4db7c231,90df41a2,8218595f,61407f20,cee46478,27d54aa9,4db9bfc3,fae975be)\n,S(cce6b2d0,1adeab95,dd78cdf2,b55882bc,79de945c,d4249e76,ab2841a3,abeff5ef,1d690674,1312140a,fdf764bb,560b1bd5,bab1dbaf,9fa26bd5,604427e5,34626e52)\n,S(55a65174,fb10557d,2ecc7312,15afcec1,e4830be5,2d34bbbf,bc80ed6e,9f2d8475,c69795f1,de1e537a,970dd412,65493806,3f0623d4,e7353eec,611c8917,278012c0)\n,S(78221cfa,7b4db3dc,7e22779e,97ac8d46,d0c1d819,76594ab0,267ed28a,6127f290,8ddcd5ed,fd8e8c62,4883a158,2eab5652,ace0660c,2e358b66,3ad53e90,cbc46a54)\n,S(9b985039,441ee434,ed4da39d,6010782c,9006cce2,8f92ff96,2b2d6fa,986ed178,e1cf85c8,7b537b2b,78bf67d2,2d9388c2,8a50dae1,73f003bb,85fe5f9c,12c6cfa4)\n,S(9aa2ffb1,4a9e48de,57db9d78,d9b6757a,6c27e7b0,291dc4f3,8ae9f204,f7edf20,771c7be3,78e0f794,fe0066ef,8592952d,8f80d7d5,2772ca11,5ff8b7f6,377d1040)\n,S(d1059083,66a0b463,17c510cb,40922a0c,949de251,6d80ec02,1e359a89,c6937e1f,84053a25,c9ea4414,a897155c,c45e0da,e5e6f2f,aec780ac,99c41545,fac8630e)\n,S(1f3ecacf,7456984a,fedc2d81,2a81f7f,1ac58ad9,c70ba7c2,3e7a2ff1,f9c5d066,c6add8fa,2bfd24f1,73f4539e,f21681f8,15f1f362,e0f98d94,cd435d80,71a23e54)\n,S(a312c709,a16d0cad,25551ece,86c8f947,5e504d06,eb3524fe,569cdca0,da2c4371,865ecc2a,ea04c5da,2089ea2c,66b5bb84,8c1fc29,ac7bf969,c778039,b3ae7b03)\n,S(f21c4675,e829ba78,fbcf6410,9c2eed38,8c3493db,1017d69d,953f32f6,744197af,fd2c673e,43377caf,5db0ee06,1a37b03d,43d9373,482d3ef2,b37f74ad,98b2f57)\n,S(116174ea,2a029a02,fbcb2eb6,1851ab31,f4836933,a73bd426,8feed7c0,18865692,2123d027,e1cead9d,b5fca2a2,d6f5d1d5,25cf3855,44b64352,ee772d4d,d70aaefd)\n,S(358e77d0,919e4c6c,f64a2117,357e72d6,2334fcd0,f5e7e60a,962335fa,73f9d663,7ef8d620,6f99f403,10781985,988ac7cf,dcf5cdaf,a086a0cb,8b5b6eb6,7837bc08)\n,S(509f7e0d,9e81f146,39157e20,3165faac,8056deb3,a813460d,b86c6daa,baa33fa9,55148e1a,340eb6c4,e6a8645f,93f1ad3b,fd12165f,c3bff090,a095b8d2,a0db6ea9)\n,S(358e325c,185f0e26,1e9e30c4,9346f21c,a15c95bd,438020b9,ad9c7e6a,d2a4ed09,5fcc074,c97715b2,812ef690,3b3d6185,54aa11bd,34789b3d,97f9b65f,2d18c4b8)\n,S(1e1c712d,bc00af2d,37f37e4e,a2589e02,e314c310,47890d26,8d36be3,dda2fc4c,4898f9a,e3136bbe,36798cf5,ad30b38b,974e7e75,42d4c14,5bfb1f6a,490655dc)\n,S(a6516f9a,aa3f79b0,ff3b794d,c80a9590,64e31720,7361b918,bd797b57,23ffcd1d,c5934c6b,59f3b830,53f77b07,47c7c312,812373dc,ebdbcf9b,ed550300,3a54f5d4)\n,S(e46b48d8,8b1e1b84,b9fab824,3044469,50cb5633,da599b79,295011b8,b1098155,43e9ba24,4a339976,e342e551,25974350,3e7c8a80,cd950a80,a5d79365,b0c94f51)\n,S(ca7a5099,97a9c2e0,625105b,1df9e714,e1cc2d40,1227400,e583370d,3f65aa0b,dd8ca4e4,d2eecd1a,20d994fc,ef7cb0ef,19c61844,cd2ce039,b7a1eafe,66e1f071)\n,S(326b5ec0,d29b576f,111352d4,b7786c40,8486599e,ec01ed0d,a390d586,96313f08,f4a3f171,a4ac654b,e7aa6063,3d5b2a0d,c2d5d3a0,3da4d264,95e828a8,1011d384)\n,S(b762982,54f5c75a,a557038d,bfe9bad9,7c5bf8ee,e512fe2b,39293228,e70d306d,8b808f9f,b36e3e86,2c75bb2d,d7de8be,cc85c75,398496fb,f92db3db,143606c5)\n,S(8bd624e1,2b1d36ff,dde50a09,6f1a811b,ae66f1a5,790654f5,ef79a21b,872286ca,6687ea2e,f4538961,b6731c74,744234af,8bf6a2a2,170544d0,fe9b8057,ad1f02df)\n,S(ed25eac7,2a9f9290,bd414cc,cf846c65,509d1c33,d5573da4,2d78d25d,5de48a9,556fa9ed,2710fd03,b6d1583c,682cd7bd,8705a9d0,1f73a8b9,8f3a1eb5,d89eaa)\n,S(f1943b6c,9ed76a84,9c67bc94,c755fb30,e8facc1,de280060,df4b9e7,8bc02bf,98c7ba08,85dc4e0f,6acbb646,42cb876f,a3156232,df1f84b0,4818ca56,882a40a7)\n,S(c5b60b14,2de3ab8f,b0c24276,dcedae7b,83422821,6ac8ef39,1d351832,a5e9e5d3,ce86e4da,1174e609,f55e10d9,14d4a5e,33259578,e07c1260,e912acdf,9eb5cd69)\n,S(b06638e,706cfe63,3359647b,253f99e1,c7778200,c168d4f5,92e2c409,493755ab,e6401fab,1b4d5229,136e2493,39f95357,e16dd37b,87e7f69d,3e88a383,cb44bbd5)\n,S(cef8c1b5,486dacfd,29650ea5,432fa563,f0ec5fe4,6814bcd8,9f539b7d,264b14cf,80cc2c1,8d0b0be3,939ea,761d7281,5ed4fd2a,b252d66c,9316aac1,1a5a2fcf)\n,S(f616904d,f868f2a1,5fcdccac,4198b1c1,62defb40,269754f3,8e546da2,4b85d7ce,fb971012,344024c9,f0bb93e0,b73b31cf,de8b4d37,aaeae3e4,7f62633a,7b8255b3)\n,S(97386144,bc7e4a7b,33a51697,902fef4d,1613d8e5,ed80a599,a59f62c3,f98632e3,bd12d584,58429939,2dd834a9,5431af27,8e56065,ba79bb6a,5a806d36,cfc16b4)\n,S(946f130c,7a70fa00,f403a56f,6656b279,1eb08ddc,561311b,551ce437,bb0200c8,acd698f6,a5037e60,7f5a923f,3af05784,186d9794,a7bf7105,7a66949,e1945b8d)\n,S(ee0cf184,72c453b0,c38c064,fc0d2589,d5f1afc3,3423687d,91740bdc,c3929230,d817775a,7fecd397,e954db12,fca24990,8c773c28,b36e991f,79c78264,9fff8dc8)\n,S(f335f7fe,9542a587,9d48b4f,4ab1287f,ef007289,4d93bc21,23463a77,7d535d7b,336e49a3,2465d29,35389c06,d8eafb4d,7639dae9,a6b19bf7,45518502,e3350283)\n,S(55bf8179,4fb37f8d,dcc200d7,b76a9040,b1326d6c,559d7f06,f0eb0e0f,c97e7739,ca33cf00,79155cc1,e902ade6,f7d703ed,3053f6a4,f49d0866,32e930a2,afe69bfc)\n,S(dffccf81,6143da46,5ee2195f,abb6d943,1033b901,2fe0c623,49b7d6f6,29de29b0,9bfdf3f6,e1dc4ae7,dc29fc06,f85e1588,c04bc39d,5fded90b,bfe75b9c,74f0aff7)\n,S(b9748c94,25fc6fa2,fe5c1395,b556bb12,c435bc11,2e8f577f,3c5e7d82,3539dec3,f5238bb2,b995d23b,5e96b233,6d5141ec,f76d31bc,63aa96e3,dfaca8a8,c94007a2)\n,S(92c43c54,e951b157,38f29e33,5f52ad9a,2c5349e5,fa6a39a3,fb615878,ae97f7ca,7c7a6b73,dedd1bca,308924fc,6364b62a,bdc4ae79,d68a62bf,71bb0195,612b4a17)\n,S(b1937ea,25995e55,ee1ef139,d7a58923,5677afe9,f4726d96,40b66b0,d21eb272,d0f95a57,544ac7cf,e6c3e0ca,5e44494c,5585c503,a8ea9919,5a993180,cf043dd6)\n,S(2c1cd64d,bd7ee24b,2bc5a6b7,2009b788,e2a5047a,8d10dfc9,4a46d807,c133f457,fe8a63df,ce7d7a4b,e7c31a1f,5e68826,7a9449fa,9e9ce30c,fd8684b7,660aabe3)\n,S(4ff10a78,be6ea8a2,b6830649,b0a403d6,6d544368,6cc854ed,447f53fc,45004834,b3cb30c3,56d50596,2e81cf5b,f4e2db0d,e43384d7,28f5d8bd,b362d287,e58765d8)\n,S(33f55b66,6c90665a,b60a7c2a,c714591,f877e8c8,517344d,9da03558,f43d28de,399848ab,6aa95ed5,8ae0ea80,c93931a2,af146754,385edce0,8c2a4f64,2d5163f6)\n,S(b9712359,5a7237eb,18b7cc15,ff2d6be,408da66d,5885a636,20887ab,340d3e04,a283a3bd,643ac5a4,1b3f0ab8,fc693146,dd125f88,fa87cead,817788b3,be72363a)\n,S(d20f9067,6efa9435,f602c1e9,fff7338f,5a4204a5,4d984dcc,f0ba5fc1,60a1035b,ac3a3c7a,452003f8,7244406c,ea315175,ca1af26f,6645486f,3faae77b,8f404139)\n,S(322d6ea3,157c9f0d,444b2d0b,d072e192,81d8b3e0,3ee2ef5,4e294b53,fef41f2d,838147f1,9dc12dde,676a9e67,6a638c42,6e096df6,ea62ba97,ec359b4d,f92936b3)\n,S(95925c08,68341b6,b7564ea7,bae00b0d,1d2bfacb,94aae4cf,8f29ed9e,fa0c26d5,c63edb9,13152232,c255557b,2207c2ec,edf14cfc,bdd246d0,2b46f7f8,76b92130)\n,S(7592aab5,d43618dd,a13fba71,e3993cd7,517a712d,3da49664,c06ee1bd,3d1f70af,554ee877,af74284d,5ac0aef1,ccfa8ab2,7a9222ae,977a1b45,7d79d386,16eaa410)\n,S(ed9d298b,e13eb71f,8631ad31,1b391680,8062574a,6053f503,671d9a59,1209e0eb,97a9abc0,dab8886d,9a07caa3,f40d87d,7b479efc,d500eb6f,e54ba1b8,9d85c3cb)\n,S(cdfef636,a5900bc3,bd28daf3,308d469b,78ae69a2,ffc39fcb,9f8e4942,fa355fad,f8338fcc,54c0ef4e,a46a1c25,591607aa,f4f6c7c5,378f2d51,79f80e46,520db6d7)\n,S(f638cf22,ca3bd6a,ca7a8fc4,26d9f5db,dbc0943d,6a587584,8ca52e6a,7949db49,56a267dd,8309eab7,90b49003,9d595141,653a7926,9fd1f732,f3691e0a,41675295)\n,S(4340fef2,9b1e43f5,3c76cab,163920b3,7a66163a,bc942e1e,6387a2b1,8f14bd1c,2d5a782d,6889d353,c6c908f0,b6f7a9dd,59ff2f15,8bbb9eb6,ad62bc2b,832210a0)\n,S(78af8680,5e3db13,cd2c01f,beeb826c,1aa83296,c6ed1a30,bf2822f1,a9b80991,19c7ca36,37a6ce91,2680d95b,6b94f835,ec458cdd,86206a2a,49d41af6,248c3725)\n,S(d87e590f,e6a4bef7,54a831c0,13b3d561,72064279,38b96d49,58a2ae11,c9c41ef4,3928a93a,c9b43489,f1fff97f,f8ed4ebf,53b97aa1,b50896b3,e30b40b9,be1d1dc6)\n,S(b59d19f3,69c547e9,4155cfd0,a0b9076e,85ea8569,195b8a7f,630a8446,ddc54c32,b8f5588a,ffe7abe0,e2b83d55,28162c5f,2d50827e,c44a4357,f81ff085,da661865)\n,S(34f643da,7cd59b00,3aa64cd,81c143ab,662726bd,5eaf543a,6d83d30c,60f3ee78,41574cf2,91a7f573,5a0bd29b,3ee5a36,91906c1e,3fa47b22,d5204446,f4501ee8)\n,S(56ef37d0,583e9de4,33f78757,dc31c968,fd007bf5,6b05db4e,cac395d6,233dbbf3,a140e01a,b5c898f9,10ae2807,53ba14ea,ba8cb5df,b9e9629a,92c14b9a,df5c9286)\n,S(1e43f34,815b568b,1139ca5c,b3a5dd42,fc54dd76,78454fc8,7e3dd00a,edc957d7,5cc38274,ac96ee20,78a82d9e,64dc2bdc,8e947afa,d043302c,85d724f7,7e334cc8)\n,S(ce79e49,35d2db7c,d9a9046d,3d81b7dd,f8b06c82,98f78eab,ad93062f,c339a952,fc2f6eee,1b90626a,5ad8c494,3bc3cf5b,8765c8f5,fdc05dc7,fffa08a1,b84f9686)\n,S(b4144804,ca862c26,70cc3365,e1a00cf8,f6766cc3,4b3dce2c,76c40c31,86fe4fd9,e4368a1f,ca9b6e00,a3f752f0,3a00fd4,29cbdaab,5e2a04b8,7175b9ad,51b2219c)\n,S(eaa29724,7406f824,8e79cf65,ced49d39,5416341e,c1bc46a7,b71d422,1f4fd39f,68e7f81b,e3b75cc3,de4d9932,85e21842,d0d4b6cf,38a1d46,248dd28b,a97c14a6)\n,S(4e2d10ff,1f7288bc,3b8c6caa,3dcbfc72,eb7371c9,f42c6999,e7a2ec50,30f5b6a5,68da3c5c,df2a4fb0,a93515ca,3e417d00,6ba793f5,eb678f82,be88200f,a5a8774)\n,S(834f21e1,114dec96,2a8a4b45,c67c2894,7d073b94,457c1adc,e009dda2,230659f1,e9fa61b6,edb5a0a0,2f7acb27,d04a67c3,39263adb,6320ca6e,f78ac7fb,25adc89c)\n,S(a84b44ac,a0a64455,a97268d7,cd3d68fd,c43caed9,f9bdc381,ece7139e,30c7d0c7,2f903f3b,74e702bb,d2fbde43,f919af7b,d1267879,3882cd6d,a05af259,bbf6b74)\n,S(21219e06,98bcb977,47b1df66,f9e0fa6e,600cbe7c,bb432cbd,d413481f,241d6789,7a4388d3,c8961874,a897d968,8b5d3266,2e6970be,324bb736,aefd1892,70954055)\n,S(fa514e1f,93bfccf6,88b4bbdb,e4f49879,7b946549,82a27562,6867b22f,9baeafd4,ccd48215,52572b4a,9e087b51,8c930e09,2c2f6156,c26a730a,478f257d,a4f91b74)\n,S(b60afbf1,643099f0,c0533a4a,99bd8c2d,2204d4f5,3f2fdffa,4cafa02c,79451ffb,fed8f90,1a029926,cd4b3bd2,76bda6e9,d321e006,3eef3f43,886eef8b,4b21294b)\n,S(f29cf9a3,196ce34a,86efcca6,554694e8,17c2b765,39c6cdef,c74850e8,a7ed76cd,5130863a,f7c333cf,b37f1bf6,2db5bacc,994b2977,9951e8f6,2471129f,88c9c5f7)\n,S(9cd9e23a,cb00bfc5,1a3af34b,3e23f1d,d8fe314a,322254ed,563b9275,c5084e4d,ecf0235c,c66ea710,151d6c1a,17b31705,4f31bd4c,f8d2a77d,4d36fc4e,1298e1d5)\n,S(56f889b0,2cfa048a,f96d99a6,be56a282,18ed6691,ab2b25bf,f3d3b6f5,f6e5d65c,352b20ea,4a2372af,f674f824,8dc8fca1,bb8ecc29,ea0c8d92,1b7ea07b,241fe4bc)\n,S(de32beb7,f8fad8fc,16d69a7d,d3def556,8e2366e5,246bfdea,16c936ab,5dff2a08,d731f11c,93a71c22,46c2bd06,fe265fab,eaa216cc,b0de1acb,a7c004d4,249e145f)\n,S(85ec7dc1,dc1729d8,c03dfa58,fefaacdb,7d12dc3a,f984a693,968895e,2a6ba256,523038af,8e9aabcb,f98c73b5,afba31dd,89e4b9f2,ba1a841b,194b0b45,9a4a747c)\n,S(f7948995,60528ec1,ed7f5efe,42db8bf6,e223280e,2b26d4ab,e23a5caf,41e2e141,9f7594e2,96ed1f98,86837e9f,da8d6d9e,58871e56,16cdd2fc,dd6fcb7b,80c6ff98)\n,S(588d6fd3,b4208825,3d76e8ee,f01a93be,866bd53a,e228c137,62199ce0,f3454f10,a5fc9653,3e41208b,ba3f29ad,e31b7e32,6320b81,ad0ded2c,6d922a4b,b42af573)\n,S(186fe08d,bbe5c8a7,56f87d4e,8976777b,b01db294,e834659c,bf423de,1ccc7443,d99ded39,a46f7820,3437a93a,435fd0ca,29f12e26,a6449bdc,a256f99e,9bdfbdc0)\n,S(e549cb08,3055abf3,3b7eac38,cee13336,2af22e98,2f576bb,5a06d5de,59bd3d25,cdf37f20,e7b51483,6641c7f7,afc35ae5,5ababde4,34a945fd,4fe0325c,7d332381)\n,S(a4e42afb,fd7f5158,5c86108f,cfe84b58,b930df79,f53a86e1,8ac93389,224422b,e9f8e1b,3963102,b58d6177,f915d7ac,541e551c,bbea3e2f,1ea47960,ce1e30)\n,S(5f7ed844,42022f42,6b09e9cf,b7750fa4,4755fba9,7199fd4e,d09efdca,d803dadb,91d5ded,d06a8eb0,9c9592fc,c9096f1c,e852d9c3,9bfcdadd,ccbe1bdd,2b76ffad)\n,S(3fac4743,32f064e1,b33fa22,3f67bd15,91dcf7f9,afa38f1,868e180e,c2938d66,45744e67,6b203799,3386d10a,b11730bb,eebf270f,9ea65920,6f93da61,e2aabe5c)\n,S(5fb983ff,f058d214,2e4d13df,97d8e784,d4b10e0f,6a18c6b1,90e64bdf,fb7a7aa9,33394601,8dc540cd,eb73f73,a9733d74,ec581181,8a6d58e8,3460f1a6,8ddabd6f)\n,S(baf35c3,fa939a2,db15eec1,ab083664,9c6e941e,19d3e0e0,43e0f5e6,df41f88a,42583cd3,e53fa1bc,4eebdc3f,e3b8b069,9de41445,54fed966,214108d2,f68e9201)\n,S(97641f5a,a51e7ff0,f1d86183,a3fb3d60,4266c4d9,acdb9f9a,c704a05,809a8602,134ffa32,aa9fbdbe,d8d82fc9,1cfa78f,1ab169fd,459da39b,5b0d3287,ad9517dd)\n,S(96a3711e,acdaf6dc,5adaa8fb,4be05c37,f59febca,1a876a5e,e23c6b55,2727292e,8fb0cfb9,681ebb7b,5e1fce0e,67ad5d81,34be9123,56100e96,b82ecd3f,a5da4392)\n,S(ae64428b,8e540c6d,28d38892,6136320a,9f9f16b0,3e9d5e2a,14faadef,4f154b0a,db202e5e,b9bf73cd,b9ed5193,b0ff59e7,cc68aded,6fe6c2e4,d5b79493,fc118aeb)\n,S(2c5932df,65c0c2c1,14b532cf,15b48433,e16424ff,ba87438d,42229075,6cc984fb,161ef8c4,b908a056,d395deec,38b9ff4d,1c643628,2ceb1e47,f59a2c24,c7d29130)\n,S(76e21c78,6937ba69,18252d56,3ebfcbfe,2415389d,bc692071,f9c48f55,7aecca3e,de7786fe,9db47d61,e3b61d0d,49309fe9,ca634d28,8d71aa77,a3fa4efd,4533c8e6)\n,S(7170dcef,ca8a138d,1d20b346,6afc6a46,99df363,fc964a36,eaa70805,b267900f,196bfd39,476f1455,98f89f7b,f870f8f8,440562e4,623fb203,3b36d5d,d8c0bb8d)\n,S(98eddeb0,75bdd245,aa1fb466,ed1e89f7,61a95662,e35836f2,e6907c5b,691b6ccd,af3fb5f6,b59124b8,c9c2ddc2,108a3a2c,bdbcdc99,ab296814,731a841f,570c91be)\n,S(bf42f806,59ae606f,a5e36fc5,c58379c1,8dd1c34e,fa98e67,68bf6da8,ba8e8849,d343fb70,6e4adb94,46f49578,26bae8c4,ca74a0d1,21cee98f,26be68f8,7555b8af)\n,S(40c1c4a5,891e8dc6,29075c36,56249fc2,c42fd65c,8c338a0,d82df955,4662e1cd,667223d0,e68ef6c3,7195d819,2bcc12b3,f2025327,3a05703a,e5aa10e9,cc689ec3)\n,S(162dd310,c8e3fe4,8384cf1b,1a0a2d6f,bfd3ef3c,5492fc92,b921133e,8f883dc1,1f2311d5,c82f02b9,f7197685,cf490e1c,3d0ebf4e,86ea0e21,a653c8e0,db5cff0)\n,S(ff0f8146,89eaae3c,f3f302e5,1089ec58,5d63c4fd,5157bb3d,bdfc7e40,cc6331cb,4dc1fdb9,4eb529e3,bae54973,778d1daa,f8814cdf,5a3b0c2d,ac2b5647,551bf2e)\n,S(143ae674,b011b557,2f472b22,44c6d9ab,14b3e641,54f4a033,c3ea3917,4607b78e,1528d582,faefba2,6018820c,a03dfd7,ca20298a,e199c99f,db9cb421,3601c35c)\n,S(f3adce28,8fffd45f,96fa0efd,32974d98,4115a80e,cd6b86f3,5e17b017,8d9009a3,20202f00,96329bb0,69a0915e,494a586b,805580a4,eabd4ba7,2d20665b,4916a20e)\n,S(d2270829,e2730d0e,2c8e6bc6,fa4c2247,4904ad22,f44fb2f8,5ad07558,c4d8cccf,d5a6b4ac,9d5bf669,5989741d,f262e412,27c66c7a,ae067a93,c6302f5e,8879a3bc)\n,S(26d17eb6,7d9bf2a8,45c57a94,82bb2f3d,8347538a,65c9f567,56ecadf4,352964a6,954af3d4,7d67c345,bcfc4a52,a49aa70,b8703d1a,fcd21c6b,7f7719c1,e2068fb2)\n,S(e4437f8b,e104c899,5cd1618c,e5ee7d10,36a52d99,31346476,bf68f21,e7fac74b,d6c156d5,b8256e6c,1a820dbe,3b56fc8c,f9b015bd,b81c756e,27b70db8,d995cb81)\n,S(8932e04e,96db6079,662b63ed,29b5a39d,ac5bb51c,d1ec70,851474ef,a2d3c1d4,5437e77f,e030225d,53f5166,8c3551c9,fc912a0d,a3bd336e,c0587544,77e58541)\n,S(fe776976,465b86c0,5b2003c7,36c8141c,933ed0e4,5c6dfd0,c7c82517,16617b26,b279dc5f,d576d506,d302b0af,359ddd50,94364d3e,255102aa,472e6d9c,c52aac39)\n,S(6c60a4ff,b2a29224,5c84ecbe,1633817d,f69eb73c,a6b9f72c,b86fc91c,535b45f1,278dee6f,814bcc1c,70301a51,f9c7853,6489af2b,d23d6223,1b55cd29,2a2a0a2c)\n,S(3132e58f,625f902a,98d556c5,ec9e8617,a955beb4,6e9c2a81,e121e473,9c9af04d,a5880964,a2443c5e,14db9220,446904c5,cf0a957c,945c5006,9438d869,45a9e461)\n,S(b05cee36,361a9bf6,eb9003fd,c8d38587,640e180a,9de822dc,57e5012e,34903f6f,fb473886,29519a28,b745ce16,d625d85d,26fe21a2,30d798c5,305d8e82,545c9a5a)\n,S(e202120f,5659e580,7a14e68d,e3aad7cc,23cd2f6c,abd86739,3a05f16,12005e83,49928b05,b66af992,d937cb4d,c05fbaf2,a70e8fac,7c081544,849d55e,fada136)\n,S(57a91d89,2e5409e0,b07e68f0,450614cb,9a9bf0cd,8c5b3459,2f198633,c7a796b,47905cce,59018fa8,baa612c3,124b1192,1dbf7706,c5d8d16b,bd5c1e9f,8498e7fc)\n,S(e092c40a,3ba465c2,d59e7c5,8265ddde,91c0468d,67428ee1,dd153b64,a5a7e8da,83f4e2b4,bdfc4248,2d4ab1d3,13b097f7,baa51411,134eb042,feb26f71,5bffd39b)\n,S(73a3306e,7baa4fc4,a081a9c2,c335d3df,7c1ee84f,f5a46554,f78a6009,1de0ab38,1f68c8f9,2022c326,e37a7043,9552191a,3d93f684,3af0a235,bce893d,eda1f938)\n,S(7c7a79f8,6e904961,73552caf,4a1401db,e99883c5,a39e493a,6a6eabbe,5f3a4434,85ceb252,e4883931,96c8ce8a,c0b596cc,a2670981,2c293554,15e17f8e,26e869bb)\n,S(6a9df561,ce4ff772,b37054fa,e513657f,19f03086,eda93918,623a1c47,84a37788,bcf0274a,d9b3bf58,331ba398,a6611fed,fe719867,106eadb4,2b25b623,fdb65280)\n,S(fe7bb24d,47b3adff,1c545d2d,ad2c6aff,81934cb5,bf2299ee,f3f8c53b,ff91c950,7fe65f86,9d2623c,930c27d6,f0a292cf,a881738b,4af0c5b,efde5c40,8a574e7f)\n,S(26d1d2f2,7944b77c,290ba60e,17d05347,82ce2b64,ae815453,1da42907,30407d3d,ec3c5024,3106000b,d0b2372,53581384,51b768d1,d5aa206f,4d1055b4,b4f0f495)\n,S(f00e51f9,38f91573,4ac563ff,8ea44de3,fb85cf4d,8f034806,e6c096d,8e73e2b8,7b7bffed,3a39a491,d3ab6a13,6fd88e0a,5854081d,21380c70,3c596771,a22c727b)\n,S(73e15472,f42f8750,93abe811,a4d4bca8,8bd179d1,4e3e3b30,9e011e27,37cfc4d8,392ef4ae,58321768,1106426c,9b00b4a9,c53c826b,84bcda34,b5d0609,f85b9231)\n,S(ed4667a9,aff30464,c851d86e,479df8e4,d29d2348,edaf8333,a7faf560,a9568092,77367875,6892d42d,469a9ab5,ff577e0,6d9f4fda,679882e4,3dadc7e6,3d49bb0c)\n,S(d6ec16ab,10811cbd,dcc346a2,64dbfe0f,51066f2c,79034d74,af5b0ef2,541dde26,981f1cab,7ac7be22,9a91b733,6c0b89bf,4763b01e,4a1b715e,f4857e9e,4ad0527e)\n,S(284ef47e,691931ac,8241d92d,2ee5b717,3f762ef2,bd1f48e6,8dca4b53,ab4c593f,ab739ee1,e6a7be47,83e1288,7ffe1b6b,b53a4d2e,3bfad3e1,c7ac5415,1bcf5e82)\n,S(530f9e7,5a267d0a,fc3ba53a,c49018ef,44b490bc,835774f6,c6cc3f87,8d505c3,630c481e,44e5e9cb,cf6d7fba,8f7fded4,bee9fa70,4b88a8d3,6e2b3bc3,4e85e3f1)\n,S(66a9b4fd,81d0165b,6737a4b3,8025d2da,ef9c4d20,3c49a2bc,1ba4d59c,eaa905f8,2770c44e,6a4dead9,7dd7311c,195d3051,12c86bca,257955f1,21b7b1cd,4e525e8c)\n,S(25812e7e,dca47b64,9b18d739,7474de25,39bb7898,96ddb94f,60192135,23a289be,4bba3d83,72aa76e,6ba76f7f,18cb8644,788d3ab8,b58d0e5c,795c6213,6f17e2da)\n,S(3c81be70,af162448,170f88b5,8fbf587e,df1a0e8a,3576cfd7,24acba77,dfb29608,ab16e48e,da59f480,7a0b5250,7102e9ba,ed9dc9fa,e0de8700,27bd5ff4,2aee13d4)\n,S(ab626dcd,a5142933,ece82c8d,125aada8,39626e90,85c57525,2fb24f76,e0d6e39d,8add774b,34fa4b1b,d571f2a3,4d8ebfc2,bb7be73d,dab73cf,e7eedc01,764abff6)\n,S(47f25106,120720ff,8cad6532,1a3e2873,aaaaed57,98e3933d,e1ccfe0b,f36bd85d,f6d472e,729512e4,ecb74ea3,f96583ac,cb44e013,ecd0bc60,c38b16f9,20585b60)\n,S(6fd30299,f7398f1b,3c538d59,71b8bb0,e1640926,752d0842,36148b9f,23c26b1b,3b8d6166,a79ce235,1a2e9c4d,c5c89ff5,7810bef0,277f3d33,372e05bb,ba6799da)\n,S(dd5b07c,784e1cd6,58c51ab7,45c4a09d,49db1287,dd7871e3,f449bd66,4a02e040,b26dad8a,62a491b8,dcced2a7,c0feed9b,6a04597c,d8a0f857,a4731078,d68d8659)\n,S(3cf5836,104b4227,aa275e5f,16b84bca,15b61a8a,700b56b7,dff2adf2,167fcdad,1cc6f65a,2cb579fd,f6812340,88018dc9,445af726,2db43b5c,e9e49e4a,ce00c9fb)\n,S(683b5455,8b9421c,c3aea163,d74c043d,d4cd804d,23857f41,3e01d28d,4919bb58,1bbe4576,2cd5c056,8add6943,8111cfed,691e2369,55022da,17cfddbe,79a11f0a)\n,S(d78661b7,897a40dc,5f42f7ec,4202ae53,e83ff0e0,d73ce7d2,19503279,e43b724c,465299b0,e3f478ec,fc3db82a,61d5f290,aeead2fe,d0ec4a02,6652b29d,cad20b21)\n,S(1258c664,fc15e794,e64dbb87,b4eebf1b,32e89e7d,50ec114a,1afa5506,19e15a21,327c4a92,81a73880,70d1a7de,c2a0e5c7,28c5997,bbc21571,94b0521a,141be0b1)\n,S(f2d04fb5,1cffe2bd,c6e43cdf,ae7314c5,387f4dd2,4bf7fbb1,a6ccd627,86e8be00,89af3f8d,435f2152,8d32ee47,a86a2ae1,78d3a7da,c27ceb37,93250a8c,27061c9e)\n,S(b67bbec1,4ab23ad8,e52cc402,def0083b,d21551a1,92a9df6b,b335481e,3f0dfb08,d6ca6bd1,93838993,5284528,56587554,3757cc13,fee01fe6,698b30f8,10a64a23)\n,S(1baef1b9,fa401fd6,a053ce90,f2d661b8,8a466584,83a8489d,90d48312,2b79235e,28a19a14,a2f7817d,922b3872,cba558ad,bc1a69c6,c0b65ee8,3352494,a31699d7)\n,S(6c0f066b,23623a48,b2b6a746,801baa85,f58de56c,e5287c79,c3c10ff1,b851aa8e,ec837256,84cb0f8,e528bd94,e1c86327,2347a479,2059f357,4ccdbb93,15ff0868)\n,S(fbd5bb09,65bb9d22,bea6d6cb,7aebcf28,a0c815d6,18b79c0d,94913dd9,f63619d7,3303574d,5e605e5b,fe298f77,e20f3f6c,60ccc063,37a29c7e,6612dfca,3f00b924)\n,S(2246042a,c4b22334,af6c81ac,8106bd1a,f8bd5f2,8dad88fe,7e568fa0,b35b1739,1da0d8eb,9c10116f,ce29bd9,61f92e36,9e538282,345a4f79,7cdabc70,5aff6e7c)\n,S(470a914f,2fff2d37,835b3caf,542cf50b,9606cf6d,fd294c51,5632d9f3,4182bc4a,6b3805a8,d2c74856,a5be3cc9,e9c6a8eb,4398c606,81ce12db,b3a58660,1d426e)\n,S(4e03f50b,ffb6d933,4282153b,a3f909d0,44bb7a11,50300c1e,cc8027b0,321b4be0,596c58ae,963e71ec,f1fe8f9c,b4de8cbc,9149b125,31e83e0,95f6e5a,b08c504c)\n,S(5a6c4fea,b806bb76,191567e9,139dde28,188a26b4,a1803b7,d999278,fc57455e,6e81d07c,6505366b,c28ea476,a718e5f7,353d73c4,2f551459,d59a7d7,82e6ce49)\n,S(ed73c9b2,9adf52e2,1280bb1b,ef63dd4d,74f4e09d,1be56c3,a246dc37,9b29bd5f,e9917b6,19ebe0ac,c7d1fa5b,7c4b7c52,e272ad9f,2df62161,59dc87b3,f913828b)\n,S(68c6145b,38cbf9ed,4af10608,503ca13f,710dd34c,2386fa99,bdf93b69,c01c04bd,c963585e,607d9eac,5016f884,df535a9e,e7cb74d2,2e0c1e9d,e928d7ca,3fedc73a)\n,S(1b651863,927317bc,1dc6094c,3f5c91cc,92269a12,59879b6,a8439a77,b0454126,31c6125f,8ac3d09b,d8c1fe92,c31bf13,c42b1915,e7147cf9,1371dc01,e8f5009f)\n,S(45593ccc,dadbde3d,456b74f7,a3b705de,7229ff20,90a0df0d,38166d4e,6a09c52c,13d6657d,89fd0205,3c2b9a31,1ee964cd,e14634dd,20d85866,a43a4ea9,bc0bd737)\n,S(1409c06e,d6f2fa2f,cd532983,d28c2109,e4dd7c1a,4ce77960,566d3eb4,37927da5,dc05f98d,4206fdba,e3b69836,e694b71e,fbeda304,537bc623,90edcad1,460984e4)\n,S(d9e08c6b,c307b056,d4323921,5426febe,5d6e5cc8,4eb73707,4e2f00dc,e85f4580,a23c1647,c6b47a43,a3ab52ad,da32605d,172f4de4,201834f9,15d5a4b6,292c632d)\n,S(7df319f3,d3c2b6b7,3533a916,64d5fa26,5ac0f18b,bbd5e8ee,1aa15dba,bd62fb32,9120f6af,e023bb98,1d6d8d96,31de0814,a9bd169b,a91af0b7,9c3db58d,2bc9f8c0)\n,S(1a94e587,38b9fd1f,93146232,e2165798,11d74244,9bad3711,a373445,6986d7a5,332a27b3,17eee7ae,fb4604b,197f2db2,fc32549,ad86765a,74820428,abe4352e)\n,S(dfa2cb4d,6db266db,2a82ef8d,fc0cf871,4aefff41,895ff691,fa0781f9,1b619a47,c5e5dbab,3a28a6c1,8cf20fef,4cba62f9,d2a1a0f7,6ea7056e,45acfe4c,49ad8b19)\n,S(c2201007,be6bf76b,5e82c135,2a6e053b,acf4e2eb,c10a417b,f35e4c79,3a876730,92408aec,b9ae4d74,3af97c15,9c387343,9a735de8,90d1abe7,c8d14dd,fbefa581)\n,S(d45632d2,ab087f0f,9d0d4d85,26730742,2f25c794,efa3815e,33e8285a,1bd7edc3,b7ce3697,c4994fa8,2479e99f,9c9e4b1d,814e7258,da7ba569,5543d6ef,8d5ff44f)\n,S(8cef362b,cdc292b4,885f34ca,923a171a,df6c25b8,f6b7cded,c9003b71,cf5df93f,b3910f34,ed8b7fa2,bfa4f1c1,9d41d99a,d702e13b,5dab6bdf,2608186d,d09aaf5e)\n,S(247f7be1,874c2831,17d60431,8184878d,3a415ae5,59595bfc,7f17583b,3cbf9838,90e235e6,a779b4fc,f9521da,65f65091,efd513e8,df338464,2f8a7cc8,f1f30eb8)\n,S(b8c0cef1,c8703adf,411dd0b0,acaa2b82,f2609348,e36aac56,b0148ad8,981cf568,a0419411,47019aa1,4b8e74a8,1d49a97b,45e7aaa4,54c0f916,a33472ae,1275f14)\n,S(8e55776e,6e1c791,2aa6b43a,4dd1bd17,a35ab0d,aad792c0,ab51bd86,8208cf09,dfe4ccc3,a025abbf,c2d12bc,6d462e6a,cec7307f,6daa9c01,2c8a7ad8,70822d56)\n,S(f1cf6d3,fc9d9824,4e122790,de390241,db813b70,c48b667c,5f05846a,c3ad1ad,4925c6ab,3952d1b2,35ef1ec7,7ae7a84d,75006993,b173a6f6,c8b969af,c3984799)\n,S(b49dbf88,dce5ee49,2b4495ab,9db762c3,81164147,cacbc00a,9e56670a,edb9ea31,c0f92f17,ab5797c7,758d703e,fd288a46,8971f7c2,de8923fe,b8b7acfa,ffa9ef2a)\n,S(d6afe2ad,257b57ed,15573c50,a25f7dcc,399e2643,9e64acab,9a8c9f75,d8ca362,5df236b8,6919b56b,17140249,16282b11,38d355a3,561c5b42,b47ac6f3,8d35749d)\n,S(bb0284c5,f23365fa,5972a439,fcee4b4b,45b48a9e,6844a44b,53e12004,1ae8e89f,684bcc0d,e09e5932,79018fb2,aed55329,53221dca,6f14f493,6ae76099,ba265300)\n,S(57e95714,8a409697,1b8be621,98a04177,c4779627,ab5a77e4,6e82d847,e64467ec,714bd1b1,14ce2580,7c6d3a8,f12a5375,fd8e7cd2,5e854c12,6bb519f2,cd443f13)\n,S(b0c82f60,b33c3b47,523ef2a3,de804521,a1e14478,eb637757,d17526d9,1e713094,cfc8d1b9,d763f52e,6522f70a,c93f7fd9,23d163d6,5a82b2ee,ac1af994,a2cea63c)\n,S(2ba76170,404785bd,5932c185,c6d98ed0,667d8324,ff7f85a3,5c24a4bd,553e1ee3,1810790,74262af5,607167d6,b55164d1,e56aef19,f3e2f307,205d5603,eeea35b9)\n,S(5bd54e13,d508b920,fb1d15c8,27e0ca59,3eb1c85,a7228895,b5c9235c,6ed3e88c,d65d35fd,5607e193,ea70ab1e,4ac7d822,878017ac,ef3bd6fc,2b1933af,660cf0c9)\n,S(b0bbc2d2,753bd89a,b2bf1664,e6cf212c,a590d65f,5664e694,7ccdf977,3ea8d09a,9057b6c1,a1078bab,a1419065,4cc67052,7225741,1f34d47e,47f09bdc,8f993c23)\n,S(c1701203,3cca38ac,ddc0fe41,95452129,b38b4630,20e8c459,224e9dc6,cd3133a8,c495d87b,1cfb6f67,46c07188,86c08616,624f78b5,ebf4fb14,fb6b636a,f5557e9a)\n,S(1e0bd20e,5f1e49ff,32287961,7fbc28c4,7c9fa4dd,d93532ea,74930a24,5fa21bda,2d407400,e98f15d,e5da681b,2472fa11,b2a5869c,66be1cd5,7038e160,43dd6177)\n,S(5cfc223f,ec4c6618,ff12a974,8533a70,f39defa3,bc05f88b,3a1b158,317ec15f,7d928bd4,89e3719e,6386ec22,6c738b09,eb4468f7,b6718cf9,3da33544,aff21411)\n,S(f506560a,bebd668e,57e514e,bad47a84,5da345ce,50ac0e88,1cccc2c,81efa67d,e2ff0bf7,c9c2a99a,bc3580ad,17f64a26,63111fd8,15bdcd63,9d9a7d3a,ca0fc7e9)\n,S(8448fe98,ec887485,45a46e4c,449d0168,1d00dcae,5bf96ef8,306e7bd8,26c54f45,d0f07229,17500322,2dda8271,33481376,85b20045,f69d656a,66aeedab,ea6f0407)\n,S(c9a6857f,db037c2e,36d5ca71,32942f34,2480cf28,a98644f5,6bc455ba,97cffc55,a69e08b9,8f678e61,6c0b8326,ced6f97d,f742d974,b68cd1c6,b798e367,8faa149f)\n,S(b5d13f5,c611eb3b,c82f7db2,d89ab19f,b8fc286d,8e4699d5,3dc664d,bac4011d,27eb1650,7cdc0fdf,5b92493f,f2487d0a,ef2692d8,9c702bb6,259808b1,324b7adc)\n,S(bf9ec5f3,2e0ed4ac,c001b887,18c29c6e,90218471,d7f1afad,75abb34e,da35ce44,13846488,892b4065,b79224ed,368c47a4,a1734f68,7386546b,dd837a80,467ef2d1)\n,S(2c3812be,4d3b1c13,aed1f6bd,1ca6f5b8,893c5a87,ad6a8f2e,d6d92ac1,3a526e19,366b82f1,45d551e0,b7bcf877,db340bcb,1b11edad,1466baf3,24a94cef,3433aece)\n,S(77bdef28,dc8ef6c8,7fcd0a13,c08a26e5,9fd17253,8d8bd3a6,f21c5c86,ca33f572,da66b0c7,bf3bd49b,ec1fec,aa580a51,6977ba8a,83f957ef,8167f69,ea3c3a1b)\n,S(bc4a799d,3185877b,cd86503e,3f34c606,8693bac0,654eeb15,4effd116,8b71afe5,53fcd7f8,99a8190e,a7159c99,e261525b,f59abf6b,d331be66,4f7f7757,7255569e)\n,S(301fd884,733dce05,6190e4c7,d0375078,6fccdb6f,2e13f9dc,e275c188,2efcd040,79e4f9d5,185b9f51,fd835cef,64be607c,312c910c,e25cb73,5de2c88a,51e25cb6)\n,S(241b4a9b,be5e7e54,214d0bda,13719c42,133f8377,e50db2f3,87b6018a,814adb70,c66edc08,fa4fd22e,1f76bca2,7fcc00cb,a8ce2100,248b3959,3c164847,b410bdb0)\n,S(be6f1639,68191289,3c5c1351,d633d51d,dcd28c16,f3294981,56ea1602,d8c79585,6f674a7e,1a65539e,a7f8a966,8f5fe5e6,1ade5da0,a543335a,5f7a71e5,fbafff21)\n,S(c8b5008f,79c69e2a,7e209ef6,a2d14b9,b3f7bfba,b7fcb285,e237cb31,3dd3a283,1dc79348,6c3cf7e0,bc36dd7,46efcb36,3cea15ca,a63008f5,2d83ec0a,6bb54bb9)\n,S(5014af9e,aad5ed62,4e997ec3,a796ad1e,b038edac,77cf27d4,eeda7ff4,c06c0998,e01d786f,b8faa1c5,2d44a77a,987b4b6d,91143953,34977151,1a488602,3189dd7d)\n,S(6ffefde6,2c40643e,da2d4f28,4f28fcdd,b0845ec0,8d882d2b,45dadd8c,a7bb989a,8e2b183c,782d3a9e,2229e4bd,9a2becbd,ff0a5480,6a6f4471,7fb6fe5c,8411cc0e)\n,S(ac762bbf,190e1374,d32a7e5d,b4c0c36,ad0140f,c1e92290,4aaff1f1,487d463f,ccd79f18,31016b40,a381bfec,5db6b12f,bc34d850,ed81aa7e,435a513e,5f3adefe)\n,S(973496d6,3ec05c75,93244e7,b737b1db,d791a5cd,e828f342,7968eae0,e811cb24,4b2c9bc0,44e3351,f637ff52,5c3f34f3,d7420b65,2f57bb7a,bf573e67,25647533)\n,S(a9d89166,5f77bc30,74357753,9ea39e36,c39ce300,6fa03429,1a799b34,84a15d32,d09c3a17,fdedb8fc,f4f9ce98,20635a50,56dd884f,ccfaa96b,8d0813b8,4b80e213)\n,S(108a8ffd,aa2b544d,8b8a7419,f2421bae,cbab636f,60d6ef76,9eca9a20,a0c5710b,ad3e9fc,ab04ad58,a265776a,75f0e389,cebbb273,9df328d7,b125665c,d4e0249d)\n,S(ef969d7b,c8843c57,bfc0ac6d,f5e4495f,9543878d,95120a36,de8c5bed,727c5fb5,5ab81bb2,26738036,b145d81a,1deaada5,d1d4d653,7b80b02a,fc1cf85c,361f16fb)\n,S(ab825bc2,4d505453,f12dafb2,8f70b245,d74200f2,410f5162,b0ba3096,43c39b62,789e7df2,23774415,da7e31da,277a81c9,708098b8,d455594c,6f9cb065,b1281a1d)\n,S(4984a4e5,2c173c02,ec79198c,f8496972,eeed4e39,9933bac0,59856bb0,48bf2622,4596b67b,79be2e61,a0887a9c,2cc3ccf6,f199e924,3991f434,8e7cf897,acc5df3f)\n,S(285c6ff4,93c1be13,f4f60d0d,8aa7cb24,4bf0f76a,23f3efbc,cfa4a132,625f7272,39dfe9a5,cf9cef28,d5cfd998,49db9b23,c4caace5,e8a27c12,12d7b3d9,d3ed49d3)\n,S(1e14b1d1,7e721971,e9266717,13100aa9,9bc6e506,c278ac7b,348b708f,843db340,63a239d,d705f627,347fe464,c4d4143c,394d7dfc,5f79ea11,64d05f04,4ce41cee)\n,S(b8f73b9,ed71cd1e,f61dcf30,9cd48587,3b1394c0,4cf318fc,10140bb5,be17c8aa,8af5dae0,bd66ec85,2ff4823a,a1be65ed,745676a,5ac42ec5,827107e6,776f665c)\n,S(7e0c7297,e878fcf6,cb636776,d15afd0,49c995d3,1cd49d15,e624bf6e,8714540a,df5795f7,4c512043,f48b7568,bb271a00,ffd59530,a0280e5,8aaaf0fd,aeddd658)\n,S(9f0ed1d,465bed9f,a2b51133,fcddfe48,10999011,b754acba,de5fd027,6b798545,7005ec9c,73bb0e00,64badde0,12aa99d9,d85b6c38,e63256e9,21799990,14a8459f)\n,S(2d556f5e,b5c5af0,160608d,80e23cef,cc8e4000,b1e35b12,5a0a51aa,9c8e12bf,7600144,25bc3baf,1dc7f6fc,1fd86f41,d24d4488,f80ab8a9,4e4422ca,15f12000)\n,S(2617667d,7637e02c,b479524,d9c7dcc1,2cc14ce5,4149928e,e8d81bcc,835ed3f2,521573ba,2cd809eb,8f5496be,478ca639,7a2c4e16,1b299ba,bc6ae419,4780884b)\n,S(6247916c,5b519a64,7b76e10f,8810a3f3,4cae40cf,ed05a492,ba1b061f,d9aac10,ffd02570,535ba978,906a193c,500da1d4,602b0969,c3e9f4ca,f2d33026,eee7f098)\n,S(c40b27e0,8ed50a88,60017e78,ececfb9,ea14c64a,95137db4,fa55d4cf,9a3c52af,2415cb8c,7d025b84,fd9d1e97,7105aa54,c4149fb8,30ea801b,a86f1acd,e07b6493)\n,S(ba5aec8a,54a3a56f,cd1bf17b,ceba9c4f,ad7103ab,f0666974,8b66578d,3e0de12,348dab11,abecc4bf,3c7474d2,8ea5ba60,a705de60,39f9b70d,c49d58b0,6d57ffbd)\n,S(ba14e658,f8dd294e,1331262c,ffb3f31a,c1e9e504,e55c7f67,5c002248,94076268,ced74905,fc43e55e,c70cb36c,66dd9a10,c221b0e3,a326e365,9b96de4a,c81aa1dd)\n,S(3375af69,8880c7fa,29e718cb,4139ab30,f9c1d00e,a1c22d4,cfbdfa16,a7f4aff4,cfa8b491,a83be5b1,b66fa0b8,5e26c68e,8d27db79,ce55d726,ddde67ee,ce295a27)\n,S(68d2614b,306cfdfa,e9fa109a,2c4b276f,5b9a8ee2,f7d502d5,efc94aa4,bd9f01fe,148c36bc,f04365ed,7ddf54e8,4d40fb59,ef9e1d48,8408c8f3,661386c8,5f48550e)\n,S(93facea5,597703b0,ad2990d7,1d63387b,900ece6b,6c3677b,7fc47b7f,1c533edd,3c801bfa,8fa114e8,b5c19985,39a1f6c1,c20bbe44,d8ee7179,7454797c,942ad5f4)\n,S(f11dd4a6,72f73118,95775ae1,76c90b2a,5a0a61f1,6ca205d6,eef6c275,75054277,bc06a16d,2ef2ac0f,7ea2083c,ac18d0d0,6c307d45,51e0a0e8,3f59b568,b9556ef6)\n,S(42ebcc5d,710ba454,fd29a94e,f83c8004,b71fe85,9725c010,f10ca39c,864204f7,f8aa84eb,643101ed,4c7d5cdb,271d067c,e633c17c,dc698e40,279064d2,d65f223b)\n,S(d40877dc,d96d5a94,87b6fbc,e89d19a0,549e96da,13f1fb2e,67e9e3e1,85c80e52,be9bb9b3,85f20fcb,8e57b59a,ffc01442,c0be8306,f5d9087c,837e234c,5e789444)\n,S(c18b2c98,cd2110ab,888ec934,239240a7,aa40c1bb,ab8d7e39,8fa74358,2562931f,d9621034,9147d74c,75df18cd,1066c40b,b83f189c,937c01cb,24c2ce97,155773f8)\n,S(154d6b22,1a44f841,1cf4fa0c,4bb4debf,6fe94658,c648f9e4,d14f88e3,e05c0bd1,df0bc307,c705332f,328bbb6a,dd94e63f,7c1074f3,ebc55976,de552a59,5875559a)\n,S(a38259e5,629f93b1,a397d228,59842dbc,24485d59,c3ab86e0,a9326a35,e1a26f15,69b5accc,2fe52a63,b3874932,e8a79b8c,1713274f,f435d892,367bb9ea,91f783fb)\n,S(9d729eee,e91e3493,9925a7d5,2eeded18,14827029,6f822013,d4db2a3c,763fcd19,6d832154,3cc8621,166f731f,2d874fb0,9cadc09e,4e330339,657aa2f0,e3e89a1f)\n,S(2674f008,86307c7e,576cede7,944a9f9b,46398c93,8a0f8b39,b25701b3,67751e3a,3e9eb42,6ac9d1ef,837638d0,7b0f1f4e,e31bdec7,a9d22fa2,12a666b8,193f83cf)\n,S(b2a06d5e,adb1b856,dd28e9fd,bb626c0f,b7c1642c,6f70c2c2,743f3451,4e237f41,5d4caf8b,8673b268,227baed4,481ad60b,de579a98,4d005f5f,f3bcead6,3bf664d3)\n,S(20b27d64,d61debdc,ec3e4ec9,2040f05d,2b278c0f,1415ba60,f0bf23e1,222d713d,481d85e7,ff5c2df3,5cd26488,6056750e,c8c5c809,bb3afffb,41e447b7,a4e516a3)\n,S(4f4a610c,450eaa25,f60d7c15,20c551f7,5270930f,45a7c51b,fc7cd5c5,3ce3f2e5,df1e8e11,db416228,672d8d8e,f9d68ed,e824234e,fd7de39c,2b32fd90,3a47f328)\n,S(9b375ed8,504358,25570b4b,e359bc07,bc06c989,14659e9e,776fba36,a8aceaa9,3d056593,385c0069,915de5b1,f59c3483,22683440,86dcdf26,d1e6ae22,35e90927)\n,S(43640804,5d432c87,31f865e7,2390b7ff,c13aff87,37fcfba4,60c0192,2ec9d1be,e2338eaf,6fc73fe1,e3df2aac,54bb4fbe,5aff2a92,5b8b16eb,2346b220,6070cbeb)\n,S(a6e59c4f,24461172,4161f35c,fbe88d4e,59287f2e,f2b9ea39,4c476127,f41e0b66,75c70747,f5dd75f9,41cfa470,c4cf718a,57a8ae2b,2e7ab277,5f5ec5fe,7d9f334d)\n,S(ff639617,ae7351fd,977bf1e8,46a6d33a,5293a959,74b296ed,7c9a007b,25322d51,e6123dab,fa2355f7,653f81ff,ee798353,e21dca71,ef40639f,79d73116,53dac457)\n,S(77914840,1710d8e6,8a37cbc,5ad5e284,c254dfee,1c8b043,5f8ddbe9,4ef4faf3,d97f44e9,9ef3d4c7,4075dc3,894d2a6a,623be446,32c98eca,a54b8ed8,e0611414)\n,S(f68910aa,29254aa,10551c00,adc135c4,947cf1fc,6dd8ee5,d42579fb,79484aad,40bdfbdb,33a56d63,ad587ea,fc9784de,69f9f5c4,3f5c7c94,1b9b59e4,c052c1fc)\n,S(15be8f81,473d4cef,719c7501,1d560d84,f2d4d8d2,def1d696,29f62464,1b6e0fd3,7e66f926,fc991b41,c451ead0,6d93267,64b85ea8,849047bb,1d28eeee,70fd9a2a)\n,S(e113d5a,2e22302e,f4327297,7c41c8b,d0c5c26f,9a0bd9db,9091abdd,8a84e9ca,2e4862d8,34c6dc45,17a6b70b,2f1b2c5b,b54941d1,cb803530,26a257ca,f5574dc0)\n,S(96b10770,485bba67,7f620d9d,ec0d1be2,2c94dab0,57d6d595,aa78dfe7,47bea688,e060aaae,222726a,c1a1bd58,fc779d9a,ff854ac2,4a4996a5,2259e9f1,bbdbf30b)\n,S(81742f00,5555954e,17e5e899,d2cfd8c,57f6f7c7,5a38e183,de878934,2405545d,a1763fc2,e5f705f2,e6f2fbb0,73578fb0,a8d742c6,8f92236e,df1ee03d,2ed2fc0e)\n,S(17c19f13,96988f62,77cb72ea,f90d37bb,86bc7a0b,e16c1c17,fcc481ff,bb78a480,cb1290d5,210164eb,621c2642,ae3e51b9,3f430e60,718f9fd9,c5ec3bb6,53c78833)\n,S(7b0f06,e8746ec9,c6648b2b,bb861548,bfeee507,63c01c3f,40319beb,a2497a3c,c6949378,84297d8e,308b318f,1caa0c7b,1634b758,9d6e8c6a,2fdb778e,d6a70020)\n,S(715c2b06,2414183f,9a67d8c2,8a89b754,55a80517,cb1b8134,5f56e91,12c5e8b3,f89b89c8,9a795dc7,1e2d4cca,7f84b4d5,23167f03,97787b33,9205773f,2520370b)\n,S(e0d0ce00,f974fc78,76777662,efe5dbf5,57aed09,dd89a4c7,8f1f40dc,8f74d3b6,acc5be65,ed704847,94bc7f05,c4c5511f,c253befe,7cb3c0d3,e85704e2,e3e3eb56)\n,S(37553289,76fbb8b7,9a5aaf75,ecd9d2a1,bdba9a87,5bad6222,e770ab1f,d26432a2,6dbbe233,1b7e064b,d80bc7d0,12b2a088,1087e7c,2c5c1d77,eb016108,c2ced92d)\n,S(2e95c3ef,51ea9036,8683f6b0,8b2afb04,f46ca651,2abdc699,446ab3a0,6fe3d3ff,905ea87,b1d8dfe0,48463b94,c61dbc62,1556c66,b2b498,39cb40c3,299b554a)\n,S(25310e1e,721f3245,7f35c67f,b73553f6,6467580d,b5916cf4,fe7d75a,c4ff8eb5,9c5e52f9,be42eeb5,425a359b,87dcab1d,46ecd662,c17eb041,16b5430,786b4ace)\n,S(25932b1b,2b24fc2d,d7877911,7d7cb506,27a23b7d,7faf53b0,cf707f51,b7830b7b,7e8e23b4,acdb26b0,1d7969a6,ddf3a2ae,2215e206,109cf3e,4e32d91,df536765)\n,S(7d232af6,251f7667,ba69ba44,397f5b8a,892e135e,b09b684e,22b16a44,73c5ed3e,a3e8f638,c8a589b5,8cfdea61,d9824f1c,131b9045,9509b92c,1cd26571,a6d8356e)\n,S(4d56caa0,1b65ea87,ba3e05b0,a4495606,6afc8645,4847633,cb9e9755,c8c720f9,14c34678,36e65197,ca3f1ada,936f0348,7c1eaee1,977ae08f,50f41771,77537330)\n,S(71abd165,ca6ff8bb,775c81f4,2c722ed7,2615b503,3727dc2c,122efbd9,c500a88b,79ba2467,7284f86,2fb1c46a,e11ac4b9,a5969352,64224eb9,c39ab884,492620f1)\n,S(8462fccc,c3810519,cc449634,5c5d9e56,30215e74,c41179f4,2002e906,56a48965,535a966,cd7fb998,bc548a7e,29fc4640,f0eb75a7,5c3c05cb,64d09048,a7787d4b)\n,S(f68eac93,fed751d0,b578b5c,665684a8,b9c2b104,6fe45ae3,286e9351,36c09826,98e0c32b,98b0a8a2,8f119ff2,fa50e54b,66f7d8d5,732a1831,7334fc45,fd48bff5)\n,S(61447250,9a8d935,9c0e4014,f6ff569a,43467dc7,e4940b16,15f442b2,d9f72041,fb7177f,c7f57ee7,deea7108,dfbea888,fa58f209,2aeb2d2e,b2f33141,7ac8f807)\n,S(ea69ee11,4ffa1bd2,e2259a26,e2d88cf1,c9846ac9,379a1497,fc28ecc5,4b15614f,589b81b5,1dd6d750,91014108,3dd6cf3d,63183d1b,809b62c9,b17b768c,5ce4e2de)\n,S(34727b24,3404de96,641a1ce0,d7ff150b,38e6aa15,c51fab78,1464c660,4e5d5263,9198326b,cf56ca77,35b9baad,dc0069d3,1920bff2,d5bbf804,435289d4,d827d4f2)\n,S(952452ae,613778dc,29e2d275,6e98b4f0,eeebf4d9,526cead9,52f8d0d9,9e217461,c08b3a28,c195fb5a,f9a50eb1,1b1411b,c17f6582,dc14b5ff,797175b,2ad486a8)\n,S(fbca3f18,dc4a8bc7,7e9afeba,66610306,401b8342,bde2dbfd,2d4a156a,e78e49ff,2b829d6d,6027b2de,eda0db7b,c76b924f,4cf75573,bb9329b6,c7b7e443,f94129c9)\n,S(c7ddf11d,7ddc643a,957dff64,a08a4a70,5302bfff,b940882b,57bc4c15,5bd8c141,e9ca11f1,ac93b018,3fe8146,839be79b,b3711ee1,8a3daa88,89d55669,6e708e20)\n,S(71043a30,86e3063e,b831f7e4,4e682181,1b3f2353,9cb6efa2,cd0ee4a6,70ce31b8,4db3f338,ef9fd273,4aa9cc92,55e2984d,9334c164,5320b411,ebcb7cb4,89322c9d)\n,S(6de4ea40,15347cbb,d9349d36,80fa375c,5d70f044,799134c3,dbb6a776,48602585,3b76588,65ab52db,eea8d839,47025cf2,458a3243,38c73d70,f1d77df2,7f960418)\n,S(29faa79f,467cecb7,ea17e23b,6f7ba03d,db9a0cc0,e1fa6215,bc425696,ba4fecbe,e5aa691f,c42fbc29,c1f027d0,46bdf106,64a2245e,d2ff1154,e50ffa1b,48f34838)\n,S(ff880bfc,25ae5b22,78e5f15a,2bf8f5b,d750f8b8,74910f79,c8c42f93,16aafc99,9535f70a,728f79,37825bd8,1bb502db,60e7a166,bc8a0b10,5eeeee82,3a5747df)\n,S(b781b6a0,3837f6f5,8520c566,352e8c09,60eff0b2,42524eee,f6a6bd2f,a4a2a378,acd7b7d4,6c683dd9,43722ee7,3c12b69d,cbf8389e,62755e4f,c44fffbf,4cdbbb62)\n,S(6d976593,e8bac5d0,da732c64,82e4ac2b,b3f19062,59045990,ee540a3b,467406db,30c353e4,af6d8161,6c0bb9c0,f2a4aaed,6cbc1825,9a8b9658,3bd7e9c1,2f2a8b6b)\n,S(18ed676a,4dd3e0db,46212112,9fad1e13,683ec782,2a6d9401,5d0866bd,6cdc3032,c86b06e1,5dbfa82a,5f7b9762,65e03670,6f9a6e7,7ee319bb,8ef26b16,a51bd5)\n,S(3138e38,e9440ffc,c2cbce4d,aefd4b8d,d1e859d3,b951d18c,eb3540ca,db5ce2a1,df8ab1b2,a11a8667,dd660a13,490c6e6f,fef4bc40,94efa9a3,430e28c9,6895c241)\n,S(757df4ac,2025c9aa,b8ab1e76,149a9762,163ce608,f4903c3a,91571cf,e8b00c95,ff0af5fe,ab36c5d8,47d15ab7,65000765,c56bd7cb,4d0fd8c4,a37d4ecc,dfa03430)\n,S(8a697a52,7156589b,d13319a0,81e3b2f2,ce09de8,450b95cc,9aa70409,884c27e1,9eeb93c,b6029e9e,37f2815a,d332d5d9,5a5edde6,bbf03ca1,3df09f86,ad51f39d)\n,S(b0bb6987,36f9e0b1,6cfc2198,e37a84d5,d35eb89b,d4f4c0b1,650d60e3,e58c721b,33d5b200,ce25b501,6f09808f,b38e82d,b855615,2f48c1eb,b3b6363b,ed6e00dc)\n,S(1ca0edde,5dde4634,2637882a,d2f8ff7,ef6d6f5e,906ae2d8,d9f1b545,c837efed,19efb5ae,4cff683d,a7d5d4c0,f5eb9f3e,4c4d3a4f,ac58ee41,acb9ebda,a82863bc)\n,S(780e5b0e,b9a4e57d,66a84931,1e1b765,d59ad11a,de4e921e,d90fc422,4d474aa7,5ebd9ccc,58cc5f21,2da579f4,c79aa3a4,1d8f34ff,418516a3,d339320c,133ab811)\n,S(f7e92ce9,39808505,2d2af620,cdf210a7,30ec079a,54bf1468,edf686da,34eb4c9d,2c559dcf,e113a961,58fd54c0,32f14ada,57c23496,7a88b585,7b1f7ab9,78f93666)\n,S(3c3afa20,75bb20a7,8f9ff809,20d80d61,3a5688a4,269336f5,4bc7da5c,4a89f938,7ef38308,1dd235d6,e563a9f5,46435f22,3bd836d9,3f1d132b,978f3f9c,7b888c8d)\n,S(71d6f01d,ee60f9b5,75dec59e,7e56123,89fb9edc,3019115,af4fb155,f22097ee,e1ccc245,4a31a35c,52854091,fb414321,38da4fd2,eaf1680,2ef0470e,1c80bfee)\n,S(9726660f,5705ec80,908a77b2,8e6257de,b107fc31,c58ab6ea,1f5f75b9,38c4fa2d,94cc07ae,3102d1e9,6118c213,b6db0c65,d3636fe7,8ea40c6,90c86949,b48cd4c1)\n,S(ace5d0c7,54b2a1af,691a1a2,97e8b632,297fad12,ec1fc4b8,7fd02ac2,b2802719,924f9f24,8d3e725c,eba491f0,5f188d6a,7fc843ca,d24d0858,1f4c9485,8b9f85eb)\n,S(fa51306b,34800ff0,ccd778f2,838a4a2a,8200eafd,622e98b8,8fa566b3,85943f64,b60ee616,6b144873,a1cee030,fc92b50d,4b67757,ad34d5c8,5f05c871,4296e293)\n,S(85df9018,329d25a6,79c097ee,458eafcc,b716a59,611730f1,7c19d584,2dbea60a,c555d5b6,46d211c,e99ad7c0,9e787774,b7bc64c6,f2f6980a,e62e8911,897ab0fa)\n,S(2f77c00d,c2024467,ab461b52,ae634a99,337ff5f4,780637f3,efb989ce,24af5e3a,c7f4a678,ebcbfabd,870c52b0,be7efba6,c5d28e7,aef2b253,3f0e7fa,905e3e39)\n,S(52d8a23a,720050d6,ff6a499,7b802bf5,1f238df5,b0ef6001,58fc48c2,228bb34e,98ae81a7,861b8e1a,162d29b5,1c30c786,cebb1812,c91780f2,ccd302db,803d9136)\n,S(a7f3e479,eaca0049,22fb8320,47555b5c,701daf22,407462fd,37b0edb1,7212b211,80f6190c,8c4ca7c1,7ba68498,d1bac039,3e33767c,c476fae8,e926500b,9fbdaada)\n,S(31ef3150,e67bd326,61bbf4d7,942382af,73db5799,8f4880,ea04607c,a2356103,7db8f5d6,655d28d1,93b50bb5,14b16ed5,bc03c46a,e3d2c954,631834b1,a8a9a8ee)\n,S(ee82f155,469c0299,39ad1ee3,52edea30,599b0cd3,868131fc,eabee245,3b8b058d,fd0c0d4e,2d77c2c4,2add9ed6,cadb898c,32de9398,f0394400,eed2ff30,5092b10c)\n,S(dec7c7a,bfcedd6f,a9f7d45,8a071575,27354990,b456873e,206d1f7e,556b4586,af841ab4,cad597f4,186f0912,b79fe320,2c7626c7,b85cb276,73c18010,747200c4)\n,S(c28e3370,48cd6fe9,7591ba40,5519bd80,2bf34f12,ee48762e,526b34d1,f4d2369d,e00abdd,da456731,7f486dba,6976ba13,b8640f52,39325a64,7d50eb17,f0636e8b)\n,S(47157ca9,2c275f65,c29e9d,b0f23531,37027731,1cf05a93,7145123,df222195,648b17fa,c911fd25,af87e9ed,441cc874,9fefeb72,b34f8dc4,f430e0ce,89cbef6e)\n,S(84d11702,745c53ce,d81b5503,79ff1947,9a0a9253,a7ab3868,f5471a64,6ca73241,4f16b6a2,c3c087a,4efb1353,644e64cd,fc593ec1,d8d656b6,2c0e0bc2,25f858c5)\n,S(3bba3022,196060b8,6b2b2f28,ea8811c7,c74e8128,8e91adcc,b7fbe2d7,97d63fc9,7f34054a,f0945373,a77c5aa1,2ea4f54c,879d3f98,b6e7ef3a,9d73d2a2,a734e286)\n,S(85637f4,7a2c6143,2437485a,b3d40e70,b9f74606,aa8538f4,425e8a06,98651c6b,bc6a95d5,6fb42b1e,67b07576,83a5036,f76e8531,a30d0096,c3500ad9,93396054)\n,S(25302e98,5e75019a,21ed1605,dd3c543e,e8021a42,a40a967d,8ea6ed31,4dbbd123,849ccbe0,23097591,d46f9b4b,a13713f9,c0220639,11fdd0f3,267a4d8e,66797a83)\n,S(e59a30bf,88e393e3,c08d73da,ba720ae3,485fde0f,b6b85f8e,4117f5e4,f43bea40,6fd7824f,e222cb37,1a0fa6bd,33e4bf83,83ebbb64,87872fb4,42284498,6197dfd5)\n,S(c5902df6,97981a60,589e9bc3,b935de2e,de05331d,2c1365bd,a83f8183,f6247e4e,c67eb14f,5af551ef,1ab5ecb5,8feb7ce1,21d0736e,b93dac91,f865ac7d,2d75fe3c)\n,S(df8bdac7,fe27127e,c679a9b4,74e3c809,b8b6409c,2e6c4c1b,277ab4e6,d5e66ad,3ff26fe4,9f0b3896,54d802ed,72eb4708,2738256f,c0266dc7,645b1027,717d43e1)\n,S(1d55404e,9c7cb8ca,c39c7c02,b810d5f0,9eff9125,9166cf3,f1e8cf76,2c65a82c,c1787023,f6a1c8a3,5c499f64,a2fc4d23,e5a760ea,9a04707,c24bb9bd,b2a7632f)\n,S(35f390c9,b035fdfb,68506073,d585e450,2d040e96,67a1b4ef,804ee088,df43b44,6a85cd88,86aad8b7,7dc36fec,50eb9754,4c3cad2a,da43d038,3c55da38,bff512a2)\n,S(fbb0840d,ee888fa6,f26d7005,b2449cfd,1d22786e,d43d06d5,88f744c4,c5e059b0,6460514f,d89a70f2,3a4ffa21,9f651bae,203b05f4,bd3d45a6,508d2b25,cdb8d3bf)\n,S(24056cf0,1c2275dc,44608ac4,66931e91,61fa0ae1,3353cac9,ce481271,a34d78d7,43ebd3c6,7e7381d1,bf03088f,434a5275,965a3fa0,d86a51bf,7dda1b63,cbc7751f)\n,S(3b1043df,e8447c78,8e07c938,cd72f6b3,54f9f745,d7e71297,e7791972,70f9cd78,28e028c4,abf0d511,126c29d4,b2b185c7,b67ba361,e16c50c,34af129a,5e40d6fc)\n,S(aef909d1,41793638,80d75b23,6635805c,8088b08f,5c577a81,a5bedd20,69a040e6,cbb4c6f,de26b6c,5d0c2b43,df40a3fa,93350cc0,1c497382,d8a1bb7c,8600dc51)\n,S(c8d494f7,386331cb,6ff59aef,5f229bc7,913367b8,10f407ac,2c9f9d3,ca833f28,cb2c76f9,4b6285d4,d39afdac,bd3ef114,c7b85027,8d62da67,e70aa74b,b10de4d2)\n,S(25afcff7,af14ca32,3dc74443,71de7b5f,c1b52e17,6fe5f3f5,f4f39139,34f75b28,d867a4a4,7f9d7e97,6cb1f57f,8d505a66,5010cdfb,4af4b781,75271722,6942b789)\n,S(2436c86,f773930d,872c220d,c8bd72e5,d407682d,7708e2f8,19ad9632,3d32e2c7,6e396dea,92af663c,c44de690,24e1407f,20a95887,37f01662,bc89cdea,88ab67a5)\n,S(61ceebd5,9e5733c7,910bcb86,e19159ee,57638bb8,7f3cc56b,d0f4d25,147f349d,2a850545,e9b0ed08,fb63082e,741a30ea,7d85218f,86282aef,3e74b15c,f2fadb9e)\n,S(5a1133b5,d45d0071,42b91a73,79e2a46f,dcbfee6,e102d16d,d77e817e,b4b6c187,2ffd96ae,afd6d9c4,3c9c0517,133a4b7d,34c1c2e8,f398f81f,f6f0305,28d492e1)\n,S(b74a3849,8b701b41,29eb5abe,8dcb13b9,fff0f191,314dd293,9c38d0f,4563c8ac,9d844e57,e50a20fd,864d6f7c,5a677855,689be528,f8431186,ffa96679,9cb9014f)\n,S(c35c9cd0,4afb20b4,3fd1c337,5a952ad4,8e9a806c,a64aa4b7,52fcb204,5f89d26c,b041c6aa,4a83efcb,dee79d84,19e195b2,48c765c3,f069d5a4,b7e87792,79a9c65a)\n,S(9a85aa58,753868b3,f04b2af4,479141d7,11703dde,e5b6e5e8,fea8ad37,d0b82b96,465c70ab,aa16f03b,d24b8075,233ec626,4e062041,3bf485f2,551d9952,7bd75d27)\n,S(3ec71bcc,e051f3e5,12d83c14,cbd23f49,b3e825a3,cfa4c61b,d12eb057,5c86fe14,f198c21d,e2daa56a,55294c5a,b033f1aa,45caba3a,9a950007,db35f05e,e9915bdc)\n,S(ee1cbe22,939e1ede,9010e23,535bf33f,6b09e579,3737db45,aea48f00,b359ae63,bf604026,d4444df6,27f7d297,1dab6a91,acecb6d9,de53228d,47178017,921b90a5)\n,S(ebcbf3e1,71de3a62,ef47677d,1ff4d027,5a8cd92b,bc889ee7,8dcf0c99,6746073e,878d63c7,bc9c7224,914a3f3,2dadeb9,95c6d890,a3823f98,5c3f574,9ef6ebe8)\n,S(e4e92ee4,ce72ef15,b87c57d5,259520d9,b6066430,c090dae5,6e81b2fd,ab9db797,3faac465,4a03a753,559f47db,f5877452,6d21838c,9c1f8217,ebef6965,655f944c)\n,S(fc1ce758,8e292b03,7b4ef743,12eb1f67,cf275fc6,7c1e3d63,5bc42dd0,deac1cc1,176b79bf,44f7d9af,7f7c791e,8cafcb7a,495bc392,c23899b4,2fe7963d,e65186d7)\n,S(f1f5bfff,179e6a6c,692a86b2,1c95ef85,49482b3a,b97a491f,9e9c7056,ba94fc56,389257a8,a2cd3bc3,fb4f0620,5c2aae70,67041512,10c62093,13a2584f,8a39e143)\n,S(980e7414,61c3e001,ba6bfef8,d175a141,2c7aaa2e,748c3323,ac744fd6,ab793eb9,6e37ddae,29e05e83,b3cdde28,d4286005,34cbb33a,636c4259,c7fa7625,1b31826c)\n,S(f519cff7,686a5257,71986dc,7e6c1955,adb7faa6,a6f7a07f,66a257ed,a1b1c179,3e803eb0,8c765c98,7941d008,a93b8503,174ed4ed,1c31e97f,9eeb8f2,a55a807)\n,S(2dd8d9ea,3851fea9,1ba9bafd,bcc5cc0,9011d939,10edceee,144e2755,ba8f8061,6147f1af,d4224689,37cd058b,4ef52618,7adfdea9,ce970dc1,365fe04d,1da52ae3)\n,S(860c4262,9483537,47ac0c41,5aa00f63,2854f88c,d7d09b35,edefd780,1454a4ae,a2a7a22a,7d826d25,8e7dfc56,1eef0d85,d15378a2,80535cef,95ce6e2e,d73392f4)\n,S(e76b20ec,17d82c3d,987d4ea,20535209,e0697f90,2c964b28,ae97ad0b,aed732a6,c97844b6,85f6613b,fdb7cec9,cc47f701,32bc1137,d997f8f4,ad182492,67f54bf0)\n,S(26731d0d,12fba582,636862b1,62a417b7,718ec9cd,e3d047a6,50455efd,910ab88,3c10efb3,b464a61,6e2023b,b0736d6e,8d298609,47ba5714,3b1a71fc,9b542192)\n,S(50cb4878,52db811a,87fe46f5,ed014db0,3fc4570e,8b2d8ea8,9865df9d,a224dcde,bb8488a8,7937ae89,88f572a0,c100e450,c69db48d,303d06f9,5d54bd83,8b39621d)\n,S(fb69453b,1d67ffdb,670f9fb9,2b3fae5f,64b0c4d,cb28ba0e,7ebeeb21,ffb02a60,b0fdef36,92d881b6,3ebb1387,984120f8,d1ba17af,477364ca,41e303ee,a4fd2c39)\n,S(a8f1280b,4b720226,19faec4f,ea3f784d,3f4061a,56dbbb99,38c7706d,8bb249b4,ebb3b571,ac505913,4572e501,4be7be33,a97e12b9,bc1fd9d4,484703f4,6e39b8cc)\n,S(4292ce09,df305790,f17cb3be,30996016,420f83c1,bc19abb8,78b49027,6eacaa98,1b14d94c,bf2b1d1d,82cf1873,3461b76c,f32c8d5b,6746e2f9,aa2aa248,1c745d36)\n,S(ac241177,f16f747f,b796750,49c83f8f,8e1a062c,9796b05b,8c5a5587,a4c9464f,dd057503,8261d044,ec84eb03,73065687,266b695c,ef5cb41d,1cba3b5d,9176cf58)\n,S(692eca73,26bf2da5,7fd9d640,acf7f846,78e75c9b,86b18e7d,d7fd2545,751823d3,17d6d462,548ea78a,18557320,289d61da,14c3850,4ff03347,8f17fdd3,71c8e97f)\n,S(d01b1a44,55ef5011,e4ecf946,ec02e6f5,d0e129d4,d2f59889,e823cc5b,6f10e216,84a4d89e,55e33edd,d54f38f2,1649f5fd,807879e3,388df988,34556ae6,57f91a0f)\n,S(1eba61f2,96a788d8,9273a67,18f2a0cf,fb0798c2,393330f1,2f890bc7,9bfc1e9b,89f298cb,e8471046,2df0a6a6,b6c4b6af,505da2c0,9ee13266,bc47cd5d,2ddc9661)\n,S(26dff8da,94603121,4649fe1f,721edcc1,a2300ca,b1a6d548,9c9b68d7,415980ea,d8264a21,55e1bbdf,c3b65862,efb9548f,3c4a0a5f,97f5b713,9d3da15c,90004e60)\n,S(4e642b51,425e1822,1275f64f,283e9eb1,a3116adc,a6e25047,cee3bc0f,323fe676,f28b7d65,9125468c,4951db0a,bc35d4dd,65b9c5a0,ed27d742,47a68a23,89eafbb2)\n,S(354aff5c,ee9a27db,37e7c97b,4cea476b,b4f3700c,e9c26b21,e94d2e1a,78f448a2,8d6907d1,624b79e5,6392d008,2f6a794e,99b4c4d1,6ca78dd5,97709c86,2930fcdb)\n,S(5286d074,949369fe,8f69f020,c0b65f75,e76995ee,5f49b9dc,d570b956,8ffbdc3d,255ef2e5,3dd2c40c,1e462a45,27e6ee00,e0a23d3e,b16b05e2,2781de6,879703ab)\n,S(b84a8346,c86e2299,9acc8ff9,1a893592,6bddeeb8,6fde121c,266d5f60,3268add7,31179a8c,79f40238,e1b80c87,81e46597,29f5c8d3,d8bea0a3,f65b403b,ef20789f)\n,S(1e7bd5e6,63fc9a50,2258b9f1,14fc51c3,1b9dfc27,9022c67e,fde7872,dd12bb94,6287a9b4,555b146,7d250f11,e77ee8b5,7accefe,6d91cb6b,927611f2,c2c1b84)\n,S(7ee68a21,37289ebe,7a5cfde6,be672ca6,9d28acc4,54d6b8da,9c96b2ad,37d2bc81,3ec34064,a6c3ca,f2a8aeee,9b24e023,3d7dcbe,b7acddcc,8a53db84,c570c83e)\n,S(29d4b10c,f4be3bfa,a9d07fdd,da6ba7ae,f3adef75,67c3c33f,8d4d914c,f8ce570e,b6a74385,96a4f40a,40d03c25,2c7070da,2ec79e08,dbef71f2,422392ce,1058bf4c)\n,S(7907c5d9,5c5cd647,e312a43b,42c3f053,50218f10,da6279c9,895516d7,328c359e,6c65a9e1,ec062a1b,f2abca52,fdeeac18,26888378,58f985d4,c8f1c987,64d6a625)\n,S(cc436eae,ce11bbc3,36014fe7,bc68fcfa,e5bc2c55,c53430ad,fc994b8d,959d31b1,16160de7,d6ffbf64,d644e608,96052985,6b2bd539,66d7edb3,a50c924b,fa9706a2)\n,S(cf023d5d,278d4201,ae659d55,6239dfa2,1b5fb30b,14adbea,7351b620,150ec1f0,d6007395,ffcec07a,6e71c26e,7575cdb4,34c473b7,57d4574,9e5154e4,d4990741)\n,S(1a2a093,f718c59b,d4d35b73,2c547b61,12b6a257,e807a38d,71b04125,e7746a21,2674b542,652fa39a,1a2cadcc,3924796e,16c0f8b0,5d83f919,f8b93547,98fd4c95)\n,S(534ed420,4b8ac51,7518fdff,224ffae,f712e4c7,6a84215,fac925b7,eeb799d7,35e5852,3ea6199f,b9fe497f,576dfae8,fa30782f,d24cd439,c0708118,dbd82155)\n,S(8d31e4ad,9e6f30ae,6c78ff18,8f4b0457,e9ba646b,3a26138c,f11d84c1,4a00d08e,f0dbefc1,909396c1,3a1e36a4,844b2a87,e4b0b1cd,4b30e996,47839bcd,4dd5feb2)\n,S(81748452,267405a,bf664379,16ff7f73,c418439f,86b73159,54c15fd2,2d2b3412,13d1209b,435b50b,1409389,9961f5ae,9f6f95fd,280beba7,cb3f3f5d,a0f19bbc)\n,S(bca87f72,e604e885,64552b,edf380ca,45842270,57efe12a,6cc23847,658aaa3,ee508af5,28b77125,72c123c6,276ba23f,af26538d,5752d84b,54ee82ba,df9e3d0e)\n,S(de2baa9,a19652f6,c0c0365c,d6e78cb9,d527e546,1240fc52,e8c59183,7fcd3fb2,aeb418ef,466c32fd,4cb5f2be,571672dd,86573941,a9cf9bd,73377aca,1ed38905)\n,S(7b8ce1e9,14df7919,b54a0591,c077135e,556f6cab,c7665e5a,c0004390,22acca9e,a60a3ff3,9cd8ad49,c100b72,4338a54,d06a96a9,f3fdc7c2,fb8ae598,c0b40628)\n,S(cd71c179,13fe7443,19bc80f8,205d7617,4d6d44fd,a6ac3d1b,402279b,eca50e75,9f1e73bf,cf3438d0,1f01d1a9,3f633929,ae385812,528ad211,967bf38c,71419064)\n,S(42cad02e,32dc8dc3,4ba36161,d0816af1,619b70e,117da444,f4f1e454,73ca8fe4,97cb2134,5a259cff,8870823d,fe11031a,79e59d7e,dd2593c6,65128a8c,36e75568)\n,S(98a89130,4f0652c6,2986644a,62a1dfab,48331756,c8b9e1f6,d473c03c,b98ff8c7,c130f2ce,cc506903,9ca49b3e,534ad484,b277e0ad,7b2a8733,98864000,e9a824e8)\n,S(23c45c76,84762aa,7bfd39ff,284403b0,d7a4a128,6bd7b455,22c09d2e,df8a4328,f4ab7317,95c46f47,c3d46dc7,cb0d43de,d57cb274,ff0c350a,f0d79548,bb303cde)\n,S(8b700037,d584c4f2,f65416f2,dbd37c35,9e6a7b83,108dad34,3a6c4d0c,6a21d856,8371ec03,9ed0066d,4e8e7d86,69169f9a,5a172cf6,c324c2b,ecdfc76a,c365ca35)\n,S(da6164a8,d0fb4111,ca1d78f2,83e8180,4f4ae8,50ae8596,cdb97d9a,a30f8a7b,f9a8463,717e4f17,a77caf4e,10c11101,1cc0b5a1,c788307f,c7aba482,2a9a342d)\n,S(49f37d65,a9d1a54d,1929b9c2,6db7d7e,c45924e2,9e6010fa,2202d47d,eb5fd6b7,f9b9b785,28f62629,7bd0dbba,9340c142,1e64895,b1befa94,ca677de7,686aa51e)\n,S(8755f088,e26859a0,1a56b78,ba1898ab,12d80837,308677cc,b38e9c53,e36efa10,5d67013d,1eec7a88,215b4768,f55f83f6,434906a9,f2f6a9a9,de5df75f,6ef7e478)\n,S(35321796,b7aba6dd,873550fc,5a35e081,a4e6d134,a127c534,69ff777,c609045c,47ff0f43,efa93f4e,f197a680,4f1e1133,c5c8301c,b49de8ba,6fe10167,f0a1e832)\n,S(3abedd2b,644bd2bb,e77ab5ea,2823b42,83479fec,df2b3421,56fe9ace,612559b3,4269b08e,6c13b818,131824ba,11e3369a,87bbccfa,330e408f,17985b21,e5e32b06)\n,S(e30112a2,2c23462a,a803dc53,e3277d7,c14b62cc,92787f77,5be98ffc,7c956de8,d0c7e3d0,dbb10e8b,7a9f4e0f,f93e7581,99d90f6d,d869368a,8d2ad369,4898da40)\n,S(6250858,439c4b4f,30d47f6c,b9259103,bcdf497b,f09d3762,f1073f5b,973cd06b,3437f5e4,84ce4258,5584407a,fb0e4383,87e4c930,2fcc902e,cd26b721,5075328e)\n,S(77ad4485,b8c94cfa,4e904bc3,90e93e3f,66838d50,fb16e09b,dcb39ad6,88f826ea,4dbc505a,9798879e,137c8444,750ec3c3,34c2ecb5,485bab73,6b0b9bbf,806001d4)\n,S(5dcd3e92,e413601d,b9dce337,7a8e67e4,3852b8cf,ac41066c,ad579199,3ac0b7db,acccd081,35efb43a,306760ed,ec278f7f,36996ed0,d6367f85,417754cb,a4e997c9)\n,S(3a26663b,adce051f,c41d2e6b,9b931851,e65ca385,15f59737,fc8c27f5,caff788d,2d647eab,af01d846,70110e,7272cb4,9b9db0b8,88a8113,bab5f89b,90abc2bb)\n,S(f57cceb9,51dc98fc,712fe9c2,c024031f,4e3b0f02,5067ac4,b8bb0096,e4b1aec0,696093eb,7a8aebed,a751455,782f99fb,ddb2c66d,438a7bca,9c4df301,b7a1ea25)\n,S(a89a4778,bca06e14,bdbd46c,948ccd36,df47c83a,2dbba9b0,93589406,be9b4a0c,f4224dd6,9d08262d,22b98e2e,4e781e6e,939d69ed,d59f30d1,d23f9ea1,6ef366cf)\n,S(64738381,84fe8247,2b463f4c,7ff04a6f,6a3be92f,ba295d72,adf065b8,10b962a9,bcd100c0,d09f6e93,4fe9d58d,d58004d0,9ba164fa,324010bb,c973709a,2ce32de)\n,S(4a683a38,21261e28,2e0196ba,d9f8727a,f7bcaa4c,afd5e686,6c7cffaa,3adc7774,b5aba4d0,ec3d9aa4,39b37f0b,15f40fed,913af371,b1b94f20,2cc93378,954ff3b0)\n,S(1025e16e,fdaeccd4,436cfd9e,b8ee1614,53fee046,e420296f,53cc2e5a,bb5cb3c7,f806b96b,67ce92a3,e159b807,58f38f73,704e4d8,3bd611c2,25314400,f0c48f3b)\n,S(6149d809,675a5353,6fe2217b,7f6777c7,60039cb3,5a0840e4,552e2ac6,db6650d2,e4ae636c,9a9808aa,4f49b03f,bd12f786,c72f07f2,9e397a11,68154505,b1a96ca9)\n,S(ba24112,43888342,54ee8327,4bb03dd3,2fff3edb,4d607047,d8c141d4,c3fec47f,8a6bf123,29c3fcdd,38e6a18d,ed28c8a1,3717e997,9d0c366d,aa640dd,bad5c35e)\n,S(c20df096,3c7cac7e,9dbaa259,538af550,35c00550,94ad4993,2190688e,7856a961,491e995d,16cf7ae9,85b8dd8d,6a5890b8,fb4f2c42,aea7c33b,ad84835f,b245d40a)\n,S(6f53d8ca,4dbb4d72,d9ef3dcb,93dd2ec1,aac9f38b,1b4cb2a5,c76449d,4faf0c50,6784a02d,f449beb7,24156de2,486753c0,77bbecc3,27caee12,f7888687,4e7ae24a)\n,S(e57e78bd,71a08f60,51c8a046,184757eb,6364ae0f,8eca86b3,51317712,737bdda3,a0623c7e,8a535f66,57116c82,da77554e,31a1d263,28ec0e8f,116976d0,f4385342)\n,S(f52f6f29,aad496ab,9e0abd0e,a7cb53a7,7853e8e1,a6e5ffff,285e97c4,f7ab099a,3df7c1fc,6d5c5e81,8b5de4b7,66f2995d,c361511c,198a68e0,b7196204,559d55a3)\n,S(da74f5fb,5c0a6d09,6fb26268,b33d9c86,ec5cf08d,8bd65fe2,59f836a7,3efb0dc3,7e50e989,de5e2847,7e31c816,42a51edd,8d0ea031,35423f3e,ffea07a9,48a62c47)\n,S(2a2c9aa8,7bd45217,f341d35,9a9d2de8,35d14414,cfd3eed8,a2337a64,e051f4ff,bf9efdeb,99335f68,a01fd7e5,d8aec9f9,49688221,59d18bf8,a466c6ef,9648a1ce)\n,S(2a3440b1,91dc5314,c6d0da7d,b07e2cf3,7d13bcef,1ebfd23b,492ad632,92022266,bdec24f5,c993a020,2f2fda24,e8707947,e4c1e9f2,2c34efc6,dd1e62d3,e2ae2b40)\n,S(a3a9bd74,3d1d36ad,fad36e8b,d5544500,e0accea,d53d081c,28740109,e10942a2,cc33decf,f8cae7d8,dedab1fc,ea1b4c16,2cb71104,ff75c16b,66db334f,ec794ca0)\n,S(5b83d48f,70a2f212,93dc724,77f4d87f,80db7eac,2b08d70d,308953d1,88804950,f78c0488,a10c66c2,e11368d7,690fcc4d,982ecdb4,7ed539c3,30d4b14,4248b545)\n,S(dd5b46a5,6e3e4a22,39e210,a871db8e,d901ab96,3c6fec29,4140d77b,be9736a,d9b76eba,ebdd45ac,35c52268,ccd35df8,9e7136ef,879848ce,ae647c13,d421d46b)\n,S(2f74db5a,25486127,6236bc5b,22214097,d1ff781f,3798f64,62cc6dcb,3f61a6d3,b6d635ed,256f6d2f,a91b868e,a3014db3,64647147,ac89248e,ca983c09,53149c1c)\n,S(32adc0c4,1f7c939a,58640b8b,fde1c8ba,119bff26,dfe4b0be,c5058ddf,23ab2e09,cf317248,7f0bb297,d7d7772d,2a01d917,40beed83,3a35a293,66bbb0dd,3946ae3f)\n,S(4fe53ca7,172da8,272a152e,d74c07ed,4e336cb5,85cb2ae9,36f9f301,87c6cdce,81f6d1c4,bd711c16,21cc2986,916578c6,baf42870,58b84843,27e46e98,81e3a8ce)\n,S(601934f5,577fa2a6,702f316e,b4dfed9a,3b08dc06,5d3e58ae,63f8548d,9fb2569f,6df7d882,4360fd7f,b5f96f68,93b1f1de,55e19690,f6acf954,362074d0,30f714cc)\n,S(79da708,8ff4806c,64492ee5,2e9dda2f,e1bec3c6,79fa3129,8173c0f7,aa79d321,2b1eca29,76f2884a,35167e8a,bd2055af,44be734b,b0e0847f,f90abe8b,17f9a47)\n,S(602b8209,c39f299c,bc208b51,ca8bf691,5b8d4fc8,d8399186,7e589dce,79262974,f8b6cda,5d7ca83,6aac43f9,4791a5d8,a5ed1f05,af90f5f2,267cd9da,567f5555)\n,S(57a4f368,868a8a6d,572991e4,84e66481,ff14c05,c0fa0232,75251151,fe0e53d1,d6cc87c,5bc29b83,368e1786,9e964f2f,53d52ea3,aa3e5a9e,fa1fa578,123a0c6d)\n,S(4f9b48f0,ae9df110,70c4c5ae,2b012cd6,4599063e,5bd32b54,43548b78,6a06db2a,d5a7a0fe,3cafc78f,66f563eb,f6fe42ae,980cd621,bf18aa15,7bdeded7,dd5ea016)\n,S(e46a5308,4b11349f,44661589,38bb663d,e1910aad,35de0708,5a053b5f,6c5e7375,da46da88,9583632d,fbf923be,9f07ace2,cb8c3d2b,fa6bfc47,9e1a7d32,e1183ce9)\n,S(3643d766,b94b161e,323e64de,3c925040,d62f2ad6,2b60a674,15c8b962,1c071ea,faf69af1,1f2b9e05,db29dcff,a020f6d4,80835d4f,83d35a96,7aff1b5b,9f16fa98)\n,S(96769694,c026152,1bbe1b48,544e05dc,e6bea57b,7fa31478,f6ff1b1b,bf497dca,4eb5a6fd,7d0dae14,9673b033,bd97c08f,8210fd12,c759293c,40782702,b3e30b03)\n,S(2e41def,2c479931,89be0ff4,b4110e28,7f80fda6,f4134ef6,5c867e66,59a24d07,26a14d7b,b8388b12,a3ba1f50,e56ffb3a,69bde3c1,17441f52,158531d,c874c313)\n,S(f39d941a,f6eafe0e,9a44fbf7,71eb63e4,db94cbf0,854a837d,b7f284c5,ac03c29b,1ffed770,dac4d12,2241f8b5,507e04b0,72cd5934,c03b0183,d8b62e73,8cbd7b73)\n,S(90900d34,4576beea,911f8dc,c2d90625,1cdac045,28017d1c,59576449,50136419,60d38bbb,2a338102,da044498,a2b2c5c,1457cee6,eb34d666,b0c0956a,48161ad6)\n,S(3a5e4627,1007f4a6,2e744226,f1d2b782,44a523e3,97b6509e,e3e1a513,d8ac2e06,50f01fc1,74cfc3f,256dee2,fa415f35,bcdfcfe,57b79d90,f75226ba,e8202449)\n,S(f66ea256,f6d711e4,1ea5492e,f6f6e46a,b13ac258,a8f0eb87,a06b6c3f,13e24355,fb8a1c47,980ea6c,87ec2401,4c0f6d2a,8f32a2a0,6f3fd0b5,7fa00307,26243841)\n,S(cada0520,19a16ccc,fbb6d4ed,6c7436d0,c946a485,ab3362a8,5c62580b,d3038fa0,e249940a,34804324,ac706963,91ae7393,421de971,af0f203,2b5f2d21,7d32ae6)\n,S(d16f5b5e,820b7295,96bd5192,9dd830b2,ce208413,5c2db712,2c4e75fa,cb759cf1,70edb084,cfbebcd7,ddd36380,75e05147,6ecdd585,e228749c,e61e3784,6a448ed8)\n,S(bbccce8d,dc6bae0d,cb6e5149,8c666f31,3dc31ac9,d4d949a4,84751134,d5f71535,4da772fc,63ff92be,5271b479,68e7bbf5,c8941f68,989fa6e,a23ce5ad,23f91eed)\n,S(515f28f5,cd8b75c4,325e940d,6821eba,e7d5d2f8,e836b291,5f606152,ed4243fe,a13143cc,f5d2b8fe,14a09f46,68229258,e1855a82,6f7db2a2,4ba2f1c4,63668b47)\n,S(bd2f46ae,a78c462d,8691ed6f,9d381278,68d356b5,b8fd7f79,df6ed845,21233837,8f645ed3,f3cc803f,7eb32f70,ed7d6fe2,84ddd9ae,62ab8324,b92bd7c8,79c4af11)\n,S(8576f13c,c3d32122,69e10b51,2011a450,4f8d7d3,92e0f133,47d7d65d,f9e37dfa,fbbf2048,3fa0e131,2309eb8c,19eede8b,86ff9028,45b66195,8d19d903,f68b1a4f)\n,S(70be1e91,8fdf4e47,d73f262a,bf2361fd,763a83f2,d31cf41a,23b8c9f3,8309db4a,82f80575,e4246ef4,c13fa48,8892943b,a1897ac9,dc3ef188,29f3f708,428bc573)\n,S(bb8a093d,1d586b53,9bf54a46,1a353af9,173529a,12312361,c8064e91,4b41180f,460e0ed7,8456a251,cd68d66b,ccf5de7e,28707540,d221d65e,72334d85,af478269)\n,S(7817ae4f,34d9194c,f4b30628,7071fa1e,7b976a84,754c1860,6dc4a124,bc5c2e69,25f4ec56,c4e3b1b5,bc6ed346,e4f8b340,6afe1c0c,f84ad7b,481be5dd,2cd55cbc)\n,S(85c760dc,411f59fa,6feed8e2,a0e5bb5f,e72af5f1,2734c9a5,bccfed11,bf66abcc,92583db0,b57c9c71,bf0f1248,23a67e5b,89a8910e,6500e8ad,10666b26,cbcb8cc4)\n,S(20d80d35,4d9d762f,f2c739e3,b1e7377b,d9ee7123,47ea979a,d4c81abc,5d5086c3,6e191d7b,8017a675,e8123b7f,1f1351b5,ef6ed6b,1b225cf7,48941df7,62f0efe5)\n,S(3306922d,43f2c4b0,65f6d9c8,d1289804,ec26cefc,97090fde,86dc3e0,fdba5657,98a8cc9f,c93dd7ac,7079f76e,fa1c4065,86f0e941,9f87cd88,1b865c30,13c7efc4)\n,S(b35c7597,54d37f12,440f7703,39223681,8a1b9aac,b085fc1,8acde6c7,3b2fb001,484b90,69b08485,95c58ffb,df5968e,2ea789b4,6f93d660,a7af6b75,13cd649d)\n,S(9bd41b53,7f8bc303,6cc9d010,45922b1a,5c647f8,e90fd587,86ef0975,474e1f33,590afbf6,55ece125,da486bfe,1ff389a5,8b866776,8d2013ae,c25d03bc,bf0274ac)\n,S(2a3a672c,a9b3aef0,bce89703,a38e0dcb,6950d93a,7359420e,5278f160,541ded42,4c3a94b6,13f3383d,b908ebef,6b62bab2,c95f850c,f88aea5f,c6af3b89,c2693d8e)\n,S(31ba6af2,a2d94f8,d4df3800,353806dc,c8db945f,16dc5bf6,93794382,58f74d3d,ad19dd02,b290eb1c,ba5d915e,f60344c5,fc1e6a82,c5427f4a,236238cc,2329df5a)\n,S(fa2199bd,74b014f0,5df0f9b8,ebf44a98,587c0251,e9c49bb0,5bb12952,bc869720,4328917d,6efdf5f4,b0f5c483,860e1e9b,41ab6ee,b1f5631a,66d2d213,b163f45e)\n,S(417b9046,c7f53c0f,5ccf2847,692ab63d,8aaac02,e3bfd99f,30a469a9,8be22d52,78c15e65,5f309788,dff6eae6,91706e00,7aede9a8,3bdb08e0,d495d6a4,863b82c0)\n,S(56ac91f2,47d51fd8,8a0e6eca,67a69ffa,6158f498,1714964,f33e43d5,6f18bc2a,351b7d5c,9e1b1a4b,717c518b,37b81c64,429beeae,26e7a740,c54b1a66,dd0680c7)\n,S(aeba32f8,83307ef3,152d835a,a0babec9,e164ae70,10c90250,68507d65,37215f8a,8d747d39,35cf5f2e,6ff16557,7ccef843,7ce7e3c6,a41cc40f,dcde2ae8,582c4e21)\n,S(42c7b219,9af00c97,693d6bcc,256ed047,79ee10eb,e4dbe63,d47d681d,21db5813,a15fb708,1fb1c7cb,2ce44a4d,f8958432,a5fd875d,1fcf7c75,c3c4865b,b219378f)\n,S(4337b297,ecf365a8,88bfe19d,1bcd5fe,25e0dba2,9c39e2c,36ca116d,a24e5d98,49c723ab,c6541edb,cbc83348,5e06db73,28d1ef8b,c9cd9722,915415bb,2242b7ad)\n,S(18998c76,1481932c,e968af0c,eb84b250,aeefbf25,27e4ef84,a2519a1d,b7f857bf,455ebc85,64518443,5cac9ae7,7f3289d0,91133054,d0bf9ba3,9b7c8128,26c97fa2)\n,S(64c76320,fa24572a,590516f,1bfd8b4f,87767b64,1e65588e,69cb895b,6a49b2b,a39a2a5,c4795095,a03ae76f,86825ec1,78366c8a,8799d395,d39fe8cf,74b9603f)\n,S(41657405,e35eb87c,a5ba5f2d,3c6f12a6,dea917a3,3b3b44e1,ebbd3bf4,812b0ad7,8e2169ae,36f1452b,4577fe78,7adccb53,4d0ed75c,2096b491,6b68dd6f,95ff815d)\n,S(aa200fa3,768a4b89,16e110c8,f4a6315,7bfd4a11,2c10cb6,8b76e30d,c0391f6e,567bd959,28b21555,dfec898b,d7d198a8,c49b79d4,6905afde,7fb3534e,a584695b)\n,S(7aa78328,841d2f54,b843ba48,c8c9c623,eb529bd6,9e584966,555f9bba,77131599,6b4a2715,e4b8478b,24da7e7a,64e2f6f1,32711246,29a583ba,1bb44af3,69f698ed)\n,S(94b1a7bd,6a2767ff,459234f,c78fbbbe,48446b4f,64bbdfdf,dae34475,396969a1,8f3065ef,2273a871,dd29320a,8b9aa41e,e77e2178,e8b8854f,df1e88cf,991cc33d)\n,S(6b957ba7,1bfeebf5,294c8cb2,7681e0c0,5407df71,37a34710,35fd98ce,d526573a,67e4808d,3fc1853c,5e5cd4ff,6efb5092,35c6df0e,c0a5f7f4,583fdb88,7a2724a0)\n,S(8b274330,ea34100,3be93892,ab1fcb2b,f9a6dfb6,80bd9cb2,b8aa6916,43717f7f,54fa2abb,77855883,e627f828,49c71389,4ed141aa,9c9cda3,c99afaf1,7998db90)\n,S(d3f64f9b,67362339,491274de,77ac665f,3b686372,499a12e7,5d145e26,7b58db05,c06116c8,52bd15f4,145284f4,3899faa8,9bea5850,4018310e,5c82a050,c9a52449)\n,S(198926f8,ce0e4329,1bb9280,390f795e,870d071e,801b4d4b,c4aeb555,f237ba79,76125bd9,5b8d07e7,5e27658f,a0dcf10f,5d6c10d0,4548dd76,a833f206,d2b3d34e)\n,S(1bbd4d,595152f8,39746cfb,6ddc2584,ee4358fc,6f878309,9adca58b,cf01a13f,18f534de,cceac5ea,7083cdfe,3de5ebdf,ebdc70fc,4f0856e0,b587e9fc,df8d7733)\n,S(88737f45,b2639272,37cb551f,52022693,52457f,21db398c,1312e275,f5a3132a,79a5672c,2895e1e8,4b1a7b22,21ba0c5e,e3e61cfe,c95aa029,b2a179d,e0c496ed)\n,S(cbf3e18b,1f277773,34cca35e,8fe1cfa9,2d68497e,46e7a252,4e14bf,cccb1e83,db00c395,65bd456c,3c9d242a,5f24748c,7b91f770,926ba9a4,1ff5c94,86bc3f99)\n,S(8070ef0c,f186efae,5f9c8846,72a93a98,8ab65b20,2720893c,40b1a641,c7022f70,da9805b0,46946a05,46824cf5,a87fd838,cc85c853,a745d8ca,a249d881,127bd9e5)\n,S(acaf984b,8fa45dbb,e84c5064,8b6fe23,5c57dcb6,21243e21,90286980,c3f71eab,46f4ec16,8259fa2e,f144dfb0,bbae2907,801b8c1d,f17dd0b5,d1db3bd1,2ceb278e)\n,S(2893a05,91f9ecea,735e8a32,a57e3d25,e8916252,52a44099,4eeda971,fbfdc965,6ea29941,91e4b123,12b5186,efb7d255,372aa6c2,aaf12a1,8c3b15a0,7bcfbb6a)\n,S(64974631,68f0cb60,9c926e28,5ed12df0,cfccab0a,58f11b39,dc05b644,c2be951d,ea74181b,2fa885e2,4344bb21,9f2509c7,d432b5a9,c178b406,160489a,31eafb7c)\n,S(b938443e,513394c8,b2d4f7c2,9811039,918621c,5d3a86e2,d1bf0e88,ba1faeef,af47f2a8,c7d98642,50784f38,45ff9414,c52473c8,9b669be0,96387daf,c353fc85)\n,S(bd1ee245,ad10f50e,9f8fd4a7,876346b9,24f4758c,cf69bb8d,42f6dac5,9d2a5320,776e2e3e,69d88d5,c26477ac,74ffe92c,134ce443,64b39518,af787348,e0039605)\n,S(cb7ec68,805e855f,17e7dc05,4279d8fb,6d8e1320,67a486a9,7d49df43,c660650f,f50790b2,84c04103,11f302eb,71525fd,b12d7339,6d259b5a,91ce4fd8,229e903c)\n,S(ef07cf7e,affbb5a,29e22a1c,7c84cda7,1968c615,fbde2a15,e1c1211b,ab30cf83,98f4a6c9,422630d4,103fc2fe,e4c80f2c,2ca5565e,25859979,815c425c,70ef574f)\n,S(4ffc1948,4d7fcc59,ccce4ca0,d11400f1,13dc5064,8626781,4eec26ad,3e7b8fc6,be9ebe07,98ff3d83,cb5ac107,5dc87f12,d94b65e3,937ee669,61b4e587,7fb75aa9)\n,S(cbdd5373,339ed493,b8cdf0ef,ac6371b0,fad1ad6b,2da4db63,b4ed68bc,61d18396,527de487,c3212d47,1f538b6f,f709c130,3784a7d7,c803e5fa,c77bfa1a,d6bdb13f)\n,S(ea035b2b,d8a1d7e9,db7f6b06,5e003f99,4e650aa0,e3035fed,65e7bf5b,c67cb5d2,aecb4370,2219f488,86772e91,afe81c6b,2cd57e96,2a3b0edd,dbc64608,8c3761c4)\n,S(de1a4fd6,c1d6240a,d6e9dda6,b2d43fda,911648f6,901ed0cd,99ba8ef5,99f8db89,effc94d1,61c0ff41,d1ca6085,371e2e62,f85f90b1,542d2cd,3a4223ea,884da03e)\n,S(2e644141,e8d87ed6,e1215787,8bcffebc,d75e118a,f00fb7f0,e58cf5b7,e6a076ed,4aa858dd,f2ba62d8,6b8a7011,26d22c2,b45c240d,f65f85b7,320e80ff,cb34b8d2)\n,S(3844386a,90d6b878,90fb78ad,8f2d28e,47ff8879,2d275c3e,956883b3,71b73a33,f7f5df12,1a8149c0,75f6bde1,2ca8ee89,ff284557,f17cd57c,714fd474,b365cd18)\n,S(e1fe9b32,1b91d362,2b618cd8,9ae8203d,bde185e0,bab2fae8,ff7e96f0,74358e42,c590fe90,1797132e,a25eff10,f2bf2a76,cef4f064,acaba1d5,f8537b4a,ddf3e1c4)\n,S(560a00da,2f57d821,b6a0144d,45898af0,aefbbded,a1e08a49,9cc727c4,b27a3c0b,64874e4e,39db1377,3bcb79ff,983b152e,5db86d63,4dbbeeaa,a8b0112a,e795e208)\n,S(9f33fba7,7ec8de2a,c1b16424,856e2814,1afe9b1d,bd0cd1dc,e5cbb2f2,f379094d,97cb8cd8,1838e2a7,26034f19,b5decd61,d972abd9,bffe3848,92fb0a9c,26fe94b0)\n,S(98822fa8,24057512,48f9da04,2a0cfb15,e46ee253,e06a1226,da75047e,72d7a1b9,3e9eea35,7bc54ac,da547561,1f9590f3,db975d4c,ce7c4cc2,a553df14,feb19285)\n,S(b814d1ac,4b757268,6ad88327,32f0f84b,bc72875e,7e21707c,c4086a06,ac1dbd88,b6364488,3749a122,401b8ab3,c4a7b8a8,c03462ff,18d69c36,cf145299,f18a98)\n,S(246484c4,1e42113c,cd39f7b7,eed9dfcf,b39cf842,85c28cd8,6233c1a2,bd043e97,f35025b0,2e31bdd8,41d36f7,9d0b75e6,80f431eb,44a50502,3877f5d0,eb9552d3)\n,S(9f330365,7b41b2ec,d87fff0e,4284e4c3,bbe8c524,91d358e,847afb98,ff51db91,4b9a7bcb,221c8870,de176a43,d4f7cce5,adf519c1,75613dad,317f4337,72d5e70d)\n,S(c2e78e9b,3c75433c,5f5623a,8f5a4dc2,b0e71951,4b16161c,225b9bca,9d529d25,1e75c8f1,938376ca,c6387b20,9b24a2e3,e794362a,d62441b9,50588a3c,ab9079bb)\n,S(89340ec4,b6e81b7c,855c9636,b548aeae,2125c40d,2907f86,7ce5e6ba,a7695391,f739a94e,263e796d,df1cc2c1,3e2bc10,2b2a9c9d,55248671,575c3ea3,792c72c6)\n,S(9204ff15,f1443cc2,78facd4,8d38a6c3,5d66a93d,8fd8e2da,a7e2bbe2,d6629d22,2b9de875,456b50e9,6205020e,c293ff3c,13120555,82727253,be10263a,7559c019)\n,S(f156da10,41122fd7,ce6b518d,c325f5de,61fad9e4,a7bd684d,7abc495e,ebff04d6,c73294ab,f4f2adfe,dcbaa78d,2031a5d9,7f2c404d,739f5703,76e46a0e,1b631d4)\n,S(771a2d78,37d6413a,13099861,6050c362,2c379a55,26506265,9fa7da02,3280fa75,8b6bc39f,5cfe1f5b,82bef0b0,f6c8dd1b,e4270304,d5bc70f6,6b600b26,5d4c9aca)\n,S(14cd58e0,36bb2c59,f63b52b1,f40e51cd,aec29f0e,b1cc0401,8e512366,85a18f69,79c254fd,ed354641,744c7262,39ea4e8f,ea15b19e,746b372e,f270c8d9,9c5e2006)\n,S(e5f54077,1060072,5800bff1,390a67de,cd539cc9,52b6b43c,22bff27b,1a8633f1,d6e1c6c3,9baa86c7,5838e691,f9af8a06,80274da9,b0f54b5f,4c3b2028,8d666367)\n,S(b0eaaf42,9c072037,fbfd14ba,79693d93,6791344b,3d37c3d7,5b8eaf8a,e7429197,d72661e,4a171b65,4f124d9b,d0201710,bc237382,6a2f0341,51051716,9b7af26d)\n,S(e022d70b,44edaed,35957383,284e4ea0,5380f92e,cf62ce88,3c2e11e6,604d67c2,423c55d4,3ba0ed0d,1455228a,3153e9c2,7aed89b,2c3ddc71,52d2b11c,91ab4143)\n,S(92a2d73e,b2eaaaf2,65a70f07,b949511b,af1a3eda,9e5d8651,349a665a,4bc5ab5f,4492d419,4794d254,9a089fff,53a32631,5f1703c,5ac34049,92d68121,e00fa973)\n,S(43409686,de50a9c,cf35ac44,47a9ceeb,b12f102e,3ee6003e,c96235a9,8db9cb30,2f781040,952e1017,8e4e38ad,bd9c6c8b,c8e1e898,7f316cb0,37d2cddc,4e10bba9)\n,S(d349dd1b,643f8d4,1b83aa5a,d735dc4e,94542643,3888a4e1,aaaa0ade,2394cd12,67f2f057,1da2b6ac,295c71c9,ea00efe9,cf082257,ece35bc6,72adece,433249a5)\n,S(9a909a95,7fb87ebb,35f6834d,272d8ce7,babad39d,8f8323d9,c6813781,66dd10e6,ce3ead1a,32771a28,7f624835,2a2f6001,c12f16d9,f7093cec,86386572,a2ddbca1)\n,S(f38b1e18,df2a2a64,9a3be25d,3686b5fb,1d77f971,1214d452,a67bccf0,ac07fa0b,5c9e9a,7f71b201,ba11ced5,9c0a4623,419a20d8,c488f9d4,591671ef,71e65ea6)\n,S(42360fca,26b8d095,df52738b,c2762ed2,7b909784,c12b79a6,a86e06c8,31535a67,6b6f4ce5,e43ec003,be88bc43,2bddc453,db93aec1,657f6f66,5dec1912,468345e4)\n,S(e3d7198d,a7c5e3b9,997993ea,a32377b1,b87325c0,5a002a94,53404c36,303f4a1e,72437218,ece6148c,df742be8,35fabfe4,a05f19cf,3205e65f,5c813781,2053ef4d)\n,S(39412945,a8301110,6b54f625,8191529e,2f93db5,bd68db48,d6bc6d9,687cb59b,b8db822c,60f5c319,18b05784,40a958b4,e08b0a80,a1015d9f,d2826506,f250f08d)\n,S(4d275f7,7e0ee98e,76b857c7,ed9368ce,d93dc914,d54ad4f4,21d2c097,cd241fc2,ecb803d4,9b502911,f619d361,f952ab13,935448e8,90cc2f05,277e48ab,a39d7473)\n,S(29364876,c1db9cbd,a3efcd5b,6599ed59,160b145,3c8a9e03,c013f807,869556ce,2bdb4af4,cc44950c,84f56237,95941f7e,43ffb56a,77df186c,2dc31910,f23f6ede)\n,S(7531f4a9,63dccdf7,ab83ef10,d3ba1333,6febcf41,f4b21e55,d380ee6d,e4878034,4753da9f,91d56bc2,1e9628ca,2d6269b1,e1dcb1bb,87c55e,9c44034a,1ba36ae8)\n,S(8266d626,3d12feca,440dce7a,4bdf8ac1,6050ca28,5bc16777,a3d9450c,5c286e08,2500f2bf,fb8a4eb6,6a5e7e36,399f633c,96d908e2,5cda4877,5455df2c,afe2328b)\n,S(66480001,4f339f15,8c39b26e,84389f87,6d5e62aa,59cb63d6,9eaa86d1,4bc589e9,a0699b3f,e3eb5a37,9f078526,375ac319,f145ffc1,da8a42f5,96c7016c,4ad92e2a)\n,S(f8efcc85,8b9c0fba,605921b5,e6c89343,f641e2b8,e1f45134,86b77ab6,4cc70d49,ba97202f,7086f0d9,af5a0ae3,35d9a3c,5f4de2e2,79278834,f8b1d875,50a9d607)\n,S(a5c1227d,254324a3,b1ec627c,93abfb3d,6f2485b0,1d8e2e73,6c542e09,9c992540,c9189db4,8a163bb5,6d99bed7,f38a7f7a,64cfef45,cf977da5,a1d16dbc,86ecc7cc)\n,S(271b2619,a5b253df,fbb655d,7702dec5,6c85bb00,9260d893,8e050606,b8bbaf3,58ccf3fc,22cb8f27,dcdbd174,6abe5591,72bca7e5,d5af3bd8,d86c9a49,3ecd2ce5)\n,S(c9e1382b,20c79741,d81800c,e721d4f2,1202ba30,92cac36a,d90c1dfd,570ae16,7eb1fcab,2a47cea0,3a92f707,d799749,6f7a0dfb,f9a43f6,90d213b8,1231e5b2)\n,S(574b25,65232a04,1d58cb75,12b48945,45897e6a,8bd47dec,b1e0941e,309f2,bbfb86a9,567d74bf,93fbf2cc,6a9c9dd3,474db8fa,c2b5fb72,38b3af8,fe4615a9)\n,S(9efe86ac,a6305eda,4b520e00,4dff6c56,1135e7ec,6953d2b4,a988d508,63046c38,4f92a291,32cb0818,af7cbe67,ec3b4d8a,7afa4f79,91a9ae42,551ad831,aae9af70)\n,S(82ea48a0,ff76fa17,374bf4c3,d0918e6a,df26cafa,33d87284,13aa2dcb,d813f254,6a029539,9bb555aa,39de1ca1,417a8950,49b4c2d6,26ddf8e4,a7086b1d,bf2ac9f2)\n,S(c289483e,817bb06c,31352a24,ba60adfb,e3af2feb,de329f4f,5fbde755,bdd2baaa,3b7ee90d,8b4aecef,62b6854a,1feb595f,9c49945e,c19685c0,4b13a1ce,1c780a53)\n,S(6bde46cb,b5580d58,ea68deb3,1b0587b6,1698660,d78a8300,1c740b4,96e12cc4,3188a6a7,c1cd166a,4894ce75,c79d076,a41cc5c,d142ed91,e096eb32,e9293292)\n,S(d1d2a3ae,2844615e,57f0a11d,66fd7571,176738f,a066cbdf,4519ac1f,65827cf4,7c0cfff7,c01c196,8b7697d7,c51562eb,8271f936,5c7daee7,f963122,67f603db)\n,S(b74c0c87,4d195557,3b551c85,2abf9a5c,e276b088,cfaa0be8,f6515ed7,ba27370a,f0cb0e,380c571e,fe5e307b,ec4ed8c2,6f0c325e,114d71b5,51e0f1f7,45a662ab)\n,S(a9a71b9a,9f126c3f,a17c3041,2317e118,84950077,baee298f,47d42609,f9015874,c05f3ffd,b31bf0cb,7fa4be1d,f634cecf,f1b1137f,551220f0,8f34c2a6,a42e0586)\n,S(d6de1153,a161f27,ddb51416,2b3f823b,2b1b99fa,3fa21c25,9b02274a,80dbc68c,6c620863,659785a5,eec15d25,9acbdefc,714fab61,4e766215,348c80bd,bc59764a)\n,S(dcaa1dbc,3acdca5c,51f8c22f,359487fa,73a7dc36,2a796df,11292a74,776b73f1,dc4131fc,c22c607b,4833719b,1715179,b4b4d49a,958c7514,7c8c4a8f,cc85159)\n,S(135537a0,c4be13,1c3aa93c,677094d5,5f3a1300,95499d21,2206a244,5ab6c,7ef69f1f,d2d3df67,335f0d1d,dd52370b,8f3ebcf,e3483330,48c2f045,64fb0f69)\n,S(28f1d817,c23262e6,4cd572bb,e3fd99ae,751dd6e5,5e9e804a,fb3fe9d8,39de93ac,24f5861,987e3da4,2dae0e89,67c835ac,8f5dfe8b,d41e5cb0,97029b48,39e2cb7e)\n,S(f7c4ef83,6e8fb7fb,8eb31155,c08102df,e0779b87,9ad641e2,5f8ce135,44294289,7f9a781,db339621,d6150f09,16eb9682,16470d23,6957a0d1,3629964f,1f6bce2c)\n,S(f1f5ae5e,1ddc9b35,18b66f7e,25a735d4,ddc8d018,5112faed,a8da8f66,1a28b3e6,9dbff12c,97924d80,50a4a8df,24fe7a8f,5c5c3486,3edb7cb4,1c6d9ddf,b9ad4288)\n,S(95f83173,d170ce9c,1ca0dbc7,4578b639,257c10a1,eb65827d,c2afbd73,8b654f,63a83ebc,8294a88,413c3c91,c6918a31,7d5ab83b,7bee35b8,b75d1cbc,3412487)\n,S(f4ada65c,9f095e11,eb88c8e3,77d60553,96474935,91be3a7d,f8c83c09,6a3ff750,e7683f28,a38545b2,e6cbc87c,3dbcc4a5,2ede1676,1b0dd78d,3ac51a5c,ad861ed3)\n,S(41afac96,f714db3b,1b7bcd59,1dc7bc24,40b82756,d9394fd0,3afe7ae4,299e5fd2,9c2e9c6a,3292ff12,426e98ae,ac654a44,61c52d00,5da7af20,474e9a47,499fedc)\n,S(37f30b1b,2cb81c9b,61941fe9,cca35f0d,e1b8dffd,c42f3ffd,ccaa16e,e8487405,92bf7a85,e3401d51,d9fdd08e,1086b649,8086bb3c,a4c9a2bb,61b1d54d,8cb88a0f)\n,S(2f577166,646e7eaa,21531202,2ce0c8eb,605a2199,454c205b,9d760716,584fb3ce,f0d7326f,e43dcead,5ae0dc68,4d04b969,af32e8da,ed624ee0,98567dff,3d5f446)\n,S(8abbc780,92c5512b,5eba0af9,4affdbf8,3c2e24ff,bf9fe7d,fd57e5ba,64b5150a,58f5998f,c2ec19a,a495b974,ffeccf6d,bb87dec,49152327,91a167d7,f6896b75)\n,S(e41ace8f,a01376b3,27c73fe4,7e57cfc,f6da7cf5,c2810aed,219dd065,c147571c,b590aada,3c2a714c,322d0459,272f98e5,715d4545,196127a3,7d8a94bf,776844a2)\n,S(300c9877,8b6355ee,ddd80f7f,4124789d,7c0c84fc,9d9ebb5a,be714cd9,890f1d88,dac2ba62,c5718731,c8f5c7a,4e1a7b80,68c5076c,834dd385,20f5e93b,e39c9002)\n,S(69e339d2,19d40f84,25a072c1,f7876c3f,dcdb6623,26ca1b5c,87681707,12e24c61,8d439150,59a44700,2157e849,9b535921,4cd47280,937405a1,bad0b86d,38babc50)\n,S(e56493df,8e47a99f,8ab3ccf6,41fab7b4,cddd779f,51fc746d,a2fdd484,cbbdb909,68dba20a,559e14fe,d0806036,d41c18b5,9745319d,758c1145,b6e49ca3,e3f5ee59)\n,S(37a91c57,8998511c,d39c11e5,86e00eb0,f76532de,574d9c61,1a34d38d,e7f50587,e3a188af,d2d8a24,735975dc,9da895,feac2710,ab9d381e,e5d1dc43,b3145f18)\n,S(c5f059fb,5cc262e1,12c629c7,194d783a,6224016f,65e4d24a,86c52742,dee88c1f,1c85bf52,1a96a95a,5177792d,590b46d5,8c090705,1efa0623,ab15578f,b38c890a)\n,S(566edecc,d605ceb1,a298c59d,78401acf,c6323c63,f2845827,62678924,9b8716a1,ee0d1373,5adf6f20,789f85b9,32d332ff,8c40b3af,c02010a1,5ad062d4,5a44cc90)\n,S(327e7033,c6ef4f87,52e33d,bccb4642,3e6cf4e2,c3ebb4c8,db69ccde,db2c7c7b,fc49092b,2be0f29b,4aa3e266,709aeb1c,12266239,f7bd9263,4aae16e9,53e8db36)\n,S(989a7f69,3ac0ac86,55f29704,ea6caff6,84ef5ae2,8c5f5e1a,1eae7009,97778024,573d127b,3396458e,74bb5bd4,4acfea64,e8eb1fd7,3b0b292b,d1b7b642,80dadfd0)\n,S(9ca7672f,14f27f54,ed1cec4b,74f49a57,7ce313fa,4a665976,9c22cc61,b30fc94,f920c4d7,31d52a4a,30803f81,82df8d30,6ab14104,eeec11dc,d2d6ca0f,3904e4a1)\n,S(db100645,654fe8e1,95831687,17e2721a,6097850,ed2ef0cd,e1d5555e,7847f5f5,2b2c3ece,a9c90ecf,34fcdf89,5f76c8b6,619287ce,e745014c,96281928,31056567)\n,S(4e2a0c9e,82743b42,5e6110a8,f3bff14e,418a34fa,65269c07,bb94d00c,d53295a9,512ac2e3,e00bb04b,6b4b9059,a3ac69c,8a34e5ec,8dfa14b3,d98b2c4e,3cccca7a)\n,S(c12b3f70,24ea8acb,5136f98,185fb1cc,60c71a77,2943b68d,7334352f,66ac77f6,b799f99b,6f4b76f0,1f09f5a7,bfbe2526,d67a195,83327323,9c07bddf,2544803)\n,S(64e5a2e,daf34e1d,ebd7c0cf,616413ff,d6c09b82,bfa783fe,aa755464,8ffd7e58,e020e09,66f032e2,e905d611,adf0926e,7509a2a4,b51844ff,72651f34,3c2f4a50)\n,S(2b0b8b55,fa734380,f6ad1857,e03f02dd,3d66ec57,2cfb3b9f,ef040895,3f0a838a,ac897251,a9146597,8e0b45ba,e1c880a4,147ce01c,3408e476,5bd9013d,9e73a61a)\n,S(ae0e3d30,a2026133,d3a54529,965a9679,6523e8b4,1efd4c5b,d6778930,2a88525e,fb6918ff,85632d24,250be67b,339ab260,c80c087d,da1efee9,7ec5dfb5,38f80552)\n,S(2ff9c711,4dfea166,ffae46cb,1f44c3,3bfa1530,edf23454,a83de862,8fe00dd9,53f667a,4441817,a3e38351,78195c5d,acb0d707,bd20e759,9b5e82c4,6f318783)\n,S(cc027014,88b959c6,c043f60c,c42b1449,9e2614e4,c19f5726,3edb116a,4e7bf695,eab3f590,9b22f677,666ce655,149a5f07,7b5325c,2036dfe2,e572e64a,5bb6007a)\n,S(1801efd1,3c8035a6,5efe3b47,68495d27,f9dbf45a,f019d455,84d68be8,28a945d5,dff2d19e,fcb5968e,f4ef49d5,9a82f8b,f44a5abc,e0b68568,1acbda1b,fa59c4fe)\n,S(6da2a9d5,7b60962,357c09de,4c7ababd,5b698fe3,6e747f8b,e6ab78fc,3cdd7cbf,1e274e70,4aeb8ae2,295ac9f9,b37c0af1,71310b82,99acc378,d505bdcc,e275060c)\n,S(7e8fc96f,6a9215dd,3bf9e8a6,ea944ff0,c7dfe23a,1a99f44c,832a11ad,bafc82e4,e9a4fbe1,e0c26ca7,f739ed00,c63f3886,57d09503,a808ed51,ddc872e3,b1342bff)\n,S(a6362f3a,77d6d6f7,fe266ab3,78707641,9f53e133,718ccf27,559bb448,7e0caf64,c01622da,3fc2385c,60a5cd86,66f751b,e29d8539,f473cd70,8784d61,d2cc787e)\n,S(51865222,28b47493,a3da19b4,7076c1a9,8582bd55,37c25557,44970075,9b37d2b3,f0f0b979,68638d9d,93fca65b,f40cb8ce,826558b8,52451ad1,7d0afbd0,44287be1)\n,S(a2a0909b,a9f1b9c3,8c714ff4,f71995ab,4d80212,9e8ee8e6,7e8bc3d1,81d472ce,4123900b,d45ec7bf,71bfdf98,ec453392,8b364d1e,cd925a6a,1e8f5c5e,ec40068d)\n,S(da518122,454e7f36,a63f5ac2,a1bf979e,f1357bea,f9f0c921,2b031f87,b83aef2d,bf877efd,d415e80,c828c5e,1b9dd8b9,6cb7f3f8,b9a0cb32,b6bd8f37,686da722)\n,S(41c40c54,1a983125,e59aa572,910c5aa4,8a698306,d483f82e,6cbd7506,3947a87d,76dabb65,6b89910a,bba9f129,ffbdf5e7,ef840033,c30f4c81,4e86f101,a3bfc57f)\n,S(c49fde83,87f2e464,6847c980,acc50d88,28745e4c,88a41318,709099cc,9aaddbfd,a65bc512,dfd07bd3,79cbaf9e,628be7f8,c7ddb4ee,6611fa94,bbb48c7e,ae7227e1)\n,S(85b17d61,b6ee743d,4df21940,6d7b7426,3a6c6b88,e8c51071,7a1f0183,e0fceae,22b9e8a2,74c71feb,5046ce02,2f4bffbb,ebddc53e,704f6be8,92d3092e,55868fef)\n,S(c8e1d37f,e6d677f1,3e752189,505639ee,3914afc2,c8d4e43e,883f5c54,f117964f,b0cacd18,d08f5a91,af46ba55,91f99497,ee4a7ab4,36ab48e4,f88ad5ab,39bfc21e)\n,S(dfec0030,7d25888c,5a7d6f83,33112995,1a30baa0,b97add9,866078a7,e483836b,4e5a8a06,bf2e9447,ef466416,82af8e44,f407ca0b,6fb97809,56e13a90,bafaa00d)\n,S(eac6c438,7c18d8c6,eed7618d,c9d3076e,c842ff6e,5f4d4b20,92594d7f,7f0be9d6,19d69bbf,fc0c1b82,ba71802a,c0feebbd,77a86a67,d734a163,4e823a6b,2265b8d1)\n,S(9ff38c4e,4dcddec,a4824db7,97f6ac80,69432c15,9cbc99b7,4d642011,b3424cde,f72fa660,b7c1bbfe,df45b0c9,3cc84b81,266bd041,b94f54f9,1d26221b,51619ebc)\n,S(5e78593f,3a5a3293,5f9e4f8c,4fe28555,9153f69d,d44b2c1c,146fc644,a5313f36,9d9d5844,dc63bdd1,b2d95b70,5d63c97,58cbc5a6,1b2d114b,89da9b9a,8afd9c47)\n,S(a107c7a4,89284b6f,b01ba38b,3e221c2,ad31a48,77af9b32,d22c8544,71009ae4,66072d4,6be46591,ee386cd5,bc0f9f2b,653b580b,c515d4c4,a0fc369a,27d9f6b5)\n,S(241f1d0,308d9845,fe2445ba,67929976,ff98e88e,cc23a8f4,190ce5fa,41b02af1,886697ec,d413a88d,fa15723a,daf91d32,9c881ee,c5ac9c74,366b7ea8,a7e194a9)\n,S(319ee8d2,627f906e,83d5c6d2,6eac3b42,34186016,8b9a9283,c8790c6b,e48a72fa,59e496ed,a67816e0,3409f849,1cb458c5,76034453,65fb281,9d0cc427,3e9eaa57)\n,S(1866811a,fdf9bd,937f4f7e,96985759,e0100866,192878e1,a2614625,bfca4822,215e0465,e85f9c88,2783a131,6b65fa7c,585f0319,1a642501,72e51269,d5b7ae19)\n,S(7effbed7,b949000,5db429fb,8cf64099,3989675a,f7394ce6,9ff2f769,53992f26,6efbb5ba,28f26d4b,5256affa,cbf2dc0b,616d8b6a,c6cd2aa7,a1d09ac8,40c7c749)\n,S(d8c72bd0,e59315f2,1fee45c1,937952b2,665c8d66,70f14bf0,957a4d25,2b168867,64c02d62,fdd40a6f,d11e2cc3,a73fc60a,8a2da31b,2c99ae6e,5a946c61,be56fbcd)\n,S(710ec622,ce64f381,43b96bbc,b0b0d691,87bbfd51,fab4d47a,bcf18308,18d0db4b,edfd1086,526c3af0,c2e9b961,890f531d,3d275c36,beabb0c5,4963314e,4534d994)\n,S(9427964b,9aeaedd4,9c168e76,38086ddb,70574f27,9e4c3348,68e4c595,30d51ca6,110b41cf,2a6b0067,eb3b312e,928583d9,e0026bea,684c57af,7300a611,5c4e2dd8)\n,S(aef79435,a8b3ed9c,9eb515c0,6db62165,c5a2e816,5eaa4a5c,46a59b39,8f55565f,6616e8f2,1274c425,c50cb93d,8942aab3,3653511,3c3552a0,118b17a4,5584b91d)\n,S(3ebdd832,3546063a,68f40193,59d72f26,f49f0ce,4a5af994,a4ac67f3,3074b5a3,12367d4,b29549ee,d0eba318,f395d712,db7962f2,c8e2d9be,ed895006,78460238)\n,S(a38d9e5e,c52b0871,d0bc6bc3,b673c848,19af86e2,534d60dd,729b405e,426aeff2,ebe46771,d9ae6c5d,13895538,3c8de4d5,f6d13428,8ac36a1c,b01c75e9,f32cad02)\n,S(e7d29f82,619cbb19,90c407f7,b452cb8e,334369a1,16901b0f,9f4ec342,48a7d624,7595ced4,618b5160,6b8ce230,45d7616f,15b6ce14,aa8eee07,42bec5b5,9fc4e614)\n,S(ec869eb0,279227b9,4ae333e2,6018f00c,7523de5c,e3e8c4ed,f81cefcf,4043ceae,a421aa55,2c89c841,a48bdd26,4e67d82b,ca3fe577,64101556,ec6ba7dc,711ac92b)\n,S(4549d908,e44a8c8b,6fc5c057,144a352a,6f07523c,e026fae7,c070ff35,c6ec5e71,71d8e320,7707e04,10208c19,e2c8dc79,64b48600,1a6d640f,44c1138b,7ab5dd7a)\n,S(51bb6e9e,fef7b8c9,b0a4f381,3e1406b3,2cc7a53d,165b385f,f98144b0,a5b070b2,65282be9,dd794fd0,8a31de11,d46df7cd,5268eedc,aadf3bef,de5956b5,a467044e)\n,S(7cdc3297,4c7caa82,44203afc,d48e625e,aa2027d4,d91613e4,5a83eba0,696d001f,b92b9943,3b1a55b3,b78027a7,a289e5a2,6060a411,6c2cca36,19253490,83519565)\n,S(3ca9c6be,b8e989b6,a67722f6,d817a6be,aa478fba,10146fc9,3099575,609c9314,5502ed7f,f4b81bc3,8386bba3,4124ca30,74c6e0da,bd148e4d,6bb7f096,ceca2c0f)\n,S(aa2abe6c,45edcada,f01bc1c8,38ed5e63,90e1a229,cc920436,864111e8,ad354d0c,1b8229c6,6f91304a,24c61251,f1ba2b26,95bb3da8,87154d47,c44dc9f2,f824f6cd)\n,S(b52cae3d,f28c9d59,319f226d,ef73b60f,75466aad,fbe6f75a,2ab6936d,8e3bc7ee,ebee735e,22c091d,cc873848,8a7c958a,421e0759,2e17fa3a,4462db88,8bcfe220)\n,S(c1085703,62a6dcb6,13da6283,23496169,635469c3,47b65661,838d9053,3821ef54,fe6442c8,c1e6a8eb,2dc2cac1,40ad4c7c,44511cdd,82b79cde,c38cf9b3,4ceaf517)\n,S(f09e9d1c,fcaf127f,59d45476,56422907,83477fcd,2fa6c768,d5a3965d,af08c11d,f01a722,1f44fb15,bf428fc9,c5d7efd9,a5b2e663,cfecc9a2,7e8f964e,8bc15d10)\n,S(602462ef,1e473ebe,d88b3b17,9d71b597,fd3e805f,e03d341a,36c277f,495c4527,f91db461,71411dce,aaad9f23,53f2159e,fed2a9b1,eb9d2ce2,844e1f6d,63a079c3)\n,S(273a881e,8e0d99fa,104ae355,8126a20d,6b828d13,96bbc70,720197fe,9bb582d,5bb26c58,14a7b914,cd3b2f72,7f76b6c0,d1b40775,79a2c3da,29534a1a,684b0d5d)\n,S(7c1df346,616cb72,b42f4172,36fc98f9,e8cd0504,1da47d9f,566c8df2,e80cd54d,ad3e7e0d,d602b9be,45ba8d45,6bc12558,73153c2e,c16773b9,390ad630,4fc41dd7)\n,S(796e2634,657ff114,7394551f,3ce800b7,9ad644b0,539786d3,c62c6551,3d942f94,b65bbe38,ed587111,c480eb9,c30081a4,1e8ec66a,8400db11,bb1cc7c2,a14f1c60)\n,S(5e2761fa,9985f68a,a469953a,2a6642c8,62b0565b,602fc206,193bded6,1a302bd1,5ba09b70,9db24f5d,2f47c07,51367d0,3715c9da,b7d430b4,713dbac5,7253e274)\n,S(46458c92,fd341a0f,eb1ab038,5a246b40,5c004c22,98db90e6,164126c5,4fabe794,859d68b,345341b8,58afc324,263f1ca6,9d018fae,eecf33ea,f02a3dd8,d7446725)\n,S(fc481830,bf817c1c,ffc9ddc3,d6f4e624,a410e134,cbfb952c,5c7379a5,81153265,a188b228,bd3d7da1,44a48e89,fd9db4ab,8dfe385f,ace8e169,a43a2787,59322551)\n,S(42d9767d,9771a550,3c702742,ce2aedbf,3a780466,804ad901,7792610d,5eed03e6,df69432e,9764f337,3a2c782b,e02d2433,d2e0f568,d0dd83ec,e89ea1c2,5ad50417)\n,S(37122c49,993ab297,72e60222,615ed912,462deefd,d28e04dc,dc72f4e1,b9477148,627ff4f0,924cfbc3,aa0422cc,36402b8e,410b3ede,a552408e,f1d3820c,5996e39d)\n,S(9c548182,94bafcbe,743e52cc,a76e1ead,3619a557,a5cb8bb7,3140ea1a,5c6896c3,5fcc472e,b88e8528,ec71dafb,f70504c2,ec0478b3,209494c5,b53bf05,b38f7fcc)\n,S(7b9d7ad7,aa5b1f69,75c4e025,17123608,a59277f,d63f2a07,7ae69b80,f65a2db9,6cde1ee8,714aa229,d01c14d6,f514ecae,c4a7f15c,a756812f,abfd61fd,d7d1bf8)\n,S(af5ddaf2,c985560a,d656d948,e41e082e,6990e950,6c77d53e,171cdea,58a9a102,e348451b,72896ff3,c4839ff7,6ce16b59,1f685348,eff943f5,fd4581f9,eca5b505)\n,S(42667f18,e957bd19,5fab366,2e0d1565,d26394b4,14e2a9a3,95becb69,2111293d,288dd2b2,69e9bb63,4e7fb16c,1fe25797,3c0076b1,aecaa2a2,e57020d5,66bbc7a5)\n,S(5e9c7a1d,50ab8326,74c2a5a6,f32665ce,9be97161,5e59b618,587541b7,40b276d7,92283461,1f39af42,34292c61,2c70744a,ec466418,ee08b5b1,a298456d,5fa11f17)\n,S(98c60ffa,f486b582,2b4d9ac9,7b320b97,8b52b506,8b46bc48,9a2a4f28,dfed8b2a,a1c26113,c2534955,812f42fa,306edbe5,70416d84,aedc132b,5807b29b,745280f9)\n,S(92bfa982,1ed52cd9,3c286e71,f350e5a7,f309481f,d866516c,f0a7599d,c385babc,a3fc9796,c71ab4b1,b7a54e73,8dfe24f7,6f527692,9516bcb8,2fae9ed,b2c1ddb4)\n,S(9be27408,bd8eb59f,ace413e8,402b0c37,7b7798b9,3bb18c4,ec197382,fa5b865f,11085580,19646a39,68eed2c8,1bb92dde,def3ec29,5024c027,f54e8bfd,a67a2f61)\n,S(27cd6a6c,b7bab059,6b791ce3,8c0918bf,7751bc59,db9e5827,5b1b9c46,976350bc,890d5167,8fce2ac5,f13761df,68651e7,2f41d04d,4feb4011,a16f80ee,83faeda8)\n,S(e896e14d,aaf96139,4c8f6597,a0c66463,5f22be3c,96f30e1f,5d8881ce,f468f2eb,beb004b0,512c1ab1,dc4d971a,fd88baca,efea7e84,dadd2726,bb9f2b3,b196030b)\n,S(24e2d269,ac485401,634b3779,efab2c0f,a9dd2389,850bb3da,54ec0d67,e53f8ec0,de702ec2,642bd4c2,3bca2ca,663a05a3,f5beda5b,e41fa460,8929aa58,219e525)\n,S(97a627c9,48c1c9e4,5d50159b,4b121a50,9b5c4d01,de0a7db9,5a9d9c09,681d1676,19bd095b,55399c29,fcad4303,7f5d5c21,8d5f3cf9,a7c90b9f,fef7ee92,6f3203d9)\n,S(a70d8251,e604ec5f,777234c7,f9d3c850,33ed6760,1fa0814b,40bd5370,7195b08f,df28d907,74e23de3,f152c016,ac710d43,85325a89,6a859f4e,e126d50,acbccc4f)\n,S(2d676c43,4b276472,ce01a007,13d78b17,27743a97,36f3412e,a7c8c15a,fa42f42b,be28cde4,6ef5d32,403b8f94,1082b684,52fa703c,339498ea,24c08ff,c9fa7312)\n,S(f66c25e1,75167275,5db857cf,cf27c036,46c89d29,b4a0d729,28fd42b4,b29cf5,3ee23ad4,22c4a884,4c049150,cd9c18ca,8d2a0231,bad69b6e,5926de9,c7193201)\n,S(dba47c4b,9d39d87e,ef44f81d,24e8e005,ce6e77ad,8e4fdc6c,29393d7d,2427060,2d5c6492,e53d000f,977eedd,4dc3b5c5,5240f28b,9fcfb597,338edbbb,3d8d7622)\n,S(a17601d9,4f627dc5,5895aeda,e91da3b6,94788f65,f083b01b,bfdf8815,27e10f0f,74089fc8,cfea1b15,afb025bd,99905b3a,baded5b,45e30890,fa3d8403,360a1183)\n,S(dd70309f,b84afe90,7e261a12,5fb7ac8d,1c24c6c3,54eb83d5,188f3a13,4d80e141,32014ac0,ac93a77f,9d35b786,2c88ddde,4bdfd566,f6555868,2a836535,44bed563)\n,S(79fd503d,e746baf9,701253f0,4c6a2f3,cadefb93,920c83f7,83b57768,87037afd,3c5cb658,63180931,3fa20c26,647a523e,86a4e600,8e8b17f,1e0d690d,eca61b93)\n,S(d1aaf37d,77c7d63b,1f4eb896,16a29a4a,1e72658a,93560956,6b92c122,ba0ff6a0,e535b7ae,5cfbba07,2bdf0e0b,bf435bdc,c7cac39d,9d9ae32e,cfd13945,3ca93bec)\n,S(68ff1b82,b351d94b,9b6b74fc,2cda4345,fe525d58,d6599644,5c752757,aad93c4f,abbb0ef1,c422ac08,d06194aa,c5d93bdd,9186e374,8518192b,79818f3a,b465a13c)\n,S(22785c97,18063e5d,5db73bc,f4ca6487,14393ea2,62ece24a,5c41c059,9610552d,9c08026a,d7a7a80c,24c5e75c,8a75cd6e,1933e64a,25cb98c4,157181aa,ae1d8774)\n,S(626cb5e7,563fb757,5f066258,3fc21762,e2678063,a77d8580,8891f244,4f5ffebf,8369ff6,72c3c3f2,43516184,5a9851c1,953a6da2,5662e11c,ce170cbc,668498b4)\n,S(a99f0ef4,d6f46105,80ffa430,b88a4f28,61c8c4e4,b6fadac5,5e668f5a,80d12d2a,972adf29,39db0083,77802c40,6ae2aef6,4e2f064a,f8304d3e,28fff33e,b1053d06)\n,S(b243ce27,2ff0b2db,cb80a3fb,dfbe94ab,784afe3c,cab3fe61,1931de9,c7f02645,db2ead19,fbb8c820,c7233df8,fea51836,3e85b858,4622be9f,41a0448e,360b7559)\n,S(c74e3c9d,685cb62c,6a71b21a,a1dff5,43efb264,543222f3,f8bdf570,4363deb3,987d8261,fbf23d05,a38358ef,c4efb61a,5cd550b6,1e833ed4,38734486,edc4b2ec)\n,S(ff2f64a7,fc984d4b,d1c885f3,4c096e9d,d34710c2,43dc3047,8886ef0d,ddf71c47,14c06258,fd5e2fdf,1eec9125,7690c0d7,9eac60d,785f2497,65e1a85a,a06e906d)\n,S(7d92c4e1,3f4cab24,d36e8a8b,140f743a,6819b514,f6a19bad,ec162141,bb712085,606b5762,2ec7d7d2,a9b19330,9da686b8,3e0dc920,e6be33d1,b726f416,81b698c8)\n,S(3a43d4d,9ef45289,89c9487c,77951602,4ce0cc20,ffbcd518,a0bd2546,fe13b6c,5f24d325,5768905e,6ba28d61,e6b126a8,eedad2a1,53499912,dfba3fc0,d9deb36e)\n,S(8e72f02,80105e4d,15cc67e7,371d0c5e,6e59fd05,b3c66308,67342a6c,eea25f8f,94ddc51,58fdb86d,f09870da,47b79b03,1eada5ad,9bbdd509,9ea1d9de,96b368e)\n,S(b89cfc23,6dc02762,ca77f9d1,8343f12e,ab8789b0,e5872d6b,fd9d013c,ccef54dd,9c9a7285,45a5996b,4a6ce6f9,df860d11,c3ad135c,f1f7437d,2ba7b904,411141cd)\n,S(e85ee008,979868b4,bb190b53,5624b3b5,6744a43e,2c473ebb,c64e4910,41ccb59b,d3afe70f,9edec50c,227e3b3d,7eddd1d,e1c9a8b,f842d723,a8075a52,12cbd6a2)\n,S(d8dd6bf2,774d6d15,93cc8e16,d5134066,f7f90651,39915b3b,fb0d5d93,b6cb97b5,5a203094,5f734f3f,11431862,b85e9f8b,25f7e6d1,91512b2c,6d256f4a,535e26f4)\n,S(77e081c5,328fbdeb,45fbd554,5d133d84,33968ef,98d36aec,3e6385a2,76aa94e8,2ce853f7,ca25f2f8,45a6291a,3e080504,ba597fb7,91a21669,c0cb6be1,14c2959a)\n,S(510786ea,e8a49682,6820b82f,549f07a2,b5b9203d,b1ad18c4,fb9c479f,67c904ab,dc130385,4e4dc69f,f63e21ae,71dc8674,b39382c1,eab1d8a8,fbd96867,af9cd96b)\n,S(2fbafeb3,fbdad5b6,4c121056,e080d0c2,1169e433,3abc0dda,bb642789,a242639d,a85d82f,d9e6a14d,e599ef0a,11d3eb39,5ff199c9,5ea5f1c9,2f3f8a7c,14405cd3)\n,S(200dbfeb,6e6e463c,1f3fbbc2,6b5f00c6,aec80809,1e28eae6,73b2b5e4,7b12ae0a,4852a219,bdaa3d97,83e1f071,15491827,83212776,fcd1b44a,c59dc01c,bba95ecf)\n,S(27b140f6,259f7dc,93d46b6,e52cdb85,3ec22572,54218ab4,1acff2be,24b8a3d9,3ceed09f,70cbadba,d40054c4,f130e312,28bb5d63,71a74f7b,c85aa7ff,c0583387)\n,S(fe4941ee,535c5311,8222ec35,14c2b02c,e175cca,d728ca0f,cd1d64ab,e95b7e71,e9cdc9ae,286d651b,d89cb442,2a64ada3,748e0ade,585cb70e,d357004e,e51f56f6)\n,S(317d209b,4cae94bd,36f443d7,65be2f17,ce47ced,59935d88,5a03925e,75ff1cdf,c191495,68fe571c,ff945af,4b6a801e,c942a5df,78a62864,5434a5eb,8a262d72)\n,S(f951a777,764e30e4,7705f8ab,150e9ab,df32e80b,593cecea,d9f9a143,cc93f9ea,efb951d6,25f2223e,e6ccc6b8,b12cddde,6ac2613b,11ae3052,65570f15,23afd925)\n,S(71adf0eb,f5fd8e8b,f0f229a9,ffe496aa,4f251af6,6e5a284d,3091f344,3389c8ef,13f47463,293a5536,674dfdf7,2dc73add,98ed5672,e7676425,39ce655f,6b6969f4)\n,S(2ea0406,58c0e80d,499cff39,ad463412,c3fbab1e,81f6eea5,911c45,236be75,be52c74,6073721,f09743d2,9a0a4e3,d82c08ed,feee2234,29163bc8,954f923f)\n,S(42352390,4b3e80c2,750c4222,33f0b1f3,a373442d,96278935,d9b7e51,b6182aea,7f582349,b27b5166,30c8e48b,a9603224,fe09e8f,814fa966,395fed67,d9221d91)\n,S(524d3c82,a92b285b,96064bf8,e9abe0b5,7702a29e,dc08ce53,771fab9e,fa7dda91,a47a0217,fdc6b2dc,d4b68e05,331bfd5c,366a8477,d3ed894,ec747240,f0f29c3a)\n,S(f6ee1e08,5ce04de6,6aaeb5f5,f232329c,fc83caf,d16bcc48,776bae16,c056f7e8,3328b26a,7e2bd49a,aa193977,4947d7b4,ccbc955d,18b27c75,c2f6ac6d,bccea4d9)\n,S(9c2f7d2b,b88f1417,722b5d11,95077d20,2ea84e6f,9bd93dae,3134d16b,17273978,1089f003,66c8b435,ce73c592,7c5e56bd,d338a4ca,ee5307da,a571be3c,2dab2a3a)\n,S(593a1eb6,730fb6e5,1fd24f15,253ae1e7,5897b7b,48efe28f,9b9813c6,ca99cc3c,fcfb7820,fbd22d91,bc03a630,f74e519,9e35c1a,a3b1cace,40433001,7744f079)\n,S(62ba10c3,83a7bacc,bcc4bc60,37f87a5e,8ec0eaff,de5a39f4,ef352b1,51f957e3,c267a1b0,dc84a161,a565fa19,aa0a2501,9fd01e0e,d7a660be,c2a7e9fc,cc7bdd45)\n,S(1de2ac10,deae62a1,63f641fe,3a4a9da,39e12390,14a77c6a,6d73c619,5f731f64,60f43c95,b6d7969d,427b5ad,782214fc,a512b75f,a6f50006,d7141a89,dbc8d2b2)\n,S(f11a5552,709083c8,83d08612,31772f18,c48e9271,6acbaa6d,a43416c2,fd4e1d3,a6d0ad64,7cf48c41,b6ce397b,38d5b3b0,2be51554,da2f3f4c,df593514,a2d742f4)\n,S(f4454640,d75697e5,21d5cc01,fca5c7f5,3dbad43f,116c243d,2aeae96d,7cdc33fc,42972cef,46fe7704,5d6d7053,1a74ec87,6b25996b,c4cf66cf,b3784f79,66549102)\n,S(2bfaf073,97be067c,1b7c20fa,3b319fad,10905b8d,8ecdad4,cad2ec8d,a1b8780a,ed526499,ea97c967,3d28bdee,9970f4fb,9077deb1,5f823cd5,775cc526,4e590285)\n,S(fc1abc81,2b5fed90,bde3ca16,3422f73a,6df6e058,8ed69222,cfec54f7,4cf5f73b,db1c6edb,471cfcbe,468481dc,4b1cd1c4,7ac68f6f,4fe9dd8f,af0d1136,972b975f)\n,S(d838c2ac,82e02f9b,a376f92d,293c02ad,b717d65f,be31cc76,12476e6f,4c506a8d,d87a3067,388f8e0,3c176f6c,a7eab123,532dd1cb,3e0f6ae2,51d7b31a,35189377)\n,S(4b3a82ff,7295749,a259d54c,a9a5e539,32c53ff1,33a1c4b9,2f697e06,b13ee38c,44372b41,a788456d,3f66a0c4,6c815210,bf60734b,e570a290,32db3075,ba8d6265)\n,S(d77cbbf3,6731ad4e,325eaf6a,9bd52f70,8e79d290,e379c2f2,b8d6ad3,fce411aa,ee466d25,f07813c7,91a81237,748bda9a,51f4266,4a385b50,5259bf84,ff8372f0)\n,S(3867f6b2,58920b82,6eca75dc,953ac307,bed1872c,c0f1c6ec,84efc6d2,eeea1483,cc6a6adc,e6078097,a013ff18,dca9c5c9,254d70f4,68ac1cf4,b8267135,af88aee3)\n,S(7b008875,e85fc84f,618ea7df,f20f7f17,2123fe98,c07b5279,930b52ef,cc1b0a9a,3f3b30bb,8dbc9169,a5c55a1c,4150772e,331f7834,b50bb904,a8c56600,bf075f90)\n,S(ba5b44d9,16304a49,87579560,4d4b796,907e9b7a,4da49a5,ba7a1d77,8e34ef3a,16b49baa,48219e3b,9bae124f,dcd4de,4d47ea76,3ed39e13,f874c75b,cf333661)\n,S(691eafe2,7fe4120d,852b3a23,b5bfa646,910fe521,355a3594,342d629c,e2b8d9df,43a06097,42184dca,7c294fd6,a5227dbd,bd71ea1d,c4bca878,1887f9f8,b6c71d85)\n,S(13a6cbb,c9f5a86f,35173e38,a45dca65,551377d7,c37542d8,44006e48,54a54123,ecf3809c,9a964d9e,ffdcc2e6,2e8faf9e,8a43d38f,3023c4b8,84d18948,8488620)\n,S(33fd2af3,fb595cd2,93d731e9,1b4f0e5a,da665420,2dcc36ce,b712e8d5,e6f10e45,e26a307a,a8bdda4,4b981bf9,808cfa3a,80ca5331,b3a94c31,f6331e60,98ed2cf)\n,S(75954033,59e47f78,76b3ba57,5a758493,b0033298,22f4e44c,15cbe58b,34b774f6,7ee9a040,70b8568d,b0a99855,3442c000,b6e6651c,a7ad1253,f8e703de,5e0458a9)\n,S(79199fb0,c3b17e68,4e815e7e,8414bef4,b3dd3665,10d032f3,6505da59,6f5b9480,95bca973,f358c9cf,ef3aacba,54a055b8,abaab383,4191a1b5,54ac3ee,53d9a0ab)\n,S(9705f4e7,962ece0b,2e7ed64e,a33fd40,6edd0bc1,ac8997b5,d6d70000,a51aa352,4d4ce757,ad4547a8,a126193d,8921d6d8,58f40855,f71ab99d,b2bdd728,499ff347)\n,S(881af067,b841ab5f,30560b98,3376674d,cadeeb75,b8b16e12,df7da3ce,312fd777,ccc13fd4,512ef05d,7c10f62d,8b144b1d,7588be3d,1a3a3701,9accdec9,3483b84f)\n,S(fe8f7a44,33c2c9d8,f42e14cd,97ad0794,41bfc3b7,2fd412fb,1f6d5f5c,10e99621,e5b576ee,cf34374,96dc4ee3,a846c79b,4c8babf3,cc46a657,2a93fdd4,b6b3b2a9)\n,S(ff43c8da,18e08b38,3f92f832,3c34e83,84f40064,9e0506cb,91893abc,5c4d798f,a575a059,23a9da02,c0c9dde1,981dbd86,f5a75433,a4bb2fd5,2427db01,7ddf2e7f)\n,S(4715056,b97f4e21,13485242,74bb1b33,d8f9d841,73678a42,ed3c6fd5,28db276b,b4c0d146,3521f1d9,fe8cd71e,fb98aa28,73a18bee,66fae12f,cabfa201,854302b2)\n,S(85c9d808,c5f51d5a,c2a51394,cb83e7ee,acd85eeb,31a88814,9744871c,271fff51,2a7c3bf,23829b88,66991454,d6ec7f5e,185050d,1982deb8,b4992bbe,5b666a7d)\n,S(c02b94ef,8b1e368e,3cb4b25,903445cf,f46b60c7,6d6d2f24,529997f9,7d70dac9,bbb97d29,bcff81e4,8d417825,ade1d28b,10fadba2,acf961d6,80a343c1,e725f3a0)\n,S(4b1593bd,28e26f7e,431ac439,3d353a1e,fcb8b63,fee7adb3,e29472a8,38241df6,8a67a728,f4966855,26225b11,3ac9d858,3f184f8b,3ccc8ef0,d6e4e34e,f2fdcc56)\n,S(f640755b,ba51dee3,ad650555,9d52869b,7a8e7f6e,4b9dcdd2,31d1cd4f,26a64dd4,7387f800,a53e290b,d4c29f6e,ec24ac07,91e0e3c8,55d14882,a48d0539,6e87e1c8)\n,S(949346a9,436836c6,3df6f42c,d708cef8,16d0a522,914a606e,2276979,7789515b,a903932d,952a0201,ef65c847,b8754174,31dd41d3,ede5c073,31383b9,a8e2b356)\n,S(1824099e,c769edfc,2390b1f6,698c22f2,cdcc9783,c5cbe45c,de46008a,67f91a60,f8405fa,81e04dd5,6ce051f3,bfa088e2,804a8780,37892ae0,adf42767,311bd1e2)\n,S(e6b46fd8,e4633d92,8805f34c,ce95f3dc,683aa792,139c62f9,2ec8acd1,d601d341,533db813,f3fea63a,528faf4a,7cbf58d8,d6c0bea4,c28391d1,6391d300,cc1d824a)\n,S(63799b30,dc19b18d,d48d150d,3d4139d3,a04c6252,f176015d,60a436cf,ff992b93,26205112,5ebf4dee,d00e72f5,ff064178,7f485cb,2ba35507,3c3cdb0d,16dcc41b)\n,S(8cd02f5a,b1d5a02d,e85b88d3,ae370b0f,7fac5324,9f1fd676,670a29f1,2ead7338,358b42ac,ceb689d6,612cb70f,bc9bba7,511d56ee,c4390627,8e2f0961,bcc0d8e4)\n,S(d5e167e6,d48bd1dd,e95aba41,bf33b065,f7612766,4a0a8991,d3ea1a9e,ddf82fab,6cc23982,d653cdf4,fc4ec9cb,3cd86ae2,aaf45f62,38257d70,849c2686,ae71d1f7)\n,S(c4073500,6987f2df,1334f09d,97f00c19,d72b1942,5864b0cf,4ff19dcf,7c9bfdba,f6566846,6b461326,a9b366bf,30378f82,b760ff0a,ca568ca8,2bf0c9d3,ff7ff262)\n,S(9df1e71,9c501bfb,8a21db2,a838318e,29a7c2c0,fb2deb91,1840c7aa,f0c4fde2,cd628cae,6d0e0c02,b0315ae5,4901e703,e977c75b,43defea5,80a5325c,fad00fc0)\n,S(95176429,df73c309,23108ee,6922c597,1c91c249,ad7165b,7d08b84d,2a4c696c,3ecffc49,3b62dbcc,82208470,375c929,1994fbb7,240740cb,dd8086cb,e9c0fbe4)\n,S(708c48e8,692b0d35,e13a7e0e,94be8fb6,f57fe187,34f5556d,a318f600,c5628c6e,9534e302,deee1d1f,27e0432e,9f6a2f00,5af7e601,3f7da9bf,e1cde320,a105a664)\n,S(2775e17a,b82dc739,b5d62079,4b26be15,46275ec0,9d32622b,2991cca1,4e5b4c09,3aa6ee7c,80e8359f,deeb52c2,8da1328f,338ab228,8744d52e,8a9b7908,1b1ccddc)\n,S(47c1aac2,39c4f31,cf334959,b8fb48a0,44da6b34,3c383270,be19229c,30192da,5dad651c,5ba6c21d,845cd402,59a051c4,e5813f5a,21228355,1fde158b,600d7cc0)\n,S(f80f445a,4b864c96,1bb2bf5,9cfa25f1,eef459d4,fa28ac70,d77daa1b,b8bad15e,a383de04,6b8c6996,6d0b9da6,ce9f88e5,83cd57f4,a5f12c88,63f7ff70,b374ff16)\n,S(2924e7b9,1ad33619,a8df436d,578b7172,b2208125,9f2d5bf6,f9cb903e,bd4d2f66,b8642169,e2319f54,348e4f3f,e15d1f06,afa41255,ad62ceff,a768bdb8,48841875)\n,S(37d6087b,91a64ed2,8341854e,3a2b9ac4,4310785e,77e32e2a,f13405f3,76dc4d83,35a23917,e068bccb,a823092f,32e6fcdd,a3ac9f09,2c251b1f,9bdb9971,3df25003)\n,S(d748a96d,c79f1be0,6b43691c,bcf84b4f,e000d2ce,8294cfd8,391dcb92,10f4fab2,75b4ade0,65da902e,ce57e5c0,4b817228,975c0927,aafb76c8,223c4da6,f05bf51c)\n,S(d05d2a25,eb5084ff,262361ea,33b6fb97,9492414e,c255fa8f,a0233d06,e42cc30c,14bbbeee,cecdc8f3,85b51429,8aa03d9,ba57a198,5ba98f4e,75efab60,69a6f2d2)\n,S(69ba995b,d137edbe,5aff3906,764eca9c,b4684bf5,e8a8c302,78c89d97,483ff793,2b1cf451,b6226596,9833e864,91c5db95,a79ad96c,701580b2,46de1936,5bb63e32)\n,S(7f01e9a1,5d0ecf28,fde0342f,f506104b,3a50aff2,f1ec997d,9a82ff71,54419461,1c3c9594,a6b8d375,361e25d1,fedcab63,d2704065,a83470e5,e03dcc43,ad12dc68)\n,S(719232fd,193b9041,fd201bc4,7184e4cc,f2413d03,f0f8619d,813a409e,56e48cc6,161fc718,7dccb053,5337ff60,9eae05ab,12fb55a0,65f82d1e,68b19d3c,ae29a953)\n,S(15b84120,155f7310,3386009a,57bd28bf,9a63bcfa,46c8bd08,2f53dc86,76e78c27,47dd637e,c9017e2f,e9804e0c,840aca4f,188171a0,ea9fb605,1402c503,31737816)\n,S(ff429d97,bd380047,7db52ed4,eba69914,4a95ce2,7414da2c,74c074,bbfec567,7b3a6fbd,6e635bab,34973f62,4df77c03,6708c00a,cbcb8f25,69a5aa01,d57b3048)\n,S(ccd705b,16be74c,cf1f476d,12c77e81,37917404,b2611ed8,858b1e55,d50a6ee3,8741ade7,5cc7b252,4dd55e17,897f78d6,946cb4c,31ad9f1f,737affc3,40e87c01)\n,S(65b61a5e,24b3c57f,91678e81,8300ecaa,94e4b406,8d499534,d54c37d5,bb65b27,90d75e28,aab97b82,f1b86fda,2ae0851e,f65ac4c7,a5c664fd,79c16a76,75ed0c40)\n,S(671529df,8f4073d9,43f82bdd,758fb8e5,4ffe0487,c1a38cf1,73c1419f,7ba06ef0,c46d9f2d,1f23349a,dd1121e1,d51ebe4,454fd141,c7076950,4d854cfd,14fede59)\n,S(2af8a76,e7a1697,7af8e70,30bbd2c0,73da3fdd,4c6735b6,8e823cff,901b0440,55565be7,9ada7153,c7165976,91ee33cd,7c34f5ad,d65f543f,72ffd026,26c3c1cb)\n,S(acd81d6f,c5ffbb87,4fcb3b1f,b7cc730a,4def3fd5,ef59fc4,2fb9472a,6f575707,8e319a8e,c8b8ea9e,11ef47eb,5071b696,b87c0ec9,63e851cc,e0929646,1d181a3)\n,S(ab77e7d5,3ab9e8bc,2052d0bb,360aa7f2,ae062ca9,9b91441b,d60ce8db,80ffb912,5f92b6d9,cb0ab95b,9eb992e5,e1d70412,aca90998,b5d6ed8f,dfa4c752,2df96b5a)\n,S(798b8195,1a6a8c7e,f8beda09,b06a2303,1d7efaf3,7b663265,e0188ab3,78124046,9592da1b,baea430,3644a7e5,4e67476f,d91382b5,f1181de7,a1bf9d44,e02b1bf6)\n,S(f2486aae,c3be77d,8dddea22,488aeb4c,9dbff93a,24ff6f29,ed6d528b,9777b096,8e2b2d50,fe75c847,7c50327f,e36afb0b,d8409b62,8d83a8cc,41325aa8,4829126b)\n,S(222e3d09,3b8aea8b,e0f64ee3,3aeeee72,d16ca088,264f4333,f9397488,146d2d54,eff500f,bfe6bbc4,1c2dd16e,8a0ebd79,37ba1f78,ccb098a4,351b539d,cacdcaa9)\n,S(6768d3fe,7ca93476,245a18ee,ab53e002,4f99241d,9c321bd0,165b7d04,c121c1c9,402c9d73,c9b99722,2319ff1d,9e1c778,c4dc825,d030a43,823aee8b,90272877)\n,S(6eb6740f,b2f0880c,eff25697,bfd7815d,b0b62884,cf8c8ef2,5137f098,f22dda79,cf7e8531,c12f5713,c302061c,1f42e6ac,79c4b695,e458db68,5209f03f,1485c86f)\n,S(7101f348,4eb05a7e,aa0f385f,367b6a7e,5ede8959,71729ac2,950006aa,965fe51b,8d1fb913,a040fb75,778fff9f,c71afc2c,2605595a,1e44944b,e264f893,10d5c3f3)\n,S(75a9e45c,acc6a25e,3fe4b25f,12030362,a0de03ea,cefba87a,11c8e6d3,e886579,52a85995,e91986d9,26a02cf3,1001fd82,854c49f9,55683f7a,dbe7c02b,cff69c6e)\n,S(31194d92,bad76572,98bffc54,27f99ade,ceac14f7,830ac1b2,954d6730,3737dcbc,99e81c45,f5318eee,9d2449fa,33cc5bc6,8c556ebc,dac2ef19,a2d1ff3f,5fdd2832)\n,S(904fa3fe,76fd6f43,86ac6138,70b4cce3,c1d743c3,8457d23c,522958ac,bd505af,94273262,1adf4633,79e929e4,54c70595,8dae9bfb,3957a304,5c8aae41,a7c1763b)\n,S(1d1861f3,1a828b32,3699aede,f3fa265b,40de142,78a7df26,b5fa93ff,a4a8e0fd,b9657781,f13ffeb2,8e1306e3,b84bb965,3ffc30c2,63a65f61,1995f44d,d899f7dc)\n,S(3bd33def,6de1a5d5,e5ef0289,e8565dce,aac95922,8443c09b,73ce545e,6819ad64,993f0109,eb560bd4,97436627,9a70e9bf,8bc9851d,f52441c2,97535ed5,d4f9c810)\n,S(ca1b7d45,2a39aed2,a7f27b24,8e5a07c7,e4c257eb,7150e61c,7bec7f6c,58958634,ab11fe1b,c0357c37,b7da9804,39fb5481,179c0f7,442af2c7,298facda,3c4afcff)\n,S(273a95ca,dee8386b,53ff29a3,6ce7d9ac,df145f7d,5f928f61,da6d57d1,8671aa58,88a6359d,bb06537d,1a6c6d83,24065284,315a031c,73c53ac2,adb14f95,1a5bbe2b)\n,S(7ea4c0fc,a139bbac,553ad79c,d3921c01,c06923f5,29446279,d0f910f9,ac5561e6,bd049d47,45830e2,f31e7982,2639f198,2eb71c37,71aed93a,54dfa0bb,296dec96)\n,S(71f1801c,a2babe5,d4793240,15ccc684,d3823f68,fcd12ce8,bc49607,9607d336,41ed07d0,8384e54,209b7de3,7e8fe7a6,14430c0e,439dca6c,f5ae6ddb,1ff1b4b1)\n,S(b2838873,652ba1ee,ae8aec51,55541a3d,7000ffd9,6279cf2a,1c90582d,21cd8828,47ff155,73f5e3a5,245faf65,86afcc31,ee4d19f2,a1efc79d,2a0b4811,d27dce5e)\n,S(34ca8da7,22634bc1,6873fbdc,c089224b,d9f8164a,6bf0acb5,b68d898e,b55a3e21,d8afb760,36a9c91c,7769055,d85a3ff7,1f041a90,5192df4b,73f9100c,e5c5d986)\n,S(212cb397,d97341af,ca0cf5b2,ef6d796b,4b76eb87,89c3915a,a0e72337,4b19cc8f,f06e2cec,5f29f06f,97685f50,1126c50d,ff17e273,2f78de64,875c35d6,42f170a1)\n,S(bc0367f6,43bd13dc,32582dfd,e7893f69,d5f29d2f,ce4b42e9,ffa8091c,6ca6228a,9bec6c89,d1251f06,4aff3e44,ab59ac32,c1764179,7b96f73f,527ff429,74556e78)\n,S(8fcb1423,5d8e8894,5ab169bb,4d198e4a,5e489e33,cdeb69d8,dec100f1,a9bd5672,fa1cb396,bab390b2,60302a46,b4408427,c45ae320,5b1d1f5f,e52db790,e7fc057c)\n,S(70ad8505,6675ec20,cbc43e80,11df60f4,d4917e84,cca25044,e15c2fa,e51e64ae,f4a51356,af9fa7c9,a5e62475,df5b713a,b63d68e0,cbef44e8,c004fa61,1d5a800d)\n,S(ada7af47,48074168,86e6df81,f9718c06,bcf6e6d9,846fa880,3ede1f6c,b9695842,f66d51f,50f427d4,dc748bbe,771d952,98369c91,c41dd,575b76db,988a582f)\n,S(f1b87d8d,7323ebb1,1bb8108f,9d34f8e9,bf1e977b,a527c52c,7f045d8b,1102eeee,bd95703,51ebe7a0,9ede5842,47b755b3,7e2aa0e7,7e380b7,9bddf768,b4346556)\n,S(93659d5a,d55264ea,c900c301,cfed7b83,1fbf7c51,766cc833,cc591356,492a0553,b69389e9,646d0165,afa137df,1c1d02a3,519ff65d,8856c89c,cf46de05,c0154beb)\n,S(e9d2bc49,2a9b4ffd,c482f54a,415beeec,409a62e5,d1781f48,b1738f7d,8ed4ffe2,893e4652,2dccbf80,ddde313,f4f25383,8d639208,36150631,60830408,44305df5)\n,S(1424160a,7bf1ad91,18103eea,372da6a5,825e0bc1,a8760744,229e2af7,906cb210,c94da226,96a75d71,1e6f1d0e,10b23e96,4f1519e9,1f63743f,209ef8a1,3996af23)\n,S(7f902712,402e4bd4,aabe434a,eb5fa7e9,8686d058,e6f26300,c458cee8,9c9efd87,bc00460b,2aefb418,b16cdcdd,c88446a7,1b8b018c,15261602,669188ac,62f95fb5)\n,S(d327ce7c,66cb0f53,e86e5f16,c8dc2936,2a133f6a,38147c01,255c61f5,6f72745c,4dc1498a,c3cb39c1,6908b85,b8c52dca,618cc6d4,1c6f95f8,353758a3,86bea436)\n,S(f044eb19,c9d81106,13803b,e8bbfc31,137dffce,547bfd1a,d5396ad,e32db3b3,5ad4428d,9c4c3e66,7f8551ce,ab282cfe,8128a8de,ffccfaf7,c102b9df,7e526f2a)\n,S(7a6c5237,b95d19be,af46a81e,bdd54403,d135bbb7,f3c03d55,f67c5cbc,e18daf4,62a2e8b8,47fceb5c,484fc6e7,4ff68fed,bd492c66,8a70c1d7,cce2922,a204385b)\n,S(59c7fcdc,b069c0b7,bb772afa,f5c20846,ffae949b,47589bb5,80495bc1,b59f82f0,82ec588c,6657566b,71ba4d79,ac8e2c7a,c09b3652,f24d46ec,3358eeba,126c38ad)\n,S(f8cf3c21,1ed4558c,c40d3dc6,dbb85e54,81d99fdb,cdf27ae0,ea01bd4,6b6543d7,bd8049d0,1c3df630,8951f5db,dcce3043,5506a5c3,e0a8bb20,54de9dc,87a9778b)\n,S(3855d764,b2389d4f,1ff47189,33aca82a,4d2dd23f,cfd13764,2782ce71,524504bc,82c4ea25,4af2abd0,2724ec34,6aae3aa3,b14a71ee,df13df95,9446c0bc,759ef72d)\n,S(77644b31,1de4f0d8,d30b1d73,35553dab,6d3e0e6d,af7e6ffa,48cddd1a,52de5431,645e17ce,c0a0735,737730f9,92bb7431,7581c930,695829b4,cdbf5214,f45916b4)\n,S(a4d4af43,afd6afbc,b2a511da,a6537abd,56bfc0cf,76659d34,56530663,d9ca138d,be6c9fd0,dd2df31b,b907f073,7d63df34,88b5db5f,3d5ff747,a25a2beb,73bb09dd)\n,S(417ffa3f,e673a081,f72c3d64,5e64bc61,2da352ca,fb66d1aa,aa8fc060,74a75be5,9ab8be2f,90849474,809472af,d5a7490e,cfd9ca4a,7f738be1,de093e0,68c50151)\n,S(78175154,93115041,6cbd772c,c74212c4,4f19eb04,95e88622,f75ee838,caef73cd,37d4d5c8,ffec3650,26381b91,d7cb18de,fdaf2cb0,a5d94ac2,dd7bf7fd,34d0d3e6)\n,S(365c560c,3acc28ea,f560c66c,7e76625a,3c2ee7a4,8f62ef0f,736253fa,b1b5121,25cbc6fa,96c0f15e,38b03f88,338f8dd1,6990aa15,dcec58d6,4517d37c,5b74868f)\n,S(c945ad25,1010023e,9126b6cb,3a19a925,6c6757fd,d88cf808,a94fa182,8f5bac7c,c9a8e90c,b4ac43bc,ef08ae3d,fc66f6db,99df4abb,2679de5b,174df92a,d654e2bb)\n,S(4aad85ac,45e6d57d,73822387,632863de,ac8c3fb7,b7d3beec,629c0e1e,2c2e0213,38eee8e1,9e81bf64,9641c192,de53a071,29c03689,376f6595,2130b63c,fd6a2708)\n,S(2bc10248,b0f6596,adcf9f66,3f624461,907e37ea,7d35367f,24b9f69a,26a291df,e0ac3ed3,3016b37a,91a780f6,b90b7743,24ad0c30,50812b2f,4f35426f,4311c79)\n,S(cdc05991,abd28f93,e81a2c0,9a04e1fa,eca89400,81fcfcff,eb91c8d3,93ddfde2,dfda4ac4,4458e2b0,3feb9852,d1a8822f,8bf90a4e,bc79ab32,afc9a1b7,580193a5)\n,S(5a24eff0,af2dc429,ff4ea857,f8aab10,31d285ae,9c8beb7d,793bf9d,db46a047,179db914,59739160,897f40dd,b7af0b8,a98b6f61,6aef7327,b53b6005,9c4c8f9a)\n,S(16c1e53f,51603ca9,374aae6b,57d15fdb,e7c1d2b0,b0545467,636fe2ac,7838183a,bf858ef0,56e09bbf,5d8af50c,7e0fdc90,8d1f6c1a,570594b,a5368976,63a183e3)\n,S(792f1eea,71b92f9a,d893a116,ac177801,a2f2405b,1c6846eb,c3a6559,eb01ccf4,bc062f0c,c610ef39,311ecf87,a7866b9c,52c0df0b,be1e0129,3ccd0b7a,2832a79d)\n,S(1b399c40,f057719c,f544dc51,51137fe3,917dabac,f0804dd7,335ba65d,a57378e1,4d6794d3,b6e8a085,41de872c,1dd333a2,bfdd0712,aa846f6d,380a775c,600b425f)\n,S(138b313e,b9c45ced,e0cd8219,b888c51f,9f8cd278,abe16ede,c210bffa,ba238e4f,a199a357,cbc8042f,4b6d4951,2f0acd26,13f0f76d,cd6dbf7f,d9e8723c,e6ac56d6)\n,S(3e06c311,9c765664,d0068b24,cf4ae1a4,8f401811,17c93122,84ffc24d,eb542338,63a65596,e5607f1b,6a9c4596,39a90d06,93b08ab3,2807b696,498e7557,673624f)\n,S(3f32f9b,49c88932,574e5455,c179e9de,80f0f6de,ed1ed25f,8a3de8b4,bbf8bd2e,a2d2bb1a,5fc96f89,ef490257,bf42a9dc,91f49ce,e2b86472,8551fa6b,6a589f17)\n,S(89adc417,ffccc50f,a129602b,f5b1b82a,2c4f5efb,e3382b04,1fe77299,46414ec5,4ce7e75c,291b751d,155c291,5aa619ef,6c3daa28,25da8bc8,e2c7ef54,8c253215)\n,S(f33fbd62,6bec8c9f,6597d486,2f54f65,e9f208fa,7c1d619,a13feaae,5ce4e9b5,c8f0602b,ebb9f152,87fe2eda,3050b032,a6f43c8b,7726825e,df02b424,51593774)\n,S(eccc8ab,7b90e2f7,e45f7703,a0e97406,117fa04f,4512071d,568e3e64,a4a7d6b8,8456f705,a9c4a0d8,f2f3c233,3c8bb367,fcc8a645,f1fc560,48e1699a,58a1b6f4)\n,S(f6962b33,a7ad862e,58181c75,42743ed0,e6e31d5,4df1fdfc,a4e3e95a,157de915,af3d47fb,48515ceb,f9f7e8ad,2a0159aa,55c155a,83359cf2,9ee3202,ea9e6605)\n,S(3f1f3c6,7996fb10,65ed5df0,2095926a,5c45d2f2,38ff59e8,42b9d234,daace24d,d585c9e4,f0a29f0a,28e3c30b,22228dab,73750706,5690811f,1104bd4a,6d0ea28e)\n,S(fcae019,36290e43,d8bf93c1,6ad2cd5e,dc33592d,4081b0e3,4aedd451,6e6e589c,8e98579e,cc42a444,2dc710d8,8cd09996,c8acb958,b9702c24,3a207ba1,471165cc)\n,S(548f27ba,355229d,23b7922b,5fc8efad,abc4247d,baa312c6,d89570ab,151f522c,e5597d8,bbb47cd7,c8cba774,ff37c81e,b7b63c63,39b9600a,cb77f1b8,86ab6fa9)\n,S(e2f64914,e8bf347e,d465cf1e,f086b7be,49797db8,611803ab,6e439bbd,5c146fa0,8e69e76f,7c641e4f,15248257,77aef9b,88b27a94,72d565d1,d2ed7463,fc6ae76e)\n,S(8c532a0,2d970c0f,1d8f9762,2298b40d,c7d362c8,f38cd122,2cdbeaba,2c13db1d,90f8a2e9,428d66d,9e8ffc9f,bcb7606f,568251b6,2dec2768,1b6ffa8,7062bd0e)\n,S(64646efe,e3c51972,f6af7e0c,8052aec4,6fc0ed97,af566f6d,3c323218,62291a23,9e29e150,f6ca370b,36a76ee7,171f2ddb,a10eb88a,986ffc50,d6c8f4f7,287a69fe)\n,S(6e8ba4da,1df8dff7,cbff69a,6ef65c9,329199bf,9a67d1b5,1eb1e1f3,473be659,ae7562c8,959441a7,35ff2188,3e537bd7,eb5a34a2,7e144a06,f674679,815d852a)\n,S(8c21abc8,f7812c0f,6de0d7e1,cadbf1f6,c94c871c,d5b8e9ca,e76c1f33,2b6bcaef,5a7c9cc3,13be03e2,5410ed03,7e0cefe9,5a36d6fe,68ff46b2,663a0ca9,747ed53e)\n,S(ce0e383a,7c487e14,26636ff7,657a28f0,10ce5102,1eb89fea,3426b269,2f9f6353,3f95a465,d43f7804,2804e9da,4c73c8ec,97fcb9f6,fdace280,532c0c0d,6232e03a)\n,S(7e33097f,51477c4f,f4459848,34673fc2,8078b6c7,c01cb700,80a37ee,1d698eb8,c1275bc0,7317c679,d881d274,e49065a2,e282b7e6,970065ad,141c1ca5,ca2d75a7)\n,S(ef4d9cd6,b1487e61,fb31cf42,9eff2731,d686eb66,cfb3f867,9317b0e4,116837a6,c4f6beb4,280ddd5a,24f6461a,6ea1eba2,3bd2ff58,7ff612ec,d118b76a,3d63be1f)\n,S(f3edc145,2ee49324,f7890bcb,9a5f8ba3,ce53f4a2,df0c94b9,92c573b2,f3716290,995446ab,fbc9b27a,8db301f0,87c2ae93,5c390565,491c0dbf,552a9820,d3fb2f2d)\n,S(c1f62251,7398e914,d6134160,318d20c6,87d17427,2bc62c92,bd170ca8,2bcaa975,1c85ae27,36735b76,d5328d59,3292f718,f6d6da52,1c75cab,fcb06720,87769e99)\n,S(a7e81df9,605f0881,d4856153,3e310715,b206c601,9a55b889,7141321e,463dea8e,3ae220fd,1f361be0,f0b70dbb,a7df796a,eb23deb,5c5440ad,aa16fef9,7cae8a4f)\n,S(1b69bf29,8f5df296,7a3ac028,87d4ae5e,f46af5ac,5a8cf326,2fe7282b,e46a536b,c9c624aa,2d99a71,ea375c68,419b38a2,d7e9d7fd,8880dc60,28c24f2e,a846a91f)\n,S(cddfef74,31763b9,8df15cb9,6b3b3127,b31c9987,fd17251d,b56122ed,dbbb44bb,972fef4,2e935aa3,4c679ce2,6a32a38c,225f0867,8f780b65,854459e7,f24869f5)\n,S(32fe1cef,2c8a5163,66b47d30,9ef01e20,ee07f235,e7c0129c,fcb70fff,60e957ff,9e861731,bd376124,8b33babe,c354ea,3d13b2c7,c45b436f,e754edf2,4fb4588e)\n,S(a382fbe9,f4914119,d31d0ccf,6afb61fe,4a759657,26556908,505225b8,79c24b0d,aa300360,39a1bfdc,273e0287,c7c222fe,cdde6318,c9838a55,5136cda8,d2111857)\n,S(b53b5439,9ae330ea,e13e2467,7c0344d,59e305a7,96a228bc,6d6914ec,1a80ef88,99809053,8dfc6c5d,748f43cc,8ba8a8e2,969d8d1c,47551a36,8f30ee30,d5fadc7a)\n,S(621b5253,f11cfec3,fb4bbfed,98b0ad9c,710fe2af,6aedb8d,f521d0da,fb64169a,2a234dc4,8b716af6,22dd025b,63e05c5f,3b93005c,13614bb3,abe0dbe9,260378aa)\n,S(83332b6c,cc9c3c7f,3163f442,80f5758c,1e5979fa,b9a500be,d5b315e0,f9435b04,85360612,258c1f1c,bda41025,c402dd84,60c77df6,8762d2d4,16aa16af,dcd30ea0)\n,S(27c8d8e3,91202622,2f72d926,da01b10e,fd54e21a,7a4746b6,68aa868f,dbf6538a,88768e3f,b8f2484d,56c9fe83,fde0fff7,4d0c0a81,213ac090,e90d2b42,22d6eb91)\n,S(f349c70b,bcd82005,2fd2e05a,c42556ef,6ee768d4,f08b7a91,55d1ebfe,60067e5,6d595c19,4011d050,c7c3c4e9,e7aea90a,93fdc5b0,71d6c9fb,9f621a4e,750c6604)\n,S(4966567a,b2029966,62b1368b,ac3f89e1,a0183b20,173a7156,edb827a7,13b24f90,6ef89436,c2bb3bb0,94910ee7,6c083e35,a097b859,16658947,1f59c33,37e21ab)\n,S(4909501b,491da13f,78645b84,9bc63fea,75611b76,5ff6eb6,9a7414bf,913e0886,2c20c6b6,f2ee070d,c1dd4c95,6822ac5c,38b1acf7,5e093f17,c54b65aa,81014df8)\n,S(1ed2e667,f5a2d140,18cd3ee4,f4163f7,bd5f898e,ee3dda72,bf84e356,10cddb76,bb4970c5,64fa4cea,e204babd,d869e36e,934810ef,68a22794,f9919e3,26db8e7d)\n,S(c47bab41,a0bc37f,addf9c8c,7de86d68,c15d1a0d,85257d57,2a1d60d,4612f17b,e52acb1,36f47de1,1128091a,1a3cc3e0,e84ce767,cf8395cb,b09eea81,a2db09e3)\n,S(e21068c1,4993cfc4,35490b52,5ece7657,f70825f3,dd2138c1,8f5ec6a0,c67a7394,cd610137,d48f8d9b,2bf99755,35fab6fb,65360fc,9db04a12,43027083,c732da)\n,S(635f547d,47a72f5e,b069e144,6508a46,bd6a6f,11eefb87,da07e4f4,3ffaf917,8ea0a9f2,3da273b4,f324c8ed,81cb0bf0,21fecb57,54eaa642,21736923,2be64128)\n,S(24632c0a,8648b4b1,fff2f79a,b3f8e64d,3837b6ae,9329eaa8,48565f02,45bdb47b,9c6d0788,c9e155d3,3c260360,862ab236,177ff875,a3823179,8146e442,f66e0426)\n,S(43748dc3,cfb229d4,8549cc56,ecbcb01b,146541e1,5d2c3b5e,d59fbf7a,6b7bf503,9975a1ed,23a09906,3b87ea7f,2ccd88fc,b20607e,1aded9a9,265f34c1,45fb9c5c)\n,S(8f848323,b8c41d68,31603b40,69be1dda,bb8750d0,11527a58,4bffdca,c3ae3ac0,77a8ac87,128260c2,86f5805a,b17e5a45,be81f83a,2a575c6e,2c88288a,c2d1b37f)\n,S(29ebc368,b54d846d,bb5e8be4,81c19c80,2d8907db,c54412cc,6e2952ba,2948422c,e6b793a2,81d59d90,53aeb2d6,f79cbd1a,426f79a1,6860310a,ec72fe26,37c7e845)\n,S(9414cbc4,ccf4012c,8c0cbe21,eb714953,d84bc602,9f8e4810,5ba79967,23ed345,ad1eeb92,89e4a109,2d132790,ece35cbd,da45bb64,bb6ae72b,39b9eb80,d57fdeee)\n,S(1bd8565b,769d0024,613ab814,90f214c8,bea90a5,db1e75d4,11ec3dc7,288f756e,c050a46c,fc781e91,b79cfcb0,2abdae50,b69c2cd7,dcc56b13,1df2175d,c1d375d8)\n,S(4f7584c,35ad66be,3d409154,eb8ded67,14ed0ae3,288593f2,76cec90b,629cb01,f4be9248,232a120e,11ccf1b3,e9c5a17e,1520fee1,8f1da048,fb01eb3c,17712bb0)\n,S(5b0009de,7e85b317,ab127401,fd2f3ced,cffd1684,c4772b35,2b9c783e,1dd9f13b,f4585704,f531c34e,3377cb7c,e672c78d,cb8839be,ecfe048d,bb412328,b973ba64)\n,S(c66f31c3,79396f01,2ea5fdbc,4222df38,37f85353,3f3ed9c3,ad13bcac,63b32815,7d7b808,4ae5e9cb,c123ca86,1b505242,4113ee84,bbac5ca3,ea1cd3da,6eb22668)\n,S(33097f5d,c8b09934,26ba51b3,ee99e696,3d7ba455,e91a7af1,a57c85e6,5e63abd6,fbd26b3b,200c189d,c8b9e120,61869766,987401ed,66e4ed80,63835922,c270d7c4)\n,S(1ace5245,a3b7ec60,b9a922d5,ffbbe43d,aa71cf0b,84e395f8,c37dd2a9,c85ffff4,72c0ed67,94708f9b,f29c51cb,b6cbb69c,6ad3f4d,10d62987,1c444da1,bb25084f)\n,S(bc197b9e,4cce4c2c,bfb22524,93f9202c,6ed54e32,cd52f512,692a5af3,6b0c4471,d5137663,5182065d,a4d6be56,cec50889,3cad9b95,4d5d17df,adb084fb,dd673f70)\n,S(66997931,334bdbed,174cfa73,3ecad896,13c6f500,b79a7fab,76ad0bc8,dcc7df70,fdbd3301,948e198e,ee3e7d3a,504ac560,ab00afdf,26940331,d49bd2c,6599435a)\n,S(3ba86cdf,b38d82f9,7c20b962,103f79a,5637422f,370b08b3,89083cc3,1a6eb4bf,acec9811,76debb13,9bd7f981,9b476e1b,5377e32a,bdecafee,33dd6ad2,3258dfc8)\n,S(f62432f,9db971d8,4c3acdbd,c2d915d6,6395199f,76e81243,fed930db,ef1603cd,ee89cf3d,177b4cc6,e5856acd,5de8757e,82269f4e,eb11a444,c2e0c797,4a7b5f28)\n,S(84b41bdc,6a6dea46,ad6e650,5b280a1,b6d81250,794e0b1d,688aeea9,c067bbaf,9f78703c,b535b4bb,2b88cdf7,b5f0f0cb,e452fe6e,5cd0f2b2,ab8c2439,9fc00e7c)\n,S(8e2dfea9,3ea64a14,e28f4883,98b8d455,48c52ac,a5399f88,28a42c1a,c89d4c67,fec01549,cda53605,335df10d,d8ed04eb,e09d7474,f69deff7,5935a499,f2781271)\n,S(c3bc6dae,5401ac1d,3fd75e36,4cbc2fa1,dbd2f6a2,40e912f1,18b27759,9b105e0b,170fdcf5,5b739326,fd234506,303700b1,9c5dba48,b6f0cc34,a650c3f,3b63d6b4)\n,S(33093e93,1b1e52e7,ac5a289e,27ff810,c2defced,e935795d,a10ecc89,a3c14691,7fbba584,5bd55ebd,a67dc842,1ae10fb9,2114f0b,d68bc47a,7ee87a7f,70deec38)\n,S(21b35438,b6d1a3ce,6c765e,dc78dd89,3f121132,ecbcc208,a36fe734,d8141ef9,f6115a5,ed237dc8,f61a82b3,66fb508d,e2d516be,3b166a7f,2566bf06,eae300d0)\n,S(ced66583,aa1bed17,30248edf,28e9e4fb,ade70821,1c2e48de,3782fc6,d3892df3,4f43ad36,f29da03b,f0fe634e,3c441c42,c3a81835,2407f1b6,cb38e738,18fdec96)\n,S(c5a74420,f541a8ae,b0673122,29fbccaf,37f6eb7c,ccf2bec0,23a8573b,ee6f71f8,ae634c02,44263d36,c00a6e25,d25fa592,1612a535,4934d709,6c864865,60adb259)\n,S(304a048b,f30f6b4b,2a725521,15b15ea4,8311c51f,c4cd212e,f0a4bac1,48b9de9e,8f935900,3d6ebf0d,129cb5dc,8a953fab,11ceeb85,b2123fec,154b065e,63bb3cd)\n,S(ff96b5ae,7eba0af5,ac9875e,97811e91,6ecb66f1,3bb06519,72ebfbcd,5b9c2048,24af2186,bca71cea,e58a0b1d,b56aed1b,3de89cc8,70fd4e3c,31919e2f,6352a887)\n,S(5909ce1c,df732eed,4147243,76fdb3ce,8b6d38b9,4a0b35d0,50bdce27,b1b701a3,2e44944,665e761,825cf223,90383a3f,7d3731bb,bf7792b0,37fc05e0,b224dfdf)\n,S(ff6b771f,86d66610,6fa032b7,92844548,8ef9974,caf05ad7,cfb6b30e,abd1d527,6abd2a9c,9393e91c,ff77e055,7e9f6a86,9fcd0bae,3544bf50,b25f0427,908ba4b3)\n,S(943ccf04,94dd1fad,1efda48a,12d9ace7,be919685,7e7fc5f4,befd7d23,3a1aa8d9,4f08b4cc,2dd93f8b,3751a23f,ca7e4f10,6014e01c,58791c52,3d01134c,1a0a7bd6)\n,S(a79a7a7,a89e1cdc,908e0968,bf26c341,47a4638b,1d9cb5b3,ee6c49f7,405f172c,cb53d967,14b5be3a,e5497f34,ec0325b3,ebadcb76,b9838cd1,b3cee90f,f3bb8ceb)\n,S(28ff2efc,71176efa,a861667c,d173f78a,4f548b36,aa33db2f,a50c0515,1c7b89dd,475b3707,db4ba15f,1485e165,68d7dbdf,8e67cdb3,37d79988,dc6e2249,d6fe4941)\n,S(85b2c332,16a86885,c0704fa2,55b4ca00,223e897a,f0ae7557,f8687eb3,b1012968,a1f58d45,ba664056,efbcbe7a,f0ef479e,1f2bcbe7,98d055c5,7045d735,d657ea11)\n,S(e9fc2d09,eefb32de,4068e2ad,d7bd3692,7a02b3e0,d354dd47,c2a70c9a,5cbb8778,ee009aa5,1216d068,3ee219b,bf53ccf4,f249d7ec,bd8c9cdf,80d0ec5a,5b65c312)\n,S(da2dcb50,afd510d3,26e38af9,5a22850a,a1cc88d0,620fed65,763042f9,a0005d9e,1eef47b1,c3700963,5e16af23,f1308de9,ae0eab9a,b16c9443,6d501ebe,133eaeab)\n,S(20daa29c,c6b166eb,ce717402,70873566,327891d3,ff7b6f08,b9b7da3c,1eb352e0,2ff6982c,ecd6fa4d,ec1d6692,92c3a326,a30cb526,4dc27a4,299dd3f7,7ae8a3fb)\n,S(e16b08dd,2ae5be13,67547a53,496f9f4e,3aab8440,6cc34bdd,71b2ebf7,53674d9b,b70f724b,d9522b1c,8e43d60d,6357b5ba,48a1afc8,b7136c1d,9317a1d9,1ba06846)\n,S(888a2daf,2d69db34,ff9485e,b06d44,c59670ec,3c68475,80753567,e56b93d3,ddbe4fa7,792e0b82,ac4753f0,5b271aba,8e804384,b7949a9e,9ba79fb6,31d4e3f5)\n,S(747768e2,9090fdd5,2c22e308,131f97b2,ee6d8e0c,bf43d704,d50d60c7,616abd12,eaa75f40,8d1ce0b4,bb52879e,5ee7ff36,27b26645,c8ce3840,99dbac60,9cb61058)\n,S(8569f2ac,1c7d131a,8d337cc8,87c00c1f,80897a58,f9131143,5a17d79c,fd8d6eda,504f0b44,252d06e8,2f8e700a,746a3393,85e43baa,a4e5da8e,dda7ed6d,83eacf71)\n,S(4f15f3f9,a67221dc,4fca1d68,429b874,c4418df8,be480591,e57d6841,e11860c9,982c0d56,1783a9c1,a16bda10,87d29061,3f1154bc,4cc62a82,b795c54,a496b7ed)\n,S(21e51a20,1f226e1e,3ebd56ce,6f7258d6,4e4f9db,aa425943,9e1bf7c0,144a92ce,4c47a801,b6a5a4ad,25c1486f,ec9bd0aa,428f3167,45136359,18d47079,75aac869)\n,S(fac7e42e,8865ec0c,d0b4c4f9,dff6bf8b,e0f28336,395bdf2e,d5e2a118,9c0211a0,36812d9c,8337199e,fb1fece1,1997307a,ce656fb7,3bad65c6,41e6bba2,c4dd695e)\n,S(a147839e,c91bc77e,cc568671,442d29ee,57f0f42d,7b9cb469,91064549,1a26d225,f404350e,bf7267f1,86120257,fa29fc1a,fc0d064e,2f14eeda,b730770a,c85bc5a4)\n,S(d1212cf9,e5086804,44883c1f,4158f3e3,44a7900f,716ade2b,df19e41c,18636b8c,720b851,7b91665,128183a0,f3235c6a,2f9c21c8,e8c6ec0,5553acb0,27fc0964)\n,S(13d5f334,a7ab2578,977c125,1a07d7a,2e4852ca,8927ce7,2dd9fe90,8b948975,973869e2,d1d0abb5,1ce31db1,ae8c3816,ff998753,479fe82a,7d87b6eb,798773ca)\n,S(1f066961,6dae9e8e,76a9bec3,26bc2136,5ec754a5,34c787e6,b9abdfb0,e463507d,da48070e,b4ea111f,881f9fc1,2993a9bf,c6f99974,b3353ce,b5bd1cd1,c75b262d)\n,S(729e187,38681dc3,c4ad9a49,59f975f5,907b15d0,114e029,8d4aad5f,69150269,dbf2ed8e,c60ea01b,6de0022c,8b035a7e,c1901c82,9e8d83f2,4560659f,8d455442)\n,S(e92fcbe9,61353477,4d42435f,de190c26,8e3692ee,c2042fa0,2ee21687,1dfda12a,a75b5c0e,3f5280d6,41e36957,5e6ec5cf,585b1451,1f01da84,fb852cc8,2d64f2ff)\n,S(85c2e61a,c69f8d39,e9c4dfbf,93f6b904,1ad35bcd,7f2b5c1c,789812d4,c8da36df,ca6d9187,694429e1,a5ca50b3,332ab11a,575264db,bf297752,f38fabb3,c0b53f45)\n,S(10d17632,c33cc6b4,f5c2791,b5ae4f00,3adf9958,879c24f,10f147e1,bd1bc05c,e15ee734,f1ddec6f,45dbae00,88e4c5c0,be8464f,31205718,a8b2c929,939a687d)\n,S(a6942345,25938972,f39820bd,27ea0bbc,92511dd6,827476f0,28fec86b,e25d609a,e06b3616,870f73f4,93f6d1b6,6256cb48,af49ee6c,b5296bd,ea73083,4f11d6e9)\n,S(b4a7d8ed,2b3dae3f,43eba052,45b6c4c7,c401a675,6bb0d906,4f66d88,df94d8ac,ffc81c63,1a2cdb5a,fd7def11,9d07af35,74dcb04,e10a5ecf,d2b0a46d,90963456)\n,S(5aebe21d,aebd3c57,285cb660,d9aa55d3,f84fb2ff,584f1266,3031e2ab,dda6fd17,22ea513,6a51b532,d178c40,cd5c8453,8f5994ef,7b35cff6,d9dcd999,daf1abe8)\n,S(ac684664,194388d5,b796d64c,b4563aa6,69388d0d,83861c51,278316e7,2c8c7f87,cb9426d8,2dc90b01,97bf114,3f693e93,4d710988,26586e5f,f8913ab3,9ef41ac1)\n,S(6f94bd49,f89e621,874c58c2,f27ce8a9,76ad2764,1627e835,6b82157c,24955250,d24330ce,4a54dc7c,5c7d9cf6,8f8622f5,e3633a85,8ec0d2ec,d8df3f9,bc7c5614)\n,S(3f96c8c,e149947a,6d9ec5c,9ac5ff44,775e068a,785a2fa9,d0940905,a008f137,a91dcfaf,7111a506,3cf613d4,e360c9fc,9b7d9e40,30e00ce2,b120eacc,805f3f40)\n,S(d805b05c,dfd675d3,b862a4c1,74909974,405a5b61,9b2a73c8,f3470959,779c707d,a68b544c,c7279f2d,e3a2abdb,fbb7fcb1,84366ef1,3cc3a66,b6d8cec8,3c3b6865)\n,S(d2293c0b,d4189cb6,6be0efa7,874abe9b,59142233,6f2f71d4,808be34e,79df0e4,5fbc3248,87c54960,b9bfe70a,5cea3871,7f24f79a,3fe0d313,18cc068f,212682b1)\n,S(931f090b,e22623fe,7ad49d26,e76b3c5d,e3f107fb,556f9657,facad9c,5b209d5f,cc255e79,d2a89899,865daf74,81aea395,848f57c0,1850c144,d5ad1a17,4b1cc087)\n,S(118a6283,6707ff6b,c8ea72f6,285403a4,6e4e690a,db340987,a0359732,39e5ddc9,91f00fe5,e65a9058,36f9d447,d96af84,b6f5a18d,85c127ad,72221980,f7ff818b)\n,S(81096ceb,5b6cb49a,d014ba42,d1d49e1,b811ca2d,2e6614be,1891c6a4,1f6a985a,da051c5,f8f9f3e5,78050a3c,1354b674,3f494860,6b04b8f5,b4dfe970,b7607e5d)\n,S(9a80a438,5ff45ed6,2dd3559e,783eb47c,351b7e43,6ddc468b,9f410989,300cae06,845d1f99,21b69c5b,4628aee8,b0c55398,bee65659,e3e41cad,30e57bf8,b804b6d0)\n,S(6a3168f3,b89955b9,7fac1d59,61e95fea,2143954d,fbbb6090,81c2408f,46747906,5b5f1f88,6778f108,3ae44a3f,82c901b6,12c741e,811d5403,c483c572,8cccc005)\n,S(9a03ab11,78d165ba,23bd4298,58bc8ed7,797710fe,f4f8d8a7,3db0a90f,e1214af8,70888ce7,e61e4bf4,91512f2b,fa556f51,59a5550a,1d50a65c,a652b5bc,89e85665)\n,S(8c90c18d,78b8d9e1,59a61575,48c14971,296c8c41,991dce25,e7878ef6,f4ea2f5d,2a5428cf,de628e51,a1644a5e,5dbb7227,2b97c0f9,b6909a68,2814882,cb1ca074)\n,S(2e9bab7f,3062024d,84f7a5da,a02c9ed0,93327923,339fdd43,b68d6dd3,508a8957,c9af80b7,3f3803c9,f21e21f1,9523b2df,ea7e4f8c,9a376aca,4a147530,d2a43345)\n,S(2734bf2e,718ecfef,64a95e7c,1fbe6a37,e2129898,343af84d,b5c17671,9a466322,f530098a,9f115f0c,e36a0ce3,4697312c,7d0a1e4b,df8a3ca8,f0a63631,e684216e)\n,S(ab9ecaf9,500e4a4e,6e81b997,579b5214,4af3257b,8c8f40d5,e21c2a51,d56aab58,f7d38746,8e081844,9bd5e9d1,938a8859,d0aaede7,5743dbc3,ff30d51c,3de0f047)\n,S(ae25f546,a4c09ef2,e5a9cd3e,85baa880,292b4d4d,4e8440c0,1696435a,cb1af368,46a2b3b3,7373840f,b739a9f2,2953c6c4,80bd59f2,11013d59,e051055e,f7f3da84)\n,S(54285da6,4ef21cda,f597efaa,884fc00f,4e35abb2,bec04ace,54a83dc1,c12e6142,483beb2,144d7b5b,a47c2dc2,9225dd5c,b962a849,d46ff6e,5220b6c3,20cdbc3d)\n,S(bece8434,4bc231f,60ad542e,d6a7857c,35a627ee,a2914874,c8deb661,37dca65e,a229fb80,2f9e72f,8e477fb8,de081254,fe1c93ad,a4d3b4f8,e9c2f4eb,3e2f6a95)\n,S(3d55747,b148b857,472fe5af,1e820bbf,89994a2d,ae6c326b,26fd9cb4,fb5e81d1,dedeca5a,e86728a4,f635bc4f,1b2b162f,c9ea7dfb,efd5852d,b90001cf,bde465df)\n,S(13c68219,d1633c73,59f6361a,88bf6a72,1846b520,33475715,fbc97dcf,75cde5d4,ce8a3cc2,39fc7f20,96abfe7c,52d79e9f,bddf0ce2,ab2b6e55,935413f9,37f83af4)\n,S(e9e40ae1,a8041a47,274c481a,dab52f18,36690a29,be837433,43650126,d5b0a6ac,c19958b7,9c9839b8,1371f314,749147cd,9a22fa22,a55da9a9,577646f2,38c6bb7f)\n,S(2e3b4553,7460a1a5,f7353a53,78db61c9,13af4371,9a268eea,6321b4c8,a1493068,f7ba5e56,104966c8,4959d3e2,290e5501,5ccf5cf2,b6fb5bb6,e0452c5d,cba54dcf)\n,S(9855bc82,b9214b00,67eaa40e,bf670dce,6a59f3dc,4cca491e,db1f0f48,b4c62b8,a7d93f6e,3be6c73c,e9e37d6b,5b071603,87184e21,38478009,8d4c1c80,ccfcf435)\n,S(37f820a9,b9342913,6d44bee2,69cf27df,67486bc5,233b8866,982f8476,15253979,fdcaea9d,aa629d37,7f345a5a,37c566a5,50dd893b,9d7ba88b,2a568a28,7870ca15)\n,S(e82d2c98,a92a3b0c,690f6ba2,8070c59e,3e0cd0a2,a384d3b0,3cba9d1f,ded41a98,31e73a32,32d85b36,14833d34,4c7d502d,d09d7ecd,614b060,95c86be0,c8501460)\n,S(bd492fc3,6dd4c906,6a071182,7eaece3b,ad46901e,b400bf3a,24b93799,9a923419,caada3c5,1e1fd5a4,6676dbd0,a7fd4049,8b93da93,bcd25af5,fdc6a0c9,1dd7798)\n,S(6c8b46da,42d1ec4f,3ca2c4dc,15a69c80,cd8f0d99,7bdf3964,1cded32b,8629577a,d3ad4f62,729e42e0,f72ef596,5bcbc239,cbeb988e,e62b30a9,7f124004,c718c956)\n,S(78b1e9e6,799bd3dd,854a25d3,4d356b4f,effee71a,ad0c8f05,ea9ebcc0,f8f5dd62,31503ed6,a26788dc,c07d7005,7a300665,d726ce2b,702e65c1,dd25f892,3931145d)\n,S(f2ed02a6,63c5523e,3c68cda6,bfa4ab6b,cb53fa5c,15f0375,c8974eea,5aebdccf,3bde5c3,afdc0320,e3b92241,3220ad32,937720a8,d1477b67,773e725a,3cf36382)\n,S(7e43f643,a45800bf,7e54d83,5ff6ba20,f67ab101,5d1aaa60,cde0967d,42caffd3,1f456eda,f473399,b57fbb37,807b5269,58600d12,b556879a,76e21459,5798d68a)\n,S(df15e177,5eb73697,aa4c0a62,4b4d2ce9,7ccde2ca,66555d07,6430b656,61319be8,496cdc,f1543818,c2173dfb,8a60ee2d,8397cca,b16e4e53,b35079cf,b27311ad)\n,S(edf1d706,295bb20,12dc1648,7940e84b,6707a3fb,91a14fce,ef37f669,c782e2ae,e3a0f2f6,fcd76c97,b20b2dd6,8e888eaf,9ed8f598,f08e4d7d,239a8964,fe019a2e)\n,S(c15022b2,6b15821f,3be3c313,73d0464d,fd92cecd,6ba87c2d,9b18fb5c,16f8f6c0,78cd2370,d94e2842,e07961e6,92e9fa04,65d57f25,a80feda9,327581bd,ce136c2e)\n,S(bd4df6b,b6ae15e0,109886a2,8a8f8c90,c6cc2bcb,b52dd105,e277da7e,c76001d9,499659b2,b0b4cb96,5b8e5029,96ced2e3,a6f6fadc,da01b875,72f8727d,8ef1446f)\n,S(dfcec232,873894ce,525f9b4f,162f180e,1e2d6eb4,c846bed4,b2109700,8fbc0b76,afbc761b,f4c88e71,9c318f05,9a10ab3c,5a477ec5,33243b95,3f8ef006,69b4f92e)\n,S(b0076c4d,e3c94fae,23659b00,5b8b41fc,b8473935,764e48e1,a9eb1fef,f5c94e54,e1eb3255,3c55a687,6f42ee5e,44830a09,fe17fda1,b84e8551,f3ea2308,f9c7d4f)\n,S(9a1fe9c,17c4255c,c11e9fe3,3d66787a,fe9ebb0,99be88be,94b4c3f0,da2d0c11,e6aef709,99a8e739,6e23e1aa,c7ad1cab,25f6fd6e,62df02b0,96af568d,e88e8379)\n,S(1d89a934,126bbc15,d9b99b88,b6c65106,e1d8b16e,799630f2,2576e9e4,15212899,b7e32256,92db0722,e9a79ef,7d95c509,37d64644,ed36cfd7,56780d59,a6f8f4eb)\n,S(c60f5c68,b67b3796,3c462d4f,7530edfa,34546956,21bc80a6,ac2be433,700c7fa4,88f8b071,97fff0e3,a19b5a67,60dc92d3,b5507b53,5cec02c6,53f75a60,bf8a7e08)\n,S(52cd2b6f,d9b2699,1b76499a,d301be43,6205761c,f768eec9,e6b7d6c2,52d9d949,d127cc66,1fa33508,a0d11a3e,ac782b26,26356382,f547e4aa,13802138,30ec835)\n,S(1e44499e,a639835f,f384f107,fd16bb19,c21fbea5,cf4e3be9,20a34024,6d05dda9,41c6a8e9,a9042f9,950d12db,74fd0f21,8f8adf23,e961488d,27412c2,f2d1f53)\n,S(139144f0,a56394ba,d1e53bae,360136eb,984ecc56,56a05cb1,c6727543,fc6861de,70394737,ff37e9b2,1bf174ab,6c042bb8,964f3d01,6ea1edc1,25ed3b4,2ed0742a)\n,S(934ca02a,2454df18,61fcb954,6634e685,34fe75c8,b6db6eb7,5a2a74f8,654a2280,779e9784,266cfca0,b83caee,74fd24f1,6865ce3a,6be78be4,375fa15c,db195761)\n,S(a64f047d,9e1c2459,77da8c32,9d35ecd4,af913baa,2d4b679a,7acd326d,886a3be6,e11e830f,f3b4ed6d,102145e3,b24759de,3210f309,8ec57581,e6014818,79112b2b)\n,S(e1c688bd,cd629088,8d8820cc,df15fe8f,cfcf45c4,b8bd434e,2a15428e,818757e1,bc10c6e1,71e7c8e0,13b8e00,e77bb745,a34e7d1a,15267600,d130f6f2,18c77f7d)\n,S(b1a30c95,123170f2,d9456de6,827afcc9,ba2bded,d955354,c6deeaac,68137358,9c76a0ab,c16c1caf,d3844346,9040373e,a678797e,dfa1b298,5a17d410,b04071f5)\n,S(24cc27b5,fbb0291c,3468ba23,58f5e253,4c7cf99f,699af4d0,d6892bea,e6166e85,eaf369af,2516ba42,673c52e3,ff0768fe,d51aabce,2312b8dd,d7aa1ed8,cf9f71d5)\n,S(8bb4017a,6166d1e2,f7fe8921,cbd31cee,bacab577,84da8a92,217aab2d,948f6a57,c899740e,6c476986,356e34fc,7182996d,a09cad72,93d78c8a,5c30d56b,88dc331)\n,S(55d8b7dd,d82fdd96,e0ec17dc,20b303fd,e6dafef5,a527368b,ec99a33,60497f6f,fd624511,78bd66f,4361709e,44e72e9f,f4f29230,d1fff657,bbf84762,b7b8beca)\n,S(82aa2def,5a5531af,519cbfe6,105dbde3,109d4626,ec47a845,5dbe2852,34c94df3,61160bea,9f83a2e5,8c2df91,925fbb25,8d1e60fa,6a147c4,ebc0ee38,cd811511)\n,S(36c1277c,c6df7ff8,47c2cfbf,3cfa9198,804b03b0,c28e1636,ad3438cf,2cf6f7f4,2304fba2,74f81c74,5455d821,ea58e047,a7bb3b60,e32f020,aee5a2a5,16fe4833)\n,S(f376fdcc,5b44cad7,e16c9e86,c00b366,d57b8925,fa49b18c,eb8856a,e0cd9119,2d6acd32,e4dee81f,489e3ef,11acfc8d,c3d0e7ac,bdf5c6ac,74fe7aa0,50a028cb)\n,S(ea4e10dc,5372e9f5,d96e8ecb,907d3a89,97150b6c,39ecfd1c,c7aaacca,5dc5030b,b0896ea3,93b626bf,c2f486d2,9fdeb897,36d6be60,144fc3f9,5206666c,36d96ff5)\n,S(74f392b4,b2664a17,9d3f0a2c,71b144b8,a376ea19,f1a9d91a,d181ca3,a6fdeb08,9bd4db21,428d588f,64ecef67,99b46735,c9523036,406d2636,c6eee083,e09e1fc0)\n,S(3a36c842,59ba7774,a41a17da,f0e4c821,11c13a6b,58b82774,ca6962ef,cd4855eb,6ddad1ad,9ede928c,d65720c7,15ef39e5,f35e46ba,45d8ff48,2f095d2b,e0fa5e3c)\n,S(9d77b2ad,5636a44f,16e73981,46b17ea9,7635ef18,8f32764d,eae50d2a,5c98c019,532dd027,a775861a,b9392b8a,cb2db097,eb5936cd,9d2f7234,f30c371a,22ee3eef)\n,S(2e7402e9,450e2f80,e05168a0,f0c5f1bc,deb6117,ee46ac1b,39aae7e7,bea3c4ab,41e8f36b,5606fe2b,8ed6b3fe,f8821013,cf85721c,f242eb60,34b82afa,cd82fc3b)\n,S(aeb2cb25,4ed0b5bd,81b33d35,e8f00a5c,6a6806f1,5314b320,de0c376e,533ebe6f,6b8116f5,2d7bfa2c,b3028249,fc83f317,5d761c0f,76833d0b,142c4d6a,29b9d59c)\n,S(c86224bd,55d62c97,a00adabe,3a797929,4cca663a,ba3a3655,fbbcc3f4,5cca7895,a319a3b7,104f7935,36693adf,a6009db4,1d857353,fa950c21,844323bb,cd1cc214)\n,S(1d1164cc,2c576a0d,d7b5a28b,cfdce6f4,d53ddde0,534b3a66,aaccfbba,3eefe561,b85890de,aa25d897,fccba694,7c470e45,ec600989,243ea91c,4670a,b44995a7)\n,S(2b54fab4,13b915b5,ce76620a,5c493ccf,5e7f0f41,8bcd793b,92f26118,a440e3c8,8aff8d25,56fead8d,7e9bdfef,bddddf37,7a61ce4b,2effcdb,30ad0016,4f9bf5d1)\n,S(1f1f2a24,a4e72a1f,609428ac,853e46d7,a9718c25,f2df9887,9a3aa60,5729b340,450dca4,f4920bba,bcf94f39,26871032,b631120,4b217170,991df216,2c421cbd)\n,S(412f658e,e6777e4d,24e5682c,5007e057,83fbc559,f22f3200,f185ee52,c8ebd4e5,c2e0b64a,9d9394fe,b930b3d7,afa64cb1,c8399e3,27690e32,887b789b,6571c8f4)\n,S(8495dcb5,567791de,976fec9a,367e250d,95102ef9,f92c11fb,f561f854,4cf4912b,65f809c5,7d3d824e,f5e63f19,153bda4f,542e511f,464e11c5,e2a9c32a,2a152443)\n,S(f8e7bdc0,d841c95e,3a945b8b,c85ca4c7,b4a18a9,7a5646ee,1bb4ff08,5956cfde,cd0ac83,f93a3679,37c9d28c,24b9fc08,6d6660d6,15df5011,1b4edd5d,f0ed6d42)\n,S(8324625a,4e4c1071,24876751,7df28ad4,8c8c5648,76e4a131,64f2f730,62854c94,761b1960,49922825,609c7ec3,70626025,de65e2cb,240b8356,1f5cc230,1f9bfaeb)\n,S(8b1c49ff,99f87e22,af4b6bef,d353df1e,16a8e160,3023f2cf,213ed859,13ca04d4,cd4513d1,e178865,2d1cff72,822de250,6abbf975,7e2774c0,2ca1bde3,23ad6c23)\n,S(e2ad61a1,20d24d80,8c830e89,d630b466,59deacf2,87aeb790,bcaacb82,96f4f138,51cd19dc,fc1c4867,daad2940,5acdc7ca,91849769,6003321a,bf5dbc6f,b2186291)\n,S(e8dcd7e,a9a9a6f3,16a6aa91,53105601,e10356ce,7f4793ba,9eae3ad0,34c197a4,c835bad7,91f3aaf5,d32e2a99,e71c4add,95f69892,6a68695c,2e61ca85,38ea6b5e)\n,S(f0b748e3,5875b8ef,361bba69,cfb05c4,d8643f95,9b207556,e46908e9,bcf81233,6a264e51,5d163a7b,678765f6,c29ca61,c1c0aeab,a9ff423e,91e9401b,2dd6e908)\n,S(900de96f,9975a16,766dd305,bffe2423,e6eef8ae,93ebd796,2ce97d53,39af3a87,894ab2ec,d9c058a3,a331bf65,dbe69a49,f33f8e9b,12121439,650aa700,4d164478)\n,S(8cbe7930,d2ea2342,730e306,7e9ecf95,ce7fbda1,e6d34645,a6e214a0,ed88aa53,867b156b,f875a67d,ae27f2c8,e232c934,85092c70,ec071ac9,919ddd85,70186b83)\n,S(a0cbb1c9,5b35d243,945a65c0,fc5706d4,e79237df,c13583e6,9a292fec,9a25e68d,b6d7e9d1,3cd61a45,f81c8a55,40dc06e1,3c6d7024,5e850a40,55ba4eb1,82047e4f)\n,S(148aac72,a3fa8cb5,aa6d3bbe,5e987fc,d8050c3d,63b47f4c,832a4488,262463cf,7f29de49,a6e24485,5aa45f6d,36f2e2bb,72749f91,8258c0b2,92a33322,677e4a61)\n,S(3b9fed07,3a1afd6d,e6ecaf7e,fa20e2e6,c28616fa,25a218ce,fb07cf33,66f3977f,f0a85b3c,5084c964,a1f0c936,e96ad3e3,4fa9e7a1,348ed0fe,ac7003c,12c65fc9)\n,S(7de45ced,5228bfd9,557b443c,30fa431a,7c9cbcea,dfbfe0fe,cc565ac7,ce3537aa,515ddd37,69107033,bcb794f3,ac55062d,78e0118a,60c98fc1,1999cdde,fa2686f0)\n,S(9cc1a35a,534f562,98010274,74f3a857,c17cf99c,eba1d5aa,251e61b2,55913dd2,c092cda8,f30fa4f9,96115da3,7bf8e12f,c653e243,af2bc7cc,c691684c,3e433ae5)\n,S(d82f1968,759b3b9c,c76ad729,828a7283,10fc71fb,22258562,920b690,7ab52ec6,54cd0a05,26983b0c,73808f8c,ae1c9d81,1b372082,dcac3306,c470af50,8818c607)\n,S(16e6a947,3d95a95,c31bffc,c291b60d,1f9c548,85e5a498,24195ead,b87b7586,19e29938,581b6b8c,2e50d365,5a957c04,80ff4c8e,4ed73276,f882c558,dbd8aafd)\n,S(d07e7af3,ee4f24,e46b4670,477c3463,ad57a74e,57a17197,ff098e52,3b5cd237,fff34e0f,43c91656,69b1019b,ef618888,d4d175de,b6f20b1b,c696f24c,135d0e20)\n,S(2bf644e5,6dc027fc,63a118a3,43faa4e9,8ffe42b9,c983014,50a1f4d9,e5665380,bef5c175,77be1fc5,f8f66fb7,a06b55f7,eb84ca5f,66ea4477,c924f925,5a262ec5)\n,S(518f0d37,db1db93,48c80101,442597c6,7a88107e,5e25fa3a,b97ed524,fc5cb045,dca8750e,a4e9ed01,66f113a1,44974250,6eb9f3f4,df8ab741,8dba0397,694d7294)\n,S(bd48eb6,c50774a1,2be9893f,8c21f624,57bf54ba,8799928e,9a9c725d,6f0554c7,200a6da8,cd8f0300,6774bad9,769f738,dd58f350,632742d2,e2cfa787,f570f6e1)\n,S(ccc8d93a,871169e3,69336622,b64fa1c0,800c5b45,e3c0b130,2aa99e34,db1517e2,40ee7e4,d45e6478,efa11f1b,c4548668,88837309,4809f056,11efd6c3,6d01d845)\n,S(86f6392c,75877992,311d2e9a,27be9ea7,27e8d01c,fc27dab,8f4527f1,dbf6bd1a,7ee29611,b647aa2a,3d2b1304,c49ee690,57150518,fd46add3,e7caf34d,10f7922)\n,S(e034f4e5,927b0fa6,c3794105,338751f9,9bb5a381,6da1dc1b,bfc41d83,b7d7fdfd,dc9f02cb,838242e4,13282b05,cbedcab9,e902567b,b279fb6f,f2248e75,41a5f89d)\n,S(8fc36a16,a9dbf00,5ee3a66a,b825510,75eadfef,b86e1062,837b49cc,6ab51045,c7ee2c40,9605981d,217d9957,a004a4be,66a88527,9ec9f74a,70594999,23d200a6)\n,S(d7bb40bc,54077d96,d6489b71,e65dcfe3,997130de,b517d12d,9c10adc8,e73278e0,e2096366,2f64bae4,5aa0706b,d96b5cb6,5897c0be,3a8a9b46,8ce9074a,a68b0a4b)\n,S(d7357685,8054c714,1147d2d6,c265ce40,3c882681,157b07e0,b8be0a88,63bd2ac5,94f8754b,2fc94239,c254099e,9cd5804d,d2ce03a5,380c59c2,4f42ebe5,85a9932b)\n,S(5b6f8aae,d9353ffa,71da7e99,bd3fe165,3e720ffd,657dc2b6,669ae0da,858f8392,4eeafd05,369c6eed,fa6f85ec,34e245f3,e4966840,30253c10,6e74f473,418f9089)\n,S(39444d12,67cc29e4,384b4f4,9c4f4886,ab4076a0,19a0fb39,f7b72c4e,42222000,65c2502a,af90ee2d,8de48adf,35388eb9,329f3057,1b77d0ba,50ea01a1,ca83d771)\n,S(53de00db,f1efb0a3,c159c4a7,dbc9888e,16ebad95,cec2d003,a18488b,1b0752c7,328ecbd9,99475dfa,752d6228,5e7bc51a,87dc6166,4d14a6d3,3a556322,5e2fbda)\n,S(48a3baf,9b4f7213,e280eef0,d5fb6033,194d1bce,eb48d9e3,d4814a4c,bd5ead39,3b4ac9c9,e04a3852,bbc6f7fb,cc94b20f,7e749eed,44a9a9ce,7099a8bb,28334186)\n,S(f00d7630,503c1ced,3c418237,27e22d7,acccf406,fa16eb6e,b524707e,5b3ac541,9a1ddd3f,ec177626,b1254605,df8ed593,c9e2bcff,db7d0404,f47571b7,31ca95b5)\n,S(e1ff1994,3ce7eb59,e570858,2e8c21a0,c4f8eec8,40815ee8,9a482658,8941eaac,528e5572,746e72e6,ce61b53d,78aa57e9,dbf27e3e,bc36c3dd,3b4972,d7353b7e)\n,S(e4f13c20,c48e750e,e15a665,275c27be,23b3aa04,5915ac55,2562bef0,7459bd49,bebc7ece,c6e51f99,a2e6b9d6,a7b1bbb3,63901053,362a9ebc,a2d21cc7,6e87ca30)\n,S(e36e8cf3,824b66e8,7083d371,60cf2719,598c6c04,ac693ea4,d2dd5c83,886f5f20,4ea0e193,8afe57df,3db74910,481a54dc,f5be9fe8,64f249f6,c88d0cbd,a086c60b)\n,S(51e1f319,3286d2fb,29cb4a06,84d7c547,797ff5dc,fde9572a,63dd1e0d,2646365f,ac470e3c,6f30ecc6,31a90d7e,6c4c3d43,b8640ced,b9465cb2,ace2cc87,52370e3a)\n,S(8e82daa9,c40d4e72,605dadd6,45bc26dc,22277f41,56d2a248,29bcf79c,d5a5fae0,7f8155fd,be9057b2,2b191dd7,233e291b,b01b961e,32a124d7,33ad99b8,167c53ee)\n,S(79e56744,273c7aa4,34ffd5e9,525fa788,38bea674,64e2a595,9881b359,3e2c41e3,625089a3,c50defb9,f00ec764,b47122d7,eb786a20,f278bc33,e806e7cb,f385ecab)\n,S(a97e00e2,d19c1957,51deb891,84e24a22,af7fe156,f2f1e068,79ded3f6,62743f79,881d7ebd,8bcb2c49,354726bb,c44ff91e,f3f5835d,ea73b282,944a5097,cd8284a0)\n,S(3bf10546,7bbf5c3,14e1c3fb,40542378,9bc52fbe,8fb38aa8,f4a70727,b338542,e789586c,fad5b7ff,6dc68e5f,ef840e05,9a87ba51,e58462b6,39042c64,24f6367)\n,S(80296c77,58791dff,39b4ee87,ecf3406a,49cce0cf,8437fb2e,1f4880b,55d9cc5d,3b06be11,3c7f781f,ce28753b,708bc514,902e4834,bdb09284,846c4ddb,90152dcb)\n,S(48e2cb7a,a3eedbfd,f6a9cc12,359c4ff1,b7b0fe4e,87e57023,59896506,20ba52fe,dc78417a,fa909bbc,594411ba,87f72ee0,a0a45631,3cff4aac,7ad564b0,9ee8ed1b)\n,S(dc91351f,cb775488,286b482a,a187d79c,31a3db2e,99730b6b,7b4805a9,73403d46,ed720e0d,2d13192e,8c180ecd,5e09fa5f,fc52e35c,4e509b2f,fa93ff96,f7adb1a3)\n,S(5d37c139,48ceb4fa,9cd05b15,1fb344e9,3a2b2653,5b052b9f,1797319,e990a670,f790933c,2590ba48,7a832ad,6b940634,b62e16d2,7c9e748a,1856d53a,1974cb01)\n,S(98bcbab0,f8d69b22,6fd7eece,a848ff4,15c8e325,ad9e8157,708eca17,77070aa2,7671e3b3,db715487,e6affd61,5218a7ef,a08aa949,9bb10206,e2de58d,ea150212)\n,S(60e2c1cb,3de9486e,fa594384,d5903340,12ce308d,2247a18,8fa5c112,3f35b1c5,6de7031b,9767c66f,5c3c11a3,853bf722,4d58d086,b68e08fa,63942f2f,9369d1bb)\n,S(814716c5,aa8256b7,50bf2f70,2e2f9bcd,aaf513bb,329eb467,d873ea72,304885c7,eca644ee,8fa96189,13fba31e,23533de9,eb7efac9,a0fcb58,6300a42d,c7d297ee)\n,S(25789f3f,1db412ef,af60f7b,636686d5,9fb71586,200e8e3b,e6d934fb,72f8de77,e5222798,99d1e21b,5734a6f7,7881a686,863bc03b,8c58cce9,633c8302,2c7de0ac)\n,S(5382f40c,98bff8e5,646a87fd,f3fcb6a6,27f2a91e,780a1527,ef18cdf2,a0f1bdcd,231d01de,e41ca3a1,da068ce1,39d97a16,39c027d8,38c7879d,9a1e85c6,4a32b502)\n,S(448cfd20,9db2fadf,fcaab14d,8f57dd01,67d9ecb3,f18e9dc6,e573238b,a11d1f2b,bad8e2e5,5a4f56c2,435e8d18,14d2824b,2ba1bb67,9520587,5a11c315,9166fea6)\n,S(d917ca4b,fe6335f,5012b69d,5444bbf9,f6c4893d,eb612ab5,667afbe8,2e5653d,3fde9a4b,e6a49756,27950f1f,f17ce5f0,aeabc055,3102c33a,4bb85bae,f32bad17)\n,S(c7ee9f5,17a883ad,733de053,be3ef583,1dd974e6,a4e8570,db35f24e,91ba8f72,8db7738d,26d367bf,657d2a31,c6a08ce2,e06a7e4d,2df39f3a,2bffd062,79bba44)\n,S(83f0a19d,983ed6de,7a2b173,77c843bc,819a77b8,a32acaed,b7085e0,94d9a30b,d2ab3e96,67be4473,d8748b63,6113be60,880acd47,6d574e00,c37f4875,2cafe6a7)\n,S(f3f8aa6a,61687c40,98fb56bd,e74d83dd,59674079,7c52f2e,2b299277,2313989d,3a690c9d,98503a3,2d201ff9,a896365c,caa1b54c,36857a21,ad63994f,41a109fb)\n,S(4c1a11ca,a30bd6c7,d95d6e8b,3ebcb4e7,914fdd40,4384716a,283ee1ff,5032249e,e7e718c9,4653ef40,d214c604,e65339d0,6598f17c,37f82880,9b7e5215,b9424da0)\n,S(2941b952,3419a018,53f3bdb0,420f3182,529ebbc8,5a1c8f6c,1d922c19,3ee5477d,377f226c,29ca66a0,aaa05baa,7f6c1ede,80482b51,8982763,864392dd,3e628413)\n,S(9d04d07,aad49af8,65bb3eb1,8c7078ac,4b5f25ef,e18572c3,3842161d,8591a6a1,f572968d,ec2ca89f,b45ae02d,119644b6,779eb0ca,1d48f724,f8512ba2,2c83cd34)\n,S(4401f767,c3c3a101,b99a983c,9a622824,d660c50,177bfef4,a2646b06,43d26e20,7952faf7,8e1b114e,16429309,1d0669e6,999f8bde,ee980c0b,b7d669de,86d4e342)\n,S(94b6f427,fc4017d3,b328665b,acc863a8,ab8a1c4,7b283fa6,8d7b7f0c,1bbba31f,1336067d,35f0d2d4,6ec8199e,99dd07a9,9cbe7725,a9981868,e09a0217,df40d85a)\n,S(41621ba2,92c79bbd,463b87cd,de75574b,f2fba59f,92025445,7389b4a2,4de7288f,355337d5,b6f30b78,81389951,fe67b943,3bc70a07,b294d11b,717ca2e1,a2cd3188)\n,S(b0838415,6256c1d3,55900dde,6126818b,8a9b27ba,ab14d73f,c33c399e,fda3594e,2aaf9190,55b162e2,91cc5371,b6a4285f,843ef8d1,5069ec7d,c5d68475,c5a954a5)\n,S(cc99a14f,ef418fea,5de9f437,7ccc1426,7d910f13,e8448fb,8ba92746,6c0dc9bd,2e30b64,7c01c12d,d42f164b,ac0c9bf2,22f7b3d9,2cffd7f5,c77aebb7,18536f28)\n,S(8d2bb24a,dbec1858,d565d59c,1d805d8e,7b21d6b5,b967dd50,a2f420dd,5764e37,cdc6d730,e78daeba,712537c7,8a09322,fc371d0d,6a5645ef,e7014bf8,999f712f)\n,S(63cee6de,f18cf4a,e6ca1871,7750e328,dbb94c6f,27422192,3b233a3,e50f7c9b,81230dad,ad2d233a,1b631b8f,7a885828,ce005031,e1365436,7ca34173,1efdfeb8)\n,S(62084e9c,1dc6dd03,9a68d5cb,fba19dda,b2e4d07f,b8f46114,926a59e6,92755a0c,6dbeb4f4,62fb1af0,dc273a,aa827e0a,cc9c7f1a,fbcdf02c,c4bd98b7,5061a26)\n,S(110c0eba,f65b6280,14e368ec,17072acc,3f34a937,7df79238,c2773625,5d8dd827,1a4ba716,6f236258,961d5865,b020b83b,c3c3e74,2dafaba9,649ff85b,2ae75c6d)\n,S(d848a51e,50fb234b,a807306c,fab97405,baa50a5d,23cd12b6,8927c9e6,f1c87e00,9db9be62,88fb00c8,4cae4b1c,c99449ed,51fdb49f,3cb7aadc,16a72b6f,a96a4fd8)\n,S(42311893,a2706ab4,52547f3b,3901b9ee,a8cf2660,581b0023,96bc9a7c,e14c2b5a,750f86db,9ba6222c,199c2a9f,77609a47,d6129a1c,e9ef4d70,daad3d2c,ae4165bc)\n,S(4439c4ee,471adc41,32f45496,77ca1e32,6b252f1e,5f17f741,9fdaec0e,3834d37f,bd75c32c,22c5c3de,62f16ab6,6f86f93b,617c9565,b3859195,81a00ee5,75897e87)\n,S(4dfce3da,b19231da,648b0bbd,8c52fdb6,e02e9e79,9806fbbf,36bacafe,c113b053,de8c5f1f,4b727fba,440a1c3e,147cc1a2,9d647c59,42feb42f,69d45a2a,13042c3a)\n,S(3bba2b2e,e8e72736,f54f9158,281f6c14,9d0ba6f3,ec6d89ef,cddeff9b,8117dc9d,ff087274,77897e56,e5e93f94,7af6ca0f,6f9a2186,a6a60d2b,af690a30,da16ab24)\n,S(a2fede43,37bc6b2,482d92ff,f55ab0c,e239a00f,4fbb0595,27f7d67d,8317deae,2a791508,43beffd7,ef08e195,d0ce022c,f780116,2f1852da,98c3638d,45869ed4)\n,S(221c4e2f,f503eb4c,4a1aa8e6,77370085,b3d64d09,8430a185,2cb1cc3e,304bc0a3,c3c37b1b,f954e79,c124fd70,ad3f8765,a70a7929,4a262de1,99e11dd1,95b7ae41)\n,S(a0c32f80,f7e4ba05,caf945b,49b91306,f909c8bd,559e4bfc,a58ef3c5,14740ed0,d3eb8f01,46ab4700,41de4cfb,dced45c9,966aa1c6,38a42c90,41ba1891,36f9562a)\n,S(762e7a18,b4fe627f,1e1ca7,57740811,bf33395,cc962aa1,dff79be4,18da85c6,a0df0f46,50461c0f,4f8a743c,3455b842,5875f795,4af56b93,dce93234,c4f51ec5)\n,S(2f02d935,cd95caf3,d56cfbe4,4337b1f,78389f34,1146f561,b8d632c4,b93a29f0,173470d8,23f190b4,f8008872,b23f1a32,9c45441,c12fe87b,e74e927,18f44569)\n,S(c9f877d7,2eb816df,1c5adbd5,9fc98a39,c5877d6e,24ef1612,314e6392,e7eab212,14ce9917,88cf7eec,5a5a52b5,8fcaa9f5,88bb0052,754b3ad1,b0858e4,6a067c4c)\n,S(cc4dff69,18a05cb7,a6f296df,6cbf5d0e,d6dd1c23,ae76c5df,239d2179,a0baa172,1cd438b1,b8471750,261b0650,663b4a56,e4dda0ba,b5390cd5,b7869448,654a4dc6)\n,S(faaac74b,3ed2713a,29c10219,a78acd51,ca015a8a,65646a5b,cccec828,efcbfaa1,adcad43b,dcc2ec0d,bd65c46b,7fe79549,b2e74cc9,13fbcecb,f8bf661a,7d30d934)\n,S(171356c9,30fa9bd0,da1444b7,35be6c0e,8a0025f2,3d1a2480,dd0aefc4,44fdbf46,770e9edc,991efb9d,ab44361e,d2398e54,62e2464d,2ee2a14e,b2e149bb,9c9bce3f)\n,S(933f56a,e0473763,d2d491af,55f9fb19,c055017a,7a81b43,b641007b,e5680214,66059c47,481cdb63,481ea647,f494e541,ad1d70ff,93b1eba9,f85a9cab,a0ea76ad)\n,S(a300f22,b182ad37,d7e44691,bc9c9c9,8a397f76,1ec1acf6,64ac1fe0,5bbb6b34,bd6f2ffc,a90974b9,460de269,4722f215,684abe44,6228b500,7b42bab4,5433593d)\n,S(fc5e57ed,6e901355,f97c1d62,dee4d630,878b79b5,528e3fd6,85d6e3ec,af8fe1ea,1122127a,6c21cbb9,e598b1b5,68507bee,bc7c8549,345c9d49,8c4a9b2b,2f5bab01)\n,S(5a2f40e2,7a64811f,bd4721c1,99019523,899e956,ea340bff,f3f452fb,5231ef3d,6b2bf95d,12578c79,74a06d26,39d71c31,d8c4a53a,6279886c,20a122d3,2093d547)\n,S(59783333,df0b99c5,be76610d,67d7ef62,fb15757d,8dd1f310,6f9179b5,64f2084f,f2a9ea80,dd3d170c,813f4623,ba7583eb,7d309d97,c34f4c4f,a7676694,7e5b7f5a)\n,S(cf61124,6b513fc8,73f72bb3,87a29c2d,a1c8bed7,4ca7ca08,1546db1f,37672d95,d23c3c76,697f0443,9ed1d1a5,661fb0fe,1e182cf4,2e07c787,3eff7abc,2f8c70ee)\n,S(edd14f05,133a1480,e26eb7eb,8063f8eb,1cb871c9,606957ba,ac14b173,2ffe7d52,d682f280,d295d528,4c1b3aa8,445c274e,ee603308,ca4792a,61b5f8d6,34b1b70a)\n,S(f9b0fce9,cdc8af3,8b26e790,2c95926c,33cb8d30,a5de80d1,75fd95c7,fc1a1713,ec7e8df6,f3d163d7,181083cd,c8cf4a89,df958b8b,d6fce2b5,d4752240,f2a3e6ac)\n,S(ae906599,54187f57,89306981,7417c566,d9ea4315,f07094e4,e46bfd24,1746a3b7,2241bdad,c09d3313,e9d006ff,2a04709d,17335573,5be5b10,6775457f,231a129b)\n,S(55f0f800,76492f7b,f5e134cd,e581ae3b,f68fe9f3,44107540,c54b350e,47d956e9,22a0891d,e68488a1,dfbb4b8a,35fe9835,e258dcb5,c70ccb98,2c8a48cb,c33956ff)\n,S(90c8ab06,86fb40e2,31923bb1,df86647c,6cb7e3c4,c451d0c1,b871994c,19663bbb,dc748cd9,570eeb2d,c6fbb2c5,c417979,cb30d718,94c8e463,e3b7be3f,fcc80ab4)\n,S(cbf47c2d,6b21ebb9,fb268e73,56ea849d,3e476d6b,ac09eb60,4bb2e27c,84a4c694,f0288fe6,8042894a,39abf8bb,e5962421,416ed9df,dab081cf,16e86fba,7abb2873)\n,S(7c30885f,c18b68b2,8fff758,2148d738,d8f1bfb2,46543b16,37e9fce9,7d11fe80,3e2d1cb9,31a11c15,b26c6d37,8c886e10,52c06718,a63e621c,7ea51c76,3c013f2f)\n,S(ad614919,d1bcba0,dd2a9da9,de9207db,e137c772,37f333e6,4f11433b,f66d7753,fcaea18b,3512a188,9d604619,2ba759b4,190b72d7,ec53d0b,aad9e01e,d239753d)\n,S(8df7041b,af8c9c15,70ab50a8,1ed335b4,a7bc4171,a3939715,a295ca7c,4e5e29a2,e892e43,82677bdd,f3566b24,c7ddc6dc,e12eabc3,84a19a13,99b64ba4,bdce02e7)\n,S(9f4c1e57,61c8520e,9a751891,ac1bb5f6,217f4e77,7dd88fbf,2a127804,2cfdadd6,fda210ad,c6cee889,c35831e,b3e12c7a,ed4b6963,9f3d4860,9d9b960f,4e7d0f50)\n,S(a436f4dd,23ac70a2,c093bacf,91de3093,174de618,7525947c,2ee8ccab,a515acbf,c0e9d9d9,2a615b9a,9439a450,927bc128,5879e8b3,7d460ec,9fe57eff,7e19afb9)\n,S(a38eed16,699743d9,16d8627c,5039695c,37497c67,c59547d5,67bdfa20,b86f1930,6e3e3ed6,effc3b5a,c9b5b5fe,3f26c91d,3be89bb1,48414c18,bb0e5454,49d9d7fd)\n,S(5f4590d2,d4043a1,faf659e3,36b0f24c,b6f1de5,88e92586,83361eba,e2fbf3d6,250c0a73,42ceec0,3ec1af11,764e7ff6,ccc833b7,240466,15890be0,55197db)\n,S(7565860d,c6ebb900,68ed16ff,8f7282a3,d52beac7,73cebc55,1be51f44,34cf56c0,4b56ecbe,526ed458,5428ad7d,e9d7f3eb,9b84687f,e01e1346,c32461f0,bae24c26)\n,S(3e7c7fce,3a56ef01,cabad50f,2003a5a,77292742,be80b5de,c537b50f,95a9320c,98cd94b7,926e7111,f3778904,599fa9d9,d5dc342c,c495b914,a32d2722,93dbfaf1)\n,S(131eb457,14cecf84,abf1aaf5,ec4c62ab,2ac91a0f,6af57552,2eb07274,b7cda208,a93aed4f,f0512604,46c61393,faec55aa,9b017a13,60d13031,27bfd897,e320839e)\n,S(371bc601,e46963d7,388bff6,9c4b5f42,a98e68e0,2db3e6f1,637dd24e,a2a11ec8,e2fbeef1,932fa241,a9785238,c1b89269,21bbc7f1,3aa6bdd3,7b39d94a,49f84622)\n,S(4770db04,92ca73e8,a0136bc2,2c45185,b4d45934,e4430237,1bcf5045,cae47d6d,e1af748c,25b1d906,ab77e080,d21df4bf,99a92f7b,4b1d790a,f1aeef36,2d41ec22)\n,S(b31a8643,5af5db57,759dbae1,67ce3af5,e8e2ae34,20786fe0,da82812c,9594bfff,3793425e,860dc99a,a96a85a2,585b06a4,f5aaabd0,551fe0cf,3c743be3,c09aa4a2)\n,S(e05eec52,84a2501,fddfe6dd,1619c374,a94121bd,7d1c99bf,9b2e665,bd3631f4,c0115f17,2122f806,99a24ea4,bd742425,4d883d77,6d269ed4,f6cc5626,ffb8e622)\n,S(e55ddc84,ee407d3,45b84305,d97d3f57,e57810ef,bff3b35c,e4d8a325,2973d5c8,71f77bb5,b0fa6141,7e43e425,78ebb13c,abb87a6a,fa0cd1a1,26e8936,427ee677)\n,S(ed7b6ab1,a5c8a9aa,284bf3ea,5501d33e,1aabbe76,f26a9f0e,d46dd23e,decd788f,2280bb54,19d1a620,18454a4b,cdfd82fb,824027d8,c51770d3,77233e01,1d0db63e)\n,S(d4e331fc,3da4d8ae,e13a3329,acd4ee69,ce5cb71e,224f2001,f9606714,8090e79a,895141aa,2f63cd30,9f4a6b42,d6a88112,77821e51,6d08c52,1ae8e158,655e10d6)\n,S(4f0ada0e,a8ec1ffe,6682545a,bd8152c7,2654718e,120d3d54,d648b487,896d4417,a603b9ac,6026ab46,47f5acf5,5a9fbaf7,20aaff54,56c88cd4,dc5ec7f5,935aa591)\n,S(a2d13541,b08eeee2,4f086a9d,20df7528,a884cc05,4106b1b7,543eae3e,fdca84,5ac0b166,294d6b91,527a5249,7fd605ca,4bb67c35,85e002d1,74503b7f,5c803a45)\n,S(4c1d520,14a0459,2b8887fd,afa945ff,cbfc4722,2ce008f,64fe8123,b5b6c8a4,243c4280,17b7918e,57d06597,f348efd4,ebcebff4,3950a608,3bb3e334,50ed738d)\n,S(5f9e5a6,7d13e9b4,cc35b8e6,b2305cb0,fc2f5b7d,ff32ac55,1a5970a9,2bc54390,74808637,96965f7d,bc45833c,e8bedf00,85eb0cb7,26f3276b,30d9543b,7395ff6f)\n,S(d76c6f80,95381b17,80ad28a8,80e29ab4,4447c297,34a4d286,98534bca,8954575,44b6c3f8,6b30e01a,61205178,90e429de,aa8273f1,277bc498,59c87300,a561b27b)\n,S(7577729f,f78775af,703a9eae,b5864a18,6ad19f1d,dac658,e7a8a05b,d9df3344,6b519916,cceaaa53,92d2f822,98e7ecf3,3fa7c5b1,2e705345,32ec3f99,2f0afec9)\n,S(50378f2b,457f04ba,d0b19425,86ada992,78700c8b,36bba67,fca916c5,8edc17db,cbd1451c,26bdcd49,1adbf40b,ac5338cf,26957364,f82fcad0,5fea3c2f,76273fc1)\n,S(3748dc68,64365160,26384ba0,ec078ff2,7606eb44,e3d62b50,b9138be8,cc9ba86c,6c04e414,f624ae9c,ddd005a0,4e01828d,6e7bfb81,d350d271,96583c99,6611d709)\n,S(b23a59be,8ea8d561,fbdeaea4,49eac729,3402f342,d05fd404,7f9c5d1c,57eea53b,bea47c68,f2d35b82,ce3c359c,83f5fa1a,95d40eff,702ed9c4,2fef0e84,406dfb9b)\n,S(e4b451e8,7b42a5be,5c5f443,5701d2bb,9538fc06,925ccb49,ebfd71c1,16a64770,2af84669,9a790749,48efa86b,2b79b985,4cb261a6,8a9081e9,e1467b77,2f156da4)\n,S(864ac6ec,65b8b086,346e671e,8651ddf9,de74a215,64f3da12,42ff7548,96dff165,f35738a7,7ab48555,91ca5103,c8d2bebd,b2cbf902,dfa93188,d68eb600,271a8730)\n,S(b7d04a3d,a6a863d9,b7809022,56643864,fd36c5d7,9a056ac4,ecb27257,f02ecab0,cc40634c,6ba5dc23,e59e4e3b,fe6a07c0,1519abbe,7530f1a1,5ec7ef70,6f83b0c1)\n,S(ddfc1af9,b51eddd8,2020de0c,4a8377cf,bd6e2531,ebc844c,7ca8fca2,714c1a0e,cf77c8c,1742c4e8,b22d9f54,a25daab9,c30f23f4,da3e1ad9,57b9660e,3ffe3951)\n,S(78fcfe69,d5bb91e3,a13de26a,614d8479,e00c828f,8868fc30,ea75b47c,d51fcbe3,9ec67963,6b7053ba,b0cb231a,ac28143a,98021b48,4340f060,66da6e72,47f2d47d)\n,S(dcd918de,16961d71,8222b4f8,19e76ecb,138c9884,7833a8fc,d4204dda,1115863f,abc3d8ba,c8d808cf,ca12318d,d13c2932,3ff7fb0d,813a5ed2,f5e52aba,cb23bb04)\n,S(39ce2ef0,5de08106,93294eef,537bc212,e6f64fa2,96ccd2b2,94a0806c,c6c3177e,25eaf4cb,b7697a3,97a0ca92,6f3a266a,bbb5dda,78943492,39fd29db,78730556)\n,S(495e4db6,43d4e89e,df50e937,e97ac4ba,1464514f,d3a46b5a,bae6a53d,3157a04,7d327e18,b2960d69,ebe4251c,f8c416b4,f84bb81b,a20ce6d4,6e6b1c57,e6ec1701)\n,S(91c17e8c,b6357c0c,1c36dde5,29f9e6f7,a6cb6e97,f5b67dbe,fcaf5b96,637c33c1,2fe52097,fedb8ac2,efde2692,20f586af,f07b76e0,f685ce85,c965ec1b,a54c39ba)\n,S(e3c4f480,3dffed44,6291f11e,cc5c9590,1c28749b,d6ae18d4,c0371221,d5ecfdbc,5a2e7102,571e27ce,974ad71d,acef8b28,4e7fb827,5453e40c,65b2be92,cbdc62d8)\n,S(b3ee17f5,a0e81e7b,48814377,af9dcbb8,59ae7bea,5680f33a,cc15d8ed,75c25073,135a3c0c,9a6d2825,a6035afe,139ede23,b46332d5,5739ecb,6d092e7d,6cbfe86d)\n,S(e4cca844,2bc91bed,342628e1,f6492335,7ca6e8d9,5e5b5732,29866066,eae76b75,dd55a555,39b5670f,f70b42b0,f319ac72,409f74e2,31d9cec,ecc8d90e,516f76b9)\n,S(ab39cfc1,81c96089,998c02a4,64eae7ae,e517e4ea,962b6359,b5ebfbf7,da223b2c,def6dc57,b4dcbbe2,e6dcfec1,8281a189,72ba3b50,f996096,a22e4ea9,77d2fc4)\n,S(22a32663,9e6e0469,fe4cad40,964f081a,677572d1,94b3ae01,f8e45c84,dfab402a,1c9c9d95,bd4e0ef0,5acf6148,44c98fcc,db44cf50,5d42af26,1b855f98,40d2b437)\n,S(2bc788cc,eff94bf0,307c5ead,4fbc4dea,db269da1,7790a903,7c2fcc24,21f9cae9,172f3461,648c5520,44081c43,a8c78c3c,ccecb248,9d60d384,aa703e4e,24bc4b41)\n,S(b930dbd2,a6720601,35a75bb8,8bbe69e8,3872c636,9fbcfe4,c622a300,2052729,9983f03,a872e8b8,2830e7f9,a7438b39,ff3f6836,3334debd,83940ff5,ae06f366)\n,S(b435738a,2aa9ea40,702db448,da6f186f,29bcd03e,872a3466,f33b2e39,7514e3d3,5828d246,2d3c671f,85617e55,bcc34905,1678cb8e,f61c74e,92c54473,9098636b)\n,S(c91f2e81,3acc9baf,2c52df27,d4180dd6,ee1fe67f,9db6223b,532dffb9,3072bd25,1c9c57d6,96c12f13,13afa0c2,b377e1e2,b027350f,bd24f455,69c15f07,85b73c0c)\n,S(bb0946c2,8099ba93,8f28068f,416d9003,bad0d06,f8c7d31d,2b995f00,5c8d36c8,8e3878d9,3b575fe9,78fe1a62,1e978f28,1560421f,7782c164,8673906b,ed76da4a)\n,S(485e3aa1,2e823374,cd506521,a707f367,5298dbf7,cb44f398,c31a06a4,8f085c8d,a12c8af5,7079b2b1,5a339d4c,302fc262,af0153e0,dfb4f878,a4b60017,86ca9a61)\n,S(850f9448,d3282256,940da03f,e8a96eaa,f21d02a,78867db3,e8a9fb9a,713e844d,4551e4fe,3201ba2c,a74df3a,f58a820d,3a67836,a5a8d82,59ab2442,3bfccb7b)\n,S(a74816b3,f66c1fe4,9f8e51b1,8eaf51d9,449cd4c0,54b6dc43,682c853b,be39884,4e7d5fb2,47ed7ea1,45af0cfd,c4cc1059,396626e4,80ec804f,15ecef7e,b372f7fc)\n,S(2af5c56f,c71da217,79abcc1,73412016,e1eb702d,6b98af77,85ead6b7,7b20136d,7f3110a2,c6a82623,b2c49e95,a31a6b8e,783911d9,b532932,1b651541,86b706bd)\n,S(9291ec91,a61adf1e,90d63135,fae60edb,1a313714,97260903,9684fee4,339b5834,d530506b,e8b0dbb3,fc09649f,1832de93,feef42bc,ade2de09,bac1dd17,bdd03884)\n,S(160ad3c3,659a7816,4e9cb47,4e18ff6b,a8581fd1,823ce8e1,14444292,cc605b54,1618464d,5f28d719,a61f939e,b1eb91d9,a59f2c1,818dbb58,b6e1f426,a4d141fe)\n,S(352599bb,8640920c,2d85a5d7,673dad8d,ea4280f8,6358a572,b4071934,60ba9d58,a78a591b,e8064f2b,22d7707a,d3c95cac,aa2ac3d8,638d564a,50f7d1c2,8b538d0c)\n,S(ec20efbd,9a8c634d,92f7a728,1e9e15d5,adb37ce1,2236bf33,4d12c4fb,7b6ba527,acdb29bc,2a5a3115,3919315e,27af9d8a,e8c54792,fd5421e2,a9a57b3b,d51b70d)\n,S(40d1e4da,8bdac6ec,55ee847d,c59781e9,bbd38785,1863c64c,5cfad460,e2dbebc3,c630581c,b7c92e68,a67c7d5b,dba3ec18,4e3755ff,27fb53ac,d3a2655a,316e9ab0)\n,S(fbe12740,2faadf2e,2b1ac1c3,98b66df4,81674c2d,f0ffb512,7dbba444,e7d08c7,d00edcd7,f97914d0,3ac87182,14491698,f3dfee34,e6e8587c,52f2f7b8,b7f412d6)\n,S(d781b5a7,47d191fb,8850fbd8,fb1e123,4070d9d6,2643008b,b0cd930d,c191eb03,a4aa95a2,5c74ab55,f95f2924,519b2911,9762ef30,248db792,d906b18f,346afa11)\n,S(6472fc42,d926bc7c,115045d0,395b5e9,22790c39,ee520529,44a446f0,9ccf02cd,512014,a92593de,e2264e37,633c842b,45d1ab5,e2ad068,63db7894,4605a99d)\n,S(eee180c2,e09601e8,6a517a93,54607a2c,5fa6cf26,4c80ffd2,c5715ed6,395e0c21,c8cba798,221d6fc5,b4fdaff7,f785ca3,49490af1,ae655711,e0649669,7483e7ea)\n,S(900b262d,a172ad41,15bec071,c5763077,9103bed4,db500ab4,fad4b750,45ada2d6,316457f2,bbadfe91,3f418e7f,b3fa34d4,82c4c1d8,516755aa,371423e0,51e2cbaf)\n,S(7e93db87,4e1e5070,772d3371,b9ef29d1,5d5e03b1,e66bce20,420801a2,13a34c9e,cdeaa624,750032a6,f5faa0fe,e00cdc10,63f3ec47,b5bfb56a,bc2c2339,e38465a8)\n,S(461fb424,65f3a55d,e66761b8,44abfe3a,d172877a,3edb1f5,da98c82f,89a379ca,768261fd,ba032718,f5501dad,c05e41c1,1f584aa6,6b8e732b,7f15285b,18e815d9)\n,S(1d9f581a,f0f61a0f,e5d0f0cc,91ba4f93,6de28aa6,5f35059e,997de778,9419e09f,7fe9c98c,7d59dc56,160302e1,89676f54,3f02db1d,622251f8,adf369b4,891bf6cd)\n,S(8cd70b52,904b2aa7,240f7a70,e4efe379,66386dff,3ccdf62b,e2343821,767542c6,b3c3d03f,4c7e0b1f,f08bb2,f72bc6ba,e9e293d,886541f1,ff86bec9,b5ddc2f2)\n,S(a0b547ea,9c08865b,99a5b8b3,800daefd,99097b23,4e442a2e,819aa628,eb4a5261,607ef115,e585100d,c003cb4e,1a27eb60,fd9d1e18,f2d23a22,80cddd89,f2ca2952)\n,S(ea8a60f6,547038e3,683a649c,27e81ab4,192406f5,5fdbd775,78dd6360,4344d289,98afcac0,b05ad5ea,8fcb9f3e,3bc22f16,881b5fcf,5060c691,ac10f746,79822fb0)\n,S(e6051a9d,882f9ef,77d488fe,55bb7829,48bce506,91350755,1a8cd4a,14b0a711,1c9cdabe,9d9eb555,cb9257b8,a60af75c,c1ec0c82,4d933498,ffaa14f6,2e920fce)\n,S(600876c9,c50fd337,6ce5efb,c07e0e5b,165338c5,4f8eaa4b,39a525e9,88765674,401a671e,f52b21f3,83df5da0,aa0b215b,b044202e,606a746a,213796e4,dbea4189)\n,S(3b045b9c,5ef6fdd0,9b3efe12,169e0414,3c0eca56,5b7e0185,274f1e97,f6b2ff40,aa5773ac,b21107c4,2a8085d0,5d6914c3,a135a47b,cb136dfa,d20e6813,62780a28)\n,S(dce98d32,ee0b55e0,4d67807f,ded9cef5,f9504b1d,e552a2dc,643ee7f4,b1f0f1b6,d03ac27c,9e992497,cbb746d6,7acf5427,aba058e2,801df1b8,d435a1de,1f3fb086)\n,S(365b1148,6e8a60fe,8a91c07a,93686787,dd5aea7f,22fa1449,58be984c,e378fd76,2c7f5217,319e5d50,4c5ecbbc,bdbb8ec1,b36e2767,54f405c3,f852b761,ef01c9c0)\n,S(2e37935a,4dc465ed,ee8dc3ca,d4ede356,3c3720e8,57c986cb,b9c73b2e,ab6b5806,bd0873f1,5278f46d,802dc7f9,d7f81a4a,839cb690,10c6d522,c0e3945d,4bce346b)\n,S(49b68e1,93745ad7,b60ddf92,70d71958,81cd8585,6e47b0bb,fbae94,f1647568,ca1d4bf0,13e43ef,53bcb2d0,5f4b85be,1dc82d31,f4a7795,755693c0,72819dc1)\n,S(6df53d6c,c79c5a88,2c2b6f66,e9ede075,6c8cc6ba,3e60620c,b8130fcc,fa744564,48c3d6ed,3b2b7c59,2472f291,41a61495,4597f77c,afb576e1,729804d1,26431344)\n,S(d99f8f06,9104e3b9,26163672,767145a2,2f9467c1,c8e32b8b,d28e170d,bf4865a1,ccfc46b0,55aa5d93,64e67c4e,2c06cb18,c2b43333,e4111479,fd1bfe50,52543d7f)\n,S(77727c17,ebbf8338,ba807572,8558a059,e23af7fd,c68c342a,538ead93,e59930d1,a037dc7e,2cde1802,fe3bc65,75f50ca4,ede75194,133e7083,66de0338,40c629ea)\n,S(1d40ead8,563a4ff7,c14c84cf,ad1339ac,36ae3789,99ec2663,77e0ca2f,6be22604,8497b443,b093917f,ee65a5ac,1c4dfb87,3a6b0c2d,a968d713,a711ec12,20d1face)\n,S(2a39f41,adf5ab33,71a27c20,51840d37,e3226999,17a3d0ef,40590710,406bfae0,cdaf7a8,58e99fb8,23a36b04,8e844c18,8dd1a49e,c70488ed,155f2ac6,905c27c5)\n,S(aaae4b1,d8b08cc4,8971cc92,fd974a21,66f5ea92,b6ce215e,28137088,19c684e0,9237995,c10a348a,84fd5cd5,5151e33,c63739d1,3a425bde,a34d78e9,e3cd8f0c)\n,S(a5b0c042,591a53b6,334939d2,9ac2c9e2,11315a54,831ef440,965fdafc,e6477d40,ac3e7cfd,5d1f0248,b362b206,b3c7dd60,bc9904c8,d2a416d7,e117a5cc,4a62ca6)\n,S(c1b7164,e6166a96,a8f643b4,7f094be4,3c16e3b5,3ebf5a1,2782e41f,27c63f0b,8469161a,4ffaf1ff,5b50ba81,1de3ac79,e34810bf,73ed1207,fcc0f01e,75663a98)\n,S(98fd825,4b7963f0,4d8e0f2c,8eb26dd0,342e605d,8fdf28b4,57b98e14,adca63bc,e297a80d,213f6664,77f9dba6,5cbcb99d,2dc14325,be12098f,22061115,b1a192d6)\n,S(f1f08649,71b6ed49,2d34127d,8c2e6f19,48c464cd,816acdc1,63eb3aad,594c3281,26ae2a0,f9e04fa9,13b8954d,85602e6f,506a0de5,2fdec31a,346338ab,f31f5c)\n,S(ff470cd,c324d2ac,a63441ea,c0506fb5,b63af83a,61a23a91,17240e23,930dd197,e601f66b,b18e77e8,4607a772,a1efa73b,30734b4b,8fd31eba,5a5260d2,5627788f)\n,S(90eabc6d,968aa196,b5808127,baabbaa8,ad0f82b9,332ed6dc,d04442df,bc6c63a6,d6df0f67,ffb23cd7,2dffc4be,44476b2b,2faed3e3,dcdc30f9,4c1fa4ee,bb5038f1)\n,S(e217b126,acc507a1,b41e0826,b300363e,bc0a43b6,feaf3866,ecd4b8bb,cc7e11af,7eb28def,83db33d5,8b8eb733,2b27a386,921e3a5f,b0321ecd,a8d1fc6e,49e98f30)\n,S(2a196fd5,82b85d5e,1772bc21,84d8aad2,b5d008ee,c795628d,20de68a9,fce1d184,994b4657,ee9ee3d4,fdf8dc8c,cad2ff1f,68526c67,89d82230,c3399f6,62201303)\n,S(bc9e3bc8,3a6eca7e,8a9897c8,1118f7be,ca770cbd,7e66c2e6,1321d026,7ade4342,9d7ef7e2,d544a561,ab899291,75f35d24,e2b07661,2f84b0a3,f346542d,714f3f4b)\n,S(ff2813f3,842a9f84,fea9e367,6f12f209,7e76b8ed,e691ccdf,6f6512aa,b2f198b3,206e3bd6,66d0c161,ac6de438,809f485,b8b6682a,f402bf76,18a484a2,c3fe1949)\n,S(6e7599df,2d38d63e,be142321,769d7ca,34a50bbe,4e0adbaf,6c7479b8,d1af05f7,233dcf1d,4b0e4d88,4a9ed56e,b6b4946b,25614345,ecd182cd,5556faa5,e3654c8d)\n,S(1edd9cd5,6c82eb28,14d844d1,a9e5c167,8397662e,b576f9f9,ba250719,33666146,a00f4a85,b2ee83e,949b5cb0,4d16820e,39d48ddc,95dd965f,e24251be,3df43f4c)\n,S(2723de06,1f794cd7,76a4a090,738a81ea,818a2f73,92d7ab07,18d79fb6,407324af,35c7a9be,f9810c50,3c53429e,344ab888,38daad72,77cd0e78,3db1c1fe,c6bbf41f)\n,S(4c4fb244,4cb54def,6d9659ee,b43c13c2,3874ec2b,a7c6b53a,f469ca26,ab9a213d,bbd2eafe,56447a9f,feb9ad15,349b338f,d4a1aed8,5a356472,82751e5,5b8efa3d)\n,S(736359f7,347995a8,8e306977,1fb3fbcd,12847ed2,8e4e612f,25095720,667593e3,23bb37ed,4bce0512,35a215ca,6b8f9868,e303fda4,80d655f9,72c95bf9,12bd3741)\n,S(15cb9594,ee936bd1,4b981394,60879bee,6f33b0f7,c0ccb293,825794d9,85f595be,aaad772a,2ec81ab6,13775e9,edb274ef,e2e133e6,5e58949a,c7f25429,fb1bb152)\n,S(3b5489ab,97e5cf1e,84a90eb8,20b8772a,df574777,a61f0a9b,41e6c567,6be78fa4,145d13c8,e9674a17,ccecad63,f113d64a,d59a1eb,bbb10cf9,e7134cf6,562219be)\n,S(78d1b99a,a6f9d385,b09bec7b,b59ce26b,23323e4c,3a259c56,68417597,a29dd2f5,1c8d11f8,e883b210,cf54369c,e9f6a280,a6b890ce,15b4a0ef,3cd8837b,7e16a122)\n,S(385e4e8c,5ceffbbd,3a813e3f,938912e,d2fd2d18,2be81210,70cd15fb,39661e85,f4a1c414,9f5cfbc5,213ceb21,c1cc08ca,c9b168e2,58cdec70,36e2dacb,ab68069c)\n,S(310f8c70,d8e46c6e,48930df3,c53e9292,a7c87230,292d6b1f,c28d9711,951aec6a,6fe319d3,c92c07b2,56715154,d5d7046f,59d92d5f,6dcedefd,b0386f5c,3417146f)\n,S(764f3c30,23d1d50a,e170b80d,48d58923,c1f91a96,42210912,94066585,d7c70bbb,bd92fb1a,becdb4a0,ed941146,878c99cf,c3ee9eb8,c8f2b8e4,b547cb40,e3dca724)\n,S(3d5d23ba,b357a37f,1bd3c86f,84010b8a,b37a8075,3c47b1ab,36f7ef72,a3e68126,2bbd1841,bdcf0265,838893c5,f5f9c0dd,7ccbb461,93068e0,8211595d,6b34255b)\n,S(a70431ad,cdfc7b8b,febd2aff,d6759e94,6d4ddd7d,50f50dc0,87e256b8,2a7f8a1e,3ca4362b,9362b2ea,c33d77e8,befeccb8,23163921,86ff5f20,384247f5,9147f593)\n,S(2a388212,2c1b2ecf,3c800432,7c5dd403,2263e9da,245dc697,bf7d63e6,300e8a7d,ac96d188,53b87bf0,3dc5f2fa,fa9b73a9,a339c0d9,a7245175,fd72c822,12f6ff78)\n,S(e99c59a4,ae3022e,b50bc545,f57e3013,56b49bff,33069a9a,b4d17c0a,424b5451,29b24b79,fe55fab7,6c3737b5,61505916,b4fe1a98,20837349,baf445d6,2e9bada0)\n,S(a0a42ed1,bd5ac5ed,f63f1a3c,3c3fe2d3,c0be26d6,b0da384b,f19c034e,83306d4,c39ff3d2,d4442374,7a293e28,8c320ee8,8aad0879,672679e4,e5bcf611,5ca0bbc3)\n,S(b952e5d6,9ba9f063,f1d1670e,1419730f,5cc17e87,b6f0b01,c0b86ebb,c09e0053,c1e8099f,a230b8da,6e71c9b5,bbf250ae,273a4f9a,f53cd0ca,fe8f0c7,2dc46ae0)\n,S(3aee273a,130f5f4e,463892b4,512621c9,be83c18c,655d5a2e,620f83fe,95a4e904,edf475c6,921fb6dc,f2c3c6a0,b93f9470,9237b035,9e8c9131,eb7eeb0f,bf0af7e7)\n,S(96ddcdc,dc65af06,acb10d91,b87827fc,aa2f9e65,d28d0449,65ce255d,ba66ceac,2e6d0368,17fd4024,c830d4fe,310bbc23,9e2bf37e,60203584,215f852e,d100ab39)\n,S(fd50f406,c757ec9d,b10e111c,32941fa1,e0d07ae7,9e3584d5,af45fae4,d30334a3,71b77494,d49c068f,c7db1d36,4f8db288,ed9ccb0e,c6137348,324f4bcf,d53fde6f)\n,S(6f2d8268,11954523,614915c,9568ab9b,bd061112,bca3ba77,d3c64f91,6ba097d1,abe41199,849ca7c4,d317fe72,2a5647a2,97261d68,d025f5af,e880ef78,34787a87)\n,S(d88c0db7,6dffb62a,27683d2c,e832a312,9c5099db,e2623c9d,3f064247,21cc1400,5134f15a,df6d7e92,5d81726d,f08732b6,ba5aa289,431bb4ea,542e6352,8dcec51f)\n,S(a8de9ae4,ddde3f28,ead01363,2202fe4c,b6c0fd4a,a71d5562,d95f557e,747105fe,179e946b,5a71b614,90bc39a5,17dc752a,53682043,6efa907e,383e3da,a3be8803)\n,S(626c6827,f7dc3d40,9daa4811,80e65b0d,799c94ef,e48077ae,6eb250aa,8fcd45ac,3d659db,87cf7b28,32e4a2db,8db88e5e,b30b7ea1,7819c00,fcec5d63,31bf2f32)\n,S(28a3a2c,f00efa47,db4b2ef6,9f56cf02,1666ebef,b5220495,5b5484f4,2ca77d02,8dd00ed,fc9870ed,99ce90fb,927086c7,fc16837,9794db01,f7799b16,8393c82b)\n,S(df0b029f,27c46405,245d0dc2,f178a48e,c3b67275,7fb92bd5,dbb29370,c1545786,f133ed05,c7e159a8,810a5ad4,e1019f15,757b474b,fea1679c,6ccd18a4,2a1099a)\n,S(dc6f57af,9c1e0be5,2d2162a4,e8a6b63a,c549783,4c7c2c8b,421bbc5f,dc1a49ef,6f586aaf,e610fe5c,962ee20d,9b389bab,66fca44a,1c19379e,9e97e104,10f1a0c4)\n,S(db796ea2,e0d2c690,19adcc0f,a81c1d93,8162472e,a0e3eac4,bf13b398,b255cd15,2e60c6a7,32e1fb44,641e0766,2191e28e,79375420,43bdb3e2,9474313c,7d05ac88)\n,S(569b669e,72ea98fd,a5ba3efc,e74f88ce,881fe269,30b063ca,59fe369,35633a2d,badd8eaf,2551f872,5db3f740,6eb5e376,220b6a6f,ff4f8ca2,f76b7755,f8ca0c8c)\n,S(36132420,1f9a33bb,d4b6b6f0,e2d175c6,ec795111,85fd2451,421ac333,78468ae4,f47b56ce,f7bc7366,6eeba135,14756486,62a58e17,d955dee,2821618f,fb3c4314)\n,S(cdeb2037,1e4d2014,918fa243,182db0ff,855a0783,c92fd5b1,b604ed33,494a469c,7d3c7718,6829381d,2fd0098b,c84ee506,970a7ed5,5518b393,a83c6f79,d8dfa7d8)\n,S(6035cfa9,d750c5ec,d3b721,ade88fff,ff6c4d74,f8db7755,c8717cfc,171598ef,fe1798da,160b2436,412dcde6,5482d202,9bb129d7,d58c9cb7,49f9fdb6,7dd675a)\n,S(b1f52e97,e49998e4,e0e75b0c,47178f4,bb250b5d,97d92ac1,8dc9e41a,3b79c0f7,d83f3d65,4e4cfd8c,5f24370c,a2651c5f,de484cf8,1024f33d,8087a50a,d3df795f)\n,S(aa799b53,4c73da0,9f011395,dd5f709b,f1a5e056,42536477,d7862b21,6df1b641,3a327047,b5e95b64,593f6887,9f38aa86,dd592007,cbbe7338,a003d2d3,33248646)\n,S(da4a1964,45bdf4fc,479e56b6,6d339a45,262d629b,dd8c63c1,8d35e9bb,a445aa03,7b3a5eda,25cc63a4,66cff29,634d5eca,353376e7,26c2c6d5,63f3f92c,b69cb70d)\n,S(c300b4ad,c2346d0d,433eba80,f0eef071,7e620d46,a07b384c,231e733f,a1b8d656,32083bb9,48d27ac7,f36aa439,a100b95a,f73448da,454de356,6f4a8771,e3cdba42)\n,S(c559a528,67937244,d639bf7b,90df2b2,ed64a907,e20cebe7,6a358b2b,94359f04,9fcac1aa,5c08c983,20d671b5,63f4434a,806d78da,15964474,d2470cd,49bf5977)\n,S(39b10147,a46dbf4,f074bca9,a83c10b1,b0911ceb,d3e795fa,9b96333b,dfe83540,ad35dcc8,c3b22743,4daaa313,cd6334e0,168da417,d162855e,64294196,2d308278)\n,S(39c9cab7,d2dec601,7f840597,19994c9,4129ab2e,a2779d6b,34774a04,2f7d6d42,c73ebd6b,835a8a13,354cdd45,37ddfb3e,72ca72b4,c8049362,3afdce9e,43781845)\n,S(1a625998,8a30b462,adec6097,2e218ec3,f8f81c4d,44131466,fc7b5eee,eec679ed,739beabb,1a97c9b,bf6776e6,2e213bd7,3651a39d,ba042037,bf5f8cdd,334114ab)\n,S(396ed910,cd35c308,d412761e,bf283a98,85f33ecc,3ef643bf,3f422dfa,ea4c4308,721cdda6,a08a614a,4dc48cf8,442a46b1,3945e158,83671b7f,556d19e1,144dfe57)\n,S(a50e06e8,a2e8ccfd,94aee96a,b0bd831c,83e15340,25e3abec,af7b7af3,9b299a47,593205b2,59a18063,fe5a4575,e8e085e1,4521fc1a,3ab5e14f,3fcd64fe,2bbeba52)\n,S(4a9f8023,17b0d1c0,e62c8bcf,7393fa34,dbe15cd6,46e8f4a3,dc3f26b7,11c3e1de,40eff6d,915fff,cdb30c24,434e8928,239867c3,962655ac,2894bea9,f7c6bb71)\n,S(8ce5e20d,9decb7e6,10b18562,e2ffbb88,7f323262,55ed9f05,5d2da2fc,8d608b73,eb69b6c,f363e164,e92371,b592727a,63f024b2,aa7011b5,4f1f698e,1ac720de)\n,S(f32695d7,9b53e9e5,1f2525e2,8a5540ed,84143ed6,3700be0a,36726f9b,b483f24b,e8d36488,eea2055f,6592ca1f,6fe23493,1d81bd16,1c61523e,f1ee1907,c08471c8)\n,S(3826fd86,3bf6592e,5b51ad14,6e02089,d9274881,25d25959,4856de1d,d6c34d07,ea86f1e6,a29035c7,43e82058,a7ff9f82,20da001,a8901e97,26583b1c,ffe4cc83)\n,S(7b1afcd3,2e32b0f5,1ba09868,4ec72762,ae8611a8,98e87ddd,dc6410a,40ccd551,deba6ef7,79e10931,8036ee3,9bb6d0a8,a3ce0eb0,bc5620ef,c70828d3,d2e37884)\n,S(3eb1fdfe,d2c27587,540d39b1,b66a36d1,8dedddcc,7f7f7b63,348460c1,35a91bd4,b8aeaaca,536ae794,619506cc,a812a67a,642c5345,8cfcf7b9,eb898f96,d26b36cb)\n,S(9d61dac8,aae9fc5f,532290cb,683eea2e,b71b4d9e,901b7c45,c214beb5,9b56da8f,2e7caca4,2ea1b22e,7024fc3e,e267ce99,280a8f1e,78a2a271,7938762b,3a446036)\n,S(2db372dc,3167faa8,e8e1e37a,85ed5546,e91a43ef,fddba39b,e38d0eae,3e11c7d8,16ab6f61,bc1abd6a,16e79697,fb59f0e8,84f00534,b7196380,9b06e10b,59707ffe)\n,S(98f7cef9,f7a2b538,538e83cc,9ad3132a,5b03dd67,f7fc4030,2ff023d2,8805dc80,3b40f823,2813e6c6,bd56df89,1e96a175,468bedd3,f9518dd8,d658105f,aeb98943)\n,S(eeab2e6c,c8ab0d24,d5df5852,8a89db42,c48f0861,4d488c7a,363cd195,edb62548,607c41ed,65d3328d,72be2503,f5edf14,523a7f74,402822cc,1709927,c82649da)\n,S(955feeff,b2161c70,3469a9d6,c5fb31b7,b7cb5ed1,ada6b537,6d935705,b3db942a,a9195a48,a561c342,779c984,6a710059,283fcd0a,682cb5a3,fdf48ee4,15c0864b)\n,S(219a4d2d,70d2ee9e,d3c8f541,1cdac36f,4db23bdd,a981a5c9,d44ce5ac,dccd85a7,67441968,43008ec1,71284aef,2c64f7dd,3dbfdda9,5c6c8e4,70a564f5,c4ef53b4)\n,S(4976290d,7794b161,2e2f5cbd,282c1036,d594571,722e28a5,ed542972,f91ddb23,4cfd95f1,60fc5655,2fc8354b,446dc510,23571c24,56f57aec,79004616,ce17ebc4)\n,S(472d53e0,268ead1d,bbbb99ed,599f5676,1866e0b3,c14d4a4b,5c44d722,b072b1c1,e9b9c009,6115d4d4,a8ed42e3,1d967b89,e4dfe82b,ec642db8,e31693ec,c2831232)\n,S(2a6f5b7e,7a4db95c,af875d61,75a6e1b0,3f3462fb,c0dd5d50,da3327b4,70ab18ef,91b247a3,92aadc19,7d9f5b78,f0b013ce,c9f3724e,a2f37347,9ade7e03,8659d506)\n,S(dc1815a3,bf48d81b,b5e5e654,fe0c8c3c,7431a62b,9d1065ba,17df9c45,23146c19,fe20729a,311550f0,e47e2af7,4747effa,d837c5f7,b08c8f36,d0fbdf2f,d594be8f)\n,S(8e7953ec,ad8feeb8,97a95db4,f03ffb98,a8b47ecf,3e68bc4f,1df0b6e6,98397776,5dadf2ef,81b21cc4,26c40a39,51f31462,12f7c6fc,dabb5157,893b1637,c141ac5d)\n,S(a4d91e6b,49d5724b,9e899fe1,c6686c89,faf96a05,6e666a74,72ee44cc,119b41a5,abd68615,e296498,f5abb820,cbdcfc26,fef10b2a,ba72e474,14ae9de1,960a4893)\n,S(b97081a4,f3e426b9,d3a66dd6,8e0e442,754c4922,acae141d,d0294843,6b00eee9,558f6c83,99214bb4,baa9cb64,11550b12,2c8c2f77,8e28a4f1,ea61ed6c,b8f153da)\n,S(6882b6ed,82279bce,70a73c6e,f6412c54,b873a5a6,b634a25e,a8c34210,fb825848,c6fdeee9,c8233e39,2ea79c61,6689e8a3,1e3a3b09,21f2b5ae,d6b9e14b,9ff21b3b)\n,S(9c542731,1c715709,cabbf11f,a4fdeb3d,1a0dba80,ad50d1a4,62c7ee1a,44717fe8,aa041b10,78163458,c446bd40,ca77f760,ef4b6471,c4f2058d,7ea42975,d1f2b045)\n,S(73a14da6,776b5c12,e838779d,e3be58de,4a5ed917,3b195d9,3577330c,780cd32c,c4068ffd,e98ec4d5,a7467bb7,e8bf2c89,ceb58574,cccb3a78,b0ce4a70,7ad2c49c)\n,S(6488a286,27d26c4d,bade9d26,1e6ddb7e,8748d835,d9def8eb,fdc6c576,b6af91b5,27f8b1f0,b0501191,8af0916a,945bb07f,3c7f0695,5ada697,b5c601bd,3d6d8ff3)\n,S(96546e7a,5b544c98,db9ee2ef,47dcfbce,cca1d38e,1978f71b,d8c9d4d0,5151046c,d04fe32f,8fe9ecff,220f07d2,2095c982,3b10f772,b261189e,84160ca7,5f4309d)\n,S(ba046f56,4598b143,a02cdb90,972022ed,e769986c,82d28066,761463ed,8cfecdf8,fc6e23ab,d42457c1,5407d37c,d3d9daa,3e57bc0d,778dd68,53603232,3e27250f)\n,S(39554751,e633ca7d,df6d82ed,86a8204,5e76557f,b13ca7df,310b80af,5ad0e4ec,a456ba84,f040f20e,977df5e9,5faa3f67,cdb2ba3c,2fb9bb4f,89486b02,a06d3b1c)\n,S(c5f550e7,5fef9fd7,d96c924,11046c3d,ba56b8d7,e1b17c,d46a68a4,989c22aa,548582e0,3aeab617,556a987a,cee7d0fb,8d65ea42,dc8f2cc2,173c3636,27ac3fa9)\n,S(2ccc1610,a48d8db3,9a80b2a0,ee063a43,26d4ba75,79b2727e,b999aacd,6e5fa050,de6dd7db,2114002c,8dcb17b,179e5843,fa205d69,4928eb70,a073f97f,f8348c84)\n,S(93b07ce7,3e941c84,1e4089ff,2d8e6464,3ae59cf8,fe6e92c5,add89e10,f7084b3f,a6c0476,c5a7267e,54ec362d,3629a1ae,533efcfe,e18d3634,cb5a80e4,4018fa63)\n,S(453c01f0,55c14679,5e3aeec8,26859b16,b0ec2707,61cbba3e,438c0566,5a91e7e9,f28eaec9,b9d3c8a2,2ef73843,6088425b,e14ac99,e52e73d9,8745bc49,a56766b2)\n,S(3c6df1fd,ac078c28,a0a148fa,d15595b8,c1d09a4c,4a96794,6f8d6465,e80f12f1,4619a84d,4eaa134b,a06a6821,2e7ed292,d443db5c,150b54f,6dfcf267,82a5b58d)\n,S(1b7f6968,39959785,30542989,59020dbf,f12054f9,2705efd6,dcc583,11b98630,279dc63e,e3e8fa8c,fbd731c9,b88ec6f0,67ee9e15,d0c14a37,372d9c20,c645c25)\n,S(e1b7b953,9d49d0b9,9b90a642,74d2276c,6256f2f6,9cd03006,97ad842f,bffccc19,2b23b96f,51dc6569,8504628b,19e81534,f2acfedb,27f93316,fd0dd8d0,d5f9500f)\n,S(404cf0c5,6fbf4233,4bd5f79b,ba97464f,9ce5525f,a56212bf,4bc817c8,af54f911,b5920609,88300588,5c61a6e0,75e3657a,23c04b5,79897c0f,2e22ca64,1f1ef662)\n,S(43f1d986,da626bd8,efee817f,a09a3440,e7819aec,17ea971f,43fe2ec9,caae0c1,c5fa5ace,ce891aa,d2811f51,8175179f,3e93f438,2b3ab583,e51a200b,2a74f9ad)\n,S(a18845c6,b3209951,16a183b8,1b762112,7bbcaae8,b67ee8fc,d23ecaf6,c5b9c1f,980ed5d9,d7e07e6b,2cfc5350,e818671b,8f54e7f1,5cebbb02,dfcc2951,bbef1f44)\n,S(4d9c7eb,af99824,605cc17b,e03c929c,254c38ad,c026d5aa,2a304920,e7ac01ed,c64c5b35,bb0dce53,2273cf00,f3360f74,97065bb9,9fa9b1c9,70d41c19,53e781d3)\n,S(e18d22f2,fbc3db09,bcd31783,3e8aa605,55953ef7,4c64814,edaeadc8,97e7c25d,cc258a81,71152072,24f7989d,fcaa8700,f15b8b2,85700b59,53ef2a22,efc7e07e)\n,S(160575f9,f220904f,8d2ec9a6,c1417e8,35083aa7,9bc37d5a,3c8bdbe5,2a47879d,1e56b4a6,127e978d,41191c60,ad439fed,2c38704b,309d34ce,d655f93,5279a5e5)\n,S(3b651bc7,57b1d626,4d6b7ebd,d3c5355b,4c3c9f6a,a1437e53,f9aa0372,5192d514,977a8774,95990312,ff1d8ec,5dc8a49e,5feb285a,8a1e2e4,19e56186,80231c3f)\n,S(9085bdef,56facc02,76025015,498ab286,a9660e96,1fd6bb0c,d9579a8f,16ba532a,fd05d108,a557559c,5e7f791d,90e80e7b,68364c16,8f6b93b8,c55510f1,7ae9fe89)\n,S(4224306d,f64a3862,fd33aab8,c1f0ace8,67cf1b25,76e1cc21,fef45448,e40569ec,8740b667,5279bc1d,ce887c2d,c59e42e4,63e72395,ff967249,8bd13d58,f60661bc)\n,S(b7376697,4a512e31,a6f806b3,5bc55ee6,e0e2b2c0,ff5a0918,2f83ca35,dc22935c,d350c820,2676fade,ee4152a2,48fd5cbd,890b3e03,9d688462,51c2a082,85420103)\n,S(73ba4f8e,d3b5d4d0,a7c505ab,1c1a7486,bb82e068,cba81574,557424da,4d0eb97a,93af3914,552dc360,549b4a2d,863d3f9,3a58ba9b,72541215,adca4bfe,26188271)\n,S(285a014e,174724d9,8f0576c4,5694b052,ae93540,6bce1bef,524be03,6fd3d8ea,6fdad1d8,d2ce7757,e6ff5213,f91d4db7,9d406765,968ce8ca,b393e7c8,6a9af7dc)\n,S(b0934dd7,27bfb54b,a2a5cea7,c6f8c0ab,84c2fd78,eca0d180,963869de,c28e768f,dcaf0d11,56029f31,4bebbb26,edb09913,484c94f7,d14d71bf,2bc709d8,f0b982c6)\n,S(3b627add,8b69a9dc,b751c8bc,cef15d0a,ffcb49cf,357bb65e,c45c8c0f,5b681561,bda1980,9e380b7,2da13364,9d27cff7,693cd2bb,a77215e1,536296fc,dc46d19d)\n,S(7e48fdec,1f2289df,a052e3f9,a4766daa,e4593876,5c8aa7c9,a62a369,52cb5ac2,e87af87a,ac116885,66e1e10c,5bedb49d,68449b8e,612939ac,61e384b9,bd8cb5f2)\n,S(4031f08a,5de33bba,b6a2c267,feec2e40,d094d890,caa1008b,181ce43e,263ffd9d,cfdc4fd9,9737a5f0,9a789beb,91dfef45,a8f23be3,11b946b5,8a79b7f0,51b0be07)\n,S(ba652b7c,61dddbb5,bf6e656f,4d441cc0,ec00a22c,7b900b1d,d5407ebf,931ed764,87fcb392,d1228156,a330b5d8,d3c67e00,1d207095,9a590088,a3b44d07,29556)\n,S(fb936572,d1017653,ac7dd95d,2d8c30f3,62c967b9,ba0d3b1b,ffdc1ed0,6590e72d,adfa37af,db6b6a31,a779965,9958be2e,94038246,6b4a4587,b0879882,4836d8ed)\n,S(294473cb,5e7c0852,f7c6fdb7,8861129d,b97ff328,19685148,99198870,b03bae7b,bd905536,f991867a,78a09f95,1bd5b4a0,78463e5a,6c767617,246eec38,7d90c86a)\n,S(2fc0f44f,73a633fd,91737ced,1683b74c,7687dc8c,6d3a4c09,44a6c873,c5bc574e,29917cee,ffa063f9,4e949991,2ae373eb,ac572f50,9a451184,15e07354,1d22ad1f)\n,S(811fb251,882c5a7e,f59d34f2,c8ed8a31,8da210dc,83bb8c40,b9ac0251,116d569e,74df6547,2cb55afa,4ee04ad3,f940de6a,d480e407,5c3cc00,ad291918,d8a0c55d)\n,S(45a9e17c,c1d6cf09,1f451894,ad4e7e53,c47996c5,82fdc57b,a9e7e614,b7fc5d07,5169dc4f,2661f5,fb2d1920,89832b7,4e19196d,c37fdbbb,16d1caad,7b069be1)\n,S(d577f7fc,45cda7ad,4743d96a,ab5c7bd4,abd06538,b78c0102,645d09ae,b5588e67,55172b71,7ea257df,ced1db61,88c78cea,765e2c2c,30bfd25e,52107128,303be07a)\n,S(a6429a95,8098aa6e,39b71e08,d4b0cefe,4fb22d8b,777a59c0,650e11b1,9b06e44f,af494e62,5587055d,cac440f5,786240ab,36ab1825,f2c3a7dc,f6aa64b1,947dd2ed)\n,S(f77c304,b89314b4,258b1c80,cf478ee8,50bca37a,63e20679,7396967,a39a743d,c487a176,29d914be,60845213,60f40f19,1c32f414,558e2c72,7e78637f,8dc1c7ee)\n,S(41c6f2f6,15981247,71ff0a82,e1ededea,cd76ea2f,fb2f9f5d,ef766165,96d1c988,58a0f544,146c1a07,5ff9ed4f,f9b687c6,3642770e,45dbf1d3,407b52a9,5accb68)\n,S(c8724ec8,c13d37af,9eaaacb,35765e3f,7ac2d2d7,1fdb5916,cdf66ed3,2eb968d0,70ecf721,42103e6d,e7d4bbf2,42bd9a6e,6ade66ed,a7862989,5ecd255e,44d81221)\n,S(e2888c46,dd58e36,be2204a2,b75fab66,3b139e4a,e070c650,653ba9f3,ff1fbbf2,715910da,e1393b8a,b7d88879,720bd601,bc158498,9522108c,3312b353,2342509e)\n,S(f1f4c384,d72d80b8,6b5999c9,aaa66f99,f56cf736,11ea9ec1,c14ac36f,66d834dd,b5543bc2,480142c8,ebb8527a,3c9aa786,2198388a,696b3c44,835e7375,24cc7e3f)\n,S(487477f5,832fb7db,768d412,6edd7f5a,17aec3a6,3419de73,f61812b4,31940a5b,90322dde,4203fa98,bc44e3dc,32a6d56a,284f556,36db7c54,c5f78d5e,1b2608a7)\n,S(a726963a,583167e2,4b8f957e,b3ee9f5,c55df02,9fe1229b,ff8af037,14ca75af,8fd7a984,d68929c0,81154d15,6b6541ff,4a636925,53a5a32d,99f6516d,c08f7449)\n,S(d4c20db4,cf80eb1c,9d93a231,e699a68c,baa763c2,e2013033,8762ac5b,8b99e97c,ba1c77ba,2555a50c,84aa2071,39190a35,f5abc50e,589287a,426c6f9f,6ceca01f)\n,S(7cf9c53,89ae702b,bedb5a55,ad8d0f36,5159ba1d,ac56fafa,fa59efe2,3a748168,ece3b324,338c7bbc,a2cec347,c31348ef,489bee0a,6ea4296f,6ec38502,b72336b8)\n,S(920108e3,c1ebd4af,3979f9c3,326806f,eec92833,b4dbaf49,6992541b,44b73e55,3e22b133,d8adc483,4f03f348,eba48e65,6cf8f478,524f5395,ba92e200,95f466fc)\n,S(1566af8a,98c48762,9b361337,2ad32a53,fc760538,49566a8a,4feb69c4,26479e90,2848c566,4bd72be4,c797db98,62fe1c7b,da5d3ba,eb3f7926,daba8516,da997796)\n,S(a4db5e71,2eb8ceb,c7d7a704,12b0a8b1,d2f6d9be,271ef044,c0f76abc,af61723c,663e16e0,75a73ddd,f604bc0a,27a9407b,272f5f2a,f2b9f6a5,6958c8ca,c42e8ca4)\n,S(d0c9cf53,8bbdb8f9,625d110,6c79cf1b,33d90e77,60778c13,8493bca7,8d53e5fb,b6ecce0e,8b9fd407,cc0a2125,b8bd30c,9975ad88,7dc1bd9,68379063,8a1d9a60)\n,S(765fba92,480f57bd,70596d67,bcf3a389,4a58d514,54e3a04c,e657ce78,ffd8391f,5cb1dbba,1035350e,5a3b552e,3f41ab4c,50879bbd,5f3ae3db,af6ec902,1e18302f)\n,S(9f9da9e8,e846702b,4aaa7b9b,68b652f8,9bd3f88e,5af4a503,2c51ee6f,8bfb4a5e,5dbd499d,7ecf17b0,eb17320c,a0688aca,1d8da08d,d2c0684d,edfa2d7f,5696a0f6)\n,S(af86c83b,db95894b,72fb1a16,61aef5f0,ad949c9c,b465a5bf,b1192022,13fdd3f4,ec06827d,55410119,603d2b25,cc41c26f,4a7bb9,b1b88e55,123f3c12,d799e117)\n,S(fbb48993,2fccbc8d,772b3fc,c80be33b,64c8e3b2,2ccbb09c,d94fa350,fd587e77,f9cdd24,279333da,b3451abd,634075a6,58598ad4,257bbe04,81111b6c,d8c0b858)\n,S(40ecb1a3,ad97c2af,62b15eca,e2adc9c0,621f36f8,90a9269b,ae6edc1e,7ed60684,ff9ec194,fa3a617d,920e3e2b,32301fb9,9a41f4b3,ed9845f2,88daa005,3558b32e)\n,S(31f892f1,c762b42,fcbd9014,bfe0238f,39873c30,c7d3b691,9736009c,18878f52,d9bd5005,f31f7345,53131066,ef6b92c1,5cd610b8,f7d4fff7,be536734,95718c95)\n,S(ba122529,e9f6051e,2d94d150,c5d7739f,921f8193,8cab68f3,1c696fc8,24886c5c,c33c071f,7e9bd539,1b0577d3,37ac9c20,7c02859c,c396bc20,d9c7249a,856b1ed1)\n,S(35316412,9a26d311,c993ecbc,5b9a0263,ef45d993,d58158c5,30c215f,2924cf03,86a620d9,521623bb,9ce3e2d9,c5b6385b,f92ef06f,91834e3f,6a9c6d35,7a3a9742)\n,S(3024770b,e4134aa6,35ece92c,a4ec7f9c,4a4aa7ac,7851b3eb,f9718a21,52c8e462,1fcfafbd,72147afe,16dc1579,ce7384e4,ab3f8faa,f818d225,bbceb050,ffc8c8ee)\n,S(f5ba313d,a40ee86c,5b6dbf16,9941d8e2,533c1ba6,4dd0871a,672d01c8,6bda6564,10a910d,b9697907,c96e95ec,15557649,8f965282,437f58c7,2944bbad,b800647d)\n,S(685e17e2,972ccd05,34f7f426,b18c9518,e485a23e,132c18eb,b33b59c5,7264e2f1,96545b38,be84aac1,a77a3f47,51156daf,470fd42d,dea0fa0c,b930144e,b9f291c6)\n,S(e01285fd,facc9822,a59e1bca,7e91c07d,fdd481dc,61d268e0,504f65d1,9bf119eb,ae82153a,2479daba,ef83615b,a7202b99,40bf5b5e,41c65063,f77d6e5,9dc39909)\n,S(c61e4586,327710ec,784d6720,93201e4,93798a93,7635f220,b5421cb0,55839601,e461fbf5,aa5b64e7,a1e3e016,3ba555ca,5d42fcf1,7433c26d,cdeb8cb2,746c04ea)\n,S(1c427acb,4e5890b6,e24d8ca2,513b61d9,3106fc34,90029af3,be87d65f,1fd192d4,1d96e025,1518528b,9bb04fa6,ec3430a1,84935ad5,ee8ae3e9,c9cec0c4,36cf29d0)\n,S(5e577bfd,6d51897b,4b6ddb3b,a7d470b8,5a932619,b5982f54,431df6f1,f12fd8e7,c1a17292,9734c19d,3a836e90,8a5a7fd0,123cb044,c7ad1ff9,203d4d79,211c6eb4)\n,S(cc78b333,1f968a40,bafaefc8,dfbcadf2,adc6ae76,6d3ea8a6,8173b40a,28237b30,5b7691b2,a5bc068,ff1ef04b,41238cb4,dfc2ce7c,9436f8aa,14eb0a40,45857d42)\n,S(3855c437,487b44f2,9e5dc288,faf3ecea,c445372a,95adc16a,b1830a4,ec919fb6,df2e1e9a,48cbfa28,54fbcd5b,308bdbd5,ed1949f5,e1a39519,11c287c8,289359d2)\n,S(c05233b4,a83356f,c5ffcf6b,97db3d6c,dc62cb21,b7de7c92,8f158466,b9d16b19,b1bda39,ce78847,3fa0eac6,51e8de54,956616f5,16233275,25ee3bf7,9e54f500)\n,S(6c064d3c,f34226a7,d9a00024,5901f355,b736c1e,6561810b,455e7dec,99dfffb,160d9442,d25ec1a1,f80f8fd2,a1c5c42e,aa544477,28d242e9,925824cd,609eb9a7)\n,S(9658eb89,70bb1aa5,1b61a93a,de6a7d,b3e20772,4789d009,bf37ba9d,8b714cf2,cd4ba4af,f7da8f8b,7821a903,f40d89e0,96be8949,997d5ff7,a58301ea,92c51cc2)\n,S(6e023910,a5546f70,91f2b0c4,c3f996f7,5cf1f969,a71c31b8,7a3e7ea6,4bb4f0c8,f6ed65d7,90ec734d,d9ed8cfc,7d8921b8,7faa9b36,651c3589,99b9addb,34c459c5)\n,S(3a35ac98,e9700499,f903528e,330537f,9262901b,d60c7a14,1e68f899,54c7ff6e,913d9516,da631c30,5394ac0c,9eda3824,1f247ff8,a7644eb6,c4d38da1,972069ed)\n,S(d089fa51,15dfaa45,a8b6def3,b1948be,2317c66f,249763db,7350e57,76af212,4e6ae973,f326fac4,77a5120c,f3ffa113,a18e5dac,4a190f6a,b12fdc83,18a6da9c)\n,S(e733c52f,2aa62ab4,748ea0f2,33d9531c,5b9cd9d5,f790b6ab,45bb2c2,d8cf2ef,701155c9,3c677293,acb23ab2,8d7ff753,36ac4885,70c52d89,fb80ddf1,d582a291)\n,S(4b6f7b7d,c006684f,e64aa6f2,42babf86,1eb4770b,b8195b9b,e8caf763,e7f14c7a,6c58b780,ac757b33,c1805d8,a53a04c9,7bfaea05,d8f21d5a,2b0645eb,2194e00d)\n,S(1b520402,cd1fac0a,c4d7aeb,8c552e73,44ff51c2,3b4778b4,81126e5f,e267f79d,8ee0d00,56649304,a0c4ee94,39add4d8,30b252f1,93d93c1,9e8ec375,37db1a39)\n,S(8936e6d5,d7f1ed85,fc2da4c6,38a885e6,3400cc3f,43d864f5,bf9af2be,b97139b1,29812a20,b4b932a3,770cdc8a,6fd32625,8879f217,a5bd7c47,78d2b041,829b402b)\n,S(6808ae7f,4813554d,aa36c043,a55d9171,aebd396f,5ba1a1ee,c4f11045,c96b518f,6afcae6e,88728ddc,578e85fd,5f41575c,f581b983,7c749c22,31b993a5,9c425810)\n,S(586c6694,44c73f66,1211bba7,601d8009,93e23293,55a9b10f,2367924a,35a2cd1c,74b0901f,f6eba3cb,408f5507,d37cb7c7,873537dd,ef0671c8,862012ac,fe5416c7)\n,S(789c825d,deadf1e0,4c788453,e918541e,b183aa5,99ccc66b,7897be8,1ff89e11,8106aa6f,641bb13c,6be7480b,89f98a9b,e40cc357,ffe9903c,b8f78938,e46cb5ab)\n,S(d7ab80bb,fd26faa6,620d0ddf,97f64bca,e520426e,e1d8e076,acd7cfbe,a9419797,26af9f72,a6d1b103,aef4a85f,5139d14e,6e50a58b,9f32eefb,c7184537,90c5a823)\n,S(18f712d4,4daf1ab8,4612b311,b1ebc418,bddf0f33,ca02b315,4c256d2f,36f67f7f,c40b1950,f92fd4ce,edb3c3f4,34ff7bf8,6b06d8d3,215d3ee9,f2d9bda6,77d25bc)\n,S(8873276d,9f6d188f,78e2a7cb,f998bcc6,fc399d32,21de85b3,eb9e6ea6,c7e5a06e,297e8137,8ee9b9e8,ee820a3a,7e566178,dac97743,c04b6b4e,54a7081,e7c9e1a6)\n,S(101b8101,5bd217eb,c08f57cd,fdf431cc,30fadd66,4df79157,1452ca66,c688e0ad,fa6c1b2f,ad203831,185816d4,a8f8dc9,4c7542b4,6c94dab3,39b73718,5d179e6a)\n,S(77b3c157,76c31460,11e520a8,cb2071fb,abe3b3ca,2984bb6c,d81d4c53,7f42dd57,8d0bceb1,dab601b7,1c084c9b,443ef5ac,40cce5d,14f0c244,92589905,fc4a645a)\n,S(151f2d52,56ac60b6,ff7aca33,8ba66f12,fbe2c189,33c805d3,ecf6a6a0,fddaec7a,d2aacd77,10cd4bf9,917038d6,49e94235,c4833c88,9cd57ea6,74ece9f0,764f62d6)\n,S(dd75cf27,f41e417b,46338dbe,24b46df8,9508811c,111bd1a2,29a3809,171d32c7,e328b855,a3389b80,4ab03c33,cc91d86c,ee22170c,d8fb53dd,46c32224,19b67be5)\n,S(faa1feb,bdd1d9c4,9de366ab,3f661b1e,6a3f6b76,335b428a,494d7eee,791d7a83,df361d4f,8fce02ab,8c248ee5,61e46555,948bb29d,81a569c4,13b5713d,b825d572)\n,S(3cc10dbe,5bc2bb31,fddee65b,66789594,a4cadadf,8c6a7545,671dafed,4d8f8be5,802d45ef,8c66ad6f,e692a3a,9d42c974,7101120a,ea42510d,bc08e657,7039c2df)\n,S(9544e725,325dec1c,914dee7f,752802e1,856cc485,35e3a1e,af576bec,a7b93ba2,cec7dba6,81513c04,ebf39b03,717338cc,aaf137dd,e5087686,aad83115,deeeeb49)\n,S(94a0fbdc,d5d06236,7b17ff8b,4dcdf6c1,54eec66e,2779deac,38be37c,9f83a964,f25f34fd,5ef06c81,b7223e16,9a42e2e3,fea74213,5a2a30e5,76f29ef4,cfefe82a)\n,S(989e29b2,c3fc7e2f,695fbd4b,f217ba43,14f67c3b,9f77633,100e84b3,c6b579c7,608a6d28,cd00297,2b4f3e9,917daaf9,ed003a43,1c22771,17250efd,b621c888)\n,S(c38c5fc4,4295a59d,3b0e979b,5934ac2,49b4bd5c,e94097f1,c81064bf,73494a5,16240bf6,d354b36a,648e471a,e0ebc167,1d1dbc71,7cbeeecb,7600462d,61d1e2fb)\n,S(de9cf667,35c4046c,58b41d8c,5c658efa,7dc656b,7ad877e1,546c138f,fa7a63b,2fc2824f,ba9162e3,e2372927,5448010b,ecc19de7,d9b94cb7,57586de3,506639ac)\n,S(24cfd37,e56708b5,79d84b3,88c33c9f,f1dd9e08,4675a3c4,c8c440c0,f6c06522,1cbcc8ea,9820157,b4b4d289,55ac8672,1aee676a,cdb7df00,7383ac79,c42af897)\n,S(9d6e3108,6ad8b9b6,2f4414a9,5e091e9d,2b275d8f,62641ed7,26421639,e87cc121,b924700a,6792a67d,4dab59ad,5a743cf0,43c46ab4,de751bca,757979b6,ead3abe0)\n,S(52a89ae,28b28395,739c21e5,38ed38df,74aea22d,d2765d38,673be080,8609354d,c183ed57,9b65830b,d37cccd2,76b2f61,469b06d5,987b5708,89c5b1e,d8334e51)\n,S(2ffd3272,491d1807,243f5d31,d727caf5,cda3bf8c,2c172550,46bd3420,da27571d,812e8fbd,6f38b334,a31e48be,6deaef58,599934b5,d3419d52,131cc9a6,535b6ad5)\n,S(5d60c609,4269a43a,35e51b66,db193b16,65df689c,270662f2,eba959c5,9c973fca,f591324f,d1afd619,2b31bb7e,3f40cd40,6d3b9285,969c448a,3aff1f48,850efadc)\n,S(23e0c40a,bfe53353,f4426340,e1c1b560,4c86daf9,85784d0a,e6da6b4b,3d12ff75,e90844b5,fc86092a,91baf68,280ca144,f19d5a79,9bacf827,f9921511,28191d9d)\n,S(945818ab,5d4a1c12,ca6f20d7,7f37da80,50e67d79,30bd2bb1,155885ce,7c6094f6,b5f2c1d0,e2f9ae6d,aa669c96,9ededb60,32ca8163,fafcbb6f,9a11cd56,4a695e03)\n,S(d1f4db7d,2586bf6a,187a469c,a0cd7bcd,5043be5d,6206d24b,c41ecd8f,d8724c8c,64054f82,77c4774b,bd480ce9,b2929c66,b1525eab,1c6f365,a1ca5ace,12206839)\n,S(4f5c4d4f,24586e9c,1a85f2d5,b42a3d11,158b4f2a,5cf75e18,60f7f4ec,ec14a18d,57576e71,6d547960,6953be2b,e7ffbec2,1e48bb9e,970fb350,986b4a31,b0efdbe5)\n,S(c13b605b,dcb31443,d8a3cf5c,5e4f903d,3f8edfc5,1e9a118,c3840cb9,4998150a,8dce2eaf,99f1fbf5,2e62a8ea,948b01c0,6c368e49,f41922b5,2f603cb2,16cb8435)\n,S(1937b32a,b66f254e,4964a5b5,a1ceeb5b,a3df2466,e2669753,39174cd0,2429cbb6,9712b0a0,6f1b075c,bbceabb0,53fffb1b,181e079,813e022b,b5701738,ef2e385)\n,S(e4a5333f,2f1772f3,84ef386,c3be1f58,d757bbdb,7ad2c4d7,47e61b07,419ba2e4,e84f7da7,2ec2e4b9,389b717,8bc15642,132571cc,9bc14c7c,5af14a7a,cb6b6f56)\n,S(2f8a38b0,a3f42a8c,5080a0cf,5cc1085d,d57a8341,ae154dcf,fc7fdb4b,5606cca6,8764c6a5,2c301db6,56408d9c,4eed6294,2fa2a72e,1b1264f1,134f38c6,8e4681c1)\n,S(3d2bdc2,c51c2d77,b6c585b6,3ceab5fe,acd14599,b841870b,8735712a,81a55ff7,33f749ad,bbe263df,a99a808f,f0476e44,92246036,a3e8b5e9,496b8dcd,b6d3e9e0)\n,S(fc87f808,d6764ce3,376b9acf,62bfa3e2,1ecec215,22dbdb3e,6e5f3cc1,efab7d3a,ce75eb03,c1f4f937,70815dd8,750a4ac1,c0343024,ce1bc581,717cb971,2835176a)\n,S(7f81b85c,62dee11e,be8885dc,cc98485,32354952,1c7e6cb4,374270bf,5b1e68d5,b7adef7d,6a84db61,c15ba062,d96cf739,1750aa4a,ed5c97f3,ad70d2a7,6a9c4558)\n,S(d618d43f,7afd3ae5,e8dd8f47,f62ef91e,33cc8f89,3c21688c,8268b903,e1fd5557,6180817b,c8ab9b0,82b21267,9900c7e4,42ce9e8d,fc8c3fb4,fc5bcaa6,e0cd34b8)\n,S(ba5a4c4f,f2379b06,daff540f,c8383b9b,694430bc,df76c931,ccf94cb,896e4940,3a221d1a,b138e6f,4ed309b2,4f2e9333,25299de5,534a528d,b91075a8,fd07b1f2)\n,S(c69189b6,bee3746,88359141,5b35bac3,80136395,c83098ab,cec29fa3,18cfdf56,a185dbc2,b862da3a,cdc232fa,7e3407b1,9795e61e,29b7a79c,5828bd49,d739268c)\n,S(51f67d44,32fb401,ab863423,b99d403a,70dffd86,87e5ad71,bcd3732c,1cefae12,88b17485,a2c404a3,2bcae68a,3cbf2166,403e23f,8a64df5c,a8eb2d94,61e10e59)\n,S(cdacfe09,e5585f8d,4346fb69,a94b8b65,6001e117,ed3cca36,fa8bee6d,eb7c4bd5,ddf1bc5a,993131d0,15812176,206699d7,af5fc403,59455ece,fdb84492,6e028542)\n,S(8129e771,e1fce476,9c701d70,cce90888,481eaaa1,d1661be3,19f33c93,8bf0e769,3eb5713d,a864bc56,39ed8b6f,974966af,8a4db189,b5446d70,d40a816,f045c6e2)\n,S(b97062ef,6d415bc0,f302fc0f,8aa730d4,f39c14aa,f82889ad,a68132bf,5abce3ab,8ad70688,cd76c93c,fd8dfdd3,8522247c,6644c9e5,51116829,490f313,d53db3a6)\n,S(19c3c98b,4e811b5f,ea5d6af8,c4e86be6,50de67ec,5154bca4,22a6a14f,4f0bd913,bc523f96,48bdc993,30e1b5c7,385097cb,c18b9d5e,924767bd,d5d746fa,a190a109)\n,S(b9ef34c7,3616ee74,b1ebe43f,889118e2,ad7697b,efe63559,67a9b3c2,b5b42b9c,12f1cddd,d55b1ac1,b89be271,5e623952,e8dc05aa,3570e254,3b70ea68,5b661bea)\n,S(7718e34f,58e2cdb5,80f9c39a,96d84dc7,59dd2a3e,bdebaca8,6e8edb97,f503c34a,a6d105fb,dc0841b8,12dcd8f9,6c4bd17d,cf5e3728,8e0e3093,13567b10,3e96df7)\n,S(dab3884b,8e6de737,63bba89b,8d35a369,e259c1b1,8afb6ed6,21fcc871,c77e8dba,f44b6f29,c59a2d42,2babd4b5,edb4a009,c9316e09,2aef953e,e503a278,14a11577)\n,S(cb3d0e10,1139782d,e5e6a897,8b5be6df,a6736751,e847ca18,76aedab1,e67f4366,27fe888d,d227943e,67969b33,be48f1d9,572aff67,69c150cf,189f9709,bd57d3ea)\n,S(eb1b1ff8,55619d41,8d193db,bf62b4b7,656ea564,6ea2e79f,cca7fb3b,e8c3c6a0,c27fa0c7,5b73d5c1,d7113741,40384565,d36ae93a,49b327a5,cedd03c9,62282ea4)\n,S(5d5079e6,bc40f11,f75a1117,3ab6bdc,bee8f9f3,d2e57aeb,58709786,1c39c5dd,14ae112b,a40db9d5,dd65829b,4be7bdf9,4d8435de,1872bab,80581221,446e46d0)\n,S(1060ef7,6beb6af0,6d28acd2,6b214bb1,b708098d,e0300502,384fcc0a,a1a7b38e,ce40f39f,f6c6c642,9585464d,aa2183d7,34252c05,5207e2e2,75d0ec48,c3bdf9a3)\n,S(9651c463,c001f731,8947c271,ac274529,e7bcc894,70d63e1a,fd723873,aa170695,4e362e7f,e8ff06da,73d6d17f,e8b63c99,3b16ba7a,5a9b154d,21837fb0,e654eaf7)\n,S(5c422b76,592821b4,2f6822cd,cb428b19,895cda4c,d224400e,e0928f27,1f363dcc,2fdb4f4f,9e4c77ca,3448258f,f6c07f5,4cb6b4d8,15281484,44e5fcf6,492b9400)\n,S(db147d2b,5d98250d,73a3ce51,9452cc4a,ab3868a6,cd4f43d2,b7224d93,a9faba2c,73254380,ad3c6acd,fa343227,a7299684,9fdebffe,64c4925,8a391a7a,50ed0de)\n,S(9a6763a0,f97abfd1,65223767,8881e899,e1beca26,ed84d384,a41d16cb,e5454b4c,bb51407d,b6aa5817,32f1a3d5,51082908,e7952f75,92c8bcb2,737a01d3,3890306a)\n,S(36fe7933,e9108af4,f4e5c889,ef94f584,7b45a9e,8c520000,7db6a00,e5daea8,d024a5ba,ecdd5a21,c8c3a0f4,a71e15c3,1943c7bb,66b459e2,7fc85bb4,25227ee5)\n,S(40dae663,f04f7e68,ce782fb,87529681,44c749ea,5b7386af,c445568a,3bc784e7,49a463fd,ac6bcdd0,2458c85,423cf252,cea2ab47,44b16bb9,47811176,5755050b)\n,S(ba1616d,c8fff3b0,8e8c6d10,b15afd9d,da55faba,79fa8a75,42c5c9cb,adc5b8d1,ef096c42,a6233c66,1965a3ac,eca095b2,7710455e,5f0e1019,7641ab25,b0a786ff)\n,S(30486f67,23a54952,4d68c948,dbc71273,d69b4a05,5fb9e7d,a702d027,619c4a66,38ca4d4d,279ec9c0,85ea6369,5470a4b9,fd6acc6d,9a049ab6,5743ecba,c2444c76)\n,S(1b83ee94,95ead1d5,80f67174,dec2a026,d6accd93,9a89d970,90f25bc8,d9e6932a,196d448,fb5e4851,e1b73d6d,a2e7d0eb,3d263034,9c2b3e0e,34584bc1,d6e20196)\n,S(4ea9dc2e,edfa5a11,2fa76671,5c1579d9,328b6132,14ee64f,2e30f10c,b7517396,7414efc9,6ef83e29,5883f0b1,4019b41c,d4a192d9,d06cac9c,21e8f0f5,b06e50c2)\n,S(4166c19d,bee9ad08,83b217aa,3b657436,87677792,d5cb9b31,1a097fcd,2eb033da,62c5065c,5fae6aa6,932b4d29,ab375ac6,b80e113f,d38d81f8,abc236eb,7eed541c)\n,S(b17567eb,b112f54a,69c511a8,7d3d2f96,bbbc6686,af8e3f31,a2bbe0a,85a74899,f6676341,3788be54,ae3fc693,4b8936df,a6936721,c671cbb1,bdbfd72d,4c9f52c2)\n,S(cd2b6515,2ab97f34,89d81fd,f3513131,a6df0685,5022102,12c2b8a9,be8095a5,cfe7952f,9ca41935,15ee40c7,2d44d023,22afff84,b8700bb4,5f492e31,e78f6a53)\n,S(375603c4,9f33140a,3241a72,907ac0c7,2086c979,3aeaf74a,44732097,3618229f,7bb740f6,6322a773,e11ddb46,300975db,de08ba13,84480699,6681637b,eb85e837)\n,S(102067d4,390a3dd9,6d83c176,f341dde9,7e10955d,2e001632,978f202e,efbb7432,7cf6cfd5,4d28ccc3,a7019f11,b6ba9df6,1d8b7eef,7e70722d,afa81a2f,839ba83e)\n,S(47617e73,e3fbc53b,a703042c,f8b48fad,374ef42f,e8c2dd54,4fb7625c,de63081d,1fa4f423,c92a95b,b2c40f07,f43caaff,50cbae67,87c3e2a0,e4782f39,c1d439e8)\n,S(2c431baf,57f75062,9f57aac0,8e28a060,46b814bd,318d74ca,82e1174e,f880f84,ddb9e7bc,68574b32,c1004108,9853f41e,62755a52,ac58badb,b8ee58c6,f209de50)\n,S(91963643,8143b6e4,19b86b1f,79b708ab,3f4df44b,d774b41,338570dd,8343d599,9034ee17,7171a0d2,9fb91d68,26b87bbc,21be334,90f44049,69622a8b,76312f0d)\n,S(bf28c201,af656c7b,838d42db,95683b06,2871859,2b016ddd,a4a4f7f7,c4b7754e,bbd4f04,dda510d2,a8a66c2f,46ab0681,ce6ffb5a,ac320e20,c50b6df3,a345d109)\n,S(fcac7386,21825f4,4e1d531b,f598e40b,1aa4262c,a5aeb5a1,babb4f35,9518b137,3b196b7a,957bbea1,f3f2d1e4,1ba37eef,7dcca7fe,87e7c593,6ffff685,52e67b64)\n,S(9cfea1df,caaee192,141f0278,e467f809,8ad89cc9,b47ed982,3029c1dd,726e9331,72d81e4e,7f30ee05,8fd0b646,95086e30,96a071c1,5b75df47,b10146b,18db211d)\n,S(548d3f42,123553c7,965c7f21,f2802c30,455c5151,99b98e20,1e966f34,6a1334da,612ea25,cebb03d2,89538eeb,15b94686,8c0afb1,311278a,42694a0e,956418ae)\n,S(e5be619a,ccf84c26,9b5c545,e8c4990e,ebd46756,c628de22,a6c8bdd6,74295bc0,640864a5,7d841af7,ad83aa74,fa858b91,89e246cf,9b361837,a742e2a0,71b08bf3)\n,S(b560933e,3400ed4a,eea8f733,d2368c8f,a260460d,f734e209,e194e9ae,a1ac668f,5438f93d,31337853,9feab182,6cf17bbc,ac0975f4,de29a886,1b1c0c02,2c5f9da3)\n,S(21dd9a97,baca3e79,77ecf7d,d74433fd,dedf2d96,8c3153c0,2c652aa2,1ccf60b1,de6e60e0,e048b0b7,b699bbd7,cda0c0c9,b851c4cd,34f4b8d9,17c07cd0,2684797e)\n,S(5cfa560c,6d39439b,4c9b0a52,f9bda301,2f147874,48c9ff37,bcaf2900,fd934bbd,c7927a63,cc1959b,f3556998,ce936f29,29d5a5d3,3f0dda32,35affab9,a5b11b06)\n,S(4a3b95bb,5adcd41,5036204b,394fcc95,6377afe7,b4902f49,461c4b6,866d4fc6,d59e3ee2,f1bd1e4c,c089179a,4db9387d,8d6be47b,df708023,2a0d00af,a8e84f2f)\n,S(cc49a313,b4c69c9,13c06b7b,add06f17,404edb0a,dcdb3d4a,81c4b765,35f4671f,4bd722ec,c35e525e,af36c194,3d375592,ba483715,2c7a91b2,4dd57a89,687bc278)\n,S(9d75085a,7426a69d,9ccf4f90,d8b4ee0,e07fdac0,18df3d37,40b264cc,d4146d98,5991253,de04b32d,4772f44,de49467d,ce174ae9,3f941ae6,a4f6e3c2,2cc4b0a9)\n,S(dfd064df,737bdadd,2eb12cf5,d9f1e192,caa87c0e,fad20d18,b95b0d06,83210fb8,519f883d,a5bf8d33,50b1d2b,89012fd5,9f317299,3eae1226,13d81b92,9103805a)\n,S(2b50a35c,d2356c35,d609013e,a66318bc,1cf20582,685c12e3,bf618102,807eaf9a,7d0b51d,303aeefe,b81f5a77,d9b5829e,fdf4241e,435380f6,ce74abab,1dc76335)\n,S(e26e8f4b,2cf175e7,c76e2a59,459cd45e,f3202f3,3027f0c3,70481fa8,685abbc7,4c82e7ba,aa0d5161,53076702,997c34dd,716e5fe2,460eac0f,194f72fc,3ac2013a)\n,S(5903db7d,54f4d857,6a584057,ce78dc07,1fd90e51,f825c959,b46d3483,5d0f87fb,c55e2fd3,e9ce119e,47c00332,9d18d6f7,febf9440,a18de0f3,81608011,1e9e99c8)\n,S(4bbb0ecd,342a82d,c8b881e9,635241b6,1040e6ee,28b98204,fde953d4,4d25e9c1,12eb090,f3445b7,52abee8d,604e8784,82e97e9,b44d2335,8211a8c8,2cb0ef04)\n,S(4a2455a,ae87bf97,c6e6eb38,fd3279e2,7029967d,41b9575b,647550f9,4bc4e8d2,5a340ac4,ffe3bee6,2d52bea1,e276178f,9af3422,f9c61c47,4a595550,73936074)\n,S(f086d68d,c8ca19aa,54c329c4,c07b530f,94470abd,dce244ad,1decaf87,53477623,911c49d3,84a16af1,65be4161,cc4869ab,4d9e8ba2,808afd80,20d30971,b4bdbd08)\n,S(4f1b177e,83b76c4e,24a53f91,2095f1b5,d4b7cdf7,29788cb4,c989f921,b7ba856c,a5568c4e,b060909a,fc3dc2ff,5bb9534b,99debb69,dc0b811,e1044705,7d80eaf2)\n,S(eba87899,29a7e45a,23d2fcbc,884778d,c4fb5ae7,fa67954c,76534303,97db5823,e6f8c729,b3570917,9fc46b4,7f03af9e,801b26a6,1724aafe,e730217a,2dcbf68f)\n,S(df117b13,34c9a5a7,92d58084,4444559f,130ee539,89cc6e7d,87723b63,a82282c2,dd87ca57,8eea3c51,2aec5492,ea55111c,1a2fc55d,4e2335a8,c9be5641,516f7120)\n,S(d775543b,3e68ab88,36eaa1b,df5f6a06,1f5768e4,baa01a68,621321c6,e6ee82c5,70221b05,47c97398,3cee7a26,c4197f9c,27a2bf46,10506e18,493a9ee,1881436e)\n,S(a7f10dd5,5a231ae5,abc5c611,68cd58ca,5e006f7f,fdf064c7,1482febf,4578515d,492a33a7,b66b9694,e225eb38,d1d99399,b2c24af2,d69c31e,b4797a9e,703c13b0)\n,S(c79545ef,3119abd9,11336c86,c6b74846,801c6b3,812da05b,5d36e9c,620120ec,24c8fcdb,95b6eae4,51473f8e,f7dea06c,738a33c4,f1214382,bd7204dd,d3c28718)\n,S(98bab5e,744f888f,5f843ba2,9e2104a3,afa14dd6,6a2206ec,8e783e0c,52c2cb11,83b5699f,e5e87ed8,c51d929b,8146bcd6,a7abaed4,636afcbe,b2c30d2,bcb94df6)\n,S(6dce2828,7b6fa44a,c8213053,d39dfff5,60d84a84,ac264110,547752ef,dcac586e,1e1eb62a,b9d60cc4,5ab2fa8d,d065d1a4,c79be399,53578a5c,adcfc629,e237ed66)\n,S(e386a59,287a73c9,306b091b,5b24ad8f,db06a9dd,8f6f0c1,b7fb0ace,623dfa83,4a7e73da,663b64a5,e624ce89,9e16fcd5,c0d3b221,42284ed6,852960a9,d05b34e6)\n,S(8fdff782,e62fbe31,98c283fc,9b9543ac,cea0a318,2626d180,4beaa27,ea4fe4d5,fef8f471,9fe0d95b,673ed650,8107e887,a4f5301f,4317c708,c5222d2a,ac086675)\n,S(4c9093ae,7842b148,1bbb8b8,4ea564e9,36ed1cc4,35c89089,a10e0442,292eaa37,2d683334,93d245fa,e5ac0903,fe9356f7,8642362b,f85a7426,ea2950a0,a65298dd)\n,S(cc0634c5,5c5c52a9,d92b80f9,be072a35,56318c6,fd76cf2f,e866d5ba,33103a1b,750b7d41,b13cb69e,6d236eb0,87fc8600,4004aa77,1b699e88,7e8f0b08,d07f0b32)\n,S(9749a673,41fa7ac5,8bd33f5f,9cca4ad9,1d53c7ec,cff76656,9a56f71e,3b918255,b685f1c1,9dc7d6,7692a2aa,fe37d9da,5e68fd69,cfa58d87,ec6ced8,68916068)\n,S(b04abcef,b57862f2,5a57fdc,b7da0b1b,a25bd253,72bd91bc,9e0377b4,697d8e75,50479a64,66ad4be3,489b5869,d8b9bbe,62dcb8af,da8e7d42,78b5014a,19e168f6)\n,S(d11f7de8,5481fbed,f1a3b395,785f00d6,295059b7,c8049768,22624e85,45c78902,1d163368,be0c1290,1a7369d8,11266982,b48928cb,448039c3,17333658,6f5c3416)\n,S(a21c65f4,65c4c7a4,93225af,73b63cb2,fd615160,b29b2b90,970b880b,5756fd4b,69a26b89,394de60e,7dde3476,7048a295,57f1e3e2,5f7a586c,7666aa30,9345ecfe)\n,S(53c626fb,b080360e,9243d399,9a58ced0,36ccda8b,186c76a4,fdeefee1,6a497a1f,ad926008,62a7ff1e,519106fb,933616a8,8264d7a,c40476bb,eda7e1b7,742ac9b7)\n,S(cf67b587,1b2a3ad8,d0364fcc,8741f10a,11d96933,11b72870,60116c4e,74e6ff0e,2c963b7c,10ccd74e,f68ac068,cce1e30a,7be6537f,259abcae,6d36d29d,22b68422)\n,S(50216d8,8cc8700,29da89a4,b34cde0d,36428829,de9f58d7,31ecd6a6,c90b4bc7,920c1df0,96bc4891,8defce32,2a512d5a,36f65d7e,65525e0c,123d9fa7,49e38b21)\n,S(1d845594,f4686fbb,7b0cc62d,af790aff,3d6000bd,e26ec1a2,67766c3d,93d1aef3,eae11ba6,bd9dda02,ef134035,1847dc6c,92450b36,cd6a9734,25c09f9f,3134d260)\n,S(11ad4f50,b6c5b97d,767d590,859e2ab5,2e7750a5,6f7e70c3,d5c52bb7,9e4785e1,2c2bba36,8725d9c5,2152496,f14cfa71,1826e846,fbf7e7ac,4e263db5,a8023b94)\n,S(3568d27c,d72373e1,29a4a519,86082a1f,f76ee425,969d6e3d,12b242b0,bd49388c,e36dfa9,6d094047,16e35668,10a8e57,8eff108d,839cf3da,f04c76d5,8754fdb3)\n,S(3772ab35,45e09d0c,5d2abb91,97007742,46310f72,bdc0b8ab,afaa2c17,f17801d7,25229a8c,eae0c746,2d7a50cd,a8b012e0,775693af,8edb7260,5340042,a78884e)\n,S(8151b24f,72c4701a,e4624779,c8b93ad2,44f3b299,d1ee131f,a13054e5,c29274f2,58938307,25ffd619,de73fca0,50c28d77,73420724,4d2e4c99,86ed5512,b8bb6429)\n,S(46a4855a,d4101f8c,60c59705,e537080,1b57a81d,9227f4c8,69234946,5d539c9a,8fa66dcf,21117195,e2c117ae,e2f20bb,9517ad24,5fea8864,beed3e68,89e36b59)\n,S(b81bd54,3e654f3d,eec15001,c38bd2a4,efa7c45f,4ece2d4f,fd893c6,15803d16,15c3f7aa,31299a76,34431622,8f93b6a3,2b3947fe,5a894c4a,75d2ba01,4e9d3e75)\n,S(3e169a1c,f2a0324d,2478c054,94d58801,423f10f2,4cfc9fab,a5cd5cad,12e7706,20405bdd,d814ac7c,53469075,a700b4bf,4d454b,fca920f9,86923562,19389135)\n,S(74283e4a,b161b33f,f67a1b8,cde619bf,557f39b8,5443efdf,534bdd2d,4da65956,22296be2,89785c04,6773ad2b,c881744d,380c1717,1c77b159,bfee3689,d0b3df3a)\n,S(62715786,cb76bc9f,b65da0a2,3b7954e6,1a617fb4,de828092,bde3da39,ea6b756e,3c27bbe3,8829a150,3b563337,bf995110,eec54d58,21e1f17d,34a5fd90,52c2db32)\n,S(96200105,db23b893,84336bc9,d5596740,2c93aee2,ca35df73,9c55a000,6f7c8aae,3192968d,400a2604,c80307c5,d9865f49,ea41cdd8,e3fd3b19,a2bdfa17,84a6ba26)\n,S(bd477798,bd2691b0,8cc52fb5,cbf8b2c5,31787535,541b5c31,3aad9696,b71d13fb,be2b51c9,a4ab0033,c21dae50,c4e7b2b,51978b39,4a66d50b,6be7e140,abddfc3b)\n,S(fa149388,e46ff849,bb5490e8,3aac6788,70da101a,f52dab05,9039c305,475289e7,8455577f,a8d85674,3b32080a,dcd26a1e,c75af3d1,c184d5e3,7f22030b,8867b2a7)\n,S(4228db83,af1ffb1,d4bbfae7,3781a70a,8ab50d3c,47200e86,ff436ae0,3391ba90,45db1d0a,b0e6f0a1,801560b6,419bd2e3,2413ddc9,4b4ad637,d4071d8c,b7a270a7)\n,S(a97ab279,fe0df5a0,3d494c02,eb69c686,1dc3a39a,fca2bd49,f4161ff3,817c85c,5006c8bf,f128de17,3d72f99f,7cd6deec,5d4b7441,6b1ca290,e535c8d,c59bec7d)\n,S(c0d46c57,6bdcc661,4e1a3a1c,c19fba37,9f27dc45,5135eb63,f8d44666,904c668f,396b60a3,b28b250,2c97d7cc,f93c7609,3d19172f,47fffa71,f190936d,cb215f58)\n,S(73c5d7e0,4599fa7d,e09b8c2c,25c5bca2,b7ae4c6,e1b88e63,6de3363f,b1a8dbbd,1d9ed08d,558bd642,9e986b0,c431d67,9229adf,6fa8dea3,faf17da2,747bc617)\n,S(370481d,a2ef4843,8d897c6e,f1a01750,b4788c65,62ad3ab7,bbf3c89e,e24827a7,a88b3876,c2051901,1d84acc3,3000f0f1,ccf794b4,5385aaaa,190e435c,760fa7b1)\n,S(2dcbe303,3006f0a4,99dbb7d8,d34790be,f2b68cbf,649b9d54,eda8819d,637807ec,b82b46e3,c7ab329e,b915de2d,f3fa28d6,92cf43d,584f9bda,5d6f58f7,1a90c1e1)\n,S(f45f3ca9,16db45c5,de35d957,c24f7a59,44052b64,f8f423c9,8a442f6,17bb4b7,79ddf02f,b3154d6c,da1d6a79,5c64de61,5b4a0ff7,810bbfc1,dad68e60,229b5a96)\n,S(500caa8b,cad0567a,465c99bc,c4802553,ee17346b,e3a9ae93,4fe7e95d,e787605e,40847ed0,75dfc8d6,ae19dccf,73ddd256,4e1beea4,7f822a58,f0570c62,f238370a)\n,S(30562986,a23962c5,5b746191,e23b893b,7bcd8b87,6fa85557,c525eec4,d64c3aff,2d5abe,41c45383,1b60c034,7bb55464,e19d8d98,8a5d5fe9,37337507,80577a53)\n,S(f687d51a,32526b72,9ed3f690,be1e6205,ec72382b,6a30478f,63a18e0e,b48e422e,efce1b35,19c94f7a,fc54da2e,d36b15bc,f197e2ce,a0c2d680,211e12ab,7d515704)\n,S(104a63f0,d385351c,c9ce207e,500ae7eb,22199ea7,dea65018,472884cf,a1ca505d,69c21887,50b20b3c,5af1600a,a2a2edc,a6de0be9,33d2e67c,e05ac4a8,30239cc5)\n,S(50966099,4b7b8ca1,abf963e2,ff4d295a,eb3d59bd,43029c03,5e6ac9a3,ea80fc6e,d48589cd,40d019b1,81211674,854aea3e,56be56a7,bc8ae519,72963adf,327287b1)\n,S(3106d6e7,94e5e135,1d788e85,eb0f2c7c,7ac22e9f,d1c86a0d,d22cf88f,54513c95,c05e593c,4568cc2,992849d8,4006ae18,4ad2888c,82ce8dfa,dbf984bd,2fa2bca0)\n,S(4c967d1c,9977bdce,84f76ac7,13b9e5cf,d1081b43,de681235,e7914f6e,2059fdce,866470b2,a3e99b74,15c2cb09,83a5c7dc,fcc10d02,a28e90ee,206be515,e88968cd)\n,S(96319099,ae8d7741,1d8bbb7f,bf58f62d,b4027b02,ff5e32b2,e4aff910,3a781a52,6c110074,daf2849,a3b148f8,dbba2f0b,d776eb4d,b787ced4,22edc5f5,67947389)\n,S(7c93bb23,87a36cea,9dd7406d,95af56f2,b972242b,759728b3,bdf30fa3,58247ee7,21e4de98,33487c86,6da01e16,895a0e24,17cb34f6,e3d64e01,8f7c4d99,9e989942)\n,S(c65e4a03,88de1618,6d9db143,387a3229,c764dabb,7c6ddcdd,c3ba9195,7f1e074,d586d143,8005b28,cea25a45,7c45c1fa,2137bc2,fd78417b,daa499bb,cfca658b)\n,S(d895a924,90c28692,bcda380c,71d8d1b8,381b1fb1,a8108f35,4d9a17d8,64d674d5,d30bda25,a63013f,79ef5728,dbbcd259,c7cf2ba2,b00af73d,9804f758,7fde17f5)\n,S(90467c3a,5b36b9bb,faffa164,63d1f70,c892e23a,3c7f1132,27bff1e1,5fdef988,4ec70191,40247d9b,3cfccb41,ba22ad76,20522577,1e33d568,946c8081,ea9b15a7)\n,S(5cd03d63,d0e025a,7af268f7,8f53efc7,b4d38e5d,58da5981,abcad74,3e294c7e,c3729f6e,5517d41c,ab1510cf,ee4e0e48,f168e043,34dd8781,1a10b70f,b42dfb3e)\n,S(5130c49c,652bc5ce,a3dd7629,bf362294,8bf69c02,f9806988,fc700a25,c7e964b,7e46e219,4bc9dbd3,99f98c7,b7a44313,a027ef23,1abe336b,7381c215,6f2cf563)\n,S(95899c2a,33b8d4e9,13947306,6b924812,261a3155,e5a7ddbc,c5447796,8edd34da,8967be99,84240292,9ea7277b,5be0d045,bac79fb4,93a08a41,d4dc5991,da6b7cb3)\n,S(3928013,8cb3e93f,7c4650c8,8184dfcf,6e55d238,2e75e604,9dd6e40e,f489745f,70b25e98,b897f3a1,c89bd6d4,72f2555a,56bdf04,6fb43799,58709471,f8006a52)\n,S(a47e1331,b5fdbedc,e490497c,bff1088d,ba72070d,3cfc7997,fa388fc3,2f80b451,ca54b8be,fff00465,4086c75b,da3ccb9c,6244746,522124ec,ec22666e,a9576b19)\n,S(cc1a608e,16c57528,3cbbb134,4083cfd3,f1b325cb,b48df6c8,2d50bed1,e0cfb96a,5b8aca44,67d9b224,413b0c98,78e09213,591b8f87,b024bab5,55120a83,38cc6734)\n,S(d8354bc7,591ebaeb,7ae4d1df,2db3bde3,b7438d1d,69b5991a,5d70f6c2,c3fc3cea,efc89693,6765f03f,29422703,97591bed,7d95afc7,29807a31,fe266f08,9eab5ad3)\n,S(6ac1c963,ceb2740b,212ef42e,6da07647,481ee21c,4e3fdd6f,f2ae3da2,8ddef8aa,4fc8817,1b6d5ae2,45453c94,f5f2031c,c52140d7,a110d9f,b1bbf3e8,e5164281)\n,S(be130f59,b52e4148,f9c47469,778fb36e,74d4da3d,a00f5c4,dddd2e47,6f18b42d,16dcd9e2,f739a58a,22a7d76,1c1cdf61,c5b9f8b9,46449516,9398dc1,fbc47069)\n,S(685db8cc,39864a55,68b56e59,96265bb1,24ee71f9,1f9f4f3f,fc3c79e6,c063bd2f,730a7141,8e5b2f7c,2d333b8e,5be3021,22b396bf,9a75f493,37bae5c,86b50f29)\n,S(39f41ff3,89f74c1a,e25e564,b9bc189b,f31f9af,cf0ee4ea,aad66ee6,55d743ae,fbea0f6d,e25d4fee,53f0aad0,9338f739,26fdaeb2,edf9d8d8,8e1e520d,d66c8622)\n,S(d7a69574,41bc9639,994737b3,d483bc0f,c29b1b62,cbf59f28,b12b208c,4c20ed1f,ce44e2da,cdf8158e,9c07ca25,1b9a3d06,91eea29f,41f824ce,ef2d631b,65ba8cb)\n,S(85bad160,9139cbb7,2be86793,42b37884,22f5981c,5fdf30ba,4914395e,c1eaec9a,99fcd461,29e576b2,b25c57e8,8e3fe3ea,362055c7,843838db,4196a485,cf14dfec)\n,S(2380bac4,d428a159,23c2ffbe,8f17da09,74d986fe,4210b72d,51a1eb80,23ea49e5,f4af7313,fde4c7f5,e45e38bf,c4d44bbb,3ca1015b,d209065e,5a6ab074,5ed6f54b)\n,S(c0561359,b7d61dd0,e359108d,f221202b,97c1acfb,894f4e9e,46fc29fd,364f9cf2,3c377d80,1c72a9f6,2cfea5ff,350ceb32,75b16103,cecf492e,2901327,d27d83dd)\n,S(72c499c1,b8f4f2a,eb9181d3,9bba5b2,76481c04,a588fc6,4ed438c4,920c2a06,6c994c8e,60825314,2a34867b,1f82bc1a,f05ff8ff,b3045e7a,72d01243,b2b1ce53)\n,S(8de84cbe,2b66209,f8f8e2f3,f06feb45,66e02c9c,b5df26f8,84e20454,ffcf477d,c7f2f680,c4d07d88,69348e98,6a3b7ac2,ac9e8542,a019f379,6410b993,742a34a6)\n,S(dbfec9d8,6581d762,e5ac8048,886b9d2e,9a2d02ee,63c5f442,7d02d12e,401710f2,6e611ff9,827bb1ac,a885acb5,906648d9,b46496a8,98a13c90,48868d,c0daafea)\n,S(9dd651f8,6099edd1,b3d0ade7,82aae6b3,9588dc2a,291577f9,f2456f23,d1d0453d,4f6db617,f0d7860e,18be81a,dfb6d773,cd3f905f,98611845,5f5a0b05,ee715ebd)\n,S(2fd8161a,c869de35,e777a885,ee608f96,356445f2,fa2f33d1,926260bf,9bd66a15,1d2c21e9,674c2d92,b64163eb,12de6347,98c6e7a2,9787daa,7c6b4c80,fd307f25)\n,S(3f25bf89,24f505b2,3f1538ce,4940edf4,8b6d8765,f88778a8,495e8a84,a29dc391,70253583,e7e0782,18ab0252,52c613b8,34438254,9dc57c30,afd47297,2c8164f2)\n,S(3c0f0359,d5f72344,f8f3d2fe,28458f30,467dc770,b55eab47,ff2e1ee2,6c773f0b,49583a39,459f19c4,5ac50d78,74626524,b9c25030,e45f2c7b,12729ca8,1edb33c7)\n,S(56380666,ec1b5df2,36045855,fa0dd93c,87e38d70,fb170dd7,3be5c308,36b73a15,700690f0,b210ac6a,9aa91252,c8af8f60,b5cbbf93,8291fb11,7bce1f0a,759921a7)\n,S(71ca710b,b9a5f7f,ec6b228a,af3fc47e,25f90201,fbe3c673,8bc6d2fa,9c9298bd,7dd2528d,c0750899,b1891287,170159ae,c759bca3,51e243f8,fcc9efe3,2f9abc89)\n,S(78ddec3c,c938850e,7c2ec20f,98e1be3c,6ed87fae,827c9102,5112d0b3,5d264575,19072951,766a4050,c8585048,d6f19e60,22b9c163,f1799ddf,d486dedb,3d680321)\n,S(9aaebafd,8852857e,8c670950,93dac29a,5813249,ed03e67f,3226ab3c,7b4ed70b,8c6a2acc,b541bd51,65e13bc,a3c4d2f3,2457bdcc,406ba71c,7b9cecd3,4705fffb)\n,S(586eca74,941180fd,da16c7b2,8b9bf139,a3096a6a,20ab9bcc,6d12be5b,db2f79e2,b3b1d12,361609e5,afc5a7f8,26a21ea,ac4bfde,56016ad5,bfde6f93,a3488d71)\n,S(1857bc3e,dbe4de2c,86fed7d4,cc3ee63,c0e0b6b1,36acf97e,e3638183,8d50ddf8,ea5e807b,e7a588cd,ec759c67,3584675a,8a7fbdb7,cc5a1835,119a4f64,8c275363)\n,S(aa4cc744,7572c62,22a6cd,bcb8813b,64206796,27f5f7ba,863d8566,78e5b01a,ba969ac9,d259244a,9a3b7f9b,b3821a61,a4a97b8d,af7e08bf,f39f099f,8fa2f836)\n,S(4588ec09,59174367,6885fad0,a43d85cf,d6f736b,cb276179,e794da35,204f36aa,fb835e7e,cdc681c6,ee1c89d1,dcbae3b,a9511692,a54c9c37,2f86f4b,cc7c62e)\n,S(867acd03,7a3e5f86,99e33f22,72f7b1fc,25ce6622,5020a4e,ca3b3111,e880653c,e9112ac7,57d3f905,3249ba3c,ff64640e,639cd94e,5d6cf946,d8d7f3ad,25764646)\n,S(5e0a4169,e4f81dc2,28ae4663,9ae3bd4,b527814f,4616fc13,318fd5db,26df370b,5bd335a8,fc23934e,bee2e32c,3bacad4c,c38cd624,8cb34ca9,e58f8add,3140d001)\n,S(90053469,39df2418,1b5b2e57,82a82f15,542a55a3,adfe8263,663b4fff,b101c0f6,4ff0d589,973985f6,858f3837,89c3a5e1,74460778,3a1b1476,e3f1ea51,37e3d991)\n,S(a99439a5,53df33ba,6a32f33,d90b1500,4e2db077,22a73561,8f4c3b0d,63cec63f,198e0929,f11fc777,ea9cd8a2,e4e6987e,6f9c1fc5,f703ce7e,7e6423db,39656cd4)\n,S(51f2a136,1381ba14,c8fab71d,f82aa2e7,1c7789b1,b78c355,a0e2fdf1,5f085282,fd5f129f,ca15fea4,d6f23bbe,43197a3e,6e2b7b26,84934ea5,a97197cf,eb2d16a2)\n,S(3a91f81c,8b064b2c,99509777,864c5b4f,bed208b8,f541f68e,82053158,2ea91d3a,9d59003a,d4ae39e1,95077329,e585a8e8,a542b594,b6010404,8573a01,23a513c9)\n,S(71e99d50,aa22fa17,3f026dee,e728c114,5e491e84,e140b462,1056af19,9736c5c8,ff3e4f77,68588846,7c662729,1d947e77,699806e3,9bb0bb26,53f67ec4,176a4995)\n,S(ad149e93,3a0344f7,3fb53286,ace2f3cc,46f7450e,e859980e,6d392001,7c8aaa39,7dbf4798,85a4f354,b4f14060,39a83789,65a5ab3f,f1157e3f,2a4f6fae,909e81bd)\n,S(44f0a37f,5ad78f6c,4a40ca20,7969105e,86e79ed7,7ebbcc32,1a247f91,751ccb01,f404d867,911eb3fb,efb1e559,66b5128,70836d9a,12891905,af649555,c353044a)\n,S(4f77dcc3,de8de08c,4c0a4a8b,29717868,50f5c0e3,b271ec1d,c0d38a61,b30ad5d,73c7424f,8ae80ee9,2118aa5a,b0aa65b3,58dc7300,806ef2fa,55836a39,4df57c69)\n,S(794a108b,102a0923,6366efd3,8ef658c1,6d6d5c24,e5e2dc0d,38d71371,e6005555,871965ef,efd79050,69acf0fd,c1f84798,7c9e304b,5fdcbf75,1a6f6737,ce46ba2c)\n,S(f1988561,234b863a,df5bd49f,5a0b1252,a72e297c,ea3083a8,22da48d7,14e8e594,7adba507,d0ab51a1,8c036612,dfda3f8f,abd2f573,d31aa03f,ca6eb361,a83fc418)\n,S(48bed556,c07c99e0,71249b8f,7790aaee,f3fd27db,f82d1c75,491a18bd,cc3f4a80,9dae5280,21be418d,1b4dd08c,be5dbca8,46cf0122,d4943543,8561e555,66316e94)\n,S(bbfef3fb,e53779d3,8f376fef,974bac74,ec8449bf,c2dc8a1f,3bfcb33f,943ab9c1,bea5b772,ee798aff,c610e849,5be0ea8c,ed462563,848030b0,8006c6cd,e312551b)\n,S(42af3415,27b3cd52,3806b04b,ecc175c4,156839af,eebc212e,b74bd6,95b7f06,686e5fe5,ebf16ff6,2376d096,188de980,f91a5518,25bfa137,e7b46df,59dcef4f)\n,S(3c56d78b,74ae87c4,6efea376,d58b7d5e,30749726,40c24d69,38ade127,71ce10e6,ce97decc,f9d1e215,d363b36b,6ca2bc6c,39fed00b,511bf883,50732752,48d54a41)\n,S(4b122599,1944ef0a,ae6404a9,e48f69ce,67b52a1c,da4f291d,33afdb09,b789b61a,5c8be350,27a3f992,5377932c,b6d92bc0,62b1bc80,78e4611b,f3ebbe66,b6089571)\n,S(9e42867,c02c9314,a3658f18,14d8c59d,71674955,2b00be9a,cd37350d,18d49db5,5d26d035,1ff90d73,d783155d,afe20cf0,39f65b1e,6d8d5d0d,831977c7,17a8c761)\n,S(9643390c,5a95345,2a027d0d,47bf6fa8,306ab31e,5dbd8b94,402db973,275359ae,b354d7f7,1019e9c1,d23560d0,50fbd4bb,abbf492d,f595c0ce,a699721a,b27a3933)\n,S(8b4916fb,86f77deb,505374f9,1f15782,1b6f7884,feae9f77,bacf5620,7e126b69,9a83c0,6d86db13,55c3d59,cbc87fae,ce6d2af3,64f9c213,816cb326,28be1fd4)\n,S(d29df4b,109782c4,1f5ee9ab,b8488f7c,11de8efe,9552eff3,7ba3cf0c,d0054b9f,1bf06237,ea242c4f,bbe08f6,a79b6808,d1a5a444,1989fd1c,98a60981,40ca07a8)\n,S(2aaf397b,a5405044,539167d0,55113acb,d4a20265,206ddede,203b8ea7,21dbd41d,374e32c7,1132bbac,91e4b4a8,aa32f308,13a81c2,4f7b3c66,63d8821e,9ef73081)\n,S(2239b3d2,23eace6b,8ebd287c,8b6a398c,1ca58a94,5d8b7b81,7b1133f9,cf57ef48,fda880b7,4b54a8b2,8af4b26,78e03f28,f01d70fb,3e4ebbda,94ccbd43,e2b4cd46)\n,S(8b3287bc,f47e72df,7edc9178,51edb145,b88ee233,9f254f62,e86ec624,a7c7e365,54a06bc0,9f60d54e,5f900868,c0c3d37c,db6d9969,1eb605be,321f0f20,9fecabb)\n,S(d9accea3,3e3cfee9,10d7e1ff,3e87539d,ace742c7,24d6d36d,d8d981ca,984f7993,6adc974a,a901e5d2,d8cf5a05,a20bd02d,62947f81,5425e690,565638a8,427dc88b)\n,S(d7fc57f8,34c348bd,e6692b50,474ee038,4af245da,40b8f6b3,8df2ae5,a8b3206d,b253e4b,41fd9fea,9b28e04b,a6db0324,231edb1,1f9af406,e38d2b30,244e2d19)\n,S(25808fe0,ec4a1409,36b34e16,595021e2,b815f660,7a23d505,9ad5b5c3,14d9588a,d0664ad5,b1d46ef8,8c8a1eef,bb9df1ff,a75bc16c,e8bbcec6,6f4798f7,c58e7b96)\n,S(e4474780,113955d6,72152fa5,70da35a7,59e67a76,29a39ecc,3226ea13,99927914,493cc170,aa2f0486,da6834d3,3566c78e,ad4eb3d2,837ef5ea,c1adf3f9,43793bee)\n,S(c5040dbe,2af9d706,76ddd900,d00f1046,44e2b985,82d46f11,47602b91,126311ad,840aab11,a2316171,cc9b6466,778a9ce5,a7cabc1b,1077586b,91a8d280,324ddb15)\n,S(23391baa,316d33eb,3a7ca123,6c47d4e4,8116cd4f,93bda3a8,12a228eb,437d9f14,1d81341d,9e6d76fc,1ca69af,f6d8d119,bc97c79,c7cb8b7f,1ebb54f5,cb7efd4d)\n,S(13211756,3de3ba72,2fc6682c,beb39494,8aeb8fd8,c0b95eb9,45eab34f,bc39ac38,9b772721,8a4b0823,7c961431,e26cbfb9,aa527905,41b753df,89eb9ad8,8d74f006)\n,S(3b8bb898,b27a2fc7,a1cf896b,bb5cd7e1,708b943b,afee896d,2ff77a95,ba789708,d81e541c,668003e5,5a1e13e9,6a1635de,7fdcbf79,c34068c9,248100c8,9d36c1cb)\n,S(e1d70a2c,9af5c4ba,c505e4f5,5c0040ff,d94f162c,815a2e21,c7ce899f,e0217b4d,b25630d6,d20e0e4b,3686d66d,e2b1e53d,eb063b99,e79c212c,2fd3cfec,97a4532e)\n,S(1b1e3823,a51778fa,d38f0c56,e2b36dff,a7e681c8,30fb41b5,ff1aaa7b,d912de1c,f2e99a90,a951201d,ce725855,6bf7fd27,bebe1626,8328116c,d593ff32,2584d4c1)\n,S(1e31d838,94f56191,2c134817,55e467e1,8745a91c,d903102,e48f7282,21bda7a1,11dcef88,35dae18f,3c02c6d9,7f80896e,477a7b27,41203aee,5048c94c,7cd610ce)\n,S(cb9ac34,795cbc99,bf67a7ff,2bc3b497,311f687a,51b5028c,422b0301,8ab7100e,5e5f0621,c804b35c,e01e95e9,a8dc13f7,e5ff32dd,8a44f320,74e44836,3cd0db1d)\n,S(afc34ac4,67dad38,a0e326fa,1a656c48,24dcb884,f00a20ce,56c73835,b4e11c1b,c8b1c404,3f6d647a,382ef031,a02c10cb,77a033ae,bfc6dde1,d7508136,28bdcb96)\n,S(3a6fc160,ca85aba1,619430bc,ba14e12,3330f636,7a78273e,603f85fb,e270aa81,594a2b72,86dbb390,945a7a48,3707bc32,cb72cfc9,19c241bb,61774dba,222bc0a)\n,S(a840f695,657c9c3a,3f64f56e,af18debd,bdc1e4a8,e3eaee43,46b19601,433ce7d4,8a8a7ac0,ca41e2df,461eae96,bc00131b,1a77b824,7273269d,7a41f49f,ea126fbc)\n,S(c044e01,70ec6914,c39d08c3,4a293268,65cd7762,d6e0f3e5,5f69d80a,e80a39d6,7bd63082,7ae51516,25ee0b5e,c2f97b37,6dd5fd7b,9205852a,92dbf922,3a0b4657)\n,S(cb90135b,352b969b,45eb5c6,7cfdd288,2bf9271a,41da4b2a,a89dde94,eaa00b3a,14cbeca0,762d9b11,fe4b6d26,7277a8f7,b4dac82c,52634b49,2a84b616,2d79be93)\n,S(fa7bc437,a24dab0f,21c7c063,3aa4a8ff,c8216676,75ea6963,c58c84d0,b182a0e,e24267c6,d7300c6b,6dd09326,c49359e0,fdf72114,401f244b,383eee54,d1a5aa35)\n,S(e6354cdd,3f503d25,37b2bef9,91533ad8,35e95657,3bc8afcd,d0c1c05e,57b3299a,d6c17b70,6291c8a1,989955b9,ae9ef9c7,cdc2b6f3,f5cada0a,3c4d0b86,859ead7f)\n,S(9da36530,7e815e3,df0dce9d,50d7d812,132ec23d,2bf0453b,483af1f,bb45cce8,bb374566,98a28ace,a86a1b10,2909ae91,3bbc4b23,22f4d09e,bd298e51,d067a8dc)\n,S(dc457a1e,1a19cdc7,6ed1c3b,a416a886,13b25788,22d691ba,76319b8a,38c9d4db,39f93f66,de5a650d,d49919fa,294638a7,85e25bd8,f8285776,dfce813f,bbdc3b58)\n,S(b2377b1f,1b1a0e98,5ff57bc6,64ca456f,ec216c6e,b7b389a9,62b9d82a,ccf0374d,383a5580,d723509c,bf114e74,b3eb9746,7a040fc0,6232adb5,dac199ac,77578c1a)\n,S(8b1a6446,755d3a85,3851fabe,b95c24d8,2a5a86ce,5e5df65,78051124,acfc7e50,42b885d4,cb632a67,51a88aef,192a5bfd,ed1cd461,438cb623,1caf3346,9655cf75)\n,S(9408819c,bacf1a0c,9e5f1416,23a907a7,c3a7efa2,30a15b3e,7d5a6ff2,5103f5b1,a9758ec9,d6f84f73,fd107451,f0ab79a2,1df08c30,cbb2456b,d6c68cb,c506f98)\n,S(8bfef047,7b3f8cb,99d7c933,a884da4e,9ce6d473,c243d3ee,9c319870,b06ce25c,8bbcbd87,d06af17,550d17ee,83017c58,627f1d84,e8a07e37,ca73c12c,f7e5c498)\n,S(2a857f0,c12202e1,1dcb84b8,adf582f9,8eff647f,c3803cc0,dc1d294b,414bdb61,9bac456d,a7fd9318,244af8c6,48ea23aa,62c8ae1d,af7fa9af,e430efec,46db6548)\n,S(937b8c5a,90485ed3,d06b224,2ff53e6b,b94b1ee6,a493c835,25e3acb6,5d5cb5ec,d37b136f,f9fb374a,50f5a311,ae366ca6,c9c3d867,e9b7e788,da3b2766,a7ccd808)\n,S(5f544d53,e2bfd6be,d9150ff3,6a1e5c5,22b24933,489201a0,65a0e0a0,3a43c77a,ba9c20e2,8c47cd98,1752c413,70ced32,8f4c847e,20165562,c3137e0b,12990f51)\n,S(67b63388,90bf8baf,a5b64fa7,eb9fa4c9,e3249cfa,81a55cbd,9c297e7a,a7c807b9,dc185675,2d94b811,42b54577,edf808a5,d871ec1,6c8ba567,62061dbe,ae7625e6)\n,S(587a9dd5,99cb448f,9f92ffa3,d6328032,b76604d8,386a2e2f,bd324628,98439442,496998e9,a893faa7,a49e73ca,2dbbf533,488aa687,51ffbdee,6b6d6dcd,dbae9870)\n,S(36fb7b1e,c576ff9f,81077312,35d18612,18dfe51a,58642a56,8f80294a,63c29b38,34a45ac9,b82cb1bf,2c96fc1a,67de8a63,5c1a1589,61baf8e8,a2f01572,1566c4aa)\n,S(87b71c8c,a0afecd2,dd8f49c5,109ff434,ab8a273d,4e4efcae,f775624c,71f4ba95,8519151f,51122588,76527c56,e1e6d9c8,5b3626a1,bd6ad0b8,1bc382cc,525676f9)\n,S(acf65cf2,805c370b,a3bed962,c3ba3b0c,56c98,b81a696c,f433a0e7,a463e040,f093929b,f45be16a,f962762b,52f57ef2,dc7b0e23,cd68e3d6,63b3b402,15692d5b)\n,S(e092bfed,8b010c85,b91f1674,1cdfb1d,e3e045ba,81297f44,8990475f,2147acf1,e0bb9842,ecc8683d,e4016072,86070da9,8c4d18af,8bdda91b,65770a98,77902c37)\n,S(9bdfd7b9,8260bcbf,17812735,c70501db,ba386b7f,28ece691,97c871ca,610a52ae,9bc65398,3f8c4cce,731e01ba,a5f509f4,887d9a78,40620d9a,ffbcfdeb,5e371eeb)\n,S(3db22321,d9311589,5c85587a,9095421c,afc8a80d,86a4240e,9a4a2f82,8643545f,42af30b8,2c57868d,e0f23c9a,fb19947e,fdd6bb45,4efc68bf,ddbf7349,8fb78eae)\n,S(e9d3f14,a6a77ffc,f86decbd,c5e43fa3,c3757a64,22d37da6,25627961,622b3e5f,83ac0bed,1e2a714c,c6ed0764,da92cc17,fd18ee84,36d667f0,2f90f818,30e67de7)\n,S(412486e4,f29b4887,e1448af,ad59599,b31b9085,8682580f,891d51e,9842f2a4,c31c5931,8c0d6790,c2fbbb03,9c2e761c,bc5577b,53161a8f,80d397f,de7ee3d)\n,S(e9deec71,41ed506f,e2dafbe0,c9ab75f9,609f8422,a4b2da26,7c529d92,36b4ddaa,8728544,d8463bc2,d846029e,5d2a0a40,8dfb767f,9adb79eb,2209478f,6d94a21d)\n,S(5a0a2292,553c46a0,823a1761,2b8925e1,bbf01c2c,5bcb7173,5f0fd6ff,b264218a,3097cdf0,adda0f10,a261f897,6447ff9c,12de696,8f05009c,e90d1575,e55dbae2)\n,S(49cb2a37,8b681ad1,ba1dc23d,8d12f186,563a40f9,ce0ffd00,5bade11a,4928d1f,f235e2af,c0f65fa0,ff15a938,ad804a3c,fbecc5b6,e276bbd6,32a06959,3d6732d6)\n,S(d4d71cb6,36881177,b05ad510,a621cd44,3dd1afd4,84d177cc,f99abdb9,1615feb3,3ad65378,de3eb9b1,606f385f,a950d533,5316c363,fb076c02,ac7f12f0,7562645b)\n,S(591b2e1,4bdd6e00,64f798c3,14e86cc5,529c99b8,3f47d148,b7e3e642,35bfab2f,4f686266,fd2a4c66,4d6bbaf1,2a368d59,12a51789,5d783aec,a986a568,a8fa59b0)\n,S(ee503c85,c984bc49,3d7b63c2,92eac9de,be253400,f4988086,970be236,47356876,bd828abb,6f9e89cc,741704e9,614d6711,39449bb3,a7ebdccb,976c573c,4bdaa47e)\n,S(2f9b4fa7,2e5a1fc,ca36a3f9,8987c3af,756e78c9,77fd5697,758c95b3,14b3f89e,9668615b,3d5b3c74,4ea2e1ce,e909d9c3,956657f2,1a65fcf3,3f0ea150,1ca4a15d)\n,S(18b6d06a,a34124f8,5f92b204,e2a010aa,a1f4aebc,6e13a62,34eb1c92,7afd46c3,66cc31b9,bdf600b0,7e624bf,a3e079f3,258b0ba5,5437264f,b460481d,1f4bef4e)\n,S(3bc07963,bf758dd8,fff37d0f,30db6eb,67662a4d,65395688,1cc30340,ddb44ba0,60e11ef2,68209a1c,2df9a3c2,276db6f8,8e6dc1ec,b74548a3,57d770c1,ad057e5d)\n,S(bf585d6,5b325423,afd49af3,c9fa68a,91498b5a,f0ee9e3d,d089b288,53a46a8,2f8944e9,ea484b9a,51256e2c,fa9e5396,4c000c1,3451cc05,94bcf6ad,e38e66a6)\n,S(887c0a2e,be7a0257,5d5b59a9,11f40ef8,f0cf1438,d7f05a7f,64e9c133,cfb69294,45f334c8,4f9bc66f,50fde594,94175491,9c37c30d,d20f6a58,40271e71,60aec5c9)\n,S(9dad7af9,a73325c,59a17700,fc3dc6bc,3718e79f,804a2116,1bf9a36,622f7d4f,2b7c225e,99c6a94,c7e326ec,b89eb8dd,40644bad,1893136,6442985a,e6159525)\n,S(847e4f95,72bd29f7,4f3e9a2e,d73cdfcf,63bcb61c,9caf8694,7cb84594,a7dd551b,ba6ed282,e0a92c62,fa86286d,370cb344,f6f1182,a101c4b8,1ea89a15,b393ee16)\n,S(25213205,df1c3600,4673c4b4,49256c70,b5d8c62c,cdd3d580,2684af47,f047a593,36dc81de,5af4709,fae2a47a,8a205647,95aabfec,42a79f3c,54763d67,ef096837)\n,S(75228cd8,4866df7a,4713a25e,f2fb29fc,95ebfd70,5d73229a,b170cbce,1058e87a,fba4879b,cc02d3f4,fd25f056,c0854415,68a47355,929bb812,a7dbb30b,c012fe6d)\n,S(74945539,22867c08,6d02fb07,c0424890,981a1337,42c63fe4,b6adadbb,59b68568,7d774917,8df8b19c,8af0bf0b,5247e751,3e3b8d04,46465180,341ebb54,1d1af3e2)\n,S(69db7f53,2899e39c,fa0cbadf,c29946f2,71d28ce3,57f47f7a,609e0fcb,ffc9b04f,cb0243bb,103255da,ad423ffe,e1d50f9f,26da7cdd,764a11f0,a6694b63,199feabc)\n,S(727ecdc1,fb4a0dbe,fd2fc37,8902f922,ec4aedf5,53dae225,1d173c29,2929f8c7,ae5bb2ed,13778d60,66446ee5,e5754db2,bfc4f7c1,64bc035c,224d495e,651f453b)\n,S(903ced8f,ec2544b,e207f5c9,e2c7f2bd,91213873,5eebc382,b129e334,7ef25b72,2117ca29,ee13d31,5e89bf33,afa8b7db,ff75c795,6be40c8b,b2e41cd5,943190a6)\n,S(c4d467ef,5149e117,3638a5ad,6fd36373,1c8906f0,80336ca3,3a6bbb99,1a03f33b,ea5b5b24,4c536bcf,ce3d437e,abf2fcec,431ad80c,ff975b63,bf398163,629b5c7)\n,S(16b577a6,5f6d09f7,b23b2b7a,dd80a2f1,cff7a8a6,c36bfcf9,d325e37c,ea37326f,66ba8e2,14674e5e,228a6576,a52a791,84d98be1,db1a2dcb,e9073934,d09f15c1)\n,S(ad4bcaf2,e480adfc,e1e45384,6bd7ddf7,67fceedb,d2bf1f5a,6768531d,9b63412f,51fa0360,47810f59,11b1b3a4,525ee72c,c4c891b7,56737f4a,a61a380,e9e741ac)\n,S(b249eb38,52d2e787,4a52d776,d1bcb399,51ca65de,dd9e9dd5,87d73362,c33b571a,3e260824,14e4ece8,83cd84e,b177096c,62dd7706,a79c31d9,b1103232,53a66258)\n,S(634192c7,696a01ae,81310d3a,59d2c53b,74dd0560,7e3be9db,ccfd1ec4,bde14a65,455b4850,e366e077,d86dcd70,9c787b18,4fd4cce4,4b92954a,dcbe5222,57b0e00f)\n,S(ffbecbf5,d433f80,49e159cc,c14b198a,acc3c5ed,fbb1ace6,fd295dcc,4a2f5099,422e7aba,1ec66cf4,36489acf,9c03ba33,dd68d368,8a48685c,aaa1de52,440be3c0)\n,S(65b4c4dc,1067e823,9cf4f1a9,d0632da,b6a8c83b,509a75ad,8c133dd1,5c1868af,f7cf5d9d,d7654618,5183f8ae,7f42a03,20c67817,9d5226d8,40dac1e5,f94d260e)\n,S(d380ecce,9d603502,d518dbed,405b8d0c,8de48dbb,35d5b559,24c1a560,9bf9c67e,1ae84480,fd18ab10,9eb0ac15,265c609f,8b241b4d,a80b13ae,50c35f8f,db64c128)\n,S(17189d28,b5ce1bbe,d78a1d96,15dd1a50,3fce43f7,19d042df,63484ff4,ce44511c,fbca28f4,7c7b3e39,4121b948,ba561289,85c53298,8db2fbb5,7596a473,a782350d)\n,S(fbe332c2,e2a8b07d,a85ae4e6,1925bf3d,be685e4,fafcdee7,3f558382,80c2e84d,aa917342,5e187da0,e3f8c6d7,79b42cbe,b11c43e0,6b594eb3,e1a5797,ea4e29ca)\n,S(8b9e8a87,8b5e725f,8b4bd518,22e9cd21,2100d1f5,cdaaf210,2d7963b,a0bc834f,331fb31c,c28f56bd,5ff1d6ad,80b65702,b2e873dc,4552c563,bed77a08,cc3ed659)\n,S(97e92411,a3c0bcad,17a798ac,eca61ac2,34e1a68a,b668aa3b,d730cc8e,8de111ca,b0f170a4,bac15e17,2e75fb75,93c21a41,4794976,bafc7eb,7cdc4bf1,6947f48f)\n,S(20358813,33a13c6e,cc8c76f8,2c279577,49aa3c1f,d4d51691,9cd23b25,d044eea8,480afaa4,8c86af0a,ece2f951,7df0f344,259fc4f1,4d9a5c0,ee73c891,780c7f29)\n,S(caa1eccb,1575740a,90155103,9849befe,617579e6,22b7c343,a665beb7,a67dbcff,aa695bf9,f1c972ff,b6fd3451,1bf042d9,1aee5113,9c1ea577,e0bd52e0,a4e0a20b)\n,S(8e7c2ba2,36f7a8e,fdaa212a,7fd6b883,f331049e,6e8f2bbd,138a3adb,c2620719,bd03702f,1434fb3f,5846c4e2,e779f8c0,d9b6e031,1feced02,20a618f8,2eec105c)\n,S(e07dc033,6dcd04c1,fcfebf09,40c07783,88fbad11,8e4eb3b2,4dd637c7,baace975,b13bd0a0,e5eecb0,762ccf31,1bd53156,ef6f9268,50044195,10d6616a,b32a2c2c)\n,S(6606c825,2679af01,9d8a904,4db0b28c,95aba791,d1c33072,97afa2df,bb8ce0cb,7505e59c,a9807993,5710de77,747868fb,10fe6c57,36ba2054,6477cac8,8e1d3cc)\n,S(9fbf4cdc,ec48226c,b45450f,b0de5dae,2b31f935,2b99e0b5,22ab9935,1de6f061,f2e4d0a2,3da020e8,60a0d58a,2362b7dc,e9c5b646,7034ec91,a7dfa601,1ef850dd)\n,S(e06d697,5195ffc2,988b0403,e977d32c,b7cc8167,e800db1b,976f6186,286916bc,8015370a,27d3d221,7af80e04,a49003ea,68302bb,c1a5c83,63244c0b,c30bb8bb)\n,S(adcd67ab,21d2aac,65112fd4,e6e16cd7,ff792577,e9785a6b,cf4a3f0a,9293a6e2,6527b620,29062aaa,5058608,f5cc3bad,8e4f40d4,9b5be93d,faa5c2b,57fd7fb8)\n,S(1d9069ea,b43a64cb,1187e963,d96809b3,5a447317,68910e13,3e0bf7a2,e1f2bd38,ab03dede,854b8fe9,4ad2f9a6,8ef5415c,fc78c28f,a4ec33bb,f15df31a,91e29108)\n,S(f1f6b776,b8ec892f,148168ae,8ce83f4b,603206f7,2a38140e,3a422e67,a20a768,892ba036,3413da21,17d9b11a,7bb25cd9,e7136a7d,82a7f45d,14abfcb2,b9bff25a)\n,S(a884f94a,ce79f4cd,f3a8d1b,f8a2dc3b,c21d1c23,433a7fb0,401c5df,1efab379,5f53356c,6e45248c,ec282fbe,ef03ddf7,c611affa,5d0d3082,dd630f80,dea05c96)\n,S(b1988430,197a8800,e1016564,b48d4f7,1fb2be08,35e9efe9,81a80f10,e61da9ff,d5c7864d,ea7d12d2,5be7ace5,86e141a0,e515a41,5ec70bdf,44a68d8e,4dd849b9)\n,S(15b73aa7,529d5b84,bd5c1db8,2b6c93aa,46985aae,942f6d4d,1094434e,d27fedb,297e32a2,bc8ad13c,42011259,b1ca3d40,632ac6de,f2fca262,75dabc8,ee721f89)\n,S(339a76e0,443c1fb1,65992630,116e523f,8e35cc7a,16cd0f3f,57f7782c,7d97d40f,8990652e,fecd784c,33e75620,13b52e6f,914f0f6b,c413aa22,9e5bd773,cdfe9659)\n,S(bef26cff,fb80ddab,9458312e,9b09044b,b1c535e1,84f4e51b,f64b5183,b67adfef,3818929a,ef076a83,58f20518,c5b310f5,2c6943f2,1675bbb5,ba1bde45,9d37490b)\n,S(cdc56c81,8dafc273,4f4dae10,84f91b08,3dd40d86,23125894,c71d9243,8b2427e,f4b309d,e9c828b5,44542569,45579f91,b4376935,3f586c71,f07107f0,1f503cca)\n,S(3ddefe81,b1f38479,ec9be80a,1961c5fb,a09312a6,2a775911,cd65200e,7d75bc6d,75d83edd,1eb9b479,4effae4e,ba8007d2,7c7e2d51,a9e95d3,a1e58358,56df055d)\n,S(da7c6776,99032cbc,4c2bae12,59212cf2,a18879d2,63aaf99e,76339041,10576826,2e7a6d88,360ac45b,9871f779,9e80698e,4314cc3c,3f1cb1d0,c07ae9f3,38553f08)\n,S(2611b435,e0bc20c5,88cfaa80,17f4555a,b8aba4c4,ae1c0385,9dfaa911,aa80d927,eb58f81a,e51dc504,465ff8c1,c0529fac,e47549d2,429e5b41,7ce0cad3,7d4508d4)\n,S(b0fbe548,36f07c4a,a715aa08,806b71d6,b8f4c09,6945a7bc,3defec7b,67962961,cc60a224,66e7744d,c58668f,ede30ca2,1c1749b0,45ee50de,2a881a53,83e5abe0)\n,S(1a03336f,dc51ee75,facb7688,b4603c86,77d371eb,5ededa9e,b50bb49e,c9020581,3fcf1b03,9c0edf8,99855fc3,6acfdbc7,bd507145,9be7e18c,e9f715e4,98daa7d7)\n,S(763a1215,c8349155,aa849b20,f2f68a36,cf72892,49e4d3c3,810ee72f,78c159ed,37826a1c,cf30e1ed,a1795fba,d1f2f227,7b68d5c6,9ffd390b,d7dde5e6,58482684)\n,S(7fc7b4c2,30183e37,dce0a586,a6f0188c,f7e664d8,5fa05eff,63f2c27d,cada4edd,fd7a780e,6ea89a06,f0649343,abe7bcf,6338d2fa,fe457f50,ac415c91,2bed6a8f)\n,S(222807c9,b0686f55,d9eb7d7,412588f,dc543bfc,f016c8d7,74726135,dc65ddd8,b9670902,456c22ef,cb36d155,319393da,9a34b2b4,301c898b,43d957b0,a56cc2ab)\n,S(79d8eb36,98d8d06e,6ca33f69,ca04d3c6,db636346,abfd603,ed0189f0,fc5fda77,bffc97e1,1b0234a9,8dd1d460,e19db522,931fd49e,26d7ab28,f1326517,23d955f1)\n,S(a2366618,8e72e1b6,d5ab7713,decf6e3,1f801a6a,ac88ddc5,d464d127,ebadd34b,ef23da36,f3e71913,2774cd1c,d150ffb0,70e99ac8,5193faeb,b1736abe,77d60ed1)\n,S(b6bad04d,dde6816d,9123e8e7,43fa46a5,b1fcbdb3,fa1f13be,480fc1bb,49dd9612,585fae09,a290b273,a68b7f34,645b80b1,850c6507,d959b546,7f1b0100,b6a4e511)\n,S(2bf21c25,3353e715,283113db,8bb5018d,33fcbd58,f3d6face,b491e1d2,f4c3dfbd,e3a033a7,4e8a4d5b,c8c49121,43a47b07,b9fec4d8,a0d5b3ef,569c44c9,cf8d896e)\n,S(64c27a41,e978e35d,63f3a90,e71091f4,41e9ad26,6a05edda,358dddd2,5d842744,fcbb625e,8fda695,988aac9e,cfe67c16,bed76802,3b527d27,521c1339,3dae32d1)\n,S(620a1ef6,fdfe5b5e,9a4ef435,63cd7c8,af62acad,a02fb399,b7542d2b,6481a58d,b0b79e3c,550393a6,fa07f105,c547e203,a45fa7c5,ec825ae5,7bec305a,ddb8054f)\n,S(1523f131,7cef7154,347ef68b,424ee0c6,15e71251,a06bf8a1,ecd74675,307b95cd,c72554cc,1d8ad664,dc1fe67a,3f11e5b4,a55806c5,53dc2612,bf5516ff,f0743b1d)\n,S(d765303c,a9c8794,c00d4d8c,2cd73fcd,b43f763c,b753700,f66d7294,4eea0cfd,bafcaca5,204dd77a,a3a17b73,da3064dc,35b4cd22,ae01a623,781603d2,57bc267b)\n,S(a75eb61a,fafce965,65198759,c25cbc41,ffbbf87b,61839a8e,a17f04ad,64c468b6,99802893,240f48aa,53c49b18,1a6d50e7,a8eba321,64d587b8,41497d9,65869873)\n,S(7fa41b4c,d0bb91b6,c25813c7,1241e691,e7053f7d,beb0bcfa,4084e06b,bce59f2a,a0941779,755a695f,8317e7e2,f6a2c57,9431e22c,4aa09f,7e583b1c,e184aec7)\n,S(816c0db7,2240f12a,d8deb440,8ae2276f,3bfa1bfb,d820bd6f,cc5ccff6,16e4dbf5,2a52c93d,d91ee658,9449dd4b,bf70255e,e57acbd0,a981ac9f,67c16604,3f7e52d0)\n,S(33f635f1,317f1425,51390ac7,346905e0,ddbb3d87,b0c1780f,bb7dc950,c23414f8,7435a155,84eb1988,b974d570,bbc2b2c1,15123580,2bf93bd,b626a543,e54bfbcb)\n,S(d2943ad7,4b0bb03,35307185,fbc438a7,bdfe11e,7b5e0eb3,e94bec46,a251999c,2dca8fcf,19aaa314,ebde41de,fff6e9fc,b6097d6b,3bfec06f,19aa4941,676d577e)\n,S(26aa1fbf,c54375a6,fec54390,b5e44a0c,fb524b65,c10d1516,b0112525,9dfb1da6,49eceaa6,4c575ce,337d0b6,ee7e8198,83973c6f,abfa2f,d4b24e03,99a91b02)\n,S(780aec1a,f866a030,5ca6d7da,1948f2f6,ab18717d,e82300cd,65eb58cf,a7d28d20,da650041,e45a0e1e,a9075b6d,107b6f7a,414b3a02,18aaf929,92cf2978,bc08b91a)\n,S(1dcff259,8e59dd4a,3e515853,b3cc41e5,ef98113f,29ff7b3d,5eed6d50,2cb88b67,d7978630,7c6871e4,5654307a,e3836e07,aed86cbe,a9ab92f2,8c680172,1ab77271)\n,S(b19af4a2,77321937,93e367eb,5ece1c63,8f336f3a,9cdb4b01,e2488ee4,373ff70d,a3ea8839,a5105a2d,4277f27a,26a8ee73,b9e73fcd,d54f641d,c214d5f7,9c821dec)\n,S(1c8c1f29,548a9df6,f28b6126,b9324972,35f24e2d,a488e066,acf782f6,b4f6755e,1a79ab52,6a1e1aec,5ccc7e2a,3196a07e,78108b23,a86630c9,1795ef96,11ff432d)\n,S(b6ff8dda,1ad6c3c2,3c8a10b7,b4313968,e4d70075,12c421d4,f0b1153e,bd5716ce,4d3869c6,b7b74167,ca0d21e4,edb3e01c,af8dbec2,aa87a32d,7c9306f9,a5ce61b8)\n,S(dceff4ac,f61ba84a,81821932,9fa0ad60,ec08cf9d,830e6ccb,375488ce,d0f47b5c,949aece1,92bc61b4,883d5508,aa4a4aa8,fb1b8db0,385613b1,736a6eb5,c137d6f9)\n,S(5561e7a7,b709689c,97c4aa18,9a3ce841,843ccf98,be851c8b,131eeb37,dca5ebef,4b108c17,f298be36,430e6b7f,26b414a2,33b924a6,e65dd5a7,9a1f15b,a99a14da)\n,S(4d989577,89b01595,8e5d5bb,2e064e9d,9c56a254,5b3c8802,7ca0c997,a395a257,aaebaf33,ac950756,c5b200c9,f5b009c4,506964ce,5b706675,7951f221,40b6e0d0)\n,S(82b58e6e,6373c4b,30ad55a9,d66cc804,e9da512f,bf4af668,1246a12f,e33bfc8e,8378122d,98dc1e37,2c33b5c2,1ff4c429,d6d7577d,2ff353d3,87cc0478,1a5ffb38)\n,S(f49fa88a,a773784b,fe57d880,9efac44f,714c3d75,3669463a,d1199be8,2c6cdf3,41aff6c0,2164a411,c8be7281,493483be,aa9855b0,49820772,b96aa39f,9a18b3f4)\n,S(67d485db,ac8445a1,8c1b97a7,8c1852a5,ce910f0,d78b073,969c58ce,c0efd78c,71dda92a,24ff2b31,5fcaa5a8,28bf07d9,596f49b9,cf19f4be,44e6f320,84981e97)\n,S(9145f6f2,c19038c3,cff99883,b5a71760,30a46f7e,8b5d350a,db2a9610,4704d4cd,9d9179e7,852ac5fe,1d4664d5,4d778b3b,6c8e422b,b6e78add,56700dbe,6a22b0bc)\n,S(492d5247,efc2f5f1,1cf3848c,e0719abd,53674089,808de4b3,5503e23f,46b2631b,374b0762,7812c898,7ed68877,c995a4d4,9f021d0b,29270863,d50b8c40,808fd750)\n,S(5b8ddfb8,bb811678,9298d231,72bdb9c5,25c6610b,46187549,a381ca6,17dd1dec,b47d3764,fce3218d,17d0dee0,133d4f3b,c7ae170c,3e8831ce,a92a3531,7b1f7568)\n,S(88db73ba,25a61641,af5e603c,cd54c6d4,63c6feb,da11ec5c,6a35d30f,e406c65,39b06f7b,1c1dd7b7,884c67a,e295f8c0,9b8b5be1,c14456b,4027bf1b,4800a753)\n,S(3495cc9a,a23c1eb4,2cd85070,bb095563,2a7037bd,e330f721,fb38091a,9c382451,7feabb21,6f3982df,74429957,3c7557bf,b82ff4f,462fc64d,d9b3e10f,b69799ef)\n,S(e8a5cea6,970e10c7,93f75666,9d2309b1,a4f7b52,c19db4f1,cd69a652,c445d7a2,daacdabf,bd5259bb,96d2dbf3,668e8c16,fab47624,294d9982,b961f0ea,32402b96)\n,S(6e8c78a,e81a7ade,3989c483,7d9efe50,51af33f2,b2b2ee32,b5700b43,67931f9a,e5664504,751b41a1,45b5412c,be10a782,7d1d5193,30dd69ca,47be2975,2c291d35)\n,S(b8f520a3,10c5b2f,8291722b,1e3a92ec,b9551db7,744dd208,ab4d1709,310a539e,65901c3a,b6712ded,8f66451e,1915113f,a96d3d1e,d9074790,9e291d00,970f3d75)\n,S(a0538458,64459815,888bd917,3a2c16fc,ae0deaa7,cb804adf,e49dec0b,b2d8005a,27882f00,23dcc9fb,890dab73,f98925d3,e712608b,3d6069c8,ca58ca6d,de0d7a67)\n,S(41280416,aa7f0924,1ed8b631,fc2959be,2117cf03,9c12f600,1faf8a05,15222144,c2fef80d,fd8e8433,ee55c363,c43f7e06,613f354e,32aef8e1,808817b1,af7f58e4)\n,S(c4b8ff36,cbf83d10,51d130b7,e3d613b2,8b536f0e,b050a41a,7dd8f8aa,18c7a1ee,87d3c44c,8867337b,466ba76b,47512399,f6cf6c14,ad4977fc,276d67ec,5e7b4d47)\n,S(40eb693a,7cb938e3,a6b85010,6b7cd257,1de630b9,86da02a9,3b7a7f5a,a0a51ac1,27b875e0,14d3417d,cbc3b770,c4cb8805,c7ede7a4,efa9f89f,a51e36c3,af6d8d18)\n,S(f7491902,54e30180,75365d67,5f2ddf24,ac0c9d84,df371fb8,6e94a9bd,7f81dad4,6a271b36,c549080f,dc9bf1b5,ad275d62,68af0cc7,2ec68c7c,17ac24cd,5c5a6e46)\n,S(cf13261d,e4ce19da,14e6996c,97a23f8e,f16388ac,c364f2e3,6a053254,849f287e,5568858d,be1a7447,f7e4ab51,bb872a78,8218c483,c771ab7c,4a0a968,73adac10)\n,S(9c6bda62,9dd087df,d5516606,62226847,94cfd517,72c72a81,7263c761,ad3e8cb3,2c77dc7b,9c7fca7e,bb35628e,d62ffc79,9e5fbcc5,e25bb0be,5b1b67a,10c0eb3)\n,S(d8d1035f,64439dec,20ecc9a5,5b314959,c1526d7b,d15b1922,bb7ab7e5,b9d26bf3,ab7e34d6,ccfdfea3,f607f697,b941bbf7,b922a436,b9cb4314,3eb1b948,ccdbbe30)\n,S(c6f40a23,b8227a60,de32e104,7080f087,7d53aea5,b00a22a9,39cbc228,d1c1d424,e16bc58f,cf4b8c5c,9106f1f4,b8b2374a,63a3136b,e5a8c64d,7fe6bd0b,c1d80345)\n,S(3a69da22,9477d3a5,7147c2de,cce22de1,d1e007cd,61d22509,49400b8f,63a43536,c79c4fd5,c4ba6062,c7cc95e1,c9b79cfa,46b98cd7,389cbc39,25cc2fbe,49a0e284)\n,S(1b5fb8e5,492fc48a,46b7f6fc,a658f218,814c3d82,90aa339b,7bc7b794,325fc9d,a6290b12,4c9e0819,2b6f49f4,c4935b01,d2ca4235,8efea982,1646fbe7,dc7fff39)\n,S(fdba0f02,b004b4ea,dc9e1c37,d1a7fa7e,8a755922,31f054c7,47bbe8ec,349a3845,42da61c9,e96471c2,6fedefd7,e30c43c9,6c3c09d,d72d662a,e2b82022,391646fe)\n,S(c39391bf,cb7b9662,be7279f7,6338988,7c166343,2faf1760,f38f0cb3,a35140df,ea14e034,53dc82cc,484b8b3f,ff79d81b,449f9f81,d7a52d66,4c5b563c,9af556e1)\n,S(254ff13d,c716cb2a,1ac0e36c,c6cb20c4,19aedd0a,2219321,675e1744,859cbcb,2644cf3,916d26af,9e36bfe3,247f5be8,896e02cf,83eb3701,c400ad2b,92e35921)\n,S(24e4aa60,e9b464ad,a2c8974e,98568026,1769d35d,aa7c8c5b,71c9f57,28930474,9df7c2d1,82a94fe0,80a2244b,ccc9406f,6ed37c38,d9cbaaf7,8d973538,e8479f8e)\n,S(7ad9bbad,f906685c,3efd81b3,8599fc02,fb19a4c1,8bff1ef8,702c4f6,d17543a6,9878b970,9c4018a4,f713ac8f,d8a533dc,da45e243,44926df0,133aad64,c5246f95)\n,S(97d8fcd9,383a8717,e0c9eb2d,f7dfbaa8,c6e08339,be5fa2b5,1d12565,62d8ae53,1879ca4c,f5784f86,7f8363e1,5d85afa7,b1f114ca,7f8f474c,4a2c028f,7c6a777)\n,S(3e0fc785,5a08c32e,1e14d1a9,2c56ffac,2af1acef,505ed72c,b8771ddd,8afe7572,6d79b7fc,fd1e8894,f0844fc9,da30b555,bb1768f3,df15a0b5,884e5b09,6e149390)\n,S(d9da17db,b132d864,1da3a9b5,389d6f5e,fda483e7,fc7577ec,55b7ecfb,65602562,80e471e4,5feb0d70,2ee7f9e6,3f8f23b0,33a4f35e,8a0841a7,b67f8c63,c623b70b)\n,S(1848f766,afcd1e34,82935daa,7b71212b,f38e2853,9d6fb9ec,a3d9809b,6fca18f3,ca9a7882,645d54f2,49d35df6,3748ed94,5f9196f4,a93d4b7d,ee70f44d,b6f5884)\n,S(ed3744ae,9a7dac76,5ad65b2d,4fc2d15f,1a9d0047,f72c6be0,a849ca04,497a9f2f,3cf76d2e,d4e5c6f7,e4b23d03,23c477ef,2fdc5248,7066ef36,b763444f,6ab5fb5b)\n,S(c4607b73,edf3545a,b10a3a65,e0312707,91212acc,a86226b7,b1ccfefe,5f3676d7,31ad465b,8595f783,d5c0cd03,6230e3dd,2628ac9c,45dc6d77,28c42093,3d7eb3ec)\n,S(1c0962ed,2aaf69d7,8b20af04,93a3fa50,bfb9ad1b,64eb0699,641e4b0a,bc0e96f0,49f11af6,e088e3a2,a429c5b0,a87a7f6a,591b5a60,a397c123,2d56a4a,adaede44)\n,S(6a0476c,9a41959e,98dc6ca,fb7b4381,82250e1a,ae62445b,1f09a098,ddc19454,56842c97,8ae3c4c9,2c266cd3,7c8e3514,ab4288b9,ccc7e33f,be552ec6,f511c7e1)\n,S(24da0f6,53a30aa0,a6b14999,329f03c6,cdb59a80,e9ca68f6,b9367830,a0191f1c,83e79080,aa78bcf5,b810683a,f061c614,cdbd3b69,9e200b53,d1a2c757,2c138235)\n,S(6c3483,22479d07,f5871901,3264402,a078728f,227c75f,6f33743f,9a1a7764,a377af74,4a125408,6bf128d8,45bda458,be779210,f0d85bff,eb192c0b,a0dcc4c6)\n,S(212aabbb,4d14cb26,b26cf249,882b36e1,1cdc26f4,a1494905,15478f99,d5c43baf,e9140a0a,81d1582b,98eed57d,7ba8e584,11c22ea3,fc265148,ca1d6050,3847e281)\n,S(a27478f1,2afca20a,8d46824e,5b0ba272,f26ee0c4,24a951ed,f371425a,b343b10e,51e74b86,a7fc97aa,5a3bdecb,67818d7a,70ad0ba3,7c7cd759,8ec80a4b,bc4036a3)\n,S(e1c1269a,7171f9eb,a2e2fa7e,8f55e0e2,b9b8a507,e8cdbfe5,716f711a,572e293,41cfa170,8953242,f98d8e24,2e827684,5562c4a7,6d034848,e639335c,32afba46)\n,S(204d544c,19418e19,bb328e1,ecc0fbd8,62f0f78b,24208780,4d5827c0,f5e09efb,c66098e3,1f5d1587,10a3799c,b4f980c0,18cf4ed4,534e49f0,6d057059,93d52fb7)\n,S(16eddf0a,11a6f2f2,df230de2,f78b4cf0,980138b2,3ab196ee,361486c5,7a5172ad,e3db358f,ed8ab3c1,9204a792,6102c420,1327bdb4,fb81718b,b39a0ce2,b5992684)\n,S(7c9f7831,2298d96b,65e6b7c1,2315379,3df7001a,79cb080e,af6829d3,2b8995f1,2037cc3c,90e3a0f1,b242018f,c53cb32e,b2481dd1,bbb700e4,a6019546,edf51e5c)\n,S(129c2d46,1dbeb8f6,c1b913a5,b2d69602,63aee7e9,530c6dee,21168b16,6198fb1c,29ffeeb9,61c027f9,a2a14b72,a287d566,7bbd80bf,7cea0dc1,747ac25f,55137964)\n,S(8be2e565,30d4932e,f6d1f9da,a3225b52,de204927,e0633b12,570a049c,1f6175aa,364b4e87,1a130cd1,40007056,e3c0951f,fabfe4bd,6a687404,23cc1800,505510c8)\n,S(40b43f08,42ae9c67,ab0ceb62,453b4c41,42a6e12e,5f880c5e,27c90997,6252fa6c,6d1ac6c5,de1b2e5b,b225e46f,2c5a2d2c,248f11fe,d123ecca,4432a04b,cea2068f)\n,S(47e2238a,2f34df3,cf1caa55,93c49db5,4c2cba9b,e3724f17,87473a0,5ac669df,4d04cfa2,3ee255f,eca104a3,60a52f7c,acfc6127,608dd908,9399be82,9cf31f3a)\n,S(17286c55,3a45c6da,b4843323,84c565d7,b3de474b,5df8ed60,7c7a5c9e,e1cfc35a,6172d347,75a45151,60b104b2,79543107,5b194d24,793340cf,6d8723c9,6320007f)\n,S(3451af9d,3c1492ca,d090bd34,45632ac5,a3e96c9,4d9ed258,b7fb2042,8dd7bb31,dd493383,21236e06,e7284fd7,84c1a3b0,7687c513,927cc79a,cc5f8b41,b14974d6)\n,S(b00aa481,eccc5e7f,cb5bee2d,a6e0ac44,ed9afa3a,5b2a9619,d23d0252,14e5ce2,687b486,1f0032ce,f42ceb7,441f81fa,10d732a9,e7e76242,4a2ca8fb,e88866a1)\n,S(53ec8e9c,c75bc91f,f248a239,34d735b2,ef706d4,c0761e2f,a8a55c7e,a0b23311,1b11dfc0,63c4b1ed,1b5104e0,15d5c5a8,c352f54b,9fd82768,8b5104f6,45d45919)\n,S(1ecde1b3,9c072c9a,3b3eddd8,d71e3383,2fc80d78,7abb70a4,cdc9186c,a5efab66,4f5aec7,5a799762,b70cecb1,82049cd0,239f0c30,948a25f3,daae0bc,ae6dd626)\n,S(1fe2fc3,702b558c,7ab9b479,fa08efa5,1e90239d,677052e6,5afc8754,9bb1394e,f6b586ae,3a395d3a,c216df2b,66d48fe6,11a64c0c,8a7db26d,30fbd720,c6845c2c)\n,S(b53d0b2f,b8ac2ad5,582ba0c2,f031c7b,76e64cc5,28a5b9ba,872718b1,e06d5dec,8984e589,51ab87aa,64bb034c,17d23252,4101577,9476887b,351f034e,92e3a289)\n,S(54e516,3bc2366,673fe5d8,1f335d81,a06ca310,a2116ea7,bc0ade12,8f37cf95,f471c826,9deb2c2b,f1b7206d,6e817355,9236607a,4b9930b4,c5b3a781,7312bd4a)\n,S(e7efb772,a1d423a2,d39e2224,4c8bab91,3b8087ac,65d51f59,8c4db283,67b29a7b,f2dfb586,31d08b0,bf2b47f4,17f6a18f,704a39a0,a152e3bd,587e45c7,93a9b6e7)\n,S(5ec59daa,e8a263a8,2afb4309,79ef0321,b163f2a,dc083e67,3446b98,d0b519fe,2eab4cc3,6a3deae5,30dc6aab,94e5584f,a8a5316f,5c05b04e,84215ea8,79ef82b9)\n,S(427b5cd9,20589dfb,dae975c8,efc1f098,1119f69,c40d1216,58ccb903,d4bb62f5,d055e6e3,b8794842,4162803c,35fca878,6500b5a3,6871b18,d9846866,56d1213d)\n,S(54954b15,fc594f3d,8f422c7,9dd42cb8,2cc30dd8,c0d10736,554844ef,9d05bcad,86a7cc65,73569c20,2aff8e04,21a00e4a,9c6b88f5,ebcc3975,64b4734c,f735373a)\n,S(ff6f8f8d,23670fbf,2a1aa7b3,39568653,573eb480,67a2a1f0,1b55a1e6,b1f32559,7a53f1a6,c7cabc57,d731552f,9fd9447,36cd33f4,3f8f57cd,2d4ac1dc,1ac7e218)\n,S(74d725e9,9021c210,e82d852f,41e0cb8a,3bba8efb,8a01552b,8420c265,958a2381,4ee69646,aa9f70bb,883d6ca4,e1016dd9,92f18de6,26ca27c,aeb5854,f5bb2bb0)\n,S(e9439f7e,fc0342c9,c2d68fbb,c58d85d9,feca0570,d77448d7,6d3c3251,e49c845b,27da0d98,1b7e257a,eee90b45,9d0d7065,566667e7,a9287592,2031be02,3e233916)\n,S(9684a48d,81a60856,6dd26622,b3ffd133,5facb32,9f2c4f1e,2c055cb0,a5c0b911,92038ad2,50adfbaa,5d587c31,f5e7b4e7,294bbd25,e7af1816,1be3532b,f24e68b2)\n,S(1d003af9,469e26e,c7f0f121,4dc58728,9e4cf837,5f9d19b4,16277c97,1a0e7609,99c7c3a5,30822c72,b31dad8,146d2604,ed795f1a,7c37e139,c84afe9e,f71e5123)\n,S(f96468f8,73cfaab7,76c32fa5,89f72c09,d680abf,c601642d,1c649ca,e197a149,1ffb4bc4,8495d31,b24a7ff3,353857e3,b6708186,c18936e9,9793e4d4,fa083b1d)\n,S(b6ad4106,e30294d2,bcac86a2,131150bf,d93c14f6,51ec65f5,32904412,b3f89d32,19a366a6,74279641,d055201c,c4c42b43,4fa40792,90c1c3ee,5db2a4e6,38d228ce)\n,S(875472f7,190bf305,9120fec3,ebb69fb2,2d47828,6cb1c108,a977e7cf,e45b9b9a,1adeffc5,f5dc59ad,e15d163a,95f8049f,a172d8e,30544562,50a7898,55a97c21)\n,S(5445a9fa,f4245414,e64f7ae2,a1cb1b1f,54bb6fd5,af4a7407,4d9eeb05,9a27a670,496c5207,7da2e082,3e48978c,a3fb7a1d,3bdf07ea,61fde94c,e87741c4,e9418018)\n,S(dae18625,704bac88,51f35026,7856830f,74d3a8f9,7c1f662b,f4c4cc3d,7814d138,abc059fd,7ba90619,83988ee6,35ec835f,c20f62fb,c68e2bff,373bda91,3be6f87)\n,S(8a088f12,e8523de5,c7ce659c,107e1929,3d009b81,1fe94d02,deeca893,9d9845c9,4251212a,fb8ebb76,5d2d703c,bc18b208,41f8df47,fc5e44ba,ef7b0f76,7e29114a)\n,S(d78f46a8,8f3b08d1,334ed25c,78f57910,716755cf,2bceaf6e,c25b52e4,d7af6d01,eb1855f2,29cb2010,f20b3f01,9cbf1b2d,929046d3,242446ee,5c9526ef,5b06f44d)\n,S(1e0b4312,78ae0e27,5e55c4ca,cfefcdd6,f589809c,6faaefa8,3ec0d5c5,f99b034b,f38c53c5,544d3ab4,2ebd74ed,b8348503,fb523fae,9d73657,8bba2881,904918a7)\n,S(f03155b2,9edb119c,f411f14,4a588f34,ab02d7f7,c415638,cd534465,ed7cbbd1,72d153e3,ff4fff14,b41d07cd,31960565,31736749,7f9c6495,599d3f06,b8e85813)\n,S(f61fd68,3edc7fb4,d14c84fe,3416654b,8df66578,6d0bab41,53a96e39,e5de4c8e,952db567,cf0913b1,885d6884,d260fe4e,e11fc139,f58da12f,d38472e3,d42e5f92)\n,S(78310e7a,29e437b2,5cb00e3b,13a4d86e,1ede6d8,4b1f344d,7ee9c7f7,e017dd77,26ff358a,4d5629e0,4c20f700,97c202d4,7030bd3f,43134a51,a7d101b6,e182f2d2)\n,S(63ae8c4d,6b7329cb,a61509c2,d0b61ebf,4e6ac94b,c8a096b9,7a4027e1,1f781a3a,a8e954cf,bf407857,d19629cb,338a93a1,af16c929,ef8b96ce,2e483e95,dcd14f88)\n,S(948d592a,594b354e,e2d03961,6338574c,ae662f26,ff79afa9,16579725,7cca739,37ff98e2,5ea0396e,89d3992f,773bd6d5,ce02758a,4ee25557,edc867b,2f1876c)\n,S(653cf16f,a3140368,50b04de1,8bfee880,660a4161,4dc67a55,398e2d34,46100f45,acaaaede,5ff1e552,6766741a,ee43105b,ea4d3419,3e615c36,49c1db35,125a9202)\n,S(46fb6882,8a5edc8b,f24fd1ee,e6a7789,141e1888,64508d2a,f3c511ff,8e8cc782,9d4ae53f,d52ce9bd,6ac9ff4a,e82c2e36,f4d26698,47ec90cf,ef383e01,37fd8887)\n,S(5f11a0c7,23ea2a71,7c1face2,b4b0f28a,4ca44208,7a2ae0ea,e24c2005,7138c0ed,5ecaec84,ad97612f,ba7925dd,f126e4e6,3906eacf,6f991d5,bb273316,b80c8452)\n,S(b9f49e1c,929bef7a,6d6b6b3b,deb10890,dbf2ba3b,3eba62c0,320bdc84,c2a9039f,98729e76,7e4f8b7b,bd0ecc1c,534aa030,6e1b684c,6f42d15c,2bf6820c,b501e558)\n,S(ec8a102,e7d2905f,f273eea7,6c9a4608,965dc2b0,3631d2dc,63c38e72,15ade2c3,d8c899e7,242d96cb,49383686,8f671612,706ffe5c,368ccb6d,be5a3edc,f74371c0)\n,S(107f02b3,c351805a,6c92a3c7,742a5259,582c5b0,39cf6daf,cdace604,2be236c6,517236bf,1ab47601,57d74685,8dc724a7,c5c2d55e,82c4a3e,685f389c,a99bfb9f)\n,S(f0fb14a1,a5c1c016,d7b8c1fe,a8317872,b10d637a,daf6f6cf,b9860653,56298971,e1d9ed14,d33e65d,4258e87c,7280001c,c40b89ff,b3164337,92fbc547,964540d1)\n,S(a5371adb,ea784ede,f6cce83c,ebde068,78a1c80a,ff83b47a,333f9b35,44489459,f5780572,127f5d74,773acbe7,b2a22cbc,7e3d09bc,ccd13edd,48ece3f2,c8129224)\n,S(3c031e5e,1b0ba576,13c10971,5fa7d92e,2bbbb817,9603d3b9,99e4fadf,be17300d,d275a3fb,392036dd,474e65a2,cd7b6cc4,79cb40d7,1c363e6b,bf9c272e,ae9c83f3)\n,S(87b5899e,685db530,a0969a68,9392080d,f8a1b9ae,523ce18b,2171c69c,5a5318f,6ae3204,e3f0afa5,a2d40b01,a42e84d1,1b1166fa,f99cec08,1f5af48f,fda775d4)\n,S(d9f077dd,c002c16d,f9d8eedb,56b7e7b1,ea00d04e,3fe838dd,2ae40501,9b8bf74,6518d51e,503118e2,53cfc486,f70cb9ee,11c27302,ee5512f2,78f21265,af3ffeaf)\n,S(9c09ab63,8d15acc9,609ce305,32277f63,7558a492,aefb98e,c9bc721c,f8921af7,b2cac58d,535abc10,8bed6ab3,165225f1,bf2f84a,9fbdf3d9,1caa4b79,e0f6fc)\n,S(6ed1ef8b,4c2d9232,5cf8948a,5c369a24,52ab250d,ed0e48ae,1676dc73,9a8a7fc0,c1b7a08c,2cfe5154,fca74136,863da75a,5c6423bc,1c904585,f54ac87e,f6742008)\n,S(882e8d70,154b7f6c,279f71c1,e2ba6087,cfc458a9,3079d8f1,3fbd3be2,506928d1,8949b22e,97c41872,9094ac62,e67ac1f2,8b31565,edbb3d1d,9b23a73a,6fe64131)\n,S(708472a0,24c86ea0,7119d0af,b2509814,516840e9,fc23246a,a6da139f,b37aba52,9809b7a5,1d551532,a5b378d6,594a3665,3a8b057b,80cd530d,b7a53fbb,128fe5ac)\n,S(3a44fad5,9a8b708,4ada1250,d8d08353,769d573d,71a225eb,d87a8cc3,af9fac3e,f29f4551,1250d0d0,a1974bf8,46124813,f9186e45,2d3c5c85,cb0c69fb,4b7f20cd)\n,S(a3519dd8,e09e1bd4,160564c0,41c23362,36ba4c84,5899f90a,fcc370b3,cdfb9f30,64cff159,7c910711,d0199faa,6c74d08e,7150088e,34fce674,72dd3ec6,1b881d7e)\n,S(5af16ce3,765f5c96,4eb3513f,19d99ff2,bea1affa,d68f829,1c4f0767,5cfcf1dc,864eb5,3bd711ed,4a842db6,b0164a78,511ff7b8,a87aa3dc,1f2402eb,a3815daa)\n,S(1ff9a522,19cae5c2,5de1ec08,2641040,18848bd1,37a5949b,4021c2d0,563d54a8,546d634c,122276e1,b5cfb919,a5374309,8f85d7dc,149b14d4,791c83b0,1718e031)\n,S(d7a6dcad,72a51ed8,f84926eb,cfab368c,7f02fcdc,aa66482a,c6b6dd6f,43d3e938,9a273cd6,3ea6ac86,5a68f378,e4466ae9,8598a058,6c97278,bde63b22,14e41c96)\n,S(154f63e5,5bdccc7d,a696dfb5,2b6cd4c6,3c874b93,1f221282,3f4a8d19,1f32d797,e98f9722,17bca1c8,ea7269b0,d2aa6bc6,f0f29d7d,b340c67a,2df59135,77f76fae)\n,S(f6ade08b,8513615c,ccd29095,c21bbdea,dbdbb7da,87ce9991,c27ec758,4c399bf1,98c81be0,19fccaba,131af074,b28a6311,3fc1c5ca,1318e96a,f037ad33,8f234ad1)\n,S(9661cec0,3b2715f6,c6d29048,65fec2bc,b786b3f6,943a883a,3e51cb2c,c747637e,eaa1f7d9,9b34104b,74a8056a,9ec739f,cb9c3735,95f0b254,7fe75620,4f5358bf)\n,S(e0a5323a,27d608c7,34c03465,f03705c3,480520cc,f5ac777f,53d498b4,655d19a1,1f727d78,a8b8c562,ebc60679,8462975f,63d88eb5,8e7cbaee,836bd629,260cc606)\n,S(bab82efd,4646f2,f281980d,5250c6af,8206e95,dece4118,c24ce31d,282f6409,2a60b1dc,26a20126,8df8375a,5656c55f,cafbdbbb,46b7977d,137cd584,8d1fb82a)\n,S(389e1399,ebbe958b,1806e9b3,ee51baef,2d7edd20,79e6a2c2,21e814ad,e1eb2631,6c158633,1f3cfe45,9e71fb4d,112a624c,e48adabd,435e6fd5,2c9459f6,ce9ae2be)\n,S(b78179ca,c0dc553d,19f08174,7fa4511d,87d8961,1ba44045,8c307727,729d4515,7020be98,c496a50,6e4caa5a,94577d71,ce0a80c9,bb974c97,a6892351,e83e0de2)\n,S(867ecd3d,d170f9a7,123d13fc,fd90058e,baa6a6f4,12ecadc9,f1e14d55,ff104306,3c0db3e1,bb91ee23,8fb27689,79f2b543,d698c5e2,fde48dc9,e2535e4a,946759bb)\n,S(be71654c,26a1025d,41fd4d08,384b2ccb,db25bb2b,c15704e5,697be2f6,d4eecd38,316ed20f,c37a2dc7,a0af8d18,e4da0efd,2dcdaee4,44b2c1df,cdfaf6af,49406afa)\n,S(5a8e1cb0,24d62685,e755b9a2,ad1e0165,41690544,7963dfda,6b6deba9,76e9079c,4c793173,743330de,7a8f4351,68dde95e,3889db2a,91de0a27,d088a222,f11ebba7)\n,S(3bfad00b,2347bd0c,f13a761a,d0630453,bb884d0f,ae3d31f8,57216412,b82e6131,ef33c560,94157fec,3f7fe8e6,36d48183,71e3cbab,6f5b0518,96ebdb42,aa545f61)\n,S(2447ede,684dce09,c896c2d2,b5c68cb7,60e02635,3b4f2dc7,428191ef,5d2c1961,ad38a82f,e80f860b,62b39e55,44438242,5ad6cb54,d6e7f377,62427f30,1ef7bfcb)\n,S(a5eae321,eeb4b9f8,e8807e49,ba8de764,e7685f07,417c5239,9d857d4,8bcf985d,2acf8aa9,f5c1b7d3,2ad5f523,39e65595,17881d,48a7696e,ed3b1023,ab4def1d)\n,S(97de995c,5337d938,3cca5b97,3ab05e8f,dc035e11,5c435251,7e575a,e890b13c,4fb2d969,2e308a29,34c3fb4d,c4dcef50,9202505b,cd891f79,e8f91210,e069e6dd)\n,S(b8caf25f,a864918a,f803dad8,d0abdf95,25b70f44,546b1f3c,c6b1726c,4438f479,7c51b5fa,c0f56eb3,6ffa8c5a,76c074a,c30e2f36,b069ed79,23663da,c9c05c9)\n,S(b5bc868c,1b96e2a1,b24f3001,af140107,b2cade8a,5b1f3443,44521764,ad07b2e6,8d6cfe29,4e929f33,d5aaa456,f545c33b,672a8c07,b214a6f2,38bba367,4938d639)\n,S(5f51587c,242a3b22,10db666b,f2414c28,32ea2662,1f13f6e9,784a8a1,373ff602,2c3b260f,ebf20a4e,b853950f,99ccbb9f,1b39418a,66adb427,f5886944,8b46c858)\n,S(1d0be0f9,5009a2b5,12a52e17,e044f3f7,4f08e695,60d0dfeb,822b4674,7a2bcfde,c3a82bc3,dbd81877,3783181c,f7b81ddb,a742c3b2,4f866538,9335ce4d,8f3a159b)\n,S(3ef0ec28,b8003331,a6621bcd,6ce30ed2,9e0e62d5,b492592c,cecaf4bc,8d22fb8a,fe2c84ad,77d40e86,c92a03da,e43cc7f7,512fd363,98db0133,7d929ba7,a144b16d)\n,S(84c29a24,a4ec04da,c76bef42,732a3648,f62f12b0,e7f0ead3,2ef9649,b7555fc5,e7620ebb,283a54a7,10eb454c,f22e49fb,929ec453,38e457ec,b18a7f0a,794f970e)\n,S(6bba6634,e75d5fe9,21f40f4e,5f1c177b,a309cd73,107f1e9,28331573,eacf43a8,33ffe08c,42168243,1f086b44,12209c56,5b47fdea,54671a97,9d86be36,fb421582)\n,S(13b67af0,51b0c01b,c49a6046,d9e5b6ea,488f6298,9559dbfa,47cf1674,6def0150,d0e8914b,1c1bf0b,5337cc35,d84acacb,a54add59,2321509e,e29f1d93,a0237608)\n,S(161221bf,b5dcb62a,ebeabc94,6ccc4a26,fdf779cb,63640720,2c5cf13e,93af9300,d3fde2c5,dd9d6df8,70a66bd3,2b5213c,d1a212db,61aec7b7,2a49b7e9,2cf83b2c)\n,S(30c5360c,c62f5846,3af60277,2b52201,7eda1fbf,866dc3d3,9a590bf8,e2eb508b,c8e91af5,9b9a2b,8837dbe8,edeac615,6c30e8c0,1b7679f0,1aab4a81,cac44efe)\n,S(c0659a7f,dd9151f5,ea67f38b,7249727e,640364f0,87371007,a38b800b,ec3576,a6f648cb,6fa131c3,5458b5a7,77440361,8c57faae,1ca33ded,648f1601,a5cf47e3)\n,S(3215224d,b795a892,446472a,8e1ab1cb,7d50fe95,a6844be,43e2787f,2679386,25750662,97f28d86,690c7eb5,92cffc5f,faba831b,efc3e38c,c5e501f9,358a9bf0)\n,S(257654e2,a87a7048,3bd15445,da5c554f,fe776264,998975b3,b19a68a1,a1871145,fcb9319d,c67f14f,9d7fc4ee,fca05b18,9efe2430,96691043,9c28c88d,32636ec5)\n,S(a4786a01,e504f154,f3d7926e,6e6908a8,17c8a66d,6db33e80,ce98b17,82f1b49,576e4d42,fc2e4f9f,e81a2967,8b7cfa7a,7f86e8e2,662afbfd,b028612,d323a2fc)\n,S(5140f7a9,260c9856,4493ae62,a8af369c,90b484f7,e82e1e38,3c5a59a6,62db1e71,4e5172c2,b0879dfb,63a6aa92,cebf9153,94ddcdc0,985261fe,2f64714d,350bae86)\n,S(f559d60c,f0f50b7,9c7d6d90,18a579d7,b781fe13,5210d342,31e6cf32,4ca66dfc,12d9ceae,8e5852a5,ca95fb56,abda8e42,5f1f05dc,ca29e08e,2052bab0,8d4eed15)\n,S(88907ff5,fa2d01b,c970e0be,53a05354,a4fb73df,9a337857,cc869a1,b0547e7c,f5853b56,cc1211b6,427145f2,6fca6aaa,5b26401b,c00db73d,ab9157b9,7fa3d2f5)\n,S(cc1e4bf6,4541506d,8e91fba3,1e1d8ffb,c8ac82f2,4def27ec,fe4b3ea6,e58c45ca,7617497d,a875183c,684585a6,306956d,1efcf1db,2753fb77,5902a63f,38d27592)\n,S(7ee2c437,ef744210,5b6a6f9e,f1edde01,6c39557c,93454dd4,eca10daa,cbca99d5,21754734,5eeff5d9,f30503f6,9515da57,3e6d7b70,dbdee5b1,8274968f,6f3772d6)\n,S(72feea2,39f9b4a9,a3f3af3e,f6bf420c,3605ba4b,b42da90f,6539e05e,33e2465c,a036ff,df7adedd,c8c2ad9a,d029428c,85482cd1,6b0cd20a,36d2aed9,e9f553cc)\n,S(363da33e,94a0dd00,669b627c,4d7a3a6f,c8a0cbae,2641707c,938c8f5e,99914a,9bda9a77,ef1307a4,e236099,c1506f47,a2f936dc,d478b59c,3d0e98c0,7af58bd9)\n,S(76540864,c8394290,9af4a48b,bbe05fdf,93af0f8d,1ec9b6e1,a7e91860,f2c133fe,f06923d7,738ceb02,2213a236,daf3d6f1,b3cc98f5,a5ed4845,83ce5c3e,54a3ecc2)\n,S(573f0821,7a318a9f,8bd945c1,62e9a4a2,51e38189,34709606,c94cb401,f2b239c4,7e78e4f2,7de69e4b,948b105f,ec3ebd14,496cc128,d7c73fbe,7ca1d53a,b746bef5)\n,S(8537981,89234b93,b5009656,f57e5ed6,f90d2184,819a5467,213a934e,22b01f5f,c94a79e8,cc990998,e1c69bbe,89ccefa2,9281fc0e,c99fa820,ed26f01f,62e475f8)\n,S(53388512,29890336,3b1ccd4c,1cf0ed85,6f00a30c,78004512,57f6132c,edeb6041,d56e2a52,f856d1b9,a4f8feac,dbc9a844,dd22f55,469bf722,fd78b44b,6983334e)\n,S(41ede48a,750ef7b6,5c49f913,afb98961,c5cb478c,39c4c85,2f33aaae,b0e4796d,d74c7bf9,4b6c4680,18892ea7,f04b53c9,4bdfe9c,d1a4c65b,8de2409c,32559de4)\n,S(97e931f3,6596f736,992eece4,eed6a9df,fe762139,3acffeef,b6dd3b53,e5f08148,3da89933,53b9c52a,9e76ce7,7404fba4,39a24614,b62d42c0,9b660e2a,14dd5f1b)\n,S(4caf4eea,3ca8b104,39847633,5252b37b,5c55b664,cc4979a5,4db00937,b222579d,c266732,a93bdc0,7cf88580,771d58a3,45a19100,4c0d1464,62171cd6,291607bb)\n,S(857c1e90,5b3483c3,3ab24ee4,e51e3839,b52960f8,21a8706b,b7ea7c84,9e7b1ca4,8d6e9d0c,7a578771,b358380c,4a2e6bc5,1c6b09fd,e9b40c01,be5915ba,fe69dd80)\n,S(410ef70b,e0dbf7ad,a68fc124,8dcba3cb,10ec39a4,9686b22c,1e7ed2c1,bcb5a182,d26e9ea3,331a56f5,cef074ae,e0b4a5c0,e6925d79,808ffdb3,b7cb9423,247f9e94)\n,S(8caf87a8,c831eb10,817e5ec3,7aa431a,89dff6f9,a7e63f7a,30710419,5751029f,3f0bd6e1,c8dda6c3,c8e65ba0,7c3a4649,13aad207,3c5da058,bfe90872,67c8890a)\n,S(eedee2cf,e92d2483,54a6a8a3,9d314fb1,b35ca18b,ffb9b779,8c16d5fa,fef10e8e,cb515ab0,21f0befe,4b31181f,3f9ce1dc,9fcd12c9,6793d624,c1eb35aa,e514c4c3)\n,S(8cbf7ac7,1e77b7f7,7bad6a4e,9116db52,48bb2a75,744d4312,f02eecaf,2aebcee1,765c4b31,f67b26b5,3d17f97c,30d09636,b6f6697f,db6b799,169a2c05,779b7320)\n,S(70cd45b4,cd449aaf,34ff0627,f0e01122,715dc6cb,98642dfc,c19fc672,54995db2,82e59456,761497b1,84320eac,3ada16c6,ee184ad9,10b60c41,20f0c538,2f535c8e)\n,S(cfe217f9,783fcfd9,1e79d558,e37bec3f,50e5146,e0f442ea,702fdfb,6c7c45d5,537cbd0e,86453fbf,c57d70d8,78c7c3ac,da225186,17bb4dfc,7b6f7079,95c419d5)\n,S(9826c0df,6486bb8e,2bf3d4f7,4cfafa71,ccabd2cb,12bf317e,651790f,48579d52,3dbf3586,f86d6253,d3749c05,2fc36d16,ae3bb457,8d4eeda7,34f172dd,b9c57342)\n,S(ea18fcef,381b4bc2,c6b3fa3e,3744e9c4,a13e13df,576c8e74,d0f4f596,e28a02c4,c3e6bf9d,2bc445d7,87103c7f,e595a30a,41c9aa4,c41d1874,d7ffe69f,ee09f397)\n,S(6de2c465,c09d5a54,61c618be,c9c16ffa,21b82e5d,673033a0,e88cf90c,fe6d8f4a,367acbd2,8950882b,428a8199,d3b21f5b,e1c4ccb0,3280bf5d,28b65cf2,bc4ee2ba)\n,S(d6286e13,ee10c7d4,5ae50f80,3d1a5417,cecc9c68,9efd2847,6ffa73f,1a183f4e,7ab92bb7,55204e89,c7e3ca41,1c829e41,e965ab93,57db88ad,37f13e93,6aa56f56)\n,S(7526e6fa,ea67460a,25525962,fdb6f209,73f0c861,ef3c364d,fce83df7,23c3bf58,2c76a8e0,d5a8611b,d3274411,cb323751,25a21fac,12e35ae8,f008f48c,18e3a674)\n,S(fccaaada,56d64a3d,6d1d5d89,719f51f6,e737c803,893e8b2a,b785070f,8879308d,8262c566,3facf792,efd750ef,a969fab9,a2ee95d3,fe6e7d7d,8685c6a8,479362d1)\n,S(b60d13b8,eb8a5f43,cc448379,7a397847,bd6d91a8,b3a6888a,fef4b115,59b57fe3,abf73ebe,5d2b8585,76104acb,ec885f1f,8405b053,3755b8ae,94ecf838,60ebaa54)\n,S(332d4b0f,4a0dd872,ffd6d2c1,4379f925,4250fd66,dfaa2d90,127e6ce8,c377f8be,37f3143,47c2350b,f4333d7d,9e0b17eb,110dfacd,d87ce354,b7887cf3,1bc6232b)\n,S(e99b2ee6,2ce6d633,1e0e880,37bd138e,5d021620,b555b94e,52def87b,4cc5788f,c9ea06fe,dabcca9f,6df1df26,8bb3e550,e2858dc2,b91a7c6d,2c048416,4e5546bc)\n,S(89ead438,2a977aee,7fe692a1,d7199bdc,5af24191,e80573b1,dfb056dc,49c54353,b572ddce,db2d776c,2a967f70,6b7010ad,7fec43b,ebe5f19c,2de0f9af,d9994ece)\n,S(cdad98e,529b413f,b46f6fa,98c74058,4777baff,b090d488,59587b4e,d598268f,d405a95e,543e639,470f10db,821f8786,ceabc281,788b0cac,3efee830,bfed034e)\n,S(5096ef41,1cc1332b,e67f69ad,3cc3140a,c269849d,5e0f4f5b,e41290e4,86ee2cc3,7f33869f,ccd4b06b,ed61f312,30a7b3f1,49ef34a6,f2d46bb4,18c45343,73f8268a)\n,S(bc0bea70,a0966734,8607253a,2c8be987,8c4d59ed,638ecdbb,8b9f60e2,a4a5be61,e19111ac,3c2b4e0b,4a86129,e6c4c275,54d1ff0,29ddf320,873e20cd,16873b78)\n,S(2d166569,ac8f5a08,e0674d3,8aa7d747,b024bb8a,5c8407a7,dc451403,87223ec1,48af1b38,62216a5f,12a7d92d,4eec4e59,445c1587,e22238f7,3dd1bd77,e19a597a)\n,S(b8cbcfae,bb8b1150,ddce37b3,26ec77b5,2947cddf,e3cf1d40,f27e8b7f,8145ba30,d5234cab,8b2ad2dc,8630ec02,2868a1e8,ffc2c3fb,cd5f5a05,62b6fddb,34823ca4)\n,S(fb396092,563f12f4,ddddb9c0,f1ac19d9,fb2e3ebe,608eea22,7a9aaec6,dc960ee7,65e565df,fda1a394,3d27f661,c2eb01e9,646e88bb,6943953,58c9e62e,c9823c45)\n,S(1c6e9d76,b8dcdfa,90625150,db2274b2,f8da06ee,21000225,80affa54,a414b297,706b450d,9ab0b0,5466edcb,bbed8b10,85679fb9,78d74057,607bc2ef,a5666255)\n,S(2e043dc1,46ecff0e,6e566b13,d985cecb,77f55a0d,555e0277,dc660351,b9fca1c3,1c4f1ca,f75ceaf0,a051103b,90a7abf,665da500,2aac4e14,28a71e45,726d8398)\n,S(5ae17b0c,a1bf8e90,e663ee12,d97d7855,9549f9ee,2d89592c,b4b0bc9a,585f482f,bb0df734,931700bc,73c6966c,1e8e5a77,a71806ad,88d731c7,16f236bc,b4fc8111)\n,S(fa8bf342,6a24c3e5,d3c11c46,e75eda94,fca910df,c906a71c,1b08f468,a7caafc4,ca69817c,db07fbd9,e35e6c84,65b3cf05,4e2884f9,e57c0043,5dcada4c,2f5954e2)\n,S(2cdff1c1,846dd7f7,b9df67ae,a3f4394d,1e1031b5,de7083cb,f905afb,991a88a4,4bbd724f,3827e42b,7d0530fe,de304711,6ea0d88f,8e564d3b,507ff3e2,ef76f39e)\n,S(6fadbc00,55ca49ec,afdf82b2,96504f89,c5bb8291,ca942df9,5f5b3322,9d3b6905,f7671184,33a8326,a56f9472,8c411917,911a3053,f593e868,c06f57ef,54b7df62)\n,S(c514695a,2f26aa40,dceb15f5,5d5ea8d2,6f4a1e06,12591fca,2f5a00e4,b8dd0841,5056ba08,2e78b06a,90937567,73fc4ef1,652905b1,16d8fa6e,8005283a,b113266c)\n,S(83dcb8d4,93474f85,54c368dd,3e188c11,aad758ee,fdd1f064,66c11e16,cb7ff933,104e5b3d,4e57192,7c67a029,e119e79f,d6ed6fb,e61e288,e9f8bd84,630a53c7)\n,S(bc65cf8a,cf9a0b26,43b69089,565f9a9,5f9ae882,2e2b1127,a8bcabb1,fcc8a93f,fdf9716b,a31ddd06,a080ac90,f6699b78,23ff28c1,155a79c3,ae9c292a,14fb2143)\n,S(48778fa9,520b12a4,12d74b47,65ad37a2,695e37d6,4070d53c,1e09cbd2,4c9f140b,cdc64805,bec15940,387b4c02,bc51b469,446dd3c5,b2e35b39,fbeca21d,769c373e)\n,S(9db2c42c,6a735886,8edc8831,2ed6873f,28077bb5,32d186e8,41f67ddf,a301dc25,e01cb235,ec9db45e,e1193e06,46a325b0,aa0ac5d4,786d0ac8,56990262,bfb3a0dc)\n,S(cbcff58f,62bf025a,43a1ef44,256b27ff,37c6c8f,2496d2ae,fb280734,9cf8da6b,4fd99ed5,2da32753,3a9251f,e1e136bd,28f5331b,c1101da2,818de6e5,3bb1896d)\n,S(9d520b97,87e68c45,817a12a2,93b1df96,70cbcf3,91788270,93367253,6f4f3639,615e115d,2b539895,d91885ca,a325625,41fec07,9d8fb6bb,22d9ecef,b6bc0f14)\n,S(c648ddc4,57c2bc,bc23d182,8cc6d6e,4b0bfd3d,f83b2e7b,3ef6a341,9225dbbd,ac9a863,38dd1966,9bb47e99,e67a3d9d,ec16fe61,dc17ecaf,209a7fbc,518ab3d8)\n,S(ae11f835,ea96f767,afde3f1e,79221dee,b80ead29,7b45e29a,7e596461,e82137dc,20453bec,b65a62f2,8996e1b5,f1953acb,4c5dfee5,4e5f9a15,c2a2178e,4c452596)\n,S(a35549ad,56f8a64d,d23b9293,d8ef5128,699f6fe,365c0fec,29280d0,a364d46f,c84041cb,a38c9981,3015ffce,17ffece0,8f55a292,3c64868,f11cd6e1,bfbbe75)\n,S(75877029,af5575e1,8dbfaef,37dac89a,2aad8308,d473a64,9c347097,e35f8077,843b0497,d19851bb,ed243762,177cc69,603cd674,216cd65b,2e5a85cf,5fc2b8b6)\n,S(44ee3168,ca7ffd50,c467b1f6,83e532c1,ae00b9e9,f2eb1ca,917607fb,32d4ea99,10a20ea8,120b5a13,beda9f9a,9110eef,22564e3,9b96c141,1e73eb7f,c92c3270)\n,S(9a013c89,8dafaf0b,90678f92,f3bb98c9,461e4595,42cb07d6,477b6f66,7a5337d4,11f8485a,c96623a4,e6c9b773,f5cd9fcb,fec396f1,ff53205e,8774ba1f,da3c2a73)\n,S(b45e28a1,44d54182,20819a61,5f50b349,3fa12d17,2b8b5bea,83e73d69,b6b47d5c,d987db83,ccdacd21,dfff1dec,43997253,fb1c2092,95bcae4,5b76c306,92c29f4b)\n,S(9e7d6a53,49845888,a8865d07,310192f8,9a659205,1d2a603,cdc03d35,a641a0c9,ca1774ed,ace29fa7,f57e5690,b4d1c0b2,ce5f1fbc,b21fb323,3c001498,54f462d9)\n,S(113a1429,be1b613c,567b306d,5805c163,e433a940,8ef14b01,b9afea43,54991f47,225ee5fa,6d26cbb8,49191ec1,a51e385c,321e801,9152a3c7,50014567,7b928697)\n,S(32ec8dd1,2cf85df,931e2597,f6b005e9,6d6eb0a6,d0dd7964,77655d71,418d9181,fd718dd0,78b3e4a5,9bef7f4d,9c430764,3423bc05,e1aa22ab,dd7bbb,aff9d8b9)\n,S(ada43267,f2cedae4,5e1a5f1,46151f89,b145db70,ef477865,b1218e91,72e9246e,d148bee0,4d1f4d29,f9f15c57,8b047469,16e39686,c2b2ca54,1f3e0d4b,247cf82c)\n,S(818a0abe,debd74a6,91fe662b,edba1a52,65f5ca07,2017c6bb,bf7b9847,95bf0cbe,e7b2d06a,1872c73,6988da9b,ce273b7b,ac0f03b,90903bc8,da719ce3,89c0a53)\n,S(2f49eb55,ef77da10,804c1a1b,f596f09e,ae76026d,f2d12f14,d80be810,7d0b3c94,6a225810,2f1118,eb689aa1,e6d4ced1,1a79036b,802caffa,5694e383,3e038b83)\n,S(7fe54d70,54cb025f,6bef8029,bedbd15e,bf66d5c7,986c678b,a5cc5353,7afaf74a,fdc617ec,72ac6632,6d16afb6,69188554,a47a82fd,db757695,2296c10,b4ad89b0)\n,S(84f59366,2b8284a0,c9db8675,db9c55d7,411ec9ba,deec1319,56aa3f75,8eed2689,836e65d9,6bef6ed7,825119c4,c4511c89,48042592,f41eddfe,4de98e83,acd0d88)\n,S(c90aa830,1a84820d,e06eb6b7,1ccc9bfc,a46b1612,5e2b5f52,da0a6fb5,4185ee1b,ea86d7c0,b285d82,9331e05c,d99c58a1,cc213449,d9226efb,16135237,f90dc8df)\n,S(ffb4d576,abae49be,69f047ef,636142a9,8669b2ad,9cfdcadd,c057d96e,192ef100,3740cd14,b2d5e018,33a700e4,c80f6a8d,3d95966d,a5238120,80a9101b,b7ec6c7a)\n,S(408a8d89,67ad6bcc,eb7ebb61,89afefff,12c24b5d,2c33ca3c,8b78fca,cd403de0,3b761fa6,378cc42e,a28fb66f,f1d8171d,4acd3557,fd6313a2,cdcbce47,e1caecf3)\n,S(580a33f6,153109db,fdde27e3,f1b0ab04,6c80c04f,18326712,3e3482e8,7c53b787,bb8073c3,fddc81e0,e99ac5ae,69702ff6,f70a33a3,5639add8,1d353c0,e428431a)\n,S(2d310a94,7054ccca,c46b1100,88349ad1,4c7860db,38c698c2,505e789f,8344130f,1ea2069c,3c6ec90e,9c11be0a,913d90e,2df1875a,2e26aa9a,5d28dc81,3e3db697)\n,S(2874282b,e7b11cad,3f22f2e3,ab835aed,5d82b424,24697b32,985231f8,6a7aa450,286332d,b2e1b922,222e3860,e41d90ba,cf39ce03,21f26b74,cfa23171,f0415c42)\n,S(af9e779f,f77bf3a0,10af5e41,82b77981,6940f85b,9530eea4,8b36e401,eb6231cf,9d3d4350,dbaf15c9,269d958b,86d6b88f,4deb7083,ab1ff389,c13f7541,98e84c67)\n,S(445edb8d,515ca735,26fd2757,73b2778c,bc93ad8c,a661b35,4471d035,688c1ef3,94917a3c,fde762f8,3b774361,1f36a13e,e94b759a,455382f5,55d64f25,7090dc49)\n,S(e010c20a,370d5306,f89993c,f7ec34d1,3e76feba,2b6612aa,dc75012,701811b4,cb45172d,280d9be0,52d57a21,4cb3cc47,798a6426,f215e3ce,e3af64ff,106fd8af)\n,S(d34277ca,4625c7e5,b1134080,cfb44cd2,ef548b3b,67bb73f9,eed42352,ae5af8f9,a35f5779,7a628f7e,bb37bd60,9e3f44ee,c391909a,ce27ab44,1ece58c8,d7e4a4df)\n,S(be0b9399,3bd54241,b684977f,ea4733e3,d96182c3,c9fb1c5d,d665eeca,cb1d628d,37904353,744ed26a,df76272,8ec41898,13218b0f,5fb09da,dbf5be84,fb7fdb8)\n,S(308295f1,ed4a21e9,1ed9f48f,d6b42829,edd9bd34,e812f09d,c3b2c319,fd8f3980,6835c34d,5c360e1a,49a14c31,4ee4cca3,797d434,897c4181,a8ba5d7e,aeac0230)\n,S(66cfeb51,61aa879d,fd791604,e10f5fa5,c2e07a5e,66a37b41,2b88db32,dc495b1a,a0e07a9b,f8a2fc01,3e229602,b483bc26,5ffba9c5,fb6ebfe3,f9ff9c9b,3252a1e1)\n,S(f42b8fb,849cea70,4cfb3d9d,334a4a11,bf7b3aef,9b55f648,ec885a2d,6fe39ba4,b60621e2,a36d4aff,9f75db65,dd381ae1,f5b0fb4a,bc9f19a7,36d160a,61e8b22f)\n,S(429c1785,22906323,2ecfdc46,2666f8f4,c57b7fda,608cc8e3,85a31254,bfab034f,e190ba59,1a868f57,40bbfcb0,481aa04e,50b3969e,abc941f1,8e69816b,2962af35)\n,S(c8939d7c,94789a0c,b95e4237,fb378ee4,9895b985,6fc67d7d,fafdf7b8,debf611,143aff62,6e94617,c36d05e2,3062d2d4,47feb77e,9b15e2b0,4370f81f,1cad3682)\n,S(5e4155bf,56303243,24e15ae4,142ad81e,2b82aeb7,8dc3ccfb,1d36f3cc,4398ef94,6801f527,2325a3b9,a9f3807f,216d7425,b9083364,203f3b75,ed6f4ff5,eb5da55a)\n,S(1196b198,53f093be,7bbfa851,a7114e23,eb01c530,6078965b,5e9dbd3f,8d1b573,794cf0,54bfee20,d80dea44,d183db44,fe79dced,fef0a97e,5c557fd2,bc628795)\n,S(d818d920,74bb737b,7db8fcd0,168030e3,39803e5f,6b76ba1d,ea836ed2,c73a6094,6ac7dbb5,1f63118a,80cd2aac,fb5f086e,ff15d51b,fb4ccafe,9d96f179,176e504)\n,S(c0276b4b,f5ccabe9,ed9a433e,eae5c989,7039042d,b273ed88,51db464f,b06c6204,489270ae,6349ac81,d481a582,a8581520,972593d4,9b3facc5,fd52efca,24f4756b)\n,S(94b2a1c,ca23cd30,eb9b300b,43d0b24a,b898906,1c4d8a7a,d3343d7,cdd83307,47c5ed56,b709bdca,5b960801,58338b9e,e6e74683,99a50640,6075302f,9e481df1)\n,S(f2aee379,df2bf54e,e4a1c385,c28fb64,9f157d2b,d345995a,66868876,ae7d5108,ae766bae,9c90a1f9,c9079d35,1676eefb,19a7bf8f,bd56a311,13f2dd56,35c8ef08)\n,S(fc8fe44f,3dbdc4b2,afa9cd04,3601c6a9,e81e4da0,456ce222,8306bb85,ba9833ad,6a321b78,a98f52d7,64330a52,ea5082b9,2b07655e,ce8c5094,ce307538,6d56fe15)\n,S(d38cdd79,19a4f3cb,fbdaa3eb,e2ddc10d,7444d04b,5830eb7c,5b8b464e,4c255c14,6a0f1ef1,823a2fdb,94a311fe,cdaebe7,e1904095,1ddaae6f,1a565551,2c8c15fa)\n,S(ac02e6f6,13d8690,d0c71943,a26b5e9f,916ea119,d7773f4c,14247538,9a4b41f,eadc499e,436b4eab,bed9c5e7,68fd2f67,72659819,437708f3,99531ba6,c05ea2b1)\n,S(3948b1a,c36bd462,ac7b5cd0,7076f9ce,dc6d1a75,1ff65177,d7d9b701,d06419c8,ca91fceb,a01c03c7,ab141ea7,1cceb61f,72d5d18e,77964bd2,732bb95d,191765ba)\n,S(4c7dbc8d,21d600da,6dd4c0c2,cffd8842,ea9e73d0,5dbcb554,35e31971,7e706e9a,86a77f44,b87b7abd,29c2f412,97f7e859,6db46ebd,8cdb442d,35dc17f5,278230fe)\n,S(75228daa,b3825e2d,9f8c2f7,a0743b0d,b7dec731,d9df5e06,98ee11e4,8244f623,963c2987,e122f107,dba37bdf,ed282ea4,75e33665,260a5aa4,51021a88,780a1676)\n,S(aa3a86b3,2ed2161f,8f6ea92c,71b7a47a,b584a73f,102c0147,632d2c2b,e80a579,b8fe249d,2b4ec64f,dd345d3,210244d7,f7e517ff,7722c2ab,bc4601ad,ae4e6cb7)\n,S(702b912d,9828039d,a58b992f,7d6f3af9,4c03227d,3d3c368a,bcfd3164,193f22f7,25892c49,3a32cd78,130a4e14,c714cc7e,b576ccba,396ad36f,71de5c42,c6bac387)\n,S(4ca10c88,6d44bfa6,2a221dfc,10c57011,269f703b,8f6f3567,829d3b5c,9c90ba75,3323eab2,9282e358,d4de6f27,72d77db3,95b04a22,7f0374b9,dac3ecfb,4ffde3e7)\n,S(1619ea36,30da6972,2caa436,2c174efc,f3601c35,2e946d34,2da56738,92b9c325,22ad140e,13b8679e,a6d88dd6,148ded7b,a1c12697,91c7ede4,b98a72f9,f0e881e)\n,S(21dfdc38,18debfb4,9cd409a8,a302f8ac,64d589ba,b65074c6,365bd398,d34d3032,bbbe7ec2,e835204,a786ddcd,bb6026e6,106d193e,21725c45,79eb17ce,784099a9)\n,S(60fbe5dd,802f1ab2,cbae99aa,12cce0ef,36a472e,bbb1bd1,c0ddbd40,85069fe1,ea83b59,2dd304d6,82fd07a6,85408f0b,99feb1b2,b78b1316,7f9be524,a7349dc3)\n,S(c804b465,fdcdc5bb,a848ee97,559405d3,dd7c2479,4dc4866a,e29676cc,1e147f96,aa4a2eb7,1fd82b70,ebebf43a,9b828e4f,fb10cca2,cf9bb522,3a7eeef2,5badc5a2)\n,S(77a6e3e5,51373b55,dc51b338,3c32f6c0,5c74cfbb,3192fb7b,d96d9d3d,d50336d9,21d2326e,86efac71,48e075c1,ffcd573,5de35d6e,3856f2b6,7d358b6b,c6f047f)\n,S(86ddc187,4a72eed2,666706ff,26a4ec65,a89d82cf,64e3d8c9,4731d62d,d5f7a5a,51f7cc40,ce45a123,a9217816,ba3e6dcb,40507b5e,4cde95c,443ce5ab,4f0cc29c)\n,S(cf49d0f8,db8eeac4,6c108675,a155e327,8c80d5ef,84ea28ce,4a596f3f,c7d3beca,6ffdc741,ebae75c3,ed82dcd6,a6191d68,7cdd64a5,c3146d41,235b96df,420086fc)\n,S(1d75ef89,57eb6722,2d60e872,1e126cec,c9f5c851,5fe18381,518cb54,b75875f4,82c5dfdd,9288561d,dbe4ae2f,5fa1d429,c2076625,7765b3e3,7b99dc66,b78dbdb4)\n,S(bea4b735,f62e6122,9d8d9466,69503348,5bb5b7e3,c6ddb6dc,a292ca89,e7ad0689,90e3278a,8ea9e10,e7d9a451,7b7c01f2,7cda5836,f52a011c,d8e20ad3,7a08901)\n,S(e85b0ade,a90e5170,18d0aaa2,75d5989e,577f5cf0,b3acb728,1af396a9,6169f2bb,d42970cd,3ca175c6,3916fec5,757b7f5a,30ef1269,d4083358,667f599,e650aaa8)\n,S(d97592dd,24050526,e41ed550,fcf7cc2c,82ca5584,c0228f5e,3ffe42d8,a3928934,eac6c169,6bf01c3b,759a3852,a0236f4e,4de0db45,26f2d26a,2174dc4e,fe2d102e)\n,S(e023ea4,50b620e2,378e60a9,a8c65778,fd772575,5aeb53eb,edd35ee1,666e00e7,4e4ed850,6dbdcf89,b060f0e7,8915f506,6bdd544c,e37e1e30,6a966353,6894797e)\n,S(615b5c95,5cd4fd6e,a581b9f7,e6a857be,a7c0ec2d,c302dc9c,c8304ec2,d935e5a,c221c766,2602325b,bcd845bf,f5d754d9,46fc8074,f36a78d3,6e421b14,fd5f4d46)\n,S(b1dfa434,2e12021,b9ce34d6,1391bdb,fa2a0d85,a004985b,c2cc7358,96ec13a7,fa3d115a,8162f828,1dbb7e9b,6f818b4,13c2a5cc,58993ead,d103ef59,9748438e)\n,S(b64b601f,afbe47fd,ac675b83,5e4ecdc8,68c7e1ab,32598974,36ba3c9c,bbeada7c,af78c039,d2315746,feb60662,462dbc9a,652ae90d,573487d8,5ea52374,e9dbe68d)\n,S(5429d346,fda1d9c8,6c5027d4,e94d7565,b0981f23,52715336,4a0f3264,6bb579cf,5b8ce197,dfecd92e,390754dd,2d74636e,162d6659,51464f37,ac696a32,995b1880)\n,S(890694f2,56d6718,b040bb78,1041749c,20e21669,f3787f94,ff954b16,2a6f005b,d966934a,890dbbfc,bb90d7b2,26afd0f8,7bf505b7,31b94df3,5df1c141,2d753341)\n,S(3ae75292,cd0526b7,fa6987a0,5fe060c8,269b5d1e,44a2867c,cb92c2b6,743cc117,10959cc1,5a74a82d,8f7d5416,a33256bc,f004eee9,87b82871,d22a2dd5,f2416a94)\n,S(9d745a9b,ff717d55,5a353fd5,f1b9fa1d,347bbade,8a4abce9,3bb5dc7f,299b0707,cef338ae,d513c60c,7304f615,ae734de6,10461cff,ade0f69b,bac28e6,7ede8134)\n,S(699e9c2c,8130c939,105ce7f4,f922c060,abf1b896,648509f0,aaab9519,d144f166,882b490e,1fb9f944,95d14583,83809d69,bfb7da29,97d244a4,38da39ed,7c3a19cd)\n,S(e3a01cc1,dc520509,a91ea704,bcbfe298,ae79b4a5,4f433550,3884a1a7,85591f87,f3c641f3,68d19d57,fca87e54,6ddaf495,2480a891,37490b96,6617fd4,1edcc64e)\n,S(5d150dc3,d9df375d,46dd2362,34498514,cc7ccee6,fd8ff5f1,ee5ee38d,6ac433d1,2c091250,d2e2ea0e,7d80263f,18401092,399a83fe,bfadc061,a32316eb,52ab0316)\n,S(49fb9761,bb12ba3f,644aea5b,5e011f80,ec477880,58a6eb16,c100c5c2,e0996a66,7134220f,b7208914,58499caf,21654c5c,d9086b1b,92978370,89cfd06,d655e23c)\n,S(34c55eb3,a4512dfb,de799021,1adcddc0,bdea055a,1f4f7b13,d530c945,2a44738e,258cc688,beff401f,9a910e26,d0c979e5,fdbb695,323321f2,ba39a4c5,4f98fd16)\n,S(7068fcf0,7c3efe00,4ff7b82c,2af0c9cb,9b1c39f2,30dc602a,b2508d42,30a3a98c,e48730d8,844578c5,2e7657bf,202b5df5,2fe50679,7e2e1d77,aaab197a,e37ef1fc)\n,S(e1d8910,a987aaa1,12ba1f95,ae8e346e,f49e5254,a2b01909,f73b874f,6b355a1e,8ad0311b,cc4947d8,999c2c14,9fd5c59d,d4a56a20,a0b90235,d7bab907,fe3cdb8)\n,S(92509b88,ba8631b,16c6b2d,c60df45c,6bdf06d8,ed4dbd57,c10ac3cb,72d2caf2,3ea47a31,633b6299,a9f95651,b95f1411,ee6f0f33,35ddb8c3,3978af58,746a3ccf)\n,S(90fd402a,e8d505e9,96aec994,db7d29a5,6446471e,34dc7512,6a356ac,1a66a519,68c0ff7,bcdc36e0,ada31816,ec4f0e67,9a6dc658,46aaaa62,e1958ba5,bada3b6b)\n,S(b380ecb,7d9bca8e,1e35b0dd,d412b128,4cbc77f,c66c5f5,eb390d9f,a9400704,fd2a2092,77d9b783,9df69a7,229d55cd,18fa71db,e1f5f8a7,d78f450c,846a01a4)\n,S(40e2e041,aecbb6cf,6f866140,b6149257,f3d029ef,ccf2a752,d3ef7b0,32b83f0c,122710a5,3c83888f,54e26679,417f2329,e1eda641,8e525326,704744c6,bc2291f0)\n,S(8e609fc4,3f4e30c9,3893a38e,9aeacceb,7d254eb9,f77b49c8,c99c20a8,aaa03583,947c4c6e,9a821504,7f259a86,b1d70378,837fb57b,e0d696d,66a3dc3,7ac1a3e8)\n,S(b871c5b2,2bfe9fd1,6898d00,1af89a8f,8d9c9324,52fce0bb,2ecc0835,f435f5ce,e302e5a3,ecbd0ee9,9f87226b,6f038003,507fe8ee,60b64,cd656f26,8f1d3078)\n,S(526daa7e,39e891a,bb524170,96fff4d5,c6f80f57,cce87f83,2ac07cd5,50841682,69f04499,4fb7130e,758fd397,5ad40f68,c477bc9c,cc5c5f43,c5f5a554,b3d210df)\n,S(c15c244a,514e3057,ce67cc07,3fb66fa1,5c031f51,8add9ba2,edc12f94,861ad25a,db1021ac,ecc3c897,8de34780,bbc9a8fc,16449ddf,5cb05b90,1ba39598,72846c50)\n,S(37e20b19,466a038d,b3b63873,50dd3dc5,d3494876,cdb7f344,3e234173,eac1d388,b80a24,546541e2,ecabcfa2,7db57aba,5ea5bb79,f69ecf25,2d68ef63,fc3b89f0)\n,S(6d091f28,feae0142,b311cd81,f57958a5,6a0da5c9,7ff5eab,c598e4fb,564ea528,48bc97f0,4d7ea6c1,38189719,6c85dd22,6e9d9f7c,5a8ba74c,27c29063,fdd07906)\n,S(3bdbd416,a76efb56,ed01664f,b819dbfe,d3e545cd,3edd48d3,5ca635e0,bb54fd71,a6954d72,3ed7253f,ef301621,91fbad8f,9a63a893,82b98d26,a6bf36f5,2ceb0639)\n,S(cd4e36a9,f111b55f,8c05d41a,4bc33ef0,c4109540,d9871237,4018b2e4,7e9d61ce,478dfa16,52632e69,6ef95ec,452df807,abded9bc,264e6dda,df0c6215,454e3e57)\n,S(f23cc4a,9c59c0e,3bf21413,170ac67e,24845771,2e77f1c6,272a9f11,2df24efd,e933bc72,99b6effd,5cf58fc0,72f7a466,dc71cdce,74a3d3da,9ed5e7dc,577fa4b2)\n,S(d98c6585,8c97eb35,b6846840,cb6db623,d7a349,435d4989,31a695ad,ed3c33e0,443fea24,ffe8825d,eb6c953c,70627395,ba13781a,164f2eb2,a85b862d,e3114990)\n,S(2269daa6,c055dae1,b6d2b9d1,6c74a9bd,65325ddc,a249085f,a946e66b,6c744225,159d01f9,a61f0456,b08f0fe6,a42efdcd,30e14ff3,bb47fdee,2352dc9b,f5bfb3dd)\n,S(335044fd,8eea8792,8de3880a,546b01ad,eb4d75b4,23ae7ba4,87740c03,167c48d5,69e503f5,26266bbc,63b0f2bb,757b3be8,cfe1d9c,e63d8226,8187a309,ceda1cc1)\n,S(ee7a263d,86f9a83e,54cee87b,7bcae75,a601da9b,637aba50,46bc5f9a,3ff6c512,9fdd3192,203268e9,2388ac1c,840e7635,22271483,161f8f60,42d82909,41373d56)\n,S(529b33b3,36f1631b,6c7b6111,ef44a888,bf95f344,766a2d97,6c5e5d5a,53f44245,12856106,93da6f4a,2fabc1a0,3280249f,6f29f9ee,9ccd7000,4cf0a857,ea061099)\n,S(f2b3346d,a6cee9f5,1a933718,2d655a88,6a251353,8ebd243d,d3e3cd65,abdf1849,d41df628,be7703fe,9e866526,2f6278d3,55aaefcb,324df2e1,f483b0f7,77b77da3)\n,S(535e9dbc,f03d98c6,70d03d04,5d638c7d,1db7a12a,22f3837b,3f559b70,4582befa,2c233228,bad897c5,bd4fa98d,67f8384a,62ea4761,4f64e4e7,40bc1f65,9e358392)\n,S(c131688b,70da6ac6,5ee3172d,dff34624,b019bf78,85033970,8253b4a0,b299a7f1,fef187b6,e0e748d9,69a11d82,e9f996f8,d6e1aff,8b84d20,7dd78519,dce5f3cc)\n,S(75dc84d3,f7ab7985,10ceddf3,da6bf832,a984d00c,98726a64,5dc71b21,754d3ba9,f5d9edf3,5e110491,2cc5e4d2,82eeaa53,84f62deb,1dc2a183,af5b232a,e3841c50)\n,S(591dc7bc,9136c38e,ae727310,25c5fd52,82c6dad7,6f98c648,78847ed4,f32a36c5,fccfa4c4,f81cd382,e003aabb,4cb6c5e8,8d4875b7,21d44233,95397268,d7a421a0)\n,S(83a59c89,2a8392ba,e7548fad,b87acf7a,d2c78db6,4c588f0f,b14753ce,12712596,7d00ac1a,33b12065,d67c598,8822ff3c,46f090e3,15cf919b,e3e5030c,e7c5873b)\n,S(e9b0dfa5,8c52b2f4,a9c1b8c3,76391eff,6608f968,ec45bfc7,6ca93e2c,ba6f6f83,6449b28d,5846de0d,27489124,feb3f3fb,5c1f0839,a7809be2,e5cb5def,2e0a7c8d)\n,S(16cd2f9,67b090c3,d151c002,d3a3d25c,c76adf50,d55a6f81,b1b9a650,b72bc03b,c592601e,2fe77090,39ccc091,bd78458b,a23db74f,848ee06f,50ffe4c6,8ad63a7b)\n,S(f347d3fd,1bcde363,69e3d9e2,44d6e5f5,d80b8dba,7b1866b6,f584a38a,3aff1cbe,1c435ab9,ae38a13,98dcfc6d,64125e8,c7349f81,1584fa97,66dc4d24,7e87977a)\n,S(5b190d87,d644854c,90c49f11,34921545,f349edd2,b4e9926d,534374cf,da428b1b,8a4eacc3,63efd6bb,5c93ab25,65d2c157,9c1d3176,b2713ea8,56bc97be,fa5401f3)\n,S(a7786cb2,d7314ce8,f21e9665,bccacad,c49e78f3,7772c3ab,105f67d6,1c30834f,4fc7acd4,18982e3f,2fb1f911,cb70bfc0,6c4ea71b,a05f6371,46e96bd4,a9441953)\n,S(d3654f53,e9071a18,8c5faedd,c0ef3616,abf74d26,f073ddcf,545a01fb,2fbf33cb,a56f20c7,213c0394,5978502f,c4a716f3,77c7a3d9,26c3cde1,880f103b,432f4383)\n,S(e1138a87,400acbda,69d8ac3,bb6db4cd,27d03176,ee88994,2039a93,7822399c,f29a8fbf,dd3f6d46,5c640de6,b6853e40,1803cd95,f5e012c,9ce967d5,13a162c1)\n,S(d29eb63c,91c0f4e5,b3c49c6,9c9ca952,5714730e,76bb87e7,374ac995,86317708,4ad93702,4e9180a5,9d22ab4a,c856de6a,d9d38c9f,1cb3fdd9,d73aff61,fea5f1a1)\n,S(a9d403ba,a6717fd7,6577da1,d8b8ecb3,d2124b30,d18df147,ca48b482,26ee49f8,1eedfe7a,8c5ee1ee,50937bca,d9591144,56f1e49e,db74133f,f45176b7,26d5323b)\n,S(ff7b58e8,dbb6055a,eeac6bfd,112d89c9,8d8f3763,98e41e39,ca076bd0,9ef57528,4e4e39d1,ad7a51e7,d6cb57c,836c0685,8e39f1f5,bd41aee6,cf5d250a,fc381121)\n,S(43c50a9d,f7839f61,e1b6db23,4e2f146e,1672ea1d,566f5613,1e7bafd1,bd362979,f20fda98,81541a8b,a83e908f,69e05218,1e215885,f60cfbd6,1ada74ea,83f449ae)\n,S(f608a9b7,1c91298,75662ae1,6be6d043,5803a9d5,29d3be53,9843f227,174ac30c,5ef364fa,e919dd42,1bad3243,413bb565,d788d266,d7b508f2,83c486a,327ad5bf)\n,S(c913e029,dd1ef043,f9bc48d0,c267657,3cc11722,5cdad56,8d013327,445a117e,97573f0b,9c31cbb3,7bdcf07c,13526a04,32a38f18,43e26d8b,ace85a50,19a83049)\n,S(aae0c49d,b17e7bc1,66c0c58a,cca847f,61318bb1,3482f63c,ce7dc55c,82a7d728,41170bf3,f68c3dac,22051aae,658cdc0e,810396ff,9d5d9251,6a7e6377,5c6be0b8)\n,S(f2805f1f,45a0b622,59b9b15e,3de4a05d,e306c8b5,ebc5ac96,d35aa388,ebc846c8,f5d72739,6ba37244,57725cdd,912fa38,b36e201c,26409dc9,9789d087,6b8d1267)\n,S(6969e4e6,e150d12e,4a230e59,37d865a0,f7d2323a,781270d8,7b0a7a90,fa4f39,c71c33d6,d323ed0c,3e77ebe0,8595dc9f,e030a0db,aae16f88,8dab7187,5e14de3a)\n,S(aec2bf0,7a0e257a,be4fbdb8,e872dfbe,2aa0643a,411943e3,e4cef039,8d988f3e,d8e9f557,e686c380,c84bc528,fff0a830,bcc3b6a2,724d9df6,ef21d545,c8c931d0)\n,S(9c6ff99a,13dfc35c,a502890b,69d91dd5,198f561c,790bf322,6bb243bd,4926f710,2aef920c,84a4f5ad,9d88f541,1ff46839,2f7f4e63,3422b11e,9b683403,f7ef849d)\n,S(fa43745b,37a5e238,df0246d6,7eede652,ade75aec,b5dd8aef,afb8e6e0,96d7f1c2,df9d5aa4,2a3c6540,3793c8f3,fef939ee,48aba7f8,59fe9ead,dc44e82d,a98689b1)\n,S(694a3288,6c4e26c7,eb3b84d0,9e777f96,ce3b74e,58658741,27643dda,a78d46b9,a54d6c6d,7645e5,6e8909be,922cc5a,a700d932,cb1318b0,1446a9e1,8bdfe67a)\n,S(65499597,5be06b28,b4c339a2,b126210d,930fe920,7cc72be4,3d4ad17a,c08f38a0,bdee23bb,467fdce3,2d2cd92c,e81e3f5b,d29fe8b0,8b35abe1,c684443f,72f7900c)\n,S(3791c8f6,75bb14e4,b7d4f084,483aec44,ea38eb2,9b108137,400099b0,799f0bd,2dc8f74a,da5e5eb6,f3b96ddb,cbee5ee5,8b2a3f45,c31cb16d,15a4e918,eef7bc76)\n,S(d5e41065,eaf890e9,e9046936,acf6a43,59795c7a,1939d8ed,42941a8c,6ef31364,191ec4c8,a559fd4e,7abbb6b8,f2e4c32c,bd2f30cb,d06ff6d,21f156cb,f65bbcad)\n,S(16ce2280,fa0b404d,28a29acb,62058b99,e504e6f2,eaaa3ae8,b77ad650,2c970dec,3d4683f4,486addb9,e54bc252,74e590c,b6eaec5e,7f96e9b8,8174b81d,56efb09b)\n,S(a6b0ab30,6cdfb1f3,90e5b447,816841b7,e08f997e,d7d47016,bf3b501,c6107d07,2a62842f,b67e2794,92ed337f,d72abc9b,94e96e4,a10f658d,9cb9a4b6,a80abf7a)\n,S(d7ca6d38,760b320b,21cb779c,d709f376,52b9d08a,8ff6ad90,21e00628,56033583,d6c05f72,866d59b9,6b91b6cb,b1401619,5e2d1cfa,9982db04,6d672fff,849e7bb5)\n,S(78ab0563,2d3f707e,738cb134,7121c73f,e162405d,61a0bef3,75f6cb45,f5609d33,fe1a390c,10c7cb4f,297a4b42,4baa5c50,350eba49,55fb74f2,1094ec5f,ee75a6b0)\n,S(c053553a,5b9fe803,65fc5a9,60e48fd9,218e2128,28935879,bd1072c5,180d6f04,e02da774,214dab04,e11c45cf,57be2802,7d0d28dc,51cc08a4,7528869a,3e719192)\n,S(bf85d713,e2a995c3,ef98d403,30fc1fb3,5faf8e95,81385b4e,b65d5ebd,23f02d03,a5d45947,58d7b0e1,a8542a6f,21ddd207,dcb68e96,88284bbd,6b940748,b3e59b18)\n,S(fb73b6c9,2be578b8,fe2ee0d,eb0aeec0,13816905,9e55031d,69a4d0f1,1bd280a,72ce7893,9bf5a55f,d4430bd2,55bde818,e15bbc98,37e3dcf3,e31d22c5,9614cd16)\n,S(56496e5a,ed338dc9,201b04f7,8f4b6c2c,d9928135,83360dfc,1e2f370c,1628aa79,81dbf48a,824fca70,12315d3f,a56d5150,92ffa54,d1300725,86c8a476,be8c2db1)\n,S(d698e395,9e81f098,485edcc6,2f2a421a,aecc0a79,58c9f6df,7905c931,b7a2130c,5903debc,e61eaa39,dac01a8e,3e970a39,79408bbe,1d0ffba4,5ce78c9c,79563d27)\n,S(84b32e40,86709450,b32ade00,d3404b34,7fad8d7b,9387d931,780764e4,c566ff80,4c80d078,56cc4296,2b7941e3,195c5350,9bb5b0e4,325c24,4aa3a581,bb1cfdc8)\n,S(7129c799,2a3689b4,c1873a45,f1ed3327,6528e243,28f30cf0,5ac38a61,8db2ed6,362b4fe8,482125a5,d4d15456,79009aa8,44f86619,cf3fca68,ce38995a,660810e4)\n,S(93164c87,fa48b6ea,6b6cac08,8c991c34,5f8cad7e,f68c5b98,78139d28,d180d824,a3ac0d5c,c91cf0f9,cb97771,d16396ab,bd183221,c8d36a87,2785e847,b5d9e26b)\n,S(4f90e8e2,37c4937c,a384c7b1,f929f329,94744d5e,8b89ad94,808ed9b0,9f305a68,cde776e0,2b6b484b,83f417c,fceed07a,ce725e00,343c4e70,14748f08,992430b8)\n,S(4d9603bc,9f40716a,e6913fae,253eccd3,4442f6a1,3c058ed6,a10f91b6,75f716a1,92b679fc,278ce355,97165827,aa6fb450,9c52a412,284aa493,c6654ee4,3924add6)\n,S(8b6f651f,91c54143,12c94f3b,c1632e13,f90cd718,67f906a5,aed13c4c,4ab17203,88c159a4,b80f2556,bb4e2b78,c126c40d,9ded995,bac6ac13,bf83655,210c7066)\n,S(6f58b852,cab98347,e86448f0,78d49916,1909e1eb,60556ee9,8cdc20bd,b25ec256,3a4c05f,233d9305,e6abd30d,da0cebea,1681dab2,ad805cd3,2fa7023c,98239885)\n,S(6be7f6a8,4021411c,acb710da,3ffafa32,8bb6ca91,59a91008,6cb98071,100c44bd,bf64a6f9,d461dfb4,581c8d59,b5fc1191,86f339ff,320e968b,b5810145,4836bee9)\n,S(b2fcd0b,b8ea9e66,f2cfdbe1,3ecff9aa,99661f0f,2ac1844a,b3983d2c,ae102d39,a046989,bb3b8fa3,eb2cbba,d3a7e810,27c38cb0,ea33ec74,1444e8ce,7182bb86)\n,S(a1d6ed0e,ab559b29,edf7770b,50cc5913,3916826b,6d99ef12,91bf744a,79a6fd96,bb91657e,c9255ae,173bf93b,51848094,2f17df30,ac6b391,df2237b4,c04ab69b)\n,S(28f6570d,ed7130d7,35366201,e9ab639d,440da5e7,e1c9701b,d08a811e,912a9575,39191f60,119c59b2,3e91a7c7,fbf4c2c,e2216e5e,955db62e,dece6adc,f2d2884a)\n,S(14c8ced,dbb83de4,218b089d,101d7b6c,31cfce22,49637853,b9c804f,90271fa3,48052d2,a5d02e71,135cba3d,24c7894b,de1293d,44a2f84d,7a8fece4,ea9a41fc)\n,S(eaff9f05,fec737d3,d2a28fa1,bc8450a7,a75f563b,9221bca9,eda2f8fa,e12d489b,d6d4419b,5c9873d,7d3349fa,520f463a,2ad9f348,1a111c3d,d3fb70a9,23b8c139)\n,S(e8ee4c6e,b42a3712,85b52457,52e7fc3c,ce0757e0,96932a43,d92bed15,14b35e95,d86bd4c,27ef1831,f107ff4e,6246cb7c,ee55abfc,cbc5de2d,5f230a2b,6a3b748a)\n,S(98c61909,8213b06,6b70759,1c88a51a,d5e90922,6778386,a0776e6a,ee41e7e4,eb3d2e2c,f98bb904,42e90e2d,38ce4c53,fd72da8,1a37fefb,fc241aef,f65d4c8c)\n,S(d4f66b81,f5d62986,c57a0dbb,c38bcb5d,89319806,4e28e17d,946cf7f3,f946dd29,c1930f8d,eedf1a00,cb7c5579,d814b5b8,2a12298e,530bb32,867821fb,7b7a5fc2)\n,S(14d73ce7,5f8919b,55d54369,69866f0d,a13dd4c2,ad447c4e,b9879060,1411087f,69b94622,b9cb0d3c,5d106df2,caf4208b,b71c48f2,629d467d,16ee06c6,93ededf8)\n,S(57efc935,59c7a0c,6ac51105,8a50a8d5,5646ab40,8a711711,5bc34c20,23da3aec,fca9329a,60b855c1,74bfba0d,92ae5529,27f959f0,5332cc4b,26272c02,b5c5dfd1)\n,S(91f13a86,63da80d,a90b9458,55a9f3e4,171213f5,3683873d,cb6372fd,95b3677f,7405e0d8,6734f110,c329a7ae,92055639,e0332ece,134156d0,3cab4efb,419a90ea)\n,S(dcc84d0b,46145e25,a83dfd64,b40dc5c2,c3322716,d1337767,5f9d6aff,a1607592,e46a4cf4,8e4dfeac,8df1526,f53246a,51b95161,a7030adc,8bba8ba8,1d2d6c66)\n,S(28ab06ac,d5a6f432,116011e,6bf3c6a0,df0bfa1f,df16adb0,54250174,3348676c,51272a1c,967f49da,e9d1d6b7,a4ffcfef,cc31f42b,e0da52d4,27e56b63,97b0cb9a)\n,S(7c01b21,f8d1dfdf,d3f2adb4,5915c636,d9c2a92,320c2d00,beff0f45,21d8b240,b4a48fcc,99906d81,fc6f78fd,aaa96b3d,6e7ffd62,d36d1aed,f76fa25c,542c8b48)\n,S(f94eeb78,30f8e95f,2a362423,9c0e8fb,a0d3279b,e0cb5f5b,428a99ac,d14d98f1,c96d5b64,69676b9c,a5dc91be,8bb4a93f,7157221d,9513cd23,5cfe3ca,43649527)\n,S(ea4674e4,7788cda4,bde0dd8,5f5e32d3,9a6d6477,30e9045b,d406f5f8,11ec35ca,769bf79,a9b9122,3070032b,a18bd769,fb622a61,424e9a0f,e1a46230,a75a235a)\n,S(da5a7419,7f8f8685,1317260,682bfe28,19b7b38d,376745d1,7283c250,1fb40112,a60b5eec,5871e18,1325ef5f,5d6373bc,b5a19f41,2107290c,eb663e3b,95c37a39)\n,S(c1017fa5,52560fda,18c6820,ded7b76d,a75ebcec,23b8fb6c,22ff72f2,26e9d41d,e947b19d,af2647f9,167da3b8,dff05897,9b5dc1da,6782929b,1b078114,349fed39)\n,S(be7c0e1,4e814476,78a15238,b5809a75,1b964658,19bf0b16,4b3e914b,29216a7f,a30ebe97,f64219a6,f0b072b1,5d648e81,880840b,8a36204e,4f1627a0,feb392e)\n,S(6758eec1,a4d6c0fd,cc118405,62fff82c,59e0fff2,cf80414f,cb53b139,97007cea,4653bc66,20fcd852,422c8898,862631e8,a0149bba,d0b9cedc,b4fe3eaf,7cb316b3)\n,S(9cbb51d3,f88f4d99,9d80cf05,9e8735b3,11014de,69acddae,70d850dc,405b6116,dfa2e748,cad75b52,800e0ed5,17efc4d2,47c6381,9190a3d6,e2510bb,25902360)\n,S(63a5aae7,b170792f,17350229,eaa5ad18,65328bd5,3421cdea,3d6e1510,d8bf0bc3,1125afd0,f25d5f49,f7e6250a,ed3634c2,12a261d7,8ce58ea1,95afb883,52da1010)\n,S(adf96249,3e5f0328,ebae11fb,243da21,4e036d24,1da62430,b0fe2c89,b2f10657,509834ba,fcd8ddb3,2d018b16,d17d4b5f,219a29de,8a03f7f7,84f34b57,9b1ea1e)\n,S(a0d8f5b,7fb44a15,93583364,e04d7225,bfdfa549,c2b25f32,f00765d9,e34d472f,61eab66,f84c2687,949da99f,3d97fe3d,630b6c22,f9f7c48d,d539b122,ef998ab2)\n,S(b98308ea,9596a2db,adcdbf81,56d8025e,7a3ee0d2,5b27c33e,f686690b,ae61fc1,cdb4e317,7566a4ce,b4cc582a,3cfd259,445bae6e,586786f5,1250cd05,27ddbd37)\n,S(e1a64f1d,37e3d6cc,119eefe3,793ba303,cf3969c8,db4abf63,7f0232af,70b98134,588d7ad8,885dd2f5,ec4d2084,b3f581b5,ddbd3567,8f4ecfc2,f955ced4,1c3231da)\n,S(fbd5dfed,e8543aa6,e72253a1,bd711911,318929ee,7af14eca,49c2276a,65fdaaed,317cef0a,432c3516,3c405d51,65b8c310,f234891a,dbd0d6f2,f76cfbf0,193b78bc)\n,S(fac4b7f3,b0a39510,84f1a882,2f7b6f20,30b87c4d,c0178a2a,e3077ce6,84da6bc2,7029b920,9e9522fc,160a5c54,a628fdd4,386ce0d1,55f19fae,390b2995,bc867d75)\n,S(ca8643de,834fcf50,802c0296,41b5fc7d,3c29fc51,5c75c53e,e64a8185,43ef7c2b,907a6c27,111e296e,2436fd4d,ad9d9fa,f8ecea31,cee714c3,b26fa964,afcf17f9)\n,S(71873649,d700ea1,7ea26b19,efe4b48b,a4a73b22,bc54066b,1202c96c,f3315f1f,f6cd8447,4bb374b7,753fc614,de5cf429,51512748,2042215a,bd82c11d,87ded2fd)\n,S(67e738ff,21c3c732,26e57482,677c63f0,175b768f,776cbe6f,15ac3c53,48c5e3d7,14e5140f,2343dd72,577a5064,47cf6093,ebd2854,5d1326bf,ac79350e,eaf2bdb2)\n,S(514b3f31,f875253f,205339f6,434ee17f,6c5a5c42,662ce934,280f55f1,9a198893,4eb33993,a2fbec70,4cd1c538,ce7cde4d,a61c0fc2,dca9669f,e469807e,4ae9a090)\n,S(426acfa6,eab03e75,6ab30a41,418a0392,ca53c216,f84b3586,f9858501,8bc2dab3,c3d63eab,21cc10c5,c0a06682,d0573bb6,d34944d1,749da74,acb59aad,f1083926)\n,S(b946bb46,68c05737,ffdcbee,94597c85,b8ad4a72,c58205ca,d420e8f7,a2d7a09c,cc700ed4,12633826,567e63a5,e65bc603,969ea13a,49feeb2c,dc723bad,1e3401b9)\n,S(e6a844b3,f6c8b45f,511d7d3c,ccd75df4,1d1e38f8,fb28adcd,80335b95,d98e33ac,7f24789,3939890c,74a3268e,e1f717ab,6c4aa109,cc9257e2,c0b176c2,ec58cce2)\n,S(43e62bbf,d9e052e8,c1636b41,5524b98c,493e903f,2313dcd,117d140f,96458001,f481853d,a90d528,30999300,dcff31d,ebee23bb,49ecbcec,8e147799,a63b352d)\n,S(c44ef40e,3427476d,42e23e1c,41ddb9bd,e555a844,9125aad9,e94f44b8,8047f817,bedd4313,e43ee593,f2818e14,776f4ae2,38f664b2,db84c9d2,498b9ea3,8e236fac)\n,S(a1b35313,dcc11895,c096f93f,5f8e4997,7f58f2fa,afd9b7e8,d408bde0,53212385,bd7eb25a,bf0d50c3,7309f9cf,5093d817,135a9ec0,20262c55,bdc8e8a7,a3079f5)\n,S(48a6f3f9,fd6201c9,a37f2f0c,735bd98e,1382229a,d1589c91,b6748a92,1b5e964e,1b545155,3d41a8a0,64862c81,fa9d5966,2c73e039,53a5dc91,9712c50c,5b4481b4)\n,S(8e01f574,651db06e,8a19181d,c8eecf1b,75f050cd,c5b2354d,b06285d9,a4061e9f,9d156ea0,9800e7d5,b6c6e90a,2eecada,7d7ba964,ba1f0cae,256fbfb2,275e108b)\n,S(4bc0f8db,9e6db576,3eb68b19,5a79f8e6,28e375f3,1694a58f,43da4dca,fa05345d,c6a70789,a1e6b164,bba380e8,126a4a69,6338053b,6a32d9d9,8d0f215c,43a5b555)\n,S(966fd0cb,5f5edead,d6230a66,50b7dab8,f4c7ee8d,b00ce55f,32d54a23,ba97a768,9d644e43,bb4f9b65,f5819a1d,ee0a16b8,1e8929c,a9e544e1,6546cf79,811a994b)\n,S(6ab519ad,49522ea6,592dc7c7,4438e337,20d50eb8,862467f8,2962c510,857b0d8a,c5ba3a34,2b7250a2,62b67ec3,554c21ee,e82653a0,378ee0da,8a809151,a3ae44d)\n,S(f8b0b8e4,3e5060f5,39bd0a0c,d076e163,e55f18a4,25327856,d526d6ef,aa76c62f,743de052,a65853fa,58cf29c8,62839aa1,7d5c95ba,43673ad1,fe1ecf6f,d4d48ba4)\n,S(c4509ef8,579d8ff0,ab585c0e,5223d5fa,967e9763,9d15b0e1,6587a125,3ed18bad,7b91f7e8,ee979a58,5a36d8d3,574b8ae7,81199dc0,86f11cf9,7fe58e4f,1db08362)\n,S(9a00135a,6ff450f8,e2207c53,894c0e4c,4cef732,cfab43c3,aacb00fd,ab42379f,393ec748,3684c5b1,4760902a,28cabb90,b481596e,8b847d59,4dfb8ff8,1fa9975d)\n,S(3d775bdf,173f8d7c,de90c17c,25d3dee2,a484d331,4e525e3e,aa4a405b,6f488601,7e6b08bc,a560f6a,5bf287f5,59d74e25,38a4025b,89972046,b3de98c7,b30e51d4)\n,S(cebafd3e,a60118b4,513380a8,d10a29a,a95e5002,d703d7b8,f5d0e983,7b03b529,19477ab6,46f59f61,ff603594,e33ba046,5f6d8b1b,f55290c0,fd61534a,87b74b4e)\n,S(ae8a3cac,1ff3e3e1,ef01ac16,2e49b237,7ecbc963,f58adde1,58cb1987,cfa731b2,5a4b0675,2052b749,733f6af9,e8dc773a,ee26fd2b,114a7ac2,baca1e9e,51531efe)\n,S(d74d38bb,8bd47123,5c118ede,e477ac4d,fd39b635,d0fbeb28,30843753,ade3b38e,f3e505b6,f17a2839,7a985084,31ba6de2,1ec0a0fd,3936dc32,5d66bb37,7cb54451)\n,S(f4287675,7780785c,d14dc1be,fe075d1d,4d4f0b33,b0ce9db2,49595b14,f6beb2a8,a3df2231,eefc62dd,c658bf6d,a361ad6f,950f34d5,3ff25536,4eb1e1d8,60514b38)\n,S(e91d576b,da19ad62,76bcaaa8,69cb2099,e6277688,3ca1d454,50dc9401,46378e94,b57e2038,c8da2cb9,9ac313db,83265d8c,20e7918,37e75db8,7acca971,3840779c)\n,S(269944e8,7d77e176,3791b53d,af2aaa43,e035e1dd,f3c7daec,7e830cfe,38c66ea2,cb011764,34bdc7fb,528ca43,9b323c9,56764145,7b7eeea7,39ace76c,193707f6)\n,S(ed41e68a,8f0b3681,1aa61c68,57bb1765,fb099317,2ff6ea5e,e94e01fb,644a3d1,f2cc907b,880cbe04,26ba1e44,83d95800,71c918e0,8cc085dc,1dd0deb8,c508231c)\n,S(6947664a,96cfcba5,e2e36e4f,53a33d69,538192f1,3322113a,b0b79642,dfec0de,6481d1bc,5b65b6fb,a91b76c4,d6ade333,25610195,decf5dc7,7f95dc2f,a38fb6cd)\n,S(aa3e187c,e22b63df,6a80a42b,ba9265b0,4379012c,70e8ef66,8ea85c57,1e27fb03,a638dd6b,98109fd1,96ffcab7,3010543,e8732f48,e5cdb29c,38fa91ff,8d011be)\n,S(5de4e1,a4bef94d,b4a9fbab,6543fd6e,bfd5ea37,9124e1c5,eff9be18,f84a944b,21c4a282,693be294,b699513,f7744761,58f8aed1,a7ec7442,9679ba9e,7957e2d6)\n,S(6533dcc7,2c87b477,81c96c79,3af0af22,fdd18fee,a33a30a0,9646c2b4,287a7ce5,7f03e5f2,3d82f9bb,ce9589fc,23442174,482748cf,a3aeccd3,f8c37058,837ccc51)\n,S(139e5f3c,129e584a,bda008ab,85343531,c5109f23,a70b9871,a5ebb00a,64fdf354,497b7e57,41fb8eaf,a53182ee,98352b62,6bf011e4,826ac9de,6190a2f7,773f0a98)\n,S(493fe9cc,f7e1e950,83cea991,8d8f2561,3ce57b81,81915f0c,7c779aee,8161f7c3,e69763fd,62fce1d0,454aff6a,6a3bb448,639ab615,8bcc2f40,88cbe4c1,67020cd5)\n,S(ed675fdb,d8dd70b8,641ac2fb,4903ca77,900e3c15,766ec8a7,446e6b36,52a064a9,a61bb379,85cef5b4,6e0669b4,b0188ae,23ccffb2,5ce777fd,1f26f313,68416de9)\n,S(173670a8,9a769e3a,797c14e3,15393d52,b6d48444,3861cb83,136b0ca9,9a260a4d,4dd43921,c1ba4d2e,95ea1b28,e4908410,d140b3f7,7dd82bc6,d683da27,c7bd4904)\n,S(d5a5e3a0,8f87e154,6f11e05a,c106e80,a1da933d,2cca528c,df9e1f09,635d1610,7c6c55e0,daf3c092,8d0a9c6f,2c1ffb0d,aa20df74,20a35167,2552914e,5d175352)\n,S(54f5e9a0,4ab321c,692f2e2b,94d6697d,a0a99932,74ee4ebe,4175a338,daf6fa2a,58cf13d1,75fa6e47,34aeb761,4f828dda,58a7d9ca,855ff42b,5cbd66d8,89f2de21)\n,S(d6682898,154de995,62e5544a,442622b2,fd9a632d,94445d4c,9e8725bc,7febe6da,98091e3b,9ba3b857,50e02c50,a7971aa3,b2d5045,f760c1eb,d1371dc6,3190f206)\n,S(253019b9,2af2c4c4,8d9f6e1a,82decd36,610becff,18c908ca,fef49bf6,cdc2da08,617d335a,d9509d74,e5eebdce,810872e2,3ffbdd3b,da53aa5a,495b86ba,397c680a)\n,S(56f64ca,461bebde,560d2bcf,ac08f292,ced72574,50e44f16,bab67cd5,104da6cb,5b2085cf,dc278328,a992bca8,f2ee8142,757cb553,b903a3ee,bd83bf3d,593aee44)\n,S(f39c9571,1e153a9a,f0e5c192,87e3ee38,5a31a1e9,bef312f6,4dded245,8f553420,4cc94ac1,1c206b9f,7879df90,8498c132,e742ef62,48bdfa97,4b882930,e3b0b1cc)\n,S(437eaa8,cbdf873c,32d3dad,95c5aae5,b2f3034a,5de0c536,8c8ddd62,c13128b5,27d8ea0e,b00310bb,59424599,3d60da59,2f8d1b2d,df0c1fcc,721e3080,993c59c6)\n,S(ade1a589,3f5d6798,4490ae62,11c57534,3f13e7a6,14ef71f,a79eb4b,a880e9b2,bd49c17c,537e6a3b,ac7404d8,c3c1b429,e801882b,7f241304,9022e262,3791c715)\n,S(936275d5,c3091a5a,b9f57d97,7a4e1b6c,a87ef978,c7ad198f,d16e2d93,3ac1224e,6852690a,d8bd84c5,eab75d96,c6e224d0,ed598851,b17b857e,5aa01207,df6b9f32)\n,S(29e55fd,3e8fd5cd,e046db20,5c80b9d3,e294971d,76b5e8c,c33fb5a7,6b9b786e,769e57a,7eb934b9,4578312f,720ce44,2bbf3e2a,d61a6f57,af6cde49,8c010a0d)\n,S(df8362a7,350185ff,198b5275,45e16f78,3ae37804,7647c584,168b159b,809051ef,afcb3446,fbd4a3bd,e826b604,84b16c3b,735ece80,ee48da26,3a6cae0b,62af6bab)\n,S(5f443123,9a35fe0,f9566037,96cc619d,b9a01e83,96cf433c,25415ece,58a427e,385c2812,fc0aabc5,29272b60,56aa9c17,37d81c72,48fafc90,6fd7d4c2,b0901ac0)\n,S(c19c4215,53c6037c,525b77a3,1693fc4c,8c5323ff,5d3dd63f,4b7e3448,15dd2de5,9f76ea8a,879177e1,27116189,6d9e6b20,a19d2255,92c99822,159c8ec1,a93900a4)\n,S(8abf3a1d,d1e02332,ead62fdb,36394246,14d19d92,a82113f1,d62a1423,af2d45ac,325a967f,dcf5ec3f,75e7a984,ecc2d9f2,defc2941,6dd507ec,7de1b598,a7e36dde)\n,S(c8bfdf90,b93161e6,c4d4a58f,a71ea84a,57c1dd76,c0607b94,33fa3cdd,f759ae7a,23dc38a3,d172fb63,ed47efd3,c3e5aa3c,fd7990cf,1535ce5,b51944f3,270b20f9)\n,S(976666c,35c55997,a759e7ab,85f90d7a,a26ccc40,5b77b8b4,43c7e86e,2d2c78d,6d342c3e,44facf25,bf2db2e4,e20cceef,92c52cfe,b4370f89,60551614,381ed0ff)\n,S(e7790ba7,7737e4e1,c7bb8e8a,5bd89c3a,1fd65b6c,feb2273a,1c12a8cd,f963252b,2635e20,1534b58f,70e754ea,db28998d,f7138ff2,a9e92e1a,810259dc,ffbdba42)\n,S(42cb817f,6bfcec83,f60e3ecd,5b986ac3,b471cec9,975f3efe,37577d81,4576fb0d,ed35e128,b2f9bd90,f2162050,a5737909,144a8596,5075fcce,2708a4de,c45cf49a)\n,S(a0886870,1a239333,ffc60397,ae11f145,31902428,a4fd58f0,2450e0f,412f3cbb,c8486f37,1ad6e034,8e51995,b4887ebb,fc6002c9,9cc00ad6,d8a81f99,1883af52)\n,S(a40cca41,9f101b8b,40fd8e8,b364a52e,e6a9642c,22661aab,3486f25,732c4bb3,f421b69,3ec096f0,2d1e611d,f0701cc3,b0655b9b,95009285,babb150a,9445a910)\n,S(90aef978,bbb0472c,5a75b70b,c9f5755e,c532940f,141a350f,efe604a4,35beb721,f9f05c70,737cf6e4,ca88cde9,2e478ea5,93f58510,9479d187,a5f87e11,e14bbf0d)\n,S(ffc23a81,a0f61f39,600292f6,8db9acb6,d73ae433,bb827f1a,7bc6997,ac3407c3,b76a0612,bce5e139,277c7463,d47cce0,4f313b37,a0746803,6865f284,574d4b66)\n,S(d3ca7b94,40bdf990,4262bc16,298425a6,742c852e,df99ded,2ab0ff50,20a112a5,9daecbac,ca7e825c,4f44281f,9813ce2c,5ef191b7,341fa2cb,1f9780ff,de4d637a)\n,S(2a53a2bb,720ab31c,2a6b7589,ce0e1ac7,469b21ac,d55eeb41,b23b3cca,51bb9f06,11aff933,ffde9646,7a4d0f52,220d06ec,27f7810d,ba44b256,c21a57e3,d451f84e)\n,S(487e5356,80c40287,a6fd2f77,bb8f5cbf,22b2fc71,7fb7487d,5a08474,ada1ac96,53bd7fd5,46070d63,77b65326,d5130445,29c9625,520c3a73,1e990d0d,5aa849c8)\n,S(3e5a5fcf,291da0c1,fc332cfd,62f4b629,cf23c0b4,8209fa29,63de5b99,667b3e16,86987f2c,43389a1f,4b028df,773bb130,8b33d7ef,7f55dc97,b060ded0,fab86825)\n,S(4f90afc5,15a847c2,2c42493d,22dd5704,601840fb,57086b8e,d5f7d779,e3e256f,46e31958,ac2e6892,335f6b08,9ac0d3c2,4ef93994,2b585e33,226ded0f,aab831be)\n,S(be07392b,40be3ea7,a6a73807,121be982,c2ff4b38,a4585a17,82c585c1,e23601fc,3a158457,657c9e8e,7bd775b8,1dbe2109,43172771,e66ec38d,a57a8216,f1f258db)\n,S(86c274e5,2140375f,222f9e6d,47c24e06,ecc2f741,51b5a603,e0563412,fa1108ed,4a02fab9,4065d590,32eb90b6,4c98987d,2703f276,f92c03a2,aa009692,40a96ef8)\n,S(4fd3a6b,e7923898,127b3056,1dac13fe,287277aa,21127626,2678e04f,3573cf97,6498a1a1,63cfecb6,c6cf4b4b,43bc7e96,f07ebea2,3b4380d2,38c0342d,f11173e4)\n,S(cfa435ca,5423bdd7,8aafe78d,1fccfd07,cd2a5f86,ba81918c,b68c7695,dd117c94,bf4c891c,2dff79e,35b77854,66845389,c399b53b,4a9f4cef,d7d68357,10ce1fe8)\n,S(aa5acb1b,79533cc5,9b29e927,77469afd,414119e6,1f3c90c1,cdf93e2c,3e1d446c,b0df29b7,8713c001,fb6d3854,e183767e,8b11bf10,9c75dbc2,6bb408f4,22a498ab)\n,S(1b93c2ec,c21bf558,ddbfa1c4,41bca52f,435c09f5,4d06d175,6353e0a1,545c3d15,56c455ff,718190e6,5ace8a5f,d5c6d263,f72e67b1,a20dcc4a,eb53fb4a,33195ed2)\n,S(1744cbf0,2566d20b,f639438b,55f72b0d,c8480092,246410ac,d8551498,2fb91760,7e77a7a2,32b0b5c5,9d1d5da5,7a7d2570,68dc0f8,4bda1f6c,683f5229,df4c66f5)\n,S(a0be98a5,ed448c02,8c2f8ffc,607b316,1b9cb9a7,a2291bed,d24a8407,ff02582b,e7cc2c6a,2393525,b4d44462,cf6ac8f,76b86981,ddd369a2,274c1971,11da6ea)\n,S(e0e593f5,dab5f7a9,562b2591,d8d75ea3,8b2f2b19,cdc8fe71,14891006,7b845882,9088c762,15e35db5,b3bc2614,1a42ce2c,b5464dc6,49f469c7,e785f5c2,cad67334)\n,S(7824d895,a4982eab,d6f1b928,de7b0d65,ffe5796c,5e492b40,8b9fc879,c29290f5,ae175c68,8e428528,38a2d8bb,fc232c60,d6bcf117,57cdad44,8a4af01a,bcc7ee88)\n,S(49d2e57e,e0b611dc,214e4a2c,d019ae2d,2aa51393,e976cb5c,4211cf10,f9d96e66,ffa0c4ca,88011f72,779b7919,829bb9fb,11c81e4f,a78154d2,5cfa3cb2,bd5b770a)\n,S(da605f6b,8f701a85,86012e8f,83898aea,eeb3de32,e9c7bee8,be2139cf,c75ead00,5ba0c12c,e98a1c1a,89f0ca5e,a93f50fa,5a24307c,6751f633,d699e5ce,9411d246)\n,S(aeeaabeb,cde94e6d,5a1de2bd,1d9c380a,9307be3c,1c32e785,652ffd9c,bac16ff2,30094755,8510ecde,500a52b,f107093f,b62e491a,c2596460,6641abaf,d50bf840)\n,S(62f1892b,35f3fe64,b1ad1e1f,4305f9e8,66ca0a0b,e5cb778c,b0e1feb1,a10c40b7,1a44205e,e600bf4a,2e287f09,c5bedbf,f1f89052,2d14a883,8e1813a7,3f5780d)\n,S(c2091ec5,46772d69,28ebe9f5,50a68083,3a567b33,dae25e94,4ac4d589,96979382,599a765b,d2e89d31,735fa722,a1fe1946,eb610c69,2d5a82b2,3828502d,cad4b31e)\n,S(bfd7c15b,19519235,700e1b23,79fe7c22,e50a2455,5f83dba5,97d00fdf,1b242367,ac6de7de,545ec735,ea127213,fafd287,f4cddac4,8d6fe694,372bd46,bc66b17b)\n,S(d4d4e784,3cabfdf7,903d8507,3831da81,9581629f,74f3cfd1,16b5f635,132ddc7f,1e49611d,582cbacb,fce65a28,44755cb1,d1cd6d4e,2b8f082d,219742d4,61758a6)\n,S(1e575009,c378b34d,f3b434a4,95dd8c31,4945b4f8,df617d02,cddc11c8,8f908fdc,5ce37fa2,810c95a1,2697458c,b8f209cc,10bf2123,3ffa8565,5bd8587f,cf6cdb7)\n,S(b5a66a2e,ac237eb8,a1f5e690,ffdf65e5,c9268c6d,37104ee1,108f95c3,b9408fd0,99005ac0,aaa4f6ea,60842ba8,68668c6f,f8cc3280,307630de,3c43ef28,cbf72798)\n,S(1da39d35,2599593c,66c90b06,3baeaf8d,66bc3a30,21e3f6e6,cfc3ee6,7f26fe0d,9272a05e,b6b0151b,5470d076,c01c3000,f7e58aa7,8fc7fe48,9f285b85,c941311f)\n,S(7f3b10b6,b10000a7,652862d7,21f428fe,4e900c5a,f3844500,2b374434,b5a971b2,b94a2fe0,7907ee33,113bd4c9,256fa08,8c4a4f74,df3c3a9e,1f5d205c,a2ecd385)\n,S(426107c6,61850f9b,f6beb61a,e200c2da,e5dc368a,3f5d18cb,baf84cbd,7a4eb2e0,e1fa7c78,a9e6ed0f,8d713488,bd3afea4,857cece,8e8e54f5,40f8c70c,67e511af)\n,S(555e2656,708fc4c4,312093c2,1489cfa9,d6c94099,680f53e2,fa374a43,45be9697,f5efb7,1e3bb76a,22566e06,c674ba11,a7822422,c6f44cb0,2f2e2be,284db6e7)\n,S(7170b17b,5736e07c,262a927e,725b709d,3360625,4642a8b3,af8fdb12,917dd290,ef437ea3,f8998813,b5ad86e6,9a77ce0b,98b2c6a6,b6df5608,627ae735,30973b1)\n,S(1ca8ab3e,66fefd13,49e329d0,72a44f1,eb4de646,c8930172,aaaec311,5a5c2180,6fc641c9,2a87d776,81dda2a0,f4984ed2,c70103a1,5531b274,fd20efa6,3b0a3c49)\n,S(8352546a,f6d42e82,bf150c1e,41c1a72b,85f057d3,487b4797,7d5e4f8d,c05366b8,76be5ab2,7ca25b12,a888d7e7,21c2b1c9,ac92b0e6,ea0c484b,1383a835,86c5fdb1)\n,S(2f112f7b,1730b9d5,63f988ea,765c48ef,353123a1,4d92e44c,3e988459,9c904cd7,eb348e97,f6487d5a,32f70b16,d2ad1740,27d7a8bd,41a031bb,743a6825,2e34a44f)\n,S(e84023c,164dc6c7,1d72494a,d410a5e4,2eb6fd09,16a70f1d,5192508f,3ea5648a,634f3585,29be0328,89b2f510,622816bd,225aa031,ab145b8a,48a6fc80,1ef4462d)\n,S(951c4d17,45daf527,b803929,114d57f4,4da40342,31c669af,d6e40127,8e28fc6b,f9083b11,a8b30fbb,2c696f60,8ae82627,b9592ef1,c72fc921,bb2ae4ad,5a27f0a7)\n,S(adaa9457,f60b9f3e,e0a5548c,51f945b9,78845841,51ae87fd,689b892f,8ccb19f4,834657f9,2145fefb,8df9b047,55674997,f899b951,40ce5830,2e468588,1761caa6)\n,S(649296b3,9800a3b,516ef3d8,52d7fba4,597f3e35,1d303397,7495fdee,619e6ef7,44ce9c90,10215167,fdc5f078,e2edfebc,5c8b441d,d88cf853,5c78533e,d61df105)\n,S(2c1d7e97,908575bf,38afe2ba,7875f1d6,9f1e9db6,b11f92ce,4bc94d3f,6006266f,9eb250bc,30abd08,bbbb4e4b,bc09cb03,8c6c8ec1,fd1a6ff5,ba23726,da2cf7f)\n,S(b130ff8b,ed4ebc32,78293b10,52fa197,b44adaa7,d1bbd74f,f6d56f9,744647ec,4a0a45e9,b785c7f6,76fd0a95,66e4228,136f60b,dcc1806,212590ff,eea5eb33)\n,S(4f2a5997,62ecb2d9,31ae9c74,ccd71cc,29bf684a,d68f0117,32a0cd50,cb0e6231,debf8db4,5cfc7083,fa700dde,7309edc0,fc44216,cf7bc237,377c0bf5,7ccf17de)\n,S(97f9e9a1,7fbe6e25,e41419a1,8a5a24da,a178c0b,a99e30d1,cab0d2de,7a23c0b,1ab1226b,cceb480,fb4fdc8,70fb5386,6cb622bb,e71d3c0a,4ddda232,57559128)\n,S(e17f3fe5,e9f5d17e,40182067,3b710940,bfd486f1,ad3ef4c,bb93b47d,9d9d8cb,f1126a52,615d3a8a,6b360b26,305124af,44ad7d62,e03ed96b,59c2903b,b5272f58)\n,S(1a39f846,7d638182,900c3e94,538a0fe3,3ae66853,aac36688,7a5a8bb6,7b2fa2de,ae7c1399,5a625a4e,42b4dc01,9d7c7501,18492f3f,bb4567bf,28ddef5b,82903aa5)\n,S(8a5ddc61,27f6fa44,90a93e52,f4faffb8,baa60581,5142be68,cd18692e,b42f5320,5eb62325,853dddf1,a42559eb,bd5dfcc0,328e69a5,fc787389,74c80d1a,896b0d8e)\n,S(117dbfb5,74b7d6fc,d47dc17d,56f5b5da,b864906f,f08d190f,7afe1f9c,fe38c299,4acd2151,30b7144e,437bc923,302640a8,c504712f,6b903b26,bd5db8dd,5d90196b)\n,S(b0c31228,431c7eb5,7310706d,950a2a60,eec84ec7,418199f3,f2985a39,8a70a537,a7de9b34,792876ff,e98c3237,260d8237,85e47c,438fe419,a1048b00,b064ff78)\n,S(7c210cb9,f493275a,e17e6d5b,517606be,736cbc86,5a5897e0,8d1d1f03,f243946f,17b07523,a8bd185c,ea4a92d8,7af1f1dc,920a7fac,30faedb1,c38e3529,1759c63a)\n,S(172e5167,578bed44,6397b519,2b0eca17,177b14b2,f4570aa1,38771610,6ed6e650,9c15752e,4776b805,d63de803,83c73ad3,9d3ba817,c1f88cee,1737cd85,33830ba7)\n,S(161afc40,df25fda1,3637317,3dad8046,c95a6ef3,aa9c19ca,47e9ce2a,20030686,5e6fd083,c1265f76,b4b9c819,3a45e0e8,9926f160,b6257759,ab90d6f0,126089ce)\n,S(b991f2a8,e18aed33,4d769cf8,b6e39144,2d194e90,ee1518d9,459d3ec3,8a16a85f,1d2ba9a6,b89f71c8,ea169d3e,923d2c1,7e6e590e,21b28e8b,1a0d0cd6,1bcab7b0)\n,S(dae0689f,5a6cee77,f796f488,1fb3647c,7d623348,7d5ab502,6f1ca30d,44ca8afc,ee67b670,f730bae2,a15e6964,33be5b95,43ccc1b0,314cdfa8,c6cc8873,c39c329c)\n,S(47a58ccd,75f89c15,46a17ba1,4629fb5b,d72805a4,16a12e61,aeafd8ec,8a7e4e41,c15e7fed,1bbb810e,b4be60bb,61fc1f0a,a4bc43b9,73d94767,9b954f3c,29fdd889)\n,S(f7ae2fd0,2e3b6ee3,30c0697c,94ef65b6,d7582f69,5c509698,cef09b44,6b040e3c,ade9f8aa,c527139b,c54d8e6d,ddd41ac9,5eb49565,79934ea3,6a9dd8ad,d419ca03)\n,S(155f9ea8,9be2ae20,8d7e9c21,4c244a58,ae61cf24,5d5f8dc8,b6c448d9,7c12989d,1204f5f3,840cd19a,fda04abe,6cbf4490,cf5ea60f,4cd17680,8c1ce9d3,65b009ff)\n,S(a83cc9c3,933b5f14,fa5348a0,e0d3ee39,e35057b9,13c5a51,89a61663,1e9d74f6,40aa66d7,fad68476,1e2a9c78,e1fbe478,52b91d11,a283e1db,e30d4baf,f072a74a)\n,S(ca4951cf,c07b5c23,298a20e0,fa44b554,d7acefbd,bf2a6cce,11fc3ea5,67b5f5df,186a8bd7,6700cafa,c79791a6,b28c799a,35aac545,78586050,b8012c4f,9f4afc2)\n,S(cf92dde6,1bad101f,5e71f2a0,dbc2438d,d6760ba5,b84791a9,ae0ce712,9eb6787c,a7d351b7,f3e31e6b,cbcc1f05,329458e2,6c9d8a9d,1137d595,28f53e23,5c3bcbd8)\n,S(b1ab0b3e,cfd8283a,3b79df9b,e83e8b37,b06154a9,6e2a687d,8f51985,129c1179,cdb7f2f3,4bab534a,41f4cd97,b812900c,99e97395,3837f058,12d5d0d6,e9506bbf)\n,S(a1743329,9cd4c9e8,4fb99295,f3febad9,197296a2,98b30354,24e9524a,e1789ce,40994ef4,4cf53577,6f078088,adcfa6d7,5bee11a4,4f2f3fc4,4282f5d7,f77e1afe)\n,S(241b486,4efcac7c,3c7b946a,61a55317,38b31846,607f1e0b,d0a1a2b,d9c0573b,5cce8848,eec61cd3,325f3ba8,fbca403c,2f980159,bad3997c,832f5c98,1fa0d574)\n,S(81f88209,64997984,699559ad,f799ab0b,e3efd354,d258137e,d753e3e4,de91b387,8f9fedb8,5bfd7061,1b9e5caa,5f3cc8da,43bda599,afa29967,a32c71e6,aa26d15c)\n,S(49d64231,bd2c2145,200793d6,4a2ec254,c22da96b,655706fe,8fbf5d49,464e5a5b,faec8eda,b0d72cad,81df8121,671c6dd9,bf986440,3f1a702b,548d4333,c751e825)\n,S(74c14c32,4fad3a41,1c7e1f15,9b740980,6daea24d,9476e938,7e77db6d,66e0ae4,af795203,1fbee5cb,f031a2cb,946e6b65,3ee0165d,abdb89fd,5aa73880,e0641a41)\n,S(88bc209c,7342d94c,be3f4215,81383c6c,930f9c19,d09d91b2,a984b6d7,12a1e7c3,acb7d745,76dd8723,89a88866,e287610d,b817ebe6,1581aa23,46ac994c,4c5b3e08)\n,S(486c8c68,c81ca88c,df7b93c8,5a1525f4,9bee242,676aae77,c1bd85ce,2a6eb3f8,e0fec94b,35fa97c,d5e64870,6f5e6849,d6249004,fb33e34e,c1add26f,4fe52d54)\n,S(4a1efa11,6c588e23,7b5e30fb,5d0ddf37,ba39043d,6e5faf14,e28ceb90,4a681a3,bb196737,3c907165,a8937dd3,1bce476f,65f2acc1,41bd8d53,8fcfbf1a,997b64f4)\n,S(d7745c06,c69609ed,db17f30,8efe7bb4,2632e85b,7f7f792f,8da44294,78eb28d2,7575a75,4d1b2bd5,5fc46e11,b1addb1a,5371f007,f702a97c,ad13f082,39b96a73)\n,S(bd752f2e,a3db27c6,a6a08ced,df74a87c,dc333d50,fd9995f4,9ca7afa4,2be68def,378f8aaf,67478d20,ba4725ed,26d50c62,ef5c576d,da9c24d7,91dec38b,a5e9491a)\n,S(ef588333,15a3c7eb,c6602bff,ace00d5c,55eb304c,7f3301f9,4be457b0,1f224d21,56eb3aab,6253dfbe,3d9a95f7,e843751d,eb52e054,cb5a523f,f46a0c12,b517abd)\n,S(2c1de374,7355825d,a09beea4,f42df241,6b495ce,7edf1f1f,c1dc6043,5253727a,98593660,9082f5d8,8f9986bd,f77672a8,5ff92cd0,28d2c588,73a3b1d3,87a150c2)\n,S(49f8d71b,23e60140,f50c9001,6f39b2e8,b78e2a22,a88f2535,324ff50f,280daf99,f66bb665,4807e7dc,330ec339,3f6fde20,308111c8,1fe42546,22b93a86,b58b04ec)\n,S(365c9f85,754b61ca,2b2a30f9,954f3a52,d18fdf78,db593ceb,6df617ab,189f37be,c43fefe6,aca56bcb,ffa6aced,60a32794,7681b601,22369a3a,f1405a41,5132825e)\n,S(1cf2cfe9,e89668ed,c1a446c4,da311cf2,7e2cb53e,1984a310,8e24e8bf,21f1b5af,71e56dac,43c53094,7b78f104,1a685f23,aebc7b12,e2caf803,6731ef5a,20c966b7)\n,S(f3303479,62660226,f391c26f,a7e87796,219694f8,e01cbd52,25dce636,b48ca3ec,7dea0bf4,c110e945,dbb59ab8,74f83a42,afa585c8,56a93002,6f48f8fa,62762827)\n,S(b689244c,4bc16c88,398664f9,2297ea0,8756a969,1ae7adf0,587c3253,e4b27154,9b488748,1357368c,c97f89a9,b4a75a0,bd7483ae,5c700364,c27d19a8,e450c856)\n,S(bf34fcd2,d6b4371c,fef2f874,5e4be021,a78b4302,240d4517,f3eb1140,638cbe41,ce6888d2,7e326eae,8e772914,e1b43bc0,1ef6a238,27f67546,5464e195,5f97ac02)\n,S(c2097a6d,231bc796,ce85a594,44c00250,d51ffe63,c45b9cd1,10ed4821,118d74fe,58b06413,fc4ac173,e1e3a85a,ca674885,d1f92b3e,5b99f72b,1350b6a0,bfe4ac87)\n,S(874a6222,3d8804f3,a11b1de,3c647aea,e3e81798,40db2618,4d46a330,417afa81,4132a5f6,7986e622,976b181d,5c98f356,b31668e0,ef70f8f,6b13a0ed,af80b429)\n,S(ac7c6e8a,1a05d592,8142227a,b0c3ed46,1f28463c,ccaa3b85,b9784e0a,f5bc605c,1a59a195,581e3397,eba60a0a,963f5c71,c107a9db,68794da4,a08b14b3,118a2186)\n,S(3f13e2d8,d825a3f6,8875c01,a1715a5f,44bc12b8,2f254a65,575b163a,3333342c,baff6882,fb2c2611,ffef76a6,8b5e2293,6a2e6ecf,d7ba6724,3393fa1c,5825e3b7)\n,S(1ebeb354,515e7f39,dc3e2631,51d0630d,aa7e400f,4c9f7cec,4d5f95ec,bfa8fe2d,a2e35cef,c2cdcf,384a2473,c185f3a4,c70724b9,84c72dac,a6ca11f7,ae5c85cf)\n,S(c2dcdb65,b211e765,e6c59218,d12b45d8,b47d8f9c,e22b99a0,d2d19a1d,de02b2ab,e0aa5b9c,a960117a,7289326e,9259f886,8722e032,c96b5237,b146f50e,24f3be50)\n,S(495d69f7,e2a9d144,8e2ed8a9,c038f6c6,7f360b8,270c9b85,841e8791,64bc0d45,5fb3fe2a,1dabce7b,83b4465d,74fac6f7,c48584be,134283e7,bdf59e0,957088d2)\n,S(ceac4569,2139e4f9,701be43d,8da3f515,270a9477,bad5969d,2037ac87,3453bab2,bd1fd9d8,15f4e872,b602f2bd,9604b6b2,f385ea40,d5520b3b,ca32c160,44908070)\n,S(7ed1d0b9,3196b8c0,1cd284cb,c0a206af,4e6dba1a,d6cd406,82f55897,9407e0d,e95a3ac9,6ba60be6,22f4ee73,2d75a9c5,11018ec0,d840ce0a,f1bca18a,1d2801c5)\n,S(72fb366,4f42cec8,940fd436,5ba7cc97,ac5fe4b2,131250fb,a24b7178,a1040b04,c182b1a,93a211f5,f5de5c9b,4b52ce90,63d551dc,a21ee9bc,dbba2653,c47dce41)\n,S(dd06cd8c,9ca91e45,d6720043,d3e6d857,4690192d,59154309,2160f04,6008beea,cdc17327,6eebea3b,f9fa8a7e,e83ebd81,4189705b,900b3ce2,72b85dc6,c41e7ecd)\n,S(80f6129,e90a7f0f,1e650439,8bfedb10,3c708c43,2e2c743,da8a9a99,3978cd13,74d97812,145feff4,a3ef594f,85b644a6,d95a3082,3828c00f,e7226d4f,39deb82a)\n,S(56af34da,f56b508a,eee970af,bafb9dd2,b48f83c,4c051b24,f5bc27e7,105995b6,d41dfe52,9e788e19,89105a4c,c219dcd3,decca65a,dcc5f34d,8a3ab0de,d1ae68bf)\n,S(820225ba,795565b4,c45e29c,4689d91c,148cf693,a1a1c1f6,ca33c44e,4e3f91ee,3622ae5b,c89b9c2e,66bf5a3,17826928,11a0f4f1,4b387334,b24028be,ba4b7db4)\n,S(7925fdbf,cfcc202a,895a1b7c,a8c7f09f,ad388db1,5652b703,3bf232be,a2ea57d2,46f7ef01,c9cb7dc9,1559cf5e,c6d3f5f2,1ebcc21c,a8414d0a,9dc37309,4e90525c)\n,S(4b224b6a,f38ae731,5b316eb,8dbd2b1e,6638794a,9bff79f6,1027f60d,5d81808,3143ea08,b1633002,bbb2ad2e,11ffe5b4,b6dc6888,1fc669d4,23ff9cb1,595c3dac)\n,S(2c0767fa,4135f4eb,602a1a36,e6ce488e,2c1bdd64,aa4113cd,28daf20c,687380ee,ddc3effc,e78d3061,7cc2da71,1373de0,6a65d2b,1050b89a,5f71be3b,fbc16a7)\n,S(83837d3e,e7179a84,ef6ed2d9,41a9f835,37b5a2c2,5d511ef1,982d9bba,50a7ae7c,62201e16,60957b4c,a86f1a49,5a6027b5,fe2294f2,7946c8d8,556024b6,e3b66dbe)\n,S(cf075b34,e560f057,53a8e011,835bf1da,25e50d9e,1d70dd9b,da427109,5895387a,c73209d0,330ff4d2,38e19f6f,33df38d7,2b11d8dd,180d6a14,4b07184,a2127018)\n,S(d583f8ff,9b1875d1,ef468030,e3ebb7,9d06ba2c,1008329d,cb01b883,7c8931a4,f8cfcf1c,3f092ba,6bfcfcc6,9596b508,aaac7c9c,333ba58c,d55be53c,6fae3292)\n,S(551fe9b6,21d2389b,fc185372,342edb1b,27568bb2,da1fe220,3431b792,43eaefaa,6c76904a,e48563cc,c6aff505,7f31119f,ff48e5fe,971223d8,c3badd02,563c24e0)\n,S(1bb778fc,74062f24,b0962be7,bce7c990,51f06394,bc8e6da9,a9d63f6e,d16a80b2,2754f53d,2f4ed167,3d2700b6,8ff036fa,60e9352f,1dd7bbdb,14be1740,61d88318)\n,S(a150af7,1261582f,8949f1a9,3ff8d539,aa0744c4,e97cfbe6,e4a3fe10,e7e364aa,e22a1afe,a68671c2,f9e12471,56e1bf47,100737ed,5f96fab9,9e0df721,eaea4773)\n,S(c94ec3df,727fdf91,d7963a03,8e93d68,835ed2bc,2578780b,7242e15a,e72e2a9e,a476a0e9,7bda53c5,46312b35,f0fad09e,11b2810,b3f570d5,a934d21,7152009c)\n,S(3366b9db,ebe13231,7c542739,4235a72a,f186bda1,784c7f25,5f8b65f7,f146875a,5ea2478,95f52889,42321383,5439195e,6b620619,20171862,eea32726,1345d3cf)\n,S(616c8e6c,e52265ec,cb85ef36,5092b2bb,58bec6be,444c2373,974c38e5,e0e8ba25,4d3d5543,3d6e258c,d8b286f4,5f41249a,724a9890,2f1ef3ca,ba049bf1,cdaa0970)\n,S(74df2177,2e38e84e,8b81d86e,f45dc4a7,2617b3a6,32094b1d,432291f,6a651827,4c32baf,30f09527,fc4abc6f,9c9b9a57,2a9ccf1c,6a1b360c,48746d8c,22e01334)\n,S(1814a1bf,76b74532,979966d1,5ef42faa,532f8dd9,bee0cce5,d68fc500,21accbd1,5f5df5ff,da9d439,b2205ad2,5fa93b9b,7af1746e,9b2eef3,154bfbad,acd46bdc)\n,S(28911e94,98ff7526,badf2287,8e85fbdb,5f444d66,c422a975,c7476c02,b98625cc,5a341cf3,5cf26006,9d869542,fb221ba6,eac150bb,e3809ada,5e4c903c,1e638537)\n,S(d5acff71,e82a455c,3a1ce292,689e8686,f441ce1b,e644e79a,bd6d0efe,29270865,aac6d48f,1b46e970,a044971a,ad13f033,ca8cde96,958d870e,dc7d80,1d26d5e8)\n,S(5cf51c1b,2210d85,9d765e17,32109514,8f03fc57,51004b6a,91f098e2,e2711596,1eeb19e0,610df459,2c31e58e,aa2a2148,17fe9ee,a3995838,f395bdcf,26d5c3b3)\n#endif\n#if WINDOW_G > 14\n,S(21456873,b58e3687,52c75800,8d3bcae,9efaf1f5,c5727842,25e3d854,8fd421cb,a2f2d10,c85e8a0f,4a136ad0,5df991ce,7d3c5585,a263d5cf,da50a4f4,3db76cb0)\n,S(c10de5c0,51ae2d73,28ac06ca,cca840b4,ed7ab204,21c6122f,1d68fe7f,7893d38d,ee30e086,a891484,2ad4041,f9ab9c57,cff1a315,f0642d31,b31c2914,faac99e0)\n,S(be778032,f12c1b77,9bba3d9e,d290ca90,30ac7050,bdd77a2,7eac09be,eea65c0b,8657348b,a1e27a63,1dd2a54b,e2d5270f,4cca817a,219c5378,4d4f73ba,2c932e63)\n,S(a05e7551,f8f090c1,bfc8ffcf,fbf7fd57,9d033163,67d5ee64,b85c4f69,33d0ff6b,8eba561a,f42d43c4,99e1fafd,43b49698,a8f3babc,c9c94c4c,4822cbed,a741b309)\n,S(6e4d47f6,b17501b8,f3b220d3,83cf5f11,a395c0a,f0023988,c4e7b8b0,ef66ed23,e01c4330,16e3e6a9,535f1d40,905e9b3f,8be9f05c,b53e6143,e81091f5,4b76b57d)\n,S(f626750e,b7eacac1,7cf24afd,43345019,c6c32292,c72503ad,d4125d40,67b7e66e,d669f903,67f407d4,5307578c,ee91fa01,f030bb9c,b66c7111,34b91757,1c993f4d)\n,S(437acc60,c555f7c4,778595af,db4676a2,1fc8b3cf,2c8538f,cecbae12,811511f1,985fd2c0,7385fba8,4cf25a1f,46cd2c3e,de8dd359,1c6d20ac,584b4a8d,8a65dd67)\n,S(8d50555c,6245e43c,a619fb76,ce45441e,dc585c7c,4fb2f33e,1c07965e,d4e35f5c,ea828c37,331ad0aa,44d168ce,c328a9f1,c7deaa35,47ee4757,c776fc46,439ea5d2)\n,S(87f5f6ae,580ebfe7,1b2c19c8,cfe770ce,cf8d4223,62718914,eb853f1b,7f4cbaec,eb61df09,12e06f58,ed6d85da,7240dd72,aad00c3c,6a3a9c11,1f378664,cf359386)\n,S(c1cfcacc,b95e6577,4e2a7d12,3cb0071b,3325c27c,5d58beb6,781a30d,ff6306d3,fa9ba55,cd95e721,12d98a19,8e3769ef,8cebb355,dde5b62e,e6f3b8e8,52a3e81d)\n,S(d68bf50c,89f25969,a765af90,854bdb89,d67acdf8,f1e16bff,64868338,8b88e311,b62d1866,55835dcf,8064e13d,aca1e896,2157576,a02e178c,78d27c99,9cce81a9)\n,S(b8d7c25b,8c20438e,702197cd,a3bfc05d,c6577717,c9b6a527,15ef84a0,2c0df867,316b527d,4be0e62a,2015f15a,17a412fb,72ebbffd,b02e53ab,6e5e9791,b771b45c)\n,S(d98b3403,a299106c,9c6fd52a,8abd9ee5,cea9ab0f,17a15b4,7eafc809,c34e356f,bebcd24a,9300c739,9bb3af8c,12fa813c,78c6838,dbfa00a7,4ab09669,4df9700c)\n,S(dcd15a1a,7cccd53e,db08c2b2,c6367126,de55cc46,a4eaf5d3,335ccff2,1238bbdc,7de57d26,bf74764d,bcc7e15b,72ec272c,58061f47,cc0715ec,48bcc032,60e63a81)\n,S(2f6a844e,e758e3cc,8f299e01,ba5753a9,d35e6c51,6a87a683,8f5ce28a,fca17c62,5c29172f,f907c0ef,95e78768,2625c8ff,27e26eb2,cd86df92,b9371203,8b332e73)\n,S(e63add7a,e511eed6,93f62498,17f89221,c7a3a909,253faef9,23f37a64,9e2a2f67,c392df22,5ffa1438,c3d10c6f,813c3956,4f94367d,6fa26c63,1d562049,99a77e0a)\n,S(f9955ec9,20fc68b6,cfcd163f,34bd033f,4ed7dc8c,30da7f16,e41adb,908c9b7b,4dfc49e4,ab583975,90bdfae8,56ce97af,91c92f60,a17df9fe,9ee923b9,9fe2cf14)\n,S(d974d713,bce1db76,c5ea1143,b63ace02,5a2362ae,fe6b84b0,ebb0c49f,22341d7c,991181fa,3ae5f188,38a94047,9ea9e4dc,e8ff9366,78583189,bc340d2b,40481577)\n,S(4f0af691,424d441c,698dfa3e,c3e56bea,e2c52fa3,bfd9ca45,763d7805,33a3037e,caac2486,81590630,b0c67160,89db929d,26a4e15e,b06aa9a5,2e19c92f,a9f9817e)\n,S(ef6300a0,70060df2,3f9818c1,6ff4d315,fb1c7d4d,fef41e85,c96760d1,3cea49e7,a0622360,2def9738,d87803e8,6405bc00,88afa82e,39666246,10f5d935,993334fd)\n,S(fef30954,1cd2a90e,1d473ae3,699ea7cc,ef69fe75,54f7d710,33b1f23,c9e96886,c2479c48,59423c87,5d76f6b1,5c671ed5,c9489af7,79266341,4ca68675,cab64fec)\n,S(457cdf17,b1230409,c3d35a88,390f1bef,859994df,3ba21d2e,ba5f826b,6dcb4fc6,5aff71af,708863df,3074c236,446ddd33,5695c0c1,a45bc482,e0787788,a0e4ede3)\n,S(a66e86f,fe0e9cfc,686ab0fa,11b641f4,28499f3,450d69a0,dbce1895,6181ea39,de0cb1e5,ca720556,7c6756ce,868df6b,5174887a,61afd354,653e759d,b3e3ec64)\n,S(ddad5a09,c37f0de6,67eab59b,fa2cb47f,b79bf6f5,b8b0403b,f689acfa,627f1014,8aed1b91,c9e567b1,9806082c,79ec433e,1a152279,69df00bd,239fd8f3,f8e8d385)\n,S(45c5156b,f1439eaf,16a43b39,5c0a393f,a674e17f,76f96d53,9aa6c99b,49042c42,c9bcc2ed,c5b5c8c4,b17d633c,90d45b9e,1583898e,41bb9d90,1d1b5097,57f5f516)\n,S(c83b3c9b,564906dd,60049c3e,9f6ed0fa,b848366c,3b93650b,7923e9ab,8172a8d7,5709dd74,1326ab97,8853304c,a02315f1,1f0bed5e,bffab6f,467816b4,4c60a332)\n,S(a857354,dd08dc83,ce7b0324,7594e4c6,99692c95,9a4887e5,344cd0a8,7970174e,becb7001,ddafd72f,1f845579,ca8d56d7,2145c8a9,be816924,957ba324,3c396691)\n,S(8bba6b47,88259a19,578adb4b,6f7f51f8,d09eb70,ea790d62,abb2ed45,84f94f33,afa42da3,8526a485,60919f12,d30549e7,1d19608a,81f4cf6e,8e49cb00,2492b143)\n,S(bb4d27eb,412e73ca,d2697d6c,46a143ca,e4420ec9,30440025,47aefb71,c99a53d0,9ec07a19,842a1e5c,9cf9f76b,55ad98d1,9485e683,b6b6700b,c905e190,bd9da19)\n,S(af6f6827,d197688,f00dd3f5,ded1849c,11fc2abd,f90fc7f2,18b33776,e5753277,f9227693,c9405a2b,10e9b725,aac7ed35,eef4281b,ca04e,bd75b143,89323646)\n,S(40453814,445cc67b,e7a4b71a,55e0b993,2b8b3477,f093df6b,f27f55a2,8bad2e1b,ec71d7d5,4e823687,d01d7558,6de9a1a3,7edc927f,e221941f,46051747,a69baab4)\n,S(f35a6c29,bd596f0d,93cabc3d,c07b5f68,300f6ab,8ecde5d5,da8299d,112c7bcf,73fe2c46,e1b13112,718526f9,7a39f1f0,3d47ced1,84a2e4cf,1e32c168,1c470121)\n,S(ecc7ce7e,bbe5da1a,596bf41c,4d19b51,b77f7019,bc431aba,e5ecea57,b095fa93,1ab89d03,9e7c6ddc,7751c9bc,4eb84ed1,b077cc8e,dc828ffa,37426609,e089c8aa)\n,S(559820d6,bb3e47e,f68f48fe,1259da06,cd0b380,1f6bedb7,970c079b,7e373bd9,2373137a,a4d88574,151540cd,ab8cbdbc,5831fb7c,4b901c27,8c9a593,172a64e0)\n,S(9c9b7e18,4e76bd16,856addae,9352590e,310d653d,809ec800,415f3c64,149be4a0,182cd167,55eedfc3,21d71199,7543b26b,d08047d7,c9363e23,20bb9516,da37a146)\n,S(88e4e3d2,2cc3e6f6,19e62ffa,c7a4aff,63b16733,202e5410,52cedde6,9cda2733,ec6e32aa,498a7a30,e1c47136,5671d356,bf174630,d1b984ec,d9453e24,d275e067)\n,S(7f2f8043,8e7d7fcf,593e337,a91b06ad,3ad1c461,fcee7bd5,82df516d,cb1c198f,2cb484f7,5a4472b3,230369f0,79f5e654,8dfdce60,98c4e561,a1310224,13dc1d80)\n,S(fe0c5945,c5e67d74,ed498120,dae194cf,33a3fe5b,ef0f1ac,2c64c292,59827d7c,4ebff1a1,7d59c8c,469fad0c,79ef819a,8a897ce4,c0fa1121,741c03f6,cab0f659)\n,S(ac0662e0,1be37c28,be457bc9,4af19e72,34a9d3e0,8667c009,ec58ee79,7e539642,b3adc375,bdc81a76,8385c9e7,2ecec61e,9b2b21d2,55f65450,c5956187,837f3767)\n,S(15e0f7bc,d74e77a,af933c13,6cdc5b1a,1622de61,251090a8,f8509b05,d7dd527e,4d51a063,1fb81f2,fa1ef534,5fa306c1,a0c64f94,66961cc8,b574b06e,646767ea)\n,S(e4119d0f,b79bd8c,e1687abd,4ad63790,814f9972,50fac9a4,f1b52d71,93ce282c,cabde097,8f9a566e,32ab229e,63bdfbd3,89f01378,c7d27b0b,f101cc3b,36bf3fe6)\n,S(27a5b030,2005a21,5d89c0b3,4e4ee323,5e94742c,262a89b9,29e286c0,ab8e3c24,4548d58c,3792f7fb,18238cfc,993fdb26,f755379c,e0ed1b0,4df26132,8f987a02)\n,S(a18ec59f,7621c8a0,59bcad5a,12d3f536,142d5c94,4c7a54d8,b9206132,d993e08,abd8204e,867035ac,8cde70cc,f7daa29b,d47b888e,1faa9be9,b20744e6,ec5a43a)\n,S(9bcc19a6,71b787cb,9da72c91,8d7b2264,b9497ab6,313de85d,c3efbeaa,2f492219,4bea790f,67b8100b,9ad9a301,61e3bd9e,583daec8,b77f4628,568ed554,70894bbc)\n,S(7ccb2731,cc3eb3a3,36d36af7,f44a0a64,e23aa0b1,12ba0e6a,11280c5e,1ab36205,8d60552,1813ede4,dcfcbe46,c75c5aef,7ec40c69,99cf301b,28b0e875,3031c6af)\n,S(94107245,fa13427a,7d21f7c7,cfe0c4e3,2943821f,da0f77b4,23fde091,ba596939,89846c62,7868b1c7,4c546492,dd4821d0,cfe15fae,36896af4,547deea9,295ccf84)\n,S(959bf7d3,989d3460,5f4b8f3c,cd12ed86,cd0a2a93,a8d4e1fa,aeb5d6bf,24f1115d,7cc703f3,5417d7b2,b7229626,558be68c,66a915fd,7cc52829,dc98c81e,c0162b7f)\n,S(8e92173,ff2de4bd,f468e2cb,fbf6264c,5fff8f23,2fb57e1d,2a07ee75,3b45e7ac,2655133c,8833040e,4ef4c98c,e5c75818,be781f42,cc0b7314,7baa3ef7,99cc017d)\n,S(4acbd2e6,98f349cc,42998c5c,53de7b6,3dc29b1,c2b8a569,48cd3489,190f0255,8837f8d4,15b3551,4544878e,1a71922a,ba4a0790,22c74b60,325c6f49,a411b978)\n,S(f79cfd2e,b63f6be3,bf0f12d1,fea3524b,1188959a,425f5e38,fa569648,df433fce,9e412cf1,698805e2,a92114de,5694a925,17c31f49,ddca7e0d,b2d83d80,74d92b2b)\n,S(41910c81,78f7a61d,7957c065,5d7e2596,a0e6d5e9,a0a9cf23,28f23569,5d818c76,26b318c7,e8a880ec,94c59a6b,d6f1cad,84031d0,e62ded95,1e265ba8,c3603367)\n,S(5a864466,9fd276ac,ad8782d3,51bc27b4,9445835b,75f70a80,2ef42a0b,4885cfe3,b2510d98,60be4e66,edb8c935,3c8ff8d,2e008c37,6dd271b0,1f77276b,f3a5a48b)\n,S(5e3974b8,1b87348e,e3ae5c83,2dc56d1,85004b16,90445b74,1b8e262b,ecfe0e01,63f644bc,397a1809,a4d57ba8,f18f0372,cd4fd083,1c3d3449,1ef2a654,46275568)\n,S(154e9c88,589ff342,6fe2eb5e,dd6e1db,e253498b,2c0b3e0,52e84211,caf9cc4e,3a897093,df7d31c3,754f84c2,68b0594e,85cfd4a7,c2731fce,e01cc3bc,2bbc383e)\n,S(b95aa134,e48967f1,bd3a7a48,d89d550e,3c3c3c6b,3c73de48,f2e6fba1,81c93faa,b6f2d3b8,8d0821b0,6b1134d7,ddc898fc,e84898fc,4719f8aa,e3570daf,168b03e8)\n,S(316564c4,ff00502c,f159db79,62984516,4d6d24c9,1f20ba73,66669808,95e58b92,6110a6d5,39ddc,d4185b72,cc576b7d,a4577e80,3dd47a92,d4bf346d,ec5905f5)\n,S(222b179c,29ff89ee,d6f2a0d2,d38c6246,33237c5f,7803d8c5,e4315f93,6a9bd225,8bddc333,6eeb3cee,a0c3ac01,e7caf4f2,f44a50f2,587e3e31,7046c85b,a57cb6f4)\n,S(10347fab,33fb4ee5,6cbf75ac,6cb768dd,f51f9b0c,5498466a,6679439a,32048904,a351f45e,30f32caf,e10d99f6,9e9e4be,c3f4aa22,5388984,bc45bb78,c0c5148e)\n,S(7048c0f3,1e600042,4544e9f6,e26783d7,baeb411b,a2c29c7a,5aed8953,bf831629,4683ad69,1d9f14a3,f67131bc,55d28c61,1b78b2aa,329668fa,8fc41736,c95840f7)\n,S(a65f7371,b35de05a,78b71171,40ea9e02,7b777785,13fdcc3b,484ad9a0,4bcfa1a3,41d1268a,77b31744,5a270f73,956bbcfa,3f291770,d248d1e3,364b4aba,72b961c6)\n,S(dfa35552,8518d1da,ee31f04a,2673d053,11db4eee,cdc81f15,bce79c64,3267a315,19ed047b,4fa52430,18863cd1,d8ade0d7,dad60ecf,10b767ab,52f5cef5,9eea9a8a)\n,S(663ec2a0,80564f1f,943a25b7,2f60d3a4,17b62130,3015e17c,85782460,c601a48d,fce25852,5a4dbb52,4057f8fb,a4393116,ebcffea5,5ae3459d,3d8b19b6,a0387232)\n,S(cc714eaf,26f9960a,b2cb139b,d2fa0928,7a309c9b,ea852537,e10b6333,2912431a,c1c5c0c,48c98ea9,b57eb13c,fa64146e,67a95569,b45b8643,7752b037,9269d070)\n,S(a6ceed6a,bb8f1ac6,13799527,38a19b35,ece44537,e74e9185,a4ce3939,c14f8e77,c0090ebe,d410f2e0,2e56b4b6,adfd5495,488c2930,2c5e7a61,3926880a,88beedae)\n,S(e0b0c34c,8d4f77f1,dd09ea34,8b0ec683,cb5ca777,6720546e,27ffcf55,a5e5bded,ed4adb20,ab5da65c,2d1d5d68,9ad63ebd,90170904,65f7ad03,1bf3d811,f407d09f)\n,S(2362ff0b,9a2d0f7f,d779a83,8b26da93,65730d32,bc4411ef,fc4fd182,d9e486a6,d3eb4ee4,42bd6157,557e4e9a,dcc9c103,892ca05f,5c5af804,f736ecee,d8a6fc3e)\n,S(2f1636ab,a1516634,a00a464b,aa30c507,af25e83,3f7f6fdd,ccf0706e,d5fb57a0,a664c955,c24a54ee,d56f1aaf,fc853c2f,6a81c53f,1ee36c48,46b26452,fcbcc054)\n,S(243a8fff,6230829c,73368eed,fb4d62f5,bf478b4f,1752400a,91ac177f,70c303ac,29318b21,9f371dfe,4048c4b1,2f5317cc,b2e9c44f,ed72b537,a2f56d06,65229235)\n,S(b17182a8,5f442a65,839230ca,5cc8f67e,835e54b,e0296c6d,e2b62298,74ae804e,11a4fbcb,9f6f8775,9d131a81,939e0125,7f7b4fca,e36ea644,4da3cc16,a161e5aa)\n,S(5c9abfd1,9cae1a47,bebdd324,d11cf758,a1224471,6e83795,e42ff5f5,a8142a6f,38a38db6,f64d9d07,4a08a909,28768bdd,adbdd858,79ec847d,28c94dd3,a122e0d)\n,S(44a8a4f2,ec3dd02c,226ae0af,d73a12b9,726e03c3,2a41099e,b70cdce2,767e390c,b7e18dd1,e6adcd88,1d1dbead,e1c83ed0,1f1d7b2e,50246539,b6bc2811,d63233b7)\n,S(8e477766,c4de01c2,5cc17218,7f3cb6f0,dbc8eb54,fa888911,33131b7c,219e6e13,ba8f447f,10286c86,d1330c82,2647a999,b4b60e56,4131986,a6c05128,a480d83)\n,S(c5f862ce,dd253879,8100eea2,92e860fa,321d7709,596a4dfd,6faf6345,82fcd3ae,81ab1260,684fd3d8,1b47c5d4,d5f0c319,93ae7db4,fed1a781,61d9d9d4,50ff831e)\n,S(a674db01,836fe328,8566d977,753ebc2e,d55f0116,5ebf0349,51caecd6,ebf899db,12ae8327,737f7db3,56e26fb4,1ab306e0,2294136d,71206f43,78300b95,60f580f)\n,S(b0cf999e,f11dea14,3e6b6254,aedf30aa,ba1e8e92,96c500f5,481eee45,a0e15adb,e4970d00,e02adc6a,be5e2433,7e017dab,17a61de1,d977ee99,969591,91a5563a)\n,S(b3615f09,29f9b2a0,6a4c68ef,c844ae5,54959ffd,f03f9266,f918f16a,b517380b,31a7675b,83677cc6,ca87c525,27fbba60,d06ea317,fefb17a4,7d7a4242,3595f1d4)\n,S(7be97bde,b271f807,96930353,b82c3cd2,c6cce373,198572c7,d289511d,7cf262a1,1af89a8b,cfa4a399,bce5bc21,e26c97d0,5126f8c3,211d8051,626c4f2e,c6f128b6)\n,S(692e447d,df9c77f0,2db1d34,101bc355,519d40b1,3fff2cbc,aafeb555,29473d4d,d21950ec,fb7bb723,4e4e48c1,98b93a10,8a85bb5d,5228116e,da6f5cfd,8968fda)\n,S(61b6fe3a,21b0bbd2,dfccad11,5123db4a,98058bbd,4f8a61b5,e416b03d,b1414243,75d3dabe,f3e2266d,65d408ef,af6b32da,7591f08c,7fe7de,ff20b9d6,7a3a8a8c)\n,S(fe0f9f,aa49555,2afe97f,8462869e,e8a584ac,3c3fba4b,886208f9,fe260ec2,a9c0fd7b,cfa239a0,299afa47,e2861197,f382a331,7607e129,967bb22d,3ae3077)\n,S(7f7c9a0,a240180d,c645e77e,c628bff8,fff90d48,c85d2fdb,faaf76d9,b93e26a2,1b12ec74,f801fbe3,ddeeb37b,c940c605,84b0ef14,85e9d888,f3f81c05,607d1222)\n,S(3e444ef3,b77b49c2,75aa0524,77da59d5,a68dc6ee,6288e2ce,140512,92e54c60,e211ba3c,6860a898,9e1ee04c,ea9ddf52,25ed88a2,c6ecd9fe,3c2fd500,88367b7)\n,S(4844747d,d33f7e4d,39aee79f,138b5fd9,223b4e51,c86e4894,c917a3d4,746d824,68cd147,2560b5d1,6b9bf538,b7f1e193,d2f220f9,ed9f742b,d36a003c,28e2357c)\n,S(f0211c1c,8f87fb96,bd591255,6a799865,7382380d,6b5b020d,9095f482,4e8f531d,649112c5,9cf7a8cf,7f9d920a,6b6d1102,d92441f1,1bde7561,9cda8eb4,a26d7493)\n,S(918118dc,15520a31,c715adcb,3e02ca4a,4d77c92e,310ef057,3f9c7a4b,d5d2d54d,37d2c580,337de379,925506ab,c6b7d9,4a61584f,4cb2179d,560d3a7b,406873af)\n,S(78734d5d,833a5d24,5546e5bf,9d3e5ce5,61f818c4,a4c90fab,c8ae4630,a2c307f4,4b150c27,e054fdad,73506310,80eb5308,b39c6861,23b851ba,aa2349f2,c26b5981)\n,S(ee988075,34a02de2,9fda41b1,c821c41d,3ddd5d85,9c5a4ce0,d14ad743,25943f13,ba7fda65,4389494b,40a9fbbb,4b72739b,6f85effe,245b895c,b8c7e423,8d6b7973)\n,S(4a821b26,bd1326a8,26be6fec,b90229f7,d7a37a2a,c49e97a2,5bddabef,e854e509,8a645892,37ea07bd,929aee46,6fad63bb,5612de36,cb951200,b9faaec8,b11bfdd8)\n,S(23658500,fe8b5ddb,93dd3b50,a46f9914,d04af9d2,2a786be5,9c0fa7be,7c3eb2bf,840e5cca,f9f3e8bf,fe51c1d0,a84de234,d7122cef,fa1f0ed8,9f1701ff,d17c40d3)\n,S(71dccb97,7f8e77f5,a03c8e8d,e4b2a30,11d01e13,549949ff,42af13cf,d7ecf208,b70ad10a,5f03ad94,dc8d91dc,e7797eca,6ace74cb,4715bf6d,2b628bd5,f767f34f)\n,S(6174a230,e15b2584,7a25217b,9d95f07a,e183f2e4,74d0503e,108994cd,69d20e6b,18cda952,ccd68c2a,5d78060c,6849fb21,e2379b48,425003c0,6f148a34,bf876efb)\n,S(57cfc1ee,38d905d2,897dee9d,105fd4b6,90967618,2a2a5d3d,70781cc,9134bb97,bf6b5fa6,4de9110e,7d26e67f,65cd2765,fcedc182,1627243d,a85bc955,2bdcac33)\n,S(26605be2,e03705ea,7f199cad,d4d6e711,9805453d,6d4feea5,ec2ae3f8,cdba59c,ced5f775,b62bddf,5935acd,9786847c,e7825da1,5807b117,7459f51b,72fe5774)\n,S(6d89e2a6,9ff96c49,a3110a5e,7e17421c,4ca2d07e,6e807a3a,98d79954,7fde2457,4835767c,8f96da1e,78f1788,d9764dea,e4e4a0cd,238ff35d,851ee7d0,9c915df3)\n,S(e3607608,338f4229,d77c51fa,cef2697e,f6010c8d,5138e0c6,2b724ad5,6ae79a74,da6a0617,a42d6ccb,44155f27,7c56c58d,42d6037,d234f1ee,ffd720d9,2ae23373)\n,S(c8cf20c0,c12de1ba,1ad4dd44,46f76533,7cfefc3e,213c426a,e0cd25ee,2e8bea9a,ef7285a5,ea7393a0,cd78ea31,ef74f605,3d3312ba,f17bf6a0,77b919b2,33227ed2)\n,S(f3d2870,fe782b7e,26a1a4f,9c7c3ba9,30e0ee0d,df6593f1,9bf11509,1fa63477,e470c266,ae26fadc,b2780985,9b9d60ca,fcbd9de3,5dfdfb67,9f4fd450,4ed6f3fc)\n,S(702a6778,bdf2f3bc,4ee954d8,1e7acda3,1df7127e,a7920e59,a7028253,9019c6c9,2ce19ef9,10d773d0,cc32a503,83f9e968,ca3e407c,c1dfb652,377d08dd,1dca5b96)\n,S(ea85cddf,4f79d7d2,a5db06ff,f1c1e3b0,87b0242e,1d7de713,53d8f73e,1bc83888,3806d40d,ccd867c2,2d166056,77d2d64f,d7433dd4,b1e83e25,91860599,2e66fb83)\n,S(d0631e8b,30ef6467,de6af60e,61b99112,1949b324,786ff1c2,fe633249,a832aec5,deaf31e3,703df166,b0f92ee4,eff1cc02,684911dd,40054bed,4b21d4da,17f4c05c)\n,S(b56cb88b,617a7104,c205e089,b83320c0,5dce438a,50411e5a,d342e9,8b258a3b,757edc72,52d76fbc,24a5515e,417625ae,11db0072,24c02fe1,1e249064,b5127800)\n,S(e91ffec8,bc3fa3bf,b0a600b6,89db92ea,7c3ad411,d025a42,95570596,f44702a8,38fd56ef,1f7b476b,2e36aff7,73e190b8,61ec6370,f6ae524,d5dea16d,cc4833c1)\n,S(4cd9e6c4,8bf7b1ea,9f855b14,fc904ad4,5e3bb71a,5745b449,e1ab3165,3bdf53b1,b5a075d5,ca9060b7,7d3a00c3,6fbc6404,88df6846,c712afdb,1115798,f382b4e9)\n,S(abb07ce9,c4b711ab,d01a12ba,45f0040d,e3ff5a4,e59140d7,cf4ff289,42b5cde0,a8a0e68,350a88b2,397a162f,fc969d28,ed937f60,4704dcf5,2faf755b,d21f503b)\n,S(95fac51a,c9deb5d2,b794423,a71cd282,b0604afa,bb3160ec,557a8b74,c578f18b,da99fcf2,abf21cca,c6f4e89b,de2a6e9e,ad199cb4,b97f4122,4f68bb47,b7caead8)\n,S(2ecd3e62,b79b4f69,609f33f,2042b56,bad2a9a4,18e2852e,9e8f0d41,1fba8ab9,ef964275,95061068,478e11ec,942b6a2d,99e5b557,830ed0c2,c4291305,41104046)\n,S(437d446a,d139d88a,b5437f06,6fdf8acf,7b538798,6baf9551,a414fd4f,101a6440,6c532bb3,38a34a07,28d3273f,e9d9c70,aa79c484,6cb337ed,b41f6029,1e2caa13)\n,S(63149b01,94b4955c,1b7e9d51,24e7e7d0,4bb5d902,7e86e63d,f3add9c4,8ab2a44c,c867234b,b4ed27d0,dcdf544,be060a12,4c460c5,7a9312b1,46d2bb61,fdfa6c1a)\n,S(78e509ae,99e6469c,41c44dd6,868ee402,8fda1cf8,2c83be01,9fdf912c,1e638bfa,ff3b584c,5ffcb1af,4980e2b3,ace00f12,3be630be,cd91d045,4e031120,245e92be)\n,S(cb1d5bf3,f97b2bc4,bb33babc,72de78ea,34cd0a0c,e841cb55,7b3dbc98,61e1544d,e619e8a,dac79a61,eb46add0,96bbcbe1,31d33a6e,b6c99220,123dc9ac,3f27df60)\n,S(3247eaa3,9ed5b604,d3038127,9661f350,53ddad8b,8e29d0fa,5c27ed6f,551cf374,1d29a713,d7dd351d,87175b49,afab518b,f268ce81,7fa39ccb,f08b3c58,de1e5378)\n,S(d493ab52,8d6c627e,aa3dbd3c,8d809ba9,8a9fe920,307a0c66,2917f8cf,f68b3941,30e4336d,e1621a2f,fe7247ff,157a37c1,edc4f83b,e9fbd84c,af4f96b,8997c7ad)\n,S(8dfac8d8,b65eec8a,a65f96b5,571830d9,22469450,42fb2baa,f76a4db2,ea5258c6,c204e9c0,72f643a4,1f53d8fa,dc66e3f0,fdf0d000,c27a5492,6323b2bf,b376af16)\n,S(331ca867,1098b530,1b1e6f12,d231793c,de67de5c,640f0a1b,fbfe485e,5d2adff9,b52fb89,3a466c80,ae61d534,cb03fde5,95078592,1da21e0a,a8103d7c,c2e3d8f3)\n,S(f34a338b,bb05db6d,55beb49e,526c9d49,fd515792,f407397d,3b520fda,3ffcf26d,6a6921c,4831df6d,91e7cafe,869c4274,faada27d,9d09175e,e86a0b9e,dd70910a)\n,S(56d97dfb,284c7417,2e08fb73,3a2d0305,ff774495,2f229bed,cd36e7ff,6058e75f,3775df48,aeaafe14,a8005434,dfc19538,2d10ca90,d05bcba8,edddb2ce,4a4ed7d1)\n,S(70e668b0,e854cd8d,d3469cc8,ffab1709,2d9341c4,4831196d,72d9673b,43dfbf7a,60567ba3,5546cd93,f2c356e3,927dc89a,c43fdf50,5e33ca9b,52552587,c905e311)\n,S(675af615,9fb50100,56ebed3f,4c9784d1,17538d58,afc5ec75,fa93ee00,29d32390,c501aa90,4f9dfa9d,78107844,983e17b4,34872e3a,a94e37fb,6677186c,fa1abdc1)\n,S(99f8e5cc,86ac5587,81a67270,3059442,88b19703,551474a9,9d433d6f,37672d90,30148ff0,9fa33b4f,f4410d57,9afcb705,c1146663,bdbd0fbc,8434f4f8,eacb09dd)\n,S(8dcec207,3d74b9bb,bd47f52c,394b263b,e71881af,363bcd80,9adc345c,b9ce9892,d8bc1ef1,79ac54e2,68a685a4,db35e3cb,5b6774d8,e8d6b738,f4d65b66,86782a5d)\n,S(d83f7e8d,adf27d5a,f8502d8,3ab81001,a2219805,d942cbfc,76db2764,c4235773,48472e1b,2609f81a,8b12326b,1b19b422,763b0ed9,d6fd67,51751c2f,8aa46c2)\n,S(e6f8bcf5,d9ea8209,cb46ab60,643555e0,d0569f3a,dc62ac76,edc09a43,e02fea2a,7974cbc9,5a9dde1f,34560043,7b628eac,3641498e,612c19d9,9a79ae4c,cbde2d82)\n,S(d2f30716,e4c1a665,a37d0606,3987d0c5,c19c072b,f1cca8ae,cd0e4d8,6a9e8c1a,e26e6d9,9fbd198a,ab83d0aa,ea53228b,539efd37,ee7ee791,365cabd3,8850eb29)\n,S(d7a891eb,551ae5ac,baf366b8,65755a56,edc7bbce,7304a806,2729655c,f7f61cf8,8a7d915c,3a9a1500,616205eb,798915fd,9b33d7b0,6671e9ab,cf02b5f4,667173ab)\n,S(5bb03484,f02ef87a,fa07f852,e3ec0664,67ffdc38,39fa28db,de0da07,2fc31246,e0515751,c377266e,ff95f755,f9c9373d,226ccb66,3678e8ef,176af5f,2fea3504)\n,S(58716b31,48a0cac1,2024760,60d3734d,ab066ad8,c0f8d8ed,cf5824ea,83e111ce,71ae487,701d16a9,c1d2ab68,1ec7c8b5,8367a4f0,179dfc18,6778579c,553cf608)\n,S(4a344869,db8d561d,96944c8,94a3c196,8d649fcc,bd430c7d,4a66ef0c,dc2ca550,285433f1,ff0e7dba,5bae081c,1b33c762,6f30224e,dcacfe66,46787818,da0f810a)\n,S(3ecc369b,e7789b92,cf1448ee,28c0448e,ebc5d277,a8bdb5bc,a22d3151,5e246f7c,a5532e1,47848951,cf11e065,3f0627c4,6530436a,5f3773f2,b02c9bea,c1b60e78)\n,S(28a5d794,21db38dc,8d7c8cf9,d120a3c9,97eea170,f0f6ed43,7222bf4e,27f170be,88cb09e5,ea40b566,39cce9ee,1245384d,2f02f983,3b3116b7,31ae5576,daed7cf9)\n,S(4f54f945,b3afc07,c38e1aae,16dafcbb,b7c5097e,4895a789,e70e0993,cbc905f,6ba69303,24adb3b1,2fc1f8c7,8ea58729,5115adad,52bb1138,7281b9b2,997fa597)\n,S(f490bc4a,20f1ecbe,ac2dbbd0,56f2bb77,d258a914,9b0732a,f29aef2f,7ec25f47,aec6fa89,74c124a6,576475a,60931a6b,533d0da6,4e621fe9,c298f03c,a894336)\n,S(73b2f8d0,e91e2516,d2ebe348,85b973d,4a0c7919,1ac857b4,74f713d7,348d343d,9dd7a951,efdaa060,19ec71b,e41b294,d047ab97,d0cef4ce,25a607f2,f11bbc26)\n,S(d911f5e9,977489d2,847aeb66,8c3cdc6a,ffbc7b5f,4a5aff62,1761ee01,567c5647,3ee4afd0,2ef6d3af,a2b16d34,b59444a4,2c70b3d,4db17788,ad3aac57,184e02da)\n,S(87b695f1,5c5d7852,88218586,96bca8c1,9c5a6f3e,f23786d1,fe010fd,d063b0c3,21b54a,46ee82fa,bb5ffe0,e3137892,31623502,9a8e0505,645a9ec9,29984895)\n,S(39de5a90,4ba6989e,5d16dda,a7ff67b2,15e08f3f,b593d7a8,4b6babe2,ca25c658,eaf5e6c4,1e1e2fc8,c1581f6,211bc8cb,34dcc08d,58f570a6,e6719626,7124c019)\n,S(18c1f673,ca19f805,c426162f,11e7eaea,c675974b,6b4cf0f5,9eb03288,83bb0af1,ad1690ae,65783091,27f602fb,93652b59,d7507414,e76d9b3a,82fef166,68b7aecc)\n,S(8d70ebda,893e8d03,d15fbd68,67528b7d,308ddee7,b2620698,15e7f3c7,332d42a1,254be26e,d9e9009f,e4aceb8a,b97020a9,9196a9be,60777fb3,a9d1243c,66df1707)\n,S(c32fa0af,ab39b1c0,c96852cf,8e2382e3,93e5b59d,2e83ed50,d5307a0,14ea330,381e8afb,85d47c3d,dc5da037,d6bd82aa,ff2324ef,ab0e48d5,5da3fcca,bf0ee3da)\n,S(c350235f,e5ad084a,1aaaee80,d156b302,d34ec03,360a7c0d,3a883cb5,19f4b27,e5ea7c5d,3184e9,b62fc3a9,6c8bb9ae,72535fc0,497f1b58,67bbae06,672a1f79)\n,S(8ef5e1f4,8d905df,dbbba4b2,d4b22162,db839ba5,b28c755d,46bc2f00,e25e20d5,6300d9e3,11971dd8,a3e88192,84f3a228,9986270,45b901a1,80f831b2,4153103b)\n,S(9b3783f9,c638a6fc,166aa2a3,3a40d95f,35a4e7a6,c8cb5fb5,1e596b9a,f285279c,41b2dd9,c3abce77,fcf798a9,159f36c8,94b55ac6,7c917de8,75b18cd4,e70dcaf0)\n,S(c262215d,720180ac,669f0bb6,885dceb1,2c941730,93e561c2,660a4a1e,cdf0a244,7fea7ed7,f654741c,c67b12b9,f115aa40,ce427cb3,8c6498f3,8bd291a9,d73e9f2d)\n,S(bb72f723,f0a16f09,7716272b,b905a111,c290c229,94f400dc,c6a24814,f41816f9,52a83ee6,53214a5,3ed2b13b,a367324e,e5606fc2,e3dc05ae,7ce0cf05,ccd6c36a)\n,S(d896a5a9,a833d66,51b17632,70b03d36,eb423236,bf3b2b7b,6b2ba97a,f9282a03,e8a823f,ecec375e,280e0d50,49625dc2,1f48e269,77ab5eb1,b467d3e8,a0fccb37)\n,S(198cb33d,9a2b790a,2d6fa355,58733bc7,f64cad76,e3921dbd,8d7a1f,8db52b64,c7e93702,ad7df0a4,94fba344,8a8157bc,eba10ee2,8f66f000,7e7f7655,8e6b4a74)\n,S(4354e475,81d63d84,df19bd08,d98b2315,67a55550,477e1c53,cd425854,e67cd81a,a612c262,74d79c46,89734884,5b87ef50,29d0f87b,4a06e4a2,8ab36bee,ae6a6ce3)\n,S(d956c71c,1c8b110e,19f96ffe,5709f2b2,83a095ad,977878fe,287de35f,283b2606,7c029c97,9a807375,bb589c12,a20ce37c,75178be2,5d5af713,f4fd4070,429c8d0)\n,S(2c04b299,1775ae36,ed7d5b1b,d9b0e65e,fb2bff8,ab99dc97,2cd860fe,19b1789d,8b3f3b00,6d63c81a,86f225a,bd8e658d,c9c4c1d6,6787678b,6fa4a692,bc7f78e6)\n,S(c7897c17,debd6456,a81f8d96,c0ea580b,db5daffb,5fc8e8e8,9c8612b3,7b229f7,f7334550,d20a1a21,c422f73e,d23fb159,2fb3d9b7,ca61d7b,6e124fa4,147ea63c)\n,S(3b37b93e,ff554f0c,7e7f36b1,864ecb73,7b33a93f,6ff31d6,9ea18aab,a9487505,50ccac12,e071f469,3f5e5339,462a0cb8,66bde539,5842ff44,620f7acc,aff09a71)\n,S(4584ea49,8a2785e0,b12c86d5,2b839212,f21b2e33,3b64bb0a,9713674e,66216547,2851de5a,b67354cd,6610dd4c,91aaf4ce,b75c4c97,26d524d7,69ae0ba7,997ad79c)\n,S(c0c971d9,f5644eac,851ae8a1,d87b4f09,a802ae07,32d9b5a2,d9589051,f139963c,83e07a5a,2b7614c,c064b4f,815b8a76,6df7eeb6,449fdd50,5c43faaf,b0bd075f)\n,S(370e8fd0,858c6fbc,f479deed,f35fef5e,80cd2338,90d4b227,1867ea90,6cd15b5f,ef382477,fd2dec6a,fce439ba,9b341a21,17d6ecf4,c8c8d63f,b5775094,6cedcaab)\n,S(ad402a30,99c5d5dd,c7ad9631,b592d5a5,862e8d3b,5ed47dfa,c288193d,69366625,b8c0d468,5d0eadfb,9f7e4ce6,11c61f5,7098da29,aaed61f7,6a50961b,b45b7c5)\n,S(ec16de3f,32ea8f58,c1dc93da,d1cabecb,5ca33ce2,e3fa3bfe,bf0ee989,f3ebf5f9,aeec3532,c5391ce6,1e23bea4,5b7b5847,2c36cb8a,6c5f1363,e457c003,b18824fd)\n,S(5a51f9d5,f5c48520,dbd826b9,49f62f67,c299a228,259e09cb,b3bd6fe2,f4b0e60b,3c498d86,225a83a1,f506eb62,a2e530f9,511c56a2,eeed77a4,18ddec4f,4404b9f5)\n,S(9696865f,64523eaa,456ea65c,40ca6e0b,12c6e6a0,211cf8dc,20963f03,7980b684,8f879d8b,491f11a4,1f0025f7,b35dc8e7,c71e420d,7d7d9001,bf5da111,9ad6c2c7)\n,S(80c43c8f,6325cc30,8065d4c8,6e3d7bec,6ed85f74,412f6127,4fc3ae49,b1e185a5,31dfbe69,a48f1f39,a0cca355,f3d68f28,cbf3e14f,7d47cfc7,d9e82e25,19bdc292)\n,S(54940550,ec4a6ca7,561946c0,65769b4d,d4683f1d,11dfda66,4aa2f8cb,8f1ab2d7,f41aef26,64466fa,ecc076ed,cd383d3f,132b4fe7,5a17f16c,c394b6ec,e4079378)\n,S(a9787f8,42b3549a,9a3bea8e,4182555,99addeb6,416118bd,901afd9d,ad4c134,4efc4f67,65c7cf5,ccc2336a,e9eb14c5,a1361067,7632ce89,68033d57,4bc686b0)\n,S(fa83e81d,63b85491,92e800e9,7a422ca8,35c03bb1,5579bc05,bdb4367,198a24da,779940b2,ad301a1e,205c0504,fe3ea104,cef6a459,e0479849,90fc94a6,871954eb)\n,S(ae9a8d1c,a8a560e4,8a373666,544a7b9c,84bf0475,9de1a63e,4a20b55a,2f25c132,b9b0bd66,4c46edfb,ca2a0bb3,a94ff043,c00c1441,9f1df886,2aaadc02,e25017dc)\n,S(a2f47145,296dd22b,3a6f5185,47ab0957,4d3487b6,8786f87,6758cbe3,5f4c0ae7,2ec4171c,15e7a82a,f6ace24a,60176f7b,6239561f,3c369a9e,efc80d52,3fd216e8)\n,S(1bdcf82f,a7dd441d,91332a11,35f50be8,4d275358,f95df300,25187f2f,9828f219,99f12980,92a3ecf3,dbeb290a,67d72aae,6acd9cfc,c21918e8,9ff7ad4e,548d3510)\n,S(b73c91e1,ae33767b,11bd329,361fdae6,36642d92,6c2792b6,e19b6e3f,947a5be7,b6502357,11ffe955,be5798d1,467eafdc,94df5911,29d2aaa9,b747a2ec,befa9d7)\n,S(b23b4ad2,e983e556,e941a35b,b84846a4,40cd25b6,82487f37,a3a30eef,eef15d1,7010f10,88749d1c,f95e52dc,eae1a379,b87762fb,55593d32,a65ef0fe,dcba2485)\n,S(e3aad2b8,96fe34ef,9d775743,6e70a70c,b3bb0c6b,8436e616,a23174ca,985fd8f7,5d6edc38,89beb099,dd191564,eaa83c14,3ef0b74d,7789590c,d6083704,61c6676f)\n,S(2f22a14a,f69e6257,b909e3a9,50aab3ea,dc09c281,ec52e47,8c578f49,68910244,4ab723e2,43c71baf,d2aead8a,479a1a2e,fd2aba74,800b5eff,56ca46d0,532e81d7)\n,S(93806026,554bae5e,9b91f534,f864b79c,81e581f7,bdf3b2ef,dd007e32,dd6872f0,800f8162,a6836801,d052871f,6892ba33,b2f60f82,89a658ea,a8af25fb,f9d9c444)\n,S(8895d121,ad1f2be2,3c578faa,1e33656a,e9403ddb,a1f1aea6,1cc7bd03,817a46d9,4f7577d2,420d0d0d,7cc9ed68,ba3645b8,f9466f59,570ddf16,ba168de2,8cfec881)\n,S(1838c15c,3bcf1189,546a9e3d,69fb8a73,de39c862,f5faa4bf,423e1dbd,29046ccf,49484789,1b67ea0e,2e7f7eba,4a596d66,b3ed9842,3ffc54b0,e9292a4e,bd6f5487)\n,S(111e8eab,d9cb3ec,5eb63cd4,14ecf59e,3a3f0d56,70959226,ec8f203d,947204b0,4ab9b3bf,dc853571,2c0db9e1,5fc2832e,4560e420,af96b043,e587d1de,d996e38a)\n,S(80369d1,ec5ab7c6,492db1f9,aa2fa368,ec083d86,75d6c1,e7262e73,a612e493,cbb28c30,db7f7d03,6b8dda93,7e0c4e18,6a09f1ee,2407e55,7f6dc54b,a8c0553)\n,S(903c9034,dbd3f982,41351979,c9306a8,42b88892,48cace15,c3e3a8bd,aafe1ffe,d55adb43,d0142740,71499c92,e9b851d8,e6ece26f,f82ceaff,ba63a003,14960f38)\n,S(d6490ce4,74bd1e80,82c99e87,a0510a2a,c2c2772b,1921cda7,dcdcd5e8,6ecaacc,85a1fcc6,de4b93b8,b2314da6,31d7abdc,f96b22e4,b44a5545,f274f941,454e98f4)\n,S(12f2342f,aa8b19a8,bb0e080b,2ed3487a,14ddd1b4,83e0bfa4,9ea08484,157d5306,eee0b9e4,30a51a3a,49da893e,50360ba1,21660b4d,ebd3ad8f,82805416,10f4b7fd)\n,S(3bf1ef66,57bdcbba,a9d9a23,36c75429,c4df4a86,1d71a767,2d7e956a,deff234f,fa98467e,83dd1ca2,2a85cd8f,f12be1f,53d5a939,352f4046,a626a208,601ef6b5)\n,S(d0d0f8b7,9a04ac8e,b6e010fa,3608926f,3b5bd886,f84c361a,8e1d9dd4,b01ff717,9bb32b90,6d7de56,c75bd202,b9353128,b6440fb,42dae8e6,74ade0c8,fc96386d)\n,S(19507738,80caa9c1,f042f8b5,d1594a12,161635b5,a83e4675,35ffe51a,fcf631fc,9280d033,f7a8efc3,ff22f501,6a6ddfd2,f78159bf,1f13be4c,f758b150,21126ba)\n,S(f4f50c3c,eb750a04,95973b47,53b96ec7,22cef833,f4ee7459,a51f884a,f9a251cd,41f554fa,d3d521e9,65fb0768,66caeac7,d9f5c6eb,ba7ba7b1,d1d38c9d,c06d85ce)\n,S(8b669c9e,22452528,57e20692,2726f045,e97b8cf2,1154fb74,e199f49d,11951b84,550c47fa,c46060df,4d893afa,9f08713f,cc8e719f,a369e90b,fa8846df,7938c65b)\n,S(941cb4b0,31edf346,64dd5e7,92ca135a,1d6cc6f,55341322,66644493,aee5fe32,cfa91a79,29b3b47,d73b8ae6,77cf64eb,cacf9408,3cdc76f1,79e25631,d574ff68)\n,S(557e36b1,27307c56,72232c6f,6e92e4f6,f5da9d22,1567b464,8e79d97b,bf589023,ab741e35,109a0313,e7adee7a,2cec2c10,79d18d72,6c27f1c6,5a808b98,8e99b523)\n,S(d8081ed,9e7cf1cb,e1ff07c0,b8ef3f9c,c7eac02f,1cf1c6ff,833f4b74,b2a33269,efa297d7,10fb71c8,43e358f3,e04ac308,53027f00,eea43d03,9b87c3ca,2b0fdd2e)\n,S(b5e4fdf0,7a443146,263f6539,f6c8d991,7486da78,95b4ba7,fb4c9f14,78324d44,a3ef979f,93ec1a0d,602950d2,ddc400c8,4f018643,229cfba8,7cd9e3,f2fe657b)\n,S(1a573259,a5100c21,d75efcc4,41d5a834,a81d96b,f4149731,eed4ae67,508bffcc,8a993dcf,49f94f6b,bc71766,9d37ebfc,614a45f4,1d70a1ca,f4da8834,5711223d)\n,S(33d9f9f6,c9ba653b,f9c52166,c29e9c06,2cb7700d,ea2f40cd,28520bf,237b4558,dc80f57c,fc0e73ab,bdfc4a8f,f7e8f4c0,3353e889,bd54cf84,6361c1a9,af5a0a79)\n,S(e4ca84fe,307c9237,4d39b2bb,b017b5b9,e478b26b,95236b8d,5bdfb220,f44419d,c0cfc7d8,92271c95,7ef235f7,2f310c7c,7d0ac297,97d42ffc,ba37061c,83775507)\n,S(8f1f2d2d,cccb07a2,a8716b77,8c74f3fe,22990d36,b951e6dd,92f5896f,51bc23aa,9eaa792b,426d3400,31a862ca,b805d0da,ed9a4c73,591c204f,c5179b17,22aef870)\n,S(20f7f6da,86eb5ae6,6a1b7818,43fd7fe4,c458e3e7,bfb590c8,76afb601,257b2ee0,6dfcd6c3,93e7e9dd,32c7e826,42f90d69,ff1e1ffe,18988de2,bc1cb9ba,db246fbc)\n,S(3a3df365,8d65d718,2dc05797,8bc48fe1,5c5eb6d8,6bb241e5,9e178ca3,9cf9a010,ffb89791,7435e8c5,4865bc79,52fb7bd4,1578af51,6f611c54,1f7cfd5,651b293)\n,S(7aa435,7dbbc5b9,a01b5f94,6b0240a1,36daa942,1ae1a1c9,b50f66c1,c7f15e48,4640c8d1,ace8f69,6b08ba1f,9a46d04c,f75c5914,3339d5a,181a7dfd,bfc92c0f)\n,S(198e4848,8176664d,40fc14c7,acca9eb9,aa22599b,b2370959,5856d78b,5e932e94,fb9dcfdf,b27d062e,8ea5246,275d80e5,6fc7cb09,e81bf066,dfca888a,8df1de6e)\n,S(25da8876,d3215051,75694915,c25056e1,2c1329b7,7795b7ec,1d4b66f9,3c911cc9,b8cf4a83,db78787a,6d80a157,c7c205f1,3664a71d,a6e78db5,b52b012b,930c4583)\n,S(893d2e9c,3b6fa8e2,136994e6,14121842,bb82e577,89826ccb,eef51fab,de32c0b,d7cb9b4a,1d49b34b,f3f743f2,10c32a25,cf8df45d,8552a7f2,1268e270,ee6fed67)\n,S(dde2e8a2,988fd777,4959457a,5c14384f,c8248d1b,a32c7ce1,a727af27,7b217688,1fe0272,137e4c9b,1c6df618,41a240a7,be3b5de1,7b93fa24,ccc055f0,e7972b1)\n,S(52a73b51,5326198c,81bd988a,3033e1db,abd9ee27,9a91a434,e7a76813,453e27c1,c23130f,c4b8990f,ee308443,1cbeff25,62963b1a,4a5acb4b,a1319b4e,d77c745b)\n,S(1b5afdc6,4598bfee,4ef31904,f0d06796,17b0149d,ac19e7ef,a1d4f19b,c5385490,fcc0c62,47d96d4e,430ae0e9,c19dfa2a,3719e66c,ce25a2cf,d7428d4,4c91e96e)\n,S(76da558b,d533e761,4d97b7bc,5a1a98d2,af043ce1,1f2b323,185377da,c0e0abf0,f8dfecd7,94b3d069,ec22f01d,8418bd90,27c3dfc0,62beb597,e352bb70,271d3cee)\n,S(17f01b77,d2417d97,e3c14f10,18af67be,c12c31a3,58521f6d,203f101b,227cdbc0,fe16d66f,a194c800,e3c14bb3,f1df0a2e,3ec319a8,66c69d9b,3b492d96,327bba04)\n,S(6010e0a1,2cacb745,6e3a8f73,d5219a87,cc14dae6,54be7265,ffbf70c8,c4d5433,7d5f0faa,579afe50,2541a2de,4d525bd4,e7b950fe,2b2dcdb8,d67d3d9a,7b11da54)\n,S(91e938c8,3f319320,baa876fa,23773a7b,d0fb81f9,bf9d99bd,13180560,bfdfad6f,b662f401,7a4fa2ff,6603864d,77a6b930,181372f2,5fd6a67e,12a1df6b,f75509ee)\n,S(de2ef2ee,633355c3,3d259357,efca96a0,5b669f13,b515e64a,c0bc467f,2abd665e,d3d6254c,5c30daf4,64843190,7c2a8c1a,51baeb23,13605a58,b88c9a78,a6147c73)\n,S(186151f0,dc37e48b,3178bdaf,900e7bab,49cf251f,7a2a1b8a,76da8750,2dee93a6,2a240dc,acbbfc19,876c3680,fdbd7ee5,d1085b79,96317e4f,db73d5a1,9f097f8b)\n,S(6f19619f,ace0c63c,4dda566a,9a1e78f,a9568db1,1c46f3e9,771756b2,7d8a5c1e,4716efed,7166e06,722a744a,af89d145,4ddd2f0,f7652862,cc38eb3a,2beb1925)\n,S(a0e450d6,fb8a6da7,e8f6e62f,7a08c2c7,277a832b,4e5c6dd1,8cbed37c,37db23a2,775223c6,3f81b2be,1bdf0831,9ed65ab8,d3e11c56,38830851,d55a8893,730979d0)\n,S(6337ffcc,64f5d358,d90fad1b,646d8d7,46e2fb7a,2a6cc378,9b55ec52,3824de5,98286287,578bfd97,4c161a01,55f9a2ef,707858e2,a32c3fc7,319416f8,5a6e5427)\n,S(914a8565,cc1bcf80,19e1eef2,87c9467c,bc42faaf,726d4399,6485efe4,6f99e32f,846c42d3,b1dd8c20,3a744f5,560396e9,b9a92380,2fccffba,c6ee22c7,65bffde8)\n,S(dd79a02e,2460ef86,cb4e9ba8,3ee7e231,e99b3303,1d4a6d7d,6dee8b1f,b0050daf,d6a75b67,ba13f76b,172ae0e7,d63b20be,db3e54f9,e54a96d2,aebc326a,131ea271)\n,S(b2776e23,3e759f8e,38c52394,d50fe177,c6842acb,f238eb56,c7638549,174c1b2,e18c89b2,dbb6453f,7b610518,8bf090c,f0410e51,97885d52,b50b2507,ffe4dc81)\n,S(e0716c4c,c5e84f7c,282adc42,f294a36b,56bb26a2,58cef4bc,c36a7f53,1d5283e1,1442ddf1,57491db5,1692c7ea,5c92976b,8a2488b6,6aa6f38f,7a62946b,a24fc5bf)\n,S(2b10c9f1,bfdd659d,9d1e073b,faaa4b13,2a08b678,f757ef39,a137e53c,b291df70,7d22ac48,f4e0aa71,8cf7882a,57a46746,94e0f456,f2cc3aca,30a3f8d4,2b240dab)\n,S(fa762181,26a4813e,e97f2718,c6eed96d,da9f6912,ac463af6,a52f3aff,f80f07e4,8c8a04b,f38e2599,4cfd8905,27ace017,e57e3f8d,d378b205,2e767954,80dd5701)\n,S(6b893eef,bea81e30,7ece156a,e79abc26,d9f0ca5a,b2dbde11,bb0d8192,f138e58e,510a308b,9fc47167,f72bbc4,f92eebb9,88a6512a,b1679102,f9016b0b,d82c559d)\n,S(6cd9b970,332f421d,1aba33e4,75f26a4c,5c5fec37,4a549ac6,d8c10fa6,cbc40032,b57dbee6,68bef693,67188a54,52e3b4d2,cf1c8c25,8e36bc09,432b4f4a,dcc24086)\n,S(ba4847ad,40530fc5,f77ea79e,ef7a1c0b,821b5285,5ec4ab8e,d238ce46,48a09fa6,627ba437,8e0f2044,20e61431,5f3d110f,2da9cbe6,2025bbdc,5bc1cede,c36030c9)\n,S(92837329,4f59a142,ba84f897,7acf2e7d,9df06a27,74ad88d8,98689900,3750c513,4e938012,b6e55d6b,6f7871ae,c34511c8,40912a1,1a32012f,3bdd27b7,90f86c37)\n,S(470c19f7,9aeb9a7a,142ba010,10ea4929,3de57e25,68658d45,42b5a626,864600b9,2e99dcc4,b93d9a36,7544b842,ef4a3085,2e24bc41,e98ff2a2,d9aede05,da703225)\n,S(2496996d,c38e4bbc,851f9bd,f9a21b42,5fc7ce2f,2b06993e,97604a0e,db555c34,b6e02a63,f0e2e54e,1cfb9d28,7607bae5,8a68ae6e,a8300ee1,c1170f0a,9e567323)\n,S(92366ed3,23ded4df,f4029e42,685c51fb,a8a916d1,999c42c0,a90feb44,4112a78c,88dc8af5,f6d1d14c,5c09d216,8af0e752,3fad76a1,5b311021,7ead491c,12b63191)\n,S(ff9760e1,ce161564,22c4962,4962d89c,37e66e64,cd7f8e94,4125fd00,c05974a8,8ca4457c,a5e52e23,d70639c,a9a26f3,12312451,8f0de070,86d385b6,777a63a8)\n,S(50d1d5ad,79f919b3,d23c16b1,428d971,5deb186f,2b92b64e,7a1ea1fa,dfca4981,ddb07de,d4ad81b3,cfefe726,33521be1,c7418c5e,aa759440,20dfe92e,b4653ce4)\n,S(4934f753,29844b23,80183df0,254d1c7d,342d7d27,9fa5e804,68dbee16,4e9c2c6e,a4f8aba6,7a488a33,40e8e943,14f7eed,5cc25487,5acbaedb,afecfc2d,5405609a)\n,S(d7b99142,9cbdf755,5cadf030,7b2c4a91,c0d25710,a0553511,eac6afb4,c544ff81,17bf03a6,83b1a0f2,366b944c,aabe57d4,eac4d86f,bfabd006,66693983,e0241420)\n,S(834b036c,145d6905,58199bc1,e7a7bfc2,4831417b,530b0b97,8cc1fc16,af00b966,4a45a9eb,299f24a0,1c520751,2cbee44c,bfb75d0d,14a7eb08,b1668b58,ae58c47d)\n,S(d7a8c30b,fd7b8aaa,78dd23bb,86ef2624,5a363857,6ed69739,25ea9d9,194bfb3a,7b5f9ce6,380abb91,6e041388,13baaf24,229ece27,3541f4ca,2883ad77,9e501fa6)\n,S(ea4c7ed2,7ced8b13,4a2ccb2d,3828d29f,f80c4825,e5607597,3faace04,d2fb7763,a8454c9c,be19ec44,8a3234ea,97b8fbb,b256a148,11ba0ede,becd8641,42684d14)\n,S(a2cb70b,f80d9f6d,696ceaf8,fe8052bd,e59215a9,99d4b92c,ce806a19,71d555c,997bd94c,e5cb12ff,886c1cac,bd21c3c,e2f144f0,3af644a2,c2aaba2c,825f75b5)\n,S(89a91f5,c7c8700,175ab017,8c4104f4,a927af06,f269645,36cb78d0,19f8b8f2,6a2f8ebf,e1258b4e,31bf9a5c,31c51a3f,1cb58aea,6e18582,3e87920c,3df8e7e9)\n,S(27d7191a,71ecb0eb,71b43dfd,5840079c,bd368c0,5ce62fdf,2967dcca,78f5a6d6,11120002,d0d0fa9c,8db51506,4e1fcc2d,92d8fa9c,8b454294,bfd01c64,889d5e6)\n,S(cefb996a,d36deffd,c3c7ddbb,11a5013b,70baa98c,1057adfb,185b4c9,62f3384a,c93cab46,7523b0d2,baef4425,c9ff048e,c586d4c8,69c69cff,3ab9d72e,e3d80f83)\n,S(5a8ff765,84746f42,4e06b557,77986825,e91312c4,4f79003d,c1b381cd,4fe5ce8f,3946177c,3c741458,7bdb9506,85ad0c73,b422a8b2,5cc3ad3a,cd486e76,99a42f08)\n,S(b179dac7,d2f400bc,bb039f32,91e813e6,f9a7331,80a1a5d0,db51aafb,af582fb6,89a70304,d70cbb61,ffb3a499,1815cb17,458404fe,e43f09bf,d630d480,5978b1dc)\n,S(6e14a53f,ab32be84,4eb14242,a3b6a86e,e178cd7,51dbb7a2,b14cb763,ab2fe6de,a22ed4a6,d98c59d8,ca85e111,cce0efcc,60e20df9,6b06615d,69aa3cfb,206494b9)\n,S(12ac42bf,d8f919d8,c79a8138,1aae69ef,b789a573,f58332b5,79694dfd,27e7ff20,4ebc3b7e,4b0136f5,19a8df5f,baa7ff59,17f4f632,f85ab1f2,ce502fee,bb3a3a87)\n,S(87bf22af,5e9dc061,eabb01c4,eaa867c3,4656599e,da744da7,774fa8d9,aad68630,d34f530d,fbea0d52,9d2d64d1,323fa44a,d80cbe01,fa2806e5,ff069e6b,fc0ce729)\n,S(33fe6bd7,ebe2b197,76251415,8bf866cf,b6d3ad5e,1f68519b,edb513fe,6076c96f,c5970cce,f44aa84e,f95a56eb,588b7a8e,d9164f5f,5a2eed83,1f70d308,2320e9e1)\n,S(5fc2f44c,fc0f7ab9,9f03b67a,d7b6ee99,d73fa9cb,d74eb5ba,6d931d9e,26ba51af,8b1fbfe9,de201400,6c07da02,4bbcf53e,13bb9f2b,ff3dd6d9,5135a6fd,5842f0f0)\n,S(38fb5cfb,e4f348cc,1fa7f9b2,ea600daa,e8330aca,53308f09,b6a7d8b8,5ca8a88b,ac1bf91b,7f53e824,d845c0f6,9534291f,cec2808f,95acf58e,4afba07c,fc735be9)\n,S(3ec2457f,fc848504,6f74912b,5c58b270,1be6eeb6,f88da0b3,c5cc4454,48750875,b63209d2,641c65bb,7105af10,61d7513e,409f153e,5d1b5073,232eacc6,f76dde22)\n,S(32fe812,e67ef62c,687d248f,e75ef399,48fe8ae4,a01ae10d,ed65264b,fb5050fb,d9c85369,db22ddeb,baf7682f,53642962,cfec2afd,3a20de77,588e7473,18044f6f)\n,S(97d7c69b,2aa0277d,2b20e9c7,bb1066a2,be6f443f,d0a428b6,d78c5fc9,6ff71b57,f84ba781,70837aa1,f75936cb,fc50c444,c40c9fa3,22d90088,ac6889f7,e7c0f861)\n,S(3621a4af,4d698e4b,60e7f497,6e0c10e9,ca32834f,ff917aa0,6aff912b,2ad80cd,22cfd248,a17886a,ae5d0e11,53621e9b,46289acc,ecd8155,a1bd6372,120c4da7)\n,S(ae79a6e5,848b1dc6,cb64958e,87b737c1,858442b3,63d4a2,e9f04561,7d73f8c7,c147238c,59885f2d,dc5dec63,de421eb1,c5a19438,ed0600b3,4c77f4e0,e7aa557a)\n,S(36eec623,700e51e7,723a632a,55370ddd,d6b1f917,6ea39a2e,54a2a1ac,52598c35,29698c0e,56b4e2b5,5389dd9c,3d8b509a,e0b87f99,4872d865,3fc74269,7f5bb7c)\n,S(50f70061,804dbeab,cf2ab4a9,87ebde2,1f5496c9,a4cd28a,4dd9da7b,310e876f,77e27710,edf831db,6ba9e64c,545f03a7,eb390842,8d9cfa3,3d0e1c87,61371706)\n,S(c2ad6b2d,e84bf60,7fe77b8f,a9fe26ff,bb5e1906,1494e469,8da44a33,25843844,17b92ad9,d3938fef,7a17f543,a169a7ad,8ee65dce,36eeedfb,5e3c0c8e,a1b24fc3)\n,S(a53504f,e2286269,427fd2fc,fcb64827,bdefdfd9,feb89d50,12651d2d,c60ae99e,6b9d73e7,e046d11d,ce78b114,8aea837f,770d8267,6642dac8,f3b3c035,c10eab45)\n,S(5410db61,40a77b31,9f19c969,34a8364a,4881ab60,ad76a6c9,34f317c1,1b658dec,ac45bb6e,2e5fe23d,57297370,cd04ffdd,dd89a9,15a1e9ad,15d7f9e7,6d8b3aeb)\n,S(882cbd69,fbd3e262,5093385e,ab82fc9e,7597c38e,45fa5df7,f98c94a9,3bf25467,2083f00,b25b28b7,f92b040d,a4294dc0,8a3d97e3,d951e724,da0e692a,5737a87a)\n,S(3141e0d1,22b4c136,f7793c73,9c48f308,c5ec8043,19db116d,64eb14f5,aee83942,9c2d06cc,d765c6c3,cee09b70,247f8806,227d0178,13becbb6,96c5a344,b68b33b1)\n,S(1b2f3686,5a63df41,65caea4e,305d8d66,1de6ccc1,c2a28cf5,2373527e,27cecfc,1239d8c8,d60fdcb9,fcf3f5d4,63305037,6d47fd97,4cd6bc64,99e0e951,2d2209a9)\n,S(725168cd,9fd59e41,14918b77,6ea96fc9,6315b4f0,86672dac,1eaf59a5,e61ed25f,946f03a9,84a6735d,e72acb38,dfd21905,fa2358a5,e66e7b0a,2f8836a1,8f5d73c3)\n,S(4207faa5,c9dc9622,9644df1b,a099a84d,654ec6d2,aa69efcd,a4a31a3c,61f2e1d4,ea72a92,836d1597,5275c18a,900c0e7d,d0502610,d97b6f79,1f6a28c2,1b3ddfd7)\n,S(53900d38,a4740830,a6129a11,9dc90f6d,30f32847,708d48d4,20b77764,ff5b9cc7,66822ed6,ed941eb2,20aefe94,4325daa7,a619dfed,5c76bf75,1fc25342,8178d3fa)\n,S(d0204932,a3fb8d33,9779851c,d69f6adf,be1a9957,59fcfce1,b8d4f047,e4e4dd2,8ded18ff,bbfc663a,9c658ae9,286f82e0,9ee9381b,3291f5c9,efabf0d5,fae318f)\n,S(3ed8ce15,2d34e621,94b8b16d,55605766,41fb2673,14a08c91,d916fa14,f21abde5,48490fe3,9769c60e,38996370,27b57df7,230060c,2505f414,5a1c7f1,4ba16660)\n,S(b7d57614,9b5e2ce5,edef3c30,b8cce79e,6f122c70,351d04fc,ed2b67c7,f5cb2aed,7c8fc1c6,bd42b25d,d45e37c2,5cb06f0a,bd2f7051,4a50e6e1,2a67c0b5,b199eda1)\n,S(2489e06c,c8f0bfed,9d5ea722,c07ca795,e9ab40e5,45b036e0,f0c11f28,53c0d35c,dff65f5c,20766078,9737f1fd,5af05ce8,3b8edf91,37002b19,f5e1599a,e76c48bd)\n,S(9b2140e5,509817c4,465e6689,a3bdadcf,b79c1803,883d493d,4e4e99cd,55f30a29,86374501,705fabc6,62e8c869,a22d2813,f7106006,ee09b6bd,b582b690,50186688)\n,S(48d6fff7,d5c37c30,11c9e63b,b3342f92,776060a6,dd179e3a,e2c6bb69,d2f88b3e,783353e,adb6daec,536d37dc,76ae3ff,8dce14d9,65d21d3b,7a17515d,7d3341aa)\n,S(35d46a17,b6951355,a055e253,42b4244d,8ce65459,c630f2fd,4708687b,e6a49e7d,13bc21d5,7cc2954,62927cf8,bc31ef3b,5407021a,62c5253a,5950e8eb,b9c735d7)\n,S(17ba438,24168f06,274b2f5a,d080fda2,3c0dc34b,f77e81c3,c4413cd2,f594575d,e8b34f9,1ef09f92,7b5d9e51,662216a1,30ef8f87,2e0febe,3f5cce8b,318fc77a)\n,S(2a09e4bb,4f6d6b40,f59d0299,93eeea7c,755eb00a,5eba0477,3fc0c796,aee68a07,cbe72772,e5d8b761,15ed6f92,f20028b7,cd06aea6,74e10667,899e78a3,df403f0e)\n,S(f3838250,e9a03da6,87139583,2bc6b35c,2d427b60,4cb7d25b,149b6816,235b0e4c,164b211a,60562190,d415bcc3,87d1a147,66e45f14,dfbeda44,833ce45f,b815598e)\n,S(b307de85,c4c2e8,4e076d19,647bd205,8c1a3c96,a0261481,322e73f9,f4a2e94f,5af7f6f5,ae7f65cb,b62f021,608473e6,b68d032b,4835540a,f265049a,e506b2d8)\n,S(ff92c7ba,5f89d3d4,5273688,907ab9bb,794e5622,f8f300fc,804934d3,b5820e00,3b2e2d1c,420fafaa,e53c9da4,957e22b2,bc76ccbd,99f323d,763fa1ef,f92ea71a)\n,S(49630ee0,a8ddf91d,ea678a3e,1dcb623c,688b7c3b,9e39196c,b578d30e,196e63b0,4c1aa073,d1375475,11d81776,e2e59404,aa08db5f,95b80e56,c39613be,fc2bfcdb)\n,S(d41ead31,f2fac884,e762ccac,85825cbc,6ab2f8df,a069b2f3,fce3c6f3,d5c95a33,f15e3e23,e19baea5,677390cb,acf97180,86876f96,50fac740,9b6e62f8,b6d40652)\n,S(5e62e95d,27ba07d0,781ad685,75a7a11d,df9f2776,48cb5cb0,869ba586,6ff02869,291717d,1a1ff532,e92f0311,881fe2d1,6c8844a,6f5ad7f3,b1ced51,e5088302)\n,S(dbdd4f57,1f6d01cc,8a1025ce,3b92ce3d,56d396d9,635e456a,fd856239,27b53bd5,b929d5dd,816bcdd7,78abd34b,c15f2fb9,deff3f9a,aa44de0b,9f7b46d8,b8d70373)\n,S(63a8349e,1a891037,9a74a60,babb68a1,4c8cda6f,c2cbc0e2,1a5aca7a,fff7a19f,38858c42,9cfb1e49,5fc90633,ce07abf5,b7c4a4fa,22b955ef,e2c137df,143ec70b)\n,S(1805ec70,2cbb1e4a,5da4841e,9e24afcf,b84a3e45,dd6c39a6,cdb6a661,d5c6b1af,193be01d,d3f28479,e352f164,de99d21d,1b3fe8c4,b0af8587,8f21c858,cdadc27)\n,S(2d6ff24d,fcfeddca,ab3b19ec,b6a79793,7f5c5d3d,373b9df0,6ec68549,6d075423,b8bbca01,551b2b3e,f6ec3a37,ff020f3b,6b1f5456,69bd8b90,f8a55216,3fb48fb6)\n,S(3aa21099,52cf0464,4bfe5de8,69cb2d4a,19d3c4c4,661d6782,967dad8d,cc353a24,68252574,69dd7940,fbdd26a2,483149f0,f71a4b12,fd25b063,73765c52,d45985af)\n,S(d6422a71,443b0e37,cbc06f90,4ba1f62d,c2351b7f,e4e0b909,5fc227a1,7f8f551c,ca92a69d,2c9aa758,46c2518,f1ae03c0,d7138170,447b55d9,37108604,f71b9feb)\n,S(51e297bc,46529246,a36f8460,f285d713,b1e9ed67,2027eb35,37806d5c,7e756177,5d56e447,63bde166,b456531d,94be0d,7057081b,edbbb89c,be8c4732,13eb0ad9)\n,S(378a552f,c061e796,c9ddd101,63851ea0,663f09f1,3fdf852b,ddbafd7b,bf6c258a,6396c9f2,a26b62c6,f33b73fd,98824958,8cbc7c10,e679bd4e,ea0f4ab1,dbf38f72)\n,S(bd85fb00,1db4f2fe,95c61f1e,825e65c3,80761832,37be8a86,a20f6fc0,7a586daa,52c21cd8,9bf874ab,7d7e0f4c,d0095d7,6e8c737b,e2ba9d1,a21fb795,d968f61f)\n,S(fe68e6ec,3c8e681c,e7230a92,e8762f0,af3e206f,f3b0afe8,be61ab34,2ca076b3,f8683d06,af0c88f6,93a0a6b3,1200cd25,ea2c7e9d,2b8048f8,b983474b,b1dc20fc)\n,S(83e55d38,bbe2daa9,f8147b1e,674be115,d919445f,70d2b3a6,cb917a4a,9ff284d1,92d6c7f6,dbbcdee5,8b11a244,34cbe7c,9f9fc0dd,c93f6fa8,b6354a06,5bf90ab7)\n,S(fc9cbaca,ed0e1df5,e9d8120,6bb55f26,67e114e7,30347030,8b333554,d0735ad0,d41fc02f,2d4b3f74,f4e9ec00,7a879540,54d12fc9,3d53242c,a45bd38,c75deb9e)\n,S(7adf7a3d,12268d0f,c2568d5b,ee296d61,fafcd739,f081e5a1,7b39fe7,40132b05,51aeb855,a84f377b,899392c8,a7daa18b,70ec2a94,7929c93c,67ed8217,41adaa21)\n,S(e9631ea3,7da9e68f,eb61f9c5,6eb91bb0,2fdb4d58,d99874c5,2c4af40f,9716aa0c,51d5a6ea,1a5fffae,39c598f0,158272ec,bdb48c4d,faa93da3,89af20a7,d2a1b8d3)\n,S(e892f70d,15639bdd,ab70739e,83ab9f04,963e1dff,e2bd81eb,e075173e,6bdd116,2e78cfa8,30b68c55,68f635f1,b260d823,55f38ed3,f5f43c33,b178be12,dc006b4b)\n,S(6f3ef2e1,e8d4fd02,2533f4d7,410778c6,ccd9a7be,aaeb3c8d,d9f01699,89598def,c4388130,c278f8f2,7a9947ed,4948f8e4,febe81bb,88bf873d,2d565b4e,3481b86)\n,S(cf24cd64,84b07e12,37640f0e,da7e776e,3d4db192,6da8e929,19b36383,15de412e,a353cd6f,a796c46c,49f34c72,64d36df8,6d53f556,a36f430f,7f3f6ac9,3527ca7f)\n,S(a2e98e5,36d517d6,528d6353,8bc2be93,4eeae1c1,cd8dcec7,a60080d3,fed33749,205e752c,49a09b0c,8804cba0,62b28ec4,6d9e8f37,9cbcacd4,a7cc9049,47bfb296)\n,S(e5ef194,498445cb,718f7c77,6aecd0f1,949a4a49,73e32ce9,a4915867,dc27139c,fc774f2e,1e51f03e,71e637a4,158a0013,5aef5a18,b15ef0b1,e5696338,82bb513b)\n,S(311b36a7,1a1d13b8,29c78813,6a989c0e,1b7039d4,d75110b6,ba97f000,749a8d06,2f441c15,6b80f4d,51dce0d9,bceca566,2f3fdd9b,965a0d84,55f6d154,3a661f7f)\n,S(324420fb,a5076214,9be852e5,ffb88d20,d1120e1d,2eb9c132,32bdb13f,403a5f6c,378f5d4,1dc1011d,1fd338d,b6073df8,903fb4c1,e17b2122,bdad5eaa,496965b)\n,S(7cf4998f,5095c102,a0db72bf,9935ca91,eac814c5,4120eb0a,262f246e,ede142d4,73e6db13,d6db9486,fc870698,7be096f7,7440dd35,67064888,e61dfeea,e98c1fb3)\n,S(d6fe26df,d501241b,f8c5e74f,e30714da,7d690be0,91cfbe14,68ed6bbe,23598f7a,102c4907,60fed9b7,239c0443,d01f2742,fed0a0f0,fd7ab9f6,9fb1c58d,c5752fe7)\n,S(805ee58e,66ab8020,c9c32afd,4c7fe30e,960f4c3,ae51e94e,da9e5242,af09c6f,19154d86,59fb1837,3d0adf6,daedcfc8,3937af0b,ef9a7d15,f990f60a,c5457617)\n,S(491717b1,f22f93ba,d0a3cce4,fac57160,8ad7a746,ba73d375,1713e605,8bcd8450,9c38b3e5,4c89d38a,2307546f,f46bbd68,d4e4ad08,cc45bcc1,575fd120,acdacaff)\n,S(a8e23e38,27c54d4f,ae2589ba,cf3c4e1,93f97e59,b11506f2,2016fbe,a9fc2522,ffaa8b74,22b50822,dadd781f,d31b5a31,eb384c50,2fa0bc2,89252665,1c602f3e)\n,S(9fee31c6,88b0f7f7,78a39786,a84567e8,34da7ffb,350cfdc8,95d65c4a,afdf69c4,2116e31c,2a0d25f6,48a3ab47,1c897484,d71dd9e5,c678af4a,292a6388,d9e45e94)\n,S(6256ced3,f08f1812,ca7ad618,383f1542,baa2bb06,332d4c1f,72d862c2,318854e9,9ae0bbd9,d2fd51d2,9347aa62,12b6c0ca,be530b55,bfd8cf18,6732be1e,c66ced06)\n,S(ca1cf364,a5e1f47e,cd0ab0e7,52e785fd,935b8c37,964c5654,2cfb3249,a136d669,17412d75,2f350795,30db27a1,7394c362,45fa376e,d20583fe,b9f7a7a1,2c3b67f3)\n,S(19004a4b,28e5352c,7c74def,cf129ca1,cb5c7dc1,5099b37f,dfdb0d5d,1e694400,68ed1edb,9ac650b2,965a4034,2812a692,23b3cf6f,24ab0a05,2e1b8eba,f7335020)\n,S(c605e97f,27199d86,18fca176,54e44c9c,8dd20994,aeae0466,dbdbbf0e,ffd1b3c0,606955ce,33ff7b6a,cc6de4bc,4ef80b34,bdf6ea17,b29dada,4ee54f06,f61e9d22)\n,S(3e89970f,15e79b51,fba90202,a16da6ec,3d3d5d53,72218d72,bbed0626,31affdfe,5d9e27d0,bdefa8cb,b02ca682,a062ccb0,61a8fc47,b2cc72a3,9b687b45,5f83182e)\n,S(c077c861,575ab0d2,944f8e65,8a9dbe54,9fc1172c,6b7b7428,476af472,e625d5cc,c01e7abf,6a3abe2,d2aa2457,76068afd,9ba78fb4,fa39e531,8155597a,90fededc)\n,S(8567c87d,c12f1479,5f351d1c,807604c6,636c670e,11edb286,92552ab,382ddaa5,71f0be2a,12ebee63,8a63e848,fc4d8116,e2dcbf99,ecdb15ae,1f4ec6c,84f359ff)\n,S(9f1b7785,7421626f,87978ee1,780d0,1e9d0b28,df34c2ad,15332b8a,d94d8dfd,6df504cf,66144d9d,ed530e2a,1436a4df,634a84c6,9de752d8,42e076c9,1f129b8e)\n,S(f45c2c6a,2754fc31,c5770e3d,38b19e72,47b0dd1e,5ade8ed1,f2f3219,ea7accce,ee07ec18,8190ce54,e736ffd2,912075a1,128d24d9,b178a7ee,72aeb6e4,9b593f4f)\n,S(51a5441a,f3446fb4,cc63ece6,c9650a87,2fa5567c,4918f5b4,ec8668c4,ddba6e0d,413186bb,adad4943,6abc46e9,280a1571,a97ed7f2,a839cad2,935675b9,d167a54a)\n,S(adee3e1a,e9a2ab1b,da34fd5f,afd3b3e4,f51255f3,5dbd94c6,8efb994d,afdeeade,f330f0cb,973fd732,eda39ebb,82dcc589,4c148165,428adfa3,b4ff865,1ea83e24)\n,S(a8946504,eb084214,d0153ac9,c3437fe7,3ff5696,16e01672,413a62ee,27c97db5,3dd63d46,f74a56c7,2cd5d45b,5bd6f2a8,d913300f,b4ce536a,e504d4b1,b2e311dd)\n,S(e34ce586,990e48c5,febc2fd4,70770cf0,4c81c782,3702cb5f,289be0,f4a97205,d1774a35,cdd7cc54,dc68827e,f7c723d7,5c167982,c314dc62,bba17478,611f5854)\n,S(7a8a5d9c,edbc4c76,1fdf2958,8289bea,d524edd4,f7cad978,deaeca8a,de47435,559d473f,3a9a7ee3,4ee0a1d0,4acdffc5,6766db36,94fbf08a,5ccef8cf,31e25b6)\n,S(848cd57c,62c67249,d84710a1,5c7abc27,93fcba46,497a6b0e,b23c2ad,f8acaac8,a48424a9,59922131,31a763ed,30369b72,b331d9f0,cf46f8a2,a15515ed,6726f735)\n,S(6afbce14,1f2d2c4a,c52e7e05,5ba6ea60,7612a590,d74a2a5c,1344cd5b,c49f2f03,910d69d1,cce10aca,bb1593be,2d4d4d28,9745f97a,29fb78a2,a1eb6f0c,a58e4b61)\n,S(61f3727d,718644a9,2e08ab04,814c4446,c5dfae82,c26540cb,44fbd310,a5315a11,56665e3,ee6edadd,a154563b,11fdc203,fe4365d1,ac36879f,a30778c2,badab836)\n,S(582962de,e00668e7,91741dda,8e86ddb7,b8ff7773,ac1ea51d,1aac139e,a810f3d1,6bd353b2,e004d66,f1e90cc0,7c68a0a5,b532e709,75a7bc58,7a6b1c67,71022f6c)\n,S(5c4426f9,f6071fde,a9304e6a,4a2374a2,e2591225,28b62d20,5fc3016,c471b636,ff6e8c71,fccddb0b,5cff9e2a,10c606e7,c571245e,8f5bb5f7,77e0a7d9,733560a1)\n,S(ee02633f,c6b41f01,c3c24c33,719db7fd,a9e04b1f,7070395f,e8898a0,efbf6af3,ecdab00c,83cb3465,1d48a696,6a8e4f03,ebecfba6,f73a66ec,4d62a668,48f14798)\n,S(fab36b80,e5bba465,63c9078b,b727e0af,c9bb0af0,2e394f9f,2c90e0e,fe9fb816,75173a7f,f5599da0,ab84519,c7c25be4,1f10172f,fea39762,8e7dab7a,3ecbcfa0)\n,S(68a89a2,62015a57,5f882215,48c6d3a7,b4ad1f92,f5665980,367107a9,f4cc37a,43ea7b7a,79397dea,c8354436,d53e7731,c94773d1,5b067063,b108c559,c05bc46f)\n,S(fa6e2972,87a0e97c,35454378,4a76fb0b,56106727,136474d8,a3edf8b4,e03f95f4,1e80751f,9c127fff,ce28ae,8ce5afe2,eea1c566,fb0a9f20,8030cc96,e1197725)\n,S(25474cb7,805d22f8,7a641116,34628321,f086d1a0,40404c47,ebee913c,e9e02a6,2b3aac5c,85ce9672,61757c61,d6a72dd,4ff81e00,87f0b8a4,999b927c,7b069609)\n,S(6f7051ef,10fc1485,a9c80ae0,8683397d,c0af15b5,f78fec70,fe4c456f,f33b6689,625086ce,ab7a9173,d9c370c4,c336c63d,2aa85ac7,b8391993,7ffe4118,f6a7b849)\n,S(f4720462,2f579de0,701f1e90,558c74b4,ab634664,197c03ed,a85b0fe4,50df4951,c66a490f,f9b588c9,2d17b80f,7f66e5fc,a65187b6,d965e81b,c16039f4,477fdb54)\n,S(3b718764,7e722fa3,de42fca9,e3ba181e,de982728,5b8b006b,d51a58e5,ed898c8,bf872047,f3cd3ea,d7a439b,9d4f7776,7175f940,d6cae8fc,930aece7,e1b92202)\n,S(5255ba09,df1e199,4c99bf21,709849a1,cd7c4f58,a283e344,6b98872d,a416c40f,a1099eee,e3ad10d9,6bce7a58,839fcaee,1b43e0fb,29ac0300,4e0eb15c,63d1f604)\n,S(f4b64a08,16dfe224,595d3a15,8173df8a,7d941a4e,968ac02c,bf87d9d8,93954805,e5585209,2d0cf600,b8b2342a,8371894,f422e3b6,68ec4078,2379a60e,944228ee)\n,S(236d83ad,b789d7df,5fde69cd,86d45d5c,f20c5867,b7f2b398,b9373960,b22b29ab,9758044,d3e06295,e33bebaa,befc5776,5db45475,b3aab963,5fea8dd6,77a478cc)\n,S(42071659,65af2fda,c9e87319,6dd0c723,e7d61bf9,b71e5e70,667c9858,6371f3f2,fddfce02,588c1d4a,b744301c,6117e504,8f9c2636,5ccafafc,8a6e19a1,ea7b1b37)\n,S(7d0c2917,aaa71cf2,e79f1041,5e5e583,ff01b24b,65f1f409,240f794b,d346a452,1e857dbc,c86c1032,e748d8e7,c8f5839d,57295223,22e6bdb6,187b00f1,f489576e)\n,S(f0609605,d6e39141,e5e4f0e0,6bb6d55b,9ea2ced0,6a58d4e1,7c46a3df,18257255,e6d54c0b,10826de6,e95553ac,e4689fa4,cb03b959,65472e65,a085988b,d045374c)\n,S(86e66299,819b0807,af30c89,228447f3,71fad56b,75f238b5,30bef3e0,b1123204,de635715,b1997f4e,c367bcf2,8f8def4,7a7a2069,3a555b5,396dbe4d,19b1e8ff)\n,S(7710dc40,f72bb934,f5f9328a,1284efbf,fad3518a,70c2a0a4,55028bb3,a8b87e9f,d2ebdd39,7dd91ec3,7ffcd8d1,a9b412c1,78f6d228,5e099162,76f9e8f4,a6a28e02)\n,S(3d377c80,25607e9a,fd512e8e,7c37a2f2,8d316701,dff7f318,eb24cc34,348d935f,20d2d95a,e8503a11,de19db36,5bb62213,6cd55735,966c25cb,2a56f07f,19cb2664)\n,S(812a4ad0,d004003e,fb190ea9,336659d9,7b7d6df0,29f29f97,bc9c8d68,f284a696,6303a024,b2d95d18,f04fa94c,df3d0749,60ed45df,584e16ca,d60a0843,551f94e7)\n,S(51cb80b1,9c0dc55a,888421e2,411baddf,6c0eb167,ed9bd04d,294623ed,1bb61dad,d14f756b,f905da5b,6466bc6b,26685501,1fc90892,93633c74,479afacb,c34559f5)\n,S(837afe72,82af09de,108711a7,998dd45c,36654f3d,a3cb392d,c46bee0a,b43cfc8d,88b0ae50,5c30a2b5,72c0f69,8e7ecfea,87ea1253,ec133fe7,fb2aff9f,6adc2e15)\n,S(ab967cb8,463da438,ad360a8b,3e066669,231fbd,cd590904,fe827ecd,dff3cca7,d82043ef,c614db53,8d06f6d9,9fae98e1,ee6f5065,31b05822,ed2141f3,25ebe544)\n,S(5a0b6177,50d828ab,fbf4fbca,576ff8ff,5bd19330,bd357eaa,a5564e39,c718eb49,f6e8d743,e528429c,2cacc478,368d7226,823a45bf,358d9128,9da334b8,5a1b4426)\n,S(351b4334,83fae045,ce964f04,f63af62a,6964e0b3,5c1444ca,68d09edc,9a43c9ea,f571f442,7b308ac4,83bfdb4e,87987455,a2a49f77,73220511,dfedc616,20bc18a)\n,S(fe64fb54,727ce446,c00dc3cd,5de496e8,2d5a0e9,b13a9a7b,99a96a49,2d0d288d,452c4c9,aee35675,33ce8cbb,e444590e,f5756f14,33865ba0,efd00c4d,26db7d8d)\n,S(9403ea3c,773544f4,4eae3cb8,91457ac,89b11f1b,66c3c397,aea8d816,ccab1d49,46ec1e05,d13b40a5,f21ce743,b2ac9756,8ba98b2,8fe1443b,3b0c9cc8,f8a49deb)\n,S(e81a5512,2af7093b,b361ab58,534df80f,dac734d,7a863ad1,b080d691,c4396dde,fb33ea54,fbc0c05,f9854f1c,49cfabe,90e259ce,9aafae3,353e8f51,594d49f8)\n,S(b7511df8,fccf50c8,192dc3cc,bd79985b,15eaa528,89c4d01a,e21767e3,96bec9ee,c937db57,ddcf0997,aec742e9,cd522c10,d4a52b27,b50104e7,b59c441e,3d0fad4a)\n,S(5625f122,4406dbff,a818d98,1e88b5d4,80039f5b,415acc20,ae69ae7a,704dead4,aed9f73d,5265c976,760d094c,e9ced8dd,722122cd,e0b1b34,a8296fb1,dccacfe7)\n,S(1b89696,dca54369,27bcf0a5,de32ff1e,e79f6ea5,6f6ffeaa,bce6190e,bc7e2c8a,52bdf0c7,52cc3e5b,1cb9b5df,adccaca7,929046b,bb67daf3,10ba793d,9369b358)\n,S(4ef2516d,796d1c0d,9baa8491,7c2db149,e7b89f61,a8f8fb95,e14116bd,473d730d,9a0063bd,6e25255a,70479159,d3089a75,834e54a0,a28c5c61,ea3c33a8,7ab20969)\n,S(b36c8db5,51fabcb0,c3fa59e5,9faefed0,1a53b4d,5470ce15,937c889a,a93faecc,1be63f1e,7f85bfe7,2e782cd8,22776567,e3b58794,5f37e2d6,b137da7d,42c8cc10)\n,S(7db8ebbb,88c7c04b,fed18b7e,1830df41,490028a2,2918098a,9b34b8eb,c110457b,73fe3f91,f0f8a43c,490f4cbb,f8bab5b,9a6569b9,22a69e9,93ab910c,520fa9c2)\n,S(47bb0b5c,c207ef1a,db28a389,7606661d,e5d4c740,3b2858f3,209b7dc0,cac3021f,150e2ce4,44f541ff,7883cf31,79befa4f,5df9c3e1,9da098f2,1d73c37d,1ca48b16)\n,S(7803d64,d7622ab8,70a8b927,74e012c6,ab97fad8,4bedfc7b,ac4ce6a,74dad4e6,2662e4c6,1a60a1ff,5485bb34,c1d41d29,3a09a69f,7fe8a049,95245e2a,7770cbe0)\n,S(61a64d4a,9a801549,4fa670f8,85988b67,7d317b9f,9b75e3eb,fc6d734e,fe3d3aa4,ff25af65,16e639b2,b6b0dd56,c0e12610,b1b00c3f,d8c59cf1,3fbb1b74,6282d91d)\n,S(f2de8cdc,ce609b80,af8b34ca,1c1166c4,3ae0ab9b,e742b510,2ecdd5d,2e94307,d624709e,79346b3e,81b98871,84bf252,949c7f21,861fe6f6,666ef5e7,18ec5be8)\n,S(8c740f9f,386f5a0a,228ea52,18a43461,142f744f,87511e9,67080dd0,f3c65d2a,a641bdc8,ae1d4051,a15b1083,27581bf0,22e92b26,a5bbd186,86fb4e59,79f7cd06)\n,S(b15a4b19,17448b75,df927416,2795eb5f,60cdb4f0,e657afa9,989e5133,646ae240,e09f731a,226189fb,429c76cf,1ed9fe62,2c148475,92f26b50,c2c45344,ddc73370)\n,S(44a65d90,26bbdbc9,89b0dbfb,aa645860,d7a15652,5286a9e8,c67b5a3c,e2dde08b,f2f23e44,bb6cd570,f58ec2b7,b90eb66c,30775109,81279b50,2fc90762,3f12b52b)\n,S(60bc8123,92f1e7a2,4eafd5f8,ca0d8fe9,c5880133,209f17d8,6b95cdb2,c9df479a,4d39ae61,cf4368ef,279231ca,b72be100,cfee501a,da7c873c,3db18742,82076a98)\n,S(ad5b9079,36391697,61edf9bb,6ed7ae2b,f7e852d4,bae22afd,655a5ed5,754f3618,bdb40449,723089b,ad8221c0,8a46824e,cefe4899,d5e073fd,8606524e,a81a35e3)\n,S(c8166cf6,97edc986,6f824df3,82a515f,68ef5d13,dba7e0d,43e85727,c6e15911,86804e47,8118c092,3ab97ef1,ab9dac34,2bc48c7e,3fe24e6c,fbaa74a2,2390f4d6)\n,S(3e0a96a,94dcdcb2,9f0df535,970146d9,7f0fd71d,7a4196ed,cd626903,aafbff06,5f6eda99,4651016b,86d28c9b,39efdb4a,b8ad08a8,5c87b230,eaf7ba70,6062a8ce)\n,S(e72351db,dcab669a,f1df2767,f5e5f05,ca80608e,29ac5f09,b1ff76ad,43178a5a,552249f7,7a8b3462,c9a268f0,fee20713,5cc14ccb,15914be9,2cd16d99,b2520af1)\n,S(a08e1278,71ec784c,4f80099b,5d83c5f0,91978e38,7b0b37e1,f4622c15,80fea335,48e6aef5,349f25d7,40ffc9c2,5de543c8,7e0553f0,54990aef,fec51f0a,9b3585a)\n,S(ffb6f3d7,92596141,f7d15157,d1a42bb9,e9b51e21,61a8e297,5aa05688,ba67617d,aea9ba56,8aa7cd30,b9940c75,29cc1e7a,dd60a5b6,8911498b,9fff470,bc4453df)\n,S(9c644072,318933ab,4d1459b1,d684c066,d3df3371,d7659a82,fd396bdc,a9fc9e,a115ce28,5a7d9bed,a2a962db,5041cace,9d3b2a3a,12149b05,ddbae7de,30cf52c3)\n,S(5cd3475d,8a6fee1f,a6e3800e,911de939,a7568762,4f0a6e69,26ea6160,4ddec04,20063702,1d1d525a,f250876c,c4b49590,9ca8b39d,74603979,8c8b4b39,fa07c17f)\n,S(28519616,c035ec81,4e851ef5,191e0545,5f0bbb57,12fcacf3,2b36de77,1c351f88,42ed56f5,5c51953a,6a367398,815963e2,64363681,f9a0723e,7b622784,5cc939c1)\n,S(a4e11f70,b3554f05,d0634209,86549001,53d2ed50,1f09f787,99b83308,4dc894b,331b9d59,4260e0fe,381176a7,1873a66d,a7a3b9f6,2a930e0f,696f68c8,6939755d)\n,S(c5d7c22d,7a8cc553,7ed85a85,46adde7e,ebddff6a,f7e8a6c9,96f50df4,248a4ddc,dd4749ec,bc029503,1106812a,cee59bb7,acf41451,45883a71,3256912f,be9ee03b)\n,S(b56ad6a5,c6fab0,934257f2,9e266052,cdba0bc7,8c8aded9,f0e08490,71770c7e,6aaa84a8,99a4f8f6,3ca8dee1,6df7c090,264e644,de1e58e0,49f99fb5,fd5f4c34)\n,S(16c4dbde,37e8df54,aff88810,678f4707,310f29b6,e9e5fba0,384220b8,4f0dec11,4fbdd92d,56a3f76,56b4dcfd,8be6b589,eb02c645,8a247c9d,264fb65e,c84a3a3b)\n,S(15e63d71,f02f6bd8,1899f95b,d3051871,84b68d93,6a2ac10a,d29c39c8,d5ba9748,20204657,ae0e1078,6df04a71,938055c,ae208105,ef1beeff,663d8cc1,df478ed8)\n,S(3c07006b,8a1e1fe6,fcbc3a6f,fbb7a780,a0008ed,513c9967,853a8cd2,5827dcc9,b2fe428,d4c8d974,72066ca5,ddf32e99,18b5e79a,e81fd6c5,e00b8142,566ce904)\n,S(c7f2ddf3,b3dcfa04,91846f0f,2341b1c7,81ce2cd6,ec20acf9,a304fa5a,7dbe73ab,595d0b02,faae2b6c,f6e84bfe,1183ab9e,dcfd6c9f,411d7125,dafbf9d6,60ec5d01)\n,S(4c239c01,c05d9c11,3d25dad3,3d14ab28,f94742d6,8c9c748f,1773b739,445bb643,dab0d447,de6a8c79,6809563b,e77c89e7,956f6c9b,ed930d18,f25696a2,e436ebf4)\n,S(9e1a100a,c44c33ca,543ae407,f98fef31,28bd1755,6a16e5a7,c1390792,187fac5,540a4e2e,9864a32e,3eedd96a,bb08fe11,b499a551,497e0c83,cdba140,3b303821)\n,S(c3b4d7e1,bf3485e4,d028e424,81608ab3,9fe37649,de75733d,78f725f3,63255d18,8f8b00c0,2210cd63,c04f07a1,e10b1a50,f05ad863,b8cbbbff,9b73c84e,c59b5ab6)\n,S(dc226233,8dadc96e,5feebb65,b290ceca,f8f5bcf3,e1794f9f,6ade4eaa,b89f3372,25bebe7,cae8b7e8,d755862f,dbb929cb,872e1c88,6b7d03cd,b32303a3,b8b5ab9d)\n,S(184b11c0,a52865a4,5f530101,24cb353,dfbc2d26,bdb3af35,d5f029e,6bfe53c9,237a79d,b53bcada,f0a96804,d8072832,4f59f03e,1dc7a76d,ac5fcd01,3838b110)\n,S(4ab97ea3,943e8157,3cfaa8ca,680252f6,577ff2a,a93178e1,e1a3dcee,242b460c,b8a6293d,f316c9f1,5fb8850a,87bce47,27d2a38a,d1f5f63a,39d08c92,e9d6d242)\n,S(a531936,799791f3,cfc8bc58,4a2967ea,66328c66,98ebad8b,5e5fe8ad,8cd025b,c24d6ae0,8fac8028,a3e0e079,426b94ee,2ca7c845,8efffe1,58f6cb2b,c9046c3)\n,S(37cc3686,a6e75e4c,8d7375a9,f291ccaa,937c833,f9e16d77,2591e74c,787b1f7f,557c1bb0,a7c7ed52,93e44cd3,75b04a47,7788181b,b20dc1f1,f6704c10,5a8e399c)\n,S(94fab00a,9418e31a,9a229706,112f9386,d537bff,f5f0c4f1,b241c475,4d7336ed,14bced66,1c6eb134,7684cf29,6a303e0f,fa5abc38,ad569011,c09cbfb7,8316540d)\n,S(14b851dc,c6b4382f,ca64791c,74a3faf5,adbefe65,b36de8f3,74e12e6f,e3c20e1a,6353d0b,ceff99b8,53557d0f,a893df50,598e0335,249f96c9,4e7a46a,3c02ce1f)\n,S(d08e3027,5e05da0c,22991340,8317ec6c,e4362dfc,45b946aa,41e6b541,92c7589a,9553748,22228787,2ae61975,d0969373,8cb346dc,15d07e23,68800ab4,deb5d463)\n,S(365ab0ab,6d51bff8,d4bb479e,a666e110,9a838863,2a5f8cbc,b3241bcd,5ba88ed8,bca2f90,ef0d4145,90cf9add,2a9d6793,d678f981,1ad851b,b2f54b6e,6bd093d3)\n,S(879e8da9,e1363822,b113e70a,b8072081,f0e34a99,49d698ed,a0f55b4,6704089c,d5091dc9,d33861e3,daec5550,1f52378b,65b25a74,27a04483,c862e0a2,dc1038da)\n,S(17006515,8ceda656,b23941e6,33ab3ab,ebb527f9,52ea9876,a8341600,24dc10e7,39a7ce82,b0afdbb6,33e74517,5fef5165,cd44c8c9,d81be0c4,56ee0251,6410b0f2)\n,S(574a4f4f,67e294f8,2055793d,e94bf7f8,aa7106a7,f7ef0f2c,3bcbf2a7,352f017e,eac4aaa8,f4b4cf2d,ed8c328a,99b24623,16ee6e08,8805f1ce,783c4cc9,eff7baf3)\n,S(4ab81205,32603ea2,9f88ba75,f2f0c4ae,330bb5e8,7f371806,de04f87e,69d5e6b2,1f1967ff,cd42f9fd,1f892f43,f8ea945c,c0135544,acb8010b,8285403d,5e621456)\n,S(9a4e968,82b11f0b,5e431867,80dd208a,ba25b3fd,1350ed84,f34f2b43,f03c4378,15653ab8,375c04c3,d7488006,1acf13d9,c5d669f7,bbf70490,44dba189,372f611b)\n,S(267b8cc8,3ed6ef12,47a93f07,b4f1195,2fb1de83,6c3e3fa6,782b5e82,80cbd8b8,19bc5752,1a41c7a2,a9dc29b5,cafc66d,7e2016a3,334b4be0,e2811ee2,4ab8599c)\n,S(69a8b170,876bb1aa,2faca2d0,a4ed8c02,44d2cfee,a849293f,5ffb4243,256a1017,f77d7a37,5315381d,97ce835c,296593b2,80c395db,a5311a6c,c7fc2c98,d314b4fe)\n,S(88aad570,3a4365c2,96946510,5a3a7fdb,6e1f3e66,618c3fbb,ee4c4e13,f333b1ca,10ded35e,c15df656,fabfc4df,a1140b09,196d10af,e1e99b3d,7e1113ef,f7fb8670)\n,S(50709e9b,8620f7f7,7b8b6c69,1360062b,cfbea4ef,6448917b,471c3485,55691440,3946b364,3cb1bd81,818b828c,77c771d3,833a1d4d,dc509705,2e5db99d,6cde2137)\n,S(1ac1d530,7cf465b9,8f1140ea,bbe7a939,df8155a1,bd656168,55ae128e,bd3959e1,eb02a759,82bfa30,1f9fe87c,75b9dd8b,fe2d64d,7ea89836,1aafe22d,448b418a)\n,S(126a8f88,e7f59ac7,3226f2c8,8851773e,873f1ea7,a87342fe,da5d9795,3a1dc956,1ce623ab,abb29b2b,b9fcbde6,a6a6f12b,ec68bfd7,aa98733d,f2452860,bf9349f5)\n,S(592fe608,92c09243,20fb32dc,39e7a42b,1f5125ad,1e7d6790,9978ac10,5471427,c4d6ed82,4d33f52c,d975d34f,b9df5698,968a0c57,9b44bd19,8a67fee,9935d310)\n,S(babab912,e526a92e,d903a942,ae8ad2a8,930ea5c6,17cbf913,7c074060,6462f0bf,76c7ced2,4318c1b6,c7295d9b,52bbd4b6,707a4170,d020e7dc,1c7b5e92,aee7a4c8)\n,S(6554e9c9,bdb1757b,408164ad,1cafdaff,4642a3bb,cf64e785,42c324c7,5be1a903,439d023e,f6c63252,311cf494,4c46a8cc,a3d684a1,d66556e5,dc488d40,e5ddd500)\n,S(79ad3f8f,4c429721,281a9b17,d9c05463,f26bdfd9,c856451a,1050b3f7,805304f2,3be5cb37,da868333,4f9a4def,aa8711a0,adb6721f,d4b2bd38,5ad7298e,940dbb87)\n,S(fe559c8b,e982e801,7427d308,e50e4d94,d7094aa0,635e553c,c591181b,c9593015,9186fd9,c9fbecaf,f4747597,22b34b72,49fb72f9,f02a67a7,627c1562,ae80485f)\n,S(d2b4bcca,38d1b073,5248b4a,7f43f277,8e03f46c,8d7f3a33,ad2dd9f1,70ce0af0,fe0bfaed,846a3f80,10fca999,d0c3b0d0,b54e2fd8,7a0bf751,ba40f560,9eb952e6)\n,S(f6b9ecb9,631c784c,8b33a7f6,3fd0903d,baec116b,3dfd2414,4865b297,5c290faa,95fa4ed7,e67b828b,4c685850,4b003928,8ad9e27c,da175b4c,81730fc4,5b063355)\n,S(3e70eafc,653ef528,aa12ce46,59c90ee4,32979f0e,9df260fa,b9063f3,d30de2ee,e240ec33,b224a5db,3761796d,2c1285d8,9cff64b0,7c36a184,996cdca4,839a0a65)\n,S(dcc76f61,46d05c0d,67bdb161,dc395c83,663ebd48,6bbc6e62,f3576335,a8ee0c59,e451ed85,a9ae624d,4617f11d,67552eef,7279811,6767a29,59708e,3c21208d)\n,S(3bb03660,430c43f7,e3b68acf,fe692b,5ed6703c,c808d7a7,503b3536,381180fe,c84c669b,2822cee3,627d4ff7,7c01c9c2,57c57e80,f35e4fdd,eab84a6f,b96fa1ba)\n,S(5e266477,dd106005,6a59fc2f,df36b540,e051bd56,c9120b9a,41471c46,b1c5c60f,d6a7ff4a,ee4abbe,cee617,1ad01373,d7916899,5370031f,66f62229,1057e6d9)\n,S(c1c13157,56ce83c7,93ca3a0e,12dfc0f7,270a0bf5,38177522,8850863d,37e5e537,750dae34,9090f275,5487778,5a126ea0,f3c2c0b,e3cb9241,326a863d,3179af7e)\n,S(c03ae6f7,96692287,4cd10b76,d06ac08b,578511cd,c502762a,cf14eac6,4f1a913a,b3ba2ed0,6cd40752,dc97e450,10699cba,90f38f65,cc4623b5,44d7a57f,250640e1)\n,S(5938d249,4edde81e,6fd50332,d81342eb,6cd0d938,f1f02ae,562d1305,cc665bf7,b585c184,1e17e6fa,9924361f,8d06b172,89782433,1d65b3c1,7f2a109c,8be27b13)\n,S(e3457146,bf3f5667,e0621ccb,500854b7,a08836b1,e4315d4e,6479b3af,e5c2bcac,3de9142a,5c495249,14d3619,a92dc5e9,f20e4603,5cbe2c8a,95a8e683,bb287fc3)\n,S(4187afe,4918d05b,74a969cb,14f54b70,95387e68,c043a581,7dcd1d80,4ca917a3,4e1c19eb,b38f0a15,36afd31d,bda30d09,3c776545,f2d8d823,bc3eae61,35585569)\n,S(60cabe6e,ffbc3735,dcc19c15,1abfdf4b,cf082768,e62a1176,f056c4be,ff04640c,7b0fbd84,ee9d787,2896b9c7,19448412,c68a1ef4,e5c6cff2,51ea823f,76d6c4df)\n,S(fc6883a1,231355da,115af629,4f06eef7,83447185,edc19e62,b53f3156,e0f540a9,73805d95,d8b2e4f9,d0fb36c7,9f09780f,c315c1b,724c5de6,98d96861,c521a6c3)\n,S(90f37677,e738ee2b,3abc9d42,54085349,9cd02836,474624c3,9513950b,c325b66b,90884e24,a4171613,da7fc192,f1bc913b,31bda925,38fc0501,6a55af21,e08bb960)\n,S(55e68c72,f76925a8,52d38e8,172e6340,3966f148,2a212131,cfca2497,ca40db3,ebd22c3a,1388485a,e4b48b4a,8b69b98b,755084f7,9f9018e,36769d5,d78cb7e7)\n,S(c74f257e,e1bd81f4,fcf512a1,f866b9a2,19586a3c,62e7abc1,112b5946,d5b90e8e,aebcdd14,5555164a,bfa127ab,9f352034,f31a19a1,d36cda02,f51a88ed,9662f44a)\n,S(bc63fc6e,d1963da3,7fa064be,f7a371a1,fb471ded,5bf084d,946a6eac,fdbb8d36,a26a6ee7,e178a31c,4ca535e8,e3d1dfc4,dadee69e,140a37cc,a306546c,26a75a2c)\n,S(9d11ff44,5e331ca6,fa99f29a,78f5e769,44fbebc3,e3b45a6c,d46ad17,74a1f29d,2f007088,110e9ec,66e5f134,b6d61ae8,70b14741,e9b6259b,ff06753b,fcbfbccb)\n,S(5aa47205,f01abec,79b52b1a,2625b773,659166f8,1e300d9f,46bbcdd8,532599e2,f56747f5,c7431031,5b630fe9,b162fa49,26757780,c6ba59e3,6e91c29e,c82fd357)\n,S(14dafde6,c8818744,2059563d,1e2cc095,f4bf18e0,f7e41b9e,97a74089,f678ce60,6f6a348a,a4f72e60,9a44b01c,b688ea96,cdc7c3f5,e559ed8e,d9a1c7bf,cf1747b9)\n,S(ad8cb71f,1a3739c,afc8a4e1,ea77bd9,f5703d4a,55812381,c5a04847,e85e9950,238d1945,cd5d6094,dee8c6f9,41a19b48,d1eb88,5c986dc4,b8f3908a,508d46d1)\n,S(e88df4e2,8b7cb050,aa81792e,ad108c4a,d95e735,6443dc11,f77d70b0,5968de2d,9541f907,f29d79ef,83c25f29,fdfbf819,49f21604,adb5a5df,e939afe7,511cdcd9)\n,S(d6b6549e,1ef4fecc,ab56860f,c7a8a549,a354d9d5,63b9d459,9bbfcd71,7631c879,df7a0e04,18a86774,ba87bbe6,132028e2,927985e3,b1319c83,4e1a400c,7b0ae231)\n,S(d919b999,faaa7cba,99c79a2c,febbdc68,6d94e07b,3edf8350,6e9a729b,f0f834d0,4b19faba,9b6041f3,9d33a21d,285fbf7d,638f3a07,63e2b15f,df102131,49b94ed4)\n,S(b89d011c,57cfd499,fffd2d1,8734f604,83df00a5,6efd43a8,35d5983d,573d902,977f7c06,ed8cb0d4,980c3160,b152a7c9,294d489,2c90fb88,1da40f39,adfe2825)\n,S(264873d1,cf9f6f35,d6bbff5,a2405f40,a5568a80,2fa35069,ce422c61,d9f2146f,36b8e9c6,e73044dd,b9b9753e,c682db1b,550d8310,7e3ea3ce,e8ecf031,500b3c31)\n,S(d4c388e0,950d24ad,6cc1dfef,a3735bf,bd9e729d,99fafc8f,e4fb5266,8816dde1,3d583de6,27789a58,fd4afbe1,af3f931f,5d12df61,7f5adfaf,95830cb5,4b13743f)\n,S(80a2e2fa,40aed900,a7a55f84,d4965f0,2c5632b6,1317e801,b83ec659,cc06e35,9e61e863,69c8a367,72d6a4b4,c2b7bd89,405fad38,4f99514b,485974d3,2342f47)\n,S(e36eb1d7,72d5d498,3cdbeed9,b64fa04,1da7f1bd,e324f1b,a734323e,9f5331ea,6c879df5,4a96d33e,6a66895b,f4d12fef,46d5fe48,8d62f073,238fdbbf,d94126d)\n,S(7852402c,a08ff966,44a4c1a9,3f7186c1,43f0e1fa,203b5991,d3fda009,1e0a4e76,a9b15d95,3ce9b219,a53da27e,e1b03aee,5431e26c,f035fa1a,a067f1d2,d36d5402)\n,S(5d33032f,f7bf3996,14a08ee3,a5b67ff4,850f37b5,eed88e4a,675b020b,90cc4ac,ff5c96f0,5ba73287,f3279907,ebd0fb7,9e0b4866,c32f6fbc,2541d8c5,cbe12112)\n,S(138d3701,98eb6569,17b3fc46,c2a3a1c2,3f7c95d9,d355d51e,c85b6062,4675030d,94314f22,6581dec4,3518cd7,61150f31,51ccd59f,3ecf79af,482c4dde,8a24e28e)\n,S(3f6ddeb3,4756ed69,de83946,b48281b,c2b60882,d0cd721c,5d76c5d9,ff898c2,be8b8841,12fbfe09,9af67a96,8f4bdcdb,db4469d2,34d64d96,99c6a575,518c48d2)\n,S(74676fc7,cf3bce8f,c0c4a774,89b320c4,736b9ed6,171d0b42,17a1433,eeee384e,fce3cf3f,630452a8,1cf3fb72,63c1b5,b66df4fb,864d4b39,7e66c69f,2913c54b)\n,S(e0d1a049,cd49ee87,d71ebd9a,95eef0a0,b1d7450f,617841b,590eab0f,3e883eca,99e00118,42e6a78a,d4c3ec3f,f7a61bea,a1a5f8ec,2f4e9066,978e96d0,cbaef51c)\n,S(531b455c,c6051fc5,f0f3190e,9523aa5d,2d0485d4,3901600a,aaf207dc,7d2b1fdd,b95f8c0a,b0e63acc,542df948,4b112b2e,e49f53fa,7f3e1dd0,307d9161,7c0f313d)\n,S(b86ba09a,2b05e91c,c23db107,9b34807a,778749c0,ed725437,69ff6c17,316e7db7,a91c815f,f8a3b2b7,e5d44357,20e3a513,32cf405f,7501ca3f,b1aa1f59,a01c10ab)\n,S(b63b43c5,af63f2ac,3f6e004b,c790404f,a146ea97,94b1bcfb,c4d0544f,2ca3f33,31654108,481b7dac,cbd48e8,c20de95,11406381,ef38fe6f,950b4321,4b145093)\n,S(63a09087,e237e0c9,686f2a79,af977ba7,26d77118,29c8ed91,4f99dc43,90c64d08,7771ce4,a5e7d43f,e12b5e8b,c819506d,3b85f52c,fdb0f9c2,92c22bad,790d3b93)\n,S(77640a42,4ebd84f7,71734050,7ba400cb,9e8462a6,a91fd0a0,b8f152a5,f5f7868b,516688cc,f422e660,15afa46,b5889331,3cf2d622,d6c829b5,f1d11386,bce41640)\n,S(963ae02d,62739bbf,e75965f3,d1b7786d,c3dc6fc,5667aebb,5544db3,157f8a17,b3a109d1,b56570cf,2a5e5056,fd9feb05,2e8f53c4,f2ced1a5,27c3311d,87ba9dfb)\n,S(81324144,454cb304,36f365d1,c78ea5f8,9a73706,acc49d5f,125fa282,c28ebad5,77a71aa5,54c0da45,31ed307c,c7fdad32,ab82a4b7,2f2a5154,cc405a2a,fddd3cc3)\n,S(eadb105,e80bf2d7,cba9b468,6f6b88ad,34008c85,a7ac4d53,d3fff09d,dcd566b4,199ebce5,872f9dd7,6c14821,622fd343,2b7b6437,3484fe84,714b137e,fa782bee)\n,S(a030450b,52b387b3,35cfe8ec,683fe625,884ad73e,2fc1c728,c8d9629e,dd2024ed,895545be,a9009f2c,dcb20441,33f2fad7,ac704ab4,9435fffe,b92836f5,57a114fd)\n,S(57e8022d,816255a5,f4d577dd,867d65bc,7d7fdfe9,ed8f993e,d9b30531,fa36888b,9b0b7929,3cef66be,c21b6fca,140e6fe7,9b9f2e8d,48555338,868b6c78,d300233b)\n,S(74c14e1a,d52761b1,7206b61f,fdff526,f7008f94,b3707a5d,e5c2a600,97b0dd29,18778822,89711679,c5e41fb0,41b1a806,9b12b709,b526ca1c,44839d5e,3b51e72f)\n,S(5a9ce7b6,6368077a,73c09869,38656705,c017faa9,2d9cd40c,69d8e57e,63f8e229,f716b144,cebe2907,928f4618,821af2fc,9de249c9,5ac61bd5,99a550d5,e97363d0)\n,S(f0fe4fd9,99c66687,3ab4c904,b9b7c0d2,7f033a0c,7e6c1b6b,4488097b,cdb49fdd,1f4643f0,6f700657,90aa51b5,911b4866,c286128e,de489dc2,8e2d6b64,972738e9)\n,S(e86c729d,19347238,a9e97433,355530c8,7b701aa7,d710d26e,6b15ebe7,4796857c,d6260d35,466dbe3f,58d2aab2,1c8d76df,18271247,9715bacb,2a76bb95,5b75730d)\n,S(b4e3a39c,8fcb0dc,5a23610b,bbb564a6,765c0135,1a8b666e,d680291f,c97df351,3f1eef0a,7a235130,b5236a2f,f8c9d2a5,fe5f1cbe,22326ba0,54557513,82ec651d)\n,S(a9c8482d,a54adc98,4db2d7ac,8fac659b,51c1237,eaf1d524,9bcfcf1c,4ae601b5,446ec925,fc148900,8ef10348,ee167a63,a10686f0,7a01772c,10f7592a,2a544a9)\n,S(17adc7b2,c36b1ff9,ea40b398,53246d71,bb973bd8,b469f7dd,fce49aa5,e77b8c06,fc3111a3,8dfc5219,7f41ea77,1682bd8,618f9825,bb2f842f,c7de15bb,224bf573)\n,S(328e9a6c,e7397c45,617aefee,130cb6a1,dd26e727,efcfc30c,3d8f415c,187d23b5,6320e80f,e4a57574,1fed0624,c0f956f1,d5b30914,b5da88d5,f63e17e5,64f8b927)\n,S(22188680,f765065c,360c52d2,851f3081,b2d3eb5,4201dad0,60b536bb,a45a1a41,b1107c8d,430df246,3b3e91fd,904883b5,cb877b,c10b6f,397a0cf1,c4b6eb35)\n,S(620f5772,5919db4d,53b8f89c,5669fc6a,5a3f3846,c31faee1,1e93e53f,b1d20bc7,7d739bc7,4becbd29,2784be81,294185fe,db047d4c,c16c764b,678f9d00,6d27feb7)\n,S(49b1228b,b624c71b,2c23e334,b098e84e,d3d8fca0,56303057,49dd39bf,5296666c,3f316e5e,ca9c1aa1,fd5d23a2,613e756f,8ac5e819,8ac16650,a9dff05a,1c8d76d7)\n,S(97ca98cb,fedaeddd,b13b86cc,4b6bd7d2,140fde57,dae7b847,c51b118e,e3d6b8c5,1b95c9f,1d6c808f,397c3ec2,a2a2b220,6fdf546e,8c70ac2a,78086ad5,ebe28142)\n,S(a679e7e7,3df904aa,e80270b4,d5d57dfe,f5ae819,f240369,b773fa3c,609a1ed0,93201a4b,17286928,be5fdfef,473565be,879cad73,24124c6d,6e1614b5,4e6e5124)\n,S(fe17af2f,70887958,1b9b176,4d45d76a,afac0afc,ff50ac8d,9179e53a,c5e3777f,f59728d8,67c3ab63,6d387352,a029b5d2,e9f2d531,7a508894,9a0f6515,f5c4d61f)\n,S(f7601ed6,fd64cf22,57cc15e8,e554dc8a,e19e4f4d,ad3fb3ea,a7e819f1,98b3946b,a3292ed3,ff088c22,e9a62b85,4ec87dbf,394cd681,501184c0,b841656b,def0fa3)\n,S(3dec302f,cad72c11,54c6b588,ad7f77b2,9368557e,77a723ba,6dcf9357,82d9d917,6484365f,537611ff,49f157f8,6c4bbf07,25094f7f,d8db9a2c,b318ab4e,632cbfce)\n,S(a847783e,46ccf334,d7b15f1e,d3aa7dd8,c5b3ef4a,7ced2501,c26d1dd9,4358adbd,7c56f1f3,323a500a,a3496729,ace84a91,6bc6dddf,90435a09,8ca51f6f,5fe5fa99)\n,S(dac6ee37,3c655763,b01c5012,fe01518,c3ac1b52,543cfd7e,9ca24d6f,42e4bcfd,6b861af2,f2a82f0,d4c458f2,2d264d82,54f16f46,87e31cce,7199f061,bdbc941f)\n,S(27dc7253,90de6a8f,6cd9918a,e3b2f33a,8ca4307d,ca4acf6b,f9c5d0ad,f01b4dd,2a0798f6,7e583426,cca8ab26,e6742692,ee790f21,cb3560af,271b0a09,eb9f8b31)\n,S(1c6a5d3d,10983673,5e27dd2e,ff04adfc,7bae277a,870eb4c6,d6379467,de2dea5b,92658db0,8b6b85d8,5c20ad21,f3ad33c3,8de02319,4bc54d0e,4d758093,b4e8695a)\n,S(cab35e2c,b731cb9a,402f77ee,44565fa,d6623951,be9deb97,88da09cd,d5abb56e,37bdbec3,638594e2,59018bb,9145c4e7,dfb55b13,bda50c6a,c33e975e,6c5d96a6)\n,S(97e4cfd,9e1ec85e,cc49cb90,ada87b99,bcaf8160,9b04417a,70fa66e9,78bf54b6,7423ded2,bc56ddb8,11db577d,f1863fe7,dc758999,55989e4a,d344ed4d,5faa9ecf)\n,S(f2a9b193,6f63e9f1,8333cc3b,745fb2ab,7b3749a6,c59e7d6c,42e387b1,1e9d86fe,3c6b6bf9,1c2c4a,859538c9,db95a2c7,abbf8c37,b6e172b3,cc2be8f0,f18b5484)\n,S(49024a25,11bdedd9,6c84aeb0,707b5b70,f027afb5,8b4053e5,234a9312,771160c0,22ab8282,914e69ad,8d573e7b,841e9eec,2fdfb939,c76ff330,fb2fa5b4,14a4523d)\n,S(781c9886,4bf29760,c44e1f98,9a5266e0,4d25c6c5,f941e2b5,cf92b958,99ecaebb,994a771d,eac92f91,58ecbeae,6227d2b0,4c09df72,c5ee4439,509f0b2f,6e361509)\n,S(8f7e703a,ae008b13,590ccda8,b70d2cfc,4c98480e,2a5032bd,dbd5edeb,aefb7f8b,54226771,863fa87f,ec101303,9238da1c,74f9f446,26b50f07,f35d6b59,bb7ff81c)\n,S(ecb2e955,ed796695,3eb1ee21,564125e6,e860935b,20fb99da,91556cd4,e5e57bbc,75103469,9b958e18,638f4e00,654d6eae,f5631483,4c890ebb,7e2d93e6,9f4d8bf7)\n,S(971cd7f2,9ce90bff,4c46eef1,9df001f7,afa6af09,b553e8c7,792f4ae4,d3f82cf9,d4180c19,7a579e31,f27874df,f29cd17,98e5740a,36380349,6f7dd211,59bda50c)\n,S(7ad3b286,3952489d,42cc8394,413545bd,90fc63d9,8558323c,feb8e7e2,50ececf5,5c566bdb,5efc3683,2b22aac3,c0b81f6f,bf656c11,5514ac9d,8a223071,168f139d)\n,S(c905b52c,ad0e0281,a90eead3,3939c836,ebd591b9,26787a4,2983804d,e658aae8,df2a40ca,f95aa72a,181f3424,98024f72,f1b9e46a,3816cf3f,ba5ac699,5b996fc1)\n,S(e2517e6c,84856497,8ac94585,5c80bdf5,7c074b6e,fdb01cea,e93c17dc,ae4b3ff3,373ede93,2f369807,56afd100,e2f65794,69247690,61a597da,80d10fb6,bbadd3a8)\n,S(4d52a8e7,2f3cd95,2e25c8,175e82b2,726a8d95,b735c8d8,a0f1805b,6d94ad78,248b7174,61287611,8000136,dc92b841,de63ef18,a7c9ff71,a10a662,af76ff17)\n,S(58e5b42b,e614cca8,e131cbea,24b3debc,9d9390af,469df700,35a01957,3307ac,be4a397e,7809c9eb,2113246e,7812c403,4d42d8d0,c353d841,3001280f,db6bc220)\n,S(3f177142,a6e6eb65,ca5e1609,cc89df40,3e3c74c9,e5b291cc,49fb0d8f,eff86ecc,2a445bb0,b648487d,3b962bfe,dc74e4da,d1d98845,cea5f4c8,d2f0c4a8,2bc4c514)\n,S(3389c700,9b2b0c6d,a25a9610,4660a164,172a4c21,d0ddaada,c6902bd1,c9f04b38,413344db,77b83806,80647da0,d6086ea4,d1b8394a,a0047a9d,4c21c667,ade67a90)\n,S(ecf3f933,4b2b656e,24ea0b14,7528c490,c3a566ea,c4c51885,d3ee94f5,7370b218,3c07fab9,b6404f24,77e4605c,345d3a93,adf9a06b,649206a4,b369712f,7388af0)\n,S(a090739b,58310867,5e460a26,7e29f228,effc954a,137f358c,12be2fb5,8011b2bf,a3563d1b,7f242a1f,7ff5e505,280c3898,13251c4a,d9392d82,d3b12a07,e22271f3)\n,S(a251cd29,357e5300,5a8600e5,bb9d56f4,c8251f6b,46b4d99d,5dca7b2a,31f8201f,51764fe4,596059a3,b1eb06de,56c6e21b,d58e7194,8e1b6e65,51e53333,5f9721b9)\n,S(1f9aafb3,eb39814d,7173b85e,b027ad41,be210c3e,e5c857d3,56288b3f,3b05c5a6,d34526cd,16e7d3fb,76ecdfc8,c11b1bc6,38762bda,b03c1c07,94565cbc,df41febb)\n,S(dbd4b724,1fa4769b,db161472,1179fdf2,6df4372c,d3b0c4d5,1e37fce5,317e7e42,7e9bca3b,bda0e211,5f2e69cb,8fcfc333,fc1b8b85,70123816,802b22c4,9634219a)\n,S(9ce40b75,7a257205,fdf51545,7d6f9691,7e54a5dd,32b76230,4ec50c2d,3b89b06b,9b128748,851dbe81,255f60f8,1e5e9de4,6b20a545,afec40f0,38beb9a3,f7402e88)\n,S(12f6c70f,46efbb73,2150f775,5f597fd9,2a527a33,7039def6,5533cfb,18df3406,7d9f18a2,4988ea,a41a1364,2a1555c2,bc9bfce0,dd62ba87,fa628b84,850e92b5)\n,S(3132e530,9b169a3b,7401651a,351f7fce,43471b19,7ded3d1d,cb0b768c,5620fc5d,3e377f54,92c99dab,84f4e45a,7cba38e,9b589fa7,77dfb334,849310ce,53294287)\n,S(87160125,8a8a69ed,d52986a9,25a54ed9,51f561cb,8ee9e1ca,6c58b826,495b9977,c5484596,8ebfc8c9,5f317681,78379b88,2e9c2548,b3c579eb,f6da5186,5d51f36d)\n,S(82674b33,ef500391,2dfd5f2c,26722df8,19fd265b,3b6e4cbe,239bea50,298653f6,bb6d0457,2adf23db,86b07019,f2f59fa7,ebb4fd2a,ac36ff16,6b22e92c,3952245)\n,S(2efc1011,28432933,56af99ba,ea2628de,a518fe02,c5b0eddb,3688c8ea,39d4b07f,d54a087e,bef0923b,6244b21b,f260eccf,e7d590b5,cf98be51,856347da,ea48779a)\n,S(f2164194,5de0542c,de90f1c,4be955cd,98f6bb14,ff30ab44,92691985,882fad46,a87f6725,e89afd3d,6f24db13,39fafd45,5f578c9a,104f6509,c83d0694,ef795dda)\n,S(72d2c60c,6f9bf0e5,5de82932,88c298b1,4d851deb,6ba7421e,ad22f3d4,2b47ee88,29626eaa,712e6d76,d85b9f7a,7a17461e,132c9bb7,a2943379,c5eee30b,1ffeb1d8)\n,S(9bc6dede,ebdbd843,a5534fc4,71212480,ecfba4d,96acfbf7,25e980bb,8a509773,24ef23cf,e1580173,797ffe5e,baff2fc4,3cbd3161,e87e32bf,463333db,5ca904ef)\n,S(20ea6c3f,51565fc2,bd5b8eb8,1ccd20fc,f3aafee0,9ccc9de0,733df6ed,8caa9c81,78328fb1,ff260b0f,cea69e1b,77b35679,d6663513,8f136c59,127ec2c7,d9668dd4)\n,S(aaa2ee28,a4724d91,f37044a1,3b264ea6,9dd9123a,b3b7b300,999564d1,73057339,250b6164,2ade568b,8a56ae82,4488e740,b9a65f7e,a2b95f3b,4b11b6a3,1b49fddd)\n,S(a1e54535,4a8976a9,33c04366,f0361775,824383e5,2c3aff3a,357788b,38014ab1,a6a306b9,b0a7d3c3,d6530094,9efb038f,a0a2cd1d,79bd495a,487a95f6,ef2b7a7)\n,S(f2b0c76,18fc3ca9,f9ec5d65,2f39b6e0,158598b3,cb90b20a,53fdaf97,ac58f7d7,1d63cacc,7e8e46ab,47ce7e4a,e5a3336b,8d3d9bf0,f05bc428,f6f769fc,7ec6cd15)\n,S(91843b8a,90a43571,4d7500de,fff102a2,fdb53914,2bab12bd,d3f23576,75a9d62e,3cc6365c,7dc3813a,d51cb2a3,d86491c2,c4e38f2b,10a33181,374bb0c7,ac90237e)\n,S(f73b2226,8122a4e1,a440f891,14fd8d72,19cad2c2,9798cd0e,3631eeaf,6b125a92,bc14e84f,ed149aa8,ac261f96,6b192168,26f5a2b7,cfb997c8,3f293101,e758aae5)\n,S(e87cfcb7,1f2b1c9e,8506b0e5,c56b14a6,52201397,1bb4c53c,855f1de,45644ff3,7e3399af,b4a9f70e,63907a29,c02e4d58,b2e76517,e4f2f2cf,a3d2fdff,808d5b08)\n,S(b9657f0a,6de5cebe,47151293,de1fc3fa,b2745a18,bd5c4b8c,62282f26,84404f21,89590e9f,a787f41f,79a0b8b7,682bc353,1ad60107,771233d9,ec303830,e8e8dad4)\n,S(b62d02b9,de395843,eb69e8bb,4d974590,7c8d3b26,cd4b13a5,6b4a0e27,44f449d5,173cb5ee,60d3999c,7e795607,bdadf8b9,acf9282a,d7a68ee5,6a204eff,ce5fe751)\n,S(b6998e3c,31e9cca5,251a9d89,1aeb5384,fa86c92,74a0f027,8f2dc67,34b5f8fe,7658a71a,fe032a5b,ccb80a1b,1516faf1,5a3e8638,6f74b2b9,b6d17cea,61c3ac5a)\n,S(864d4c66,4db88b56,6471852b,eacce0b3,52b55404,46444cbc,afad4f17,204a0170,7001969a,fb35a3ad,fc553e00,b6faeb21,c8fb1af6,135e86c7,f7e91397,a826346a)\n,S(22a0ec9d,ecf7a2d4,6f550ff1,5a8f1c8f,6efeff9d,3ff65d47,97512980,216c025e,9d60fca8,97662f4e,947c962b,48522cda,c7ba956c,5a23c3b9,67f46073,af0980cd)\n,S(f1be1f63,769f74f2,947eb25a,194171a3,9f9096af,cd454ad3,35809b17,d7e69fb4,b78b3a16,b734c528,c1911d95,895bf873,fcab1440,b62211c,25aa247c,161af243)\n,S(7b196c23,1a7650a5,9db8faa7,39b7ffea,488b3623,a0bd7a2c,48b51c97,f5726c76,56e84642,2c430157,bfab8821,9112124d,6bb968e9,3ddd6b77,7ee08228,9a7e1241)\n,S(6ad31b05,5a1f1a65,f4e554eb,31e3e048,8570032f,8af2891f,4436c640,9420849a,edeafdae,d10bf173,5de8ffe8,41871909,79f6377b,4cb566f6,3386534d,89bde755)\n,S(fb0f3da3,a44c0921,85d90b80,1e7f5aad,6c85d5d0,b9cc4575,ad95ab34,4fa6aa7f,7857f22d,6f9356b7,96020384,919e26de,b9abd707,4dc6db0d,768f630d,b3589b18)\n,S(c39b4ddb,edb892fb,2394e875,7c7815e2,f487f81b,45c60749,1c314350,c929d96,530f0c07,68e66dde,e10f0d95,bd66c07c,ba10f165,dade7bb3,77f8b7ad,ac4a673f)\n,S(c50b3ae6,d14b11b9,a74dffeb,a5bfb9cb,73652cdf,a2bee6dd,6cc3c912,c312e537,85ac82f8,e3aad88f,9af29cb7,ba66f8a5,8c340d03,a1f32654,2071ba6e,99705377)\n,S(a763e636,4e4959d8,9d3047,bff6fbb1,912d99f0,c092fe62,947d4385,2427ec02,bd799a82,a3cea8e1,db94946d,c7d32236,13b008b,da8eca4,921c985c,c022622f)\n,S(2abdc992,b2ba838,1da0c2c6,2b35d3c4,ec1a1e39,516b6afe,81fdc7c9,cf3715cd,8115c826,d214c36,36a8fcca,37e89dcf,4be7f34a,2cce7357,3a6c42ea,9e084a66)\n,S(2cb83bfa,ef83ab3e,53216500,944b2db0,e8cdb6a2,caad1eec,c9e14c33,a16a07ec,5b1b1199,6e84c17c,13c070a7,99dc0975,3d374018,6f9ce89a,bced7539,7121ec7)\n,S(2687de95,b368b07a,7808ebf,e45fde24,d66fdc81,a02744cb,3e96e847,f0a3ca41,5728b8fa,aec73963,236ca282,d1a8946a,b2a26f28,a239590f,9d38bdda,d05a846b)\n,S(b143029e,7f32bd1b,a381fe82,8da79713,b53550e,f3cf867,4ef1e952,d4dff9d,a44a622f,ff5fb466,83b69803,c6ea5c16,8d86c673,3ed94058,81aff0a,2a8edfd2)\n,S(4c54d53f,cefac583,6fcf3b87,7202afc4,ccd68695,567c7fe7,6068546f,aa9070d,7f42728d,78193fd5,946f3787,6ab124f9,b1045ae7,45df58bc,cab6f59f,a27c6f18)\n,S(6b625111,556e3ff5,db9cd8f3,7f610b3d,718220b,e459f546,47314b04,b2ba9d6e,b3ae66ca,fc58bb7,5a057767,8bf806b2,c204b90a,fd114ae8,4ed51378,53b30a78)\n,S(b3fb12d6,e16e4279,5fcdc1ee,23d42f9c,198debdd,56217af,5b76989a,271b473f,d38adb77,4ce1d0b5,e41b65c,7c973a27,10c5621f,594e6f70,d235f5e,a4a89386)\n,S(9c7c908,6976b590,ba9c80a5,fe12c5f5,ce6bbdb3,5a4058a,3cc59899,82073ae4,399687af,4d3e221f,6168ded6,31644c35,e41606e,94583429,34693221,9322da67)\n,S(28cdf6d0,f0374a35,4dd169a9,1c3beef,fc88dea0,4922f841,401ffe91,8bfbddb2,2b8f1d3a,6f001d60,95aab0d9,d6248cef,cf3b97a4,850d1a43,ad2bbb3e,d2ea4518)\n,S(1974b196,a25b6446,2ceda38d,d99662b9,7dcd0d7d,15299c00,9b8d14b7,f139e7af,c685622d,96fd6379,6bfc3f2b,6eacd54f,83281ef3,50d2fed0,2507a157,9fcdb74d)\n,S(3beafb9f,4cfa3570,3d3346f1,afa48acc,25909889,a60b76c0,6e7774c2,acfe4367,6c8c09ea,7233ce1f,cacc82fc,9c1dd357,51021b92,fb86d6ca,3749bd58,6dfa369f)\n,S(b5cf157c,4586fdda,16a111c3,9a500daf,b1aefb07,e32f78ac,a23664b,cef3be73,1d273f45,58e7c2ed,6f46ed71,e297dac3,59489934,b10afdc2,cf0f4270,ad6fd53e)\n,S(9bd52baf,cde37895,9439aba4,b1fd4080,84441657,c2b1b36,c45446a6,7b661d6c,87f63761,6dba07e5,96d71dba,f86df28d,c506a123,c6f082ff,47886a93,da068ebc)\n,S(20cfa2f5,b391d687,b89cad8a,a4c5ac8d,8624d4c1,ebc94cd5,d47999fd,3278febc,1bd4a896,4641d8cc,f6926323,8b1be2c0,49141736,ee780ba,d2110f27,a674239f)\n,S(e54db30e,e18cff40,56473478,2c61d437,c79adc23,51739315,ba845adf,c7e8b6cc,ef631e42,9529a407,cb3f832f,6aee6fb,a26b125c,fd28f43,b9f07e4e,ad8b0632)\n,S(588f13bc,3dd3b927,7508ca9a,82ffe280,fabd5cb3,1413e848,2a2aa4d1,78a290b0,95c81a4a,44e6af9,5d8f6fbc,ba3884d6,d6a54057,1835184e,50f5db88,d08517b6)\n,S(1927e8dc,ddc7ed4e,62a32a82,bd4a0977,fe24a571,10b1acf3,78826484,de7e757c,e0a9674f,76122a18,dc6004a7,ebd1da86,f98e896,5585518f,bc5f91d0,4699719b)\n,S(7b82c663,aa2201cd,71dd7c2f,b8303264,8639f9a7,9de52706,e2deb38b,85dfcc36,90dd6e59,e98c611f,a7162fdf,8fc503ce,71b0ad1,dd150698,e4c21916,d5ded962)\n,S(a15fa4f5,97086036,9e9c3946,5f16a458,c7b36ec6,6ad384db,7803ce19,555a2bbf,bd406283,43e40d18,25a02557,6bbf752,35e34400,dfabf022,6cf2bd3d,8fe80901)\n,S(2b6199ea,7c42b7b4,2230da51,a895ba86,83950dd9,d4d5ecef,80512976,a0df55af,26ecea05,16faa497,3fb9865,16415ebd,93ce4a6b,e4b5cf11,3507d3e6,6a70b692)\n,S(35ad2f4b,b5ba61de,364e8198,f5404ecd,4cdbf26d,7072dbed,d9892804,364b43f4,5481372f,7d1af5e,9e60cb02,ae8512a,6bcee9c,eab1344c,6ac5898b,aeca2e94)\n,S(f4eeca4e,2ab38839,8a459df5,b94cf98c,68017522,353aaa98,bc606bf7,5008c6a3,e016b7f9,aba6e910,6a647662,1e7a5b7,12ab97f6,498f451c,21902e0b,9b6c2c2)\n,S(6c488180,aeb6c444,78ef24de,21a47431,b2e26d9c,bbf059a5,84631829,a75ec053,ccf084c9,38491cfb,8cf0349f,fe80a315,71bbe0cd,dad9a7d,a4434cbc,9160baae)\n,S(a52e5bcd,2214d405,57360828,10ebe384,a94f79a6,579a8966,6f1ef7cb,bc80f4e,c28bb594,e15c47df,9bf4ef2,2666fe4b,d916dd9b,e62b60d3,49c2ba11,506fb79d)\n,S(c55414db,3374563e,5c79d9b1,1103ad01,7b7c04b2,3afb5431,8c469cb,49ea9754,f54a4335,7bbaf088,4d18bd70,6f3d69a2,44f4d527,a6dccf5e,52f468e3,752a998a)\n,S(b7771609,335ac0ee,1e82539,3fd3cfad,5cb4b06c,98a05bb9,95966e4b,6fc1f24e,f305d878,33f95e99,ff6a3b4a,2b77ffa2,4cddd5af,d253ebcd,d60abb1,438e0745)\n,S(da220e1c,c66af350,10736e75,483e2573,91f6d2e1,d355d05b,8471cbcd,4b64832d,bd028d5,5db1c54b,86f6f123,bbabe6b0,f3e52e02,ca48d92d,464311a,aaad3cea)\n,S(1a680b36,991edb40,ada892dc,6c102b0b,186bce17,280f9850,ca50eae4,6951ac7a,f03d7958,b0789cc1,43d61fc5,11b70f9f,1ef17239,dd6a057f,ca394f62,225ed9f6)\n,S(af8ca10d,b1975668,b8071ea9,5d474b5e,424d461a,e98b5ab7,bc240cc6,44da9c57,e74ea4ca,59f926fd,89bb2bac,61790ee0,50d746af,5e30019c,5b53130b,9cb9786)\n,S(e6014570,2ad63dd0,5d98c576,c3d5158d,162857f,7b83045e,d91865ac,bb347922,52931836,4a9fe323,40f13c0e,15c955fe,f718ec64,4b45b141,33fa2edb,c65baa18)\n,S(56eedaf1,fec96ae,c2f1e051,9a1c4a76,dc0ccd67,1781cfbf,7804d215,626dd5de,adb8a791,b73aebc9,c6406e2f,83e611b6,286761d1,a6c759c1,de85658c,a4788923)\n,S(43c5272d,a3dc8c2f,edb0f5bc,a5bd5f40,fea4bd48,9f367675,cb578690,636fe0ad,52c62fe5,1cc2dbbc,57de501b,839cad13,b94c9e12,12b1cf30,d8463605,f7871c43)\n,S(66e76528,7cd0ebb1,9d9e0d76,aaab4230,1aa87367,c3a3f96a,101c6125,84f816da,39a4d3ef,8d263217,3a3a8c3e,d9c1b460,e240cdc6,9c9cbaf9,89535604,a2f28edf)\n,S(1a274502,31f1b5c4,9df7564b,f311a7bc,d5123e75,2471c243,65c0e142,d3b292d4,5eb550b4,ffcb5e1e,c695f22c,dafada32,1e967ac3,7e1fc20b,e0e695c4,324c1131)\n,S(36f1c3b2,ab6a692b,5d3b1e10,f53b43c7,7d5c4e76,90e089dd,9e70eac2,773c3620,5553cea3,8e56a7dc,384458b,84c419cf,2d493246,1f75f16f,2d1a547a,6fdf0289)\n,S(1ff0f8e7,8318fcb0,2b23a1d3,61015c67,6b1a446e,784bbdcb,c088b241,3da40369,39db7b2c,6923a1a2,379b58ee,cb91ad5,554ed5c5,60d5ddba,225c0074,e9fa4415)\n,S(c5d7b7f5,d6dddac5,2a2021e8,437f771c,216bfb43,24c57ba2,e8b43a0b,dfd17e8a,78fc37a3,9586cdd2,f1145cd6,f9beda83,43e8ee5c,854c256d,419fdb4,1c9d2bc0)\n,S(4af5a3c8,cf107e16,fdf3522c,47fff7c7,b2fcff70,c6c8b36b,7d66a3e0,4b107250,b1b6e5cf,de869937,45ae8632,c5e2860c,76a5f481,ac24ac86,ad135136,e9ff4e04)\n,S(37b59d45,86fff48f,67ff3ea3,f31f721c,3daee8f1,a2ff960e,3f77b793,3e35b50,73a7d048,2c93b9eb,4c2f6359,3ce61497,ed455970,9b2ad7af,2d0f834d,6f070d98)\n,S(6e9dd180,d5b7c41c,5f529439,e46534ae,b80bd802,b8b12e0c,ccf532ad,a99e663d,e981b043,e936da7f,ecef09e7,cd118646,5bdeaa64,45a00a59,1139eb9e,5628004e)\n,S(fde9062a,9f7e13dd,39117543,be4aa5a8,fa10b810,a2285661,720b4586,68acc236,fa39cd20,a5eee1cf,3727df99,32c5289a,96b1409a,5721b9bf,1ad8f42,ee35069b)\n,S(d7ef4012,ecc74538,16c392d0,4d1ffdac,76a30992,4c1489e5,159149bd,84847835,b2f5e699,9883a21b,edda98cc,ccc1ee2f,258fe291,c508cee7,39619659,e18c9720)\n,S(8355ef2c,f0e37956,56b77adb,5f700f75,47e2c14a,b5f6a0ef,8716c99b,a919612d,d75dc6c2,fdf0260c,6682b16b,42d022f2,f03bdd1b,1e6ef520,da295465,a1988eee)\n,S(cd49e795,63655bfc,87bbba18,b72a0c50,52568a26,53bc0543,3661f3e2,2ff159ba,ab28dd46,696b7414,1365316a,c8cd8dc3,2c2f5e01,6ae34302,d103cac7,4e37d25c)\n,S(8f93b20f,28f89a46,1afdf08d,7550964a,dfa8df2e,ba2c00e9,9d351b84,2d6e0b78,92ffb09,812b6970,7746493c,c833bdde,6849a2b6,ee7778b8,2b41adcd,62b5620e)\n,S(a7b3fa74,4621cc50,f6719d0d,5fd3f2d9,6acd3163,4dad1114,3ece3db5,d114ab2,948a3716,9394841d,68e5b64d,2f86798b,d78c8530,bb8d4d61,f82b5f51,ed0f56c6)\n,S(e16b540,d62e3237,361ba514,a11f2ccd,ff72ae57,b37e58c5,d4c3c49d,2cc8fb7a,67efad5f,f02c36ac,a0c0ab0f,ee5e5135,fa7bb3c4,51472d37,abd0711c,6618a7ff)\n,S(589645ff,5c3dc06,9d2ff542,5278a51c,c4fff14c,3de96036,b773497f,8940d240,1ea7ba1a,95f65259,c30ce21c,a95b3b95,83d11b10,3c8e633f,6dacbd2a,fbe44116)\n,S(d551239e,3448ccc8,9a83b8dc,41396df7,d3db0c3d,f79490be,9d44636e,f5f0d0d6,779118ae,a8db8a05,f2231b5d,923e9d97,5e69a462,5c2ad551,5a8e7777,b1b25899)\n,S(c45a22f2,9f611893,d8577d7c,9c1cd46d,82f41b48,a7c18628,ddb609e5,abc434f7,515624f8,5776268b,5a5c74fd,8d87f8e3,3e47648e,2eb8c2e8,27e9b57f,7fee5a1e)\n,S(fb8e4546,639d9571,90f2840a,2f72ba12,a72063fd,85f160e7,18477d01,26132b85,3cead630,f8bf75c9,31d19cd9,6f4f3718,1efc4854,b937ac31,c3e0dc6e,363db575)\n,S(ec51e7e1,6cbc70cf,1f053860,fd21e120,98b652f8,df9eb31c,74eb787e,87e5ca5d,bd5afa95,6996b7b,357b475,fa7a326c,d6c2505d,1ebf6fa6,feaa27c2,c2685867)\n,S(52c497f6,f8b9189d,30fc42cd,9c2a44d4,2d4f70ad,815ccf05,4f50571b,2570bea5,35f54d97,a45e2712,b0f9a720,38adbb27,a31cfefe,c065ba9f,883d36c5,c070e9fa)\n,S(2fd360f,1680b7b6,5f49f64d,5a648e8c,97e4a756,fe88e107,91fce9b6,295cfc85,7a88eccf,c4d82e86,72780c6,e1c34bb7,51a6029e,dea0cb77,3d29a85,b0689f5)\n,S(7b328546,25307c85,f9ad0c31,ce2c31dc,e746931a,57ec42ac,16231165,74f63d78,6862d363,4360e404,9693dc03,772f4840,4a30f167,993c8f1b,56244c0b,af6e29ec)\n,S(af76b473,4cf5f641,25124792,fb558b97,df60d67e,41c2b104,ba27ff35,e3be96c9,21e6d4c6,c1e0d3a0,69520227,c4cf2ef2,8204d85e,26f4ebc4,5d6f81cf,10defdb2)\n,S(5b1237e0,54c98238,df2ccb28,a5b42b64,cabac24d,1126c8ea,5520ed69,ac449521,de7ac1bd,4994cce1,8800ac0d,5499c33d,bdde3096,1a0c9028,58de0325,b91ffc36)\n,S(b81bcaa2,25743a49,36fec95e,13c8c20f,f818ee5a,6bda3850,870492bb,b3380d5b,6ea959d5,483ea6f3,5b3a4a5c,1987673,a8196c98,d8efe8d0,3aed5884,dcb391ce)\n,S(5f6ca7cd,1054051d,3d8a2a83,73be30f3,516b305c,feffe073,ea2773fd,77eeab3c,89287d8,22775f53,61c931ab,bbc43d38,380488fe,5e35124c,2daa5441,3b36c126)\n,S(ffb3a36a,8345f9ca,30369f21,f04dc9f9,d5f0282c,d0e1d68b,f5ca1cc0,c05ca91e,21ddcc3e,f5a94fd,8046295f,c0629b61,b1e8fea9,364fe659,d298e0b1,be5a6c17)\n,S(51902e3d,8801dff4,e6bfe7e8,8f600d75,42eef0f6,e186df29,3a8c691c,d57b36f6,48a27fbb,cf9dd38,a1ab966b,f635fbeb,35bc3fcc,52f0cae0,d9a3ad5b,2654eaf1)\n,S(f1a68a75,8f0f8937,e14a48d7,15c4cda0,679d9b9,12682182,493cd9df,c3ccb345,db85d3bb,b8431e56,d21e8c1f,4eb1c750,225bb222,38da0bc0,30e5da0b,d4f4a985)\n,S(81d88ea8,4969d53e,fd0aaaf4,248a3558,f37059da,a4b3d32,da538bf,ca1a4d15,840fe961,11756d96,5c8cea1,32067ccf,31ac66bf,e1086f16,afccdbed,f16a2d33)\n,S(b5830ab6,2e236cbe,345044f3,af940029,39b00b52,e779ce10,b02c446c,84163e95,d8720333,b210a391,499f38e,134a0989,254faef5,126750c0,ec2a5850,e1d4a821)\n,S(b50caed0,a4e9e41f,f03d16ee,1848d92d,d4e6b76e,4e2332f3,793e8650,20bc4d11,39195ffa,13745502,eed8801c,40f36e2b,d9b636bd,11d62388,8ebab8a6,41d3ab54)\n,S(6190402a,3750824a,149945fa,df942c0b,3622acc,b2ee1304,f260593,8de5c333,290f4d4a,73a1c72d,c5ff4228,41e2949d,966da112,5278d082,ab779e8e,d4cb179d)\n,S(8966488f,4e991a1e,e34552be,c6246b2d,b9486442,47fda545,f8083b7a,b0435060,7daa3ab7,87283446,a7900c83,b726b849,f7dad684,6326148a,aeeb6233,738c6c4f)\n,S(edfa388c,fd246c1c,6bb7bd9e,6d9d335f,9cbd7018,ff2a750b,4ba976d9,dd922b5,c74e1113,f10e6954,6848e4f4,11a5afe4,bbf7dfd5,d252e66,5789627b,b81ce714)\n,S(304740e5,1b99d9ae,97de2a55,8dc1abc8,60bb8b5d,a52f6208,af8e28f8,89904951,8ab409b2,3606089e,4a111377,c8a94e5e,75ecf098,4f62aa63,faaf7e18,f93a37d0)\n,S(d4ca8aa5,e31028a9,37d77295,96b011aa,c26f58cf,3a7ff671,99aa7f30,3e00bc30,5ecc09b3,bcd9afcd,309280d2,617cbfb7,e4a9350,b4ef79ee,1e46a8c9,56d46fb1)\n,S(4110ec3b,ae03a061,59910aac,4f2e4bd7,77d5e055,4eb6920d,aac4b835,2d7cfb4b,c1237e1b,d6f1cf1b,6fb0f248,9e3712ae,5557e4b2,f72ea7a2,2c482e6c,d84eba92)\n,S(f7c55f97,3e9df72c,c9da8e04,b1926688,1d53f810,fef5e664,99b81f44,e4f9800,4b45e93f,e02c3993,95238c80,b65533d5,ebd01cbf,1b3dbf44,4d550cbc,4652fa89)\n,S(2de3290f,56fbee3e,15def5a0,5d65436b,9d722e3b,a435f269,a5ee0231,857cbd29,f80d2ac2,356ac72,f3106b47,5cbf3701,bf924e3,48e93c9b,f3327b55,bc203828)\n,S(c8e3d2b8,21922146,1862d5d3,319c2abc,7dfd568c,59df4367,eb975a95,6e22fda8,d6ec1b9c,e758a8c6,47e718a3,ee8ae232,c416d763,d2887e19,54ae4c30,30404f20)\n,S(50c1a147,c117d907,fc831f72,9be19b3e,e93733e3,aa3bf402,e64760e2,edc82065,acebcfda,80706b53,116e4cc8,cdede6d,5aa1b7ec,62ffc942,572f729d,47396289)\n,S(7bab8930,55114c0b,e4f7637d,ad165491,c21d6970,c8036375,1387012a,7b785528,6e31589e,2ecb13e,b7bca5ee,39e3bca,fd2e5645,6574a642,131d6178,901c0d97)\n,S(dc94ff4,44a12ca9,5180904e,58802ed3,d1be43d9,8396360,e9e932e5,622d257f,ee2a426e,4da3dbf9,8a6d5ad7,9a5437ce,6fdbede1,25e836fa,697685b5,989c86e2)\n,S(efb2b411,e66f8e8e,186b0fd0,c572381b,e9edc68a,903e95f3,759a11b6,b6a9dc40,4a7af79c,a1383f20,55bd080b,f410f554,24a21ae5,7b57b63c,bea36486,6c30dbd1)\n,S(2f37ff22,26a0c4b8,77a36da6,7a423f59,497a26ca,8066a651,c13573c4,4954599f,f9d1c91,2b74f663,56798637,9de41a46,683a7cb7,61ac6e3a,86d65094,d1e07a8e)\n,S(63aa61b2,e24fa178,95688d95,442844cd,7e68edcd,98eb3496,ea071c4,5b46abd,9423daf8,b6c241f8,785b76ab,a40803b0,97da461d,cf6579d4,4308c9a5,e63ac4e5)\n,S(58618e22,93c52375,4db8187,34e355ae,27b73f7c,4469d7d9,115623f4,e8e20900,8531be34,22616853,c2c095aa,138819b0,bccd7c51,1380c64c,65ba2500,ae18794f)\n,S(61418bdd,2619e7c8,f32c8cc5,34097cc7,4a9a0c57,a38db50b,ad828a60,f658fc0b,acec4e21,774d283b,db9a8a11,115d20be,20cbfcd8,2d67b10a,3d57dba7,74537c48)\n,S(79ed2dcc,dd4bd25,67dad04a,b32c9273,39a9c592,95a69b09,be7965a8,c779b2fd,64860dc5,d17e409b,4feef8ea,8a7d7350,3eec186,1fa15f8b,f5576a9a,39f65283)\n,S(a20434a4,c51da2a4,c7a6699,84f41ef4,67bd4de8,a628fbe1,385693ee,6b6d8a52,e2a00a0,d00aa33b,b49743ae,6f9c824,d2fe1f7a,f51f7720,cfb0d800,94279dd1)\n,S(d8c0bf47,530ff603,c140503e,84fdf6d1,ed908b98,cd27136d,ecb2c4ce,da9f8c61,19e02399,bd898b4c,b9987fb3,4262df35,9b32cca,430e7cd3,aea9d20f,530610aa)\n,S(29f06c46,a20b5387,aeb6e490,ef9a7bda,ce16fc2c,8e8eb202,b75973ea,8dc4f3c0,2220f678,daae0cd6,8514c091,a1dd7060,b21c2630,138b5e32,e0d57d79,b7b06d7c)\n,S(b18aa504,d9cda828,e67d4f55,ac51c961,e9603d0c,ff737c16,42f1c8b3,fe81aeb9,1f6d7e83,480a9290,789c016b,b62e6e8c,adb4b500,fac710a5,7969bff2,89578ba8)\n,S(e7591f42,e649f9f4,477c9cb,bc8559e1,f01eeec5,e9f3a0b4,8d9bf515,6d2044c,24c8777d,5e7c3f7b,2c6fe0e1,cd0e3845,45bef898,aff192ab,c4e719d8,ae466385)\n,S(65992fef,50a1983e,bca478b,419ae258,77ce7a52,339ecbe9,2394dba3,8ba72081,32491cbf,baa7f8a,9cf21a4e,57ffa85b,eaba7653,d46d9f95,b4e25212,7bf76781)\n,S(771b52ad,e47d035c,ddbb1012,bb89aa9e,b774e0bc,aded4998,86e1e358,ccabf9be,1a897dc8,420a076c,5a723f30,206db0bc,e9760b09,1f698952,1c4edc17,f2dcb202)\n,S(a7d5c532,bcaa8ed6,6846046f,d1570837,111281c0,795d3e50,16cd8108,5721d644,13ccc5ee,4bab0d34,2f740ae9,e538d50e,900aa30c,bfe99e54,c69cecc,f18f6aff)\n,S(fb504652,a55d01c8,b45ed7,6c71d,9067026b,27e9ceed,c38bf6fc,aee16d50,a150b6fa,f37b0c6e,ce4ebbef,22277b37,44933fd7,a135a25e,5ba8f7b6,1a6b7d0c)\n,S(6242a221,115863a3,73bea0fd,39974dea,3c33b794,68e04087,8ebd8bf3,ca09f1d,b806de29,fe9eddde,1556c09e,973fa20d,c4ff916a,3d22504e,19e33169,f6f903e2)\n,S(30382a2a,fefc7110,77af1a7a,d8a4a4bd,622635bb,73e50bab,c58116af,d1e8f3cd,d7ff3c80,9845a620,d53299ee,98cf3c6c,499ade93,84791af5,d6618866,3b6b74c7)\n,S(b69ab576,13d1527e,990d747a,bab1582c,af995b34,6b25ed1f,df3490c,5549f36c,cf896a0e,4878bc0b,ffa3a750,f83dd329,ade24fa3,76acdba6,dfdc294,768e3f41)\n,S(36f6c331,4071ed0d,b2be8f45,fe19be0f,9b37a675,a56679e8,bb49925,9339257c,d593ff7e,a32103e4,9cbf2995,21ad3da1,5b1b44f9,d6c95418,9c794291,b1e6769e)\n,S(fc312428,7a9ab1b8,3efce7f8,17f707ae,320dbe77,e5937cd1,513bbbbb,90ed9995,11bce5f0,91dd9ef8,42a46aee,6f3a1d,7cc23da7,381a5f24,4b5a2638,45b2bb0e)\n,S(b0de8720,58e1165f,ae1207ec,5ec0888,5f14bab9,35a2fe6b,1f7212f9,7b4913b4,5bab24ac,2589b8a8,c5e102,26a907ac,391289ed,23fba10,b2acdb74,a142b395)\n,S(699828ec,db84587e,31ad233d,c27ce5de,a8f4e03e,2c450706,d625e387,12c0af3d,db1d9e5b,9a74caf5,855aef9b,6b8d0c18,c98c27b8,ce0d8a67,c6bd8467,261f726b)\n,S(8d133509,d51edc48,97830f8b,3f8a6688,7a16834a,5ea31602,1649e219,cf899cac,9d188e67,2940f23a,39ac6ae4,fa532478,9c5df2d6,57f8b4e4,eca17e02,5560f08e)\n,S(9cd47f8c,a9d3ebaa,d94dab36,4412ac4,a74a4b18,bb516538,10da1df3,9efc7582,de1e5cb0,fd5e7a20,322636d1,883b1ce9,71bd0565,a0eb60fa,559b552b,34b42e1e)\n,S(1fef4107,648ca126,d5c4fe59,1f190f21,57274d0d,d9c57fdb,ffe2c348,35d36ddd,abf8fe20,87ca3feb,d8150e5e,c66c5d07,45731121,9b759430,4465bb14,55f992ab)\n,S(e372b12e,8d3fed92,9e01babb,1a6517c9,ecb54d3e,6d0524ec,42ce57f8,5351d32f,43e910a,32447627,e2d9d5ef,53cb9c0,ab60333c,b07e72d1,c2c6644c,83e7d8a2)\n,S(37c346cd,ae9d76e5,7ba2f30f,d05c33fa,3e6058af,642fb1c1,1810b4a0,b97e2dd5,9939c619,e1e49ec2,bf716714,1c23e135,157c7e4e,949e4fcc,b7dac7b9,7d4932d0)\n,S(14e337ac,39f0c1d,98333716,a6e596eb,ad0d0688,b815c7a0,c182b546,88e5c3bf,fe45e34e,bfb94cff,a72b6312,a422562c,8ba782e2,16d5ee31,6425651e,e67d3d22)\n,S(25517b3f,79da61ae,dd50cd1b,69b1ee36,fce0a44b,feb572e2,e6eb4aef,d751146d,7d2a017d,b9089d13,9a072803,dba874f0,f169ea36,95786e13,7fcd36d8,8b28a213)\n,S(7d5957a6,92fd532,b9991383,cae895f2,8554e6c7,83ae3bcf,e72e3678,3475cb46,fa4b9b07,2bc725f8,e35b01b9,590ec1d8,f205f6c1,3203e91d,d9d39954,922d7f65)\n,S(77eaf892,c4f9e0d,f63e33a5,1c088e0b,323ddff5,6f854475,b143b458,3e0e2f81,93d0f67d,51abf50,ea260593,96effe6,7f985caa,a9d68250,224e7193,414105f5)\n,S(812c11a8,2851f474,e5a0a175,fb527539,7f1c73e7,6a766cd8,7147c9c4,4c970ec4,f9e22a19,a35179de,30379c37,a616d226,666311d9,4ad62b6d,59fcc579,cd024af8)\n,S(b633f071,57c5a0a3,7ff5f626,17de24dc,14b3bcd8,4eb43385,e5a59be5,1c371fab,93e70e48,68ab5a3b,e29dab87,8a50e2c3,a09edb5,bf5b47d9,a09ccf59,53b67673)\n,S(5e78caf1,9a2031a2,d92e1ba2,1f43f91b,10a98672,5d23ef95,1bdc1f83,cbb16343,b438317e,9446b88e,92206d81,883d5f3f,6497ec33,d144cfc,3a7dba41,db53cbc1)\n,S(dd082ebf,88d49fed,50b76df,8e64d3a4,a1d4bbb4,fcdee50,c3ad6d0d,a91e4ec3,9efe99d2,f15d46bd,26d67bc5,ccc122ed,bf5034d9,28bcc946,e4714784,5edb6244)\n,S(1ba1e135,62c06b5,63db5c49,7ed46ee5,73399a56,15fbfb1,4e080815,874e6a2e,f298d5df,43111fb,2f050cfe,2a06b3,c9a1fa02,d409dbe8,a225a3e,bec2d8be)\n,S(49477847,a590a536,e7370341,5380459,843da9c1,78a1d176,f2f0133d,6ca214f3,3d1b8f64,a1d94169,2baeef3,86b4740c,4eaa84a9,15e4d03,2bd7bfd9,f5d5bad7)\n,S(c4336d6a,4fbc288a,2c69fcc9,691fc8e0,e277fb98,e34b7a66,bf29d2d4,32c1339d,64ca0adc,72f0ff2a,f150f01,ea243a51,e91da8e7,480e0553,c7bb268a,22fbd383)\n,S(a510cb67,9970c117,49e4e9d9,acdb97c6,d8712ca2,7961ca45,ddc9669d,9e02207,afa065b1,46b75ee2,ff7ada4f,ac7b863c,f4937cfd,15ca2ff9,c0901c7d,faac88b7)\n,S(7cd63347,59eec80b,666237b2,abdd6c6f,e5e24a60,9305165,b5bb1a04,2898cc7d,abf7dab,f9e12893,a8040b13,afe16524,1d749660,93cf2da,157e2a78,e89cc758)\n,S(e0786f8d,6f339bdc,9ff47416,4070bc08,c864d0d2,6d507762,19c2ee87,61cb7959,892cfd2e,62f4c352,b296a508,455a1dee,8dcec943,f5109add,9d38437e,87ec58c9)\n,S(d81f740b,123cfd5,9c5ceb73,47668148,995ca21c,a3ca1b8c,b48e20db,32f6b55d,3af34294,c83c41df,7d5f821c,68e71e34,4656be14,f09d1858,7a204244,6f74f4ff)\n,S(f4ba0503,6ffc1812,efbf3fe3,81423d91,38eca2,a67a0f4c,2d0474e6,5db9efc0,b2b3c3b4,4af46f2d,e53b1e8a,adb83d59,4c32b6ca,a7113207,b7993bef,dcdf78b)\n,S(aa6f03ed,50640e0d,72fa4de7,ec3964ab,82e7758f,5e6c16d7,78c18296,e3b1a527,322223f7,ecf473a8,36bcfd41,e50f871d,715f9729,93df1359,80794587,59d9767f)\n,S(f2d48f68,23984bd9,e8e87772,28da095,4ca134a0,6b43e0d1,1a8843d7,1fd0232,f0b7d9e5,982d0f6f,5ef74bc6,78ee504b,6202f52e,8db7c069,e179d175,c6f760e4)\n,S(70e9ec90,7db14601,9741a4d5,ba604187,a7313b7b,500864b5,383b3763,be303979,63f9ef9d,eea1d1bf,a84e0d19,c8f15665,60b4f1dc,839aef5d,b6fbef7e,d6dc6a4a)\n,S(23cfe5f9,7198efd3,f34f657d,158f092a,29748586,29983927,9c58944b,146cdf1f,3b8fdd8d,cd82a757,44152552,35de0cae,c39e20e5,f82c7b6a,2afde8f4,1c6afab6)\n,S(b1e2b9d6,4c14d667,4de9a6a7,5499cfb,12b30a92,b9bf7578,f8fdbb55,b6d414de,1e91c321,24341a58,e2c6d65f,18f3f735,f9f98d2d,76d124a2,c694db84,37cd0483)\n,S(5092db9e,5bde4edd,f385c67f,357e43a7,c8fc8e09,f5c07c14,25bb405b,7e52d1fb,cbad30f3,f96767f9,553c9be3,2adbae2e,1f27f9d5,3fbb2f99,a361056c,ddf52858)\n,S(59d39b90,2143ace3,3a1a1e54,a5cd83e9,6cf56f65,4a91f524,af8c8e19,e25496a5,be21c89c,baaffe09,4f2114be,72ff26a8,22db9a1b,818d96a2,bafa797a,3af056a5)\n,S(89cc95d8,cf45bab6,9b3f86f7,9e1fa71a,34fa83cd,3d4dfd16,1c9df1b5,817edc16,5eff0aef,63fc853a,f8b65e8,8a45740e,6c78aade,4bcfeca4,c7413ad6,714eef84)\n,S(6c2b8809,79398e60,87c756c,443fb032,f2adf5f0,17bf9ac6,44d164b7,d2aeed3f,bc46cb71,c9ed9f46,b34a22cc,e1332cbd,44318165,85407951,580e4b26,270f3eca)\n,S(767ca583,c950f7bb,e3aaa6db,b6aa9867,792e0b8a,6930ab97,5c46d09c,30e14a6e,bb90634f,87133104,1c7eeaa0,4a09887a,e5946daf,e88828a,68761cb6,21412d49)\n,S(cf742ea0,35c4d9a6,40fd0686,a460ab96,e2015d0,2c15fc8f,333ecb7b,8af4b08d,2bb94f28,bd69b51e,de993065,fd61fbad,c65fc62,90059a8b,d29948da,20b704e5)\n,S(84d5d76a,a5a6ec84,52f024ea,b365290d,9c3b6be8,f33a93ea,b0a0ac4e,e6271059,f5565742,f1a47a88,8d0bb802,b002ea6e,f5acea8,864e2f64,fbfb1565,dda51952)\n,S(8f5752a,8fbdc1a6,201b6e0b,7bd5db3,cda2eafe,f18cd6d,559724b9,56767d32,d63c0fad,de72b753,6d0c8606,88e0a82b,9f9e35d4,b1db7be7,efa9040b,82298008)\n,S(20578def,f94e3597,50ee95bc,61ca76db,f8fc059f,e25e42c5,bf887d49,665d1871,5fc52a36,c95c6edf,46bd5c38,60e151b3,9f123e9b,c58b2079,cd165c1d,e6f33d3c)\n,S(30f2b825,739fdf4c,5af0ca08,47f50323,d3ad6eb0,413b052e,525f837c,38f97a4e,d698b076,4417357c,a49b4306,7d73206f,d3d97036,26ab15d4,f11c56bf,4bc820ff)\n,S(2350eca0,b4d0c460,12024be,6d458444,b37b20cb,50042830,182b5e41,d564e26b,5909eee2,e3999d60,4cbe0832,58012001,30a344c5,f72ff127,35e66cdd,904623d7)\n,S(ea660cfc,45971e57,852d382a,ae8cc6b,1887fe68,dc1b84bf,31f4409,89f89b2d,52297e86,dfec0730,81a280f,9451623f,9e69c320,6f3c205a,f07e56a2,54cd5837)\n,S(9cded450,2a7da3bb,77e06ae3,ef398954,7687d21e,df522f3a,cb6b4fd9,d3d49beb,7b13f455,35a49049,277abc34,3cc6f0a,336242e8,7b69815a,e27122e1,d7838a8)\n,S(ac8705f2,cf8dcd77,d409a962,f98a6abf,198dd238,3a5eb258,6b0d2def,81daa172,892fa835,a0af6cf9,dd5bf158,44b22cf8,2af258c0,519955dc,ee4966c7,bd5e995c)\n,S(fa026b1b,d5e5fe3c,d6b144bc,6b22f7e7,5512ca6c,9525f62,fc7fb4ea,bcd2282c,4ec40de5,7ffc1768,edb20cae,d3a11380,fcc32f45,f410ad9b,8b674d95,6614aad0)\n,S(a928eb73,28285c79,5717dc0b,ccb5280f,92f9a4be,5a0b0ed7,67e58eaa,8b9097db,af57cb66,61a9d08f,4d4e9e25,aeeea2dd,e4c88767,c4e177b,37a87ba4,c2bb772e)\n,S(bfc9197f,80fded3,c601a0f,1c8c1d77,cbccaab,1c8357ee,4fb67875,cbbc8261,6a721e0,241ef436,69cd386b,d07fa2e8,900527eb,ec3c0025,24bb457e,1bc7aa28)\n,S(ae0de043,b332bb4f,91395870,4f3a41f,65e0f3d9,ff77c1d5,ec3add49,6087d5db,34d697f5,dbef1bdb,f581127d,bcd2755,a5a6b32d,73164665,ef84f6bc,145c2afd)\n,S(4433db73,29d75b3f,7df0e229,538b7a33,e41183ad,7a7a5e3e,ccf5863d,6bbb692c,3a66630,a03ab85,9f23ae3c,a0a38717,d82ac240,d271b3a6,ccde1407,d0dfdfa1)\n,S(bc7380bb,128a6f8a,5cdb971c,31ad12e2,ba593acf,718f5468,285b7f14,69ca2b90,a17af518,9a7b0445,cb37e797,a281c84f,8cf8ecaf,c661e601,4ecc2467,18f1d8e4)\n,S(bb53297b,18d2d785,a4756437,70b387d3,ab0fe62,8b78c09f,bb6cc226,79bc92ab,5c34b9b7,cfb3737,bb515ee8,fcff8592,1fe8f30c,e97d21b7,47a4b084,22b0c811)\n,S(1accc1c3,f46945d5,7b46b1fa,15291ae4,2f0a616f,df23f1c3,3f0dcf97,53851fb6,bb434ef5,e30fb9fc,15e99b15,b5f9d766,9681be30,d2b0a6f5,a4946268,158d5369)\n,S(2fd61a9a,b99c588d,fbe74fde,e8ce95cd,1c0ee9a6,da7ae59,910485bb,9a3ed9c6,2c214840,e2bd764f,74f9db81,43ddd549,3d322dd2,b25790a8,a681c97e,2fda07c3)\n,S(4bfd09f1,4cb492a5,7b9ef3ca,d245a0ab,c4bd97ef,12bf7204,8ecfee47,660f7161,57102f3a,ecc42742,657032bd,aa36526c,e67f2589,2775fdb7,e8b029d8,1cc7ec9c)\n,S(f60eb13a,8e6485ea,fe653e74,de1c1376,2df7ba0d,4ff0c65f,24bb1c0d,74cea3fe,c5830078,5b74cc82,80128896,f275fca4,9be94edc,744f8535,128ba7a0,5c1d9552)\n,S(2b4c7864,9f568eb1,ce1be63d,aaaba4e9,7c31349f,aa353371,6e9123f6,4c57b041,b5dc9c1a,b39325f9,3ead6f35,66c30479,5f817ca1,b3c37258,554c4fb2,51a0ca39)\n,S(7fb057e8,5f559f11,b5d41538,6a25a77a,aeb904c5,d1be33cc,bece20ad,57715ac4,2352db61,6fad3f10,a2decdef,5a7fc369,5c8462b3,7d2d5ae8,bde17311,ac6b4ad3)\n,S(a49bc870,bfd62cf1,1dd1bd23,9499157d,247ac61a,a9b34210,65d4d029,56f71a0a,b639709,88ffd1ae,ed1b62b1,83ba629e,f5f0c088,f8a9016,d7fa9157,46642e3b)\n,S(30b1f21,f8dd3f40,697878a9,fa0b9fbe,d51c1ddd,165bd5f,ed9d1fd6,49ae913f,d5a55164,4628de36,25895fa1,471e0f5,77326d14,132d8ffa,37e0277d,a928532)\n,S(8a015768,8aefcd7d,13cb3b98,373a8823,aad11a4e,718a6ea8,5fdb8a9a,6edfd879,e7d92909,4d198910,44c00be,69f267f3,84aca1db,642648d8,34a5b9fe,518e1363)\n,S(810ee87e,45d8a5ee,c0e3fd0a,cb771d2a,5a3116be,f4dd7d5f,bfac0dd9,fe072778,92abfc24,9500ba0a,9cfa1725,da4c37b6,cf081f5c,c6cb6a8a,3af889ab,ddd2b7f1)\n,S(a0eaaed7,687f6a94,398656fb,3fb15f49,6522c3dc,c19e04b4,598ac4a5,6408d1d9,792a67cd,677ae878,eae040e1,6378cc36,9583b513,bca68fa1,cca3cbdc,37aa61d5)\n,S(ca438737,ffa6f30d,9aa695fb,3d29db01,f805f480,ddf1b227,3a0515b9,5f8eba97,56238731,ff5314f4,af6a3835,b30ae83d,feaf0db,dd4449e0,5736efba,8a8cd51b)\n,S(b252f5e5,4b67554c,ba3d481d,66a2f223,a633b5e7,f335e357,29928264,e744279c,c6296730,5007e2c9,3fbdb25d,a33a9fa7,411218c2,87b937c5,dfcf8f45,472533a0)\n,S(f61b57a2,237befe8,2f1545cb,131acb03,3015a5ee,f0cb77d8,c73add0d,ec0083f7,9b1e0c93,b326a265,eabf096f,f8eedfd5,9f765b51,5007c5cc,d0d3b569,838f381)\n,S(30df434c,1051cc43,4ca35671,3957f964,af406830,38ce82a9,5cdf2c7b,55c50f7c,883bc89b,f54c490b,3be0d434,fffb6b,7e829be1,55280401,eaf44bee,7c445424)\n,S(fd0ab148,727eb712,adee1fe3,4e3d0fe4,99bf8307,fbe18e4e,d20d5236,f7ac25e7,f5f38f32,df094903,b3219b02,8413cfc0,e56b8ed5,6ad80e5b,aaa00f4e,3877377c)\n,S(b4a8fcf2,b406becb,6111c030,ae375f12,79de175,7f2f3b90,13e7ac55,12de747f,d1634039,59a6600a,fa05b1cc,3c459fa4,f1a5fd4c,27ee5382,c5f01e4d,a0259889)\n,S(a6c10f0b,33d1518c,8f8b7055,b139aa84,c96e9998,8e8a256c,5883bb44,10687c72,8f0dfa52,ccaec6c6,789941f3,cab90b55,4d4f587f,bb6f3354,b5f7158c,758e4f9b)\n,S(7188fb46,e244a5a2,6e38cf13,bf2e3c4a,ff5bdcdf,8d9f78ae,88213692,d866f5c9,8cb07d12,ec743540,3be09b19,4cfb2f1f,c4a85d27,d940cad1,15ab53ea,4b8e0d88)\n,S(fe4f9f00,308670fc,48e45208,4063fa94,a6cf7141,d75a6ef7,4f92b474,5bf692ea,5dc45ab4,77f80594,4355698b,e95bc582,efea563a,970217e5,2bd28ede,d7e8cbdd)\n,S(93f3b5df,43006183,47c7bc14,3eb046a3,842614ad,78d3cfc9,a6b665e,3327b7cd,ffe5f378,7ac36947,d635d156,7a28fa5d,45c0b5e1,70508cc2,7fd621b4,47b63b53)\n,S(dd350a89,e0c3128b,54a3955c,bf802ff7,3a565760,39e1e068,e783ad00,36c13604,45cdb508,3c33c35,fcdbb29a,efddcc63,c4cf3fe7,c08a15d,8b2cd4ae,dec2c3e9)\n,S(4f164801,17c1d338,7738b728,96442b9d,66f44eec,e3eeb7ff,ffa87d24,4226e44f,750e6348,490d0ecd,3be07303,5a8e653c,1b1f7c30,d89e27dd,4efedc9d,755b89ee)\n,S(b7c62749,aaf79754,de281314,acb4b2f0,271f2a35,fd187307,20349a3c,a4b577a3,f100956e,ddc307db,56542c1,d2c8f176,e0636ba,b04877cf,3dad451d,edcb0df4)\n,S(fa5c1278,1dd929a0,2ae4755c,70531cd6,c309261,36ef51ed,7d57c117,c1c8a885,57c5280a,5f08f0c9,393aab6f,eba0ae81,a32f8c6e,2a76c780,a871170a,e37856f4)\n,S(e16d6dee,7830b0d,e6cc5e4,9b1cfb7b,50b7d89,57fa4e6c,42ce9925,2e6a29b6,cd5955da,4c1ba840,a3c98d1,7dea8d8c,f4a3d2c0,1e0cf164,2cdc35ee,87fea835)\n,S(a2c659f0,a0ef6147,ba84ff26,ca81443c,ac8ba9be,f6fb32f9,50653384,a5db0213,5176a4b1,88b5bbef,3680e875,437e4209,d2fd2462,77c5f84,4a0eaf5,e9d8c129)\n,S(7d507179,6a7c037,77fcf84e,62e6eac5,456f88fe,76e71301,76fe458c,8f301a68,14018264,59d3f62,6788fba3,1505c83a,4161674,21dbc2a9,dc14e1a,f45a50a8)\n,S(642721c9,20d9b3e6,72db8d82,34ad60f4,bc74684f,11f2ef1a,8171d02e,b9eb1f12,fdde8b98,8aac7393,be2366b5,6e853c7,b72034fb,2cb176ee,770063dc,42b63d48)\n,S(65fc35bd,2f604eae,48a1b68e,1d66cac3,627b1498,247d8376,47082702,293c97d,d01018e4,85dba402,17ac631a,9b88d240,de32ac74,79c7d47a,9f5d9188,f8ac01d7)\n,S(65c8b230,2e51129a,b81de5f5,22217f06,f5d5360f,af191c56,8f395a33,2b04375a,3201b7ec,117fceb2,b225f137,877ef481,2be4d6b4,52d1c855,f73adb0f,e99b2943)\n,S(b82aa6a2,86fb19a,d2eeaac8,9019782b,d0d6009a,8fa07a02,a0d6295,ea8637f0,426f8d72,ec1b08d2,72671566,1f77f470,f334e4fd,3370d96f,b0acca8f,2df99398)\n,S(a3222e7a,c6c27f2,8b24b33d,ac78d873,1ce060dc,be055100,862e71dc,e6671a18,6f2c2a1c,4b80534f,8ea53777,71760fb6,5148d47e,ca097fd2,b7bb2f53,bb07ce22)\n,S(281ffed7,48a4022b,c663d08b,5681733d,f1343818,d68c8b63,9f4405db,ad7020e2,b5f18609,d8e5c6e7,990808ec,b4fa7d2d,7d4cd106,b7ad2c6a,e356f239,9a535eea)\n,S(c520ea8b,a481c220,bab0f218,72ccfcd5,d7014d8c,fe55d1ef,743af305,c0277d5e,e23eaf34,33e4369f,30d371d6,e396b0dc,a065506a,c4159967,fec4475c,8f6bf78b)\n,S(54d39ed1,114ec02d,8005d7a0,82178175,78f827c2,1b55a95f,330a7af9,34727958,4aecf190,229c49c9,31862a57,9131aeed,5518cda9,4695e8ac,7ebf7667,d9afb23e)\n,S(756b9bf0,1da8d7f6,1627cb2c,b3ce3ba,a9b6450,c2d24596,feae8bd1,2ef67a23,51c47b15,b2ac96c3,5d7b7dc2,d8c57ee9,69b347ff,dadb04e9,cbfd6889,a0ef70b7)\n,S(eef22145,6ff200f,ddced960,f422588e,333a437e,d68c04ca,9758d77e,a938ac54,21587cf5,8b8ffb72,6d29aed2,3c984a4f,25df40b0,abc9b7cf,2c07436,ab7e09e2)\n,S(b841b560,c0af44a,35bc9320,3c05cb32,250fcca3,f83dafe,30d1dbe6,61aa3d1,e7956525,3d07a89b,2335e2ce,9e11fb89,96e2c146,271189b3,461cf944,2ceee2d7)\n,S(14b98f62,5849b798,48f32547,efccc33c,3ead6cd1,a290f03e,618acc2c,1ce065e1,4e7a2415,805a4486,476221f1,ce8234e6,5b81ee60,e1ce5eb6,b6a2e041,ac885e00)\n,S(fb0aafb7,68c19f64,17e417b6,f1c22dfc,737bc74,fe8b23e7,4dc1c1c9,aad7ae44,88b83e23,631c58d,c3729cf5,54343721,e9ec7dc4,a889b85e,31cb302f,f2a6ab3b)\n,S(885497ab,e34d1745,a3e2ff8b,bdea904,eeacf100,324540c6,86de137a,9756468f,63f3f160,bd266c3a,7c49b13f,c5b06403,d0614b79,17c49824,bf507257,2ac0b948)\n,S(52dc7bd7,17e4d8e,8b634439,f6f06b8f,7121a0e0,cfebe7a8,3031668b,9832b8b3,90679373,9bbce1e3,5c48f41e,942d9f15,9161e9ab,273a2217,d9e857c4,3bdd0a5c)\n,S(e6ed2c69,a8bd7af3,35591f4e,4dfba7ac,d82e87ee,e2b3bd28,f0f87f02,3abaa7c0,dfec6118,7396bd5,e32ba2e7,a8fc912f,1e54e078,6f2ee222,35adcd22,8feca28)\n,S(9e2171a2,c1025129,1757e26f,ba979e5d,6b68c2b4,975c7289,2afe7898,cafc46eb,3dd062bd,210bfc4d,d30cf01c,51d810b5,cf1b8ee3,d3baf490,6bf5d381,b87c9a56)\n,S(ef4b8648,3bf209f3,b1c2e166,a32cda39,44b21282,db8acb94,6ef62122,63bc44cb,903d1088,ccc0ba47,b5ac3252,33ef9b55,924e61ba,7ca80bd8,1925b269,3998920b)\n,S(64ec6d14,7ecb6e44,6331907b,b9006b2b,fa4fb854,20ab9aba,f1026bc3,4ccdc4b5,583cad3,b41bbfec,d0817207,dd312cdc,26c0411,b888ce5c,c6ee025,baafac63)\n,S(128cb9de,125429dd,e5b9b33c,ef9f34a3,e7b38ba,f22dbcdf,8e169894,3f7ae5a9,a10a01dd,33f5a4eb,66091348,c4dbd90d,62879ff6,7559229a,e53c2896,8fb4584b)\n,S(a7d2e7db,ca0890ee,e07c4bbb,399a0120,e71fc284,c5b7c96b,4889fbb6,db95dbbe,b8caef70,404a19dc,15670cae,b19d5b74,e70b7492,50390b12,5f559b11,feda83de)\n,S(298b17c0,b8beadff,5e6eafb8,ad7d756,8e961468,d8e12c94,78ff3870,dc722450,a0542f35,c7b95774,b1c10f75,3e9da029,ec7a54a6,97bcd9fb,46c98d26,91ac1a43)\n,S(31a39bcd,a3d10e9f,6b46e1e,c30b41aa,557ba664,9b12db64,a13557d7,5c592d1d,814f1a6,15382d4,e57b8d41,351fd782,ce7dd9d7,86aa9bbb,c5b1ca7c,207ab12a)\n,S(3317f1a8,1afa54f6,ffa6df13,bd3f818d,e9a29bed,7c119b6d,fa31560d,31d81cfd,aa8eb746,4e9acaea,19a42509,a23a281c,e9917788,6d3de977,4398c57,8867e095)\n,S(85511857,80eab56a,274cad22,966ca547,3027d3c,3cdd7e25,7d8ed8cd,a5c6ef30,b13de0f4,45d71bd7,db0327eb,15438e9e,84fefc1a,464d8a2b,bcb8c6b9,f59f93dd)\n,S(fdbffe5,7e378262,c32bc4b1,e84ae01e,a2d6dd76,28e10b04,9adf6a3e,ef106e83,f19d0c4f,1411ba50,35d3ef23,153f306f,d40b22c6,69e92ea9,22bd7d5f,83a98ad)\n,S(7562779e,6aae0c51,52acc7ee,43bed76c,831ba008,82d89c9c,e29a5f3b,8855b3c8,c83c1662,7cb9e1d9,126e07b3,354b82a8,a0cd49eb,3936c14a,8d8d64ed,2a4e217e)\n,S(130b292c,10d5b336,4635d43a,fb6d6e02,d5acec2,c2033525,ed72c030,e82a4a08,d534b710,e1201276,6f6fce50,ed6efec7,3e0c3e75,50e0bf36,d5d625b5,4855fed5)\n,S(19fecb77,bcfc0db3,e595fe22,e96f1212,b3ed032d,183be5e0,ed4c1b8b,d0501bb3,6b0fafde,2f0636e7,2b4ea946,a0e5c27e,4e5dfb5f,e8b8a1d1,b36bdee5,75d02e81)\n,S(ffc668c7,9c6f9fd2,f5c56104,aac1286f,cd4a390d,ca586af2,c348458f,b4130f77,fd7b748,d15f10b6,4eaf4946,34fb4ddc,439919a1,1155e40f,24f3eb2f,482445f4)\n,S(b9797c7b,d4112aa4,8abbc827,fae12fd9,6d19f3c7,81626e21,5c26ddcd,b2d4552,ddb0aa81,3113288f,1fd2505b,d23f2a9b,a1ba0a38,dcbbfbcb,46da78bc,5c705327)\n,S(9388c9f6,5bda9c81,62ec04ec,5345ff80,da4afe34,7281f768,4d8daa1c,cc3d7869,23ef5140,3f926d0a,d2ebbe6e,48858850,aa98149c,89490e99,65dafeb3,c82644fb)\n,S(44cf864,6c2d2f30,e62f63fd,8e145786,80c1d5b8,a27fd496,a8e34bab,5f88270,9784e329,a434b442,fef9af66,b23ea917,edc0f6ca,8d28a992,bf6944ff,26c5cd25)\n,S(ebe08589,930001bd,ecb83ca4,45c4a9fb,fd61b229,60ba9848,2e0fd520,1af5a0a9,ce2d31fe,3c271048,24ed891a,910e2cd2,2b99b39b,480ad812,a5d6860f,71ec817d)\n,S(176d14f2,5491c2f1,c1d4fc87,a8f59aef,f560bbd9,41872f6f,2a1a6adc,7620f1d7,42c1e0f3,8a3379b0,c5de8a01,11b846b4,35db7783,caa9b84,8084a985,f0e123a4)\n,S(74e96d3a,972baa6f,8ad6876c,9494f451,a12adecb,681c4d55,57eb58a6,de920fc0,c2cd92a9,994ad5,f4700561,e8b57201,96e61a5e,b4cb4a55,66959bf1,35a07f83)\n,S(6751dff8,5079fa45,7f5df468,624c4a85,db970586,889cd80f,d4514bbe,8de42d60,7cc20505,deeb3f91,3d78a265,cb301c68,49cd5a53,dc029af5,c0db1876,762ba3b0)\n,S(f9c63056,24d8cffd,abce64ac,65dd3a09,ebd344a5,5404d08f,b4140a4d,8489628d,49ad5449,bf1b6def,74283afd,2f315f77,3de82cda,d4c9de21,7995a2ff,c44e934e)\n,S(69e8c4f7,3f757235,d0e4f39a,f2595cde,f7ff4d20,dd2d45c9,78f32d19,921b6672,8ffc35fd,8a6d541b,3f7135f5,643efb00,14f275ba,d929671,df610748,6f763f55)\n,S(3d03e571,ed2aa88a,3309f014,caddfd64,26ae84a2,a526fe35,f30ceb8a,4e645e22,db95c744,6bf115d9,4af9074a,6b274725,adbcbfa6,77f9ce48,535003ad,dd37bc6a)\n,S(e5b764c3,dc73619e,51a2afa,fb2292ad,db2b7b0d,e12b46b7,f14b66ce,f8aea7bc,41fbe1bf,41838b6e,9a57fcbc,b3e2e3c8,60170122,29a5ffe1,7394139f,5e8edf2c)\n,S(adabcca6,b4252849,76596462,36b17b0f,9d1b4e9d,279af84a,c02f556c,e0f4c385,7d12959,9b411665,dd23b676,57229f84,ae46773a,e13284ab,1cb608d2,ccedafd5)\n,S(963094f7,7ea2a7d0,3115e201,45dc6f6a,7318f8b9,a55ab015,8096db54,48e341e7,36bb26ce,3852ba30,dcb1a8ee,ec834f4d,d5342ab9,f7bbe85d,7addce07,62cb22aa)\n,S(30ca6324,b4f34e1a,4c3dbe4f,d6dc6b13,a8ebcb35,2f632fc1,5725bff5,f260c508,5c04aa15,8dae7205,3bb608db,1b9245cf,fc57c10f,d015e80f,7afc7532,632eaaea)\n,S(8356d1c4,55479df3,adbca347,fdb73f89,6027471b,e528da9a,d9e6a968,8dfba744,c325c86c,cd603953,8f610b03,21b6147a,371314cd,2c41df91,745e579d,8564a177)\n,S(996ca7b0,4ae2dde7,b5ee87d8,c077bf97,9a63ce83,cfb84349,c7d231b3,1e15bfd7,cd1d1b48,d75f9736,68b91101,8ade913c,19a1d785,65adcf71,6c805863,fa6c1f17)\n,S(8a15dbd3,5cc16f77,b22a87b4,4f93e5e5,810f0503,56e47d53,95769128,a2047738,cf96df1,9ecb6da4,3895641e,4fbd4f27,f00f58ce,cd34d38d,e258fa78,410a1f7f)\n,S(23c1e11c,be9f6a93,6c5f8abb,6cc501a1,ca38b03e,f00b31a,79057156,f382ad7c,1d996782,9f709951,2c9728ac,68c16db,1889bcbb,7df432b7,f430ebe6,56b1e050)\n,S(d937ad87,70737b1f,d52bfb7f,86e207f1,9e4bed5a,43b165fc,981685e6,24b8e84c,202913d6,1eb467fc,b488fffe,5914f853,73aaac20,1acde09,ef975cc8,a05fd181)\n,S(6457f59b,2c744ca7,89537c59,6485abe9,7835368b,47de3667,4740ecff,72e5596d,30b6ffac,65e34e88,43681e64,f041870b,c85b3b5c,86c032b1,e290848d,ad2f7a5f)\n,S(7101d56d,813abe1f,c50aa99a,bc7b2363,9532d79d,facc17c9,f2a5b4ff,50edf82e,62a0b9d2,bcab5b18,9075f6f0,e648a4f6,fa66741c,389a4196,a4c5ead7,cbef14d8)\n,S(2dd4cb3e,5cb59cbe,b961af3f,d1154fbf,c21916f1,d5331ce4,c8a32ad6,8f7ad818,397dde68,7b1f6b5d,38e457ae,2f5fb332,74917949,801151e5,3d4fe19,9a34289a)\n,S(509c6fcc,ae22b09d,b8f3d191,434e584c,9d17dc76,c268560f,2290d81d,53ed66dc,cbf69e20,c3f9ada3,41e32dfc,581f0ba,f015413d,735d33a6,260e0cfa,7a4e4d05)\n,S(71babe5a,9458bf5e,112b23a5,3f87007b,66ddd721,32a45a34,2a9c521a,c2029aae,55ac872,a0275be6,4f569901,d84dca32,ea13e2c6,cbe608ac,de228185,34e031a3)\n,S(f5f2144a,46fe975f,82b91da3,a98ebcb,6d5769a3,4e5fc50f,3ca640fa,152fa7fd,2fc05c22,2b20b895,5503f23e,627558b0,e023988d,f02993f8,f495750d,db6344fe)\n,S(d6f274fa,fdfcf64,25972a56,640e53b8,15c4d213,8e4a72a0,b8ab3394,2955e416,738e267b,2fe0d9,5774afdc,7c4f559b,7bfe2824,ea6b7a49,d3220eb0,460ca733)\n,S(81a12fcf,cc6acf7b,89f30fc,8f61e2cd,7882f664,55923993,2b8d3f9b,1d6e11e7,a8dbc6c1,cdca67b0,64b285c4,e2f69242,cf55f06c,5eb28868,d9bab656,eaf9116a)\n,S(57019cc4,941f6f5,9ed34305,92f35a83,39a495ee,fb3e311a,fcef9001,cb8123be,a3d632f2,54083f5d,6f2857b6,9556205f,59578908,9d8d8fd2,4d10bf1a,e6d2e635)\n,S(4205a71f,504362cd,576c4d84,c8b65252,3d4227fb,d6aa28a7,e7fc3d70,d1387c80,781bfe55,7fecdfff,c54d1c1f,e147792c,5ea7a1dd,7224954e,e110cc6e,18ab452b)\n,S(1c42ad3d,f90472e9,e5c041da,52476ea0,896a2032,ccff22a8,fd7bbab1,4c3961f3,a5072a70,be702dae,f9f93148,4bdfaa00,1e2f2ad6,7d79f46b,5717147,17c5499c)\n,S(6c9225cb,668ecf25,1f7862ad,999516c0,145faa37,b4fe92eb,561104f8,f1dc2997,8c12c1a1,e372baa1,4e9b1443,d3530548,d7d1d05b,fa354c7,f47ecab3,23993a31)\n,S(72a0fd2d,eced2a05,6885dc81,fb61e881,b09104f3,8650a872,44e40471,ed189992,d9c67490,43bb493d,9aea4a1b,3a50da8a,e1c48523,9a480442,32406d2a,68487e6e)\n,S(b1d531af,8faa24b5,69945ec8,1448915b,a46fd13a,f7fecb8e,16cd5d03,52c6c2ab,b3ba6cf4,bd36bee,66deba09,35bb85e0,b9ff7e62,5b5c793b,543a091b,dc83292b)\n,S(da79daea,d6ea65e1,4e8747b8,b4546560,a9e5a99e,eb572f17,f2ebcf3f,9a307a86,f5b3c430,e0f2d4aa,2f278088,2d683c48,d84f926f,6feea88b,10e06930,6567a290)\n,S(1fe7fb5c,99a69a75,a2276ca8,92f67da4,951bbb4f,ee4df8b4,a54c9833,d0d33869,e2b2b4c6,fe0f63f,d97fa179,331e9bb,55786006,f0425e98,71452aa8,361f177a)\n,S(fcdb7de9,4eacf36a,9d662371,edd2b535,af33de37,1985ff49,6ce5293b,9d2ac00a,e332723c,7a9708e8,5172e56a,c4291760,baa17e83,72c98dbe,83a186de,77c2aa06)\n,S(daeaa6cb,19bdb4b7,78077495,a9cead03,3be16d2,97e742c6,97ac18ed,e5b514c6,4545ca53,bde3c1ff,6bf32604,ef037da,93134215,7057ab10,cf6af451,e7753f4c)\n,S(83e4b4c9,1a923321,196fffb9,b45d089e,7fa1f6b0,5ff45a6f,d099f7ec,fe283088,926c28cc,bf405fb1,17c5f168,20216226,4c89cda2,cf669937,2739ea05,279325d5)\n,S(cd7f2b53,8363914b,2e83f1e1,c9bced9,32a682fa,cd72b46a,eda578c0,640089bc,ddf6dc27,a5281d3,b4d66af6,8fc80f5b,16cbb7b6,ebfff06c,6902d38d,4632ed2e)\n,S(6f3f5a27,b19dbfc0,238bccc8,a9adcf95,adef6480,fd4ca405,454509b2,97a40928,36a56db2,abf62faa,b2255d86,d8a46aec,361fd2a8,65740c31,babb2e2,c551a85e)\n,S(f7aa5c92,a523b86b,c27cf714,51f7dcec,fa18ef3a,9e839c41,a8b20c4e,30ba3b77,fa7d3ce9,8009f23d,f5eae927,acf1b28d,5ce4a2f8,8a92da7d,fcc1acb1,3c8cadc5)\n,S(4adaaf95,5bfa6a94,b518f7f5,b0ebbdca,493798f6,72293e4b,36d5fdfd,5f641b89,ce675ffa,cff579c0,61e63c2f,36e77f3d,5c2571b3,aa99d3c2,74086b22,a862577c)\n,S(2d737aac,3600371c,f6b638e8,8a29884c,978b783,cb843922,bd449e95,814db692,205d944f,13b21441,76d8276d,74da68e5,142aac9f,ba632568,79753c01,e54cf4f)\n,S(7cb5d365,10ef241d,ac378fc,ebad8738,e8f2e6ad,6d838731,e5c82bb9,169d51d4,33b088df,5a572e8e,1010886a,d01b68f1,9f345770,81a465ba,8c5c784f,225f6510)\n,S(9872a376,e530e254,8b623b6,b9dbd6d4,d123f2f7,30579f47,4d910831,7c714c0c,3de01ddb,3145d81e,6ac002ec,70086f74,6eb2bdee,6295f5fd,9d2cf8b6,1b222e58)\n,S(8242fc8b,2e848618,ba0f26c2,6acac090,8eb21b4f,41a08b76,beb35f85,3b8c2f33,58b94d44,3379ea4f,829fc809,ce2632cd,78d8675e,45a29c58,e29fda43,785f2e9)\n,S(88800a95,cf1682df,4e5bcde3,a96de21c,3353751c,5300dfa0,d0f802d6,7b60eeeb,2a35b86a,4e213e9e,c53dfe04,d91afb48,25bc8794,a1574ac4,53e81ff,4b6e453f)\n,S(3c8e2755,9611937c,b7e2b2cf,8a87fa5a,e5c696df,fc6703b7,e1e65ac9,111ad87c,c54d129a,be0c774d,dd415707,bfabafdb,daedd1bb,2ea9cff3,bcfae0e4,55c916e)\n,S(281af73e,a1f092c5,535557f9,3b5a8c94,54165f8,76650801,856bf926,19f06cb8,deaa8495,30951f12,ea157714,3caab5fd,d30f0dce,ac9b80bc,fcdb3477,dc01ea1c)\n,S(6b353e5,3202f63c,69bce96,30535f11,1939fa,849dedb,92ad21c4,89f5174d,bd961eed,c16f285f,2eccfa69,d37a6d63,be5fad00,4858c80e,6fc4dfb4,2717acc4)\n,S(68c184f1,a06685de,fd20f36c,82b5446,7446d5d9,8fc9c312,4852bb02,f35ed91d,486a3d16,7d94c66a,31f9e134,1652f658,76d49379,f3e3429f,e9f2da30,84f56532)\n,S(5e884531,fa011576,3d36e1ad,74b22e23,f765db14,8b8e965c,80f7c9bb,7d561bf0,34c4f03,b137b627,3fbdb6e4,8ac09ef9,bc3c8ccc,e720853c,61ae58da,ee3a0cca)\n,S(10c13f0f,313e5ad8,ea61ba5f,ed509aef,5ddd3016,c3339eec,ffc8f9d8,6f131118,28f6ad5b,324e44ae,64ee65c1,b86710a2,91a8e71,c33adbcf,a84f18fb,144dd67c)\n,S(aa99d8b3,1031d4e9,8c078a68,7254968a,9141c710,cd8e4842,5a384bf8,414f5c5f,ee6eccfc,1dbdd5a,c9080cc1,ffedbc6e,64fcf847,ab9c0ce,fa91c4fe,d1de44bb)\n,S(f087945d,a464e66c,4c73b58c,5034f057,b96ebe34,f5128397,cfadd7be,22ac6100,c5485411,d78fb395,3f229109,45aac354,1a2b2acd,1d95c38a,f51f36dc,d3cd92b2)\n,S(2e4d8752,ac21c22f,e4d465e,3d2f5ad8,d9168080,b2b44930,e5de75a0,d9bf91ad,92f394c5,963c0817,500d5a98,2eccdeac,aa55043e,27a9a035,1a6ce245,a8d048bc)\n,S(68b59755,44feb608,15a6ae70,9c2647b1,5c7fe073,aa6af8e6,202b9782,83daffac,b3745e92,fd86bfef,ab9d3d26,cdaf57c1,2a329889,cf646b6f,d6cf869a,f727e0c)\n,S(15f5f668,e9576897,a287f131,bcbe1216,84f7a108,3c28c09a,afa77074,63dba49b,133e33fe,9bf06bb0,3b814938,7a099da4,77a3e758,82fb19a4,463ab360,bfbc368f)\n,S(f2bf3cc8,ea752c11,db2ff594,d3f9b085,1dc9dff5,7999aa39,b5af2a29,30d50491,6e01a801,c5b7e4a0,a16af1ff,b011bc12,cb0483dc,6127fe52,c992b07a,9fd77635)\n,S(1b04817f,46dae06c,120f8088,b3cd09e,267d4ed2,db14881b,bc32b5d6,345dc54e,31634e28,56f61b80,56a414e3,94a34ced,200bb172,e9a9aa07,6a224329,61f55ecb)\n,S(693f066a,bca2046,ffb860f6,5e769ca2,3d1f46a3,6c09273d,afe5eb89,d2da45c5,719dd749,5c1b1938,a92af84d,eef309e6,ff1978b7,9adadb96,c58caf2b,625fff9)\n,S(3fb25a02,bb232d18,c798f688,b16193ae,cb2eb9f5,e124c999,225f0720,63417008,90db4fbe,fdbf8a26,ff9b4afd,355e3771,c7c95891,68e2abea,264aba44,ad74707c)\n,S(4c878f4e,6ebfed8e,e12a0a6d,17298b70,79d9de5c,6a7b5359,5ddefe4c,db82a79c,837592e6,927938cf,dc82252b,2cbfd9f6,cbff1950,405b4511,f2c21fdf,a3f72715)\n,S(5ccaf6f4,2b75e152,49263cb9,5fdb34a8,770e8828,98a1a0cf,5407c48b,b9ad4ba0,70851419,379e5e2f,dca9613a,a9f92fd3,8ad8904e,e0ce0048,b2510943,ba8ee24)\n,S(455907ae,713d1ec9,3792d488,7d9857bf,a02bc2ce,abd2c599,cf576f09,f7d09d11,1fc9ee5b,90a039f8,eb3200e2,ee58022,3f0cc699,60221d67,86f0deba,f13ca6b9)\n,S(6f7acd2b,3683482f,c2c2d55b,eb62a89a,37578a34,417bcabf,ba7c56b7,bec14f0b,6049db59,b6210e55,b06401d6,17247d91,64e84e2c,b8de91a4,d4998c15,6f46d621)\n,S(100f00d4,eee4ccf5,ea2558bf,92bec83b,223fa214,ad692ae3,b0a2ac93,c546d558,fe055fdc,1ae02552,1557db5b,96a62c92,556f918c,ca908708,46ffa1bc,8192b65e)\n,S(8650c359,664c9f15,935dd776,bc6fbcc8,d9cb02d4,c22428e2,aee3e3cc,6e9d0c6f,89dba800,919866cc,8c16895f,785fc9cf,2661f78a,9e065472,652b71ce,d5ec8732)\n,S(22b6df12,b3932756,713e2ee8,2d296c64,5d10364e,cca1ff94,9b477fa4,9a2ce5ac,ac58a22f,42769cf1,e2e23308,b3b5f139,4d329323,4bbd6053,4817ab5c,624e995b)\n,S(ce87a23a,1554ae1b,9579ae96,863128cb,926a0cce,e51f17db,75155607,754b5992,4bb953b8,9d590216,e326f23e,66768c0d,17626262,6fecf80f,97435b50,d5dbd503)\n,S(e3ae6365,29e3fe6b,cd1c89da,d72b17d4,8bf05c1b,c487ad41,d3b97838,a2cbc19c,4634e222,316b6ee6,c7616cfd,cddaee07,7fb2cd0d,26dd9f81,9d0ba43,313b3f4a)\n,S(2825cc59,3a0678fb,e0d37d42,df72037b,6be96e98,18c52c49,fd426d75,324bd620,ea0079c9,2ef91a7c,dc587343,7b454763,f2fd4adf,561cd023,8379c8cb,1d281f6e)\n,S(a6b2a170,fb23ae2f,943408ef,60fcb145,106735c,8876238,5d0fdd9b,75a2c46,1ab40091,e000012,60837529,58e3134,5f260890,d1bf6930,ddccedb1,dce20255)\n,S(99a36f38,759f0a70,d719e3d5,b741a40f,daef1ad2,bcc65293,3992f134,39ff339f,a36d4b07,a7258053,61430332,6be79a,61ce8eb6,97944c6d,8bbf433b,a565bb66)\n,S(e511e0a,de5a9be1,1b8513e,a5706258,6de09e2b,e2df739f,d647fd33,7890d36e,c6cc03ed,e9e50830,bd5579c5,9d6db693,dfa5c057,b1c214da,e4064804,9cd7ed70)\n,S(bc9de66d,a406288c,a8a94e96,5ca16dfd,379608c2,63222a24,e3fc1116,20a82125,ac471a7e,579cfeaa,fdfdb5ff,9cccd4e,dca4202b,1b0149ab,ba9f6c09,aa219626)\n,S(e98cd505,bd593bc1,496b1203,436f6038,ebe3fa4f,361ce4a6,54315402,a74c3a4c,1350c197,1c7979ca,7464c4d2,39b24a55,a1e50812,aaf92479,d566fffc,9135d977)\n,S(47c0c788,2490ca53,37cc668c,5a549bde,dac661cc,f77534ed,d11f7ddc,9e0f37ac,ece10949,be122263,26819032,a2d952c3,60b27e2,7e527673,e8fcef08,a8f27685)\n,S(e8224d65,35ea98a5,e3fd8833,7bd167cc,776f89ee,7d0ccfdc,46a15fed,93bee5e3,44b260e0,e0b1e1e9,383041cb,1dd985e7,22edb214,ae58f784,f174ba84,ef51c59e)\n,S(c195ee35,5880dd77,67e01659,ecaf07b4,571e324b,b8a1a4fb,75265af2,3ea74709,95c39cef,f781f53f,31bde05b,d0289313,4e478b2d,1c55e741,aef8035a,2ecd4226)\n,S(60d989b9,c9cccc66,139bbfed,e2902a95,fb9ca9a8,6c2e863f,21eceb4a,7d73c4bb,8295928a,a48ec1fb,775ea29d,9da1ceab,47e82f3f,1e6ef7fb,c7505e26,92bb51d8)\n,S(a33b33f6,9db29609,8cfd34,caefd3e8,c3c0d863,ab695b06,b47d102e,f827fe62,669d9d96,842ee809,2cc31cfe,baab0f1f,4007c3e9,e7e41be3,7a08d221,1c6bc905)\n,S(bd25afea,d9b8c833,fe332a2a,a9f3b627,d8328152,8fe1422c,5da90163,4b971584,35bb66e7,35326f67,63f4f38a,c18f8412,26da97da,c9e66902,f28904eb,b49cd78)\n,S(4d7e208a,4264b565,d8563cd7,80773012,581e8688,a62921f2,d6a334c3,25625279,6729dd4f,b45ecd25,2c5cb033,dcb2f520,dc928ca5,71026fdd,b42943e8,b5da9988)\n,S(5dd46f97,fc740db3,ec56348d,ed73fbbb,c440e3f3,33c64a3,a37b7a73,7f0e987d,7e2d9ee6,9e1c07a4,b764cac,aef3d780,e2d43288,2863f76e,35ff4cc6,832ede1a)\n,S(4631992d,d72c02d2,2073222a,d35917f9,2770198b,ad13a847,8d3c9ca0,6ac91a3f,e28ce87b,35a69d5,c43b685a,e59d5f9d,ccf187bb,62517a92,90992b39,86d9e1eb)\n,S(9153ad32,32177422,e03b6739,d5654209,7fe04d22,28b1e873,f02e990f,8936d1e3,8eb9f3c6,b54726b0,b4e867e0,5ab2fbca,e76d2e20,ce07983d,6edbd5fe,ebd0cc8d)\n,S(939a7349,28fd798b,5036e2e9,60360387,b9c080a8,982d4530,78415667,848c2eff,30d2a2d9,5890d023,7d117cde,2eb3c532,e419770a,8783a7dc,dfe40674,709776f1)\n,S(8e67bb29,9f11e01,b50be7fc,bee1f73a,5b335f5e,5ece8619,9a514156,dc243f3f,7fd0cb92,d6f9cd8f,bee9d337,90a4492,b8a7fa02,a0914c48,1f8becf5,d9a9d7da)\n,S(a2cab3c2,537d8fec,b2f891a8,1da2f523,de4f869d,3c812806,855013c,73485ab2,765d058,c681af53,36ccbc8e,88d2391,b4894b18,15441342,4c4e73ac,1a8e0d71)\n,S(9b39be40,976c13c2,faad320b,9338f985,b0718123,d2fb543,b65473a5,3bc2fce0,10f8234d,455fa7df,d09d76ee,41035515,9b560db,7b92988e,a42f9e9c,f7baabeb)\n,S(35011530,6f2975be,73e7685,6456c94d,700e9b1c,4685639e,4f60efd6,9e513692,5992efac,9dcc0a58,ac6e00e3,54e44582,7e2d66c7,248e4b86,f8c216fe,a9e44270)\n,S(df5a5b75,d96ddb93,9a341f58,7e1f997,3cb9e799,b04ccdfb,9907b57a,7b005d1f,3fd070b9,8d759043,8a53c302,b7ac0dbf,594094ad,7101d500,1cd5d687,e80066f0)\n,S(91f14eda,a0db8441,10fa531e,eac54762,d52ca420,bb872327,6b383587,d40fa761,86cbd213,358d1f70,c3f6ac7e,913daf0a,47a80f8c,bd72445d,fcbef37,d0d71e69)\n,S(53ddba06,46853311,9fe95719,15a9efe0,bc7fcf80,59d638e0,be6c1aa4,c5f21ffb,e59de2f6,5e583ab,5ac86c77,fc298301,70a18b68,a1979074,c21c0d8e,4a562567)\n,S(56599462,4ad07c16,607afcd,76e86218,b15b50b6,9df84695,e60a15f0,3d7bcc49,c6d36636,ef58556f,9b688db0,eecb6bd4,5a7b30e,a9748732,68be57d8,542c966a)\n,S(76fd5413,fdee9cb9,7f92fefa,5efa27e9,9aab744,e1e15029,241e35bc,743307a3,bb23f425,9aeb64e3,8ae82c3,b4691bf9,3b4a719e,a8ce076b,d0345a2f,d02a6d05)\n,S(511ff159,2127502d,7499b988,7a3b3bd6,1242518,58bb62e3,dc1638be,89204a0e,21da5ba4,34b7819e,53b51e46,29f5fb77,e739ae5,97af55fa,aa09500a,dbd502f6)\n,S(8e948cec,51635ab9,5a057404,39ff17c5,ae2e05e4,523bf2a2,3df28fd9,86de6b15,e16aa2ac,6c3d34b,9535b795,29a82b67,34bfa260,4a74ebe8,86110d73,ba564375)\n,S(ebda8670,9277fecf,9b8507d9,40da6c74,210c8c7e,ddcff0d6,e3b52ded,3bf57095,3ca95e8e,112c8137,fe8c5088,bf041674,fb657260,70625890,1fdc5626,7655d654)\n,S(eb5ffc4f,559f7ad,2469f48,1c730925,1ebf3863,357dbe72,41a29205,5b667682,b1f72d74,a5a16ef1,d55804ce,76974f46,61a49210,8a1a36f8,a59484da,a9bcbb96)\n,S(2a93ae8a,d15c82ed,19fd2161,4a7a65a4,cf562432,623bf7f8,6c765548,b02fb57,5a949ca6,60a1430,9d4baa6,9be69b34,848e9874,62471d74,54c4817b,336584e0)\n,S(9ac4a3e9,f1c8d115,138bd299,b6fb9132,c5d64a92,1fd94adc,82eb4ae,fa64704e,47f0eecf,a9eea827,ff339f3,48e67e8f,da9f00e1,a6b9086b,6f5441c3,7ae1d335)\n,S(add254af,39d99d6d,355510d7,4f8985ad,3d8ec1e0,1e8d0210,27e80049,f555d65f,5b147a1,fc4bdeae,6c2f1224,b35e9e61,ad0799db,53597ef2,a23a8f3a,344dc526)\n,S(d374d326,52cd006e,3b27b8d0,3ab47d44,bfb1c5d4,48adc992,5f63235b,c34aa128,3cc6ee09,c04d4cb0,aae8b1e6,6018640e,d0964fb7,148181ab,e9fd0374,642ad9a3)\n,S(fa7632b4,78e5389d,cbf380d,8efbf6b1,d4bef9a1,70aa3517,e4c2005a,71a283f,ef2bcbb0,4b20be5,d4bda0f4,26dd0baa,31037d2b,7b530e2c,24105c3d,c817ce89)\n,S(68ea197e,76af6950,1633ff9e,c825a817,80c7405d,ba513f96,6106632f,ea73ede5,633a5f90,587d4ea1,72129820,2ccefb30,c14a052a,6c0ca723,65e2f91d,53b3ff4)\n,S(8874397e,1813f0c7,6946a84f,b05a0f44,224bb110,8aee722e,736e807b,b045b73a,ced2e2ec,85ae00e0,2952f55d,3626b613,641d2a8e,84b4c9ae,36177bb6,9ef80d9e)\n,S(2ffe42bd,89256069,2e460701,b94208d4,85915043,8a85f71f,32246b8,5dea7594,6e7e4050,a35f1570,f8cc40c0,862e9cb5,59e744bd,8788646e,b0dad904,8b2777d8)\n,S(c6d3a6f8,c997cfe,779a9a30,79de4bae,c19c226a,21f166d2,71ab4da2,cbc6defe,a8f8a618,3f6c8b2b,1486e60c,337725c9,9a9adc07,7dbb6581,e5b0119e,ca10f418)\n,S(9b51cd75,442203ca,c4b8aba6,e9829b73,abe29f96,92b8dee8,500e1a90,9ea9767f,ed0ee32d,6042b6dc,dc818dbb,8cb00619,6bfeb2d7,88f35626,789cabb6,5d159c51)\n,S(952c518f,775c8bc4,dbd7629c,8dcf8807,1b208033,8aee2ffa,eabad5d0,be6eaa1d,8a3b10a3,d9343d39,e7bef8c1,193f5cbd,717efa3b,cd2491f0,2dc1aa17,2e5b629b)\n,S(49a18372,63eb11af,77a2e33d,2743393a,7eb269aa,f64589fc,8f81507e,55e8ee4d,7feb4a59,64b781b9,640d60f9,4e7eb291,6025d190,95945aab,7ac7771b,6f96cff8)\n,S(cf974d8f,46aceb5e,a8c04e55,703b5a43,ac577e84,cb174abd,88198e1c,12708c9d,c50cf6d2,afd79d3,ce275e91,26bdaf0c,f46c1eb,536d0753,9dcf6c2d,d79afc35)\n,S(461a831e,8beb6da0,df92dcdf,2697d551,cbf8f903,138d13f2,ec9b7fa,4a7d4763,e5fd85fa,c251705c,27d4e870,64af33b2,ff99b19,14496d96,6fa18916,faf40e01)\n,S(eef4eb8a,9eba3f2e,b27e3aca,6cce7335,49f2656a,c26f1921,60c05bb8,fc3f1165,58f74526,a812ddc3,713217f6,fa4be02b,7062d042,2dbf5625,abd1f422,58b54c36)\n,S(d674ace8,a7e8ae,d4bd4b7f,235b9f4c,41ef4355,4d9e6e44,3b6a26a2,d16f798f,8a25a7f7,896c0dd9,b1639f99,5c4b3df1,a3536104,b7d59348,c2c56c0b,bb21c609)\n,S(a8eb465a,8a2869cd,6419af81,b3ad1355,1508727c,2b2494a4,93b5ffe6,2c1375,f1a27219,f59f29c,bb93bdc0,6157618a,454075ab,b95184e6,a4601ef4,eb2c8a1f)\n,S(ccbd9d,6253fae3,f7d2527b,17854e21,58581e95,11a1f11b,55e3e04e,7326e6db,51ddefc2,5d9083ce,e9999e91,cde32f70,344ec937,d6aa5272,3dd62496,c4b0485b)\n,S(524bc1e1,5c75e8f0,6718d2c6,da0f6599,c8b5d83,7cb9b48d,615e8e46,49dc6659,f6c91d14,72a50c31,1bb202b2,3d76f224,b55af957,c7bf3c19,69d175a1,d36ed19)\n,S(520e667b,a0604a23,dde663ea,1a29971e,7e753301,9b2217af,296b02f9,de1df35d,9c2a2c52,290b6927,ac566ea8,4caa31ef,cb19b65f,29b4833f,5f4eae8c,f12b38bc)\n,S(156282cc,65317dc1,3323aae2,d5d83e8,b7113d59,a50e54d8,dc54c1a1,ffc85d23,840cca23,67da3c5a,15b6427,72f0cd7e,675bb8b7,fb5dd58e,8cda9fcf,cb21606c)\n,S(15afddb0,5adcc8d8,f1322a7d,f451fee9,873d4b8b,78b0c1e8,1d99f002,84aca6a,15465563,a129272c,b5e25bc3,ac76c52e,b4e115b7,b216a40c,145c4699,175cec9b)\n,S(9eec4fea,e9508445,4bd275e3,f8d0d6d2,9040ae95,c8268f55,918d5f3f,2f75865,b7a873a7,5fb4ef70,3d62a723,81df2ded,102726ac,81685725,424a7733,8307ed7d)\n,S(3aa7be96,660652c4,de1c82f5,cce1a864,c37725ba,848180bd,52e4dead,1a33f60c,f323d266,3e5d14dd,18fbab76,271f6c8f,32d7de0a,42724fde,f6ed3582,c886c402)\n,S(bae9e070,a8e5a976,8347368,c32b4287,c7a6a20c,b491bebe,fc6acc71,aeeecea7,b5791703,f98ae848,1a9c66ab,878f7c27,d37a3e0,133b4e36,82ccb2af,b518e8ef)\n,S(7b12ed88,be061d1f,7dab874b,17602bb0,ef5ccefa,54f9ff40,e753312c,335f5f86,70930f8,c465292b,b02ded5,59a235e6,c4c83480,9eb94442,8440846c,377498d6)\n,S(9eb22b3c,8faad620,ba002990,4a5d8d1e,8cb4a054,179e3310,73f4ae8c,def4e1f7,6d58b972,ee88dfd9,4e429a2,4f6961a7,d085f00e,8d6f8d14,ff2066e7,df68bc34)\n,S(bb2aa6cc,d8402cb8,e7a9a6f,a755c66,366c659e,bd2e5c85,7fa486e8,aa86b857,443e7128,674c040c,b0316d9b,3908bcd3,298e727c,c805bc8e,ca58894a,d51f4130)\n,S(c58704a9,fc3bb18b,c460c4e1,f17a880e,c0dce45b,e2caf759,72f55061,d59d30d9,75216472,aee1c9c,280aef07,7208fe42,136b495c,f80d8a79,e8309272,c6c4d6a7)\n,S(b7d7c721,70af0b6a,489c41a6,e817da2b,ce59f30c,88a82b11,83a6af8b,174c70eb,59481a78,52f3726,3a02ef48,dfb366ce,7bf170b0,af3c2000,2c1053e6,5dae1ef8)\n,S(b1386833,25f5450b,f4f68dc9,93d72fa1,1e636a3e,8b881ac2,f237cc44,42f3461,64d18f1b,87f9463,10627931,cb003c09,981c4a94,969a0df1,7f717830,4daa6cd6)\n,S(7e27af99,500cb8d4,d812a82d,29ca369,5e543231,8432c9f5,96f5b76d,c6d1bd8c,25a477c5,a275daad,10973822,40961da7,5385a367,6dff887c,42bd904d,8e885997)\n,S(62e04f6f,d953c744,aeca984c,bad13c91,f4e09c1a,d5441603,2bfbc277,5ebbfdc1,4f1f609,db0befd5,fe781afa,d21efe44,846f9f78,9ed9f99d,f3291eec,3cf3fc89)\n,S(b08a1f84,a3cbc3fa,f952247e,6d8d8d9b,1ba3ab01,ba03ef8e,836b94ec,dfe2e2c4,5027889d,e524fd0b,e6ada02f,4f33d1a3,4d0c3822,f0ca6651,ecebaa37,3c54692b)\n,S(d417933b,c7a8f68a,9e023d64,498b5117,850f8885,b6254256,f9a12a47,538d5bd6,7ad14679,21349d14,10e35750,167282ee,9a6f6044,b6c9d71a,633f4475,5b432ed7)\n,S(575909cb,46a36dc1,c270267a,10a62f31,941fb7bf,3699aa43,1a3bc770,fa37d5de,c12ef954,c937d6a7,bda47e2e,67d9ebb4,9434cda,e1571ec9,f604c41e,b49d6189)\n,S(5298ad25,cc5a6bf4,d88b693a,d32a61fd,efd763f0,e4008ca0,eee17730,4365de57,75f821d1,66b60185,41cf7653,9a0cc41,597b8b78,10fd1fed,f0da4542,3a26d5f1)\n,S(5aab0fa4,b0beb77,d5d2a8fc,c95d516f,1dfdc402,3e3d36b1,4ecb206e,ee8c5ff,7a4659c7,7c062356,c51ee28d,fd0cea92,a1f36d5a,b78a3ae,8b48ac9c,7fc63fca)\n,S(482fc791,7c739041,41b69e59,62b0b815,8a9bfa00,f203afa6,46973980,9b250a23,89b117bd,485ac6ef,4de8eae0,a9e96edd,a3615285,e33282b7,bf0b6a6d,e11a9c8c)\n,S(a576ceef,40728a7b,b63756f7,f3095c75,ff2ef84,c7933d02,b9dd8a0b,a6046653,b4c707dd,9d880fd6,d7a1ea13,87dcb6a8,e2433e21,8ef3a7f5,e348d2b3,f9a9796a)\n,S(3c9d7c33,f8c62b35,fe977359,f290dbd,c2b46fb0,a2fe126c,d06e0422,54d1527f,cf92e34,3ce9f624,84c04c9f,d97569d6,67065598,9418d858,aa7368d5,bd6a2df1)\n,S(56bdd1e7,363c52b8,2198cbe8,62ed6d7c,7b96d184,7da44036,2401368e,b2c83b89,505d385b,747c9545,6669809a,a9da035c,364e7971,7cd89417,3d1d5d58,298a1869)\n,S(99e0696d,ed30d242,bff69e9f,ff4ec88d,eaa3de35,34dc7f35,c2bb7df5,9f8b440e,2cd1fc77,3bd071b4,c9695f25,458be688,f662f7ee,ae8f313d,9c373172,6185acc)\n,S(7d5cb46c,81f4a4ec,f1e5d913,1772277e,d17de7ca,7a4b277a,d6b135e4,dbe61916,cc854503,d73e8034,7a6ad7e7,f5bab321,b130d7d,3d938423,9e0656d9,74971849)\n,S(45cb6ec8,9dda9aed,5242347c,a20377bf,c93ebbd,50e48ea8,159530f4,4f4a250a,411a2ade,aaaf43e7,240bb0f7,cde77d8f,846bc700,4721f6c7,4d313fbe,70ae38c2)\n,S(a7e23331,bf08ecce,2dda8c2e,a6c3c4ce,9bbbe3a4,4d40068c,e39e94fc,edea42e1,d1f12d24,144bb258,dcda7060,5348c1d,85faf076,fdd3611b,ecf6c34e,843788e6)\n,S(d81aa0fc,b0a8fafe,d4c67dcd,6fddd414,80cd5548,cbd6aa58,35e5896b,18797f12,92af7ad3,89320814,bbe53ab,4cb5bd26,3df11ad1,8d2ef235,ae9ba163,74495d8a)\n,S(8d379fd1,fc0acf5b,c96d03e,b73b340,5a7326ec,82882235,918a380b,c3e2669,f8c6063a,eefc0e2c,ef94d8d,ac4e5b5,ccccdf25,663d993f,7f9a0172,6756564e)\n,S(5e20f600,6f533af1,8f3b6e65,17aaa2a1,2876b79,c99ca059,c2791a1f,1e466e8d,b23fb129,57640a9d,d38bf206,7649216f,50b913b8,69d241c2,baedd5e9,dafac9d3)\n,S(1a0a4f54,80d37257,c62d1b0c,18dda7ce,f2b64754,be9a3d77,b3d80ca9,215026df,2f76696f,f4001927,9ceb5652,44d4a60a,9e353266,42bc2138,1191a51d,7661ca1)\n,S(be868184,dc2e91fa,b11833b6,f78577f7,8c190220,a2b46551,53cc8ea0,73a217e7,6ffa3f78,1c64c118,68abc331,beb8c284,2919d593,12bad699,53edd222,2b98a31e)\n,S(a4650db1,917b10d9,1fffa809,d9f9cdaf,f07faeb3,8f0ecda6,9c80e0e0,fd27592a,d5a6fdf5,647e26c4,1d7b9c78,7880c76a,b0cbc23f,d4c1840b,78717b34,2ade1422)\n,S(944b1701,4a7c7eaa,754c9e03,d56516d9,e21e254e,9a871683,7a14f19a,9ebaa517,ee198337,3822c796,3ae7df88,24687dda,eea01e83,c82e66fd,baa746ac,485a6dae)\n,S(f9e76020,cb9087d3,a60ba7ef,7ed5e552,3e5a3645,f61f9ee7,27d630b7,98d37ede,28371db3,433bcf49,f6d77711,d7ed9101,f5e478de,49c58103,b021457b,7a0b526f)\n,S(7ac0c7bc,e17509a3,e4dc004b,d18c322e,600aeb83,8fe2045f,6da348ec,6f178b41,8b5cbafc,33469334,4886f60d,ee7626e5,36e9a977,60c0dd18,7bab7e45,6b264956)\n,S(1d7ef98c,c8520f5,2310ad12,107351f1,966b651b,4b2a39a1,7a47f658,857e3bde,2b78bf4b,7be6f1ec,61cb235,a26e252c,71d91f58,69752719,8125712,55d47664)\n,S(fc57f5ea,b40add8,f00c2da6,c7d24540,1b24b6b1,f102836b,4041009e,2fc6d5f0,11d3e017,bbc33913,b7861dff,bc11bca5,5aea26dd,f956d21d,2f333755,ef823af1)\n,S(340c47cd,3b473c01,80526815,64e77f7,6ec29eb4,b6603985,d6ef7b64,29e2f289,994d98c9,c1de0dad,d27f3386,eeb7da40,6144e060,ef4db403,ee8a76cb,8e21bf89)\n,S(81b13929,f08e9a23,69127ba,3e6e839b,8e9cd05,b19a9bf5,2292148a,26bc47f9,b6c33861,ae8fe20c,7a6c7830,4dd03fc1,a281ea57,59661e74,7f9e904,e4261226)\n,S(6f325fba,15a463ba,4a61e2e6,82655af2,72603643,8a48075,f76c9882,4d7e252a,1f205971,70f9f48d,5421b73e,97bb6260,cd2235e4,6f611e9e,99b7f8ae,cf435d45)\n,S(4b388e91,fadb26f9,b23b015b,398c8666,91521b8b,484d4510,b3c162d5,834bc109,ade8365,9d59c363,3191c3b,20e395cd,13ddabe7,1933045b,cfd8e941,f2096d25)\n,S(2d1c0ab2,83c80dfb,ead3e083,76024910,c1d97acd,6c8be069,252bfd94,ac1a0db6,c4856c74,e5ef2e6a,17ebc35e,3b310f6f,8e7b043b,abfff733,aa3ed9f8,5a391c98)\n,S(4c77a1b5,b88ffcce,1f98fd89,251c0085,9d4197f7,d45bee5d,edfded14,a97e5b87,48b8135c,b067c292,6c316424,2392fb06,f698b6d6,e98b2ffb,bcdb028f,4d85e5bb)\n,S(d39cd5fb,11cabce0,e31f6fac,10cce3c1,c0bdbcc7,294119e0,2b433b0c,20e3a4ee,487695cc,8a8ec5fa,aafdfe25,3aa7d635,8d44e82f,77328e8e,4541f7bd,f629bb5d)\n,S(238a05a5,519ff4e6,29b0f86f,9d259eee,4e620685,a2f0509a,cc9fb1eb,4e89f5f,6772f6b7,816018af,ec95717d,a6be2d05,3d740ec1,80241798,117ed39f,91f3beb1)\n,S(c146bf13,72816407,b5f8532d,91210d59,a8a6db2e,54fcfd3b,fe910365,99f7ed14,e952ca9a,f88779c7,eea67194,3df6fad9,72b717a2,19d1eca6,33106f97,2dfdf0b3)\n,S(4cd9154,861edfa7,c29378aa,1a7d6d0,83b134a7,572383ef,3010f34e,19d40bea,9ad99f1c,b5841c57,5f7db959,362542fc,40b0cbec,58d16ce1,54c5944b,6ff2aabb)\n,S(d35f2995,2478be06,e86b342b,fd2d2cc5,ede30ee8,509da11,504bbffd,5884765d,a0f66db4,a21462ee,e51e226e,2d20d896,2c4edb1c,babc45b2,645968a9,c7810fb4)\n,S(caf9c953,ef1f57e6,905bfec0,2fd64fca,92ded9a1,9435ad1c,a672cb7b,117c6fa,23b01776,7662984f,9c2f9e43,756ed3a1,3a574960,558db4ec,8670122f,472d0ccd)\n,S(4bd40ba0,21d2beec,ec7317ac,df3b719c,179ec012,1274a198,d0ebd9d5,165bbfaf,9a5751dc,d7885a78,20d8ccfd,1db3e3d,aaa2bd65,b7b6fb2a,2d7b2902,c629d81f)\n,S(560928ae,7b15a63,62eb4444,d4c0e069,1ae43323,77a2de40,83f056b2,70259814,ae97006e,fa5986b6,5da4ddbc,2bcea172,f12945d9,b6f5184,4027085d,bf644794)\n,S(7870209,38e53dac,8e250835,9e41e313,25b09faf,95b03a8d,c25e83ae,f8255301,49fd164a,915e0af1,a66af8ff,d215d1d3,92e4996e,5ef68f8f,51a4b895,145bbd90)\n,S(7aa3742a,6c82c90a,7e6c1b04,a41e4643,47925d,66f4e7c9,ab2aff17,e64932fb,7317dd5c,f2cb9b3d,5cc0fd6a,c433d1be,d1dc8345,b26e10b9,a2b8cbff,ce2db0c6)\n,S(7a400535,be3b134d,4572e0bf,75c13098,dccc0f04,1c10068d,31e2b0b9,149c2e08,c00fd102,309626e5,a2f97ef4,e0374a3e,de0a7ed2,e45aede1,40521086,5d10466e)\n,S(f4d71adb,438460c7,9003e150,c4143557,ffe30efa,eed122f,dd97c572,e1dbbbb7,e73588e0,fbae054c,140c0474,348b7ce2,92a1976f,e8c940e3,62c29ea4,31bb719a)\n,S(34b68d32,810bd1ae,51d0c82e,ef99752e,8206aa04,8c5c30,7c3e9a25,b2d68b94,4d044a,6781875,6aeb8982,61bff840,a3ab951f,bf60cd03,e8befb25,97203c7e)\n,S(f83b78af,f18f22b1,f2081707,3dbb9c79,4f180b0d,8871a1af,94d16d29,5c71f1c2,93ea5b8,c7847ea0,2cd5b783,5021d37c,dbbd395e,fe6eff8d,866e333e,9d6083e)\n,S(a4a0d5aa,f521e1bc,2e818063,f4575f1c,99bd2447,80eaf848,2737b297,b2deaffb,3906373f,2111a47b,102b0294,f9fe1a4a,7ea9a9e9,aa2d9595,68ff8419,9f1abd97)\n,S(cc211da7,28671182,1f0bca25,b9703fdd,ac9d0277,7e1829b4,4d9921d7,998011ff,c0cc46fd,5519211f,3a4cfa43,d84e5b3,bfb316de,39a5f4,9a50b1b1,8dcef321)\n,S(8a07ed5b,e0397b5a,8c33ef,108df270,4b385c45,c8296593,1ed3e391,17b2f531,432023e3,8fc1a637,fb5a92f5,9911932d,f5cd23f7,eb16ef68,c8c573fc,86e8c1a9)\n,S(8add7841,86b68399,b08a0bf2,a92a3987,36fca803,3807b564,f97af438,ac70d49b,758cdffc,ef477c3a,fb3028a3,2866d860,c65aa2ef,7b3d6261,9664ace3,658add34)\n,S(ec6b9f2a,a1cdedaf,306b8a5a,b021e430,e9931126,a1c505d4,a10e71ec,3cc60453,8139b262,40e2c1ca,8ec89808,2a37d7a9,b78a7e5f,6330ed32,f9786cb3,c4ddb722)\n,S(22ce2541,dd8a47ae,227dfec0,95ac361b,88ae2cd2,c9547344,f551f6bb,cada196a,68ce4f4,a677a0f9,60aaf4a4,f8e83a24,ebfbf46c,6ce2a470,255d2ede,c4431581)\n,S(ee7dd0d0,3e5b6d8c,ae78caaf,27b902fe,4136201c,12a49551,bf208c0b,f88bd33b,aff0eef0,609bbf68,7ce2aef,9f48f87e,67aedd82,e5342159,3809cf5c,da4ac004)\n,S(f7f9a352,ca18b2f4,3aa18c00,9ae0eb31,17679db8,d9fd7e5a,41b77e85,b54140cd,afd30383,ccd2a6f7,ae76b953,5bc80330,4419d38e,73e12d1e,dc407ef2,f3b50326)\n,S(7793ef5f,8e57e872,ea9fbb18,bd710ab9,6ea4f646,134d3308,930cbf62,e73f0e1c,8d5b3b79,3573090f,a4a7e7e5,c38fd987,e889bc3e,720e05b2,43e856f6,32ae7cc5)\n,S(db743211,ba814bf,e6371ddf,d03ba554,b558548a,a90e81b8,e1421321,656065a8,8236f24d,965a9003,84b382e8,d772d7e9,2dee2ce6,c3cb3388,3ea627d5,4a5170c4)\n,S(48c22865,6e51199f,6306a6f1,7dac1e6a,13f82d42,61de0f0a,9158ba98,715d3cf9,19a2a4dc,35d2bd03,5bc5daa2,5526598a,8eac11c3,52e5fe70,be726531,747035ef)\n,S(70a28bf4,ce75b491,582b48d5,9a5069b,9dcc1e49,c41702d,ee5d688e,6e643a59,7183750e,2995f655,1b58d5e7,21a5f33b,69045934,27f27f34,f8ebf62e,74e49de2)\n,S(a90d8505,596b3d01,a5e8dad0,fe652cb2,4a008a7a,61ba3cc6,8401a7a5,5c2e3132,f98af047,6e925c87,e13bb7db,f992b81b,1be564b6,8589cf2d,b79e4800,3ff7b0d9)\n,S(88647576,8e960c09,6aec9832,448decac,6574491c,df737dca,dcc42b84,d7e775bb,ad94bcbb,7309f483,19077724,2582f5cf,a39ead6,a4050afd,89a49ecd,7a9090bd)\n,S(c505d2cc,ef72aef5,8130f472,2ab3b2c2,3a6864ab,bcfffd5a,725a6df3,fae02112,dcb82329,cc51dc7a,54e7104,462997c,3d135d6d,5c82463f,45e875f5,8738652c)\n,S(24a1d4be,c709cf8c,8b8927a8,8bcfb11,43b0d579,10e0900d,68fbb682,d4e14df9,9ccab057,8440f6a2,edaa4f41,28f427de,adce5584,692b79d,624e8724,572a043f)\n,S(48c44581,51df1654,fa78370a,6975e59e,576eeb40,e94f636e,72aeb37e,8fbdc4bb,f48e8dfa,bb085834,43a7b495,ced76171,348e92b0,41b9620d,3cd5a84a,d9ee4eb4)\n,S(42a7838,d33d0b15,b4409534,18024a33,e93ccad,946b50cc,a543ea1f,1bb457da,dc2f0e6,4f30e973,cdf6289d,d8f6455d,51c2da02,bc4e1d13,6668250c,e4dd791f)\n,S(80988f4f,c2dfcb86,f1f65196,d93a6cfd,5c664e1b,5f8875d2,61e7c4f7,b2ea31e4,1e695c33,b526d582,6210e694,49c4673a,8697e1d4,a197c9bc,a3ecafda,2a7d5b93)\n,S(a0ae003c,65d7f1c7,b65cf828,124701b3,876d0be,587c2589,9a618c4e,7b79d480,d7f4ec52,bccd57a,9515e80f,2c79be42,a6b53ca6,253ee13d,ca33c917,ff2ddf02)\n,S(392f57a0,ebe08b06,cb4946ff,3c1df6c7,c5cdd97,b9cb2190,dbd4678,cdbab3bb,1be9f9db,dfca7981,b3dbbb1f,daf50e6b,c5662fa8,1b8a58f9,9953eebc,d1d0be1c)\n,S(cd904f6a,3d8c4ebf,6ebc4e5a,e536c544,4a04e278,389d771f,d5e7566a,fc592d3d,e3e10f61,a15399c5,f3f29626,af323cd4,3d6572fa,bad4f02d,cf76c0f4,9785919f)\n,S(27a4480c,df5782bf,52ddb140,ea5a908b,38dc1ec6,a570580d,2b72b922,e7eb05d9,bd96ddd8,1a6aca1f,88847632,5a6d48c8,4d61e76e,b4d0d957,15d39f80,faa42f3f)\n,S(6673ae66,3511292f,fa4dd8cd,bc0f7b36,613c56d2,775602ff,a8cf9302,4329f5a5,d8b4ffd8,8ca2530b,18d85762,529d056,e8048cdc,51730082,2d24cf42,e4053141)\n,S(3dbae13,5c395043,d5b88161,4dde355d,5a669076,98c36b23,ac4c24bf,80e34f2a,b7d46059,3154fad7,eaa37c3a,291c6c67,16df2944,4274b044,a9f12ac0,a34139db)\n,S(f2db4c09,1c3c606c,9784f6af,7dbfb26c,2b18bae3,b22f13bf,4188d761,6cbc1371,8c84e295,f57a9722,260d5816,c5d57719,c6fe2a12,3ba20a48,189bee04,ac252f32)\n,S(918e415d,92e768e9,f5a875a8,aafa7dd6,66109cd5,8fb6044d,d2c8640b,f6b966a7,b53400ce,9ee9f6c6,9cc35b5a,3e04eec3,dc89c931,e545068e,ed4a818e,42073e71)\n,S(5eda3e22,bbb8c368,82d46c19,2068b3e9,a65624ae,31feba8b,df725d5e,47bc3437,1cc2c541,ce3ad8fb,ac3cfabd,a492c03,87099e1,659cbf88,bc8f27aa,f9a2fe26)\n,S(7df83e06,9cf09a92,5405e0d4,3cf0c7bf,52a8e603,d286e26f,f273e218,b455e61c,9eba2975,7f61b054,29c9e915,a092a591,ac1d6044,8a63a8f1,313f4018,1650f4bd)\n,S(b778c25,d78b0bc4,68dcdc80,5de93809,1c3c36c5,b5f9569,a9394b5d,c7afb162,901a4ecf,b4821145,c7d9e56b,75e43ab9,cb7ef8fb,1d384a4e,27033e9f,90b80fc)\n,S(dd4965e,f6fb759,104f7877,307e2a6a,f837ab6,8c19aa40,6fbea75e,e8a7adc3,45e92312,b5c77585,3c4b95ca,6b4c1740,a70b57c9,97124883,2c53d291,4b0fd4d8)\n,S(ac971379,7dffd8d8,2e33f927,48ca063f,f1c8ccf2,5b88fb6,bf80946f,1dc9dede,6ce10e3b,ee4db87d,40e8de66,fb5263db,2a578d6d,be100fef,d6e28bd6,7377bc26)\n,S(6046fab5,37fb413b,29797312,5a6049b5,5c085194,4b058264,c39926ed,fe85c6,dcdf9ed1,cbe469ca,2976333,5a159e42,af6f0d32,664ffb5e,173986d3,a277180d)\n,S(a0d94b05,8e3b4d30,7f3b3f09,ba5ba28,d0285a3a,22cd577a,1d949b8,bd23f1ae,37fcdfb2,e3027e07,ea77f28,447ea13,93971c67,974304b5,dbb7621,2ad2db10)\n,S(da15b971,1b974ef9,14433ca5,71175233,693cab3a,dfd5f6e8,cf034254,6f73dcd,e08c7f62,90f87fc5,4e2f4ec5,a5a93d19,f4484868,3b5ae9d3,810b0615,c7e79402)\n,S(b26ba5d2,72a744f5,562cd745,a3f3f143,32980458,60be4e97,d737fbb9,b3b0d544,3d308307,9830f281,14de6c5a,f3876446,507558e2,95353dcb,738deabd,80c0ff20)\n,S(fa26c55b,bac04fff,ccee0610,ba9b60a2,4042aa08,7a564ffa,b891e087,7a2185f5,5b5a62eb,1ff579b9,ee4c5d6e,ceeb57ec,e9881b47,dbfc24f4,3b9a18d1,4addf4ab)\n,S(5ada4a59,4802163d,4da685d9,b7479f,4b70b489,5ddac7a3,b06a1c4e,a5f46dbe,2ec25e70,871b4958,81f6b0e5,cf821b91,febe83db,a52fe2f8,1a2e4e82,165c7e3f)\n,S(a57751d8,895282ac,bef2384b,db4817a3,539899b1,e7fe7a62,2596ad18,5dcf878f,651eee9c,12ecaf92,9eccf109,635680a,a7499537,f2054e2f,69b0f062,c820784)\n,S(3f17f0f2,6a540098,d18f8d88,ad323e9e,e300b029,b7b8101f,6aac6ece,8d375f3c,9c0713,79e35319,7f1e76d,55616e5f,8e573a54,b6bfa56e,5dacd2aa,e2e0deeb)\n,S(eabdf476,d2e9d76d,775388c,da759930,4e1ebd59,b3a7e491,e3c9c62a,4d0968ba,f4bfd5b5,e0e8ab41,a04c4cd7,763b243f,b82f56ae,9f08a6ef,bc365f3d,fa227c4a)\n,S(c5b76ae8,dabb664d,fc1fd499,36399e3f,c2b7366e,a21cba10,dc7eec7c,5c93e0d3,ef30249,19bc03a,c24c8544,9467728a,c160edc5,7c901e64,b947f298,9bb1242)\n,S(7161dbf8,6b1080bd,bd6aa47e,dcdf8a77,17b7e281,c692e9d8,739caf9a,f3f23d6,3c30b786,b095288a,4522749a,3d32a35,5a8bc694,cc9cf7ea,989675e9,a1688e8c)\n,S(ed6a7b49,9b74e62e,53183b15,6867d41,3ce902a8,4b71fdc4,fa414f8f,249c2ce,793d0356,1bca65c6,be127ce5,a1034b9,86285fe1,f52075e8,1a9b5bcf,87348c4f)\n,S(fe6e1abc,3ee3be4e,22456f4c,bf93810f,282f0fec,96ab5cc8,2b35b08,54492bad,96c76282,3adc2cea,1563c02b,fdb25b55,eb15e769,90a7ed7a,3fb8aabe,47bb077c)\n,S(979e7ab1,96e66818,b67bf79,31232826,713648bb,ad956add,ed594cdf,8aec2937,696a9505,e3c473a7,2df68f96,13c2e494,406782a4,f92a8fd6,5017a83e,d7912491)\n,S(9f947cb3,f859f2af,11a63400,800c18de,b8813c1a,b396ebd6,a1d5bf4a,9689160a,8efeced6,7f1e6fdc,191ac965,5002a02c,386a20b3,eb2aa1be,7fc12008,b8bead1)\n,S(71790030,58caecb5,dcd2e281,b42eb59e,57de1e6e,b77f6bad,7d2d1897,6a512eb4,abff54d0,e20347bb,c10a79c4,127f5f7d,868176a7,4e34077a,8ede1d54,7e339483)\n,S(d786ec15,c140af46,841b7eb7,de5fc9a3,c0636885,3950bab9,ffdbad01,d836b8b0,fc90191b,63616a44,72efb2ac,a7d84da3,4892af1e,25bca0e2,d41268c8,d381d062)\n,S(2d553f03,31eb83ca,edf2508e,67054734,d929367b,ffdd5b7c,dd78dc6a,2e724534,9abcef4e,ee588e28,fa1dee0a,b8c426c1,67d37cde,f8aae9e4,248c036b,baa1af70)\n,S(326b36b,eab4d932,c40182f0,fde043ff,d6b84b16,72fe1dc7,3bc7e518,6ef68062,9d86868e,2e871ce5,c3488624,bec901d1,47b91bf9,a3154cab,6445870e,d51e8f1d)\n,S(f7a6a26f,4e3583bb,9552556a,5d248735,7ea4af7d,ad1f7a92,717d19ab,34dfa11,7ace27e1,dab2dea9,704c01ce,50ea3de,529d864d,9a5fc11f,fbc0e8c7,81778b2b)\n,S(8ca708ea,c072334,42eae4e9,eb0c7b45,83e153ba,84ed7a0d,3ece41f9,4df6cd15,33f41d25,e446c47b,68ce1bc7,d1dd1740,fc701538,3ac90e05,1dc89a9f,dc97592b)\n,S(4fca2ed9,e1948697,208a87f9,a890cc96,4aa9e5e5,7c7274b1,deea92bb,586875da,98a9303,4df7185a,df9f557b,b7def9a6,41e7ad5,a3f24051,435673ff,12f0580)\n,S(466da0aa,97c68c05,21b8fda0,fc70d74,bb586eb3,da7eab4b,6c104404,d9234d37,5834296,f94f5b54,beddc0e,3d7f6004,659952b7,90a6341a,de99ff26,5530e5e6)\n,S(ae22ae10,d016b54c,c0b5423b,3f4c332e,3180ff23,c279078b,864e8e07,77e26a5e,ee21d64b,d6043d56,de3346dc,f93e2c40,b9a51498,b4d7df61,d476d339,7a2d0c8d)\n,S(58cd60cc,ea7e0896,2f65a353,5d45ad06,517fea5,575c5511,277103d9,fabb5167,175a68a9,850b4026,bc7b5684,e859c808,edb5f3,7acebc47,9ba489d5,5aa9774b)\n,S(4be8a0cf,7ce26101,49cd90a8,68f4049c,43054aa5,68bfb2a1,a5bfa386,9b2b485,a3bab0f3,e3bec469,f779404b,d025ca14,79e3f6ca,9d496f8f,8ce4aa6f,b7e3b404)\n,S(428599d9,398a2c59,58c5f74f,1226605f,3c5c8e74,ad8f9bc2,d62b8d9f,d679d3c3,12a1b04f,add5d70,bdc5e15e,d6347f7f,6785c425,61f14ae6,275cf050,3a1bd5a7)\n,S(134ba4d9,c35a6601,7e9d525a,879700a9,fb9209a3,f43a651f,daf71f3a,85a77d3,21c112f7,6a9b9b21,e2e3a7c2,8cf500bf,f48aaf1c,48e0e13e,f15618b9,ca62287d)\n,S(d53cf8f3,cc5e5739,bc9f9144,a44e7b7b,bb8f2c36,b50844ca,9b2d9cf0,cd0616d2,799c23b6,c57aac44,90d71450,4388cfa4,689393ab,6f30a347,4503400e,c568e03f)\n,S(a1e22cfd,e8d12f17,eea1eca4,ea0b520b,6598c036,d1bf837c,e23bc300,a384e5a7,cfbb52a6,e1fb6a65,77cd0377,8bc965b2,a3df592f,f73c34d2,a91b8008,74ecc295)\n,S(72bf047f,a0da1391,78b97ea,7b317168,ed0576fd,71f49409,39a8daa5,2a02ead8,f8d93088,cb3457e,7828ba9c,bd8492e4,9eb2bf0e,2e23bfb0,4591e9bb,5273f462)\n,S(c5373038,4b951abb,3bcd1f4f,98d983bd,cb5b36a,42719531,c4d1797,2e9bce59,d921f353,a9f7309,6dc16028,f9e1b562,f406bf49,54d78bf9,f2b4c8b9,2db26a82)\n,S(ab20d194,e2a6c4a1,5705d3d,19300810,89342b15,e9fc6224,7be58805,a8682a5e,44dc39d1,8342502d,cafafe40,33c4893a,2dddddd8,ad7b238a,efca50cb,5d5b3186)\n,S(1432ddfb,108ee664,2eaa9c97,585f47b7,b92a5ae5,39a38093,b8f3153c,e971c8f9,5362084b,5482e375,1662aa95,dd3b9a6e,65235aca,b0ce1eae,f5153951,1391e269)\n,S(f199ede,4a69d778,61e107c9,376bdee5,6430e279,28c74d75,66e65589,be8c433c,5e7f6fb7,1b68a535,f407a9ee,2e42f65e,9835bcc7,2c34b8e7,712e5332,a65e9ac6)\n,S(b24dbf51,47452b5b,ad94bf4b,493120ab,61ce2ea4,37b3ad71,62e568a,1d595d1a,b3af5a90,8d063602,6b3869d0,c9f31793,61afd6c3,8db99cb9,77b14e0c,46427518)\n,S(d7fc29eb,b681e025,992d9ef7,295db58b,40f36c64,d1be10e8,c8e66858,d4d0d9aa,c587764,ca84b3c7,2f95eba,eb62494f,ce391202,90c42b9,e8b2105d,ed972595)\n,S(5c71e90,d5f00ee6,e033f0c9,c1ac495b,d148a31d,143a8e3,59a99c7d,faa3cc9c,4acc164,ea3071b7,a4830a27,24135c49,562ea631,9dc4455f,808f1282,4e3bbbb3)\n,S(4c9904a9,a33f7e33,9a3d85ac,c12b21ad,11f7d7f2,76e46620,76878593,9d11eaad,2387a445,b0967403,86ce4634,62dd101f,95650365,ac02ef1d,2417321a,3fac1df9)\n,S(58f457ec,12d22482,2a91b78e,26f7d8f8,5fa39d90,59fb833c,bce4b1f2,5c9720f7,90808a70,79d4970c,b2b70ae,390844a,2f0283ee,eae05a5c,7d2dcdde,be656f2d)\n,S(9867259c,51414805,3be6a73c,de522d91,a8d8b359,9f9bd39b,9c9575a3,90405bdd,9904fa47,34973bc1,77a3d0dd,f0edc0bd,cbd77b36,357734c0,a0feff89,4895f3b4)\n,S(663b4991,913148b6,631d16fc,27471938,20a7ace4,ee85c335,17b60cca,b5e12b5b,1b295a18,16b92c5f,15b88bbc,177dc011,f6ef0760,15b5ea47,9bca876,ae072070)\n,S(5e3ff13f,bed18235,fe28dcc0,72f09cfd,41394cd,a9a3aa52,5286cddc,e56acf05,c1488c2c,903bff6a,411697f4,44e6e72,6ed9c0bc,5aa87cbc,ed8f8802,6998fc7f)\n,S(54c8aa07,2f1fc5a6,ade56cef,d7c6aae4,846f6855,34912868,b84b195f,78bbe14b,ef11dea9,5cb01680,e7205f1c,62aa5242,2c0db969,9b2a0202,966873f3,1fdff34c)\n,S(bc69e00d,4118d8af,baef7647,6e435883,2ae9864b,f154368c,e2ccdadd,c58cfd9c,148aea9b,2babfe00,3a6592f4,d3788893,5be42ac8,a50f68d7,ba2cd738,47dd9c52)\n,S(50ccf184,c0213602,af114924,fe100f78,1f0d0cc5,beafb671,9dedea00,c7c3ebe2,b6559878,d7c33082,4588dd33,3054c4d,2da86b8,ff23fa9d,6413920c,d876e36b)\n,S(c24ca0a4,8ff2cbb6,235ef33b,42ba032,386d5475,3cdda799,e9bc53c0,5c299aee,8555bb16,bf4d7bb7,5c0cbdc8,8594454,bfc819de,72c3954e,76b65780,2be28fe4)\n,S(cebc8853,3f6c3a01,58dfab12,ef52b4e0,a7473d1d,209b3585,bc94a13f,a83abf17,42fe28d4,136bf80a,7149a0b,7ddce53c,45e23c0e,7be85fcb,73c0e66,2c4c0593)\n,S(7d921a84,65b11feb,7a755a4c,5d96b6b2,f17e07a,95db112d,48c03bd,18f61422,f0ccffdf,7f04e350,13ae7f36,411dea5a,ef69f220,790c37d7,354ce5e,83925f4)\n,S(b6909fe5,6824e868,f4cbdd10,d3d00ca,23e5b4,35c78aac,c78a9a1e,321d178c,3d513c55,136d61b0,73dec253,e1ed817,782d9f76,b536d3f7,c3b0d1f,d06e6c1)\n,S(5a3df3e8,c78c0fc,56971dea,ced3a6ea,e1ef668e,2485bcb3,d4e24408,7f53cb74,960721cf,316278bb,56bcdd1d,9f3385fe,8feea6b0,661bdf1d,44771067,661aaacf)\n,S(dc65c06,50cc30e4,d759fa93,d4d0ab65,5cb16591,289206d8,7a988290,20c22f9e,be39ae0e,a41a81d0,2175dfd5,5e004e19,fa925a99,2166d862,296899e,2532b6a6)\n,S(f659d02f,f2d4bc82,9f816525,24019a88,6ad539da,3f38b083,5d8265cc,bf3a67ed,bc9c7a81,9036c702,338c57ef,26134647,2a22b8cc,5543f4b4,4a4f7d4d,d4339573)\n,S(b89bbc05,420a8a65,aa03441e,da1c54da,9ca84f11,e85a393d,47cc54b9,78b8e5c0,5f3a2fba,4cef4457,ca6befe2,7dd3f9af,a5d8b6de,86679eb4,c877c7b4,cf03c08f)\n,S(b9bbb789,690b53e6,e42266bb,853cfbbb,f6788b58,b325097,a55470e3,d4cbc3cb,1f984f38,78427212,cbfc8a93,8c1f0d87,59792ca7,17635c75,71b2c4f1,29e35c2e)\n,S(d8ae91cf,8a99ef6d,2ca0c15e,3132974,33cd46cc,55a2c8f3,9f909e96,7d50006c,4fe4696a,79d2f269,9fecfce8,8375cc1,81c2c2e5,4109f380,3377a020,5496d733)\n,S(35dc2c70,181aea7b,ccf6a15d,1f708c87,cc8bc5af,93671c97,35867367,549357bf,6f27dad,a9abbe5e,5e59141b,78a2e6dc,5b5433ef,dc8c9cde,a6269c2a,68346f87)\n,S(a4c042b7,d54b67b5,877442e7,2e81de4a,7edbe667,f00838f2,34f567a7,9e3791af,a8c6f7b1,6b23a9cb,64732852,c9734547,69ef3e4b,9165ebf0,a1dc4967,36c73242)\n,S(d6ab68a3,353b6c65,3836b66a,8c39f2d0,892cf856,90ebb56,a5e8e4c9,e669da34,4847a9d5,f39ea1e0,ce392c8f,9e63e88f,8f3feb9d,7b2a05c7,23a932d4,b07e38e4)\n,S(e161c34e,644eb3f4,fa217d33,dd3129b9,c2b85ad6,40b56e56,e20982d1,c5483d43,ceafd0af,a8cf7a25,be092307,22c30e41,b6ea151c,d027326e,5152aba8,d9a50749)\n,S(94959a2,fdc2650c,b4b0219b,83ac99c7,c477132,eeab585c,1fb262e7,6cca22f,6243f3b6,ba7d4f26,24f7b7d5,8e070b2d,64610aad,b281b4a3,b93b030c,ac0cdab9)\n,S(491129ee,3130c2,f262c4d0,a1bfede9,e470c3cc,8e80774f,52ea023,67e2e3de,c1e61e2,a5310866,762a0cf0,ebbae0f,738b9527,46001aed,a991e0ee,d95f0db5)\n,S(e2967539,b0b29fee,a668eebe,eb8e47c0,1ed84950,a1f9fda8,6884a421,5ab6f265,c304cf3b,b7faabe8,cfeab6b1,b88d3d41,7e950963,745c2479,85211d50,888346dd)\n,S(d90a380f,5283132e,7d6760ca,f2b28576,49445507,b8e8872b,d0e1d5f,56a15af5,97fa0739,7a1357c5,e24d0a3e,ce608332,107e41f7,c65d3c6b,98ed66c3,af30a4ed)\n,S(cb917a08,153599e3,e531b1ac,63fb8e71,fcce572a,29fde1b,17de843,a99ea2b5,701c08a4,a9da11c9,3b4be64a,6832af1c,900ad3c1,4b4dbe70,c62e3e08,55b41b6d)\n,S(e6ee53e2,98efb026,bce900e7,8d31f3c4,539108bf,d4c5139,16417f8b,49199a0a,bedd41e4,751f657e,8cfc65c3,2a82f981,4b223e62,95ec36cd,da5125eb,da736429)\n,S(5f777c41,f4e3441e,75c66f28,852e7815,59d0f3fe,b8b05b59,b6966fa0,de84df2a,7fcc66b8,127d26d8,e0ff69cb,b80acf44,bae5546,edc9bc52,90b73da3,447a2731)\n,S(16d312a8,1295ab9d,c08f9fbd,61e6445b,5ef1dc51,fce19d,89f04e7c,66ba2e07,6c555fca,2a1d2f4a,24ced2bb,c3966f4e,1bfc1912,eca39067,503df586,41a4d4b7)\n,S(660d3993,fa887e1e,8b05d80b,96e2b70c,341c3ba3,351d2562,5792acaf,3859de3e,87b06f5d,4c6f854a,8714eb3a,55454346,f931c21c,c77da23c,2d069d33,7dcf12c)\n,S(9d45e660,879b6e8,b8007a8,ba7fe7f0,c7090cf6,9c733bf9,43f4eef9,965a1ae2,c81a3fd3,9b6b83ba,d163c763,f3010359,ac050e64,a47167ae,2ca41345,c7d95662)\n,S(c95d92f8,c81d15fa,a68f645a,c1ebebd8,57c6942e,e75ba13a,3a4eb9b0,c45c43ba,2f55ceb6,c1de7877,7b322a91,7f3e48d9,480b80f,d49e362c,99f8104b,a20f392d)\n,S(95d445ff,e8cf8240,fc4e9856,9d41164f,50e9ebcc,1fd3bf19,d4309de3,34b4c97d,7c391704,a75cffe2,f8971ddb,417e8158,f97a3688,6841f02a,c4b699b8,df6c0d32)\n,S(40f028ca,907d6521,df1f052f,ba5268f9,a60e705,bdf94328,17881b44,1500170d,4eae26bf,37d04379,126ce777,b1fe1115,8c34d077,bba66994,78ede7e,244cc8c6)\n,S(dab90c34,e7460068,d80d2be2,2bd81f9e,667bbd96,4e30c23d,3eaa7a75,a61e862d,cafa2892,5128bf3a,4821cd14,8503ca8a,86f06388,d21df6ee,af92d514,e66c5f1b)\n,S(6df2280e,381ef8cf,922505d6,7646c1af,105f91c0,59e8e7a5,3ae2e7e6,cb456be,d94a020e,7776b713,b31aff5f,d72be6c,f29bfe46,16ea3d29,95913db4,698ae3ca)\n,S(a13d83d1,3c60cf65,cefc8692,f5d339b,2873582e,938373cf,3e4df54e,ae32ffd2,8f511212,a65d8963,d7df7ed6,27d87fd9,208f83a,1a4dd14f,ab0593d6,38ac71d0)\n,S(ad4c1ec8,39950ae4,a7fa551e,5aa637a2,e5d40bfb,3fab696f,ea886a4f,40bf2167,fea9b599,202841d0,c3afbf08,ef1da210,cdd92a4e,6cad485c,a0d5275e,8a5dacfb)\n,S(64188be9,af657254,1314e661,848970f6,35a0b6be,7e594824,6dcf36d8,66840610,58880b5f,c3df9b6a,45b49ee6,b90f6b5f,f3fc440c,37855167,a30ac013,3d48e53)\n,S(9b71366d,a66b165c,6495e4fb,46ecdc15,84a193ca,d65ad8b3,7a01a3b2,cf2e43f6,d7315165,ecec296c,4b71a860,f3b2f0dd,fb9447ed,5c59a458,8b81f679,34321301)\n,S(4a3c5006,74814f95,9e9c7726,595658ff,84e369af,636f6aff,ab579bb8,5583d395,1b495757,1a302c2a,d1cbe53c,2ba34a6d,66bf1aa1,8bddad33,679e4890,5f9a21e9)\n,S(e4305e5f,72c43558,79a749b3,d563d4d1,dca704c9,c8867d01,ef503cf8,97c90034,ee563dca,4d31945f,c536a318,e9297d28,81954b37,af992722,9e4e0e9,1c16244d)\n,S(3aea4eb8,ee74c9d5,2259f37a,da33ae1c,78f5dd8,d97511b0,2e0a0201,82840a8a,8fc58135,757b8c0a,a8f2c2ab,ec9d9152,20ad2046,f429667c,c4586765,10e93e87)\n,S(58e8e94d,e9f85066,7cc4c61d,acd212f4,77454942,33deb015,858e500e,9530228d,5a95aa24,fb782a4a,e64e155e,eac2b644,cd614315,9b46db6c,9bb4fe4d,5e5fd690)\n,S(6642c782,7e1df912,ff54dbf7,41fa1567,3e9c3aae,5e7630c6,9cb74b60,c070af1c,ff338a86,34a404c0,cb26af9f,59df36a9,e1a848e1,ac178b25,c37ac177,db45e947)\n,S(c5c69fa4,65c79a50,a98996ee,cae55474,5c544a3,ea838a42,e12a733e,9181b30a,6e805461,5a424a9a,1fc229b8,7e594211,697386ef,189d1ad6,ac75eaa2,5727253b)\n,S(f4faf099,fb16a1e0,e5f64428,5317d91,a31daeed,fbb6a6ec,b70a213f,ee95217d,ebfd8445,42fee872,1f721f3,11ef28e,30618bd1,bdd097c1,ca573285,5b079734)\n,S(773b3e69,fda8abed,fa61ef37,57101756,9d9d2a6a,ebb4fc5d,d9049d56,9c66b76d,1bc051c6,302a383c,dc0756b5,114dfc69,1dd2180a,88a4ea9b,6acebccb,a59f27ca)\n,S(bcf80e7,b2b54cf7,971fae7b,db8b3826,85acc1b0,f987f352,d9b0b3c7,ac78142a,20620b00,8c010ad9,7a98f093,8d9a381,f9935d5d,4bc9b060,af2ee6ab,151eedce)\n,S(865dff30,47f31564,99337316,ea20223c,5967e034,83d92d54,7486fddb,fda959d2,2b655c9e,37697f10,5535b736,a31b2c6,7f5726eb,602f1438,f808ff62,4bac074f)\n,S(e48e0e18,101eef40,f351067e,63d2b34f,4fce76c,d204d6f8,85d2664d,fbc92d3c,594061c,8d3f4748,bff85cdb,f70a4035,5ad826f3,46d44aa6,7eca3196,e433bb65)\n,S(9807e350,7a03e134,9bca9101,cacca5d1,a564b647,8c906619,61ba503c,5ee15bdb,301e68f2,d584b1fe,3eeee7c5,85cb4d0a,26621bda,229589cc,2704dfa1,1cb8d927)\n,S(95f94e75,8602dcd4,60ded52a,c9d7ab40,1fdf1405,b271acb4,133a86be,cfe5027,f08d34eb,e9cf1b1e,78e1fbec,452e1ab0,412c642e,1328b2dc,f5e08b08,38aa3c51)\n,S(7ffa20eb,ebbad406,deec68c6,9bdb7b0c,7615a56f,5c62a646,a57535e1,68a82a31,230241b2,3dde374f,7a039eb5,5181e954,f0472056,79edc688,7c4ca6b8,778333e4)\n,S(1dc7e0b1,487fbb33,d1ecdf84,7bdbfef5,f7df9f31,d07ff024,be063a51,53eb5498,ebcf72da,18a1a55a,5aec4aa8,efe09407,263a7b36,f09552e,22cbceba,7a3cf980)\n,S(a8052e02,e39d9981,2ac6c4e6,2cef526b,9cb29843,127f2227,50a8021f,4ced5cd8,9011f0b4,9dad7e5c,11222b64,c5d8c9fb,297d9afd,c683f545,849d833d,f2697220)\n,S(3edfc4d7,f1f699c2,8e8ac2e7,5cd93e69,fff31607,d99a8195,30603437,f9bfb20d,f901260d,68c6dfe8,aef8879f,ea1ba009,a1e1d931,fa6ba39a,ce1e2673,ba759311)\n,S(fdf8ae7d,c10d01f1,c39bee75,3be3307b,53307caa,4af0e8dd,9de7d696,45ce527d,2425a3f8,c6147073,3a44d3eb,eff3d8cd,61e5fd55,ffdac357,d7906600,153a8dd6)\n,S(1cd5ba80,fcfc77c3,d06e230e,e7ad8ff4,f9ee6c60,a71d37b8,3718d8b3,15d5a4e0,f90ac118,30b963ab,fc64492b,415db7e3,47eba55e,d2c5a64f,578a13ea,b4435cbd)\n,S(3cdb43ea,b7afc936,24b80269,18319fa0,e75de21a,c0587af3,541e492f,1510257b,49b6411a,c74a2eb3,ac2ec784,feface51,8d5a5bd6,e76d694,bf5ab8f5,c146abfe)\n,S(165b6f5b,9b1e6d08,14e44cc7,c7969297,bba7c659,58dc3274,7e7c4148,e30c09da,e715e411,2e6cb67d,cb8e1ad,997691f3,bd6119c1,3a5f0329,1ea3928e,35c04551)\n,S(d4c1190d,da3c01cf,6c75fa06,7b4dd1ee,e645a0cc,8b034f4b,24580661,8ced0bff,c837ed81,b6a0e5fc,6a02d6d5,f837db1a,20eee55b,41ff531b,9bb642d0,52c42bfa)\n,S(f7359bd0,bf7db6b0,48f1a040,a0163fba,285780e7,909ab689,7963168a,a7de9c29,8c71bc3e,95ac0f52,54db6192,5c6f9112,759635fa,95846be4,6a28573e,2b25562b)\n,S(4d54a2f6,dbebbee3,8950627e,8cf2c65,6ca071e7,86687f3b,a0a77178,be14c55d,6579dace,73dd14c,695fd781,218786ee,bad84445,ccd910d3,43aa2478,f5576671)\n,S(f70b532c,e7203208,d6440bf8,55e1293f,cc6ebd75,96a04b27,9fc056e1,2ee32dee,e9d18f7,126ed56b,4a657104,2441bc08,1778736b,91062c9f,cac28cbf,b8737be1)\n,S(bbf3ff3e,577aaf34,157e32db,d977b907,e62b16b5,1ae0abd4,f14e71fc,cca11357,cc1a78ff,44af7c2c,cdf17423,9b3aec17,b660ff2e,fc07953,2d9f9d6e,55d3abf7)\n,S(53bb2321,b36d1dad,226ceb24,f55d4292,be245444,b2349611,5a649560,59729700,a5db4fb9,46c4a2db,b1a634cc,4032b7b,cf23f7d1,717a0ee9,6c02f131,24f834b6)\n,S(3b863ec5,5e4ff2cd,d32cbc81,6e645009,da444255,9bf96267,2cd012e1,15372186,914682bd,d6a052bc,25cb4d41,e9bb28ed,76e9aa55,3f5aaf25,75140e04,eca69fbd)\n,S(4cc4a750,d641c574,5c68a48b,953ee51a,258239b2,fda1f5e0,80831417,7b837946,cd6f665f,6f32246a,1cc8fa61,4da2783c,f4c7b92c,4f42749e,b6bd4a8d,8a84c54c)\n,S(6f9b5d79,efddf08d,26183b4c,d6001d6b,fdad9e8b,dc5853,f3a8c47e,7e6f9e96,b81148f2,1e50152a,8cd7727c,ad14862a,37fd186e,2054d4c4,a4cdbfba,a9076991)\n,S(9e13d0e0,44cd3fc1,1c7596f2,9946313c,918caa65,bcb6387d,361eec31,ebaa6977,c5f55650,7691bc2a,b2c9e4b8,512f7282,24276490,257288c5,2387fee5,54bc9c0d)\n,S(a4441292,d0e0db3,2a4f33c4,8bbc5fbf,d40650c8,d9f5c4f4,88a1f69a,d71571bb,a23ef48d,38abc24c,608dd688,d524bed,a3709a5b,3567ef3b,e43f0240,796b7ad2)\n,S(def598a5,c4828c5,16b7076b,9682aa82,4e74ab42,e4d4692d,17c8f289,67f3cbb4,e6b4bf28,6dba0803,e4a97a1e,be55a088,10660466,3d7726e9,300109ee,a1d62a49)\n,S(8e991fb7,372df8d7,7b09436d,c9424a8,5a14888b,583b3c58,6d2a19e6,91e75b67,1780f6e9,b8379b0f,ebb1328a,69a96878,9f58b45d,8e3ff218,81d753f4,8ed6c43d)\n,S(bae09288,e10351fe,fa0b0971,400ac3d1,a7eed65a,b11d1ba4,8a1c6240,bb981114,dfc2979e,dcc2de8c,abd9abd2,27cf7351,4079d950,aba60e3b,f4c775ac,72c30f4f)\n,S(4d09ae3c,b484fe27,411d4142,e41de523,2c54c42,b387c7c2,cf42a23e,e7611fc1,b94fa116,27eaf5ab,8fb7fc25,1345eb28,8f5249e5,ec65e056,d60e1294,41481375)\n,S(32f57ac4,3cb29fb,f8a00d8b,c95da8e8,3f0f541d,ed6c9e78,8af17a14,6a2704bd,2a969b58,9a3f9a5c,26b51ab6,1a5717bf,c06eb438,85e4f4a,84b903b2,da5bbf09)\n,S(595503ae,e179f59e,bfc581b8,7ac18e1d,55b4c794,87d90d62,492d3ea1,1ec57579,1f25d8ba,e38c0a69,50a17836,a842b418,b0f7c317,9486fb16,9ba11b23,d315ada0)\n,S(5555fae0,6f1563af,238184c9,304e26ef,f8b2121,394e6856,79de6792,31a56842,6840bd14,faf202c6,60650541,48bb87,df27b979,4ec0da66,9ded6830,b0623980)\n,S(714321ed,2f0432f8,a05c33d1,84619de5,f81fb8db,95ab3121,c24fc998,ab9b9ca4,4470cdaa,7067de2a,e6678cd0,6d613e19,35b1edf3,bf278205,da69ee8d,6086c2a7)\n,S(d41b84d5,9a0085b,86e88fc1,499151da,b0b9a574,92b01df6,36cc2288,313bb592,c04c54d2,57fe5ba,691f6023,bd72edaa,20e71a97,1a760bf5,3c990a39,f5ef7c23)\n,S(ae34a065,b42f5158,e6a5b91b,9ff54b0e,6d5bc906,f6d18c3a,82865e,e9038f34,bf2c90fa,30639811,2ca2ed02,b7ad090d,8bc990db,b6140a05,afcdc80c,bae8490f)\n,S(9b3c2682,3050a52,a164ab,f4504ca4,7750c889,b6465f95,658ba7b1,c279139f,ee36938d,8a675824,51ca289a,55265606,cb9ae4fc,8cd274aa,41db5ea9,9a5b4299)\n,S(27dc9a57,999ed109,c3dff978,58d44ab2,73987af7,b617e9c,766331d5,c06e0dfe,4e97536e,67e363c8,add07030,d59061,33a726de,38dec51,e5a20009,61ee0fe1)\n,S(c3415e9f,9c823521,bad3090f,f2c48e8c,647e438d,70397e5f,7d7a6f2,b7d7d4b4,8c3bb607,c746147c,d5efbef,7e27d236,c4063116,89794cc0,40c235b4,6af412d4)\n,S(f47e44dc,90c8bd2f,150d9dd3,e4922395,14990fa1,f2fc361b,a24f853a,b37e33a0,f4282a26,bf5f358f,2dac4956,8bcc15a0,d7eddeee,b43e6fd1,8f35d5e5,4295ddb4)\n,S(3cfa945e,6044ec2a,da895f9,9dc24575,deee57e,df8b1a10,a2d2ece1,9951a812,d0ab59a7,46ac6edc,69307a0d,caa00aa9,e7b73897,b89185fa,9dc3899,ae7e3664)\n,S(29df8149,9d83bd0f,8fe61eb8,8f0abe0,96a75e5a,2cb0a0a9,76d8d27b,6533a4ed,7eefc80b,63f927c2,e905a56,62d5ed34,e9bde8ff,4402491f,19215c9d,494e62d4)\n,S(eea85a80,566d13bd,da65f553,b2077607,c8b9184,6a5a8096,f57afe93,ada9fff4,b5389645,fd772da0,1cf3b535,6ec40279,cf76d812,11f20a16,71d7ecfc,441d71bb)\n,S(e1a69e64,4434db7a,54550d44,adc43682,c128c560,3907615b,9282cf1e,e2b74f82,bd434a85,984a6e64,441134e6,d1f1a3a3,adeab658,c29af8b5,4bc42667,634d20ee)\n,S(2d99f69f,a7e9f3f6,6a53eea4,381a4c80,ed17e8e1,4507d7f,4a80ef25,293c5fba,25a6aff9,a23a406e,9e34ad6a,21627acc,96b6ceb0,7896382c,833b8fe4,8e603e0a)\n,S(d2482127,1554a14a,7283dc8,1ca70179,42a35cfa,c8659b2b,db78c426,51807cb8,a252027f,3fac319f,c767652e,469421b8,d34decd9,c9042d58,f8aa0ab,70e5ceac)\n,S(bd030cbc,5f0de61,ef194eac,38f7443c,d231f75a,a0b568c5,416c5b8b,917545d,ad0833b1,4f1e23a,76c0626e,71129455,60fe62d7,4b3a1b95,69e4887e,c0661e78)\n,S(afb44b49,ef00b1e9,59c7a864,19d2a4db,71d9bb0c,4e1746,9550d39c,9a37a161,eee390a9,530a5baa,5350019a,f756185,8038c2ee,7f78c365,dd6f62f0,f0589aa5)\n,S(9e584f1b,e06ea4d6,5f8dd96f,206cf4b,88aec6b9,ccf06779,53acf110,99e2165c,6994ce27,46b0eab3,d8608ef9,33b61339,d3e589b,c2acb7bd,aba3af72,b082fd24)\n,S(d2265b51,b4f7f4ce,1d0966,e7012f9,76433dfe,444b2351,9505b29c,d520c6df,44414498,df439478,328b330b,6f8c6876,682b6a32,b5d01355,2494286e,a635bf65)\n,S(fcd56867,58c797c8,3aa1f1d8,a9ba34a8,8e624aeb,666507fe,706b310f,3342264b,680e0b98,455f0e64,94622fa9,e36f76d4,863a9fdb,a3df93af,c688c45d,fdc5967b)\n,S(bb9a0c0c,74db0525,370e8235,9d733aa3,494afc03,fb61a1b,7c2536ed,9903fd91,239929a2,1c0ed586,b9bc8f03,af422994,f81619c6,b2fe637f,a511c07c,d9421603)\n,S(2358b078,1989d6b5,666d9158,2fc640b1,13d52e61,ea2147cf,a0a103e1,5ae80db0,73f84f47,a78fe2c6,e4d01d7e,3dc10065,e052401f,64796358,c784d59f,742cc8f5)\n,S(ddb3409,ce3184a6,d9d7b4c2,cbdf32ef,ebea1be3,595ba19c,42933882,237dae94,59215423,3760cdf0,513442bd,2fbef84b,9c8c0fb1,ef16fa31,783d4dcc,50f24f24)\n,S(f99aaa8d,8d42ce59,86ee8ffe,d4dc8a48,81810a6f,cdfa9519,46f00857,4ab1c3c7,d0f29fd1,32bd65d,7f9820b6,830a3e42,8664f9e3,9cb25729,1adc36db,4e177187)\n,S(83042093,46ced0d5,a33f491a,c98aae7d,51f17ea4,1e5722cd,29c47f15,49c183aa,1f680d05,ca015018,664dc767,4de0305c,b09efffe,e7b164c8,c733d2ed,18c15d8f)\n,S(339f95d5,5e293243,ec10b3a9,a8dba385,dcaa23a1,bb424bbe,4c894deb,c61cc881,3a4ec84d,67831768,e9ad1d9d,db82f785,52883fd8,b0b63bf8,38495a4c,455d5865)\n,S(f94de87d,1123f6b6,97d4536f,7bb6a995,ff158060,b7d72b9b,3c9d74c7,1afb6009,f123cea4,bd4859b7,a852270a,17c76c06,e6050a26,9c035bf3,6c505fc4,1fa81066)\n,S(71341ad1,bbebbb4a,17a7701d,30dcbf7e,2a70b901,5f6c5ff9,9fb614c3,d3338fca,6ab14a0,4b4956d4,a687acaf,30d7997e,cf70df2c,b49356fc,5b86453c,5ef6d55)\n,S(79b8571c,f52ee30a,4d3632d4,965cc6f4,cc6ea06e,fe1cb7a6,ca2c9c9f,1e835bfd,259c0c7c,b8fa8345,57febdba,2183042e,78f8cfaf,24a41dd8,2eb0ad3c,426683fa)\n,S(f3ce9dd9,d879e70e,21737426,dbbb27c9,7af84307,6855bf4d,af141d55,5006e402,302a436c,f8be3a4f,dd70a9d1,8f63cc8b,ecd3ba1,ddc9aa3d,f4285239,61e7553d)\n,S(4a66f7b1,52a8cafa,78d0e98c,2f8361b9,a0bbad47,d23b24f,5184477b,e90d6318,7555fd5e,87676154,8f7afd4a,33511daf,b3bc4a72,c9f54d4,92327a2c,c235c02f)\n,S(cd3b4037,5cd6da61,ff432898,fc592175,c90fbc31,373489ee,c988f280,3459bba7,b0e86ab2,2f2d8d97,5f68a7ab,3ffa3be,511390df,5b647608,fb07f29d,3155728d)\n,S(e96f166b,84d98bc5,41ea8885,f7a48612,227bc907,795782c5,d0e2325d,96cb44a0,18ac220b,8def89a1,e3bcc2f2,7a66c0ab,3ee27c3b,882dc16f,e2571963,92b94310)\n,S(87adb3fc,7fe6b07f,795bb7d7,ab8383eb,a3f91564,ce89d267,599657b6,9d793838,68677cee,bc7b3d09,efd0f118,d392d0f,d2d5f2bf,f2b50230,e127acb4,97f5c886)\n,S(fdaa2f5c,ad1da3c6,3d241a7a,b4365e63,8eede0f8,229a8187,6cd76a3a,7020c545,5b04616a,a1a84785,c4315dda,da6289bf,e57cb9e2,80c42395,a1b13d69,dfb2ddfa)\n,S(7eafa986,1a94fc8f,d263cd4a,1e481e1e,8bc1a385,c4ab748,8715b032,3bcdb52d,d655b395,607bb0b,c9092364,803798d8,17a4bdc9,a30e2844,94be8322,42af9949)\n,S(a7fe4656,98538c32,844337ea,bc90fb49,feaf2fcb,8b86da6c,d173bf9a,70e62a53,cfb26d1d,689a9075,55057ab0,d4261e2c,acbf30d6,cdd09f95,9cf1830e,5d635aad)\n,S(8bcc3b82,d543f365,478fe32f,dc9860f0,10d51f74,b7b5344b,ca6b868d,3c11264e,6bcc32,f7ff3e48,fa1775da,44b64848,f52329d7,d8bb0a09,338b799d,7452b4af)\n,S(faf9aa3e,f1ccd659,2feb2add,a1b58ed8,27511b39,bb981cee,4fbe47db,5cab2917,854b88e3,50a6e9a1,fc7e9e45,f3fdb69c,8111c654,877cd620,fd82ee18,ba2d195b)\n,S(77012901,ea269067,4d8b4397,e8976f98,e33b1709,c81624a0,7916da35,af75cb29,b63695d7,cc896358,e119eb98,7dc0f67e,22a70c5b,5e6e2072,e61ef62f,9333bc4)\n,S(127602ed,f5f1a04b,813e2b6b,2c27f50f,803b70b7,b9525b7d,902f348e,c03591a4,1f791f7d,2427532,968f7a08,f94df6be,a95b7e6c,5490fa9b,5eb5a3f3,207455ce)\n,S(17e82c3a,3731a73b,36501eaa,fde3ee8d,ca9f2573,dae1e4fc,594cee8f,e1d19179,8af04092,79792fe2,273e3f0c,e642f3fe,edf1ffed,59c5826d,a7fb2716,ed365a3e)\n,S(3c34e27d,5d5737b7,78e968a7,fe8e4113,f802bd30,1e0367ea,41fc8b5c,14b0dd84,67bfc61f,bbd062ce,6224e883,9092a962,eb3105a3,b6634dcd,d59c61da,906a4ce0)\n,S(b7a35907,c7b55a8f,7173a5da,c73e306d,64ee0f6c,cf4f5c76,3416bd4d,4f5359f4,d111c21c,e5a8674e,3a64adbd,4f56b1c3,61350b,44a552fb,19186b8f,95ed534e)\n,S(6c7d4836,62c28812,7b904cc8,969ff925,8d9fafae,e88f6d3a,e6e4d771,bf8ee7b2,b593dc47,3c29694f,95b00169,286e3981,afeae4b3,dd7a788d,f32a14fb,6e6a8e7a)\n,S(dfc406d7,625719b9,4f709993,c5d15062,4c725ef8,eecb2308,bfeec0b3,6050bf4b,651c0d2a,fb29eab7,d4740b5e,1fc2c069,54ced865,7a6bb980,2de8d873,a451717e)\n,S(1631fa0f,4e9fdf51,a2842994,da94f835,52b5bb40,348c706b,54079073,665c6bfa,de202803,9a8d1ba5,b133ff28,6df237d2,a8d73343,a08e7c2c,4560954b,eda5ade7)\n,S(fc52b3a8,8f712053,2c7667f9,62146d40,eaa3e924,327d959c,a49b74a7,da11e5f6,7bf890f3,daf8f9d9,49e800de,8a3f5458,5aa46e2f,25535cdc,18170391,e2101daf)\n,S(6b7036e5,c5993c6,8a744776,abb0b5b3,31a886b4,93e49d41,bc7d93b2,28566fd8,6ebe771,42a56189,f272b6e8,8f70f356,ed1a3d37,ea2d5e4c,998e47c1,319e2ec7)\n,S(b13dc5ee,7333e3a,4b13628f,7ef96ae9,4faee9d7,3a46297f,f1e357f6,e7a57a48,4f30b474,99c66456,33f5b521,9164a890,d8cdb78f,8c7ee211,1bd37fc2,d41bb2bc)\n,S(1888e944,6fe20426,d4fd677c,5cf1043b,605e93a2,c8532623,b5951e22,34de08ae,9e1f4fed,d5de001b,378ad1a9,98e31f00,30af9674,c383f287,50172e03,ea0b0f81)\n,S(2495b334,9884d5f3,166f8fdb,7ff81f9,9042383d,def7cab6,3c2775ad,226189f8,846850e0,2a1cc051,eea77bbf,d5f44499,673f40c1,190e379a,9b37201c,51a06e9c)\n,S(e4c0e483,f21102eb,7dd2a78b,5a605b8c,410bafcd,f2ee4bdd,fcfe1374,ab32d17,b53fd34,568f5edd,a6a3abaa,2d2c3a4a,bbeef0f6,c37bec1b,fcf012c3,dac15b9f)\n,S(8f9bfd7a,2e798812,eb927fc2,b0ad5eaf,81a0a30f,a97efbee,a1d6d9ef,19348a5f,1eec535d,1bee520a,13a8410b,6f3824cf,7c9d5a82,8208d2ae,dc89fa13,8bb7c2b3)\n,S(1d95c760,f3fc2eff,df51cf0c,4b708538,efb56675,eba3ff8d,4f6abe65,d3f167cd,c2bb1122,5016ffe5,6859da47,4b777703,49e4e655,5da3d9a1,6dacbdd2,d42ab0a0)\n,S(9df72bbf,fbcdc42e,adb71d69,1791f073,7f945e8,bfbf4e2c,68c5e3f6,5f6955f,24d47aa0,1626b0ac,ce77827,fd7daff,7424d4c7,1d76ad3e,b66d22b2,6f7d1df9)\n,S(2df6ef96,7c0e1a41,2bb48bdb,f2cdf8f4,22829abb,4b7a42e,95bd9cbe,8b7f860f,bace2e70,7915069a,bdecd097,9d133cad,bcfedbaa,7eb9891e,ad3380e,9ca99401)\n,S(82bf2a99,624e408,188da19,59599de0,eb947438,fcd45784,9a731a1c,15796028,3b6c668a,e5b8f394,3ee713c,a8fbfde5,8ef0f9fd,84054a9d,b626e274,37e611aa)\n,S(60260fff,1f213916,9261edeb,5f1d2d0c,a143ca69,400b2776,21793c11,fbc89d41,bec4bfeb,9d09f8d5,cdb11e3c,f65c6a7f,d4aa87f4,e41d7f4,69717a64,5dcf9945)\n,S(6391ed61,80cc46fc,33481faf,d21151f3,cb678e3f,4d667748,1a24a01a,c5e9180,c48495fb,fa5962b,44bfbc4f,491b89a6,a8588fe,91677b19,b872dea8,8e34026c)\n,S(20807816,758361aa,d5f62d25,8e3951c6,da518890,26507a7b,c0ceb7f6,a96c141c,8526d53b,61c8427b,eb141d91,7a338fe9,f7789a60,cc1a4a62,15dc754d,a73903a9)\n,S(1ecceb4f,8acc649a,dbff29c0,fbc62c11,498c7cb3,7d29ed15,e0ebdf03,e994b67d,1c701af7,a9f3d870,81efb798,2382bed6,5d56b8d3,f050bfdf,6da32b10,a18fd4d4)\n,S(be82742,dcafe3ca,f646cf01,80202cb4,7086e0f8,ccea3c11,dcccd9de,aeae688d,236d1fd2,5e05d6ab,8651d88e,33d18a3b,caa66c06,b2b68c50,f6158717,f23b4866)\n,S(15252ce2,3f666836,dfb47b60,1e642abf,6e56ff2b,5d58fc97,ab09f29e,1b4ec3a9,9a6b2658,f52dfc45,32e6b482,fe909e47,ba7b4442,3be4d474,a524df32,d6149913)\n,S(b0429186,21f94599,f7032b4c,1b53bc6a,9259f142,27922f42,fe774772,4b0ee9e7,e73c32d9,ede68eab,e77d681,dd4cbd9e,a356fdf3,bf066f33,6ff2c367,59bed08b)\n,S(5fe0917c,1bca66f6,f34bdf1f,dad88a5,b3dc5f5e,2e0227e6,5f3a79c8,9e66c888,885dfcee,c0947b01,71dbaf65,52c09ab4,c0414f8c,7373ec5,e3080521,401ed575)\n,S(455985e6,44d9b679,85980752,a13a3f94,94bf9cc,8e6f10ba,fc7a70c2,27ce272c,47eadad3,15e88a99,9d3f5ce7,792ebc10,2fc68f18,cdfa1df,564601f6,3b26c22b)\n,S(3562aca3,2291c1cc,ed072a4a,85fbf82f,6b3299f5,2626154,2b41840a,1c868d4,ab4b2656,11db5875,10c48284,7f72c75e,f822f46c,2e7760e2,a46070eb,5db7100c)\n,S(54225801,f82406ae,74416373,7408e94d,d3990eb0,60581c47,b453a859,cf63042c,43834935,a6a7acb4,9c086391,24e80fde,72c0a876,1c13a340,1a4e48a5,d96f6a2e)\n,S(3c253039,fc8278b2,8135e21,700af1e4,dad4263e,ddc867cf,a3532499,c2c1e48e,ee01ce7c,f8c56c74,1b4b3593,b0cb90a5,9c59cbe6,9a48235d,1295c1d1,ac657081)\n,S(8adead1,d898eca7,9e043f71,aa735a32,763f75f6,f6ba7a70,bc47a284,4b580972,7a370bda,412df63d,5590b3da,80365c71,1267cf8c,e3fdd1bb,91ddb981,d213bcd)\n,S(8361e522,34c8d62b,9051a95,8af3f090,4f15ee35,4b69a560,7155ea4f,69548037,ca2c329f,8cb65e8a,eb6488f2,2131c525,29df97bf,c8847c87,47145767,7f82c954)\n,S(97d65162,d96feb36,e8f00221,52c92c06,2e97087c,703a9dd7,7241216,2262807,15a260bd,bd591c7b,91bdcbb4,c2684545,4706f039,8fef8de,9173e7fc,a3f31f44)\n,S(2609f072,5ec8e5ed,4ec86128,dcee3baf,9e62bc24,aedbaaa1,eed8dd31,c9c07503,d51fcfc2,55398507,7e471397,ece94d92,e26375d2,2bddc0b0,d1b780a9,65caf2c3)\n,S(820e8f01,5b4ec57,b884dd3e,6a740d90,68fce86a,a4833636,4b65ba6e,9e272357,bfc87d52,eaf352bb,91f071ab,6e986308,4f197671,298eb614,93152f54,345ce5db)\n,S(2116bb76,7a56312e,71ac58f5,ff2a7071,1be5b711,1e9e56d9,aa098af4,b991db0,2ebd4fc2,abd618d7,d1798739,7e9b8eaf,8276086c,2a5066e7,e7525603,fbb4c40d)\n,S(e43f029f,97f4370d,65826870,3f29422e,7b81112,61364972,e26892f,77eed56f,4e265fe8,40524def,23b7ed34,54c6618e,ec70d3b1,92ff30d2,1b9b6fc,b1f7164c)\n,S(9b4ca445,5cada269,2a77f7e8,9aa3082f,ace4de3,898408eb,6a7d1cb0,8ac15c14,1446e397,d1c3fd20,283f43a8,4679e728,64f05251,b1d3bead,58aca70c,4c0fcc29)\n,S(e2abb09,c0566f51,7947f99b,2d6fc4a5,637310b5,5f9d9014,84decbb6,ca22cbfe,f334bda6,a1d9cfa8,2b18f8f7,e90b8426,ae13e20d,8834e061,ab1671fe,4f4665f5)\n,S(3579fd9,9cdf0be0,2d7e8587,2e213ed3,3a424650,5608d66f,8f936ae7,72511e28,dd93278e,ce754f69,4b3f09d5,a3c32c99,2c5f2e04,cce0a517,de750a38,ccd88abf)\n,S(f307f2fd,d0f6c0b3,12841e5e,1e17b966,47d7ca93,4ba4970f,4f9c0c0c,3ccb071f,4829a5bd,40555e18,bf80ae66,b9742249,32679acc,d0e46003,e079e2e3,d20d248f)\n,S(a462e750,9e718317,dbc72b9b,fce5909a,bdd2fc36,d56a525,97d3adc1,fe4b98a1,2f9ee390,13b70415,d2e6de97,7aba55ab,1f7c6f2a,a5a7b541,a7101a62,f2799836)\n,S(72ec447a,245624d1,1e1270ea,1c4c060d,c6501f11,70c69f4b,229bb98c,e7c47804,cc32a876,33bb7d62,e660ba5,59cc1804,10a51cc9,dc48a9ae,fc3d8225,35fb8ff2)\n,S(b97345ad,2a7eedfe,71ae185,11a3e2d6,c431e628,363e01a5,21622c17,e92b32a3,2ba1cb4a,abe0aaa9,619ea819,4e5c0222,3bea32fa,e4ee3378,ba798472,19670e2f)\n,S(f417f269,de287f06,8a74a330,14331059,73ee691d,a7f5aa1c,4e00a100,1e2ccd56,1bb297c9,5b3fb72a,3263f126,719a82a6,b8bf415c,e81f6838,2c8b3a9b,42917584)\n,S(cdf7b5d5,f7632248,be1bcc1b,61f56491,e81cfe76,1ee897c6,fcebdf4d,109b9b41,118f3f6,32f18892,d37a2aba,1c8d22f6,587ad56e,eacef09,b9202005,75ab7b11)\n,S(3540c9dd,992dc4e4,9aba8fbe,8f28950a,24921b05,e1bae568,2714aa6a,95eebb81,841d9499,7bd92dff,53ee3c86,eafc5f6c,6ffac94d,3161ae86,2182caab,8d5a9268)\n,S(70f4ef3,37a5519f,466cfdc7,ae779588,74c9a9a1,9a558550,8fafe6fb,d61decfc,413476f7,78f5d377,31aa712b,5c866100,bcc2a33f,ae1a078e,c5e5cbc8,4b7bac5e)\n,S(d08990b7,ad5c205a,e5be2700,63bcf8a7,e13c2a,73dbf321,b0d9cdca,a1648da6,b0aa7acc,f47376c,115b0226,1494162e,d425b496,a2392aa9,254655f2,4db6cf48)\n,S(53d6c5ec,f59c49fa,d970611d,b8423bbb,e2f5aecb,d4575877,d903d95e,eb88e455,6a954f77,532c80c4,42f2bf65,8e9d763,617c802f,369f1a62,34927e55,ac549f56)\n,S(af7216c1,e51fbfb4,a5ec1e93,717f7375,9f15dbaa,86706ca3,6636f499,416ce194,4ed49771,f858a8c2,bad65a31,b5ea5a53,8841553b,accdced4,8c41e2f6,984470f0)\n,S(c560d2be,2f2fa6d7,3f5224e,36acdead,8d91eee3,b99a219,a762adfd,a5e79d07,30d4b54d,a96fcda2,2187a2bc,1562d59e,24ab55ce,f9cbfbb8,570cd89,4d436343)\n,S(30b40200,c728bdf7,510db9f7,a8a63792,ff70a9f8,c6262e89,4ef902b7,eb30fb8e,8c98fdbf,29f8c5c1,ce6d7d4d,61a2907,ab57b4ea,a25888b9,e8ce751d,6a19a88c)\n,S(d7239e30,814ef236,5193c19e,dc91fcbc,955dab78,45b4f3ac,be994264,2a434e1a,454dc941,4500f4a0,f93f751e,1e2d4c25,8c0f10e1,b4f0c6f,3be39b0d,e5170dc9)\n,S(60e511c7,7c8d7496,a3f262f6,376d3958,dfdc4645,73aa303e,a6e6672d,b1c21b36,bf86ea8b,c8a37a4e,c5ee1a60,d6e1888a,ac90530d,eadf40c5,b4f61a38,2ea1e340)\n,S(55cd8f35,5a242219,3b64633c,27b1c1fb,7ffeed51,c815e1fb,ebaecfb2,3883d739,b6508643,7e53ad24,1fdf4dac,871e58f3,b5abb87a,d4920057,3c37a1c4,b2bd4b3)\n,S(73cdc2fd,468a2d21,72a9e0ea,3d4a04c5,ab5fb13e,2e2ff2e0,8af5d70d,ac9bd41b,682e525d,1263abaf,f070bb47,6f754da9,f6c74d,27f319d8,5d9d2882,6d06fd04)\n,S(e5f30676,3c9f620,1c5ada9f,6d01201f,97e36fc7,5bb10a12,4cf69cee,619f07fd,611f0f16,39aaac35,5e311a18,a5dd65ca,70e1a52f,452bed2b,3382ac03,dd50546b)\n,S(c2c21323,b156ca78,5e53c41d,10bc235b,8e32e4c8,ee377fc2,42d089a0,d2a27d84,6b9f3faf,64331dda,d25d603c,d8f334c8,5cefcf5d,3bf640ac,96fe3bf7,71ce9cf5)\n,S(599ff1d4,806aa8c8,b1440a92,9e2383bc,efd9b16d,899289a4,a335dd06,7e63d9,459cb346,7c387470,1b86aa34,c47b8214,7f48a0d2,7b9098bd,2b53d7d8,93e25316)\n,S(f02ddd62,a2456e7,b4a90bca,1cb01e98,8b0a09e,62c90154,42db0f52,b635b006,a5666540,6cad4d01,aab99686,90a7ad3,b1ce936,957c317e,57bdb763,b8867583)\n,S(f332b89d,1977afdc,aaf681a5,19bca58d,59852f74,78572346,b688d55a,d55a34b,988afdb1,afa1041a,51ed913d,d780b21,5dc90b8a,b5ae857d,73df2883,50ca78d4)\n,S(d6fa4679,4fd4d05b,d6b7bdae,22a970f,8c3c3628,ea0d2656,55c0ebf5,2f1b3a73,d9f47018,86512ff9,9c4691a1,60b62e2,616f5c8a,fa2151cb,fd6dcd80,308ad947)\n,S(2a13e09f,5c00016b,d974d62f,2c7c7ce9,e46fb142,e7334f5d,98fa2428,e26b25f7,f300cba4,26636d5f,7f8fcb2,bee6e5dd,b9697cdc,9f9c0636,b02b3fa1,820ca235)\n,S(c6480cb1,c1bd41ff,e57cbf57,ea854158,36284048,e79dbb51,44a59027,13d13ba0,fee7ee1b,1652e63d,ad49736,8505b302,f135df7d,4a2f8720,74631646,244cd43b)\n,S(559613e,8111c9e8,25fa96,aeaf4b2a,4019ea61,4c67446d,76305484,c9a4d7f7,cee9f4eb,2680a723,9187d407,f39390c6,4fed596c,b40f58a3,aa6c96e5,c8c9c2af)\n,S(3a95b2b1,e6d19b19,84dcd59,501c33c2,4ca50b59,d410d99d,b9b6da4d,b1dc85ec,7a802198,a5c61542,81669bc0,640a8f40,6815d25,3bf8090,3ed894be,a1b09c72)\n,S(5ae541d,b816522a,5d347339,713e92f5,25a637dc,75c9d9b1,5d834f2d,b265c2,e98a115e,f76b2102,7953f65f,cbbfd29b,a79b43ff,8cd6813a,b65174d2,b03027f7)\n,S(88b5506a,72d681bc,d34eb118,3d6a7fc3,77e7f496,6d4c65da,bfa60a18,210ec487,c29638a6,ad91272b,3525ab40,1ebcd1ce,ecebab3e,b506cfec,e7e9df0c,6ee40501)\n,S(2942de16,93ce8b88,e7e45657,daf88b2a,2118fb7c,9d2296ed,a1725ec2,f7d408a5,778f43,8b4f088e,fb99cb1,819fe6e7,55b0641,8d8679c9,d684faa5,16970f5)\n,S(25c22037,e5a46e15,4adfcc47,480a088f,fb53410c,dea814f8,a4f2c387,df2afd0a,45cfaef5,5c5d3742,3380be3c,c38e6785,c85a90be,7cc92fa7,a390bca6,d3e7b3c1)\n,S(b1f78a73,d0b935c9,80cd8ab3,b8237e3a,df5a40bd,5f875f7f,bcb13bfb,cc45839a,466141e5,d465c35e,37f80e57,c4923c84,c3a3ba98,549cc8f2,db6e0dde,915293b2)\n,S(39405322,a57a4846,d8b42bb2,58f851cb,5570295d,71ded6cf,b803852a,8b4d8304,c81047d5,92fab5a8,c6139ffe,6887d966,e809d2bb,ee3a10b4,5adc5587,ffb302b3)\n,S(7faa8352,31e2c6d5,b331ada,5e175954,6142b131,5347196f,bbc5759b,dd6add0,8779b0c9,2c176b72,5355bfb5,ccf5f739,5fc82ae9,48896a38,1be85e58,c48d154d)\n,S(b786c145,61fe4677,54e14766,56d33daf,adddce8,e86e09db,ea93f1a,2ff0c3c0,4c5c35f5,99bb9637,75b4d61c,b30da8ad,a4e83a56,2cf7d2a1,fc22f06a,fff92aa8)\n,S(ea4b9a9a,b4b509da,d1e70ebf,6604d624,8b6b63d1,c905720a,648e208a,993ce4fb,f5ab8356,ce28ccb,b6f1368b,344e15dd,372d732a,d8953864,21ce415e,6f0a92c)\n,S(c986010d,6339bf7d,2ae3e9a6,c977b9a,a2033a42,14a1e9b3,e700abd5,428e2491,4156f13b,a68ebc80,ad12efe2,d5a0469a,a41adc0b,1dceb765,f651b4b6,b652a85d)\n,S(385b81d6,e023164a,3662209f,5d694910,22e84b5b,7034e8ea,346941b9,c04df428,9d12b15e,c1868f27,362662eb,cb3c9bc3,1626ef22,36c2d75c,65e82c75,7ff81a2d)\n,S(82196a55,104624b7,6710b4b,864b738d,36ebcfec,55226aca,990474b2,58aa978a,48dbd01c,5af9b1fa,21d88b0f,f6b994a8,38d47755,5ad85171,1a4e3d0e,14ab1914)\n,S(dcfbdad8,34d74f6f,9df6c143,abd6dbd4,57f954ef,6323ff77,3a19c367,8d6616c,698d3051,8f8d7ffd,b45f0bde,c32c22e,2cb97acc,a8aa0aa9,c16d8789,a128c3a2)\n,S(343b04d9,babecad6,5479cf60,e43350d9,8c56f989,69eeca59,5a5e97d,89c25489,14d00978,2729ea38,a79765af,ce78ff5f,16ada59e,9d275274,e6e0778a,facc25ee)\n,S(25af2270,88a6beb,7c76a80c,9e87a412,ed166a71,d65d5722,a082e57f,8ac7bb77,d01d89c7,39508a84,5ea64e03,697c2867,5b14bbc,fb484f94,a530e57a,cf19ead9)\n,S(1292823c,1759fa5e,48d0724e,67c93df2,c8ce9fef,9124c5b5,8a477aa4,dd3f5e32,c481025f,ece1bed9,26ecd3e0,3cd7eddc,3cc31836,a12855d1,639a85df,7c69650e)\n,S(ed92246a,5a5cb2a2,1618deb0,794ea013,20560b42,273638cf,afc901d6,2ff0bb6e,3675cd33,825e611b,8802c746,9cd82b97,b659e31e,c31ceee6,681a35d6,2d5097c)\n,S(8174e89c,9b3666aa,69ed3bda,6c73c572,ff3384e9,60863f87,b7d346bf,afd553df,154d75ce,caff95ba,4b5b7b7e,9ea99dff,499a522b,f0252691,cb6b92bd,98182d0)\n,S(54169816,f0440f73,1f14de95,e7ab32b6,702c0183,62794ac9,e55ad632,95c4484d,12e541c3,ee64efd3,b5b8781e,bcc5e273,3544653c,d8b55d51,fa3f887e,d8f42465)\n,S(c654d2a5,e31ce452,739f9cfd,b2784d37,eb974a4,fda45fad,13a2aea2,f7fdee9,47c9d2e5,24e7391a,f645ed92,cb04a0e5,6aef0362,9b57d593,edc85b1c,686ca4b1)\n,S(59724a3f,eb1a1cd3,7fd6a5c,57c3d055,28fbdf48,5102e709,7ac35912,3f9c2ed0,4df18ea4,c0de4053,6bc5a6be,2df794c3,2db2a9cc,19367473,d88829a5,8603010)\n,S(d99168a1,3fbeee0b,6aec4b7b,a0060649,1c4ca151,1cadddb9,2ab3478a,325b1073,c2b0876f,528de53a,f2f695b9,b8225fe0,4660a447,c9e9bd9e,4ba5e52f,beb0ce6)\n,S(769c1b07,c26b402a,9a4b60f0,5bb0b318,d20f65b4,e941f525,43a15697,5a8f876b,7880299,413ffe86,94a76f26,9acde007,6e64a753,94701bf0,84324215,debf3d69)\n,S(6074f53c,ddf9467e,b9fcc4f7,ea4b18ff,777abd8,895c9eb9,71195a9d,57b1b1ac,de1aa32d,e5488e69,eae8a06c,3c89422,a26f819f,af3cd9cc,762d7fa6,1fda3094)\n,S(1f9ea27f,3e9e789b,1cde3fff,94bf8046,f5399046,867a2f37,2da59221,e85c655,c47b5ce1,3d399032,89449260,7db3f7a2,52a74084,20ab1846,fa378674,1e7bf7dc)\n,S(c2551e26,5d3978ce,49cee376,ac86a0ec,7ba10804,bd894019,e79f51eb,ec9830c3,23dc4415,10635bfc,2af8f85e,c4cc59de,fed9e9e4,198304f7,e57a1f42,736871b1)\n,S(2ca9e4d8,3358ea8a,40bc15b7,8c06169d,ed7a5abd,47147972,45078e94,75264d20,f3324029,9fe328b7,ecd14a11,6fd82bf6,5d925532,85a176a9,b7ec892c,ebb2cd94)\n,S(e0db4052,8e3eafca,1f514b26,8b673afd,277c5aa9,e2dbe85a,74478d6a,f2ec1f94,f868c782,40dd75ba,3c6809d2,d62f80f1,ab7fead3,c67a90d4,ecc242c1,687376a7)\n,S(d34cd3a5,764d99f3,16a260c,9659955,fda3cd9c,cb305f73,d3aaa61,27d422f3,3f3b80ef,74bec102,2e442e69,8fd4e28e,514d3a9,5011ba18,1299793b,b760da72)\n,S(588dadd0,79d2280f,37dbeb16,3e05a70f,48ec61c7,cf3e6455,f3ea312d,4ab2e075,731a5c9d,f803c2fd,b22de461,d51af493,5874b745,4ab8417a,940383b2,9404fa3d)\n,S(1731c955,931905d1,ccad3bc6,133f5d9c,9fbb10c5,e800be80,643ed02d,6d7477b1,d7e89b3,1f18ac07,6c7b7380,64d2449d,2d9beac,728ffa8f,6d8a7498,d43baf1d)\n,S(e2f990d7,6818c0c6,e73d066d,5644e9e9,29f495ef,507b18cc,594871a5,88e45b46,2ca12307,fb565d0,7c60b6c3,e92c9757,45777970,1733c0ad,2b299a20,8f50925)\n,S(b92872d8,a146c0da,ec576be7,35a22896,5242cc61,ba37313d,31b0e5ff,21a2273d,8178dd34,e552e97,fff949e9,b101b44d,35d6b57e,79c0e78d,f91ff3f,2817daf1)\n,S(b980d2e,9440c3c3,be5cf393,6eb9634e,923cbde7,bbf2a07a,d7a97287,7d6caf11,51b7d51a,8685bf75,c6d376d,441dcd69,cac67b77,762f6ad6,97a9649b,f3d3719a)\n,S(db2f9a64,3c3e3706,e9b5aaa4,5ebf08f2,ee9e967c,205a49c1,7dc76b8f,b20a3a52,d05d486f,ab967e27,b9e8c175,e93df203,4657dd,750ad788,1bcc4897,b80f3d40)\n,S(5d5985f8,910be82c,538d70d8,9614ec3f,bc9e1f91,9a19950b,a8fc99d9,203d92b5,3efd77d1,27e43849,a710d1e5,7b18b681,c1acb293,2244fa7a,30f360ea,88565e35)\n,S(fac2a758,a063dd8b,46b41933,9c70d2ed,3807bdca,69d3b36e,6369f8b1,23200866,8294340d,6154afa2,d7b730b1,301f5ab,322bdcf8,6fb5676,78fc47cf,b15809e3)\n,S(cb92092a,d45ab0b8,559846b0,d02a0c67,a13edc86,7d0cce5d,fcc09e63,d1b6cbde,d2593de2,6371136e,390bd52a,c9811334,e13fddd4,e9b86b1d,942cacf5,4615b287)\n,S(d715f4a3,66a4a770,bec8abea,49ab6c7e,99e9473b,73e479c,14011843,9470c844,40aff69e,ec6da9bc,38ec119,df4482ff,3bc2b67d,31284db1,8c757990,de6cd0d6)\n,S(77312617,4a395a4e,f7bad07d,f2f38843,22293a17,ebf09f20,4732e7f1,2c418417,602cca39,d6352365,420c5ce2,9d2282cc,5d8919b5,e0669b09,22384b69,7bd48a7f)\n,S(a7c4b675,f529ba17,e9f1ef44,c88a8066,66131845,dd98da82,4cb04f24,518a4071,d88edc2a,1eb0cd48,57283e3,f8658d8,2da27a7c,7ec16129,78fbb484,41ef438a)\n,S(6362f575,d459b970,db814a7f,9a142605,f26f577c,4357be2d,dc16793,64906f7b,fbc9f007,bd08b6ef,cd49c1f7,1e199fa5,ede01123,5d9b015d,515bf7a9,7192f8c2)\n,S(6cfc45f8,515813d5,dacdcbd4,c34c155d,c66b0298,8b8a8702,73a5342a,9249b623,f85c980e,394ea0b6,39bdc5a5,ed185de1,7b1f44cf,b7e51c7b,b9f56b3,496b5ee)\n,S(d76c0b83,b8a8a8bc,4e8985da,f6f1535b,9ff3b4fe,e13eed4b,39d6426c,87cec8f6,15ddc103,bc6c4f43,6f7e23a4,78e47166,e3f4156b,5ad2d581,7f3a7ade,7d80dcae)\n,S(c4f98324,57330d12,e4e26735,464f24a9,a93dcf75,9194fcd8,a2d12ce2,bce0449,e24a6f24,f9a09aa6,f58f29aa,f4e24a0f,864410cd,80280432,d82cd9a4,ea2ac2b9)\n,S(e86da865,238fcc7e,d8c2721f,89c2619f,a2caccd8,5e05a21d,8d23a095,634cc439,85b35268,31871eb4,3323caec,13de6de7,94ddc6e7,5d44835b,7443137d,25ee2194)\n,S(a6398918,6969469a,939e774,eabbce54,109b833e,b3dfb566,876cf50e,bdc7613a,c48430c3,fa8c730b,dccb53,451b5a38,888f2e85,1f510ca7,64360c9c,b72b6eb7)\n,S(6986ef9e,88c8dae7,ecc8184e,a4c5d131,32a87ad2,ff8367ee,63fa0ecd,b7a2972e,e9acba9a,896e1eb5,bc1d2625,983fd2c4,13f54b47,3056a893,7197f940,92eb4bf0)\n,S(47bf849a,e428bdde,ceb221ab,e0ea2fd8,c0a5bd39,175aab96,c2fddc57,e809527d,401a7ba5,1999aead,4dfa6ce0,fbad17e8,e7187e52,806a58a6,7033f653,67aa7c02)\n,S(c0c02bb0,92af6a5b,73582a14,89067933,8b31318a,f2d5b142,d58833b4,cf07fbe4,a19dff69,5ead3a33,d8f9f7a6,76b8287f,4bf6b23c,6761b084,12d86508,830f8990)\n,S(f2185913,405156ab,22baf16e,644063da,b3ba25ab,f191efee,1ff028e2,f7d175e0,814c64f9,9a4250be,2265cf8e,47c8276b,9e5245cf,16ec98b6,b789dd26,be894f3d)\n,S(40d840cd,ac4060f6,de850df7,c37462b9,b4d5892f,a1e74f35,89ab3955,a5d941f8,9892b0dc,ff43a872,6974705e,3a3fd077,c2b91a2c,1c6ee153,7b728359,d3217833)\n,S(6f6b79e7,9006fe48,5546c3e8,52a33dd1,cfb63f3,96b44d1b,af1fb112,93271b35,f5aa0beb,50a628b7,b5348817,8344527e,d1ecf0ff,a0766a78,faea2361,e8fde7eb)\n,S(4edf60c8,c0488128,29e7bac8,7b03ce49,c8df0f1e,6a3e02e2,ea8ad097,f66163d7,9861393e,fcec430c,c00ccd49,3d4e2d2a,a45e1034,fd9a81e4,b015bd5d,56f16dea)\n,S(7ab0c44f,f6a444c4,e0feb1c5,a6650c37,26249caa,38f53e62,b6bf225d,bb1e008,e7f9af86,a2839ce0,80c6ee9b,d86529eb,7a7abaed,aa6aa4e7,207e67e1,a500e5f0)\n,S(6a90e50d,3dd2f382,1dde8714,57012b3,5c1103b5,80ee4982,f9bb78d4,2541f8b1,5ccd34c1,8455aa76,4cfe6c9d,61507ca3,cb613bf1,4b9eae3f,8391e1a0,9dec03f1)\n,S(289d4d81,cccf40af,a61ef56c,242ef8a2,c9883267,54139e1,dbf018ad,5d251df8,f3fead19,c49de6b4,32869220,7e60408e,dcdfad25,26e6e555,9b022941,592081cc)\n,S(a1ee466b,c561919,2e82a316,ac3b7514,b109f442,1c93fbeb,234f5862,d37ade3c,db12d4b7,246e8ee5,55dde2b4,9b5c42e7,408eff9c,a853af00,5a6f6c7,73aff21c)\n,S(ab30a856,403a1622,14be9837,2ebaa8cf,8d946074,abfddf2b,8e65e2aa,51554329,7a6b7f22,a6ea52be,8c0c8002,29613020,a247c026,86eaf960,7fc56cb7,d696c56f)\n,S(17c5f1b8,8e3e4e08,dab8a5c9,2a679c05,688a7437,df6336e8,7b0d22d5,ed56e5b1,96068e6c,72fa9b39,5993913b,305caf70,3186404e,17131b5a,24e14273,a83dccc9)\n,S(a76fbdb4,b99e31ba,c434462a,64c0557,8e961a53,dacb9bd7,68400b8a,823190ec,52e31883,5ac1a3fa,e269a4d3,17bab065,7e890844,c3fe96c6,d04fa015,89c89f14)\n,S(17b8bb76,10476261,ebd75e4f,299f1805,5c88f36d,ae65cc57,3c959820,25bb794d,1bd9a52e,585a40d2,67db59c6,b9b1bc59,4b8d5344,29b5d4b0,82bb1c9b,b54e0392)\n,S(65aa92ba,8fa51cbb,3954b93d,68cfdfa4,d64d97c0,9e099b1b,d1ba853f,18500b37,a2b12d21,b7a1ffd1,af48e4fc,e80c6fc2,e624783c,7b0cdce7,9f01ae7a,5fc96e14)\n,S(3450bcca,5d3b30b0,3743f0d2,6b61ea09,de6ef7cf,eed44b3a,c58641ab,93ad7867,4fca3307,5328a298,d310d447,4806f297,3b09d885,9fa3b949,11817d8,39be66ad)\n,S(484bf072,134849c7,695ba73e,5f25a8bf,74a183f2,bfe35ad7,34b53878,a2036be4,a5295452,a0830b3e,3c45043,43fe950b,3289d402,73d3bd49,6c0cd7c9,156a1d6a)\n,S(2cdf1bc8,920ec641,63fbc8fc,c72fe5c2,dfcb87ec,15725e04,163e1ac5,1b7ec763,c680476a,28f054a9,ac3a073d,67ceecf1,c8262ed,4bc462bc,44798e88,d0e48e54)\n,S(59c3c60,8031a214,d3e6be15,c644265c,b6f3526c,2b37d840,86532c24,52359bf9,2248b28e,922e0468,fd98856a,41ca37ec,2fc7bcf9,a13c7a9d,b4135e28,5cdc1bf5)\n,S(4f20493a,a7a1e558,a44e54e3,b81c889c,d45b6384,9b8448d4,20a34a31,c7c451ef,bc1adcc0,d00384e7,93c2433a,a76f1f08,b8b23170,6e285d56,3155dc19,d5aaaf1)\n,S(bed9949f,dec9813,5bcf76b4,83117fca,57525221,8a6a52c6,a44f2468,29d48ff3,6ab35499,8cad07f6,250dec89,a0840192,b62777df,6e241a4e,325b0c4c,bdad23ba)\n,S(1cf32b2c,46deaef6,fbc892ae,4f05653a,3cb69d0d,821a7125,3c2eed77,4e75f767,caa6268b,b8574b47,840b3626,74f4a479,5a2c6478,c440aa4c,36d88a2d,ebacc8f6)\n,S(9d3f7c5e,5e0947cb,d9bef5a2,dc1a3e9e,ac22d6a5,9071d0eb,5f270100,3e66dc96,6ad63f62,22f3a787,9544c330,4c3ff653,2a00a764,5ddce01e,c4ac4933,a5c7aedf)\n,S(a5a927a3,f03dcbc,b3d069ec,156a6ba3,474f48cd,4828f54c,a673e10d,265eab6c,b5e360fb,39f65847,b63eb29c,a8b403d3,272d9ef1,8127d3f3,7650d13a,9a5736c4)\n,S(48de778b,7bf72a21,871ea379,c02b8887,5da9688,37faeaa9,93e68eea,926db673,d25cb808,7a7c13b,fbe8b1d5,522ac2db,6c44526c,13ca0327,586d6a5c,1aaca91a)\n,S(a029831,66e7cb1a,fff65515,48faf447,cee8ab2c,d4937269,db002cbe,b8f1d1ef,ef34ec5,42554e97,1ae8897,b049097e,3430c99,d8e93c50,94377c07,a5619ea)\n,S(6ed75b96,c4e976cf,75cf0b72,df83c043,5b15d2c3,f8fb319a,94a4d97f,1394df6f,9b63c36c,1e31becb,e1a5a6e2,1abb99d0,d5c39694,cec00fd0,ffc27b53,309bf6eb)\n,S(9372c1d1,6997f792,688a55f0,8f246cb0,f206ce31,d0f416c0,c81cbdd6,8487aa5f,ff97433b,be60eaf6,6f19c182,e8a8bbbf,b24cdcb3,7aabf79d,5dac9f13,9c5033b4)\n,S(269c7d84,b42f90b2,f39b4db7,5ea0724f,fa6a1a5,4c66a1bd,a21e4254,6f243bf6,8f6f8b36,e278c6fc,bb0c9918,7325f1b9,75ec3add,69708be1,b4703c5d,53d8f8f5)\n,S(62f9cd79,921ec46c,d470a12a,9619ad4e,3bed051c,14f47071,e55f9da7,d103793c,92211db,6c846f43,2867b9ee,3b1ff00a,a08f179c,13aa7475,d64d0731,23a69e4a)\n,S(fa432dcd,e7e3b40d,a127d65a,e0955d58,a009d81b,46b48745,c4e24597,4e589a8e,a8dee557,cae7e50,d96555ce,c56255b7,c64d10b7,6639b3bf,8d60aea7,58716f68)\n,S(a424d18d,c6861074,40f42e5e,f2bfc95,f4c8f94f,e3adf681,79086502,fd9d80a4,cb30797e,1d973012,d488f54,6033b1b3,d6b50c8a,39badf8,fcc12bfb,3a1c4d0f)\n,S(c2a6369e,e2857d2e,fce4ab31,49556c08,3ac6af90,6be418e5,ddc5677c,f2f7ec8d,a7097ae2,9fea3774,11ce3f81,b6b3356c,9a2abb69,986ad81f,46b13f8e,a0e7f0a1)\n,S(f5eac1a2,3dc91862,d8022931,3be5c7a5,364c0880,23c0650e,53e22f42,2f91ec98,7dd62b80,3ad606c3,3d8d9bd6,cb397ab8,1cbd688f,8375a405,23bb7315,a3f48c24)\n,S(dd94fec9,3bf7ec6f,cfa0ced9,df31a1c,131c39d7,e110b5e7,b988c59c,dd594fec,cb858565,6a32e03e,2eb84732,4bdfe2e6,3601148f,7bc7e56d,22cf9aa4,54f063f4)\n,S(d3dfdaab,8f9db2d8,edd3db27,d96be5d0,678e9088,5448222c,5b3171da,38fbd501,6b210554,df32021f,35170e13,42e2da18,72be61e9,481a4b74,ec470ed0,b942025c)\n,S(47ff9918,3e452838,f63eb828,a239d95b,62f8a746,8acd0b43,6c149985,2afbe3f9,33b7b8a3,a5b51b15,fadc1f9,baec6b8a,88e0da56,5a54bea6,1b2d728f,eabbdc48)\n,S(1e99e92b,aae56401,1cc10c94,dac071a9,27565a17,2d6d4a20,224e1b49,c007660,914b98dd,a92484e5,a43d7de4,7bbf57cb,2346d852,f743fdd9,15dcedca,4393aa21)\n,S(e150364e,d95ca778,70fb3367,64f9f417,70bb672f,7e794416,13678dd3,65d84fc8,23ddee4,30d7b565,cf545837,58df61fc,502bf86b,a4cbc1cb,7630a9bf,e339ab85)\n,S(44dbe753,dd822ae3,f3ef4939,a1d96a98,33e697f8,c4979191,c64114f6,71e8fbb8,b909bdb1,e6e55571,b03517a3,c2345b49,a5793d21,15fac018,2afbefe9,c726c8d5)\n,S(fb843458,725d557d,b1a17ad0,427b4d98,6ba189e5,d6da81a8,81867259,6d9d2858,18f1c9ea,bd8e71cc,72e2dcbc,532b101,c7381475,46c24790,d010a6cc,32d4eb10)\n,S(48f43c41,b63bbb05,57f8d71,edc739a9,57baed23,efe9c814,848c54e8,54159144,cb75c418,d5557cfd,b29d4807,3f193343,6eafc209,bdf9685a,72f57b98,6676b193)\n,S(5520f175,9be037bd,cb5af2a9,a0bdbcc4,9e1531c0,32fd17a4,66f59b38,6d7de1b7,45b933b4,cf256aa3,c6513a2,8a4eff90,7691a34d,e6cc2e7b,a0b83f8e,a7ed4e52)\n,S(83936718,1d7d065d,5c15e246,ce8391a4,bec58c71,7f82419a,ed6547c,63f081a9,4c903568,f5ce9a54,65fa845f,985f24d7,6e66cbe,3ce256fc,1703b4b0,5dd636c3)\n,S(66a82c47,e756062f,6586ece,86911ac2,23b84c9a,e53e5307,4e22bfbd,3eae6b30,ab2051c,4c231a40,c6da6ac3,5ee32b9,b7eeea17,222cb1d5,a3abf9b6,512db8ec)\n,S(974ce35a,9d5a4ef5,84d252dc,3c365423,1335c52a,e3daefa2,8ff9b75,56bf3b46,8c82a9a9,c49d167,4f3995c2,90ae06ac,fa0a5c14,b1c5f41e,c1e449d9,5effb2c0)\n,S(1139c2f3,60cb8a4c,e020bb8c,3d19bce2,1c6802e8,5fb3df33,8fc9ffbc,8fc231b6,59adaa14,7980b3e4,73801b73,9f1e0248,2e9f1e17,65df2ec0,183d9f81,d57723d6)\n,S(c1bd3793,3b03d95a,b17c10bf,c5167556,4294e38c,740fa3ef,9b356be6,71883b94,c68bd82f,5e926a59,95a83f1f,1a8c2f4,5966b073,91ee74a5,ae2ed99,106c6dca)\n,S(c7778ce7,ce668003,86db9263,cddcf608,aff769e4,b4755858,20554ecc,8407bbf2,92509200,9c57f224,8f9b4e71,532c698c,88b91b77,4a3907ae,1ef30c51,78d807c3)\n,S(14aa1177,51626b67,8f32418f,1855cc34,52d4ec13,d2d900d8,8a22432c,70ec022b,6151fdf4,f4372a2f,e803478c,da340678,c18a0a7c,d540b0bb,4168f9da,2edd6d81)\n,S(a53443b1,b6065cb6,abb18c84,1f171b3c,7152b34,293a7ad1,2e8599fd,f1398cd6,3a07e076,35254aaf,eb30efea,328e3ffc,3a7d280d,5cb2c8ae,9e70b412,38fe704d)\n,S(35c3e3ab,ba4c946b,1eafff67,a9831588,d6631e18,9507eca7,66e22449,f8d294fa,94973920,58f6830a,4e5f413e,4d7d442c,4348328a,5115fdc6,ae5ab638,339e313e)\n,S(1aabc2db,5ac6df10,1d097db6,26e3623b,295ae6c9,941e3717,ca849065,512a7fa,2d2781c7,b42ce42f,b40b737e,9100ea24,ecfdf58,fd724244,dd67d84f,4a6cb097)\n,S(383103b5,5a4beefc,89dd082e,f0e14211,9bacc5fe,8acde710,7429241e,f16820ca,2000fe09,2b820a28,f065924,7823d6b5,18756044,1856dc46,a9fca8c3,84913398)\n,S(2cb0f0b6,35022212,88b8be63,a0ed5d71,bc6b89ca,4b2fb4f8,54123124,49445107,9a9eacc7,cea4c27f,ac63a2be,96884112,435d5f6a,bf4ad519,461017c6,1c87b2a4)\n,S(ae63a05f,306e6980,f439afe1,b34c7b3c,1453e110,e477e3a8,d7e9ad3e,fe2af088,6facce76,d579afb1,cded78a4,1dc64c79,b6e90279,d8c5f07b,fc2b0a3c,7243b309)\n,S(83207533,78d5c6ee,ae26aee8,4f2a0833,a65a94ef,53a477b3,c8708ac0,35dbc24b,d8306300,4caf8d6,7fdcd09b,267a2d5c,b0e83e97,60fc4d8d,2b07e2bb,c2b387e5)\n,S(f38888f9,3337633c,9873d501,8b9fbfc2,ad135870,89f6becb,528ea063,a817af28,8beb556d,8e5342f0,6fe06215,891e6091,f8b940fd,b6eebc08,ded95ea0,99985ecd)\n,S(c15cc888,7d13a93e,c2411ea1,6f21e86e,4fabe47a,55a94a6c,aff7681e,d47ba1a4,5bcf5b68,91f3e01a,3754fed3,f70e5052,e33fb62a,753c5f3a,532112e7,f7f58f55)\n,S(9b3b0b21,1befb305,b02d035a,1e7cad04,3b8ce04,f9315bd6,5067a73,f2680030,75828df7,eeec11f2,e0dab801,5c75213d,cd93cc84,7e873e19,b7d03eab,e368f989)\n,S(2028eed7,50cc8973,c1ca2f28,a30c05c7,73e2a05a,db916825,60d41cea,3b4d0a18,40efea34,b941571e,98a0878f,a13c4efe,1e3410d8,d5166661,115cfd55,53bd0d71)\n,S(ca697e9f,8954a7cf,593068b9,1078486b,c8c9a71c,d1f7a890,a0a3e0ec,e48521e0,4268dc9,28ef996b,56af66b4,2f410831,b9f8c6a0,2658d706,975a7624,6468322c)\n,S(26c2615c,ebe251a8,a78b00d8,1733aa70,f8f9a97f,85c2fcb5,d9287e34,b786d4d3,ecd17c3b,e1b3232e,bde8f859,39f5158e,f8c340ef,cec4e758,cd54eb7b,df4df77f)\n,S(7296b5f2,c4ac6a83,c180cc55,2fc79a84,691c50df,8e56ca8c,731ac368,2d8737f,d4410073,1f98235e,cd75e26f,d251bf8f,f93ee806,52446208,c9643fc1,1b938aaa)\n,S(465d9610,c3f6c8e7,366ff5e3,9e1e17be,53ab9eb9,f299be2d,3d9dfe6f,fc601a5e,741cfef2,cd41ca9,4b847ad6,93f29e2c,7e0bef4e,6244dfd9,8e3bcbeb,8c3ae7c)\n,S(d3264c87,fe435796,b4d40631,a0a64a34,570e36a9,809d98a3,7ffec23d,9f3775e4,e6fa5190,b66bd281,538787c7,40bdaad6,f37a1eb3,90b19c3d,cbc65b19,9bad22ad)\n,S(d925ed62,5551d49d,151dd55b,2cde29d8,fa5dfa21,e9454c17,a834f090,7d744640,e398cb93,1c9fc1ea,d9912968,b335015d,162a04fd,c17049da,80a7ad4a,b3b21451)\n,S(2f8339f7,72cc9ff5,c59ace6f,d38a13d8,21562e0,a0d5dc2b,a2c074a4,f697413f,d09d6be4,3678836c,e110e805,68a2fbb0,b87d1657,d568d7d0,e4ba1237,dbb4fa4a)\n,S(f954909d,f67de727,72437ad4,d3229c50,8440d23a,9215394d,d09c7232,fa5cd0a3,6656c1b9,8e726305,644994b1,eed6234a,834f74d9,2fe16ec2,c945478e,ec53fafe)\n,S(962b9348,d9b64aec,7ae38297,e80a5f80,ee1ea253,6964742,99c5196f,cd58f33e,10601c5,87838f02,5b6735c1,b711141d,ed04ed16,2fdc5bb,4dc593fe,9b804145)\n,S(b70436c8,4c6e25a5,34c3c2c3,34f13350,7050b552,72a04032,84a744a8,6336efd7,1b9911f4,72a19b13,e8bad704,ad3fc911,3223a5ae,4939138f,86422536,da1009d2)\n,S(8989063e,49605ac9,78705f40,cb916505,615cc465,40c4760c,db302cc7,a9e4c6a,e76c05d8,5b32b5f1,9913472a,be4322e9,ff5149e6,e224da9d,dde930c9,948ce8ca)\n,S(9e2c1711,29d01e44,25e4d5a,802f4c5,84eaa0a2,2aa8fe0b,bc0aecc3,15fb00ae,b1385087,ff34618a,d126ce7c,dac3a7f5,1f0fec09,2a7a9601,b65c2786,c733fe81)\n,S(3a88a3cc,164795e9,cc668d88,d9ffb6d3,52f90edd,c6b0aa5f,dba493e7,273731f7,95f0b3f8,2fc2c9c8,a25b337e,af92ca08,e17ef68,ae5abcd1,43bbf5ce,d68a1fd)\n,S(f5cc5ffc,ad18ea3b,c15ed2e7,d0ee8e9a,141bcd7f,8e6fbe1f,81be287e,e7281725,ec049ad7,6ae3bc58,9a60bb7c,ae79dea4,b512fe66,bd812ec6,91fb3182,27d9a288)\n,S(c8af958a,201a29a,bf880688,89c211c6,da59b59f,ffcc02db,9010bd6,65b7ccd7,3755194c,76d6e0a9,3f2424fa,f26a512d,f0605393,ecb5216e,d5f1d452,99b247f0)\n,S(16f10ca2,a11493a1,361c80df,40066683,93c02635,78f11f2e,d9153dd5,5d6019d7,b9fbc23c,39323b8f,6fcfbfbc,b1a4b81f,e7eb1bb7,2855f46f,5379c68a,dc4680dc)\n,S(1b218d55,81d012c,5e804030,ed342308,29675ecb,e1608d75,1ac1fb26,434744dc,8ac73d03,b888545d,dd8d0321,afe66cdb,e8dd7c6d,f1fbc3d,74f7ca46,c551f357)\n,S(d16f309a,820828d5,e2d30f78,2f055428,fc8e7bb9,dcedf9c6,34640c19,7562685c,1f27768f,9a2c63f1,cda9f0f4,132f41ba,dd48a03e,5e387abc,d6c73a51,2d1b23f6)\n,S(75c161ae,1b38e93e,b623305,e2566957,a277e515,44c2fe13,e02ccb8c,c72886bf,384bd613,39e4e389,5cddf7e5,b0cce8d5,35c03c29,118624c7,32b75a23,a9befea6)\n,S(3327a22a,c4891ceb,2a704a19,e60d04fc,64cbb0d1,dbd5a1c7,bcb2f4b9,8a1d0d2e,1ef62067,d81d66,8a7960ea,a63832eb,5c6fe33d,3ed99147,b7f68eec,cf81551d)\n,S(8c9fcb52,65eb08d2,90cc1f6c,9c3d70f0,2b553119,2a0c96c5,f59231ed,370c4036,c986a64d,f3972c00,5618cae9,4a84e74f,2566fe4f,aaa0e2b4,d3f52e9b,4acee6bb)\n,S(2465bc60,19bab7e0,72bfeefd,9d974124,19bf47c3,24477dd6,c83ea3a9,e9a3f353,675034ba,c62cc0f3,afbf5027,23127859,280e2b2b,91aab521,9b48a36a,d5bcf77f)\n,S(3eaaad77,af1f4e6d,a267bce9,e7095672,c44deecc,a71ec3b8,c86d8774,ad06805f,8a3277fa,6247ad67,e6aab22f,a7e7375c,b95eea16,a055ca8b,32615122,30033ff7)\n,S(21734e43,c3ab4ef3,55d36330,adc76a02,7fef2658,92c29ea1,a26972fe,48c3528c,e1d82d68,612ba50f,cba70f17,3cfc17a5,d2d380c8,d62322d9,e6e93d3e,475ea6cd)\n,S(d21f30a1,19f86a54,2c7d74ba,20796cbf,dc6644fa,2327392b,3aaf9f9f,ada97235,22d5e9ae,2940960f,6722d2bb,c077d9ac,aa12b5f8,b9a404a,e28224d5,5b604f6b)\n,S(41741846,c3c6355b,69e39c98,fcedb9b0,73a5b526,75ef5388,819fbf5f,ce1d00aa,3978dffd,d11f4f53,ae1f5aa6,a04153d1,e9ad984d,8feffa10,9ab57fe3,f58145f7)\n,S(cca0a89e,6612524b,a9c318a6,879ef971,d346e29a,4cca7c2b,4619a1a3,1f567163,8ed2e1b3,587cb5cf,37e18db,e9a95ca5,17795137,a8215cd5,293aefd4,92b74dd9)\n,S(dd3be3cf,83feca12,c3dbd1af,a9166d2f,138efa4a,297c742b,778da203,dfff3728,b0a156d2,93dc289b,94abc958,f17cbdf5,94f04cba,15b71ed0,197e239,8b56976c)\n,S(6c535f98,868e9ec3,31135e87,b80aae3b,a0609455,8d426bdd,3dd400e0,344a3cd2,30bb8bb3,4ccc439f,c343d3cd,ceabc511,3efd9087,d17004fc,37f70d98,94e3c04a)\n,S(338bec98,1bbaacd8,8b82a53d,d1ec2ea8,aaf7fcfc,e5f502c0,a13b95b1,d5fd9000,dcda1b41,ca43c103,f0c6b294,5f9e94be,be971eb3,12f18197,b4dc795b,1efe13d3)\n,S(b70accd5,24961804,40dbb087,c3c11f33,f27c7e9,886aed80,b89b121e,8d51ada9,6272d04b,3ec35419,be43ecf,72824127,ae4fd87b,640a5a4d,8e8ea05b,5f3f9b6b)\n,S(dbf05f1e,b489594a,146de62e,c9423699,a7aa2d19,93919b0a,2a26b53a,a0f1a033,9608352e,a1abfc2f,47c42ed3,8f1d2ee4,bb28ce2,9dc98325,eb137acc,36924d65)\n,S(56e94226,a4237f18,c57b5ffc,cfe795cc,b11522e1,fc47d549,6dfad2a7,2f109783,f137a96c,7965b8d3,2eaadbce,d86abe0c,5ee79de0,9b94bf60,8d72a4d8,8cafb542)\n,S(c206cc19,28af717e,63e6e7be,781ea37e,d7dd1766,f1553fa3,2acc34ea,c1157bfe,78963ba6,f03b670d,602fdb93,d71dafc5,bb5ec7,b541b9e3,a84d42ac,1a444e29)\n,S(8b579cc3,6455002c,372bf1c3,21012fbc,c29e102a,9acb149c,93c651ef,e3dee157,9fa8c521,e2f911c5,3438015f,48134dfd,66fa5acd,8916902,c1aadb94,7ceab096)\n,S(3ddca5bc,e582f08f,ded36cce,395f4672,9fbfe7a2,c9aa3479,7fd2e332,352daca8,d77a9165,e281ae70,f1e9a265,630acb60,bcb79f30,9cd926b3,550b6c9b,644e5e6f)\n,S(ee7c92d3,d81c3d1c,6384c771,b609de3e,e4979ce8,84df6312,fff84a0a,bd5e662,f131dacc,28415d22,729f2b70,934ef8e,3033b7b,c5a38dd9,1a11e4b1,7843978d)\n,S(b9f80abf,ab86d596,521bf2d9,cf500e15,adedade8,b51fd8fe,c1d8de53,f4191222,82548186,bb97991f,1f28a93,804cd0a6,378355b,f7c7ed41,4cd585ed,af0afdab)\n,S(1ab67bc1,50fcd943,f0b3419f,e5de2969,fb4428a0,b90981d1,a3893c6,18aeeae9,56fb8eb4,4671006a,805e161e,6e3f2bb6,b0199659,667967cd,3c72ba65,97a2c39c)\n,S(17425974,39a91dd3,72c09b53,68d9821b,2acba5bf,a5440118,ddb5c494,fa0a807c,1b73d3d8,5eaad3c9,b37f7451,2a7ddd17,97e10e71,b640a820,181757a7,6cd27cba)\n,S(72b080f4,d8e812fe,b485361b,59213f59,cd708e6f,d2f7ee71,27af3d87,971633a9,5b9c6a0f,d7a6f32e,f26a4584,542c15fd,e3504935,baa7b48a,d67848b9,67229f32)\n,S(94e5f999,b8927b65,a2f4d318,8e3f2fee,229e42b9,ae3e6b46,9f7ea373,d3f11beb,aa27336,204738d3,b2a306d0,4c6efad0,2ae3a431,1da988f2,c6c1decd,b1fb3c92)\n,S(2f59f652,2f045980,833c45cf,ef8f3a37,d65ed946,9b3beaac,2167eff8,142e8a03,9101d9d0,60f1a770,9f604eae,4b4243c4,6096c041,2f861106,dc4b8d1a,d9f9b170)\n,S(95a443a7,22a88b70,32194130,a349a952,67b89786,e33938c9,7bef7fdb,d211b54d,3d80619,399c0975,a67ea7b8,9a5f6427,ac454278,42f54932,cbf71711,3ae460e7)\n,S(c8430fa0,2ce95d35,96eef42c,69f68502,100a29c3,6ddd1f46,daca1e14,4f382d0c,f26c4baa,4a6d9711,e6de2b92,5042c6e3,cadfe60b,93d4f385,d759ec72,5a32bc21)\n,S(67504cc3,ffaedcd0,c5a2704f,af1aa41b,4cf489d3,5c23b6d1,4529f4f5,c49afa03,b3858859,b3749792,4d01676c,d96fc03b,37be7b82,aee57e64,a44ba433,2fd936c0)\n,S(d4fd8a19,6a56052f,71e8d51,ee3db667,7465ea90,f8449939,be9d1814,86fdb56f,7fc64dee,2bf744a5,ba155865,fb722e11,f3087010,b566182e,8a39f718,922953dc)\n,S(12810eca,7f3087,944d3dd2,69baabcd,491113de,99b36ed0,65520569,484fa7ad,f25d02ff,81ed030f,1e67e002,6680a3df,3f27edd7,76155966,6f043f85,f82c9e4a)\n,S(b347e0a4,102d2954,cf3ebf6b,7c0e5f88,6a823cb4,c134897e,3169b081,8bd35f4,78494910,3eaf28be,b2d9732,f88dc9a4,66a8b5fd,cc50a2b2,8b347436,2e05cc93)\n,S(54cf5638,7972ba75,48dcd07f,1bcc47eb,5d99c95c,a18de15e,9d2ac40f,1435b27,48558294,410d7ed9,9fb008c2,32cc6ae5,33bffa9f,3f02f0a,76b1f390,9e78e507)\n,S(e75c0831,ab9569f6,4844f67c,3650f691,e1f84366,46a28613,653c354a,3107cdb,5e2da0f6,83cf019a,82e44f84,e7bde49c,5d477f34,fcbfc3dc,2a9a2a4e,3ead0a1a)\n,S(f9eb5462,7d88b64,5899b177,99257d92,4570b3fa,59fca83e,1e302f38,5c524693,dd187873,9fe69020,970609f8,ca1ff56c,3aeac075,43e6cc5b,bcf75af0,2932d516)\n,S(8890093c,5bbdd22d,69c91acc,5608e19b,59d2b105,b75e054c,8e873b88,59865997,1f18b0bd,e9b546a,9a2955ad,492290c1,a041b61c,7b534e1a,bcd4db3,b5148bee)\n,S(76b95d04,88c9bb7d,2cb28589,f7f3f9a,e2ae24a8,33adf557,76bc3132,4bb80168,590b3022,81649af7,bb2cb0cf,fa0e90ee,13b97294,1a7a8748,bc9ce53,88744e53)\n,S(8b3526c5,afd2a987,f8a04949,bb5695da,8b073b93,d8418878,28f9d49,2a6ff4f7,387954e7,60f2ce55,17213bf9,c987a9e7,f9b9b05e,c4677911,22e7a28e,777ab4f4)\n,S(2aaaa06e,244684c2,571785e,a77a76f4,2c4bca21,14fb290,ef66d150,74ff2658,49e3135a,3e8ed289,4dcf61d5,7e4cce47,815ecfe2,5bb1d8a,a5d067a7,924fcab4)\n,S(981b94b,be061268,c02db0f1,fbc330b7,351d6229,b645e4d4,3d908be4,241795af,c294f8d0,7b6c70e1,c18ce6da,b3d28c4,d53f3e9d,1f8d9ba9,de18cd39,51c8ff5a)\n,S(53721e95,737d09b1,49eb185a,1663999d,23429e88,51ab849,a671c0,d86efa3f,d36f27f1,9f812f8c,c9d770a4,1655ef57,efc1f126,ecfea4ac,dd5bd42b,13e20a54)\n,S(9ab129e9,a4d92118,3ebf686d,97286d1c,9608003e,67b026ee,d3d06a8a,e21c0bcf,4683a375,85be92d3,331732b7,8e12f452,480a9569,4c309907,2bbb9427,602ab016)\n,S(330ed8c3,3c3647e,7b80f38,f3a1865b,d33abc8,ecd4d0d3,390e8ab1,a20d1c0c,5e3db6e9,33d6d0d9,43cb4202,f9ed135d,ced588f,8742556c,2012989e,768dc770)\n,S(66c40c78,6933308b,9397f3c0,3c4263f0,357d0f8,a6a9eb06,725c4c15,c226d57a,697777c7,13cf3b5a,ca964377,fb124f87,81743794,afbb1966,4b126a86,9f90bb6b)\n,S(36ce2c7a,9c7f1267,c081c9b4,296a191b,951415eb,12e95b02,e5f5d3da,47809b23,ffad6d8a,e00096f3,878f54df,5cf714b9,6646b5f0,9cce0d06,ea38c558,140223e)\n,S(73fefc2e,ca71a95d,2e9d5d0d,464a7408,e38e21e,4450ce8c,51ec9d6d,79b43f52,cd47ba4d,6c2ed98a,c369ccf1,a3d65e05,758f7f70,1ca87a02,5baab12f,5b765a20)\n,S(cac2c00,567cd06b,d4e98e04,e911f7b8,7d4fcc19,28a5b58c,635fcb96,bc7c0a8f,fde04dd0,3235a3c8,9b304c97,7889506a,c3ef937a,e1dfce4d,ce29a1cd,dd385090)\n,S(f6eb390,2654aad1,1c69c028,2d1449a3,4198e774,3d329c3e,85a8af7d,f6219e1,6403deda,8911378f,7defebc1,ef7a4ee6,20802e76,499993e,15b22e42,3e492d0c)\n,S(91a7da19,ecc1a979,7d5dd222,edd74bd5,af76d200,30cc27bc,41304ef4,578d8773,a32b1a26,e77631f9,6a3dfe17,ddf16ef2,f38f4026,4d3fb882,dfb34cf1,5fee2f1f)\n,S(90c3942a,7b00bc3f,7b852097,ed4590af,cef6fbe,783fd717,9fdc4955,a4fed12a,aa7d174a,8d9f1292,b8e4d9d0,19dd336e,da305ccc,ab69659f,90011b69,85366751)\n,S(717c0973,ee959e19,6d11939c,acabeb83,607f9367,83dbfe6b,911f30a3,c51af3a4,f93d840e,88497801,223992dc,24dc976e,dc0b442f,2f845650,4903c9d8,338c1ce2)\n,S(831f9794,c88cc5b2,2d202130,3731371d,a0ab67f3,c080cfa4,d958e6db,aa85d140,46ed65d2,1c8b5565,14e83074,e84267d8,43f47154,8774533d,cc11e6aa,cc655895)\n,S(f6c7e9f6,69447c19,843ff209,72c47cf9,5341e0f9,d2d5f14e,c9b17abe,20eacdab,1bc7e847,a9f2824b,5895edf,cde746d4,5ef0fb67,b7db1637,e62d2d40,e046650f)\n,S(c0ce97e7,ccec223f,947c0db2,62fe3865,9e06fc77,99a41581,7ec36642,9d5f120a,dc281020,af95986,dfafdfc6,ce122d33,e797197e,c24c09d,7e6f04a1,c5b4793f)\n,S(e1eae094,f68fad14,5d905240,e79abdef,562ac20e,d52f3503,db34b2db,d2f72d43,71e4754f,ca9df5ef,b3b86c88,7e3eba7a,33554a83,cd68ebed,f6dcdea7,fecc6486)\n,S(acaa286,bfd582c2,c938ee36,23a20db7,5cb6f0d4,95419f33,b0b35f2,59841bad,c3eea949,18a16138,caecb54e,ac03b6c9,282006f7,14d4b024,2bad29e9,aea7f667)\n,S(87f6893c,137f60ad,22a5d543,2dc2cb2f,f2e05fac,d643839,38936c2d,206afc82,f6bc3092,1de852d4,4894d318,aaff9243,a9a521e,501ca78f,c7baa82a,3a118ed4)\n,S(9df94d49,e9508ab5,63ea1,16cc4502,aeed0bb,7b1db426,c6695da5,8da1f59d,51786cb4,a7caea66,39546ae7,5826dcb2,5abc5a76,402fbe9,b32432cc,aa48adc1)\n,S(8a902a14,5ecfe343,503f46c9,71693677,80499405,5df02c32,9446a373,e34777e3,fdfaf856,f777d30c,24ce54f9,d503fc8e,a3cdef47,e292ec5f,f98d6449,a69b3f0a)\n,S(ad6128cb,8d9903d4,23558eb2,23fa580d,e31c454c,d3985ac2,6a2854c,733c05c9,9b69c9e1,564c9271,5562d4cb,fc040495,6ca539c9,691e2f02,5f41151,ca6667e2)\n,S(c2a2ff9f,6d064f4d,551cae44,f726a8cc,b14c9742,96725620,1d01581e,5375e57b,ae53fd93,fc405150,3d6cf2bd,bb51720e,7555cb24,ef7ee8bb,9ca306a0,59563e65)\n,S(56c0fc7d,c2ae8f26,4e132fb9,3a52a634,2b80dd38,f329fe9d,1871e2c1,6529996b,5d012467,cd511264,82399d80,c7f8d248,d9267251,e4d18aef,ccb9bbcf,d854414f)\n,S(2131bb4c,5014e751,ef0690bd,562ad29c,d8db4461,9eda575c,9f0f75c2,da4e0f32,7bbb234f,7a83afa6,47599f05,8ab8f5d2,83f1f02a,8f8d5292,15c7cdc4,71f03fef)\n,S(e8adbaa7,bb0542a9,9b9f7598,59637f1a,cb734257,13247db4,540b8268,6c14a462,72de1317,fb5ed43d,ec57ebf3,dbec4eca,bef50923,a4743359,72aee4b3,c03190f6)\n,S(827e8e05,2a084162,19c8894f,ec6f31c1,a7902792,a1e8cdce,6fa5f732,4b428417,d46d9c86,4fb85e09,81bd40b,b6c3a563,8a74c222,6e7c8299,3ef6b408,4aaff5b1)\n,S(3dca9759,338dc06a,8e81218,4c14c82d,3fffc50a,6d0125d1,1af0523e,d14fd699,e6c98f39,b3fd3ca7,66ac5444,be93fe24,3085a38,7b484f28,da571afd,4b8ba210)\n,S(3ceb28d2,e59d3692,63432323,c36bd680,f531697d,c33245aa,bc7c5838,52bb8eb1,d2456980,96a36ca1,7301778f,d1661743,f43ed9af,3968e4e7,55ab39a1,6ded2d19)\n,S(47ce6c4d,c1dc8371,de44ee1c,828e4b3c,6ba040c6,8dab0802,417ecc31,1e7d79ce,2d6b7bc7,c43e478,6df00ca9,75268b3,39f0ad68,7b0c70c9,ca857913,485419e6)\n,S(ad6387f,fde71126,d0784af6,fc8a1ca7,be9bfee6,176245cc,2a18c9c1,c17f156,3233a7a,d7d50605,8cb63aa9,becf9eb2,bf8fa88c,afb2ce9d,a9236736,803dda1a)\n,S(8c9c591f,e2afc468,4b64d9c,44b92627,e70babb1,aa9f7f00,6dd5b0ba,4ae794b5,5ed4c9cf,30c7d1f1,ab31e9eb,8d20fd16,77b67152,44db075c,c9de1b49,58607617)\n,S(2d601d55,1b07c8bd,10db6a9f,516882b3,1525d819,9df56324,cef2c40c,6753ef7e,d32e4bd8,eeb642a4,38a9493a,87824f86,6731bcf1,6c4b1f42,240f07fe,ff075a2e)\n,S(2c67af99,3de02d6c,b9db16fb,7fa99fd3,6e32aff3,69e855b3,581af5bd,cf8f81bc,69fc1c49,501a76b6,e21abdc0,27aca6b,a062dc11,5cfdeebc,b8b98ea,ae35d935)\n,S(a904b9b9,a0abbb60,4be04958,74b0bf72,5c1c21fc,1ad75b9f,99ed5d60,d1beaa3c,a2cc5370,58dcb26,6677e730,449cafa1,c0135179,4afa24e5,47b10479,a2590069)\n,S(bafa5456,e50152d3,115d40f,b9571d79,7ae8fa48,97801c13,238d8b98,b919302d,8108653b,f4f9bb59,de7e26d8,55f72103,20eeb48e,9f127778,5f05ed34,3e63ac43)\n,S(fce057b,560e9da2,7621d46f,bb709275,4a6793fa,eedfcd7f,9a782aae,e35cd9a1,c59891ce,d7c19c5e,7a841620,8d0d819,c8634bbd,2466ed60,214a726a,dbefd784)\n,S(b8dd80d9,6b6229fd,d13dac50,23f53657,3b353efa,45016033,58a9bcfc,ab61fe7f,a72beda2,c2cefe01,eaf1ceea,714b538d,8b052eac,3df84158,dd3530f8,9c5bcd25)\n,S(c676cd53,7366b97d,9a056e87,2bec47df,e2c35e88,947275b0,53212536,a6231c5,9d5fe80f,763e202e,6919c760,bc96c732,844c4c18,7e7a3a1a,a0760c29,80c076af)\n,S(626a28b9,c897481,19d6c4b0,bab6e81b,9d6747cc,6c49521e,6f032f50,36c9fa87,f8373b3c,748231d,b8aaf580,90898566,27b112f5,6697b18b,3cd6a73a,16f2203a)\n,S(d72eae41,548363f7,cf5b5b9e,ab73076d,650f7616,e7584fd5,1a5ff2a8,ce1959b0,c867515b,46c9973b,53498582,5bebdc1a,54181a33,74b507e1,f0aa21d0,7a6c0e0f)\n,S(6e34489a,4ca57c6b,f3b8a98,dac3b2a2,995a7bd,f90acac3,b81d56d7,678920ea,efe88e16,e60cdf2c,3e6a07a0,ad323e7,ff9e731b,26f9cac7,87bf43f1,b3401169)\n,S(a8214f4f,1ab2d150,b66eb9e6,f64ea4f4,6ae08909,9248663d,8491cd2e,90a56ae7,5d252b54,ec694068,a0944f8d,4e0ead5f,2cf0982f,3981240,5165b5a7,e4d628fb)\n,S(76591c34,fdb90d13,14c5f85,e76e18c3,aff3aceb,4385011c,d4a74bc,b36f775d,f13c54f9,c32fcde6,94d29b12,f2a8d8fb,a99d19be,80ed9a8f,903b33c1,ae52a447)\n,S(17d22fdc,c48ec732,afd7bf62,7fd09d22,d2989437,a8ce1950,3acc99f,ef2c0cf9,3bf80fed,48c4c2f2,f25ccee1,9a717067,976f108e,b1cee625,1fb6257d,f1788384)\n,S(2ffd19a7,f46bc028,9b11d7d8,2b391091,e08202cd,95c7a4f6,fc351713,d3645b6a,807ee1d7,af310183,fa9edc73,4c098b90,5b0d4021,6c19b797,1429725a,5763d01b)\n,S(63496320,c4eaa16d,ca4ed516,bcbae7cb,124af3ef,10969329,dfec9a92,22f143ab,3ce522ae,ffd08245,d5dd6ce0,17ea6915,aece97b9,9314d61e,2d4e9fbb,5b92406e)\n,S(685a372c,ead446b,6f8797c6,dbbdf442,e337a200,1b09c03a,84dd523f,674c1e31,9436ad88,7c61bd79,d0a73f9d,1d06ca0b,37f19511,9d9f9f10,6a6d6d97,f0654d96)\n,S(d1aa115d,ebf2ca79,61b1a13a,9f8f2f38,8367280b,c36f6208,15cab71,d235b866,9dffc173,6590390d,a2f3239c,f85ac4c5,3e842aa1,3ba035ac,2824a269,c7c2a487)\n,S(d12c58f,5e20c6de,34a27270,d29ed5ce,c2a36ac0,8f2a1b1b,69cdf2a5,d501bc3c,cf7bd006,5bedb875,bef1861a,335457ad,66042a17,c9249006,60ee461c,db0a7de6)\n,S(95d9af48,d2d3ad22,4ca83889,2d7f14a0,bb4770d0,42ecca6c,d71b9278,79e69898,39e47d1f,6acf9570,5755c560,22a8faa2,e961b25e,c5ca36e6,3a5ecf5a,e54a48d1)\n,S(6e4dac4d,1b6d8404,e84152ad,f5d49de8,d269c9dd,1c66136c,65b8f78,5cffec16,62d1dd58,22c06f57,f2ccefca,31c318d1,175a3c60,2aad99f2,e5c63e2b,c8e33afd)\n,S(d026e847,3e8eec4b,d9ffb21d,49c13900,34a9a66d,5423174a,40c8b4b3,4f6fe060,682d65fa,cbb29cc0,91a290e9,305e4615,5a5d472e,16d37c7f,e06a9a40,f578c58d)\n,S(683bda54,87643e28,8799658,baee6ec4,73ca9c66,4a76c302,b26f5762,877e766a,d3d80b37,117d6b18,c04174aa,2aba0774,43fbb78a,2649eb38,e5798935,75fa237a)\n,S(fe2f54a1,830a0d86,ba30acd7,d208f6c7,22e2deda,4e554a5a,533e8e07,dfc76f8f,6a6f032b,5bb03b33,3b28e6bb,30b2b04,305e0aac,cf53e2b,53f215ac,2f1ab8e4)\n,S(2486b52c,511b2499,7ef5d49f,8098f596,568fbd0b,756334b5,d5f01852,191d677,ef82dd7f,9dd36f42,55b75292,40af86da,bbbdeccd,6ebb3197,11fb3432,236f5ccc)\n,S(c6fe27cc,79f316ca,5a59acd5,911963e3,bd6ae911,c50bfa1a,f2ae8b6d,69ff8ef,70aa6fed,ba4c57ee,5b3b33ec,ab6efe75,e05b8b43,41c3a7b9,bca5053c,40292101)\n,S(be4ff208,8334d043,2d35c9f3,806e516d,fae58bbc,d2f69565,ec461006,99af2be2,49de6b17,c8636af4,25ed00f4,228ecdb0,4208d18e,b5c9c194,d6714550,26396adc)\n,S(c5789253,316faa6c,2f87f888,a8fa4312,42618ebb,37a5184e,29abf20a,e6b4aea4,77647e3a,e083159f,afe92726,6c60f666,12e4fd31,ace116a5,11678291,185df958)\n,S(27d2c091,b2212a3c,b2a827d0,951a4bea,6994953a,cbfff146,cac83f20,f164ffd7,e9fb5899,d757055d,f0e273ef,c38cf691,e958c6e3,943aae43,85f77a14,8189eb92)\n,S(94d45ebc,ce92d10a,3294114d,743db35a,8e2ddb7b,7f5bee72,7d093c89,15d98d45,802386db,bd731bbc,5dc793e4,88fcf20d,15be9024,b94d1d19,edf99ea5,ab1c0acd)\n,S(46739c9f,6245639b,692a68bb,8587499c,43184d0c,f0ff467,7b264985,b4a2fb62,9f8f41d7,2eb951ff,17d4517a,3fe7dfed,556aeec6,be518188,8c39a57c,913f7da4)\n,S(5c9f57b1,baacb2f,67f1bdb5,3fc85aa9,3293a2d9,d85d1f2f,f62ff40e,d26e8c30,6bcc8a89,7ebf12b7,2f397b5d,ba072f3,c91f413f,df14e441,ae2a2155,887c1527)\n,S(9ccb3d34,4c813c15,e9b85517,95ddb04d,c3c790a3,a1ae051b,60202b56,b735f3fe,e24525a9,fa784ee6,2576fa15,6ad350b9,eb5802f6,e5d5bbbc,7f4217e8,73f85916)\n,S(f0826eec,162f343e,4cd7e135,df33219b,507876ef,5d29fa13,d8fa2326,3e7ca425,649c1d78,6547e29b,d266f2b3,cb70b823,8e71d198,6791fb09,a19ee4fc,1823e02f)\n,S(8b672a2e,1b76096c,80b87519,10b6a09e,1b7204e3,ec139cea,46aabe84,4302dfa7,33f05056,ab88de5,e036f8e8,5bcd51f5,423ef431,4faa1015,7eacfd8a,9db71787)\n,S(93cb8f71,9db52708,986fcbc6,26679315,fe79d119,9f8abffc,5c02f375,8e5a50e7,ed7d055d,91843e32,4193d866,81551f5b,36b484d1,f0dd5fec,f59e51ba,57b93bed)\n,S(da506843,86019984,4004a723,7ae11605,a7132e86,55145d8f,ce9e0e50,feef7d5d,260f6393,886e1b8a,93986894,a4a98fa2,61771a46,16d04ebe,baf8bc48,29816d53)\n,S(2d469c5f,26610e4,6bfe1cc9,43cfe267,e1bd0a22,e451aeb3,e74f17b,b9ec2f76,1d702b5f,fe2101cd,f5a5cdc8,4d4a4890,6720ac6f,ca626979,d942c218,163474a2)\n,S(1ea83777,5513ab9,cadd3b53,66cd9049,da1b01c5,d347f7b1,c8a74f6f,658cd621,b9e312c7,2dee3d7e,d6e67596,70c65bca,5bec92a,2eb82fab,a122ffde,5b1c7f5)\n,S(70bb25c7,9589530e,f129166f,cac1d5d0,81083ed5,fc5b9b99,e744585a,1d6b6816,63234c19,dad2914,3e99ff95,a906a5f7,a48b3e87,2d45436c,8d987baf,a93b3588)\n,S(fd9989c8,f68537ea,a3248b19,ae721256,ba8d0d2f,d825980f,f89bb158,a700f0a0,eb76c5d4,93e52d45,5d27a12f,fcdba859,664bb048,1686e67c,e79e40c2,e0160c97)\n,S(f1c32c17,8b36e837,b058e9ab,ed3c65a7,e2c76397,4936a524,838a480d,b3089b7,dd4101fb,92488a78,480cb6af,6cf73dec,5aac619f,3bb42594,c3dbef4e,cc7a3a11)\n,S(842d8101,ed396c79,b5b19779,c245dbdb,b1ecba7,9ad77d5d,f78fedce,f9d83f33,6fe77300,9117a404,f4b28ef2,57441145,c5afc6ae,2e655ecd,2497486a,fb1ebc16)\n,S(6e9e1a2e,847fb133,cc92a79f,767a5ea8,cac887a3,16903a98,f3ea86ad,3e8cf24f,d71de5dc,12be0a35,b996d880,8442fdfe,4a6cd810,7fe29548,da99783d,9049ce3d)\n,S(f6739fd0,1f5429d,27c216fb,2b02d871,7028366f,7af115d1,e154f87a,812b5e37,15186c87,f776c8a0,3532b554,1e1b583a,5a465334,45bcf93e,dcf539b,21663c95)\n,S(c3acbd98,43bbbd8c,68f153d8,553a81c2,81dbc584,42edb9d0,e51d056f,2b80e2f2,8397a220,483081ec,ea7de090,5d063412,1dfbcc32,ce70379e,c58b33b3,20f39d25)\n,S(aa9c8bec,c845e691,a4c3daaf,a9bf687c,ad733290,32abe151,a26c2a27,1fb94732,b82dd0fb,c53fa616,74b684f9,7da10e8b,77f1f7e7,388007d6,656988df,e18df322)\n,S(3df35629,654d5b70,db9547b7,5373efd7,e1781dac,da11607f,e4f3c903,5493c8a7,56fbe92b,25cbc615,96f2cd4,10290da,239ec3d9,360b3561,4199b006,c2d2b54)\n,S(bcc8b337,98973e00,771a1955,89165cff,83870f8b,a897b8da,84c1bfb7,57168bb9,483a7f4a,70c8250f,62105842,310ed427,168382a2,5d687290,d54e65c4,c83bb16)\n,S(bd2b07e,a84da89e,bf5e39f4,d3f03df8,658061fd,8f78d5cb,99f488a3,e992b870,33ae1dde,77c5b467,f5b3da9b,c71a6557,b0cb3aaf,892d0e76,d9f34b40,1fe60c9d)\n,S(2c55718b,87b4facb,8ba9a6d,287a2db7,1b5a03cd,c7d933d4,c6014232,ec35d05a,aab1de0a,d8e3f72a,ae822bdf,f3ff70bc,bc5aa56f,1dcc5352,d1f81614,f3f461dd)\n,S(eb837dc3,b2e346c2,aba58441,8c84b20,d144f93f,841180f0,860f7280,a7ee23e,6a342fb8,38a63813,e279d1c6,94b2ed26,79c3dd21,652d5678,5f47aed1,5230137b)\n,S(827719c6,9b097381,da18519,ecefa193,9a9eba18,189092f4,89bde77d,33046fb1,e73b0e1d,76e40777,4ee6fbf5,2bafe516,f6d94fa7,c7dd1eee,b3c36f7f,6429dd3c)\n,S(2b0da4f1,23095370,1f1b9444,847ab289,5cbfecb5,800f2d7c,16e7a56b,c6988d2,fa8b4d9e,5da41962,68e10a3a,7d69b1ca,7963d4d8,cbb5fc1c,83239212,dbc340fc)\n,S(95744eb5,13436e2e,877fb0a5,20d5f1e2,1e1ab59e,15bbaf46,206550f8,d5563134,5fb1c034,62040ef2,28adad1e,83fc2c74,57344c38,7b7ffde0,d247bd35,6b5ed1af)\n,S(4c805d94,78793e63,4833e90d,d19822a0,ab7d263b,1ab67654,bb77358c,67b327c8,863cb8f0,dbca3c1e,4011928,e5827619,53df792d,449f8980,bd10cef4,472ab56b)\n,S(fac22633,3ffa2cc8,93c434b,46fb0cbb,cdee765f,e848cb50,b1dd6e70,272e0ec3,6a6b07ed,46f9b9c0,86e970b1,d2323fa5,d7d66b0e,3ad3077e,da5766ca,ac5b500e)\n,S(b9d6af71,c59f0fed,ca4ecc31,25aaa645,f78d43eb,79c22034,1034de56,f59ec4ef,5509e17e,3d7ea457,c428e10a,7e9d8bd6,69f0fdc1,165169bd,a2101d8f,6f4041b8)\n,S(57a68137,90725717,2dcd8c46,3a9b274,69c5ef27,2ae2be60,b10b96e8,e6b47537,9f294700,1c04c06f,2e2e5aca,cf4b9549,265db1f5,74b2328,ef4469b0,1c2bcb98)\n,S(58ee2a22,9aba401a,637c4d34,2b1ef408,d9f47c53,6133fcc1,de030d00,25e2f53c,d361b0e5,5ef24c74,94cb9e65,cd273e9e,73da6e50,f452f8b1,7d30eadf,32ceabc0)\n,S(b8bae4e3,f2e22824,7ac9cd8c,a68632e5,1bb13d4d,735fabb7,305a8169,31b0e34d,ae8ed4e8,6ac41b60,60ca3423,fe6bffcf,a7f215a4,7076f270,a2d1017b,887b8002)\n,S(a81d5e0,f11549c1,373b4c02,a61c8908,dd109f4e,7f0cd250,a667508b,aea3feab,8c6cd790,4cb4bc0f,7e56d928,ac362cdb,f096841b,dee9dd48,429c52e7,23511bc1)\n,S(fea67ebf,f8f092fb,dbb3110b,77d6981,efaab5c4,97a23c3,42afe294,64f4746b,1dc947e2,94b0fd7f,952a6d5e,1f5ddc9,5f0acde4,de8db93e,41f37ec8,965d4310)\n,S(4db2ae8e,6b8e674f,2d79e1a2,fb7c7d10,921c9280,d8eff92a,df1a2b02,4485bffc,8ed56cea,38c2a96f,b6e0ecf3,22b745cb,35c43313,9b3dd28d,9189a9c8,9f2c055d)\n,S(be31fba,3995348a,78303047,24ff117a,48dcf5e8,72356d03,ac059306,fc5ae314,8bf72f6b,70189284,ecf86059,affb4a2b,c7b5f923,d7c34429,6f401490,5a94061d)\n,S(e8d716d7,18078be7,78535c20,4f9cb681,e8f49ac1,85baf865,e7b78e19,58ee703,2c79f768,c6d3bb3d,b0923d19,74647e8a,966ce69f,d06a8fe7,5601e51,61f49f85)\n,S(20ae34f7,f3497d67,6b0496fa,1a68178a,f4fdd57d,15131ab9,c60bedbb,1a840070,21fc951a,2b29ab95,994cd404,b3da37f7,d21fa790,820339df,84f17b50,3572edce)\n,S(73db09f1,3c8e7bb4,48629f24,83d56f1d,a207617f,454edbd9,d51ce59f,b7ae1ec9,1e4e5175,efe03956,cce3f160,791595ad,35bea993,139e8967,f591b973,785dc29f)\n,S(14f5ae1f,af20b6af,9953fe91,db5bc192,31f302e6,cc03a265,d661b25f,8f07cb18,b790b1d5,ef6ad5ef,97ddb309,354756e,138f4db3,208a873c,17cff3a3,13a8be2)\n,S(94ec6992,d2531cdf,3a1002cd,efb12e68,868be66,b704dc26,3dd422b9,9cc379ec,d2c4e479,ce9e0227,4d9175dd,e2a42639,67ed377e,d0416101,7e41e8bc,8adf7fe3)\n,S(f73b5edf,c8d60e77,328279af,ae99381f,4ce0de22,17a4edd6,4c228b4,84816527,86758bc6,f44e1204,68555e71,786f7d50,da7f9c72,665a7475,e77c32e9,dcb13419)\n,S(94b51939,45a518e7,c602570f,863902b4,385c8e76,c335cae1,b80e1d0c,e118b573,7c285008,4d398cfa,24c5cc6d,879868f4,d8eb60ad,ffc77214,5debabc1,3f154ea2)\n,S(26acc055,2fa90d45,1dd6f2a3,9bd46a9b,99b0f66f,3e6e72c3,16e09e52,f7b265b,997dd988,5d5b15a1,957e1cc0,a45518fb,b0e1f847,d58fe9de,9be95273,cbe61b00)\n,S(e8a5ac01,959edc90,2050922f,af51365b,ecebc967,8e57cac,420faa6d,4e2fce98,2c2998c6,fdd97d15,fd0cd228,e9975064,f2576316,6e61a45e,ae532481,9dd96227)\n,S(d903bdf2,5ce9e855,60f63d72,512626fc,fee11c4e,304d249e,e13a4b69,60f95019,1027435d,bab3c246,c93897bf,ef7779f8,9a165595,a7c9c536,176fec9,1adb645f)\n,S(eea105c6,fc04a751,cdc27e40,25f0d50a,99f8d01e,1110a505,eb95206,922e50fc,b93db8cd,b914dd8f,2b57b907,4df41e9a,d8cca9e9,c3a9754b,e8473446,ef3a6c68)\n,S(801b116a,1fc2c2d8,fc8b412f,e9b1b7eb,b19f4e96,16b420ce,16f1b4b8,dad235f0,53def02d,8a6deddc,250de95b,d6a96d27,1c197d36,e137e640,4123501c,15fbaa9d)\n,S(db3b8667,1b0dc54,436520fa,c8d437cb,7a4c23b6,bb3c3cbf,dd34b605,af406939,36562d35,a298b620,f7a06498,b1032f4a,33cc3b3,ee185e0e,aa8d3e4f,3ec5c481)\n,S(7bb26eab,8b808402,a9fb3fa3,8f0e2f6a,7d82d7c7,eef75cec,43594713,dbc17706,f4f86283,713738b2,a9209e49,f82ae1bd,9bcc908e,b9565546,3a8a5dd,8d0c4b9c)\n,S(e89fe301,8d87bdae,20fee2ec,7a3f6cd6,cf932d20,a026e1bb,a82f9c63,a47b97d9,92a7e80e,e7657ad7,c72f471,8f0c28ba,acfc748d,a6090026,1191912d,32b8a498)\n,S(c9a10a8b,14d1845d,be6eb6a8,65cd2ce3,a4d0be4d,fad24912,b01fed8f,8bc812da,5852b791,85afd22a,6f9ab486,91340dfc,e9979cf0,bc9732b3,637434a2,25001d71)\n,S(257df2e8,cf535cb7,954b52dd,7e3ee08d,24cd4415,d1075dba,8f75bf74,74afad3f,f72d1e76,d4da3c0e,5b41fa82,28639f2a,f4e114c4,94073ddc,3e8fb2aa,f82596b7)\n,S(3c64aa9e,548a430f,a815bd54,713ed69d,bc32a0a1,30ae7ca4,1541ff21,a5314886,8377911,7426e30b,dbf84c57,b110cc3f,df5acc95,7313cbc9,86e895d,6e0ec912)\n,S(cd509f83,3b65a7f9,671b9239,c5e71323,f183e956,2c2c115b,751046a2,33424ee9,579243a,c7fbd433,81cbd0fc,4330d087,cfe0c41e,449ef82e,12def6d9,8977338f)\n,S(27adfe4,febc3501,3ca7a0a0,b5f7e525,3768df69,9d236f63,9ab80782,c2d426f0,97cb4e7b,73b065a2,499a1675,88fc116,be5606f,80619d42,ddb63286,4d20521)\n,S(ef5bb148,98dd6802,6f25c363,16a34acc,c6131851,a4efe8af,219fcbf4,13a45207,49f30d08,291e60f0,975c93ec,403d2a14,3742aaeb,3777cb9,87ff38ec,b51967af)\n,S(58df8d45,955e923,ec7fc327,f8081ec3,7ca6e261,7fdf7785,6eed51dc,95057034,cdfca79c,92dfe719,2ec63f6f,f93d211b,d7cdcf69,4deac173,d3393fd3,7655a310)\n,S(2a4ca8d3,fff5ac47,bce452f0,1587a769,443e66c0,164558b6,301a6a2b,d3d44270,ed73b405,521274a2,3abe589d,c5ecd607,b6467691,f81e3c9e,6a2096db,2ec82366)\n,S(84bafd1c,7c6072cd,fce244c4,8ea004ad,9b8e1765,bb8796d9,118d6dcf,a5ac58ce,86ab8db1,7c26c921,604a3c3f,f0155a2d,14bd7274,16f9e319,efb68f50,2b636c00)\n,S(c3785528,7cc4e3df,f5e95951,c5bc5964,28705a12,10927e89,890726a2,ce00b657,302ebd13,5643eb43,f0bd14c3,65e385a4,c9a177f,96595054,3c3d96db,69ee8f79)\n,S(c3aa3cae,efa22927,56c72aa,53507474,50f7a64e,2df1bf64,333d0402,5dc87d25,c2eed94d,ff9c5cac,248f77bb,9e189302,286db019,64214d71,1a199119,4818ac4e)\n,S(443b9c8c,7d8c4f7e,de7168fd,666e79,5da85e6d,6c0f6448,7d349de7,66acff4f,2d4f1d59,b0d1688c,9fff0f2,f80e3434,db72d76e,6ff886f0,63dd63fd,e192b01e)\n,S(2afe7ea8,688081e5,ee8a4ae9,87aec6d2,ede5ec3b,ca887bbc,1461709c,bfc6e5d9,5c319df3,2556ffc2,56194b7d,eb46dcee,59208922,1e55c384,2a03ddd8,78add90b)\n,S(c62004ce,4d82ee0c,e2edb82c,e0ca98fd,413bbf44,55b96624,a86aa252,c346af6c,b68e4fb6,88f78331,bc2218f7,6a5e43f1,cac49fe3,4c5302cc,d6a3f1a3,258564c9)\n,S(f759c4c6,e0bd72a3,9aabbb17,fc62c900,d57e0b5d,ab9ecce6,8f439025,2b17cd1e,6dfaaff8,5f9f3990,ad2c55f1,3c74e3aa,aa0f10b2,90def714,229cd3da,d5d18d98)\n,S(b527a6a9,d27d0a1d,5adfc1c1,35308e5b,9a805638,132f61d7,e5e60709,ac3a9d9,e387f69,62ad151a,d920c82a,739af00f,628865ad,4ca42405,efd87e89,55b91042)\n,S(ba23656a,6b0a5c57,f9a00d6a,9e6a331e,cf0c8097,3675f41c,7f0172fb,caf4eb02,b48ac68f,1a108de9,18d76d4,95a811c2,b7614aac,3c5f6b18,f28de8cc,7bd4041b)\n,S(ad94ec6,fa161fd1,60dea3b3,2c63a480,9f7bbb91,49de206d,8cc61306,dbd18aa8,5240858c,ec88a022,7c1c12a7,862b4d18,e5acb344,5d66bf85,79ff9fc,ba866a4e)\n,S(db4cc48a,de1bff28,c8987eb4,d00e1c5c,4c49fa6f,125d213d,bd814c34,cb81adc2,ffd64cf7,3c62c097,a2cb3b84,c62bc32c,54fce797,74479146,7b9a2cb5,d6f821dc)\n,S(27d276df,fa39d889,beb0b586,42a0e479,8057760f,c392d052,6751f2bf,d0c75aed,c670b966,575401a2,a790440b,e5e5db56,2914aa74,e8304e3a,407aadc5,c87e12d8)\n,S(7663e9d8,e34b525,b336587,eba3678f,488f95f0,6e9a6848,d2e72d35,36b569da,472b1c5a,8ee189f0,7a06addb,e6a8d90c,dcb87039,aa35e896,79143547,34e2786d)\n,S(b2c81e15,1c1f8ef6,51ea1810,97eaa280,7e3b4a96,fbe210eb,b49554ad,6e0c0c4f,2d914319,f5ff59f8,c7038de7,dc70d1fd,6c4434ca,e5c0451f,4fa99f46,55bf8e4c)\n,S(25131e21,9406fae4,ab96326c,7bf22892,1f18aa90,c52f46fe,b23f90ac,59ca570f,2e8a380c,eed5d51,6c190251,4937aa0b,1f39d3e4,42ab2537,e9e8d9aa,396e4c20)\n,S(c2694b68,8e33025c,fb9929a8,c7ccd1c4,7fc5811b,9658ecb0,f41e4558,5d9a0c3e,c443d593,e68abc49,cbaa92b1,757ab2ab,c30671d8,4699a5c4,85a30b05,6b1ca701)\n,S(8d528cc5,17a371bd,9605d8f4,e7f030fd,8a82d489,5bfffb9e,fb11f63b,be534fd7,ef2f16fe,64ceab2a,d261bd1b,314ebc65,4b4127b8,643466a8,f367b991,d28795d)\n,S(409e69c7,62f856a2,4b6e80aa,baec8496,33b75c21,8943dbd,7280bf,e917b032,7f049016,62884d22,dfbda29a,c8061b7e,b82eb94c,13d7efcb,77531f8f,980babdd)\n,S(82c9b4b0,2451fde7,8ae877c,ed9af540,1ec0e258,119e27d4,1938f71d,ebae71c8,212d6e4,99b91fd6,372db1a9,4ce3fd9,c5443b7e,fb37a566,f0c5f54b,fd8edae8)\n,S(6c9fd728,37a39ae7,1f0b5852,e5c09d7d,cde66ec,e8f19a2f,2ab46fdd,d17c7f88,430d3385,aac729f3,8ef5ed,922e709a,73df8e70,eb9cdb83,c41e5958,272e8687)\n,S(9f012582,e527901f,ad1f350e,1a64702a,ca1f6670,e693bea8,fc3eb0fc,2c090329,a2fa07ae,c15e9457,b2c75e50,56c79a6e,a4c8f431,d3c720f0,60f7b5b6,da6e3dfb)\n,S(6a1a49b0,7b2b61d6,474834e9,953aa455,63910582,57db16bb,406b600d,bb01300,d4b93b7f,66ace505,cbbc2326,ddfa2fa4,ebab145c,ffbdc2c0,606e2ffa,9dbb41f4)\n,S(981d0638,a585970d,4b12e577,95e76c26,1e10d65c,c5a94f19,43560d10,472fc9c8,f9babd66,3d02e030,1fc0ed0f,75cdaf94,fafc18ad,2cc68db6,d2eff7ca,e6c013bb)\n,S(7edb47d2,b6295063,6cdda3d7,169b4296,3616b6dd,79e2e148,609a7722,476e564d,179a20ac,a6deb286,76fd466f,be78c3b6,789d31b4,91622149,4d7d634,d4bba999)\n,S(51867800,4bd8a43,8f180cdd,efa17ff6,e16e29e1,e5fc4ef3,f5fb9bd0,bbf14ae3,306cc2c8,60ae5871,8632f94,c9acb7,321ba1f3,5092a0b5,72c33b9a,cd8cc956)\n,S(bade1926,d8b0d136,69e056ea,ea46b2c8,2bf0f0f9,a25bc481,8a40ca8e,201500aa,7ac76679,c9807217,ee802773,dde582b5,6f0a4b66,f6e21764,285a6a81,4d584502)\n,S(87815e7c,d1e5e88e,eb882b23,955de59a,d63f14fd,457a8d96,4b47a611,b3e40043,ca82343d,8e2eff9e,314ababb,15cd03c9,6fe6660c,421af876,63500d49,ade0d492)\n,S(77d815d8,886cbf43,c1b4ce94,253e93ef,767bacc2,42ba7c1f,bfb7ffa5,308d855a,a8bb3f95,37ef9a77,ad7e282f,8ae05ab1,8131e59b,46a67c3c,7e85ca00,a2d3e1fb)\n,S(49079a0a,7d9d9add,3a17ea11,747c8baa,d0922a7a,e766e5e3,fb80ae0f,dbb7d6a9,162b4e23,58f03e01,b4e09264,8cd0657c,f2cdcf54,f6c25d5e,fe7330ce,421e0093)\n,S(28d61211,c183ccc,2b08168,5a4487d1,57bc0714,d3ffb16e,96bf0768,ff8075da,3da98c13,a2d1b07,2ddda165,3fb68a21,aad4a9fe,b4536dc1,507dd78b,7e51e0a8)\n,S(40c34a4b,6196561a,d4591c49,df51b8e0,4106e545,26092e88,72018720,41448080,7a6e7478,3ce7d82f,b83f15e0,b74ae6d4,435593a1,67da6f57,f2e285fa,8c107e4f)\n,S(88754e6a,e12e77ec,21e64cc2,bfaee207,f5c882df,80c8b15e,983fb1aa,99037c2d,5ae10e7c,e7464c69,472ce85f,5183a836,6ed5b3a9,1fb1af7b,d5078c76,2512f37c)\n,S(8bb7094f,ed62beba,d628ef9a,84a0679d,7e0d2b45,a655fa3b,68d9a6ef,b24c738d,9f5370da,993a3811,48ad4da6,2d7845ce,4cc81766,f26189c,2199ca73,4312d102)\n,S(79814e63,7bf2cfc1,cad39a36,b06fcc4,f7e865b3,ab2de1f0,c786f9f6,40dd80ea,aae4d149,f1e44635,e4800962,f533eb38,5f067114,3bfb87ab,9e68e27c,b56df226)\n,S(d493573f,93018d4b,8599b54f,848c3afb,816e098b,8e218e2e,6304baf6,c726513,383c7ff9,b3ab6472,ecb80f72,2f70feac,7ff26989,bcb6f984,628d5eb6,a409b9ce)\n,S(59599fc8,7d6a7532,5ce8f205,204596bc,4cec40b2,f3eae8ca,4530053d,1b7c731a,7a8d91e5,5d989961,889949a4,bbb71e17,84055697,b396a011,eeb33889,88f0681d)\n,S(4a834ec4,da3c9afb,c62fec5e,898aa2c9,5a835e60,ef199346,3e4bf255,e32df096,8736155,ecbec836,e8d51d79,9176a5c6,6672aec9,548aa63,b7f5524f,6b20cf73)\n,S(2142b447,f2707c37,45e877dc,8039161f,d222c69b,9236592c,c1b3f56a,d30a975,9a48f0a7,1ebfef1e,615a7d5,a9decf8c,70764133,88b0e57e,da554257,256e41d0)\n,S(c3831b8a,eb58dd77,e21762c5,f2e88035,63fa8b1d,f5d1fab6,3d012fbd,27971797,45d1f565,6fb2779d,6ae18e96,4d9bdf61,924a5f6,a7dfbecd,2224f1c5,70292f46)\n,S(a09dd11d,b78332da,663acf08,c08b3d45,d0f4740f,5df66e39,d53e6c68,f5654040,649959b5,bfdfe8cd,45fc89b1,ea21cff5,94f6083c,da8f5e5b,94525d22,3e326217)\n,S(53b22e4e,8a17b408,6b119087,2b8fbc9d,fc667b40,223ecd99,27cdf4d2,a9dadaa,87eb7fdf,b9c6e23f,e7c6a8d7,fdf94438,88c6c0b7,1a3728ae,ca8e83a9,4403bbe9)\n,S(7de0aeb6,d3c264c7,f39b087a,e62dfb5e,aac6fb17,483bf33e,bc34a903,f0ee35a7,43f92307,6a2205a7,f2f0737b,2167863c,43f3cec2,ea3abe32,9bba3792,6f070847)\n,S(ef20ed3f,3dd1cd8e,a610f1da,64086eda,a4a646dd,e2bff224,ae72f069,f341b532,c3477d8a,a0acf4a1,e9c83a1b,c890e59a,1b739a82,55d3747c,7403034b,221fd0f3)\n,S(ab21ffa5,3c7baab0,4ee74647,5a5e5800,dcae9a10,644c84f3,a108cd41,cb0dda53,3a02b102,dc21cf05,3abfe19a,2747f34a,35ec6347,ccf02880,5aa95119,110cdebb)\n,S(ee8aa184,532ceae,2c3a5071,d905c6ba,bd1982cb,391151f0,fa869339,aaa50ad5,157d9d2,be135082,9eaf2c54,94e6f90f,8a82ad35,2d486dc,58068cf1,c96a421e)\n,S(6b234cdf,fed7575a,f1cd7ac0,76c4251d,5853718e,2ea07c04,77959afe,5c0af2ce,223c14f3,d3d61375,d104402b,bbd51026,a7644b15,4f4d254,85e9a4a6,e8dc2831)\n,S(e04eb879,7821557,a875d846,75496d9e,420ac3c8,6e718e45,347a616d,7616e836,59f33383,8354990f,2189cec8,af523611,df4a1b30,3001c5d,84e1de70,bbc6bf31)\n,S(6b8c79d7,791e8423,788627b7,a99be936,145a8eed,178c8bec,affa8a2d,72965da8,28fece24,22f67bd8,a2d6ef6c,66fa51b4,c4abe766,7480b520,4f77bd8b,2e3863a8)\n,S(d21a9136,eed220a9,708c09ed,2b22f5f2,87868a1d,493f6ed6,2fe9a455,42a4da0e,efb15959,cc7a2c02,7ab7f5f6,ec8a538e,91df38be,f78de45d,dabcd8ef,9b5394b)\n,S(f950b37e,a5bfc8c7,a76ebefb,f228043f,de066a1b,cbb30688,b73e085b,cce1ce6a,6bc569cd,609a15d4,28ce7874,53ab8d02,fcdc9c50,c8c44016,ee2b62a4,16849616)\n,S(75a72a76,520a5f29,368338ec,fba063c8,977548f3,7bbe08a2,e1ff5e97,88b9bd3e,41c140e4,5e2be58a,dee8af9b,e64cbe8b,4c82860b,98299d52,3b27737b,3266f978)\n,S(4474da75,3d9c68d7,2218648,1ce835ca,4e17220d,533adb53,38a1978f,cdfbc3f9,b5e2d3c4,ae2c8276,5a337068,58e76666,52a81638,27cb6b94,3d2b80cb,36ad3eb2)\n,S(e3f3e682,fd38b067,33f3e91d,585f3ef2,aaf90409,ca125479,b93039fe,3437388c,aaef5ad5,4bfddc87,f7c3f969,94564ac2,27e6d5ac,ffd345ab,246ee2d8,60d9242)\n,S(140ea6a8,ad374157,396b064,f7a952f5,358ff408,951895ee,b66b6140,d969afc7,2f340af0,b08a67db,e6ea7535,581b763,24308f37,6015de2,a4dbfa64,1990cc78)\n,S(257c1e04,2fcceda7,9aac2bb1,1f01bce9,37b445b2,bff51fcb,555395d2,d0c16b89,73b21d9,75bf23f1,aa0efe21,5141bad2,5a235978,e36645d,8503a60,3956cb5c)\n,S(c243452d,664d2610,d1acedb6,ab5201b9,cddce44a,b9320806,4824329a,e0b7a550,50607848,db2b53c3,c9ed2b4,8c0adc28,322d2e,1b30c3df,1ab9dc37,64b001ab)\n,S(a0ae37a7,3aee0e63,c0ca3e50,e59a660f,c7ced178,10dcab26,7f91ed44,3f265fe,8332d25b,94e0555c,21ebab61,cd209599,bab277d2,fb9660f1,f237c9bb,4327668c)\n,S(2e4886d6,678f10a4,460b4ca4,a9964125,413a739c,64b6abb9,c44f675,1b47dca9,96f6bb70,9602de31,1be57a61,966c8227,e5dda6c0,48d3f1d3,bb5bafa,fc1e8de)\n,S(855b47b,efa7dee6,2452a602,980258cc,de813ae4,6f580a46,d5d18432,5b423f8c,c27f5513,114fea7f,b5a405d2,3f25915d,775ac895,7fdc6e74,2d968bbd,d86c181f)\n,S(dd360b5,38fe460f,9d6ba828,e2ac7973,46dc386,de05022f,fe48e891,a115e2ac,8fbc127c,d9e79454,a0be9bb9,cf25b7e2,71a02e7f,b4c68653,b7e08329,747cd68f)\n,S(993aa6eb,47f7713e,e6c5bea8,1a65af55,1036d0eb,3df8a6f7,e091c16d,3f424c7,8478497f,a774307,d47ed357,35462f3f,a680eb87,fda11107,275c1883,e859ee34)\n,S(4828feb,5e3abb4a,2df7b990,e20e1214,804ef219,4cb8acf6,cb8e85b7,5696d961,d8d2636a,6b664b15,f371ab5d,3ff31279,f7c42678,ff380ab0,9c220b02,6ecf3e3f)\n,S(fb8dbd84,64bbb5b1,904a2610,2321e59d,ee9debbd,afdbe585,3e1af139,f8fc472a,54e088c0,91a67284,6c81d136,85b4edb4,391e5121,3c4d35e8,47863018,62844742)\n,S(851fc8f,cf378f62,5edb262d,e0360d2c,2e9566c6,93abea8a,aec29e5c,275ecc9f,dbe6025,e9857155,83b38b7,a167adff,da70398e,85223a6d,9b940fa8,30a9d9e3)\n,S(4d5d07c4,23079d83,d001c000,8c76fb6a,e03bb39e,325d5794,b5414b,46c6777c,d1c1e970,5b80fef0,8450f941,1b8d6197,21f1491e,87745c26,9458d58c,18d14678)\n,S(8164d5c9,cc72b489,b6a54e8b,d9cfa9f,8496cd34,3a227a74,f37948f9,5d35340d,90b51776,9e8c68c9,20f5e948,755b4da3,2b294bd3,eae81da6,e0c0b287,ce229bf7)\n,S(19a42dbb,9ff7a400,aa821c88,807281ee,ff7df5c6,e047cc51,9693c191,6145e00,369e9596,903c35a8,bb38f4d2,a74da3c3,cd2246d6,b0391e98,e01d6101,439a1018)\n,S(7299deb0,a9b7bb52,76c8acae,37ba0ee7,bbfc9c0,7845765c,136cd762,7e7b7f09,8a0a1d16,f00e3090,cfd9cae,d8aed291,ebc56d97,66a131a1,4fdcf6c9,ce6b49bf)\n,S(12c7adbf,112e7718,a3ec6774,1597d6e9,87763a10,4350650,e6a804fa,507ecf6c,b3eced7f,bc3073f2,5f86d647,6d822b8e,eeeab7f2,1b3263be,615517e8,ef3b1a64)\n,S(b2d76aba,c1af6c6a,b4840b34,db1125c8,d5baf2be,90dc7e6a,52edbf79,a4b0ccf6,92938b87,641e0886,3f22f5ef,e27f9b18,80210d14,312ea6a1,eacaca0e,58c0f73f)\n,S(818baa52,8251c326,bf545ff3,a56596b,58e0b525,64ae359a,c1d5199,4b52106a,9f8b4753,a7b56b26,e0e79b9e,9ae5f30a,64d0ce27,5898bf3,c0f12e43,faa69681)\n,S(e08080aa,21c9b6ba,da128bad,62dddd3e,e8e5afc1,c460b997,45eab92b,b1663a80,2b878efb,95a19892,8b3609a1,cdbbc1ad,d1530a38,b528539a,c52fff24,2c382dcc)\n,S(7a8486a4,1d774bb1,32321247,f7b87964,1b18a621,508f5376,99b31798,490f3e8,ee8c3085,5c3fa5c1,6f90b68c,89944aa8,dcb824c8,c37a0feb,ac796403,15ee96a0)\n,S(f74e74f1,6e67c1f3,f5952373,e53cb85e,650a6dae,2302f495,f6882b9d,e2b71cea,1b15103c,8566d2ee,cf5c59c,dab607e4,97075e30,1443b75,42620545,2d1d2bd6)\n,S(3ab4150c,cdfd6793,5f8718f0,dc961126,114a5d82,e1791c2d,48740425,8e8ba004,2a6c6f1b,9b546945,f9d327b1,437b1c58,30a48eef,6a14887a,9d8ca24c,c6bc446d)\n,S(effec0ed,bb80580a,7bdf80cb,38cf775a,43b786e4,2c80d73e,7a254216,ed7ab7c9,c7c27bd9,57c996e0,42ceda33,2d0b5972,91ae5725,6df77e82,48bb1716,127c582b)\n,S(5f49ea21,4d80f735,fd5f51d0,55d4e2f0,fbf0f804,a8f32615,340bd6c1,65a059e1,72e0f032,83684df0,98e740df,bcc39d61,6956ea36,275ca5ae,dbcbd682,510496ca)\n,S(2327c29a,7f906,4cbfd900,43d28618,5c555bb9,bb64bab1,c3e20417,4cee2591,db1711bd,ac9095db,39e3d2f7,d2b84129,41dc6f8d,116115eb,7bfe710c,13b9e41b)\n,S(12f2f427,64f77c84,f8a97c5d,7743bd8c,cd0c6132,5cd10fd1,76975a97,b447991,713e4660,cadecd98,3b0e4986,855c2c67,bc220334,2991a18c,bb0c08f6,8282b246)\n,S(cdd3eb6c,b496141c,b99bde6e,a66b2c78,7264e6c8,74efdda,5ffc53e4,b3292a08,d1270d9,7cd63394,b385739f,4da31dc0,80f410a6,aee164fb,8147b7f6,9f2f1cc9)\n,S(2ad4df2,1ff316e7,ce29d76c,da40cb7e,31aa7e14,49fce23b,93f0d096,e1b74159,972c77aa,160c98d6,c64dd9d1,4a0cedad,875e09b5,b0d5378a,7311cd2d,a7d641a5)\n,S(df0ed61,d6c8f906,f970b9af,b4080368,2f12127b,e318575f,8e2111bd,514c33a8,e9e67c4d,7b1b0fb6,fa0a4640,62d72f,28180e6,bc8bef1d,60a1ea79,2c4f259)\n,S(9572faff,160577b1,83aca01e,45d61647,7dfe147f,a6ae0b26,ca0264aa,23d2870f,b7de270f,572e1503,8a4a9b3b,706eb7c0,2a6e5e56,ab0f73ce,9f4b7926,a79c5c5)\n,S(52583f1f,1d51acb9,bd25b63e,158f66b9,8e021432,427efd5b,bd629594,ba951264,3267373a,94719487,344c9af6,1eb4b726,a595bfd3,41d78b33,f3db8897,7e53427f)\n,S(c95cd125,7e59d04a,6d953d7d,f68089c0,c29b6a28,90ff264f,74b469fc,af7cfa58,f5c7c7fd,82d3fd51,4031ce72,657cffd2,da83d072,9b0c4d6c,66180214,9e6ac90b)\n,S(67a190df,e1a2bf4e,cc23972d,24d1f13b,803a9b4e,5c1f3cec,55d2c2c,3b0b2487,5c35f795,c29a2f07,74ded776,72ab5a7d,45902f50,e76a229a,212d580e,5edeb8c9)\n,S(7ffcb588,ee9192c4,3bc5bd3b,4d0c8211,28c3f2a0,62ec3b0d,77752ada,69f468e3,9204301a,fd0ecd0d,26f49878,47c42c70,e526f7d2,e69a97f9,2aa1c357,d4140a8a)\n,S(7d693f1e,6e35e062,83f35910,3c1cdd8a,5279c4ad,ed0edb63,d6c574ea,322e91d6,a9042da9,ff323c4d,46b2b40a,1d44970c,92e3cb32,ddd8dc21,d32d609,c5611888)\n,S(7e0e5dae,8ce3c883,49a9ee95,fb357694,a7bd48d0,f27c2eba,49896e4a,3da04fab,a397f8ac,dd4077f9,58d7b5fe,28582bcd,4c46d1ea,fa253db5,18fe90c7,61dbaa4d)\n,S(715ea4a8,e5eca76e,48605688,560872d6,7a499a8f,e84f715e,a91d724d,71fc0f06,9a7b3eda,8b82dcb4,60ba3515,18c22f59,fade0636,dc893050,a51530d,77ef8501)\n,S(52a9c85c,ca99e4ca,50f5efb0,118fa604,b7e789b6,b589a5d6,368bab11,44c8dbda,3796e4e7,87dda75a,59c7503a,f27732d,8c973414,c1ea0a90,fb6cede8,a5066fa8)\n,S(58f1c65d,ee5ea200,57644796,a94e4a42,771c827,fe032116,657e990,b56e42e,7f12725d,388a22e3,4f191714,9f48f0a3,3d537c8a,1037247c,de0594ea,a11de507)\n,S(3ce165f6,5f569bb5,e594110e,ef91f30b,7e330586,e86cc4c8,347d1ab0,f4a8eda1,90480327,7376335,72d92c00,10313f96,9a0c5d18,c852597d,1f88020d,f69987bd)\n,S(133bb4fb,1a16b008,80379e4d,ca980355,c747683,cbd7e81d,87a9eb8f,4219a314,30e76cea,f57f8b17,de6d31e,447fb926,b1678651,e980338e,8f8327d2,648ba25c)\n,S(cb26bb35,4cf94461,c675838f,653c3844,24ce543f,32ed7b5,ec1b6b33,a2f7670a,d6f9be8c,7f3781ea,fc765264,c9e84f2f,6d2ff771,25b8d381,199b67c3,763c4f2e)\n,S(7d944d40,58cb78ac,739b85e,6dd3be5,6b08fd56,767fd02b,1d5bba08,d4639f1a,79716d18,44baabcb,aded3600,ffa68989,45920de9,1f2cbc83,e6326ed4,e37c3fc0)\n,S(c4577e42,ad4014,e1fbc0a4,d69fe37f,49937d1c,19a95765,74f2437a,d06e6589,4a76bf04,18a4a8b,af103581,b6c2cd16,727fccaf,12a3998d,52b1a095,c5388570)\n,S(c71f462,9196f35a,cefd651b,3f6f2b30,485e35f3,305dc774,21535961,60a17a0f,9ff53452,52ccf823,b83d47a1,a6a70f84,b9c83142,db0136cf,d03b1f24,6ec57590)\n,S(35acf6e1,cad058b6,7543eb60,ef4d896d,c21c4b5e,292c3885,d9e42cf3,85bd22be,cce4ea31,c9a37f8f,21e32a5f,6f272699,7cddc6fd,8ab11c0d,12c3ca4b,fe6b0e92)\n,S(c2872bec,f2abb3fe,8a258b3c,51a2bf82,6712ec12,587cb33c,a6765a4f,e3a3e448,a739cf63,63cdf69c,15c9827a,f759e0fa,f7d92112,9bce9e18,bad86c0a,9f6bf467)\n,S(50fa12eb,c3dfb3b,dbb61a16,a8b0cc6b,6e6882ae,f245360c,e5524143,27d2bfe3,873afcc9,5ed9a3e5,2f1b0515,d901e9c9,3677d49,4e64a478,11ec59c4,c3374393)\n,S(3ff1688d,65cc134e,c6f27fa2,eba78abb,2cf22eeb,57163e2a,150ed7aa,17b3640b,ec8f8f66,11d8f7ed,a296e690,63b3393e,58d8bf85,90630da7,3dc2c0ec,e9e05870)\n,S(91a113c6,c53b57dd,60b2eb66,e6bf7ab0,e721dac1,acd71d76,2c278b31,f2fc2701,beb6c79a,2fdba188,4f98ec5b,fd97626a,131f5c16,d4466a84,a9d77213,96220b17)\n,S(732b5521,e6cb7053,ebfec5a9,c5b35f47,8da4a9b4,c4bc5708,42b0e8b1,242bad45,30afe970,fa640757,bff0e825,93a102b2,e1b619db,7f7d68f1,17f27543,e72f57c)\n,S(94831570,f0146aaa,fd2a7ee5,11f992c,6e2999a4,b22cb176,dd516dbe,e0e16e5f,eb275132,385efd06,35baab61,5367697b,8bef0c93,14fac991,4a2c04e4,aaf785df)\n,S(dadb60a9,3af95d47,cebb540a,1c0aecf2,839f1be3,e264a294,bbd03317,686726b0,8b4bb755,46efb999,cddcb88a,ad5b28dd,b73ae1c6,48c810bc,cd9d0f03,c200e27d)\n,S(148ebf0f,7e23a220,52ca69ee,57237eca,6c1caf1f,faeb8718,b9b8dade,4b97be1e,32f68bfb,464ae6a2,b23ac7dc,3910a87b,89ff7042,e863ed3d,3038d75a,f3689f4e)\n,S(ec532193,614ca440,33a8275,49c65e0a,af446a21,6705f9e0,68e448e8,6e882bd4,30277366,58dd1673,d9f701ab,50dc3238,f073a297,d579cb8e,2ee51dc8,bcd44b36)\n,S(bcb65ed5,b16fe248,bddda875,28eab71f,d9357099,af71ddd2,9a8471e9,b2b26e99,ed827c35,e6e13dff,ade8b9c9,d2c620e6,576db5a7,1b1e22a0,3f943f96,cb7282c5)\n,S(de30301f,18df0e9c,15d709a1,35c30473,28cd3356,95922ae0,f283290a,638d516e,89398261,37dbf197,53012e47,6846f6d5,45a48312,bd6f4c65,255b89f4,a1b9df99)\n,S(2eb56a7d,b051e9a5,8a7c12a3,a92509d9,5da4956e,8b820006,aef166fa,92873644,30867ff9,7ef8d955,d497abfb,463838aa,c946d487,d702956f,b75ebf89,e25bddc2)\n,S(88f839f6,d7f06f85,82ed781d,12062442,66d4f9a1,e2007a89,f660fd24,ebb30d5f,29ce1d8a,376a587e,96fae37b,521a8903,8f0bffd8,9f9934d4,eada0750,32faba00)\n,S(112cb93a,8db33b09,641aef75,c3f9a399,b1808314,64e8a855,16e309c4,99ca9a16,66b1a1cc,f2255c2c,119bd0ed,a75dfe73,fe2e9d9f,3aa9a6d7,43a4b7aa,9d76bccc)\n,S(407dbfb5,53b43e95,639aa6c8,d6868ef3,2f41f1ea,70cd4aa5,9d76ea2c,83b567d7,69fdde78,a4971ce0,b05a57a3,8891691c,d1fb371f,b1322a6f,97849c64,bd7b57ed)\n,S(16fb5fd1,fb41d76d,ffc130d8,9549465f,7976a3b1,ecd6a4d,9e5d55e6,b2a6a40d,3d39a810,95904ac4,9559aa89,8fa087b9,b84ed72b,55f17fa3,aef8b32a,10e942c4)\n,S(e40302f0,6c102ca6,e6be1370,2aa6e860,5e71fd37,6c87e2d0,c0ebbf49,6fcb31c1,d32d294e,1e80cd,94925538,2156db9f,2bea101a,f652309b,8943cdf,b82d75a3)\n,S(8f2cfdc0,eadf8b00,f74305c7,892a4326,9cd31300,d716d652,92a7a36f,7f1b3b9d,6d0e726,838fd161,32d19538,147248a9,5d76c7c0,beadf1d0,b553e4b6,b7d1a2d1)\n,S(c7a636f1,1a9cf793,4385daa0,5c3f3abc,8c3a1589,7be0b49d,ae789fbc,e07674cb,4f715f0e,e52c638c,954b8b3a,84baac76,6a891889,db0b7f82,6bdf81e8,4040cfbe)\n,S(245aed6e,5fc309bd,980d5597,9380e8c5,79dcc887,a2758e13,24ed3a1,833dc820,a7980b85,c6ce770b,13a888ff,22a1356e,4136eaf2,49238c38,dd103016,f0d0b1da)\n,S(91ea17c1,d90556a3,722dffa5,631286b7,f9db0f01,e411ac16,f5203c4,1a8a824d,281023e9,88fdcec1,94af265e,c407910c,54d25f20,69d64b13,c5261f0,c157a3c5)\n,S(729db97d,35fdb72c,a354c65,a0e7f76,7bff9ade,964b1d57,a98f9bf0,39a74eb1,59596a57,7c888b01,6e00143c,63f0be1b,d86d95a1,ef59e075,fe7e377,1472bfc4)\n,S(f8cb711d,f74a4961,1391871e,d8de6a63,89679130,b587beef,f4eebcbb,9daaae9b,4c52c310,c6f960c1,53f386ed,6842c4d5,bc1b4c99,433567b0,fbc40e93,91a5e022)\n,S(1700d0a,32624d75,258d80a6,2228b6ec,91e66949,a463f3b5,16dffe43,b9fa08fd,a007bbb6,b687b509,f450908e,b617f176,92918f18,be3113d3,8a80ebe4,4ee750b5)\n,S(9f2f3ee7,70a2c422,b9b92eb8,a52570ab,b5354154,57f0efec,fcd9141f,62894132,c977d79f,ef198135,b69aa3c3,77a7f251,3274911a,73736b2e,c543a721,17908588)\n,S(86f75064,8a2b829a,91acae01,4beb20f9,aa9ee46e,8e513678,c4fbd7c3,2ac36e6e,1768035e,bd1fd375,7caacc22,495a5902,a3c616e6,49eeebe7,4377b996,30192b28)\n,S(1d4207d7,adcbd969,d432bc74,35f2fb75,b35adbe3,fa1f45ab,bf3ee074,b8269f68,11d80191,accff888,928a0835,562186c7,30367e90,91d310d8,2a712a9b,13d70f99)\n,S(f782bf74,2e55fd7c,ab249b2,1570d9e8,cfc12f46,5330d2e6,57eff609,7c3d19b6,896e9e48,a60ace9,84d07ebf,12449980,9d96639d,101b3405,59eed877,908394f)\n,S(22bde2e7,e3c0d268,f556c478,82e50f2b,634c4235,9067cbd5,a0daed53,1a166a7f,5e03a94a,5baf0f92,7f4beaf7,6b7e9649,aa578eb3,f105515c,ed670c3e,e1fa3e72)\n,S(85ef9f8e,b54cc4f3,aeed4769,85529945,7eb4f3bb,1e5849a2,aec7b257,a8a9a074,8a0245d2,f0c8eaf2,84a01114,d29c65f1,c146af0c,dedfb5ff,9e3be650,e2acaab5)\n,S(3bd6c026,63620684,4d2e1a89,2378ec64,177145d6,24062d23,ce9c2d08,4f34ca81,7f0e5053,87fade82,8596f440,3687b04f,4a2693ee,25361442,1d9712e4,b3e0c179)\n,S(364f9a2d,641173de,4a0cd185,972f6d78,75b06722,3cececc2,9bfb8aed,7ccd3311,39e7616,8d64795b,504de9d5,3049dcb3,a95fb3c9,affa2d5e,8e8cb35b,6cf71219)\n,S(8833f933,f4049c7,98493b,e5f764bc,47dae8fa,baf420d8,44c7436c,eec27898,bf615e47,1b0f1029,1afb2839,2c874f83,ae55b15a,58e61be4,12b7c7a6,13868279)\n,S(d4fa5129,4835f9dc,49cc3ad,b9401f61,97654f43,ec88f206,9a63852d,6abb4a6,f24535f9,9efed47e,80d66925,8924e56a,44530eba,a2aff32b,70f36551,1db59521)\n,S(50eb8613,99f79883,58b9de58,88c47cd7,bd4547c3,96e1280f,2806efd0,d0715b89,dff64137,f74442a4,dd0c25ff,ea968845,f9e14ff4,d3e32010,f1c64ca7,6afb1be)\n,S(f8608ede,92c5a1e0,5f61c065,606ae232,b0f81161,bcec88bf,b4f2b14e,22165cca,e583acc4,7ee133b4,8c3c1eb6,5d6f4891,b53c84ec,7bb352ec,3b6e41ff,aa6a2089)\n,S(2c00145a,60e21169,98f23b9f,6f83223a,6ceafa12,c1b92844,2a17bd63,582a4fd,ed76c7cf,c65a881c,5dd270bc,7be9ce49,c2990e43,425ccb7a,eebe64e7,eff423d)\n,S(b42d4c38,79f7aeec,96f212f,1d5bd79f,bdeb9850,ae44af81,b4b3467a,85c29c49,7bdbbcb6,1eb04e41,9ea8f9ba,dd5289e0,d718158b,63ef0599,55e3c5de,41f833f1)\n,S(a5831ace,8c19fd68,85e9b9cf,34b9fa4a,9e80eb3c,36e256cc,44cbe521,6efb7128,e10dc489,3e0fa1ca,f2dee476,5b8ab518,c3778f4c,583abe27,af293869,c765955a)\n,S(9fccb821,59ed46e9,18a407b4,967e1154,4566afbd,df6c0639,d5cced94,50e56b17,c430e829,438188ed,a443cb2c,aa7d6939,3004ed75,5ff61e57,8dbe9e64,251615ee)\n,S(c1efe41f,44186467,cc0def62,eb0f0ac9,22b8bad8,e2347849,28b465e7,1789fcc5,5d73f89f,709d54d4,e167806f,a07ef07a,7fd1a7aa,dab9896d,33c290f1,dca74872)\n,S(805c0816,43fffffa,c9055f2a,996fc2f,fa02b4ab,4fa440f4,8af5878b,4eadb694,b0a0dacf,d9b3b9d0,51ac59e2,b367a8f2,eaae274a,ee2b05d9,18cc0042,eb02b6c5)\n,S(d5da1b82,9b477768,bec17829,1c9abc82,b595bab8,6240e705,715de420,fefe498,dba833fd,df1915b8,fb43b39d,dbbd635,8f12d4c4,31b547c4,af07a6fd,75fde785)\n,S(73a2441b,1f1b9ddb,844caf0f,8cb0a91b,5adc6556,6f883026,8ceeca8f,7c6c5cae,512e46ba,b47e9eaf,64cfce27,24566bf9,ab43e32a,bb0e098a,5dac9687,11927437)\n,S(dbff750d,bed18702,eacea6d8,b54540e6,ae60ea05,85d77db8,7a63a050,806037f4,1f349895,29ce56b8,bba91938,16e842fc,f74b56e1,568857d8,2f193e02,207f84db)\n,S(57c73f7d,57c7882c,5d574f70,fa225552,ab3d7741,260bfd3c,b616d6be,9698dbb9,f633edba,f7f6cc7a,9d8ff9eb,75bced20,f865fc9e,81245e77,32db2ed3,876e42f)\n,S(6663e27a,7760f187,a1f67823,64044da8,d4cb82ef,e296f5ca,90c5d81a,49b7cc5,4df0d12,4ca9c8db,4885f8d5,18cbf06d,f5b437e,242cf86b,b11df29c,5c83937c)\n,S(83f688c5,88ee13f4,a9e72023,5169dbd7,ebbe0c68,4cb61827,3e2b75bf,5fc581d3,f76e519a,151ba05f,df5f11e6,f3cfbcdc,4b00776b,14c4598c,51783088,2b2bc6c5)\n,S(2114e129,1f65c339,d1bd4373,6c677937,4385b3a5,5dafa8e4,a0515134,6b650389,88103399,1b682f7e,9ba02fd3,e104932f,802ed44e,b996beff,7fa9523e,c9c2a9d4)\n,S(a68b163c,db6c8aae,8ddeda39,7d8031a1,394ddc36,48168f13,47774ad1,d569233a,eba470d3,4ae15c94,57ba1b3e,cf5f3d96,682b8095,f83eba7b,f319feee,6740d3e1)\n,S(a44b2a55,baa92a2b,cdd2f06f,36874d69,40416b79,20bb6daa,2bd9edaf,c12bbaf6,d06941d8,28f1092d,3667ce3d,59d23159,54d6cbcf,c0da31d5,1663a6bb,ccedbb47)\n,S(5630eea0,8fee5570,c094ded,917746e9,18535cb8,b0286bf6,f6cc294d,5714fd33,91f60b64,3457dd9a,b2a02ff,99f931e,b38b4d87,204de10,d8a30cea,ce576b62)\n,S(cc8b173b,d3112432,cd0c741a,8620fc26,ac5c5d89,e05c18c3,13067fe0,a41b4b00,8cdcccfe,b4ca500c,34dc3087,58f424f8,52517974,9a33e27e,8859515a,2f7c0926)\n,S(abe16c8b,e0c99bf4,d396e70d,af00af89,b5d95f5a,3ba33570,892d086c,4b807943,14b2bcfe,8cec39c5,826fad38,9b8f8788,51e1595b,b25b1a87,149d8627,1218e9b)\n,S(62411146,ca2da616,b557f0af,ccc2cb75,d278b07a,4dacd864,7e449ddd,cf29c09b,d081b63d,67ff0c07,5f00a3c7,2771c581,87804c1e,4ec5bf68,faffbd21,4c71e15f)\n,S(5952a672,a50af560,66de08ad,be4f5cc2,38f3e4ee,84160b1d,14534c4e,2b50ed52,f7d7e2e3,e9612005,a0344e93,454f112c,792f825,f3d3044a,28d9af6b,798da761)\n,S(128fd5b5,420f68be,3742def,c987da3e,bca771d7,af1cf8e3,12d6b3ba,df162492,afe5edc4,80c1c8b9,5580dd8c,aef14338,c09fbf6a,a1c951d3,57ca4df2,9d3f183)\n,S(6315678a,13cd71e4,6e283287,24499671,6adedf31,38841718,cf5168f,60d4bf8d,ff691d8d,c5f97f7a,f2ae319b,dc590518,6ec3bd36,7f492d0a,95cda47,9492ad3b)\n,S(50277159,4169f70a,ab39095d,d8027324,e212f78b,c3b0865a,a57f1574,dba1bdb1,e31fb30a,58eca0da,aea93548,bdeb9f32,325d6c30,69b3d936,d610bbc0,de3b771f)\n,S(51eac8f8,8cdd7ac2,46375960,c6b7d9fa,a89352a5,4024003b,cada1e6f,df389721,6d4c8750,95d6ccfd,9d8a5830,c4672c71,d414ffe7,cff2cc15,b7b5d169,48e872d9)\n,S(bd39330,76c0f542,a0590ad6,398b2418,92b899ab,75ba0065,b1ace928,b8cc0ecc,12f4bfc4,57e97c3c,9d4a21c2,ad106ee8,8cb5bfc9,92d151ad,589e90f7,d65b5d8)\n,S(bd0eb600,5ae967e,81214a1,889f7dc5,d1e765a1,af74a93,f5292758,539d6dd6,2e532797,9e6a22a2,63025e57,4805e4c2,6d62b33c,5269d35b,bdeee7f6,4a2cfc3)\n,S(b7b068b6,8ed18d80,67a0c971,a06cb3f0,5c96ad7f,371dd849,aec3a2f9,bbe23eb6,89871d76,d3e6b605,9997345d,4246087a,a3fa61c7,dd75f5c7,b2ed1e20,59a00350)\n,S(10cf2c38,643a08b,dd842c4b,79efa2c0,3b5dcd1b,c708b253,ef71fba7,f0e51f48,e37d14c,934524d2,dc562f6f,997227e1,44094184,e8342995,d5562000,34e71f4f)\n,S(5936b571,20b6dc97,ee242ba2,deaafad4,5ab83795,9f1e7390,54a0c026,df7bb342,86bab74f,b9d4f776,e82831c6,3a409237,d5923c7e,7b3e0b18,12ae203b,64fc750)\n,S(67bb9ab0,bc48fafa,3ca66493,995ea995,e36cdfb7,152d64ed,ddc56aa2,6c315896,cfa9a456,dc2c82b7,f87f4216,e365f5e7,97223d2a,820a127c,a5ee4ee9,281b71b5)\n,S(5580326,678b44ad,fb313c23,dd8a7dbd,c6869fd,70cc58b6,d20f8b92,ecfd81b5,6d343687,f3dc733b,55dac794,c895e5d5,9032613,563f2d72,ee94afe4,c2a932d9)\n,S(fe285767,53d2466d,d056d2bb,b7141cf7,e52c2b96,d0ef3c8,52c728a7,d2dd8126,f344b3ad,c8077e92,24c6c5a9,c9f40a1a,d8721351,6b8691ab,c5fa9f73,726a6c98)\n,S(12f25359,638fe4f3,97a17f99,c233b2ea,7a794d71,e677b206,aa32f251,8cef615,dd0d68e5,324e4325,ebd45766,441677de,40c15792,19d65c6e,9c63f15a,91519c20)\n,S(f1e45fa7,21bf7fb4,45fe3eed,29c26bb8,bf1ea59e,de7c1a6b,e652663d,233c3e9d,6d145f2a,c3a041a9,83b9865e,66775342,a0f8a435,de19626d,ca8b9328,797e20eb)\n,S(6b6ab442,d2623235,dcc7e3e4,85d00ade,7f219576,509c528e,6a3417a4,fefd328d,5d627367,ed25278a,6d3505c8,e13970ba,253a26a3,c605d11f,1eb345c5,56584e95)\n,S(83e10be5,d21bbef2,ed1ceb33,c4e558ce,bee76405,257d9573,51f5d90e,f219552,41f5e174,c6e9b283,2a39c2fc,4d4fc573,634a8975,e143243d,14dc4be3,434a4380)\n,S(2ba25948,9571ce20,f792129d,f43caf4d,ddd93b76,e4c8cd63,7a9de68f,f8d615c5,9469a49a,d1a814d4,2f460325,b7d58f2b,eeb85183,a370cc3,69a685e6,a87f6e61)\n,S(3fac1508,b669f540,77a840ca,3ddeec5b,b70c03b0,ff93a77d,f2f73df,2728f36b,dfbac9d5,ceb21745,a6d27c3f,d6fd96b,af708066,a3bf765a,208b7231,d5fb6955)\n,S(8996dc02,9b79d0f9,d57b8c8,549fc01c,2e1c1c7c,2ce2cd70,7a0bba0a,b3420ee,d08fcc05,5194c4bb,2d17ad54,2f9ec734,f2a9ab8b,a7dd0467,c5d916aa,10f7b8b1)\n,S(16af9433,c9baf15d,921f931e,f530a477,b04b2e03,e1e8cd05,42e20628,df7c3241,65863e2a,acae34b5,a1dd53e0,5efd423b,165235cc,69195973,2d0f64e,c5b56fac)\n,S(d82af39e,eda70e3c,f28e2f6b,b8009131,59ada2d3,854e81a9,3798e402,43d1d3c,fe03de8a,326e8bd,b202b5b9,929c2f3d,4bc8abea,a2377cb2,29cd4630,d1dc1c50)\n,S(a7ad92e4,7a442903,c2f91033,7e2ebc98,14bfc943,f2747eda,666bc813,c04382ef,ffba6b43,9379448b,56b20163,44439b9e,8d6da764,72f67a27,9c7f45a,359234c1)\n,S(fe9b9274,7b27f7b0,6419dd38,53e61762,de7a5116,48008802,681bf521,21a1ff92,f32bec26,b9d24872,1a47c65b,48426130,b8e72e68,d231bd4d,82c5d4c2,bde605a9)\n,S(8e22ed5b,e5d80940,970de428,5ca609af,872b8a4f,b8c93942,fa1e62d8,588ac5f5,6a461962,b74b0f93,afa72284,4837ec30,b99a65da,d688c161,cfa42028,2ed97167)\n,S(bd3bb0ec,bfdcf06a,62f0046a,989b45e9,c76f4d9e,b3225495,eff70685,71518fb2,5592029f,3eed8e35,727865f1,dd2a6de5,e19e6eb5,f92e520,529fe97a,c296820a)\n,S(50a9dbb0,b08a48b8,76dc65fe,6e2efd92,d44053ed,73b8c279,5b688e00,a1fd1455,4a1fae82,51581f9e,32fe8f67,5675ef70,dd7c2ec6,2a42eb3d,e1aa13e6,717df147)\n,S(6c1dc44e,67b52cf5,a4564ce1,7a9da713,c718833a,6d527e7d,ebc6b1f2,c893693,89cb4508,681d58ad,77900c1c,aeb25c59,b307c9f6,c84f1329,35e32af1,e39f8f67)\n,S(3ffc35e2,4d4fd0e6,ffe4d1c9,b5097d10,c12dc7c0,4356cea3,b5fad66b,5f3333c0,89718e69,78748c6d,e99d181f,137eb74,6e28b05f,27af7726,e86c5f5c,daa1eaea)\n,S(fe2261bd,b40fc492,99be54de,1d0bf22a,634aec85,77b5e9e1,51626d67,3f4214eb,896bf33a,5c9b7537,b621a168,f3da1bd7,dbc94816,922350fb,38925c96,5e57c175)\n,S(129b6e5,dba2fe86,749274a4,f1ec5999,b2fc682,933a1120,cb8e16bf,4f4131e8,24dce651,b0fe4770,6c78c217,f0d5ed4d,4bda4e7e,4e7ea6b9,ca59e751,b018b5bc)\n,S(c2d1b280,79d91abe,1a44c4bb,96ab548,90323054,94075907,37b39ea5,e1fedd72,6974b9f3,80edabdf,e7961bbd,71ba1971,ded6ba24,90466d1d,a5715d9f,92472637)\n,S(d8dc5f38,76f6049d,a9a5c9e9,396d287f,911e06cb,ac0148e8,26c8de93,15bd464c,701d0a43,ab41f321,b8f86ea1,b1f51d0e,c22a3399,c1d8534a,433ebc2,38ec248e)\n,S(2b1a41d7,ebb9756a,b62a96fa,57909ad1,a747dad4,b3730da9,a12dac8e,3ee4c414,8ebb1512,3f43224a,c2cb4ba7,c90ed765,5470a968,454d0c81,1ebe3384,5c6ca968)\n,S(724fe9d6,e7f75b52,7da19421,3c984e31,f63ac3f7,1b5819bc,344ea339,567bc179,a1db688d,ba1d85fb,20da08f,802b5195,163d179c,7bc60f70,4ade1f26,4e1552fc)\n,S(835b30f2,8e54b834,5ce95569,7d71b7a5,7cd4b5b3,17ee3fce,57722454,7695c9bf,f431ded9,b7ba9477,ff041f83,22685e4a,8c88c91e,15a14f21,6b16e302,e243cd11)\n,S(f5015d22,16cfe581,e650e579,c49b6ccf,b5ca4dc6,42561256,21df7fc8,19047ee6,45b099ab,febbb493,5356872c,40c06825,47aaef2a,72e80d27,521b65ea,e2d4918a)\n,S(df0b1b57,f3a0dde8,b136a92f,bf953a83,694244bf,99782ea,98050bcb,3313f826,6f7c8326,bf5f6e15,538a1f31,273adea,6908e5db,7f38f395,49284822,12124d5)\n,S(a5a24cab,96c04bdd,6e5180a5,8fe27f9e,51897bcc,3a0aa9d8,de06de65,53d2890d,4f6dfa5a,a6b44550,105fbf39,7dce3a4c,e0b42362,4a97d979,eb31324f,f1215525)\n,S(849c2e79,422d1dce,4b568aa4,c80eba4d,d8acd237,71f6dff7,40849bd3,ecdb7e41,a465929c,a3ab167a,dcc4fcb1,7ef9102c,35d8937c,fa900ef1,8022918a,6ebfe79e)\n,S(a9a98d5d,d8f8ce0e,ddcd90ae,671c52b7,1b09b75d,b4185d4a,1ff12c71,70b499a0,a4eb522e,3aad7f1,6aec7758,c9528bb0,c07184c9,e3c965f7,afefe128,bd285c5c)\n,S(8d60786e,1ec1fbe9,61e056c2,d6a57c5d,813d7f20,bc8c68ac,eea0020a,2c4e57af,3a39b0f1,6cc346c7,fc695f45,91b557b6,3c1f8500,89d742b1,60c39744,90e55720)\n,S(4710166e,65b9a2d,8de5b80c,192303ed,25cbb80c,b91c57a0,b31a38c5,5c218fd1,b4cd95bc,fa48a016,658382af,37ada302,26887fc9,8200f77c,2b8819a9,ef489206)\n,S(e2183510,40815901,c78a304,e6f0d545,5a116560,a91d84fc,157f061,5ed6c0de,6c557bb5,358454d,419c5cb5,1bcb85e7,db3b04ba,d18e1a63,a75687c9,8fd6d973)\n,S(807cf529,8730d656,e68b4aa6,5f8d8692,ce246c2c,4e668c69,b5e93e8c,d26b289c,b22a6fc3,d7ffdf57,f18e7447,38cb1bb0,aafb7b39,101d3259,d31574f9,fff644e2)\n,S(568f659d,f19f14e1,5d91f3d6,bd2a4690,b274901e,cf6fc684,dd0d8615,8dfbdd85,28eaf8bc,1db68471,4ffbfbce,30977c7,606bc591,dfb8ec02,e43a31c2,ecafbde7)\n,S(651dacbc,564fdedf,f4e5e3b6,f2dd366,37c69140,7fa923a8,ce88ed1c,a65e6b86,88dfdb8e,6f117a1e,b99ba423,89ed2db6,cd5608e7,8be2c896,334ffb8d,2e19aa79)\n,S(5a17c956,8214ae71,80322b0e,574529c4,dd7d951c,872809c6,b33ece6d,8cd7cd0d,ba4b0cdc,7d7e6ff9,5a97e4c2,6af714ae,f00c9142,5e562ffa,16942fe2,852a3e06)\n,S(6d564251,5edd2987,568dc237,b5b98fa8,de9b86a3,e7176e62,f2609dfd,65810920,a99a0d1a,12534f64,fa97227,825b094a,22fc16bb,e8777669,d5aedc4d,58e81ff0)\n,S(e3687c75,c0689381,22f60fc5,b346e8dd,17b2dff9,cd7fbea,94aa54b7,ba1f6de9,4dfd4537,1f62a968,399cfaba,87a0b985,cb333510,dfca666d,395e0f8e,2b7f473e)\n,S(1a3d974b,49e7e68e,bb2851c9,c9f22d9a,5929ccde,9d635e8d,61aff93f,f7244472,f6c9e7e2,98815ef8,d53a7bd7,9f10275e,ea74ccd8,5d97cc3d,cf2e97b1,83c97c86)\n,S(8e0dba73,12c4afe,8e1bc508,4d9f4944,654a5693,81a64158,d7db7007,3f897cb3,560eb34a,2451905f,2e9daeaa,63dff50f,761bd68a,2321a714,45930de0,4801875)\n,S(35d9eaef,6c4ded5c,371a655f,2fdbac45,35471c32,b369955b,f8f30d95,21cd5817,c5a084ba,7b2ea4c2,e3c3d081,dab53c9a,ee40e10f,607ce88c,899f0e3f,5850d75a)\n,S(44d1dd16,c42b7811,f78374d8,2ec9983,7fbee7ce,4b3a8ccf,81ae4ed6,3b7d2c73,6a7bd35c,b10c4e89,60e3eba1,8f658510,3be8d1a8,5c4932f9,f1e48d81,e3f66604)\n,S(4b7a54a5,e7153a54,e4400ef,9311d6,cc16f641,6695fd92,5fcae9ed,6b2738d5,43a7bf76,ac2f663e,daf0036d,b665291f,cf983c0,791a8a6d,a5ee1956,2dc18850)\n,S(add4a15d,d1a350e9,e5df62b5,4a6638d,76ee221a,4007a19e,db5bc93e,87f11ea6,c26d6fcb,3a8bc1fc,f1474c26,31a4216d,740cf94b,a9d7e48c,8f01be28,885ee849)\n,S(9b52aafa,119ada49,ce33340d,ff75ac50,ac9a9d87,775e8e45,da58452f,228a23c2,67640253,503b5e3f,89f7ad07,b9379bfe,77c946d,4f61b83d,3fced91b,69e850af)\n,S(965916f5,89854944,26c1efb7,88079a55,f8109cb3,8bb111b8,42ef7f00,2d4a45d6,9aa2ef4e,61902148,aea7769c,a561d04b,cbe1b340,a231388,e332c30b,8488e531)\n,S(3af7890d,c045aaa4,2f7a8f26,5fcff9ea,41bae0f9,87c75c22,3ae3311d,e09b6ffc,dbb31417,27adbd5d,e34202b7,f7a880a2,41f18b0f,b1a40a25,376c4a30,ec607152)\n,S(dc465cfe,c07f839b,46406f4d,9a0078d7,57c2fe0,e62aa4e2,212ed33d,5b2026a,1ef12aff,a98868bf,b51901f7,2693f868,5ba2248d,91440380,53bd137b,24b3bc8)\n,S(5ae92f8a,cb9e2ca7,2f4d4c70,f4daaf96,bd237bab,2a83c0de,693d8207,baaa0f4b,54e266f7,aa1b7f22,8f24ab91,5e3f0a92,3220512a,de239da3,1069bbf2,35d63049)\n,S(38134bb,c6c5a4b3,63421af6,ae573ce7,20421d36,1f4966c7,b9e7f125,f49659ac,5d42678c,d6f89848,72399321,fa86318f,7a4e3f05,4c3bc6f4,6782be35,4ac4aa16)\n,S(f2b807a1,3fd603b4,111ac02d,5c646f6e,eb819a4f,7893992b,9132aa83,76892a57,6f1beea1,a315c000,3c957d85,bc5171d0,ccb8ff06,446f4748,738a3c78,f9ec2d4b)\n,S(debe05cb,b308a6da,a1eb55bd,73c3f1ba,248ade5d,ceb1ef3a,baecc6ac,7a5e8c09,f4fb16b1,44beb4ca,789aff58,9374e476,efccbbbe,b74e2693,a4d05ba5,a809ff05)\n,S(15cbbf1,2720f8f5,fa1a7752,b6f33333,91cf3d0e,c40f0292,24f5b7b2,c966c099,be3b1573,fe38200,a464f4f0,c3c2f9d6,24bd59bc,9412110f,6eca2ada,2f1c7294)\n,S(e4fadc29,2f0cf77e,4b14c3cd,b567f5c9,be82fc93,dcdf2b50,bdf20fdb,f5984769,2858e2ba,c9834a2f,942ea7fe,2e339d8e,b384c255,6a48d688,a9510808,a1235452)\n,S(b0a8c6dd,f57434e8,a8bee1a9,530cb9d,3d4ac31e,edd17653,3d84780c,6909554a,4f7467d3,62185e38,f6d6c30,e4c3e4ac,e167f3cb,aefcab8b,eac754eb,c76ea3dd)\n,S(a4398869,26e4d06e,5337e61d,dcc6f491,4f40c04,eb3ec752,47d9d058,9dfea2af,ac1fdc5b,70d792c0,7bf7e55a,b07ea1ce,477dcef6,cce8585,84cc90ad,c62b6272)\n,S(84b362fb,1597f179,f30b7e2c,b516153,94619081,1131d45c,ba55fd1,94f369be,d2a80ffa,44965152,78c2ee3b,122b5c3f,e6d27f9d,6ed6ba94,9258c2fd,94eed4dc)\n,S(75182684,96e2d037,24c11192,e9112501,f7c27d19,8b92fa1c,3b0e931c,2b85d32d,eddd2a6d,d884f93a,b6f8d225,c9fb32b8,9f396f1c,2613be98,d866b713,14a00d70)\n,S(aa96e0b8,104884cd,7e22211b,8b12e6e6,b3f3e3f7,fdff04fc,202d8946,838fe15f,d8a9b5c3,9739fae3,dd3b2483,4fd2981d,ea529097,2ba52541,56905664,f289e3e0)\n,S(ada17e80,82a0a15f,366f3d6e,6775b5ef,35c980f7,12ea7522,1aa796f4,2454988e,7df4c1e3,191214b6,e40fdae,2f5dabaa,b6e9837b,f53eb10b,dd28e674,230cf2e5)\n,S(322a0524,20f0fdbc,85f35fc2,de6690e5,a61260f1,428ec662,4185ee8c,d2385caa,fc81cabd,789995e7,d36d3de0,1b650a20,1befd7a7,a415d250,697114e3,c95e096d)\n,S(5082ad62,3bf2ff8c,b4571b9b,86303032,ecd137bc,86c5514d,b9f218c,4f091153,b29d3823,eb4ed958,9b0fbfc9,2d006fb3,698ab596,d3e60360,e435bbdc,be4c80b3)\n,S(de9e45fc,e9e0dee8,3bc806ae,286a2c5a,a7978608,42ddf02,d29a6ac3,9fbec470,bcda9466,e7207f7b,7d986e,36b3f238,d5bc51ac,90ec35bc,56e0949b,334ef964)\n,S(95cbc3a5,61ff4cfa,278678a5,6f8b16a1,efe2d286,c7103047,310454cf,a1a822bc,8720fda5,58d23b5f,af9b80eb,dd5fa625,93325a6b,eb5ffbd8,f333cd9d,9c8b7366)\n,S(fa0e59a0,969de9fa,aaf7be60,24136559,cb384b76,26d3bdec,f70f3e55,696a0632,2e8af3c2,a54e837,ddbfc32d,8a47f342,a856b854,7ec4b0ea,6fb3695,48b8b588)\n,S(56aadb8,2056ff5b,3337aa5d,337671a8,77168b0c,f0330e8d,8f5445a0,cdd75075,d6c4cd4f,db81d8df,b095f681,f7349fdc,c2cc80d9,399fc16e,5fa3e86,9460a5f0)\n,S(7da6a13c,11d5b063,8132254f,c064ff3f,d3818a5c,e07168eb,ed5b7345,53bbc19,26e912dc,5b03258a,f914cd86,88d6a068,266eef77,7d4f45f1,7c47cf92,16d00c4c)\n,S(4004b235,d58417a0,ea1a2071,32b30a8,1dcd6a9c,3ea875a3,6d2a6225,e2b56917,1c960bd1,443c22fa,96f06eff,a717b5bd,efe8b105,7402cd93,7a6aa909,5775e226)\n,S(b12c4d85,6ec6c85f,3553bfee,c7dacbf4,f742ccc1,356fbc8d,ab3d25b7,52bdfe93,a8a11692,49dba87,8c8e6c56,ff8f699f,d7e69c6,f994d05d,4e0643a9,7f9cd2e2)\n,S(a78d9a2e,8b74ccdf,97c6ea9c,aada2644,8b560287,7d7b0970,41d24840,91490970,39cdd434,1d1e16dc,b89fe937,665e70da,ea80a174,5ae7b99d,dcad04e0,efe841a6)\n,S(c8233855,b1f242bf,59b86372,ae49a985,2528440f,e3aa8e,28d594e0,114d2ae8,6f515202,a14738ee,ae4b430c,27391144,c551bfe6,bf24005b,81f92900,bda92b7e)\n,S(6da24dec,9d6ec569,8dda9655,672a9b79,4923f595,9157af10,64cb53cd,5e5e8f6d,59517e76,8b0d39d0,2c075a46,c1e653f8,cf876fe,cfb10746,a8c248cf,4c73fcba)\n,S(d0c55dca,ab79e0c,84ef08ad,57ff67c5,b36336f,2f6231d6,8efa2fac,54558ef0,d4365ebb,4096888f,c9a74d90,1adc4c5e,16f5dddb,442cb5d6,b5e22b32,99aa573)\n,S(d76f084f,237dedd,ac8a1936,319d198e,baef2c4a,3b81ae42,e92f96b6,e222490c,c7737563,9639b7c8,32e4bf45,efc8da2f,53e20e25,641ea714,85674a40,1dd5f14)\n,S(6a1f6920,9196c02e,6919abd2,c8fc835b,889c5ca1,6bb25e3d,ef7d0c4b,9f4e6d29,84371bc2,7bd206d7,389534ef,f2a49c6,cca4c9c9,874f59b1,ccc8b5b,bd5df3b)\n,S(693b3520,85e1ea36,bc5c8ce8,3fa49843,369300c5,170010c1,b11a3c76,4deb12d6,4441c9b7,808b1ba9,8199349b,243f08db,6cdf5326,d7453828,16f008d9,45c1251e)\n,S(5ee94c65,70953f27,37c16a59,590f7cd7,87143bab,405f6b23,718878c7,bc95741d,8578d18e,a49f9204,e51513a8,94920224,70837b2b,ee480929,5e4c4f0d,cf5c7794)\n,S(30c174b0,e7b0cec7,e6da6a5d,335f48ee,6f59ef16,984e8912,32e874d6,2e51fe2e,af7f955a,8807444,56b2c965,5c4ad915,e040a360,eef0c4c7,891db1ae,6983867)\n,S(3121068a,eb60a54f,dd427eb0,92e30895,92335900,cf191eea,79118442,67b7f4ca,d9e8f74,b8d9c0e7,c35e314b,51a52a95,bf672adb,9c6fb104,8d2ea489,5135aeae)\n,S(a06f5e3,6513a659,106ec301,cf1f2df5,6093e690,38daaebd,4b17ea45,9e977ff1,eb19f18a,15630965,d2bd8bce,9e350374,1ab35f0e,4b442f12,9c9d831f,3811cffa)\n,S(a26af0b6,50967dba,1c4a33b5,5226c2a,ad445f43,84567580,3b97ca1c,f3d217c7,22c8aba1,604df49,abe16949,59b33cce,db11c241,cbdb171c,50b0fb0a,399e6839)\n,S(8e4471cb,b650097e,d3b0e938,18b8ec5,a86fedd1,addc6ed1,8703a99b,4128919b,fa5457bb,4068bf35,7b050244,6eef2507,c1d87051,28770161,ef0e92dd,d2308495)\n,S(e9116ea3,24650463,fde960ed,eb7d5dd1,f5754915,62c99f48,31b553ba,2663ba1b,e30d7323,fc29e388,94244422,63434cdb,aebc5895,8a6fb350,33141e96,46a4529b)\n,S(8b2267e6,9052f769,833b0fb0,ffe413f3,4b8edb93,9a2009b8,59d6673c,4ca6ec37,97f80a18,ac047152,178432b3,d445a0e9,84755d9b,7ad43165,8707185d,d573fc5e)\n,S(79947669,d7bc732d,ca08e0cd,d3e601f3,c4344532,e35aa7a7,12271b12,339ee2b8,55906cbf,e782d32c,13cea8e,83812e8c,84c76d38,472ee59e,134994b4,b7b92897)\n,S(ca6d40aa,2f863c02,b6444727,d00f8923,ec58afec,3b4a4e51,f4be232a,4b4c7c7d,ec73856,b0529f1d,9d2ed892,b22b059f,35e4a91b,b60c6a6d,e919d611,d9bd90e9)\n,S(7ba23bca,5f9a88c4,588dec37,3861b699,ddfc9f5a,5b277bc5,e6e16f54,513fe7d4,25f10a4f,eeb77ff0,e24170af,dea0e2d2,3f2289a3,e53ad674,1640cc69,c042dcf5)\n,S(186da622,d0e8a9ba,e26d43e0,b601c68b,311d2046,4eb36f2b,f86c3e0e,5d4ffcf7,53a6f54a,dd11af9d,50bd82d9,70825bcc,fe9da1d5,ab55e64,bbe4582b,f5248d37)\n,S(e9601474,568cfe7e,6cdbf488,63f11f12,fa17ecdd,c623cb11,4818eb52,cafcdf8b,96d51b2,7b5e4fd8,1bbb009a,2ce40fc7,65fc6a3,7f8bda60,c4927766,a52267da)\n,S(811f5957,accf9f32,3e48ac3a,33fbaeaf,c5120858,943e7065,9c0da185,71d1d4e9,ede77562,cc8ac601,e3dbdfb5,944d59af,63bd1aa2,ffb35bf4,1f79c418,d1d67937)\n,S(77424acd,1d55424a,edb0149,a6ea0349,afcf44c6,667caa51,302b70f9,5fddf277,70e15309,989a2512,422a5bff,221c0e0e,df608746,7a34dbaa,99e77f9c,62b56c3f)\n,S(e9e139fd,73c2c50,375d3966,ed4af6f0,4bd80bb,439121,d61bfe66,99dabd2e,260efa55,805918e,d45c98b9,c119bed4,21483d88,722e0f87,de7a31b5,e4b541fb)\n,S(a9a5313b,e634813a,b10b9b3,6b38ed1d,a971c0de,5b6d1010,4cbe426d,544e7d79,ef7b3203,2a95144f,17803f09,72f6e2cb,80e6a099,5196911f,916225ac,e97bbb97)\n,S(ff29a1dc,b5c97b7c,c5e2b73d,7a0e0244,bef71dfc,765127f5,f7e0f38b,f8a099db,b8334f11,682b9a22,ec08a376,dc3994c2,7d235d5b,a4a77803,79ec0fb6,7b4d0345)\n,S(c98df4d2,da452118,852c096c,bb34c8ca,a2ebcb6a,e9a3420d,a4fd3eec,cc31c5f,f4f9c618,44cea236,edef80a1,4634159c,72663322,7372cbda,4b2680,b5dbbf7)\n,S(66126139,77cfafb2,283e1a92,d6327174,86add807,b88cf793,12fef2b7,197289a8,504387f6,70caf906,2db248c3,ed5faee0,269d0190,70dd5acc,c8599f5f,5e01d1d0)\n,S(efa8bcf,281ad4da,2f083e6e,182765cd,ab0e66f2,e8411007,e216a69b,d73d5e94,6e1afd7,e97061c6,cd0794f6,837aefe6,e8ab76b6,53d80846,98747ed4,64e20a)\n,S(d4f9fa7e,6e385f02,c068ce7a,1b80343c,20f85b7a,4699c126,575915bf,69a2f6e7,a6496004,f280f970,c1028b3c,e0d94187,34dece11,3f9fc737,2ef0125c,851de143)\n,S(5980a5c,456f383e,f0add523,13fe37a8,874059ee,497b0a23,c6dfbb2f,9f6c494,e1da9a59,c8e3d482,ece7972,9c77308,e47bcd90,cdff915c,32a94908,db1651fd)\n,S(988ca976,ac6bcfb0,b42125c0,939a1207,2eb13565,29da3e72,6b70b2b9,5c310e12,97368d81,79a76a51,7c7d063a,179a2941,fe5df19f,25f1e1fd,42a32af9,d5de16cc)\n,S(ca49ad0d,25b36130,cc878861,f4b72a4f,e945bc0b,dbae2f4c,629a6375,3d88037f,5ad2c0b7,2e084bb3,95b9268f,22ba1774,c6e423e2,4a5191d5,b940c89c,e1039f0e)\n,S(ec18622f,b9771723,c8e6e6e3,5096e517,38c4dafb,82b10317,1f55f900,b24c2e06,5803ea86,c839ddad,6c288b8c,b382a1cf,76a790c5,6f99df9a,fc9915e,eac6dd61)\n,S(c53aa261,60e627bf,bd905ff2,6b50a171,18062ebc,af9d9ca0,c486430f,b6de5da2,7d6298e0,f17a515,529fc5bd,2b85c7ef,d183710b,96d62a2c,5a0195cd,ea561790)\n,S(ad138110,f9161559,229ead18,4b7ea7b2,846384e9,dc22b8eb,5b771027,8c8913d2,135a3ed1,d9df6a0e,105c7c,e6ce625a,f8173d76,60ea04b4,9ee781a8,90595eef)\n,S(46946390,304df8d9,15705fc4,5714f3b4,233a5ec1,afdaf145,b6c09717,9c6b43e1,aef28d5f,88f62a7,e3ecb978,6efc97f1,1123fde3,88ec1bed,bbeee3c9,f9d3e014)\n,S(d464a300,df9de2ee,220ae23,4d59b6cf,44f4d280,7ab4f588,aa21dd1e,eeb80819,89988349,b1ab280,8b829754,7e5b36cb,e66ddd16,4d7542d1,cb0cf210,44a8be1c)\n,S(5e99ed21,9ade424e,25b807c5,bcbeb05,9b638b7a,4ffb3c6d,d3bd054b,b7af9f41,a373ab0c,4aba0b04,878451bb,96807604,7d811fd3,605e8e46,57574efb,21681aae)\n,S(805edc92,6fddf92,d33db068,9334d778,4b30f73e,4e65517,42e62c50,fc6ff2a3,170e4317,4361275c,2102aa8f,5406ff9e,7bd35523,8bf1e946,1a6f16c0,38beecdf)\n,S(ec6e5a3f,bb96f0af,dd700701,8c046998,49a879ef,5ebcaf67,456748f2,f25fd18a,9401937d,cf584df5,a9399fa7,bb309ffe,80ae015,20933d63,df1fc181,b2979fbf)\n,S(94f226aa,a25c710e,2cc68683,2b9124a,ffc5c3fa,179ace52,327c6866,cfdbb3ca,b92762c3,a4c56d95,1ef16db7,b3992e9e,aa2f9c3,ec48f077,62a379f8,408f94a)\n,S(8d2668fd,5d46bd4a,fc84183f,4fc31dac,964358b,fa6b03f9,16ac5bec,a619a92d,c24f6815,3e49048c,a461eea8,ce50c8db,7794b10d,d8080236,2af6677b,45e45f95)\n,S(2a3ef112,d00514a,c562de17,a68bc4de,c4c04db7,8266892d,b645ac6b,ced47f67,6e93173d,64333933,c3db0f56,8c05410d,8a1dc73b,6a30c6bc,2b0d5493,d9f9fe1f)\n,S(6eaa1185,19d6cdff,45d88426,6fac5867,790faca7,4ccc31bd,6eb19551,8f752dd,affb02eb,277a2bdc,db79d91,10ee8a7d,58c9662,22cfac03,b3d26cd6,3c678f9b)\n,S(d17802d0,1944d9f7,aab2b542,fac985ce,e56172b9,e5629e53,ddf57e0a,8dd07137,485ae7ac,34d13d9c,9ade04f2,b3fb8cc7,d0cff406,97abbe2d,4961e753,b8de013)\n,S(9e4cd82,67c121f8,96c8104f,988a140a,71f0cf18,782b574d,407a4840,607f5804,c05f08,3fb5c4d3,9d3e237b,101f46e0,6547828e,f05040ae,87db7874,9d7f3bf6)\n,S(927758c2,12452995,886e97b4,b1d16c53,4603c,7362e190,dd2558a8,43521a41,30e4d5df,c5ff4b5a,5f4f757a,3483234d,4c658b7b,f24dd509,7968627a,a2a86d56)\n,S(589906c5,90a1e143,ae7ea4fb,84edc7a,9f00bc90,dfeadfba,1933c36b,57f2bd25,e9d1d51d,92223636,cab62cab,362b79b2,12a18be6,6468f06b,a543921e,bc9b1c61)\n,S(5b516216,1171c076,b10d4987,3aff89b,c080d2b1,9e3ebc3a,de8dcfd1,734e2f35,572c40fd,24965ce8,a78c3402,381bfd90,b683d6a0,d379d7ca,21e66804,31b8ffe8)\n,S(1603bb4b,3dced105,b1a2b748,21080a5c,2629a52b,56823524,84deb617,2f6a9694,2dc4243d,fd20fd16,d1f2798f,23e43be5,f88d5feb,1f6fecca,6fadd5c3,f5a63c37)\n,S(7bbf7555,4c14bf1a,63ef9f38,ae3ec279,5cf0aa1f,335c816e,580bdeee,10d95ed2,d2e12648,81ba6d5e,e8cf389e,84e37ee1,7c178b8,dda63756,32d9330c,beeeac53)\n,S(b2d3aee,d083787,eb4e14f,328640a3,c557724c,e06a62b9,17134ebd,fe576073,68cd90be,2df0fa6b,da2693b0,f18357b7,ea5205e,2a1f5fd7,5a1413b4,fd9ce0d6)\n,S(dd10759e,86121fd,6296f171,57a90f2d,bc217238,53969f85,4a71461b,27df81be,713442b0,65546c39,1b71ef30,3bb6ebc0,659471be,fc165a3a,686aae0b,270f13c9)\n,S(54229d57,3a274ca,6eda6194,62dce4b9,35ed143d,16e470f1,239f1045,6dd2de16,a6739dc0,916112b7,4fd6ab7a,134093fd,55541758,5b3fb39f,da647bc6,5cde08b3)\n,S(141f3cdc,124460ea,15fc80fa,dbba8fce,d89c4426,74e9a3dc,55f74f69,66bb8ff,f0c8d7d4,dac4ba66,1768514f,c9bb9e2b,319645da,735e5be1,51790483,d7b477ac)\n,S(e9795743,efacb0d0,4c91c74d,33837b61,8d08acc1,cc2603ac,f02b1610,16fd1363,9f1c8ab6,735f3161,811f710a,1b5703d6,aac65c23,35fc1af1,32ba005b,bbe66d7c)\n,S(e5e8c40e,c6c9475d,d4cff6a9,c9db5cb3,f8202bf1,bf60ed41,3e213d6f,2c860797,a9570e76,482a8177,b1adf9a0,1a7716f4,b1e754ef,864d2deb,354a96dc,ea1decb)\n,S(5292362e,a095d145,c002f027,be53a28e,d5244982,bcea97c,b56d9ab6,162f7ae9,e7f00a61,8e63664,4555170d,9f13420e,fe1849dd,641bbabd,d3648250,81934e37)\n,S(a6772998,3d6a765a,67e9e3a7,45e7de0e,1e42f34e,46b7cdde,8ab20262,ad246822,53281b0b,bb45bbf6,a1e804e4,cb6f443,537b4bb,d551c9d0,8976d53c,1020407f)\n,S(7ed3bc8a,8a68ea64,c9dd316f,48f012ed,229e5f9,1a294666,4546ef68,bb48959a,238e6696,a7cac135,ac551927,fef28c04,5bbf23ac,9d24ef52,3d69aaef,27312e69)\n,S(96702aaf,a9e17a9b,5fa4fe87,d3b45633,b59779ba,57002679,63a3a5,7e7442c8,53deadec,73ed54d4,db98093f,9e269442,d9a4a955,f9b18878,8be2c410,84014a4)\n,S(bd3e9c04,42a9b0db,b063aa20,b09e7e0b,4ea18ecc,55a5794e,14108aea,1ffdea66,b5e43b5,fd8cfa37,dfd49f34,1ef14b0b,c2cc571e,cf9f7511,f2f11e15,825a57dd)\n,S(d95c6dde,f07abe75,215e14ba,e76a3be1,6dc514f1,7542a246,e48a2a35,108c0833,e49d6c1b,baaf6f7e,44fa7389,31767757,76d6756b,ce8353ab,ca6e648a,cd2e8fdd)\n,S(86f7406,7a86227b,2f5414cd,12c9907a,b78464be,8a5c2284,7d8442ea,d585fe8a,53c73db9,3ebd3340,2856a7e3,d91d29e2,e9439a3d,c43120e2,1fb5bb04,384a8e68)\n,S(bdd92d35,ba51344e,4deb6b77,126fde21,9e7030e6,5e1d96fd,4987f1ec,bc5ee6ca,a49915dc,b4f29eb5,af9d643a,6c6f581d,94a205de,3a8bf3f6,a26d294a,be11cebb)\n,S(dd4b5fdd,3ca88300,74f19532,728a31e4,152be230,2e6ef55d,a6ef9209,fc70b65e,fed2978a,3cc4c8d8,2012cd5,7e06ea37,4ac5f802,a0032e8a,21d58239,860856bf)\n,S(fab1a71f,f8a64cb5,14c94e0d,1c67fb23,70998570,ebbb0e25,9e09df03,e82aaeed,6208c3fe,3fd0d9c,640a1908,1a6a6db4,cdeaf7f2,ede4835d,46549734,c1c50035)\n,S(4d6fcaff,167a869e,311e8dd3,f736230e,78634ebc,c4470b91,686018c,7b529509,e860a3b9,28927956,1cd132de,a1de3456,576c4cc6,138bb079,a166b9a6,79555751)\n,S(502caf19,5004fb43,75b13ca5,16583e1b,3f60b32f,d9769832,b42423a,f7ec78c3,c0aadc3,36019a17,ebf7f2f0,5afc036e,e807df5a,c2869bcd,19c2aca0,1b5ccec8)\n,S(35727dc6,ebe8f38b,1a84d201,2fb24a2e,9ddaedbc,63e8de82,e18de4a3,c4d021ac,8eaca26b,3b88adf2,d19d9d52,c84d83ff,89451750,6a77b4fa,fd717b07,4b414322)\n,S(7ced897a,47b5b0d5,f4db6d9a,ecd9c5d,54b35789,91902324,6f270d7e,7ac4b377,1c6ce993,fb84c89,ef5dbdfe,68dad70d,ca39a4ce,29cbc658,d5332d1a,6f6cb157)\n,S(60d1d74f,660a5f6d,bac1ee84,5aa43dd8,889c9e4c,6b0ce1ab,e9952ea2,7146972d,dc4291c7,db1dcde0,8e618261,b8d177aa,77b5b0f,2aa8f341,8afc9eeb,dbf068b)\n,S(a8b28606,e7040dac,7941cca0,b9cec031,31db3f95,bee7d6a9,8d60c3a,1091f81c,3fbac401,61c81632,ac8655c6,d5c02744,7c836244,e228b9a5,bf5d799f,1fb810ea)\n,S(6418a48d,2705a27d,5fe68188,58a61a21,4e4dd39e,4151aa89,9fc6d414,95f975c5,21abfd32,14d98ff7,5b154250,8480b32d,ea8c50c2,3400235b,be800520,1609c7a4)\n,S(b46f6f80,c71cb354,3058372b,9ba5e6d5,2617728c,54c10cf6,6ead7ca1,de2700bc,2008111e,c4b86ec4,26bde7ab,f52bf201,10787bed,d7b2e922,e3a5a60f,e68a0f4e)\n,S(a0ef81c3,c9f78950,41a8d90,69cc22e9,22bc0cac,4e61a030,495ddf48,eaa6dcfe,8617df0,b32975a1,6666f86c,136e8c99,c07ff948,ff8d8176,9d968544,aee5eaa8)\n,S(c03cfcd4,21cc7095,5a3e10e4,a4ed12f0,d31abe86,506da6e9,c83cf6e1,df73d093,8d6f0b3,c0d6edf4,b5d2041a,94d13f89,91adbb03,22ba9f,a56b31cb,63d4400f)\n,S(4085a2aa,95e4e8f,11b0e94e,2673c48d,d42506a1,81d93a19,b5f79d45,ab88b688,cc769f7d,f45cece,d3cddf9f,c75c4dc9,bb7018cb,f54986da,434128af,b26c0f28)\n,S(a485186a,b21c4650,e9f7375b,2ba644db,f22e2db2,20933cce,2bf0ca7a,c404fcb,2d227efb,68649a60,bee9461e,9390ba02,eb133cb0,eb8388e3,f64d23a4,332ec903)\n,S(9faa3103,b212c2ba,9a454898,fb451d17,c3632b7f,c9368452,3ddb88a,7599f14f,9dcb34ce,51f7c4db,7cebb0a2,1b50ff2a,d67c6bd9,7066e505,60132168,3be236e9)\n,S(1bb9ddd4,804edffd,78d00b86,ccf6a07d,a798d91e,5d88f2a9,37575d96,81187564,6577e8f3,ac22184b,d46339b8,25a426cf,2dc8cc86,78767d87,999a8e63,5789dfe0)\n,S(7b32d099,c78bb658,24868172,1b375689,b91f0650,45fe3d9c,8af4a331,2acfdf58,a4c92e67,f4bc53c5,aa84cef5,908a36ab,afcbaf66,a946d98d,4254271a,b4f088a5)\n,S(daf23c72,c67145d5,e2a55109,f95742d9,28cc16da,e53d0453,c8dc22fe,a9eec7f4,205dac83,6614ebe2,a55c04a5,970d4ae5,a9ba4b1d,d8d51f52,50de622d,2a2a472a)\n,S(6f156518,addc53c9,76a16944,a059a465,8c49f6c8,6ac4339e,82a2f69f,a3599279,50a277ea,6650fd6a,4a5e4c2e,fb09bfe2,78fe8fc2,c7a86089,b4bb0fa5,fa7262d8)\n,S(17661b7b,5b5a8a4c,f700397a,1f819c7d,a6c44cf9,a7d28bcc,df6e7fdb,efe50580,dc1d7f84,841d8ee9,3a9f9fa4,6a03b2a8,365398c3,f94b57d6,77ad4238,264c7868)\n,S(c3042389,1483fe1b,12f16146,f48ffe67,3a1ca3ea,ea330d54,db5f7c95,fbfce6b2,131d108c,14a4fda7,77d323f3,f717fdd0,a422acfd,20b9db1e,2b2c4039,a330ce3b)\n,S(654da43f,70e4c85f,c9aa2d5a,12ce1a51,d4364a09,5c230ce4,f8ae61b3,cde7fa4c,f82cfe9d,bec57ffa,4109e9fc,c9d79135,49817f50,9fde8195,79190d38,f0afd2f2)\n,S(c17be24f,d7d2535a,c4eb722b,bbc4444c,fa529cb1,283585c0,730813de,7219b481,2d35a0b2,27582d2c,b8155b92,680f6651,c0040508,ae3de034,cac87591,654c0c86)\n,S(fcb1fa46,f8178153,fe5f10b8,a91a411b,cdc4cfc5,61b5eb2d,29446a79,8deb14fb,29c75252,4cb13054,2b9c1a26,b4606eae,6f40ba1a,f73d006f,5bac65e9,3821f0f0)\n,S(7b86452,e43ae1f7,177c131d,999b5fa,a6e4a107,e0a06f6f,4305a8ff,d1ead9d8,3e7cd53b,b2f27d89,829e331b,8236f92e,fcf674c6,478846c2,c18307c6,e82691f5)\n,S(8271b58b,67a27540,c1d8305a,840475f5,3faa0031,4e779e2b,9e578c07,366a342b,5cf145f8,6fdff832,6712be08,ca1f3a27,d3e58fc0,baee76f7,a052f7df,450dbed2)\n,S(3f027c76,4ebf933b,50df3d37,77f60210,4b997d1d,4b9cee19,cb549c58,b5d0fa23,cb44dc89,c533abb3,e255fbd2,6dace4aa,836caf4b,2589113d,82ad1886,7eee5d80)\n,S(fbeadb62,ffe218e5,d0245d5c,4bce7334,cbbfbe91,610e8bd9,f0b89953,bf472bf6,7e824c09,9727cd33,1aafba9c,6776815e,3f954fb,539efa5c,fc4ce034,db602c09)\n,S(ee2807ab,44643652,12b021b0,dbe94618,5d22fae2,f500a740,127f4dfe,32ee4c60,d958ade6,cb9d3a,ae21602e,d25556b3,b3869202,beab0910,1a1d97e4,8e360e1)\n,S(94ab159f,2448f865,f3d38d65,12273da4,ff476289,3dbf74d2,ef889807,81d6802,88739de5,da331b70,87c58bd0,d734bd75,5853753d,1d3b97fe,39c68555,8868576d)\n,S(98d2e8e5,a41a0bf4,a880a510,b4b65321,7b9a62f0,c466c589,d0c1634f,557666cf,aa24bed8,a5cacda,bc3c950f,d56bbd1f,f156efb2,4632e073,ac822875,2617d1f6)\n,S(64efcff2,76cda1b7,c8e5ab1b,12c73a48,5a25113,eb9a5be,496e52b,ec6ad16,ac29e2d7,18bbf63a,16003992,d85a9090,98ae89,834dcb24,293d6bf1,b8130e3a)\n,S(6a8e3376,1636ef4d,b1116d54,34f3fa05,d8cde7e5,31b260ee,6aa9ee61,1c4cf5ed,5161b5ef,4bafa1af,f76a1e21,bdad444a,2526cf5c,c81636cc,36f18400,b8dc47af)\n,S(4786ac32,6312dcbf,a1386ca8,c505715f,2bc7f85c,22b6049a,e4386bec,11648013,67c80d39,bfb6cc58,7fb312c3,8fea53cf,6937216e,8e7f3b3b,4a2290e,6d6df687)\n,S(b87d2d08,ee206c18,646713e,8af6bfad,c77754c9,59158fac,c31928af,c66bf596,6110c98f,bafaffc1,7b40277c,17ad9650,15de7069,705019c6,b7a74cae,eec6e65b)\n,S(ea9f310b,d088429e,236d565f,d1b3129c,7ca8573c,191d1893,c1c157d2,a0867d4e,61c95d39,c1893c68,fdc60ddb,27909f2d,98c9ddd6,efc67ccc,7482c0e4,3c05b144)\n,S(abf862bb,9db85d51,5d6a37f5,5f3942b4,5404238e,d49d3124,59f9ab38,29b34ebb,30d13c26,2157c1f,1ffc8a46,a3679e65,35be1981,c202e7de,10de5386,db863739)\n,S(80767b75,df3e69dd,757b4c4b,fd0b4be,f75fecc6,ae22b488,214b0035,a276e492,ceea1fbd,bcce30be,2d88b601,895a8fd2,92f61b61,cafa5589,f9eb9652,8a78fbce)\n,S(8b7a47e7,dfc35093,77771622,482e45fc,84708ab2,c9c734d4,fdc9e8d2,499dd950,dbbd399a,d62e8309,14bd0ba6,19a9963b,8aacc765,cad19734,e2526af4,2b2013d4)\n,S(13700ef1,f1e82cab,7e9a7d79,d76fcfb0,b6e8c18,ec1e6546,d27eb919,bd871f2c,97488000,f96aa2a1,5913502b,30ae5bd5,f9edc84a,f97dac7d,c79be68d,a0f7f4e0)\n,S(51f9a79a,991fe61e,c5b7c93b,d0905bf1,2fea0e0c,bb9e9a7b,d5d99188,f42c8a16,a3ffae0e,92e3bde2,51c9a8c4,1a6d05ef,2fa2ed53,d7a21402,e759c102,65d96000)\n,S(ec7c6892,644bcff,715b027b,be48936b,26dde18c,bb4a1a9c,fa1628ba,84d5b456,51bc2b69,b76646df,51644c28,8570bac5,d51a0e9d,6e9f0ce7,1abf6812,650b18bd)\n,S(efb8249f,bed3299f,7715b3fa,b6a23bf2,86560ad3,72e31e6c,ec725522,227f5c2,f36f4624,59a7fced,3c621158,8eac73c5,54593c4e,b7c82fe7,b0951bfc,8987bba0)\n,S(4efe94a4,c34083dd,49762ea,eaf58feb,72f6e283,9931b706,56427bc,e9913bd,5c8b9448,5c687c16,76605dc2,d414f37c,da98a562,c71e7e72,fb2b8d5e,6ae0d60d)\n,S(ecc5864,fd6a1f7e,1e20a84c,d9dc7090,9775446e,2e0bf6cc,bf896bf7,97f9dd73,49eefb1,981d4b87,ff21ca80,5471770e,8e063541,58e9c1fd,9995718b,14d9d6f)\n,S(133f3710,9bcf5655,48d03c90,b82d55de,cfae1cf8,a5f3e117,5eaee107,aa7eb121,1af96963,e9113d2c,588ab083,58df45cc,8b68312c,9aaed504,3f17fffa,b29bdd7f)\n,S(a8b1b9f3,971667be,2a65072c,efe8b1e5,e64f652a,4758f51b,4888087d,4fb489b4,556d9a3e,c2861fdc,da258a1f,8c6e81d8,1df43669,e64e3daa,90dad4c7,c6c0b662)\n,S(104889df,dd81534b,655921ae,5483db4b,b3227f2,fc3563fc,4af46e1e,2c4fa88c,a70984a0,ce97af36,b827aaa5,218a9743,73feb2e6,fd7e2a02,408590,47323ee1)\n,S(4603c58f,4fbc4575,7e9e165f,8a4b41e6,b0d2bf09,b1124998,3881ecef,2a8852d7,37e5990d,7c50bed3,2b72a43a,2e6a0ac7,5676cc82,113e3196,d6569e21,3adcd0c)\n,S(5d1ddb75,774d6419,9f07f578,21786ad5,9fd7119c,f895196f,deec090f,1240748e,519140b0,1b340a4,a7aa2864,fef5a066,feb59c6,3355c222,6805e45e,160bcd9d)\n,S(c9f86104,62644b3a,ec4daa3e,bac656b9,de816cc3,a5aff1a3,633f90af,8401a97f,405087e8,80403629,516d485,f17590a,1277e058,840b3fac,4e02d3bd,7be92954)\n,S(b774b1e9,9f42b296,dab0e371,6d4ee04f,8bd517e6,7846d0b3,3ef5e0f2,569e97ae,ec78bffc,d6cfa76e,513a2b4b,db638f73,519b570f,f423936,ec0a54f7,9ceb5f9)\n,S(d7a1e238,ad3eddf5,29002e8e,87476ae3,6668d656,595b3d10,2486f1a5,c30e6a28,5c9fdd1b,e132b9eb,4d7b935c,2209e105,55cb28e6,c4616be5,7b248607,697ef6e2)\n,S(832b146a,cd002cb8,199e800c,47b2a0cf,d96591e9,91f1b406,b2db981f,c0aff924,f64632de,b99254ce,9d60b026,76551e8c,e21b300c,86fa5bd,8bd7c32a,4a81a18c)\n,S(635f97ae,1785487f,437fee89,9ec21d13,dd8228f2,e209637e,18c85ecd,6cf50202,b53fec65,1a1af1ab,2f51eaf8,8a3af104,e1a40e82,691da03d,9a179c6a,3b30e5f9)\n,S(f882f983,99891dcb,d58b931d,c215ca05,a232aa9a,7cfe5acb,5226ebe4,f4a598de,3d0313cd,aa36668,5422a6e0,2dd7c560,11fef0ce,3c268a42,3509991a,97cb4562)\n,S(5b16de8e,3f8b8670,a98099a5,250e3102,51107cd5,d04bb804,e2a7175f,48183594,33c3d3f9,e3099917,e707a429,3c83205,4a26cf2b,2a9e3118,fa64f441,e7561fcb)\n,S(b47e085e,c7a7977c,be3e2329,ea417e98,e86eea9b,aa23fc93,67cc06db,cf06647,cf6f1cc3,f564879a,f9515604,4b7b856b,827335af,5cdcd55d,1f8bde5b,d3f539e5)\n,S(afd1a856,e0624d6c,16a876c1,2f78ba44,303460f4,d3cc793b,5dd32a98,d8aca9b7,3b334e53,83301f24,df0e2df6,12cbd7fe,3e1b6650,d5355bb6,c9d3873d,f42d73b8)\n,S(454316e,69f558ff,6e19057c,9c754b2b,83eab233,f696ccd1,b80bbb42,3c81ae57,ebbbce3d,4e1cf2a7,315a394d,d03bfb64,300ac0f5,11627d06,7a5341b,43a4ace9)\n,S(a51f1d61,dc60b34c,65345205,b2a316ec,766560b9,c50d72a2,330f828a,ec978d05,d4e9b10a,58bfcc59,ef24379f,532784a7,ccc4c077,8aa11bd8,bf008846,44175faf)\n,S(771329ba,3ae1f814,764fb9c9,ebe68f37,26b8260a,90d4e49a,7dfbfd30,80cc6128,128479e4,bbcd5b06,ddf46f49,614f6ae1,bb8914a0,7a0a5bc7,34b69b39,caf71b1d)\n,S(aaa59016,d18bc9e6,2716bdb8,6d0c6bcc,e04f74f1,98f17675,c021d078,166c9fee,36cd35fd,53be5c17,84dec1ce,80ab3ff4,95abf363,17824a12,71cef620,2784f91)\n,S(be187d0,b3afc0,bcbf98ec,bf31bfcb,f4121265,c4b815d6,9403d9ef,926cd254,a3aa0d55,8b5f6720,9d8a6514,fe22026e,66e8d972,912a6503,5faaecf0,ac2d9b25)\n,S(228afb7,a9564fd3,641bd417,20a0e44c,d2ab5d99,844fa61e,264ca823,e197da88,24457982,391e3209,88cc44fe,e42cd242,80fe1f64,b87814b9,bb485d2,ed0d7757)\n,S(dd55db40,e3333379,7b8ae013,297b477e,bca2f586,16f29300,6625aab4,6c367ee9,836a69d6,603fd34f,92d3f775,d25ce89d,b92d2803,48a21178,44f9273f,1a97a9e9)\n,S(f82dfaf2,5113d8d5,728c53de,3b43f2b9,d2aac0f2,f90b762f,390f745d,7e10093a,1097ff80,ef2f5dc,88873c1,2b5acf0c,a8a803cb,ba3624d,4a036649,ffa07bcb)\n,S(666f1006,57ebb1b,f05f50c1,2bfa7fe7,cdf11e0d,6cb37c99,4b39df89,acefc7e1,3e3ceb4b,eb292e5,3c00e4bf,ab6dd9d3,becfab1f,19880c3e,cbb93a4c,415f67a7)\n,S(9769b542,3b098d8c,18871a53,8403ba2c,d32f556a,7ca7b089,ceb9134a,5d983e73,536e7c80,5c71c49,9d9acbed,c6fd94a8,3e64a2c,8afd8721,12f6848d,60851084)\n,S(26081d34,3771ce6e,39ba59dd,2c2e15c2,4c6903eb,b6c157fd,b1c51dc4,e5343bf,82f6d675,39d04825,4cda5bea,e4879547,9570f86c,9ccbe1a2,ee0deb39,afcf5efb)\n,S(feef7b4a,dbb0e287,a0762b14,445a8fae,b860e08b,19600b41,45d92447,be732bde,44e79fff,55aed478,f8d951e7,f4a327f6,c4a1e282,ce617a3b,5128f528,33851e5)\n,S(ffb8488d,f26d306b,70b5b1be,4b6f2e4e,b6d6b2b,4cf05d3e,9502f3f9,81406cef,f2891496,f5affbf0,bc60c46e,b96baf7,2a4e6797,3297a28a,948adb92,1cfd5dcb)\n,S(fd1ec3c1,736f2edc,5c080981,fdd99fca,9e301851,cbe8d840,38f03a6,59f21ea2,86755e0c,7b01dbff,ed701a7e,b5deb21,3566f331,d707888f,4f658879,cfbf3bf0)\n,S(addbda08,d536486c,b9d0b4f1,5ffc9104,ff75be96,739d4641,a405e2c4,2775fa4d,4d70179e,1237e2d4,61a0a0b3,c3bf9df7,9483afcc,1b8fe02f,47d4b312,2f339089)\n,S(fb5e9c09,8ff0520d,b162e57c,19b80ced,7c63ea68,1c7a2c56,2557a1ea,d2d7a46b,c4d9cfa0,d31cfac0,78c187dd,2ccea738,4667776f,b8eb0935,9330fab4,b9f67e2c)\n,S(28c33364,1762626a,c9e4d2d0,53a1e5f0,771449e7,a0977f2c,63db4681,1c675b45,239e717,a76b80f6,2b11c6f2,c459d516,bf81dbb1,4dabba88,9f1e627b,5fcb525f)\n,S(68e783ee,84fea44c,59c46bbb,170d7751,c47fb05b,602e9995,2469def7,cd061c9b,7054cae8,31dcb37f,ae8d8298,859b4e56,772f8a6c,d079918d,b49c7bbe,cde61f16)\n,S(1526613f,fda17eea,1a7930da,c1be4a6a,4ddffaa5,1adf3c92,73f3a2da,44d69c46,c9c3d04c,996c4d40,b906bbcf,5b0ac89,f541ae4,81b7c5c1,8f9b5762,7b9796af)\n,S(263e6099,2adc9f24,1cd1c16c,de291760,babe6e41,d4e3d064,f1a8768b,94bc5439,3ba3eade,1c5b8225,7559c0d7,97c47e5c,41f60195,463b2eac,74801439,b3a6663)\n,S(ce58e7e0,73c871b2,673e18e3,c9ebbb8e,e6bbb2d6,226e3d0f,4bbe6bb6,73e72816,85ba41f4,13158058,fe8d068d,df70f97c,acd4f512,cdcded1d,ff9c3c39,eb1ce1f3)\n,S(47c3eb29,1402d2d5,25a95ee6,fc54d1f9,721f29c1,e5b51cb9,d82d234b,94de6594,beb5da30,3383e0d1,4d13eca0,8eb8af0,14f8220a,81b1e8f6,47c1f95c,4503380e)\n,S(8f5e8092,c71ce97e,af578fa,52f174d,ad0133f3,94bf2ca,ef5c7adb,bbb37ad,1ca41380,ac714a5d,3c6be070,117b10b2,dcff62d1,bef220e2,4063c971,89f6ffa5)\n,S(edefd606,5883e90c,31215558,b05f297c,45c64fcd,34cb864e,3f0265e5,7e7d5a4,924502b3,1d0e8df2,2a54ae07,edf1b0bb,f2ad1df4,7de805a,43ae11ae,8cf3d628)\n,S(31516a47,50773473,6e691ec4,e6891eef,601d6e42,d7f4ea4a,1e5008cb,b77e151e,7f243d73,6ec9d71c,d2047cd8,d97c159d,345003d8,72556e94,4f7aaa74,acb8562e)\n,S(9049e0ee,149d379b,77963972,1027627f,5cf68f7a,9b1c81fd,189ae6dd,eea5c552,ecd60031,71dd9199,77ef92b4,262388a0,7aec9cbe,65d80882,1847a5b8,c758ad26)\n,S(977ac11,98214ec6,eb92699c,aaa9c219,6246df82,85a6afd2,fbef31,a5a93b8c,27e01787,d6e29c74,f6308e21,24f9fa99,6a5b78b5,4f45fc95,b71430a,abfb964c)\n,S(bd7ead55,e8ebc96e,5429f59,52427ca3,8dad3d9d,649676c5,52a01099,3c359a26,9e596b26,8c90186f,8cf38e1b,f47d6d6a,d7204c78,b557b3bd,25125bdd,c3ef7824)\n,S(90c82d89,9178857e,e2563cdf,d822b872,2901b53d,3b93a6f9,2905a4a2,163be70d,3779d0d,c99fc814,8b2f58c9,fab70952,373365d6,1adb6e5d,9ac3f761,9f27e943)\n,S(a312a0c,3111faf7,2cea8b7c,3e2786a1,65362caf,11919687,3368c77f,117ac42f,1b78c42e,af0e6219,ccbe3ed2,384f5529,dff57894,b9c82566,255fc4d0,fc798b6a)\n,S(7cd723db,c046d3f4,5b0fa248,1197790f,688632b4,5f57569e,2f7754c0,9fc9bcca,eb5fb704,a5cc0b22,979bd64a,790f428,b57bcc79,3bde8fc4,4d6bc9b1,8c21e495)\n,S(2b24dc16,59324483,3851815c,1675d051,60713a5,7dff00f8,9e72df7b,d1c7352a,ab05061c,224fb577,a72f5d2a,38a9e59d,18c52645,9564afca,a9539d0,c64c8fc6)\n,S(955ffe05,c4653033,c2b4afa1,fcf8d3f1,3b55c9ba,80d67c37,598f6d87,97f11b1f,d3502a31,bb37b950,93b3e594,944d4bac,3314d490,d375e118,4e8c5a7f,2346e6a5)\n,S(699392f3,c2baba31,1bfa8aea,180283c1,9036ea92,f287fc08,adb32fa,6785fefa,242acb3f,fcbce5f5,9dba097f,3d358862,11232403,2730700d,724488e,8bee3478)\n,S(193d04f3,61eeec14,633c702a,f8e7eb22,2c3de17c,a0130e9b,cbfb3daa,94674d24,39b68a32,79e62533,8bfda780,9f0f8264,ed2ba2b5,ea9c0035,6459882a,a943e088)\n,S(564387e1,ed778e70,baf9f876,2a0171a2,6a4e660a,bc6eaf1c,7ef9f00,69794817,7cf553f9,128d0716,e3c81039,3d1ca83f,1cf0fd82,7f7d4ff0,ff538637,34ef42cf)\n,S(f0eba12f,b282171f,d20aef8e,192741e5,4469c5c7,bab13f51,7084d293,c3c294cf,bb0211fd,18229247,5238ba93,f6992d34,a41a7ae6,78750b04,fd34f3cf,af61f90e)\n,S(a54b91bd,b09d29ab,f4cb354d,283c436f,a8e9cb20,d3a7fd35,e59f59c4,200bc13f,bae1af42,3459a852,bc16d45c,cd35fd94,c0033d89,5c86fdfc,f4fad5e6,3bec2cd2)\n,S(a9294788,b2c9d997,18193553,403350af,78008113,ed58cbcf,a2816c80,46f75d47,dea8059,c24c1c84,44a0263b,2896725b,79c2c8a2,6d425479,f44bb7ad,225bed8f)\n,S(b6967b59,ea3d2899,c14fd2,cdd4590e,68dce683,de275313,ec94d5d6,1bee65d1,67eb4a27,8813f69f,e5bbc586,15dcab17,11bca30,77327665,2fc333d0,52fd2a0c)\n,S(ffc0f3fd,241ebede,ddb0c43a,a9b8fc2a,9e778963,1af8d54b,bf99c64,add0cd7f,203e3aec,321e40fd,414c002c,e5c6cf90,2f3e75d8,ae0e3604,61028ca1,e21da260)\n,S(d8f86220,c390bcfc,f714ec3,8b6f6ee3,d37b41da,4026805d,6fbbc798,8a936ab2,7c0ad863,31ab776f,c22b2539,fd65086,2cfd2ba6,2f5d67a1,6eb957b1,8d812bf7)\n,S(11295381,19a146b,442c3447,400b6e7e,9b2190ba,dd42a75e,24460ca6,45a3cb88,44950501,75662a98,793416c5,3c55febc,7babcd29,398d6099,23e1c3e1,92dac1ab)\n,S(d7cf3779,236c4a8f,d592525,d30dc0a9,a3318c05,1823e0b0,43a6542d,f38d92d4,1f866df2,429a3dcf,1a285265,18308c25,262c1ea7,2aa2267c,39a315c6,dcd22ac)\n,S(d2bb0f89,a0897404,25fc85ce,4d8fe24c,ca061808,e426b08f,ff49a525,137449b0,fc4c4bfa,2bf202e,4d10969a,2c4ca383,17a8c179,20dcb965,7de7aaa9,6b97ff33)\n,S(832d95a0,cfb91494,5b43d9a0,4f037266,2ad4453d,353f6e78,47d4aefc,449dabc2,6ec0aabd,3c3981b,8ff55747,63bfb800,453f302a,8161de79,b6b623d9,253124f0)\n,S(3a224983,f83c41d,33d3aa2a,c9d29ca9,55850388,a968407,664b2830,3967f25c,7cc31841,96c4fb8a,953602ec,3c79ac75,69e1fd1,7a263946,27826a88,7d651f79)\n,S(81197d87,1452332c,2fb18793,c0ebeca,3d1b8a4c,f161b709,e3da21f,3917917b,56a0980d,1ed1f77,3c960de3,1ce4aad3,90a5ea76,fc410a2b,107ed82d,b8bdbef9)\n,S(b8204012,c77ebdcf,790f48fc,4acb23f0,b03e5d40,6fdcf212,81545200,faa2b4b6,b8718e0,12ed5a02,16485561,8a5fb6c4,ee4db08e,dc9c1842,881287c7,dc7191b3)\n,S(766d82f3,b602c418,d020596a,58e61400,20f58fd1,52448443,2f816dc4,8d437750,d17969a3,c71ea79a,3854b526,efd56f8,148b2d79,3ea3c76e,eb14ab7e,de5841d4)\n,S(35fe7655,5d4c88c,dacad9ac,1bf125d9,924276c7,8c2ea9c6,a9c1ae87,52d1e323,9ce2d43,ef8fdb37,82a38d69,972229df,9b9c0c98,abad263,1df192f7,e0e75324)\n,S(a29581d2,55efc206,4d1d1839,621daef2,ab049724,167ced73,7566f4cc,3a81f5ad,7eced1c0,575b6152,38db2928,964f7713,f65edd4d,c31a4b34,ae20b6a2,babaa8b1)\n,S(d7787fd3,75473801,2370e71f,4d2575a5,b9f89e11,aee370ca,2660dff9,dc6a807e,2875ab09,bb1b2a7e,cc6cb39a,939e4a91,2ddb1dbd,5ca43ca7,93ac663,552ae91c)\n,S(1fb6cf61,e8be4d39,b36578cd,8853da6a,1e62cc7f,29426838,a7ecf0a2,77395288,1c018114,2dfbefaa,6bfc2957,6b79c91b,16cf03d3,81285e2e,b74f71db,1986e43f)\n,S(511e9c97,866e651b,c4e32e41,92f75019,42316ead,6a0cd78d,fa61e0f1,e76aab8a,2e8cd531,d55bb19e,886b86cf,f7105591,68a9507c,7d78d34b,9ec50f92,5485931f)\n,S(74afe7a5,6387bd58,d5996a9a,9650730,44141ca3,1f5236e9,da977289,73c9d434,be7311c2,b4566819,12d13546,8ac1e26f,6113b960,3039c24c,5e77edcf,de452567)\n,S(5b545191,25d5f8e,cfbae2ed,bb724782,d07ff380,10eca9a9,29ccc9c1,ecd0f04d,21126f87,a0cf1824,1040d707,4d37e8a3,f035471,63de669b,9f502fd8,92322dfb)\n,S(5286fb50,1a525e82,a944d1ba,eab49572,52d86693,19af1367,eaa8d5c3,e73ee8d9,f2abec43,68f3800b,30da81de,5b81e564,f94942a4,9409bcb,a9faffd2,51daa0ec)\n,S(7b01eb86,c102438,4be1f023,90a5ed7d,beea652d,cf3ef77f,92fd883c,f2993069,becae52a,915d1393,15435d9d,edb72e2f,fb9bda33,4b2e39ed,6e698344,9e1ef819)\n,S(3955e911,874fd6d6,74e04ed1,ea3b43a4,486a0ac4,19735114,3b451c3b,3028a674,3552c619,a845adea,64951c82,75994959,8609a3d,2f691d0d,5947b474,4636e06c)\n,S(b67801c6,d96aca89,22d8e7a9,96e95729,c4c29d63,180e4f73,dcf013f1,98eb0d29,876e3361,d82f58f3,f1292315,1509ed62,2e2a73af,d063466d,4af5cf1c,1ffbb150)\n,S(1efe4004,1c7ddbba,1aade160,cec007e9,8abfcba4,7d292839,4598b5c0,1b763b10,d9f00f5e,d0868390,230168e7,c5839be7,cef8ebe0,b3b70d73,ebd92931,678dadac)\n,S(2083d5be,389e4bd0,23f7685f,2ad00b23,e3687672,72183afb,d5d02384,36d122fb,11b6176c,c7554617,935304d0,4e12e8a7,4bacc20d,d438bf77,a1729a15,b424937e)\n,S(8a9420d3,93ff0ba0,25bcbb4f,eaaf715e,4ab14281,85b2dd91,f8eede56,f3006e46,f48edd10,dff93031,2b5df63d,ec9c7a2f,ca373d77,65033de3,8a54d37b,2ab1f4c8)\n,S(64a2e8bf,b42de0b4,b2dc8fd5,9e3b2c18,753b43dc,e914fbc1,478818f8,145891c5,82583660,40ebc62f,d5526ecb,9f952091,47f7048a,4004a0a4,7b08905,12ac098)\n,S(eb97193,28c44e0a,3f2568bc,b99815a7,c5c2e7b7,90e7fcb5,a2e7f7d9,920404f,cfd26c16,e6709873,1219fdc4,aa8ed998,c6fef955,78d7908c,c72c04a4,4bcf305)\n,S(cea3219c,e03a2433,f9ad8d93,73a6bef6,c1f30b3f,fa79d7cc,6ced36be,9abc9c03,13ea8ed6,a0dd8fa3,29bd7563,a34f3499,6442b03a,f2eb703b,d8d5228c,cc4c4e7f)\n,S(2e1675b4,f00a0843,89b0587b,f0cb723e,1a833539,c024caed,36101cb2,bc4c4774,ec1d76d2,2752a662,5dafb3c9,6235eb94,f9af1286,2b3eff6d,2a0fb965,ad3173c7)\n,S(b0eb3277,7c8d1b09,e22c9b9f,1c37e8ab,74be3c49,7ab6d73e,7fb6ec11,10602438,6d44054e,a4cb4a22,3811bbf6,6d2ab2dc,f7263d7d,6421a368,9a9ca4f,97fac66)\n,S(48254bd4,8df24e2a,759c5ef9,cee30855,1c1f79da,b0a32695,2196ea1f,987b6d70,9c12a458,f39f4880,ff04b96c,72b8877f,b4ad0020,495626f4,1d9b32a8,84f7a36)\n,S(e3c6dc6,cfd0b94a,57b3d34b,3a77f4f4,45328a12,764e4619,efef75f9,f49fe8e9,5c229420,500f2fa2,888d834f,a517188a,207d8f88,c98b7b7d,31484a49,c4d43a31)\n,S(a8d9d9cd,def3362c,b260ad0f,3de51aa5,db066c74,4166d9ac,57db782f,656be9e4,bc696df,80eaccdd,bccc9ac8,960325bf,1a0e9aa6,100908b3,cd0c0ce3,43205db2)\n,S(38281034,a34cd153,34b6fdc3,26fdc558,555147cb,534a1c31,89beec74,5a2eca97,f4371a13,a65de538,f31ecc5b,50ce4b92,d5dc5645,9e523851,f6fcdac6,5994b5e0)\n,S(b745114b,449f0d7a,4521d7e6,728c89ff,54131e6d,8add9f3b,bf18edff,bebc6ca1,18678d66,781a9120,ba33e01c,ee3fb1ac,b7790f18,b30a651a,99b913c,e621eb67)\n,S(5987629f,9c26a8cf,ff39955c,3144f4ab,c4d094c8,8270f3de,620fcdaf,93a7fa9,a554b7be,24e49819,f1256c9e,72b8d981,2aa5984a,c942bd81,5709ee03,67894a07)\n,S(8fc9dd0,d84cf297,75ece75e,8cfd7c38,dc9f602a,b0152b01,982be4a1,f29b7290,ed128f96,2cf60503,7acdf6d5,9578ca8,9a232a0c,c432364f,2b661ac9,2a3176b5)\n,S(c8b5b1af,90d64379,f2c02ac9,51ff715b,2978ef0,bc87f721,3edfd09,983ecc35,c295c0d4,964ef85a,59490ae,dbfd98bb,f6096217,d7633f0,44470b6c,a1816b55)\n,S(b4eabf60,c44d78fc,298b2c90,6cdcf7da,a23d095d,867fd304,513f90c5,437775c5,82d906a1,2d10d6d8,e4c843b5,48ab645b,e6f32104,f07d8fd8,c128351b,e7b526bd)\n,S(b19350e8,a5163076,bba0b2e7,2159865f,59a8ea83,b0154fb7,64308bc7,4d0bcfa5,29e4ca7a,554269c3,21a12b37,a4fd0fb2,d3e57ed5,4e79423d,f715bd2,ecda9907)\n,S(fecf1ff7,663c7921,40f4deac,ced92484,8c66bec6,f4a5550d,c340896c,5543b886,b2621f65,d52538e2,92a50808,9008efa0,8f530fd9,a321bf30,6dd24f26,c9a1208d)\n,S(ab70fe2,355d6d6b,5c5a3f5,a6bdb605,86372165,b8f07d2b,ccfd61f4,798dcb7,7adfb6d3,dd44adff,87ce3727,efef0bc,6fdf9f49,44fbd238,822974d6,dd57e8ea)\n,S(5ae5d60a,efd1dae2,43df9d7e,ca025c3f,452b6c62,216c1c1e,8b315ceb,b94769b,d90d73b9,6e33cbe3,6d96c45,656f098b,e7e57d25,dd03be95,8b9cb2a1,d00bb434)\n,S(fc51f965,bf8dbdde,b5fa4af8,7abee8a9,a380918d,4d8524e6,73f8501a,291eb96b,ceebbb7e,35eda612,47ad8c8a,5d54af8c,9dbc9bd1,194ba5a9,5844fae4,b658496f)\n,S(368b51e3,778f8ddc,2d09e9b7,fc2808c8,ac793edd,244fe177,fe3229a,e5a6d919,5b3ff9e5,af4c6ae0,575b553c,c0ce17cf,fc4da66e,e19fc3f6,2d047007,e1716db)\n,S(ac9c4efa,5f63ca07,35fafa0e,9612b459,1a764955,d435c14f,91717e42,26ec0186,5d4d3ebf,9a064670,e09f1d48,79bc9e3e,22198188,5610731,29aa403e,73d7777a)\n,S(2b5f951f,360dbecb,9eb1d31d,b414aa13,9d9a7d7c,ed952a72,c0f93a61,d52fbc08,8d46f1b9,cb8883e4,cb504715,eae4326f,11187e46,de477dec,2108ccbc,2b3ddd35)\n,S(25a3593f,9670924a,a35c2008,bd8278a9,a78d22d6,572841c,98c4399e,26f67cfa,3b07ab0b,8d400f1,af88561d,af8bb7c6,a6e4b7c6,a8bf5915,4cd85291,66ecd965)\n,S(3f03be51,b35e265d,d9cb974c,4ac021d9,d22b2291,40016bb4,e9edf52,36193eca,a17df05d,e4b0e5bf,c7ecac3e,e3253017,cc1d47b2,9fd3d1d5,411f2660,c34932f9)\n,S(edbe9bd6,f16782a5,a00d7003,488b9291,faa4f22c,9602c736,a3698587,995d25d,64569751,212d2f6e,c2e7a6a8,973be7fb,c49d7a0c,8857fe76,f9c48011,735179ed)\n,S(1f477d33,1fb16ac7,45c29e48,77df8c17,83f69e85,5a111a30,e4717fc8,ebf85377,64c947cf,64a66ad,8a417bae,1bbc1cff,56826349,e024d3bc,bc4a9078,f4bda708)\n,S(b8ef8b11,901602cc,9fd1559f,c4bd6bdb,22f9bb7d,8b289c6b,fdae85c3,e9aa3e9a,60b3594a,7349c920,33d816fb,295f41b2,7c4d1d86,b4c9d2e2,2cc3f4f,e603f582)\n,S(eb6b31eb,198741f7,49e4b69f,85c23e4b,58e3223b,df8537cf,60a94411,f03e0071,576746c8,ba579896,969c228d,67a57cd8,8501e27c,773a3444,35b7e860,bec9f471)\n,S(47193aec,aeae207,ad675228,f4506db8,40a316a2,6cdb328c,2af6c24b,bd5e9a8b,dc67bbbd,ca7cfeb5,981571f5,7022986a,4ec3e408,b641c34a,57b7cfd5,5139a1ad)\n,S(ae3c9591,c2768a02,f99b0076,9c56fdf3,1a98fae,1eca3680,38698abb,1d44f961,ba9b0c42,90c2fb0a,ad84754b,e1c3fa0d,7e34f737,f3874af0,4ed2824a,46efdb24)\n,S(178ef542,8c4cc38f,f088c383,71f0ead1,4e7b4423,6d90bc7e,9ffc3db2,fdbe9b9d,a5f01afd,74aa9324,b10f6041,27ccae19,24da7b23,72269ef,ab984fe6,ba1b347b)\n,S(2df7e5c1,3d0fdda3,3ef8f69b,f0ebe1d0,8649b106,8c965d97,37a7e9b3,c13f4c92,eddbf5c6,324853c3,7d478864,a68d0b40,2c28ac46,295c00c2,2359e10d,d0693d94)\n,S(671abd13,fe274da6,a5cb6119,f33fc88e,37ee1b75,59adf215,e08fcead,ee946b8,49d7cd3f,3b8162f4,a85787c6,91bc29fd,69eaccb7,1354bbc2,8ba17227,8a8689fc)\n,S(b69fbdbe,e72b1418,6fab59f0,6b57d940,fb8cb5cd,92c53727,a0eed42e,532ed39e,71f488d2,e104d21f,c816631e,d774a714,94c0c609,c86ee052,210113d,672ea302)\n,S(1d5b8e6a,25fcc50e,a4a5429b,6233e276,47d978d1,28a5f495,a66b1b12,d7cd8714,8428efab,d2bd23c3,2de8da3b,cb630ee7,ebe84541,ec3eff60,645ec4fa,3978a6)\n,S(4844a10e,ffce265b,1a5338e6,a10c4f18,b95b0681,bd702e30,9a376e23,7fcefa22,9018e1d0,34bf225,b4826e42,565a76d9,43c868c3,168d74b9,33b34596,98b5192b)\n,S(9567ea6e,231a9c9c,3ea5bd83,59b7340c,dff96e3f,d1fa7a5b,c56c88a1,a57d951c,507e21e0,cc59bab1,f2c38cb3,42b9f83b,f291992,a0c83edb,4cb62b49,6c54759b)\n,S(60f2f714,71258f56,6de74774,eda196e,46a30d66,3dc0b308,1cbad662,72f07bcc,12588be3,f62dd2c8,1e485efc,76c754d2,de642f53,d3937c68,f058c61b,ed7b6c22)\n,S(4276ad32,b33ba53,ef2ab0af,9fc42af6,6c7bb23d,c7b7a9df,9c00e1dd,f76b6283,9c477729,c61fccfc,a2dc0c3,c3a9ac89,b98f437f,bb221be1,268a6f17,5d0dcd9b)\n,S(fa3ec157,f8186c36,3419d818,4473745b,fdd2d054,e0c16e1e,fccd514e,95c9336,a7864a68,91aec12c,fe8104a0,eb3cbec4,4a907380,11a3acbb,d5fb6680,289cfa2a)\n,S(7d7d2728,b1db5fdc,38ad6a75,3f39df22,88d50838,b106475e,28ba6eb7,5248b600,25d9d454,8b505739,16ec7bcc,877f6aef,e2641eee,8f78f1b1,a7f74c11,40173e1c)\n,S(8cb9cc7e,4ec87013,b6994670,aae06b1a,a4785c06,614ca24d,cb6534,6592ffb9,728c4a8b,36bf36b2,a0bedad9,144c3261,71df8448,e87d151b,d8bee067,769113c1)\n,S(8a9aadfc,84aa81d4,46442635,d47a9a4e,988e64de,6fe8836,79b8de44,f57c0169,60f39bce,be18abd,10afefa0,2d076d49,73d9615,10017a1f,469eab8a,c15eab60)\n,S(3ea01e46,3a9bfcfa,39125216,7b6ce771,5fb309e4,37d495b7,852be3c1,af2a0b5f,2b756a06,75da2633,b8d2650a,a2102738,d5918420,9c57dd64,7b4c6c2c,c5250252)\n,S(a0683395,c5245bdc,24b2b275,e8c2a196,5068fda,253343f7,49ab56e8,93672c4c,7f25a7ca,92d25547,975ddfab,fe50c247,6b4855cb,8f9ec4b8,ecbe9271,779431ea)\n,S(b8293e68,1e33b654,7d2902ce,3addaeed,2fcc021a,cf7ee396,9be12661,b2abfb5e,7943e6b6,fd0c90fa,824b1e8d,25d63a1b,c01f16fd,3c9e2254,e1dc35fe,416a5afb)\n,S(412722e8,ba1809cf,2df25d5a,49c7648d,b19e42c7,3cc30b7e,1107ee4b,f0aabaa1,557a299c,38ef6a75,61d79a10,ea052a52,818ce67e,1b341c1a,d70b984e,8e41fa39)\n,S(7a62c6fa,f4a1f6fe,4a45aa48,a854a16d,a2fb19a1,a5647e3e,28a35d0f,619b2844,dab31641,6241ad42,3e7ee774,acb52a96,26b4b6ca,a4ea0b4a,67a513fd,9637dfd4)\n,S(c3915b0c,19df99,ac0ef05,3a07b36d,62643630,201073b2,8e3ec588,6714a695,8f21f136,3cb4ff42,a52f74b4,b10f1dc3,5bcd782d,b477ecf6,38866d79,541de3bf)\n,S(2a373fd3,ddd12547,3e30efe2,5533316f,355dd52a,6854d7f4,8144d19b,648f4b59,2ba90aa0,b3de3887,c1ba231f,49b28294,677adcb3,2e81c2f0,3c563e0d,221260a3)\n,S(d8729e12,46cc8a52,a5c9b7ee,dcdf4d3b,3d0ff8aa,6efafdc5,ddf37480,2dda4476,1966d7a8,7e527a7a,bc1e829f,90e4e3e8,f4a7df30,48f098c0,df8a5eb0,2a8bc40)\n,S(ce45fb7d,2ccb83af,dd1662e0,3ffec83b,5173dd2e,448eaa87,edc980f9,10a20dfa,5973238,531c5a84,1388c656,3d4f3579,41283e31,44d84ea3,31374d8d,e2122244)\n,S(230a69,f0fff585,a1163702,4b16481f,65bf27a5,3ad7992d,47ec8ff5,edfe073e,61ae3fbd,90f157ba,6332de25,a571777c,30d8144b,e12d9a25,42bc1877,1b6abedd)\n,S(d7f91496,1bdd4fe4,7b538429,df2bee94,cc4d66d9,270da392,a85e8c62,1527700b,67ee9184,bb2cb2b,9671aaec,57634814,b6a1a9f5,dd0430e6,6c5e2774,5afa9f13)\n,S(4f2e459b,3eac7349,41cb81d9,2d8b3942,ee7b0ded,b2d9d8c1,90ff390c,aff7e4c3,4188f6be,c3526afa,2b29f953,f5044bf3,8e583c27,395c9f8c,979ff539,b4198e17)\n,S(8a4a7b6c,3b598e42,851b0913,209a95fd,edf0f8be,6f152b33,1dac61a2,6f9b6997,53c457a9,f8926415,63e85b0c,b39ac9ee,69b31c65,5e3bc200,d37d86ae,d4291997)\n,S(a48f69c2,9dbbc922,78a5f8b4,4a2fa2be,f432a4d1,e6fcfda3,8ad60dbe,6d157990,f251873,152f4ec8,fe5fc88b,cdf28ae,acef895b,1d0f0ce4,44105e14,7ac0ff22)\n,S(fc0ec54e,20f7e8b1,fed5cc89,d18a5004,b7aa55ba,7520dc18,c9cbd935,7c78eb4c,17374d8d,36116ef6,49b723af,62a48350,4bd47bd4,c17c7990,fb0e119b,47f21ba8)\n,S(8203924d,9fc7e5d7,6e3c593,ad439d3f,8512c0fe,5c298163,c8caaa3d,f7b39755,a224b743,258a82ac,2dec871a,dca1dafc,2bfa8e33,b2217785,2b97e57,2e1344f7)\n,S(c4f66a17,a595217d,58d5b5b5,da997a7c,79b870c0,f5fa9dde,e146fa5d,c21f9380,13bc8ef7,ce6f915e,fd7a3522,f5fb9c3b,ac603d0e,343d344c,74565eb9,e8e3c777)\n,S(4341f0a1,efdd7d68,435f1998,559e43b7,7d1c6780,d3d3e7e6,212efd96,5b30cb47,1777a450,1a693970,c2bf759b,a253e716,b17cd5eb,9a247d47,cc382424,48ae90a1)\n,S(865d8a50,ad3b8c21,f8ff0e92,8e853789,a607abe6,e155b04b,3b81d80,c97c29d4,2a506b83,c4166a1e,fdc32c2f,b2d027e4,837d9989,a82d08ee,a31a46c9,dc72b272)\n,S(d8d95cfa,ac50b79f,3189093d,50b03b38,3b798532,3f01ba52,d76f033c,83c832e2,cddf6560,d9942228,5a3c0f18,58a7c27d,fd7b8bac,9b23477d,8677a1a3,c01a8454)\n,S(d09fa59,8ae65883,60247b05,519aef86,2b1c5196,d38aed11,e8350fe0,5bfd6cd0,45f51a97,67445680,37b1bde9,86696834,6dfaca49,719c5174,a9f9eea2,92ed4ab8)\n,S(e19796c9,c9b48a5e,59556b72,9d9b8073,71cd7267,812b044d,637aae50,d6d3d1d3,1b86acc0,d904a31a,b5637e18,872eb31d,32617930,2f3d6bb9,36016653,9f218d89)\n,S(6a88899f,be0c3c82,96fd27f8,6f89283a,f83df13c,a273217c,fef69d8,b048afb8,68ba38cc,bee044a7,a026ada9,d51e8d49,97083dfd,f65bd483,a45eb58d,5cc774b0)\n,S(e5082ab6,a112848f,9f5f3362,8be3e267,87e24cbc,6d5563c0,7addeed7,ee44662,c3c1727c,d0c09130,8323326d,210a68d3,68bcbf81,bb3814f,dcfe6631,d42968da)\n,S(795f456f,5d0cc15c,72ea286c,c881d8a0,21294e05,cf80ef7f,4497caea,92235487,bea99154,424f54d1,e91322cc,c52d3a51,4627fb1b,2fe9062d,91d90177,20530ccd)\n,S(6e9e5f96,8c233f4d,8d2bcb8f,25d9232b,f2230e9e,fbafc89c,dca17498,8d7909ba,3f8b0b0f,e60aaf3a,89f5de79,35f9979a,ac3f3fc6,fb161d3f,29ab2ad5,d50411e2)\n,S(72ef1e88,89cb7f22,19b4a7ac,92d5678e,a04c898c,5b83128a,1f7fa8a1,63772f28,dffb88e5,3f348c29,411e4d47,3ccd7d41,8a0617a2,6a640a9c,4b03aa08,15ab10d3)\n,S(4a91fcd4,32f6d2e7,ad20787d,749524b2,e3e1c348,31b41041,c311421c,1aff04f1,bcd9108e,6e8c6da6,a15156c5,5c9d60be,e4aecad3,b0756cd5,81b1eaf0,ad300b9f)\n,S(5f5255d9,8c7465d6,63fb4507,ac985629,8a434d5d,429d5a9,7b645256,e2cebab2,7c38536c,31e7331a,362fc944,38510aed,bad4cf29,bf0e7cab,c995ac6c,1fec04ec)\n,S(866b5f8d,a735ab93,e84f7811,a33f1604,40a51373,7b52e675,7f212c8d,65c9eb05,af2cfb6f,9e32f412,5f1c66ac,61393756,b8c6016f,9d45a58b,43e16c6,d3549be5)\n,S(636aca,387e767f,4702fb3a,d7b50b4c,4b40fb78,2c8c44b3,a298051d,bb3a71f1,70e580b,6993c9ac,5a48c2f7,558773c1,f5c4ff3f,aa929635,a2a44e97,c0eacae9)\n,S(31a28d8c,2205f5c5,75ddd861,df94bfa,5b6b6e38,83797d1c,7d4a487,5fcf7f7,a790eae6,788407dc,89df860a,9ac25011,8b8c65f5,f47e0bae,6aae95ee,2d733698)\n,S(c7f36e08,bcea178f,7acb0b92,fdb32411,a028ce88,be5e3480,a47c2c88,891827c8,5c285010,4742764e,7df86e80,e6e2d975,472abeb1,bd5664d3,a994289c,112a9e9d)\n,S(85a82c69,2a5e248f,42a3f0d3,e092840c,de52e31f,19a2a161,85b2ad10,6afd92d3,eeec281e,55c79f17,332c4ce0,7ac4edc4,a3d75e67,558b4b3e,4dc86532,6132155c)\n,S(e67482d2,4c2e3a75,3c1fa968,bf120a4b,7883d00,950bb0bd,ef5472e0,dfb09287,f9801b51,e0450fcb,9e405ebf,cb535355,24db5e9,91bf1572,6f446aad,34ae4194)\n,S(c6ba17e7,81fad656,c9c93e54,36409414,c58e2761,b0297b8e,1811dd68,62779f1a,92583a9c,515a096e,8691b384,4104419d,c4e86966,4da70b3,afcfceb4,b9d74c92)\n,S(67cf02c5,a616b59a,ddd421dd,15812e95,f36e6d16,af501663,9e60dd4,a8706b24,7856ad72,8a5f0d18,bf4bc3d3,75468f85,7bbdb1c1,206fcbc4,7ae66b5,6ac91b29)\n,S(72bb64a0,aa8c690e,7bb6ed99,847488b9,f37490cb,a7fa120e,a7b5df10,8fce4b61,6057c37e,198f6428,3b9481f0,53441e97,dc827cde,edc55410,5108fdba,a14d81bb)\n,S(1b132067,209e179a,5b77977b,eb81aea1,c480b32d,81729c5,32d100df,310575cb,67482a94,b5ddae4f,cfd613eb,68680dd6,c8172553,18478bf,79b5c07a,b0cd817b)\n,S(96f5f126,4b68fd7e,f633330e,f32951c0,3716b62,7d1f3368,703447,f9dbb5a0,941fa02f,c6262bcf,dccb1cdd,1637c9cf,719077c8,1b26e7e7,2bb8fe4a,4d530e19)\n,S(95335907,9c15cfa4,a674ce65,113127f7,a1ce740a,ecceef55,da5ceed8,e4e56a51,57ee067a,5f506b14,5c1c20ad,6e5d6b11,9bca103a,60c2e6e3,b5049b4d,db15baa)\n,S(72ca7d41,76c687b2,1125c290,e737075a,3281ce7d,76b72725,c7680956,e0463f23,1e6a85aa,246b0f1b,324365fd,19809840,242fef0e,6d658cae,cc84bbc3,ad56af44)\n,S(d5376a10,2cf819b3,a439feec,b04d9fa3,c90d76c3,b9bb749f,bcd6aa26,39ed5ea,3659d2df,266a0ff9,c2854f6e,f5a5ab04,1c0d8547,77fd4f75,320e064c,c4d0a4da)\n,S(664a26cf,a965b59d,10c05dd6,e0aa4e6b,c66f356f,bb61b699,113a83d9,e0a2b4ff,fd191a92,c88d577e,47e725eb,a3c38b3b,9074bc42,16c5d6b,4edb3af7,2c4e20f9)\n,S(7729abf,ecf9ca40,e8867936,7fef2d84,29bd877a,56f36780,1e677273,8e8cba7e,d5cb7517,42c9de11,84dcbfb7,5c9e139b,a59b6255,b59c7ef8,539de55e,7a709d36)\n,S(c6d5f50f,e8e784db,630bc589,b4df5810,a2001482,9ca1608a,cd3e3634,7bd8141,eedd06e7,95d063ef,3d1627f0,bc7ef37d,a4846580,61e472b8,89679d3c,d88ab294)\n,S(baa60dda,3cf83a11,82dc2ef4,f79d362e,6b32304f,896d30a5,b363c639,56ec70d9,cc9e6274,75feba44,b93451d2,753e94a2,85315277,7674b3fb,c67490e5,3627043b)\n,S(370243c0,92b957c4,74df755f,e0951321,49dd3669,1a89fa84,e43a0668,8ca235ff,bbe8ff04,6600f245,349fbf3b,1c8ff04d,8d51185,3e35d13b,30deba91,84383ba2)\n,S(1182291,92b1e768,2abe56b1,9f90e41a,c882edb2,27b25559,ce4448cb,dd19ff06,24271274,e6156ea9,e3f82ba2,8a72d476,8509dfad,b985c200,244687d5,8a11c1be)\n,S(dd134e0,e4fe672,38716aa4,edba1ad7,6879be6,8b5bb029,b32704b7,9edfb2b6,7aed5398,40cd7dd4,7e94c224,151627a5,62f6a519,2f0d0b5c,416e6f1e,5e8a337f)\n,S(ab7e722f,458d3acb,ad28a29,2f90cd8f,c2e09b2a,2beff3f8,f08517dc,e673e3a3,522a2227,c724f9bf,1ae08d93,c4c6ffc2,f5434173,7fbfa502,d6e49b1c,2ec4c792)\n,S(2fa16842,ebebd6fa,e6c67327,bd5fdcdc,7e985b1c,22dfe307,23a9e2dc,ec43df8d,f027937c,9624aaf1,ccbf7c58,66bdd9d4,5bbb279,c2a37813,9166b720,32030773)\n,S(adf5e014,e1f18c38,fd1863cf,76a6dcfe,65827107,fbe0eb99,117a859b,c5268bc5,c9cb3584,728b1771,16985b28,f5259aa5,279e15a8,1c1cc6b9,2b9e5f8a,6206961d)\n,S(d939322b,a9b2cff2,6a2b1c4b,5ffcd96d,822dde66,ad0aca31,c24a8260,c9fc6d26,162fb654,6118a68d,7fb88bdb,3e3ab784,9278a5eb,13a940e3,3228580a,2258c8f5)\n,S(18fb2621,71f79e5f,46c0087c,ac8e55d9,66f29a49,e2c91363,58900787,3d7e3a6d,cac82dd2,4a0f75ee,adfe906e,ccafd36c,5b0c97d9,cb150fcf,d08b28cb,83787a05)\n,S(b8c0ac07,5d009e4b,5ee44298,89864cf6,fd54092,df835ec2,6658c902,57b670d3,2dbc6d4b,6ff28cc1,14e1f34d,2b6cbe52,7ca7dead,24f84681,4407c4e,a0df0bdb)\n,S(6477536e,43a3ba01,8988c8ba,753d732f,9ec061a3,49f7826e,2c426ae5,3f2232bc,ede465d7,6b7798de,832e5f68,512cf3c4,d17282a5,ef88725b,36d8af1,5c5d2679)\n,S(55b052a6,52008a83,41135e55,ef7de2b1,33eca8b9,ea0c4800,ce4f8019,5f7067db,a823cc05,63efbc19,d47c2c92,5771497a,ef6377a3,8be0d23c,81a56f06,25c43e56)\n,S(c86a02fd,becc3647,16c58f5d,f3f150da,6ba86499,2df09dd5,82b9653f,10cc9289,263d1b5e,eff52a27,1a9c46ee,8adf1194,1da9d3bf,e69f62b7,262099af,43d6fe3a)\n,S(23c659e0,3a59381b,3d47beea,60f0244f,66af0596,5f903297,c53aeeaa,d143e90a,1c14650e,3aa16bd5,b67e6077,be307cac,2bd2cd39,b246d6f7,216d73dd,dacbaf64)\n,S(2f6d8482,734aff4e,21094c39,2c5fe833,1c8f9756,4de252c2,f6f690ad,8b2fa9d,8b143db3,7e14b40,3fa98a74,a81adc79,c34f17ce,5c9e6f21,68770957,1eb639ae)\n,S(6d58e265,d6b08c0b,b050ee18,5175a9ed,51b5c64f,d523ab35,ed1457d2,f9caf153,d0675517,eb71ed0c,4fbb86c6,a2b4a7df,259a7795,3293777f,3a87f620,2265edee)\n,S(4af09f2f,69d7b9,6676f472,d7f2009b,f0bb6f0,986f502f,322afacb,7e9d570f,1f93342b,ddfe5896,52e8b64f,a348f333,5396012d,3e870885,5b31024,f14f8e7f)\n,S(813e446f,87d923ab,ad8b8649,71b1ca39,d00217f8,232a71cc,d6346798,3a9a0e9b,8ce9f4b3,541a8029,f1476728,2bedf1f4,367ff257,60f2ccce,7b273b2c,dccff418)\n,S(53c4fd57,ca0b1eb8,7f5ca0f2,3ecae8eb,c44e9c19,aee3477a,3ca8524e,dcdefaf7,b3db3613,aa916430,a3227d73,35bd0532,74c122b8,18e4ac52,858e513f,c3ab95a4)\n,S(e0f8afc2,ec89411,d926355,2c33af71,328331dc,9c9452fe,b0665c39,ae90121f,13523c16,1a00784b,f15d2867,15cc05ec,227248ff,80082e73,ecb139e8,f229eb4e)\n,S(fe3efcee,6b82a5b5,a8c9a51d,ccc11f01,ef8f1a7e,588ec4b,17ba1369,cc6bb80b,be17246a,4d8660ca,98d57f07,ddbabc29,650f9a89,9da60a53,d21c6c96,dfdee15e)\n,S(8a5182ea,591089a5,11ba9f19,ce4fe062,31b7e2ce,ec4cf75e,5c11094b,9ddc8de5,73688cc,f13d97eb,19a86c2d,8b010406,1c69ca94,fc9ec90d,8ada10ae,37503600)\n,S(2d95aecf,72501ef8,e20bc117,22dbcc09,38c552f8,f4e0596c,9974d62b,a99fc884,7d9c418e,e1745ac9,e8f5e4c3,9ada4400,e65acb22,d336bcc9,fa2cdbe9,97f7de88)\n,S(7908e4f6,ede4d311,3dfaf114,9bf6e40f,e1f8e33d,72094448,5105a113,21d18b80,11d92d74,9b011e83,5e06d7e6,1103cbe,bf958d8d,bd47d0b0,1ac2ad22,2f7d275)\n,S(2c6dc24a,687d8437,44baf725,c75e7524,c0e6571,f32817f4,40183b6e,cbaa9f95,9692bdaa,775b832b,48584ccf,713421e7,5074f1b7,ed5477f1,4335db2,7abf03bc)\n,S(a019d9a0,4a9780c9,43dd65fb,b87534cb,ab7c0831,f845e724,d663578,ec7bc090,38de35e6,faa2a1ae,e0649333,898a6ca9,264dcdd5,ad9f289d,ef750110,9bc99d4d)\n,S(ced934dd,5c15335d,d050af1d,a8295d2e,bd9b8272,58d689ac,f4a48d85,5ef8a0d9,bc0c9237,1ee7fe7b,69c7c100,e5258c9f,1d68b6dc,309736e4,e05718dc,3a49cb6b)\n,S(65e5ffe6,502ea7a1,47fe9c98,9cc745a3,b5262bd3,888069c3,92d1d1f0,a08dbb83,c80ee080,84dc5e65,de8df271,c1132cab,b8be293b,69a390a6,fb3932e8,51ffaf38)\n,S(f4466d47,2365b665,6d1947b0,6e67e393,4c0e4f3b,91d52ea6,1f4588f2,4d217655,17afe3f7,2d384ccd,9beb59c3,d64353ba,57713f03,b8644e3c,eef45db,c74ae84e)\n,S(66a80bd8,ec0d08ef,3d9aca5b,4329198c,b949ce84,7933ef2a,10baac28,dc98cea,7457685c,600a707d,5fd5d527,9f309b9d,5b14e668,1656869d,b041ba77,97029537)\n,S(240e3632,7c3f4c63,afdb84d0,8586bf90,9b359c8d,7012f9ff,aec81986,4c44d597,a701b76c,d369e013,7b627216,f75d0ec9,fa208b66,2d7075bb,a6b6d39c,6a1cbb30)\n,S(137f0df8,cafdb26d,36e1b57,c427ce08,444516da,ad1ca806,9dd60e2f,2ee23f92,c2922219,9e4e7bf2,f9159138,13e68273,6bb6a998,6c015caa,43cd30a5,aec74a49)\n,S(965fef87,a63bedda,fd4b2e35,e1d0baf9,17d5850b,1f6beca4,64d4fae1,997d3a41,5f19603,369108a5,c599ce56,22bbf02b,cf541867,a57cff2d,8b527148,30124ed3)\n,S(1e2ca98e,519c60e6,cf7ff3c9,51cde109,209188e0,6c68f4dc,c22eacf1,34a4125e,edaf4c8d,8bb97032,89f9fb0d,d0023783,fd35e779,41773a00,fb4289cd,ef8411bb)\n,S(e8e0e2f0,378595db,68f96e6a,882752bf,df039778,e261375a,47fd4394,2b68006d,75b42822,1e2fbf9c,42772d35,e4bf1e0e,8d3b1ad7,92ff25ca,a488b51d,4ef7186f)\n,S(a405f5b0,28e89d81,79e7fa9c,2ebac86c,ffd20ade,60dc5226,cfe6c91e,5c2f6634,c27ea4e3,b0da9e58,665f507,84225107,7893d6cf,5225d5d8,a06f68d1,1d863550)\n,S(bcbc3c77,7367168e,169f3fcf,dd2340cf,9e6af955,d6038a0c,b763f036,6f4564cd,c7c120cf,99138201,40ec5339,ec23f5c,1ac0dd73,c9f947dc,e19c034f,7e7a502d)\n,S(fd569bd5,14843a2d,e86ab2c0,475e0c67,4959c04f,bc230255,db3e82d1,15cb0758,aea9c73b,bc083366,fc5e31fc,90a1da72,66a9c43a,9d16f6ee,67bd56b7,9c354cc9)\n,S(c2fdf561,eca2e3b8,f1107475,9cc43b9a,789ef592,e8afe885,d88b9dba,469c616b,678f57fa,fb2e42fb,bd1482d1,e22c866e,683e4fa7,6c1d2714,6540610d,9cbd1360)\n,S(50f20965,510b3317,2836e1e2,d6e00ea6,160a9c71,2aa30bbf,ac527c62,9d8f4088,fd9852c6,974c603,7e88bf45,a279b565,d1246924,e3c4a0f4,8877b716,69b68141)\n,S(3f293417,1e371e20,cbe0a858,e5984175,ba465906,fd64a7e6,161c8a7e,5847764c,763e8dbe,571ac3dc,1e803f32,7e2f4585,7268774f,1a45c50,9390dfd4,96bd374b)\n,S(8276d399,fe32e931,65f2ef6a,2f4198e7,944bb9a3,226b1a55,fff52dce,d2b92b3d,e955a591,5c496a1,623466be,88c45a3,f545527b,4edd4283,582c03f7,2a2d897b)\n,S(e77e7701,f4b405c3,5c8b7a6e,ee7d0637,fa1f566f,d2a2cb64,531dbcc6,19a9e474,23fae4c0,7661e588,365ddde2,63b97f2,cca2023b,c70633a1,41a2eb,1d3799cb)\n,S(7ae8112a,732d6428,25aa2eef,10298300,42939628,69e7eea9,3fbc7b3d,2c5210a2,3590e349,f878af6,7f7754f9,abf4ffdc,4d4f4442,48c1e039,6071271f,be5971ce)\n,S(f9fe96f6,8e20a422,5b563483,c1d2389a,ebd8a97,b1b9accb,ed7bc51,8077771e,cf3802de,20b5ae42,b1d1db65,b033f2e3,602ca08d,972eed63,9234e1c1,48542478)\n,S(b9c5eb6d,ab28292e,49a76b34,49cf903c,dfe79b85,f7797623,924a4295,bf0cd171,adc0a5d8,18926d8d,7bdc83fc,72b2ed11,19b87592,900ae961,ffbb165c,4d5bced1)\n,S(b7e25a76,3f3b8bd6,1c57da51,bd90ab57,1df3fcab,28003104,30c44fa5,4a6a5765,c471aa74,babc3fb7,dc80138c,83940e42,961f80a3,23e9741c,c44607a8,258141d)\n,S(5808e4f3,e01937f0,e9c887ff,8ea3a34f,8fca4d8d,7868a9d5,7de6d854,a0582d71,fee8cfef,2d78896,55dc9560,68e1a23a,4308a8f7,7962c2e4,f90b2ddc,87f011bd)\n,S(92ac7dd9,8da0a4e6,60964943,3887974c,5ec4b32f,875c02ba,1163d06c,b424793b,857b2046,8104a986,a0030596,62039e60,71c8f950,b7f7f746,16fcacbf,b8eee5fa)\n,S(5c38092f,fba5798d,48d0068d,d1037563,1f40a693,194584fb,7199c409,b85d52b2,32b1d628,15ee2555,f582f16d,d59c4658,67691e1b,389d1fe3,222b5444,294ab391)\n,S(ad7beb62,cec8aa9a,b619693,eb40c477,53e22897,a0007693,f10ce664,21d5c15e,49f98176,a360297,42402a93,26e34a38,cc837278,3873b076,f887c811,e2bd98db)\n,S(aa335f87,c61f2e9,7d87355e,2a1c2e51,f2a0ac92,1cfd3cb7,5189f256,386ef185,b39741b2,fc158d6a,435bfa8e,1a68eedf,13deab27,388032fa,fa22d649,c9c9a8a0)\n,S(854ef509,24fa2fb4,9b7b7b49,44ad8c9d,87627883,60ce8bd9,36e64f12,a550356d,c5af2246,96c7e32c,a385f7e,3eb8326b,7d9e3537,43a95c8f,3010a160,1d6f534b)\n,S(71b6366e,42a8e2c5,31ad6770,ff01481f,5a39c54a,d38e0ac6,f068117d,8d5c9d5c,d6684df5,92f085cd,aee8313,59bbceb0,1a357edf,b36f8e14,706245ef,f01db334)\n,S(3a4d1869,55b698d0,5e760d75,8842bd1f,cd869e84,c2c29e44,4ca83bd0,3408d6b4,5ddd1b14,15ff793a,80fc196a,83ff2736,e9791418,fba7eb98,71b51269,170d9904)\n,S(f596d242,7e51e5ce,403d673,cbdd71b,75550271,dd2d7d93,79883258,9d3c5739,cb9ef0ea,f6326a5f,83e40428,79675f81,188763b1,ec06fa26,3d7793cb,82b4ceb0)\n,S(4bb25028,b5598090,15286b2a,a8858e52,227f3b11,9075077b,3083fe16,77efd4ef,cb63c7c6,9de6503a,d33ee35f,95d4533e,1e978f30,2762b478,e88d18aa,5c4ff098)\n,S(77c7c018,4c89f974,df648e0d,ea57ee40,73acd63f,c6e22a55,6269ca4e,a5dc1c99,978faba,232a2b0a,9cf3de55,976ca950,ce3f197e,e774b2e0,d4bd1e5f,e65a1b41)\n,S(834d038,926b1ff6,13dc9001,7d021bf4,5bae5,d3741460,db681332,61975c30,f5624b83,614f5e82,10190b34,9f966fde,cd4eeefb,e3e6b046,b3028d6c,3807b475)\n,S(370045a0,a7f8a64c,a2b9c64e,85a07fe8,9a7f725b,2cdec8db,258b3d3a,d9cf379e,cbec192c,cfc58b62,6b89d6d3,9b4bf622,81e308b2,2aa3ddf,51d45561,37b1811c)\n,S(61302164,6103ee82,1c3103d5,f4d2aba4,645816cf,a67d94d8,ca53dcc2,92ca36d2,935e3db4,5ee1789d,ed8f0ded,ac0430e2,7317f38a,87682850,9568feb8,15e20a1d)\n,S(4d6868cd,4df5b1eb,8d27e045,ef04209b,c1dd0bd7,aa712937,8f7bc025,e569d90f,dc0079be,850ab0ab,ef9881ac,740140c6,958e12ad,edfcbd79,2f446d78,7157780a)\n,S(43413ee9,a35c7c44,bc95369d,38d9e7ed,53175f17,6f9eb54,6df98540,93105549,9eaef64f,45b421d1,ee80731f,ed61f658,861feb4c,72b5b2b0,ec659825,63172f7b)\n,S(1e728340,95183b28,a443e00d,6ae01921,75844d9b,ffb1c77f,c00d388a,80a6b76,d1931ac7,fccf26d3,a2ef72ec,e8c7ecef,c51ad264,ecca5748,7e9cfe5e,d798428c)\n,S(7b5995f0,fb0b8246,c588e393,4499404,415f0d03,c9174317,6cb2f4ae,b06960c0,716c7849,b6963a9,f1a7998f,49cfac4c,42a329f8,77d7c8fe,5b35f958,ceb9c0eb)\n,S(9c5efff9,2be6057,f5223d41,87fbafd1,a59c364b,239120a2,fa1c4596,4fdad960,4f4aa66e,e42548c9,4d6cafa0,81e59ce7,ab65cbd,78027de6,b1edaa,25e6d7dd)\n,S(46970472,192c3690,3c7bd061,dee19fee,5f3a973b,a70430f3,581abae1,3a61e55d,4d232a77,62e04a36,c62894d3,41665ff9,ad8ba55d,353d52cf,44f392cf,7787922b)\n,S(add62a3e,583dce2c,55e97257,b64c26bf,5e86b0db,92962b3f,a54e7c52,ac00b32e,3c700f82,c5365611,f3cb1ca9,cb6b0c2a,dda80e04,617142ef,eccfabee,178d3dae)\n,S(526115b5,34b212fd,9836a98f,853ab3c1,24bb68bf,afc1d641,b47d08d7,39566c4f,29c983e6,2a4de19,4efa5b2a,9cd4971d,6a86c8e9,f535d599,ee04db95,120fdf4b)\n,S(87908ac3,ee8f4e5f,31aa08c0,ac97e93b,81ac75fe,33bfbff0,7d4f0934,7c911f45,b756def7,52c71c51,3f69235e,8d515d6b,f3289a5,a579b999,a695a2f6,49586ba8)\n,S(2d6e6ed5,d2ea8912,6797b396,8ac1b0e,f876904b,acbace80,a2613b35,d9bbdd11,b1b66613,50ee7a2b,d149ec9b,25a502a1,6ba6143d,32da00f3,13cc389a,7c0e480b)\n,S(f076c9e9,8590180d,dfd36cd6,160c21fb,7dc60263,77435e74,30f74cc3,c46533f9,2c9decd8,6da7b49b,1b4d0a8f,47aaaf9d,19d9e8bb,365c383b,63726f64,ae56fb98)\n,S(fb52489b,6d101de1,2f51720a,60a78207,84ab4dd8,39d05c9d,a3b9c349,a74452d6,f1a967ae,deb5329e,faac7381,f3f0bc76,9eb8cc89,78d5d56e,f382a17d,4c3baf4b)\n,S(dc1e911,53b3435a,8f23cb08,a7b52f64,a5e2870c,9345896d,ab4ab880,9710241c,3468d632,eb3a51fe,133381ce,2b5dc9a1,64f8eb68,9c019b0b,7e48d504,50e85630)\n,S(2d8c6759,6c7856d,b7062c63,2aaffbee,46779bdc,777f0be2,a64093d,41d4000,c7006eca,b64904f2,9cd7baaa,14a5226a,e5c4b3fa,68c62cf,65789066,2eb8e8ca)\n,S(31e9d361,fa0041fd,bb73665f,2e1541f6,c41764e7,78023272,478cd7f8,e9552f06,62fdf441,4effb45c,5408a0dc,c0a78041,cbe39cac,562659c,ab8c2b89,1a940c11)\n,S(792f50cf,66aa0f00,68bd7fb,ee12bf44,e1fa6662,41c43d2f,275a248c,29459830,633cf86a,a3f10f31,40aaffe1,d04ee094,aad1cc56,129149c3,2702c33e,40d91e3f)\n,S(be4f52ab,8f6ad1f0,664e4d28,b67be76b,c3d318f3,9f455708,94060e03,2f8547b3,22ffbfca,44482e40,19ef36d9,209b4262,48d62591,7d81b6a1,57ad945a,1878b4c1)\n,S(bb693c4f,7110d2d3,8bdcd6af,d8b29b43,80d003a7,d0f6420b,e8d02cec,3e7cf385,3bdfb9c3,948034e9,31904f13,e3dcfa78,13d3413f,5c2daebc,744bac87,9e4314b2)\n,S(56e8a65d,2eb188d4,64dd4280,b987b5f9,8b92b8e4,34b6bb1d,1800fc4a,f8f2deb5,11cd5d14,63777189,f8c7d19a,c692461b,d21fa20f,f12d1976,3b915fa4,33006cbc)\n,S(f09d5cee,514e56e5,9566953d,f8600a94,cbad003e,9c898261,5bb998f6,a5b8cbb4,d07ee0a9,a0e88f5d,6da3d918,d5f309ca,7234373b,d528cd8c,21ee9ca5,3d1bafd0)\n,S(58671c9f,687ab0a6,f6b7c687,ef546765,7f29ecd9,d6250088,d588742,7b96fa6c,70355403,abefa39a,72d89348,9a8251c2,10d59df,80b4d284,f3f02246,f3f6c60c)\n,S(e47ec1f,8a7169d2,9c05cb96,42ba126c,aff841f8,c2edfcf,25ec9303,772eea78,ce97644c,ca60474,4c269973,fdfbf169,bf0fa377,61737dd3,77692b9b,ac775c9d)\n,S(ed95cc7a,a24a4ed4,1dfb019e,31abc80d,93ca5c04,b0515f2c,492e9105,efdb12cc,1602bbfa,f17e8c16,30ab470f,bd8fd829,b4a466ca,9f210904,7e0903c4,e012d789)\n,S(b6fa3ced,a07a9cf4,db717242,9de8069,216a7b51,4145470d,d811755d,a2908a2e,64f695ae,7f19c7d1,17af6ca9,36dcb2df,8715ff96,c8134313,c111da69,7a354dfe)\n,S(2e3047cb,4d210007,39b8d5ce,e4884a5f,ae969eef,898a600c,2202da33,239b3627,197f37c0,7c11943e,40328e3a,3c7c11d8,f2d77d16,84532631,53b7cbd7,69808c9d)\n,S(df9c446,7a691cae,b8a01ec1,a4a8ebc,fbbacfc,ca347aa5,39d56853,c14ecd3e,acf9554e,906e86ba,8459c108,d49f7aa1,e1e4b2ee,9957101a,f16d43f7,7dfaf6aa)\n,S(d452f3bb,2e3e54c4,1f68267b,f846f504,99f39f28,5edb86cd,68330ed9,510aff54,52c5d16b,41eb1029,7f86a30,28d1b610,6f6c5aad,61b63bd3,53d95b2b,fd214755)\n,S(cc196d06,9ad60096,c4ba1057,fa4fcd9c,4a50b28b,78227074,22d531b9,dd85a5be,bd930456,14388283,b28cb67,758c792e,5f9d6c0e,2d4c1a86,745e0504,ec902b24)\n,S(4974252f,9c246a45,1187b1b6,546cbf27,af9c21cc,d03c7b37,df7a604b,a3b6859c,276e69e5,b85e3241,33f9ec76,d628fee8,3af37bd8,def6e677,bba19739,9da14305)\n,S(311548d2,d9f880a7,17e77608,8574ff4c,185cb0f0,a9660ef6,7a94d090,3e2fd845,82b2dfdc,2d0ca2e1,d403c1db,7593dc01,2043122a,fb50961e,d5f86174,18a3d7b7)\n,S(30068568,4497d5d3,2c98d3ee,1136a9af,d5bbc79e,340528cc,4e0b3c55,74e867f4,57c141af,fd650050,79ea563b,e9ebb161,a7725bb8,e41e3c13,ec528b2d,df23430f)\n,S(1c223f58,1f03b4fc,68024db4,876b743d,8a2b635f,988340f0,d22c389c,43d130a1,9d99aaea,d3bd3b1a,9891dae7,4a3dd857,3a86b643,6c623c00,6604b211,4e27c133)\n,S(a675c89a,5d453821,429109cf,45cac77a,880e0e6,396a0b4f,16053ff9,eabfe4c1,8cda99bf,c3426739,c4888767,113b7f4c,9b321a61,1b63b4d1,2dd50a79,d80b90f7)\n,S(e990a236,d7854ca7,3e40c661,93dbf3ab,74198351,1236988b,cca29eef,772b32c3,a3d42c05,851b8138,ef1bbb7b,41510bb6,fc893baa,928c98ac,91127b3b,a100aa12)\n,S(2a6eff8,af4b8049,2c3d31ed,f6672d1c,d0b231d7,6deeb590,a8d0c4c0,83586027,2a7427d6,951e07fc,4d5cd4f3,ca8a3415,8f0d03c2,3cd2f250,541c0f11,8013a623)\n,S(7dad1061,9c4a7bd5,1edf6813,daa8fb4a,2a9e494f,9835db8a,42f4b0ca,827df50a,3e3b2b7b,a44500d0,277b792c,8a529fb3,41667560,1c4e443c,9c2fb2e0,dd17f1ee)\n,S(39d5b162,fd48725,1bb42303,b7b8887b,92180fa,ddbdfb7b,a14ef2e0,3cc32aa0,3a8bafa4,5645e4e9,bf4e0175,69fad346,210e65ea,fa92b971,413a2190,b64b6f09)\n,S(f9ac329c,ba09d60b,5aa62bed,81e9ca15,7a3bc53d,acd83836,89742ef3,cfcfd795,9c2fff50,aad80c18,2e6593ae,796ada7a,e0a42a4,17ce77bd,ea7be927,161be4ff)\n,S(19adeabb,6e9aea9c,fe245329,623b8bcb,3554eff3,999b0b0b,8e035450,14cd964f,c570d99,99e9c62d,a3321f3f,a548d43b,99f05df3,e17273cc,2a45a3d9,20654cf8)\n,S(978f705b,eb9b6009,22285468,521eddae,e71f6521,1ae79567,3b122090,fd4eb3c3,8eaa7bc6,1ae92adb,506f9e32,c66f5457,4e1d929b,ef4953cd,a1cd3f8d,c98ff8ef)\n,S(e29b57d8,f6808d6b,ec982a12,ac70afca,1c9c19ff,a7b0c724,4fcc5b0e,3dc2fcf1,f7d60b14,133721c3,471fd91a,864e576d,84e5a06e,b031b1fb,3a2947b2,a33b159b)\n,S(72073aee,f39510e2,81cca2d9,7831e533,56cc6016,9462a9f0,45100dae,3443bca8,bd761539,177458ee,dff87628,d155c9a2,d6a00e26,51158def,6ce72c35,84d56a3c)\n,S(c949cbc9,48db844d,2cd04810,433f982a,680b6a95,e3461ff2,108492f9,247fefb3,162ca70c,c9f19d2,d3da47b,3b0a2361,f5c21492,a12828ae,9c0ff9c7,ef1d7b20)\n,S(9acb7d8c,e958f7e5,189676c3,e7248ad7,9f717a67,2d4c80b5,9c425663,e078810d,112dc86f,1b241c26,30d87412,2faad000,473bce32,95bd6989,8b6a4521,7773284a)\n,S(e468a13c,e5ad4c24,4df9aaa5,e13987f9,50900b4,a32ba33f,430935c2,1250e4bf,61e3e755,a91bb2a5,3fc2ac70,bb232b2,c1aa356,d494656c,5df93232,a866e400)\n,S(26779f67,75d8caf1,46638c17,71e33b02,b41c61df,325acbd4,506199c1,bea8310,e9de26b5,c076eb9,cf3436dd,d9bc7f8e,5772720a,a8401227,7af573eb,65a769)\n,S(8c408da9,a816c7ba,ae2846ed,bd923211,926e5e5c,ad595a5f,f2dbb190,f48857a9,89373ca7,e9f3f96c,1f0bc7ee,d427dea,99808bd3,b943964e,f0db4bc4,a7a1256b)\n,S(9ccbac95,d80bafbc,b7e699c,aaccea8d,3169db5e,328e1519,825a3f4b,adee6a19,5a8d6936,a2859d57,6accb35a,5e80c944,4d71612e,76cd755e,aa3465b0,dcad8aee)\n,S(34c7b7ed,6fe88bc9,803567ae,71ea7c28,c9511f60,e2ebfa8,fffeba31,dbbce2d7,31a3bfbd,c42cffa6,c77aa417,955c671a,426497e6,b35efaee,83a58bf,84de02c8)\n,S(7940ca7f,c3bc810b,5679456b,88a73cae,4b2abed8,47260052,ffcb33de,edef6155,8923cf73,9285b368,d32d690c,488d8b38,5d3285aa,c399fdf,6e263daf,4e0b35c5)\n,S(2cb10da7,104ff7d8,d8f1742,43425c2c,5e8773ed,71e62e4d,cc0c2d4a,56ac3a08,610cb16f,53ddfd28,7a7ff301,a8047555,801c13b4,81033c94,4e145b1f,98458520)\n,S(ced78e5e,58e2893c,3910bd9d,d43fc362,ce06dcea,f44c5aec,ca17eb0e,cdc1fc53,c66050cb,835c97cb,c08ae0df,242895c8,f0f0085d,85a020b5,122e041f,8fb09607)\n,S(5e83a4f7,7c4cc672,a7a381f3,e527c8fb,331e8d75,f8578a85,39ae1007,51903f24,545cda31,25c29fca,b343c22f,824c86e8,89f2cd3c,d2a6f3b8,9e3308fa,2968b8fb)\n,S(c62958f8,33217811,cb099492,fb8c13a4,5b3d04b8,12a0c1f1,68cac595,e7efcfa0,e179e98,1b92f1be,25c9f892,d6a71ef4,62f3e1c5,43127fe1,f2b711f1,bf61aba2)\n,S(7eba00b2,f151282b,83c7fa9b,5df6d9a7,b764e7f,42ca29a9,2734859f,a2f0f016,9e3162bf,a619123e,8e87728d,da825814,4b760c2a,3d05fc2f,1fc25565,1d72a7cb)\n,S(8f68c1f4,83ce557b,98d96444,4a2a7d2c,a05d8f25,e6f9f909,cb44b58d,a030cd90,30f15dc2,17e7ce70,a6fae901,70930130,8f7d8706,80c43840,765ee89a,5f864e00)\n,S(393d5b72,a9bbc392,4f712195,51ba7f65,4bc4df18,cf93dcaa,bace126f,c4262b5b,976cf232,fe59a3eb,c6514242,19128395,2945cfb,f792e4c8,19248346,37f16e9c)\n,S(e1648650,d0d4ca1e,8fac2522,cda2a042,bc93b879,2d6f870,29c6d888,a11312ca,4d919105,9ea261fd,9470ffb9,e60c703,6d21da3a,ce975880,39e1a820,c636f269)\n,S(efc7519f,4676989a,a12d823e,8e49b1de,96397ca2,11fe729c,cf0fd67b,bc6d6a74,3f304e50,be6dc6f1,b7c79979,4ae38ff,ed11a253,778d0294,13a98547,e3b889d5)\n,S(85726e3e,aa8f7016,1c3629c2,84b7a7ef,79259de0,84f8bbf6,9358f66d,a439133f,756800a8,11a472ec,a72604e4,c2eea080,94971b58,3738e7eb,2c817250,2595e47f)\n,S(2e238f2f,de3c39e1,19119541,9eccde3e,b0c4fee3,e432fcf3,f58c4f77,4ba070b1,7ce6b671,c0c79a82,2fdcb88a,a10a8033,bcd0e1a9,2cfab941,d052c09e,4e5e4c81)\n,S(9cdc6aac,41e79b7b,ae77a7b9,bc027e99,1d4f8c1c,2b4913a3,1eaaf1a0,9bd87f24,9d666c3c,3503b9ab,d609b074,743f8a3f,460c0122,ad7a0cc5,a22a6d17,9d948ba1)\n,S(360dd1e4,608c9215,287936b6,97e5e819,390629a0,7bec616f,7fc713fc,5ef8ec3f,7628d770,5c744125,d5885c2b,de25693c,5afaf8a,3d5739a5,deeeb5e9,ac1c62da)\n,S(8657fbee,524c5f5e,25aecdf7,7306c97b,78119e0a,5f155c4f,37918e87,12302d35,242172c2,f90ea26d,b1f7d2cd,dbb9af4d,78a1660a,32402a83,6e598c92,df9e999f)\n,S(3ae7e8db,7b069528,acea3e0a,dc005d52,7ca9e1ca,dd3d3cdd,5564ea86,5e1a453,ac203ebf,98b7e46b,bcad5156,cc058857,f32a8d62,2114acc4,55cde626,591fc5c9)\n,S(81bdb0a1,9852adc7,afcd9775,54143362,c7e724df,884f1a2e,796d88bd,1c1696cd,2f189af1,a90f9445,353d0549,4d5562f7,4a3d37cd,1362d92a,aefe0393,9b46ef0d)\n,S(e95b0171,dd117d45,263141e6,95ceaa52,3498a8d9,d1f09ae6,855fad1c,5e5c3e8,dc8bf907,ea6a4824,9cf930b0,bad3e3a6,c179fda4,107a0812,76f02a9b,9c689416)\n,S(20e3979,e95fb62e,ecfa4ff1,3aa3fd46,94b24ab,c814f560,ce180262,11b70bc8,c9d01545,50f1d7be,da471272,822522dd,d6924a98,f6331fd1,cf6837d7,db91da1f)\n,S(e0405598,cda639ec,6c058a61,4c39d56,f71c43ea,693f9b86,c9df1bf9,e4fef30b,9df9b561,a7bb2ebd,67b67031,a92dda6e,12550d0f,5cc2368a,603ae64f,ed20ef3b)\n,S(faea8667,646d1600,2dbbdfd8,74a59ddc,a2b8024,b2f7f6f0,f2c2036d,ab5c5e9,8112167f,ed386f1,d1e02307,de202bd2,363cd1f5,fefe0621,1c4564fe,eb0220a9)\n,S(f01d6b90,18ab421d,d410404c,b8690720,65522bf8,5734008f,105cf385,a023a80f,eba29d0,f0c5408e,d681984d,c525982a,befccd9f,7ff01dd2,6da4999c,f3f6a295)\n,S(5906b143,9b994465,c9f3d4fd,f7f09a4a,b9ae0864,262b0140,def21014,8b097533,2917b92b,d0368fff,6e6a98d9,18cfeda4,d039c73,a3cb865a,5d77abff,9fe7970b)\n,S(d6443bcf,53ba252e,925f5ae3,5d508732,a3289059,308fa67c,7b051ed9,66b6cc92,e0155fa0,366a2d1c,af8d2c17,a4ad9cf7,f4fc0102,f1e1ec13,7f1b2b51,1af0e7dc)\n,S(b95a72a1,dbcfa0eb,ed2200ad,b57d71f0,b96a9703,8bd3cba5,78eff5f4,e9454196,f89c7cd9,783a4c34,1bdd05d8,241ec4eb,d8815463,4d05cc84,d5601f4a,6f3fac0d)\n,S(50b287b4,d8b41f03,88804ae2,2b56abc7,be632cb8,a20629b5,3a00fd3d,9a879b6,67c3bbfa,4d8307c0,bd32106,57f5c0b4,78bc070e,53a3024e,1ffe103e,e5397076)\n,S(64feb83a,5a81f6d8,8218e2a0,4e6f97b4,6efb89a,6f394264,d905c93a,cb7e5493,3fa224d4,eda77580,4d6ba88e,63df4c3b,5d9fab1e,519eca92,1ada5f44,741d5035)\n,S(9434b5f9,2d63c2c,c90ee2fd,b7f7289f,b6277c69,3076d73e,cc38b032,bc8b5cd6,c940b3a6,4c04e6b7,1de7f727,d6fc0883,29443276,6d2ccd51,6d24dc22,3998aee9)\n,S(a6db8e98,6d1bda8,995015e4,807b900d,704f8d3b,8ac5fc49,aa16bc61,82390724,3277c29e,bf27d0b5,ef8af507,5e295f23,92c41f29,3803a8b1,6ce601eb,2abedbd0)\n,S(50733cc1,dd80ddbd,b254ea6f,14d0679c,6839e6b1,73aa0bc0,9d0ef5bb,bc5c2f9c,246e1742,a5a9172a,ed4e1e0a,9c0d623a,5233334e,47bcb68a,aec41101,92771eaa)\n,S(4252122d,5a89f621,2c7b0a99,5ebfa8c3,b980e142,f7a89e07,d4788d91,1163ad99,bc63b87b,fda041bd,f9ac11c,e2e8ab3d,a1368cd0,2e276b55,6419e0ee,3d7fe284)\n,S(6bc86411,d3f9d25,bad0a922,21f0146c,9173cc99,d00470ba,a41897fe,b5678f5,e2c1cd75,3915e977,c20d4508,1af1946b,1d8c5926,cca74ab5,c4ec0bd7,921c4cda)\n,S(c786df9c,6b2e656d,a30146cb,14da5372,64683e46,5569b1dc,df4c1541,580d40a0,b8d229d1,d8773d5,dedde14a,dcf8816e,acaa274a,1f4ebd01,2086159d,1feb32f)\n,S(f42032f7,dc6dc676,5b1a9453,74ee45f8,486e9b94,6a57e651,7dfefb0f,9ea3164c,ad2d7a22,e477f5ce,ad0fbcc1,fe2c2533,78920fd6,cd9ed4ec,1095fa88,2189131a)\n,S(3c2fb5d9,a5bc7ad2,d4ce0970,5090a5fe,ef54a6ad,7f8d827b,2ce51785,b29ba5f3,3ec2d878,a4d836c1,71f68648,f8cac869,472847f3,4c267139,5f38e0b5,e96b653d)\n,S(b182d837,dbb1e47c,bdbe559e,f30f03e9,ae1efc93,a5a165e3,10285bfd,ffe47303,c40cbcdb,d7f1fd56,c486a35,67420a7f,e4ed4ca8,43a68bdc,81eccbdd,213d7c5e)\n,S(75a35130,cea9cec2,81792d7f,ffe84375,a4aec378,57496122,9a77270b,43b12391,988821ee,b6ee31c9,8201a90e,853c4afb,8e330592,6349d405,90c4840d,fdf3fb5c)\n,S(a97b9c85,97362b4b,aab43b64,db7e5e0f,3e4cfea9,82939289,e5266f09,87fc8503,ccb75937,fd647eb6,7da4aa7b,72e8d873,c9f035a5,cfa120fd,4d4881f0,9924d8a7)\n,S(d129bad3,4c7674ca,60a6f07e,1c1ee8b4,aa3dce4e,82ff890b,cd256324,13a56fe7,b3c8d404,7c8610a1,a56af634,b54dc568,6af075a0,a0cdd4f1,75855fa6,d22cc4c5)\n,S(d8a0aed3,cf37542e,a0f06c6e,754503d7,3bd693cf,c3c357f2,7445989e,137f73e2,ba4ad8e6,3bde0d8c,42172a7b,59e1f4f4,581f48e,cffc45bf,929d815f,8133e6a9)\n,S(9f905bc0,a5f479ee,6162ed38,24d74a1b,d6d48bd5,4611f840,ab1ac55b,7b84be18,5babdad,4248a4ef,4606dd26,1807e25f,6206dc81,6eeaddda,fd8b5082,52e3da53)\n,S(d51c86e1,4519166d,c2aa7604,c88670c6,ca44a84c,6735f692,ee4dda79,e957b85d,fcee6753,29130c5,f4b260a9,cc7efb73,d51e6ec,8ac1ec52,28ca0ab6,51d5b8f0)\n,S(ce251fde,ffdf0f59,5a563941,179f6f8a,86402b2c,6bddd1ea,7b37b89,bc649102,5b26a79,882b2f89,79610eb6,5de06e02,b09412e8,bbff66c5,cc650211,d1b9ccf5)\n,S(6168ac7b,101fbe73,5b9339b6,9c459fbe,44a6f6c7,bd488beb,bf0b81da,ce511f3,65b6e531,f350983a,2f55db14,588e92db,436f7068,5117255f,ed474aa2,53b5c9ff)\n,S(aab2deff,7e77f414,59d4361d,2722b448,6530f0c9,46b93d96,975f5a96,eb4bd091,b416562d,c5b057ef,7e63ec2d,daf0aed4,84320d7b,60695809,c6fa3aa9,e4eaa431)\n,S(9ebed934,ca30351f,44b7ea4f,f3f6453f,6d0c7f81,869226c,c8f4312f,d413056,766a6f8c,311550eb,a8500ab6,f3466ca3,52e6b960,c4a52cb9,870ff784,4191a2aa)\n,S(a2e78d35,d51970c3,42d03a09,bf3286c2,3a131ff9,abc4bea6,352826d4,5fe2da0e,fcb844e0,4bdf8d96,f423c499,44275ac5,8885c384,57975268,ec8cd880,dc640346)\n,S(1a49f352,5203a773,9c7cce34,d21c51fe,dfeba5e5,c0f21622,eb954621,e3d6726d,e617de36,7c6a9283,8d4bcfd2,bf2fd21c,15b53007,6a0367b7,6d6ea65b,af032213)\n,S(be65c6c,de6c54b6,c0c4d306,65cb4d61,211c97dc,a74c57b7,13f41028,e2d14832,d7875fb7,5cce3a40,9a74e48a,9b577a04,4c09a43a,989606b5,b44fbade,89e6c03f)\n,S(a1572e58,60b10c96,bb3e0b6,7a047d4a,9957448d,74bd8a44,823de9cb,50aaa639,5ae37e0d,88c9f6d,173026ac,58ef45fd,17b0a0da,40304954,f9671c56,93946d1b)\n,S(21917639,b6ef2333,378bafe5,fed1780b,24d9fa82,17ee49e7,369099a8,8c9baee5,fee39df,4bcb318b,4dcc4017,7f1af605,f22c44ec,d67a15cc,297f02fc,dfec4eb7)\n,S(ac2a8d9b,b2219c98,444d03a0,36db728,ffa182d0,d31831ad,f2643010,bb76d3fe,adec7f18,c9474dc8,d0741d1a,5e72e479,c8b86f74,327fc5d3,cd79cf86,869310ab)\n,S(c540463f,bf62ef36,a972d797,2bf79054,80b8e67,415f1895,d42d261c,165d1b86,f04a3516,83039c2e,8bac5ef5,1db4e105,95a27e25,cfe680ed,e7d840e4,f70e50b3)\n,S(df63238c,77e75ec9,b844431b,d15007d6,56b849eb,4b6902b4,e79f0d6e,9527ef29,63846f3f,dfba6f2e,46bc7f2f,17af5067,a953cd0b,dbe2fef2,52e73be,b8a17330)\n,S(43dd347a,1bf0ee84,ad774d4f,70c67cea,594946c2,94cbc330,15bbdd21,890998d4,b6f58d9e,e6e13c1d,b65dbd28,2343d8d2,3f73035a,b4399672,15b0300c,f7dfb48)\n,S(5af8e3e7,f5ba9d80,73c5c1e3,c8d0a62,52eef1c1,17043e01,7d610f20,8b5eff0,246c7a4c,6f6e75aa,eb60e256,756e6365,711e98a6,aefa5345,adefb632,321d39da)\n,S(60e7513a,b327df8e,e3d44222,95e0d886,b264f560,1c4e3d03,3b405d37,f6ae8518,4c58466e,b68d6c81,33fa6639,12f4a12c,a4a9f3e3,d4e0f6e2,7e92a85d,4d541cd3)\n,S(126520ec,f3129775,786c4d64,7226174d,3ccaf5ae,2e4a1514,90e1b691,f07946a0,d5a2544c,efec281f,e70f05e8,2494085c,133fb918,6416435d,4b7fe673,88c440)\n,S(b588e8a0,2396bfa7,8512585b,cd0d0e4a,7d14b5e9,f76e1426,b4591c9,6602c585,d7c6a7d0,827852f9,e34942f9,a6f5eae9,cd0a7f29,d30057cc,46d13e2d,4ec04caa)\n,S(257f90fe,4409ef7d,30730e37,d7358c7b,60a1cc21,57acedd0,355d7a1c,89b5750b,b14da56d,9aa8fb67,b2d1260d,8de63c00,a9a7aafc,6fb890a0,e1a148ed,5e371201)\n,S(8072b8cb,47c71331,9ed2ce85,cf913c87,85955c84,d338daed,58528427,3f3a4a56,6d7a0ed6,bf3383be,8953b47,d93ac5a5,e40e8547,2fc6d3d7,71f89007,f8d20d39)\n,S(fab935ba,b2b72a27,b338ef89,509b3830,b7800817,19c2b3ec,8467c736,24ca2640,2a610c06,77fb514c,b224dcd6,56c5136d,88f87f34,86fa0699,eb71319d,c85a103a)\n,S(7c6364c6,4906b7c2,e1ca0d87,6c163932,7e8e146b,afd94c83,2330f990,f979ae52,c97e7b44,26b91f6c,88ab7e39,d57f7b7d,4a5e0f9c,ff15aad5,e58e7017,d51c5317)\n,S(98beb1ac,48c8824d,447a10cb,43b51167,b8e7cf0d,9eb4e4c8,43403b03,2208570c,1712c13e,ddff8fd5,191fdb28,717efb74,ed52a9f,f47bc21e,b15838d,fcf00af3)\n,S(f683a667,31241c44,4adcf062,156f3fdc,d04e8450,911908e1,95bbea2d,8c5bf918,460eac53,48ea1e78,9fdef168,a150065e,1e4a2f83,85268385,3355586c,87453f1c)\n,S(38f065a7,165e5d4,d31238de,8dc38f43,4dd024c6,6eca026d,de03c4cb,b43639a5,790bacf5,d35a688b,130bdb38,29073b8,28837b9c,9357544e,1e44d766,e401d044)\n,S(cee8a218,2b3004fe,76714511,30340b0,7cf10241,d9e933c4,97ae84e9,a1d525f2,ed373709,3e0eb05d,3ee2823b,25bbbb11,ec943848,1a3ceae1,89573d71,7a596b3d)\n,S(164c6ee5,620f4582,35520eb0,8276d85,9a14e266,b7b59576,d0a3e0a6,636f124a,fe92dd66,139f02c8,76ff6e57,8c769a4d,63484072,5c909bc9,481d4a52,f60565f3)\n,S(d4606a18,1a0bd363,eb63849a,81c77d0b,942ff14e,7f885c61,d1fb772,78ef1008,81e7b2cd,e7c5d9,29e1d69a,309a334f,2c01b084,e82b789a,835a7aa8,5d7e93a4)\n,S(905f5725,1df1651e,83aa8b3,dec2d96b,a32155eb,90d7f985,b3ce5213,2092be07,e4acfdaa,9eb8995a,a4ac8a0a,2b66cbbb,d561fe6b,389c56f,3af6f62a,d7579632)\n,S(2e3ab14c,d3aa69de,a35a8ad4,99130302,b16f3d3,9df06b77,7c30e404,91eb6dda,ade534e7,ea0217a8,88c50bf4,ef81dddb,a5c7ffbe,bc0f90e7,110df2a8,e0c7c2c0)\n,S(98207cc0,23f50a6e,5f5ce8a5,68c5b24,d4f4f741,94de76a6,d1e6f44e,72619a9b,fdacc236,bd424684,52508806,b08fabdd,98a15b15,6751953b,95b4c5f1,40bce374)\n,S(b6d8bc0f,894863a2,3a793c3d,a33a5e66,cafe8696,f9cdd40e,777a40ea,aa203ee2,7e9b246c,8555b4c2,47c45fe1,d1e5d160,c7ed7d37,a3a43440,deee6ef4,15dc092c)\n,S(56d030ad,eb30f1b4,7f806276,651a56d8,7f0d8b6c,458092e1,61351368,8cd0f6c3,bb3a1513,155c5885,e084180a,1728902b,33e1a61b,364c8d9c,94d67ca2,e386f131)\n,S(77251aac,f919aa4e,b7610a77,ba27d94,c85b973c,af04c885,92fe5272,a48ec088,ef27aac0,593cc67b,93535bc8,4d0a04a3,e8a865a1,bdf65312,85beac2b,d58e149d)\n,S(cb7b6a,cbbbdc23,64711585,6d80df3,2ec9aaa0,c6380b3e,677299d0,13658121,1f818bab,72575e35,a60ce7f1,c720e9ce,2f59b086,63cba841,ea288920,16a40ca4)\n,S(4a18eb1c,bddb4c3f,ed44fdfc,6242959c,29720142,21d10154,c7fbca68,5c475d0,bb24f347,ebdcdc0a,6429f8ba,49065475,9cce87aa,8df10496,6d2ebcf2,97e70ffd)\n,S(384286ca,1003c97d,7d151032,97d81cfb,e3e3dbbe,5dc70c76,6a8dbdc7,c1e625c,7201deb,638d2ec,6cbb4db4,e955ee1b,a3015cee,e06d2ddc,f024daab,8f07a277)\n,S(84b6d6ae,d5e00e31,73c24d39,80f05cd6,f61625e3,11439a55,e03ae2db,d79a7d55,a3da9e1a,4c32e4f9,a1d326c3,6670296d,3ffb18fc,266e169,a99d4d00,4de383b1)\n,S(aa1cab51,f7239cd4,dd27a4c4,805e614c,5d972cbe,c2830ebe,7daf6ed8,781c37e9,cf8bb72e,535fc8cd,12a2f4d5,e8f9e257,38a28812,1c93b061,5fd4fdeb,368be5bf)\n,S(7c4f183a,f4abbe43,d7fa6d5,77ea6c14,83302f2d,b863a7c5,bf072e51,3d2140bc,1eb08c67,a417c0b,58fe8185,1a66902a,a608db07,24dc38c6,706bb80f,5956c808)\n,S(dc30f68e,58ff30a,4bf2f6b,28b30708,506140a2,1a971c04,8afe04cf,94b54d31,6f996e08,8d4f7f53,aa1c2050,644a47ed,bcc1da4f,519978f8,6496ba1e,c7be2688)\n,S(145185a9,ac6b036f,d0d3cd25,c904b3b7,c8f1d0ad,3ffe5f89,d87b7804,8b017426,d7f6acb2,828ccbc0,db0708e2,79db6313,fc955d2b,cf9e2754,1a7535e3,24c7bc90)\n,S(e8700138,5c0bc4e2,9911f29a,e39a5ae3,ad3cf1cf,d690cbef,32f313ea,fd190fa9,92d83708,2e5139d0,f8084001,8ebf8703,da250361,466caa96,717edd0d,6e7ada7f)\n,S(5fac0aa7,9963a1e4,5e1c668e,3512d0fe,2eb2c709,d5ecc71f,c862d5dd,523f864,9c7bfd73,445e7d9e,139b96e6,813f1f80,2ec632c6,a76e9dfb,8afecf40,2788d16a)\n,S(441f40f6,f3ca4dde,5a085c15,57f14cf3,fbb7c3f2,5716c33c,63ee90f,45c564e2,c81f1205,1179c2a6,f2614495,322cf40a,34cab55d,c90d61b4,d1bc3787,ec3baeae)\n,S(a4068c1f,c63d8f21,203cb6af,b37d796a,3c454bd9,db974ab8,e8bfba8b,b832b043,b5318b99,e9354250,a837f8cb,cf8d9cde,d95bb1d,1db0becb,1e887535,4ddb96ca)\n,S(44563417,c647b097,d0238a57,74998fce,3c809a26,f6d2b71c,eeecebfb,134cfad3,3f417680,1c15172c,ef636dc3,12742429,13d59079,73ad09c3,9fd8c6a,8a95104)\n,S(d57a5fde,47873327,728f5706,d2f0d64,1c5386a9,fdc41808,a2c062ab,942acb6a,cffcd62a,c0c85aae,4a6b7881,f3be170d,9836abda,baa47d60,8c0b8f60,f9aaedd1)\n,S(9dcedd10,d495fa2b,6f4b4387,57cb38be,d6f09949,17e7ece,7de913f7,8cb111fd,73196e22,59d4ae9,950725dc,77321567,167d7761,29cc32e9,d92b6dcd,4c056223)\n,S(aea290f3,a4ffd405,d51f1c8b,5f11cf74,60f05300,a1e24c08,25b96910,b24e32c1,f6c100a6,3c918f8,f64ffe8a,95840421,dc384635,e3465cf8,65034bde,17ca8eb9)\n,S(bbfcd317,5091846f,181696f6,35fb1b05,802e7659,7ca97040,31339381,46812234,2a0a4ebb,1f09b31e,aab4478,89000fbb,5876d7e2,dd889393,3001a977,8aaa3a15)\n,S(2a3b4e65,d9d7661c,addfe1e1,96beaca3,ccbc0348,dff6d2df,21f394c7,a7f4594d,74c6f171,1a2c0c01,78bb6a27,b6e17cda,bddb7260,acbc533,a49b19d1,e0b4a110)\n,S(d8e47e32,15cbe145,aaa9efec,ada428f1,8d8c599e,98d2f9d7,8177215c,c85dc2ae,5c4d4f6b,aadcd87c,7ac76eb8,22e1c0db,e7c81342,702bfd98,e193df1,809e0511)\n,S(5b5954d1,25d77778,f3c1514c,6256ef65,2ae0ab97,151f8856,dda6c87d,1e04a34f,1c5ddf3f,b185edb9,14769482,95e687e4,40497582,26b36fc6,3502922f,cd1bf81e)\n,S(e8097e1a,12c6837,a8f29eec,31ccbd16,f191e7a7,d7b199dd,d6d9ee6b,7f26ef55,84ab3d24,e2c4407b,53e4299b,8de1aa8a,22dab9be,b6efa5c,5715a943,65174b9a)\n,S(495ebcc5,b0573416,f2b3e705,fe4a4bfe,1e756211,5f37b8a2,dec57688,dedbdd45,3bc65725,6783970c,7696d5a7,b04ac7ca,8c627ce9,251844e9,e7cca774,4d385be7)\n,S(4ffc69af,b9cf40ff,c94beac6,aa020109,b7855e0,a993984f,5e59ba16,fc78ad51,6d43d1f9,e3283528,494c9783,cdcbe9ae,2ede071b,ed494c57,2539df6e,b185ca1)\n,S(b047e0d1,afc92251,7eaf5c0d,a9d0a093,fde5e829,84c8483e,d256640d,166dfc75,dca2ef00,a282972,d4bf67cb,74fb31af,da5b8145,ec1b7a65,6636376c,504a70df)\n,S(ea7b0b93,48e0b3e2,be800ed,6ca4b121,277a496e,84fb6680,2658f68,37b1d530,cef40d2c,e1cf820b,19b435bb,a541ff1c,fa572b1,ca3693d0,cfeb3b32,8ddf918)\n,S(e35a53cc,ad74738a,bde75a3e,e2b10d7a,d4ec39bf,e32e1daa,ecc151f3,bef1966b,ad06a8ab,a0296c17,fb24eff3,b27284c5,6ebca204,f6eee752,276ab9a8,1f1bce13)\n,S(70334511,ae9acd50,e094f034,17dbba05,4a104c84,ea8d6250,13e1f8f6,907261a3,d1f603e0,5af2e1df,4b8eac69,b4067810,c302ed18,f02bc964,2eba34f6,bc67e84a)\n,S(13adc074,c3ea8877,4598d0b9,ad653285,c81bd98d,d4bb6a43,c126db2c,d1f08d7,4bbda9d3,c83c7a64,fcccf3e2,c4251a7e,f61966b7,ec48e89,c991d44b,9588c83b)\n,S(4a2a5fa0,71702fa0,934b66ae,7c003f00,306f07b8,625d92f2,d2276efd,18ce5f0c,f9c2f4ac,d8c594a4,117a836,7fa5224e,a7ccbe60,2475e3ed,b19a317c,5feff6e9)\n,S(e2f7dc14,79bac0e,a95b5a2,1a9f4e,8c42a23b,8f25d09d,dacb9a3b,fe3ec638,ae6c82,c4f3dc5,41f140a5,2eb6b0c,dd0e200e,d0d951b,e85efd4b,b9b086ad)\n,S(eb1d6d07,8f6b74f5,c48a913b,8510e8d0,5cfeb954,856f3ebc,628d0db1,a253963a,f3d73300,e216d14f,d5a67c35,91b362be,f13818c3,36a93784,875ce9b4,2cd8c7d2)\n,S(a22c6d71,1d79ae71,403feb96,6dc11adf,253a5d3f,d3d74b44,5f7268bd,84b52277,86d5212,bf37db8b,4e873476,36201714,3f295f0b,d69d2187,8904a53c,831af06)\n,S(42f7eb02,797cc76a,21c95db3,c9a0014,4ec5defe,553a45b5,1b701c0b,6f5ed3d0,60525877,3cb86452,928e37d,ce19e2ad,4da63174,2f049214,9f9823ed,ba679519)\n,S(f5250698,b37da26,20a3a80d,a9c1c88f,792677a2,6d2b9fa5,49065339,ecc1e95c,b0826c,66edbd2c,5562bb14,d6f8df25,a5d0bc54,7a1163dd,4a8dc1e3,7d140266)\n,S(b845d4a0,bc8db805,43526506,cac5c093,cece5c5a,85750d54,317dd78c,7bc10832,e38db2fa,207ce0b4,d9b01ee8,b174a24e,f28591c9,9d203ca5,7d90080,807279b)\n,S(4955d281,746b8c9,4bac7d53,26aa28c3,9fba7149,7b4fc036,f9971f7a,870a67cd,ce72ebf4,aef6e987,3fa5cf3,e66ec918,911885ae,848aff22,eeef12e2,e50e6cee)\n,S(20fdca2a,a03d6105,50f2eab8,d5e7d47d,c4e2e9ed,e6d2c7b,bfe64d75,176b9e9,1e077683,2c44d6d2,19d19c7b,aec0a303,f4d3d5f6,4ad8ca35,83f87325,6aee262f)\n,S(418de9de,9adbec78,769eba7a,cab3853a,9a85ebc7,2bdffc86,844d0f32,15de4877,20d521c9,974c8ee0,f817ee37,a0fa14d2,eefc4e05,2c93ce87,ee665898,9e49c5a2)\n,S(135b5a4a,f64eaa0f,d288bee5,c1bb7846,30df305b,5d3b13da,d8c446d3,6e13485f,3e571c3c,fe32fe42,669b08c9,14a655ce,828f41cb,12b9c18,9234f4eb,1aac0437)\n,S(7eb64f50,5e26671d,21d3b2c9,fefbe094,c6300348,25248e86,5daa8939,f8b7e90d,be847834,f303ae8a,55ebaf3b,5bccfd61,6284e836,13eecdae,ab43bb6e,d4d4e986)\n,S(9ee1ccd1,670be914,f9b7a070,962f7ac5,ac9d069c,eb3e0748,72db2e08,32870fd6,7d3d9dd4,9e71fd68,4271b17a,a8203ab6,1d2bf6d5,2fe3773c,78a8ccbe,d256cfed)\n,S(a256c06a,796cffbc,5c90d91e,93ded565,b9755b7c,b760794e,e3060b33,3c217e71,e9ef8b6d,7731c262,6c93fb06,b7a6b3fb,fbbe0e0f,54682409,e5218a74,d4a064fd)\n,S(dde8a9af,ec32c1fb,be9470d7,a435b4fb,bd34416d,e703a1ab,5188fe8f,f721aa4b,e7dbb850,aced2fb2,fcf5ea6b,edeaf383,e4ae0fe7,98badf41,66e58f13,6a87f3ae)\n,S(fe88599,811d0e9,f780d359,2e8106fa,2f54fb6b,ba1df66a,b7b0b41,2c130c49,b3b0b8b3,c7f36d43,86f30438,1989d885,31edab91,f25251b4,e01b3d3a,6ec97f2d)\n,S(d7da001e,8a606b37,ca65ae71,32214cf8,258dd422,efe0fc83,adabd56d,64b0467d,97f503ce,8eee1873,7e422bdf,91f051f7,1025353b,3a1f6f1,545206f8,2a32aa5d)\n,S(65237583,e3e1a640,c2c16a9,a49d09c1,f5dbe2d7,a3845989,574abe33,397e747b,2296a1b1,e2350d8f,14a6fed3,afe30fac,a45ff345,9f8f515a,370aa260,d435f7a3)\n,S(419a8e03,2d8fd27c,afda6538,9b757550,313307d,12fd185b,4d2f026a,40ae1de4,2932ea7d,3421d738,d821030,f75b0343,fffe9d25,8b605cf7,e20f6b48,1a94db03)\n,S(275d261f,7ae2ab4a,4ad1fd66,1621a223,7ce08787,beaeeee1,a537b103,c0a44023,da955bd0,4ef1256c,9e184615,c4ee666d,c9ae14c7,d95caa7a,5dca6f11,1e5e2e58)\n,S(3ac6681b,d0a2968,290ad83,cb0e00c6,6a9962cb,4c082366,953e294,58ff3651,28348b56,38ede228,7578cf14,ae385066,4595a2a8,d86282a0,edcc389a,346066d4)\n,S(d4ba242d,9407df55,a9f672b7,e01cb1db,99ef744b,d24d3e47,9b1841af,a6c1f05b,9e395144,aa1fe50,9d72d086,4a1673c5,24c4ad65,fb7bdb16,cbd52053,1c6f11a3)\n,S(c6525077,2bd399d9,901d57b5,7e8fc941,cae0f5fb,6d47ee3f,5b3a7cea,3fba2e83,629f7edc,a6ec6b0c,579cf9f1,867e1bef,e3bf9bea,8d8e64b7,2b18532a,47280efa)\n,S(f12daac6,d38fcb00,c2425a79,2c52225c,a94d544,c6b96076,7ec9c885,d6d4430d,1764feee,2584dee3,abf2aaf,737a068f,fa6aec89,6c02e2fd,cf0ccad2,7ee8f210)\n,S(db858a7f,4a84d88f,236b5994,dca409b3,d7111df4,f7e5c009,4ad1decd,82036673,c0606c89,e4b13042,9e0a63f5,1c93b3bc,95d98832,d89a9515,2e5c1874,f2c94a53)\n,S(237f5f80,4d4c50eb,d611b079,5cbc6567,101ec8ba,1a265976,64472f7f,5a725ed3,b558d31b,7647c4c9,1367d696,a67e5d88,76454900,f340cd,5b8d7490,9fdd5993)\n,S(e962e9c7,7c97cf36,32bf0a88,d6e939d2,68af9fc6,ebca96b8,6fb679a2,d953eb20,931395ff,a50a854f,5aa29314,c50c253c,c3175739,9c2eb20,600b0217,9f8ef48a)\n,S(890514d2,14b57796,85c0cd66,818d182c,3d285af9,771c7c48,92ea2ac,115a8c3a,47c5a,a4d76cfb,2a62993b,b499df86,fbe7e130,d4758235,7decd72c,b61aee8)\n,S(8b058976,295a316e,65da1774,da78722d,8d729f88,5ea4402b,f20dc67b,bab7f815,aeed497f,57d52480,23b94a3b,5fbe9c0,e34d0039,2d57b34b,377bda9e,b8703335)\n,S(6a4685e0,7d96a793,d55a6416,6b089623,755fe549,3a879fbf,fc9a5a74,7ee7991f,313ffb6d,98044c92,f37b3f66,81f1b4b2,d9b2e42a,7c34a5bb,db45b9c,6063aad)\n,S(65157530,e4ffeeda,41064bf1,f8d85174,2b9b8f64,87a05ea9,3d2198bb,3f33fc26,5b0e76a,8f96facf,9d492232,95a0c6f5,6a609504,b9b07c38,a72b6f15,4cb8c9f1)\n,S(9f6c288c,1e04703,46b02d47,8fc0a40c,dfc0229d,928639cc,6ad2ac88,96e55085,2af7c1c1,7210b552,4ae2083b,b45e9749,c9452776,c12d5e83,ce265c98,51266c8c)\n,S(c566e04f,e5ef7062,7d914a04,40731caf,3a7dccbd,5415cc1a,a2d81328,b8a6da75,a3fa5263,a7f66158,67f43270,77d3b2df,8db1befd,552249ad,e96db0d2,8c439282)\n,S(6963ffcc,cb62ca7e,565fa9e7,99db54c3,dcaad601,95bd2dd8,df70d447,c443ba4f,96c715c6,84bed531,27c28e3d,6d6a0214,883aa214,25c4626b,4c11cf17,36b8f134)\n,S(50db27a9,8e0328e2,81139df7,5376bec6,37e9272c,f7c23333,510bf5cc,c4f46b2a,b5221242,9eec82,1e9143fe,af9e7813,c135be82,bfc153f5,2ac061dc,c1302d92)\n,S(7badba3,8f23f854,2404e636,b96e86a6,84557310,2bceb7c0,241e71c6,1ae22ad5,bd000395,b5d0ba4c,a76ac682,5191fbeb,f6066d8a,81c4a210,56ceda82,e13459e4)\n,S(147667bd,5591aa83,26fa497f,c60f8e7,a5ceda47,9d4b2f7d,93bdab3d,81bcbd0e,bcdbbbc4,2adac6ea,413fc3f3,6cd2089f,420a6183,a918bf98,fff27aee,3e870849)\n,S(ee576c33,e8404e1e,11e1b5d8,6ea52335,cf8b0ade,49dd16a3,7a61fc10,cd3eefd8,722bad17,6e083868,b3c14ee9,a70013d9,89c01b5f,44188ec6,7db7bc3d,ca26fe2a)\n,S(8e3cfa71,f3b7d3cb,fe59d8e0,b579b76e,d33d318f,41d3b76,121b02d3,2acdec80,86be156d,b76429cb,ff2c67e0,c015b7d,d0007c7e,33f6041a,d817ae9d,ed5dc4fc)\n,S(e220362f,2df8a485,51dbb7ad,634c4bb3,714151fc,db3cc2f8,e483aac,50d88768,acb8e001,a81eb6ac,99dca40,2d62fed3,8891fe2,eeb8e023,6d8f2447,6f4fd200)\n,S(1777fc26,9bd7aebf,c014c785,25dcd40c,f93db012,31541cac,448c44f4,89628808,641bdcb2,b87e04ad,3ea3a3d4,c364e93,1171b2a2,cf3c0205,77552b7e,594c649f)\n,S(ddfb5269,fcbac0bf,a855d2c4,c9062c77,836af1d1,145b4df5,688b6a5,24c11651,c353674b,9520ea9e,eac3bbce,a85b0709,d0284c37,a7faf78,8b573ebd,67bac8be)\n,S(b01ea11,d4704bb4,24cb11d8,b42411a7,3f227c84,dc10eb13,c2b20a1b,bf23258a,240844e,9ea3edfd,948d2df4,51538cba,ed57f157,d0632f2b,8b644570,5f9ccaf9)\n,S(934e20a,46fbb416,fbe829d1,46bebdf5,2220c0db,958c2a9c,64244713,4509cabe,76b7a1cf,79ebb5fa,58f77e64,4395d33e,bf90c0be,37e7439,c3d29013,25b0dd76)\n,S(15bfe959,5ee58bec,791981dd,13ac5380,6615ff53,95dd4661,28c23f59,ea236967,d6dd460b,d3d36bdc,eb7d3ba7,745fe6c2,fddba241,fadcbdee,44f377f,bd43ee00)\n,S(5e1a723f,403cf56f,8019797e,6f8191f6,6e7ccf15,dfb1965e,590490b6,224ecd24,97342532,36c48696,645a7e60,552eeacd,4cba990d,6d73117a,dc6f2967,a6a0fdbd)\n,S(1485fddc,85c819da,8894c1b3,8be82eee,762a052f,3830dbb3,7d21ee74,868c778c,d779373d,d503731b,52f9e689,805988c0,b916a579,921c637b,286c580,93343d5d)\n,S(6f4b7385,f881c9ed,202ab6ec,c8302626,668a1296,36274f3c,ac4296e9,1eece7db,fcf6f192,c6c80fff,3f5c2bbc,7c6c4a5b,b0ea2e3,70799827,440e998,cf6b26a4)\n,S(bc27cb29,33ca44d3,b56280d7,7d69af2f,9220f4aa,49aa0fab,685c7c54,62adaf76,7607d5b7,a02c5e21,cfafccc1,26e8439,88c10942,aae6333d,b5262426,1ed4da98)\n,S(76f86b25,2530d87a,b04e64c2,4cd1e05a,e8324bf0,a717280d,3845cc5f,a6a1a733,2db7ce38,33bd24b3,55e95b89,ae6d8a54,19124761,e382745f,2a7347ce,fd7c382c)\n,S(5615175d,2ec968f8,81dacc1d,1bd6c06b,df87c9ab,53fdef11,335818f,bafa918b,5f755638,6154cee9,e71d21b9,cee3971c,7d41e3e0,ca2c1ff,f66982b4,d66fec25)\n,S(6390f1af,1ef24aae,20e2ce29,dfe9a0d1,50b2826b,f5cb3629,8e0dc16d,ee2bdf8,cf3e2b98,4f120d10,16f82e1b,8916928c,263f3323,52bbedb3,c29ae1ed,b0d49b1d)\n,S(bc5df46b,4fbcb83f,7aa53579,ac8d5c3e,8482941e,cf848810,f9239138,b57e9378,d4d15516,624e72d5,9002dca8,3c8b5914,b224d4c3,75260dbd,cda88f9f,2f772627)\n,S(3d069f1d,dd52177f,cd802195,c7c8b2ef,1e43c34,9bd88b41,43bc2d54,6a2b8d33,2ba48861,14218d67,1b1fa4e4,2aae97fd,66164e94,af1e3026,8dfe9dfa,7155fde9)\n,S(fa657492,fab9ab23,f1a49c17,40079d7e,abafd7a8,72e481b8,7b30cb63,8a47757c,89d2c7b9,2f1ad11b,d2808968,c426a00f,e584ad83,86dff03c,1a047804,a2e98630)\n,S(e2318d84,61f85ac0,7db07d08,aacbed7c,5f5a45fd,7e505bb7,ac86b417,6b3eb46d,3b0170a3,b6f466e0,380ab984,e5bf4b34,89cbc479,cb2808cb,445614bd,8ab012e9)\n,S(defa0810,91d1db16,fc2f86b4,fa5a7331,f0c15682,55855134,10f41a6d,a2bfa6a5,8429db90,fbb25354,3e77ca0f,e7a731d7,f1a481bb,f1c997e8,5f585844,423ace4a)\n,S(fbaa7567,7306fdd4,8c85514c,bcb78e04,ef4d693a,dc7c356e,f95ad34a,cc880db0,45c4972a,161f4a23,cd71f726,d5617b71,421b68f,b0611097,3edf11b3,8a391909)\n,S(5dd76e24,e3cc0c5b,ded55d15,858f1c19,dfff7e43,b299df43,3ee77b46,2122205e,992de68b,87bd6760,a75d6b90,89dcb2b5,5f0b39c8,eb079ba0,e4451fb,dee8f2d3)\n,S(890c7a78,d0f1db95,75b53e98,a0a63d81,8096422a,3ee18403,ede8ffa6,3af9418f,7a362df8,7430b479,11e8d310,558195c8,fed28b05,531b68a9,1631ef97,ac008085)\n,S(4914f692,f88e858c,b6174e6a,9d4bbdf9,87f0e373,1bf6e69b,8bf3531a,43a37e6c,8751e02b,fa9e0384,2ff3e4aa,307cb7c5,fe4f7941,1069249b,c8b19866,b6169cf5)\n,S(a5f97745,ddc25117,81693df1,bd15203f,9d23bc93,9015be73,c6b4e256,d1d05416,57a99674,cf64bff9,7b9ba0c5,69d253dd,52aa188e,3ec645aa,89466c79,5d0f0370)\n,S(62da0bf9,8d32519c,16fac809,95869f09,b570b953,e0a7bd83,9623a9c9,bebbdf84,9b9ec74a,c960fa8c,2ea8bd4d,93ff624a,9ce54fa2,4a1822a2,37d962d5,64e9121d)\n,S(5caa2062,c25d7df2,23718f9d,ff29a403,e5200d22,bf064b44,c9519742,4c448a5f,6063bf93,1f72f65b,9ca76400,de5f5204,a8a0bdc4,b19cfd12,2664aa33,79a7a27b)\n,S(4a81083c,c18dcec3,5825415b,2854250c,9dc651fd,5d897610,2ceb7691,576ebe60,850f48f8,7ffbf26d,eaad1f8b,2c0b8272,5f7c313f,55811b98,408f8f34,8421f241)\n,S(ba8baaf4,9d0c194a,4814070c,786fd9f,4b8dc012,c42ed667,7b39f67d,da7fccaa,ceaa8874,10bbe854,9e87af6a,15ae1326,d85bb995,19a8c4d5,dd3a8599,d9ae0ff2)\n,S(4c780a0b,886fdcbc,a30f239e,21495f9d,5ea38a6a,7960ecb,ea4dd2dc,9266103e,7e50e1d5,b6c811fc,f86ee651,5d64e06b,26827ba3,656dfd51,1fa64124,224e182a)\n,S(50a433f7,f528d66a,961d7123,7e6d2bf6,7321896,5ec6599d,b1f34b0c,db21524c,6bca1083,9ef8d450,e56829d0,cb23ddcc,81e2e7df,e79b53f3,2f8aab9f,e2eec15b)\n,S(b98e05de,573e37c2,80d6de1b,fd479bf9,bd23a6b7,2f6ab34f,caf03236,c67ec5fa,d86f07e0,8a4c3d61,f087dff3,a2af2d98,58787d2f,424b49da,de0c584f,4d8756b3)\n,S(d0cb5279,e76b8be9,b2e9cdd7,b0c841b3,33398541,24923224,db54a91a,81995433,11fcafb7,28a3307d,2d87f2ae,d107b0b,d64f6030,b89e845e,1f67ce7,4cf7ee6d)\n,S(90c89963,619b1593,d5fd7eb6,751ef03f,aa7c6802,46e36bcc,5d0bbae6,25376720,6e8f2a86,75b803f2,c3c87f9a,98318cbc,61b99073,2b8b33b6,62197ec5,73f64a71)\n,S(bd3ad39b,989c3a08,e45007d9,116b0d4e,2dcb6a14,26a44dc2,29bff230,6c1a89be,7e633d7,de03e6d6,a7a4a833,f338160b,cb914997,6dc2080,28c3e2dd,b1c1b11a)\n,S(1da5082d,a6e4721a,499d5559,91e8d216,f26167b7,d6de224d,17bc4e5b,ac94093f,5f864511,4b89eb63,60ef865e,6eb887c2,bb0b97e3,9a0b7078,888049c1,29f63c77)\n,S(19320416,52e24197,d195a0f1,99818925,35c19790,99d15992,8999073b,4028d659,2cf34c91,2d1666fe,1abd3b0,49b12dcc,f7086e58,b7700b23,497bec18,e057059)\n,S(79a7b5e0,482523d0,85bf574f,2e6e431d,b3bd6ae8,4e921b87,fff0f683,976efa9a,f713e011,70de0de8,a8cbe229,b147cf82,efc7fe3c,d7171785,c85bbbfa,ef935755)\n,S(c2e16cc6,8559a160,9fe16d0a,9be4016d,55fccdc4,2d22ee62,895e0eea,a64436b,22399345,d40c11bb,79b9f036,5fdf6a91,4e1f43e9,bb1f0a87,81d2ede9,fdb6a118)\n,S(f76c0f67,bd3c648d,c320125,5c34a93f,ed656378,8c9f61a9,c60933d4,e2d55d7,205c9c5b,83bbf922,8e99191d,e7ef0feb,429050e8,2b9fb3ca,1dbd2d5,cd35f612)\n,S(24a3af8f,ee393ae3,2c30230d,ed6f96f2,9797d591,1cc3d934,b16e1304,de7bd75a,302041e9,2ce00cb5,d4a667ea,90df7f90,576865d3,7f462126,400c77a0,a44259b9)\n,S(2e8bf897,5f29a6ba,636e6ddc,1e2dcd6a,1373f123,c6f155b3,3c8f46dd,b18baf7c,a93f0c91,258ec64b,d6e18761,872cf0e2,c89f9713,b9008605,b0378f8,1ec867ae)\n,S(a5d35483,7f90d71c,8d829897,b3a8fa36,7c38b41c,879a3e6d,52f2988a,b88dcf68,853a586d,9661cd50,12d1ae6a,1501b874,739405c4,c7e32bd4,23ab7c1,62382bfa)\n,S(51a6c879,ba6f75d9,4480aa71,2a343be1,bb9aebc6,bb4ca3be,de16d33e,992659c7,3e636d28,f8b0a4fa,a3ecd585,80d46253,61f496b0,344382b3,5742fcc9,403e7e05)\n,S(a1d34e3c,aba45bf,1772d2f4,bcacd17e,342b66ec,97dadbd6,780cc453,ff2449d5,6c3a3b8e,9717365d,2f21e2ef,d72308b3,45008ebb,10ca02e,969d14c9,1aaf677c)\n,S(fce0f1a1,69034370,33de7e6d,b2364b0d,4441c5f2,ee405e68,5dc546c2,58adc2ad,c018bc7c,fc5ad1f1,36103729,e1a177a7,495a6195,915ca5ae,c086804b,8c107865)\n,S(e380e6af,c47b11c5,1ba0c8c3,9b796179,39b07cd9,988896c,38011e73,a4f98a81,60ecd299,c22fbed9,132bd455,1f44022e,151927e4,7ad93f1a,a0539c37,2680f6cc)\n,S(6382fb8b,2f4179e3,191d863b,a0ec4cd,94b52103,f24a0377,8f6ee27c,7c81115c,6e8d4181,9621bf4e,3c04c5ea,2b4c0146,dd0ed973,bd4530df,d671f39a,e54db63a)\n,S(c488650f,d66629fb,927dcb0b,9f5d0771,1caaa3f7,ad6df39f,7d8f98d9,65490aed,b395d9fa,46475b16,6beed01e,90c9cfd7,83e6138a,7bbc6d5d,f919d41f,3e512c)\n,S(5cf1f5be,462dd02d,f8d1e9b,6cb1540a,4f1e5be,de9c8d29,954bfb0,217e494a,5e8727bc,2429c9a7,5123967b,b598207c,46105822,5402bfcd,c3d070b9,b2351d20)\n,S(9644ace5,9dba2b1a,f3f3a4af,da130ba3,c3bdefd9,39c3b52e,670ead47,54407b9c,5e83dd4a,e338fc0b,8c501f98,72295400,4b2465f8,4f1c272d,20e3a2bf,300b1b79)\n,S(728e6659,f0bb9bd5,916846ff,3aab6f10,85517ad2,c17254e4,c2ce908,c7934781,7df32327,354020,319e9cb7,696b0384,6b8e5bf6,691cc73f,829abd42,44e674b9)\n,S(80e68c8a,31d715a7,5068091a,142d4a60,ff30d2c9,42f625c5,d234bb78,31009e8e,fe04addb,b9c47f69,3dc0b126,67b0960c,1b4a7bf2,882aa626,b1888e5e,e4157fd9)\n,S(e655129e,90211425,558cbf1a,4eeeb630,df68a4e4,f96a176b,db55500a,89f5af02,d5e3a471,ba698897,9f747ae1,a1aa87e,e10c5069,3df12ed3,ed52307d,a0202a69)\n,S(30a9e289,f6ab5edd,7b56f48c,e7373a6a,97dc698b,511343c2,8c5c217c,de67ab6a,f4016c18,c4f75d52,927127bf,c403a83d,4ce304d2,8a4fb965,beef9fda,4e9d3f4e)\n,S(8a6a4557,2c1dba29,c9499ecf,d59ea43b,1ebec5a8,78a3e2c5,2de09aa7,c0288e69,56e4aceb,e8315c2f,b9271519,80a21d,c17ebad,63223380,b24a7237,33ec205b)\n,S(647d3443,9f4e4f50,cee5b0d6,8047f130,965f8abf,482f6166,8859c86e,326c1bd1,f951b5a0,b180894c,f74c5235,cc625888,fb830382,3b0d085a,dbe857ad,dbc22088)\n,S(6d143d17,9f0a42a6,85031c6c,f62ef32,2cde46b3,978b04ba,bc37bd3,34de5634,925d0fd9,11c7863d,b0ed42c1,76591307,72b456fe,83bb8063,3afe5340,cab4b5a7)\n,S(f21cebe2,7ce8dd3e,fa30428a,cee881b4,d65eddd1,30f9fa62,9d78291c,a4f4b0bb,4a6d7f43,f2ed3d26,330e58c9,27a87c55,850620fe,1edc6e36,c9a3978,8f922ea9)\n,S(37883073,e227a5de,452c7706,a4a06594,5a891c06,e594fd4e,191d36f6,79117c35,224bb4cb,389f3d25,42411fd6,594ad6ec,bf4f1c9,11f723e1,53dbb420,33ae8ec5)\n,S(c21520ae,e6cb0358,53a7da78,919c88ec,84c17d10,3ac13ec8,6a412d9b,96e57c54,56720dfc,f748ca09,e27e8aa6,e29ea591,c0205290,3d38bc35,3b0b0155,113a5bbd)\n,S(96cdb3f0,d6194675,7346b2a2,1767fc01,2e6d1ca6,f5e788d2,f89e2fd8,89a57924,9f5fda94,e0455b28,1cccc531,7118b175,edd6c93,c212e7c9,fe845f0b,cac5a592)\n,S(7b5e5f5e,564606bb,a71b8f1a,7d410b1e,6482f508,879e1bd,38ecdc44,b7effee4,92a3f1b4,84ddc60b,4b005282,89984241,4f91b9bb,fd55eaba,37dddd0a,dcc1c6e)\n,S(541fd344,c9d553fa,1e87c9cb,72150cae,a69a9a10,771ac96d,fb292be7,261912f5,80ef7a00,6ce5ac0e,975ecd69,601fd059,a9860e07,77f6f31f,365187b1,f6c9b392)\n,S(2b2b3929,50b07da0,5c20b72e,4101e36a,bdfccb6a,2a7f36d5,b57f58dd,1403035c,ff6c1ba2,caee889c,14414086,456f096f,d065a7d,d2f9c7b0,9ed4eb71,3b4002a0)\n,S(23acbca3,4754dffa,8cb3176f,d1435d6,4cba0deb,84e12ae7,adaafe88,497aa60c,5d95b3de,26f703a4,fe9efaf,cb273921,56a49687,a71433f6,9a2813ab,5fdb35d2)\n,S(5fdfa393,6bf9c699,24417a2a,f36054d5,95640b6e,3ae30807,5ef51bb6,cd63fe34,97fdd994,bf74c959,2a5435fe,f1baea41,8a79c5fc,1243fedb,5fbb0466,4d599d04)\n,S(177cf8ef,58aeefed,2832d53,417c7025,c6b56fb3,8122ccc5,2b33f79c,71c461fd,d8a12d8c,69da9b31,832cc10b,55b57a60,b900c19d,f8f38c92,f6bccfdb,98d3acf8)\n,S(14f90282,e5a3121d,a59e919a,fcd146a1,9251cf5d,c0d805bb,bd013eef,4ab78bd3,74a504be,928ed13c,f29032e,5c3dcb3,a18a1df8,aad26b4c,a64ebabe,6afb4244)\n,S(31099221,e6ceaf16,81b22b33,dd8ee3ef,1c2a95f7,2bed88e8,15333f69,f91867b3,772e45f0,930ebd2b,7f5b7ca0,640467a0,8ab5472b,f6bd347c,903cfecf,8f80176a)\n,S(a6a0a416,d8eb22be,49036f4b,dfc79c6e,6cd167cb,38813269,70e199ad,c5d1b5de,54d036de,6b84f308,84faebee,4f944375,fed61a6e,7763bb40,a283ab52,3335af10)\n,S(c7c5cb1d,ce484477,82e7da9b,55bb8482,4f715a80,d844294a,3c05dfd8,3dde77cb,bb66731,1bb0c2a4,e493e257,d289a42d,3630ee24,ba0f7f86,134a7c6a,72dbc3df)\n,S(f1bdcb49,43267948,fe1c9b7b,51afcc79,7027e4fe,f98c2175,d7d1b8de,770328b,271f57bb,a9249cd7,dc510173,5a2168c6,ea97b341,b44cacc5,4083d115,6de8e728)\n,S(2815f09a,8f0e2dfa,d21f50c4,60b8f69d,3aad54d8,aaa99226,86050582,b954d912,dec68871,752d862b,32ffdf2b,482ce1c0,6a659bcd,3a2931a6,29bda260,cb3cbf35)\n,S(622619ba,8b74a0d0,5f8fa899,aaddd272,c9e6d43c,49bb6708,367155ec,4907d0c2,aab9b1ad,10201d50,7bea05bb,5b20453b,6474154d,ebe3ddc0,c86535ad,7c701954)\n,S(a0390604,a40611cc,6e36c81d,30cc3e75,d162e695,1ae0515c,75417744,c093b997,60428c28,8d32d229,7417b6d9,b1003522,8190a83,66cae58,f7887037,9fb99641)\n,S(422c7d1e,b0498cc4,dbba0135,ababc80e,5416f187,11f0dff3,80f1e1dc,23bedf0e,9c47d3b7,eb5713dd,cbb9ec8a,60d931c6,3382452,a4c0861a,847a354b,ba57d9f1)\n,S(982844d4,7f572298,afd6734d,98064369,d81e4851,4b176059,6d3a1e85,6f043f5d,9b86f6a7,678cb5f9,a4304f1a,a8d3458d,fa85e65a,ffc79da3,faa1fc8e,a2b7ed2f)\n,S(993385f,a76b9373,422e4411,b9e8a85d,3ac0e09a,f9598570,63d50a8,67b67ed2,3e7a9a3b,222a66d2,f55fce7f,e33effbb,bce8cfc2,8991d8aa,376a8ce2,4e9b8460)\n,S(15b05ee3,179d1dfa,61bfb0d0,1903f93a,f7e04f98,cfd40be3,2ec094d,1bd5a4a1,ed1301a1,451cecad,30e8fadd,801c9db5,5acfd697,3ed36621,2f2e3032,adddd939)\n,S(6062aed5,7d6312fc,433bf7f4,9c10772e,829e294f,e7ad07db,177c75cc,9fe5e52e,96aa4495,c6eb07da,9a5a0e19,8771dce5,23a5d7ff,de314562,3b704f44,c4ffcd24)\n,S(ef45dd6c,1213ac0a,5df18426,9491cb3e,bb5312d3,fb55c7f2,8351c98a,1ba564e3,91541d32,43e032f9,450f3605,cab238f2,703a9eea,8e429824,7a6ef63a,45540e68)\n,S(a1e32dcb,c3a13a46,166ebb73,7e09041c,3487120a,6ec46987,6befb2a9,94f4a69a,ba88b7b1,8cdb2088,b5998b34,461b8a5,d85a57c6,31aa10f8,6ff808e6,3186e5ed)\n,S(817e6c2,6d4ae706,f43ddd7a,cfa4eeed,6498ea2b,86aa661,9a0b45f4,e22ea33d,8aeed38,bccea5e3,4923b959,53bc9629,d9348442,4f33b06b,b02c882,25e47bf6)\n,S(e734f5a7,736014fe,2ac9137f,d025f914,7574d67b,3696596,9f89b5e1,aeebf88d,74fe8220,7c83d3ba,ec54f032,f11f9309,9be25f53,565f0d60,5f2ab406,5287c997)\n,S(87b2d307,414c314f,184eef07,6e9809d8,ea19c002,390b5047,38eb7bbe,ba1ae7d1,37f5c369,f5dd54b6,87729036,b88dbf37,45f33da,8c2bc9b2,64213468,f1c56841)\n,S(dda23ad9,6c51604e,602b8e6e,9f08a67f,981bfa98,93194369,269c56b7,7986b772,6de02623,5ef973da,13e2577a,bbcde720,aa8fbe12,23c5288c,5724bbc0,228074a2)\n,S(8d56a723,6adfe6a1,46182431,da5ff846,aee78931,27564954,f14172f5,27048fb9,c7cd6bfb,fdc51a83,252d4e4a,2c978cd7,67fa3809,521678cf,7dc5e514,eaf0b418)\n,S(9da30ccf,f147de11,de528d14,863a4fcb,a2ef228f,506aee98,eabee895,eb618def,a4ab41eb,a16b4733,34a818f4,b6bd3c43,de4a9392,c15c9e19,a8b4e961,7fd4bbe7)\n,S(e3339c3a,b14145e5,40c08544,eaa631c4,7be6c09e,563ec93d,2a05f219,f4afdf2e,fd586d7f,3a668a0b,f888083a,9ea84f48,43598417,f55dfea9,790ee89a,c412fed7)\n,S(a6e08d07,66274337,f3b139a8,d6fc3f61,4dde9ef7,2e03fc52,45f7dfcb,1c0ab41e,d9620b61,116af945,708a610,c78f0b52,8abd97c0,21ee34fa,10d289cb,f3c06d4b)\n,S(f8ffa0d3,b463fc5d,44e6eaad,caecaa85,8515bc4,69fe76e1,4ecdb25d,e503a040,e80dd6f8,934fa405,fd4d74b1,1da0d09c,dd723df,daf46221,796cd7e2,4bb83f1c)\n,S(22a212a4,3c00408c,b4b94e2a,45a6a999,917c0fc7,aaa565d,c6f982cc,64b0d0d4,663d8ed0,3128ada4,f421853d,8ffd8201,1ec8b997,4b0d827c,ed318551,ff9930de)\n,S(8d33b62,f162963a,f6636f18,ef33a83c,e9a17fb6,b1fc58de,6d271d,472a9d82,cf0092e6,60311726,e0856ff7,1893555b,625b117d,4698e4f3,f31611eb,21a56f5e)\n,S(3bbf59cc,5b4aa31d,dfa0ce94,1853ff69,9db29cc7,a0021cb2,11ba28d0,1dc61d3f,d54beb79,d1edb94c,d6bd5ae7,11a3ff22,9f2baa0b,efaa139a,e4724ae3,624d8318)\n,S(4cc9c2ed,3a7266ca,faffb517,d3ad4aea,2d4d877,d9b08433,a4fca2a3,691aec68,70ac52d6,1094da70,5f714f60,854a5656,8c25cb13,1502171,7bd4085e,8b489756)\n,S(a997cf82,50d7ec36,125189bf,eb6b8631,cec31fdc,f156d34b,186f29c6,5d0b30cb,ca73d95b,93b43983,b2c51518,b4e419f8,415f14fc,b6356287,cd65d49f,92929d5e)\n,S(5fae92aa,7c43ac60,b4bb4f90,ae2ac462,a6f88681,9aeada99,4d0694a3,a6dc1722,6b7ebdc4,dbe15dd0,9c1e4587,c7f297c1,74d5c933,6bc91511,f31e0cae,2e51b280)\n,S(cf541216,323a9591,13561470,2b187b35,fffaff7d,8cf1993a,5144c7d4,aa836308,9d955733,feaab81c,4b03fe4d,25fe36a2,5075357c,b6ebf8dc,1822cee9,7f585f80)\n,S(9c2c8607,bad80760,efb4ba73,442a359a,c1cb9b45,f81e54be,28f3f6f4,4699773e,7848812f,f3101eed,137b4dd1,4f503a42,9d71c157,449767c6,a5850204,869a9817)\n,S(2f3bca36,fe504b7e,93f70176,2e65dacd,250b3789,541076ac,86352481,c896f77e,5af55f5d,b2e84dfa,38bdd0eb,fde7ea68,33471d28,add88dd2,a7e7c63f,dfe513a)\n,S(f2fa3afc,fe4e5da,385f26d8,1848f801,7401b06f,652121d6,9468d2ee,f640260f,54cea12a,b4ced3ee,2ca351df,4310e96a,d3ca0d80,c3a3c86b,267c4620,bd0f69a2)\n,S(82559cc9,ead1465f,a910b781,cb2a50ed,9a2b6ff5,d8513182,425b7dfd,983afa50,db5dd99e,242287bb,c94cd149,6e4aff70,7232e2bc,1fa4c440,5cd9f22c,fc4d239d)\n,S(954079af,1494e324,fb707e7c,e9f1fc2a,751e194e,4ee058a6,e55e26d8,34901f5,2f90eb0f,43bfff96,c3b0f3a1,bd48c00b,85d3650e,52d1f614,ed65ce70,4fa19e99)\n,S(c913a980,b1aca09a,19654428,6edfed20,dce31676,1fbff05c,1c05fa70,7eced342,17d2864e,df39460f,99b5b51c,91752c57,10ca7af9,a6e10c4e,c2b3e9e1,7317d3c1)\n,S(815b7dfd,3b97ad9f,cf6ce427,ffe4a91f,2b541e2a,11305b17,2fd7b63b,82272db0,f0b958eb,fbf32959,dbc407bd,5290ca66,6f28bcec,2fa69d1a,7108a2ea,19d58484)\n,S(7f7c1689,e93b7c77,20ab5b74,572e87b5,d2a907bd,624fb6ff,d5f29f3f,c64795d5,691a2f46,430c53c,375829fb,46ed4030,b5bc4dd6,70646523,45fbadbe,e6f8a1f9)\n,S(8911275c,106e5a48,1c3dc5be,b9b42e2,3be8cf2a,5a76198e,e6749b24,bd9c5e7,747cb0c2,16d899c0,da5a8ed8,f279a650,f4537e7d,ca51bf56,b3ca8c43,92b5e99d)\n,S(24cc2552,c907e757,9e85bf7f,fc868ebe,53e44b97,102b31f2,38678bb7,ad8c244a,a152808f,7d615060,ba9e78ae,720c2fca,a67772b7,fd99ed6,ffd5fbe7,ed114567)\n,S(b0fc5873,68795dc8,55e3e19d,9236244a,812d1920,afef4c9,7f1e6c79,25395f85,f8b46879,5a0e40ba,2029538a,fb7cef58,9bde7b3f,fcc010a4,4ac962b0,afb8d7e4)\n,S(cd6f4558,d634fc66,6dce566d,f94397f,d3ab9178,affd3707,55852679,adc6565f,d34d7be0,ea40586e,4f9007d7,4aca55e9,edb4b31d,8ad4f344,1f611a9d,94161b8a)\n,S(fc5e8a3b,ada62f0b,6453f445,7dd4aff3,993005d6,de7b94d7,19fd487e,b88fb7a4,46041321,f7fed84d,2266d4a4,d86d836f,12f12296,d62ed296,6a7d5507,d6717130)\n,S(dc72a540,55c962ed,90e64916,bdfaf6ea,aaaacbe2,fc180a7b,7e7bda98,f45488d9,e3b46394,41a2063e,59c4cb06,1a0a7e5a,a171fe39,812922f8,c04df63f,41c8e588)\n,S(7d135c33,88bd5896,47f4cc3d,67fc7809,a7a4c530,e96fb5c,7dabe3b4,32a4fd90,79dd3834,8a61b642,9eb7a837,4e9c2176,95cff14a,3596a18d,19f84360,8aa0922e)\n,S(7a56712d,b72ac3a6,353dad9a,15cfc9d2,7d9ff67e,9a35936a,e38e1c01,5980980f,6eda856b,9b5d4019,d0efb2f4,9f1af933,8969872c,126b2682,f56a8b08,97a83696)\n,S(d3495480,25c7f966,d59b40d9,6ccb9831,2948c992,fcbe2f6a,7a7feb6a,946125a9,b346f8bb,532da4de,96908618,b0f85a10,fe9a87a8,d612e4ac,53bdbaf,9dfdb3c)\n,S(22175a8b,d0a51763,d1818054,60951698,14af196c,df8648f5,29d27a9a,825e60b3,756d5713,81b5ce71,e23c0190,a1062fd0,645eddd1,7dc84c9b,b1c7d810,c13db63d)\n,S(f557e381,37a1c6e0,a19e4207,4a1dd59b,17c5137d,97a58fc2,55d18be1,bf63877f,6cf0bb41,577ea3bb,7c9945d5,db33a862,3c1cce5e,d6fc13b9,b0739ea9,9af10381)\n,S(8ddbadb9,c6a78978,2540d3e1,9ada3ed0,5ef35f45,a38be470,7083dff,75d501cd,75b4c5f9,51f70fb8,a89fec5,d52ea0b1,dbfc5709,3c1ee5eb,ff2ab0bf,f5854644)\n,S(53f0892,cac79f48,2194dd9f,fc076305,a8ecdd4,977ac278,92e2d454,965a2aee,b39f7a9c,ecdd4ed6,d0fb1608,3b86d1af,68aa85b8,c733617e,5e97ecda,269ef97e)\n,S(2712110,8fe28f55,c746525d,e7cfd4c2,f3a11b8e,3c6329db,a57a7b32,5a7edb40,cf6732b3,74681ab7,3448bad0,ae54b953,ee5d7bb2,5a8658d,3b366a78,dae5fa69)\n,S(e7627b26,ff0448bb,cb45a538,2ff8ec9f,9376127a,b8425213,46e899b4,41cb5660,79842f72,e02820b1,e6b6843f,3a0c23dd,c0941ac2,b6fd30a4,39397ede,c78bc40d)\n,S(37c48874,f07ce0c6,cf5be181,9ba31bfd,9a19aac,97b27011,1de59fcf,559fcb57,34dcc405,6a6dfa3f,283e0dd1,8b1722e,bad0e367,c30d9f1a,d552f394,9ce19b22)\n,S(316868fa,33cf5544,1e9b9bc0,9f74fa1f,8daa9058,3fb8b3cf,8d339971,311eddfc,89fa5c82,9d9f4687,f7cb6b8f,ae20d6a8,cf872ded,a7f9b6e0,6e168c1e,45db4e73)\n,S(d34a83f3,7b7673b9,6c8695f1,81ce837f,ce2f15b8,72664d3b,1a045c7a,bceadd44,e4f2cefd,59198808,15692950,19b9120b,495a44d3,4862323f,808b11b3,a8698081)\n,S(687a48cd,4142060a,171a1efd,c41dce8f,8127ab64,ebd7c22c,7803f077,19168799,c082e152,41f7db05,ae6c1e15,e4ccc340,f4a7c8c2,cfd8bfb1,6bcd04e7,e635726f)\n,S(70d2cd79,1d2d1418,9cf67e48,519aecb4,d58be2af,164d0605,2132517e,87f444e5,73b4c12b,edda1a70,89ae9db8,f105059a,2a558475,f5cf4796,1042c470,c9e190a7)\n,S(2a6f2786,a191130e,dba1307f,f1bb0f61,c3d7b8ad,c02286f6,44871cc,170dd2c1,28a0c85b,8ec93fcd,1b9a0617,780da654,e5448475,a02a6222,f7065132,5ad64b2a)\n,S(3f482e12,8d5bfc4e,d2f359cd,b4244db7,ec7edf92,f3fc5dde,5367d125,dde8c772,d41be140,cc4b4217,cdfaed4e,b09ce5d4,d3e95b52,ed6689ed,3f6dfde7,3c581cd4)\n,S(96673e27,fb0f8a46,8fcc53de,12876045,77786d93,5afbca99,35545363,6614a5d7,f6a4eee7,1c4249c6,ef850090,59c12f6a,44adb8a9,cefe7a8c,ff2ac0a0,da28884f)\n,S(be7a886e,499a9c2b,c05e5f64,77bcbb4f,26772e58,4565897,408eb36a,e25a9c58,24457eb7,802810f4,de64516f,24718b06,d61b0adc,bcf0d279,d883b2bb,45363a40)\n,S(123985af,a3253837,e51f933f,8f25591a,823b2442,88cf8ba5,a0247ec9,94eecee4,a952096,21f7a9a4,3867c6a1,987dd661,1d3cf996,2aebfadc,dee0a5b8,6df196b7)\n,S(75887ee8,c28bd2f6,a96086d9,aef71b7b,5a5fce50,80c3963,787089ed,e39b0214,47386fd9,a9216193,3bb500d9,a1ee8207,dc3edbc,17d3ccc7,32d9c90b,8995eb48)\n,S(4f7642fb,12376864,29104657,2a2fffe5,2322df39,7cc097e8,f7a57816,e6709fe2,4f2ff70f,2e99354a,60cc5b2b,c3ef33d3,7e3e9ee7,16766018,e3a0ba39,efe5f971)\n,S(8117d4fd,551c9ae7,4c9fdac4,5d87bb66,9bc7dc35,4b08de03,7c4a1378,734653b,13633743,d1ee8fd7,8482e3a,3a9e39e9,75b0f6a7,efb227fa,84feb897,693c5c10)\n,S(8afabdf9,acd49723,d73c0deb,1016ddce,571abaa1,a71ae3e9,a20bcecc,ade5782b,2b66e3fa,ee86dde2,23dcc7b6,10ea8ed2,dd42124a,247b7937,9e190098,2580c71e)\n,S(c4819cb5,b5af7aa2,895b81c9,31dc6bd1,de4a1434,daaa4fbf,abfca6d9,28c9965c,ae4db5d5,e1a09a03,67df8c9f,fbd2ae07,9f79ff96,410a9a5c,17229fe,5575c22d)\n,S(dae02e8f,5d106f77,c8a1e1f5,4366daee,d312da83,1f86dce2,3e846e30,737d49f7,6d666cf4,73d269bf,aa7c3eac,4e5a2868,57df3661,c949b5ea,7f9a7a0d,11206bb8)\n,S(a8762d34,c6f8317f,cba5c64c,68e25d55,e5bf7e4,5caadb65,a5468d2e,f9d779f0,6accd443,bb181cd4,591f8fca,210f9996,86460bcc,89dc06a0,2edd7bf3,d4b75533)\n,S(bf503c35,fc8a0c55,fdf4149e,96b2d218,d29e4b9,1f703e7a,9b0d4da5,4153d99,7e1c09ab,a1437e02,a2be3d4d,7a444753,e475acd6,e3a42056,94e68ea3,cb7d1847)\n,S(7898067,48cc0ad5,ab3a3449,ac82a1c7,d51f2b96,791ee038,dfceae58,ea0c5cc0,66b59634,96eb4a69,b87aa0da,2905449f,ffd2ae3f,ba1555f6,5c9b8ec0,e94ad922)\n,S(25833d28,addd8172,c2a323d7,cf498482,732a0be2,c10d1895,8d097cc0,ff4c9a19,74708306,d01258d9,bac99a69,58ce1117,f245d6f1,4a1f92d0,dd48ca9a,4c7b7da6)\n,S(6800bb8a,9dffe170,9ceac95d,7d066461,88c2cb65,6c09cd2e,717ec674,87ce1be3,d5228e3a,1e0bce22,c2d85b44,e670e78e,ffb1ec69,6c01a722,2cd1e62a,dc4e63d4)\n,S(3d7d5874,42e4816d,af2f0897,dbb06cea,f6c673da,445a5342,c61a8793,420d107b,422b212c,93ab83e5,d6323ad0,35a55321,b7441835,b83f180f,c3803ccb,46fa4ba4)\n,S(3c44084f,aeee2803,34db27ea,63339db3,9e8359b5,c9cc9a85,7ea49740,32d063e,36493b7f,1a732a87,db4703bd,61a76825,4a82846f,31d8920f,2cba7ecc,1d744491)\n,S(cefffb5e,d26cf721,a51bfb2d,460b91a,a0b40a81,52073da2,cb75050d,f7fe8d19,b4e40e1,1eac7572,efefac2f,a97e5cb2,a0d042c,3ae8c541,e51be4bc,f6d33f4e)\n,S(63add0db,5f5099a3,2f274c38,780cc215,bfd58753,144bd464,e75b0da2,dde97938,bbed5231,fe6d5b4,9679a13c,c3c6c382,5c300fb8,42b5eafb,13355c41,120c6848)\n,S(ba5d1f34,63130cfc,425cc6db,dfe08329,4d7aef4d,cb207e3f,d1cefebc,7c791920,70df29d7,8030a8ba,56514df4,b6ecbd2f,ebfaa1b3,df7b23ea,ed16458f,f2f18786)\n,S(7d363dd1,c6dd28da,94a7f850,ee753327,8b735dbf,f43e9456,67fc26e7,af75d6e1,46026468,2bd00bad,a5be02aa,5034e762,fe50d02d,6cb8dcdc,5aafa21e,423267da)\n,S(e2dc0164,c9060646,904206ff,37f912ce,2d50458a,3ca186ee,fdda8d53,4184070,de5267d1,354d12ad,8d9a5930,443dbef9,65947f2a,5efa206e,146e7b1e,df7f5a2d)\n,S(2e53caa6,35f0ad1c,7bc4c2ee,1e29b39a,972edbd0,7d3c0feb,9ab0d945,45815ee5,1bb33d23,ad85b572,130e93d2,fe366e49,8371c49b,b47ceebe,de3c1286,3f443b23)\n,S(5dbefdc4,9fabdf50,e6bc1464,13d59940,cb36551e,5a6607bb,13213ffe,b56eba1,893fd0a6,1797abe2,fceb4054,c4f540a4,ed644ed3,13a2200b,e1d532db,44d0374)\n,S(5ff207e4,2b52b004,6ab8bede,6bd26f5,316ae52c,d148965d,8a21e8d9,63374a2b,1b778704,daa94eb7,a36ad0e7,22a6d56e,c0b43c7b,a739985a,538bcc22,b9181bb4)\n,S(da260b,ff4bfb8c,a54261ed,c96493d3,ffa90273,a55538dc,c9b237ec,e775fb3c,c7c744c1,dbe1cd19,20edbe3,c13f7631,1378140d,9ee64c3e,ab072401,86c067dc)\n,S(b1985ca2,e7103268,f18d1063,c59d8d78,2250f450,c467d7b2,f4e41c28,1714421,16357630,3970159a,99a34c0f,e114b95c,f115d9d7,dc9b09ad,7c81d769,aeee6898)\n,S(bf98e773,fe93f15a,ced03ac8,368e4276,1cf3821b,461cd844,2426d2d,cd1f7d7c,f4fe02f5,f45a9cbb,b67ef626,f239bad6,e5108c28,d783d70f,6bd889b8,6331185a)\n,S(5dd657a9,ff99f15b,56c5143e,86ba7bc4,b0f34957,71d91805,71a3d003,ff008fa0,8da0b780,f644b14d,2b661b9b,484225b9,86b13038,a8a9bdf6,6999144a,4f5c212e)\n,S(53b42d75,bccf2203,7252ee9d,25830f3e,36e7ed8d,8e1b6d4c,b2371e14,fd4fdba9,7791453a,dda2ca19,a775d684,9ee60c18,ca495808,6f8b56e5,1bf2b216,9690cd73)\n,S(a3f43f6d,eb178109,cf4aaeed,a0666bec,481a1894,c25a4fc7,f4a87e82,680d63b2,d0331e73,7dc25db7,35625621,85073240,3a69a474,d5f78e54,93486b5b,3d1c067a)\n,S(b83bea86,b07b217d,ddac9cde,9b42b334,c994cd1f,92beaa87,57a7e7cd,2c71b1eb,b68f8fd,66b45aa0,dd568458,73eb7829,1e613569,58345fba,7dcef9ee,dab957ca)\n,S(16ce1de,573b3654,a0c00212,e878811b,25832f36,373da91b,9d9d7c89,d06ff12,264031fc,7441fe5d,4ce8ebc9,232d1837,7fa810a0,a0e19ba7,5ab16ae5,e93d5763)\n,S(18fdf98e,93a7e380,8762e819,2b6e634e,f255b2ee,51c65b58,1ab799ff,52409e15,2d71afd6,c6298868,52ea0a1,943dbcc8,ff844ba3,80b177e8,62f92852,97868dad)\n,S(3d5f8af4,ff89de18,866f596b,91300a32,a7aedcb2,a9423f4f,e364cf26,e2f53e96,46e9bc8c,ddc56d4d,ba25a2f6,e77a6a70,2e712496,7591725f,1d240e7f,9836548)\n,S(69dc1e7c,11516a15,9edfa4bb,1afe0ea3,5be5b7a4,7695df8e,728a8dac,e2997db2,71be8ddd,d4c51c1d,5c13704,3aee6129,9541e929,799f7b6f,da08aee4,52f4ce8f)\n,S(4e8278ed,ce9b340,1ddb1c3c,6b208539,164e1ad0,3adc082a,8d9dd5a0,9c63f737,13e6a5ea,7b2e8ebe,babd812f,2579b8bf,56b476ce,dd23c418,9be7b85a,940c5d79)\n,S(91157569,7aed20df,771c1f4e,78b73dea,c89b2781,9b8a5ae7,5e2dc12,e6e7d148,e7114d60,218eb1bd,73074957,5b96fd10,50fa2d09,f37c0fe6,2887042,24ca1a28)\n,S(3a37e743,bd2fe2f1,3f667abc,b6c03077,fd82722b,859d7bcc,ebeaf1bb,a6087d93,4192a6b7,eef51034,64040fb2,6b8d9928,21e321b8,cd611b4c,8d3e0186,646f5dad)\n,S(d45b5787,9e4732ad,ad0996d5,879980a1,fc8dda5c,b628435e,96c3b44b,faf98f09,e4d4f5ac,1e4b039e,731143d7,60e2ef35,dc243097,d2e2382d,b86dc82d,eba0554a)\n,S(ae5ff450,aa607a9b,bf4549d8,4d96adbc,6041cb0d,719793f9,2ec53b96,14522a00,2f061b20,e9bca3af,358e8d14,a04f1d82,97d1e1dd,a406d60a,d15727d0,66b2b8fa)\n,S(befd3684,32785d19,7709ec42,e3b6407c,7a539b55,d97c8fe7,afd4f96f,d2050e17,65691153,b2efb4af,ebd2dae1,a50fd3aa,b648c7af,f5804d99,5270cc22,c02e151f)\n,S(d13626c,bc00cd,36c776c7,8bdb17c8,18a2bc14,9612e0fc,7ab7888b,eab48382,ea4c3fc9,fe2238f7,1023ab83,fe0e09a1,dc167c0e,6aa05933,8f177cbd,241bdd45)\n,S(9730fd42,fa9ffdc,414f90dd,ac790110,9619c01b,f43bfcab,e65a341e,2434435e,de61024,6152fb04,c997fd62,961209f9,44badeb3,6ea7774e,30e8c8a0,8bb0b496)\n,S(a27e09ee,9dd4e34c,6a92f4be,aa1b8c0b,2a60b33e,99fa981d,afaac623,9f616d15,33e6d8f7,bcaaa24,b6008e44,377b4892,5f88e884,5fe73807,8cd4f405,a2747f14)\n,S(d2dc7884,31e5a497,3905876d,bd6ceac7,8246c9d0,73d68872,f54685eb,5970763c,85f96d40,e31ecc47,dc07fea4,4856068d,15d2a999,735aeb3a,4959e4f9,9ecf5fc8)\n,S(38fe7a6c,c401daba,981875a0,f0c2f528,30ce31d8,816a1d3d,47a3d96a,664a02f7,e9893a1a,87034596,9d95e644,313d9b65,5896a931,81d36f6c,7e390102,3cb28c74)\n,S(f2d38ff,14100172,d117dff6,1522c61c,3a590eb7,ee9fca77,dc264e60,32291d78,94eb4046,ab31eda3,7593e705,792fdfee,2e3df8f3,655befa9,ef0ef392,4b02dab)\n,S(9e23c290,94b6b8e7,4e112b11,69c5c775,4b690d0e,141b74f8,2988bd84,78d42021,e2528717,28fc8d9a,283bdfa3,a011d28a,f531f392,b5da6da7,1834a29f,203e747f)\n,S(3054117c,33c15a,504156e0,97e9a0f7,d76be8a9,c1c88fba,e1d9d2c5,4e1c9185,998844e2,b73e9468,1b0b09d7,4ca48dc2,f29c6df5,f3c38f7f,b6846178,d4ccae2e)\n,S(65d1e830,3421444b,7d5f8600,2c6de12c,16f15a88,504c6876,b9e94cfd,a206810a,71c9cca1,6e066545,b11e2c29,edbac8f4,8533ec41,1e331e15,a2bed53f,1b1878db)\n,S(124b78b8,948c4374,7c5b32de,50cbb055,ebf9fe7c,56437573,40723180,131ec0dd,c0fefa74,970829d9,4c1314b3,64a8516e,3a3c7fb8,e1d49f06,b1b9c19f,be18ddd6)\n,S(f6d81a5c,395ab698,28e5f1f7,84edc6f6,a55137b1,411baa28,615abdfc,36c18567,3a759acd,4b758dbe,79e22f4b,26774b88,40121768,f655664f,c3f9bbbc,91f564cd)\n,S(e76bd19b,fe13dc17,ddd14619,da6b12c9,f2819514,6acef71a,9e7bc32a,7abbea8a,68cee27f,152177e3,afa7d47,903801cb,b20ba02a,c48fefd6,e23fc102,e6456bc7)\n,S(7356c0d,ff8f26eb,7df215c5,cf923c4e,237fd7ad,cbe58f7f,d5c745be,6451a830,16a0d86f,ebcf42d2,e89e9a1a,803838d3,1dd7debc,527d49e4,a7db799c,e1eeee6)\n,S(b8d00a56,43fdc57b,dd949193,c5df30d,8ecf5b4d,8b3a13e2,64ba3ef7,c8bfacc9,f05acf53,9343641c,3feac336,28e9b08b,9a4e3c49,94c029aa,470fde03,d5d8cf8a)\n,S(f555e29d,4dd3e0eb,d03f3866,596be43c,677d1ac4,1a1a3a8,1936ca6c,89618880,171d88d1,9abf05a6,981eddea,8f030e53,117a2e2a,97c2f352,255038fe,32ecf95a)\n,S(172e6167,6e7755f3,c6a59c40,97a8a870,cdc09d73,2064d24c,3db8ada,7ca50ec1,7c1e58e0,38f322d3,e147b3db,e9b8f311,135d688a,98458da9,f6f8a6d5,4d4e2a96)\n,S(f8f5fee7,d4e8eb51,92cb7ad3,9ee26cfb,44724b7b,f9c74fcd,61f95e3a,f33fabc5,607fd05e,361bfd66,519b5e11,d00d22af,8b0ce85c,11b16cd8,eaba71e1,2ebe6bbf)\n,S(6fc770f3,f6169350,bb8b247d,16088031,4348ef73,cee49e5,c0f56a19,d2d66491,47708f10,80e755f1,2b1b0d9b,3439312b,dca07d85,fe94fda8,414dbdc6,ed9353de)\n,S(2b8c0b49,94d3f78,79776d8f,bd2980c8,7840df15,82427cc4,f07ac806,eb7f7e3,3a335552,ccb38312,92a71376,9c7994e4,19a7919d,b776ce6c,db2ff092,92e4d798)\n,S(e473c99b,dffad22b,72b6fcb0,d741179e,afb78aa0,de4b5d42,dd19d7d7,72ab1a60,2d0f795c,61ed1ac8,b5691d5e,9d52b19a,42c368fb,9d0787fa,8ef3b275,2a3d9d26)\n,S(f389dc2d,b76a47af,f9d7a380,ab49274b,1a40c4f7,970bfa63,729da698,b4afdc4e,b15c2100,b63f7f5f,911a6474,25866d79,5a57dd97,74c21cd1,4907dec0,f5f3afab)\n,S(df6e3625,8fdefe31,dffa19ff,2416f8b4,9fbc09c5,e86569e4,4b7330fa,56cb6e1c,4b5fedbe,835f0b8f,ae20f627,c8e74f41,a5443c1,a764c466,65f673f9,f62dfc7b)\n,S(27e40da1,a5d7cabc,ce586e33,a4ace757,da972cf6,17c3781f,3fb0e0c4,e6f0a70e,ffc4b339,9cc0b701,36d871ea,a7c3a6ab,fa9dc92,72625fb5,b8bde8d8,be55904d)\n,S(71b6f20e,e558ac12,829362ae,53900a59,ae29cc70,77dd1001,d9d7eae,36b95618,e765adc,1125219b,316beb88,4c0434eb,a6f62499,b8b2d217,c209c7cd,622d0597)\n,S(535d5fc6,1eef1a92,50ceaef8,e09e1797,8debd360,8b03f72c,bfe265a2,633332e2,f8453dc2,4ad1ef7b,819d4329,a4752757,26c98e55,65440cc5,b5d509d8,61c98a38)\n,S(d1e2222a,26817cd3,a537f2fb,7437ce06,ce9fa651,9d3c1967,71aac21b,97de68bd,a131cb69,cbd27e62,cb65ab48,a7f3035f,a78ef40c,6c42e94e,da326ccd,2b452849)\n,S(5aba9590,2b5062c1,59b9639e,f08912b8,e7eacda9,759a4e98,b0e21d96,c2597b07,896a74fe,e2596e46,1e93f4ca,178646cb,4bc5454,227a2dce,1bb5d532,e558b334)\n,S(9f07bed8,4449bf9a,815a546e,ffcbd0af,f22c9016,188d15ad,7c353e2e,5cf84343,6fa14d01,ba16dd07,15f3e68,d57738f7,1cb56d95,61eb84cb,ad63bbd2,d9ba439b)\n,S(80a1920b,14723439,cc2090b7,189f96e0,20e6eba5,5f8964ad,2f0be013,b4925515,fdb63791,6d074376,8e32f983,f2ff1754,43136323,50b98674,2ccb9ae2,7997a020)\n,S(dbb37c16,202dfd9e,914f2922,e8930789,a70d4de0,9fe7eb25,7d9a2b83,aec2b4c2,f6bcb8a,2c7bfa20,491d3fff,bd36e82d,91a7228,9e4fb6f8,9e167803,a17b7932)\n,S(f03035f2,f0ad31ac,59e64a6c,f46e9ee2,a2243ee7,de5ccb0d,cb30083,97551b4c,1a1aacb9,798651c1,2bdc6ce7,4146e259,4263474e,d7b9d42d,78026331,60748722)\n,S(1886fa45,e7447e89,b0873362,605beafc,4e05965e,53fabe41,41e1c42,4fb234d5,eb5374d,a4a198cd,d9027311,6b4331ed,f0f6a7a2,fc52aa44,8a9274b9,ee3d7743)\n,S(46a262a2,5b76baf8,ae0ba3f4,ed8f86fe,e4854272,cbd0ed41,313c4e0a,357471b4,c08ee494,66d7dc12,a8e08880,732574e6,f6fedbf2,71d6dc37,eec3c324,33d8070e)\n,S(d521c6c4,a0db2668,5a36b61c,b73d3504,ea7b7488,e3d75410,494e89e4,ab404d37,41f334e7,6a28cb9e,25e6efd4,fe3eee2d,17480189,b921d726,aa027b3f,75f94bfa)\n,S(8f44a4e3,c18d714f,62054e54,6e9ca86e,818fcf39,fdde40c8,3044ddbe,be3b951f,210ec152,f8c90d7b,8486d1f9,c5c49a48,68249795,bf7d0171,34d9573a,d5b22aaf)\n,S(d5a74098,eb20aaf7,b664fb8d,63e08b0,430733f1,466552db,417ec648,36a31dd7,7eedeaca,97f1c85a,98496159,eb024564,1c8ef0dc,21c31ff8,9d06012a,3387647e)\n,S(d2a63a99,d6ab9e57,a2a6d39d,3738c3bc,94505332,2a34d3d2,4cabd1ce,5111bb08,e50f6c3e,796ac830,e276fac9,ab6738b4,722fc87,880f2e93,7417198d,9c6c1323)\n,S(a1b826f2,1f7abe38,c622b93a,7510114d,dffe4cb6,d3fe0627,dcc0465c,bc82ad9a,c9cec051,a253ab24,a8507b07,d24ee4a,c1d5a5c7,33f0c3d5,611e8a9a,e4aa9667)\n,S(40719ba6,89926b5b,ca99a4,161a1bc,d999d40,2311fc5b,e2f5260a,c3c10208,9edb353a,73e9fdad,96ca6b77,b467dd9,c7d6d2c8,e041d8f2,19448ea4,c603bcd0)\n,S(c0ee8dda,80fed10,721e7cd8,9dbd237,216f4e84,bb8f7138,11f8ca16,1e3a0977,6a786e53,2a0f49cf,eabf0338,1d64de56,1a1973c9,36d6a5ca,4aaf4cba,b8fbe1e7)\n,S(9c75860,ecdeaf1b,c598a530,48a22158,8099afbe,20cb08c1,3afbb133,b2681809,d7019eb3,5fb61aee,56a1afaf,2675a028,b8735dcc,b3f5d93b,c3e29672,9203321b)\n,S(e39df640,6dbf2584,fecea5bf,aae78b5d,bca93ef0,9054c754,d8b235c2,c5463657,33ab2fce,3a2e3e7d,e2ab230b,e69bcb7a,4d71c87e,a1ff5d34,eb8b78f2,d5c61a55)\n,S(22480e,4a7cadd0,d17a418a,78074f80,c4731ce5,d9f1268b,1ca50204,1ff8282a,993591da,11ea4445,8ccf8bc,2cd55fae,69e96a77,89d006dd,b85a22ae,85316200)\n,S(c613fa66,231d38b3,359c3b94,132a2337,e2a8c608,3c88b41e,58434c19,48a6a1ca,8087377b,c3d6ca30,8c932dc6,ff82430f,3fce21c0,1a8b8b6,c28bab78,d3ddab43)\n,S(c0a94837,c2fb86ad,ca791fb,bb0838c1,3bb0c981,e23c4ff7,94dfa5fa,c663e5,1f81050e,d21fcd5a,471657fe,abe6fccf,a391f1e1,9a88c143,4644bfb5,e1f69f9e)\n,S(87ab257a,cc2296af,d921bebc,8e52fab1,c9c21f08,ae09faab,18858a06,1e408ccf,d5dd88e7,89d2f2d4,3773854f,ca980411,3dd69475,a56864d,3c869205,d682027c)\n,S(10d14c28,cf44c5d8,fbf5caf6,b307f6f,ee203968,eea1be3e,b3697515,2edf45b6,46926a1e,dd4f79ad,74fd506e,4443375,23ec76fa,e09d216d,3ef3ed4c,73b635fa)\n,S(2eb78fea,63035a3d,db64149b,612832b0,c9ab7880,539c67e9,d722e252,f7e23166,4f72ef76,d3dd59c0,a4e1be46,6ca5a3ce,fd84d207,f7d671b,240fd41b,20e72af3)\n,S(14d8ab11,402af341,dc5cbb6e,1116b858,14decf11,e6761b09,31b449b0,20b6f56d,91bf8c4d,cc717657,990e0e3b,3558a01f,ebbe534e,897d1204,8a7d978c,3a1d735d)\n,S(cebc042f,2e7bd361,934da5e6,dd2dc8a,9e73537f,5d5e3e46,3a88bcc3,ff6d5552,baa841c8,5e0a7287,b1f16c89,8ef03f22,3097e92c,44952c32,45f2fab1,dcd988c5)\n,S(4f28e546,ef539c7e,8f33191b,897b7245,8f48a01d,79f65b8e,a8f672f7,d0ab027b,b1c1db0d,55be796d,2b415259,89088a7,d86c41f8,cd8ccdff,2bda49f2,407123d5)\n,S(c4d31178,b73cf9ab,b0e1d554,a2cf93db,ed9a7b9e,8f49c9c5,4d63c815,6e111505,f5e4528,7089cd96,3118e279,bfc6661c,1e77ab67,b81a71bb,4ec14fe0,ef0c13f)\n,S(8e260505,bf045c43,f3fd972e,d4189725,a4db0774,52f94eb9,51e42eb5,6131f0f0,4afee681,c6069893,5ce21991,208457b0,11548d97,9a33a0be,cf3c840f,77c4b4d8)\n,S(982818ce,69b4c6f7,631daac,868af6a6,79fa6631,8c9da2c4,bac994ba,f9c95d81,f5b13c91,e7593e5b,69c85957,6398b186,8c503b6c,25179270,7e602f52,f30ca9c9)\n,S(75c2f2b3,53720779,8737488d,16a5ca6e,dade382b,78f2b2b3,226fd5ed,6ac6c855,95aec19f,b97734cb,8426e530,afda15e4,c3c3dedb,2aaa24f,7ca73b4b,af475960)\n,S(606ed5f1,8e4dc1e5,3b6f5ae3,896433c2,a904cb84,1ea021fb,84537f6a,9dd45ed,3165cf75,26f277f5,b9bf22e7,36291513,10158d63,b97b7c88,d49d88d2,d63dde9d)\n,S(a33e07b,c2934f5e,f02ae143,6b3ef5ae,d2d633f4,2b40e35b,d365fe2e,b8c72d51,e93cfd7d,f2e98817,9eb9c348,73530504,bc5cd8e5,d8393f0e,844073ee,df6d6511)\n,S(5ee1d077,735a4a18,533b36d1,eb484f14,98b220eb,cd41746,b0947403,d6b4644e,7d4e1233,46a6ba1d,8a862514,4d4bc5be,72e23d,f25287c7,3512817d,e632f8ef)\n,S(7485b837,2bb28a8f,d496f6a0,33b92ba5,96202661,8adef933,d6aadc56,55765b0b,a58defb8,deb4445d,80016c9f,5c04c2f6,e06986c8,cc95da94,3105d8fb,d0fe84ed)\n,S(3a321f94,2268584c,cac5d8ce,5d6011b1,22169e73,d9093b2c,e3e0bdf9,ad680d21,99fb13c0,ecb6c544,1347a4fb,842a7269,1492219,f9bb7c25,1916f837,7d4e2cc0)\n,S(c115a2e8,265c6005,10bf7108,ee30bee1,77893d5b,ab0a8cc1,754810c3,3f112585,e2f0a636,5836a24c,7a5c6997,45022e8d,e0b88afd,37737c84,d1ae437d,eaf0b3d3)\n,S(d8895b97,cd390ca2,cf8e6093,c125541,1602fd98,97074a8e,aa11bd3f,5b0f3c1e,af8c594b,bd2308e0,12a632b3,1d05a25e,23247f75,6d7a22f6,fcf48cde,28056ad)\n,S(4ad1fd48,e77fe497,b4a15e7e,869377bb,163d760e,105e46a9,a5477d69,fa944eb5,a96cce4f,e2f5f590,17af2359,1dcbda3,b640271e,95290d59,1fdcbd8d,ecf39703)\n,S(62ffcf4b,7ce6c5cb,76766893,bd0a6f2a,e33ef821,d953c001,51c4be3e,67f2cd8b,d6b1d025,152db954,968ea1bb,dd2a89db,16103f55,47cdd042,9b7380f7,c4c985f8)\n,S(e71343c3,cec5e49f,60fea970,6d256a4d,ba499e86,6f9ab33d,6045a1be,cac40a,ee1fe3df,df226027,78228bba,91afd126,a96fc10b,f5d2cad1,26091119,3a92b426)\n,S(31766ef2,f3531ead,2c7bbaa3,279e81e0,b040182,ab78065f,d193061,2792035b,87b93ca8,91151ee9,775669bd,df2e5bf7,9f728d52,efabf584,352ba4db,8cd6f6d7)\n,S(1e8764f1,982a97d8,b65a0a60,53a2fb5d,39f1221e,dd4f532,b007b2c8,c52d39f,8ed84e0a,de68b789,5ecf8c07,80ba0b26,53faeb49,3d23a453,cc23987a,b51f3a18)\n,S(e249cd91,4e35f97c,92a07f4d,6f9961bc,d7f6efe5,ccdfd44,cb3bb698,9939fe43,9ee2fb47,4abdac66,5bb0178f,d8ff3bef,6381a90d,bfab05e4,a9e5566c,cc362ffd)\n,S(b9a28764,d21db971,f7cb0c1e,87c9db64,ee6a1acc,485a02e4,5d5ffafe,ea1012b9,1b55a989,43ff4fb,25db6aa1,12d5c459,b1ee0fa3,aea913cc,54878682,f625e882)\n,S(5d042803,9f8c37b4,dc92a9ba,43bf7213,971488df,be699901,31820bda,c0b6ff03,1ffd5348,88796c6c,a631c3a1,4773f89a,ea6d5914,bcdf27c,38949147,cab8ac1d)\n,S(6d817b42,52986e2e,8ecb908e,99011265,df0cff59,61a82b2c,baf0c61e,c8b22326,55cac99a,d6a70b96,5559af1f,c5b67469,5d653662,bce7594e,22916fa,7c4b826c)\n,S(9b069431,297f0d35,91451039,df8a382c,1eba93c2,f62f4e98,90e54559,39916ae8,70bf9138,a04b9f14,2841a2e6,bdc3600f,1b22c81c,ba27f308,19a763b6,e64fef71)\n,S(dbf5e41e,d83110a0,5dce4bbb,bee05f0b,f9700ef8,273b4bbd,57099bc9,460050f6,e3e8f5e1,697b05b1,23632b89,28c3b34a,6cf1e6f,327b4252,c3009046,c8406404)\n,S(c8ef12ee,22aaefbe,9ca024bf,ba8fd744,d7c5d489,663cde66,a3ff1dee,8174ef33,db64c2c,db21415,fc552968,fbef01ed,131db2f0,1ec8372d,1b9da98f,4792e8e5)\n,S(3d086c8f,af84b66d,bb9212f1,512663b1,793d6893,23f45af,9bdd17ba,fed8d7ce,2d6a47fa,9e1b6c20,a2cf30dd,a99547a,b9ab9c13,5ef86ebc,280ac62d,2ce7847c)\n,S(e173d58,714db8bc,cfff3ab8,8cf1be0b,547e03f9,db60c97b,ba5a6735,cbf4bf4a,44b8f991,6764f393,68b36b56,9033e304,7fe90662,70758fb6,85cc3f6d,e31b2fc)\n,S(31ef8faa,90826125,66e739cf,299de928,68c6027,b882978e,f72d014c,4aa4f379,9fb9e021,fafac237,8d21caf,f1262d7f,bd9b8333,eaab0fe8,8a3499b3,d153a2e5)\n,S(5e112e52,2997b67e,146b998d,781bc528,7e2ad47c,b2c5863d,eccb0873,fa088b3b,19cf3f06,d3c1fdeb,8147e074,a42fe178,c0b14135,2dda5274,50a7d5ce,58d3d441)\n,S(9ba2cddb,c1a5153f,89e9144,e862acfe,c624095b,8cf8b7a5,b15edd6e,c7b70eae,f032469b,9527911a,92dcff6b,5847fbb8,9f4ce42e,f20b40d4,80b3a58c,72fc805b)\n,S(9ff7e46a,4e2c6e9a,d5843f4c,c5e112c6,557babe,723203de,d75be7eb,179e814,ec890ac0,2ece651a,6614bab2,1e4944a7,d248c886,bebb33c3,36c28df0,69be91ff)\n,S(2a13752a,1aea6e21,d25ea21d,b644ab0b,fb84b130,8d3f2083,be26098f,fc4978f1,18f4936e,65ab66db,11bf53e5,7eb7d114,4820fd01,ed827f96,652514fc,d8ce910f)\n,S(a0647c4f,2b4f271,97f3fbc3,bd81bc7f,f72d964c,1bcc131e,caf9bda6,57b356d7,5e023102,9a8eafe8,9466181a,80440196,e850390f,d42dfbc2,1d3fbf6d,6373a56c)\n,S(6abaff96,aeaca928,ba9a0503,dcff7a51,420feffc,33b1ad53,b1a7bd57,8c641ede,ab59c03f,7ad47f73,df424882,dc3ac2bc,dc2ae6ed,3eaae48e,b807b010,98dc0de2)\n,S(442abb18,54161ba2,47fd366e,52d40d56,65293573,c339aa2b,28dc67c6,70f4ee99,c3f44b44,d13ee3ed,4ffe5188,c5134d60,a28806b0,687b5652,99924655,342a5898)\n,S(9f54f23b,45f632c1,f05245f6,c5d1c433,9e18671f,da494eb4,3bd22be7,b1610096,25c9e532,1a5563f1,f47a1e4c,99d6def8,541601ac,8420de96,190157ed,aa17445)\n,S(50296c0c,185abbc4,1c86f578,8dad10f2,7f76074e,24e931db,53944b48,6ddee613,81a02b32,b1edd539,37ee1c78,ab630f2b,45336e16,cfc560f0,adeb464,fb71b9f8)\n,S(39c2d099,e2892b2b,1b6abb1,a198305c,ed59d94,f7022cd6,d521b510,9a8fc219,8900f6e6,3fe1a7c7,27728b92,aea4d70c,1316570f,edba940c,e626e94e,f03dddff)\n,S(3581e30b,17067e44,664201ba,d7a6ada3,e0648516,260b760f,b406dc48,11c9d0f4,c8bac129,83e49250,bc478ee5,fcfc0660,37d68f9f,fda1acc3,6861743e,d7a794b5)\n,S(72b67dfe,d341824b,9fa09057,b8362d1,38287eac,7292610,1169e41f,19dce477,be527b0e,52ce07a6,99065bbd,ebd360fb,72c6dc77,88030aa9,45fbbabe,7f038524)\n,S(805af91,4a973e36,43712cd4,4a1da4a8,3d1237e5,9c991387,17175aec,4a8667c4,f6a7beea,205810ff,5d1f0e8f,5818854a,bb730c7a,1ddf02c0,968b1b05,92ed8a15)\n,S(44794289,4b297a87,e3cdeead,5cb2dc42,9fdeeed5,b8038189,331874ac,88e67536,d67efdbe,8d7ab8e8,1e25c340,77687b94,d22d8ec,b89d7f5d,46ca212f,abcc1b5)\n,S(b73347c9,baa967a7,5e5c8ac3,14f3c6cf,275cc893,72b26bee,731693cb,48d36df4,307f8fa1,98f1ba57,7ba330d5,816cb8de,d9ec3f13,6bec0586,53c64675,753f1542)\n,S(ec6d499a,efd540e9,357f100,4a136049,d1f7df5a,d99c44c4,6e3ed416,9e40acb6,21e8082c,df4fa2a8,38327e80,aac15ee4,40549109,aaf6ea01,ccbfb95d,3f7a47c4)\n,S(7607b7ff,8bd8369a,67d22545,c40a1588,aa2e50c1,b5be6115,cbb8794e,2085f283,6c4a9aa2,1dd2ad4f,7d6c4f02,23885803,ac3b06fa,6c0772ec,bfb610b6,a1d25ea5)\n,S(dec4b7ae,42e8a25,2c414458,d4e0d7fa,4bf4d0,c9432754,13d3b770,8fb53839,bc54d902,6d035b64,35796475,67805bdf,af6cdda4,d0177206,384c4ca9,8edb5898)\n,S(a7be1017,82bf48e8,37c2e0ec,821e37b3,eab03607,36561152,a95a06a7,fbb7ae2b,dfd27057,dfaae0a9,b9523a9e,dc28a2bc,3631e84d,5fdf8c3d,e1e65055,805fe0bb)\n,S(cb398b20,29e55994,741b87cb,592e9099,926229a,aea60bd6,30eaa528,726a04a7,263e89b5,85475a8a,50723568,d3328fdf,56c8fa8a,f0f796fe,7b4d2fc5,9aafe2fc)\n,S(438a6d60,c289dab2,e8933153,5c2e09b7,a677cfcc,a605ea72,8815bdd2,615c852c,109ed19a,51e01f3b,a9dbea30,f652676b,b3a8afd3,5ab5178c,ae557793,13025f)\n,S(4db8d4d,882fe513,e5738be2,347a05e9,2c97816c,b39339b,adeef99,7b682e50,88280370,d13551a8,a9803a28,c56bac47,70feb07f,56a1a0eb,d132262a,f1ea574f)\n,S(ae2ad953,bf13c4c5,c3fd5ba3,389323fc,260de722,e36bdbae,6db77b2,1c0df210,a5866bb1,7580958,df07c171,80606be1,25b3ee73,9c3bae92,8fa35e9d,8efc7364)\n,S(85b3809a,3f772b20,dc526b9c,19de8cd4,9c2d9814,df4a9b60,1aadd016,64c66c9d,984a8061,2ce95364,b9819440,551ab1b6,4028f61d,3028b725,74dfbeb6,8c174cd8)\n,S(7e2ddaec,e443396a,7c7eede7,ad96c2b,63faaef1,66109949,e7431b06,309259e4,3aeb7f92,14fd37f2,aeec1921,e64e7a8f,e6a4c704,dfbbaf62,779d0eb3,3b1e81cd)\n,S(4565a74,6cd1d26e,962bebb4,447985ed,7b1622f3,faade84,1291d694,17c3ea84,7215d7b9,6362fcd2,320c0c29,e0b304d0,ab174103,bfd372ef,e6e4534c,64ff3708)\n,S(aa8c5a11,712aa04d,a870bad1,606c9549,bbf676d3,1ea5b260,27bd1055,ed56f996,11ec28a5,a7435436,3d302f23,24eba092,68028664,f0ebd323,cb7bc587,7d92aac5)\n,S(d9d5c0d4,b5a3305c,9f057dc9,8ecf7482,f6d825e4,69a641f2,caff9180,b7096e0d,d2b0eae9,cdf57651,bd296ad2,f4403e77,d643db66,fadd7a84,27a150f3,6d547ec)\n,S(2ab2e7ea,1e1bf61a,8bedaa4f,e8fe3a7a,db66c25,ed1b7ebc,536efc7f,8de22777,28806bd1,fc7dca1b,a0cdc177,908e0588,605f8c1e,e76cbc07,ea05b6ad,80c0e5)\n,S(2da97d42,a9d064d7,38bc7fc2,f2db39a9,588d57f9,8094903d,cdaf5054,238c1568,fff93946,e789b902,8694ff95,a68a7fb2,981ca0d5,d2b6de3a,b3112381,b8360f1a)\n,S(470fd28f,31418f2d,70367e4e,961da5cd,af8d0255,5bf6bcf5,e7db8967,6dbb174c,59a49444,2a250264,3faf843a,cd242640,e3622df9,da6bb1cc,6c956b7e,5a26078b)\n,S(e41bbdd4,6b78fad7,ee62c33,9664fbc7,e884f88e,dc184e12,715e8368,160a7ef5,40252593,7979b92c,f72bfa7d,b3f378f0,cb4de758,a6348c7b,2b1d73d,57ac9faf)\n,S(9761799a,7e155a4d,e6aefab,963b23fb,1f17d8a9,cc5f8c64,6d4dd638,2359c553,493bb00,3ab38aab,cb4d4491,b6b9e8ec,ef068c9b,933fbb32,6e0e1c75,ca44bf1c)\n,S(d59fe2e0,5fcdcc2f,dcc22cb,b9220051,2c936bc8,2205f5df,75267a5d,b45b1245,68af556f,949df3fb,d8299f05,f5e85874,57d109bb,4d395634,89d3ac77,3d4b7b2e)\n,S(f8bf168b,8a03f3c4,8e7568ab,ef613bf9,3f515f71,93a24b62,827455a6,c6bdf142,434f350e,8eeba6f6,d8f07137,a33199b8,88907744,eb547384,dcd96aad,5f9f3911)\n,S(65298ff,636b442c,8c45e748,c3cd2d1b,94770ff3,3bde1d63,21135bc0,89ed81d9,d0aca445,cf460f5f,47090202,2c84fe1d,ac0a81e0,b7458e4c,9b21dc34,8c223ceb)\n,S(d1ac0d0e,25dd02d6,fea02b6c,c98f4b17,38046416,93258208,f04a81d3,450aeaa5,be491f07,1833efce,56197dd4,d3471eba,2a23491d,f09a87f9,8a4ff14,257d1dda)\n,S(be876d37,fc1605e9,ea0923c4,e53497a3,8d51190b,dfc3dbbb,3191a483,949cae1a,8499ad31,ca5acd99,4a98caa9,2a91a321,5fd1f1f6,cd70c463,afb91673,ab6b3a72)\n,S(7c440cd,aff0d8da,6fb5e2c8,fe27a301,c2906a63,7d9b1bf2,db848f13,175de738,7dd6cf71,cb013a8e,9494cca6,b418fb,e99e9c80,3ff34d35,e586fe25,8ffc4fef)\n,S(25086ee5,f0037c83,e38abbaa,e0e3356f,c49020d6,f9006edb,235937a0,4d7074fb,35c21eff,8cb888db,d3271a5c,4dc1db52,2072e58d,974af68b,4d6cecd5,d13e582c)\n,S(b1a7584b,6f43a593,363d6e62,edade636,55ffc711,48e6c9b4,2915d0d5,ebf4dbe9,f418f23a,9dde8808,59816098,ea06d2e4,dbad3385,737b7bff,a1b339e,1b556718)\n,S(87e1c0c6,aece59e9,1118829d,ba8e0271,db30409f,c08dd790,4296b91,43fb7aae,4694c5cc,176cf309,e4bd4935,b88e2fb0,e7e1b63c,28c5bab5,d3356733,184ef152)\n,S(19f43d3f,4bf0f2b1,9a157f3,3f71c5a1,20e2135,3187b508,e568dc5d,8131a2ea,3ff130d9,835e0eab,2744cdb2,5607fa63,edcf9648,d910e25f,b885ba9f,b340860)\n,S(a7f9239c,5e8e371d,7d175c8b,120816be,2e543d89,a22c3f7c,5478ae1a,14f8f6b8,75711a87,561fc767,93510d5,47abe6f1,678d0cd7,335e7bbf,b87abbc2,cc3089e4)\n,S(9f3598e8,f80cee53,969a79a6,d3b655c0,66283a8e,f2c5d7b7,8ce89e67,5d06446d,d9cbf50d,c2aedfd4,51fcd93a,46245bc0,772e9f9d,fe5a25f6,3af027b2,ea1edf79)\n,S(cc00a72a,66dfc8a9,e7a4edd6,699764ca,c15140e7,216daa59,cadf0edf,d1e3267f,91b10836,c8ebd031,2f72cf2c,cf26c89e,1489c100,c72a04cc,71c0d08,45c27d94)\n,S(2dc7758d,b176a48f,f3117aa9,671f7b6b,f0b2128a,4bc60fc3,f907eb1f,d20ff347,afc82704,39787ab6,bec0d4f0,7b7f2896,43073cfb,65e9d3ce,db8ff7b,791f2f59)\n,S(2502f7f5,8dba7c37,bc4637ab,8c77c047,700dea3f,5b760ec7,9b68121,9cee008e,f6fea3d6,4e776f5c,cd293dd9,4109d6f0,1e55c039,c30438eb,6e626489,c92f078b)\n,S(70d39d43,d7f2092,53967479,de620ed2,bcf963de,6ceae3b1,a80fd275,1801382,fef8bea6,45807be0,e1c5c3e2,4d391d8,bf0a6b33,564749d1,4fcf4ef,a8aa7133)\n,S(a09962fe,9a934004,bc31f92f,526ff444,da7889e1,79453a55,b0fee769,34c69c2,dd717079,8cf19b8,1f55fdcf,86cd3755,f708256e,694fdaf5,f929c967,eff687b5)\n,S(355a2555,4590dcf2,84ca548f,9ec9f40b,22482773,cf122a40,25ed416b,9d29c692,549ed0bf,db861bb7,4684ebef,7d70ac56,3703997e,c59b1f86,bb4b5dfa,574a2f64)\n,S(4c145d2c,a165a5a8,b66f7fdf,c16bcd5c,c22304f2,f0ec3145,9b9fb0fc,797c9b9a,7cc14054,948caa4f,be04b54f,1b60a51d,cc482fc8,c94825f7,8de4f4a9,a63f8d5e)\n,S(b5ac199b,fa591300,6d635fc6,86d87cb2,52c5c67a,6b897a09,bee578f4,9c57f8f3,41e164ae,d3d967da,94f0cd06,91cb3ec0,79c5712c,279b3a8a,d75affda,2879b234)\n,S(ad619913,f00f620,38321c3,59931a9e,fd26941a,aa02a812,8d9f3bf4,8818185,d7b5a033,9e4b8ab2,bf66a597,45c0b496,b5825886,9084d306,660670f3,a9de912)\n,S(f8314cdf,d7659ce,e8377abe,f4c80b00,9c99c1b2,f2bee37d,a726c6d2,a1deea90,db5a45c9,a7ea22cb,dba3a784,131ee81c,2a1d9edf,d9ccb9f9,6fc93d35,a332eab7)\n,S(1fe1bfca,5df9c482,68e88661,89e238e3,7915957b,aa1e0c3e,af317d12,c2f84650,dbe03060,745396b6,fb22d6cf,a6b27329,3b3ed08b,a24ddb38,8942199a,765d7414)\n,S(c414da43,814bcc43,31269d58,1c0a8c14,9e304f5c,13614a89,7f414725,9ed39070,ca194f90,dac3f722,6090b94a,3b94db7c,5c68931c,7461619d,8b912692,4fd90a4c)\n,S(81a098c3,d1ebf427,69f621b8,3eced558,9dc0faaf,24206f97,480e40d1,25faba3,fffac91a,3b729698,b0b26f8a,e6391b1c,8f8327f4,7978b011,d7d1cebb,6b0ad8bc)\n,S(f99441dd,e4332003,b6421463,b4bf6595,172121d3,f000763b,a40cccdf,be2cf439,231fa7c3,fffcee74,bd111f18,3689062e,1b6b366b,2fe14440,2061de8e,4688b3b9)\n,S(2f930e6d,e3586768,792e565c,211e1abf,99e05fe8,79c01083,3e6e5121,7abdcc60,2d51a776,209a3da9,ca4dda22,7beea48,a93a90db,b51f0721,2864f36,a56424e7)\n,S(9f8e96d5,99fd07bb,e9e0010f,90802d25,4b30e359,bf0fdcaa,d6e782da,62c6d25e,baeaf150,de04c7ae,d8d34278,aba6eeb4,9b3f213b,fd56585d,41890632,d6b64e02)\n,S(57f186f6,fa5f4aee,e3e8b44a,d775301b,66d7fedc,4ab8c827,cb138386,64727f10,5a65c0c4,a69b16e0,1c32a95e,77c8f99d,53bc15af,5c168457,19bc8220,d7baf849)\n,S(d344361d,dd0b764c,be16f46f,5efe166c,10a88bfe,bf532a8f,a1fe138a,78e0e1ac,dc1afcbb,a84b8524,a5d985ac,5506f15f,d0b92f85,875c2c4a,4144a93e,e455792)\n,S(444163a7,58095900,e5c8fda4,88ecae95,24fe54ae,2592ae53,7e6db41e,8019344f,bae54b91,e69ddcb2,c1bf22e0,bdd721b7,a9ca51b,dad93b28,59e09509,77c26488)\n,S(5ce2e1d6,46f10fe7,e4196414,37fa2c16,48029fd5,5340d2e5,f32d467,e0c4e222,6e95f538,cadb1b56,8313429f,35fb925d,d9ba571d,bc6f3970,ff4fd276,4228e82b)\n,S(8b7226b0,8525a07a,84ee858b,58c418d3,1d4acdaf,9b081761,56b83a8b,fde6d773,684e6dc,37a2ba2d,89c0b01a,b4e1fcc2,1734eed8,2f7b1509,6724acab,5e276006)\n,S(6aa5e306,36046384,ac8e3da3,f2f00713,8acaa0b,b0d12ee2,1e69018a,4d0554a3,2144dece,31a7453d,3a07e290,cef1b694,f393e5d3,f6cb07b7,a8c991b5,2a788029)\n,S(8537990b,dd59836d,da16ccee,3871a232,3bd841f,6128f845,b0369857,66c7e0e2,beda6acb,946a6e08,43ec2890,c2d11ee2,404cadec,afb3f1c0,37cfb9fb,7b733fb)\n,S(85a8cf21,1de57c,9c0ba88d,2f9a773,61041619,639c9de3,e2f2bc71,cb9e66d6,80d1d1cc,3c757338,f5a6aecd,815cd5aa,1d772aeb,5c1efa05,d5b64886,97ff6de7)\n,S(d4f18d05,cb183c54,7594ea93,9330c174,37870e7d,48a613ab,4a920e38,18068267,32fc3b50,394bfc8f,a2a3f912,b35ebb69,d388c87b,198c3619,b04b6b3c,36b6190a)\n,S(123e8bc5,65ceba86,d4c1726d,5e7e2a32,ac6f628e,940aa97f,c96ff72c,ec79e637,e54b4332,975774e0,748fb58f,3ddc5a14,8c3eb1cd,824bab83,edc76c28,e991d2c5)\n,S(ac26cf03,c5a95e3,9a975746,a26bde6,8eddd6b1,6c83a3c5,81fa0a79,e93d0cdb,73ebeeed,b96d879b,882ae503,2f400142,5c8ed97f,98daa225,346a5b7e,9abc4832)\n,S(54f2cc5a,a4d81daf,6600e921,441f5aa1,5bb51a42,7479e123,b9561d0c,8c71299e,3ff4e7f0,83f85039,d238a740,b7fd16a1,e313cbb5,b0c6fe5d,ad99f221,da4aa27e)\n,S(8bd785,b73cca1c,6c405ca9,1ed4833b,428b7ddc,1a61c8d9,b0d1dea8,ef133586,fc5b65e2,5c3fde0f,3239ab96,625a9751,27a30cbe,f98e1ee,735c1f71,c86cf292)\n,S(bd4218be,af5f92dd,f96a54fa,fe873cf2,171c2e30,a13c866e,e830bb2f,abb17d5c,86097c6f,91024f4f,8900853b,d17dbede,e2674e36,9f3fc69f,a2578eab,174e783f)\n,S(a4006630,1b63e757,fce2f5d2,a7444e5a,1f2d7509,b7f59476,6951f38c,1755b497,87aef8b3,eb160df9,4b46a56a,337b6400,c724658c,a49c1162,c418e900,29efde08)\n,S(5c5af5f5,65b2870d,6fd08f95,b4146379,15cda056,e18ef682,4cbbbcf8,adca740a,c7c6de6c,e679f0dc,84e28027,86ea726b,8eb0ad04,af4b9a5e,de516f11,583607cc)\n,S(b5c3629,b86e9235,478aa7e2,d2e5b539,b70765b7,79ace9ec,ae76a659,80f0ebd3,86a8a06,84fef80,7a081bf0,3f08c078,7ad04420,76f5e1d4,521cffec,8b2dc96d)\n,S(1784e06a,cd25fa66,72d1fc08,9219cdb4,54f5c711,4237bfe4,a2143eb3,20a0bedc,11feb0a7,d8d43ebd,5bfde5fd,21fcaa5e,7f091da6,3acf4b91,956172b3,5d3af378)\n,S(39266c28,48f58af4,47e5ce4f,61cb3ba6,9c3bfdad,7e5742fb,ba4ca3f4,f175a291,7be4b872,9d1e2fa8,fee16e5,bfcdf4ef,2cff2872,e9c7fea2,c1997d6c,5d7f1efe)\n,S(d6fbeb8c,72214cee,58b33bbf,2eb04924,f96e9b63,d104aa92,fbb09c8f,c2e4b1a7,cd9bbb10,a800d777,9d4cda4,561a2b8,759b4dde,45dfa2c,319e4e59,39938c8)\n,S(42ee0a83,85464cbf,cd4a9ac2,73001bb8,592f2a74,b28ab7c,2eb7055e,2a471b76,d22c6ec9,d5499b4f,26947233,a5589aeb,14c94376,9a6166c2,af9d323b,e1adea4f)\n,S(8cd2a043,4de9b238,f4dbc3b7,e56ffbea,4f025e2d,6c73a68a,4aa62bb4,9e9057f2,abfe69a9,986ae1db,52a807c7,c08a1116,a2dc7aa2,ec3b649d,7326bafa,ca74d21e)\n,S(14c35089,62dcb50,d01750a9,441eda38,1a95abe3,72c501bf,a99f953a,5c94da3b,bc57dbf6,bba79503,f33be20f,96a54fda,fcd7be9,cb064410,3db11e3e,2034a3ae)\n,S(2cddb646,76717e44,86fbe0a7,f7d6d853,7c3fff9,465e31e6,8da22abd,b3eedee6,136346f0,cf5fd102,932036c,3605179d,1429a706,71d95524,a14869a3,d1cae8f4)\n,S(d806ee3,b5702d23,50c3f179,a00c3701,9c055103,318594c5,8f10b100,1b705aeb,79201749,21e69cac,a0ad5902,42e39a04,c3af8cc4,c665587c,cc0c89b8,3744b9b2)\n,S(534f24,715e9b8f,f5f76a4f,a617839f,6fe2f175,3cbc3d80,331d12e,98f6ec30,e26ebaf6,4affe9d7,1ba2cd55,421c33ef,2e4a3fb1,c59a72b5,93ececec,65a40e1c)\n,S(f33af0ef,4e23c8ae,7f3de5c5,22e8bd9a,6e527c8a,23242c8,4ae6677e,ec90b8f5,8510bee6,bacb5633,45f38075,8d85dd0f,493d179c,b9250d25,fe88134a,6055aefe)\n,S(3cad4725,12a745f6,7e36fb92,1a2926d6,ae294278,8004386b,272d8520,f5a9aa61,d12ccf97,27da84fd,317116e4,9d45d741,776c8278,4b2c9f1a,e3773e1f,57b8934a)\n,S(4b7fcc39,5f50944d,5cf3b3f6,2b1bbc3e,3aca20e6,d259e931,d3398d08,cb6fcdf1,99acfb05,a106a389,b7ad644c,cd275396,d76b046e,9992e573,dcead5c6,c7da96ff)\n,S(9b5c0e8b,22a62110,bca2770b,778f0a2d,6d67e908,c57f806d,7470f5c6,abbb27f6,da52c77f,ea3056fa,dae674e6,daff8b21,100d007d,8bdefb12,fd56efe8,13c15a02)\n,S(ee7b7f5c,e79eac13,d9b500ed,ee0b65d8,e7c93203,aaad71a6,9a935e31,20722361,e77ccd78,bf6380e0,5e5e8de2,20448a00,cabe7d6c,6b7ac318,56c09e2a,9a390778)\n,S(b4774237,d36a59f0,e39a133,756bebf7,4df43365,2a4505c8,b0b84833,dd5b3a1d,5a5a03a9,e3463ce2,fa8bbfc9,afde9c25,763f4874,3cf0b2ca,7dc42c3f,9bf3accb)\n,S(5827142,c69944cb,a066a985,79acdc02,83e1df82,8935ba82,5aa55047,5a52271e,c05c5805,6bcb6cce,ed5e8c8a,beac78b9,69c3b482,7ef5b402,c94fe1fa,f7fc81a7)\n,S(ba06eb6c,a54fe697,9be9e9c0,f8c77be5,ada7bd7f,43894d1d,1705cc18,9c9b0ed,176be0,b5d3db28,7f235e2f,a9531fba,65f5ff8d,55b784dc,bf7271bf,864e3d5)\n,S(ed84c2b6,11c1208f,2f059d37,a3d2ddc9,c3a0196c,9b9dee3a,5f2cbb0d,9383625b,6dff970e,b08bb4c5,4dd6ad6e,df25bbb4,621a5ea9,3869de76,2524dd2c,af1c6f6b)\n,S(158b136,86fbdcb6,ad8ea001,9005405,b5cfc0d8,f614592b,d9e76b1d,8cdd568a,8c576136,634af4e7,9034b450,1bae33e0,9b5712f8,642cbeb,2b7c8910,cb28fab2)\n,S(687d52da,10df8013,7232821a,990adf74,c54711de,110027f0,68464c9d,162c2410,dad3819f,8071b3cd,dd84fde,550d24e6,31785e1c,e137e115,8b5cc687,8cd09f10)\n,S(32e8617d,de77c33c,a1d317db,d350298,50dc7fb7,148913cf,413e04b,384dc81c,9cb2fdd5,15231e83,21a3feef,804d62e9,2b8b9c0f,dfb73dd9,c3323017,b29f2ff7)\n,S(a53a659f,7cc90421,21d96a90,3801753c,ea43b363,405af6,16d50b4e,fff054df,96734742,ecb3c201,742f8f64,df22569c,92212928,ca0d5453,d706f905,33c345cf)\n,S(8a9e4990,b9b1a2b1,32ca9507,16170713,bcbf5719,2dca9d71,7fc9c4fd,a3993fe5,9542de81,f66098dc,c0bb0f89,44ea56bb,bb7e86f,9c63222c,80620c7d,2fac20d)\n,S(5966c5b0,f92c5906,b9bda0a,7b3f10f8,e4c29796,f953db1d,35976175,dcb431d4,539665b9,90bc3810,4b7938f3,47ac94dd,7b9228cf,7270284,a825a202,ac62d135)\n,S(2170d9c7,4ca5e85,305d159e,697fd1d,d32d6f6c,a2806992,f082ce00,9139c34f,b5cbf529,66f71e55,8015c90b,ea2b95fb,4a0fed8d,ef1f9af4,518789e7,39076c64)\n,S(86e9b03c,2497519d,615f83f9,d0f9bf9b,101b75cc,50059e19,4d7b58a2,9b6fdf76,215d042d,7976ea35,a3dd586c,f5b286ba,a30e013,966fbb45,99845111,db8b56ed)\n,S(2cc7d91,ba630172,ae56cf60,9a5d3c05,e27c2e68,7d607c85,ffcbf6c9,a467028a,9404f869,32385290,dff3f8fa,1a085661,5855aa6d,e9742d8f,9e2777f9,472ab5c5)\n,S(84a89b0b,304ed760,c3a3d972,5a65764a,11d59ebc,25249f69,1d3b8711,10d3cc73,b7200408,fb1ab866,53b61321,10b6bc53,c8a0805e,568f8a0a,80a65678,c54c5829)\n,S(4e9c88e,d10be9ea,a34bae15,8ba3093b,42ad9cb7,356f34dd,33eada3b,1937b4a7,b92050dc,95423a8c,759222ea,c09593c1,342c2dde,5fe382d5,6838df0a,877dbd9b)\n,S(fe2883e6,6db454d5,31f2aaec,96f4f3f2,868ef393,d09c7685,a65d476,c6c97a99,1ac28015,1bc7c0a1,cc4be80,c6eff3a2,b8ae70b1,180c6a15,7c89dd3e,3e78568d)\n,S(c74df902,ba66c205,e49f25c5,62d1eb18,f4f4f697,3cf49135,16000924,80f3f68f,17f7bbc9,59dd7e6d,9043ad38,7c0097b,403c8d1f,e676b8db,d7f2c63,1fa1ecd9)\n,S(e7e7a72a,41f95b51,2ea42d1c,76da24bf,67059e,c27d5313,55c30e60,69a72c16,a20c2f51,6e9ba9b1,fd3a8473,8309ace7,da6006bf,bc42d4ed,657da6eb,6efedb8c)\n,S(5a93859e,dc4ee632,9d36536e,1bf1008b,603d6a8,859ac6c3,a098748b,d6e18bce,489326a0,1e05c331,d97db6cb,68f098c4,6712d7d2,994e6c8d,be892138,e2106220)\n,S(6161b293,71353343,a46d0917,4f6467ea,25a0f77f,fe614133,7fd3bf77,71062de8,57c439d9,a1682d4f,773c8260,6ee65e88,473544ae,64194ab2,3fafc2dd,7612b385)\n,S(c35b16b5,a3808dd9,553c7644,400d6fe8,ca48c8ae,49c78018,4a71eff6,b94ce4ee,6c3baede,4925766f,3a7c59e6,d6c1c966,c3348b1f,5883498e,9956f3e6,6d8fe13f)\n,S(fbdae49,32baf904,1d295378,2d227dce,4e2af60a,86796a69,86b777ce,bd2cd134,9ed9b5fb,df42e755,a9cd761a,cbb92877,6c66d299,35dc526c,f6950ba3,d63d0c95)\n,S(6c5bdede,17ce2007,a3a1c18f,af8a846a,ce67b751,3d8bd602,23610ae4,b01b720b,6492873c,26a22bc6,39d4614a,202cbb2f,2a08b78a,753592f4,10c855d8,12f8d39b)\n,S(eba4e62a,bf52b379,9305bfc0,eecc63c0,5221a0b8,b554432c,15e460d4,21dddeb1,e378e6c8,d6ddc7a6,72d83c3c,9d863c53,32b1cdc8,21ed458c,b817c49b,6dbdc519)\n,S(5a79ee4a,1aab7803,23ced132,f9c67d5a,c740900e,cf71a0b0,ddb1d6c9,794cd90e,9f608713,47b3a231,548909fc,812624ef,26eb26fa,98630512,2b1466f2,665176cd)\n,S(78b702ed,6d816c15,eb31dc27,619d5bf0,6ad646b2,e39750f0,73c31d03,e50d9385,9f1cc224,91befaa4,fbe9721f,86bebcb0,11024a08,4380e46d,bf11ce99,f157fd24)\n,S(494e82e4,1c24936e,c291f69e,791979ae,3e2a6696,c8f68601,b57942a8,fe6b98eb,59f3af2f,c720847c,19fceea6,e3d2a918,ff7f564b,2e3bd7a4,beda6415,65bf5da2)\n,S(28b3ff40,467a8c68,69fdc61c,33f002f9,73705468,4fc707ab,c0b495e9,a5c0b401,46a44995,b2c8f0ca,a32d8e33,b8e38465,4cfbaf1d,addc4d1b,852b2a04,58f84e34)\n,S(4e4cf4f4,38a40e8a,aea162d9,dac13531,f5730d96,59c436fe,d8acd06a,c4c46be,4fb4bf3f,bc394c7b,57f81a59,2ea14c30,1e9ca990,5f48ee7a,5db08ea5,eb6dfd7f)\n,S(e2ace7b1,3a9e3e22,a9b8ee66,c56e80f1,9370cda9,eb3ffb6,2d20805c,7f4c34be,1c8fcde1,2a653492,6428319a,981e1602,44aa823e,a82831b4,d0eafd9a,2159318e)\n,S(e090ff27,e42469c9,91dab9a8,dc9a3a41,d46b7482,a59ba9b,cf4de93b,c95c7e78,d070752,c5679b45,4e1b617e,8315a48,1cd9d24e,eb53a671,3b4160ac,64e6f824)\n,S(705c8790,7b976b8d,c8ccd3aa,897b2ed9,ea091c37,e285c37b,aa321c89,15ce089e,edccb405,5ae9f933,973950f7,eb79657f,e94fe286,27f6cb2e,784d667c,21ad4d3c)\n,S(4aefb3df,663a28f0,d531e390,339a56a0,4da1c64d,4692c086,de232740,6d386d57,167af97b,43a36a18,1dfde22e,633547e0,eaac2f16,84e8753e,1ba1741c,2a18fe3f)\n,S(ea909685,ee8c283d,1d7dfc4d,6ec8910b,b8d821d3,3997f24c,db5f5ee3,bb7bd72b,685b64,d3e02ee2,be2045ba,c3bb428,636258db,33177da3,17f6de0c,f8c805f8)\n,S(5987cd59,ecccc129,b3498331,f20cbfef,f377cacb,dea76ce,2e221aac,d3aace8c,3427cdb4,f7367d60,44ba21b8,adfd5863,bae2981b,340c9bff,d0d7e93b,ee4d6140)\n,S(e23845ea,e6ed3d33,14fd6f6e,f6d6e9f5,92f921c9,f448eb93,edb49869,97837eb2,89eb22d6,455cc139,e42c6263,b65233c5,4b1a3b45,34ec3d7e,58b788f2,6b11b131)\n,S(cac7dbd9,7dcd353f,fbf60696,d325bf14,2e3920ce,26570b59,ff9aa65a,a6993199,6e81a4e,cd60a26c,90f890fd,6de2d159,50bb70e8,92eed375,25a48f3,31307620)\n,S(9dab063,3a5952fe,f168d6c0,3ebb226d,de3e591b,4ad0c9dc,96b247ae,49a317de,846d87d2,7662b958,b3422b3c,a3410ffd,1ae549d0,c6757bf4,f96d2d77,168cc83c)\n,S(bce277d9,ed439b09,f255cee8,af5363a1,12ec2d5e,b111196d,be30fb21,43f501e4,63f472d5,2649843c,42e8f900,5adfa50,d6a938ef,8f4f04d8,897a68d8,8c213328)\n,S(df9f8700,2a6baec7,8b79cded,bb501dfd,54f376f4,5756501e,f03a6c7e,ac5f1d7a,2a1c5c92,789fa6e2,84105f4c,74b0a108,27ea2f05,5560bec0,5d0000be,b9b6c4d5)\n,S(6211dcc9,307c40ac,3c7be1c7,5553511c,15d3224e,3b305c5a,39653d83,f134dbb8,545c00d9,f02b8833,5fe4851a,88cbde99,f7f02d05,ac674f5a,6559ac9b,d03febb1)\n,S(d739aa30,8d9022fc,45735eed,3ff92f38,545f6c9b,b70994fc,b5f41f78,772c9378,d3c3fbb,9077dd53,d023838a,5c35b728,af4a90c0,1f16739d,12870e1b,15e1e6ac)\n,S(9d85e55e,8ed84471,b6822c68,3268c35b,fa314b72,470e51c1,a7ac9f25,f8bceb6,8b01f444,e84436ee,ae159a32,7026d279,5c4116b3,b2e78f90,99f1035,1511ac88)\n,S(25d39bff,22c40a94,b194c38f,be9d001d,4a632407,237fb091,163e463d,7c5c70f,33381905,11368982,445ad7f6,608be022,209466c7,98b9abe4,f4fca781,2c0c398e)\n,S(67553ed3,f14c28d5,2abc36c9,3f15d0c4,7f6fe1dd,628b652f,36b29225,ef8ff51c,da5d42d5,9d41893d,10ed28d,569c0cbe,1cc077e3,36bb5c21,e3712bbb,9c480383)\n,S(ea3e80f8,c800b52c,a6dcbd2d,399ec5db,65057477,8852a73d,68af22d6,f1abbefb,5cd8f55d,b5330919,377b48d0,8ac1bce0,dfb8c3ea,2b97a5bf,547b7beb,ea64a4d7)\n,S(7cf11aaf,638b1fe7,3b8c5753,48bcc01a,41c61ee8,f2eb3279,c2ad21b7,f6f60780,579d9a90,3a8a77a5,6bef3ce0,53ffb3c3,cf969f9a,39ea5bad,b1fa075b,e918f048)\n,S(ed377aa8,42897f6d,1092caa7,42c29285,2349bd7c,a0e0cbce,d3cda58e,ffaf5e17,44d1e8bb,6491dfea,cde53662,5e5d7b52,1ca11a47,1eeda260,647f6f0,f0c5f917)\n,S(fcafcd82,dfc87415,6e0db5ab,2fa2b56f,dd488032,d22ddc1a,b7a0ec8,1f1c4083,42f88e6a,cf851a7e,ca3fc28d,f771cce2,bef0d7ce,3d26da45,a2d9c307,e9e7e040)\n,S(4d372865,7fde43e1,68744112,26b34713,9c1ca4ac,c2905858,de50def8,5515339c,5dc438eb,7091eecd,a4868c48,a7933b71,7ba99d8d,5e8a946d,ca9605a4,7421df39)\n,S(aea6fc55,47faaa10,a898f21a,f63249ac,a0625f78,ea819629,8bca035d,7639e470,4d20c80f,173980d2,8e6bf433,bd1dacc3,1882e283,35fa9993,ef808464,a5568d42)\n,S(f0ce04bd,bfa81a58,e157a49a,11695baf,7233470e,baa7ae76,3a07f0b7,f71cfce,f9e4d701,baa6f197,d9912b57,d9df016a,b789e60e,d731afeb,f2e5f920,b4eef9f6)\n,S(cc476e63,130a950b,b8284c8f,fe74a059,8d9d44d4,c0372a9d,bbabca17,517523f6,d2cd50d2,e2cae10c,df744ff6,61a6c96b,64e17368,5f81027a,c937a292,3ad7476e)\n,S(90e0477e,8dacfda2,7a563448,65947a05,d0afe9ea,60634473,143508fc,6abfc73a,d117be49,166bb010,afb0b82,a46a4204,c18ffa42,e3c89764,3eaae0f3,303dcd9b)\n,S(522a6781,951f6ec7,76b6cf9f,cd20287d,6977764c,517d4ebc,7209d55,5714b5d4,a109c149,6318d481,4cb22199,3567e5f4,5147b64f,c1f9216b,922d653,7637031)\n,S(b0a4c701,725326e5,611ea140,325b0536,b22406bc,c1e7eef2,1f874ff4,e02ec2a5,df44faa2,8a60eb90,3974649d,54cf340e,293fbd09,66b7b7d8,884e4c8d,dc1ec875)\n,S(9e874924,90f8d4ca,2ada28a3,2bccfdaa,51ead138,3421d7d3,482af7f6,6df47c51,a58a577d,d03a719d,1bbb64,6ec3051b,44535da0,5e7e04d9,fca42716,2e335fd7)\n,S(650a307,7b8007ed,f0441dfb,b7103d3c,d5146ecb,b949f9d9,c8c99e2f,25df7324,aa05b394,8c909957,ed1bd7e2,720286d7,56c7e413,8aa202be,b08bc446,2fdf86e8)\n,S(f891ea99,2a3ef255,6feafa4d,7dd3f7eb,1f1401c2,b75d65d2,6ab81372,bab6f932,f7002bf5,821837f5,8df109f7,2ba5eea5,6c767a4e,198a7594,21467d64,df5e0bd3)\n,S(d35e82bd,44fe54b,5d2c0543,91260c04,a5ce8d47,32e83ccc,2f3035e5,56bf2626,b002495,99705173,e0a45f97,196b9e41,1a7f5d1e,33f1b39,100b511c,e51f6953)\n,S(7dd56d5,1f139070,a382af7a,2db135bf,854c8e98,2a325b41,ed869de4,349323bc,a23a473a,7f263bf4,944ab5bc,2d82e20e,8e9256fd,b11dbc17,bc0e6bfa,a8325f5e)\n,S(afed2eb3,c5a95b4a,e88ee73d,b57594c4,7013cf13,a48431b0,f7930d5c,27f5c3f2,26b49096,da666097,3403eabe,342ab065,78c8ec6f,bc3ac7d7,2b3c95dd,54735dbd)\n,S(13826776,74f36fe9,ca81cea,ac65c2b5,51e9fad3,af246f,4cdc65cb,cec534c5,a78e8139,760a94e8,3b3f5ff2,a65fbc7b,6b2b55fc,978b8399,df2d7947,18b496f1)\n,S(99200c12,6fed5ec,1fc849f7,e9769a7b,aae3178,bd6b59ef,2563ed6c,5342b80f,7a7f1713,38a84536,e73f358f,91eb80b1,6ce8ef27,ea55795d,16aa7f05,577fc13f)\n,S(159febb0,27e04f1c,321b852a,3cca550,28aac30a,8bc27caa,73a069e4,df7029cb,6bc7e080,8834b880,c590d249,241b709,e7280a05,7cbc1897,9b8cc9b3,cc21a821)\n,S(2add9be1,a3acdd9f,efebdc0d,a4272ca9,311567e4,61db8eb7,3519c1c,6473bbc4,357ae640,a88c55e0,d3559faf,b0775d78,2373537c,c25e595f,f21ed1ff,b36b5925)\n,S(8e2d4265,1742837b,b077fcd1,488e73e,5dccd6ba,6401c6c1,8d36fe9c,c428b664,ee9a5b1e,a04ab8d9,6430ef39,7756f62f,a1dcf35f,fff314a1,c3eb1dc8,d9a1e5e7)\n,S(79dd7d76,5b4d7db0,537a69d9,b94210e3,8e7a11f8,cb9cdd8c,6aed6a15,748a3ac9,868c4b6,26dc49fd,de693201,3b89cf13,e1dfa1eb,56fb4de8,9e5467dd,86e449d9)\n,S(552c2ba9,96a13b57,32c3b2fe,d4e9579d,365e03d9,2bcb231d,f14d1d1c,288a963,118e11e8,646a0335,6834379c,bc93c1d1,3ad80145,dee0a51c,49b10e17,f6952f79)\n,S(fcfde18,a53b5a68,9d33bbf7,79d0b699,2faee8ec,243e72c0,7ca09185,d997e581,6709b56f,43013d47,23f15969,ee01b0b9,ff0d9d95,5e2b98eb,7e78e1ad,49cf3d80)\n,S(e9e9d7a7,4ad279c5,691367dc,9c4b7bda,b27451b6,a8e4ed47,afae1883,96d8d82c,292bca82,e6d1c88e,8869f33a,7a6df2ec,ad812dca,4c46eab4,5c56c3b9,15f79497)\n,S(514054e1,3e7ceee9,3a19dce9,96256b5b,5876a55c,6cab3c48,74b15547,4a58f285,f9ea80de,80403f34,2866dc40,cb0a9aa,4b38b98c,c4c38e3b,37f4da03,fdf7f5e7)\n,S(ac0364,eeb9e7b9,b9589051,635de6c9,447b327e,8c820272,f04a4750,6cc5f290,ccde3ebf,13b5a291,a73b0c8b,9a69414,4b217661,7b0a7735,3a6e92eb,4af21b7e)\n,S(cf558594,4a73a11a,ef500dc9,60cde799,ffb4983d,ae76826a,a027fd77,811058ba,369ed987,eac1683c,4e8874c6,40049a33,867fa0a,520e5204,df328d89,f197bfaf)\n,S(ee216b85,62eaf12c,9189055e,32cc55c8,2ba5e3e0,237de083,a6e77878,63c56291,2a8bad1d,a697832c,856f6adb,e1cc5058,77e543c3,429b090a,1d3cf0,d2df6248)\n,S(89903a70,55dfcb5d,175acd28,f7161862,c9fe22dc,ab752d88,3f52801f,92ab1892,e89c4f9b,7954c2b8,cd3b4868,ae171331,871a2693,9355d88b,8d37d4f6,b90c143f)\n,S(f9830f50,66b1b44a,89231a81,1192a284,9ac94ec4,13f5223d,51d1e75c,a7727884,18ac8170,58795d51,cb9a5c2c,c249bcfb,ff3fe3b9,1506b721,763c8fcd,7e2ae44c)\n,S(326be8c8,55c9f742,19228eae,f7d79c48,b02c2e04,3bc28e9f,275d6754,31afa8e0,293647f8,76b00450,b223e715,5faefac5,990322bd,eef964c7,185acec7,7c105d06)\n,S(6117b67e,bbd6b120,906da047,88ad7dde,3549bc5f,c4f80e04,9b216b00,d441dc9,7ebe5576,17dabcd9,f41aa34e,1443e12e,715c9a7,ccfa04f7,ec6a9a25,74c1e540)\n,S(1fa858e8,aed841c0,902db240,aa0e4c80,f26927dd,94e0e404,7e8ecc25,216dafce,26566614,2111086b,caff0e12,e4b38940,ecf05a5b,58f3e705,d7011b49,413a52fc)\n,S(dd77d202,96a15eda,eef79ced,9b59e77c,1483b936,6e9949ef,ba3298a0,efac4886,b1914a11,80cb154a,f791a934,8c89bb0,70f2ac9b,acc50c5,f75b425a,df6bf125)\n,S(e5fdfb45,1e7ac947,ece4e8c0,5b87b9a9,2d49aae3,5ef95f5d,1d18bcad,18053337,841d054a,47b4998d,d3ad8dd3,d2a1ee68,406a195b,1975bd1a,d4194417,fdc4cad5)\n,S(decd87d4,6fb74380,56a83258,bee67d9b,1a49e170,bb1b549a,a5c2a2bd,cbc050ef,5ccd1cd3,614fad6f,601a4ad6,e964ee69,a1e06e8a,2e29edbc,7d19562,a4aebc5a)\n,S(1a94991b,939bf699,468c465b,5aa4b064,520222,c0ccfcff,193a8484,6f6e4b8e,31b1e6f5,30147e1d,ec0199ae,1830a36c,bcf4fce1,e1258441,3e89eed6,889b9d1)\n,S(f32874f,d0f18d03,7f0ae5f2,ddba8f16,fe7ca4f0,d694e803,b9216c59,91bb456a,1dd8f5ed,f228a9d,53cf881e,a4e3c479,6017be43,e613ac30,690435b7,84a4056)\n,S(1c5991ef,154b79dc,df2ceafb,3f7fd7b0,7ce7563a,9312ee6f,1dbe5960,f91ba569,497d2a93,28ddb18,221b0075,3432f510,bbf042a5,ebc44cf9,3090d064,4a252a7b)\n,S(3c88095e,dce54996,3bf6e312,4dfc14ff,4ed4ecc9,d6240af1,6ecd5984,5f01de9a,499a17ee,e13c81b9,bb7b297,5e7ed1a1,231d9094,348d22fb,9254c520,a65be01c)\n,S(c849c359,1c4fdb68,55971840,c0b78bd3,59d1de02,130adf7,e277cb4e,f6eb7748,6add7151,b2640b78,b8fcfdc,fee4310a,4c4c97c8,bb0cdc2e,3bbdf802,750a7920)\n,S(f53017aa,a5f79e34,5a0cc318,f40115f2,52ba5401,614b9eb8,ac9245cb,3ca5680d,2d8b8c24,ad89361b,6d77bc72,fb0c7da8,ff129a5f,2bc00e26,e635483e,c4c44b1f)\n,S(b3657e9f,84975313,640b7302,a288ef4d,2dbf36ca,651c0189,b39fc10c,87d7c4b0,d821329c,a2f18f94,7a71f5f7,51ac1b2c,e56aa432,992e7a3d,ef84e631,db61fa14)\n,S(79942dcf,a834e013,77bb3eec,b7fa31a7,b4eabe7a,578c46d9,3a0dd17c,b3455f61,4c08fe53,c3afcbd1,7fa0a809,bd4ff7af,88713a3e,d7713f82,18c4d4d5,2a757ac4)\n,S(e5f14474,619e3acf,905da5c2,3d1bc311,7f1d58ff,8c63ed2e,fe939a22,5fd9d9a8,d4d225b5,85b6b319,431939a6,8e2dafbf,8ed90a6e,5fb559c0,70779d67,7c03028c)\n,S(bc5ca503,3ca4398d,5f3c6240,946c5d7,c9102996,e302b9bb,640aaeed,8c9b54d2,ac15cc8,51e59843,fbb2956f,55d39f24,200922bb,6cbf1e86,68ed3ecd,6fae2627)\n,S(2f3abe56,d63a2afd,35e35d4f,9e964c61,a5483402,5fea8cfa,66ba9aed,f75947b2,7adeb38c,e14ebe73,8dceae8c,77903b24,3066aed9,bc4886c1,356449a8,27496d5b)\n,S(704bf0b5,f564ccef,4d6e5f8b,eb2e90c2,4b46d581,93cc0a41,5bfee2fe,95021b75,44618d17,c54684e,ea1ffe1,53892090,b74201d8,ab3f9312,e7359ed6,5ca94c27)\n,S(a898e473,d4b59956,2a905ede,afc78bcc,9f374c6a,f524fc37,86a91375,83d749dd,5452e556,7d72dab5,e085ab72,1168b5e9,c96a0fce,f9d5862b,9c5a0daf,3769395b)\n,S(fc4f83da,817b1648,a8a1be3f,dbd0f309,db712225,2988ac8f,64774c29,e8d9d573,57876e31,6a0ea473,3e34f34c,b0df75b1,1194017b,258cc944,7ccded35,19edd00b)\n,S(63e97e30,82c36634,d151f0a8,837956d6,16d5d4,64c66373,253bb94,ed5c8236,af68f06a,e045e5be,88242af4,2e314ecc,d719f76e,33092e6d,8b69f791,446c2acf)\n,S(4c06073,5107e9fe,f27dfbfd,5df447c,16f1c911,8ec5cfc,8083a588,9dd82b23,8c8508d4,b86e9eac,2058a912,f2581ae7,fe81647e,e27075d4,fd01b051,fe0ab636)\n,S(667f609,7b6af1f,cff58520,83175f85,ea01a1d3,c508b12d,a2e19281,c8d8e443,ff9fd0d7,4a0cb42f,3d7ff6d1,67e5a65f,23c34679,caf3f94,ed5d1073,af31607c)\n,S(e01e169e,7fbb4365,58e07dce,8f8dead,e2ec2e27,7d18db95,ef8e9f85,ce800fd7,f49f594b,9d60c59d,155ea702,a1b5e3a7,b26aeec6,71b275e7,10d0139a,21041960)\n,S(ed10fbe2,565f80a7,65fc90ef,224c7893,cf9df84d,aa0a3b2,9089f7f1,c014ca50,ffc44137,c3ac6fc6,fddc65d1,87d6b456,819ab1b2,df461ecf,899c70fc,59387031)\n,S(4563833d,d0052218,5a43bfaf,7e55c2d2,62a12feb,b76254bb,e8310687,e917cc36,fac05d5c,c781d49e,9bab4cbe,384b511d,1c8c1fe4,f68cdc2c,8c576be0,1c669e63)\n,S(bf5907b0,1d05136c,b0a1b514,73682fa1,68772a1b,9f5db994,3bdacb3a,1e8c47db,fc69b036,4559f5d3,f9e0c1a3,e4da38ac,b9968e9,17311288,69da2158,2e334cbd)\n,S(be106d73,d01ce0fc,5555d4f2,379c906,1ea6ca18,ef8ef8fa,754ecf64,cfc27fd5,9c84f04,947687e,f7d641ba,ff89a11b,da9e9769,8f8ceefe,54e2a4ca,267956e)\n,S(5bceda4,2e94ac3e,68f6a3e4,e4509872,4724e9fa,59ee0918,859884e2,2c98f15f,4b19d70b,e1471e3c,7907f797,7311f5e2,ba78c6f5,6f2ccaf1,cb6b684f,7d048934)\n,S(e0831b14,fcb2d4f7,3d17b6c7,f6d16803,304cbb32,2bffcd6c,84bdb891,9d7cc9d7,b474a715,5520cd3f,65b64d08,b8e92ca2,4b2238b3,11d91db2,48720a6b,65444038)\n,S(df818b88,2300aaf8,41cb3962,2f0c9166,468c1ad1,3aa284f5,89dc354f,bb1fe97f,40f571f9,f63fb358,231c204b,3b9707f0,c5cf11c6,d7ffb93c,991cf7f8,dcfb3895)\n,S(d9fdd569,bfc89237,4bc56a1e,e56bab5a,cb5e0ce9,85939b85,c929fde5,82a07bcb,5c56b150,4cf3767e,e22e4b00,fa467b75,4c9ccec4,c1364216,d34ee210,aa5b56ce)\n,S(11a93998,d031bc3e,d55e74c9,ab327945,cbace727,647bfcd7,5ed04a2e,4836ba,4aa311b0,6fc8fc86,b67e8eb2,1e75d997,189fa22b,a33e7e99,b07d610b,1c94655)\n,S(7c4fc747,7319464e,2d71f787,80aeb385,aebb0420,d8f8588,9652d5de,aaad580d,31d6d7fc,2cae58f7,b3e4804e,f615d7e1,edf9d06c,d1035b30,ee9b55b,21b06eae)\n,S(83704a5f,4ef8ca9e,a3d5b163,2bb3df98,acd774d6,4e07b219,b9a36a9,ce88e1b7,52976995,faeb6179,bde4c123,1437dc73,b53b6f90,f0cce08,1e3e1644,e1ebeb18)\n,S(5de15f19,21258b5c,f12f240d,147bd38e,fd5e3c3d,dbf148c5,9e541c01,ca7d724c,c0e18562,1500f0,e3fbbdef,45550e16,5fc2a2a,adc72558,e49f1e3b,f5f4fb00)\n,S(f5d1fb46,e3288419,1f2cc8e8,2ba81ba7,5bf1d7b5,97ff82ae,8731d27b,7f059938,3d5118fc,9acc8394,9e0bcba5,c7c79fec,2f0cad64,7910976b,e4e8f9ff,43d8baa0)\n,S(8ebe619a,985f720b,9381a99c,db63d089,6a787dc9,7d007354,fa83b931,223f8596,7968b6fd,e3dcc13c,512aae25,d9a8127f,313e2d9c,34489606,864732b4,c3b5ca1f)\n,S(5b14482d,f96cb0a0,5664bcdf,e4ff7b87,6169db9e,8107b0b5,78baba9e,b1f8fcdf,19a4ed84,cd2ab376,b1e0c2c9,ecded5cf,2e874f09,6d84d946,22be5806,9f8a5e82)\n,S(ae810d52,7f94dad0,d140877e,ddc5e0e6,cb636325,f4c926a,1a263f1f,beb9a8b8,c94f0c8a,f5ceca8f,ea29dbe6,c8afa649,f813744d,39e303b,c1f0c135,867658f)\n,S(38853d15,d74060fc,7eb2a56a,b8772f6,855aaf83,b731d853,b99fde93,e7c06e7b,ade73ce5,4f513c89,531b5bad,7f47ce7e,a498da85,e378639a,5ae0507e,1f27fa7d)\n,S(837a1d99,db477c6c,da832700,37f111f6,eec5402,2bf74773,4c18bbab,35b503b4,ce852762,ed9b36cf,65602da,cfd3a250,c547a971,1977ba86,64f72cb3,89ac1f8c)\n,S(3136acd5,a1460d8d,717e452b,a2069b88,4eb6fa81,756f8768,932c210e,df08173f,42ad61fb,edf97b53,f59ed7b6,afaeaadb,831134ef,73e33b1e,26b2816c,99fc330)\n,S(a9609269,c3ef7f09,2a43e394,e482483c,119d94df,10bcce43,6691230b,b77d3201,8c580df7,9147069a,5c84abb,73e28b6b,ab9c7c0f,7803d6f1,d9fa86c8,f324be1f)\n,S(3cb613e1,1ce19ea4,a8a90eda,cb182c09,5b1601c4,92822974,6ec22fda,be699e08,f05a18f5,aef9dfe6,87e69a9f,287fd868,4c975765,284f578,50294598,51538b05)\n,S(b41c56a7,47232950,7777847e,178eaa67,ce61f561,21c7f21,2c525bd3,e7adc359,b0026b4b,6f9dc954,7efedd80,d914a3e9,65b17378,e6e0055e,527f6754,c5c589fb)\n,S(f44724a1,3cdcf9fe,5b4a8f3a,f0d3e076,4559c14d,87eb8ea3,803a41da,9ee9dbf5,355b54b0,7ae7c477,9eaa314c,953340f2,f5583ae2,ba730339,acd231e5,c3d64627)\n,S(6fceab96,d5851eea,b5db9caa,9a0ff7e7,86c2e097,5c2207d4,67f343e3,cb36ae1a,83f2b505,20094ad6,cb8443aa,69b8af96,b531341b,81cadc21,565d28e7,43bf2c47)\n,S(2acc57ff,ff168361,9275273e,9a821fae,54947539,7f6b1936,13917af0,ef83cab5,764b04bc,9068fae5,75a202c1,f01f87,f3650358,3f5d3042,1e246020,9fdcb94e)\n,S(2ac302a,28126e57,5e6aee8b,2b12ad19,f5e1c056,2d63d73e,80204b1d,1d4227d2,74494cb4,1e7828f6,9d2dd529,a70f2e52,9bf4b524,26a2a3c1,ab10a974,99624589)\n,S(c5de085e,4dcf8dab,497a645,c7abd513,4054b225,32ce8405,f6e5134c,515d9de3,d1da7171,31a859a,a2c90816,386f0318,9759326a,6cef86f9,f3425bf2,390bed7c)\n,S(54729254,5f78e410,db85d01a,182bc5ed,84bf6843,3b5784cc,852d3e70,acbfe90b,618b0f0a,7919751f,46c0ec61,1dddd798,cd89d4dd,32d1acac,31432308,d1a615ba)\n,S(c6fc6b5d,84bd05b1,ec8b0ed8,fd4eceb9,dda38669,3859d90a,a0853c3,7f75e8a6,d3d8ffb4,988f7e47,2c26bd4b,83f95453,149d1534,bfafa97c,39a1e8d2,70c53582)\n,S(1e325c1,ef4a976e,77d6e76e,f9a6dc51,175175bf,23e2c46d,7203d6bf,86ea05ca,60f35511,510aad52,e156e265,6e7ec137,c319b8c1,a1591258,590186ee,be4c1471)\n,S(bbca6232,ed8c6093,7ad123f6,87af56db,28947e01,99340510,95850d38,6ac1d89c,d1257327,269836af,2793a1ea,21106bb7,ec95885f,de541f66,1a4a7c38,39c222a1)\n,S(c55b1ec1,1f7aff98,710c3b80,34021aa1,83645a14,edfc6926,cd56eeb,f1e5332b,e541bc98,7ecd2b66,d10ce29c,572272ec,28c26b1b,1703919f,d0b28e76,4ffa87df)\n,S(f026dc49,feb91051,68f76b0e,7abcb9a3,cc78a5c4,e520c2,57d2f688,5f1c49df,2471f06b,5dc74f9f,6cca7d72,86571c1b,54ab3813,d30bfb57,53274a4b,4257f5c5)\n,S(3f721c3c,605169fe,dee4a4f2,b07865be,e1f0838c,669f7eb0,f234e700,f2fb16f5,9691b1cc,ead5fba9,9d9f1feb,fae6baa3,cc7717ab,c5a671f3,8def1556,e27e100)\n,S(65bccdce,bb7e968c,a1c5dd12,2d5440b,97b07014,9838f4ae,95962044,b822b0ae,bd594952,f8424625,91375009,3cc6716f,cf7bae14,a6fbab35,4a962282,ee0b3fdb)\n,S(6c155658,7020a902,c225d721,7b1a5f2c,5646179,df5613d9,b95826ff,7723f42f,1ee346cb,5841939e,42aa41ed,84bd24b,33075490,68de1809,8e5f8605,59e9c073)\n,S(d2c9f745,8f75b42f,b48dea34,13b2bf9b,dc045542,8c5a3dd4,2a08716b,bfc4367,e2a9be5c,8f06a432,6f148cb3,cf58f767,cfc8f8ea,1ff4656e,ec19a64b,183f650e)\n,S(aa11c12f,5fda607,aeb4af7f,8430cae,3f5df00a,43910ff9,e413b3a4,7295a38,e506e63c,a0568d96,2c489851,489fbb62,acb60d9a,fb9dcf1c,7aba7be2,2e02c67e)\n,S(a355e383,43937932,21affe2f,843d2541,3faf807a,900bc299,5a201f10,d5748f99,22ce77fc,c627019a,ff0245d3,ef2b31fa,55687ea7,69a4948c,5656945c,c5a5c74)\n,S(d8f4e393,8b93f252,da68e1b0,16fe8889,d837ea8e,61e5d3f6,8928bf32,22643cfc,c895006,61003ee5,3d8f739,d6fb7cea,e2f7b414,28a65ca1,bf493a3e,27a2e826)\n,S(f69ff0ca,3aa0ee7,122a00a9,4b6ef41e,13945263,96e8c590,84ab2b37,6b899cfe,a5211104,271a3020,d65ca305,c0daa6ac,cbbdb1b1,d349a2ba,1abcfad9,bf63a7d5)\n,S(64b1b59d,7415d433,7f5b9a3d,98f06d10,7e647525,b347011d,6d3b423b,2a377592,12ea2814,ac8e0bf,1da8e617,c8f051ad,5799593d,f9ffc1f8,abc963b0,faf202b9)\n,S(bac6a7ef,9a3de971,51044204,ddc3a2d3,4668613e,101a7e6a,5f93c25a,6b20dca9,7bc2b764,57620478,321de1fd,8ae8afe9,6047d087,b95390c5,bc69b972,654b97cf)\n,S(fddae798,dad79951,a4c3b803,11ced882,903c9dcb,4d4dacca,c4cadceb,b837f688,2e21e1f9,f45ded15,76829823,4892d2ca,26ad5b6d,7b0baa77,c2dfbba,b1dbca19)\n,S(3dc783eb,40779120,25b7dfe8,f493f073,b3a8520c,ef0c94b2,1c3a5388,b0a9a01a,b3fd9020,2ca16d20,fbe8cee8,fb8bcbcc,821696c1,15545aae,84c414a0,c4401bb1)\n,S(299a187d,299c61cb,6893a5d9,cc8831e3,df92ab13,da2f0048,555d1358,e55e866d,ef0b105e,52a18751,56080cc,cefde2b2,848d43ba,6d650068,2b71fb9d,d34b819c)\n,S(b690b4aa,fde43b5b,362de597,100c74d8,97cbc750,688a46b4,cb1093e2,e253dc4b,affd5af2,30e4de4f,9971627e,dac86808,c97bfa30,f051af29,bf91e36f,c3edf0f7)\n,S(7217384c,1596318c,2a98db2b,7264c909,f823de21,702f5e64,b19af937,cbb8be39,b125b7aa,1bd67232,df7d2d3a,a671bbc1,bace159f,3ba2fad5,e82a1ae3,965d5c01)\n,S(4bb4a86a,58f1248a,11f61599,f420fc69,bc77b7c6,86d2838,f4368971,67013852,29909cb1,3bce655e,88300d78,4f7984de,352c9b9a,960148e,a5b65acd,99b62d4b)\n,S(4b3a9328,2e473993,9d7722a,7de44fcd,51658eff,93c3711d,3a8f0193,9a54902f,9a012a8e,7df3b988,204fe0e0,50cc197f,a27618ca,d8d712cf,520c7be4,cf4e0f02)\n,S(5488985b,26978af,50099d93,8d7b1aa,c545b07,44938190,e0b880c2,11782b26,b51f749a,76b998c0,83dcdbe7,21d5fa0b,c4aa4392,f81821ab,3436fbf0,37d37bd7)\n,S(7f2ff4bc,f270b566,d2d26cbd,ffeb1b9b,31b2cd7,b647d89a,2c86c003,b23f644b,f48749b6,21ed28ae,47223281,fe8e633f,35580bf4,8eea29f,d6aae487,ee8e0588)\n,S(3305c475,1d63baa8,18f5bdc0,b4e46c9,acdf1c42,9ff5d177,bdfc214a,b838efbc,491d45be,85ae9675,310ae85d,258c6c9c,8e28d7fc,5239363c,911eb12d,ee68a435)\n,S(4195dd13,ae5ea569,179dc64,b07f66dd,4a2e2878,d81a222,304d6a88,4da60b86,bbdb99ff,8d4ce150,543b48ee,9109f127,5234c69e,52293758,d0171ae4,ecd49677)\n,S(8dca7466,8ffbf319,7dd9826,cfc7f450,fed841ed,83e1d466,e92470ca,1e2582e0,2b19be5f,69fae0e2,563a3f80,2f9450e0,fc48ebe5,973f542c,4c12fbea,97627e57)\n,S(e235d150,3449667e,ba23d119,9b5225db,1b26220f,60f84476,70c6bdaa,f5eb7aa9,3d4d8dd6,b0c8c2e0,c8f54f6b,dffe8dd0,5ae22d5a,b4f9dc18,f17acafb,3fab327)\n,S(aa214fc7,23c3c458,8bbfd962,b86cc3b3,e1ed52a,25524ed3,ee5c4933,1748ddf3,9b54e29f,63240e30,434f7a22,2679006c,24593e26,90254978,35a60897,d3578e18)\n,S(1c468a51,cc9d2632,860bffba,9ed83e5a,e97dc1d8,c8bc3577,5dfef223,b3ffcc73,fc569e94,8eb20528,98b4cea3,86486afa,cec0188e,44dc4e0,25b34855,f1466e87)\n,S(c663e752,ce62dec0,81f8ad57,3e4f5c92,138e6a8b,e6c9d015,d5cd2cf0,ccd1a203,ffc249a7,554fb97,c0f9d96f,4cb06fb7,ce6e868c,e7e60b30,f67a2b9e,919f6f98)\n,S(949a84d8,5f68f70,81f379e1,9d673748,bed14bb8,dba2458c,34327c03,c893067f,1b9fe41c,f474e57f,8497f6f6,76472a28,fba6b259,91297f81,474cb6fc,f31380f0)\n,S(6a4bf3ea,5798c8ed,4b35c629,c6cfdc0e,d16d0d27,39f8bcb8,c34a9105,fa35fed,6f69e357,d5123305,56d04946,f9265353,77610fee,20667815,e7f3cb01,e8196b24)\n,S(d0a99a37,d1df89c0,99b0dc1c,16f325b9,b2ec1455,21d4f80e,ad67da85,4f2a5357,7a75846d,eaf7c4e3,5c0c87f,83732eaa,7f6903f7,b721648a,87e1909b,53d3e9c)\n,S(e2a45683,f3781309,b6223a7a,5ca64c4c,cbc5d45f,29c66082,912568ca,3ec6d3c0,8e386acb,63c52ed6,5aaacecb,fab458b9,9585951e,cd0e35a6,19c0fc39,5ce1c0ab)\n,S(9527ae80,10ddd443,7237c2b3,c8f3afb9,f31e1696,5b10fedf,f150c296,3cb8e60,6e0843a,87833be4,f882c417,7198d985,5af8b144,11e78c3c,497fc49f,5f728479)\n,S(15f15c4a,2cc43062,d4360a8d,dcf8e0f,52bc4741,c7924f6d,e1dd9f12,a06b9b2,66a127e7,2c55db1b,57050f4c,a0d8abf3,9ccb455d,9785a4f3,2ee67a42,3bfe5ccd)\n,S(558648bd,64c52dd1,189912b2,67078e8b,d3c68952,47e6c848,d7dc529a,7a24a75b,12332187,62872867,5bc88378,88deadf9,3a8f2c5c,864371dc,6be0be63,44fad7ed)\n,S(1e87928a,b6e10b59,6b231b08,87a823f1,3c6b3ff3,2852d35c,d1167244,fea2db0b,4cf60a4,767783a9,1c9747c5,7abbade1,3d7fc02f,e833b474,648038c3,b68d96f5)\n,S(7a169de9,1d4c3f0,3296279,2c3ebfe7,f2eb4410,f7b9a34d,c402ae64,ce9231fb,1ca2e8be,7a7603b7,d95820ab,86487a04,c91ab3fc,c88e2f0b,514a1589,3908e463)\n,S(65185a2f,bbc8c96f,cf9a6df4,d002128,afff1f2e,5c0182a2,95639a7d,9fecaafb,10b6902e,e83c5683,3d796b99,665cf365,c1e41d63,41fe72a4,72e5ea6e,39dbb9e9)\n,S(61c45212,4664432e,8fbcd950,1dbbcd9f,1fb8842d,c8e61758,439b6d5d,bf8dd626,2a9c7c57,48509dca,ebfc5062,4d7a0b0c,21c9f5a,45733f8d,e0441bf7,f2b359c0)\n,S(f61aff9e,267b6d91,e3d4ab45,73457987,b1af9a9,38b659f4,1ad5cf57,8cc59d62,51d0b694,e5692be0,6841a3eb,160474cc,6c248213,19c9648,c32ea444,29cb2553)\n,S(29f27a51,8fd448cd,73aee0dd,7316e566,c655ca44,afc5daa3,ee359ae5,b96f8bef,d5957a97,a6447a8e,a8301219,5fd53c1b,63784a8,14c29c80,d0061fac,2c6cc1a7)\n,S(c656d66a,efc3597a,2ee977ba,bdb7357,a2485a6c,d654c56c,bc58a0ad,598f202d,f8267b3f,f293a5b5,11f4e466,dce0fa88,a37f1603,a3a8092c,934fb824,1427a59f)\n,S(f28477cb,efe654fb,ccd3a9ab,e816f950,3749e183,3b1faebd,418c85c9,112a5135,9df0f505,6ad98099,ac0dc723,34af973d,9c98c597,ee26e22f,a0a7a60a,a3b76cb7)\n,S(d007a1a8,b6f05046,a66fe0f0,9a02e510,3ca7555a,277c40a8,87a71920,5a429e79,d9a68c51,f17fd51e,b19e4946,694e90f5,2cf664ed,d2d45489,5f880400,b410b8ce)\n,S(348f74ca,7e5b1ff9,e6ccf3d9,90ff1f7a,4e3a8296,725075e0,33a85b2f,5ba0f338,1648c7f,32a206a4,e21e7309,f1a68a4b,b2ee116a,f3fab3f5,7455da93,7c4afc7a)\n,S(1f54e125,7ff3dbcb,f1b55720,564f0c72,d322b8e1,f14d2b9c,1f6244d9,c85f6f70,34c23405,4a970b58,2cbbcdce,e67cc564,6e187cd9,b3024dfc,731a212c,c53c2861)\n,S(a984f8be,33360b3f,a012cb99,65ed10e6,43a8df49,26f8188f,24719a7c,ad6b5238,79a592f9,15c925a0,98406d08,75ec4fa,90b5015c,4001addf,1cab32f7,9f06f213)\n,S(2ca5e948,76db7877,fb828609,68e39c8e,a413a057,1a39e20e,a7b98f93,f4cc4887,b1ce7c2f,8380eaff,57299cef,e840c552,53629691,7ed367a3,5c59c3b4,ae67a02d)\n,S(65bc7a84,15cdd07,5f493310,de05b7a4,ae7c874d,5b5221d4,7ee556ef,4c21a0d5,ad20620,aa39a14f,dfad58b7,9f1ad70d,2c637119,d9eb33b7,ca9abca1,f5dc3db3)\n,S(a0b6b293,a9e25a97,18fa0db1,16362757,6e39cd43,83140822,b2241fa8,c432f276,2cbd88cf,29570778,8a6d79a3,b451833d,c596fa08,8b26c6a9,962880bc,48ae2b19)\n,S(b4d308f5,74f7832f,4f402626,5ff81788,91a86724,9df74486,f241baf2,28e130a3,ca82dfe7,4c5768aa,46927fe,70c93227,cc7c30ed,c2fb6303,9a1552db,534019f9)\n,S(819b48da,f19c48c1,f6efd0b7,c4ff5996,dcd5e99e,7146bde4,1c83e333,ac891b3e,c15bcf4,c9a630f4,e1489585,e5719746,ac55210e,c9b82da3,898a0d88,4eab0459)\n,S(66528e21,adf8c447,526d616c,777dde1,fa7469ec,175facb8,3ac9ed2f,db773f85,c5d38c7,c13449ad,4f346498,1eb7abbc,a98de561,d94f46bc,edf3dd10,1839d91e)\n,S(a26e3a0b,6f61c611,28c2afc9,15ddf48b,8d3d3901,df93a2b2,aeb82579,4822e605,41f4e806,787884ec,84716647,ed72f331,126f141,6837a232,e1612ac9,99c7d115)\n,S(56623040,c198fbcb,9aa32066,90da22a5,a0496a82,5313a2fd,529fc9b,26647d22,35867158,42a4c950,e67b9033,23c55fe0,3ba3bf92,a9ecc5f8,39708869,7e2e1e98)\n,S(acb401f1,b535f181,75ba9cc5,8e32514b,be8b6d19,1401248f,20500dba,23ad4f,f57fbfc7,9bb94ec0,eac7d09e,52b699e6,d8407335,e6dda706,f7d1bfe0,71e09f6a)\n,S(9e02a873,fbbeddcf,b760d48e,6e29e6a0,b37cae8d,6348a8d5,bd651be0,59ecdb33,9f926735,cb2f46eb,71005600,56dea853,9fd6d140,2a57d05a,e884e8f1,1a293c39)\n,S(3e88f76b,ec410c46,ca20cf7,2d90c66f,476fb966,c46f20b7,facb7f50,17f71617,bbbb4d9,a453277f,a7bb83d2,eb8b2950,3fe51b0,7d4b93fd,5e993663,9b78438b)\n,S(cd39870c,a6484a9f,e6d30e47,3a6f5e8b,3ecc1702,e191b5de,3d4d6cbf,dade08e6,234240c2,8f2b2233,9369298e,f22cf32a,7663edb4,2524f02d,6879b4c9,f4ab442d)\n,S(5de275c2,69799058,3348c4cf,8c039b44,daf431d2,b7b1f862,98ae24ea,271644c9,adcf9fc3,10ce2d93,8459db47,30273255,cc483342,3f6bd4dc,56593f06,6466b8a9)\n,S(2d986200,bd9dbe51,eee40ec1,2730701c,621333db,9e71c232,1a6463e1,f26cb76b,57433deb,d9149b32,37315114,e9747758,228d17be,5f7c54d4,f552e730,1e094329)\n,S(654868b7,39d6a72e,75223cac,d0f827d1,789c410c,fe0d5ab7,24cdbc2a,c9bcb269,3d8d4270,63cfe,6724f8d4,77ddbd10,b24899a,3ab0a33d,87683646,9f4806ba)\n,S(d97cf5c8,e1a40197,75312099,fb1a2d62,2b3354d0,e524cbe7,bbd3187,506f909d,53c8784c,cfc900a2,f159e98b,76481239,3d883d70,8a953905,44691b5,1c8c97d4)\n,S(697707cc,9c74c828,7396d53b,9e5d436b,24b861d0,2fcd9208,dcdcfb54,8ad2d903,bd203dfe,7f4a3484,1f5ec966,f063d251,a89b7da5,468bb2f7,32775a1f,3a62412f)\n,S(36b4329f,fbbbd80b,e8eecd1,358c05f3,6616b456,588571da,c23d7752,edf15d65,7c42145,d8774827,a0cbe9e,b9ca7b90,2353c6f6,118291ad,950dfee6,124fef3f)\n,S(dad2b02d,a182ef28,5b00b0e3,2af77064,ca6b3c1,41766194,7fae0663,4861e144,ece34dc3,704d0561,f6029366,aa45f192,a2b55b1a,1786e8a2,d84b2361,eb2c2af1)\n,S(4cdf386a,c0e7cbc6,e19c5f85,1edb009a,59b0526,f3f4d0ca,3c82f280,dd33531,3f8b3eda,4ae484e0,95916efb,ecf1ed3a,27bcb034,6cbae87c,6a388488,331ddc86)\n,S(d4b65a7a,eb74d38f,2a8e9383,2ad27a7,2e2a89f2,2ccb5c24,9e4e55d4,da7a0cf1,a080a32c,ac9e0ee2,6e6538a0,233f2374,3428b2ad,821852fa,bbad2a23,63a7d7e3)\n,S(c41cd230,d99c5f66,7d7ea000,53945fed,70a2a807,4893d488,5be2ee46,cadff9bf,4a7faa2,3ea4ab42,5f21e12d,dea7530d,429c64fb,c05e1b24,adc24f55,c34af43)\n,S(4c67ce59,9a841ecf,ec147a89,c120619a,227100ab,c5dd0ba8,da6d362,6f687824,aec0ecc4,b65694f,150da4f8,fd514d37,52f4c6d1,aebd8b5c,19846ea3,bf4b13b2)\n,S(e765b00d,a067b5cf,a40bf02,dc8ed6bd,4e59b470,ed6eebad,c02b49eb,1d20c37,23e0df00,9ca95773,a91c0805,40b024b8,34c0d7de,4dfd6c43,76c979fd,2665f21d)\n,S(18a8cbe4,d7585fe2,3b958cab,a9303d9,505928a5,7ca1058,21a9f192,ea52298c,9d00506,4a1f3406,c3864d73,2ebf3e1d,b6f20234,d0f5a99c,3623ed9d,530d71cc)\n,S(2dc043ea,a53c27b6,50e2f1c,b6fb7fd8,26c4fccb,9572bbf5,103356bf,87b3d649,2695f192,af96b031,a41b72e7,a61593cc,30672c07,cedb0908,35ee207a,5cf18271)\n,S(71699cbd,e1efa1f2,914bd0ac,9b28111,8053f7ec,d51e79c0,44daa4ac,ded9c9e9,8519592f,a3b05922,86797110,b222231c,fef973bc,d51ea4c4,34998999,63637c05)\n,S(23f4668e,40761e37,235dc0cd,41b6c7ff,1951678f,131763b8,7d394e12,6be4c370,1cce4181,2279761d,8753dfaf,8bdd206c,e4cbfc5f,ccfa8826,9d2d4327,431fa689)\n,S(92366959,9a173d3e,826233c7,8062863c,2a92b525,106c1159,4885058e,4a7797a6,d1c9f57c,d03c0042,38f898bd,cb45c064,a1f2cc56,222bbc03,a61997fc,877b23d4)\n,S(a2dd03bb,a75a7bb2,fc9915df,c66c0b22,76a7347e,6cca3d32,e5727cb8,b54bfb70,9ba4266d,b9c66907,b25c41bd,b96f8a94,a9559830,f171a878,66372067,51c7126e)\n,S(79174d3e,2379484a,d3191db7,26073dff,d69a31c8,94314f7b,282ed68e,71395ad7,1cada148,7ded181b,f1a9cd30,21afb04f,4402a171,3a570d7e,9f4928c1,2069315)\n,S(874597e3,80449235,af5c10e3,7af7eeb8,f755ebe0,6784d5e3,ba0d1021,fcd3b12c,2ebbde83,58c4f2ed,cc89bd52,e6cd61df,a251bcf5,713858d3,d247750e,266a6129)\n,S(f23c1888,c22a764,c85c6328,387e9126,f4ad772c,fa0a6034,914d5f60,7efcddc1,6cd5bdba,cb3c6cd7,4c2c5cf8,1c62e774,560211ac,f1ee8096,be9eee5e,b716881e)\n,S(a4c2054c,3a834498,6dcca592,db5fbe06,7f80d32f,8c492436,79c57b76,ae13b96,7ca515b7,8a3d5590,6100ecda,f7066459,db9db34,3bec1b4c,6a57626e,1f560444)\n,S(d6880dbf,50d3faa9,835404e5,d723eec8,b1bae88e,b8ca22bb,a85fda5b,6a8cb669,a08c4200,718edd4e,42b775b1,1beb9a6f,eb3bb93,b54c57af,5218eeb9,7aa9fa09)\n,S(2dfcf2b0,babd3990,c305cdbf,cae7795b,a2fb3cb6,3ea0cd17,787122ab,5af86bb8,e0e921a,15882601,c151fd93,d7b7c607,cf033633,e6498004,d29cbf76,7fb19f6d)\n,S(d1dc82f9,aae7e02e,177680f1,e5d73ae,8a178207,7b5ebddf,45b56bac,fa1f11b1,4c9294c,e3ad0fa0,ceefde5f,fd80905f,ce57a5c7,c6807da4,186c9b4a,7c9d6237)\n,S(ff111200,4231109b,d131e7e0,f6434461,ff699d8c,6be3e6bb,7eb9e827,9af4a4b3,2c30b8db,bbe56de5,3d8b3307,9dd741ca,8c7aa596,78a3c75b,a781a77a,e470620e)\n,S(9fc4e1ac,28a8f268,c66aec12,f5e795d,f3dc23d5,c515c5ec,11c394c5,e6f2a11b,188bc037,ab114fd6,508627db,12317d0d,fa194cd1,bfd56c1a,4ba25d07,206aaaa9)\n,S(bdb0b373,5bcad639,386579e2,aa78fc40,ec2f4700,4b3174b0,1bc2cfdf,f4164f95,45d65b9f,eb1f60f3,29195060,78d5c016,8c6b1820,6afcab34,a2623e1,d2bc70a9)\n,S(1386e11f,3950b8d9,e87589da,c3dc9a47,bf36b0c7,8378d2fb,253e5bdf,9f704465,415f50f4,f048413c,7eec4c2d,122a4f7d,f4908265,31f9dec2,313bc7b,b1b2402e)\n,S(be246169,75b321a2,edd491be,90b7a11d,75a36c12,ca782d20,732a285c,5a6a1572,ca9109cd,5b041864,5026977,9490edc9,d239778c,25609736,7b52d82d,97f588cc)\n,S(baa5965a,c352a017,80b1359,3945030b,32c83b60,805bff01,476ece26,cf89384,c83a9515,dee6663b,b5688d5b,483f0a2e,51c8180e,a130e0ea,48f7a4f0,1d3d06e6)\n,S(17dfb33b,957bd5d3,36c918f2,cd1fdc95,23e2980f,20a7666d,bd5e8a7f,8ab1f83e,32ffdb3,db6dfa31,ca67a5b0,27a648be,b978b6cb,7ace4241,a0b6a7d8,ceedda20)\n,S(ec5dce25,af07a01d,9dc43a9,e92dfb51,29146307,cef69b48,cb7b6e85,d9cbd91f,1018c449,949bb2cc,e185a9,4a9a06b6,bca4c8b0,1a3079b5,3f86d830,21d46de)\n,S(a56b5b4e,d4e4e3a6,29701889,2cf21f67,868ebf37,b8696ebc,83afd980,b5c63817,1cea139e,521c70e3,f0a4b02c,c20345df,90a579b1,20ea5dce,bc1385bd,162adfd7)\n,S(2ff27783,681d264b,540df574,b478e3a6,2b919e0a,c4ab1b66,3e279083,25a707b7,3a477dcf,65b233e1,34ddae74,7fa5971c,cc0498e7,be9f17cd,5e34bb0b,480d360)\n,S(aea30054,dcc9f7eb,c9dbbd45,cbcea779,49780d59,11edcc19,937e6352,a726b3c0,7ba5e2d8,9f681e00,bb74a353,f37c36c0,7264acc,d6a31529,cd5275ee,94a631fc)\n,S(78531772,142432df,81802ec2,84884682,5ae2bc93,aed1fa8b,e345c106,7e23d059,6b8d514c,a0a13c1c,6425e5ad,f808aeff,f88fc6be,dbdfc788,1d174868,efd21063)\n,S(c104c683,8448cda2,c94b0303,7b5ddcca,d4db1d7e,e744e70f,5f9275b3,244b8405,ac9e6545,3722e2c9,d7d97aa,767c3235,2a213391,aa2e327d,3884ecd,93f4b133)\n,S(d4b02b47,3f851a30,604356c0,e9310d4d,7bd0f9a1,17db0c90,54862b58,969887c5,d451896a,5eba571d,4e55d26,9c3c8082,55c5cf18,f1f2d033,b8d30788,224a68f2)\n,S(93d2f6a3,e97e4aa4,10fb6006,f3853f85,65bd14d,aec87192,e61b8f97,93f29b32,a0a840bd,336034f1,a98a0239,c6ab3ecb,eadd69c2,51b2e03c,339dd4bd,7a407308)\n,S(7d7d7357,467e23a1,2022788b,2ada9a69,1243fbae,486cc61b,56458e2e,781f8f3b,59d5566d,97bb583b,940de406,44e19530,b1bc7ced,2a00c50,f4bbef30,d899e7e6)\n,S(ea80f7b5,8c72080f,f2d83604,ccf6e4d3,28a71914,abf94888,8dc87c42,15fd4a6b,ecc6e626,f01f73b2,5d7e92e0,d1220b82,8f2f8ef3,3cc92111,3d15bfab,179ad8ef)\n,S(c74366e7,26949fa0,6913e6ab,c41cb17e,c3837659,253c3038,30d543f6,ac0e4aa6,671ed272,2626ab33,14b6b1d8,1cda24d2,9fc132f9,51f97b95,8e72bc0b,9eb42d3)\n,S(6170ed4d,c3dc2218,2b45c1c6,fcee9fc1,3897ac17,fc32fb25,aaf2880f,4cbd11bd,cb40f34e,7e8faa89,71338834,21cb247a,4c938f3e,f6a97cd3,1711f803,c872621)\n,S(7dacf9ad,5775fa62,f99e093,5e948526,b94ef22e,912ae95d,8dd4e5ba,744a2ebd,69931690,6c73045,d8530a39,d33a8e21,d5912969,9f7b721c,1dd0c616,725d5778)\n,S(b1d113f2,ad7b487,908767a0,b6faa413,6a8b3dad,41dad9d2,b6e8e7c,9f294639,7c802cbf,4596903a,90b1de93,649bff3a,6f63ab85,a9e3529a,7d907b41,7f973b61)\n,S(d09d8d8a,17a1b113,aaafc270,db36ed63,4342d90c,64b6ae97,9733391d,eb67f3a4,c48701eb,738c3edc,a4f78313,a56660f5,3da8ebaa,3cd8d469,d1dd5910,c618851f)\n,S(c264ffb3,c223e60f,fa34faf9,feb18668,4b05b7e0,6770db1f,9561ed5a,ea0bfef7,e4df501e,ebb4cdce,bbe6c4cc,b966de77,18ac5479,3e403e79,389ac330,92928e6e)\n,S(55505edd,605e4299,afb5a69d,81f6df34,c7c2133e,dbc7bb10,ebc49187,857d7c49,ddc19610,7c3bee6d,ad955e1f,76afb31e,93a88e4b,de8aee59,aba50864,c295a487)\n,S(9d61801b,a07c358c,f9942bd,d3614d3f,74904b8f,8f8aa8e6,a957eadf,79fe99ef,7d9d5980,2fb5dacd,93ec6c6a,92ef86bb,6079076f,7d964d31,70e3ad3b,7bb854a5)\n,S(f1a6cc66,3dbf46da,e1ca98af,610f09e5,e9251a44,f6b9915c,b68c58f7,9038645d,e41bc6cd,747c0390,6d29e29c,4cbc2dec,6817114e,daedf220,b7fce48e,7e6f42ee)\n,S(df247558,50b523d6,de15c3ec,38537a3c,af9a90fa,2c0e8b25,35696289,10517a79,bb567ba,e42e9899,85fc478a,4303188c,2da741fe,bbd1742c,818ec1c,e64818a5)\n,S(4dc30b60,b174bb78,1f339277,ce3996f7,fe102e13,d80873b1,1a9e6b4d,54247cef,b13e5069,a7344a99,4f9cd284,1d9291a6,50e1d969,dd3061dd,ef34f037,7c85e20f)\n,S(e77aac3e,946f7715,b9d0999b,1f3aadfe,de9c31dc,f8eab336,c5bcaa51,f16f64a,9d78c14d,90cb37a3,835d23,fd8d5a37,2b8fa160,1274e5f0,2bae50f1,587a11bd)\n,S(24f29bd3,51e62864,3a7d2fa,6c47ab78,a6d0c6f2,c73bdf00,864e8bd0,c3f038d7,4a34c7f0,22e43220,f6d30d59,3d3ccb54,dbbcc50b,4b845712,e72636da,d0cecff3)\n,S(ad4b9b47,b9cac9f8,a5f3728c,ec610000,163ac2ec,6a18cc34,b630134d,9fcc9364,afc8726e,e0f988f0,53247177,1efb25ae,e07b70ba,ec7c425c,50e3eae,2898c077)\n,S(1d38128d,ce7ede1b,265a4f8c,4e6b911c,d0e28087,87244a60,dd9f646e,2932e509,857a6c8,e4f43cfe,129e11bb,462101d7,9c76e99e,c7b4aed4,efc029be,b1b9c1c5)\n,S(c171b7a2,7badcf84,c3c61afd,7568d23,5a14f0f4,fec777b,4a91c92c,61358677,cde264a0,48d2cd4c,d53d7371,8546802f,1ab67815,d6ebb3cf,b6415f4d,5cf4057e)\n,S(d50f20d6,f4781aeb,eeca2a8e,85e8b75c,187c6d34,a940266,daa16876,96acef4d,9aa99671,35a1dae1,af29ed05,9fa15eb2,a4aaca27,99d98c64,5ae0ed03,7f08f37a)\n,S(6b83cb07,7bfd33d,181fc835,63eabdd3,a50be6d4,abb64a16,e338f18c,c098a977,3e04e660,cfe61fd8,1ec67b2,d20ca9fb,f9c6e038,71f7c838,b261ade0,51b564e9)\n,S(2e75abad,dc0501f3,afa90484,e85972b2,679d1d04,62d6d206,42c73830,15213b19,4754077d,a6868edb,a0943397,3c60a581,88a55ced,dee38351,93ce045a,e93517de)\n,S(8a322085,d749f63a,38dcfbba,624d0c87,b9bcb66c,e4e3d84a,e97f7781,a0e9a164,3b592b8f,9d8cc10b,58fbdc7e,982e3fa6,7aa67c90,e9ca884a,e1f57291,6d7e2076)\n,S(b890b7f9,ba1f1945,2a7bf1bf,944f9949,36bb4ad,5e2e0fb8,15ddc1e,2f30d72b,c1b652c4,f8e9d91c,8a92f76e,f6f72ed3,3357b35a,5ac00d63,a039df78,eb778a46)\n,S(cdf33d41,c54c8a0e,dd3a0b1a,12290d13,715de82b,21af5306,a1197444,acfdd5c9,2d7b78f,31d08fc8,afdb3940,ef1afaf7,3bf37029,1e1be3c9,5acdc673,ee2150d)\n,S(20b24e10,c0f85631,fb891ae5,c0b0b36e,5a3829df,a5018c1d,8b59fe87,b051b55d,b5b9204,67394039,df0a34f1,308b086a,454c7957,40d31fd8,960f6ab8,33998c41)\n,S(61976c23,257b9adc,48147038,ff5ace08,39d88274,9810bc9,25590555,b0e1c709,2b31a4c2,a712edd6,6b2da3f,84447c73,f2e3f652,d22b81d,d37ac4a9,def5390f)\n,S(4ff22758,a2a25681,d28fbf09,e4cea5f4,74c00681,d9b4fe6d,ef3227e3,6092b52e,4b0f517a,4e56697b,37341ab0,6fbc92e2,4ae3d03d,392c33d2,377f7432,10a89fdc)\n,S(46145b19,639938dd,9c6c84eb,d4180cf9,752cf9fe,a77ca609,5ffc8f7e,ead61f35,5b7b55dd,8a5e7d00,a3b62d20,2f371d42,8eeacc9e,7556547d,f2396c85,9503f6f8)\n,S(32464689,a5d7626c,fd02b5fc,da68a8f8,dec32eba,887b523c,4b4e379b,c40bee7,6e9cb8c5,3fb716c0,b583b356,7ba6890d,2cdccd39,646a49c8,132ef061,d89f6710)\n,S(56438894,2c9aa575,efbaec77,cbecd9fe,79fb4461,c61ac051,195ae384,dc0d6ddb,663528a4,29696073,f9d47d2c,bb2c256,9bf6c452,c171ca43,7cd3480f,95b69a05)\n,S(f04fa37b,9c510bea,ec12fd4a,307b1b0e,d934fa1c,78cbfbe3,bf904b00,91491e4e,19b7da4d,826a314f,586c4c78,457a3075,76f3ada4,61af5bb6,c374178c,23a79326)\n,S(36fe4596,b1ca6409,741f7a0c,b899f89f,a727207e,eedc8e57,504847d,2cb304cd,78f11f,4473b124,5772a101,564b6468,43d4bf76,afacf02c,bc45ab39,c7221e19)\n,S(ce3e6d1b,f2deae03,8ea4333b,ebfa026,d1954ffd,f50df66,e2899b05,1ee87b0d,4cd4635f,10af69c7,50e96ede,e4f38591,2a14b104,ed9023af,60ac6e93,a9b9bcb0)\n,S(33ad3a7f,a6008875,74bd735c,b2ec5dff,10ffc5dc,3163d8d1,62644086,888d29,8c959ba3,2f7b8ed0,4cb2bf2f,2b5e5f56,b29a851c,8d1f6bff,b48fab31,5335b3e0)\n,S(7101a2b2,36aa7903,6348006e,cb8f81f6,b481ed8d,8a3081aa,40ed475f,13fde43d,d0a93654,51471aca,80a05745,57b4a24,9d627dd5,c1428ed5,79feac02,5fd2cd2e)\n,S(ba3b4042,9c0bb526,c31cf602,3f9abe17,69974344,5e66566c,851501a5,d125471f,7db3e93b,e9944c42,b1654407,6d5bc6a0,99806c67,6cc7415a,9d110661,f4c644e6)\n,S(57c6a582,1da61528,dc291aec,3a9f1a86,229594a2,27767583,5687ee91,15acd72,a9e4750b,5580b225,7768ce7a,b2909466,589a1a12,2e54a7af,35f44de,44cd5dce)\n,S(c8353ee5,847efb7a,ec03d949,633132b3,9ad898e8,9a367c77,7b4a2ece,c47a7c10,dfce02ff,71060be,5e12d377,524c798e,97bafd6,e9aa9e10,27c07a8d,6f7d3a55)\n,S(b0f6ef67,78b4ee99,6d7807ca,9f1f6f44,203eed8e,62584c6d,666e3698,e41c0eb1,b92763af,c9ea095,f757e921,ac0bdb02,605eb66e,d3e1735f,f8f17e63,dee5460e)\n,S(f2e4015e,62645bd4,6f858b25,cb636f97,6ccfe5f8,da065b65,1ec170c,ecf5c411,8c05cf9b,19459597,7c1d1b6,4ff6e902,5d78a175,6416e0a,ebf33c21,7b3d5dda)\n,S(ffcde722,ad4a2223,24396b52,5a95a233,31dab41d,95a4e19c,1a23c2e3,db7460f9,f7282903,525ac2ed,3f9db21a,92d3fe4e,b1635a8c,77dcbf8b,e671146c,8eca8115)\n,S(81dc05b5,2d9a210c,4904bbde,cfb4eacd,8b3f08f1,d667e9f0,a27345a9,7d37b37a,747aad1d,bd0003a6,d89f9d9c,fc00977,719d24a5,b8ebb807,98d1b644,87105f5e)\n,S(5b92318d,a267772d,94656087,8d698aaa,7d2c721b,28dfbc20,9e4a3e8d,1b0eef1c,b2d274ec,7aade417,4f2f8766,1b5018bb,47c83d32,b2fed50c,437348a7,93041906)\n,S(3eabd0fd,6b5bc51b,c187c943,511c3005,8f86e474,8547fcd6,49595070,26fb805c,95e8bbe,8187398f,fa4ea4cb,b50bae2,19f8cc5a,5f09503b,3edd115f,729b2101)\n,S(a64d3807,f92b91e0,717c310,ec799908,43e3a394,a5ece3c8,7c3bb209,8d3123ae,50fbacf8,be11f6b0,ea0e36b3,5c46bdb0,8fb79064,59b52901,9af59b1c,e80ad239)\n,S(db9ce153,7cd47f3f,4b08858a,d429c975,9ce6738c,2e6d56f0,fca12e70,777b83a1,a91b2016,9fb1e2f,fd52192d,7030d86f,66358516,5ba32829,6c9aac95,192afbf6)\n,S(bea03f49,76ee0a86,e00bfddc,79e52173,1baef841,d751ee47,9a46cfe7,89de2399,feec1fb0,3901a923,862054e6,7024ba7f,4c485c70,2ff22aa4,1620e857,6dcc863)\n,S(cda308eb,6975d59,db439e23,32505d29,4ebdca67,5373ed79,25b52a6e,f60a33c9,7d2053c5,414c9bcc,5155f17a,6fc206d8,81cc882,54341778,1c5db51f,3ce4c224)\n,S(430bfb3a,802988b3,a68d5595,c989cbe,75d409d2,68dd84b9,a1d4a5b9,42360174,3de4c6e1,3c87338c,8bef6195,6559335e,bec503fa,2025529b,b015cac6,6d8060fc)\n,S(b4b1b7c9,932be243,6b06b2c1,e5de312e,4a409498,11a226d8,5bb30c5e,1487c36d,e169a70c,b95988dd,fe1a98df,527fc172,61cc3103,88d41ed3,4bff23bb,31da4dc0)\n,S(7a954055,d2d6acda,8dbe81e7,46310113,e26af09b,91cd59dc,92a479c6,d6079ef4,83c6d3ff,4582eea7,becaf8bd,422c0558,a2bc8d6f,cb615c59,7c46982,47cabcb3)\n,S(aedd36fa,91a7f95f,2b2f32c9,1be77860,75783bcf,8fcb20b5,f20ca664,dd89474b,c747f32a,174ec6a7,936f13a4,7e80a2e9,324b7f5,e163b396,218c4c35,9391e565)\n,S(41052d48,54402d09,a813492a,2f9362ee,9799ffa,3d270200,45a0ae07,9f913f60,97cbdcf9,b60518c9,74ddd987,386d60d1,3d10defc,8fe64511,843d5bf7,13774178)\n,S(886e5afb,69f6debc,c1c5be6f,b636eea8,7314ff1f,975cd96,9070e376,c1a9973c,6a8ec4b7,98fec5e,b4a8d645,c7b72663,d6bf4aff,8f4f4b36,c064bf3b,f6e7b5ef)\n,S(c93adec2,ddf85ba8,d9147c91,82ee4fbb,5727081e,a6938c0,a4bcfbfe,6856dee8,9ebef5d,2b2253e9,4474331d,b52739c1,71214093,aeab11e4,e51a2be4,e201dfb1)\n,S(d97166fa,94a4e51b,ad21e1d9,76e01011,655ce24f,5f5afdb8,feda67bf,8ae65a83,815ac894,57f83bf9,5579fed2,ea470ad2,ac1c83f8,546ef3f8,bc383701,1bc62a48)\n,S(c23cf94f,c5a93aa1,719ea8d4,4f426fd3,d48220cc,10ea558e,e4680c1a,dc91b18a,64a4dd89,8f36efa6,efce9354,fa30f506,be3766f3,a31839e,1fba56b,5a07ebd3)\n,S(7236b1df,88751e98,2689e049,c5084b71,b8d7979c,2c412a3c,995e61c7,2440929a,67155955,bf5d1916,9e36636e,ba56fe44,f7cef6d1,b0afd3c2,beb59b26,5e3b67a6)\n,S(d1890a85,df4f7933,ff72fad6,5b95f5c,c9fd8683,3c1bd2fd,56a3b7c3,e90428d,8b4896ad,4b4469d8,af074eba,ac38563a,ca68888c,5411ce0e,b3701ced,75d4f87e)\n,S(41ae85b1,9fcaf4a6,13901d2,3cd2376,62f299c9,7cb306ee,8ffc13fc,75d54e15,20d99cc3,215f0b1c,20922ffc,6e111b53,e88ffb39,bb6e118c,61b9e3ee,fa7d01f1)\n,S(d125489c,4e07c44f,35d39008,e4e29c43,c28ca505,3e370570,a7bd34c7,57e673f5,d142e19e,825ff93e,b6661160,b60d4e06,b4393388,43500b29,2d4d62a9,28db2bd2)\n,S(8c50b3d3,667b2aa1,a60c425d,1128d389,f2786b3d,656ee126,dd57af96,ebaad9e4,55eb7ca1,c2bb5881,7f82cfc,c8b5ca35,5c2aec5c,68dd479d,948261ee,d342fce1)\n,S(3e77a3c8,a2e995b7,582f502f,9bb1230b,35311af4,dc8d0744,9211a13b,444fd42,99c427f5,8365ca18,75272508,7dc57985,d59d72ed,aedfd5f9,d61517c6,1fb8679d)\n,S(73ffde64,80547448,658ae5a8,529755d7,2ad7ec84,5711f0b3,20acc53e,a15ab609,786de118,c6a0daee,48f3f585,d10b9f2c,b4947661,b844ed51,59903ce5,f2cc8d18)\n,S(8f2ec78b,47c61a39,c2ed1110,902b3a43,4fc9ddfc,b11b1ed,75c675be,5b8a172c,441686b5,c1327f0f,d2bee35c,5d8f2aef,b6da72ac,e6206982,6d6812a0,5b937346)\n,S(c36c0376,d360f87d,28069511,7eddf1fc,75ae7118,5fd5a82b,b47d8fcf,519ae4d4,44c31c56,cda1c2d4,41161ab7,45f3c0,25c4ada3,72396658,cca23f93,bdb6a303)\n,S(1ff06490,3cc7e686,d408909,4812a7d8,531c4188,ab8aaf4f,f10bcc5a,9cac352c,87af78d5,3122ad89,9a6a1297,fcc87c1f,252bbf9c,d8cfbf57,f64cb6ad,fe77f3a8)\n,S(1265a4c0,6e1f1a6,126a9e37,a6e4f90b,290fe449,49b82bca,8ea73759,451e0b25,4f0f7a6c,9bc7f00c,42b90d95,95871176,d723941e,38335581,8f7aacdd,f830d15d)\n,S(2595358e,4d45d362,5fa1c89d,a3249cc5,a26ec3d1,e554a863,51b79fc3,4eeea90c,d9b8d147,e4e00450,1baeeb5a,8440235a,88913063,bb1ffa78,9402c3f7,2c603899)\n,S(3f432621,7a5f415c,b028f338,40fc226e,5906a09b,d054eb55,45609fee,90135082,a572303a,131fb0f9,c63d88e6,3520ef2e,77bcfea5,1031fa60,fada909,a610c830)\n,S(9ee85c9b,4cb0102a,6b21c517,947d798c,c26dd853,7bb5d6c0,46a50144,f3297f45,85b798ab,c2e4fcdd,bf3e17b0,49e2a495,6239ba16,9917ed08,ebe109e0,4ac8016d)\n,S(479c2ec0,28e8c83f,d7946f43,8d802ed3,d728179,55d94c55,bdef5050,67774934,c262229e,23eacd99,f9d3fb37,b7b9040,47cdd5a6,6872f4ac,800dbb3,d87fc3fd)\n,S(2a52f4d,821cf4ae,758ed477,6cdc3bc9,2d3924fd,97a12f1f,4dd5a646,24766b4b,28500754,6ca8f142,6f3a4a6f,6ccf8437,37c6a917,7ab59b92,728f588,f11509aa)\n,S(d89159a6,d5447ab1,bd03d44a,a8db3410,c86305b4,4f06b25,b88c4244,5ab1e929,c539ee3a,e7dec645,810c4a02,e1777977,d98ddba2,281d5701,2ed2a4c5,85057013)\n,S(c91267af,4c303e07,ad82c1e6,2ddd45d7,cfae00a8,d27a34f1,eea8d15c,1add920,975967db,347415ae,24b427a1,b8f7229f,8db0758a,7ea13f7c,582c260,c0711b85)\n,S(c860be31,18ce92b0,39b27a50,960d3caf,88e24bae,6e45fd8c,5a253a78,e3d0e6cb,15b8374,922f44f3,adaa213d,5e3facdc,9de1ff6,4da677d3,d89f6e0a,a800413f)\n,S(eb8b5f4,2fa90313,b3dd7d4b,d47338e2,9861e52c,b492e9dd,6a1897ec,4da14c14,9d1c4d0d,56c570b,8835e188,517fe7db,490aa6b2,bfbe1564,579e7af9,c0647bf)\n,S(151e39fd,d5961da7,44ac5871,94081a88,666d3dda,6507404b,607d449f,1b3c005f,476bca6d,6bfc5e2b,2c183794,563d35ac,aa8d38bd,ec3846b0,22831bda,38fa28fe)\n,S(b46d2d52,b764f922,7ead0399,c391a9db,1737c9ab,35394951,5a57c76c,c3c05c59,8aeb78db,db1e52bb,a8030a3f,b9f57f6,644332be,6d0ad41c,34b7fbd3,13c6eccf)\n,S(a89e77d,30c66dba,a27a2dfd,5af0684f,f6ccc84e,49b8d98,f402a88b,20e5bf7,af45b2da,cffcc49d,4f6db574,29f13971,c74f5321,4dd4af49,2bc7ae5f,10abe1ec)\n,S(8d774c5b,eaa0cc57,7479873f,9bf5ff6c,808afa4c,6fa6f2be,88b53841,4cd088c5,6b9461a6,600ae1ac,4e617149,73fa8b48,74dd7cc,9f331eb6,e15bfcc3,2e26eb63)\n,S(34ecc029,105f5e19,d6c2471e,eae5b671,cd55f2c1,bfba7dc8,46787c92,ba7de2a3,13e3cd9a,db98a6b2,433dba08,ec7d40c9,c2467878,f6f4bcd0,ce60397,67aca327)\n,S(41b10298,6889f83e,e89d4f8,fa50898b,c9bbf650,2d153c36,85064c9b,f3dc3c43,559f5bf4,fb827bc,dd068d3,cdb14d6c,ace08a47,c30e3fc7,8972ceb8,9f88c21f)\n,S(4a77505,79ae33e4,55228533,b8856da2,b14f70a8,d13ac2f4,f6bdc5eb,4f5c9aba,d365922e,3a487635,3ee1b02b,511c7926,e5c5edfd,aac153e2,686ce4df,b623ed2f)\n,S(173af9bc,efacadf6,c107748f,278adc1b,d42174e6,8fe06d9d,f84fe278,70eda280,7b120d62,2463b94a,57303cfb,2c477f95,49d41a66,d6ee7c2a,4c652284,b8535faa)\n,S(f0fa5cfd,ba53a5ba,df707983,134c3459,5ba232b5,7fb67a94,5c5c0f25,a0539be9,ccbc91a9,c0a2efd2,3bffec87,cadd16dd,f4292aef,a59b3d31,6e9c7082,742edb6d)\n,S(a5df803f,751c4846,10799c60,db405439,9b1d5bfc,c99fb316,fe884468,e57ab77b,27f8f706,a2f08ff3,249f8b62,ac0d59b6,31fe52fa,7ab08ad5,2d09ff2c,4138dcd4)\n,S(d165fa7e,d61c251e,a93e8f16,c9291b09,1f258720,fd303a3d,c573131b,d98628cb,cc0dee9,f01f0dce,aba94461,1e48f9c5,282a7480,eded0794,81d0b8c,a9819a73)\n,S(87703371,46a8694e,2bb5cb10,76ffcd94,309c9c8c,be6e8cf6,5a77f4ca,4d31efb1,ee64af6a,5569a205,2cd98c10,871b2ba0,6addae3b,3cec463f,6002d86f,b16e5e9)\n,S(1c7e4ec7,c090906,3d98f786,dc22db53,da4d258d,6e75cbae,30d4b99e,f4ca47d4,d2001df7,3297e6ec,c0aec17,e72cfa6f,5951e2bc,f03e4aa5,5f329c77,47cd92d8)\n,S(d485ec0a,1a0abc6a,69f308d4,c7f8b8bd,fff5ac6f,ad4ae4ee,271a87ce,973b58fb,68f51764,ee705265,3e2f7d7b,7415847c,3856e3e,1a7f4932,6fbfc9c6,5976cd48)\n,S(ae5ab510,48215ea2,3be55d93,4e0dce0b,ff88f09d,10c8953e,390b79f2,da26e43f,9f80d71,36a5da61,7f90d0c8,a6d9aecc,5cf88abf,6bbc2181,5f8320a7,2fa8929f)\n,S(cb879f42,4613487c,24aa73a7,36f211ea,96541877,33fd7091,40a824ae,7641a708,d46a4ad5,7f607301,f61648b6,e99891d9,ccc41af1,af29a66b,b894575a,a6b3d5a2)\n,S(1e8d6ac8,ec0b543d,1e0aea66,7f35b556,87e30be0,72841fc9,3f599c81,4a750d7e,8965853e,6519ae5d,c523cb52,720b004f,ad2f03e7,aa3e0413,bc68efcc,c0617f85)\n,S(dd8e5b0f,be63df6f,5c20e447,778f923,2e1b2c22,4d28cfda,b2c672c6,66d05f8c,d8b75f77,f955219b,d4d95e65,35d5cb0d,23c2a1d1,671b9416,2da9c4c9,b2d4a94a)\n,S(78ac44e9,938bf51a,691132e,93ec3a42,22be3185,35209054,a76b87c6,645e0252,c0f66cf0,3c20dd,d136d1f1,cc00eb17,efdf2a4e,72d373a3,99c20da8,8342299d)\n,S(d53110b9,5034e916,d904cd15,1170761d,4f3492ad,9e257265,3ef37739,df9bb035,c091177d,796d199e,5c05abeb,29d0df1e,e5ceb93,d272e6d,d254b6d9,a6dd35d8)\n,S(868b2732,3debb9aa,60942498,3be71d0b,451ea44b,64c22225,2af3d63c,3eb512b,8951dd34,39774c8d,89cf4b4c,485889e3,df2503a,102ae568,c63fa74d,23ee659f)\n,S(672de7f2,34e96153,d83da7fe,3e199099,52ee988d,961620ac,b8c6b4c3,520fc50d,ab02a8b5,2a2d9306,8a83a0dd,23ff882f,b1052f22,72a0ad11,cea13c63,4efa33a2)\n,S(4887f473,af8189d9,c46ae22f,c86ba6e0,f03c81a1,490de032,72b07937,b63a7527,a2e7a713,e1e6691a,ce09dc0f,a86c92b0,a0097899,7fbf26d3,98581731,a577a21d)\n,S(f97ddd77,38bb419d,ec051fcf,a93753ff,e3dfa122,6cf02e1f,23afb376,7a121440,2fa9c241,f747fcda,dd09139,437eafc8,94e7a47c,ec8a7ffa,1e054ce9,21d73243)\n,S(ebe75f9b,2c92af9f,11eefb04,3456f6ef,f616d1ec,b616a9e9,9e7f8960,4f1d62fe,40b5cf37,b06cfb0f,294da3c0,f756c867,af06449f,e2a916c8,a327117e,9a47f74b)\n,S(10d376b1,1f0138b3,238deefa,b57dc84,7ef66849,14e9f120,1a9619c6,b1715a13,a216f393,1f398b67,d68a2888,1d5a31f6,e5e0da82,e2b5060,4c6f6322,9cd21748)\n,S(69e26679,f103a1f9,8a9a4d88,c973874e,db7c82ca,99e48554,37284445,b55517b,cab62aa5,13b41a9c,56ea455b,6a880b95,9d400bba,74e7a203,7b60ccb0,4a89b8c8)\n,S(3acf827d,81e39933,64e99fa5,63f89305,dcc60b62,44ecc0a6,b101c6f6,ecd5bdab,77e3bd28,40a99c45,30ab7767,4d8ed17f,f57a4f1a,4ab91732,7059114c,c06fadbf)\n,S(2e5125bf,9e263d80,7a220063,434f928,d9a4907f,68601eb9,829041e1,a7b89bc4,9810022a,d7d3c333,d7c022d9,d0779b9b,5807226c,9fd41e65,c3fc8e1a,a7a0b51f)\n,S(7b68da4a,197f6bdf,56948023,d2baf10c,9449d6b0,b18addc,49385125,e62506bf,85a92b7a,190aec87,bdcb9df8,42e93917,9254ae6f,b45e6764,32e410ef,4b28434b)\n,S(60d4b53,9a29562e,8fab8ad7,3b699550,3fe7d6c1,e2ba1465,f05c92b1,61dc829f,2c2ad439,8fc7c836,5b2efcf2,1e4d0156,1a753f5e,d945ef2,bb1a3394,203d07eb)\n,S(5a3a1bd,30250a40,d22aed42,71892b88,3c03ea0a,baba458,6b65cc50,4c79b107,9bf3bf42,df1637cb,80c1fef2,cb9bfaef,dcbff761,89cf9f5e,d00f0f4a,e551e31b)\n,S(9b9d93b5,6b70fc67,5476c6a,6913e173,11ed1ade,6ea7b810,b9c90977,a8f3707,ae01a481,7a9ce6ef,5584a48b,fb96a9c5,21d5bb7e,2bf73cb4,b71f4dfe,aa7da298)\n,S(44bdd82,86a3a4d7,6ecad7f1,ef66022c,6a49b916,3d7a8ccd,e54bb017,814d2f70,26d345a0,52034ce8,b4382905,f60f8885,e20afd4c,54df6d6c,ccd1c2e2,5d06adaa)\n,S(8de8205f,e44946c8,582dcbe7,152dfe3a,7eb85e7,bc070282,3c972727,54463869,1dd97d78,e12a92f0,cc2145ee,db4ef561,af21d3db,f3cb123,ce0bb582,6791a30b)\n,S(c36a713e,3d88ae25,f79b4add,90c6a724,77be7d9e,a62ca0ab,2d5a800d,41f9321f,2df57da8,6cf17f7d,63ebb85e,e7570869,cf90b462,e76af48b,641c07c9,45a638f6)\n,S(1ce37a88,f25b8b81,941db8a6,13a7d952,c2cf868f,e979bc0d,5f35410d,147207a8,7fab8cb5,f6611850,e541dce2,315a7833,3999041,5c18ab0a,718dfe32,e0ebe992)\n,S(e489744b,dbb11e61,a7e827ca,ad18ba55,41f4c02a,b50b75a0,353f4a2d,f504d575,6abad3b5,3ad97e6d,a301ff7c,7931f37e,55246ab4,c7560,363ff214,2cb9a398)\n,S(cb4ec0aa,c1cddaf1,c7a67507,5cad6762,cf8ffce7,6a06f76a,38bb88c4,5181ca3d,7f15e726,5092287c,d2ccf3c5,dfcda0c1,8c63f2ad,21c06a2b,469bba5a,d9e4ff36)\n,S(aee1c436,6b923847,40127dc4,150c6dcc,ea62864f,394415ed,9a39d539,adda44e6,2496d2da,97990e6f,5fb1526d,b93e92e7,8a011c33,61218d,c3d3c56d,952f8666)\n,S(a099ce61,d950fa1f,19abc21a,79c74021,472c46ab,d8f67798,34df0429,ba785491,c4dc483d,6d61ab1d,7578ee0d,7548e0b4,295891a1,39774c22,7d073232,f2f3ecfb)\n,S(6c57db5f,b194dde1,b8cc9686,fdb65fd4,eaf8aba1,84434344,7a770ddc,9055e429,2dfb48f1,58663b3,6a7747e8,4b5a9001,163ea20e,f07649f7,1d7a21b9,b11995e2)\n,S(f6efa15f,20b2e91b,cd7323a6,51e5d7b7,a8b323df,924c616f,21a7d6e0,e34d3c76,ed48a439,2bb4d596,58e75757,95a0a4d2,7443415d,7662a535,a6246d64,3804fc1e)\n,S(e7983476,a900be4,e9dfed94,42f575e6,4d9af362,1e874a99,576e06e5,d31485f8,9d21080a,8b0534f,6b2dfff8,9eb8172b,cb5388ff,d910fdfa,405ead29,9df779be)\n,S(88ffff0d,7b415f76,8c515d80,9c607949,b469b07f,3978caff,1ba64e,ce198ba1,6816bd9,ab0e773c,38b73787,2881e96b,8eaf381,b155b205,79b24a39,eb9e0fad)\n,S(e5fd2c3c,a1c85b03,3d93a3c1,261a5c1e,c4adb72a,7700405e,7c0bb108,d8fec1fe,97bdee17,50801ab9,a96e3fd4,ec4860,e59034e5,c02f9168,79b1e654,5a65fd39)\n,S(fb010f18,146336ff,30dee37,b25aa384,9588b83a,bf943125,613d2c72,c2f5b3c4,4b0ff7e,7a6f15c4,d377e92e,73c8935b,d2d9f7b3,5be91cec,da891f61,c7631bbb)\n,S(9be574b2,c28b1460,a1d67d94,43e4bb85,c46a6bcd,a957499a,179cc8f9,7ed33c2a,16aada1a,367def6e,d4f34409,e0ff5d41,f3854494,6a764040,e1109574,109bb310)\n,S(358e97b7,6799ae09,b80b6797,90e34630,3d61fd4e,71733d6b,3c90fdee,2ad44bf1,3eeb5209,175677af,c16a3869,5ff7d3a5,e9704201,b802ec33,50c6c2ba,c0ff4144)\n,S(2ed930c1,c941b209,b6e7cf3e,83971e70,9e36bed7,a4d3884a,faaf013d,5b589b59,ff6a5a5,e601377b,9dd974bc,4fe71e36,403f2cc,90b16834,b1beb6a0,98553d2e)\n,S(d86110c0,6e8b20a2,e6da1930,fbda70a0,d8c022e3,e68255f7,262168f3,2bd58986,34dd600f,9b7157cb,2ec545e5,c50b3f95,2f422b21,4afe255,b7337815,1f3dc048)\n,S(4e7ffdde,305ea002,f7dfadbe,e2da926e,6d2c2714,596fb052,7eddfe92,81d4fefd,fb4dc1e9,476cb2d1,3bef4548,9ab7ca86,6ccbdd71,4cfc937d,bf024f12,ff04eaef)\n,S(6ba04fe,47c4c99f,849fbd68,7e1ca6f6,3e00179,3ba3a08f,86acf668,df0afdfd,dad78b7a,9d34c738,31112801,91476b92,b8eff31f,fcaa6d,a0704244,5fe32e37)\n,S(bda2c2c4,86029d0d,b804f1ea,e9215150,34276a88,179154dd,d5d9f176,cd7f50ba,a70291fa,47b98bf1,fecd9aa5,b53ca619,41d62c9e,c8b02ea7,91c79482,afc8f1c3)\n,S(99801a16,4da92a6b,de6ec7a2,69c2798c,b421af01,5ec24c8f,1b090169,18980a5,3af209c7,de27a683,56f242e3,8805a368,66cf7780,60c2806d,76f9eb06,35c18358)\n,S(67fcf955,dba84390,638517f9,5792d09b,64c056aa,ba98acf9,d63c2bbd,df5f021f,96f96080,b5758233,ee15e8c4,7ffdc3ae,bbc752a9,d7697e1c,3ec3d479,4f912d2b)\n,S(c15990a0,50c2946a,e4518cf6,84ac9cae,1022a29a,bd88f8c2,c8e724c2,89b954c6,611bc99c,e4ad5b6e,3ac932cd,e2e70e0b,a3690ec,758bdead,5edb3b0f,b5b95d56)\n,S(c5261ad4,f6d03a0b,c15ace20,aaf95bf,94d9ab5a,95a45d90,6ce7a622,3b09d59c,5fd1b7a3,b22732c7,4b5dc1ca,fac99882,467bd80,53f2f606,ca5af8fe,6d741448)\n,S(b0bec3f4,eae81fd7,2b70027,72a49acf,46a5c50f,48358df5,e174eea3,c0da88a4,13a4cf63,fca873d6,cf1b8c35,ce25f439,4d74a5d2,f2fa2799,d4c3bb98,8b50ab67)\n,S(e3d32fa8,9218a38a,c503780b,dfe23dcc,e6a7138,d84668b3,f71b3fdf,891b6256,246ebe20,7ab7c536,8f7c9795,9e7aa1fe,69909d50,f4b24263,c32b8bea,7674b85b)\n,S(ebf3bd9c,1920f625,4c32467b,7c1c138d,3ac6a4c2,b185557f,6eeffd7b,2aae0d63,58ed82e1,25fa2241,2bc4397e,73009692,af1d5feb,f640a422,f52e5cb6,42d4bccf)\n,S(d062e72b,3dc76d03,5827786d,a9cbcb03,b710ea61,2eac883d,b7f50df3,fc6f7175,cc56b076,dc3cf1b9,e544858c,1a31723,33ba9848,a8c463f2,abf2c6d0,dae14a6a)\n,S(97444eb2,32b09240,fc596530,374da035,f5ebd37e,6c74b51c,8158eab7,8ae30f89,fa06190f,d2072bad,b9144f72,db18819,ba76399e,d171d4bb,1293c20d,63d70391)\n,S(3e1ffac8,15f68300,4714f302,1ed39460,d5e4d63f,6fdc445f,12d8470f,b273c242,86f0839f,8610c4cc,6ae85d54,b951441e,efb700e9,9ce54aa9,fb6c7988,a8494c25)\n,S(deef1e7c,12e498e8,6542acf2,3782ece5,2a02b13e,3b4e71cf,e39e79ba,541d2679,e039a94,f4b169fe,a13ed182,f9e541e5,2b117536,d90024e6,9f3bcc7c,988714cb)\n,S(69ed1a62,b3de5c,c5785b27,c7926e52,4ca1527,9f8a00eb,b5e1c247,a6c8265,9c5fce7a,84b79a67,9f3030cf,a179a682,cc22c464,11ffc8b1,ceb885ab,4753de36)\n,S(cdb36419,5c3be45a,bc9f58e,e5a499a6,ef58ff2d,296ff989,9fa987c6,b753f82c,34a1a6fb,7a6b6c95,2a604340,d2c30c15,69c46123,e5cc5318,833f3a3f,bd622e47)\n,S(c5749ad9,f4583689,f2ed313f,dc35fe8,acb6a85e,dd0498c5,ddcd4842,fa21c555,f22ea47,ba61044b,54ef967e,c8c82167,3d14d710,334784f6,a7b46d48,19f99cf6)\n,S(fc86862f,b2fac126,e4341121,c82a9e14,d7a48b9c,988b8458,300dc3a,ba10dffb,42339dc,e304641,f814327b,ca5a611f,3638d610,85826d70,3d94c76b,8297f6f9)\n,S(66dd174e,446ae0c6,3ded267a,faa20ba5,62131459,5576d10a,1e44ef18,69e36ca9,d93a449f,6d3fef4e,435f6fa6,3191b625,b883c303,1dd8b380,777b556e,acee9df0)\n,S(736a80e9,15b39c21,5e5efbe8,ed6f8fff,7aa826f8,5c940110,3c7ce372,86d952c6,4a9e17d8,9066ecb2,95447058,4dc58c36,c84b3d9a,30ea45cc,e62454fc,ae13e0ba)\n,S(7b747f80,f4a324af,e6042edb,d8682d3,1b8fe12e,19936844,b44c3e73,f6b7075e,c2684490,56e7633d,2add97c9,75079594,b9c0d038,cb864331,aebddd3e,18830199)\n,S(dfd54b47,e4d2abe1,c40e0a1c,2916469a,7e8a61b3,bd95a1ea,8b5fa182,903d8339,c705b4a6,761d2ca,49f87fa9,ebb4b39,35c3c633,4f6b7643,417c8a29,95515fa9)\n,S(992a5fca,521a86e3,dce0ccc5,fd1b2ca3,656f44c1,f4967931,8ccb7a28,7879213d,ca2836c0,496c75b6,4c56c13,641d0402,b64cb2c7,617c9fbb,d820245a,9321217)\n,S(38e59093,acc26364,de9cc5f4,de398799,54774d68,ed4b0283,2bde2a26,cfcd23bd,953c21c3,14ad2e0d,511d3f05,678358f9,eec2fa48,d6b24c9,6ed4efd5,da3b3719)\n,S(889ea31a,5969b77a,c41c0a39,cc5d006f,6ff14f22,a62a5f26,d736ebcc,f5df8239,4c2fa5d9,c2f0316f,dcd6462b,e7571f4,92aaee96,c3c888e5,21cfabcf,78d2c3f4)\n,S(f70e24a1,6807d5a1,8e15fdd,f31301e8,bd210ed,5d3d614d,82eec8b0,326d7b6e,dcf95677,b29a5ae6,15e2e7b6,c370cf69,ccec71e8,9569f0b0,5715963e,da6a34a1)\n,S(d6eb7425,9c17d292,e1b1a4ea,624e6876,a78aa774,2b14e94,d3fd1b43,562e35e3,c05013d1,4056ea0f,e5f1fca4,b0c74b5f,776a8564,ac973973,c929707b,b3f078bb)\n,S(df7cc5f2,69faf306,6050409a,6a03cdeb,8f33d1d7,4e30658e,e871de09,59701b16,3d8a28f5,f604c765,5f28dcf,b2f3407e,6a63db14,6b879fb5,bc785e65,59319147)\n,S(e6bfa4b5,85f6df59,7840119b,6a31d0e,4ad800ea,239bbbbf,a8a1a36c,f8c6b5ba,312b5d55,35402ae1,37f9a02c,aba859a0,22a8ba00,88a2305e,4afe8283,98844dba)\n,S(3c762a8b,acb68a13,2e3e022b,35634b3c,1907cdbb,261ff639,9520352d,fd94b3af,2ad358b9,65555cf1,e0027e3a,b93d46c5,b104324e,2c62f9b2,5f70930e,bf49f385)\n,S(b4d94e26,9955b213,8025e5a5,bc5ea171,c2ea6d04,9ab60184,88f47f7b,f6a6d3f5,197b20a8,81e9280d,96b5b4d6,ceb3fa20,38a28654,63e76ff,d0b5b401,8b59bd1c)\n,S(406e616d,907a0f72,12acdf3f,d5341a79,9b482697,88976615,388064c9,74cd8ed1,72730d26,b2698e29,7f62fd98,2a3955c,da516ebd,642d6619,2d33a915,ba39d0ac)\n,S(1762d974,37705ae8,37603446,c8c11568,c7878053,f25baf9e,e3bd23f9,5babdaf1,1db8fe6c,77f41656,1fa4df40,23662039,66a8f891,e5467b55,3a2593a5,1ba796ba)\n,S(f5fbeece,aa5386c4,d75c92a9,88ce6bf0,f957a0ed,3f0caff9,42f1f29c,7ad765ee,fa45a4e5,85ccc691,88426bd2,8ae561d,a2f59d10,e4bd63b0,4f8a53ef,1cc3ab28)\n,S(7e0d92d0,d12bb892,b87b8bc0,993b4422,cd1e9d95,144602c3,a2aa3c06,bc945ecd,601b1019,746bbd4,ba9bf00b,4ffaccd0,b1bf885f,57ec49d2,9fc91744,8aa70761)\n,S(64cfeaa1,4d4e0cda,db6b6a2d,9e2c2820,d2fa7817,43d7b2c2,8211b1fa,e17ee0db,f0b199a6,1a1856b3,360f519a,a6056900,7a0ee623,69e0aece,ea64f0d0,8cf568f8)\n,S(c90f70e6,99ba1a75,86073eb4,5540b3e0,80bc78a4,e811069e,f861b048,5f11c88b,7a8257ca,cdc7538a,13b55285,939c614c,14d6a94f,70509900,44b286d6,7eb84e14)\n,S(3edbcf0e,b4e5e640,f40afec9,ad370813,426b5488,3090f8d4,b72b1680,6694f42a,ede4512c,c4baf93d,f05c14c9,cb17b1c1,fec46052,c7087306,2214a05d,60743c80)\n,S(77adf15b,ae449ae2,f63d7c44,3c56cf9d,64d43840,5154473a,5948cc79,160b64d0,a1bf9aaf,7804cae2,c377f98e,86b75e90,6886d293,21aed43c,77e330dc,df9113d0)\n,S(350632ea,23e39962,3daa53d6,5a916f31,b2ca02bb,5bca1f58,35b85165,b430398c,41931339,48282550,bfa1cef9,94c28873,ee0165e2,fa970d04,e51f8ee2,b87916be)\n,S(3d6aae93,5ee4ab6d,46de768a,d6938703,262e9fdb,13bade31,d38fbd0,9fade000,62674fcc,6eaddef7,b971e964,5a688e32,14186605,615982ed,a09de4ba,13eaab23)\n,S(856e564,a155a29d,c1b739e6,309fbbe8,5ea4debf,f12a9249,347a5435,af674993,a0e6deeb,3777ceb4,6017ee63,caeda231,e616fda3,c105f0cd,6174a3b3,dea84256)\n,S(95f8b405,c1ca86fe,d56727ea,eecbcce7,32d2c521,415eff95,b3cb42dc,5230cc7f,c8c66b1f,2637df4e,2a5375e,3a2e5e4a,a89404c,810322ce,c4b2bd1c,91163ccf)\n,S(b51de213,54aa18ed,6ea589fa,e3b92d90,732dad07,6c80b842,579d53bd,2089e0e0,8f069737,1baca2db,208f7db4,c43a85fe,d816eca4,e35fe95b,780e2c4,a3f1b948)\n,S(e36ac0b2,c4b73783,7a96b372,b8d0779f,41605e99,2a0013a5,3c8eb4eb,d5e2a988,d41ea6e,ef06bd62,7c2acd2f,645acd8a,75e353c2,448aba53,452787b6,670eedd7)\n,S(4d08e46b,a3e812b0,67071dc8,b76cbbb2,4effce48,cf4a4c5b,ff4e15af,71c51635,fcbf2dd0,ba055845,b70cc545,5a8658f,39ef2176,9802fbda,2d3ab98,ba914c3d)\n,S(31421774,5b1a6b68,918e8afa,4e8dda05,6094a6cb,6024c3e0,c10fdd99,245d7501,7ea6ac19,1c0db139,eafdc961,e8f91f1d,79269f69,cce275f7,abe9598c,2916fbd5)\n,S(79bb2dbd,f9afbc9c,f605ad45,4768cad3,14d48241,724b301,7b5abd51,6f8dd4f9,d1c9dce0,30fe1a72,5d100c07,d842a78d,beb689a,606a933,ca865051,49007b8c)\n,S(112abf7c,1d5d66d0,cbcbf42,1874bcb8,88d3b3b7,5c2cf36b,1399fc04,17525731,b3d3ee4a,f44b5372,8d0957c5,e388094c,34fe0f5d,c51abfc5,76c1e18a,c920dabb)\n,S(f6257a3a,60365e63,471fe77f,893a8ae3,174d30a1,9aa495cf,251812d4,c5040400,293ef8f3,91804cdb,34845404,996a24a9,5554fd24,185ec85c,3a27ef8e,c89938cf)\n,S(ee7c8ee8,bec75bae,db32c6f4,3b3b7a04,2c10e903,de9e7d21,5ca08135,d59a682e,e68a0137,398fb186,d5168e64,4421ac4b,30a635fd,c15527f3,e56b21b7,c0008ff6)\n,S(e292a4c0,fd63ec7c,c661ee1b,25c9d5c7,dd805a97,fc6e64ce,5d3d18ad,ddc92aa8,ede226,7fa6fe51,1d4a510f,e7f5e14d,8fa29fc8,b77d61ea,2e140739,29644745)\n,S(cf914327,85a05d41,2ad06146,6df68649,d3b8e0f6,86a83a70,d32c2fdc,978d8124,f74c1223,7b0899dd,53afaad1,b9b06704,c61c6e97,81456e86,ea55e65,96b0b13d)\n,S(88e58d21,95376fcf,b3f0c44c,b013f2ba,3379ba55,2ceca46c,38ed48f1,263fe894,f2f38177,bc673cbd,70853432,6ece1090,5863ad84,1140c59a,2a782af6,ccbaa71a)\n,S(90ada18b,df0c62d9,dfa35e14,d1eab9b3,48d09579,f4e82cb3,65dad65b,62ba53c5,2c4e704b,fc9a9b97,7d330d92,602c677a,4a06040,74517775,d441d0ce,6c5e5e2f)\n,S(3bdc1eca,a939c8b8,c164e5f3,1a02a6dc,9d2712a4,6c30f54f,e2159934,d492d1e5,e53acd26,28f6e646,edb5f53a,d9e1639e,43b4ee9d,b61a3545,a9874609,9b3c1e94)\n,S(54a206cc,48c7d529,c8bd2ca3,91501ca2,1b58f5ed,921ba11a,95eadfab,3a720bf,83f4f820,b9a07ae2,8c5e137b,c9ec4f0c,31c875a4,b055b0bc,8de38f74,c54c06fd)\n,S(2754b021,13885a9a,f44cacd5,2999a03b,d16c90e,4e3a7a67,cb3426df,f6abe546,f8969b1e,e955f8e2,dc0d3090,167c0116,66beaa68,35bbb1dd,e721c4cf,768ef566)\n,S(ae438153,4cf07fc9,1dd14a40,68b3cfe3,aa6e608a,bf1d1c1e,13ac54ee,e0759165,e7807ae7,395fd072,6f77d7dc,956c58a0,69243b63,32bad336,72d2eebd,662fb99)\n,S(cb9d28c5,357165dd,fe18010e,4263e626,65fd6315,60ec8126,c7b60603,6ec067a1,86879039,f3264d1e,511fa8e2,4298c9ed,6f1e7625,897666ad,4db9a43,3338f5c4)\n,S(763534f5,52317771,551524ae,7ce33579,41da627f,db77d4e1,a9cf72a5,f182d276,9fd8ae13,b1706cce,ad190066,9b1d2f46,8c177970,b5173f76,55efee54,ec5cd8de)\n,S(3990fb8b,39d529d0,b2d38432,3c60ffdd,3b32f7c,278aca88,f49f1523,fa16ded5,e43c977f,427570b5,b238edd0,77db9df8,b1b82e20,b73b8d56,84a2ee37,886edb83)\n,S(6b76502a,22280e31,d0b6375d,6dffef0a,94dad7bf,e640a406,2ad696fc,2744cbf6,e667122c,b6861cfc,97fc4ed0,e6193883,c79a896c,79e31603,a67063d2,421845a)\n,S(7ac03be7,2ff15233,5ec9c349,98e77ff7,79e5f348,a49fda4a,e52a69cc,6b02c02a,74a9e36f,af0ef72d,b493617e,9474b112,593de375,c845c8dc,c1028ee7,9fd17599)\n,S(31a83e18,c03c570f,31c3ecbe,bb787aad,6492cdc2,3e07d3a4,43b56ca2,51c0888f,3cbddf10,9bf08e81,830dfa49,d4d3cf95,224b7a4e,fd6d9997,9dceb64a,a8d7e440)\n,S(ec13f2e8,53935ae0,705c2644,d1512bfb,8ea4adaa,d45a454e,f761dc68,c7ace561,54139641,97e2f5c5,5b4b7f5c,5267ea7a,bf36b01d,cbd62765,ff56322,c107f321)\n,S(ce8e23cc,aa38e603,70defdd9,37803f02,18ae79a7,3679c363,4dab15a,bd46004a,1ddcf92,92ea77c8,4a1346a,a5f79f13,26c9092f,14ce1992,dfc24bf1,a2da35d5)\n,S(77d80689,f7cd8585,fc03cb20,14d02425,3b547962,a282beff,17aee956,88292ee2,466283f6,429248fe,301e18ef,61a89784,47142fd7,fcc5c496,36dca83e,ae8e9f03)\n,S(6eed61a1,4e7e7ea5,54a4e43a,61fa7eb8,b8e7fd0d,52de9ad8,e4e9b130,78178a5f,2cb4d228,90af9cb,a3c050ab,12a3dd53,1f1c6d6a,e4393449,219d86e2,6465bbab)\n,S(10cb3737,a7916d84,12c955d4,32d1ad46,d8c7a60a,e44936ba,f62b2a26,b698e4f9,35499a5d,11e356ad,fc5960d5,8d6842e8,ea0615f5,e8bf39c1,8c217cc6,7a1faa97)\n,S(e866ac84,6040f92b,c52d298a,6ae110da,e16bc797,d6958858,1f63c00f,6cc68211,257803b9,ef7bb5ac,59c6b59d,32a49d53,64c6659a,cb0482e,a9d57530,4e244f90)\n,S(5e75ce15,aeb91c2c,e4ce06a2,decf02a1,db85ef5a,a43c42b6,179d4a,2eb4e404,a08d537e,529a6654,a785969c,8d8b0b86,e3a76f91,d9b72d92,992f8215,1b61bd1f)\n,S(fa80c52a,12afecf4,7a5b48fd,60fa35b5,ffd122d,8616ca07,1c1271a9,bfe2c104,74487acc,dbe2e60e,e054643c,37cd624b,3dbbc3d3,4aaa6009,9c97cfe4,b3d69e81)\n,S(ddec1720,dca13ec0,2eee97cb,445044e8,d6b049f5,694ce5a,efa664d9,d89b6dc,122b68af,feed4f56,b72a4a7e,e20a7f8a,8daa9883,9a797857,8dac0851,1b843872)\n,S(85116566,57b70a1a,96c5da0e,fa5d3025,49fcd00d,104a4989,442ff143,a08b5a59,2c96bdcc,430c6c28,9d54806c,9c17961a,8121b10c,5168cfed,a0dc8edc,9f4f551)\n,S(7de80b36,89b9dfe9,de2f4fd3,4dbcedba,9ad39842,f105f580,d8d5f6f7,e1eb3e58,43d20653,db727ee6,155998cd,f7bb70b0,9be15c7c,a04593b1,398b4586,baa3c417)\n,S(e66179d,366fa7af,a982c480,9578d469,91731ce8,c669d8e6,bdc399c2,a2484b1a,9371d856,28bfb10e,d07c3390,b9f08222,98793229,ca2cf2ee,75d53d2d,e8144441)\n,S(1d435048,d7b8bfa9,6df91fa8,f8f6d1ce,913bce85,c2c7a1ad,cc199afa,5da012f1,4e389f26,4f36b2c9,296934ad,5f567eed,30f3179d,6538ef70,f4205219,2c3eac82)\n,S(5866c91b,619f53ee,3256772f,56191a35,23696c7e,2b5140a2,89f36c11,c1cdfca7,67090999,33ade86e,3a5d384c,840fc584,2a85087,10085798,913c41b0,e2dc1737)\n,S(1e06d768,20c95907,405fc2c6,bd75e1c2,fb9c4d0e,4cee156,94e1a4d7,65a77a01,4aea359f,bd26d7a6,1b1e9f75,5544363,27eea590,fd2d5eb8,87ece7c,41759674)\n,S(ee415cb8,5e1ef106,28c149bb,2d2f9e1b,a8083367,60a7b56a,f122cf4c,9b59e5c9,f52aeac6,e2fb8a7e,ca5a629f,b431736a,eec16a06,c1a4b876,94ad8bed,bad88ae0)\n,S(42da5368,b60f85c0,9f52c3c,9aa82e66,4868ee37,4b1851e,d37ba6a3,fb717e6d,71f65b16,a3937a5e,b535da,ec530798,d1c91c88,722fadb6,580510bc,5f27ed65)\n,S(10bf9254,6300aa51,bb08f849,5acf4e53,b1eb4e57,1328fef8,304189e9,7acb81e5,9b519bf3,482c9516,132388c6,dabced4d,971d033c,52bb5607,6c788a37,a9eb49cb)\n,S(2f6456be,5c2c184a,1dbdde7c,2dff16ac,8f504a9b,d86de1a7,d9d3c1b2,bb0688d8,6bcdc62d,4e6184ef,1fd39720,55da6e7d,45cca6d9,4d15c052,8ddfa715,4aa68336)\n,S(e68e8fb9,beec6d15,207e7017,c3574e34,102fd7f6,5e5f18f1,e533487e,5bb2fae5,13624e45,da0b6edb,df4ae938,82148590,63094aac,1b25d534,f80ca56c,814a944c)\n,S(7d314f19,4b776d00,b946825d,f634f763,e0b5aba9,b1fb0424,833301bc,ab1e94ab,80d402d6,a8dca19e,709b9e23,4dfda4f3,9f9f758c,928c1b9d,842b2d5d,aea3fa54)\n,S(fd78e68e,5b5b9522,14b35d5f,a0951f4c,4d5df056,28c5bafb,9c6144e5,c2c33a49,49c62b9,aa91e5f4,be13a209,7f941c9d,cefbb300,eeed9fc4,a12c1e45,37f4535b)\n,S(e751f61a,11e0b68b,205fd306,9f4abab0,b2576131,3ac3ffc4,eb4c525b,f2b28f6d,aafd8f6,2fe20722,b180ba67,f9c3b6e8,8ab2b96,956d603c,868a8867,c09ddba5)\n,S(6db64d2e,281e6734,a8908de8,554dfa93,d7811f01,2852a306,9e6ed59e,c09a4823,1c1276a9,1de36164,309d83a2,d9fdd003,d889612c,6026817a,cda97f8b,d2cec77a)\n,S(4de91b17,fc227eca,652f8d15,8cf0c696,c6902df2,b44a02ea,d05dfd68,e408a17e,130fd485,d59456b1,48458cba,922e9ce7,79968340,d7e5267,b2f288d9,6df924ae)\n,S(356ceb61,8c57db92,931a305,4537ddbf,8bad8cb0,c13f447c,1c3fa485,5c0ba01b,6f52d242,ec189e41,d8ca010,cdd645a0,8889206a,4df81651,1e820e0a,74bbaa7)\n,S(595d8d68,1ccf61b0,456ec03c,53cc5a93,85e553b5,36033f8,ec56c575,db49cce3,773b50cf,f0718e6a,6a269cd9,65b5001d,f5613238,3e279bc8,fb937580,a76ad035)\n,S(b076afb7,234e8fd4,4107caee,8d31338a,5122d785,4707605c,2e5dae93,2e6c935b,a18e661,1921080a,84a74df6,15006847,981b552a,4c3021fc,93967c64,b19d629f)\n,S(834a4467,bada612e,2705b0ae,19fc9f1c,b80e6e9f,7c4c01e,5899fba0,1f60cfe9,9215b4e5,f8194645,813f00a8,58f77324,e28522de,16e93e80,93197310,38ed9af8)\n,S(d00093b1,ba6eea04,c08df30c,90b2f7de,6e13b42,c645b01b,127003b,5642aae0,87739294,746ec547,4497a951,c26ca6e9,12ae4638,1d0e2804,5363fe26,de088434)\n,S(66a33bcc,71bb2f0b,ea36e5d0,f1446ce5,f3d44a9c,b715e6ba,ed00cf70,4c4ce1d1,27d0f5b1,a40fb2f1,e1f9440b,c1c15731,50efa23d,b8997928,cbdc0e03,2824a6bf)\n,S(ac65226c,dc40fb92,a9632724,20983b87,9e1a7615,fcbde26,ac9754ab,408211f0,ae633790,687f1c02,52115aff,3a7d5c92,9064bbff,616b5eb0,87d5c1ee,57cf8d3f)\n,S(a4b98213,78cb0e23,d46b1359,43b354da,3825e27a,76f33334,147a3ee7,52a81913,2786a9fc,3701a6e7,caf07030,3bb382b2,ce6d7c52,42496130,13382f59,92fec4e5)\n,S(6f58e6ad,e4af1dcf,633d3f35,8ac86836,cf0968a,49c2e85f,2434ffb4,2475a34f,70e30dbc,dd567c8d,a6aa970d,3131009a,f5297a36,f80750be,6462f1e8,336db9ee)\n,S(9bc7ace7,d55fcd7e,e67a0484,7d0d6902,f053288,ef17b3c2,64072dc0,ae0e94d9,7f57fd70,93f3d09e,53a82818,e5ca4cc1,6b46f73d,2c00e50c,698d5963,8a8f3f7)\n,S(248195de,ab1ad52d,fe739d17,a03ab762,927e058b,ae666f2a,4f7e220,3173bb3d,1b1914d,3dc9f584,51ac3346,d05f033a,b793277b,dd80262e,d2ffc219,6965b96)\n,S(f6008de0,21c5cd46,d9d811d4,4070a7d6,46105a55,2a68c389,a11161ce,9baaae2d,962cd254,e5b0d724,5ddf7114,32ab2800,16f5583a,b8fa02a8,61b7c3db,eed77d91)\n,S(f6dce5a3,a919eab8,c1d850b,4643dd3b,96e5c7e2,a1923b58,202543e5,4ece5b40,c1b88f2a,b3d516e4,7d289ecb,b16b9bb7,4082a6c0,8ccafee1,21abf691,73734c08)\n,S(23fd6281,b4958fb3,b94ac9cf,851561ca,415cc979,7ed619bd,15192ca7,7ad39a71,fac12f70,ee38f19,b2dbbd5c,3cfe02e1,b69bbde8,7a45f8d0,bdfc909b,640622b0)\n,S(da3a5c2d,7cdeffda,1ff2085f,fcda0ded,eb40bd40,3591395,e4b20b0a,25a1aa8e,e0d90d58,a6cf6038,10bf2891,d51da508,77d3aaad,5ccc971d,944ea960,c943e3be)\n,S(22113f6b,8015b2f5,bbff28c2,cd5dc253,c495cc62,88361c27,3e788aa3,58a94554,7b6f7bac,2db4f198,20ca6e90,bab75cd0,983536bb,80051e6b,7da589ee,dd2ae962)\n,S(3b59d8f,d59a2e6,89c9d1c8,a4e2515e,73317cf7,41e38108,eaad880a,e3417c72,bb96d412,50614b50,8903c28e,b5d39ed5,b4e735f2,ea10bfa,1265aba7,f21ded5)\n,S(3407e5a2,4831b572,abc0eeaf,c587b20e,9339dd05,ebf395d5,378cb151,e0dfe661,49214182,78e4d0be,31cd4e1b,9b0458b7,7e028840,4a0745f0,40960dff,b9022926)\n,S(9540e180,47717f7e,f6ce71a8,31368919,e4acbfb6,18c1582d,cb4093f7,caad2601,6fe0f64c,3f0aec37,5b36758a,7f65c7b8,e9329f62,3309900,efdd58f0,7bcf244)\n,S(bd02f758,513ef045,af72344,f5d790cc,1c549a23,147a2743,b8c0cb30,891af3a1,3c605d60,13a560d0,d792c5a7,6ae2f739,7631ea13,7347864,4c6bbae6,dde96079)\n,S(43b10d72,cf1ba39b,17abb149,884fd00e,56525f61,594f9654,48683c16,88f3e69a,cbce7dc6,1bf71def,95bbf6f2,fb03751b,8a0c6350,9eb9ead3,713366d,8cb71407)\n,S(32900344,9ad58567,6ba2607d,c873a8f0,80d9c0eb,2f7314cd,9746008f,3c569642,8c6560c6,9a037d5a,3b2e740c,270ff543,54abb60e,b32ce5cb,4d18ecf8,1ab7ef60)\n,S(a1495bc1,91188644,4991e097,5334c9eb,cc277640,f568a7b3,1350e4b7,222b885a,c5a1c341,67cbed14,7f28f794,d9d2867a,9019948e,56f986a0,e69a0d6d,6ae7dd1d)\n,S(4640f683,f180cf5a,4929c2ab,5169de2,85861055,67c7c2a3,3db2d01b,c3c8d726,7d6ced33,7e752ab5,c87fb211,903c3a91,e5b0ee78,361a43,b716754f,d0daad8)\n,S(91b3f9d2,7e989062,ced571ec,f373ff66,f8775213,95e625db,7d1b5168,e895473a,d7efd35f,56ffd001,bcf0191e,2692e832,99d0715a,edc1a19,2b74d8f3,c0b23b80)\n,S(437cb866,aedcc0d5,8d89a41f,95cf5dd0,b355f244,7885843f,c163d54,a3839db3,9d644bce,31992f2f,302c5daf,67e42b78,74bf3f9a,a944e936,aef17203,5ac2bddf)\n,S(be8cd347,572e0e46,5c745c83,26799611,a5ebb1ad,3ae74bf,474a6386,6f4a3705,6d39457f,c1010837,eac6bd41,bd4a245e,10bb39f1,77c5633b,92bda8a2,c50a3dd0)\n,S(f40a76f2,130d31a8,c560795b,54fa119b,153a9a75,bfe7dd28,cc00ca35,2d258331,f92558a4,69f1055e,251c8814,7a94dd08,44bb2048,31f2d33f,d95858bf,dffd695)\n,S(17e01809,b94d294f,c4438a92,6f90a295,5a9ed96f,a201df62,b96b19d1,7e837876,c9506f35,8efcf330,35603c30,880d5625,db15175c,486f3c5,841a14e8,8e5f4e72)\n,S(7dbc457d,7ad4752f,8d57a09e,d4e8cf02,6c8b009c,bc29afe5,ce2ee745,61630da9,fea9908b,ca852ed8,3c1b44da,207e8bc9,221b8dbc,7e8b61ba,ab8d29b4,14eb29de)\n,S(89fe19a7,6fe2208b,ee4de72,249a503b,88c63e22,71794bcb,9484fd11,1df7902d,8a4853de,c3cd9e1a,713e46eb,e771ee97,b88defe4,7e1106d,88ccd713,4e3a6779)\n,S(3753a13f,531da9e3,5569ba37,7db76dcf,b43b5483,1e65fd50,a6ea560e,e70f3eb2,ace8aec3,867312f4,f095b4e0,d08ad314,2005cae8,b1369223,d1301e29,8e51d4c8)\n,S(30d76056,384beb45,4c54b4bc,fcdcfe0b,1c1ad5b0,5e693384,8794846e,c93a144f,f79b9c96,8eee678d,b899f349,412bf193,5da9cd,c0ccdec8,2e45ac5e,58f3d3f)\n,S(d9864700,7c74872b,40ec273c,59aa149f,8059a1fa,95e5b47e,378ec515,841eb2fe,782a39eb,ea47da96,9361a337,c5e2cc0e,49d43dc,6c6f9da6,6952f347,ca51845d)\n,S(40d665ec,53720f95,42ffaf3c,30e8602b,53c52123,e9dd3b91,6a2e9099,8d534fb2,cc420012,490afedb,d840a466,bc27f66d,526a965a,ee653886,8cee46a0,6a58ee30)\n,S(f31507a5,516719bb,f07438a8,7b6d6d93,d02a88ca,c18fcec3,9190f358,bab3647c,dbec3898,f884cb2,aedfcdff,402ca4ec,8c8f8727,485060c6,8da0d2e4,edb46eec)\n,S(62573f5f,75db743e,7939137b,6b5e1d0d,41468ed6,28d2b76f,ca26ed2d,22532c03,9a4da6c0,d7966d8b,138497df,af25b0cf,2d14215f,ff039065,d42897f0,df33be40)\n,S(d0887924,f15c5069,1d7ace01,7eeda410,e8d0a10e,f6091a4a,7b5f368a,42c54416,b2fdc385,527d34f7,a434c1a4,1f9fddc5,add3b1e6,82b63838,da0ecd91,16571c4)\n,S(f7585b4b,5f3318b2,2307f34d,3e4bcedb,d4b91eb,180be664,4d031bbe,9b5e3d90,b6fd16dd,49993bd6,4d05398b,9ba7714e,798d3ffe,95393231,395c03da,b3ccc819)\n,S(c9cdc99c,198ca8e4,458e5473,3e5cc0c8,100fb0b2,2dc6f07e,b1e99d2f,6a4cdc42,c4c21204,67198733,a845efda,33a5c1b7,67cd8ad3,47a16b6d,4a6f5ac,995dd680)\n,S(1a054d1,5c4fcf45,384ead78,e1260eda,dee9e907,84021c99,179a9fc1,c7a3ac49,50ac5d54,d4fad7d1,5fbff150,d70a3ce2,9825e79e,206f4279,f1030d29,2de89a07)\n,S(b0796a05,52245e66,56b3ce51,99864d40,aed71b62,3b9d55b0,d99163de,7a8e3455,a061fa65,63a84b15,1ef666d,9f99abcb,f1611e3f,6e26dae2,6be7ac56,c0f2768d)\n,S(66fcf877,6ea02717,aca92a3b,5c19387e,72658125,f6e20da0,7595e376,804c3738,9fc66cf2,3195dcdd,7a72225d,96a8c5fd,1c84287d,2189e414,d0deb6b6,76e67518)\n,S(3c7caf6e,d3da8c0a,effd832c,f5356114,55646982,3a62dabf,2ccb3de3,452ac96c,e44ca4ee,bb290527,4cf8f554,40c92ad9,6055fe3e,1bb344ab,ace5c4f,80e3b984)\n,S(edf616b1,1e7fd6c5,96df3fa,77bfbde,f3f82e7f,93e5addc,53c83933,844e4b73,879982bb,b89ac019,e83f5c,dac1fcf4,fb918e2f,53a5ec35,45be03e1,89bfe152)\n,S(7e9af2ac,b3044985,181de5aa,9908259e,77207ab,933c7915,9dcd7aaa,90527eec,e4cc83d9,d29778a5,eb83936d,97bad637,370e74a4,3254eca7,65d0a449,106ee3a5)\n,S(32dad830,3bfb015b,6aa6759b,c2e8d4bc,2a9e356d,92d97286,c92dbcf4,53591aaa,ee27e7fa,b36a2450,f04962f2,ee60f9bb,68a1147c,9ecabaf7,e0981564,c1164fd7)\n,S(d20720f5,73f1db82,c1a2dc61,d3684d7b,a3943186,cd513a5a,9eecd59a,c9225a82,3b29448e,cac88f13,7dcddeb9,36f02724,6819c6c3,3f03a2f8,cc40a6e6,f8704570)\n,S(3a732b5f,5dd6dc77,1d215321,f8cd223d,22f2195,9d45c708,5b000129,94d5f03b,3fc75d80,ea7a0663,c90cc7e8,8a6096f1,b3a8c9c6,9849ea50,f1fd5c94,7928cfc7)\n,S(201961f5,412beebb,7e190d75,70977b50,230810bc,b3b69e3a,dfb5e259,d811333c,eaa3f681,3816ca15,dfb9aebc,8888b578,e592825,82dd1b47,ea50cad4,f59b0101)\n,S(cb184267,70cd3b68,151f7d82,cf7a12c,dae332,868663ab,4546c119,fe26f4ad,6c395538,eb09c00a,3e973def,8272eed4,27a3ca9b,a77d1a0e,c4e206f8,74591a40)\n,S(2c13d3ca,9ddbe3b4,2920f0ed,28622260,2cbc0493,e5156655,30b53da4,7ae3ba59,f7d9f8f0,c58510b2,db28e723,6d9af034,658599dc,fae14274,efbff408,dfd18613)\n,S(3ae7b7a3,86ae6c41,90b3a0e1,e5f1a7ce,4fffc405,84f05043,93e716a4,3ec83d41,643043a8,55603964,c46e3ba0,999c73e6,ab34703d,9dcdf9de,1743db7,71591bd9)\n,S(b5eea0d4,ac4d0a9d,e37fb1d9,6825233d,a00f26be,86c0b640,f0fb34c3,465bc441,9cb5b93a,56d35b2f,2d921c4f,15b4ce0f,fbb9240d,30754ace,f16b3019,54732e1c)\n,S(dc049453,9b8d5200,d513eeed,edc2afdf,e76146db,358a86b4,12ae9e28,e8501e3,6f6f2d25,b331a4b3,686adc14,c26814,96004900,34524b53,8418fe5b,9776a3bd)\n,S(821e937d,a6fae1b8,3b6aeb4c,f5315bcf,77b2fb07,d0081889,80478765,cea7f398,41405d00,33224982,2acfc2e7,87be9658,7baca419,14b70315,c1a57843,3f85aa21)\n,S(818bdf95,f55a8e51,c0d08d83,29574c28,1ae3397c,f6ac5224,4d82ea53,8f465c60,bfd41438,46dbbf6e,3fc442c9,7a66e8b5,32445d39,fae8c473,51e0ee9,9a9a53f2)\n,S(e3bb3262,36533fd7,84fc6d9,84cc5590,2b03a19b,6c956665,322c0bb6,264b6d72,bbe4844e,2be51197,d8d84c75,ab83cee7,c9ed7dff,51eac125,1161e09c,c1078aae)\n,S(36e3355b,5f946199,b33dad7f,b42d1245,4cf8126c,568c4be2,cb2abe4a,b83decd2,fbd5d87a,8c012064,3ed3441e,ec686237,1759ccdb,4a7f564e,c2ff9584,ab824833)\n,S(bd7fc193,1b06bd7b,c6c274ea,73d33e71,1e1e57f1,e6bf7a8b,6452d979,777aaccc,95b84e3,d8c41224,c74451c5,ec8a23ca,35436798,c2f34ad1,b1cd095,2f0170ce)\n,S(b82cb5d5,2e026caf,bc075968,6e1c6c18,206231e4,f25c956c,b3a05690,8c72034a,6417cb0e,f1a18ad5,e1a2a5c6,945f3b38,b0522ac8,70188640,80a0f33e,2796b042)\n,S(47d70d51,e97fad87,fa0b1c10,43246c0b,32108c36,734c90ec,9de5a2cb,c6227682,6d5a2cdf,e916fe8e,8b45d5fe,14ce650b,79a3cc9c,e4f99aae,2e9c449a,a79a4a08)\n,S(13fa7ee2,5ea49c25,200b40e6,b9232eca,16dc6840,4f76b43f,510c8a12,d520dead,2722287e,35c9f98c,6041cb15,845d515c,870f5943,74a1ebd7,36f973e7,5e6dc30d)\n,S(c1350b7b,2a4e73bb,90d36674,771d5537,1fa647ff,c490726a,3748e7d2,e72fa7a,2370f4c9,403ba7,8e950274,bc1f87a7,bc80c1fe,7618169d,5c9bc5c4,81e1badf)\n,S(dfe512c6,f884588c,80c1ea7e,1da4b3db,ab8d4beb,60749f40,9402d583,ac793e05,b52da5f0,333b904f,678dcd37,a890b79,e985dbfa,b501e61c,89930678,5a0bdf09)\n,S(88da191,2face14,e6f5ded2,30d303fc,867f9b26,d85c2299,bfac1a23,9757b34f,4236025e,f82eab9a,f1fd3c12,42a73cb7,fa305e5c,ef6ad5ab,ea62cb8a,4d74bbc8)\n,S(b7a82133,7cad0eb6,c1de7b3c,8aff8798,8ee936c,921a7dee,1434156c,c6505abe,d03b693b,4fbce189,a552a66c,3ef4586,35454006,308c40ed,c7dbbc29,75361b7f)\n,S(44971116,c14d80b2,f0f88829,fa1fac44,ac44124,11ac6e92,fb898e72,a0aa7ed3,9171395b,3cac83ba,18e9a0a0,34fec786,986534d,667b0521,801638ec,e19343f9)\n,S(95f0aa61,8bd8573c,81b2dc3c,aa16b577,6ee636a5,a8f9c963,b8a45370,7f35a618,7f2300b3,90006ec7,37365423,2b488d72,edf5192a,a1d5afc9,4bc95a18,edf5532f)\n,S(e1bd29e8,778a30e7,d9d91da2,3db2da23,bc2e8d08,d5cd170e,8e753e3e,917b728b,592894f2,114c11d5,f04dd5fa,6b341cb8,29c58e1d,a7adb51a,19d881be,39f87eee)\n,S(f6110619,208f64ea,8f0e8164,1ffe9f32,8e706427,87dcf8c9,28ca8629,adb99e7e,cff63452,a596744a,75c5e8a6,badc4937,e6f2c860,39196251,30784499,733651a4)\n,S(4a3f7c9f,1ba0f01f,d6d42aa4,284e4481,ed1433c9,3248da63,76f25b62,d2d2348b,dcd4c18b,2ee4e447,3515c727,1467e6b3,86b6e640,834598e1,4ce3f679,47f5c2b3)\n,S(50fc4d78,3964a68,b26689df,34d996cb,6f229f2a,ed017a98,4e027407,5fd730a,7ccd6964,c6c5ab52,5d31db1b,ccefc3e2,7a0882b5,8586a955,b76c754,9698a7c6)\n,S(1bdc6b52,e92022,229cb15a,6436d601,26c640da,bd9697d8,bd0c49bf,606ce554,1ddb0cbd,e7b0816e,b65d7ea3,98da0744,b3ff390b,d2e13cbb,f8fe85eb,8f3d2059)\n,S(62dac912,48f29712,c3126524,90db807a,af92d3fb,36117f6a,f5c7f5f,de317000,b3bc4dd8,97a2fcf7,483c0015,f793810,29bf6f01,7be37530,18b55e35,4250ee0d)\n,S(ea552caf,1d0810ff,24eb5089,31b57573,d8eca976,2b314f9f,38301b04,ff5e2193,68181368,108c4fab,7c58bcdb,5bac3a3e,31eb1b3b,837c7ead,e691b56d,e24aa832)\n,S(7d6132a0,9e2c0af4,9e3359de,a750551d,7addad6,8bdc602f,e65af48b,bc1127a9,5bf6234c,903e5f72,45b46187,9d780ffd,72aef438,c0b65c7c,d0b5fc2f,8ad29d16)\n,S(916d0d6a,3d08a94c,604c34ae,8c930edb,5ad57532,4dd5fadf,7a4841b2,775c475d,e3cd9b7f,79572001,a1ad9c19,2921ede7,64b12210,4d4d8796,a435eb13,d883d391)\n,S(804128a3,d982b50d,203135a9,c59449ec,c43ebb35,b2bf5266,6b710975,a3847524,bcebda70,4364414,dc269d2,6214968b,95ad5bce,239ca9be,f10fa1bc,d6f31757)\n,S(850314b3,4898b572,5898dd9e,f39196f3,cabf4026,8248844b,1c3d2f55,a3346f2a,eb8d17e0,3c9f7fde,29276d95,c20b657f,af2173e3,7c620a0f,d2ea7ab5,f4706b33)\n,S(fd879539,8c0ee90b,89aa731,a4ab60b7,be0375fb,59932879,7bd73390,58d7aa8,3fd62aa8,35d10f6f,8bf3338b,b48bbc33,8f235cb0,6bcccbe7,56716129,abe8159e)\n,S(51536953,12e7c4db,bb18ecbc,26c51224,8f841792,e557e879,8eda9db2,c9840357,175d3e7f,92ddce9e,5595fc26,725f2c09,fc322b2a,251fc323,ad3c6f08,44badaca)\n,S(8783f2c5,f7325f73,e5941ec3,5f91449d,558e31f,28af335b,2fde477,86aa2808,dc602736,ccef3e41,60b100a5,ef99c6e5,c59734c3,42b545e6,21d9b03,daf0030c)\n,S(c871ab31,4afd8d5a,a58a0cc1,a5eb49aa,f25b4b3b,6e0ffcf5,38851576,27c0726c,d06b7e2b,f44d36aa,fcf653df,a675bbe1,36a18938,60864df1,fbc9e604,5a3707fc)\n,S(40efd5c2,1a9807bc,b34a44,71066619,a2bba48f,c306293a,ab59d9c4,b30e9b23,85cf348,4df34dad,2f7aaee7,b8a6f585,4de1314c,215f6f0f,e5a38e61,f3decad1)\n,S(7feb5d9,844798a0,2413cae7,cd791e6f,54250fb8,12f998ed,e0ea6eb1,435986e,d90ca7e,8e800e6f,fd0ea027,b8a379b3,9030a03c,7b111d68,465d2a05,99dd358d)\n,S(1b2da7e6,f9fa412c,ec873512,7328f1e9,ea77501,5741a284,12018290,76a79b2d,9fe58682,ba3f6ee0,c7b73933,d14ce656,e3fe49dc,ec7a5643,efa07a3f,1a4f26dc)\n,S(d7fc1f3f,7a6bcaed,1a84e8e5,7127a6f6,37d935a4,35500e21,47e8fe03,d3b06066,29938603,d89fb118,14d33850,451f5c1e,bc5a5943,70c2d8f0,1d9bed34,f0b2e940)\n,S(45352264,1cd962bf,35d8ab65,3d8d6c97,75782706,1454a2ba,3d957152,e177ee5f,de5005a4,3989b6c0,cee0a71,b534137f,b946b262,bfe353c9,6a217c06,c23826b9)\n,S(91733546,dedbbc4,c7c32af7,760e0a4b,c2bdf82a,73e2a91c,2d70afb1,100b84ab,e60a6ca6,f2a5b12a,307cab41,8793b7c8,b7ecbaf5,18166c61,acee16ea,83071a3e)\n,S(26bcacdb,bd4cabe3,e7adc5b9,27465ac9,616725b7,dce240e6,37117a5d,80a9ffb,172208e7,6603837e,4a9cfeea,22bc6002,a5cb8f1,36d73dd7,ce30d010,acc05db5)\n,S(18b520f3,e997b5d5,46a1d81,ad95c52e,7841f14e,11e9d677,de918fae,7bd408d6,51b0cc1d,4c6ec5ba,e6c587d0,d6489663,dcf74bbc,d93c4839,6e4203a9,caae57e8)\n,S(e25c2492,b7b25c37,cb88da91,cd76021f,de8511cd,27188b0f,d4bb4fe3,dd845e8a,244facfc,a7dfe65d,6e1d1d84,9bec4e4d,17af0d6d,2611333d,b8b7498f,96c88bd6)\n,S(97e572bd,300d9649,b9de3c8a,b02d4ce3,bfbe4ba2,68844329,85971951,5c34a535,324a34a9,39004c24,b2e55e66,83577259,6c9cb2f,84378bd7,e77806eb,75e77070)\n,S(4d31f4b9,42526f1e,769bcf70,85f39523,60475a0c,3f8d0a4b,c1fd6a07,a4765fda,27815d6f,3b083965,8fcbb540,925986d2,bc6d1fed,d1c254e2,9580f413,99afa899)\n,S(7344c521,23968b7f,7ee12500,e9efa4c3,859a72fb,cb1cc9d7,af91e6b3,b5bbe152,4794848b,1541a965,b7527533,a6d43398,d619df34,2608021,a26bf9a8,76e0e4f7)\n,S(1d099181,8da474dc,38e08fc6,d97ac823,be34f4a9,81adee58,806f68cc,ffe1ce9,f5449d7,c69816bb,6f04b32e,69e46771,c7910f3d,77cee6e2,af75c293,119f729d)\n,S(84607e2f,ab205637,4b708486,51e84966,9c386eb7,c6855a1a,837c8fb8,5da8e7c3,975b5227,26e4625d,cc5c55ee,22dc667f,1fff7c4e,417cb4b1,45bcb3a4,53180ac3)\n,S(3d2ad8dc,11a9103b,2f03b3b6,24d93114,83f4faee,c4b9bc22,f4f8f559,16bae70c,b4f79cd7,27d433f3,72735afd,64ef4da7,de9ac35f,98b3b6fe,5de956a5,ba93f9c0)\n,S(2ad5f6ad,c7fe8540,8b9bf547,a564727f,374e9194,460f6037,ee299f83,e842c883,f613f0b0,8e306fa9,fbf39919,e3040d16,ede4dc6f,9d45ce42,e63f4b02,70832f9)\n,S(ca92aa9b,e8893819,e49fc29c,dc98a42f,e23084d1,fcc37d19,3e9c638c,db0f2f93,462a5ee3,2bcdca5e,c6bf6819,32ded511,12ca847f,7e110405,a893b011,874a66a2)\n,S(4e435dd7,ce2783f1,5bbded75,e832665,e4b4cb00,b50e2a69,d986d2b6,d3d893af,cddec0e7,1615f7f5,769cf2d,ee649723,1218fd34,91a07fa1,fe619f2,26673042)\n,S(b1d936c3,fa1fea01,e3e28332,51f3790e,1e0f0038,58656e8,af53a72,118cbd6b,183b67ca,8039f372,d04b685e,c515466e,8ca1fdc3,7b2ae8c1,ebc5fb02,9c0ced9a)\n,S(77282290,d994b6db,10b06247,1b86caab,e4524850,22a1e63a,682f92a1,ae65019c,feff37f,1fee0cb5,569db439,a7697327,1a2e4254,a9125ce6,cd94fbae,110f6363)\n,S(acd0184f,18bb7c72,f7b6ac5a,7ba3f617,c40e159b,a3dea242,ed8e6c23,ad89dc82,3ab71793,fdf23305,aaebfb52,982a2603,e56d7b3a,5430585b,557d3406,42fddfba)\n,S(933e3401,91e41c37,69b60410,fc0ac56a,e5bb44a2,413921b3,d25a52a7,14015cf4,ad3aa53c,76c106db,6187f4ab,755d077d,c6d878c7,64181565,77bd5d3b,affad12d)\n,S(6e02abec,969eb027,bcea0303,6648fe60,da6a7c67,d1e4df3f,a34c1225,36de6fa1,c0283bd0,9fb2bc2b,19bf5086,f1eb5c6a,a7dfa258,64c73647,8a6cf0cf,c5ed5c14)\n,S(2b86559e,82e5ea58,423163f4,448327f4,2429f1e3,14097621,667cf1d4,f0af1ab3,35bcfa55,9e2a71aa,4ea25edf,f9e1c59e,2274ade5,9354e22a,9cff37e9,31258107)\n,S(1c02f45e,5787587b,9d68df04,66df67c9,552301d1,3b32f50b,8c9a2d5b,c826606,5f5de968,b39e9263,c1624aa8,811a4391,35150e,f8167698,c381388b,18a232f7)\n,S(d0a65374,7fdd0c5a,68c55060,dd4ed734,34956730,1997d07e,d333b5a8,79894eed,272fe0be,bb192ec8,9f2f64fb,43f3a3,cceff7d2,cf92cbf4,4ddd8fd7,b104b85f)\n,S(bb48b81e,e0dffe05,b6b8d05,5e1d2e5,37481eb8,2ce2bb81,cfdfbcef,bca5c6de,717b99e9,63d59e1d,66c0737b,9843231c,9c5e1bfb,26820215,78e8e01f,9e5a3fa8)\n,S(23901c4c,625d77bb,1d390891,6befda04,522c698d,3c4e82c5,227c3975,3d7bc3fc,2434bb8d,98ebf9bc,42459328,464c4a7b,b26f258,2d454209,af66edb7,e84effbf)\n,S(2a150d7a,961b5c28,434cf4de,ab9bdd3c,d019f667,67437158,c0f3fc38,54de70ab,e0d4756,9cec0eff,b155d7e7,37ee49d9,863374b2,4c6f4ac,876a80f3,7fdf7461)\n,S(d42bd53b,1de9e41d,6e5ada81,3b86370f,ec1cfe1e,cc8ace39,edeccdf4,e16e7111,e3d4de0e,e5cb0d3,e3dcfed5,a09dcc,28c9f1ec,969d70cc,ffbd34fd,d0ceca5c)\n,S(2a865f60,413764f0,d50adde6,4825eed1,134c6875,d1712396,938cd8ff,784b743d,4b628cf4,8e2a56b0,2142bf67,8829a388,929a0c0,5784426c,ed114f21,ca1dfade)\n,S(2189b2e2,e88054d9,c71c2321,8cd229f8,a0165a15,650d1557,3eccc450,671817fe,6b9e0fbc,f9b9c354,644dd8df,3ec14217,66fb6783,5c698a1f,d598d074,aae79d19)\n,S(e619a8d8,d63ce9ec,7f11cde4,1cfd33e9,62884fd7,471a4e67,9b9fd1c6,8537fefd,d819f364,5438c886,915f46b,40fb5c6d,6932077d,6f9726d8,86b9ddc4,d5a552a0)\n,S(80c0df21,91bd2fa,2fa21bc7,ea86e54b,ee25d9ad,43893869,1cee20a9,b5792763,b27d7eed,198a695b,405cc3a,9204242e,45833ab,3b9feaea,f81db33f,938dde53)\n,S(cb3926e1,eaee7f44,6f2eb390,64d4ced3,cf8bfda7,9c54a25f,6894be15,61c2d02e,35d9e098,6612e1c6,fbc2dcf3,54022f34,5b2220de,139d1ca7,5dbaabe,46c69160)\n,S(82e82221,5dae0056,917680ba,a3233d29,23a2a0d0,68939d9d,2e2fe013,9aa2a8b8,f28975c9,b27352f3,f6a2972e,ef33eaf8,5d0d0a4c,673e3495,afb71869,e768bcfe)\n,S(6b48f2d2,d756c7f1,77d5d33,cf62e419,b32fe0e7,352e84d4,d3056571,fd837e52,d4741717,3212dad1,b476b8fb,7ace774d,fdd545fd,6f99ba1e,b701018d,f762ad14)\n,S(6cc8e1cf,ca1a026d,c1db0d97,46029b6e,b9895d7,61f66549,4f29cafc,1243b56,429b0dfb,ca05d077,d4d87022,d5ab333f,d9068170,5e246fbb,6861bd07,7e85b500)\n,S(fe3de551,3fc157b6,e5bfbe45,d88f9339,71ff5ad3,c436ca5f,21794899,33f01e9,a50a9cfd,8aee1546,c422c5e1,494dd42a,db36bf43,89bac501,38211c21,803be0db)\n,S(25140d46,a9453d6c,9370c901,6cb163a5,a5faf371,50152526,b01c7454,56b995de,6e00dcdd,82ee197a,3d5ca028,86fd7fee,56319f7a,925a39b3,becba6b4,c806cc11)\n,S(4b9c4d2f,bbd879a7,de69e578,a2ffc7c8,8a0c700,f27f2e7d,cb8e0c2,ba3654f2,4c876a6d,7778cd81,bb02c450,5867d448,c78e9884,c72af037,55a66d7b,848e248e)\n,S(2c11d305,3eb4b59d,8e8319bc,2b62624d,b97244a4,47326f24,6b83e959,5797c2f8,41e096b6,a1d2082b,c852782c,74a02cea,55dc09c,64b9d19,1265c1ed,9c306340)\n,S(9a515c26,394d56b8,77c2b70e,ba1745df,9322810e,63c379ac,1c2320bc,48baa2f7,5ccafbd5,d1dc3d86,4a7ac805,adab05bb,5eb27f8f,dfabfb1f,708b2e8d,42e097e6)\n,S(791a6bbc,91321ca3,6e017798,1a611cc0,db9d2600,34d2c26f,5f6fa5c2,ef7a5fcb,4cc5b203,db4459a1,f396cb31,acbaf9ca,18446f1c,cfded245,a3b32100,38417ba4)\n,S(ad40b691,d3eb6ee0,e22e6d7e,1e0eafff,7afffe6f,2e0e3b75,103001f2,3a9653ec,ff7b436,47c2e09e,84f90910,2b2abe7c,2d38dc2b,151abd2,4f92d214,5607cdb0)\n,S(52eeb361,405a56a1,331e3fa4,b854156e,7c403961,240f6003,135df1fa,8f3e475d,128e88f9,1f089e60,61d3df85,fcb2c50a,b0e67ec3,a7e5b3c7,ef1f53a4,5d5336c3)\n,S(fe1a5ff5,162731b9,7b4423d,ad1b5169,5401920a,6b1a07c3,6ae9a25,ec3fbd18,22076aaf,ee720a1d,96e0987a,c7bb8756,b04a6b25,ddf5823e,e2f93ac9,e54c85f9)\n,S(4c64f48c,fa628f72,b2897c28,4411684f,c0795753,60b8633a,188a89eb,e7fe1ea0,2eeabfd7,1b976ac2,acff49fb,bd029ef1,a42344c5,489334fd,393cc4a9,c305b4d2)\n,S(44cbb9b1,7ec26b5e,3489c17d,1da0776d,539d2efe,d9317987,b86225e8,77b4eef4,f5c58a8,6ef02531,bcffcd80,ce788f5c,e43f5ad0,37e940bc,70d8411d,27c32673)\n,S(2a5a456a,99eeea58,761c8802,7a86a310,63cdc681,b4ba0e2d,e5bce690,db8f3e84,7c3a47de,ce538330,49e998b3,4415c46a,2ac5c633,1a074e8a,8b4cdcc2,c6d1770e)\n,S(566c0ddf,ebb82deb,bc867f76,e2fc5ce4,71249a9d,1b659237,2bfbf9ed,4eb6bf04,76989cd0,e0ffe1fb,a5992e71,50272abe,8a483f5c,6bff023f,3e5e1265,3598bc80)\n,S(6fe42288,6d5d8232,4b229084,b1b2924c,b6c45080,3aa095ba,aeb2dd14,7b6def9f,b3b394b3,fc2682be,6e8c1e5a,ef2c87ce,eebe8d98,31aa60d9,ead74896,d7d9a38)\n,S(35b45332,b65703f0,4feeaccc,39e04e1,72e58555,db94f04b,1899d835,9abf996b,6643809e,ae897680,5e37891d,3a241094,27ad6dc5,48429a07,64e2e12f,e89c2d29)\n,S(17288055,5c0c5643,bd740b89,bbe47949,58ddb0e0,786cbc80,84d64ff7,838930da,f60cda88,7f85da2,3fa719f1,29aab43b,8b9a1578,53f91836,3fee5bd4,fcd16a2d)\n,S(76eb57a6,c2d7bb45,d6faee14,4ba7c798,2d8ab2f0,5240862,aaf32c22,77dbc985,ef7cd7e4,d10ab9ce,4551c6ad,18a3ac6a,bc851768,18fe0805,f1c6107a,5c8c291e)\n,S(1e5b38b5,81ad0859,454370f5,2f636726,5987e7b3,981af60f,a987c4c0,2440040b,d9817e99,89af200b,da690446,df5d8681,92808bee,91ba077b,400e8de2,712c2ade)\n,S(ee17e98e,12a9efb7,c27aee78,15da31e2,af0d3294,40e7dbe1,9783caa0,2bef5709,a78346df,4d7dded6,9146931b,f1ce1b6f,1aae295,50a877ad,5f2dd0e6,adb43e42)\n,S(bd574652,1eec6a76,7c2a14fb,15c85590,f7a19e12,342d09ec,67dd98e1,7739a81e,f26894f2,b8eca34,493bf871,dd6a133f,efbf1ab7,687a15fc,336d885c,6f5698a9)\n,S(63852cb9,391a1ee0,23947718,b27c51a,8f9a5d0f,2f707f2,d0afd728,6596aaed,9d7c8c01,102abe28,43a7cff5,a1b15fa8,b56f50ed,1a034963,2e867007,e946d639)\n,S(6c3fb2c2,d49c1c29,4eff674,158a3971,f65010ce,93f53614,ac9e0497,e31c296a,ffccd06b,98cb8021,589e833c,9c8b3b38,67850545,7e8dcf2e,775bbc71,47243707)\n,S(3c29a60,103f7f0d,6f9a186e,48ac242e,46a525e2,380c4430,609f26d,6c3559bd,9381e8a8,7b4bdf9b,361acf28,cbe43e1f,a8fb073,ae2d1d09,6df7813f,bbdcfe22)\n,S(bb76e94f,6f9ceffc,53ee4b3b,e27d99f2,d02eac69,8a4865f,9cb0293,a68c5eff,9ae48507,33f5984f,21726a37,c6ed7a79,e832af6,83afa20c,ee5d117f,63ab7472)\n,S(422fcd5e,d2774d45,6d5f6312,c716582b,c142fcd1,342b71a3,d729643a,d022b492,b6d75412,aa9d6ff8,9be3a0b0,17384764,35ad4408,b544b53,acb5ba63,119b6bc1)\n,S(328db4a7,9fff0037,c79aedeb,e8895e37,75b1e6b0,4d0a7a32,e2fcabe3,29c60dcb,40a2fab2,622ca3f6,39711923,812d8687,9d92b15e,ceaf5855,a970cf32,854b8970)\n,S(4269bd58,abcd5e92,c62b0895,1c5ae948,efa1c96f,39ad3601,5e28d809,74da818f,1d1412ac,57ae762a,c3918ee5,33577c29,a8e63afd,c33b69d5,e6758416,6ff87b65)\n,S(6c08ab40,97320e51,f3c571d,3beb7d7e,cfb690b7,af3d449b,50bfd276,290b8830,aba73078,edbed082,2164c850,5ca4bc58,6e53b174,83675f9a,26734cb0,747320b8)\n,S(f4929f5d,99d0a5a7,3d20a223,c84261c4,6a085af9,fae2fa8c,4a025489,30174c22,afc89b10,7a38c32c,a24e947a,d8efd761,cad69f7f,ce0d595d,d4cfa849,201f6178)\n,S(5cf5baf8,726c125b,e1499cb5,3f33bc0,37c983e3,b03f37af,6b48f3c6,29827611,17bd2e3c,d12adb0,5502a9a3,aa418cb8,c3809868,56d00c5f,319c34e,66074a65)\n,S(c4639023,b41d90eb,2b275a2d,b7ab632a,592535ff,b439491c,f0e4e692,8188904f,738e1a93,5ace46a8,fb4f6ee0,b9026314,d8c243a,8fe08f37,b23b9c11,11763de2)\n,S(a21b2fc0,2a60cae4,e694f206,1bd083be,5ed681e6,53af9271,a8ef9983,5807ce92,7f80d5e5,5a684392,939d6d1d,537919c4,99e799e3,4bdbb27c,b3d79587,f08d5194)\n,S(7841ddd5,80f9f3a6,e702b0f9,3e1a4158,5e2c10c8,fcf98add,2a0f6286,c5d285b9,4dabb8e6,2aef6506,392b0fa9,4e2005a5,ad03c4fa,5fb6de65,2e89b31f,6e5ed166)\n,S(5d5fccd1,378e4983,8d8b05d,41f89660,1b3a7c0,58df493e,2a74b55f,d8210356,a7e7b0ad,fba08a37,6fa3cbe2,75dcfbfa,bd0629ec,e8a5830d,d6993ec5,15ccf447)\n,S(7fbd50a7,360c09ff,fe55369b,fbf6be2f,70cc5965,340e0489,77e01b68,2ab6c9ea,17ff93bf,4fc95325,26caac54,89e22f4b,265f63c2,cf46ff6e,a5b1d387,98a9b72)\n,S(d6c8bc1a,479ea533,e99afda5,95365a32,cb1f3a26,72b4b960,2e039494,5b379061,cbfadb4,a6039cad,67ded1e8,8513dbf4,bb1dd3e3,437c989a,1df98b31,d234975f)\n,S(5753de48,683d633c,11103cc5,b1bb04e1,5a935e99,297c73f2,fe851d91,5d5ea18a,10ef5d7e,ca1580b7,31ed4fc,3cd606b9,e6af8b1e,dea8bcc9,b91d522a,af361376)\n,S(fc0d0265,b6cfdd0f,6b755a8a,c87f0ad5,b5a19894,5348c719,e9593566,91a638f,c5f31483,3c166c18,8c62415c,e58297fe,157fc6e4,b8e36b16,ce28cc75,df9017a6)\n,S(61570f72,5b030b63,def84933,d0d25039,cabc8853,e5185302,d3f2d3ed,2611eea3,b3edb685,379c0068,9e9f522b,a5ad9163,9df723b6,b5c3eb96,3b05e5e0,a4b8fa15)\n,S(5fa72a54,36b2b7eb,c15b34a,fefbb908,acbada63,23809159,66785d12,fbb3d6e1,1c027ed3,a34e892d,4b3d56fa,7a93ac18,663e475,a16a3d2,fac0ec90,be6d9ce6)\n,S(5296b2b3,9f179516,d3cb85bd,5b86a9fb,274da608,be6e95b6,c44267af,187e2371,728aa26,e5869775,9c392558,34d00992,73eb6986,5db38b3e,df87f394,31c75dbb)\n,S(b145c8b4,4c3f3c77,658899f0,a5b97c4b,dc2b195c,aa56b328,e0535217,88c80298,c73d96b6,47c2e764,e36caa26,8ebfe40e,c07b1e0,947e392f,be2a9095,7dba2595)\n,S(bb585531,3cd05f8f,7fc96d8b,6e5194fd,2a70ff55,e7a7c067,cfbf54bd,129d87c1,31ed0367,8d24c231,8c4295a7,90d31094,e54ca68e,47b289c8,45b2f638,64812607)\n,S(c6ebab34,ab48c0aa,aa5243f,c82a90e1,9a2012ad,74c925f2,e4e22f6b,13d6e5e,8107a95f,28e11f9b,bcef4b22,c4228c0,b530cdac,1c977640,53828b8a,15fc065)\n,S(92e6ec9f,83dd27e6,3be3b0bc,8ebc521e,d84219bc,177f15cf,1bc840d5,be2b551b,931aabb1,5b3479bf,994f7eeb,34871b04,81efa404,c40e063e,59aabb77,2553ac79)\n,S(280280ef,424f01ec,3fff321a,61dde1c3,4e674a56,7142c8e6,643ad1d7,e2dc4d51,84710eb4,5a88503f,b1078d06,26522501,fc165ebc,ce3b90a2,925ab1be,3c9ebfc4)\n,S(6326eb72,abc4017e,c3f55af7,6a50a4a8,d0074ce1,2f5c9e08,146682ea,e406d047,53dcc346,7b61d08a,204a70b8,7658e4b3,c4016c8d,b5f03004,af6b545a,60223871)\n,S(6e59dc29,408efda3,1bcd7b05,276b9f8e,bd9caffc,7f22c207,61f9fd0,a281ecb8,81c60999,45a6a834,8f2bc7e8,4ee002af,ec5729dc,aeed8187,87060c68,c2763887)\n,S(100b0cdb,ed05ba0a,fcfbedde,94ecb25a,5cacfb8f,bbb80fed,1a9d87ab,72e4b5d6,1ac27087,8d6764fc,ce5f036e,ea50294,cf38c4c9,1ca9c3c2,87718505,491e11b5)\n,S(95865771,e313a1f8,5629585,7ab9aafc,68a124b,6ae61f1a,a7b6e9f5,fb5de6b4,1c5195a4,338bfee5,9910935a,f5fa6091,7d06a2ff,3908fecb,b3fbe30,b0b52b41)\n,S(6962774c,9035ce5e,fbb8e715,9d381004,a1828d67,38082e1f,45307ea2,d1d60eae,e9c36d21,6a2acbe5,5f9f9535,bea4b38e,7b75a149,3a281e4e,11b19064,e282c036)\n,S(8e0fb8c0,d2d7977a,23f19efb,aec886a7,5170cd08,6a035386,ac784b15,9fec90eb,1218a3d7,6306cd4a,b3debd20,9bf9238d,ce00984f,47b5fafc,b715e2a,655ca9d9)\n,S(6e9ea5e1,127c4c60,a01cd278,ac1dc091,e768acd,41566200,47aaa32a,e9cdf5e4,bfad3214,9a299887,c74bcb20,33e01704,ace7c646,eb00dc71,fd1e0461,af05a6eb)\n,S(60fd55,9198e1ce,86c401a1,d31d04a8,fec7da21,4efd01d7,f2081027,1c49206,4f234575,cf4e6150,16ad551c,2f8e7635,3718b626,70ed30c4,a4c15e9a,488e0755)\n,S(d413c7fd,2c2bd34e,2ab3e871,38495543,3b5ceb32,cba0e9e5,1e0ce198,cd5ea806,b585f836,7ef44ee1,8e32dd1d,95d6f8eb,555d8e53,451e5d8d,1cfca993,b23e344d)\n,S(e26a95ac,c0855b56,b702cba4,abcf2004,c7343cf4,72056bb6,161ac077,bfecf98b,36a4834e,4532fa30,eb1caa21,c1572c46,efe4f7fa,e3c370b8,3f1fc221,632f8c2f)\n,S(f0541a0a,d29e3806,e2812aab,ac185a55,687e058a,eb17157,e00a1cae,5a9e3d9a,40e81917,4473fbbb,58d40f1e,ccb2444e,ca4a616d,b0efc710,8f887c09,dd04b4b6)\n,S(db1112bb,394f5e1a,b315f575,e2cfb59,4b83b599,6c82365c,c2095bdb,eb7c3cb9,c53249ca,30eb726e,6dfdb792,4db693da,f9740213,d87c410c,afa3ade9,51f9f688)\n,S(2ad80407,9fdb7722,c96abd1d,35e76a7d,30948c7d,7b1e62a5,ab0994fd,667103df,5289aade,9f71ef7b,dce049cd,3052f8f9,653a9b69,3876b607,7bb42d77,9829bbe)\n,S(7bcd5085,eea0f429,238c23bd,bc14017a,f8dde478,9d99b2de,325503f1,fcf7e738,7338f8a,7980de0f,404764be,7fb22578,ee820c6,16044f18,ad12d4bb,4b35a2a7)\n,S(85819e4b,348ef2b6,d141baaf,3297248,7f34b594,8d834249,df465fc8,29a83188,306e8693,e7e718e6,39f48a1f,7dd5d977,9da12288,ef3edc6b,74afb1a2,906f931d)\n,S(8d035a4b,5905b0ef,7fd9b050,ac1c006,2c0a8d84,1ab342bd,9444d101,92ed4a79,1ede85ef,aa83c466,4ac1cc71,c2d4027f,632f7ebe,2a097d98,9278cda6,35e2e0a0)\n,S(bdc84795,289c3268,628904fd,5d8ef1f1,a89587f6,652aa883,5e83c47d,c008c282,1d8342d9,e330c123,7e232067,6fec10ab,b19c0d76,744915da,9980a9a5,6459a61b)\n,S(75dab97b,d9e6571c,afbd8ce5,ffef58b5,72b6d8ff,838777f9,21834b61,1079c079,d048e6d1,fe2598db,31adfa59,8a445f0f,7f97ea3f,dbf8fe92,f2aa495,ff033bdf)\n,S(b2a4a872,4a6ccfaa,8b8bde86,64fef1fd,bf9d4edc,215f9f71,738885a9,af19b42a,9bec2c2e,76be8104,f2dc4ea1,3e1ec916,23baf856,a92863cb,33b2781c,35f9060d)\n,S(caeb3a77,35824f9a,b24e364c,789fe66,4729fe9,d6577ab3,f9cc857a,e1c2bdaa,ad96c92e,e91cf44e,8f0480cd,106b115f,23f0a30c,fd6ab638,86ee87cb,ba5ed885)\n,S(a897e41a,75e6bfb0,78c272d,ec320e70,13afb506,478d984a,b5532b04,6da0502f,136cff6d,896be55b,5da484b6,15a09e9b,13453973,79fe4157,64ac5b5f,35aab82c)\n,S(a33679a2,dc5080d4,a77fee11,5de9eab6,d32e6479,bd4fa795,3e4a03e5,3242412,1840b712,9ae52592,d99ee262,a56ae597,37e2202d,2871681c,6625de82,7c57819e)\n,S(3183fdb2,b5ad14cf,9e2ee00c,e23b2c42,dfbeab54,acdbf786,622a83f,4db62fd5,7501e003,2ba129c8,50c0f17d,2a16b3c8,602c5225,1bac7212,6d454cd5,fc35a92c)\n,S(aa6ac020,42f80323,ca77289c,88dc702e,e354fe1c,eedc720,2b87601d,7641b00,3ef01b0f,8b396221,8c5118e3,2168a6aa,ac901e02,5610db0e,8cf2ab21,bb06995c)\n,S(f952d843,386eeef2,64b1078f,d835308d,514bc162,559c8f3f,c8ab5c18,378b40c7,fab32d0e,850f4bac,9a4af6d4,7d15976f,2e6fcf3c,958a72fa,b8db1817,cbc5dedd)\n,S(75b58bbe,a5a1d00b,40f2fa2f,9e2ca8c2,eb568bc1,fe5559c,7e40ab8f,a0148e67,7fd6db81,7359736d,26883e35,727f4b21,2813be05,8d5d2477,1563696c,feaaf021)\n,S(504e2324,34a12a8f,a96f64e,d39a7c0d,4168bd75,1e0b6249,6b24ab05,eff49d46,3bbb93f8,3d2ee95e,2e2821be,c3d98f4e,1f2def75,b5f8ed09,6947c4a9,1c933ea7)\n,S(563fe95,1482826b,38f21deb,207a30d0,21271292,8b53c790,c33080b5,c4fc14d5,9b875a5c,70ee8bac,9e6d7225,1981c9f6,c3b5bb49,c8772243,14c4b287,e990bba3)\n,S(91ed3211,161cf1ee,96499e83,7baa574d,1f56b244,56fc1589,d61f4d40,dea01443,f1664cf2,578f5ff5,8d81c281,514c7f95,56bce3d2,2150db9c,6f4a4df,db73d14)\n,S(27526d79,f92c2519,838e3e0,a9ebfd02,f66e857b,d49cd8ec,6deaca31,d6064be2,9e4b644c,5bf8d50c,96892f3d,6843c94,f9afb359,55fb10b8,6a2f166a,6fa17f00)\n,S(3ad1833b,df1ab0,effb0dd4,d535285a,900060e0,f38555c,ffd3e7f3,392b5c07,5c37afe3,89bf6e88,b88c9a34,6ab5a0f6,2128828a,22b6f907,8f9bc6ff,ed5c311a)\n,S(eeda869c,21a8911b,cf713c68,caf261d1,e7fc58b4,3bdb0fb7,e83e677a,ec3ff6d9,f58e7eb2,3a62a9ec,f7a13dd7,b6b6809f,5cf8bc2d,22af477,e002f2c2,9c44d444)\n,S(c7a806e7,bfc982b9,342fd4fc,e8f34786,9509fb0c,f0f54522,98162dc8,ec5a398,ba895fb4,f9084463,3eac5226,e91a08c9,e83281db,c406ab37,fa3ffc38,421a3647)\n,S(c59586d4,ecde0cfc,3a1f5744,45cea454,aff18703,720fb4b5,1cd7b0de,de79c9b3,1eefa71d,5e67d9aa,15231b20,966951e1,93ebebf7,ae54ea34,e84b7c98,7cd853ff)\n,S(3b259287,5283a78c,5aaebc13,5ba13c5d,4e5a1e6c,cfa196ed,6eb7960,e7eed0be,274d3739,5757e482,1ee56c6a,f56c8acd,f58cb337,6bb5096d,2cff4e33,ebb3c1c1)\n,S(d062159c,e511418f,ea6e9853,b1e8d769,96c686dd,eef71443,e994a347,3b90e239,95ca957a,b37c702d,c707a3e6,388532cf,26cd3db2,64e4e9cd,fe0aec9e,77ab27e3)\n,S(12a2bd87,c4ca2337,7915bd12,3f39e88a,fd7257e9,9587d70c,a9d8fcd3,2aa7ce4b,85562f37,ac813598,cf59e427,106fe886,aa1a078,1170f14d,3968119a,9ed65e61)\n,S(9214dd98,2737e4b1,585b3363,c363ef83,b40a3228,53d6c54a,f5b1bf1a,a21e43a8,dbc49c6d,abe985f,d95202b6,bb925094,8b98bbcf,71486065,9b77c447,396e8eb1)\n,S(34439200,b0dd5b6c,4fe8cb57,2e26de38,3311a479,ee39ea47,221a179f,fbbc124e,b8c15197,1ea4149c,d2a77b4d,14cea316,6d70b971,a7f9ef3d,315ce741,2ad43e1c)\n,S(396b4410,cb5a59ac,15fa6034,7215ac8e,4ce3490,4dd15b41,46e90679,ca3128d3,ad4eef77,94f0c541,e70fd5be,45652364,c43e91aa,34683525,36c8b1ee,c061cba8)\n,S(8ee1b02e,3ddb0913,dc781279,6316fde2,4489c98a,4e4c3cfa,c84b4350,34d53d65,9a4686,a5241a7a,cd4295b4,f1c9f094,3f8991a2,b7edeea8,bc4e9c4e,47956cfb)\n,S(78f4da51,26b42e21,1d69c640,4e128c71,cd08fb67,efac0157,3bf128c6,73bbf6e2,b3836f1a,e397d7fd,c88d2089,6731fe04,6a46b2e0,b617117b,161e1e7b,3a2958e6)\n,S(ff5c1378,c8a233e0,5edeed70,e23bb9e5,a5eb65a8,4b37c6c4,7c0a4952,e00169b8,a7275aab,c73eaa15,22328118,68de268f,189d3adb,da113553,e3f9d36,7664a0ea)\n,S(18ff6e74,87ebb21,dc935fdc,265616bd,d3a4bc2b,35037483,c911f185,596a93c0,34209cf1,2710b007,821ba024,f0491e54,bade44da,5980f505,37869b8,b410d0dd)\n,S(3ece6ecd,1c52894d,90043c67,59d158e7,143c9806,658e8e65,5fa53867,6609b0b,4b1bbdb7,7ed6deaf,fba0d241,5f2b7993,89cf7df0,7acfb8a7,a22f42d7,7858c622)\n,S(a5356c78,6cdabe6,a1c379a4,ca18acb7,b41fd691,c32c31ac,6cd0edcb,9fdc5694,ab8f37e6,d19af264,58ec5b1c,78f54a4b,877c9416,ad76b646,7e91ca4b,24f988f2)\n,S(e5dffa5d,961253d7,f99445b8,f8d8aadc,5415c550,da64a987,ee604278,12de570c,401ebeb4,afacec6e,d41006e9,c60e0ec7,a4840c2b,c64527ad,80d640e9,70800186)\n,S(12c46133,4aa32bb8,465c1e9f,afe68d91,63a7a9df,e11940f4,593697d5,fd0c9140,e4fdfe80,be2fa183,4c32598c,a096a5d8,15386dc8,67588354,300018ff,5b2e0c2c)\n,S(bd8d9bdc,ebfeaaae,691a19ec,c20cca22,af76db4c,ee54f904,ee5aa8cb,2010ccd8,cd5fca87,4a6cc17,79658266,158066a2,840e61d2,28bdd4cd,f2697e19,7c6c994d)\n,S(597d8ca,babc10d5,5402f3a7,48987270,7cd5d3b8,3356ea13,6c8c5135,cefe3fc8,bb21d384,a48ed346,eadc6ba0,2b1e2231,7b2014bc,62d17fa0,9196213,6e12ab88)\n,S(3d91a096,24fe1048,dafae0e8,c693226,cb89157b,980aa490,a9a12598,e77d7c19,738fee86,ab5a6e43,753b22cc,d6a28732,65db5dcd,38a6be5a,6635e8f0,136340e9)\n,S(44addcb,55d0870a,19682075,116c8fc,d8f49b5c,5ef767ea,aec513fd,8d71841e,5e126cb7,8d13c0d0,55c3363,b236bba1,21cc5618,40e3cc3c,e100722f,1cdbdb63)\n,S(5bc89297,4447eb3f,54b7b451,6da3d1a8,f23d6d42,54ec7268,f3e9b2f4,78d88467,6d708655,6b679453,253df54f,68541560,b5e542ea,8f1a4a9d,a023d8bc,6baf9559)\n,S(8fe4f040,553ba9ef,47a0086f,a8dbb75a,2362af22,a58e0739,7c62d2dd,2ed2fc40,b2d0c561,5afbbe3a,18fcd594,a8e91e14,ac714af9,e34938f1,74a2c7d4,2028f65d)\n,S(e36702c,2af02461,4d5f65a6,b855848c,6d72709b,b3ffbb5d,f08206c0,9c481a27,c5558c45,9cc186be,665a54f,19ed5f67,983bc004,c1c196fe,80c57310,59f1505)\n,S(45b0165,d5eb9c2f,22c6f2e6,3f2cfaf3,5d4a71e7,460a41a3,9d3708c3,111387d4,8fcc8dcf,9eba288,f0183ba8,345c4b08,1b44cf73,b9df77cf,3e94c089,1e53cbae)\n,S(ad02f6e7,378d62e8,87d651a4,eaec6d75,9b15f4f3,b7e999e5,2e9e493f,7d765205,25090d49,2164feca,33270e1b,3b08ead0,fcbc7ee4,aca4b4b7,7e06d865,5259a63f)\n,S(5684c664,de3844ae,90bc93ad,426bbf69,5f349b97,6080193a,710b6125,3d6fcb0a,c5138172,4fb53812,9dffe038,7029b209,946a913a,cbc06370,b3b58f1c,759ac8f2)\n,S(cb36c4a0,f6d2beae,282e9783,2148704f,aea7bea8,af0abca,ac670a7b,3808a2d6,d0aaf774,d65b7eff,589afcca,746b02e1,edbd10b3,e2938d6,5a0bd17c,f71de58d)\n,S(143e1741,5da8c61a,959643cd,bcbd1eba,169257,2a935eda,1d0e2495,6eeee4d3,c12840f7,7a9fb642,50d19be1,5f35199e,1da83a3a,54fda063,99a6908f,87c9beb2)\n,S(b6292192,d471ab52,fee206cb,64bb526e,6b8519c4,3df9ae85,4e4aafca,d53c1509,3d6fb4ea,45ae494a,e2c4c776,29047e33,f73af147,4fd217c9,856d5d1,3b837c56)\n,S(d490352c,70551c78,9951a057,cb02eb17,fd710a0f,27dceaa2,ff224ec5,3c566a14,15ef3825,97ee6d88,ed8840f5,9d496c0e,6685349a,f1c62c27,a32eb7b2,bb193fb3)\n,S(4797be1f,7ae122c9,2193fda3,80dac3a0,fdc14361,110a2a3f,5beb9f26,f3d85449,9377f25c,591ca377,2ffcdd37,65ef9a3d,6fa7c2,79d18e45,83901795,2e5fa3af)\n,S(fcf5b790,98cff1c3,b02be521,76e1c6c6,ac10bcf,f083ae4,5d26ead9,82839614,8d94f596,5b075d45,a8f732dc,9fbe679,dffaf0ea,d2c90d16,b2c7ace1,1de05c45)\n,S(d7153203,1e8cf246,683ee529,b2dcf54,1a731397,89e5c354,3bffbf4d,f95f76f6,740af4a,40e7849b,a41c4dea,4b7e0479,ca377fc2,69db00f8,b484c7a8,c4c745bc)\n,S(27946ccb,dba75dc2,23663d14,2b56bd9f,2e63cbfa,73290de1,8fb7e988,31b44330,52c0ed5e,abb069e0,84fd8363,dcdb9134,364dcd4d,87b46025,9c3460ed,63e04ad5)\n,S(cf3ea523,751eff3c,a785884a,b019199d,2a0ccf3c,1d90679e,141d4e75,74e41f61,b38d0808,936a2920,ece323ac,a707e1e4,914b51e5,e54843c9,63abf292,88ef17af)\n,S(d06327e7,917280c5,d8a5c516,7e0d0c1b,e5fd9e25,4c877e9b,9ae6b264,6d9a126f,c3cc3913,9d0d7b8b,6a6b0c7d,b48213ba,eade2202,544dab7f,9ae42e08,fc7c781e)\n,S(acfc233f,28f98688,2ac5ea8e,61478f62,505b8b48,38833499,1ccad1ed,5ee2a871,244a188a,64a6aa7,9f74e940,8681b45f,88b5c65f,d120650b,1a25674,eabb338a)\n,S(87fb09cd,b3b8a514,f6a02da6,1d9b160b,798fdf7f,3f05d7ed,25c1c4fb,84b19253,586effe8,c4252dd8,c225a6a2,8e515abc,e36568af,107f8c75,a941e936,acbf6e38)\n,S(77225acb,8ae251d2,be2f48a3,2eff0c6e,4f558287,13dc8a6d,3c6b7bb5,de9538de,d6eb8501,2aa7fe12,285e28dc,3efe9cf5,b0cc8e91,6fd63f71,c28c3f5,60259a8d)\n,S(b03074f3,f2effb45,5caf88ef,e0eca7d5,6f901b18,fd04c01a,f0425c58,1f13dd5a,c8e8c915,fe06d774,8ceb2da1,78816b8a,4db1d082,6df3064e,7a4b0f85,ae99d461)\n,S(992278e5,229bad50,82c8c346,8542f91,e2761305,62a34627,b1d97aad,a5999908,56ef7d8,d360d7b8,5af0f210,161ad17d,dacebd13,c45b9c8b,34f1ac73,bd6a1ac4)\n,S(b73a2eca,5e9d0e4a,ef4f6ac3,e9610f3,1c72c67b,6a152fb4,82681595,8d44be12,c621ee64,b03b17e1,a25f27c2,aaea43d5,eb2918d9,e0949306,d2ef720e,8975c00c)\n,S(7f6dba94,39e3302b,e4f7e0b6,f2363609,eedb30e,dc0b135d,e4aef970,cbcbc607,61685e2a,eb8e8244,175deb0,a006b5c,4292bd73,40b2fa1,3548262a,db98a3d7)\n,S(88f0e36d,345aaeab,e8af18a2,d14191c3,8330c5e0,d4e32c5f,c562e549,cfad763c,bd062c83,13e44ed1,891b8048,2ee93ac9,95a0142e,e0543a92,a215735d,1e94ac05)\n,S(da3a270a,bc03e6e5,3f572a27,94c8075c,8ce4590,b1b626e0,8a83fba,45dab386,884b46e2,3ab44b4b,c3d09f5b,97994e4b,109f2db4,ee04bc77,6752fdc2,6f0df055)\n,S(df346699,77cd82a4,8e3e1b11,6311a5fa,3bb0389c,1c500fd5,15573af6,da0b2cfd,2ecf1fe5,fcec27d6,35c28d58,5fdb01ec,2192c8a3,848a72db,f53b7759,7b8b3735)\n,S(11a4dfcb,3a443c3e,259c9f27,e24ca426,6e08fbdf,e4bbedb7,2e6cae42,569b0116,7fc6c4cd,1e3a0e22,d0ee0249,d6940def,bd776bac,9da5a98e,23cb6025,42b3de9e)\n,S(2ffd148c,132eba23,e235bbd8,f09be1af,dcfd6e4e,5f2f0b49,6e4fadec,b931706e,6a4def93,52d875c8,31794fb3,6cf0448a,8c9ab5ae,804c6397,cec41b0f,24583acf)\n,S(109e1f3b,7043c5d6,fb822b8a,54c6949f,117e829b,4065c0fc,c3ba5e05,a79142f5,c976793,6c034671,e5aceabb,9b08f5fb,af3cea75,a7a4485e,6c08f7fd,a63786fc)\n,S(bfeea71a,8bb8ebbd,ca6135c6,26b739bc,eb2ada11,9babf946,6db9f4be,c7406610,44ff78f4,76074ac8,fd7ef860,cab01522,750fec0e,4b86f11d,831eecb5,22d1f682)\n,S(4d2b7cd4,6cb01842,46e7846e,d0572489,e306b370,81515cb1,8a7c6cd1,dfb51665,60ebb290,44169e56,1d10a8e0,a2971b69,82276f1c,e7d11f60,ad7decde,e1fe9c95)\n,S(66f2068c,e65a1a61,ad95ff3c,a2f15f55,29e0ce3,ad522dd3,d6083d5f,793e0e5c,a95bef60,2bb89e00,98723b4d,7fb421a5,b2cc751c,e8862ed7,439c1b36,efba2f72)\n,S(4908ff3a,27aebeca,8697ec,dd7d5483,c6e56427,9d78f013,129e26ae,2ff459df,4c5def88,b60cbb2c,a3430911,aa84e4fa,1055fe1d,921c8fb7,bbb83b45,62b0f5bf)\n,S(f9a90175,3a0f4236,dcb612cb,fcbf3f31,d97a8e6c,cc4f9e74,3887407,5d19ecb6,ed3c6f61,259943d0,310208e3,dd8d5a40,a5bfa646,35fca871,a6df79c0,830e24d6)\n,S(ffed50c1,2434484c,ae866c1,86b88550,b0bd02e9,db04657f,aa81a672,8e321850,f16e95db,d44bc7c5,66fa0a23,669827e9,9cdf4372,6fba5f4e,a3e28d86,33edaa77)\n,S(8061e9b6,2dd9d027,d43d13bd,1361ef3d,ccb4e599,c8d3d015,1d3adccb,6c762eb9,d33a9196,419b283e,5579ac98,8c1b6e60,378fc692,69b18da,a38f362d,20ca6895)\n,S(ef8d0e44,e8b6b5e4,857d3d87,c82b01d8,f254c516,fdd139ff,7b8d034b,45698162,8325ccfb,6da9438c,e99dffa2,92afddbc,e1a101a1,20955945,cfb1608c,d35e7065)\n,S(a31af5aa,cbc4f6ac,aebb9abf,de164046,1b631b2b,8cc43eb3,edb53185,fc1822e4,c3dbc990,691987e6,a8c318d,e381202e,a0c2297c,f06668c7,a2f027de,e5118a2c)\n,S(81e47ea6,b60a3819,2094e7f8,f7bb3f48,a839b26e,d2aee7e3,e159bb39,798cac0f,186a8c4,97ba163e,aa779f6d,a8cf88a2,9f5d79f0,43e6f195,9c14bb1c,b1a53967)\n,S(e15af4c7,8c61227,ffbf080b,a3b1dc2a,4966639b,926aae67,f2bec480,5c1fd232,76fd417f,4fe9e7c0,96db39ea,180d38ad,2360eac4,2730186a,b1da32c7,33fe9a63)\n,S(3a185818,fb47ffff,640f265d,a2c712eb,f7e022ff,67a21a22,a2e941b3,f72639e0,8d370a41,1f133f43,34534b15,655717f0,73293f59,3bd34c5a,fc5c933e,120e76f1)\n,S(18e05d9,2f227564,b572069e,18a271fe,2fef9d81,14eaee28,adb0fd2f,5f078e07,75f390d4,6e8f464a,d71067bf,b0d6596d,a945ea44,c7ede2f8,a9082440,d7e9a263)\n,S(7bb788b2,4f4e5d49,2af81fdc,2f3a0274,6eedc5a8,cc74d1cf,ad17c2d5,4e80a107,5b28450f,1cd8c61,2b73038,ae889c39,d33cd64f,d452ab5d,28810177,dbb6a28f)\n,S(a156cb3f,e4425b79,3334e19d,2b1208ce,5e6e8fdd,78748c0b,a1116031,912fb9d8,b2571319,c644e959,ba401415,3cba9b3f,cd8ac2f0,f8fa1f04,2d59ecce,5de14d21)\n,S(eba23049,f5228794,1651a922,f60bc406,aa15acd1,59eaaf37,d1f2cb31,e7d20b25,ac8f8df,155b2703,d65b33a9,af581a02,8afdbe06,f4927a4c,5546ab7f,b5b2cada)\n,S(8203a1da,56c4fb7c,96816507,f99a9a2c,950da51d,af7d21bf,123402ee,a95954a8,913884dc,10a53ab4,6b2be70f,5e2d201b,4c6bb23e,b6644817,b4257664,ed2ece88)\n,S(d46609e3,ec19ef57,97ef86b4,ec51b8e5,7a854643,f817e7a0,9be4bc7f,291e7795,e1b3a8fe,3cda0479,11ab8c09,ecbbabd3,ce96974d,8a309ba8,c38c1d04,ef730830)\n,S(1ffa9ab5,8eea8682,76849108,9e12ee5a,cb0ea4fc,e6f68436,377e985f,fabe919b,302140c0,7d64e9eb,6ea74636,f9efff59,e907a16f,5c876658,2f4a242c,b52f1236)\n,S(4032bf99,32057d1c,8b6a8923,1575d3bc,6e2d6d0e,e1c7aaeb,ffa9ebe3,bcd9a0e3,13ae5217,f9f70a4,5f626295,b30eba49,e9f7c697,e3ed7cde,95442a03,b7916a54)\n,S(8d32845a,14575fa5,ea061425,5e48e37b,f3a55bd3,9d924648,209d26ec,b94a20cd,e0416169,8f1e1626,18ce160b,e8b502b0,20a5ab81,7853903d,ad7ea792,b76266fd)\n,S(403754d8,1a0dbcb7,1ff4893c,a5551387,b73d64b0,25bb612d,5e2187e6,7acea8b4,134dd3d6,8d642070,cb7778c,7ecc8d78,5c1deeb7,2582e25f,5c58b19f,2f59256e)\n,S(4fbe9818,60e5f281,cb1afa62,8e8787d3,28afae7c,fcb73637,e2d64337,bd6e08fc,31a10b4d,78155900,7cec4099,3b5c59f,4bbb2328,b00a7550,572a604e,8d55b6c)\n,S(a5414064,747b2ac1,e8868074,3a0fb05e,7ef510a2,a48d4f44,4647663c,b5c48b39,4b3ba626,56cbe6ce,2f228f8e,88d00ddf,135d6b81,979286d9,ec41c81a,f74ef7e2)\n,S(5af99ffd,9f27830e,6ba54e05,63b3bd39,4bd8cdb5,764f78ea,b103405a,dbf3a01d,f625b35c,f510f9c3,db948363,3b2951e4,b2209b37,1397bdbf,1d899a7,400a4318)\n,S(7fa7dbf0,1b2fd3f9,3ff4ee6e,17115c19,1f663d95,ff446dc9,d53d3e31,c98026af,f8aa82d5,28f2ee61,1a71b432,d553eff,ff1aafcd,8bf18e3d,b6dfa38a,f33eff7c)\n,S(4838c0c,ed78e7c1,e3707d85,7311b2ca,6c7a4396,5be4e363,d4a374d3,36324640,4404fc6f,1a6c1751,3354d364,ffd43bdd,61b874f0,714430be,8a5571a1,808b5150)\n,S(309c59a9,b42b374d,5c88136b,43310fbd,fccd6ba,e439e7ce,3a9c5e7c,ccb8dda1,fdded8d0,661b8ccd,834e4762,db87640a,fb1e9636,b894dd48,e1b4fb54,863863d0)\n,S(1cc76e1d,788111f8,eeaed575,43afecba,548785d,3d66296,223142a4,7be59190,560e4685,6204121e,402c977e,76fac50c,446560a4,9bd2be30,c6dd2c58,62ef357a)\n,S(188e8999,b9de6190,a65cc051,f936585,9e7a0498,4452402a,3093b4cb,24116589,aca3c642,dec398db,81fab67c,d05ffa2d,948a430a,e26eaa0b,ec3b2cd1,20b01666)\n,S(2fca76ef,b917fadd,88e30d06,d6f398e7,6803307a,b8ac9817,4baa2945,9e9517eb,186c092d,95755005,4292ee1b,986b55c8,ee3be8ad,8adb6387,5e4dc582,c1105078)\n,S(41d690fd,b5eb4f10,8aac4bff,26eaf866,86489227,b6e59b89,25440780,10e3eba3,251f34b9,d69611a4,31fe9605,7be2e10,6d058db4,34e0c814,b0b8a0c5,f2e50b63)\n,S(282f850d,344e63bd,abc4542c,66cf1f1,a6807b1a,19ed7864,82d06a6f,a03b1e05,de82333,48fc960e,b22f5641,5265c1bc,be290ed9,4ee81fae,248d4676,d38a1a5c)\n,S(bdba09b1,c1810ad1,ab2f5da1,b628a44d,a8512221,993c83ee,4a9484fe,6416bd2f,7049aac,e507d6f8,d77587eb,b8759f51,1b7bb2c6,5de0481b,d82a2f82,246d229b)\n,S(e7e238af,4639d3f7,e5ec4298,65aade7c,c1127f41,d04b3d11,477456c2,b155a79f,da29edf,1e3c0ede,5546ed8d,cf8fa801,b5bf0dc,720a02dc,d9d706c9,a9c6bdaa)\n,S(53a635cc,4e24790f,3ec5c17f,f854e2a1,800b2529,fa882945,50a0d237,58d622f7,ae6bf987,2d3a31a7,4f97299d,2fbae146,58c32dfe,418ee242,2029fff8,166656f8)\n,S(10750fa7,df634f7c,7d8bd73d,e056e48a,50c413fc,282748d9,f4d0b485,d0ac5c1b,fdc72a01,883f0ed0,52d97ffa,8e6935b2,3f684f58,5e6c29b3,702f5147,dc645e04)\n,S(881e3e57,ed8f639c,5023e45c,4e843bf8,e7d13323,289f92c7,143faf66,a65c3fcd,12f991ee,3390b45b,af1aefa9,dcd20da2,5891ac5d,35073750,47836a0d,e75b4dc)\n,S(6be50501,4d72c612,bc0d5df9,13beac50,bafefaf0,aac7d032,824a102f,25bb45f7,4a0e0d0f,f2477287,ebd8c221,5bbf3e33,fff7194b,4217f9c7,57efa361,1b3abfb4)\n,S(2ca955ef,23ed3481,615d1f0,db0fe5b3,f0fe5f1f,1b7f96a4,bdf814af,c4a58987,2dffc8f1,ce4ceeaa,d09a7610,7ee08e48,a591a177,9de2c84a,765a53e1,808e3c78)\n,S(250da25d,5be3561a,92b56f0a,a7ab8fc2,bf7398d7,aca09237,3d416615,6991a05a,b0e62549,ca492ef2,9ab753e2,62b9c3a0,10df946a,99a982ab,812aa48c,def60c81)\n,S(57606839,4791a29f,b66f2314,73b6bc6a,ff383623,c889695a,910c1894,d9c060b3,bac9ea05,7285d6b2,7911b19,b32fec7c,1b25db58,ae39eede,f4aedf09,46c04ae1)\n,S(46edba34,d53e958c,c3e4e74a,ba8bb4d7,c6266aa8,9fe804fc,e27bb8eb,cba98e2e,2b85a88f,136b201f,9a1747a6,dc55f59b,41049a69,f824e3e2,f7f00787,f687aa6e)\n,S(5d4f6ce9,ac52d698,1a13e73c,3156dff3,918d5b72,5e42f415,a503e573,bd6611fa,4c633703,1de35eed,dfc5e646,e8b0f812,2b951fa5,343d7b59,ceaa5c85,e1ce5c08)\n,S(c77db927,f7e637fc,24a38bd7,f605383e,91e4e2de,8ba5b1ca,baed4376,8ae120c7,347f43e9,47b5d13c,c7cb6fc9,fc2caa5,2991a0e1,bbd4bc96,d98ff26f,1a81bc5e)\n,S(ebe2ccfd,ce91b78c,95cdd34d,79fc9a28,478c406a,224bfb4,668dd5f,197934f4,d7866df2,d346bd30,84ad837a,a0c65cb4,62cad5cf,3d23b0e4,bd260fbb,f4666ec9)\n,S(ddc5f94a,d4420ae4,8ece780e,26940338,294b8929,549fb897,82c06e09,b7935549,25802633,a0127d73,21ef0a12,a2a6eb32,692f2d30,5e7d3cee,f137eac5,8896ff71)\n,S(e4000918,46f79f21,71b299ae,6b93108a,9377708a,e7d3f5c3,147a98d0,95e876b4,c8d8c4db,8fdecd8e,fda047f,b92bd9b7,3c999493,27c491ce,df19718b,6152c434)\n,S(4add9850,90e16b5c,525de57f,a15a9c38,97527b6d,8683e407,3a978cac,53b29b66,dfa1601,d36d2021,6efe432f,8a335e2f,42b6d645,7fd6f032,d727157,32a85dbf)\n,S(8a5536ff,ff9c9dc7,b2a67823,5d60ad10,834c9029,bc243f3a,f10d7e14,4ca0a78f,72ee78e4,e0a618ee,191dc7fb,c1143e4d,70ffd570,bd50ce8f,d368ec29,c22bc926)\n,S(9f708795,6233a0e,59757e17,5a87e34b,f7a7485c,94f9aa62,61854b4b,3ac62c05,ff9902b9,6a6cd1cb,6ea35965,3527decc,7827318,97b5c8dc,c24e2399,fb16ff15)\n,S(bfa5d3b,e3fd56da,d8e70330,dccb79f5,bcc46cfc,220f4921,4cb8e700,e7cd0ae1,2a4870ce,aa2e001f,567ac21a,79eefe94,8763b5ab,c63fa649,8a5cffa4,126c6d0f)\n,S(a965e34,47f07286,b91df55,3e4211af,e6b837ad,a9cc10a4,905975f,1983f2fe,393bb45c,3f6eded,b6de1e70,5a706501,cdd10ea0,2548279e,c75e4dd9,15f0da2b)\n,S(e5e38677,c1e4a659,51358301,dbba1e3f,c44f5c23,af7011aa,5ab93ad3,c69b18c1,7939d32,de371524,c3b14f5c,745ea023,34f9222,31f29d8f,c8294802,b334821d)\n,S(473453e1,80511622,cbe6df28,46f479c3,b8638efe,9af11beb,21dd093a,24d243e,e2b897f,eec79c08,5afb9daf,c9ead107,57d21019,c655d0a4,e5254a69,941962c7)\n,S(fff734d0,e5f24c63,dfbc061b,bac37c88,ec5aeead,4974cefd,77f1eb5e,86219772,ef8a22bb,c29c9756,37c600eb,82ee5873,778d539c,a289a50c,5490b5cd,8ee0bfe2)\n,S(d0508f53,85f92779,809a1892,43a58f71,47f643a2,a8f5876,510b191a,fa292dd2,329eae7a,2ee52766,a5a2874c,3912d777,e23c4aee,390aca18,140ced23,b8e82d8)\n,S(93170604,98fb43a8,41d09d53,98807f99,23405879,be9f224d,52d21971,130fba89,e84fe72a,cd89fd4f,f7db1817,edab493,5f809b78,6d0c3448,f19505e5,a79e60a)\n,S(63634cc3,ce570dfd,8bf90307,f4543528,e26f2637,ce32d690,75cecd2f,63dd127,bd12dd78,7ebe0ea6,661dc389,5bdb6478,7435e9da,5812d06d,d9188b47,e1a31939)\n,S(30c7e2a7,925a47a1,5aa1e2a9,6f564e31,61b7a559,3af1a696,91088dc8,9ee64431,5ef4f2d9,cfefe53f,3dc76f96,1a04bd71,6aeca894,73553a0,1faeed0f,6bd2d506)\n,S(f7b7e1e,d56b7caa,74f60145,98c18126,d8bf10ad,c37cf1bb,5e6c88ae,f9f6e6e4,a019d45a,7e091a62,8b7125e,d3720f95,dcc091e4,2ff17050,da596fdb,58ebc508)\n,S(c6e9b0e1,177dedb1,2e19a0c0,d1167a8d,8095b2fa,1f2dc402,adef0cad,d5d87d3a,64440da5,2b3ec64,4565ad12,6f732ae3,c81276df,5ef15605,3318693c,91c12b43)\n,S(653d41dc,e6ae6cb9,45533e54,63b50a4b,72f6efa9,7884d878,52c32eac,fa0f59e,693da28a,13a9cde,d1b7597a,c199e00f,fac2f6f0,6bb0dc58,940b6734,e5eb934a)\n,S(b9830b38,f0f8d466,e363fe57,38124fd1,8c9f60f8,cdaf6fd1,a10205b9,5c7212ce,a3e31906,6ace61e4,ad861027,7a12d498,5c35969f,62e5573a,5bf4ac35,277cf444)\n,S(94d9457b,eb2bf3db,cd38a667,adda8750,f449af92,6a92fc93,f1dbaa85,457182ec,ff1bd647,8f00626d,1b203da6,992a2366,2ca2b39e,f6c1528e,956d7d81,7e2497c5)\n,S(816f295f,1648ccd4,360b1807,bfb9b05e,4a84af7a,140a1f2a,f4016527,1d4b5b80,98217f98,6ff6f38,1987db34,7c6d432b,f24b664a,bb47124e,641d0677,aa4ec143)\n,S(3b830637,17254b06,16c1a5e8,999dcdc7,cf3cac91,67284981,75c6909,92e2b2d8,dc2d471c,5323eeeb,611495f9,cb37840c,905eaeac,a85cca33,76d24705,d152acce)\n,S(33282bad,f48bba9b,3db3cab7,c3b46c83,867a63b0,db393ed1,2a4bf49f,cd2f7c5b,78733604,b1c94144,ab9a4886,80bc53ec,9d67c4cf,dc77af88,40bc3535,f2c42309)\n,S(58e15e93,95c3abc5,2ea68f94,6e3f7943,b1ddcc8c,e258aca2,8cd9f5e3,14b257ca,d7c15bc8,53dedf6b,f7dfad87,bcac6e37,f90d32b8,344d95a6,44879ba1,e170070f)\n,S(c9ee3e27,54e8c8a1,e99c39ee,cd3d0b50,f8fcd03f,ccdab94b,e503a1ef,b66d900f,a1ce86c4,7f78400,51c87612,1b26922f,2b4b2358,e302c568,da6310f5,14909db5)\n,S(6e2621bf,dcab8898,7d50b5ac,b27eb94,b52cfd9d,29e80d2e,befb5478,a3c5a514,ec4c657f,ebbe25bd,9d6b172,68ada77c,5bc4f32f,57f325db,9556ae0b,4d1adda2)\n,S(6e3c35cb,9c86216a,250ae256,f8ab076a,76264ca9,97b1a6e7,41ee96da,5cfb2c9a,d45f0082,46489230,268e5c99,56dcff9c,bf6a0621,f8978be8,f2183920,eef3dd74)\n,S(f3b5baab,882e20ae,b0f444e7,47688392,37acdb60,e7c878ff,40ec0aab,7896c278,7d8d6b2f,92addfcf,a248aa96,e8a87e92,4c821c1c,cf7b343a,f588ce7e,93e37260)\n,S(b89b2380,110087ce,8c8bfded,7dc98e40,3cada8dd,77b2e68d,120361dd,6beeca0a,616e00aa,4aba8494,9835b0a1,eb0ff955,6268d2cc,91b7672,d0164693,848389b8)\n,S(6659b720,1db6e160,58854e12,dd78b89d,40d91a17,b7eac836,ab8453c9,ee3cdbe5,5ac9db66,325b000,1983df0b,6693d93b,adf7e35a,a18f76ea,e2053e34,b1b8908d)\n,S(6fc76d79,bf3c34ce,afe73e9d,7a77af23,bcc7e894,dc555f63,8b9d53c6,c15803e6,c366b411,1d6ee57d,52d3938e,f2c0c620,746d636c,92ab73f0,bc812888,ef0b5ac0)\n,S(a06b2395,238326ea,20545cd7,b021a5cc,9e21e9e3,26c28b1c,fb50f3d5,e0f6e069,8560335b,a5c16aec,a297f185,ab09e976,dc57934,61170b35,b8a3b6b7,4ff622f1)\n,S(bb8064ee,177f3753,19e45c8c,4dcdda70,ddc4bfff,1a866b7a,ae7922e3,13d1515a,a3be84ad,274704ff,e7a76277,d87687ff,572633b,2fb46b4b,40f601a1,ccb98d7d)\n,S(27f08788,6a2c0ab,8f26ef15,a85d2d38,f6fb8cba,622acf21,77ac20f2,f05962be,ab2f2929,45163b83,c9cda8e9,4f6d8f7f,167bb589,50d4226f,827c5b5f,a782f8d2)\n,S(f51d558,dfd8f74b,7c9c3768,65f82932,65c1bbad,d8aa64d1,ebbc09df,b7f6de1,101c88a8,170355ec,ac23ac98,ab5aac67,7a68a94b,9343012f,74cccfe9,308c039b)\n,S(60fed665,a3ba26d,eccd1ab6,c956ed2f,e33da384,dc687f41,6c37b550,123a5441,4bc061b9,b2d7c63a,ac042a7c,efb2b5c6,a43260f6,8bd0f843,fa218cc2,3fc9b5bd)\n,S(fdb04aaa,f2958755,ed65f968,ce4fbb81,ccd8c616,32e9494d,510a7b3e,d2564256,afbcece8,c52725ce,c0ef2aaf,a094385a,831afaa6,7c4cdc9,57712bf6,1073990a)\n,S(7f45848c,cac04d5a,d9caa28c,e60628c,aea7f076,262689e8,27fc7084,d6b94dbb,51e16503,e044b101,a0d12d73,3a57d8c1,546c1f04,386721d7,a6f9fb15,458e41c9)\n,S(b4091018,4c556249,30ec006,95f02723,b9cef749,57996d50,72642d8a,b492c9be,1b3c221c,235e721e,95bdd451,f0f0fc8d,a6a18260,d47b0c09,5f3e1b1e,f6135e5d)\n,S(4d5b1a50,d00b83fa,93ab4746,3f84dc21,d0ff4559,2e697fa0,bf8e8f68,5e1c9713,da52a118,24ed00e,6a2434d1,ab383f0f,1e495dac,d08c6a2d,2425e25,a9434af2)\n,S(63fb80ea,cb68910f,69700533,8a1769f0,69acdc85,da71618a,9cc03557,1d4bdca4,7f2e51d0,4446763,9cfdc2fb,247c7cb9,5b8e01a5,e27e6bda,6713ba98,1936573e)\n,S(f5035d5e,12313edd,b0c31851,266f7e92,6f16c1f5,a6031aae,bd5e14fc,18304faf,7381fc4b,cfb33c18,7bb59e22,be95081c,6f52cefe,dd84bf6c,799f419,453f61fd)\n,S(f62c9afc,5a2cfec6,afd54b78,375a73b0,eb5a73b6,f53e24a0,6d1e9111,ff20e835,a5d386e,211845ce,9ffeb917,76a8b91e,27f0773,b2d53fb8,2ac44b8e,83198350)\n,S(7477749f,3824c134,c1a91bfd,d1b646f6,43f8109,c2f46887,22799f6d,53e6280b,232b459,2259cff5,99e4af77,1e03c94a,11fc32bf,f2598beb,2316d3aa,d9461c55)\n,S(2e2c5f43,5fcf4fcf,72f9629e,ef6ac5f4,31073f2e,7034d6a7,64af194b,1e84b6ca,cb94ef61,c794f44f,2c7d1115,b9dca665,7fd1c184,e30f6f60,caf40e75,142ee26a)\n,S(8f7e4f94,fd2a651,86e4624a,93272af8,2d362587,62a0baae,f65cf47a,bcd8214a,9edada6a,d23cf1c0,dd98b1f9,d9a83879,4c21654d,239f1a9b,dbace84e,de6145a2)\n,S(e184ae37,4704eed2,b054b667,33544ff5,6ce55a9f,bcd7625f,740b6a67,621c75c3,ea773744,2212bf1d,a26fd119,248b0c51,c413ebaf,75e52de8,97b4383d,b397e144)\n,S(fa47fd9b,94cb72b2,60fe208b,c022dfe3,a2bce2f9,ec776313,a497cd91,4166850e,9a12bbf8,a6e0ff91,5176f71b,16327c7,ea5d928d,816de31f,c8de2be4,57b0c185)\n,S(98d36e76,a4caf051,e848fa49,64e09bfa,815109f8,63cd5e99,405e64ec,d526c67,706b36aa,6e67352,8fed83b6,8118ae7,1e043964,f444c477,590430aa,8d80d19e)\n,S(e7722849,c00c5875,44751cf9,a88fe964,9efc05a3,4d810788,f30a2057,cc1d0c72,d64ba14f,978e1769,51951a4e,8431af78,57e6d97a,f5fc5ba0,2a1fd46b,1c215e7e)\n,S(93374edb,547efea,e5f22d56,acd80ce2,80e4d47a,bddd1d9c,9d85afe4,aa6fe6e,e9c40824,cdedb038,9b42e2e7,2e15009b,215d9080,7df6316e,6e81ec9d,40dbbee3)\n,S(840eb546,a076bf81,e4954196,6eb8c437,3a055239,8dc4deb8,62a73b76,8b380e28,97b69f93,ac1009d,a3f47ff1,b62ea845,f2900d7c,84e8a1d1,48d96f,df6fdb98)\n,S(fdc4ef19,59ca06ae,92587249,e45d456f,d7484278,6f4b3381,676094ab,446c3e8d,c832aa3f,f0ce9f79,1fbe89e1,5511e25c,6a7a4230,401471c3,7b9ab011,1b304366)\n,S(42abeb49,83403d4b,5f529eff,16bb991c,ce705250,5a61fd6b,96467a51,f661651e,d815247a,f807af52,b454e83c,9d46327e,d80d3ec3,60f84a3c,dc88b9b2,59efb05e)\n,S(176fc9a0,b44a34ff,fd652cc8,bf715a12,a9d5f40b,adef6032,24536660,5e0680af,a47100b7,e0fc557a,f5ca7dc1,c220b5a,770231ac,184f14f,57e554d6,11daba35)\n,S(11fa2a03,aba7cdd3,1940923d,37045c99,ff531ba2,a1266fc,26ce7a26,c6495e63,360c9e1c,54fbc823,9878d725,30254bfa,70453c3b,934915e9,5ea4542c,1026b272)\n,S(b2dda11e,db5f668b,8d90dc96,9d10f8dc,6c95a16a,a3e2cbb,3a1ccc03,d9acec22,f4d44dc4,8c260995,4fc1316a,2d5bfe6a,18ea754,43bd9a55,2b2f2f08,aa0652c5)\n,S(baa1d433,e2adc426,5f87f407,1c8c35ca,423f3e76,5a835a70,2d804593,cfc3f7b,3f55a493,9e25a77,8a9d3ad5,4ccccebb,8a45486e,1aeb817c,dc0a2799,6e70e996)\n,S(478f18c,30470c65,b578a6c5,df9c71ac,934e3439,ee5d5d23,21f8f5a1,7adfe55c,c43dccf1,9a9e48c4,41ebdc12,f2876cbe,32852cbf,d3bebc9b,a3708fe,6cfa450e)\n,S(18223de3,d62283f6,c440102a,a1769ac6,f5e1a0a2,cf3fdb2d,ec62563f,4e149ebb,57fc95f7,f8e3151b,80fa4e68,45349b7,961fe72a,d6ffe725,e3a0a0f8,907a4555)\n,S(2c8c523e,179bc8d2,1e3faa5f,5db5dcf2,cfcb0426,3f138cde,428746d9,94a17276,c3f00baa,69061521,5d512c97,aac1b858,40842fa0,d8bdc773,4e11d370,4f6330f3)\n,S(a001d77,af44959f,f1e83be7,d6b16496,2aecd428,3ae2c38d,f3ed3fb6,a0f12460,e68a305b,6f60a1ae,5a01eaa6,7675f0d9,8e6c5baf,75d725bd,d0e2a499,1c323770)\n,S(cd8a1d36,2ba4a2db,255ebbab,ede7ab7d,383b641c,515250a5,cf52a2b6,a5b2ea9,20716fe1,e0857b5b,55b836d9,39d3175,188a6f9d,d3cc42ba,8c61a7a8,d9a7a1d1)\n,S(7796adbb,7949b234,6df5147e,c3d7e0c2,5b61a874,43fea9f4,b4e742fe,6c1218a5,fc338089,c80c6415,dbb32994,cf5e2af6,b5c3342d,d291d7da,def80628,a904edfb)\n,S(3c345146,27eb74dd,88ecbb47,aa9933ba,b7fc8cfc,bd80654a,f96aad51,5c1a7017,cf4318c4,1c021c06,5c100913,dc84259d,2b8d6ee8,102e5c6d,c3f809a5,7f8f2beb)\n,S(cb4470d2,d5715339,acf391e6,5e3cc397,eac932d5,5acb65cd,a94538fd,eb684f67,15e6e6f3,383b8bd,1b674497,589ed7cb,e0f41394,e366ec61,b7e1b927,daa6434b)\n,S(954a527f,c4496d02,915f0b11,4e95f104,c500be4d,a61eca3,2fadde9d,c1f118f2,96acbc82,d0dd6226,5652b61e,226b7ef1,c6f00491,91bce5cc,fecaebd2,fdd28ed0)\n,S(d3be92f5,697a11cb,b8374938,9fe89418,97707ffb,24fcce90,16debabb,a4faa4ec,23d04ff1,e309abd2,aeac3159,ed9acffb,9c5336f5,517531c9,f1cc2dc3,a2d300bb)\n,S(7490df7d,5a7ca290,fe029f3e,d92f530a,23a7c983,654bf19d,5c9ee21d,b4f57586,3d7f28c8,81b259e9,f5f735fb,be608154,b80f38d9,b5131bd9,a6e2dabe,7ab2bd54)\n,S(992c4a82,1176a784,ba2767ae,a3d39697,5f96ea50,b7bc8947,2356fd98,20aa666f,519d9792,458fd39,7050829b,6ef7449d,da4ebdcf,fecb2a3,8ca0f057,f051c851)\n,S(f070e211,b384b497,3d2dac23,3373a3cf,6dc7b9a6,2529af9c,b2fb1e84,b40901e1,175cb1d4,f8339521,26d4b41d,9fe27781,92a2a1d4,7d5faa48,1e96f51,beaad506)\n,S(108f6113,c2795472,244db9f2,3a1002b9,349bd34e,f9c9d70f,e146df96,be198ede,2bb9d195,d087015c,253af145,bdd6134a,1845dd92,45d7d8c7,c12ad2ba,2027ba2f)\n,S(ceea04f7,9b611056,ed7043f9,707bb318,e3ad332,1da82104,9790b1d9,d264349e,5380e9f,1c52e5ba,6ce18afd,289f49bb,c358bb90,9db23d67,a851dcf,9ba5ec9)\n,S(1c74297b,14a4fbf1,2a6421f7,561c549,414147c3,2a683391,c4cc5eb0,79948cd7,581c9642,98232591,bd5469eb,c1a01be8,37bd5d43,cb63e21e,8540ee84,52b12ab1)\n,S(14bd0f2a,ebcbdc9,22fe8660,c63bf12,c6db8521,f1f0acf,7406e982,a103bdc2,46c3002b,1e5f25e3,98c8d7af,e340aab7,23ccb0d2,7e24bec4,55d547ff,1df59c96)\n,S(32c923a1,526240db,b234ab72,565d6880,b260e7a4,33747aa2,802da713,c30ae9a3,b79bdd74,6ce4ecd4,a554d66e,b787e312,a1ed53e9,c77cd6fc,73b1bfee,8b13d620)\n,S(af0ec2cf,21ecdfc6,a71c6edf,6f73ab6c,76600a89,86b62006,8b246008,7cdf168,d229f3c2,7db8019a,eeb8f25d,84f3e341,681de4ab,2173f510,51ef4249,7a9dbb0a)\n,S(1d648075,8273a9a9,c970cb10,5ae7e537,b017aadc,8be5044c,a1f6a3ef,4d2cb275,3faae8a6,87925e3c,e9c3482,d34c76a5,702c9bea,a307aa45,f2ee992,efd86387)\n,S(160ebccd,b4d5561b,488037ac,25224afd,91c66584,660af970,672d9514,87376568,f510b49c,b58b09f9,46001627,2fe744cf,e6e7abef,8f54552b,41b6158c,2ce2db5)\n,S(50867128,704795c1,a190077d,49a87c99,8b10601b,c37b7aa9,908ce92f,28969c30,106fc462,a115f2b3,e83a5474,7a692101,8c73853d,83d8a1b2,2b0bb785,bda8a896)\n,S(3ff4aa26,7e8d344c,ac75a46f,7b17af59,5d056078,fe860a96,573a8f0c,164c54ee,2632d1fe,f4b34a45,ac38a80d,236b51ae,de92fb72,47b81f6d,af1b9554,4d426d82)\n,S(739f875c,ebe795f0,cbb846c5,88c2b809,21468ec6,4ae09034,6032a97d,fda93c1c,8393a2b0,f3e68c9e,a57d5c8b,f8355d8e,71f4699f,201636da,5451023c,92a1b98f)\n,S(717bbfa2,b2c4818,ae620498,3506a421,8cdff59f,2e040521,764b8013,b688c7bf,9229cafb,e99cbcd5,3f73938e,82723d2f,e7187ca2,13d9e0a,57c12254,dbc7f63d)\n,S(cc0a808f,2618d1f4,27f165df,4412739a,6ad9af38,e8c25a2b,14bc97aa,1c5b0f7b,3b83d5f2,3d94aa87,9769c3d0,5e921731,17c345a1,3418ec3,2f92d4b2,c1e275ad)\n,S(4a0b31f8,8f82abc5,6867fffa,6deb20d2,d8e7613b,aff466db,b260734d,1ef8b1c9,375d7c69,83784dbe,a5bfa8c5,8f8baead,8e94b9b5,95c01d9b,2747a06c,5fb7272e)\n,S(52149a1c,53b2da97,f39e9dd0,23443cd2,b21e404e,b6235014,ce04c616,9f5d05a8,a9f9a4cb,ea6d202a,c6b5aa93,28f583c4,45db83e5,8ba7fc25,3eb43e3,df7f542a)\n,S(6e294aff,9e9fe4df,9345bd93,1229a7b0,955a3b63,fd19d1ac,57bbed72,50262b8b,abe6fad1,5fe423b,e1a55867,137c485f,85639823,beb6ab2,81dd9e1e,ed447123)\n,S(e9a70c2,c5e962c4,dffe24f3,8930e095,c2b0b540,cca2d891,2f6f5b4f,e4592e9d,8d115293,95051750,ccc9369,63b987f3,96bd05a1,49915103,1e47baab,358decf8)\n,S(e6c934a,57ec5422,5d42dbca,715e62fc,ae957590,52849f8c,b5f282a9,b82d4adf,6da738b2,40ff3070,bf0c4ac5,50ca5a77,31db8a07,20312e2f,f9de572d,d7b67d4f)\n,S(89b46ad7,cbcf1b6e,8741e422,ef53beea,49662d96,bcebbffb,57baf0d2,1441a0a2,b7205431,1798624a,3a1708a8,986ca47e,374d9704,22f7d3fc,57ca7f22,94913e8)\n,S(5b949cc2,69f0b0a0,c3b85fd9,e45b737e,7379a4bc,70d926cd,cad87ae3,4e7a686,7e54863,c1efbe6a,a98d6466,65057347,7291b068,a43f1783,9d02b190,9327bac9)\n,S(787baad8,9882587a,97b049cb,9906db7d,b909239,aa50e073,d476081b,4a73d7eb,8e3bb416,b57585f9,8b337b72,b23c2b9e,c790ef6c,bd397b18,ab78f8a8,cb662425)\n,S(58460ae1,5a204740,c375cef9,e447edc1,2fb6a0ae,2f8d18b2,8e82ba60,729c82be,1bdf3641,d16d89ee,378e83ea,302efb0e,2a9471ac,9bcbf1e1,662885a0,81c7780d)\n,S(c9bc29a2,1f7383a3,a90ed3d3,fc5f6d32,1697e354,a77173fd,77899d17,2012f63f,1c850132,db81d86e,e866d9e5,75c4f7b6,270599f,2e48c0b4,94317dc3,97d1043b)\n,S(d4c54b66,a1ff77b7,63f8c520,181e4ae2,6b82643d,758f872d,cddef933,36cb84b7,23e64d9b,f7456086,ce8b778a,194f8b8d,f1f0bf38,fbb8454f,d271d062,ddb9b9ce)\n,S(a947a90b,b27db3eb,8b4ca4cf,f947e587,54fe6a48,7b922ab1,9ef4b5c2,99eabe3f,c83e7022,f6e12dbb,f95e95dd,2bde8b94,3d72cbb6,5b222f57,94d13251,c9fb975c)\n,S(d83f6040,4099d448,8ec6785,131524f7,3e58727e,829b3d58,7d445197,cb367746,6d50285f,831e1173,cfd7de2d,d1c7c29,532a391c,3f450b7,f25e758b,f412a8a7)\n,S(75d60448,78902615,467175b4,bc16c936,14bb10e7,c9fae9f4,57d4a210,2d506a0b,885237bd,b4277447,fc7970c2,4e3e7240,ca24a07c,e46b8bac,7a91272c,ad9c5854)\n,S(1f96a542,2ea4726b,b639d270,17eadf33,43bfbb7f,f1fe9307,a20fb5c5,f1c4fda,5f80a9b3,ec8b0fde,ee914ae8,e6052100,77701a73,57829803,4cac5d44,91ce0a22)\n,S(3c0159ab,4f27b61e,c2599ad0,a79b4228,9000fcb9,ceadb440,24e1527a,f5ebb9b1,77df26bb,659283a,37abc70f,9f465794,ef3fb178,107ccaa7,a5404c88,a67a12ef)\n,S(5b250c4a,25293ab5,34f287a4,9f9f966b,7ebc1c93,e5a774f7,c98980fa,7980e07a,dd6c9c36,5c015685,9e1ec5fd,3a740d1d,7eaea301,2311d1,a9cf505e,7e594613)\n,S(20a6dfe3,71696c50,c3a7abf9,3341c41d,9d6d2111,729fe45e,f3ceb49e,977151fb,bfdd0224,fff97fd7,ac3eda1e,ec0e6f02,8bf7a3b8,23cb49d1,52d643e8,fef3d820)\n,S(915fe7ad,5840d789,b94d1bd3,2d555340,3c9152f0,340a5f87,6862ca40,19825b79,8d2f0ba,3459615a,2036a07,ca57d0e0,f3a4290b,f5fa7327,2431e3e7,bc44255)\n,S(d6aefb63,618e2fd0,34e4f17c,eb766d5b,c27c9a15,d796b16b,7cf8ba71,31a2404,f0abb6a6,e862f6e5,d71b062d,e9bb7b9,dfb2e4be,1c5a85a6,dd3e0c25,3617e8cb)\n,S(4c804837,7d65a97e,f65a342b,c4549e16,5cb1c50c,cd1549e4,d2d2ec10,c663882d,e1ec6bee,d0bb7243,a384e6ef,100e5180,4de6ac00,b06d7b67,3e445dc5,7b76dc8c)\n,S(3a6df802,f372b56,1ebed30b,a4740d03,d257d256,4931422d,fd3c8c1c,619847f4,d168c60c,9a86bea7,e48e58db,d8e6bdcf,b6ea7d31,d57f8996,70f79e33,241bc439)\n,S(423eedec,169fa4aa,52588642,a62ec6d3,8acf2ca1,c8098c24,4a56a6b3,169f9932,4887b475,7f27b4b8,d288c05d,3efc1d98,c0428b5d,e4db1cb0,6dcc4782,10cc6f52)\n,S(2864f372,8f8c5ca7,5dc56dad,8b968c71,a008eaab,80b8bf28,16bba436,78465be6,14f5e2c3,423f863,64962871,b786c840,50cc07b9,f537ddfe,cf81b95a,a276b813)\n,S(cb96234a,985e2ada,d8130ec5,472efca5,7ed7331d,ae7570c4,dd42f4db,9597ff08,69722bbe,5b367ce,5868b30b,31f67c8c,a5f047ba,a7f65202,48041458,66b88d5a)\n,S(3be93dc2,99b7e701,ddf0f239,286ac598,bea1ce42,f1e21ae8,1cdf07a7,66c1123e,8a9c69a6,6a475e40,d81b5d0c,7734cec3,40f528f7,4fa0073c,ee92161e,cbb92d00)\n,S(9022c43c,7acf3552,fed52d25,d25dd3f2,9aa61fa6,988a5499,6aa3626b,88b7f497,c514a46,f328c9a5,dc2fd03f,81ce3fda,915f1e8f,127348ff,55e4b5ca,2eba0e53)\n,S(a24cade9,47a24abc,a050ef7,f62d138b,85c96d0d,2edac403,dad58ff7,8a2a9d3b,a209613b,c05a7b52,41697e24,73fa7fc,412f8fc5,b2fd0447,a2e20e71,949cbc0a)\n,S(cb2010d3,94259307,ee3491c5,58efbaaa,203cef1f,8a0a1e99,67a4ff3e,719495f7,1bc5b6a5,b5acd447,baec221,141b601b,a5a3a640,7f84b8f4,319a760a,6226b0c)\n,S(fda8c6d7,c6302b27,76172f01,5e59da8e,4af1e96c,3bd05f2e,a393fb7e,1dc1ecbd,87ce1baa,ef24102e,19c7a17e,b267acee,7681d40d,705f7058,c514c9c1,f615e666)\n,S(b459fb13,5b9902e1,760286b,b37ffa03,ceabb618,e684823c,17ba97dd,c95ebdf5,6e35fbaf,b5175d3f,ac60f2db,97447cc4,a79c212d,5496ab7e,4b536ddd,797a19d7)\n,S(ec137d8f,23b119eb,a286af6c,583ef011,5d21f335,8a1a2df,ba6af216,d03b4a36,344fd1e4,869d68a0,87a1974a,d48b9704,5db2940c,dec017fd,a0605c11,8e5c7bfa)\n,S(8e0be401,9f2d3cb8,9ab07348,cae295c5,eb7fd7aa,fa5a83e9,3d68d994,af68e14f,542fcba8,51510baf,6f962401,e8a607c5,34a32971,22645ebe,2dd51867,b26c80d4)\n,S(b1dc8611,3cc18708,338542ac,698a6981,a6192261,7c1f71d4,3b72baeb,1c0dab03,f3e61423,5b683727,f1cca8e8,41de0474,e8c4da8,d2bef431,3cc2da5c,c4ccf38d)\n,S(d438b027,7f6c7048,c1eba2c,c1d7e554,888a7025,3f513261,3bccad8f,a5a0a9d5,fc419852,23f6ba14,adda0abc,389d2d16,4a910dab,b464232,298c2a1c,50ae64be)\n,S(5484d618,5cdf3f21,42235130,62ddf251,1f53a84f,f0fada86,602c4b13,3dea0f70,6e697180,33860802,6ff41cec,cea79f48,b695aa37,2a76d046,47603a67,ccf9615c)\n,S(8c1856e7,6842f5ce,82c09a82,4d343a6b,ac67ff27,f6d32de6,7117dd75,59df362c,70f78515,c4bd17c,23f61049,d6ccded4,100234ba,b7e1b9be,16925635,a9aeea2a)\n,S(48052022,94350095,8c904f57,54285e1a,7a17ff81,dde1f50,8586273e,40bd531d,7f1ad451,38b44b15,33327a0b,15fba2a3,f70989e9,1c271b1,461750c1,5044294b)\n,S(4adae425,86b0b95c,fc26159c,6aa0b1ee,dbbc936c,83fd6056,f2b730ec,14dc17e1,e6d0f9d0,bfec452e,3f2f9b39,4d73c72b,990f9683,b6004fa3,8e8831b4,f46f9d4a)\n,S(d296fd2,926eab53,db70b1d8,d5c999c5,7eb36987,62537954,2074ae12,af5844f0,b4472b2,c33661db,50b4370,e0ae7811,b16646bd,3f4771a3,113d677c,7f1c0cba)\n,S(1dbf607f,5d1ea26f,ee8e416a,52c8475e,a8363cde,6bebcbb9,bc04cf4d,cd19cd54,832c9d78,60c8acc4,5d00a568,2d28fe07,4952a897,619f8b23,42dee2b5,e20482d3)\n,S(12321adb,c5997830,8689b103,ec1552eb,679a3ae9,70ccfc46,f4adab54,f8dcb2b2,92dd316c,bef2864c,bd5002f5,ba052712,3f920db9,44992ccf,1b2f967c,b70d1f1f)\n,S(fa2c024b,76460eb7,a64d1e1e,fe059496,c28372c8,1d00cbec,9ea76f62,546642ee,5a848904,a654469b,dc3eec26,736d7677,ceae5fd6,d6f30adf,8c3fb95a,bd8e5d8f)\n,S(a77dcc2b,218b5acc,d6172931,91e8ac19,fa4d74ab,4c88b84,775d2f35,3f51e7c3,de872263,4e2ff356,7d9e419f,26ff51b6,c41fbbf,48124d01,8409a516,9735a950)\n,S(83d740a8,52a6139b,53b60796,50d64902,9f9fe35f,87689977,66246b2f,91e038a,1c630f32,722468ea,72bfa970,8a27bd9a,97b68e53,12b7799f,66ede01e,9c75b57)\n,S(d894b986,d74580bd,84b24a68,eba87e8,32a9c34d,bafc5717,cdc03c22,8758c9a9,f0d68c3d,284574ea,21a357e8,cad5fecb,90a57b52,62f6ee06,1868d970,458d502e)\n,S(67b4473b,3f1420f5,a8fcb39c,8671d583,cc1b9f48,e288f311,2af6241c,4190a786,14fb410e,e33f4a6a,3fe5dd9d,c30d581d,a350c756,6b513290,7f3ce97,29310b55)\n,S(24522965,87039934,a6927d0b,782988cc,b126b61e,db154f07,18d97d41,6dc8f0c6,538c4e2,a7e180e2,14e36785,6dedb105,f688f1c5,9bf81d30,d92a8a93,d3c5a82)\n,S(b47bdb89,b087a27a,663f9884,7ab44a64,43fc43df,bb61f4d2,bc5b7ff9,234644cc,ee508868,402613fa,1a200032,afacf672,9bb3f7f2,43b2f415,383f4067,d0212483)\n,S(92eb31b5,79ac7b0f,d32ac278,4f3d2c63,93c285c9,567bf912,584c00af,3be97d8e,518e379b,ea24a823,e725a3a3,3608e62a,7a40aaf5,318c2c,41afefe8,ec9afe7)\n,S(a5e06969,cd69f1b6,c30ab55,1028e1c6,1bef12b4,b2c2d1a2,572c3648,fc739332,378a3b33,3db8d289,667bcd98,9a3cbe9f,f20b08de,4047164c,7f4bf9fe,5d1f93b5)\n,S(604823c2,f1ab2bf7,eba63c65,610fe0eb,c958e8c4,7f509c8b,42b79934,7fbd9bc6,29f532aa,3707e872,2169a02c,210fa9f6,100c6b1f,926c73e,a3bd0427,a1844733)\n,S(1b4bde22,bfef0cb0,ec9e84fc,e3af2e8d,ce7f381c,e9766b1c,c1d5fd90,9a1bc891,ab20347e,3f4c7ba3,2bb773d1,50868756,69865df1,18297657,6c283704,49451f49)\n,S(10caa116,2067d668,5371a20d,97313b54,4d79b61b,3bb41a87,980eac97,e82f58ee,7ee4f118,32d9c2bb,1f849731,d779d12,571a084a,4ecbf4d6,128f33f,6af477e4)\n,S(71e7f07,513d42fd,5c0ad06c,c96ce17d,3542a4a1,a101e581,f7394c2f,d89e2072,e214ca42,1033650f,e420e574,e2266c23,3897de25,90dc3999,bee41181,db0a81e4)\n,S(fcbe392d,82b4859a,2424ecec,dd8cd47d,bbb89d15,ea2b9591,f5ff1067,e2cbadaf,9b06334f,6ae45d74,44b5f09a,995fd91c,a2712ac8,b159126c,8cc0120c,513f0bcf)\n,S(a64d9e9b,5c583eed,aa7934ef,a7ad036,8dc9adc1,9437f97a,7a16b645,cf46e262,9357dd,1aef4b07,a376b468,99692754,9ddfe9d6,7982a7fc,d607f02b,8a7158a2)\n,S(e634938c,aaa4010f,f4a1e760,d87a253d,5fd645a2,4f85a75f,8eba78bd,d876fcd7,84be5fa9,c11d8c3f,54f757ca,d9ec4e18,86e52db1,4b3cd0d3,97f666fb,f347d24e)\n,S(4640245e,23e6eb75,6e0a44f7,698c1faa,33ea4f87,7a52f850,3477ad4f,8ae2f4bc,ca2a72a4,1348d3f2,6a7fb977,d3106710,2494a982,a96c6514,7fbfcca9,1ed2225b)\n,S(c2a175c7,badbfe95,cf7db594,626a42d0,1247ebe5,160c58a0,2437fcd5,eed8c59,94814fe3,7692ad4f,ef0f4fd3,41c63f84,b282324e,faafbc59,38d88f4f,eff210e)\n,S(b1296159,d0651519,d76bffdd,98013d1a,bb17de49,111e3035,5f7a1d40,3d8d9148,ae3c442c,2dac0847,bd8d9052,a5470b9c,80536fd9,feb5f820,e4c54ac1,78aa44e)\n,S(d30b1976,b0867b57,84d5e619,a5a63516,13980093,5a9458ed,59e4a3bc,ab69b7c8,1b1eee49,690de06d,7a71c334,4fc0a647,133f2fc2,99a8f096,a8a445bb,27f5b96f)\n,S(fb1c3b4,5b0f6f0e,35b93a5e,ea157e60,134b00c5,38a6e429,301962f8,38fe51ae,cf79bafa,d7c3fb08,49e1c2cd,48a90ae4,af507bba,5a42f3fe,bb1e101d,7f5fb818)\n,S(2bc4d2c1,d34c6d41,9d97ddc0,c758fac9,ff6489fd,786065a3,61ef442a,fe37199f,5b932f15,9500ef4e,a331be88,7022f42f,5148c54b,30957b0,424a168c,c6d76ceb)\n,S(2744c1af,3459c35f,d8e1b27,668ac653,eb25f017,e4fa15d,6c1a6bae,e50f3a99,12f95a25,a87e482c,c647b1a9,f22286cf,3297a354,4c7b575e,aa888dd5,6db2844a)\n,S(6429f3ff,d37b53d4,88024393,d3a9dabf,f84e3974,ef60f446,61ec9da5,efc736ee,e8426421,f15768f0,caf020ec,3999e8d3,a1aafcb8,24339574,fe119500,a168016a)\n,S(33c132ef,437e9dd8,ee9c028a,2ad51c9e,5a836eb5,4bd97e5b,4b5b6bcf,38d006af,e2527602,e5e74d67,5a5115cb,9a89c579,c760445c,c70d95f1,9ac82a1e,6ca16c6d)\n,S(3ac856f3,7d53e19f,f6ab49e3,94da6ed2,c8645e65,f4666bfb,163778ce,7cd910ab,ef40efa2,55d7a5bf,99e39055,8993f753,8fd203d6,7fdfb7d0,81cf8bc7,947cafcc)\n,S(5ec9648d,b58770e0,314217e,f090c776,396f47e8,ba27c30b,98c35955,aab03247,3d3402e0,8fb71448,6ee97fd9,15293e53,b095fe03,9cc3100f,21240a24,d70819b6)\n,S(54955c84,3c5dddd,89f60de3,828fe4f7,1666d807,ff88006f,b46c37bb,8a822645,c8745950,64b3c721,9eda8253,633deb6e,ac9a7825,8d1de2e6,c2dee05c,f167405d)\n,S(e0e845f9,35054008,fa44cc4f,1f2e538,33b58e73,bc6a04fd,c16faa76,c1a92d3c,edc48f46,2a41dc1b,bc604e0c,82d993,edc2990d,f59fa034,11702d86,46dd1c1d)\n,S(bdb43235,19acce9f,b95f83fa,485940c5,69108af1,376cd09c,884e6419,718ed14e,5669c5ac,84bacd6,eb6fa8e7,39da1196,dde69170,f5d4e5c6,2ad528,66b6d9a5)\n,S(d208bcfd,f9754dc6,7e099754,983fb58d,e5679bda,96d8404f,266c0e65,9e4160ee,c602f6f,f0f586f6,7ac771d1,fbf9d807,c2edf68c,a2c10cc2,314221fc,cd3007ee)\n,S(3cce9096,450e620f,29b2446,39e8809a,39000315,a887d6e3,da141ed3,32b1c30a,db0ee91,b8447860,18289da1,11b3bb62,289d21f5,2aa8f436,562e982d,bab44be1)\n,S(6c351350,d0fa9ae6,e1723848,33e654a3,f3f655de,7530d9bb,59d92462,1dcf8253,2e5ea374,7a368904,e4cc663,feaf6f92,4060dd70,95bab9,ca2e0773,4c48df83)\n,S(c64b42da,d63cff5a,ec1eb168,41fead6b,3dbcbd97,f6786efb,5336da16,35950d2f,73706863,cfee031e,3fee4be1,9241cd94,42c24f4c,c57faf70,f8ff8b81,f094ccef)\n,S(c4b99a41,7b2277a4,159bf3b4,859e36de,399862ac,70ffb482,b92e1b11,99c748d4,6ae88f86,1ff14b38,b545ec86,1a808c5c,cc78c3e7,91b48f29,350afe20,9efdc33f)\n,S(eecf955a,f1ae50dc,44b57715,5ea67ae,1ae39cf3,fd306eee,e943908b,a7a42a56,26c9e114,22cd3db4,b278adb0,8e4c16a2,1a4c0a9f,b837a493,6cbdb70c,65fc5be)\n,S(454ef33b,402e3a59,d437925a,b62100d0,974abf69,8803c04,436b4d2d,5a5819c9,4a38e398,1e1d9809,72df7faa,b06bfa96,20fe213a,36ca0227,c7c20ca9,2ef31563)\n,S(50f11935,c20dd410,7a2cfb65,2c94e39,8df7d985,c183259a,70f6a04c,6ac5734a,aed27454,75f207b5,dc1e9f4d,f8cf1108,c9507b03,d0e889d8,d33ebfb7,3b10e670)\n,S(43bfd366,10b67773,a254a077,624c2b53,4d8ded30,bf53e918,4f10e597,e2edd980,fd0655e2,e6b257ee,a249a5d4,299146d0,e08653cc,cef19a88,5ad6b33b,ae8f345c)\n,S(7ad3c8d8,85cacf19,ed6aca96,4607f344,91448d7a,651fda8f,2446686e,bd06a9f3,9cb921c2,3e338436,73fa1bd,101dc4f8,a9a714ad,7fb91057,dd5af779,835000a0)\n,S(874346d6,9cfbfc7a,2e13c605,baa69c5b,d39bd69,36841594,1cc50cd3,18c17380,35326549,dcc29eba,4d35a559,e8f2f0ba,b4d94ada,f2c18612,a45c9c90,8d99ef4f)\n,S(1001f64a,23afdd92,789390a2,bfde9ae1,d85737ce,3e5087cb,b1bf2d5c,fd0e6943,184b6a2d,ebd086eb,6e04db54,2146059,e6ee341d,1c8854e6,e57345fd,5dd237dc)\n,S(659607d2,68695906,fe752434,a229c309,60b33825,a41589d8,6e663230,c1610fe3,77005570,df191869,38a56d95,4643d991,486c70cd,3d5c336e,11a9667f,fd8f7862)\n,S(eab041d9,67f89c37,c04bc6f5,a9059d69,a53e5fbf,ef7c17e1,7cef48d7,e346abbf,a2c2fe6e,63e38c06,477d2821,d22b4a0e,4edb0b55,cb1d9fdd,6cd01ebb,d8fa51c9)\n,S(4ff2394f,377db94f,e96f51da,d7364407,ed6bc1d9,3822f24,91630c3c,abacda99,4a77b936,a42493f0,d739afce,b769c7ec,cc0d4720,93e839a4,330054db,22e93b31)\n,S(7952c74d,e0576ddc,c85f42e6,24937e98,1502b2c0,105b69bd,4e35f59f,1c2847b2,e7159304,dbd9183f,3abde60d,5ad65ab,5a4972ba,19739b65,1d50c056,ebdd5b81)\n,S(b3149a8e,f602b6a3,c69a769d,893d561d,c7438a74,bf47c2f8,ba07941d,b0dd214c,99e591f2,2f8da0b0,c9d7024b,c82d1031,cc4336e6,bf1436a6,bf03bc11,3f041979)\n,S(ac3bf353,ce672165,a7e736dd,632c7018,1e454200,77471380,7b875d3e,c81ead58,78def098,2f0f5936,5f5c6519,1857463f,7376ec93,f15c01c6,980d352d,17a40195)\n,S(9edcef9e,d26ac408,61d3fdc6,66e09068,a9b1e05,cc23202e,1d0b6e03,faf546de,b1387281,71de9aeb,b02b5290,d3d56d63,b6c98c00,cecf8b0b,540f70a3,79556f2b)\n,S(fd48622e,8dc91972,7ac21c30,c0fb8d02,d8cfdead,dfc39a22,59853e17,5d8e6d26,4bf26514,204912d6,8bca0ce6,71a967d9,921bb882,33099b76,7a056967,3fd42bcf)\n,S(e6dc2ea,c28def67,78b0a351,6ef0f4b,104fc7c9,88a03a46,8cfbf207,ca0ae0e8,d1892329,e77d5770,d9a84e59,c2d6f6e1,db6de419,87c5e3a0,ea508ea4,a11b3762)\n,S(e8ff8f65,559128fb,3fc52650,ba063717,cd2d140e,ed3fc4a9,10dccaad,bb0503db,f35c361a,8ea9b3a8,139676c,3ff31cdf,5511535,7859e5f9,3590302d,bd21e21d)\n,S(2e18c597,d4e4a4c7,d54bee9,215a1ee3,d149dce3,25cdc4af,f62a3da4,1922c2bd,3e8595ae,4b6cd57b,7f685a75,87ed61a3,281b52ff,d76e9126,4a0f0666,701c5354)\n,S(589924a1,2cc867c5,b2289f81,2d93f324,c2df420e,3c948bbc,e74b6bb4,6d30f262,f9bf3d02,cd0001c0,bb9558ff,515ee86f,e39d4357,fd39cc3c,8ce73c75,72850466)\n,S(ef55eae6,4a07199f,1a3f3463,5007a8c3,8d39db17,48af39cb,584d4471,d3d32e18,9d31abdf,91bfedda,3c1f02a,aceea672,21d347f3,5d355042,75452c91,5f4b19b5)\n,S(7a8f75a9,41182eee,49883295,56588c86,3021548,70ecc05b,31b83a1d,74be05d0,bda4d0ac,ac72ccc0,c07270fd,1c2bba00,4cc9ce5a,fc927f,6d4bc0a9,b2fb4a64)\n,S(330f8a4a,582dad9c,159e0f9,a47101b9,223fed7f,896679e4,f764b02b,3d1d9eeb,50695f30,f9dc9c75,6df20cd9,aca3a06d,7199c138,4b3ede52,2dfa0816,31fea2f7)\n,S(6dd34c6f,b89722cd,182cd5b6,a0d83132,56814bc,7ff147ae,668618e0,30bceab1,8998216e,8ccfeee2,78e5c0dd,e206d3b,1fe058c3,990159f,be3beb2a,2a97cd60)\n,S(66c2d4bc,1e1ee63e,75481e23,1e6df60b,82c73758,36d4c9e9,fa99a576,304ceb8,f6871e84,fcb56780,682bb226,a8d2f46b,89cf516a,7aa0de01,2ccd981a,b739244c)\n,S(560ac5cb,b9a55c0c,8bd6a36e,9dc90922,9297a452,b83f8db0,e0899577,cdb8d04d,b6255568,4574e609,ab7dff47,938008da,5b11adaa,480becaf,287f2216,cf1c7891)\n,S(a2377a79,e597dffe,224988b1,63ca63c6,67827b81,ccc645ea,cc23ddb2,2a1503e8,7663e301,4dcdbd71,620ff660,426581cb,7e723605,72b651a7,103faf36,480834bd)\n,S(fac987,e1c77065,bb1eeec0,fdd92f05,5d10e738,befbb155,152bde06,87c7fadb,c6fd2faf,683f4e87,77a6166b,59c4b93,e7f5d803,fec49ef3,29e1a4ee,9981e803)\n,S(81ee9f52,9b5c6b11,8fc6ec23,88f3ecac,4120f8ec,d134d22c,f809e2cb,1e88a490,e8bba906,3a3ba848,7bdf4a82,c5014493,40da0e2b,fda93fc2,b6440b50,d24536d8)\n,S(e6439a0d,545c7431,cd8321ea,420dd3d1,9932427d,475df712,529bfd17,99dbc4aa,6c86e739,b6d0f23c,d3570bc1,86fd9e1f,e617fc41,8089f2a9,d42d0b91,2b4c8d39)\n,S(e08169e0,f7362908,a0d207f,bf49a44f,5839c76e,7ad80a74,44e7d24b,573f0bfd,948ce18f,15ef6e2a,23f2db47,db402d38,2a4a3cc3,a8a3756a,c382cba4,f608283f)\n,S(5687e6f5,7b2bacda,eafe58b5,94bc322e,70c7afe7,884ab4fa,4d46467a,7a8ba729,994d9091,e432b4f6,72e7f711,b5e0a7bc,b07fae10,b6e05ca0,5a088cc6,e4d89d80)\n,S(6edfc830,82a178b0,d9160f4c,f0b01004,65c29bea,e3c29d31,e3826aad,9fa1979,5f4c6676,3df8ac3c,4490ec9,fcb0695b,e9c0532f,df526e83,f27ad47b,5bfff2d9)\n,S(28128135,a17d0e29,4871831d,2542c2e6,80dcd79f,6b4fafc2,722b7db8,4ed449ef,4f7e515e,b5c7eb7e,415d7b02,83ff11c4,8f3f3ce,a724c476,71d02d1,50835702)\n,S(f55371f4,2d617023,dd5542fa,db9a9127,c16ac04,1545db5a,a18cdbb0,cca4cacc,d0c795cc,54057d47,5bd080a1,acbe6881,3263f593,917e012c,dc1bdafb,920b3ec2)\n,S(10fffd7d,a62de848,c07b50b9,64e3b31,ee6a13ed,996fe92d,565cc54,fd0b7c1b,92107e28,5319ce07,61e5f212,5724f2eb,fc61498,f838717c,6637c7af,8f0fee23)\n,S(a6a73f68,bcb103c0,523c8f28,f14fafd7,5b8d399d,617a68d4,6ad0a1c8,6f12a46c,d18efb60,37f40a9f,6567c993,24f3a7a7,543fbc30,feec0252,87dc862e,b22fa279)\n,S(2984cd0d,5c4f1c06,3854d233,6cdfdca6,50c94275,975feb2d,1b0b5bb1,c7dda582,41b0a86,8064dfd6,5c2653b0,27dfcc75,50eb755d,7c1f5c78,b0c13493,acbb4db0)\n,S(a701d075,7be9ff89,67c67622,dfa8ff9f,82f7d5d7,814f6c29,c73045d0,c5b16589,ada61af5,62851c60,66501019,70953ba6,fca0d99f,42378b8a,5059ceb,2a0835f)\n,S(f07463c9,c37479e8,259a32a,a2e8f283,27cc267b,95aec8c1,1242a092,bf4c47b,1ae9bb16,e538ff69,1e9ecc98,838e112a,a2016657,c7af104c,ee92471c,df6cc136)\n,S(fdec5a71,21a17f37,b4c2e93f,56d910a1,788d2da,b3cce509,b3e2f3cc,f141043b,a62e32d9,336fcfd1,4bab6cf3,26ee3f31,4d2ad023,430768ae,8f093408,e3505d90)\n,S(be32f9cf,9a13d4d2,652d122c,c0ce07b,da21fc85,52c0808c,23dd5a5a,9ffb3599,a4a73b26,2b5f8239,e8c279b,20f79c71,7ea47a64,1c084f52,f1bd4f3d,dbcf9c43)\n,S(735a1f6e,2575ee01,9ebee00f,a4acbcc5,93bb6572,c4db9505,bf96a2f,43b66f38,20b1c7a,99c6cfcd,58b3f00a,3f9d7739,f9cb682d,946b33c8,879f041e,15e198f8)\n,S(a0b840b0,6d92eb95,4f029204,1229b9f0,f1838bdb,4ead7432,4d8facd,70f7447c,383fa2d6,47d88c1b,fc9b04a8,a27b3a99,1a22b82f,7c99fce5,5cf30855,ed1c22f7)\n,S(3e54abd4,36a9763e,52b7f46f,4955a339,6db284cc,77d0b351,fee7a568,e4774c83,1c64ede4,fb372325,dd435f71,e4dc914,391da9f1,ee08a21e,2eb5ec18,2834b0ab)\n,S(24675c97,67f69242,4e1d43e3,1c46ecf,b418fe9b,3fcdb495,822362b,2a8adcb8,9e38e08a,4359dd9a,a9ddf4c0,8fd1147e,c70ccf1f,8855cdbd,49f44dcf,1edcc36d)\n,S(16e0176,9f5a5c0d,f6db88e7,fc95419a,96f836f4,f8255a96,77ca2710,2330e317,30641d0b,fbf7a1de,24c72692,b7032355,6996bf3f,1b541dae,d6ccfe8a,f847646e)\n,S(a2e30015,a53829d7,c95d5704,3d6dac44,bca932b7,d4115826,c602aae6,8e4ef847,33ecf0cf,e81236c4,e8fb76e9,645e4827,9bfa617,f6d2760f,dde2b110,77da6ce3)\n,S(cd9bcbcf,b7338c75,3fe393d2,2e2e44f8,45a09b83,fe4ce29e,546f2a58,7d7422c5,7683e5e7,f990e09a,e15902e6,c57b8db9,e2b1d29e,8d3bf33a,f90291a4,616c794d)\n,S(77a00bb9,6abb918d,774a2a4c,3828fa5d,c7d40bfe,aee10091,f5d92cae,cdfca277,f3febab5,3310a2dd,5dd7a5e1,33572b3a,83950172,be7e4cd6,fec7575d,10142e02)\n,S(be2f342c,ca1f161,d15f98cb,ccac9f2c,806c6d1b,f34656b5,c671c730,bdae8efa,c9c7a70a,88ed250d,6a7c0307,d3dd907f,ca8b399d,4affce18,e988ce5c,e0efb5f8)\n,S(538bc08,c3c775bd,33edee48,c96c6fbc,1435b0c,f00aa42c,6c15fc7c,5540dd6e,9d8b1293,14283325,8d676a92,d479ebb2,c5ca171d,a43fefae,74c7740c,7e956eb9)\n,S(d5e26827,fc0d8283,ee020376,56e83ae1,3ee306db,92d0bba1,6b3fd99c,7af15578,b41d4816,b9643a41,c4f8c5f,4121cddd,d7eceeea,9f2156ff,676d6d2b,61b7d210)\n,S(7d18f6e9,95f9077f,c371fcce,729835bf,aa903ef6,682404da,bff6949,4b7faac,1423bd83,89410b9,a2cd8c3d,3d13b495,d856b103,eeb96e64,8c258ecb,a77d581f)\n,S(fcb3cd95,fb0b4940,bdf0bd4c,ff534d94,26489c72,953b19d0,cedce320,6e3eb556,46043aaa,3d1ce85a,3009911f,763f49bf,df3d7fa6,347f5573,4c6c36cf,97f15702)\n,S(a0e8413e,f66527ff,12f6de1d,2ed4eca4,6617064c,afcc4e98,495f2694,34492800,ac640fc,e3d5d094,54ee6811,81f8bc5f,3fb1bac6,84c8c572,b24fe3a8,66234d13)\n,S(fbf60da6,aecd3cd,9137b28c,f7bfe541,efe60e65,52470f80,e301884c,1e9cf33f,aab83f4c,9d9e5ed9,ee35be7d,33a02bec,ebca4f40,8f6fafaa,6f385a89,8f7d846b)\n,S(771c8d7f,73bf2b9f,4f032e7c,daf17c39,c375ce1d,2e180758,fcffd82b,26fe206c,af22f29,ac2ec5a8,ecb69e2,aa954f49,63d4a58c,2d6769b2,5255e9ae,2689f756)\n,S(a30bea5b,4a911ae8,de11a310,a9cd3616,54143337,30aa182e,ba75601,3d12ab80,aad0f1fb,a9a8d6a5,71301b1b,dd11f4bb,161c26e5,3d3d5143,ad2678f8,9960029a)\n,S(55d93940,b0a76283,6aac5bb8,c04f490d,e7ad8da0,4cee090a,e1f381e8,5c13fd27,f1c58d73,b90819b,bab9933d,60f54370,7a625449,d637f01d,bfcd6b44,bb467937)\n,S(f6b03260,ae0373f5,b2ebaf15,1a74369c,22535844,13ec4356,ea4a9a32,f2132f81,4fd750b3,7f377f97,7b62580b,6ee7176e,a720a434,8df7aa86,642cc6b3,963cfdaa)\n,S(80f7aad4,3deccf41,cf4540db,97150bd4,f4665ef7,72bf6c4e,e551c566,d11d13c6,20a9b836,67cbb397,aadb1211,fbc9a78e,2e998354,6f263403,1d844e7,b95766aa)\n,S(4f574d76,130e2eac,16bd6b64,85bdd2fc,88855c3c,68a232b0,29560509,463f0c90,33dabadd,62ec0192,9fc3ad15,587150e8,ead8518,327207c8,7ad2a7ec,c712d268)\n,S(41b6872f,f47a0d4a,764ab086,764e1844,a8b4c775,cb2bb06f,643a7c13,5a633e6c,301d54fd,d55c9204,4d337b83,ff17dec3,3faf0bf7,ddf7b5c0,afc8934f,65d54e17)\n,S(9f4c75f0,cb44460,ad14d416,76c8b60a,1ae979cb,1ff6a506,b5523cee,8acb1bbd,253d8a0e,985fdeba,1ced50c7,aa3724ae,79c75c6d,7c82315e,65f3b579,5fcf70ec)\n,S(25db3430,667796c3,b5f3ec0a,cf4f11e4,73518ce9,aec19932,3f0c5adf,e32f4a87,cce88dd2,ec02e348,ba569fec,15a3c527,ba580e44,c32f25cb,fa6f99f2,a1eb4250)\n,S(fa71cf1c,2312c228,c706a7a0,2dc3b9e2,f571b468,913b9cb,3fc5ed1a,faf730d,156df61d,752533f7,afee2781,30763eb9,45a6198b,a78a8288,f30e381b,a809eb61)\n,S(f5d3adb5,6d77855d,8e0d0b71,300e620c,f96a45f1,5948d97b,affc3ad1,7226294b,95fea642,5be2e987,968f54f8,f3fb30f1,e9a1ba5f,57b68b1,101a5981,a47f9f4c)\n,S(907eec9,6db952f0,eb7d0436,c47f5980,dcae53fa,ebabe57c,aaca00e0,10361460,1cefe286,19dfb7f1,969c7618,e0ed4775,e23527df,6a214754,4cd066a4,65f92468)\n,S(abbcec4,36e06bc7,bb92dd79,bcc5d9d7,73189ef9,2546dfc4,54b5d624,2c96e8cc,d1546a38,1f335077,ef40473d,baac9c37,66aba23b,8040c4c0,60778d13,8603be7d)\n,S(42f1594f,b1e088f7,2020b68f,7fdd9027,b9638619,b0320410,fc4bec4f,4fbdda76,9a417cab,515a08fc,9e7a7c64,7029a457,9881caeb,df8430bd,c1712af1,3c6b02ba)\n,S(a4aace90,751aafa1,fe3e14b9,ead1d460,e1cf029d,cc82afb2,4d169248,e63f83f,97ec83af,dbf32c34,df9cafe7,de0b6ee0,67460d5a,607e1ea,fd13a96d,51999d54)\n,S(ac7ef2c9,56b41a0d,824999ca,550ddce0,83f2aba4,8f2bce5,644a579,c0e248c4,d97b0ee7,f3a109bc,bd308b3,e4d4ce2e,c1a65878,e7e5939a,76c9d8f3,6959c5f1)\n,S(e9cb9aa0,ab09aa1c,18daf08f,bbdd0457,25d4ac95,8607a88e,5bb14c1d,61d826bf,a1cc215a,124e31c2,e426e337,89736101,b739a56,b6d4e139,ce65272e,2e4b9a5b)\n,S(885de0dc,e9700b34,9e10dc17,68f9fe12,2672ed3b,ff9d20cd,93b98e38,ebcc67a4,f66a36d3,75272f66,cad46fcc,cc5d3df6,8c023da0,1ebcf766,f4dfbb0,60e1eae)\n,S(8ad4ade1,ff9a19a4,fdc89e75,e4cb61c9,1485ebce,b1e4c063,ccb8001a,c5038e6b,e02acfc2,19c22881,d38a8232,fae54d82,e0b1fb77,e6b8b741,890357c5,be261ff0)\n,S(5b395388,a62979a2,b931f243,7f3f65ab,292ddad7,728e67c0,e753565e,578fa354,7e77c8a9,7c274030,b22e802f,f0fd69f4,da65e54a,b50953f8,b9945b79,20fb89f5)\n,S(271982cf,eb593e95,17a8fa5,6f62fd23,ddb6c7b3,8e5a87e3,712793b6,f10a2d14,6661cb55,543414dc,e02b3650,8660d54f,48086cbe,4b517092,564188d,6815d2ad)\n,S(458be91f,a61f477e,47d7b997,931c992,86281efd,21445349,af820000,58b2a93f,48725c06,e7dbe303,f0c73d43,a5a62b6e,131d004,2bae9dd9,ec12cf97,8df04c49)\n,S(763f00b,348c1cb9,e922c6dd,a7e72e22,8624fae0,158af602,457fffc4,cb0bf3c1,8119c3e5,b190c6d8,7f3d7066,72136a3b,d0f1b198,d9f304b4,cfb383ec,e075de74)\n,S(4fd5e9e2,77fdf260,8ece7268,10343542,312773f3,2518b363,7075fe98,dcf7719b,c234141c,d3e83309,539aa906,2b17ee35,99a3246d,86ad20d6,2885cfaf,5a88162f)\n,S(c578afee,a7e492e6,30ca55ff,8923d9d0,9a6d0583,5553c61d,fe871b6d,e1d956b0,bc2d5e2f,add48f2a,50e357cd,4d4c120e,e744fd96,dca0a959,c0bf482e,2e081ce5)\n,S(df02c64e,7a60b87f,73b4add8,5ad93b40,bb6a862c,18e0fba4,3f722650,c0439107,d86dc018,525efc69,cc7b282,cd145650,3b9bddae,607e14ef,3e380d53,c266fe29)\n,S(9471f488,84cff3a9,2a99dcb9,4cad96f9,d4761570,c0bda860,bf1b0a9c,32a27a4f,23471d9f,6b3905a2,6d9481ec,dfa10a2e,7c7a5405,119dc8db,de839140,2e063e13)\n,S(6d1b5784,f58e5393,fec90c50,a674278a,cb841f46,97da9eda,12013447,a2e0b863,d052c806,2905ef3f,6302892f,48b20497,e89cf7d4,3c345ba5,94233cf8,2586a17a)\n,S(94eef4c8,be627560,17e13634,53f733a7,fd590dc1,294cefb6,4d8965fb,3d2ed1d7,49a1e5e4,d72e6a21,14e7c4d0,eb9c9240,b3b988d3,21d2999b,46a562e6,1a203c97)\n,S(3206fc87,582d1267,92c2a68a,7400a29f,61097fdd,3ecf4cda,fe495993,87ec15f7,c9a7af2b,88df18f4,fe453bf,fc4af355,519fdf21,9251bf6f,879f291c,32a38eb2)\n,S(fcd215,45f8a36a,a5a81bd7,1fb1804d,b3fa112c,c21542de,27cd34e7,f7309a1,191c6b9a,42b0adda,bacffaa9,89bbebea,3424a3bf,11345ff5,2af9c3fb,6193ad0)\n,S(4432309a,40f6c71f,cb7fbe26,d6390778,fe6f816,3ee50264,2b2027c4,86fee04b,550981ec,b4d2f6df,fd25f26e,6d65f62e,5e549c1d,79639c4c,d07b6282,2d075847)\n,S(7cbff748,7bed64ba,7d6346f9,18e23992,a3712ed,1b7cb89d,a6c0540a,335b582a,ddf155a2,bfb25607,ee6bca12,f6df2a01,98513445,9b353c60,9806fbbe,2d9fbdef)\n,S(f8cd164b,ad3e65e3,63368645,76c49035,a95f7928,350c855c,fa534f6,80709789,25412c86,23bca2e9,8d5531ee,d57c80c3,ab01abfc,498cbef3,deeff0e,ae6912a)\n,S(6fad2644,990a231f,c27bd678,36ff84c0,11fdec01,120dcc0d,f114b032,1d60648d,6beaeb65,ddd28481,a23af85a,5a417323,350d057e,1a574b0f,5d994816,844d9d98)\n,S(1fbf086e,d0adb5d1,9c49947f,d019046b,289c5703,1cf876d0,8cba81e3,7739dd6,86e3511,3d4593f7,a8142c45,8e915fcd,685efd0b,f8cca8a0,79ebded3,f4453acc)\n,S(30cc2cab,fd0a2244,2c8a6e00,5b6220e5,4061dbb1,4f8ceabb,6215bce,f5f5b312,b5a1f70d,4a05fff9,9716ac44,57a4342e,7d4bdef2,6cd07fee,b515c56b,19fe72b2)\n,S(156efdd1,901ebad9,70eb167a,bb99ac5c,676a0929,3feb0b37,8ba19ba3,6c2a3935,b1d39453,32f0e107,15d06df2,d784b1c3,bac221a7,f184bfe2,4824a368,9ff33051)\n,S(48682e29,6b8e8123,c9fb6246,5e8480d5,54350734,bc763757,f319d40c,87f2ddfe,efa5e5e2,be832508,e71b15f5,3a7f1d77,773129e2,e57b2b86,9545cfc9,a20360f8)\n,S(d188747c,968b67b1,88958f37,b9990bb3,1a54e3d3,e3fe9e06,7aa9b1a0,87f5e3d4,6d60a049,25660c21,81efbbd5,6a436409,6bbdfa39,b37f70e6,4d13f3ca,6bc76b92)\n,S(d7cfeac2,7fdb5922,a5f534c2,b1d325a2,903217f2,ff41b6ea,1e5d2264,8095d3,19618c66,87bb0d92,52133c84,26fb8aa6,4fe1355c,86aaea97,b9ef49fb,de063e75)\n,S(dd795951,27b0ff86,94dd131c,e85ca6ef,9aa2022d,d0c7f053,4c83735c,43096c02,caeb4cdc,2633b01f,1b51f7e6,103ede8c,a0ccef5d,e33a8ece,5ddfba8f,736e2adc)\n,S(5b2bf207,9a319707,52496851,68aad1e9,5582408,7e5d361e,87b77900,d9c63939,728df41e,69c939fb,59803668,6c44d0b6,f102dc4d,ee146a33,42e1c04c,9b6e30cc)\n,S(d2a26a5c,313aef0d,6ac190cb,11c84771,abf97d8e,c7e6e67,bd3313fd,15c2ba11,84a1fb57,1507d012,9d98ebf5,34fac803,5de7a43e,48868269,d5e9656a,773fe768)\n,S(22c22c99,860b2b6c,630487f2,5263e77,91b62450,290e9df,379efa7,1edadb52,d2b227b3,dc85c1a1,ed64a7e5,6dd6b178,ce0ab5e,68647b50,1178ac78,4b7d1c93)\n,S(b811b039,d2cf5f3b,95e38e2e,14da67bc,417cfd8,623593ee,1f2e924f,d9a064c4,a860653d,ca39030e,8c1ed7bf,aeab73f2,a68cb8a0,5263aaf2,431b6f8d,9c862a28)\n,S(59ee23c9,26b38d6d,d6c091a1,d4adcdca,b3a5a548,a5cdaf92,fee9fe2b,c3cc2957,67462318,96e4f107,67e39d47,b03268af,5b54edb0,9f9e8e0c,3f3f89a3,e9d204cb)\n,S(cc79ede7,ca5a9ba5,a7c5114,d2039d5e,c6a54db8,fee6c102,577a20d9,18ba857a,2cdc980,3a06af30,c19b262a,12f54132,933ec985,afbd1598,45c40be3,2e24861a)\n,S(1319c7a6,2f3959b4,cfee1223,b225c6e9,9070753,a1ad33d8,8f3a8b78,a886f7da,d8a75f9d,b8266ea4,2b650265,6b6c0ee9,7f3598d6,3d149ad6,9a5829e2,f3c29085)\n,S(e4ae90fd,74e9b229,b9100cef,1da59b80,753b4f0a,cd7790f6,34930a92,b1eea356,370f1c98,f72e698,73c8d0a4,e76fb117,d7e5a9a4,d13521f,f4902a1b,ed3688e5)\n,S(286a98b7,b0b0527c,310afd37,717b5061,467be24f,8a0b5528,52ff26ee,d658988b,d10699be,f79e800a,519b964a,163cffb9,722c3ba5,b56694a5,c1a9b883,b32965d8)\n,S(9b8544b3,79746ba1,8524e084,2d15b853,46577b81,7084e02f,7d0cb820,7448f5d6,8421c0f2,ba15f648,246f9cb7,3b10d6db,1de7aefb,fafd9b52,16234dab,8e70218e)\n,S(81efaf7b,50a18c8c,2481299,bbd2adba,f3510ac4,f871c3c0,f849ef6d,4550681a,ea8567a2,9c871ba7,fccea923,fe07e8ba,2071d7db,25d33ce7,a6125c0c,2afacd17)\n,S(6680fbdb,dab850c9,115d5765,344f1466,b88cc5dc,8de9fab,549f281e,974ed7b,c7871b4b,2690f4ad,1e67ea81,e2cefac2,988082d8,b1c70e67,4389c79a,bc880368)\n,S(4c38ce7b,a8e3d317,6f615d6e,27578edc,746fb80e,4701efae,f7557469,a1dce4bc,f6e73d73,61ff5407,10dc9f1a,4bd5c1eb,a7d8c8d6,45f0427e,a4fc3e45,3990b88c)\n,S(767146d6,bc1d5bb9,c73321b5,4cf6bc61,e8209703,fe4dddf7,2b3d6089,da60be69,86df7dc3,6894f88e,fe24a4ee,fc78b1e0,fbb5138d,31666be7,97b8934f,d0b9a37)\n,S(bffd4856,360c02ac,ee741a65,486d5a7,44e2a005,9db5ef5f,f87b9e18,3adbed20,c11246aa,3bd4ec3f,71f88d2,cb3b96ba,2c210f90,d8234c21,99bf7781,f96ad781)\n,S(ad19b5f7,45556650,eb496450,968d056a,fbcb55b6,8852f510,ac96df54,cdc677c0,f78295f8,59445c52,d6ea285,3fe9baa0,5e453bf0,9b3f4d28,6c99e858,62a04bbe)\n,S(5924f679,bb94f6db,d8232b01,ca8dfbcb,37a83d24,d0e7026f,b526162d,c82aaac7,baee6567,6a526460,ec7563ad,42482d37,a42f2fcb,f4a5eb7,b37b515,a6c3f1b9)\n,S(dee240ea,c90d5399,89d3b3f5,764e0680,1e601a4d,f2c09226,21eb0b7f,bb53ccc6,12668b,72cc139f,5f9fff4c,ef24b5ec,d0648e03,64c17417,f35bfca8,b819316a)\n,S(e288a00b,e18b0987,9765940e,caf8972b,1a09f67b,fdc455c8,8e3b4ed9,dc0dad81,fd81e0a5,adf1df8f,42c64825,6b107d44,887d01da,f4cf89c9,11529124,16a1e4e0)\n,S(e747d6c7,3f5366ed,241501a0,ca6dc04a,aca7241d,8effbd94,7d3e6a0d,bb6eadb,9954822b,15f44840,9c9e73d,97722194,1eb6a218,ef1ef4f,269ab118,8f9c773c)\n,S(57b8865b,ac78b9a1,c244452e,8057be3b,4fe2c6de,9ca9a295,ded04377,2b61aefa,d0e46172,8828f0d3,f1fa808b,1dea8516,b0c30d93,4acc8c90,6ca2bcad,303f06b7)\n,S(abda4b38,47ed5cee,7ace4e8e,e652336f,26a8f4bf,4bd610f6,e87e5936,e4e8339b,8860963b,8f266c30,9c6a00c6,cdb44048,a9a1b76,d0a5a652,b4453f7d,330bdd9f)\n,S(7f05f2d9,5621d06a,d344bf91,7fa8b9c4,2ceafa3d,fabd0620,bf7086fd,9539e089,298ec6d,8d5a9506,8d916678,dc8e62b3,7b6fb9ef,7967da8a,8419433f,79922f29)\n,S(99e4f06b,b8845bb2,12638573,63f7cfbf,3f15570,44256dab,21b5a8fb,c43e2453,5d76066a,86d5c498,323af928,2c3bf419,acb758c9,7883d236,7d9d9e3f,eb8e1417)\n,S(ff994b1f,6447ae81,8bbbf97b,8b6d655d,900b04ad,eec06fc1,f57eab70,95375094,6a63980d,3a9324a1,9339a073,977130de,d0fddc50,5b86ff73,464dae04,c3004a68)\n,S(3e9af52,f00d1993,8b6205dc,7b6f8ef3,31d624da,fdb2f09d,fd701b78,ed8b0471,a674914c,ac86037b,f0585de4,d867424a,ab9841dc,83c0ca8f,347e16dc,1407167f)\n,S(eece935a,e5cd4afe,baca6998,63c5e8c2,e0b338a3,e2ae7dbf,e34102f6,f1c613f8,be70c210,b925dc66,c8546e65,ae9600b4,21a9f668,c3a09a01,8bc5b88b,91cf4d74)\n,S(bf10e625,7d336eb4,a962bd97,4cbd9f10,76787b8b,90575250,7f0cfc2e,121d1276,1d93f629,8ddbce2f,1f670326,265c4ba0,f7f5256b,472412f7,a24f999e,f4e1c64c)\n,S(73e43284,c80d4ea5,c992ffe3,cdce4149,d490843e,bbac444b,f47ed5a7,3d6e0bb4,82cab83b,c7d2d2bc,87881618,54034d7b,dab132b0,6340b316,964854b7,f2ee3e6b)\n,S(5410340,b614b676,63173725,ecf0b8e1,67c2de61,ce999639,be2051dd,2695f8b8,f191ec95,9d6fd8f4,eca243b7,8d844214,976d97e0,65218487,3366ca25,f2e6a091)\n,S(203d28e2,694df7a5,6c9b9d42,907c1e02,192e8030,77ead781,8198b2a9,69b127fe,c06fb7ff,2361ac16,a884f0a7,9e4f5a19,b0b5b207,9901e634,be237643,ba93852c)\n,S(f9a1e3dd,f53e41b8,84f7c4e2,c2b47131,8d14705a,4e7362df,3221222e,6b2c1921,cd150a1a,abe8ea0d,853245eb,509c1d4f,e26c54b6,98cf9aad,26849a7d,e63b6264)\n,S(e82e5e89,db35aedd,4d63b7e,4d55d637,cd2eafcf,f16ffbd5,b0fd1444,c7c783bb,6701a95d,ccae2272,2a834957,e0a4a3b8,3cf5ff19,2f41e8,1619dc46,b8238cda)\n,S(9fb768b7,16032fd7,f21315b7,79776882,767d5d64,c9141267,a0ddedb1,55d4ae08,13474a8f,90fda6a3,43e3ea23,e858327,dc2f4c40,4a445f77,4b39b92d,a312574a)\n,S(d0793463,ca7cdb50,3622f1cf,90032794,52af3fa8,1866e536,159fd23e,ba6082d7,35301f6b,66858d6a,3e97480b,ec3d2a53,8dee8465,ff5c15a9,1144ede,a208bd0c)\n,S(cf8fc191,273383df,f1d703f7,bb237ea6,cb5d1307,8ce8ae62,67fd20da,4d845e05,efce641,3bb676e5,5c0b64d7,589ad771,23900e0d,60feb71f,93270390,ec66ecc1)\n,S(f12aeec7,55a7138e,4e91024a,3006db3d,eff6ec84,ffa73d96,da21ef00,452064fd,f0f0660a,22cd7cda,25206f10,e82ca005,3a40d539,472cf41c,b86ed8ae,3d29abd9)\n,S(3c40f94d,ab460ccf,c8e47a1e,d015b074,ebfb6142,fbbf5b4d,e77aca70,be67c57a,998efa4e,26df60a6,f1a466f4,c27b2dce,ce6367b2,e05a5ad9,dd71ed8b,482ce55c)\n,S(f2fc6db0,49861d3c,a01a6778,22299264,88184967,3802ed49,503857d2,2860f00c,79f0f245,1cc6c5b8,d36c330a,ef8c9c84,95619911,1d4a01a3,d9363382,8b609576)\n,S(35d3e3c0,29fdc9e3,88da1cf3,d52df6bd,9ac0ec9e,e591adde,26d3e414,f4fb92f5,62ba2346,6d19ec1b,64d2a6cc,9822feb8,e03df178,3f526a9a,13d10fa7,72de3219)\n,S(5628da0b,cc2c0583,902a56ae,711a2217,455bba47,c7222dfe,d60580c6,461b4ae3,1cee8f17,8ce4c7f9,8cf2a2c5,92bf39aa,57616913,bb66f232,a813904e,7b574ed9)\n,S(7ec54044,c3fe53ac,8437a540,968e0b,b725e794,a8c240c6,5dac1f12,4ce21be3,f6290891,af9af62d,5dfe10b,d567af1d,6b4b22f2,8177a14b,44edcd0a,be811c0d)\n,S(eef7a7c2,a0224a78,aff7c61b,d2379259,7b307a20,bf1c253d,6f03d57f,a8a84203,5c7d6875,905e26dd,2fa4e5,24f73b00,6f4bd0b6,786639af,5d222411,bf69daf0)\n,S(3f1e6459,38e4285d,ed30be98,1d149f68,24b264c7,df920f0c,c5d776df,83228cc3,a6a5df53,856be619,25e42d58,2f705567,39c3d7c7,a6e222b8,6385b63e,d1316916)\n,S(c83ff186,ae3f42d5,a2c39b43,7712d607,92b9006a,d8bbcc89,97bb9b35,d1663cc6,2380aa52,44674eae,3d96d65,f484e7a7,62cbfa10,96c5a313,9eb4628e,77b72d40)\n,S(41d20761,160125ae,c669b1cd,395110bc,94e09a,ffb52ef4,e7e86e,1f4a61a5,c8509f71,2c20aeef,7399d11e,7c438d0e,9b4dec72,76c1013e,a4c76d31,ee5c7496)\n,S(cd358f38,d2cb11f2,9fb54431,dc5adee6,721c444a,8fab5743,1149e504,8ba0dab8,e6ab91a8,79a51f40,cf75e405,e508cad8,ec54dbd8,2dd4115c,fda7b255,b1a6fe1b)\n,S(d1e1851d,cc95a94c,a8c77b42,5b4430a1,ac10e526,e3f4c6dc,f20267dd,7c5f2d2f,889de789,43c6674e,6bf28470,3ef8867c,8d827681,d2df8bd7,75384ad7,15730ecb)\n,S(89268637,1febc520,14709cc6,b2aeb5dc,32e06b14,cdae3d76,b1bc04e7,b9b5dc8e,46823e42,9c0815e,ff99cd7d,f3712f78,9c102af,173b61f,8de08519,f19a3783)\n,S(c7341942,420d4e63,263a144c,8a10d22a,fecb1bef,64f926a7,83951e0f,6490caee,925019a5,212e9de7,2e6e2336,c3e2aa75,9511396c,a171412b,53c8f9ff,3743dcd2)\n,S(fdede5f,38d83f9f,a4ba3218,fac6f0aa,7c9f464e,33dc59f9,8a3444e,fc0ed7e7,26e4cd3f,3dcd6a6a,211bc8d0,65564250,49c6db2e,9946dcaf,43cb42f3,b0f20449)\n,S(b2b5364a,eaedfe4c,f046193a,6777ec1a,1841436e,3cb17c34,9d27f42e,8e536618,32b886d0,f0f94a7f,1b1d87e7,4f2c7dcb,ba4a5dde,8e93c864,f8f48bb4,50d08ffa)\n,S(4c3693f4,52a95b79,85e39982,f316897,93d289cf,66b3326f,3e1cc77e,457f64bc,48d7bdfe,fb8c3abb,584db0b,d3407ed3,3e543715,d4ede995,df0e1b8,52e12123)\n,S(5cea23d4,927f0385,57f6bc1f,b926e594,93250b3d,6d934a16,9265ae08,24a35e60,5806886e,b01ca724,8434f2f8,be33287b,d9cb3c3e,b927bc4b,4fefbd51,ba98b5b6)\n,S(db0a50f6,b4558c10,61a3ff88,1da60f9a,77b42469,a9713c8f,8339b8a7,b903d93,7afa6cd2,57685f49,9635d15c,bb7defac,d6f94c17,aa19be02,4e2efc70,d84c45be)\n,S(b0029adb,25f32b75,8023ced1,632de91b,3e3e55a6,1abb56d5,aada032,f2c01ab5,baadabe2,2ebc5fc6,d5dee65b,262e96c,63c99fc9,13277d84,9ec8a730,e1bbfe91)\n,S(c336b077,3ce16975,bc204169,8126a40e,f8cad886,6a52c50,c5081ba7,b878af5,6f46f5e7,b82aec01,ad499340,fb90b81,420b4a3f,977579af,d3eb0ce9,c7d752bb)\n,S(f403fde4,7232a9db,9efda1c0,5df49636,2137f5c,aacdfc93,1346dacb,d2501451,ba30815c,197de8f2,258c83d8,dd7ed0cc,cbb5388a,415b8629,2cf5c271,2e75bcbf)\n,S(85cd71a2,20beec1,3edd0133,6b0b85e2,da056a1c,4a48a328,f371af1a,ee502c30,d6accbba,491c915e,88474b92,bf23c740,2648085f,88a62d51,b26954b3,f6d2d4c6)\n,S(324d65,b3c2bc55,d3b2a125,1b673ecc,d26d2b23,e333849b,7549339f,7f0d9a42,83750e95,32086164,e9aaec58,b6a2f00a,3838d76a,208d6453,14042334,b4af616a)\n,S(322033a5,c90d7a31,9439c368,b1301f1b,d088974c,91560063,793b6f2,63b401f3,a61f4714,488bd2bc,84bdb122,c615ac94,a7d05157,e6d961df,4f873f5a,582e4606)\n,S(a414ed01,691f2a43,b18dbda2,2d3d009f,f94f8b02,672e49f0,58dc2323,b71f5836,2fa3e483,a12ba874,12d709a9,47cdf22,6b96523a,ac7f4afe,c93f98be,f97ec01f)\n,S(774310b1,7752d7bc,d8b3059,f7f4cac9,e661a841,9dcb20fe,355bc7be,3a4c65e9,b3333227,469ec87f,19e14e3c,98148b4b,45bde0f6,698829e9,3bbc9313,56e18b12)\n,S(fbb23c7b,5c15bbcc,7ad0118b,6826e385,3f6c4078,5342ea57,11109f8a,27dd11e,b12ec70c,9b4c908e,2538f4c6,b0b3d548,ee199f9a,1e9b6535,f1c78081,41664ad5)\n,S(4bf836d7,fa7308c,89b075df,1f336fc8,af3c6ce0,64e1253f,853f623d,c483b400,8b368da,424e5a83,48cfe987,93d47a1e,1e9bbeb7,3f5282af,82e12e4a,c7eac850)\n,S(91b4a84a,e521232d,71e3d202,49dd1b3b,d134509f,e3e1ed1a,4e8b5062,a438bdd2,52d30545,4972471e,6900afbe,2471e1c9,16c82ce2,2f955ab8,454f9b65,b70ed759)\n,S(9751092f,62147caf,f3953cf4,8a117082,37a78b6,5bf0de56,848da1e9,4c3c3a42,57fd0a15,fe069db5,5fbe870c,96d4280,7b9ebd87,33908bd7,49ba0121,a900b08e)\n,S(54439284,6f6d46c9,8ac10a58,ac3c34b7,3cc5569f,8f9fd7f3,4e7ad2be,826bf293,1aff0b85,e5b9033d,7c44e877,57513317,a17734d1,13043cd0,780da032,2dc3ed03)\n,S(172704b7,fd7f5560,f17cb6ff,ff9a0144,9a05a113,29b86df0,a8d3256,ce139a9f,a416c0af,b170cdfe,169f894a,b10aa97f,2c068a4f,d70a6878,ec9f359f,e8323bea)\n,S(2236799a,a82d4b64,5f412aef,eae944b5,e28e0996,8a243ce5,b8986861,6f735dfb,7f20b2cd,af70cbdc,6aeec02a,dae1535d,4bd919c2,631ed69b,9913771c,2f482c1)\n,S(6a52af7f,c6f75636,c33047b8,9f0eec31,66bd97d,8df6579d,2e2a441,6ec4fe8b,4eb0813d,220849bc,e0b948e9,a6efcafd,339f8861,eacb9885,40ff8e1,acf1efdb)\n,S(8696e0b4,ae3f0dea,bf6d8dd3,854faa5d,d07b01a8,86f710ad,9b4cd84a,5d61a617,67633be1,a662024f,77931f06,38884175,d2c234cd,c4709637,4711c79f,42a897df)\n,S(6c4b727e,3bf9af50,fcae1ed6,163ecb00,142d9a53,b6d3f54c,8aa14064,1358ce7e,c4f2665f,395af262,b30561d1,48bb0f4a,f5603102,80f57f40,1506ec37,2bde79a3)\n,S(a51d2296,98aa29a9,6d0e5510,f3e815f9,cfc6d492,dd0b2fd5,bbfdefa4,984a6934,861f0848,7658d4a0,141e9d38,aa0e268f,40bad7c9,e2615a37,7a4b974a,6828d525)\n,S(1afc4051,cfb5635f,9c2a8477,7dee5fd9,fc4d40a8,3ebe2f89,f36c0b9d,8327288,61ac4eb9,16567e13,d1b03ae7,ad5c3d8d,ef85bf6f,387c511e,bba6c237,96e95f7a)\n,S(f8fcde05,5a2a92de,c65d1842,6607a939,b3475abe,2437c5d3,88387fd4,afdff590,4cb8f7e2,825625ba,e3f179bd,4ef94560,6e186346,61edbf48,8ce51ea8,ce1b0404)\n,S(cb3dad82,7e7464cb,5fed0cbf,7e29e6ec,112ea411,706d10e5,c1fe6fbc,a04a3e9,a33abaa7,6c9afe3a,a8ce5add,7a2a056,b396cdda,2a002161,3de97556,a0364629)\n,S(39d2cea0,acf8059b,a6275a08,ec3a3664,f09cfc43,f143c317,bed8d751,33d4ba0d,6beb4ca3,d3009ac8,881d6d15,e0a29eda,6738befe,e31707d7,f95eacc5,fbd77192)\n,S(90bfc4da,3be2d74b,ff9b5539,d0787bf4,4a1b6d7c,2baa14a1,dc6801d4,42187f96,1254e7ee,c8acb35c,fa0695c5,85f61b69,def3ef5a,6219fa97,e3b09dbb,351152f)\n,S(50772bcd,454ae992,f97ac3f8,9d8193d5,ed50b69a,b2e62e04,d6a115a6,6e71c977,f199a8f6,f78b0b97,cc20316f,66177383,64338fda,3eee7f0,f36eb0ff,64accdcc)\n,S(afe51284,f033bb43,ac6feaea,9520e83e,f2cc1e42,9e273bc3,1b087161,52ea6926,77ecc481,9ffe6efd,33592907,17d22ceb,f4344c9d,f5f5ea4e,4d443d17,25c8aa1e)\n,S(b0caf67c,151b838e,4ecaee09,c7908c95,bd3ef86c,797a5a8d,71cb3bf0,3a46ab17,10ae756,7bd2f6d6,712c448b,34636eea,2c7c3d99,98901308,14825b4e,423284bb)\n,S(f2766b4,8cac8f6a,80a7cf39,81725834,d186e88d,735fc7f1,5135ce58,43b3dc8c,63590fcc,a4e21c39,50cd78a0,569c0d2e,959254e1,4bf2ff22,8d8fb216,b53601bb)\n,S(80d50e7d,28269280,f8ce0dd3,6afb9f43,38df0403,d5661c99,27ff817a,46f60a0e,22fec5b9,7472824a,9b2ff25a,68d947a5,a8952ae,b763f37f,70228978,514cd22)\n,S(18114ad0,7097b5f3,7d788165,e45ca1b8,462da0b5,78e5d37b,e4be3632,35d2fff6,87c5f261,39cb366f,25fb6bfa,fcc8408b,f4c69c81,29df3cfe,9190213f,8c15a66f)\n,S(3bd52737,68294cd8,73a48831,8f958e45,85871165,c82cf6a3,9126e378,43975444,8c92d391,e39a50f3,4388510f,c8dbb686,27f29251,92ae8edb,b2613948,c01281ac)\n,S(acf47eeb,526208ba,8a3de26e,481a86ac,f17f5f88,81d89d43,ab8a5a26,e00db5a5,b451b4cc,8be8339e,4203c913,98b9a29e,de86a91d,3e347688,53442446,429ace0a)\n,S(5e39f375,87a07536,86bcd792,1183c424,20159044,a9f66ecc,2bdd552c,62ec35c2,b7131328,297c6995,7df6783b,d9bc550d,5c553e1,30bfc3e,fffedbd7,5e2d003b)\n,S(315b67c3,d980796f,6f0a5505,ff2d25f2,8551615d,12bd73de,b10c4897,580371ba,dfaf812f,7525e087,2d11e10d,612004cb,3e2a7024,8c40416e,5020ef66,82d3bc1f)\n,S(8f6764f7,73810396,62537cc5,aed6a8e0,318654cd,a95d8695,89fa471a,edd0d7a0,b91cf5db,2994d207,135c1dbf,b9d9d78f,7e3adea5,8c176630,c09140b7,f5c67e84)\n,S(e844b948,118fc6a7,eb2f96e,ece3cab6,def55940,75c7b7af,fcc5603,f2012f96,707668d8,89db03d1,561596da,a831aa92,771a0fb9,e1b21273,d11a3415,82292314)\n,S(fbbedfd8,4144785e,fa71e234,59973cb8,87deda88,971eb62a,3007f350,1fd0ae4e,51d23941,cf84f121,ff1e6a5d,651d9528,6ef1d803,819ce64,3aba8d16,67ba7dd9)\n,S(a0190399,c692b9a,db172ba8,348b404f,19442b60,4df60142,f6330f36,ca6bf352,6ce7491a,b5329042,25556069,71502da1,601e3a04,f38601d0,80b31654,20fb527f)\n,S(d240e135,4b9e6dc9,110a6b25,afcf35e0,74fb02fa,f3dbe484,4f46818a,89bca65a,d704be81,e2597460,6014ffcc,ef12563b,45faf24,3e070727,64f341b8,7dfcdb7d)\n,S(39bd84aa,f8a15b0b,809888f,133871f3,c40ea5f,2825582,a35fa9a7,808e5e87,94ad6588,658752fc,ce45ea1b,752ecd02,2b621c5a,26908cf8,69c44584,1d831d33)\n,S(2172be6e,dccfd021,a56a553e,53f814c7,c7cdd55f,d181d671,4ade45e7,72093142,b21439df,f7229e61,cd3b7c77,fa750a94,660f60a7,53da96ba,d8ca7e20,69abf76d)\n,S(57db209d,a40f30ae,fcca7838,2ba525e2,231343b9,250a1b1f,67fad7f4,d4079594,34ce9bac,bd35557e,2f73c718,4287b493,c524a3a,d6b403f4,ae777026,42fd37e3)\n,S(845c2bc3,3683d899,8b90a2d5,ff299064,5214b272,a056ed93,63621406,d3a4cc11,44a46738,839b2e3e,1b6b19bc,56a1ff06,7754126b,20654e51,3a1f13c6,de4c6535)\n,S(705af30b,251cc64a,26edc929,e3e9ff3e,32ada2e,69c2cfd0,eefce4cb,a37329d1,c0e693eb,94c0c1f6,cf1a0ed4,8c9b13ae,faba8ebd,926c4fe3,ec9071be,2db463dc)\n,S(9b2a64df,9b1f8e,34844e3d,920b1af3,14df1b7,78b863d6,f1a6b94a,869061be,5ff03134,722faad1,ab6f87f0,bc3c6abe,8406bdf3,6506b662,6d066ce1,fa6a7cf7)\n,S(494967f0,1a0c07df,e7d9a8b3,e6a4ad13,893a894c,2619238,7384e38a,d514cff3,11ba0803,72bc4ffe,b86e25c8,b69ea450,5f6e3b24,504b5e38,210beff8,5d82e1af)\n,S(fd547247,812e4233,55c4a977,4dfecfae,812ef2f8,f3fd832d,a3af2ac9,257d50a4,65ed23c4,d776baf4,53faf3d,d3edf65a,5d9935ef,9e22fef2,53319e22,ca4bf51)\n,S(4aa16ea2,68ae95b3,2f405fd9,6fa78478,7c369015,4c124733,a07c1953,874b6246,4306725f,579fc013,2cb8c640,7361c7c4,685a2a49,532fa14a,36010779,7f5104e7)\n,S(de6fdd33,8b6eaad1,bec84d55,992a5b74,aaca294a,5f804015,796d69c2,cfe67add,e58564e9,d2cc10e7,184d65b1,7e0271a7,f2e59073,bdca05f,ae664f82,7e6fba13)\n,S(c8290adf,d0da5f1d,1805f36f,288a8709,eae0b93b,1a7490da,5ffc29fa,bf834592,ff161787,f096e022,f513afc4,e0b84d73,e7f9f347,798e1026,931271b0,8f1c8a87)\n,S(1b95c512,815603a6,19750d6e,463d5a33,55f09c22,56484ae9,8f1c76c1,10ed8fec,93b3750c,3a1272d8,bc9e4c52,b5efb6bc,d794c2c3,939bbea6,1848c9ed,423bb39b)\n,S(ac0d9939,104bbaf4,d2eb2560,356f2bd4,f1037ee8,397f0703,b7ebfb49,463a22e3,c6e6d039,d6acc470,c1ee1013,722c4a00,4c59e472,11da3025,49351216,f0bb8985)\n,S(d8c8f5b6,366c1d29,b2f28f53,8645b17c,f001ae59,71a19f05,fb6ebb3e,9e36faec,5db24ba,6d78e76b,42262b65,e631390c,8540b72a,746cc5b,edc1b681,8b1a113b)\n,S(d42ccf6e,6d1c663a,3dd95fd3,c016d535,c50e394,fd63b353,2949716c,49315737,e7337f22,2d353eda,651087c5,13cfea43,96e9cc5e,22aefb4a,5fb3ea8b,579c7298)\n,S(53417fa2,4871adb7,6d875c05,8c46065,681f6372,95d221db,ea76d88d,f687b817,d014e6ea,e00c4ec8,ad931dd2,5cf569d2,efb3068f,7aaf5ded,d4978546,1bb31d76)\n,S(202e9476,53b677a8,d7aca305,c52af8b9,d33b1ec4,c5ec94fc,5f7775aa,c478f150,539a24fb,211da532,b378f3e5,cdd688b5,c57343c8,2e03a637,39544c8b,34e3087f)\n,S(434f1027,72aa0555,8bcb2f6b,1f64bc8d,72bf1bb2,8b972c3a,f6f342d5,f1493f93,a9db9031,f2d1b8b0,e5840fc2,b4534970,90aee2af,5bbd83d2,c14a5ad8,acbf8c14)\n,S(a0e54d1a,f09c47f7,cf56d3a5,725d6777,9fdf920d,3c1dd566,caf71666,de7d5d17,87f5db7f,197185b4,73cfc293,7b0661ce,1ea92099,fbb51151,63c2b26d,47ba97f0)\n,S(2d43cada,5455b682,f6430cbd,96a2e316,ac0b4b27,e9fb8777,a94dd2c5,81c0e350,bcf18180,1c1722db,1bd9b8f1,8a1989c0,fb372acf,fecbf9f2,c37ec4b3,b459c916)\n,S(e5e6dd12,6340f04,431552e9,903ff4a3,c309ea1e,c498e483,e19b9cc1,37418d4d,58d35fe2,24ab47d,93cd53,fba32252,4a3ea9b6,d96390df,25935a1b,dd12126e)\n,S(b112e4d3,ff9adc6f,706cac35,195843cf,302324e5,6aa7305,9c8b5f3a,6dd7dbc7,4fe76714,6529e6f6,b0379366,334595be,efcc7cde,d3596ed8,83e3b30e,780dbccc)\n,S(d26b5261,ca7be739,95de1bd4,d75991ef,4d357fa2,5c8d513a,e209ac6f,64ad960,5f3b8e07,74e78bb7,5c395bcc,8512f2c0,1b6c451b,5c8d6ff4,18f9ef35,30c6d046)\n,S(e2e4f568,eaf2807e,cf43ce08,3146e961,92271bb8,d6d9b24c,e7315b00,1cf04fbd,56894a02,58093a34,22f2ad5e,548158fa,c55ce47e,d00ede05,40434424,4e204b93)\n,S(a62080a4,2d8aa307,32255b2b,a239d9fc,19729eec,1dc24bca,67652705,9b1182cb,ae848a12,893c34f2,260c33c8,ce2bcb7,14fb1438,8e6f3f06,d9192549,6a9ec13e)\n,S(684c1647,7771de55,ddea8aec,290c1e25,65120fcb,fc8ce0db,4316dde3,f5ae8d91,ba85dda9,44dcfdf8,cfca86dc,ba902675,3d99e751,5719e579,64e0fa0c,3be1f06)\n,S(3d730e7a,afa97950,bee35934,da18648c,d0bd62e6,9a49281c,b63589d0,5efbd2fd,c28545f2,3dceca1a,ad0a9c77,23b61519,44a3c984,d57517a7,cf6702ce,f4dbb630)\n,S(337c9584,b49a49d9,29b1212d,dee7ecb6,39f007b8,9ba94180,80c9548,459c48b7,b26db317,3e996893,fe1e0797,f75cd05a,2eb23ddf,4806407e,1f173d29,48bb0bde)\n,S(7013edd6,f49ba92f,9c9757d1,d3374229,706078df,c2e9c64c,c2e84cbe,85c6b5b7,e850419,7975353b,2863b577,d6f0c392,a8c5bdb4,2dd557e9,8e971114,5e078de4)\n,S(9877cf36,bde592fb,5f4a4581,2bc3c39c,68ac9956,23b3487a,635d6e45,89e26e1c,6207d384,737a0d80,fa9f42e0,57684584,efe1fa4,5cd73eb7,bd50abc3,2722f159)\n,S(6d35bf57,1c91a2ca,1765ed62,f9b2f680,cbd0955,bc76332c,c83a7378,4bf3eafd,47a589b5,15a88d78,6f94f64d,674182e9,7dd12450,ab3ec375,a9a31d8a,375e5f7d)\n,S(40ebcc0f,be3a2a59,968bf6cb,4d638873,5468b532,80a9c96b,639dede3,171db2b8,c2181816,ab9f0d72,c5cb167c,5bbf7e57,9f17d7f4,484996e6,3a23e0dd,5f5d3a8f)\n,S(90de4b6c,3a5ccf14,cb033478,577461af,8c347731,9857ff40,79e6ef27,5e557b87,c534bd97,a4af903b,f307c1ce,549a9976,70edb69b,c76ae827,f277ffe8,133cf394)\n,S(54e89b59,b73c76b6,cac52433,305c41b6,8f50df66,9b99f47f,599504ee,93ddb110,d307e828,1e89cba4,86ac125c,1c5d8bc,943394ee,222b4b06,f4e3e5c7,b5da176b)\n,S(f2ef67ad,60858ac9,fb03ad25,f75f85e2,e5ac151d,95c96967,93ca080,58756f2d,92c0dfa9,372e1e7b,7363f229,2776c059,56742f60,7b100be3,56dffefb,bcda8cf0)\n,S(65b7d935,a71dcb6d,eac70b64,91b9fc50,35c63f21,655a856b,afd00a33,52f5be39,b0773657,cbdd3813,8f50813c,558ddbe0,3f8ad81d,e420401f,175bade7,1429927d)\n,S(6e950ff,6471cf66,72ea542f,cf05aea8,2c2e1e0a,c2247021,4c78895e,e291ee22,c0ca0886,f0ac828e,21a5c60,776494fc,a6f19e71,741de92e,c11323e7,e874788)\n,S(c3b15f8f,96c0079b,471896ac,89d7d11,8ea1607f,18a20627,fb18e1ff,24ee3c1b,33a033c6,68e3cff6,414835a6,ae3f89f6,643326cc,7e149f56,99ab4fbe,d5f506b9)\n,S(9e333d9e,1c022776,da901c19,e6936c3c,1af45491,a93e9405,ae343c54,775f36b4,c6734e91,3d013610,6c77a1d3,ced1babb,a6c6723e,316c3fd,34a7911f,cef616d7)\n,S(398d2109,4c0baf8a,ab63ceb,6aa6b64c,678bbe86,f7e01b3b,8c0ff291,450244bd,f1ffb185,112ee219,24a1702,183f9075,471611e9,54fafb4e,36f6acc8,4ac7acf7)\n,S(8f99c7d,553ca4ea,b160a07b,6d457058,90634086,80c709c,530aef44,bce43c8a,52a15e23,2e90d233,211d707d,5849e214,1f56e8d,189783ab,3c09f37d,b86a776c)\n,S(8d798338,b2774399,487fe227,e2d883c8,39698301,5f01bf00,d154f4f9,296512a9,7cb53de9,9303a6be,9aee01eb,3a5c115d,eff0e18b,2cb5e852,75e9b7ff,53e35666)\n,S(c9d6aa,ff6b648d,69416bfc,6e4688c5,cf13b711,29c785e7,3ad1e04f,ba02be57,9fa83446,5405aa0f,332a6aa1,922e3fcb,90de108a,db01796d,9045d423,ca0c2632)\n,S(f736cad3,f1264671,f2e79bc9,c21551c4,aaa5da0f,befc1928,b9e7fab1,f59c8c5c,2ceae81d,16206893,b3810abf,d2aedb5c,55b79222,1346cc9c,908346e7,cd3e661a)\n,S(7748965,7c1fcd79,60fa4a8,36feef6d,835f960a,d3b85009,7462a71e,8320a34d,cfacdaa1,2906f705,d83212b1,55475160,e02cde20,71fc5c9f,6a6d59b6,8e100aa7)\n,S(279f43f1,e26ebe73,34924bae,563a0e34,e5cea7f0,eb9f5702,129fa6cf,8b0c67a5,eb5a49af,bada9830,7ceec508,70a49027,7d1cd6f7,6f332249,b2cf2505,82a2a828)\n,S(cfccc083,9bbcc7d3,5ceca575,3b9148e4,ddd4464,5727cf47,26f33d62,d83a6a03,e3cc09a0,9d26889e,c969c734,a3361dcc,d638b17,608baa1c,e7cbb99d,a5bc23fa)\n,S(e60b0451,70c2e3bf,dd627fcc,5eab1218,d3d598fe,a41f6bf1,dace1a35,2daeb287,a493847f,4f1d3bf,9e90c022,851bb652,691af15c,f4c6c539,bf2831ae,9cf8f2c8)\n,S(11875535,ebc90fb1,eb7a08ce,90dede09,fa8cce24,b3911fa6,44ce8111,8848b433,2fb1757e,38148919,bb197d43,48aa536f,c0f06f9a,859ef737,ea50b1fd,82968ce)\n,S(c69559b3,75cdaea3,56003ad2,3edd8ca6,c415868c,a13a30d9,11d4c694,f5822179,a39427b4,914b58fb,dd35408a,67ace872,8c299a39,278335da,9228ac85,24652906)\n,S(625ff5c3,1e951b28,40f431fb,4842f510,8b738722,cdd52c4e,fdb495ed,e42f1f7d,a3eb00d7,4eb30337,d3f61ae9,d595996e,c7d5a3f0,ceb39f23,3df0f5ff,43298d7a)\n,S(1e2fb107,bbb46666,8c31a927,3ce57baf,fd1df905,3fa28286,196a03da,74327c2a,aa882338,5261bb03,a8d8793b,c8f98330,97c22731,46ded3d8,966b16f,337643e2)\n,S(d0cbd747,970ab0f6,19e5e4e7,78709399,b65b3f14,24a084b4,a2dca8ab,10d76ebe,7b5f778a,94d3d75d,57b5e979,3de246bb,f36669df,b7dcc24a,ecf4e153,2025b73b)\n,S(ab4c057c,a40b84f9,10142209,a5c173ad,6ef31616,db80bd13,61959f11,b739f9e1,598f12b3,4695bb27,ccb2fdfe,a0911ece,eecf2cc3,1063a3bd,42dd100f,e93c7ced)\n,S(f9c11e91,2cd3cf06,d31e4795,40c703a7,4f5f3100,8e6ce299,30d5f08c,7307276d,f873ce74,bab3785,156468ce,3d6a8cbf,c532db23,2a0a92fe,91d290cb,ad08713)\n,S(2d95744a,79c4d234,40e2f40c,a83cd89e,61576686,21293dab,6716072b,2089b77f,a25249bb,9dd8a94d,44576a4d,7ed800c1,9adc5e26,82874ea0,5d63bcff,2f6b2704)\n,S(3bec0dff,e9a96bb1,f3cbccf,cc96ecf7,e1335b1b,86f13b63,6467fd31,5cc33abb,e31f8a49,dee2408a,2d0b9288,4e381379,9fe404ec,1d8b96ab,39413f82,52b85b5f)\n,S(23721d31,616051ab,60287a0c,2b4ada42,1bf00825,127ea0eb,1341beaf,a207fedb,8cafc4b5,40e6f3a8,6fd1b546,87ff8c3a,fa2372e0,24696071,59b6e195,f633b169)\n,S(ff8e494c,446cf1c4,bd557615,a4a1ce2,b8d25bac,62a89929,993cfd,51d45099,113e1b98,555ddb77,b8680eff,c57eeb96,4038de04,26a05289,8744f8ca,4f3ef028)\n,S(f170cfff,f158e368,81cb677a,c9d9512a,3c1705c4,850d5a85,17a66636,7b0cdf21,49512fe4,3ff0f91d,b9ab918b,808ac11c,b5eeb4cb,ed905f21,adce5e4e,42ebbf7f)\n,S(e9ff6261,d6c05d6e,4e35e373,57fca0cd,3c3ea884,4a33e504,df3dfa2b,a524d158,4969683b,9af581c1,963525b4,e8244e5e,6b7e7e48,f85c1fe0,1e9f0dc2,c66e591d)\n,S(c1c4879a,b614ad86,cb64d15e,cba92aaf,4d1c7742,76d6aec3,4b59f731,addf6cde,6d7185b8,fc1b99be,383a7a5f,385a08f,d7125e3e,f72f93c,25063bfa,d44abeda)\n,S(deb0c036,3818a101,ba38a657,5c0db8e4,a65f824d,57014dea,1c110387,7bf2d9ca,f658d43b,f0c106cf,6b45e552,3fcd066e,e754180e,8510b58,43708b5a,b40dbe32)\n,S(c4d4164d,f782df0,f5366667,83e5aa9a,8b05c7c6,91c47a49,14798685,1da3fc9b,6c394d4c,3118c8a1,30bea2,2396562f,6dfcf8cb,8f0a91ec,20a43bd1,548bd80b)\n,S(94d83b82,f6db0da3,f1bc24ac,8c5bdd0f,6e89cf2a,bafd33bd,2fb3ca87,9cf63a84,9e8658be,59d64a28,7cc0cfde,1f35b83f,e3e098dc,6212afac,ea234437,2591f2ab)\n,S(9de3fae6,e6934304,a84eed5a,58e077b3,76da7310,61859847,d6abecfa,fa650dba,7e4cd395,ea8b90fc,20850be2,4ba8dd83,e79dbc4f,4efed68f,504eec04,f9bcb212)\n,S(251869eb,7a567c9b,7866c9b5,a829206d,867f2092,8f3a6fe6,46ebc3d5,2df7d99e,bd87d706,c49690a1,9e0ad77e,4b3b8f0c,5efba7e1,2a448a3b,b4ad3c7d,44e35e7e)\n,S(e92e5aef,818b2980,43227673,3d15021d,c84192d5,bc9307fa,1add63a2,8e888a9d,ba3a3157,96ab2051,ad53b5e7,a058f700,ea90e40c,c5855712,d2176a0a,c232f94f)\n,S(b6a8a783,c2716ba8,9a37c7,d7022dbc,25fef8f6,76c676b8,267038ae,64a33258,93b09e15,8bf081ab,9e69c4c1,6d965743,cc08ad85,a8eb248c,9c67043f,fe61ebbf)\n,S(26e95f26,7ee205ad,50dcc75d,82330877,394c56c,84546cb3,72fecda5,f57c2556,dfc935f8,63840ca4,71bed804,d0c2d14e,c9528a9b,ba1e6f25,6545311e,5cae673a)\n,S(6c1ed40d,dd086dd8,2fb00bbe,d969ea90,7e363496,97c350e3,2d0074d3,3e05bc13,854d177b,5593cdc3,ab1e4903,c64be02,2b6b0cb2,25c71390,9316faae,a235b269)\n,S(a9286b2e,81030401,c37d69cb,1e73caa,b1c68a4f,4ce1538b,11ed850e,67d11aa9,64ab5453,c3a1166c,18f35115,1f031117,e29b1a31,237cb2ba,51f1a873,529766fb)\n,S(a2b862c0,ca02cc3a,e1bc5737,876f81ed,83dffeb2,4e6954c7,3cf97bb2,50050cc0,db3a03cf,d704f98d,dad8f48c,5861988a,1caf439d,b50c196a,32289622,b9a49b3d)\n,S(19259392,58c25edd,953117d1,fc7a74a4,a9cc2fad,892255e4,fefdac84,4784c917,b86a1bfc,b7bc8844,abe424a5,b7409abf,26e8ac62,7983fafa,70dbdaef,43a88eba)\n,S(6b85864b,194b2cfd,af1d6550,4960370,306ee34f,87c91187,230de0de,42fafd09,54a9ddf3,87458a54,cd305e06,61dd43f8,3911e88a,db6f0256,d19cdf15,3ab4b388)\n,S(407cbd77,b88e6d47,60b07e26,f53fefd1,2b98bed3,5403c693,e7ea33b4,cd74b5c3,eb73a1d0,fd122265,dc880cb2,920b4eda,610ff1cd,a74660aa,7cb91323,e5485d60)\n,S(f65cd6a4,594299a9,6cdb5f9a,7889cf44,62cca331,d3329f7c,43ecb224,d58c817e,8c906c4a,11925697,9f84722a,9440d2e5,f97e483,542658b6,8538aa0b,f10f5572)\n,S(2ea38854,775422db,43eb69b7,bbd47a6a,b8ef1694,28753fa8,8cf49c8,9efc6e63,bf6f2d21,2b21c740,a25dfacb,bd22436b,5118f1a,2004bb90,adf580c9,6f21f1e6)\n,S(f2bb4814,94677f3b,6af8aa4e,6a3b1100,c2e0e99e,289536e7,eca3e61,a20793ee,a3a788bb,2a810267,9a3d98f2,6a9a2740,91a3a29c,234043ae,aacc488a,67849762)\n,S(e157c4a2,84354b8a,73d5e5ec,58dc1ceb,2396ca3d,7f651e6f,4547aa78,99899daf,f06970d9,5bef3e0b,e2bd4597,a1c96581,275c9719,605f63f,9618816d,669a0bc3)\n,S(25aa7f3a,3a14731f,c7fa3b81,31a569e7,4bf32c9e,3492e626,aa4a4316,f263cf12,e5c2e210,a8a75180,31778f4f,4737a0dc,bd1a1312,1dfb40c5,5c435803,4bc3eeee)\n,S(73ba2208,8cb96b2a,c23dd2a9,7b3cfd2d,c504ccb6,24c2dfd,5062f8e2,bcc442ee,ab9d3a1c,6bd762b,9cd866ab,7abc0e1,f898c567,61c7071a,d64d5233,caec0ca5)\n,S(da94893b,3e73246f,6a72041a,44c7279e,dd8d4d3d,55b20db2,eb0e08df,4c5837f2,6949f652,8601b0fe,e572ac03,89fc3530,6b2d09d7,b59c40c7,a1a607cf,51684006)\n,S(908480b2,35c49b11,12bd6504,5b3a8e13,7cbd4820,3046880,1688ed05,abb8b7b5,8a887f57,622a7482,3fd40b26,f58ae7a0,18d2d03c,d5ed31cb,93a529e3,387fec7b)\n,S(682d7401,31c966e3,2a8bd150,27fae9f5,4452fce1,360c449b,1b20bbd0,257d58d1,ee7f773f,9d074436,685a2fe7,21b1b829,9369f543,dcac37e9,9adf43b6,4525c19d)\n,S(c8661c4e,dbe125bc,a31e7a22,83aa0f9a,b4b3ae70,8512fab2,21bdb4d3,8c89fcb,30299a17,16d3fe04,7f48627e,36195b21,e6800d4d,a26dcc63,96c7fea5,8f25a2a)\n,S(5112b1c6,2b88e704,f0d2c731,834019aa,d51a108e,1a8614e4,f6e62f68,d7372b4,1bfb5f8a,ee37bb82,5494c9ce,651d32d8,d47e5a29,4b9123e0,7311f260,9ab4053d)\n,S(b9214d34,49e16aac,b90f6704,ee589f6d,8fa45126,be235e9b,61ef3ebf,2150eb99,c9465341,2dbb107b,965d177f,de11bb25,53e8795,69814d17,34ee9ae5,267529bb)\n,S(94185601,f959999,1999c919,82e5042f,b7e68583,533f9569,73788d5c,3a087b2,5e51c755,de79b6d2,eb640039,a4268d3a,601750c8,dcd0a942,eafc9339,6fa36c98)\n,S(3cdad3b2,2a707d9,90fe4228,adefc934,e8c69a9a,8a4cbd87,844a6ff5,a073f511,f6de425f,26e17045,5589e22e,7824dacc,f8cb8561,832db31a,e8fd2910,558ff9f3)\n,S(ca986704,a0d1935e,1611e176,60394d00,7d2aa1cd,cb17357b,b4a557e4,f5a4b5ce,8d527934,a73f2b0d,b3cf571a,ac53b3de,11ac99d4,6ba995b7,5a09195e,b10bb5f0)\n,S(f5920156,3ec396c5,82fd6090,2d98ac,2d5dcf5a,cd37e651,a1e80c43,f76940e0,2e821f19,7e27f927,20230f1d,9e26dff,5b3d977e,4b4a6cc6,7482f3ec,3cd5523)\n,S(9ced8c1e,bbe0d213,b396fb89,8aa8c24d,870d305d,e9346239,b2cb0315,c883cdc,79367b21,4a2e21fb,1e9b24d9,fed6a0dd,b377534d,4da2b501,6999ebf7,f77de2c)\n,S(5b07b283,ca262751,4a10817e,bdfc8044,883f4de3,38cae14f,de955f18,9713dac5,b8d6d9f6,8a71aec6,3b7bb44d,1d2b678c,75ff83c6,37c254c8,3a14be30,a5957b5e)\n,S(4c2eb4cf,3fe64ba0,21297b8e,321cac6f,a8245614,45848933,19453052,69337386,35ee2473,1830eea9,85171af0,96b6bc0a,72f3e83c,6d83f8af,8ef1131d,c8b52c8a)\n,S(5f24fcf5,f8c0bf43,43b8a0e,b3b6d8f7,2901c902,6d43f8de,4bcb1cdc,6d5019cc,87c2a306,138265bb,59b2b2b5,6992fb37,b2ab28d4,ff4909f,d6067e2b,4f312cfa)\n,S(e26bda51,c385a875,5083faf5,6a915944,3eb351a7,88e1597b,f17649b9,b23ab8f5,35d66322,ba25896d,2a14a0a8,a3f5bf91,d3ceab49,9b2683f5,db7f58e,68ca1071)\n,S(ae5be06a,b1ae531e,5d2338ca,d929b5a3,4c283035,95282aee,7c3ac259,8196bbd6,f4f486a5,bf11191c,9134d522,62ccd692,cc5c6686,c9013ed2,782b816c,da416d25)\n,S(d143463b,4661a173,6b88f274,6b3c20c6,d054683f,9efa5221,ffd3badd,14804880,77b28055,7aa11d3d,b2ac8de2,c9c5757e,d0c9b0cb,af6fca3d,bb295bcb,c3ff8afa)\n,S(54804f7,28ff88d0,bf6fb4a8,a24d4eb0,ee5379f9,30f890f7,8e31afca,87f23343,79288e99,a38accc2,c59ff29d,9da5df60,42d63089,45900378,c40dd765,2f0f5626)\n,S(68c21fc9,93d41345,484cf5c9,8aa93bf2,25fc2c01,922a0151,cb3e247c,f130ba0d,9c435478,23b9d8bc,2e8ba0f3,8f2b60dc,ca5b6030,eef51c6,cdd20eb5,a02c6245)\n,S(2f50b870,96b2e15d,6fb35001,cd8f95a,875cea3a,edf21a2b,c433b254,7798b856,44b09dfc,e0b8d522,17e7d9f2,9bbc5d6f,9886fe9e,3e360688,8d7c4e70,c3bea0ff)\n,S(9d054954,f0c22da5,f330b3e0,69310a93,66b72129,2fd3c98e,76464796,847d16df,45962d48,143c94b3,57400130,d3e050a7,4defd464,223ad599,e6aa947b,12679a85)\n,S(31980b95,9f51a6bd,4cfd9a11,b86dda39,af66ffb,97713ba7,3edf8c10,462d5685,d0a02979,5b45ba4e,7464fc47,7a09a90b,7265f5aa,e6b0d655,fca5828a,837c2840)\n,S(e9c0615,f0444234,1f522d93,eda33b29,8951a267,7c4cdcbd,fa02a63c,a57d1ed9,7aef87dc,7095f483,5ebf2b3,156be9dd,ecedf54b,1b0c739f,c513ebda,5c5f296e)\n,S(fec8bd3f,f19fa6fd,17523af6,27384c7c,6c92fa85,aeab8bf,bbdd2178,89b12650,d01a278,6ee8f9db,38b1ceb1,a3fb1df6,b631c0a5,23e92460,d0d51367,1098e414)\n,S(2094133c,86322dd7,ee1abf80,2ddde826,e6385342,6bc87510,dff63f3a,b94f54eb,efb2ecd2,13bfda3a,227b791e,c24ff627,17ab559f,1bd289b7,e7db992f,d941e850)\n,S(a34c3385,ee882646,b44bfbf0,f64225b2,fb86df27,c616a2ba,6cabbb68,cf36f3bc,e99bbaac,57c9f5ef,c64c6687,6f2bd6d3,b9ec8eb5,f9227c98,9a768f34,23e91422)\n,S(df09dbfb,564515f3,a6d86e05,dca59a0a,c353746f,b291d9c,add27d68,6810cbec,90738e50,6bead3aa,c0cc4a2d,cdfb8529,5e752945,a7b2e357,1a99c901,49017c47)\n,S(df9817de,89526a26,c61e4294,f245ce06,8b5e22a6,4937d5f9,6898b9ed,74078989,c4db6e86,c6a44091,23227adc,345d6eb7,d2f12acb,f2df3b44,978a1743,94072f15)\n,S(2e713387,7a0419b3,7bf77874,b24fd0,7cae9fb1,59919a50,223437b,7746eada,5dcc4c1e,12502573,b0520817,16fa46d1,8ba43ff7,e7f8c8cc,e3c141ca,6176f805)\n,S(99826364,f0061305,1ba033ad,63b95884,97158ee6,9542d06a,f2f86d91,3bea7a2,5f109254,24af4592,2ab30701,464d504d,6006969e,30a9ce5d,76a3b115,6158c6ea)\n,S(19222e8b,5fec6d2f,33a35fca,83c3b9eb,effb9e3a,f2ca9c53,929fe5f2,a43bcd32,c79b4f98,4621b2c1,d627dade,f01fe761,8af239e6,b80c23ed,a2dd1b1b,e750549b)\n,S(e0ea59f8,6b7925d3,ad511280,8b1ae5ed,c0acf6c6,d4ed0846,d870a663,5573970,bbfa69be,ef531b32,5272ee02,8c880178,57ab2a32,65b5a6b5,38ef81db,83b5de52)\n,S(7df189b7,c29c06ab,83f7d849,58ba3d1e,7da3ebcb,feeb9dc4,64b60420,3631fdd0,88e00d45,8287fbea,5c14ab33,6a879948,e81d9798,cb82054b,772728a4,4b69e56)\n,S(42b9867e,7cde3ef2,b4b73f3,e4df7504,b7f06cb0,67aedabc,16edb276,97bbca58,eab47aa1,df9af0f5,40d1c6d2,ba7edcc6,fd436f56,c944c872,1e1f4958,63144390)\n,S(9ffd9a,5535bd30,a697f61e,e6fd0ffe,b1a7e5c1,9459bd3a,708a7112,3a3da54b,79fb0a7a,8334fe38,64fef8a7,60610920,af2741c1,fa41f582,37e92acc,29644011)\n,S(13ea8e5d,1116a57f,8b223a5f,79c750de,6c25511d,558e6878,e92cb134,7b81e393,a41efd37,d35ea994,8175d989,cde449d0,e325b40e,a247edd9,e8f4eef,e6a4d283)\n,S(110d401b,d7a1a0c,e484fdb2,34cd839d,5e40cad8,6244cdee,5c4f2ba3,ee1e2eb3,cdd91a5,4dfa47d2,98a46f15,c021a38,975ca108,f2653019,46013427,349d7ca)\n,S(48a9f1a2,fe29b05e,d419a14e,8ed288de,46affeb2,296522a1,f2407b76,a8f6b040,f1c5ea7,887c029f,67202b41,198113cc,f1ba5617,79afc1eb,db0e10ec,5b5d2a91)\n,S(d8c4d9a,feb94e7f,7b831464,77aa4e3e,a48b6af5,35015941,4047cd01,1beb7176,fb8af9c8,da06c2b8,8787793,bd19d7ca,6cc64508,7713af45,4f5fb4c7,eeda3c2a)\n,S(34e84417,2f5ff4a2,70a9064c,d5994327,9cefde94,d295f424,2c491efa,bc1f0839,2da40cc0,5120e4e7,8e84435f,895a3ed7,6c507bda,4d16cd14,b602deb4,366ff9fa)\n,S(ea802ca2,f07a4348,791b7df8,99639d06,c6db8d15,74ae8441,b29c2d18,18b7a6c8,ea475a0f,5f74e6fe,ccfca44b,ddc38a4e,3cc19c49,e2bffa49,a9572146,6338a155)\n,S(d80542c7,a7be8da6,6346d867,4154f65a,b1cc8e94,19299d81,6a5c874,f25ee43f,5e85d69f,b5c72ae,bd94b1e4,67e0d30,df8da61e,4150f4ec,e3efcfae,78d88d25)\n,S(bdb35e49,7c1c0d1d,7a120366,cd259e7,31cb253,1bf804ae,f0c82cdf,561d0c0c,2675a4ee,aea6dfed,8597c08a,69fc251b,7bad9869,e83f485a,73dd1638,605915b0)\n,S(5174e27a,9a1eeafe,6411f3af,b627223c,db0da11,6bca0ac3,d39a3080,815e22a7,b1223046,5f58d183,fcda2603,e4593398,51ed87ed,6839d9b0,4c845459,daa3d5bb)\n,S(c8b1299b,1b2880ee,7720ad03,62588349,44bcc309,6a7081eb,ce10ef20,ab1f6731,ead86be8,85584e4d,34ac18e3,d787031f,72feb217,694a32a0,76f2f88d,a04f3440)\n,S(fc1378cb,c42fd6e2,f61be9bf,e60bb2c9,b36c5a0a,4aefef09,c8287a3c,f1310d31,ae4ff85e,5b22d2fc,914192d6,28324d12,51ffc469,1ba8ca13,f8347edb,5a9170d4)\n,S(7c0bf943,23e7c1a,8004b23c,c05327a4,d4127c7b,eed27e3c,4a825e41,5f3c3a6e,30ad62ec,bd19f80a,a9dcbb5b,145d18af,3248eeb2,1d14e648,d7fd7217,f1089728)\n,S(2ede5f01,232c0409,34b07b70,1ccce3d8,27f85ad,2a56c987,e29cd6ee,d841efdf,24cbe9f4,69f036a7,6e140720,f65817dc,847e9562,4820dbdf,b8a1384c,8d39bdfc)\n,S(decd1afe,faf01eee,d2dd89c,bdb9711c,4f1899fd,437d0371,55cf74f5,9aa0858,899d1c8c,49b0b3a1,89a24445,568becb1,d3b1420d,ffb2c7a3,8fc291b,258f8ebd)\n,S(1dacbc1,4be6e70c,4043f5be,3f972d36,3cb456a2,2ee1b1ce,3e207578,8233a79f,fc3b04b4,f502affd,37d71c58,d6f1a61e,b126cda0,e156608d,7f2ab786,e0734486)\n,S(12ad0f7f,cc7cddd7,60cc6a3,3fd3de83,b1ab0e3d,cca013a5,68d5978b,a176cc19,b4e0cf97,335b374,661f6c21,46aa7315,a2c4f6f2,b839f88d,5376e256,99e6e216)\n,S(f649bb96,e477a5f3,f852dd31,65496c07,5e14a85d,fa929794,64f1297b,d56fd1c8,46e37dfa,7eddec82,88fd18eb,9ac200e6,79337296,e2cad24e,d67f98a6,2e61d040)\n,S(34f5e5a1,248db96f,a165950,a9b74392,acda22d9,95496808,82760daf,642c600e,a8a6637d,a1cad7d2,f72fe1a,df67eff8,49d0ab0d,7e06d7c1,a11078aa,de9dc733)\n,S(26e940f9,ab45caba,adb1e4d3,23e5cf70,575c44dc,dd2f0b10,1540174d,d2aa715a,972aeeed,c5fd01ff,3b04f236,c799039a,9c7fe6f0,db1348e8,b97dc885,c57926e5)\n,S(e3ad36a5,132f1067,503498e1,ed4b315d,4d06cc67,3a9207ce,47224497,12f51a4a,4fa719b7,37cdf1b1,cd5b963f,16a47e6a,e43dbe0d,490423de,fe5deecc,5baf9e8f)\n,S(413fd0f9,4e231525,1aae9d6f,61aa0038,dbf7cc03,10c81185,394c8cc4,8b721a9d,9281c5b9,ac1f56f1,50776cf4,69e57118,8cc6989c,ae41b950,f72ff25a,d6de836e)\n,S(9841a473,600446a5,5ce0ab4f,2e77ad12,bc2abc34,1e607241,c0c61d2a,d87148d5,7d1bb113,ee4b5199,95231834,1e05d87f,f9bb355f,df958410,3d161969,1d786f4c)\n,S(1d4cdc2e,3e06c052,69958eba,f00484b3,36594f9b,be1ea98c,2382e608,cf78272d,6cf5d126,766fe5f7,75bfef7d,c2d91b48,66d4bff4,c8eb4e59,230d1903,16ac6bb4)\n,S(da74f388,86de9c6e,36227258,758111ce,3b9414cf,cf8d5cfa,bcd9b3f5,44f1262a,d9231255,e3d9189e,a8d0344a,80978b83,3f1afb57,5c799f01,8b4ab73e,866a38fa)\n,S(b2ebf119,46e37704,e1e12345,c68f70a9,a031c0b1,e85c0833,c5df9c0a,b836a6b5,c1652832,1666f0f4,19806a4a,86f4aa8e,46fccb4c,f7b6493e,26d9699a,9db2bde4)\n,S(9fd899da,eb6f84ac,edfdeb4b,fbf8b521,6b5757e8,10d22d4e,56afc38e,da747cf,2daef35c,7ef36b82,d6158256,2466895b,9656970b,4beee8cc,2e0b12da,83d7af64)\n,S(eda65e56,9cf07e84,19d07f6f,4aedd24,3c46df2c,bac92772,bca7edc6,ba17b217,1f394c99,b48348e6,fb709e5c,b4b4b77d,41eac2aa,bea2a4a6,353d1982,a9985281)\n,S(78567d1a,1a96df56,299c9ee2,1d916472,303178b6,9b18fb00,a23c10e4,f093ed5b,9321fb0,6c5d2dc8,52e64d6e,453d9923,bff7c626,efaf5e50,245b4ff2,64158f23)\n,S(c639e1a5,90f5973f,148e96f9,15c94d8d,7c7ec36c,bdf15150,83503aa9,9ef5636e,3620e7fe,faaf7581,886776e4,f7391599,94ae3e2f,2a59d4e1,ad6d508e,f4db90d4)\n,S(73ef6655,c49894,7aa2b63b,89b77f14,3ac096a1,d7333494,d9774ada,5467b60e,c04509b6,2135fa8f,816436e,6ec0f513,ccbb23f8,782e2ca4,d5eebfea,6a5297af)\n,S(bfa4506c,dca70a3b,a8fb0188,e0384bf7,3afbaa0,6818d503,df5015f4,f10cf341,9fc7388e,2edd63f7,9a5d328d,1b949a2c,a364075e,f94c8de8,37cda5e1,7d566ba1)\n,S(2d594b,814a9e92,7ac9433f,3400c5e5,1a58457,6f47b8f7,f5f0b8d8,f48b2cb2,fa9a1577,d565b906,1acb9efb,4bf415ed,f264b662,594d1ccd,51baf83f,101183a7)\n,S(401ae44c,a4039850,4d57390f,66044f6b,cf1e9fe9,f0f2b057,3f64f026,b6d5f3e6,ed947768,36ce65ec,f947b81,9dedd31e,c8ceacd0,16a40a35,78a592bd,4c2626f)\n,S(43f9397e,a000ac26,8a315406,fc9cd047,b9cad513,8a7dab38,2717744c,ec6662b9,14d5bbe0,52dd8635,29c0b0b2,dff7379f,3e2ae95,6c5b4920,b36452d9,56085bca)\n,S(25036a12,d8eca48a,78cb5e84,41aa5a53,16376e83,e2ac7819,db9895c4,dcf2a22e,14c421de,dcfdf9ec,b69a24fe,1c289ec9,f4d0f9ca,6f4b9409,35ac9815,a4154209)\n,S(30e9c9a0,d9b9c92e,65794acf,a2cea34a,8d56e3db,d5b56205,59100128,26bf8991,999e4729,bca75c06,18f0bf9e,8ebf0455,3460031d,4ae47623,5e4ba182,2f62550b)\n,S(a8fb641,fe27c40a,8e410831,fe1b0d2,cf74072a,bb626b19,2fa51341,e99ca538,f3832ab3,4eb6917,3e2f3755,366b2bf2,4dbe257e,eb516e39,4bfb91e0,a63cff8)\n,S(5e09a349,98a824e2,f3ffe2ae,34a835ce,6b2f0d28,43b765fa,8dee010,49df7867,20ea03e8,4817593b,931d1612,2d01dc7e,52715fb9,36838de9,d2c9fb69,9c935025)\n,S(e62a12e9,d02a5a7a,475dbcc8,79850ba8,340b638b,a5c3b505,8d3c7ffb,c90f0dcd,b075d21b,40e5897c,7e849529,bceec7f1,d5f87881,318c115f,acc99680,31d17f55)\n,S(45aa5534,530265c1,c358b529,de15487c,b6bef551,5125e835,e027b0a,a69a9cb6,2e56d88c,acb32ed3,24068fc4,4c03ed2b,1b70392c,9facfc2c,2fafc696,fdb8d397)\n,S(7fe3d940,50e2f358,31b410ce,e54c7c82,5eb05553,981f1c45,b136a24c,4d4a4b57,97b0cfad,4f6669f6,efb2d35c,42302e10,87c03b3b,1c22e23,24050399,345165a5)\n,S(110dd614,85bedfa6,c09a2e5d,5737ab2,4a5b35aa,40129388,c6ce876f,bd3d9c30,7972ec2c,621155fd,12f0a1cc,30927669,13a9165a,7dab66aa,8f8fca53,7411041c)\n,S(7427d28c,aecb7a35,a4100c42,9fe03d5e,6d3f2f91,a5067866,c618c4c4,5fc53547,8cf74ed7,1324616d,bf4135d,8f442ba8,b473ebab,fe981f2,3a426eed,bbbcff16)\n,S(9779c811,98040c8e,754b9df4,b547c09a,a9f25410,1ca1fdde,365b0ef8,34ed95aa,148280a1,d26c8ff9,51774c55,7590081e,36030a10,a148c322,3c7379,67d036b8)\n,S(41113833,f7da3a4a,4736fa62,ad7b4508,74ef5b9a,b0961665,e30f3081,7d861adf,98399ec3,485a984,cdbb6817,783223b6,59884450,881d2f41,3f4e59f0,ed5fbc65)\n,S(f9830e6b,9a9a9dbe,50abcae1,d44d4856,3a92e505,aefd52d9,2259c41f,4b8b14bd,12061be8,5a0042ea,1baa46df,b36d6f78,62c11cb5,b8a070aa,6c6a8991,62ea1c0d)\n,S(71284b2b,36a4c8a4,40fdd713,6b647482,bc73d680,3d6d0142,833d34bd,f2794077,6e54f5fe,8cff4ebe,bad1b47c,4e5d6407,44be9171,b391492c,df48bc35,10e195df)\n,S(524a04d,a1b7ba04,34377531,99178ceb,7ea18f36,2c300aeb,a8daefe8,6e63e9d5,1c71ed93,861c3b1e,41a7fcd6,57225e92,b2ddc507,4d54652e,3898683,8c3688a2)\n,S(e1fb70fd,2057dc3b,c545fb80,eb91cc9,479cada2,93c3492e,260b0a75,4bdc0222,aa799a9c,25786c64,d5138ba2,1f801e5e,88fc2602,d4e288f1,96c8d79d,7bad2278)\n,S(2bf126e9,8302e8cb,407570f8,c3fe1206,3c91bf2f,63cdd9a9,3dcc403f,a8592d29,6452a6a2,20edbb86,3ed65ed6,cddd70d2,6b4975bc,e843a41a,10ce6ed3,d38591f2)\n,S(faa217d0,1d9f0517,5950dd5d,e02972c8,b2c88076,36090d2a,6f17e7df,2a70cd7,73077022,dc1cb45a,f9e9d056,19635760,66ba7b07,bc79601d,ae7dca1c,a6cdc033)\n,S(3d184ee0,ed45af08,6a7263b3,47b12449,a7270887,b8460b7c,6428ae4a,6dc4836e,d002efdf,1259dd8e,ab5bb606,97e8892b,4cb5376d,c26d08e,52b7c9a,760e8826)\n,S(3c825a76,29890675,bfdcdb73,27f37c4e,43214a91,c6ddb6d0,f31e13d3,cd26eae,45bc7ae4,649d70ba,99df5d07,92e89130,87a272b1,bb2d6043,dcad0fda,a5444fac)\n,S(3a8822a8,d5b230ef,62f657ed,31a12d63,2862f22d,eff16f08,8065981b,ed3e926e,ddca63dc,57ea2ecd,b25e8d03,2868b12d,abe8f7ba,8125a4c5,56d80a9f,9784a04)\n,S(d0042da6,aa3b60a2,463e3396,98229067,c80f8924,12d8323e,7482ff2c,53ad86cd,40697e7c,4c5d6c,4ba11cee,fdbae25c,e234ece6,7db446df,daa03025,5f8adf35)\n,S(a06e32ee,93d70c5f,a45a68e,2a180be4,7d8a7f60,17d035e,47c94d47,6f3838df,f4bc98ee,c7f50d34,4e88ee87,d8705b50,4cc0fd5a,5bfba498,5fe0699a,df811bdd)\n,S(21426073,9f41da95,2dcfa74e,dbcc2f22,375fb359,93f83842,99e3735b,e39b45a5,697f2d88,74cd2249,cb84c9aa,16d20956,f5c40358,9d5b7965,ea4b46d1,9cd61249)\n,S(84d52769,327646d6,13e3e1ec,2d20791d,76b765eb,fc5fafaa,20097164,dc9cda7e,d87be4b4,2e2e55fc,8f87dab5,c8c64493,f09b3996,87ef8fb,3a6c653a,a2250cf8)\n,S(ca48382b,49283747,d433be3f,ee0569ac,7d3714fc,bbd76157,ac5229ee,ee25dd0,b67165e7,60894bf4,3cc80df5,6e3109,db7e370a,bebc7503,ce20836d,3f0ebb2d)\n,S(8a6a751f,816c206b,91e67608,58fd7def,8ea70956,598b1c61,8e0699ce,602cda79,617ea6f1,c7f98cb6,41f01862,1f4c8cf,12a556e5,675765cc,c7bb1283,cc8ed073)\n,S(1d035f81,fdc7c483,9936692,9bebc7d9,15fd3c0a,380f3348,13c65527,d82344ba,e4203070,f687298d,af8f6d66,6030f3a0,5826b0b9,31f0e55,8c356aea,b3464712)\n,S(d28f1a4a,1198f572,a8130bbe,3f25e585,348a33c,2d73053c,ee7e29de,8a3ce79c,2841bd4b,c46c772a,57018c74,8510fc7a,dab16644,f157d51,9c38391c,4470f7b7)\n,S(41c71a1e,eafbd926,4a49ba4d,e976e72c,691026a2,b1773d4a,88670b4f,d9c57fb8,c2b198e2,e4557f8,41203c16,b511d61d,b39e8a67,21b776e9,865158e1,91ea5ac)\n,S(3f0ae72f,b1a06f84,803ff8ad,fa0e5c76,ed0b596e,d52568e2,6fe4aacf,6cdbc3ee,69a9dc3e,a0ae93b0,6c4650f2,941ebe38,fcd4eba2,fc9cc0b2,3fb9c127,81c53f78)\n,S(b59e2f6,2f01449e,d6728b04,e9334f10,54c4c8e2,db4a422f,70566b55,ba4d2e5f,1b6b73a5,7444de3f,4137f2ba,722e70ab,e6a785fe,1ead6fae,9f2ec5db,299f00d3)\n,S(42145fda,e72df9aa,fa3c20ff,cbf11a0a,d357515e,ec6846a6,5cc6ffd8,8fcb1347,4a34e518,c9d39736,3c88ad65,62ecc0ea,2652c6f,48955852,99a0de0b,5f42b6)\n,S(17a085d7,8d8013f9,b98a8509,aad7553f,bda81df3,33aa6f7b,2457a74b,c83f6739,412d9b80,efeca81b,29619ca6,8bdcdebf,7cd253c5,88793675,6a379655,d10df76a)\n,S(f5ec770b,2e0d0afc,7b155abe,bf310270,28bdff39,a08d113f,b0409624,e7049ae0,e9ce5d46,2dc5d255,a09ba37a,a7a5edcc,aad29ce8,6f9c6b58,d2781e81,5d88a25)\n,S(45e3976b,749279e4,486d2db6,fbbc7731,168e7311,d7d75f62,b754839c,2fd17918,84f0c079,c0127eb,d1064724,927459d9,ebc22eb3,502a99a0,e5876e15,29c8845e)\n,S(df15c304,378da361,7f821d07,d00d1bdc,189fae9b,7aabbc71,51c2117d,8fe0c21a,589daf,cad5cc54,58544b9d,a69dc510,9f8f1e82,866b1076,ff1d229,5942deb4)\n,S(c5798ca4,547cea39,75e3b613,911434e4,e5f503bc,9ec6e9a4,8dfe8386,a371494c,2864334d,fb2bff0a,4690f2ce,d1a1d1cd,e3b13f96,325f295a,8e0d4f1b,b13413f6)\n,S(773ba0e2,e1a80ca3,9060556e,2fa8d15f,83dfd018,dd226751,9262651c,9765c915,e59a686a,3fd13284,e380188,fa40e9e8,28991374,20c906b9,ae882512,7dc7dc60)\n,S(6ed4cac2,e1685eec,16c12251,db5dbceb,90f542e3,854177d9,83ee6024,d6e7a740,2558db33,ab598118,1802a84,e6ed32ae,49c25379,606a3150,6ad03ec0,a5308b98)\n,S(21cfc6ee,d98915cc,1bb52da8,e83aae9a,64970d4f,ca3e70d1,6536043e,bfb60fef,8154f487,290cb8ea,73cd147,c1286d5b,9f471665,d9e0ee24,c2be264a,2f1fbc36)\n,S(f8db764e,bb8f031c,88921a73,92f75323,7d1f4a22,7bc8cc64,8bcfa9a1,235cdc11,82c25fea,2d0a1e37,e16dc4e1,b6737ee2,281693b0,b48911db,c79c1470,c4e6274f)\n,S(d52f4eef,14a5a860,983eb0ac,8e02def9,53f2ba03,604cc60c,80882e56,ad6b3dfa,b34b3131,7e37b973,9559bc2,6f85226e,705bf06e,1fcd818f,d5b88eed,f2d6b7ed)\n,S(3e9d0688,b9b67517,e25b526a,4e46be08,4e95a171,f9d99ae3,4cca6c14,66adaf6e,e1938d76,c4349375,1d5b9876,4ada7b7f,57144878,78805540,70b7c27c,9bfa312e)\n,S(c74f8dab,54590ad1,3fff217f,b62f43ed,7f42ffe3,6c8fddac,fb6315f4,a3406094,1bd8025b,57dd382,5b5b6896,e90ab5ba,fd31ef46,8f02846f,29f1b1fb,f90302d9)\n,S(71f88089,a8e0ac,6cd92e03,b1dafb04,76c0f489,f16def9,75985abd,5dcd02ed,839bb263,7827e6ab,f6941b53,67c9aa09,835c588,3956733c,267fb52b,6be767a9)\n,S(983d1cde,7d75d70e,328a8a62,ec82a96d,5174ed4f,c9676e10,7c282be7,bd408b07,5fe2426f,287fd353,173c699a,39407e36,c365c413,76986640,7c12f11c,5dc436a)\n,S(3cf9defa,a067fd0f,6b012fe9,8b05aea2,83c332e8,cbc8296d,c777951,9e62519a,3fbffaec,c77d872,7dad2011,aa314690,2806f763,b73b780e,375508a5,c77a613)\n,S(f415897a,cf653c3c,26fc5231,f375e28f,c23041aa,af05455a,e81419dc,25546e30,3a9d5669,806ef66b,7a0661dc,cb941531,d81fa7f3,e08fec72,ee6312fc,4a7f59e7)\n,S(5bfb64c9,cacbd09,244f3a96,d5a6800c,4a012297,95962fbe,a429b659,8e085eb1,e5c4ecb4,9cc4c685,a4fadc80,77889298,b94e779f,7f462aa2,130ed8b,ccc0604)\n,S(61a5a78,a086ccfe,9f54cb0b,750b7c8c,5c8dc4b0,e32f3c69,c65ce4f8,9009587d,50193c13,affe3a34,1ff3b8a0,b37f07f4,b49667c9,f8940311,9ecec58f,a76d8c60)\n,S(e74514ed,93784bda,ca6e30e4,da2a9a78,c7c70bf9,42cb4ba6,afdc357a,c694ed1d,ee4a8c9f,7d55dd09,c51117d0,754d301a,cc36dcb,49d437dd,ca46a920,7088440b)\n,S(dd9aa58,f2cc4c0a,8d2bf548,6dea653c,b4671e40,c0073df5,352b2a9b,95637617,6478aca1,582a65d2,6c0f42e7,48f06e60,ab85a494,d0129b85,5b5fdc62,7dc7f580)\n,S(fd7f2622,665c2005,9bdb8c46,d140ecda,ce013ada,6dcf3503,e28eae44,c2dcd83e,536c948e,5db2978,31e2ab3f,fee860d5,dd7fdd16,645cf561,67e484,f4a62c61)\n,S(9635dbcb,b2595930,835598a7,149a8a37,be64f607,c227b307,4d8e8184,c2ae99fe,1b2cb226,bd9f23d,bd243ea3,eb57baac,163f4e49,6272d220,9f436f81,7b6d9442)\n,S(642ead1c,c24db5c4,77d798b1,515083a7,7777476b,c3a03993,883a7ab5,e1abf814,185293e9,6e6dcd7c,209fc891,d96f9dfc,4012f756,7d3e2f1c,282eb0fa,5de46eff)\n,S(3c5be7eb,3aeab34a,2d982ebf,3a766962,822ddb39,527ab79b,83540818,a4e2931c,a161ecfd,2b906280,46d6d1de,c149eee0,e6c92ccc,5f936a51,e2a4c3,82e555a9)\n,S(c1a90946,6c0ea8e4,b60611fd,6c61733a,6d90b0f9,d1b7a761,1f9e3e84,6423bde9,f928d301,b6c27eed,79b8a8a,ba388ef5,24b17220,7ebd7396,5623e60f,f650dcf4)\n,S(e49d97c4,2ec1b8f1,43180188,382b265e,4216bdcd,82824a15,3a0e1d73,83207541,8e521e4b,95a1f4b0,934753af,cc3b73b4,7b3eb00a,a9c7af48,7e4e5a02,6234b733)\n,S(49f71f26,f0d828be,9e9a70c1,bf768117,ad2fe6b4,6e9f416d,eaf17695,80dccfc1,86f4404a,67e8e6a6,9a901589,d7c09873,eb553aca,41b0cb66,f4767621,76ff0d79)\n,S(487d806f,67635c8f,b66afe46,3754a5b4,64afa469,2ca69541,5d91a6cc,8903e853,b610d414,26951e55,46bb7216,6dfb62fc,602b3d20,18c38670,760f55a3,6c45c688)\n,S(47af5aaf,cc7b69e4,bc536d57,8f57b958,3fa17666,2d302141,54e3e35b,57357e38,b79a4c34,709d215e,dd3b0fe4,9cde9de5,b45ccdd2,af25bbd3,602a0c90,9834dbee)\n,S(84f79cc1,a257fcad,546d8218,5caae7da,8a8d523e,7feabb79,16ad7d8f,5421575,cc84b844,55ef03ea,59913a0a,1919c0d,cde9fd92,ce872029,57a998d3,80ec1986)\n,S(550b7e54,3d3accfc,eb488b6f,b2b48d0b,9017a5d4,ed54d55a,72b8ac6f,c83f6d14,91f318dc,ea83ec1f,f43d5172,bba5ab1,7891f3e1,2e162b6b,8c512589,5f2e5141)\n,S(f691885b,eece383f,1f56593f,92de0b34,1627cd58,389afaba,f442663,88aa6a32,1e6c920d,2eb76656,63c7586f,7907471f,79e5faa1,b6fbf4a6,c905e422,9a441638)\n,S(4e3c52a,96889e52,b99aa469,b5f07dc6,f6720e49,29f3961,fae2c59a,98ffacf9,ba3a3d9f,dccc36fd,a8642167,7f54de2d,4c079b2c,e70b46cc,926d7d9c,ef1978c4)\n,S(66720c8e,c638367c,c934347b,d8768338,54eaaa01,a81a876b,d2321e41,40381224,eb595ebd,67c5a08b,24482042,5035ecad,f20fcfe8,9a84a60a,93f3c05,a926d574)\n,S(4b01f86f,f9feb661,eb33d7eb,87f940b,74302cb7,449b0bc4,84e97af9,56b79d2c,2680db84,1b233e25,16b74190,fd3a0cdd,b8fce285,ed8577b1,e13c2205,9af0d3a)\n,S(dea430d,6a4b5e18,fa04f77b,55f85d36,df9dcd47,87ad5899,c16d2533,74494867,46b1f5b6,307a1c05,f3b42ff,e7a272c8,c63c2a92,19bd2971,d70ea793,5bd508e8)\n,S(3f987bbe,d7fe896b,8a8067a6,de49de63,670e7260,f255e5c8,a926b9d1,fb62945b,373b2f51,86d7d9eb,18570d3b,9e48756b,663cab9,df388899,7af923c9,bd79971d)\n,S(6cbcf291,56e3cb2a,b0d3c03f,3f4c0283,d953a641,9f7e8655,d8c46566,e3990b70,535c1017,fb40108b,24de2a8,358d217,8e47961,e5f4cca2,aa7e7c2b,339c60b0)\n,S(d253488a,5610a541,e4ce2cac,bf4d4901,5fe63dec,94615e80,d795b39d,9885201c,c58ac205,e7323ca8,9bfd284e,9c9bcf3b,89b05571,b84d3afc,d69a9a96,9ae4fcc6)\n,S(bb77470d,cf0851b2,29494d6b,e69aeabb,dac44010,17200af6,391cc2d2,352bd9e7,187cc653,b6b56e6e,6c9969ea,705a6d9d,3539d4b8,b8777371,b64deff6,45307942)\n,S(438c5a3e,1ede7063,eb928da9,693d7602,809b9e08,e49951f2,6a600eb3,e929ad1d,d2918af0,67d34eeb,d8f179ad,2f3f105e,a5cbfc9e,1f416cec,372a5175,8ae797c5)\n,S(35db0905,e28b3e7b,b8c4425b,8d9151b9,9cce6a6f,b6e11561,65b7e356,9191e69c,25963fe,ba45cdbf,5472c046,3da3279a,60a3f1ca,9ace47d0,4c4648b1,52d2e560)\n,S(6ef2e9b,79e48447,7532ba0,1b658af1,e27b13b1,f1635317,6b47d994,cf3c6bce,88cc8a3a,aa1f2040,7976ae7a,9bfe09f4,f0c1fb85,72f122f8,4aeee871,b87867ca)\n,S(c85fa35,4c064f00,ac39d455,7884f8a6,420c4192,aef2d6af,8afd61ec,2b977b33,3d17f849,6ba4a79a,bcdaf502,87fa5fe6,15d2c24e,58f27ab2,7cfb2d86,140a5f0c)\n,S(7f47028b,4e84f4a4,21909f01,85df2743,e3f18f1e,134f90ae,166c4089,a9d44803,4c025c2a,c2a1af49,fd7e1e3d,2ddab9ed,104a0e21,17895fc,36eaf9c,7a550e9d)\n,S(6ecc57c0,5c7f6b98,6cad9c94,435664e,3b036ae7,325ea091,234ac216,3dd0e324,67086288,9346eaf7,e6bc8ac5,25d60d5c,41bd9701,f5cc5f58,7995fd6,1c75def6)\n,S(46a2a28f,61fbbf15,c3afacaa,e181f527,2b957bb4,7f127465,fc03d021,76359328,88b36e79,2c071ec4,adf1a34f,a3d1114f,f9813f91,39b2db5,83320bef,134ace83)\n,S(a2072cb2,e25bc045,fe40dead,8fd3f7d6,449f8d7b,57adeb47,b6ae9b7f,7d6a5b2a,fc019c0d,8c9263f3,aed518e4,44c1e5bd,dcf796fc,7d16cc6e,c90c4c59,7877e36a)\n,S(fec203e9,60d4ead8,e3510545,3e73999,1ce5234d,a92a20f1,813414a3,599874c5,118cddc6,fe918be8,d2c5483e,c985aaa8,4d708767,4af70444,1fc0692c,b92a540e)\n,S(fd166bf7,a69d80da,6e03c740,2ce6f4,a05f1df4,e2a131a,daef89a5,86f73681,1e3f6791,7f2d3824,ba4ef07,86ed8f08,c65860a7,e6913fd6,8cdd759a,2deabf29)\n,S(a479787d,b514baf5,b46a578,6a221d72,2eda896a,a7fc1e43,4817f125,2bbe0d6e,1a6f7857,92bc5fc4,e2fcd87c,6b82ed34,20426f30,a9c6fde,4f09ae14,9ce426a1)\n,S(7aeeb17d,f75e9c7,2dab575d,2ad1cf87,b3eedf99,8df4b14d,d42b50e3,7895f041,8060c0fd,5f903934,d47f3886,8731ddfd,a6fc1355,53be9a44,38418174,37b79fbf)\n,S(6dd254bb,63c3fcc9,a5d1758e,90c0c6d2,bb1a19ae,788b351d,191d0261,cba75c76,b00b5cff,f3246b0f,ec835345,1d9df948,4fd903d2,e278ac2e,59d8ca20,647c2ba0)\n,S(d9e76bea,acd64f55,9a9c2888,5834317f,c24fe5f6,7e540d27,6233c187,76cd7323,4d079fbd,15ab81b4,f3aed0d,663178c4,33f976d4,f69af7dd,ecf61a13,b831e71c)\n,S(b57b26a0,55c4f224,865b22,287c9402,4c801618,c50b00df,33ef8509,a94a0f57,5abc4303,1701260a,f41a0e49,a100da19,8d033179,8b26026d,6401654d,39d53670)\n,S(e03c71c7,9d902be8,5caf4df6,aa401a6d,18592725,2f10be1,f4190b67,bee3bb8f,e5f16a54,ce5772cb,1390e49f,966a00e6,893ceadd,5a753c7f,9d82a2ec,7324240)\n,S(b7f3b64c,980f19f4,e4f46083,c1ca758,70f4313b,3c23c5b8,6acd6c8d,57ec0de4,5fd0d8f9,2a70c9aa,bcc1523f,91fa603b,e17fa73,fce73899,2c1d720d,3d55b1ca)\n,S(27b24868,2a1b9186,3a1f5c9b,a5010a37,2349c417,e1d7acaf,dd94c7db,c5e12733,c54c23bc,4e17418b,deface22,b8e527e1,4de1aee9,71c921fa,fb3f58eb,e4778125)\n,S(5d4b2b1b,5f9e640,bad96aec,6d3bc5b6,169411e9,5dac7346,d1f7f885,50679a14,80f0e3e7,7e8d6c48,62b1f6c9,c0ee37a3,3b98be7d,e1c6c8ef,12759b73,c20a2e3)\n,S(790a4189,63c3ec0,ba6babae,18ddb717,463d3ec7,c0b01852,5e760e96,ac5fc2c1,6db8b456,9f2fed97,783a6e80,413d8ff,cd0ac6e,d512f712,4cdacad4,4845242f)\n,S(38dd209d,705c3f63,9cbdb0b4,22160943,4ddf1366,56f2cc8b,22d27479,c5446f99,8b793f60,3621f6b0,1b1ac36b,cfd92c3a,7dffb7fb,fcbf831b,1db077ff,7482c25a)\n,S(29c6b2a9,24f95c8,58857951,cea2baa0,bee9866d,77b3f7d6,3cf9debb,16437528,c408f565,cc78e5,15a6e0c1,7a96392d,2952e25b,d067a0f2,d2f10eff,b54c2ce3)\n,S(19f1ab5,b54c80a5,a32a1fb8,1bb3f389,ebb53641,6c8a844d,3846c2cd,350420c0,38a56a7d,7eaf4155,4f5b8090,c06fcbba,9f516a23,340617e4,dc5951d3,35b75de0)\n,S(fa3d2b8e,d73ab5c3,24980054,27830806,3715c17c,7981db6a,61757048,1e1d780a,7bc0b4e2,4cde1ca3,e30ec601,73121a43,f87f679d,cfac6db5,a9bd132b,d6a89454)\n,S(908e538d,730377d9,d3585ae,59b0949,c46a6aca,bb04e725,70b189d5,57c26825,5e108800,6cddf00,39f7d855,64252cfa,d4a37761,2b58b6b,5fb2942,7e274af6)\n,S(e57bfd8,f38d456f,2e977090,d9f81673,db11a195,568a85b8,dd8bb725,a30d22ec,b5965e5e,e680e791,e87ceab7,156a3e03,dda7e9a0,9a9dcd76,a72dc838,d9e2e6a1)\n,S(aabc514c,b88112c4,6e6e1221,d61e2abf,dd7a3bcb,a2c7cb78,4d57dea6,1950534b,96e3d9b3,f3a4c3cb,1473f61c,e224dcbc,a535c90a,7d993409,ed079d32,3c8facc1)\n,S(94a800a4,6eb9506a,8f6dd737,ba45c697,4e563c3e,1df40959,4198d1fc,e499d2d8,627ef26,d39e19d,ab4d6bfd,9d4fcc0f,4bb4d97e,b0886426,40b7ca31,952be814)\n,S(1022de3d,6caa7542,ddeb47d2,1f82cc3b,6e04170,ed9d4ef6,81b58b81,efd6c3a9,2317f1e8,37716a0d,842884b,cd77cc3e,d6235dae,9fad5661,9f20a883,af459b5e)\n,S(9509f343,17c15f7,a54cafc7,3d4275bb,41e39183,53858724,4031baaf,97bed951,dec71a0c,7f8108b2,5e296361,2d6623b6,7b2f6d9c,69d7b6cf,d7273503,fc72b4ba)\n,S(bbf19e9a,efbee2db,fbd5eef8,492f52be,2e2f9072,6b3adc1,d16f0627,f4f19d25,d9e691de,f2ce976,c66d806b,f35a2b13,56f9fc07,7b7bb239,30668081,4b52cea0)\n,S(b5997bb4,5b359516,b28ee935,e4d59c39,ae434c29,5e5d98e2,2ddeff57,4afabc5,fb6d36a6,fb2e1aaf,d9b5d89c,39a854f4,a3cec053,1e1a776c,b4267b4a,d2bd8ac7)\n,S(fb746cf0,cbf2f56f,6a3a99dc,71e84cc5,af76899a,3a7d02c,fb272391,b77c8384,d1e4cf27,57373ab2,d1ba3f2d,d5bf8b26,a74d6814,23a5b16c,9621b788,a51e9796)\n,S(644facf9,e6290462,1a5278c3,f4a2ff8,84600c23,69eeb557,bc412540,c4966655,5b5ee0cb,449423fb,67c9b542,3868f7b7,6d1968b,9d7dd751,75e7dd5,2f994b88)\n,S(c41931cc,9c311617,f77faa3f,6b6f6e21,bd030c2d,9778b065,6ca105f,cdb8658c,8a759dda,8db8a8ed,eb1f2972,12858879,bb2f49c7,468d8edd,14d28525,ca3c0746)\n,S(e8dd9063,48691527,e4f4fc96,2a0e5608,d151aa68,53257e2b,1acb7d94,56f66aa2,470d108a,4180fbd1,2a377517,c5e472d4,680ec468,52bfa472,cc400ac6,91541a0)\n,S(6b48efeb,ea6d0d17,346fba31,8fa33deb,301062d5,94b254bb,db6dd28b,ffe27451,94cbae78,eff2064c,cf91bcc4,fe1ae3ef,3d767b63,6eb4720e,35f2340e,87c1e941)\n,S(1cb08c2b,72f069c0,e1e4afb,7ea73e48,a33f23cc,cb89fb08,db1b0919,62bedbd4,64d3500d,5b6577e6,6c18d3be,fc0a7dd0,833d3245,1ad03257,b45a31a4,67c14095)\n,S(2150558d,bc64dcb6,55224045,6d943208,7b7c7182,3901f78d,9702a736,998906fc,b49e2adb,321e0c49,ddeaa152,9bf83095,762ea96f,6c1290dd,b6ad29b3,c84b8657)\n,S(530f4c16,58284100,55a67001,eebf528c,f9286825,fbb60ae5,da4ecac,e3d7f4c1,80b147ab,1eae8922,50bf82fe,1a9263bb,41573617,7dc02e91,fe7e07b9,66bc6af9)\n,S(c5158947,8266dd62,fa495d4f,94bbe77,b1230f44,685ac488,7642576c,8d92e6b8,1705fd37,da813af6,2a799e41,3a45a4e2,4d2121e0,1065e692,ec1de149,43be7c90)\n,S(e6963d21,b576da6e,6aa6f1ec,da7674d0,d827d533,31e19d85,83ba0e7,31553f86,d3560d2f,91c7219c,76962a5e,3b2aea76,604b5ad4,82da8f8c,419cf2c8,7cfdbe61)\n,S(c5aa5963,a249a9a5,9445c0da,9537d482,dcb6ed9c,8372e455,4d440931,3c3f169,7e7f9c15,4ba213f5,981389d6,22af8694,b1efbdc8,18998923,92c9d654,92ae7fa6)\n,S(bd04e3d8,5bffa429,81310c7b,2c885f04,69f01977,2819f6f2,5e69621e,5a32752,dc4da51f,b88ed097,b17358d3,da4fb755,254d8ceb,5b0df72c,9dc995b3,8e145d9d)\n,S(f8f55476,4418c668,3390b604,c9f9f452,1ef63756,58000c49,d3b8b1da,80261dd4,9943a6e4,1b928da0,fad12667,cc997ea5,6af49db3,8c499a2f,a2343efb,52ea450f)\n,S(77dc24bc,5f32159e,7c3b6a3d,168a6698,43b12253,e403299f,b4fa3db8,74350dec,240d860e,c38457ab,6d741edc,e4fd8c51,67f75733,f12fe892,aece4f9a,578c6bd5)\n,S(9f238f7d,588d53f1,52da8118,2691194d,99a56fee,373745c9,aa2a3a7e,58d18825,dff57ffa,c2012315,ad6516d6,92902476,cdb2d3f1,58803c3b,4dc854ed,8ba9b756)\n,S(92f95782,a59da5c3,a12401da,34c24ae3,fbf3822e,355ec948,6020ac04,3ebbbb6e,1c6231c4,e09c414c,e0d3cbf,9be73bbe,4f1fdd,b3d65a41,c716f0f9,a39788db)\n,S(1b40dd47,f435579,1474b560,66a0efb9,88271a1c,19186bcb,b1715196,84f3130d,9fe6dcec,991d652,c9e13099,66b0aeb3,53869f99,28ebc955,6c64973a,4d983b5a)\n,S(473f6b8e,d4162f9a,2f40d48a,8827f79d,180052e1,7b28b240,4772fe1d,64cd82d3,743450df,fc8315db,72c01f1b,21c4eea,9c0a39e4,c1e92e33,91096576,37e97fe2)\n,S(40cfc629,a550b437,9e0941ae,fa8abc6c,8b492155,2045a8b7,560262a4,86954932,e627bc57,9c84859b,d2a9ba9c,9d7a69d3,8c8f06d7,ccd9e68e,fbaa0697,655a8a23)\n,S(4c91dbc9,8d2d2891,a7861599,ab55fce,943755f,5f7c909b,3f0f85a2,bbb75c95,5e541495,ecf13109,6ac3aeda,5324fe5f,6f761ddd,d2972fe,812242ce,12fd23d5)\n,S(1fe3c538,ac185172,44461f82,63961364,c3c74bc6,9a91bb4e,69973971,8e729d23,974c02cb,d7d97c,65f89b90,327e6dde,e627d96a,275c869f,22c14bf9,6be05389)\n,S(fbe873db,56579349,4ca9c844,8a6e0dde,226d4e4a,2f210661,30fe1075,bb11dd6e,c91061e4,d03f9f09,21f56d76,eb78640d,4df80464,459fc41d,4ca33d4b,5ebbc5fe)\n,S(b58277a8,3a6d6779,82af314f,7a41a69a,b1744e6b,1cfb4803,f52a25e9,8200957d,c8faf7cd,59e43256,33403b90,7abb1b83,d3f0cade,ddb9884d,77c5fa54,b55fc51a)\n,S(3949cb,e84b7790,a7a110d7,9c41d548,d379604f,ec567cea,e3aaf0f6,fd0d9b49,cdfe904e,56a9c88a,76292c3a,5da21100,57795a76,fddc1610,e7efab84,750617b3)\n,S(6ee9ab2b,537aeea0,bd8332dc,d810cb7d,36f8f7f3,57be2bb3,5d84e236,f1bca531,d75518a4,d975b0d1,e2780851,4b726626,dfc182a3,885900f0,4d82c839,1c64722b)\n,S(c2875d78,3e15f959,33bbbd48,8a24c65d,2001f599,3536fa83,8a3e056c,20a2eabe,e5870c25,20adee27,83cbeaaa,cfae7283,538446b,7cfd7ded,12e68ffd,3f66de8b)\n,S(88e26c2f,dd475547,8795e8dd,8285f73a,dd9eb9b2,68c1b16,65f1a701,cb3c81e9,d00344e1,9d14b3f,1dcf5c7e,8269237d,a2af90ea,93a9e24f,3a0040ee,d3f171f1)\n,S(ca8e8c50,660f3928,3cb72105,43710f56,9a1518a,7948689d,3d7e2ce7,a038bc55,57600213,1892bc9b,5afede4f,e71f5ec1,a1516039,ace088f,9a851278,c52b2487)\n,S(ecb6e53f,4330d0ec,b9aa3605,b6e6d209,222d611,72858b1f,d2663797,772e0249,b054af9,4c535d01,bcbd955,61770aa2,e08678ea,cd8de0db,d8efcdf8,623e9eb7)\n,S(a011ad64,55123316,9916b20d,ca6efe7d,e78c6b58,feee97fa,7f9e3fc6,8d889cfe,f53b71eb,63f87651,aa0de66e,a51f56f7,c5e3ee26,ed4ccdf4,1978d7b6,f0191277)\n,S(3ddda2f4,ec1b4020,31a73abf,ae69dd42,8d801bb3,fc96fd1e,b06334d3,cd7dc27f,eb1b6b4,137ca36f,5b160112,38fba958,32c5e5b0,aa5560dc,39600db0,624b6c1a)\n,S(13f5b643,e908dc91,415ff856,76357687,bb777f21,3972cebe,e8157828,53982d8e,bc2d3402,f3af6ee7,bef0ec2b,73c75e53,b70309ec,633d97af,b9ababc0,62d20ec2)\n,S(ed9fc1ba,60a7db8,93db8148,48790e52,4a246279,d938a04b,cf168ae5,71618e2e,b241c920,ab995cf9,4ab1b707,b06bbc7e,1cf7b8eb,80325934,d57e9e9c,6ba08459)\n,S(89d4f6fa,f6252ba0,d036dcb4,54fa5f1d,311ee828,1cc5ca85,73fe7607,7b16fadc,5f441ff0,56fd4e24,ca4c9efb,859d6e16,2e4daa4b,a7f3fc58,e42a540c,23b6075f)\n,S(4acfd390,e8a1b430,9af0c28c,87f51308,a1ec5741,8c194072,45c96c79,30498a3b,dde7b57e,5e5ab271,78f2ae5b,6494a578,2757f508,bafbbe64,30b96bc4,96728d2f)\n,S(8320cbe,fa7483dc,4f5e7b7d,d74cf492,b95b7e31,b1bdc651,6595b605,eecc134d,e766291d,13959f5,805de8f2,aa59cd66,8376d93e,4b775010,426db24e,b2ff41f7)\n,S(fbfa6a21,deb1d183,cfeda065,687a0b96,6d8e50fe,475a17a,7b690019,6e7c696c,f5901c10,5f30f5d9,75530b0,3f943caf,8de85a12,f54e4c7e,5685184e,8bacae2f)\n,S(70695a81,45fad213,aa14a7ec,d3c84f51,53e3906d,5483db4a,c6e8c229,ecd2c3b,febf34ba,9744a37d,6b91335f,c735c426,1208595b,3b8d048a,3fb48e76,2008e90)\n,S(89fd8cfa,8fd5bdda,b6a80bb9,96ebcc92,6074a15d,371622b6,1cd772f6,ae1ae9a9,85c2cddd,a8065ee2,244b3d35,61e9e057,87c6cc4e,d4b1ff59,53b736cd,d3876108)\n,S(342256b4,cfd8e5b7,5f5d088e,3a919d64,ccf38827,b18bdd00,2ee9a6c3,fb4dad,c54f4704,f3512e55,4d96ef92,3005e4aa,34a157e5,8bd6b180,e219dd51,16c4be16)\n,S(cbd38ba1,189a152e,bf78ea23,3eccebc7,16f4c28f,273f5c8b,ec9df397,9dba0dd1,d3df2ea,fa52ad52,9089c7c9,581dccbd,a2a0e060,7fd4b902,cc915f28,717c2d29)\n,S(5f7ae38f,61dcf176,45affec8,7514c624,85b880ad,38df28ae,b695cac0,fd1d27ed,9b955855,f74cc040,63cfa4d1,fd098e5d,e0030c4c,6dedee41,71bb5e7b,c0939226)\n,S(72e72eac,aef492f2,f3c5ce7d,dca58f40,c919a194,3662adb4,3d855a8b,532d194c,d7b5e558,a0cb091d,3b39407e,1dd58b95,30fe7561,6b4c3352,bfa51320,509d2d7f)\n,S(925a19f0,c73d85d5,674a62b0,2d5496c0,5868fd41,a43696ce,eb153a0a,2e5b8051,2ff229b9,6c23cdd8,2bdc56da,37495c29,78fae40c,b429a1c7,3111d392,3c5505c3)\n,S(baca4fb3,33bf98dc,165cb9e4,3bec920e,bbded256,e990820c,8f902e84,3f6e02bf,af304697,137728d4,e96a38d7,95b830c0,6c18579a,9b46f4da,a94a13e8,d3a0341)\n,S(fbe24c7a,53b90f3f,918b92ea,e58ef633,bb72e695,2eee6c6c,2210f6d8,8da9e0df,1febd844,af3d057e,c9ace544,d5fd57f0,c125c55f,1d9df636,4f6be8fc,bc53e3b5)\n,S(73b7de54,ae8a38c6,ccde88c9,3f526c2e,54d823de,a6415488,5e864a2a,1b0574,2cfa6943,634201d8,9438e6c6,fbb7224b,c2e6b313,538523f3,305c75c3,5c68aeb0)\n,S(84960402,31a60cd4,cd623d4b,80bc69aa,7cfa7c0b,52cd88b4,2f22ca66,17151dfa,b5324b5c,af293ece,38deafd0,76835e10,469997af,7dcccd89,172ad20e,f36162a6)\n,S(b6de647b,98585f7c,61f0712,76c6f62a,40926888,b1bab4fe,ad64098b,4b9434dc,f7180d81,be634f34,d878a645,2c662e8a,db9c18e0,ca7e7c13,8bc51e1c,1a5f5c0a)\n,S(e062011f,da416281,bc296718,300a080e,fe7ab89d,8469e8dc,fd50680e,12dd9348,c33030e4,1ec1b1c5,4ad01bb9,8c4e2c48,32b2516b,1b2b3b22,adc4add8,1b690787)\n,S(f7c7545,649b4659,49618dea,7fd15a06,1e7ee032,5d955649,b76b66f0,534a5501,2a929b2,a68342c1,81b2f55d,6b543584,ac06077,d95ad8f3,fd3f3ffc,24f56a3f)\n,S(bd90ad48,1694f297,6506e2bd,e97d5803,b810f9ab,7479ae90,dc1fb146,38d4d5a0,f973b70d,8dca64e0,c9384b7,ad3b4ab6,4d3c74aa,722f9284,a9da82d5,5c6d02e2)\n,S(cb5d91e6,68b3c202,b72a38c2,f98e6e4f,14bb566c,f7996d9c,c08aaa07,210b1b1a,68e9920c,597b633f,9bfdfb8,72814422,4ad69ec1,e435e843,73a9255d,79f52d7e)\n,S(d251bb9,83bf849b,8f058ff6,32ac6bea,bcd12649,4fea947a,f943cdf0,6e0c240b,5098026d,b8ec5c54,8e3ae103,f0d172bf,e84281aa,b8c0b131,16295587,ed4500f6)\n,S(27235299,c1f8d73c,268bca88,62d2b6d6,635f151a,d148c662,6c0cd5cc,1a3d2234,5b03cc60,f9224aa3,10d8193c,74e70cbb,6513ba73,d6d98ad3,2e1c2d,7f78ad52)\n,S(1cf437b,aef8e007,ba02a24e,735d8444,698e5edf,2f9d41d3,cdb28cf3,3dd53851,e3fcdb74,b580b8ce,8f6edfe1,c276c478,da11323b,4e96862b,926ca4c7,f739a8f3)\n,S(aa872c85,70e9449d,6cf020c6,77669c8a,7ad408e4,d9fa194,99867c6a,f77df918,572579ea,3d1d9575,e60a79a0,7a2aed83,4fdfba52,61b962ed,42e59322,c02fd873)\n,S(b3224a2e,80c3a174,66a9994b,717b4c37,424f12bf,9dd3f17f,6eecd801,3ee2ed56,7ad1cea1,128c1605,552b8be2,a5fb6bb8,907e4290,d76bc82b,e17ecc32,1be6fa43)\n,S(29b8f73a,7fdf6032,4c907022,b0107c72,ed951eef,29687feb,a8de56ab,4e47b8ad,19b849d9,bbdcf00,a6bba6b2,f1058695,4f286884,9b5be608,d6b4c357,1098f54c)\n,S(3c2f5680,96f946ce,3d048364,dce939b4,a05ae9a7,c31c2a11,d2a29a1a,3fed06e2,47701685,b698de43,ac515062,9c40a15a,bb952a0e,bdd96,ba4a1b4c,5f61658b)\n,S(b80f00c1,ec0d059,c9f5c69c,10cfcb26,651716d9,3d0b5702,b2c7b295,85af4c55,aac197db,ab42141d,31f63425,5df908fd,fd026d10,1263aa7,63d99414,adfdd02e)\n,S(66af071,6b78b854,16572c86,fb3e51e9,b6d66ebb,bfc2a2f8,dd664010,83c83435,b8b2ce8e,fe794b13,4fcaad05,821dd884,9a8318db,614d858,8dfd4d2d,65314398)\n,S(7ce8342a,6ea85f61,559cd2ab,e82debe,82eb5aca,142153e5,320562a7,6ba155c0,8a930243,5ebf4269,d75363c6,93ad4255,59f493e0,e492150a,9f110c90,8d7750a)\n,S(cfbc37c5,184fe206,7f7b5c6f,c5e50adc,ed58ae61,d9059bb,4ff64a19,f48483eb,bd567b19,3da2b2fd,bb8941a5,be9fc72f,11d9cfa2,4c4438c6,a4db3091,9c8867cb)\n,S(728c27be,52c5a742,859774d3,2d33fbcd,41e997d7,25d6be46,af480c8c,f9ec436c,745c7738,2a833cee,19808d12,9768c213,7500e8b0,b140e3b2,94abe97c,9a7c73e7)\n,S(4553277,fbb30c09,a1ac1ac6,cb7d38f5,88cd5f3e,d4ebf6bf,5b5f6e78,12d47d5c,3ea80bc9,dac9f1a5,ac4beedb,d254cc15,728f0ee1,6949ce97,53f1bfbf,98e3c78a)\n,S(7b752d90,9fd6d063,f1ac0f22,d8cf1e6c,78a335c6,ed11743,88192fe3,cba54cef,a252376f,e482ec59,2ac440e7,3aac3b46,a149e35,1aac2d51,244ffd93,f51d11ec)\n,S(e78e796c,eaba974d,89d344f2,b610e84b,d51443bd,1fea5422,d2bea957,5467a376,13f0797,376bcf76,b6ade4c6,a95b6446,962ff925,b32fef9f,4549aa1d,e64e2b1a)\n,S(1b7a8c02,83f25ac4,cd4a841f,4045035f,92a39bd2,c1903c90,4071eb44,5e8d702a,1843f757,7d03b6b2,22bdc28f,47c7fe6,fb83b25a,8d795b46,9e3ee9d1,ccf7623d)\n,S(90d06a90,6ad81dae,20cfc2fc,6be85b2d,41dd9f23,63e13423,c557c4c4,bf3e5e4f,6ba7a127,58861784,2d7ee3d5,9b71ec99,86a72ae7,71312739,79544095,1e5237dd)\n,S(d7bb4e18,ab61d8f1,de4b5bd9,9a5d03ef,1e0185ca,55ef14fb,be1f0b5,4cc4803f,311f268f,a672975b,acabcab5,1dec5754,48eb5a82,685e339e,e23b41fa,112873e6)\n,S(6d5f1808,f17e0b81,a6bf12aa,34032644,b708882,96e99861,fe5ba4c5,5546c44f,8eb304c8,92cee7e0,70649d73,ae76893a,610504d3,fdf37af0,92d5dc7a,9eab1094)\n,S(e4f62cf,9835a4e5,c2b7a456,596498df,2973192a,af2c80ef,c036c71,69df470b,874a48df,1a25a003,ada8939b,f727e0ec,b7d2e4d7,1efbec4,7193a2b0,50ecaf28)\n,S(7fb31d8d,b3d5b77d,4aa9d0d2,692013ce,c82ccd6,83a2235d,848037b,dc6bf8ee,ed5cfa61,9fb4e350,dc37e2a5,2bb67104,90dcb484,b19af368,8101e59c,f9f0f0a)\n,S(8887db9c,e3eddeef,ece414a4,f46ff048,3c4fd25b,14354869,6c60871c,5eaa9ffc,50294d61,1040a466,f826e654,3fb93f94,b4d60b11,d589287d,6ea33df5,a8dcf366)\n,S(9d9d224a,595c843d,1f70297c,13b3645f,385eec97,80fa9e50,d27115f7,b677aae7,af9d5f61,24594cd9,a3aa7100,ae6f169d,dfd467c4,1affefe9,c9a0a5e6,6d7f2802)\n,S(743d9b40,527b23b8,f165b6fb,9d5c14ef,450e1ce6,94439354,ab501eaa,2f34137c,6aad08c3,bf602b52,7d43e3a6,e7efcfd7,f24222fb,f8213f25,e8195501,9c8f0885)\n,S(63c850eb,f0cd6fc3,3bb7a4f5,6d43c389,1f93b11b,5f67e3d2,f9b7537e,e5a951e3,29d214e8,bde33612,a5a160e0,f7cf3acc,3b83686c,ec5d7c36,dd90ebb1,d97c7ab5)\n,S(b95608d9,84c13243,63809f82,b42cd16,fcf3c6be,5b19ccd2,249016eb,d93b4a54,41aabb2f,e7083dfb,ea380fff,2467a843,c88ef6b4,9740e73b,33a088a7,649fb0ef)\n,S(8361b632,5eeafafa,f01e3624,6bd8f0c7,aab461ef,cb3484e6,c1ee871a,7ef95114,34ac956e,791cef3a,baed24de,7f0f59e0,bf34dc75,edd10159,b3870248,255eef36)\n,S(807109d4,931731c0,a94127af,cc98e487,1fb44467,6d8cde89,88dfc252,868bc853,363e3944,be00a734,4c50afc9,cbb43183,f56eb20a,c0a5d9ec,74857484,ed9e1d61)\n,S(25ef876e,d1654570,244ec258,e7ebda09,35b11784,bf5afb7c,8652e5f8,bdb34055,63459bb2,b8affcb4,1f6ad9b,9437f3cc,6d8082ac,d400928a,29f11fdf,503c8553)\n,S(1aa87b1b,54eb6bd3,5fefb162,b27ad9dc,eee4b5ec,c1b69d4f,1fc6e230,d1848435,e5cd86ac,23c3790,369d7fcb,2189098b,a4fb3007,f82e5090,22e8ce5a,b44258d)\n,S(cce2b0fd,9497190d,e6ea068c,98bba7de,a8f50aa,12930b4d,9060808c,b1ce6152,b6aea7ee,becee274,2bd8146,d792a6e9,ae75fd79,bb8882c8,11135d0f,8d5e68c3)\n,S(fe421506,955b7cf6,f6a84228,30f7c6fa,95e4576c,da711415,5a49c238,e0bdcd4b,4e4a31d5,9b70b51,f73a4d02,eb09e4cb,7dc74a29,bef959ed,86558fc7,d4c8f401)\n,S(cb26c118,264778ef,512f8acc,385e5ac3,10b489dc,88991e15,13665b7d,587d713e,7375bbd0,9fb3051f,a907fee6,80683f93,54403c76,85ca7eb,97a711eb,69033c6)\n,S(8f286ae6,171d88d7,d82cdc28,93960bcf,53768c8,9cf1f149,fba0acc6,f5056014,6852d427,a888c5a2,4e748f2e,e482d38a,42879db2,2e824d1c,d72cf15b,8e32b085)\n,S(b7af4b6d,7eb4eb03,e827f099,fb8b02f4,bdca366d,811d031b,ae827941,235e75a0,7cea697a,e8cc53ff,8c738ec2,55a64e4,4a499643,4bc5e16,422ebb9c,17d3dd12)\n,S(c8471c9f,53eaa3fc,850ae514,dfa1109d,e89c500b,e965682c,6a4bc2f9,105be1e0,7d5f32ce,d1e758ff,e38325b4,778e68b6,f0ae5509,fcf9195,c1a79d41,57dc519)\n,S(8d192ced,73629184,ff6db80e,b2c6df4c,a8ad77f6,dfc98c52,9406e7aa,dd506536,3b01ec04,ff45b037,c1444255,9cb2f629,7b4f8cff,e4c3eed6,3b95d4a8,88fb2137)\n,S(318aa156,f4912dd9,7b90ae6d,c29b0f8a,99f616a2,5b023f08,ad35a8c5,10ec5015,b398cdd9,5ad52ba1,d7038cdc,67e36c74,5625fb94,f62b1b9f,aa2eb5dd,be6ce52f)\n,S(b7fcf98a,6a385f68,a1c6f9ee,c6f069c1,81b0c94,df8c05ef,b59b49e3,aad66f54,912e2098,e3b6e44f,46eb6382,83f554e1,80af035b,16c0eb3a,4e000cb8,d4ea2da7)\n,S(599b7a5b,e7a7cc6,3e0b66,38171c0d,41d78efb,92a9bc8a,1d0e8f48,b2b92fc2,afb3343a,1983a867,c8e196c5,92f745c,9060330c,1f0c0509,375e30de,3a214b7c)\n,S(c3578705,3221f18f,69dbc241,f927ec48,3280ade6,44c70129,2b30a11,a296db9c,2b75b2e9,fdef6060,29633ae,481ba7dc,8ca52847,d4d0a201,9da74056,40a980bd)\n,S(9e2020e7,cc4153b0,adc2b1ef,3cf607ac,305a480e,3a8854d1,1907fca0,4811fa7,19153a83,2c9a0612,dfea182f,a855a039,33035757,2e98e5ef,43f26699,3b8bc6b5)\n,S(1e0c4c68,6e5242c0,6645f4ac,6ccb18c0,82c5d5e6,c89322b4,3b6079b6,ccb5a5f3,63c4a4d7,3ab71f2f,c49f5532,b543e381,83ce223a,c8609be9,d6b72981,8b5dedfc)\n,S(44b11683,5f922e88,e7ed4328,cfb212f6,aabb6199,64fbdf3a,87dc7f24,faa761e0,a9181b5c,341cd78f,2e1446a9,e99acfee,7aa5b91d,4c7da20a,b7cf200c,f470ffbd)\n,S(940baf24,717ccfda,e539064d,f6e4b670,2ad8b60a,c32e38cb,fa4eadf2,6a7bd3e2,bf5ab95d,2cd9b68f,cdf535bb,84b967a3,f4fc44d5,5e6d21af,d09e1de,f5f13ad5)\n,S(4191f800,85767106,a9e5fa6,8521366e,a3adbd79,ea315b93,9e63f797,2995e7c5,662791d3,407f50b3,7a68e15f,5ee71991,2e893099,a907db3e,f818938f,9c3bb2cb)\n,S(1bb8ec05,76ce9cad,f96b418d,cb5c7d46,9b49ca81,7f253b15,8b26cca1,cb9a472d,762e9c6b,2335769,72396f,36a56efc,f2618754,f1c30923,30b521bc,4e0198b7)\n,S(c5216da7,91635b83,e55ec5a2,d9f3f8be,b1a2b0e3,cb097528,654c50a3,315be78,2536358,e58ffcbe,789d34e3,25d9f59a,2210c247,a80eac8,c716214b,9d5e520e)\n,S(7b1488fc,83a02d7f,d12b9eea,555922d3,f4a9c42b,52f030d9,bdd39156,f0890225,ae7dba7a,d95420f2,8c8185cf,5aa2b777,b9fc5c14,b6c47048,d8ef071a,77dd4397)\n,S(e245e4f9,7d6c69d1,5e244f4a,668afd07,d57fea2c,f8401b2d,8cfb6ada,f01f8891,88a0648a,ed5eab1,d57226e4,63411b9d,3632537d,699f39dc,7d7cbe5,49e76900)\n,S(ed78f3d5,1f4fb987,5918a0cd,d6e5280d,6516f5a5,acdee916,d3e7c7a1,d757d188,ebc569ce,9b3cd325,528cde0f,9a2ef54c,d9f920a2,1ba7785f,62ef40dd,9463a81d)\n,S(3e8d870f,bf768b41,8264ad34,89026fe7,8870e201,3f98696c,81dc3b7b,c0b1b599,28558e59,a6a6c255,a352cc9a,c20508eb,55af7449,8d75ded,c94fe414,fadeb218)\n,S(96125a01,8f901790,fe25b41c,f2f7fc98,50cd30c8,cbd05ffa,cb76bc45,94d5f5a8,125db476,3fc8ccde,492e7eb4,45873147,8f8ddc5b,6c2b588a,b72d9b1b,fcd4c43f)\n,S(779d9847,6fd72d41,937fe1e3,e12d4076,5cc61f41,19b37437,3919782,18a3dfa0,75a3aa4b,95523e05,42f38dab,b2d80895,cf3738fe,5152c8d0,96a587d5,90442891)\n,S(681e390c,323224a0,7ccd9520,23c9d89f,4069100d,3b275c5a,e773efe6,170f4e4a,a9bff0ee,334bcf6e,a3bc44e7,5d85acc,f753a471,ac008e0d,47b19ac2,476b184a)\n,S(d7b8530f,3fa18d18,ed94b938,2906e431,44ad5994,5eef1d53,e3290887,5c4af2b9,2efa5bd1,acc4ce6,73b8c76a,beab2e87,6399f84,94a1450,bd6833dd,debddb92)\n,S(1277ad75,6e965ecb,c8c04ea6,c22042a3,ca3e71e0,74334012,7063d3b2,da257a5f,38c90310,ee2bd94e,5f3149f1,f38d065f,8df110f,92f126f1,3a69013c,515134ed)\n,S(4e66e596,94c521a1,8114b232,427dfb97,8c7f14ec,7b5e18e8,9c11cb5e,6a2f6f65,47d553c1,8a858b59,f1aa8f4a,51803450,c237fd2e,60b137f6,d13647e7,6683caea)\n,S(1fc1e8bf,3eae2dfc,b141be5e,ea612378,209ab1bd,7ccce45c,d51fcfb2,8f192aa3,5632d350,ab6b3da1,599779c9,9cd8d7b5,e317ca9d,ef3245a8,eb62af95,ef769c20)\n,S(7eca2d92,8d2bf4fc,ed1a8336,eb87c5f7,b864b842,b3057c8f,97d5dfd3,76771d7f,969da039,7a37997c,c243d448,90d8110e,fa580359,bfb35342,bf69dec7,4bb17337)\n,S(2531025f,8fddd665,cf34baec,52733303,28e47e4d,827248ad,9a1e6c4e,be3db9a7,e404fbcd,d180b2ad,931b4f61,5902eb06,cf00f66,6f1323f7,bf0652fa,94dff64d)\n,S(dd28941c,bf6e4bd,76b4bad7,88f700a6,8c4937a,67958c3,bf6388a9,d5e26441,cc45f07b,9ea1a81c,8d89af84,8883ad1d,53ee8a52,2416c445,c4963791,7a366909)\n,S(d3af9e12,53ffb85,ec7829a,4d41d704,1ea62952,4d7452a8,d9ab6ef0,1d6b509b,9c115e78,91b383ec,20739d37,6450a2e6,6f332e5e,c7a3a97b,2eca8c0,ae819bbf)\n,S(2c59063f,13ac98a5,ed196aec,4f2aba11,c8647d78,42be85f4,ab87a007,2b49001,e9738418,cbb6e31c,f588a3b8,70883f90,ed3bd8e4,86e3c77a,37fd1152,c22637d2)\n,S(6c0ace3,f182c963,45deeee3,c41c5e51,8dce984d,3d409a89,6d766ea1,b1ff0e0c,17e09dc8,dfc53cb4,952fec4c,92782ce4,3515544f,6181bde1,1d1ba1a,bda709ee)\n,S(f161125f,3a229d29,2053fb9f,6f118550,43d80e33,9bd45af8,c1519043,2098c9d9,1b442ffe,a186cf2c,343b90b3,66a3a008,e08edf90,f073e740,abd5d20b,8dfa1327)\n,S(fd081f05,6b219fef,56a3fc1b,6dc7873a,fb054b40,1b3ae0b2,414384e0,9080827a,9711912f,4ceb0036,3e5921b5,c2f7ca49,387b78cb,f1b9c2ac,9c5d5d1d,1bd8203)\n,S(72c6eecd,d87657bb,ffc3a03d,b6e1f9dc,83252d2d,c73ba3f5,8642fc08,fee42b4e,282180c1,7737b51e,d047cc50,64d53cec,6340eefb,d969525e,a1524f0c,a305e39f)\n,S(10df231d,4582143f,1ad7fe00,508cbbfb,3d49775d,f13dcee1,d6155768,c14bfc51,b7743bf4,e7cd49f8,88cd0d26,ac196037,e1da9402,26518e07,407bad1d,20af7dc6)\n,S(354e8b0b,e40bd9a0,36620006,744c0913,5bd4bcea,34ab3371,9561e36e,f465956a,3e7407a2,2b9d71eb,a04239fa,600834d7,5f643c8,b4ca6308,475f6c9e,8d35fd4)\n,S(2ae99ec0,6a4e080e,879a60fd,a93a47df,9ba7e0f3,b87a6772,be6d7e23,9bf2c42f,3fdfcc57,6a36adbd,52467e01,f3490fbd,82766cea,b956f80c,7b1d29b0,5066c31d)\n,S(f47ff09d,5e93e827,72e73c7a,8f1623e0,823b09bf,86ba3023,a223a680,fd849bd9,379ad3a3,cd546d27,35fbe5d9,97c3dd8b,8c45a3d1,ce8e9c49,b23bbaea,e93a08ea)\n,S(252c0934,acc3a624,c4d8b409,111b248a,2242dba4,7d57718a,aedc9cfd,20647cdf,17b7a015,a2ea993e,89a7161b,f50124ad,561ef131,609981ac,fc92e495,cd2ec91d)\n,S(b7f6bde6,7cdbbf9,4a3e06b7,dc1bea75,d6247197,a8617a6e,a1f65f44,a7459006,6d6ad596,fd3472c,9d7eff56,943c1a03,ee4f540f,29782f77,afe999e6,14f5e316)\n,S(210c956f,e0a741a7,edad58d5,d47a2a34,fface7c,5edad0f8,f4953b72,28350b2f,4d4498a0,892a9a9a,4e87ccdf,424d7910,bf90fe95,186653c7,6e6966a5,e7a816b8)\n,S(7ab93adf,b8f35eef,8af99e5e,e37aaeee,401a1936,fc0b8c88,518065d,12f4a74,4f0782b1,c78954b,8ce37bdc,7e533145,3b885d92,da1dbf85,940da9a9,b7f0dd8d)\n,S(bbe1b787,9c93e7cd,891f628b,c9a655e6,f4c7cde4,fa799596,74978224,9fd05fd0,493d3dd7,be33acf1,38ef5b73,8eb8f8f5,4e270323,8f70078d,5f7bd9e7,177088cd)\n,S(61f42d35,ffcc6151,f8c93b21,5df0cab1,fb804cde,f9c68818,fc4f413,b804942d,46ef1e12,d6add082,3917a758,9c137d45,c38ae2ed,eadd847d,aa574e06,18708396)\n,S(18542b75,3e78191c,b3dabcf,f9c64a8e,5e4b075d,d600fe60,b830e732,7fbc7b40,6a816e01,41b17e86,65ec280b,f6da9dbf,8061329b,6db9d13a,a9f10c0f,41340118)\n,S(ef83d0f4,a3d2963e,d14e708c,6d22017e,aa97b2f5,23b06f1,140b4105,459781d0,5587e5,13725819,1b10bd40,e616e06d,16a50392,7a8b1394,a562c396,973d98b6)\n,S(fe73429a,7714dac6,ed0db327,d6949d43,30d2b16e,a513d3b6,7b74452d,78a82a4d,7079088d,fd828815,ae087319,c232817a,4928f743,843a4966,e9411276,d16214b3)\n,S(2e8b8a63,3048900c,4b82ff8d,fd86a971,86e3f1b4,6206b252,f06a8c85,82555130,74e10dbd,ca84d796,b3b37ae,b32624c5,2c5aabc5,d4fcc5d2,21c1aed4,71c940b)\n,S(9f4164f5,4f34a59f,3a7be378,66a8204,def2fd98,8dae6dbf,5d471e0b,caab7017,4b662fde,bf2615c0,8c7b53d0,b2915d50,ddd2916f,a3599d81,bb2eab6d,80e93f57)\n,S(c6f3a26b,adab6699,aa08fcf4,6f0ac900,2be3597c,16133225,6a5e6577,11b16ecc,f29db1d6,579d0e36,4528c297,36019f4b,6e8f060d,ad5effe6,d357d709,882a250a)\n,S(76a4f5ef,6a869e28,e6494cbc,ffc6eec0,1ca983ad,1b8219cb,d2b84eca,96f8b910,e1d8bd7d,55a297df,32ee185c,c60db286,a2e46cb1,312a8995,5923a068,cd3318d5)\n,S(d2c25c8a,cfaa0b2b,3f6e70d5,bf095700,68102f8b,24867970,ef3c8000,b2212d1a,bc907681,9c7926dc,bf81278f,7dbfc4cb,292a8071,177ce8a4,f4e9346b,a2d9e500)\n,S(b2fc2ca,5a30c678,61b0bd22,5bf2c088,26d799a5,9c9a680d,dabac9aa,5cb624fe,d4abc7c9,fab915d0,fe9dcf59,a0f83ca,56b27566,6e9841cb,b5b14874,5f6732ee)\n,S(110ef531,7824c321,ba7fa94f,ac98de3a,c6cf44af,db92b7be,1006c751,9b425065,cc3daa20,6c0eb83,6bdfe640,1f7461a,261e7233,c70e615f,db82a991,77b83cb7)\n,S(fe21a607,7419ed88,12d16ba7,5485e01e,3c063359,f95a8634,3aab1c84,ba6ac00b,d6e08c98,4b7a5282,bc1857b8,82604fc0,692a2fa6,40cf5a5c,d298f344,54c836b7)\n,S(c5e45275,ec85bb32,edd32702,7d7d87ac,8394bc51,722e0bd9,58281e61,c454fcef,9b158ee7,89034035,fec4f06f,2fc81755,59f9f762,38742715,92ca6ff9,e5712a8e)\n,S(cc68f3f3,36360481,5583d65,7da51968,a4a44a69,1264bac8,289791aa,dc7a4ef4,9db5cab6,7b31f3fb,f3b5fde2,273496f7,93316358,6d14e80b,bbca4613,319df9aa)\n,S(6d33be85,5fe8bade,89109a3a,8c089aa3,f7e9d178,969100b7,eee7a693,d83ace80,9312736,87c08455,c43b4cab,afe71408,333fbd69,d330315a,3fc9a52,a9d473d0)\n,S(5aa581c2,fc48c38c,2aa2e176,c12f12b5,4810ff6f,862fa17a,196c06e4,812b9e3c,adbff08b,bf6fd5e9,9f91f9f0,9881cfcc,a7b5c2af,709bf838,6055079b,2f75f3c4)\n,S(12eb2dde,dc6ea4e8,dfd43067,9d45052b,b882e4d9,bf516b,61edaf00,305fe883,8f948ee0,f8514f9a,1bd8a71f,20c95e4d,e30caa5b,bb3a383d,9561f027,34bb1950)\n,S(3d0d7eda,43045e9f,62dc680a,be47e933,74a95d59,945b69cc,60acb89d,e40dcded,45c53d35,e369af07,eb223a79,1d148ea7,1875cd1,8ca066d3,399743f9,65e184b4)\n,S(173d4741,5803d266,7ea94abf,319c5917,204256ca,e217647c,c024a9b3,be7b70c,2da6c348,cb066462,eddfe8bd,3dd00ec1,34a0a060,4b7e17d7,e6cda389,dd4d5463)\n,S(10659655,e2f1ba5d,db390184,c2d6d1df,1cd2abfa,4cd4bc18,c89decc9,5b5d6319,5ac2793,3a88870e,d5c7752a,459ced45,69435a09,7cd0e030,25608cf4,ac2ae267)\n,S(e462be7c,380d7bbe,cd45c6dd,8fe60219,404b0c9,4c5e0e4d,31a23064,2b5b95,872183ec,1ba5b854,1f3f99d8,ceac80c5,9e84756d,cae2e694,9b43ea7e,d1cf752e)\n,S(8200badd,1df41faa,19b20cb8,efa424d2,2f39b1f9,26b692c0,2a0ef6e7,feeed67c,8402fa9a,6ef0f83f,42546b05,360296d3,74db551a,d89be995,f2c11866,5be528b3)\n,S(760e2457,a3e1a165,526e9fe2,2b5bcad6,e8107581,337cecac,e2ae87dd,a3c54592,c5111ec3,24158a21,56b897a3,82bee2bd,de0f9df,af9ef611,a7fd3fc7,4a635b3e)\n,S(ba6229c7,1729cae6,5275719d,9a35691c,f260a003,168f1a25,1ac00b09,aa17872,7d281600,6bd8981,82126d21,70fa0ab1,d5dd0c7b,cc377a88,c43cbf61,70a633c3)\n,S(a2cf1392,571e758e,6ec74708,dc45f70f,90833ad4,135e7a34,9d2810a1,8efb5216,2420ffdd,afe96506,9e6f9266,1e3839ba,c9b1db40,d40149ae,3acc8683,86acd175)\n,S(f8822204,27cc4b37,33268925,fb80beb5,a52e5391,b2c8e31e,f6e99592,1775af20,6cf6eb9e,b19825da,6edc5d2a,66f3987d,c9eb01e2,b70e6395,abe2903,d43acee)\n,S(eea28950,fb676991,444f96c5,7e42ea16,aa380e3d,dde63111,fac35708,a4e45b3c,34d30722,98a686ec,7e1a8095,4e2911f1,5e11d426,ecacf11c,eb45a5cc,7204114c)\n,S(7f252a72,6f9a1497,f61bc4ee,7b194a31,432c0178,2f40b16f,2d36e9c3,7279e25f,8edf25c5,f50c6f0d,f8a17f92,611bf024,14e02d0c,de38aced,e96d5a7f,4467c449)\n,S(d3da23fa,56881cf3,a42a50a7,42e1067f,54ec24f,2de19921,b1ae7f15,fb90509f,b4ec4b17,8e555cbd,15210f09,bd1ab43,28e458fe,6aa3e800,44bf0093,ea08f90c)\n,S(6752f294,f8ad85e9,60b6a88c,cfca7874,5c80ed7a,93f6f05,3782ac73,d96e31e3,976222ef,a6f6358d,42d6289a,4f11bd65,e7e755a3,845ed49e,3c972b5c,5fdb2418)\n,S(4fe21b06,24a45b69,7f42aa54,10e6385d,645a8d49,2a61ece5,c8d5b2ad,1fe74efe,f7666c09,7caeea3a,c4b2993b,64f4c0cb,ac934099,8870ade,b7cee48a,c3c2c413)\n,S(15af87cf,6dc1acc5,1d323a36,b2daf163,ccc8c201,a92f0677,6a26ae27,7fb9d766,53fe4566,6a975d35,ed20a5a,7bbe63c4,4cf8011d,45e7a171,d5d72e57,5debefbb)\n,S(656f3686,c60039b4,4c39a5d3,ee82cd08,e8aa8ed4,b9a943e,42281407,4ab6821b,9f277baf,2da730b3,dacc2a43,512411c0,13ffca65,7092e695,d49c8d24,a4cda4d5)\n,S(a13286fd,2c17a61e,6bf8d209,d64f5879,2534b037,cd854470,a09c8c8d,95aa0564,9322d3d4,c735a485,5d76e5d1,fd27fdbb,a8af2fcf,ddf7bdf3,f9e26f97,7f4cd1df)\n,S(3b355928,4ddb285a,1eab73c5,6e6bc554,9f40d83a,2b859e01,a30032f3,a5a7109c,780670b5,67755fa5,10fc3385,7745a69c,bbe73e3f,8186b3c1,8a82c51d,5e1d9be0)\n,S(b0b15be8,6c2dbfed,6da6e7c6,51c10b17,504070,7d1747c3,ff2dddbb,256fa495,8d2c438a,42750adf,345332d,f02f6c4,55a07fce,afcc51e4,96c270ff,913546e3)\n,S(c754130,bd717ab0,fc17e14d,dd6ec50d,aa6bc02c,a338cd9a,798ee62e,72d517db,fddf938b,28500dd,c9f1fe0e,70104564,d1bad398,d3bee900,ff609c8d,f56d3b26)\n,S(ee615579,33d877e4,9bb228e3,62766ada,8615d382,c022c333,39f78ff6,5e5d9ceb,3dd38b15,5ce01a1b,3d5434f1,b2e04a26,6a830f47,fe89263c,b0ad1b5e,18bd8b76)\n,S(f830dd7,4d03a39,d7f5ba3d,132b40bf,130b33cb,9b6609e2,12b6479a,14287c9,9183a68c,33c2d25d,c237f8ed,b5a63d44,4dd2bffb,d1255631,221edb9a,4c9e9e91)\n,S(544fa477,3aa3589d,9e63c8f0,f30cd189,a8b6658e,ba908212,cb1b4caf,2d5f64ca,bbf57d7d,b5c6b8d6,e202a7b9,8ed06edf,e1a9ad01,381da1d8,11405fcb,8ef717c3)\n,S(9b270440,132f5b09,6fec6214,dac1e27f,3e6c6f7f,25eb2cab,680c3fea,e0b41b1e,a7e591d,eb990617,6bc87263,6ea19e04,c9a3aea9,59059078,2a757fd7,6d99c6dd)\n,S(bbd69c5f,f0b9228b,cfeebb97,32b3c316,c14d9a54,d5a3e9ca,ebb337e1,e33525e4,78cc6c84,8c246e7b,7636949d,4e3f2b94,989c77c4,812b8189,cb857cd1,3457c403)\n,S(a920edc1,4ddf5bda,56719c0c,2adaea7c,9aa8aab9,25a5d6fd,41172725,bc65341d,b8afac74,46e560ce,bcaaf438,69dc9287,2805fc14,122cb19a,bb59e51,8336ff80)\n,S(3c6e9595,a201956d,ed27e83,41b22822,445148e6,d00b2fcd,ecfdd66b,2405ae3f,2b8ef9a7,d7c37d0,d2b77309,74718eba,16f221a5,f3074678,317f0b6b,7b0841b1)\n,S(c35c9e45,3f487f8f,ae5b6010,e1bc1ac3,ebe4ee53,33666876,13cc4b35,5162ed91,7a8e64d4,9f827631,579421ad,3c7f7ea1,f4866432,a341f955,6741c521,c757addf)\n,S(8fc84331,a8f8dffe,28f30d71,b39c105a,ec09aca,4876241c,1c81a223,a1953637,aac7257a,cf0fce3a,ff8fc7ea,e8d19606,2ba6d7ad,9b7987bc,35a92b9b,20360174)\n,S(b43ca4ce,f1b4a2d0,1a20fc64,2f3e1456,317f729a,1ee69798,4ed88bfc,1c5a2908,39ae1e51,f352c0c9,8a79cca6,cc859eb7,92bad6ae,5318f99d,d62d3bd4,d8fedad5)\n,S(7f29c501,75628aee,5d39db41,cc4d89a6,9f133f00,47500f6b,aa7a90cf,e13159d2,cf17c6f2,f6072b50,257f722b,5756d8ad,c7486cc1,d21a925e,8cd29a15,4b514cd1)\n,S(3fb93959,55ea2522,61b0488,212e15d6,b28e975e,5ff5f357,15337538,247f2a54,7c3db409,e06d6980,d834639f,e9e357bf,e6a4e9b0,ae6b4fb8,f5e45143,ff625ddd)\n,S(945ad871,18199665,a4078a46,a9596bd3,ec7cab84,b6323a0,7ceefc63,d7ba29f5,6eb6d896,a24d02c0,630c909e,65d13d4c,2eacf1ef,6e600b89,1b171594,aa28c206)\n,S(513bfa93,57c827c1,b3c0289b,c4ce443b,cadfbef0,b28b32a9,265ab85e,67efaf4d,645c5b3f,d45030f,1aaea514,baba7069,91def89b,56fdc292,4b684241,6653b6d2)\n,S(d41b35bd,421ef7bb,1c03c794,477c2851,dee92831,714180e6,6e57e735,caba5835,beea2116,9cf971a5,ffd83596,d9bd77eb,cb1e0c7d,506a45ae,be8c0c7c,22738f9d)\n,S(96006d64,fac8f0de,88f93e05,da8e76e6,40afc1b2,8ee09a7d,5633643b,d89ee3e7,1404173d,e96a97e9,ae9bcad5,c9093d05,cba96479,30bfe6d1,96664d0b,13c93618)\n,S(ad528227,12257f87,d1ef82c4,4af5f046,648c2a72,497651bc,2327e971,1170e7bb,2ea908a6,c742f542,324be959,4746ee48,4229d497,cc8bd535,e7989525,aa36f079)\n,S(b4709a81,c067f6e3,93ef97ab,c26675da,6f01a2f7,e3f35275,e7089ea8,ad5644d6,f655b89b,d6a83838,ffd23f6a,fb944bc0,57fe7f1,1d321a0d,2152568d,91751d99)\n,S(3b7bc8ac,5ba85b40,2080612a,84e0226f,3b43c8de,c0e54b6e,ea779b76,812782f0,8405dedc,a02825f3,5a60333f,190001fd,98ea3995,9dc6e61,c28c5e2e,5213fb0e)\n,S(2a76b67,d197e7a3,7a38bb10,d49d523d,c4beb4a3,75336974,7e22e407,9e0310ca,6331389f,b9cf9fee,e89b089a,95abca6b,a3c2aba5,38725c1a,6848fa46,997d0e87)\n,S(9938e808,77c2baa4,53e0256e,d250439d,b11732de,1abf7555,949a7574,f62819e3,250b061f,bba0faa4,468a080a,fee8264c,f72fc12f,2ac91dd7,13ed92a1,1b281124)\n,S(7366eac0,7e5e4573,333291,3e42f111,e53a78a6,5069898,52db2355,de089230,b8dfda33,31646343,bfb60b2f,25050967,e735861e,1654f0f7,ff42ed9,5dd652a4)\n,S(10fc632c,cab22fd3,2583599a,a2efaaf1,6e1b01e6,a5a96c59,50871012,33022152,cf53d9ec,c74aef44,7019150f,ddfde494,c2382a07,b2dfd73b,c628478f,7fbae0eb)\n,S(785f4da0,240de52d,bb50b1bd,bc53994a,47318076,9a1fe06e,5a40a8e,e677ce63,9b5759d2,f77bbb9,e40ac169,a01500ca,6dd6bd70,6a003871,e7ba4d66,b32db9e6)\n,S(a7f20615,593850c3,27aaa06f,c03e0d46,d3ff20a0,9b849810,1759638d,8cbb9cf,13b9ebb6,f0cd59ef,54e0f935,87a14fe1,2337e346,94f5e8f1,10323fbd,d7604d3c)\n,S(cf083e4f,e0ed4444,85dbd99d,8e6823bb,483eb749,b94ce672,8671de8,6105aa4a,36eaa305,37378494,17050dc2,8290c74d,d9ff9df4,cbfa434a,2b89de00,e06f3099)\n,S(9fb8c370,bca485d1,dcadc251,ee906f58,6f3e177,be37baec,6912e535,f5c7ab0a,df5cf77e,1ad07532,7150136e,7ebe7f35,1db47415,74444b24,e9cf2f4f,31ec683c)\n,S(ff9e2f29,170dd456,2c94d48c,eeb0390d,db783702,c13574f,8a8c6a79,6427adca,784c7b68,3c824603,5077911f,957aa33b,47534180,d70a60d9,f248b860,736a24c2)\n,S(802343c3,e07f9f9d,ed2ca436,3e455427,367b852c,d23ffd7f,fd690eab,90b4162a,b093f0c5,f0fc7d01,a5dfb7f6,bf9d90d8,8595140a,a13fbfc0,f7d6af2f,54ff5ce0)\n,S(ae74ed87,11a1a684,9e558e05,47ff8f9b,f6337551,1dd3d272,ee0597fb,fc2d6914,c304897c,e5afb5b9,a383cb64,e85071a3,cfbb2981,93ea6ce0,55257ba4,cf15bec6)\n,S(c099b05a,dceb601a,14892c97,7b267152,f29ea71e,fed6090e,7267249e,43c2390f,6c3ad3eb,8c95c72f,e0030a7d,34329945,fd1eb71d,8c4aa1f9,8fa4656c,6bef067f)\n,S(97c6949,a25581f5,945814e9,9d590dff,67d936d5,94101005,4cac33d0,fb3658a5,cdc7faad,5bc387ce,a16a10f6,6971e5ee,6d32756b,596adc14,57081ad4,1dbd2e4e)\n,S(14a19edc,a1ec89e9,524548ef,cf3dbc03,81b14b46,928f7425,87b11df1,7aa721f7,f83c4d0,aca08709,63a017b6,8db3434d,6088015c,2ff1d8bd,739fd620,35d1a19e)\n,S(4742af63,c7597424,e6d04a8c,cb43142c,54c5b350,175bf5a7,27c39820,2187d00e,bb1f2f72,b21e15f,ec17af32,2147edfe,1ca80ac8,3e030dfe,8be39fdd,f340c56d)\n,S(a6597869,4d168b00,d9df41de,fcd48ae9,68313394,db683407,330ffae9,f2559a11,6bf65c42,13317a5d,fb561e8c,872c8b1b,90bdabc8,8a8d2e1e,39919f8e,5043ced3)\n,S(9e62e468,1e22abde,4d7a2fa1,2f7867f6,ecbfc15b,54990e26,821a8cde,fed76985,4877297b,a64fa8ed,c039ab1a,e62ac72d,8d7bbf05,7513d1,4237b8dd,9f1acd37)\n,S(d24333b4,de55b0f5,d47c72e4,88cee8ee,8c960903,260a64d2,c89bca45,db7352c5,688b20b0,617ac12d,5be38fa2,ab52e785,69766a83,2d8b44d5,cfd6ee88,b19b9f1d)\n,S(d203301a,13d1c8ae,a8c79007,1ef8116c,3916bb3e,dd5110a7,304b9145,465be838,a606dcea,398dc313,e61c8fbb,dbbc3874,3c103297,164e66a1,4412a21a,5319e55c)\n,S(d1aa98ab,7010146f,16a9d6b,cd911535,2595bfa5,1bccb3d5,5e3a4a87,62666610,3abafa4,999294e8,80e3fae9,edb4206b,9b9786d,bddcaec,e2d01cf1,ab715690)\n,S(1e20823e,81051b2,65535085,9aefed6,3631dbe,23b4e79,abd3c17c,21f053f4,e238adb6,86592008,f7fe34b9,9b934060,15c323ec,55981b27,85feae6e,5fde7186)\n,S(d878afb8,8527a861,4b4276d8,fba39300,72196017,6f437014,980b7bbf,d4320ffc,7403107b,fca8ac64,baa94a4b,128e72ee,4a015675,845519ba,d5609331,1680e7)\n,S(53f86d45,61deef96,ca88a685,38fd35ec,a95740a4,3a52c601,faaad0c2,aa3ab72f,667a6ece,bfb97682,c5e9e5df,b6d29156,9604f63,d9ab00ab,8cb10000,e6b01514)\n,S(20990660,f1055420,b885fb0a,38824740,3b141c37,5aa20dce,8a29191a,e77bbb16,7d434476,9e302e38,9e14c02e,f5fd8a5c,64cfcf3d,e9813f1c,f53bc6d3,4da93559)\n,S(1e70619c,381a6adc,e5d925e0,c9c74f97,3c02ff64,ff2662d7,34efc485,d2bce895,c923f771,f543ffed,42935c28,8474aaaf,80a46ad4,3c579ce0,bb5e663d,668b24b3)\n#endif\n}\n#endif\n;\nstatic const secp256k1_ge_storage secp256k1_pre_g_128[ECMULT_TABLE_SIZE(WINDOW_G)]\n#ifndef VST\n = {\n S(8f68b9d2,f63b5f33,9239c1ad,981f162e,e88c5678,723ea335,1b7b444c,9ec4c0da,662a9f2d,ba063986,de1d90c2,b6be215d,bbea2cfe,95510bfd,f23cbf79,501fff82)\n#if WINDOW_G > 2\n,S(38381dbe,2e509f22,8ba93363,f2451f08,fd845cb3,51d954be,18e2b8ed,d23809fa,e4a32d0a,fb917dc,b09405a5,520eb1cc,3681fccb,32d8f24d,bd707518,331fed52)\n#endif\n#if WINDOW_G > 3\n,S(49262724,e4372ae6,f6921b82,aa4699a1,f186aea5,40122630,3ea42648,97c2a310,1337e773,bca7abf9,5a2cfa56,9714303b,6d163612,a75ff8ce,c41b681,5e27ded0)\n,S(e306568c,1a240c90,d5e253b3,e477e2f8,4dcc1a56,ff06db8d,1384b079,cebd2d31,eac6fe3,78934260,888f2b10,7f7d0db6,ffbc8042,be373826,692b4083,92546e44)\n#endif\n#if WINDOW_G > 4\n,S(3b9e100e,2428cefc,271b0e76,23fbd633,74ebf8d9,aab41dd9,c530c39e,363136b0,fafb9815,2d16bb71,df1533eb,8f475b26,a2ae28a3,3ad31f81,953ec16f,6cdbbc8a)\n,S(bb0aad49,712ac9a9,2b76ca80,f5dedef7,17ca0768,8107beee,9608f047,2f485d3f,ea699c53,c5835479,8ecd201f,7297da34,895a5afa,31670bff,e7939250,3ca2f975)\n,S(79090ac8,e4eefcc0,d4e8eb19,7afe0113,e1e58b4d,b01123de,4aeed33a,36718dc9,eaab722b,91905b8f,13d816cb,cd9aaa56,dd36afb7,ba9008b,963322b1,1cfae7c5)\n,S(e77c81ad,e9f97b55,1c03dbbc,e549ba66,8dd71de7,cd775ad2,a269694c,7f60c7d1,3acf1478,eef81321,c5fc3b32,3ea81543,631470f7,1c2986d3,4ec581f2,82d72449)\n#endif\n#if WINDOW_G > 5\n,S(de2b5ce9,dbce511c,f2d8878e,3ded87cc,3d633dae,a2d45341,501fb3a4,55ccf6b0,f10576f3,d3c3e0e1,bbf717e9,8b1a3744,65b8c45a,c66318bb,34829eb7,11100666)\n,S(d07bddff,d491a2fe,1ea59fbd,7c121217,29659ca5,de46658b,26b1460b,13c03c56,b2ad4708,cd3c97dd,f9c40e2,a1de04d5,61d963ff,8cc2eea7,6be3f60c,2b405ce7)\n,S(82403e7c,5d3016af,3765ec4c,396ce8e1,f8da45c,434b8257,10edab41,bb6a4d51,d09661b,e27cb767,4456badd,b3e84051,99ab6ccc,4ec67c1b,11e92ead,7b463b19)\n,S(eadc3131,fbd626f5,263faa58,c4caf4d9,930f933d,9541c23f,438cb486,750680cf,d3c977b1,c9b4a897,5c64b36c,972d5d01,a388fb9d,c3791a74,36094ff1,2c87a914)\n,S(3903ee5f,6758ff24,c518a4b3,86748f4f,36bdd65c,b77e78ac,609f2909,fc7987d9,e92194e,a15241d6,40915934,bd234749,8d222a18,4927a8da,b0cfe2ae,182be83b)\n,S(d0803b78,39ab48a3,8475bdcc,f9a9f219,5759c343,dbbf8e93,23e1f882,5be6a5d9,2cc3b180,ff29c97e,a12ec15f,b38bafa4,4ecf06c,e51d1d24,2894a926,64582f0b)\n,S(1f56f096,b18a7499,a153a5ae,acf8be05,8496dd23,da8e6c19,215628fb,c0567ed0,fef22b8a,3b52f490,83004436,b65cd69,c94189f4,1a93c0d5,1fc13cb4,379dff58)\n,S(1d9f69b1,a4a47432,e386f525,234aa30,79e947cf,cf203297,4e0fc05b,638e213b,d898ec17,949c0761,b38500c3,a2b1da24,5438d5b3,d3f6f720,41f15d6e,e4d4ccbb)\n#endif\n#if WINDOW_G > 6\n,S(128c913,4d9dcb78,12fc4361,5c67ad0,55213354,dc8008b1,aeb5a9dc,fb629efd,fee3e54a,dd152610,d9725936,99d662,c160c8e4,ec6f76e4,5ff41818,be67c96)\n,S(21ec012f,5a95b94d,244b8d51,9756075c,301f2854,8e2c51fc,49c0e3d9,d1a9685,2def2105,77af497f,4c7fef71,6949f28e,7418eda6,fd5fc162,d128de19,3cde08ae)\n,S(688f5202,fb9d8bc0,9e480e89,4c7cfc74,761c3be7,7dafb11c,58422836,3e331cc5,96ba7d59,63b541a7,2ec7cabd,92403434,1a393eaf,89eebd94,62d9c218,c7302cd3)\n,S(fb5c9eea,1cb9a8f5,b3314c30,a50d35,744d0ef,e8bbf68,2e4d3ab4,f7f02baf,29fb8844,e18fc551,fb28bd26,95c5e95c,6868e0cc,7e526af0,91157e9d,fb630418)\n,S(f1479fe2,2eedae3f,2f5f6a5d,84a9de1d,593168ec,7b52380d,e0b3625c,cac03421,1a642d5d,2fd88b82,13b50d1a,3fbd3419,c0b4630c,48352131,cb856b2e,22764606)\n,S(2273edc5,e8199774,93c5b0e0,9fe0effa,f60f7b,2898565a,69f5c7b2,bf1a7950,b3aea238,8fd978d9,29f1a1df,98495358,b64691fc,4f50b530,906ae39e,fe7bda12)\n,S(99f8480c,30504378,b47d10b3,2b39da2f,496d59f4,b1462856,56f05ad7,9bef5214,e001d55d,8e224286,8d8bd397,cb5aa99e,d930e437,e4e62151,71da7ae6,6264b2cd)\n,S(382257f,e4751280,d74fdfc6,993c8642,9c000d5,87f57635,bc9656ba,996a6f1f,c2dc733d,fe52cb06,265a4f1d,a6b5f1f9,30dbfa39,e3659973,1c672aad,8b51d474)\n,S(23a13632,9125386b,e45f4e1b,2acc847a,62e5eaf9,f6d5f452,6e145e7f,ecefb24b,9129777e,643ba22,2bf817a1,af7155f1,413cc370,3734ba6f,49f15f55,996854c0)\n,S(6659ea60,58a664de,a35791a1,8c5cded4,8cf5593d,c440b9d4,8a30ac35,79149f0b,2adcc705,a85d836f,b347b69e,742fc6c3,5300d1d8,e534f1ff,c820c6d6,b2f2199d)\n,S(52dc3bc6,e1acd3b4,7ece6f6c,89fd2a3e,2899b487,41421033,37a67dd,1ba939fc,5daeb346,32ad107f,bd83d9da,15a3c4ff,1e8f6ba3,ee5193e2,709e89c3,43d05746)\n,S(524b2a97,93cd5745,bd9189ba,9c947bc1,693fbceb,75f074f6,17376b10,d5573551,9e8099d6,cb23fb1a,9deb92cc,3e8a2fb5,a6865ac6,3dececa0,2d146e1b,bcc80b71)\n,S(732181a8,e2bc5953,923e6c3d,d960e9b7,525b7b95,e5906997,6fe79156,1782756e,2516c6b3,5592eb0a,42ba193c,bae98ab,e3c42d96,148f1d84,edac621a,722e4823)\n,S(b8e8942d,926e38fd,f338496a,c2ef6fca,49a7ae3d,f76eb15d,8d570111,e502664b,7990d56e,7dea588e,4d670ba2,2031e6c7,97248641,69e51d77,f792f5ed,befaf8eb)\n,S(144e88f6,3e73abff,72cac11e,7ddccf79,19e744e6,278941ae,18d1b797,e098e4e5,63cdbf3,5df3c655,c58197f,ea54633d,158705cf,7dc2eb3b,4e09f83c,3021837c)\n,S(9436e3dc,489ecd8e,2d16a739,c9c73e3d,60e5bc93,68157039,75b8efbd,5c3a9081,1460531f,50cb6ebf,d1aa7806,ea84e7f7,8e8d76b2,b3a66d5e,3a0bf60,39a7e59c)\n#endif\n#if WINDOW_G > 7\n,S(9d3c2561,7a56d10b,46d9b01a,1710d193,e840e005,df669e76,1936c275,20890db9,6bbdc0bc,4c4ae9bc,c2dfee9b,82da9b94,1f89ffcd,e8af2aca,4467ce3,78521ea3)\n,S(29f98e50,f51b7f8b,e18c6ae0,b453c4f2,d0aca5a8,b0e61d2d,dda8506,3fdb76c8,daf3bcdc,ae8e031c,73eb8b21,14058063,58a6ec30,ad379186,df80e3c7,f0e5d28f)\n,S(d67d30c2,c71daa36,1805e31,1dd6046e,17a89752,94d76e1a,538af074,4dc22c94,48b9b0e7,12c807b0,b92e690a,a2e068cc,e87ebbbe,aaf4bd96,9c1114bb,a54f670c)\n,S(f22c2ba8,8ce9c2e4,b772c9b7,6d03a017,59aa7b9,97a78334,83566027,2fc81649,6aa9e710,f190be16,243a4e0f,1570270a,2d92dca9,8cf99a3,cbc06fdd,f9b7028f)\n,S(c5e718d,6b94c83,e52533c9,ef3234f,36b722ed,cfc074a5,eff30969,9ac5f894,24961051,ccfc6619,dd64e810,fa9c504b,f7f8ce9e,cc445d7e,642b3166,eeef436)\n,S(26a8bcaa,c836eb7d,57618999,ef87ee4e,c291dc8b,333554a2,c1f66f73,7944d611,c20051ba,7236663,ace2da29,c1e0763c,e57192d0,e199e7a6,c69cc65d,bbbcecc9)\n,S(388e3570,fb7b1545,9bf01ba1,7a6496d5,6bcf65e1,764e7aa,2c083346,2dfa098c,2d4e0d22,a2eb0ff0,545561e5,ae344be6,99120d12,45db6bde,a9500f5f,a07be798)\n,S(68189bab,b5a0783e,23227efa,4eab2c6e,da2d1c,2ea57fca,7a7f8f72,15250709,bd30bd83,3694d3fa,a14954f6,251445f8,3e42d517,30d30855,a0eb834d,3c7ae856)\n,S(642e0823,bb347795,967b7aa9,418a25,ea6ff683,fd7b3d42,b88d90d1,292190ab,db73dea7,86ec052f,e3674892,639daf39,286b4690,63b68903,210639c7,f3b4000f)\n,S(9ab6ea81,e5bf5505,751addea,5896afab,7f4eff2f,d3986027,f916835c,64924afa,38c06aa7,4870a5e7,2ff29efc,bce4b3e7,dd951c9b,29966f2b,47d007ac,7629bb6c)\n,S(b09805ae,e567f69c,71a98248,e89e64f9,e059e015,bde01a62,dd18158e,e94a8ee7,62aea16a,7ec912ef,cc5382eb,6d220ac3,dea885a8,e3da12c,8147b28e,1983d221)\n,S(3d632a5b,636ed5a3,4a58bfbc,9831691a,91d6b5f0,975bfb5a,82b4c1bc,107e6e5,577a449e,75bf16d9,2eb6ba0f,9cb4d496,7a7ee09c,f1605aef,682cfa31,cf395a1c)\n,S(6b821bf0,f70d5ff2,ceedb69d,d96ac8bb,b51e3635,3a36d50a,b1c1a697,40cef707,5212ce11,993fc120,88028674,5cddea94,6371b4,dfa2f47a,6d83b789,c6d12e5d)\n,S(bf294951,4496fe0b,8527740b,5cd9394e,dc33b330,c91d996c,789db854,45728b23,790aede5,da35ce7a,343f745c,410de38f,4c53bc2a,bb41bbae,c13272b1,e912782c)\n,S(a55354c3,82bf968a,16668267,c4498946,4906f69b,114f6f06,742b6035,1d75ec80,2809bddc,45661a5f,28b31967,6cdfb5b1,9dd6d296,d1828c88,179a630c,ca5962e8)\n,S(fc015036,abcd8311,bbfa1574,ffb4980f,b893f8af,84f519f4,5a6fa344,2649a693,d0f6a278,1946e04b,385cd004,29acd3f6,f5542aca,3e7c789,657f676b,f19db819)\n,S(6164410d,9f81f352,272a799f,b4afbe24,59caea6c,511fa4ea,b7578980,d9a7aae,92bc1480,ba19fcd,3cbee69c,95b9396f,4982fff5,d4e7dac0,abec7153,ee5a7966)\n,S(ef816535,8de9d737,728f9a9b,3182b4f5,6e25917d,1ec05fc6,faa0fc85,170b5f2d,dc372426,403ca9c4,50649df8,8b6fd32d,f1721dc,cb1c7d7e,155c83ea,747ec595)\n,S(428c34b9,89a436dd,dc704e68,170d2c40,178c5646,841eb2e2,642c0a48,8987a8ed,b1f24158,251c4646,ca04dc3e,64369634,3836f97e,71945f4f,51237abd,3aeebe06)\n,S(6eb61782,f909157b,415e6243,7bebbd6a,5f19da73,7eda64a5,5acfe206,65417a9e,4fe7c546,baedf2b1,6c92f168,f99c42f6,af03edee,290ecc39,4c4efff,e8577b72)\n,S(992e0af1,466d4fec,5ef83009,98ce31df,cb6f9573,d14c1646,e4371c62,a376fa4b,d0e3da69,1e4396b2,eb01e3a9,964365,50d000e6,31d79ae3,871690d5,29f9e825)\n,S(fedb564b,adc70078,f20f31d1,12496934,513e9903,8cf5b9c3,1084383,5721d11,1a8e2a49,57e8420c,f2d5d97d,657f1602,ba26ae87,d5408b2f,a9448def,38157a39)\n,S(f3f2068a,4dd89d18,1247088d,3c424916,3e683226,6274b575,e54430d0,73b24bd,f2aabd19,a7f462,1426ab1e,e0aa7e33,12381c5f,e1f1cf0e,75c1a7f7,7ba2bfa8)\n,S(32b9225e,4217a359,8de4e7c1,476a8581,5b6aa458,d93dae02,b3d30772,3ca13680,7466e804,26856340,12985683,dd071e97,53246214,733808a3,96f35d0e,5a133802)\n,S(85008a87,385ed6b0,4ff89979,2eb592f9,ee6c6b93,fa24dc7f,c6299b9f,dae64a8a,1f279e2b,8a5b0576,fb9569f6,c0825876,84b5b38f,a250e362,2ae6e284,a504a2df)\n,S(4dac7833,ebbeab0b,ec8edac7,cfc49bfd,b835362,f0130e9,e44452f6,a82effd4,fc9d1970,f230aa68,6114ada5,7b4237dd,133dc3b5,db8ec1f0,ccd09aa,23c740a)\n,S(9b755881,45a65d54,19b40226,e535df5b,4b44de41,1b93d71,31f3102,d56dbeeb,d0324171,d6937b7,c9b38290,7dbba3b5,c1516061,59e7ce1f,a1ed9d11,e089a02d)\n,S(1bd6ceb9,2592a7d7,a66e6e8b,1b645db5,98b525ca,461dc4bd,b583ed9a,cbbc8bdd,9a59de87,84a98bea,48b7abb1,a5b7055,5a1c4ce5,551cde4e,7b790ac4,9a29944c)\n,S(25a8b2b9,3b360941,6525b08a,7fe786e9,6b3a3c7d,8b444637,268f5355,bd5b56ee,3c58ccf7,5734687f,dbd027e6,3ec6c550,45f131ae,df71a40a,c45e4e8b,965f22ec)\n,S(244b2833,27c33efb,221a5767,15225d6a,bf5a1caa,8da543c0,d88b21e5,17ed9f5f,220036ac,e48d8953,5aecec92,a29f5012,37f83ce6,44380db,c229f0bf,c1f53d7d)\n,S(6f97ac0f,27b87905,6b442d13,e566978e,91f0cc1d,d6ac1e64,e9764a35,325dd1b7,83c6e70c,fac6c707,226ce1cc,691b38a0,7e937f5a,5f2d9c81,4dd0d3ff,9f433d32)\n,S(72c5d60f,eb014e2d,ba8265ca,d454f261,2d6abcd4,b2236bad,c94c4801,561dce1f,e3119a19,7ef91963,b3b28216,3c5d3acb,97b281b6,d246cbf0,690b40da,63978fe2)\n#endif\n#if WINDOW_G > 8\n,S(a96d2da0,1b10186,6998659d,f441a1b0,2af32b94,aae8c6ea,707d9ed0,d5f33825,660d7d83,5da5235,9f7cfd41,28c370aa,5659ea71,16a91690,6c0e8108,a513f9f)\n,S(2cce6f63,4d815ecc,1981d200,87616677,d906aa27,990c4875,17314dc5,5be3c4fa,615210dd,bd599e91,1b6f997a,fd05475,b33cb274,c9ecb6e5,d3c23323,beba4b50)\n,S(992b0084,525dd399,d98602d9,8b8d53b2,4558fafc,758a2f46,60e89bd6,a645f0c4,83ca98d2,26545a29,8c45f40b,11420602,f5a5c70e,595eea57,2da64d61,a4e2f98d)\n,S(434efb45,3089619f,cc761ee4,3fd4b77d,c6b0c69e,b45eb88e,44ef766e,9beb7357,3dbb0d6d,1c0b92e,5965586d,236c0be9,26967ac8,830b9bd0,1e9efc2,2a9291ea)\n,S(a2179ad,2c683306,a2e4735,93efe304,f0dbf589,c4dc2b88,4bddc5c7,e3fbc156,ee4539f8,ab980176,a18e6dfa,bdb609d2,88a2d223,86dcb20,19207afa,f6033c1f)\n,S(3934081e,d3e1e147,aa52bb40,9221ef6,a445f22a,66718f14,6d63907a,ef05a2e1,bc370656,31391b7a,209e79d4,9f1e959b,d3a9fefe,752c6062,14fab290,a7b5b3c7)\n,S(35bc24e1,59a2b939,438354,6cc4255f,f1f3f7e2,105293db,39688e07,df95d8ef,dee1fc70,a9698da,f7abeb5c,56724f8,e87e0cd3,8849edfa,246ed0a8,9223ae15)\n,S(f5d1e75c,251fb473,8552a0ee,f05d8e65,63aa14e1,bcae5b48,bc7e5258,b948127d,e260c1bc,7044f058,8f409134,d298528b,e7d586f4,bf7b6fe,92d212a8,6f7170fe)\n,S(ee0a76d3,6fed282f,a1170dd,6acb7743,f9617bb3,60350f54,d12da1cc,7eb121c,f8cfc2db,eba6960f,e6135ef,ff9e10ca,4e56c458,4b42b516,6dbf7af1,420ba5b1)\n,S(9e3b87cf,78927664,15cab377,f1774d14,4d1879f6,16da5676,f94790d1,9ca689d8,f8f34522,da3ca2ac,b273b0c2,b1b1f26a,7a9c2d96,b4547482,266a8e6d,bab3b577)\n,S(e26f256f,d08942c0,3c85b89e,e66b8b50,12f409c7,4f625152,86e5b310,eb4868f0,bab3c4d9,6fea49fa,6d08c656,23c9b127,3552c23f,3c4f12f2,1bbe8bfb,56f210f9)\n,S(8ac74046,a5d38398,d14b6763,4f07abc5,a3f5c852,ea8c421c,f0858980,11da6c2,d20ca793,f56e3198,854f5916,35402c2,4a71af95,c84288e,1495d324,7229b3dc)\n,S(5b00e095,634694cc,93d531a8,6e81d29e,753928bf,b2c83a83,ac677a92,55932bd0,8d2f267a,8071c48c,616daf18,d587e,42882b33,748032d6,4bc3efd6,60a99656)\n,S(162190c4,80c5d7b,ab1ae4ba,7b2a6611,546ffb9a,b4e9ea87,2c0357f8,9e11f0b1,db5e2104,12448a9c,e586d7a3,13bdcc6d,bb84192e,98c5d9d8,79693030,92423525)\n,S(f6a84421,b4b383e8,87f8520,e06017db,476774dc,9aff636c,f26a676c,85b145b1,504c71a9,596770ed,7a2da8,2e8fe1ee,93717215,bf88e0a8,ed74a80,4037a3b3)\n,S(1f02d142,f0b5d3d8,b3f8937d,a49f908d,83e5919e,55c9c134,55a759a9,932dd6e5,e6a5cb33,8ed36df7,50ec2eae,5db7c9ff,fbc9035f,48ae0348,fb3882da,39863e65)\n,S(61f4d96b,c326a1fe,a2ae38c3,73484a56,68e29bf5,12d77a04,34a62278,1d78899f,651ef738,62005ac7,64f97021,6180c25e,2172724b,375e6b38,b3a37ad2,d7b4aab8)\n,S(ba7d5c0d,623c5e79,8088a71f,8d2916e0,7c7ebe2b,1afa19c1,9c917cae,31c11616,da409f40,d7e3f6c,78655153,fb35595,a1ec37e7,e66c8958,ce45b07d,bd5f5a51)\n,S(8b90a590,eacb977c,6e6a68ee,6dbc3e19,fe5a92a6,9abc43c3,bb16f9d1,925bdb09,a5cf5f42,ef655d59,ae734e1,f746a752,4d01ef75,d829b9a9,2a035180,fb5df718)\n,S(87f35227,21914cfd,ce8294a3,cb5ae171,f0d994ff,f55b25b7,1c9e9aac,dff4fe4c,cc71d1af,530bc5e1,eae7c1ef,b9a91335,f26b283f,222a3552,dda24c28,64babb2f)\n,S(aeea4d36,ba405159,bf0ffe8a,5530f1f3,83d5509f,187ef58b,6c1eee4a,cb77a15d,db563dea,e7403df8,7d3031c2,48aaa28d,96958f7d,ce36b3f7,8d55607a,60d3ac1a)\n,S(300fe98d,3996eb9d,57c6f1ef,8058d4c,d8dda436,5774edb6,2a338a59,afcc7111,d148a017,8fdda40c,f937913c,143b76fd,d2e6e226,d27225e3,a49658b2,38c40e77)\n,S(c700af5e,22cd146e,839095a1,f6743e4f,d01e9c1b,76d4c73a,a5005f42,99c19fdb,3fe00181,b1f01c27,27ab1fc6,bb6ea569,d4a3092,c2d511d2,8b5546aa,194b32c0)\n,S(d03d08e1,17b94138,1aa147af,38448539,94228f75,f96bb4a5,941c3748,cf50bc60,5b119ffd,2785bcc5,2e0bfbfd,c541da8d,f47dd076,e91440fa,10e071b3,a896e31d)\n,S(6c6710fa,17a520b8,56d7fadb,6af81a5f,ea9c983e,c94cf832,b395da5f,c22bd361,db4efd26,36e281ea,419964f3,c0897b05,b036a408,25ed4ad6,4fba393c,f2804941)\n,S(d7b5c239,9df47a16,6b6cb900,d08a5d9a,5ea3bfe9,94f861d9,b46f3fbd,a3d91bbb,ed791f4e,4ab1c25e,9c83494d,794ffe1f,a3c8a065,29c0b710,cffd597d,64efe8ba)\n,S(90f699ab,8f728152,e2deb8dc,ceaaa3ee,53ff2f23,2341a952,4aba9e8e,50f66c06,8bd0c3a7,7f5312bb,9d46d80e,c36921f8,561558ce,6e63c08e,641c82c9,fefce91d)\n,S(4d0eae3e,3d7adc34,c91eaead,6a16f569,37557dce,2b68744a,bb9ae71a,8dfb65cc,816b0806,a9508731,ba99a685,142aa52e,6e874c99,5096a53,52c6e2f2,1fa3de5a)\n,S(46cd9edd,ec318498,dfb4f815,3315185d,689a2399,8e06b1d0,2438f7c9,b2f7de62,3b5bc1a3,d5fd7874,8c964a8b,b813388b,e0d5d168,1247d008,10a846fa,561f29bc)\n,S(4aac80e,3f6eaab7,1c576297,b4552e40,653748fe,21a580ae,bce4eb83,2ff730b,3d42a00d,8014f46a,80fe2dd5,bac6a046,40d331a9,4f1de050,9e435398,6c8c7954)\n,S(59bea661,b73d9c09,131e4573,199937a,e03e96f6,2ecbc637,4bb681a5,582a4114,31a20be8,ee8a2c2e,81d062e7,8e891504,d9f2639a,bd5db5c1,30be3d2c,b1afa47d)\n,S(7fe9065,88b2ee92,2b19acd3,fec7a4de,9ee089a4,a4e1c338,5e293567,90ca6037,dfb45d90,c5f43eeb,1f5eb326,20763ff4,2659b763,e7ec72a7,c69e9369,35e5c128)\n,S(db390f91,32277889,784b5e4a,cf8f2fd1,f3a5fc47,f2c8262f,19dc9518,95322157,4364955b,241c831f,94fd7d4,da63db19,2aaeb5c0,ade82dc8,d5d61cac,d690bbad)\n,S(34dd0266,e5fc19ac,7daa9e61,5ae8f78c,985732a6,1c53c29,e6e5d407,7391ebc8,c2d6b6d8,e73fe00,e6013b1d,2c2b48bc,77a5db6b,45232ddb,6611ea1f,c5dd797b)\n,S(eea7f72b,7e31608d,d3dfcfbe,16e2ef95,5e6c7ec5,328f84db,336e3df1,9d1772ab,9662c8f1,ccdea4c3,48ea6d94,739aa747,17219556,c6be9b8,8af0d30d,514004bb)\n,S(c6af087a,f1b10eb3,93de412d,de856129,9376d264,36d907fc,10d3e7a3,88c391f2,ba99d62e,31856457,8ad8847a,9cfeaba5,e5ff9824,2c614959,eeeb4ae7,50825144)\n,S(eae34735,6c715740,ab73d034,bcb43f5a,aff37fbf,50d35518,1364c999,feccefc7,b9386c75,da8bf645,cd6f15d8,4944f74b,9685256d,b61fda98,79fe6639,92fe4703)\n,S(4a548c25,f4d8f54,4f9a27e,64e49626,41b68ae3,1d90461,65c24ff7,fb40438f,ae9f2c85,bd608cf6,ef5e40c6,7e29a63d,4c274215,c2a0d578,38252f28,196f6d10)\n,S(61925679,dd6545a8,ea19743d,7cb3c0bf,453318d9,e180da53,f43af2b0,ecf744af,a0682d84,d7215372,e9ec062c,a3e4aa1f,47fc551d,44e3d1a1,7260a44f,2bcb184d)\n,S(e1db5e86,9574ab76,d4fa260d,2425ef62,50267ab8,52ff04fe,25f0150,9137ea2a,c8eaf421,9fd5f7a3,6c1a99a1,d0c61250,836e204b,fb496774,83f43c81,511905a8)\n,S(3062cbca,73923842,2a0ab862,a1fd84f0,38e63691,cfc204a7,d2f9d263,d248c7f1,8f112e57,e3f2970,dce89eee,1e184310,721a85f1,cc9feb2c,f55c047f,dd9670cb)\n,S(67c393cc,aa9736fc,eec7a861,eb53f953,9da74ff2,97764f4e,4e814004,4da4f739,93d329d0,9a165fe2,2f8009d5,ad59b524,33ac24d5,46c7d394,2d147c4d,49853203)\n,S(c67471f2,36cf2187,ee5a5619,d581cc7d,ac5bc5b1,e8bb728,f943084f,e899bf5e,75c90c9c,787b318d,943c3247,74cbbcc8,3a533f37,fb684aea,62fe6848,8de2c513)\n,S(d5015fef,d5938dd9,2133d7a4,25aaac5,12143acc,6547070,1827e98a,e4ed1b52,44305616,a02236f1,5c37c0d6,51d845dc,e9966860,b798f79f,4006c25d,7cf03d6b)\n,S(aebcbf65,aaa89615,cb48ed56,4002ed9a,243ca309,1cf503b7,3c1929ce,8164f2d2,4fc1f25d,1a30ee2b,4220305b,a9c88e86,a6ee7f55,55399ee5,35e7d37f,e4b3f019)\n,S(15cb1617,1727deef,49ad6821,932a39d1,bb8f980b,b5370d81,5ef00ff,ebb30e43,64ad8c82,87fc053f,ee35c1b9,9734b34d,2dfff86b,490ead93,b1fe7d2b,f80ebd7a)\n,S(d404209e,8530d674,9bb88a5,525211a1,19fb2523,63e2698,6bd03080,4c49c123,3763fd68,fdb85d19,e8506275,3b5a327c,46ef87be,8a3432c5,62bcc622,40a7a128)\n,S(f3abf8cf,c232849,58e330c2,fc327ac4,d40b4497,f422aa4e,d42e9381,9bffdd96,50861f05,d831327c,3e907643,2d7a7621,d1dfe9ec,7ccf2061,cc720e9a,7d5b0d5d)\n,S(78a32893,2ee9dbfb,3f84755a,651b9d23,5cf92b46,c3e4bb4e,57b7ff6f,7c874dea,925b783a,966721f4,6eaccd87,495eab7d,b3c36eb2,92c1a473,b4617f6b,9ac85895)\n,S(8165210f,5d146f8a,1ac1ed91,a7bb678d,1b7d15e4,3ed55e8d,f6503209,a750cd4a,fe390d3a,19e22bdc,cbd45875,e396c713,85954166,a1edb63a,384b8587,915d260d)\n,S(75269de8,6c2f3d34,cdf17dd6,f3efa198,ba73431f,cf0072f3,633ca57f,7dfe3f09,b162a65f,d19927ec,4446e3db,d5ee8850,f463f39f,1df1a0b1,f5ed153e,704805bd)\n,S(5e36ce8f,b393949e,5b9c4e10,44fb2ff7,c520a7b7,a9016b38,9544e512,427145b0,7c40e718,292f96a4,1d9822ce,d54aea90,22074c5c,c82ba4e,7d39a4e0,7811614c)\n,S(c8cc7129,fdebbfc6,c0576edc,6ac983e5,c249d360,76da7d25,b05c0b6b,16632746,48a8cce3,a77e4498,76d1a332,c539feba,2653fbaf,d4f75e68,e4674d78,4c716fb1)\n,S(9fe1db36,f1ee3e6d,3924d2a9,ae3ddcaf,fa85798b,7383a1dd,2d6c0c14,ea46973f,1d35b6a8,607045c0,95ed9658,80212b63,43dc55ec,beb3223e,7c2e76ce,2c74f6d2)\n,S(4ca8ab8a,3d45748e,6e19e02d,dc351279,e23648db,d26d2465,7c9713f5,bc8ecda2,8a5866ad,9bb7db92,273c9f23,c0876c95,13b8a68d,bb20c5cf,164a9a39,4e3e73da)\n,S(c8d0150,e4a989ec,5cdbc724,21b1e29f,f1f30818,1d8117b1,3d376f58,b72060c0,5c5880a4,c5a73a4a,1ae42a9d,f0b20032,7ac4a732,cb26e717,49e63365,5082ebd1)\n,S(3d61557b,b4b9fde6,49fe1b7c,981c9883,9e368444,f130bfea,fc1e1a0c,12f2aa31,933167ff,62cd840b,3a960c90,e6b1c37e,1e233695,318ea286,71c87992,de5b56f9)\n,S(67569f9f,fd44ca09,5b478dbb,85c3ed1f,feaadaed,cb624552,ccfaf169,24e69e2a,62bb2948,230fbd2c,aa941288,7adfb24b,d16619de,af0fc102,feb1b26d,67eb7fcc)\n,S(6313d13e,debf1401,eb7d279,2c66daa8,6e3075d0,3cf0daf7,f3b753e,7372fbc2,44621230,50eb1245,86975455,63e06e2f,2839f874,beaff9c2,f65e26ad,d3573ef3)\n,S(6f8ec9e7,fbbe6e8c,d0e3085b,47c6cb2b,88529f2,15f13195,5e2fde24,4dd23968,1fb61e14,523b3fae,b543b215,dc46eeeb,23e1950a,8301c78d,c510c76f,ed36cd79)\n,S(56613dac,3c5aa1ac,bd9a0ec2,f839b4c3,36f0ae58,e0e02244,7bec0546,710b7f6c,247263ab,86c398f9,3b23319,4434af8b,530908bd,dd7f716c,f7b73aa9,8eca79e8)\n,S(c9de15e7,b4147219,137e6e57,c5a7ddd6,17e91ab0,6859dda0,41eb3c21,87aee08c,c7178ea5,cfa056d0,dfd11c87,715591cc,40cc5db1,f5e4b70f,d8ffbfc4,3f8b0009)\n,S(7590a4a,627d5e90,e42a4b0f,6be6497a,f906182d,d2dddc48,a8b6bbfd,f56c0504,d611e21a,b5498760,5c97e878,baa464bc,cc5bd875,353b69f8,1f93ce2a,a6c38587)\n,S(94b1da0f,b310e056,db0dff72,81db3362,1fcc555d,bf3c973b,76097908,7fe19d6a,8318893d,d5b41a56,33a2ab4,ae4b953c,45c42e9c,8f2fd159,85286de3,fd4fc217)\n#endif\n#if WINDOW_G > 9\n,S(b5af4299,bcdacef1,e07d081,daec2cfa,d6f8f821,38e151a5,f20e6d52,84c9a6cb,c0984407,8a7db82d,f572987e,b137dc09,c8cf65fd,aedcb20,43b2479b,ab95448d)\n,S(5f49ad43,70744587,3980a153,c851829b,f8ef6141,9889bb0c,3c476847,6939c3e3,5c40d385,20f56c3d,ba08ae1,b40fc24a,2ae25c94,45cae0f7,d01d1800,747e04eb)\n,S(f6bb067f,88ccc11c,64e30d1a,e6893942,16bea3bf,26ec9c64,5cde1b9e,487da385,315a476d,7268978c,d89d4ec8,adde4a83,28dbfdd9,f2bf44fe,ad4ed721,78288f55)\n,S(7b47cede,c02b19e0,94daea0e,ec000455,52690b49,44b3f10,beeed2bf,f9df6950,1bcda5f4,9beedec9,6ebac5a7,957918af,53b7ccd8,c211330,280ed93b,e0efe9a6)\n,S(ba69d7f3,82d56d9,eb65e1ab,2d70f52d,18223621,c0029035,a78fd660,9940876d,5f44a2fd,56d5289c,f36bdb9,50ee2538,1d1cf935,ae1aec76,84b6d11f,975d393d)\n,S(a3b70894,d226c195,223713bf,330ba39,fe7ec35f,9743347d,1d3dfdb9,7bd929ff,5d0cbdf,42755aa0,355ad2e1,ab39479,495edf2c,20bb0aa5,93cc04cd,56ae6135)\n,S(c756e23e,bb2d81fd,91fe73b5,20eb3bfe,5ae602b3,448cf84f,e8da37d,d1c804e5,89f4b6fa,edf86b9b,ca9f52b2,9864a982,5a4faba9,d4fb35f8,98511210,34df49ff)\n,S(36327c35,6fab94ab,f791c234,1c39049c,65410e9c,6cdfaa00,d172ee84,3671822c,fe3588a4,698c8d35,f0e01f04,e94f7039,eb745631,8c25927a,be7d061f,d3ed4c6d)\n,S(3b75bfbe,8e372311,f46ecf6f,c5eb2af4,b66051b1,874b0c32,1189e106,37dd21bb,b9144a33,e3c3339a,4595e248,87940b4e,2e42a095,d7d1bc2a,ea50aa29,5a879908)\n,S(44a61f10,57b4e88a,c55ed72,1f8f4477,5f0272bd,379a97b4,d92a7f75,f0d3c5e2,e870ea65,80340464,9716ec1f,5b79392,18162306,6dc14086,111de144,82d80141)\n,S(11ae02f7,663c0a,24c6fe5,ce9206ed,1ebed2e6,ca294acb,74c9a227,97fefd,635a1b87,a262fb30,5008737a,e70422cd,a4e35766,940e424b,d697d28c,dfd6a36f)\n,S(c751310a,dfb25d14,2e6ab1b0,ab31b37c,8e987af2,105d5981,69085ca,3e142f5c,a4630dd8,ed2717a9,f10485a4,be685c5a,ccca851d,4bcc1886,4df943ba,ee821014)\n,S(fff4d7c6,4009f39c,41757b17,3eb2536c,a639b72b,e15af7f,790bddb7,efefe46a,694a798e,ffe22d1,1030697a,292a4bb1,4c110d6b,dad7edc6,e8976450,ce5080e5)\n,S(7d76ea39,c13c9f46,e931e8bc,1cd43707,932b1a,31254d18,c06c8ce9,c3f90534,bc14b2ba,8f0a3d8f,34c7cf7c,3458c916,4cee438b,39a5a6d4,d2a1c9fe,8be415bb)\n,S(b6efcad2,ca6ae4f3,6f080707,530aaaad,625fda5e,825f77e8,a6730e95,5e07ad39,4868d8ef,8a56d327,3f6f4a3,23ea6ad6,4694301a,1f6405f0,a421939,bdb1c765)\n,S(1a04b12a,a889c4a6,d37f9050,e75406d3,48e38faa,c0d2ab4a,e30caa6e,3633a32e,f43a0c8f,fad38d90,6c817dca,3e7ea09e,21e1c801,7af86966,c246ebc8,dc75911d)\n,S(adaeb0fe,9b345190,4e878b12,6c8edddf,b70e2500,5a4d6a6c,531aad51,83209b7e,2b26b16d,dd4d29a7,8cc6b4e,198e6ede,b1c59def,c6793173,f33cb039,d37522ad)\n,S(4e4ca02,3931f3fc,b512121d,2d632764,d97fa125,8460d0d1,9a94eb88,2c6e0679,ef90eecd,3704a6c9,454c6860,928eb332,cc917b17,f2594348,515822d1,84537467)\n,S(a1f3c279,df69c13a,711b5ee4,139f603b,5654ecac,adc02a22,a7c2087,c11e2971,57249794,54cb78dd,7ef69916,5efe2326,e8aafad7,a8a923b2,252523ad,b6a16b2d)\n,S(aac76f81,488668e6,f4b0c911,bc9675ff,c19424c8,6a6903c4,f4b13e0c,e798c7a5,24ae16df,dd6c7d6c,1391df3f,73609bc2,c3759536,eb277189,588a72d1,84dd2978)\n,S(70e94171,e59622f0,de360166,6498e6c9,ddce496,a15e30a2,a5bdb701,d0034769,d6d7c0a7,75a9cbef,2b84d4e8,200f92a,446111bb,cf46a57d,5e244f1a,1103b757)\n,S(ca17e5e7,11d44492,496fa849,c6ab1c47,3426706b,5b8282b6,f288e096,8ec78890,b3ddd632,2ce577b8,ddb9f501,e17d32cc,e6c58fee,4e283410,5e32f3e8,8bce2c2e)\n,S(1a16a58d,8d70fde8,6ac0700f,3a43ab9c,255ec001,8d5fe571,7ec6324a,2faa62e8,f2cb2eba,65aff0a3,dd7bc137,257c1d30,dc2eb6f3,7a3897e1,16c0eb1d,1a710c27)\n,S(8f2dde65,b4ddf10,c29c6bbf,5ab2ac11,2dd3357a,e3e5f01e,98190e32,94b9d4f2,e06b8cf7,e5a736d5,4e954bd,8591f7cd,79df335b,d3279f5d,80493fe4,df4c6afb)\n,S(3314b553,f8213e7c,80d4562e,cdb3564,ba1d7285,6c88d8c5,a3adda90,4950162,33e83c5e,e3f7c550,f94a7434,e3cad51e,b4dab462,13acc24,fc4aa1f9,fc43532d)\n,S(7c107ef4,65ac0c2f,fc5b11a3,348a7cc3,fa589554,ee2b6606,2af3c5ba,25304000,6b5bcf12,2e8a0705,d067fe78,e56d365e,89b5a979,c23f124b,508e63ee,975702c5)\n,S(e918a829,325adf67,511e257e,e5596d08,19be4605,36b20cb9,7b76a54a,5be4f8b3,1a92f0a0,b46152c3,e1ba8f0d,12119c15,b70af0ef,3ff0ebf,a9dc9207,cf2fa8ae)\n,S(8770da03,d4f3a4b9,e92dd2e3,be309c81,c346c97d,2cea15d1,e3fc94cf,41b9b079,d025430f,dc633d57,18d372fe,64f57fac,53f96461,1fb5005a,10ce842d,ab123c03)\n,S(c6b4ad3f,ae2b2557,b126a57f,6bbc039d,a6589f70,c6283ea1,7314aad5,acd8b22b,e8523dcd,2c1c3412,35df278d,e49c38df,85f2888e,cf3c76fb,46e1affa,d8d29bfe)\n,S(9aced948,6ffbf984,373b1e91,ff871619,4622741b,1e1ab968,9c88cb70,37a86e14,d7a7eb1f,1b4c31df,ff43cc32,1949c1d3,16e1e7ec,a6a852cd,e8e7f592,8b352d9)\n,S(af51536f,fccbdab4,c4f4015b,1e8aca69,b08bf055,e038b22b,87c54f5f,1b9007f3,b6bb0b4c,95c07ecf,49ffa85b,abb1d308,cbe813b7,703a27ef,cf849e,47130f7b)\n,S(ec5306df,3ea0abb5,6fc45a09,25c1c925,56e02ffa,18238c3e,5bb2ee53,11823ce2,c950cdb6,720f65f4,18065352,43c90bd8,9457f4bf,d941c9f6,89812840,2dee8b99)\n,S(293b1ca5,be127bc6,1a397ecd,59164363,587f468c,81de4d87,6c5d9bae,e72d90a0,4821030f,238e9f05,e93d81d9,1764863d,443a524,3d18e61b,ae26f74d,ba35d821)\n,S(ebe54b7d,99876ab6,b2951f0e,e68bfc10,16877142,22ef83c1,2561f486,b4865488,2a1d651c,caf8802f,fa699d91,b8242f51,58d84fa0,d481bc47,9246eeb8,6d381c07)\n,S(88f77523,3ab0d69b,ed220109,b29d0d99,33ac8325,445d19df,d38d9c69,3464acdc,8f915122,fbd95ef5,31ea2cb1,aec6bebf,8e059059,459c0d5b,79a282cb,cb276702)\n,S(1d84753d,e7210dd8,9db6cfa0,8ebe9797,c7fa40b9,6e94439f,b8117359,a2b3bb01,f7360b5a,ba53a4d8,7440b6d6,f540c485,2e889c33,9f34260d,abfa7861,f1f41ad6)\n,S(19e69df5,176f82c1,cf1ae032,cb388ce3,36f82a3e,5e741e1c,27fcefb5,311d4b2f,c401f4fe,c9ba53be,be175dc8,cc1d17b3,9d9f7af,5bb496e0,b95bba6,cbd5c143)\n,S(73189e02,c1f125ff,df1a9399,57f29aa5,19b04f5e,42adf729,53d354cc,aee3f2c9,52b8e88f,1c6e7cf8,621d21b0,1e406038,d901de1c,4101d424,1009c01,a537f704)\n,S(c5ebe082,8ff1a8bf,52f8956c,b747f1d3,278fd2b0,a5ae7669,1c256e9,2887a74f,ce58cb9,62e74b98,1ab97dc9,2d736b5e,c506e51d,6c09b382,3eff1cdb,cd259860)\n,S(783c1621,f7990e01,4296feed,3bc883d5,1a780867,c83b9166,435a0562,4982da76,370b3e2,c9a189c6,9c565c3e,8eb8019d,f5224574,bd5ffbc6,22f563e1,8a36da30)\n,S(555e7e80,ccc6a46,1724cbd6,4a53721d,fad66fcb,2c71d579,4d799f6f,fa2b3305,67bbf165,d39d7042,18f5ed31,28fe6dd6,db9b4809,b3270eb,63bda603,f44e9e41)\n,S(40c49a26,ab1cd46c,f1e8467e,242c6b1b,faa40a4,cacdd50a,4b0213a5,40243471,16950b00,5002622f,e0b9fdb4,c34224c3,ad55bf30,67f4e96b,dc2813f6,2fdadf86)\n,S(eb6b3be5,db098d18,9c810b9f,5593c746,47306226,d77e162,7c8b62f6,d7935298,3d295584,3f356f5c,1f990231,701cedc8,c84e9671,44be22fb,9bd74f0e,15c5bc8)\n,S(177218a4,2b55c169,1ca0a073,4d061b53,a0683536,9a04fca9,3f670ce,5eb26091,9611661a,a8a3bc73,7717f243,e5e8b97a,57e0e72,759f0f4e,cedb690c,b3a5fa42)\n,S(841a8fa2,f3bc5f8a,7d028c00,127c267a,ea0c3762,8b07ebe3,7f883a67,8fd2a680,579bf37d,b2fd1f77,a0057712,88dbbdcc,526938c,4f9ba89d,9a42d4f3,452cf1b0)\n,S(b01ef554,3a377f1e,c801421d,a399c53c,3585789c,d7e51691,32250a61,6edea82d,28f30ce9,7e29b2f1,3af626a0,7a37f14,82e119d1,e66389eb,9620200b,25a90265)\n,S(b93e014e,8e3cc643,17ee70d6,ef8c9918,ba344e7c,b38a9a6,2591b0ac,4f38904,129c185,5bdfd10c,6bf152e1,2ff89b4,d0b368ed,c0ae01f7,2b29fc95,240ac3d3)\n,S(e0f426f2,43c50d9a,ff80a1dd,26d63189,a00601c6,8ac81373,5fbf548,7acd522,96d883e0,951adc5e,304bd848,ccf39c2a,1c19382a,eb24ad1e,1430d705,deb749fc)\n,S(e11e9c74,40e897ad,2870adda,63b9ec04,d5379f14,b3bbbdf2,147ea9b7,9c73233c,49d6e54b,29197532,3f5a9df0,3e22e359,e125e34d,d9f3d6c5,cb9f0a20,6dc1f019)\n,S(91ad584b,c5ef145,3b796eca,20027cc2,ae38ee70,9ac4591c,79cf67a7,a96b2c2b,d815a213,a620c531,11f79e5d,b5d9c3c5,565dfd97,ece841e2,3e9c1ca7,530bac2a)\n,S(3e725392,f4fa34f2,7413785,cb322f35,1032971c,2303f3da,bfe40461,4299f8d2,8e323a51,5addeed5,f3548217,6907efa5,4e0c1d57,7895839e,42223e5,7708ae85)\n,S(5e87bec2,1a589ab,483c00ac,fa863f35,91d9119b,9a0239bc,ed4f5790,45a98160,a88a3b84,33c75c1f,9eaf3c15,9fc39a6e,33625f1c,d0cd7263,3a825023,f2e7d47b)\n,S(c2e08613,2cb93b35,749cb652,44e99909,da18260e,d252cf32,489fa1c8,d268a0ed,d3f2e3ad,1f16365d,d47038d6,854e0773,28e02e64,d05a4764,4ed0d82a,8c8a5761)\n,S(99304c5e,ccf09869,7b2193c2,31dd9432,3b9053d0,e4b9025c,74517ba7,f1978af,ee77fa7b,638b1396,6f7e77e3,43dd04a0,ba1324f3,1e0da111,338019aa,209dc789)\n,S(40e108c5,59adfb37,651f04f7,9ef895b,25a79f03,650d6b1d,1c21322a,b4c5c6bc,8980ab38,5733e648,84aff3f8,c47fef44,210eb2ab,a094eb2c,fc5e464b,679db653)\n,S(98c88257,2d190721,20c31528,7f508df4,6d6276dd,c9711aca,5bbeacdc,88c6a78a,5d1aa976,1f5c5ffb,d12ea7f4,8d0510e8,b57f270e,e08c3256,f3ee676b,41a61c92)\n,S(389aba7a,25e92306,b84eeab7,a16c37ae,d7b4cf09,806ff740,c05dab20,60af6fed,673ab0c9,ec48e2e8,d372ed60,812b2990,49c32637,35f61c13,d6f0ecf6,d065707e)\n,S(9dc64fba,832c956e,93efda62,e5f11b3a,6619eaaa,e539b732,61453eea,ca53df17,180b38a9,3c56ab10,a4267ad8,d8a358ef,8f60a9c9,9483889f,956bafda,f45990ac)\n,S(71118e18,e758c2c3,6203528b,8b6707ab,b3439b0c,d3d508a9,6759c155,fe4921f7,c2f61af1,2c1b4e9c,64908719,f11b52d1,76bf22f7,e1cc800b,5ec79e28,aa104ee0)\n,S(33bcedee,11b9f3c4,924e0990,9adc5fd1,46218b23,6531a242,45cbb2a8,3ec3d096,15f4bd1a,6c22c673,941a71f6,f4694fdb,f83b3e8d,5e317e9d,655057d5,acfbad0a)\n,S(4b599b3a,4ab5e9f1,f161e5cb,62fdba55,fbd97740,759871d0,e66b20dc,4e13ccb4,635039da,9035272b,8b706411,9b342144,6c96019a,2c6df423,2b18299d,4a3fb523)\n,S(19f6bf4c,dae54ca9,41b8f642,95136026,decb8dda,35e97627,5694365b,21269d10,a24c3fdc,90b06dc,264bca48,db27502f,6cb31a6b,609d3f3d,a1c92c64,cf3c95d7)\n,S(bc3df1a9,8027d14d,f6629adf,7ad073ae,8a270875,b177a67a,58dd46f,1b01314c,99dd3a91,54f51d07,2ee33e89,8d915189,93445065,770745e7,b6bb30ab,808d1f76)\n,S(977a4264,521a70e8,4d25f5b5,ac1ae5f6,c34ef31e,4dda285e,1ea4a9e5,7dd72c3c,f1bfc819,7aab2fe4,d0425b61,cd403fc9,dbf44f68,32e1c41b,4fce9b2a,2b9f5a0c)\n,S(5fdfde4a,85fc5a53,3ed4a7f5,8adc7b1c,98b2611,3e271b47,a1c12c69,dc9b339,3edf2baf,bd6a94e6,951bad5,26fb24b9,731c2588,b2f6eb1c,e9744f49,16c6555a)\n,S(b8bcd72c,dcd28afc,eeac1ac5,fb7db8c,afc17abf,82268747,6ce01423,e9e9c50d,82633c5,2e6dc057,9bbd9f2f,3771a53f,9cb6d0e3,6a7566db,f2c45125,3c55e9d)\n,S(6c20b999,133bc37b,c65d01eb,6e946565,721bc2e9,da735c72,8be8a41c,1f75c77,20caf674,d8ad036e,25f42aa4,7a5ae475,5e36f44a,79c5ff20,cf6df115,40b71e53)\n,S(bbe49141,69655f15,39ce4bf2,f2e919df,f877b5fa,163b7a70,22bc91ad,315adb07,8cd3e025,6618d23c,8c6b5ff6,db8fc0a5,a77b847f,ec876ac,40f76e9c,cbf93a1e)\n,S(748b3078,e38374bf,7f39bbb,c5641737,bf6dfeae,d3980c75,2fe14c68,65e73786,7f7cae0a,61a7dfa2,471f2c80,217fc847,ea86b6b0,6297aeb2,8f3c94cf,2a811ac8)\n,S(fa63c7c5,b89a2559,4615728b,2272cf68,5d39d592,d052c0bc,d23d48be,c764e4b4,c4c32ba2,77519d60,e1e38a50,6d67d041,804724d6,5cb4dd31,fbe7d692,8ca47c8a)\n,S(c2ed7197,d014e380,a365ea13,d948314b,86978eb0,70e3e444,6c953871,cc56c91c,5c73c293,e7c1cd18,f7854a09,d8b9b0fb,3404bdb7,737dc070,9bdc01e,466a595e)\n,S(2514c1ef,cb1e0bd6,c2f34e84,6f3e8006,6c2b3a04,c0d9fab5,f22fe872,6fc266be,c5a0ac6c,7bbb2d9,ff844346,65f66ec6,507c35dd,8ccf9ad0,69a1ec94,c64e3eb3)\n,S(5bc07f05,11647f2,58dd2e28,9a3843c8,e2318bff,c96a081d,f6b6ef94,4e286350,213ce093,1217ef04,8d87d059,f2584db5,7a91c465,1e112c66,a41f85ab,ebbcbea4)\n,S(edb56e42,97375b03,8a573f70,67ae464f,db9c1335,f6a03dd8,862a1731,9a3cad8a,d3e61a70,16f8d546,61b8414a,426f3be4,35862053,1d981f2e,5314447f,15ef5fa7)\n,S(2925276e,78266481,3bf60998,2e028646,6849088e,d0d77d55,817c8d9d,73d5d732,f53157a6,a97c989d,ceb2d755,dbb0cee1,84b33213,20dd6d22,62213fe4,9a87296f)\n,S(2c4579d5,bda0f4a5,37209882,937019e9,91286379,c3afb37f,a69e409e,9bc0a034,e150bf4d,d889c3c4,655acd23,f3107bca,a319d467,b1b9b15c,336ca934,5ef7d99c)\n,S(5f260a00,11f9f876,bbe29587,af31832,25f21b8,42698b3d,5688545,a8808904,6ad33a32,164caa1f,7a4d2ce0,6eac3d,736fe64e,d83a3a9b,53473a89,8ee02350)\n,S(3bbbbcc6,12095ec9,52fd430,f3fb3d6a,9d1f2c69,e8885100,d65a4d7,b6ac4b8b,328e828,3846a6e7,db5b090f,8c9581da,40d244cb,aa3b5948,7e4f9faa,550b0c97)\n,S(4985027b,dd0fd8ef,fec9af44,bc222f4a,343e80ca,662d917d,affb9d81,956acff0,58befd2e,37a36e41,305561b5,f2716a23,460b1014,fe814654,68c16c22,3b8affda)\n,S(214638e8,d2e30891,9b5eb2d8,803b3dcc,6e826ecc,e1b59b,92e263d5,67959de7,9dd8921,6f131e29,35ae0454,ff5fc9c2,dc22c0f1,c8de7dd8,ad9d41e4,f632342a)\n,S(6ced8705,5ced2d6a,f3e3532b,965e0a31,6876c110,69155f35,444004f6,e6f3cfdd,f51b1aab,c86f556f,8b7ba4e2,a1e6aee7,55b17c01,997fcac0,a83eb56f,7e546ec6)\n,S(95016e67,876c936c,e3263498,7859d1ad,7fc3ade4,4219727,30a1c886,c9dcfacb,299e78c4,e6e266ee,ffbd284b,81005bab,4df7232f,2e43f160,742bb392,6af4f660)\n,S(4bec66c8,30401c39,c42a8019,fc398cf0,c513d20f,9db30763,51315319,ee6f23f2,f1dffe92,3b7d4609,871aa916,28929c63,4fcdeda1,543fc3d5,8e8b2735,938514fc)\n,S(b50513d1,40513b97,6ac0015a,60e53ae5,9088c4ef,5ab27bb2,7f3eda78,848a59c7,9c41cae5,1182e6c2,3fb254c5,1b786ccd,dc9282c9,a6674841,29a5894b,99c36399)\n,S(59792653,3989a039,6a69bda3,8a920ac9,d1df3845,26f30c00,3e415593,b690708d,7f2c14b7,274887db,5e656192,19ee6737,4c750cb3,97ae4bab,3a3ed02f,1aba648f)\n,S(7ba2b766,cf012a93,478fe2b3,e916d665,251cc7f9,3ec16dd3,4db37056,5eacf6f,14fd8938,f950798c,37121286,5e8bdd14,3dcc7e8c,2c84aa69,3fb311f,856404bb)\n,S(3062f2fe,f69c90d9,fc947af8,a9e839cd,7f9e9d22,566bd3a7,1c43df9b,eab5d6bb,db84a833,49916d41,7fde7b71,9d92a716,64047d4,21a36bba,ad9972bc,6f5ee58)\n,S(ed5f949d,69dbec8a,77f4d695,cb446700,f6fae687,e327cce3,db38c2fd,54b06e74,4724e060,57b3d50,65104ff9,29950bcb,2a690723,f15999fd,ee62febf,2d8930e3)\n,S(4d655e03,30028276,e9312fe,a6acc010,30e12950,9ebd68d3,d7170e46,61b7cdc,90efc122,6c27549b,2f5e046b,69e97f04,4399579e,278ccd0b,7bcee523,10ea99bb)\n,S(f6b60756,b888efec,d0a9edf4,a483f95b,68e05e80,c351a60d,bf166faa,eaf1b35d,27bedebd,aa781584,6a896b24,1afaf9b0,cb57e98f,bce5df6,bfd22a3d,38a5fb8c)\n,S(cc592caa,942ba237,72c4db94,58d6ea2c,8c81c538,8fc7cb51,6ca30188,a3c55748,36e2f7cd,358e5608,36e77d10,361c3f1,bb6bd2b1,d640307c,63d512d1,db288158)\n,S(4acba9dc,a5bb4698,21a3acb8,cedf4304,f9372161,976d0edf,6a7a032f,f6c1a456,b36e983a,b2ab47f3,3e72287e,9bbd02cd,d6fb302a,972f2166,9cae4e85,52262437)\n,S(c8a5185e,42279d3,2b50e0c6,1b9ce961,7be3633d,84a9472d,97446ddb,eb061f91,cfaa50b7,445e189b,d64c1df7,4668eeb1,cdb7cbd1,ff65c0ff,3c38d22d,9bd4b5cb)\n,S(c1c95567,7f4f611,365168a8,89de10ad,535faf08,65f8d20e,52b1041,d35f18f9,34f7bc3b,3d956b63,9afc1eb,956f4472,543919e1,3708e7eb,537ab941,48033749)\n,S(8df4fbb7,36f6736e,b4a09370,33f7d256,8bb68d68,f3e1f8fa,8df1ae51,d236a8f3,3d7185fe,8e9a2d00,3987af26,71bb3850,cef6b0f7,70770c81,22977764,5d02122c)\n,S(d635f0,e35c7cb8,f2aa1ec0,c475011d,c2c8bbb6,d1ebc297,c2baa5e6,aa5af3dd,926ebd,c588e8b3,1a990a5b,5907ae5f,441e5a99,1853c643,5e36803c,7ba51a2f)\n,S(b58d12d,5f865375,7514ea38,30e38e05,3678b525,e8b51923,d6460720,b46a4bc,f7b59183,5b0ebab3,935d587c,e995c0b4,d77c9e40,ea4837f6,48e44841,7438d3e)\n,S(bb7c6a8c,b4013640,ecfad075,578e89ae,12cb4253,6461d780,11ba76db,da9a7f36,7dda0258,3774d618,68995b83,5708295a,3c2f5c40,306dcba7,d1c20da1,4836581c)\n,S(14f6f0f7,92cc8cef,9dca990a,7fa5b7aa,f116b819,722cfb91,9683b298,3514a9e6,88c35f92,7a07598c,90ce5aac,4b3fecb5,2261045f,f23800b9,7b96f210,3a4d7055)\n,S(4b95e5f4,eb9fa118,5ddad896,457f4aa2,fb60f4d0,496ad4fa,76bbbce7,77448541,1e100787,513acb31,ba087f51,201201ed,502d1f08,f7e2b8f4,d27706d1,45e71d21)\n,S(e9a17fc0,67f75b2c,6384aa31,223355a3,a7af5366,4d85dc16,dcecbd2a,364b63ae,420a2388,ad674523,62f8fcf0,12b601ab,a40e06a,1b4dac1,9560c085,de7fb8c7)\n,S(39d8536,f320ec81,4ee3d066,c0834130,96d4ff43,8331a81c,f10ad544,43ff9169,70ee89e9,1478e898,60d66a55,6054abd0,c7434535,13a7a3be,7a76e367,c28ca248)\n,S(9779a0c8,8624d6c,beb1dc72,f371ce26,9f95b993,c49ff20e,1daa3c,2fb636e8,9d9e27cc,67296c50,9da4b0e,6037920b,369684d8,a64cb907,d230a4ab,a0c2712e)\n,S(cd4c584a,1dabb48f,6a5c09de,9caf36ff,4a97471f,d1565586,bd78b4fb,66f0b401,95902ab1,eff06e2,b3e104b0,cad2c28e,6fd60eed,c47657f0,bc433411,273446f1)\n,S(46ca11f4,142362cb,513164f7,c72b776e,dbeb3f65,5d527196,88eabeea,2561aba4,8060431a,2a2ad442,dfb6d3cb,d6263c61,bcfd0946,6204e2f5,e832c4d5,a434c9ff)\n,S(dfebd179,1ffb63f5,76f5c753,50031a21,eb712de5,7e8f83b4,75ac39d8,8a94a513,cfed6c7e,39b2b54c,206aa0e2,2f7c610c,6576af2d,ecb28f0a,a71cb1ad,c7be75de)\n,S(c71c6532,82fd063b,44633d9d,7a3b94f9,43daf1a1,7967ffcf,e1238087,5d2c2469,62fcd7cd,e006a10,38df8aed,33abe940,f18a4736,52adeba8,620d1b54,a9d376d0)\n,S(63ebbb4d,dc8ba09a,4e2640fb,f48fb75a,6864ec41,fc1647b1,e9f8aef7,34c0ff37,e59d034b,fe16f4b,41d090e1,97360a85,dbf1ae4f,719c62df,77261205,da4ae28e)\n,S(650498c8,cb51bf16,58eeac61,61b5892d,ce6e5c1c,271d40bc,eea14db9,dd12814a,e7e66785,5d8e0193,24457769,bbd5d14a,7a614585,70ad5e6e,e3058af9,64a65279)\n,S(14a1e03f,14c00863,81599c07,b816df44,90815a8,40c1032a,c41225a8,47c43fd5,35244a59,bc6ba88f,46f66bac,9bb8ef5e,4926da38,50532ddb,6d6d606f,35fe98de)\n,S(1c9f6eb2,f6a8a1e8,ecf9a16,71154fff,a4f14c15,bbd50f08,4d6f5315,b6903c5c,e6bde1f5,2ca4ff63,9b66fc51,150eee99,5386383e,402f987d,d266065d,2a03a033)\n,S(1de71eed,bade7b1,7c80966,4b00d56c,b43ea61a,c0e069d9,7cff0218,f970f8bf,8d4b2de,77edeeae,d78d42e1,6b7bc94d,ea99d65d,985769bb,5c67da66,18ee1434)\n,S(f4432a80,ce954d2e,baa2f062,8bbab706,479f7a39,838d8c3,5a96eaab,5f5cb4b1,96fe6ead,ac34a40c,3cabf47,6fc09382,91f3d077,29c6302c,c67a189c,bed579bf)\n,S(8f71e74d,17964af4,5623d3f9,68424119,cb37e1ca,c1524737,4828b5e9,2519fb21,6990f0df,d7f0ca4b,a77678e4,ebf6946e,5b6b1720,869c91c,ec07854d,604865ab)\n,S(22293157,5e3dc25e,665546e2,96a83a0,5a09d052,cef701a1,20019c49,c6a6745e,aad8f887,42585607,c792bfae,8a941caa,83d05082,defea859,86a6ead8,e5c423b0)\n,S(6585fe63,2ef3a69a,816bf5f2,9e627650,cc57d069,3ac217c6,3b73aa2a,f248a096,820aa3bb,20281afe,edd9ca57,76ecc55f,dc8a893f,de11f7cc,12f37a83,6cfd9f8b)\n,S(22232479,e55c51ca,b2963ce5,abf06281,aaec472f,e610d339,1951e41f,93f67bf8,e192fab,2cf22d7f,e67f0514,bc1329a2,888a8f18,a8d6504b,b7c5a9bb,ebf927d2)\n,S(da8d02fd,e4ba069e,bccaba08,2b396c94,4460148b,70e98f60,8267db02,5ddf16fc,1a30213d,e337084a,47d67e7c,17a2e64d,579756d0,8b66f4d0,59a76021,e63fa2bb)\n,S(a6f72c62,854e82de,f1b8a006,64c4e8b9,ad49e092,78ee6501,708a9f18,92202ebf,8355972d,b08c8104,b7c56ab,c2318ef4,2e270989,1a83837e,daa35537,1d03ba4)\n,S(2074fd3a,309e85a0,5c6f8c35,937dcc56,a15077ce,99f5a8ee,8d55ae2a,3bc7db68,e11c02ea,cb783c94,2e58fc0e,806a9816,3061a4e9,aea9582e,53ae1f08,322cff97)\n,S(49ed5666,fae9aa2b,70cd316f,62a4b62e,29aa59f3,1826106c,8611c50c,79a1a5e3,5ca7e49a,ae144e2b,dcc0b19e,f986967a,1477c209,2a8368b6,324bac6c,807643f7)\n,S(2289ec7e,a1f7e4e9,85f472a7,13722335,b582c4e9,8e191468,3ed13622,5d6c1b1f,11e2b18,689a0867,517bff6,77fe40f7,b03f898b,d70e8902,61a512ca,d9cbbeb1)\n,S(ea852ebe,23f1efbe,d8ac64a5,58ba2ba3,fbed0e52,ffc70635,bc49cebf,85859164,bde2ef41,fe97a639,73266583,c7a4e415,25ef1351,5b25cfaf,c97aa635,41cbb824)\n,S(5718f0e6,7cc07d3f,1ac1a954,8fef08a4,290b257d,a4179855,3fe9be1b,d302f0ea,98ec4d5b,fca65d7e,e72d8bd5,3645a6af,a6ffcaa0,a2eb894f,d4e40ecf,69acbe90)\n,S(df62a2ab,d77afd7d,ee8f0650,b75458e3,10269c3f,780cdad5,50bebd92,4b810a4c,6a6606cc,e384d27b,80bea2e9,588663e0,8d39fe8e,9fc8a8cd,54c4829b,8e4c034)\n,S(1010fc45,4b0c268b,c339bd19,809508e7,9ea7dc0e,efd779aa,4974cdae,805e6668,686a3adb,681b597,2b30a323,c6b6bd2a,d51194f1,9d3d801c,3fa65fab,e96410e1)\n,S(8ac79852,75673818,69fe93c9,6141493e,72ca344,790487b,d5425ed6,9f5c5c18,bb314248,fcbfc867,d1972e04,b9ef1f90,775375f9,9d25bcec,684c72c9,bdd1c08e)\n,S(560e9711,88cbc7ce,c61f3bf4,45f0ade3,6f3f174d,219a160,5f9c8692,3f848b9d,9e92dace,6775cc67,bfbbf21f,c64e6e9d,4d133f8a,c18ee277,bc80ef6d,d1b9cd2f)\n#endif\n#if WINDOW_G > 10\n,S(8c464204,4b95eb66,cc95ca08,8469a1c0,28eea52f,7f709fe,e6d90700,f5fb943a,bf10fc5d,7bc25181,301b3a61,5ebea597,a3492025,953c3aa5,1a11271e,689d0223)\n,S(d293f74c,f3578b71,35377247,cd8b0367,7f2245da,f87453cb,4d8d1cc2,871eb5aa,86c2013a,61dfea14,63e45931,eb09050f,f080e3d4,ae357423,ba7afbed,a64a6f26)\n,S(35997241,ae757b1f,c767611e,c76eb935,fefbf7a7,33666aff,4c6bd744,d7687d35,bcbea61f,246bcd4c,c3c7fd35,7bd393da,2f36e0ef,cca0df9c,5994f96f,c44b2aa0)\n,S(d096097,7467197d,3c1a0ef8,44ee35dc,285a17c5,bd9e06de,15f36025,7f6464eb,342af6a5,1e06db96,692954bf,c79cde9e,3dd44869,9e88b03c,d144b70b,bd3e8783)\n,S(8e875c99,2aeaead6,7033a375,521b0f85,62125797,23a25470,bfdf898c,ae41a777,24aa273d,2d2f19bb,4e0ba10,13127ad2,a5ee6686,1ec6d0c6,53f7a989,73c0bbd8)\n,S(bf51d1f3,2703a4c,d1ef47d8,172c5bb8,d622f444,8569aee,d2de1b9,ae541855,8f81e352,b6c60acf,bbde6e40,99353d84,5918d931,4433c30f,3c60a710,cf9aa484)\n,S(6fb6b462,9726856,22b2d141,5083ef56,2ebb115b,6cdcbaee,696a8d4c,8341c26f,9c08f7bf,f9cfcd9e,cca923b3,e578ba45,468f2530,baca2032,a899f060,b83c9c73)\n,S(75583ac1,8b5cf78d,7de6a21f,aff045fb,1db56f68,6b2cf89d,678df62,93617438,8259a22c,b08546ff,e237c7d,9c669c96,71fe014,9840082d,f6790340,9b69f900)\n,S(42611933,a5d759ac,7ec51c89,31b76e95,4aabc2e3,61010f36,cdd8ff9c,b4c0ef92,88a644ce,6b8acbce,a378e2bd,54eb84c5,58cde403,f99cbf8,7830151d,21ed4261)\n,S(243a6dbf,6128f964,bdae776c,a716bdc5,6dff9c95,24baf845,8a43ade3,af520d2,262a2e8a,5ce4db48,d0401850,e92bdfa8,3dda744d,a3d9025d,6091f1a5,201b7e50)\n,S(212bd175,1548c6d2,41e9307,a7df15bc,46e57e2c,5a76bd58,82b1291,d8c2ac76,82461bc7,6cc97273,267cc788,a8b24082,57f04ef4,719a9aaa,e33cbd77,79391bc)\n,S(da6d030b,21f96d2a,aa0b3e56,28ae0ec8,8ca8a546,10bd61fb,c1a7c16b,4d61177b,5b5bc635,8fab0287,4a2b8596,1b49ec29,2c2aad1e,1eabbd0a,1cebdbe7,2e3f9fde)\n,S(dc230af0,55a243b0,a581e101,2eea48fc,4a43137e,cfe80108,86a9f4e3,f6c1f01f,d0f98e1b,e70a458d,7030120d,a3d7feed,2eb5a9ab,601718bb,950fa03e,568180ca)\n,S(82c2de3a,c815c686,98ce73b5,6f232684,ee9c5972,f0a44797,dc16d04b,a9089df1,1c847065,c6c2cc18,fa253b8e,c1fe178d,c859844,2c1fa432,54462d97,93b8573d)\n,S(6ca2de88,74e4916e,e1965dfa,200af89a,cc439f20,6a4077f6,67076149,e20494a3,6ef0b344,97aa85dd,a43cc1aa,57dc7ce6,cd51119d,ae96ae06,99b5119a,9a662043)\n,S(ba2687c4,1728fb65,206448f8,28400efb,cf1149a4,90bd31f8,8d33af53,7851d97f,96ad25f1,1f2ce7aa,e8b803bb,3c62cd32,3345500,243b1de5,d61f20b1,86b4c0c4)\n,S(ac362040,1947f301,16032d5a,4b303323,d311f533,e46a1aa5,f1ea2f08,d553e0d,53839f95,fef32884,5a75881f,a17db91c,1d5b981b,7b20937f,df171c3f,2cb30a22)\n,S(6780ecee,5b1b7205,68d4241e,c3b35c9e,4158c7c2,2dbba46b,ac769476,79049e13,9ac115f0,31e0888d,2dc90b9f,3562e732,46520d57,ecc7ae4e,e0fbf401,3057d9a8)\n,S(95377a47,e7a2d5d5,30510d62,2bbd3439,c0f7653a,ab294254,cbb10390,d2a63732,57ac9110,9dafb62c,fe1abe4d,fc64557b,bb01f76a,36649d7b,91be523,f8195fc0)\n,S(4f195bf,98fd83bf,7ee97c5,9bd42af5,486a8507,3327415e,85f17a17,2add8921,a56acf25,1c82323,6327cae3,6b1cadd,1a057bbc,f1ef3b59,a865c7b8,691cf3dc)\n,S(eccd1fd1,efe8299f,d2208240,adbaabce,cc0510d2,d7b6f6ba,d9e291b1,4cbcb53f,ec2ff321,6da50fa5,c57d6f2d,3198e019,2d9b6f8b,ffc26b29,13580447,a42c667c)\n,S(c757444a,f2c3425c,728ff41c,f7cb7475,502e7601,c1edf2b,1eec84e1,b058f438,e1d481b6,169f143e,29701105,bc8b6657,9cd267fc,685014b8,fd070283,6362e53a)\n,S(3562837e,bff50776,58d99662,7a11a367,aef3255c,1c470ac6,36f1b57c,645250b8,cdcf4a0d,97aa58fc,ccd374bb,bcafc00,fa1d0d35,ca7fab9c,f4d72d66,299234d8)\n,S(ce9dc245,f62e97ab,d2d339e9,7fac18b7,b1f2f07d,fb654a82,b113317c,86d4a3a1,f6e1e325,342afb8e,64fe8520,ec37abde,fcaf1b30,be6ecb79,27ba5615,f0d184d5)\n,S(ac022f3b,48ee44ba,9d271a8c,1a01fa8a,aab4818c,e5383dd5,42d9d6e3,2c858a12,1e0563a8,91f8d11f,1989e091,739611de,191e497e,66055aaf,45db9ba9,72ca76fa)\n,S(d1d4f682,cb12cfaa,e46e57e6,db6f2277,55a83782,88cca4ff,3a999c0b,a651d9f9,1b19bfe5,870e1931,4c23b4b0,71672233,1607264,acb8e960,488598e7,85e71a36)\n,S(79962171,bbddaf94,45fbacd4,f9bdd1a8,892e754b,2d0052ee,2435303a,ff1c8a37,b8ac27de,2a952beb,45472f77,b34c1354,fe47b6a9,daf0720a,b8515be3,7bb98a7d)\n,S(445a17c4,2390b604,bb3c3573,b061a2f1,20ecb3b1,83a0f8d8,cf032e3c,509d3b90,b75f4088,7c07fe5c,a0c057c8,7eff4966,4ea76941,e409a6aa,e34ad4b1,693f97b1)\n,S(6166b5f9,63a9f47f,5fac49a7,8d175763,8c39cd49,11d16ccf,b0e83bc3,f402051,ba337661,8302aeb2,213e4620,4ec57492,933d6df5,5a045d7e,5317ddf,e92430b3)\n,S(cd666e74,28901afe,8e67d0e4,48de7e3,30b6dbdb,a34db4a9,29315d3f,8b251531,af72d8b9,43cba540,e42398e7,49fc89ed,44095951,f11b24f9,e5451810,3802304b)\n,S(c833be8c,fd2f6fe0,46d837a1,1d990355,5a6285bc,d7b8814e,e839cbad,523ac72,7ea8f90b,44112363,a8d75153,150c3b4e,b6c07dbe,fe8c8ed6,3a24984,c9a6af03)\n,S(cc185f36,3036d385,d890ac1f,5e95b162,e40e4a4f,e8427613,98200369,f25ea477,e0768836,146d9c98,98aaabe5,a9ce12ef,f66d0775,4055eb42,832eeb9f,26338236)\n,S(148e0863,24bbc2ba,b67c9be7,407b809,77ccd910,e92c9770,47943c29,8c9c4a5a,89e83c85,9cddfc80,9de733ae,6138e97d,b706a331,fb7176ee,55dfe3ba,c2408797)\n,S(9b1539c1,aba5b583,5c88d9b1,92a3761d,cf8b649,54f53a7e,460e0122,bec95c76,391cde19,45be59da,d4c895f1,3aa1ce24,d8472e42,a232795b,967f21d5,acefdc18)\n,S(68a2e6c1,75fb01d3,76a9e575,ff427cc7,a6032774,a974bdd3,e93b8a73,e4495cd,153e6484,c8c30dde,5f269b74,1c599647,666cab7,e273d4f2,5573dc4e,78e00752)\n,S(58fe9049,35a5a40c,3b633440,533cccac,7669e9a2,e7c2f0b6,6c36c228,61dfb04e,b36905c5,92450e2d,71d06e2a,2d599a77,71ac1e27,15a79555,b39fbb60,5536e1bb)\n,S(823c0f96,dcbdd9b0,bfdaff2a,19b6027d,3e9bca6,e298378,3375a783,5eac7080,d91546cc,f34d9a58,babeb6d5,43bf3c36,8831a2b0,d9043db8,895cd208,f2ad0a7f)\n,S(4a56aeae,e908f908,55fe7b71,3013ee7,d6812152,4f7decaf,533cde20,2d14537,7e60c801,33b718d2,119995b3,3790eb9a,3129a7fb,2e030d8d,21af90a,c622b7a2)\n,S(6c0f3855,e6c4f5f2,c4594e2b,8881319b,82a64bf4,9fe0968a,71f6ca3b,f9240334,5c8e7b6d,a9efbba8,4b5ade85,305aead3,e1478ad1,b4d56fc8,3acfe34d,23b5203c)\n,S(d9cf8f2c,d1704907,15dde21c,f172e648,496e40b,5248f331,3aeba2a3,35ac9632,92a7c251,b440f930,bd98299,c35d57f7,15867e90,b6c3e8e6,b073815c,3c934344)\n,S(4bfcb492,8b91dc7b,afa7ed43,d9af3039,77592728,fcf1b9e2,7c6767f7,b993d898,276a06f1,ecd9d410,b34c9a4a,e3aa33b8,1854a4e9,e4703dda,7bfca949,a45d14f7)\n,S(abde5893,ac4032f4,4ed93dee,8156596e,7cdcc575,e5928792,944019ac,23c434e8,5e03a809,2b9e6044,e942af7a,7cef02fb,46162cb2,4c19916e,d774b00d,8195c40a)\n,S(205d6307,7a98a8e1,178814b4,9281da20,4482f1ae,31be20a8,3b3b0fd,526e1cc5,4bbe295c,943e3560,6b95cb19,d6e64bfc,b9cab7d2,55657614,7a79ff50,6fe4d780)\n,S(cb4c4c83,e6673a1c,6c228a42,36e6031d,b59653bc,45bf4b7c,3b98cdd2,441c43bd,142e0276,39267ea0,f7c2ff39,75afe714,62f3340c,1fea5149,cfe4e8ea,e31a2769)\n,S(25a1f4b2,7ff5bdfb,3af54a4b,493356ef,92ccf0b2,dec7c4f2,b5abb225,2cca77a7,1b25dd93,153f8341,7df3b3af,c991f2d9,36c32e8b,288a7fe9,3e9ff97b,335c3c38)\n,S(222f76a7,7eeca0d6,a511c863,a657cb89,5a1b7154,957b66dc,89ca77aa,2a54237b,a8f2bee0,64eff88d,87a598a,8665d295,a205c884,2f6a3492,7945a02f,2cb0b289)\n,S(32d4328d,1ad2651b,41bf1015,6936b406,379f5c26,99f1c2da,ec3cbd8f,3b4dfa8d,9f6de6e2,3294a33b,5f4d4062,3e478096,df5de0a1,d069290d,204ce930,7988261d)\n,S(cde9ecbe,6948cd70,3b193790,6662b7d,187d0830,cf991b14,e8265691,81f1d3f0,84887b32,e1218d2,9b77794c,e8ad56c5,f5abe8ff,f95515e2,4bce81b1,5b029720)\n,S(bc89f45c,3baaef4c,a8343582,6506a006,509f4e7e,265e4b80,11d53d3,a748947d,eff5bca2,714db146,7a272fce,534f79be,9fa15af,7226ba49,51129f5e,6fe68475)\n,S(62678cc0,eea2bbfe,2bd4ba65,5434a9ad,39b409b9,b57efdf0,9940f748,ddb51d4f,8d384f4f,d234d31d,1c161245,ef6dd54e,a5cc8ab9,e7bcc883,6735051c,37a74acf)\n,S(15e01d39,c63ae225,63dc89cf,3dfa2736,df7c0ac3,4fe86f8a,f219f933,86bc93d0,1f563532,314fcb81,c1725133,49769861,e7efb999,fa317ef4,2bc75588,10cfb13b)\n,S(4f8d2b49,3493258d,ff98e813,e428ae9c,52c60103,1bdbeb9,7b8f364b,2bac10e3,8c7d117b,67955db6,c0058028,3f919f57,1e8c58e4,216ca1bc,d66b264e,169b73f)\n,S(d14ce31a,2bf16b60,983e397c,ddd3588c,3b0d77b4,f449136f,1a789276,b56f1d61,9a15f620,b227d83a,3722ca6e,4dd7bbf5,833f24c7,2584f356,11ef3734,ad3f0910)\n,S(35221b4e,b8c275f5,c10d656c,9bfea000,24c1aa2,c4130841,9c3e8e3b,66f780f1,3d1c5a02,5274afcb,bd78382b,b2778657,6888d46,1b5dffa0,f8ec5dd9,3bf8e808)\n,S(82ed9c3b,1c76c1b8,f44ff6f2,9f443b20,83f68617,7270843c,49eac0aa,34a8ddc8,262e9e6b,c2ab2b86,7342081d,90002690,e81f5a58,aefd6fc4,8a91dc5d,e95f1340)\n,S(919e960e,acf2aa36,e86342f7,742e97c4,9c49b64a,ff5c6118,d181e349,10717b85,4b51a94e,a3ea1679,cd9ce9d5,ac329f13,ef530d42,c7821650,5a082fe4,d945b861)\n,S(cdacae3e,20ce551a,beeabcaf,a643ce62,edca3de1,acf06c30,65ffd366,5bc3ec7d,aaacbb13,872b076a,e28c326d,fa54f4ee,235df4a4,b341c9b1,3d322071,6eb95bb6)\n,S(1a4508e2,1bd05c09,f3d80f82,90726f08,de3a62ff,b663d5a8,f949ce26,92a5f2ab,52780ff0,976eb033,760459bf,4bf02994,c6e672c5,6d25d3e6,2b320f5,2cca97ba)\n,S(8e46eeed,5686f25c,a94f73d1,3f26c98a,e9129f77,f3aa18dd,d5214262,803a0b45,ee56d38d,7041eea7,c87f2ed1,e7f0aeb6,7253d556,610e8200,782c9af6,1dedcf4d)\n,S(782910fa,3bd6b309,dad797c1,5b618469,68d6171e,7a0a0532,a92e5bb3,697e4031,ff178365,c44c2a28,e84c31b8,946b0a80,717914ff,6d3f22dd,ee409753,44e4b3f4)\n,S(2ab9e8c,c5a710ca,6cc2d0a2,94f1d7d2,65c50aa8,f9069041,ae93c91a,e5f64e8a,aabcd0f,a2254bad,67cf23d,a5934947,18536602,a13d81c9,db23afc9,a7f89b9b)\n,S(d04667c4,4fb25b22,8320cc53,35252937,a094ddc2,4610f7a5,fcb1bd1d,6382c9e5,7c93613f,8bf048e7,86af436e,cac4fa86,6e5a91d8,3064f5c,e31d4794,b2b0f74e)\n,S(b9c476f9,799cdda4,a51b0476,c5838994,f157bd29,c9361252,def4af83,6e86b0f7,2ec7619b,c77948b3,f25cefbc,46845527,d1a9b0da,a90529ef,f13aab4a,ca97932e)\n,S(90bdedab,f13f9940,4b9d8c56,5d64739c,4ef765ff,dee2ae0d,64fda841,286eee85,a9f47882,d9a848ab,4be812a4,8187d26c,7f8bb8dd,b94f7725,5c628104,e0cf21f5)\n,S(a0c394a8,2177734,c02b8310,74ebf0ff,ff4208cd,dcd59e7b,a680737a,fc485c84,c4f08932,b4c62f34,fc82434f,e9b7b164,e835cab6,2f34ee3f,d640e5d7,d09364b)\n,S(1b0319bd,3896e8c6,284f949c,72e7694e,bd3c2923,ebeac273,b9aab50d,30294c3e,15dbfe9b,17c3aae7,e5f8233d,703b7b1a,1401b672,1da32080,53ed52f,a2ee339d)\n,S(9914ef0f,e92f16be,a27a9354,518dcc0,1210eb3b,3a90f2ab,6992e3d9,bfdc719d,7a0bd065,cea0b11,e8df3629,faf65a30,5e671d2c,86332b83,98ddc2b1,b3c4086b)\n,S(3a68fa19,5599f638,7dafa176,395c9615,5798ad6d,7ace7810,daaedd13,ddf60d3e,74575ae6,a3f569db,394faef1,e0641ca4,de158eee,9a8ac54f,5cd96bf7,d4e71a89)\n,S(b7361d41,e2b67e31,f1872b1,b1bffc8e,41193dec,7f012385,9da69c60,5e88b2e5,fa9d6b95,66d49bca,73cf5890,f6e7acd0,315347bd,f10be9c2,9b0907e1,80668344)\n,S(341e9987,42d84640,f6fd1354,3fb7ff9e,aa93a4d3,12e99bc6,37b85b83,25174e81,c49608dc,91b46187,611cbcff,762e5fc1,e95b4e9a,6ed747ac,8612b6b9,8bfcfc95)\n,S(83d6a445,de34f557,40084909,402c9718,1f6420bf,af87426e,2a0f75da,c483e6f6,7a86db44,58c8fb53,5edcf48a,14a94dd8,e9fbed09,277db0fd,787c121b,a1dddfc1)\n,S(4f11235a,14bcae9,89082bf1,c6a499d8,32d17686,2fcffbdd,a40b84b9,26ac351b,b50624f1,5f31269d,168021c8,37739cb7,8678ded,be59e288,6e963339,e94a2acf)\n,S(8fbb5727,21cfe12c,ea685907,ab6e3d7e,eafb3892,c082115b,998e9a9c,d3ee2b89,da7fe685,c8148e1a,5cd8de8e,2a5b5aa4,ef1bb1a5,af8bfab7,91c923a3,66906680)\n,S(804ca63c,b9243f5f,76605b1f,53f5989d,286023f2,fc672bd6,3f52c59f,5496c3de,372912,eedb1156,a1b8300e,eaeb44f8,865fab6d,49c89fd8,43170b05,d75233c6)\n,S(b2795c6a,b83ca824,6b18de87,5660d04,60b48ed7,1de9bbf5,8cc1769c,2d2a5365,66e8c2b5,88530b6b,4d351044,186a8a01,db684157,9bdc041f,90d0935b,2a49d820)\n,S(deb5304d,b61bd914,c0939d07,c0464eb4,caf3903b,1903a588,208c5e05,36d9dad3,18d54f43,e7e45e76,6a4b6249,1e48073c,40507dd8,3f7b3b27,762a06a9,4d5777ca)\n,S(111bf502,d177ec34,b6c61d69,63366901,eb79d5e8,5749f5cf,7743cebb,9b7714c4,be80d52a,bc38bbcc,f036bad4,5e47a0f1,7d8ba20,fe6780f0,bf8c38d7,696a4e54)\n,S(94b10f43,c15c5393,e8d4e71f,db863865,daceeb50,674d0f8b,161bd38,dcbe92a5,ec55af2e,a34e8c36,5b3f7729,110586cf,8d087dd7,f1a0ae9b,d25b9b77,f5be6dc7)\n,S(4627abf2,2d447784,c53e529d,62d3036b,fb4a422d,10146248,d3b1f188,e895593,8b341d8d,6110b59b,738172d5,6651e948,cbea9ef4,c7e8dc48,3a560503,eb7b3e4a)\n,S(19ce15cf,dfeadcc3,7375727b,5ddc5327,585dcabe,c172aa80,757ba468,297c355f,506555e,ce829141,736ca9ec,886cef26,83853e7e,5b3ba66,25cccfd8,4de60f81)\n,S(75a40681,8293fcae,8c3e97d8,e1f916d,2950682e,16d3def0,fe6dcfd0,ab9a3e55,5292d5c0,e02ee24d,8139f2af,495298b7,4526780b,f39f5f22,a047d155,dc8c7930)\n,S(a7eb8b8d,ef4b7686,b47a341d,4f4a7333,88cb82ce,8f3226f1,cbbf79bc,1f3bf578,85d98b6f,e238577c,b3b52bf3,94a72589,24407ca2,86865cc8,80cfc93f,bd8199a1)\n,S(a5b9a2b5,dcc91d67,b352d14,3c19f6b9,6c9f8344,50e16c00,e8a938de,b3da647a,f12d4fa8,39850471,64335aba,1260cff1,26fc4e13,fd16cc29,63472f28,7b9571c1)\n,S(7999c6ed,48d589a6,5df7c20e,e9b0fdf5,df58d831,78ad6171,57c09cc8,44015cca,156f4505,3706c3a1,c54b3fec,bd3f12c8,aaacaf0d,22755014,5bcb731d,418f5756)\n,S(88fe81f3,b708edd1,b85baade,6c05c7ad,42202058,6dc2e8e2,fead379,c49829b1,cd62e24f,b04b7d2b,b1434150,260a052c,8972a8cd,daa1db10,d99d40d7,df727c01)\n,S(18fb0eb0,cfcc61fe,423192be,b694a77d,91216537,5087a64e,89557d5f,4fe86763,3cf72b1f,dfe8b565,38e88e23,ed871d7,80f4a6e3,55229922,b1f28c5d,38169785)\n,S(dadb3231,2be4f2cc,cff171d5,baf18e76,4719fa,eb5fcb66,d919c86,efd38aac,8d67945d,752de8bc,b0740e42,3a154449,50e0b330,c6a73981,3d9f4b30,f98bc0d7)\n,S(f0b9a086,7cdd9f64,6b3aa0cb,e3105ba,7b17e09c,6c1c39c2,d8057f06,a39e5c8e,2b534e56,25e6d180,40dcf431,9821cbbc,3ff91303,c14bdc81,370c9e0b,5ef4e9de)\n,S(dc0e0b05,2e49c3a7,e5d0e253,672e8d43,1cd60166,648b932d,406fbe8a,c2fcb7e0,ff919786,8e1c651a,4cd39cb5,6921e24a,223e7af3,821fdbea,86547e1,c7b791d9)\n,S(e71cae98,fb6ddd47,35ec365b,515c6ca5,6bea748f,11811038,b74aa5a2,32eb91ee,804ae818,396c20f6,e2fc5bc7,5dbd1f41,9ed731a7,2801d06c,e6682bcf,1d600266)\n,S(50d1b5b2,f7b2e4ff,3b594d48,6bd2ca6c,6b5d5368,2079bb9f,88d792b4,d4ddfd8c,556cf4c5,18fa0660,86b9b03f,aba18fd,5c554fe7,4020df5b,6e34bc88,4d5cc744)\n,S(c087403e,2bd5d954,df8c5e86,f23f6cb4,96634886,b4709747,325321d1,bc2701aa,9db44987,d8517300,6e3a549,eed87e06,258bc14b,e2b00679,3a2252,a3507712)\n,S(dd1037f7,f3843422,de8988fd,3f68a299,4d45f8f5,1e9242b3,7980f517,bd6d6894,ca8e6d61,5cfbbcdd,8b1ab8b7,673093a6,1a9c08ce,56b065f2,54fc191b,25cccce1)\n,S(de229a19,67ca589b,f4a840c3,d18f764c,424dfda5,6c099d14,73a9cc7d,34b5ceb4,958fc9ca,84ca63a9,4323f4b2,ae46ff44,a1d352c1,1b8e8be7,2d5115b,54122b22)\n,S(15e33c9,cc9d84fa,16225f48,70a35a42,f8a3a3dd,67a8dcb1,143c7ee2,4cdfd9c,413c0206,ed48cd5d,36205836,45e4ad6a,a59a1e15,c7f36256,2f89b9b3,660e920)\n,S(53422561,ca3c4d87,2d23e317,3b21ae38,dc010b99,b7ab0fc4,394e408c,a3d6bee0,6ee906e5,e505909f,6507c7ab,779ce1c8,20f2c50b,a71bb8b7,8debb3fb,6103048e)\n,S(829dcf4f,9b2c4f37,32800bbf,f5cb71ca,308bf0a,9176a74,a031d972,9a82b2fc,47378200,429e538a,4e249d3c,9f58873d,abe3f8c4,615c5d3,3525f6ae,5f8483c4)\n,S(ed6f6eb7,3769b1b1,4923b989,acff97f1,c05594ba,1d5f4ebe,450e65c3,8ae911e5,dfee6f2f,3fe584db,8b98cd0b,69ff6219,d52e2d9d,a372ffbe,18e500e1,a2c38eb4)\n,S(47e52398,1fbe720e,8fcd1982,df2b184b,70616ebe,cb4913da,30327205,c0455503,afd2dceb,f360c30f,6820cfbd,1de0de70,179f4cb8,6c461251,5eae2f4a,baf3e900)\n,S(b02937d5,8f48e1f8,6f3f1170,f5e880e4,ba10e2a8,c13dd0df,49fde04b,a9037312,dcb0a4f,3e4c8456,316de580,5355e17f,8a6c7924,f68cbcf5,347d3c7a,28c18c4f)\n,S(9f993cf5,3578c1c3,25c10c2d,c3c066eb,878486eb,dfdc65d4,4ee57fd0,ec1989f8,c6b8d40b,16b8811c,d666ea43,2e61baf9,e83eda6f,d38275d,9143b386,31c8bb52)\n,S(943b6cc2,5913ec1d,f12730ed,bdfd1d0d,ce431784,f36fe84e,599f9b89,dd3240e6,e58102ba,cac2ff3f,d42d7ca3,254ef55a,9604d3ff,fab5b16d,9f77482,4fed3fd0)\n,S(9b0e67e,69b3f9ec,51843da4,f7b5a7c8,59511dcf,47f58a64,81fbf2f0,19acfe0a,6a4ddc28,17a4ecb4,ce2defc7,d7333ca6,2e074c36,f7e49c67,4a009d30,edc54dd8)\n,S(97dcee33,9cd8d18f,8c3b0fd4,48ca6e6,c8246b4,136bacc,72ae8673,a4571651,6163a205,cc20bf39,8aae36cf,c8933dc6,29b95246,48823d51,d82d2d2,74e693e4)\n,S(a1e5e6f9,26961eda,7cea9c26,f4a1ba02,798c940f,2b7dc267,2999ff7a,d2292ced,50274b7a,6a710f74,ed138401,36d97657,cfc07af9,3b9e8fbe,ca18d31b,8d5f19d)\n,S(473d5fcf,7cdfddfc,52fc9bdc,6fc77180,1c21bdb1,840821a6,1a984296,5b4884a9,348836a7,ad7f550,feb2d703,6c82d95b,89ff95eb,e8be6250,eba7c5b1,8fd856af)\n,S(9c187442,7384b2d0,4fcc33b2,70544c98,db8c1e13,2bb149d4,54c51ea1,4796f613,2d6dec43,970f0079,3da12e47,595cefba,c1825d36,c71342b,7913f7f5,fcae0a19)\n,S(11ce1c46,9150e2bf,b742d826,be740e4a,ed63c729,5f5bf51e,c7a6aa6,562b154,6e86514f,ea38280f,abdf8b93,be8b7d92,67f3b28c,af2a4271,aa3b6a62,1f4fa33d)\n,S(1e037904,e4e2de6f,2893c354,18d1cc6f,dde2fd71,4bacf1cd,4d9a5c56,79656042,1bb759c9,34c26821,2a28aa38,a0af035e,3c81ac85,3c01e21b,462e81a5,8c960755)\n,S(52fc9467,23f899aa,f1a94f24,f9e3620,3f8d505e,31cc6800,9951d9a7,c0071d82,4632ae0,75430820,20cdfb99,270b47ba,39c909b3,4b3a39db,92419697,d0bd6dbb)\n,S(cb585905,997519cb,214f9e39,496f5386,35069eb4,d78dea4f,f9e9d803,642b20d,1b9f42e7,a5b475a1,e42a0f51,ce2d5e50,7131b2f3,5990ed45,64e3913,ec93ac7d)\n,S(382c2857,29f14558,75727584,5d37bcd3,e7ab180d,a11c7a12,cecae00f,b4a69c46,cb27e912,20a70fb3,6e258684,3f128693,495907a3,e0b248e4,a25c1e7e,54039440)\n,S(16f086c6,c2850e49,8f8456dc,eb33a692,a4dd613f,b2f9564b,6dcecb88,4f4e5024,2e152a08,88eb1188,3448ca68,25a65034,73cb5ece,c9ad5df3,12deefed,279339a9)\n,S(7589bd1b,1f0a3577,5530f0ae,446ea275,4439a51f,66730950,6eed6177,65a02492,2d840e12,d3758153,1e5771bb,14d3634,4076fc3,630c389c,ad9765,98462d49)\n,S(18b9ae40,cce63a51,3dedbd2b,c3beee9,a80cc5f5,a26b4446,9a0326f4,d4930890,24b86a4d,d5ed3c44,71b57138,2b270d0b,9e0032d7,8e0ad18a,cf6a4eb9,2a2690e4)\n,S(8c1f74a4,acc71ef6,4030db5d,14be8627,94e9ba6e,102c89a4,ccfe8a8a,d3ebb48a,a79f0119,98aea529,1e3ba735,c8b26c86,1af1c119,92d5dc94,16eb1673,9245677a)\n,S(8d80592d,36bfaab7,5b557ba0,d03825b4,2c0fca08,8ec7d046,5cd2c203,c2bfb080,3e479487,91f27453,4d0a1bd4,a533fd2a,7671a654,10cd7a51,859b466f,151d3f6)\n,S(eab0bb19,f477e158,ec85046c,f2c56777,f36782e9,e0452770,f7125765,670ca248,a27d7081,23093af4,daf55e56,32ba071f,37f0bd64,3f189ebd,70074cca,7cc04640)\n,S(ff0d0dc9,ebbb2fa2,6d3b249f,d5260ce9,9647e1d,db48799b,db532c6a,2a0a039c,12b0f6ae,7f161f8b,ce1c3505,5d9b760a,fad5b0f5,66211023,3c43942e,fab31fa9)\n,S(d89a3235,71dbbd1b,92340346,8b08b7be,be22b320,3ee6b0ad,42a2aa96,3837d526,25da35b9,9988f167,3108124d,9e6f6f1f,db4a0490,5546fb62,146b7421,36e3cf27)\n,S(f150023b,f01cab2c,433cdafa,86751f7f,13ffb315,55d34a22,9ec4c012,925b43fd,31f70e21,26ac896,6dc966b7,17a9e483,8ac37a6a,2072bf34,1a9c3d33,3ac7a9cc)\n,S(d98ebd3b,2d580978,72ae9d5e,2c2cd0da,76f442c8,e0b4470d,9b3ee019,c83af2a8,9ed5b6a9,5a061970,34bf9873,da6c7224,930fb358,a514c823,e0017c92,75dba3f5)\n,S(55b62d85,833a94ee,dfc2e313,df3ca816,8173533b,fa77d827,583fb01b,cbc3c746,9f848773,cb95af7,b79eb921,19a7a139,1f4dbbbf,44c81897,15bad111,364a835c)\n,S(dfaf4d76,fef73f93,44c69de8,f6c1c3fc,ec759c49,a2a7a1ca,2860fecf,bd718de6,ac4af693,44e2c287,f6409f94,c36d93ed,7fba1f15,195bd971,357d3142,725a0671)\n,S(84a444a3,4510922c,37420f29,a16ee22b,a7839f3c,5810cbf8,38b7f3e6,c5fe29da,ef733d80,2215c12e,143f420a,673069fe,6e89af70,cbf975f,a1898550,1114f06a)\n,S(d7c84e11,46c87008,3ddd24d1,296811a3,2c337749,83892548,6291aa53,a72212af,b187dd58,a3be40bd,c3d357e5,480aec61,9579b2d1,4d79745,f84cd406,10844ac4)\n,S(fdedc27f,a70b08be,f3a9f616,575072cc,c7fca4b5,71a2ea06,9ffea788,5598051d,fe9b7b1a,1c575a9e,354d279,ba7f4de2,53f6f54d,e7245fbb,3ec462a4,7b9bf9a)\n,S(cfa7478a,d3f2cc6a,92022b35,58437b3,f950c250,4d96b9a5,c2d5c795,ef122e77,f3e48dca,e9592835,354f8eed,ffdd4c2e,2ad7800a,3da863bb,158945b2,261409c4)\n,S(8e9157f8,3fd62097,70fb7493,d7678fce,aa1584bc,d8dde3f8,337dce8,ee0eefe2,6079ba89,8c05dfb6,ba4f91df,4b4b229c,3322fb5a,44fa988a,c8d9f3a5,3a05351b)\n,S(7bf5efb6,103eac30,ec4eb80a,9bddff22,9d422ffc,6a7f9dfd,bea8b928,3116f75,efadb659,64791edf,e5935554,25796141,2cba4b4c,3553fe67,ba138931,3ba71a3b)\n,S(f5ba02b7,b7b2c2d2,68c7b1b5,37697079,690a13fc,89d1d53e,85f27820,d0e8df0b,66316d26,b2640e41,bfc329d1,9d2d4430,a9266b64,c3c793a3,af7f1515,9e465485)\n,S(5eaacdf3,dceca4c9,6d2bc3db,f22951fb,87c10da5,f1250828,4a1498bf,ff004475,cb3db3ed,9721ce09,16985d40,4831cd04,b38f5810,977ea106,c8c25194,ad1f122d)\n,S(1cfe5c17,b8d61134,53552ba6,ad513371,d1320abf,4fa2de41,77c5a768,a64a5554,53837cf6,4846b887,1e64a2f7,e319f740,99bcabe6,7a0894,5edea46b,fd1dcd5d)\n,S(92a83f47,8a2ccc86,1cc91dd2,a1210fbe,286f47bb,44e46880,5e21f0a3,7a5dbc10,fee35c65,fcd45b02,f8270b8b,c198132c,cb69ff9,ec35043,684f54f5,c999de94)\n,S(172285ba,d5d539b0,f4d86ea1,35bdb79,73c07ad3,24bf5dd1,4f74ab69,cad277d3,45abf940,cf356364,e0bafa15,cee3e20e,cfc29040,288b4897,314c22f9,aaada654)\n,S(ad17bd53,92e19bab,8554ae08,bf9158dd,3126ce81,3a05c32c,7646eb73,cb164762,a129819,1c833987,775d4f47,d9d70d4f,8139c651,896f9b94,e164574c,8d065586)\n,S(10421b3e,91a4a89c,1f6ce9e9,13e511c3,c23fd307,c4064a12,5267cb31,2ebdeb1c,539bb5d0,9e49f0fd,186b8a51,73118cb,98569700,dac77cc1,92359286,3aa53319)\n,S(c43adcfa,78152a3d,dcb9eba6,6632aa5,2e8476de,1e0e30ff,39735b06,21de5bfd,6ddd09ca,2122580b,847d04f0,5dacbb7b,1e81c6e2,6057d880,1a911a55,9cabdebf)\n,S(f7a99ccb,603a58d0,4c6b9e50,d9e7d988,14434f1d,92aae27b,5c8d9006,98bf9a73,ccdfc244,76f4393a,e96d6809,1cb74130,5e62934c,cafc9b08,78a3a77d,a71a7ccb)\n,S(9abc95bf,70174ea3,5038f44f,4a2ca9be,f602d516,9d249aac,b3175be7,e09c826,6cfbceed,3e71f8a3,d427d2c9,f8cedaca,22a9fedb,4cab7763,617198e0,d7adfe0c)\n,S(8a7ca893,35c84873,ecb4af06,b493c9cf,d7bd08fc,d0535c5,546bb9ed,5c5d8d82,2518b372,90d3c08,72f1ee4e,54144799,209ae3fe,d2f285ba,7b00193,21e31bc1)\n,S(70c8e379,8649628d,969182fd,862f8d4a,b39fdbdc,c246fb79,ff1c9227,a64d1c3e,c7931ad5,27ec0a4a,ec297d9e,fd56208f,936c9517,4efdb86f,7f50e321,26ea3cbb)\n,S(d783f6b4,6121ee0,71ddcf61,b4808fdc,934a82e7,c185876b,9572d628,31002121,aa92bd84,14226949,9e107c82,b9a64898,28b3ed15,694ba62c,a031d98b,5e9c7fbb)\n,S(c1f06a1c,29abb43a,cadffbb8,7ea8e4c6,b7592795,9c778758,1a17e4e7,7b654c18,1dae0de2,f1db42cf,ab9b0e7d,9e5a098f,bc102470,aa418547,6cd1925e,fbecdbf0)\n,S(2ad74e11,3205b587,866633ea,32172662,d1498a27,48698724,87b7e62e,52cc5105,c70c7507,de1fa1fd,625aa7d3,755c83a,b5c85159,4b8bee10,5de45da0,d0ff779e)\n,S(f490e9ad,72246a46,6eb74e23,371c4f57,a9e32b57,74ac9ac0,3d800978,d77408b6,546f367f,8fdd1687,ba6ef15e,4c258507,77e49a1a,8b449fb9,63a0f01a,a9dc3d6a)\n,S(20502891,8357b697,e05788b0,55f8bb32,80c431c5,de07055,3f123373,981d6149,39d040e5,44110e22,58da6771,2852fd09,9489ee5b,5c77a777,7966abd0,468e3b0d)\n,S(6e91bb8e,c169a3a3,eef59915,d4de9296,e4b78299,e038c5d1,bb001eb2,f86eae95,d2c21297,88f8c9f1,16434063,a89fac48,45305dd5,d208c887,2ae94ba2,80877dfd)\n,S(cf2947c8,39fc40b0,610d0d2f,e1e5ad53,39e7d0ba,9e7dea01,90678bb1,6ba34905,6145a70f,7f0cd53f,d758d7b,172e875d,8db00f6a,131ec7ba,aec140b2,3f37c63d)\n,S(b48f8387,ea93a6c8,561c9b01,ad32a28,1c8db1c1,ac3c6864,ad161874,fa2366f1,2cab333,cbe07d3e,26fd971b,3609cfc8,9f46bd81,df84276b,375315d2,7a2d253c)\n,S(7c4b5f66,c572d34,e4cae58c,696fd43c,30f6054e,8145715e,f391eda1,42a1f827,3cbe264f,be125af0,3907c5fc,c61232c2,d0adc2ad,5f94f3b0,8ed32ad,99843d97)\n,S(e5796368,d4649e19,6227f989,78758d9,8fe24e51,f5d5a567,378a85e0,850d86e8,74bb343,c9a69128,9ae880bf,67a7e4be,1fa111b8,d6608896,46ec354e,f6c9d4a7)\n,S(dfa1065e,fe83e9ef,c19b8841,6e3ca5d9,67c1ab26,53c7d650,9f02ba58,fc4d637f,22d2567,eb0237ba,2f270e04,685e5352,e23fdf19,a2aa0a23,1ec83eed,ca5042d)\n,S(2ea1d8aa,d436c332,8fda3ce9,8e710b80,8f463844,cf131f2f,2347b37a,928af132,33fa7e0f,b8c2ad10,580a243c,ccf2a4b2,13ff9620,7a034432,8fc61f31,e98dc4c)\n,S(12ae1451,8122af3f,a788298b,5e59df37,ab6a976c,f8a931b4,c0a51de5,d567253f,85ff1dd2,b3271d2e,de2fa732,9e3f0a5a,1c3ff9ae,b55555a7,926d31a0,1d24877d)\n,S(fd46e1ef,b588af1a,a72b84fe,dec75a3b,125579ef,55ef8270,85645930,95bf6619,d06adc6e,ceb6292f,60c7d477,c73a2aff,342e6b7a,e81c5ea4,f57cb7b,27a51b17)\n,S(ed7d93e,b8c0d1ef,1c49e1bf,be22acd,c7a17946,b172de61,4a290d0b,7f32b52b,4d0ec30a,39a81c3a,f8f6668a,742abeb2,b5552284,a68ce246,f368ce9f,b2303ada)\n,S(fccfdfa5,cd0e79a6,9febda81,475c06dd,58517913,3624f4dc,9d808b6d,e9619ef,79b9040d,11d09bed,f89959c6,992a9636,ec62324a,d60e1513,9bd2441a,dd0adf49)\n,S(831762b8,6a9b9afe,d2a044b2,7bc714cb,16823ea7,22b44010,a57a5564,4b4ac477,147ae062,8ef3bfdc,b48b3f77,f84dfd77,2754c1dc,a626aff6,9c3169e4,9956c708)\n,S(33448c01,a84d5303,c8f70adb,bfe0ccf9,f92cc461,f2656fb3,4903b99d,4ef26b01,e5727349,ae8ba61,c8ca8284,ee7f906,208ad03c,6fd7c95f,736ea541,ffb8f2ff)\n,S(920a1261,6ddf1304,157ccb8c,50ebaf6d,60df85da,b19b24a2,48254cc2,7d215a6,19e4d4f9,cc91e890,3d2f7a11,ca8c0b97,e2cb671c,e0c4ee36,9f1a3ca0,f28d0f4e)\n,S(1df8ce1d,3e370b9c,3f60ac00,cbac25c5,458385a5,c4b926b7,fcafe62e,536b1ba4,344df46e,e3635079,52af6160,2729094e,3fcbabf5,bc701083,533e7e60,5099a92b)\n,S(7227847d,abfe26b8,13c18175,c37a0526,2e2243c8,d80d93b6,286b2881,d38b7b72,bede79eb,33da3cdd,95289c93,46165cf9,28b5aa41,c46b364,622988b8,a7973d24)\n,S(6defba59,e1218bfa,b02571f8,ccc84104,3caff74f,26d8d995,9729f292,eff7fb8d,4d7baa8e,21f2fbc5,96f770d1,bd34e77c,2c188c05,5921c1a6,95696a8d,4c340a04)\n,S(c667f4ef,f5127d24,6b31ae02,2adf53be,8302e1a,b631a0f9,90b16051,e02d6bd3,3d7bce76,ce11bdf6,fd4d822c,37d746a2,f8de283d,527af237,3e80c4a4,dad34cf5)\n,S(ed9e8674,441620f5,990dcc24,23a2ab00,6fbca1b8,e6bb3d23,55c2c72f,ce29d866,64d5ed9b,b4289a2b,b81a12f3,30930dee,7c03dd71,1ec361a5,8297c22a,5806ad30)\n,S(86a36c57,e6b0cee0,33c00b25,66344ef3,219e57ee,ac452ea0,b0eeb98c,3176fb24,b4f4bdda,9e9b58df,4e103874,89592b5d,b147b43e,79a1af25,135e8db3,eafff739)\n,S(2e237784,45396ff3,a0e105ac,ba151e3d,fd02bf82,1de70e04,33792280,bccca913,f736539c,e77983f0,610464c4,3bbcc904,f43726dc,a336304f,c0b716c3,67148551)\n,S(ccd3c14c,7790d936,5226dbcf,11a0bc00,9db88a87,ac2d68c1,6899f980,20a1390f,b240b35f,bd6d5dd9,f33bac2a,f1899320,f8a9cba8,7df0a67,81cdfdd7,1c3af907)\n,S(7713be7f,988d7b1,c6c6566d,558978d,eba4efad,b82761b2,17bccd87,3637b018,8fb91a6f,a9d62baa,2eeef7c5,15fab341,c75f31e6,64ee7d94,70db34c2,74475781)\n,S(5485ad60,35dcb3b,9520acf5,6b0855cd,34c739ff,1c59798b,1ab667ba,a4982b02,1dec6c7b,1e7c14ca,743df62e,589311bf,57cbd455,e7dcbf9f,cd439962,96a90f0f)\n,S(a597503a,d3be484d,1d2d1cf,c4e8540c,411bd201,f2b05ed1,89c9a3dc,b0ee0f19,35113e7d,38001199,1e2cee66,4dbcf490,becbd6f0,765c94dc,e2855ee3,b01113cd)\n,S(ba91b251,abb130b1,57dd07a3,dbd2fd91,1ae24937,80c8046c,b94de57c,dd91ce4a,cfcc2080,500aedfb,a69f33f5,4f642fbb,8377420f,e1799dcf,e1dc3593,d3e1f6c)\n,S(adfb5a58,83cc7bd3,c6fd3386,95c86414,5c6d2f4a,603fb2e2,fb045bff,86d324a4,16574ed7,45d82dfd,c50415a1,8c30da91,3a525753,cc975722,22a5553f,7b0cdc5c)\n,S(1084914d,dd710a5c,ac854b14,10a4be35,ba1f13a4,e0fba3e2,9d94edcf,a3561ae8,653ca135,3240ef60,412ac6cd,adf8e664,2f2b74a3,5908c3ba,be6dcf85,49c25e99)\n,S(704aa271,9af38b14,17a8abe5,b881efe,81876a6a,f807833f,133cdcd1,6e6c6f7b,a6fee2b3,48c1180b,c48726c9,be2a1a41,11395af4,42ba7b92,63f4f66e,a3769e54)\n,S(46048cc1,7f5d2a86,5c1f5734,893c6683,fe68b0e8,942c9080,51d7b836,a8aec289,d85cec30,89a8f77d,75bf9c6,bb4f8a33,2e766834,3841b277,a461a079,8b288efd)\n,S(50f1e6be,315d3b21,636781ba,8598d2f9,7d04ccf,5ba1fc76,3d547657,77fce9e9,f7dcb7d6,2057b9f2,8cc24975,9dc9621f,25dd0ce1,47e00db7,d095fb0e,ee6b0b00)\n,S(7ed0a244,676655ad,10efa03,7748d49e,944df1f3,5bd46d0,3b7ffcd0,a63501c,a8377a65,593f227b,446eb266,936ae475,e9b3ae65,a60768d8,2690d0f0,5c18c21)\n,S(d039ca1,ee66c2cf,611c431d,cff1bd2e,19b29d3b,b1f37342,c29f4632,4febccc7,db0d0d82,14f4c661,629ff5e2,4cfdcc84,6e652ee1,15a6476e,7813104e,696d736f)\n,S(c27973a,cc55fe2f,4531768d,94cd4a0e,8e36729c,aad61579,7beed810,a7b092b7,cdc310ea,b36ab246,c56d5402,9b9e3314,878e1f1,ff7520db,43917a14,1f41c99)\n,S(36842942,cce3c683,25472e48,de202d15,ac14a180,3a2dd84,6de0c33c,6446e945,5000b3f8,19ab82fa,3589db9a,eed5609b,208d95fa,ddaebcb,57403b96,7b8f2f7)\n,S(d1aa195c,338621b5,19ff3a8c,55abb454,74865ef7,85e0fd7b,c4554ae,6d62d0e9,e7e1dd33,dc293859,b4634576,d8840630,832ce773,a9a8bc88,c2e67251,a7b737a8)\n,S(4f423d32,607439ec,366bd6ff,5766ec13,a59b2c2a,8cd008b0,489f267f,5c0f00f0,5e3c7e9d,7ee94c15,c048e6aa,272c888c,b6c3e058,4b4f4ee,f5e1d787,a4e7a9f4)\n,S(6bb1c680,ff8991ef,17c0859a,9b5fa9b8,ebcb9afa,af7398c5,9101bb99,7f06c4a,318da775,d912ae5,d17c242c,97615c5f,217005fd,535b839f,189ff3c9,8669a253)\n,S(14095d4,4713a46a,5fcb251c,9fbee2e6,bc393423,30303b8b,d0f2d09a,c0096f68,647e000b,3660b374,959e632f,6867c7fc,1c7aa4fb,b7f5593,22dcb2ba,e604a2b1)\n,S(12112bf0,346e9c6e,4a8f831f,6c087876,8943191a,38e9fb83,8b2613b0,4b5e5323,e4149ac2,cb4533d9,4c3abf62,aee4dab9,faf64065,89cfe10e,30a42986,9657a3d0)\n,S(f99360cc,c2ed4810,d80974eb,eaeb59fd,4f2197a7,8459729b,4f75c370,8bca5738,b92a2f5e,86d77a8a,c2c1b9f8,6e1971db,a06e4414,935020db,c0c83a92,ee6f1cb3)\n,S(2dee5a4e,c81a3ecc,4872112b,be53f51e,64ae779c,49488567,a654e806,ea809ca4,1e2ea8a1,df6d47c1,c0aa1bcf,ffcf260e,bdea4d63,934ff3b1,bcb1e1a4,c73d4954)\n,S(5baa6a2,139eeb78,f49638f7,b0dc5010,b73688d1,bbd746a5,f2382c7b,d461229,72677383,10a352f1,9f2a75cd,9e42509f,b08a0ca9,60154693,cc01d595,25dca81d)\n,S(a3f77eb9,321d44d6,b774a6f3,b1319e46,f60d102c,d96e983c,8f8568ba,82913d70,f93d75df,8271e70f,1aa38630,26bec1d0,f6db1765,77470077,d3fceb8e,5c613a05)\n,S(46ba66b5,fa1f9274,378fd62d,68ae9f38,8588d766,ebbe97db,72f9084d,c7f2cf08,5473e24,3078b8df,92df9b55,52ad5055,f44bf7e2,ecf0785b,72db5dd9,238897f9)\n,S(db6a0246,ddcf0260,b2b415b6,f551fad0,bccb15c,ca196af4,291d21ce,ce80dbf2,396cd446,f93e1c97,a56c6f6f,63cd0966,5f88856f,e75e1c7e,a985917f,28591d3c)\n,S(b82f8d1c,a7a298da,3992c4e5,8dba1b0b,38187eb8,66992e8c,5cc1c834,6e6c8fa1,4b0ae76a,f9b0413c,8d4fdbdd,db767c6a,b1b80589,533e3ee0,28eb6036,1483461)\n,S(446e96a4,dc9264af,e9cc6348,aa612861,d106fdd7,b7ff94a1,82e0f018,c485f000,32dfe3d9,21593a58,1fe23b7e,ccf677bd,2771c40c,a612a507,c8e33df0,99568440)\n,S(c86f10,7bfa6dcc,b9f00ca3,465049de,5c8a3e6c,d85bdfb8,1ada1d39,303a2eb9,e64f7066,7e910814,ae18c6a,7323474d,9dcb277e,4aaa7ed8,88bae4ae,7c34219d)\n,S(bed8eb6e,cda14299,e4cd94cc,202be7b8,9201c2ab,302a5cdb,83e5f5ba,db6cd710,15736cfa,b375a40c,5d367b9f,6692746d,16a1f03c,20941256,708489a5,5d411aac)\n,S(b3efa7f2,c5f6ad10,41f171b5,ad759480,665e0a52,de82a881,da1926e0,8f64d38f,3df63c84,32761a24,eb0dfa,ae98e034,b6dbd361,3fb53ff,c535fac8,ff1677e6)\n,S(b0460da0,cd869b5f,235213a8,49e143e1,8fa9afc1,651ee921,ebdc525d,2715cbd2,c11a3ead,f3541877,ce73b4c0,2b57b299,46b4725e,cf630eee,865bb121,b86fd7ee)\n,S(28b09517,a17452be,b2c19187,12d600d4,b4969253,a7d0d52a,49cec3ce,d73bc071,36696708,73c7591,11163518,40af594,40ffd6d0,690ddae7,fce7a43d,e920a326)\n,S(521becd8,192acb58,7ae76b7,c0bf17fa,ad86afc,47157753,6b1a51b0,fbb5f136,648a54c6,d7aff13e,cccf399e,15451682,ee06710e,edf32669,1dc7fe83,75ac858d)\n,S(b7bc19d0,b7fd9d65,26c9bca1,b587d84e,a2a200a7,76d39082,368b761f,79f6cf67,5adefabe,e0d0c8cf,4252c29a,773163b6,4a1e9ffe,ffbfe3ad,2f796e8d,1f70acae)\n,S(e48e3be5,1b6ca8d5,41f0c241,21558cec,66db7b6d,c13e7114,dc931f0d,397aea8b,dbcf6357,5b16e2f1,30f064bf,ff12b465,f6cb3a3e,f9f74431,4bf41e7e,e0f28ac)\n,S(395c6de,71c692a6,a3247596,8e28f2a5,4ec795b5,9759e890,9b2f4290,9f455751,ee5e0118,3c7dda2,c1eed4e1,5aca155f,b5b097e4,499bc3c3,fcfc2c85,a669a13d)\n,S(28938ac3,b1184399,22741291,9c0fec36,663da3aa,8a4e89a8,1a66052b,ca808d99,4ae8de7a,b1ebc1be,a2beadb1,80cb9a10,da168295,ba1ea5f8,310b986,4f174603)\n,S(5c0f618,95e88cf6,205472f2,3e27e853,be3af64f,d0a376f5,8523ee6b,5248f5a4,be5c3c55,cd09ebb3,b7363456,9fdb50fb,8473e3d8,3441e624,b41b1c3d,e44be51b)\n,S(abe1f7bf,22d0f733,ed28e125,f7ed05ba,ae2e8f13,1eba2ec0,1554dac,5e3ca1d7,2a5a48db,3de31f6a,9708ffe4,b996cb33,e553e6b5,95aeaffc,918aa2c4,1ab0ab4e)\n,S(c3042427,57d370b3,79124907,ea609129,5f1dbeec,442a6349,bccfd29c,e08d8be7,67a64eb3,3e0fda75,535b35e2,f8c9811d,528959c1,29e8f144,8bb75ce9,b1868934)\n,S(65a59946,356f219d,77af0b6a,9e1a43f7,3152746,6af41c21,c81532fe,3140f5b8,64e7128d,5d3e4fa0,518cf27f,c070da20,1692b059,3d84641f,2463a61c,74f35918)\n,S(6c7d2e3b,48428c87,46b066f2,bb99da10,60311cb7,d4dae19e,de2eb53f,141413e2,4ba47bf,c2e7c670,4de2864d,1ed7b383,286292fe,28f7c7ab,2a664bcb,6cb7e3a1)\n,S(dd257bd,b99c89c2,b47798a9,bc93ff57,5655797f,a45399cf,44acf58e,93fdcdd9,f8d670f2,a9207f25,52e7e0d7,14289103,e8194f81,6390e0cc,1af2ae36,c1b3e4af)\n,S(2516034e,b8ddc424,42952b8f,acd47c62,6827b87c,b08f263e,b2aab5e6,ecc23d7b,ad8e8879,f5feea07,ad3545bc,a731dd30,bd2ab534,4b486826,433c75a1,6216ac9e)\n,S(7e723054,27b591e3,b19834b3,8211edc1,7f075215,6591980b,907dce0a,d934246d,5c91fcbb,d8c184a6,f21671df,1098760b,2506bee8,e32474e3,3b080147,4e63a71f)\n,S(1b1f9d16,ac3c0d2a,4b87691,45a6f6bb,8d4fb57f,ef9df33e,72b5d399,6dd1898b,6442bf1e,5ffe450,b14a399e,16241a5a,15e94453,94519bd1,24d0a67,f35b4b1b)\n,S(e0f1fa4e,57cdea43,a3b9f671,596631c6,65b5144d,93c51a23,e9006c63,fc872f2b,c83851fb,54890d14,2f605617,151dd47,74f9a3de,cd27d864,a49c176,af32e564)\n,S(ae95bbb,697c820a,251a3667,b2a0a078,40efa027,99d7bd0b,3e9a12eb,32728c3a,e0dbba97,280096d,86ea4da9,45ae509d,1140e0dc,7b803f10,e685b148,6baebb41)\n,S(fc8ff885,d52ef42c,1fe529ea,853ff8c3,afad1ae,6e7f1b30,69e34076,682aed31,525eced4,b26e8f62,7b904f1b,3356d01a,9cced71,432ac850,433e0a64,b1e3dd14)\n,S(6613136a,459d625a,d5b5753,3a965a0c,ed68d63c,13652546,c629cab3,32c8e810,10f29ff8,24d30a94,b3d732b4,3b168bd2,28b4cb01,4012469b,93a9853b,655b65cb)\n,S(45085915,7b683327,c76309b3,96ef3b63,19dda841,f6be1b91,f24f5a37,ddea56f0,b9a71446,584a88e4,6a155e34,f08d5a6b,2b6ebbbf,b4b1aa12,bbc7654f,91956821)\n,S(168ee3bd,8f10ba0d,deb82576,cd5e1711,be58af4c,2274464f,e32f3f7,7c8a4325,6eef1e63,43ff409f,a916891c,982f8700,465fb184,5820b886,68b74202,6678b34c)\n,S(b3191d97,763c2341,4eb4db8d,eb2003e4,fdd86b4c,6077931b,71802714,ef048c04,b4ac3085,59f975ca,be7d53d8,3ebdd5c3,ce6860d6,37710a04,f885a83c,c2152edd)\n,S(da9d5c5b,4e73dc93,3c72acca,1e93f4bb,3ec477fc,f201096a,51ea0226,3a2f8738,7fb6a2da,65f966c3,689b93b0,d6366511,400c05d0,8b0a15b5,b4b3209,a812f8aa)\n,S(140e55d2,a7e75678,1791730f,c526470,8d1cfaa0,954e215c,1e65bcc,e4b0dd66,4bfba0d8,63ea2597,91e470d8,1ef36318,87e2d5e5,c897918b,ce805941,953d5b3)\n,S(15a9ccf6,4b95cc87,cee9bd01,bfe3d8bf,b438f7f8,66344a1c,f3f399eb,16b173d8,4f5472cd,bdebed25,605e51fb,f0b31a93,5d0ba59a,6e51bf90,e0363c8d,9bb33f3b)\n,S(e86e364b,6776701d,b7b3d3d8,fad181bc,c7ed5e91,2d0a888f,814caa3d,88af6e06,22fd460,afc040d,3e995518,c6286989,24a466d1,4a624915,f834c357,4dea7b92)\n,S(3c261a98,cd25f0db,2321134c,723ebce7,b1f81d3a,a6d5bddb,fc282fae,5a500eb6,2b8d2145,5e498211,8a4b6ed7,ec96a66c,4027a506,deaeecbc,45535fc5,77abd9c1)\n,S(49b6a811,4d55b517,6cbb1f6c,177aacfc,368c3b5d,238300b,d66546ed,f4c955c8,d1b124a4,9f0e7c1,6b8e001,7f1b0b2a,ab94411,391d5bca,5b535838,a3815b94)\n,S(6ec8e861,f0d3e5a5,3f9deab6,20cc4b81,6cee801f,f7a43f71,f34a8dac,c525f6b9,42e0545b,68ccafbd,3309c4f7,eb6b5eb1,1e01a871,c63fae27,782001ab,a6dcfd6a)\n,S(7342b341,59aca5cf,d305a2e2,a8f14da4,4b527e57,4640fe1a,c08898aa,4595b9ac,b5261302,d2442ee2,363969a8,4ea61281,27f64f40,ac86dac1,21b5d234,53160124)\n,S(842b30bd,54ef350b,65dcfc43,df26967c,b2747757,a609c54b,687d30b9,5a686fa9,4ffa9e92,2caa36b9,ecf31f63,f5c8de57,7d594f7c,71e7e77b,9cc5ac83,f336ead6)\n,S(2dba435d,d589a7c7,bc3fb60d,495757ef,7c13bb0a,3e91a153,9998e04c,19f94862,c440720e,a4b23cb9,d238eca1,6775e500,931d3e5c,7df853ed,55cd4889,5e8cc0a1)\n,S(9d1e8524,8f84ce5b,2a75a457,819390be,bb284fbd,3d035c07,998d3c45,c73bec02,8e40ee4c,c935ccac,2338bbc8,4a8063f3,6d62e8cf,849bff40,1298074c,94eb9ead)\n,S(d2735ac5,d1fba75b,d4f63912,11549755,9a7f8623,62e25cf4,e76562d2,d8b441af,bd2ac36,19f9f339,77b7cb0e,5b52f3e5,b4ade86d,1c9fb31d,a1d8fb36,7dafc081)\n,S(b0130e38,f46cff13,ad1a68d3,15729395,b27c2b96,e0a957cd,ca63adfe,b0a3e11a,3d9f697f,4a61401c,87eff844,3b11776a,610f1516,4366c1b5,535599a0,c6aa3c4)\n,S(e0aa062f,15306af8,b662d8f3,3b89de8b,f59faa78,29942caa,ed82e668,35ec76a7,c5f5f0b5,6ea77304,a5dffb8a,cac98387,34305b54,25fc6181,79a4457e,c15e6f2e)\n,S(ed1626c1,a8e6d1c9,187e15c4,ae9875ec,2156d685,997ac413,9f44bd0b,19432d5,3c0d895b,9dcb4a3f,4235e531,ee7373f7,7f0fad46,c5938d7e,69d50429,71f0c35d)\n,S(a2cccc31,4e18fdaf,8cc25aa6,74c974f8,664744db,86e04be8,431d2ed0,4dc92833,b6410e49,d6d471ee,d20e5536,8672f5e4,2e1b9c88,c06438a8,46c3a74f,c759d71c)\n,S(5bfc192f,db15f62c,4af19119,b2d96a88,b3b24e06,3d54b31f,a35f675b,f668bf27,46774374,acb4e140,90431bb3,9f62a38a,dbe0dc62,4021e23b,6099e198,47d99051)\n,S(66842a89,da73c404,32a2e553,97efb009,61eb2155,886ac90e,97dab5f0,9227028,3a8e83c3,511ea048,88d2dc9d,f1016cd9,da171bc6,89c9af4e,90b18091,21941de9)\n,S(ec823197,3ba95f98,d45f8991,3ee8b92b,e3a4a84d,d59342f7,1810766b,cdc516e8,532d3c79,f5113f4e,1973bc88,2a953b5d,77d5476d,ac9972ae,f1d25e19,ab7206fe)\n,S(3b65fe78,bc516176,aed5e5b6,5f3ed39f,e8e8e26c,32ab07ad,1ac2519f,72fc140b,856d36de,5190eb9c,13f7f976,466f95de,566a1fd7,314cec1b,9c9f7adf,98208d98)\n,S(3ac0eca,51c43525,e9e545ce,83fdd009,f9f31eb3,2722b945,18262036,d18cc346,dc72018b,c3b2a4cf,3244ef31,340e0944,325bebc8,b134de50,9ab3024a,a213a7e6)\n,S(4929658d,6c50ece6,edd2db7c,217d9be0,bcdac8b9,bb50972f,fbe53a04,2ee23508,e5aca42c,61aabbd4,b8555980,a2328741,6dfc8df8,d7a10c3a,7284bd90,aacec38a)\n,S(9d16e76f,4bc96492,f0e9e748,8c6d2297,7830e2ab,491a6278,1d60ab5b,153a6291,e6590f00,e4ac6922,5436318,9770aef5,5eaa988a,44e9711,da7266ec,895ac7ab)\n,S(b0649c4a,1327e7fa,f52a9bbe,7ff97add,4e13b36a,27c0676d,5e09b2b8,1f5df94d,991c8316,a6f36848,e072a080,77f75a8a,d79fdd08,1a606d12,b355c3c,3891acdd)\n,S(8f194a21,f6303ded,2c9ce51c,44a4a16b,eb39a8f6,5fe13c9,6b7c12bd,b052235d,bd1df3d0,c9af82e2,545afb23,e9a2dc85,c635172c,edfe70f1,bd755d26,9730739e)\n,S(1da71a97,cc7a4cd9,4777f6c3,dd5e665b,3872b721,c6c2262a,60e87f1d,efe21ff0,78d17a41,39036e1a,7af2b9af,1273afeb,a4d30e8,66a3e6e8,7f0d0468,4be6a06)\n,S(9fed363,e493f262,d3efabb1,c52291c7,e04e401b,b181290f,7a37af3c,df86aa45,130cc33e,e164adff,bedb1827,6a5c965f,53a54f36,90dfcd6c,b3fff836,703de729)\n,S(d166eccd,221c3568,199ebc38,fcbb6140,7a601a3a,c1e7a98f,ebb75a87,a7a1e49f,262222b7,e7c200bd,5dcec562,85485434,b0628c7c,ce5483c9,93795f76,a072f06e)\n,S(e7853cbd,3e3770c1,cc307839,294a2e8e,b998a56e,393435cc,2930920a,8ddbe0fd,7977e6ca,67147cc4,965d2918,1023c3bc,cff1e7b1,8fa4850b,80a140f6,980e5a8e)\n,S(a8b0feb1,cb140201,2bea3cd5,6b1a1f02,51036ce7,423f511,480f49c5,6227a17f,ccd7c3db,9d3ab6db,6cceedd6,d3801c8f,67afe792,c8977b5,27c9dcfa,75ba8a9f)\n,S(57ce5dd9,e1815755,31e90579,74f58b98,6d02e406,a846ab26,c9059f6c,56d617d7,cc34c090,4399f316,269598f8,aa8f9aed,829f61f2,5efc9bc4,e851ac63,fe142d14)\n,S(479790b6,4f60fc6d,befbbc1d,365ab3e4,8077b6c6,cbf02f2d,6c8b986f,d0f9c858,157f4982,e3581925,dd25382a,e3e48fa6,5cff911a,95e9bf43,5df8b356,87f2f9b)\n,S(55abc7b,1ffe0a41,2181b622,813be76c,8ee0a0ca,3cb37b1c,cb265087,fff17c68,bd134249,23e94c53,4cf9e603,a1dd259,606272bf,8283f2d6,69bedd4c,a971d99f)\n,S(6ca7e032,8bf5d67a,b804d431,e5f709e,bd3156e0,1d4511da,1dc67394,24d2e659,c428b133,f3683909,6551c2ff,2f870d80,d80aaaf4,6d2b1a69,7722057,5eca2647)\n,S(60df19a9,83e9086c,4cbd20ba,fbafa8b2,346ae4ee,9c1ad4dd,99959e91,2df530d3,dae7b854,29f817a0,421c2f1e,e4e8e4d,a09d60f8,84701e31,d7a8b7b0,3b79cc48)\n#endif\n#if WINDOW_G > 11\n,S(6f18d50e,5ef5f2ad,bad80ea1,c59a3847,5c22ff05,6ba52c7,e1d26d6d,d3686bce,d1d7ea0f,a166efd0,facf5c83,bc3786e0,d3f3405d,5b4578f5,13a336ad,f0d7d7a9)\n,S(b634dc9d,5ed51336,4ac9569a,8ddee9d9,fcdfe00e,65e59233,b3be8a07,2fd949e0,d72e46e2,c61b2575,f25a505c,bdc3456e,fdf18976,6562a1a7,e86d036,eb31db69)\n,S(5a37fcf0,2dba24f3,e6646171,43dbc5ab,40d91983,69f5cf0e,4fc566fd,97445910,a960d1d8,13f8746c,662a9582,614c7847,33e6153d,2975cb59,c3342463,75c69d1e)\n,S(8aaf16a7,37318032,c60201b6,b196d8fd,eeeb8f8f,1aab29e1,1b83ae1b,f112661c,c461ef56,66a3a4a7,563cc0c2,845f2ae7,6d03a795,987c615d,611bab48,ab9a8e44)\n,S(456f0ba5,a05f15ef,d93e7f49,e0729c45,1d85a693,42c2804d,9cd4b8ae,af5e3434,a680f4a9,99221a8b,7f46da13,13041e16,13f616bd,84b9135b,b0f7ecb2,7311cad5)\n,S(f89c36a1,f1905409,75f146d9,31e12cb9,4bfdc90f,a178970a,9d0b34cb,38f5c741,3b562c80,58e31b92,a1186615,9c1ffa3b,4b1df38c,eb4a1646,579d2375,9c44099b)\n,S(7f6beb11,2e1d8600,d8c4903,1d69cfb4,e23876e6,32f30428,9d2c2503,41f3f76a,a1937407,c0925afc,be994b9b,51627b98,8d98ed6,e8cf6fb9,cddd0ec,a4ff4a9b)\n,S(905ad0aa,b585c7c3,78b7130b,ad1d5001,1010f543,194f40d3,827dc606,12d73511,bfce0701,c3ddcd38,150130ae,e91d16d4,a447821f,a2e098aa,b83b8025,b7177a9)\n,S(f559c2d1,62122fca,7201e7a3,b6033d1,e54187f4,7550b2ae,f1d51521,f7408b6c,3f10d622,dfd0eb14,7f6f04dc,43108273,7695ea42,38ced7f2,5dc167ad,34154481)\n,S(19b328a4,fa17149c,ccae5830,a8bedf53,7c0d8a0c,c3616345,6f4d91d0,718ce8b4,9a1ce80a,2a4e6923,69925883,8e786779,fdff7f09,25d68855,12644d04,9e582f64)\n,S(afab98a0,e75619bc,ebcabc24,c1a6a0bf,2743d4f4,921fe53,3a393648,adad5d4a,bf1b3a87,759139a5,79741c09,21f29a10,7c8e5be3,13d75715,7dfd39be,923a32db)\n,S(c2cabf7c,1d86a34d,addb36d9,c83a8ec9,b2dfe0ee,8176d085,cca91fd8,ee4181c7,5b32b724,53f1335c,724465bd,6eceb8f5,159ab150,e9c972ac,f51d27aa,4d91070f)\n,S(92839424,8e847452,29a8c534,7c14355e,4f6e9cfa,2c1a2be4,f5ad6cfc,2a89f593,bb9c585d,fd41ee06,99ca7b4a,146faf68,51983b15,d652e996,c888a171,7c8c3a07)\n,S(bca2853c,389ef184,208cba64,617bd7ad,55e55f12,d0c9fb4a,a8dc30d0,c73c7dfa,9f41289e,f32aeded,3d45952b,16a62fba,fe9a142e,1e65340,17588d79,e1df63a2)\n,S(a4ea7bda,94b565a8,ebf53aea,5ce672c5,5745b7bd,37ca77e4,a0e4f281,71bf56fd,c9507485,1405ea90,9b9e1a28,42c5953e,629eef31,37bb0fb0,970cce6a,893e96bc)\n,S(71707d45,af71139e,d7327ced,89a2403,da57c18a,8527bb1f,f754e78c,60d5e169,24b36484,fe4da6f3,a3f4e4a8,55a477dd,3eef0f39,fd3c585f,1b9de9d7,10223ef9)\n,S(52c1de03,296f591,9d5cf4d2,36b8ff51,5b1f5ff6,d73228c0,7dda706e,4fdf9a05,db958d59,d73d574,384066e4,fda3b785,c9509714,90607c51,35d1d34d,5a344d0e)\n,S(7b09c0b0,7852e845,30691989,cbccbb87,74dc2007,df827120,d8b1ea62,2368912f,4edf5717,ffc52817,d0eebeeb,782ba4d,9545a5c,da979f3b,e9c09e84,f82bd263)\n,S(e99870ce,b29ad1a8,2bc08834,3e3b3c03,f26e7062,66b32540,681c689d,ffb8300a,8080ad92,78947d65,bcc12dbc,614d17a8,8ff75e3d,91230fad,c6f785a8,cd597f9f)\n,S(c7e2326d,e28b8139,85db4cb9,c3d4c5ee,2dd2c2bd,2b912444,adc3a434,205c38e7,5f2863f9,cdc0cc95,1fb87000,e177cf05,d31adf8c,543d899d,195bf5e1,c6ad940e)\n,S(883596c8,4ca7bd78,3c586bfd,28fba489,4c6bb66b,5ea52244,1199b55d,3e3f7965,fb114be8,59255f10,c96d6d4a,72945ac9,47a22f5b,68ecfac6,9406bce2,58e9282e)\n,S(7f73a648,a19640f5,b0f029dd,37e56e7f,5cf61659,5e532dcf,7ffeb7e3,f20b42cc,4f76248a,f931aedf,b4e2df3e,ba3b426d,8ef191b,9d59507f,4a94ffa8,80ff4feb)\n,S(c89ee34a,3660d03a,ce3b5604,1196a66,18c8739a,8a4795bd,db9c382a,9741aa3d,a4a3b888,35fbac57,f2f79ac9,d0ef292f,6838764,b99de084,684d1b95,12923884)\n,S(24be4c56,d7dc0c4e,50050cf4,31d81f19,b5c46889,430563fd,566c4ed3,d941d5bc,e07236e2,4936315d,5f0714a2,af1ad769,f6a5fc7,a56fc1cb,ac09a085,f29e6213)\n,S(6c31e71e,caa91c00,798ee5c5,3237a9f2,2866a91d,26936852,c4eb9853,e40b94f5,65aff323,2b5f2cd1,c1117e0a,c30b94e9,34543cd9,480f7922,5723c385,9ccf8cd7)\n,S(506c373c,8479693d,3e03c022,9b61839f,e470a574,d31fa286,92601ed7,8e58b7e7,4fd0bfd3,a57c5035,268bd4ae,707fee83,e24f8676,e0ffe3ca,1673faca,1b7ab65)\n,S(59d9a5f3,ea1a6cc6,16e7b097,871f731c,57571a09,1dc01b45,b48c5332,c98349a4,94ad373e,ee6496c3,263c348f,a7ee539,53aadf13,1aa6b638,21c16e0d,55fc8447)\n,S(a524cfab,65371648,f641912f,a6ce67d5,c6f8929d,366448d6,4de381b3,22d75c69,14c26ff9,87fbd599,17a6ae90,bbe7c79a,ac1b6158,c3f46144,71aa36a9,45782823)\n,S(126c986d,f83c6307,87c0d3ac,6a6b2393,8aa3fdd4,df26e76a,92af2c65,7f48c550,808539d3,a56a6f8f,3bcf04dd,31ac72e0,3f74ab1d,5e9afd39,7741656b,3d4c5c5c)\n,S(32cabbc0,1aebcfb2,7e1a9d5b,4cd05550,d8ff25d7,b9a81db7,3188474a,ce39722,7d30120a,e08031c4,12c070f,6ee6b52a,be191021,faa9f5bb,9576feb1,8fbccee9)\n,S(3fde1cba,f7ded6f8,a98975ab,ad5a64aa,8a9f0864,16dc25da,359e1cf8,22f42c64,e50fcac,61f0f174,b0e93cae,691212cc,44ffeda1,60dcff91,9ee3c960,2f5ac075)\n,S(9cad22ca,d6c3dfbc,1d3a08d,6b102727,36e9db37,1ee1f26b,3ce932c7,11462e24,5ae84f1d,873dcd04,7f0781cb,aabbb53,422bb119,4e59d5a6,8824db95,50461c6b)\n,S(9859020,aa807626,3a8ca18e,91c1afad,c20cf9f,9249c24e,1c652d19,7d5872ef,454323fd,21ab7d6e,470976f7,2d85fa39,a084e7eb,b332edd6,a3d054b8,d3c73e69)\n,S(821699a3,e7cbcbd5,a2b093b6,c825281c,ac00bc53,c44b33a9,d8c31b9e,464eb2b6,f7d59c17,2400cb9b,72b44cbc,bbbd3e9f,e62cf451,bce6f840,23b073ab,66a9726a)\n,S(bd06d4be,36423862,795fc7a5,5c48ceb8,440b3cc3,fc286dad,74ea7f6d,8cd370d9,3b09193a,fdcec88,ca4a5663,2cbb808f,61bb1253,fbcd1714,accd508,6183b90e)\n,S(2c7112e7,9c8cc78d,f04a4ed0,e043c6ca,bb4b734d,9177f822,5bc41123,4bbdf4d2,c81ccfad,d42e2248,7612884a,d900f61e,bae242ef,65ff1afd,6e03ec42,38391243)\n,S(51ae390f,a65d772c,833cbb8c,9ddf9ceb,b7f5236e,f1983905,762b7aaf,e122131e,3d7c9f80,80406b06,282f2a88,87dbb714,f1e96e1,e84eaec8,1256e1a8,ed7ba06e)\n,S(c59de112,de237a43,2bcb8348,e3b31356,c7432672,6b9167a1,77d826e4,dacc59ea,36109f16,7c5eb66d,9f09c1d9,c5e1676c,aa33e403,a8e052b0,2854c689,d5903b25)\n,S(8b99f23a,b7509d9b,151cb89a,45753026,77ca1e6,9219f0f7,57d01823,f556d978,86a31aad,f53afe44,f533cf0e,4bcd573c,d338e12f,904c8e9a,dc8e0080,f56a4164)\n,S(4c670f65,7d6fa9bd,9ee4135a,1ef1882e,61f5fb7c,9deea717,39fe0ab9,78369dd5,531a8226,5d4b5363,12875dc1,7f891d1,b54e0435,1b539dd3,c100b797,efe65417)\n,S(8e967e35,9daa0f95,fd7024e6,e57f0640,36aed9dc,9df0f33d,9388cedd,e0f38548,36f8055b,a59afaa5,8c88b833,ba110381,45fa0ab1,f0160d2f,1f1a1765,190d218f)\n,S(3f611915,9c45a37d,5c7bfaa,cf0cc959,5e2e097c,8c7bc3e,c82e9e33,3b2ac9e1,c80134a,b7437dc5,23e08757,8eeada53,b9d2f3ee,25b754fa,f6c32e02,d597d7d6)\n,S(3f59e49d,7c61412b,53fb203a,c7ebdedf,66bba683,87070745,9f85000c,f47641d9,bedd7088,4243dfe3,d238f101,f5dcd4e,64cd0978,986d50f2,ae3e2563,a43ad5b0)\n,S(5b7d84c9,b64836a4,3bc44b5b,fcf170e9,ad46d4da,197a2781,bbbcaf87,5bf6d490,9f55b29c,c7d6b0ff,facb8975,507df04b,f2164e5b,9928156a,7c73fec2,b34d984f)\n,S(e1ee74ae,ac3e83c,f73bf1f9,aafc3eab,90decf0d,a071aa88,962c29ea,51744b1c,9e86d2f8,b34e8525,568d674,8839839d,eefbe15b,80c66216,50acc508,f1277030)\n,S(fa1ccd5b,8d489448,e3196c22,e96ca7ed,eba721ac,beee200e,5ddc496b,6beea871,e2b7f59a,326a6654,9d6479a8,a7a56d7e,8513504b,fd2a9829,d25e5855,2f9bc469)\n,S(ef1e1cd7,f386096,1f6199d1,ab4a63ac,b292316b,f7a5e7a0,4c9f0c3a,7bfdc8bf,4cef9c01,a9de111d,8395dadc,e411e532,5783d377,559dc687,eeb510c2,ba98ef05)\n,S(db714eb9,3e75d3ba,dfa5cc4e,d4813db2,fe9c395,95a1ee8e,9b3e468a,e1326120,3dc49a86,b81278f4,84d30311,c8816840,fa3cb701,665c067f,618295aa,6a71a206)\n,S(5997f38d,bd572858,43ccf936,ee9d3feb,d70c79c7,9ad1c452,29af32fe,e6ea5d5a,adf7d862,b716011b,b9749e08,965c1ddf,1f44b678,df548eec,45a69a56,97e4a224)\n,S(97d6f6d9,a920577,7b08ae66,6fc1fc7a,956654bd,3bc6c039,ea4eec3d,3bbaeb92,b450dc47,ff219854,dad5ab97,13dfbbf7,ce03fedf,4e7ffc68,4bdf1b5c,c20068b9)\n,S(4f453fcd,5ec8b72b,69549ae3,c4eef99c,40232bca,1d6b10ab,c4b00d00,5ad307c4,aaded568,c4a8bc87,c7a442ba,f960d9e8,bd61f15e,d668f816,b94c0d2,9683f7f)\n,S(5a604a3,50593035,c71c0a6a,caa7946c,ae4c4490,c0db71e6,49972705,949424d6,e578fc12,6d8701a7,a02b92b9,3fa89d09,ae82779e,2f78586a,8937a6f4,133be9c8)\n,S(3f3071a2,916832fa,1b64cf0d,5b5fe8ee,2de601c9,34e08498,5d118696,7c635b3,e915b199,baeb233,b22adb6f,69df0e43,8712f25c,1be4470d,53851e4,451ad3a3)\n,S(745bc1cd,643189ac,fcf02c5f,bf99c222,f7476a6c,2ede6c45,31849491,901c06e5,59a2bb4a,8703775d,e9a519bd,10e59db4,be16cb41,d0275d21,87291d06,d29933f0)\n,S(bbd06e8c,adb3959d,853591a6,6387989,ab396736,8a6c1942,17580911,2637238e,ae0d8296,b484e5f3,dc46cb88,90b86a4,d562b003,a65a0c2a,2b4eded,38b8b690)\n,S(fcda8db6,128dbe66,850b7e43,63a3b35e,9f3eb569,b7af97a3,85e53fd4,922cf07c,4bf3ddfc,37a0f9a8,5f758ee1,4c4d5c86,cd11f1e8,2a05ff28,3a0f535f,f9551974)\n,S(6325dfdf,fc9c7ded,2a65e113,27210ccb,4ed2da97,4eded570,5ca1add9,9873cce2,89fe4c99,683e6fc7,170ada7e,26179fea,7ce1930f,af1a7358,4d7d56d3,4cf222e1)\n,S(77594ca6,93495096,3ab5797a,5279d0a7,513df59b,41a3ad59,245e3f29,22ee0d7f,195eb112,2ccfbfc8,fdeddf45,ef2ef58f,631df03b,ca66a4a9,5818dd83,e5faabb2)\n,S(f356ec67,ea9b242f,4f1348fd,c6592772,e2defd7e,308427b,ede15452,baa67867,3d2265b9,e23f8ea4,9a2b7145,9c98b03f,d75a2110,8f104121,e4a2fb4c,d633ba7a)\n,S(3360ae12,9b0fa48e,c78e3091,4f8ae6f9,86149f0b,590a12ff,cadfdd2e,f8a205c9,79b37bf2,720d5a11,3ec09872,22b0a626,3d7a2051,e337cb83,dcb52df7,25d18a34)\n,S(44e90f52,c703c50d,b331a4c5,fc47613f,b29040ab,9ff0f282,3fc15ad3,f9e8727b,62dfb341,92653e6f,636d013a,718932f6,95c2491e,26d16feb,4009ec05,e2f55f17)\n,S(e5d367a9,b5c3ae22,31195876,4b28fe35,c9e04289,518aa09e,e7902b5e,4ec84047,ea1b257f,1abf0fa,6fb37c06,907052e7,fbbc06b4,c2382ace,9c9a98bc,e6f8bcf0)\n,S(8478e8fd,7910e5ad,3c061e6d,422806a5,559baab,e083b8de,1005413b,59a63957,4f793418,5193499,13fe38c4,514bd4bf,2f3f1ebd,b492fd5c,fd8c1bc3,1a2df1d6)\n,S(c38327c8,587731b,f5b5e224,79c9274,10c97dff,f6855b6d,c2ccf761,2a84b42d,eb03afac,cb1b102e,7e87d61f,5012ce74,a213fefa,b855db22,bc657d52,4dabfcd6)\n,S(b9e8a812,5348a672,558f48c9,d17f28a2,4662b4b6,604ee14c,d622b521,bc51f10a,35c2780d,65fcd07b,51ea0224,1771b523,3813e7bb,97a1744c,e3dad732,ef1ccfee)\n,S(a54aa2d5,95cfa325,38d2e483,70ba86af,d3c3b53d,2141b0fd,cc68a729,a5cc713e,bf74dc6e,63c02b2e,e676b9c8,6a851a48,7e9552b9,a32eabaf,4e1faa06,8bb8a159)\n,S(d45fec3c,e2df54eb,844ad145,fb8884ac,420ce2ad,85cd55ea,4cc19e1f,da9fd956,ed8cfb00,65aecb6a,6901dbf9,b8c208d4,bf6be1e7,ee74a08d,205c48bf,8cb81bd6)\n,S(f4b44e98,f728b318,ca959829,d4cd836c,5c0136ab,8e433101,87be24ad,53192172,ef5521b3,960bce49,2c841fd8,8cf7b8dd,2febdd8b,f0aa64e8,4d3c2a09,89ea9fa1)\n,S(dec6d1bf,d349110,faa0cd40,e8533078,dcec40c6,e260b9e2,8412d424,353d67e3,73a16f81,3609c901,71efe44f,32ffc90f,9451b0b3,24107b72,54ca2fba,65095895)\n,S(1fbcdd53,72e17c41,9310b9c0,2273534d,265f1c24,bc1a6039,238b5b7a,b3ff013e,9cf4ff4a,6a61c11,20c4d14b,97275547,b2358f75,8a2a774f,22bc77f2,4c6c27ca)\n,S(d9cef0cb,38c6ed7,7aed53f4,93a31daa,50ea1ff9,aa43b890,357012fb,e2ab593b,32a416fe,246872d5,b68e6654,7f19dda5,e161cd13,ed041486,4d0c2dd,3653303f)\n,S(1641b549,88e22a18,45e2135f,88d2386,4e2f607c,ce33fcce,de174a60,1ff03da3,edd3f0d9,ed718767,3664e1b9,540f816d,48e3ffd1,cfad86fb,5b68dfbd,7d94922f)\n,S(99ef6c16,3c5d9ffb,1b638b21,1ef60166,37938f83,ac4ef76f,96c5366c,3a243cdd,6b6eef62,d819581d,e1dd7796,df043e02,7f912bbe,6ba1e499,a311769e,d6f66b48)\n,S(49358d2d,c24c2e8b,80ff79b0,9c53645e,b9c47fb2,8ea4ffe4,e2f4679f,5b5bc97c,512a14a7,f9df40eb,ef7c1cbf,f8e1caf7,b8c80748,7bee3865,37837cae,dc1cf5b4)\n,S(e31d3fcf,b1dedfe9,2549c5e1,a14cf383,c8c122a5,a430aee8,a4eec846,7ceb206b,7bc3c266,69db747b,a3ad1dd,e83464f9,effc4dad,b4de7687,e6c3ae56,a5b0449b)\n,S(a82ec9d6,ac86bcad,fbb32e66,a28d7483,ad1fbb7f,979a15d4,4e324ce1,86c64adf,bac87d2b,c28b1ae5,f4ab46f1,ac779936,3a9efad0,b1e1f81,6c4ec6d3,cf74c89)\n,S(21650994,2bffa2e2,479ab82b,18cd3aba,dc370c3,18c71c08,1bfb53d4,c8ea113d,97a8246a,2f653450,be513b6f,62419f90,f84511be,9a5f3103,feca77c9,c81fcae3)\n,S(735050d8,208d9688,7fdf8070,e448e905,e4e666c6,3db5857f,63ceb362,c6dd4b84,2e3fb438,563661c9,e6fe23f0,7c8219ac,216887cb,ad307918,90001f9e,2ab9e2e9)\n,S(1d021861,e679dc08,a34c3813,bb9c3e9b,65f87800,79dc08ba,197b3b66,47afe506,14b6d0b9,2303483d,9e92cd0,e295bf08,4a10e84c,ee0b7c50,ceaa6ba7,a6fd2f1f)\n,S(7a7eee74,86ca8973,a858c15d,54eff96f,f91c5577,4985433c,1bdc4f4e,46d7810b,5e83a07f,5d9150e7,a7f5057d,87d19ccf,448fed1b,bc1e2297,c7012cbb,77b498cf)\n,S(811c3d4,fe0a3061,47c05cce,32a32ada,48593802,32f24b51,f50e726d,a702beec,a6fcc16c,6c9cf4f9,2e84214e,35ad8577,b28e599d,31ed74ef,c95eb2bc,833d9f0a)\n,S(2ca14438,89ea9e8f,24d5b1e,e44b26d3,ca25ed08,30ae950b,4357da49,21ad606c,7b48a6c6,92d8a29f,a82c656,f8e6213,c5e90be3,7413d86f,42e10e63,1026c551)\n,S(a980ffe1,61041afc,339566d2,957e6624,5dd3e0a5,deee9c80,d57b1f1f,390277bf,3276f7a2,a139343b,87744079,7a174d99,457d5005,71ce47fd,10e41456,7a1c64c)\n,S(e570a3d9,cbccb74f,c582954a,998d9371,fde41d98,e65de6bc,9579d6ea,d9cd80bd,5a749177,6658398e,99d3035,12c168bd,9400bc6b,c7dea2df,2739abe4,16973a52)\n,S(f5fbaab8,952cf50e,66d3d985,d9280bad,71bd25fb,662358c9,72b954c3,7bce1110,1aca2123,6179f821,a4f097c9,b48a744f,8010818d,3ac6cf,b02f57f3,1fd77175)\n,S(2e5942fb,ecbda8ac,15408d25,84ab7c75,6f9e525e,c4dbf375,5559dea1,718d89be,95106507,d14199a7,8f123d6c,f6b59262,30e12a1a,8c0ca016,40c556fb,14bc790b)\n,S(92bd04a9,891c99e9,6c9e7f64,a9bab705,a9fc83f,a739413e,a2f33001,b55dd296,cf5e3733,659bfd9c,e5417ba6,817b6a0f,5cc71c34,22165fbf,13019fad,822ba587)\n,S(30ddfd9f,a50feae1,e3cc5426,93ddcd62,4d0e52b0,867248ff,ed7d3041,a7b11083,ff15d0fe,2bb183ef,a18389e3,df4269ca,21bdfa0f,87ac641b,14bdaf66,26eb42ed)\n,S(8cf5150b,df8ac68a,af319688,245719e4,67ddddb,72fa7f1c,baf39de7,252a9f4f,4c28497b,a299bb19,83b18bc2,508c98d8,2a9963ab,4145807a,2130fc05,4186cfd5)\n,S(1f4b4efd,50974efb,3caed9f7,4f6dd979,4a8e3c09,8decc1b8,69032885,265e46c7,6c4b04c7,f7c6b00d,c38adeb8,a47c7c0a,68535229,26500a76,ee1c6feb,179fd399)\n,S(9d524900,979afa33,8d5883ba,d13d038c,3f915cb9,f2e29a2,2a028b18,d091af81,409a113c,37c732d,1104453d,6b161d33,db3257c7,b9a73e1,e0f1679e,6802be38)\n,S(52e1e4e4,46eed9d0,fd5c124c,1c23403c,5b03984c,f3fb0734,c627f34b,dda2e3a1,674a5731,7375ffa8,c3c4104f,12c1713a,e2dbc630,75a77e5b,26243217,88320a7)\n,S(827b171a,8eef4e31,e6ca8b6e,7c6e36fa,e0a6c93,a77d7148,fd22f7a8,16401c8b,65cd85fd,d9b801cf,7de6d14c,b78ba114,1d58c7fa,129f9f08,8275f364,f7ca7540)\n,S(124f45e9,61d89642,6a1abc32,e582e246,3db29954,1bea0383,c83f917b,6cdf2f9b,734e2fe4,110b65b1,2d60626f,c6288f87,e48e7a7d,213a4f83,58bb4d67,978d6c62)\n,S(3b71298,18b2b324,10e4f002,899204c4,fb4ac9d6,c08d1169,5f5f5699,9a4d67e2,28b6f78b,cee16b5,5c010c51,ec465609,54ba6368,a18ae218,5607c1fb,42c27c3b)\n,S(d271d87e,63b5363,e664485,ea6ae70e,e2b887a1,c7f7e0a4,290033b5,512d8a00,65d43804,7865e280,273122ba,8d8644d0,60ef5927,34971c9b,510238eb,9d6da847)\n,S(1d1c6d85,2db35160,67cd2d82,e2ba552c,c5ca0c9,ae7bd661,e8494b25,cdc03a7,bc31f4c5,673a0256,ee9b6840,7aeea035,e19f874c,bdd7aebb,ae8b1005,4e691f62)\n,S(8fee89b4,71e394c0,ddad274c,ba07de4,bf8d2ecc,695647fb,1d3756fd,46efdd9d,5d5ed0c3,8479578f,d17ae148,7198f9cf,4ba5cf71,46a9b4c4,34ca62f1,bd2b8c6c)\n,S(681fcf09,55a0f351,6026302c,ce3ee475,8ef9385f,908dace5,5d7fbd30,8810a6ec,4307f75b,99927624,80187edb,c4c6575c,aa54e8f4,190f0885,e6d358ca,2a38faa)\n,S(717fd6dd,fcb5a71b,6a584a28,904cd3e2,6f6c1a89,7fc32918,90792937,b3a6971b,b403f829,71d4ad04,dfc40553,27f6da8e,1b05e25d,341d6511,d7cd859f,58b17992)\n,S(f2b95723,94eb9786,dc1f4998,6ad8c340,d2983279,c7323a34,227013e3,754f2ff6,b553d381,3efdcd41,7189645d,d9917b73,bb69e705,e7a6520d,dbaa497e,7766763b)\n,S(58714be6,d7d86c89,65309b52,414135c1,9ab6fed0,1d56d7b1,4237485d,96730b1b,c011f34,3e38ce5b,deab84ab,f0e31537,4039845c,5fa4fcf8,1c9a4d5e,6fe3e533)\n,S(d33ce5ab,c828f8c1,b9700d49,e9c6b4fa,b30819fb,b2bea23b,7f915bc0,7a6ff3c3,739b6222,39134988,22372ba6,3fbe22f1,ef59394f,37db956f,caca4c11,75a23395)\n,S(82202e32,fc7d0128,4eba58ff,42f7d94a,24904808,d6f920d5,9837b26d,63b55479,fde63954,50aa55e4,fcc4fb0a,8ac2c880,63aa3202,9a00004d,edd033b6,2563b4c8)\n,S(25e63218,5bfb4c88,fa300e37,c8b64a,941e6487,a34262b7,419fa7c,2dea7781,ae696b07,4802ab99,4df2d84c,c6731d7e,9caa124,548c2a11,42ddcdbe,f716e640)\n,S(e0336a05,b9254e1a,f2468a36,343a0dff,9da8773a,1efdc487,53c1a95b,605c114e,41d75960,377ada38,79b97455,346266c5,5ba05915,9ddad050,d96d9d8b,afb12a18)\n,S(843363af,7fd2b1bd,1c9a9253,e42489c1,34ee875a,db57b752,62d731aa,9a996662,e5c0a2d1,dbfcf013,ed4bda36,f153a328,12c4b3b1,66e48473,4d2d3562,ffcde6ca)\n,S(adb210b8,1cdb7f18,f97955cf,fa7e5763,abb9f202,9d283c05,26df6332,951178de,2c211f05,d8182aa6,d784721,948afa11,364db5ec,2e1becf0,68eb91a5,74ea0e35)\n,S(ab0c5fa1,a2fe2235,ee93854f,59a13792,2034604e,5857b6e0,88b65142,f24d7491,e54725cb,e36d6e15,71ca7384,7383553,b9dc48cd,eca6932b,8d92f785,b80124d2)\n,S(3e5de77a,1d2163e4,3f3124b0,af4f5473,868a080b,67acd835,f9cbc88d,7885deda,a6ed34a4,2f9503b8,b83e66b8,377f514a,e1927dc4,c37ef6d2,254e651d,15746630)\n,S(60c68b3d,31d1d326,5b71f068,8f32f671,32184815,f83a9ceb,50eaef6,4991ec05,977acc61,9f7d24c8,a95aecbe,987737a5,89886729,500ed32a,9d760fca,7c00d498)\n,S(21b052e9,b646e595,b6c04a76,a66b9b25,4a126729,6bea0654,64fc5b31,69c135e2,1029e4cd,2fb3d717,6e87292c,4b0dfd7f,18db6ed4,59aa9285,38f0989c,540779e7)\n,S(700caf3,7c664515,ee501e66,60be4cca,f58bb2ef,5b11f79d,c027dba3,7b523d68,7df76b88,f1c346f3,2e32487c,19957830,8eac9b7e,56edc948,e1a934c7,6fa08be1)\n,S(c5ab9bd2,1293844a,ce5f1c9f,56458315,5d34aeaf,565a5696,29969664,49541e8d,2d2081c6,c61d6c8a,a0df4467,8ec53a7e,9b34d90c,57db2f29,c0361304,1c422d8)\n,S(8afc3f2e,d53f5dc1,448d15af,8c2151d8,5713fbdd,5d46a3df,a4ad376a,16d75a3,11f6393,2627bed9,e015a99d,42193e6b,6767c513,f3457897,64db1a4e,4b9b6c8f)\n,S(414ad9c6,bb55eadf,cf4cf729,27ae3682,c0d69867,ede9f4d8,6e173c50,3a5007a7,c4bcd0f8,f4de9b1d,1102306b,667a546d,dafb6f82,edbdffd6,181dd3a0,8f603585)\n,S(8211e240,b84b7317,a9c5ec88,fdc426d1,a163a2d3,aaf088fd,b2317247,cb04a1e3,ca76a59b,b268bf51,4f06c4f6,d5961b33,a74f10b1,70a9e9be,4e7942ad,26722bbb)\n,S(a54dfd32,363add3c,75ec4452,3094b27a,3f7cd291,43ee52f4,29e59daf,22ba700e,f160822c,59510098,3e38d130,49b44865,3639ac74,6a93ebbb,2798d92e,bad4490b)\n,S(77d64c55,52b29b18,a7aee1a8,1e1e9d3f,e2921a43,cfbd95e9,a3ba7cb9,498860f7,e97bb8f9,5ea9c8f4,440ad9d7,36d9a06a,fed03a9,cc96597,8d06f2e7,8208ff10)\n,S(485b3814,b33e6bf1,1f47f0f5,f0e5a189,1b57c103,60f13d61,ba7947e1,6e309ca9,e6bb7870,ce607c62,a6050dd0,946c8653,f998576f,2c781b5f,15282632,4e38bdb)\n,S(ed2381ec,a90a78c2,def618be,1b6edc51,7ced2ac8,14aee9aa,b0a7068f,72739c,cb0873e0,ba326452,380c291e,c635381e,d6859916,2ca10fbc,3de45ffb,134954c7)\n,S(e444af79,d36bc127,c83c7369,a4cba0fe,955b6a66,8f2e7a68,4a65e57c,44ed971d,a7876f03,27b6823a,aaf55ca1,6a48998a,ec50e5de,10d34e9,dd7c554f,d3785fff)\n,S(af8c34d7,7de75a2d,5f64296c,152fea4f,b8677b8a,96cb278c,7ed7e50,69fc1fca,48ce5862,ab6ec1a8,ce55899f,24632be2,f3c451cb,8b81ca8c,f9ecc3b2,2984d673)\n,S(e999d466,243a44ed,18e745a8,1da04a31,8940c88,760480cb,e315436c,f67efe13,f41e8e70,63a84661,c22ac0e7,5cdedbd0,ef55d3eb,7fa813cb,2f7d1fb0,237fe36)\n,S(c40ef8aa,7d8964ff,a3cc923a,2fdebec,72cafaa,58b72d66,e209b644,604bcc72,480e35b5,6549a1e6,f112c3b6,176f3378,ff50ebc7,b3efac2f,696f0627,b7238ce5)\n,S(482ee41d,e3f9499c,8992b546,e209aa5d,679e4b8a,22a26615,1bd1b0f3,9a52982f,510e6070,d2131815,2d52eff0,ee10ec6f,563f92ec,a0e549f8,32efee81,dcd3de3d)\n,S(4660a468,25a3c1d6,67003c69,4d36f8b7,6df7ca32,c6029fd4,65dcf726,5c58fae5,3d982bf5,46b5c296,988acc72,2dade97,791de8e0,150397c0,700bfa10,ba23f618)\n,S(b85e624c,92ba6f0b,3fb1dc03,37589994,d8a3aee1,76314d87,3c8bef0,eb5d8f8d,88936b33,20a55ba4,24bff93e,fb36ef77,e2cdff26,866cd486,88c61868,ad75679b)\n,S(a41920b5,361a26bf,bd187eba,b62fd5b3,b3be282f,94ef94c6,b1698754,902683e3,7790a196,29d93b4d,3d27201b,32053e02,c95a8f9f,260647d1,491c7a4a,e15ea98a)\n,S(93882da9,79262a60,3252f01b,bf101d89,ed1abf8b,15507937,55979f4,fbb7f86e,938884d,f0a716ef,137450b,ad5f022e,23e570f1,3ed37e02,15a40910,189d7e44)\n,S(a10509f8,3efeda60,acf56b64,3709b197,ebfa6a59,e66efb06,79c23225,c8952e00,759083d5,559bde4d,9a37df5,24cae4f8,5a06e7a4,7c0e15fe,830f0677,c24d1ddb)\n,S(2b945a97,6ea74278,73d7e587,dfe75eaf,c55de704,8aa26d29,4b3b1ef9,2beb3651,423c07ed,27ccbf6b,9d1cbabc,e00b451b,cb488d10,e5daf752,6980ef65,6893c65)\n,S(86f9d9bb,c1a0bfe4,e03da0,13f17017,f6951691,28d51073,b594457b,fcc37f0,f370c624,2e303796,9339cd4b,fbc19e8f,62388f02,649247ed,df3c6c67,464c32bb)\n,S(f8995af9,555e044e,6238d895,8bdb4e13,3aa9cc0f,90a9206c,16d0f83,dd61ed91,b2d4d2e3,1bee12c8,3b8bdab8,34fa2e63,1febdb93,4af194bc,d0825921,4ea8a060)\n,S(ab55a27f,69eb352d,455eee7f,bbc1c74,fdea2621,63d09dbe,2f554417,819394ce,8ac56493,60f585b5,72373bc1,74a930e2,4d54674a,89789353,4a166200,e31b801a)\n,S(4fc106c9,c428df98,916a8906,95e98353,ce84723f,fadae522,e8a89916,a23b9fa6,90d732e8,3d54341e,4f4c88be,3392687d,fdebbc4a,7c19afd1,92531688,9eb92031)\n,S(c9c85980,8831cccb,77d87b25,73a894e3,874080db,ba076b2,4626bc82,3149a91,9fad4ccd,8c0949f9,be9a6355,f0bdfa36,c5f99268,780566e6,a6f302e3,b2abf0b8)\n,S(c0cb5b7e,2293abba,5ff78c46,aa1422fd,a278eb5c,ddd58cb7,aee77149,1c5209e7,8101f42e,36648586,5db6b572,d0df4ca3,cc72789e,ed8d27d5,1330d733,4e10c47b)\n,S(dbfc03c5,16d93f83,472ab60c,391bdd69,af2f70ce,fbce15d,140f1590,d8ce0b63,f838e14d,7228ca2e,9a33ecfe,c376aa4e,4811fa24,debc7b46,4658c153,fed26564)\n,S(de260685,eea13ff1,1571d891,35607b0,435140b9,62e3baf3,7cc3f3d3,484f59c8,6bc23ec9,a6025865,e6363335,bb66f1e6,c1f5f54c,aa5f8acc,d7f8fae5,99cfbbcc)\n,S(58d78d60,b8cb8fdb,1b62f79,f6c17ebb,1ed8129f,c7819e5f,6f73c58b,faa2e71e,7cbbe4f2,fd6bc671,8c222f5e,16391133,b04d6d3d,bb263531,40aa4053,b44bccc1)\n,S(e72b9b1a,eed54fe5,ab0869aa,90014e3b,fde1af12,f646d738,211ebefe,2c00a490,cd92d14d,8f595833,842af020,a2cc82a0,d9465969,77d25d34,8cff3273,90af4fc2)\n,S(6a86bae,d55a5be1,8b7cef97,c9dff8a8,b725f614,2221485b,3b9f348d,570fd658,138a2691,4c3b3015,10312140,7709fa87,60a14f14,571a9d40,81c06d67,ef2c5724)\n,S(1ca08cf6,7240f244,d6cb0059,564fc283,b17c39e1,b624716e,e100aee,bb0a1fc5,22e24fce,655d09ec,34a36317,c66adf07,deec2743,4e9c016a,b3447b3f,d9ef0a55)\n,S(d95dc128,feba49c4,73e1ee30,bcddf76e,b7cf628a,fd495607,f558201,824a0b0f,d5340ab8,fea3e137,d1061274,c69b68e3,633e98ba,ae2fe116,1612c4d6,c7c7e8a1)\n,S(2cccd22a,7f4fd501,6c3a14e4,769a88bb,ae7e288b,d9987afc,f3c073f8,ccd83857,ae82663c,aea89fdb,4710f849,ff8e4fb8,c2a7b614,4edb5f3b,f2564dd,73b389e)\n,S(ec17b5f6,c8e4de23,937bc003,7dd7b411,ae4a9ac8,1f2801d1,c5eebeb0,95628a43,b3e0d51d,fd5815b0,631fa298,968fe70f,74319620,f0798734,8e66e6e9,6658df83)\n,S(a63aaf7e,62907f4e,1a613cdd,ccf1cc98,cee8e12c,8bace3ca,95685889,6c96b6f4,2f953ebc,dc5f9973,e9d44ab1,23255a21,f8bc1a7d,e800cdee,ef754031,aee8216e)\n,S(8eb4ff30,318d8d0d,6b45636c,b296d137,90e345af,19a14b2c,550e0169,87ad32f3,4b8e238b,ae7ffc7e,7d600151,c5ebb776,cc01d51,827f171,8f28af77,ca4a3e3)\n,S(ab1420af,bb5b4397,f578a6e5,74a63aec,2432fa8c,b4712341,4374add9,8276b8d2,faf6328e,a197e927,65b9df90,a79558b,8f264acd,7f75b574,90ce657f,64b94396)\n,S(daa1890e,6b2ba1aa,dcc16f1c,c1d5999d,5102aa6b,348ffb5e,9630bd1a,886f680a,19facb69,5a63eb94,cb6f6005,cf2bbd23,8744f05c,2c220510,94bf6dfa,352fa209)\n,S(f199f52e,5398d1b4,899a1b0e,df8ebb73,cb08a642,bd22ff2e,b1cf647,7f2a28e3,3619abab,a5e2131d,4ccf8747,67ef9b75,2d5278ac,5549bd9e,5c1b5985,9ec2f454)\n,S(182a9e93,a5f9ecf3,6bf20bc1,497a4a35,e75c86f5,9c9fc046,e2752223,f046ad6a,c6095e88,c39dee18,ca867693,d85617c7,e0924dca,34af07a5,c731e488,ffb8bcfd)\n,S(8a4cb53,636fe66,b660a701,64277fb2,5ac21eae,906327c,3b509954,b214abbb,693e5851,4cc6a941,23ee707f,ad25d638,8efcb85c,25500bbf,63fd6926,a1d0ed1c)\n,S(4901335a,3b40c33e,115e3105,82c55972,f495178c,813bd8d4,2b208916,5c8c1282,47007176,429d740d,dcac70eb,9e1f0e94,f26a9a0e,4dde0166,24d9d801,c84214e3)\n,S(8180e5a7,7c34362b,461b49e1,4b9f2e05,df64f55d,cad82b8f,cdf41232,984e01dd,34cf5621,d4b9f100,aa34b0fd,5ac91d,cb3fb49c,130f3e65,de742ac,af05040b)\n,S(8f71227e,fea9f4a8,9dcaeee3,58eaa5d5,a90e1d7c,b7d232a4,b1085fe1,3651ee9f,a4da15bc,bb2b79a0,a27c344f,3b914c7f,e272676a,bc045aae,e90daf4e,9655ad73)\n,S(dbeb9b74,cdc9bacb,83592a2,a3cc19a6,d1ea8eaa,5a086a3c,cc68d423,cfb58264,be668792,83f07fb5,830732eb,79e16bbc,18e86df9,b659e2d4,5b1009a3,40576161)\n,S(f328e93f,a7f52cac,3c7b09b6,280528dd,7d9ea4df,8317a958,ab0a617d,71591933,41ce8c59,811f9e90,61dc3f3a,7d85d394,2f780c17,d7ebca60,fc042311,f2405547)\n,S(56d4f403,416b1bec,49c5f44c,2021c245,d4ca4181,5131cb7d,8fb0cf08,30fea051,cc5f6133,948f77be,934cb637,3d5dce8c,51ae1a92,e3d802a8,d35a3ad8,50bd39ce)\n,S(8e22e04b,8bb476b7,ccebecf2,a327fd41,dd90c9fa,67cfc49,e9cf4ebc,39022b8,1f8fa60,3204696d,34d03c02,31d3ef58,934e7992,c2c81d6d,3e4193b3,8286b8b)\n,S(341b22e4,b9a77c68,f93624dc,1cfefade,b396eb72,bf9fce1a,51867d7a,ef064f6,95839f87,7bc36957,59562bcf,dbcb2db,af11ed72,7d329e27,cfc8ff8b,92d9441a)\n,S(3ea42e93,9f234112,879e8680,94fb8a8c,e6af9799,c000b050,45eb2026,3b324763,44324167,6f5aa6f0,4fe4d51f,fecfa8fd,60a5c0a3,38b16f59,1866bd51,2e01a623)\n,S(afe7b44c,ef10514e,f94faa1b,b8cde91c,23d8a660,a71c3173,42f927bf,535d625b,7617a788,51218772,bcd51f18,54b063ee,6cfcdd77,7a388427,51cacfc8,7c8b4b65)\n,S(a360ca02,abb40d4c,6e0ac725,f2c035d1,12f69ee3,ff0e1dda,37a3fbe6,a2034d2b,161e7178,3fec3ea0,305d0f72,3a60846f,9d8bbe79,255a3814,fab83269,916b646d)\n,S(10484e5f,f7d9fe7d,9b65d989,9b2ecdf7,5984d18c,1199f61e,c914a85b,78011b88,12d1c0e2,1e137357,9ede1086,c2c1449f,e7f4e03d,78f7b184,4f744d6f,9576cdc9)\n,S(76c2dce1,5dad9ddc,24276c40,eda7de6a,b11245e6,5b051ba6,7eec39c6,d256b138,d9a601ce,585b0839,92e3fca2,a43739a3,61a8967d,3eb0f605,ed4cef15,fc64ce82)\n,S(671a31d4,c3e6ed98,b044fcb1,83dc60c7,d1d83988,3a547356,27b99b75,11d4d2e1,6fdd8d15,2005ef3f,7ef3762f,bf43a849,281f185e,a52c1b3b,8ad371b,e053088)\n,S(91d0f565,a2da6903,12b72998,57f71c18,c2343a5b,a6f17243,1bee12b6,6e898a37,9d6a55b9,1956a288,d56906a1,1f7cddd,e6393ad6,7249147a,41eb209d,7f32f681)\n,S(7e59f058,1953a2c3,cbd4d0cd,8f4df7b8,6b90d8de,7240b2d4,de9ee9ab,628512ba,33b0d1eb,74cc7d60,ef419b0a,f9f03714,35a012fe,328fbdbd,9d9b69bb,9a42a173)\n,S(ef78b65e,b791bed,212652ad,ab1f32ff,f43a285b,e040380d,d3492afe,1f788a26,9f3e2538,96d5afc2,3ea7ab1b,24ffac00,f156cdef,93957910,abb1cd1b,6508d306)\n,S(78b978d0,199833ee,417ce2f5,fc12cb01,cb0c0e4c,ee752e1f,50a8cdf9,b56b7cd3,9f9c7dd7,372606bb,e3170141,31591f5d,dd631f91,71460cd0,19709478,c1560dd9)\n,S(5f785b31,f9945a20,e992f5e8,80abab72,906ffdfa,7ba7ccef,f1b3d26d,70bfe64a,a3cc480e,b3cb386a,ffa1988d,3227911d,57522413,e5d0846e,a6d0a17,2b881c1c)\n,S(9fee7999,7cbb492f,cf3aadfa,44484d71,2c3887d,6375c887,fcee9fe5,7806b3d1,43114327,7e94c760,1fbef25a,60e7d448,c0f0b8f0,c6c64437,a129d4ac,fe24c22e)\n,S(12f2dd5d,b75d8885,7b7befd7,cdbd7c76,c0f46213,f9a53102,acd8b0c,4ee3f30b,ce27598b,e85049e,9ad3ecfa,d3864070,f8510570,742dd021,6dcb4aa5,334097d8)\n,S(c694aeb4,3ee2b51c,3f0e2bef,bc1b718e,fbb86f9f,1d2a84d5,3178325d,cf997bd7,41481f3e,b6a69311,2cac3e5c,c85a6f83,6fc5190e,ae71f226,bdc887a8,ed050977)\n,S(fe266a46,14c5c05c,baf3493f,5af3befa,9bd16100,860bab1,49ad78ca,81047ae9,e2e18ebe,c44694d4,b7c614ad,a772a5c4,f58ca087,4957f20b,741b954,18471e6b)\n,S(7975e1dc,926b07c,487abfa5,8c183f21,daff04e7,f67a7250,d2152699,356118dd,c984b97,44e2b300,ca54b779,da94dae5,f943468d,9b9729d8,21cfc709,351409e5)\n,S(93573cdb,50183589,a0909e8e,6186d700,7022848e,b7fd6951,a137cf16,a18a2b06,7a957c66,3047f6ae,d9490039,d136cace,caae2d8a,fc9f50f0,26590e62,18bf47d5)\n,S(c0bd2e1e,a60f6feb,8e0ac7dd,485fc4fe,6771d80e,e29b4829,fa37faf8,81d77660,685b74fd,9edde1c7,69076267,d9f247e8,2effc83f,e25af065,56aff25b,335bacd)\n,S(56bac0e1,93192207,906e5f45,d55d5919,b676852b,daa43253,8c4c6984,9c24bf3e,e3bf51d3,9856b812,d2e480bb,c8b118e5,f5c0ae9,f8d09096,a5d207ec,2fc18ebf)\n,S(53b41b13,fe7cddd2,ebfec7c4,a985fded,5225fa0a,b93dfc65,2314d1e5,9142c06c,90fcba57,44e4f565,5d2e038d,ccd2bdff,cb4ecf20,48f2ba98,8f62fe9b,c3b69c4b)\n,S(bda05e31,ccc0edb9,47ebaa26,9182ca2c,b1136400,674ce5f5,d55fcf2a,c2e765bb,97275979,31236982,a7459356,7308ea97,2fff08da,ae8f707b,447dc6ba,7acf75e8)\n,S(48dd1c6a,8a900820,1fe09f19,a8f65f82,91196e95,1c57189b,21aede15,4b0413d8,79a1f6fb,1a943dca,6517e287,80e72f85,c5a6150d,9c50d7af,78c8b63a,c09b98f5)\n,S(75406269,e28c428c,8eeff4e2,ce9a2d48,2be8346f,3446451c,13c04380,292f1f2c,4743b097,211c807e,23cd13d7,692efc44,202c44cd,dde5a89f,9e7cdc5a,133e996a)\n,S(1aa55d93,bf318133,8840ae4d,24314ffc,74420002,4ddab165,4018604a,2192ee5f,babac354,92d59e8a,656ac7e9,9b6cb2cd,7a6a8e88,1361118f,41e38f1,2cbc3bfc)\n,S(75be4c50,db7bc629,e64fa850,3d89f722,34d214f4,9b176fba,b937120c,477dcf03,b5520bba,8c606db2,833d934,3c860c6b,ed2e5e2a,41a6c3fb,51154c82,94b6f819)\n,S(f3604822,e4ed8b2d,d4b2486,b611b95b,6508e10a,1c725c7d,8d638254,3cef6c8c,f405ac79,7404bc6a,25a1a412,f2cbd698,75d99d2c,b23ac105,f9839446,222dc0f5)\n,S(6c9216e6,6f9326be,fad5f727,ae0326b1,da54ee91,f041d2bf,2d87dff0,e77cefe8,64a021b9,bc1947c8,df546f92,2f5230df,1ec2f372,50651704,557377fb,39d16517)\n,S(ae479bbd,ce97732d,df313861,76807678,988346e2,5b12bb09,e74d474d,6905668a,a3ce0355,c5996087,89936336,64d9bdd2,b33a6f97,ea3f28b3,f4b7c0ac,92612929)\n,S(ce92c179,66f74db2,1c6abcf8,36cfd2f7,9ccc05a7,aaaf74ff,4807052d,754898be,f3e3d3f3,530f38c4,ca59cec9,c8e3456b,8adebf80,3f10927c,e44e79ca,601bb978)\n,S(8a0bbeb6,815275c1,77553d87,5988c4dd,a96f5ae2,378a3b9f,477cf162,6e6ea68d,958b795e,46f45412,acaa9f77,85a4e34,a7c74eac,228476d6,4e917983,5fe77f4e)\n,S(c2a44ee9,975400e2,912a033c,5ed1e7a,7f0e97a7,1c86e8d0,c2e5136,8dd9ccfe,956435ef,7d24a507,dbfb69b2,93b51369,70cd17b8,ebf6bc60,596a9545,3675668f)\n,S(b615f625,534ddf61,47b78520,85443bcd,3d3bbe91,c815dc29,3cc891c7,199ea1e1,4cabf4f1,99e21468,62a90876,4f65c624,fe3afd1c,6b399e12,267dc1e7,6ec3ea25)\n,S(afccaf8d,fdcf272a,cf56dde9,3980bee7,b64a0c54,f80830b5,5fd0b93b,e8a75a0e,8d8ec5d,6f6fc44f,89f6d9ba,735861af,e7d6a660,7d88e95,54f2c141,1042a63e)\n,S(534176a8,c5311b26,1f39395d,f78300b,559d072a,cb3873ac,32833c8a,9b135f53,ab84f84b,5eeea7b4,87ef6639,8fa756fa,b16155d,683ef643,b03c7e6c,8ab2f436)\n,S(5f7aa173,97ef95cd,f47651ac,6220f3f2,8705abbc,6531b93e,a65fcd14,1b91f34c,72f7d898,3cddb34f,2ed1b28f,17a77d8e,70cffcbb,e0462ab8,b7548561,9881da22)\n,S(d4fb4a4c,c1e2fb72,b301db19,335afd7a,b6a95258,6903f449,aa287fc,ac8f3d3b,76b572e8,4a9db287,19d098cd,5dee787e,f213adf7,9ae90306,8881894,e14154f9)\n,S(3dc67563,843b2f3a,f793116c,23db0dd0,dad0975c,5abbf569,4c6d454c,9f7a9ff4,ddf65b9e,4db83b7f,43d0ccf8,49a8088,4894b277,4fb39fbf,78076a60,356753ae)\n,S(657912bd,1edd014d,1386c449,50cd1667,9c3e415d,b36e36b1,3bb5c82c,a2f897d6,4e2fdfdb,11bbe240,8fc7fb3a,acd06c69,78205e48,c9f5a143,4300927e,fed505cf)\n,S(5a453b3,5f82585c,f64473e5,f3fe937,6f412b5f,c4ade7b8,f9081717,3fd69f99,fc169e11,3448b590,4e1dbf06,f4aba1a3,ec2fb4b5,7f2b4c4f,a29b6617,58097ebe)\n,S(c3adf45a,c24b4bc8,69acfaf1,f96a3043,d01c68b2,f4ff689,93b37b3,a4052679,3d923207,cd374b49,d3a85bea,972b8d09,4f0d4b83,cedc97d7,edc2ac68,10ae19cc)\n,S(1a32edc8,905ddc84,2756420b,e1f25daf,5bd84f0f,acb046b6,e9040fe9,5e1e1d56,7f467d9d,113a77f8,c1cb73ad,16a62f4f,f1612c80,f8cf859c,ca42164,68eb4c51)\n,S(70957d98,62e5977a,c328b7da,2e51024a,f925c142,eb1a46b7,b4a3bf20,a74d6c98,269b56c6,2e42cc34,a0951348,881d2c53,7d7ee231,f2327ec1,441fd273,bef09381)\n,S(7e69416,5a02b16c,107ae454,b6cdf25,bf6dd256,d976ab44,bd7edc84,837537a7,ffb874db,38360c11,e2d0d2ce,3e47363,a6aac21d,78a37b24,3e66826b,445185f5)\n,S(4f81a159,7b42e9b5,24be7ac6,ff4405d8,3b9d8a75,e37b58b6,eed5525,6ddf9678,b2531207,18676065,ad8ffbe1,6d27df4c,3558eed7,992538b3,77cb8497,86e0a78c)\n,S(fa250368,577065af,b60be8d,e9381334,9be6fdd6,1bdd02d9,3591a35d,294fd547,f0b991e3,96c77cbf,5d642f0d,cf5ee10b,3b0a1fa7,7b696f06,d4d61cd4,48e81625)\n,S(f4df5ebd,67162bfc,3e3da517,23fec6d8,6b61d6c4,a5876c4d,440f025a,272ba3d4,b23ba279,8bc75fb2,d590e384,c9e375ce,6380dc5b,90970d44,674e32a1,8052212b)\n,S(ab5b6b1d,b3725b65,fae28e5c,44460d6c,51b8971a,655541c,4a587076,a1ac5015,16d2c457,ecdc1718,3a9d7876,d785adf0,424f72b8,d08b6a9e,286ea5cb,26ee2ece)\n,S(a8a4ec7e,13db5370,40680dcc,470d38a4,2e08d99,3c30f981,ac877ce0,28869e55,4a9ded9c,2cdfee53,897d0874,965878a4,754025d5,babb07bb,2d248151,cb7f60a4)\n,S(337f54f6,33bd60db,583d08,165c1011,6f914dd9,e2abcfaa,5f1b1410,b8245f48,9453eb28,696afc4a,40b5452b,d3abae4c,679b58e5,408b0a94,ea456771,8176dbfc)\n,S(eee337ab,dc2baaf1,544c767,41a5054c,f6db480d,529d20e4,33b642b5,fd901b53,65ad5b88,2cc00d4,a4ba1d8b,a6956f88,825616cd,5f6c9830,87264247,869c27be)\n,S(59f52e18,57cb000a,ec1aaf0c,b43f1274,f56e477c,50f010b8,4513fcef,752f1548,d8ca8f6e,8db03b19,8047006b,a6ec1e29,4f225461,9978ce70,a1ae0f53,9e1698be)\n,S(6c200a0c,25fadb2a,8a9618d9,d7d86287,8583ab10,f2b4915e,8f5a5f05,406f3e12,14d4984e,374cf35c,145af24d,a5c0d0f8,504649d,b1793a61,7d6ed949,ef8081f8)\n,S(1654a2fd,51dfb6f8,71aad878,239b657a,f8144ff8,98a3c2a0,32cffbc3,8aac07fa,8b6965c3,82d98569,b6cdcc1d,4c71705c,e36d46c5,fa5df714,8d59043d,161a839c)\n,S(c48033c9,ab473556,c9982f33,953f96d6,7b3ed1c0,7e98efae,8de232f7,67556d77,af3f48a8,7bc43168,10787382,8dcffaad,abe4a54,828b02b6,f897ab4b,ed968bac)\n,S(5dd977fa,a9d228d5,1885aaea,557f7a98,1a95771f,212c3ba,f1a4e428,3c3c6032,3bff9d4a,ba178f6c,d2ce5204,3daa06f2,abb06acd,274beb45,49e72a37,8f2eb656)\n,S(2a76dc25,dd9a96c4,bcff1d8a,f3c9aaeb,261e4c69,a5d832ab,efefdf29,ce42a564,493452f2,3ad5cae7,de8c972a,af5c3883,7ff82aa,df616c5b,2fcab4c6,d5244806)\n,S(cdbd3506,4c0e7923,822bab4d,b4662b2a,fd3935a9,a49e6d6f,f2db8f4b,d29a4b8d,b2126f2e,b61e274f,a688a84c,386fdb5f,58b84515,1543f143,a8ce0a3c,557a90ce)\n,S(983f249b,2cb9d4f6,34d82d6c,e713aff9,2bcfd525,a4146a75,bf6f725d,2b54d978,79cd2406,850be02d,a6c4d25f,5a02dabe,af302e77,238833ef,cff0484,8a8abca2)\n,S(88c765b4,a5a0a9f3,a257e21e,ffb23e51,9e128489,fade1383,96fdc18c,38afd4f4,f4d5fe64,729995a3,e505cc03,1d144682,e3336ae3,45c28697,1cf89b7d,595f46c2)\n,S(197505ec,d603cb0a,199c7d08,b88d0e63,1d147d07,45603692,6b67a582,b7d52c31,947ec13b,f2d75fc5,af5a746,15a75aec,2f212adf,a234e08f,49a561e4,f9057f15)\n,S(98184232,e10f605f,58a700c3,d6bc04d,9a19790f,eb638fec,668320b6,3b2eaaf8,ef3076ed,c0e2fa39,30ea837e,36c31f59,dbbdf192,ab18bd7f,39578e1c,eff9c85b)\n,S(50f0db35,cba0134b,790f47a9,e322670e,f0c7d081,6869a764,892f8e23,6c0bc002,1c1b1c13,d98a84ea,e77260f6,58e265d8,9e466b44,b8604edd,83233fcb,68396072)\n,S(d9e340ea,1a44bb50,ae4bb19f,3f4228f4,99ac8516,cd6bfa86,80c1dc31,d5665502,128a1688,335a2193,ff805251,b83baee9,341445ad,25048f75,355f4b35,5b4aaad8)\n,S(15aa8133,1b84ddd,8c706702,555dc19,d42cb4a9,a9474c9,1e33c0f8,e87c539c,79530720,96586400,ebdd2ba1,7762ccbb,2a14bf47,45f63b1d,e22c6a6d,8942dbc1)\n,S(6f708704,53d19a4d,b910d169,c7c7be23,d489dd18,23604242,55e182f8,7a5d34d2,e0531956,7c1c2bf4,a0a9beab,d7c4dbb9,c15246fd,5a6de101,35578aa9,99c7dde2)\n,S(31e920df,cddca3a4,89ad97e9,168854f7,867f9a58,fe2d3f1b,f33f8dc3,c7167674,52712c3d,b0c6e58,15157660,ebe27dd,244a9c5f,b12cb8af,dbe82900,c3706f39)\n,S(93300e11,708ff01d,96f81fbc,f1888c96,8258dec2,86a315ab,8d01f2da,4c8d51d8,15368647,3b6a208c,8449b53,66584e4c,9e0b7636,1256df46,4c93d4a0,e26c33ff)\n,S(8f7ad50b,f62d6702,616cfdf,3712c1ca,30c94632,720797dc,ecd54f65,cfacb3db,5ac10a32,7dc52bc,33290080,a1a194c8,1eff0d71,65f9d34,7e4f8b44,8443c637)\n,S(6ed80b82,76270d71,c468f5d7,350c608a,7f5cf51d,c8efbdd7,4458a487,2989f4a9,bcba2bf7,38f6e77b,465e47b7,c687c7e1,77fd3cf2,163b5a2,e00923d0,89826dc0)\n,S(ec6c1d7d,b94989e2,962cb85f,777eada2,7c2b11b2,86949e38,eea2bb4b,7ce3714c,add9f9af,6042dfdb,1d4089d0,ebca5755,8ef2664d,52fce516,df3b030e,9ed08fdd)\n,S(8f77cb2c,24dcc192,593a82d3,510859b9,c59bca8e,9546735c,1fe26084,4a37f093,51674986,fbf499fa,70b55bd4,f0a70cb8,423fdebd,587e6213,83199b3c,4fe07202)\n,S(e2addf74,dae831af,aa4c4ed6,2f4a32dd,1122f2d6,243d049f,1fd78c1d,64b6aca,7dbcb394,1eadfb0b,8a56022,4da66128,a73a1aa0,20a5b23c,cf58118f,e28b2297)\n,S(bf7af1bc,614d31c9,9afb7c6d,b8cd45b3,3a22b151,34ba872d,3e845da3,2b1e3eb,108d39e7,8cf88a22,fba9e255,23267bd5,2b850464,f1277239,7542ec2c,50125a21)\n,S(88ffc7f,cec6580,5b92c5f6,952d82cc,35b4f068,a7581987,93ebc59,8efe50e4,382dacca,94b42c3e,ba1558c7,82394564,d39193c9,8b9e8cf4,a63dc4da,4d378a4c)\n,S(b114a384,ef4ae60,b9c569ae,636eab27,9070e207,34cf83b7,a28353d4,7d3a152b,37c7673c,e58ee20a,6076438c,9bbe5cbf,bb826076,6d8a7001,b188c477,cca3fa70)\n,S(e411a42f,e20d23b6,fa768fa1,e310192c,cfb0cd2b,1914c9da,627db3a8,c7e801b0,feb1b79b,43ee7980,7252bbc1,728af29a,8f6828ae,8aec480b,91c85008,959b1039)\n,S(191f687e,46432313,c085182a,ede5e7c4,31057ad7,f1f48fd7,cb814fcd,74ee1999,5464b42b,3f77ce2d,59a39efb,83808cd8,43e5c540,3d5081e6,e4f4b1e,926dbc72)\n,S(63ff4977,33b0a49e,f618c4ff,1aef537,9837744c,85a19bf0,b2208eb9,506bcd81,6ccaef97,ca835931,f3a87b50,a93f2a4,39535d8c,87e26090,3ae49b29,30593d3b)\n,S(efe36425,c37705ba,69e7056c,2e8c628,f4ce72a4,68d85556,4c57e5ad,b7fc2c1c,392b9b5f,27ac49c5,831a5f52,c2e55bb2,8faa7f12,521732d0,8dd910c0,51970ad5)\n,S(6d2126b,dd7cc08d,1bd41910,21704a1e,841d4737,4e5a0a99,9880051d,f77e94a5,2e9b823a,cda1be97,52f72ce6,ead42127,efb4d4b0,8daf55f5,5da6f956,84e6e806)\n,S(cf7b9ff4,297d9c5b,91c6340d,c1cca93c,6d453ac9,86b4ef54,b20df6a5,4933743,8a57808a,2c07002b,111efec2,bf751b54,c20613c4,1e3612ca,83baa3f,eb670c15)\n,S(b160242b,4cbe5ee1,d1dba4e8,e2d55a0,27f5a5bf,f7c023f2,c1524fe6,5f7e83e,ac35795,6cf31260,7ee9f54,fb39d3e,4f1faaf4,67d09567,6075b8c6,3c0fb5a0)\n,S(7a86452c,4f8918d9,86d3dce0,22619a72,1744d9c6,dfd0e733,c02cdaa5,6abb050e,30d30b1c,b558b0e0,fbaa1fb3,596cf454,542370fa,43d8a85a,91eb6bc5,c90de179)\n,S(a279bc1a,64d206ef,ea96d3a,b97c6770,af41ba40,9381d372,408052ff,582323b9,aefc853d,701ebc44,679a7ab1,fe033182,e96199d3,4b58261d,a1b4a6bc,6ce42046)\n,S(e8e28570,5c16016b,608c301a,ac59f868,f7691886,261eb01a,d4e6ec6,a9e5cc76,92350315,f8e78051,b703b7a,49427272,c988ea66,27699eb8,f2fb3eac,9f0a983d)\n,S(1fd9cef8,14f3fc81,8055f300,a734f9cc,46da1585,b939be73,459e0ce1,8a9f2bbd,dcc4f73f,a50fcc8e,6ec3c71b,c045f020,c26d79a9,794a25cd,26488c0d,9cabb55e)\n,S(321b1afc,70275fd6,fd48942,df364f6f,c609d4b6,cf4e574d,39f1ad06,927e5f11,1368ecef,808bb311,ae9ad36f,8a4c81fb,725a80f8,ed029680,c5b54463,80add33d)\n,S(4dff29fb,6518e393,dad0cad9,b0dec257,f9ef1e9c,c50cd741,8108c42e,f6d7bf72,4159786e,5aa4e82,4d7bfd06,713ec8f6,d92f8f8b,48304efd,e4d0f4c2,30dfb70c)\n,S(937a84a5,eb63055c,65b162e1,1a3f2e54,c839b972,95a8c1b9,274373f7,5ced1e0b,a03078bb,bf11a351,da7fb3b5,2e3e7a2d,62c122b1,a9cf9954,53294f37,7966afc6)\n,S(be3faa9b,7cab73b8,4fb2a87d,25db7fc5,56f07393,b3177c7a,56df0447,e96cc3d2,e7051ee0,1ad794af,571dacc4,4e91f7f6,9276446a,7e348ee1,2998968,afaf77f)\n,S(58b39c6b,cc36d506,765d24da,6058d7dd,36928d13,b0fbe1f8,c680df15,756c9b41,449e9691,aaa846d9,a7412b77,73f7ae6f,b4ecd99e,c57863d,ad72d3f0,423d74ff)\n,S(9b18a971,b1660b46,720e2100,865742c,8c91282b,1c72c7b2,8192bdc9,c3765798,2812e522,98adf83d,2cc07a93,4a065016,2be28d37,59cfd50,6c792e31,32e0f49f)\n,S(a6c44c03,dbacd4bd,7a35e207,61778826,c86740c5,c92942d7,f73a1b3e,dec0f59e,73316b7c,d1fa3410,76b73727,8aaf39c6,2258d29e,c40c80e0,797493cc,7056077f)\n,S(1ffb2755,628ff8d5,d837495b,94ad78a0,5dde2043,bbfa3aaa,21a05a3a,21682ee3,4a0478f7,6b8b6c,ffd9962d,f70e2a83,a71243ad,c690efec,5f95aff8,dbb5943b)\n,S(aea4c48e,36051144,482538a8,8ee5f72,b67a21e7,8fb425c,3d6f1e78,419b8283,4517cab8,c28eb397,bd89d216,ce711332,82c7b530,6b64499b,2216bba9,41a80b27)\n,S(ddc59bfa,5f8c0270,8436fabb,5003ca6f,b972f14,382bf127,f5297990,b4ed3eb,f6c3f19f,b80e75b6,53c370b6,742045e9,ad7dbc80,3a996696,99605345,ebd995c1)\n,S(22184fe7,ed301b2d,62bf83ed,64742f6f,94d204c9,866a637d,d03c58b,54c80a8,9db27528,1073a3d5,617a389d,c5698255,3bc55d6a,3b80cab4,ace36140,8179b442)\n,S(e58617f4,74e46f4a,74b0ed2d,6bafc3cb,6488c510,87136eea,f98aa37a,f201cef3,cc6a7375,52dde05e,71bf2047,d49a41b0,c6b141e2,e4f519d4,36d4f8e4,f2aa2220)\n,S(c1aa4092,5addc5fe,de6c2c5a,ba73b3f2,b7394a0f,1d02846c,5b2a0379,824f8e41,9713af07,e30af560,9516ce73,5083ab53,2475bf26,5713570,28b586c1,d28c687b)\n,S(4aa5d88d,89576459,1ccd1c2,3064c718,69e4d320,b0b71b5a,c08d291a,c1df6168,1d0ea41b,915c288e,c6b36cc3,f7806481,c048482,dce586ad,f240d32a,c913e6e6)\n,S(93876d91,73137834,dca5e192,fa869a02,738d4171,391df1e7,43296f93,a2a8a977,7948463d,32bad450,24e63d9d,d5786a69,73fc6c8f,9d2a7c3d,e2d6fbad,7a6457a4)\n,S(c80cd7d,30268025,b233dd13,f2f2af37,5d18080a,54c406ee,50e4890f,a91b7b28,9f73b58b,1f1d11f9,1648f904,ac7ad275,9e6260c9,27870292,278fe521,b718bc4b)\n,S(d2bd24d9,7dd4a345,a8c4e857,97a9c30c,e8e7e7c4,3ce79bb8,fba4250e,a0c8c5cb,330f0cb8,15cb1931,90331055,809eb028,55ae895,ee1a30f7,665166b9,6494b9e)\n,S(d4e4a3a2,90deea18,fb15457d,f3ab9815,5d722589,515a38b8,dc303307,5dd7e9f4,4854493e,77d0ecb1,742bdc9b,a5219e9a,71c57a6c,b914b8a5,6eec21dd,3e7d1c21)\n,S(f0fb6cf4,810de399,fcd1b246,f0e76e2b,d318f82e,1601ebea,2779be6d,47236d19,e3ad5160,66480239,88b0b197,3eb2a41e,2cc9b4d3,7cf58d07,ad0edde7,ac595daf)\n,S(dd4ec58e,3f4c470c,36991740,d02b0fc7,9a4f9df1,98647ab0,ebf73b10,34858939,3a6ecc86,a3b058ce,f278c839,541e92dc,737a6390,94ffa464,17e37da0,40a3bfe3)\n,S(ec56910,1d7ed954,d4efe1b6,c4f6ade1,2af12f3a,ddc75a8b,8fdaebb7,ab904e51,3497c67f,5d594f71,4327111a,e22f2621,be7cbaad,b2cc1d6d,be0b7e50,d450c54a)\n,S(ca45def8,51856a5,7ca5e1aa,64edc3cb,e25ef6b0,e28abda5,a85d9a19,dbaa35c5,db8b2357,268db9eb,e013fcde,111372c2,6eb4ed69,5a7a3df0,4d1d33db,703521b2)\n,S(b44c5388,964521e2,4803c8b6,3dc8a494,40f8ba15,435ce2e6,5f6dc092,15b49a47,2e16435d,f30c4b80,cf125e04,b85166b9,509890a9,c1daf1f5,72462a83,de198d00)\n,S(95b735e2,35862f14,e9291a5,4b46d977,33a20ce1,b59b4603,666cfeca,e05dea26,e1281705,5f38be19,9bc9977,b6e80c08,f22ab5b1,286ea553,21145675,264aabb9)\n,S(83d9d867,8fbb0263,6ce8d231,3ee4716c,a15c71b2,66c1a7ce,e56928ed,73e5bdfc,e0494c2f,be92f132,effe7d78,499f4a00,c35027c2,37df8545,9918687b,6b949246)\n,S(98b7c85,a04c546d,bbf6bad1,6914e247,1d3b478c,f30dd6f0,2e843770,49bbae03,769c3b95,3733dfd9,d9027da4,a10b0a65,ce4106f9,44364972,e569c63d,3b2ace57)\n,S(3ce7b677,852d34ec,34358a8f,4da66d53,75019cb1,19a45dfe,864062a,a3b12e45,68d2790f,1838b86,96272c4b,d5e418a9,2cf03d9,de44f218,e42562dd,467e409a)\n,S(a0bc28f4,d4da7101,41d0dca7,51542b83,6b50bdc8,997b291,e074727e,cad7836f,6ed7e149,40f2781c,d685a581,99f163d2,177eecbc,ca785224,2a8b4859,97e47c88)\n,S(9a571ba3,52b1d62b,4e5d290a,c0d41983,97750fc4,9a18cb68,18fe11ab,1e185c0b,1a91cccd,b2b1f58f,9cfc0dfe,d3464917,f6c2870,9bdd8128,ff61e295,ad1b4ad1)\n,S(fba0544f,cdd2de73,d24eca5,55a8c4b0,4e135c1d,8348cb93,d53f647e,2a21b9bf,7a11a425,a4ec6acf,2eafe631,ff83be6a,f71a6cc9,f7dbe3f7,aed57e04,2774568a)\n,S(d96b253a,1edbf662,3902bdd7,1c3bad9,ecad1115,45614b48,5f7abca1,d4920a9b,2bc88998,f951b831,2f27d09f,2f331536,1499f1c8,b172f1f2,408d0660,3b18c2e8)\n,S(2b3c17ce,1081b825,94ae14da,f9723f9,9823382e,947c1356,13a4b8a6,42267c2b,a4cd589f,2ebd245b,88c7f1fa,427a2ab6,e77205c2,dbbcc74f,dbbdfa69,336048ff)\n,S(69698780,fdac522c,69313ea7,2e244d9d,3f6bc5c9,4fd86125,2eb56369,c96439f9,e8eeb3c6,460f475f,c06b5943,9bb9994d,8d6e4314,fe20020e,c1001f77,25a03154)\n,S(1e344611,4cb4dc4c,963e172c,9bfc2f4a,d1577efc,ae2ffc6d,76395ef9,a0848c68,debbb8df,e6f59a0e,b96d464,3bbc6d51,a2bb4621,6059de1d,a473436c,404f5b19)\n,S(6ccfae02,4c7f2a9a,ba12c191,bd35e287,d5c30284,c4273a1f,c558ae8d,286aa61a,c2014174,c78a2fd,d342ade2,51e4588d,94c4cdf1,ee83ade8,54e48388,b6e7cb11)\n,S(5b5fd487,69b6a133,35bf0a2e,61a2128a,db43153f,9497c77e,c32b16e2,ca4c728e,9954353f,b23c9d44,eadf2632,168711b5,5a54c9da,53c41088,50fe77cd,8cf00c77)\n,S(6b74a257,27af44dd,61fbbbd2,7323b63f,e6a41d9d,f5412215,65a6a9bc,35d069e,a4e1214,f17b8dff,b5bd689c,5f004c98,39b87a46,15245756,48099d33,f432a34c)\n,S(5171a187,8ae9ed01,837408b9,fe08f317,8688606c,aae04b2,63cbf143,b8e372a2,b5e7de6b,964153cc,fe64a472,8a8f20a4,44da8e15,c593b7e8,68140276,b172d06)\n,S(df9e86a,4337ef32,3518568c,e52958ab,dbce8a92,840b756c,279e96cd,43c8e80d,5442baee,c72f460a,110e8ff6,1e938132,50b2ccdf,61941df,5f591bb4,73027da7)\n,S(ce070279,eb6f1f71,af876ab7,3903fbd0,ac9e4693,7b6d3307,2ec80182,3887c850,de83ddf9,88f9d345,e1ff2a79,e91f8ad9,6ea23097,538dde84,aea0ded4,b6a155eb)\n,S(a0255c62,44afc84c,58238936,c9d08d36,96e5789b,ed28c40,7667f348,4c2f35fd,93e2d407,aef898d7,c898293,fb20f222,6cd5017,cd62669f,17ee0d16,773c6f7a)\n,S(ae82dead,b76d5dd7,140e1197,a383ff62,138e1840,dc2f7ef0,d5126dca,86f0d86b,239dbbac,caaa0779,a9f6d8ec,2e30b590,72d36b58,199a27c6,5f5815ca,5720964a)\n,S(cf0999ce,bee65e2e,d596441e,a8942461,97c597ac,9c090884,44c375d9,16332393,6620cbd2,f074edd5,1ff8cd5,45adcdbd,1c664ad2,6935880,8655ffb3,3a748ca4)\n,S(5fb4af74,6404b01b,63bff1b4,1bacbb36,9ec06801,9454622a,76258033,9cd3965c,464cb2e1,2cce697c,d409529f,a48e7448,916a51b4,5954fe93,d99ce392,272abff5)\n,S(15af3c0a,46b5232e,55e5687,a2bc4acc,2c7a350f,8114e3a0,1993a0f3,1b3216b4,ae03739b,bdce38b0,4735acd9,3a3ff7ba,86c8189e,56a5bb37,ad83a574,cdd45a83)\n,S(5d0035d1,d008ccc5,42cb8b5d,32d973da,32c88787,640d0465,76d33e36,540b4b10,448ed8e5,bffa9f28,6689061f,73a74f17,76db8a8c,d5b4af39,6173e7be,6e54c465)\n,S(944c70f3,9cf749df,edb9d322,ffc69e3a,a40b0704,fc4af915,e027bad4,83c95527,b0ac0c3b,bf489332,64a6e95c,e49a669a,df10acfd,48e22fc2,1a18ecbd,b86c6f0c)\n,S(fa5219f0,82ec3c4a,3f246754,dad62f04,52e26225,6cd28acc,846bc5d6,151e4402,32ce81e9,d6403132,d7b64f26,a0289031,eb730d2b,dcd0065a,1b4e3f3,a7afae9)\n,S(c9f4aa30,ddbee263,509455a,858b8518,85c6a16b,5d9bf032,70443928,38a30ede,5ef717c6,b438af31,9a892799,46b73ba7,add20334,c2fa5bae,a15b7632,34ad7b7c)\n,S(2f4cf3ca,7454d569,5b0dd2fd,c72d4ffe,529b362,deeea120,162c178e,7b770319,dcda920e,3566ebcb,f47c1ce0,fb767092,fe7c87c5,ff146042,d5a0ceb7,a2f7d487)\n,S(2417f576,2e0cd74a,f07a41a7,51f91b3e,a1cb0a42,2246af4,a0a96b8,79969945,6a96d755,f8dc71bc,adad0a3f,61cb44ed,741ef96d,96baacee,fcfba7ff,1e7807d9)\n,S(9ab22f84,305a1c1f,675ca5ba,cbb3dba4,d43d060a,ee9148c6,6cfb61b8,5888852c,af0506fa,a2588e3a,7aeac12a,7acdda3b,b51d996b,2cca9c18,e23b517a,a428a03e)\n,S(f7421ea2,24627926,28ed878,7e154724,77a91726,5a162f52,87501d1d,24a72b6c,db0ae665,e4484132,f372ca6d,8cd46115,fe1c72cc,885804dd,8f508900,5743fcf6)\n,S(35756af3,548d57e8,dc0bb791,8b9875b1,10a912bb,7d971e35,4963bd7f,df5c6f75,1ca46dba,78a2b4fd,d4ed69ae,bd4e1961,86d94b8e,20b1660f,c517098d,e077a1d2)\n,S(a7e9f00c,494cfaf2,16449d9a,b0dae7ff,de4041c2,fe031bc0,241c44db,1bf01837,f2aeb9ae,480b406a,9753d009,3b5fbb74,5a7760de,4ef508b7,d10804c0,161a0280)\n,S(69451dba,92872879,7737755b,7655ce70,64838aa2,9084fc1a,c88f5e6f,ca62adb7,26218fa8,d40df091,31d845d4,96c7b950,1071537b,51a3143c,c73f1a7,b02b1cd9)\n,S(c49c3b30,15cca66f,ce986a37,588205fc,89a92d0f,c520ad3,5eb6cce3,daabf06d,7afde84a,665b02b0,e0cf9ca9,9d2ad097,6242919c,53e31b5e,6216d67c,580e354c)\n,S(e9e181bf,b68e6e38,c5b6ee1d,f11c14f8,90c0c744,8570387,1ab6b624,6b9dae8f,b0bcfedb,3f394317,907e260,c3651aa4,d1af5ca5,e1a34018,fc6c26a2,d5ef5e1b)\n,S(a428586f,adf41cf,5b5c9e52,e0d6e1f9,2e7d8738,ab99e8bc,4062e302,de392324,77c3e18b,fe71c937,65b911e8,b49cdee9,a2a7413f,4de831c8,3f967f08,95b8d142)\n,S(f5c92ed2,de1d1a25,4b4a4830,b656a674,38077be7,5efed94d,785dd0d9,72712cf,7ee98d3a,497849cd,5b5f6dcb,c51c5119,228fdf7e,1a67f1e,d7c670b9,eb3958fb)\n,S(a85707ca,6c85f506,311b6930,767b5571,e18c19c7,ff2574bd,f268f018,b49c3f66,1785fe71,cde2e189,aaf67d10,337b8fb8,53654335,4d5ba73d,77518d9f,5e8aa050)\n,S(8866f5f,a4c8d1c2,f2de0cf8,19eca5c4,d084ab60,67a7d97c,f9942fe,c0a7468d,3014226c,3f33907a,2f6c49ad,c762be6e,2915288b,a7ec009a,fe693048,3588336e)\n,S(425f6d73,37eb2d68,e17d07c8,bda406cf,92af22b5,6461bd66,f40be14c,ae0688cc,e865526f,7c42e391,1ab73290,e80bd9fc,9643659,5871bdbd,ef8d698f,d04d4980)\n,S(f70fc3e,1de3b3fd,55418441,43deb4be,36bfe6af,3bc9d9a2,f8ac823d,68323139,8b47994b,1febb309,e3774a82,d6b18d78,8ae5750b,40aa944a,dae404b5,da24ce03)\n,S(1be960f3,38d2a16,703b10c,eafa121c,d59c66d9,439e9067,58a0b363,2a83116c,7fa4ca2f,8218ee04,351549cc,3b0100fb,647e0db,19eea010,62f1c0de,3de29aef)\n,S(1f2a2d3,bc5c80a3,8af51e9f,5694a80e,e915eb89,4831ea7e,48472d53,320cf385,a18cea39,174b4c49,f9bcb945,5e6701f9,47053f07,6782ce9f,f55653be,6d3940e5)\n,S(61d6b60,70846b0b,b7790861,17cafaa9,9aa67c37,fe77140e,88477f3e,44d04766,c7f4be90,86849ae1,632eb59a,6c96de66,b7c4b1ea,caf724d2,5338c11c,a8f2688f)\n,S(2b37093,2d9a6451,79508daf,4be7f26,6d540538,9276fc4f,e6ccf0d4,1ee6cc9c,c002a3f4,2c8998b1,ee16a1d8,616ce0b7,91cdfc44,61839d9f,5ca0090e,295beca7)\n,S(48f5c3ef,aba8b7a3,4d7fd136,fe9b01f,64af0e95,6a27663a,87cd6629,f2708858,8cc38cb7,fce46724,7c2f09cc,52f973be,90aefdbf,b52895e2,b88f03e8,fe32b5ab)\n,S(e609b597,2e5ec227,6f5cfc87,67b6d534,adfbe9e9,9e60b86,e981dd9b,3e62cfa0,6be9c1ee,ff205fd3,e3b85e3d,bbf1b27a,335ca616,9ae189f,a433e65,f2b43081)\n,S(ebe40b1a,5b2c9cc8,46eb8ea8,1ef0c1ce,f19a767b,2da6ab0b,2ab66a01,b16d205a,2f7710e8,e4fecbd1,39899bd,1964f5da,967d6920,d70b2f4,45d6f914,97c67058)\n,S(97cd4c39,9391b1ef,653d32f3,9b062bcf,dbc72d45,83d81b3f,f70df659,358e3abd,a05a6184,a175b6de,f9bc35c5,6e9f5cae,263acf2b,a233bfe8,13dd98a7,fbf37968)\n,S(826928aa,1d3fd0e8,53cd99fc,e6559ae7,257343aa,378100e,bf64a3c1,bea7e6d9,bc4a2db1,a3bde90a,ff50fddf,cf6f844a,faad7f8a,89bb399b,20b07b2,2e1efc79)\n,S(3e754097,f3ac95dd,176e9181,410bae7a,83bd1431,6772e398,967ed39a,5fa19121,746cce99,c6a2cff8,a0907ea1,5cf9436c,ca7f94,7f3f1801,135fe675,a518df32)\n,S(ce539464,b49b9947,808a236c,8a027066,82991f46,3bb828fa,44653266,329365db,3578fec2,b8bc4763,61f2fda,29c2c38b,a7bda79c,11b2cd41,a74d4c02,762e5dd9)\n,S(c933d9d9,cda615ad,7ac41d6a,e64a77cb,44a2b669,21533669,2c90c3af,53e349dd,4a6da24f,83baebbb,8f2a8ede,298babce,a25b054a,a1c4cc11,f9f0b0db,572c610)\n,S(459aa43b,1aa9815f,e9116f2e,78ddddef,a78e2def,28027d51,d081a3bc,800b2ac4,1acedbc3,de995e30,b16900d4,cddcd1f2,5c615156,fc29645,4bd5fc7c,63e993d5)\n,S(5f2aa5d9,9862ad29,eb467564,639abfc,ff445334,9a30c4d4,3b27f913,1e3b0a5e,571eca2b,e61d0bf2,d9def9ba,445b39b2,5acfbbb7,dd4e2cfb,ce7541c9,61ace144)\n,S(ec66ea1d,e6cc5d59,8c393e68,1a338549,fc2c3d7f,947b40f5,75681e60,88f4fd1d,d711ffdb,3b378435,5894dfa9,d0a5497a,5540739f,a3706597,8ab7dbea,a9280f52)\n,S(6ac53df5,aa097f2d,9983f018,bd1cab39,69ad0638,c78547ab,1a481682,ad6105fe,95f69a81,5127b919,9488f224,24307969,3cd51796,bba08578,abfc8e05,6618a598)\n,S(a8a3e9e2,9e4ad0fd,c466dcb8,fdc02cf4,16fb5c85,b3454fd,3842f129,9f96c0b0,df86eb3e,3006dea5,ed6d152,f394d7c3,169b8d09,bde3685,ce138a55,6716dc2b)\n,S(50a764d2,a0d8741b,95ec84a2,feda6df8,1dbe987c,31861166,32c40c3d,e6db251c,b28203f0,233917c1,4b67632a,ce9b512d,76a8c7e2,430a4a40,85cfb422,7fe41055)\n,S(c2c314b1,5ef9df1d,26856c9f,a6e39cf9,1bd9c584,582893a9,423746ca,1ab51ef9,a27f9286,ff7fdfaa,b949a9f5,d59f08b7,a22f1e31,e7175d44,93e219a4,e92ab759)\n,S(ba655585,da44c8d1,2b3ce375,e220a4c3,64868b75,370fdb75,dbf6bb92,76a9d3df,3d64e16b,a03a385b,def18f61,432cc49c,bdd9d04e,6fc8873b,e51663bb,ca4fda50)\n,S(3d45fa49,d4d100a4,b5a76a65,1a5100e,56bd0d13,b9e141c2,aca5cfef,a46e600e,92953c,38eeee42,e1da93b1,3c75ba48,da30390e,731801ec,ed5bdc2b,58059176)\n,S(e464c346,e40dc3e2,40e5d96e,1fb2c10c,83e5ab7f,45138596,4ca46b04,bc8c3a8c,63f14b46,182950bd,282205aa,374cd67b,ca364a4,f57cf90f,c7ac90d6,5204cf4e)\n,S(14a7e12f,e235b307,5b0d218,bd3dc720,d56f3fe4,c73841e3,fdf42dd5,aea42688,d79683cc,40cef482,ed6a22d4,8137a4f0,eac31249,9ae13809,9eebf3a3,15e9ff2a)\n,S(8e7afbb8,21af73b2,25b34ffa,bb2ff6f4,61d2ee2b,85d5d936,a99fb078,963828be,40e4776,5aa0768c,f055bea0,e20e1062,bb528470,dee61ec1,6cc9ce7d,ae6b1853)\n,S(9d641162,3227bd0f,4bcf9f1f,9e5ce829,7d844055,8a7ec246,5b160690,53297573,ed0d83a0,68001be5,70067ea4,70fec09e,1f8630d5,da5d1b2c,126c35c3,9b07fc8d)\n,S(6758c6d6,d9e49d9f,4125b52b,e3da74e7,52bb40f1,44af0f0b,7bd80589,7fc83eaf,749ae08e,c2aa2c36,3a229b3d,e9577dbc,5f7d22cc,d46826e3,6a1cb434,184fd292)\n,S(b3e11a0,45702d8b,14d93df6,3a4c11f5,32632719,b4a33fb8,da11514,bc61d73a,c6e152b1,2b267ec2,1a23892,8cb97044,9660c6b6,34b22d18,9a86fbd9,a9d562eb)\n,S(50a325ea,3b309911,1371b0f,e0b9e276,137bf43c,22108b98,994ed5a0,d66fa5f1,946dad1f,d39e0aa5,8a758527,9b39efea,8a99399c,2750739,dfeae140,3745b70e)\n,S(f7c8f249,3befd5a2,cf6802ce,8ac508ee,a97341a6,a46efe39,1214e322,e95e9661,3c072cc4,eec1f370,144b7ec0,598e4d96,573883e7,fa3f3f5d,4e33d88d,1e34cb67)\n,S(302d3b50,c1543386,f0b0b94e,9c49ea68,38c7e7bb,86c28cc3,c8965dc8,38f85b6,988047d0,d891aa2f,60b66e5a,96c78c91,3588d128,d4e7f720,5672d25a,88310744)\n,S(cb8ee728,2e7e5ba6,d0e8ecb,55ede89a,1d3810fc,b0d8f86a,fbf53b7d,219f0eb7,4b04ea2b,efad1099,8c9a4e3,cf0491c2,bc10bd60,e06a118e,75fe0163,ab8094cd)\n,S(645caa2b,4a0cd8aa,20cf6f04,ac73a49d,74f92035,f90bd31b,211572d4,cfd5fd42,793f2996,35f9d7c1,de62b64e,afe516db,b0aa1323,7f51d0a6,b6fc8346,fb7ef5b9)\n,S(4d37342f,6148b5e7,5434b8df,6617d64c,f00b1c73,3d85f4f3,e69c4a27,395f5a21,6400092b,d4c5c705,464a7db2,b1b6b667,4eebd7dd,38d05cde,d1577d8a,53a708bd)\n,S(e634bf17,24e07b2,b4ac6285,ed28bd39,747a2134,36e76d3d,bd693170,18c0e0d8,cccbcade,4b82a51e,c31d9d8b,6b113876,5e9660fb,e897ca53,20db873,13e9f021)\n,S(80a00de6,2767c513,d5bff535,431d259a,64c49006,3bbf992b,a5111005,360cef38,7dceb589,e8d73366,c467e23e,8fdc7e03,b2620df7,9530b6b2,3fcdcdf,628ef572)\n,S(606d50e6,d23d50ed,9a5b8409,f11d5c76,baf5b765,f719625d,5b2e2dd,9e8f8a0f,19f55492,45b1b4c2,fcc1d220,6c171200,4cbb41e8,bb7c8cc7,48c4366b,3fb32788)\n,S(9c8a0a14,f7d44fb7,4a7ea835,ae4a1932,266c3083,38d66a24,7fdd60ee,e4f0420,42c6c237,31578dd2,31eda621,81aedd29,8737fc7a,3b2be8b4,d0187459,e5d9169a)\n,S(d6ccfcf7,81a46f58,ff9a0154,8a417924,1a32d3ca,43a8e59,cebc33db,1e35da1c,a1caba1a,ce846b8d,8b4824e6,1570f832,87cbcfbc,910256d5,68bdf223,861d084f)\n,S(8cfaf36a,3e4c3ff2,4556f446,4947c8d0,6eed5ded,a40ec0da,4596bad9,f5f2e3c4,991b6ecc,ede6cdfd,e33f81d1,c1067f22,6b72373b,96ca31fc,c80e0692,d8f3c4d7)\n,S(d46c3d81,5b0f3a0b,bcef3973,8c6a6cc7,189849b0,4917fda0,541c08eb,b7e664a0,35524bb6,d053e5d7,c8adc9b6,3a84ed81,58cffe99,4041e642,1fece58a,d967c159)\n,S(8ed7f0a5,2f1f8df7,f82dce33,e4637dcf,e2ce9b75,ca02ef04,90c23fec,2b7adfff,f02460c7,b418d10c,96c27225,3dee3b66,4be1aa5d,427759a5,5d90c223,628d99ff)\n,S(433ecadc,a8a351bd,52ba4d6c,aeea3ff0,825c46b2,8abd2c2b,cea85f6,6daaa2ca,4d3b71bc,c2d7d177,45cd03c4,86f390e3,f6d396fc,83d0438f,983a142f,162977e5)\n,S(c0771ef3,10377f83,7a9bbddd,81f6642b,ba04493b,15c054eb,249b3f9c,bba006e6,3e53ddab,1d816a02,7898c6b4,778d4c48,e1ea2b33,a63955b0,784df258,ef4ccb1e)\n,S(dc2e0226,4a6a87b9,53997383,e35c6cd8,92072ba8,a741fd23,8ff3a9c5,f597ad7,898ee746,ecd5f723,440ac0ff,6f597e85,8ddbacc9,cbc80e01,d8a3c1f1,7c12c74d)\n,S(16bace34,59ad8cbf,1fc5f781,19cd9e31,d043d7b2,ed839f03,11f0b760,6adab771,f64532,6ec697e3,2ca23979,72b2b834,66e835b1,2bd49243,e896c1df,c02fb1c4)\n,S(afb94d8f,3a271439,146539a8,68f00346,9af55eda,839c81a4,725f3a5,7d69c736,afdb294e,a455031d,a70a4eff,7563d764,bdf37fa7,5594c9cb,386e8bd1,a35201d8)\n,S(bb31d236,4a98f7f4,1edb0ae7,6018e5ea,ecc33780,5f781dc7,6b15aa9,d0e89b74,1a064c03,1f47cc7e,cd49f032,f4dcd95e,87cbc28a,7b9d9c27,a92a4c1f,da031a9a)\n,S(f73b1b6c,4bbf5da8,16604ee3,ef6e83b,241e486e,d727e700,1c3c115,3c4318b8,9a28ad6e,9d64cba,b58ac225,5c01b261,25ba08ef,3b7d5ffb,476f9b8a,6c8c9b17)\n,S(63bd212,d0ddc5a0,84f8ea7b,69605b2b,708c8766,f0d3313,b236e921,91afa8a4,ee6f4f6,4824032,afbb0b3,a9fd342d,2fbca8e,ccecdb0f,a3307698,c56c3e67)\n,S(6367d22b,36068022,30a416b7,8c689078,967b955d,875fd629,9e007f86,1abc6465,c3ee1f2d,14e6793f,17e444ad,5595f9b3,118d1647,9259e0bb,ec628897,f69417eb)\n,S(64e2e543,fbb7f52e,57901e3a,448394c6,c922d0f,b632c4f,2df061a8,9485976e,641a602e,336a68b4,fc447e5a,5863a4e6,89511942,4fce011b,48f937df,fcab2a4c)\n,S(2e290afd,18c835c8,d1d79e86,9d9c1322,e16e824a,60e67f38,d6bf3031,e3fee1c6,7f85628e,d2fa6b67,7686b0e,c29a3626,da18ccac,5e373874,96266458,79390f21)\n,S(859a208a,c475d3d,f5f22907,988c7774,c0ba2dcc,d80ba42b,17ef1087,2cee401e,a667c645,778e743a,d62ed1e3,cfa12fcf,84b982a5,f1349e31,33627ffa,8b19f5d8)\n,S(c9291908,ccc50aae,f19c0b86,829fdc63,b608d3db,d92b0939,b92ac02a,2bcaf21,e5c52bb7,47111f58,c71352c8,b2fc89fb,20cb7d45,77c6231a,17d8d01b,6cd2599)\n,S(50359490,42b5b620,78ab0141,1f1a1d4b,64bc42c7,58da4459,b04d41c4,61cefb26,f61e823d,b68c064f,f80d9bd8,f272f817,347c132a,f7bd2af1,e5b451ea,bf4f04e0)\n,S(f9bcfae7,d6a3f1fb,612787c3,53b535ec,39f29a01,9f45f43e,7b61f2de,c4a4cbf3,f4d86e6f,273ad7e7,902d5a99,50fc846a,a6565862,aeddc67b,28fc07a1,232ff883)\n,S(1c8fe8b,901cf050,e93c0004,b0764715,602ac4e9,7f8d5dba,d7747039,f14a9152,b25ddb34,7c452942,92143b6e,cb19f87f,b42a0f27,f6f74c4c,99d7b80c,7d36769c)\n,S(3c50be1,4cbe3a87,d363947c,6eb534e0,8ff676cf,412bc4dd,2c543131,e786f552,4434471c,6e03f600,d8a27775,4466cad0,194f553d,bb653238,8a0ee4a3,9b05a74d)\n,S(64cd71b2,555472f8,fa968b4b,4f8c8b24,5b3e91ad,6d9dd409,fe72702e,e70522f5,f1b1cb3a,e9fa4855,2d7fc2a,819bd629,40350a3c,168782af,5bff16d8,89ede304)\n,S(c1c00444,c584c346,d1bdded8,7cc40b0e,fd8f69e7,d2ec8bcc,c41e3414,619af7a8,d631b494,3e3febb0,87bb391a,d5810b61,f78dbccc,bc6de38e,ee09005d,3d879436)\n,S(fa509582,dad5bb61,c7450fd0,3b7e4ba0,2fbd0c28,af971b96,cbef5956,3fa2a7ed,267c2764,617c2f78,9ab890d7,56be2195,2acdff5b,3490b816,165e2b36,2f3df4e5)\n,S(655dcee6,864e926a,a6e05f04,b604c2da,35175e0c,f7d264d0,50920d46,c1a2386c,da2eaeda,bf062cb4,ba2d36c4,67965baa,5f1dc238,b5e22df7,2bbe14f2,cfee19c8)\n,S(6ab5e1ac,1b7be624,97c8fbe,fec5c4d4,2cc1de06,d15a1beb,7606fc0a,df3c213e,26f983b2,4eb319c,7443e024,7fecdf58,f833928d,4e809d3c,f36231e4,d0a9e466)\n,S(c7da869e,39caa2d,e9f73a0d,3f73ab73,6224e2a5,47ef5af3,5f5a9d51,60c25f3b,e99b1102,49a607d8,12af4cf6,76ae4c4a,cfdc0f89,9ec2175d,c7942b6b,40da579f)\n,S(2a6d4ca1,5f1c3ced,ed68091f,af4d149b,e20b6854,bf015084,a9cc0d21,4944ef99,dfc27688,ae9295e9,ab8d9284,6a703ac5,5cb44bf3,13f179b4,ced6b638,e661ae0)\n,S(447260b3,bba7224c,aa659f70,b1e7716a,92600a27,18129575,2de62cda,11c846c0,f17e3e0f,33ef2ede,8980c922,613947,8331e2a6,40260996,db8da1e0,dc8999bf)\n,S(8cdb1cad,baba7003,8d4b0f44,1b312aed,5a8788a6,6e5356fd,5b994f6f,a7781969,b3a5bd0e,262e673a,ae7be06d,8d56c203,b88750e4,ba06cfa1,7c177edd,74536977)\n,S(28be0f50,fb60f905,18323e6c,dcf46c0c,bc3e2c0f,175d8576,85126a85,d5caaefe,5cc058f7,fb188c4c,e1140429,568c3176,8d986fc3,e96409de,21bf9ba3,862b7320)\n,S(b6dccba,dd2dfad4,8b69218a,d9cf839e,837e2262,7f8f0eb6,f23484a2,994673a0,e1c14ad7,297f1626,774aa2ab,5dcc730a,49623176,ae81eeaf,b52cfd4c,fa2de992)\n,S(e45ebec8,8813f7e5,7a7ecec9,dc5fcda6,b9cbb0f9,19bae1d,be770955,e3766a87,3a62a0bb,4ccf3783,7c384885,7acbaa9f,f915cc7f,13a46856,3ff135eb,dfbb07a)\n,S(de926f77,26f39d48,1e0b9e55,22b7c874,59bc9d07,df65f0eb,7b21fea,e8dccdbb,9d190ea9,263d4240,24b618ce,1239f6e1,115be2b1,d721aba0,f5f367f6,304d8e05)\n,S(f7621384,20669c04,6d794807,569722b4,91e4272e,1305f091,b54a03f2,ecf2caf0,d0c7e8e5,a227f2a9,5c594528,4590caa3,3088c92b,b4c7cf6d,12d293d0,4b9e4914)\n,S(4e795e86,44ffee08,f44d472e,8ba0eb9d,a5cdb1d1,619a437d,4a8bbfe8,565ce751,5292d8e5,478268f9,bb9b4be3,c751e587,65038c55,99cb3549,749e83e2,1590a4e0)\n,S(70e64689,a944b03f,32b33a97,c8923531,cdf75e8d,e8577559,bf45d2d2,ddb50b3d,a675c6e5,460b89a4,a2dae263,c71e6edf,925a93bb,a916951a,5364d252,c225586)\n,S(21637c2e,682b247e,cb8c1c,8b4bff1f,477ef390,3b9da0fa,b08b5cf2,5b67056b,e357165e,3e761a55,7e4c2b6c,727d8387,c5716b58,e24d0e04,8314979e,4e92d882)\n,S(7691a399,8dad2e1,741a4135,18bdbb,d8ae5bb1,7466a949,a40560a3,9c1d1964,225f1404,b05b5bb6,cdbf2296,f76e7f27,257280e,28c68be4,d8c81c47,a422b74)\n,S(748316a4,f3950849,9af5a14b,27eabf9,b0d11e91,d8752cb,69899af8,79af9302,cdcdd4d2,6bd709d8,c3d87c12,6dd8a2c4,f600fc1b,9e84461f,1793047b,5bfd7ee2)\n,S(af588dab,3839e85c,6dc84aa6,c1e05294,a9708951,8006b390,c2ffe0ef,f6ed9b8a,a3d37640,1b06548f,2794131f,5e002aad,616ca135,8cf0c81d,87015416,37d9cff0)\n,S(bd91dc60,31706ffb,19b61796,995728b0,5f869d07,6f0b6537,35c46e10,d9b42dc6,3c963ed1,5a74f5c6,1a28db8e,de070870,cdce2cf7,d6525a6d,16171076,44f153b2)\n,S(e625c4a5,91460bbf,5c3aa583,c4cb1e1f,c202c82,7debb82d,985732ed,ede98f47,d026c5f9,a9035396,1de50534,8e4ac600,812a461,c913299d,7fddccc1,5970b72e)\n,S(6bd227fe,d4b193af,8b94553c,718357e4,122cd057,d95980e8,ebc8fe5c,7fdaac1c,5f3fe540,a98b044,9ed835d3,b0a2b4e7,c66a0549,e4b7b9f0,22fd5249,c621a9f9)\n,S(27707a25,895e6f38,523d3872,c5b34e7c,68a0f0f9,54c6ef49,5cff6664,1edb2609,ef6f4f8e,c893d697,69f34b38,f7f677e9,e5de5c91,48cdf35e,3a18022,3ea777ee)\n,S(6052248e,3359414e,bb7770ea,4284d7c,c01770c0,e75466db,1f314e0f,cff0ebde,3d982058,5cf0d546,9fa62e02,aa556fb,1a1ac7d3,1cb9712c,8b118e2a,e3f7b7a2)\n,S(f2cb5b53,4fa6124c,16d82506,8b229857,4d4fc666,9b45550e,6c75a114,f370f6bc,5cde5707,63a5cad2,13952def,43cc779f,8ec9dcbb,c5fac8a0,ad7a740b,7241112e)\n,S(77ad8215,9fe6b9f9,e08030c7,a75c601f,4989b51,4ef6db20,aa9d0b23,e87a502e,9268a1ee,ffc24932,74856add,2ba1ebb3,c13678,99af932a,87fc680d,ea9b703d)\n,S(4418748d,171cf80f,a7f80fd7,c2d7891b,5cc9aa0f,ba4ec1c8,a114cbc9,4a8fd29d,5130285,79f01b7f,72f18322,b279fe7a,9916c16a,a67c6aee,babbb418,fb1835c1)\n,S(16af4960,6f89c87b,7e5901b4,d11a826d,126e59ff,df7d0883,1d37d7e6,367355e0,1a138440,537223c9,e8e131ca,8ea3b38c,12c8e8ea,50ee09f6,8ca4c2cd,4cb04c2e)\n,S(22d2043c,ab4431b8,cf77ba0c,ad81848c,730a730,35277e4a,ae6392f9,de120f9d,d7795dad,5e5b46d0,9c36520a,c7fccf9f,4d71f9c9,8ed3d45a,432f4f6b,991b8acd)\n,S(57e7a8b,34826533,7e203360,2f6244b6,41d92c8b,b2419734,9fbb3271,57676302,4d9238e8,ba4bc8b2,c3abd2eb,6bb2e545,5146afdd,3d1ce2a0,9752803b,4599b83a)\n,S(45567f60,2755027e,282b39ed,5ddab1c,7ea19a82,4c0609da,9ab455b0,26acc359,db55ed5a,77a354ed,e4229161,141392dd,82c1ccf7,f726fd4c,2fbba48d,4134f5a7)\n,S(968fb554,91059347,9dc1933c,a8453201,798a0be7,1a284c38,3e8fa5a0,f67fa80f,63586b1,6853f550,c36d8394,56718376,1c14101,dd03cbd0,b164cca1,24e8920e)\n,S(f366c649,f633cd7,f1fef522,b78f7b85,3d640acd,11af2d17,14c14251,ad873107,5fc396af,38f4988d,82c4cfab,59d415ef,25b260d5,711ad546,e56fb65c,7482c6b9)\n,S(aa0c4fd4,4a2e68b2,edc16eff,d2b3c29c,59b19289,1503e6e9,ad068743,fc201d06,614e3224,2fba7977,464b5c4d,b76270d0,2763aca2,54aa5b82,b5ddf8b7,ff3fee33)\n,S(6c886cee,19b2cec6,91c57abb,da830e45,da4cbdcf,37484ad2,b4444948,8f2cc876,24cfcbbd,9ab4df87,87eb384,fec64e5a,a197e897,bcf2dcf5,def4b94e,afc16a1)\n,S(4d600199,c33f76ee,c81d1686,f116d4e0,fbe5e4ca,df3bee43,9a81785b,c6095554,cb414cce,b769f70e,115d4321,fdfed743,2bf73dc4,9f1628e9,dad15f32,5fae614a)\n,S(377dd0a0,196d59e0,e71e8472,4b65bb16,12c3caca,d2f2230a,a675a25a,5d0a4fc2,2c727e7d,8c8e27dc,a5ff7c27,b349752,1159c736,2b51f38f,e0343c74,acfeb560)\n,S(9cc0cf8a,23afdf35,1bb1826f,9d900b8a,e8aa5019,8cf36552,9ca928a5,9c820f46,b572f15b,e2aac0a8,c8142c53,ea43a0a0,693e5446,5d5531f8,b068d347,f7e67256)\n,S(d55dfaa6,41492b1e,981d154a,2be0441e,4cfb01ea,a51c40ea,d4a4d8ed,19fa3050,2e795dcb,408c74c2,a9898f31,523a1e72,da0c4c77,c2dd2eb,45fb2e51,8f238ac1)\n,S(46bf63d7,2d113152,3075efb3,fac6c07e,e3d27e87,279724e8,46306dee,7d210fd5,771bb1f2,30fa3253,7e3b433a,2905c4a2,dc4a2e37,32e282fc,94cb2c88,33b0b199)\n,S(4bcfe388,3e77c17,8c6f1826,f75e7c3b,594ef8b8,c1a9ba3a,13f00597,50ca3aad,b5562e93,9dcf4672,fa283cf5,6c05389c,ec5ea923,b47d09b6,2ddaaf54,8a1b0129)\n,S(c9681af4,715e69ee,d7cce802,34bb2a49,6255ba39,1df76c57,df9747b8,d8c241db,c8b175cb,b03d5206,5f2bb846,81bdcb04,da530e81,31082e08,28c21f7e,cde038e6)\n,S(9fa0a1b,56bd6ac7,f4a2671a,3b4f6ae9,bd5538bd,4c6b4101,790b16bc,c2fbc33c,27f9eabe,785c7cce,e4859959,348b4864,16056f68,6d445fb5,c08fd8b6,33129e63)\n,S(15042df0,ca178aac,723e7b9,8677964f,a87203f2,bc0e1fea,a56ec6a4,73d0381e,445db657,dac86b0d,f8f9eb59,a143e75f,e271cbfd,2420b3a1,677ee3bd,8d0183f2)\n,S(354f6a63,d4c1877,e0e7da3e,921db767,6b7f9dd0,eaf8b65,eb08b032,1f37e9b2,1000503b,d65b80be,eb72f480,a43efd65,2eb784d8,650bffea,5559aa2b,104ea8fc)\n,S(19c36161,7a448fc0,49cd8864,d2707d6e,9e4ba74e,79ae3d8a,c11430c5,99de065c,2f9f9fd8,fd38ee81,94ef570c,1b7299ee,75742d18,1610a2fa,4dd06f30,989acff5)\n,S(3739848a,d2ab8a66,b6a7a2d4,add9fa8f,5a50807b,56ce5d39,5bd4c146,7083f88e,6fd71820,611102bd,f4dd2056,92e188cd,68a5409,1036951e,6f58162c,65f0cbc9)\n,S(9c22cb45,261c2336,7dce66f1,f84b84f5,2dd7e58f,8ac6dba9,50062eac,1c10aa35,ff84e3f5,8c25be72,910bead6,286dcb9f,605b0017,1996d46e,c8dbee64,52a1116)\n,S(572145c8,7f311732,7ecc71e4,5e37c555,5a412785,7513fabb,d0fbdd49,6db4538e,163e63ac,5e3908da,2aed5166,c121548d,5338c6ac,4ea7550,242c7910,8a38871f)\n,S(c9f07954,d8413eb5,8ef213b7,51a966c7,4c641ed9,8db8685b,d931e321,2de940ef,9e6844bc,804f3d3c,a065fe7c,b09bcecc,92cf5af3,ede9041d,792c184c,cde17fd0)\n,S(ac297f46,b07c8a29,d664a24d,f05a8a51,f7b0e4aa,e8800c3,f9291a13,787f25e3,686e3b7f,78e45ad7,fd1bbca0,54a5d182,b1556c77,753c1858,75e98de8,29b66cbb)\n,S(6c5913b,b383a688,390274df,121eda23,5ad55dbc,80bc198c,21897934,98b3e1b5,54b9b83a,e3649f4a,2f11ebf4,61e24a55,53e5b4b5,d0f78dc9,1c35aade,2cb9ccf1)\n,S(b9926fa3,f503356b,eca59ee9,2163cbf9,846e3efd,c793db45,cf7ea8e5,af2495df,d6dd7c5,33d4e7a1,ed415c51,1fc15e05,54fd00c,100bf047,bb8f9054,42e2a512)\n,S(4325d1d2,f2cabe77,fe0ac758,f6073057,cb36adcc,5357fd5a,31473ad8,74e69556,de437968,2ff6315f,8870562d,560cc48f,818c8fb5,c45ad932,ed5a7d4f,534904a9)\n,S(a183e95f,fd84bfca,4afc9059,ce1c40f4,eed924dc,d1bfff11,d38a8c1,14164917,11c57610,c7ffca41,145046d,4cdf95ec,c38d695d,bef057f0,a0d01bb4,41d64b95)\n,S(b340d0d9,ad6528f0,d9651414,f48fdbc2,ab7af5fd,3baa8091,84d5e881,6cd07114,85ed726a,9ecd70f7,f964dfbd,40e4b68e,ae2671a9,b6c3d384,919d040e,120dd4e1)\n,S(b52daa88,35992fa4,1595f0a4,c9e075d0,b146fae3,6c0d640e,8e6f34c2,16719377,6088b139,9fa83889,a6cb5cba,d478c7a0,4f42f082,24b169df,85ec90e4,7a4ad7ad)\n,S(90bbd15,42b0f88e,9f7f82bf,7c2b5fe5,f269ba36,4523a18d,5dc5709a,2ab9d8ad,c9df924a,51af344c,a71461d2,bd3743df,c6958490,caa68743,e06e7348,528fc4e5)\n,S(f72ee5a8,1696194f,ed3d4603,f2c9312e,b31c54fb,438b1fd2,2788ea6a,a3aa8365,e2963d82,b6ca0f4b,8ffc1078,cd45a72d,e66f4cc,78567074,4fc1721,e50fde8a)\n,S(108aeb71,5bc70525,42f5d6dd,dfd348f3,66a10f4d,d99f9298,c35a8397,e6b9fb53,8388b339,75a58e04,a0f6df47,23728986,97b8d970,ac6bd45b,49b9cf1c,3209f1ce)\n,S(dc3daeed,87345ebf,824a5ff5,c7f46268,fe54c901,493e2e86,e2667fb6,ff61d5b0,b5a7e641,238e0467,196c1683,bab47f66,cf001079,932a5d56,da20f89d,d93411e5)\n,S(3f96a83c,2be16120,e81e1d26,e3853ef3,a82c5f32,f8d6bef9,38179c06,4265c589,eb8d370e,797cf20f,d5a0d734,9fbd027d,630ba1fa,bafffa0f,2ea37131,6b5c64b3)\n,S(27caf86c,e1f423e3,1cca2278,244fbe3,b358357f,af1b7866,1de13b96,eff5c4f3,e8f77718,647acfb4,633ddbc2,3dbdca0f,2187e24a,2f2d45a1,39bfa1b8,a2b30f61)\n,S(6681cfb9,e2418786,1887f964,84819645,2d301a1c,7c082361,67a24c62,f74d04f,9c89eb3a,7849e944,2f5f521c,c08d11ef,f1ce4869,98d4d760,8dcb4a37,b815151d)\n,S(6711b849,48664639,67274709,2fbbafa2,fcac45dc,1795e80e,67fb0e65,beba8da5,ca12c83f,1c8f5ed9,222d8cec,bbcaa51d,6b986a5f,60d2c118,b812b259,294cfcc6)\n,S(5ee9cfd0,b1102cdb,a0fd22b0,569875c5,fdd73467,22769011,8b7843e2,b71dd94d,1dd7a4e5,bd7f9ee4,e17c518f,19b60332,60d2294,8b5f463a,ed9021de,87d7d86)\n,S(586dad7b,13390be6,f3d95a46,6d0224de,d7538f1d,2d2d9785,e38a3f2a,edf4924c,c777eda5,a68a3582,1735bd33,7119e58c,bc2fb101,c995f986,7bed9786,cc2b64d0)\n,S(5a752d2,fa012c7,1924b6e6,90ddc7e8,867f6ee0,ad8eed91,84f7250d,665091ec,57f2232b,32b36429,f15029fc,5789042f,ec1ace97,5f2cad27,d53ae819,47b95db6)\n,S(f93cbeff,22bc577e,a9cfef22,378eb142,426372e0,7be72e60,2a8064,a53e638e,abc772bb,401bdb42,94b16670,2279e4f3,eeadb75d,57190a59,96f34237,83afe50f)\n,S(8c272c9e,96130972,2efc34c3,6a6e63ac,76052cfb,856eb8cc,3dd014e9,d2608a9,9987d168,13c57162,3ba7d226,18b54003,731e3716,3495edfd,e85e927e,6e4607b3)\n,S(bf78a0d6,1519542b,a54226c4,d386ddc0,38dfd84c,9f9555e2,3e187c11,4d769bc5,6094e1e4,d84ec081,e6014b59,d42959ef,e160587d,315bcfe5,5d26ec98,b1910280)\n,S(5b264b76,cd092a1b,ffbab651,f42485fd,497aaa5a,e311eb28,ee1fdb99,32e65caa,944f9359,4b68d7c3,6610fdc8,85695b06,1dd84722,d5d88c84,c8c188e0,69d70d78)\n,S(a2473cea,8075a0d1,33bc1459,8d147705,322f7151,274e797,4b7e042a,c082b559,64de830d,b6557b06,d9b09d79,4f6c905b,5168d32a,708484b5,d2c68a89,a2575a18)\n,S(3e18d5e6,3dd0c514,4341535d,a7087bd5,f14b0708,a292350,6528a803,609efa45,6e9c71b9,7d007382,f82fd041,be53470c,26dc2f16,26a9f0a6,e1d9ff67,54288c5b)\n,S(d1acdbcd,b91e6315,bce96eb0,9c229086,6a767441,4285984b,71af6156,8294dfa5,5e3b0cd8,9872375c,3f807201,73e29d3c,accb67e9,66b99452,2c9e9f88,613da5a4)\n,S(3aa999e2,9344e0f2,b5ecc880,a35ecf75,25ddb028,c40f64e1,a210aeb7,d850c90d,cd2ce25c,fbe3a1be,dd2e6fcb,e9e9a881,28c454e,c7ca1951,5673aabf,a543d42b)\n,S(98a2361d,7c3815cb,ecd0aa4c,8a3a6ca3,3e1b31e2,5a4b6398,146d6709,61a5017d,1f33df78,3040c13,be821395,8d78e039,516df25d,4d9d0de6,d397128a,2c09f2bc)\n,S(528b9d8c,907ab870,6d7a5562,84cb69cb,ff348247,be1b7cc4,61351674,53d98d0,f91eb836,d6665778,7c6d67bb,800a1141,29700d53,194c5051,aba7ead3,ddeafabd)\n,S(f1adec8d,3d1b0d20,8bda6a86,6b8cf730,f4be50e6,2c8d993a,3556c1ce,625029b6,478324aa,c3bf6182,25bfb61b,32d47956,57e4a754,e08a978f,964741d4,1bcc7224)\n,S(ab2ef133,b1b115ac,41870cf8,d75d4aa0,e0181ca,742a8f10,f74d50a7,3924a099,a2c47b74,c584eeab,57949ef5,38c0af69,2f2baace,70a730a5,75629ab0,566a91ea)\n,S(9d4eb41a,f6da6f83,b1d20e2b,f9370868,539a617d,111b8c72,348c9b27,e0576f85,c1c7b00d,b786c84f,a8adfe90,4353305f,73acc3c7,1c2580d7,cc5d6b33,c5f30eea)\n,S(30edd57f,7b1b2c81,c886dff0,5d9e9062,a553638f,9e4311d0,18a42229,3fb916d9,6bc4774b,16d257a1,81e20b48,5acfce30,f7449e64,aa288502,d44e7c4a,44842ee7)\n,S(28e3eb9d,9a2b855,65c58fc6,a492014c,f10969a7,1e81066a,41d1c574,31306583,fc653b87,80734067,e5245c,8c150ae3,59ad3c15,df4a8e7d,dc93c8fc,dfbb6c2c)\n,S(cb984735,e3c842d0,a2fbe578,ff3e8263,5a3a8bb6,749d8e08,c91571a6,9aac75a3,e935a0cc,7181c3f5,3013f977,ad714af4,4c3e257b,e9936268,b481429b,7bea8367)\n,S(36186672,7e8307ea,eea83b10,6850dfcd,5e4d665b,20aa37a3,ed0051ab,a40fe170,ec626ed3,2ae6dc01,f5d4c710,ce2cb349,ab27cbf2,da5d924b,e32ef8d1,707a6d)\n,S(b1a40d5e,69e9f365,c2accd54,dc8267bf,4260abb2,3b503136,2183b17,4c6b7d2e,76619dab,2a7b41f5,2401ff89,4ef632eb,31eddea8,bae27c3,af04730a,3dc186ec)\n,S(abd488b3,dff60a23,e83f0ccb,22620064,b32a8f35,d4c22be2,42eb1427,15660825,6eff80f2,17dae3af,96c7a463,d1848bab,fa994904,91a1105b,e1bf7f23,840b3a89)\n,S(ac0cfb04,d91ceb48,2f497974,321bdb10,2a572115,73fe4598,c92510ca,4dd6aa22,6b5f6d87,4a90d0a9,658ae4a,64474d9a,3950314a,4662ade8,1c5e5605,274582d5)\n,S(1fa8be0f,476c4b67,697c7541,dd1d8be,a3a0bff3,552948e6,87baf11,afc34432,c6b25084,8038461e,32961d20,181c7187,fe79df6b,8f5c5e54,96ddb5ab,80788d33)\n,S(281b43c0,d3738989,a817d313,755c5f0f,f336a4d5,7e8d0ec9,b29fb425,c1f90e56,26b5070e,ba1059c9,b73e3db3,1227a6a7,68683044,7f823689,921a9bbc,bc9f4a9c)\n,S(d64e69e9,54e81ec4,7446327f,55e5a82d,3b83eb46,2a92af12,f0b2694,c88f4052,aa7ed55f,284c3ca2,9be75565,f66ea54a,27a8f00d,afaff0d5,8f394797,3dc8622a)\n,S(f4cdbaee,d4b01db1,f0b5b0c9,d6178235,483fb58c,5421ba54,17bbcd4f,e4e7b028,66d590eb,29d69904,deb9f48c,5a250089,b2b92447,8ea91302,1ddbab19,6c63b47)\n,S(8ff94c4a,6c46e334,feca809,79d21a0,761fc1cd,1de76f4c,7243ff0a,93c9dca5,123ddc33,5f3c68e3,29f42d4f,187fdcc5,77207134,a8bb777c,2ab08dae,f149abf7)\n,S(c7869b4,6e34186b,7e87c0e6,23b64fb0,efed70c4,f2af5e70,5c33ecd1,27cf267a,66295439,36620898,2f17d95d,7da2bbd7,29aefa4,69005a59,629720a7,5c11f48a)\n,S(e0ea76c6,ad5dc87,bd26ba9e,25b5041b,9836f72,6eec0142,351b2431,6cce1a4,8bd724e6,632049ab,88aa620a,78922b65,6a3a4417,c8af7dbc,5a03d4b8,d4eff928)\n,S(2fa63ac7,3e5f8982,36419f1f,4883f52c,e8e357d2,4b4aa7bf,c6aa7eb1,29e30159,57e1601c,d6323fa8,f5a5b314,6b5e5c44,7251db28,6f79d51,7d0b038e,b8d8c3fd)\n,S(74ed4038,d4c50930,22e783fc,1bb7a671,49d00877,b202012f,6aa6d32d,c73026a1,5b74f70e,65d009e8,8cc618e4,9f7bfda6,58234f80,38e9835e,80e6fd42,6b28476f)\n,S(71d6aca6,e38713dc,6ded1f93,4fdf20fa,16ce75dc,dc405148,eaefd2d8,f0025f97,b4314533,7d48dfc8,278c6c4f,b19f69d2,72ffd4d,a22dabae,dd3e60a,7067e302)\n,S(28fb47f1,6e91bc9f,9a2d5720,f40297ae,ee617ec6,897044ac,8a174acc,5bed5292,d04b6961,d72472be,4fcdb605,9943c1b4,ef8e7aed,2ba7859e,bdb84a4,f8b498f7)\n,S(68fcd5f5,c8655b5f,5d2fca79,59a7b32f,828c5a5d,e262f6f8,94270ee2,1f47a37a,57480650,33627166,c372bc4e,7a710275,7aa1ad4e,5460dfb6,d3d27f32,778d74ab)\n,S(c7617ad2,f423abc4,7ed7f8a8,a7a6002d,17c9744d,1ac6be97,49110685,95aa36da,d9904b67,fba96cad,cbe7a9db,833c614a,69e330fc,a06ca2e8,d597f657,b7121d9d)\n,S(a7ef4e9d,2396fe16,c0e78b95,5259a9d1,474fdc21,8b24e8c8,df566192,a6487cdd,d6782604,91c6be04,98c3f7e6,86f22f37,23c1e4dd,4f7655c1,f40509ef,5af67f28)\n,S(f3be7846,7ff03676,4ace420f,4091bb2e,71856d18,9e24890,eab6b436,771e2578,f3027657,45cbf3e5,67a6966f,6b27ffc1,dc58f3a,6811f309,434662bb,636dbc5)\n,S(5c947f95,5bd9ce29,5214c30,3ebf4f35,6c8d9e2a,4e173470,94d3f755,36f0259c,b6b7b775,3e7552a3,d2dfdf49,8578a24d,90a81d8d,68ef39c4,68fb5ca7,b75e76cc)\n,S(236fd960,c3b1735e,279b8702,8c25a074,2c54c189,d1040c13,4e4cf40b,bd8b2c68,9ab59bf7,c0bac18d,d0d9360e,b79a76cd,b44bacbe,b425d181,873ac390,59bbc279)\n,S(c92c9f26,17cce2f7,659d0243,8b9d8932,c1a9e9ff,ca8b0d99,cd7613b3,b1947b31,abdea94c,1a5e64eb,65e70769,51ace2b2,e4804ddf,1539d50b,725fe09b,52357a51)\n,S(986087c9,142c608c,33783a12,4d22c316,733c2ae8,bc1fbd2,8bd1a142,6da94fc0,14925bf5,fd76b51d,6be82c65,4562cdf,8f5baddc,eb26c68d,3fa6113f,ab42a1cd)\n,S(465a1f74,f4f6baad,7c644e21,f35650b6,22424e93,83b421bf,91478621,a48a1d43,26da71e4,179430bd,ee6698d5,7db01553,d41c147b,83247157,9f2fe923,c788cb48)\n,S(dd7658cd,f28117c4,4ff3c88b,d0b46adb,c7aa2ed9,1590ca00,785cee6f,5c9796b4,32317c0d,1e10e997,a74935a,8e45d27f,9a9b8ac0,f77dcf37,c1c7b340,cfcc43be)\n,S(55bd2abf,a803c49e,b4548b17,725f52fc,6222af8b,dd9aed09,715ceb87,57c72033,34ad33b3,9d7344b3,abfc603b,8dcf2a54,96b991b8,41564e35,53adfc85,3d3ebf43)\n,S(77be5c06,d10c226c,8c9616d3,15b1e1c,44006876,4189fc36,db0c88a5,ec12fcde,ccf2cbca,5c474949,88f27ae1,b0361b9c,20e8b55e,d965f7f6,ec8fd9e0,429ba01b)\n,S(fab72486,3eb6f261,f0460b19,bea7dbdd,80b890ee,d4bb5618,30db6af2,f52ab21c,914f03a,408a2e2e,aa9174ed,99d80e68,b67f6afa,fa9da5c1,5d22f74c,8876d0b0)\n,S(232a2039,fafe8b86,50a671f8,de78314a,510db65d,5cf105a1,9db8082,2a0b2f66,14ca7082,510bc1e3,533b9f6e,e216ec13,3be3a6e2,64d2e218,d95f3ec2,ad78576a)\n,S(b3482839,612a4ff7,a0584752,68f13e69,deee9fa2,894a8cfc,64e39054,1b7f58e7,722d02ed,df30025b,eb4e9fa,f7c58de1,653b8224,66b1193a,3f2fb71d,5d26ae44)\n,S(d3873a57,b0a7587,cab10871,a9322712,cf6fd84a,226dd7b2,85823996,5a353210,3b7e4984,59c7e706,cdff95b1,c55e3351,f1f45d0c,c9fc11d6,60e5e27f,5160f186)\n,S(8828788c,eeebb2b7,71d289a7,147c0a7a,26a049c3,26dcb281,cc9b2dba,162c20ad,e428a195,87425f22,3d798922,b4971c26,5da2fa2d,de4a364c,c8c65f48,c07b71a7)\n,S(79fee531,26d0c00d,74986c18,993fa174,52f8dbb4,ea75680a,37f0b3f4,ea7e537d,fde50071,3143f994,b4d7b4a1,43ab3abd,525cebbe,93d5b5a4,560017a8,802cb5b6)\n,S(f44f39f0,5a9f5f79,5f0f3a8c,e03ab50b,3672429c,bf699cba,ac1e58a8,66814e91,b95e45d1,e4de1300,950a27af,bab28bba,ff75a246,46ac70e3,fc09da30,d59a1dd4)\n,S(1138e209,baf9c9b7,b89d7d78,832cf7be,da45afbf,3c2fa148,50426ec2,80aa9abb,15c28d6a,3965b2af,ea28520,7e67f2eb,ac7d5917,9672f88,3727e499,f06a0d6e)\n,S(29d3e942,1b98d78c,60e4685a,aa503130,dcd3d3f1,5afc2620,472b83f9,34912c1e,90a514f8,49680969,215d46b6,db7c53b9,411c8c67,c88bace1,a6d45ca7,d2bf5825)\n,S(a8a36a94,5fdd33e0,4f0c18d7,cd2d4709,d6efeb88,a53fa0c7,e90969c0,84ff3eb8,1dd7f905,edbfcd70,26aedbe,1cee1cae,23db1fcd,479f02a9,bb596af5,f56ab564)\n,S(5a048ece,b3fa944f,90eab4f0,c3e7a06c,3c35f2ca,81263fd5,3670c212,6a981eff,124f1bae,b70fed65,d53caf7b,5e88077c,8e330d05,692199b2,4b3d6d4b,b7c886ff)\n,S(32070282,c5ebc2f,665ee579,c645fac4,fd1eb4ec,d7297158,3dc81288,e932b8ba,8f69662d,d68407e,dafb11ee,8842707,c17eda9a,803cbd55,b86dadf2,85bdaa17)\n,S(7c22865b,fb04d3f1,bb988a7b,80a49fe,c7810593,27a19786,db77a47e,57afe787,a02eb26e,30f599d7,d5599734,439f19cb,d0830b72,60e70d53,97f06e1,d036bd3b)\n,S(a0ba4c13,30ad8252,c06c8269,a3dcc365,fd842e5a,aaf33a4,22de13cb,b9385cc,58ecab13,5cfdbbf7,f3b6d2ce,277b9e84,940fdb14,47568960,c13290e5,fe239bc8)\n,S(42ae6042,c8a2ba5d,c8fe47a4,12e2c0cf,7be448,70e67819,4e31ec23,44f76309,72ad69ac,7ba38bf2,2210a6e7,53c64467,36ea3a23,cbc96c3c,e19f209b,dea1542e)\n,S(8f3ae8b6,45507a2e,3ea5d82f,47020739,d8f35f0c,8fc11e7c,6e802d5b,87b2a19,61bb8e35,3028ed54,1b83420e,fb9b1473,60425927,d3f9b6a5,d1d2b80,ee5b4cfe)\n,S(3a84ba4b,1e151920,a0e4fb4f,30953e6c,a7ba1e12,62ae44c0,d91b437,b05df32f,b20f6579,43525f14,7b23abe9,c90e1d0f,32c44eeb,cddc6ce7,d3cbad9e,7d3e20c0)\n,S(6481fe6c,b04a503,3ecc102b,de462e7d,7b87d181,2bc145b6,2d25fd88,e7316210,bcc1b4ab,f5f32ad0,9176538b,808c9187,d4e88b0e,aef31075,b26e5c27,8f64560d)\n,S(5340174,722c583f,af9cd365,1f73b33f,8e4bd1ca,cac0af4d,1ff13064,d551a094,e4902135,448a616d,e435180,f85d0a95,d9e4655b,aebf8a41,a3bbe221,1a66a8e)\n,S(c0693eae,a5825c4d,6c24e08b,d57bc32d,6c9ee2a7,90dcb49b,b350f852,4e2867cc,da20fb4b,7627411e,5c6c601,bcb8fb55,f4f6178a,efe0ca04,62c85d86,33b9a05e)\n,S(c51d0f73,72fd0502,d17f9200,ca189821,e63e581a,8356735c,a91b6e93,3cfa0d9d,8d10e6b2,7ed7edd,2cfff134,54eb979b,a2797a7d,3c6fb413,b3bad4c2,2e352655)\n,S(16811856,4d2d99ae,2daf79f8,58b52ad3,3666008e,d9d2c59d,be3160df,bec3290c,2bebf1a1,45617848,e81dbac3,4522cd0b,3e9cc84a,3c08602d,1adf77ba,292e7460)\n,S(7ae94933,e1438525,b2ce1622,5654aa6f,b15999a,57835a09,20a49748,7c0afeb5,91912e37,830a645a,138282a5,1e3331bd,a13b87b6,f443f901,95a2f4f5,bd9b95f5)\n,S(e7792d97,d02b76ab,2414c5f6,c2d1bf0a,c27709b0,55b2c36b,179599a1,3019d4ac,9f4d9689,5fceb179,b98c75a0,d5d56cc1,dd274614,a2816e8d,16fb98e0,ed3f2b52)\n,S(2ffb9d4,946fd63f,24cff64f,4ac79450,3d97d706,eea6c4f7,69d9e34d,3247bde1,66b1c74,34881531,2bd6907a,6e3608ea,cff18832,5576fa9f,f32257b7,eb81014f)\n,S(4544ba32,f90ceeb1,1412aafa,b4ae7351,aeb6f4ba,12e00ea3,c165c8b1,ecbb2fbe,62fbd7b4,c2a5cee8,bfb9ede9,b02dbbfc,2bba538b,834797b3,948887cb,9f8f6736)\n,S(250b01b9,25d9ffa2,75eb156d,d8c67b5e,5d981ce7,8824d37a,1b09e3e6,7918980f,ba1d924a,32f0da86,e532bcbe,6766259f,eb185161,4042c0ff,261eb81d,3e09c481)\n,S(9cf30e54,1f2a5fdc,73046807,32e962ee,62e0b813,901e30f5,ecbe1fee,abeb4d2,7cb246cd,1281b77b,19601d14,baa8ff62,848259eb,6567c741,c6bd54a3,b5510723)\n,S(edc9e8b1,3c61a1e0,8f93be12,495084ed,b5a90eca,4f11dc03,cd217b1a,56285a2c,66c2fd21,7e8fac7,4fd43b1b,58c80661,b0e8df85,a2fddfda,5e9f99fe,621e1f3d)\n,S(dd94295f,8388a498,2aaa4164,927b81ba,cae9d002,b3ddb6b6,97082c70,f1e2c66e,838c060c,d409c1ea,9bcd9e8c,b1fac83f,3b08c2b2,482d8f4b,fd3ebc18,8d6706b)\n#endif\n#if WINDOW_G > 12\n,S(7e068e04,dfc0be48,e5c0d3b3,5bfc734e,96e96ddd,d0ac4876,92f74535,685ab7e,df2cd146,90d225c8,d04052e6,93f14bf,69351e08,79883646,2c88401e,4ec70d0a)\n,S(73a9bfcf,d10aac9b,46e659f,76c439a0,b7c2a073,7dec217a,21f43f39,949a5052,73b91529,3ea7b052,682062c,8f86cbf,bf379df6,91a9cec2,4a1424a9,b3be10dd)\n,S(efddff84,c8cc754,e6e34678,d85809bc,55cc224b,f69be05a,daa847ec,d408c55b,65dd8f41,8264aab2,efe6ed7e,c45b4ac,8aac218a,3b6713fc,1736dd6d,c2f188d5)\n,S(46a94585,7118384d,8d23d6df,a4386dd9,dc264f5b,171a7585,7565688e,bfd73f4b,3de5af7e,a298c18f,4dbf16cb,38e7f617,1e684ee8,e8df2a6d,256c011a,65aaf35c)\n,S(6890edb2,7ce3c265,d4afa17b,be160a94,45dd0c8c,9ad6d93b,910ea47f,3821cd3f,60f47c5b,10ef5494,cd8810a7,ca8802ab,7c24beea,eb67b852,dd22040f,77cbd1ab)\n,S(8cc9eb6,340b886a,81ec4b32,87a251c1,e33e68c2,1f55688d,952b44b4,2a05f5ae,9b176b0d,90e38290,8911981a,3bc475b9,f0323870,150c9c95,5078bf02,307fb6eb)\n,S(2b062f5a,da48de0b,58001cca,e96cde15,227875e0,26c94e0b,fd1fe2a,495b0475,537f1c68,3d5170c5,8097bad,4bf17276,da9de994,8eff6805,48b35390,2f1eab0d)\n,S(dd55b91a,84b3d53f,4332ff7f,224e9231,cd358bdf,27f30082,52d7a8be,bb7240f9,e6f1a08,a40b6530,ed737609,4deef969,774d2173,a3ac158b,ff681908,192a5c94)\n,S(ac5127e0,40b1a979,46c0cdb1,c782ee2c,8986fd80,d7151e75,16fc964a,f2c59c70,849e2249,323d0539,dda0a82e,1764593f,8afbb097,880af8e2,4765ea01,b7ae5db9)\n,S(df2f2eda,f0b6ce9a,3784e9ce,1e1ddae7,9d136423,153174bf,f72212c1,b5311123,b9d98f8e,bd78bc20,316da64f,46644026,fde6ab44,162027be,dbac75f6,e86d46a5)\n,S(fd83b387,d630c176,23b85e21,62113610,97bdc5f4,3fb08027,73ff93d7,a373e5f9,9a962a7d,375f35a5,9d7503d4,c0fddc9,115805bc,38438837,d3c670b6,ab6cd2ee)\n,S(d8fbdfc1,155ec8ac,8bead443,ba3feaa8,d565ca1e,4206cc95,5feb8e1,32cac4df,f9453c0f,ccb99cb4,739258ed,febf7642,7fb1fcd6,1f963abc,9cb9a5ea,751f73ac)\n,S(9fc9749a,20a3e8c0,1b309389,16aaf3d6,85f00872,b82350dd,c89110c0,dfbf86d6,a2f679a7,6c92ac59,5773bca7,8f0f18,75c85cba,e75a6379,1094a799,863e19df)\n,S(29e0e346,71a91ce9,bdabcf25,2e2196bb,65b81092,d3728f62,b58c815f,2f476a3f,2f440c61,b82e0ae4,798a35fb,9c66b261,1ce5ad0a,ab42f9d4,174bd698,d4d0c0e6)\n,S(e4068a15,398955a0,f27e6f92,9cc3dfb8,7fbee70b,a86ee78f,8736b519,ae102d7,a3f2f2ad,550f9cb6,aed99943,84a9a350,16b91143,747d4e7,7d69e698,8f165086)\n,S(51b45e10,bb1bd989,8bb156c8,a4c81978,10f16364,d3d55092,48a42028,726c9f2c,e30719d0,4225de63,281ac479,70010cc0,8a1f1d51,48c57f6b,b478c95b,e3e141a2)\n,S(14cd5d29,7b8ab6b5,e92ec2e6,6c63b3d,64dc492f,d5a0c5ac,f6fcbfa5,aaa0b83e,5bf307d7,7cdcc866,349ad1fa,fb1c7d8d,5be19270,2a46b327,9b72bd77,e3666805)\n,S(a5a8a711,49d6d146,c32254ca,e9c18288,45e9f2df,419ed68f,8c3cddb5,d22c4da6,9f47d887,7bc3d345,af4ae693,35639bf0,b003f481,7833d2d5,49c0bbad,3cbf6c2e)\n,S(359328d2,4baa4232,d75b13dd,d146624d,bda494e5,2cc778f9,99a4c0c4,1f9372cb,d31556b5,71df399e,99084afe,c8f680b,b6695d7d,648f7050,a7881acf,241af6d8)\n,S(c9eb81ca,4f2a5a2c,17268a12,d901edb0,c8fdacc1,d26c5e8,91af95bd,e673e7fd,6d4a512f,c974fe9a,711ae19c,d9bfbd6b,5acb73e5,355608df,76ed2942,488adb66)\n,S(e26631f8,16f3b308,ac4c9f90,eb6102e2,48e55730,24f41f38,6ccde5e6,c2ca8e2c,16e0b2a8,823aecd0,165e2f10,20518253,96cfb814,bd5a248,58a4615f,eb9306bd)\n,S(f76e9af3,65c0e7e5,7807b24,269c4732,677e5af9,a3b0a965,8db8355f,f99110ba,80cbf439,d26f164e,bdaf2542,385f9d65,9d174c62,96ada102,8a0cb013,bd2a9407)\n,S(dcc8145b,af891483,295d6ab6,9a88fce0,bc333d54,841e7421,e65f6270,852c5dd9,cedb3770,a620e7a9,b40d6cd1,60363bb0,296155cd,80d89480,ccac619a,f31e2a19)\n,S(7645e13a,6a1c4d0f,a56a199e,cae93018,7660bc40,41edb847,ed33fad3,c603e4fd,7c8ea51b,7990e5d5,125eccbb,5da890d2,bcfc5353,b22c42ee,1864c22c,be91e713)\n,S(ba26886e,d74cbcef,afe7210d,51c1b6bd,4658225d,45e20fb4,4222b318,9e2f3f25,fd885db2,23ddadee,9e65fa64,abba326d,e0b89627,7359e893,bdf50db8,a2b3409d)\n,S(68b500e1,31005b1d,901bda65,4a525e80,fc6578d,5e792c92,299d21a5,19050fe1,71ef7d7a,b3544a94,f3dac8e8,77da5468,8df9b127,83e02022,7e05d5f,6b12f96b)\n,S(2ccca7e2,613fa83c,27ff851f,12c6fa07,5b19f7c9,940a5064,b84ea75a,da7996ff,5ab70a22,22dd1ad0,d0db2d2f,c59390b,cf37af8f,bed4570,3c6ae0f3,27d7707f)\n,S(6d797d2d,6a56a45a,1b5af718,3cb6dca4,383ad9c0,4d5cf3c1,827f4da6,f7179f14,aae34e5,d203d18d,99e84bee,7d6f5a8b,b80e541e,15a3aea6,7b162551,e80edf3f)\n,S(aa6997c4,37be76b1,9553751a,d96a53e4,9a565a58,55f67b5,11605996,e98ee327,6034a421,9cdb40e0,9698a15b,2e2f5f1b,6532e277,a1f4f4cb,3cc0c33c,c684835)\n,S(56c40fbf,fb8e1d70,a345d53a,7b0f897e,1e62484,dc01adea,d010c5be,ba2a0f48,e9d06789,78b9290,27ba0e09,173d8ca9,676a4a78,7e299f4c,458cb6aa,46f0bd01)\n,S(db6ff6a8,3963ed7b,dc262be0,8b52c3dd,b6e1e237,2a535073,1d2903d5,17918d89,a40112fa,f30fd44,b42f6b18,c144ca0f,e248d65,d757bdc,162b7118,7d951769)\n,S(8df55701,a46f63e2,338e730d,4a543013,dcdd1173,754e5de4,151ca180,63402c6d,64cf9c9a,64b63ff0,1396ddaf,b48bbf62,b3e69665,bc89ea93,b9dd12dd,57a1c3df)\n,S(9d10bc2c,51018f57,407ae460,e5dd5e45,66485cce,de258af3,7bef48a0,1b0588a1,38ea3c08,b2a4e171,7edebe44,e03dfeb9,726b302e,aea0eac2,fcbc9389,84922c04)\n,S(13bbc875,cc07a787,2ca7a706,8201606e,560257b,fce7e66,2e4b9807,37640367,b4cd971a,47c82a66,d8ca19ac,baaf1b1e,d2ea3daf,d6f54769,7fe474b1,c0c2c708)\n,S(8f26dc37,f617b174,dc947630,d0da6dc9,1857d9a3,13c92b1e,24ec9cc9,5ea9c3e1,3848a303,1d96bf27,4e423877,6591ac44,f887f2fc,1553375b,d5cf76e0,e73f15ef)\n,S(2e1e543d,f290916f,5e55236f,660dbe13,a23e0d9b,11065041,ad3a579a,4c7b5f21,885a4527,626e05da,c10cd9f3,218434b7,947bc083,28fe2d28,ff10ad2f,b5473846)\n,S(c83c2ca3,e0509ea8,bb876936,e3eb69b5,8bed8f50,e8c7b85a,1238082c,ee3f3109,2b9602a9,bc808de2,b0b0da10,d09da554,74b75e75,5301cc0e,3b07c331,329cd5ed)\n,S(8c7903b4,e2c114e5,3264111a,ee385311,afee8b1c,90606700,578d1fab,d3d29607,dd02dad1,964df94d,1eebea9,a2a343e8,b488c401,88299b25,28d47376,f1025731)\n,S(48263c54,dd7575cc,b30adfc6,c1c1eb85,b5185786,654c89bd,a38a681d,a6569cc0,e6f107bd,dacdb528,ed98e49,a25936ea,e223ac5f,55cb7955,ddadfb88,1213167f)\n,S(6a7c050a,ea7d1f58,7918644c,63cd5d98,accb7127,c54ee274,95fb2546,16f0d2d3,fad19261,27a2646e,34bf733d,c089b0ca,f80f7383,b4bb1546,28d7256e,d821e232)\n,S(e1f0a53f,62fbc202,df9147dc,c31cb09f,ece879a,ccc5a3b,f105a198,7f5c3ea8,3930a10f,b0eea30,c314848,94037780,3968f692,fe2e5d8d,cfe920f1,e5706277)\n,S(bc0fb113,cb0fca5b,fd66efca,e8a4c866,da9b6a0a,6d4e613b,48526675,d3182b7b,e11e725e,6993eebb,d2715f69,13ecb148,37892c56,745c601,31ca1c6c,bf090f31)\n,S(1fe5a0f4,9c438f48,64bf9ebf,89eae7b7,ee7e6a1,74a134fe,266b0329,cb42f908,db8095ce,f912641c,92b3878b,cfa7b596,694514a,ce9b779b,35ad6109,c675f66c)\n,S(5de3fdb4,90167002,fa6e61aa,eabfa53c,ade6ea83,3f3c8f6d,e434320a,aa524cd4,b5cbde88,862ad6ce,b344a1dd,88d1ac29,6d7e9ca3,d5e98535,dc158579,147e08f0)\n,S(93b06993,a913dfcf,5eeb0be6,294a645a,b2964f2d,e2196073,8adbfcbc,23da54f,7836782f,856cb744,4187330e,fca3c7e2,9c151ad8,1e8b507c,4d14a14d,492ae0b8)\n,S(705740d,27d90741,e685a044,f6b055e0,9c33369b,e3815851,886b7860,8e762f0c,c4a58fbb,738d46c6,9e93193b,529f12ac,b2142b32,1fbb3c55,d3f5dc99,173d956e)\n,S(7619a000,fc485526,734a20e1,99530f0a,e5b78767,61040864,34a1a1e1,1d93e296,7f300de1,182f479c,f6fa0afe,a2ceb59,ab26f675,77203201,4f8be86d,46ebed6)\n,S(fe20f5a8,ddbb5201,6cd346fc,d281413d,cc0d54b6,384e460d,bec5428a,599ff2fe,5b488ae6,e2604871,afebe551,f9957b0d,338cf47a,b4ecae0b,ae7a92b9,242d879c)\n,S(995b9727,ba7e52cf,2dd29e07,73c751f9,70768121,8ab88b84,422e1e3f,42ad11e2,c3c9ddc9,7ee41468,c4ec5e5f,529bd8b8,49c8d585,f905b91f,42af5c6d,2f7fd26e)\n,S(cb4f2e4d,2ca94d7c,79e91344,55161921,636d26a0,d84c2a16,e267c242,702b3136,215eb6ee,394940e6,cf00df48,f7e2b8b,1b9b2f71,7a68ee49,bbb879de,803ddb9b)\n,S(ca0a2a56,34b49144,bacb1070,7668eb67,4572b69d,5e1a4e6f,c722c256,b9fce397,92079cc9,74ab2fbb,a5098c85,56ada7a7,6e2562a7,bdb5ebf,e958eb82,d3f4841b)\n,S(fb82332d,c6c0c0af,d72f27a0,24ef163a,bfadde89,67b4c246,acd6b922,e3af7c7b,1a697119,f21cb690,338beaa5,2e2c4b1b,2b90d399,19ccf0c6,60dc540c,a934c7ee)\n,S(d056ee05,d9258def,20e184a4,e2018bd6,d07550a0,63db4673,6afec42a,5c513dd2,af2c1d0,d222e356,67e7cfb6,201ad727,89ab0fc4,d68dc31c,276d998c,bc15bffb)\n,S(3fadb222,c6584262,c4046c59,4b778635,c6325712,cd828726,7aea1253,42526f12,da5c8c07,fa6811d3,84ca7e8b,fa1d74b7,d181e0e1,eab86717,58666b7e,c199ae96)\n,S(d27ac969,e222e50e,5dd915dd,39d3e453,214b818e,fb67e924,8ab4263b,1d9c4b61,c4857694,baead305,6e6709a3,28403236,9a7c55a,d81e7f6f,9b494a76,cb3a1c7f)\n,S(412379b4,8b981ae6,a5fa4324,bffd69ef,99cd3a01,91a1acbc,d9340f01,72c565d4,f24036c9,c7dbe4f0,2ca523e7,ebe6ab57,c755053b,245523ab,ac9d3e87,fcfa280e)\n,S(d8234eaa,99374c13,b9a8cc3b,663d00a5,bef7909f,b21243ea,ce9dfaa3,f79336f1,b8cbe8e,c4b465f6,6a3c1593,292babc,1845d8f9,1dc80e5c,b1ff904b,6e755c27)\n,S(426f8b35,68c5ff9c,bac0ea34,9d8d3c00,427d323a,3d877bbe,47fbaf2a,5d189009,4e02293d,ce023c7b,9c7a1ba7,27cb82b9,9931f57f,78853bfd,7dc4399c,bd00586d)\n,S(f1c706f9,2ee5f2c,2412a7fd,c9ca5c79,8717576e,c780f6cc,fe72760a,4497dfa5,c5e1a1a1,727f55c3,b3978700,51a09b84,9ef75895,d6b9c4d5,9f85cfac,2bb7e740)\n,S(84e2e07e,cc1d5987,968d6682,525356b7,5982001e,67598b67,608f1869,36c2c679,41ab1343,8ab5ecdc,cbe75a8a,b7fceba5,2903f4f6,f5b43bb6,28173866,cc28555a)\n,S(7935eec2,fe535823,44abb699,3a18cf6a,3d599b0b,ef0f6068,9c689b40,76ad2b54,ce2fc96a,ab978861,b6ced574,fe4f5c85,b77480ad,e3d75b40,6c4cfbd5,53371910)\n,S(d542a4a8,319f6d56,b79abbef,9da3a009,3e8c2689,421e3839,27aa6a30,b0dbd9a0,5104a162,65d285ea,8f99f3e9,c1951a06,6badb70c,985877a4,f1979aec,7b8173e1)\n,S(bc692619,42289890,4af0157,a038126c,41011b9,26fb232f,d3c27d9a,44ece2be,8e2f10c1,47e2a630,9372e854,3cb8ef77,11e2022e,db25f4f9,847369c7,fe52f3bc)\n,S(ebe1b736,bb178c08,deacdd80,b48ab650,ae079a90,95f43e51,f4521bf5,d18d8d03,ad81c659,b1450de,45f78ef4,b2a8126b,782f2061,fc8eebbb,cd0a2ea,cddb7514)\n,S(e626b908,49e1853e,4fdf887a,df8f0562,666d094a,9382be7b,de152dec,b9e2774c,90cf55da,a4192a27,caab406,2cfb8758,2dca7342,c59627c3,f513ff9,f4834ea)\n,S(fba7a057,ba048792,2313b8b5,ba4514f0,d8f571c,bc7ac0b6,1a987a9c,e4381e67,7d2af7fc,142653ba,bf05133f,958a57eb,7cea5b90,ee5300f7,18cee7ae,d69ec44a)\n,S(144cdb95,5b5d5181,5a2e5bdb,57033e67,239735a,456579ea,1e3be689,94c35a54,e6016f89,e896fc59,80150d2b,8135b4b,ed0a108f,8a2eaa83,91987a77,6253f1e6)\n,S(538de6e,e7ab1b5e,cd74a2d1,a9599d9f,ad28cd8f,2679eb6,81c25e1f,183c0a24,36c0a747,79611193,5bdbac87,d5b38a05,2482b973,213d0960,1de8404b,14121004)\n,S(76914f0f,d28f73ee,20ca3806,263b757c,7876eba7,54bef2e,9d10615a,ebc03794,6de24dca,e16855bf,22355786,1626c62c,59330752,f9f8808e,c3930680,33a12642)\n,S(69915e6c,f675f7da,f595f7f9,6c912f29,86bee7bb,aa5800af,27e32baa,9e34e4a7,6094fbc0,2f109855,77b53c91,8dd2da3b,139bc31b,77674d56,df72cf22,2b9513c9)\n,S(4ee6c20c,900bd4fd,be942dcf,db91182e,2c37eb35,e4287e5d,859ba847,18ce3015,84ac9769,863d618c,4b738e66,8c293d3d,42e2a9c6,4c47cf75,90ed50f3,2062cd64)\n,S(a6813c1a,f57bf8a3,8ece11dc,a4c8c581,aa598211,af9ec6a,d2271796,88a0fa61,6420274d,f4e29631,5b7e2335,e98fb2f1,d415c99b,dc5a00e1,d182e809,5b8edca4)\n,S(421003b7,107b2897,24dfc743,275db49e,69d91077,6ee53d6c,fdfe6ab,710fce84,cb955569,7b924395,c31cb149,88bcfea6,a932087,3aa8002a,c218f33c,76f9427f)\n,S(9cb19e1,cb8c4fc,4009d362,eacf5f25,5e125298,5b546df8,fc60bdc6,48c8c522,227015d3,2c6ee68b,63e20e70,ed7cff86,8fd286e0,905bf623,1b7e894e,c7d70d12)\n,S(c7413596,8193588f,38f412d6,4e2ce0cb,c4a7ac4b,75e33704,36236362,8bb953c2,7bee7fa0,1b7cc4d6,d22dd4c9,ec16b39,5e1d70f2,52778801,9ae75ef4,a908aa6b)\n,S(2a8e8a05,321f4926,e8fac1ea,8a97cc64,c2f8e398,e86ecec,9dc2e676,61df22cc,63b86507,4e4fdcaa,acb60c21,c0d3f813,64f0c007,faff7780,9c81fbdb,981fae42)\n,S(f3ef2e60,7d403594,48aab014,ea8e2dca,5af1d8c7,c6f66127,3552293e,d497a14d,dfcd5334,214b9f44,bc5d1d96,49d78c15,9e9ce44b,f43dbca9,c637c31d,622cccc9)\n,S(6d5c41c8,169c33a5,d1111b36,1b1d6713,a9396424,bbfeb65a,80e40280,4857ead9,4c1f74c4,9f01bc2a,27a91d37,f59bde,3d674220,a521aa4a,6a0c548a,a45e84c8)\n,S(5d812a61,c6a986b0,2c5982ce,34fd478d,60822322,47e07c73,488c71f4,4afff85c,37083f7b,16018fc4,25749e16,4c923484,680b1517,8bed41fd,cc8da253,ffa960b8)\n,S(e01596ec,b82ff347,c3ba9710,82911855,720177a6,9efa7d5,dc6aa847,7f73093e,a674c832,849884b9,d38da5d0,6a58e4a7,a17acac1,8776577e,5547eb3b,b45b3bdd)\n,S(67a5a900,313ff2e,7b32fcae,adcff7f0,ad52b960,ef6b0d0b,8344402c,9980f55,e77efddb,5e8e8865,eb807575,37c41e0c,9fdf928a,eb8b6a03,f41703c9,3c0a4a02)\n,S(2b96879c,2e2d0ad8,281c1647,7de62583,53d77db3,57281c21,7df0d7c3,6466b277,dd5d3473,43bac32b,cc72408f,64a9fe7e,7e0dae06,786a7074,3cbbc846,80b62b25)\n,S(ab94378d,f08748d7,2df137ae,a3e3e123,639b054b,fb726bad,825e2d9c,310367e9,5785ce24,40037d11,a8331865,c78ddaf5,7f9d769f,f2df11c9,9e3dd018,43a10f03)\n,S(70782556,fd6fde3,8c93def6,ca3b6c8d,2f3fd4db,87be4985,fa3aabb0,43e7439f,7913bf65,ecf15020,cc5274b4,8eaf5351,51894bd8,fa236af,8f9b3fb8,178ebec7)\n,S(3025d070,138bd507,b338c72c,1024a3f7,6b4d5e80,efcedeb3,e71a018b,77ca3942,3a8a6a0e,175eff95,a94172b5,f2a4ee53,8d503295,63a5b096,f83dd669,eb470ae)\n,S(3fe372d0,65e97abb,94069e7b,2a8d01e6,576081a1,93897ac9,901a3d18,b9ab0b6,2efcee92,3154dcc0,377315e4,1d67b5a4,82403552,ce260c2d,4c1020a2,54842e5a)\n,S(368c7011,3a9133ee,97ebe8f9,cc06bd7f,c3c373e0,da810164,bce5a30,2af55636,21bd40fa,4870a8e1,6f28b942,bc169712,eb7d70e5,a6faa4a1,35bf86b4,d06162a8)\n,S(7df8ffd8,beb45e4e,1e440f23,ad6d713,57682f68,e54fd003,87eeac94,ecd96810,3d9e4cf9,908e5a99,44857d78,94c7ffe7,dc55550d,a07d3c9,ec07667d,982ed0df)\n,S(cb6ad939,eb49c7ee,7c216262,49b11276,88269172,504fb8bb,dd2dbf7d,b6f23d4,ec8604db,18f27367,de1319c4,59f8e668,5480ca65,e1789cb3,45e0018e,ea98346d)\n,S(5ae526c8,fc319e6,e054e6a7,59d9b205,d8a1e042,e684c53d,39098f28,70f4265a,da1e1281,14c25a90,cff3ef80,d5577c08,a03f4bab,d9e33850,f2488617,d50a9a63)\n,S(868d7889,6ddbacc,1bbf2b10,e00456d6,17477767,5b8d3323,a8786ae7,25ff7661,d92d681d,189b0df8,e2be57ba,a9c146f6,46e6ce48,342a0ef2,96fc3093,af22ca1d)\n,S(9f2f0b4d,e7b881b6,c4dd1f8a,74106a32,23bd3298,47c325a4,8341d899,d7686b74,6fbbd511,c2974af8,b5729ca6,658562f2,deca285c,b47f16e3,c444fc14,8e440088)\n,S(faaf222b,813b0df1,5bf2da98,3ee2eaf6,c522f5eb,e8c08b4f,e6950376,d3fca8a3,bec53e69,2e98dac6,8fb2ae87,44f12abd,47f00e6c,5d6d1469,b2cdb41d,440b472e)\n,S(7f5209b9,db4ab9fa,2c2a7ab7,6c5c62f,13c81c80,a4ec4008,fd67d229,a7161475,a13d6cda,f9e8699f,f397d1c7,6f191cd8,a58be40b,9acc4ce4,e69cea0b,4a48d193)\n,S(f436156e,80b136f0,8065f395,e2700a14,50c7b492,405a0c04,6834bf4f,12c84c2a,cdd957b0,5684e01b,a760807d,39b007e8,e7aa890b,8882a0e5,9118951b,bd7e60c4)\n,S(ef9aa749,5c5b37d8,2060c2bb,3454fa6,88216754,2b24d69f,201f1c31,3cf1d06e,f840da4d,f1d84a8f,ac125750,e4e6cd7c,50003aef,d1f77666,54ccf4ca,f27a4aa9)\n,S(7deedc43,e96eb93a,c290809c,25e7936d,6d9e1cc8,a5971d40,b122896f,fb5de05a,e65c0e66,27b9d0e4,e7b349,ccf12fcd,de6683fb,6bc93381,22026b65,26a8e0ce)\n,S(5a1bef15,6669795c,47be7495,582f361d,878384f4,f283e15c,e74b3ce,986d6459,ce985a81,1fdb02b2,9e35b97e,1833e380,69b28b81,ddf8cd61,b1179c47,2ccf39ff)\n,S(d8123d39,233413c2,b14eeb78,983c6fad,73b8fdcf,84b2383b,fa453558,e525fa8e,ea9d399d,905b7200,46ff78a5,abb3cb56,835e35a3,c958095,ea226947,a633ef73)\n,S(62f43dd4,f1f4c310,266a36c3,909afb5f,10d3dfd1,a7a6b5d8,93931334,e4d4bc8,bb7589f1,f83bd647,2e34fe22,53a101f2,75525829,daa2e8ef,89fa1dcb,b590f3ed)\n,S(6cf371,d549c045,1415aa75,cf594d4,865f6e44,6f62df4f,cc1cf312,f79d72f7,f8ceb62b,5c979bd2,82a4ce20,682b45a0,2b3dee9d,68ce16a,7581adc5,c9e93af4)\n,S(5bd7b780,770be9c3,7c1638dd,8f954086,49aeb371,516bdf3c,509efc5b,47cdd7e7,d46c7848,8a87aaf4,f606b91c,5add0c25,efc12c03,2a28b1e3,2190999,286ba9ff)\n,S(c7704954,a319bd4a,e5a08665,3b959ba0,81eecd7f,f15681af,e6bf3db,c36b6a62,373543e8,24784ba8,3f53b9c6,189ccc4b,e508f600,b15c7378,36e3b3ca,516d0fe7)\n,S(2b4f27fe,41533a9d,d807da70,7102c1ee,d6e92c8d,9e43958,8fedc6d0,39b19cda,98ba8310,ecd7cb1,c11fadd4,a92f4c30,49ba2180,24015d6b,89e2ad9,f81fb424)\n,S(e7d4171,b3dc34d,2600c581,d6931f97,2c920c81,3d7c3db5,4d306c8a,5d4c0e5a,b29581ba,9a825387,99fa97ef,b5a6c4a3,3e75b71,d1cd51f7,5b6144f2,4a9a409a)\n,S(6203022c,18f43577,5270043,56a2717f,2face761,e806e84b,2b5660d5,f1c5d52e,18a52f25,5d0a4d75,275fe97,3542b97e,212efd6,aa8864eb,6c80865,136a720d)\n,S(bd81c7a2,8c1c80db,a0e327fe,3b0fccca,48987679,791e6630,e81c004,92e43b2b,ca50a84e,a14bbc64,9e0831f0,7f185536,416064ac,e93a8678,db1e2347,803871c0)\n,S(9bc43e1a,d3c1390f,cd1385cd,603a6e0d,b875eb4e,6f3a554a,626a9b4,fc4bc29a,857a58bf,9aa54bb5,7acd8b34,b79717b2,64ea39bd,d8f4a22e,6b12e6a6,e0cb2cd4)\n,S(3055a68d,194de3c7,9ef0117c,b98bfaa1,5e5bfb71,c656f908,2c8769cc,a7e40f33,183f9ea,dfebe1c4,bf0218cf,b6aba6bc,acbd8c72,a7fe086c,1c9233e4,340d1d10)\n,S(4adbf984,ad1fd188,c9271072,43583b80,2cec1231,7d8bbe1b,71079fbb,734b08ac,14527188,9560ceff,3d950766,8e3f2d0b,2192ceb6,f79f5954,7094d5e3,d7ec04e6)\n,S(38f72dcc,27e041d9,c7bae397,9cf16d22,83fc6a36,aa074b0c,d00651d1,a56487cc,5238c97c,33a106e4,1370d6f2,c0b6ffc6,49610444,2e51988d,f7160c3a,933dc0bf)\n,S(de55bd8a,7bdffde0,a1413828,ac59ff2a,4560647,47c27813,322188c6,655be2d3,477861b0,df5b25f3,75f9d097,97b0afb7,67bf9d51,b996d51c,e65d3bb5,42d9da)\n,S(c617bcfd,c47e02b8,918edf98,666fe912,e19340ea,6c567893,8739b89e,5e3bcc66,b90ba117,357e7683,2ae0f4e8,644cfc49,a6e04672,b5b08d47,3b826349,65117072)\n,S(4655c196,1b5188c9,4b6402f1,e92b3033,c455f4db,ecadb672,4adab3bb,f1c84758,3ceecc93,a2575f4d,fb202df4,f4bc05ea,714600c0,28389b5c,f2c1c6dd,e6fbc4a0)\n,S(fca90f40,dc05e5ad,3693c503,fab43da0,110df431,9c1dc4c9,e5f86e8d,d7726a45,f5822f9b,be3e6604,1af37aeb,19a70a6e,7478edec,68c8e1c3,e6cc86fc,5f5771ca)\n,S(3176cc4a,dcb28258,779e88d7,f90d3b3e,a31cbe05,78c7cafb,93ff151b,d27f61e9,3863f2cc,148a0a43,c94fe7bb,afb5ab5b,6a18ce44,56cd06aa,c340c231,42cc0135)\n,S(63269f73,d124210a,d070db15,14f82cc5,51d9c19c,d31a54e0,b811e650,ebb2ddc4,bf8ec7dd,8a787a42,4a74114e,5088c387,38246bc,3f6aa188,e300f0db,d85cd0ac)\n,S(679a1d32,8d0f53b6,1ae7f544,541326a8,f07e749,34dd2708,dee3ce54,632003d0,83ca1348,8f21eca3,11be341d,5f6ee9a6,c9b3eb55,c9a3485c,349018a,725c350f)\n,S(69a27d79,29982c84,d3948568,a54d8933,f7172f9d,e80276fb,846cf399,e0b38b28,f411d207,cb0f0bb8,574b16a1,22f39bd7,69c8b7f5,ac2db4f3,a02163e4,3bb26168)\n,S(298d5057,1af5042,cbff2171,6029cef2,abfdabb9,cafebc7f,9dd56c8f,6773ee4d,f4343e71,d271844e,412e62c4,bf6dc36f,4271bda7,9ccfa220,75e3c055,aa97e9e1)\n,S(3f2983da,46d1f101,8f8eb984,5bcf3930,e26f66e4,544f63b1,f8f8b979,200c4653,4973a914,c4ad33b1,36d57e6,b326d380,9b2c38bc,79d81b53,b26c5995,9d71db0)\n,S(f836fd3e,30ceb88d,942d64b2,a1d2a6f9,54412ea1,ef6a3b13,59faa8bf,7e3538dd,720a3081,53476b5a,709fd29c,158b7720,c8161ee3,6e6aba3,b28e0282,cf7f9367)\n,S(dd72eb9b,911e38a2,63bc8ee4,fe991fe9,295ed522,1eef930,b3ae2df2,ef583a,2a0da5a5,688bf7f9,79285d9b,360b53b2,398e86b1,43f10b86,83cb40c9,40c1b2ef)\n,S(551e2650,46ab255c,c427bd81,8258b7f3,7cef92a4,496119be,283f033,4968a619,317c33d2,4cd8f35b,9b86a5ec,d1582a6e,e5ca16aa,3c6ea23b,2007a370,e7bc4f30)\n,S(6683de92,131de3d0,ecb19a30,47825591,ab28cb61,5c852a90,fbd3ad78,5336c650,49eea58e,7fd95523,f8a9556e,c46fa0e4,b3c3b2c2,8e5d9e4,d636d089,282225f8)\n,S(b5b3b1e2,84a6ea65,e0a9b146,e8f895e9,ca99ef3d,31a4bac7,bea49c89,3cf97805,a1720a94,f333e296,f2b91437,e19500be,3cf16cc3,547e9667,ffa4ee88,e5b6fe0d)\n,S(a5019773,7c337684,9709a232,9718d463,ccdde43a,55350d10,11a2401f,9bcbf466,9cc069e,ffefc5dd,e8fa5e09,b6b751eb,c51fff8c,fbf3c27e,12efad87,a9d429e2)\n,S(9ec3498f,eb2bd861,42841b66,3b1c58b2,e5cb7224,88e2f849,e1236b63,ec1588fb,e00c91a5,e14b97f0,362719bf,2150dfed,e517e585,a807333b,a000652f,c1f5f12)\n,S(e10b6cb4,adc13185,750b446b,ab926667,581f97bc,5aaf04b1,f4731abe,f3c5b6b2,53a51213,7db20477,f3a87bba,5b65c01d,d5520b42,f2660ed3,c1f5fdc8,35e2b9c3)\n,S(b754a967,e36ea7c7,98c93691,e02b6043,60ace927,13b18d0d,3ff61ce1,dd3ae314,8a9a3963,9aa7ee59,a42f8d5f,bab01e50,d83ee029,933cf59b,e12b82a1,5473d849)\n,S(5fefcb61,c10cbf3e,6f8a51e,6bea569d,7999a275,6340ac8d,489183ff,32efa869,d81b3093,cbc4835c,1d88c093,28c20541,dfe49950,9b349207,15bbe1bf,4e881e83)\n,S(fe51a3bb,4ac97e1,96009400,b27c8995,f0ed6f0a,b29b9184,70aa442f,27d2d848,8568fce0,a4c39e44,f2b8aaf,59f0b183,d306254f,83cbd6,ec5fd568,c9116a58)\n,S(6a3e4629,9fccfedb,c58d5d38,aeb2a420,391df798,e447558d,7b591466,fab7dee3,1bed8fba,7bb15d9d,d42e7b5a,3ab1d9e6,89873eb9,e3161a91,aec3ee9b,22a5e548)\n,S(adfdbcb8,3c40d4de,f7d62d97,e16bd32,33db304d,392492ee,7457ffc8,97450c37,7b082bdc,163549ec,2a8b588c,4156ac23,8fde7819,2e1cc195,6be85b87,f4138e0e)\n,S(96850fcc,9c202c54,83654c27,2d17011,509ed7dc,6ecc6cb9,f06c3dd5,113bf61,10404432,7f966c49,af0c05da,c7ec18b5,b9fcc455,a01c3b6c,88b8b0,d281aaf7)\n,S(2ae21197,8f78ca14,d88151ca,804379a7,1703f514,166f3ac4,f09409b5,5c458bbe,4de74cd9,576035fd,451c7dde,387961ce,2328e327,fa0312c8,6cbc9dc4,19ecf7b1)\n,S(edc18742,e1b5c996,2661a332,cd62c426,7e5816e3,c52746cf,b79eac61,1a987e57,80003b3f,c63309bf,3f9d484f,ebabe579,29ba9032,30311bc0,2c021a34,5b4fe5e)\n,S(7802aa2a,5fa0f0ae,29a90885,c8b94368,38b35d49,843765aa,1d6a640c,fe43a244,c7f329f,e63239a8,407297e0,416c49bb,7e3dda11,85baa5dd,7f5f7167,9192a803)\n,S(fb774579,b124475a,c36ede71,2e3fc5aa,c2173de8,35e72386,bf67bf7f,992335cf,c0e66b51,63c17b7a,e43ebf0e,31a8d641,b6f413a6,b763ac01,cdfcbcc0,47a82c94)\n,S(d81a3d8a,43abae9e,32f94881,fe9c1200,695a9c24,a31b6982,51e21b3,fcbc2852,630dd811,e8a8cb6d,7bf51de7,e0a98db5,a693e3a3,c9064dbf,2ccf6bf2,dd12673f)\n,S(519fcfd4,97cf068b,804da0c7,e2268cda,7cb2eda0,4be5249f,9bf776b7,c7324cf0,bec6f4cd,198ab3eb,be691646,6e44ab9f,a357c8ec,3bca391d,c20e6ffc,9562fdb9)\n,S(cc4ad3e4,8fd66073,5e193853,e0f9b1c2,3e31b284,e2770441,24f9296f,868ef592,88af158d,8583c474,7d5520ac,67b03c75,9b12151e,db25af68,996263ad,d783c27b)\n,S(add950ae,6f5186a5,98b40cf9,64ded6ea,c06a57a1,4b85de33,8f709034,78d24117,c59ca4bd,2d69285c,debd6853,a0bec744,111f6dfc,7004d65b,c047bff4,a3affa7d)\n,S(dc071b45,43097de7,12bc8173,cb358af,ef0437c6,7c4927dd,d0bc3f6d,bab383e4,793912a9,899b304c,173b2adf,c187dfbf,f28fcaa0,fb11b85f,9e410b40,e95ca8ed)\n,S(5dce337e,6db6099d,a9c37da4,a96b7a72,fd97a672,47f6babe,94d79b1a,aec167c7,1b887fba,1f098a43,b6482991,f16ba2a0,eb35bf56,64eb21d5,7549dbd6,4e4377f6)\n,S(516eb6ad,8493a662,6d22ead8,e808982,900a83f4,3e6109e5,ba284cf9,e1f5cfcb,ca350ab3,8085b46f,48d8308c,61d3f947,ef6a8511,bb36fe3c,68d30fef,ece05042)\n,S(f767c150,3b1f2da1,e5b91211,4e917c87,732b3fb8,8c860a3,35af1c7c,f00e5e75,3ecef8c8,cdbe467b,888f64a2,655ddab5,9ec610e,153cd657,95bb473d,a1aaab54)\n,S(f9bbebcf,f792c8c,a7bbc5d8,f177de7a,4185582c,2cc65e75,31f3ac26,73c977f0,290ab4fe,fecb3a26,256f767b,8a19e55f,ac751eaa,acecaf52,b8c99657,49614a85)\n,S(c6bfe1fe,be5c8db1,f55bff42,c123df61,6ec3adbc,c9b08e8e,af477fcf,4d47c45f,c595f882,d6d6a2ff,d832eddc,95679890,41c27101,347ea995,c79ad56c,d641792f)\n,S(56c2d771,808fb4c8,71dcfe6e,5170bb47,c5559521,8b872425,761829e5,e0d3ce1e,6de72ae6,9e03e626,fdca9188,9e721c61,12ec15af,7163629f,5ee0fc9f,540468ba)\n,S(20218b05,ec9f5be5,87a96d8c,3c0cf7d2,da9ecffe,fc604fb5,66a3667,5109d663,2ec1a7c2,c5357e24,1f2ea0aa,7a7321ae,b41bfa3a,88b42e12,e79283bb,ef8f6993)\n,S(3a089269,a04ccd9,5bfdb4f3,3494aff3,519035f4,bb3a4f09,e2afcaff,976be4ee,e5680e25,fb0ba1fe,91693757,b3404b32,bbeba22,640da757,ed91ad85,6842d1a2)\n,S(8f9f2296,a0cd8b53,db0fd0f2,59860496,dfd3e101,b2975a2e,2856523a,f45b3f07,61c15907,2cacdf31,b229015c,d6290d77,8ab3be0a,57785920,a3fb5722,b5c625b5)\n,S(86580be8,695bda97,cd1599b2,6d4b6328,97e2b90,d1ea106c,836f474c,fe88070e,abae68a1,7e19ac58,38a2fe5f,d07dc7ee,2bb220a8,9dba4ac6,166c51ab,b17d7d21)\n,S(fb6ac38a,1e69d589,ecc5b4f0,e57aa1e5,eb1f9458,fb187d04,8c72dd29,72b4d762,d601dd16,bec271f3,16f1d3af,2b82b5cb,e5d1806f,b960014,7fb01301,86ac32c1)\n,S(7c10606b,c54fea81,bf3aec94,72bb09ce,c5bb7d31,b66e27b4,242b8dbe,7ea5f0b0,12215180,d3d65643,76583987,240b445a,2ea522a,3e0250ab,d14d77db,bdf68f54)\n,S(85e6ab94,833593bc,74c7822b,1d9f384a,740a5be6,3b846495,2042b017,2d52a1a6,f5c160d0,68d6f86a,8f651213,8cd28e3e,d6e69fcc,dc75f0f9,81fe5ebe,1fae93a)\n,S(7e1e2d3a,99cd1ba0,51b74ea0,e5471f50,5e626aec,b880ca27,f02113ad,ff51cfe5,413ec82e,e9d4fe37,8c232229,136f1ade,c1eb96ce,c0062997,81f4b009,9dad89bc)\n,S(589640ad,813735f2,ed7a08dd,6931c61d,6a9490ac,729c2bd2,928ebd01,e87aaacd,89d6b10b,8a89fb4b,3679fc33,96c4cd5,7a1e909b,e343ee15,c1a02719,20485429)\n,S(7080cf4f,f3465ce8,fdcdb0ef,3741c19d,91fdd7d4,44118c5d,7b7ad040,5e6e6608,7a3f0da9,5cbc0ba0,b5c6d334,f80db1d8,3033489d,34143d34,7dfad89f,8e2441fe)\n,S(bb660b4c,2d400269,2dd96bd4,d7737c31,91deb03,6553e61c,7d59a876,26917c55,b494ad13,a7560497,6068403,15e8b86f,f150af11,18dc02fa,f5ea3f40,c0983c24)\n,S(73a241ec,7ebf15b2,4408161c,5d8a5c65,3f4f4fb0,8cddae0c,1e2c506d,9f221b27,80534bb4,33a0a56f,78486504,1d480d8f,64bbe192,a2f6f32b,5e1bc175,d463640a)\n,S(fdc1ef51,f08bfdbc,7705741e,6a2b58bf,9e45f202,c3d7ba6f,89a15aaa,78b1fe07,7e9d00dc,dc1e4878,647ac05b,55832540,1684f714,755f4e36,880e5a0e,996c0586)\n,S(204842cb,a0ce5cc1,3ab44736,ea0e33df,a15ab13a,912687bc,6d6733d3,a33618af,afc92205,a6e991cb,fad18741,818a94f2,9e1804dc,2145ba35,896f92ac,c96bd521)\n,S(a03a9c1e,f82c3151,81009567,50486869,a47c4a99,83bad93e,b2bcb60,157ed768,786f9164,fb9c6980,eef3e5ee,d9a43b8b,2158ba2,dcd8663c,a26cf19f,f6090a65)\n,S(5e3b6e5f,6cb41784,6355e3ff,7da813cd,fa18bd42,c54565ba,ee19b15b,dbc00ed2,b9c3a553,42bf2284,fc3b8f9f,88d3e4d9,9d6f358a,c5c8acfd,e340036c,42ee603f)\n,S(19b0960e,82d1280,663dfbd6,efb2746c,abf76476,1029a54b,154385c,a05dbc70,f8b28bbc,440112a9,45f35645,135d041d,33df5ded,92116f31,2d2664f4,e5504773)\n,S(1061e900,7597bafe,74b9b274,ba1a22cc,6f1c2d1d,b6be8d05,9876638,dff3677e,707ac922,dec592ec,44d7b59e,be2518a5,fe2ffff1,4cf4cfa9,8155c781,21444b21)\n,S(c9184c11,60fc7d87,5439b567,69a0e501,cc0e221e,3b155f57,9a71cf1,f3030b85,880b69e3,7c04689f,d6dd30f8,75f23899,8e83e594,9fb1ee30,8c43e982,28327805)\n,S(a35fb304,4dec52cd,8fc5af94,e6c26ba5,c8fa2364,2622af12,d37559ff,4374cf04,1544f375,692a3584,ac7adcb9,a3422dcf,8b360471,85326840,42dd755c,112242fd)\n,S(ba8c03ad,60ffebe8,118efbe8,eb130f6a,1b2c501a,78000a8c,1b204bd1,b90929ca,e95ef729,a3f341e0,faf73211,2f7800ab,65b88d47,ae137722,f11369c6,e3aaafbe)\n,S(d2ba5755,842d8a77,97fba189,f49a010a,fe08495f,5e64bba3,361d1b52,8f30ddb9,da3669b1,cad179f,784bc5f0,c3a55d60,549e72c,390b7d47,7c030bfa,53df7957)\n,S(3e04eb58,7ec988b2,77b1d2b2,880ccb24,d3de1579,54ac994a,86db9ae,6c8703f2,fa412113,e6dc85d9,eeb1d650,3df96fbc,ff3c6089,cc5c207b,b98cdb4f,e728dd9c)\n,S(efe5bb42,4339a49d,3e19aefa,91f466d6,60c9f120,5df91ca1,7a0da3c2,699fe7f6,98c6212f,fb39640f,cea21db2,97cf9fc5,e3576b0a,7cb4408f,f9e3e9d3,245156e9)\n,S(a29442e5,a330336d,eefe6591,5c4e0ea7,bca2dc2d,9816c8a3,2bd66a4,baa0908b,a1bf8829,7320e47c,3b774c13,a6fb9e6,dc5e7789,44666311,2db427a9,dea135e6)\n,S(454bccba,6f7225f6,a91f632d,1c9218b1,48e877ff,8018d371,4da8aa88,f08bb792,da0ded31,2d532b01,60a1106b,202ea0dd,8157753d,a07e0e3e,918958b7,45ec713c)\n,S(3163940,32c39566,cb0631af,a2505404,56573782,e940dfce,d425834c,dcc2dca9,18c561c4,1b15b0d1,a477464c,6f4d668a,67f0895f,a55544dd,8445a8db,cfcc5fc7)\n,S(54b5375f,53f07bf2,f15fced,ffc7132d,5240893a,3bce0a92,bc4fc884,49b07703,31be2b3f,a944251,e52922bd,fa2ea218,f5df11c6,d67226a7,b3f163ee,61abdee7)\n,S(283ce31b,745d067,2bfb9b6a,694da3cc,de9033c4,639e8328,d2b7ee6,58b3bd,f6a948a4,d452bb56,e3dc24e7,6e81d2c9,dc1c7aa,67aab38f,f9d20044,d8c0245a)\n,S(b5e74f53,117ba754,7b12419c,b0494579,48d5f831,624bb3e3,a60167f2,10e99967,5f635754,d635f9aa,a83c22e8,9f383008,3da8331f,4cfd9b5e,10d48280,718dd3e6)\n,S(681e5f32,cfa33183,170dc776,fcd51daf,d587c34b,1cd27134,a856713,cbf83080,c587d8b8,d144e4dd,7b4361d9,b7fcf30a,76f646ef,fbe390e3,8f241a54,7279266a)\n,S(1fba5eb7,722f289f,2521ec17,d05df56d,2f28b221,5ff8c621,b925a5fd,29f1d0c,df1140d9,97ecfd4d,fa7f287e,fcacb66a,34283b63,5b2bb7d1,524dcbe9,eb11f5ba)\n,S(38bff4b0,df378b3c,ed38fc5a,733f1bce,17855b64,cc254f20,31e1300a,6a0d0a77,6d4f065d,f634296e,64c485ee,32537475,f35a5065,e73bfdc2,520dca1c,6606b1be)\n,S(707013c3,59a9264b,be4050d5,27b5798f,779df8a0,77cc95ed,6e08f74e,e57de831,b9f379a0,315386c0,657b8dcc,53cd98ae,582313a7,632e4c3f,da9c9157,14ea422)\n,S(ad94ed2f,70282484,e490abbb,320905ab,fc5b8c91,9de6535a,73da3f63,45642ef5,9dbe8813,a554e1f3,e98011fe,c6545216,fdf4973,6d026bd6,cb8702c2,aac88457)\n,S(47b56de4,e991876a,499ad155,2443785c,fd174f87,58b881f5,4f545584,ff62612e,a140537,5855beb7,7c56117a,5f753777,383d92d2,d4912d9,86bd59a5,7cefdced)\n,S(51bce64e,9291a693,1f24643a,f11f2813,f31f624d,cf336af,3cf7b48,15f431e8,8f743d9,a3012247,ee35d28,4120394f,f40c4c69,d75ae13,a063aaba,ed07e552)\n,S(76287cfe,b52c5a0f,ce98e56b,49b4ebe0,83b80bee,3bc7447,a0cb9542,e7f7a43f,736b7e56,fa5744bb,d39d064a,50d98b07,e9e3399b,dc5847ff,13e33eb6,e2a7a7bc)\n,S(614d739e,ad01010c,3191aaa2,c1b7771a,8dc29bcc,f1c4d55b,181acdc0,df6b8f5e,5ccd4e8f,e8607b76,c8a96c2c,5000464e,5591efdb,aaf07166,4f4db66d,c2f8085)\n,S(c38444c8,ee8c35f2,b339404d,90d53ed0,35cd5889,89663808,3e2d33a,5e4e1bc9,8b4408cd,de5452eb,dc222109,287fa9ab,1d2ffc9a,16b93f44,1f4bfaf6,6ccd29f2)\n,S(8a9c9649,c6016f35,d819bf02,852bfde6,56a1c197,2dbb6539,2391df7a,99c8f349,b2dcd957,be2c19fa,6c4a6030,a4cb500b,1797aa5a,339181af,dc6e974a,d769a8ed)\n,S(a0f5cd1b,e4449709,25d0ea0a,6cd28d75,96292ab4,1d1766bc,ed6b3311,bea04b03,d270b1e9,291b29b0,ce045d92,3e449ce0,c8d7931a,71cf4b8,68af9594,927ff95b)\n,S(a78f2336,87675987,7afbdbaf,28e2590,25c64ddc,a9543a64,709d4c11,1f3a9614,1365fac9,a5d245be,e5245b3a,b1f50d19,de34aa9a,439f5e7e,e241f042,32a6de83)\n,S(3bfd37e3,ae482c5b,92baa6f5,a413a46b,af6cae30,9ee3fb51,4a9fc3e4,b391769,2d930818,34bbb0dc,66e424a0,7778c9cf,d0219c06,4dc7fd66,bdc554f0,396d1c59)\n,S(92cac49a,261d23,e776ea75,7e796d2a,d426f23d,602ece5d,1b41cd71,d13881a2,8c76ec13,8e0f37c8,99a3e587,a8c0c5d8,c7a43ac8,187a35da,c0d8492e,571521c1)\n,S(cf6ede0,ea7dc67,cc370894,1493567b,718944de,7a96dd6b,82940214,b56842a,e2b717d4,e939608b,7ad6128a,53dc8c52,fa070d0,f591842c,a76e8d0f,54627cb7)\n,S(6204c998,ba512945,26ecb92b,bb06e218,968c8c2d,11e0435e,3dd1bf82,fa91e17a,1690a15f,e78365c9,c8fae21e,f0af2a3f,d1ed18c7,9a607939,d12d8add,94cd0ea4)\n,S(a2c4fb48,cc5500e1,35268d13,a6ac2e16,d8ce0707,f2237f12,ef71affd,e4c0aa5d,3809440e,e608c897,cb7e3906,c58123ab,c403f57a,8d59b950,9e5f2d70,3c0cd839)\n,S(d8af7fa1,cc303e4b,c5da36a6,d3b2e309,6acc8ec4,d73224f2,b667873d,eb656f60,9fc7f2bd,5a5533c5,dfb39f9,7045b135,5e14d81b,9edeae5d,dd4ccfff,f0c6de0d)\n,S(3e9a00ad,b873291a,604e6bbd,b05304bd,3770733e,d1daf90a,864d775d,76dea0e7,deb49457,f6d1c4ef,53524e37,f19a8d77,20a5cb9b,321b4630,51f8eeb4,901ded0)\n,S(bef5ae9,30aa620c,9854346a,ac1b2ac9,760ca8d5,ea189368,9de50e5,d3dc3d7f,20d80c42,f7925f59,b0212b9c,7d4041e5,5da98a3,fe373034,c0fdfad6,48dfc48f)\n,S(cd4169fb,cd28d507,6c174308,8f39645a,38215e47,888a435d,5922b490,9155f67f,f9e62ca2,1a5564dd,5a65f274,356c1b68,a170dac6,4b5aa5b9,29dc2f26,35e74674)\n,S(a4b691ed,34cd2624,fdda2504,797d76cd,4bd37b11,4cf3921d,538b6042,ed5a4c28,c65374b1,6781b4c1,15b0ca54,53e3397e,5c045a77,72c72d12,c336c205,d26af55d)\n,S(5e4e916a,4226b788,197cf68f,aa850c0f,c2b3a615,bf9e847d,c9e55dbd,88aa4818,3f3c3ea2,5c7c52e6,5c9991f4,464f4b2f,f3395d05,3eb27280,8d984a31,b798951e)\n,S(dd4782cf,f4d69f72,c951b3ad,50a4c601,f743e6ba,2194d05c,a5f474d5,eba74a7c,97a7bb5e,9854ef7c,5e3dd6ae,8628d8c2,5d3a791,d4db281d,6c7c12c8,20977b99)\n,S(a1530ad5,4ab405ec,ddb94543,2669c07c,281aff41,13e4af0b,cc080991,c1adce36,f3d25221,2732842e,5dddda78,1e2aa5b1,b18550b6,fdbb968a,77444958,4a63e756)\n,S(51924ef7,b438e4f0,614523f,232af64b,e5ee0d32,ad8e5323,4a2d76ca,9e64719e,87c115a8,11f94db5,6736e82b,8b644bfb,fdfe6e55,8ead8176,26858c77,128a8095)\n,S(82cfee68,e137d874,107625d4,be20a9d5,6ac9055c,6b97563,a3bd5568,53fada6e,dd49aa46,c4f5c51c,72a804d7,6dee7a72,a363e978,502a5cc0,6ff67987,30733b7a)\n,S(a3738876,f7f1ef44,5a1346b,36c7da6,e02b70fd,2cc3bf30,a4efd7e5,5f2e623a,6596f52b,e1ea52b2,be0de46e,5480331a,b1204d36,581b2edf,368d9611,ea04a21a)\n,S(ae4ca6f7,aec818d7,2b624fd6,b2ccf24a,8d8382b3,18b0dd7d,d8203658,2980bcbc,6a7ada03,35ad7c57,1e2a29f2,554c8bbb,34815596,1aa995e9,2378c97a,dd8f1ae2)\n,S(be33562b,fa9d762f,9b18d198,4dccb9c8,4d6ac894,2d8506b1,400f7dfa,89d12732,b666efb8,77c666a7,35336cc2,14e874a5,c4f5c956,903048fe,473d2e6e,9475d442)\n,S(9d7da6d9,815b3db8,5303b288,8a60ff6b,f382891f,5c45ecf,37cb92da,37c74446,46c29073,72ba5be0,e61f6d73,4b413d44,df3d2c0d,89fcc1ac,5402b68d,755b12a8)\n,S(39233d31,e513c2bc,c0602849,8bb7b3be,b5981fb,7c99a366,b62a9df4,3b0d4d3f,fc27857c,92e0ea4f,4d8ac3e1,c61fa774,1ec57d4b,a9affc81,f97e384d,b916dfd8)\n,S(5be2d788,db90e83b,58d02dd,7b58f41a,547e6f33,a82d84b4,3f7e5143,db7768be,b8cf3a8,6b2dfa33,e71396f2,e84fb6cf,d585ef6b,9a264875,b9049f2f,6fde1026)\n,S(3ff59de8,191fa14c,113600c2,5700479e,7c53a0be,3827f5d6,82f7861e,88f162ac,25d5985,6ab0b6e7,beff5f60,c279a11f,8ae4efb,5e79a4df,d815cc32,2dc77ba2)\n,S(81dc9c30,ed221920,98ad9475,da00f8d8,b61a18a4,e6305b58,75f75bc1,719a256f,2970745e,5c44cb27,a6f8f9c9,869a25f8,9cccf024,4d40ffc2,ca678d28,f54682a5)\n,S(ba3e1e16,579c4099,1576121b,230d4f4a,ea386943,bb7a8d24,f765a3e4,9b70e9da,a1eeb808,653cfa67,8a9d8d9c,7d30e7b1,54eb0de6,55abaabd,90f82236,32c72f4e)\n,S(35ffe81,50faaee1,141f52a5,1b7d1e69,fa66d194,3b96f04c,a0589c48,83f854f8,d66a1822,e83f6dd3,fcca09b8,df1105c0,b4ad3163,6070dc9,b7dd08a8,c9366fad)\n,S(398ebc22,1435f972,1c214c0a,e38b9817,8b50d7e3,e5724f68,5b950aad,60763a06,c2df549d,eb2eeab,fccd4da7,fc2c8ce9,15551b87,14903011,6825b804,80811f46)\n,S(2ba27f33,e7d0a75d,1d18511a,84e5ce1e,9ca89d2a,a44fda0d,6cfa1389,ca89e96,5023684b,832375c3,8f39946c,c91ca114,45c2ac54,fcc12f19,c6bb662b,997cf4a7)\n,S(4257063e,7ec51f92,4ecd485,653182eb,2b54973e,f1ff0144,65cd151e,f9e829c2,47351f41,16dd0515,11c9ab35,b69abd64,919f8b5a,812ad5d7,47c5462b,55232c1c)\n,S(77e737c1,b5b3ca56,94218582,d2e56519,80da8195,88ee46eb,e3ef172d,9b4063a8,f7cb5c5,e66798ad,37c8d4f1,1cb912e3,651ae45c,4d7b07b5,e0e20c2,89d1587a)\n,S(dfcbb64d,71018c1f,bdef98b8,2a4cb72d,ef027d43,47b5e8c4,4a7eec7a,34cdaa4f,dfc0cdbc,c7207588,8af379e8,751c4f09,bc2f4e58,2dca9a92,e06b0c5d,97972a23)\n,S(8eb686d0,a7871e8e,32ac5256,746d7189,b39855e2,2a52ce78,ce6962ad,d355ae8a,ea8b3611,fec52837,fd0afe42,4c22c5fb,89b79675,6e8a6a5e,d71e331c,6ccc30da)\n,S(d17d8713,ebaf2dd5,316703ff,8c4c20fe,ee56522d,bea7a987,85a96b1d,36cc3e54,ea70b7e8,6d7862ca,9d8a7a19,bf8941d0,e9fdb872,4e46f8b5,6821d85b,ddc10b54)\n,S(7d4c77e6,ae050a1c,856d28e9,c14eeeda,249c471f,82cd6cfa,3ec037e2,30b3ba89,c5a07653,f5fbdf93,4b180f39,327d102d,900ad68c,3da1a7bc,ea773fe9,6265fe60)\n,S(96381109,451e5e68,6d61d51b,3b250bcc,3721dced,de39e88,f4f50c1b,4d7ebcab,9498f419,b088ca54,7f17642b,dd6f0fe6,9f06514,a7228394,7f15d165,64801b64)\n,S(7400b550,54353d73,7b2da8f2,f8f4e953,85f44e83,fda3cd20,8afaf90a,978c2ba7,9933aca3,ce503677,e2129a04,cdb1d5ca,e36bed1d,275048be,6b18aae7,fd909771)\n,S(3d7b0c11,fff7bfd2,71ef5963,9f12ebd8,d1de3bc3,93b51be2,a011e4ba,66ff59f,b6397431,7f7ca0e5,ce1eb57d,8a886144,8bddb12f,75469789,b791c4cf,32404b9d)\n,S(4944d9ec,7ebf7f14,e6312545,5c8dd996,45d128dd,fde3743c,5cd6f4cf,65c46328,f0655193,13baaec1,329cd408,c9d1f3d3,5c2f49d9,126c9d1f,5bf271bf,2c589996)\n,S(9960432b,4764b1d0,f8607d6d,8e08b355,f37b9933,69bacb51,89ce46d2,79bdecf1,304ebb4c,921d2fa,29200ea9,ec214adf,f7e1a9f8,debab865,78fac56b,7160ebd)\n,S(313f535b,63585658,fc3409cc,726b5ded,9196cc59,6331681d,9ca84aa3,bb3de4d6,e511a48a,a55fe0eb,e5f23bcf,d01ff4f1,59b049ff,8c999fb3,dd64092f,c56c9716)\n,S(85c4586f,8cd36dc0,db9b9006,ef4f74ec,c99478d6,5c011bcb,3ccf034c,548ed7b2,cd6953c0,45c5d6c,dc632592,3f9b0070,144c8c5a,67639f63,a75b4d10,5b434229)\n,S(968bc6d2,a7fc359d,1edb668d,b7381eeb,d489b20d,b64d651d,21d706f9,94671af8,fb0ad6a3,723d707c,c1b2f330,4e59517e,de88bcfc,b52f3ce,d0bdb7c,f0725186)\n,S(2325aceb,3722e77e,e6cc7221,56ec0e87,26d343cd,cff6a420,e58c563,bf28985d,601a7f53,dd295978,f2a59683,6f3e9eec,19b9c8fd,e81bba5a,21acc8ff,878d39e1)\n,S(8c6e76ab,b2313bea,dc0667f9,9aaf32a6,4b1c9335,87c31dff,5407fdd,67acd2e4,27e3b850,d422df3a,c93b19c4,229b390e,3d7bb92e,340daa46,b3f5112d,1e50c29f)\n,S(e31fee31,34468d3e,4d6b2c72,8d538a14,352e7a8,8b9837af,9d8d4230,5e36748f,89b096e1,2d1948f8,937974f6,b9a101e2,37f9df3e,280d4139,e419a1b2,6d0309be)\n,S(596b586e,849404b4,7c742fdd,7e5a3398,da748ab0,67ae2981,215c17d4,b0d306c6,e96c5cc5,912cc711,5e4e8f05,edadf219,2ac27760,2b2ce791,ff6e18f8,62a0a16b)\n,S(200cc167,5cf500cb,a199c3b7,1195270f,d453d5a3,8313f317,71452486,15aa1c02,780aacc8,7e34429c,6445c133,49240371,1905e24e,c17de4b3,e7b79cf5,5320ce61)\n,S(7e4d5432,e10e1fcf,79148f8,77a4f247,70f0e96f,81331767,dfb5e9dd,2ad2025f,35f5dbb2,6ee82837,f37f5fd7,d417982d,fa58f0ca,13e3136e,ec0b5251,63aa432a)\n,S(c1ed7508,95c97e6e,7a78f800,b6eb10c0,ff21f879,352870e5,776bb7bd,9c0237b7,90723a06,8dc0aa89,9c31e89f,64ffec3d,a38e8095,97209bb1,d8b1418f,eb418fb9)\n,S(e5fd4ae8,a53e809f,83d239b2,a15d8dd2,9948ddae,6956d8de,fc7ce730,b2104770,6a4dda9c,1cbb2197,208e8ebd,35f2ddbb,50c7bf5,df4c112a,de02f0de,f71c4fa2)\n,S(3ce75f2,4b33bd88,7ab72cdb,42f9ecef,e3534d15,f6733f2c,a766eac1,da51f30d,9eda315b,51ddf6e2,62ce9b5d,828af559,a43eb48c,d3dc9362,13bf04cb,1a838ed7)\n,S(98c04c4f,33a81cd4,e498d8ce,77edf598,527fb9a8,8e19dd34,ad8cef3b,8813391c,fd2bcd67,f853f812,f4371c46,30560957,acb4843a,8ff21949,483f0617,ff8bd3a7)\n,S(50e9c88,2906cb06,cbce62f8,413ce43d,f3d2dd28,6e4141b1,fc8a079,a87bbf3,43c713b,b05f19cc,685eefb2,ba04474a,479a615a,2f3c8a9c,e1c6243c,d82fa3fb)\n,S(5d41ba17,458bde3b,64faa66,3f21b76c,71bf6564,2a73e3a2,eeb8a831,43adf2d1,17effc54,b3082159,2b39e22b,7ab058f,7f64fa7,68763510,87cc445f,57b6cec5)\n,S(4e332cbf,2a02593b,6e83cb8e,1d92e076,6b34cc60,646fe3e7,89d38f9d,24d5b077,50fa745c,3ab90300,95b69985,99e391e1,744ad03d,decd1955,c8b2a859,e79e1f95)\n,S(1bbf629d,27ee825b,c357455e,43410507,c83cd47c,dddb53f8,34716ebb,35a2dae9,850908c1,e99753f3,4f40070e,c0bd85e5,8fb72f69,601d3709,71ffa894,3de9bb75)\n,S(a9149aef,f9dbd62a,ad0cb3f5,debdcb30,23aece9b,dc79db8a,a25f5b01,b5cde650,a7bb4b46,e6db111f,468a16d0,9df686d6,ae3c148c,61d99a79,918f0bf6,b4c327bd)\n,S(801009ee,185d642,19de5b40,6b21dacb,b98ffcdd,75f8037f,fc5e1721,fdb72a71,e8216609,57c7ad6c,1dd36f70,645c75f1,38283905,898650f2,daf2e5af,37e26441)\n,S(c070e99a,e466f67a,b234584,66f132ec,96c6b639,3900468a,b7368a86,c0ba6770,883fabdf,358d4f56,8a56f77e,3b291fff,be6f8fcf,9c0f0171,a1544905,50769362)\n,S(6be89639,cf612761,78f549a9,ed0af9a1,8e028c53,1dff79da,71c5ff1f,54109f4a,777aed7d,dd379131,26a92f38,ff9970c4,ff2dd6f1,6d766e0d,8215fdb3,9604cf14)\n,S(d1fd31d4,1ce71e4a,2052e79,6dbb1a87,10094505,2b9d9009,2195afc5,9624ce8c,f357abd3,78a8029d,eaa796d9,1860e5e5,36d5f2aa,ea2bda2e,5b510949,253fded1)\n,S(1c85382d,66fef14b,3cde617c,a426996,614c328a,ead99033,7aed469b,8f169d9e,58c5af1c,b236e6a8,4f58702a,b727d9a5,e2406a4d,fdbf9113,a8f895ef,78a71f9)\n,S(2d8fa9ed,d5fd67b7,42e5c2d5,2c128ad7,eec32cb7,43cba12e,272edfd9,4f36b5ea,71b15f39,37eb2a09,f9533af4,bc964c32,23145340,f780731f,aa9ad1d,8f2cd37d)\n,S(4f512379,d9f6c596,700d0a15,950ddbde,40ceb1c6,87030c95,4c538122,dfdbafb4,54de9b05,f864df5e,ba861980,c7dd8567,4b320afb,e0381674,c7f7c083,4248c05b)\n,S(9a5f91ba,48562c21,58e60949,6d43eca3,2c69995c,ed93e834,168d22c,d9e7cd1c,9f88a3ec,c668eca2,e01b1126,6acf9c51,29bfa33e,e12f7638,2d40d2a9,b722b86b)\n,S(dda30502,d417fae4,c4ccc6b6,e833b75d,d84d54fe,d58fcf0,6577dd8,52f9f610,fbb88dda,2e74641e,6d45468d,102e2a42,7f4c57a,6c7fab0c,5d4dbfc1,155469a1)\n,S(8d2e9e7c,5586141d,848e50cc,631ce5f4,600dfb1,618d65e8,e88da5e3,5b26e117,989c39ec,ffd67c54,d55ab4fd,85c2a556,bb72fabc,f763c9a9,e33a1ed0,251aa86)\n,S(726ce076,e6b63d6c,b071cee1,c3d1da27,10c911cd,e3d59bbf,a27a7ca9,641ee995,4e41baa0,c91ff8d3,4d2d01ac,d8ab5d36,6ea5e81,d489595,1c49622e,610af9c1)\n,S(debc91fe,183503d3,fbac0dc2,c9e95062,c0d42971,ed2e97aa,27dbacd9,bea43a1a,13593715,a6fece9a,f33b2ab8,d5f26e6,6dfdf3c8,ff688100,d497a333,be2d2f11)\n,S(c5394335,77914ab8,e7039e8c,472ff2d7,237c794e,d6b24f41,c585e910,f0fd4b28,2805359b,628a9c4e,7b304112,80aa2a0d,23c26cf6,9a47310d,1fc6fc54,cd26087b)\n,S(9a2892fd,33c300b1,802bf1fb,e8a8faec,72b81810,4bee4e1c,c998bc79,a05f29b0,997f123b,c2fa0136,522ebc53,a5ce37cc,5538705d,f5fa8beb,b37f72ff,45186e33)\n,S(d4a22cac,f224fbe,7ed7fe42,7e0bf180,1503bbbf,d73de79f,4c558104,b39a351a,8268fe97,30622e09,2a513349,548e346a,23260311,a82e860,341af6b8,3ace752b)\n,S(4a4cf3ff,15adbe1d,8d414963,b0709fb9,11d4d2bb,877dc03c,77594fb,9cc11659,57c84583,36f1952a,62441810,ea64ad3,5109a30b,c39ff36f,c2dedd60,d1ced874)\n,S(58c0eced,b580d530,98c836cf,42ca2648,e85e0b27,871caf44,1f69bf0c,158e1539,eaf79c49,1e1dbc94,4e63d36f,702cd1aa,92e54a09,fa11ffd7,4121783e,e842467e)\n,S(b0fbd0e8,a60c7e89,38a154f3,fe586a33,26132302,7f4e416f,634cc9bf,724892bb,27ba767d,6757f40d,b54fcb50,104998ba,6dd83f93,137c3d07,9a0330c7,82a5d3c3)\n,S(a94ae12a,26b0135a,125fecf3,e4ef1844,ee90c2f7,84cb4081,8c16d8c2,d992f0d3,a37447ba,665e7595,c7816a6f,6bba3d66,e046fe36,8877c95,bbc8a760,218e2050)\n,S(8cbdb09b,3eb74fae,32b6c484,4f9004dc,c540e240,7305aeeb,9adbe308,8cdcbeb5,2b863a2,91f6efd2,ff07b14c,4e5a169,912df745,1b49e3b8,10e72cf4,34c932fe)\n,S(3f8cfac3,b70eebe1,cc6fb89e,d508abd6,ab3131c,40d37afc,f8f39c87,34cdbac8,dbb02111,846ef25d,794b303d,b48964b5,a68b5287,b443d321,f0c493a1,2d58b65e)\n,S(b61604e0,cea3e79c,12fe9a4e,1816630b,31fcaf4d,b3ac84b9,547da60,df15b25b,1aaf2bad,9ea0fa5b,56665b41,ba1264a4,317d5388,9018d92c,ea2e9d98,29b86801)\n,S(eb0e7410,3c6ab38e,1c26630a,7fbd68b6,fa51bda3,64d1ca3f,7c86ef0,451327d7,dfa05017,57c4d3c1,9541c9c7,d9fb7438,45cdaacc,2ee377d4,4c36817a,e0e82e6d)\n,S(636fc503,be51e64c,8dad2812,6762c04b,1fcfdd7e,4b25544f,4bcd0bf6,9556b7ae,57b83b0f,5104149,7f3b6735,a8b7d886,b633c8dd,5052d1e6,9848703a,313f4cd9)\n,S(2fcc70ec,4d42235b,c6afc2bd,1d2de19c,5ba9dc65,4ea3e288,c15c7358,e52ab330,6a356018,2bfa1e22,db64cbbf,cfcdb695,35bde8e8,2519d069,39577e65,256a30ce)\n,S(115006c3,8d38b8bf,db8969eb,d6bdfa95,83be81e5,bd5bc7d0,1cd10e22,7ea94b54,6043ad02,16eb3fba,9af39e83,f6e87802,3fac023a,73252780,2505a1d4,2080e08a)\n,S(17d565a,15ba1c29,60ca2da8,2fe54d01,3756a986,bedc19a5,15b653f2,8db3aaf1,917bb9dd,42040b3e,4b8b05aa,b9d31252,7a633819,33534c35,f274ad7a,9bc7399c)\n,S(dcc2489,88501c43,b8598f7,a3e5bca9,d2af8f8a,b482f30e,2374c6d,6b221ef2,a859757d,d5c6ec52,b1f102a6,ef00decd,cd14cab5,99f1eb0a,57864646,4f652e72)\n,S(a68b2b9f,4e9430b7,cdd919db,6e808a7f,ae2cf9c3,d43cba03,d833fa8f,351f0b0f,e34b8a32,d3ad0923,8e95614d,92778021,7f45b14d,f2f9cf66,d6525bc5,94786526)\n,S(2f954e5a,938e1198,5d2d11e9,ead59539,fe7e2f17,4702d3c2,3190829f,8d0e9462,b2f0d379,fa8b7d40,ba2fecc8,46a393b1,f6aaa6bf,9f89ac61,e55ab1e7,bb16dd5)\n,S(223d3d13,6bca94fd,9b3fcae8,6bb2ddeb,3cc33c8d,3ccff556,fa93938c,c27ffe4f,87e19106,e317187c,c256f7dd,83d6219b,27f6cd8a,53bb4ec0,9c74ca58,51512915)\n,S(5591d8e8,291161b6,43df3a3e,9b4f495c,b614432b,a0f3aabf,517834ad,9e8f7b2e,2c8d6a35,f6267e52,d9bd454e,bba4719d,30b3fe7e,c40a1416,673ef594,e6d07c2)\n,S(eb2cfc4a,d15d1a14,870cbaec,b9e9aefb,4141841e,2e4e6252,c8e93751,45f29a29,78810e08,10bfd992,b7b04c79,c7650150,e62f210d,6d35cb95,5bc67215,7052e5ac)\n,S(6112c3f9,9680a818,5e4b1d4c,539cc436,bdcdb47d,2e19f927,d5e3e9,eca3f74b,6e860bdd,723c8bfa,dac8f9d4,1f6ca96,f2579d7c,6a690f35,3b8da52b,98da4403)\n,S(892120d8,d552d8b0,c42c23b,9a0f17c3,b9b32914,d7e31579,7b391ded,a7d58b16,e62523ac,b3c778f2,f913d1f6,4bdcc037,cc4a9496,ccf0cedf,32502316,b5cf7941)\n,S(4758b456,217ad3be,2315583,963044a5,60ca4a49,168461c5,ecbd1e91,1fc4dc0a,99e4255a,4f30973f,57eec6a,1c30ac1b,bb74987b,3c4e7ca,9604878c,d9d83679)\n,S(ab0422a6,9a207a87,97fa0c6f,978479af,a3b95dc7,d962e143,b99e7575,6e5629da,73398d0f,fc9855,ebc280c3,2b8dfced,84af0f70,4994edfa,7a06e2e3,a5823faa)\n,S(1980432a,ccb90b14,30d0b4c3,5829374d,852cc7a6,f0a1b20,ee7ad43e,d545d227,96ae3873,bfbc8ceb,2afd1a0e,9b989bd0,69c919f8,f2e51546,7668da5b,9e8b05c5)\n,S(4288137f,e2dffb3a,ca761cd7,2abbef3e,93b8a015,743d50cb,b716252e,e0e93f17,c02c333e,36c366a6,fbd855f1,4da07672,71fddb04,59e788de,456086dd,aa238825)\n,S(d65fac35,5bc89da,afc4d16,aa73fa4,77e43276,e0db7d3d,52d9281a,d6b6cde2,e6f4c975,a6c5f337,b4500545,603862d3,8e9f07e4,18886b13,5678478,c007383f)\n,S(7029b144,e62dd27a,4fe8b54e,1607936e,beb96784,d1b294c8,43e19978,b98f6ca7,8b10ed66,58056c6e,3a2c90c3,855444f0,9a1af347,c73dd14a,a478f2a6,7140a25c)\n,S(4f2760eb,df969bdd,e80ea87d,a5da0c19,fa343e4e,44715711,50295b43,cf9183b2,43e2c17b,f3f9ef09,fa01fd39,b8f69b69,15d8625d,4daff425,d4629677,83e28167)\n,S(cc996aad,db4196a8,f355f0d2,3b9fa539,b573ce57,f2ee7e52,14372615,c374a5fc,b1c40f87,18782935,c30a9cb6,6be85d11,44284bad,bfff9923,2c09f2dc,a8ef28d)\n,S(c7818ad3,f3e3d905,b2c38e39,85eb7091,cd9b3285,3bdac631,3cf4303c,d54ade42,55574c4e,7bbb850b,14763fb0,fc1443cf,3403a5fd,d1f5f937,8007fbaf,94339eee)\n,S(6cd03584,6fc48ebf,f4344d1f,3ae5d258,9a45dbc9,e779445e,52a75737,2589c4fd,afa85b7d,b165e371,adf67dda,8e4d1fa9,4d811c92,8d2d4723,a44e8cc8,93416e34)\n,S(d652a205,f716b1ae,632b7235,91152314,f5231b92,474dcfd3,bfaebbad,443b2e0a,d2198421,b78240f7,cb82f0d8,5de03d8b,c4646a23,ec166dcb,a458a06e,b93bedcf)\n,S(a807d04d,cd844a1d,f99b3e4f,e3400459,81ff0baf,d34e2d73,a6a052f8,dc52fb54,188a78bb,73939835,3bbe5079,ffbbc718,c385c047,97cfb151,af019e9f,a2e2cd9a)\n,S(1efd2bbc,a5d6ad48,e93acd07,d6cb02b9,b8c3a95e,9f4cede2,24efdc17,cc9eb2d7,f951ef88,1b98c7e6,357e191a,1bb357f6,2a9d2ae,a8af1a05,63eef3,66745b39)\n,S(5bc5e54,d27d3db5,982bcd04,497fe0e3,ea0ff13,7c3bdf66,6ed0b9ac,2395888f,3555bc02,d4f4eb01,661f8b85,7321b36a,5a22d975,2710375,4c1f65f2,82ec3300)\n,S(f600a8d,26b08d0d,e6e2ea80,e8ad2f1e,158cca71,15be6f22,1f5b808f,746a3247,23be5a13,4bc3fa5b,7ef75b2,8e8e11ba,76c753dc,6516caa3,cd5b3ab1,8bca3523)\n,S(fc7e4e0b,2ab2a7a8,cc5712a8,be590135,f5119bc3,6c73f81a,e492bd26,90ccaf7b,4bd612f4,1f274690,6ea862b8,a6dd8929,e4a682b5,aa835cdd,b31c90ab,381151a6)\n,S(51325f3c,fe12d00b,fac67eec,d79b63e5,41641d58,76aa9700,bcd3b3b5,89442655,d6a894ad,7b7ae6e2,db962360,579657ff,982a35e5,91cc3b33,a4437a4b,133ef941)\n,S(2db3ac27,1a55f608,f21bd2d5,717f003a,afee9a6d,b8fefa09,5626e4a,c598aec8,c526bf33,a0c01c60,c1cc9fc9,d66609f5,3c662168,b47cfdd6,e0de0c88,9bf9533e)\n,S(9080772,93deb01b,5eb05b55,47de4321,35fbd436,3f391be5,1e1d205d,d5fa7dcc,fe961eac,17243337,653d318,b5c62159,64dfef84,d3cc3f23,e034c102,5ed7442d)\n,S(32a1ad81,e5a64fc8,2dacc03f,6790cd4f,45557ad,3d3597cc,e2ec37bc,339ed9d6,87abcf68,18010022,7097b63c,a795cec6,79cb55d8,a9076cf3,d1371062,627cb07a)\n,S(f7cba8fa,58689c51,a0f1af76,971d17a9,8c5849d,55b396e9,a3771d17,4d9246f9,f4b0aba9,10d5a9ca,eda4d733,35d5fba2,5309a0c2,fc83072c,ac37b9ec,af58ee45)\n,S(cda6b104,2da900d9,d65b6b7b,c0579a43,fab75f55,ae7046d5,8ee8af82,6329ea81,70c86c0e,acfd7401,5a1171a0,1e3601e1,a8ee20e2,9ac7c0fc,68d6f1d,cd1771e3)\n,S(a261a640,9c5b1ce,9a8f27b0,544ca0bd,a46f3bca,d11b7f2a,c23878f0,f67ee58b,1e26a71d,4c42dae9,b4e9cda8,fd33d725,85da67c3,52594d4,20c6e410,f3fff888)\n,S(bc70c967,fd7f842c,c018e885,d1fb6d34,9435aa3c,682f6884,6b394ba6,e9f4db57,a2b99d3a,837e2de0,c40a0784,7865701,3032efc4,87c47e57,18d84e11,f8bd9468)\n,S(364152f7,5dc43149,4cbfdba3,ffaf234a,c7a26567,1051e026,9c60389a,7077a9c2,ac3ac7d9,f4ec8543,3038ae4e,7ede71d5,3c8fa601,25bcd8ea,e084c32a,546d265)\n,S(52fea4be,d57d5d58,d92f59d8,e4022df9,d82ca42f,a3d89326,cc36dd96,94f3043d,b7e98328,52f98a75,f738f9a3,7a67b39c,5708c608,5b6ab99b,2495428d,8c4feb35)\n,S(34fee910,c8bac880,f973a096,a9ac3ffb,9c32ecc3,d2be3ce6,7b8d6822,863e1a4d,e0f01096,9c9dc446,c78db14b,122e260c,2231f6a0,971d08b2,24355620,689c7a17)\n,S(6af28f0b,f4c9d2e8,192424ec,31f076f7,f815ab0,f476a4bb,4019b3bd,db49c65b,2c55fd2f,bb663b31,1a9aa346,917f6064,17d1e1dd,bca45d3,f1350feb,6ea45248)\n,S(70b6ab66,39e4b41e,644f1b6b,6ac5d36f,a4f0ad81,3baec03b,8bc74f72,4d320e46,ec6409e6,4f4e4fcc,d19ad5f1,96d3cdd,96f7135d,dfcdec95,23780c18,8a913a14)\n,S(ede56f11,4ab975ae,adbeff50,ff7dbbe3,614196a,138600bc,15508481,a065724d,9e7fae4c,11f421ed,26d839dc,61b0684b,71906b63,6efdd73c,2dadfc9,5336ecfc)\n,S(83c34c3c,840a7310,3d819d74,66648e66,5de54af9,f1683efe,6857c3e4,556df8a4,9c238041,562dd6c0,eecd9771,9ce2eed2,90aa8137,f109840f,d31d70a4,c86cd10)\n,S(aa2afc90,89b98,5228cf03,205e87a4,52cbdb45,24d377c6,1020593d,a0c7e200,3443196a,b382ac19,d3d3bc4f,a3161e00,6d812924,fe8a86af,2db5cc27,96be01f4)\n,S(e42ec7dc,4310cc8b,9f2956a0,2fbf71fb,e90eb045,881ee800,e3a75730,4155c520,939ef2cf,a52d91cf,e20324bb,e8da54d9,2d000945,58abe7b6,93c2679c,d625336c)\n,S(bc0bdd24,937c5200,fd78de47,a16ef9f4,181617ab,267fddd3,4a3c5606,32ec2b21,db04a4c,10b521f7,986e0e1d,192b0870,4a028511,205d7ac9,df6d2993,52b63035)\n,S(dc88c9d8,9b43a733,5e310fbb,3f760e29,55c005d5,640df990,6264ebae,adadc8e7,2d6779e4,6f984794,65bfc677,79feb7b7,3fe37b32,cc23d636,25a3c8d4,fc2fc512)\n,S(a7ae0d8a,b0c932c6,2ff0cb02,e05d76ef,5ee3dc50,88c57210,f6f9e349,80111c20,d632abc9,d63162c8,98b9dc94,b321de53,ac8dcc45,69233cdd,1d07da1,92e553a2)\n,S(4620236e,e7bd6eab,db203af7,57da6e64,d631ac9b,a5f03215,592a5acc,5cbe0e97,5df4244f,69ea1e2a,6cf30cdf,4fae66a2,707851bc,7028d8c8,8fa97690,28627c6e)\n,S(804cb84a,3d8bd930,51f50aca,cf932301,5cd35fff,349d8a38,e2bd991f,27d8f671,4b77b812,9ee0f835,96ab2f19,20362128,cdc39552,bbe6d267,bbc9a8e4,70ae8d3f)\n,S(6ea5370f,5382b2f2,b801fcbe,ea463912,b4f6fb4d,e207237,8e71dbbd,b91c2ed2,f5b4f909,d8f3ff08,e92a002,f1959ec8,8b513ee2,d37825b1,a8bbe141,90b2d88d)\n,S(d8b8de1c,4ff575a6,12bb0852,af61c6b3,1ee56403,b81a1f47,69fc7072,a2e22ba6,1e3c4190,d37abf89,896ad827,55c256e5,f23cbdcb,47b05892,8d538df4,e2468c0e)\n,S(66ac1864,4a0bd6e,9c73f3ea,43a00d6c,80d38467,5080a9e,475c8291,edf1b147,2cc60c0f,7db6b776,1503efd,551e1a36,9be98ec6,73dab0bc,a61881cc,4fa1260e)\n,S(47194a2c,4ed223e7,7663cf9,38b5a5ca,f2784435,c375d85b,ef3c5367,3f60e942,b0fde11b,5a64dc13,7bf2738c,75027d57,5808a3ce,abdf7604,5f4484c0,d3d9f920)\n,S(1141c859,9af2d983,88274742,88dd768c,9fdc1b2a,c5f06290,10bd3cf4,2a4c6186,7a431f47,61ed4613,3317555a,578d0f8,5392a0d2,ba98ec64,d6b508d3,eef0226e)\n,S(f905bdd8,e80afe9e,d65da689,bfb8e549,487002d6,16ac651d,4ba300c3,e7496f79,1ec7bf7f,3bfb5045,d461b03b,a7f05067,cd999fc5,f9f4c0fc,a7e25b19,77bfcf72)\n,S(ba54b8e4,fba452ee,23c4faad,b14f0af8,232ea62f,ad47a3e5,573f1fac,f15e9e0,af556ae9,efcabbcd,bbd8e48a,82ac80f3,9c96ed0b,11370b8,da1bd4a0,60f5cda8)\n,S(59d3ead0,561f6e24,30e87f3c,f361a2b4,1494a042,3a775e9,c08a28b4,a26a80a,9b26f47d,50a92229,c28a278d,427c7306,f5f1ba1c,c2d095d9,ac51e18f,a9bc8)\n,S(2a6e5a3f,ab4cc928,d8f2924b,e7e0f3cf,15520a08,eff00f5b,129d9070,ac865d47,55c0350,58727023,86d19196,4609351c,919913de,e93800cb,38b77183,5ca625a5)\n,S(898f50d1,c35bee41,88afe91,842cf659,fff1fb1c,5aaebd84,6828b002,a8907502,b2456e80,c97c2ad0,1ae02e49,6b84c02,fc9bd0f1,4a3c5a79,dafb8f8f,62f3267b)\n,S(d1854ab8,b49bf0cb,1f9d2304,e9ee3cd3,bda5d9a3,ac04fbf9,422c4671,d6af85a,4e2500f,d8818180,5b16a077,53eddf34,d7bdeb02,17df7fab,d0afebe9,47155c20)\n,S(861fb88a,394db6e1,f03cc787,d968ef7e,4a417df4,2856d303,a3edfc66,feaf4680,a5d7e95a,ab8b0b13,23fff11b,638ce02,68f3c38b,dbc018dd,dc6d2362,a135da6)\n,S(9544f768,b9fa9dfc,3c155d90,b676cf7b,ea526903,39fc111c,b0ccf62d,813403d6,cec4d92f,cbde624f,851ed21,bbf5154b,28d87603,5e302902,53e99670,806e047f)\n,S(f7722192,f80a66be,23cd7b07,89f3a094,311cd40d,3b7149ba,2cb5cca8,d1db68e9,41d0e9f,3243d64e,73e26661,cc851e5,1c11e320,277f7462,d40efe0f,c81b516e)\n,S(876b4c65,1f88729b,dbf9927a,89ea91e5,b6bd8e7c,439f6fc1,be9e07ad,698e14ed,ece2cf81,1cfae9dd,cf787b88,f62f2537,7b573084,86ab84e1,6ad31ddc,f96b49da)\n,S(706af4e4,62249924,88461427,8917899c,721be8f6,3353b127,b7ecb03c,7b70b10,c972d972,c65d200,e695bd29,813deb74,cdcf0ee0,e612f545,aa6506e9,7e58a5f3)\n,S(ce97a218,c9c96262,b5cdde0b,a27e5f4a,4301b75b,f9d17dde,f1495b7d,f3863c9d,e9398e1a,20fd1426,88916410,d7af68f1,c12900b2,72b03f55,c5770aca,2a1ef10)\n,S(fb625b9a,92cf831e,886a1f01,c2db3d53,7dae0feb,e9b3d9bc,a8fe6449,d53be895,7f783e74,ba569e04,a29d68f,12cbf223,1fe2a8c2,a651f44c,30d597de,82599a37)\n,S(81ffbf69,7a7d2b8b,51b9098a,8833244a,f126c6f3,b42ddbc4,c6b2c5a5,55f4747d,e2c67357,982eefb7,3213d530,3cdaaa7d,90b4d1de,d0fd4d0a,8b002162,f006f33b)\n,S(6dfc0f66,8c30ab7c,af16d4d6,309ca2ec,679d6b77,be695ba8,c0f31b55,6a0ed0e4,a41ed2b2,d9a0aa74,3182d7a6,20f441e9,36772438,bfddfd90,5aeff87d,b15a563c)\n,S(1c6bf1d1,b953e56a,ba1a9b5b,f63c328,1d5715df,88bcc23f,e77f94c3,3b501b44,c667214d,b4ca1782,19c368b,f7c2ba4a,8f1e74df,91a22d3a,8e336089,e4e4b0ef)\n,S(b69112df,5d999f60,5d863231,9144d2f3,5417b9f0,d1e78ba6,b2afd247,fadef93d,2163cf7a,302886e7,70fafeb,8acaddec,464f115c,89422020,9a034c63,558df4ae)\n,S(bc038732,ac230f91,7c58b8fc,f9ef9229,9737a2cd,8e01687c,da464bde,4976b6e0,3392601,796373,603e1d6f,a7e23385,7a7ae0d9,df638ab3,7191c046,a25682d2)\n,S(96df3295,1047ad4c,6aa4d9ae,e59bb00c,7489c20c,aded01ae,1833ebda,27e32d81,418f6c2d,74ce633c,181189bb,f5d0f066,cbfaa8f1,e6674466,1818c4ef,e2e2034b)\n,S(a3c53227,939e40ab,ec6fcefd,eb6193c1,cb6a65fa,2f3501d2,63cd2fa7,6a304979,4468caa5,498ea6f1,92f29ade,37a2f667,f46798,dc600de8,cafa0ed6,dbc967e4)\n,S(93fd8207,3dfd6d6d,6b85f1b3,1e172a61,7a0c7d46,b91d5a92,601af0ad,2545eb2b,601beac1,9a8a6a41,1bfca863,6acfebb3,9611559b,20b8a866,88397d47,d563a847)\n,S(ba7d3bef,2e2c63f1,f9acef,2468ad8d,a5bc0d9e,b45e4a2b,ee87a0ba,86ca0a9b,ffff9a67,33129e31,10d33ed0,bc5b6bd9,376f29b1,7bbf2e09,7c6efcae,a55114dc)\n,S(e0d955c0,2a4f9c35,97597258,2964d7a4,218898fa,97ef3011,1904290e,36157a8,176fdf9e,7d420bb9,a0782f0f,8707789,b28cbc69,d5a6797b,aa2bb985,1c617f0)\n,S(16b2c140,8320cb93,112da689,c690d6ab,6cd226fd,e1752dcd,a444750,bff81ac9,2a2face3,dafd3932,f2617488,faa17b6e,5025f792,53c65edd,2abc7790,d98bb281)\n,S(2fbb0432,9c823e2f,645d61d9,795a414e,220db4b8,eb4da0c7,fc22bc10,e9f502da,1adf66ef,15eaddfb,abbcda69,c87068ab,cbfe58e,69f58246,a0ab6259,90ebc31d)\n,S(649134da,f42d2579,b6522f2f,404d6456,c178f883,8c9ddccc,e132de4e,67208ebf,4385abfc,3c554bc2,78844648,a9aea5a,e7709b51,fe644e8a,4a756c3b,f09355cb)\n,S(b95544b1,dcb81f9c,e0601c17,29c7fdef,128d62b0,b8993023,dbcedf8b,d3991cd,f871fadc,ffbade32,d51f2d45,4f0726f,206fe760,93c0ab0f,33cc5383,769dcd2a)\n,S(cd403bfc,5034d0c0,a23df5b4,a4b1b096,ace1ea17,288f89f,d063c0ca,5dd668de,c1296131,aa56f46f,49f59760,f3a4bf0e,3fa92e54,a5d8f160,54ee1fd4,26717742)\n,S(a4aaf37,d7f8bdc9,90202074,c9a8f56a,1ad78479,95b4d939,4b6ea478,3c04c581,4cb3b6f2,dc02b61c,fd2594f9,40773d73,1a8cb9cb,388af431,9348d3,af16da34)\n,S(57102ff8,ebdf048e,85edd3c5,2864578e,97478fc7,e6e7b937,6c37d9f8,abf438c4,c84f1d9b,eaec1962,e79e308c,251b2f31,915aef16,90ab5128,8331d8ee,f8161d4f)\n,S(68fe98e9,3c5c5fe1,108c08c5,8fafc701,12424685,c6809774,832b0623,a3c9b6ac,492ac417,fd956b87,ee8078e2,c46f21e3,cb5ea58f,ee871cd4,d6480cf9,c4df273)\n,S(d4bbb6,9ef5e23a,f0932cef,2eea4ab,d97baea2,b0893d43,ec08be40,2a4a5e77,5818e60,9c1dae31,f65e223d,f0cd08c5,9e74884c,2a2dc166,607fa4b0,47c7c98c)\n,S(e9627957,a8eb8b72,7f0d872f,28acc53d,23a5c53f,763f3b5d,68c7e690,5a83192a,5da92e7d,dc291696,d9466d17,d4ca6cca,cab1057,4f5a08d6,6e59ba87,cd0d984f)\n,S(49f21cad,a83bf2eb,7c508ffb,70f9fe84,1cd547f2,df83f207,6dd2382f,1711caf5,1c7d8129,5f834ed8,ac73afc2,132e6eff,2447611a,4fed8114,ca18925f,39f31931)\n,S(58282a9,40f61d53,14d1d110,c18713d4,6c34a8cc,5b0ff64d,fd6d0182,aefa792e,7855e155,d3e0f2d6,52370145,7d83d7dd,2a96ee49,3eac091e,677f0a34,105f6ddd)\n,S(c9c97a32,4b07027a,7b5db6f1,d70bec7d,dc3a14e7,43d492e5,f5569199,23ca118d,f601f40f,894ddfe1,c2b1e99f,7c2032b9,15d600d9,e2ec41e8,747d74c6,9664b56d)\n,S(9e4dc175,8ed67501,86a7bcdd,a11f9273,9bbbe0cc,aa72862b,8d515a21,159e054e,ca11c31f,2bb866a6,be0736aa,19b7e36f,fcf4f4c8,715ebd3b,c9483813,cfc6c0ab)\n,S(fd063789,3ae0030b,cd8c1e5e,8cdfbdda,8e5af1f6,268f552f,7a7f0c6b,8aafe2b5,8c09eb0b,68d744a,20468a8e,4326dc01,f4a35480,df1a0435,b2e21d53,dc8e676)\n,S(37dfdf3b,6e7a7651,9ba81c3e,c1377580,d85360b5,b466ec77,b3f2b272,fd4af04e,cc3137b2,7b732758,d78f3b07,80129e77,43dcd85,ec941727,ea3b4f8e,d0fb7844)\n,S(45ef106a,c8a5e25c,771a2f18,bd2be0c9,a69cb49,de16d8ff,e72a45d4,6c1dbae0,cad6a40d,742e7db7,3f7bd452,e0163490,60e5681b,31918bf4,2ad8b698,220ab158)\n,S(258c52f9,88b9ca25,73cde71,472bf58,99648cdb,c1052d14,be02469c,11fdfca4,4491d88b,26ea5c7c,6a66c9e2,1a5b61fd,d60d0b8,8394cffc,359af9ec,29939dfd)\n,S(bc92a4a7,727c4e36,3d0cddb9,d36f1d9,d4f8ff67,de881c83,afd51193,a9e65217,76ff6a08,b18b4795,61f1c024,d464e9c0,331c22b4,ba3779d7,9dd13122,63aa5120)\n,S(8a19e8c2,58c04834,f11ceccb,c156bbe,23e4e837,fb5ff353,249c12d1,45f27ebd,15fc6c70,bff48ea2,c56caca,2b978fe1,8f50a9cb,85c19f06,5d65e507,e4e92c1a)\n,S(e59b82d1,ab90344d,b113c1a7,a39968bf,e6f3b1a8,c2a44572,d9c911ea,55d70eea,91e33d8c,d58c6a1b,e4df0bc0,12eaa76f,6634d699,814b80,cc22afc8,313b91be)\n,S(f994ee5f,88244cd6,bc417db7,2f941bea,f3456d2,5dacbeb3,330031b0,7371a7d0,9026f86a,ecc299b3,302bf9c0,4dae48f7,d9c2689f,42707d40,51440a05,ad9c62e2)\n,S(776c4c8c,32d1fa50,27b17bc7,9803d121,8000cccd,565d95ff,c1e3a693,7800410f,40ece234,438e7738,6f8201d5,3d3e319,988b64a6,38413803,165f0bad,c8785149)\n,S(393675a5,dd13b001,29caea3d,8bf25730,32c1968a,c5e02620,fb83fae5,b5c9b12e,39e6cfc4,793400ce,ed16ff4c,4b0ebcc3,2e5dc773,4e742dc0,3784a69f,a75a8b00)\n,S(d7cdd294,22edc7b6,2cdde130,e90be1fc,94dcfdf2,7bf38eaa,2f09fa8c,c3401b1e,dcb9cb28,73cd18b,b74ca141,dc79eb46,728bdd9,8bf14302,db5c7065,354fb184)\n,S(bce3f127,2726449e,3f620671,824949d1,9026137a,9885a1b9,9cb67dcf,6e56bc2c,a4240017,ee92dda4,be968f04,ad125ad,1c33c37d,c52a497d,296d5786,e6e76217)\n,S(9df098cd,efe9414a,79adaf44,21e35faf,70080137,74399eb9,738dee97,ff5d6e52,6bf9235f,ef36943c,d0f17bb8,6917d97,f04bf4b4,dbef1baf,3b788eba,51abf15d)\n,S(9958582e,e561dc4a,9a4839a8,292713a0,5d88ab4,72222522,e8dcc94d,b3d43f1d,e0958a14,b63af23e,86f76cba,2259b37a,850008b3,43b5cdc7,8cb4e88d,68c226a)\n,S(3e7fb8ce,7d7b279e,7d292447,c88c048b,dda93379,5233a871,bad933c4,6dfb1f24,4279d08,34108239,2d77a5dd,906ba4be,e36352aa,9385f09d,2296ecad,648806e5)\n,S(1cd05450,f7405a11,cec93ee,7826cf58,97611d69,fcb681c7,1ac0a6a3,75e8ed62,85bbc70,bb52b040,d620a3a0,20b9536e,5759d35c,9931936b,39a203b,af34d0f0)\n,S(5047776,32145a3d,f6f87bd0,1b81032f,93cf99ca,fb4c5e3,c76adbf7,d7c9b367,7badf59,919c7771,89eb97ce,6c71f418,a0e67b23,884cbf7a,1ed60804,57d1d2c3)\n,S(1ea912c9,49b64ba8,309b8d87,ad1498a4,79fd302b,f7f2f0be,636f7a0e,4470e6ea,9b279fdd,b1211de,8414896d,3502ae8d,4acd50e6,cf83ab4d,29086d0,42b7650)\n,S(9b3fa0d3,4b00076b,cb4e0b00,95f03c4b,e1ed329b,d2f4c7ac,8c03028f,21a01628,10117a48,b2a58ef5,2e0d5dcb,cec661f,8cef81d5,50efdf41,26e9527c,27d420de)\n,S(65fef7b8,1d39dc4,b3ac7f7f,5bad14c3,6200d128,d0257e22,ff678fc0,824c94eb,3021e1ee,680c4fc2,77373b9b,36ef276e,f2dcd6ec,7a02b2fe,3259af09,2708b475)\n,S(3e77b23d,af763a55,644c0f2,bc2bef5b,6ef5e1bb,8fdedd46,c5a2917f,7f85f9ac,55b278e9,5bb07879,9c7f0766,a2db2c79,8d4fc785,10fd021b,415b3e4c,2a4f3221)\n,S(2ac4dabf,2fec922b,c4615fba,1cd7d352,f69fbf8a,3232f783,96f8c08b,21de2965,2c33c017,76238bcf,2be6018,7f85a518,6d649425,1eff089f,a92f3eac,219f957f)\n,S(febc8a20,67da04d0,855feac7,42b2cebb,748be0f1,97e31558,68d54285,4d62c66e,aee39287,3d45e63f,f9a9d583,e105a771,e3db346d,a262bbd1,a554a8d2,65d96083)\n,S(a41174b4,a5982751,88c2d10b,d5c5401a,2654202,dc4e38d3,e1c8f689,8606a569,bc6b63b9,9fb5f85e,c6965337,e82b651d,6b589f2f,8d90f67e,3bd087e9,1f732a00)\n,S(122196cf,5d10a3af,3bb97fc6,d12f749a,907c194d,3caf2ae9,3a3a464e,5a5de220,ccf46742,b3c1e213,544e2c7c,59423fdd,674697c5,d405b2b9,46fc6e92,9304e533)\n,S(77bad5cb,104dcc7,e1bbfaa0,8c867761,9f93ec61,e8e3b73e,799b663c,2e1eadb3,889747b,ad8bdebf,48e1214d,df2522ed,4023fd8c,5ef08fea,411e8609,c6faa3cc)\n,S(1e8d4075,8c49ad41,6ad45163,73327e6e,4e3f6c89,695e15d2,f5517ebb,12d4a98b,1d16ccb0,730a619,c9b379a2,ecbc4f83,98d94aa0,d4881cd1,25968160,e3b09f4)\n,S(c87a656b,240241dd,487f4974,afb5b535,880ff2ac,f4a028cf,b1869fa5,fbb6ee42,16f25f3a,6fac9538,5ed74412,fa6a790d,34f694a8,b4c99cb7,6ddaff70,be757beb)\n,S(96b01407,482c6e88,e9769944,cce16a05,669adf16,e7393b80,71fbd9c2,4b55a4eb,b32be280,590384f0,e08d68de,38688018,82b786e2,1b178ca4,578bfffb,94b50223)\n,S(120f68b3,739562e6,81e72fb7,46d08f54,b2afd162,22e1deff,7ebbf884,6dae4af5,7c1eb74f,2b2376f9,477c6729,bd90e14d,2f4da9d,615c8743,dedc1690,300bcc78)\n,S(e64871ec,2789b455,8608be2c,f248fee8,49a4411d,285c0989,b65c5dc4,e6acd157,2980b2d1,4999b0b5,5b79ecfd,45ef91fe,f3dbfae5,d02f2145,84376294,58e10a6b)\n,S(608b1009,b20d3e2c,25324adf,c73e5c86,43daa1e2,53a8d266,eb43863,aa6798ad,826e5a03,ad5c9638,51181c68,ccf0e663,a021e13c,43efc38b,3b4fe2c8,8d0e13df)\n,S(8c978155,8132e45f,60a61435,36f4c1a8,cdc4dc2b,6850b3e5,7c65f841,a1bb152a,ca3b3098,394d81ef,a9083c5,3864f194,1875d63d,9c31b44b,a6ed4137,db7460fc)\n,S(353591a,c73b2482,f8d8e731,ce01106f,10072757,68210627,f80c8f8d,9821bf3e,2b7e3d1a,501ab469,ac6306db,2608eab,70ae8981,9f44bdf9,d4f84c7b,41eb6412)\n,S(eb2dfd88,ec357372,ece70a67,178fce32,3c387b7d,a9fda978,b05dc430,9cd78857,6f2bb6ed,1f5a5521,c441a8cf,9852372e,3dd7aa7f,ca0a1f63,18c47ef1,a24b88e4)\n,S(a41c0ff6,5db1050e,6998f3b0,7eef66dc,abd72ae9,8672c487,b29ff732,992eb279,56fa7b20,5616ff9d,f619d7f8,65210727,bc0786eb,2aacc244,ba951eee,99a99cd4)\n,S(8e748b35,f5bb1500,ca45917e,859df11,615d85ad,861bcea9,41524e57,a2217e92,55413362,e226c6a7,84bf8604,3973bc50,825515a3,96cfe66c,9ef75e3e,fca46df8)\n,S(a83f6007,cce70624,73cde2c7,b7ec7bfe,bc506c27,ccce7708,f35d535c,26dd17e5,ad48ed2d,af217e5c,63397a37,9d50d615,5a1ac614,887a2cbb,26c3b74c,626af268)\n,S(f9ed7a92,7e451624,9380246e,bfd397de,5cf208dd,b47573ab,f118afed,1282d2fa,c1574616,3a6f30f7,80d5d53c,670d380f,3c84407,b4be5324,87bbb5d,c8237b70)\n,S(a2bde78a,175ec7a6,7f917707,8f09f812,c7dff012,46c5255a,f0112672,6c2ea08e,7125698f,e82d4c0b,6d7d2741,9dc503f9,3b5dd62a,a5db9e20,b091323d,c9ca12ec)\n,S(ca8c05c7,9dcb6736,905cc0e9,b8e1690b,6b37da42,e1875a56,e62ea231,bf9899b2,504c51ca,1e19adba,66560c1e,3fba9caa,2751259d,71389996,41d0f19f,1487534c)\n,S(fc106ee,61db13ac,4137ecdd,15018278,61fd4b21,c979f97c,617b019,54eca02b,6da55a28,4fc26638,2afce9c2,cdc5a2c2,971f2cd7,5c92f08e,6bc99651,7bbef3ee)\n,S(2cb21839,f47b1068,5419a321,7ac7846f,504f674b,c2f8f90b,8b9b6a71,6492a8ab,1feb332,ae75044a,f6807feb,965e2fc8,63726433,45a97af,f1081249,f00a5757)\n,S(678c50ee,759c07ff,fca2963e,fba55edb,56ba3572,79970224,5d4f2132,5561f3ae,1989b787,abbf04c1,c93afce2,d389e1f9,780b1657,daa77107,c498bff4,aecba96c)\n,S(ab63e1ce,aa2e34d9,8215097c,30b2f266,75d407ca,41f3dda4,1b21c910,824aa6fc,ec65be61,1150ff72,715d3da2,c4541ad6,812eb7e5,7d0f4d82,4792556a,6ce2363c)\n,S(a69399ca,fad59597,5a639a2a,31264983,ec567279,b052bcc9,f5c919ae,903dd336,b525c659,c30c4f4d,a7a799dc,c93ae348,1c87304b,63491755,1c43e12e,c50d97dd)\n,S(32bf4282,507bcf5e,d25cb5ed,439c82d0,bd7a48af,d3be41fb,e13753bd,c0fc5f3e,cd92017a,4336d9fd,25682f90,be347e82,6773c598,1e80033a,c20bb695,e79bff2)\n,S(a1fcc983,7e720096,7203e2cc,11450716,f2fe6484,f681b2ec,5e42e9b8,eedfd862,1e16b6c3,17e8fb89,dfffa79a,722de49e,a419affd,bc17fa96,4ba6c316,31ed4fd7)\n,S(d85a314e,69617e50,18df1e82,21cf738b,60485cf3,3abe8838,472b32b9,7f0ceae0,71a0ffee,e92dde66,66b4b5da,a88a79b4,fbbcbacf,3308a4e8,6e1aa367,e00a52f1)\n,S(189226fa,688c70e,415b20e3,1356eac2,f5a53b5e,8043e24e,4ee03faa,f20c2e7f,d9bfd8ac,40c7d53e,7bcbe575,9987cf62,fc2bba7f,952e4eaa,1a0587de,f1515aa6)\n,S(d3542e0a,6a931162,d7a674e6,32cf2135,32465d25,4d2d9241,ff70709a,559e1330,25e8f51,e2664234,34cbe5ed,622bbd83,dbd42784,4b1f2bf,9a079917,4b57c369)\n,S(514d9e86,fb2cb612,1ec6e6b8,25875856,9a8c0a5a,adbfe45f,2876be18,753a2bc5,700785c0,be5423c4,341918d9,f65f79d9,1b8370bc,48629791,45ca8418,57cbf261)\n,S(c9f86365,12e9ccfd,e1f1db33,5ae606ab,43f9aa62,2d723f6a,d6d684a3,ea3fe495,30d3a631,3868a01c,9c6f9445,ddcbe3b9,b7b80b58,f31f5db3,a3b3beb2,1e30270b)\n,S(226f20c,8fc089fe,98cd96f,a0e790db,641200a7,2b908768,357d206f,2c2deb93,2e23fbb8,b43e9362,3fc2045,24b43da9,5e02626f,ee180cff,1c03b95a,aa5f66bc)\n,S(a1b27668,d4b6f94c,7219bd9e,6b8a7e61,9fcc79fd,88d9bda0,a38496b6,cb5350bd,3933fc5e,b6e1c16a,e7aa62bc,200fd5ed,c96b5f74,b72b9b94,2644f32d,d6d68a32)\n,S(10f13657,87bc31,1f7b7181,808eb0b,57dd4e7c,1590dae3,8c40df7e,afe28887,1a52e487,9bdc3ec,4e6c570d,91d4edce,291338b4,a79a3995,db5c6e85,e3366d84)\n,S(8aaa0ee,a984f583,f9f55861,500dc5ec,f613b3d8,8f989884,273e1841,cdbe3e46,52962154,f85277d,c02c46ab,c2f246ed,24e56458,156d97b8,f2197d22,a133260d)\n,S(32805a71,24b1b7,9b397ce5,f7a93a98,dc9472ef,a5b8b4aa,3bd66643,f1c89d2e,af525c7c,b7c139f5,cd2d0a85,82a74ed6,9e23c765,c0b882a2,f4d50e58,843091fd)\n,S(c72f10cc,909ad449,7fb0835a,4f3a520d,58db0c2,87f6ab12,cde50749,a9412451,a5666e7d,5197ba9e,37d5ff15,b64b60f3,b8e2ca32,67467030,a7a112d6,f2c7c65a)\n,S(6ec768c7,870211b2,415a74ad,c203bd41,72c0fa5a,d4c05f97,c0320865,77fc9a22,18394a22,aa2dbb0,925e6710,549c8c3,b51cbf42,db67d4d0,5da260ce,af1b09fb)\n,S(de36ebbb,ff99d156,60506143,87045fc9,a846e7d0,eef91e61,dc93a71c,3ca64737,c5817652,f3cb37b,40647dcd,a476c4e0,488208ba,1b4d0c81,b39a4b4e,900f4270)\n,S(f534155d,5538fc68,5ac01ef8,6dea6f4c,19bea322,b46a297b,c0c20ab7,3cc00218,4fab7df2,979d98ca,eeeb38a4,9a2d1253,f9d0924f,14dda603,d3d5706,b3b9523c)\n,S(dafdb850,a1db9025,80ecb98,155b687c,8db2088,d0dab521,bc7fcc1,3286129d,43965ffc,ae6c4c14,3febe601,f36fbbd2,7d0ccc50,60ffe91a,a2ef2fef,651ada22)\n,S(ac9a0a21,1dcabc85,1816893e,e33cc69e,2efe4069,680b3721,2999f9f4,99d705ce,16ebfe40,8281d2bd,ffa1e02c,2d00d712,acf64eb1,39f5ba88,79c3971b,98c728ef)\n,S(afb37bd4,b48cf6e9,5e1eb8b9,7b8b69fd,31ae2b2f,3b7aceb,1db81ebe,98503030,1ccf4164,f8d9cdd9,6f231af3,e5fa313d,c47c06de,ce44dd84,d3fcdb16,a4b7929)\n,S(1b902ef,6c294f83,3ab18e7f,21d6470c,f553682d,2b1287d5,1a602925,3888e709,7735c5ff,34e49fe7,2385e9fe,40d66a4c,66ca0102,46c724aa,24b1ecee,dcd69ebe)\n,S(6e4e5b10,8a202958,7c5b4ec3,d33220fc,c61b41c5,8c3bf0b2,55e4e28b,7c3133e2,b49f8306,5c336af4,469ea410,648915a4,b55ae504,6cea2f66,f14a99d,9a8fcfbe)\n,S(87ce3f7f,bb800210,5b853276,d3931b9,12342d98,7d81e80b,5b10d1ab,1b7e9714,56c6a847,79dbf39c,293c386,9c1e3385,6b71f898,dd46ee16,d1e1973a,4cf0f635)\n,S(8724329b,b7ba649c,9c019372,45a1e946,d368a706,2747dd0c,9f6667aa,c9426b2d,44458e8,48d7d44b,5dba5a5b,b0fa0479,55b109d5,21d170d8,9d090ff9,650b944c)\n,S(b91befa6,4735c091,32db18b6,b64d7d7f,c6338dcc,cec845cd,7d297f62,b6a1a4bc,bb3961ef,8c9b79c6,867f16cf,be4766a0,15e7ca0c,8f9f340b,14cf701d,e0138467)\n,S(4321ea59,332e97ea,3bcfbb89,68a3489c,9ae3d6b8,65cd696c,d8de3200,a0d08fb3,97e480d4,c5149d53,d7582e3f,c73a35ea,3f6b023,5ce50f7e,e31cb600,84cd538e)\n,S(dc4597b2,836d96a6,431051d2,5a98d421,7950a8d5,e88c2069,5752ca6,f6f1bc6d,c712580d,16ba30ca,e84e3a83,c35725ab,362bb4fd,e4c42ad7,f9b73f20,53df36ff)\n,S(ce644ef0,85ff3009,b261750,8de007bb,c5f19b65,2d9f8992,9972d39c,159a009,9a41d0,58db965,baa00c92,f6409ab0,c9402a69,20a66c17,c089906c,d73cc8f7)\n,S(ba1e35c,b6c7b4ba,b81aecf4,23cb8ef2,2ec439c2,584682b4,a7444e01,9936b41a,f3b3c652,f91dde46,3e178d6f,7b17a8e4,1098b33,1cead28a,d2fce694,35bd6272)\n,S(b9f98ea0,2a331bbf,60fc839f,845d8f43,6988c747,1902d14d,72ed1360,86e3920f,9fb2501,a7f23a16,cc726f5e,8aa17c12,35d9b04f,a94bb27d,318fb292,c60d03d3)\n,S(70591746,55f90f81,c478e702,ffcff930,dc10dbf1,16d7aed0,9c1a369e,807e886f,8267a0a4,b9d6f0ca,db1ec92,560aa3f7,d09d3f41,d1f36f8c,64b95509,b205a59f)\n,S(efda78bc,c43ca063,a7b6469f,84012161,14cc5a6e,4e31c31e,b76221ac,c25434bf,7b436ff6,ef45f859,f521b13,53193d13,4cdf8064,449af2aa,92be3781,56fa2864)\n,S(229a4b0f,5d62095e,3a630988,c8056aeb,35fbd874,1a2f0e,4306d094,750ccc34,170d33af,491c74e3,d2d694ce,f6a519bc,741acf35,dc6a3428,8bea3595,e234de6e)\n,S(c770f48e,20a02132,189d44b8,3acd0f93,f91860b4,81a6bf17,8ce8e2ec,6af07100,7e1120d3,8b2a191f,9ed43aca,3325beae,a6d8dbbf,7e0bf8c9,610f8621,c0266eec)\n,S(a5db2c63,3901d52,8b60a48a,20b189a9,e89b8998,3d424af8,eb74869a,f286aa44,b9961d92,6a93d5b0,1a74e6ab,d9c37eed,384e186,8051ba14,46fe1a37,24af1e50)\n,S(3ec7169e,9f330288,a63897b7,c168db9a,4b447e48,cea2c5ff,77b298,da41db1c,c3fe974d,e8e60eda,22c4aa34,ed34a4d6,4b3be268,12e58b49,e4477835,f3053fb2)\n,S(b733de17,c3311184,d5860d4c,f99e48eb,810cff93,ce92eb77,7cf2c114,fb5bf3b3,c75c0dd,72d20ad3,2000d537,ebb61571,57fc4ace,9f26a90a,d28e1a43,480c11b0)\n,S(57d6e208,d555bc24,15d49616,a158075c,27db59e,6a821df2,8b450161,6c2ed278,83870a79,d130da5a,3528e353,353b34f6,74b5d02e,6cf2a891,fca34c6c,3746eba8)\n,S(9e4234f1,aa69a478,3bf2fd3c,3208f6f2,6f069409,fdb2faab,8d792588,6ad3673d,5f9a4773,7725ebc3,e8bed041,47a05841,9fb42b16,affec29b,d753733e,288d0653)\n,S(6fe3ff9d,9fc12ffd,bd896202,fd8ae913,22e4fcf2,76068a75,8d43f1f3,9ab68173,ef0d5682,1d414608,273ef7b5,9208c59,bf94e16,3e7faa3c,2ab3da22,b509fa1b)\n,S(2c31e54f,d2586e19,efaaf415,e54cb499,54c49257,d11b161f,ff2aae5b,b45c4631,bedfb0ad,364ab1ac,e7f53c0e,9fb825e4,39af354,1a70708b,d8e0e423,13311346)\n,S(51597259,23148c3,478ea2ee,2b933858,4d745b89,49c2f782,3b8660e7,78203ebc,329f6153,f688b743,c4fdc470,25790503,b81ff7ce,5a613362,8a59f3bf,66aa1817)\n,S(188b3324,58f7d7b8,dc3fcb3b,df51ccfa,d394684,cde37d60,70d41e46,cdcaf1f4,4dea5da,d112a117,31a6b04c,8999c6a8,3d1ddec2,88aaf104,487656a4,d3901910)\n,S(92058e41,a503e158,8ceb0a49,4e13e2a8,85f804cf,7f13c90e,307372d5,cfa6e471,368072d4,449e685e,17e5a230,e2177e95,bcbe177a,58cd1510,68e7255d,84ec108a)\n,S(6a6f5226,44e06506,f27a7a68,96eac537,726f79e8,9e83105d,5b647883,34099fcf,cf3edd4b,d8ced83e,b167b664,574987f4,7104e79a,5a4b5321,4c19a32d,a5132586)\n,S(7e37cea2,340cdcc3,ca21e0ef,ad548f37,c77c3402,34f0148d,89cf926f,2376bb26,c72d829b,42a27c6a,b062938e,5cbc22a,6b02d42b,d31cb69e,83b9fe9a,cc9a0016)\n,S(1e6c2069,cf0f6cf7,bafb4b39,bc97a8dc,800d010c,52c3cc5a,d848fb82,d8d0b667,c181e76,bca1d846,86ecfbdc,2cb09140,49146986,630b7e81,f86c7238,8e60196f)\n,S(5566600f,e6eea4f7,b06336c8,d44b47ea,f36ba43c,ca404be3,5203ef5b,6f07e16,6bbbd08f,7adc1979,ed4acb4c,f372eda,69e5ac16,7695a78b,5a7fe1ce,1057e55)\n,S(435c634d,ed451c5c,21c5adc,45d94f8c,69045016,d529ba76,19ad07d9,31c791b5,31ede268,8252a50f,2206f959,1953c0ca,85009876,2b6f6c14,24b4e47,c74d4cc1)\n,S(6fb8cce6,a66071c7,395c0612,252a414d,f19a0d2a,f855e7e9,dd142342,9c57b9b6,17f94249,e2f05314,d4799fad,68232626,183dadee,abfe34c5,b845d89f,2768e052)\n,S(866f3e99,20fc4c94,9496a695,f54ee634,11c711a2,99e05890,148de8c3,2980dc36,e99c55af,4f8dc3c1,d38a11e1,3c00db2d,f5211f02,e837909b,ae188786,d18d62f7)\n,S(80c13410,b7164899,a724f723,4dcbe505,62404f0b,7c027c79,4616f618,80468b2d,8631942e,71a01e4f,d7b59281,9dc69d39,bd6e8fe1,c2c41621,6d8df895,280b91aa)\n,S(8f85bdee,ef4e9d88,53e68be,c17bb6ec,bf37abc0,a4ba44d2,c3815dc1,82a7da99,36d45bdf,8ae9342c,af0f8ce7,8aa591a3,4e8c295e,49ee6962,b4a9fb7e,ee17897e)\n,S(9cd0b2b,3393cda6,ccedaf4,ee8a1b3,17a920e4,826da2aa,4404a01a,49600749,3831d35a,51d9650b,b1901e34,8f0c4ea2,3a00c492,a4960463,414e5dee,aafc5a5a)\n,S(a0c5f1af,15c67ffd,6cf832f7,974c779a,3ab7ca,dffa32d3,bdbe0377,d49f33b0,6aff40d4,42de6262,41734412,3620c5ff,3079392b,b8843c57,80029682,1cb91ec)\n,S(af396f40,13e217,d7e1fbf0,2ec4039e,c0111370,37cb2d78,90a82313,58edfacc,aaaeb9e2,5a57534a,2dc35d16,705f0e5d,6754c599,e85864bc,936e94f5,9acfb936)\n,S(fdac3c57,e3e0ecc5,e7e871b0,dbe35979,87d4c071,f2f89307,cf1e71c4,91ed0eaf,3028a0cc,a22ef096,73c877af,ccfe36d6,b14d14ff,5da10b18,cdee6068,3ca09fc7)\n,S(e3aeb123,9587baa9,ae12b6a9,68efaedc,ae745fd6,aac5103e,14a471d9,eefa88b7,7ed1c786,52c1544b,e306833f,bb27d1a5,7b460305,a2c8f6cd,2d33397b,caf769c7)\n,S(96baede3,382a0162,fb4cc663,c91acb94,eb83d7a,3e3e0a0e,6055a50c,d78352f5,78722e97,b3ad2824,388c3a80,fb930089,5100d61,ea58f997,2adae059,f0c50cbc)\n,S(68704956,16975637,f35e1eda,4db546fe,ba93d122,446a3e40,8de04ee2,3bf5f5b5,6247d2fe,b5f7471f,3a06c7a2,4c4261a,934bd226,772405ff,46e361bc,614ca494)\n,S(71ccc634,2ca1f858,8ae02d72,eb0dd2b3,62eaf652,f83edad7,94095e09,f4bcf749,487aebd9,23b10e69,4a8e3f22,2703e5a1,aee17794,42a96c68,6cb9f983,dd2a45fb)\n,S(6fda1dd0,65739a2e,58cd183,1e8b6109,713844ba,f249cdff,25d0b3ec,f635d3f0,a2ee44f4,8afccb72,4f8a96c3,2a88a8b0,a232a93d,553713df,60a965f5,2078108e)\n,S(d3f27709,ff5ad97b,45e395c1,39947115,65cbfcf5,838e7b64,b1016cc6,d5147f45,f96cac16,cdc8e1c3,54e026ed,29bbd6c7,29006ee1,51d9d61a,4391567,93265077)\n,S(27ba1944,a28a6eff,78a7d064,bb8292c6,68f82793,8e2be786,41ee366e,a4a011d6,24bef875,9d216430,e7312fc9,458f0571,fcbe305d,574694d0,a77f7a98,4e7bdcab)\n,S(fd37b812,5fd87ce0,82fca9ff,7872e0e9,772f4c44,1870748e,e35e7d00,944fe190,9450a525,d9ae198d,db9b8c43,fb337df2,8ec68a44,60106951,1847b9a0,27dcb453)\n,S(d9967cca,92583e0d,8d329b63,f32a8017,4467518a,595d8b80,2c24cc8a,8e071c69,6aca3673,c2c39d69,3bc86dbb,92e5af27,28361cd3,2179eab9,7ed64ae9,73376c25)\n,S(8ee82d3c,4a8d01eb,d22798ef,bfd95c16,f53cd45f,e3d044f,3d89ed40,b94a0a3c,e0b0ab7e,9167fb9d,aa71c3a,fd5b9c0b,79c8b6a0,db3ae2f0,36c626c7,791e1b2d)\n,S(461ec3d2,817cb549,a9fea029,15029707,8d709ccd,bf22da47,64c8a1db,c562caa,661b2d7d,cb5c9790,510f6e12,61650401,26cdf80d,b086259a,db16af47,af6684af)\n,S(3155885c,935caed,469bb7ff,b53ff6b8,59f51780,f3de5890,673101bd,41f5793e,603594e9,92ac108f,8d0bbdfe,8f3576e,8ca6ac2,69c7581e,28d434ce,2043dfff)\n,S(5cac93b0,ad9199c1,906267a0,ad8874e4,c68a60a2,b9fb6f0d,cad42758,2a4ea9eb,836faa98,a116dab9,69961fe7,ad7483eb,c48e7295,37e6634a,e423b99,880032ab)\n,S(1fb6d3ac,afd5ef56,8b6eea1c,4a8f0179,54d05274,24487904,7e3ec56c,6956cc42,b8ef91f2,f89e4f32,6df6a1ec,50c6362,7431be48,1183c839,3133dafd,2e2a5411)\n,S(89c0b1e1,52f0005d,a30618f0,3fdee7b3,69fe0157,f7bb2bdc,d31fc773,d82b28f2,61d6e357,bbf46816,acd05de5,b26c67b5,ad8223d8,ac9f47a9,25477ab1,80b4a507)\n,S(7c5d18b,1f9d1afc,d663875a,34193240,7cb968be,f31d751,807ab1b,b79a211e,45fbe7ea,985bda0f,bd23b449,5d4e945f,d136b5b1,296c9b3b,6dcb9c37,bc779ff3)\n,S(c827cfc1,9393108c,9b31ad4d,b5eb7f00,b6afdad3,a5e2f792,ddf9dd13,f159f85c,5c5fe07a,3025d401,54fe12fc,89951e2c,330ea3d,d6335a12,9c31aaa6,753a1cb1)\n,S(6347b32b,b1f3f7dc,205e2fa4,6b201b4,2e0dfa80,550741e6,57117875,57cc5d9b,f8f30e10,9508d34c,a48d7255,3f8ac26d,a455d3f3,b170ee52,e22be1a3,ae8c3ba4)\n,S(d489f595,e822101d,5f6e4283,7db032ae,bfa21f3a,94998130,e0a1d226,67ae1014,8b112e89,8dc4a146,8f64c33d,1261f8c9,2bfa98df,eb9500c2,2b4a66d9,227c66a9)\n,S(90cb9c63,fb4afbce,adeb8f98,1e76a645,2200d73,d43bc0b2,76f058dc,b8a6205b,894afdc0,f6ba7f1a,bbaf19c6,720471d8,2611a77b,5bf6c87b,a02324ce,52e74645)\n,S(40df68bb,19f121f4,e566a1be,f0a98954,869bb06c,699e818b,bc49a795,6a196af4,70d41c09,d0cedf7c,31c9f830,3610f6b6,e1d6b3d2,a431e69d,a31bdd63,220cec90)\n,S(4936fd74,a0ac5045,91c962b6,431f17fc,a888dd1e,b35549d7,8b41143a,83da41bf,33a8e1dd,6517853e,d7c68af8,5b3f1cf5,3fc5b72b,5dd0f392,c5ab5ff2,1bff4f92)\n,S(17177538,811075b8,f5baad59,2958074b,c1a0c6e7,b2a3f594,288e82b0,da023557,583d4814,efd8742c,5e7a0c5f,734da121,b163fe28,239a8775,4bbb072,c1b10837)\n,S(a126b7fb,ad5145ea,b414c82d,8f21f208,6abb118f,3692bab,586770cf,4f8926a2,79b4ac17,b601b4d2,1a2bfdb7,41f7fec2,88d46594,699e4394,452cb2d1,ae2ec669)\n,S(51eccf61,f8840048,d55de51,2d865a52,3485db8d,869844fd,ba30e703,ae871163,594ad253,97bdc9f0,82c0c46a,200ea090,12b2c6a9,57a53dce,e87caed3,2ea8d50f)\n,S(97781633,6f1b7131,f55966cc,a79d25af,d8984438,8b516882,5105ba3b,52b3c7a9,f1df3541,b4b08fe0,cdda20e0,a5275eb6,105011ee,f4355516,e47e89d9,3b214c60)\n,S(8bc2c43a,72248dab,5c78cf6d,b1a35ce8,64231d3a,870bbf01,cdb79be0,2c93f7fe,d52e2e76,173e9dbf,9e8106a,ffbb9d7b,b428f07,80269b2e,f49bbe0e,14cbb425)\n,S(59ed7881,6c7ca119,ca4abd03,34b90b37,6c327175,e899e0d9,79953e50,5aef9f2,239fc027,690c0feb,e4db46a2,8669e0da,20779425,34bc6133,152a606a,16449910)\n,S(bec399d1,76714995,d4192390,72a39c59,c8ff8e9a,2cab6520,ca0cf6b,2fc70fda,ffc4bdef,7831208d,23a1ab9a,de52f346,a21a2f7c,efc5ffbf,70999bfd,ad0ba8e7)\n,S(93bd25ee,f4cef1db,fa5f9951,7d22a77d,9e3b87db,58c63076,68a35885,9e0c4d34,dd7d1412,97361b84,9a43b1f9,4f89970d,fa008c63,3404860,794e6a87,6735b4dc)\n,S(b203a657,fb4e4d51,158b2e70,87455a57,44e553c5,bdea4f8e,3e8e6c92,eddcf58,98246948,c63e182,61f0d4c7,543fba7b,c74ae5a7,a19afa6a,ac80359,5ed8c99c)\n,S(af38b53c,1dcd27b5,8118a28d,11da8aaa,3e20ac21,4cff64e7,be683dd,80f6aa69,91e38936,ba8b2b42,34686723,7a3fac67,5ec10179,18f8ac16,acdc32f9,c09fd919)\n,S(55e4da5b,b99d805,e2058756,20ab4cee,988ed472,f5e6d86,2f8c574f,6bfd8518,7368be34,75179d32,e15b5976,c34c366e,e7713b25,8f179309,40b16117,aceb2d35)\n,S(d3d7e82a,a7ebe240,83e1a15e,1d817d91,a3608c6d,d25a35d9,183a0c9,e42133f5,a5245cc,e89537c6,895080b0,6c5e2772,4b1c6d69,6c1bfbfc,ae6a7d4f,fc5d504b)\n,S(8bd14f9f,e6b54437,9761e803,1dcc9907,beab754b,68c6c3f2,2316e5a6,6ee48799,f89dc150,a3876257,51663a26,35633868,ecb2eb27,d9ae8603,89110aff,6978fe19)\n,S(b1d72365,3f50f42,cfeb0858,972a5a22,3a7dbc5b,4823704,85c88fd2,22212932,40597dd8,594ee1f9,b74aa52d,385b21dd,6279864e,7d0255,70bf3716,c02143ac)\n,S(44d303e1,cb7d920c,93be4763,e045cef5,c22d4403,5e1d3a8,593f4f72,679d3023,79fbdefc,5ed6da2f,31bd6fcc,83e3cee3,e77e41a9,a01b2004,76912c61,5d89a70c)\n,S(1655ec54,447aaae9,727bd4b9,60eb996,92558999,83d4aed,3dfeba12,3b0cb3ca,8e90e578,cf96e31e,988f7bf8,a9f06d94,6ea28fa6,b1dad744,3b9ece50,6626fcdf)\n,S(b02ae3fb,530566bf,66da9326,18990e6e,7902b104,800cacb1,9717bb7d,845a3f29,c6d32713,f4483031,19bb7631,1b397427,d8c05232,92a61051,62a0307d,7b006876)\n,S(13c46566,53a0042b,8755e140,2b12b9ad,8e123699,a153ec6e,65e49cd,10c5bcd3,70f3672c,498f603e,3c521ea4,3ac3e10,7bab13a8,a78b02b0,4492c51,6d41c88)\n,S(e7c7562b,3fc37b8,2e9c7bff,c5e97b39,dee483f,141df4c6,361eda3c,4f1483f,734be460,3d2b4958,c1bdce51,57a16d0e,1a937298,1dbb2833,1b12f8e6,c3454066)\n,S(de025d2d,fb6cfc75,342b2ed1,ebc7b27f,332f3921,c304b8d2,263d7fba,2959aefc,46c609b1,6ab6f3d0,2dafc30c,38373a30,1a88c31d,80694598,5e676f1c,16de12f1)\n,S(21e788b4,fed21c3d,25ddb714,abaf053a,25730af4,83817e4b,6a42c323,3eca2e01,1fe716bd,a7d07592,b66af9b8,32335b9d,b249b1f9,cd413c58,ddd29fda,e5c1c4c6)\n,S(a7db27ca,7481d50b,1a458242,c75b28e6,d1bc1a9d,da97e012,e39cff10,7b79edce,c4f8686d,cabde6c1,d3455fc1,795a7cc4,84239d2,3b11e238,85136183,71ae73f8)\n,S(c5205173,2790f240,e2161627,5ac894cd,e80a7d3e,bd5bdccf,41af64b6,5e2d477a,e9aa295b,209410a0,f0e8e216,deadc3f8,af87700a,40543cda,463beac9,f62ba20b)\n,S(487bf4ad,99d1daeb,f1c25f86,d36ebcd9,38e91eea,8b855d05,ea9371c4,9572846d,81293837,ac6ded0b,ee04b2a5,4c18ae0,32f72970,86de0ffe,791a9576,fcfebf70)\n,S(bd6dd2a6,bfcf688b,84fe2d55,e56025d,35567574,20edfcb1,3cd14483,e08cb53,c86a45e1,84c83806,38ea1501,c2851598,c467d2c,d1c51a1a,1b037324,d9ab0fca)\n,S(94a417fd,fbf188e4,1334fbb6,906731e8,70dbca18,672bece7,936a4c7c,235ec737,e03c6607,343ec14b,81eaf124,bcfb7d97,564e9f93,546f9765,299a443,d9be8e34)\n,S(2a57dac3,3fa13b26,a96d9b73,317a23c0,2ac597d3,3968fa8,ebd88d94,66aba51e,1754a6bf,1db7b3b8,b0a7996e,545f34fd,3b05bfd9,805b50c4,42db2937,e8c13b61)\n,S(ba2e4a71,6142a39,67c613e9,93083c32,d1c66da1,2c3f9742,eae90b7f,ec7e7df7,c262f8c1,a704e83b,ed7fc60c,5adec65e,ccc6de35,8247cc97,1da7acfe,834cb07e)\n,S(4ae19743,b3132512,d28a12b1,1fbbd824,8bb0b9a,730d5a8,a862ea8,ecc01ca9,67b7267d,48fa3ea1,d1c1ec7c,a6a8ba0,cb27883c,3f9d4193,20b4c8f7,a017eece)\n,S(4cfb26c,81823667,f18e6ff9,d77493f0,778b9bf,411b63ad,61850ea7,7706ddcb,10df8a3e,3a8c93df,4d7af16,407c3211,aa6c6079,c397a0c7,78e1e277,24e4028e)\n,S(9f9e4566,a014b66f,fbc3ef,b3c05062,15f06102,6f7d6561,934d3db9,5d130349,492b8ba2,76d526bb,98fd0c17,c5a0aa7a,ab6e5c9c,ccfc95fb,a417d25,9396c592)\n,S(e36c0513,3641b560,b0f9f4c1,1159e2f,ecf2a194,b55f3bd2,22ecf1f6,ac239301,c7fd74ba,48e7fc40,6322aea8,e9f83a82,20e9a113,ac2b0c7f,aa05a5bd,bb43736c)\n,S(91b013b3,b94d4568,78737580,bf1da11a,a0bbe0a4,e3ec65e0,33e9f824,d8480bbf,15e3707e,c13a2529,22a6f824,7e33d172,948790ac,3d367f00,6472f22b,e8cfc5b4)\n,S(254d1788,8c676d52,236782de,2d539f2c,41f667a,d75d0107,7d43f723,ea324f56,f7042d2e,93511e5d,13f4aa03,bb2dbf27,9bec3df,97974275,5fd25133,c814094a)\n,S(452d6b7e,ce7d0f71,2afabe44,2a22f16e,34fce662,99697f0b,6135678,56f4079a,21ea8ba1,28cffe76,3400d69f,ce13204a,9a39ee59,14132d23,db3315a4,7f776998)\n,S(1580b9d0,7888f41,81b86b85,5b1982d2,81783185,5f28c163,1f151479,cc4c508b,4d9d1e9c,78b3d9dd,73bcbbe8,778c1b7f,65b69faa,f6576dc3,ecdd00f5,c1d689ff)\n,S(79dda23f,c31694c9,16d1470c,2cf25a02,45a5aa7e,d084af45,c43960a,a2fc2700,7c7bc169,a58b8d8c,c4b74e0f,377031ce,d7158c21,a156fc03,c34f25a3,a95bc978)\n,S(866da7a9,bf80cdc2,13e500af,b5f4aa0e,419b4905,44653b5,fe2daee1,4149dbe6,626d38b3,b45d57aa,6867e8ad,c8abc49a,81a282c,6bc6524b,239819ab,766bd3d7)\n,S(432bc912,bed271e9,321624cf,c6062b96,cdb502ca,f990522e,1024b80b,9411d374,e645449e,dd7c4d41,41e0cc5a,cc5d45df,4cb341c2,baebb605,bcdce6a3,e411cf01)\n,S(ac3d3b28,83ec385a,15297086,525d937b,717f5ad,83a5be4,77b3ec9f,6410518e,d126eefc,c9ed7e75,c10d01b2,c0e790e7,3dde58f9,54185a12,5fcc7268,84b9b8db)\n,S(4570834b,2a82385d,6db696d9,56ae2667,fa18b262,960d064a,5c13da43,abd6aa37,1e9d6083,b249bf88,7ba2eb59,a9597e7,d9d15c64,ad6404e1,21a486b0,61236f28)\n,S(88e9a6a0,ffaae05b,7c29bf79,2163c0aa,b224b051,36aeffd3,341355d4,b983ef15,ed382a2d,fa2f63ea,dc4ef5e2,579abafc,fe457475,d1ae8413,99969324,718d1e5a)\n,S(16810eb4,de3327c6,a505663d,cad7f618,b397033b,d6c9748c,4fd8748,2adff706,352ebd8,91326c9d,2159e84c,40dc29ae,30693b7e,5a9ed119,1fbc2cf,ee60c81b)\n,S(d7d03a92,95064981,1cdc6503,588d157c,88c861d9,43fa9cab,e2e3301c,994adf7b,8c820bfe,933c2c05,1ca3042d,5ce781e6,ef419c8f,d9aa83ef,2a915e36,382f9627)\n,S(5b2c9504,f645ac90,24e25c4a,e880ce7b,f33aed77,e45518d9,1c6f2652,ddcf11b0,500b37bc,c7764f32,11d681e5,e8f2a407,440e1da2,4eaec354,fc289c76,29296449)\n,S(d18e26ed,d2c78bbc,16982675,9d59eec3,bab1a64d,f579dc2d,6284add4,8cfbd761,1a1e0172,37a3e78,8fd8989a,a5bb6944,685915da,1392e1a4,4a6c7ef5,7d0770c3)\n,S(5f6b1416,9bbc4795,8ca21e88,df252546,dc9e46bf,85d64772,24f34ce2,8e58222d,3a8e7616,4d5a0501,947ca0bf,163e64bb,3a57918d,e383c600,e02aadaf,4b7fd6a6)\n,S(d7a625e8,dcc8b456,69802023,8fe85691,ec2e050a,25421373,39bdbc8a,f762bc7,8f1f9935,a8ce2607,abd7bcbc,fec1fd8c,208683a7,10000806,20d50b4d,36ea3643)\n,S(a56a5419,72aea4f7,15dc891b,3a1b34ea,7ffb42c9,5e02a771,6bac663e,8d5913f9,47b3dfcd,ad785671,180f7bbf,a7f5d144,59b44023,640e3897,1e999a90,6bc3f994)\n,S(1ebb89d7,e574cbd1,37b1a3cd,4a306b44,30325db3,361b7c3a,d93116fa,baade31e,2039c52f,bd30c84b,4983d118,5422a342,ee020c33,49357e6c,b9550075,38da4dc7)\n,S(b5728208,931a6575,4b5cd1a4,a798ec27,e189effa,3ee4f0c5,ad493a88,b49706fe,aba785e7,2da3d301,cb29a612,562078bf,358f680a,317836c2,14ddf7d1,bede9ee)\n,S(56661670,d67b7c77,202a00de,effc1ef6,f5162a97,47afca8a,a2457c85,85a775c9,adaf08e1,83bc5107,4c55122,e549d3c1,4de8a893,39f199b2,ea044a25,4d8803f6)\n,S(18ab56e1,ecc86b69,77104243,35737b51,c18521d1,b170a3e9,3fd068f0,ddf2704d,cc694c3f,43bfba9b,20c9572c,acb30563,df74f07e,ce1ff9ff,46b8259e,8119e94a)\n,S(bc12a874,48270360,1575b754,bf5f50f,6e945185,2e0f27c3,c1aa0f1b,ce0ac357,9c6ce76b,ac175ce1,d667783c,7204ace4,abe12d56,62ff36f9,5de017c6,f1ada1e9)\n,S(a4494c26,99b2da0d,6edbdd6c,353eca75,75666796,5ddbe457,2c27ac46,79054584,589804d5,8360a9e7,d3e2a914,61d5b1ba,e8f0cf69,3b8add03,5545386d,5082d621)\n,S(1ff846f9,6d0e4e7e,be34de77,d036a027,f1baf9e2,ea3dc9c7,8284ac9c,ce3aea6e,8a0a336b,9f0e3560,31f5d1a8,d4c0b68f,27ba3eef,a52dc974,8d03e12d,653f2e6a)\n,S(33181aae,91573ddc,728839e0,4173f716,6862d724,35744099,ffa8f1f2,9510b374,1252129a,8cc8ce4c,1ddaaa0a,4c34c4a5,f01ee26b,3e1a9fed,ad0e7c9f,bdc5223e)\n,S(e687832d,fb0e44ae,f7649b15,77274a94,64426406,fe4c6ae5,7028c9e5,78012594,5e5b3897,6b734b7,b65caec8,c77ffb7f,c5de4f98,eecab002,8cac0c4a,a513b7c0)\n,S(354bbec3,ed9371ac,58174b5e,2a18c76c,c22951,df4c6aa5,755c72f3,94b37def,40d0c876,9283416d,b3613ac7,37401e3f,3c2f4def,bbaba44b,5c2a83fc,c614c29a)\n,S(fa46ac6c,5205b81f,3c9e8aa6,8b5ebef2,a8bc68bf,fa2f4511,ae36f726,7439a485,3853f9fa,b016d2a8,1cde37b,13f91185,f25657a,765fbb35,c1b4d52e,3f67d180)\n,S(426f86b7,33255f8e,1e85263c,923fb86e,56a53d77,945f6688,5627ed43,3024328c,92ec0168,5301c89d,5b13c4c4,57b22215,658c6341,6aff9148,6a2efbcd,4e8c4fdf)\n,S(5c8d1c9b,f9a72d5b,e15d3f4d,17d48cf1,7685dfec,b5ae1ede,b47b6e58,80bc64e3,6205550e,286c8150,6638a3c7,c20f0dec,b6a26b53,641d2dc4,e18d0f7d,29bda7e5)\n,S(3a021dbc,7bf7501f,ddc31356,26a9cb01,be673373,fa663c80,271be570,e683422f,64a89c54,ddadf89,784e508a,d056492a,a7a71b82,485fcfff,54c7b0de,4c1bfa53)\n,S(8d82aa49,1d719f00,75d2dd9,11d642da,7c0062c3,2296726f,a504af27,23ba47bb,6e616f50,6d1478f6,988ed10d,6c6d3c50,7c2ae8fd,4760e699,1ff5c62c,53e4e77a)\n,S(6feee988,fe488e1a,6ed5d60e,fcac1b3d,bbe5451,6e7aad76,f27f08e5,3c5e536f,ee9f95,839fba96,ba26d848,425b68a0,73dcee61,35e04eef,f482998c,b044c502)\n,S(36240979,bafd0d57,72fcadc7,314093c6,3063880a,e895ce5d,2df3e59c,ae16fa1b,619d0376,58ef3d85,a7afe326,77d832cb,eb20820c,157836ca,65f17c61,c84afa48)\n,S(4c2b8847,4da56053,c2046fc3,26e81704,b78494c,91877407,9984a3,cf6a18f4,459a9e69,17a4d711,61ca0b43,85c5a823,734286e3,d0cab398,dda1fe21,3b28142c)\n,S(f921c9fd,b33211ba,a7f4eb5b,15044c34,d6e54f50,af7b85ad,84e12fba,b1478ac2,38cda9b8,c850483e,48c6b16a,5f7f624d,e31faec3,5cd594f9,3171490f,ae016973)\n,S(a57769e6,6181d68f,8f86c8a7,da3fdb4e,850ae07d,f41e78b8,ca42c6b2,1b19b257,212a987e,644bc42b,f757e00d,54d50ba5,1dcd6698,280f8eb3,8829dafc,527cfc6c)\n,S(95a78104,37abecad,888c9195,23c9b16b,375a2714,fed74639,1ea949a,c7c11d9f,eae320aa,227b056b,242723df,1f11a494,ec642876,91a22748,9e1ecb2,a2cfdf78)\n,S(76a7e034,f7ef3e14,2ada9a64,ce984008,9f034a5d,8584a0e5,d10d40f4,29cfa42a,999dc0e4,9633eb3c,2a4ec931,9bc2eedc,9f2e4996,522a2404,79c9468b,668effa2)\n,S(eba89396,47567805,1cddf92,9db7d82d,427010cd,5e94247d,f4e8cd1e,eb5881d6,b92ae1f1,c0885214,3f37d8be,616cc5d6,aebe0f8a,8da4a6a5,d4a69b5,dbbca552)\n,S(a53a48d8,59fe156,6b14f872,aaed4735,dc0b7589,713ce8ad,dd3f3e1d,6e23704f,9e738da0,7e85a3a8,3d89403f,3ee7d564,4f463418,676cea0d,2528b515,39387fb6)\n,S(8326590b,dba5f8a3,8e39b148,105063a7,c831cdf9,98288fb5,95b4fd5e,a707d3bc,a02cf88,a2a1dd25,2d00d62e,cfa4130f,61b7d4f,297e6b06,cb4661b2,bf768982)\n,S(6a492194,ba8c10bf,e31714a2,17a74b2f,b0c35a2c,95c54af,7f5ac6df,17916030,3cf0bd65,8e0c937a,92ee8b4f,b4fc3289,c531cd00,6febd45d,b6b6c522,f8c77b87)\n,S(b4ac71c6,ff797eed,61d80c49,46ba221d,3b34bf13,7e3d4747,4b6c3068,33c52a57,46acb2e4,8fb6fefc,ef3d2343,4624e0d6,14ae3b60,df813683,90503506,d52820f7)\n,S(8b11711e,65bc29e1,16bf05b4,e557b211,13b19b93,a1c1ef9b,49a19316,c286e0bc,79c4a0cf,cf383538,21ad695e,5b4eae58,faa6bcf5,c722c491,aa9078c,8aaf0dde)\n,S(b8b00a76,e86b2579,97603f82,e80fde24,727362c3,6d7a192d,8974f643,4408e098,5db6718,8b0108dd,7cc6fa1c,fead7b2e,9e0b9ffb,78487d0a,5851b6f8,513e56c6)\n,S(884c3a1b,fb6b968,53427a8f,69b713c6,bebe8f69,645fa52,c50e2d2d,61d89814,3dacc0e5,94b2eef,3743f821,df54dec0,ff28aa4b,d5b18fbf,14d658ce,7a3749b)\n,S(3d0c1dcf,51aabf63,fe04100d,cbf6fb4e,c004dd1a,aeb637d8,496a47f9,74637596,576ebd5b,bf5de2cd,6242a6f,599fbb76,883fe013,3e2ef05d,22843236,a5df51c)\n,S(56b3edaf,61539adc,25c57f79,a277b77f,1ae972b6,3d5328fa,13f811e2,dabca8c7,40383900,a2b28602,71ab3d2b,5dda95d0,96bdfbab,79b3d347,dbdac66d,2d2e98eb)\n,S(426e29bf,50f34c9f,434eacfa,845485fe,5fbb11d8,319f9457,a74905fb,2bcfd3e2,eac47ee8,eeff40c6,20d10cd5,c3b9df40,eeb60b88,df1f57a3,5d613198,33cb117a)\n,S(955737c9,f4e24d7e,c6d419ba,a2edadc7,cf0a91fb,5bfc3ea6,7ed50ca7,62929308,97bbb89d,18fd9040,2fa78314,359bf645,b69831b5,bb82e608,67baceed,481675dd)\n,S(5d72a813,d46427a0,f2fae639,fd7e7ad0,704e74a0,83a784a1,cbb85017,e8b3e514,c92f410e,851fc61e,559d6839,a99eb95a,2e8c2636,f51c45ac,9bc1613c,b8876c2f)\n,S(c7da9359,e9bc8890,620876d9,170495c2,dda7849c,7852406,22551bb7,e769b6ef,12278168,71508d00,95d90787,24a0c7d9,cb41f6c5,c82f01c6,d3794c3f,5c10653)\n,S(67080a26,da7af0fd,c2fee080,f20ae516,d92697d7,fe1adace,9729064f,569ac683,ad9a07ac,fbba708b,30944107,e510eac0,8e08c5ce,79f77714,aa522cfc,2316d94d)\n,S(210d5a39,d61428f7,6f878ddc,82e3afae,3947f404,5c155a41,63a00570,5bfc0dbf,617effe6,b0a629c2,ed14cc29,67a9193c,2efa804c,93e997ac,96eb1803,2e8c511c)\n,S(5d0b9231,ca1511b9,c53242a9,37837d13,9b8e461c,6ff655fc,59021d04,e334ed98,c8070121,f4794eda,713ae1b4,a9e7d6cd,1a2f58e1,f6f8d986,bd13a66e,bfe924ae)\n,S(687bb82c,42101161,ed0c8bd5,44c71975,9013fe2a,fcd10ab6,3ce78a67,e2907392,eaf63d87,758aa3a6,f9fc721c,f8b209cf,fafc8e81,10397e35,6a25e966,100d9eeb)\n,S(51a44157,b8048f68,1a2a3931,ff2c3ff3,c63527d1,f4bccda4,e66a6d1,ce5f5d33,6ffc8d16,519c2940,14fdc8f4,20a63890,1a0c5667,2db96a1e,c5127fe9,e847dd31)\n,S(b2862572,56f515a3,5624786a,478c3bfc,a5dd7b2,2bd7c4f9,89f70bcb,8de86775,22ae96a8,a5a5396,b7a67e5b,29292ffa,f53b64de,45f17692,abcd932d,4664f3a3)\n,S(f76b721e,201078ca,eebd89a5,ca396213,6ee129bc,fb92ae58,4bb7c7fe,835bc30,599c6ab1,8419840,3d6b3d17,161bafff,223a0a38,1e96a4b7,a062f4a3,e6c0d561)\n,S(12f24a87,63adee06,e82f20b7,ff696911,d9a3b88b,36dedb97,93b07c34,c4178e9c,59fd7b9f,96f01fb7,b265d939,c2827bee,b2427fdf,8c2e1b7,35178d58,e055b7f1)\n,S(9e1b8a90,de6c6bbe,2a082d47,758240cc,bcfaf145,c48f90ce,fa0221e3,1922260a,fa5e86a5,b54bd9e0,7c2a54f4,2097d004,8a71eb06,ea48c0a6,6cda5981,b390f9f)\n,S(63f05903,20b73eb7,b01b6a66,e28e31f1,ed4117f8,6c4d20a3,8c109031,2fbaae9c,24b8c9d2,d34a81fe,6e88967,a263877f,40bd68ca,baf5d9c5,1abe8b1,9501d8eb)\n,S(447c7409,f5402a3d,a1f569a4,ad9f2855,e5c89b6e,99c743a8,e27992b4,63905999,d44e8d9a,b34a7a09,47b37723,be016c08,716baa73,8b93f28d,b7790370,ad49e154)\n,S(74a4406a,4c5340af,ab77db0c,20f197e4,25eed4f4,a3f986df,1bbf10df,f8793254,162d678a,a4ba712,8cd36907,d1c46b16,dc4c07bc,52aa46d,fc7987eb,67742023)\n,S(f7035171,31872637,ab0e63cc,841cc7b6,2bf5e076,53a45ff,3a23246e,8f047c07,c84b0391,4f470785,721762a9,5972b59e,b3c7eec9,66718936,ccaee9c1,da1097ef)\n,S(ec4fe07b,57b23581,2c53bd70,6b0a4152,2194d168,dca164f6,ac999f6f,72eaae11,af495291,45deb29f,ec2b1dc4,e9b76051,b2f9df79,bdd304d7,b5528f5c,a2fff789)\n,S(17156de8,fa96174f,7a0b274e,e168d0d4,c6552047,11f36388,78dbab4a,cdd2ac9d,2ae3ec4,36c1460c,984e37ed,6decb88f,c2de9f84,79e28ca6,abb6803f,1461ac3d)\n,S(e41b462b,9c5a47fa,cfa9be56,dd30cd,549cb90c,9506a6a,abfca643,9a1b2ede,108fe2b2,8bda60a,c68fb353,38c6958f,e1b3604c,22215311,d380bf11,17507f4)\n,S(ba6c0159,20a67883,d7880051,51a8038f,f357ea78,c53b95ad,38a6f437,7744aa38,da49c0e7,deb6b746,83366aa5,c0e8e710,cda1441b,6686f680,4579b5b9,16002cf3)\n,S(26f0186e,883a4b6b,87102ab7,f7e52663,7e8a9553,8495729c,ee283568,f8cbf1ae,eef8de4,bb2197ca,ccd51980,995a18a0,aad78823,75702d3,98b245db,4bd5f47a)\n,S(10b93de,80c0cebc,351b5588,c0140e63,e00874e3,da663cdd,c4501ca5,b40c9d22,ed3189dd,f79af36b,e7986b02,7ec495ec,1dfef7f2,14358284,2d05b4d0,1c903258)\n,S(e79ec274,337a82c1,c97b32da,8f5a8c55,7a159540,76c94255,8bc9a3e7,77769dde,9f23079f,22dafce3,54a4c175,d888f3ee,e527dad9,83d7502c,3b651762,628a06f6)\n,S(fda0175,44f0ad3f,c8b9915e,8e0caa4,2be265e3,92041b0c,1b7d31a1,6fc101e1,424e9a27,85d59c6e,bc7e4298,1a505733,e4d49a76,b84a030d,db2f5c1,858902e7)\n,S(681f01cb,5380cdfe,50314725,88bc830c,8327d8a3,cbcfdb31,577cf11b,a099c6bd,bf9d2117,cdc3b05f,9c06cef0,6fc9e757,59c02fad,8e0d98cd,794918,f39002bc)\n,S(70c25a6b,2a2d2cc2,dd251f4d,9aca250b,d6fe9f8d,b9eff961,1de2095c,dbd12f64,c9eeaf68,a386b2cf,cd3f4dc4,793ea5b7,134dae04,d991e1f4,6b299a4d,1a966126)\n,S(464ded2c,404b42d4,fefd5ea4,5f408666,3b466e85,fe8b304,3b121b8,9fccbb9d,ac113904,6ad3f613,23ad2d3e,a568367,610bb47b,e41a5260,79627122,105d910b)\n,S(a32df72,48e79198,5d455109,a8c5dfc1,b7ff8990,1b5ce3f0,2ad2f134,13a103db,6db4b4fb,9d60906b,9aea2d1d,876296c8,cf9ad8d3,3e65e173,8212134a,4b160e72)\n,S(fe49ce9e,7ee5d39c,97029774,64ec4fea,3ccb74dc,2a5c7fe9,a7695315,165179a,653f553a,35925dce,eefb9866,26155723,90bfc582,b4c426e6,3f58f0fa,3fe7dc8c)\n,S(868b2e55,c895a7c2,4da24750,c126b10d,ec0f1a0a,2add5a87,8aa7316e,3354ad14,5e288874,cdea19fd,71f03594,1a6291bc,776bca82,804324,efb61f24,7ac299ef)\n,S(fe0790da,90ae34c6,8ad3f1c0,80fc486b,d267ff7e,fd32d1ae,c63d08b5,8c098461,ad331393,de35b283,471a0244,422c6132,cdbfccdb,5680bef4,16f3beaf,6cf7177e)\n,S(fe7fca8d,f4f80dc,ff16b196,167dfefa,42a23bf5,66837955,7f6d8279,6fe9a9d9,bbc4dd8a,d7ee925,dd80cb3d,681476ae,ccc5729c,e1815b1e,71c8f1cb,d8d4eb3b)\n,S(a236c270,aa4ce20b,eb51b11b,511cf4c2,ae797598,e9f03fd2,3aa36858,9434cfc2,593599c5,75a7bdeb,41cc3ade,608c210a,8bc37040,fbb69f4c,4863a31f,2088f29b)\n,S(d6a04a5,6bb8c27f,3ea8a348,538364e2,800472ea,d9e1f644,565546fc,76519248,4b95470d,50b97629,22b099ab,a5761243,dbf6e466,226e8e07,9b77069a,b542deb9)\n,S(d09cd377,d64a045f,e1a76f97,4d701a24,67773228,3261aebd,74e02ea9,f8a30e7f,9f0942b9,2b702b3,d76ed2d0,1caf880d,41a342ea,ee06ae57,b90a924d,6588ffea)\n,S(d030c72c,16d01a9d,6c2e5245,61c7e3fd,b9a469bf,ff0a7440,b2ed0ea5,e5d98b8b,c6b1308,dba4f981,16b60ff,eaea843b,fddeee67,ca1406f4,73db0f11,531f2c8e)\n,S(56c456c6,d2c04a7d,441980ab,80b39a55,57d0c6f7,5706bba1,100c6bb1,e345a691,c5b2f0dc,2c735d0f,8ef10ffc,2753c2b2,825ce525,a0613189,fae34e64,26084819)\n,S(aad5adf3,b505d1f4,28dd1b98,dd4fdde5,29d911c5,e0e5837d,75e51bac,308400c9,e94adf67,4f7994c1,123aa411,b790c68c,f55569f2,1df4b6e4,6afab87e,2777acc6)\n,S(ac8cd8b4,dd76b8f7,4886b089,f18b4cb2,ca1d43c3,19ed034e,6b1867a3,5e6a0ef0,71d70894,f9daab15,7413f827,1cadcfc6,ffb71db4,9bcc81f3,c759d4f7,137ba96d)\n,S(3964006d,f110fa45,409d7a4d,5996b44,93eb4150,f4217948,41dc5357,dc47ca1d,e4a11c6d,21dbd93a,f922a2bd,23f057e5,c2f24474,36bfd7d6,395a46df,3ad7cdb)\n,S(2be10b92,27a312bb,74ea37b1,9bf910b7,723a1ff8,fb43dd55,1a0e1fbf,7bca56ec,19aa8afb,c886dc0d,293ecca9,4290b24b,755b2de8,c1dbc0b4,59052edc,c6df59ab)\n,S(379c1556,2bd7f51a,1d219a34,dffc8bab,ccc1e417,1c38d342,a4c6325a,b5ad6ae5,47a1f28f,a6371df5,66dce223,10d95535,e7bc6734,7f20748d,b983fac4,2f185907)\n,S(24054dc2,e675459d,2af584a7,d78110e9,30a36290,989dd4f9,914cf7a8,1fce9809,6572ae1d,3e05d0a7,1c4e06d4,820d16a5,3553dc81,a6f02a76,12b584a2,e57ae592)\n,S(9812e6a6,f46ca979,ab7cd879,1023b32,913199c8,b850298f,a3bb4c8e,a02420a4,468f6eed,dfecd933,1bbaf36,986f9377,3afd963b,56577151,52a12b9c,88f937f0)\n,S(46058644,6a348e4a,d84c928d,62c9de2a,9f6c14fb,95c83c6b,96203a5a,7f13c700,9dc55ee3,ca3d701f,e6759c20,3b18840f,4c873f11,57b21ad,90401e77,622d57ab)\n,S(a8dbaf97,2d5b05f2,a44d862f,e4aed0fa,1cb877ca,639ac322,8e909507,bcbe006a,3db54c03,f082937c,4f98d38c,6141d0bf,253e6729,b83c9902,51ac4a97,176fa4bc)\n,S(9b8b39f4,f4d91329,13324bcd,44f9846a,8b3019,22671128,74178009,391149fe,490a4f72,1c452e5a,88ffc693,90b0d1b3,4e4cae7f,2e0ab097,6b396a99,1c52c1d3)\n,S(334681d5,a7ef46db,196404ea,9e501f81,7406ce24,27a64597,73e358ad,314615eb,2b23603a,1d80cd6a,9f04775a,52069de2,e328fdc1,37fe6b6d,6c165442,53ad6c0d)\n,S(feb8e310,c63c6ebd,294639b4,a4cce42,bd5f8372,b7aeaa88,2023f0e0,29c32529,cb6e42ad,6a0cd780,aa57934b,86682260,68a45c63,bdf7e617,fbcbf86d,db43b213)\n,S(f4a17bc2,c7334e92,dc923252,3b910a55,a8ca5cb6,2b3d93b3,fcf0f2c4,8705cb67,812b7795,1b24729,4b3d55a3,2f45260a,e7f4a9e3,d5cfa304,bb0471b0,da6e9dfe)\n,S(8ec2ac7b,85514349,5496d596,bfcaaf4e,c330a995,f082324c,7e0479ba,4ccf181b,ea1588b6,7811d263,7bcb3bcf,5cf0bc4,70e92797,27b1c258,ce4ebba9,35250130)\n,S(b1e6d61b,d9aecdbc,c9c4b6d,9e48c6f7,e4aa9eb7,7da3c001,53443c6c,4d4f19a,43af7b55,b2e2c976,8b1fdb34,48d6f339,1bc20aba,eccb1a3,5aef98af,b28cbf4a)\n,S(4d83d2e8,210d47dc,3904a397,4db35433,1a951963,2d4e2e4,b69f2049,2f13b2be,7ed96c83,3874fc97,be45f1d8,8e5842b9,7a0e3bac,95400036,7c8572f6,3d37a6b3)\n,S(1448e92e,fd51fc21,d6f5d514,35527f67,25f5c5ee,b0b29c36,b9eb6e8f,2bb20b84,248a338f,c8be83e5,2f91c9a2,2868973c,13336aa6,39e43f4c,ea8bbeb9,96e344ad)\n,S(e23b03d6,9c2250ac,2cdcc7d4,4e0a218e,39d928b0,2585fe63,dcf7093c,924e4ead,8c69c7d0,4a8a4b7c,1997ef44,fadb04d7,80b91cba,13dee454,2effb8ae,71b9aea9)\n,S(4cd1e35e,21fb3fe6,946a929b,9aebfcb8,78663224,da66af94,e5a722b4,32b5d7cb,6b1112dc,5e865b10,ba688780,32978617,eca892d7,730ca984,cba4ab07,7167e3bc)\n,S(f3cebaf8,92cb7b0,27cb9212,3596ece0,bf25c6b0,d8f1dbf5,f2efb204,a0db647,a615ddeb,8418c013,91923b88,7bba5d3e,cf3c7172,efbdaab7,e12582bc,a968d8e0)\n,S(4b8acd28,500bf88d,68337c81,33181706,dfe341de,7b1d5736,a3a85a2c,6d655e7d,be93d7c3,825a5675,84d6f76e,52f3b06,7b7c5d87,844f18ac,624c96e0,fd219bb8)\n,S(8dc7ac81,d04e0088,63fd2de6,2cc68de8,3e567d81,85aebc53,d4771950,7ceb9fe1,62d4b64a,be7b1931,c47a7755,e25c803f,1eb14c89,2ee100e8,214b94c4,11fa9198)\n,S(aa63343f,3078d48d,942bbbe,df4f2c19,a817c257,9003e033,7104e530,c1b89a23,277ef834,23a6730f,69c20f4d,9de94758,13befc6d,ce389bb,fe7958e6,6ea7b524)\n,S(37de5061,9f301e40,8e9096c0,1a37df3a,dadeba61,bc217495,5d04d7a1,5121d30,7e7049c,33e40b96,6a136516,c005597c,e3f6aa70,d6db4c31,f5732fbc,e538898a)\n,S(6d18cf55,506d59ce,a3e8cd44,f347481c,3ebc6682,2f91445e,11f2c0c,45eb83b4,e930e9c1,ca8b73f4,7fb9818e,5d4db8a0,220f7ba7,ce807854,c8ff2af7,b8a30cdb)\n,S(77d85660,6de7dac5,dd4203c4,90152c9c,f70243fd,eb1d1c0a,5b797b39,16caa7d3,3f57cfe3,9b37d550,c9db0fc9,4b3c0e3b,1a2722ec,f920522e,8c37d848,f59c659c)\n,S(5c2e69a6,c44b5bb1,c55dc8b5,6f9d4fb8,ea56450b,d69d9229,670e635d,f381bf16,f082049d,a69ca9b,a2821a8c,2fd0b46c,9ec21af2,4c34b049,f1af0126,75a3588d)\n,S(329c01f5,66d925b,251944ed,92beb06a,aaacb98d,89b2aaf1,918ce400,b5a393ee,7e29b038,427a0fff,6ad50c80,aa49252e,e21c2c45,3d4c72a9,c3cafedf,faa57abf)\n,S(4c2e631f,18b2dfa4,37ebb401,771d7b0e,b670f4fc,8546499d,f62b49bd,629525da,8a95ebfb,87423fa7,4c131432,6b7c204c,50c6c2d,a3f85370,1f789ca3,fe9a6f9c)\n,S(fe121b93,d254465,c7f7cf02,ce10a575,d3808ce4,c6133fd9,392fbf1b,63d03fdc,33129b07,7bda4311,94fb997f,9443a0ff,e59438a,f360b635,2a80cbce,a49e0ba6)\n,S(323ac27b,1cdbf3f7,74e20521,f1e74b8b,2cf8c5d4,4180316d,a532ae61,2f784c23,21156108,f6a64ac5,888b15fe,834ba9a5,c8489e16,f3d31197,bb296b2d,3fc3dc18)\n,S(11478f62,fdfcb1e0,3a5f0ed5,ce0c2101,eeccbca1,e5934d37,41b1a8d2,7afd533,a9f79673,2fd3ecc8,644cdb17,6d11527a,aba8d0b2,985366c,70d96999,ec5f9153)\n,S(9f0909b6,c9d3c1ad,eb88acf3,aed5a6a6,bc8d82b5,767896e5,e7343efc,20b9d078,a5161ca6,c5c95d64,dc663e30,b8f65234,61a579d7,b99a57a3,3b0f3844,e47db181)\n,S(4960a875,32a9ad42,299d8cd1,a1af80bb,2807acb1,b52f1711,c55957d3,a64a6b9f,578e51f3,f1b46628,eb48f54a,93f82f24,4bfc6202,eef77dd8,cd6b90b4,de976625)\n,S(675c29c2,bdb265e,5490951c,bfc9f73d,d142d536,4b5ec668,54b582f0,5d310354,22d1f669,3d82de84,202d4f9a,186bdfa6,8cb8ad5f,9da33a49,83229047,e08bd6d1)\n,S(c4096cbd,6c75d0e2,6a922177,916ab32d,a9053adf,ad849d36,f65b7c9b,107ce605,5f236b47,2ae3c979,2ff61efb,9633ae05,b2b97e51,24a3c2,94f5be53,95c2bb46)\n,S(9ea0d341,ddd05401,f01205ec,2c754155,b1ddd460,1fa3789,dd80ed9b,3b905c0b,3bf48101,97e7d0b7,6f3692cd,53989764,ba7ce059,953f7b71,7e615c20,da28e69)\n,S(bdebbed7,84bffa33,72a6edd2,d9815b0d,637367f2,de3768c7,b4dd75a4,32fb92e4,5ff3437e,b62a9b62,dc16af10,5a20941d,297a431f,ca2b0067,6734c4ae,cfd0b9c0)\n,S(a486fa44,b46e34f2,d6aea82c,8f554210,cbfe674,77b560c7,bccc7d6c,9e910932,1ab7e36d,8a15e284,8a3caa0,f54ca555,b8ad5baa,7f47fca8,3231c822,f897317a)\n,S(4463a0a5,57a1a926,aa204376,a20aefab,66e7abb1,18c7f769,fbd1a7d1,29cbba08,4a823aa5,ab7b602a,704f01de,20b8ad13,7dc08152,25ceace0,9a9dab69,d034af0d)\n,S(d6e08a4f,c45e8dfb,ab713584,d91d1d8,8cbdc5c6,2eeb4b4c,593a73df,4d825ac4,2cd85bb4,77c0d0ba,5071ae8f,c0fe2dbd,8be98d9,622fe506,c59800cb,5eb4c55f)\n,S(b626e299,2a69cad4,e6076dca,29bbfd34,546d31d0,a4f8b656,a433fa87,f96a10f1,6df4b2ce,ba919268,f1568632,55e27655,62ac5e3b,8cbbfd34,3c656f43,43cb5bc6)\n,S(3619e6eb,74645070,b2dd6196,5fe4d25e,25a4dfeb,619e3b05,7e31a566,947139a5,964b8989,ba156121,9d36c3bf,29467c7b,79940c3b,450c1431,1aa0d725,1282093f)\n,S(b3529b5e,6718843f,c40a3a65,d5330961,41e5c060,e326aa84,7ccf7f48,c8bda2e9,49e6e0d3,7ce1bf45,e9c595ac,285becf5,31111e7b,2a67b057,9d4fc552,59c1b935)\n,S(e51f0067,5bd7145f,fcf85527,dd247ef1,4a199778,94035598,d42afdf1,2fa9e05b,d59aaf3e,8b4d72eb,4523d5fc,69b047e5,7d2e175f,30eb6c8c,ec729cbf,c1b32666)\n,S(8a87f066,f64bc468,d225eb6a,a0a7b54b,91c930e4,d4520720,1705f831,cde79b28,a92a5d95,e0057c95,b219062f,5d0e4277,249c34ac,6255113b,b5eebea5,66800227)\n,S(d8a81015,aa878ee5,a69c771e,bf88daad,3a926afb,b8aef632,cd7d987b,fd310b06,af77f7e8,f276ed4e,963e3a26,2f3942c7,ec9f31da,199ead3,d5e5f53f,e20acbdd)\n,S(88c3fa19,4f3f4d93,dbe5b8a3,865d28d6,51c9abd,519af4d2,c3b743d4,ce0cc5c1,104caf7a,f9ff822,7b3671a7,e7745bee,26b5deda,9982b9d9,a9d648e0,760d8f8d)\n,S(f8738725,3434b0ea,f05e9c76,3c729a8a,22070111,6c5a6484,5532c3d9,41ce648e,a8b5eed1,d4ee7913,b69f6627,d3e1be,4c286e15,78167201,46fc9e21,786f7bd7)\n,S(5fca538,5afb021f,94cca826,5689605c,7b35c8f8,dc8fef60,6b18420f,909acc33,1d7fa51,f5c28bfd,eb1f9a52,723eb2bf,c5b4d078,d5d4b639,2b791af5,d5b2b3a8)\n,S(47484548,d4b2acd9,bb2cef9d,bed4bd0f,f1fddf4f,e1561a51,891464fa,cf5007db,ea61e154,f011cfe0,46fa2539,7fb444fd,b93e223b,ed882bce,3ddaa3c8,328f44a8)\n,S(331f17ff,b14d43f,ec69a6fe,b41a8021,dd8ef56d,2540234a,b466ac85,e6c5b8f1,ba20bca1,8d774731,b6b64a0f,8a19311f,37d8c061,2c4699b,68d569b0,9eec144b)\n,S(6aba62d,200bd2c6,4ab88ce9,80530e56,5b8971c,f9c427f1,5e9b146d,dbdc68ce,e4c936d7,d7d98919,acd26ef0,cf071f2d,fcf65fd7,78dd8c5b,ab026,e9f832c8)\n,S(c76b6c35,e72fa19c,621022b4,d9ec6ece,c0cfee8d,c73254fc,f52cbc69,23ca19c5,5b0ffa7a,48ee8599,9b74d0a1,d7fa0289,b49dba85,7b21bfb1,ee7ba831,fa13efc9)\n,S(c056ea3d,43f33df9,b01590fa,429c14a6,aaa438ed,415254a4,4a93854,ce1bb77a,d5b194e3,2337a9f1,2c479e7f,576a571e,58355a02,8ba0231c,c337b8c7,eb3dca7b)\n,S(3d688ccc,8ddf0ef1,137bb897,e6b8f3b7,7df652c4,93cac3a1,47e88b3d,bdac938a,bca94788,4d7ae1f2,960daead,111558f7,38b6bc9a,7af3bb4a,691af22d,4d5879fc)\n,S(4faffaf6,69ce1180,a9145f0c,df6fd834,c59d7a9f,5f2e49cf,3924b33d,8d2a179,9e015cac,2dca2ec2,5580c16d,8c910abb,dcbad872,79bcc485,b71f5561,60159d2)\n,S(47578e3,7cd7eb78,6b5a44eb,3decc7c4,e8ba0c7,6699ef61,4ac30579,a24aecad,948ac817,a6bee00b,c68eab83,fb628ed8,7fd0066,9ebc8569,45eef8c9,67171651)\n,S(9aade275,3eaa646a,24ad1a35,f74887db,8c72fda7,77b59dfe,103e1a95,dc618836,b651c384,8f4625f3,1e6e7a05,c94483f,ceef2fed,dc7f4256,87e0373d,d02bca96)\n,S(b1b0c3e0,b1c6ee75,55a81852,447b2bcf,321c9b9f,629caf9a,276133af,63aed711,493accfd,624e6ff3,dfc1d0dc,aff17113,c2c74167,58cbd571,759bab24,300ac827)\n,S(c557758f,b192a058,eaec5762,ff391a9b,2a0ce462,7bae01c,156dcf3e,bf2a8ff6,1d4e9b53,d209e195,9f10f671,b1bfdbf3,98921284,a7719766,39947969,6d1bd3b3)\n,S(73522ded,5120ed4f,b49b5ca6,df5a1b6,edcc082,48df4d07,cc9ad923,2b7b5e0e,47569d94,cdf0270e,d1d299ce,d5bcfdc7,7f87db4e,c9725a96,e4388cf8,dee08d74)\n,S(16571c0d,66328963,2a3ae46d,fc2bee50,fd6fbc0c,f0ec73ad,72bb9c2f,e8323506,65de9d86,9e001c60,ced57911,e7ce6150,a936d684,d759f143,d2224448,4bec68d2)\n,S(f5fe5564,2eb630a5,c860cc8d,7c9ef86d,b1810d2e,82dcb343,dbe2f958,98e5f090,5cee7a1f,bea9dac8,ca340dcd,fc2c097a,eec2dabd,d7ed7504,e20c913e,9fadfa87)\n,S(ef09db32,70d09043,43da67a0,b87cedaf,7aece017,58d78591,8814e3ca,396e3592,5934f805,ba246e9f,965c6161,cefdf4e3,7df14271,2ae076ea,80ca239a,c7b675e2)\n,S(886cdbd7,27d2f099,9852b102,bf201ed2,5e174622,f974b0c1,3edfe523,373a54e8,dacb328a,7fca6e5a,e5351825,564e4f89,5166f687,38d46142,6eea7b09,dca73b2b)\n,S(b7d86bcd,4f7bf2e,8529ff84,88d9f3e9,62071308,9bbd91f9,6e4ef82a,ce237cff,c6b0aff1,375a547e,a8546dc4,17574843,3acf2a4,ed0d002e,e32fd88f,3b702f0e)\n,S(d7d171b2,8132ab85,30791059,395d94ec,c24f5e99,67bc6c4d,22bfc7ba,eb388c67,983770e0,2421e2b6,55d3c135,1bb39bf7,7be39682,97088744,bfe6543d,dc1a8f8f)\n,S(ffe712fd,881e30e7,229f1cfa,833dad90,f01a1896,c1493502,a429080a,9794b1be,f4299e03,75d084a,10b11ae5,8f2fa2be,f18b037a,53165586,cdac18ce,54505da8)\n,S(563c92b3,3226951,cd7cd10b,3f7b35c7,dff3f0de,6f03d66,9f664655,57d13f7c,dca1eef4,85bef41,80b0ccfb,2416f948,9bb21094,854f5f43,769cb37,33ec10c1)\n,S(b8e76ef3,3a2cebce,614056d7,efa47c15,dd52c228,66a7d3dd,9a0d4d64,68f32437,4454e79d,652ae799,a3a539ba,42619a1c,3076ccc2,109dc4a2,2aa41a28,918651c2)\n,S(36db2304,f60703a2,df2e429f,b8a99841,7b4a4f3,e08642d2,c5675460,aaf1c971,a0536e8f,5cc30aa3,d9b859ee,e26b1abb,ecf7f9b4,8c8fef0,f842fc9,a684b5cc)\n,S(c5d4e51d,1521637d,d6055e52,9e9ae2a4,d537c1a1,b7c6a314,f9d558a1,88d9a5ab,c841eeed,6a13782c,fbf65b08,c6570994,aaf7093c,4b48ad0d,e04db33a,6feb3f6d)\n,S(50c03dc2,985859f6,ffb79ed3,f635e17a,b0561533,600af220,7cd98f9f,71c4bffd,c68c8797,a7ed229a,f59a2bd7,451c748a,5c425528,8b7f6b0a,68b64a77,d7137720)\n,S(2806d84b,3e7e6f9a,2e10ae5d,cf5bb0ef,98560691,71d31ff3,3645346d,f08333ef,72f23443,38e34ccb,4ccb5ddb,f3a6b58e,bf8cac26,4243785e,54a9b503,c87b429d)\n,S(40d70ddd,1ef58dd1,c43e33c6,29840fee,82bb9c1b,e222b53f,4c58952f,388790a4,9b1a9d57,b6dd9932,338d170e,af4d5516,e654685b,3946930d,96b2a1d7,f70770d5)\n,S(8850ec32,4e71213,bd77b193,ee21da82,ac733804,17983905,d0156608,8b87c835,aafff7a0,a9160b91,92df58ea,a65c0716,961480b2,b0cb4d3a,7d637f77,ddc160e2)\n,S(54951509,bd7c29f4,77f9d4a6,2be485d7,de291b0,6a308bd2,c240cf71,50ad6e8b,2fdb347c,f2a23b9f,a3a45c76,44cc1fa9,b1d8f79f,77c02f27,f136c732,c7ef2722)\n,S(9f5ec355,cdf8eb4f,be5af1ab,70a3e7cf,1c3d3e8b,e643621f,acf8f69f,af7e5d44,b203dd5f,b38b3550,6fda94b,ada1c4bb,12b8be5e,92bf8a58,4886f2ca,19d3c06e)\n,S(812e4a9c,1bba9e52,8cb5e606,c8b326fe,8b72f0e2,3062837b,bdf371a2,2ec0b3da,2ba7b5b7,14a9ae39,c62bd36a,1ed00135,5d98d248,9ef90f24,d10d1c58,f8e222a1)\n,S(e6035ddb,cf85616b,540ff16e,cd5d7fd1,af52c6f6,2a26ec36,c5c1ca86,2a3d924a,a945389e,f687fcac,6f918718,a1f29f19,173d3104,69c5954a,d6cfb5df,f01eec86)\n,S(d788a5e8,d771d471,b7169693,86b2339b,2643f129,a6b50bc6,321e752,6a033446,34b85622,5095783e,fa57fe32,a7d91b65,c0c9a42f,79fe30e0,b2598967,e97d3990)\n,S(663733dd,29374f9f,1db5f11,6fa32b56,c8ef42f,706bd802,5615d4a4,77c6f41c,3585d45,3ae0fc59,1614e916,a1400b79,85b59f66,6e2553c1,394ec26d,d078676d)\n,S(5ec6e728,5ae1413,3dbad4d1,19e2e3d5,6affda33,356146f0,a5ab023d,b323ad9c,3dd241bf,cfc6301e,29cd609d,b1a0fca3,d35a56e4,668de9f6,45c23d69,c0884579)\n,S(f18fc442,1fbb66a2,7c336647,1459717c,87532be5,d4416cee,e4a674a3,2cf8f3c5,d38a0881,3bb33df1,fb4e83,6686c0fa,26847e5,f7580de9,b4f229cd,1359d560)\n,S(818f549e,d9bcfe1f,14b8d336,21342465,7dec0dfe,eea1d719,20622442,39f5345a,37ce611f,cca2f448,45c1a8e9,d7f4b3f8,48b24c5c,2b9f5368,8cc2c8df,846602ee)\n,S(75e2c791,f98e3fc8,2a74ee3a,532e8796,4f4fa8eb,6421aa64,17a5b00b,1edce942,51f2373b,a4951362,68aa17c7,1160855c,7c4d37be,222a8b26,f2d54cd5,37e5f6b4)\n,S(711f8db6,4c0c6d31,daff4ec1,f9937730,9b44de59,9f4b9119,9ca6836e,1e3954d3,485955e3,432ac82d,f3170fcf,7b3519cd,6e4dfbba,170bbeb5,b75e3e7d,70caa4b0)\n,S(63502c26,6f755a1e,4be2104e,e8ca9c2c,5216f50f,e21e003a,16071bc8,df3ba6a5,a5c829ea,c8fc3f4a,f55075bd,afe77977,3954b88a,f1f3a8dd,90f28aa1,49bea942)\n,S(2a677459,ccfee070,1b5bb82f,d2ee57e6,13f5c3d6,3927938c,92d10954,c2850872,ff6e9798,5c5db0b2,9bb1cbf5,db03e0c4,401bbf28,eb39e053,714d5c5e,ef7cbe71)\n,S(68f85f87,78fb69a7,9db4a22,3d7faf95,5b359bd0,5f230d99,f051b008,32b52cbe,dc2e949,f4fc3189,c4f7b771,f8b56b85,ef9c65c0,b3bdf89e,405d5f3c,ffc92210)\n,S(7ee9d5b7,3b542036,509fd8b9,de590b24,9e9883c8,6f4bb90e,1c2904f3,d2b74ade,98122413,241cf205,f91c6977,b925ddd7,4920636a,9dd67828,2c30ee,7343e62)\n,S(8447b090,cdb19271,db368023,d40e520,102b5d04,79eaf391,3817553e,24aa33c8,25b43fe6,55a27481,c02eacd3,9025a523,121d02a5,78896a78,c14a8c21,f7c0bdb0)\n,S(316073b9,3f1550e6,b7951f56,90c5ef3b,e45e622e,77a2f268,c89a8b6f,2816a645,557ca5ac,2fc70ce8,c3e54a4d,b31d5c77,a1a6f38a,18646caf,6a52db31,947624be)\n,S(fae2312d,a2ef21ac,358fe949,5c011b18,cdaa8ef1,c99284ae,5fc1eb77,4836d6ac,6f3bf661,2d99e865,b0cee7cb,3fccbf08,aa948ad9,b29b4b8b,54eee8d6,3f0b76c7)\n,S(280a2bef,5588dfdf,b1e1691,d3162aec,7d4c72c6,b76f23e1,2f8ce783,54f839f0,f00ded1b,c31a9774,a87be1bc,7e440585,b2b4ba63,cc0d9c73,ca7b4873,93683f72)\n,S(3f43e77a,9b7b92c9,92b7e5d2,8c75444f,4d0609b2,8aa65ddb,86bf6ac0,bf7ccdcd,b3117903,bb3c0a54,bc6bd6b9,92b8d85c,ac267855,50075536,6cf70a84,4c72a2d6)\n,S(3a0afdc8,387bfa34,87e53929,51e10e,9535500d,f6506296,46df162d,d469f2de,75697cc8,f0f690b6,e1f86dff,3f2ca53d,907d4cf7,c8ff324e,8b4187ac,c9bb29c7)\n,S(3f972b64,209f723e,99a6e7c4,a72072a0,2789d0aa,8a23d660,949ea417,7970809d,7a482428,7a6bfd9c,afc26e76,9a02c5ff,9a7c053e,e63f2342,b32a4f84,42e47d15)\n,S(938ac0f,fa73364d,11df1ecc,4b84e3d1,c21ff85d,71f404df,e8daf4a,e889b0b4,a1c09ed3,d526b381,dee8820,eda06a10,4e968995,64cb604a,63fba74a,45be0312)\n,S(5355ed75,2993e74c,275eb9ed,3bd34575,631c9b5a,64e99071,8311ec8a,f4e28bcc,bbb1007d,680aaaaf,ac10279f,600f1851,c8188547,3091a40,ddf7253c,fc6ad088)\n,S(880e32ed,70ba76c6,d83bda46,a4340646,b033696f,ab62e457,4e989311,fbf277b7,76feb2cb,8d10d5e2,406763d5,f696686b,8dcdaaf,330e4e7c,623cc7a8,6e0410bc)\n,S(daf778aa,a2755b68,2b8beec1,14b74e9c,857ac503,daad6bee,bd6d11f1,8f11aa8,1ed85c62,710d3017,9f0f3024,d6ed6976,e38325f0,92981c88,fd4982ee,98a5f428)\n,S(e5c3e9dd,75633d27,d19c0a4f,f3533f80,9a60b95a,42c8c464,1cf7abda,8fb474dd,f1e56af6,5c5c087e,ab303699,f20bc9f,71b7b7fe,16332afb,2517b241,8dfb0dfc)\n,S(5d403f34,ecdfd870,977f3bf2,ffb274c9,6859c20c,8cd7afd,d116837d,c0096973,6b5be47c,70246cc5,9781ba70,71764d72,2335c334,443e5e4a,5ba12939,d8f6aeb1)\n,S(50ba053c,25511f71,b35b4caa,c990ab27,993bf034,f3e55f81,3896458b,5e246b12,d2f12a45,5c7a3170,67690399,3063dab0,9f8a22a2,bccbe5b8,8a7fa2bb,f2291f63)\n,S(385a80ea,ee4aa9ed,a07898f0,b3658793,9f290622,399c3a00,b38bf02f,66629cf,a543320b,d72ac6e5,d750806d,6a90b8fb,8cfe4902,46991eb1,6e6a6974,befcd50)\n,S(98610b9,904ede38,6e69de6c,3d40518e,eaa669a5,23620a9b,276e1996,bdedbef,907755a2,eb6aa100,d0cd0c89,25b5ff8f,b88f72d3,61d83315,c4ad0d94,8a06b581)\n,S(83f10807,d9640d3b,dfc7b0d3,dcbbf6a2,19ae215b,4754f29e,d4579999,191b7fe8,f62d231b,5095d6d2,860e69c6,509de2c6,fe719e4a,fbc2b5e2,489a6f9a,7293364)\n,S(51d22293,927335c6,2f82b028,52759fd1,e3f287fc,67b6059e,74dca17d,4fb1c246,b9b803a3,b5145b4d,188b909e,23c8b126,f7184bdd,3128587b,e05219df,6c63745d)\n,S(be6a6342,e5783d43,d2691945,826c37c5,3e8cc24c,5a09fc70,3689def1,4f465006,81c718fc,3fc15279,da9efc14,13ddcfd8,81bc7e4b,1c36004c,2008dba2,7c7ef000)\n,S(f21334d9,c36f1284,a4bb043b,58b27070,448681d9,a82ae81,a4e8f226,bc790036,44851,3a87fd30,453dcc1e,b21e293b,f5f143b8,2cf2708e,428f4753,8816eff2)\n,S(1558c4e5,af34463f,810cb1f1,b73bd27e,932a832,9253e2cb,419eafae,c9730508,cb8cc650,25e14132,3663f3f4,1a75085c,6921bb37,428a149e,2dd1fe4d,f4c917f8)\n,S(1853a32c,8f6020d8,1b4d3596,a88e3825,b575a4ed,99072e64,2e090a1a,665d71e2,8da2a31c,b170aea0,e364aedb,b1861fff,eaf26888,b29405e8,9e3ed982,a03a8367)\n,S(ef585cbc,f0f03bec,21df60db,cfafa9dc,2da679b4,3bdd590b,8cc35388,cccd323d,2bc5e203,aff91f6d,38592e07,82813905,f02ccdba,1daa7acd,d93f6d80,78c2f296)\n,S(3f4c2e37,e1ea68eb,befd9971,424b3c7b,1fa45864,e0d13471,a1476808,b2fd5c14,678990ab,3d283b3f,aaa665b0,4f329b51,51b9c17,b54385e3,30de36a4,7e0eeaa5)\n,S(2b001b8a,d557ac4a,181cb20a,b3abf2ac,59fc9b10,20b5533b,621b4119,e421693a,fe4f3007,f8d19db1,73e6f8c3,48b2525,310a328d,2ca0c675,8fa29723,82c6b94a)\n,S(6589d1dd,7d5a08ff,8deb5b10,81fb0ca3,79c90d27,58ba0bb9,8d05bc93,452cd229,82409480,ed842993,4bc8dca2,3e000fd5,fdc5475b,192bc7fa,a1179165,9a8149a9)\n,S(c233fd0d,f5d3835b,8e855316,276a6a90,ab4377e5,a3a3a8a8,3b89f0f5,27950a6f,8fe8e0a8,775a9a43,12cfbac0,85aefe06,31468031,86b8b84f,49422392,b4f6f3e5)\n,S(82731a85,2a848eee,d6ee3f57,f75a2bfa,a388670f,89f6f6e7,b65b13d0,764cc14a,c00c509a,307c5e87,f1b09688,38e34a21,1ffacc9b,8a7504c1,2080e4cd,39117583)\n,S(e21387a0,e5d8b1b0,5aab5150,122942ec,c9dde3b5,53eac977,7eea6d0,6d2a50d,c74de509,f90d93df,343c920,74ac5dfc,fc81c95,93354349,bb2810dc,8db0ff83)\n,S(180871fd,2fa443d9,c5b5c341,4d635b8e,92780fc1,6d04236a,bc9a49,5b9fdc25,d66c7150,6008f37a,422014a8,bbe025c6,1f25e636,e2778146,59985003,ab14d120)\n,S(b5a9de7e,ed112a8c,1ef29a9a,31156b90,d64dff93,4d83fab4,b44d30e0,bccb2c42,5675a679,a81c3faf,3b0afe66,ef85721,30315ccf,b0ff3d91,130a71f4,3539db38)\n,S(9acce472,61f1e50d,f42baf78,c05a5cf9,8ce5697b,6d3b4d,40d011fd,aee7d6,fb7c413c,40464c69,e5756830,4325a79e,6cb8c831,add29e0a,95f88feb,9507a05c)\n,S(f80ab79b,7bef7712,2fc7bc4b,2193deed,916796e3,67d85100,a02cc0eb,8b574e5c,c6d4d03f,842d8b25,d9b5834e,d6cdcacc,3a1ac585,b5d22aa,c77019dd,1d5c8f6d)\n,S(b431e355,cdb4230c,3005845e,f60b24d9,25d81448,ec161aee,faea1f98,bc9366a1,ebcdadd4,ae230a14,382ddb98,552b6e69,7aebace5,5cc7390e,f69d176d,da41c1cd)\n,S(7aa60b9e,8c93a63,51eb686f,46dca4e6,efe56edf,6c2089c5,93f6a800,6e75f1fb,4c81e2,17700bf1,e053e389,2e33e694,cb424800,b4068c98,328f00ef,5fa0347e)\n,S(1a88250b,3aa4243b,7441d1a4,da37b4dd,d304fbef,272f696b,a72e7610,1286b30b,625b9d05,57d3815b,e06d8cb0,f056a9be,b33b7658,f459b3fe,3fd5f4ab,69b7a473)\n,S(5b524eeb,49fd558a,2d34db23,cb5dcee1,6c4ca47,1eba9966,82dedbc3,aa2b57c7,2d5c2c97,56b7ce1d,735b163d,56e02bdc,25c8b227,2bca2d5d,bf252906,bb8ae50c)\n,S(ae60e777,6d9fbe79,d24cb8b1,f756098,191550d8,433bc7d1,8920584e,7676d2c5,430fe986,73772472,ca11be83,eefc8678,b76c36d4,346a311f,fff926fb,158d7784)\n,S(323a5e3d,9e29f668,d460b081,a5dce6fb,53e8d730,9c42f105,ab4f812a,62efb9d4,2b457b3,69483f42,16656d1d,3b5ea9af,da6216a4,47661830,c2fa56be,804776ba)\n,S(acd1b5b6,591e552c,864e612e,d69429b2,b3db8649,7a5962a2,a8b36511,7a7c1c9d,e6131fff,56f6900,926ba772,92526348,67544d25,1ebc4fa3,26562190,8e6e88b8)\n,S(6b4e2c70,817852e0,2a26286b,155248ce,f2e61e60,84742cf1,14ebf74f,785b36f4,8400951c,7a529bdc,2007130d,1cd5297,7398f7fc,d66e5a1a,1e4e8644,e5b893df)\n,S(c2b2c727,d67b0a46,1f44cb91,48c34744,4e6a375f,80a817c7,1517969f,8084ab31,fed64359,ebf37b0f,998aa251,9c281fd3,a52c47d4,89051718,82481fae,c36d5f59)\n,S(3385eeda,b5b2bd94,f794609d,978a0f86,2ec56422,bda0ef71,2207ca1b,904f202e,2808d2af,1db8a8ee,1c5975aa,31a9f441,b12a2186,746a474b,4907bb71,603d7443)\n,S(800f6cd7,f2cb437b,8470c292,3fab4786,edce15f0,d4c52a82,33519c07,14c803f2,981f2e3e,ad11aa0,cde06ca5,9b26028c,23e0a88c,ec397734,ad0152f4,d4a37056)\n,S(73aa0bff,3a9f286f,d3c103c6,d7bb6caa,ebfaf4b7,614f1f32,4741c600,eeaa2f3b,30bc529,81a9b983,cb89fe73,dd8bce7c,a54a2e3c,4fde6846,701f1da5,18c6f7b1)\n,S(9280fce6,ab5c13f6,80bfdfa9,c3e7612f,86380498,9bcf29ca,789169fb,a178f2c5,4b96ecdb,c5bc2e3b,2fd397b1,8f7f5bb7,aeb6a7bd,db0a3b23,3e74f7cd,ccae36bb)\n,S(72055c4b,bb50b9ef,b589be16,270d12ea,9f438780,e5eccb81,7dbf69d,a66e03ca,aeaa257f,c30a77dd,58574693,51a8623d,985ad705,aa1fe3f9,8915a6c6,f6bc7cb)\n,S(f0f3cfd0,c771e3db,ba687c7,3fa827cc,eb8e887,12abc8e0,3085d047,e7c1879f,2c612e7d,8b744c54,f8f0c4b3,24fe10a3,1bf8aa5c,cf6e2e20,eff98153,a4936b33)\n,S(97c78b65,70b0f270,6fac8fe8,ea4376ac,d8b61177,e5e7b3ec,67a7af9b,e6f5dcfa,1aeb950c,fea95858,a97da765,c3cb5941,1334609b,347c4daa,1279d58f,3be14c3d)\n,S(b39ffa1e,967e6fc3,d493a9de,48b077fa,4b7908f5,33a73eeb,9b5c9efe,9e509e69,f55f3951,81ac72cc,d618c00,71c817e3,f76c302f,11219e16,f3b40e75,ea65dc05)\n,S(159b9f7a,5ff27c4d,1bc3fcc4,d91b160a,1b2a972,8b1e7fd1,7351c663,f8e7baaa,b0aaef6d,86c54ffa,eba1c7f0,d789fd41,5e60127d,578c2697,a8380b7c,a4c4360a)\n,S(25810fd1,8d4a4b16,c7d07a62,b626fc45,6dff76ab,3c1361aa,f729f7f3,cb85e44c,f4052325,7794bd70,ad295526,ab4b8b00,9252dd5f,33578f44,2fcd2219,2f6a2d9b)\n,S(27e20a4d,5860a328,c499864c,9075881,eab36291,2da641d,6e1934df,473352b2,c1598cf2,888cb50f,e270b490,503c11a7,d3822a2b,e86a7b,65cb9499,3b45203)\n,S(483f454e,517a94e6,6708f465,ba217b60,6d684a68,4d9472dd,685f3bd1,341448a2,c13b3144,d93b9a36,45d23346,c5dcb70d,d338d06f,f0c22aa8,2ba68a61,7f9ad11f)\n,S(4f47b2f6,31734aa6,5ae4c9a3,c1532f2,67ef068f,83a4f266,e2e0a59e,be04e6e5,58f1f34c,f11b9cb4,5d33ebcf,3edab72d,6824392e,dd547a27,c0134d66,58d99d2b)\n,S(aa78eb7e,835ce84,b4f1774b,8e810cc0,d6f42a2b,11c44574,24fb6341,7797db07,39640139,d957d47c,59cc7541,d3f72e33,ee9ffc63,2171311b,cf493ea,185e743b)\n,S(d2598985,83c00560,11dc0655,c37580b0,31a3f1f6,aa5f5944,17eb0ce8,cc033d49,3641c973,9de8818b,a294622a,2dabe172,b6a83006,4d04ed8b,c841d11a,5af24b08)\n,S(4f023ba0,ecccb74f,56f38f87,7435907b,f2d2b85d,59f7ffaf,48712a48,55e26634,f80efc33,b15d5125,b8fc35ea,393b6c3f,a2ae094b,86a6ee95,bc48295f,b1a6a456)\n,S(9c86f08b,48abd097,7bfe13cf,a15ac8be,8eda4128,f7c143c6,70bf7e2d,763a1589,11511f87,e9ecb88,39eff453,d29d4db2,17d4eeda,c8468a17,1a152f15,c1c2df45)\n,S(3808718b,72e95cc8,fffaffce,cd57e269,c5e6ac77,69d8120e,9130d8b8,ee137576,f40ebdeb,cf5eb722,4dae59cf,8ed8b58c,c614a61a,9e3ccee,db789fd3,31ea728f)\n,S(8defd15e,399492fc,71c80a1,3eda0244,eb349f47,5c7dfb42,55dfa752,fcdda3df,d3dfa778,4353d0c3,b4fb0d19,ffc39631,a01786ce,e3b0cc7f,f9e4c5f6,7bf7a771)\n,S(8dac8d42,5ac1d07e,3a805248,798fade7,ed99f9d0,c324bd46,6eaa8aa7,dc24bf8a,f232fdb7,923234fc,d8b2f097,d354dd6e,62e9d926,20d28087,d6410b72,aaef8009)\n,S(87ce6443,f3bce6de,287178b4,f243c3d1,e45d26fc,6f811d35,329cac04,7fa90e1b,a897019,62414ab4,c582799d,77edf3b0,f0af0d4,8f70e875,fac33e95,39724138)\n,S(bfee6bfa,bf2fb77e,9eb60a3f,8b7775ba,124a21c8,741af3b,d22966c6,a8fdf08d,29a1c399,541e4bf1,7f26f215,52fc83ee,cd2e8be8,40b83fa6,9c9ce5d5,fbba76f7)\n,S(c30fda5,b553a800,2341a553,7aff72b8,44873af,8381b41d,aef9af2b,5cc2bec1,5ce3eab5,87d88d64,fa44aafc,ce34046,8a96f76e,65dd562e,7d14153b,439fea6d)\n,S(5e7151fd,594119d7,c5cadbf,e1b419f5,4d922607,728d70a0,f1dd4d8,3400ed97,6a8ceea5,a51d4a7d,62d36816,ecbdd75e,4c64ec96,6257820d,73bd9531,ea108917)\n,S(a9c8eb0a,66cdd5f0,f33d0620,8525225b,e974af7a,b50d47c0,4bf690db,ec86100b,f209cb9d,898731f3,b02a24bc,ff290cd4,a4371e88,f3aeebf3,29c9e1b2,8b8e0a2f)\n,S(955e79d7,93669150,471b1659,52ee6121,cb804373,5faf653b,9468511a,e3a2e439,68daafe3,2a9b67a0,10ea3bcc,1a56c7a0,2e82cddf,120e6826,1de0700b,cf930d06)\n,S(22d27293,d3c1cc6a,5b3bc70b,3bb7e1d6,bef24805,3c8685fa,c192b409,dfa34a71,c74b44e3,4fc855b7,53c4e42e,740dbb59,4d5d76df,b39de389,e6c837e9,639b3357)\n,S(d19fcece,f74b1767,4e9d91f7,1487aebf,70d46e8b,3a037835,b2f4e8c4,2137abc0,5b904bf6,3dca0981,3ce224f7,494ccba3,34ca9fe5,f365ca83,fe9adb6c,4adb7580)\n,S(6aa1722a,adc74800,d6609113,6bc6a6a8,1723c36c,524a873f,2a437c91,c2336899,8e97004c,df495b4c,63164058,321549ce,3d9709d9,ed667c36,9a4f1ee2,d6319d07)\n,S(79bd3623,9ee4d220,12d07262,e96ad186,b16e3b6b,720d052,f736f851,b0ea6efc,a4b43db,f568cda4,1dc972c7,1c7c92c3,6a31166f,ad6b80fe,42df4dbe,f418729e)\n,S(b5e02b2c,146337b5,67583c5d,3690c0cf,a1c7d820,14028c9,e401182f,a4f16ce9,4b9646be,3facaa70,e793516f,a0e8a142,1a819ba6,718d26fb,938e2795,9069e0b2)\n,S(8e33e271,de2deb4d,6444d64,387f790d,14a2b685,4b38857d,d05af743,7a7403a,d82d53a2,c7a4a1dc,eaa011bd,3e0ceb0,e08d73ff,fe9d71f,c913d6e2,89ecc429)\n,S(4ffef442,77dba780,e5769b73,feda37da,abd6ef6,2f5ec36b,74593ca,4c19c2f5,a8a30857,378aa0ab,9ef6162c,fbb09f9b,796755bd,67bf9d69,4a186813,d392f854)\n,S(878b652a,633805c8,b58b0334,11b9246f,f7e42ed6,ecba6bde,fb737126,e9f57368,2cfbeb3e,d691158c,d3ae71f0,b4a41d42,148c9711,d274820a,d541efc1,56e85836)\n,S(ef9a6a15,aee2aed1,46b99ee6,a79acbc1,a0aa0b2f,1b082783,dd40b106,9deb415e,9909e2ba,7fd53514,a1bc4480,2b49c7aa,cffd9cda,19c54d82,6d9bd08e,49e97240)\n,S(d5c248d4,1551d230,60835885,5db0ce8e,c7814e18,c2d548fc,dcfac207,645bf37,f9c5e89e,7bf01f82,8cb78c88,c14d50a8,3cbeb45f,82daa9cb,3c3804c1,15a36f05)\n,S(edbf25cc,a526157d,9676e614,81455682,6dad0c0f,96ec289,f2c5919f,57227d1a,6845488,be056456,4a833c13,70d37257,d0ca701e,f6e574c7,409dae02,ee99554d)\n,S(5c12026f,b8e2e376,2521f5cf,cf9286b,14be80b0,dfcf378b,26fe6ea5,4ccf09bb,3d98d5ef,4e2c6528,7950154d,581c9a44,94b81a50,40ba9047,1bfa6758,66daa596)\n,S(c27e6243,5056055d,614dcef7,f67338c7,ae728bd4,af3970a0,b434d2b2,e48e2d6d,76b586fc,703cf946,f78839ee,bcd28c56,9e372d97,856333ce,d82137aa,7d8525c9)\n,S(a298c704,5140186b,4d424e8a,f98ee604,7f67603f,ab14a7e7,b96daede,51abaf8a,4dc70158,2a1b1935,4a5b430d,b4a0c21c,463b779e,ba72f108,5d7d638d,68108fda)\n,S(e1fce957,82dae8b0,ac204fb1,9496a332,fdf40014,88ebaf07,3a62f33e,192013c4,40517ee5,d5786ff9,6aa2b50a,a77a10d5,e8ca6439,44f308a4,a264e367,1dd02f4c)\n,S(e719bfc,5f06b800,8e4e49bb,62361544,1a2b0c42,f673f3a2,1e139bfc,b097d6d,f0c83c1d,83f5df68,a1e3929e,e18c4945,d14e2c33,4f9165e1,a0a462c2,aefd7822)\n,S(77766a4b,a9d8cd62,840b1127,7e697dba,dc27c50,d9c8e35a,17f4c38b,50ad0a4e,5b3a2ad9,448327ba,22265ac,86c190bc,60b7586e,6f6e4554,b26b69ce,231b6431)\n,S(f237721f,6215a855,f8660cda,41063690,4f2c9dd7,6260c292,597f28e4,348514b4,109daa1c,187b9f9c,ecae8c6d,33cb9874,46f5ade9,d57b3651,bccb9338,1acfef79)\n,S(9408f5d5,e8891a1a,3cc4e7a8,a50dbc83,97517b3b,6c5af3b9,f1953f09,a67b3e08,1b82f212,c32f1ae9,c95f87b9,5ced2bf,ca33e954,32d9eb90,ed879ec9,59691555)\n,S(b2837655,11707926,c9f214f1,3e90675f,883649c8,8f1660f4,c4f9f6c1,552a7064,89553739,15be8962,e6f03ca4,5bd5516f,be6ee041,519c4131,829b0bd7,6d1abfcf)\n,S(ce42ba00,36b5f54a,4ed2a9dc,b6c0d29f,98641331,3f92f9c1,43767bfe,4b78f4a9,6e547292,cf35baf4,768c9179,2f706bfb,39b757d8,2452a802,4a7bd37f,e3a048d4)\n,S(bb3da2a0,1a063a97,bec9325e,8d4af420,d3942bbc,42f0807d,8e9edce2,eccbcc59,7c28e7aa,bc39907f,ef58a19e,cd6e7b2e,25d6eb00,8da14d9d,5c559d27,fad70b32)\n,S(25d84c3c,97f3a074,ea76f620,d6fb2691,dd3e9592,6de8eacf,5392c0de,36c490ee,5e0e7745,88c8a9b,7b91ffb,1ad6fd27,4153096c,9e759540,16f73a43,16d5651a)\n,S(8baa3bfd,ca256f18,2e55a01d,e7c07617,7649942b,e743b4a7,faf39446,84d5765b,6147e897,8bbe15cd,171c2816,4730b211,587bfe7d,7e71811,7f308b80,d30506f1)\n,S(507d6a0a,5b7d0385,11c65dea,8024c706,4d3b6b9b,287c7192,74c69797,21f5170,139f1647,70ea83ae,47ea8141,c3ae32bb,c12793d0,ce30fb37,2dc3adad,7f7bf5d3)\n,S(7c6992f7,a059c5be,99b7354b,10fc217c,e45620f3,b4ff30d6,d640fd3a,26bbd846,964474e,fa63641c,2aa7062d,7139fbec,1f64e6a0,50e1ad03,2741a0e3,b5e0bee6)\n,S(f62832b0,1bf65b23,14850750,9ea6f157,3d5e3317,bfb0a38f,cfcc6692,5a698bf2,d7314810,7b8fdfd7,3f6ce6f8,84f375bd,1546cc3b,8c75840d,3668c2a6,54c1ec95)\n,S(aed21cab,d8e4ec36,2b4e2091,3be3c7c4,594f628a,cccca657,deff8b9c,6bd1ebad,f800ef3,833c7ffa,a8ade1ac,2f41d456,b880a205,60251dfd,f9cdd672,bb7100f8)\n,S(46de78a9,343a9a41,6b91b877,aca94252,9e0ba8ca,b6c01f66,e06cdfdb,714bf405,c1441252,4f3ea73e,e12809c6,f19184d9,81f30b87,8df8bf6,6c89d98b,ed4d2bcf)\n,S(2832b5b8,ab82e932,5356ae19,3043b99b,ba4b6591,a750a174,a6303b42,54bd41bc,c0363e03,3f59f149,23ece534,cb86695,a8275224,f490849e,249e63f7,34aba440)\n,S(5b57c502,4b5c1621,77cabe39,b0f36bda,d85bd04,2736c7ff,9395f0c4,cbe43f9a,842407,dc0c0473,f1bf57b9,b35d84ed,b282ed4c,7adccc06,8530c8c1,bd20766c)\n,S(b384da70,8063758e,825bf821,196b4a9c,814c45d8,a9edbaf3,dac4cbb1,c1c2f103,e6e661df,6400cc40,74f92596,590757fb,aa237515,af30ed13,df30befd,230fa325)\n,S(36ffd991,563e448a,9b0a5da9,61a5466a,82a5b672,15ec8f8,e7300c5a,5c9a5e1c,97067835,fc17d47e,94187320,84d722a5,d1a742d6,4b513b6,32aed897,bb961c)\n,S(8367e452,57c20367,e4e60ecc,33adcd87,5b9d142c,c6c362e7,f5aab34a,ed89d81c,fc7ff090,3ffab26e,d38a9e74,df43819e,b77ce2d5,bbdcf27a,f1f3bf19,948be121)\n,S(f6ce47e4,8cc9296f,b40539e2,41238658,4719fb9,d4b1ad17,9c98969b,dcb0564b,368d2b6a,fe5edc0b,6f159017,5cd192ae,b524a606,7800aa60,930d60a,87950e1c)\n,S(438c23e4,bedaa6f0,527d20c2,a725645f,194ccb58,8ff9eac6,5091da7b,f9fae013,54620a30,c7218257,dbdc93b5,3722a213,e28dc6bf,f8e48b45,6d6131a6,92ff15f8)\n,S(1cf672f8,cc9434bf,7ace8722,85db5017,a1fa1dab,2eec7fbc,84e8492d,86bee7bd,d6d23d25,8bb4dda5,957ccced,b767cefd,8932b511,e2479018,16734bc5,b5cafdcc)\n,S(47464e12,b0fa29b6,6e9cd157,4f7155fd,94305263,8af28bf4,4325a23f,3e1a2861,209a41d5,3bcdf566,5e966e80,84869a83,a2468db0,a1b19e56,81da864d,a2b05141)\n,S(a9adfba1,c884c904,e6877a0a,9bbf73ae,c4ee223,e0b02ff8,717c075a,6aa964a2,ab16101d,a7bbc35c,73f371d4,afeb527e,b2d809a0,8487a36c,6cfae404,83f79dc8)\n,S(2932fede,10600312,5ac983dd,659ecf95,824421ae,5f417f97,d3101c6f,c58edcbe,8601a743,e666156b,f2e34fe0,6f4cb11d,2df54fe1,7c842176,e1075423,dd76d727)\n,S(5abf5528,2f87ad04,202b62c5,8ff7440c,64f9ba39,e6989df3,e31d665a,73a50216,71dc4e16,f2705c02,2ca1b37,edc5ce0,610b6f57,282d69c5,d3269295,5a1fabf)\n,S(419495d,9a121cad,41887fc2,82c2c7e6,f359cbc,d24093ec,57399c3d,a801843a,9152e197,40295094,11afefc7,83990732,d5e6617c,d8e389d2,956536aa,f73e0c31)\n,S(fca38482,ea2be49c,3c27979a,5acbb158,a902bc4e,226f7eae,4165ab7a,29fbc3af,1260735e,5fe62664,90a35f0f,7296c441,bad50a75,7b00e34f,28856a6d,cf46f5f4)\n,S(bcf05123,3d703688,aca13530,55bc3ab2,d499ec40,8c912de1,4b7af456,55065d06,f32657f1,645690b,35484e63,a3456885,c16d4991,7670e71d,5f5cb65f,a5fb8bf9)\n,S(4e70b42f,6391b424,b159cf74,f5fc96b2,68bf6cc4,a26658e4,79dd8a4b,8e9a92e1,8ba78811,1af31c06,77b24fa4,4b6ce356,66c595b2,3fe4fd36,591b33f7,e53b3688)\n,S(3fe853d7,331c60ea,c213703c,a7628dc1,3cdb83f3,8a25ce6e,1be84f0d,e921742f,fb7dbb77,c2c6dc13,6f596154,f24dd3,f27b5125,9b60476d,b230e54,5ddca5d6)\n,S(d803377f,c3cadd40,a2aa810,4e97641,ca42f582,3ccf65f5,ee726349,f648b9be,6357b84f,281a8080,54ab7fbf,ecc113ac,aeed2118,5ad12900,d824719e,8fd6fe99)\n,S(5ddfdc7b,6f9e7162,2b7128e,77fa5ed2,90a05114,d6d8b845,94106c9e,70bebe1,23eaced,fa1efb7b,fae74c81,a1d03066,714b6dd9,1198e1e9,d5911ee4,55cd76ad)\n,S(5f150243,c964948f,e91353e6,b12d167b,7913b46e,d7214411,5bc4cd4a,3b6f7dd5,36abc949,7a2fd102,14991e2,ba360c4f,b18147cd,955754e5,71cdd4d9,b8af903f)\n,S(24b4fc97,5b0c4429,7a4cc89c,2b127eff,539f022,61544e14,97969bac,50942647,bd3e3fdf,54ad07d8,5faf8881,9014a77b,11d96f2c,a43cb8f9,a823a257,9eb5c207)\n,S(a020eb35,5556b5fc,9de5ba2b,28644187,f11b18ea,ae61e76e,1dcce55c,e42202e0,9a71ea1f,1ad2f457,16b667c0,a982e2b,9765ac6e,beb71880,27e9059d,56639f66)\n,S(60b79064,f7173eac,60531de5,961c47e3,8a224c78,ccd58a0f,86f6afda,e1f37a68,3ad04a4c,f6a47d6d,6b9fcbae,d8b54a7d,3437e4e3,627256de,cfc5f38c,490786b7)\n,S(835cf1f2,b57d1e54,4ac2d915,9c8e3fdf,d2e233b5,d1109685,1777b7e3,a1f7d60b,7d23dd35,136edb13,bbbf7733,9e1c6e01,a7112f95,7c929b16,1665ca07,f6a84b31)\n,S(faf74350,1f1edad5,2e1d8ad,e4b319bb,606cd7de,3188cdca,b1d39527,837f77ed,dbbeb0bd,bffb580e,4b9a0fa0,39b7acff,fbcd11b,85751476,16d48bdf,fe21bcc9)\n,S(396c6fc3,e072bae2,3e7f74ed,f121271d,44091a5,d3b2a762,a39dd77,d2de938,5de522f8,a143544d,4cc49940,96b8f54e,9fb0e076,f46aa479,9e99d162,de6fa667)\n,S(f8ab940,ad8df2ca,1c2622f8,8ef20c,ae8e605c,1e43b684,881147ee,d44ab88,99fe5281,fa7427ce,c9857163,f804c429,630d28f5,33e451e0,4063e70d,ddbff796)\n,S(a6202868,af6dfffc,1e122219,a829c374,8197af4c,95901e78,75841b46,bd772367,2607a20b,c82a49c1,4fa54eb6,f8d68d8f,fe9c4fc4,d83b0e4d,145f7bab,5e9af45)\n,S(b12d1993,49a98616,90764484,23a4fdbc,cfbced5f,b76a2bda,4d7c4984,7067e41e,a66dd4e0,ac6c8ab1,29045eb3,f7014449,73fdd555,7001b7ec,99c33d,c2d75e31)\n,S(8dc8f55,b4990f5f,c6cd3b97,b1938304,9ae0a734,5cdc9c64,fd67bdc2,15eb3b3c,1be7457d,62cc8fd8,cbb54cc3,88722f4a,c00ce438,c847c2f5,fa641119,e5435d83)\n,S(2c0b7337,d1db9e4b,7d521c4b,36351f65,f128643d,add0c53b,1b6d619c,658feeec,e8a27b9c,eb7c1219,f7bdae62,c07cee15,ef765b95,3b082d9a,d8b99005,b39bad53)\n,S(891fb4a2,50100689,a48a0d1d,22414ab2,b17ad692,bb5f0d0e,66d06c93,da3bab35,41685166,cdf43c13,be93c03b,c347f3c8,52d06c0e,661a4c7c,cb53e24,e7260f6)\n,S(4a3379b1,511c440f,e7213729,de668ef0,39fbccb6,1f5bbb02,ed99ed3b,69ca1738,b12a3dc2,39e9191d,a89d75ee,db44ce88,17b3bf03,d4172b00,39d1464c,a3ac0f6f)\n,S(b8b2a7c8,54936bfa,62da360f,83bf8d65,7dc58e3c,1c8780d2,2c57061a,5f815521,8f922c0b,7719362c,25ac7001,252a89ba,1cd4412c,17c2b021,c065a3d5,f6a2d15b)\n,S(9066fe19,d1dc52e5,7a9341d,77cf73a8,2fb56ab6,22c97a7f,f0191247,db9624fb,23d19b43,6ec3c575,d81d4929,eb6789a4,c281f5bc,abbc896,2153e7d4,711baf50)\n,S(bf9ab14c,19c9e9b1,ca1a18df,2b5b73ee,9f32c8de,6e6757c2,b0534d75,7cced8ec,ec969923,3c3863de,aa72418,837a3af7,85e79375,d5bc91dd,481f174,e9759c0)\n,S(68b2686f,9c654a02,225b7e69,e8eb7aaf,78c65686,e885b1af,10265e35,316f9d03,1d3d7504,846826bd,8554d407,739272ab,b6b407d6,f4f7419a,f284b81b,f14da9c3)\n,S(20dc8385,5251a21a,94c989d3,92c9f36a,4d3bf669,bf7bda7d,e0427003,710bf2fa,217e6ff,713d329f,f9080c4b,3608c877,975d6794,5623e24a,974760f0,95aa749f)\n,S(f0beb49b,555d998c,a39859bf,8c59184a,5c822e46,9a875568,1689a1ca,b5fd0368,e0e05ae7,a23ddf94,ba33b3b3,a75d3f4,2e8ff7f0,160c32f5,3bd08b40,72664aac)\n,S(8f1aa973,270ff9eb,a41ad8ab,f2cf4c44,16ddc1ca,dc8a62cf,aab5a3b5,c4a0ee57,90aa3660,e3409b17,a86a441f,12f6eba0,2bd6bbb0,2b9a0a87,71e30a6,595920ec)\n,S(c71eb135,278dc147,60cca847,a934b880,fecd43a8,aac9dfb,41382283,928a9957,41667f77,485281b8,89307ad5,decc7f6f,51d23ac4,7e71b299,a9d8715e,b6003804)\n,S(e900726e,50d66a9f,37d09df5,d4965c5c,fa904d3d,bba1d180,b0fed651,bec41c81,d520aa30,db036f40,b34e64f2,cdc7d7b3,117f7725,786e9d5a,921c5f09,71028e39)\n,S(940ab0af,a15952a9,ba3a6d6b,720efde6,58d72dd7,4f87cc3b,edae63b6,123fa38,fec6d747,6f788a19,b85e443a,a49116e1,6e5061f0,53c40702,f8765d28,f3bfcbcd)\n,S(9a13de6d,643e9866,4df3ce9d,412c5ce6,a03ba46a,640c6be,8b62e70c,a8c76949,42388296,6c2d8d87,8b4c914d,4bc6cbc9,a4601630,2eb6a499,6103953,6926dd5e)\n,S(438429b2,b31129d9,4a86b149,7d7f62e9,b76d6a5d,bde09d6f,256f83ba,76c577c3,e4360186,a7229be1,b33cb600,be833bdb,b2398e98,7c46c6cd,2e44f932,5cbc1c7d)\n,S(3f63b25d,66d472e5,fac7b524,e4300e97,c8bb59be,6a3a8f01,8c1677c6,96d02605,4587042,158e19cd,2bd19bbe,5cff2c69,d9971aa2,fbdf649d,44c95f3b,50ca39dd)\n,S(661fdf7,17c7a520,a384f90b,98dedef0,47afe5ed,6cfbd3d1,e1735c5a,bb8cc0c5,bd9a243a,b43c0e19,2592f00e,a52f820f,b83b7433,b1d96549,d9970293,7da80abd)\n,S(b9c1bb26,daac6af7,d0c27c36,7ea2d4c8,c999d7c,75bc58cc,279c5f89,5ab951ce,a4d3bf34,a42b86bb,7c66c5b2,eed5d7f1,b872d17b,b58c938a,767b87eb,1b140f4e)\n,S(cf5ac4a0,fc6cd9d8,50aaf473,3efd2bb9,7d9b23ec,bab5d099,9b11bfa0,b127e8fa,44926316,c37f1718,7fa94fe,3a62caf5,ad465d77,fd484287,2caf1605,f91070ec)\n,S(aa52b2af,ab8da32e,3b882c57,ff0a34fb,749caaa1,b3c29b74,13c86471,beb3b422,4b562728,4a7be595,1b68df35,e320252f,73326084,16c60244,ac4e3ecc,c0859ce)\n,S(610f22e,b3aa08d0,a9f2909c,546896bc,7926b056,7987217a,d347f183,4868211c,a52e190d,f35fc4b3,19571e6,166eda3d,2dbf637b,c27746ea,c1bc3552,4819e6bb)\n,S(13f24c3,a485a58c,e0454330,79512796,db65f15a,4265fb44,acc3cc34,c51a6d80,faccbfb6,18e069ff,3cdc4327,cf807366,f07976d,b24fae61,1a44984c,7f3bc3b)\n,S(15cebea8,49279b29,cb0112e6,922c5a85,caeb18fb,415cebdf,92285d9d,a0eb0f24,23e5ccfe,158ff9bd,539af7ed,4a77b1c1,c36de452,8d0c0d05,821e89f8,e075d833)\n,S(2605a18e,fb7d5367,dc41b1d6,24d61a,cf92e0c8,96f29a5,5f2dc872,4d97f6,8d6a6774,f111b7ec,dc58ae51,80ad6fd2,fd6d674c,9402e2f4,f944bd50,5e66d375)\n,S(e588e272,a78756f3,7fa36d6c,d35b362a,25cd0513,3694b56c,33d0b05c,be7f9995,15beb983,20b84296,9b8715c6,ad23e53e,115425c0,d071917,66e56ffd,5472fbb7)\n,S(80032522,f264edc5,b6b205cb,f79ca7e,3a02cc39,93458b6c,cb98750d,bd6b46a5,479c92f4,fb4e1eba,98f8b93b,5aa9725e,fd2c1de8,d4c3d043,bca7183b,851a44a8)\n,S(950c040e,e1a581b5,70501308,a21287e7,94b525b7,f916d3f3,c166a2fa,1641bfaa,e43db20e,911d70a6,9f171725,f760237a,52441a88,dc385a75,1e4ef1db,b738ea71)\n,S(e899ff36,423fee57,2e70aeca,db8bc0f5,a634b9be,282dd875,9db5500a,86c391fa,7ed97b0,dfe6b68e,26710034,f87a911,88611790,cb18a790,a0248c7c,b43a9bd1)\n,S(d236688f,c206b7a,8f8ce5c7,66e19fb8,6a7415d2,9c57845e,8332a5cb,d8a1a51b,72f2359f,e3d54a60,fe6d6508,5183b525,d5098887,55219113,adb05c2c,656ec9e9)\n,S(8d3d7c71,da4b2f24,83e458c5,85c628f5,430eab5f,ddc2686a,e94e2fa2,119dcccf,33c408e4,7948f20c,bd79c22a,d647ff1e,1f435c03,1f594aad,82778f58,1f61178f)\n,S(320f137a,e8918199,51a542ba,5d1063fb,fee4b750,c56168a5,87d7fd9b,b72651a9,b840546a,e2a4e1ef,32275a02,153bf003,8603698,a8c5e232,6795bcf3,d3c402c5)\n,S(9e8affce,3fe6b259,f4568607,2d46401a,7546c87f,9a46e0de,8ce577c6,1881352c,d0ea3701,d83b7f7c,260ebaf0,97236525,af8639f6,c53ecf92,73e77bd4,c29d02f1)\n,S(5df465b8,1d353987,293c915e,a24121ef,daf70ff4,9ad2bf53,9bec72b3,c61eef64,3206c5ff,5ae4c841,58c193d,40f46083,8b38047c,f33c3e54,38541a7a,d5e690af)\n,S(999cd326,a18c350b,f4861d48,826ba3c5,1312bb39,886a064d,6e1465d4,8ef28f58,2cd8ab2a,d6dccdf6,7998e662,99551608,a9fceab0,be884b0d,d418911d,c8b1ef12)\n,S(81d8fcee,574d9c16,fa2ba6f4,255460cb,479a6667,4761b4cd,c0ab026b,6bce163b,594e7f34,f5897a6a,3b79a996,f5a69814,3cf771fc,fd7c8ca6,38cb4ac5,98673143)\n,S(9e83d724,b9ac73be,f932b42d,56f85183,85839c9e,c953a0dd,4da6d843,d096d278,f8b18cab,fed05acb,89efda95,ac496ec5,d3a000,a4a1d689,a1afa5e2,30c88869)\n,S(98ba38b1,3b443c08,aecb1f64,73b2d901,908ec33b,35baa317,64f91144,3e320c3e,343f61d7,fc2232fb,f5d2f972,e6f42f49,d8ece7a,3434a0a4,4df1d602,3f99b84f)\n,S(2092ea5a,9adf5eec,5a7a9488,6e970671,5822447b,e6c35285,de704806,52a875ec,ddfb72eb,52382722,a94facc8,e2616661,95a7e9c2,6594228f,304adc7b,ea4e7f35)\n,S(f9ee909a,8f45a05e,ac77bce4,ebc97410,c044c639,95a1de76,5b9304c2,2eeb75a,861031ba,93f5b0e8,473e50fd,2aeaf13e,3a39c0d3,7e2e9d51,a41ee4ee,1301705e)\n,S(a13878e2,3bc55a7c,b342dfc0,2eea9bf9,5c676e27,c63e8603,c75ce535,35df101c,35c0ced0,3d4bb091,92a2f83,3d3e81a6,233f0585,35c72ed0,1bfff82,7b108427)\n,S(e8ec81d2,cd32dfd8,7284cfce,9d80c03,b863a7f8,3a71865d,34f7b1b6,104ae3e4,60be9b77,ee12dd7f,f532b01a,f517bfc9,1d24c4e8,b0865e4e,c6e27227,417648b)\n,S(f07cb255,1529dc43,3470b18f,e4e06390,d48e9898,69b9a97a,6642b898,1cf35b60,bd46eb77,6d74633d,59b4b941,2e2355a9,c6e85421,59513d2b,a3297a6,c223b550)\n,S(39bce423,dcfda9f0,a97189ae,a60b836,42becd3f,2f2cbdd8,2fe884da,baaf7f51,c1599caa,4b71219e,74490312,7303ec91,f3430be8,14979a2b,2db78bb1,ea2c8e4d)\n,S(6da611cb,d51db814,18b3de21,13c9e4ff,58142f67,cf2d8ec8,e0fd105,1e9ad3cf,6bc2f048,3250f654,fdbd494e,bb03480e,f7fe5568,2e19cd70,4d178ff3,41e4b7f)\n,S(cedb9c03,8d2e0eb9,8a4a5e8e,fa7e95c5,f4e13a47,79470c70,9a3c9fbb,8b1aed8a,79a2fd31,de42d8bc,820d5d56,ed084f40,46804fa5,f7f5e8fe,eca6ad4d,859a0d40)\n,S(7d895498,6d1106d0,32f40458,f6c41fe6,25393f84,d00ded8a,3a07a107,5ae3d82,5d4fb6cf,ff1c594b,61aa117c,7e0ade0e,edd110c2,b2109866,ee7d586a,1a6d0d61)\n,S(a4f29162,737043af,eb1e2606,93ecec60,851aaf50,c6e9daa1,75a00c43,d7dc3df7,beebfce8,fb764b15,38fabb20,145aaed3,92265d7b,c4628846,b2726821,c79c4439)\n,S(b6389dac,de4ccb08,ec0ce964,e689bbcc,e0ba8165,6680c0a2,9cb162f0,f91cab70,e440c7db,d2d02474,17b2826d,28e31fe7,9ee836a7,eefdacdd,679040ca,50303529)\n,S(72ce6dac,f752c36f,978ac2d6,aeef37f5,ae4ee016,999ccb49,27b8aefb,f6fcc9e1,ce6ac297,bbd84403,d60c6d4d,5e01027e,8ad38acd,e796bbc6,7c45f10e,d79bbca6)\n,S(efad336f,cfd7425a,560931fa,a6bc50c1,4fb3e5ad,f8ad175,31b13846,6c255f06,3fb784f4,eeee9a11,ec7ab559,71817163,9eab6b09,4419203b,2b422e8f,e15a82c0)\n,S(f98d4a2d,4bb2166,7c74bd1f,393ca57,22002c6c,f382b49c,2895deb2,34eaae3,9875e31f,7e3778a8,34750763,c6147cba,97a26f8a,d669e69e,9a36cc45,b56fd148)\n,S(768cf74d,2bc24233,2c5eea34,2ac13ed1,2b0d161e,65876eaf,b0b89460,c934183f,42337607,e55b4d7a,f86e9f72,dd06a550,af083b32,e72e6265,4ba00fa7,a2fdc34e)\n,S(ac26f3b0,1d05c625,915ec27a,aa916d0b,d34cfb6e,22525c59,9791274d,a5beff7b,e36760ac,89b61681,d1913bcb,1ebeb199,a3005576,b8bde54a,42fcecdf,e94f4045)\n,S(dadd4181,741a0be2,e665045e,1b042a3a,fcd9050d,a08d1285,21298f34,1f74fbac,6cf46fe0,da78dd04,261e4e2c,863574e7,f6a4dfbc,a902802b,8056e00c,e4a84f60)\n,S(e5651598,ce9e6a86,2fb139ed,143f1b73,2c4e1eea,91a88f82,a6fd0ab9,1a86a3e8,bb421336,69ab6c10,109723d8,ff4d5f6c,770fd8a,d569a21a,9e9efdb2,f1f1ac98)\n,S(f26f791e,b4f0f596,39b69b45,401ee3ab,2d47a2b7,dcc3d65,de9e48ae,270f5b02,22e34b25,1fe5bbf2,5183c799,ea45757c,2693c591,633a84fb,e1a9bc0b,470ff699)\n,S(a50cf10b,95612f48,7a9da048,a84dd8a3,2d2bec22,9db798ac,19fde68e,623da9da,50107d3c,a76a264,1db9f9f4,7cd60598,ce345ecd,cc3de888,e4c81553,bdcc576)\n,S(c74883b9,2736c1b,d5f86a5c,1817cb9b,e917e5ab,5ec5cc10,a1197f1b,a45c13c,e03c43bc,e7393cff,d53e73b,60ea2759,d1c2bd55,c2b7a32e,847f4bd1,2c8beedc)\n,S(a3437d0,1741ed88,bb05c00f,629e2c8d,be7cada4,dd002e9c,98dfe800,9e1c0a9,a627e05a,257fcabd,1fda00af,a4d3eef8,fc268e67,bb41c9e,d2160713,847bca1c)\n,S(a6cc4988,f179bab4,de98ba89,530686fc,90c00c77,4a3f093,8329ffa3,99c8312d,f4eba473,7db25a79,29bcad7c,11346471,bbba86ef,4f611643,712ff475,9d70b6df)\n,S(efb34a8,f5778d57,b3333077,6ca1abe3,9e680183,13936f24,da1aca,70b84dbe,a94a216e,fc53fa98,320878e7,167536ba,7e5845ca,149b2595,2f029878,7f428d3f)\n,S(139846d8,1385e6bb,b23914ef,487fb9ab,19ec3b8,3fa45a94,a2c5fbd6,fcdfa07a,4fb7cc4e,599b10cd,a99f6aff,28dfda0b,62d837b2,e8c96aa0,9c34cbc6,acfce099)\n,S(660923af,98ba567a,83df6eea,ab53ea62,49c2090a,13299bb7,a538cdab,adf2a101,b28b58ca,b1a29722,699890ee,8462f440,ee2a5686,9715478d,4460f0d8,8c94bd29)\n,S(f18092b5,8c7517de,3f389d31,f1a6345a,d2f86bd0,c1dc9a98,d3e03890,f52be3c6,a83e7a04,91484ed7,7dc27697,33b0321c,440ca763,2a36c6d0,7e8a9afd,68f9c906)\n,S(e8d0aa0d,1b2c540f,38a6a6e2,5b5fb295,7b700467,648cff74,bfee1138,81d0ab75,a324cbbe,52055c1b,d0cc3f29,88a80982,1abfc0cb,feaa56e9,f19bb8ab,d314409a)\n,S(2586a0c0,230a0743,f9613df,51f7463e,1d8ee72d,503025f3,c7d2dfc4,6f526c1a,a29735a1,eb2b470d,43c7b469,4850f5c3,ce9b1da2,47406653,ede03ac0,9816c735)\n,S(217cfa88,8d826d46,c31bb2d2,7dd7c8f5,8be68254,e42c0e48,a12cab42,677dffd8,4d5d9c30,9ff0fb15,35f9901,7af91ded,34179c57,f48131a0,6d96b6a,c01ac4ce)\n,S(4ea65934,71aa3b8f,9e6791eb,37cfd67,943af3bf,100d7ccb,8203a353,1aedf4c0,feed9ac4,19a302c4,58047403,5c95e997,ded8a534,c88beca5,6c12984,84b7b4c5)\n,S(974b828b,51026aa4,ea522150,c497eebc,7d7759f2,c9645f7d,4faac24d,18c7a1ae,c0369da0,c3087336,2566f344,ca81f261,65cd3a03,fcb05093,96d18fed,4faa9d26)\n,S(d9815b79,d572d7a5,94dc8ae9,3cf45b36,99bb4544,ed1d5755,529c7096,9c978186,9fcebacb,f5181954,ac4ea24f,508fa67f,5b6c20d8,64ed53ec,d67e358a,e75241fa)\n,S(52712597,d9bd4e7,cbd506f1,bd65aac1,478208bd,f9f6ad38,efd2b30e,b8368837,52eca996,ba2cecad,9a0911d1,65368010,68bbf0c1,12d6dd79,aef23262,8b3df18e)\n,S(d94231af,d890f5f9,ef70e1fe,e8a8f4e8,ed2fc89e,2b8ad818,6af55de8,449abf6d,26592b6e,f0789218,273475fc,32d865cb,84278ff4,8cd0de27,e0646549,219e2867)\n,S(64851231,7a69d956,3b3a99d4,b763eb9a,b661f7b0,714d34bf,e5328a4d,a99a7d90,eb20ba33,515040e3,6fa02088,5a3e9216,1e06d3b3,78122fb4,af4920a3,51d46bc6)\n,S(d0a4b11b,ef662f17,98f413a5,fc062567,70df9edf,ee00217,79c3811c,ef68a8c2,d4bb9920,18e16945,c38ef5c9,9ab39eeb,748b7a63,ff4d4dbe,8b329f74,dd70b9cd)\n,S(1d89b886,c4b24868,1fbe103d,dcbd76b1,dcf54637,3bd5249b,3dc07f06,985802b6,a339ccca,aacd1057,7e36056b,a3a70c6a,a7885a45,42bcdf30,30d0939f,6369535d)\n,S(b6cecdd5,936343e4,f136682f,a38ba0b7,9dbab223,beb0b6c0,10a75cb2,e4dbb256,2935c053,87dd87a2,5bda5d1f,ed813666,5f77d12e,8242dd58,3ba8db03,319f7be8)\n,S(84b244e0,a0cad847,35ca6c5f,bf581968,40f1b491,98682c4,28aea50,bf2f8e24,62e28e8c,7df80b11,f5713087,ee3a5d8b,148c8e62,da0de1ba,d8289ac8,861f7a71)\n,S(f95eccff,2a908028,39436610,2e377c41,66433159,43feb6d1,638df6c1,cc114d1a,bd0da83f,1a0306cd,b8d1b9ea,189856ee,56d16e81,61b4f9ca,7de38d2b,e558eba2)\n,S(7c4cedfd,3e613de4,af2ccd25,59a2dd23,2a1e6335,e410d327,27fef321,d10f55e3,331f2109,d9d00536,c697f73c,672a660d,11d4827d,41306696,cdc224e,e7d7b1d8)\n,S(235c2e38,1bf2d829,e4b918de,435e276,f88af866,ed31a1c3,4b9f7203,a0269713,50dcdf0d,2671092e,e7c48614,44eaa87a,815a1304,4600fd0f,f26104ef,a0dbf929)\n,S(2a961cd0,9ab50975,517ca488,d1c4a388,cdf2686,c5dde923,76128683,ea07cd73,85c91076,b2ee46d2,3cc0f7fd,e7654723,84f84c2e,edd7552d,d7f93be9,2398abe5)\n,S(958bc491,f0afb8cb,8713f591,cbf183f7,e00c4775,93d1b51,a628f40e,4cfd65e3,bf5be339,fa21dfe4,9113e026,af0761a1,b2a09a7a,ae8f6eef,92d50c6a,89a65b3)\n,S(6e960ca3,7b5b7abf,99f5a2e2,46b7e953,adb5ccc,6424e73d,dc865bd8,3d5f78fd,53ad4bd1,d5e9643f,5f2df612,ea16fcc8,dcc4b0b2,9ccd5a81,bd659b35,6a5e0e15)\n,S(d7ac920e,9272bbad,dd961525,7d91d6a8,e747e4a7,a48ddb5a,8b2ece8f,f0d05871,6381b9fc,c37bac5e,38c0b96d,c098c3,9d4c7620,61b66dc4,adf66e24,f0c87ed8)\n,S(9b0803b,1de95706,ec123844,ebe941ae,4481c12f,f2d9c078,b6c1d531,5d730609,160cf3d6,b12afdfc,eac2ed01,fe4b801c,5a5ff0bb,13cc3ef2,f5f0962a,6b3fb1b0)\n,S(5d50746e,5b74e006,9dce0153,aba04216,991bd509,f022f3ea,689553bc,a4c5fd88,b0fb205f,d2a14b1b,bdba2e48,429c92b6,99cb336f,b6ed0e58,9276118b,6b259ff8)\n,S(e1bc2669,fa27629c,92708748,36008c2d,ef4483ab,c686ecf0,bbd01a85,fcbe04ff,6fb7af71,83c0921,6173fd43,5b3a1b2b,15e8b149,3bed8e78,3d409f84,cd95ecf)\n,S(cfc9081c,b5a893db,40c51979,7dfa1cf2,f36ac620,cf7017a2,fe90dccb,d8bfbf78,26a88d23,50772fc3,2f377c15,a9bf817c,db321d1a,55c4d659,b5f29ae6,96a69ac2)\n,S(54d9c9d,12bd68c5,3961246d,b98ed78c,cd8ad158,8458d4b0,5fad9df4,2229bb9b,b5e97c31,1dec2259,630c961f,ed33d7d4,f8de7005,849225eb,a4549d76,de1cbff6)\n,S(8a914ee6,7e9d6619,d00f1924,8735c7b2,bfb11eaa,61fe42e8,d64b5a53,43057dff,1b91e1da,3374da49,8bc2f018,c2a6fa51,99c51846,a2f59b05,a6311ac3,1bc040c8)\n,S(d4b81177,3e641dfa,bc704fba,e9ab0ab8,aa2f4c42,fbd23b03,a0b0595,d0240522,ac30ce3b,1ea4a14f,4a5bd364,20f40df1,cf2e6835,17107b8,ce6fbe05,665cc726)\n,S(b810a787,c232357c,bb82c351,79249f64,6f3c8e2e,72e0e004,36226670,14780ba9,54364034,1078dd7f,216bac76,9abc8467,4a422c30,f1b7aef7,6a2dbbb0,158319e2)\n,S(d71f88ce,dc738ef7,1ad691ea,c3a7eed0,d29c762d,8ec7ce0d,14e72d3f,f534a833,a47cce83,1aaaadae,a2d9d0d9,7b4c5125,97c1b514,95c3aad9,d2a4e716,cfbcd99)\n,S(170cf31d,4cac628e,139d9d89,662ce5e1,1ad7092c,cc6c6174,96c99d71,6d147ffc,4fb3b894,e741f585,15e8baa,addf3119,adf6c4ee,695253a4,6f9a5dec,cc6d77a5)\n,S(8e7692a3,b1275e80,38ccbf66,ecb9a55b,bfd48d49,4085b4d3,1729a644,ecc316af,f339c1d3,af07525e,26500665,ce66a91a,4fc0bfa6,b8a46411,34cab540,68c504b1)\n,S(5d1ff338,3dda5e81,32c47002,ee2b77ce,a07ca869,e7684d40,a27cbefa,4aca891a,a1adb3ac,b0decbdb,6772e62e,74c4516,fe843833,8d2979cf,5b091801,bf5fbb8b)\n,S(d566cfdd,a9dec66b,ddf2605d,a37ad558,375e1c5c,5f5403eb,d75ff6ec,3c2b8af7,13e2232c,78586da9,741598bb,25a90a4c,b6007bd7,bfb75ed8,427ade0e,619c78bd)\n,S(cbd708f9,cc713af1,999ae74b,2b9ee3db,3cb85bce,249c5e33,764997d0,2fd96493,f01a1d6c,4ca9b0b8,9337a5af,889d8dd9,c264f4bf,6b8066d6,55cf9267,684cb2cb)\n,S(fee1ece4,e8ac73c8,8220bea2,153800f3,e8d049b8,f89053f4,ad4b5ba3,f0ed0fe2,9b5208ea,17c80640,a353354a,7cf42f6a,f9763db0,bdb0954f,53d56a2e,ea26aad6)\n,S(c6aafa66,de444853,8d7a6c3a,fcb35a8d,db916f33,14c15dbb,79c48bc9,46ee843f,8a61c6b6,7fc590f7,bc81a761,7a6e24fa,34c49d5b,30b11bfa,7cdaf3bf,d1505b1b)\n,S(ac351560,83d91f7e,4898551e,7666bbce,dcbe21ff,f005ef1e,a866781,d9aac415,d709d997,77109afb,28c318fb,eeec8a27,5577410b,8da6d494,5ac7d660,1334483d)\n,S(a89c2616,7c024b4,81455d19,93ac04f5,7a212e34,95066ef9,21968f72,3d914e18,551d3662,6127866c,77df092f,5ed8dab1,3569ce68,433de199,ac8219ee,13a3c1ab)\n,S(9951831d,b58499ea,e94018d8,cfb9162e,b045b95a,fd246a3a,72e8808d,1ca3f06b,fe39aeec,b9d5f867,d5827146,fb384808,81696ea1,5b0d1188,fd487b16,d9e4d773)\n,S(b71e17e0,14564447,955be26c,61ecebc6,8615e2e9,37cd2e8c,78d26922,681fba96,ebcfddf1,d21fb8cb,95e3cb22,4efe9553,1a6c5ba9,cc92bdc4,3011c50b,63b9e3bf)\n,S(e170f81e,dbdd9ff6,d460ef6a,1c3d4bcb,2fe89fed,4e6742c2,2d683ffc,15914074,93f110ee,f971cac,8ce206e3,df6f9caf,801fa7eb,c7df14d2,d6f67e72,ab96e67f)\n,S(431a5547,318d05c5,5ecf04ed,a1fabbb1,4ac8dd8a,47dccc73,acf5d5c8,1ec104f2,3e3188ad,7b141a36,4afa1f04,57ca827a,7a6f1f70,75ca8dea,6fd08bf2,bfa779e7)\n,S(299e6a6e,e1587523,2be26ce4,a1f80cb1,3c193291,7f0b5eec,383ffec2,62203394,5dbb70ed,3ad4a211,bfc8e8bf,4c00a055,23c9b3e4,ed3790c9,3bb2a77e,5301575)\n,S(66db488f,f2b58869,b2fb5f78,61e7f825,bc99ac9b,ea02b59f,b0978c9c,c38934ee,ab76e112,b51c83f8,b10e997,2f6866c4,6040e7ef,eb14817f,c316b730,e8ae6a5f)\n,S(1259856b,66980d52,bb3912fa,78ad5b70,54c812b5,fed402a1,c3c8247d,26274932,ead7cd3f,c67895c7,edfe0557,d5681bc2,d70dfcbb,870c7c22,45d458c7,f2150383)\n,S(502c8614,cbb0f3dc,caa5272f,dd252c7c,4269968c,efebecf9,102745df,fdf1cf00,711bc688,7e4e356,fd9d0695,16af0a38,1b2f4500,6487154c,10b90995,3bc53c3c)\n,S(e051193c,323c6403,f69c1073,47b6b7fd,f43acdec,17c00c42,2249bcc7,aa8d6fd,2102c271,ce428ee6,16d1d2bc,f25c2630,c574d9b1,87f8b9f1,c85117e3,8a560455)\n,S(c9187bae,d768d32,29fd90c1,5c3b37e7,abe7c58,b538acb8,ae0741,adf1dc46,c130d443,f9ebba4a,197d0252,615ac29d,5714f6dc,f27fc0f8,d7547335,89c92c0f)\n,S(5b08567e,b9f3b3ee,2b03ae70,1c6b0641,23dba4d4,4e8297a1,6eaec8d9,e90fe897,ad071c15,9079c91a,cdee9c72,6e8f4cbb,914d4b4b,750fed92,aa81a987,a90c27c9)\n,S(ae5b648a,c5817a86,cfb06a26,d62691ab,8a9cc554,d0eaa86f,839f4a51,b43ba7cc,1ea8ab0d,b665c22a,ab0a48c3,da17c629,66e75212,a6fe9983,d5e925d,432db311)\n,S(3b9bacd0,a092856d,98eea5c5,ccc9abb4,4f2e0d3,27e578f0,42102148,890178d2,b681e88e,9603ba1c,57b628d7,ea929ae0,b79be447,f181a491,1fdc65df,21bd5052)\n,S(524df580,a74066da,d522f827,95e415ab,f6dfbf7a,1c1f6d7e,e8d05a86,4659fef4,3facc728,5f3bc1e1,a6fc210c,ad302ef1,9c72c5f9,e358b9c1,ed2aba72,2652f35f)\n,S(2e0637f2,ade775c4,87d09a38,3480b875,599a34ea,7fc70cdf,f6ed309d,450e4363,e3c6eb08,7e2f4e49,cc78e903,e4ad55f3,1aafb7ee,ada72369,6da8a0a0,f764738e)\n,S(f7fec6ad,beafbd3b,e413fb33,587b9427,3f785728,226f764b,bda6130b,aa0cc483,f646a974,8eb457c7,fc8fefd8,e63b976b,dd42093a,e59fc544,c66531d1,9e08c68d)\n,S(75f94ce0,6af64c43,2b6c95b1,2d892dc8,cd6eb497,4d826299,29ad8bc4,8a3608be,bf8716d0,a2b7906a,69316b32,21ec0076,6e32c892,2c7be6c6,22e8877b,b1958a29)\n,S(410296de,5e0df3cb,c4f039f,cc869090,f62e07e9,d3011043,31bdc1cc,f3fb4d85,e963579c,a314dd96,ab8a82ff,86265b82,da74267f,c861f96c,383f72ed,3ffecfa0)\n,S(cc824eac,5f5e16b,2f7c1703,d97da67b,69b4e698,16cfbb23,cbdffe00,d73ffa05,17c30da6,9f414ef9,5dc58218,27c7880f,d18c6f1a,92afaaa8,b8cf10a3,353e8abb)\n,S(acc1b0ef,4d26ed8c,d78f0b3f,d3177077,d2074b64,fa5d8d03,a83ff113,7e6e5820,6cce44c6,8519ae91,19d2a80,4f8fbeed,4fcd24d0,169e8000,11150c8d,9c3ce6c3)\n,S(1cb3076e,ccce1d9b,774bccf,4318b921,583c2b8e,31877825,7c2fc71b,c90da922,2a2f276c,58605d,82a17dfd,3ecdc5a2,a6372df2,cf25bb04,c628748e,4ce373cc)\n,S(6efda451,2a22f49b,587ea975,9e5a400,8cb3a521,7a38b978,3d5825aa,84fe13f2,11d44ed5,6dfe2fb3,1ff2a54a,de5a2a5b,60673cfd,bcbd5039,54a94758,878e2424)\n,S(47f69619,aef4378b,5cc931ec,da8fd996,e2fcf1cd,17de9cdd,51b30c3b,9dbf0858,149556a1,9776e3d6,da457af2,a4d70d66,d2fa28a,c33abee9,bf890894,7cb5e274)\n,S(dd3d8e1e,97f5dd5d,539032c5,13a19e26,8b2eaebc,1a47cd4f,8ff48335,794d28e4,7968bc00,20f6a83a,a973d7c6,382ebf33,c2233bb,34be9c2,e0ff9eaa,4c467e83)\n,S(2bd454ee,a19d3a6c,be55737c,d3cb4b32,7de2a2b7,50535f91,97aad2b6,65e16d78,a70b0f0,d6a1278f,34271c66,7ad40feb,9f7c6248,87e3f754,9c1f1fd7,129f7f99)\n,S(8cfe75bb,2a7e74b4,4da035b2,9a26784e,915462df,13ac2d91,4733184,f5a5ee0,648ffc56,bdc87c86,4f6226d1,c9245540,b65c2da2,7fdadca1,eeff2e24,6607cd1e)\n,S(5eff34ae,19c462cb,c2fdab83,24b57bc8,5e046a68,4f112f6e,665b3255,65724d36,198fb5bb,9db347ff,c2289629,d2e01051,d551e783,47c6a6b0,ccfcde15,a04d68a4)\n,S(9aa54554,f3673b08,e36db624,47631774,a2c51bb8,1f18aa61,426639f,78f92b91,8744a3ad,4a6e7404,d2e22faf,272b50bd,1d167b46,5f25c6fa,75c8d784,61384806)\n,S(4b837575,8cfb5970,dfc7463c,5df06ebb,ac88a2a8,b9d7565a,955cb53a,5ff259e0,87591d42,bda1a53f,6e474396,a1233df6,ed70766a,ab7aaaa9,9171a5e4,fa8df208)\n,S(5d4b74b4,9134f90e,673f5a57,959c7cef,c49dc725,85734428,226cc5ef,76428bb1,1b2a8910,f466ee15,abe6bf3f,100d8da0,cdc2f6bb,f19c3cfc,b1f07a0f,bed89425)\n,S(d50be2c0,c55244ce,5d93bafa,f62ee680,2d475441,7ab9c2b2,5702a309,57cad2d8,fe207e4c,6ee89ab4,c0185461,7eaa5de4,5a4dc0f2,bc4544e,f241cd5c,162f583)\n,S(bb0f61ce,8e0eb384,64e48915,5bf985aa,f93bbff1,416db2e9,a1da034e,1075bff1,13a715,2ddeb0df,30ea1032,cbcb08ef,4e6b0561,31474412,631f6fbf,b77b7d0e)\n,S(3ce6bddb,473f01b2,170e41fb,22fc5efa,63e22b9e,14d9bd22,88632bf8,4ddcb2f5,43086057,f4b3d298,426b7308,110dc52e,9a84268f,1bac1edf,8d47a25a,ace0922e)\n,S(ffdfb14a,ef1680bf,c90b5490,c7cdb75e,bbcbbff1,a56c3c85,bd37460b,b38f81aa,f3045def,2f1f19e,232880d0,e948b5a5,24f228c7,3bbcca54,7c216ee1,eaf4af0d)\n,S(1ac1f2e1,9ab4264d,8126eb60,a2330aee,c828d102,507ac0fe,d59fa4c0,8223172c,7636a4bc,339486af,b215e3a8,f80d8f02,d8fae063,81b4e7f5,133f1936,d8e18bf8)\n,S(52534c0a,740e89a,6142957a,a20f2339,b1a1a6b6,7e6c9a2,2d6661ec,adec228e,cf6fe6ba,fe41c899,c1ec2fa5,d884fafa,e1a31835,ae8022f1,365a97cf,3261b669)\n,S(40920285,7cd22c2c,78cdccd6,137d32b1,4f36f2c,964a278d,5b9f6462,651b09eb,40c94f73,a5fa3e3f,66dfef1b,f4f16091,f6b7738e,b8a865fb,3bde12c4,2d031d0d)\n,S(8b1d3c33,4b9ccdb2,14aac6e4,e840db16,25a5b3c2,4069d9e7,c81bc51,9b029289,114fd464,2acf9599,1fd65898,57822277,8020769f,145f86e5,630d6db5,5e23e853)\n,S(ae14de60,b7c7f13a,59c6bbd2,64162dc,8a6055e6,3d3460fd,7e473979,f4a242bd,8b960489,cdb5a333,a14463e2,376f2113,afccfee7,afa00ef1,6cac6a3e,4c65a412)\n,S(f37f1c40,99c95e6c,3e8d4e39,5dfddbaf,b8153948,137de420,788386e,2ed3e3d7,1f290080,82f6ad34,b2283d76,9cf76577,a564411,4f51af5,310c0a3,b3fb3606)\n,S(1fb07fae,9636889c,34441c1d,3c2496bc,a13f8933,666d05df,aa53ecb2,1b017a84,128189c9,3931576a,c4b68934,b7ff551b,58e6da46,fa97fcb7,b8df8c9c,637753c0)\n,S(44d1eb54,e112eced,480ea2b5,1ba22ba7,2afb0721,d0d6b715,52bd9728,4815f3cc,a6e13b28,574c526f,12673e02,ed7938fa,ea1855b7,d5b6e88e,3c3a9b2a,f2ed7043)\n,S(6980972e,5732b875,7fe311cf,f76f7bd0,ec94918a,759a7cbf,d8795645,a103238e,7b9fe832,4ffb9143,21776b24,a92fa09a,ac4a0fce,17c5bc26,2d2eb063,63d26a5e)\n,S(6a3a8c9d,405bb1e4,de59639c,4f6406a1,a8566a62,9d85b79b,f7030255,50efcfa3,3e8abae8,7b22d04a,8fdb408e,196b47a4,2e0f59eb,9d51924d,ce8de66,cac038ba)\n,S(ff3108d4,1598464a,bf5844c4,dbcfa027,bfb6804c,946c3683,1da390b6,4412ed0b,805565e3,3ee1d089,5c6abe85,77054648,11f5d4d0,219cb515,dc072d47,cbd0a317)\n,S(ee4f76a,2f8549ab,3e134e53,335dcb5b,49972750,180491bb,2139324e,95517d73,6bd90167,22402b11,68989e89,9c942767,8307367d,8a29075c,8fe81049,7071a838)\n,S(c21175cb,1ca958f,36a3b720,5cbaba0c,230c6305,8cd09966,ac78f51a,4c53e0a4,6a2183a6,7a7ca0af,256a0ecd,2c085d81,585a02eb,2ffe6a44,ea923688,cc72bf51)\n,S(2d5e4c08,a9a0b398,34e46e39,e7cab91b,953141c0,c5f2d292,c409cbf3,9a37d6fc,7569b9c5,31a331fa,9234f37,e9005ed0,4b512721,dc4ef054,d6164046,75c6e15e)\n,S(6302c041,bfbbeb09,cc012408,631765f1,5d573b67,6b799c26,ef7c2a4c,bb15dbc3,32a8f20f,67ce42a0,ac4ddfed,d0932e91,a1e51488,49e463f,915af082,7e491025)\n,S(3e61516c,198de08e,f7dc9cfb,89ef9b94,5b6c67cc,2deab08c,a3b36612,5934e2d,1effbbf7,4d5f7104,f7784944,70f62784,5692f3ed,48e4dbe,e956e063,37520d9)\n,S(a008bab2,d7d134d2,4ab35a37,8f330521,b8989219,108b05a7,d8aab0ae,e542fe30,77a377ec,903c06e5,463ec2fd,e9c05e43,f5454aea,82b99de6,be09fe31,51b475a1)\n,S(7782ff48,b928962a,950f42b8,2e43017,28711467,16f22f8,c389917e,a624005f,78f23e49,38a03e0c,ad1b766d,b9bafe30,8ad2c9cf,5b22bc18,c78c8898,fb608c15)\n,S(233b4a78,c26ab44f,d1019d64,8c896eea,f6ffbe71,8cfefc20,d20676f8,27ddcfc2,de508436,d976df90,487ddc1a,48284cdd,f553d342,2e0977b5,18f3ed9e,773b655c)\n,S(8014aa29,6eed493,d83d7aed,2d8c3342,3f7a4623,295f2a07,92c5de0c,71b8bb0e,dc58729d,f2a5bc9b,1170caba,4856a9e1,695f39af,81a1e444,f3e6dd55,f583d92)\n,S(8a01e90b,233dae71,1bb050ce,7bc61c8c,60882aea,ebead2c1,b284ab59,dbbbdfce,580ed75d,c9e3693e,92c06cc4,12c95a77,b34b72ef,20a51cf4,ca4ddbad,7691fdb0)\n,S(50a2349,24a29158,70e6372d,582ba07f,a569881a,96bd1a4,4cbb9232,1ae733b4,6943c220,a97701d4,a79d8e2f,a446fce3,aa21d00e,2f7cfcde,3edabcda,678cc751)\n,S(cbf49357,8c96744f,7ab07bd6,182640ee,b51b8f6d,a8a655ce,cbd2087a,eeaa6d83,4d1b36f4,5711db99,404bdb1c,9484a04d,29e79fa5,87d051d5,e75f07c4,ee8d4bf0)\n,S(737b3d75,e4edd296,8d164c2e,828b31d8,7c63d11f,fa4ebd89,ad59ba71,8a8efe38,ec7f7ba1,8aa8e515,4527002e,edc8327a,ff1ebf6d,d3877439,e7c822b5,35f31586)\n,S(29cb2864,251939ae,6c7f46d6,9d7b4416,8812e0c5,9aaa8b8b,b7e22ffc,ac38813a,c3ec280a,7c98b2c5,c96d77c8,b410ff1b,b5f1eb51,debd38f0,528bb73a,eca2e6e9)\n,S(1858aa59,24282fbd,e44dffa2,5197954f,f3668954,24741d35,2c9594fc,5e28fe9d,a0e891d6,b0a69fab,9fbd7879,a7e4ab4c,be50b1d4,4be76485,96fec281,d2d4bd46)\n,S(72ce7c58,1a420eaf,67bae314,d4f092e9,26c1378d,d346c4fc,2a9e9174,862eb75c,2329177a,5a9c3e0c,f6e236ae,30858bbb,8bec121f,f7462ff3,6284bde0,7425ae1c)\n,S(34c1ca5e,5dfab6d2,4abdcb83,9ddf9bc,a3f9dcbd,ecc315,17bd6f46,af112903,93f6fead,c931cc97,37c4aeb,6a589a08,80088a24,eb49a1a2,7aca807b,22a1f803)\n,S(7c5ac4a,80af5867,f803100c,cee3d676,8d348b47,9ce26243,284ba0dd,24392c36,a4468964,903be647,31fdb23d,1ea7ab84,a3201cfe,ab585b86,3370ea40,66fc5828)\n,S(be2ddd13,244c7728,1a98851c,8683ff7d,b57bf3d,a746cb35,e594b7ec,4c363caa,adb75939,af8a2cf,1cf3e5b9,2bc7ba65,8c45ea85,47959f25,7dfe4592,3e580fa2)\n,S(6dee1f6a,3b3befdc,a4a44471,d62dfd9f,7f7b222b,819979b7,901a1764,8ec13806,5d9e8501,4fa5f6ff,f8c0356c,eb013122,1a9a2431,f641ab6,af3b9999,5c2e5651)\n,S(15f264e6,8e2c8ed7,490355b3,a7b11512,c764386b,f6bafc31,80ee6fe7,9de68c19,90574d26,302bf408,ef9053fd,371cf29b,c41291ab,a76ab74e,ddf3f8c5,70326aba)\n,S(3d7cfbe9,4cc890c,ea592b78,5a984c8d,6d4c5e7b,183f3666,df9805e,be9c91a3,d55cddd4,4ea7065a,f8f51694,f6a84b54,42b30b48,e7630d12,6827dfe5,e7f62808)\n,S(54388bf9,d7951dc,7ab5dd3e,74971201,1ec637b0,7febee14,45b1dcd9,9c3a1e10,17b36788,25dc2a5f,9bc8738b,3f560d23,725f99c2,a9d6fdcf,6fbeff54,aae5a547)\n,S(3c229fdd,9a0080a5,948a0d2c,c9281794,425327c5,52063c94,be5f0197,6a088313,34975795,a84f83b4,af883d12,c373c505,192f0a71,fed21d8d,3a8dbb8d,2a926a1c)\n,S(b612bb6e,e14659a6,e1691f36,8fa8d7ad,1974e74e,36f1ab26,15705271,27c63210,5948c5d,d623cdf1,f9477733,dd5e8eaa,5240817,e8e08dc2,23b6072c,a4df5bb4)\n,S(ec56e585,54470dd4,28341ed3,e900e33b,ae381e42,2efb3d64,d2edefe0,7b05f613,ecd7f151,acf6e308,dfff2bd6,578bce76,86effe0c,d3b156d9,df8f66cf,295e9c45)\n,S(1bef3ca,85ff9f8f,bd80c8ba,f9b15b26,a565eeaf,e4d4f08f,25ee748f,fc11f80d,fe0260bb,96be497b,a194b892,71bc8989,125f0a0a,de88b135,272c5683,f92914f9)\n,S(1bdbac4a,522b68e2,a90e4265,3d2bf4ad,c4b27e5,a2ebb251,68a083e9,9107c20a,4d60e326,3ede7fa0,10467b9,d2e8b206,5b09e127,e3fba9e,3d228439,50d63ea1)\n,S(e9032f9a,567ab8da,551e0f8b,1b2c2c22,6e601b7f,e894b837,3bd9eaad,3662fc84,ac563e6,47d21af3,a0cb0a49,dafde0f1,21d60994,8dcb4000,64e3196d,74eb70e9)\n,S(7ce746ec,44af748,a5508044,f56e3467,a9608deb,c8a051a9,fda907c3,8f79c75,8f0879c1,3166bd23,be7bbb80,46f3c019,2c6b8fa0,52fad7d5,40640fd5,f2aa426a)\n,S(e0d52789,19de6d1c,a0929856,46cd3200,68862dcb,ef369fc9,6c6de4c,bb59eecd,98f4679d,b4ebdd90,a4f54791,29740bd5,f46680f1,d3ebfce8,8cda2946,ca886b20)\n,S(c6a245cd,cf1f4b58,4400a4d4,82f2088a,e28c8b85,641c1f18,a13aea,7e5ca397,d306dbb9,f8f2cb09,958ff944,ab5e6cd1,cb11eca8,33021bf3,605e6768,961ac628)\n,S(ff956c8d,9710f082,a1f34ace,c99987fe,4ade0919,4a0deb06,a1b286e7,3695c910,fabec52b,866afd46,1fe8c832,fd8a9375,a8086aec,b0e2e39f,b7823d0c,13bcc306)\n,S(549dda4a,d1a604c,d0f44fe4,5c4dc276,5cef1216,6f4accc7,3ff12152,26c23af0,71e3afc0,e05ba826,36eede7,1abb15e1,166fec97,562c4381,a33f765e,100631ef)\n,S(66d3df09,21573cc,e69896e8,2dd91f9d,6070dd12,edc21723,2077e644,9e776416,93981613,59a2ee3e,d9429dd3,eaf058bc,9ccf1c9,ea931ebc,25ff279d,5bb46d5d)\n,S(61bd3dbc,9426386,9c53ede5,a5c4f186,8a4d7a82,fae1be7,37b702f5,79e4f8d9,8c056a47,e27d4f49,2c9ddf54,efa48c,502aee81,e2336caa,c1b572b4,e082e780)\n,S(8a6d8b46,4a31daa9,2702f784,9148db1c,4ef20c76,fa67c006,47d6f3b9,80178f4e,d1f406ee,e4087601,96c82f9e,38205147,c31309a1,93bf4d8c,cfe67cba,ae8f7407)\n,S(e2b60e93,99eb8441,700aa90e,1edd981d,37893b42,5acf6b1b,809fd1e4,922e573e,68a0c65f,e394829a,8ae09dc0,ab35d789,bd8a38ad,800e9ed,63513eea,4e19f7af)\n,S(4c76030f,e85cfc92,64f16cad,99dfa541,fc23b8c7,2b558574,ac6f26cd,d4f55e85,44b352d8,9a31b4ec,c8f9a574,51855f7d,e98c63aa,98aec090,2d959be8,a12b7bb6)\n,S(dcba96a3,59103c35,aa2c9ef,538c13a0,2f0e8997,3663d580,fe454762,5fbaed2e,af9e205f,727698a,de9f91bd,75bfb73c,b13053d2,db2d83de,b4d14c22,176544b4)\n,S(fd0497d8,f75fff9a,cbfd3e03,6c9edc73,e682427f,e9b66a43,3b5b2b31,f2dc7883,d23014b6,9c8d1077,ab3fb2fc,c0bde4a9,44576289,896de135,9c0badf,fcd62d79)\n,S(5bb401bb,b38e413,43d1b779,54e83f9e,e705009a,eb8a1077,542cc6ed,edf48040,431fccb5,acec1391,f68ea628,378e3ca8,ca944573,ecfa5e,e7a82bf8,82599c14)\n,S(1fa96a4f,f9cc6ad8,b2741c38,b35c377e,3acac704,67bc5d20,a262db5b,48bb283b,c3448c92,ffc65afc,f1eaf7f1,f9e149eb,6404dcc7,1b222ac8,bfca8feb,eeb963eb)\n,S(9534aef,1ae551d2,7a638453,171d0a63,697ea420,2fec8f11,61432291,642f86ea,cd0c943c,38837dd0,33d48a4e,ca13e96f,46fd7f21,2cbff849,6432aac0,ef729591)\n,S(ea72afed,43300390,bc98d08f,3aa4ff4a,138440bf,1a8f8b7,b57032a0,d01b8ceb,e174dd8c,3692cc2,9ca856a4,4eae7e94,af4fb044,85172809,25ea66d2,d858663e)\n,S(39593534,3ca2523a,603801f2,abf3a1d3,16569862,35d79fa9,a01f86d4,5c122327,acd3e3e9,2cd76dc8,551cbf0e,94475125,42a5b887,ac6c975b,45d2e000,9953dd96)\n,S(d57b2a2a,375e5a0f,6967d4b5,3dfbb51b,4f74eff8,72742a3f,246e3e09,ec2d4721,12d6f848,4d107ec3,10ec2091,3482781d,c0aeeb94,71ae7b03,6a0d2551,d3ed306)\n,S(9f2dfc5,1b99eef6,e6c781a,fe0135d5,fc5def8f,d520119c,59bbaaf6,442f1082,8f20962,fd273048,fa3ca6e4,ea96fe0d,7ad1d758,99e25a77,e0f8b56e,5b20dd0d)\n,S(b1c30bc6,f030c913,49b36c1f,9c0deda1,afa58776,58c5a16a,9352c1bd,229884b,f8a459d1,6e77888d,cd5c63d1,8a2e28cb,5563e727,f53b59f1,939390c6,1eecdfc3)\n,S(8a663e7,40cad237,12dad6f9,1bb5d266,30542933,853e02eb,665e198d,a5c6e53b,e206b399,51175d15,daccf711,63b0918c,786a8fe,2077812,c0c1eee6,bb5c1e99)\n,S(2b0956cb,e0ca91ee,f44fac0a,76cc0b00,5f4a5ae8,27e63696,fe1aa8b4,a92941a1,a31e6fa8,dd454eaf,90ee1e11,62627e3,3f84b8fe,da29f423,ddf2a962,386cffd2)\n#endif\n#if WINDOW_G > 13\n,S(e0144151,7a2ac970,eb6381df,7e11fb4c,6b009980,6a0d330,d5429126,e662c3bd,8238ce9b,a691c80c,21563934,18d18dbf,aeb3fd34,48863a1e,7f4ba360,408dfcee)\n,S(be3213e,8b062f33,caf16c53,5a0b666,f344e0d7,1e28aeba,8b215a3,7ec86c37,552523ba,eaca38a4,cd795683,852a2643,550fb83d,d1db0adc,3f1b29c9,7d51cd1f)\n,S(623393b6,bfbfbd64,fc7aa1db,9e58e274,1c18eb6d,b5eb30ab,c4fe167e,a9e8ff2b,7c0e4174,f0fd5bf2,a025e316,fa3b7b97,1339a197,b52b0b50,bad4dfe,34e42cd3)\n,S(dadeb702,dd0a1e87,669eb624,b8cf40bd,bffe79aa,8afab26f,bc6215b1,dcfe97a,930890ca,e4c29b41,2d660acb,8cd39bca,5a522599,a1ab0bb4,8fbc38df,17253490)\n,S(b528d3b7,83179b82,bb1c9cfe,c26184cd,ac98ad5,8e253c13,627fb778,c9362f33,63203af,1545122a,63940676,ba2d18a1,aa902e08,8bb444f0,47c2bd52,db8babab)\n,S(2ff223e0,93986e22,ae418a5c,804e9e81,7a4de562,d7436e0,2d025ab7,11734a6a,c5c8d188,ec9cda19,bda76d8a,97838ab7,81990475,d4a00096,5efa79c0,100f678)\n,S(cb8731d5,e1e53c9,ccfd2c39,3c8ab1cd,9ec839f6,99fc712f,f946e74b,99eb1742,cd2f9df8,38fec504,dd125248,92ce8a4,a9db3848,e487076d,8c18e53c,f6d19fb5)\n,S(1377ac45,d776a5cb,76ec265a,af272690,6dac52dd,be987799,36bb1271,e0cf4a2e,a4b3330d,d5954932,d5a7a818,7d9493e0,25ab2155,d4ed0d4,f34aca1e,c2a04670)\n,S(984b9bf2,f140c75f,e03489bd,88041faa,22fbac73,7ac10724,c511a253,641a5ccd,c474f639,9733eecb,a750ea82,ac4d50c7,d82f4c9a,942a2bb5,90b1431f,c8d14ff3)\n,S(4b8fd000,74f57cf9,b135d56a,c002bf99,d5050479,7298cc4d,857960d7,afbdcb06,7c044103,1df0f6f7,721937a4,c60cf76c,95560ee9,4c6d097e,3a8e37b3,34c703bf)\n,S(57316653,68412236,619250b2,58bd0ddb,34fc751b,8becc0b6,60585683,218b6079,d1d56e4f,30f01c57,48972898,b8afe142,16f8335b,e3a39c37,da64050a,91652904)\n,S(c9a00197,a0ff16f2,fbf2cb59,767d43f4,60737367,4f2bbbd2,53c7220f,db69f286,177c6783,d739117c,1de074b0,c605cabc,6b4dfeed,a531f4e4,9cc518,40142f0b)\n,S(e23416da,91df23a9,db161618,579b3008,c87b9ef5,7ee8bff6,45eec6ce,a61881cb,e556417f,84043691,e7ec82e0,e1718296,e42fbcf4,a3de0137,93772dd5,70b8da15)\n,S(9f96e3f2,369d753c,e6614c45,77bd8a9,14293eee,8a749c1e,3b0e2955,638e9ad8,f5cd1268,1567a4da,71650d10,e413e0eb,9b01a396,e529cff6,b494b2b9,a21ddff1)\n,S(48657ba4,b24b0123,cd54317d,de6a3245,ae488078,5ba43d5f,1d94fbf6,b9301fd2,191edec0,6eb53781,2813ca77,2a9021b0,dd4931a0,929a7e36,a4a8c66f,aef0d890)\n,S(67b322e9,d72e864d,8cb15511,11402d7a,c6c858c8,77832d4,e0187e69,6a36f24a,cfeb12c2,6b58bf15,3bf87058,c5faa833,e15c867,f7f9a208,c3dfdf3a,c7f6946a)\n,S(42e8068,542bdd98,fcce8925,52002db,c545ba13,16082d40,fbde06f0,a44ded15,1645a9b0,c1f33cf5,27364915,8c4f261d,a1ee814e,7aac6402,bf644451,bfc4aae5)\n,S(8ee7dce1,339c50dd,55619107,9bbac005,3e058cca,4a8c8e30,7588c105,fe90d4c7,ffbd0af4,8aae8279,2cda6170,5dbe9fe0,98e102ff,1e6f11d2,b4669a81,6ec9d5f9)\n,S(abc9504,12926a71,6adaaaf2,7b209216,37a935f0,cc66eece,55978a82,1fa368e6,72e54935,e9b461e7,9fb75c48,4dae4fd2,155a4a48,d3a467c9,624c5f6d,71f79203)\n,S(bd250320,81e0e9b5,3b00568d,40378fcc,fd72fd8d,783f2f3b,433ddd1b,a6976ba8,5adb8bdb,85855498,994ca879,717b8e7a,e8c4c87d,29d6a1ca,4c3c6395,6c3ceb39)\n,S(b4fb262,fbeee84e,49ae9167,7e7aa0d9,b31609e0,48888740,c018a5e1,8ae25f71,34df3f86,dc091d51,258ecbe4,1cf616e9,265d6d36,8ea3403b,24cdc7f8,e176e5fc)\n,S(d1ba9b67,66f24eaf,a145ad14,81063b5f,e4604817,21b361c4,95de8833,be605c01,e80a6cbd,17de2f1e,663ce7f2,8917e3a9,f871943c,a4b8ba75,68476a3,d9e8400a)\n,S(5c98b6b0,3a3e5a8d,2d46652d,5eb9e2ab,a80c6702,69dc5ba8,3732752e,922639b3,81e2f9a,145d0cdd,2c51bd13,f907a04,6a35efb6,635292e0,6b8f6513,c50f4a54)\n,S(c1fa4688,f75fb86f,61cb7071,4fb25f2e,908abf0e,a87aa84,c8db5dd,4c2618f8,f2f74a77,6d4bf26d,17f55d0b,1aa913cb,9db869e5,ab861d9b,2043ccb9,ca8397ea)\n,S(5e806e9,a644eb32,51c62ba2,f09a755b,96aec78b,4405df76,dc22ba6c,f7227ec1,b88c8118,d6a1829d,6aecaa05,742313a,b871d2eb,72f31bba,9d84f87f,a73e614b)\n,S(f9d147fe,fd2c1a7b,f623d965,bc7901bd,968636d,eff54c14,34c6326e,d1c8de9a,c7887249,ab6686c7,93a7d77b,41173060,40de44cb,84980c33,cd548d72,d29caffd)\n,S(b98cc956,85f6d11f,a8d38a1f,50799634,9f7020ae,3171023b,abea0fec,a70ccdb1,f074d495,3689e8a3,6ee4cc0d,40882355,3dcbdf21,70975f49,5712adbc,990ecf7f)\n,S(f161cad4,100817e7,ef9091dc,714bcba6,18458493,f3bb6b03,4648a649,6817b474,b7eeb92e,396af324,22881eb2,45e62515,c4410af9,fa519ffd,61289f6d,9b740904)\n,S(7c8b6c89,2ea4061e,456abac2,46edc08b,fb54aff6,8a2678fb,1b7b1c08,5326914c,f08e1f02,6ea1d2c2,9ff5eacd,2b34682,2960723d,cdab95b1,d69c8af,5e7692f8)\n,S(4668c29f,16334658,195b93cc,ef71a076,3ab2078f,724dde5d,d3635eed,24f28729,5db228c9,8391ec52,324c723,39d99514,8fd22f7c,2f61cfa1,29ee7400,4c74ea4f)\n,S(3443d0f3,9dd6da5c,19a39f8c,f3672652,96fa6729,c9290b2f,4e21c7e5,3167b65e,4b6db639,9a088ddc,8ed31f63,7c079451,14a4320b,b7ed94b9,2a87c0e8,97429234)\n,S(d3ce3501,17a04e95,58281e69,3574c096,458dbca9,afac20e8,ffec7810,8bc227b4,bcfc77b9,628f6ee9,3541e47f,8d556ad0,7696ee6e,90ce384a,9b77fcab,6eb9908)\n,S(c4dc6363,ad772452,221f8640,9de0ac28,f2bc1ac3,cd2d7080,23301560,f95127af,78c9ba8f,d789a666,439bc949,38345250,38a79c5,97f6a71b,3e096b8b,752d3038)\n,S(c771f94,221a47ec,fcd78d7a,123d2e0e,1bf4edcc,bbcdd075,b23d29da,6d5ac666,4dee3b30,829f5aae,f4471924,65de293f,f2ec526f,5b8f5980,d9155f71,ce8d6091)\n,S(bff88ce8,96338f7f,5b6516e6,448a1f25,36a1e9bf,275afd50,e772517d,79e6e199,8f3f0c7a,b62010a4,eb0b6211,7e9761d9,c1552629,bb55bf68,53274158,a788c206)\n,S(4afcd064,5d57bf24,e850e7e3,d3cac224,6a467e76,f2ce02da,576a1f2a,9a3b97a,52f23b54,87b2af93,6cc692f6,1876d6c0,ef927d3b,c06df93,984ae54e,4d10f0a2)\n,S(c4bc122c,b9bf0e20,57f933fd,94db012f,79e23c34,98007abd,f8a8ba21,32b1f373,e40c47b6,a31d81ba,dc45d427,3ab56d77,1daf76bd,7bdf8ce1,a8778861,66fbfc6d)\n,S(487a19b1,d1be7791,ce223d27,bab11aca,837a0f8a,7d34d9dd,b4c68f18,51f821a8,a53cd743,16ff4e9a,8633554,45415e35,5552403,7b25ce67,f519e44a,a5d0ef98)\n,S(274a3cec,be06c748,7603516,588ccffd,f4ac3d80,a85887f8,10632cb8,4301a326,17a24be3,afbe8b45,9a72cab,5385cb6f,5d06b47a,63bf19b3,ff4989c4,85a9f40d)\n,S(32b31f77,b0cb99ac,3bfc34e,7558f9d3,e82fcc6a,be2c4,8a079106,33afa9e8,447b44c,c191da90,e0eb3f71,db804472,17f422d5,b1732a8,993da80a,5d8f5bc2)\n,S(78c39dcf,55561468,dc339d46,ffd09337,945285e1,66dfc29,25d8b85a,24a2752,d691ddbb,4e41ca85,eebdf63d,5c023e62,a6680931,5e1109ce,89088467,7ba3ac55)\n,S(5fc75911,a4920777,c4502116,deefc1a8,d2f21f96,2b1e725f,a04d6fb3,9d34e5ff,59f36f7f,18f5885c,dff524d9,6a139749,f3fe1662,4b728d50,7a460bb3,497512f2)\n,S(ca1590e9,152b2b49,a6d0fc16,4e346e19,fa62dde6,f693b64a,e38289d3,ad08fa8a,46a7bb3c,1174ed75,49e9eae1,7126455d,535ea744,936947f5,24a8ff30,8046dc8c)\n,S(5c715266,5ff0bdeb,a7f6e660,bf66d5ad,743d94bc,5ba9b7f1,f3d50cdd,9d11fa1f,7da23b15,56e995c3,a21ee9dd,ccccca4e,e41684a4,f208c39,b31ffe9c,4473a03e)\n,S(c7f71da3,6361c73a,55dc3877,4f2e1033,fa0c09ce,1c9557c8,c29d8684,e4177e82,8d6e47f,b5c2cecb,6b22dbf9,a04f0f95,77c6f50c,3429df92,78edb85,59b0dedf)\n,S(6e91bd9f,5264a13e,37925900,433b7536,4130b4cc,e6fa716d,a0101c2b,dc58afab,5baa7455,506b5849,5d820c20,f209aa01,ee0f9434,1df5b449,9ed23a51,b4fd604f)\n,S(1f00de8e,69ac7cbf,c75c789d,f3322813,244907a0,35059072,68954196,baef0d33,2892ce90,f32330ed,2800c30b,4482b67a,e65fec8,41ba6fea,b2e83703,dae040f4)\n,S(c00133f5,7d8c469,421efa3a,d71d8d58,1a2f5b0b,2324de10,91d79145,7d300638,3c76b182,d3ee982,dd05ea45,59e8e31b,1aa3dc12,fdcb67a2,f86434ed,34f18895)\n,S(af639e7,95e8269e,12cef756,4bbf970,cdb172e0,66cde48d,2f8e9083,c60cad49,1bd01179,ce92cd29,e414a74,cd1de487,c479daf,5673b219,8082c474,2426abb4)\n,S(e6dbd27d,5447c044,18fa0a5d,8ebcb9a0,ede58538,8b73ccd5,4e979797,31f4c9a1,77f38524,f2848320,3d4c780a,d0cf8bd,a2071037,348db8ee,6b5deabe,3d242153)\n,S(f51a8d23,c95b70aa,d02dd904,ec1119ea,8d1e3e1e,e405646e,4c2dfd53,336360a9,426b2c9a,1d703cf6,c748871,4959acda,ae5c6aab,51945138,73e4b1a9,c0f46c57)\n,S(e12f11e7,fe437b7,f578d8fc,33ae3a60,a3e4d1ac,1ee45863,42944d50,a0f6bcf4,22d15d58,35fa89ab,563985b1,4114c957,8bfec8d6,6dc7d253,e3c6d900,4419f5d2)\n,S(e758860a,8ec762d0,62f51e56,d958a14f,ac619351,9d890bb9,bf6bc7ed,e988e14c,42d9e0ef,10b84f21,fb88d780,dcb4750f,10438682,3b003b23,ec41c297,567ecd78)\n,S(3c933fe9,ba21e5c,d822b90c,78a54b7a,d4799882,ef91f2c6,e423a398,20a64163,c1eaa0be,531922e2,ca5b23a5,6700b4ad,7fc16135,11f67f96,b672ddf3,669080df)\n,S(4757576a,83c9066c,b6eb6b08,e91a79c0,df828e4e,3c09ce07,939134fd,ea857872,13f22fb2,62d77f15,de3e8388,d9270c45,818248e8,9d950d7b,58ee6c6,c38277a)\n,S(35e63903,70085140,b19df903,9a7fff42,46570fcd,8661caa8,129d6b4,31045c7,2855f4bc,aa9d60d8,6a44f022,b3c28e84,53cfb3ad,a58691f1,b0e9cae5,e5b9e8c9)\n,S(ad446e01,1f118207,3565f031,6d0a85f6,ad5330dc,6a8be4fe,82be632e,32126fa3,240382f1,decee3f5,1f92b2f8,1ac0eab2,1d8acb54,2f730d43,15c194f6,28e83e39)\n,S(fbe9e5f3,eb01ac37,820af752,9c4221a6,89164ef5,d77461af,f82d6400,6a718815,f2f30cad,d85a2e0c,e393e088,44de9215,ba207384,2abf8468,47801ff6,12d088e6)\n,S(1e675320,d81ff430,a0549aa2,482cc9b8,b9b585f6,32d32916,6e952f13,3b038135,ca0f1276,c9c7d995,c5baa5de,2988700c,2e2c7f1b,366d1db1,b44b4c9a,f0686aa7)\n,S(176dc770,23b0e52b,a2eb8068,ad27924b,94c3f643,30e0e85f,3593917c,d6267718,d2dc6288,5df75b06,f450686f,df660950,548d4f6,85d1a701,d510f3fe,297ca8d9)\n,S(3c8536c2,32a02b3a,b36feadb,ccc7c541,7ac83942,3cfc8dd,99a0ab7b,41a9c938,a684eea5,249cd12a,d24dd8f1,73022ad1,8ebc7f52,d6a3bd9d,bdc4f5ad,a25186b5)\n,S(48aa73ab,c61a76b6,e54c446f,ba881198,ec6ea003,d63c54a5,605a322d,7af006fd,c28c5eee,ffb20882,2d018506,5cf3ddf3,5977fab7,40e4d4e,cdbf9935,8e403a64)\n,S(74732762,abd028d,9dad2b36,38baca49,263d170d,ca7e4cb,d83a3a1b,53cc1ff1,ca11df0c,e8dfa09f,3f2ef7ce,5c023b6c,927a88fe,60ba9f3f,ddfbd69d,e536c2c6)\n,S(eb71ab09,520e5915,767dc918,814fe901,a4042725,5247c02e,b8672c5b,95698522,5fad7ae0,a7e95b38,ed6563cb,2023b2a9,c81b6901,c007f1eb,8749f56e,4d48e995)\n,S(2b101bf6,c7763df5,72eda74b,eb179cc6,af5e8695,965761ce,f8444371,7ef5be6b,dd16c8,4e1d1a3d,98d4629f,ef258421,f6664719,7f89a597,67fe862,3f140ce9)\n,S(a099efa8,2c666552,5332b050,75e81ba2,13976afe,8f3b33eb,ca2a4436,6e0ab337,f883957b,5cf1f2b3,ddd6c7fa,a126acca,fb1e33b5,e5b753ab,dc0a99bd,5d136c07)\n,S(f4396856,a61c3ce9,5b72ab6d,470bdeb1,8cc107cd,2f58f15,3d5bc99f,8b62f95d,6e3ead1a,a8edb0b0,67240ca,f3274e63,df81c2f3,e1ef2567,cfd76c01,6e9f6133)\n,S(da732197,26aabb18,4a0aabe5,a493d803,53215b7c,49458008,bd5e387f,694050c0,e2075f29,17724b68,6bcb987d,85e954e1,9489af4c,e7ce1b46,66d84604,e9a0eeb6)\n,S(99171a1e,19596183,f4259c09,b9740201,8fea44d1,4d0f2f45,75f4d66f,980a6792,522b840c,83e1eef3,e7f2cbd8,e07bec0,66af1bd2,e7607f5f,27a767b1,75219a4f)\n,S(353cc684,8a2c4f36,2408997a,944889c0,1db7bcf6,9133323f,8f0d34ca,758cf08f,1865bc62,f4ba0156,7e2b283f,702834c8,97effd14,6e0e5fa2,43d5124d,ce67ebe7)\n,S(8b16983b,5053d3d3,8e67c77f,1b6fccc1,b9ed7e3d,d57a26d5,deb242dd,7a312852,49d93f92,fa5953d3,956adeed,cff49ac8,caeb3d2,c72a0e9f,be6c85e5,d85d47c6)\n,S(68f5dea4,b1da327c,227b2513,83fb622,efb36730,3bac02ef,505e0464,750cabc9,26740f9c,5d624b9d,aed25774,46c9c742,146de045,71cb750c,4356898f,e3d31782)\n,S(faf5207f,c3acf00c,8e19d8bd,7208a6d7,cc936706,98559244,e74bb202,20c699b,fab7b446,17a6c6e5,4ac186ac,971de8e7,d42c1527,8607eeb,b8564a0b,cef1936c)\n,S(c3d1aa91,b541c5bd,3da04707,a2f01a16,917c0420,a26604a2,bcaf5081,e8d17630,5b57806e,5a58c405,f06d7ce5,4e5f7b45,c9b631a3,44c92c64,d8cd1435,fcd9ce27)\n,S(23278a35,4970b920,450db526,391b30f2,54b5bd5a,fe2c1455,623c99fa,8ac8db1a,864d81da,e8df9e47,1ac93b74,660542df,3570486b,fbd2144d,55dee441,90e1888b)\n,S(602f6181,33cbca4d,74de4ab,29dcd101,7c12c32b,ecaed25,485765c5,478c0146,4c42cfb7,279ec350,f77d2da1,599b9c85,9ffab342,ce6a011f,91c9e460,27aa968)\n,S(1dc4cfc7,126c3b2,5d82aa46,3dcc8cff,c545a9ab,c7962690,fd4ecaad,25843ee9,a9357982,5c535575,35820f17,25e32afb,6002b1b9,2a9b43ac,18225e61,b3fedeb1)\n,S(3694f121,6e02bc79,14cd9910,8ca65fc5,887a95df,8b04e8b3,3c6c23cf,ce35af82,7ffee291,b1c41976,d456e742,88458b9e,c61e57c9,9b8386d1,d1c36424,38555d88)\n,S(743ada75,a9596420,7b8725e0,af06c2c4,457be03b,a920c3b4,b65922b2,1df1bdbf,8f2b81b5,5ac4c5d8,9cc23ed,92dc1b43,5629b9f9,39b126c0,b16d7175,b40f908f)\n,S(bfe9397,7c7cc4a7,b9cc42d7,f044607c,f047cf2e,26d6f94f,210af7d6,b2420085,625d6059,8f80dc83,1ef2b51,dee53d5,666c3dfe,a02e1d92,1260906f,ae373d64)\n,S(86c02c0e,6ee646c8,c2944751,7867a1ad,cb56ebff,c8795f83,73e6d8b9,1b240eb9,659b5e9f,da4b1098,b76af529,f56f809,59d39f48,916477b4,bfa66af,c85be4ed)\n,S(3b281045,857f01e9,995d357d,3a84dc66,6c4f8f47,4b82ace5,dc3a9229,387bfda4,9948272c,cdeb1542,47c7c42f,1f313dad,e318a123,3f500f8a,16d80e7f,d2e9fd4c)\n,S(cddccdd3,b54d979f,504d33d,46d6ff2a,9859038e,33087a3,da9a5284,fefc47c0,9f2a13f8,369313c1,44d91e5e,807ddd65,196c991,a7eb0321,2133aeb4,56683b8)\n,S(98100502,a6023ddb,ee34462b,d0232711,8f8c2e9f,33708088,40352c34,870e16d7,1a8bfef4,69af3b3b,1e381c08,454a84ec,4cf8fb66,bd721a57,47a94e90,1969b9cb)\n,S(8b76757d,b2fc179b,9016847,9b82124b,c26092f9,b35de316,c90223e5,99978179,47eaf326,588e65ca,541a71a6,a1167321,ee449268,1e8b4960,6eaf9a73,42b16f05)\n,S(e66ed7dc,897fb660,6f44d8a9,46b0c61c,45c83bb2,d55ea771,bf2571d6,7ecc3b43,e536f79b,8a9fff4e,c6cffd47,8a405bd,7f1745f9,9374d810,518cc5a9,f214dcbe)\n,S(e0600592,cc9c0b9f,8cead065,6ef5c115,ead63209,6a0a0d2,2626aa13,f2bc88c8,628d94b7,8b84705d,16e55254,4c138416,e7f75f5d,d549ff7c,a42d51cb,7f5a584f)\n,S(1b0af242,a9cf25d4,cc758fc7,63e2f07,62db2e42,6b392cfb,ffc5ac07,19152767,33ae8aa5,eec30559,a3d28da0,d9354048,592dec4b,2f975a0,ed043fc3,c856a2be)\n,S(e204ffaa,142f7eda,3505beee,db0bcbf0,9b80924d,ce5bced5,439aa4d6,af5acb7d,a2804d9b,98e11519,adeacdd1,aef2c22b,a02f7030,479a559e,6924db49,5d8911ba)\n,S(afc40e67,651531f6,214ea1fc,13173d4c,a35431f4,92845964,69cf099a,d515ed5,57ef6ef4,1e480de9,32ae8596,3b04d267,5e629707,cd3bdb45,5896d333,b648e0)\n,S(59538bdb,747b641f,800588b0,45c0e3c9,72963406,5ca601d4,690dee22,abe8d226,a030486a,3c919c35,4c26547a,3de96087,52ca7a28,5d378e28,652031dc,ec2d4438)\n,S(6a91d34f,c38d4028,c63a4bae,bedb2a76,b964cf44,1804a6f1,efbe469a,a997ed8f,32500c83,6a0b5274,2d2ead10,dd3e73eb,45f221d1,ca6cea00,f2b01d75,d9073260)\n,S(9260e687,b11d97ee,97dc44ab,5e21c344,332ae39d,c85c2ee8,f7760cc2,8ac28d61,f47df3d,e8d8654e,f7124f5e,2dcd9d95,c1d13e83,a33e5d18,92ce9851,6223e778)\n,S(3490e733,7a66f301,f678561f,4b4f293c,b48820c3,dcf9be06,a0390410,4cfe3cba,49591a79,7edb70ac,74f87636,85bbb22a,a8169536,532886f1,f5ea0721,5e9bbd6c)\n,S(9729f4fe,1f47a9a3,7dcb1311,ea9548a1,d71d7a81,27803c8a,6ec0a680,8d07b4a0,56e1a5d4,ccc4fd72,8e7ee569,e22efea5,c8f03d73,fe8ab86c,2dcb8af2,eb17f896)\n,S(af63904f,6da423d,1cfd77a6,680044f0,5e694eb5,80ccb4b1,c37d8d83,ae9c2caf,6decdc2f,5fe2b948,d15fa10b,4a7e2edd,b8cfaf0f,7c79a400,f3d1b306,dbe110b2)\n,S(96271f72,1f4a1f21,a2274edf,87c294fd,403cf0e0,c7b7b1f2,f242fb7a,2c435a3f,66ffbc73,1fc8cfd5,2bfbbca4,49f6e949,71940077,ae411e79,51cf5b21,ca5adddf)\n,S(a42ef215,1f0cc5a0,15827287,eba8d960,dfa5a13c,7ee2696a,95bd94ca,4b717c7d,5e491ed4,5f08a591,32296929,814608ee,e3243172,b523a1b,a4995f6b,50046fec)\n,S(193b3ded,e770a757,d859c289,68be2780,fc4ce92b,135bec2f,7fb2c07b,b862e5e4,192c4bba,ffbb735e,a1d5cd1,38de0556,d1d1d740,980c5775,22d19b5e,f0716700)\n,S(ccf9a075,da6f44e4,cf3b4fc8,26feef3e,54084b0,e2756029,e290a7ce,8c1e8dc7,d04f844d,ccf2c30b,9020f0a2,308219c6,a5d6491,ffe9ba67,bf6b20c9,9a35a183)\n,S(7ebea25b,1d69bb43,f60ec69e,f9853208,d3ddffb9,6dce3831,873e7ace,d25b0140,24540af2,bf87d637,54f1a47d,13a3f38,2a948375,8955dd16,fc83e7ca,4fec3d65)\n,S(c9eb4a,c2a31b01,9b7ff038,38478b6,674662eb,d729ae45,d7111c63,84a038c7,7e2ee03d,caed3f4e,bef2b90d,78ae42a3,12f6e8b3,29d116a6,e26bdded,81f32240)\n,S(45756e0c,8c84e9e,a7b23bc5,cfd87b4a,cd0b290d,86c547b8,7fed946f,e5acd867,9c3f522c,e577c017,3db984c3,d7dc16d0,31326e2c,85b08413,4611da0a,70acdd1f)\n,S(1bd58481,21bed636,c789e341,665e2477,59438de7,10aba25c,e4a0db7f,13e3c0da,cb0eb897,bf905399,63a8a7b7,50787430,ffd4d6d7,9589c8e7,350f4351,4786a90b)\n,S(f199562c,8e809ba5,84aa80a9,759dd98c,32eda7e0,ccfa4063,547ced9,d9324dc1,33519ead,76430498,949dbcea,33ca14de,2f7ea811,cdd38f32,4009ac7a,b408d1d0)\n,S(7fb4e910,e9e37dc1,f56ac3b9,30589522,975319e9,84dcb559,6743d3d4,f45ea6f3,b74a03c,cdbec9c,f36b59bc,fe3203dc,5f4d94a7,bd54c628,55f0d04e,67c960ee)\n,S(503d08fd,19839d78,aca27020,54dc4233,c1a1d68a,6b9cf136,4c6fa9fe,886c03e6,84ad95db,9a09eb87,bd905914,473d23de,698459d5,7c436f77,58937bd1,8e448e0a)\n,S(335c9204,e6aed3e2,586d0dea,c87158a5,62db42c8,e42fac25,9196083,51e1e713,15b359bb,10f8bee2,940849d4,212fdd84,49b60c5d,d3419ce6,7ef9f0ac,f4c1c2f9)\n,S(ba68e5cb,e0f7159f,821117df,5720bb50,f218c298,9ce3f5ef,30c44134,2834bc9f,2ac25bdd,ff34e4e,ff45a2ed,e412a287,101ff447,71c657f3,ca57bc94,40fa5d72)\n,S(93d6e713,311d8430,58c20267,739c494b,446d7943,a1e47a0a,2a5ec20,877e6baa,5997c19c,99a2fd26,e0471041,b509f9d,e10bf615,7cd4f24f,db56a65d,201a0856)\n,S(7a94bc1b,5cc77a0a,73a84fbe,c5d1b68,cb8f4626,8ecc0c22,ac7500a4,5f397172,128c1c6e,82a4d52a,719c9f8c,1bedf4d3,32d3695,16decef,34af6b4d,578bee5)\n,S(f031eda7,c19383d9,45eec848,f6f3e467,75fbe52d,bacadc54,c213c596,c821b809,b4a78d0d,1c17e4f5,db81e2e7,ee52f195,eb505d36,af96bea0,5170c776,23cabab8)\n,S(86ef1acd,5c17e082,dd4cb924,c74d0195,ce9f375,60ca7608,57ab7d70,2039907c,6936a13d,b9078ac9,426d34b1,6d5673d,36c3105c,9cc77de1,ef7e0ec2,4cf3bb3c)\n,S(fceb6cc9,c78e3a35,49b9beeb,62a14fb8,6d24eec9,2ab10bc9,40916b60,cbc6d720,7c2e6024,5f561f1c,e0b69701,512ca518,9f8d9292,ea75562f,8b17873,77f7583d)\n,S(a1d9ed1b,9a36f348,1f426d83,7afe4380,d475e36e,3b140f3e,cd2213ee,dfa5c8d9,3683c97c,a1273f29,ec02cb77,9e9fee54,78bd5e3b,e6aa8c60,7d5bf07,dfa558a0)\n,S(d98de999,6311ed55,e15bbdc7,58affca1,3e8f629a,77eb3dac,844f90e0,51bd48c7,8af6194d,272a8ee7,68d1b810,778e5c2,69394353,969d77cc,7d449f2,84ef2a22)\n,S(78328db7,cd6afa29,b6f1ba80,d65f8050,60f4d223,9897a3ed,bee8ba3f,a99aac60,e37e496f,1d143ac4,8123377f,4e136442,629f8185,c4996f01,f35c7a9e,76fc5efb)\n,S(3d701493,31faf0b,37c1e1c0,9b29ee6c,5d9747cf,cdb26117,223d1f66,e336db5e,d1e99140,8311b20a,b41f7ce0,ab4e9dd3,414ea3c5,b87f88b6,648cd1d3,e77600ad)\n,S(f619acc0,47e0d4ab,bd5ba2a,7a54ecc4,e223986,fdbf7a96,e90f762a,ce288628,f24eb63d,e1545d10,fc96a2d7,e7fc1ee,f9cdccdf,cefb5de6,8fa4eca6,781564f2)\n,S(cca809b8,71f85a00,3344a851,4f797fce,91718f35,9e2fb489,a1dbc00c,aad0a2d2,b7d72ab8,35658359,2258f260,a1f62f97,aba642ed,382992f7,12b11c11,6890b037)\n,S(bbd19766,ee2c501d,afb4eec0,30fba145,aa26c45b,51c1beea,a7d3ed1c,7dc81958,bc709dff,70b3612e,7cf0a6e8,9724442f,6c1ca4ce,c32efcfe,b98f1acf,df5250fa)\n,S(6a6fdca0,e4a58197,267a1938,1644aa5d,ca8f0ee8,3a68a5f7,9c34d4af,ec1cfadd,c28b1236,76585255,cc104298,d7ebcc70,6bd7ff6f,cadb0c36,db6517e9,d2732081)\n,S(922e3e1,fd401a22,ee7d693d,e52f0ade,9564af2b,17a4be0,2c553216,df5c8006,a7b10065,aae84a40,b9b79e0c,5ca8a227,696841c7,20b944aa,3b9eb1c4,1488f757)\n,S(53ffae4e,3526b553,f92bd9da,e3cbd3b3,aff8a6da,d4895490,38382f98,a676eac8,81fdfcae,b51f80b8,3d23b222,8ce860ec,9e665292,c456fd23,cfde43ed,99f8c6f4)\n,S(14a0ddd1,c94596f8,9d3e7028,929cfe4a,7c2e70c6,b55d15b9,77227862,a03d119,2b5dc071,febe1d1d,df7e1483,53dc6558,7e8c94ef,b598ee83,806f1fbe,976dd086)\n,S(7368240d,fb74f35b,b51a2542,8caf3b90,bebe272a,739eff4d,c0150f1e,3d68c8f9,95392b17,b4c5e82e,774c7168,7c46469f,21801a72,b15cbcd8,fd2ba85e,e4a7a27f)\n,S(4c0a8053,b9eab39d,2396825e,2416885f,5fbdb610,7bc5879e,6400d010,20580560,85a222a7,5b7de532,617f67f6,5408b79e,f5a6f826,6083c2f0,93ca97bb,d7db5427)\n,S(ca0d66a8,24a6f8ac,bd9447a4,933dfcb2,6751a26a,f5790a1e,91e32053,3ddabbf8,61cc898d,4f8b0845,11dfd49b,1ef01e43,6f7d7d08,a5f16b2,1550f329,79395d18)\n,S(646a0775,e62f6a36,d520763b,5c7fb081,a3d7dff7,355cba76,45358a6e,55e9d6d4,3e528844,e7380a64,20db2366,22c936f9,b1100046,e17c66f7,a6b1a01f,7b7dbbb4)\n,S(435565ec,f3d6bc13,142d7c47,7052da71,bac77f3e,a81107f2,30303003,6455d070,4ed52896,89fd8d96,343ca8f6,c9f0c70f,ab6edc5c,1ae96d15,9fa9eb4d,a4c9f6bd)\n,S(d8b01896,9328544a,a51f22fe,e605c693,7a014aac,37316f,ff6a760b,93aa8f9d,63f51e42,a2b879ad,36d60719,c1497b5d,dd412782,e4c620ac,989f7259,3a06edf3)\n,S(b9475950,4a9b3052,94af6f2b,6f182e5e,83a30abb,47f0799a,21ee5446,d63d48d7,cbc74028,37a899bf,79b89676,9e358ad6,9680277c,34ae1018,4290689,c2fb876)\n,S(14317c49,2972d5be,c5a01b5e,34842135,d521b467,1b262f0f,c3e6a271,ff8e0ef0,cc4d2235,d1cecfd2,2e6a476a,7db483d9,d318e79e,4c3486cf,c2090651,c2069381)\n,S(8bbdb357,5b6867f4,4f062ab3,38928d52,78c4b873,4e95c5f8,fcddd4e4,9d44f8c6,d38d3387,32424054,c05a67e6,c7d00e62,1279eca2,ee1b59fa,90b97f33,5173a778)\n,S(7775fef6,36ecbe78,9279786,b996c0d7,380b00f9,4ed31476,1ab0b190,f06aa685,53152a73,162dd659,dce57d7f,cb885c44,34243153,2b8318e1,2a996ebf,2f55407b)\n,S(db5e4bd1,39ebe377,bca64950,29e72fb4,bc9b0ea5,5450e42b,a7491c0c,39693b48,a6468113,a5a796ad,a337ceb3,238827dc,416ca20e,bdbe4e62,14194e66,cc5a0abb)\n,S(eab057b0,578c52e2,eac11be3,9f069cf1,6ebf0631,709560fc,2414ff11,f1c619eb,5422023f,cf69b8a8,458e5c6c,3c2de1e8,6fb041ce,180c5f75,cddb455,fd023f67)\n,S(e955fcd3,c657d611,7e2d43cc,651333e,c231ba32,418e6fe6,d021183f,e7f5e44c,dd0eaa98,65212f27,2454953a,4c46c5da,973095fc,b2e36369,cfe228f4,828e6b57)\n,S(5f5a3c57,58eafc30,c311f596,f1d6605f,ec0f5e73,eafb27a7,2a07f91b,42d8e49,3cde0b0,1d1fb2ea,9d85a04a,aa4536f5,c6d9f55e,84ca890c,cf23ef2a,5dcdf1a2)\n,S(fb7a31e4,ff0ade1e,efffbd7a,e04af118,49c82cf2,6ad219c0,7572d924,8b99bab,ea87aa0c,431de57e,ee86bc4e,be463dd7,9e69102c,736345a,5502b07f,31df2a01)\n,S(d57b1d6a,a3e87779,4b9f8dd9,683ee3a3,6ec18d3d,e6b22b44,e411778d,4bae1ffb,256ffed6,b85bd2f0,9dadb0e,43ccbaec,9fcb9e57,22d88ca,73f8d7ab,dc0f62ee)\n,S(9326fc52,d3a24a38,ef0fc90e,183697b3,f726832,c70bcb5b,bd6ac548,cbb8f1a6,863bd0a0,cc0a2bea,d21176f5,c99fafa8,d7d766c2,54d57308,1a58a6f,12889a2b)\n,S(58362cd5,abc9b5e6,57617e94,620ad087,d5d310d5,313ef6da,36079b4b,a93caff4,5f2a404,4e86bbd8,d73b673b,2e432233,d6923cf3,c262e1c0,3da48d42,f62fc52f)\n,S(7dd488b9,cd06e68f,e01b3a9,6b318d61,b8c4cd69,7e9a3681,34fce81,841738ee,fd7aa5ed,130c897,cb770846,a3d292a0,d963ded0,5266010f,34a99ebe,99782cf)\n,S(9bf78b02,524c1554,3330d7d5,a3b41705,1fa2a324,6ba8061d,f9550640,cfe798d,59f537d6,6d2e6801,d79d5a70,3b4219c8,c7d06385,76964f48,10427548,90cf5a83)\n,S(4c816973,743ad5cb,18db4f87,9bbd6d1c,e71513b6,eeebfc39,3663dc36,eb3fc47,1a6dc6ac,37a49400,a933ef09,f00f9650,44c6f8eb,d516c254,ab142d89,d41105f)\n,S(60636bc2,c7486343,59296408,40f3a26c,173f4e5a,7f0031a8,35c1c56f,b1051be8,71a78b7a,3aed2bc9,70a4190b,d1be56e,efc2e6b,7cf81b08,541dd8f5,dbe88e8b)\n,S(a6e772de,c3e90a70,6c663fc9,4d5e6cd3,12211537,40ca4a2f,47a0f3,7f8d00a,25b8fe1f,5c727181,4a6175a8,10aa1eb8,f1090221,d78c32ca,76ba7c73,d0eed520)\n,S(79c6653c,60307215,fabb4b2a,aa8bfbaf,1692f613,166326c9,19324e5,7cb89262,36d5ed12,b6b49496,e2b79da4,c0955cbf,c24eaa3c,204e28f8,db1e7ed2,d2197bcb)\n,S(3f556b2e,4530fade,d4774af4,ce4454c3,4a2bdb4e,aabda42e,d4ba8546,d646cb15,bab1d321,1ce84331,3be8996b,f5c5c4e2,c9fd04d8,397cf9e0,58829389,ecfd25c3)\n,S(eda59a23,8d21fe9f,5e11e0fb,cf731fe2,d645c52a,f3861dd9,3b7273b7,3fb3913a,22f22f01,4ba320b8,2cc29c06,d75b7eb7,d3cea857,40cb2562,4161b9a8,712bbfee)\n,S(7a1ea77,323dfb4f,36958adf,71d4f03,3a2bea2b,a9f62cb0,c42a4279,7de68548,4866ce25,ee7a2b5d,a276f976,6261318c,6d2d7f51,f6f41940,f6cc3f20,264825a0)\n,S(ad0fd3a,ad62d6d0,bae7c51d,590876e2,33d1028f,62d5c178,a0ecc3d9,a323de2a,88e024c5,9672469f,54f4a64e,b792d761,d163157d,ed982787,a6d40382,83b0601)\n,S(1bf19432,f4044a69,56d6e9d6,7b84a5cb,ee743771,8d634dfd,20706cdc,602729d3,4114b200,afb6a1a0,75ef8e3e,16c37e9b,4f2acd9c,3fa4e922,63d1c430,7c516aa9)\n,S(514616f2,bc2dafa,8be3b9d5,f00b694d,2fb1af5f,12d219af,c35204c2,e121d93b,3e5cee53,608a299c,f67f4e0a,65adbf2,57ba8eb7,450058a,74072ccf,922eaf9c)\n,S(8e3fece8,5338ed31,93721d18,1cff34e4,fdc42330,6a8e1a1c,3b002da1,6921a661,b095734b,6736486b,676dfc24,9cac99ef,12894543,8b333b2e,77664f8,20f686d2)\n,S(46c06820,df101ed2,92842186,7d8a20b9,6db1eb9a,ae63355,916d438c,a7ad4447,fcaa10f4,59bb73f,c48d1b60,1147b535,d7d43958,1bcfe26f,9acc7abc,ddf1afa9)\n,S(56334df7,1f9b390a,b001e406,ab37af71,3fff8c69,1c2eedba,fec7dbf,cf722b31,22d04394,340dc156,a73c4b0b,f49a6c93,8a3724c4,4744690,4af420bc,726707dc)\n,S(202e246d,89045f8c,9dbe3dc9,7ca52d23,b2fd55fa,1b5cbd37,cb882663,ca67c4f,f4e6cf89,9cbcf023,1c9f661e,c4588072,7a6241e3,513cb365,9a2e7b20,a17a62b1)\n,S(c8054ee0,10211c2c,f5bc1ff9,43552eff,c56b635c,d65e409d,ece239e9,9b9bd4d5,f50515af,51601cbc,de6842b4,3b854b05,bf1ebd1,678c46b,46e22827,17f31057)\n,S(9c29788c,235eb61a,d2940708,4b9701a1,ea3282ae,56f984f5,1c625538,14438383,32111eec,efdbef2e,236469db,4ad30e30,c116cc42,99dd286c,2ab70ec4,9759ead7)\n,S(5854e8d0,b7b5c394,7068dc86,f94c3cd6,72999023,367509e7,4bc1745c,19a57ef8,7e7901c5,c06bebd,f50c4113,4e0d2d3c,edafec05,417d45f2,345b75cb,a63eb98d)\n,S(8bb2fff0,f45be789,a0446e1b,3547a44d,1104a5dd,9c8e50b7,4d0fa891,f73fef34,c332e365,a5343ea6,6c571e2b,c383f767,efb979df,72223a79,35da9173,73b182c1)\n,S(ea88e65,6ee43387,86165faa,cb643cda,992f5656,dc7333c4,5ad8b561,8ccd209e,c38c40d6,4a7a343d,8ab357ab,845725c6,af9f4f4a,843986f1,fd0a83a2,5df0f909)\n,S(c0c1d4df,857c7ea6,13322c2e,e0d4ba2a,a3b18ab8,cc8d9ff6,6981d6a9,4446295a,247115d1,e8eef7d,ce6ae1db,ec9be46a,9a284648,ebb7a918,7292fe05,9d72b981)\n,S(91e6a4f9,407d3600,2a808d8d,db723ebe,67b8e212,792ba65d,b74e028c,ec7fc72a,ef6ae560,35f58be8,5cce98f7,b2106e0a,12e57dbb,47a4a995,47ee5041,3c5721ba)\n,S(cd749618,9a8c1d36,2995cf61,380d0366,24a7a402,e21cf078,18794e08,fb208454,f3dc92be,15d1f912,a03debcf,88afcaba,2dd6ba2f,1d23a4f6,ba02c5ed,cbaf0bd9)\n,S(99f5d12d,2e68e70,c304f3fa,44eb24a6,85f63065,af0a15e9,f71752ff,82943018,59f1921a,d97ebf33,68f962c9,c0a297b1,dff9f980,246d5dfb,61168dc1,da0b8a9e)\n,S(63c6cd30,f9c07096,11656b1e,75d17191,a6ac02db,9debadff,7b3d602b,b9f7608f,2e439373,70a41b8f,e0e5f0a1,3ab75be4,6d8b1ef4,ee71723,4b73ffef,461083f0)\n,S(b7407f26,90a5ea11,d9b7fc55,17e6c1b1,9e04fe47,180b1e93,94cd5e97,5d184d92,1b953929,47dd4984,7420f727,7a6796e7,828ee880,3e0d701a,aed8cf7d,513de6d2)\n,S(24979116,161c8840,dd521e96,27a50056,c29ce48d,d86b6297,150f9a6d,e383fd40,13dd71ab,3dd69cf7,384d3e32,5fb16648,76f99943,f7ba3649,143e09b0,28b9a70b)\n,S(f109b6c3,6122b278,8656c80d,4c84150b,b419919,4650d96b,6f2de8f7,f9d73b7d,a7457369,bef8d54d,c0a91d4a,39496f85,bd971f6b,4a13dc77,142ead5d,791c96ac)\n,S(59b303f8,2031c370,4f17c929,7fbd0ac1,36be9900,a26b5516,9f0e3b6d,69118df9,30c7c4dd,1666271a,5ac8c936,b35068c1,9830306d,c695e02,d6c65ebd,2fd678c3)\n,S(6627359a,eb3910db,4ba54cd6,c7b884c9,a678621a,d2bf6cd6,6023974e,d462fc52,bcbcf9ba,d2de78a7,fc486734,79379778,feab83dd,ea4f50b2,555c457d,a910d487)\n,S(76fdad80,c4fb507d,9c9d2305,90e818ac,ec7efc04,1184281e,9212785a,dd51f1d9,cc8cc7cc,349cf307,f34adf7e,f559855b,9b88b70d,7fc9d19a,18cecddb,e3a8c346)\n,S(7893406,e99cf08a,52fed9cc,4a9bafdb,7f2380cb,4c288700,b983b791,e1313330,ec15e1af,39eafe5a,d081acd3,fbd5b8ec,d0c2e83b,7a5b8074,50ef80af,2511d149)\n,S(c454aa4,e8d02133,ed93c229,d0e834f5,18f16cd,d83a39ff,3bbb1ba0,838c81d5,a98e61cf,89c43808,f4895924,529a6e59,8af57be6,debf5f5c,67e3b3a8,73ac51f0)\n,S(ff0bc21c,cbe5c122,dd2ba8f9,64239010,97dac1ee,3957b27b,f990b611,72402880,c34089c,1f7b2181,8d4cd5f8,9e445ec1,ecd634f7,52960da,467cd396,77bca50a)\n,S(8e4486e3,49a0423b,d8132e39,812b78f0,3a0e61e9,d3eb7735,86f1e279,3731c301,897b24d4,37cc260d,52e1866f,4dc222ed,16bbf084,c108883c,a8a7b9b2,9a2053a1)\n,S(4f4ca57f,84f5c4e9,6aca30d2,351089d,bf7fb6c,13847584,590fa5b4,4dc579e7,d53db7dc,1691556c,36f1cb1f,8a1b91a9,33634975,8f28d0b7,17d250e5,ade63a9e)\n,S(fe8924b2,d7a24fa9,5c61830,aed8fba,79b3a96f,388b6423,c760aad8,cfc203bb,bd303e29,c6be0e2b,f4e79df9,cb17e0ac,e92c3784,fa8c26a,7e3cea32,d0b056be)\n,S(3099f75c,f6a8c72f,8685895d,152f99b3,8ed9a3,320f3fc5,dcdcd14d,c46abb5d,fbb5bc2a,ec76529c,a278a32c,2a95c2a7,4a939c4,c0e2c0bc,6fc20b2e,a6fc9f1c)\n,S(3b939f83,f84126f3,b6632de0,12405c9f,43244322,2ac384b9,7415c2dc,9c72f4eb,843b7353,ec454380,e9d4cc20,23a138b5,c1e602c7,f48be55f,1d3c24ca,f05607fb)\n,S(dc7506a0,4a50e345,dca3cbc0,6384a938,b032f197,d6d30932,7b0c646d,95c732d8,fe942311,f6d49d62,99f9559a,3d16f43d,c6a39d4e,b623f9ea,e8dde39d,9bd5772a)\n,S(f5a4c596,c6996a35,172fb61a,2721d75c,3dde68fb,4abc9433,f84d20ea,83b30dea,175e0d3e,77d2f63b,bb2ef922,d30b962,fd783b30,ef7dd8e3,5ae680bb,9df26572)\n,S(7e9038e2,c499049f,e5d222ae,2f79f4b1,373c2f69,262f133,cb9be1f9,aea4029e,3592e66a,343335bc,e016276,6550a363,1d7dc64b,2223bdfe,7146f32b,8025c737)\n,S(80f22f73,d16bfc6f,d6c28e92,1f990eb6,e2cb803a,d920850f,af489ff,f62b1f41,8714a5d3,c5ee74bc,73e11fd,24cf4d80,370e6711,c726ed68,2a1bd77e,7b503b28)\n,S(498a2ae9,e86e53f8,43470a58,ab96fe0b,7c3107,d9d23535,fc887bfa,fe0c897d,47aa9eb3,73e841e1,4260f651,6ab3081f,7ec3809d,53b8609e,c3cced3a,6401bb53)\n,S(601af64c,d14ce184,ca52c542,7a78c746,8e9c069a,80277b6d,960ddf30,3b3a010e,2900a63f,ca1576d0,11b46c27,32c87ef5,56dd579b,3bcd59,9161cd20,ceb7fa18)\n,S(8fb2e0f0,7b2fcbc4,ad58b06a,822aa683,957f2bf1,5dd5984,9a1341ff,2d74a25b,7cd82350,8d797cea,b1b386f7,5d5f82af,6137dc9,9f6d6e6,b7c68cb4,75070aa4)\n,S(336d780f,e9d14e8,b55a1498,72c63bc,83468eaf,aef3282c,9bde58af,6a69e6d9,92d1004,be45bee6,b8eeba68,2fd0187a,ac3e6679,f4fe0fb0,b723214,a63d2261)\n,S(507ac721,f4d58704,4f8d2cbd,fb03aaea,b0634303,cce3e1a5,e4e47efa,90d5872d,b89a398d,e7db05d7,a1055093,97b83d60,9ba53c95,39caaf0e,917d22c8,307174d9)\n,S(c42dcec1,3bb7fb96,29171026,f66c012c,992c604c,bea189a0,46e688a9,473ba343,8aa37731,a53223cb,a021bfe7,c413929d,8fe010ec,353464b,e3c1ce02,e54f7bb5)\n,S(b02ea2c3,cd6093a2,d5e6b5c4,5c510848,857eedb6,50038417,d9f41947,2a866a2c,ebb45c50,cea190c6,1bb7c505,8cfce93b,ed1d8ee8,c75a5bf8,6ac9c127,2fa5527c)\n,S(f4d193d2,9f20ed2e,273dc2c9,aeab43b5,85626d41,59b7edb1,51e17c45,ef70d84b,bda19a3f,19b834a2,c493f8cf,14cda579,1f84b6c,611ea7e7,280e5196,1add0974)\n,S(8740dceb,19eac62b,75859b9e,4d0302d3,cc84f6bb,1ff6e857,eef7fb64,fe5f1bb0,a729eb0,4783205a,2e1d5b6e,7eb5221c,f2f151de,1489d1b,1d98fb68,e7c6ca49)\n,S(79ec464a,85a29f08,d910bc94,449ce88,50aec626,3693bf6c,92a5ea23,84fcc9cb,77d170f5,b52ed0b2,9aad476d,85abae3,a1d7c544,c625ba2c,d44e68ea,ef53b39)\n,S(4f1018d5,dd54bb71,cbc0e29b,255eafd4,6fb3aac0,45889238,847efcce,3207fceb,c32819e5,d23cc2e7,73a9b2a0,271fbe3b,a64531d9,2d416222,24a2f64e,3be7dd8c)\n,S(dfbf1936,2094e85f,ddb25de6,8ca85cd4,e53768ab,81780eb0,33a0607b,fbe969a1,25ea0b59,33ba21c3,2ac5f1e4,932debcc,a2ca3aba,e0b7c671,93d97e1d,af80e563)\n,S(184c66c0,2c36883,2c1805f1,8612449,940a371,54174f9,b67bb41a,85226649,cf63fe44,f1cfc791,4fb4a24c,1e0530e4,736f815b,a910b487,ec4fec7d,f8662eaf)\n,S(daab3606,d386e04e,e39a8a51,a8242e43,ede9de09,f50322e0,a0f410f5,f043686,c0ba1c4,ebe7d10,6fd0d0ac,4e8f6e8c,fbb2b682,3a9d55e5,dbb7718e,d411718a)\n,S(a887f4a,5311f252,ba0219d1,f848d334,26b0e216,69020dfa,89dcc339,7e04530f,5a7c04bd,8c37cac7,f429bff3,eda01dce,a5b4fa44,eecd3195,2878f79f,9dedeace)\n,S(1b315664,409feb98,4d5dbfd5,a85afbce,4784a907,b284958d,28123f61,7c2d207a,2972cc7c,ba348e5a,5841d463,4597fd57,84eea5ba,a99bdc37,3119c568,aba205bb)\n,S(154adfd4,27c30d56,d5f5de1e,d7e8465,6727e69f,82ec8d1f,19dfa16,b1fe4984,5ba86e8a,324b279e,449f61ba,a7fa52df,882477c4,921f2079,98199775,3e0372b5)\n,S(debd69f9,fe55c15f,b28df417,cb1af3c2,585fe89f,b44c2f94,94fec0d5,88480994,98d8cc21,55c16d24,e8b1b831,4fcf616b,2564ff,9345fc9e,f8de3cd7,57f9708d)\n,S(9fcd3490,2a7c54f9,a2855fc0,9558c465,e0316c3d,fb72c66b,71d4492a,efbaf9e2,a7ac4160,c2b5a416,89e9e49c,8d5aba67,143e1de8,26498be5,1cfa691f,f7f5d14c)\n,S(59cacdf6,fe4bae99,598fb1d2,df3de7e0,586fd792,eee0d9bb,fdabfa73,8943a727,7c730d34,7b3ead16,c74d349e,191c484f,624599c4,d379acf,ed8d2341,160df035)\n,S(5ce1abd1,fb291d97,db3a4c9e,c4ace635,34e6b373,407a8821,67722fec,7fb226c,abc24634,b4070973,d8a11025,5ff7a81b,a39de6f,5275d3f,7630de8f,23b7526)\n,S(f783628e,bd0a0b4f,6ee68001,5b3014f5,e70897d0,ce159baf,3afb1aa3,207d73c,d06438fd,5b96b88c,94a68b6b,1f5fbf32,6c7a6efb,83b2f1df,2849f809,cc39af61)\n,S(7830fabc,cc7229ee,35c7130d,b441d2ea,9a988d47,72ebe00c,6c159658,537ba0b3,49e8b58e,6aead178,3d5c901f,a803a33f,78acc889,27f2d57e,835aaadd,1b38fa7f)\n,S(c930390e,a8901286,21a4399e,ef9a4a90,6416d549,c28f7482,6252fab,5fcba9e1,fa0e87da,3d0618a2,f54e8fd,d14b4bca,3bab137c,daab0197,4d110ef,b161cfce)\n,S(2a0da867,20571917,6f949876,e5f00ec3,ba0924b0,a5e758b5,2d0c23dc,da9cd28a,96cd04fc,69350959,595b4870,f6df11cf,90c1fa1e,cd04ddd1,975d0bf0,fc907647)\n,S(f64881e2,60da581a,f576e92e,3968e24,f2bef6ce,dc1c9c53,256374b3,1446fc83,808a945b,660b67f4,43ef833d,b491fa56,2aacec09,f8a2dac3,863b72f5,e7c8b94)\n,S(970bd933,5ec5f0d,3a3cea17,5090f1e0,c181e488,1565c341,33017f99,ab81f052,4d1d270f,e284774a,fcbb6658,d5cc019b,8eb30bdb,39464a79,6ca1431f,1ae9fc48)\n,S(dfe94b31,24c4541f,4723ecfd,f5cad197,2c058886,9283073,35415bce,e4c4779a,cc283e53,d547606a,a0fafe8c,5d3403c5,d047aff6,8b194b1c,1855a7ab,9540e23b)\n,S(f1813379,673ae594,8fa30bba,d8737d0e,16c8bdd1,8f7047e3,bf33a39e,858df800,acd2c1a6,139a2dbf,9b008d50,d0b4d1f2,20bfb9d8,c24855d2,ed54440b,a87d294a)\n,S(f4fbc156,fb631bdf,51192bd0,1c0db0c8,8890ec97,9c368f3e,c2106043,6d423740,3cb08cf0,5b07deff,431faf91,e1874baf,9cfccd3a,df487f4b,4f69026c,1fb7149f)\n,S(124da4e8,3b079d72,4a7a9a72,5cc45a80,cb92675e,74541bbe,d36224e2,793de6d,3e700066,f12e0cba,4d6200fb,2a759554,1cd15531,ea065e6a,c6fb4986,548d00e7)\n,S(749721c4,455e7826,1de045bb,266b97d0,6c2b112d,2ac8c16,428ce961,b78d1138,27556aed,a3f331c2,fe95b237,d3326c7d,25bc594,39f07b87,86559fc,55a3032)\n,S(62cdca49,aa58f55,21c60dfe,d50fbf58,257676bb,fd4c4e97,9ff9a91b,7627a028,8bd49b9a,e16d10ea,7ee1528b,4f433e8f,17c4a688,a7148fbb,d10ed605,595c37b5)\n,S(64d650f1,39b13aa6,16d3b227,5ed164b1,1cd3a1e8,81759344,7895a4b1,686478c6,deeee52a,f7572d87,f339595b,79643402,f9e2a065,7b95ba42,6b83d87f,3dfa5c2f)\n,S(d08a3e55,66c636ef,3417c17c,d8526df6,37cb935e,db00365a,1ecc9f4a,9ab59d,2db049c7,5eec5176,3fcd3502,33856da4,e9ed32fd,24242a54,9c9ae462,240dc103)\n,S(8761705a,35bcc509,afa20d62,61859afe,97154782,49ba47c6,f4b8df0e,30f20d89,b34c25ee,bb029622,4929c3db,78046a09,fd43b9e,be2dbf64,436f0df8,adb726ae)\n,S(e3453933,4ce22643,146cc317,54e7ce7e,e35f6f4,e37b307,c4e9e11a,3c6f5f85,73ee178a,941e81be,ff22a0ca,f2bb4513,1afdde7b,336a3bf7,ad05c1,d465d97d)\n,S(8389192f,6609a7e7,ac8e6f11,fdbfce8e,246b36bf,95e0de27,fac36082,34ca917b,957073a5,50448ec2,9d67b681,ccfb1aa2,67c88976,e53c99be,c68c378c,f2b636f)\n,S(8bfd70c0,67bbe25f,e2e78029,a97fd863,bbf287fb,7a24eb8d,e5a61af4,c3c5d387,e2e6c66b,ee7265cd,5a1b1d64,4f24fcec,8b59001a,6edbb1fd,5d894740,f3f952fb)\n,S(a5d0999a,a05f0bb1,59a1582d,980520b,eaf82015,68875269,fdb593e0,e6ff257d,e34d9720,5ef05766,676b62b3,62ce4b34,fe6d27d1,a644050b,f9c65c34,c423635a)\n,S(44e479a7,b949c88b,507942e3,89ffd9d,17645185,92d4e544,2827baaa,5d5043ce,7b86ec29,8c12c463,b0a71416,24a570a9,e2b10d77,ae12ee23,2504edde,213a7087)\n,S(60dec943,d9797811,706e0251,e0abd0ca,3f37bb8d,559213c4,3176ce3d,352aa558,2dc689f4,a31c59f6,c5181448,d6985335,16b0764f,8cc6fd50,8bc109d6,69fcaab8)\n,S(5ca58d38,5b5449e6,f93c5c5,35941b98,d4ab829f,e641bb24,af7e7ab3,1f7709b,82afbae9,80eb6f48,110ce090,7f39ddc0,945d9d84,d5d3feb7,4d96581e,c17cd575)\n,S(b775967e,a1b1d60c,9b09cf3d,26bf86c3,b9a23ea3,cd329138,10099048,d18b031c,d2b7169b,ecfa1055,70d885c4,adcfadcf,66f12d8c,846f70b7,12004097,840fef1)\n,S(73d8d4f6,7d602f61,3c3595f,b9aa05d7,a23bc4c1,1fa3844e,92e6b79a,40220f96,bf722a2c,ffc9fee5,bea18530,9ecd14ec,bb17fb3d,568fe85d,331575ab,2400ce3d)\n,S(e8104df9,f49f7822,152bcce,79c6df0c,8b1e9745,448c24d6,1e7b1180,99182b75,dc2fd539,ec8f2beb,1bfb0da0,f95ffbb,e14fc682,1c5d5023,96b1253f,82137361)\n,S(ecd72ef6,fb6c432c,8e1449b6,d16180e5,777e5524,4900f209,e89e995c,546113e6,1671715d,358fba99,e509f518,e1458600,4252913e,268129e0,e00d64eb,7a26e135)\n,S(e3b5ccf,be829bd1,6f1fc6b5,fa6d7c35,464bfe10,7e9d6455,a9907050,a4fc36cc,ce7abb9b,5471c1a6,de17a2c9,b5b671fa,296cb5f0,10b5ffa3,31e7a87d,a28044f5)\n,S(f3591a02,ffab91d4,eb7e75f7,f4ebd22c,41c1ce4f,25f89c5e,d7ca1ab9,27107734,345a2e11,f2bab926,487c7d53,5314bb6b,cf04746b,be2edc10,18a57c2b,94fa4b3d)\n,S(ca4b045d,ae54ad95,37d184f9,ffc5a950,c61349d3,227ae1a6,5501ad97,cb45c635,e30f817e,255ebeca,352f3c24,b441d1e9,4660f456,ce9cd72,eaf4c4b4,d7c1d806)\n,S(f7cc5740,54a9ea61,fb8ebdb7,b76a95f6,30094720,675aaa72,dfd29bb6,6f41ea38,9d463d8c,fc5424d9,18275aeb,5e046be3,b3dd7fbf,f52d4990,f52c81e,b2556eac)\n,S(f75b5f79,fba3e3f8,ee64bbef,7d34e8a9,b4fd9bfb,27b6a9f8,76b1f70d,ed6ab6c2,220b40bc,5c3fb77b,72c48e36,2745677f,7e0e8266,f85a14f9,d4030ec0,90a43faa)\n,S(2aa367a2,5060236a,627d89b6,ad0a398d,89d86a64,735a4fde,e88fa4c,d9cd450,2bfedc25,2491b1a,764a802b,c4d77d86,1e70ecff,e9aef8f6,e829448c,d841fc32)\n,S(ff7f49c1,11783cf6,e7da1e22,15827b07,a1078ce7,b1eb3257,65a37c38,a141620f,69550c9e,2e48058e,8bca8b54,21251dfb,a488c585,df644bea,d519acf6,54702733)\n,S(31d05358,1164f4ec,a45f7338,fd3ebb90,76d017b4,5e679601,6fd02a0b,5c3aa39f,f124319b,72177ff1,462fa90,2e1f8d23,d4d3ea0e,d1bfd1fe,6bccd92a,9963f575)\n,S(6eaf0edd,fd1203ec,a2cbf2f3,8da9ad7,c8a02d3,ab5f06ea,bb88fb5f,7e6a3bd0,d9336d01,2d8e9474,49c521a0,10a3b83a,815a0c74,a31596d4,125909c6,73e05f08)\n,S(b95a519,77991ab7,fc3943ac,ff5fa88d,68e759c8,11cb91b9,e9a1ba97,7eda1347,8cf2cb5f,446d448a,5a98fbfe,75a2ffa6,9758bd15,36eea87f,533822bf,6de5ef23)\n,S(4e5301d4,8ce5edba,f3b1dc21,2e804e7e,1fd386f5,6b90eeea,da6c1c58,211427e8,f503ec3d,e169fdb2,e1d2f684,cbd9d684,dcabaad9,376d96b7,6fb0a5d8,1b9f0d9)\n,S(4fd1a9e5,9031b43,715f92cd,c49c2d0a,fc7c2b54,ad61d7a3,9142033c,3cf49cd2,73ecc11c,ab0165bc,3ab4b43b,ecef694a,2d99c9be,8b877160,2c885a6c,8e4adcb1)\n,S(67406865,b32543fa,5ebb7fa4,a8d8fae0,384070fa,2e8a4b86,74510099,20257c84,3fdd9ad5,93a4e0b9,4f4451f5,e3227df7,e829a45c,ef3d271f,3fd85896,bbc62008)\n,S(14b955ae,d6ee5be6,ef3dcfa0,edac40a0,de7e8dad,19c8dcb4,e4992a65,a46569e4,d4b920b6,21823f81,8481eff6,761353dd,7d9f31c2,5ea9d1eb,ed60a5d5,fa2daf70)\n,S(14f283bc,5608d5fa,dfaa0b3f,fe42fd20,4003e434,c6368fb7,22ca5f22,3339ae42,b2415e3d,c3aefd3f,c644d4bf,b0a87fdb,bf0ba630,2baec8c3,7c1577cf,9edb7397)\n,S(3fde0c67,7d3ce20a,6e6275be,7f80cba8,5416a55c,58dfd09,8e733a32,1fbd1c1f,9b8ef7dc,610f192c,949782f9,bea1f08,9a018b25,8926389a,1155d033,1adaaac6)\n,S(9c55e669,df5f3d05,f15c74dd,48290540,b993bf4c,41dd9247,df5332a2,ed17267,23db0ce9,30c97665,175abd78,33757fc1,8c6b3c32,2d260810,981b4e0a,6e4979f6)\n,S(bde84df,ae141a0d,6e8da60b,30f41746,506d2dc3,4b3faee7,d8568a92,82968d16,45a33214,ff1361df,e724697b,99a6c686,900374f3,6c298dcb,468f38c4,4ab3ab04)\n,S(1940294a,b8f3c2ca,45f68f45,4c60c5a1,e5d97085,946b30c0,54939daf,c99546a3,563f9f99,3816c62a,1e60ea76,77c61bb0,848bc926,e76e386a,bfd96bb4,ece3b81e)\n,S(dd6ea1e0,d0d13e64,7d0df92e,ad22d838,757a34d6,373ccad6,6829fcce,b32ccb0e,c018e9e3,6bf4e8b2,853ad27f,a49e5ff8,384b557c,aa00c3fd,d8e008f0,ee33c313)\n,S(657847e8,c7844562,e26656bf,bbc27b84,dc104737,42c4dffe,c0669616,5b7fbf19,dd90dfb6,58b6ada4,901beda9,a4a9a8a,42c6a4b4,e79a4172,5b5f6ab6,95f2df5)\n,S(fb7024b1,40be9d6e,906d26c2,edb781cb,49b8e71f,396b8d3e,352506b3,fe3dea6b,de408ff4,e50b2328,b6ad961e,9dd1ac46,fea36005,1407061c,5a0fca32,eb08efdf)\n,S(2d29c008,65a7b279,d3a80179,cd3e8944,b3f2be0c,49a398df,a3113350,d1d8e8e0,caaf127a,ee704a4a,65802748,59649e45,25c55005,f2667ee9,92e9d923,daefcf8f)\n,S(db690474,79b7209f,4de8d42b,a3c1be3a,39268589,a7c33632,6d87c1cc,53d5662d,90de8be9,5c3587aa,9913ce32,c83e24e9,c58c1fbf,2922c63c,b777770,fbaa4e00)\n,S(9806506f,922e4f0a,afd54ada,258d6fc1,723c7087,ccf13f0a,df247356,c941697b,c07e2018,a8cab841,37698eef,3d31cad1,b97fef49,77b277c9,25245a12,f16bc237)\n,S(ab868d3f,e6da25ac,5b11c112,28f14621,661e0ad1,e33d25ea,ae1ae7af,60e40187,ee24b698,334a9850,1a1195ce,d57a7fd9,4b12c488,bbd301d4,d47d5f13,3cbf54ad)\n,S(e7561fd1,9d2a8ee6,12056be1,74257e28,3122f366,abf66f49,31fd89ee,fd8dcda2,2052e74b,e3656d8c,5c766ea7,3227b75b,85bcb190,8a07918d,5a8a8001,3e166d5a)\n,S(5f19523d,84bbe307,be08f2e0,fa844cb5,7b562f01,39950820,83c2df9b,e8f21e6c,3a96fe16,28ee1dde,2ae9ad2d,5724eb88,33377542,6e91acb9,d9be7c41,7265d7fa)\n,S(c9fa4668,3c949b11,2422ec1d,c5501efe,2fdcad17,255c7545,69837d28,d9c10cc1,1aaae75d,18f691ac,cf1dcd8d,9e8e0348,b5b6e734,76d47ffa,b5e23ede,c7fd1dba)\n,S(1da90e2a,1e911879,ccfa084c,393b8205,1799b2d4,15a42401,b1ab793b,beb8d8c,3d3f7c69,11ea4d38,46cbae1,53b3fc32,74994ee5,1f4fd332,2da4d28e,c89c0b63)\n,S(c6fcf10f,3851e432,6bd504ac,b7847f7,707e4098,d8f66915,3e6f89ad,f31b3186,d0ac89f4,a16a63d8,6e36ea10,8f8ee5c8,4e2705af,a9c98bff,3ea5253,93a50ced)\n,S(15057a2e,eb56c67c,cb6b7d4e,f1257ae0,3cf236b,1f9b6588,fefd7f46,16378233,4dbab530,ccc0a7a8,c49543ef,5e3d0a87,6f205a62,2f9a90cf,5054bb0f,dc4930c2)\n,S(37eeaee0,72d5ac0e,6ea7337d,d07ddebd,45bf1cb7,8c02dea3,6d1e419f,308b20f,b0c64496,5d9daa14,19c77249,a32a3a3d,a5761adb,bf5a394a,ebb91630,f361d506)\n,S(5a207bf8,3a8bd0e3,3c71cd96,d928bdc5,f1d6ce8b,7ad9bebe,61a27362,2557745c,3accb757,fadc9b6a,2a5494ac,15744113,ee878901,323c6138,19ec7666,60f54dad)\n,S(fe08dd6a,1a0fe325,5a391271,e81befb6,f6b2ee08,907046d1,642d39bb,fbabd139,42c342d1,3535822e,e4ef1b43,69f204c3,665d2326,1379b0d6,c520c64e,181ef40)\n,S(b7d262c9,8dfdbba,6483edcf,38044cad,d6d859e0,3d1ddac,a39cb999,78706111,96086350,b308b397,6a007c8f,5181b5ba,30bb4c11,653d689,ee97fe47,28d798e8)\n,S(4b12ab2e,23b33775,3ae97d7c,1badf5a,7d354b57,dcc78407,6836f802,34130c86,419d4e0d,9f708bf4,2e11e73,a1fe5815,2bc9649e,49ae45c0,f52fb8f0,f23c450e)\n,S(fc6d2682,a96eccda,4b49570c,8bcc47c4,8f362bab,7750b4f7,4f30cc49,d8e88dac,1af56527,30264580,d1f22612,e90597f8,694aff0,96001848,8a243ac,f4beedbb)\n,S(c7b9c3a9,a189eba0,54742c40,c4afdb9e,5e07e6c0,e442cf06,32e9b655,1e607e8b,5bb68277,2f2274db,62084cd1,9c1a545e,ef6b38b8,d4dc3e30,fc58042f,f01822ab)\n,S(eba4d342,30dea72f,29a339ba,3ed4306a,46c761c2,bb6f9627,3406fa7,50dfd956,fce17a0f,23d278b2,e3da1747,706840cd,d31b01a5,8793506d,2155cbf5,dd237cee)\n,S(a4d36dc0,2177d471,35b4358c,6adec285,3595dcf4,6cd9acc8,944a569f,82c04155,85a29779,63b21be0,e378fd0f,b5a60fdf,65f3e45d,c2fafad1,13377f4,81f00281)\n,S(4916d063,ae8bfae1,e3f5bf56,fde73abe,eb165aa,4e6d4a16,9060ac95,76109ba2,a7916703,4a0b40d5,f967a08c,a536b7c8,3b2b0b4f,67638656,4ae9b4d4,4c3f22ee)\n,S(761cdb10,b2966030,85f8f1a4,404ab49c,9de01979,85817f97,ecbae412,eedd046,1d115720,763b545d,72f8f50a,b881e7fb,9789f0ea,8dda90cf,2ee2f3a2,2e193db7)\n,S(d7a2570,4d718e92,df85541b,490bc13e,860ff014,e8ddd9d2,e05fca2b,8dc64ea3,5e454b9d,21346767,71c0e035,fbc6dec6,6102db85,aa3acace,c158f43e,534cb90c)\n,S(2af6004f,7962c52b,b0ebcb06,32975bbe,a6b9a99,4dc5a5df,eb20a43f,3d4d3bbe,6988a9e2,26f8cc15,3108e3e,b68c6596,be1deb1b,53239933,d91e095d,d81a14f3)\n,S(a92740e5,3bab0860,1127571e,5d33184f,ca805d18,75ba4959,74108f5c,a9504255,5df2851e,2eb76b71,66dfd3d,3aa84e0,96d49c85,10daa44e,68d75eb6,c6d2379f)\n,S(90d0961a,510d8a6b,60a87c44,93a0c8ea,76856770,d076057,bcc7ed98,70014939,74d4753c,1c913088,66b6f7a8,a2386ad3,7c13dc2f,85b4b4d3,f8d7603a,ccaa545d)\n,S(ce52bea,f2e3a604,f62bfa27,92e2e083,8dd5c6a6,ca338ded,249be611,4ecd12b,a869de73,738a0a2b,7c824444,925f3d9b,dd08670a,8f8ff1a1,a4988008,2d5c009e)\n,S(99ca8dc2,10e3fcd2,ffd39a47,1c06ac49,12215441,6cf16be7,cc3e350f,f3cd05c4,78087a80,131adc2c,6bf26309,ef0720be,4550fbe8,912142,c6ce496a,dfbc4982)\n,S(be442cc2,9f5a7bc5,d07ff1f4,322deb90,cbfcc6a1,7d8e611a,b51ec610,a202d1c6,6250f2c4,680ed934,8028f2c0,1acf5bb2,fb3d1f25,e324b734,11156128,77c084a2)\n,S(53f5f5f4,37fb010,2130346b,51b9b14f,e75d95f9,b8f80e65,67770bb0,e4ec8e54,8da52b53,c6e733f5,aa0dd2ef,23e2e1c2,24c0d571,328520f9,cb1cc5dd,28c62f93)\n,S(206ce565,e90ebff,7d799e3a,134a56f6,a897ab19,186ed554,11de6daa,5c8c4d6c,c2ff5d22,bd2d6dca,7dfec5c2,e79d5320,aaa5d53c,38ae0675,4dca9a96,a6a75804)\n,S(d1dcbfbb,87ee2fab,811f2a72,726d2b54,2176a20,cc23f744,faadf2ac,7073f443,106c63b,41800bb7,bcafc27e,3f8337d8,f71da693,e1f4350c,1870f968,edd17db9)\n,S(d21aa173,c54376ba,1eb9d432,26ffc9aa,a516fd0,ef17c2f6,db117392,db749328,37cf5df4,e01480d6,604f79de,63a754b0,2326f9a4,ed74cb24,7724c682,6074e424)\n,S(5234b024,a22c69a7,569acfbe,2cbb7ce6,15e56383,f8e1e031,78dd54eb,7d1fa3d2,2beae442,651db52d,62bc3b04,2a5b343a,b4103895,a74aeddf,d9189630,8bc000cb)\n,S(9e6e9875,9f3e21ab,a709dbd4,f598894d,f5048dcf,5ee6cb6a,50941c13,35412f64,2b670199,e38f2e5a,424dd169,e047189,43111033,a7e4f4a9,2dc26906,31757ea8)\n,S(8416e295,9a718e77,10df8a92,72de9bb2,89232c73,832597fc,d28f2928,8743ae45,6ef49202,801b408e,d81b7904,4cd1f002,20732a74,764c44db,4c77121f,1133d139)\n,S(852a4fa7,48a3b2f,326405eb,e52ba2dc,27462f72,9ea3429b,b108e27a,d53561a5,3e06c046,ee0d9c23,6b0e441c,2cbeb672,770b99f7,8d062ac6,a81ccaf3,a562e520)\n,S(2880dda0,2dbe56be,b93b876d,3c083ced,fa6097a1,cb234c5d,3282942e,3677c1bd,dfb0ea10,92d46bb4,fe95366c,5370dfa2,3d371f78,40e919d3,bf966441,f1bb43a)\n,S(cb6fbc02,9e828d7f,c03dbf86,99a676a0,37b53555,275c86f0,7709ff89,f1819c65,fc4e2d9a,36577399,15cd50c2,1cb76cb8,ce9161fb,e05babda,ce516277,86062266)\n,S(8087bb5b,ff1c3438,21b24106,606d0ec3,abc76a5,8a872161,5f6305ef,f81afebe,578b287a,a602c02b,8f5c5030,ae9a4632,23a4437e,944f4353,d9bc17de,824ce72)\n,S(369f54bc,30f2c90c,7af0def2,2517ce58,f8ae829d,124ed482,653a28fb,42d3a33a,b8f2eaf,35af7e32,c63c97ae,f5962143,61f466bd,c4cc1b40,b4526157,b9b59d16)\n,S(87be4c4c,1b2f871,53bb2448,ffdb6ac7,df294628,6be49eb6,edd3d533,1fed8f7d,7ef474bc,6386c0a1,5771ec54,21cd51d0,71fdc8a8,66938a2a,dfe6f4eb,ca0effb1)\n,S(7b6678f0,18f75bea,8c310eeb,239edbe2,80393f1b,5eed1cfb,c013fa29,1e14715e,78e8b8e2,666ee69a,7388275d,2aa1bbf3,d985707d,3dd52890,c181a8b1,f38b1fd7)\n,S(89ec641,96729e02,2a9608f5,8fba388b,77d2826d,6b37caed,90d27394,b160f135,5def3142,108d7387,19ee5a7,41deb18b,5e3030b0,d919a1f8,ac94157,a4786cff)\n,S(2cbec739,3769090b,3aa2acba,b78c3fac,8b83749d,641f9311,99e6d1a6,36177f8e,3140e7e7,57ad2d5a,cb34a007,f4f26aeb,67fea7cc,8902fbad,2ca92083,f3de8886)\n,S(678cefcd,a2d6a58b,53e7b116,d03020ae,29d57618,4663fcf0,2ebcf0ee,bd946908,f45be9e0,13298eef,37cd56ee,932b2a41,18834fc4,331c1713,314bd028,e6a3491)\n,S(8ddbd278,adcc4ece,4692305a,94cdf011,5073b073,c88c1524,b43f1822,c73ec0df,90510edd,3c52c6c8,caa9ea1a,e28c7784,5d2d675b,a33b1022,68b93b17,80fc5b0c)\n,S(972bf082,b162ff5f,22b149c3,d238260c,607d7878,aaf70739,3041d0c0,d7e36626,4685b3ba,f61cbca4,d99b64f4,3e90a442,6eca9f24,d0235324,797505be,4c4087dc)\n,S(42af0d52,66604ab9,7de801c5,4514d23d,d8c1f760,bc86280f,540cc57c,bbc97230,5649b89,8c9029ed,4357160b,d97b74d5,cced0668,98de3b89,77192bec,1699ce38)\n,S(5366770,87296d1d,8e6138bc,a9a1a0c6,1748ee21,4c0410a9,fa5623f3,d7bb30ac,e0683a60,786ba0d3,52619c2f,672d90ba,7c297b2e,59591f31,fd8b8fd8,ed5cac1d)\n,S(a03b6284,e85bb18f,f04308d6,bce40e91,7d5d0ab4,ad920255,9de55c11,fc39fc24,2739ee82,c22cc348,23fe7235,a939db8a,c073005b,e014b564,4cad5a8f,e8785493)\n,S(2f394ed7,268a53a6,bd998055,a24f7dd,f5801dc9,99233a63,7332e24f,26b66e97,b52b4f3e,e934ba86,d1bd3714,a26bc4c0,e49d09f,5d055413,8d3f4cdd,73918d88)\n,S(91773010,527e537e,3aa0c19a,611ef5fe,7740bced,ef0b56eb,bb35a12c,7133f8ab,68f937b3,28b64809,27e1063a,bbbc36b5,b097ae5c,ccfbb965,f4814f,ea9fb5b6)\n,S(2851bdbf,cddc8af1,7a20c1ae,bd529df8,28486bc5,50a00b24,763600d6,904af615,d302c085,702e27ae,6d46c376,33035d6,ee2acfc8,3b731758,5d15b2d6,dccb1356)\n,S(e986d7ab,25499f1,45610b79,1b47e597,8be3d363,5a6f29c2,5d34da48,314bdfef,d0638dc,b3b3c150,10ec63b9,61104559,cfdb182d,31c41c16,5f53c331,47de35a6)\n,S(bc45db2c,5639b2ce,2dc1c5e0,d831d824,ab44daca,7fbfa099,b2e648e2,8f8bfc03,5d93e3b1,27b289ad,49e32740,a9f53e0,79a80580,82606884,2c1f9b52,7213e32)\n,S(4145d67e,47d9809d,2c67b4c8,49e29101,849ef512,ca7b22fd,667498cb,50a8dfc6,5471f4fc,2a4f7f82,9708604d,90daa64f,daeae007,d6290ea9,4922173a,4513f096)\n,S(2d157f7f,4cd79d56,bb15314a,a738dcea,427e3087,e7a5afa3,c1ad740f,5c686825,c1c4f318,76159f4b,94e7a29a,2766bb46,962a4e21,3a7234ee,eabf1ea2,296fc1c0)\n,S(2f426284,77040b2e,5dfe26cb,c12a81b,d6e89696,8226987b,361d7961,a73933ba,bdce120d,141b2879,effcf601,c75532f8,a384f942,879f24bd,45e483d1,8144075e)\n,S(b419cfa7,6cc91302,e683c9c0,eef23ca7,bf9f8f44,37ea220a,b8a1fffc,3bbf527f,bb86954e,290f2419,e4891a70,b48806b4,a911e956,e3cd0dba,3c0251e3,aa929517)\n,S(cdb4a6f9,5734164f,c7af2913,f0ded939,2b17bd09,b03698dc,ae2d72d5,4925236f,89eda236,bd1bf5d7,e500c47,d4996451,d57c963c,4f125ff,c9ef8e6e,aac8e7aa)\n,S(ed4ea751,a45ac44a,33e6f2f1,50392fe8,a12a8c4c,2233ca3e,321800f8,f408c256,9c7e9da7,4a2b349a,ae9266d4,d04d912c,a296d963,98ace64a,caf40634,970ffef2)\n,S(9b06fd38,fdf963c2,830ccfcd,1df08a73,84a74b02,fa79a87c,96decd0a,3cfbf5d3,e866461c,e7ee6015,aec4ba3c,d4dad0d6,3ede27a3,2a1b20d4,eb29de00,6b226416)\n,S(df11481e,efc1cd1a,97e13f1e,e0702056,c2b7894b,de1a44ef,5166e521,1af6ae75,a1411856,35429fa1,ebee1f24,de73e2cd,80c76661,717abad4,a8354aba,222b7e02)\n,S(f8328d01,b1f3fb3,d07bc65d,e807c619,46e4df15,a518a845,23da032d,12a3c9f5,e29dbc74,7746d478,9ca9a6d0,b5ca9ebe,de174914,7a709df0,d5e0f100,cdca6216)\n,S(3e3afbbd,b7fc2301,f9a13590,acc4fb5,ff0d1b7a,92e09e46,1fcf0093,4d3fff86,1fc7f7e1,b9821c51,bd44c8d0,9619aeb1,a5c2af1c,3ec28742,f0f26212,6eb6ebd6)\n,S(aad17eea,68348015,9cc19f8b,69d335b4,78ede880,4c551660,74d1ea9b,1ff86125,e993b8c,ebab89db,67cf45bf,361ee910,dfa1749d,26b488e8,ed6cf9df,9d365257)\n,S(213fbb19,5515c686,fe8f44b6,fe26a178,286442b8,fb29072d,37ce9972,910ea35c,497b951b,7df7f4bb,2d0ee577,19876203,d68c3958,62781362,18e8969d,ed52a852)\n,S(cd7f72a5,78ed819e,3e93321e,c8b8c7a7,eba91b47,92821a2,92493790,370120fa,a3d51c70,99280f2c,fa2c537d,991077e6,ca4eac91,93e97ce2,d8ff5fcf,45bb1148)\n,S(70a360c7,a72939,f9a3a28a,1d1a9e2f,8240aec1,878f9b19,68923e0,b67f3b51,a1d9c07c,53a4dbc2,2ea4ae36,b6a0bb8c,dd175c98,6d2f61b7,3eb05552,ad710259)\n,S(544a615b,4f8e2b66,fa1dd19,99e9cbe8,eedc35fd,9cda6d33,7a076601,21b5e46a,75d26db9,c76fc8d7,65286aec,bdd9c97f,d7ba7a9a,7308e6bd,75150b35,ba8451e5)\n,S(4218d79f,76a073d7,af19b265,74d5b5c8,f8b779f7,36c23c92,a01c3467,8ec8acef,6815f631,49073b5f,e65c05f4,eb284c21,87e60355,e207cbda,f2c01eb9,becfb28e)\n,S(6ada2638,1a82acc1,8a333759,8635f83a,3deca5d,9e4dbb38,64a2fc1a,a269b0a9,53d356da,65f7526f,60d05f32,b8b5f841,2e77b6f8,b61533ba,e8ace229,5eda6c08)\n,S(5fa99d01,d9f29a59,75518e98,7c382c41,8bd46ea4,7813f579,3366618e,e118b09e,d479d238,38deb81b,dcce381e,4982652a,f15f6602,dbec34cd,6fc0e82d,33fc3b39)\n,S(cc6ed576,34cc67ab,6ea676d7,2fef96d3,bbb4a00,b2b7fe44,12d0195b,44d76f6e,b15c15a,d50999b8,aac9e5f1,5834284f,dd801b0d,da4be94,f520af62,f7bf820c)\n,S(e4cd0fdb,5323ea3f,deb10bf8,90a26b6d,ff447679,d8747ddf,ec32ee3a,40ffceb4,fbdb40c8,ba9c4357,656af718,db7629c4,e2caa87b,c41f8c48,d5d86a30,d220e1f5)\n,S(77fd722a,ba51b929,ac1e3ca1,a2346833,b3c1fec,7a756568,6afb7cd8,9b88a8af,d02519e1,d6e9cb4,4f378ee3,1df4bb74,6b5b555b,2c7b0691,9cf90f5b,3de98505)\n,S(4d391fbc,a9dd3d47,9d3ca57b,f299f4f8,6291e523,95ff73e2,665418c2,997a41dd,5cc9ec33,b55e606b,b93e9fcd,593c43f3,e5d4a3c4,39ec6fce,1a9ebf25,b4ce899e)\n,S(740bc446,17b17b84,5c99d63c,3c92fe81,2eb232f8,8161a2ba,83f3a445,73084e97,fd8ec6e,f4f9567,71717481,c1301876,fb10742a,99028c67,883254af,f8355464)\n,S(c258c21c,adeb8453,5bafd8d6,cced030,c6aa12c4,1bdcc392,b2d10e5b,1b46e5c,7cdf037f,3e60bd7f,739d08af,a20de5f2,b73646a7,5ec3e2af,4cb62139,5d171d31)\n,S(8fc88069,733a4d5d,bd80261,c0c9ca65,fac22a5e,1bffd768,dbeffb83,24130d44,4211a94b,f88c042d,54d37ba7,41cee691,ca5bf0a6,38f0ca95,954f4aa0,12fc946e)\n,S(cf62ee1a,40321c24,7fbb0e0b,ce99d314,f5152de3,32b827c9,67a61bb9,c96ad4c,6284a7c3,e64f7b8d,4bd978c0,77dc0d22,e6137336,6410d5a1,9bb09640,1ec4a3fe)\n,S(53351f8a,4d447760,ecc88443,19b69160,bb00b3ca,fd6fd9d0,6c0040e4,549f8ba7,83844e19,3816e6ff,755c148f,d5488384,c7c1cbb8,8c09ea0a,16352bcd,377f6b83)\n,S(a02063ce,ee2c9191,94d0e1f6,2ace9407,baa0157a,d2e600a9,e173348a,1d06bb0c,630461b5,55653f52,da9b40ea,c4448a8b,fcdaeeb0,1007dde0,5f4c186e,9f146339)\n,S(70bcbdcc,25de1764,7274f374,196608aa,c360c09e,951b9857,5a6a8d6f,e1d35660,3bd5bd9b,716359ce,80b5e719,a9e1d40c,3a1c7430,94a82b64,a90b0f4e,db461d74)\n,S(df8ad77,83cfc3c0,6fbb1fe5,2a515de0,54b161c1,74155fff,13812d19,aadc8fc7,bc4090f6,416db0c,9d34ff20,a0b7cb99,af38401b,1264c604,44ec7355,80069569)\n,S(2504e9cc,ef399800,5f2fff3a,452d56fa,8788df47,e05509ed,777a9d9e,540a30f9,73c506a2,c6f48efc,af7f4d2f,ab5fd833,6fd6514e,db690a51,11659f79,7390612a)\n,S(24ee0724,1c920334,3a6a6fa5,68979fce,18a9ce0c,819e3a61,571141a3,5bc97025,ee642ecd,605b84e8,68940a6c,cd7f4d93,fa0c6816,2fb0bf6,ba22427c,b0bd7b8a)\n,S(1ead5ce0,9665c05a,63cd8eb1,12097f35,4961e12b,25c03093,e1c6d919,7a3929b3,1800df5d,a1abcc4a,b1c32fbe,a1dd7120,7284b5f5,dee7009d,c2f4aa6d,7156fcc3)\n,S(47cf2ff2,26084f8f,9020b0dc,d838874b,160c69ef,2e5e89c0,98e7891e,ea05d507,a340d3df,129b5aff,1044d0d2,c3866464,bca2efdc,8dc83516,cf8fa522,d5fb7d48)\n,S(4064fb9b,8e2e4952,a218bb8e,ae474a4d,51f050a8,3f9a7e75,b04e39c4,42d6cbdd,ff9cec76,a2ef1930,92d3e02a,aaddce0d,18ea66c0,d1adfd2b,9c7886dd,b835de10)\n,S(838ac8d6,e58e20d0,321e0150,ba6d401f,cdd70a40,69d980d2,22de3353,fb81904e,993a6f96,2909dbbf,7b9a6b25,14153331,b1ef24fc,e892710,5f95488a,d95614bc)\n,S(a5e36d83,189d43d2,34d6ea26,ecf5943,5aedee72,bc4cf385,5fce9b5e,e202f266,78c02c3c,e25c3b89,9dd2933f,b41435a3,dfc2d1b5,e7ebbfe9,54ab1c94,79822c55)\n,S(9e240cbc,d357c4d3,34f31209,58d6f7ad,5ad79e7a,9b51f572,5ddc8fe3,1fba72c9,aea34a5c,ed60a062,ec1476b7,b30b3c9c,68cc5e10,cef9f0eb,6729172c,b511f06b)\n,S(ad1b0646,bb315380,5c22b91d,1ee47a26,dfc9ed5a,860be0c7,ea8daec3,b6dc2eba,ee2e61a2,2499c509,1a910c9e,ea159873,a298daa9,6d30d8bb,353b9955,92dd2083)\n,S(4f7b0889,11d8f64a,550d8c7f,11ecaa6,fa12df74,a236a0cc,35cb7cd3,5b0ec72b,931af41b,d297e18,b4d9ffac,8d7f8691,29b94250,f1de1d99,3e31525c,4dbb21e3)\n,S(dab2a170,e4108f3c,93fba874,70bb12fa,834d0274,35695870,d2d3523c,93d3a7ee,262f12cf,c37f010d,deaecb24,d08ce35b,293a5c6f,1746651e,7bb0b2fb,c573ae4d)\n,S(3437257b,784d72e,419e5082,311b5a66,d499f687,c4bcfa31,7abc7484,a3cf39be,ce9bcf07,6da8d68e,8453fa14,3b06d7c0,f38bd0a0,76f1cec2,a49b3bda,a5c398d3)\n,S(4594ae9f,82611ab5,bf786024,ea34bfaf,939fa409,34ad155c,9ed5e736,899545b,2255c7f5,62b0ba72,c3834e72,e77b478d,77d3f15e,3ee0cda4,c4b3f928,ead450f5)\n,S(7337705,12db06fb,36b21fc,26b585a7,3aebb036,b22743c2,f13212dd,81898819,753ddd59,725fb0a2,561cf461,c587f3f8,848b53ed,29283c51,5150c57f,50307887)\n,S(bd915814,4d2afef3,552d81c1,8c74abc,a53f4c2d,654f72e,3f2abd66,d69790ff,1af609e1,7f27e373,b42b3277,a5f4714a,31ae895b,95e0c5b9,50e7ed2d,1827763e)\n,S(8a11cd4c,a51dfee2,28c1ced9,3d8870d,67782740,1f49fc73,d4ce56db,915bb557,d30ad7ee,ae9f9c97,eec27822,9f47100e,ca46b3f0,27339719,6be0f619,56f5cf23)\n,S(7929b5f0,2802bfeb,6c23e688,65b0272b,cfd058d7,c0a45ea6,97d46d87,6f9bfcfd,f9bbae21,8039783d,4d1e366c,32a890c1,8c80d1cd,41f08b36,963b54e2,f4fde5d0)\n,S(80df06ac,1d5b966f,8080e79b,cc9f01f3,d55f8855,9b1a58bc,f6e4c526,3bd89d01,346926d0,a59558a9,2625614b,ac010f36,5ee5c337,2660fa7e,be41aac9,41136538)\n,S(74545478,9ff383f2,94a92b4f,383ad13b,ed4b01da,d20f4ac6,efc83315,be5ccaf7,36489f77,81ee77fe,de1ea165,c4cf2b5f,e8217361,9e760cea,fae777cb,c160fa9a)\n,S(2c6d35bc,b213a8a0,95c11fdb,42828b7f,e562d7d5,f877de67,de62bcd8,5af8fe85,aa30e370,34094f9f,4502206c,72f23298,2e60139c,2bd35631,44dbe6b4,c75d159b)\n,S(8353657a,9d934eb0,2811846a,728cd162,4b43429d,304aa7be,830da70f,b2e338db,f8400438,20ffa5d,28189c5a,ce693c8a,ed4a4caf,3aff83b1,66a9d404,74e02b71)\n,S(f216e93a,54ce56d7,c7ef6336,561a6299,2177ca73,4ed867f6,fd1a8ddf,aaae494f,db0a3f13,a0fe8326,63e8fad,b11cc347,8da296b7,2f1b672,3f43ea44,acd30611)\n,S(dc371221,9b5d73f9,6562baa4,b62ec7f4,2e9a3dc8,de6e7112,273d0811,a88324fb,eecc9092,ec563e96,3720acaa,929f9bb4,4f1c9015,7c3300fb,581b154f,df57c004)\n,S(db34736d,48f0b4f1,e1ef6029,6ef534ae,b10f047b,4256516d,d4499072,36649475,1c29cd6c,f7a8c786,952c34c9,b93e5188,1a116966,164d0fdf,dd1be4fe,ac586bec)\n,S(a248457,20468424,f355af53,62f5bcf1,971b09ed,358fbd33,78fc7297,3696add,9a703d61,37d0deb8,a3767a56,c2e24573,baffc931,bc850694,8c9a3776,26547803)\n,S(bb7b806f,a9ac753b,bbeaa429,31f68d0e,3eba38b9,8fb25ed2,40c9faa3,124436c4,8f812574,a1a8bbe8,d9b682e3,d9b0150c,7c6ff9c,f9b42e64,6e5836a8,12426752)\n,S(6703c476,fc28a023,f6619427,69e0f068,489344aa,74495ad5,17b096ff,c3ecf446,8b48023f,7c9ba723,584211a3,6731e14,f42699ab,522e15e,ed3ac43d,28e2a38c)\n,S(bcaaf8e4,bfa4b448,fe23f3b7,a1612b82,14cf0daa,349463b7,1b44ba61,e2dbf6a2,bdff2700,e2cc953f,e9d08835,dbe8793b,b07498ec,68ccd736,d6fe1710,d5c7f404)\n,S(906b4fda,1a557220,1dd5b446,d726a2e6,21794517,3ec74f7b,bfed8791,9310cd49,d753f2db,cd2c4d28,d0304bc4,78690871,cf838490,2d7f4f93,441a74d3,892653cf)\n,S(9ec09783,18f7d95,5180e326,e1bfdd04,fa5369cd,eb786905,8d726ac3,9ef93d5f,9cca8057,994b1641,53ac6842,4d28fb70,ad22baf8,f894a049,d1794add,97acf205)\n,S(53347906,b75440ec,28362a96,f114d2f3,6f823cbe,bb0030f3,a2de3314,12b8209d,ccb38e0,471f8abe,47ef1bf0,29550ec5,59581680,3e19034a,b06a090c,ca0c1fa0)\n,S(27c53f29,61b70480,93e24b18,eb357807,a33e5411,15215337,3b98f80d,d23a4870,5a3f4b8d,e18636c4,71fc70e5,9ac8c4e4,703fa5fa,880594fe,2f3b888b,da575601)\n,S(921927e3,7a115f9a,12a616ba,cf55c213,22ed51a3,e75caa5b,eaccce75,de59b68f,bdbb7c7b,c1e4c5b5,98afb590,6263d779,55884e71,17864ae2,e0636c4d,727b141)\n,S(973b3c87,6eb81ffd,677c692c,ae432751,efb3e609,1a3d9ff8,dde6cd6e,3f3ea8c2,340df771,129510b,a4112c5d,adbcecd9,8684b0ae,3a9683b8,49aebdd9,57bbb0ed)\n,S(20b817de,f0533767,9938ef03,69204700,d5972c32,12656ce4,205e9ac,1b01ae71,2ae2fe5b,e2daa016,1c65c352,94a0abc5,c6b1ce64,fea99c12,34a14aa8,8395707b)\n,S(63e2544f,7a7e9181,7a347b7,f72eb43d,ca9fc5d6,3d931402,aa6889b4,a3c95876,e62aee6d,20d714ce,5cdf52,18bd5fae,adf49cb1,f86e6067,f91cad71,280d16b1)\n,S(2f90de10,71508cf0,b3583abf,c47d762d,a69dd472,e4183421,6ac39753,e22aeb80,5371bebd,4a0dd74,625e5e02,5a118488,880f3a89,9c23e64b,76193abd,3788d389)\n,S(8d423ce8,faa96d05,45e37cf7,5e5a351f,7c9359c2,ad1c48a,c9adcf29,d2ed7209,83d4b83d,ee76c401,a18df794,8a655c3f,bb9d23c1,5ac0bd6e,ea80b129,bab40f2)\n,S(12fa4142,5e028aff,303111a2,9144242,a9c91d88,55b3ea3,becec110,80181efd,6b95b370,8e792b57,ac10eddb,362eb10f,ee5c3b8b,b2e37d4d,c4d2ac40,e8c3ff57)\n,S(923ca95f,2a3bdd7c,d7505632,cdf2d730,ce70196f,ffd0cbbf,f8347882,8a706f73,f8b0c866,c39b6173,b383983b,210cfff3,1903afdb,cad0b2ee,3e541ab5,2746abbc)\n,S(844d53e,878240e9,63e3875a,728f4704,64ce3aa1,66209776,a869e0d6,88893646,c60cd291,92bf8c1f,f98c47b4,a713bc75,1c84f9c7,19fb32b2,5b855e73,6feeaca1)\n,S(43786fd6,c5471d8d,ba277ff8,1005a5df,8838299f,66636b2a,65e7ac21,f1dc98f3,d292a2c2,9c8c5bbd,8f79109c,b8706fe7,745ff884,f98c127e,9142f52a,56091b51)\n,S(6d1bc28d,f5e9ecf6,38783f71,fb98a2ce,bb0dec45,8b07257c,e94736dc,ae36d7ab,c2c54192,bfd80447,86214cf7,a28108dc,e2c00e07,2321638d,a0e80023,88d549e6)\n,S(6bc4ef34,7f74ce3c,2ef3f89c,c3e265d5,6c742ccc,ff84b7f6,7d8956ab,16ff86c6,eb4492fd,2d2ab04f,1276be35,c6bde62d,be26a6e4,60c5c66b,8b0fccf1,79b46408)\n,S(6af45075,fa810958,d42a756e,d08d5c,d67a62b,cb33cddc,b35fa99b,bf678b38,adbb724f,e7682c7,678ffc3f,ab738666,886c7b93,84960bfd,5287ff9f,ba5bff28)\n,S(eb6d8b76,36466365,a96f49cd,355b7460,939f340f,905ad1ca,a24e8a66,55260600,7ae9cefd,aea30b7f,b9ba11ff,603b81d2,41f7a187,33f95c3,3c2bae0d,7fbea3cd)\n,S(bd0c2233,2fef7d3f,6738dd69,4bad4cf5,b34d5e9b,ad6500af,11e4575e,91795068,eaba5c4e,2ea0b21c,a9100b6,66823a4d,a91c4d57,3aa9d136,76f820be,9d1cf209)\n,S(c5e23bbd,c5049419,3483e083,14249157,aa56d9f,804374b5,54c9879,52b7e392,4caeb8cb,f684217f,bfdcd02e,3aa4ae3f,8d59e766,855b4fe2,f7f8ac7a,6e597751)\n,S(b5717631,f3aaab92,5543edb0,3d21c604,17178e98,dea38bd8,10867cf8,8c92d2a3,e74209cc,324a9ef,8b31874,524dbab4,d2bdf0ac,8f1d20e9,a02409f2,8c11942a)\n,S(9c456099,49601f2f,caca85d5,d30a07e1,b2d17b7c,7b838cca,2fe4b5e9,5d305cfc,2d7a1540,a109dc7c,2841b61b,31e50078,329273c3,585c8674,674ee06e,ff04eeb6)\n,S(52ae2946,c0ab36c4,a8aff175,73b6604b,e33dae5d,73228d54,98c77a51,8aa82f63,70e23d9b,66061bfa,4d03f899,b65493f2,7179f5c8,643104d,24dd771c,777f87b4)\n,S(149ec3bf,55ff462d,dc1ba490,384081e9,89db9ac2,c29efdce,f4f59f0a,394adf9,59c1d88,b91db942,2ae8fbc7,ce6951c8,49642b5c,df949801,341a8bc1,789dd7af)\n,S(aff89294,d66718dd,dff83534,61538da3,dbe14a09,c14d0576,8a163810,42ea7ea7,71866beb,cf5887a5,ece2352a,cbc256dd,7b615491,2a88cbb9,a924e764,4d59266b)\n,S(de44f478,2cb30472,ad52d49b,303e2b41,33887eb7,38e2ab78,da7bb406,584e76fc,6798ad84,25bad82c,57c630d,7ac8ef21,b13d08fa,830edda7,eefd23c9,ce482bf5)\n,S(e0bc7a73,76169366,c172c88b,e1ba02c6,b3a380eb,2894e134,5a2ec7c7,39682e61,bd147eb9,33b18fe8,dfe7c0ec,87b7e993,5ad1f7c2,ab5424d3,c23609cd,262cb2e0)\n,S(5ee34f27,2af69f33,9473cfa7,a536a22,ed26139a,71cfbb11,27c7a476,32f0e6d,c1df8f96,dc0d4d82,f6a57de9,85cdefc5,1316bf10,dc3636cb,80762aea,c4e13b8c)\n,S(4dca3bc1,77fa7a63,9b8c274d,fe157d7b,67296846,bed5d13a,68bce5e8,e599a0f2,8fd2b558,36fb9aeb,fdb3fd75,8f59c8e9,2fb48968,52eff2a1,d01c32c5,3d2fb234)\n,S(554f6bc1,87560290,ef9ed937,3e993f54,98081034,a03484f5,bc184751,f8b48136,b454c3b7,dfd512a3,517834e0,e8c3f50f,de80863a,1e0fd83d,2064a6bc,a172b26a)\n,S(95a81b50,a6c0879a,6a960b2e,162dc22e,955af87c,b539eba4,20b2825b,85592ad4,be55e8c4,dfed22d1,f5872b75,f38aa4c3,7c7d5086,f67011af,2651ab0c,c45c712)\n,S(907b6d53,9e496a6e,358d14d3,431f5582,44a4f8a6,ea291d85,3efb8be7,477e5c4d,b3d3d694,3853bb9e,67817fad,1dd7d1d5,ff33e200,2922665c,21f872e4,77150eac)\n,S(8527c81b,b342576f,67737cb2,33f17605,c8884c64,6b7a8357,5bcccc09,c7f17aa6,b6d675bc,db8d5249,57b1930c,145777f1,9cd47b9d,33386a64,5044e8f5,877604fc)\n,S(8e1e3a7d,5a320d92,4ea13436,f906e9b,bc6bf83a,819b9e9f,913974e2,efab00ec,d94f03ab,d81d5f25,c323dad4,ea792c50,792e07c,79281c4a,ff309e0f,f418b0b9)\n,S(fc02cb93,be1f4a8d,9acbd86,bc68cb6a,dd0d8949,5cc7434d,72cfab75,519a8d76,71f7a532,729e45c5,98a6ceb0,885a256e,ffe4cd9d,967e84e9,8b73c772,7e4d4f94)\n,S(cf981302,a2858b3b,b1ac44db,4f08751b,ff76357f,9b2ed6af,80a289b1,be6e7b8,237e9c12,bf23666e,70205ded,984f1fa2,f1a8a828,b88847ba,d3a1be88,8d73b528)\n,S(3e6e45dc,1408e920,3ca74cbb,ac8d50cf,71718d1e,ba05228,e97dc4be,a8231d82,2e3fdb7a,2ad3a805,f61f287c,a7ef86df,961009e1,f0fde8a3,14774677,3b1ef848)\n,S(bb047795,7581471,10809088,8119b0ee,3ce1b2b2,df2668b3,749b9eda,707d4657,95a72efc,5f95f3a6,af5ad697,7dbeeed2,8d6ee55b,fce29bc1,bc439168,75c67587)\n,S(4e015d42,b8b02c10,4aba3103,4ce04cb5,fe356d,81291939,3f5d1b9,68dd6748,d35b20e7,dfbf6d71,d94e96ff,c9267422,746419fa,811bcd2d,d3942c00,70a870fb)\n,S(609a4c57,90c8b210,9eb7391b,d68d078e,70850af2,410df867,92a37459,24a49daf,f3a6327e,bc965b3a,581cb14e,78a4390b,14431d00,d1f34e8a,e35502f,bad0e98)\n,S(ccbe0736,2a955ac0,4e1b7558,a17ecf61,b9ea0761,305b4aa1,780bab03,a27fc730,f96b7c16,6c98a1d7,65ea4e3a,e0643298,d981a012,4b03fabb,71fc47f9,1c92cd3b)\n,S(6ed60282,85df2302,e6b10ef9,4e11ce0,9143c569,a84388c3,e2151c69,c3ccab14,675ea3b0,687a3b78,e8fc7564,9665e62f,e91b0d1c,25852608,1d591ea5,1ad196e7)\n,S(bdff05cb,a0cca14c,55b3c592,38515532,70806177,443dac7f,4c07ff69,cb49d8e0,5149ad04,86cd8ecc,274a7239,833910f,f09d7993,aaac9798,1dd106da,6e0c9a50)\n,S(64ce68c,cc70325b,22be5366,579aed1c,af9f6e55,c2c7386e,ed579911,4e2bff2b,f8c89976,3c8a9a0e,ef61dddf,2213cbba,11bf1be1,eab6506b,d596aede,45cb1cae)\n,S(cd42e46f,489150f3,dcaf3c06,e1e5a2f6,b40de7f5,626107ed,af01471a,18ab2bb4,d9c250dd,d2026967,b4c921f4,e253a788,17f11f89,f679e5c2,81dfda0a,1bcfada)\n,S(f7c29007,e7145420,e2da7e8e,3ec4daea,5e9b121c,35c4ec43,59d55f01,89619735,66451406,4dbda93e,637735a5,6a06ddb0,5ea2933a,36cfa3dd,c2ba4a33,eba493b7)\n,S(6339c1e1,d4944856,26b3d221,4715835c,377609d2,d91150f2,c5c1f679,5e93b7a8,efbe6dea,47b4e8f7,ff55a20d,8facb8c1,d10a6960,98762d95,be532fc7,3ed59b28)\n,S(fccf1f13,7d22ed06,5f4bbcf1,e9f4eb86,7b1ec78,d9f40b4d,aaf58014,3489b37b,a5a77c2f,ef9facc3,881559d9,d9756b4d,6646beaf,21b3511c,64a4b550,7dbf3e10)\n,S(da97ff10,6f284ec,f123b554,17bc8f5c,a13434d7,58ec3d4e,935c1600,404f62d2,65c2168b,4900330d,f2f1e3d1,cd8ab92a,4f308222,881a493c,f8b301cc,af12e168)\n,S(6676a4d5,428a24ce,36957556,c1b44593,343ab6f2,21f0b9bd,dce2d898,333e4fd8,45bddca4,b9332535,f5f4d3d8,3467d793,b7afcf58,45a19593,854b1c5f,3daf7b41)\n,S(791e6abe,cf461420,54a22c7c,d3deea41,53396e7a,2a619ccd,30212ade,e57859ca,e4033bfd,8c55c93,ec732990,aff43ecb,e2ec07dd,17e4ec92,68a7b0cc,fadd37a1)\n,S(3a7c7bb2,d5181550,a78985aa,84b73246,c66dd947,4bd7c5ae,20717f31,af0018a1,2388eb17,e03cedc5,221f732a,9e505f8a,b6c38d25,184afd14,37b52d45,fe9d7459)\n,S(249a2db1,86801c96,9cbca936,101381d7,62b74017,2b454c3b,ef720bc5,413ab999,da185c41,76aa91c1,d783cf9c,85c075e8,2f708e0b,3ec930cf,f71897b5,d1d5e7a3)\n,S(b25e0d53,b4e0cc09,985f21e0,c5655e50,32c0857f,b792b136,14da6885,6b4f8590,1bd17aff,6b02e3ac,e1cfac42,fd28d837,ac5b80,42b21055,d6b84e67,5d83eda2)\n,S(73605368,5e83388,a869db66,f110243e,bd1073f7,517fecd6,1359eab,b7862fcd,e9c7a02d,842c5a6,fa43407,6e12d41f,e767fae5,5a75e913,d6912536,6d5f9d56)\n,S(ec2f0b56,71392e97,2f8a0c9,af259d42,2e5b52da,5e70fff9,7115c961,77f1b1d9,47f7debb,adb24e59,c8571fa,98e56d32,d49e072b,4fdec818,2049498e,908183a8)\n,S(7d7a8fa8,250dd43a,91a2ad2f,320e18c1,afc25595,213778e5,cbfa6058,4be2d378,6b48ba16,89627d77,2700f11,9bc20d7,fab2b07a,413f752e,2a0e111,60fea3be)\n,S(316a71ce,52b6723b,a67aaa01,e26082c6,6e59490,cff4c366,5c695ff,aa6713d7,d6f1c1a0,7820c612,12b44cf6,e5cb4ba1,84152ffd,cf82e020,e95af73,d6a1cb9e)\n,S(21a2a8c3,ade89ff,c32e5fc6,ead97a22,9ace8857,11db9930,ade6e72a,9fbcca51,95fd3d04,38df517b,5712aafb,432f0e35,726fd438,a2b941e4,7c56c1cf,8882e4d0)\n,S(3f181867,b3ad8170,dad46c68,f513afae,1ad2cfde,41f9535,5369ec32,728f94d5,a51a94e4,e9f20eaa,d5599189,4222ab0d,91abb8f0,38b00a91,5f09df10,a2317527)\n,S(e9673139,11be39bc,f11ecb9b,690ecfb4,79b7aa6d,3158ea69,7d0092f0,89f63c1e,c100cf7,6f8783e3,8de2017c,32022a0,da9be6e8,61307546,1f98142d,4903abc2)\n,S(61ea8ab0,1407ac7e,547e94b0,6f3986c6,d3096d43,2bd08cd8,61554fae,9008b122,e5c55bcc,a6f713a9,76490488,e69f1cee,150167f4,283fa792,a105ca8f,f4a4d182)\n,S(ad8fae7a,17457fdd,9f481554,239a3f1,49673df7,24a3a402,cab73f93,bedab9fe,53b7dfef,7966c4bb,bb01d037,12563f79,48517220,2ed375d4,d777efef,50f03e6b)\n,S(8605cedf,bf7f2e54,d3f62f27,44d9d436,cdf9974c,9190020c,586818bd,b6a829d3,5af8a55f,ca2aa1a,6209fe4d,a7708ff6,e7a33df0,50e85873,d786f54b,7d946b88)\n,S(bdde544b,465b9ef4,7dcffa5a,7a794cf9,6e83253c,2f22d4c8,cbcd2d6c,ff921d87,6c536367,7ba867f5,5ede7d23,81be6ab,ec97c8d,f88a1a74,14ebd6ce,8caadcd8)\n,S(31882a45,e8b088dc,93eeafca,85c28f49,62a47bd2,bad916bb,fe3e7346,32fe1cdb,b3588f0,c5f86e1e,12ab833c,12e028c9,d03557a9,e02aa1a6,fd11d693,55f176bc)\n,S(17be4052,45800f9e,db510b72,603b8e63,e49fadbd,62798883,b0d04f76,a5dc1202,1504ebdc,df8855ae,28f7738,e40d277d,81667e55,a2f59cb9,c9e33a4b,8d32fc54)\n,S(c633bd33,bb697d2a,6bfc4e69,707f2b28,a303eaf5,a601b08c,9c56afad,cb629537,86e3f413,2d4764db,f2c06b92,461c64f3,9f3b7f78,33139eac,2b4d59b7,ba18cef8)\n,S(f39e208a,f4c710f7,190881f3,a33cd113,633434b6,3b460062,570618f5,8260bb52,90c56805,807b36f6,272e2b66,4d943c33,d0171ee3,ba5cd4e2,bfe52f92,b9e2e62c)\n,S(ce984394,14f29607,a54ddfb3,72db8ac5,ee4e5414,f59f73db,89360232,f4a16c54,1a4805a1,d1057b13,c72f7835,4d40ae96,bb80542d,ba5ebd7f,627cfbae,ba24e0d7)\n,S(5266e79f,81107a4f,ba571af1,885d755,94504122,a15a673f,6257f633,bb0a76bb,5e7ad1d0,9cc85f12,8773ca39,77b55c20,18d38200,fb739918,d3b0fc96,a559b457)\n,S(4fb9de57,63f47aa3,bf370113,c778bc8b,67507009,5126f5c1,1ffc158f,be7056e4,2cd97636,8eec7197,aa2fa34,72fe3db2,29fe0275,8789d75e,52e87553,1486f7ef)\n,S(ad168024,a99eddbd,aabec840,6158cb92,4ae7bba8,d233745b,ded57407,23cc0226,ab105015,968e4673,8ede230b,b53c4be6,9ee6386b,91ee03cb,a21f7040,f14095de)\n,S(55829ae,f7cc555b,733aea9b,f1b307d,277923ba,148ba8d5,5a7c8001,73719cb8,6a7b2eeb,9c9b9585,5403b47d,6c60a7bc,382969f6,c4bafd3d,3c4f09a7,63267689)\n,S(2119f233,8efa4e0e,2204bbe7,84e9de01,4e1e4c43,450d5910,960ebc38,6b78b935,9f219dc3,778544c6,7a337db9,69c513a8,52acb469,34a71957,11c36913,b8e7bb93)\n,S(11fc3e1b,9491be9,d7de53ca,a2558d36,c5227498,3f5c1b32,57f0fe5b,b1295bbf,1c69c74d,ecb05933,6aa6b6c0,231105ad,91b8d188,d109ced6,2198c528,844cf6f5)\n,S(34b6ce6f,ea6e5143,95091bc8,67e606ad,5e64ac18,99085821,80abea3b,dfd2a908,5b6ed904,f4bdbef3,fb9e41a1,32c7a313,28e9f325,4e180694,40339642,2bccad6d)\n,S(6c225dca,b45768ab,3b1c567d,97ef745c,b326fb3d,2db6ae2e,22a40c95,3610a84c,7e85d752,2180fd8c,ebf63cfa,2d843bdb,912fe042,d00ea29c,d72fd768,402a1084)\n,S(5f776e5,41dd95c2,32fcc757,14b688b,cbfd2020,e7043e3,2a707144,5a8ed7d7,3b8c5c78,fc6d8354,3a09de0b,9a64d529,c116803f,6d0d62ff,2a20b369,8b273c0e)\n,S(3e26d8c5,531543ef,5e37eaa6,3244faa5,d5371e48,16fd94e9,b8bbd932,891b0e23,30a09d1b,43a4a036,ee1a53bc,6c3ebfa,a5b4c70f,6d8af4b0,c70faabe,b79bb65)\n,S(c634da91,c17a3568,aaa970ac,26553e45,6be8afb,ee12c85e,8aa0dabf,f18b36af,649681ba,e1390a7b,d05d34bd,98d87ed4,16eb9f99,c606f46d,6d522019,f1a925f0)\n,S(ed335d6,4d643598,c6eab4ee,fc242d7e,4e8361b3,ac8d747e,806962df,2e7e9a7e,f0e7c3f8,19c97aa7,2334b690,98f28bee,5a1552e7,f578d5e1,eb56b600,fcaa93e7)\n,S(d37f8c09,411359ec,3f63dbf2,2870ffb2,d10be164,7553f28e,d72d9585,1e521581,da7cbfb9,ba3ae036,72df1be7,56d3c9be,831467d4,cbe3b51a,191e47b4,9d1f1922)\n,S(ee3121d7,c7475ea5,c3aae061,1c6b420c,5b32d05,ee86f919,43c3352e,7515c360,703b2e37,97bea3b2,9b447411,dad7b12d,b809164a,ba690281,b76f245b,bc4c1686)\n,S(7b42c9bc,5c2b114e,a0ef1a59,492a6132,3f5c7290,427572b5,fe98017d,1987a12b,5cf76382,e85b73d7,56fcd92a,99242725,dd57edde,30ddd9c9,dc7dcd95,260d27da)\n,S(9af5ff9a,b13a53a2,93f9b6b9,a0f925d4,7c8f9b84,5f6933c3,ad074922,f8a555cd,ca93ec9e,89954734,c8aa13fa,5908c855,13a9ec19,6417042c,a336f1fa,be5d4153)\n,S(5ebfa274,1a2df1b,6e1d591,f70983dc,a5b2b850,856bd7b6,59c81877,3848dacc,b0adcb9,6ac23c64,2904c15e,822991e8,46e12411,f472e0fb,5fb69fc7,a0f7ad18)\n,S(93b58d08,465e5eac,8518382b,c1f6ebec,daeb486,7da65dd3,ac125e6c,fcc81e6f,54be8918,c3151784,d74646c3,6bca9c8b,8a50b8d8,63b1db8c,f4fb3ef5,1a24a4e7)\n,S(a28a579b,4fb46474,ffc943ee,32b40664,5bc86899,edaa111,32c31f1d,cb6fc858,40ee91a3,d5625648,196605f,f650ab7,6e059b14,faef6396,46c9b153,9af14670)\n,S(e987909,781d5560,b71f6029,750d20ad,add7cb47,f90c9078,e8de5f2a,d606ac9a,7121ac3,4c80dacf,ffea346f,5c5e1a81,c55318de,ac8cc907,10274f18,ee9819d2)\n,S(291ff11d,158780d7,fc0ee62a,e395456e,5c84bca9,75e84a7d,1d2b3bf4,61e1dcef,c5c8cbe8,abb6854b,670298ce,8224a945,71e79e37,9335acee,c230366a,53ec2616)\n,S(4adb1390,9e28b53e,42bd9e57,373aa131,efda7d16,b8dffd82,4bd9803e,fde315b4,66d7eb12,b827ae7c,970a796e,5c0c99b1,24eb7002,4fde63ee,fa2ecdf5,d4b1456a)\n,S(55e25f4b,95240efd,e3c7e47b,2254601e,1707a8d,e40bf384,6b3a7024,da7591ff,e9f2257b,7e98606d,743000b3,72dcba0b,e4491ae3,22e82266,4b1e2b5b,78c830c2)\n,S(d24e7493,e41dfc32,be7a6d8d,5463834d,388ddd01,8c213ad8,aa3005b1,fa747eca,e73a8216,a51b4b16,5e9f5bee,414d49f2,6d7feba0,982b9e93,fc4b7863,48c26cac)\n,S(a510b252,6d015da1,cb7e4600,3ed61af7,caa03562,19227d9,ed8eea13,61fd8b2a,3d98c2a0,9015abba,63eb15a2,80c6c479,eaa2b2f2,a0011adc,3565d2f3,8abea726)\n,S(c04d04d8,127500d5,15bac63c,ca55d76c,8404cde6,fe681f4f,6b8c2b48,87b314d1,cb3fcd77,9fb80eba,99cdb937,31bc0814,e3cd4458,df7fee1b,98c4067a,db4d9d59)\n,S(ec9c7c61,146c3357,ba851e69,18ffa770,6b5dd2ff,a789245a,df70f90,eebd0649,9a09d3fa,10ca6923,c068803c,e9161923,b36b0709,b12627a4,dafd0e3d,3d186170)\n,S(95df5d3f,5d504c45,f4b7e840,3805e54b,b2598511,2ca53064,baced58,a0488cc,a43dcd85,89b85305,b07d1ef3,23eb305a,35079cdb,743dcc21,c7a6ad48,4ce8ecc6)\n,S(b8eece0c,3a950c52,c46bf50e,b5dff949,2fc8ec4d,6bb19651,c72d447,633a6d16,74e942a3,1b75bf83,ba6c1460,d969a2c2,4a49572c,ce3fb84b,8d0b08e1,d5583744)\n,S(599ece16,d1f69c22,53deac51,75121ea0,c82b2d77,c5e2c0ba,520bf1c,72dd09a2,48a10c3,25af3d0e,dd8e2e72,5d7baf48,b2fdb672,66423859,9f73d231,a911bb14)\n,S(b8ba5a06,8d9458a9,6e2fdfaa,961acd80,7fff711b,bba4e3bc,35a5fcdf,e82ab32,8035ab22,7554582e,9038845,44d32a53,c2d82417,6e2ac7e3,2d44cecc,50f8ca4d)\n,S(b6846be1,cccd7865,e56d3d7a,f1b1fff3,ae806380,a1710c50,8c35ed17,227e65f4,bbdb7025,32945f0a,de989f52,68230763,361ee9d4,9c0e6241,77fe6fb6,cbc7201)\n,S(a1ffa65e,69872bbe,ed009e53,f846d9a1,20dd31b3,a11932ff,c3580ff8,da9d0fe,aa32e580,d5763bf9,dd054999,68b6ba6f,31c210cb,26846ada,dc0045b1,ceda215b)\n,S(9b38176d,67091c7d,f448c707,80cef08a,2ad73cd6,de65eebe,b62f9a21,730d0fa2,22d26b19,c0fb9b7e,f1ec86ba,b8ff5996,64a45988,190499d2,6fb604ed,4e609207)\n,S(bc2ccc9e,209dc64f,bb132553,bdab43fa,accfa4d,7deac898,1fa52841,35fd0cd2,47366adc,176ff88b,674931b,a8791fbd,350d1d13,71891343,74d58305,a55ccfa6)\n,S(1ce000a1,65452a62,5d036f51,4fbd2a30,d4518734,e7f93aa6,7a7dcd7,24730f6a,e09103fb,5b90f0ed,54b34baf,3e3d5bf3,fa288acd,b6b0ec19,ee3062af,35c6811d)\n,S(846c569a,887d64c0,e8fb26a4,49c62447,4cc63d68,4da0909d,63dcdd0a,dde0031f,547753,132c9f98,d7facf93,d4ff0416,7dcbe44,77987be4,7df408c6,fa12c07e)\n,S(6365a8f7,28656e23,c9c58518,5686b18b,701f7b1f,54c84b82,f5c81ea5,74fe59e9,8c7cddfd,a992e53c,ad151d46,c9cc0b3d,be27f2b5,7ffcc23f,c8d9cfa7,eb16c2eb)\n,S(ed425f3c,89ae3d8d,97972619,55e8fd17,71dc5bf5,98c5237f,bd267f80,7d2939fc,4226abdc,14f7a03b,cd7285fd,19cf14f6,10c98d0,6e3c1d74,daffd602,99a3590b)\n,S(cda5246c,2e1b7ebe,8d667f23,5ae310be,85a0bd7a,2e903d56,62a6dca3,971f00c7,791ef296,f8ea9b34,918534ba,318a4fea,96b2c2f3,21e6d3f6,eae8248b,29247f56)\n,S(b42a84e6,ce79c1e1,bedd3f7e,596a11c2,f5017d98,386fbbc6,f906a5a3,f4eaf99e,2e722cc9,60bb3718,36ffad5e,47509fcb,cc3d0601,70b02610,823fa40e,d407e6ac)\n,S(358be08c,e1e2e9bc,b43149df,58700875,be23cad0,ba8524c1,6d46a01f,ab0bcf90,f3c4fef0,70baaccc,f64fe0bf,b6f5111b,462318a6,36489b00,34f05c44,1f9d1308)\n,S(3ed6435d,e5b36230,a4f74bfe,14571041,427d16f7,9b433ac9,85c9e135,6016a789,1c72e85e,142743d2,b5be677e,352d3dff,ee0dc56d,5aa56d91,4b92762,6041f26f)\n,S(249f7e2c,580dda16,5940d7e2,672176f4,afb7e50,b9250610,c253d9e6,2416c910,6fc16311,49e9916e,8f70f842,3dcde36e,1630f508,79e96e48,6dc7147b,3aa9f50c)\n,S(97b3b144,e8381ba3,1b0f6f0b,752cbf91,14d2d76f,6f418d4c,69f0de6e,c89cc85f,67c9bd30,33b720b5,a1449257,f1de85a,f7282260,9e411dc2,1820444d,c988724f)\n,S(3b38459e,868b2912,51d0fcaf,41245087,80610d0e,395e9b68,cfaeef1a,5f395a85,be5180dd,bfde7454,c78cc9a2,b77245eb,91ec4c25,9b17e3a3,c3e8e49d,5225ce6f)\n,S(4e6f1790,9f33e08a,914974f4,48270fd0,74fb35d1,49a017ef,c54fe21c,96163ebf,fb6578f,6f47156,5b6d3491,3a9a5e4c,dcd2880,d774e6a3,e56cd078,e6b9fd15)\n,S(9141ac63,e408937d,7425a0a6,70a2565e,72e301b7,75619a92,18db32da,315c75de,d35e290a,56bec3e1,3cc55e72,12aa57db,f10b34df,bd7847a0,5de91c4f,546d6045)\n,S(ec9b73ca,72052751,565c006a,4fc9200,337c9162,88eddaa2,e212c611,395ba578,37e11ef5,c1a22e77,38d5f3ab,4c74e2f1,ba192275,4c4e7905,1b15010f,3c224887)\n,S(56fc14e1,bb1a928f,ce0430b1,feaac6e5,aef50208,be530d7e,f0f5b81a,ce1caca3,4e5a6084,f8680d07,9f3101d7,a80f452b,b05e597c,c38d9865,f6d7f307,90209001)\n,S(aecd741b,2cebd4cc,82b7c362,70f1b22c,cf3997c3,f180e1e4,d803a89a,657df731,5f104b33,6c0df49f,1936356e,8dd09b3a,256bd317,afffd4d,8ccc57e7,f90b8e21)\n,S(516267af,54f83d52,24a22b9a,4309e9eb,9b5c1072,31c3ff0d,418f8bd4,15836cb8,4187389b,9e062c17,f4ef6fd5,4b6b8439,cc37e85d,8a3db13d,86592098,7befe4fc)\n,S(68bbeabd,8d3f4473,f91a0368,7383b4ff,6e7658dc,6e1287e7,f258f543,2466fed5,cf63c80f,ac99b42,7a67f7cc,d978d5b0,8656fc7a,6a383c27,48635ad,97049c4)\n,S(20ce22ab,69467e9b,51d59213,8b52c1e4,49ba908f,909658a2,b90dbeb5,b07b67be,562da07d,9f4173f6,9232d17e,49ba2c17,31649ff1,4a9dcc3e,68f20dd2,de97ce2d)\n,S(b5b7d6d3,a4a59f92,3afc1ec6,a5215786,9c86cd90,7ff80b07,d04160ac,6e798f78,d05e32c9,775125ee,dbc55af,4d1597b4,45b5eaba,5bbf6dbc,b8ef3e79,fe9d4de5)\n,S(955bd489,7a4280b1,5de3d848,f75f6dba,3967e593,6b077d4a,cdc4c30a,33f45df4,4bbeb7cb,5d79991c,ef3b9fe5,bf25dc01,6448261b,44b156b2,749f9734,3d453a02)\n,S(9f60e951,98e7370e,b3c02fe1,8bf53735,50fee849,9c876211,201e47f8,660a5a98,6395aaa9,33ed5866,a02570f5,9321d89b,c865a7ea,62e28a6a,3a62c4fa,4cd613cc)\n,S(7081f0b6,f5923d0d,be4041c7,589a7100,9c2b6459,a255468,999f2d4e,50d776ee,9cb60005,e067019e,93aec9c9,1bf28b4a,27f3f0a3,288c4758,403a9ff7,668f9fc9)\n,S(e290180,d8d5a7c,1b0e982a,bd63ef9a,b607d605,87e663ff,fb0ab73b,3369561f,462776fe,77289a4a,250ccc7b,80b54e51,993f741a,14299f78,61b88d17,d4d924f7)\n,S(8aea7328,b285bd5e,b63d5939,c5c8c6b4,ac254cdf,c42cb521,2f4c5643,58598bfb,b682da77,4fc55ff,eb4a559a,8ca0580a,13819aee,990d9e22,8e0192f8,9568ec2)\n,S(e9d108b2,54b24b57,ea4fc287,45865c09,27302d7a,1dfe90fe,b3a17906,2f256e68,fff7274,6d29d9fb,e7b0fc0b,1af14365,8d0ba69a,a45a72c4,8f67b939,aba128d0)\n,S(9ea1f93d,1f317e61,786d4909,429e4cc8,b81f2914,17d28913,6d886b86,adba0fee,231dff25,d3b0b351,6e63ba6a,afdee115,975a5c00,b95936e4,5d9c6be4,6980ec0a)\n,S(e8a12415,e5fabbee,7cd687c,43e8d530,80701d01,85980c5,7181b68d,481e7a0d,dd69839c,e263e746,99462f18,58745727,ac53bf2,2e0385dd,5d6a21b9,922f62c6)\n,S(e287f3ba,ae486145,a1c2e04c,7f6d5c1a,ed796840,27636cef,b4446ff3,6c3def2,9395413d,401db0ea,4ec53bae,ff215580,5bcfbe8e,7e6bd6e0,be5b9fbf,9d968c63)\n,S(8f99f79c,ec205ab0,e79756eb,a14c8e7d,fb23e232,6ab77927,641960dd,56ad1194,805953e6,15cc6d6e,2f61b0da,389b24bc,89cbff4f,c9f0ade8,c5dfff99,e819a2ea)\n,S(9c87ab6a,8cb723ad,e0cdfb59,e5a1ff6d,3adb63d4,7af33e14,c6b3c343,c766f586,74798122,7a3bd79e,7d5012cb,bc81cff7,6a3699e3,75874200,4edc6e8a,a965bb19)\n,S(c52c8608,6f245de4,baa10b7,fb512ff4,6042bd50,7d88bc3e,c75ec75d,d99dc00a,e8c2813a,bae8b8bd,9c8762d8,37d42fe7,85e5406c,5fb5cc2,ca05ae03,4ab3f844)\n,S(b6286e1,94d5be25,9a79c6b6,ebd634ac,dd7c3fd,66ab0de,d8d4e160,ba8dafb2,72ec2ea8,ee0bf270,777cdf7b,47991524,27eaaf24,2a0334aa,18b3855a,899b5910)\n,S(df7b56f2,45f2f8b,7213792e,370ca89a,45c648a0,5f3ba4ce,8c5d6d34,2f086b6d,386ced48,3850bdcf,4209fc90,d039b96d,39ac18cd,5d97ecb4,3df23ae6,1596ab4a)\n,S(2acf4c9f,4cd42357,3e9110ed,a64aab59,459b2b37,675e420f,48ecd068,6d46a3b0,5f1a5829,aea5e981,cddff9bb,d2521ffa,58b37baf,9544c0cf,f622857d,5a2cc579)\n,S(bfaf95aa,eb55d378,7210033d,b352372e,6a64f2ac,a420b877,586b684d,9cd33f36,7d22bb13,bb61e76e,2a2fce3e,bbf9ec83,78c6ed2e,5f143b0f,60803cda,b0a3d8ee)\n,S(78cdd360,4eaba890,da793c9e,f589cca5,faacb6a9,14a29f6a,6add7d8d,74f31421,ed7e9c15,5b801d1,16b0d60e,fb5e2287,76430c8e,faff4bfd,327a38dc,ea19a634)\n,S(f2ebcfa9,50a391f,c7b97713,566a8a49,edb8944c,7cb68276,d9843c22,8d213d2e,b1c7630d,956f9f13,c53a180c,569d534f,9513d16,4f3dd900,bb3f5e78,b0fa4eaa)\n,S(43cd60d,83bfcbb3,cc19943,34552eae,857593aa,e8158adf,ca850b9d,1aaf4c2b,ff64bab1,f721e6b,9e23d659,224998cd,996230c,4fccd302,47e9e110,607e8f62)\n,S(41925ce0,c01a49dd,7be0c3a3,b27f13b7,2168dfb,a5ec1315,f9209709,f38ea93c,5346b95e,cb6a0ac0,1a2f49c1,9b02d9a9,a725a676,f144ac26,c48f0d8b,94f77110)\n,S(fd231210,6c762d82,a851bb47,8d0ee0d8,fa1c232,7e26feee,3e6ece5b,323877e5,39763316,f5a6ece8,baf748d6,234eedc1,4bf33462,1db3e66e,7eb2fab4,f96fa162)\n,S(fe3e8a98,cb7abe1f,36a54a0a,a3d1c9f,d5ad684b,d05cb2,6ea683d8,f4556ef7,7d220677,34d80663,a1ff05f9,bad5a648,837b4475,abe0746c,3fa940e0,4f1223bf)\n,S(e602a764,ae0d1bdc,4c3f9b1d,271717db,38232e94,84181ab6,9ba8eb73,4f5ec5dd,ad1038aa,26268b10,2c1f951,6b77b482,8bc9bef5,7b483450,d513e6f4,cc916fdb)\n,S(871895cf,adb772d9,719cd962,5dd391b,3218142d,364764e,eb0bc6ff,8d81e086,49a09064,f7916421,9d51ef56,53861350,dda2c9ca,4e6269cb,555c8996,3f37722e)\n,S(e229d56e,77755805,c814ec27,8fbcc56e,8ed4ec4f,4c14907f,4ab3a0e0,fa7e4b4,cdb07ebd,66d68055,bed7a46b,63ceaea8,6d42659a,ae6ebce5,795ab908,14e48af2)\n,S(5535f85,6b0cc868,88ca3118,9d20d68f,471066af,a70addd6,ca4a9537,68bbf8ed,8655c844,245e2a67,8427822f,ac3206a1,f6f52953,4f7a6c29,6ab4825b,770ac5e8)\n,S(10657905,4b37ce9a,e240d78e,3d1066c,b8c48d21,fb7130c,dd35ee5,24767ad6,52836b7a,508a6190,28eb013,c0355f70,4393a5af,e133abe2,e8b81dd4,83e125f5)\n,S(3366b207,2521d023,99e9e311,e3447778,e796db0c,87428e4b,e6cb0ff3,a0868c1c,ec6022a4,22a8dd2c,a7f2f15d,39998394,ac908c64,74a34ae3,255a28d,4311638c)\n,S(4a789396,339be46c,73608a1f,59fdb41e,91bd0164,66417332,f2630316,b5953ca,d45b657f,615aad45,809c0af8,4eb8618d,6e6e0346,ae1ba101,3a123ef9,e5b4c442)\n,S(ee4f2484,fa0a9c7f,dc0c64ad,4df60628,d75d70b5,7ab9f0fc,ae9947e3,89f1302e,52b77894,d8ecdfae,df7dbd0d,8dab74a3,4092073f,47a543cb,f81ebf42,9f80170)\n,S(4095b5c,163f226f,7937fbb8,3035f6a3,9aa9b760,c5086c0e,af9959fe,25f30a1f,1ce180ac,65554d4e,e9b14595,5c059f64,6a15d032,930465aa,d5547c58,5dff7ab)\n,S(6a225d3b,67d9d42,412ecd9f,d018bfbb,7a36a59c,d2f53494,3d6cc62f,b0436a24,29b3d63d,9352e0cc,aa23c91e,e300592f,cc698abc,c73c48da,6a384f99,ea7c2701)\n,S(23efaa41,e5f9bbbf,c6953a89,e3f4b9e2,17249254,94f2057c,f46d0c8d,71d36e93,cc89a7b1,7f2671a2,5bd7075,5c269219,88cea3a1,1315b86e,f218e493,7cdb789d)\n,S(e30c1e97,f7f99957,58d591bd,6a398ae2,f972176b,f637c66a,258ad081,4f3ae55f,1a70cb6c,3e66e925,fc1edb4d,4d29bd89,3e8e4755,6825adf3,11e64b01,866509e1)\n,S(be64d782,acd416d5,2b612f53,4601876b,f05aac91,13c8d265,b57ca32b,df08e278,7a41844a,43e837c9,293b81c8,73cb504f,bff8f15f,5a21e61f,9466acd5,87ad7e4a)\n,S(caac02be,e009a61c,672b4c2,82fdf2f0,73ada0b8,d4a45450,76d24c38,f23822ac,7d93e4bb,a040f4e2,23acc304,75c455e5,72a9a64f,c66108ea,500ca62f,9216d06f)\n,S(da2539b0,3a9cea94,9209321e,e1719b3,c1ef94c3,86d0e860,fc0ec1e7,684ccb3,e85e1387,bef1cea2,f67f601f,8067e9a4,b1b1306f,6a33df15,7795cbf0,ce3cf9f5)\n,S(bf2ee552,5c965248,64bc1bd8,ad9cfba6,4ce4fe7b,be9b4198,700e936,799cc0ed,889dea1d,b1298a24,a11529bc,30339023,5df42398,e760304f,6343030f,6058f18e)\n,S(b3e4b141,cb0c3662,9fe4c9ff,7a42c635,1130602a,720a6264,30b967c1,47abde36,f66f7118,c38a828d,8c4ff83e,5d6affeb,eff979bb,2e419f56,a7d7c8aa,52865657)\n,S(451eb24f,fad7211a,11181826,5a223649,24a25593,63c33e01,4967ba58,889475a0,889ff940,49f6c3b7,9a5bd321,1c1f33e3,4cb2f8c5,bfb141a2,1fe5419e,44565bb6)\n,S(29ab658a,6a754778,2127a0b0,c4b8af33,ea4c77bf,4bc0fc53,b5d65d07,38f5984c,aab1bda9,c77d6c3b,a619f9a,d72da6be,947b8baa,b80b16d2,15ee01a2,2bf0f2c1)\n,S(9b59c407,d815c224,5bbb9c0,d1da59fa,9d9e79a,c654f8ac,2879b341,297b24db,a4ef058e,e6300114,c2827811,abacc0a9,17bb35b6,9b1b76c,c761ab8d,a676d190)\n,S(87d27b65,82aeb975,8b9b970e,76c3ac77,78e69a7a,52ac620f,c0564e74,a66c9fd0,3ff3b3cc,dec29337,41c83e08,7f07f41c,4d03d5c,93268b1a,cd9098e1,37511e03)\n,S(fbb3684d,38958163,bd85a0ab,36bcb93b,7fe7d383,b70d8bf4,d9bba6f6,989701dc,7b07cdc6,c9c5b3bd,10dc2af7,b2606d09,759e7342,68a5d4c0,301be264,87b94504)\n,S(82022ae4,ccc42b9d,223cc1ad,c66e58a5,a3ef1494,f95274ea,cc7cf79f,4314a453,c2424250,9ddf2da1,6f0481a,9b4db450,3a81805e,9a8eaa3b,b5cd0e49,15d2b695)\n,S(ba5cd45b,3b51cb37,bbe475fa,e91f8975,ab4e657c,57d0801a,1dbec958,be20f901,2e0d4fc0,f8b4f58e,3407eddd,298e5324,7f9eb718,b58e4164,78e3a01e,cf41b0a5)\n,S(1293c841,b316d1be,76ab4444,53e72e22,cfadaf3a,df5b6d27,7cd065d8,8a6703fc,98f58f37,40fb4988,b844ab52,3420709c,2488f144,88049749,28670aad,5133c2fa)\n,S(ec9fb3c8,54bf1bda,dbb972de,a8ae36c7,987d77e4,8d8437c2,c69aa988,df5015c6,d5f35bfd,ea59e974,961d6b36,4832560c,fe425d54,bfceccb2,a00411cc,a5486d3f)\n,S(2ecce03f,4cd55b69,6cbd4466,2e7d58f6,9950eaec,6adaed62,7694dcb7,2544d244,e14f30a9,7f1cf747,ead403ca,e07cc4cc,d1bc793f,de79082f,f6615e6,43f68879)\n,S(ed8faf7f,a63ee520,7825e7fa,56f6ef8a,4c6ad5af,ac507c3d,77c025cf,566fb3b2,df120b8,ab21273c,a5af1040,7fa3e54d,cb0636c4,8ebf88f2,c9b046d8,83684a9d)\n,S(47cb8f7b,8780dabe,c1eb456a,f30fd917,bf3fd9f,3c28e3a5,bc078c5f,14c32e4f,f8607a02,1f16aa6c,68afc948,f21ee2de,c5889d19,8978e9af,66931bd2,b4aa3203)\n,S(76365ac1,fdebab2f,3b9a3ee3,8afe70ea,d4962047,1e38e5ca,cf215a24,3d762009,2cacaf72,8b4bb600,ff37d3a6,97d45fa6,5d778334,dcddc32,11fc51b5,4e53aa28)\n,S(c9dd5de0,99b8e552,e1375055,63edc83,9f09311e,11868ea8,a233309e,cc27b424,4bd4d238,4e615eb7,c68f134a,eafe7d2b,38163a8b,b117f9e4,b382236b,b8f8c1a5)\n,S(22b6a7ad,cc406ebc,7c1c2f96,bdbcb6f8,9a1e08b7,822e2a31,83e5932d,ad0a8961,52b86095,bab24f4f,d2ebe9a9,534af2d6,87b553e2,77536d5e,22c1eddf,ae0ac794)\n,S(3ee808a7,49fa7df0,c37017fe,cab7f6be,96f06c04,b2de4d24,a331a9b6,9f81a158,3e954cef,5f1f9ecd,887dc174,64cffe5,6c4b1356,d841ed0c,1e23c1c,2439cb4a)\n,S(2938bc58,8a7a4896,de69ae4,4d5b6240,aa97d302,7043048f,3e49c222,b8fa4803,f26bbe61,9fad1d90,de74826c,ba6ea02a,9ea59a1c,59cb4818,65b054d0,39ada03e)\n,S(682558ec,da97c9de,4cbea34f,5df43274,94962e5c,df72b0b1,2c3977d7,e1a15451,c4c2e765,22c7013f,19253c4c,c8ec6cc6,8b543f33,5aeb620f,112824af,b9fedc6c)\n,S(720d8c68,fc520da5,79f6811d,e1f3d045,cbfad09,f7f7d8c,8ba68b4,6493620,b867e8a8,4f7a6d06,4d6fd4b,8bbb31a9,7ac26c3,b485fa29,50d545e2,644c9cb5)\n,S(967fb3e7,1bdf658d,356153ec,6c0463a9,994d5d2f,b3aca9e0,2a17f5eb,f4b84831,b84a65f8,861724b3,2f5d0926,ec9a84d7,e3cddfc9,c7887a09,4cf602eb,547cc83f)\n,S(1d9fd25c,77ecc3de,8e5fc113,1ef13b9a,73f6ebd4,f8673d88,db2a418e,8bcedc85,54a06301,d9720fb4,bfbff58e,23fa4233,33012c9,d62bf0e4,aa6adc4e,ae8035d7)\n,S(80138158,a1137af3,114dff5f,f346e339,7d04029f,9050d44a,b4cea89,f1311c0a,16f49876,e6d6ac18,c25cc712,da3afe70,bc5e9489,7c55dc36,bdd234aa,6a5a6b31)\n,S(aab4021,77fa5844,e3a0906b,3107df22,33aa3418,222a8c55,c6c37933,c3ef632f,9b83208f,3ad0dced,382d5876,7a089711,9a062039,9a7fbd2f,7034e5e0,3201b092)\n,S(8f3fd14c,7670f464,d9ef1e3b,3014be60,3c523237,14bbcfe1,d3612f13,fa72f10,84cb7094,7901b81f,bbfa593a,5c8606e6,862ef6f5,d71c30a4,b546c08b,4205c68e)\n,S(3ba9c91c,aba3c06f,eaf4578a,33979ec8,df69a903,30cb8d88,e49953ed,4a1f4933,7048a74c,3eb66231,e8410799,591bbef,fdcff65b,b492072f,582ee47b,7a6f99cc)\n,S(2f8c37d2,89dab0e0,d5152468,29f6cb61,7344c21c,29860645,5f29a9ca,dcf36a7c,37f0b64e,9d02710e,bfaf145e,69c79965,4223d093,7a834201,d2f74d40,eb508396)\n,S(45e6eba2,c9209d27,b87f6050,a656fca,73fc6128,cedbd2d3,ec40ca,76dce846,a3e28d44,ba1882bb,d1c91a63,5ee22582,81386757,4e66ad90,8a062c93,bf5f16ec)\n,S(a5ecd3d3,80a0cd23,4467143f,fe842d9d,82ea7d9b,98ad23cc,605fb8b1,fd767ee9,22f12823,8ea84269,3fb31fe5,b5015cf2,c9ab6c33,d167b95,9bea6e29,4f11353f)\n,S(f7f45a71,c4663b0d,44369821,318374e8,51eb66a9,ff6034a2,c943ff90,174be83,3a1633cd,4ec197f5,40d3d6e3,e6a3281d,7fbdf46c,f52fa149,8acc0a43,5b46fce5)\n,S(92582286,6b314e17,5af03b7d,e5717d42,52bf6c82,a55ec832,a94b274b,487cb59c,fc8e9584,736809dc,65234670,495bbc7,d6c2f52c,ddfac4a0,369f0527,4a811f68)\n,S(c15fe8d3,2303d00a,2f57fa96,6ae6fa75,1d7849f1,4dd527b5,a7f76cc1,e556da4,36242bd0,4685dff1,a67c445c,50cd348b,e017c06a,e2e9cd06,7b5fb109,81c10951)\n,S(49ef826,152aa60e,310372df,270bf0d4,4dd7136,7d72be5c,a464f60c,c62b5355,7cad4ba2,dc4480b,9a1c572c,77a93e16,4e369d2e,b565e165,d9c7d2cb,20c4c645)\n,S(c8de09e7,538ff94f,e12c876e,163133e3,629b2f1d,ed6686a3,be4ae122,9c91a18f,b5a7f31f,e58088a1,5f1e872,d6096562,9cecb10f,1a76fe88,5eab6247,697c2635)\n,S(d86b9fa4,616f43af,1d7a6cd3,d9af24a9,6b3d5119,ef764576,9461ffeb,96abb344,2388ce8e,8f931b49,9481b660,669cb8e8,56df6f72,e392e539,fb570e19,f003bcab)\n,S(a2cd7618,f351e2b1,3fa7b719,30fe3041,87c4969e,4f3ec55a,7433ae6f,cbbf88,3e0b5c62,436a363b,1455711a,b310c362,29870cd3,a096324a,a8dd36b8,5d19d685)\n,S(b7283cd4,e33e4a3d,7836e4f6,b39b5576,ad6c213b,ed2fab87,ab442ccf,2100b2ca,918006fb,111c2307,1821e7e3,25eab3f,9083367,4248fc,2733173e,8eabc9ea)\n,S(b1fd2d2e,9707ba8d,355b123b,9ca31365,d12e1854,6efccd9a,cda40f6,48b9a769,8c37cc16,8e8f55de,f604d222,62818bfe,1a40cf3d,62dae94b,58c9ef4b,475e674e)\n,S(1b0997e7,4242e85e,cb4be32,885b5a6e,cf6077c7,395d262e,7c0d2b82,cb39f90f,55b4d8d4,27cd1d8a,ed8c2d2e,f3bcf8ce,f30fae12,4c14b183,fa36923b,6b7760b3)\n,S(56ffbbbc,94ac925,dea36258,8ee1bbb3,4f1dc9b8,1bfd7e69,8e055065,d98d78d6,aa73208f,46d72bdb,20af3d23,5bf1c5ba,a517fcb7,b8036208,9f8a7198,d8edc65f)\n,S(c125fab0,7ddb7f9c,3426cd36,812611e8,e3908191,67228685,3533e0d9,3ad7045e,2806703f,622f654a,f6c3f118,92c1dd8f,1f235ef4,4df464b6,8ccd30f1,9b77e5ae)\n,S(e7ede9db,e4e0c742,8b1fa6fe,e81e80ae,dbab85fb,f259d301,48a51423,fe7f4a17,93ab277a,9fbc5cfa,c80d32e6,5e7f50d2,e236925b,c2dba1d9,e635a56c,d33fc066)\n,S(74701763,f1bd6bcc,470c3da9,d853f967,a47c1628,c48b1cc8,aa395159,a3df93f3,ab2c011c,7c5510f3,37393dd5,f05547ba,bd22237b,28ed69d8,a4b6ed55,5d8ac8ee)\n,S(8d27f97,55baf71f,e6dffb8d,83784e32,a65541c,5c656576,89c900d5,e79081b8,a7176e68,f3c89601,4ae1f837,bd52227f,f308f90c,b7f31386,e5586125,1ac250ad)\n,S(63e06afe,9040b531,eac0a0ff,1ac25db8,71b0db01,8e9828c1,f5798ce,accc7ea9,aaa11884,a9dbe08b,6b28fcf9,9049aed5,c911244,b2a6a13e,9300c007,f4910aa5)\n,S(dc7ea1ae,27d60ab3,42d617d0,23e4b1ab,6bf8bac2,882084b5,dde95894,744ed50f,93c7d76e,2b95c5ff,bbfe97fc,754a5a3,b63efba6,e111540e,48a0291c,142f3dfa)\n,S(f3aeef6d,f69cef4a,3d7dfb69,1b5aea99,36e40239,bb976253,2213bd1b,f6e842d7,57d37dda,339c7002,f87bde03,1cb1e8ae,72e5628e,f493c115,1fbd0f46,2208de5d)\n,S(825bd84c,316e64ea,dc5d081,23d7272e,ae87dafb,28f69b67,816a1aca,76bec3ce,61e3a7fd,ba8370a8,6a3e3f69,d62f87f0,849a2564,97658f1d,c28ca11b,40a52251)\n,S(310a2cd7,4dec5370,9d2988cd,8e9426a1,edb63b9,50ec3ba7,f5aeeb93,3856a75d,5d6d86ae,dfa5e57f,7f2b4ab3,aaec250f,e3ff1eee,3e18c228,ffa3b81f,17122c97)\n,S(3471d475,62a512d0,f82355ae,f9bb6c3f,69f04db8,977ee4d8,5af582c0,1b425217,272dde70,2fe0b69e,bf86d68c,5037b425,ccd444a9,45040358,aed399eb,db9cba31)\n,S(bf6d2563,bfafaf24,20a2b3df,6829aec8,aaeee4eb,ea3538d,8086807e,4c257a2f,e8077a00,7e7b496b,64f847ef,755746b8,3a2738c4,4c1e7ff1,a920ee2b,40b496d)\n,S(eb33cfc4,a883f718,52fce42a,3cd876e6,d6f4d465,327223fb,bdbed425,2b9cddc4,9bd400f2,ef608bd9,904f03ad,27de86fb,eaab9137,e25de8d2,a7dada4a,1ee5453f)\n,S(1317e0d0,3e5df319,fb383edf,7de95645,6b123d3d,a0d8d08f,82091d6,ecc2279f,3bf6424d,5c6f9d56,b0d22b60,706a5471,dcae4297,eacbbb25,2a9d2292,33675afd)\n,S(81b09f2e,99dc43eb,eb22cf5d,c5406f30,7e00f8e4,267bb456,c99bce34,309aeb56,9d4856a4,b300eeac,42f5b1df,92e331c9,1dbc5f6f,ebf17d7c,49580180,a3361932)\n,S(deea567,a32ff19,722626ba,ef4ea337,ed436d32,d23df7e,98b86644,855a62f2,5c912697,c61a17fe,8557ab3,40c1792d,4a8310ef,69e785a6,dfe66d43,9d032414)\n,S(ce4ad083,5746d173,e68e02ff,a7a91b9e,96ae44b1,cee86755,ef3dc4e8,e43444e5,be86cb89,5238d4c,b553e289,1545fe84,df7cc81a,ff1c2a20,d3406f62,7f03aa7d)\n,S(9a993e3d,407f1af6,e4d19a32,48a0715f,2e36384c,7d8184f6,fbbce7ff,530b077e,e4a1a52d,80a267ee,99a7bd6f,e6d96ffa,3f87001d,c543f4e2,481eebc1,301a7a7e)\n,S(1f10df2d,7c7f05c8,1717ae6a,1267aa63,9247c7ef,45aafccc,6b36112,fb9bd0d8,670b265b,71e2db79,32683b0e,c967e9af,e45ad643,27cc29af,fdc783b0,58760410)\n,S(70ceb257,29c9208e,7db17633,dca775de,d57d1dff,9d914a5a,bad5711,86621b53,6e016e91,b3f3455f,cde11c0e,c6d1d75a,ee9825,7e9d64a,ce7c1ec3,49df0c62)\n,S(ba46e5e6,4dc882fb,dfb7921,a106060,43fb6c4,ace9f2fd,46693f7e,74694e3e,eaeb4eb9,79381ff,8a208e06,9d8c436,5868d0b3,dea049cb,f342c88,7d789acc)\n,S(bba3badf,d233ad20,e4179bea,f3d7579e,a631d154,e048f7a9,e320d388,3c30d81,f2a7c70d,69dd44c7,317a0af4,e765693e,2bdfce6,8c8a51e8,ed3f9003,5e1b961d)\n,S(6df6a769,d300ba68,17e58f1b,f41e0af2,57d491f,38e59283,d93750a6,36d3f8a5,63a083b3,aa51c772,eced1f31,ccdfb4d9,ebf0f492,99f12819,dad9a36d,a73a4a6f)\n,S(affd131a,4b8c9a98,294c7ea8,793a5173,4fab1953,1d2fe236,1ada5c14,a7174f2c,4c3de4d9,ec4a3698,3feed322,58a9788f,3426891c,b3205708,73429671,3411be6d)\n,S(2da31049,9e54b18a,19dba546,4c7c708d,d42ccac6,bc2196ee,2f0a2453,3b0abc7e,f354ac91,20ad9f8b,56d09d44,51c4d052,426981a3,f7b47e7c,bb0549f,232db974)\n,S(3882ec53,cbe3f82a,e8d381ac,edb4c31f,23cdd201,eec93f2b,2dc7d0cf,92e57b61,1d34315d,e5a7bfcc,492b0046,b2740646,71a43d53,2fb0bc78,6cd80ca2,ef7e6e3a)\n,S(fcab8635,6a08ab26,39bc8e4e,8e9eb5e3,46825975,2a65cb28,d559bb48,7387f9f1,af4080c0,d08f07ce,57566753,ad3570ae,bef2b38d,4ef7f54,d7b2054,c8fceb94)\n,S(fd34b8bb,8a897e12,a29dcd5a,57540caa,847bf011,a1548ebe,5dd89d75,9d36bb58,51a66aac,6a56f973,57927eaa,723106e4,d19b603b,d0d5a55b,76235197,7910b2f3)\n,S(1e89bd20,c0d85bf0,76c7a167,87c7d817,1d3b4660,99dd82fa,808d98e5,87d4b469,4f53a9d0,e5768760,3dedae47,574f3123,dcf11590,fbc4d353,eafc8629,3cfe882a)\n,S(8a1ea7ba,66909ace,c8d7d93e,aefbaba9,ddca459e,548c448f,5fb3a957,7baa05ed,d58059e9,64f37a4,39f7655b,25018031,ea1f1fcf,8ae94f99,e09c04cf,8b7be091)\n,S(e0c3780d,80d59926,96886549,af2961b0,e4451f0c,b5572cb,d7ff76d6,1d1331a1,99d9d2e6,a13c3b1f,c2fe6f1e,5230e7b3,d827ddae,bbeda551,1144f68e,4945491d)\n,S(964354e6,ed23ac12,16fed36c,5daade18,8e7e1bdc,ff20e60e,f7cc8c0e,83996035,f748a09a,8563c6e8,72253198,4e6f0622,7e6a408d,3c633529,aa8bd326,3428998a)\n,S(9809e729,5125c862,fc6eab86,969861c7,8bd09415,585414a1,ab1dbc3c,1afe3f9b,d8536228,bbf55568,833909f8,6fc84a58,ab0fc089,432fc05e,fd46bf63,987b9fd7)\n,S(195f4d02,305e4c42,28d83bf9,4025fc7d,1d8d7173,da14bb34,abbecc4c,f01ed17,957db8b4,97aeb9cd,68152e0,23cb4467,ce13845d,3a88e21a,726b8766,7c9d637f)\n,S(562eaaba,3eb17e34,efa3f726,d02490ea,b0203fe6,81b836c0,f2c44a1a,854e0b37,b4e658ed,9e664804,2d3a35a7,70ef4253,97093ba4,d7b32da5,9db56a6f,8552b1e8)\n,S(84a2c5eb,1efa9014,80c57969,3302f34f,de3a602c,a4b1a28,8d79f28e,dec8282,700d51c7,88cfeed8,587261db,adcac440,c703313f,5f0da023,bdf62b36,46207cf1)\n,S(83d12fcf,dbd9168,b14e7340,6c6d4b84,b93e2bad,77d4c7fb,8ba00973,3672f913,e4856e26,bf2532cf,bafc78b3,682ce9cd,3c0dd6fd,861218ee,523b5131,e7279a7b)\n,S(9988a6f2,bbd9320e,fbe73bf,9f4643f8,ce64d522,9ed4b701,dfb0068e,dd5451cf,bbb352fc,bd3b2650,d0a44e4d,892f89a4,d2f431c,2abe9910,ed5a1dd1,8a882d5b)\n,S(3e92183d,cfa615c7,33721d1e,2a2116b1,83017d4c,2aa70b51,60f80a10,afff0724,c7888251,f4bcbe62,f0dfe545,3a73f3d2,76a2f30a,74e57d7f,22680b39,142dc945)\n,S(d9175300,fa1efe3a,4cb130fa,fb36275d,e5f85b98,5ea5844d,e7763d6c,8239492f,59138c65,e9592a0c,d9a36220,d165abfc,fbad38d8,85eeb521,c5566702,9b678b4b)\n,S(6ff5825f,7c12bee6,5d17f7b4,7766e677,ed74c5b8,7a95d068,b4741129,36d933dc,661ae9de,cb7974b,2304be0a,4d2b8d80,2ea9aca8,40cd0381,31f80248,378c0edf)\n,S(ed6cbeb1,a8761064,3067d580,ac024f7b,9560366b,bae875ab,15ceb116,50b1c31d,9140687e,d1e889c1,6564d60f,702e8101,1269c476,f19d7f45,19a7d66a,8617dede)\n,S(5f8ccceb,32d75aa3,1096b56e,eb132230,853bf6e,38643ca4,43abe04a,8bd69164,35f72a3d,d0c81dcd,4b6ac0fa,c4f5834a,4f6576f0,21cd2d45,6bde5b7e,7995da3a)\n,S(81e02085,9bb23977,522896c6,7ed66751,86580d62,f015af7c,479a6e23,982d0b7b,8791fa9e,4159f26f,b42ddc08,85d562b2,fce84a38,e2af9960,1ebdbc64,cffbb669)\n,S(de226b16,dd1e5c26,9b7aba7a,d63badc8,3eb435e8,7aca85f1,41d42712,95d8f721,62e1e399,fa2ce72c,3f87dc03,de33d913,3428416a,434dd20d,84156470,1ac8423a)\n,S(60a46f42,3fcd3295,fd058be5,9f7ff164,fa762995,27cbd2b1,d13a0bdd,97d140f3,9571d2de,7b789e17,e46bc31e,1a03cab5,912cb854,ccbfec8e,f4d370e,df7f1219)\n,S(6fef445c,e1b4bd91,fbd3a77a,ba0c6364,80d7e759,3f42a7f5,ce089fcb,c32249c0,115fbcfb,af46db83,9ae0cae2,e581796f,f82e73d8,7d4c9a91,9a92c5e9,f4fa347d)\n,S(6d37f51c,a8d2f953,a3e5f7c2,6edebe57,a9892b5c,14482a30,9145c4fe,4293522f,78e511f3,6718ad4b,de6897c,d3b90e08,cbefae5b,a884bdda,a967eee,9d5309af)\n,S(c0ac827,5bd0701f,5c9cb035,eddbe996,738aa155,fe74acea,a76b0351,3d46098,e7f32a2a,188fa708,6a968490,60ce26a4,31d76231,6a65a6b7,c3e83201,f8e3cd97)\n,S(9000dba8,6f895023,1fc507df,85faf4a5,822a648d,4b256b93,5d012060,50cde108,9b7ae836,94b2e9e8,bbd8383c,2f4cb03c,32331902,2f58cff1,779d83cb,654ef3fd)\n,S(f1109bf4,b490bc8f,36609253,26c2a2e1,ad58dea7,463e1d9a,28aae8d6,969098a1,87431a27,9fd72c10,80230514,1c8c17ec,6e3382c2,c325b022,4a800509,5d2f24c5)\n,S(4de871e5,4e9cc6f0,8c4aac8b,36d61f83,929adc8d,4f6e18b0,d1dc855,6e8c0003,25d1fcf,ca98e8a6,c75d7fce,19de16bc,805f4b70,e9a3e9c7,f0187f07,70d3bba6)\n,S(a23cb675,92972bbf,3a6e89ff,94e10010,8f47b467,fd8cdc80,b66013d8,62766ece,8dc70b84,ed05c23d,a1681126,77d23aaf,cbca18cd,fd7e9dc7,cae5aeb9,47cf548c)\n,S(295d0cc,e96d8f8b,91ba9dd3,be703cc5,79d3c938,a5b7c32b,bb40e149,584244e5,a6d45a06,a16bd4bf,6af0fe37,6538ae5e,745e078c,12b3ac95,2653f7ee,2b03c926)\n,S(7c683b91,9d5376a6,d40b13d5,1fbd1769,6cb40bcd,efd248af,9e102545,eebabbce,3da0c9d0,3608856f,5b7ed30b,8d9f1562,197d4e5a,7c23ae39,332b1ada,adfd3f73)\n,S(30f7512e,d27e249a,95e0e21f,fe22ec23,8505f39e,ca9f41ec,df5e7ef8,1c0c3189,2f5fd85e,25ea3a3a,15928651,4b473197,9e4e7f7f,56e88164,fad41e42,e4875169)\n,S(9377bf8c,96584f27,324a41c7,78d6314b,1c7f842f,b4910835,431f5a76,2f514961,d599cc55,e2eddb2a,e7d7fe92,aed830d0,3cfa892d,3a89cad4,335fd6d3,69f3df42)\n,S(3589ffe8,67f20495,ba3530b8,5f83c54f,28a66e78,6bff4ca2,40ac1d55,6d31e9be,98822eaa,983089e1,209c22a8,9f133dc4,d75b3a67,8fdd385b,581a9274,6d224c89)\n,S(39c1b1f4,b2dadc4c,e58e0f84,1fcc6415,2c79e77a,11d53f85,999db8b8,ea3f8935,e785271a,d9df3389,6436991d,eff9da83,50bb8a42,616cd31e,6289aa84,d4256721)\n,S(dcf11459,d3d62c2d,99879918,8b6118e4,b103f9da,2453b72c,ad5eeded,8b25be33,dc038c1a,af3270e6,345a92fe,7c7dddc6,a190f6c8,fae7d7b3,30a3cc72,f3a1c074)\n,S(614929dd,1de9b0c1,3f4d82e5,5bd8050c,a32ff05e,6eb238f0,eed635b3,6623d1d,afe8517,c9e7f17b,a1918e3b,e8180ff6,afafdc43,1acbea6a,e0eaa75e,c4d8a24b)\n,S(f4a72228,cff6da94,a45da35,5ec8adbf,ef81609f,b59a8296,a7c1b0ba,9cce743c,545200fb,de095aae,9de90f1,569c6bf,2fbcd025,3cca1e50,a25a81a6,e19cdacb)\n,S(63cc4273,6caa5597,46e62fbf,5371b943,57aa164c,fc8fda65,b5fe524,e2c93f7,1fa4ef5b,c5a6413a,d6ad2bd3,4b08289,e7d8224e,450f04fe,9b47c45,ace5665)\n,S(ac175228,118438a6,d2cf761,f345cb04,aa7f9d89,9678c201,6b84be2b,8eab8889,dd7df8ae,29643dac,27ab01b6,8f7765f0,832f2989,99a13396,3435a982,aa4af2b1)\n,S(9dbb5eb9,637c41b6,c4a5a2f,72efab5b,823e8622,f3786c03,dd678816,9e4a0e48,772d6ba,13f4d61f,42dcde34,b8519aa2,5aa0107,89c625cd,1ba38d4e,b7d924d7)\n,S(717095dd,d2fcc135,1015b586,65a0d888,4e88f599,b8c32fb1,73d5731c,3ef7dddc,1de0f109,52b470bc,fb23da3f,3c7b640b,4727326d,d18e020e,581fdfb4,7e4fa5af)\n,S(5ac230d3,f829b1ea,401e3964,c14d6e9d,a32c4a68,2ccdbb2a,3319a964,265872ca,fac3c3a6,27dbf66b,c5e06a16,e319ca43,423484d8,3217ae81,51bdcfae,c9c026ea)\n,S(d27ecaaf,a39f415,e1457537,b2e74e1d,382496a1,51118100,8577cf76,1f8752ef,fc480b67,46cbaf31,e3d8eb6,4121b68,d5938e84,face3ae3,5dcdfa4b,71c6c037)\n,S(e08777dd,f92d99b7,c4f87d53,9fada8c5,703af619,3a088d64,77f1e20b,f2ac6cda,25a4f88a,c6cb18b2,4e96ecc5,3ce10d5c,1202c4e7,edbdc070,db05a501,29ccfee9)\n,S(45ae7ab7,afe9580f,bdaa6a13,8896ab97,63bbe3e6,88054776,753a1180,699ba6ed,dc1af7ed,127fe06e,4d0d440e,3d96f43e,502f797e,fefcff1,6c46e6a8,a156f322)\n,S(fd28cb3b,71c50453,b3cf509a,768b4c2e,6ae26514,5801c045,327e1de4,f4d00590,b0684f95,4867cf44,aa5081f0,8174ce21,3298a22b,257f6159,c2666518,5ce5a7b6)\n,S(f226f00d,ac6f49f0,a195e4e2,23b9fba7,95681660,7671dd7a,158b3260,1c1d850d,d05d5c4f,6925a38a,b4630e53,a1986fe9,d823a08a,3691550f,10f71b65,a109ef86)\n,S(3cc61613,a80d8480,87ce23a7,2b3038f8,a994e1ec,8c9c740f,f0e44e90,760337a3,8474f96a,24093af6,94221f09,f95ab010,90377f1e,52a173f5,a11dbbda,cd3c3956)\n,S(721ecd89,8cd99712,bd3be233,1f57d686,633e7ed5,c95e6223,e5cdace0,ce60e736,31d294d8,6fc07cae,4a09450b,fec633c6,21dc34a1,2f7668ad,532ac192,a0ffd69f)\n,S(dcbaca58,1144d9b1,b2586271,5e58fa8c,d5b1062c,ffabaa2,db0fcffa,2b2eff38,9cf7621d,339f6cff,90efbdca,5e2c6174,708b53e6,1af38689,e6d3b257,21ec7d34)\n,S(ed314e93,e649ec2b,ce491938,2c7a256e,b9300b99,528e7878,3421f337,15db8b92,70a81aaf,229fef2,e2922355,e1f15465,53ea0348,e3dfb18b,c837ddcb,60744a11)\n,S(6bd19bcc,7a59bc8d,19a97768,95f65ae8,5f5c7eb6,429c09,85436b8c,29c036ee,51346de3,f4f65681,bdbea28f,843545c5,31803ce7,78b5732c,bc42735,4999090)\n,S(99ed1e15,6ac8dfb3,604228bb,5be088bf,ebe9d640,7ad8be15,5777c6b1,d43d9acf,75b159a4,478b4cca,80ea0ac0,472436ad,69f57e9a,f447c61,e19910c3,9d2c922)\n,S(3e166f8c,793addf0,84add90f,b0303970,f00c3c3,8c36171c,c7fe0877,b2452045,91659a63,b0cd2a65,ec330f6f,b9a6cc6d,9f07e382,7b94b8da,1921aa8,1d5bbd59)\n,S(fc1baad9,a3a95f38,bf8d1b16,8409d09d,a1b1a432,841f656,cf8559cd,176df936,31f7a7bd,b013b89d,5045f248,982b5b4e,e0b4d791,21b6e638,84a563f1,a08af43d)\n,S(80b3ad3d,4b371eca,c903c879,53386884,3bd31843,4e9c925a,5a5a819c,ff7ff340,fb1ca8bd,aac96d84,c67ed7d3,b65fac69,108ae28,7347abfd,f20e4cdb,712af178)\n,S(bad065ab,2901f727,d76c6c36,48ef7aac,2a87d49,4d727422,73cc2e4,68616af2,ae9d7902,16b5eead,4d9d69a2,eaba2972,fa925a34,13f15d92,236329c7,470a37ed)\n,S(d1f046d9,d700ca6,995beb99,cc8781e5,a2fb758f,7e81bca9,bce435f9,129b8fe7,274ede5d,7eb815af,34716718,84433143,3090fc0a,46575017,fca345a0,6111a4df)\n,S(db535f55,e3dca80a,58dea798,d29aa0f6,99df1761,473a7ea1,751a047a,33f0a22f,e7d8015d,931a3bca,1193df83,7e7a8f10,e61b86d6,477a37cc,ed3528ad,5b53ff6b)\n,S(da1dba06,a56ef0fa,f98b1a5d,b9a4f184,8635b7e5,164cdd50,82ae691c,ca42a80,86a8383c,a69531bc,ae806621,5cb4160,8807e265,b2179508,d928e312,a210c9ff)\n,S(267c26b4,d980066c,7dd4f29f,f7b54277,3b176b77,9b3588ae,ff5ec28a,9aa42e7,3390c03f,f4e5eb25,5d230053,1d93daa9,d584658c,7fa30341,42ff20b5,827161d)\n,S(8024af52,4e6ff955,70c7915,208491aa,5561fd29,fee5c27d,4f3483ff,c1cbea0a,c9de78d0,498f726b,8078fc0,609e76ff,df7a8a71,7345ca16,dff1d7cb,b2dd86b0)\n,S(11ff6a68,c7beb420,7f0d7dd,371cf000,dc3dc195,406882d2,77953445,6208f661,b53ddc25,254781b5,1e7cac25,c1f7e3bb,916b75ba,97a7fdbd,658c1bc0,a7b4092c)\n,S(562a1083,f9a68203,39a32d7a,65a9982a,b70d6596,b00751f6,aa88c27f,36e3c929,a380ec7f,908808b,950e7d25,510ad741,66ec2061,50923364,55744acb,b1e05b51)\n,S(4efe70fd,327c0d69,3b6a7598,7ef64573,e097fa5,4cf077af,68d082e2,d341c413,10d47b9b,92e0b62d,d9a8befc,3ed1db10,b110a346,8cec98a,4a1abef2,c8ce3dc7)\n,S(4d64bf0c,d7f128b0,bde8576c,91e01c27,354abd98,2cd3034f,f9ac09c0,23a51f20,159e741a,f57fdffa,de7bf38e,14dbc2e7,da3c524f,3d4c8d6e,b9dc32e5,e8a5e28f)\n,S(9a41634a,ff3278d6,b3ef0064,ceecefa3,466de2ac,372ae43b,c48f30b3,a187bf,eefee0f,aebb77cf,8447a193,6564498a,f409e530,f4053c3c,ad27eaa0,6aeae2a)\n,S(e1804fb,9a6bde08,8efec2d,2e5c6774,2c85cffc,e78254cf,4fc4ded2,9102418b,e9cab1eb,9c1664b9,c2fe81c9,b3a665ae,447e93c3,183cde7b,fa56ab34,7efcdda7)\n,S(a603744,c0247b0a,f821705a,dff44d2c,717611f0,25f9fb41,1eb62f1b,64593212,820fd32b,706a7638,4335c0a2,f8713b9a,6dcdb015,a96b9d9c,e5c19bb8,ca603b61)\n,S(a6f1d9b6,895b1298,34972a2f,ec96064d,a1108ab3,aae276cb,66a620a0,495f20b0,9a95dcd0,df038394,63ff5ea8,18679c3f,7f55d7ef,83a06880,29c9d543,6dc8273c)\n,S(4ac51432,7822b63,e00f920a,b6e22142,f09f30f3,bd74c418,93baf126,cdac5c48,abf5d148,77e94a46,45fda161,f9455bbe,7ff037c7,720f6a6a,d7e4bc31,a0f43885)\n,S(5a2cf55b,a16eeae5,8cec588e,1b339422,48af6e37,33604475,2dabbf7a,f7fb7a9b,8f27be2d,32ff72cd,4fc5aeca,5de55a21,a45f8c1f,7163dc4f,e0c00040,e69322e2)\n,S(e16f23e8,ef48c1f6,4012b27,f6ffc4ea,a876053e,30cb388f,232b3d8,db011c99,195ffd52,b0afa5c0,da95bb97,7bda614e,47ffe3ea,13429799,e8c390f,b8c56000)\n,S(65367cd7,ac109f71,50de4263,cdd86e92,28923a3a,ff96945a,c1bbd163,8524fb84,cf0b9ba,fbe67dd6,4d09b170,beb4fe8c,a7687c95,68086b6,8a7834a5,1747d731)\n,S(10a8840b,39443b8d,7a44228b,d6dd6647,89da489c,8e954d54,a5cef366,6bd6eac2,7ff6f76e,e4aa58de,185163ac,ef7fad13,d8cc4055,c4e10a60,7987e034,c661eff2)\n,S(3fefe8a6,c01b8202,6bb9d038,c577f16,7b1db5ea,91ae80e1,528b1327,5245d6a0,a96df5a9,37e6144a,454a0b54,39d68eff,a959757a,7c9fe350,ecd58c3a,3b637b5e)\n,S(ef93d77c,e4162e9,6bffb908,f5d654d0,58595fd5,d6184c62,6c3ada21,c4052b61,40088b85,c18d97c7,f59a23a8,645d169d,e535261f,6cd7466b,953fbf40,f3cd0bf5)\n,S(f1789f5e,b0fa903d,485edbd8,4971b7c4,9224a2cd,519bdd40,d627bd82,b0ca4872,4c845cb6,5456457e,a2f570f4,77b1f4a1,9e36a905,adaaa8d0,5830161f,a71a9da8)\n,S(d0bb1788,ebc75ed0,20c0d15b,ad4e41f0,64193890,8a8704bf,ff3cc4d4,cc9b3274,3a120ca8,95a327f4,8e687796,30666649,43ac5524,44df62fd,8f7abbff,222a7641)\n,S(164ac10c,f7807ae6,4d6aab31,72110d42,2f05e461,aeb9805a,3facdf7c,dce8963a,8dcf43d4,40f1dd90,bb1d6f85,849f98fc,9b6dca26,301f3209,3f9dc59b,ea549b69)\n,S(f122d965,a8e40e3a,b857dcf8,92949f0c,cd3aca29,739a2e40,9876c782,941fbe5f,4d994b9d,d9e68983,78a192d0,bb670bec,71504372,d218e257,f50d0268,da447371)\n,S(ac971547,75e5a92a,1aee2cdb,f5781f09,b975fc21,816e7829,662143a4,e48870a8,249fb603,795b1742,96767945,278dc97a,53fff7dc,f8bbfede,f8943c71,43c9aa71)\n,S(959ec91e,dfd5fdcc,90d3da81,1e9c870e,fb0add6e,144b3fbd,d48c485d,2d330906,1e5ec128,b707c761,b61b5ebc,653585fe,29f48975,2a4724b9,aed90a22,6257ebdc)\n,S(590795d8,ed7d8232,457b2d15,76de09f0,3c6abd8d,23b5e8b7,c59ba93e,1e982859,5edd2a86,1a3c8841,60e16490,a47ab42d,a09cb123,a9d803c0,6835292d,34576708)\n,S(c5372b98,7439245b,eda17853,5cad1507,48fdb4b5,bf1ba555,89714dce,a3e0ba9e,f82d0b61,7159db8c,35536a5,46b69c4c,767afc43,8b64b5a0,22e899b1,60bca987)\n,S(f3d959fc,ae39cbd3,ec8d2016,630f26c4,10161128,7dcbdee1,6534f96c,e35bd38a,e1e55c1f,87602783,2ffe2f97,fe460147,da586a03,ed0ad6ce,1603cf17,ac9b3562)\n,S(922bc76e,be3ce378,2be3d960,489b064d,3a28043,f8a92cf8,dd5cec2e,537fad9e,b3199f57,2508efda,230b9ea7,51a95218,116fbf5b,d1032b54,352c0995,f5122109)\n,S(45c7dd40,7a6d2c95,79ab1df0,8070acca,2c461d88,dbafca12,99a38734,d9f0360d,3a17855b,5f2469ed,6c3c4e04,4dd96f4a,d076eba6,a60e8e73,2644d25e,67e85ac4)\n,S(6422d998,dfd4b00a,3dd89a5b,74411c14,f1af5c9e,1f090d5b,33ee2d26,b959bacb,e2358f34,491218a1,93d8cea2,276f5b3f,376f597c,703bba09,cdbf7d89,37a3bb7)\n,S(8e048214,33196d15,1a4640f1,92bf6c1e,95b1a3cf,5365a6f,535cc82c,c4b0535c,d6d2d73a,1f652c55,9f282ee5,35f55aa0,20012195,8ba94e65,b638ef50,e97c34ce)\n,S(5a2b3da8,b5eb2f0f,8a25a9e1,7124613e,b8a7080f,15d42c4,a1c0709f,e64a79bb,607c791d,eb54aafe,6dc95f8e,6ef9d8a5,a6435a82,6b824cd4,4227f188,bf86e6b7)\n,S(143587a3,5cf614a6,750f3d91,220abf49,c5296e00,3cdde13e,1a0d2d5c,f6cd7ccf,49bc85fa,de6cc58b,49a1af49,46c340b,15f14c7c,2e83201b,6622f2df,86a653d7)\n,S(f0080c42,8737c74c,c3b2c4bc,8c9d8505,ba357b7c,ff25f1a3,ac81be19,dca93193,bdd0119f,57bf674a,7d7cfe32,7027d1c,1c6a5ad9,2ca24f0b,5cf25c39,4a3951f1)\n,S(877ae373,e547fef4,36cb26b6,85d7c426,3e162dae,ac0749ce,f7748d50,5d130034,1f0af495,b750341a,ed956b79,8f268ca3,e1275e15,32e5ca8e,6f9f6df0,d4dfcf5f)\n,S(a418df6f,635ca18,8c96a071,469a272f,e55f0706,b73aca0,d1df2ab9,e8e619d4,2b06cdbb,5bbb24e0,fe499a6d,aa5b5918,2e755818,694b8856,525ffcd6,2f754e3)\n,S(4c213d74,bb6fbad2,25edce4f,44c7b0b4,114dc209,4eb52967,1d907637,a2aedeab,741bef9f,ccc65c15,8752c7d5,48afa9cd,402fb5fb,206c5be0,e480df73,9f970b51)\n,S(a37906fd,3f94e51b,1a94073a,4890011b,2cf93bc3,bb4cdbff,ecb7056,20deb13a,60a3b0b1,c14a9b1d,184d5e55,23314b70,8a8a16dd,894aa332,f01a2d67,30e6030a)\n,S(2c677eed,639eaf51,64b8ae3d,26bb4652,d6d6528e,5b85225c,5e84ec4d,4de72301,df0e4c06,d3bb7cba,17f89240,cac07c24,5fe63931,3b2d278e,aca1b9ff,7ee832a)\n,S(b551f814,eaf86be5,335fc3c,5b01c001,684473b0,cfac8939,5d61df4b,7d7e77b4,a979cb35,469715f8,3033f923,b4ae1e7f,8818b6e6,11a4cbb1,bd399ce3,646664b)\n,S(98d5c718,5c8c04ea,f1f61ad7,40df0c71,2cd47ba8,74141984,fba82146,ddf45c39,aca52591,5c737ec2,eaf88f5,f1ecea89,9d4a8e2c,428f5bc5,b36d2ba4,a0050804)\n,S(5148e2f7,260fb652,68c10485,4fbccc62,ed1e1386,ef8fbbc9,a0b23e2b,94cefc7c,65b4dd2d,35dea498,5ba4a8cc,b1a08dbb,9e9b2716,7ca96e1,29672452,a7ca2500)\n,S(12c699c1,8c9d6410,b8a40ccc,bbeb4514,a08a227c,982df1da,f91e9131,8e0e753c,7d953c42,89b55724,3469a197,50516e88,4889e968,4ed28e1,20b022d8,932fcc99)\n,S(4d0d3ff8,a7734011,b36ecac3,7ebb2312,134e4479,5039ac63,9dc69d48,120a8d20,edff17a0,e0984c60,3c4f1026,197f2173,960b3d29,f0b0ea57,3979605b,144ec64)\n,S(ce90b70b,3e7b7a71,a91b0985,a668336f,ccb069d9,81a9fbe4,48125061,5536e42d,8cde9d56,12e0ead7,524640ca,2875606c,d3af73e6,457f1e67,2e63a478,5569000)\n,S(28c79327,6bb1879d,99fbf985,1d2fa908,d197f5b1,c83be97e,360c4931,563b2d8,c8944e40,e2f3b546,5b6b10f6,ae1cfbe3,bc0f3e3e,33d91085,7c18496c,ec643868)\n,S(6e2dad06,2413cf01,804c2b6b,55b707f3,864d4c80,87d30665,9a1fea53,e7442443,9da67c64,e05d6914,30a1fba7,39c0fe36,497bc028,43441f7d,c4c035df,129430e0)\n,S(bef94ac8,3763946,c434d03d,fdf437f9,19f26188,923ee54f,8715b724,8c4d20fe,d2324534,e5fc1dc6,6fb83032,e95e1406,38648473,ce7e38aa,ee7ced54,31e25db)\n,S(53548c57,f1b45c1d,ca166a24,c0f2653c,9b7d8664,3d45d125,918cedaf,818e433d,cc138946,f0c207f9,c01307e2,130b13a9,c36aec5c,3cad640d,b6a93804,f10c3b44)\n,S(7fd4f784,7f25c901,4e8b0e09,b8b723ed,2aee71ab,fd47988f,90f6ff40,4b5867e,ffc3debc,901f12ad,96605805,a6e402db,58eec18d,375fa976,41b5d226,74a1bd9d)\n,S(444a8a7e,499789b4,49c62424,cd9046ef,d4251bf6,9cb883cc,d3dc79fa,5397dd9d,4cc5f03b,3356b020,ae8c775,708d56c2,abbe8e41,bf393f82,8f7c45e4,dbb30282)\n,S(ff05c877,84d8625d,20694bd0,a4201c7a,4af8c67,8e62abc1,acb0cea8,5726bd8b,7cf0e8ce,6ac26253,cfa5a0b5,cbe984ee,a55f6aa0,90bd12d9,6ec2de7,a996eeb3)\n,S(80fdf7ae,6aa31b6b,ce894ea0,83fd9274,e29f4704,88f0a7c6,79b8339a,de7e4ab2,77d7317b,16962745,6344a8b4,bd4575c6,49e066bf,bde58fe,3f46e60a,3952fb75)\n,S(ac38a4c8,10a307ca,d5020a74,f0d772d7,ef20227b,7eb49589,6854aead,41879214,f49c4cbb,3c675858,416f77ca,92e229ec,d75ecfab,3415d213,c7cd2cea,1f5016ac)\n,S(b3736edd,f1e10262,fd562f40,8f502f19,3a90a435,de9ab6fe,a2691155,a5f75514,818cefaf,f190353c,f01cb068,2a15ae0c,eafa2de,657ee751,4e483057,ad5a78c8)\n,S(66d67e12,d100c116,b57f6d5e,ac6a85ab,e698d4f5,cfb6722f,12738b33,310dc295,9cd4fa1f,3a0c9a54,d3608ea7,9bbd7ea,685faec6,32d7318f,d4e25fea,14a05dd3)\n,S(b856d75f,756ae484,daaeb651,46ecdf0a,9fa10c6b,a7b9b33e,b8747135,3eb59043,5c8542b1,2f249649,4b3a177d,8df246f2,6566da1c,727284c4,b041a7db,89cb0a38)\n,S(683bfd7,3202393,458142cd,661a6543,c736b15f,b8595548,afc52951,f9c47d27,90f52a40,f5dbdf26,51429f84,ac68cd96,420387a2,8d94d746,b4163411,762de166)\n,S(2feaa1f0,811e1e65,13895934,533a0941,41ee1ca7,f8975896,3d00f8a9,1b2923c2,9dd80976,b884d401,5d7701c3,5e6ee1ef,690d1820,7d06e02b,7e3a10f,e8499c1a)\n,S(ce652937,da9ebaf3,a9765e9b,144d20cd,847070aa,1a968097,80e07b58,2287cda4,c1c46ffb,5f152dbe,5a9db378,29e7ae84,454e1736,eb7a1b68,1b321f3,41ba572)\n,S(9a695bd9,170163fb,ab3f9738,a750bdc7,556087b6,b04dc8a8,4fd5fe68,78976211,f40ba1f3,75accd85,9a42b133,294868d9,dce262d,64d6bc27,d0c9cf12,3eaeda70)\n,S(e5baaf68,bd3083ec,bfabd6d0,9e4da4c3,5908b0a1,75578ec7,18cd3223,bd34ba44,ab8651f0,365cc3c1,50476d0e,da3e86a4,5feb7f46,a9afbdbc,e4defb99,ba27fb0)\n,S(2c26cea2,b507fe77,d8f3530b,b7ee1fdb,dd0c4dc8,bf63d04c,e06376d8,ffe59cc7,b344e3af,54d03eb9,b0b67151,b5845297,c30a1cc2,aefc004a,5000b69c,e630d62e)\n,S(7c67539f,52af2e61,88deadaf,a07e2f6,4d53339c,7fca7a3,c2a149f5,c8bbd0e4,3f9872fd,c21c9136,4ecc97e,c6642ec7,df7a2cbe,61b63038,96ee73e9,309067c9)\n,S(4b5ddd2d,ec8b0bc9,3b6e1d17,e1da71c8,3345614f,74201aab,8f9adc1c,aa249574,cfada2dc,aa3eefdb,434d18b3,d2a85a6b,6e16e755,6e55fd69,5dfb36a8,aac5460b)\n,S(d775c2f2,ccfc0835,86a66edb,873a84f8,f9bb6680,2eb0be59,216bc35b,88d80e4b,c8a5d9b7,988a2231,cf6aa0b5,19640a86,ff56ca57,91135ea7,65bb3a4c,fc53ddbb)\n,S(71a3cf09,78810f9d,fb01d984,43dc3da4,b005b07b,36ad4dc,d3c803a9,bcd9bb4a,8aab8e21,7db0301b,9640c5b3,9617ad55,bd4a3c4d,8989df5a,1ad31040,bcaaa55)\n,S(bc71a054,92b696e6,200596ae,3d778ef6,a82f7d05,825c0d3f,ddee8bb1,991f53b7,15789125,9785b8d8,b1374460,630a908,d1125536,e400fb52,b07aaf61,729a2a15)\n,S(9d220919,ee62bfdc,fb81ec81,a0f60e58,e8d94a0b,c6b79f7e,6f891c64,fc847abc,8149379b,1a073c2b,8dffe886,59f4e94c,75f3a7c8,a7bfaa16,e530bc7e,6ed0c675)\n,S(8369766a,d30bbd19,a330c6c9,1e3ad594,d25bff1b,4e3696e5,c6c8c33e,eff33425,a27f7682,b3f4575c,858970d9,c21f7daf,8ed5d28d,8617c8a4,e4b958b9,72e79e4a)\n,S(4e277875,e4aeaab,1a8d36b5,487fb427,e91f51ad,1cd68ab4,57db2e8b,20542451,9faeff65,5bbc4b81,f96bf1d2,a152a546,d138fd0d,a8f8523e,7635020e,a26566e0)\n,S(27f907b5,1b9dfff3,e68d202,72605a91,825046c1,b21336b1,8b91023,39a0d2fa,115225c3,6cb13600,fb84bf3d,dd5c49d8,105f459,ffc4068a,cbfd7b0c,52d4a15)\n,S(6d9feb20,650674c4,437ff42d,41f70f16,ef0900a8,f3cd6818,64b42eed,56b1fab3,82cd97ec,d82b3c1c,2e55f857,653afa3b,5f7f7b00,39aa2444,f60574d2,fa02065)\n,S(8981d2b4,3360669d,361c3b36,3284e729,ecb9cdbd,3bd17558,857f2cf7,8187bfac,1b9aeb27,d5a45d1d,8791bf73,614ecd5c,216b263,6c27645a,3e86d781,70d48498)\n,S(84a67518,e47ad1fe,25540d55,77e92ce2,81691685,6d3c10ce,9c5985a7,72e1d72e,d3cb93af,85072ea2,e6c11777,dc4b73fc,16ca04e2,699ef356,dc8a5341,c5631658)\n,S(d3e66756,72a6cf77,50c111e2,e65a6674,7e666cdd,b9dfb418,d50c28d1,aca8c683,7776ecaa,20e5c6c3,ab5aca5d,8233f83f,4e2e815b,dd1063f0,7359fae3,a6556dd9)\n,S(ede97def,71d45688,804e76b5,ee52563e,522a7684,a68efc4a,f7b2db38,65b87bba,92e6d20f,c9c1276,60a279f9,5758a80e,85bafb8f,b77eb513,7587b692,fdae702f)\n,S(3359e142,e000484e,cf7db3ae,2312e703,6ff84f84,247ac6ed,25a0b9c,eae8c871,67b039f2,3c845fa1,f38c98bf,739dbf28,d00ada09,36e4377f,87166f9d,d21cdf66)\n,S(e0d0a972,c0502fd,2654a3dc,40914a55,96f675ae,cf0d958f,8fd62c7e,122b44a1,cbeb1bc,34575a7e,bbfd916e,dda11903,3ee29e2d,1b11e171,8db7bd47,576b0312)\n,S(50b89367,5df77704,64031ac7,a1f5d5ed,4f332019,d8da2605,9397df84,21a4c987,c4765d81,63ec9eb,a089c3f2,56d6ff0c,45c38253,3d9ed204,cb04f335,d292f293)\n,S(5dc62d8e,66775ff6,f21e84e9,9f8e8123,7f80cbbe,41ce9113,91ce432d,cd6d446a,4b456b7d,e27045a5,76e1cdab,d163fd5c,b020cabf,125f5de9,9ad6eb14,1773a9c2)\n,S(8ba1778f,c7921845,d2632e18,790710c0,4e56ba7e,22efdb03,fdcd4f96,22c10971,1f31fcff,a8359658,b39d7d43,59707268,48ffebe8,8f418c53,f48c7af6,3e3e3854)\n,S(a3a14614,7d1ea7bb,e6bad055,fbf9810a,999a102b,ba8b694b,e7ada06c,8db9fc7,c9827731,d4321284,23ccd6eb,3531ffcc,b3bdb87b,1a727d57,a697eac3,886ac294)\n,S(9620a847,bd2034aa,c81671c4,436682c5,f6ce1af6,4d8df286,21ad1c2f,e0af78f5,e1cc6d08,a7e3dffe,cb47e32f,4156bcdd,6168a205,e8959f0d,99e1555,4d826e1c)\n,S(a40d86a0,aa7d6a79,3f0b6a52,c48d8fff,95b2c57c,584996ee,bc9d98e2,796016b,ec54d4e2,d453466d,ad94c15c,b25617d8,62911b4,45f44873,96ecd950,a351ea2)\n,S(71ef35a6,f60f268a,57573b97,9745986f,7e5f40e9,ba64efbd,5ed90779,b3484c80,eabffa1e,9ff3590a,c577df7f,6f5a6ad7,2f3693c,be475669,8751637b,4f8a1ba3)\n,S(bbd1a408,c742a3b2,e49ffa52,c5f70958,5308abbe,f103e674,86fc76d7,a4f68de2,4941cbec,9d07e13e,1b0fbe96,c7328459,ee6e1e08,50a079a,2ac0b61b,5d246124)\n,S(169ebf38,92116df5,3e09c92f,f2c89b5f,805d60ff,9584d2ab,433f1f9e,84ba9009,914f5516,e7667ee1,581b5ade,bf1de48e,c997d149,1e932a08,34503599,7c6228d)\n,S(8f157abc,4c5ec7fb,eac11545,890d8e45,d71c8d9e,4c4e0c3,9777502c,f8666acc,d41576ba,1e78a9fb,9899883e,602bca3e,14dc709,8982e1bc,63518138,3ff25908)\n,S(8cd338d5,694b26dc,4ebcd8,39a006da,84f71f93,94fb8100,91ed8cb5,b4ec9a8d,40318c10,dd88d9b9,c080eccf,45464ab3,3fd9d34,c2027d95,2a6ecd21,d0002578)\n,S(20e47e2f,7ba5ba2a,d36171a,f4ad760f,a64748c2,94892e28,cbf0ee3e,293272f2,b96ad220,56b89821,5c052089,789e4267,162ddaf8,76c720a7,71b15254,67be00bd)\n,S(582ed8a5,a0d38f9c,db6942d1,1f411dee,f9c31ec6,ffbf1579,3f3cb5e6,5f2bb880,14928c0e,4f9d9d3d,ec4a8db5,64baf4be,948ea892,34a6e352,a4cf4796,3ce8486)\n,S(f4a6f59a,6e76c11d,3f7daf30,b8c046eb,b0bcab8b,6d1f5e7b,877eb1b4,601896d6,2d39c6e9,e5d84156,559a05d4,a9b148e5,ccde4641,e4bd9abe,edc8a648,b070f0c5)\n,S(2a820c60,f71cf5c,76e66bf0,15623f06,fc8564b8,c763a52d,2c329af7,30957b24,b38c0703,d7429599,e6c9a1d7,250078d2,36f77f7d,b9956d37,fd92646,77ff3ca2)\n,S(8c2d9c4e,9fccbf64,871d4802,6077a3a9,33634d3b,c1d7f872,6231848a,6e2799e,ad50136c,ae43bb6d,8c49c534,e80985a7,cf032d77,604c2db8,d5954858,a9351a7d)\n,S(b18e9053,744b3ed,d0b991e,23927593,db00d25f,adfc4490,6eb0d19b,74061ba9,90f5ca44,c829b2c6,771edd73,998034d3,43a8aab8,442302a7,2ffea92,b33877b6)\n,S(cf1d157,b03d435b,905d2f58,cc53bfa1,d124827c,f4ac4109,33078dcd,1ce835be,ee37a9a1,5547c7d6,a0f03cf2,1451cd64,3ea656df,61eeb1ab,1196d959,ca71b459)\n,S(8d8b9d8a,d91a840f,b2e1ac36,a6f4bce5,92fc13d1,f22f84c1,562d63f7,e54a6007,9528be43,93ca8f2d,dae0ec3b,439abded,ee9227e1,47ce6ee1,ce61b46b,b842dba)\n,S(604b5544,bbc5b0d5,716c936f,b0d9a4cb,7ae04a8e,1d5a506f,2561b463,fc87fc9d,33fe2f9c,4fb9a6e7,41c1e5fe,7d3d9edb,ee3cde6f,106a1d8a,3e319254,a16ac8eb)\n,S(3e7ed414,1058ee44,6057aab7,49e14ca2,cbd16d64,7959fe53,9ec0916,fbaed8f6,fc15b241,86dec6e0,c91aa697,10a015d1,f66bd361,82f18648,1ba24568,952e79fc)\n,S(d0ae7435,86c17b8a,c9524243,16cf42c1,26e46f69,4c69cf26,736d0527,7943f326,bfa02de8,b983588a,d4398865,abf6b69c,fbaca03e,8bb5f04b,1971ce1b,f74e0757)\n,S(ef5c05ce,d4f343e3,7e6ce2f9,45380ade,3627bc65,9de0597f,5f851eb9,88be1441,d9267c1b,379f19e,3bd0e40b,74ae8e21,b681e7c2,ad49f635,d60c619,74103281)\n,S(176b8feb,d7998ad9,7c73015c,3b09d9af,d7cf4265,c7bf38ca,8dc64864,5c8f49ae,b4bcbe4c,8267c9a3,69cda190,5676c781,7f989f5e,a014f4c5,fc821bf3,8522f1b4)\n,S(88f683db,cffc14e,ebb58d69,fb6da62f,b20771dd,3542fa00,97b3a766,bd16c3dd,bbef3de,812103c5,266797ca,252b74e,cf80096,b2972219,f52ff718,1d1cb601)\n,S(a65d438f,1247ec44,fd8c4121,c3d67891,8488b082,31fb8854,dd1fe238,f637abaa,5f65c84e,551e433f,dfdcf3c0,b4c771af,4bb50095,dd0fc986,d4d4a82f,9a3f36a3)\n,S(bd6a7e51,c5028bb7,f7e08148,af1597c6,d5cddab9,2883d2f,f6a5a6a0,6398cc27,3f2280c4,247cdd22,e8b97979,b9a98e93,c1ed14d,a76eef66,2ddb70f6,7859d885)\n,S(a672436c,2896a0dc,54b1814e,c5101451,58f7a3ac,74d36202,34411a09,909d274b,dee80293,468178d9,5baacea6,badade56,c81f3d9d,95642654,a7afcece,bfc2ec3f)\n,S(ca0f55fe,d3a1d0cf,1adb0993,d7d2daa6,57891ba9,321104bc,8d9e0379,f03a24b0,dc01b8e4,63462dcd,91588baa,ebca8d8f,52016683,9671399d,b5843e6f,5a3cfa6f)\n,S(610ff08d,9bff021e,544961c,cb2fe206,211843a7,ea0c74cc,b91f0b5c,4b6429a1,4be3b18a,ee965fa7,dabdaee6,8fcd3e12,d889bc36,35f160dd,9b0760be,d1d46b28)\n,S(2d6f8215,a70aeccb,78cf006c,ddf8f0a2,6b695dc9,622dd622,38fcc638,a9ff42ae,3fc0964,e2a3c969,e61e4e5b,ed50f337,7a988715,246c50fd,3ff45487,95a3927b)\n,S(8c0e99b4,868e39c5,b610b132,de1a09ae,99846826,a42fc4ea,70b0c630,88a1bbbb,32b8ca42,f0a240cb,2876a41d,e61b8c17,6ead992e,8785a95,c384c536,141cfe52)\n,S(1528ba8f,9000ae75,e3062af7,74ef6d77,658c6d1d,65af87e4,dbac9eb0,8fc96ed7,a8dd278d,54df6bcd,1d4e6466,5753a8bd,2d39f0d5,c731a53a,5faeca64,513b5651)\n,S(c1466ea5,d9256a7a,f13a040e,29515858,104394bf,ac5af7d2,fa09ef7a,6ff1d7a4,cab6fec6,fb36d879,f0684b54,6003df0,d8bab3b6,e1050a7b,c05457b2,75be5128)\n,S(ce8bb093,e051089d,2a297a87,cf90c3f2,2ea946ba,87a76b56,c6f11812,d3e98cb4,a8dbba51,b90684fe,6dff556f,bd13baac,679cbcad,90b0e888,4c252e95,e03a0470)\n,S(76f3a73,7c9d9e15,8d30ddd9,b092a94e,7c426763,a17a96ea,9186582e,6d6c86d,5b1ca07c,4f345e6c,778ad27e,c6ce3f05,b29c5302,7e40443,b202a022,e5d16c8a)\n,S(f757dfc3,23390b21,3bb98872,5dd7d43b,2ed997fe,af7681ad,ee1572d5,a74017f,d0b4e4ea,67879726,700b63d9,88eb3957,74ec4f67,ca1a56be,461d244b,a5b83cf8)\n,S(59bf6198,a2deaefd,f080ec6d,3dbe3c67,f27a5769,d91c65c,1492a87b,9ed5f5d0,bf5eb739,9011a282,3110834c,4d467855,6e02f2ed,601529b3,a2f3d70f,8410f8b2)\n,S(b1d02f0a,c86d8757,48685790,918c15a,a7b0e85c,f12cc52d,53f8082e,549ba16,7925e03,99926b76,8a80878d,63f3852b,97297725,96d3d06b,85437fc2,571a19d0)\n,S(cd27372f,41d8e07d,1bd2ec1,27c41842,7e5267ef,14f3a908,882e4e40,381d1905,cce36e03,661b9f33,ccf810f3,b411693a,c3329617,52098352,2acaf0c9,5dc77297)\n,S(112644fc,26ca3599,3b68940f,5cbaab4f,ad2258cf,bbc81695,b01db49b,dd9d3ace,8685f790,7b5ab95f,2f7a49b3,bedf09d3,7ff1362b,3be9db90,4e74d049,15c0bf60)\n,S(918df72a,99ce4a16,20e84575,935a24d9,92fb51ea,eb8498bb,3a606e2c,d97d3ce,88b339ec,9ebbff98,f1b8b0d3,c90794cd,bb6b7918,2749b065,602ccfeb,bb8a8461)\n,S(9b8f18f2,65c4ffc8,9425b51,d48a770,436e6424,f34a1af2,a7dacfab,fcdcb83b,bfb95e8,6a34c1b9,2c2e8c78,fc628139,476c4af9,3f63d247,5e454a9a,d585ba55)\n,S(ad02f2a,c396626a,42abe52a,1ea1d8e4,3821740a,d8b3340c,9b9c78ff,bc24ce30,fcc738e6,cf8a7872,ff827cfe,1b7bb7a7,ad8c97e5,e254db13,255c2d07,1a2885fb)\n,S(359afbd,5e60dac9,8ee34f3,f5acf126,9b5c1928,8f54476c,84bfb9ad,da6d85a3,2e2aa1e7,9cd3fed6,71272155,3932ce17,44358636,a18230f6,b501579f,b3088955)\n,S(5639aa3e,230f2f1c,e10c34a3,1cd6c78f,c3c15c0,2061f3ca,55e09116,68b279de,e0b6e95c,15de7f0b,3fa3bc26,3a9e83e2,e3a7d51b,462709c,8ed6c2ec,b511bef1)\n,S(309cffcc,7b2f959d,85cef3d0,c25efc2b,693d3b6c,ad42ce4a,d8657652,d669ec44,3abb62f,d917b1be,79809520,5521d522,32f949a6,7999274b,cf7965b7,a950077d)\n,S(51f3d5d2,dac1d7c0,5d8eab6,375c9130,534a026a,48abf3ca,ce91af6e,533b86b2,50b1e7f,4bdc48ed,9f3fbfe0,ca05bdda,34f9cf2a,ad04235a,ba998a8f,a3e99f74)\n,S(8f563d18,33aa4100,4540e0c6,f501d327,4158b0f4,8b3e4e1f,a3fe25ee,29c2a244,4d4c71d8,5ea93371,57f5248d,a012898f,3d031d93,c1803589,2875928,67432193)\n,S(36ca2909,d68fdab9,cbc45b39,fb096ac0,3c4853c0,ee19d108,ee7c72c8,a77177a9,64f511df,c8252960,85f3d095,31467a5e,69cbf363,30e12ed6,90516208,d24301b0)\n,S(f628b8d5,1f3ffd7c,c201ca9c,2db26f0f,58dd918e,b4d70cf3,80734702,8ea306e0,bd6bce3,ea82e9b,2e8d6eb2,7f557def,b7c2d77d,e6329c1e,a2d360bb,d8adc2e8)\n,S(fb7a6bf5,a82c0b,b2a6922c,9d0350d4,b44fa7d7,61002f25,86e41152,c0e67c1b,c12a1c37,f1c9c703,1f1406,efe8f3e9,8419fc33,23a1acfb,345ebc9,4a702da1)\n,S(c2091919,5c3e2af2,df14080f,400c8c75,bf8ec01d,a5a5b033,75391fbc,fe78d092,b307b56f,cbebdab3,ef87b1fa,3b66c327,7aec3818,e880de6c,3826b632,f1adeb9)\n,S(7627df89,3d1727fa,a06d7c4c,93774a48,73c3bef8,d19bc03e,8d1bfe28,bd3192d1,35d2676c,36f455f7,aa29a865,f0776c52,1326dacf,f6d366f4,bcf726b1,b68451e1)\n,S(26666518,7c9f33a9,6d25df65,8dbfe035,a3df6f73,cb059639,ed54b296,2c62b9,bb30bbc7,d34a5e26,a51fe757,8356a876,c4e7fcae,f4a977ba,468025a4,c686630d)\n,S(3bda9185,fa9802e7,7dc6a02e,8f2a6f71,ef8b125f,735837bb,c7abf3a4,c62ac683,202edf2b,c11d1784,d7875a76,a0ae3876,22b3475c,bb0ca118,9362e54c,a05b85)\n,S(2f90bcde,4486b64d,81313c71,48570d22,3be1978b,7f524097,bc033d6b,983a5c4d,63864e50,2028d475,365b2e30,cca99dd,f4aa759e,cf579705,270fda71,bc384f89)\n,S(8893f5d4,e9b00e6f,dc992e65,4c9fcd71,7083edc2,6c71dcb6,562bcfbc,c8becda7,1faf3055,8e631074,fbf566a1,fe0c6996,a80fa29d,6cdb8313,fe313b4,b238ab50)\n,S(acfc4ae6,86be5de3,eda4fac5,4da73510,f482fc25,309ce37d,855c3495,8555abba,387f4597,d1878a6a,d37a5b99,8ec291fd,76423f7c,f9bd037c,b9071685,2ac52d87)\n,S(2ac4d090,a4c5e988,2f3a892d,d28a5229,d5fe35e7,d74660d9,5422a55e,2017a469,6058f516,2aa3ec45,47a79f2d,7d8e6869,927d172b,f75a1914,a3bc2571,df086c09)\n,S(137ed3f,fc13c572,e5bc235c,d13c7e62,c9b1a3ec,250c024e,9c9f584e,7ebadef6,c1e95cc,3a464f51,b43ff02,3c8758f1,319e7c2,f37acbf5,4fb8536a,8ec6fdba)\n,S(28a037a,72148a3d,2c89f606,81152b94,6cfb16f7,58f0a002,cfe4d857,ef3ecfe4,b2f4b650,135cde9b,8d3788cf,5c6e7a3a,ec595124,fa903aa8,a1bb3984,fb973d10)\n,S(303ecd51,8fd433fb,ce9d426e,8761a76f,78ad6d5b,5f34c0ae,3bbaddcf,1a7a9eeb,6a7fca44,3b73b19e,967a5945,a275cb1a,cbd8dc3e,89d85385,ea956339,99abb602)\n,S(cf63042e,5680f71c,2641defd,9d6569ba,c69cf079,f8b3140a,50923381,51533202,39f3376d,fb17fdc5,719a2052,5e1aa428,176643a,f50dc9b6,b8ff3401,eceb4ee8)\n,S(cfafbbef,b4a49fb6,96923b6f,2e56c493,34a229a8,e2dd968c,44f485aa,1b1fe4b7,dc0ed34d,4a9c17e1,ddfafbc7,1d76f71,f3950698,18faa16,b5d25c6,c69f9007)\n,S(ec0e3de1,fd527ea,6a493ff7,b3c6aa40,4a7ffd76,9a08953d,785d2f31,390d363e,94bddbce,300234c1,82f3c6a,717f53cd,723129c0,ff353528,fc5c285f,8e7a35dd)\n,S(f07d3cd1,914422cf,d4b9c0c3,501916bd,13e9cd84,eeb02f7f,84be2a40,4b2bcde0,cf0c96fa,cb393218,37c48de5,16d1f705,dfe91206,8ae2d810,3aa1f77b,39637320)\n,S(4a4254b6,6f2e204e,a3264ac0,a00c7a63,8a6fab7d,e67643e2,8217099f,3648db10,b5510e29,be93fc35,efbef989,15f7df95,b187ab08,bacb157a,c26ab2bc,2ee5023a)\n,S(56f3bcf,b38eaf1d,35e62582,9f671945,910285b0,3805c1d9,b5d813e8,e87774a8,a9b964e7,9e6b7f9a,9abf3e5c,a147f773,8a1e8270,8677e6ba,c57a7a75,d1ed9dc6)\n,S(f89d8f4e,7d32efc,c2d95bf,feaa4c9d,af6b9886,51fe7561,ace561be,6b081295,ca632f11,56a33867,63a65691,17186994,75e48f51,48d770d1,449ec719,8dbacc69)\n,S(5c3791a0,d3e716eb,50ae4a07,51f0e92b,2890b933,c6d9aaf9,758e5205,27c5530b,44ef13c6,2de52d11,179e30da,e913493a,c4ed861c,336ae1c3,ca1f8bab,a7b34616)\n,S(2748765a,e6baa4ae,62cd7156,16ceeadb,8ab94ef0,d3a3e331,15fa0132,aba38d27,71d4d19d,de63770d,60905bbe,6c7ae92a,f36b333,a93b3359,cd4f1f2,77f69e48)\n,S(964f1fa2,f8ecd778,2ce4ee1,87ee3e78,d2c41a0,45a95453,22e363be,bb27e254,c744bbca,de64a883,e9481a5f,a2cce621,5137ae00,3b9822e6,77556610,d4138a2e)\n,S(8bf60775,8709c9fa,8503594f,e6c379ff,ee758a07,4f7d2754,58985e25,79b8ca3b,3e638992,b3fbdd72,ff51cfb8,fb118d0e,ccc193ee,718a7715,a5ae6188,87dd51a4)\n,S(fa107123,9189239c,2bfc5a95,ddbee798,fbff70d8,ee0d5f5,a10238dd,2e06612,a60cd5e,1a4eb0a5,99133ea9,71d5ec1e,315a6be1,2d773936,c624c468,f968e7f1)\n,S(5b48c6d0,9f6f97fe,c03d145e,f797cb8b,3fe2503c,a8944593,83c34e51,44975588,44d86689,352611bc,c1291762,d965f136,173d6c45,28077d83,c6410a3a,906e30a0)\n,S(80e153e8,23aa7e3f,2865d1ea,1e5e88c8,5d4e854d,54bca5b1,ae8f1bca,eeb94fd0,edd3fe29,e435c11b,13a92d8,ef4f6413,c888a12c,71823f7,3ed7acba,a06b9728)\n,S(16e225d9,77bf7526,c2590dd1,54c6e29b,cd25de9f,7b1fe3d,ae7ed6d0,79ccf2c4,e0702d23,b9b57554,6d2db82a,fcdc22b7,40088c52,e0fa274d,d85188ac,9710768)\n,S(a3440a09,15a16c74,8221b65e,7825ebcb,bb064aa2,de3593ce,7a691efc,d9456938,ff7c7aa0,3a582a8f,5641323a,7f437a67,26fa5d3d,e7c3e26b,be970904,d4dbf40c)\n,S(8154334c,d1164468,2320401,f2d59385,8d607203,93eb37c8,a030e9e,cdaa2b5f,bba4094e,5f97e4e7,b0f0676f,4a091488,17126ad8,7d573d54,150139c6,5b3d5142)\n,S(c91348ca,27b5baca,3a092b25,74e09976,fe7f2361,3e1b5efa,329e6a5b,7d4d93c7,ce241d0d,e9d49a2c,5060e62d,c01bfb59,e7c37295,4095f639,9d61e73c,5976b44a)\n,S(9408b5a8,79fead4c,67635e99,59ca9649,cf362940,737e6436,3ba2590d,7e6e8a88,e10b410a,26c710c1,bf2858d5,21f46094,e02155d2,84b80fdf,cbf17645,7f994fc0)\n,S(b851d158,eefe48b8,79e0a159,f8582aae,f80ddf90,d9021b92,e7d3e7e5,d6bdd2ce,290ae2e1,792421,c1cc53f0,69c7d580,60facfd8,e537693f,6abdaa2,c6d85469)\n,S(9d320b4d,4a7c2007,65805387,5e536093,87e7a5b8,54da05eb,1b971e6a,e53d10fc,4f6acb7b,6a1f190d,6822acd0,ae783b0c,9b44be61,ca68306e,79603f47,25d7c456)\n,S(6d779810,7b29ec65,4ff86799,d13a4d89,eaa49114,d00744c2,2f30a9e8,358ac7b5,8f7993cc,105c4f09,ba060a2a,ce265cc5,77b2a334,3ba3880,4b0a3e79,db823950)\n,S(bdb2d2ce,77e14fb6,9a17d62d,b8056d28,680c9607,2c82772d,73c91da9,e57f6489,9c1ef71,d43c3b19,dcf8eced,ea6f5648,8a3bc00,3c2b0c1,84c9e42e,5baa590d)\n,S(49a8ccff,1ab70a94,a4db4787,f73bb058,1f7897a8,d0a1adea,741ffda3,f055b3fa,f298d277,2049ebd1,ee2414ed,6e053ad5,15b41914,fd6de43d,8bd9282a,6c6ba426)\n,S(ca3f7d6e,b466b7b0,56267992,d317a02d,3b3d5652,b51040d7,7f1a173a,769d2236,a26d6225,9dcf384e,f78e6f2b,f96a42c0,90e538ad,f6f1a1b7,126dbb12,8e145c37)\n,S(b672ce14,f1c427d1,b478469c,b0d08b99,902e9cad,a66bc65b,c00ea630,737176e4,176c0979,15176,27a0f1af,f3c5a56c,83f4f550,b8c4bedd,b818bf76,68865efa)\n,S(bdcbab57,d4ad621b,d6db6866,f43778aa,2c26dd78,8f2e968b,da3c913a,ee9c199b,79868872,9bb213fd,7dc75a33,8d6168da,1cee9f0e,e93c7c11,24055232,88df5603)\n,S(f5f25f1e,382f7df5,74c64aa9,6c5f423e,d5beed0,82d80196,1cb384b2,55fbf9f5,ea388f0b,5ad84aae,58393a82,9a50a4d0,f54bc068,e12724c,98a9dffa,f2210221)\n,S(d2a10464,f9f8ab9e,1ca6e280,b2747c43,60372049,85a2650a,a730b894,16ae09c3,d19719ed,8dc46533,28d8dca,f2c902eb,2c9ffaeb,ab3c1b45,4fdcf68b,229c5962)\n,S(89255afe,e6724c4b,c5522105,8e5e6aa5,19058c3f,f3ff691c,c5f81a00,20410038,8d626dd,9560c934,11b52ffb,4fbab500,c833c3b4,671713e6,9147d8af,da3fd7bd)\n,S(5e468c42,c5eceeee,2a67d73f,57819019,5165e3f2,6c93f94,beb12fbd,556e3952,af83e24a,467f97e2,ab8b6a8c,330e400f,ce1fdeb4,3a4ae1ed,c3866505,8cf240de)\n,S(70c2bfac,9eca198b,f606850e,8f54ab03,552caf8e,9385036d,7fc85007,e99c4e2c,60322365,f5ffae57,8a8f9939,20cf7596,3b45d940,d2c4591,544feb6c,d6ea37b3)\n,S(16143d3a,fe5f6b42,500f86d,7c79630f,bbb0db1a,64e901ee,ab641c0c,b9c2f318,7078e814,bdf81d7,81109561,d4d1cd37,9fd74924,4cad1e68,ecb8b247,d76a8a94)\n,S(8ac33ead,a9341644,db25b034,60ff60ab,e1326eb7,73a0bed0,29f6e966,16b62bce,6d07756,6f0d18b4,bd055d0e,d99bda50,ea9e614f,da46005d,c6d9dbfd,18945cc6)\n,S(476b98b8,9e7feafd,ef5f0116,6e0c8eb6,70cb3325,a10fbce7,71ea9e06,2566e22a,38dbf041,83252b86,7e138483,c012f220,fd98bd5d,b80fbf47,30c5d0e1,d6a91050)\n,S(e4d262ef,f0de9c3b,d3302bcb,321adfa1,2e383a7f,19297058,a19c453e,ed497f11,a1f830fc,2fd6120c,8f2070c4,9ea49001,953d0c0e,7c02050b,fec7cf7b,ce2781d3)\n,S(67bc850f,48f0be1b,f18c4f7c,b9f33e67,e2e09279,4196d987,1bec0fcf,f0b5cbf8,e2560470,334aa4b2,4693e927,1d2f20cd,b7e6fabc,92e0f355,526dceb8,5f52d32f)\n,S(50dcb2c5,c0dd4942,2564be02,2ab274e,b543a6a5,a2712b8d,58f51e12,72ef2797,2cbc036f,b69c44c9,9c7854b4,9705dccb,8d2ea16a,2f77fca8,90d89f8d,4ab04ea0)\n,S(6c9bc577,784948f4,1e8a57f1,bddf5665,f860804e,89912876,44ba7b76,8758bd6e,84a671f3,5998ac84,7329ca3d,1224901b,a0401915,c9280260,cd40ff44,ebb3ff20)\n,S(5dac93c6,d27cdbb9,9f3ceb36,18c6ead1,28b44146,467390e7,a337c494,8382a868,86572065,1805082e,7434578a,a97704f8,8a91c2b8,e315ed8b,ac2a4bf8,342df508)\n,S(207903c6,5e1c57e1,7a6e9484,d3073c0f,f6b2a40a,b46b996f,2ed2be7c,85780c86,4b568420,29564d4f,6c4fd310,73e17a3a,bbdcb83,115a6c14,854633c1,47f6a442)\n,S(da025f63,9be593e9,3ab35113,2282830f,6ffbc94c,829111dd,29546221,2edc2f90,9b4acdeb,a315e576,f0edea9a,21acf5c8,714defa6,5ef4ae68,eb694383,916d2723)\n,S(327faacd,1b489c8,2126ffa6,b87cf191,2a0f61f5,ee47eea5,6030a50f,b2823cb1,634ab42,6010009b,144c5ac2,903e5f8b,14c00c67,5fe177e9,6b7f9ecf,b8c33b9b)\n,S(44cffbee,1619f462,a853478b,a9d1bfd8,6c9cab17,f5bf50cc,79a24558,7b7e8084,b08983db,62079e28,7eaf8c28,81079a45,76442a1c,fe35f64,563c714d,748e7da4)\n,S(c5d945ca,13730ce2,c21ad679,734d1deb,beb19785,480f93a,43a2170e,6a6fe3a,a3aad11b,4d8b7140,f67f7287,8e4a9c1f,74102ffb,ca3ef04,46e7bf1b,ae3cc3fb)\n,S(f4d8cf19,84dfe935,11b2694b,8f1db0ed,d4bf22f6,435359e6,77fa42e1,cec0de31,83d02d22,3aae1880,d7ad76bf,c7e3bfde,5b48a55d,4fb0ff02,c0ba5c2,e9a30845)\n,S(13d721dc,8e7b0bc8,90c6380a,fd0f0ee7,a2dce0e1,e153ae70,7e50ae7c,1837c4cd,c620c1e3,e1575411,7eb9e823,70af7e4c,9309c412,d5f14d28,e976112e,88841116)\n,S(e5f9efa6,66fc6728,207eb55d,94c1daf2,5164824c,e27b1783,92862e11,6265ce1a,500a9fe6,18302bb5,22ff9fbe,163d79b6,1f0f3cf,53e0956c,7712f23d,5c0d9975)\n,S(73ee3cbd,a1ba137,65a7abb9,827b1b32,a48ea0e0,a43e9698,8da603c3,c319c9ec,d96832b4,4093689c,beb30bd5,a2e825f3,bbc909d0,20e18744,b0a5ec5a,1ab38f58)\n,S(11b92fc5,94046bba,813285e7,122750a4,3e028501,f027a55d,f101d2cf,c5990d91,e08b24aa,e20fcfe0,40dcfcd0,80949b2c,23b324cd,1d957b63,9fe91716,a4315417)\n,S(3043669c,22be0dc5,fb14442a,22a625d,b1bf4952,362f06a0,623ca1cf,9160935b,dc4834b0,4bf47d6b,fad52c04,4d26e21b,41eeadb2,5c92ca22,6dd2c86,24d0eb34)\n,S(490c39aa,c290d144,2b87622b,407dec4a,3f92aa61,6a9c8495,132b5c7d,3d5f9a0c,5c76c0fd,57844aa6,fe81361f,73cb314f,110f87de,6773e1ea,b3d68dae,2926b986)\n,S(fdd5cd58,67d73347,ca1fb212,772b0c42,3a4caf94,a3e0bf2d,2bbb2433,9002d03a,efe5f407,d1d26bc7,6fb5bcc0,6bc94da5,bd69f84c,85d89172,10bce909,77411995)\n,S(bc8a108e,b0830fce,443db272,2655ac40,e2d35989,cad192d8,e9c5017,14435ea9,924c0258,cbc3da74,a708a384,b93196c0,76bd3af6,2907cd60,22069b93,e3c979f9)\n,S(ed809b6e,41f4b6cb,86ae431a,718989cd,2c706ea4,10152e3b,3395df8e,ae924b44,135d805c,3295589,c8d42ffe,947aa88,bede6699,b119f8a,324c9bfc,64315da8)\n,S(26b50ac7,5d871e07,4147d2f1,ee42d6a8,4398212,79e9f276,7978517b,6cda52d8,26599c63,86426e9f,b14b4c8,3494f0e,1fe37ea0,521e4518,e346bad,545dd7a0)\n,S(cced88de,27d0ccd4,7f6746ff,98907cf1,679f6b10,67785dd7,25ab94d4,9fe8efd5,5b0ede2b,4dc584ac,b4b6adc2,c52b4268,e2beba67,ce2bc825,fe4df43d,73f5729a)\n,S(d8edf7cb,31526332,308429c1,178886ce,bf3fe516,18f472bb,52da883d,d83c6249,a56abc3e,c155eef6,d43427e1,30ba691d,8c71b80,6b487343,7f3daf07,17984be3)\n,S(ed82c3c9,f8db3a75,50949aa5,cd6c8fce,52648910,53f66515,c2fb71c4,7564b4ef,5ee59949,6d9d3c7,6fa9a26d,444a8a45,41ddccc8,15fccf39,b06e8fe5,20b2f0b4)\n,S(6e277bae,e89aeb54,5e6249d,56d50848,5853b3ad,8588365e,7771ae44,3d8ca937,84871bd8,1e6f94a7,c31a3fe6,63a1170c,8f9623dc,4e24a5b4,3f7d023,39f40b8e)\n,S(aeb67ac8,67271210,565b1229,3e1aff94,f2f8b642,76768967,f702afb9,48a03c5c,fcd3c588,94259c03,cde7898d,66ff5ac6,747100bf,3707e89b,6980d21d,78bde197)\n,S(9f07ff4b,aa20c756,94c967d1,e38633e8,45753193,a3d13af2,3ba7ce07,5283da79,ae8b7f0d,49d06168,ff3c5f36,3aca3f1c,14308cf7,d95bae36,3975fb7f,dff2136b)\n,S(24046d14,a026daba,1644b3ef,7bc5501b,baafc3c9,76acfdf7,243395d5,713e1520,265485e9,6dc40a31,ba93cd0e,915534b4,37fd5380,bad0d6cd,321867cc,aa029ae6)\n,S(1376926,bf8fd1c6,80344f48,c574e6b9,1806afab,7d9f90c9,13bbc233,2b3de519,a34100e7,c4b44c26,f86b2198,e7d3696d,8aed9051,a1755ced,56ebe795,d5a61fa5)\n,S(943c6d4e,816cc668,87f7c85f,b116ae82,5e4c38a6,581cd5f1,1efc9a3e,ef5a7d6e,d93d4724,f618da6d,29e35165,7883ee36,74112f70,3169eb24,eca31a60,969de8dd)\n,S(adf8041f,159260fd,cafc9e61,d5f4f867,a0f46e94,af60bf53,d4d0808e,885432d9,c4eaba1f,99d2516f,3d731bcb,be90b36e,c055ff5d,e6c3ed95,2b95a037,1be57958)\n,S(15c17f13,a404ae08,11ddefb6,707a9fa9,dc0d9461,8325dbb8,d96537c0,6e2dcc44,8740d352,21f95e8,36842b48,2512d79d,a799fb62,60d65dc6,79df383a,e9b6898e)\n,S(87bbbb35,62365994,9c5bd575,86b813dc,966ec9ed,1ac31435,80e4b7cd,cacb8ca0,159992c,1bfc3c24,95e14ccb,e24a3e9b,6a28f4e9,1cad4a36,f83624a8,d22a48c4)\n,S(39bd144a,96454c1,9e082b5f,eae9c433,564da73c,d5d44daf,95b5c176,9f1fa105,ffe8a11c,30b5d4d6,f8abe12e,bc3ca8f9,dadf1527,330319bc,fa277b13,256fb207)\n,S(c4e4eb4f,9bcec0c6,6bb99bfe,265b2f4c,a1c69676,ee970a9a,b78bbd64,a83bca7a,1bb9a83d,316cb9c4,bce4be2b,d05e6381,2ecb493b,44fc3cb7,c2248a0e,96bfc286)\n,S(c183e783,1c80d334,f0ddd2f4,48ca035e,8b53f034,f53c1801,488e4aec,cf244e69,f998feaa,c7711d48,3db38926,8ddc080c,8ff2f95,494e60b1,59330d8b,d9a8b820)\n,S(99d1d7ac,22a2e108,f093b630,f374d9d2,7ac812d9,5753bb6b,e39c2401,fed47d92,a67d334,88dfe341,e8dca3d9,b36a897b,52080a3d,c366c8b0,39cc4de3,52d0e1f0)\n,S(e0700a5d,16cd89bb,df3d6f18,76909082,985a3339,e7f5d2bc,5c3ccc92,ad61cea5,26f6abe0,38953fa8,40bec97b,c9d59c20,1fd08b29,4a7ac7e3,bd994e07,70a0b0f0)\n,S(b19bf6e8,cf36d839,51b813b5,67aa62ee,5415e95c,d3fa668b,55487a3e,61a7e721,630e78a5,ca2cdb2e,cd59f59e,4c10e712,46c1055b,a7709041,fc03f8b9,1970153d)\n,S(25009156,e90dd0ec,88027adf,a9701474,39abaf72,1c333943,c6fe6e19,ff71fd44,324047dc,86477632,214ed74,cb933859,b7825500,2d19ddec,9c466e1f,573afc11)\n,S(45ce7fe8,bbe45d1c,9bb0c98d,9d4c500a,aca5011f,96238681,771b8538,61a3e4ae,8cbc22af,d1adb8f0,a5c72570,2b6c7f65,9e41b176,1358832,7ca062e4,2392f8b1)\n,S(73255507,d3a27fc6,7df39212,a286ef6,b939e953,43b12683,4e38148b,619ec059,3174d6e6,e941020d,db0f3ded,aed6c8cc,eeba10ed,1344ce28,a354e93f,25c35b63)\n,S(96b2cef4,1c6c39e,1ec9a945,8c8bad3f,6025962d,a1207885,97800ac1,c811df58,ed85ed21,41b4ad26,3adab5b7,c0c0035c,2fbf9e2d,983dda99,7d1249c6,8a7fa8cd)\n,S(5764181c,d941b28a,a307bebb,912ae87,57f23cc9,37025cdb,b983eef6,42b9c772,e8173b4f,c23908fd,db5f6437,5457a43d,2495764c,f3ce1b8e,f2c8d2be,e0ac7089)\n,S(38ec7839,7e965056,2b1e314,5d5b2782,ea16d2a3,82bb6c60,efd29edc,93ec1b61,acf04ea4,c7b6de2c,d8acaa3b,a4bf2656,f522e631,1cd51089,744d4c96,318ec96e)\n,S(6ec4ef80,13d01c79,758439fa,108f7389,79c9f7dd,4b285eb8,b7aed579,76c0b572,2328e642,e618ecdf,3a6560e,3eb6af15,7a6d266a,f5f3c4df,13c1ba2f,c898be7e)\n,S(d8da1f6b,30c27b1a,5000fc14,9a768683,4c40a581,c4ed67ba,88492449,ef77141b,ccb532d6,876d92cf,2b8c310,839387d7,d92464e1,727287dc,49a3b348,2d519758)\n,S(84f25402,734970ec,966aa9f0,eca84a1e,6894d36c,338722b4,e5fed162,8f7ccb90,f2d7fd09,f07e6302,cc97d283,d9f06319,9bee137,d3946944,983c2192,335cd8b1)\n,S(ef6752b5,58874372,859190e3,91d86ff7,3adabfd4,cf008038,136b2ddc,ce9503e3,23d9ca50,13cb479,7cbaa675,98dcf98e,73f949e4,614390f9,1e6159f8,3f131c56)\n,S(f88d8590,3b3fe67c,f641cb52,c77c776c,fe198f74,fe116a46,602bc2c0,1085ba6d,58af2abd,2178ad68,a3695714,cddf14e4,21da61a2,8e6cfa32,40507fb7,ba08742d)\n,S(93b739bd,d366b95c,675daaa8,c5ded7d2,18cde6d5,d15d354,645de017,2db9c01c,24ec535,6c2f8eaa,633af5b9,6ae0fcad,7afea5f1,c7c8bfb4,748b886e,25cf3627)\n,S(732cf404,da7ae5a2,dbf82f80,180c1154,6d313b92,58980f95,d413f223,443394,858e8326,1758b90a,902eae58,a777b56,e8820084,153c9e43,1b7d789a,4d596953)\n,S(efde0719,2c40002d,3f82e024,a1b838b7,65fc252b,5be4af75,28ea5994,a9d36e32,89c1d35c,3a153576,91a63585,183a9c6f,b8dd69b5,69d45483,f0c2f80d,3dd9107b)\n,S(9eedaaf2,80693392,76420c1c,da950bda,f114e65b,9b1a74a6,b42dd90c,1ec90a15,1399dc24,7fa540cd,3249728d,a4d28c52,26f427e1,ac3b533,7de8ba07,d3164de2)\n,S(23f0ea8d,342aa214,69deaafe,bfdb487f,775805c7,d4ba17dd,877d3d42,19433195,dc1c6e31,d2a481c5,5d32ca8d,1d4e93c1,63444dc3,9e7c306e,4fcbfd46,b699b03)\n,S(d85270,58c29e60,58916e82,76a305d2,edd47c0d,4e33052c,74cb76e,abe060b8,9a0e4904,e4db5bb9,5ec9e510,59ea4993,84d497b6,8a9a1258,3a2fda6e,bd0cfac8)\n,S(1b34c95c,ccf91204,5922d2d1,90cf3860,f7d36b37,7ab3763a,d4d9046b,309f28b8,70c2320c,3f5f663a,b6478c3d,2607cb4d,f7080de8,91bb408f,6f14a11e,2951e948)\n,S(32558fdc,ae5e596b,b756d4e2,f10707a,89569d36,1498e8c2,8fca1473,4b84b228,7759a8b7,5ed5755b,b23978c4,3d5aacd9,fe63f6e0,74b6fcfb,501906f9,16038d86)\n,S(64818b77,37d2bc57,391a3820,2040afbd,6028d7ec,fa3d6bf8,577cb1e8,dd984acd,4202b934,6ae9554d,9227b891,4a6304bd,2cf895ec,a7267e1f,5707489,71ca2300)\n,S(c6af6ac6,ec2d7cb5,42aa2373,24288551,bcd33705,72e1b1aa,e572d87d,8d77b333,fffe5559,4ae5a2df,18e393bc,dd0407ed,5d5af18b,85f22352,9fcc7cda,dec78cbf)\n,S(91f8fc44,94ea12f8,fa2a031,7f32fd44,2e7a9e34,28eeaf13,a8b0de3e,a4f1cef0,6a0a47a,d81b1dd0,ac6765f4,20cc26af,e76c2225,eaea2a42,481ff6d9,a554dbcf)\n,S(e159a9fa,6a26f57c,879b081f,dc015b46,dc610a61,2335d6c8,e353fc42,11c1c017,c209c643,445ae009,a75656f9,b4c1df2c,f1c181c7,ca81d0b6,bd749afa,a93e8851)\n,S(e8e9fc5e,135f3a97,1211eda9,c06d283f,1a705169,b89e5813,556beba5,a4f9330b,e8b96899,3b73e8f6,da7b55fa,6f1e44b5,c88423b9,f3fc5553,fe0b10d4,e9af0abb)\n,S(f3f5d529,d5ae4c0c,36c27ec6,e13384b4,11aa9818,aeefb5b1,64243536,bc0edead,3f740643,1e40c133,345abbc4,ffc5e0aa,1dd1e306,43e52ae5,33f5be61,db3d34b9)\n,S(c5b76430,f5d8bb9a,e1b9acff,e1417602,9eae65c,9ca1606a,2e4f6d7,6cc81159,80689f09,70089098,24087591,6915380a,29b13933,9a000fad,d2e86d8,cf2429c1)\n,S(954aa4b4,34f59074,45ed30c9,ffb6db50,ff275564,72894261,e935109c,cfc09b0,8023ca86,1bad2c25,6cd76be8,b3b0fcf3,a808b76e,80a70ec5,83265d3d,c72e4ad)\n,S(55da8bb,4803f339,3020c9b9,30a58336,1b96ee54,4bbb4249,d6df1335,6e3d528b,dcc44b88,ca06e9f5,86cbb209,da01785c,2387b14d,355a2575,799ef7ce,32e5b64c)\n,S(8084e800,d810b286,b0ad48d3,d262b4e1,db59eabc,a176e368,77a7f8bb,a3a1de03,d8beea9c,59f865fc,9f09c12,9bc5f980,70d60ac,eb348f85,e0888fc4,63dc1480)\n,S(1b2bb6c2,36c87f88,748f49a1,5094949b,d15e0217,b00c0bd7,f85efa41,5718b39b,2164b195,6aadf36e,f1bdd018,6bea9a4,c3c3f42c,b0e81dc,8101ad14,51029c74)\n,S(fba687e8,125c372,e5dc65ce,3d2febed,de9139d9,9f91ad84,830da38a,54377872,8944eadf,3b89501,ca4a7a82,105a9613,55aabbf2,57f4bf83,923ec12,73e001c9)\n,S(b58e4b80,a5f1c16f,f9c699c9,75a2d797,d21e155e,f091ba94,8aae2dfe,fd560cbd,fff9caba,1429bfa6,e571b7f4,12d6aa97,4606f7d,9025efec,937a5128,52cec3ec)\n,S(8ebcd526,da5d6c21,55222551,e05c6be4,114fdb7c,9d43a900,fcef17ce,3426edec,73a0fb98,6b3301b6,3eaaafb1,a52f5467,de11f034,aeedc21e,ae97df86,513aa97e)\n,S(fba4540b,924b29e8,95dc68f0,e971549b,7354e032,64040d2d,bb956691,1bee325e,529088c3,3b9857ae,342ba0d0,7e52843a,290f3c27,16f5321b,6c9e6f51,9105ebd4)\n,S(8b7a2c97,a1a7d324,6d86301a,66f3f36e,ce014c97,651b25b0,ab46f4e8,bf9c44de,b82854ab,699c35b3,6786c1f4,71ea7536,7c88a684,43fc17b9,4cb328fd,a4b247c7)\n,S(9df11743,5adb7154,e7003bbb,a1ba909b,93179677,4bd4896f,40c39a58,ead2279c,a7922f4e,a216cc36,c36913d6,e7ab8641,d4566865,dd7a2f83,77ef219b,41b884eb)\n,S(5beb7b84,749b444c,82efd9e7,37314892,c54b6215,c1f9be9e,414adae4,56931cd8,99e425f,32cd0a7c,28e753fb,ff308eff,d32b7cfc,eb51df7b,64f60e9b,2fabb95c)\n,S(2a830c43,ff204ba,78c5114f,4a3b7b09,c9f8ed5d,17066f43,cd512af6,4c788879,12523a4,e8882652,eba827fe,d207eb00,9ba14809,9ee42865,61e96230,62666c84)\n,S(f71a46a1,4c1f2a18,e68ab408,bcd32d94,985a7714,19c1419,1b69221e,1c57486a,adf19b3e,ea79a53,4fcce36a,4cc0da0f,4fac443f,b281cf0a,ef675b6d,20534875)\n,S(2b80e5dc,aa9c2b31,678ae2d9,f7d63c0c,bbad2bab,36c412fd,cb6436a7,c69d193b,bc83e04d,71d60062,b681ce04,c506247b,8f3c9019,c2084ffa,27621d62,22119c3)\n,S(49cbdf3b,e521c69c,68375b58,d4449341,75424a0c,3c45d5b,b975235c,e63beece,c5615eea,f0f0e7ce,c3756aba,d3a136ae,91d260f1,563997a8,ae46c49a,5c62de7f)\n,S(ce4d4714,b643b115,9215e2f3,1dd070f7,f7aa663b,9ca87739,79c5ba31,ce9ee1b2,b1f35e12,a2fc3aa3,4db59ef5,e62101b0,479745b4,200c10aa,d6f8fddb,1efeac38)\n,S(6827b6bb,aa905ac3,8d93bb1b,5d5881c5,a8bef479,ed7c5656,2992d4dd,61e10054,8524a87b,af65020d,91848427,95801f54,30fc3727,7ef2064d,1aff8ecf,296bb869)\n,S(e71e4d5,48f4d7f1,c7b7879a,a03a49a0,ab947218,b16dd125,19af4ad1,8056535f,495d0461,7098b3d5,6f7e3bed,ab5c9813,83aeed68,3ded1c09,f0d1bb38,e32f574)\n,S(ef683979,7429fb30,d436aa32,a3feda68,65652816,873ce542,6320667c,6e00e032,b4b18e4a,de1197e8,fded846,f188a6ac,2f17506,f014d404,fbba3635,534613f)\n,S(c729c1,ac8f7eff,e908007d,e2eed85,dd557e36,c1ec645b,a258b03,e52deaf4,2e83edc2,18584f6a,c5ebade6,a335a087,12365b89,ac38f27,bde7ebf4,561305fe)\n,S(cf1d3919,9a716d53,b2bc4f2c,3ae2ded1,290d54c2,2124a88c,c1cc7fb1,115735ab,6b44f5a5,7ec3402c,e8980970,dab8538b,c276c8ee,ad542908,9b7b70d6,dd00e6e6)\n,S(6cf3d7a0,266dee28,f3f1f772,ee90da75,a9c28a7f,f82d8f55,cf9d609a,5becdeae,3bd18fb3,1e11cce2,895b9cf9,4d9a99bc,ede5c9b4,c44ede14,34dfaeb,49bc58d4)\n,S(da4b5832,ae63eeca,cdee4274,f00ae932,56393cae,cf830be7,f28749c0,7d395542,9aabb23b,d2d940f1,815610c9,d1684b92,106374e3,1b694ec4,dfec8818,cdb2210b)\n,S(f91ae350,23210e16,f9c63270,cea2c6bf,407d1a10,e95842d4,b8ad5f7a,4330bbfa,1f161ac,d1962573,5969290e,fd3d1af1,53c91543,33651e16,1b51086b,913aa1c2)\n,S(7e1bef52,cc3e2a2e,45847c86,27328526,c72e3f73,fa1c8255,56c874b2,f2f1ac02,be4b0f7e,a706e4d3,db7048fe,e0fc4f50,8ff0523,ee8d97f4,4c4c1787,e6f6e6fe)\n,S(dd2695d,30dc2ee3,748e256c,cdc92eb7,706567f1,4be720ec,b27fc814,d3d5998f,9af32c44,f1028013,9ee7cf99,845472b5,bba67740,f0f0b96e,d1a02a19,a32dc74f)\n,S(78fae650,714763c8,d12602ba,33b76da,125fe395,43fb37c9,4d20b337,649dbb9d,78dc4c0f,726cce6,f65826e5,eaf1fea4,c3b92532,6624ce1,21de2351,bfce3aa6)\n,S(1edf521e,510e5dd2,aa1d3e00,d016b45a,1b6fb6b8,591d98df,ee692636,8dc98bd5,9a0d016d,9b2e9b8d,d0f4d817,71ab0f20,aeafd8d3,63beca59,7518da41,55311f86)\n,S(8607bb0c,5e53b60b,9153272c,d3cc69e4,7ce28694,37562b4d,4166aa18,d0101d39,15ca31e,c83c6541,c35a294a,a648af8e,38870757,27924e98,8ef566d5,96eb519a)\n,S(65fd300d,9a0503f7,80a0dbb7,c42b9bb7,37f9607,912f2df7,166b65f7,96d02eab,fcd15350,84fba852,11f94540,1f6b43f2,904caf3c,d44ecaa5,335b928b,4ea3b5d9)\n,S(c918b3a7,6c847ce1,c01845f0,34ccbeb3,36d031a9,33093f99,f47f1458,cc02d148,f256f403,dbbb2e20,32063270,faa6e62,596329d,ca85ceb5,3ed3adfd,7f728568)\n,S(6ac2dcfd,2f0b879,becb429,140ade0d,532e54d4,dbe0bbb5,c1352ace,5661817,f2c26310,abf9396c,5af23074,e72251c3,784c3de3,60466dc,ccaaae16,4a9e2af3)\n,S(8d71c4ee,54acf389,cee39b94,b5feb2b2,cf8e95a9,45f6a95f,5b0bff2f,cb3f3d19,98442bd9,5a02c1c4,7dba3881,e3306103,f0bc8857,89b44cb6,54875847,f1ce52d)\n,S(e8bd24d3,fd557118,f2c0abbb,511e874,2e5d7368,a909b072,b3dee124,44f583c3,e1d2c3a6,e28622db,65b7992a,6716459e,2380285a,cd60f43a,4d4b1bf0,8bce6538)\n,S(62dc2975,5cf8cf89,e52c8c51,6311e3b4,483fd024,ab2ad1d0,32d7255a,3c075217,799e132,d80d22d8,e0f01e9c,d0954251,8b3fc8a9,48f3cd1e,9391f8f,5c0e2a97)\n,S(37db13aa,cf727e60,cb102709,9c7d3c07,4d43234f,66a95451,a6050496,d44c0e13,c383bbe,8f8ceff4,196e9d07,e013a1f6,d3402a6d,d09eafb0,62924334,89b1066b)\n,S(37bfb765,eab7719e,c858e17c,472f1df1,be9dc439,2699ec39,37875b30,fb2aa1ab,72718bfd,865dc4c2,2f935f4a,98af8ca6,5cf44b5d,66f0eea,23b53563,d1721364)\n,S(433ede12,87fcbf35,5fdba6e1,f62148a7,b5d5c3fe,1200d456,6dba452,a85d1b94,b27c5613,ad6e513b,28f0c959,13e30781,137a4c7c,7aee6e60,5715d949,4757c20e)\n,S(e582d9f,c5ed0de6,92a1917f,6ab7df46,d23295d0,b8b27b32,3af9a57d,3e671861,33ee8785,e2770dbd,7e79faa5,386cb1d1,d1c9e073,1b78dfd6,5571deff,d4073154)\n,S(60b07b40,634bf15a,ee2d4e5d,a0f06ade,ad8fae01,4a6a189e,4e428600,4c9442c2,fee087cd,d243ba,62b4a2cd,68d8aac5,1557f29c,a57b0f37,ff2119b1,bc4b283d)\n,S(4b167276,1e5f7ca,a245e35,b6e88fba,643e6da7,ce37c9b2,10265ad3,2de03100,28aacf02,476887e0,90d26c1d,cd51f15c,cacda02b,b6314a64,73b90c93,8ed8dde7)\n,S(5d56113d,6d797e74,c4803e63,89a88ae2,fab97de1,4ed4e7b2,a17d2f9b,fe2a3170,94ef2a8,534eb2ff,a62462a2,7eb2b34e,c6545992,e2d973ab,ee42b1e7,d9cd524f)\n,S(a9d03fae,75111ad8,d1157287,8e8c4473,f4a06cd8,f28dfa7e,e38b3d06,3a34f828,a0733c0c,c7319879,2ca665bf,968f6bab,480c94b4,c7de262e,4d9d1f95,33517881)\n,S(74199571,2b1abce9,ed4db3b7,7b3f7e70,58fd3716,1666c522,50855f25,660e1ad5,710caea8,97f7589,cfd3b8a3,22726000,ea3ef2c1,8aac385f,22b67bd9,da44db)\n,S(9f16990d,bf81a5b1,eeba1e5f,84673e16,ba0106f2,acc68be7,cabab96f,25918dc8,d60d47b,62321042,34c49d39,c03806ab,135d46f1,ea6587b0,f0b6588c,50ebc4f5)\n,S(3b5069bc,4f12b9a7,ad91c888,fabd15a7,c99143f4,c8b24619,b6a70c0b,2301d57d,dbb87cd1,ae59a944,9fb4ddfd,4b311d66,da18544e,a86b75a8,979828c7,fddd1a79)\n,S(9dea63a9,67b5a36e,bbbf9af,bbfabb31,f90cdcd7,9b75c68,1159b946,dabaee90,b14bb99b,11bab958,e31a605c,e9180d23,5c7d2eb,94d4de57,b8a66627,c6bc4464)\n,S(d0b23392,1da36a84,2565cb53,4411e63b,9fe6b2c,c33c3a18,8e0ddf48,55e31e79,80ed93ea,1a6e5492,dcaf1cfc,c350b3b2,99117276,43fb6a75,15c435e5,f74f8e9)\n,S(8adc9655,966ae44b,f98ca7a4,9f441e3f,acfe85c8,f7111da5,52c817b3,90b03d20,ce72054c,6a717312,180c80ea,c9337430,5dd1d566,db1b93b4,eed1a6e5,73c0021e)\n,S(f6f76bf8,cf6d3dea,700800b6,d018a4a6,141ac610,e2e13fe3,ec916726,1e0c1670,b2c478af,e1ea9876,98e5e2a1,6b3a4ee,63e4fef7,6644da54,e241c395,3f9a302c)\n,S(d58287d,38b7da30,174fcaa1,873b3913,2176388d,6da5f9fe,f873d86f,14b898e5,785fc934,69ed085e,8318f91d,114ad0cf,da2b8ff5,61e545ee,3502e9ec,6afc8402)\n,S(7772ca23,50c5ee55,9ffe810c,6d8702c1,538e3d11,f4b8354a,2fbf674,39a3661c,5a2312de,853fda14,5b48aefb,23e98e4f,fe3dd3a8,ae1fcd6c,931d9a43,686edddb)\n,S(a2f9f976,c50f3687,7ad0ac95,efc3fb2c,46ce903e,76ade308,69705df,72433ad5,ec565311,24c289f3,35e11b22,bf8d7445,f201dd4b,68afa38a,22af056f,c8c285f3)\n,S(e20d9765,85f8c567,24d0ec16,5ad27110,26fce166,b52ce11b,cb221a80,4f8b15f7,63b61933,c7f63862,98b48b6b,c6abb54b,21d08220,166ac31b,fc85d4dd,998f33fb)\n,S(8868b59d,ca1de2,cbe98d94,506db1df,659ba688,b2bf093e,42dcec03,acecc18f,f02e9b07,96b98fb0,51dbfe8,4524ebf6,dea56251,afb53076,e2215d83,fcf2fd0e)\n,S(1099f82f,e32a1361,a785f86b,9a6bf0e8,99c83226,7826d6a4,3f8581b8,89fb677c,13fb83f2,9aa7f271,2cf20cd3,592eac46,cd2d3e61,9afe9aac,7fcf37d8,9c44445b)\n,S(4af9c696,77ece7b3,5f732969,8ca61b27,deae65ca,ee2d5d31,ef2051f4,35cbeea3,73004596,429da976,f96e3f80,a24408a4,ebfe5196,8130c698,5b210826,664e5ef0)\n,S(9680cbca,5aceb8b0,322d4bbe,8713cab9,300d1f8b,d16ee045,edb3b543,57dab473,2f293940,e36ba1d2,ecd4697c,209b33e0,6904ee3c,2798aaec,e9131d9,bd0df58a)\n,S(7eefcc3a,fd6347f0,5f9c3720,31480c92,3eb7fdfa,d6e9c0ee,4e2db9ae,27fae7c2,b8e9fa75,4f745c14,7c753e42,17bb1e28,7bb93d9d,aceb357e,9738f10b,fb5cac06)\n,S(b823156,d63612b9,3461fbf3,6894955d,65e7805,b025c2fe,98fd46fb,2f9fddb4,f23c517a,826fe91e,45f453eb,fe9eadd4,d0b537c6,a2a8f60c,dab9dc58,10bd465a)\n,S(e801d35e,2035fd54,92178706,e2e765a9,bfb9de22,e89182b4,4d5144d3,85bdadd9,1e648234,27dee6f0,818868e0,419e37a9,1c216200,3faa7478,48161809,76956a26)\n,S(e9d4610e,56b70969,284369e5,7e890fc,29fd7750,8489a1c,2f348f52,cdc67f3a,8e5f6aac,357d82e1,a29bfca2,2ee4516b,1df0e622,257c2c1f,7d9a84fe,b48e4a0e)\n,S(71c3ef0f,51d6ddee,340d7aa0,94680084,b94bae8a,e3528ff,4a481af6,d3b7609b,4d1674dc,2f8087a3,138adc4d,aa615a43,db6886d4,4992fca4,544f57e3,315f6b96)\n,S(9567ce43,b6f5c41f,bdf8b44d,938abac5,21aadb83,c157b947,ce999c0e,4a7d6f20,c9d86317,31ea318,a647ca8,945cc35d,1fd0fdd9,b2de4fe3,5e2a0021,33a35538)\n,S(34523d4f,81166739,10b3de85,11a1921,4f8fc753,fd8963e,b9db22b7,8edcc141,900fb9fe,268b88eb,9b80a066,277d8ba,877bca84,f277dce7,7d6e90c4,8422ac90)\n,S(69fd1f7e,5f1c43df,a2f4350b,f20e5cf1,f2993dfc,b61cd278,1590ad79,e3c1bd98,633726cf,8b74940a,edb15665,a9277973,2d1c923,2bcdd615,43c9f3a,6c51d7f3)\n,S(e4c2c424,c28cb8f7,3146dd39,bb4fc6ba,411b2a75,e317faa2,a9f878af,e94a3de7,fb8d17e8,468e5ef4,8da60739,820515cd,c861378e,9b3bd158,fcc8a949,eb21ae89)\n,S(5710459a,ada916d0,9c1feb59,c494863,98e44513,226119ea,5ded7b1e,34e32773,89deedbd,d2d83a58,4e56b409,30a8355e,905bf12a,f33f49f0,7383eca4,e63871bc)\n,S(d56faed4,171806e1,5ac17f91,37101b27,59a3a8a9,90b85bc1,89b217a0,6fd48e64,fa871ec3,3408b2d6,b62f513f,5368f549,ebe43977,a48878c7,6d731447,34a6652c)\n,S(e7416eeb,da0b805b,68b47be8,eedf87dc,cb5cf012,804d03f7,604525db,aa599bcb,8610c716,f11c567e,313eb4c7,77e4314b,533d4f37,13b11185,bbcf5442,b9a56c19)\n,S(8ca59862,ebdd3541,91c60608,13ce32c6,a4fbfca4,6e60175f,2d5f1607,d5fa997d,aaf3480f,b132feac,6adfa195,2b14d0d,113dd6ee,faad71c6,980d5691,e37698f4)\n,S(6496dc45,1fd43b45,1915867a,846c5203,6eb8e4c5,28c2a181,72fba6f1,53243413,44fdc41,f85c99e,e00a281b,9292cf1b,153fe2bc,5c8b3e87,cb14d624,e44da1f2)\n,S(3a424463,aa82416a,a38bc248,dcaccd20,67d20721,d4e8f5d6,c9cb2fc1,91925a5d,71a56463,fd242591,434775cb,37c81bf0,d4857abf,aa527ca9,c3178464,8afa9fb2)\n,S(6a945b05,51d55194,adbf7985,aa85fe63,8811781e,6b787418,1574d109,d178c2e6,186d343a,1ca3a836,32421fc0,d267ca27,80df9af1,32625d31,924e99ff,9b57ac44)\n,S(13f1f692,682d04b7,b7e7381b,8c5c13b1,32baac0e,b7f8c8aa,c9ffd77d,3aadd47f,572a05e4,9622ff88,9eb36852,85d1400f,43372533,38c47ce2,282aa4ae,26e99f0e)\n,S(79fa13c1,4f0de8f1,ed98e7b3,3edb77f5,a2700707,e54ce522,a516634b,d2804330,a094bd88,e1969ee7,3f41e40e,60f7198,cf2484ab,5a2efaa0,96e891ee,d5987c65)\n,S(df1ff6db,d2c61bf7,c273f735,a6dab3d,fb08377d,bb3dd101,9dda03db,e533130a,2fdc7ad,68c58689,92e5c969,d8d14a94,cd0061b7,5ab0e824,fd19611d,923f886e)\n,S(a8223280,5f5939ad,180f8776,810cc7,2bff651b,df7972ec,51d86d2a,1acbdb34,9681590f,982e3632,b2aea9b4,40043751,e7f2ef2a,d4b125b5,2784ffb5,17c2dfba)\n,S(406b0cc0,49f3bf58,6990ada1,63c73932,b3780fad,ba3fd8c4,79e6a688,484c7c44,aab0e4ef,f2508e54,79074fe0,218aee7e,8b217932,859192d3,1bb20817,df6503dd)\n,S(4e7043fd,5783479c,3dcf103d,bc4d9bc8,523c81ea,dbac9460,4b73300c,f516bcc8,196287b7,3ed01bd1,e8033ead,66c92625,77c859b6,73a4c7fa,98f53d69,e82d1133)\n,S(a9a2a671,b945a5f5,90575c0e,ff24c070,a7d55b00,e9d2f44e,43cf400f,f3e9997,6cd45e20,cb972715,167f957c,af7f2f3f,9ae22ce4,3b46d4ca,5b2a58db,6e0c6285)\n,S(692a1394,75ffae88,fba47ae4,9315a6ef,12b2dec7,6807608b,22ba3ff2,883d3c01,74dd5b4a,3c14a54,c0a86732,1a77d160,c834773f,8063406,85a65c16,6ee46131)\n,S(36f915fd,156638bb,88928e75,d00fcd49,63b44ac,f5d016e7,7ddaa8c8,d62cfad8,3f11eb6,16edd183,5ee17d02,722cf6de,991dc8b0,e37fce3c,cf7f5db,e842e8b9)\n,S(3f0f6f5a,7e010c0b,5442fd6c,a3643144,a5202a7e,bb3ac8f,99aa38d6,4aa53b31,2574d7cf,5b33e29a,950099ac,db0ffb3f,ab1f9ed7,f13cdf9a,b869fd07,c35c649)\n,S(8c58faff,71f661d,b21d4258,a92aacf3,508a9dfa,bfc00cfd,26b95673,34b7b067,38d1e894,ea1d4ee2,843d08a8,80b11325,e9a8a171,59de273f,694a14d6,73944893)\n,S(d806731a,205c1a3c,64b91864,2d940b12,dbc6f580,866b7a9c,f287fb7,c5da78de,870a8430,2ff57abb,735da831,863525fb,70402006,d241eba8,d43c2ebe,cdd0e05e)\n,S(7dbda37e,195db041,a4dde151,5a7cdd97,416bde09,12b9a741,3354204e,2b848648,83c89c7a,649d0070,fde84ff1,32f60a9f,e1c0261a,87a8ccf3,885fb003,10715e71)\n,S(8afc23c0,c803b0e2,df78ee09,3b776cfb,410a1b52,7d4be45e,58d8cee8,3ec54a1,b041eece,4f4ae4a0,b3a52957,386394be,bf7b11a2,b97eb5b4,1bee89c,352ed76b)\n,S(4e4424c2,2c50fab0,4b803b4b,2562114b,1b2531cd,e5786112,36fb9021,3652207b,22bf6181,51187118,fb421e4,fb0cf243,889d5ca5,c14b6ab5,7e7b9d0d,d9796e6f)\n,S(60717788,5a230af8,a0816e39,6e39b34a,f394b1ee,c93ba382,8fd92941,e6e97453,a84df29f,2b9da41b,14f24762,df6db87,fc0a18fa,89e356f4,9f8f4017,dc4b26)\n,S(c9f73d20,384e56ec,37bbbf8d,facf70e4,a271f169,2dc22ac,6022ca24,8caf3213,7622e7f4,c77f9581,b73c9bfa,8bf5b578,89070e8b,97616cb0,69ea25f8,8dfb5437)\n,S(19ea5dfb,dab5a1d8,c3c2bfea,48d90f6d,a8b9959c,630bfc4a,81ea5eda,ee45282a,c21295d,14bd81,7c3a4d62,af307b1c,870a959d,7d6e4c65,3b8e1db8,fdf1d56c)\n,S(564bdb1e,30b2c292,cdf0e149,1bfaf852,4780669,717de5cb,290cbe6d,c1617b58,9a8da0e8,6fc0b95f,99e84198,877f5ddf,32508c1c,ebb9984,7004f74e,7e2b1c0d)\n,S(5bc93842,4f3ee6cc,926e2123,7bee0739,50b39d1d,e0dda3b5,4bf46953,7d0bf06b,d4e9c3a9,662778be,b7f4bd4,cd753a50,32bb003b,694b5e00,c119dea4,20fd5d16)\n,S(19432e94,829e8b57,3eef4fc3,181c7d7f,5b2a5f2d,a2e8c3a5,980db9bc,5cb7f99e,f75c999e,5c5b8567,bb69316e,36e01acf,2e860781,5c5703f7,a4be72bb,9abcbcf6)\n,S(d399281e,6196ce19,a2ec28bf,a0b1b559,8d0235d1,beef1672,ea230cda,20080b8d,1ca7e95,20ffce3a,33e94931,95eba433,d5483cf0,d5edbea9,6384d1a3,5168aa19)\n,S(6c84e35a,b220fa9f,e55f5556,302f6656,39372e97,74ae26ba,e21ca8ea,10e73c88,98a11b2a,bd442c0a,d49711e7,b0e8b234,1d15465,71efe9b8,9a7b4c02,1101b2b3)\n,S(7814cd8a,b1b045ed,a1797f14,c83bd807,ec4205b6,e9df4858,1180a80c,a0f8f64b,ef917e40,edc8b8ff,f53e8b70,4de63adf,6bf17730,41af2284,1b0e38d3,b515f33b)\n,S(7a01ee83,1c8e22a8,bfdaccfc,cd280532,444e710d,7138b993,fb6e06c7,996235f,fe512d09,19895c2a,b62f2e08,90dc3bc,dcb06198,18160b41,4527e7c,281a5519)\n,S(655ee6bc,df86c9ef,918b5660,5d4a5e79,512e856f,3f3e40ce,72e8217c,1f9bd908,cbeba5a6,91fcb085,f3996ea9,d081e69b,7dfdefba,123df5c3,cae94f63,12f87721)\n,S(ebd68009,fb0372e8,eb0be25f,e78117bc,3d4d4814,440f1d9e,1cf87ee1,de5219bb,8efb7e38,6f96df55,bf0aed2d,6bdb75f3,6da8cdb6,ff65868b,d8ce79b4,ba58814b)\n,S(87340818,9ac05bbb,4e95cf05,17d5abd6,8b7834cf,1168f914,9f1d63b6,19a3865b,9f1fbd27,72ce0f15,c91d4dee,dfae0a3e,7d24c0fa,de2bf30c,df63f93c,14480838)\n,S(61b6b213,b02a7bb6,4de62e92,515690cb,5dda3a4d,aa96f68b,a12f2c63,30513df3,cc71b8f2,4eff8194,36ad2962,8c003a1b,c42c6ce6,53997d56,e0162508,c2b6144e)\n,S(4ba7ee4d,77171ae2,e39c9e66,3849841a,ed5e02e2,182d872,98f0a064,3925fe37,5cdbd5b4,fe344f16,cb72158e,b80a726f,5a9da4f7,751bc4f1,f1fdc734,8e96dbd6)\n,S(d5827a7f,c4d5dcd4,32e5bd7a,46892e9a,6f9a3971,fe9e1de2,ee247e6f,208badb7,f790fadc,9d0e0c0f,61efb534,9b23c60c,2fb667a6,3b52cf18,ca0f0a1a,6098e1fa)\n,S(81ec5159,7f950cf7,c0d44d4a,89efe691,e9086dfd,ca25098d,411cb9b2,93237633,885b27dd,c9eff80c,94653f28,ef92fb60,741d3a2,aa828065,5fa60b73,eb9a1e7f)\n,S(28fc41f4,a0d4f680,76a3e06d,af0aff1e,6e723779,d8ac9e68,4cdba2fd,6ab6dec7,b1e4af1e,7affabc7,3eab9415,c15b235d,482c6a8d,b1085f54,d80ca2aa,49657225)\n,S(d5e753d6,c5bf75c7,cb0f5b85,77fa2f9f,6341a88c,cf59b5d1,328b18a8,f7ae4f47,d1aa54b9,8eb01a32,2518a10c,8ecd66ea,fc2f380d,d97953cf,faf0c540,c4a1bff9)\n,S(1682355d,89094297,e6008fac,44c1a5a9,257d413d,7589286d,8bad4873,1476e836,4f69c762,e29f90c9,e8459b11,d53ed84c,2ec9c2d9,ded4ea02,78d04546,eb09cf4a)\n,S(9ef7a85f,b64cae73,2eb511a7,8cc46e22,73425d1a,d02272e7,9030240b,23e781db,c720356f,6f6a5a47,3f35e2f2,f5e92e2,78a50c9f,3a77604b,3eb3987,d09ce73c)\n,S(4f6aebb3,6f429a52,4cb1be48,ace0eaaa,2174468,c13cf612,dd7ec70a,2e915ec,406ad94d,a8b6d790,2ad3609,252b6d7d,b28f96e,8780f6c6,39620b11,cf8e761f)\n,S(4cac3e0e,5ac02e66,66710dae,5c0d7e8b,7a3cc7f1,a42b1f8e,88561bb,223f8232,9396ec8e,aa96f3c8,4ffcb9c,d8c29d27,dca65556,c2fe5931,8ba05a08,cb263142)\n,S(86f3463,3aa2ac57,2c4a9dd1,64c7606,f61fbd78,60619937,38ea0a60,f79367b8,c802fd2b,556179db,5f776c9f,db4c38af,cfb2aa61,b5ae712a,3f23e58,25824f05)\n,S(5323f145,7685e123,e7a5ab4c,d1d39fa8,bcd6f23,ba3d74da,318dc7ff,347103a9,3092fb79,ecccb29e,12dec977,cbbf38fb,94cab4f1,fee1e8e3,46100378,88691cb1)\n,S(d3d70d46,402711c7,e680c45f,3a0e1c5f,f85cf106,983ff0e7,1a7f1178,33ea74fd,91982773,d9b90f31,16893b9e,eea7fb9,e4f722f3,e1577c90,fdf6f625,a8d07bad)\n,S(df63b937,28a87613,2db5d71,43654f1d,f8cb89fa,1ab1efdd,6fd864bb,db6d4359,7c3b79ca,191a3ecb,6c793034,832fa5b2,a2c7bed4,84b792a7,91bacb7b,62ce5510)\n,S(f1fe9222,8cc334d9,5f303169,a4e2262b,28a99494,c7decec3,9746be85,71b70c74,5588f3b8,4e65fa72,a2b35f60,f99af1e3,b67a2435,8c28eb64,69de5136,e751a10e)\n,S(9030e75d,918ca330,edfec14c,b7cb28d0,fb0adbb5,fa29fc7d,cb3c9085,ba74fd95,7df20128,61698984,c0928821,c38aded7,5a452dc1,3bbdc4cd,71ad99da,38b427f7)\n,S(1cd3c139,35bedb87,134f628c,576411eb,dfa0b586,2c3cc7d5,ddd7cf5c,77ad641a,2154edf2,5488bb08,be93a25e,c847b26,88264cf1,30fabcf,5924bde1,4b9a324d)\n,S(e56e0737,a19fec7c,78b9f462,1ec0d5bb,bd6e91ff,ac995f42,202f127d,2446ad96,8830d827,368c760e,40a8d9bb,b693e975,1e69b42f,4b2ed776,98f889aa,3ead70d7)\n,S(1b0a6ac4,58abe5e3,63e6dfeb,24ad8a65,56fd0886,78086657,587e63f1,5fb6b101,d2df6fda,e64263a2,b133e5aa,bdddee5e,9a35e86b,2e1f5926,5212cc49,335178dc)\n,S(10a14146,8fd4618e,4ed390a6,246d62a2,50bb1676,45cfc679,d80cc081,23ea22b2,3383b868,dd7fdd1a,ecd13dba,f4ebb151,f9a09b25,bc30d562,b033800,fd40185f)\n,S(9dc4ab51,5378a351,6db8837e,568afa72,e357f7d7,95d546ac,8a73e419,a43f5e35,8ddaa2d,9bcecfbf,e2a422be,1ea591ee,bfe05ce1,90439a06,cc68d66a,6305903f)\n,S(aa93175d,e7a4e1fb,c538eb19,e89b20ae,13539e99,362035de,1aaac76e,3ced7196,edcedb04,c1344568,9f3e133a,d8b48004,c18d146b,ece3da05,effb864a,c2afb9ad)\n,S(8171f3e4,da02d9a0,8bb6fcbc,6d06cc6a,94f3cefa,35d4ce27,536ef6fb,222edf7b,e91be5fc,aae62aba,1c02b55f,73c1a64f,c32038b7,a658f189,7499ca59,e9e6dd6b)\n,S(51f6c983,c89128e6,635888c9,3c79cf79,893fe627,437464b1,11b08058,1aa19ab6,5d2ef149,4bb164f5,20c1dbf4,1a8dc650,b8cee400,d5e37252,a3d0f059,3881a067)\n,S(c0a1f184,766b30dc,6a5016b1,9db0dda7,ec34dfac,74dae580,9500ab8f,6fd7d38a,bdcad3e2,c7b6daf1,29d41051,624d26a9,b27f361e,c695d490,52893597,eac6f01e)\n,S(b1bb1ecc,95435169,4ab6fe0,7341efba,fde9279b,1eb78a22,2bd39472,33a0eb02,df523f5b,525342e2,c0cdbf0a,671e0c95,4b149084,de4c61d5,5a7bfab4,c81689a8)\n,S(b5cc30dc,86d04ed5,88539ea7,e437391e,3b0891e7,6818c470,1803de7d,640b5dce,f1cc0d9e,45c7312d,fb1acc8,62e03f28,9f55561d,fffe4b65,ca41e62f,42d4ec14)\n,S(de2b49e7,5f0ff53,28155b3e,a7d5941c,8cacee23,51fe16b0,da8e940f,9263ccb6,34d7a42b,b12dbf67,b0d7c680,178154ae,4690d5b5,703572ab,74b4d93f,6d8de99f)\n,S(8b18f4e7,c129e117,e898404,65870cfc,ea5c0db0,ef2ef11a,d515f3ce,57cc8f51,6b1e1086,c8674a59,3c5e9d6c,dc8edcb3,72281c27,e6b2caff,8842e008,99111f37)\n,S(727162c0,27cec888,918e46f1,762a830d,822ce424,b6a5f442,f9e582a9,17c86889,de348296,1452a369,e6fde5af,693e5247,24865623,cc516e7e,8416f38a,2f223cca)\n,S(4ae4fc1f,4dd17483,f18eb9b8,1c2494be,946a75fc,a3f61605,6d0856b7,3505058c,d87e7812,e901fc17,da034a05,bd878470,59999b36,e2c617a3,9ae46921,f2563e7)\n,S(e90bc9ac,e9e873fe,91826f01,66affd02,72007bba,4ef690bf,58b15206,5ff43cd1,4bc820e8,9acdfd68,51c9b0c0,65b9bfd,47f0762c,d2e56d58,905e6360,4564fa87)\n,S(ba0ae6a1,db432fb6,f7a1af7d,be9ef746,8340ba5,7f051020,9af4076d,f51450ba,7d3839b7,4099420,1729894c,51a2c30b,51019a18,c32ea908,c58876af,912be720)\n,S(70661b81,f77c6531,1d98b403,ed7b97d7,4f9682bf,2981fa5d,ef882022,d3accfeb,9022b973,18959f4d,9ae4bd7c,fb06fe66,7b4eeb92,5f46677e,4e5bc4e4,a6d06387)\n,S(fe1b7b47,28153a07,11f81b81,7d9efa38,29451c15,8d1f11d8,e5e0922,fc471a47,95a075cc,68cfb7c6,fb115dc0,5e4c31aa,85725bdf,2344dfae,19c8a034,d2b0f847)\n,S(8acf3bd2,bbaea907,28013d04,f27e3a5c,4325bc37,ec5c5e86,7ab70f7e,9acc3fc0,f679e3fb,36da27d4,f29c06a2,5951f80d,b3e2e0ef,dbe2c785,ee148657,3e16174e)\n,S(1d855d37,25fc7d5a,b87fc6a4,7f62ba7c,d2db01d1,ca0f14f,1d6ea8d8,4af395e3,ceb263ac,2d41654e,d4655183,f6268c5d,9b0a9ad0,da8912a5,815dc8d3,20b1b90)\n,S(1abb4566,30c24ce3,c84ec6f6,d70d19b7,9934498,451f02e,3926d70,592a8cba,4627706f,6be87fd7,2ad886ef,73245452,1778d293,41229863,f4b19548,74525885)\n,S(1b4790fa,672c12ff,965d07e2,44a3f30b,620e5c66,4b098a5f,b86f2bea,93eac036,eed050fc,a758e2d1,f2a2a9a0,6b8391fd,7c19fd70,9c9e1283,1b018d24,e7edd60e)\n,S(61878b2c,fc9cc88e,30ddcfc1,2561367b,44c106a0,21e3dc98,a433732a,68de3dd3,fa2454a0,37c279d,1b54cb77,498a9efb,afc6f50b,6b13e29d,436000df,1eaed78e)\n,S(84048df0,2767feb1,7bcc21ec,f4502238,abc7271a,931730b5,3354010a,8544308a,d4712e4a,39d608e5,d47f9814,f7763c6e,605accaa,438ccb7c,838c88ec,e993c32f)\n,S(eb7ac4e5,6c96175e,c3f1e1e0,37e89f95,8ba37d0c,a88055cf,889bac33,ca683a94,4941e267,2ccc274b,6d8bfe07,513dfc6f,cc07de33,2f517011,2bc3814f,5e85da8a)\n,S(48a36ac9,877d4bda,b62b452b,a0288dc1,4cbce455,3809feaf,1a4195af,22142e91,e24d6d8a,1256288,6c6d8848,4e950d8,27eec39c,21ff6e25,30b50eba,ab69659c)\n,S(9c3125d0,5a62a25d,7869af3b,1b23a00e,e817b664,c82d2a91,2522ce16,bccca1b5,c6ecda10,f6707168,18417277,4e18f5f5,38566361,5506b450,a189b6bd,39e5afe3)\n,S(33e81e21,dcc7670d,c7f3843e,4dc8be3,10160bed,49af116b,c2ca91e6,90f80d68,e694c1d3,a0a386d2,e6df1167,8efe38ae,9ce417e8,9ec05bb8,fa592906,55757b6f)\n,S(9543769e,6899e0fc,bfeb1071,50959827,5c1d0d4b,8a68f056,d8e1c033,1b6a1ad2,700cffd,afc58410,7635f148,72ed1ceb,1c4be86,7f668b16,3f579534,ec9b0d7e)\n,S(4f41ccd1,73e62c39,7d481e6e,5b50807e,6ca9b163,e21dc203,a0d50826,7439efdd,fbf98ed6,aa8c1972,d88b309b,ab74b254,8fea56bf,e158d1ee,d95ce77d,c69f79d)\n,S(4cfb6a45,584b00df,be3fd9c3,38eebc28,a667fe6a,4651bbd9,64ecf20,645f12e5,2ddfd6da,fe080e87,470fac21,d1255900,219638a2,5e72b12f,5501921a,f614652b)\n,S(9efb8bec,d9bba33c,a5e217fd,8fae533b,8e536bc9,1817f982,1f217757,75eca626,661300ed,529c15e,918bcf9c,1a7dc3e1,8e3573b8,875e2f8e,9440f8ca,b0658fb4)\n,S(c2a80952,5be7e4c0,b85ab953,ebe6dc5c,f5d3c0f9,e850e470,da9e61da,e430e441,1d2ded36,bf72697c,7da6fa22,1c09fbc3,6be06363,d50d277b,4839c4ef,809d9d2d)\n,S(42b7ff6b,49ae822b,f5a16276,4c620b13,2501a1b4,1bf830c,a242e02,3bbaa707,e41fe058,83f0e400,712de994,dcbb5a38,fb2c7595,c5ea8b0,eb90a236,82b71d6d)\n,S(ee0bb129,d420b641,2afe1518,55f78f39,e00cc3b4,7ee3b86d,f781f0e2,abb0c28c,f71d0e7a,5a4fa247,67c6204b,60edbadd,54b17455,54ae9099,258343eb,5c0aec61)\n,S(1f1d8a07,9cdb3bf5,2671a716,26c503c,77546ce4,2a252e78,9ca487c0,78ef5b9a,c611130d,ae55512d,ea8e8e6f,9fbc3064,180ee4aa,63d1dcfc,5c39e98d,97571c20)\n,S(5bda9c06,ecdc9fb1,5926ebe5,5418f016,7cf3136e,5f9317b8,b2912fec,d2a31310,358ffb70,dce1260c,80fe59d5,b72eadb3,89076168,a17b63fe,b728dc28,45ecad7)\n,S(c32f6503,fa50c727,66652dec,8e0efd71,edc78973,48061be9,1f847544,df866ea6,67234a26,7a13ecc4,7b09443,cb13f0b0,6a34af2a,20b80856,6deb9c71,1fca304)\n,S(5483d511,b71feb06,70e6c83f,29612640,849bb673,896bb069,941cdea8,9489caed,a09a6a62,d3233437,40adf0f3,8d8e4ddf,494d5350,7944becf,bfed3927,d88c1148)\n,S(3d2d8f5f,f0b86ab9,1ecb9342,5a6cc246,d5e3c6fd,9c43d047,2d518958,ea322ef,4188348b,4c23ce05,1879cf4a,b71d7608,fb45d7ec,a184c509,c739f364,d955b830)\n,S(3a5c3939,29ed6780,5fdffa9d,f936bc10,735ddf03,aab89e9e,40b47574,21af1dc0,760b1919,76752916,2ac2a7de,22975c83,44dcd52b,a945c81e,dd8224e,90a7011d)\n,S(a3d522ac,7c1cc06e,3ef9272e,fe24a0c4,64886948,3373df90,e5dd484,d4590a83,6f53ba2c,b739dd61,219684a9,50001697,28c377c6,93054795,5661f2c4,ee1b6be2)\n,S(ef0b0931,13992018,44078583,62e02aa2,c1437d87,ddb95d42,36751445,d8e8180f,73bf4407,8d184772,7d0408cd,f92f8c74,2173520a,41971980,1b9c842b,9486c634)\n,S(8140effd,1498ceb9,c2211899,161185a6,a770c15c,d1ca3e07,f26f40c,6d15da20,4c74f3df,6d2db7f1,be68b7eb,2162f03b,51c1102,a02dc3e,45fc49fd,22a474)\n,S(3445d720,8e089f1f,93d32f4d,3fd6fd65,7603c7f0,378b74,215a59bc,ebe122f0,6d41035d,fdb54ef3,3a3c8626,f036e1a2,38da0637,e82953d4,b63e23a4,890b6d5b)\n,S(e14b2a5a,6235369a,1d1933f9,7124cde1,789a366d,5fe6ab9c,72c23d43,f7a58cd7,216f06c5,2f63c102,6cafe6ce,58a9e589,d67a9f19,625513be,44744d0b,f9fc8f8f)\n,S(6d9640bc,8389bc44,fcd0b2b3,3c088170,eec93106,67348dea,f8f3e92e,2d891e0b,4b4c1485,6e42db64,9fe04759,a42887fc,68b5d4b0,8161b31a,1852bc41,7d04227d)\n,S(272f1404,5c461f21,3f67cc60,d7c03b1a,fd028a05,b9e06324,62a0afce,fd9b2916,98635ec0,c0b23538,a63f78d,800eb0df,fd6b7583,31544b1e,825cd433,ab348416)\n,S(a8c99928,eaae745a,631250be,cde1ce3a,4152334e,de916257,681329ee,1f3a07e3,4ccc2686,abdf3f7e,8e1149aa,5162fed1,24ae51b7,e61e4620,9f5cd611,e7351621)\n,S(fb024b33,7f93d565,899be686,9b1e4c81,1c660d50,fd31cef,fac38600,d8975409,339686b7,8bff3c95,7e8730c3,9457966f,ee562ca2,89d95e12,7b072f47,c4c7fdb0)\n,S(e0e48547,aa613549,773ecfe3,691b84d8,a6cb14f9,ce4494f2,35187057,28562f9c,60b6dd8b,56407580,52748838,9396004b,778609f8,69f47676,a6d76eef,dca7b307)\n,S(bd6c402d,378b8b53,9f74d29,605e1b0b,ed9e383d,dfec2169,8076ef59,125d16e4,cc3aac9c,bb761c7b,3776a8f8,c8c6d2c2,a276924b,79510f10,75521b22,9def2c24)\n,S(e6919231,eefa4f44,144e2c55,4f695235,d5886cbd,e150aef5,52c217ac,5e451c0,e74ee1d4,d34d2612,b4d56133,c2a11cfd,73a888fc,6927f46b,c2aba9ac,63b1cfa7)\n,S(1a9acc6a,2a487874,4d92ac5a,328bdb3a,37c481e,8c145463,f9cba4a1,a03d03a9,ba6069a,960e3628,fae22422,47fe1f5e,df71fc81,b49b5ca1,26a7c588,fdf0fb10)\n,S(5b52bba9,2e5fe301,f2c4e939,52db99b8,abfde642,3d6da8d5,36ccef4c,f6070910,108ddbdd,901e227d,118c68f0,a71aed0a,cc1ab1b0,2fe74341,f546ede5,b747ae29)\n,S(92c13760,1ebe82a9,b11a096a,73be2828,652b0a4,d7f9a286,f1338a6,b1e05242,2e3e93fc,2dc6d0fa,5d43dd57,85f6c79a,51a588bd,d14e0275,59fac06c,a449d7c)\n,S(3cb6f8da,79964c17,73a1c749,e89542bd,94b4f279,f6061d69,a12ffe5f,1d4318b8,42e4c1a8,b4f45ad8,dc23bd02,faee2956,72a77771,6e6b1d54,d05ba413,6bb11956)\n,S(5fed6351,d34518dd,111a5110,50de0e5,3c60a14d,9a80183f,66415145,bdbf5db,6b79a590,de07a4d0,b74140b6,49bd8375,da77e01e,295e76cd,56a6588,7746c3f6)\n,S(2b88f0a7,81c384f2,b7c245d3,7c061128,a14132b1,fd0fb56e,7d3193e3,d95d3840,f787e7a2,11446e57,655b6453,c2244974,c1632bb9,4838a981,bd4873f8,89a0e10e)\n,S(c7b247b1,5a3f55fb,35b0ac3e,1da36719,18507f94,e988efd2,47bb02d,83293443,4ab40437,34c65f11,236b6ac8,bc27c548,c3c8e5f6,64f3cb67,99e7b8d0,6db85f4f)\n,S(ddfda933,8dcb9481,5c08a20,12c137e0,45df69d2,121d4534,4c6aa375,e03647dd,e95f79fd,2a116bd,5972e93a,c58712d0,95f91255,a46fa091,bbcbfe5b,57795c1b)\n,S(dc8da645,5084b105,6c7e3233,b247e87e,9d15a6b6,677f8c29,da04fefa,371da7db,c2a345a3,fde3ec03,f6a07fea,8bd7685,8fc66d28,6637cc80,93132048,441449c3)\n,S(f53f3b26,c5fcbfa8,f1263bc7,a6439056,a31547cd,3a8c795b,8e355482,d1ff5333,113ed45,e664b9ca,98d88f1d,a17c4fb3,5249e8ec,7998b1d1,bb68be3a,e6716ac1)\n,S(648d23fd,c6d4b5e,4ee1d647,7d969df6,7d754686,9313ba39,1d89dc90,b646cae9,d035e045,239375d3,4e6ffbd4,bae0697c,9b336454,3261206,15edbe28,3e18962)\n,S(92e6dd0e,5dbe580f,82473f3e,dd70b343,bd51bde2,b1ca91cb,1c483fe1,3c2839b1,cd90dffe,a5447bd2,592d1a46,5a09b391,a61ab01e,a10c9201,5ddf4614,b39577a5)\n,S(1315e58a,7616ef8c,fa223ec5,49415a54,eaec0583,6be6fb78,2ef4ee60,f49f687b,729e0100,802d60cb,c54e1fa4,5dac72aa,2fe189a1,737da80f,1ac58426,d7e1431c)\n,S(3c8a9799,9857fd85,e26b284,a3554e51,86b001d5,e6d075e6,c9402148,ab3e2a3b,464f0492,acc720a5,59487b3d,60502067,a722e915,a10412f6,d6c69dbd,28b25977)\n,S(ea417230,cc94c5f4,436b37ca,e6f9ace1,bf3c7f8,ff03c879,f862ea76,127591c8,961238cb,8d95d50b,baccff1e,b9cd4040,6f4ec475,7026b3ac,e916067d,85a4faa6)\n,S(8eccf9c2,f271079e,329a8c81,62c98af7,48496ca0,b0c5840b,ceb19a15,361a6ceb,3e259a19,165bf1aa,630c6a7c,52f37b29,c8ac5239,a132fa5b,b53d687,b17e56af)\n,S(32f0fc83,b3503a59,6873c34a,b54eb6aa,7bf3d913,842cd556,77f398b5,4f0f296d,d4736d6d,906f78b7,62eda345,9cb5f7b0,311e50ad,cc9a1e26,655d8ca2,fb81a811)\n,S(b7d63110,77c83a8f,a43c171d,a5ff7cbf,e4fa4cc0,b2614a9f,63831836,e0d7accb,6095f640,56441552,a8ac27ef,9c1eba64,8b84a5b4,c19237e3,5e285ebd,796be9de)\n,S(ef6c904a,22df4fb0,a54cd74e,6563e56d,588b4f8,d6926cf0,6c32694b,be536954,308910b1,44cd37a4,e5bc3d3c,43715e22,aa7a0492,e0e9cc9f,b1095a22,65dbaa4)\n,S(19e13bd1,e62825bc,acceebf0,b48e17fa,b375241e,6eaaae27,672d7ab,22941a6a,6f22c329,7005bc1,155308bb,dbf8ccc2,855ea666,e4af3bba,d3e3c90c,28b613f7)\n,S(57d9bcdf,10f2f790,79349ae4,5f2980b0,9a98a7ab,d792a5df,967b7b11,1c8e9420,bf665de1,d9b7854d,e34f8fcb,1cc027b1,42ebfdf5,bfe4e65e,b5068a72,9a65db68)\n,S(37bc6685,7c3d5e8b,878874e,3d1ed324,bb530a21,f13d057e,4e3f87ae,3df06b2,15419bdc,764db12e,f12abbea,c1ca7bbf,77764abd,72f5eec8,3a81c452,4c998539)\n,S(1b30c5d9,9ca59151,33c012a5,96512c2c,b572e11c,a7412138,7f3658a9,f9c2cec2,dc42320b,2a0dcd0c,5404d842,17af8c9c,2344f751,16a5d691,1db0590,5ef39697)\n,S(96831db3,50c55ac,dd329f4f,85ad4a5d,e6e89f21,85b93e65,b8db4e1f,c1efd0bf,86f43820,fd03739a,d0e75ef6,17072f2c,82bd8bd5,a1f8cef4,55e49ed9,cfd47837)\n,S(cd2f500f,aa1f04a5,58309f28,f7acd542,bce7999e,a17cb792,66b93cd5,44e3d8ad,1f977080,ddfceaee,97c743c2,4815f795,27dd1b05,63ef009e,92994046,c8dd8c29)\n,S(60392a7d,237c9e27,a3318ff9,d3552928,802f519e,60a783e8,ff32be17,4ad01c08,eb7f3147,df91d1f8,d8994afb,df297c44,88ae9e1c,539fe065,663d856f,22893fdc)\n,S(f6cf77ad,df6ab73,20d68fb,9f3c1d7f,d8abb679,179b3c90,d22574f9,fa37ee9a,8ffa29c3,3587f716,6b5d513b,7df76311,77e81eba,1cf9b523,280c778e,2442ebd1)\n,S(57c8015a,f542c514,595b6f4f,f11be2fc,944a0ea2,d26a4abd,1807142,da7cdf7a,b67c779e,80153cc6,7b6b32d3,3a3754dc,ffb692bf,d16e3e3d,2c9c673e,a8b05da9)\n,S(7fe08558,ac184922,ffbd5c51,cae99931,2f58a17f,bb643b4b,fa1e419e,6b4fe462,7600477d,8bbf58b5,36e7e9e4,cd595858,7268cb5d,1599079e,5a88fbe7,79ec7a11)\n,S(2e16f56e,73b39bef,d729b87a,d8e7c4e,3d81095f,58be177d,87bd9f3e,dd517b75,4ce271ef,57323a0d,baac950e,668f0981,77aa59f0,7a0211aa,69b4e417,375fcb7a)\n,S(a4d4700d,456d7802,be781f66,6ca24a68,49200de6,d2dd97ad,9c2eba62,18ffdedb,c099f86d,e7ba0f0,e8f0e762,8864a4d8,9124aae5,af12f6d5,efed434f,c66e4532)\n,S(b4764d50,50119e3e,a316c921,91e57ae5,a2327e74,187f145d,c048c199,db3fc059,e39be8fa,cc272129,3ec831ea,9016a188,4f127070,4fa4f092,c2f3d56a,4798653c)\n,S(3e686ba7,d291abf0,ced5b352,e84fc696,c29fe123,aeb82235,5031931b,e7e2d0e,7b35c0ab,7cc3c81,f84caf9a,9321b9b8,5a889b07,98c9eed8,8c7dc4c1,a985d266)\n,S(d7886f2d,1d4c70ef,c5961e56,33122317,58400105,288d3346,db49407c,d24a46c5,da645ee6,17c46024,b2e25903,d4d7dbab,c5ef503f,814f23e8,68d94040,54b9efc8)\n,S(7cbd23cc,14654d40,5aa57ba7,1e375466,cea867f2,325db475,d3a7990f,ba17a40,eddce5af,96e66db4,b985541e,e638ecea,88d327f,edd37039,54ce5a1d,d2dcbc51)\n,S(54626185,c279e1da,eecea0a9,233c2190,18f877bb,58614a5c,5d2b9894,17eb9795,6507ed85,dc8f8454,bf96730,5cfc7919,8cfb07f0,dc64b09d,928d0b86,e0e9b6f8)\n,S(edcef155,1cbec2ce,2bedb20a,addabefa,59e68cf9,e2200681,89285c08,563c32e,ade67143,75592853,c296ab45,bcba4db4,bed59efd,9df68b33,b03d7a3d,be753179)\n,S(e027a953,ff6ef9d3,f27db47f,bc91db7f,6a30bc5c,c834add9,9cf8d086,23380cd,1e6b244d,e18ad020,8e52d174,ac452a81,62eafc80,975872e4,c7e362da,cba2bbf5)\n,S(a5006d68,db980242,54ea251f,3787d527,66dbf92c,aaa20960,e17ac6f6,72e2b2d6,a1938d7e,e854dd5b,94d98766,c0f74723,72d1e6df,5cd6dbab,fa63faa5,6a0b2b9c)\n,S(327075f2,1a1fd9e,da69adf7,32995919,dbb02025,ee504e0,3d5e5066,8427be11,41a57eb1,c32e94be,948ee335,6d855fa2,611a4ec2,4519adf3,2deab381,6bc4debb)\n,S(97e1a5c6,66694bca,6b10cdcd,7e95f74b,9c87ac04,c623799a,c1c7959f,1a3363bd,3cc9a48d,1ec7561f,7b72bb6c,4d671c25,56689498,42546a9,48c9b927,c8ab5e88)\n,S(450fa640,a7374dcf,d11bce28,f4eeb4ab,d0a2d868,9f6fda04,7f790ed3,b0c07a21,eae88298,dc17cfa1,d482a1f1,70d1dd36,aa35a56c,7eba231f,c4c3ca16,efa77f4c)\n,S(f5aa7340,fc0a66a1,2da09ce1,f4094240,d81fad91,87e944a8,a7a1ef4b,9e0a6559,1255b3da,9ef992f1,c62e7738,f84dba74,899d9810,9db522e3,49ad9fc7,2aeb5017)\n,S(6900965,55197836,a7b23841,97fbd75a,8857ac8a,8b14ec8c,90cc94a7,8a42f1b4,1dc181d2,38c976d,b4627107,2be05f32,952b5bb4,e9ef4710,f1bad8c,171b027b)\n,S(2b1aa05a,8ed84136,7e99f377,bc3760c3,bc3bc0f9,33555e87,8ff2d212,c3f290aa,47b25af4,1eb8bc31,915f5896,57f368bc,35e9000a,cbdd0a41,7b267e58,cc13e280)\n,S(a4e6b69c,a18caff0,d993540d,3005e5db,454b1e39,d4c81a7a,b5315d25,d052d81d,7cff2103,9c587904,a42d78ed,c2e7a6ec,df4fcb21,17c89822,36fadc01,a15d70c5)\n,S(ab44bb96,c74fca4b,3e39cb0f,d9dd7795,f728e1b2,80a7cfa1,7a36916f,b39d2582,59d91ba4,519fd8cc,9e773feb,b1915967,7edc0dd8,1e794ab7,cb76a2c9,9026f5c1)\n,S(83b0c85b,3fb9c3e4,8c96a31a,e5442288,93472975,5d42fcc7,715dbc23,9de332a2,e99f5640,fb620582,fd833b34,2f086800,9652d739,2d6494b1,e36d301f,35a6da6e)\n,S(ea45313e,624ecf81,676911ee,500bc0f,e5bd10f4,40e04788,41eb215a,ef954537,4ab8b00c,e2359cce,203bde53,b9e8a454,d5afb101,4d0b644e,81ad1313,6c0c7445)\n,S(936c10e4,af823d96,9f7f7a26,98c927cb,ae6d609e,37cf7412,ac4cea1f,51a3cd4e,46f72bbb,10dd850b,8e3e5bdc,f0359f6c,bdb9067b,13d2b60,bf68e8df,b17b7213)\n,S(436a5d5b,61aac3db,392cf8e1,36a89b31,847bb116,5d1e296b,36c90d60,f2e9bfd6,f81e688d,ae67cacc,1978559c,84a90f9e,5e342bda,e73647e,33655686,2f36d68d)\n,S(9eb95427,3fe789a1,3a24b929,e54f6262,d931a442,2e61867a,abd84d80,4b315d7,38bfc192,7dc0e640,820fba,8effa82a,d29f204a,fec11c60,768f95a3,4d2ef59c)\n,S(3826b6f5,87ecbc0a,cb6b4328,a00f63e6,ecb77a0d,bda277a,e6e4ba5,fa280d8a,d9435fe,dcefe69b,213e6eb9,eda63f89,db35e293,8ba3d6e6,57232f04,3a4ef271)\n,S(a348cd11,ae0ea1be,3f993bcf,84364b9f,4dbdceb8,db3cca21,cd0f8ca2,4a1dde2,1fc851d3,db7cfaf2,6a1c202f,212b68a0,7078ebd,6d6441e9,1d1d4884,1c83ac75)\n,S(bfe15639,237fdf3c,4e67646d,724264e,5d70d1e7,3cb70205,3c4e9a06,2bdf7329,902b37e6,1ec5e59d,9c3c09d1,d7767483,345488dc,e492e3ad,f12d04f9,2b5f88e4)\n,S(e2fdb14d,81a1b6f4,d40dc346,c8205821,2642ae10,2707e944,14413cc9,c03dfa5e,3011b4ed,846e8551,6c66925a,e7676062,131e37b2,9b00c408,6c60a3e2,3488fceb)\n,S(bbc659c6,8f476748,17663659,db4ac222,cf1119ea,ac27c38a,535ddec6,913c7416,1f8b6ee1,9fdb512a,fadd13a4,d3fe13b,48250120,975b8c7a,47798267,7954b954)\n,S(65bd2a02,9866789b,dbd6f743,af85a789,ce9141b6,fd9ee056,cef4de8d,a2505521,32dbe030,1cedb7bc,5d5644a4,6c3e6c56,990b184d,710a770c,6b65f39d,3378f5a5)\n,S(1ec0e6eb,8382cf7c,24d75a49,fc0f3724,e9318d90,9e05d406,a3a5916b,2278e981,e50e129c,f486bcaf,eac8ade3,c697debe,fa56ac06,337cd9fc,240cfc2b,3415715a)\n,S(7390af1c,203da259,9e1aceb1,ea101628,c0399c92,33658d9e,10dcb10f,63a9eb8c,7d215496,60647b09,d7bcad45,1debe7d8,2c3adaa3,39bce418,320e0df0,977c3126)\n,S(99a51469,7b913764,783ff7f3,7099cc45,127baf1e,d8931eb2,b4b71e81,6a1a533b,49c0d00f,7503770b,fcbd57d,bae748fc,809d21f0,8ea38d4c,8a288063,a7e2e8e4)\n,S(e4d6e0b1,3b4804cc,cfb7dbf,ef1b7026,320ba2e0,c4fc98cb,f12fad65,8a0394d9,aeb0eaac,73a006fe,6a75ad20,3e0ce2fb,af5fc3dd,81865b6c,75075d36,3b761a41)\n,S(488a4141,507ce5ea,cb3e1c46,ad23fb3,1a9aa058,2b553459,d885116e,19fe1a04,6bd6a066,43ef8c7,4cdeaf25,ead63b04,e82f8073,a5fd904f,d7235f4,cf12bd12)\n,S(c0ffe24d,ed0ca54d,1ad1c2ff,d2dfbac3,2cb65b47,ca42e8c5,5d2c15d9,67babaa1,d15cc63e,29c54df2,19dbbba8,8df7011f,a0a330e1,6756567d,bbd7c6bd,7e7e9289)\n,S(336d9b02,6c74e25,9dedd36d,d8fc5ef1,31b05d0f,f20bffb2,8305b923,767780b1,4aedacfc,9886a707,aebe6510,e1bdb89f,2b1b6461,1471fd1,b055e7f5,414e647b)\n,S(98353eb9,8973a7be,3bbd3711,dc7b86e5,9a2a175a,ce8464a7,6aece2d,2dcf04f,a877fac2,27894a43,8f610887,305e1c12,8e45b4a4,3d6c596d,9807461f,aaee767e)\n,S(cdc35e1c,17fff9df,63639cec,b54fcb0a,71c9fb77,c38eb905,3f37c361,36da1e61,a8ccb6ba,fe917260,df64f0cc,dc14a31c,87ae559d,7d629778,2bb9b668,9494eace)\n,S(912cb1c1,5e62a0b2,71458409,39c06f15,5d7407ec,526ccb5b,5159a934,80111941,584c14d5,1723c447,cd0cecc8,6c70dda6,6fa710b9,8348f5ad,bf4bd587,37049bf6)\n,S(2145e17c,7c1e8acd,99eec6e2,cff40341,ffd19568,9800d02b,5ddce693,c3bff3bc,3b8a71a2,40c0b373,95b0e9b8,99da7bac,a5c43088,afafeb68,957bff4f,7636356f)\n,S(e4a09336,7e877272,2224f7e1,d03cdc85,43e0910a,20bfc4ab,3aa2ea94,8d0b1692,24b1ec31,33146f03,8eeb8315,afa6e34e,898f48dc,af7d0f80,328155f7,c2cf846e)\n,S(fdf526dd,464d459b,b7f387ed,46402875,2b1390d8,4006ebb0,f579b36c,d328db40,4396e6c5,679216d1,dd2cf776,61264ec5,9373269a,a745c963,14147c0d,e53a3987)\n,S(6c85c16,b3e37273,509933eb,caddf3f6,52ca4c49,4e751da4,fab5bfb4,ec729f86,9b530fc8,520b807e,5e649040,c5de9929,e592ce99,1b9f9cf1,21766f16,eb648d6f)\n,S(4fbfae3c,596ee2c0,10c98ce4,bde00cfb,4e7da2,25583203,feb0c791,2ce28e58,fecf0504,ed0e364b,95edcfdc,ff50fd62,396b8a65,83bc1799,3e73557e,da6ff099)\n,S(9bcc3b7b,80171179,3b683c2b,90e9c811,97c1d7bb,d3c281fa,1503513e,778bab8,da2eac92,878289d1,a77825ab,9859baa3,a887f009,d7d8be9f,3b70b917,41bc0b43)\n,S(4415a040,e70a3b3,f5a95695,672d1314,855b0a26,3b5e3c8a,24e02f9,6b635150,d8a53b8f,cf55a9f8,81e92160,39afd5c5,6843ac56,39f3223e,c58a5869,da3986be)\n,S(55e759c9,cdafbcf6,a38988fc,be203839,b617b536,2d537092,4d2084b7,45b2341,4a6933ea,ca8a3405,89952483,4a231585,3c1191b7,42eb95d6,cf7f82af,f931bb95)\n,S(21021f25,bee23c2f,a57e072,bdc83e09,8d115358,adbde4b9,5ed63488,5540e9c8,9aef5691,a7700eff,7c42c98f,8dc822a3,4ed8dc1c,7f8648d4,ba5bfe3c,f9a8c9f0)\n,S(2b4e311d,dded1aff,edff3c64,10d40b8a,c70771ef,6904e4a7,a28c7982,cdb376d1,145c30f5,6b255b07,fe43d02,b57f5b96,48b25dd3,6c792575,d20ac730,d709b05c)\n,S(5190b21c,7e166100,c90dbf5b,e05d25b6,5ed91caf,904b091e,8b98b5f4,5d5378b3,b83cce47,1fbdc5f8,b50e3f26,8be0d540,1826d26c,216c1166,4040b4a,66650073)\n,S(2b211ee4,54c65c0b,3647c7b2,87608189,88b1b009,77d016ae,1f2f4030,545b56f7,75743959,17d8fc1d,571a2563,47a61288,fff74669,b863f506,f9b70ddd,76854f5c)\n,S(cb30b792,b41e0aee,3478ec37,ff6ba66f,a3caad4f,9418e1b6,d4af94ae,e64134d4,45571ade,cb3a9f4b,922b8b4e,c0d1c728,9142300d,daeb08e7,71b1aab6,228358c5)\n,S(f4e437a8,d2fcaa16,e9749d07,89be67b,e4687952,7eea12e0,65c3cd32,4e4bc6c,fb52d28b,7e81ae8a,30de51f8,bdd0ee28,8e7647fc,392249c4,3449e62a,77ba97c4)\n,S(a0a676a7,6a2a19b3,bc6a726c,193d9df8,ce85a94b,cb678080,545c53cd,df50d518,647fe8c6,b1b7bd21,b9816e5,aae40700,41198d68,a3c9bfe8,e437fc88,8f190a71)\n,S(15dd4fea,d7f39428,b10544ab,1eaeeee6,75a2ba5d,15d8971c,7860a5bb,b7ff7b7e,89955ddd,5fab2154,7d231342,7b7322d2,53924d1f,1b1fa961,8442c471,9c38445c)\n,S(a806b800,40294b47,6377a188,ed74dd9f,1bdea3f,f72cd2b8,850f6321,930ca522,4b6d7365,47d8b1af,697f1fa8,8ab3bb86,53e49aac,618910db,9c6bedc8,deb97213)\n,S(41e3723d,ca086487,7a36ff9f,6e431ee8,58a983ac,f3c0406d,f31ba3f5,5b9f148b,8ab166ca,f27c58d0,1a80b136,dcda9fd2,2753c52c,dffca007,9139481d,3b8392e4)\n,S(63b8a0f2,78558c89,d9ba3e58,70946615,690e0447,f8d4c953,ea00bca8,65bba3c4,321fad41,85eb8b49,53a95da0,f004c80,8c09b297,728b3a0c,2d300b32,43cf787f)\n,S(62beb7f,aa8b0d3a,505cae5f,82229a61,c1ca21da,d2ff856c,8942a9a9,b14c5963,e3d9ccbd,7120c27f,5cd88655,3efdc43,a36f4c02,2f5b7045,1ac9d7bf,56bffd4b)\n,S(b75a180a,f524b89e,be5d79a9,92f0313,bc133fcf,3cb2d99a,c65f2c48,1bd20427,e7855056,b11cc054,d37094b4,1e62dfb3,6a636964,633eed48,c39b8225,4a1d2747)\n,S(4e5bbf6d,5298fc76,97ddf9cb,e4d063a2,6b51f93c,eef032f2,f03eed04,fe4949e9,66702686,40cd9dc6,54514a19,ecd80930,1871fbbe,99254119,476e44e3,16a12188)\n,S(a9778c3d,f509f069,3baedb83,6d5fc1aa,b78e86e6,dcb61200,74bf6df,c173237,33a9c991,86a0f913,95fa0e50,d0a85d65,9230a41c,8c0be5d6,90ee013f,29d0cab7)\n,S(f1b3aaad,16664be7,c49790bc,1a4936ac,757fb3e7,26ccbc95,cdb7bb63,cf570449,d1dfe1cb,ea3fdc10,3f218398,14626782,643426,24d3aa3a,52b0fb4a,7460cc06)\n,S(d66cfd3a,b015d585,6a436ad6,a4cf019d,9563a05c,af4ce2d0,6988a4c5,9349f598,5ea179b6,d097d9e5,663b7305,6db940f8,d8e91bbe,fb951756,d07cf6fa,111efc4d)\n,S(a532a4f0,924b5d13,bef0f30a,a982edfd,5d87a16f,2c0d8470,ea8fe3bc,da0ac7aa,c2e62c19,ca4e3481,3cc3de70,df50386f,74fd1efa,ac6217ad,5532a927,1f8d5c1c)\n,S(a9ab2512,5df78835,ffbd08c0,9e07b632,81ebb3ef,3fe2fb3e,1a3e5ff6,28439b70,58ff55db,56e015aa,9aa43698,acc35df1,f2eaadb5,4e950c7e,3501a5b5,85877514)\n,S(ce058f84,90813dec,c184dc83,915c6d5,53df174a,41ed6521,f2cff46c,460466eb,414d38c4,58817414,5a815a7,84f4f71a,28237741,97b37d47,c7646b2f,8af3e745)\n,S(991fab65,30a2b36a,ab385c7f,31644de9,afe9253,9db603d4,737beaa9,6e406299,2a29b576,77c544bd,f156dc9d,44da01f4,5d373cfb,7ada94df,4f82af9f,e48eed57)\n,S(ee6cc81f,bd034eef,cc841921,5ab4817,ddfdd2fe,a13f1e14,e91c3f2,af715d8e,b8f79ffe,48c3e965,21c7358d,ea5cbc04,df8fd847,a97bca3f,6893af3b,e386d8be)\n,S(66a2d372,d6426657,5544d5cc,5141e003,16ff2dfe,813357a3,c5daccda,159c5ef2,b57d2d6b,91c6f48d,389423b9,af265e04,780000d0,598229a0,5bada3f7,4dbc8929)\n,S(20a02dd9,f697de3a,15043e73,fc7f36a3,7a5798e5,acb4cac6,adf5c692,3a421da9,1e6cf100,d162361e,aa6ab61e,711e3dca,ab4ab538,2fcc6b97,33836c30,cdcf34f7)\n,S(a0b8ca43,7818e81f,6be98b15,4da25331,9f92b79a,1ceda110,92e3a303,cb7bf552,4541bceb,f447d990,50663ca1,10fce2da,218508e6,48b630ba,a1abfe5a,3d543be6)\n,S(51714ead,73dce488,7e15c25f,b5cba9cd,e0d5018d,db5b8ffb,9e4174eb,1cc52c63,47b794a0,82ef561e,bee272c7,d66dd201,a5c24831,99977097,73b9141f,9bdafebf)\n,S(18ea2763,1fe4de07,3e7c41f6,a9921e91,7da195a4,13417a2f,ba74ac2c,d6451c59,398a0b37,fff6bba9,b33e0428,e8d7c93c,d31b3b83,2e955e6b,106aed50,d64df316)\n,S(e1d58b4f,c39e1834,a61ec341,acfa985f,c3d1f0a5,9d75b0cd,e8b9057,17c5a87e,1b62ee02,15fdfdec,8fe2ab3,bb7f99e5,af82153a,dd9c7f2,cf299225,9c6b3c47)\n,S(39793917,30d3c125,7dff5ba8,eb253dc3,2c19c541,11caf9a3,bbdec3e7,716c5a84,d6a1fb50,189f36d9,912cded5,c851da8c,be7b4ebd,41c2a1e3,f78aa4a7,f5f18015)\n,S(49b49e4b,601b406d,381dbf88,8b02519e,1d57360b,24f2aef1,5520f17a,5b9ede88,fcf3ccca,2f2d7b3,59be7be1,9e45a3,a0a76e9c,d0e42fad,bff7e772,f969a38d)\n,S(2cd8190d,b42f36d,20d88548,f0ff17a1,d64e38a1,2241e4c3,2bfdaa45,28bdc871,f729c369,22141490,5aa84f45,e5abfeae,2fff780d,2b16aa67,77ef59b,68259187)\n,S(1fd0fb11,17385466,2da0cb2c,f1f9d19a,b5b642ea,45d1c6f2,30808626,5e41025a,3136a688,fec60820,abc7825d,1c7012da,94e928d6,dbb6c08f,5579181e,469ce0e9)\n,S(f08e5f3b,d7f8b5be,18648a0f,5bd844e5,3f93d5bb,120d3871,7de4440,7af3a141,3dd8725,9067eae1,cab61bdf,cc94ea0d,bf7ea1bc,df1d289f,a526e15f,d9902fac)\n,S(a0033c06,b997fa96,373a046b,b5c6bdd7,a0584cf0,1feec5a5,d3f5cab1,1c5ee207,eed61931,aacbe48d,708c2cda,2208d40c,39a577b6,3d4ffa17,d140a8db,c3e268b4)\n,S(77deec08,68bea671,df01e29b,117791a7,83ff8f70,4426bb1e,1ea91b6e,62c16f70,b908a228,ba8f73f6,3271ae7e,f19f5e9c,fcc1fe27,c0a224b5,dc426b00,5664861d)\n,S(2fcded5f,fe2f10ed,1a1bd1fc,63506b3d,994a03c1,c188d960,5fd5aa1b,a9aa72b1,155bebf6,f09a86f1,d20d7c12,e12a0c66,b4df6628,4ff9d45d,3fab7d76,6bbefc6)\n,S(1f0c0b2d,fdf5e733,abcadd0c,9ba47c09,8667f8ff,77c2a904,c8310e20,995db3ad,bd711bcb,84cef55f,5139b761,33268489,70f63182,85ccbe44,8efd7566,577bc566)\n,S(b4a8544,e7162c44,60dbdf3c,5edf654f,d603fded,4aa885ef,465ea8f9,a37dcf8,53c04391,b3f2e8b2,32e27b,2292cb38,99f8ee6e,dbe1934c,13938a3d,203c62b2)\n,S(df0ebe82,dcdeb735,38f31cdf,ad307397,d00a900c,6d94221a,9d85b0b7,2c5bd68c,c3299639,e7fe2e55,447b869e,3a4acf8b,4a1d07e2,d70701c6,8a2f4733,88decfb2)\n,S(eb04b9b6,d1c38c33,e1eed101,fd28f89e,f9fd460e,5b379576,ec7c9267,3c101c0,4f26d849,7f47f80b,2b13cab5,782d6e9c,f5ee7548,3974a4eb,8d8f28,f5e0ee9e)\n,S(7bc9efe2,197cc6ce,ac94b37a,cab9865,7db4ee0e,ea7b9cfa,ce9f71d0,d3294334,d931bcad,52347906,a941d940,4b5b3a51,ad8fb493,1c15c9a3,7ff782da,5da72013)\n,S(8922d1e8,f4bd52c6,4bd0c10c,66a3e8b5,1321dc50,cc964844,e0a41ad3,b73e0b9b,2b643cf1,7d23e21e,890e6abd,3337dc52,61c9eec6,d5edc318,2a02a7a3,4a41c431)\n,S(42f2ede3,3a9312ed,22f6a842,ac46801f,139a7da,77ca0e9a,cdc19d1a,f2ddcc72,50d45bcc,715c985c,b9260edf,fdc8e342,ab95360a,6bf4776a,c70e3497,8f26f99b)\n,S(7bdc9720,1862feb2,58879255,726b5e4,627549f2,92936ea2,f3b27051,4d6761c6,700eb72b,7f77adf5,76e6f0bf,f8406660,65372ee4,cad6269,f1ca8541,2da4fa8c)\n,S(b9b527a6,4bf549bf,5e42e0d8,5228e1a1,f79d1647,d2102306,6b6d98e1,746314cf,8e1b3464,2a721f5b,93a2a2b6,802f30ea,e35b1539,c6d84eb7,499299aa,aa0cd93f)\n,S(b65de529,34d47765,1c29192,93ce1177,d187c431,590d2d74,978ac258,75e3dda9,3d6fcbe7,4ab9b5ce,b3dc5535,13036457,f0755509,ecbd94ef,324e36d6,3b9fa529)\n,S(18eab632,608751e,af3604f6,a3f05611,a036edea,3405aca5,c2e66366,ce7c6b9b,89eb07bc,94671119,36e11f05,79f91e6e,ccd42605,24bd7dd9,9d12b365,95074c5)\n,S(a2611066,4a479643,909a1606,596d39db,c7502ee4,a31b40a1,4eb1c60e,ead360d5,4b45d74d,88025576,3262d9fe,38198218,85721a81,f323cac0,3e87f372,75814901)\n,S(789454b1,2c108537,a019dc58,35cf25c9,c77ac0fa,f6001959,5da9435d,3c08a8a7,6bee870f,ed2859fa,cbef4337,8a0bd760,8841da03,252687a2,591ae0bf,a5829041)\n,S(1977c206,fb4f65f0,11b683b9,c2e0df95,f81570f9,9f6625ed,7cfe25d4,62791569,de76dda3,c22244aa,95ff435e,5a9ebe05,9dcc79b2,75d91de4,67de435e,bf698479)\n,S(891f0df7,d259d536,40fe6086,1ac34d7d,ec3b5ad4,c3f56585,189ac986,65f4222f,cc5e0bf7,f538a2a,1ee7a601,1a8d6b0e,5c3293ab,404257d,ba90ace9,1b2de219)\n,S(8534bbf6,9262f81e,5926c282,f412b4d3,50169de0,3c5c5e55,c80a937f,fe99530b,fbeee581,e0bb0737,4cc764c0,be5451e8,f70cfc23,4d415cf9,fb08e7eb,557423b5)\n,S(e5b6f564,4e7dfd3,7474eafa,354598d5,58fc897c,f010198,9e44b07e,a86f63fb,4368bbfa,68a83a8b,76de7d98,38880780,8e153cc9,b380ad0,b2c6ce26,6118da79)\n,S(f9591a8b,11c3e514,983dc5e5,507247a8,46e184f3,b4e38e29,f7c90d4e,6c2b850,423b6436,2361f587,cca4e288,a366a1fa,957de393,f29ff2a5,1fe97a0a,d90ff6b5)\n,S(3d3239d3,252f5e9e,ef9eb617,c9646379,7c995059,57bc7821,2f2920b1,ff72384c,1c3e37b6,fc9bafac,e52798bf,695eb4df,ef860ee1,a9b67df7,8f73ca9f,22a2e57a)\n,S(f4089723,4b574d76,86a8e855,408612a2,a0a6ce61,c1f14055,201d5c67,bcc5dfb8,6b8283b7,3e72fc91,54aaac24,2565a79f,c3a62fa7,602ffaf3,c7453209,c0a56a4)\n,S(ace076e7,aea9c745,f6be65f8,498b8b47,95058ed2,b0413c64,bc4b462a,2e267ccf,b62c617,377fa9e5,eb72ed6d,caf353e2,dc58f362,a994520a,31f1dac1,168b97aa)\n,S(70ccbba7,408c6069,3230b848,eadb1d1d,b4e63f33,b4fdf6af,29d6fc2d,86ec161,fc1cd9a0,46d30e60,e4128677,654a80ca,5a4ff338,71fbeec4,d7782c7b,a14d6959)\n,S(e6e7a8b2,7c0c5b0c,5ea58d3a,4af5abc5,9e33fcb3,9970aede,7a8de629,e758d372,d40d11c4,c8c8b5a5,d511fee2,793e2c80,b40df3a5,c98bd704,9a8db3e5,c98d4a66)\n,S(cdc495c7,e0a02e68,329495b7,19e2c424,7910e9a5,cff6739,117b1d32,23216346,63664f6e,9306c0ac,f29ddcd8,7f1df6ec,d51fc68c,6ce422f0,559205b1,681583d4)\n,S(2784e89c,2fd721e0,22ba33,3b824dc1,d0142f19,6f35ae4f,825975d0,7a2fc5cc,ba58a66,bdfa661d,354232b9,b25628f4,5a391e44,f00841db,4a335ef5,dc3b8cf4)\n,S(ab699b62,ebcb7380,2141dd83,184ba3cf,c9118bf,f6af4d0b,9b98ecde,b01a2390,5e548210,b71420f6,c5d42547,da0a7ccd,2be0117b,79847e71,a609044a,34766905)\n,S(781ea7a5,67ffe37f,b9fad6d3,96dd1eaa,2209552a,9835ae08,dda3d4f0,b75756ec,3c76d87b,46f63b97,e4d48174,4ba664cc,403a507,dacdf4b2,af9505a0,f2637256)\n,S(75ab2d30,dd5c0a82,a5c04fe7,b8fee5a3,a0e1ce3b,e20b33fd,39d0bd3e,e374029c,aaf46147,fdb1393a,cb9f6f8e,694c1cf7,30536efa,b5ef921a,72215fcd,61914b9f)\n,S(294b6698,37303da9,6d23caea,684ad56d,8712433,d11c7ced,85a10cf8,8ddaff0,af4d7ef7,feb73e9e,a9407fa8,b38bf1f1,e5861bfc,82f9cb42,22fa64f7,9b46f7c1)\n,S(d8676aea,7433639f,c9683b06,bd97011c,f290f6e9,1257ee55,ea3c6e34,b824c8d6,710c8876,35d45545,90f3e5c,d6aac133,9017b2a,de71e30f,d71a5b71,97a7456d)\n,S(5e4eca03,d90f5ac,2ac4771c,6d86a458,cee71427,a93b7544,fd8bee74,161270d0,44fe0143,b970f8bf,affa6d60,33628894,a93bb4a4,f48cbb9f,f0caf0b7,40c97351)\n,S(90152daa,244fba85,fe708f21,29b55485,265c3a3d,dbc761dc,157f125b,8580097e,1694d2c9,200b8690,b59fa3b2,8fc2f613,8a6d392c,48357939,b9435739,83ef2cf7)\n,S(67dd54f0,96f171c4,53fa953f,acbf2b9c,daf3a199,732ee0f1,91fb3c90,8c5637b5,5327db43,2d33676d,b6502236,5a338c62,5fd6c4a4,536645df,b36279bc,4ede74b1)\n,S(c6496a83,8f95ff57,65a0f144,774cf543,2e770457,55efc790,142df95f,bb6c51ef,cc0041d6,604d1d73,92d86f01,d8b05b53,1177b51e,3a38b8ca,ca8267fc,bcd752a2)\n,S(e799d70a,b163bfd,475e5e72,8810d9d2,425bf4b6,9461e9ad,933fdb6f,68c11c74,fc34745f,e29bee3f,9b0adcf7,618c6d13,e504449d,1a272b21,5ef9fc18,14ba8600)\n,S(6d3c97b0,151a9011,5032aa22,1183d82e,820c8774,c3dcd75a,cb6f45ac,5d489d3b,5aa8bd01,3d15d77b,8f695d43,8cedd9ee,64b57df9,ee672323,1c2cd5b1,4ad4749f)\n,S(86e53e00,1c1e7de7,419cf2d9,a4c6a39b,b96d8ec3,a82f8165,45658eff,a517539,f8b1b70,f2efecc0,cedda525,40663114,c24491ac,266df520,ce475f01,ab44ad86)\n,S(a641c339,ac877cce,a9a3267a,78edb33f,75feb90,1f3c8743,47c50843,52a9880a,d88a6d4f,2b275ac5,3c7dc101,b7d69ca5,407559c6,afdc9009,c34a7256,f982163)\n,S(3a0153a9,4d778266,4581de43,6de31754,b925aad5,4090cceb,9e013568,9d82511a,f6ca48,94935c5a,7a252df3,8ff06cf9,11154b0d,9f0ac55e,35a33d7a,58802035)\n,S(e78024e8,a131c9ad,40526b31,d26e96f4,2c2e51d7,c63f458c,5bec2a61,472b170f,c540a14b,1ad7b18f,23493d9c,edab65dd,3a309204,976408ea,f197f658,9f4e0c53)\n,S(7858c85e,8351f0ec,740380fa,b1924668,7f05a161,e2dd87cc,7df13338,a86a5162,cad94344,5313a06f,c382897e,7c444d53,7e658e06,5a76fa60,928d7e5b,36a6de1c)\n,S(6643e28,1c5bddd4,35a68c17,965f334,ddb9da8a,d599a4b8,2f37147a,cb0263e6,9f9f9e36,8ee1aa0b,9bc8f928,284968d5,6f2dc8fa,6944ff36,d728b588,a72cf79b)\n,S(5f36d937,a286f14c,96fe8f9e,3ea05d56,b3132523,e9a135e7,106592d6,b9b2254b,9d6377c,c8265ff2,dcebf753,ef2fd39e,9adb0e1c,3c86acfc,2e54648b,9056310a)\n,S(212eb1ae,93d3a0aa,5f626f26,628503c2,310f9172,461ea12f,b17677eb,c63e2224,51e57e33,347f2016,c738d9fd,cf528269,bbc5afe,f5fd6fa5,1dfcfd47,4b6d1b67)\n,S(526952c8,940b9f93,32848145,203ce261,dedb3b93,8e6f277e,9a085d77,35e9eab4,8657cfa3,56df2aaf,9a5fe2fd,81804ff8,1d9aa58f,143fa109,52e4f4cd,85a42918)\n,S(20f1750d,ef762812,e4ba8778,c953a2d1,419e03c,b97ab6ef,8f98be07,4c1c099f,d2fee9f5,3e7ad2a7,fb20bf88,16a1ec2d,d9d97b4e,5abc060e,bd8e8b31,bacd485e)\n,S(e231a3b7,ea011665,c223cfb2,7f13c691,dbc7f5e5,efb66496,da2936dc,d67ee910,aa645c2e,18e80131,f3e7316c,7cdf13c3,45e4f602,fb17011e,96eb5fc0,bf65d53f)\n,S(7a4e4d52,3fd026dd,3daeac35,552e7299,d01aa962,687a02cb,ed7174b6,25c702ad,351c12b6,a7398e5a,ae461204,4cd7c9a4,7d2bdfc1,1f941b84,71eb3304,fdb965d2)\n,S(fd2f707e,76965670,67ca5a5c,a0010c6f,9a858967,19a23eaa,5574d1c6,cbf137b3,c45a430c,1d5ae473,31f9b161,3ce55f41,df00e287,9e3bf8aa,1ae75306,f8315408)\n,S(c506cc1e,8cf2f4fc,e1011d67,6d304877,6c2ac2a4,f8265373,f3f918d3,f02bb89d,8de6dfb3,74029b33,2fa47f6d,1f7ba609,bea33d6e,2f58ef0c,58641e2,a5d3118a)\n,S(2ea7ad02,d9ccf999,86ab901c,3c9cde3c,ad1bb4d7,d8f86eeb,b8204b75,ab5c0369,11222bd8,6d750302,763648dd,daf76947,2b213562,494ebd9c,e4003195,eb0ed43)\n,S(ab8cc192,3555e4e5,2f84b421,ba2ac134,f8a6023a,ddfd279c,4c338cd1,9e159c5c,2c48e3bd,cc268dbc,23e9fbda,6c449079,5a5b54eb,54ca8ff5,14d1f23f,8751ee1a)\n,S(88fec2e1,cc7c41fa,91b48e1c,2a71089a,c3778427,f2cfce04,c54af407,f5dad430,ccb45e88,4f696653,5fac7a04,9b035c26,dce30666,fb1fecf3,c4b89deb,8b3ed80b)\n,S(404587ae,1accf5d1,b42c3127,2ea0cdce,940522a1,c64c757c,11d3768,774b0d41,e8dcf25b,25ae61f4,f7368c36,9b351b35,63401deb,5ce55325,f96a393f,ef0e787b)\n,S(8a701eb9,cadea8c0,8d0cf20a,b2750915,28a377cf,bc4d9097,51424d1a,7eb9ab8a,4f045982,82a9ac70,c3c76154,ca98b5a1,265e8b26,6f02d43a,4549cdea,caba5a45)\n,S(c2812978,194009c2,9da141fd,b108a4c3,66e15e06,c6d64389,29b2aa78,89ad3d56,85409efb,6670e969,a2834255,dcb1e546,9c9db5e7,6e549afa,974936c8,b75db5c1)\n,S(9ffd36b1,c810c843,92bb04d1,90b82be0,f8ea4b4,2baa6129,8adfb810,71d72fe,11e27a4b,a11f0df8,1a42955e,bfa9fe1a,6f25fda4,6a65fd87,1caa3d6a,1b38404)\n,S(ac4a0044,bc92b017,cad07210,750eec62,39e43147,5e3feb25,f1c6f879,a5a48b96,41c7c3ba,731002ff,1e749853,344c1f53,f526bbbf,457b4de2,d5f88ce4,1eb8dfe1)\n,S(c78b101c,157ca920,b3fc83bf,9d19fc5f,57d8086c,d764e142,24ae4e86,7b06eb5a,1a8d2c6e,b9d660ff,faf5f533,b4f3b8f6,b7a9d7cd,5c29c1d2,deb37f19,d38126c8)\n,S(d08f3b05,572348b9,5f3c1c2d,baedd921,c24b0db8,e6d17d13,578e5ae8,77147cd2,27b5fcde,a067cbb,69ae3e5c,90a38523,4987dfaf,5dfe0696,91461e26,762713cb)\n,S(40ea043d,5060f61e,b81db0f1,c7c5c1fc,1091cf51,c5808489,3d08c4b2,a5e312f5,2ef11ec4,2836302f,e02719be,259f1536,43de03e,fb659f30,84816a00,1d66b27c)\n,S(f9d104bd,fb53b4b2,de8827b2,8242eba5,17db73f9,dbb1eec3,9f184ad0,358362e7,d7644a0b,6c371948,2ba707b6,d7d43f0a,68f4e3c1,4af6f167,296ccfcf,4d771877)\n,S(dd276aee,14c34829,4e6132b4,9a05dac,fea5f8a2,41712b6e,5703778d,eff9ddc9,9be617d,5d92eec9,7fede655,39690d0f,4803f760,2b74066b,7bc98353,a5ceb7ef)\n,S(8522f839,d5f17bd0,c67d11f6,7f0db8db,2104c7d7,785252f4,c8be84f0,61155d49,b7791951,80311f8f,6cb9b59c,ddca495a,e01f3edd,599f8777,3163a959,5a3ea117)\n,S(732802bd,b4f3be8e,fc02a62,4614672a,51049166,4bfce64e,eb2030d8,b6b5b225,7bd4cdec,590eee1d,6a505f92,cc0b25ce,d9022d62,d1155f8e,35a6ab72,46a3c6f3)\n,S(1b3641a1,2c4f8352,21e73276,b8bdea15,f5ffcbaf,c4496fc6,8fbdb573,5967af62,3d50ef5,e5d12b7b,2ede2e15,3b4cd01c,b824c32,7a8e1ce,f0fd866d,99664048)\n,S(d3034e18,4e9284ff,ed6cbe60,cb66d391,c897255,dbbe8c85,2c79525d,3f01a7ce,b3666304,16ce50e7,2a094b05,85f1ba1e,11172ac4,eeb353b4,8c4f8f99,f9d09e25)\n,S(8e7a8200,bd22f5ef,18fa4461,8f4f85a,61c6db2a,a3ad176d,65c3270a,69e9db17,841fe3b5,1cce979b,f87536ed,c71f4cd4,4a482475,19b35cea,dee4b3b1,f3530568)\n,S(fcccb4de,29ab8671,d1aaee27,61421ae1,c4af5f3d,839009e8,5dab0b65,60a4027e,a0229f96,203b89af,d5b6ac06,9e977e71,a6e269d4,bea29c47,fa6bd22e,f7f993b)\n,S(e68cfd7f,44358180,84c681f0,aead705b,9e74a476,1f99e576,9252c007,e44c8a26,add9c0a7,b027e2ae,42378d50,cf0d0eb5,71229161,8e9f13c1,672121d2,c428f82e)\n,S(8b6f0fad,4b81ac16,4866de7a,c8bb3252,63bfe008,b726e9a8,72e0461,2c6891d8,9bad6508,a8d604b7,8088d328,ca27fe13,91493e8f,a6291288,92ecaed,ba4bc9ca)\n,S(108a0caa,37ac1949,263178cf,20674616,470f8943,57a921ba,8cfd499b,d64b78b1,68150d22,be05956f,5ffe302e,1ff517c7,9b7c0452,6112b2a7,5a819f64,a265bf55)\n,S(fed18333,844c579,1d32daa8,3370a5c6,ab8e13a5,2654a08b,42940284,c757edb6,67bddf37,8395ab84,eba29a97,6952ea34,b1b52c2e,d3f89e56,f839c1ff,36457fe5)\n,S(bebfb39d,ecd56cf3,50bed6f1,a4cde24,848b2d84,23518da5,1fb2ee0,90170a2f,1302b4b3,bb86f887,22925fbd,e146d948,5acb2db,a61e751,97dd40ca,2ba11573)\n,S(67135aed,2a58d3b6,c4470d3c,b4da7b56,af8d5057,9d28a86c,9c67bf28,181e716c,97c40aab,2786e3ef,dc8f3e77,8f374446,30fa2f3f,53eb040,194809c,8efd6664)\n,S(b00eb5bb,9566e5a,cdb09dd4,14d6df03,c3dea75e,90db8b9,c37928e5,4354f90e,6d120e41,1cb6e674,e9973aa6,3999af3a,ccc3a670,112c964d,8aef93ee,e69b1258)\n,S(721b1a6c,be8d2022,f09db6d3,ba39b2d9,23337592,de9efbb8,ecdf3384,f3bb73a2,cdb41b62,631a0f47,75ae1f2,e94f8075,4acbb2e7,950be088,5b458c8e,4a05310f)\n,S(cb8d78ac,15b12ca,8dd47cde,190c420e,42f60b83,9489bf71,d10a3e44,df8a0837,80be31a6,a3073675,e8cd3846,cfb2e127,abdc448b,1081a2d5,d177ccff,ea96dbc2)\n,S(491cfbcc,4919d884,d23f3ae6,6d143e55,37e5c52b,e2ee017a,afec785,6c781920,76321b50,26283088,d344d29c,c4d9f2ec,3ba714d4,edc1bee6,2b17ecc4,56874189)\n,S(6ca33ee,48992263,23aed33f,f822303b,8145d146,c5ebc27c,fb3700b3,6ab507b4,96b73ab3,f189d064,1e0a20cf,d09522bf,8c376a0a,9c9dbec6,44e3e8d2,c0b11f4e)\n,S(6d1fdfcb,3c48971b,6cbb33d3,822cfa68,1bf602ef,98160f89,97ccaba8,19d842c7,82bc7c4,66088262,5e57c062,96f04600,fa555ac4,5596b769,9c6d29c,cfb1713f)\n,S(a3e81699,1cf92f41,a69ac3ca,36b23796,daeb533c,3e1e9b55,c88e3fa9,fea43554,87a6fa9b,e802467a,fa206b0b,45405309,65887df5,786d20fa,25e94832,312855f1)\n,S(fc84abd7,cbfbc329,4eac7438,d50b2ac4,7f570e4f,3f2ffab5,71f8c3e8,7dd49c70,7447b269,71356b0,e59b3f1c,d99b6416,589f6c3b,a566c75b,6915377d,a7f73dd9)\n,S(beb23240,8fc515ba,180d3125,2eca15a1,af4e02a8,73a69769,53982408,355d1b1,12fa480d,6fa8a9aa,e5edeba9,31b765b0,e2bbe6a1,5eb9e95,b3bc343f,519c1459)\n,S(68891679,cffad7f3,19a373d7,1bc02529,a50e63b,60434f13,df760364,1a99eb8e,40b78db7,6db28aa2,d2ea7c1e,86d01503,7736ce96,2e6ec524,da07b5b7,68772fb8)\n,S(ec435ad,1ae7b040,fde2f736,e8fb5d53,b42e2fcd,428e9d96,ed401ee2,bb068817,13bf6eaa,1283436f,4a828a85,66c4f795,26860c45,d650fac2,44bbec8e,fc96f9f2)\n,S(679f5afa,661f688b,7dfb7ce7,f77e4904,60a75576,6216a49f,374594d0,6bde3033,ff3fffd9,6c254fda,558f14bf,c8f05cb6,c8fddd32,a487d709,4e0fb35c,6f617ca1)\n,S(9febd8ea,5dc26e5,fbf48aeb,64307b21,1aa2fc02,eceb6d68,ba89a652,f633be60,c0867bc8,ea6238a4,ad36e785,cbbc5e0f,3fc5dc96,2c778992,72be4364,8e630bee)\n,S(d886b154,c534b48e,db6bed69,6dd8f9f1,347b381,1b593acf,e2137c93,600b1601,a4cbc118,aa07daa9,c4e246c8,efeaa3f7,d74028c1,93b77964,f10ab5d6,f75d077)\n,S(af8ccbef,c187a3a6,83f6ab6,8ff217a1,96a8e27,dcec349a,b7ee4a74,446e9d47,3ee327c,99880392,7da5b625,be554e6f,1662a733,25a8fdc4,990716cf,6be941f0)\n,S(1e9800e7,891c261c,a3451d22,44a54a84,42d33458,a997b365,4a6198bc,7dd3d26a,322f8986,bd6ffc0d,d5f1a321,e82e6b37,978120c9,66f753bd,5669a773,65a215d4)\n,S(115c62f2,9f008009,5840dc97,f3a90f30,aae4ffa6,a2d255e4,15d64c56,77150044,4d944c12,7e37ce5e,fd7660e0,1e4fdf0a,cceef95e,8bc2da14,a8fd7e32,ead8af95)\n,S(1cb9f9d,acbf79dd,b34d78e8,e51225bf,3f53135f,f4282ba2,59855968,2ae0178c,8fd3a4e3,7a189bc9,421595e2,bcf234e,d7b602d0,855de84a,50c68cb4,bd1a4bf5)\n,S(62a15bc4,63e4c167,4bab2a5b,dc991e39,af86d258,f9de770b,66a79ee5,2fbfe357,b78fca9f,d9467e4d,256da69f,e6f45522,d376fe41,e8ebde9f,9f7bde4b,8ef52749)\n,S(574a6ce0,5bf31948,31570914,a73bed4e,6bd2c82a,5a19dec4,54b11e93,5edf505e,e7b2e2cc,cbd6f338,f0ea60b8,c1a9a50e,d02dbaba,8bb5cb78,9b281a97,5c001318)\n,S(64c6e37c,a3a361a4,baf9ceda,d9ed24fd,c5ae50ab,560e6319,4adad1d5,264084e6,e6e42f56,56b6b404,9c54a07,f35ae004,4b7a480e,8271c8d3,f7996ed6,68116067)\n,S(49065a97,fe4a8de5,55646af8,475607a7,71b27746,ade7fb11,55308107,4900fd84,985d689f,67a03090,9ab8eb43,c7b2767c,94e7217b,fbb43342,83485f1a,d70ae7f9)\n,S(6fd32ff9,185790bd,876a683b,7e889f32,8500c91e,7e5889aa,44394caa,330999cb,12fe8084,1be1f25d,7a93784e,9c6bf01f,efbd6493,8f1a678c,64497a8c,85d2de3b)\n,S(4a67d4da,48189c8e,6ff34812,f7094851,2d6d12c4,26fdc98b,4ebb92b6,62d3b185,58ea83f2,f6e5b777,737c668e,efa71b8f,3e50095d,389a5540,684cea51,7f8150f5)\n,S(ea1ac931,d3a92770,5d20752d,b9adb464,edecf4c5,95c20c85,987e1beb,a79f4db2,cf689b0e,25aa9601,58316597,b06fd91b,426b5753,68a48830,9c3f6f34,6722b83e)\n,S(8cb35a6e,248a0527,d572663f,7abc99c9,61414af3,f196c6c1,2de4dbf4,dd545c5a,4b32e4e0,47dacdb6,66edfc3f,a08d500d,c43292ab,f36bea7c,4a3952e6,680cfcfa)\n,S(247c800c,f150c2ea,cfef8dfb,f4581560,84318684,430788e3,c8d99ccd,d27f21c8,cc82d8dc,914fd1a0,e626462f,5829eb7e,a708395d,db3e70a7,57942e85,1f1d0db6)\n,S(6543d7c4,7fb927c,fb0f3566,6103708e,5e0c4a4c,ed202482,c9f48647,33426673,e252b29a,69b4ad75,814ae0d1,631ea750,20bbc730,3fdc819c,88d8f3d4,7907ebab)\n,S(c4f11255,d81c33a3,a09da4ac,af5c9c16,d5e759db,2e1026c2,9b3556b4,c388e6d0,e2e636a8,1af48ab5,814e5530,e48f518d,95379eab,186e94f2,4fcd551d,1ca8fd49)\n,S(cf186a9d,85da39b7,7383d92a,14af5a05,b082848f,c9e60598,1bad8ef9,5e019eec,cabde21b,c860fe08,53f672a1,64010968,6b49f37e,61cc642,48f455bc,b079e3fc)\n,S(e6c3e353,ad69dc13,e595c2c7,a88b8fd8,fe9d1d47,3d45f7f6,be9ae903,86ea8f32,7d3becc9,4f455c1d,21610800,a4985f33,96b5a920,d5ed2b57,2107c28,ac690be1)\n,S(3827b3a3,9bcb554d,54695dc6,bcf22911,d1ba01f7,730d1c11,8d6a7b2e,c1060988,32413047,b7c9ee83,1b818c5e,cb8f4c10,c800a362,419227bf,d9f50aff,ca25a211)\n,S(ff37cd38,a4b149a2,a8dae898,c40b0ef4,4b55ed85,11b5413e,48f5608d,cc6d24fa,5e615919,8f4c6665,7c3a489b,86853a95,f3ffded5,20433cec,a6832cac,b9c49048)\n,S(bdff4fc8,5b492fae,1ef34322,9e83b751,d9e53c7c,455141de,f68d3e8a,320ce509,e8fd9864,9dcc5d66,6155088a,29959e12,531f8a4e,44d70b8a,43b4fde0,8bde3d20)\n,S(fd6ba29c,313ff2d5,7fb2719d,9018f11e,e59d1007,24146aef,625a9b3c,3bbcd0af,187daf5e,913310c3,39f584b,3196b877,5018dbe8,1e38abf6,de73e97d,f5c1079d)\n,S(ea3c422d,48606929,ef72ae1c,3ac30178,4f4b5f78,1405fb62,1d0b710b,1b29ff28,e458b41e,c6c3e06f,c37637ee,fa316e25,d10b377c,ef99aaf2,564fef92,33bf208c)\n,S(46537133,4982d600,8d228924,f0b459b8,2ba8aed,af1b3c39,f87053f,487b3978,fd96654c,13189def,f243bb29,e2143dca,3b2444da,3b895700,6bbff65a,4dadf3f0)\n,S(fda493f1,1226069a,ac76227f,9f9e1051,b5b29b4a,a2d0f9dd,99637176,8578d8f5,5a33593d,f63d136d,f43a69d7,f9803a62,e04e55b5,25633a06,d8eb86c7,e1d46fa3)\n,S(74fc42e9,5f09018a,5468e283,5ea36fee,7ab5e757,c57200cd,966174f,39f3e4c1,ccaa0b40,3802c914,da86204d,45f8f5d7,3760e075,4bfd10b3,2a8b2521,218751f0)\n,S(98cec4a,997b79a0,cb818da,58e41477,d98f8c2,8140fbaf,e118bb1a,ec483d53,2fce6058,14945cd5,367b82fa,182c19d5,ac422d9e,840eae4,d81689ac,7eaaec08)\n,S(c742ddb7,89a5cbdc,2055119f,697fd575,e4fa1540,96cc5fc1,3c2374b1,13cba60f,9b0af128,34a990e1,d402474b,e6dbaa1,b32248f4,f2b1d680,13fa0dea,46f3532d)\n,S(dba2e04f,9a78066a,b5897913,6c4c7224,5b5973d8,3b13819b,77409fd1,e791eb89,34747922,3adb5f74,168240e7,a178f077,aa0e90e0,870456a8,89dfca5e,633baf43)\n,S(6d4cae43,6e598586,7b984dcb,6c2472b3,6cc47f86,eb69fbf,1069c69c,42f6538d,c7fb58c9,f0c4f7ce,dd7c53c9,23efef52,125c2b67,d67f1ced,b98bb1f3,d5e0a84f)\n,S(4c457f6e,d5b67b05,5b664ed4,3bae291a,9ec5b539,6fd9410f,9cc16a03,b8523982,492e5bcf,20aae19f,5462ed68,2a72827a,a435f47f,ec218e98,8e91fed5,20f344eb)\n,S(4d7e6922,34778a41,f58033bf,d74ae295,51fd8ac3,64cd817,9cdd441f,cb46eb3f,756ec0b2,ff5c9d3c,3a453879,17ada4bb,6d7bbd07,bd10d2ad,c092f46,c62750c4)\n,S(ac5be50,69bad479,bdbc565e,ab74ef94,4a48399c,a4af915c,fefc47e3,7d464b2,3246e3fe,bc5810b6,37722c54,69ce45d8,8bad5daa,529b4381,928b7cfa,de874345)\n,S(7da88d41,21350139,bfe6a481,2534b25a,24f91e0b,60d882d1,5d69e840,da3995b2,9888ad8d,62a7a4f8,700bb03c,f9772432,6a2d092c,98adbeb5,cbc20348,f0b9c587)\n,S(389ff31a,63239cd2,c9aa3eb,4d3ceb49,5d3b922b,5d137d4,e8b52be3,b1abf149,b0ec2a2f,bc840bf2,8a22ab22,b76c1485,42f54ed,5515ad49,dc3c0037,38fe7c93)\n,S(c1cc1acf,5fb128b2,ea65afaa,d3d5736e,a94b2e49,8dfcf6f8,f3c27a5d,596c4370,8903584d,1986ad31,6cc6bf2d,aa2a88cc,ecfec6a9,c1bb153b,27c409e6,934fd38e)\n,S(399ace52,b92768a2,a4740be8,31c96c04,2a34957,e91b3cf9,8b3518b4,87c9aa3a,908314b3,abdb3a47,a117ae09,5d609fa3,fd9af1c3,ca04a869,786eb134,48800005)\n,S(69543fd,8c9d01a5,702d9859,305a52b9,470cc606,cadbc76,d8283ba9,ba06d0a2,e998e7d9,a0c372ed,2e348f17,b3298088,404eb1c3,8a901d1b,6f4e8a19,731057df)\n,S(2172d54f,df9b46ef,5a1289a5,872b1c28,911e553c,f703ad6d,400b6af7,e8200100,2121b47d,3b790e5e,c820df5,772b226f,34a8fbeb,f642b5d9,edc18971,1b687a8c)\n,S(f606f7e9,37a324e5,d0e6847d,24923965,cc27133a,10e43f28,6d45f7ce,9d5e8b56,70013fb8,622a21e2,d1337944,89324a13,f5b80580,91ca08d1,a30e7571,3e86e007)\n,S(9f1520c2,dfceb64f,1f432013,b342af35,2f95bb2d,d49aa14e,dfcd8e71,7c40fc99,fe8fca26,feb1f004,8fa4fe3b,764a907e,d53dc0a4,10308199,6cad54d3,898e863d)\n,S(6670af6e,7587676e,eb0674eb,75c93d38,53afe418,cb286605,18a9370a,231eaa08,2993ff5e,dfc071ee,97fcee9,bb12fd8,fb59fccc,524d8537,34ba4cee,4beb09f3)\n,S(15c6d58b,345cc4bc,e4ca4e2f,ee954c2d,40650a4e,ad6c9524,65f59a94,b3898350,894c53b,47276196,65a0f3ad,f528d2c0,221b12aa,73df2cf3,a6b0e778,a363cf7f)\n,S(bc4ab6bf,60dbde42,c9293ef1,75f85a48,adfffd20,960ea454,8a919977,75389621,fe28a0ba,24a4e2a7,45d6bb68,ecd71931,791a74,61549a44,37a34761,19040e42)\n,S(5dab1c63,23fbf2f6,e495e87f,1c703ba8,64f20e50,4007dc80,54ef2e11,d3e6ee1,1fd0c200,cf4460bd,ae6db415,3e68bffb,e7f01ac1,6b30e305,9c134a86,52695d93)\n,S(2df1cd57,d7357c44,7be28dbb,c339ceb,5cea0bd8,e702fbb2,dd67c189,6a8acaf2,33192011,20cbc8dd,c3b9c031,94db76f5,86eefa67,995dd741,492f425a,e2f1b9e8)\n,S(2d81ac17,5a02daf0,83100585,ed2bac76,3d9f9764,15356fea,584ddef,60d9ab8d,f9908cd1,3b1785f5,78297fd4,9e6c26e4,21052e2c,ce9f51c9,cd58183c,2df9a0b7)\n,S(1fac1762,fb732e73,2440d40a,5356eb17,67b1e7f4,f11e8db5,9ef90702,437dc097,edd5784c,a58d5113,2b5a08ac,e75cb30d,5ae7ce27,129f158,4df5d95a,7b9b8729)\n,S(d06a0b5b,4694b90b,80c93e88,4aa9086e,45cabaf0,99b15a9c,c2b19678,38c8c98e,4cad46ba,2777b24f,cd1b391b,222ff3b1,14fcc814,5f78ada4,98620cfb,747def3)\n,S(4928df27,590240f9,9907928a,cb6f0695,870059b8,cf9b1d69,29b152b1,7de53445,b773e60b,655b3b0e,7b0c400f,37dc336b,240b83cc,286a8ac5,3dba751a,3300d505)\n,S(a61bcdf9,cd541811,4ba99261,7322827f,f945d450,c331ddda,1b8639ff,87a28390,3e771d6e,d6fdbb28,54601b2b,301fe24d,8e61b370,ebe644ee,b40fe807,b8d93a68)\n,S(535a35b9,3e2fb7ab,b3b1228c,a7977,fb8e34c,107f093f,9f641b15,11db93c3,2471ff35,5657cc8c,38283fba,27c2e3c2,92475fb5,e8d52e96,f0c9fec9,b2ff786f)\n,S(e68a652c,e0140f29,376888bb,c6be70b0,f23ad42a,d10b8acf,a5f790b4,c465d4d0,49d7390c,c368060b,3134ecb6,dad52120,ea6e0c7e,b80c94c,6cf9c1d,3c1a7385)\n,S(e8939e7a,74dfccd3,ef17855c,3ea20e99,f5f05f6f,8bc4757,6b4f0e99,37e25fde,6b48a73e,ff0a55b7,c90c0fdf,449e4c2b,3773f454,da2c388b,3e0829fe,d661b173)\n,S(496013ea,31451874,800fa293,a6e70ac,7fe16483,67c31daf,bfd00faf,48751543,b5715111,8790556f,8a4001cb,282b3312,581e1508,b8537f65,6142e2f1,ab8c4332)\n,S(444735b0,b1efc3a9,56957a07,22604d09,bb0f6c29,e7cc5201,89ddc3c1,804b1e1f,b1ad60a3,461abab3,a9732a85,7050e55a,3e9a439f,32a5b21f,9aebe400,7e59d6e4)\n,S(5805ac8,4acd7d5c,f85a40e7,4b9c98c3,e8882189,e77aa475,da3b4114,3ed9511c,c952923b,fbba533f,7bd70dcf,d8d69b7,1ad0022,aeae363,bb48134d,6a3c07c0)\n,S(8ac11518,30fdc785,5e1c53a1,2b690202,c12619bd,c46c8898,dcab77ef,279a9501,29fb7cc7,7867fa0e,1d015493,abfb2000,d5deb3b8,ddb3053a,d59d6bd4,a9ca4fa4)\n,S(aa47add3,e42998cb,68fc8a7c,cc7beff5,4d70226f,22f41ec6,7bd7b444,aab542d,cfa5ac81,ebefd98c,3af4f9e3,9f67459a,4f8e8c4f,c1959816,f771e75c,c43683e9)\n,S(f3504127,a27a14ee,92133f75,364922b7,d3984898,e433d3e4,19e88db9,e599889a,f1af9f7e,9f9868a8,84ecdae5,47bcb886,56c6d423,a066b313,c09cdf08,601b45df)\n,S(33730f44,edcbe688,35887076,69a989a6,272d3ce5,9261b98c,7c6eeeed,7e4bf08d,3f833928,d87716d0,4b2a32d8,1bd2d789,b6fd057e,cc70a794,8605cbe6,e1775a6b)\n,S(3169d6dc,8c06f584,880bdf07,29249cc0,a33d417f,be137478,6e5b4a14,3edfb0d6,2a91422d,ec563839,ba782f59,68f428c8,a311600c,2fde77fc,ea163e86,aa74ce5f)\n,S(d8c64582,13aae81,cf07a64d,5a8dc3eb,c8c43a45,d57f8e9,80cfccc6,f02a4429,c4873051,968863ae,8c92f195,c9fee3b2,c4773d47,849e2a7b,e7f48c4a,93822aea)\n,S(ae67101f,307e246f,7a7cb039,5631b884,7e59c8d8,14da3fe1,7891f69f,402b6f11,f5f2dbb4,a90b09e8,b96767af,a9f9a357,1d3900f9,7d8222ae,e411e1c7,11ed44cb)\n,S(a9e87231,83ba8338,1c0a7dc9,c81a2c5e,b4e2ff43,82574f0c,1a9d7f14,81dbd8ee,96810599,90d90e33,d69fb59b,ee68344f,333153ac,3d73a335,4b7ddd6f,96468901)\n,S(616bf21c,ae7d40b,2694f43a,a33e6848,694ef879,fb5bc48d,ad141e34,e43376f2,bec18f83,2aa8a0ba,83245115,3b5a4faa,4a27725a,a3d9e799,bf05dc94,9880fc77)\n,S(121e8335,601f33d4,78a882b1,1e9be5bb,39be47cf,701a695f,8d351098,af3f5c2d,2e992933,18faa04b,7d85fdfd,cbff81df,10dd070,4485b659,f682a298,4d03b3e8)\n,S(bf884797,3025ca9c,9413948,fef1bc48,3a83cc28,4a909933,25c8c97b,b89f1141,1953a326,3d26d1d7,86d5ae3a,7838d125,6de24760,6abbb63f,e2713f6,6ead5386)\n,S(7c28e9a6,5a3800f9,85c94d4b,ddc75cd0,dd1b06e0,faeda124,e86600a5,6af811f0,a3756db7,e339f03,8914cedb,707427b4,2d396fd6,f2e43863,13414863,8ab5c277)\n,S(e5ec6dad,45e62cf4,1ccb5bf6,bb92387b,46be0791,31bc2b9c,b8b93172,90a66077,d0045ecc,775703ca,f854bea4,be3c4d21,2bacd092,7a210eda,67c33aba,e44f0e19)\n,S(6fc96e1f,92039545,fb31c352,544a5974,7036263e,34d8e043,58336169,118c2fed,d032de87,1571de8d,96b0457f,84397e36,6ca7c20d,d90d089d,9aababad,8b8a9a51)\n,S(89e3d351,1c219c47,42e79091,47c13146,1db684dc,e1a1149a,cf49115a,746e4133,aabd970b,672e8468,d84b53d2,303d57eb,52fde5bb,bb224b03,6892f918,630c5c90)\n,S(2b7a60f0,b2136453,878eb44e,aadb8da8,c043e947,fea1de8,4ff8e18a,390d5890,c829b16,1ba032a0,59340709,1b38b365,b806686d,19026f41,ae8bbab7,d04a5244)\n,S(464b9f1a,c2c2aeb7,e6f7c3df,a8782f25,bfeb9879,9263a9d4,2f872050,6c9627e7,7c260bf4,59e1bcc2,df7761db,e503875e,9a23a107,6cb4e8aa,dac5b5b5,b6f7502c)\n,S(79253e30,43572295,e331519,e774b670,b25141a,986eb5ab,268b63a2,759b616f,da609d7a,55b62353,b20f5bae,969665ca,ed6467d8,f2577f69,10003586,e27f88e1)\n,S(634287c,e900c0cb,5c2b1967,f55190f9,19acb09,43596773,87642d16,dd399556,a2350909,8cf01601,30c042db,253334ac,223c473e,312bf758,1fcb461a,c3debead)\n,S(761121c3,8bd8fd5b,a3418557,f6a75b42,d7ef2f4b,91620223,3587f183,421bee98,4014715f,f9c17435,10e6eeb0,1bb29226,76070e34,afaed040,5c897bdb,52dd530f)\n,S(2618c8c1,bfbbdf1a,59da3078,4e50a2b0,77990fe1,c2f074b3,e63dd606,6d453413,ae539a37,20f5b6ab,18ce584b,4ea3cb46,4bdaf35b,326fdab0,58169ddd,32a48da0)\n,S(d429fccc,10c6f025,fc7a57e1,949308b4,d91699b5,c099820d,ab31f1db,90f685be,da2b15c1,ee155918,de414ae9,1be51688,a8df043d,6fb6c964,689bd4e,5a648edf)\n,S(6a18e3c7,c04b8cab,36e07625,ba2daef5,bf1e0cf6,36650b6d,56dda8d8,e4e8b705,66291330,f56c96db,ebf9c9da,bc52541d,20e75440,25fcc49e,d6215d8b,c0e94eec)\n,S(985b6846,d1c9f3fe,5482fa4a,d6a21c65,d7ca3eff,a41b3220,1a37a122,f8f97756,3e2b23dd,98e18f6b,76a2f2c3,2c543f8b,bb9dc6c0,8d391592,d56f5440,aaa3a92e)\n,S(948a0ddb,4ba838a4,63eee339,5c7bcca2,96fba8e3,9654ff33,55c9296c,9e6e8c64,c5b34c25,da19d83e,b67b69b5,2e527d61,c7b705ed,2f794d2e,12c4325c,3cf5c1d8)\n,S(4332d02c,1332b03f,b7a46b47,e82617b2,a437fcc,694868c4,256aa40f,a8a3de2e,e6e5196f,5f9c555d,a94327c0,39411780,393985ab,73765de1,e1bbe0dd,8aaa5289)\n,S(5dc977b9,2ac1c895,f3150b68,a8d69f5a,f7e12dc5,6b211d96,a67cc3fb,722a5aa3,45888ca7,4bf1ec9e,1cbd2912,3cc696d2,83260c34,3410217d,10fd0b95,9d07844d)\n,S(5b9cf534,ca94f124,a9b0cb6d,f0003924,605e3bd7,d063a2b0,c6e1a81e,3fd15764,44e98dc3,b0516ffe,bda48790,fa0b2d67,f9ba4b48,ce88bd1d,d81bcbc,897458)\n,S(84353007,3a63714c,7d26baf9,c895e2de,e2feb4b0,9746ca66,97fd7ff6,d5372f59,d7373a9e,37689d44,4cb7361c,f2f3452,3f9fea7c,826c62d2,3ca3f368,b0c7a175)\n,S(9cf0000e,3eef9b5c,89c8485f,c3826e78,8f1a28df,f8746619,804030fa,c21e6a61,2b3dab3a,d8684b2d,94e1fcb9,d2005c20,2764cd76,aa91e0a1,ac2612f7,fe91543c)\n,S(bb292fdc,5897188e,20888b25,b491a757,8ee02853,83aff5e9,99671a24,4ce1235c,d3b6d9c3,50ba7863,bcb83990,95893348,d5e9b8f7,27e1a3a0,9e02f59a,412507e5)\n,S(95d6d1d8,9835ed57,6a88a21a,9239b623,efd2bc6b,f27c5ced,2d770c90,fb7d680,c91535ad,39db65ce,fab4ac72,f3ce692,b39e7d38,c72ce468,e40bfe06,6cbaf048)\n,S(cbe3f20f,a164ec20,9c2c3fb9,ca0c95,15ea3787,df2c8fd8,9ee50a3a,85d09a46,cd589754,faea165b,48e22280,4186e6ed,734a2251,a6588e8b,8252eff9,afb9a28)\n,S(3e01dab9,9bab9e20,59b1c215,ba67835d,2942f4,487d6094,9f39e293,b39f604a,b41ddc32,33365044,ee350979,8679f3e8,d0a556f9,e8b6a267,bd5cb5e,8523d481)\n,S(298974c0,5543dc96,15f1cfd2,e4b6331d,c798918e,15e3f350,97213a64,76afef7a,68018355,55f2d8be,a74e02e8,747f60b2,22354ea3,62cb657d,e5cd8060,7a99da2f)\n,S(1d70674d,54763c96,ea3764b4,641d14f6,2aabdec8,a093c3df,d936793f,511fdc61,9674adac,697e44bc,6324378e,59753f42,80774101,623dc10e,8a4eb4be,38dfe632)\n,S(75220107,b43ab970,6261875e,c8f8b634,73c47aaf,91ab8fba,cc0b1c4f,40fece1,29094e7c,c3bf07d0,12aebf2b,fb56efb8,41bc9ad5,9c350b7b,885602e,a3aeaffb)\n,S(cfadb9ff,b3474ec3,27db31aa,b0bac83b,fc7f4c8c,9d0efdf9,2e7e7922,f779720,ffb7657f,6f7b8cc5,78f22ee0,2a99fa82,97d41806,cd2b8b06,ab00b993,d9a09b2)\n,S(24ee919d,be3c5603,adee46e1,39d84aa7,34a7b4f4,d7b826f4,64ce8b6b,c1cb828f,44039756,794b547b,9360b63c,539b8f11,ca651476,ed57fe29,364a5ea6,17ff1506)\n,S(5995e246,2f755256,f4d6b8f1,a5cbeec,c50ddb53,fe4391dd,1b530eff,7cb100f4,77ddda7c,7da05165,c46d7ba2,40127ff,fe78ac6b,13dd018c,e08161d6,d81dc64a)\n,S(a7233471,97dd478c,e129fa20,59193c08,364f8c37,1cf19c2,9dbd51c3,234d54dd,2c4e695e,ec2b2ccb,384a5fa0,1a96664,9cfdd711,1a1d19ad,92f2eef1,31796e68)\n,S(6466ab69,d5bc21cb,d7e75fcc,5de9fcc9,a57cfed6,3ad41c23,4ed56cd0,132251a5,76e7ef89,6dbb16e2,76622f5e,5f6894da,2e0c1ecf,c4af05d2,990dfa4,25294dc9)\n,S(a5eccf90,a29388ab,de6fca2a,bf216145,7fab8bb5,1e33d4f1,1e0acda0,f5c28e60,afd75916,468a11f3,73e88643,56690adf,110e74e2,c81123f7,94805b26,620e3ac3)\n,S(4251bac7,493678d9,f26e52a1,e3ed9e58,6a15d060,4d1c9cdf,89ed5871,ee9c2779,fa1df27d,92e6716d,76990c60,e6603bcc,4bb023c9,dff938d,3a15ad8b,72987aa5)\n,S(77a9e6a2,4c3cc21,d8cf6b97,3181e283,f40c9d0,26a81903,f042c2a4,fa7db30e,a1ef4fef,23f25ccd,bddb757f,aaa10ccf,e78d9310,72b2f180,b6e3de5d,18155aa0)\n,S(33fe7961,c40d4e1b,d6ade73c,4577fa2a,e9c0d20e,999f639d,e751ff7e,6fdbea6b,91b7d5cd,4eeb306c,e316e7c1,464c30cf,9a591994,7232b037,5840b8c,d5f54849)\n,S(43f66b2e,5ee52211,a48a9d8c,b485be2f,39535701,5249c311,5b682170,f9179564,5370b55f,fec0ebbf,c30cf7f,e63f5f88,3555e699,728e6892,1dbf7874,2da46a45)\n,S(4ad36614,97ef1074,d74c7f6b,446ea87b,ad2f0b43,73f5970e,1a745b6c,38b19bfc,8f5dc1aa,769a5bfd,5eada00d,436f850f,6f9eea82,329ebcfc,cd4cd60,ef5cfd39)\n,S(9799aaef,95204d54,f3734dc9,75b797aa,59336866,9b2f12f9,155d5953,c012754d,4b6b34a3,d31fe173,43a5b476,bc492d54,44c256ec,ea236f3a,9845a875,e83e6353)\n,S(c86249f0,c6e4635c,2d03f252,50e35d67,c1c22f51,6f9a8dca,fbc9d41,15d828a1,e21770b,37dc4d0d,f4d260b3,94bc76b2,46523893,469f1025,86d99467,ee95ec73)\n,S(b48dfcc5,de5687ef,c7282c84,cfd4060,61a08fe6,92fb08e,3accdc2e,6656038d,87e3e1f,ec737074,71f69c7b,c7147665,c0b52a95,37ad1566,277b6d19,fce8927c)\n,S(77dceb6c,62d65535,c625c828,fd3836a3,146fa4d,36732da8,58503fcd,4e357fca,d90b2600,5a139713,525b8521,3d370ed2,4304d08c,87fbb67e,9091d1ea,18228bd4)\n,S(5b588cbf,4cda0184,4df1cd63,3cc70ac8,69cfb43e,332f5c17,47364750,3175e49a,1424ef1d,f9e69e4a,84eb823b,2f95fce5,a52e1978,474697c0,d47890ca,fad55cda)\n,S(c087bbba,83934208,8c70251,8c9ddd93,2c50cea5,11c443b7,da107685,9320b20c,77f26a69,717555f3,b030e345,5cbe4b30,f637c23c,7ebc2b5f,6ec2207b,9209d996)\n,S(8d16057b,68f8082f,208b3e7c,fc2c558c,247d7d60,f117ea38,35e474c1,3031ed94,3d305db6,62ffd13d,100f6e0d,19c439e1,6ffb8ca7,eec6b14f,ed551091,d6ba3eca)\n,S(75fee0a6,3d32bc8,6dbb8cd2,af7371ff,d17daa96,5e1e19d9,242fdcc1,edc184b7,c2b1e4ff,abc30975,fe7c992f,f8091795,61ee89e,9a040409,10bfdc64,93efa2f8)\n,S(65da3959,b147093d,7d092599,a87710a,dda7fb75,460e47a1,10d5c1e2,6f368abb,3599e1f5,2f92c1e1,c3f2b463,d9a30230,a6f53028,cbae3ce9,5e345c5c,21862844)\n,S(6561fc10,94632125,d76b787c,a7539870,5dda1a5b,f4407f4d,f8140b6f,967933d3,4c06c7ce,a88e2828,3eae8aec,ab6e8802,cd083f37,6d3a1ad6,29fa9b55,920e6337)\n,S(c9a53f80,70493701,523041a6,a9d23343,c8a3fc30,6664d6a3,5ca5e7a4,80c4410e,9af470a9,b2e30d45,ebef0dd0,6e3b2736,369d4dad,f2366d42,18344a22,b6e4bf9)\n,S(5c1525f3,443e56dd,b009f45a,1b9a1540,c203f814,5f577bf0,3c734597,33b89158,967892f7,cb3ed91a,d74f4c80,3625707b,58574afa,cb99fc02,f5b3493b,eb4f4f18)\n,S(3565ccda,d87c171d,714add6d,472fee0e,69bb6ea9,75f61454,d69939cb,541648ed,9f7d87bf,ec2b6358,5dbd09bb,d008b197,4f02d3a7,6a8d54ed,d486a2d9,3462aef8)\n,S(4003ef34,c0f5e1a8,afcf29df,42a14a5c,4527d3dd,138b5eda,bd8de661,1d0e3614,67203152,44894cef,cc3d0a76,35839c2f,3d3ead0f,36174e2c,d3c4c682,4c3048c4)\n,S(f5c4df5b,37965079,3ebb7de3,9b495a26,13886422,929393,1cf55d1d,912ea57f,b0b93c3e,12a98cc4,5a3672c7,4a3610d3,aca34da5,7d31a968,f30047e0,31eb3482)\n,S(bc9f680,e21186cd,ba63533e,56580289,cbe8698e,69ced0b3,97a96793,569e213a,6adffb78,8105518d,50fb94ff,87d204dd,7bf54ef5,b91e1d72,713fa9,b32e06a3)\n,S(4dce8797,f1fe8811,453e15d3,7a3e2621,549e8347,4e7046b0,55f99d2a,c9a16516,ea5e6b77,cca7825a,95cfd9f3,7d70d7b2,fc8a8aa8,749a9d43,37ce0754,abe668ea)\n,S(f49b5aba,1ef29570,bd72a0c0,40009382,af2a4f85,26511eee,81869d3e,9759b16b,2e496c20,b996e8d2,696125d0,f60abc66,1d2fb343,b4181202,8658e459,d57c7f7d)\n,S(26917d4a,7573e1d2,7b4ff765,72bf2948,a2d02f07,7d7d7fa0,54a1bee4,92125ec,b8e47f7e,ae9b66a0,2a6fd2d5,cf8c88c9,7eb12530,a618678,ad5ce83,7cd8f97)\n,S(1b4948d6,285a2fe4,98cb71da,f213e6d8,7ead776e,cf8bbcb1,cd7faad4,fb29d290,1ab4081f,ef87d925,9b736c7a,92d28618,d5698499,b2f5e27b,dd30c1b4,24d3bfd8)\n,S(14d712ec,8179baf7,9dd9676f,ea99653c,f8b20ff4,a69636c7,7258bd57,99ae64ca,2e1db8a6,424650ec,32b0df37,d72ce3f0,6f38538,53bafad6,d366e04e,380c6ef0)\n,S(7675220,41747684,9e1967e1,54445913,a1111988,8b5bf813,4d9694f7,1d952453,3f1fb063,6457b603,3a155a90,6a722de4,de1a5c3d,6094dc27,37776843,ed82fd31)\n,S(5ac8e534,a8828b67,40016d02,80bb1e26,a53b16f,96b24937,fc84ba34,dd49fc63,193d020f,68f5fb7b,2c5a429,6909ce70,18568f87,115e987a,8e5e206e,b8a1fc73)\n,S(87cddeb2,8d16562a,531135b6,193449e,d618d0dd,6acf6c43,3372202d,ab4a14b8,5c1de4e6,7c958ad9,9411cecb,de2e9129,cd709425,135c84b,e5b68cba,9f846e2e)\n,S(c431ca25,a39ed09f,48e1dfe7,afa86630,4d4f8b7e,eb0d6d52,f8c778a0,424c84cb,450607d6,5b2dbe6d,35cf2d11,d3129330,489eded6,e35ff429,2aeae0a6,7100d825)\n,S(8c5021e8,985c1a11,4bfaf3d4,40edc4a3,aaa93002,5c2f2c1d,9bff3683,88a3dd5a,4cb960aa,8077d81c,71d74ba,6096fd4a,b6d31fae,d4315db1,3c2b60aa,a12fb108)\n,S(338e54bb,38a47485,8c17c07a,177dbbf,6e7a14b,26781bb7,70b9d717,6e513d4f,7876ae4e,84cacfa4,c22951de,f67763ba,c44a6ad5,52ee66fb,92f80cf8,c4420548)\n,S(87f3bca9,efbb3a21,917683ab,ccd268ad,3c7b0fe1,7eff461b,cb06ee8d,2f1f3c5a,a7a1d2a1,ecccfc54,4881f258,bf5fbbc8,e5cc11f1,a117c7f8,361a33ed,55229b61)\n,S(f4023df,8ed85856,8e56a037,5a6a78d8,de27d6dc,467c9aad,52407bbb,413a3e40,b2499142,fc4e3a11,6aa30e56,6d59f373,d5e2c545,3e274161,5cff9f6a,1fe178cc)\n,S(cfb51fc6,d55a8a22,89d3d282,fe63b2fb,453b512f,374e01a8,92708564,9c6f2d3a,8d4a3223,283811ed,28ec120e,761e61d3,e4ea5312,1cb2525e,b567fe9c,9070635d)\n,S(59a44a0b,97050147,bf219db,22249635,c45f77b1,1721c486,8937ce96,ae43c539,31e1ca6,6a910f3f,1de1d0cd,55eb8a76,400ff959,13774efd,158d931e,7039afa)\n,S(b99cee56,ec277a37,6ab44628,14bb3a8e,d8e26d73,19fd786f,8ab570e8,28a8ee7e,46e0f398,dda05d4d,7253b16a,b4d80c14,b6be5d31,d1dce230,62ab1135,c23494ad)\n,S(a39e136a,d96b1a22,6d039872,5da75b38,1c6b922b,52947cb0,25207ad0,d172bd2,7a5c0758,74de08e,3d10fa71,79639fa8,7dbfc977,8af1a3a2,d910a1b9,b6abb532)\n,S(6e8b4125,3b2eb74e,626dd59a,eb7512b7,2c23c855,35f479c4,5b48d974,57001976,cc0b88e1,e4e8c045,5e804068,acb85aa2,715bc82,ec21ab47,873999e8,cd2bc88e)\n,S(9942b6f5,681e4189,f7fb6ec9,8efd1343,cd1fb66f,1c98e418,9c44478a,51abb019,200d0ebb,b0cc2d52,90a11e6f,f7c989e2,d2fe986b,ed266430,56951679,8d0e7a9a)\n,S(7fdce1ec,3c57b949,44166918,b48af352,759636f7,2eafd744,642e0f7e,5078506d,d7785aef,c19a76e3,73b786ed,1e2d2ce7,53cfb979,65d3d46b,2e313a2a,d7baabd2)\n,S(6f13205c,958c83f0,f170906b,d77c79ab,5f51654d,88195b04,a70d4e06,93989c57,8ac9a15b,b386e483,b268d4f1,c950da35,33deb99,55116c99,e848f13f,73b55ee0)\n,S(f955a35d,833c69be,40a0665,f4dffbfb,cd405f4f,5b4247e6,e50cd4b6,3697654e,89f4fbce,22468389,a4af2407,f40eb37c,f56e80b2,7da1983e,4e2fa4f5,8bc9ee44)\n,S(dbcd152d,619646a3,42a25743,1df9798d,b58b8d1,89238132,e65fb6a8,26248007,66fa717e,c1948fd3,e4425e9e,2e6830f7,e57d23e3,d0219dce,c02b4d36,32d8ba13)\n,S(f1aebce8,e57b909f,ac7cfb1d,a2e7953f,99f713b2,8b35b5cc,71eea153,5e6e8ebe,8755fa14,3e77e5aa,60dc24d0,92e4f596,88b0bfd9,585fd57e,1b7f610b,e5d9d516)\n,S(a202164d,941f84bf,f89ceab6,50430905,c002bc5a,91d505f5,fef6e48a,4b55187,e0cd42b,2bc268b5,1e572e97,8b9bce4d,b6d4b095,ade884c1,bee3b3ef,c2f057ff)\n,S(572e1657,46fde7de,9480eccb,287f8b9a,b1344da5,8026861,e784047d,ca8ad68a,c174ade7,c066abb4,8d2461eb,405dad76,39eda86b,a0fd170,47569617,31eb5d9f)\n,S(f4e2c907,fee4d753,c08b1052,b76e49e8,b67047ca,59e64dac,58acce9a,5beba31d,b243aa2d,3a92d2d8,e48b8317,ca8fe897,2b76d134,248070f8,f41bf871,2c11c42c)\n,S(a6fc6aec,84455716,f5e9e436,d68809b2,26698781,f24d0463,e06963a5,fdf06dd5,dc16a615,548efd18,6ae135fd,f748d9f0,a96b7f4e,918513d5,73900aa,1818ca8d)\n,S(bd806817,5fde9652,9ccd8eec,937f2cbc,c4ffb3ce,b04cc9bc,c00cde2d,5a05f026,b2791ae7,8e014328,e0fe6a0d,8b6bddc6,db048274,5152bf76,bce228b3,64a26216)\n,S(f888a667,6f8c3d20,b9d5e810,ecae6b8f,2d8614b2,3a5da51e,16386dd3,5c0165ef,fb4ee20f,e429f3ef,f6f4bfe3,9c7b1ebb,57978853,de242239,42a3dadc,909a0dea)\n,S(7c8d1e05,5adbaa71,ec9023a4,8d160fcd,c3182ee6,bda76fd2,3ba8877c,409ae200,8a3b820b,ec595523,d96936f4,fce83779,c489b9a4,f2c8c524,f16e1764,2f907ceb)\n,S(18886ea4,ee257120,610ccd71,593baf72,6dfd9bb7,5229959e,75c14e76,26fabf43,266c6695,f57068b0,d33ad3f,7d02b7a,898a3184,39889d31,ffa98d86,e091531d)\n,S(fea70f1e,38c8adbd,3339a44e,cac036b9,1242a099,506789a3,184fdcfa,6be52cba,9dff6df5,ba8c1b9,ddc58093,a36670b6,76c0e2f,d745c468,83e26ece,3b9e7915)\n,S(4de30389,45aa3c90,76d99142,e79451b8,96dcbf7b,fe420c8f,b1dc4b4a,37d1365a,cee74e9e,9093de64,2401eb2e,201b3377,992ac0a2,13b0b16d,35664ed8,d287cba4)\n,S(67d09dd1,eafebe79,c63b8c40,1c102982,8c2d8e6b,6b5bfda3,73988830,1a104fb2,10eb5508,92660d96,8e99049e,818f89bc,d4f03558,d9f2c984,61ffaa5b,bd360a5f)\n,S(2b5d70fe,186834f8,d3b96d4d,87031cd5,325e55f4,ffa31b5a,f5ffdd77,40e6010f,646e7e53,24d2a373,78b1f54a,fb2081b4,38439890,c9f53b1f,7bda4d47,a895ed02)\n,S(cb426299,8700a76c,193f7b44,6aed0ad0,5d600b23,ca24c752,527f62df,e17be248,92843e13,f3eb60c9,e5f74eb,8cce7723,bcfd0250,4c2186e6,5ace939e,5819a8b6)\n,S(3ee6ab7e,75b3bc57,135ce4d0,1e6de88b,22d0b853,fd8e0d25,f9b04ded,418e4e41,69c83f98,4e52519b,931b6afc,933f5200,6ee1ab4f,680ee768,9ad55368,1b4bcc87)\n,S(583774b0,a95a5143,17232df6,f17d7829,6918acc7,2a385724,e904085f,c887e7be,33bb1e66,ee8cf17,30c16073,665c353,f8f047fe,150b4424,18c736aa,807c3e7b)\n,S(af32e1ef,39822787,79082b77,2a643ea3,eb334100,9a7a3fcb,a8838e0,7079dc1a,6985e28d,c660123e,73aee7e8,b1a36697,16938331,e4b4b7f8,b3a9ecb7,4e95fd4c)\n,S(6edf7fdd,32667551,9b60c740,efbfc3f5,50f7249c,deabbf9c,948adc16,e034d0c4,f08c5f18,5def7da7,5fb0de81,9b092691,64534f14,bb7d96d4,bb4513d,ef46026)\n,S(3b9a6645,5d268f94,6c504120,a81821e0,86257a60,b3fd9f00,72a0a4f0,1f16b42,ed583a15,aedf6c08,95f60109,6190106,3dfa4848,645b0117,e2e1bddd,2cfe7c7b)\n,S(bd035b08,2b5cfdb0,d17cbdf0,7a012b0f,27b52943,82e8bae2,d683ad0a,747a1039,6494cbad,ed4ad7e8,aa135ccd,572be8ac,e94a23c3,8b62bf61,ac90f9a3,9bb2ef54)\n,S(e25fbf19,fe9b180b,ae3316ef,89e0382,4dda59b1,41022ff7,a8c45b44,f15338c3,45ec47f6,58a3dd52,34241258,1852e694,7c2c8f11,9f4fbbe6,f6388363,174c7cf2)\n,S(2e231dcd,8ffd7356,52ebea7,50165405,f30f595c,3871ee6c,7c072e64,ecffc9b8,c664452,db15961a,8458f3d3,ea24ade2,7610d4cb,ee51927d,29cf3164,6f59317a)\n,S(7c0f29c9,3932626f,1b1ae126,316e065,fd2a4174,a66a6048,3b458660,f5338fc8,27ef533d,df6f1272,c0255d7a,587f56a9,b76e2c4f,98c98162,350233ba,75cd037f)\n,S(e702d61c,ea6f9fef,fb43e014,4794fb32,7bd857e1,70b299ba,31bb6a20,7cd5bb48,c4779881,c924ee3e,7f228a71,2de07794,ee5e28af,ca63af21,12ec0eb3,1a3f79c9)\n,S(f1780044,eadec1b5,bee75c11,7c1647ed,c362c5a4,35a66d8,cc2ae45f,66c852a8,5f8de9f0,f31b3977,f08f63ac,1380310d,e8b7a304,85c9f0f8,9a677572,329e1c18)\n,S(7a41b37f,22ec5b18,d4952c53,326665a5,1582ccb7,1660b69f,8d00701f,1f12dd9e,8440be13,2c57259c,80cd74d,2a2f1e01,3448865e,2429c2b9,db750951,607fc443)\n,S(94fff7d,8111d69e,198f4e16,57c3551a,a5ce6316,d520a779,ca4ccd0b,282db6d3,482c9270,26c0c05,578a75d3,8b1d8ed7,42541d30,3a933b90,9c3249bc,505c6fc0)\n,S(d6a6d44e,8a3ffaa9,56cac76b,1b05a4a9,d3775989,2f70e560,a54c9440,17f4e9d1,48c3bb22,cd839de9,9163bbe7,83a8a057,c7b93e87,de388b6c,dc57ba57,90863e1a)\n,S(cc0e25c0,8e24edab,1e5dbc47,71543b92,c47c0993,95b93d53,699204f9,50cdf80c,20c52cb3,7170cf3b,43b76ab2,cb4a6d3b,1a977c55,2431b8c8,220282bd,51fb70b)\n,S(cf953f68,4cb7d1af,a125d0ea,cfb83cb5,efddb6a4,41079be3,db72573b,62f8d827,70cfe366,a45d11b1,a847a7b,8e3e50a3,b302fa50,1afc89ac,b89eddb,30909c0c)\n,S(1ac22694,2b34ab06,ff16b711,2fd5fe1e,f8ce6975,143ab19f,bff99d6b,6815d5dc,a43d457e,2bd0975,4e9b7fdd,d9e16681,1bd823d2,24476615,4d9e3fa5,ab6539fc)\n,S(d02bbbff,1153804a,f0f800bc,f959406c,496349fd,a412e9e9,bb9f7232,7a4d65c2,5de80de,3c7832f7,1d744f9b,9ef08b56,d41e682,1c20f2f2,876fffc1,b802a384)\n,S(3ccad347,8d464ee3,42e1cc2b,2c4b299e,d8a60326,4837a040,25a8525b,4f1831a7,35ea2a4c,a59b55b6,ac79fdd,6ceb3401,47492f3e,49b5035a,f3036b26,d02691c0)\n,S(eac4d554,3e69c3ce,d762e90,fff84b3d,b3a758b3,419d06b,80f7ba43,36033688,aa64fada,c54374bb,fe8449aa,ddaa1846,ee00fb6d,c9435dbf,17f6a12f,d1deacbe)\n,S(3d2879b1,73d93713,3326d0c6,133be281,5df62465,d3dbb7a9,a028e0cc,63fca753,576ce64d,9b95b5e8,a9e3eecb,34cdb8d1,fd38a08c,2a6a8c9d,8f0a7296,68d6e0f0)\n,S(3f58ab8d,56a9682e,25137087,ca8c766a,72358a56,99ebbce4,cf74e304,6976ca14,3c9053d1,1a2a8a8,1f30f45f,1b480dad,f6bce20a,15e6315,447405a7,b321f29d)\n,S(4f5f1289,b48dcd19,41a9df0f,a8aeae42,2a4ed913,58845b97,3145ddb1,13fd12d7,b5c3e32c,c40c6577,3e286ed,a233ddf,42ac0d6a,5a3c3e86,77f8256,e0dc1428)\n,S(a64a29e2,a52dc6fa,e74e70dd,da2bacd7,e4a9dcdf,f9a0bbc5,ad0392dc,93376a76,ade2f8a6,faa9b1b7,7baefe87,33ddc365,c776f2cc,b0e5730b,4ebb0166,418a9590)\n,S(dee0aa12,c4d6f88a,d1d86f94,e1c6d3e0,b8694b5d,e234af04,994cc7db,c8480e70,cbd9acd4,cbda37cf,a9d368df,332d30d6,413ae1c8,d34219,3d4651f8,62f93389)\n,S(8677a99d,c8af6ae1,b653e294,80eb66fd,772b958c,882fdf74,f9c0f188,d5796936,31c668c8,348c048e,4b7a24f3,a0861f44,6621151d,4dc3e9ed,783eaf81,ff97232e)\n,S(51117d3a,cb73a7cc,2b229bc7,9bd6d676,f44aedc1,98cedd80,ed6178c1,f6997fee,5c638c04,123f85c1,170651d3,96343e,78f20770,321c1a4d,174e568c,39110cd6)\n,S(48d8af64,69670828,e87585d4,52ea1242,a83c9f8,3423e468,9c3ca383,9f141b12,558a8f42,f07f49a7,c6a9843b,9055ed05,1998dd35,9406c40f,dc4d64e3,5265e9de)\n,S(62ba9ac1,b0fdeee5,a143d457,41c164e9,d4060c7d,f5bbb17a,ecbe80f5,f6966d2c,65a0653f,2290416c,5fc96494,b70b3b99,9329fe67,3b034aed,b586c118,a5d9450e)\n,S(be4df7cb,679da56b,50ef2058,3c79310,508d8d05,43f3004a,486297d2,49febf0d,c1b56550,dd5f3e7f,a898cb8b,aca88694,ca697306,fa3fa09,95f6c43c,d5f3ba9b)\n,S(e49c036c,cca2e068,5acdf34,8473316,424eac2c,ce1550c3,a0c435b0,28c9979d,456bc25f,457fde5,5bd0d273,d27afd7d,21186b1e,3b42bbca,b168992e,61609a1b)\n,S(ae6845ed,a81d5d90,b3fddfc9,cb774c2a,976e701a,ad5c1302,7057a6f8,97fd58e3,529bdc55,322ae360,9926194e,7539a534,4501126c,e69b3e11,e5b4a675,7ed755bc)\n,S(52a1d8f8,bcc2b772,cc8717e0,2d713864,4c274499,4a19ed18,3fbeae31,bea25e1b,da2a0b2c,e7f17894,848e77f9,53b7528b,dbb80673,c70341dc,9f869e60,4189011b)\n,S(ffbbaf01,d89a7804,d5d19f50,dd5a4abd,cc5529c,90d26918,425f3805,96a2250a,88b5f7b7,eba662bd,5aa47a6,c2fe1322,2d514410,f6b1a145,38c37ed9,9a9880e2)\n,S(6ffa438,aab51ab7,afb840ee,d4f85725,4473fbc8,ff6051f9,fe5a59e0,ff8c942e,5b0226dd,3b88a040,33860dc6,69613bcb,50a0e95a,2ac7df8e,66884c7e,e602d775)\n,S(9c895658,f92ac47e,318f5ee5,91d26a10,c2c1b77a,c8bc8cb5,a45ec943,8a2fc79,708071e2,665ebd58,f1655e28,6de258ec,ef4b0115,ff74f38e,516acfa9,c01045f9)\n,S(532e6e0d,efba35b1,3fdbffd1,8ebece3c,a59bb3ce,54fbbb5,df1df6f0,c1861ba9,1af465da,d326bbc3,eb732ed2,464b4593,36f04b0f,a50ba7ff,f61b4754,aebc5b8a)\n,S(99043321,e3f27092,cdadd8e,b50cb4a3,8a8a9f80,83da6ea1,38d48e00,e5fff425,11be8597,325c250f,d9e5b1be,8e52c336,404ecb24,df29b786,ef9d1f04,8f77ea6f)\n,S(96799080,3a0934a9,9a0a6e94,120c22bd,7d79085c,c331e172,87daf46e,7c4084f9,ea90012d,18450bfe,6a520b5c,9b2812ee,574903aa,d75cad04,7dc46c23,98005e03)\n,S(74f5d157,915ffe10,cf6d9981,9eff7616,1f36f71b,4fc386ab,729dac37,3aa0afb9,54a0011e,4922bc74,12ae225c,dcc8c447,4e4ce4a4,941a409a,2c49d421,19b29eb5)\n,S(12692753,81c63955,5700ddeb,e8d7a751,76e5f3d7,2aa0631e,3e7cd6a8,c1927855,b92e5076,811002d5,44c554fa,1e1d10b5,3eefeffd,513357b7,2c5e0cc1,c39ae553)\n,S(84ef81b,1d143d73,5b6ae35,af18d810,d7cdcfbc,dd1c68e1,1aae007b,80230d9f,cae39a2b,a5b4ce8c,21ebcf2c,638a2e5a,b0dda645,aa6e01bb,33ca2edc,b575d42a)\n,S(1c22ada3,326e6ac7,6647af5e,ed62a85,c8d89dd2,a733ea62,dd71512d,ec9037ad,f5a598c6,1562a6af,99e46283,cb9e6fd4,bc4142dc,99600b64,49304981,16aab458)\n,S(6b91ca4f,f08eabd5,aa8dd35f,e9e04153,c00f1f48,50bbff4e,73671cc1,fa4aff1b,c6cdaada,85adf99d,4fb68c8b,6104f585,b3c9551a,7dd87977,8cb250fe,11b31852)\n,S(57bb4999,6d2e2157,613f0321,983736e4,b99063b5,e8f7188e,23f7895c,edf85bc2,93b46dc6,72eea90e,9274b9b2,73a82da,d0a1ad14,55b550e,94fdb765,ab47cc3a)\n,S(75790b27,ebf7566e,1056d9f2,463df8f0,67c38a2,78af81cc,b40f5260,4a33ba6e,ca0c8ca3,d99b0a5d,b065decf,346eadd4,3af8dc71,9ae06dac,6be99c5c,b89d2045)\n,S(ca7a75ad,a90b590b,f7f2b6fd,e3004a1e,8dd7b4f4,db8c4a08,f32bcbb5,474ebe9,b3278d9c,5c9351e7,bf4e8a08,e0f1dc00,51273259,acdcba1e,fd3ded69,83fc69e3)\n,S(a6dc68b9,3bf46294,392a8d6c,e52bb365,47b65a5a,f318765c,7a4f5d5,2f90b2d1,41ba6d67,fc575561,a0f3c76a,931dc62,37f53348,819224de,8f925c33,c90ad45b)\n,S(da2139f3,f8afc90a,c7f5a025,20c36110,2fafed4c,3f525b56,fe0dae1f,6bb6bba5,95adcb88,fa9ed816,dc097522,de5a394e,71e92c1d,f5bac36,9ad06067,1b6349db)\n,S(a32b2475,2f0e0063,acb4194b,faba9ccb,2159357b,23f102cd,f5a8e24f,413da4de,57df4143,bd8b27fc,c7716ffd,8c35036f,e09f8ab8,34f053db,ddfd3161,ebe576cc)\n,S(aaea491d,33824ff3,c7319d8b,a233c73a,741718f2,2c921392,b893894c,ade9bedc,c8fb291,84d8dc65,93a6a3a1,a5aed86d,a7ad0d32,d5f8ef4e,b24b6154,4c1a63a7)\n,S(2935e0e2,7a8409bd,224f3eb3,d68fb639,ccf75d5c,2b0315e7,ed388acd,887f2c75,c4ff024,62c9ae40,983d0068,180d4c3,977e900d,fdfc164,c89a938,c568aad4)\n,S(7fca8076,9e2e7253,5834259a,abeafecb,fdebbd96,5066181,63d244ce,770fe577,a3ddc3ab,f04ded22,cac3b8f6,ffd14ffb,69cfecba,7dbaeed9,9a5e13cd,55bc3542)\n,S(c5b5f1c6,1caa4a7,fa5e665f,57b45134,bc129ec7,131642a9,6a7b4191,5e8b483e,26cb3816,da5098cd,a3f58fd0,c26011e9,73dabb66,d8cc9257,6d37bfbb,9cb538e4)\n,S(410da274,df436772,64decf4b,f790035b,d7d5b174,cffdb4f4,56bfb6a0,79a50d88,71c81968,188eb349,6dc2ef1e,841979fa,254a1939,5bbf00f8,8e1d2bbe,ef9a6abf)\n,S(3d9928ca,334dc800,abb6c5a2,43a2681b,6f7976ac,50abf387,54058d05,cf67769a,cfcc01dc,766127b5,3e183cdd,80a0a1e4,62bf01ab,c4df115b,2e4f4e9f,95d2beb7)\n,S(65a8f57b,c523e4a6,4777ce31,2000a322,d858eae1,f39fc919,2e4f436c,c8040cec,820698b9,9e953745,b1ff7b0e,a22bff63,c9df69fc,c2055b32,3f07fdc0,61192432)\n,S(84e553cc,baa606c2,ffd3ef5c,a62725a4,55f4e539,24a72153,1ac3e66a,5d92fb79,34d6af32,4aaa9465,fd9f7731,1c01221d,4c0b5f75,1902dd67,4dcfd0f3,9cc5f8d2)\n,S(3b4a7558,28851226,f391578d,5d146da8,dda3d4b4,f79a36ac,5f8c166a,773783,e37c96fc,4de83cc2,eb4b3cc1,44d4d35a,1a4249bc,4cd7c787,7d0084c1,b1a59e53)\n,S(6dbbd12c,6164e8d,ea489819,37fcd12e,74339578,6482ddb8,9226d9ef,50cee6b0,89e48f49,b3f5d154,52e47c17,e1a68ace,eed3bc6,8002a70,33316116,ade02b90)\n,S(b64180db,3b926481,74a0b743,1f84af72,f1118e9d,6cc1fe02,f0bfb72a,97c441f6,b394f997,83d00816,267a4f0f,8c95a05c,33cc19db,eac704d9,9e1f0c2c,4fb25fd2)\n,S(2173f38c,f47377c6,d977fc08,ebb67f29,37e96fbe,e46b2115,b260f03a,216b5c56,bda02a78,3c4a684,fd88c6df,6becf56,3bd1c61a,4e79d36f,27e22fb3,212e2abf)\n,S(9dd9ecd3,f3732f0d,864df0b4,8cf35e06,ea2b89a6,a8a2756a,222e266d,fc5c5214,e42ea720,2ba68242,ed9256a,57db94ad,dcf00b1a,50ded06f,a70d712e,17e921fe)\n,S(705f9fed,5cebb62e,dd549526,af729092,9d398232,604d136b,2a121cf,e7af71a9,bb2cb17d,aa4472eb,12e69a4a,57a7863c,2b32c100,a1601d2c,44d2cc29,750d30a8)\n,S(f1a908d1,807169bd,7fb7fcd8,cfc125e3,3fbcdaa2,8d8df1a2,17b84c2b,2cef4410,e86cc08,804c6c56,f81cfa75,9851e67a,d792bbe4,87812cc1,4e7aa468,b8911512)\n,S(db0c5d79,35693c81,c752a475,6852260c,5625e434,5247cd5f,d40cdc24,e1355f57,120c5ea9,fb00d295,37721f1e,2539ebe5,d0de9bd5,354ce629,fe8c2e8d,c683daea)\n,S(5e4d5935,56007e92,1b158f68,3411da86,e979d470,7b53caf5,9a2ed94b,ca423ec6,71588b00,1a0e9ed3,27862fb3,7ce6aefd,c309b5a0,928766dc,b947773e,6272d935)\n,S(1a79ee08,3c46e5f8,8e97fd11,22410164,a264d106,7ecfabcd,4872af40,4fec7f28,f928dbfc,49bf7553,356289f,18a5c8fe,54f94bd4,d9406aac,c4df7a32,32349111)\n,S(e693f88b,e3be0c46,cb40a2d7,f3a0a435,1c3a1812,4abdf46e,86ca3af3,6cac5468,55f0b7bd,24ab2a2b,aef2db89,d8aec5af,fb4f354d,66538efb,78f094a6,dd649cc4)\n,S(6d15e8b1,f3c73c76,f73b12d4,f5e96e28,43bb6157,5d0d7e58,1bcc551a,329ca25e,f21f3ee1,84386427,32a0d05e,419f8a59,173f8cbe,6e3b765d,b74c3588,2d7f069d)\n,S(48b8f127,b2614af4,95303f2c,f6593d16,20dd98e4,ff536dc4,8a5aaade,3bddb682,8ed1b9ba,ec137c62,5127e23b,55d786d6,a50d191d,6803ae99,c7ce57ec,2f546e3f)\n,S(2ec32631,ee1e4510,94719f29,1a32e0a0,8c29fca4,8ff7e3d4,170a7c0f,5aeb3028,eb861d9f,e21b536e,58d0ee35,9d07d09a,491572f8,13eaac91,6105785c,697aa945)\n,S(f7960ecb,3b35d4d4,5ed2c13f,b55cc944,7ab72f66,ea1857b6,776b8ca0,afafce3a,90245cf8,d40f6b40,a7140334,da02eea7,d8f7cf7f,8f87c510,cd6d9ae7,8410f08a)\n,S(a94ccc3e,4b22f7e6,ef385780,d58f3aa1,139b29b8,c7dcb5af,7a247125,ba613ef2,ef7050fa,dd6afa0d,a89ba357,cbc6a66e,782471cb,8cfa4c45,e94d445d,a2845409)\n,S(e48a7ff8,6d80f430,d3d6f57,6c56f026,8c42b3ed,17086399,56d62f54,f5485c38,b1695229,b4997b0b,229e3c65,c7ffb42b,e429b702,47b98231,a7bd9c5a,5e9a6255)\n,S(df99488c,7d46c83a,cda5b422,b2a633d6,cccb09bb,f6488d9e,ac79e9bb,7f22d2ae,89490280,a958f45c,4501a878,5bd3c72b,aaf83a45,d91a38c3,e0477562,f345fd4b)\n,S(a150c6c0,4db9f9f4,6f64368e,bba348ef,2bb4e43e,29b27770,553ef41a,ef22fd84,61dfaa74,e1525a0e,c3922ab0,20e3ed1c,e7b5397e,b4485cca,e1f64f29,19c5c201)\n,S(9b7dedfa,452ec6f9,1d7aa167,bc984a28,937392ff,d856a4e1,204aa541,f3aa0edd,a37f4912,2f5168de,bca0ef6e,7c9b31ab,b4262c09,ccadbe79,10a4a844,ffd2c74a)\n,S(c7d77a51,6d0cea71,b20f75c5,579a5906,ad1aa83c,f9209a23,d38ed358,28e51904,399a7c7d,9e1a3660,37b0a7a1,49b0dae9,8e5a288,cb5ece7f,56de4d8d,74a44bd6)\n,S(d313a829,8e4de5b9,a166c2b0,f73d9812,fc1d1dec,b3b86e8d,8062794b,42fe73fd,6524463a,7eb26e2f,34f062c5,dbbdb4db,b8514c9c,60af6a16,fc9a8830,1f708fe4)\n,S(4bbf363b,4d66c693,6469b8e,83c4f18e,2e6c2a3c,498f38b9,787607fe,97211e5f,9e42ca4b,243872c5,8c7b6406,11817743,82bb0d59,c0de2562,9f26e8c0,7d1c60c3)\n,S(3be10ed,23a0ce86,d4a7ef1d,a667cf19,d471bd37,7467403e,3f84535f,861e9cf2,bb959378,cb317c0,6534748a,49bb9fa8,edfd2090,cb95cead,a7b0433,4066d885)\n,S(fcd1f880,d723963c,829074ec,8d29eec4,946da198,cba5d96,b169cdb3,5dca2076,9489bce3,a31362e1,c4cec275,5fa5fc86,d3b105ae,25bed346,7c0919d3,b2a87b01)\n,S(b5fb358,993d3662,b2e7114c,d8ea0681,f39f42a8,52cd217c,f0ec0271,fab317c4,89d88eb8,ee622cbc,f0dbfa82,8b04ac27,80a653c5,14df734a,791b3bbb,f3a71b43)\n,S(a86bbad1,7fca460a,4740f39b,d2ccab3f,30fc137f,604e77c9,55624815,8fe274e7,c26dc259,ba969ac7,8d294742,e4962c07,1394ede1,263f5a0b,d03b7a29,30753fb)\n,S(ed321f6,348cbc96,7e34bc7b,a935d129,9dd3fc94,c27d1467,88792180,1330d29a,b4078360,832b5de1,c77b44d6,cf07bdc8,fc5ac402,15002135,1be0d251,a3f7c3b5)\n,S(c8179275,e4ddb936,f55e827e,de094c4a,2c425b8f,701fc979,96ed7194,1ad17dea,d99f1c5b,e241d165,eb49b0b9,266486af,8ce5e963,c52b2622,e16fe99d,d82553a7)\n,S(6f08f13f,23b9b383,49274328,3f8dfcfd,eeaf82e,1d91e512,df1d0d7d,de84985b,96b6a829,f99f433a,6ee58ed0,50370ac5,665d61e,22cc7a76,a4a3fe08,d8bd602e)\n,S(9443a7e3,410f9d4f,ef9f8b60,9eac3e5f,e6ab5d6c,a11855e4,b35c7e67,9f8f9d5a,d8c507b5,78188c3f,31bc93e6,d07abc22,ac9b2add,5a11db53,8fa0f936,3beded57)\n,S(432ea8ca,3ed53681,ad3afcfa,570056ed,d38c8848,de293d2,e37703f5,133c502b,9e19228b,70b52bb0,8e66a49,826c6a61,965dddc,64270118,faa3389b,6bedff71)\n,S(1d17589a,42f82fd8,c5a584a3,d3c7fed8,5e22ffea,e2b732c1,30f903fe,1982403b,9f7bcfb4,8f18d208,26564ed0,245f0c6b,511e965f,be5e0e94,54e0f552,78c39ceb)\n,S(743399b5,cd84846f,65e778ea,790412ce,1ab8c6ff,ff7c098b,55436a1f,e18e6b2d,dc6cc81a,82801be4,e6566d3f,c01b6fd1,e84ff49c,e5ccf145,fb1f49b2,d8b784bc)\n,S(e4378558,3b2848c1,62e3e80e,3b5f9242,5330d232,e05f871f,a279a0da,7910b2a7,c39b4171,aa4978e4,7d3f99f,8179a189,d5e2421b,d076d1f0,80cdacf0,55624b68)\n,S(eef768a3,1b1639a8,f1755ac7,d00a6463,8f8a99ce,f5f42a10,664026b3,6718d63e,2a9005f4,cbf4e686,1af0043a,fe97b065,878efcb8,8be29ef5,ee648473,1e24a991)\n,S(15db4687,2504612c,f40dce1b,d601d848,fc2afa9f,b2de929a,1800caa1,bfc91fe9,a8b6e64e,7d508d9a,504678a9,d90b82ca,1e72360b,95a2f515,f17710cc,4e7eded8)\n,S(ad45facf,2529a84b,9d28d2a0,456a1fd9,d2b3303e,fc78e2a0,c7757bad,d4a4191,1a78e571,473f3035,16ef5867,8f77d5ad,bf8d8109,60f9925a,a6b4a88d,3654f069)\n,S(41a03744,6e027b4c,eb775050,a892bac2,1c19b66d,5fa4bd89,58c949b5,b9151824,ed7c44dd,fa96d38f,a721cb2e,60e07a84,27c53acd,6435ce74,bb45437d,95140317)\n,S(2020b869,58f4c7ff,2cf64589,f1043d,5a70d5d6,dac0740,56011f1d,27217ae0,111959e2,2757f431,a1994617,124eb1c6,b37f5961,29d52aa0,490b94f7,e1c4e9e0)\n,S(2f99a946,859f74a9,50f3bf27,d85a169e,99c5f755,71000180,283383a9,eabd4ba1,3e622182,d3caeaa2,47a4ed24,6e608592,36ecba9d,4e8d79fa,12854f74,df89fc53)\n,S(ddcf3989,57f65390,167688c,2e227f29,e7c5675,d4a83a3c,177ebdd1,9e369baa,a700c63f,3fa6833a,239a3cee,a90dd021,c3c3428c,f2b11b87,3da1dc01,2f4b2431)\n,S(9863a7b8,4252360,19e2fa9e,9319c5b,92df1eaa,c0b7917b,73bd1042,191ace4f,49a499a9,281dab21,4bf09f8c,724a30ea,3a1fa7ae,4f1b2b6a,3bf63562,e03b69e6)\n,S(6c5465f9,ea2c5917,34f3734a,64b8e92e,19cb4def,3c6d5d2e,467a8f58,dd733886,57e22bb,179df35d,15aa2616,a319ab3f,768f655f,a1c07c8d,3dafc443,1e0e733c)\n,S(ab375513,360b3beb,d0ca387,fb0a0690,25acb654,fe703a53,d979f14,50f3fcdd,3e9c1149,309a2de5,9b7842f4,3c37a6ed,57f0f776,503ee7c5,46445c2f,6c41be4a)\n,S(6acbe3ea,4a72eeb0,b23aee37,905b22d0,ff0878a9,e9143111,4821207a,4c2603d2,1ecefcbe,9f934d96,a163dad7,6c9e6806,ac2ca23c,e495a533,aecb19d,df0d32b9)\n,S(7955d144,58fd0c42,5e4ac9f9,c766e253,b4ddd105,7f1c8c3,653f95cf,3a955d89,8fa9c5f7,304387f0,94a89225,53a20287,40c6723b,d25245,84735024,9650aaca)\n,S(b5972d0c,90433f,702b25a2,27bd3da2,d488ebbf,e5782132,28c20cd8,35ace377,235470bf,7fbc3de5,279ef70e,d174b2fc,e3e78f84,5c0bf212,cf3d64cb,42b008fa)\n,S(a266a810,33a5fa68,a204f3bc,53cc79f2,cc500d7e,4495f8e4,d9cb48bd,4bcf886,31a8b1a1,958d15b7,664390e6,a46f3e37,d52b7824,5b0b91ec,b568b7bd,f55949f8)\n,S(1c6412ec,21191b63,5bbbf47e,1e9f7c21,ae7f4f3f,7de0f123,451e421d,44b9cc15,833f8a2c,1111c4f3,f5973851,d0256309,6e7fec1b,22ff969d,82a62284,c42c685a)\n,S(ee3532ab,17575b57,9c19ccbe,fee04ff3,8172677c,5e625f68,a7462107,3e0b7fda,f12e10c8,b2fd987b,83dff04d,cc48ee6b,4b704b4,92b2cf53,a9af4510,6e7e8718)\n,S(5ed10fbe,4867937,2ed2765a,f7f5b4bd,52ef9a4b,96515e,37944d9f,ee1a3838,8c4eb9b4,9fbe3924,ed8ac641,25dce66,a4bffd7b,5fbc68af,2a8c8633,b4080573)\n,S(fe348a21,f04c85ed,69fe7345,f73420e1,b8f6b859,7082152a,15a1d535,d01378d2,d595d446,c9f5abf4,5ceabd10,3e38e423,5069473d,7d9f9911,7fa9cfd2,81f2b7b)\n,S(7140369,b7b64ba0,861e1c0,b5ba3973,b573679c,c091623d,bda88745,fb2436e9,f0770350,f9799607,28c3bc21,30c6672e,40dfa362,72c50ad,1f376a54,83a12b2d)\n,S(6d14c4e4,8e981e3a,e7ec6b88,b1230096,a7465db,a8381bd4,aa82157,99dad15d,25e4d2aa,a5f2d12a,a4e635f6,db58b2d5,f9c6de8f,b5bea99a,50e5b050,e7e0f841)\n,S(7931b9c6,a6837d7e,3620558e,55504e88,4dffe071,5bb628d,aeadb0af,1a4383da,586caa73,320925c6,ddd12128,bf3bd38d,96b7a904,8422c2ff,9d5cfede,fbe80c0b)\n,S(149e9d6a,35b83d43,5d0e1f32,a1518b88,88dca145,27aabd95,b0ecd0bd,e5cec834,45807aa0,fd84cc65,e91d49b3,8d012fb4,f87b11cc,1906e1f,cbc74c5a,ce5606f5)\n,S(656b276e,b4b351a8,222f2b59,d7949010,1bf6e696,c284bff7,b809bd27,d297394,8746f309,5f8643a2,928ebfa9,a0e35893,905eb6d3,faa8e5d9,b6473281,7b763291)\n,S(60f399e3,68086989,ee62370f,f7852e1f,3656a720,539880a6,9884b60a,f1eb02e,55dca05a,8347be14,85251676,d20b779f,9e5976fe,4def267d,4f1b2b6f,d444ad59)\n,S(4dbda303,a67a41c,a46f417,54f9bdc1,34a305a,9018ce0d,4cadbe41,886eaa13,e062cc86,fec33458,d65f9fe6,4433b745,909a3b95,d23d7970,c22585b8,3fa48fc4)\n,S(816ae1ca,4d64cd9,5a7c10c8,fd819c6b,f8c8b1c4,f495b111,d07f2a00,dd0363d1,c09f6bff,c331d6fd,56ea5520,8e9d13bb,b12187f2,d49366b,2dfd1c18,66526009)\n,S(45839f9c,983fe0a7,c3b2b8fa,e5e288ad,87202944,c16d60a0,f18daf,8081b52b,f9368e07,4de74eb4,81f7beb,30835af9,aff40c6b,cda104db,2a785a6a,65dd8649)\n,S(50ae4a48,3a49203b,1e04c482,ec2454f2,44b7157d,b23bcd50,63c5b6e8,d4223465,e1b8cfd7,e7bd2e1f,65f2031e,c583bda5,a619028,5c364658,36dba37e,7d5f3008)\n,S(df77b231,60395089,19edde15,b21ace77,c5d8bb4b,ed26f9db,a694195f,616b72d6,8a4b75b8,9ecebfbc,b88cff82,2673665c,c99e270c,b33f3037,17dc9500,8b4344a4)\n,S(ec6c0e19,978e2f18,b74419d6,70274075,6d2d238d,63b2d345,437b0b8e,f233277d,f90dab9a,2dfc4cc,62571dc1,35bfe4c6,96bd3968,173ced8a,4a363f0b,2636e553)\n,S(2874416f,90e7fce6,a6d4eacb,1a722218,5af2a885,4852be4b,a4619011,617b3329,1f323675,f6ced648,8ba4c9af,7912ad7f,b8628e49,5b4da82d,448dd265,eaeb4466)\n,S(872367ec,586d3a80,f8c87f3e,83b6dd3e,529de5cb,897c9d2b,e7dacf3f,70ff4247,e5bb60e0,fae0843b,788768b5,e427e009,7dc571c9,e4b62eec,eef68512,a6a3ac05)\n,S(c10f2004,baffd30,ae430ce9,40c4af34,4339a0b2,13bf1f48,91b8da3e,424713cc,37be9055,f0c39b36,c546d456,b3f82edf,bf6dbf79,6343ee59,c3537fbd,8631c7ee)\n,S(14e12ee1,91c83005,6bdf0f15,3353e80,733b8bb3,b93bc59d,a356dd94,70d847c5,e9707b8e,e00c1781,12b32ba7,c66d7245,d487f032,18d20da,b1550e3a,9befcfb2)\n,S(dac3ba1e,2583379d,d2cdd89f,6ad053e4,3687eab4,ae804305,7b57823c,489fdf36,45e3da4d,88211519,55c20ab1,c2d1ec4e,d13a6942,fd37bfa4,7614745c,6fe2c041)\n,S(d9bfc67a,5c086ae,e879fad0,b03a5a2c,a2507dbb,fdd2cb09,2644dcfe,bf800bf4,e015dd4b,5a39f5bd,1536c8b1,e93490f6,e5bb4e8e,b23e6ca4,2fc14634,2be6730)\n,S(de6f3452,2f04ca0f,170d7e58,1d965982,8a9a981c,12f6cb34,761873,7996c61e,1ec16f3b,28d74fa9,43b9c251,f34e15f1,2fc6d814,ff024e3b,826054ee,f72a0cc7)\n,S(432ab355,338e17ae,884a15ef,2365283e,b35c873a,4fa8cd93,f54bf828,a0e30eaf,f56066a1,a130dbf,8a3e076,720c10a5,caa9af0a,7d86ab9e,8703dcff,95447807)\n,S(3d2e3507,cfa127c3,a350f546,d95431d4,8d96990d,b5beaafa,35a408d6,7f7c4d99,da60885f,4711c373,145655ca,b0f8a235,7f4a0508,2bbd2ac5,1b255593,a35f74f2)\n,S(7f3f431c,b96dd4be,37c29d0a,55f3b71b,f781c7c6,191983f,4576e518,24ba87ef,f4df4345,7649d24c,2b8259f6,f7177b96,cfdb08c2,4e9161c1,695c8027,60b8bfec)\n,S(4270bf59,f2c87000,44b6cdd8,b558e6ae,6f7b67d5,f128d716,3d604a7f,2f687143,358cef,2e8ff919,6865da0a,15a25524,6c4a180d,ed25174e,d08eabd,4da99315)\n,S(c663722b,9930fc9c,4113af50,d51c6539,b7931cab,ebe2ebd,46f95b8c,7f603852,3443e7b3,2cdf23d8,eb532a31,3ca4b32,b94768c,78f8f13f,719708de,925ecfab)\n,S(b0014864,e396ff02,cebd7b65,c66e57f9,168e8f3,95ae614f,21f8f162,c86c4e14,3f6c99d7,e2ec94de,ee65007d,ab501230,4a80b69e,a0e0672c,b7dbe4ba,182eb876)\n,S(64c9cd93,98fe9da3,5d3329f0,ccb82e43,c2d735f4,d2467b2e,1250c410,da84f41a,d24b50ab,71bf6033,d1206fc6,dcedf049,c223ef78,ff50905e,c8d95115,564372e9)\n,S(ffe0841d,51e05862,4f759706,b27db960,ecccfad4,cf326736,ab4fd9db,cd29b766,6bd1f1c9,f6956c10,4fec1595,24d8064f,eb5d8391,30b34a01,77c07491,79cf2562)\n,S(d1dd0c0,c053c597,bad38d63,c40d1e7,4b451861,cf0f20fa,47fd3f9b,77ca7432,34aa97fd,b59495f0,3e7b5628,daaaf66b,5c9dc5ad,de929032,80ba23bd,6c55976f)\n,S(87a436e8,c76bd7f7,a3e49cd3,af996f1d,9153f704,1b185d8d,f99eca45,ae8e5779,8d2cf3f9,12553844,ff905d5b,2a1fc36c,369ea4ff,6a89a027,b6dbe797,f11006f3)\n,S(a54500a7,4899c440,384f707d,a8fd62ec,1801070d,cd5396e4,b59e9ecb,df27c379,e216444a,6d26bb06,5f5b5e5,72c927f8,5315df3f,11da2cae,2f334572,33cb2668)\n,S(937ea4f7,99a319f4,fa5aea85,b48d6323,28417b72,8690a9c,88fbd51a,57d8187b,2931a7fc,9eb4aec8,b7dce4af,d14438ac,fce77bda,a7d3e7bb,b24c8554,cfdc9d9d)\n,S(50793c76,bb914aa3,204dbc96,cb04ff26,c7060863,8d497f07,a1eb05d9,b7fa6f36,afaafc78,b5e30762,b68940df,41de9ef3,d963b603,6bb1ffbd,eb13fd67,4bdab21)\n,S(8b600630,fadae564,dcd1c570,9bfe1ad5,f8da5282,61d55bf1,3a29766f,6d8bb5a,fbf1b64a,3bd0439a,ec45a7c3,859374c1,7885389b,9c201f4d,c1142120,6b2916c0)\n,S(14e88bdd,e32a15ed,a37c9650,ffc18ba,1fc61643,22b167bd,635f3d02,e78c8458,82c1ec3,dc240faa,5fa355be,475afe0b,5cc2cd13,760249d7,35b1efe9,976f02c9)\n,S(c201e4a3,24b68472,d453dc02,8c78b1c9,975a3d92,efc70a30,a912fcf4,991c6c06,263a954,41d6e6d0,8ebf3e50,3c786a12,a82f5f8c,d38dccee,62469e9c,f0e2dc08)\n,S(4097665d,319a8b3f,71861b1e,11828cdd,4094182e,611b35a7,c5d10ee,99db4fb,ca0d7ceb,b1aa2b1f,576cd1ef,56ffee03,322a6b95,505727a8,5dcb70d5,27a506a)\n,S(173d287a,eff9293e,dd2021a0,4be052d9,3713341f,37a537a4,45deab49,b427fa92,9626e204,f03a1886,c27c37b5,85725465,72e5302c,d3f9ce54,1fb9a46c,16432548)\n,S(c923c74d,1b114f,30d4b03c,92629bed,227fb8c6,8f1f39e7,8f121a44,694d4256,58edbe6b,dd5e1382,108d1e08,ef022788,c9f91803,d8ad4273,1f413440,5b5b3d29)\n,S(92fa7906,b1f25c2d,3df104c5,196cf31f,93e5a8be,6cb91a57,c88c4ab7,cb92d46,a12162bd,79341fc1,e8f74db6,2bcd0d9c,ae99a75e,ce588240,79a61751,c887f307)\n,S(37477df6,f51f78c2,a9c8e17e,ed30d5dc,976a9c91,4aea94c,691aa3c4,8639140,6a6a26ed,1955656c,64c6e15d,e50b0453,25c3da66,f5067730,5c2d5fc2,a8089872)\n,S(b5b2ee59,1195f38d,f834e78c,abf00fb0,be9bc724,36c5f596,67ada098,dd0521bf,10f36f85,95233008,46dd276d,951abe90,cc8baeb0,fd8fe44,314706e2,15ddd5e4)\n,S(b05d1b8,443f1bfe,36a415e9,d307ef2,56039335,76ecb630,94845b03,d2a137bb,99fece4b,ddc90b2c,3102a415,6f0d63f8,54098f48,3e1ef64,65f7f062,7d066cbc)\n,S(e5d711bd,4778b3bd,cefd703a,e9525b5b,d69dcd86,6cd0b179,de76ae8a,5d918fd,8af014ae,5aa05b29,a0c88e21,8fef5690,9685d524,af389327,5421c35c,6db64248)\n,S(7703cab8,377a482f,bff1c6fc,4d137998,1e217d11,c424beb9,f4f1f786,86fa4f30,3323edd1,3c80b8db,c7e247fd,5568c92c,8dd329ed,420aff0a,8e903571,e884e8b3)\n,S(f834af29,c18bb488,366cf722,52a44357,2c87da2c,c14b3085,5405f626,154f3cc8,2e8a0ac0,ca5441a2,9e27dc09,4fd5bcc6,6bd8f7c4,717615c2,82001fed,bd5ab248)\n,S(783b093d,13f33c60,1db8ee84,51d852ae,13bbcd7d,1d03a79,4c774336,4bbbaee0,3aa90b01,cfde6abf,fa0dbfb2,ec2cefb,6b5fb1c7,41701ab,66ec9b82,74ae5b4b)\n,S(be3cc435,a7770b99,14a243b,48ef2c77,3ae42e82,1c18a266,6f92da59,e01c3391,f0d3bd36,9118c58,159fc64d,e61ebc58,a560f705,25dd5c51,e6aa9276,5ce4a701)\n,S(3e980bd7,adac00ee,fe362454,5fee1ae1,97f89e06,84576a08,fc909285,783b606d,c64f0e41,204c946c,74473434,7e091147,67455e30,53fd488a,34d333fe,e9c5c228)\n,S(a6b04140,aa621e6a,34959bf1,29790d72,91d7b154,5dd5e7c3,35bbcfb2,d582b442,9cb2c9e2,9cc05d97,5e61d151,542af6e7,a997f8d8,ee42d37f,8041c169,abcce830)\n,S(7ea7a83f,c133cb8f,a109a6a1,b29b2c3a,29ba432d,222382e5,1f280e2a,47fa721b,cbe384e8,8a1f7731,831c5562,ad1430a6,6aabab75,e38571b4,5bb7dd8e,a699d7e8)\n,S(8525e87e,f0fc9ebe,2f82b5fc,a14ba6d4,8189f9ee,146aa6c8,d842aca6,90fa042,dcf06a78,f311a3cf,182a393f,2a34a570,192873e4,7dfe22a6,86c70e75,6b32c86f)\n,S(7555a77d,fa050d0c,9ed29c33,765fe967,16dafff3,6cd04fc0,952a7b41,bbd56dce,9854c0a7,bdc3dc1f,d8bd0a3c,d0af3111,18dc0392,830699cf,d0bd6f1f,17152177)\n,S(9ed142a0,7a0adac1,14e6f026,133e00c4,972bb3bb,bee62f71,beee17d,9aac296b,c1eaea41,6c80e3b8,d24d4006,f699af50,9f4dca85,11c27f6a,39150a20,2b7a9d08)\n,S(a3fd2cb3,784d8ccd,92aa67c,8118fd80,c9d761c4,2e0169d5,fb13b1a8,dfc56b79,75cd9b41,55db55f2,d50fcdd4,8c90d58a,b0d13df2,7a09df6d,659bfd5b,f87ea755)\n,S(2ab4be05,217e7ee8,799ad598,b9c0e211,554338e2,8bb6d42f,c9952203,605ad251,2c2a1a58,da066d4a,7fc8c8eb,83e1e47b,b788afc8,3c8c5dc7,bd8f5e31,5476d853)\n,S(4afc2888,af8c1aae,af6268af,566ecceb,8c95d09,d9f8f359,2cea567b,8648c383,b1e26b82,5e69e92e,98902579,7e99c7eb,cf3f284b,e1de0054,58b59336,a84f5eed)\n,S(dd800faa,92319d2e,48038600,aac1c2b2,f63f5fc8,dafd988b,548021b5,2d8e3d4a,59fe8092,6e0468d7,60e522ac,91881bc6,8fdbc192,14fee60c,e8e1a977,1039ed7d)\n,S(84aaf3d1,daa3a5f8,89b9bc88,6afb07f8,7bb5182,6df9d7e2,af5a74f3,c6378c91,f4164ab8,45eadd6f,a6331218,ecce096b,a04fd586,b744f0e8,11c2a48,3835afbb)\n,S(b770f2c3,9e2e9db8,a92823a3,adffb690,d2ffc180,b88cefcc,8adad3a8,27c40b2b,f7c6e37,9894982,5d1b90a9,16ea564f,7e319c97,ca6cd22e,79f599e8,dc0d53e6)\n,S(a60608a8,a0d7e556,70145c5f,bb107cc9,7cb1db87,2493f362,36a21e7e,babb2b29,3423527c,4e414548,96406f90,6d4a3819,a289c91f,b580ce19,6f25c57,7b54de5f)\n,S(80f470f9,7b7f393a,5e6b4e5f,cc911a73,20f6b0f7,fcabf2d9,21eb649b,53414597,57d8f2f9,6e1bbe0c,1328faea,13c3f3b,770fa14e,4b5b7e4a,fa1ce9f1,2bd9adc3)\n,S(4e111bf2,1f5248cc,3fff0096,c64a7b58,72e4a3db,1f0397fe,261cb33a,995abb6f,249cf172,102733bf,5fd829c1,d60bd930,c03af614,31faab0f,6d5acbb6,96eb2b9f)\n,S(7d8c0cb5,47fa1d8c,10254660,a20e85ec,960cb70d,f38174f0,18416c68,c62844c9,2d79ba3c,17ec4d79,a157335b,f358cfd3,72b0f1ae,1f6bc743,40400571,5f35a271)\n,S(bc0d4cbd,95896fa5,7f23d48f,a5a9f2f0,14b132b8,9b5953aa,f612aaf9,670a0034,f5d06670,7b316581,7a641091,55773bcb,83d7563f,28ea5412,480a0f48,2fa0639d)\n,S(b154a2ae,ad08d115,95eddbe1,c9321e15,5cceb0a6,a7e646a4,2dfe70fa,b6d37a40,9abade21,674dd12b,d01e586f,695c896e,17120d8d,9e3c756,c8b5e53f,3216592a)\n,S(ef603c34,a6ce06f2,7053bc31,841fe2e6,314be756,7e477325,5315ca58,5772e1e4,f9ebbe28,96f3b0b9,923a7e57,d819a231,15fced8f,3bd08f51,64aae597,c49ad65d)\n,S(a601176c,2d901ebb,ad5a05d9,1adc0041,14f7bda,1ac496e2,c04e23fe,82aa9376,f781ddb7,ce0c3649,3772fb84,9e914377,d59abcf9,d3eade68,f8c8a303,1ae88ab8)\n,S(abc41547,b6b3104e,fab968b9,bc9a9027,b1c7f0ef,3a9007eb,27331539,5c31e6a7,cd2858a2,28f21d6f,bd8a1821,dd78399b,594c5bd3,52628dce,879b8a37,d97e0ec9)\n,S(92890105,c9c721,b2e4c430,26e413a,941d1da6,d31b48a9,2f2e3a17,d87f5a81,c1cad87b,1bdcc617,1e432e17,c13b47c4,15c22399,a7cbfe2b,b3097f28,da60a5da)\n,S(e520dea6,9f4b35ca,46a46831,9947690c,500a7a80,6bd64228,ad144a7d,c37ca563,6c00d766,ac3f8fbe,90355dda,6ad4e2d9,e2330b0a,db673356,638b0d3c,8a2a82de)\n,S(c0337a23,e2b3f1c1,a57d18a7,9d6ef25e,ac2e9315,18f0ffb3,7502d701,c57fadc4,fcea5873,be22df35,4729c3d5,b07a570d,7ac7e938,f6e061ec,cdd2146f,50808b65)\n,S(276c62bb,6a8e2c07,6b5fb6a7,62d1d624,1b796a96,f53593c,fa51279b,2981ac04,5c53a65a,bb6b01d2,3f9284d7,d696236c,773c4578,88f692b,73e2ea17,6e1afc1a)\n,S(604e1e87,e5051dc2,b837ccdd,43c8ede4,c4a2de6f,67a9ded4,fad1ddbe,8d663a5f,f70fe23c,e3511973,93d4d675,9444d862,ace4c473,99c34349,2d06b27,8b429bee)\n,S(f2fc151f,470d9106,d58b05be,5e9039ba,4aba16ae,f7e4ceec,3b6e3887,5c41f6fa,f49bd2c7,f1aa5c63,d8e7f2d6,e0769060,d4188773,9c16b7b8,5d2a9216,e1e98de0)\n,S(8e031346,e9f34ef,3b81d9cd,7e46eaf8,7ee0b294,d66b0315,eb0902e1,340ac560,ff00c8bd,a5e21e1e,5127441c,ee0504e,6b028c,ec0dca,450145f9,2c394296)\n,S(a8680f1a,d75b7a8f,27a1cbe1,6b2954eb,d4e26eb3,a85d1a0a,96b9f40f,e5a9970b,60c6bf41,a55bdac6,397281f2,a3f52896,757401be,c42964c6,9501973b,e6070c01)\n,S(4d68a1e7,f4d82ea1,e03407c0,5085c794,9ca8c00,d4dcb066,128e6c6f,504f4658,85c5de11,e5dd3691,2aa95d2d,2c36dd6d,26a9550a,3a672af4,d36265e7,a3d1ce76)\n,S(3708f41c,2a6d8649,6983cdc1,bd02eb39,758c0bc1,ae78a483,5c6a20ae,e6c2a7a9,310b799e,79b7f5dd,5c9ae0f8,7aab193e,3c2b7145,c70af9e7,f4553faf,abec4152)\n,S(8c883967,45028c5f,f1b96181,43f5b732,2d1a18cd,3abb1a92,f6ce3780,a115f059,24563ad4,e4ae484a,c344180,66dd87c,40128e42,5c8dce10,b008a7e7,620725d8)\n,S(c445e76a,7b377ad3,bdd0fd1a,94a7263b,652e83c2,6342305d,a0e1ff4,d58f8fb0,4bf5a41a,dc8ddb61,3afbd3c1,3aae7dc6,f60ae2e7,23065b8c,c94cea61,cbacc89d)\n,S(4ad9613a,c8a635fe,60d9f1d4,da4b9fd6,36949d5e,edaaee8d,eb2f65da,8e419f16,5a9b5b06,8f67a0fb,3ad31c83,ef1a81b9,38745877,b4b07316,42ab4951,68b0d7c4)\n,S(beb3eae1,958bfe6c,9ab49d77,648aa662,2e397fbc,58e90b0c,20d1d29f,d760c943,d5a46be,f43a67ab,225dc6fb,5aa68daf,ec76f27b,6a822678,dbaeff88,382c9b8)\n,S(aaa9aab0,bc0e21b3,be3f1dae,ad4a076b,4623fc14,3e4018ab,9df9a19f,d134f397,9c7d7fe,19642c65,a6c0347e,8fa2dad2,d3f094f8,bab6790e,d3c703ba,2742e40b)\n,S(553c1e89,99d6f446,2fd7ae86,f1cf9d24,d4011661,9fd5d356,604d6a55,ad99dc52,26b40d3b,8410ac5a,6d2ba776,f7c5f0dd,3f6fe494,379344ed,6460bd6f,f550cebc)\n,S(859885ea,36378fc4,398dae9c,4725d604,c3d56509,559ed28a,b47ebf82,5aa1abc8,fae5aef9,fc74b963,bb2fd930,5b2d1636,e6e84aa,3c40b066,9e531fcf,f00687f5)\n,S(5fb0a118,679c5d48,554bf7c1,63b82345,89e51032,a70c654b,bb7bdee,f0368f93,e8d55f0,4a6816d3,bfb02111,eb95d868,5b9966ad,39d94c70,a4cf1826,6bc2a2d0)\n,S(a424347,86f3e153,c9bd737c,1e70ddae,bbed445d,77ce4302,194be82f,94f91dfa,27d1cad6,abd9fda9,c1012f4d,f25b69fd,a54239a5,8ec12496,97116548,e7beed46)\n,S(5d007508,63fc1f3,a0a8213c,c729310c,39465945,72b083ee,f571b921,a0c821e7,e538fbc4,5d055a07,b2cc2605,61238486,d99bfa81,6b0407f9,39f1d12b,feb2df3a)\n,S(a3eb25b8,97b10286,934605a0,e4aab7f9,e80393aa,71cdea52,5f82f5e8,282e3db9,e2b354c2,1430c45e,4236baaf,128967c7,6beec58b,e6890c6f,303d83f,71e7f77d)\n,S(73f63220,8a133202,96f3f51c,d10fc816,1e309e51,4ea35f0f,ff72e09c,e897981b,43412959,cc78f32e,d6df7ded,349a92e,3095257a,8a1b5dc4,15ed073,a420179)\n,S(5f0825d1,c21bb5f3,8f0d9628,f6046648,7760512d,f1bb9bb4,ccfec4e7,48da41af,debac60e,1d95de12,84f1abd5,b6592824,5becd4b8,c2496323,b374239f,fe5c0cab)\n,S(cc42a6f2,b4a8e9f2,fae3f624,cd12294e,efc26dff,c66a676d,a10259fe,f7d84294,91b26600,f92cbd05,f13f2adb,2b5fb17f,118a7ae1,6a011690,1bae0e14,3b230519)\n,S(7d56e0e7,6eebe13f,a81aad7a,8efbcd1f,4de0c5d6,bd136261,8f0002ec,6f635a17,95462707,fe55e3ee,46dca813,eea5de7c,51122ec,55a91754,f7d13ac2,43fa1ad8)\n,S(7972b61b,4fe85ec4,acb605b3,aadb56b6,fba8cafc,3c764dc6,add54c06,f7a5be61,ba186670,2642fa6e,a7cf5141,c46a8e92,4764c4ce,5d45b7dd,9f4926c9,32b8c7d8)\n,S(edc8a440,347b1500,899f6360,9674f90f,4344c87f,361fae0b,bbe08235,d5025626,2f812740,9a14bf59,9bcc7cef,ad140b2e,7bf84122,9a51e486,4d01ecc4,1b2cd77b)\n,S(bd9b65c9,7a8cf4d5,2f727b57,19f99986,d4ea1bbf,25560d18,d54877cd,3db16899,59cf7127,4e878e5c,bf0d9e02,dbe4f861,ee9c8e3f,5dfe99af,7db98e2b,c2fe432d)\n,S(27635e38,1191e8cc,d3756571,44c5d8d8,72d91802,5950a106,f3be2acc,4cf35782,c359fe47,a019870d,7fa3ab,8f51bad4,eb5251f3,7e6b8ce9,db1992f7,cd1ab7d)\n,S(4492dcc3,16c05300,a96abad1,47a00e98,359950f4,95dfb261,839ddf21,3b21d85c,edf1371,a4e81e42,dbfb8c6d,2229dc5a,fafed4bf,a58c2433,18934ed7,dc9ad35b)\n,S(f8124c40,409e01e5,8de8a386,9bd88f8f,25887fc6,cee37c01,279aa606,edf9c67b,e0071d1,d31fee0a,8a26269c,3d7f3662,2b0f008c,61e749d3,65560c21,a26fa6bc)\n,S(cc597b67,66eccdf,a2c0716a,dd5e51c2,ce3aed33,8f55f0b1,b5784bc3,9a05a2b5,12e031fc,394a43d9,d1e12ec4,28e8d5b,df52dae7,f3ef22da,74e3a418,74682865)\n,S(142cb2c6,bc1283fb,d2164270,7d525dd3,d4a45f71,a63222ee,6fdd31e2,805aeda2,bde93d12,c72c422a,e4d5b718,bec6458,ed082bfb,7c686f2e,1815edc6,5ed66ec0)\n,S(fbf4d602,dd765941,e696704a,1a8977a9,c3327375,e3f0d479,68fd9148,c01d2d3c,65b46df7,99e895cb,a6d4cae8,e68f6160,c7b96fb2,9af7d18d,8ef1396,c06afa8d)\n,S(efdb5d57,bb5fe8cc,e3300ea5,ec14c50d,f09436db,cc58ebc7,c6d123e1,8dbfffb8,39083803,d9a90c62,6219ce93,167bd89d,d444e47e,ddd60deb,8137b8a4,203fe01)\n,S(5bca4334,faa30557,b4b36c7,b6bf2d4e,921f59f1,eadebd74,97690742,2c3f35ad,3c97baf5,e2a663f7,22bf2fe1,cd646db5,79d27f2a,353fb45b,520d227b,c21206e3)\n,S(9aa1dbbc,e90cf065,5ad8a0f0,54aa6641,ff921e97,1a73cd4c,49ff1f3f,51156632,cbf6e81d,8bf1e85d,b802f0f0,b9cc1125,6e0b337a,b90112dc,6513bf40,2b1a4200)\n,S(2fc7fc55,86ed7676,4d5d4d23,ddec2827,5386e56f,eff09b86,abaa9562,73c2d408,5bff69e4,773c34ae,e477b0c3,e0310b5d,6019a558,5d4c7f3f,54f9c810,69d6285f)\n,S(8e5fb941,c3ac6f2c,43195487,80df9116,6ef3b210,f2fff34,764cccbb,d34190b2,dbe2c1b1,5f6668e2,c63ae154,ce7b32fb,8d29b59e,dcf1ac4b,1df9baeb,fd10d2ce)\n,S(7a5bbb59,4748d6dd,5d3389e,aa95b8da,dcfbaa07,26693690,4801bd61,b3d49c6,c2d28043,a42d33fe,8d8b755c,61235c68,ca13861c,effe3fa7,fd4edeac,634187c0)\n,S(95beb8bd,f0d33531,ae73ee1b,1b631ce0,917c2fe2,22534745,f87faf21,bfb76753,c6cf8600,d9c55975,527e269f,b4a0e4cb,b9bd7783,7e230ada,a43c2f0b,c64f45b)\n,S(f44ecb0c,6d896dc0,304fa480,90ab9793,576dbbd9,76b8fa32,540d223,e2968d25,545064f6,29644329,76a03c62,9ea46a09,e20e470f,5e76f810,6d19f353,c321086a)\n,S(8dd32cd3,3dbd936e,6173ef50,1f7ae265,d56d68c2,77061e07,4fb49d26,538109de,6b110e5c,80daac20,5392bca8,a47d6d90,ad158c25,a10c0851,ae985f70,7c3f1e76)\n,S(3d4afd30,b0f0f578,d4fbc77e,b71d044d,fea5e3f,891cda8c,77075dda,6237997b,2816e0e8,664df57e,c793d442,49c23ada,ae286ab,e748493e,d83b1efc,58bb9ce)\n,S(a9b739fb,beaa3b22,b295ccac,86a07ba2,b8391381,2d2be020,a5ffd17,85d95ff1,a1d08230,21d6a6ae,f696d732,3c43fdec,d3c5d42b,8ed7ad40,1a55b2ae,bfb84f1b)\n,S(e9009747,e51251eb,fc2cc754,c8b55966,a37e5d67,acf9b632,bb77f46b,9203715a,34258967,9ea8f997,71b476f2,5571a588,756f277a,17ce3907,d9cdab4f,cef9df72)\n,S(7e348ced,55aad74c,c24d09b9,6b332084,2108fe41,3ac4c6c1,a8376439,f21a3f2e,39874f8e,3b722795,d8465706,e439e4f5,c884c22f,365920f9,1edcf83e,b4389e5f)\n,S(a7dd6676,5ec2d701,56f2cdab,f0fcc0d3,8e340fb6,8a0d1220,aaaa74a6,fbb1f55a,b7091bf2,ab00a63d,292ded9b,b00bbe9,63710dad,445e8e73,760a50e7,2f41d447)\n,S(b8579e9,a8cccbf6,dc033a48,16d8934c,51c0852a,4693fa96,a308d51e,3f57025,e696ecdf,4d79151b,2f164a3e,bc11bda,42c88833,6f694fec,a8bcdcc5,7158268b)\n,S(7b29c45,9de0080c,bf8c8c72,e7b59a7f,184f1c1d,46787cda,bb42c2c2,bff57af8,40de8367,a6d8d13d,41901ca5,60376ede,817578b7,25f4e614,5dc46de9,5f801799)\n,S(1ceffa6f,89b65be7,ac20e34e,f0b7e503,d1c4e9d,b31fe14e,179afdd,96f00f9f,6fdee8b1,f05930bd,ed98feb7,81790e10,8e293bf5,bcaa6da9,79a744b5,1a76f179)\n,S(556e2d6d,11d301c5,6d5d01e9,a01e2ec6,80ba4efe,a004de47,ca2d97d9,15e58d74,9588349b,b633d7b6,b55ba7ee,feecbc99,3d66e6c7,2f4d8961,8a2c5d7,5249d711)\n,S(b3506e88,73b93dc8,ed04518a,42b62ea2,b97f7bf4,e9ee66ba,6a7ab917,a1e51586,474f8100,1230fb7b,fe693eaa,7acba9fe,5917a39f,1f8fe3fd,5823ae4c,1b0b3b38)\n,S(d186af3,89cb4908,db01a886,f90ee67c,1ba7ff3a,19994504,e9774b96,bd2628f3,3b39782b,c6567cdc,b4778c75,a862ef36,d01d746f,f411821d,5d08f7ee,f2a2db7d)\n,S(f951d921,e1065ac2,3fa45900,62c639d,19e8c980,2a810d55,d6788572,ef987bb7,dcf7ddc1,87f8e975,27db239,7f553b5d,51abc66,bb76a070,55d098c7,f9d7d950)\n,S(8dce8e16,7bac6fc6,1161b75e,8f340e0b,8bcbf874,fc82a42e,bb53e0fa,c4d915ec,11ce53a1,4a9eb9eb,9b4b410b,34d26ed7,9c0287f4,9032f674,e3212617,e0ae940c)\n,S(ce2d3cdd,a0a7a43c,d7d2ed15,ec12a7aa,755dfc5a,ed5a85dc,4f439eea,99e26e2b,6a96aebb,e7ca2740,ea75c285,3c582207,6a8eed64,7e21809a,36b97c60,7a5a145)\n,S(239466fc,dcc2d4c5,cef367b5,c8339248,f712c40a,558c80f0,5ea390a8,dcd92092,f2ce223c,9b49f08b,ca63ee8e,98e01736,65d176ab,3b7d718e,d0e855e1,27ac28cd)\n,S(220ab764,341d3c08,d9c5bcd8,331e0973,4a2f3c64,4766395e,f6a5fee,3563e033,ec1e4460,d03013ef,467dc7a4,2b520c03,aa51a9a3,57817f4c,f9dcd837,56df5011)\n,S(d5455dfe,16406a6c,70fffd81,f3c4d10e,845f0b12,64fa3db4,ee2ffe80,904b469f,a0f93b8d,257e1e62,265d99e4,9158497c,28a20af0,2af959b8,8810a10,60aaf9a)\n,S(52367377,a1f6f05d,df054665,f1eec0d2,f5039cf9,cfc1d37e,1a9d89f2,88e60c72,78d89f55,430fc352,cd58d047,7e2497a0,d05e7016,d98f9ce6,a039fc5d,9ec7bb41)\n,S(5b996113,3ecc9422,26a3dc88,67364125,a8e569f1,912e6c9f,4c1ddea5,5fa56395,bb9d7764,12076caf,5d8ac902,c5e2fd5f,f7a0bcaa,10898f19,10142af6,4e436d0a)\n,S(f36cdb5c,bfbed1e6,58c7fa4a,5b0a6773,eecd1a43,db96cf0c,7c24f32,b84c13fb,cfc6d2f0,5ee9eda2,9156aee1,81b62659,993744e7,479379b9,3156c919,18c394c)\n,S(3208c58e,25107af2,b38bf754,5531266f,842ce33,10ec7e44,595fb91,7079a6f9,831c6dcb,5346b6c9,605d9ab5,895ec2cb,653599a2,c88801c6,45a4758a,32c785d7)\n,S(a6073a07,1f8510e2,aa021b80,b44d7356,47253583,6501a5a8,c5253918,8c9927a7,e93a9fc5,4c8a7612,16718baa,dcfc9bba,6fefa30d,85803246,2a9f191a,6364fec9)\n,S(3350b462,f79eaf7f,260f2147,6aa7ffe8,f7ec1a7e,35624713,9e335758,b9f0d913,1f0c9db3,fce1222,fbd2341,ba8d2e93,20f33bc,482a4d4e,80571711,21152959)\n,S(a54d5b17,bc82a74,9207c89b,5a1650cc,1773913e,66f6744c,11de24ce,3073caa,3c243b5f,5309dd11,83c7fe5d,49222c9e,fe62dc26,f92b73af,cdb7b7b1,32cd3ab8)\n,S(6590a2bf,676a7a34,a1424f7b,1c7863e,8a7d346d,563905ca,e5b25729,4a04cf8,11cd5803,490419a,1382d972,eea2f734,4f8d0cec,42466f09,39650645,a3e781e7)\n,S(b3c09c02,9fc7f48b,d2f461a2,a367011,8840393d,fb5b9592,89e96ec9,c7cba9a5,e7b5aa6c,bce54ad0,197bb1bd,ac030e2b,c6a3e6d6,af2db60a,b97cc92b,8f5cfa9)\n,S(d7968ea8,44a137a,7db36143,98b29972,cdc693ef,8fdd4644,26a92939,18fa8bc0,82402589,2901434e,cbd5dd29,410ce2e5,56dd3174,d74da2e5,28326ec8,ad57a75c)\n,S(8a57bc6c,2f98f9cc,d1eca172,b2501adb,3bf6edc8,4b50365c,6d959f00,838e8304,2ebf5462,a0f85985,438b5d67,cbfa68c1,bf643410,11a478b9,92cbfe0d,87e7d14e)\n,S(51886841,684750a8,c3cb8d18,f8c863cd,1a555dd3,7f0efb4e,551d0d50,6073fd22,eb05f09b,9e983ad0,a6ce0f15,c2f5983c,6a28ce50,6c52f691,f30517da,36f3f192)\n,S(fea8c35f,27e4794f,a9eab856,615d55d2,d3a02616,9b9eb7b0,ab7493e2,f67c85f3,c325de97,cf0a6e3a,98512337,8e2ba2e7,b24158f5,4aa97c88,9b54a502,8c148864)\n,S(6612cccc,d7bc25e4,f8dab955,d5c1c9cd,d79d5f69,7ef4c510,77b5027e,d1f94b63,615512c1,7a378d0a,e7aabab5,253df9b,e9bd6a80,15c3b200,73d0499a,3457860b)\n,S(c998b07a,499859db,4c9d698,33199956,f8a7ae67,9f6d3533,cbdbd7e4,a86f8746,d9e01371,919e775e,a259d81b,ea206e9,37d6b5e9,113838a6,6af11bf0,8dd17138)\n,S(5c0e4669,c5cf965f,854fcd0d,23ddc908,c32e3915,460d44bb,520fb0c,3a4cc1e1,cfebbbaf,7e0f9a4d,d2f35ffa,cd0f7cb9,89f5eded,c8b3c554,64fb909c,675adea1)\n,S(d0fdda48,30385167,f06f6433,c6a9d3fb,7ab3195b,64f9750b,cb2dbfb8,7158c0fd,4cde5577,6a34f61f,c82e1359,8618336b,f5c6e315,d10abc35,8f0020e3,ef1283db)\n,S(d925570f,d78bf65a,5d48265,6222ce74,7cab153,19b7cfd3,7bc70185,fa4a3e81,3c399a,c448ba90,1a21a5c7,b9c6575c,ff52bee0,cdd00ed1,673d8370,87c1924c)\n,S(45d2b56d,81f84bac,2077d607,484b0802,a023cc4f,d7818f9a,1d0c2187,98374c8,14ca18d1,92a9cb37,ad50506e,a25663cc,9829411f,848bbf05,3064041,9c19d7f4)\n,S(6ad3ac11,8588c5bb,f793404d,df9a10f8,ea8c1978,65a93fba,5b7170b7,9e157400,fa25741f,1e242c3f,edf20e80,fd76292e,382eb5ad,1731ec97,a8762fe9,811686d7)\n,S(5da24445,b6dc960b,793ea9e3,912b21d8,26d54028,2ddcbf5,28e1ebf,4a595f52,bc18ff8c,ad1dca69,8995063b,ff8a2fd2,fabfa0d9,8c8885fd,1b401f3,65f16026)\n,S(ddff6468,11ce86d2,93b9b89f,865d7133,d7b5f189,d527cf44,5ed15efc,ad32b346,7260e994,cb22016b,e121ae08,12b01c3,4d236b67,13ea510d,b1aeda36,567f5737)\n,S(a8b9ff3b,9120fa93,d0f2f50b,c8509846,c1030d98,dc9d5243,6ad9e69b,f897f029,5cbfa29a,4e516872,ea9a4c2c,a3b07efc,c866aaf6,a2b1d7b2,3597e332,8466c591)\n,S(943077fb,177b9d6a,723c18ed,ac8deeb2,62875264,868eceb7,a2fc1a01,51dbcafd,219a9fc,41ad01c9,d3f8248d,ac7df93f,ccb6e312,fa5fd442,e48f4a95,18e7eb4e)\n,S(75cb61ac,9c9817a,fdf60f52,4245ebbf,82b33f9f,a564d74e,9e810f36,6458b8e3,aa8135bd,f66f0843,460986f5,f9df6b9e,66441477,cd58cfb8,5b3adfde,ec03c367)\n,S(1bb7e177,27cb8e85,4bc922b2,28e7f0ae,c34fdcf3,b9bad0c5,750e7c8,e31fccc8,bbf72886,1e855e70,bd9e322c,2425cdea,855ea00c,3e6263d5,2380da38,c0221ca3)\n,S(9443384b,39e9dbf3,45b4b41c,f05d0f30,87f02471,c98e2a2e,afda94da,8bee8dbb,e3661173,ccb211f6,38cac6e2,27e3939f,e7b5da57,f6f7a504,abae01c8,fa4544ee)\n,S(49bd15d5,a68caab2,8d51638a,ec1a9668,b4c27d54,d6691839,61ccea76,ef740d25,648fc868,8760e47d,fbfb9f0b,d995cc0f,77563b60,eacf3e57,9db7439f,3f18c6e4)\n,S(d0c7b78e,92809e85,84d3684f,d078907e,c151aa78,a5832f90,73f945fd,7acfed85,a80d95ab,be494a40,b5529046,bc305203,be91e475,22ad9d57,7ab95b3,8e970c89)\n,S(debddd46,3ab22232,5e98f9c7,5cdc875a,7c4c28d8,79748bf0,cd96bd7d,92eb9275,d103c8d,c3fffcb0,5ffb3dd7,a73af259,50d02064,b12bc754,ab594c71,ab9799c)\n,S(1d79b17c,192a6a15,8ea2d6bf,9da07312,9f9ebcc8,54b02dc3,3f64012f,1bf33998,6ec818b3,dbc1c8a8,50d986f,bcf64702,c787682,bc408a12,b78e6bbd,4cf60a5e)\n,S(2feb76eb,ff5d47e9,7289c38d,7d1535ff,74bd3b57,264c5844,9edfd36e,6e81ca1b,45bd4e4a,7ba3a823,dfae18cd,1f9cabc7,bb462e74,7899c899,378c33bb,89f93b74)\n,S(14d0d90,faef5a77,f5372ab6,2e4f5efd,3eef1b39,498653c0,6372fe0b,b0682573,517f169a,80c2b930,4f530f51,d7196831,601a4f97,72ba1312,36ba92f6,36081453)\n,S(7306a7a5,728f91c3,384bd9ad,b10b39b2,ad094137,46d2e476,fd522abf,ff313321,215e22ab,a5b9e87b,35bbd4e4,f492f1b1,574c85ed,25b86a85,a8e17b81,b7a915a2)\n,S(85d8454f,870cdb8c,b32873a0,698fad20,fd24067a,737e9719,76d4d362,6a55aaba,36d63c0a,36eb9e8e,522a0715,cb9c833d,539fe7ee,111af3bb,951434b1,3117e4a2)\n,S(c68f6782,993067aa,259b21cb,9e19122a,2f7da28,96d8cdff,c1f0a0e4,b34384c3,74e6e96a,331c3387,7ea484fb,995d6a3,8dcd493,6b2994ff,b7dc3681,3079e94a)\n,S(81448111,5dbe5550,846d5c9c,3351c89c,e29cd850,6870a17f,e18e3184,4214dd3,75dd78b3,d4cdc29c,697740e9,2478689d,540ea33e,5edd6785,210abcb1,670d19a8)\n,S(310b5b19,de24d478,f5f25993,a706f21f,24214e1b,cf614ebe,3e204815,60c945f5,8b42c6ca,f01d205,e09d017e,2e840d69,bf04cc53,f02a21a1,47e33327,104318c3)\n,S(cf8a47c7,4bafe2b9,dfde4bca,b2e6d451,b0a90f11,c684f420,a025974c,bc4bc3e,f0b7b264,a9a78699,786331e6,2c8762be,614d8a69,c0a65c3d,1cc201bb,e34c97d1)\n,S(a0fc6226,7352a904,e70100ec,63d3b60b,ab553388,69b982d3,3d747af9,8b8650fc,ba3ae54c,16b24eb4,64b88c39,521c399f,cd162eb3,f9966497,e2b96f2b,3b85865f)\n,S(aae5dbe2,535edd47,584d0339,10045333,2e1eaf70,a4e1bfb0,7dce3c23,6cff8bdb,7cfaa5f6,e55806b7,bb278439,2473732e,a51d85c5,a3558321,91195533,b7a7449b)\n,S(8a4e9311,5b897550,cbc0792f,b2705a18,5c317226,86da5bd5,b0a17bb,503ae39,1623adc8,d85f08c7,1751b976,daa17572,2442aed8,a9dc1692,2dde923f,d17cef2c)\n,S(cbcef535,eca90b09,5295cd61,29010259,8627e1a0,ccbaff26,a51cdac6,87066463,651c2ffa,c2a2c99c,3fcafb9d,8c50e156,498fee17,3462fc25,9d87fb8d,6b212653)\n,S(25971559,4d6a2bd0,baa90e33,62b9c841,bf12c4d,2ead6609,9902eac1,ed0f8c99,49e01b6c,c97404cb,8144002b,c33e8bb1,d974dd22,d0a26a82,94bad2bf,2875245e)\n,S(b754d68b,2b049f6b,ac389044,c80f0364,a707da5e,3e9b2a89,1672cd29,b6f1445f,1b29b7c1,625e23d1,67092e3e,ddfc2f4e,bea55542,5f4ddda1,af2aec5e,4de37740)\n,S(20aea5a8,50e68f39,cc7ca2fe,2f38b5a2,ab0bde8b,d294c40a,afa898ff,4f084037,6ed576b3,f17666ec,6aafd6a5,6fe7e1b2,ab1e883c,31230fc2,b4e1df0,3f59444)\n,S(26844e02,919de923,3288cba9,a97eb85a,c6939fd0,7cd01e7b,f0d5e1db,e31979a6,3df9a8e,6a5fad1,266f11e,518fb60c,cc08a6c2,832c45a1,6c7c5520,5c9ebfb7)\n,S(11afca61,33a69aaf,27cfd413,becdf9b4,efbe0a6b,1a38b3fd,485dca95,dc28414c,8d4b8790,c0677fe6,22847bbf,8e47b400,9e4678fb,b9c9377b,2121f5ac,db737b1c)\n,S(c46e14d5,2fe25d65,37bbe09f,ce7e95e0,4986337b,23e7160d,f3d78dee,e8d2a63d,a200fdab,4211e9ff,2d008dd7,7ddf67a5,1f04b9ef,43fa1758,9b175d58,f5d2b723)\n,S(570aa12,578afe09,245f598a,210a7605,2412283c,8f58e142,d31d9cd8,d455e4d7,c28fdb61,f8e90de1,d43439e0,8512a071,9a2beda9,5d0a5601,b932c0f1,2cc50ac8)\n,S(d312db5e,88a1cea0,28570b84,e3854e16,224236ac,cfb14d1f,3a33108d,fbc3fa64,ca5e5089,1843383c,845fa0aa,e031c930,64b8aa4a,ea72e6cf,36b617f6,cf97e1de)\n,S(1ee22876,9981670e,14da9ad9,9279f001,c9be5eb8,76224a6d,1fe4ec08,aa398087,62101114,e303e37a,dfe42c65,54460d4,b68603a2,580c7452,6ff31c9f,2176dcc)\n,S(1fb9cacd,e2b84ff4,ae85511d,1c964c01,1700b9d7,2d4c04a9,4afa9aa5,57bb81a0,430b73c1,295c5f2a,d6d9f59f,74201435,15b1306b,2cfa038e,e0456752,5f737fcb)\n,S(d04cc82d,d3cf0b47,69f2934a,9807e743,4a998bb9,fa44d145,f191a176,611c085b,7a4a19af,b551d151,c42cf1ca,ce123dd5,8f4c13ac,c865b92d,15520169,1be5fa9)\n,S(1e4cb208,8bd4d17e,ba8b97f1,f27df5df,8a544f8a,548dde15,712e8704,cfe7e9aa,d805c61e,b72933ec,e799930a,53fda3f3,db066396,5c71be51,5e8466cd,a59b828d)\n,S(520aa398,707a85a0,d672bbad,cbcfdab8,8f769f69,df3de8c7,17d6dc48,de51590d,98d344e4,a9047a22,c09095e2,f1176aad,3b54724d,998e052a,39a52554,4ee9ada8)\n,S(3a9fe3de,165bef7c,2e0d45a0,60693fc8,e7080ac9,783245d7,a79cac6e,7b614ef2,5189446,fd3fdeef,c7a895f5,2934c888,7607ff49,aa6d798e,151061ef,73038d4a)\n,S(9c929dcc,c26c0805,e4289a3a,2b6d68c9,8e3c6806,43730056,65fd8e73,da149938,6dfbf940,b4c29209,3f39f6ba,b102762a,c81edf2d,aabe6dd9,56aa140d,396ba2fa)\n,S(355b60ce,f4e00651,8baf1e42,e5e7a08b,ee22abab,c69aca66,d117748,89be419e,7f478a3b,b277fb10,5fe0eaaa,cb53fb73,4fc01dae,bb44f1b1,ed146f43,fc2604e2)\n,S(76bff14f,21ad4442,e1389bb1,c11e1019,ea966091,97439705,dfce7bf3,d7f7f37f,3855a291,376aab12,b5f4da79,bc22e02e,a29a34f8,9223f07b,93f6a549,8289d763)\n,S(91bb9cdf,10577a3b,7e23aadd,35883396,becbb4bf,fa22e1db,fa08f8b6,6156b454,ec6cbb9e,4f149b02,edc53e93,d1611b5c,a3edea42,c2ca9a1e,f2cccf25,94edbb91)\n,S(9e56b10f,1ba86c61,36481204,f0c45b09,a7dde7d,4eb32537,f8c310a5,a8865562,cdf3453d,8552c16c,48bca1a3,79ee8c6a,8b523eaf,d1862d5,16f4361d,5a8aa67c)\n,S(4e73594d,af286bde,4e6e28a4,23930571,a11dcb75,4e9a4af5,f4972d,988e09f9,a59f23d0,70c042ce,e03d812c,ea274035,af0d8e53,828a418,cd1b51f1,458a36e7)\n,S(156fdff7,e92d89fa,691d3c55,7cb2c614,393d5973,4b11bb1,d9fac953,3923d860,4e929637,c448760c,ef6d68f6,4665023c,bff653cd,23132ee,620eb013,a13b360b)\n,S(f2c8b650,eb372336,5d57a905,23d34db9,70d23d52,1f893569,98b0a7e7,ae8ea03b,bd9ac314,84a99bf6,973422a5,60bde9ec,204488c7,6739583d,72f42a87,181a7881)\n,S(27dd3657,a4a37430,5f5bb92b,a7b816ba,88d526a2,1ae316c,d4a4e67a,c751e3e3,880cfdd3,c0faa401,6afaf3d5,1fe975e4,8a756b01,f7d84e8c,226424b,83be3304)\n,S(f6c25e0c,19f7357c,3cc5d98,1cc4b7f3,7a390182,c2673708,1c64f163,ebb3d1bc,8c80b3ea,7c05a0fa,39944d66,643b3589,29534152,adf37c2f,183e7c22,8e89e43d)\n,S(c678800c,71305ea1,ea2847d3,d9d37612,ae280305,716fdf45,87ac7f4,a7fad4f2,be5ffbf4,d2fb2b8c,ddb49a42,ebeaf5d8,55d41d39,f106e2d9,2d549e88,6c0b63c6)\n,S(f35db221,e66b7786,fc9e2d3a,68f0d1ee,f98177df,a05bfd30,931912e8,13f6d560,4899a808,e6b2040,89974ca5,afe5b1ee,9eccb15,36a7c7c7,bb67cc00,e43f29fa)\n,S(2b93e37d,a915633e,db9843d6,c33888c3,5d944f04,c4074deb,d021c639,93e69de9,eb3d1095,c6ffa1cc,93f72a58,f1320efc,366a4a5f,c7250167,6f2d3c88,4b0522f0)\n,S(818023b3,90454716,f51913ab,fdb406f,e4875b94,8b14a331,60901d1,66091b69,b3f5718a,6224e447,c5af3e1,f38e4f2e,6fe57389,fa7d8990,f98e44c2,a227e7b1)\n,S(1676e6a,244ca69d,b2ae565b,65b14184,6645ce7b,213dc1fb,db33f060,3c662bb6,88e1cba5,deef5dc1,26b20830,d2c7c0d,aeb9689b,16ecc1fd,cf4a31fb,822e0298)\n,S(2f931a1,a92537de,38629d73,323e2f21,d9657454,30e32e4c,3912cb21,dc298d54,93292d08,6fbc0fae,eef6fe43,f5626711,95a5b2d1,bdbbccc,52e1dfae,a30ef904)\n,S(7ba4d612,f0dd8c91,8bff20d9,b4f45486,be8a32c1,122601af,2d1730c8,a1fd0279,8aad7aa1,f5b06431,b2e20af1,4cd049a9,3018e3c5,bc4c4310,d0234e78,d2401179)\n,S(e8dfab0,85fe7a91,6a79b2be,723799eb,d6974d08,ccc8e3d8,5286aa61,c81d5e78,2121686e,519db556,e6595d47,a5487bb8,fbaec53b,b18dd81c,37dbab40,6e3f926c)\n,S(7d5623bc,b1597ef4,6f907106,17eb2e6a,ea751da1,5535a64c,94c90c9a,d84ab5e,dc639f31,8004c4de,31514b70,ebe2e8b8,701b3cd4,5d66b7e4,204dcbc2,a0ce7575)\n,S(8e81e2d,8074bec7,48986194,b3b82200,1e4ac916,81de2ad5,7b9c84fb,88a7ffa3,4085ec1d,f4a34480,ca56f6cf,762d03f7,fa94e99a,8df93e6c,dc781499,59fa890)\n,S(a9d5a3e7,8290ee62,5e18affd,169c6829,73e68ac9,2b5cc52b,53ed3a85,a68da71e,1cdaad6b,f9eb5889,5189ed29,8793388a,8d6e8b20,ce47a536,ee89be4a,b4805fd6)\n,S(4f7c17ca,bcda7c0e,3b7b313,4312f848,984985f0,e46ac497,d64b123c,57dba2cd,860bedd9,5f470c3b,f3cbe7c1,d5070cd0,c877010a,9baa8f5e,888b5ca8,a34a25d7)\n,S(478f3d7a,9234a7b9,a91bd016,f55734e9,34b8c3c,535725b5,b4fbb0ab,9fa64921,db97a394,f0253f18,ebabca05,c21e9a7c,3f253054,d83f2101,8ffb4d93,b8051a1f)\n,S(ace7e57b,73d96e7d,69f7cc01,b1da179f,3ea09aab,61fba329,f2552eb1,fe7963d5,fa0251f2,2b8dbd04,ec90f824,be025965,7e213e4c,1030611b,796efb89,26908918)\n,S(cd56e867,f5170771,8253757c,dcdf69ef,4401f2f8,a1d09f24,374040e7,a908d1fd,878f7216,52cf0ba4,8a2b29a2,2f620c7d,83e4bd84,277b7b90,a454bba2,7f338fe1)\n,S(3042ea5c,d9d2f89a,64b1dd24,97b25da5,67a2c672,ba067e33,e923e513,ee4d5329,b84c144,d5516a14,a0a8568c,d6d227a2,d3fa1d86,8e05e612,81ce41b3,5a68b1fb)\n,S(55e088d,a094ed26,82b042,bafa0345,30a2e291,57af3f1b,ce351ec9,9e712ec0,c6f8297f,64398324,96091933,514c5449,cacadf,82d51db2,82c9d2e,c66b33e9)\n,S(bd2db13a,69dd93bc,a37f9181,7a57a0e9,e0e0da83,eed71875,e63b4691,3b408966,46e12660,f9489b2f,123c25d5,f65b3f8,187ee6e4,405b8cf8,78a742a,9b0da2d)\n,S(7d7a5110,cdbb8455,5fe678e6,24ed1a14,ef7c5219,986a7ecb,6095624e,7fd3d210,c9578dc3,c0a54524,f819d640,abaa4a04,626a46da,15c0867,72774a59,6ac6c37c)\n,S(1ef12317,513b1354,2a966981,34edabc6,fd4e6d29,1bd7782,5bdb30f4,937a3fa7,e0e4b688,a391bcef,3451cee3,36a8c9f9,12319899,4684c039,909489db,590e1ade)\n,S(effa0403,766fb976,dbec6b2e,332d2f12,9f463b86,8b9a1d19,49d30cea,1606baaf,8c5b1c83,bf3efa64,f38de1b7,da03de17,b0cbfdc4,5b4a03c2,38221def,bc1cb082)\n,S(dc9271e9,76a9a042,5565f022,273af5bf,20bf780d,9d0ea069,df5da661,a087d65c,dc8679e7,b27bd30c,986f11bb,1c73b76c,55ce7c7c,621490c1,944cd8a6,b63d6063)\n,S(ae1ddc2,1e1ca02c,218f6946,275501d6,a1336b93,ddb1b2,384ab414,b8264619,21c6b39d,300b6125,ec8e5c8e,19aa76d7,32466bc9,a887c76a,1ff4220,7db26b48)\n,S(aea2c00f,fe5835c9,2b892480,83164635,33dd989,bf2bca12,85cce3ab,4e82cf5b,615598cf,935a6112,42a20e84,e670b193,9aad65d4,53ba967,3e8193b2,93dfa97f)\n,S(913d0e16,34b43a86,f55b30b6,5914767d,b45e723e,636c866b,6348c8be,8aebf696,e14c6607,51affda4,d02574af,43172024,39c0c10e,148d4305,1487a5c4,39971a9f)\n,S(4f0b3354,775cac80,5e0d6191,6bb0f9c8,40fc163d,8878c05a,301252d2,3bc26fc0,b0b75486,3aedfdf8,3a6eb2eb,5f3e25f1,6c0e1077,6e855ac3,fa8fc3f3,bd8da1e3)\n,S(5da21940,73cc978f,7673b2f7,5c65ead2,f469df96,f80883b,181a3da4,f316129d,8516d080,743d2670,570d5e63,e19eb543,237b1db,6285b1ea,f3bc1459,8ef311d1)\n,S(76e1b330,ca7af91a,ccb92fb4,63404d36,a8fbc132,269d163d,d4beeed1,6be74a23,10b39253,c5908ef3,ec96f2e5,2ffa0dec,2ce2800,31a791,bcaae0de,1e7f5326)\n,S(c4be488b,2f210ee1,82f91263,78b23359,8fe8ef57,671ddbe1,d76975d0,ee393e64,bec1392f,a1a09a54,480beadc,b98ca024,b910cd70,f807eaee,10d4e270,bb79f449)\n,S(546918d,a141fd77,b1f13848,d3d608c0,25f5be00,4d36a542,56d0ca5c,9333ff37,3d1d4c7,9684be1a,5cf00d71,6cf9a1bf,b0b82ba4,833704dc,c2d23e8f,39914ac7)\n,S(cdfc6fc4,2c51ebd1,2df368b0,98ff0f40,2e6df8b1,9c67e10a,320c1960,266078de,5985e930,23e5264,547bef45,6b3774f3,c2689411,b6f7463c,febe068,fd89cb0d)\n,S(7730fccc,593b14a0,6f21eec6,2408e146,36f0e4b,4718ce99,c99bbcd4,7cf03034,f17d0fe2,736e412,9c30151b,492aa7dd,52beacb7,6f97001c,cc28f991,3e016b72)\n,S(8aa4c3de,474308f4,674c7b55,9f895bc5,d855a7a9,5fadf090,5726b354,7941b3ea,f275c44a,eac2623,1bf4ae9a,df403ed2,78d9da42,150c98be,7dbd5f71,5cb8594d)\n,S(15926da4,97a4e925,8976f87f,f8940491,f32d33dd,7855b13c,5cb54d10,d325bb79,15ac60b6,5b1ebfa8,e871bf67,ec9f71b8,1aa03c78,82880d40,d35f16d8,67ce8e51)\n,S(55f4f4fe,aa741574,79462b48,f001688e,fc99f545,d4566dbb,35faeebd,f5b1710d,80ecea05,63f24c84,e767b894,57dfec3f,d015a4ad,b6e3fe0f,662521b4,bb02d15f)\n,S(95a56acf,402f7f33,fa357c4a,e4db337e,f04a60d7,4cd73e0d,b137f68,e0e93cee,e72405bf,b7c9ba84,16f4e72c,a30c9ae5,d21c89e3,ce5b61a4,bd521b4e,ef6501fd)\n,S(28a9fd90,b50d7bb5,13034b7b,c36a9783,c2a697ff,499bcd6,4b0881ab,8e7a2aac,76b151b0,5c7e7ea4,9a263596,81508781,a37cfaf5,14fa1720,b583faa3,9794a788)\n,S(6406dd13,6d6462c4,a4116b93,eac38eb0,b571e2d3,99cdb93c,b36fa5ef,e734b672,3974c77b,92b8e614,52d9c9d0,62a911f9,b4c5eb1a,977da74f,defea358,5dd7fd1e)\n,S(8fd8f23f,cb62e1c0,94fef903,9933747e,9d40c37e,376703c2,e3c8b666,f1066529,8b0b2f9b,de10175b,24a9099d,75926296,5ba19013,20912baf,3100e057,d4ab5c8)\n,S(51780a2b,d4457368,9c0679bd,c8c94e43,cc525bab,2d2723cc,3e0eec15,63a1a24b,5026cd9b,e178d1e,c746e5db,29391c4d,4b6b08a3,3530fdfc,64603fa2,f0e01109)\n,S(aa01493a,e7c7f9bf,3d2fe0e5,cd939dca,5b8c8534,6848d065,beeb42a9,8c283561,a08f0b45,4a42b5e3,6463af14,5199e3d2,1783e908,b3e130f0,e9e88110,2cda82d9)\n,S(cd8ab749,d4bbe6d4,ac81c4fa,d6a27e81,e4456d4,196cdafb,97fa6053,18ceab70,fc6c7739,bd68a20d,e01c9249,3cd7ad3d,ca862183,b0529231,da32f1b8,5df59beb)\n,S(e69cdef2,e824501e,7a17bc54,e0bb4886,379f56e1,c59a27ea,e00bec5c,55fe3e32,e80ed10,40375398,10125338,f6291791,3fe735e6,6c4bbc80,f41d858d,8ac41cd4)\n,S(5a4e72d9,182b1f7e,efb08af1,9e3181cc,f6b6ec69,790184a2,f30188e0,dbff8a8d,2d1cf7f2,d5a857d8,3b31c588,5ac33a5d,7b62ea62,7b5b0bee,2d912502,2df9da19)\n,S(9e000859,48bd6211,410416b0,3920a79e,d78f154,5dd0330a,8f23d1b5,f8984a2b,36ae0492,412fd3c,c230680c,edb0dfc8,151ab85a,d8d3338,db611674,c88e3f62)\n,S(7e0b97ae,b12f8734,ecad35d4,aea425c7,99f88485,f0bc8d18,ac82f213,258bc6ff,e76f4e24,a4be1b6a,3fc3b0b8,ab0b6e5c,ab95fb40,4692f7bc,cc7640b5,69f3946e)\n,S(62285cfb,1bdfc495,dca81ff2,867878fa,b3064be5,81be0c86,b9336c6,61038ee2,f2c91be4,5f60e9f3,40e85ea0,8f159dd4,a65ca8d8,21a6e4f7,71f4dc17,849b5161)\n,S(70234e81,2de1b5cd,699870ef,36d5c19c,cd3765ba,eef3cac8,6f126a,a6c82623,e2dbf98a,f92a777,263f3c92,4738ba,3140f769,fd5b6ec,7139bb8,41330736)\n,S(ae770461,8f31d5cd,ede40ef5,7434b0a7,7dc1b4e6,7f4be5e6,136978a7,cd5db07d,a4e25164,65584487,3f520e42,74037c,5cc43e12,95167b01,d46d3e93,d93d16e6)\n,S(cec7ac8f,e4db698b,48ab78fb,768e6094,5b7f4ce7,d643e604,9e349b6f,246f2b53,491bb545,99330685,433bfd2a,7a4fc831,7f5d3cf4,80d6bc32,5ca6d001,b65fadfb)\n,S(80276e96,b051e49f,276f62e8,35622979,852e4cf,c2ff8665,8db4d5c7,7c5eee36,f510d696,882589f0,870d526e,5f7513a4,2c4d4ce5,3733f30c,f06d7dc4,f42f6d9d)\n,S(b19027d4,9d85faae,e6163934,ef8f8508,e9e351c9,82bda741,b8944317,da85b27d,c12461cb,dec0e69c,b378443a,f2eb042e,8439f812,205742d6,dbabb372,ea47a824)\n,S(57599d4a,cf07c001,d3d3fc78,aae147f1,989c656f,fbc43081,29e05b2e,570c792c,5cf8ea0f,d215ba16,e18e181b,1b4b4f02,38b57af3,9010ba23,f13bbdc4,18514b0)\n,S(5ab76283,fa110b82,c53cda2b,653e763c,306e6f8c,2b07d490,bad6e418,eae6e4b7,ff365643,cc2a78e3,17a7de95,b37b3f83,aebe8272,4162a884,f7437aba,b55e8ea0)\n,S(7b93d9e4,8602d7b7,ea52dd45,fa0031de,66ea88e4,4250c898,64903e7f,959d4a85,99ccb201,5ab91fe9,a0f50a0,fefad6c3,f6dd060,1f2ad099,a4851d33,162b52f0)\n,S(2d5878b6,af642776,41101be7,2b37b4b9,1de26a21,b9610a93,7ee2ce2,fb96ebb6,138ee05d,df4b004e,820815d9,46716f2c,a887066b,b7d218f5,47d4bd7c,2cfc585a)\n,S(1d637068,eebc32da,24a0fce,2e41cb57,cf1ccff5,38cfbee7,ac13269c,e560af3b,6a932df1,a2896445,6685ce54,2ddca0ae,d589a494,b7ee89ed,1b4ccfd2,c276eadb)\n,S(82babb6b,460e1235,f3187a68,912b057,26a478ef,fe929a3,9479cf04,467de64c,3a9f4e33,603d0396,1f3c11c,94d58369,5de43a1a,327d0faf,f51089e1,1345647f)\n,S(ae86e71d,4e715bfd,b63d899a,9daae610,a01c5134,c1b9262,c276dcaa,b48090a,3564b48b,fcae8f7b,feac4df9,3b458678,6f2f9e83,9c9c6126,a301de29,4cfd7b5e)\n,S(35a5c2fb,fc661cc3,f4ad6ad7,f1eb32b6,664c50bc,91f4000e,f5774364,2aa413e8,4a5029a2,887f6648,3e072782,68a81c85,b901d692,4ccae752,7111bcce,cad6cde5)\n,S(386bf07f,4dd508a7,61e7c29a,dd251d9a,76324496,6c6d760e,cbc6b069,5858e2dc,d4f14804,9c1fa038,1d903e19,68fb14b2,f07c621,15a81f41,e811ad87,de407696)\n,S(dfec381c,9bd6f4cc,50ac445e,c9104d87,f9c46c7c,cbd70909,fabde6aa,12346f96,5e7344f8,25b6649b,df97ef3c,ad96945b,d1ce0f76,a48b7f2e,56ccff02,797553f1)\n,S(3606dcc6,4db04cc,5493e0b7,ea0bfc2,f8a24302,d2358aaa,7c1ea8,842abbb2,a5c8743b,bc4d9b74,b8b569a1,feca3667,87eea8b1,be2025ed,bb547e78,5687301d)\n,S(3441e737,e19096e2,9a3025a4,71d192a0,db086038,8e76d2b6,66052825,e52b0016,6d10f7e,d5cac98e,73c3ad47,bb233a39,5eb9bd4a,37861b9e,7dbb60f7,81eef0da)\n,S(b2c97c2e,460d8c34,b5ea7a5c,456a9cf5,b1d902bf,5cdff030,25410a,26636e99,67133081,a8c8ef30,753417b3,cf6973e2,1f151e1f,27216bfa,23289ea3,e2057b7c)\n,S(2740bd8b,59a43ddc,f8ffdabe,d59027b5,9b7932b7,3db45a97,3b6c1501,57e045fd,8106f2b1,f69f1ad4,2c0787a6,3c137753,987aabe4,b0ebd82e,1ea7807e,93b02a85)\n,S(a1acffd9,bdbd94c0,cd8b4f40,3f9400c,aaa8e269,d8cc49a6,9ee565e1,89b6c21b,62ec7d7e,733f518,974acfbd,4f4e4f44,bcc4fdc0,cc194a66,df7c16bf,ef0235b)\n,S(50bb2ad6,8d524acc,3278c0f1,538d3aad,9a5357bd,332d8cff,6301f417,57349847,d8fc33d5,d03526bd,b97d4c6e,1ef018ba,ba4b33e5,9677f139,b8535287,fbacfb32)\n,S(ebdfb262,6031b4fa,d675e860,12288101,948e2ca0,8fd0d32e,c9fd0838,5f4fdbd9,b078066c,c470113d,db3964e4,466e319b,4f853a42,8951aa0a,9c4629a7,a40dbf2e)\n,S(5daf4c23,65482a2f,bdef73e8,208fd5ad,d57b35f8,171541f6,3a48b742,e98bd48f,9015bfcb,5a248607,f5ffc83c,4fa3dfec,9cbd11f2,c230327d,b2cc75ca,2e87f967)\n,S(22db9c20,5d840814,67a19517,f353f825,238c905f,2b12a77d,8551cc9,ee8533c7,680a1bc8,23432a28,a3219264,2b9acf0e,7ad19e29,b604631c,85f7038b,386dcdf8)\n,S(404435d1,2e8be51,92625213,f86e6e55,9fb44658,44694d4f,4db72861,d4c100ae,9ebce682,b321eefa,e8e04776,8f82491a,dd734e5a,941e0f4c,b6284f78,6d1586d1)\n,S(dcc36eff,6831a6de,f8600d1a,3d52da1c,fe59df9c,cc69c9f2,60c26532,e837530f,8609b5e6,7360b7e8,5ea98c13,578566cb,b6b385ff,6990d4d6,5b795acc,1f77a893)\n,S(ef0dfb94,1a1c383e,4a44cd04,c633cb48,e991d140,45e2d9a8,b4353e79,9c1a1514,2685d60,f2a75f9a,b733afab,f693ed05,9c3599bc,3e3346d4,61e5c86a,f76f6f42)\n,S(24884cfd,c6c3efd6,b4d2e18f,2ca66b06,410b0fba,d9d61b30,86abc537,1d766b8a,7c1cdc85,66f3daa7,d395c6bf,8a23c130,86a78619,aa68519e,4657b17d,ace2267d)\n,S(541b6691,c7004a81,2c607756,f81b6f05,485b0708,678d9a45,de74632,4acd8b20,ddccf301,8a3c429a,c749f0d5,2383784,cefff3df,ae98517f,c7f5e764,c5c609d7)\n,S(5462969,67262e3f,a905eea4,ff1f8296,f792cfc8,bb9dbb9a,138242c1,a1fa822d,63012289,8e429527,4fad8e7f,9865659f,da2d7370,10f6e185,70dadbfe,21e6880e)\n,S(94070912,ad2c129d,cd122bb9,704616fc,3ddfd949,6ce9f6d,6e18020c,ec848e83,9c3b38e5,6bfac9f1,4c901080,b5a732a4,b5d261f8,2b571536,d1fba6d9,b714017b)\n,S(2a6330e4,8ddc661e,afa8071c,c1417b92,ea73b060,3653a017,3edb92a5,6e3ca6c9,b38c51cd,4754c350,ba2d56a3,fbf4fbab,5802bc38,6b5516f3,d8b761e3,c3fc7d79)\n,S(9142e493,5f95da17,5ae4078c,5ff5a7d4,8c418c1c,7efc4c39,dacb047a,d3f7424d,15165a74,c47133a9,e8684ea5,5a4f9b05,37d0ab7f,58a7eac0,e698adcc,b885cd05)\n,S(2e198b29,5cac4dee,dba63ef3,888d47e8,bb8d372,7fcbd69a,d1eea656,ca85804d,31dd5db3,e700ffbe,152b0c2b,1b1c830c,eb382468,1c522e63,676b9ec,6780fd52)\n,S(b44e35e9,b2efcafa,f123e52a,7bd9bc58,32a671e2,fbf0264e,5a3f536c,b272f72d,8d489fe3,beb39fd4,2632b80a,1243e64b,f80c81c1,3934ab08,71c16a5a,5aa43423)\n,S(dc99ad01,e1324b6d,b5ecf365,c22463dc,f609f0b5,90e6d3be,efddf641,b83a3cd7,b4b422ca,2feabeaf,32c0ad6a,4393c087,a4c1e794,47a043de,cf0fe486,ed11b682)\n,S(e174838e,eb991c2d,cfaaf89b,b868f4d1,3029ebfc,ea286376,48fc51ba,f962a359,f80dcc87,27cbddc9,4bb1b60a,4da5cc74,238dc62,821a9ec7,c05ad2a,a0e7570b)\n,S(6240358b,15bd16d4,42cd79a4,8b739eb5,4ca21d18,b568b497,65d10dfa,a2583d33,6acb054d,724e7550,ed6d8caa,8a436d51,fc546116,df33413f,a613c0dd,6cec2d00)\n,S(a757fceb,560aac0f,543a29b4,bfd3af7a,aa61c077,2c1c07b2,e6268342,e63f8d70,5864ceef,f80855d0,fb4713e2,7bc6a202,b4c07450,6749457b,39d0c40c,f40352da)\n,S(f36e1073,57c3149d,902e9416,2e509d19,d4b1f498,bc74814,3a1bd411,2f777bba,d4d7da2d,139a2693,e40d9396,76c3fe48,45f74b43,78f0c25a,14aa9698,3bd1993e)\n,S(84ef2d4b,55a40ff7,13934949,b6277ef0,4a8e0e4f,cc49420b,17269d59,224af99a,57affcb7,1d3508f,65ff2b7a,b1d6752,60465e76,754efe3e,80a83085,85ea73a6)\n,S(138ef64b,274ff66d,7defdca3,4ff28bae,96b046df,408b3f47,84f78784,3fce7576,ebdd04e5,1d517c43,412010cb,d03252ed,dfe97912,ee4a7d4c,ed98551b,fee1ecf1)\n,S(e82f03fe,2ba05692,212a1145,550d3057,2d454728,e2d9989b,435cb608,3d1f318c,191a6fb9,cf295881,92aaaf1f,ea34e123,613b2937,602650f2,eb25f63f,5812dcda)\n,S(56a68400,676b6fac,7eb5fb3e,7f345ec0,11117098,c0d1a96b,e44bd2c8,5aafb317,3a41827a,5ae1b7cc,5b9dcb5f,4c41819e,f49ff2fc,ce1d1949,3f5b0ce,9f1dfb4e)\n,S(82f5747f,1b353db4,f3afe255,e1f2660a,8f735b1a,e40a5008,4efa3c32,dc1309f5,42e8b903,f4ccc01f,7e87e4c6,71572bbf,d05f9ea2,a4cf7bd7,dd5a9906,264a0144)\n,S(89136941,c47b1964,a4b89e0c,376b3136,80ef76c1,19e02bb,bfad594,76e0cf13,b3a2a785,fb6a564f,f4871bc5,177c635,d722e659,77f621a,f6f7537a,2c2d3f3b)\n,S(c6250969,c98f580,f0cb51,eef5d8a1,b9954bb,97671df1,c7360a5f,42238909,83d0324c,915eab22,4dd3f935,e197e0e9,552d5bd9,6b1ed240,219731a3,58ec724)\n,S(e2399ad9,63913200,4664a481,dea99d85,ad12938d,dd0e4184,27411fd4,8fc7e3b4,60fffd62,beae28e2,2ea836ed,389c3780,5d8b1fa1,fb10f298,f9b54df8,93c69d47)\n,S(4d00b1c,186d2992,9a6383d6,cc8d1796,a59c5d7,c27cc7b8,5a1f821c,3003d959,8752ead1,27eb19fd,49dc8ce7,a0b7c7e6,dd4aa3dd,6f8d5cb4,687327e8,ce487640)\n,S(344663ef,8b8b52c9,1aa548e9,8b7e1c48,933cbfa3,59644318,5ea973ae,9264121e,73d099c8,9dfe8eec,b957e624,bea5673,6fe3885c,e2f72b06,dfeae760,514d9efd)\n,S(37ff484d,dbd22a98,333038d4,7949b4f3,f411d3d5,7ca319e3,5c788bbd,a0de6648,55a5394b,51618d81,d2fb1455,4ec1f5c3,a45cf086,83980bfb,a9aae6a9,20547c67)\n,S(cf3bcddb,ad5066b,909339d1,4cc6d3d8,d2881f70,d6f12e1,4d795b06,17556ca5,e12686bc,99e20f20,6220e402,32760224,b61b90f7,8b7c0b1,3c197a47,11678a6f)\n,S(961d02e7,db8fd1ac,a38f9110,13d74a5b,d35e47a1,49818d41,49f02edf,5da73402,9462eaac,d698677c,16515ca3,bff217e9,765dc8ad,fe2fa82a,1db05158,71fed240)\n,S(43e62f90,574a8e65,25d22ca6,74814ac,3648b724,45a535c,5e1af97e,b46ec3ba,6def0a56,17c1cf17,9369e20e,d18d0503,e141dc85,9edc73a3,18f6a35b,3d939734)\n,S(9e682b79,9d79018c,352113cf,98de93b2,457e4b4,a962d160,33b80052,57dfdbb7,9db9cb16,bfe96343,89c468a0,6405d2c9,b2983354,ee9a81e9,3f23ec5d,5049041b)\n,S(790187a7,8079b59d,b2a22d13,8520192,5f9682e4,2002c8f9,436876e4,d5a1a8b4,25c8b46,f6b43180,3654381e,56a8e6aa,ade0ad1d,6a6044de,17e9592c,affa456e)\n,S(928a4b8a,6c744b33,99e22d65,35a21ffd,662a0dc3,d5bab1d,683ce555,f0169583,251fee84,c064954b,e1daf7e4,5fec87a9,323d55f6,687fdeaa,75d4dcc9,9a6fcf84)\n,S(684e88da,81182f2c,ac5872de,8c98b86f,a6ffb73e,9bbfbfde,6c16c3f4,be084c88,c451b59d,fc9d62d5,921ae45f,f7557ab3,ad179eb0,6afb8bb6,bff0645,cf6383fe)\n,S(8bdd2e83,a403b0cd,7a8ebfa8,6949bceb,8e8166ce,a8596f6c,ad7b7bfa,4d174343,7220c147,97f682f8,7d707b2f,eec937c3,643bb359,e9effbad,8ccbc8f,a8177172)\n,S(c3fa3b21,6e3c4952,85258ef5,f921f6b,b7195869,e46948b4,b69e80b0,be399543,eb2044ed,21f6661b,77088050,3026c2c5,5a519ca1,748bb10f,c8eed953,aec1796)\n,S(1c063c13,eb2d2959,379fb0df,50d355e0,195a8bd2,e642ab48,3d6a38a7,af7e63a2,20538f92,d14c9ff6,75c5005c,8c40e26a,b0042874,7f446ed7,cfcf5737,870f2abb)\n,S(60c06797,7b54c18f,4b82dc6c,227cb539,6c6086de,107e3999,81f1b5e0,f31d452,3f4546c4,e3eb11b2,e6fd2617,b57afafe,ce0e8bf7,aacc13b,73755f18,dc98429a)\n,S(fc15cf99,92256abb,cf263e90,a231ed8b,421cdc2b,af185722,c0af008b,fea36856,abe346a4,d9c40853,70dd46e4,69a3bf24,c01dbd97,f5c9997e,27634dd7,c635d798)\n,S(f6143985,18173bb7,428da262,bc8b07b8,1a92b06a,65926ee5,c6f8fe44,27249454,b1d832ef,3a2558c2,d41f06d,4be8e5e8,11fcede9,9cc784aa,b9f3ce18,d701cf84)\n,S(579458a9,62218442,41e68542,76a116ab,1f1fd43,109d4bc7,ad5216dc,ee61b5f5,33e56474,68c157c6,15cc8d46,135bed70,21274a4d,97aebe23,7bdd4b61,2c53e2d8)\n,S(637553dc,b0804132,b5562678,fe355e8f,abab2001,fe17e3bd,8c051e7a,41fe62e7,28bd6dc2,ad586e1f,f1a6a951,167ba14f,6989b296,874e0d3c,31917920,9b572dce)\n,S(eebbd70f,6f64855b,e21ddb92,3e54f583,89e99ddb,577fa8ea,66c3722e,b580e2a3,3d1b6979,15b50345,4a55606e,ad3ac4ec,7c986698,3df60e1d,edc86827,32fd4d68)\n,S(4ec8931f,2bf4b1da,6891135f,37791236,3a6e888b,6e5c5ddb,2e350e42,686c56fb,d5f6c679,4c2b306a,bd719770,48dc3e28,3cbab910,556919f5,35d9df23,56a09bc7)\n,S(6b5a7f76,fc5b7e7a,7d84deab,ffd5c771,8f49375c,cc4dc1a7,35bc253a,bee9730e,1e935dc4,8fbf5f6a,b12562df,11855757,9eafb8ab,f6ad8b7a,f8f9df64,43b58af8)\n,S(2a3129eb,f620958a,4264c759,17e29807,5f5b73f3,21d4cf27,683e4788,9e013af7,e940f5e4,c1fc28b3,fa346ede,fdb8ac7d,4066732f,a6c276c6,89a1921f,d1020da4)\n,S(8bfe81c,e99443f3,78307f34,5bf2c826,94a8723b,c4836d12,4c6f5163,bb28b5ab,58b16e27,857e5faf,9768edc2,68d177a4,87de9848,52e65348,36464ac3,f0433c71)\n,S(47820cd9,449c566d,2d39daf3,ee4d356d,5423692,a050cf83,1c1337bd,8ad61be3,48dfae03,2988a810,6d069d,22f27445,1200d38c,a9aea665,5e5f28cc,9952c2e4)\n,S(2d7f03ce,8e453605,89d221d8,84c3ef28,f9e8dc52,41d7d131,cd6e9921,55a934e2,8414b3c0,5a39f38e,1f14d55f,e28604f9,16a7b272,6d6c843a,57a2b8e8,b7ee9c72)\n,S(83887cec,919d8c86,c2150d4e,e842505b,f5a5b06c,b3b1e67f,1dc2005e,99d8e37b,fee0e7cd,f5c9eae2,78d34fe1,2e58845f,fcea9de7,f9883e32,7a2ee941,92b4c009)\n,S(519f9e1,138bbab2,da8c03f,565c3fe0,a9d0b709,1a7b50f3,f37df191,d1ca1e24,64d6bafe,2bffce42,3f631ec0,781e96f5,ef6cd6a9,ade6b9eb,367c036a,1a61ba9e)\n,S(8091f78f,84bc74ea,69ade208,72936152,3946ffe6,63edee6c,3cd13ad9,4a8fba61,1aaaa58b,af84688c,1cba5d90,d700aaac,6765faec,39e7a212,fe13a9cc,b0bda1a)\n,S(50abc00d,d3fe5748,7c2a5343,4a36f10d,8388cf20,56cd5bb4,9ed8e97e,7adb3afc,ab8bad95,14b6040f,b1c64f01,d9b9db01,670fe0d9,3add5d6,8a80e41d,8ded25ea)\n,S(a9a428bb,4da01f44,a9e4f253,3436ae75,20e5722e,6d12931f,aa20772b,36a2f110,ba05121a,1830a26c,440f0582,2fa53e20,f8c226b6,85b437a0,557c8450,774c0c5f)\n,S(d7afdbd4,6314d677,727fa11b,211e99a1,d6948be5,b7753ecf,64e9b1d0,ac7a83ce,b5f8b97d,748a4abb,a390ed9d,79cb42ab,ee9b2afa,517288f4,80aba1cd,34e21d04)\n,S(2b6b834c,d2b54466,a3d41694,b672ac55,13f19b1a,d518ba99,d622abfd,9b6de265,c1922593,ddc0b3d2,ad1d52dd,3cbeb2e5,74ec849b,892d9df1,87ccec50,7ab9b0d6)\n,S(f393cf4a,d7f93fa3,1596ef7e,a9c11c6b,f29c344b,1a3ee5a2,51360c9b,a96ac8ea,4e811ca9,de67ceeb,90e48016,30d06125,fbfa56b3,35e3a7ec,41bedbaa,7a8133e1)\n,S(bc3b9250,4e14b254,81305012,a248a94,bbc546bd,52fbc0e,848d75e,9c8f418a,9a52afc6,f8b487c1,7653a911,f11d78c5,8f5eca38,c761a2d9,af0ef2ad,a6a58223)\n,S(2f5a0e73,c601fb8a,7321e170,4abdb1f7,e71edc3b,bf6f9cec,1467eef,5f6055c0,d8bb1d0d,142d2cb1,3b9d97f8,f807212,b79a5ecf,13d942eb,c5a3f442,6553e393)\n,S(b83e51e3,b4fc69ac,84d099b9,6916c11d,8d8d8d7b,f5cbe15b,fa13ed34,73a54ae8,232e0f88,69c53923,22018084,a7cfc251,daeb7a84,6e1daa78,f3f365c2,ca3dda5b)\n,S(10971993,50b07a32,1532b372,2ee89058,e90e9b30,5908cc0e,a249a40b,e7516377,69a0b67c,7bd55a04,9be3a3a5,e308799d,dc735f9,ce56ff67,2c796b6e,5a0a1055)\n,S(dbeef75c,c95d5018,f3d71711,a0299dd2,62250814,c1469647,dcb27a23,e85c4477,dd4712cd,16334f8e,2baa6855,6c5237f8,676311e3,1cbf9753,35e76a90,88d66413)\n,S(28cb1199,2bdee938,f3405f18,537b410f,2723888,e4ca0d29,d96806d5,6baf114f,e6c63fe,bbe5dd81,e3a9fc1e,83a5ce89,c3e2ef6c,c2a57fea,695ebf4b,e81e5aa3)\n,S(f0a2df0b,64efe99e,65f9f176,89cec5d4,caef385a,e4676da3,790ba2e2,4e9f60ba,a7ca7e08,b900f664,14498c12,aaa77da6,6a2520,7bcf1a85,713b6d14,807a4519)\n,S(d1bb46eb,38e54396,dc7ad4f,f553106,54fe9b06,9abb1410,799dffe5,482b0f00,14b0619f,e08830b6,d0a5463,96826b6c,d03bbd2c,af930b14,a031f922,eace4214)\n,S(27bd2e56,7705126a,5f5adb31,ac1d09a1,85d74002,c548a84,15c0cce0,1f69517a,12203dd7,cba21cd2,9f9ce428,a8e302d7,202690ad,8734c08f,65578192,a5468d32)\n,S(6b2cc790,1c72e201,693835ef,ab2b676f,55441add,b8dbc3bd,61d43201,bfd21d9c,59973406,deea0493,daff90d4,b62ff38c,6690bb05,18e75560,1bd5b3a3,4add7456)\n,S(75e85c3f,32f953c5,632a8bcc,6bfcd6bd,c63c3b93,e607d267,5df09fb5,94840f27,22f5a376,8714c73d,96b24f89,d426e668,bc59aca0,cbf6dc47,723f01ed,6cb6bb30)\n,S(d37a3071,969e152f,41c0eed5,7e28f1e6,f26e1752,68c52683,15e200b9,f86d56a7,53d52726,98751d1d,dc4b1fb,d9621723,70e296c3,b47436d3,abe20356,76ff6181)\n,S(715bb304,7f5e6973,36546640,8e183bb2,67693198,94e341d2,37d5101e,a7414976,28440f5f,9e82d5e8,7a5ea672,2e95c3d6,a89dd1fb,3d81aca,db7609ee,a1a968d4)\n,S(f72d142a,4f5b1595,a7b4a52c,c6812ec2,8e4924a4,b087c139,68d8adf7,dac642e8,501b644b,b5d8042c,f16ab9bb,bc594c14,585486cc,fbaf47a6,5378f97a,761087dd)\n,S(7b3eff8f,b4ca8a3a,5fc3cf02,a469f34,3840846c,d8fbff28,243b962,c1284c26,be2588fd,15396124,a50bc555,5e161022,3bbf636e,fd510522,811902b5,b1748579)\n,S(2441a8d7,71fbeca4,cd365225,7974e4cf,ec2a7035,ff2b58a5,9cc5fc37,8a113dd8,54b0776,5316713,4bbf4c6a,7ac23360,fe035d2d,9316cfcc,ae129893,82447981)\n,S(c20fca4e,d05467ca,45b916b1,2f4ab386,512d097c,b64b824d,e78e9a2a,14cf7591,8851acc7,96ee4072,ca87e69c,9dad10e7,931fc48b,238cf46d,2b2355a,e4eecc02)\n,S(2f6b0e8d,1375263,b74e415a,ad758130,a34c6c6d,690ddd67,63492eb2,49ec8e7,d0c791f8,438cf6a7,976cb614,eb4c9f67,adc72275,f6236868,e384d538,daf25dbe)\n,S(bfafc1be,426f056d,6f8b3ed1,1374db21,fc00373c,3dd8c762,c5ab91ea,b2b665dd,9c41f297,a4cf003a,7fa7b071,a106da4,6dc40050,a7592781,68436115,150e2a2e)\n,S(cf711dca,90560273,6d776f86,759d74f,895980f7,1728dbe9,1df93076,cdcb4e8c,52a379bf,cf25216f,e3556def,e889b23e,2f91f6a6,47ece012,4e140aa7,734f1cd5)\n,S(b9be95de,27aaf198,c3001ec3,63690f2f,f516fd75,1864794e,1c3516c9,abd1384b,68875f97,dca1dc43,3e9b614,488cb8f8,1ff85d58,2ba853cd,27fc1227,1ecb6df9)\n,S(f5f257e6,c4d06a8c,53442b37,7519ae03,7bec31b3,c257f331,fff53773,28e9638e,b6a1e60a,48d03213,bb52e3ed,d20d0ca,c80beaec,bb40169e,35ff2165,43e986dd)\n,S(fc35c74c,17e38aa1,15803603,30af7d92,a5281b3f,cb6cebf9,df09155e,64099ce7,6e2f984d,41e8693b,5a4c1c58,9814d131,8421fbbb,2ec8e45a,c6239227,db79dae9)\n,S(ac135e01,49d97363,7405e5a9,89ffaca6,c1bc18a1,cce34aa7,4732fcce,d54384dd,3e38bacd,ff954a6b,6bccbf63,9f8d709,d8e54553,6113dcb1,c471a162,af021d0)\n,S(60a013fb,efb3c5d7,802400c4,e791a019,bfd8f657,cf4c1055,f3674f92,9f5f345d,7e763c48,3582fe3e,2a0a5138,ca320013,9907e364,5468b5b2,711205f3,38a1bd97)\n,S(a099a106,5d907a8a,43a3d027,3a789992,ceb3a659,bef93a9,6ed04ea,19a7acb7,137f9ffb,fe3c22ff,c034bb57,9f0c9b46,d5cca4a0,db1407db,6fe3d7b,5bc5a50d)\n,S(9ba1da86,d02763d6,187ea5a8,c11c9da4,c6ed7017,49f107b,9ef4fc3,94a792ab,f19e22d8,ab5459c5,5bf87908,90175184,8716aea6,5c2d9650,c472199d,6663f741)\n,S(3642701a,d30d1430,17be9363,3f28d90d,b5e02238,9350934f,63a514c9,a677ada0,2fdf9ab9,c76bbbc6,c4e79f48,7a8bbd86,6432fa98,4f52ac22,3440de3b,f1aba970)\n,S(29f79c58,100b7098,d8d53012,e2c98719,6188c0d,54712c31,c2ea3a52,d6941a5b,be9edd99,eaa6c1bb,d0ec42f,586a2806,919d5bb7,2d59bf3,7216890b,9a2d524b)\n,S(e011aadf,bc35284f,816d5030,c3feb350,4b470d0,ac5ff061,e5ed2c47,89ba1bbc,e0a98f93,4f2b591a,36e6ee97,f293be77,21ec1a9,3f4b2700,55a0c01a,3cc979e3)\n,S(a5c8816b,fe5356,37eb54b6,88b9221e,ee06a51,77ffedfb,3ed96ee0,4fd78585,3f86637b,9d63b11a,44897792,9a6aed53,7d65951d,aed6476f,e03be5a8,c9ff8e5f)\n,S(3b952c23,7e44350b,95207798,e708fce6,2e6d49e0,912a2509,abef16c9,c7194707,f784972a,419e6c8a,c9d41a38,57912e66,e6ebb631,6bcdeeda,ff49b59d,bdd68936)\n,S(8d9796bc,d9d8152f,80c7982a,187a4aaa,b75dd611,99f86632,72502f24,dd57af04,fb9b1479,94a31e3a,28d5695f,2d689951,317c2d2,98e9892c,89c98202,b7e611bd)\n,S(96b2bc5b,2f4e6445,1536f689,d7889669,4fde4d7b,6ef67f51,84517704,6a02de40,e0b76d26,f91982db,5039bbf5,afbfce51,914eee9b,352c178b,2145c4a1,88e89cc)\n,S(9bf7cf10,9f129500,e2a8f54d,8658ef97,4e3ab2b9,a1d0d036,25bef5d2,432e2d79,2113d7ad,f77e1c68,51b8bb52,188ebd25,dd6373a7,19bcc20b,e32d0f19,496e8582)\n,S(10d3ffa7,20375b5e,afc8c741,4d9aa184,c91f853d,61d58dab,11a04f2a,f3d4f1b7,c1f84b2a,8a96f43c,b215c704,6f8c3f02,c98d750a,d416f21b,eeb10ea3,f298c90)\n,S(56d64e2b,6adf1cd0,b8d63692,1b68733,e92577e,88430e92,c0e679e8,c3a5eb6,1370e,fbe98423,488427c2,57d5e696,5d4b687e,25e4b824,51b1a6eb,7ef71cc0)\n,S(fec4a03e,1c83cf20,75deddbd,20c24792,6dbfa352,a56821c1,420adc34,731528bf,a152b2af,8670e42d,3bba0d98,f387e9bf,1bab788e,fd7bcb2a,a787e6a8,bda95509)\n,S(580a7517,7ccea9ac,63ae6d53,e8959e5a,a45d11db,29a87001,779c260f,2fee92eb,793be69c,3263c64c,2048c411,115375a4,86733a90,d8c12a06,862f4f9c,669e8edd)\n,S(9286bfe5,78931ceb,cf97431b,1137a19a,991b46d2,d0dec2f5,35edb976,6af636f6,7e774d30,e962db42,83cb38fb,2053b780,c55fce80,51edd5f2,8cb1b5a5,d329f516)\n,S(606d55a9,9b702652,5382cf2e,efeec65a,803e3851,da60a041,e5422c1c,28f4890d,dc895a6e,3c2a6411,4a04a1e0,31b8aa17,79ae2c05,1f4eee54,7f8a54c,50eda1a7)\n,S(a16a0d40,833ec1cd,dcfef2f1,bcfc8ed8,11387dc6,4e4df6,6e807f69,75f917f5,548d7d37,13de4a53,151f32a8,2880d087,7fd281d9,63011388,ba991bd8,822d6527)\n,S(5949d2,be574e23,9a3e3e7a,ae20726c,4a687a15,edf5a62d,9b79d0c3,4f9f0329,71dcb25a,167ab25c,311d9427,5480f78e,f7f4e777,9723e55f,337a9121,445288a9)\n,S(841f4e4a,e67b0d8a,49d7b295,e9c1ff4f,cd1e2333,82101536,cef7c4e5,7968b240,1f561c9c,265fa4ed,eb979f4,a8dbe679,ccae8037,8cd73d5c,b56671d0,571f4161)\n,S(22623df8,c748e9f2,88bd4b83,142788ff,faf680ae,a2640d,dd43ec1e,46cb7442,380ef00a,dfcdb592,f964381d,ce9f787,17d5827b,494c3aaa,d5e0e013,87a55da3)\n,S(816067c3,6438301e,ea07a21e,5a60a17e,670083de,b3b66e2d,c88c6548,f45185e4,5afa391b,9a95e9f1,f04f4e8e,236fc39e,2eeedcec,45026647,f5982aee,4dc4cbf7)\n,S(f8f23561,4745c531,24cf6431,ba8e0425,7d28af9c,2c196485,3546924d,ce085c1f,a165067,e3b41b55,a548c1b9,3fe76b5e,bd101275,acd29e75,7f66753,6734750f)\n,S(21325584,e25b8a15,c25537d4,c70853b2,28bb933d,de04be23,7753b933,57f2f57a,3708c8f2,78ef57a,f0b00d5,17f21a6f,f627b5f1,59ba1f53,d20b727e,86e873e2)\n,S(b2f4f7fc,f48519b2,c00c24b3,7ffac141,88b0baac,bc915c77,845cd6a6,3fdfbda3,b206b59e,6f52ee43,3e7196bb,5f4cf3c7,de49723a,cd5b3e17,1c94e28c,7d57702c)\n,S(b4e65d4f,5f420006,b7c70fd3,9564f9c3,fd9c5c53,dacae064,62212fec,ee7f7265,307b6ef2,e3993bf4,f321723e,a83ec2c4,3c75b8d,684665bf,fc073506,816bee0e)\n,S(4f104593,9ac609ad,25f3968e,9798ee93,aa58b61d,43f4bab,8f2352b1,de3a7240,ed8d87bb,988395fa,581698f5,c55a5093,ed9d0a89,3f4aa4bd,186221ee,7f8179ae)\n,S(9b5e74ff,e515c125,9fa6b215,7ad7529f,90018e85,23888738,d097c016,494672fa,1d55866d,4c4e30f1,7bdbf70c,43fb3b9d,fe2df3d8,41e18bc4,3db3e3af,21fece15)\n,S(77bf442,ac8cf718,102968f9,49387b1b,30f8a2c2,c76a2cf5,10d817c8,7e17e302,bb0f9e61,1d90046b,1d3b1103,e6c5beed,e4daaa85,f6eee1f2,6a6e756f,d32af0e9)\n,S(27de125c,d49f2049,6b028f34,b16a9988,d2f5d469,30834fe6,4bcd388b,78c266a9,f43d86a8,483dd92a,2ad9dac2,4039ad2b,84cdfc2d,323979b8,1a43de25,5cb54bfe)\n,S(21bf7178,ae1d75e1,94bb60ae,4efb5a8d,7f026cf0,7f845b13,2250989c,4be9c116,6caa82ad,bc21df15,d1744466,4d3b58f8,76b52291,5696481d,434f689a,edb8d967)\n,S(249254,93ee016a,41b65b7f,8289da2,dc9100f9,9c0b956a,66d245b0,5632e234,bca30194,1cb51f98,1504c536,74f6f904,d883ff46,7aec96f8,2ed5ce31,7c45b3d)\n,S(d3f644c1,e3472b4c,d46d89b9,6b937108,ea8e9425,9b9316fe,230e7538,7d867f76,91822603,fd629732,a3b37ed9,d5227942,2e536ae,316bfb7c,597b2da5,d8cade5)\n,S(c8461f4b,e2bd14c,a88e52c8,147f656d,915c2675,46252e89,d0337f7a,e325b261,18971181,97ac799b,3f632868,e46efdf5,fa3b615a,a8a92b07,e38ceeda,9cdcae06)\n,S(b6e5f590,be20a938,c1b57e1d,a7bd6ca1,a8c2406a,aaa5860d,9133342a,c395a380,a6728cf1,a2f2eade,72d86569,ab5a6305,cf01eec9,6a6de026,ff146d5e,7d8a04b6)\n,S(3d25179d,465701d0,56d4eee4,b5efc10d,8b70138d,f14908c0,3124ec95,59eb5d6c,158b7bfe,1d61d7ec,633e88e2,b3c5897a,3b56f7a2,ac557c8c,3e032a71,8b95980f)\n,S(abb5d54,c7171499,95893425,bda27f10,d8515511,91af6927,9849a597,46f94d99,4cdfebcc,3be28dea,36d06e89,ff4209c3,7012ff0a,d93d7ad0,4e454422,c4b9a161)\n,S(989d0125,115ef9c2,900dedaa,4e31cbb2,f1243386,73ec624c,52352907,b325c73e,d3699ee9,945de070,fc1f28ee,14279750,d553df63,2951c0c8,d1668206,94c6c8df)\n,S(c4c5c5d4,29c3d1ff,628bbe4,e0edf70d,5e05db13,c82a2af8,2d0e4232,5e013884,c2c76cb8,825188a9,fc29da67,70ade97f,ccee860d,d13323ee,f2ba7e7,efa97eea)\n,S(8662d850,c623b65c,8db5080a,900a0e83,be947111,ec0b9edc,3601549e,26c0807b,a71d677,b0c9e7a4,f66a72b3,2918083b,f91e724c,cf8c9526,b3df0f6e,35da840b)\n,S(d26fef49,7e7359bf,33309b38,93abbd44,543b73c7,c0eaa626,cbdedb17,1d083898,ad8bb209,bb090b39,6b501ea9,a5070f90,4d60c20,d48dbad9,56d381f8,79851395)\n,S(569be8e8,c584b682,7d742ff8,5b402112,5b4560f5,f173c983,8f8785d2,229d8d0f,b09381a4,a8267d89,a8d5581b,f9a49d52,47c74a33,5e26e354,22edafc7,d41b8559)\n,S(de34acc3,4d1787b3,ad967bc6,c5960d8f,842f82bb,c95aa255,d4a9e794,d30116d4,2fddb41c,b2b6b52a,57cf4d3e,883d3f0,e322c40b,ef098505,b6cb3d77,a21816d3)\n,S(47430b48,76dbb762,6d549b86,1742a5b3,ece85240,70dd83d5,5446fa99,c5c50b1a,d75592ba,7004573,58c6a0ea,dc8ec772,b53dd048,8ddc73e8,5af357a4,af200df1)\n,S(f1d1e0b5,e6687266,ba17339b,76bbab6d,8c2d8ffe,f6c68fd7,9140b097,d6e9fe13,a56226,fc233385,349c5483,72300f97,a1d8494d,a67db50b,b96543d5,bf24e580)\n,S(22a6f735,76140de1,3dbd0426,e968c374,6e8132ff,383f44c3,c0515b85,f8cdbcd0,9dcd89a8,90270e3e,358dc004,40f95a43,430a399d,a8405e48,e69e3455,fbd18d1b)\n,S(2ddc5328,afd8ca0,9bb0c6ea,57442e8e,fc307b30,c29e2867,b46654e3,e1a9ada2,7b9ab90e,db84e6e8,7bedaa6e,31ff90e1,7d07793,19977393,b5fedb73,c087dee4)\n,S(60b6f839,a60af52f,d30a116c,58b9c65,1fb1c854,546dfa9e,1a01e2c1,95da0fca,5e77f69f,28cfb414,be39b07b,2469d8eb,b0e74306,1d856bcd,ca54d83e,20d26c40)\n,S(2790c19b,9b9092e5,cb06bfd,f95ea43a,2a1f1f28,57c96776,dcd26a7d,ddee53c,fdeea120,d04e6e78,b2387afa,a0217098,de067759,8b2bc5b6,2715d9f3,714e7f64)\n,S(e544320f,9ee8bc8b,127576b1,6fad9782,db181ea3,4514f7c0,d7f9046,f5113803,b93762fb,2397444,e69b63dd,9dce7c32,3c73680a,e26b5e0f,95211972,c0510741)\n,S(6c7f25ae,73e428d5,860a236c,bbd4d74f,8e2706cd,69bb4cee,39f9aafa,db55313d,d8cb8fc9,e33f9b18,e9a0864b,e58ea921,8db30c4b,d5dff091,6a44b581,c8dc9121)\n,S(289d1b28,ff710d47,4d1e9c3e,f3952f27,dd9eaa3a,30ef499,121ea53b,9b93d4e8,f36af80a,aebc2dd5,84cd5cb7,245b3cba,64285932,77f4be38,cf2b394a,ee880667)\n,S(f02ab597,ac01d673,25e87b5d,29130c18,2a6f4a8a,d4ef7476,b9fa1da7,5910b5aa,ae88c02a,ecf28b13,ecec5379,5c34633d,d3262d1f,65ecaaaf,fe89640a,cce38adb)\n,S(a9a974f,71a73106,57732c82,d6d4c6d3,c625bb70,4ec29a8d,2d8f8418,dca0413a,c20df433,eed4e96f,d5ef222d,860ed1e5,af1497ac,cfd1dc21,26e8925b,91b372cd)\n,S(7866190d,728e0899,19a0e9c7,8634b55e,4cc392fc,1650471f,4a21cf40,8d77496a,1bb5fcd9,540422ef,caa8e265,c35a1e64,29d79de3,a9369b23,3512913,ac0cfd22)\n,S(c8a7ffe3,44b3b8eb,f00e4e2d,e63d9540,25cc115a,9110c773,ce0130a4,8333b9ac,ca1ffbe5,10c63b5,674141aa,5ca87246,ca91280f,da97e806,dbb523fe,5ee67b6e)\n,S(6cbba6a,13ff6ad3,83419e84,e4da6871,9cc1e633,d4cf3347,2f9966e6,4f9208ba,35122582,c7893f4,4fb92c34,e9c4661b,5859889,62a7d1fc,fac8a2a6,1e214a88)\n,S(e07f8dbd,691a8611,eb5450c8,2c765dac,ffe9aa81,49ba3e12,87b23fda,fd9de719,932e35f0,8e39cfee,a2593799,4e118c7f,acb0c6e,5b526bc6,894b061d,8cfbc509)\n,S(62136898,32fd9416,cde720d7,1d3f32a5,51f3e238,fccc69b8,4b633a2c,86d2c5d4,137e9a4d,62247e41,8596d968,4f1e5997,791f3b6d,69cbcf68,206f715d,be784e9c)\n,S(8b010588,62de6706,253eb2fa,f710c086,40a318ba,1ea684f2,3254e8c0,dba7b9eb,54a48862,dcc56c60,cccbf43c,f7a33f9f,dbd7e419,56f0f48e,2ce2371a,19bfd264)\n,S(12d3908c,14af8346,fefbbbac,e56bcbae,3fb2ed87,dc30b1cf,eaf480ea,84f213d8,fc4615fb,df7ddac9,84676421,2c4d99,fef41e5d,98e5824e,cb181a98,9a67fdfc)\n,S(219d05e2,a7b8cc69,bbce368f,62922992,b474286e,df7c13dc,8da62d16,1784cd2,8aee4f73,9a7eb1e7,8ee9407d,e8fbabef,dd28203b,2161ede2,761e178,a34c7f5c)\n,S(d7d0cd59,9a76fa91,f691fa23,ad265f38,49bbe213,c38cb074,852005b6,d85de204,f349572c,60750dae,5ea1330e,a725a0ef,ed1a2d60,c0b1d9d1,e938f37c,911ce2fa)\n,S(a3fa69f5,a04c9023,83d8b73f,6fa8fc3c,9f65cfbb,2c77042d,635f4978,eabb6c6d,c798a1a8,9994aab1,4af95b18,f389a2f1,accb2d7,59997e83,72c1ca5a,c3cbdea2)\n,S(902e881a,825c457d,79872e71,e5d94170,8540734c,1d050e92,cc5c8afb,13b2d1cd,ff075132,63bf6fb9,11163ccc,f62f8246,de099f07,ccfc9e33,8ac82c30,bda62d43)\n,S(325f19f2,4c470556,d361aa2b,3f1932bb,6923ea5a,4f8cb505,d34cc60e,729c144,f4a9aeb8,29a6a0cd,f981bf35,81bf8f9d,73e3e9c1,61996178,2a57c46b,9e94bec4)\n,S(6994f3b4,41a6cf61,53e5f860,2cfffacc,bcdf7245,eb078247,63bb07c6,fa1edd4b,ec2fc5ea,892da897,29c479d8,d3f05152,198ee4ab,87f73bd9,27db1160,1874c174)\n,S(21855832,4e8f796f,fd51bd2f,8c1f6a8,5663c5a2,b5bad37f,3b7a1052,6acb2d8c,e77ceecb,33cec03c,99690d44,b0343bf7,3b93c495,5d67ccf4,b15d1d76,a1897c2d)\n,S(905daa3b,32f2a801,a567c312,ae4772b5,3196933f,487aa1b0,a5674cef,9d91b099,bf6285c3,6d271719,13691d5d,767fdc17,82b64843,5b2ca1d6,b695871c,41cf369f)\n,S(df7cfb84,34b60524,75fe5161,3dbe0e7f,1b685376,315397f5,b39951ee,b65339f1,e725cd7e,1419e455,2d953393,dd9651d5,d1beb3c,6fa44d2e,e580ccf4,df558243)\n,S(e7fb9efc,88842b9e,a3c96b82,1ca5eb80,385cb276,28cf64a5,d8c5bcb4,e5732491,c8e676bc,a6f9e037,263b8390,675a97d,1353c128,eddabd5f,5e928153,78f22331)\n,S(d1a35f0c,272ba216,1e6ac0a3,fa440f59,bad79715,d71e12fe,cc12369d,cd24285b,1f5b70f7,d475716d,b9ef2f21,bb156400,49dc41a8,96102ec1,806b949a,c99edb3c)\n,S(66ba6e8,5f2ddd4c,e17da74a,c7ae629e,4f420429,45932e5,55110da5,2a7b079f,d8ebac5b,eb8eefbc,f4da4f35,79bdffbe,21967904,36487733,263089e7,7a80402)\n,S(6f7f69a,26881052,b4bcf806,575f9c50,c36e7c22,1d7b9e48,7b1f39a0,b4f3a749,11d06b84,d89b88b,ab4352b9,cc160e50,bc183558,25bb602b,89235aa6,7331a4c4)\n,S(4be16d6f,571d503b,26169906,75c01ac5,41c23afe,84cadb90,eda0c21c,926c0abd,1041ede,ffa1f2dd,61a116c5,dd33fed5,d9ede78f,cb2311bd,9a04fe32,9ec1d06d)\n,S(8af88c5d,b55eacb6,760abbc7,91698c57,19160335,ee569bd,33bf050b,1e75886,4f5b850b,6bf2b4b1,29aeeb24,596007c0,ca203eb5,d2be6bea,f61bf596,bdd9a12c)\n,S(ad33e77a,3316eb8e,1a764849,13915e81,edb69518,8ce7507,2e2b6088,4cef8672,fa0161e2,4bc88bd9,da5157fd,7950c75d,6c4f4f89,f158f13f,16ca5e4c,af7ccd90)\n,S(444a81ef,7620afe7,91d96ee9,b1c34485,cdb51e1f,6022dba0,69ededb3,d9d8c2bc,a88017d9,a49d4ebc,2ee811c7,fbfcd9ba,bd268329,1efafb52,e641af11,9751e2fd)\n,S(5b1e07a3,9530f8b6,60787e9d,26503a2f,77af3ad1,24ac8aa5,1d10b663,ceaa5c51,fcf4c0d3,8d55e0fb,2731e59b,686a806a,e87cb510,7bbd013b,4500c470,f77810b9)\n,S(3e8c17,e986a86,57b4c403,3317e67d,b1d42e7d,9625e844,ba533ed1,73174309,deebe49f,f4f5a35d,ea0f396,63c7ee0e,9db702f5,c296fe5e,696f5521,94cd6caa)\n,S(a1096eee,5e9bcb19,9d24c078,b46b528b,6432af90,7f1d57e5,746e83d8,4d112c1,bd13e4fe,699436cd,656b3019,acd54f3c,97eace0f,e1e92fc1,3f08a76d,d2e7c6d4)\n,S(54758579,4218de75,db40a6d8,99a75ee8,36861093,4ded0938,98c071b7,6665f2f0,3bd55642,13e1c689,70cdcd94,fddaa656,6bcde4bf,29c761b5,c6f613f6,19174548)\n,S(4eb32992,fcb4bc44,bff56604,f4f74586,a4400290,5ee9adf7,f7bbc694,45456057,8576a8f2,68349f01,ada77c67,30510030,e0cc9d8c,66db7609,21661540,ba45c3d4)\n,S(350b2def,d2eb4933,c6d428e7,5990a7c0,f291723,f92e5ea2,69c5b4c8,b661a22d,61acdb00,add9f34b,f36126d8,380ef5bf,70f807a8,1320d59e,3540fb25,90de6943)\n,S(914ea8be,ce7f8819,5337341e,eaca129b,2da3c96b,306b017,d7afd984,75f360ff,f2aa5548,ebef80a7,483b563c,e8b242db,582948a4,9fc89213,d3272a63,85ac7b53)\n,S(f656e17,38da25f4,baabaa6b,d70e3f5f,ad6d44f9,c53e1a33,4596246b,83dc0fef,40a8b4fc,34639287,a65f53c,f373c2c4,c742ce4b,2040fef5,4c31dac9,59fd83e5)\n,S(a47c8af0,334e3ce5,464310bb,c0daa66e,d77e1023,a2124182,ce3e6771,933b618f,6dbccb54,56d7c75,5e71694f,fa1713eb,41ec5b2e,8715ec4b,52295294,c0c7f08)\n,S(a8a2862,5e1d04a6,5e87947f,82178d5c,3b5fde31,1eace688,6766ee9d,30753ca9,f82ad6f7,483aa04d,a79e672,efa109be,1feb3f75,d73923ba,94df2f1e,2efc2169)\n,S(a01ff54e,5f8eb855,e26903cb,3fd407ef,4fe06208,a0f44837,1e83f7a2,31c017d0,2247c6f9,c52f1a68,84c18ec0,77d92514,9fd59b00,27663ee2,f0e5b2ee,f2edf92)\n,S(e7b09c3a,626ac89b,6caadbd6,99a320c,61ef4fe3,11f6072f,f2d7c875,8d42aed1,8ed996d3,6a7b50e9,8e5c64ac,e03cf5a3,37c3c5a1,6d99c5e2,c0faefcd,38609fdc)\n,S(3bba9e53,336c2a06,ca89fb52,26059041,96307c97,373cb717,3f35a45b,863ff2fd,f2fe9109,3faffc16,f58ccaea,e54e9b8c,419d5123,6e8c960d,52ae8341,27d24799)\n,S(f61d22b6,dc660174,22122400,432f533,11950c21,b6240acd,af905f9c,2c0630a3,6068f5a,1a662cf3,93eb7e86,5cdfab18,692bb250,15de2796,1421a457,49ffb05)\n,S(a5b60855,6b1aa22d,8bc38dcb,8f3e4721,891c45dc,2702d13,7189be70,e8a80962,f77f97d2,d5e305ca,1fe20b99,e6c182ae,3a9b3a69,7cd5e34a,7199032,fcb1ddb6)\n,S(70c3aaf9,eb2562,e1cae950,be6f592e,f030301b,28022ac1,be3aa5cc,85e1a259,3f2cb7cd,31a8d319,ce4626f7,213aaef7,3f91f2be,a17addeb,61f217b9,4c587583)\n,S(1dd70dd1,a8755e37,28dfcc4d,443e7911,a67952af,c33e7d93,b975d136,8d06e530,4684f974,1f5894ef,47040074,2ecc73dd,240e677d,b6bee0c4,141dfcd,7190d084)\n,S(d44d698d,7aacfd4b,d8d6bb7f,2d0dca82,f5d37c3d,46573546,2b180cc6,9083fcf9,a18d803d,4232965,90c67b0f,4c415bd7,c0c94041,3740be47,2819bebf,87dc407)\n,S(84589ae1,30455742,85522ae7,4b1bc3bb,62730a10,6154d9f9,4109c010,51b34ca5,b979fa08,f2a9af49,bf6ffce9,b2fa707f,de14fcba,3de3b903,49bf6235,37b3606c)\n,S(3dec8fdf,89118996,bed31c1e,fff15c1d,bc84e73f,fd04c6f5,469d2f04,8b724627,b143f3c1,e20b5bcf,dbd1a555,f4ff88df,dacccaa2,bfd4310c,16ae2710,1beb2c8c)\n,S(367a5fc5,519dd9c6,39bfcc4,70ce465e,23a8dde,417b412a,2f0f4374,8cac160,5b8fbddf,2c6bfc90,e291b136,a3e0f8f3,faa64820,97a87cc2,dbafac5c,a7f021a6)\n,S(8aa5587e,7777606f,60bab6b3,20d88e93,1e7c2efd,487bacce,5fa3256c,9463efc1,ac5ba76c,98bfa132,c16921ec,aad52289,50beeb34,449e0c18,88a39fd1,d3f091dc)\n,S(79c00191,ea632ea,30fd9e6,b0d11c6,af3aa441,eca678c6,a5d6bf3c,c84cae0,3f954070,3b19a941,3ac0b659,bf401c2d,ae9c8bdf,2bd19e85,472d2d82,39dfb899)\n,S(c84de722,21a59e95,cdd951a0,66483255,e858aaa4,ada498b3,d4ef8bf8,3a04fc8,73cde958,915abf28,df811109,a6220449,548fcd2,f639102,158bc451,4af0a0b9)\n,S(8b1b8c50,c6327d61,e063822b,2a3c5935,fedf74dc,fe694c21,8cb6b892,b5a9d6d5,57bd8952,9f156435,f47dfc47,9ff4314c,c036766b,5b6437f8,41f60cb0,fe168b)\n,S(b45eec8a,3ae82f98,52117c4a,341f8184,33a31ce7,719d7650,e783fd52,48702c52,cd556b5c,c7086b4f,905d0fc,ea01497b,25411785,9ee9046d,c988c6e1,9e0a1c90)\n,S(a2d5dcdd,d93096c7,67b4871e,ac58cbdc,31ab7013,865a9cd2,c5707780,80757319,7aa406b4,b130b23e,9e6b5978,b1e0b537,227ae8a8,af62c1a6,a6d46ae,4b064547)\n,S(712036b4,e5d35950,a7564ea8,3509bec1,e97f6e19,121ae5db,3d314c19,b9ed2b2d,25862ff3,8d0560ea,4698d2f,425342c8,e3a32232,f9c9572a,21d7414e,68a93616)\n,S(5bcef0f7,d70fc8ba,942e58c8,79afc973,dca402e3,795adf0,7562b552,f0bfb392,7cc85a4c,ecb45bfd,3efb0e12,c3fc56f9,1a444ce4,73256474,54ccb089,baf1919)\n,S(dcd5702f,9d508a1b,afab9f0,af5c4e9b,b9e5f214,6767ab0e,b5c1d859,39741ada,f7eaead7,ea13e3a7,dccd40a4,a2526501,3369d558,6f0c735f,9eb2518e,ddcc1fa1)\n,S(2cea30d0,4f629d,91c3ade,1b8b7176,363bfcb9,25d3eec9,784b91bb,e6cb3d9f,a83f4bad,a42ab171,cfc9a76a,a3dde34b,c48ba454,b39b36e3,44446096,a1c42624)\n,S(858b41f2,767b191e,df15fcb1,3a41934d,150e54d6,e95035d0,9c6dfc7,a1c32f8d,8180b97d,76dc95f5,478a2172,4802a28,b34d6e9d,f65d5358,e5cecf82,9fde8dd7)\n,S(d5c98002,bee359b8,6d1234e5,ff418013,3eb9a668,d2f1294,245fd020,c30e81e6,4e522da4,cd2bc795,65a2e4e,e2fc87b7,a0b6bce9,1d90376d,921aeb49,5b3781de)\n,S(ebf9162,2f9cea9f,71a4ddf5,82de4b7d,34002d76,da8acfb7,d4d6c3a1,9520c1ed,eee75322,3e1881cd,8e3fb483,318c75aa,7e43d049,8e53536e,cd481d18,5ad4e251)\n,S(387f6a9,d08756f3,8c2e111,af74be68,acc4504,f3669ff6,b406f6c8,a61db4d,288595e3,ea1d5f91,26df96d5,dcf5cf4d,ed0bbba2,37224c4a,59db552e,87cdd28a)\n,S(897ff1c0,989bd52e,383a2d70,e5920144,9aa409ee,9fef20df,25574956,dfe46714,3cfbc0c9,308c6529,f4e95a00,644a873a,de094069,36dfd6c6,bcaecfa5,9adc9d1)\n,S(3255a8a6,8e0484c7,8b6bbf21,e2d8b24f,bbcbb337,6f84feef,b577ef1a,b5a395af,17b3c002,f9204b84,e6d4a426,d2d74893,79ef3fd5,441e881f,d8122599,2912aeb3)\n,S(2ca4a952,d4d9e3b0,3943eeaf,b1eda225,1fbca101,e7071b7e,2778ef9f,ddc55599,bfacbacc,df02c18d,f81a2c04,4748c7eb,e98631cb,63ca16a0,9892e163,23891e00)\n,S(c3e8289c,478c334a,d47b0410,e1b6ecb6,46ee5f8,8a4dbd73,10505f6a,de4383b2,5792c2ce,b0431238,647f4309,cb4ed220,229bee,2727b91f,de4004b3,d6f0f55f)\n,S(2bbdef60,a86292f9,867ad63c,67f98420,86fb968d,db92d9d5,f87bd27c,15119049,f4a4b762,3536c479,29099d19,3d40d4d0,e75dac62,54f03538,80286756,60a85362)\n,S(77a6e090,9e7dacb3,18014ef0,714a4be1,fe3ee47b,e22afd2c,e0333cb9,ff2496a9,54f0e475,b1a9906c,d1d915d1,81961492,34461e27,e163c384,3815d188,5251065f)\n,S(d195b96b,78719254,deb4f413,979f64d6,ea94d5e4,79350b11,45c39e45,4f40ff0,238a4440,613c846e,9472d4b2,b0a4db88,b8245cad,a5af469b,d997f729,c0e0636c)\n,S(c39aa336,208aa65d,75bb0f3c,6084f414,ad024d15,48da5bd8,113a619b,4815b1f,7aab1ed6,32741dd4,14883b22,6e573ee6,455a0053,6d849200,4b233153,1126fe5a)\n,S(e80ca23d,baf82db,cbe0bd27,24cbb31,d6661c70,44d8a8d2,2967764c,fde31f30,a153d1d4,73187878,bcbc583a,5eb83e5d,f67e8142,46861713,8c484744,a597451b)\n,S(395b7a65,a5a9c23a,f96723a,4d595a7d,f3e8505f,e0aec120,711cb7b0,2e72ef80,59020dd5,47476e39,36ad37b1,9a256543,4f88cf03,2992f4b6,2229a5e7,e49bf990)\n,S(67a7e8db,b83e23d2,7b57e2cd,9512a5da,e8b49545,ffef2577,644fda22,910b495c,7c01499d,3791b9f4,100a89f7,8e80b410,41fd34ee,68ce1f15,a8753032,e8965735)\n,S(c4038e7d,76d2e7b0,86986395,2cbe2ce3,ecfb4b08,61423892,ac9b3b3f,6dc0c7e7,61bb3b0d,9efc9b7d,326a27ba,bc34fc8c,129460b,6642629e,72f20351,65e92f3b)\n,S(7705a5e2,26a4d3ae,ee69c52f,5fc3f575,b9bdda08,70a19a8,8a525698,c3a25e5a,458e096c,f01906f8,c2426973,d1c6a982,44be9e02,22406207,3a883e4b,53c7a1b7)\n,S(f3ce8bc3,5958b5e6,16a994fa,1fe0396,68a5f1f1,b464a875,9e4a3475,34ff48d0,9c1a1d97,be3ad78b,67c8c441,f7aec63f,8dc92aa0,87500d6b,222a2473,e10058fe)\n,S(905ec120,de69cebd,b9a9d764,e01d6f88,3ebb94ad,af5685d7,6649e7f3,3ca4e0d0,92617e99,3974aa3a,774a75d0,e51c00ca,4d42ce12,d79ab0e9,3a8e449e,9ca9d554)\n,S(b1b74a4d,a3578592,8bad0edc,3664c1e1,27d48447,fdb246b4,f15ada68,9b21eeed,c43539c7,b84e9e8f,bcce3823,1322c4d0,c14e4d90,33c4e132,8f5b26ea,9d3206d9)\n,S(d440165,c72f2d46,b2fa2a47,1c42dab7,8dcf814d,12d3e025,bd5fb963,3d8bcf1,e0864950,261f5fac,e97ad9cf,fc7683df,fabab749,1d80422a,ca30721f,5343ae3e)\n,S(ff524c4f,722c19a7,f7b910be,6d573a57,fe08d5af,6580aed1,de03f939,5053b303,fd4ad4e,5b25aa8b,b3a62dea,b320335b,5b9f1368,62f5f913,98fbaa61,b753bf0d)\n,S(effde0bd,331c1083,e4b76a53,c9c1ba43,8fafa2b0,4a3ada44,63a5fef1,8d8d091e,fd7a869c,a75c2105,e6ae5420,86ccef0e,c563bddf,2b41ab9a,ee0e14c3,1d947dde)\n,S(a5e746c0,99c8d99e,88b4a304,b583adb2,1115ba64,e409d278,f40c4571,2f3875e8,7f832112,c2af3830,2c4baba4,f073f7fe,84170939,dd9e8c07,fd2c1eef,2e934a68)\n,S(6accb9e3,af5ee943,9d8daa72,2fe45513,7df5e274,486fa46a,1ba19093,32ccb431,f0de1658,842d6580,507c26a9,b68f92e5,a3faf108,1fcf5dc4,43ec9dc9,9f28dcae)\n,S(c813d055,e40d32bf,6e8e782b,3ef85698,b86f3d31,ed0123ba,1ec8978a,f72b6d4e,baf6d757,2f924631,c4da4191,684c6280,47d37ef4,2bb9528d,28879011,8d068ca6)\n,S(8b882012,2cadfc62,44fbaeb5,8be4d587,599dfae6,2fdf1177,38a844d,97c7aaf9,f5e6c293,ac900da4,f716e131,fa5a42a8,7867c8a4,76808b2d,4093c782,6f7a6a3)\n,S(8f075050,f49ee582,b54a5acc,4ffaa443,bc02ff34,4d0717ee,9619d83,2d7310ce,13b901bb,7ab3d325,7cc555c4,a4799a3d,f1f9f9a8,6b7021c9,b99a1315,b5f7fd3f)\n,S(bbc852f8,cf643e54,3c65fb1d,f2f72c97,89a456db,21c81f66,921d411f,b0374c58,ad08eabb,e7971e24,b2bf604c,fb248b3f,a27e1c2f,84f032cd,4c14bba2,b30a590b)\n,S(2d77dc4b,662b55bb,878edddc,9dcc2dcb,9278cc,b1e549fc,ffa02503,1a80bc1f,288bb0d8,4fa7f2a1,ad1a62f4,e76ef6ee,c07707a0,89caffff,a8e60870,ecd058eb)\n,S(bc83f71f,f3b4a86e,b9bdf7d9,94bba6c8,c90945ab,9c858b4f,fea7914a,d7ccbdf9,18e91fa3,e5067d23,809ed455,3d119541,fa3c2563,a3a88b30,20d3e49,4b232292)\n,S(7d5b9657,8d9b88e6,b0e11b7e,847d0524,45f83dc0,e2bbb7b3,205db435,2c200919,1e689f7b,8830c10d,c28e7230,c569af4c,b1c9e672,aafd4d35,2faf5570,90515ba9)\n,S(85e9f364,8d758688,31dbab4c,7460c4a1,51614887,cacc3cdc,1baf928a,200cdc80,7f4ce518,d5045c0,5865224c,c07f7fc3,5ba5e4f4,c03ffa9d,d5f8e5a1,31369e27)\n,S(425390df,c1c094bd,34855816,dbbdb71a,9c1d1077,45b1c65d,a101d974,4acd0810,81f14cdd,20ef4d70,69026d94,f09de176,707547c3,8c0f27d,1e277d4f,1f49bc00)\n,S(3cc7cf0b,66dc93ac,250d00bb,60a0f75a,dbb59409,bf8e4419,4cedaff6,413549d7,331a632f,c3dbd899,f688bcf9,9df70e66,ae17b719,a2beb23a,664c1d6,1c204a58)\n,S(fd72088d,b8a1bce8,8fc923b,cff789d8,9d6a0b2a,2be3b5f0,17e2b3eb,ce70853d,d3912b23,a38819ba,eb329638,3a0bedd9,93db4aa8,df647494,b710dec9,9eaf599)\n,S(3e558f8d,5e0096da,4d8940af,9a0baa25,c7318541,c7dd37a6,b72b35ac,efe65060,2a403d7f,69d805c,3ebbdb3e,fba95b87,f78f6431,7fec0dde,7695053d,e660e90a)\n,S(70708223,f525f222,16c00149,fe1b745f,721ec32a,90fd0b01,e82f2049,d8694a7e,ef4ad787,f0b4d53f,19d86ac9,7d943b5,fce17d88,6366354b,410dabeb,efd12569)\n,S(eca29625,eabffaf6,4b9eddb7,11e4cf76,440b4a94,def9d2fc,6e5e9114,aa414f72,f1f83875,75afa3fc,b23bb227,4c5890cf,f798b628,283989dc,d3538b8e,237618cf)\n,S(5b7c4750,542df0c4,c4606db4,6861925a,da7423a5,66d6c108,77838f65,5f297695,42811366,1ae1889f,d6ccb1a2,4cd9a6a5,de04db2d,5e805079,5f922b9e,791f784d)\n,S(af1a5fe6,40cb2ee,d36982dd,1e7882fe,bd5da168,8005838c,b379b986,bc012042,71570549,305fa634,a63d12ed,1fcfc8a2,5768778e,863d4778,b7e41215,ad3e6224)\n,S(727443a2,46787e70,f83cd1be,1189c4cb,e1e8b18b,1d57746a,9a319676,9366b1d2,86357826,9bba3e89,a12565cc,1770e5b4,4df56ac0,d202fdea,d68928d0,6d16d540)\n,S(967979,db34e62a,149e6835,213991f7,ae2c9a2b,abf3d255,6c5e198a,12640b8d,99dc1d4f,52445651,3cee44ac,3bf3d1ed,8547b827,251b3b01,4d4c07c1,fd9edcc4)\n,S(794009db,8f3491e,27ef9d73,905b06b2,be56937d,be57b8b1,59dfb883,af203601,5a6ad64d,7ee5e1cd,15a6a087,289d86b4,5db60d24,243917e7,50eca61e,2ada40b6)\n,S(87cbda39,6f90b090,dba9470b,1fb0dd1f,d2f4212f,50791511,cf6297e,a9851d10,9ca095f3,a2a4f997,501fb4c9,c5585dc7,fb8f7952,e11cd3e7,73a92005,a41b63f0)\n,S(9ed57b03,475d1752,58c20772,1be7e12,cd1f3ada,5b95fa8,4b245b01,b910acb0,d58c9054,43bd81af,85c58a7b,d0cb3e8b,25310644,8e1ef50d,324eea36,a3bbd5eb)\n,S(ef8d0a22,92ca4498,2dac77e3,86113363,35fd9521,fd266be7,d5d354e6,28b0402,e55c4b4a,556881da,a4a23e5b,677c1a9a,f2f547d2,e2b4037f,f9758a74,3cb58b6b)\n,S(6dba21f5,a274f29d,502d369f,4fa4ed08,2299f6e1,b12f5c75,abd01597,d127e3d9,7685f72f,a0ce41e,8c4302de,3e6e9c81,c951f69d,d2df0f3c,930da77a,51a39d94)\n,S(8cdc3ebf,857ac235,7dc1b0f4,26ed2a52,7841969b,7fb332aa,6ba44693,c8399a3d,234dd3c1,915ac714,6cd8724,9b68a19b,df250dab,2748abec,a5876fa4,b7f910ca)\n,S(a00829c8,caa665b4,7e3391b6,f4706898,a9c790fa,29344de1,e88fd882,b5eca2da,b7c8fcc7,1e834cce,5884b129,98318254,23486297,6068eaa8,184b5316,fd424110)\n,S(5872f762,446cbeb1,4a12e54a,1d4f22d6,a4ed5b2e,eff7c5f5,640801dd,2149ce6a,8aacd3e8,862757fa,1a70c29e,24364ef4,4c37d5d8,bbacde2a,c75a0c1c,28ee198f)\n,S(b70ed5c0,5dba7150,f22677d2,e5b532cf,53e7ceac,919d3b2f,ec4cc6b9,2fd34f2,7e43f528,cc74171c,a2fcee0b,18d8fcb,76c3d69b,8560831,26bd4482,a4d28cf8)\n,S(4beaa213,3c6161d0,c7da6d7c,8eb09cba,2e8ca505,a790a7d3,9d0c16b,8053bb52,da4c083c,9cbdda2e,c6626d8f,e4b2ee13,703496c,c298bffa,db1acdca,99d4f6d5)\n,S(a8d31ec6,53ce1834,a78de363,c5f9abd1,8594b34,4d34f5fc,8a10e81f,5804831,b4d6a9cd,7cbbe370,9edb5601,cb7c8ba4,8c462c18,594a4bce,64f4c286,dac5cff9)\n#endif\n#if WINDOW_G > 14\n,S(a8f11586,f3df4945,a753c485,ee0fd4d,e410771d,bddc1b26,c9ff10e0,77b915b7,a4ad6f16,dbd741bc,71b2dfd2,dd2d340,3816bf73,4e73cc10,abcfa6bb,d0f161a4)\n,S(13e697c3,812d4772,254082da,372892d4,e1a66e1a,eb16bbd4,f7a0d531,c979cb2,87fa7baa,f6def12d,31e42c14,f672c0d6,a9d0e2e1,ceee2546,d65bd01,c18df57f)\n,S(3cae4590,821a9697,a5963269,b44f0222,98f60021,b6048b3f,49c6fd4d,8650c7a,e03f8745,60418449,ad97f28,41664745,349329d,268c1c43,86e25147,6e44b234)\n,S(6f42f6b1,cb6bbe13,cf081480,766cbb36,9d2e63e,e691722e,ac81621c,66e0fccd,e5d8f8eb,67702ed9,e33c7b71,e3cd7b25,cc9cd315,314815b0,b67e8622,fd35f022)\n,S(43d24bc8,469cfdb7,51ca7d82,98727059,6fac14e2,11d37041,370f3bec,90e411eb,2129d618,fb1f7030,9715b2ee,d8e70aad,8b172b74,425cd747,3a3fe40,d7c50dea)\n,S(259170e1,d48b6f36,6a281592,3474f0de,434f4ccc,e45126e4,a15c503e,c1f8b97c,9ec06188,dc194bc2,be131217,bb862943,aa9cf36b,7703c45f,b1ffd282,c3c12549)\n,S(18d547f0,426139b8,7837d1c1,ca0f5f06,883581b2,c001e8e7,2565c9fa,80fa2719,26d9dc3,e1145ccd,23ae36e0,5c133f6a,5ebaa9fd,bb954792,3e762a8a,9fb60260)\n,S(23b5936b,f2dc961f,2fc93814,4c96232d,dceb477a,753253cf,1bf05713,1b9e58be,9b678070,1bd976e8,8d66e740,2c00bec8,e4fbdaf4,976289a4,4391b28d,45519b07)\n,S(46de46fc,209df62,6185387,938724fb,702c3239,fcf29113,2807894d,148774f6,cdc2ab0b,5d37a348,1b44de55,d9c50ce5,4322f8be,6f284ed1,ee49f04b,65f4f2d8)\n,S(d3b78208,f5876faa,c4d3c970,3a87a586,e897c11f,dca9a7cb,6573c814,9b5d5da9,112ecaec,9f4451ae,23485579,9cfee804,ee053df7,8e65713a,cd43d953,471863e1)\n,S(52d51f46,ac86afc,391e6a1d,8ab1d862,2492ae18,b3e86f13,5e42fed9,4cf3735a,cea47627,e7eefa90,7b8bfd12,f3212ea0,bfaf9e00,f407bb4,8a86039,d4815215)\n,S(46451d04,48f3f959,e133723e,b9138a73,b3877adf,f294ff15,6303a845,65a4c39a,fd1c4a00,bbd9aa06,afb14790,5c0530e1,d6c3b5da,c9001b9f,8ec76df3,c7bf3c76)\n,S(a12f5e51,16c58aae,90d8532a,9182d54,f539014e,e2d8357e,5ac7854,26fc78db,3db94e9b,f37ced91,7c9f466d,2a6db2bb,21725e9f,f4dc1482,3e6e384a,265e0cad)\n,S(98999fcc,38fe6b71,97ebfd61,fe8942dd,be944f98,6f139c4b,7bd6bd3,28ac250c,48adfd3e,c348281d,c23335bb,8702cf8,acbdfc84,9ee34a3a,14bf36ca,b7dd0ae8)\n,S(8ac22420,f9b9aa05,705b31f,bdb57d05,218ad72,ce09b489,4d0b515b,4e5940a8,37a7e2ca,442b2446,686f91da,db6975b,6f63454,e3a96df3,de8c62a4,364d30b6)\n,S(cd0804d7,b1aea00c,13a94a33,f75f3736,f5759080,96a2d418,c5b54c72,de31d619,c7f68576,10df1c38,6e677bb,dd6dc121,b3d9e9ca,e54d22bc,a5ce1184,a3dc755e)\n,S(b6c4bde6,2f8fe3d7,3c32e641,573098c1,c559e847,e40f60c3,49d40050,49b0411e,62c691f1,68510458,3e5191b3,758d7e3a,b2cfa31e,7a00d7b,97e39f88,786f9a9)\n,S(c20990dc,70134917,42cec766,8b725c26,d918cb46,6cbf7ebe,7b1f37bd,63d5df0a,6f1e71ce,e28b22e1,9c6f180a,4d7a48be,9fc696f4,cfd418d,134c1196,6e285d1f)\n,S(ebf16672,45ac7f7,385b5356,dbf977a9,3602a11,40ada114,7face805,dd93f9fb,24b15faf,3b3ac9f9,833882db,b81a976,9a37e6ad,1a4228c9,a4f7d0aa,fcca3400)\n,S(1c620657,63199ded,804deefc,c33822f9,cf3d4c1d,72f2022f,37714eb3,83367621,600221e1,48f74ad4,dae118d1,b6dca782,e00117d4,92881c23,b5a7cb79,86cad767)\n,S(40b300d0,7520348,38bec63e,f155b527,286db841,754702d1,d512c183,345d492d,29305ffb,31b1feba,abe027b5,f432679c,e265a57a,3960b8b5,a66e6de9,5a10fee6)\n,S(5768ffa5,c8b56772,1e10c2ea,421afef5,dfd84120,a8d40e13,751a895a,fccc6c2d,52ee5ce2,e60ec485,7ee62e81,fb2eb118,4d2a6ecf,d8ab7e09,dd728d16,5e508d30)\n,S(d906e71a,b6bc6697,858c66d6,82aa85af,e8d80ced,5f470ac0,8158b5aa,4cabf2b7,c75ace8c,74552756,8cad89e2,201dd954,bc6f4ae6,3a671d2c,9bed78f6,40b7e70c)\n,S(f71937e,f4553a81,a3f155d2,2f81a5b6,e080c0ac,bd8f5c5a,fd437960,6a63460d,d6e4e57d,422df901,e6292a28,c83c3bf4,136b5700,f6da0351,33099feb,f1228b19)\n,S(3c498699,da858f1b,364c464f,b4317b76,5d085393,1c187888,83072cfb,39ee337c,cf3033a8,9749a0f4,fd4ad867,67b919a1,c946dc67,cc46524b,af5c0015,833daa0c)\n,S(c416570e,cbc5576f,97090660,438dc3ec,be269c42,6e36fc44,45d53b0e,b2c5d54d,cf6380d8,76e20ce9,5cc181ac,4fdd42c4,b91d7132,d1b1c19c,4cc0db01,4ed782e)\n,S(8f97b2bd,344fcf8,62846992,e826f5b6,7fe7d103,28f34231,8a9f7de9,20d71110,e296632,fe41f8cd,b3da3ca,e1c356a4,2424c649,11dcdd58,c21aa1f8,cee07ec0)\n,S(6283f371,8e67e917,5b8c1bf,28e66bd8,470dc4a0,1a720a8f,cf1df325,fcb0e10f,5e80225c,87c0d6fe,3432db79,e8cf4365,8640ad4f,21efd2a4,333eb6ae,a46bd342)\n,S(9e29c616,ba66db06,bb71e56a,2a049727,e07b83ff,cdbff6ab,898a73a2,f2f9d58d,b5997133,bdfa29e4,431494f2,8444f186,7c4fcc1a,516ca195,c8eb6fe3,f5693dfe)\n,S(7a0db51d,56a2b33b,8ab33329,a1d41454,a30e34fc,3db33a31,45c1cb07,923ca061,334164ab,64cdd8fe,9a106f2d,156a16c1,5da4f07,fbd7f1ad,e9d1fd7a,c8630fc9)\n,S(5994233c,13ba74ea,19c1c65a,c3653a6c,cef79c4b,bbb827af,e736545e,33ac05bc,2175bea7,3090437c,9af6f994,b33023b0,5fdb278d,c0c59063,eb3b805e,a6b6bf6e)\n,S(11e13de,2371f715,4d15373d,d52c504e,50811146,10ebeaa3,f47a3335,ee4e17de,fa961827,b81e71fd,60696d97,17820d67,ec86e8b8,74d3d4bb,f50df644,61f738b2)\n,S(787099cb,c8896328,dad08bca,4e682e4,90461574,29aaf740,23795a1a,47f25ccc,1ea5755,bd653ed,ee7ee8d0,b3e6214,df2e31d7,731a1c9e,47a95f46,8c3c8ac5)\n,S(c644c88a,fa42bae1,27bec7d9,528cd695,7bf7d906,942baa4e,14ac960f,46469cd,9d7b39cd,22007b04,f61c5905,3a3b7614,81dd45a1,532d395c,baf8ffff,377f2644)\n,S(79d1abe5,cdc8b0c4,9508a87d,46163d1f,ada43640,ca1a5e89,d2f1c07,8c58820a,465cdc,983f1be8,948b850e,a9a4d9bd,f3898781,65d5a186,1c94d3d0,3fb9289)\n,S(e8d4fa8e,db2a1612,d7b6fd8c,d6aa2f1e,a8f1ba1,32572d6e,dd0826ce,bede0e55,92aa3d43,e944d032,afa03d23,dcdb4604,56cb0363,1fe2f8fc,404dd9f3,f832f065)\n,S(6f99e75e,b09110e7,3d5e304f,bf569037,577554e,51861356,40c2c69f,4a92e88e,63b5bf05,c554aa30,261a09e3,b292b9ce,8f1bcbf0,ad91c35,aed04f31,567757bd)\n,S(cb089170,d912f8ae,e59f21f8,8860c0d5,182b5252,3b2cdf35,b9795d1f,20c37815,4e8c5b3b,6d79cab9,9f2570de,8c58c34e,6b6f5e19,b285bc4,6988ac86,20e645b5)\n,S(5c248793,51e487d3,af1b6d16,b25367fd,9d2b7185,9923c565,5d7567d8,ffd621f0,5806bb36,ac3cca86,2624401c,27c54e90,c76fc747,7e83e6f6,ac89f22,35c84211)\n,S(f1d10f0a,2ce54b90,ee71ccdd,eb6dc4d4,c2cab0c9,5cd35bea,5f20d3b3,51d15896,7bdb4d3e,cc613f8a,8fb84d25,541970e0,6c7385e3,c04022d5,82e2efb8,4998eead)\n,S(536a5966,b594b460,bd27b4f3,aea6b555,95940f06,311970a0,36dc0fa2,3a274519,c44b0b54,cdb4eb87,b5d70d9f,bfd4a601,5c34182a,31a882c9,880878,7910b3d4)\n,S(7f8165ce,ed27a393,41d542e,ba9ae875,554265f6,1c1c56c6,cc0bbd66,2ff88686,6993724,26c18b1b,dd1207e2,f3bcc0b8,673f481a,e7638d5d,45134835,9b4e39d6)\n,S(12214607,c610d012,83b9265b,c59d7458,4e0a79f6,8a4e8535,a72809fe,11a6830a,5d26e498,9e3edaf6,27cc4bb7,105ba8de,3344e506,d9bc9a33,8f1e3219,e473e609)\n,S(9ad7f097,1d1c326b,8ac468ef,706f53a1,9e8fff25,8e599f0e,72acaa15,b21d58b7,2e7c0921,2199c7cb,da8d3645,a5bd7831,4234849c,41a238c2,a3dd7fad,fdb8a880)\n,S(355f75a4,9df69d8e,4ccad41b,1fb0445f,619ba9aa,34697a5e,24ec8e92,f5b41068,9ca83421,4622ad8a,90a09469,d155bbec,717295ec,c071894c,6c91a7b6,e1345f24)\n,S(bcde8058,8336a996,fa6af5bb,5ebf7441,ed3bda73,4802ab5d,5c0eac31,8017c706,49e40844,78cf1912,ddc91907,26411814,a782a3c1,452117c9,993d9e8b,4f247563)\n,S(372cbbc3,3417320e,21ac4ba5,f286a9ed,273b6425,e8ed22b,d0c352e4,f0a97270,6e05363c,bbbd6b11,8f2842d1,243dd629,247e90d8,4e7c9d02,c3677f93,d1d01bca)\n,S(a1122e8d,82e97ff6,ce9fd024,cd4ff32c,76aa0aac,c1c2849d,887240a7,a368e064,ef97035e,1df99943,1139cb88,e03bdcf0,8b3a5c86,d4b42d13,9b3acb12,e4e7df3d)\n,S(e0101d71,1d0c7b60,8093997c,229bbbed,63b05224,53c0079a,518826f9,2bfc9d5c,a0acb9e9,c3d3d384,7f2d38bf,29da71c9,af0b5a41,5bf738fc,be24e367,c8db2fcc)\n,S(6df3e575,4b62c92,41f8aba4,12804ddb,74ec864a,12076a34,d9cdf9ce,be336e8b,bc66fbf9,276fc85d,767c2155,ef481295,963cf371,c0ae6b48,50140d1f,c32f80d6)\n,S(e5794801,97d3eb68,fd859d0a,a616912f,a2a52a7e,f3881969,626f43ae,4ac20586,3ba69743,176c43f7,7afdabef,a06eabf5,94b9d0ec,1114f352,7cb1b127,697a5275)\n,S(7b290c31,de7dcb10,177313f1,9a15d751,c128bb2,16823c5d,69298baf,575657cc,9d3b3707,d8f2b17f,e14b6b1d,80c55d14,b747c3e0,8c79d55a,bb54809f,d96f99e2)\n,S(4ce2adcc,18632b7a,560bfc3,beb7138d,8ab210de,6cc7f6cb,47171b45,13e991f7,5aa8204b,689d8f69,a42e08d,5ecd2936,97ba76b2,1bae122c,e9252659,25a874c6)\n,S(dd798cc9,97530af7,d7ce96d1,a6a93aba,c29056db,c69eebca,f4649648,4942bcb3,e9ed537e,7b679852,88bab4bf,36ed677c,14db982c,9ce8714,b4f3a32b,56609e49)\n,S(356f4414,9da655e7,c9ea5a3a,5c4847a9,f908c608,aa492efb,15e7cb00,8b065b79,2adb4e6a,ce059ee,44ee8962,b4aa8c71,a4d55f31,28f56877,6c70c4c7,19fa6332)\n,S(b607a62b,c16ffea9,b30f61d9,c711adb1,d110c6b4,357b1e0b,dc71c8e9,4d06668b,6b933ae0,9ba42b06,96419a90,e6579a33,8f4f3fc7,5134abf,70cef838,efc5270e)\n,S(77fec5c9,24fbca2f,f564bdc2,96ebbfdf,d52f0dfb,15011792,57085c0a,8fec498e,6c7729a7,c92a6626,44f33fd3,1ad5142a,b521720,24e31308,dc11f73c,ee29d69)\n,S(804dd2d9,8014a95b,7fea2651,195585ac,acab7a46,1f3134ad,f2c4403b,3de98461,66fae33c,458de63b,dd04fce8,1c425938,dc13194c,ac03205a,c278c071,918a4e84)\n,S(65866c36,90a6cf74,95ef54a4,f222bf9e,3ea803a8,98eebc19,2214133e,9ad35234,8cecbc5f,4a152864,6350711f,c4df57dd,8a2c44d,4133ec17,c95e00d8,b49c62ee)\n,S(eaccdd6f,2a9616ed,d6f8c3dd,bcb04c1d,49f0c4c3,8d8c34fa,d47174f9,2323e15d,15a435eb,e23d23fb,2313b59e,2fe0367b,17b6d9d,e900332a,20430362,19c4591b)\n,S(860d382,8ccde42e,b27652d1,c159d9db,57a0b9de,f290b071,e93e36aa,f730c53e,b4688879,ef616c7b,87bd37,641e0381,115dd487,d5fa3e87,99257afd,26906aeb)\n,S(fe446d0e,8d174570,49394416,9c332f9c,eb47e70,3f214d83,2777398a,dc8189bd,d4cb299e,760ef11e,a3846dd3,9a49f34,4d5c10bd,ba66dccb,a43e3647,718e598d)\n,S(e4e6bb03,528f913b,bc34d910,2a96385e,bd0b8aa9,a07a863f,9d5d41c7,b982a578,46ed6885,471b4806,aca3c265,d0c40535,4bd63da0,af35a89c,e8a86896,63d38690)\n,S(12d69042,a5515732,8b729ba4,4fc3bac1,95c419f8,ec71f438,e676d722,4509bc56,80d7fe55,52e88a74,a87d24ea,de1f9e35,de5c45ea,b8a9b48,9e7a0b8,4bcf5d31)\n,S(d3ab5380,1f1b1f7,36d94c4f,2af00a81,ee1815ed,83dafdb6,ef5189e4,13a32552,691c4594,657c0809,f7b6335f,fa4fddcf,8af5b729,9262f790,2ef12e34,f546a401)\n,S(50bd549c,2da95051,7b4c72c3,67074539,412f3b4c,45ec69cf,aed0fe61,25b50d7b,147f8768,515cb545,2f291d4f,5a627f36,5c88b2b,d19457b0,1fa711fd,9bc71abc)\n,S(a36bfbc2,330165f0,728578b9,ec81d14,c0417090,e6ed73ac,e8aff550,2ad9c62a,acb88155,5251f37e,f31aca05,bf33f9af,9ccc57df,58692067,4f11b787,8c7c9337)\n,S(2be3d416,ca9627d5,9f259f0,1d52d915,9972f50,c391531d,70a6b79f,735e7413,fc0eaf6c,97d11c6b,cbc2722a,b3e821d5,363b04b8,edf2b700,15ce37f2,f70e51de)\n,S(7ca7ca3,393a9884,c94430ad,20731f2b,7629203e,9c892d22,ae6df1a9,fa66aecb,c05c74b4,e2580f6b,9be6efd4,379b7631,26d3e0d6,d4e9925d,1a7f874c,fd620f43)\n,S(6805c83e,19aad851,6fd7a4b7,e9bbb82e,28d9d0e7,1f1608f9,dcf37a71,3b434893,2313791b,8fc68b18,444cb309,9cadde98,f4c95ff9,88ddf601,ea3eacb5,bf1c1512)\n,S(7540f073,3a358a90,80d2b07b,64e179e6,5de8010,6eed4eec,dc8c879a,87d007ab,998820f3,bac2fc51,48b0823a,d20b5f77,eb7acf5c,fb2e968d,2b98711,a1ef778c)\n,S(6eb9b5ac,960407e4,465a0c22,8d98621e,47f169f7,61189aa8,f7de2fe8,79daa64a,6a32f21d,379c38e9,229ed85b,33b4a35b,9999281d,f96ecdc0,18d2482,67d85d54)\n,S(e32d3fe0,80d92f46,58331d25,f0f2bbdd,43671885,98cda416,7b4920ff,afd5cae,61a8a2bc,aa82c5d1,1e958a0,fbfae374,138efec6,84ea8e18,af1d13b3,5388d1b4)\n,S(22a0ca56,c95c5221,3ca126b,65e5382a,5f14d17c,976da5df,54942495,43415d70,4cfbb8e7,7e3f04c8,69e62ffc,edf23907,e8b17a48,13fc95d3,cf307e2,978e0bc6)\n,S(ce3aeaf2,dceb0f4c,50120b90,fc027d7b,b5a4cddd,fc337e05,14298873,e3ff340d,49f2b65c,4a64b462,69e93c2f,ca6cdf14,b0c81982,b095ed3,644805c,cf333021)\n,S(75251b27,b360b236,9c0cb297,c5f6ec1b,70f6afbd,5af1acfc,38bd765,9c9dd5bf,cd0559b3,9b18ceef,85c15189,fbd7a93,1ceb3f7f,6cc93d3d,7681f564,17f3f891)\n,S(9d69e5b3,32a9ba92,17884f7,e7a1ab91,53a65c43,917c566a,c2969f50,accb9047,9ef330b9,d347c93d,a9441706,a502491d,55d27723,ac1138dc,751308ee,fc6b3a37)\n,S(783ccac1,f7d6409f,758849b6,f7c4d5bc,401fe5f5,b08c2f84,1e0e3fc4,fd7a2d47,e5c62a27,65ea5ab8,6aa1aa00,9297d1fe,57248127,a5d3c36b,9665cd93,b6255f83)\n,S(dffbb444,8362773f,e45e0272,eeb1a8b8,fefee1b5,59a6bb12,b9613fe,55ef33d4,fd539cf6,aacc930d,2ff104dd,405ae6e,e4a6b3ad,1a9a0038,f4ffb4ba,1a6115c5)\n,S(cfc948b3,c14d06fd,c528d299,22305663,d7a427f2,fe08cc2d,942528d,dac8ebe3,81ab799e,5be02ce0,d3aece6f,c6ce84ae,988872fc,ab640d96,c3ea6bbf,3e2e709f)\n,S(d9fb08fe,6a7cb6ce,721cca32,74e20732,5933595a,e59aa0d8,811008f5,cee83490,2c7f1287,8b6ad3b5,88cf9483,f08a92ca,ccc18ece,93c68297,4d80ae31,54965938)\n,S(4272b558,49ef0ac2,d7830183,bfe3cc45,65ab9d9f,32b9366a,b0477d1,ae93956a,caa07aa5,d117616d,9f442b94,40549bd0,f64e7a2e,3cf96053,bd14faab,196c698b)\n,S(69536c0d,6404b026,61598e11,1e6eaa4f,e50a2cfe,879b0f74,4df57727,933367fa,aeed065,2c5325a9,53913334,7e4fc4b0,d2583608,c2086bf6,b2e5ad25,261c6bfd)\n,S(199589ed,5c4b6e24,65d58257,2fcfc194,60f7643b,7019c02f,8038d04,70368268,c48567e7,ef7a3507,14d1b479,1a70e7b0,5c1d4351,eabacd9a,1d8d5e80,a5da23c2)\n,S(ef3c4f9e,53ed652b,f48feb4d,1c7b711f,5526dfaf,6588007d,1c2ce942,86db1f4,128e416d,570c3eff,d45da6a6,31246fc4,f45b7d2b,8cf85a93,22b5f65b,361fc49)\n,S(6bc3a126,11ca8f8,3d0790c9,f5b5b137,4ce51c66,6c553ff6,9d103370,3b3d7cc4,b20988c9,4b882f50,a0ba8194,2f168bc8,f29eb6fc,4c3d0149,571968e4,81b76ab4)\n,S(a0100574,5ea131b1,4c180c17,f26bd3c8,1bd48ca6,c2310c4d,34bad277,6bf51aab,177551d,299c9ca9,92de3e9e,f82b115e,6d3cea9c,fb276955,5509795e,4870a546)\n,S(15553b6b,defdbee,532599ab,9e0de23,b4954dcc,912f49e8,f084ebb5,af6088e5,8dbaf203,351a1119,16e8aeb2,e5eeaade,b0ee5d9c,2f5020,62b9f5cc,ca40cbf5)\n,S(ae84a42d,49dad25f,f0a5320b,d6a33f8d,79c9f2c7,2871f41e,f8b02cc2,c469452a,9b23f07a,234782b1,cfa524b1,ad539ea7,b8fac3cd,e9bfb867,799a2587,95a48ca8)\n,S(eecfc7a7,a41f75dd,43e2b85b,5af33ad5,f017e0d4,8f9b9bee,f0cf4499,a3c762d0,65526d26,73b9e5b2,8ec256bc,a524e376,f0e40f62,2db6e492,e1c53820,a3180d11)\n,S(35e427f6,d0be7dc1,2d306ecf,be9fd8ff,107a044f,81c38c8c,5b9a181d,f4565440,de09eefd,27a8bb89,d8fc38e8,d32aecb,5c6bdc57,5cdf91ca,2f18e926,dfcca94e)\n,S(d27cec9d,11130024,7f71fadd,4ace1139,cbe3168d,174c93d,4c756c42,89cef3da,5747fbf8,c4040895,fded5c00,e1f60403,40e07827,8924ca96,2f83b3f,e50ed701)\n,S(df30926a,ca9062bd,7bbef9d9,e312a1cc,49442ebd,9994b93f,dc652e68,25efe5b9,8d1ffe08,de113447,5c3adb77,ee5aa58c,593486f9,c3f27c32,a20df570,6ff5c572)\n,S(c2602b7b,56d0eb73,ab494934,5eb77e88,787e54c,79558ea3,dafe3f50,84f96682,45885bf4,65996b12,993efe44,39861b39,84d5fa89,5242ea8,f498695,57391182)\n,S(d6d606e6,28c55e08,61a37803,72c17b1,6a2fe04b,e68a0cc7,60fdf7ac,85c8816c,76b299fb,9e716eed,7f09c879,ea8256bc,a953454e,490edabe,c90a2e5,dd277da8)\n,S(d1bb671a,10ec5393,9d67f6aa,3b09e1b,57bb6414,e1f707dc,b832ff67,56289c4,47559cac,311f20cd,55760ed6,2e1e87ac,cd8603e4,c1d0cba9,79f6802,6b294a94)\n,S(739ab4bd,6b6132f8,2659fcda,5fb46836,7adf2133,37f897fd,70a9552e,786dcb91,b562e798,2bf508ba,1b932deb,3e6b5962,70bba4ca,402db3b4,d806da6e,fbf6670d)\n,S(a710cd7b,2aef0005,6d8db954,2abe6cba,2a6c6132,a48a6670,c501fa82,4de21388,4a6037d1,87db5b52,2996bb0e,47fc7509,1ad9eda8,e15faa56,92d56006,e72fb220)\n,S(cdbf59c9,b38e40cc,d63b36b8,b6e894a,c6baa22a,93a1382c,9d7fd070,58e69b7a,3e836c78,6954d509,348314df,8ce08f0b,59967aef,4e5f0136,9c6d0f91,2682d77)\n,S(1d32e93f,6e5e138e,7d226636,d5e0946b,8117f91b,bd59efb1,560a15bc,657e4dd3,82c43daa,bc1e23d6,3632e167,6bbca422,9797551f,f729cb5d,c8ac1460,46ed20f7)\n,S(2730066,cbe72e84,304e3563,a18689a1,c6c8e0b3,e92d8c0,d63a96c7,e3573337,8804d5cc,6aa91f7a,1ae23506,17332f7d,811b8f1f,752fea43,5208b770,94e67c58)\n,S(44624ea,a1607e8b,8bcbd736,9c67f86e,6b0f5226,4cc76a3d,b40042cd,bc621cc4,95867a99,d110d9d9,e382d3d8,a5dff78c,d8db012a,972a87ae,ac24bb42,b2747e53)\n,S(8ba805d8,864774eb,4494ca5b,f8257bf6,980466f8,30028340,8aafd665,7f1ef49e,1a1164e3,c1b243cc,57507b07,7348495,95cf67c7,b40d4d7f,f10ad096,3f3866b4)\n,S(297d0130,25bdd2d3,f4a008d0,d8c51a3c,7b16b605,95958d9e,93e427a8,7ac01267,56361e70,22138026,683b7bf3,1a6bedaa,988d3938,cf8399aa,e0f3175e,61d7e2bc)\n,S(d866bb84,23527208,e66f34bc,e26a8ac0,daea9d03,27c9dccd,cdf0e2a,a0588f52,5e16262d,3564736f,30f26e68,1c5ea26a,b6f63429,f0b25dd2,5635a3b3,1fc45584)\n,S(ab1e9d8e,b18e016c,d8ec49e4,388636d,5dd2ab55,8b3dbaa2,433a976a,ad8f16a2,a14cbcec,6327451b,15d47fac,d3f3cbbe,fef828c4,6ea07a0a,9c7155cf,2a2f291c)\n,S(cf2f035a,ce393efd,3032cb05,4f4e92ae,5311dd04,bf8f3653,5197748d,2094cd30,75b38e90,9f02bb50,7a778243,35a1c97d,75bc653f,c6dcffcf,615bf8c2,ec6b32f5)\n,S(a801d552,e63ba120,2c3ff08b,8fb025df,e545ed35,1adf00f,1a08d982,9e8bf9bd,bdb9274d,f5298fab,4cb08f42,252639e4,a24b553e,892cd1ea,93499c47,41c23165)\n,S(f7ad7a63,eb2b90aa,3de2a80e,844e5336,287984f0,6075d9f1,26f24108,f4a5869b,d151e7d,9766a81,1db45134,7cc22654,c5ac40f4,a1d82d96,2de02c58,d46cda31)\n,S(732541be,26fcc3e8,c824d539,28282611,96717b00,2af01bc8,57f4c0ac,cded0a80,d44adf28,f26370a8,3c9eee24,4e870dab,3fa7a508,bd14a56f,17c9a845,5055f8ca)\n,S(892ee5f2,a5266a86,5bf2094,14c31225,b92dffda,7a3ec00c,ee53dc0b,8c3a3367,21bef833,3b983665,7d243b85,c0b4e2cb,6a5b339d,831cfef5,d676c7d8,87a0df00)\n,S(1a4597e3,77569fed,70875f9b,f8f5531e,6bd3b363,b96a345f,9275365c,e1e64424,bd142738,fff7b9db,cbff1c,93a968b1,f0ef3e63,8279b745,21aa53a7,6e611f7a)\n,S(c7306404,4b4a3a00,6a584193,e915a174,631c8a2e,ac45973,c815a2f4,aee82f35,280adb29,4f9642cc,cbcc4345,28bacdc5,74beb7df,84c06216,68cc2fec,d78731e6)\n,S(c06d9d55,264e4ea9,e160fa78,78a7e4fb,1757f6db,fe610966,503ae03,b4723f2e,c0d82600,ae072564,b29373a1,ff1a036a,45f68f22,9d1594ad,1c9584cc,ab732743)\n,S(e878c0b2,bf38b500,6c309a51,5121a3c4,5b13440d,74ff6e27,5bfe71d7,51e6926a,4b8be149,11432ff6,c5169731,1c1db30b,c921cc95,b4c98a39,5228c08,b99b6229)\n,S(d1f6621f,89ac4421,7ef39a54,a0922c77,dc7addf4,78b15796,2558ae72,9b24f65e,657556fe,e02492c1,97c9c97a,67bf1d6c,eb689415,80a1ce6a,1e4d98d9,64902f3a)\n,S(f9199ae3,ae51f441,d88d72d6,9c1ff64a,d5cc4979,b5fd6a23,c514e9b4,66ea0a5a,3c484bb8,8ec31009,eb95b971,69c7ae03,c20dd833,eef53cdf,fdab8cd5,7a82d4eb)\n,S(4e059bc7,516d5fe2,510ae63,d3ca9543,f840bff5,710a744d,62de3965,af6a657f,222309ca,242c5858,5a792045,bbfb3e55,b61daa3c,afedd1ee,19a0038b,f929a47)\n,S(c1673413,d8b4298f,6ca04741,a3c32d79,83a7d5b3,dd39ada2,53013d3c,9750ac65,333b1660,7b998e8e,fa7e3d32,2d51c052,1de24d3e,9e389f0e,9a00015d,6cc32d54)\n,S(c078723d,8abfbc03,63f12766,cf9c6261,9c31173,5f3a9654,b653a8f9,e08f551c,880fa5d0,be09cb8e,4f145749,1c7f54e1,ceef1477,ba7ed718,5f27013e,32deb89)\n,S(c77f3351,4b44b047,3835e3ff,abe8d7ac,ae5f912d,aea4e6e0,4ed03feb,78c41ce5,cade531d,26ee668b,5e2fc7ce,421de2f,d9a14dfb,87286c22,c840144e,1290e910)\n,S(90e14c45,4ba40739,10f800b2,bcc7b017,ec58660,bdb1e72,16cc6afb,8320277e,61dfb75d,f5f74d47,287f828d,c4ff46d7,fa351a1f,66da99da,40e74758,2c6bd4b2)\n,S(34c65f34,23f2474b,7e2f294c,ed4da6b5,c05d19ef,a2b5a792,103b681a,be1a3f68,d0fba1a3,b12d3e4e,f18acdbc,68fc285b,8ef1365,6aa900c8,c86ae191,37f028ee)\n,S(fdcc63b0,aa5017ce,215735cc,2802eee6,aa5ef53a,6a258dd7,a128ed7b,9a5df38d,217ea863,5c9b88c7,19c7f9e6,1286844b,d4f4b758,81535954,7b24df0,1fd5bf03)\n,S(10624260,58bb9f6,a5e83740,59595ffd,e7013492,4392c753,15853f4d,9c7070f8,84a92509,e809874f,86e60bdf,85c75d7f,2cab596e,185f56d9,262b06e4,e79cf785)\n,S(e21f29c6,70cfc7e8,b104921,bb524414,53acdc5f,fd80066,39417966,ca235c9d,41be8bdb,969ddd53,9093dc1,b85dbd4c,a78f7e68,67fa916c,36136d24,b6c4af38)\n,S(154a85d8,60b532cc,16bfdcb2,2769fdf3,6dac818e,cd2daeb0,864eee0c,f78a5c5b,15f2dfc9,3e5e08e4,9d340ce4,bb805afd,79f940dc,f97456eb,c73b47ea,5098e429)\n,S(ae6f8b12,d52907e8,4ae5063a,114f8e2a,da7be317,454ea505,571f2132,5e4acf42,49376af9,1aea68bd,cdcd637a,909b639c,b7ff8800,ee003fe6,540d6797,f0f296d1)\n,S(de42ac26,47fece4e,69341582,7e3c5b7d,a19dbbd6,22da9fa8,58a3be29,8a47bb65,e57cc346,b83b33cb,79a34805,42811d1d,4178805b,a2b88de6,d90b4fe0,ba8e2740)\n,S(14c2030a,c65ec50d,2f7c176c,45256587,59cae0d6,55cd57c2,c1ea970a,11d7bd0e,f3d9f0f0,5881801c,ad4df439,3a3bd2df,1a045181,af7ccbe6,7500b02f,61edece)\n,S(32fd40e4,7a94e51b,e4c927c1,42b5f470,b2abd2b6,2773934c,a29a5ff3,924b2e8,b3d74958,f17147e5,1da38ded,7cb09c27,96b7e36c,3149d85c,9b7db85,acd89bbd)\n,S(fe468154,cef5383,4820fa33,ad85c158,33635cb4,a55870fb,f588fa6,b8d2918c,96650453,25235606,7bcbc214,b0a04021,bc71c9c5,4617b1be,dd34e6cb,dbb42873)\n,S(57826e08,8fa3841d,a33ad3da,e5b5a688,1ee770f5,bfe45f5d,507b4801,ccb511d9,6cb01dc4,4da6d83e,77a6e8a6,d374275e,7d8484fb,4863b5f0,34bace60,30e6b3be)\n,S(61bf08fb,1d537624,1dca6119,19f0dfcc,7787090a,6747cdff,8757b037,a1ea59ae,6bcc632a,f4f43c6b,547e6ac5,5854268f,1801614e,5bc9d4e6,ea0dcd99,79f7adb1)\n,S(f54dac2c,b5521855,9dc274ce,25b77645,6525e91b,c011e657,5ff812e8,d846ea4a,bb9734dd,af492c18,82bd36fb,f365009,bd41b8bf,1378d9c6,a18477b9,ed627f11)\n,S(640ebea4,b85cafa0,d5a38ef7,7373bfb1,36b9571e,f9694724,680e92fb,13efe03e,eaf8d756,c70ee813,60dadfd9,702f660b,516fe3a8,4c50043,92bc7c1b,892a43ac)\n,S(6c4814d1,e3c6c16c,366c8776,93b6df4e,266b45a4,26fb0d5b,a2d8fef3,a3803975,d9330c82,8fb02d63,33d57990,b6bedffa,ccd143d5,1b5eac78,5c7f058f,af77a37c)\n,S(8dca10b5,95293452,7bd2f264,6170b6fd,59d636a1,f2578b6f,cbde0c96,8bb2db30,50da6972,64516689,57d2273e,55dd046f,1c398d1b,9e5e864d,ae6746fb,825ec83b)\n,S(1409a8cc,34389c3d,3fd1b482,fefdb25,3ba32070,dc23b7ae,6b8a1ac0,2f00b776,f8f1c0c6,3bef8011,27ffaf53,d5c07c,430566e2,6c4a9591,f92d694f,82d7a9f8)\n,S(1c752b3a,2cdb6257,fe8bb102,e7560b8c,6f86e7ca,e809892f,58df3b16,728c0999,9f1341ca,61dd07f8,882596fd,12531577,d09fcb45,5a086b0d,17dd5390,8326c741)\n,S(ae8bb1ae,a4341bf4,c18e7d99,7bc3ebb3,d9f13c9f,b01b93f,885cb32f,d0586999,92eaf2f5,c4e231a6,851a2324,a146400e,6b9eaf63,8eca473b,9d4e034a,3d5c8e6b)\n,S(e3d2429b,ba45b4c,2d9c9bed,45f384a1,7d74cd28,56c87772,6d9a98fe,67bcef97,729da85f,927c04e2,c1db1458,c133bdef,c454d0d8,88262b1f,418f3420,5df2380c)\n,S(858ee23b,e5166c66,b99d48dd,24cb5078,fcad23e4,a8df9f91,53ffcab2,fb8624b,c5088132,3af436fd,c4f63b91,b06061d4,b26fadd4,6bccaf05,bbe1a8b7,338cdbf2)\n,S(7c6a82f0,e2d6c5a3,ba37be0e,1bd8d4e1,99f9aa3e,c9c58054,a66099b9,a4938a1e,881916a7,87e1f9eb,b38906c,c101b0e6,5d245fb7,733c0093,9a7f6f0a,9b4d113b)\n,S(4c980c4c,144e4060,c00e7476,c782cb83,42ae8b02,6a155904,c29837b9,fc25caf2,fbc05490,a62e49f5,6daac9dd,5c730f90,183ee565,d62ca949,5bc7ce56,61c2e8c1)\n,S(c9b66a8f,6c163037,f5bbc7b9,889e9cfc,357ed5f7,a5e5cd17,6a7e4bd9,6da2fa3e,4eb8b3e5,365a6a44,4b277b4e,89b89e04,2b44cbf8,b73f183d,42c9d8b6,547885d3)\n,S(f2f8fb3e,2bd3cd82,99e2faaf,bd5809f0,12190658,b1efa389,f58ffe28,c1056fbe,db6c4cac,35f78015,8fed40c4,341a93b5,64af02c0,12d4817c,478726fe,4faf8273)\n,S(8556c286,895b9402,283b5d2,f90ec950,f91c4dbd,6c1c8a0d,6b27cb8c,3bc7da8f,f2979daa,81ea79b5,d3ee2718,4aff3805,9bce1bb7,fa36cc53,4d139b83,c176badf)\n,S(4d4c2752,5f24a7d3,ec3673b6,a3c8f110,f5bb5c5f,e9675776,3d81620,90579267,43ee95e6,5834075a,83675a88,15babeb9,824d4703,763b5b09,8c3aff78,837b353c)\n,S(cc6689e1,d08b243c,a49a7020,b08ce4ad,817193c7,456fbf4a,97fca02d,f1ccf2e6,32f00dd1,1080c238,cc7e8c9c,60a1b7dd,7503417,2ad0464e,1cdb4221,35ea580d)\n,S(966525b9,26bb6596,584cbb3,5da78cec,e6709134,700974f2,6cff34a1,23fba535,b5c18347,52894cc5,26336590,d961af5d,2453d9a3,40bd151d,259d8be7,6c5a9e7b)\n,S(df7f51dd,b0e6c595,c8f3de9e,eed5da8b,b05e2cf9,a4555001,760888e6,38b11c4d,19759148,2d4f49cc,b69ef50c,a1cbf3a2,49e3958a,aa9af2c7,becbb72b,8d53f8e2)\n,S(4ac2754f,93745ef5,61d6d213,7fd2339a,81cfb619,b6699d9d,21897ed,975f6fea,854a0153,17ce38ef,e070da13,c07829f2,1bf50d40,6458109b,5700a3ec,ed6a3c0)\n,S(7c062917,2c59c7ef,2d488806,b1131193,b6b6f0e0,221d1ebb,eca1b358,43959694,77f73272,291c1c73,5d79857d,60cc9db6,b6128e86,4613b3dc,92dd970b,d5dba9ff)\n,S(c80152f1,e4b7728a,36acf22,158b8215,d8ce0ea7,401274a2,1139dd71,59d81557,dc0c54e9,88d2ee7d,e8a56eab,d358aaaa,4542a45b,a170db58,89d634f1,dae95df5)\n,S(9c2352fa,464cd430,31f43578,53feaddf,7d5ee143,c6403ea1,230961b6,377423c6,841277d5,71934bc0,20f71b36,dcba2293,65819fa2,b20c57b3,5774a524,d6fb20d8)\n,S(8d7554f5,fcaae19,cbc20c7b,73f22f30,aaeba42c,a22bef77,3d780205,8c8e1d7a,c6bfa4c0,9db5101,d33abd0c,47c4e125,bffab86b,8ed50864,6b6a2b0f,322bf5d2)\n,S(1e75acec,28a2ce98,5929479d,e0842826,bd556b56,6961d5db,66c9055f,b1b63635,89cbe475,d2036dbc,9227db67,d62b51e9,ac669a22,76e4e1e9,d0be9b1d,58efca6d)\n,S(9fe62187,5e71bed4,7d9f2d79,91e76b41,88b2c8c6,10f20d33,5b38bed2,eee85236,9a3fe290,fbe192f4,8a44177d,4f0d037a,fc6fa8b1,c57032b1,3d5894c8,c426e8cd)\n,S(8dc1710f,8869b645,73c361d1,ada3f43f,6f2c175e,b24ec358,6409e978,1687a220,37a4187e,bce1845,9520b60,9317a4b8,f33b371f,1a768ba1,96316f41,373ec87)\n,S(71ad2a17,5cf75568,214fbbd1,f177c1a9,9eb75486,c161f1b7,ad47063b,567e8d6a,29d80786,e42d9cd,4c801f96,a7d44eda,5e325acf,3b82e143,2576ff1a,3b334850)\n,S(be0eeb11,aaab9c1c,ef7a2004,731e3ca4,435c8a02,548b36b2,db68ea4a,56ad8b7a,cd7ad5,c9b7e867,1a1c7889,95e45cff,bcdfe42a,6222e0c4,1054a0f5,f7bb00f2)\n,S(364154a1,3a7d9fa0,b349c6fb,ec36ea43,51cdabfd,8fa79318,88e4ea5d,ee8bf6d4,40b40474,7e8b30a6,a3cdf3ba,f0956fa5,f7f61a2f,89a8cf7e,c2ed7445,504a71ee)\n,S(19daf7ab,c9f69a31,8b2cf1c6,69d50532,5bbd7254,c4bc4126,d7b31dcd,e7b558f1,6b740772,606874b6,5b1f819c,c7339ffa,30669d9b,2770506c,e9fb243c,6ee4a925)\n,S(5ab3dc00,eb9efd03,ae491844,50fe176b,765c5da7,d95ffe6f,61aa0073,7366c918,2603f1ce,935e3af8,af5e3d1d,d76a3410,200037c,87c17a93,96e11018,260dfa01)\n,S(47bc2c3,d7dd83f7,2b2160a2,64640e58,16316d0e,3272abf4,b859dd0f,6c7b27d7,1ceefb1f,23dc61a7,2f663d9c,3cdd6625,441a63f9,f9cae8d5,c4ba88d1,22c0f258)\n,S(b220435e,e903f1bf,3b443549,5a01e739,250be2c1,43f08a73,bd7dbfcd,75602ab5,3659abe7,953b817f,fd1c02b6,56da4e54,9df250c0,7c28e9c0,89ba315a,bf25e1dd)\n,S(be25604b,d52413fe,2c743031,98aeff78,c27086f8,97fe4b20,be5b6251,52fa2fb4,ebdb5191,aa195ee,a0a39bf7,399bbe03,76073830,fe54cccb,a3194eef,d8d34fe5)\n,S(5cedfbfd,633f16f7,8ec8a8f,3dad7cc6,edc1a6bf,3e37cf3,65069731,64aad0e3,70e687a9,d8632ed6,ab188f14,229f2e31,34a3adc8,727c7b0a,d7a16d78,1244c9a9)\n,S(8109ca32,a86fa712,690315e2,1bc09265,bb6bae74,588f507,1bedebac,47e54a3a,e7f3342c,6e8a3dd1,f6d02bf7,5610511f,d0cffb40,1c14633d,308c2939,e662cbf2)\n,S(54264a0f,dfb894a6,b29b6922,b859d715,77f0359,ef825442,e0d43b79,a0fbfe3e,4884ea59,cb88fb60,4ca4de66,110b7d98,ec529112,d4574cbe,9a2e7a5e,5a4a644d)\n,S(f2756955,a6a7db9f,eabaae3c,844cfd37,5d86ad8b,a84dcfba,582bf4a,273f90f3,b24c14a7,d2f60103,a7d3652b,c5e68988,390c0e67,1f0fca22,ed927f6c,96302239)\n,S(351da3e,6ab7c98e,840d0dfa,e7231d21,ca21a81b,3638371a,673892d2,e40498b9,e1c5ffeb,43b443ab,d31332bf,aa314fda,5a4c2634,afccfb97,67bceb3f,13ed5f3b)\n,S(b5107be0,90f84c7a,e3d89782,c6751b22,f9a7ad2b,3a1810c8,f14bdd8d,52344357,3d5571d2,36a7c9a1,aada0835,9e8ce162,c46a878,5e09265d,bb52b419,144c5b6c)\n,S(b6172135,85b2557b,7c253189,9422c428,79825eaf,64d8e8e2,2f7bae12,31c9ceb7,dbfe3609,df9b8e1a,33629219,eb241daf,42d8be2d,b9a20a0d,942f24ce,1a117e3b)\n,S(5eeaaf7f,577b445d,13481c9d,a567825c,f0a5a3f2,9ccfbbbf,d8f1f8a5,36e712cf,84a4352d,c40556ff,ab75acd3,b5a63366,39119d8b,f814feb,e55fb3ee,dea5821c)\n,S(c1bec874,44b0210a,9a86ca9b,94891d00,e1fee6c7,490aa26a,1af61f97,5dad1c13,14a61af6,d280ea47,433d795,1786351d,f90a9879,7678781a,8d9d8884,e88a06a6)\n,S(34787098,f0df9eb5,e4825449,6fd7eb6b,3118dd45,aa0ccea9,f606a794,126b9ad3,85c30ff1,c8dbde4b,88fe9ff8,20c9908a,a35a0c53,c2175524,a5929eea,5566a564)\n,S(6599b07b,5d31c19e,ee02e287,ccaa1bce,70890b14,cd739140,6f1d862b,39d794a6,d18396df,27e6fc21,a9c36a1,8d8f73ef,c79e6c56,ecbab9cb,83750220,a816d5ff)\n,S(27b50b15,c92c010c,60feb473,5ac6ae0f,9ec0af75,81e41a90,a3a940da,a1a44ee8,31c2c3c8,61e64b7c,df8ca011,bd4002ba,5373ec63,8c3608fd,619bbb92,3552c1b5)\n,S(40aed5af,953f3a17,f5d17622,127f16bd,4cc5bbee,33e23443,5f49c4f7,a48e7a32,e47011ee,96c702a1,1eff428d,2940ddab,d17b76cc,6765d5ed,126876ea,2496f6e6)\n,S(cb56977d,f69956da,cf40909b,69fe44c1,4a5ad547,a025d684,c9815ff1,b5331ef8,9904de7a,9ce0f656,2f025ffc,79e8b3a4,2e410ad5,8f0caa16,62a13e29,f0b00bd2)\n,S(11dc40ff,58c6d2a5,9768a776,41c611a8,2aa651c1,15e9d36c,bd3ebd18,ac7a0df9,4717af95,274f820,28592bc7,4a84e467,9d168dfd,826a292,5789edf4,a06e0e50)\n,S(3baee366,3d2033a7,f3170bd0,723eded9,2fad6501,702fa530,b26d0623,8d6992d0,47497025,41900ac2,fb236a26,81ca09db,c34fc84e,98ca289b,63e07d17,2e4671f4)\n,S(6b19e8e6,b2010e2b,d461d716,66f691ea,88417df6,773208f5,18ee5fb1,e0fb580,a7c74380,9f744b05,99b6c4e4,709a8b86,241ef931,effd9323,9a6d15f7,22916578)\n,S(412a2c52,b31158ab,9d3bf4ac,d4355eab,b7e94e98,6a839681,94a7322c,72bff9f8,c649c493,b19b713c,8b3c4e30,567547ab,472a599e,cc95ea73,d36d373d,c92f7dc1)\n,S(b5e0c57b,f79e7364,9826a818,bed1d521,3cb88645,5dc91a4,eb157a8a,dd869c24,752feebe,9614e233,3b876297,175078fe,f9adc63a,4639242,6c88ca94,aa06163c)\n,S(f656ab08,9e75bac0,6eaaf373,1cc71347,6a636347,35ab57c0,222589b1,e914160f,d05493f3,52b660e0,4cb00b45,5cede6b1,74337488,dd1650c8,4ddeaeee,b73a6ae9)\n,S(bd2465b7,b5af290d,2d1157fa,76e4550c,ddb23922,7d30c255,8f0cc3ad,ae5fa32a,63a28c79,cbb50c21,bcfc85ab,269090ea,d56f6396,1fcc6dfe,b3a000e7,3284880a)\n,S(d53c8d24,3dc3600d,fa32dd69,11a87ab,722108e4,192d7cec,4d84eefb,9b32a351,af681092,6afda47a,ef5bc91d,97f273ab,78a21c01,64f59c0c,ed66f7a8,5b67ca24)\n,S(4a83ae18,ab379d5e,f6cd2be,77f64abf,8fc23b52,edc88ea4,9efc1bfe,402432c9,e9eef9c2,f595ad74,abf10b85,6ea24ac5,603d46de,c320f9d9,a1453be3,92eef8a6)\n,S(d1df4416,dc7cce22,832f9ab0,b74d927b,f9b3b7a5,c52acee5,3d95812f,f26caa82,9e5242f1,163a863a,a5702af3,cdc21f7d,b0143f76,ddba2a2d,d592676c,57c310f)\n,S(e6add3b2,583addd7,8299fd2b,14b87155,93dcb13a,3231458d,ab6864ce,87b9c890,384bb2a0,930ecde4,1e9945f6,247a6530,58e26bf6,88226c8f,ee9a1ec7,a1f07740)\n,S(7d3f5447,295479f2,96c11443,eb9b1fbd,fe81a258,78ce4195,d2f01290,7e01fe4,d12e4fd7,9f66a45b,2596b066,651d8686,83e62627,95f681a4,12022046,86304ac5)\n,S(60636a7,45442fa9,57f21668,7fbdde4e,a6f7f80a,ea2832e,ca3ea43b,d1f12709,395ef963,bec2979c,fb211f8b,da3f4b4f,2c129ce8,26a35367,d955243d,3b40022b)\n,S(6bce0837,39c04ba6,b9dbba8c,f668bea9,4d8a8b38,2ac17b87,765bdd52,86e47963,a2d85e2a,7ff5c433,c2c77363,666ddd3f,3fb28f8b,2b7aea1,16a8f42e,384a0a37)\n,S(59e4e7e4,438ceba0,cad5f146,bc127c1c,df7f4735,f581a0b2,6a53a366,947d4581,32207f5,95fa4cee,3c8ea269,9578b28b,6290a3c,33eb0ba7,e3bf7267,b2bfa445)\n,S(ae2cb18,d4f053ea,3a497162,8c822f6d,72806f79,bd39dcc8,364ea256,f30af032,583d363,b9ac6fd2,709985c5,79603d9,4902da04,1563879d,245433d0,abc54a1)\n,S(bc4eb578,630ebde0,f58fb192,377de006,c630e96a,51219379,43e9a240,c30951f7,5224d403,4635eea8,e63b9e87,2875f27a,129de5ff,fae3d516,5f6d0cfb,5bb7e584)\n,S(848ca19,6fc34e2c,e484f74d,79565ba6,9685128e,7b2d21fe,8cf0e4b1,edbd3b13,2a41e449,532de110,e0d3fbb2,bb794fb9,32d0d4a6,33aa65f8,ec40e5bd,5c4314ef)\n,S(b90e1d09,4257ae30,bd12debe,648d4cea,3f063740,e3f9d3fb,c67eaa4b,8ca0bcfd,5604b475,31b28a6a,e0a13a47,31f6cc70,de91d429,d2204d45,e1423652,5a5a4b43)\n,S(430752bc,3e1191f3,6e084f2,5f3e30b,da104f40,1de93267,62dde1cc,39d94c71,e707daaf,841f62f5,6d9c45fd,3304e616,30b6af9c,d6871476,6132e127,40f5ebe0)\n,S(ab919243,c8bd75b9,d67f331a,b3b487e0,ee9c97ff,c35de7b7,e29827c1,ab643be2,d4d853b0,3971f1fc,ce365db9,cf4a54f1,5e6059c3,c5138b2e,dd765c51,7bdc0c7d)\n,S(adce8be3,2277c2cf,6ee46781,f1da8f30,1cafea51,18322adf,8d6b8a29,fc3f7551,e819a7fe,73311592,bcfda0a7,3609748e,6c039066,feba9e5d,41e125e8,4dd67fb4)\n,S(d6ed759d,15f5d47a,146e7fac,423b952a,5eabc238,a0382762,c2a226ed,8c24b601,456caee9,1c212f19,acdc2d82,9eb90cb0,2ac35a72,8d280042,658af65a,b6840e9e)\n,S(3583bc8f,c3ca09c6,6f2f4fe2,83da5c47,f0ebcccb,fe8e94ab,fd315173,fd3fb2be,ed60aa95,504e9b31,81225d0c,a4f513c6,6da2a2ce,9fa9afaa,c12e04c4,f1d50b59)\n,S(223879b3,b9e50b46,7bceda29,905d09be,1acb206,5b23a61c,686d6f39,bf0744d4,a8326789,ddb38afb,e993ae33,6cb1c3f7,92addfad,e47663fa,52a296a3,b6f2873f)\n,S(29329ca6,c6ce20b5,81a90873,7206d44a,95ff382f,1ca0cafb,755a3450,83883d69,5d2aa87f,59e13a0a,8ca4460a,4db7f496,1c118ab9,b4f783e1,305bf43,ed44fe71)\n,S(e1c6a08c,593454a4,aa116edf,13345cdf,6dc00b1d,b63b7a64,fdea70bf,e4301ea,e0f9f3ff,5e7e395c,42b3e093,87b8363d,37092335,31c317d8,1b61f20d,f06fa662)\n,S(da098bf4,133f656d,f2a09d95,c437eaed,fadb4c9,8102d164,b355c7c9,38e65216,74ffa0cb,1fe7f0af,8a1a6ed0,531f8e98,28be1110,90b580dc,5ff55fe7,b75d9b66)\n,S(f3f7c27d,54b40dec,5b3da04,b2cd222e,1507aa70,bd236bd4,2d6e5c95,c71bbe7c,80e17f04,7cb2203c,cc58c364,d77e9a1c,8abb092c,18a9f8d5,6edcdaf6,1ae4062e)\n,S(466b6e28,8981fbcc,92c4ec3a,a54eae4e,2e266041,5b242aa5,523579b5,b1fe93cd,9ae0e0c7,d056b2a6,831f540c,67a97732,33bedbd5,bdcd2904,2a8987cf,1fe2a86f)\n,S(e15af336,8c59576c,a36b5f80,d9ec0458,d9534bf2,6650cc26,a2079946,ac43fcce,7fe0423,e6ea121b,308d167b,ada98cc2,fb8cd772,f95c3d84,c1907f09,66e5b46c)\n,S(c20ab235,6dfe247,d8fd1a9c,d8c4f16d,a5322bff,692efe70,f256521d,1b990492,3c0aae11,e4cf9a17,57feb324,e1a2f0e,48d5978c,6007429d,ab32b2f4,d1a19bd6)\n,S(d8b6c190,4a848755,f126651c,d96fe374,7c5a3744,1fb7048f,e15c4693,dbe35e17,fefb5310,e7e38891,70fca6ec,61ffd2d3,72605ed3,4bd22d73,c852a92c,c22fd30f)\n,S(a8256823,5416b18,a01d2df0,f47757d0,f42c26e3,780ae6ca,2421aef3,83361f8f,c9192412,77948b80,87d1c45c,a95224ae,5f9c294d,fa74c1ec,42ad6004,f8646540)\n,S(28f2a237,c4dcad5b,a6bb5274,1e743020,e90bc598,8ee66b39,cd672ed2,ccac6c33,416c59f6,c1b1b036,f38a5523,722954eb,52848872,8ecfac4b,5bfea63d,cfc181db)\n,S(e65d92b7,571bbea5,4e541862,a4dc7890,bd546782,bca886e8,3c1ea17f,33d77e9f,6116ed43,13def2ae,6b0f2b92,ff07c91f,4139982c,12511152,fd7ed5fd,851bd04e)\n,S(68adb9ee,c7ae0198,726b0457,91fe52b4,b5c2ec78,4199da86,bceac230,d55914b5,41ff0808,e42aae9f,e93ff704,6f08fb38,4b72d7ec,7b1dc6cc,e0071306,7ee5cfd5)\n,S(3f0f7d6e,6bf73a97,40eb842a,35cd4800,85db4766,f7fc374e,1ac915c0,e4d6d6e2,392aecf6,8b446346,2d37a106,8299a09d,9ceeeaa4,f0ee3397,dc54b2f3,5e3332d6)\n,S(929aa2ad,48a1f3a0,24fbf7ea,70e9d57b,9ef65afc,b3cb2d8c,5041a933,321359e4,b1cfddf3,4693ff40,ef16d8f1,8fd1fec,a71252cf,ee13ba4a,16094c20,3b4fbf66)\n,S(9a9ff691,f16ad46a,d0b753a6,fb09025b,e196b443,839114a9,580eb2e7,fc494e2a,3776f83b,92c135f2,5e5e600,27f65e2d,582fa2cb,f5842c3f,644fb726,1e305c67)\n,S(6752b226,65900d81,47ea6b73,25b212a2,9bcf899,799eb1e6,213857dc,6959d32e,fafdac9c,2f791be2,d1cfa78b,7530859d,c1b2ff43,e546de14,1f42baef,3d6d1371)\n,S(9fc32749,e636e845,aebfede1,1d0928a1,8cc6e3b4,5a2536a9,fae0a2b,ddca6434,9021fa85,56c5fe05,cc87bdd3,6cebb00b,3d1b77e1,80ce2f8a,a4d155ee,84fc6441)\n,S(60ca338f,ff905b58,b1d70d5f,89c4cebe,15600495,698b262b,e1550da,a0054a99,6d57de6b,f7c637ac,4d728090,9960ce01,4b541abe,754b82c,bfc87ad1,5fbe6ede)\n,S(91537a09,697d3658,b06b853,d07153da,6d0228f0,786f334,db6151c,64becb87,231a2595,e04dadb4,b3900188,9f34b43d,5cd3c81c,f13fc6df,d432a377,4f53015)\n,S(93a85356,195e109d,ddf054d1,2a901d83,b10db692,fc17e878,849eecfa,5d387fff,58f2112c,3df38b46,51e347fa,5aa8569a,48d95b2,670c76ba,d0de339a,72ee87e4)\n,S(d5d1f0ac,bc2ed1f,50490030,43fd020d,7a1afb27,cdf78318,6a043bef,b0708eec,c473908d,4d754fe2,a5fdea86,62a6ad21,b711560d,77ad85d4,e3b47175,b5133e52)\n,S(afe283d3,8cbb257c,5f2c0dde,2fd1bd56,2ad33e5e,605c24be,51a255ec,5725b1bf,a050f64e,978a9ee6,36885656,5cf22d7c,2fb45e64,6df60abf,6d3f9e1,132311a7)\n,S(179667a1,72e0c37f,33e835d9,b5b6f326,3d963f37,1dd07d40,e790e0a1,21765180,da24290e,e38be6aa,ea2e86e6,bf683d4d,90f5fb79,20257b78,aee8be4d,fa65eea1)\n,S(9add8ed2,6feeca4c,d3e583f0,88398ecc,f245d30,a888e135,b86ac1a7,e4e42d05,41bcd07c,c2e6acef,bc488d74,8a338c9a,7e6d3e43,85029f75,63dcde83,54d82232)\n,S(25ba1237,6bb6e146,5195db78,29f51889,869dc972,fc9805d3,f6dfabb8,bce6b,a39dfc2d,223f924,47ae617d,537a4877,e6a47e0a,7e5fdbca,e1bfc956,a9c42571)\n,S(dbd78620,c9a75ddf,55d0a41f,7312ec44,d3108f34,e7d75195,d3d49f99,88e2f986,c184bf06,ef304b72,1637bd3a,d511dc92,297dd5f5,9bd8d053,a048702a,fdbc400f)\n,S(f8d67c64,b71d14af,b07d734f,675913cb,7a1bebc1,6e4a4916,44f8f4f4,6eb69448,eda6023e,5df40a5c,89a7bd26,94767a5,f17042ad,f95fb4f2,88bf9fdd,b91b280f)\n,S(fd5f3228,56c096d3,4683a672,64ca5d76,58a8b7bd,41c3c1f2,5de2e6b3,164c8fd7,8372223f,3fab4f89,f6604b16,dd66db85,b8a27eaf,30741bd3,7a90d34f,f19c154a)\n,S(ea49d0e1,b07948b8,b122d52f,8e8be6c6,e470262e,1c239b40,483a6076,c005136,b81ee77d,3d8489ab,42a9978,48a2ba17,273517fa,604a2abd,f2e1e726,d71b7e19)\n,S(bab8ce82,c1210a99,ce17a5cf,3636baa5,52cc793f,89fd25bc,b6f078c3,92149bc8,afe2bb15,d00cf460,953a7c1c,8e466556,136ebd4e,ebf61a76,e49726f1,e3aa8e73)\n,S(98802d2e,225bcdc7,9e02e746,891cdf12,ac434154,c08c2e78,589dd9f4,27277e1e,1eeb6b5c,4fc6459f,28e3fc49,6d9a6baa,fc66ede0,85d4b0d7,4af45840,78987514)\n,S(5dc54290,2b33fd65,7d37a22c,c669ff21,75825cad,b34e1ee4,7aecf7f5,2dfd750a,41fb96de,60564df7,6c8ec857,d7f0ceda,2b330fda,2195a70f,5f64f973,ec0144d6)\n,S(c4894f07,f6679f4e,13369495,dd501aca,73666303,2f7bab6c,fb81d7a9,1495834e,31b7e5c0,35e81c22,89de373f,85d648dd,892021e7,1d120742,e4ac6af2,44a25a8d)\n,S(f7c9950c,d5c5afda,ede613bb,8f21ca15,b0e92487,81e16378,c7f2cba,5efd7beb,1746037c,b9211262,f0867180,16f0fed1,75debbb9,5eca39df,ed757c02,aa282d24)\n,S(96703c67,4e7e2859,f274e7f8,d458f7a2,89ac0bc4,961ef3bb,b120a1e1,b82b5a55,1f92a15e,5e8b476a,a165823e,59da387f,2f9ab551,4703010c,c35b787d,c7d8ddf)\n,S(4e8fa83b,bf9307a7,8b997e49,68227e86,a0402f0,643f98bc,5d13837b,63d08156,81f1f92,bb2a9ca8,14cd212a,6de7ebe9,7a04ed97,4de89e5f,cd8749ba,6e49e4ea)\n,S(bc239122,b0cb1f43,2ed0c2ec,bb3c5391,b7eebafc,c4190fc5,8f62d313,7f58c1bd,5b3cd401,d9cf971a,6b9f70a4,b6f8fab2,d0026a24,cceaea2,a86aef0e,a76a3cfa)\n,S(90b7138d,5d2e11b2,86d29b78,521aa9d7,205351f0,1451e134,8a593b78,fe5f1778,77cdd3f5,829af7d9,937ac98f,58a78b99,b54fe9d7,593415f2,18dde880,b5039a37)\n,S(631d0fd3,27bca9a6,aec8eff9,54fdde7b,df43edb7,b1f602fd,a32c387,825841e7,d6e8af71,273702a3,a2a767af,3c438f0,b07ab614,2fd0f67d,74a9d358,74e29100)\n,S(ac2a0153,d810371c,6a7bc097,ed09be67,14ae9935,4a9910ad,7ee77ab9,6d54cdee,39707795,a4f01640,87b5e149,2ec8fc1e,be11d8f7,c43555ac,6f4674fb,8ac5b0b0)\n,S(89751ec3,c1aeb288,1953d3d3,f2f634ee,29b1aa18,c55b8b62,59d5cadc,852ac99e,8b4d51e7,e2f94c0e,ef80e16d,9b62c935,2ac91394,902537f1,e93744c9,72f22a3)\n,S(849a6cfe,5e3ab81,2e21f491,4c6ec76b,5233d405,7ffd487d,bb0b5091,2ac499d2,a490b967,b5fcea21,d0135ec3,c9ed5efe,ecf7ac6c,81e06648,66cdca60,a1be7037)\n,S(4ffa897e,17d760e,41859b6f,3bfc421c,55fa1e31,eb999f72,5028be41,cc8a9ed,87b4b5ab,d9875b94,aebe632c,64ea441c,71ec7353,5ae2c83b,d9b904e3,7f7fd326)\n,S(4fda56c3,8bae34b6,55b2ed2b,621e5074,7ed1dc13,a1a815f3,be12a223,d54c43c6,6cfaa7b3,c53a1dfd,a03dc7eb,6086b84f,ac280c55,7c357d16,fa5938cb,c149bb10)\n,S(b572c9c7,9ecd2ee3,154c56a5,9c81444c,b16df1f7,82198eb7,40a78c7a,e5c7e99,a1fb603e,42d3ac6a,5ef5dd74,ced31624,fed9086,5b02b3c9,2bbad21a,ffb1b79a)\n,S(a77038c8,e79abb7e,a94b4e17,35f0f5fd,a07b1ad3,367047f4,895a5104,dfeaa623,e9bef9db,e8e2078b,346aee0e,efd64657,2210e451,ed2e8d63,b92be059,c577e1ea)\n,S(3158f3e1,14de5071,c6e2bff9,32f1c269,7e374dbb,786e960b,7e59df03,26e2e1c9,1d0e950a,9124a626,4553d29,3e5cb8cd,9dd05d45,f48de2ba,f60fcee0,ca42a9cd)\n,S(b0825b69,373aad7b,53c256c3,1258169f,2736d47b,1c4aa22d,a052b864,375a807c,23ec01bf,a857fa0,1f3d46f8,7857b211,f7533c9d,611dfdf7,951d190a,d7ef07db)\n,S(9578e6e2,1a738f66,ca04647c,ec610da1,afc5602b,1e72e096,bd192ed,f19c205c,fb5da982,7208b4e6,11e6dc5d,dd8b8ba3,569a578f,275e6d21,3417fd37,7e4e6cae)\n,S(a0aa979a,5448d27b,e42c39e2,2fcdf40e,d3b64c74,42b2c40e,2f6d38ff,fabb196d,7a9bf938,937be244,38aa212,d9342f98,ab9a35dc,1361fe56,5d04a25f,176eaff9)\n,S(f535145c,d57aca97,f4cef68b,ce57d5fb,62ccd1ea,b48dfeb1,3b87b188,4614be82,1323e73b,dcd6b16f,bc481294,198d8235,b98a1885,a336f07d,593e5df3,a21ccc11)\n,S(587d9e30,2f9d60ed,eeae03ca,252cd2fb,117bd07,fc91163d,a7cc569d,1b023f9f,7bcd5b42,3c01038c,9d3f7f71,ef52b4ef,a99e4be1,6de4314a,5e517e8a,950f45d5)\n,S(b1e3b70,aa8a0cab,ec119ca0,5430396,ed98d9f9,e3e1a650,94cbd985,4cbd0932,3c9496c8,eec7dd92,9718f7a2,8c7a67b5,c4e55d88,5a943cc0,deefbd11,fa4f8de2)\n,S(8f7001e2,928200d3,a478ba12,424be4c8,de8f16f2,a932e000,1468d9a0,48d57816,bedb10ab,72eacf26,1ab17a34,e5138686,34995952,545129b5,5bd6c7cd,84b50bc3)\n,S(c95bae04,e1c397e1,498822f7,b7910019,922e43de,83119ae4,8517aa9b,aad6f35,8fff7d3c,d8bd7af6,c8523375,84f73aa,2f1b03c6,585c7987,98fe29aa,36620486)\n,S(228fba21,ffe5ff9c,e04017e2,7cf04c71,1cc454d4,534d3404,49bbd1c9,60d2230d,825fb4a9,169ab67f,50963731,10f27fc3,f6f7acbc,9f2918f,c6f0bfa8,a92ed32e)\n,S(89610875,bb7c5f53,87929e38,22249817,ade80ed2,a69dec5a,eee31a48,6c40e316,f7d5f522,92a53c2a,447f9b6a,5c06b3f,22fcf19e,4a200ef0,9167c255,a373ef47)\n,S(9f0542f8,8e7e2b4b,c20b7b5b,87f051af,6650f605,67dca77b,7b6e1ccb,2a63f6e8,2b80c840,5e343203,d0a7d1cc,ccc99736,4bfa10d0,6e71880d,a0955cc0,b1ff98a2)\n,S(859b6ce5,b7075222,549b59bd,3de967b2,1655d163,c57e94e5,6c9fae12,e5222061,25b8cf47,baba2000,19036027,fc86f03a,1c4c406c,4a8b2c34,398b7191,bf125aa6)\n,S(e6febd1c,91e66c5d,afc7caaf,4150a023,b70c57fe,2a14f84b,c9fabce7,34982ddd,b606e3cc,f997b627,a0a02c4c,e147e0ef,58e3e275,a43940a3,4ac74760,457ae5e5)\n,S(956912,ea1f5ce3,52d39e67,a41e4ec5,8c7106e0,4552e1a0,48e4b195,6cff8c01,b1eb2fe7,7419c11f,f7e34dfd,a752064,39fa2e6f,b9f9d34f,70740950,cee3cf40)\n,S(1bca39eb,9b6a5d5,3575e510,6955143d,a6fe9d67,999500,ea78cb89,d832ddba,47afc8c9,358e5f7f,e92370d1,44ecac99,4e69afbf,6ef1af7a,32adefb7,9331173f)\n,S(2c6db85b,c4d84c2e,61f0b5c6,2f330e7e,dd672c63,a14fa534,9e4d1488,ad462c5c,bb488565,cb2da5c9,be8a6f6,c71555bd,d85b4a53,20ca0753,f524f91e,ca1e331d)\n,S(f66c0d73,36bc153c,5f85e297,52845255,8957a08b,603e4d3c,746e0c19,572c9f82,74e32022,faa58df3,1e4a02b6,f00ce5e7,bf34ec93,d8095144,a1af69f9,c637f01a)\n,S(774959ef,cf8c126a,67012f8,10217d39,298040ad,da97e973,9fe13f9,927f6757,c33b9f7d,b2901f8f,171151c5,dd8b890b,62c0a1c1,9b7d4691,9c23ed00,cdafdc24)\n,S(f59361a5,74b69786,f7ea4abe,44eef2f4,5000328d,dd72c2d5,a6dce9b8,63037ca6,34deb360,ece45bb0,a2417618,e7c67adb,24b33620,80d464af,a1ef20ae,35da05b)\n,S(add233d,31c179da,bb62567d,2a5bc5d7,9afc5c50,93dc8196,9767ccf3,8790a5a0,b9ecd675,13d81a64,8ca5ab2f,4d580d3f,7f7d4def,909f2759,af61e497,b6d8f82e)\n,S(3d204b0d,1d705714,7e947150,52a531bd,b6749743,5c94c7f4,8f821579,170fa257,ae20862b,cd86c6d8,e8344911,cfa8914d,f40e3a80,b762fd54,e2b7f704,4de86017)\n,S(22be58e5,1c5ce0e2,f1ee6f5e,523a2f55,e110c4b7,bd3135d2,39d7a25a,94bc13f4,56894dfd,6c2cb7c8,5689cf04,3c1d4221,a7dfdfd0,d05b1e68,cc41afb6,6a472a04)\n,S(6e015fb9,af8ec2d3,9f101509,f8f1fc9c,d95dcf57,82621ead,4651a062,c8487687,c7dc43db,d1d068da,9cb751fe,51251bf8,7f6edbc0,bb19925a,bc02cf6d,d7cf8554)\n,S(3baa1e60,42844786,fb720758,67ec526c,2e0f7fab,ac8e0eca,24eff876,47720c2b,909d202a,b40037e,9afe2ef4,d8638491,d27a1d24,98e497a0,908a52c1,52b1f8da)\n,S(689cad9b,2cde514,b9c25275,d6a3e68a,ce0b2216,4418a403,a83d88a2,4dc4d25f,53e7be29,165632b1,d1887aab,94c525f7,86166f32,56b44e70,295dd0d8,bb9f22f0)\n,S(c1cc4802,101d0251,76875033,ed9fcc07,a66a57a7,71ca1374,63d7c7b,655fdb6b,ffa73601,5dc4ccf6,8afc41e8,e254501,93eb75a1,60a98c,6c800d0c,f10edc5a)\n,S(888e34,86eef22e,2a25aaec,9bc9b84d,fec14fa4,c98e9d57,4fb9e08f,5b0f76a2,d2e3ec7c,db9286b4,b0223762,234d771f,a5b6f378,b6a4bbb3,c94c3303,af49b4f3)\n,S(ab355f17,a43d24dc,330a9195,c2be2ed5,6894a9d,e38d3dd1,1a31f9d9,9ca88a93,7f8f8748,c07cfbd9,fce0ac7c,b624f2d0,f83bc49a,53276b00,7ca2b821,51988e6e)\n,S(12a65c28,aa2020c6,5f56d916,c1cd111,10f68f0c,2408863e,635e05f0,1dbe4141,48bbab23,1be95484,7a0b61d3,89913ff4,5a8b97bc,384a0780,294d97d3,9c9b9be2)\n,S(9d96107c,591d95b,42854234,1371290b,370640d4,2dca9fb,5f5397db,84a5577e,183fa1b1,cda4719e,869c8b44,e97cf214,3ab14e5d,e5d0d781,78e5d68a,923b3dc4)\n,S(7ad05c26,aa642731,9eded7a,43f72faa,d344ef4,d413d884,67bea154,4459ad55,cbd8ea0,7fcbda54,813f990b,a6eb8450,6faa12d1,cd478a9b,cc278a32,511ba8f9)\n,S(d1ddaa71,27959090,65ea358f,b887e4b0,894028bd,457d217,f1ef6b9d,143a2292,e040cd3,d5f19cc0,456a55a3,88ccb81f,787eae9e,51a289cd,d8ae8d25,881e6ed2)\n,S(ec3bc5da,a9be90e5,1af0c1a2,bf41adfa,8023bb4f,b40e65d1,c65a0e82,6bdc30a6,d4962737,f9df1f4,48df1d9c,d8f7a140,233c2175,5d8ef5c6,f292b230,9ce263cf)\n,S(f3135904,dc55f515,806dbecf,d51b8106,f13dd1d3,43f78e05,91de1f94,86fd193f,c5bd3002,24934faa,2f9ec634,53fcb3a8,20af608e,efbeb963,23871faf,a7dc2246)\n,S(fb5f135f,b2f7638f,36bc332e,1bbd2050,335c141a,49db5452,619f266f,df85e8f9,6e71e045,827c3ef1,b75bffd2,ce54361,1e627cca,c94c8d3c,9b8fff62,e10b7b6)\n,S(d1dc12ca,62a1285,e3c16125,f71a1b7,7b0dfa9d,c1068ba,2bb56bf3,98864620,6a6bda82,232af467,afaecb2d,f4a7ca53,3c41d63,d8f7093b,f04a2964,6e4f19e0)\n,S(52354730,2d24cb39,f9117e35,d9374ea8,f3b6d027,cfcc23b7,58f0bc1d,b4f2d94,83719f2a,ccc79c43,1d8ea584,c78dd5f8,daded80a,fc3341f2,5789181b,7671d586)\n,S(fd8247d,d208839f,93eebd97,f6068ae8,a6640a46,48c16b65,6bc992b8,4ccfc5e6,dd560b93,9b530bf9,a8bfd5f9,614f498a,49e54061,61107517,e9ab0104,54e42f3f)\n,S(da5d83a1,9254990a,c14af844,df04bcb9,accab655,5468d08f,3b5d93b8,425f1600,9e5a8786,6be51fe3,54bc2412,6315f8de,1f0113cb,ae78b72f,cc70572c,d978fba6)\n,S(1205f8ce,b9c89dce,13cd44f4,9ef0b2e8,14b78639,372d9f61,f0543f54,bdef2944,6c820a46,afd1dd98,499636d6,afc34ae8,218a8c90,2f210dbe,530a9211,a058768a)\n,S(7d94e0f3,3969c5c8,164739ff,11aa05e0,45b32702,333d947f,8a0cbb80,57dd3c71,7b92b367,33f92723,17948d9c,a1875303,865fd47c,ecab145d,9ac9d4c9,864d62bb)\n,S(d7f22ab5,6840dd87,d939c4ae,3bbe5a67,75e7a2c6,dc969a96,40c7f65a,9c18b2d8,bfc60718,2509244,b0ab951b,f4032852,54b73d5,a23a19a0,b4ccff25,1e5dbd6a)\n,S(cee33146,2accf4fa,5f06b598,cc36aa06,342c83d7,eb4b6aff,90b9555b,fee0fe61,97583a48,5c323459,ef4b3f02,bf63f9bc,315cdf91,6163b389,c6a48cf7,4127da34)\n,S(1e1d2d64,1ec550e1,1a29bc03,cf7c8442,ca13f10a,182783c0,d4ee9bf0,8c3c8a18,1ca8ff62,fadef98a,4d1faa0d,28e75e5f,117cd890,2934e457,e042b870,d8cff1bb)\n,S(f10b2e75,8246bf49,1b70ff95,a385e701,dbbf333a,95a94652,6df7cb7a,4b4cb68f,ad15b5a4,d39d6458,55e57a65,3872d9d7,5f4b3168,182bdee0,a6289f68,aa7f99af)\n,S(4674dd8f,16ba5557,c9ef32a0,2b6be805,e864e7af,c4fecb8f,666cf396,f7e6b0a7,c9d95120,73388bfd,45f702ac,8851b5b7,531edbe2,df04d855,7bd58b3a,c889f48a)\n,S(95bb741,da472f82,8ff1f98,970c2bc9,1dcaa4ff,2cd4c0eb,195978b3,242c66f5,1e097cf6,d47dbdfa,8c3f2ce,90e0ccde,5adbd581,9a6e135,957ce258,805a4130)\n,S(9a892056,42e03fae,b24d8fe0,f94e4f6f,d0c72581,604a65a0,99e3d28b,b103d2dd,c6bee4e0,d94c30de,b99c1a21,5d28d7cf,930e89a0,7865ea1c,87d39f5e,1522b33a)\n,S(ade39c3b,e9540095,2176bb09,20541076,dac8e68a,a20903b1,5048e5db,4b0539a4,6bec56bd,60596cb5,7ea8a355,a6a6a4bc,90871c81,de902b0,6abd45d2,5802b204)\n,S(45f808f8,bab4b4e1,a790240a,f036516f,bf0a8eaa,dd4dede1,eb88bbb0,7d248b8b,3f3bc72f,bced768d,bb90ddef,5b1baa9d,aba634f,1fe19842,c3b4b456,8957794a)\n,S(ac9aa903,845a3081,2ddb195d,d79ffb6b,6e8ef0e,d34d0a5,49b577ca,35a116be,368ddbfd,1c5a2fa,c2c183af,19097414,82b272d0,52cec4b1,745fba6b,4a9fba89)\n,S(ba26fbbc,ffa6b9f3,584f18ca,255da089,f561c30f,29a378e2,9f76de9e,b756f6b6,55f67b11,81ff78c4,c4c86e7c,931e314f,dffb392,306a7145,5efe875b,fbe39ba3)\n,S(d4b1a902,1ebed925,9d53f2e,d76b03d,25b4241e,d5f932d3,a54c4dd5,db3f0423,6f1dda69,9e60053f,d9d2f5c2,c2ed2ae8,ba3337a9,b669ba05,3e48d974,f73c2d93)\n,S(bc91d139,b2de4778,458ca891,fa97e413,d4cf32b1,753cfe0e,540726c4,648b451e,b56454c3,4f568840,6d198248,19ba350e,aa291f16,5676d7c9,fbd2d592,169c76e7)\n,S(cd7a85ca,a0f408b,26b29306,3e01dee4,acaa8f9b,36f7273f,378290f,a4435450,1d9508b,1e7f5bc7,ba8fe5d4,f44e8c57,2bff9a98,887c3ef5,2fba3057,f132c5c5)\n,S(497f8e85,57880856,32edbfec,b0065ac8,3267fc31,da9100ce,c2b99cba,1e7c26f6,e6729428,fabdec3,2db731bb,f33cf45e,5001b890,8f82c0fe,f7cac291,f89c6a46)\n,S(68a607,4065c372,a95e7a6d,fc742e32,e59cc4b,86f9127f,f9465474,a466e30d,58e59131,1cfff974,e9e9162e,e974de92,904ffaf6,ffb97f49,d9dbb1ca,bfd927e)\n,S(79d2dba1,67b93ef8,82ca60ef,b803e1a6,eadb4406,7f9dbf6b,d45c1a72,23da19b2,a59f1b7d,9ca146bf,93b89f2e,244dbf00,31511075,4dc03050,aabf0d20,41230ad0)\n,S(5a2802ac,f4b92bf8,1c98c431,28ebe1f9,c921c211,910b6648,6391ca0e,4c6ad50c,5a0d7b4d,49b5835,dc3b395c,83031571,f7c361dd,840b41d0,405db351,14d86eaf)\n,S(87b8a84b,1fd98b53,e9eede06,74555c7d,806d5b7f,4cfced4,16203280,18c398d5,a38c4d7d,549bd5d,28fa39e9,805e81bb,975cd137,64aa8c7c,a7055d63,bdec52f2)\n,S(f7ca4d9e,7ac11395,70db6a06,c7f00833,5982181a,6642846,5d0899bd,907a9223,2c3dcce1,2ee6a995,52a72eee,e0968552,919502,5d4962c5,a33035d4,501badda)\n,S(15bf39e1,5a11ff6d,216c0f7f,f1597f7e,ceeeda34,91b450f5,3b3407cc,bf7ced7d,325462a,6591d018,e495c6f3,fedb3abd,75d5a4f,15e9ab99,e43418cc,4aef1ecc)\n,S(2755adc5,e69db19d,7caf52ee,117c6907,5b342e73,4af64a4c,77b369d4,269897b0,199bbefa,7e0b1c10,bd78ead,d5e65a6c,e6b3ee49,1400b9ad,a7874bcc,be580d5)\n,S(96ef0e89,80602225,1d8bb9e8,693f3a67,5152cc9c,43c4e953,5310b9f2,c4338d8c,2414e799,14b2d6e2,a9be60ed,52508d6c,15765c0a,7fc1746,8820fb99,a9feed56)\n,S(c1642d67,339fa6dc,c553233f,116f8086,2edbfc24,5512c2bd,4ca6e348,712bfb19,65e9a14,c7356a36,625022cf,873161b8,ef43ce38,a99586cb,9b5c8189,f3c6b8dc)\n,S(54c536b3,cb6da9b7,e4483ce5,d5c9e660,bf973ef2,f4c8b095,f52dfbed,ffdfb96e,777f16c3,b026b75a,c9863f38,d015f04d,e1067f2a,a9cbd15f,9ee27475,ad46a4b7)\n,S(706041aa,63dee9bd,4a441238,bd343bef,14e69929,f6e007e,181ae87a,68362926,36e15a44,57b86f4d,9b233dd3,37fab91f,67e4c811,3340463f,8f443b50,5a0ba014)\n,S(49acc336,116c91af,6f90a6a2,d69b9d3d,c0be0a16,afb9830c,c1af0b5e,749b2765,bc4f0f6c,725e037e,3a9d9be6,c5d4f80d,67b3e28b,92e5d3a8,fbc8f66d,9ba97d52)\n,S(96bee384,ff79ed86,a9d816cf,32f3d569,d1ae03d2,d154c65e,a117707d,74c818b1,848e45ec,27eaad75,5328d84c,a76a7235,ef4f492f,5be115a,a622171b,51dbac8e)\n,S(3b2b0810,c4052498,189affe0,4c7ebce7,b9050aa4,6a702d0f,72c5c770,4ca4d1ec,f782ad72,1bec3b8d,b1df97d4,7765434f,e4145c81,27acece3,9dbba604,4df2543f)\n,S(54c3547d,e4873721,df6215fb,ef7bcb4b,b9acce42,7b0381cf,2de151f7,c69549f0,5e7ce1b,728a3b21,e94b4138,bcb89af,f4778dba,fd21aa42,16d83a7c,9ae81edf)\n,S(9f1c53de,e7b895d5,6081585a,c6eb3821,d89bfa61,55cc96d2,e8b6c472,edf57f27,38369e41,ecbdb4ac,619aa7da,4d708eaf,4c572ed7,f1f2c079,d0bd17d5,3ba8288f)\n,S(e79f75e,a1a224c2,a0533936,65a5f705,15eb0aed,b924dfbb,5aa30055,d1d82b44,30c65139,f6a6f5ee,5304334b,1ce9dd15,27ba6031,2ff2697b,8eebbdab,67105171)\n,S(7f95a1da,79cf25cd,a904b7f3,11674d02,fc6dbf34,ae8ba7e0,b179b48a,d942821a,3d3dd8bb,31cbafd3,247ddceb,be1faeb3,b00e057f,7e90bd1a,78f89cdf,648f7c8e)\n,S(41e83f7b,9067a7c3,bb6ec755,ab7c83a4,dff74c93,65d0259c,cb635bea,718a416a,a54a4b56,5286b26b,d0bec338,2053c349,2de80062,2189e2ef,ed10e3c3,9457a34e)\n,S(81599046,453d0a96,2c5f3b47,fee7f827,537c7c58,c5ad068e,e5e6ae6f,7a9c6848,4a83b015,3abd0df4,177ef3f7,e8a7ac7a,e8e5afb9,a2fd359a,c30c13ee,321f943e)\n,S(11c9aa76,2cc334f0,a3274f15,17a1e60f,2f0eedfa,d603f83a,120162bb,e87830d0,7c73d374,26f648fe,4a9978c6,a64ac787,f4c8d79f,b58b0f58,70e373e4,d317136a)\n,S(2b41f344,b285a31a,ebf4f4fd,f0c4f463,49fcc794,e5762e04,dc39efc7,936735c9,7eb708ba,3f683d48,db8e0c25,ac8a6f8e,5c340749,c3d6ed5,7936d515,7f3d6e73)\n,S(dc063e66,38098e8c,6ff55a73,faa20099,c10d0258,87c19850,43d1011b,ab211b93,4abdfdf1,285ca3ad,65bb9a85,7ad647f7,fff01782,79fc6df1,6179e1d,495d212e)\n,S(7cb514e8,b6361aee,f9a7abe1,f84ef401,97de721b,609c3151,a056eb03,71ccdf8a,4d359c89,7d03a633,369bddcd,52a67387,fd4d1e00,2406502d,9ba6e967,a5efd0be)\n,S(103a6644,ee731721,bf29f036,97641fde,9775a642,9ce8d97a,26b06ceb,f9066693,127b6948,6db0d230,6ae90a1,4b8c8ecc,1e9293eb,cf154371,5ecbd579,e886a726)\n,S(adfaf771,662d719e,532ba045,72a50f12,144fafd0,afe93f7e,1d8edd13,99226e5b,b4d0335e,8b600a4f,84d919ba,514bc249,e3048cc4,281db3b9,a7c62013,4f00bbca)\n,S(609d9352,30f3c6ed,bf64275a,23a9a258,33fb8c3,9c25dde,4b55ce22,e64b50fc,cbbae84,c57f9c52,67278c4d,3b0cc5de,9327ba71,ca1a1bb1,8aec9a97,bce17552)\n,S(5ea5aa20,1b958a8c,49b70510,b7c6a29f,86d9ded9,afd4e833,77c433d0,f62d9ba3,27c5cee9,fe3c0bc2,af8d0e30,57eb0f57,b1fa4237,996bf8ef,5ccd25ef,e1b87ecc)\n,S(3f801115,3603a689,800c04d2,7d3b3fe5,c415ea29,c6e11951,7a56712f,20a10862,4280ab61,65b122e1,85abf4d4,14a31961,ac6595cb,421db183,34e57cb3,fe9bd059)\n,S(54981ffb,5b692a3d,6d9ec7ce,f027fff3,c5dafb7,aaab4c5,572522b9,e1157e5,893183bb,554c81de,21c84134,e395b9fe,80a5a9ee,b06e3b67,2ef93127,24c307ae)\n,S(97c18e92,d499ef62,77585c6b,28f36fec,e9a2e118,f793260e,32750861,a1aeb813,38a87702,7f1df077,d6e734fe,18a023ff,36c6d4bf,4a7bc7ce,d3a3d38f,c3069f33)\n,S(d5507aae,97bb6e17,410bc87,26d9eb2d,11558b96,6c54e7db,6428b44a,3589820c,e78d0140,7468dda6,d9c4af92,1984460c,e523c101,79f7aa15,d8004dbc,4fc63cb9)\n,S(220d6c2e,6c500d01,9ded2aa6,5de205f7,cdbb15e5,69038ba5,7bb1700f,1182ca70,64b68506,c387ec2d,9e030448,797bc28c,5e09e8a9,95f5f80e,70c26a1f,db7b16b3)\n,S(c1a45038,da6aaf1e,396595c,3ab404eb,9584ec90,d894985c,18e779de,793d20ba,1a443da1,72e281aa,4393e1de,6f1e4f89,4fe5d1ec,b3a5bcd9,607cf79e,6f20b533)\n,S(9a66f9b7,f3162c80,d22d0b5d,2a659bc6,ac01c74f,46804ca6,c908b6cb,90fb419e,3465357b,209c2b,a7c766b6,9c17abdc,69205c54,787fd0ef,e744692,16b95d3)\n,S(8b305bcb,1b6156e3,22f0f0df,28265cc8,79e5909b,b76b546e,eb223d62,89883387,929a341d,dfa05574,90cf5293,244d924e,852b00d0,d328ffe4,7ccc5356,623a31a)\n,S(4e36ee67,b5398169,8ed9460a,cb450023,7198f249,4dded391,4c2ae003,63c8f664,a784c95a,9a443b7,5859a1b1,373eb750,150e1ac9,d5120ca6,f273578b,73df77a6)\n,S(167275aa,38d02988,c53e0a36,d8312e32,369bc677,6d7143df,cc6fb83f,66747caf,f26b9851,31abcf45,369a6415,84b2956a,7122a51f,b909bc30,5427eff3,916e6e14)\n,S(c93d0b74,c99358d6,d24a962a,15adafcc,8a4e57ca,df0afeb4,9d46ef53,cf619797,f93b324a,b144c6df,336e34e1,beef5c13,b931668e,54ab34a5,eee1a8f5,5acc683)\n,S(8bcaa2d4,671bb4b6,8a924109,32128551,fbf6d924,d4854027,7c1dff57,3bc4a8f2,88be3e1,6482477e,62255fb3,24512abe,27cbb4df,f63c6d8c,93c3c923,47e519d2)\n,S(69d186de,f9a7ea8,be833f2,590db08c,fc0acfbc,64a648b6,8ca412d6,88c03808,d776b644,43a81bf7,527f658e,45d92324,a08ce171,6db6c259,898fab8c,f3d6d41d)\n,S(4a53595e,e2cfbc6,7bdc9f07,308f57c,7ff5afc8,a35e27ec,e22cdbdf,6efde161,e55913de,d481077a,ea36c502,494b3b72,b1691786,335b0278,3e40fa1c,1a1b0876)\n,S(90856f9a,5f7bbc14,557dd419,516ce5c9,aa451bce,13c17ce5,5c9fb1b5,f2924995,ca083d2e,b5a3a067,4a2534fe,e03bd99d,976b96bd,2b7f16ea,6e2552ee,648e934)\n,S(2eed315e,d863298c,aa374ca6,2bf8313a,a0ca07e1,9a94bc4d,58eb235b,52d36dfc,afa36c8f,90d7adeb,ec33ec69,40c08d1f,2a4044a7,477da88a,6653d90b,880856a7)\n,S(345a7f2,ab7ef064,eccdbe6a,ebd11dc5,3c7ede0,b62ab3de,f8e409e6,258e84c4,c0c0dce5,93cf9647,c0228d8,42b78407,c3b634ac,799fae19,f0e685d2,6ccfd73f)\n,S(5a669d7c,209b222b,47843a5a,633e0b53,48442258,663a58cf,f6ee3cc4,1b893d3d,7067be1d,8636698,2b808b16,3c05e57f,2be77d1a,2bf78038,e242f5c7,4ce10523)\n,S(3f0b0f3c,30a991bf,927f5119,6fb4af39,e1399d01,1766b1ff,1f0ff2d8,a3199062,be8f8781,4c06a75,97d062c2,196a49ef,93a73923,f43d16ac,82c015e5,4789d472)\n,S(9d7f2c64,98e78982,8492b8c9,2e0e49c7,b5c9d4b2,e86c409d,828447fe,4a2f5a13,95ccc540,8202dbc,78323d6c,7ef66d51,4af34699,5be50b56,98a5864d,34e502cb)\n,S(9f741436,55b3cfb5,39917a7c,79fec4ba,164503a8,3958aee1,f6e8f34b,3d861b78,345738c,ff8f3c64,f5cda5a7,a1aee7ef,f3a33141,a5139c3f,b891c6aa,feaaa7ad)\n,S(cf1d3136,11d4b6ec,5f1a9728,c9a7b037,d9c16d65,bad95fdb,17376200,b1a9a97a,51c72169,bf7b1ad8,6159fead,dcf3b0a7,a7fc13cf,7bf12d98,409dc3b4,fcb7a9a2)\n,S(7e04c6ef,c7433f3f,fa2bb827,3fdcb3a,e0470abb,cc7c8dc5,414ff77a,915868a0,781125c,2184eeb8,87019f7,c5c0b4a5,5922d11c,53c3db9e,d5795bc6,e7539cc4)\n,S(fa6d73b2,a97801b6,16697ac6,102b002a,53d29d33,289708f,d8f73964,77f3d57d,543db558,25c67a4,cd010413,9f8a093,7ea7ac2a,380799f1,c2249569,3cf557dd)\n,S(d0fd7208,8deac18b,1bd63fbd,6d5be0ef,5dcd34c5,538a9b64,ef43daea,ef321d1a,7a5e1e2a,1b290241,7879f223,8cc8928a,65988130,81366846,69841b93,3ddc3a1f)\n,S(e856e67,e28330ed,77d8687f,bfdce5d9,ab8ec155,4c94ae0f,491d1e43,9361cb99,c51585a1,9da7c26a,4fc07c6a,f17999e7,a6718542,d7500fc9,1bd21fc3,8acf1eea)\n,S(389cff20,9f240748,b9beba0,34d36e0,5e758a3c,95c678e,28cb0226,37db1bcc,ae5a0d3,db1e17fe,30daa2af,1e1f759e,905811c8,95706b7c,e5741051,2b7ac4c)\n,S(28ce0f42,ff79cdb8,16b666c9,c3014051,d46e8df2,e2377c3b,619b78d5,17f21a1a,4e835188,f742237c,fe581edd,937b7294,e06fb295,d401b35f,5b7b293c,6d57f875)\n,S(3d955bfe,5b27beb9,68400d11,3b8666e2,63af6ef0,ac6ee49e,8628e2ac,4d1e69c4,1fbd2aa9,b6913655,e00f1384,a15a7215,d3d7340e,4891893a,a67faf39,88801e9e)\n,S(53dcaec1,2dd48ad9,ee65c9bb,ef21a023,58cac930,316263d4,9d607074,8aceb771,5b976f2,411d7624,d4659e5f,db624b05,9dd5e06e,f0b65740,ba394020,b9d279dd)\n,S(ab822568,f7e9da8d,3f1220e3,24752c80,b02a8124,f8d9f65b,3b4532ec,3740881f,6c2152dd,34451ab5,b47b7c08,f7edada8,f9f230c3,5fdc2de3,35cd93d9,e25703c8)\n,S(36719c40,1518b976,684bbdd9,2a923485,ce92b321,dc26534f,e5a0473e,4c873c30,d5d58a83,d493cccd,d16a1282,68aa93e4,94ce8638,41ec947,930c72e0,887564fd)\n,S(360c82e6,18a53dc2,e44677b,a0bb8c2e,2a08f6d7,afbe8498,15d605c3,2e5fa969,ade18222,e1d0fbe0,a31c55b8,d2cb947f,1fcdea11,1e08ea3a,4f3dff02,e3e38b70)\n,S(ecf50737,25a3b81e,dc621bb8,6c98fd59,f805d6b8,2f08380c,64270df1,95f020f,f5431b8a,cba5d27,1da26cb4,fc3412fb,14ccf088,6e0e08ff,ce0db47c,6b4172aa)\n,S(3b751389,e6dadda0,85298860,76076249,46df960c,e030caf6,91f91d46,4d05be4c,244b0028,48829fc3,824dbe61,168fa1c0,3e4d3835,d3da3a53,7c729f0a,191e92cf)\n,S(ee6e33ee,7fd9d7e7,aab10b8d,2c58f2a7,26ed307b,6fa69b3b,f1f08a74,f1b04ffc,4233398d,6ee49505,c5f21525,6cc9112f,5dfdd7e3,4bfb9a8a,476b3cd8,2645b8f)\n,S(e7141075,e20f0903,f39fa384,f91a5708,7f24deb3,68571939,572caf0d,2fb543f9,5265e24a,bd84336c,26b4607,dfa25c44,49c4693f,adddca01,599d814c,21787cee)\n,S(d401b043,ee9944dd,7429a8c9,4291dc55,7e5827d5,88375dbf,1513d394,a778826a,9ac9b417,5ac3666d,7c6327be,5172b8b8,1dbdc96,eaf8578b,76f01128,4434b937)\n,S(d48c45cb,b90394d8,23574c16,60898091,75d503b5,99d936f1,f60246d1,79c9cac5,4e6b2bad,a67ebb7,a0743cf8,52298052,2737f0fc,6cbef646,fb270d44,2a285612)\n,S(19f6446,fabe1899,ec4476ee,1d61f6af,961da42,ada1f77d,2ab41cc4,28791c64,7a0aa5b1,4f2ae030,d9711963,bbe160ca,424f6a7f,17b6a709,b5f0dce5,af1d0498)\n,S(2db1d56e,f19a848f,6d6747c6,82cffa47,78444b3a,d57ea076,b0560b1c,4e57c83e,701a5894,d1d6b6cc,b421b168,fd34aeaa,e85262ab,44f70c65,b8ff61ac,ee541cf6)\n,S(443597f7,9da3df8b,5fddf8da,3bc3a060,83f2cb6f,affbb1ab,8a12db92,59661adf,31b2c4ea,362a0cbe,2b9b1488,719b7ac4,3a85f7c9,63e9f2bb,b46ee055,71e2ac2)\n,S(e49ad52a,7bd2db07,d972def2,d1ce6684,69aaf6b3,3c7e3427,52d79fa0,9d2ee9ad,b2063f37,1ca78c2c,429cd401,c5e46d6b,dcbf373f,5cb77163,5760b8ed,b4f91ba4)\n,S(35b3fc0a,4a625cb5,808e1c2e,73c962e1,6ab7dfb3,28109ef,fdf81e15,841afd0a,cb558481,145a5f75,b639133e,8ce42c98,d36d8fa8,5348c815,d92a2c8e,cc993bf1)\n,S(1cc238ef,3f64a075,c3c264b,ed42a0ac,aa6de195,7db40d52,86c482cf,f62f609a,d3382317,2b8a1450,bd918aa3,c57de76d,3012887c,98452f7b,c1f58610,f528af49)\n,S(f5a2794f,48885192,dec727c7,79fb0b6f,c2cdf399,4ef7cacb,94e35791,4d138e84,d3ed4f1b,912f5dce,5a0842ff,d2e671b7,f3ae8448,b1a73f43,249a1acf,915b9c34)\n,S(21b41016,a8eb7c6f,5519d94b,adb0fa7a,5c553822,6d080e3d,6d2956e8,8a9579e9,802570ed,b9b01b1b,ed79b6f1,76ebc4b3,55dfdd16,f43e82e8,7803be0,fc44e274)\n,S(9b5611b7,938ac10a,9818bda7,3615a47c,1ee0f072,75aa3dcc,b8919dcb,e7beaa88,89787c01,d088e3b3,603047e5,2f49981f,7f007c8c,a88502c1,3bd9c327,e3c83b1f)\n,S(28163c9a,b08a7ad9,38c7b35d,b19e700b,3865800a,55a3103d,2213c9ef,2c03858e,661e089b,df356bd4,afcd0604,fa5ade9e,74c5663e,77ab57f4,a069bcf9,b8b227bb)\n,S(bae9ac08,aecc06f0,ffb8540e,2589a32f,11d34a7f,6d899e5,7a8f5ec5,bcf1601d,f5b63d9f,8a5d23b0,80d0bb6c,b8df736,aa660a3b,6f987683,cc0a54e5,f7d1b4d4)\n,S(19f48542,3ed01783,cb83d2d,2efd7264,a10c6c23,1f5a242b,112eccb6,31d91f7c,79ce383f,f011ce13,87537ebc,3e70dcfe,2cc2764a,3d180fdc,74a21062,a5b75f50)\n,S(cf459ca,cc8c4ff2,c827efae,6593a52,838658ec,bf1a78f4,75965856,a8ad007e,786781e3,3279964e,da5e6374,bf088fa7,5d18901,df01a0d3,6c87b62e,b419dca0)\n,S(c19f2008,e6945d10,471a13e4,8b16f3a6,381de3e2,b24f2d92,77ded25e,930d1f47,7179aaf5,322b51d8,7758219f,cc30e9d6,bad5ab77,b35dced9,6a513b4b,fa7fe147)\n,S(3fc1b649,3b6cbecb,1767d0e5,6202c84f,39a6b41,87f05ac0,d659c45f,5bc565c,db9edee1,1768e29b,4eefddae,c6234622,55d06e0f,1979c8c3,5c366f4b,5cac3f5b)\n,S(502f74d2,cf589c65,e63b2a8d,b2b1e4ba,5f851715,bbb27e8f,165fd34f,29cff7c5,755e6c73,765bc45a,c2f9d4da,499198a7,36743571,40846ce3,6afd8063,981a96b1)\n,S(b9eb62bd,7cc6d1d8,b0eca2b6,1920be5,9227534e,7fb581c6,4dcec4f8,f1ec44ca,ac567b37,891e3eb5,c40fecf2,d4c5b106,bd222c8b,64ab491,f7a028a6,a02178e8)\n,S(2e5280c7,25a109f4,c5de565b,9fe5357c,718f9fea,db53aa9c,b07a0f3b,f5030ad4,4783be94,1b162e,79f58d4c,448756bb,8ea18c4b,692e236b,4b2b3ffa,24a456b4)\n,S(bd59ac74,92d24606,9b233efc,1b68c371,bbc9713a,284f7f0c,699a1d5e,ccca64ab,1abc71f2,fce8372a,a4a16abf,1d75bd87,a19c08ed,c8843f44,fb71bb7c,a74ec4e3)\n,S(6acd12ba,4623582d,d769c8bd,3d6adabc,2c13ba3f,bb67e4ed,ee0fe70f,3f832f5b,982fce11,ff1e6c05,2f21be20,ce1710d8,5cc043dd,eca9bc43,5d100d9f,f68150b0)\n,S(601f4285,8b0cbce9,90500c64,e7eb77e1,c433dca5,55e6ddff,5264a98,d688decc,56110eb5,d5b3ed79,5906ed4,c0275827,79cff7fc,ddecbe7c,74d2bf10,ab2beac1)\n,S(4d393daf,c47391d8,8208263d,b8132156,e9fdd6b7,da48eae,90489d12,832dc938,a14180a7,898a5a00,6ae5b8c8,d034c233,93ed2ef4,faf6a4fc,42c4df1d,62d0ea7a)\n,S(4ea24f6c,3c164285,166bf2b,1918b3ee,3cac8631,5a1175d5,4104506f,68b7171c,87da621a,a18d1a18,b1dc222f,af37b5a0,b149714a,e755ef03,ee3af91d,f2a7f5ea)\n,S(eb1f6f2c,a5749f80,b88a7359,f0b67230,b2b844a2,4fb72dba,f5604e73,cf6e432a,6f58093a,55e3cb37,8830e58b,10612b24,56a35fa4,b8e60409,1b9b8304,e35cca51)\n,S(2361315a,3d41b82,98a9d768,be7f453c,eeb977af,bf1db132,c831bc00,aaccc9ab,90df3be,336d4b58,7965778d,9300cc1b,3d954d4a,89abf173,a9bfd99c,29492dbd)\n,S(44f432f0,46c7defb,630d5535,aca1bd47,10505012,6b2454b3,4591b079,7f8e9b28,1fdfbcb7,25eee981,c19f98b4,6bd19dff,9b6cbdab,730ca2e3,1643d415,e3aa0489)\n,S(d563a475,4c130e71,81b60a66,a3f2ee52,7040f9f0,eac9e26,866fb226,f93db593,49fab7c9,6e320961,6f4610dd,532d547b,b24f7f07,f916f10e,630ae5cd,b40d3b11)\n,S(2fac4651,f0ac9876,4a74c066,16e7f1b8,aa6d2bb2,99ef9f0f,43bca81e,7a4089b,fff2b7b8,c330e1f9,86a69324,a63bf10f,fad8e78f,dfbb6062,c96a67b9,eb460d5f)\n,S(b6f60ef3,d8b793d6,5794aa89,12e8e1a0,9ef7604a,5c9eaede,b803fb31,e8195dde,b9b17946,4057de11,9d0bf993,fe92e4a8,bb633d6c,d03ce8b5,10200166,467e6bbb)\n,S(d08c6813,65789ba2,4e580637,2eaa1ad1,d1254462,3cb64d83,5ea2e1d8,6e34620a,e94875ca,f5beb1cc,f88fa3c5,e2776203,a6f3cb5e,b4803618,52215d0a,9076b185)\n,S(dfda222c,a4ddbb56,661f56d,b9b74be9,a5a7c34c,4761483d,928aa48,9bfabf52,bfac4ed0,ab4ccfa7,caf64d8e,ffdf1aab,6aad50db,595b1b49,7fab28d7,656b6475)\n,S(3f72e4cc,ef5c0bbf,995bf8b4,67759969,d93ee40,8e738a4d,41f55896,17f241ed,c42ad857,3f49218,c7daca7c,8ebc5c7d,f9ac301a,2aea209c,ab6648f9,8ea16f5c)\n,S(6e85f587,91431b6e,dd848aa4,70101103,f63881d3,2fa9f1c1,e3324161,e9ebf0ee,f7f00d38,31e09d69,f0684107,59dcf837,eed3d833,90efa352,40a9ac5b,2daa2a57)\n,S(d991fc76,2f75235a,5268a32d,64dbeac1,b2333a34,5ad552a4,cedfab54,9b191f14,90d58a07,794983c8,3f6edcfb,55ed0b68,8f43d9f5,eb7678d,29610299,63c748b)\n,S(24cd7922,7ef207bb,6b9b678,5156bf76,77101e6d,f5fb5576,a9d33175,8d7c00,44608974,5f1157bf,9c9f45a1,b212a978,8e348a0f,55129935,b038940f,84e91468)\n,S(5c053ed8,367806a2,8545692a,47314850,66910d02,3373b89d,e85bc7a1,c25bf6bd,9a3e45f8,dde03e64,6d6c546c,cf4c8fc5,a253054a,2d6df43b,d8c4afb6,385311f2)\n,S(4f3a4d88,20948d82,b598f118,1d350719,ffaa5ce9,9a7f614f,a9e3cbf2,e021a6cc,149c6722,980a41ce,5d4c0b94,9cbe3c99,4d94f2d7,c36ef45c,d7b9084a,79f451a2)\n,S(badbce64,8d55b579,cf8d6dc6,74580211,a6bff856,10804077,adad7c2d,238aa542,567d75d7,1570d7e5,184f4f4c,a53fb92d,654b67d1,f6bff96d,fddcc3fb,932f0343)\n,S(d2eda540,5f828eb2,cd3bc5c1,9f9a838f,8a1186eb,3cbe9575,5cf6642d,13601942,ecb3dc3,655ea992,4773cb57,f4f4c8d,6380c665,69f08184,f521dada,c108629c)\n,S(191ad0df,31c7f3b8,258e5bfc,ec9d1ff1,2143b240,24d93a17,893da095,97304f1e,4ad4991,6bd2296f,b6f6b697,dbf5a3cc,4c3ba136,6f6dfade,c859b190,48fb523f)\n,S(f108bdc4,a1874aff,35bd1fac,b8e81b5a,7a7ed597,e78dfb7a,c716bf7e,7a15dcac,b88e4fa0,d630d92d,bbdeda05,4a6c6624,e7bb1d5b,a6dded85,347e5275,e08c9414)\n,S(30fb7605,7e2a6cdd,59fa279b,3574cf1f,db9d5159,19d0e523,990be02b,da1ebffc,5743e72a,752b558,1b959a48,3b6229c2,33fa1b3b,2719ad3c,a6f8f9ba,1702ae8d)\n,S(6facb1e2,6d1ef1cf,ff413145,63f3b2e4,e762ee7,3e43378,c4c15f85,1cd948bb,92000e2e,a3a5bdbf,f6eaeae8,8619f2a,48b649c9,19972b7b,83cbac22,62d484d7)\n,S(741c1253,8cd4da52,c596840f,e6233558,fb480a0d,43232756,2a9e2d59,a574b981,79040b6d,580efd7d,84356117,a93941f6,b47e6c0,a53627e1,bb80fcbc,e6881234)\n,S(2b86fe60,2b2e87f,59498185,4af1f986,7debc5a,84ae8bf,94d2d6ab,4ec8be09,cf4c27b6,b33b5020,2ff7fdd3,ff0743e8,f28ca75d,3cb74d21,ecf21dab,ad7ae079)\n,S(e6e7b676,9f0ed86,4163e9d3,66a7e2a7,a37f1ee8,e827b105,3119b8b,d36e7b84,c2e5b9b1,d82b4504,454062de,6c24430f,53e03bd1,819eb1e3,2f24606,73d09be2)\n,S(86600d22,e7bec946,5b0afe05,5e733b03,f8f81548,ea44e008,740ac807,ddaabbe1,abb367d0,5e6d2fd0,a2c1d0af,5ded2926,1439c985,ef287860,80614bf9,8e8e33fd)\n,S(67171261,5cbe2da0,b252a773,58f81c91,fbe561f4,87df09e6,cedc8a55,cb3414b2,bf02d81d,10a47287,2b7e65e4,93d97cfa,e3bd6ba4,39977371,8cde674,8829b0a3)\n,S(97db468e,7f3a25c4,c34e202c,e9b2480a,4344aa9e,1b76a147,4bd375ed,6d10c0da,c58ceb67,a28f99de,2eca70ef,e8af24fb,c381f962,d5db6e3c,481cca6c,469c4c27)\n,S(f3ac0267,ef19ae9d,762c4023,4ba97e33,a88b015a,e6a83f4b,cf730d84,405aed26,cfb8a3ef,d1104873,8c1c927,b31ebd05,105bcce1,d57c7fad,1972a5fd,cbe84f06)\n,S(fa44128c,3c258fd,5a99c85e,775fca63,4e8a46d8,4fbff953,b373bd50,6ca3da85,f3196e74,d17cae3e,3c9958cd,ca591374,ddffcba,7e362139,17e5e119,a5538b1b)\n,S(95244462,1eda0b2d,acdc1a57,41725c1f,a7c5660c,feafe18d,ff8789ba,164e7dbd,214bb6b1,7af1584b,76a9e5a6,2c32eefb,497324d5,7b00f71d,24b162e7,1383bff9)\n,S(11de80de,c03a732d,6769e52c,64be4d2f,fb1d696b,2a658721,94aa384,392dff9,e1eb8932,42386216,f543eea,a2d1099e,531d8e27,7cb2e5fd,ec76b3af,e9e9c7b7)\n,S(7318b452,a2b9d23a,eeb30bb1,3883dff5,b373be94,94451c72,36a2c02d,a4c37e75,26713361,aaedfdbc,2966fd1a,ecfa705,772012b2,564b077c,7f5db7b2,c810861c)\n,S(82d189ad,e5610825,1b03cae0,4b138ff7,dd2d77b5,422535c5,cef9be7c,1899cf75,3634267b,1b3c3de0,d2dba36b,924949b6,7e05d790,29c9452c,18c6ff70,252d570)\n,S(e5dfe995,82152513,80859865,f16fd0fd,e4d60c7,be0e2aa2,d9b2af4f,3714f8f7,e1d87d8f,fdef889,52918e62,5bcc90e6,83f337a6,103cd000,1cfd01d1,eef4b9bf)\n,S(54cdeddc,9fda5fe4,63240f72,8ca66c34,ec05394,899f2472,d82d2378,28a06a3f,27bab620,cc373ed,10a71c18,345ff27f,e20e1bef,98052afc,bb45fdc1,80b94a2c)\n,S(7f96757b,8b473785,e1359cd5,bffbce2d,5b26e8fb,579d7833,607d58,a791c47a,d4b43e2e,20a43fa3,5a96d1ff,93109aa0,b7831fdc,2d2c016e,181beac9,c1cfcc4c)\n,S(eaed18ba,83238fa5,ce4e6c82,edaef108,b1f9929,3148f3e6,2d3a6d4b,535455be,1017291b,805f7b1f,eba367f5,9a1a10b5,f7501355,7e6eb921,20838c50,aab0d29b)\n,S(91ca8ba1,da9c2625,66a135ad,81f57b10,65ea4632,5bec5d42,ca1ad62b,826f04fe,2d5d619e,84fac3c1,e30343ba,a61d3bfd,e1c4a9a9,8d968e92,d560956e,138e34ee)\n,S(8a31ad57,12e32254,7d0d2907,cb73adfb,a9a1ed5f,fe98d645,22082e6f,1cdb1364,8ecc3fea,886737f4,f94a2984,e6edba9,8128b2d3,bc79a209,2b2c1a7b,b00bff9e)\n,S(123acd6b,ca673170,400bfc4,1071cca5,4e03daf3,e1ed1458,88470c04,568b972e,e97dc60e,cfec2d5,c6a6e173,9d60f7e9,838ad723,ad0fc7e1,52b5e70d,b48b853b)\n,S(d7c26043,ad647f0f,d056c10b,4ac932c6,6a545bbd,509de346,d4391942,52e69df7,6bbf2f04,2c9459cb,c72e6aa3,1b6d8e4d,e606eeb7,d5d4e0f5,7f729a79,ab1f5e9e)\n,S(67c4eb00,548e2cdf,50626c8b,1aec1173,8370da41,9280c9b0,1c8783ee,91e018d0,ffff201d,91a4538a,97ceb50b,c9aac646,bedda1d1,3f22a121,c709bfc6,23b95a67)\n,S(7e1264ea,486b08c5,19c7d8e6,5c80e1d4,d2994bb0,95185c72,63172b1f,ead93428,1797609c,816f10a2,e82afe39,65112a35,798b0874,b24503a8,f57c983b,6ce7ef6)\n,S(912cb164,5f7d7bfe,5ea443af,1c458500,a95ff22b,212109e3,12fa01c2,41319cf8,bab658b0,111c48f8,a2f620a5,fd130d53,e1c70e7,62e33dec,55b22d87,38c1eb99)\n,S(1d60694f,15577a40,f6b9f299,be5eb62d,251f62ad,b9b5651b,df804e27,df919fb7,3799eb92,e18335b0,bdbc29b1,f8ce07ff,3f7cd409,5840d5,dd324bca,2f902a14)\n,S(8166b50b,811bf53,4a94af10,7672ab4a,4e154b2f,c5cebee8,c8ef6ebc,18cc3906,6dea31f3,343e5b45,f5b08c19,903491f9,349f4ca,29818fa9,16f5e02d,85e09ef)\n,S(4852393,e42d0821,6664d5d,f85eee60,9660eaf9,54ccc6d,fb1c31f9,da17923,e4cadcab,17f64d8a,f5dd74da,eaeab7f7,13be1de9,600d4db1,a781a058,5ed2006d)\n,S(f40031b5,ba171b26,e02be47a,c34173aa,18ec3850,1b1d529e,a922a418,1c3491c9,c2db89ec,2e50105c,4074b729,a53ef0a7,9371d2a3,354d2d23,8fb39bf4,bcb5028c)\n,S(8926d233,3c842f9a,213547a2,fc5ef5de,b0bbd603,e69d347c,41e7d49e,aad76cb2,8459bc10,b7b2617,b0d434f4,b62a4452,80bb951e,b4ada14c,fa800389,b3ff892a)\n,S(7f362b16,9d9bd514,c6289cdc,70ea4b77,e7518db6,a2e33acb,8acefcd3,d8c5726d,dd1e69e2,71d77dc,2629cded,72869345,7c63ea2c,8636c712,e45e6af0,4c15fe35)\n,S(261b8037,98ca780b,50dfd56b,81093f32,d7c348e,4f093b91,70470ccc,4516ee1c,5723ca6a,5959d589,4a24c12b,5f87a5af,84c7a6a6,89304000,344bf5d4,81c7752a)\n,S(d137c0e8,edb32642,12f6b958,8b527a9e,9e57f3fc,c358a2b,68f11d61,89fbd900,d1043b3,5f809513,ae370588,4adf90c1,9d164c3a,8166027,92ca55df,74c71466)\n,S(96274665,253f4479,753de9ff,ac94af8c,943b8231,b1302040,bee72240,2ccc445e,8ef6f9fc,f1e21c2b,d913f877,98c6ac9,f53445f3,6c2b1678,a301a4f5,17867296)\n,S(bc6ea584,b1f9b006,5f39226b,e31a866f,7f90229e,12aade70,136dc747,b37f70c3,23f1c4eb,99dfbcbf,66539762,4d20c4dd,4414bf15,172cde8a,b7652ad6,f87ad5e0)\n,S(3e968741,5adc1afa,696e3222,fe351939,1d3f19b6,feb1de83,f4f1aec4,d25e2387,e3f4de27,67ea84c7,8baf1382,4b7917dd,477bdc87,cf1cf38f,8f5da1,e096b528)\n,S(b5973535,c9c9d4bc,2b2a9b38,57cdfdf6,4995d64b,81c9e68b,abe4d4eb,4eee489,907cff05,5eded925,770280de,9ee0e025,1629796e,8ca05a47,48ddaf98,72bfdc3e)\n,S(d616bde5,acd5f345,d23e8b2c,3d95038a,a1d7a354,a7613cac,57ec3e8,d07e11e,6c88c62d,d795d065,c6c86478,cacc56d3,2282b4f8,f3059aaa,55388555,449879df)\n,S(540345c6,5869d3cb,cf4099c3,ba7422e0,feb87ab6,ad67429c,2dc99840,e6bc82b5,9f424998,bceafc7a,a58e5f16,c58e53d0,c0d51f64,285b0afe,e84ec9f6,b22f8f37)\n,S(6b7893d0,ace6ab5f,c93f2e80,65a3de57,4d552e5d,4a89d660,714113c5,a256fb84,81a016a3,7be94a2a,f45b1bfb,968006a3,58398fab,424811f7,6765fe75,d4438d5d)\n,S(357ea5e1,7a0795ca,cac47e4b,9e59bb24,45d1b6cb,2c713f04,7029f6de,2be57734,571de7e0,27dd05af,90bebc29,bd7345f5,77babdd2,75498bb6,d43a668a,8a4d6206)\n,S(7baa2739,1db2a0c8,679d0e18,8c5e7c8f,ef1814ad,b7bb3955,519b4189,1a63ec40,73b56168,20fddbb5,749e8dfe,ef834f74,e266df86,e34510cc,f5eebb52,a868075d)\n,S(4d5251b2,dd778e04,5143169f,8cab93b,9a9b7428,1a0ea1ff,964225a8,10b1e578,9376395f,2091036,16a95686,4e55382b,39b6934,2b2964d8,34face11,a44f491b)\n,S(3c0fb553,b0c6330a,3cc06bb3,b0cb4c2b,31be7582,55264b29,98bbc166,ff57f7ca,f1f409bb,cc227824,4dc08c3,147e0b83,3522da9,6859400f,8d19272,e33ef1d9)\n,S(6dcc7ba0,4b3b0827,e3bcb462,7b7db8d0,e0997c7f,900d27de,2d6c87d9,aab2c373,f2dcb11e,87b69faf,4400e9b3,186eeb6a,4fb48cad,6d6da276,3943772a,4e18b450)\n,S(a5271e35,ca54c1b3,16d6113a,40414ed9,26bade46,c3258c6e,82a63e9d,927ce06a,e2d6051f,bf42dd9b,e0b2e00,1fa4e308,66232871,313f9c82,fd6ee37,6e8e376b)\n,S(574d1ffd,976c616f,60371e4a,76b2712e,84b0a231,8d3c1c0d,3b56b10c,e978efe0,13733a17,a956efa5,733dc130,cc4c848c,19ecd6f8,7fae5ac,82c73de5,6d1bfa0)\n,S(ccccd911,ea84c247,262a6e61,8028b2c1,a147f55f,b637b570,97400472,fe3e27ce,cc4b4f5e,491f32aa,eb6d0404,5965a97a,e4119e73,33bd1b39,f2ea9873,7d8f33ef)\n,S(df1e4fa5,410f1438,9a41ca26,31eef376,4f10868a,f2f05a1,50e2c7f,8c3a2643,8185a88e,2b4a343d,bbc10da,723d4cb8,29014cd6,3211a82a,63627b01,1b01e87e)\n,S(2ca6b7e,b53516c7,2e216263,213c0d60,fbb02f,dd227f6e,4ad29069,f6da9213,81d5fd1f,5264af85,53a8227b,7500d82b,84ca1fb5,87ea30bd,ab30fae3,67e3d7b3)\n,S(df4bd790,ac3a0db,1663a8fd,aec1cdb5,b30c7a67,99ac2ed0,16f1c474,5bea92a1,db80f378,f33f920a,d0f4fad9,595b0655,44ffc36c,ebc3f294,3db13b83,cf609bbe)\n,S(792648ad,8c053cb2,102dde19,789d3782,79e0e0ca,c500f40,d46bce68,97af2839,3c2d9b55,afa4ba1e,1ce3d142,5e17ca6f,191b4013,7b7d8162,8de35e8,801f72f4)\n,S(dc6fe845,50fc1136,1f648fab,deb9b3f8,e7fee837,ea545228,b2fbd432,e53a8aab,2a4bf746,19fc5408,b4bc6421,f4a570aa,172ef263,c890c853,d7b06aa0,65960dff)\n,S(10d4786e,9151f2de,89f368f8,9502b7fa,74b7b9e5,7a1485ab,f82fccb4,9c2deca8,15da7f51,bc84f421,2ce948cc,28663e57,8b4b851a,f6533f2a,b548adc8,147d2243)\n,S(67c7c0ae,e82dfd5a,194dc416,41388947,29ddce96,5b7d50f3,ca922512,6e730bf7,a8bf40e5,666ba93f,1f723414,24d8a7a1,6a2aed83,7f022fdf,557e6082,e3e515fe)\n,S(602c3df0,8a2efee8,329f391c,a9f7b2f8,31ab6d32,bc4623c8,92272934,1f78a4f0,ac17903b,3808ee52,c0208342,696f5250,5789206d,515421ee,8b1ab28f,5b788eb6)\n,S(c3441893,e78910c8,3cf917fa,44b608b6,671ea508,37a7d2e0,4e658c6e,2a91d9ef,b5388381,17c264a4,a0876c3b,7c261bea,229c2d0,a7399c05,114f520b,a7185dcd)\n,S(49dc68b4,412dc3c6,c4b265c1,6cde755d,bcd49f0f,394d552b,76f67ff5,33c7fddf,f1490a38,cdbb6c88,d270eead,7de6358,132cff29,ddb6aea0,1baf6353,4c0cdae9)\n,S(89080197,4a95beff,da864c28,36997c7d,3a4c0fc0,4ad59eb1,5ba4b124,702d0f04,86e165a3,b2e7eb55,9a7996ad,63265609,aa6e3385,30b51d22,4ae4f16c,d30be3c0)\n,S(c9671a3d,f749d635,5684de03,1764cf19,1087bd06,965d23bc,4ea0555d,29ee0804,33cc0d4b,b02a1910,c158db0,ad2bcd66,c9585f9b,456321d7,61752148,e6224d85)\n,S(f3c1a76e,1d4ce622,dc667a4f,dc0f4ede,7eb7111a,1539ce5a,bca71d2,fd48a26c,269ebdcc,e1d42428,4e0dd49a,73968676,58857998,7a062320,6251ccd0,ac9f9e2)\n,S(12002fa6,68924900,8a540429,50ba2901,5870a70f,7fe95ae3,dba4b07f,aa6fa460,51543d34,34568008,74e8b1f6,6ec72fd8,e2936b6a,6022401c,d13d50bf,931996ca)\n,S(a59df11d,d3fcf1d3,264028b3,6e26dcf5,62083e44,f91f3d27,f23acdcd,f1392a9a,4dbda718,48afff3f,faffaab0,5c5376e5,5fd15ced,68b03ac4,4785ab2,201cbe70)\n,S(89f738a9,802d7deb,5cf2895f,60916fa3,d6d74bf9,e740d2f3,13ba393a,b40cacaf,293aa5b5,b03557a,e7288066,5ade09cd,ae6abc71,8e7d445b,cbf85a44,a035b73e)\n,S(d0414978,6252c5fb,b4bfdae7,56092769,dfcdc2f2,ae38a5fd,92ba9df7,f91a9ee,53ffb526,a24df2b3,d6e8faf5,ee6d79dd,7f427d8c,14d2d5b5,880f1863,e7e95099)\n,S(4a638f24,ef3528c7,a4e42cdf,3f5bb946,81e6435,ba2c99d3,625dc282,b941d341,39d97ef2,949f1338,bc016ec7,89585780,832043ff,33777357,9ecefac0,ae40620b)\n,S(70a25f6,34d32af1,47c4dd06,5d52f78c,eb5e53fd,64bb151e,18e8629d,f4f8088,1b6bf3d8,15a0f919,68dfd6a7,7ab7417,d4aed9c0,a52b93b9,9b4e4e41,d1e558ce)\n,S(59ea9490,24765add,f99fd908,11c65ac1,d0f9ee8f,27e459b9,b5851765,8e96ab82,b38bc716,896e0337,e4a1b361,59e2b5b4,e1680ef5,beb4b47e,c5934b4c,8d6675b3)\n,S(874a6ecc,6260617f,c6d4f334,40c8e080,3d993594,ccc2d47f,be2869af,9881f2aa,f509e39,6663327f,7d768a67,aa0d2ef8,353b613c,bb60fc38,bd2715cf,349c02e)\n,S(dbf3567a,1e634ab1,63a860ce,244f3046,c7f486f1,b12928d3,1c44624a,48bb5df0,bcdfcc85,38e4702f,99f9d55,eaa55216,730405a5,66fbdf07,4c62b310,6baf7ce3)\n,S(a534bcb1,96450965,5593155d,2da069a8,4800e4e,eca0b504,62d844eb,d179ac50,f86b38e2,d558be4a,b0a216a2,906099dd,f3cc16b7,30e784e8,745f39cd,829ff3de)\n,S(e11bb840,b79063c,4e090771,29d2bce7,8f291f10,120b57ad,63594780,fd1f1905,7fcac0ad,e0cdc573,67c9d74,1c6c9928,15b7c3fd,3a19b266,e0e5a94a,9a9ef9cd)\n,S(d79bf0b6,552c5b6e,6e9192b9,765e687f,ea226d86,c6f83f44,b427ea9f,14b404f8,54e7a54d,583e2cac,129f17d6,835597aa,934b4732,6ffecbfe,deb503a9,eb9660ad)\n,S(103396a6,57856b61,5507969d,958de14c,251bbbd4,9851a5e9,ea64e0ae,2f87817a,9d66ba9f,cf3e0c2a,655cabd3,91774015,e209d771,334c461e,d27b683f,f83b477b)\n,S(9b49e25d,ae607f4f,fd876837,5ffc0fb7,142f9cb1,f0fde836,537f320a,9636723a,3472462f,f9fa5ab3,1fd1279e,7953dbc9,85623021,e714c951,bf00f632,e9f72ab9)\n,S(a017d4f8,8e757556,b7ee81b9,d4c9b260,ba2f7f8e,5e1b69a5,fff94abf,723cc438,5f2819cf,53fcc35f,c9c15d2f,13dd51e5,2c8dd134,f012aed3,4b4383f4,8b00cd95)\n,S(aff1db2d,3fa6dc00,51a8723a,7127d57f,69ed0b49,ccbca35e,25f72bd,19076211,7cccb7c9,4adc2075,9c7f8870,fbeb1a1e,9f95d644,af0411be,a6b12d3,aa6f00d7)\n,S(21ccbdab,f6902a86,d368d445,dfba0f31,4f80de6c,c7f05f7e,9fd1818d,45a174de,eda0b8b8,7f40e9f1,bdd5ded,e65bd72b,6cbe049c,bb1575c9,6b779818,a67251d4)\n,S(c3e58ebe,36b0e5b7,2e15c47e,cca6848f,5312369d,d270dd18,93b589b0,56ff7082,212df92d,d724e3aa,c42e293e,b1a2de5,3c340712,7ebba791,b901ff87,9fce94b0)\n,S(f19961ea,da1d77df,2fb9d976,7d7c664e,c0400066,2ecd7244,12b72dc3,c5de133,74f321a9,1287943a,8ed14d02,96b05ada,1a24fb52,a09d467e,8e8175ef,8f04a2c9)\n,S(3aecbe48,2aaf6af,35e63dda,fc919adc,f974e89e,765c4437,69ef535e,cdc05e01,92b854b9,30e5e4a8,85397592,fde89d3a,601c733f,d88d230a,a1168e36,ee367273)\n,S(55fdd639,b87de7c3,9acb95ed,33222935,bd4217c0,fee1c924,f1060f54,fd22055d,81f4ef46,16e51585,cb443bce,f16ad8e2,36d6ed18,87ddfa60,ddba2089,f4b83c4d)\n,S(b86a6272,ceed47d2,4ef4cc67,bef0b117,c0761b4c,29548c8a,367d8ae7,bf90744,1c0de18c,d5f3331c,5439020c,5964404,be582f88,3feec4c3,112396ce,b657c4fb)\n,S(d141a7ae,9d92913a,26deec5d,d2acb7a2,115da997,63be5a76,c5a0a415,8b5b8170,de784bc0,9308c82b,ce3be9c8,9abe41a,4ed9b9dd,cf817aab,3785e344,dfdc2ecb)\n,S(af340559,6902ad5b,e3fe3464,3cbcea5e,7a478a32,b1bde828,ec966837,192344e4,3f65050d,13e7b969,35b013c4,9df385d9,833d419f,aac0f754,5c395ca3,75ae8965)\n,S(b70dce7f,870d3d12,472d3c5,481a1288,cccfdb2d,12637a9d,973f4e12,b026cefd,4b4f733d,e5322132,80a36e4,ba57894d,a563f4ac,b1a55a9c,83c8dbc8,96a7fdf5)\n,S(14fa3dee,44dafb00,d2e71c91,5d217cd7,a9c2b50a,edcd0025,f7aad2d5,b6c62ce4,67c3a65a,65bd4292,d271fe13,9a8c9d84,343bdf68,cc16e50,11676580,6bc30d8f)\n,S(baaa6a53,26a7fc36,e519d9a2,48dd3aca,f6f0628d,a6406021,caf0d0c,56d9bb3d,4fe9c638,c1078c39,a0fc39cb,e9a81bc3,4b15840b,631ecbd3,8ca4a2bc,10d1f3a)\n,S(ffe2afcb,5e53bc7c,9ee07740,c8094a3a,32c8e627,4dec7eb8,cf2673a2,dba11725,68d7092e,2b8b56da,1653dfd6,42de49c1,799d3ad5,864e052c,8829815d,b2ad952a)\n,S(a25d7c5e,83a0659c,5ead610e,b581d325,adfdd3b8,af03736e,4039ee1f,40612431,679ecfcb,b1da355f,d73d02e8,b79fc949,bdc9fb5b,5a4e28c,5e68c244,7599c806)\n,S(1c5d082b,3121c4b0,2e0e2244,88e53b8d,ac5500b,bd396f0,7fc218dc,7311b299,a2a435af,4838d028,4d459216,f3955427,59f1f51e,9a15f28e,d83987dd,9c09e5b1)\n,S(d8d21200,2cf2ceae,6c9a90db,89f7d0e0,42a2e97c,458b9024,437e28ed,a775ca26,b31b6a02,4b01de6b,6159ee51,3c118921,f61a536d,c1442525,cc613290,364b9df2)\n,S(b5265664,54579771,947bee20,f8e7bc48,1e15d07,2adcecbc,3aae7b91,a4d0f3b3,170ad05a,da7f67ee,f7c611ba,3c55c835,f054bcf2,445e5c1a,399c7cd7,640ba8be)\n,S(1d0d2a24,8982635,18a28203,b78cb089,acd5c296,98b86b7b,48fd4db6,3c80812b,71e2e1a2,7bff3bf,9e85e145,7f446048,7643f154,1cbe829e,f600d861,dbb752e0)\n,S(cbbd4ee6,33aec586,ec7ba712,c3bbffaf,a0e6497b,8618a476,b64c660b,340046da,d792753f,c73090ac,177ec5e3,40aada73,3b31dcf3,a1f46952,625dab85,7e9b9795)\n,S(73cfd295,99b6b80f,8757a873,ce9166ea,b1960f77,fa8f1d55,ddcdc90,9420a751,17832aab,c1083af5,683f8cf7,23c6376c,c22d190,241e1e37,6b1ef2dd,7333c873)\n,S(20572bf8,abe50ea,37a064f,738dd18f,531b9404,e7e4d693,2c9fc34f,ef6dede3,41c79375,11c8911f,3146bb2f,63750887,c663d2d6,f3fbbd53,30af73c6,9d332191)\n,S(ac208805,2f1518d0,3724ef5d,cb149f36,1ed713a2,94392f92,96173857,94794f70,1820bb1a,e843255,9025f3ac,977d9f59,4e812cd7,e27c390b,b2fe905,ae2b7017)\n,S(33467f95,60aae872,b5c9afba,7f29cd32,a213f197,47745d8d,945d06e8,295afacc,44040bd8,138d9bb2,76181e21,79f4bf98,4b0c3965,a1a47d34,be8f47ff,52e15af2)\n,S(1a77910,75bd3497,cbaff6a5,d5e8bd6f,439f5bb7,ca3eeb98,68033ef1,cff83f03,d8af802b,daeebe88,f823c43d,447f1906,63ede3d4,c4b9dbd5,caf82a3d,b4f1cecd)\n,S(dfacafe8,cc15f85c,f829d913,9a9aedc8,6a98e010,5308572f,94c183b5,533f5bb2,c076b6d,c708d2c9,895e22f3,2fe42f4,33ad38c2,a0c55aaa,5c551fac,fe601916)\n,S(3cd975ea,9eb5fc56,14955bb2,db0ca413,b83116e3,a09454dc,7fe973c5,7ee33ca9,261e5544,2fd503f7,7c1c7a49,de96fb50,aeac56d,30cf3ae4,8b2e1cb,1b9fcb6a)\n,S(168ac250,d23cbce6,23eeda,1389e261,c56bc718,4234bebe,6b108bf9,bf6df45d,add3ffb7,b0a9a860,21ca51e2,f3d2e2d,19206bad,78d9e661,2895068a,c880fcb2)\n,S(47bae439,31966a6,984241b2,2afc8b86,94db88c2,abdb1737,728e1af0,e3803968,a7cb7d64,a07cd13d,2c8dc7a7,8a7a144f,8edf915,5cec20af,102260b2,d8d355a4)\n,S(76e73a26,730b1444,8ecf60e1,3489de8b,93355af6,8943669f,20da17f1,4f04d517,41f75520,3d5d528b,2e81bab1,9ce8031b,bf9c73ce,7927645d,178ad762,669b99fb)\n,S(f6f08712,d85f9219,bb475122,1ada6a75,1a8d4758,f5dd72f,f5231d56,e634c19f,d72cfc42,379ee25,eb0fb134,338109a3,7752fdd8,1ad102b5,f365a276,1d133f10)\n,S(1acac95c,9b0ed53b,e6c37d03,7d47a796,2a371caf,cede380e,799d0110,b0634f7f,658c6b74,44846952,93a5215c,63695a5b,fc80f818,633e0278,f6a1193c,6d441bc1)\n,S(5759a8bd,ab76d449,13258631,68773369,5b76d2da,7b1e4004,1bf99198,bb25f218,15c1dc97,8ecff6f7,cfd6cbb5,44ab8666,83127b41,951c247a,f44855,4afde3cd)\n,S(cae1e14e,c28ddbfa,379a97d0,5f3ae379,3771750f,5a9ec743,2039f440,8fa7e2f5,eef09268,6b9f60da,8e64ae64,8f13d01,8f7b9ef6,aa849f9f,72df2f9d,f80fbf60)\n,S(9aaa132b,947da7e4,9c1de2ea,ce06e3f9,ccdc37d7,6d2081a,be5f3a37,9b0756a0,e9bee628,d6a64476,af601737,68829c11,e8646e8c,beba7174,806d800f,56f6676)\n,S(f38b62b2,4d609d01,70cbe85a,cedde44b,7a766a30,d8b7db6,8d935735,c4d0d204,8b61a5f7,e3caa2f9,17ef9ce2,c5eb2499,667558f,7c4e4e84,2644dfdf,a57666c6)\n,S(25c121fc,74c57f34,29a143,8ff3c47a,f06b5de,74c4dcef,4a093b87,3a2ab659,69254121,eadbd76f,289cbf3c,21cc96fc,436ea33,9ccbc8e6,fed92b2d,331246da)\n,S(95666156,c40929aa,8a7ca656,c42c64d0,e24c3789,ad3781f7,9e2a0ea,c7ab9c1f,116f5750,7e07b846,92106d6b,6976741a,59bf7cf7,909733e8,e1fb54f3,fd77e783)\n,S(cdf1c010,7c48b65b,c001df94,c6e84d12,d8885af5,820d65a5,4e7ffea1,ef4c0081,8f3d1be4,206bd313,e1c498e1,5e7a9995,64312ea5,aa823196,9c566349,9c3a04b8)\n,S(955269f2,be0d5e20,5382b2c1,959103fd,fa2c2386,9bbdd33e,a09487fc,294dd1ee,6306a092,4ce63798,41b2d773,8cf97ca5,e259f81a,a67b1e0d,42903f1,beaa869e)\n,S(78013976,449ddc23,4d32a793,5ea525d5,9afa3617,47e0a8f9,c8141d9c,2b231e14,8d28142c,bb88abfa,1a72d583,4e509d69,3cdee0d3,bdff4788,83618ce7,a1ace69a)\n,S(e6d67a8d,fe513147,2c0fe227,bb08a8f2,25e2606e,23672969,ad3acd65,155f972e,46c8695a,5b9d931b,adb568c9,d3f9a8a9,dd501508,fed00c99,5159f518,bed035ae)\n,S(1779ea78,eed6d974,563cac2b,b3e72693,409b7029,789e0188,d061a182,3f18e962,82590ffa,6b9e0e13,d2e72bef,96d555df,9f7d2b81,2423a947,e0dae41f,91cc0722)\n,S(28ec208a,6e929f8e,a815fc17,7b927086,7d482547,53ba5c3d,3b56fa91,acbb67d8,b4453dd2,eb964348,94cc1cfa,25616a2e,2f0803e2,8796206c,dd31ccd2,dc69aff6)\n,S(c218c6d8,3124c9d1,c988981f,d4614af7,ff85a572,dd89e4ef,6209e80f,e7656de6,7259c421,45ef6e9b,d4f451e6,e2dd226c,2e750650,8ff7834a,965cca4b,cdbfede8)\n,S(4c9891e7,5559d993,536fec73,a433006f,4f0e4e42,f427300f,7a3825df,85b1cd9a,7463ce1b,9f9af66d,7a5d2d43,ab0f09ed,186eb132,92c75431,ccee645,4280aa2a)\n,S(a89fcff0,694ed82d,537399eb,b59a054f,f43eb74,f8e1fc95,be0c03c5,9889c931,3ef3c627,e3011b2f,38d596d0,8ded759f,fe30ffc,9db95356,4e01c8a0,2949ea1e)\n,S(a8b3ef89,561da88d,ca9890d,5e4be652,8a4b8fe1,691d1522,54bcca43,1e7ed801,c86fc397,52254f61,88ee5128,4bd54347,8abe7390,c784b51b,6d41c947,5d58bada)\n,S(6a2fd5db,da9093c,2f7c7ed8,9eeeec7e,efd7e759,eacc2946,5d1f3a15,baef5b42,8b71ac63,3886ef25,74e212a0,499c34e2,d2c7c1ee,b70fe7f4,38e08914,48395e4a)\n,S(d33dada5,30626dc9,1d23d16a,620dbeb4,7551ca44,dd6c8b18,fbf136b3,1ae4e097,4161f6a7,8273ead4,443c93f8,2562a29,1dea1adc,d84ba0d3,75a997d0,f07d4ed0)\n,S(53ef9ef5,731d9473,93e70829,bcac3396,3b7a597a,1f3c861d,401af7f7,fb1559d0,8654f8c3,63e53905,a4d1e2c4,378fc3b5,fd5ffe3d,e7fd3adb,399d883b,3d1b9e18)\n,S(5f13c5af,6979832,da1bd43c,4b7df970,1ad837cd,e59d8f15,381858d6,6263b0a1,3b0ec16a,1024c902,666dca02,4649c110,2a17205b,e4ac20df,26ce5b92,8baf90c1)\n,S(674b7de7,f65337a8,c66dbf23,2f86d6a4,feedabbb,b71e83dc,fd854926,86f14f86,e3961790,a662c6b3,70460e16,18ce3b6f,42bb6142,78fe9e2e,6bb1179,181c2aae)\n,S(291eed8b,47c3e2f6,b3c2967f,76743708,5c460c5d,d5d6a75c,489dcf0b,4d98b8eb,e19a9d2a,72fa37e1,e10ec853,9c772565,c53e36e9,160651d,c2a8e364,db408ef8)\n,S(e737a407,1bf4fbe4,ee5d3d74,7df3cb54,cca38f48,f977919,907deccc,7090ee3a,ac66d422,79441d73,2809d695,68f700a0,3fc5be05,8241da39,9be3a63f,8da16069)\n,S(67fb1676,7c3231f3,428b39e7,bdd082d7,1194a51,ae99a7a3,6c113e87,d338712f,38c2ae1f,afb521f2,279aae5b,6ba5c636,1dd34c04,a7726555,acb9265d,31c996f8)\n,S(9b3b4788,71bc413c,5e9d2b9c,61e0cda7,f2fb908b,805f3370,45639,5e616230,7028b68e,af818a13,d32f116a,aeb0bf45,215d3d62,6e6ccb1e,a901544,ef1d696e)\n,S(63193415,59bb1e39,2f92dad6,e5f8576f,7f49d4d1,439f4f61,a6f2be0a,75bd99e6,259d5f21,6c780a8a,5bba3e66,2242f26f,1adef829,a535dd97,11f8e786,f0a57932)\n,S(4163082b,7720a8eb,e881b398,dae059ff,3a65fba7,f8b93afb,6e3dae6,6a969c79,3939395,d8e90807,e77e87a7,4c89f861,c689de81,a37caf6c,32788310,7b938ffc)\n,S(b3a6baad,15c01677,ad6bed54,ea5ee415,4d0bcb7e,3ce59f17,7ff26,ef23b82b,711681f2,1e56c0c5,f2c2b011,dcf75716,300e305c,110f4071,51d11890,25bc4760)\n,S(9011d111,fcebd882,b9a228da,fdee1297,824c4007,7d5ad9bd,59e603b,43be8f52,d530102e,aac87930,eff135f2,e55b5310,7c03ea00,d24f1201,6653e3e5,5d778246)\n,S(d50adaf1,d68a746,e1e7b148,7660e90c,f268450b,df460d52,e1f761ab,bf7018df,4ed454c4,5eb30cd6,e6f1c4d8,7df2bea,e15ebc07,e4b4e50a,e4dea733,93abcf8c)\n,S(cf886295,d1eca9f3,4c95acfa,b86a5061,82e30324,ba5b495c,70318cf7,9e910d70,59bb7068,3147c26e,45c76e7b,e018e467,1f47f488,2c044484,62a5053,8023fd40)\n,S(38723d58,ffc69ea0,9a8f2655,dc225da3,78b9224a,f8d81e7a,bf8f29ee,292ddd24,c41d67bb,e699e504,3198adb8,ff11a5e0,4033b66,98d3ec18,256bab11,93db5535)\n,S(5b41d5f8,1e2443db,d13521e6,e7b7fdf2,4a226cce,f369279,22b353ef,107f759d,8ad730a5,bfb9f01f,853434b,24866a49,912fc756,e086e781,a07ff2e7,98ef38d3)\n,S(4f3c24c7,7dc7e41,843e9018,400d3bc7,5d1dc958,2895c11d,3855b80f,4709373d,a485adae,c547a5a4,e0695913,c4c2fb5d,ea16a3c,5211c162,4819d704,5b0d8d6b)\n,S(f603e0c2,8b40c8b0,a6a0378b,c4289059,5a4cf4c9,2b74199a,4e4e231f,a6b458a6,a73aa12d,76572041,f01c33ea,ca599a30,9ba0b838,f1d67fd,67a9a5d5,c3ffe258)\n,S(84ef0a98,229c7af,9404cc25,60f4fe1b,4c8e66d9,1aa96118,53fc4f25,eac78a61,653df937,3640b28b,2c2c4061,1d79c4c4,a2d577af,b572f5f9,e50cf3fd,2b2dbcd5)\n,S(e675d998,6b3bcd4a,d098ec95,c386be9b,4e96e448,ce6c9371,15c5dedf,d97941b6,4319799e,c4103d65,18590091,e333cd58,9901b020,a62565b7,f84219bf,e31003fb)\n,S(10837b33,3603f33b,e528f391,b5b672c8,93fbd813,99c5dfea,f6126e6c,2a2633bd,cdee9534,2456a261,8a293b49,d91ed2ae,f620addb,ed83fc66,d169da3a,a6d0e2f6)\n,S(4cb1ddb6,6ad3c1b,68c6b0ea,408ba1d7,dafdbe54,89c22d47,7a62dcc7,77a8e013,6c005484,29e789f7,5c34d8cd,a473270d,75eb8f1c,3db13856,87cda96e,5cd4b370)\n,S(db72d671,ff3e0102,b1c52481,b66ea142,8f7fcd43,15e2792,eae234a9,291926e6,71c55f71,68a088f9,980bdb6b,79b052d7,4edd0b19,7ab7359d,9a2f9ce9,f1c5a5d9)\n,S(99f92125,162e18ce,7493e6e3,91cd06fd,681371b3,2e147ab0,24ae3799,15f586d3,9286b3de,12ee578a,12ded341,75bdb712,d939b7e5,555e86c1,82f1f283,3c1b1d40)\n,S(a2b8b63c,8984a666,2b09c18d,b2d7f263,796660f4,3bd78eaf,af7c63b,986c92d9,2003787b,2af02879,642b0a2c,f716f4d5,85dac86f,e58c7d41,d1959763,310a67e1)\n,S(9292ef40,21bbe6dd,8c26a862,c9b7da54,4292e479,a9e89264,618e3a47,9773b446,d1a51e4,65bdfdd0,dbf74fd3,d449f6bb,ea862eed,ad369c52,34a695f1,d229ead2)\n,S(8d5a920,547d838f,90159068,ceeab220,cc6aa126,d423edd0,2e136cc0,1cea5d4,c3334a69,f7694e9,43ccb182,2caf2abf,f4caa83b,a006af52,bc010bab,8710b596)\n,S(7b62f4a7,7b79c09,76dd2f74,4ec08d9d,21511fa0,7891ff5c,52b8dfa4,ae3430bc,70ab2073,cb3a7cea,350e6aed,dd0c9a6c,ff8e02eb,69bd14a8,a09e9b8e,ccb19a0a)\n,S(e18a9c02,5829b47,cdd34c11,f97f2edb,a7fb9b9d,fa4777a6,dbdc3cd6,85245b12,7386fa51,881fe49a,adbd5327,8d6cd0c5,1063dab0,aa830b7d,88c7a4d7,9998e743)\n,S(ab9b68ad,61335dea,767c763e,3294d414,74a6d4ce,e4ab9a78,7fbb6749,7307d0f,aab48fbf,53f365ad,bf94f823,ea973a25,f6ddd341,397bd81f,8e825f60,c916852b)\n,S(3412531e,8423364d,8d8bac05,bb78973d,7b8d375a,9e52d81e,bed48027,2abdedeb,1b9f5eae,59ea3385,9de752f5,db973a86,4c735e69,fa8882ec,e1ca8350,77d77335)\n,S(6a6425bb,af9f65d0,1a401330,46053b50,7ac8d45a,77b30de3,69eed52b,956799b0,7cbdae81,93368c60,5671ae9,faead4ca,2887bd8,9a06062b,dd6707fe,f849f484)\n,S(87860648,af9ffbad,50871c2f,29bce0b3,e9693835,8a067201,5c1156a6,7107a4cf,8660c0d8,f1aea58a,c613f6f3,5b27baf5,53835493,fbc0e203,f024ee36,27bbfa53)\n,S(35733610,71c55057,5392c685,3cadd8a3,6618443,d80b3625,53a2f197,d3c52539,42935628,adab5bd4,e0aad0dd,a7d76627,58524b2f,34ded1cc,d3e44249,6d213630)\n,S(82d21949,2fd48d51,65bea027,6ac15cf5,d27bd736,45e03271,24f0f689,8a2f4a25,f13d9063,fed02a94,1b4e5c67,f42d82b5,33f18ff9,ca4622f6,79c6aabc,ea454c21)\n,S(ba1a1c83,6dabf825,e517ff65,549e1d5e,729944a1,d7b17cea,aa4466ac,39ec6eba,f01dd751,3557249,d2fb224b,40ea19e0,57b4052e,adc46787,af587ad1,458bb4f0)\n,S(5cfeac36,6bbe58d8,45a36cd7,de6601c8,56943a07,522364b2,23a1718e,6df8de8a,6651d3d5,a344af69,25fe039,c9e29e77,95544b96,66752f4f,c9a3bb57,c5586c32)\n,S(e5e314fa,2b2bb630,6fc235ba,cfd356ae,bbf88bf7,eb039629,165d8651,c0c7d5ff,c727787b,a63cddb8,feef96b0,2f6c8d0c,9722fb4c,6274e034,32d9016a,eb4d8cb6)\n,S(f84d8db4,b745cfc0,bad4844c,b5a28d7c,80ed5fe,6baefda4,1d9cff9c,158c7ec1,cbd7bc36,a8313a27,feb8121f,a8847bd7,937fa53a,d56ea066,fa600411,d87dcad8)\n,S(8806a2b9,d72156ee,4948e86d,43f4b3ac,cb24529,e1b2b2f3,5ff94812,e9534513,aff42464,773f6535,b4dc5eb7,76a3f7b0,7bc2fdce,1413587f,c4055cc5,afca3129)\n,S(e2ddb5ef,a1105437,b6107305,bc715e55,ec0266aa,a0ba1bcb,e12ab801,45af7eb2,43e4d056,804f229d,da5a1efa,8f429189,6c9edf94,fba505f3,1f22b511,8b698ba9)\n,S(636f32ff,ea843368,c0cb708f,43841ef3,20151e39,35683ebd,bb1f476e,af2f8c5d,7fd53321,517616c,c7d24b51,851bede6,b03c50d9,82269773,dd51e36e,4898365d)\n,S(bbcdd1f,f5b47391,d728a06d,b4783d5,b0e279cc,107488de,44446e36,9d11d143,6ac7dfc6,47d25b37,7281abf9,ead782a,b5f815d7,b2c9f6a8,46a8a6eb,9253014e)\n,S(af0ed949,22336a4,337e9c01,53357e02,3d7a2728,3c649712,3e117944,39ed3577,d8b9c03,958dfa89,ec2105b1,d9542d68,568797e3,7df16cc3,861627f,298f3359)\n,S(11ba75ae,db365552,b0d3f938,f03a115a,544a0818,b2f54f50,e4873249,6f80ce13,a6bce69c,f9838317,70f70370,7073e87c,61b65c0d,bfd34dea,f0c549f9,c58e674f)\n,S(e7560fb5,79e5ca35,f45881db,b05383f4,c5536ea8,a5438fc4,ec198ba8,7543d3ad,ff48d1a0,bcf5e510,9ed50a0d,ed8e5b83,44da25e1,a1a3d421,606d19f7,e28fe79d)\n,S(ce7e289c,61f4927b,bf933eb5,193fd2a3,a0686435,80c8f235,1e24c33c,e418cf10,17246f2e,e87f4ce,f1c8596a,ecdb1f95,1407ee7f,dd839c9,98102344,2f4dcbcf)\n,S(b765b875,32ba4db1,211c612f,b833ba18,156fa0dd,875aa61,df1ba9b4,7d1c405d,862d28f6,d85a8ad3,bebfbc82,437404f5,2e0abafc,64369b51,b75364cd,c827171)\n,S(400560bf,d2863ea,2bd9e246,4eafab2c,2798cb95,b976c022,bb9d2153,e5978a0,92ca9a1d,938e53d5,d10f1f83,54abe43c,e8f8c2c9,d4e851cc,a363ed59,71e2681)\n,S(7859190b,8e619c98,76af21e9,64f323e5,221cd4c8,83dd9fdd,e56f691e,e3db91a2,e1874376,755165c3,72abd73e,415f2663,bd94cf28,2009492a,e5034da8,6f6bf949)\n,S(87d90b40,bb472b84,f9d24caf,ba7a6437,b50febd9,5c643aaf,e235750b,12527ef6,e6a0f719,25697425,23517ea6,183faa64,dee1ef63,183ab1e8,3a603b98,20452c4e)\n,S(dbae1ee5,a1b6affd,f9b41ff6,a1f2790b,2c492ce7,53865690,ce5281e,a7f08177,f6a2be90,a2c3cf,8e14bf87,4cc52648,b60f9a26,2930f6e8,9fadad4f,d919db6a)\n,S(943a79cd,88260475,10d90c99,4d8d784b,32c03d1f,f2478102,96125f7b,28576216,48d4477b,f97c4cbb,4a96ff99,e427d4ac,cda9a367,2ae66930,88d8cc57,3bb3e2d7)\n,S(699911a3,81ff3c7e,71b3a458,14133f3c,ec644378,e3244d66,6d083c55,7b6c040d,3eec684,3190d6f3,85b07116,b3b1ba15,4ecacec0,63e02933,9b83afad,5598b22a)\n,S(f002302d,9ca256e5,cc38ad82,e529b461,efb69f28,52513917,fb8d63df,45e602ba,78455ea9,708b750a,97dc74ec,8939c880,d76010d6,78e0c112,3616483b,fb4e788f)\n,S(5f701ce9,65a20314,a65e2c0e,1cedded9,ddfc9d01,41a1e095,e91b9915,cd2aacb1,57e770f2,d04e33ff,c9d7807a,4c3d1edb,3f9ed2,c19771d6,7e85e618,463e5663)\n,S(454c122a,ff85c42e,49d6f033,87744462,8acfed31,90c41255,e8e34928,83563fcb,9d9d6435,a2c4d146,d92f34cc,40b32a7e,55584885,82143a,52039fd7,129fa6f6)\n,S(d9abd19e,81f392d8,8382918d,6ab3f89d,de793abe,2eba3aa7,b58b0ca3,1e614e51,8c1a0f80,8b8d9e56,aed21554,95f8902e,a390505e,15cafbc4,2b71cf05,575abeec)\n,S(20779414,b5ed6524,b3613a8c,d0b6e9c7,ff3b14b7,7264cb8d,7b266ef6,cbb224b7,c1437dd7,71f46cc4,3cfa52a1,28c70367,d6682553,28942150,c4068da4,8c218d66)\n,S(141739f8,503f2225,feb40431,21f0a5ee,844a7707,62e37d1b,3e43fad0,81c631b5,a0a13de0,10566ee3,1af8c6e6,38411c1c,a3df6c63,c8ed67da,8ef7bd19,5fd6e73f)\n,S(de8d06ae,dd58b148,91184145,fcd9bc64,634725fa,e4a77d35,70b21c8b,77890b60,a046f351,eccab99,1d3d1c1c,642387fb,fb9c3f92,75bbb93,46688555,f7aa9460)\n,S(312c7ad1,53f7280a,9bb86cab,ac573944,d271bcfe,bd59291,c6f05fe4,ec003a81,3c6428db,5eea01c6,9fa2556b,1f20c1e7,4e65629b,e73e6429,81b971ad,b6563866)\n,S(2eafa04b,d276e33,75b8d063,b206785c,ed69f763,7a5a8b99,ef7d3de,bbcaf35,f06464db,56ccf55a,1f41efe4,d1cedf81,a642da24,3cbe68eb,6ddf7ace,f67dac6d)\n,S(5873091e,dcc8a95c,a0a47570,3d88e54e,1381c2d7,a418f615,eea97470,2c2c6fbb,5a91598,b8e47d2b,2fee6cdd,c33aa309,9bec74dd,21688542,9b76543a,c233ccdd)\n,S(e713bd84,ca505ad3,aa022577,c0cac85b,466874a5,b02f4ab9,e8d14bba,c131fcb,706dab4a,fe49e6cf,d290913d,358d1dcf,62e8b4d5,b9bd46a,322ee4a6,5a660849)\n,S(aacaa633,6fe86d41,b05feec1,cf4866d,340fd268,f869f912,c2373e10,bcd95340,d933cc5e,c01024e4,77d1e80e,c533f293,e4fd0dcf,7d1156b8,7ebd9d81,b9489c57)\n,S(cbe0ce9c,77649031,25590e03,cd9643b5,dc45ecc,604d51fa,d5bcb8a,196b65ee,d2287fed,c331d56f,e585bf1b,793fd957,ce425492,df41d8b3,4faf84de,c3bf4d22)\n,S(f9990413,deca9f9a,4ea6bb8,fd9b8732,57d15ec3,70e98187,f4170103,dd416dfd,b0593cb5,dbce573c,f0a75f2b,c4756781,963e1a2,e988e0cb,23efbe26,c215ace7)\n,S(2ee21d79,bf3e82a6,2bcaef34,85276c5,3b51bfd8,becbc9f9,6ad316f3,a74bab97,fe3cfa79,b208de80,f659cb81,bed12184,ea2c2524,dc0bea05,64acefab,1acd8fb1)\n,S(af5c91d3,44fccd3e,70345a2b,ccefc0d2,19287be5,aca40ebe,e61de522,56f25faf,bb58da83,bebb5346,9b345695,fc23853c,bc0221b8,5d75ced1,da107fc5,c106875c)\n,S(2cf50e13,477d628d,117e0bb6,1d3ff9e6,1108fe94,bf82a6f2,4138a743,6077e0af,339c0a53,77a6465b,29377e1b,dc344464,875687e2,7d1f392d,96a275a,e259793)\n,S(c51a6610,1522f63b,84b98ec9,31984865,eb3b29ce,fe115b28,a87f89c,67bc441a,240b9717,6af4beb4,b0502d7b,2caf8c7f,47a9362a,9f9610c5,826762ea,a2a2be5a)\n,S(27478eb7,b14d84b0,80426792,b0e2e510,8a4804e3,a15e80b9,c430d7df,c09d05ce,eaa0a072,86fac65f,3da47bfb,4010fed0,fe8a9e17,ae42ece9,233c2078,2b36422d)\n,S(531ca72,e21caa6a,43f0c9bd,d0bbca5a,b12dfb9f,70f045b2,f0865077,cdde192b,c4ed88b1,a0397589,3cb14ed0,897d6bd,783dc647,ba59772,16c308eb,630367e8)\n,S(295775cd,950d0702,602278a1,56c1d05e,4343474,a4b3ae87,63f4a686,7688e42a,907fa8f,1269cb64,41591004,f6e62b14,4d6c54b5,f6ed424d,6b0a8a75,26935b49)\n,S(e88425d8,bf6e89a0,f9c9f525,97eedd4,3c331058,10936c23,4da69d21,9a86f82,56d53ae5,e7a354d0,d65cf742,d603da2b,199e147,3d42bf3d,639f83a1,cf91cb65)\n,S(4d20a032,c44453f7,b374a82f,f088d816,c1fa9338,57dae8c7,b87295,98869a4e,a7ad5993,af43cd42,1620e87f,fa0b3305,e7da39ef,704319f,ae5faf55,5e3fb43c)\n,S(b98e9728,e9288607,a7ed6df9,c68749e3,9d7efa1c,4f964428,5e9bf81e,246e936c,1620c470,19b9cef8,7c1f0612,cf56adfb,5526573c,f7746a98,48a0d40a,3a92d38b)\n,S(562eb109,e9988778,bed85413,2fa7d086,6b37a8b,fa2d2d3,470da3c6,97996a48,29f4f0da,e554e380,613156e3,34207e6,fe8fa678,4c08f2be,c3d6a59d,1e0941b1)\n,S(b189e864,8dc0ee06,b09ea73a,9a01cc06,b6fa74dc,f626e41c,ffad926b,901ae851,4e42c870,3d04838a,9f0682fb,bc13c849,a515d5f2,f248f393,e2caf0c9,b6d61d0c)\n,S(3894cdb3,425c618e,1da2c6bd,1177109c,49362a4f,24030692,244bb0dc,27af6913,20c0021,5c72939a,497f08f0,bdb03493,8d04ddd4,8fe8f3f2,97dfef19,ec9397c5)\n,S(394f74a9,9146fd43,9035266b,ccee72e9,36ff59cb,eab7bf4e,925c6363,fce7d4f0,c7da15cb,c1cdcea3,21efb1fd,c56bb3d1,2bda06b9,993b6f5b,2293e493,5aa3e5a)\n,S(44fc66ca,d6e67f97,be95c667,fd5dfdfe,dc82edba,35df2bf4,737b3ba4,14d15c27,9c485757,351825c5,245c6eab,2ec4a51b,ac60c9db,fff7988d,8f28728e,60f418d)\n,S(fa355672,d9f7a1c5,30b2d76,f183720f,e50840cc,ba413b64,e449d2a,8b0518dc,63fe1c7f,d97c7744,35613167,660926e3,b7377fd5,97dad03c,9debba5c,a5a76e3)\n,S(7325c269,50f1bf21,2f9cff6a,170e446e,62dafc2c,f05dc50,4eb951d2,6322eefa,5f8fa04f,ac5232b6,cb553630,5a48b647,263a57d1,2c485363,6c930497,40965f00)\n,S(7004b364,c89ac7ba,ad03a03c,c8e2972,e5fc52c,bc656165,e08df216,afa216c2,971a4284,80556797,ebea8b1c,b37de6a4,1aa11abb,df9b28b7,7f50d362,b6554974)\n,S(ffd45087,eb9308fe,e7644817,9406d9b9,77364732,f3570ebe,80a4710d,a0ef292f,f4ae4df0,5af2ee0e,456cca0a,2c9d93a0,83eb9751,a09c2f8c,5bcefce7,83764ffc)\n,S(ad899e8b,a7aedce9,e53d86ac,5ca15408,140c8f1d,be3ba4a4,275f332f,b0320572,a914795,bfd9850a,24251eda,98bced8f,2e2627a7,8a1bf6e2,8b66ffec,f11ea105)\n,S(7078718d,e94255ff,ae25f1df,4ec2ad90,e59ada11,5ad4a6dc,8b305fcb,93a1114f,ee736453,927cd7ed,bbb55010,32eaa95c,c0f6bb42,be77db4d,62b77650,1094ed7e)\n,S(30858d4c,d39abb36,51b8d35,58800c18,5495bf31,bf23dc8b,176c1f04,171e304b,3aad8415,4abdfbb9,1eb95aa8,4e7ace9b,fd8b5f6f,cc8ea08b,e094c874,8161f85a)\n,S(c06d6d2e,5637fd7f,df08b41e,5573478b,eb19dded,ead1f0c2,9309fd59,9551c787,78cb2514,37d4ca62,91bab9c5,57e88244,edb9dc30,fb1a6441,78217039,628e1db2)\n,S(2f93455c,279d2a26,1cc7b724,4c32c853,459e5d99,32692fd8,ffe7ff0e,493de2c2,455f0902,74d698dd,a1a97586,fe797421,899f7c22,60ef0bbd,db0664e8,fa323156)\n,S(c00c345b,b4b53f5a,5dbc5f10,597dbad0,75e28162,32e0ac71,fd778c50,20b663d5,c30f78de,3495063e,ab98f001,83fb4bb5,5cbf58a9,1bd52ea5,36a4a38b,cfe89288)\n,S(7d78faed,f86a22b0,14e86e1d,f98d425c,fe2e65a2,39b37994,ab25a4d8,5c863382,cffee7d6,5181e361,679c9d51,feff7a36,e8d84282,32e752b9,62689eef,a1ff4441)\n,S(ab492cb1,da2e8463,a2536c0c,7cf143a5,9626497b,23d4c179,d2af4cc7,f2b55866,11d4205f,55a74f81,e9512496,becb61c4,6363c42d,baede671,9bd7f2f9,3e00b14d)\n,S(d1a3790b,478bf657,360b3459,555e1dc4,ece339d6,93b5b51c,8a3af121,79578688,c6028991,3ea89956,802f8b8e,cfc8dbc3,5894846d,1aba2074,9a55153b,83f73891)\n,S(6fbb6fcd,36fe0388,a4bb648c,95a004f9,b3c64e4f,9aad672b,42d8c649,4c0cef3e,51be473c,74ca2609,c3b79c60,2fe90d98,62eb9d14,b9e52aa9,ddde106f,7253da44)\n,S(db150ec5,680299af,681ce826,794e4818,c0d6d3d,e3c392e2,79ecb408,aa55b243,15e47cbc,1c4689bf,fbf7ef42,1db5c57b,e3ab8c16,b69bb518,2ed8a1cf,20067de8)\n,S(51ffc919,afe67f04,a889323f,4438da99,72d2161a,54f9e81f,aa1e644e,9cb88835,e4b579b7,e985b38b,486d0600,3f825538,52a9d0ca,b8fc98d4,371a7e33,4898742b)\n,S(fc86c54a,48052ae8,d8480235,e4dbb7a7,6d05d830,d2c0cbbd,297db0cf,3d2d6cea,6cd61522,e2a22531,da973c1f,9cca1c77,98ff66a3,8f568935,e378f73f,9f1d7dc3)\n,S(d440de01,20d619b0,6add3d7f,66184864,5754a424,f4b1054,479a83bc,7df0db9f,3f09b245,91124175,89071c56,84215cde,a6999b17,b5b2f664,6074e7ec,6c38f68e)\n,S(f3310bc7,7556f234,e7c83d69,48afebf0,5bd91a25,b516cf84,60d0d6ec,8483fefa,1d10f23c,e0e35816,6b817553,cbae0792,9e34a4a6,ebb47186,1d401341,1ef2b3e3)\n,S(ea770a59,e88b598d,493fc75c,62eaa9e7,485271dc,edeb1d2f,76df983e,54cbb51c,e2a4baac,96c9538,3de82a29,5bf3cf30,53bfe2e4,6fb0861d,65c60c09,978601f)\n,S(2cd56ef8,6fd04d2a,ed4f8520,951798c2,a1c69a38,8e635a2c,edfeb08e,3af0e331,3b9de80c,42e0c683,85aecbd9,c8775b56,86a8a376,39efd24,98664343,e712707f)\n,S(37bb0206,c96d8fd4,5315e96c,860f5cb4,a44d2b6d,af17844,bc305b4b,59c9c649,c77b4a05,373c42e4,e071090a,7da9b4a,4ccbbeaf,d399496d,f6fea1d1,a83808b1)\n,S(55fa08fb,f83dab6e,ea7034db,15bbddc0,ab2b472a,b29861af,543a970e,d16033ff,73c8a90a,86542970,4e25f370,a5caa4b,a68eb72f,5ede1edc,5549105,491858cd)\n,S(4eafb675,281fe8,98593817,efe128ca,c59fb775,82f6006f,339631e0,6e7d2e7f,41347946,6630f6d3,9fa97404,6808067f,fca9e173,3e1c4149,6567eacf,47a0bc6)\n,S(857587d8,375f24f9,e6924793,9ddf3a60,e0469f38,6ea0d55,d990f1e8,4ba5c7dc,1913a118,9d867c57,2f947fb4,3e062cec,3df37c3,e8edc6b1,927b315d,10c37be3)\n,S(89e334d8,f71eacef,6cdd0a87,b1e03352,1078a1fd,20dff144,10108202,93143815,8b49aebe,71b60eca,c9256794,3cf74d9,80bb3e47,161b2730,9ed15872,7accd84c)\n,S(69902d6,8a4ecb1,d2e496e8,cdaebf94,58f71f94,8f4341a4,11fbc2dc,524f694a,19a54c4a,5de17930,6c50cc03,b0b8d54,b613cd31,6f0bdfb7,851db63a,9c605896)\n,S(52f8a3bc,832de46,1bade518,50121b5d,2ff475ab,5eb0e71b,a91ede46,41f0d576,2a946bc4,42f24ef9,469b8121,31021186,5b22f3a,adf93648,5b7907e4,791236e2)\n,S(146fc341,4ca1c497,73734f6b,b78ee9e,56fedee4,9487ea01,a31d3e4c,152d2bf,82e21722,e415f5a4,1a076f3a,8324db4,2436da5,a3776f60,b5c6f53d,e5419db9)\n,S(9e22043,8458e463,b1bd7399,28200a4f,ef7c3760,a7b6357e,afc29a5e,36b37b94,b1f5fd78,c1c40d98,1473fd4e,72af64d7,7387c28b,7f005191,5ed2587,674877a1)\n,S(53190555,8d044a1b,94caad4,526cbed1,82807c65,2bb053d7,61301ab9,68323f1d,ce591f2d,61b47a8f,8707d8f6,a8717139,68ad569a,667ba4ac,f2d18356,ab6d326f)\n,S(b93b3c6b,1297cadc,392b0cab,da322a1f,69791a68,b48b0ce7,4352ba3b,b8a3cc8a,136ec007,24fd378a,53d5c573,3aa7a06,15b2fb20,4fed82ea,934bc131,7e7ef22)\n,S(62e6af72,a9fcc956,4367d44,c0699897,3674e3f7,b79c67bb,8c8a82f1,6d3f744,4c1e4e33,2e9316ff,24a7b38d,13ed1b30,a659a8d1,8423db6a,af6324f9,4e7d5475)\n,S(c91facca,aad0790,886c4421,d28f3ce2,9d64dc87,514f06d,cfe95063,dbbd0e3b,e7a0c83a,18d655d9,7a555c51,4bf8f117,59ce866c,61a7e691,8ecb1cfc,21e50710)\n,S(72b3b928,bea91ce8,767b2f22,958458ab,9a23f455,78f836,65c89717,7e7ea502,773235f2,c9ec74e1,c06e4e7f,89247d12,27f303ff,2fa354a0,663791a6,ffa40e49)\n,S(1b014ac2,7213cc08,67877fa3,c0c07b1d,91529259,23f6164c,f1d204d9,addd6f4e,e0dec57a,c1ec264e,380909bc,c62394c7,413cfd48,180b1de1,c5440d08,99c67f2a)\n,S(985e8845,97e2831c,4ba48888,ac219b3,bd891dc,63176953,4e0d8a96,bf583a83,5afa0b31,1e909594,4b228958,657b95dc,a198b008,6f5cda96,c3e4da6d,e444a418)\n,S(ec3cded4,cce88ac6,22315a51,ec99ed3,1ba2cb32,74a43e6,98e033d4,e490bae,1c2a2236,2704a765,252b2a57,aa1ecaa5,4f1c21a5,2d67c050,a3dba077,ad4b4480)\n,S(f882c4f7,7911f6e8,64da7cb0,5f09da54,b9cf7125,21504815,e6fdb9e5,73f24be6,9ba4a4c1,e0978ee6,1f83aedc,b1db2193,518a71d0,c112b9fa,59c629cd,d42ebde2)\n,S(f06c3a4a,9f1e80cb,e2ee6b06,ff50e447,13d8eddd,5857243c,cd02c5d2,7996eac6,6b38bddf,fccb4888,da20ce7e,495bac5e,7b9ec8b2,2feaff5,8d4329c3,c546e839)\n,S(dd1c366d,5be82883,eb86da5a,f9b5d5b2,89de6b9,1165b91c,20ad7b73,ab4de421,19bb181,70b31a81,45232ba7,ed0fa93c,273751f4,838633f3,c94647e2,93c06bc0)\n,S(e965c1f6,89b3f7a5,97d23d9f,378b9a03,fb1c6e29,5354de36,a5bfed53,3338372e,d98295bd,890e98a5,9d6dd93d,bd9eca2e,e79b028c,7459779c,2d3fb665,46692242)\n,S(4f9148b6,cf21f5fd,911d7fb0,e92132d4,686d3e10,12da444b,f5a89040,69c2fcaf,60e9b3ef,924260db,ad68793a,d684c316,6889b0d0,38474c70,6ca25978,4a5fa7ad)\n,S(d9341e6,6a505a91,dcefd533,90abbd54,52b39594,42deef9f,6a67dac0,8faa5e00,eafdc1b5,2b7c97f2,21ba8635,d49b58fd,17cc7983,92e09d13,8c41d679,6fda331)\n,S(b948bed3,4f426bbc,e6c24ca1,fd1d2092,1de6f9d9,f561c32f,877a4104,afe81ae6,5cacf40d,f6fba19d,763c5b0b,83aaa284,f9485705,ad882b6,d51bd46c,b12f532e)\n,S(73011c97,dbeaca8,8bf04371,311e9558,1e494b73,1778a2f3,cf906cdf,64dd781f,2b5abb31,c2e56a38,e8236f7f,b28a93ec,1bef3fc8,9be46d92,c2fc476c,42ff4ed9)\n,S(44835043,1373a095,13f756e7,36ac8342,24004348,70d6cc5d,ba31f74d,565056ce,748f041b,a9c990b7,70c36f68,5667109a,acdad74d,4569b107,c968e517,143499ae)\n,S(3463b029,e9dd1907,bba2b582,c9ff1f26,4a5ef4b,40f5af28,2a00c136,97145ffd,9e30bb18,fbb70c1c,edff9065,968523af,33665b53,3f14457f,59d7edbb,d5f07c5c)\n,S(5d95aa9a,9fc67758,56e6655c,21a62670,c567e236,a41b523,436beb2c,18e69c97,d6478496,4220cd62,b4651e8f,965bbde3,22aeacc0,6557f656,764a20e4,649a1ea5)\n,S(48c65239,d03715f5,71ddc36f,313a1723,b014c047,30cbbd8b,ca9617b,e8fb3874,c0bd39e6,3cc00fde,74c991cf,f6d711a5,356b029,5b6eb9c0,28c445af,21de8325)\n,S(67c610ba,fda8dfe6,c7977b70,7a57ebd3,9654c7d4,c9a0aef2,80c896e0,e8134078,c3d4ffc9,891a4267,612aefe9,6c1093f7,8e1b9a58,746c986,c5265381,3ba46aef)\n,S(4605213f,4a21b15a,4a471e10,f157d0c3,faebaf0a,f7cd05c5,a27c56c1,88b6d430,9853c145,5f4b3d38,200aebf9,d08f87ae,3eb4a99a,3d94ace2,94331e03,876fb751)\n,S(6277ce5d,fb56c2fe,3d32e28d,6754255a,ecece179,70615443,b0d33e5e,b54e475e,dc7a742f,92160074,69d53e73,da526102,a6f68e7f,e8f07a91,98614f0c,17daf06c)\n,S(7fbc032a,fdb50898,3270249c,f1a7d27d,198432c1,6815b7d2,c929ab67,bf12f01a,dd696a37,fbc4f852,6db85ca0,6bb498e8,6dc33480,a4f84564,2b49775a,6bf20ae)\n,S(dc849e28,6b934ef,30cab6c0,1cffaed6,9ea74ab6,96578027,4c88845b,8ac264f1,6d7f94ae,347b9b18,bfa2bc0,d6b9a8c1,13ef1a70,78e317a2,53f21590,667f4b5d)\n,S(e29e0833,7da9e0b6,b6886c7d,fe010cd8,9a4b10c6,f5e4ce38,c1202f59,94a69016,de082f4a,9c21db41,573dde9,d2ca8256,57c67173,207d43ef,e42ea81a,ee812dbe)\n,S(407f0e21,ddccb63b,5672eb15,742d72f7,1a522f9,20d04247,3e1438e3,7bdecd35,28d6f39c,cfb36986,351d7619,daba6271,3c9869f9,357504d3,25c112bb,74ad336e)\n,S(653286df,15bf657f,1685bb92,98462383,7c819def,84a8c332,77f6d777,4c8dd3b3,c5ea3d4e,f7a97324,96a98abe,f999c25,9a8c622c,944a099e,146c0708,d108eb34)\n,S(47613ca6,ca7fe67f,4286f12d,3b4bcd86,455a1863,94f2bfca,e162f991,3bf6ed7f,4409a6d6,2ae63ffa,a3f2be74,e7d0e5e,3ad4704,76282b0,c2919750,72be1386)\n,S(8f9bf4cb,4aee791,12162fff,75f35393,509fcd4d,aada298,655bd58f,567e6adb,893c8b52,c2c25f8,e2ea051e,d1a35a3c,8ddbbf9f,508ac792,37e53143,7818102f)\n,S(4b25cee4,2f955db9,79c85682,4dae806a,3925a33c,42e6b6b6,ab4997bd,884f68b1,ebe38f45,bfa13922,d3112af9,1324f526,1c5f864f,4d722576,24e3afe9,9eb7ebd8)\n,S(a8a40ca0,56b5e168,6fb9a348,ae26b15b,cf812cc5,b9c5abc3,44f86021,69958e81,a55421a9,4f1fda1a,f6d64e48,cee3e4a3,434293d6,b49a5cde,b521c0de,49cd31cd)\n,S(1f7e97c6,198e27a6,48ffebcb,55c001f0,d591ca64,77c7c1f9,43928e2d,dbe88dfe,2dcf0a3f,f296f744,dd402fd2,48d29c96,49abc871,28624da,28134cf7,6242e6d2)\n,S(7ee29348,7d6520a5,586b3ba7,4a0a660a,a4392e5b,77529e8b,890a5927,aad1ab71,a51d3123,b4faabc3,77bcc565,d66d4c40,92decf92,f63f81d2,ba3a4f06,2a8ea485)\n,S(30880ed,b4f5f2d0,95c34730,d10a8c02,11efdf6,784b4886,4afff98c,407734fe,4ca4b106,41c55905,9a19cbaa,bc6837b5,300aa1c9,8b0d8a72,8caf5cd2,914ea693)\n,S(bb7ffe45,b725038b,597a20e2,6f67d0fa,c77730e2,4ebadc9a,23afb4ef,a01b4d50,dcfbe717,46bc35b9,81357857,c0b4564e,1ea11852,c5ed8372,bd15eb69,e674e14c)\n,S(ddb59e25,20a5842c,62607d4c,6d31f2ed,b79e387,527dc12,5d96fd04,84385e51,2a167f97,85ee4285,7471c45,2c38639e,69940f77,b3fcd54c,a697100,37d9e5ef)\n,S(3c405df1,36b1c6f9,99fe0b3,2bf5a305,bfa4a6e9,994a1506,9c5fcfc,318dacf5,ba5ab8fe,43a2de82,ce289cf1,2255f554,d7881d08,a54017f1,e0c84180,d963f3b8)\n,S(ed4e6e9c,9d4eb277,73f2249c,13d6fc1c,5c07be47,9ca48e35,913f6fe8,384851a0,8242617e,36b3c298,b13aab58,b7383dd7,93ccd4d1,7787062e,195456ec,43fc4198)\n,S(60fb7766,9f312be7,11d0a269,a72a85c,e06b70c8,1d34416f,f7ce1a28,41d50895,ba2097a9,772a616c,82cd5dc7,84585c80,65206913,474f49ef,71579a3f,8cc0d825)\n,S(1336a678,bd5d495d,c688c039,a60b256,a09fc946,830fa80b,1622890d,9c8f0881,6d57f261,b1073b42,f6eeb514,58e994f4,7406b3f2,7245a0e7,528748fc,65a4937a)\n,S(adb7e6dc,72c02a9,fb99645e,a3695824,db60df0b,f9b6a420,75cf02bc,4e3713ee,96325866,2a062180,20f8b86e,e5ef1e04,57d01fd6,d5541d6e,50798883,9f03b3c)\n,S(674d6e5a,6501f824,87efd592,c37bc14a,ab596cec,4d5e6e8f,1be44a53,a9d2f416,e6ca1153,76af0429,1bc2dd6b,2c47a816,c17e0ad7,c252c1d,cdede8fd,c9a18630)\n,S(ed73f5a7,93dd0359,68e253ba,8ac4f2ae,83d7f290,24eea4b6,fdc418e2,4b63dcdb,bf687b81,4691d48,5296e192,d5371ec,daa831ea,ce2d502,4e321add,b62f0faa)\n,S(601cc630,47ce63d2,c1fbbc49,f3b2dbe5,6edbca09,17ac41e9,b39f7ac4,5cb3ff8,a773b9b6,d98c7b35,458e956f,f9cc71e0,8539b118,bc2529f0,fd496e54,efc2b25f)\n,S(a31ffa07,e16fd36d,2edd7d1d,944ecdb8,2da2641e,cc6ccfe1,88219a67,5677a740,c2253d87,59ab43d7,c919710,9e9ecdae,df1f2d82,d34c5d82,d113958f,cbf1e3f)\n,S(131060f1,ba302b06,b26360ad,de531db3,422a6bc9,6ca1e9e2,98b5da8a,c8266249,4dae16bd,40159bfc,96665d6a,d64c6c5,3ce90fe0,95a316a6,8cb84844,ec183cf9)\n,S(f4a29fd7,90f35f1f,4b3240d6,c0cbb983,3e701a9b,ca241d3d,bb7630a6,da2de25a,b2ecd794,5afa51e0,1caf3c21,5334dd9e,9f9a1f6b,8f35767f,c63a3f00,69c01382)\n,S(b30546b7,c5e45266,854b90ba,53afdab8,be115251,5ae22f1b,5e0c472b,a3b44042,f14a6b95,178fbb85,5aeb9cc3,a4e65560,3e8b18c1,4cc54cb4,1e059597,faad7f4)\n,S(b6cbbb5,10ff83fb,c8bdd55f,cfafeae8,947f5e83,4cc78eef,dce45dee,2014e175,d0e29276,a14cfda6,f518a3fc,ac6a4163,13666f91,ce5ae7b9,7abfdff4,925cd415)\n,S(fcaed74f,19199482,564ce4b0,7e1033ca,c17bd418,769981bb,6547caa3,b61bafd1,c52c08e,f5331ccc,271b108d,5e7794ee,4a493ce4,f6665773,f97902d6,ffcf40e0)\n,S(c6d1ed83,29ade032,c9924945,189ff23a,c6b1befa,e4a33794,8b1b4126,6d14344d,6e1c0e9f,da231092,86d23cb3,2c588799,507368b8,8c0628de,b8a79c97,e4ba817f)\n,S(ac7d0edb,a7b86cdb,60963277,cac43674,19dc5d85,ccd9a649,bd335dd5,eea2a9e2,61790bc0,ddf5307a,56fce870,4bc9eed6,9d61d857,f4d2fd34,d53a97f2,4c4c5206)\n,S(fd9d0c61,d3dc3ff9,bc3735e2,b2c7d5d6,4a740b1a,bcd46a7a,860816f9,84a64645,701e082a,5e59460e,c3e3ca21,40137ed1,5bf9ef49,fb4673c7,4fa5e4ff,2ad8b762)\n,S(82ce7d44,87101716,6ee31310,11bdf02b,336fe44c,88572c37,930a33ff,5bdcea1c,d7fdb097,3961ba18,b53b421b,21c0424b,7b4807ae,256d883e,2e3a6f22,9bc44c0b)\n,S(5e507c80,bbd32e0b,efc31714,b464580e,f7ccd3a5,2004f2f1,9fb9b0f6,dad1a767,95facec8,a3b5c996,e0bc9d5f,77c11407,d0ee071b,9cf5af3d,ed625025,3aecc75b)\n,S(640d6b4e,bde998b4,1bc86fbe,2e981683,a83789d,b71bca76,76715a29,143c9b55,61334a92,358ae235,104aca00,a632006b,769475a,da8789f4,f7047f75,c8b1123d)\n,S(e951dbb6,96ceb16b,6059c3ec,9d84ae8b,8adb146f,fd79a323,59c04677,aff990e,d3443900,ea47be0e,10ea9178,3f1524f2,fe5c5720,efb62458,987dea0f,1612a94e)\n,S(2b601b8a,550333aa,2a0e98c9,a4b28043,aa38f20b,13a72cb8,7a8cf212,cd0a2a92,2f3f309d,ff296fbb,a406602b,be72d9bb,c3ca0578,f5f0aa08,6e65ec0d,8989f670)\n,S(d803b242,9814658d,df7cb378,bb9708ed,6ddd7270,ffb7d712,b64da007,158a5add,bffd353d,c4d664f8,6d7f150f,30e44ace,fef4abe3,83f30369,15b4d5d6,5ba3c131)\n,S(d5a8348d,fbb9f9d5,798d7d1f,3515e25d,a2707869,26ae598d,500186d8,a284e86d,ce31c62,19960c61,f2a8a7bd,2fa36f0d,6ea7838,5463a4a2,9dc1ee95,2f37905)\n,S(250dd67,781128de,65f0529a,11b2405b,eab01ee0,1e9bde06,cabcc9d3,cd038065,524aa9b5,8dc5c6e0,6951aa70,c4bfdffe,a2dae26c,1e8341a,5f63a180,731a0dcb)\n,S(f3a2017,127dab2a,917dfaba,5eabb6da,bebe554,431e796f,a3b09771,66cd47ec,69d1de46,2e63beeb,1334fccd,ce147b96,23683942,21c4865c,d50fd687,5c1659c1)\n,S(15626140,5aabf9f9,d7dfd218,3d7fe2c,900ee051,784537b8,deab8bcf,20c6e0e,863d8797,f2b20b0d,ca1a5b93,9a43a712,4d5f0725,8ae7caba,4b76d308,65f9a98b)\n,S(3261fb49,2c55978b,20d2c5b2,3e6ac5d9,5e3b40a9,462b748c,62a41035,2efd227a,4072fb7e,3fafe456,8f62f4c9,83d0988f,f9096c14,317f7584,9fc1aed1,3e39708)\n,S(2a5e6aaa,f5cd7466,b851802b,80305dff,3e655dd9,b0456bfc,fe704eb8,582836ac,2e3894d5,762e70d0,4d3595f8,83dbec7d,5125720,c516fcd,f361ab22,be67062d)\n,S(e85a7e08,13294e2a,6eebb00d,2e3fdd76,318b7520,dc682705,8b3e923d,536cbcd7,5a936569,77b89e9f,10c4ba6b,7dcb1611,fb6a85fd,af0b1136,b19cf222,a2e9a477)\n,S(8e36e66d,2f080ff2,a24ac836,25e50148,e5017b7d,b898820c,b7d73214,bc198b28,edf99b43,c2b976b1,6eda2a75,f8bf5aa8,6945d700,9965b528,bb78b530,3888c56d)\n,S(99ead62e,11cc613f,2290332b,9d5ddb98,8c121ed5,21a0147,589bbfe7,db0f0c58,6e73b10d,bac646ab,44f3a062,4150da41,d666523f,ed55fdc1,c1146fd8,c4a262a7)\n,S(15e233c4,783fced,39c74cb4,34e77491,83004e2,6e16c372,f6f7f23a,e30efb13,c9954660,eedf09c3,af8e1642,3b57af59,227ee5fc,e1885837,5ac5a853,34fc5034)\n,S(3b33e0a1,254d310d,efbf526a,8a2314bf,18bb490f,e592e36f,6763b174,96f57a67,e4e6a395,a6e6c730,67fb2e0e,2c5dba63,9745daf8,bb9d6aab,e96f59d0,8eb24c83)\n,S(8be3fe6,f3e45fda,270d54e6,49bdfa8c,1dbbecf6,35922aca,2d605c66,6933e859,10269847,15eddf7f,b7b23972,ed1f6fd6,882481f9,1a12eed7,f8fabad9,da0917c5)\n,S(ae6863ae,e6d519be,773edc77,8e7bb5a7,5e0d30ca,91dd0920,aee35870,5bf6effc,d104a8c4,1939444a,1a5843e3,92fc5fa8,d2dd864c,1f442938,9dbdb543,415988b3)\n,S(58a06c8c,658430fe,e03b3218,6ec051c1,18174f8b,ade2cfb4,a98cd9b8,13e12dc,17f4ba3,da575c84,81cdfc04,25567dd5,1d2b5e94,a8ed37cb,346f88fa,e6f3553c)\n,S(cf0b0d64,3843e10f,142ff912,720373e7,2fd18576,1f3d6c71,52647afc,1ebae367,8ed9b909,f4b622d8,cf5d5b19,fa2e1cc4,bdb42133,c4dd9261,22f1aef4,6dac4c64)\n,S(8be41872,15902e71,8f75558e,4b1a5ba7,9d3522d2,e8a2d723,f863c4d7,3c4713a9,f7be5a77,6b8ea8ee,1e59765,ecc6a33d,210eadbf,df4c5586,aba43710,49c715f3)\n,S(1e6bfed2,36a10a7d,9efd88cf,af1dc1f1,9649197f,785b4a30,c68391ce,808f713b,90200be1,29c5235f,41a79bc7,2d4d10a9,b00911cf,b9f27b5c,6d47eba9,8530b8c8)\n,S(97176463,8cee344b,1ebd8c67,17782c6a,86108b76,e1eb74a0,791527dd,b18e14b5,ccb128c5,2295ca09,626ccd39,b5827ffc,3168a628,6633843e,96184aed,d7bf898a)\n,S(2fd20134,8e0b7259,415cc828,c3e4f79b,2184735c,86e534dd,77f1c5b9,9d8cbacb,41fc80ab,25ca1a82,67582a89,f901ac61,2237b942,9d724a2b,8cd0dcb6,c96564b2)\n,S(5ba918f6,6bdb4013,481bee06,6aaafa88,f741c362,b5c3a4b,28dd4555,3c1aadd2,230f6c20,f39849af,9de4ff99,8e39ebcd,818d5d6d,8056ca67,8f04f33a,c4fafac5)\n,S(69b5676d,b8e2a30a,8870c86c,4a859ba0,dee25a28,493909f0,9ac88af6,83b70797,4831db1,98c1b4dc,69942571,e4908ac7,41ec4568,e27089a4,682ee7c9,8ee905d2)\n,S(faab5a9a,c530f7a3,343c71a4,273935bc,fb280258,24a63ce,8f8da6e2,a60135ab,1443a23e,793eb339,f4353371,34937bbe,9bda0eb8,c2fa2d50,bcd85757,68c79797)\n,S(c70ef20,284cf135,7c437093,10451a9e,5ef10cbf,e3a0ebfd,b90f487b,8ca62d9,8970b394,35c29dc2,b8254d1c,9c4cdf54,6df52979,ca70ff8a,7dc171b0,5a176ce5)\n,S(acb67abb,fa6dfd52,e9829767,182f5ea5,66dfaeab,42a2f2d9,aaa545e1,2e9cc68e,4a097150,2367b1eb,4f51f6c,a394d351,b734b30f,fb36dba0,9e53b4ea,3f6ebfce)\n,S(2da4ea09,315e0f1b,f5b6e0c5,b8af330c,c27e26ef,54affcdb,fda834bc,cd578a3,a4097d6,ad006cca,53ea3391,10c80150,f63694be,c5ea7728,f77ebb83,2362a407)\n,S(70cb8427,c2d5ee86,59b26055,3499374,63e7a482,6731ab85,6b3fd10b,be3dfdf,f44efbf9,a914063,3e8378c2,6e9676b8,351b6ddb,33f7e7db,5ced5208,e4cb7361)\n,S(b14283ed,9a9db980,b135557d,97190066,60e4e1cd,3ab288b8,dccba9b1,67b24934,95fccfb3,827332be,a813457f,28a63a89,87dc8c5,340a8f88,76788a60,f03b2606)\n,S(ca24774c,727efbb1,15bbbf12,20e59841,891dfd50,9f99744d,de815f5f,3e959555,2519e414,a9703de5,60f7412d,8949f509,bacecf3a,e672e7ac,58c5f98e,33162bb2)\n,S(5a5c1b07,ddc79f18,26bb95e1,13e03894,bb63b593,c808f0a4,2bd44b36,dcd3765,a11bc328,2f672c9e,60846826,521add7,57b891b5,d4fde6c9,738c6329,dabf67b4)\n,S(2caf2545,1daf272a,b169a4e9,b0eb9c0d,26888c18,ae7d8357,b8dd2b73,ee4cf7dc,bf8d8ea3,afc9d56d,9799083,c79f1289,7d20d7ed,48ba38a1,acb039b1,2292a3c5)\n,S(af6650e3,4022d1a1,b66e8c3a,b0a8e9f3,baf44318,f6946a0d,d1c65aa1,e3f9c9ce,1b0222c1,a5f3691a,248154bc,bc9e5e9c,6b2c96c1,ca468feb,97a7c01f,2551bd5)\n,S(3653e476,4215cd7f,83ff59e2,f63f2a7f,dafb8795,95006bd0,182e0e,78ca5b39,c91824ee,6ba3c685,2eeb2695,9a3b136b,371c9bac,4141344c,a1eb3051,8a6d8ab9)\n,S(7826902b,cdd4e7b5,463452e1,baf88534,64723588,86643d49,cc89b482,298f6394,dd5bf1b6,91647ce2,86c745eb,6246d087,35cba4f,22c26a37,e326ed1c,4e3d968b)\n,S(da19c301,4e77f987,abb00fda,8a5dc50f,d2777850,1fafec84,2ce7e5f6,37edd1da,757fb28b,366104a8,cbd26981,3697d8c7,821c6e0e,5acbb33f,9cbd5fed,25cce98a)\n,S(efa31697,2a61cf86,df713186,c1bc61f7,63a618a0,8034c26c,462a2457,907436a,74f17527,e6c7aebb,ed6b28c6,26e612bf,82d61ad,cd1ca156,b971abfe,2efb15b0)\n,S(379d460d,12fc351,4c46567a,ce05cc9e,ded3cc35,fb416bfb,76d14f3b,c5164f7e,f548ad44,a5c87313,aeb52885,5ac3a955,178c8992,2415837d,d3e7863d,685004fe)\n,S(e3b66f05,ed217cb1,6e3f8ce3,56704f70,36b97104,e39c5649,83bc204c,5b112de4,8a2ee4f3,ab9c8cd4,40afe707,d8dc0fed,473db9c1,be2b6e7,b14de905,ba38ae2c)\n,S(b14ebf0c,ccda021d,8db1fd20,a4108c48,750d10a7,e0659cca,64f3e6e,ee8c7a4d,c94ca9d4,d2ba47e4,576aaaad,c15f9019,f335ebc5,763cf232,f56f215d,ce42322c)\n,S(1ffb2e29,df24e7a7,6a71f607,f4f03608,43d3715f,c3e468b9,92b684bf,1352cee1,27c39636,54ab505,4b008e5b,4598d025,ade823c3,df6aa7c8,18d4d4fd,32442990)\n,S(63e13d75,38f1eb8b,7276ee28,acd56bf0,448f026c,f98c77fd,5f743c24,4872b70,845d65c0,a6cd8b30,7c7ea0c9,8024773,86a50daa,3f361539,57cf995a,43705cc4)\n,S(169b95d5,417e6173,b4393c6f,1ace153c,21c83c7c,971418f1,27e1abf3,aaa04673,bcd1ca4e,5618a183,420b34d2,52d25dfa,e7cf699,3e936450,ffaae3d4,61a50c50)\n,S(3dde4fce,54d27794,29b6f6a5,8c5315ff,ed682bc4,5601c623,948faa88,2309ed27,2b22dfb2,dc46f625,4f29f8a1,4cb4496a,dcef6806,26d4f499,a17c4751,4a1802a7)\n,S(6b37e3b0,2422eccb,299e2b89,1a150be9,ef56a628,62c78c11,f3411614,9fd37802,a9c347b1,fa5105c5,a27ed367,261a1cb5,5d54a071,7a2927ed,29d45eca,6e958295)\n,S(7bd6703,ef78de4d,f32f0d7a,274f6371,2d0b0a9b,fafc3f6f,5c03b654,599b443a,33d9b1b6,8254d47d,6aabb7b0,b66298d,8447d674,4612a2b1,f722a597,857fda25)\n,S(2e9a4aa0,a2062c8a,63b18e5f,91a609de,b60ae126,93d7f1fa,757057e9,ce169b61,65a55523,e34dd131,3597b250,acd11763,62df6b07,1d3f0f1b,907fe0bf,46ff87ca)\n,S(f90c1316,9524f407,8c7328a7,126c48f4,eadd6d65,8baccd1f,403a0b68,ff95e7e1,1d6a1b16,6f5b4f7,9f51b046,42306f53,bd84b7df,2a58457a,a8869,4111cb38)\n,S(a7bf0bfa,8e84b448,9ee29801,a5d06f66,a17d2374,a6d91eea,2482354d,66c60074,e60ec871,7ea63cc0,e4785455,478848c0,363f6717,748ee9f0,1c928370,df0905cf)\n,S(dc4ac1a8,372c06fb,ea7a44cd,11a352e6,fd204df6,f6868cb,5230e420,9ab36e6b,f3a1b986,c86134c7,40c0ac9f,8f2780,82a103aa,e9e4269,84516e09,659f668f)\n,S(538086b2,aba47aa4,dae137a4,4bc747ce,9bb225c0,6aa015db,e9478da5,e2c9cdb3,42ed59f0,fb831257,84b15d27,b9086eff,9aec4d8b,9ac36f87,10f93bbb,2ce7d971)\n,S(92eaffc8,955f3f06,fca49a8b,881734e8,6750b34a,d253f160,183388af,f18b8106,fdb45519,36f9e291,9e2e2e6f,7e5d2dfe,16e14da8,b5704a27,60e92d9b,13758767)\n,S(63fda46a,4350fdea,fba277c6,190c5f37,c4cf7c88,ab1b2ba5,7b0ce9ec,60249c46,b64fd169,403a2687,f5f41038,91e811f,6dbb344f,2c3a1492,fc408f74,433c65e)\n,S(f9f7568f,d2e444a8,14b03934,72564798,5c16424c,1ea6fa80,79f96df2,ff3c73d2,8ae3a292,fbef875d,ca18fd89,8e1e882c,ef7bc222,64140183,1cc2d268,ae795a14)\n,S(43a5ef22,93462849,ecbf95d,3c92eb63,ea89a39d,2e0a5da1,eb261c1f,2e8e4bdd,896699cd,e580ef97,64ef1860,19317dd,f7c17ccc,34d340dd,b23621fd,5e5ea5aa)\n,S(1fc26dd2,9a3ad966,4206f233,82e54363,6ec9d95e,a58e7af8,a4bc8aa4,736c155d,5f6c4cd9,c6f954f3,f0f3bc54,8bfc4a58,faec99d5,9f3466c0,bcc09053,346bab63)\n,S(9a63cdf2,84ee5189,34b73c8f,d8b3932a,50ff88f4,8ecf9b40,c0056c7e,168956b3,e52e7902,6a8d4e95,c7f473e3,84b9966e,16347c60,8b6fb6c8,484335c1,2872f4ad)\n,S(aabebcd6,8050337b,1e6caa45,13d279cc,ddc4c218,f849afff,8c1302f7,6b728bb5,808fc6b3,90c2f001,bff1993,346a55b3,663378d6,e457c639,b9a73f87,78ee8d09)\n,S(9fd45b70,59cd26ff,2188167,ecdb5ad7,62efbcf2,b668830b,475df22a,bf526239,6fa79fa0,e76536af,92eeace7,77c1b735,19092fd4,870ead71,35634768,700a1241)\n,S(ebb3ab2d,e71844f5,b6ff8baf,637cc0f1,1004611a,e8a3b570,1afeebb,a7a4edd4,30eed3cb,55a23613,3bec9aec,b620f1fb,1f39a067,8a44622e,84b9e271,62294133)\n,S(a0e7ea2e,33c6a3eb,423138d,8faa7ae1,d7802a73,507d48c1,bb38bcf9,29838ca,31158fe7,ad132036,62449ed9,76c4aa17,67382a8a,cd42c842,ed22badc,882d7d26)\n,S(a19abdde,db579ade,1dba9264,9d58b15f,1bf3b87c,eae44520,2ae758ad,f2164fa0,508d24fe,f53d8f4c,77e43ef8,eabecf3a,ddd04eeb,acfbecc9,637b6c07,fbe88084)\n,S(e86ea1ab,95e23d10,f086c91f,289e2f80,d10ea0bc,aa9d8f3,1873158d,19166976,4b6bc016,6d95e08a,72c4dac7,9eeb405f,938346d2,ae45ea0f,ab76ba98,8c4e910a)\n,S(aad23857,d8d835f8,e3785020,6b1cf1f1,efd9c9b6,ea15d42c,70444ed8,81710ca1,a550855c,381bca50,44be47c1,42d52259,af2f486f,622699a6,aec28138,554cf06f)\n,S(b5c04c3b,436fe2ac,97bf2043,3ba57e9b,897816bc,eb8383be,ab11d488,e231a138,b1ee4b56,1965ab9a,9fa87112,57a250a2,d7f06de,7759918d,85c69d66,5546a6c0)\n,S(eccf5dee,9b6e3fe3,1e3c02da,a2d5c408,72766edc,29da88b0,cdb01f4f,524b0ad9,7770c7e5,d97ca3f8,cdda858f,ed5976f7,cf2bdcc6,60459a64,daa495e9,28f4cc37)\n,S(4c34b06f,6d02467c,9e667ceb,630d9865,4540b18b,8832292a,17e74d9a,d0cabc6f,57671dd,326be6d0,2ada8789,b5f27c7,b052c8c7,d300b2b3,ef881a24,53bcb6eb)\n,S(9493f9c3,98a50b50,4db602ed,ef50cfce,5bcc9f0a,bcf80ffd,d5f65d1b,d030ca31,fb45d7d3,fc1216ac,6b948369,42d33e82,932af020,fd7c29f0,f2959eef,a41dcb30)\n,S(b0ca3c54,153d435,b9d6427a,20ac3456,ab980b67,ee92c6f7,605aa934,faee0bbc,2e2a47e6,8b959402,1ed83edb,d4968c6a,2eb4be8e,2cf128e3,a3778751,20f27b16)\n,S(d5632117,2e9b97eb,4b282d8e,1e303cbc,d50656df,2a99c9fa,bad35909,1888ee8b,30157215,efad51b8,20c03f8,2e4c9c93,11d15bc8,3dc75bea,e44e1e52,7f1ced7)\n,S(3a0f593b,69396a6f,62655efd,97c103db,5e209554,8d45de93,8963cbc0,dbb9b4b4,66ba5298,590d027b,30dcd9cc,e4605e4a,73adf43c,6e377bcc,cd19eb92,e20e267c)\n,S(10eb3c4c,cccd5ca,e15bcc7b,92d108a6,de762cec,b71bd78e,1917752f,b3f6cf86,6d65809c,79395f45,153d7650,74597eb7,edff81bb,598ed20b,f9780e45,bd91d077)\n,S(40ae7e81,e33791bd,154945a5,105be36f,57477fdd,d36f83f9,d31fb73c,862e70f9,71511daf,e9cde10a,7e4ff05b,948a0454,e5fcd355,d98b2bf5,8ed3ca54,1a568498)\n,S(994dac9f,3c047519,823c007c,57851a8d,41be0480,7c6ba5bb,88e19869,261fd12f,913e96eb,bcef4fe7,60469aed,51e9dbd8,4910d606,9646255c,9cb3bb7d,55b1e342)\n,S(f0d9a17d,112e91df,63c106a0,5df3cf41,6471b817,a3ede631,d845b604,3c04d0a5,3ab43cb6,cefaa228,5c84a42a,8f1f41b5,631bab61,1d006946,f06be576,bc817f18)\n,S(20919d38,ef12de1a,64992396,f7b265e6,2ab8267c,bb988d1a,6771d8e,724d16e5,81f79a2d,b629ce97,47f146d6,b16cdfd7,90fccd71,c46cf9f7,fe526e58,8ed1eafd)\n,S(b92087f7,43494d53,71978b1d,63e11ae8,a1595239,33b87a44,704ca3d5,30f1b02e,6eef6ac2,49a8550a,135072c2,9bb42afe,5d27c8f7,fec88aee,6274d27,36dc0eb)\n,S(f69dedef,a8894583,c05b1fd1,ae205fba,3ba11a37,ca628150,d287f01b,b6920b34,a9f88097,66d18287,9d97e01,5544c7ab,ca0cf8fc,c5b9f305,ed0bd9e5,58fa5b3d)\n,S(8bd8b3c9,a301a76,9f5607a3,e116edab,9d87bf79,e4099d62,a328c1c5,f8b8b6a2,167117ec,ce6e15da,47a076c7,afd851a0,cb5dd1c3,d8187f4a,9aa5abca,cc0af771)\n,S(d7e2bc76,e2a87357,82611,2619513c,10a2eff8,857fe6fe,a2e2c00,c6f8ef4f,85e1891f,531481a5,e935e80c,448d8da7,32f1d061,dd234e39,d55c58ee,df8cb93b)\n,S(2701bed3,778a857e,c7a9095e,6487e92c,555ecc9,32ad8e0f,b1b59d70,4131768c,9e38370a,8d30d5d6,6aac5302,efc7496b,cd5734a2,20d2e76e,fae3c72c,a793d991)\n,S(3662a916,a05a80a9,13bfc287,c81cf28b,7295dd1f,aa52badf,5ea1c83f,e1b90521,b14bfdf0,a33c9286,eac83a4c,b982f5ae,82e2e134,99bcb3de,3ac930e,2ed0c931)\n,S(d778d74e,317063ff,6556388e,2d2ac429,410337a,d62917,a94b7654,6a04787e,f7d92bac,c92600b4,e8184960,11f135fd,adef70da,b72c1bb,9da26bcf,7a81f0b7)\n,S(7b05001e,388f9197,ff3504fd,402a5291,d1257621,c8eb202b,dba87b56,154b6f8c,8c9c1c9b,5c151be,39f2875d,b31797ba,2899047b,6e5c491a,56f7fd28,1b897f2f)\n,S(603546d0,1fe46be0,eaa9f00f,c99b2a6f,c38fc225,6553bef4,9ff47442,ffa7626c,1f86de50,aa457ed,ea306251,91cc3cd5,61cbd8f3,2b41145f,139110f0,64b73b74)\n,S(80f9318a,ca3b7aca,65cb1965,a36981d0,86ba3b32,8a95cfd2,9c6bb718,1f662c25,c195025d,794abeff,49c9b1f6,724f72ca,70b0bada,d06ae11f,2101b49d,d592ae18)\n,S(61182e02,a877565b,1209dce1,bc84c62,f3b1007c,48332c56,6dd6e697,664cf64f,d21f9259,517656d1,3efe7166,750c341b,6c064b0,542bac29,28424a30,ce4b51cd)\n,S(21cd4f22,ec3a190c,77073680,58562d82,36d463c,f7706f10,fbebd283,c19378ff,2e04af2b,155beea,daace708,c510555b,467727fd,145426bd,680d1964,fc1b03b)\n,S(2d3f6c78,94479443,6004ac92,554a507c,5a20ffd6,f275f715,b176b3b5,3d2000b0,72e0e16f,9d9ceaa,2ffc5a1a,71a2cee0,eea64e44,7f716eec,1fc417be,ba16d92f)\n,S(a9f45433,c040d1ac,6bd36d33,5b655fd8,eec0d3a0,bf1a622b,df422039,239de17b,264ed6a,8da4a169,a66869a0,a846229e,81d52517,22fa4c2a,4c775322,f33b1184)\n,S(16e052be,bb65657c,309d67e5,b68ea441,4179ace2,38315c8f,df88626e,84281ce,91c007f,fcd4633e,597ee06e,b28296bf,2837f30,8cb21be5,9bdbd52c,4ae0422a)\n,S(ff6d96b6,f633beea,1de80512,73c06bbe,181a1098,db737c8,41a48d44,cfab935a,cd9a8011,c22b643a,90f1d9c7,54b7330f,1c1970fe,5ac04225,c2720054,fa6a8444)\n,S(dc2e3b1b,a2619ea0,6e4ddc09,99630c4a,7b94c78e,ed13517,25b8b8da,137fa467,f97e82ad,49bb4389,84cd752e,820aac43,bc6cccc3,f9b0d9eb,c2337bdd,89cb83c9)\n,S(d53b97c5,8e23d50a,3b855c43,80a992c9,2d667afa,bba4b028,20031f58,dd6947c9,24a54f43,bb9a04c0,8b93aa96,9dc61f92,e705ab75,e644a3c4,40391af0,ad375ec7)\n,S(b598a510,beb9cbc1,c4e03f8c,1ff610e0,7123ddc6,ad69dd6e,f9fa7810,f79c8ab3,b895b8f7,68a80a37,77d8b5bd,46754473,c9590768,a56fd586,58ce97a,366dcdbd)\n,S(cc2296b9,ee9726c,17b0cc6c,745a038e,38b5535,5e19fc49,e89f4ec3,372b2a05,6a466fd2,f9a5c412,9f5b2faf,aaef4cf2,be71406,590ae031,d68c482c,86e3f89f)\n,S(3e84c76e,254c858d,51cd4e74,72c22ec8,364ce28c,de81ddbf,b7b3093f,44acf9b3,ce8ae6f5,f56814dd,21186370,f70196d1,339c264b,c78a502e,bd57e771,b438c81c)\n,S(976f67c8,c626f8de,9de43f8b,39585d7f,d4cb35c6,e4211b00,68669ca9,a973a3db,ae4f1f6d,25af4ccc,3eca4b2f,6cda0cad,dcc28f78,c8e881c4,eaca9131,2f0b057)\n,S(b28bc958,aed50ba7,6d5293f9,7c419828,53bec43c,21ef0f96,9000fa47,49ee95e3,e7d4cc8f,f68182a2,15dee707,4df2c351,906d5527,c47e6414,54e97c1c,b57525b2)\n,S(e54dd5d2,16bc5903,9a630bba,7cccf5e6,81a3113e,be8fb57f,83c51209,965cddb2,86352dbf,5f2b2327,ca50458,b3b2cdd1,8d403629,a2e2a776,5562240,7e8407db)\n,S(58379e1a,10115a0,8f2b93a2,3f2f4e2,2787aaec,cf129910,b1911b43,c209f379,a526d32c,abd99175,e63b4493,7a0dc96e,e0feb99c,bbe00c91,1e606537,c871c6c2)\n,S(7858a68a,cb34cfd3,e1cb7d06,4d233322,ceefa6a7,a2de391f,991b94b4,da9ebd63,f54490f5,ede73b49,946ffe19,d5ae6f7f,ca026c07,b1dc0138,b1409383,5d792db0)\n,S(3c8c636e,d20d58c2,f03c26ac,bbbfed70,3fd13304,74bdf2ea,7526f16b,4fe6f7f7,550069d1,cec630e8,6d22af01,5981f20c,ffdfabdd,6416bb00,f2dd8c6a,44401759)\n,S(d03fc7ec,eb716cbd,f033d76e,8db97314,858674db,48ede8dc,1a1c7dd0,82ae7f93,16f7a717,a197fede,dadc25b5,a20b0486,1cfaa63e,3157e5ce,ff0c81d5,bba296d)\n,S(6d6c983e,d60601d4,ae5ef4ab,c73914c9,b9546964,a6a3d2a5,681b09cd,afee2c22,13f5af59,61877fb9,2a2ac09a,eb691a88,20ca8361,81359fa3,96558ad7,b2276b1b)\n,S(92a9f5d2,149065eb,1241d82,fd06ac2e,f1f48003,3bffb06b,ae3a9d88,a1d05f8d,f0be5964,75545835,f64b0985,1baad682,b84d7a39,91ea0f49,1d19b7ad,77ad75d)\n,S(222aac7d,c2fe0066,b766e1fd,179c1912,5f289e98,33cce93c,749afe38,ce0aa74a,bd6c4d8,43e5923,b5944e40,8d309733,dc0cd9c8,b266dd8c,2df162de,fde5bf5b)\n,S(28b14628,3a7e1785,1c9d1831,6c9ca17e,56a13c25,7877ca3f,49ab2369,ba2898f1,292856f9,572ecc,5f000e0b,1e7ebdc2,3ec72619,3c97542e,8ccb10cf,d608eac7)\n,S(5031a6da,df8d12ff,9eb19209,b844b008,dcc26de,c4a6f9f1,bbaa45c9,daf909a6,ef31dc6e,3cb5c39c,64011c0c,89cddb04,7ef9a881,a0d718b,5057bdfa,3f5e1ffa)\n,S(925835ee,ce55e98f,130008fd,a6f01768,aee2de4a,f96f239a,430d408d,95a627c3,cac1b7d7,60362e24,f3b5f277,e370ba70,f0f8c6dc,a338c15c,46c5fb4d,f9f1bba7)\n,S(6b7253e6,9dd65781,8214fa04,67f59e92,a4671648,c465ea4,9c993bf3,de8d9e77,50a9cbd6,b429c3d7,32bc3b68,ec581327,1c2b0a4d,2d8587bc,7b26ee15,ee7e92bd)\n,S(f82d660d,cd5df408,714213aa,a7406a3c,868a8d05,1fe37689,baa6fbc3,effb3e33,affe0a1a,b7bf498c,83b331fa,f3e7b723,2a2dbc66,3b93da28,e12f0d56,260677a1)\n,S(990954a5,5342c5a8,db3fef46,da2b31ba,32b6d597,c67c8290,9329a90,c39845fc,d764f091,40891e20,a2130696,216049d0,b3eb1af5,7dcb9797,4c42abc,5298977b)\n,S(d6b8e341,f8bad7e6,ff434dce,fcae81a4,1946f237,e0467120,fd420,f3dafc0b,a8ba941e,81677d32,140666f3,55fc28fa,7233ec8f,8fd13703,214bdf8f,340c389d)\n,S(fabf5120,8632ee4c,81ad6d34,cc84de68,728197b0,fcf07971,326d4c04,7017b905,79c781e4,aa7dedda,4663b8db,7fff3cad,f9752cf7,ef2382e4,b0254489,7c6c04b2)\n,S(e62db266,d9b208b1,83016754,c871a8d7,4b6848de,e496ee7,e2c1447c,2029b0d5,ef7410f4,f44d7414,53b9c1c6,8e5689bf,37cfecf2,1602e95f,3fe053dd,aea24f77)\n,S(4bd90928,14753ea0,1025ea2b,86ae2310,5b581b48,98359481,d1b7d36e,d9c6e478,2f12e4b7,b825c858,5362afc0,d0029880,45fd638d,65f1865c,6ffb31ce,424baa50)\n,S(3e397cfb,cc5c9fa1,15519366,c6e814ec,4b0ed9a5,dd093321,219e4028,28126ed,31c352e4,d4bef7cd,8929d3f0,aeecf9b,1d577ef0,e8086a28,40d46966,c1165dd)\n,S(24bee951,54baf31c,f5322941,ffc01fda,9e89f80f,2662f5b4,edb751b6,5b372ee8,9568a4f3,a34ce5c9,8f591550,b75f2a84,be5cf67f,1fd7713c,c126f46e,1c3b6883)\n,S(d242bb09,e4c6cc42,a2bdcdc6,bad2a02,8e4bfa21,430acb16,3f0e8a70,2ad2f0d7,2eede9ec,799b9e5a,13c40c4e,4cf6dc0f,9640d472,2a78cc6c,d920b610,d070b913)\n,S(a57b5fd8,f50de3c5,98073cef,bc6fa56d,20dbacc0,72dbbf81,347bf0e8,7a36ebef,a99f123f,a45b1369,32394f8c,1f7ea2b3,563ca2ba,9c0da00d,b2c9c119,e6f20287)\n,S(82a43e2c,a533abf0,6aab1199,fdd20f9e,1616a79b,859c6467,ffca4b27,989da9e,19cd40f5,8c997e78,311e5ba0,c0b3328a,b845da97,91dc8ef,a6cf7e5d,efd51c6a)\n,S(95bf3b4d,b8ef8bab,16e00f5e,7dbe9907,b54c98f9,2331c4fe,688129a5,5cd021c9,2b4c46e5,b9d9f915,d5d020a3,3c63fe49,eeb32931,9373bf9b,e359c40a,19328c47)\n,S(791ea768,4d333125,893356ed,dd8ebe4b,3f98ae58,e25a2d1,67006a4b,5c05799,5f72cf68,7827ce2,6bebd598,539f6519,a50788c,9d093766,9c3b9c29,f52d5422)\n,S(85138ec5,a5d3f0a7,881ce23f,e34fbb80,fc3038e,bb7c2a24,ccfeb2ae,5ef07b74,8eb9e80d,8664b11b,d24753f2,bba612bf,c06bf9f2,a4bd061e,82ce9037,895b084d)\n,S(3b4c1149,1d98483,9ff33b31,39da0341,f430175a,d5800c80,37e35dfc,a68ec256,574d6475,e225aeea,dace647a,1489b2ea,873175ea,83cff3f2,fec684b3,fd2ad143)\n,S(2ea17f9c,6a028f58,396474bc,8c51b1e3,cb9ac0c6,7f73f533,a428281d,4101b04a,19d1f021,8b8cc0c1,bbfb8925,77087caf,ebed3409,69dc2281,3a1dd6eb,9d6c44a8)\n,S(67839592,2fcc7ffb,627486db,e1d98a45,25ee1338,5a98c01d,6b3b9f8d,f64c507a,e13ed82a,a1adf761,7cce3760,d049a72c,7572508a,5ecd0615,1bbb589f,17e10a7a)\n,S(54a0d2ed,39778fc1,237ab423,1e4384e6,4156c1a7,d5e999fb,2c92ba42,ef40ee68,3d879ff8,c25ed54d,df848e5c,49e3eeda,e8eccf33,afcb1c1f,67440810,8b3e979f)\n,S(263ff1ed,726d0ff3,8b47b398,c713455a,3030d499,3a77ffac,b9cde4a2,cd12f7f3,a5f3fb33,c739bc93,c442508b,ac70884f,d90c3699,34fd698d,bc27f7b0,ca48a0ac)\n,S(43b2fae4,a431beba,598b3ccf,caa1e034,91e7099f,c19508fb,8e693de6,dac9e3ac,3e43aac3,379c321a,5313b412,7cd00a1,bd8cd177,49c4240e,7cef1e97,22daf69c)\n,S(a73e77a8,5733a296,2da7fe71,f4c16166,cf0acdc8,2d5288e1,8cb9479a,2a31f362,12b393ee,e323fd52,e44a9ab4,3e19256a,f7a8c892,76e9e6c,9052f0c5,3ecbc031)\n,S(f007a9f2,bd3d0d4a,8cb9524e,a5aae499,6b2d0c1a,19aaa56d,4038a21c,6dabdd86,517a6a7b,3b75b68,bb04bdbd,d6f93414,c97b4b75,47b8fe22,c5828d6,7e979702)\n,S(bc64853f,111371d0,8381c082,c72d2528,823e18b9,99de4303,c85a5fb8,87250833,51e7dc7,23256176,62a9f6f2,70bde4c7,94020e61,9e8dd87f,3f266d99,71596146)\n,S(144dc699,a063c473,4b9bfd22,845317da,c4b55e92,a232b92f,965967b9,9c8e21df,a20a7982,7d57de38,85e573d1,6d22025b,648b9ed4,c656c48,bd6f4902,2b67c681)\n,S(834ed659,98d49650,c3f525a1,b34ec725,89d167f7,a3cc6e86,8e4cdce3,b2ba3179,6bc2b06,c97a108b,2abf4033,152065f5,24c1bf1a,e79adbd,b7eeec17,9e598cbd)\n,S(efce9278,6052c989,adc9595d,cd1500c9,8e93eaa,dafe2b87,2011bf55,3488b1a6,48ca33d4,cc89b486,c0930829,91f23147,d910f29c,c9d13787,7bebf55e,a3dc92ab)\n,S(5b150240,c3563354,39adc9fd,23e9f94c,369a6cf9,27f45bc0,f0110cc1,b7321f4c,629b62e3,1a85fb44,b448c7e8,e76ec423,b059c9a,c8144c64,9d77a4da,eb044aa0)\n,S(cec8cb02,3f166bd6,9fe04f66,8ef6e949,f4e3d26b,d748c30f,53a9b9f0,9ef3f9dd,997f9fdf,dee5cd89,352e6c38,760c4cd0,a7bb2696,94916567,ae60fc5f,39b908ca)\n,S(58427cc8,edc5e616,3726519c,7522980c,30443eef,7e72cdbf,b135ede1,f15c0890,d2fe9c00,7eeb0be0,8295e972,e69db2e6,a54193d3,ec9a3ea9,f2515e59,6e34e88)\n,S(a7d0a30c,1787b9f5,8ebff502,e4e38000,6bf896a,2feaefa4,4670dee,6030bee1,774eabaa,863fd4f1,63b3a16e,4c17078a,fd0a1761,b39ab05c,3c6b1d36,5e487592)\n,S(9d70eeed,55ed86a1,ba17e817,4c400cb8,ab0e5da7,b568ca81,60b585df,d1a84e74,f4c1fde7,f11b329e,f3c3e196,bd78a3ce,5387662b,859f99c7,d61f7962,2d01b5f2)\n,S(e0715fee,9639817b,8501de6d,6561e623,628de7ff,d0dbab5f,bf58ee4b,a365f684,e34ba5d,acb60318,c6ccc001,871800cd,98ba2c5d,529a42a2,fd145336,7b10c22c)\n,S(594612b2,4cb1912f,fb945465,1036bfb2,79be0bbd,e718ca26,973552b6,93d20143,d68338a0,d03fd0c5,e6c6e3dc,7070c78,72eef1c8,cc2154db,cbdad699,b594b142)\n,S(f4f41087,1dbd5394,5fde2583,b08ba65c,6729dc05,b32ec3ac,c8aadb72,a6c0d8,8e948ba3,853102b2,99f2f558,ffc66181,310bc676,4b82dd7e,85fd075d,70d92fbb)\n,S(efca7b38,69f2981c,406cfa40,2bbdd00f,15ba56cf,c6e9f66,9bdfa14e,aa9b1d21,458fd928,a07fa32f,d6a0ffd6,64a16b21,2bdad00f,a4534093,209b0c92,f507f9b9)\n,S(25b2384e,d9e09e70,8098971f,153ada48,f3f4a9ae,fb946225,77d213c1,e7b326cd,ef50fa0b,4cd30cdf,2667bb4f,7dff0287,df666dfe,7d5bdb9c,ab567af4,b77c7535)\n,S(ed12b20f,aa2ac5de,db62c17,2bc67cdc,f0534a33,6a32e26d,b325321b,81901268,9245a6b1,35df02d9,3db1224b,1a0a296b,a39f07ac,ce7ccee8,eda552b9,748eca9a)\n,S(5dfa472b,b84ada50,da3ede14,8bca4f0d,aa885d2c,61633336,b2a8a37c,76b200b0,f314a5d8,2d20fd30,ee237487,7a922a54,f4c10468,656a5432,974cc3db,c2c7fbb7)\n,S(a9e5c0d6,5b6d4b4d,b242d87f,57c805a0,5b7f243a,515c5d34,a037ddc6,afcc4470,d90fa599,de5fc8d9,87a42c57,f3bf9dac,d5b766a,fdfa07db,4c56c0d,3d71324f)\n,S(4e9ccc2,c0e3169e,e25a6701,a82e7f02,2663d3cf,585100c8,2c6b5da4,d8c42e8c,854aa160,d48d241d,f5bdd1da,2c74d1f9,a00fad7,effa29fa,5ecedc42,3ba43484)\n,S(2122c569,da05f145,48d42f9c,5ce3a96b,bbcb49fd,fc5b2dbe,1a7ab0ea,84aec76d,40796418,39879018,93bac618,8a7286a8,f8745709,58a40cd6,1202ac,dba5867b)\n,S(aa8cceb3,415df249,b5069899,75a853fd,eb409729,331b1807,ca2242e2,a75c6968,5362b581,fb676eb9,9f125fd,5f674be4,800d89f0,133a1363,f1cb30ec,1fa5b468)\n,S(beaea0f0,1fd8e442,50648032,530e41cd,7e3c8271,f4b83b4f,7493039b,b21013aa,e21f7d1,53e5d411,794fb472,47897cc6,a86396f6,3f6291bb,fe2f0f12,a263873f)\n,S(8eaa225e,63bb92b9,666bb318,22c166e0,3843ff47,482cec9a,69ff584e,d1a750a6,aa26b32,e69c5d94,19663e05,6c9f7a60,1274aec8,a839ff1b,b5a43c2e,136ffd64)\n,S(bcba926,40d8b4cf,8d73c0e3,7867f5dd,81eef91,70e904e0,15f05f3e,1bf6591c,8913cf87,e33aae4c,a16b1391,75d60106,ac7d05f4,a8f10db2,b0569a6d,ec121260)\n,S(2d03aaf,6828d0c5,9ffadaa7,5d1b7e95,b3c4a547,46faa5c7,c428fe45,1a9f3332,68468e2d,597e7534,37b3865b,3c968e4f,e3f6b1fa,996e6b4d,296a12c3,20e61cf2)\n,S(b39b4de5,be757b36,b1e88773,47cdaebf,11f8d6b8,ab59d780,fbaf2263,a823b5b9,1b609d2,de73faa,d613c4dc,6ac3c2e0,33d62b22,7ca3fcfe,4aca992f,eef90b0e)\n,S(eabf705f,b6996148,170b23,9fb8998e,df6214a2,cac27fe2,9c66a899,63d2f0f0,e1867fd2,98603f79,d17876f4,7aea4437,cb39ee7c,bdafbf0c,5452b024,86182d17)\n,S(a4ce885a,ebe9335c,6ef43c6f,395e1644,201f578a,4caa7f74,65c12542,27f1bc80,bde32eef,f7fdc498,1c50942c,efb38cf3,c3f1a8a7,5addfe7c,f11723e,f57d0c41)\n,S(db8ee69,b0e00ff7,6a094251,a53c61f2,e00dc65e,a11e00e5,553ae121,ea958361,24e7ba71,22742e09,728108ac,59c5f46,aba40d1d,c308edd2,9d494f39,d156b2d)\n,S(88a5b43a,d6cdc2b5,aa3d58db,9a9a2e1a,6d70afa,808efa87,1d7f3cbc,509cf064,88483c55,e5bc8717,8114605c,1febc726,e14345d4,4211b670,6b6185d8,ea6b7103)\n,S(e3cb24cd,2130716f,10a4d432,d4e59229,2e11a2f5,3190bffd,4f478da2,216b0051,df432db5,caabb417,f8252d37,dd23e117,38066c87,101cd934,73a2883a,1b7e8de0)\n,S(d9c88471,97f04254,731794ec,e29ba74,f1d72f19,8f424beb,8309e1ad,e09e1301,12037266,331f04b6,db4264df,ae6d934e,5f753828,35a646f5,cfa4ae8b,e6defdc1)\n,S(80bb740c,3510574d,10afa586,a6e541fe,b5368797,231d2a63,67d2890,8877dc58,24ff9389,bb268f42,b04f1702,f7b7c6c1,7194c7bc,c5f4f63,bbcd4ca8,ef476fca)\n,S(4b8b08fc,400d6fae,da05cb19,65c9c785,8f93452e,d1be8f29,28c83e6b,4d2b06a1,70a6612,2549ec2f,6cde4a4a,9ae8a528,1b05081f,8eefa8cc,1111271a,1beea7ae)\n,S(d2708078,4d19552b,13ec8473,1eafd2fb,bc0ae927,dd746a8c,be1dfced,d072ddc8,9362bac1,806dfc84,e736758f,22f1039d,57a5e44c,40586195,885abb78,f75d3355)\n,S(7345d1a2,7b9dc922,f51a0466,57721451,cea5b54f,6673a484,7a210b4c,339d1f18,293053e8,c180ee0e,d81bc4fd,658fcd5b,99bad329,9e62aedb,74867df2,3ac12d98)\n,S(3b3a6baf,b9003f37,ca27889b,a2be2a02,748ba52f,6c6dc719,afcacf2d,578b1e24,a9749973,c49ebecc,501f9b18,83056505,6c88c286,2747496b,951892c6,8a61ffcb)\n,S(b2d1a3e9,15b02709,1abb5ba7,206ad2c,5d07079f,8d4c7fae,3e6837be,34159226,90007202,78d4188e,b8efc45e,8306ab47,be1c6a16,d88284dd,fb627b1d,92959898)\n,S(298019e5,5de972ae,fd0b4c94,9a9d4eb,46689fa0,9b849947,bbe27805,4a3f4a5d,5b7a4298,be50ee99,363b5f9a,1ef103fe,4fec0034,fd8a2364,5cc76f8,ff804f0)\n,S(604f1e62,7f503661,5b55fe74,4540df91,67fe575,e0aafe13,8af68214,f1080eb0,2ade0355,b373ddce,2353669e,6af5575,cc6b01ae,58b2a581,2b63f36b,58effd5d)\n,S(ddcbadcf,63ffbfce,326db7e9,2df0d483,9a35df32,fc576070,9f2422f2,6e07b8be,7a3bf369,dc3a5ae0,c91cea62,1429ad45,76f7110,b654a1f0,edda9b57,3076306e)\n,S(160a19ff,10c8b334,7683b21a,880226da,81d536de,d9dcd357,d4f2283,18853837,91dd522c,f6d1d276,e88287a5,a37afefc,ba010111,82b93eee,1483cf56,e6cf5218)\n,S(bc1210ff,d75737ab,51300e3e,ea48a264,5f363793,1f4c6f95,e8507034,84834819,8acc70b,363e52ee,779e6342,ea7dcb7c,d7d09946,5b0eec60,e35ea360,e8baa7f4)\n,S(c2da24ff,f2c5419c,3d2ab241,e55cbfff,5f41b9ae,4efaa105,abcc173,a81fa1ec,3fed4d9a,4eabf3bf,6b913bd9,279761f1,4aa630c,e278d0d8,4bc82ac7,af77481)\n,S(73a495ab,b26d4be1,bd99935f,f5583f6c,f5c86d79,fc86a4ed,48f87f40,2f12259b,f4126c3b,3e9b8dc7,ead63ddb,5749fe5e,6cb0bb3e,3c85426b,950326ef,9092301a)\n,S(599baa65,fdf949f0,f54c44bd,ff605ef6,2f53d68a,f0e44bf8,274f0b73,ce251227,297ec5da,e3893363,617f5448,b13237a1,91fb5a20,e52ee897,a124daff,9f1eaa9c)\n,S(9a032a50,6786e1fb,bd9ecd25,243ea67d,57f9e4bf,d1083879,e309690c,fb07f253,a073c6cd,15445d6d,80c51af2,4e7f540d,f1b75fa0,89a4849a,ea14ea09,ededdb0a)\n,S(792160b3,eda1d493,48ea96d6,857d8631,ed1e198c,c7f185d6,b9d2c75,2b1cae63,d12d76d8,bd73a681,9bc581e,cdb84efa,dd143704,5554984f,8f1132c5,fe1bc32f)\n,S(8fc4cc45,9639aec0,2c337f16,589c09a7,e787dffb,69ba2907,37b6c465,db9f12d8,b2ce3c2,57ccb79a,b677a9d8,49ce1833,2a97fca7,28bf3e83,6dbefd23,5343571a)\n,S(fc06a9a,5857b2e6,df0c3be8,b5840946,ca77f690,4ba114be,44e760e,267eeda5,6662078e,f0de0e94,5a770654,b8281a74,f82168c4,49455250,136dadf6,87c5bd2a)\n,S(345da4f,e1e89eb,eb27b353,4352c5a8,32d3c9ee,456c01e4,657c2885,733b5f69,3db274c6,b89e7400,cec4e2a9,9995ece7,be8b98da,39a2fa48,bbec96a4,5c758be0)\n,S(309850db,36d8c2b4,610cf8f3,e1c12431,3931aebe,1a9d2099,cb3bc7b6,fbd8b0d8,edb3a9bc,f6417672,af9b1379,9bd8aab2,f953391b,27cdf167,320005d2,3fb3e4d1)\n,S(8a35d7fd,8c7c75f4,e22ba36d,d84533cb,f314a54a,2e17a43f,d250c941,5025b0aa,97ae015f,fe364a2b,6c12cc42,fe526eea,7250092f,79c40b94,ab7102c6,fde1fa5a)\n,S(982d9d66,dbe6b738,2cf2820f,c72ed491,d6a61add,f1eff091,de30fcb4,96ca4161,b4a7b42,2e9cd74b,10cde7a8,12b4d88,f3621324,acdcc911,b39d0952,3cb3b501)\n,S(1396bea9,57d47670,735ed20d,e2ecaf6b,afe7e067,5f2a0f65,6b3e719f,573cd1a2,cd77e7d5,a49d6cac,5e7871c4,58df45d8,821d77e,f3ad3db3,56989c1c,700cf484)\n,S(6857993,76774ed8,a08da47a,9323241,71d09fdc,964893d2,aa5e783c,b8030057,640c986e,befd426,8fbfb131,8133ca77,879ced3b,56ec251d,12d0a650,28bc9d3e)\n,S(801865ee,fecd50cf,4970e6ba,efeed453,769b3e14,c103db6b,2632e241,2405fb6c,b3d3f23c,8f75e475,8784016e,6ce1b91,8db76599,8c7c1aaf,af047282,ebd7a636)\n,S(f09220f7,27e57fd3,209eac13,1ed93f96,142c400d,b9bd708c,9e716686,20f1793f,8280375b,1b2f4915,cb82a72c,43c9fc6c,f3a7de5c,32762b69,43187a8f,13510eb)\n,S(1c814b69,6104f8e6,5a51b98c,e6b0c4f9,f26b5633,8ce24ee2,24a5aef2,967ab705,1cc2bbfc,61828277,90502c11,bcaa1f1c,b5e34891,a7c669f4,dbbb604b,df2e3135)\n,S(22fff436,de961dd2,a7ef38c2,f588aade,320d0721,55e6a42a,3201bc6b,c7d24a54,6f13476a,f48f9197,3845af18,ce68ba91,77a0d4f,a835acce,76814c81,f6aaef5a)\n,S(39da98ed,a85b2de3,c9bba6d4,1af633d5,5a392dac,b1d4fb9b,654fde5,a3343a65,29b89534,35045e6f,2ca41bfc,9e5c9ad2,55eee426,95f41744,b239659d,460fbdaf)\n,S(6fb84bb6,3be24203,6e067346,1a5c1fbf,7d89a0b0,c98ad2e2,25cc3ba2,191fbdc8,21a37f8f,e4f821bb,3886333,c554d6ea,cb8924f2,bfdd7ebb,339a8a92,ec9bf8a4)\n,S(29080a3b,7c1d33e1,13b70c4c,8388fd4f,59118a86,c4bf697d,25346368,8f60766b,745ea31c,e9731f68,89aaf5d8,1e7f686f,b345c9d7,3af728c6,7ac2b8d7,60ffecc9)\n,S(a54f7e6b,aaf05de6,77e7d98c,5385d9e9,57f68d2a,8e3c24bc,11b6435f,50cfd955,f7d61099,22ff9c98,ee79998a,597dac10,be885d5a,e7b53158,fb671e38,470b5c69)\n,S(7472bc8d,c109d56d,a5f150c0,bc41edce,7e378335,15e17267,62f50cce,e8845b2e,3c59290,820b997d,3c9109ac,7319048d,e37c5280,88e671fe,9cd85487,f03917fe)\n,S(6f4cbc32,ff1805da,6cf83c64,b0d0eefc,6bae76d0,586de80f,df2317b0,a4e68267,29e492e5,89bf6c68,17731a29,76577124,c9bc9e32,1856bba8,8a060bf1,6a6c9d9a)\n,S(1a93eff,b60cb865,8538cb27,d8c12490,483e6886,16320327,e2689591,c5413a12,d96609d9,251ea2b8,f150664f,efe6bf6f,a0634cda,b8846cc6,5f6c8a8e,97697c9a)\n,S(79b82e7b,bb23efda,cd79c0f0,87f2d0d0,e2d3db59,97696c73,e6e94ea,8cb72027,bf16f23,47e594ec,fd087189,48d531e9,8306b173,88546493,d620218,b25e3758)\n,S(a806c902,28fbc405,ef56057a,aee9993,ef177261,74d456fd,818126f2,5d93f986,fc49c640,7d9d26f2,f043a1b8,8a41bbc1,3ced6a93,bd669ddf,3186dab2,9eb7c5b7)\n,S(227d9094,69eab478,9da2fe7b,3cb618d8,d781e0a6,54892f86,92eccce2,f41e9a1,81cbb45e,adfe3fc1,de5975cc,f87f0a44,e9f106d7,19cfe796,f33b5c60,85de7691)\n,S(14f8dba6,4bb5aba,f7f58e8,1c9b0425,2c357f3f,fa8aeee9,fa4ac700,8c49e060,26b19dbc,52b913f3,b6aafb31,3de99445,b49d64ef,2503d28b,bf2f9e2f,4614609c)\n,S(f22646cd,553c5008,aa3c4cf9,f01a05e9,20cee021,4e9b0553,38a75c1f,23e5fe4e,52cdb77b,7502794,ac16003e,2f4e859d,ec3e68d8,c84a3365,a307ac80,53d3089e)\n,S(515de841,814df2fc,7cd43689,8780686e,f3bdbfff,83eed568,af19c75b,5ee93a2a,7395bd22,705a81a3,d62f3130,ad416db9,268961c7,facf81a4,44d2ed8f,e4df1282)\n,S(59f4aed0,38f07bd7,b2aa6600,ca6f15f2,d396310f,e4ffe212,4e6a89e7,3c7c4ed3,47a048be,5d6e45c2,4fa69329,86b86edb,b990eae2,f5dc6524,3eadc69f,43b2ed3a)\n,S(7492492a,d7f94293,4287c7e2,5f05203c,4c70b8f5,80d23b4d,4822d1ce,fa3450a1,19523158,2fa06da5,eb5368b0,f0b19971,1a1bdba7,50d1c6ab,80ca1b4a,d649eed6)\n,S(2e12d13d,464de937,372a69be,b90dac92,78977cd0,e7b954d9,30360d6e,a51cc3af,35a900c5,6c7cf352,8c4a5af1,56dbebaf,32d2a128,8a58e3a2,ddbcb539,bc3e3505)\n,S(ce4c4b4f,a52f06d1,11dce52c,402395e2,a6ffd186,dd8275b7,bd43e941,9f4699d7,957b994d,c5bcd5e0,179a67e7,94a40ac5,cfc074da,6d23d178,969fd8b9,2d9dc455)\n,S(c51f1cac,5814de82,f4bd5d2f,a8e4950c,38fe78bb,8d09bc5b,628ec13c,e3084592,721122a2,f63289c1,f8925ce,34d810a4,be52f7bc,9bfea232,47617f95,8db1cc95)\n,S(9fbaba14,8293f578,46c717c8,718a3a9b,9dc5df98,63ae10e8,9c3649a3,e26128b1,4917061f,ad964c4c,5d79780,7914b2f4,b6c3e730,3bd440b7,bc00f15d,bed2b497)\n,S(a4a9ed86,ed3a1dce,5423c1e,1bb5fb9d,fbc1ed41,66a4219e,bd343922,8542ea9d,fcf6821e,46386764,c61eec0,19b1a84f,6a8851d,89be0da7,9d2768af,6eba9d89)\n,S(a6fa3567,9a732aa7,b58582b1,5f3e95d1,f702ab16,5249e9e7,89a5a395,3858d1eb,3bd67e4e,c0dae02c,43d32cfb,d25a4b2a,75898bad,eb2986b5,6cf61825,ed2830ab)\n,S(3b3992be,8f7e1b1b,4d8f5710,6feb825d,568b176d,af0e41f5,9c2fd59f,f67d9b7b,ddf2751,ac17a413,2ffc5c08,3e8c7728,a74b0063,377228bb,a60cdb87,1b5db297)\n,S(e9ccb20a,8a279cef,2a15de57,e34f510a,f60ce397,3fa2ec2c,4558f166,7ad20201,b70a11bd,1b5414de,1b30035b,3dcd1dbf,17558bad,368c78c9,d5d9136,6592fa53)\n,S(98083dcb,1356be80,b324aa95,e38217f7,c437f421,5a7f3e98,ba803fd8,5cc04445,bc0d9ebf,ade6c640,d16b82b6,5328a2,d5ef2f8b,52aeadca,e406ae25,e9b756a1)\n,S(6a0f3b01,9e3b2a9d,453cc36d,275fae6a,b94aa14e,e0b4103d,137b1741,8b446ba3,ef30c9f8,46c54902,c10a4ee6,c5013b25,709e7109,fc004b6,e291b1bb,a021facb)\n,S(83a62b60,6a1c4d03,1a18473c,f2230088,1d767332,9513b7a9,4f402f18,3dd45640,b23888d9,98bb9c00,ea57c9b9,517080de,95e6491d,cba0d7a5,729ab99b,12a1246)\n,S(d2781bf,4b059449,75da8b83,cf82b43d,b5ee89fc,168186bf,74f22321,30678492,76fe1955,18e00974,6af44fb3,6e623f4b,fd0ae8b6,474e91c3,3ec364a3,91049d49)\n,S(e4445252,dc6acf3c,f7b3663d,7176d46b,efe95e40,3063d1a1,68fd5742,2795a986,cf7613dd,eb200aef,e665bcf5,a6dd7fe3,cab6ede3,877f6a28,22b6620d,1eecda68)\n,S(51f59cbe,68f523b5,b435633c,ce11c0fc,ed2129f3,5d392b2a,ef789044,722052f5,10403f8b,e7024887,3c4f0aa8,e4d0fe46,11f34268,178368e9,1eba8e4,d9b318fa)\n,S(7d1806b8,410ec629,77fc41c8,8c86ebcc,74da9a0f,c6b35c43,68d069a2,c8c974f4,efe8890f,5aab9bd,c2da2956,bc089b58,b67ffd79,957ce0dd,9a53da,b26d68b5)\n,S(add67544,8cb87ade,f8cfc3c1,85fbce12,e0d1525b,812fb5d0,2420481d,b22dde96,bb80527c,b22a3bf6,728ba305,bbff36ce,c6b44d68,9cf79ffb,93030460,8f461174)\n,S(ceb2968f,fcc7b751,f9b560bf,b08f40ec,ba1395fc,9a3f63f1,65a1be1,862c3dae,67727357,b2dc8d2a,47606c1e,ae61ce54,1d79ba49,4a5e310,e0435b,383cf088)\n,S(3a03b03a,1348cf01,afc60665,26b6fcbf,b3977ecd,7c17725c,a9f0c494,f31223d0,3e71c6e0,7da0635a,a2fadf5b,78c892c4,c95f794a,88594b72,183a9b2,4dcbe7a6)\n,S(42ac22a8,c708f2fa,559f9b9c,fc7ca705,4356d18a,95a69137,bb8b8b17,2b771aa,ef669b2,85ed6abb,477dc2f2,bf0517f3,794c371,9ba5b267,8f622eb4,aa4ce374)\n,S(b2ded9ee,ab06f1c4,19c5aad,5163e731,722c4923,818185c0,d99d6a8b,dc603a06,23bb4786,f84e6c75,e565a708,2600585c,e1fd60a2,b935bb4d,390d07ee,5e8646dc)\n,S(ea1faab0,bb0b6cd5,454e63a3,d1546747,cf9707c6,48e4837f,3fc6b6f,a2ccc5a8,8fddc23e,651ebf4d,89e54148,2043fc34,7c26b66c,b2ad2d80,1fd2fb7e,77d4058a)\n,S(487920c5,14ce0cf0,9d939ce5,81e13409,9fcad06d,3e6974f0,a3b5925,12cb3a86,db447217,8a92e9f8,65a1b022,3baf54fd,618a87a1,15887f02,11cddbe,986dc927)\n,S(6828652,aa506655,60349cdf,132ca8c8,9a6f9a1b,8baf6adf,64e10c12,9ef9217b,9615f563,20db2860,9062aca4,7a136e85,40ebab0,3f8b5f7f,93bf0369,aeee0cc4)\n,S(b66a66f1,9c94868b,3e45139c,ef9d7586,1a6d06db,72027814,83dbefbb,41157a94,5c0763d8,8aa90b2f,ee04eab9,fb96b280,5ed5f7e0,58c9805b,64fb17ae,9a0f224a)\n,S(5318b13d,a824dbec,eced642d,d742ca30,479874e,31c1013d,d770a0b3,c9ddcd9f,13093540,9b5d56cc,d5004948,3bb22009,4b7d5a5b,6d357bd,76b79117,458e60ef)\n,S(6bef6b9,555f29fe,b5277c48,863c990,8f1fe2c9,5b4b45fd,8c5eb482,3ef4964c,36c00eed,4281871,fc5e15d7,7acfe3c2,6793455b,9b3607dd,71f3e163,9790e3a2)\n,S(7972f783,4c010837,89b92a08,d21b8b8a,b6ff6ef7,92eabe32,fa1c92da,4c8dba6,2c3352f3,f458a538,f8228321,c1adf9d4,a2df9f8b,bd22675b,afbdf041,9538f1e3)\n,S(7f03f087,168dfd24,7a93e840,e68cd221,f02735d3,93d777ec,c9d2c9ff,7cb0228b,663dc741,fc8e98d0,7dece960,5b506b5d,a5f2af72,1b64480b,1dd3e7b5,a0ee7743)\n,S(d06ffe61,973be011,2f17bec,6f4dedda,9b9d310,4ed22ed7,d4c2f009,843d2c04,175f409c,edd739dc,5adea16a,187a951b,d42df4de,d1aabfae,d56f1ac5,26cda8f5)\n,S(9094c510,3a34209b,45f7062e,ec65c14b,72fa75f4,13999117,38cd7f6b,792119d9,da541e51,7211db66,272f8f8d,413e1717,13cf499f,6c9cd694,b98e53df,45e9d501)\n,S(22bb9cee,8a5b99fc,d7ac7d67,5e232183,3f71a72d,55248a3b,451699f4,9f151eba,841e7292,93a98297,ebf2e9a6,6d106325,265d91cf,f7e4c245,845e5a40,522b94a0)\n,S(b548dacc,944b013e,d50dfadd,fb84173f,d5829b2f,69a2242b,c152684e,7b8a3ecc,6c7b70fb,9ae39eaf,583939b1,1a1b8aad,673b18f2,7568d2e0,b2680b19,8c662a88)\n,S(34f46e0a,2281a617,f8ab78c3,86ed27d,f837f23e,e986dd20,bf705daa,1b0188d,4ce4df08,bbf1e735,6760e05c,6e5d3f3e,664fea9d,6e1a72d6,bad17bbf,a3c089d5)\n,S(3063ee2e,3834842b,84cce6d9,50ba5afa,1d645c5d,e0acdb00,a9cc4ce3,c266f649,b08247a,f79c2be1,a0e4e021,7c9ccfde,f76d1e46,65f3185e,8623aaf8,63bff9b6)\n,S(d7232b55,3740b2fd,464a919c,46168ef1,e09638e3,65117eea,979130aa,d40fc525,f842c256,38e84dbf,47d13fcb,1763a296,47b72908,1b522623,4e307dc0,1a402ded)\n,S(6025e82,e2ec643c,32b10e6f,62ef310a,11576957,96c10f8d,b099dd4e,1dd8cffa,1e5aeacc,cc5c5455,d542dc51,b12fa3d1,75061cc9,45931548,7467d09d,945e2596)\n,S(141d07cc,256c4d2d,44ddb7f2,ef720aa8,4bef767b,3597ba32,3b39915c,1d84f175,a842c439,9366b2a1,91e850df,333c9cd4,6c983158,cc57989c,588c305a,1144ead8)\n,S(ba4ad105,6ffde493,54d13149,31846519,86fee8b2,728917ec,bd1a0112,b986a90c,97ac53,f84e995d,92d14f0b,b156f47c,be5b6506,2a7f8b07,7e235da2,808029c2)\n,S(5a6ed894,bae212f3,eb44304d,98ffba1,4a944cde,ccd12517,5e52d767,5e0f801d,d8160707,d43053e1,e5806d7a,bc17563c,ffaf92da,ac51deee,55fcb9ef,715b08d5)\n,S(d82a95b6,56bd1abe,50933a3f,e291526,7b257807,c8cde42e,5f1648c7,f35c4f3b,748904dd,3157bb07,65f94c18,7528c74f,ac639a36,be18963b,676b9b37,83f54591)\n,S(df7c9de9,8e748188,74967340,34a76645,c1e55bed,3a90fc65,dfd9726d,a2bd3826,3bd77fe3,e4a4018f,3e256ca0,2bb5c8b1,b783b729,21ce329a,fff9caf6,b530b1fe)\n,S(d3ae1d68,4614c95b,51cc4af5,a9e8a05c,4ad7eb4a,ba4a65a8,9a151b96,d91bdb68,a24cad0c,ad0ba98a,860d6d74,aea57c3c,23780812,5fb2356b,b55f0bf2,95e25e67)\n,S(ca85c924,48a27be2,2b68c9f4,c9ab431a,b380ccec,2439c8b1,944c234c,bd865758,c53177d7,6b16e0a4,389e1e32,7072d460,90e92f48,22043bea,924fab46,4023038c)\n,S(34309aa3,4e9fda0d,f2c20da2,3e8f8f31,eebea096,1e769c92,6c4251bd,5440bb04,f655cca9,d5811164,577d0525,2f5605d1,b4e2b6d4,dd5540be,aefed4ae,84caf3e6)\n,S(40212a4a,b2bfcac9,62442617,8a807655,185d2929,7e26c437,4879903b,41307b3e,26624605,6ceb4509,b481df00,79e25f1c,4dfea60e,a3768e8a,462ac273,8166dfea)\n,S(2e441425,d121e140,5d2118b9,7a3b305a,fcf62e91,4f24bb72,46e92aeb,1ebdd152,c3c7a567,51dfd709,9535d07,23778131,692dfdb1,7584d9c0,c8fed42e,5eb662f5)\n,S(31539912,9e59668b,49d9b8bd,5ee66b2f,aa727ff4,96f457f4,33400a20,b5242b5d,5e90a20f,a700c59c,fb0ca2cc,ae3f2837,6dde44c0,3cf6af64,365e4cd3,b4e6b3b4)\n,S(3b586e2c,30eb1959,bd5171ad,54b81c36,cda6b0ec,b5e77b41,a7b5b0d3,e1ed4ba,6782aac,d675436c,d969f413,c471edf8,ff7d89a,d0a07575,16bb695b,19ef40fc)\n,S(f4299c9e,b3453201,375b972f,fa39f01d,90c68625,a63c9d06,513fc9c,8c623fc3,cbd0e2a5,f9b9ebd3,f482a5bb,c5c17894,d5c320e0,28744292,31c94fe5,55ecf68e)\n,S(96d35f35,eee50b32,32371acd,99d6db8e,d2b7c4df,1f62b867,5559543b,785503d2,c0e8bce8,8bee1e02,29a5d2ac,113c9f2a,feff0260,869ecde0,7cdb1cd6,3ba5f73f)\n,S(ad3036ec,e2bcae0d,1fc34680,be2d293f,b40d9133,905af375,1ff89c49,2c183e1f,2c0773d4,bd30833d,24222f89,3a4f5e8,cd6abe06,63d66d63,2d5fb832,4c260f9a)\n,S(a0f340da,909f04df,70a33195,1c48901f,6353f4d0,4d22f99b,3763f567,be9d207f,caa1d9de,46a37b8d,623a39a8,6792475c,bf3bd694,597351ac,515ecc8b,1a4fe78b)\n,S(2adc4874,af0b3cfc,675421b9,5369ff0f,950b55d1,331aeee3,dcd0adf3,859be4d,6ad9fd3f,a840d02e,ddc01fa0,ffa61bf9,4dc1db4c,ec733976,bf1c6e41,bdd92b79)\n,S(b9222a37,c14456a1,cf931410,d96cd84f,a304b9f8,5a96edd7,6e67f928,43536175,4002a875,dfc4cda7,4ff7145e,ca46aab8,8cfc5ed4,53b34eeb,1e5dd859,4793e3d3)\n,S(530bae23,c3796fbf,76f86f6a,d8b59b80,801328b7,6c46e8f1,cba6398b,270919f8,d4d3b34c,6701f07,bc47d1d9,fb868fc2,b46ff397,2086cbc0,517e29d7,38a7964c)\n,S(a7f2ce51,5b932506,c740e84,40f254d0,e0da57bf,4d9199f6,acfa3664,ec36b823,4946fc41,3ef1b3f1,86a2c781,6c05ce7f,803fc7de,a00fbc2e,7e6c4688,fcddadae)\n,S(8ff613d1,1c81c4c9,fda3860,cbaa71f8,eab9ac3,d9263f31,55317949,d6ac1d53,54f683d1,fd382305,b2193554,bd3a6d2f,bfbb99b7,5d9c3e1b,876c3b52,e2bdef49)\n,S(6fb3bc81,5ef3d8a0,d7aa1a69,dccbdfb6,3f7a58c4,7a12f98d,b09cc105,4306422d,798fe7ac,f9fc71ad,7023a8e2,c9376161,8fa632cb,ec607109,d28a63a3,9a4228f9)\n,S(c32aa38e,bf0ec0ac,61bbea0d,d2c633c0,bd49ddae,d77179c7,e0098c8f,4488da8,e01f5fa5,1107cf4c,f4c1c5,78c3b5f3,a1baa059,90bb8913,9e2abb30,2e9e5042)\n,S(ef5e1efb,d1ede40a,810434ae,833a4681,5f9021f9,41ef1d82,fb8c1399,16c4933a,94a9cd1,5f160c1f,4f85ec8,16fd1834,9cf19f8e,96ac9247,695ca37a,dbad6ef9)\n,S(8e3aacf5,33de35e,4f923b36,c378ea57,7a5aa477,70ea6390,f92c73d,50fbfed2,49cd7650,ff69ed12,b96ac3b1,420784,7677497,b731e0ce,316eed65,7e40e014)\n,S(84521790,204c64cb,e026152f,474b0da2,25703d93,25943821,7d66f20e,3ae0d06b,c1da2f7e,438fbc82,57f7fe4c,7e49b73a,446a19ae,775e7f1d,20c8fa31,edc3bd20)\n,S(604cd900,97fe538d,b27cc2cf,a2d6c79,692f2e2b,c1b1b23d,1f0eb949,df560697,914d5288,29765538,d77f8e04,182c50f,d2d9aecb,2412ce47,4888d666,46b2258d)\n,S(c13a44bc,9a27e241,5531b8a0,5570e66e,6763b3bf,a80e00bf,59d6124f,b3d67858,71557bf0,4c261c2b,19196d0e,9e459f3a,f629cc19,84f411,31835400,3a60563)\n,S(14f3399d,5204b654,23d9318e,4adf3af9,dc43099,eb43b719,eb4644a4,897ffbff,13808cff,4c096655,72329034,d489433d,976cc011,d1a30ced,702ba4e9,5892422f)\n,S(bd84d712,43dea7fe,f151b207,5d03d2ee,170488ab,4175965b,128411f3,f592a36d,57a1c602,408fee75,ea9e683f,43d7a984,bf03d66a,37513c50,5cbec6c6,6d286fc0)\n,S(f319d4a9,b5f2c1ed,6619ae06,e5aaabe4,13a2a6c,265283fe,4a51c7ca,6c49b572,bd9d90c2,2a369a03,1856ca9c,86426171,db952537,edbb1ba8,93fd16ea,35aa43b2)\n,S(9649689a,424ec9f5,aa4cf4c8,45588046,c50eaf9f,700d0412,83e02640,9a80c61b,5cba8567,95b0440a,53e0d1c6,ad560364,c398dda9,d2e97a1f,e594355e,1402fa33)\n,S(45fe12f5,a340034f,381764b0,adf503b3,8026374,70eb26e9,6f4181e2,68cb1c38,ab7715c4,52e5581b,ed940fde,355892f2,b8a16a3d,d322123c,14a57a23,72f244c1)\n,S(98bcd24c,3222401a,a4683213,5a378790,6c9812ee,989b8f52,fa522c6,d39adcc7,14c7cd38,7bb5191c,f49bbe41,52af8b03,7135a6a,bc7e4697,35a72a38,e44433a4)\n,S(6dc56512,7be34196,a7653057,f79b854,83c275ab,65c05c2e,83663da5,31d7d652,a6839fcc,ba7db053,affaf5a9,4c95676f,9d65eba3,c2474472,cadbde17,2ad3692b)\n,S(7a7f66de,b04492d1,fd2fb9aa,dbc4ea7b,ae5a3801,47b86e68,60513a57,eb6b10f,fffe4f2,b722f36f,1e555671,90d84d9a,39b819e,fb7a3436,29b83adf,f6045f05)\n,S(aaf9f188,3865e2f7,eb500794,3888b4ec,9013371,f7162947,2cf52adb,bb5288b,df634c19,e7496b4b,478bc10c,7c00ac8a,5fc24dc6,4f193355,f0fa9c62,d6048243)\n,S(6304b1d7,56988ca,25afb747,476acbad,2e5afa5c,86136090,c86a82a0,e52b373,91a2d829,2357463b,ea1a7cb,33d79be5,8bd71732,f1d2cc13,ba4b2724,6fd39f05)\n,S(6eb17147,2aad3d80,bf4e06af,a36e37ee,5fed9c18,bbaa1c4f,5cd871dd,c526515b,6afd615a,e2512fa,70c9670f,b56682d0,f304a0c,6a23d1ab,fe958a7c,2a4173fe)\n,S(9113b613,ba815ca6,43e7bf66,27dd71d9,8c2d40ea,5c00f596,6216ca9d,d32b1ce,8790dac5,bce4100b,8e4e5135,66a104ac,b55d3ca4,3d6ea083,d23716d3,3894de2d)\n,S(5c7af38b,8821169e,2f7e2edf,18b3b73a,c387e6f6,a8ef1cdb,441f5a13,284f365,e12619ea,e2a07b8b,c55dda85,6cd37927,d448cf2a,f4028459,2e371e10,8e91358b)\n,S(becf19e9,23fa7b4,1cca0efd,937a5b11,e227fd18,22743fff,80c42692,6631ff0,3213c209,9f255eee,93323d1f,b440cbb7,64e86f1a,4021b82c,485517b0,3440ed4a)\n,S(f22954be,430be6ab,34dfbf92,264c2406,df3a0a7,19ed45a4,d09cb161,4abb0c91,a60397e3,ef3308a8,12527744,311673b,c18bc43f,352dba00,4dcd4124,7b84846b)\n,S(c50ae8c7,61776e62,5156f9fe,7d863c36,79d43126,c5f3fee7,5b837a38,1803e770,be966bf5,99b67e6c,ffc421a5,e6d12e4b,cbde12,4d84eadd,781ea562,aac7dab8)\n,S(c6c3a65f,e849c113,748e9b6b,c9a9419c,1a919503,36201a6d,f989bc5f,fa07d359,fc205b83,b4764ded,ef58082,11eef120,4d9fa959,4d5b7086,c2fa2c9c,3e56f37c)\n,S(73466c27,8d5f13ad,dc7da10c,b8855c23,9069f57b,6ec5e80c,e27191aa,196d9b1a,7e7e2cfb,533cfe9b,24243cd6,7680ade2,35abddc3,d8d00faa,c8adae39,15ddf6a1)\n,S(6315ac10,35eaf884,8919bb56,759f7013,92fe442c,771a42dd,dab88ab0,2fb0df2d,a49d2c97,6e0e66b4,50e8511f,d91f0f71,a7516fcb,70ca61a0,98f135ed,8e19396e)\n,S(fa195146,fdb7ddbc,41daa8c5,98e1f811,36c33eb3,bf23dfc2,3f20b36,1c8e7bca,324fc70b,38677dd4,c8e7bd82,4b836d0e,738dd757,ca408ff1,95bdd5d2,bcb5cef2)\n,S(ac40bc48,87734bd,51247e91,43e5e188,e5e2bfa4,2e3c0392,f39755f7,3952bcad,75904ebf,603c2f07,4eef9435,eb22c663,1279afad,94d3bbca,d5349881,7dc4a472)\n,S(15b7e1ef,d2c41c6d,416b6dd2,5f6612f0,a0acb0c4,1b161b4b,c40c5ad2,a92604f6,a13da672,17501833,4c4057d8,85be8fb1,ceb6d369,6979b805,83fc0a37,bc27a0a3)\n,S(adf4aea6,6fff705d,5bff3c84,93e8870,4ba4019f,ed550cc5,c203439,ff8512b3,53ad2122,30528e1f,4fee43c9,2369dca4,3d071177,3ccfff26,aa16a502,6206a3d1)\n,S(da0d5286,fc261d92,1095e1cf,f67e729b,501f21b9,45e8d84f,ba2c80ff,335d105c,5632ce7a,e8d9ce7d,aac7cf26,2ef7bd27,418613c,b288e793,35a0a638,6abd83f9)\n,S(463fd081,daf02794,18b95a48,bcb8dfef,3a9dc67c,2237d2e5,dded1522,f714d6d6,3de4cc76,7126750e,4038fb43,bf6af17,63ebc0b2,ef56ba8c,a376b815,6b4f28b0)\n,S(15e37b9f,58ce033c,2f0ad85,d49f8207,2e2547c7,91c7ec52,a8606974,2badb586,38816873,5e37c957,c18ad56a,e7ab81ca,8fd89a2d,1710f032,54393ae,a046490d)\n,S(2e121b79,765d4f4e,8e7aa8df,5c70e4b3,716b976e,9e4536c0,dbb3b5ae,4044a345,d7ba59fa,97a7d6b3,8b70ecea,312cb01,f9016b33,c160d1e8,d33fdf50,ffcbc928)\n,S(8d4c7aa3,c59dede0,bc146b10,38f8f823,8182c4a7,1cde0d8,e17005e8,64ad29db,78aa343a,28a48f90,edd7fb31,849d6d3e,fdb4c677,73cb523f,82c0b187,2c17f44e)\n,S(1ae12a1a,19a5d1,3b2f42c,35a385,f8302721,86a67801,c22818f6,94438c58,5cb421bd,990ddad8,16de9439,87bd96e7,e1ddfc5a,8d0f86f7,b30e3483,897815d3)\n,S(7a6f584c,d48be9eb,a7b73377,8a173d5e,3833aed3,a603a226,741ae1f3,a1c21bbc,5995b840,bcb6cc28,b83d048,9faa5dbb,c6a93190,46b11b13,59827266,d177d27c)\n,S(2dc5ccb4,8f78db2,3f0933f0,ef67bea0,53c7f2a6,80788bad,b71526a4,f55fe758,9e4743f9,ddb46206,a5449942,71743b44,713522f5,f358ab47,34c9afcd,f528736a)\n,S(f7a5219c,75dc4426,4322bda0,3b603127,26a6b3aa,c471f42,a33072b4,a44fc9bb,9e1feda5,5da277d5,cb18381a,4471939b,a12c692a,a40ab965,fd03949c,d8124ab3)\n,S(a1bc311a,e29e3926,5b3be1ba,23d7ffee,df0de8af,fba089c,fad797dd,8ba67c68,9abf66cf,109821c7,68c98164,b0598068,c4590d7e,b9ff4c53,594af6e8,e0ceee8d)\n,S(2c2ffba2,e3fee930,fe8d061,3bbb8290,22429fc6,654d5ed3,61eb8720,1d6b92c5,ed89f28a,bad9510b,acf44d05,5934cc64,ac7e94e,2dbc72c9,986e6cb0,acbe434c)\n,S(1d157e13,97f6b22c,3dbfe448,d1168b8a,bc963f86,bb3bda29,a8011f07,d2cb5ffc,bc7cfad1,e1633419,cef1c82c,d0249ee8,4c38b3f9,d628337b,aacf0449,4ca3c0b4)\n,S(1b9e9723,56f8a4c9,5e8d5fbc,8e2f2cc5,99c77d62,90b2fd44,2e63b3e6,dc33c772,59db6eef,988386fd,21e8a772,a1fe048f,95ba77a5,122253c0,1a52830a,bc12742d)\n,S(80460a3b,16fd9ba2,250b07fb,c77f2526,bec5488d,7d6c45ae,6f480308,39af48fb,bc7648a7,744347ad,e17da2e0,5cd1ce10,db704acd,26c81fbc,db251ff1,c6fdef10)\n,S(c6903a0d,d8c26c8c,cdb675b5,972aa050,6912813c,a6f0c8b0,2edfb792,491222e7,f4759b4e,9db7f1db,7c8a1c38,dfe76d86,c3778423,29280aec,12b1be06,d8e49ff5)\n,S(95ab78f3,a4268c8b,39aa645d,8c9fbfd5,b92469b0,809d6369,3d57d076,d305a241,8df4c8d0,ed85ac01,a965d580,78f36a5f,690aaa03,d9479d1,b2297a52,53e3c6)\n,S(bafa3ae4,40a4b8d0,40862a18,cca806fe,8cd0e780,483b396e,41543486,db91d9b0,d7bd60f0,c0ee0b8e,38aad85a,85a42ede,56c66d54,ee73d371,a3bb7cdc,e93df670)\n,S(7cbf5d9e,3bea6864,b87ae157,fee6e352,dc3a4f32,6e7cfc68,377fd199,a6dbb71b,42d082e7,5d55eb62,9771942e,3801c27a,fd80b502,a997ccc5,9f5a95f7,d7276999)\n,S(9108db63,751b8a9e,f4870524,f1198f9c,c4d3ec20,af54119d,6011f263,de13ca29,8c1d6c47,aa016e83,d2c8f76c,df0935b1,b6f909b5,bf5c90b,f4203493,22c711d2)\n,S(a705e7eb,c20ac4d7,43be660b,d61340c,9629d069,1b08ef01,a59e78e8,2d8b347,1ed8ec9,13ba19e0,851e1912,5854433a,f71b21d8,df64958c,afc5d7aa,cd29ccfd)\n,S(b75483e1,60144d46,78af9a3d,701c4ffc,fe154c49,fad45ece,3945289d,c3781c3,a4c0455,13cfa7fb,ba2931cf,722fc569,87b2c79b,c4b94313,5a458d34,5ee16d57)\n,S(c59aff26,bd4fdb9,37468989,763376f5,64abce,c00d54e3,45b6dc2d,9b7b76cc,c396c194,db446fb1,a22e86e1,8a37981e,d114e675,474bd24c,784daa96,91eb15b3)\n,S(2f6701c7,815ba7c6,37c4649d,d05a31d3,e909d8ba,931e7136,1e0662e,3ea19985,937eb67b,9262bbd5,12a21e90,393f9e65,66e03203,55c77afe,cb98d1f4,bd25e8c3)\n,S(170d1e33,f0862542,dc72b1b2,950ba98a,812cc308,74ecd0c9,23ce7c09,ed7cf9b3,5148ef39,68ff35f7,a633ba7,dab6cdaa,54dc6f87,510f1a7d,4d3019f0,c00bc868)\n,S(743b02d,b02301db,453f8694,cd517c6b,433f609c,e205cac,6f6a49b8,55890708,7af6350d,56130339,1a9ddce5,f566b9b2,9c10d535,d5183850,6c743124,8dcd707c)\n,S(ba6df8bc,f9d83988,4991c6fb,e0aa0ecb,d0b6cdc4,d0e372f,3ec83b51,da6a6570,7d27b176,3a01a8bd,fb7dbe0b,226dee6a,73ed3644,807ca33a,1f5fee61,cc161fcd)\n,S(d3b63a2c,364f01db,6a6f384b,4bba6c2f,2fa46a02,86090826,1c8b5045,4b92ca5f,df6b9cfe,fe7aa14,a38bc44b,8b627b6,e0ceeca7,1720d630,cc4fabf7,b020e2d2)\n,S(638c2b1e,374ff6b3,4b634f4c,bf363bbb,55d66c8c,af4d3fed,43cf436f,a1daa7f3,9854873,37b48f32,4feda3a1,f267dbe8,8831aedf,d7bd36c8,6cc8d862,857507d7)\n,S(1749ab4a,607d7864,5c4cbd30,4bc34c06,94a7a636,9c8c8f8c,be4602bd,16c4b4b8,465bff86,b459b842,dfae4df6,99be1758,8b1aca97,f9802827,d892792c,748ac92)\n,S(9071a5ff,ff23ae4e,2d81b2fe,d341bfa9,cb86ae6e,ed32870d,d549af20,a1db9feb,c0e3d4e8,277d099a,9801ddf3,3e513aa9,1761218a,967d530f,21d70894,ea7d38ab)\n,S(91bc0055,28e2d857,ac644954,242fe0c7,bbaadcf2,9119837e,898244e3,a305ba6b,6fb63758,3aefe600,46997b88,315d5a24,683ff955,94398694,be304dcd,8b588f67)\n,S(9663913d,48c865f6,312fe51b,6e8e7c6c,51ae397b,d141aaf2,df3d6ff5,edebbe68,c6251751,7e24d81d,b1da26a6,6627fbb3,28b5f818,6477b34,43f7c36a,918753bb)\n,S(e88e8702,7843b941,61c71887,9a0a9a90,cc0d6dd3,8329c73c,a18acca4,3f44ffc9,7e31ae63,1f9c927f,bd055f58,e682935a,3225e778,9221a062,f2826d86,97143a61)\n,S(5ad27e79,dee03a52,be771a9c,ded6a02a,58337f26,be810d1a,f8cc5ddc,f1eeb917,91c18e01,dbee34e9,a5302a7a,11bfa7fd,ac852e1b,e53aec2d,3138259b,bb53e6f6)\n,S(bb7f4694,f2935a5e,8711ae47,bccca550,cee2632,4347b468,58e40c74,49111ead,d9f94c14,332ad75a,59dc784b,d674e8c6,146a2b74,566ac1ef,b0ca17dd,9eec8d74)\n,S(ff77ae06,e0624cf5,f6d905ee,b0de7281,5377c026,3e01b6c4,a139e4ac,3304e82c,1f27acf9,933d08b6,f0892199,11805d14,1611a318,661e6e7c,75014b84,cc35c395)\n,S(84c15fb3,1b12d39e,ae59ce0d,f8646e9a,67c85492,8d6c498b,4b836be2,eb19a060,6aea0d78,d54090e3,2216c3ae,be0dd433,a666e67b,44cce0ec,1609804f,fde33f74)\n,S(9a48086a,8bb9b150,a6ccb966,3978f555,41db6d48,1b3d5266,e958cbd1,df9ee7ab,d8eb2109,13ee09e7,b5767661,13157905,b3cafed4,641903b6,da0ebc08,a0ce2f58)\n,S(db32ad19,45f4d9f7,eff1b8c6,b87c5545,1b0c74d9,8f1c4ffc,6ff1e79a,21ab3033,2d56e65,a70bd23,617f85f1,4a5d0e4d,52aa6a70,a8594158,36d02d87,309c7eef)\n,S(4de7f1aa,b9089f5c,b6d95b67,a04952b0,d4696cc7,6640e1da,f4bbf7d1,da985851,96f2cd33,5fd4b816,4499ddc5,5e81f5ea,c4db4399,17f2151a,f86d2ad1,e2b3612e)\n,S(74bcfa73,5aa43e8d,1fb540fc,9922362b,21878c09,666bf541,a0e739b9,dcbfd1c6,84b26fc2,8b2a05cf,a67947d4,99c1ffe8,f94ed4d4,6ba583b7,cf26ee81,ba60bca8)\n,S(9c596bcf,3d2e1df7,cd8d9807,8a1ab17b,f16e27d8,66cfb582,ef58498c,48ee0fc4,14dfc093,48f72d7d,af9e3599,8b5f18bd,5287f3f8,381308e0,63666028,dda9ac56)\n,S(8e2a0d3b,2786d67c,a15cd72,4f2cc6dc,16cddfc5,cf080ef8,d9576b2e,e5b0ff9b,2ec4853c,c83c72d2,68555129,ce30c836,50fb59b5,17a3d61d,56ac4273,1b33ad06)\n,S(25ec4838,5fee8fab,773498dd,85a23ec9,46c59839,14fb8a9f,d1239ea8,ade3f829,123bded6,5312030e,d4760047,1867aa4d,b7537239,b363b6cb,58ecff98,44986924)\n,S(a1cd9872,7551e2c5,db7985b5,1698b97a,31b90d3d,32fbe60d,34f8ec2e,398df76e,40858565,aef814bb,8bd91fe1,410f9556,3f1bd170,345c1283,b64fb268,4980c398)\n,S(bf7d3973,aae2cc31,e831390e,f2458e85,9ed6847,e9eefd6e,cf91e3d,4a4924ef,c2829fc4,2127b303,c801605f,35602b84,32357564,d9333ba8,d962d639,ef21a6aa)\n,S(5a5299ef,e0d394ef,f4b510ba,96dc73bf,6332d358,e276bddd,527ec290,b73e3313,9ccd4618,17e18104,d324e1e8,1597eba0,cb6b475f,4e5f2e02,9cfd2d63,b613de79)\n,S(90efd8cf,9e4b9d74,5cb36c13,20a8bb0d,b5cb8578,de49ea4b,c289043,e2ea810e,87a73339,aaceed7b,af47b5eb,97aca554,d80a4f78,d439ee14,4b2d0fb,f8df5e3a)\n,S(3a174294,4db7f2d7,2498e2fc,e2026d5c,f8600ed6,958db97c,24ac0de8,417f6def,e60c566f,f3fd14e2,2ff0cdee,45c4c2,31797951,7aa0ca68,af91a5,e41f5f60)\n,S(2213e0a1,3679040f,73e4d68c,bb941665,6ea83640,33abac76,2e64d509,48a97656,2b87ce0f,bec2728a,aae6586c,bc6d9a89,a4bb9b9a,211de522,cc909279,5860791c)\n,S(382412a1,ab396523,8b06c47b,e941051a,bef3b215,16efb280,3ff3a1c4,824954c6,7cae8b14,1938312f,ba482980,ab9073da,c66c1ca0,d746231e,8ba8f331,4cfd9cea)\n,S(3d76bfac,89c1269d,53b6ded6,bf13c785,361b1fa3,84be2ea0,d582ee43,f06de56a,18b1cdbf,96d12859,bf887b89,6d8f2e6c,a08b892c,688c7687,8294974d,af6d6284)\n,S(715b18a0,68d86cfd,41a20541,847b36a3,ed7814c1,b5528751,927042f9,85e7ab70,2b8e0228,b0a4d39b,85a3d3d4,f5a10db,c6825659,f4b967c,361da449,24890911)\n,S(a31a10ea,e38e6a00,ab4f004,8b45c8a3,e57856b0,d0b64e47,fa90e234,e17943f9,5d4b5150,7d3f3a82,87e5d51,6bb30b89,2cb9f540,96aa5962,1f77e028,480e594c)\n,S(b397f965,1dbbb6db,34708066,a1743511,d4a16332,95f53772,72c43a6d,6e21c1b0,673fd327,45bea2fa,748a759,30679b2,471e4004,423dc8b3,f34f95ea,f88d2b8d)\n,S(2e4b865b,c1245325,1ad8b3f6,e8776bd1,a5878b93,ec34f847,65af84fc,146d9919,b3e7d479,661ce034,50094432,c538f55f,c8be8693,73a91fd0,350c8089,ec0d76f)\n,S(9a38c790,7c0751e5,ba750bc3,485b4a4,72b661c3,63a3980e,feeaf59a,98533a43,dad7ac3b,65493036,d30068ca,72808000,d54b42d6,d263de93,a1ced3d8,fa82ca71)\n,S(5599d251,3b3c8337,f8af18ea,70d1d2e1,83f3e363,63735357,2b3f6cba,b4371d9b,7ccddd9e,ec8dd507,69f6f633,cc70488a,6a4e322a,2716218c,5de50fae,45398dfe)\n,S(610c472,4699e983,530e8a32,b60a8077,c7f60226,cc3b2010,e49b2e30,f2a98afd,42157de0,fe6d8e53,17a3f565,fa450f53,8755679,6d98c7a7,ba0b3e96,844d25d1)\n,S(89c082e1,1438e2b5,6a4bff8b,cadaf804,c9d11fa0,8f47bff5,39cd0741,76f24a59,f4dad4e6,19ccf814,e899d48a,904a88e0,6db6ab19,a2e06a7,b359db9d,cd0ad0ec)\n,S(bf810fed,48d1ec4f,77cf3732,ed10a44,df9e4540,2e1a1e1,6b29c82e,32537565,6657fd30,337e294,fa31d30b,409b426d,546a47cf,38cd23bd,75aafaa0,b527d66e)\n,S(3b1317b8,bb3c9c91,964ce369,19ea811b,90a8bd5d,ebadabc2,d4d1af3b,50fb3524,cfd5988a,78aa555b,595531f6,5fb0e3f1,e756c1db,626cf60b,4c1b17e6,caca603f)\n,S(88520439,61558d79,7b084143,783d9e03,791e6183,c932d1a4,17eed30e,bcec0bd1,271097c4,4c723ab1,c1d13e9,93b7b232,235957ef,f21a13b1,2b3d302a,ed46ba1)\n,S(6c420c30,343cf500,da0cc05a,c315d3c3,45ed8aa8,e0551bb0,32fbc512,732f34d7,fb3c0808,698d38f8,3310fe1c,15587cf7,137bef2f,666229b5,bc789dff,1b2f1111)\n,S(b12e21e0,e060fcf5,580d75ef,22e8a800,33e2c19,487d0660,615f7d51,ba00e430,3931d63c,a6e0da2b,295bd22a,4bbb27f5,fb52d89a,3c4ac36,795747e6,e74ce944)\n,S(4fb9da54,4da95655,c0de5654,f68c2820,a7884734,4bad6934,e671d56,e7bfe11d,16586701,9bc89b28,f5fdec40,78a2a51d,6e087ee4,29456cf3,d258b97c,209d44fb)\n,S(18f8f6ef,23bf75f7,a7811025,5babbeff,792109ca,5a550472,245552e4,35588e7a,e712abe6,3a374f25,fd4b18c8,4b1451fd,ea77692a,43c0e3b1,cf3469fc,7a9acd55)\n,S(d730d167,1bd36654,7188c07f,78d82ed5,6775d7ef,bd0967e6,1abddea7,7ed6073f,49c4bf3c,ad4e31df,d840045c,aa8be15e,43f90196,818e30f7,b379c74c,1d866553)\n,S(a915fb72,7d4c40ab,547c983c,24a4f019,1f5e89ce,7ab0636,e903aef7,592208a6,fdf28a3f,6557f27,5813ccf3,8d927f40,b910c5a9,ddc3c83,14a48eb1,6a5956be)\n,S(7abe8d85,bd95c580,cd9d532c,c1295f5a,ad5168d7,e3dcaf28,b19f5e76,95107157,694abe9b,9a6ed0d4,c3ac1db8,79b49038,6fe9d2f9,443647d1,91533fbf,aae3cc02)\n,S(93a83e8d,c80c7cd7,64dafff1,edd148b2,9c336de7,cf978b14,fbd35625,c965942c,91ea5775,db50bf9,a7e3f79b,77c7d5b2,deddfa08,a1d455e6,fa21e547,356c634f)\n,S(a334ed87,dfd2e1fd,699ce1f0,a09fe921,487f8321,6cdcf75d,fc8d7e5d,cbbd1af1,42a0874e,d148bd32,ba4324ae,eb0260cc,7f0d20f3,f43388,38904640,8f7ae7e0)\n,S(811597c1,f4129ac6,e150c231,bfd8e4b8,4ad441ff,2c698486,affd4ac4,c22bf8b5,5f7fb47e,11b476cd,acce1552,95ac000f,3acb3838,6ad3c6ac,191dc12b,d1e299dd)\n,S(cf754ed2,47c9eb9d,24f3129c,4b4cefd8,94b5e58b,832f158e,2e82911f,8177a59f,262cb605,2991777e,bd1ed5de,d2e7ce29,76dd73d1,ad4c9bf4,9fb5d8fc,fbe4a3d1)\n,S(290ec604,a6b4d816,ffe75715,419b0f33,452530dc,94f48883,b3982161,4592b229,4235db3d,df2e3f1,b61ac412,a90f543a,ddcd519,4f4a315e,d889b32c,ec8f76e9)\n,S(1f90b869,4bf9ffb5,7697ee72,29b7f20b,52b47997,35efd7f4,1e4b9102,51886858,dc3d7a68,abaf70b3,c84d533c,48ef38f6,9be7d26a,13c4e834,5a7bee29,c6d3c87a)\n,S(ea20b4c0,931087a3,44d5642f,6c018aea,2da5f189,a4d25968,96110281,88545ba4,f9adfa96,f945e745,88d2ab41,e32ef5a,76b370f3,f0362e57,129c3998,e32cedeb)\n,S(b8bb88c1,21948c01,3a61fbf9,bae86eda,28e9bb4c,6870b0f1,7109e5b7,c00cf4e1,90685129,8607d7ac,25bea5c6,1cc4feb4,4148e07d,2fc3fe7e,449773d4,8245019b)\n,S(2345a244,f2f411f6,ef091904,81eb9083,9128f7d8,67e8b910,124d1e44,d116c529,a8eaf530,c69b792,d6595967,4f23b9,b0e239bf,b69d05ea,466f9f5c,9bd5affb)\n,S(75aee824,38bb03a9,b9208cc9,b725f13a,1fee1aca,20ed129e,e5ecdd59,b92c89cc,fb6bc8a0,fe0f684,ce4cf153,2053312f,b97aa1e3,739fab8d,407db39a,737ee51b)\n,S(ca46d3eb,c981eb1,764867,c99cd7fc,c414bdf0,31b2c9a8,96829ebd,f31e2e36,46363355,862a64b,97541f7a,7fc5cf51,ecae168c,c6530db5,3a7f2394,2e87bb96)\n,S(4fc1d258,575c4830,bc7a03d7,6a259406,7d633e9a,da2c734f,45ce4d9f,99dbbe7d,cbdc616d,fed2bae2,9312c5bd,9e195bb,bfdeb2c8,d1aee5e8,cae8fa0a,4bd6baac)\n,S(4edae08,54365c27,f6ad83b3,8f68c7d3,f0a09c6c,153791d4,df98b5f2,3f0b9be,cdc8a485,8ac66847,c732a2c5,4be86af8,d6d637f3,e62c7802,dd71c7b9,2eb18223)\n,S(624dca60,16beeb28,c35bef5f,e97d320d,d725619c,3faa7ca5,ed79d491,72b12469,cc33b49a,6fd125cc,98d65a81,c0713cb6,2a7e687,276e7fb,641e2f76,52646c12)\n,S(6738d38e,760e50b0,6a18a9eb,b5e3676e,c38f3487,e34461bf,2e5d52c,5bbd6b4a,c3ce0343,9b9f624e,a92eecc9,860ff680,63a907d5,b57c43e,465ead5b,bef5e709)\n,S(bcb74527,10f178a9,eb48655e,3d373b56,8f02036c,e9ab826,4ab7cee8,52f7f9c0,4e928392,52ee05de,587c91d4,6eaf5e5,92ef41e1,5a2b5c2a,da9e4512,c25bb416)\n,S(3375c7ca,1b5fb4d1,1838ffa0,c21d7e03,de34ca5c,92bb4592,bb4598c4,2b490382,8c284e32,f016d186,875b87d3,3bf4271,4b9013c8,ea159634,b39b7365,7ea837de)\n,S(c347409b,336c0677,ee95de61,f93fad4,738268d5,6f31059d,380af075,60e496bf,37dfcc4c,c13bbfa,5df43c69,eda0c68c,42de70d6,ab64a9db,a4ed22f,1cec3fdb)\n,S(305ea4ad,ce72ff73,976544d7,a3deb346,452ce997,f280c3a6,106b7c9e,3b9bf5d6,bfc33cd4,ca178310,c4caba86,5b87477,77e9e572,4278f0f0,56b86a86,1f2e13ea)\n,S(8333f714,70e57841,312a33bb,4f1463df,d237651d,fec4e1a6,40c0ebe7,478c5a9f,d39b03d1,11657c2e,19ad78d,3e1208ef,f8505695,1bc67098,b891c42e,b427bcb7)\n,S(500af03f,eba3b646,a0690f0,74cac255,804c8f8a,c2aaa1f5,f5cee4e4,41913e7,5e67542e,8a8f0411,e9985a76,97ba626d,f0607f66,9f9c11da,826b47b1,a52cfa2a)\n,S(e440385,c16bc15,5023cab3,3e7a48e0,5e7e0c57,e0fe848f,26b146ab,237a3abc,dd8ac982,b627fc9d,7fd83c26,51805de3,d7369ef9,2e970664,8744badb,3db060aa)\n,S(83eef59b,b0a26fa6,60c94e45,c097bcfc,8622c37,cec46eb3,f9e93aab,d0fa6438,8b51311c,ff685570,d9aa7a66,5b47a3ee,b6bc05c0,a2709421,c73ef814,bc703723)\n,S(930cdc95,f723a7eb,d698c1f2,46692f39,e1add95e,f8cf84ca,171d4700,2a7d759c,ff161a2,31fc8964,5bb6dbb9,f595daf4,86cf01c1,944021ff,6ff793fc,2613bfbc)\n,S(4f7cb0a2,c83f3520,86085b19,a6e5ccc1,b0beb700,35637e6e,8a79fd78,337c2616,aa32192b,82831ed,a9412f4d,6ac6d148,f68ef492,5b438cca,12a73b37,b4a8fb74)\n,S(c7238fe3,17590be1,d8403ca1,3eacc6b1,71cccad7,e2e8f659,f11357ad,70590424,59079180,90bdc74d,aa06abf0,940519fd,d09f24b8,88c15cb,a632b814,fe8910fd)\n,S(c6afda17,e6582427,95cd34e3,edefb600,70c73737,2d99f6c,b2b8dd3c,99874880,d805463d,15d185e8,b4461293,b6e6f6fc,a0b58a49,eefd4d0,11ef48cd,da5a16a4)\n,S(4a14de26,ab18ebc3,414c6856,1a77d62a,221821f,8c216496,700bfbb8,21d95b2d,8037ef39,d1f190b1,a24078e3,e554ad1,cf86d5cd,f731478d,b34b6b5c,c9174314)\n,S(cbcd6696,547fc496,8c6e7ba5,4caa4a74,43764852,43f479e5,558e2be5,77bbad00,8e0099e8,559db5d,dba0bc72,21505ef,d42c1c95,876539ab,19dedb2e,8e561482)\n,S(37f168b6,4b41be85,46abd1a4,7a5ab3dd,5d690661,e41b16c3,87025106,caa4e2ae,8c617348,bce3bbf7,54a121b2,37342794,5d734e38,da08066,c4de59da,e60b5c89)\n,S(3aba7081,55dbb35e,dc4a3fd1,1db54446,a7501ea0,d67b0286,8d2e6d77,99162697,829502c4,2dd1105c,cb046e0d,41cd68b4,38437394,b93f17de,5534f014,270c4602)\n,S(84842bf5,fb46c697,44eca720,7b1be6b4,e5f5809e,eaeb3e9b,1058eca5,4498cafe,f4210fd5,b49f6484,2efe3089,327673d7,95642ad1,73b6840c,7323b7c4,16d61fb5)\n,S(88383dee,ee0db44b,959edd96,feec2bdc,73d6ab56,9333fb3c,d4b18b01,ed8af5e3,8f0cf362,7aba3ceb,104009f0,baf84ed1,f57402e,fc330f10,6e0b45d5,4e0626ed)\n,S(ad0a97ec,2197c5d7,4e8eb9bf,9798a24b,aa7c3e5f,ad6ac263,1acd5109,5178d8f9,72b352a7,445db832,2e33c93,5619e7d3,266f254,64a4c4f0,96051ebb,1e37065d)\n,S(9b727e4,d107418e,1f62b499,99c1f8ec,55ef6e91,a9a10ec6,8905be97,33903d85,27d6456f,5ea52aee,a190dc81,647ce31d,15ac8c36,de65685b,4784eaad,4a32e41c)\n,S(e86bbef3,8d740a44,7a2cb0d0,a89c2106,d85299f8,c38fa540,a7075efd,3a02fe03,8a9f75db,ecc532b6,ade5be9,b855a27e,185895ca,d6a6549c,f6c4c1c8,7e151b04)\n,S(b72ac468,9209207,2cb735e7,d424a18c,5ef097c9,3a9b96ef,1ab7e29,d0f379de,89111544,27b03712,e2236fcb,12cbad35,98ef794f,b8141913,aeb1ad8d,ed9e6467)\n,S(f8f5819b,203b2bfd,ab2dc532,53277103,2f9caf34,c53c7ec7,7253b314,2e731ff3,433fa831,3dab76fc,aad5bafb,12362126,6d8d7c09,9d513ee1,1b633c6e,e3f1e96e)\n,S(8e4a8890,a15da3a6,c14d2df7,d09f6157,d5dc95f7,4f9518de,8aecbc4d,c0ac62f2,c06063ce,1d3c2a24,2494a1cd,db381513,6200827b,78ed080e,3cd14f4,5e545acc)\n,S(b1f6dbe2,ad730748,f906d1d9,160996cb,f3f2450c,fa656856,e34f2481,40767081,ee6b2a03,3f3245da,76d01bc6,e61afcc6,94a9e64a,4f0256bc,62acb5a1,82e45ae2)\n,S(2139dedc,a8365bce,b9c49cfe,3834e4d4,27a46750,d6b0f0a3,4e7672d3,d12509b4,b20a9101,b63be2a5,28340f58,893e10d9,d3c63fc7,77b5c6e6,a9a67193,13725870)\n,S(da3aa585,85c00e41,87db0240,547ff665,376aebea,a24e5aa6,67d477f3,c4d3b914,92405390,d255ccfe,a6bc7dad,4fb1676b,c741e530,cebdaa3e,669bfabb,d1c4780a)\n,S(89c47de6,84e1eb9f,a5828e65,dd17a852,7226a75c,3d113102,97f5b8f6,5b67b210,970bc229,d60b00a7,c2354a70,37ec8569,ad615faf,ac77ddab,f5847a09,c1fa57ea)\n,S(48ea67ce,db716a95,6b6066f1,e5e9fc71,5994a4f6,f4e2cedc,bf0c09f,4f8c8fd1,513e45eb,159f9865,5ac821d0,e18f4e06,fa3cb8e0,9d45c3f1,8d3c3bfc,48ff3da)\n,S(c5ae6651,ded2c479,a3b6c9b2,44fa35f1,2eb1eaf3,fc78b529,42ffab7c,4e33a1cf,ae6ad807,435d4a9e,e8bedcb6,3bc804e7,e67e9418,6494bc8e,384b29e2,31af8cb2)\n,S(24e485b6,7c27af76,e18ed116,90c9dc90,73a0b80b,e93f5381,6669e2d,3c0175c9,fcb183d8,696805be,789d83fb,a197fd24,996d3542,b2f3eb5a,c207950d,f9c079b9)\n,S(3bb47a19,b1bdc527,a8fe262a,ecee2d7f,1e772627,e5cd5c70,eb2a8c39,f1977628,2d10cdb9,91fb5042,905f822b,68846390,a922da1a,7b7b313c,47edaa6,85217fa3)\n,S(7d4233a,cd50bad8,71e0587d,e10204f,6013a784,b65b6540,73307364,5f3078da,be85d3d,dca838a,1f35ca11,1333e943,fb498cdc,63258ac8,74bd6acf,2b934b77)\n,S(b5d0d791,b6685aee,2f599505,d01bd3,d41d5a1c,531ac7fc,e6c33b97,cb0ed264,47fbad30,413084aa,619d7bd6,62502cfb,9648e64b,e757d6eb,24fd5e2d,6b1629)\n,S(bd6178e5,b1c558ba,432a89a0,482585ca,40ea9922,7c94ce,23f5b081,d606c7f0,9cdc6bf9,d32b98cc,73bad7b8,c08914dd,b9a8c937,913eecca,fff72dae,fa1cddfd)\n,S(13ca834c,a5f41671,ce7f0978,a310420d,6a82fc38,fcbd997b,88a1e79a,66fb9375,ae32a0df,7f269c8a,744e409e,16ec3d8a,eaac151a,99bdd7e5,50287005,6f48f6a)\n,S(96322802,87add117,4040f802,ed5c71c8,5f924398,1ee78480,4f16e5f3,f0fecb6,2d07de71,cfda4b43,44baf838,7933a372,3d536411,7e4c0f84,2b402156,3f9b56b4)\n,S(961efbd2,ae687808,bbe275a2,cba1769d,4ca537a4,1046c5ab,ff269c1f,b9477ad1,9d22a10a,294666eb,5c816bf3,c4dc2c44,d7836202,e15bed89,e3d28822,8193251d)\n,S(4e7162a3,8926282,84ac4df5,88301fc8,5d91c869,2fb854a3,ffd34c47,7b216ee4,6e6dc88c,d91b9702,cb38cff,2d6a38e1,d512fb46,9d85f878,8510ed97,2704ba27)\n,S(6c1f707d,51b1d3f4,ab261d52,6d0106e4,3e0a5b1c,76a59868,62e9d97c,bc6e3e38,d2563843,5dc8b102,c8f4ee13,dc345f85,289cd499,9bcfbe20,1bf3dc7e,7dae1f74)\n,S(3ae98e6f,49d363fc,8416f965,4e57beeb,d37635fa,4e78d8eb,77caae69,f2201798,ffd95480,fcef0686,9ee781ef,cd2693f0,e6be2e27,f207411c,39a18465,4d2c3cae)\n,S(eaf94fc3,fae4eed6,35382e91,2cf963da,2bbbda8c,3197e522,e0054cf1,4cdcd5b8,a838a439,3d4bc0ee,a57e6235,5dacfd97,7d70afc9,16e61209,10d13fad,7c1c22ec)\n,S(7eb52e7f,bbf5b802,2fa6d66d,801c3632,2c195b6a,4eae4050,5295612a,a184e2c8,b4591e5c,c66521e1,b991f63f,456306ce,cb2e7568,5227788f,a2e9a75a,bd58b384)\n,S(d22b8dd1,6ff24603,5fda0ebc,77129644,a8469373,99b2c7a2,60d8e985,d4f2a215,7a9a092,e8473776,6718e2b3,9068e163,e06618b1,6d6bc046,b33e2d76,8649611f)\n,S(8f6eff05,f746f0e0,9b328ec6,2089e575,ca64175e,d950ae4b,c67a7ce0,83afa1b2,3681243f,ca51a6c5,7ac92100,f38df1fa,d1093fd6,ecd53231,bfc01fcd,89e38305)\n,S(ac9ba060,ff520335,9a4111f5,c8c536e8,e27a79d7,33528ef7,9da7b21,36243a07,2ba3cf76,3dfc0860,ff3333bc,e660ebb9,c4e5a988,909880d4,1ceb4219,89f23f77)\n,S(d6896830,62bec27c,815191b3,4addf36a,cee1cfe7,475d34d4,d83a83cc,6dce3992,9f038f46,529fb86,30b19b08,db11c630,70593570,70bc51b4,fc1ced24,f43fbd00)\n,S(e815019a,f6923eb7,cf963f2d,476db569,bb04cc7d,78a0bbf5,3b422ee1,caf43b70,984c16e6,593d8642,de871694,800ca14a,a103a61,20b91c17,4e06567e,2d731c95)\n,S(3670e86e,e9aaf036,40136ef7,3344152d,c792c8d5,a064c0eb,a511e14c,41d6f7b9,eac7dcca,e491cbb7,cd27a522,a7db96cc,7d300c35,7413433b,9bcd430e,152fcd33)\n,S(3d03f819,4802149c,c6428aad,851bd879,189c557d,cc9ab1ff,8e2e4cdf,f0723308,1f56ada,27f2c923,27ed2fe5,88d8736a,fb68259a,1d5b1c14,7f85669a,eaf47615)\n,S(bf2ac011,9e417837,d4815c9f,74351869,4395ae40,77429013,7aab32,980748c2,17a47bb9,6f7a3e7a,31b5a8ab,2adc9fe8,98fd94d2,9ea7c3b4,a5b6c5bc,9c367ac9)\n,S(c72eea14,ef09c0e6,85c22840,95e73e0b,6aafa64f,9410eb0c,97f6ad4f,64dea571,9a46c93d,256f67e4,1ccb609f,4ce94390,df9c91,38a9d2db,9b993456,13346031)\n,S(25463446,6da168cb,2d816bdc,3c9e3a43,7ca3463f,8c8a83f3,62704996,c1bb5b96,3d69cc73,6aca2a,cb97e1a3,cd57be14,243e458b,305df59b,3e3a67f9,fdc17b6e)\n,S(b40dbb03,7062dfd7,7151013e,7cb0a921,15096a04,c39f7e2e,66188aaa,368c49d2,34923fac,7b1a4570,e824c3c5,2edd775f,ecf93573,2198f801,8f617db6,474fb519)\n,S(23fba417,ff084b42,afddc4a5,c070305b,553ed7ce,1311e5d,4c1f7b2,772c9aeb,af4a342d,f9346ead,89b3caa6,6a3f187f,96f2b470,c0a26752,76e895cf,c5ca4adf)\n,S(2e7ecc9e,d4f21af3,a3118799,d1ab7e3,a30d011,edc53e33,93dfdc5,6e80927b,b3959fdc,f6c4876,36813bfd,e7e83b4d,7ee0f1c3,54e0491,f3195b4b,aee2df72)\n,S(1c68c34c,8aaa0f2c,7daa215a,961180af,3938599b,1324aec8,7a1b3841,710db2c3,d8d68179,71acb598,5cceec45,fc5a754e,e002d09d,4be45e8,ab6d2bdc,ad094b24)\n,S(fc0ff082,ca6708eb,9b9294b6,fabef142,2cddb5a3,611dffc6,f06c05e7,f1eeddea,6f67fbb2,df22611,e2f1e796,c67d6c3d,14b17f98,2b6e39a2,7bef257a,d6955b70)\n,S(fa683ae5,8dc85748,1a7ddedc,708865b9,267e9fe2,e485a243,1d005e47,64130548,4d9759ed,76326207,891a9649,3b4d2307,b9694fe2,c15e2327,a79dced,db8277e2)\n,S(3cfead76,5ef36c3,fa9903bf,6d43cdd2,46ee8fb3,3fa1d13e,42fe9818,6d299009,85a18ee1,da24ebc7,3dd87aa3,ca1e7565,8f868fec,50225e2c,d5b5480e,cc0ccd49)\n,S(487fdda7,364dacf6,2fcec7a3,fc2dfd27,c38079ef,d48f0220,85c62746,2c8ac658,1479200c,b06440a7,186a946f,83a137d5,7e5368b6,7ef8a66a,9540a131,e4bc9b8f)\n,S(f3e413ff,81c2ee72,74c079f3,451f41c4,bbe1e51,f7c3a1ca,513392bc,9edd487e,46544553,79a33a0b,13fe5904,504cce47,55d0e2e5,6c4163a5,14d5b902,906caf54)\n,S(d93692b0,53ad5194,b70b9be0,1dd80926,e2c93754,328b3eb7,bc85c45c,63e6258d,7221837b,3276bd2f,9ba0981d,883cd68d,97d2ce77,9dfa1073,d59b01e5,df311ec6)\n,S(e85af4c7,42fd5424,2964eb26,b531fd77,550d3b2,eb64bf39,e97de203,ffe2d28,8368322c,e40ffca8,49ff1a53,76cacb17,98fbf4c4,38f58690,54dcb642,f805b9f1)\n,S(9e4e35a2,d913a2e3,bc931c59,298ef6bb,3893b086,ee40c978,430d8436,49fce4ab,ccca94d7,d4bad95e,c15b19e7,9555579,d47cec60,9f42112d,3d992035,6d31f7be)\n,S(7d72793c,dcd78afe,23e8b000,41d67983,6528b1f2,6978e262,4d022416,7ac5e741,1189804a,2558ff1f,63a7ee1f,ad5f8ab7,50a412ff,a83a9783,996e5f26,637100fa)\n,S(3b8dd2bd,ca65d7de,6a7c55bb,47dd5ef1,5ce6f533,96ab335c,84c0c9a8,4e06a7da,2ac78cf3,e1baa981,b27dfc9f,e1b7cd2b,1ed4c37,f96af6e4,99bca1f7,de62aac)\n,S(128aa84b,3d920356,db64bc95,b52d4c8f,3054cf5b,22c6039d,1d21ea60,b2274c44,5a748932,6a98019,824a9d7e,cbea2de0,5ccbd9f5,a2cc5dd3,ee0b3dcd,a92e8758)\n,S(de8b04b2,c761b876,4c41c344,a3b57c41,fb62e6b4,ba25ab19,8fc2ded,2849e151,134ae148,d89de734,a222b656,b878fedc,886d5928,fc6bfab7,bdd0a74c,3753f1fb)\n,S(f643025f,9fc3824a,6ce70677,23475aa8,8df24d59,682f5a6c,b18b1c0d,5e297017,24eb7c8b,e3de50a7,cb473bd8,81db3515,8f9484f8,8574af66,a15f920d,3986a049)\n,S(ce2e5454,54324680,7035594b,1aabcf6d,5d8cad20,729a787a,7e01b61b,106fdf19,f3a2e5d6,745a16cb,3403a768,c1de8f73,cd26388c,c10f296f,f00cf9f5,209b1555)\n,S(bafd293,dd071a21,25a857c2,6acc5afb,ea79093d,3c9771c3,cd3b875e,b74b3280,2d56802f,b8f26950,4adb2a51,a91ad2f0,d1ee6501,f8c9279c,6a27b524,8dddbb70)\n,S(10e0909,5dc7ae30,9f1afbfe,1bcad71f,c66489ad,56256c3c,a648f554,c000f414,47a5a7cd,968dd158,e8436399,40c30179,3807713b,c09fb0d,83c6c851,c6b7029e)\n,S(73b8149b,4e7bf050,b6cd9f4,93c85bf7,61062329,2dec76a3,2d7054b0,c794da63,44cb915f,b6813c71,dff3830b,ebb6888b,76312778,897903f1,d9988c37,3c362bbb)\n,S(59a5dcce,9773617e,73c529da,6015ca40,bf923956,339a366b,84a69e23,d0a60fd4,4c62abdb,c4453ffa,2b806a6b,b823fbc1,59f57f23,2234c8da,a471192d,3081ee09)\n,S(1ad2aae4,f571c6ff,1abfd45,35b3d085,1aeabdbd,b3a340f6,7bef0f78,f7afa954,1c394b1c,94539758,85d72498,b36a3be5,56b4f80,8ef52977,b0157885,649549b5)\n,S(2403f66c,a6a7d60a,254b51e9,32cfb700,f37ad73d,193f25df,6024bd51,d0f337dc,9ad75d44,24517aff,7df86c,9bf4f315,cb40199d,4a2a5d5c,74044c4a,9c79d69f)\n,S(f3139f4b,50dba596,87080a7e,b19bcc34,2b58df9,26576bc7,dfdc8e7,4914c524,fbaad228,ab34e8d4,451cf6b3,a1dbe225,bd46bfc4,8a4bcd94,10c150fc,5636c687)\n,S(ec415f8a,81b1f559,714dd790,2441eb9b,c5c7bcbd,e87190c,c109ca04,a3e75149,9b90bd46,d27e0200,369fe995,3b50752f,d00b9472,fd31383a,f01bb88f,b223bc5b)\n,S(5e336f17,264a53e7,d0899bf8,6f676440,f83ea0c1,5d53fae4,f19a71f6,998a3ca2,2a86fd9a,8358daac,828d42e7,9c6c0fa5,bf977cfe,56899db3,27ea32fc,cdf09f3d)\n,S(98828ad8,a6ee9ca1,37f9ec2f,f0cac84f,5e664e09,68455773,3f8fbab3,ec38570d,ae7ba3cb,e617e9e1,6e67f34,f69af863,3e69c9ca,1f46b182,88126f16,9ec0e548)\n,S(d6a7c2b7,169348d5,1d98f0c,27464732,6f67ad5a,4809acb1,6b783fae,36808436,698cc098,ebe430c5,4dc74fe5,dc300f64,7ac0a002,4109e002,d2f43ffe,89fb3d9e)\n,S(9bf4a4ea,9fc4b731,5391b653,1d3ad3a0,f0fbaf59,b99f76aa,7807c442,f8e63bef,e69fbade,598fccf4,6f1f0931,f37f3c55,900dcc50,64e54ae4,191796fd,a4791068)\n,S(38a09628,aa450076,3826f384,7e63121c,d6e9e645,f6ee0f,8cffb106,508021d0,5460c8df,56fb7d67,992928c7,fd969f95,d29de37c,14c2c9a2,2d60d661,6cb7c383)\n,S(dcf8afd8,ee73bc87,c17c97c6,807fd3e6,a9c57a1b,cca058a1,ad24f2c2,6e9728b6,efee9612,3e78cfcf,1dc3132a,fa4ef492,12369710,fa2e8e99,3cc70b48,6ba78709)\n,S(9c26ca1b,f52eb7b3,a0d40dc,cf546591,38945c43,41e0c611,40d0662d,1033420f,4bfbeeaa,ece9f2e,e11cc672,24749c3d,e12be6d2,d3d21d90,ed742d,31541ec)\n,S(2209194a,6a3b76,1ddb2b1,3bca12f,3697248,4bec29e3,102d7734,9832ae6d,7dde1b85,cd00a08d,38035f68,fdef0576,c458476a,93eddfc7,4bd4927a,cbd64543)\n,S(6ffff27c,ce5efa3,a8f8af72,edcfc736,9874abf8,5d15e1f4,cc71a186,9a7a29f0,27a0e163,bcdea297,1abe52a8,a92fe191,38b839f4,67772c83,81504328,fad94a2e)\n,S(34e91b7e,e2c5f407,8a9d1ec4,7e2b2c02,1b8480b4,8c3b6e47,19cacc36,b4250382,8d60947a,42d88728,e0d67d2e,e9a0559b,55cf3887,92c733a7,3ed50b25,3706cb82)\n,S(3b2de979,9106333a,98504128,e2135e5d,7deae86c,1c921c58,529aff14,12fd62ff,4ba40985,8c5b594d,f4bf5e81,bd7eccc6,3a7bbbaf,fb32926e,9a47503e,f031d86a)\n,S(fbd44acd,9e593ac2,12fd1f64,c4e18d31,c3b3fffc,ae1c88c4,6aebaddd,ac608b2e,9f4feb5f,2ab68e29,ca64f458,d162dabc,7a05c552,2e38c4cb,74529e3e,41d805d6)\n,S(d21c3321,bb6ba2aa,dc0cd52b,be68716,864ce1f8,44107374,c0481c0d,91729b39,2b51f18,7b95725e,f74deb00,8e9d96f4,f1a9bbb5,c9aa28fb,275f700,bd964566)\n,S(ea2d29,f85855db,78808749,9ed79c2c,614406c3,adf64663,8756b60f,16166578,33971e79,39faeedf,15b14607,37fa7112,7d6f49aa,fc423f63,783e808d,1fd10369)\n,S(2a1a6709,301ba6ef,c5ad4958,e29fa73a,caea18e9,e01214a9,65291977,8bec874a,56c971a8,d29d6641,9c05fcc9,9b0c0156,a1ebd007,bcab2cec,b9e920fc,85f796b9)\n,S(aa870dd5,6434af8a,36d89551,a7109cac,c1d0c5d9,f5e43630,17bba88c,579cfb6e,d1fab1ea,cb5652f3,cd4d5836,82aa3cb,3b1b6854,c0ec1157,41486028,73625dd5)\n,S(e979a3bc,5165f53a,60042a1b,11e8062a,e74f35f2,d70aab2d,b250a4a6,f4507507,4de86928,b9dfb2d,8509a1c4,8efdfbd7,a5432933,e3f12789,cd51ed9b,b967ff1e)\n,S(620979cd,f37b1cc5,b1fe3e01,f761b8a2,ffc29bfe,8afb7cae,7ded5cd,37f97829,cc971616,6ad43824,4c6be489,7cac0b95,afe5ed6b,11be673f,d67f0d89,6d58f7d8)\n,S(90a5df7d,986198fa,70152c7f,e2abc14e,2c80d5e,6b75b42b,aa042e03,f3aa00b3,77e0ad,2f3e1eed,472a543c,3852925b,327e3eb7,aae59030,2d7e12a7,862201d5)\n,S(17802140,e10d8be8,ef210b69,b7fa1afc,16a85d9f,ea1150a6,c6e5e234,cf638446,af4982e7,fdcb7a8d,b6478b54,a5bd7cd7,c48d1dbd,2a3d003,7e87b6e,13c9f5f0)\n,S(1f2b8d3c,fe515cd2,53f66b0d,59fc51b1,4cf75ac5,d9c7b4e8,4c75d92b,f0380b8,6902b31,19f38b04,5b979f94,cc140481,d4e6f7ad,b3efe12c,4de1bfcb,c71be72a)\n,S(aee51eec,9e5dedb2,1619d114,5594ea7b,27e21a4b,37accccc,d5fe522d,2e46d29e,d40ef18,86725504,fca42c2c,b8b80dc2,c1028b71,1bf3fb18,9fdd579d,f7f0ff8a)\n,S(40fe6d08,b714ee12,a4d643b4,21b331c4,fbac165b,d7cd88fc,ce35a873,875bed7f,c32f1cd6,3083a976,6b7dd8ee,7133831e,6796709a,c67953d3,4ec5d8df,922d2743)\n,S(5425c555,8a6f9068,946f7075,db347e6f,cb6c723f,c5ff829f,1634fb2,13b3c820,c218eba,db4e3ad6,e41a28ba,129a0c1f,8626ae2a,16839b77,ba12257a,a6aa2318)\n,S(83663c0e,f024207e,16ba74c5,ca534d37,733a7dfb,b2d531bb,21a28243,d0572a00,2699a48b,dc9af87e,bf18c9a0,929359cc,d7f2f137,b84fc070,2bc3497f,69c83d45)\n,S(bf931d61,e72f217c,3b820b63,282f5d4a,c929134,efa06fff,88480f86,f6247535,82553f48,bc40dc42,cb8bb098,ecb84af6,5cb3956a,aae7bd0d,cfa9e181,de93c21a)\n,S(1c6e0876,3c2242ab,17e2885a,537bef4,e8920782,9c573d00,64fb83e4,910312c1,b7c14efb,bea753a7,5d8a597c,7f1a716f,8ae4298f,379aa64e,d070ab2c,28e66185)\n,S(9a2cf62f,9eb5810c,31b27614,1592f201,1eb158a,3d123610,99af0b77,7d42c0be,159ac59d,728d1c49,843a0207,e47d1cec,7b9b773a,9ddaad52,3ff27d78,d2767d7f)\n,S(3596950b,393a56e3,443c3b93,b4f8288a,7faa8d74,d26cab37,dd7a5b4f,6a9e183f,f99bbbdf,c566b3e4,e65dd63a,15c727a4,403cbe85,202e45f4,ea5d3462,173babb7)\n,S(6f556cb8,f5da812,24bbe628,6dc4e379,ec12b124,21cd95d8,6bb1d580,a13b5c37,eeee3133,1dc89e57,48fdf10a,1fc0693f,1c09aece,aa27dcbe,919d60f7,4748d656)\n,S(b952070f,fe60bf94,cb14bf68,b37e3e54,bd9b8063,ec8cd4d5,20408756,bd318bff,57996eae,d38f066e,cb3f8113,aab5e4f7,f322859e,1fc075cd,69ad1ce4,3fc48ff9)\n,S(dbecc166,8d94b2b4,8d37c133,26fffedc,3e690b76,87563677,23352ac,1eddc2a5,f124cd3c,e42f56d8,a7588145,e53931e0,ce8b79ca,ba5195f7,3dd861c9,9027823f)\n,S(12dde570,aae95b1c,7cbc2da1,ed2d936,bbfa5155,f61979b3,e67057d1,5fe5e1db,328711a9,c30e4455,e2716e60,3bedf4d9,8fa25d1b,e892ac72,b5be17c2,b25ca311)\n,S(64bb18aa,fbfb7def,3493c920,d2faf9c5,57856710,766b0bea,275db46f,f8271282,717c28ed,e9284844,49cd0db7,180cc5fa,20ba79d9,41c979bc,c0a8f274,3e2e2901)\n,S(a798f4c9,bb3ef48f,d2ba3df5,2b040611,d0d5532b,9134aa28,e21b5585,d2379ee7,91f903cc,a4628477,b208bdba,59ecd246,bc50be70,34620a44,b55e0e9c,214e563e)\n,S(7bfc5902,58f80000,82946c5f,a1a352aa,808fcc59,4bf2ed7f,bc6dad3d,8bab00ed,17b5dde0,3bf6a814,efbed180,3e5f1950,59499cc7,13e727d2,405e0748,2f912cd6)\n,S(23bda819,978c9a09,864a1c53,e0fed0d6,ddc18777,b614780a,1c6fe08e,c35a820f,aab57ee2,7d226f88,6e55b8a7,c4d7a245,7badf96c,9312906a,3efe2cfd,3292af5a)\n,S(8f649152,54696b2c,1804467b,e1619ba9,d37cd874,88db9418,1259d69e,135e1455,b05b39ff,241ac0c7,7e2fad78,da585b09,c98815e1,b368040,d493bbf1,3ab54ac1)\n,S(177ea3c9,e592ca96,e9e0ef4c,87cb00a1,cd51ccb5,1e1d5252,963cfd08,77f30331,57185496,db5e5971,24e55b14,1042ef30,99f206c4,67415318,ccbefdb3,b18cacff)\n,S(16042996,9ab25db9,e4ee4231,7497a607,360bb1fc,96e74d66,cd87cab4,44af2f36,1dfa3d9c,c3acaa95,1f7ad037,bea4c20f,c311a8d4,c2ce9cb0,bd30078e,b0ff64ce)\n,S(10210453,fae1b545,de76c4a1,4b6ea5b6,172ea157,1fa60696,25753231,2630e29b,ec8aa759,5708f292,72e2ebab,eed6bdaf,955b27a1,469758b8,44c2668c,42acf576)\n,S(659574c0,39345165,e35deee5,ab4c3b09,5b873ba1,fa14283d,6bced3f1,d562abc1,1a8b17c1,bbd83037,b20fc2ed,495b890e,526461c7,8f0b8d61,e94a35f1,bac9520a)\n,S(a8a00f02,174b4d3b,9ca825ba,88cb1ec4,4c188343,5478a00f,38025a5d,1e2cfe58,fdac00d9,55b6872a,62a36dd1,cf666423,b4dd6b4f,4558cca6,d931a1b1,1e42561f)\n,S(3ac8f67e,b4c2c3a8,2cd90fce,f612ec7e,7daa1072,6e4f8da3,57d9ab96,56e30414,15f71b5d,17dece22,a696fbf0,2e360226,bfaf685b,6575fb99,68fd52fe,7a21f9d1)\n,S(87c56593,9fc7bce5,650e57d9,37e77642,a1ef510b,dadd117d,2732d316,a4f2ce19,59908fd3,e2b646ea,210606ed,c790851b,4077142c,ec7733f8,613dce61,3431570b)\n,S(6531e4a7,f9cbc2f3,f0448bb7,f8250542,6cf5c7b9,d4a1ec6b,80098799,d5e43101,622a2201,f3c0f766,6e81be2f,22f1ea60,f4b45807,6800fae8,c353c283,b6ec3d7)\n,S(e2a5b419,cf421b15,859aac6c,9beaefe6,29293f39,3beada53,e1ae567d,9bb7cb34,3c20b681,578aef9b,138f852e,90f49526,6d30f3b1,6ea2d3,23dee943,1af4a5af)\n,S(d4e9df61,35cf81d2,21003bc6,e167b6c7,9e912c1c,2dcac775,f7d9d07d,6ffc7334,c8f54f41,513d7bde,3055c7f4,8436c812,898770da,754ed9ac,d6eaddfc,a80f6c21)\n,S(b83ec734,10a1989b,988e2bfb,a46a421e,dc3ce47,d549d838,8970102f,98a6943e,4e0274ef,ea2966c5,200dbca,d8090f78,98bc66ea,44164fdb,31507ad1,e7e5db5b)\n,S(ec57668e,12f0590b,e99a75c7,82c02ef9,88354f47,522c114d,bbdb9591,238d3eb,2b3c508e,81a3f696,389a5ec5,974a1bac,a572c042,69ad2709,25001215,c58ad7e)\n,S(5acca76e,7578cb86,8d5ba7f0,aadfcf40,5ca4cc52,d778712b,785764a1,2afa01bc,7b0df4a4,5e048fae,65a0683b,ea0185ff,f867a578,179c153,5fa93561,54138359)\n,S(bd563b91,6419f92c,43a7c2d,7042fa71,fd88e5e8,41115b5e,36a673cc,93de4e07,4ec5b773,b35a5579,b7c729fe,1cde3b32,ca34f97e,83b989b6,fe756597,3cbc840a)\n,S(a070b055,839d93be,2b4ca25c,a4a6b133,5ef7d09a,268bce7a,fb1406c6,42e71025,d3fe8577,1241be24,ed209e8e,b5b28ec6,e3a0bf52,27f36036,3a7325c7,5eeb6acb)\n,S(9c50323f,c758663,346c5863,84d5aef1,123b4338,eae00ec6,86aef2ed,e19b2f06,1dd9442c,cf588e6,6a3cebd7,bc68f2f,6f270d7b,bf01f088,a49a5ce6,da430229)\n,S(90fe8f78,166e3f6c,2d19bd0,685fa2d0,1f6bf06c,2ea220ba,cedb0f22,ac9c558f,826d63c1,60fe3875,9c5887c9,cabe8f93,905fa1a5,e87a8272,670cfaa,ffeeba13)\n,S(d2f44fa9,b704491e,69488c44,cc8ccd29,6addc630,2fc66900,1703afd9,a2a5d3b9,2de1d619,247636dd,ce1de2d9,75f14515,ec5807a8,c7c0cc4,5c7d03dc,fc19352b)\n,S(17f1ce71,9e3dfefa,106e95e6,62786729,e8ec2bf6,25421ede,ca71ca14,5782b23a,62b51d27,74f514cb,5452cd29,e3907a7b,b39a9b9e,400d78bb,f6cca78f,cfc1aec5)\n,S(5b1dcad4,5974f0ee,e99d7c23,83e48585,24428c94,daa956af,cd692c4d,5a63213f,6958ca48,f13e31aa,c52e531f,886da246,5ba713d4,748cf6e0,de16e0a0,366c33b4)\n,S(ad284e67,a0682585,f18be40f,e966b605,8cc787be,c265606d,12f202e9,31f3067,c86ce860,ac3c3955,28321cb2,508e4da5,abb4dcfd,2844b95b,ede54ce5,b17e45b9)\n,S(9ba71712,dee6f0a2,7352cfad,59f6c0ff,f133b1b1,37ecf884,a537b672,a4275c8c,b910f036,f906a419,21fd37d5,5e0273a5,332edf68,43dd8afa,43070542,b0849b40)\n,S(cfc757d5,171c9d6a,ed8b9123,a2b4a405,d8e869fe,e80aebd,75255454,ee6319a9,43dc370a,c2eb8fb4,4f78940e,b41d614c,ccf2cd7c,c4f324a7,92ba37bc,7e48144e)\n,S(b8288ec3,2e4a569,27df3e13,6e81498a,bc9a52af,80d74bd6,c85eead8,85e0c49d,a0d53c40,d2234ac2,df69605b,1422bd1e,4a1d77db,fb0d7269,13de63bc,a2f96078)\n,S(3808cddc,497c9065,cec574e1,3b82a10,fe2323f6,65a99df,1e724221,3eeb9a79,eb046225,eb6aeac9,5659f1fe,75dd910d,2932cab6,9b4b810a,d83e7681,e0c32907)\n,S(a1620bae,cc99c311,7b3889b4,7bca5d99,4ecfd67a,ad5a7461,646e55a5,19e46398,5cc4b5d2,edc5f7a8,54cc3054,1c7ec571,e06c59a,52bb5cf5,5882ec18,1b07c0fb)\n,S(f1d942b2,bff74aa7,1f9cb411,91ee85d,e6955802,4a4d46eb,53ac02d1,32fefa93,19a564a2,8352bc48,a8dcd932,50274bd6,496cf488,6e2ba390,3cf91631,453f57ad)\n,S(1a4e3836,a34db30,c47ed6d5,9ba6fb83,fcb7a5a,a0002ad7,1b93b154,a5fd566a,745e195f,d94900b0,aee3c5f8,7c6fc62e,fdddc18b,984900c4,20c77ba5,4141cff5)\n,S(af37075f,866d7aa5,9371a08c,1e7aaa5c,d23ee51f,54428fb6,84c09b27,93b432,b32e8869,fbe53ef5,4250e803,facc93ff,a100a84,becaec5f,872d0548,da4ae9ad)\n,S(88e39f4e,83a0d6ad,a1e01ac8,9021a7ea,fdd1f9de,740bc10a,4d572c46,fcee9330,a14f6881,bfaf691a,96249322,37522174,e8a17920,52da7bec,a6c77d4,5fb8a357)\n,S(8e406574,a46e56a4,dd4cf780,9a7ecfad,5a1f9225,cfc2fbdc,6b7bfc84,a5ce14fd,bdc6108e,d5616bc2,3ed52c5a,1314642e,a9272707,20f00be9,62e48945,3550f167)\n,S(aa31e1fc,118e00c9,8b8f561c,479c6427,8676356c,640304a8,3b687a34,8ad4a091,31c95ccc,2520c0db,7c7440ac,7e640be0,7a8ba4d9,c0020b1b,f31418fc,98d9eb17)\n,S(ef278702,becf4f15,ad43fb6d,d0114077,d9f8bdc3,ff4c78d4,d0a2a15,8fe160b,377dcf3a,774d6416,58bf108a,87201b9f,f28c70fd,449a77f3,966ff441,d89246e1)\n,S(d1903199,b9762761,fd02c4da,99fcc503,ac15332f,4be01b7f,a044c5c3,f848ebc7,662ca3d5,9ff2c5fe,a75ad64a,f7044a94,60abbc25,defd0a3,aa6b0e6f,2c7f4f3d)\n,S(682ffe36,6838fa12,827ae055,7e38c12a,bb571227,47643f26,9cb9f1bc,922b07ab,4531b021,2e8fad86,6f6f67fb,d8eac752,1a360968,f0f9792c,a4568a55,855924e5)\n,S(418fa3e0,b32be1f3,f06b96d9,728aeac3,3294ea8f,16f35139,76b30801,81d8e833,dc1608cb,68bb0480,859c9983,6baf9558,9451022e,b9966e0f,498245e0,2183ef80)\n,S(e3f7dd7c,f5898b7b,174cd809,5c7c0890,4188bce4,bd6487ab,e974d979,f7faec2d,5ed5ca26,77d3bce0,15a6cb51,9922a55e,9ac1adc0,61bb0774,503e79e8,204441ea)\n,S(810ecbe4,f43814f4,e658ce9,234d71b3,946556d7,2ba9c3f3,6fa04b,4dc25cf9,5fc57520,81397434,e395a752,560a8a76,252e6eea,b9ec067a,16befea4,1f1bf1ca)\n,S(6dc50f0d,7e9518ab,fa16bcdb,f43ecb2f,745d5ee4,7269225e,36811819,6542b7ff,dfd5e416,2d596f5,b44602c2,20a87cfb,77473aca,6dde260f,856b3295,527bb87c)\n,S(d39c9858,5ba2a859,a6fac25d,602c8e1,fb205a88,7aaf628f,5d1a210c,bc648fb5,6e92fc09,9df932e5,1bd0c6bd,5b6567f,61a1e8c3,93d69add,111e9320,661ad724)\n,S(d7fd8580,59c1a86f,1b81c05b,ee63bda6,8ca93c4e,5ec99e91,88d9c7f4,40dae0d6,ceb56f19,cb3e5b39,64a4c58b,5cbeddcb,c736f0a1,8a2f8f3f,f0758f24,525a8fda)\n,S(2e269d93,319a79d7,513e6f73,918638df,c4b1b7c,4c19ec83,b254d780,dc45fa87,650b6846,4e8537af,583cfc48,caaff61d,f31dc67d,5a48e0f8,5857d7c0,9bea1d70)\n,S(19f396b7,7147937e,bef30096,44b292,2a6e3c6,5b5c929,22b73118,7120224,4751cc23,4d49e926,651a9a29,c2a8a55a,f7e4b25d,9cb4bd2e,83530bdf,494b131d)\n,S(88f843b4,e3689ba0,264d6d4b,4d310afd,85de2ea1,6fbe7275,d33112c7,538a7c02,5dba8024,30d31ef1,412f2310,3ccc5951,66e903a,55bb2a35,8be1e715,27fe45eb)\n,S(b1301f5e,1474083b,3828ba5a,837efc44,21990da5,275f6b1e,bf773b52,5ef14a1b,f9fa0af5,b508ca7f,2345d06c,5bf1e5e4,907f2b19,3681837a,802259e7,7208864)\n,S(63bb3295,b57ac21c,4b96ae49,92b8f3c5,7c23743d,44ba348,195c5f58,d5360bb,f5e6a98,96683293,af6b9ded,f9f163ba,15b44017,120c61bc,c9e51758,f3ac793)\n,S(dac9f722,7d0c012e,e3e1ce88,a99cddeb,9a23979,14c1cf1b,915dd41b,8ce27687,85bd90b7,7f2917c,cf1ebd47,3bfe04df,386d37de,69893cc6,9e79ae89,2255a12b)\n,S(ef05aacc,a8082759,33719aa0,e0958f6e,4be6a6c2,3458f243,f84fb2df,9aa422f0,d6006b80,bf611afd,3f1ed523,988b3e8f,d44be73d,565ef30d,911e4226,ae546f23)\n,S(dedf3d9c,807065ad,8c1e3714,f682ff86,4f6ae08d,6bc15773,53f27677,ff86783e,7bf6f3f,1f3e5ca6,6902639c,a0b071d9,50dc2331,52f1b47b,5c68923,9a1cccc6)\n,S(3db2b461,d18b367f,cbb4aae0,7a73ce9,6c1b4cbe,140099f4,d3839764,7414b5da,515ead0b,a8ba7b25,9f04484a,4c55b532,5686b882,77562b99,21827706,a036a142)\n,S(5516a03,3da8cc3e,28170010,5e8d57f3,daf5bb84,596c040a,3d2ae05b,41cecd4f,6bf44084,f0ad14a1,f129a267,e13b0717,6d2fd274,2d4be75a,2192e54,7ceeebf1)\n,S(7bd86d5e,6fa18e26,cb0b6e2d,faf2a4d6,a784e831,2e7168bb,8e660e3d,92514c3c,9b634094,dcf4ade0,eb49eabb,a26334f1,7770bb94,b776de46,64d847fb,f1574afc)\n,S(a24a8b40,d63c242c,3dcd2513,fbee3c04,cc15117e,aae40daf,b39c3373,e6a83bfe,49163714,afef59b3,b503eb73,ee091349,e599c563,bac4aa37,13d7a6d,6f5271a3)\n,S(acbbcaec,8b01374b,454208a5,19051ebd,e5128307,785f7b25,706642f7,775a932b,102283d8,1bd1e9e7,e5641b8d,a701f51c,86047d76,51becfba,89478d8a,a6226572)\n,S(efd5654,8f37a094,19f9fc11,6d818523,c4d76725,860d49e4,a1cd8434,a0cfda99,d521204b,da2b9db5,dfa47c9c,6ae4616a,52b3caad,5440e4f7,f1fc41ba,766bc180)\n,S(15600bf3,ffca622,a163244f,47789725,b4c112b6,e3d7652f,fe829a6e,386041c3,b1a1ddb3,e2b0e170,8cc9e6db,13c7b111,93673cc8,397d9b59,5b4e8dea,a39cc5f7)\n,S(8d14cebc,62f7cd8d,fc60c2de,d144c76f,55d9d6c1,be5380ca,1e1ecefc,5a85cc53,244bdd67,5030a8ec,af876f5,99a34f98,ef7388cf,e6705734,540f57f4,15641220)\n,S(e3cb7328,29c6d09f,6ee940f6,5f30c79,7dbbc26b,b8b8c860,f6e07088,a485ebaa,e50a5c44,6768827d,ddd57e18,68064e61,51c8951e,e4cd920b,b664ca06,67096db0)\n,S(9a18212d,45364ebd,3ecf4d76,3efcc66a,ebd17b7a,f8bb7f65,8679664e,16888e47,85297209,abebf492,ebeca275,bdf3bd2f,987d1e29,6bcee299,9d6e59e9,2b890143)\n,S(43366191,859bb3bd,5b44f1a,d9076ec9,5439c082,c99f70d7,4363117,8020521b,9dd6d890,16666a3e,6bd8c0dc,76cc9792,fe5d76b8,c49cf9e3,75e031c8,bfae2556)\n,S(1b77e51c,b11e514,29955ae2,37659c5b,a8050ddb,685e5b74,fbe38506,33bf9358,f198ea65,1ed4a743,a14fb905,fd0bfefd,843bb00d,675781de,5fb1552f,c7f382cd)\n,S(7cc6fcc5,558cc6b7,156a62d2,e823631,e0b95e8c,57fb79d4,b4aa3ff4,9cb718cb,526becaa,c0c84e61,b3fc85f,60d028d2,eb90567e,319bd6f4,12b1a36b,9c3d30ac)\n,S(18c1e51e,10a7dc5f,7783d511,6f2c0457,664ca2eb,6541ff29,591ee59b,f9f958cf,7f72840e,ccf4d03f,29ce01a6,725f6b97,d701a935,bce8a2b3,c1e44904,cf98a300)\n,S(3b9335fb,b191bc9d,17efec98,77960307,2648edb7,2c427521,34df37b6,f1620c44,ca526125,8239c80a,1ae893b,268d28c2,b02d56f2,d03a8a7b,aca25def,34d6d694)\n,S(f39660c7,ba9bf800,381b8ddb,d783dc6,acf8c183,95f9144f,688db8c9,9d7874f4,c5037625,2abd41f9,7574a607,52be4c31,e5ef2874,5e9d80a8,da2ea676,4bce5cc1)\n,S(d1d2872e,ee06a4b5,d3b735b1,9db1d88e,cbbf9ba6,89c1e411,980b2cde,e70c86d6,dc5cd630,859fb9da,70f25023,5b7bf2ec,938743a,a9f04fd0,69d1d746,e3ebbfef)\n,S(aa4f71b4,720f6470,8b6261a1,ee97bc7c,ee85b274,caf71a6a,1f7f000a,b06a1948,958fa65f,acdc42f6,c1e98f7d,f67ccc39,14dc5e8,d20bb872,32d7c898,e451c017)\n,S(85904824,63e69633,42cd1e89,1502c309,d74e1722,fad8e766,d7e8f566,49bb732e,585601b5,5bfef406,ec5f71bb,6bae29c3,c5e77247,befbb549,5ced52a6,da64a2ff)\n,S(dc899ab4,89a12ac4,4152ef63,48553ed8,29855449,c204327b,bcce6418,75df4d99,6791a965,65fb749c,44f133d4,b3c9c8d,77488831,c8a99ba9,7b66c9b,43deddb2)\n,S(2fd60f25,3e0b4f1f,2589a096,f9a0ea3a,405906c2,690fce35,ac7df791,f106020d,872d52b0,1cbfc3b0,ff699950,5be33b51,64a7054,bb00e22a,9a87d692,dccbe782)\n,S(a74830c1,7f816549,cd617b94,c0360b8c,9206b382,6782d351,650785a7,fb71212c,fa928b97,75b28be7,4e340cac,eabf866c,fe7e7299,7c276680,2d211b1b,389823b6)\n,S(fd450d48,c59fc4db,e3366b43,caf00c2,bd10045,842311ab,20f8e24c,6a9a10b7,512d1998,db747e39,34451fb7,9aaed7af,48801051,dc8ef756,4580db9f,bad910d)\n,S(c0816923,9f2bbbc7,34d52def,79f9f4bd,cbd8c435,d90561ba,fb23f12,f1fcb93,fa00c81a,8c5cc2d3,5f78f0d2,475851f1,73f70cbd,cf2c950,8ebad1ee,b35a0852)\n,S(247c4075,9a0e7098,25a5d82,4fad3419,55103052,bcdc7ab,fe4e559c,84a04a66,8da3cae,878260ba,1b95a5db,900f20c,12597187,4191cf21,939ab6c7,fe378067)\n,S(fbe3b30f,16ad6608,32f9ab15,2f44076,2f7a09a0,b07b12b6,4375db15,37fa4e9c,98cf3e68,2a914c3a,ee54971a,793a9309,8c63aab3,e2db5389,3f05450d,61b9080f)\n,S(79f71ab6,fce86bad,be02055c,520e6e0d,88e98def,d37f2d2e,488bf455,3ec954c1,b5de6a0b,c1745341,3023a650,45262a31,e9264089,8a655b0a,4b3042d3,a9114330)\n,S(d190f258,e2e3bb8e,6812da59,606f2f4a,2e3fd1ec,34e2c80a,9d280f5e,e1e9c4cd,98997b49,afec7d7a,26a26f50,9d4948c9,b5ebf9b4,3eef6183,3a2b7a8,6183c267)\n,S(24f355ca,c0e00545,f47e199c,3818e76f,534eca88,776ff6e2,54244686,24f0b636,37710da6,5c3afbb4,308d5906,7ad044c1,4df30f03,427ac83c,23b829f5,37d25b46)\n,S(bd221461,ae73e639,6b23d269,ed6907ba,330544d0,80342de3,a769d3cc,668cf536,a5f25513,3967fa67,b22dbe31,917d9d1b,ae11a1d9,dc7ab731,26e8f0e2,fbc8deda)\n,S(cf0371e7,22194be7,ac5d19c1,1b447978,b38f8a1b,dc1dc3e2,471d4a8f,75d0f6cc,4bb04426,94fe9d55,cc49dd4e,e168b604,564b95f5,99566f3b,9fe2fbdf,16084f1e)\n,S(ce21a5e0,287752fd,ae9e04ef,363540ed,f6736c34,266a2d77,b5d0bb5a,868fc32a,fc30fc93,bb5a2731,8b81b942,4fe330d1,878e710e,b9a44fa7,bf4cbfa7,10c7d0dd)\n,S(7c95d800,da4720a4,102de774,d585f230,2b849e57,1f42982f,a785bd15,334b4b12,244deb56,fa5b4367,2c39693a,f09083f9,2b153a9d,4829ab3f,ff604fed,a266b30b)\n,S(40bce9b4,f90489f4,d392fb93,3f98f71,e9281976,164b25b1,982cfcfe,338d93e2,5a9ebed7,25bf11e8,7bbec766,c52309d5,e2036454,447b8ee6,6dc79dac,7a2a9b4)\n,S(f15a2ed8,2c00ed9b,9e7a9338,2d08c46b,33ba7bb5,dc15f5df,4cc29fdb,86f11c4,d02ce92c,e556287a,3acd4115,a190767d,2979dd7c,7a32dfde,cb6d806f,6e7d0205)\n,S(4230d263,d5a4a915,cfd863c0,e38514b0,4929d352,d8a90c00,c0ab9ee0,56215932,4b134eb0,51699656,dedc7704,3d5586c1,62134b00,e21ab1b4,517bdc54,5f05fd69)\n,S(6cd6bfa9,63327c26,fd2c7aa4,fc159956,1a90096c,dc88f414,d5cc9c64,df6a9e84,6741fda,1f774c52,20b04db1,9ba7402d,9b77eaf5,b8e9e2bd,a000d2df,2022565c)\n,S(118face3,ab188a36,581cd1ce,1d434fdb,f1d06f50,1e9a64be,bfed2ea4,ba3f477b,a263037e,c8d5a9eb,be1a8b97,bbfa5624,ce00e852,44828af9,8cfc38ee,1da9052d)\n,S(6be81e79,5fd1229a,fb24a395,fccfbb6a,ae4fda11,28f93faa,f74bfb76,c39794c7,edd0f9ae,bbbaaf0e,bd1c01f,af128730,5d5fc5c7,732885eb,327eb21f,62683869)\n,S(b9a0023b,6fcbb06a,48f97684,509b8b9b,937f990e,4c3f1a61,27a8a18e,e4c96c3c,e1b25ce1,3e8bda89,ea631d71,4c07adfd,c31fc6b7,304b5e7f,1cc7221a,6597df11)\n,S(4e384b06,ee4007e8,e70f22a6,1af73d89,4528722b,cf58bfa1,16eaa29f,e1f2334,2fa6ecd4,8faeedb6,240db0d1,14c7eb3e,63540e31,788f5f55,98c52fd2,538ef0d)\n,S(14c8267b,6462dbfb,6ad45cff,58d9b22e,9fb0de4e,3d026999,9357acc4,d254ea52,86da149d,e14de86a,20becddd,e33e99cd,158a50aa,2da085c3,cf675eac,224b292d)\n,S(42d0c7fc,21129bdc,97318985,73b6d111,568005b5,cbabcf55,c1828340,4f5de376,8f83e957,92880a3f,dac6738,e65ea463,1399daa4,defbd1e9,41a5586d,a42f652)\n,S(bfb03349,2fc28eb,82bdf9b4,417f02ee,f93588a5,b138c520,77250499,23e9f135,c65872e6,9438a5e7,a20c3492,7a3de7d,85c690c8,b20af801,915585d1,98184882)\n,S(1a111410,d04e1278,3cded32,b3602007,7dedfa32,6493a780,999c68a1,dee18047,874723b4,c6b63cbd,d957098f,d0124779,3e711a56,fcb8499a,a046f5d6,36d5be75)\n,S(a47aa995,3a999aed,9c1d1f77,da8b736e,6d045d3f,9b32ecf,a6bd4225,fa66cf6e,c4ae1566,4da8e033,f0e3fbbe,472e16e0,70a4b40d,f210f7,3d0a6fe9,3dea782d)\n,S(52ccf2b4,5cd2555d,5a0a5765,92b5ca7f,5ffa329b,6bb12979,8f2c10d4,bdf34119,92abe502,d23e9f61,f420e4a5,44e42864,2462dd0d,7d7f386f,ff7cf2b0,b3a5043f)\n,S(5d2af6df,77107953,e6221a4a,ccecadf0,a2a8d676,5e720d2e,38c386a3,e6b48e4,5a44be69,80ca8082,5d435aec,34db8be4,6dbd05e9,9b8fa176,45888bd4,2260cfaf)\n,S(e0f9b457,e184de7e,7484ad3a,dff4adbc,4dfe508c,14341dd9,d2c4f584,807e3fba,d0712e1,3bc4ad8c,78261681,3d00a237,36383731,7de79d0b,1f52264b,6ea70526)\n,S(6797c2e1,d1c2643e,a831372a,abf36ab5,fcf88804,9a01f052,a7930792,acd2a7a4,ab005587,69f8d361,2217de,8d4bf205,925bde,7817e97f,d155fa94,8f084167)\n,S(f302e07a,8953b3c1,f0b3796b,55bdf133,84809aa7,3dfe4fde,a0d56ae7,a04c2f26,339d529a,a6c0c8cf,f46682b9,c36390d8,28b2861d,6f4906dd,a4659028,c74d780a)\n,S(aa4c04f,b8261965,9254f9b3,2d9e25cc,ec651f79,b710cc3d,bdf4eb3c,dfc207d8,520cbe2a,c8c0382a,23d2cea6,6a18f28,bb87e773,6bf60dc1,cca64a58,9fda48db)\n,S(cc4bbc6e,7f4b02b5,ebe6d484,6352257,4651fed1,a079767b,fa53d1e0,dc38b5b9,4be5e0de,c97683d4,939077d1,edffcf6,dee4a88f,f7d42894,c3d50302,70c9554d)\n,S(6a4bada6,cf1e123c,e80fcf83,2d6934f5,486901f1,6d3ad0af,cc87a4cf,205e6e79,b79145f8,24d693b3,832c6676,e35a73b8,d8acddf1,681720f6,c8d5ac7,f81752fb)\n,S(d7ec4d61,1d440625,367b2c5f,a6904b8d,cf6f0d81,39cc3bc,16299e1b,50c9024c,18c402c6,3e818647,7f15bdb6,d514373c,89d1f7ff,bdab83f3,5267eb0c,daa81d89)\n,S(4e21e4fa,4b570b40,77ff6876,a1d7e4ed,1db77d0f,56d35445,178ff508,5b197169,dab19080,ef84f0c8,4919d869,36de1aa3,ca85a1c0,aabe902f,b46b31b0,3b350580)\n,S(32aa04b7,53752059,7b4ef603,62aa208a,effa6891,240a587c,e1cae58a,28a6075f,ca649475,a58a3ebd,c3802c13,f006335a,7d203ddc,88bbd1fa,f0787839,b9452f21)\n,S(306bcc2b,94214994,e86c7fed,4f510ad7,9eb1af11,b824d897,a1cc7564,9eaafe0a,820c2986,abf17343,35089773,5b4da35c,56265a25,4a768346,5dc084aa,ecae6dcf)\n,S(37d23716,1044ed4,b395b044,5d70eaaf,864530a7,fd8490c1,fe2d1ea5,61f4bc19,a6a9da7,70558993,ce38d5d4,c69dd25d,134f37f,c28dddef,2e7edc0,c1343b83)\n,S(1f324230,886ef594,aecbe39,2d7a4434,fbb9fefa,fe22573e,9302d3c,dc81490f,39e53099,f25e977e,da860f77,6d09338b,c0e75446,42557c8c,b05761a7,c18537fa)\n,S(256d4808,d6dd018d,392a6716,2af909f0,51bfeea0,9ce22a76,6266d1e7,61df967,d5643938,c7d9163b,38fc8072,609bcbf3,e063d78e,10cb8cee,32c00abc,6341df09)\n,S(58a91493,ff7aa600,1f457506,624ce8ee,b1c142ca,d49f67f1,be099c58,3a7934f4,bde8d64a,79d5722d,6a96d240,897a7f48,8e20f19f,259fc6a1,e4483448,e0290122)\n,S(b4a80e5d,eec9391,8f146b4b,e0d91630,606a5c79,1c4b7b87,d4363de6,e2691f2e,a6ff5b82,ca6fa424,efc00b20,7ea90991,fcd5af15,d23140ab,96da6cc8,bd532297)\n,S(41bca570,b4981232,f21ba765,4f23d5ac,27f3bab6,9f1107fa,e3dc5102,6f8dafad,5a14cd59,9b0bb884,10ed1475,8445c49,3af3b7c9,2cc6435c,5560c4d7,832709db)\n,S(bcff28e0,bb6c242,a7805142,122848ec,6951940,bb4a2e3,5ae05137,d73e8264,43661933,9ff9f2e8,278ef17,329682be,aa801596,e4a12b0e,615fbe7c,4b24e1aa)\n,S(8aaa2f44,fbf66c2b,809180,bdbb4e2b,e25ff178,232fcaa5,a2c2563,8c1ea21c,69dc0de1,686bffad,1ceee711,95831b90,c57900a9,baf57ac,2f34a917,6d33e21f)\n,S(930a3df,f84583b0,ced82f81,96c39c16,b9318f2b,44efde12,2be6c10c,70b33dc9,ae802936,2b10029a,a81cfc47,1251ffc3,6b586de,da9c1754,4a96d3ec,31cd6d1)\n,S(907cf1c1,92b98461,8021a33d,1c9d22e3,22dc83ab,d5768a39,c04444bf,d4e76df2,527eb629,ca0a2e2,7da96361,ee727a34,97edb8c8,68694871,6a7dcca5,13b6f901)\n,S(f9d32e84,76c666f6,29e86e0d,3804eee8,abe1ab26,ae2eb396,b584e4eb,e9583b88,d92f265e,9e6c5f4b,bc05a432,6fafeace,1516f823,3e5dc280,b239fa6c,bfdf7fb3)\n,S(94772c31,70e50bbd,9952bc69,44e0007f,3d928cb2,c86465b2,ef040fa1,b4f90d9e,29021913,9326e358,2cfa8ee2,428c4307,86cb2de9,6ea2c735,eb71f759,bab14637)\n,S(2b49cd38,8cec8c30,e984d40b,f1409c6f,df7ff24d,36cb699b,5f3c24c0,fcc872fb,9e65a427,ce5dcc20,db83a96b,720f29fd,df643b2b,a192736d,c621d92a,6583aa8)\n,S(454f174d,8c344479,9bb58158,423d8413,ce87def9,2fd25a,5164807c,982d84e9,bf324810,d9894da6,1eb1e3cc,5a30639d,6500a453,c14e8a40,78353d42,7ac67ee1)\n,S(df4461b1,dc1eaae8,5b4b7fe1,e87753e5,546f48f,e39da02f,f1012b24,58a79a17,ac4fd2bc,af8e0b51,48cc5a5d,46373209,8993b377,becd718,732fa339,95412fda)\n,S(32973a0,d1be4c6d,1342b2a1,44ffb36b,81fd9b38,c0b7411a,65b8ccab,cda9161e,558b278b,f507b498,fdbbf73b,524c4652,53a0082b,d53a87f0,75d5a49a,bb601b69)\n,S(cb63a9f2,d1a11b08,479275f,e1f0bc64,37126875,5bcd8a21,3481be2c,818c69d6,4949d3dd,a31db2b7,b2d42f2b,4709a870,5094d470,1e742f07,b6f86670,e43bfaa6)\n,S(543ae5d,a0c271b8,41542353,277e1651,b7b0f587,a5b18ed2,856c2e07,41c28914,22c999cf,aba6f95b,21f87ab8,2f2edb2a,3dbb43a6,ff413506,83835ae8,bbcd0a37)\n,S(7ffa63ef,3df62097,a3b61289,4eaf5bf7,4fb39ad2,9ec63f02,2c6f310e,77268c7e,9d26cd72,8fcbfe54,6eda19db,5ac61978,1b456699,59a21628,2500e5f5,389679ca)\n,S(72cc6606,b02943a,5bd9a476,6b24caf4,e0e2f83,ae3bf671,5f05b39e,3436122b,f35ff21a,39503637,d05b744a,77797565,1e290541,326d920b,d5bcbb6f,74b56c3a)\n,S(f5f21182,de67c3eb,396055f6,a8f64f5e,54043376,cdce9f3,3cffa601,4a348a4c,1fe09f94,8ad7f78,6c184675,3105cbd2,e0f8be91,f9160e81,9201fed3,3208b3c7)\n,S(1cfa62a3,70171431,52fe149f,db07b00f,bd8d7928,e5eb145f,b4ff7343,fc19437a,1efe47f,e41677bd,337451b3,92eddb1c,ecfc19d0,5ef04727,12927d4c,77b2a742)\n,S(b6609139,733864d3,abbdb6bf,4b827b2,3861594f,ce9e996,4637ef14,f0fb6849,2e807df,ae409cef,b7be1ffe,63351d8d,8de5fbeb,f3be5069,31befc97,d479c006)\n,S(13da7c85,bffeaa0f,e295ce6,38de0b05,1b4aaf9b,d888f5c5,5f74fd60,abf2e016,c0477fad,fba6531e,f6369aaa,be663871,3bd6954a,d1e5df1,269c7208,31cd5bc3)\n,S(2abda634,547a86aa,1188b2f6,ffaffb36,dd126d94,18406bed,8b81e29f,596526a0,7db36141,2e96e02c,34c0e39e,1201617f,2a7f2100,d5c3cf64,6dcbe563,e2b25524)\n,S(4e161f2e,22785c68,3ac494d4,1e3cc2d5,e6b87be8,bd65e85,8aa255dc,8ea8fba0,c81a4e95,a2cfa101,fcb62112,b60c574c,623b5df6,5a1fcf51,e6bf2936,45d5f17b)\n,S(586be2b5,740b0ed6,6f5c5f6f,217766e,ad5543eb,8e983ffb,928fc40,9e76397a,f11acf99,8bc2a25,48799529,9c7ea84d,98c6a525,6cbca56c,3ad534f9,26c6b08e)\n,S(a76c4f91,1d0dcd58,9417fca9,8124f62e,789e0b05,91a9ce94,13e0b7d,e7d5986f,6a49fc1e,2b32aeaf,6f291184,3995602f,903c8d76,858fc532,9b3a1940,2c2c9b7c)\n,S(15f11b1e,804a6d54,a496ee4f,f3030167,eb510e9c,c1754bd1,d46beace,1211a68c,f8968e8d,21bca271,75a79de5,31ad810,ca6c6da7,72ff96f9,937ef824,8f4fec45)\n,S(f0169f41,685292bb,4ac93afd,58b2c239,3985ecd5,16acc8ed,ce46f325,74b23e58,6fbd711e,fd488c8b,43151ecf,e3a42ad6,25697053,1df18afb,68f8ad71,ee9aa05e)\n,S(2f241e5e,2596d32b,6cdedc4e,b6de5f53,374e358d,8db78d08,9e772b37,6250f359,fe79f0a0,cdbef5a2,7287c86f,afbe917e,4c26c4ca,512f57e4,ab066d3a,3f7e71e)\n,S(a14743eb,92bdf49f,5f404a54,ab193100,26f3fbd6,fc5a06e3,e8c6b33d,1f7a5559,3e7e5f24,b1d0425c,ee5c56ef,1e38098c,6d67fd12,f57eb2fb,1ee76c57,41d57c54)\n,S(2d097299,db14ce88,8da72472,da686f67,b8ecc812,5618cae9,2acf6457,a011d2a9,e9cf7195,32f71130,5bae1fd4,ce3a8fb3,c8d71088,df35b49d,ad9c16d8,8734a187)\n,S(aa7257f0,d7e51fbd,95598b7a,a994fac1,41aa76d6,318cbda0,20d30471,73317f2b,15e00f94,f684c30b,5cd4a978,c6245e6,8d30d959,a30fb39,834e97d8,c18a1b27)\n,S(ae524618,e2877095,d52ffc94,67a081e8,b27b4b16,566e2b37,c8d11b1f,1f7416a0,d0275a1f,6d49a7c9,44a07a6b,ee5d5095,7b22b698,2607f822,8ad15253,a546ccb0)\n,S(e7a85ef,ff8b0443,eace4cd8,81d768ba,ef4d93b9,79b17eae,fd237e8f,c9ff660f,4b53f073,8f07b360,7d66f720,b1222df3,eee2dd,ca20f40c,630a7911,a0fe2aa6)\n,S(daa96eca,b8412eba,75f58a80,84a302a6,37dd7d77,bc9dc502,a2d083f8,35bf242e,ac3dfd97,a01557af,cd1f199c,afea0cce,52c8e3d4,975cb331,1c817c9,fab0815e)\n,S(34dec21a,965b7027,44fa7881,4ff6f782,790d551b,7be35c,18cd46b2,e189baca,ee825c5c,5cc289b9,d7f01b43,4de4f0d,d250f9cf,c22c8d20,a1e54175,9bd23694)\n,S(dc2178c1,2f015bee,829f0567,566d15e4,d607c8f3,b2992801,4b6a5607,1e61247d,fc86780e,31cf57ff,5da387d1,c3c25a19,36a263d,f6571de1,d098153a,97b41db8)\n,S(6faee1e9,354bebe0,1fb65158,20b7e992,9517cb40,23d49d19,2a002ba4,e4782db4,a4915992,ceb8813b,e2778fb0,47766b6d,3958cf72,f18e9172,3f74cef0,1d2276a)\n,S(a2bcc012,4112818e,571c8dae,3cb724dd,e45faa06,d04d7128,e9a71dce,22f300ca,1f594d9c,64ba43bc,11764c61,f8fef5c2,e31fda39,3447e7d2,10d004bb,c13870e3)\n,S(b8cba39a,c51d86e7,d83a50af,f5370240,cd7b20f3,81aeb799,f951883f,458ead76,3a8bfe74,2b3a05be,27ef835,39988cc4,616365fa,e3738d35,29f9c0d1,c15eed4d)\n,S(56e532dd,295792a6,ede9da94,c43e0b2a,25b72725,333f8205,7a352ac9,7a1991d3,a617e234,18bfdccc,8facb454,649a4914,2f0abd64,f30e06dc,838fd80d,7a141fc3)\n,S(4803406c,e4049575,19f5306d,6daa003d,2aeddc1f,c1d4db45,15a8d35c,aa39a6d6,7add51c,12412f4,49d7b0e4,b7df38a4,83151126,49660956,da6273ef,8b53fd5e)\n,S(bd61ad65,2e44effe,ca39620,2f84e4d5,d81cc579,2a2390f6,52409852,cd79c459,f3d7071b,8bb18928,1d827f71,ab7b1ad,5289033,ab28d20d,643af02f,a2b4ce5c)\n,S(1b543175,e5b6f271,58048588,f81a791b,3ab216a3,578e2f79,354da6c9,5e4ea9bf,67a2e60b,321456b8,5b5499ca,e33cd6a6,d5445f91,eadb5a5a,f0e2164f,324417d7)\n,S(2035953d,3319ffa5,9f75d86a,8d1b52c0,e8118ec4,d830d15e,d9616215,cb82d080,302cc0d8,5bc1e667,b160bc8a,64cc3bb8,763066a5,6652a0bc,c12691be,c41d7aa4)\n,S(bf2a9739,f65bebbc,90413f9f,d311e095,e7628dcd,d76d25a9,8a4681ef,f4f84035,83932d07,cc950bcf,380cea81,28e04322,26b9a4bf,8536122b,fd055517,e7d3b2b7)\n,S(a915504a,bb62b4a8,1288c44,8605e8ab,bafb4f0a,ffbcef23,c9c2a26f,f2cb8557,2fec1059,abe1bf4a,834c50c1,edf0e5a6,2ef21f7f,9da2fda,20989bae,18acd442)\n,S(318939cc,fb2eb0f8,30d30079,7e209f00,6e28b899,8aecb548,b3b97900,9ea6aab7,5308df9d,10c7d151,cbcbe417,91b627ad,b7204db4,dbd2e01a,c5698e61,bdbda375)\n,S(ff9e4851,d3f0c9cd,818facdf,4781cecb,7f622039,c23e236a,7e4b7368,64af1a8b,fd69f241,bac1c6b9,a52d6dd0,6e7bcb6,4a4a79a4,9c3881be,6ef8c83d,3f462c5e)\n,S(497113be,a88d4888,2c98ac14,ba0bd0aa,d3c75c8a,58d374cc,86a7fd0a,b6259cc5,9029d9bb,96076d69,a264d2bb,6fea2f15,423ff1f6,ff47c02d,4699943c,9cbfbc4e)\n,S(2b2cdb82,6653f563,dfc4c373,96d738e8,3d1dcc5a,ec5f4886,2d5ca84c,2ba69103,d1985cb3,f42e4ae1,7da33b7f,f8563236,6e2f5c89,b849ac73,afc3a7a8,1d049d85)\n,S(c55dcffe,fe63e948,af77c8c8,32cb6c0a,c09ced5,5c338bef,fc27fd21,dc63b6c8,edef9fcd,b00fb62f,cc97c03f,26253069,de6f8d00,c13a5666,f574feb7,fabcab6a)\n,S(52a0dbfd,371bcfb0,e2c69160,c9cca2b7,8dcf679f,774c9d99,706d306a,30eeb3c8,fe01f320,781275bc,a6c031e6,d71df467,56473d8a,780fc54a,6f8eb1ae,5640bf65)\n,S(75c4ace7,6bb32bac,13141f21,615e11e,7608fda9,cba4723,9eb6bb8f,349a9e86,7fde50af,19506ba4,65d49b93,c8884478,dc34ec91,9bd5e22,be6bf71e,a870a70d)\n,S(69cd7caa,b220abe7,8f36f7a4,633802b4,85969ac0,e9c4a244,7b0ad782,29daa879,4140a70b,8d9025d1,7fb3402d,2ac8afda,e9e0269,b29d488c,2266c1bd,58accc9c)\n,S(b6cf3a30,d2a5ec8f,4480df82,ec6104ff,37355ca6,f16418ab,cad3a0c7,bd8da064,f12006b7,5d406558,51fde0eb,c68113b8,50441595,dfe3dddf,86c17a58,94a6d923)\n,S(65c4a081,656d9b7,445131e8,6081b306,3a6e0c02,5339d3d7,cf48e9ec,4e8f59f1,51f4ebb9,4b63b8bd,2cdd6d88,c84c8608,bb380e38,c748ddb3,3dabff1c,f50197fa)\n,S(c243570d,e74a1fbd,938bea43,bb17a929,47a228b1,ae47a6cd,15c37524,b034fa66,ca57366f,e3886510,903970ca,e1a5dc5e,bb857007,cd4cc56a,37fc7fca,8aa4cd40)\n,S(9290d033,1c95584d,e2bace9b,788c50b2,f7fda83d,d45a4a37,5705400,45339d7,dcb3032f,c4a41076,8b8e442e,46cfb16,b63f4fe9,f94a7d5c,f932d0d4,95e699e6)\n,S(295df203,cfa65b66,6afc86cf,b879d650,7075f75b,d1eb753c,709760f6,6ae9df94,2cf505f8,8220196f,9e5478e3,6bd82501,671c6b91,a404fc0f,b1fe00cf,12085934)\n,S(1631e6c1,3f89dbca,36cc78db,1056a461,6ce2dcca,62f90b0c,5fcbf232,77d41116,acbcbff3,2c164cd3,b57d3b89,a326b5d1,46b5769f,a5b35df1,efabd2f4,407759d0)\n,S(db0b2c5b,eec9f06a,9bb43e4c,de18d978,59a95cfb,9b319d2,5ba619ee,abc49e31,d647147,d8330315,1446a405,85bd857f,ebaef109,22ddd0e,3ac62231,8ee91abc)\n,S(2581d046,9e8bdc16,e535c787,1a37c48f,929aad34,b694ac2e,5d264962,11e744f,7bf3c684,3d953b2,dbead1f4,8614646c,d18b0f2a,cdf6fbfd,3ca68498,ab25bc60)\n,S(9db20da4,d576f564,372aeed6,eae78eed,f512d13b,13d4e9e2,eb3133c6,13c4b80,40f8b2b6,fa113b6,ed7dce55,d62587d8,a86a43b2,9e0b4876,c5607b89,9144d255)\n,S(849b193c,e490990b,e2aa48a1,c31694c5,fa041f96,7086a83,cd1a06b6,ccb5e3c3,353b49a,6ac0c705,5a3d5e31,fa428e2,391165ce,402291b2,5e1b0496,bda41e1e)\n,S(ae83dff6,5a1dcb6f,e2f56437,c83162a4,a388a16a,bd387d62,f5c5ed,ea08fe7e,e9c57ed6,5404a00b,a2f87613,4d484842,4a32246b,def6c31b,533caafe,7029eabb)\n,S(24724eab,46175b4,efe51d4a,5993da48,1a62c6e5,f05d16a5,17e4f58c,fdb103,94465b42,e4e378c2,1ef0d1d1,8b25d140,fb17f51a,fa4d37e3,450c73c4,72468b04)\n,S(c2e2f802,4ac48fcf,41a3790e,e9916018,5a301859,3cc3fa77,c7840552,6700659e,b1fe219,1563f9bd,20c4dd45,615d8cc,400911d,20cfb7a7,672b06,20d32a2a)\n,S(8b889bc3,e2d1405b,47a1a05f,fd0c17ef,9b4dd75,4d30640b,e3c4de7d,f70791b5,e2d459ca,285629d,956d5046,54c5e907,6ed92fa6,c95643c0,7d746b78,e03a044a)\n,S(336c0585,8f5ee169,fc09fc73,a181ccd1,3bd62dd7,c454837e,1a5d7676,abb2faad,5c29a656,e8f2804,6e855c6c,eb0d908e,38f1b62a,69c67948,9d6a03ce,64a90c2e)\n,S(c9a6df46,411961d,a703ab23,605fce16,fe021576,92a9b80e,65b9e4ab,efc9ee93,8b63a4ab,18a4b190,89dbc53c,ef0b0dc9,20c0ec7e,1fcf075,195bccca,58d52f6d)\n,S(6cea35c8,b3a45063,75456a6,2c95e8b3,7d84a6d3,e909c5a9,cc4800eb,5bc28367,68198888,eacc9380,4a3233ba,1801d586,e5bcb2b2,78efc7da,6764bd5d,edf0ee90)\n,S(f13d4ee6,ea31999d,d8d1220a,13ce8353,7c350046,319a0412,e562cb8d,3e4ee80a,5f7afcc4,37f0b29a,ab11a8b2,14947521,bbb4b622,261b9e73,f989e1b9,9f43a2ab)\n,S(7385b644,2e43ab56,f4df8a57,4d0a32ac,6e5a7114,13dcd992,f86c0b04,33830307,6d27608a,8ea00e22,4197c8a1,9e9511fc,7ecd7083,86e94ab9,6aaa35f9,c8c2c5f3)\n,S(35923ab9,a784ee6e,5a4e911a,7552fa16,ccefa4e3,dcc90083,e5a19e31,4dfeb06b,c900475d,980cce8,7d5cc091,7a28c18c,2fecd5f5,cd2cc66d,e26deb61,1c5acb89)\n,S(d88b6907,3abccb02,2e235e60,4f3e2877,ef979f85,a5b3fc4d,fdb166b,a4155d9a,1eefcc82,69a20b9b,48d30d00,e7ffd021,a9b7b171,378a299,819d6e6d,19d5ed24)\n,S(b86c5281,cfb9f3b8,4be4f83b,1d13d33e,1f6abfae,bbedcac1,63362a76,8740a827,c1a32696,fc1f8507,289f111c,85483b23,23d228a6,773030e8,dcf30f6d,57857dbe)\n,S(d2813221,9c730094,97c257f3,1fbeaee9,1afa001c,84e4b813,d7ee2452,6454c640,75d722d9,7111d6f6,b6324598,8720ce39,66fae55c,3d81e4d,ade294d6,1269b4ea)\n,S(445addf5,bf941ace,6b4aad55,6f174ba1,ee793bf4,9f46295d,19fd8e2,807f8d3b,cbe249f1,fbb39f8d,93079d0c,e84302dd,52212b6c,828a1626,b7446f91,4f6727e)\n,S(a2dfad8d,66fd47fd,38fbcb74,b983d366,c57a08d1,b04f1acc,4fdf047f,100552f2,63011d2b,43822a21,ddcdb1cf,ef4dc0d2,5f595165,26939761,953fb738,77586c9d)\n,S(c4e84511,6644466b,8c573b8e,c7dd3788,ecf1c6c2,63ecfabb,b13f697f,2b2e3a7c,1e53964,a70e83a8,ed9f5d8a,b6b79629,7368bc5d,cc90e6fc,4e8e6f65,542f63cc)\n,S(63c4cc2c,cf368a04,be814d1d,81fa4250,653ebeea,ccdffea7,944801f6,efee1aba,6fc2bb4,a7e573f5,fea2cabf,abd9a145,c7c36d62,11928341,e9553e8a,b38fa90c)\n,S(51eb8782,a3445ef6,43f01634,caad6fe2,29585dd6,f073acf3,62cfaa3e,960343c6,56d20f56,8e6d868f,491b6e1b,80fa5c88,e3d625d1,433b1dcb,5ae2d35e,b40a960)\n,S(d89ea50d,ab6c4c39,48fc4d4b,73d7812e,a6b59ee1,8e7a51e8,bf6249bd,ec59d068,a1ae85aa,e842ab60,95feec2a,d6ce6206,e81a6e76,7f0b7b20,d41cd28b,6a8c4258)\n,S(d121a6a8,11f953fe,a90d8f3,4487d654,fb48e4f3,c5ac4db8,3e3f50a5,cd7bac9c,a5b9e6da,e07a0f1,dc1695e0,20502f55,5fbf136,df11b586,4ecc63e2,d7061a6e)\n,S(83f7dd06,e5afbb3f,7b2563f0,faaaa3cb,20c32db1,5bdaeeb5,73219814,caa599b3,c452f49,1e4482c1,1cd4bf46,75d74c5,ab054163,b6d1b837,dd10aa05,950f199a)\n,S(1f5ba7d9,b4cf8684,cd073892,4aee1919,1f611d78,a943d49b,509fffa6,31fdc19,a017e13,7a8a199a,e361dc18,527f0135,51e48b02,c2f7f102,a6c1ffbf,fdd0baba)\n,S(d25fc73e,a83ef669,c2e127c7,1615df3b,ec61ee38,4a6b3396,cc52066e,c3b70b8b,9b5d55e1,c8dd008f,19b5e989,363ea737,e7d7bea3,f7b0d9b6,951dd78e,be6c5334)\n,S(d749373f,ecc1814b,dc8ce6d1,2ebe84c9,e09806a,9cbec814,cf98dab2,4a46ddba,88012af1,84f7ce23,730a3a4f,191d0687,4d5652dc,2be47214,61e9ad31,b39ee397)\n,S(8e05da99,971ba37d,38e7642b,693856af,a90d7206,2d360611,6c8f506d,68316b9c,73de534b,5833287b,61f3f985,2723be7b,e8e22ee3,1d1ef4fb,f45d6931,827e3db4)\n,S(e71e83f1,c6b285db,157f4a14,825aa540,558a7853,673900aa,fdb84556,ae5c891e,e37980b,c180e3d2,481d81f,f9aa33cb,b297ffad,7dbbdd79,4fc013f5,43ee679f)\n,S(bc66d644,dd9da12a,299557d5,fd35993b,ab05ac8f,bdd3802f,25b35890,db8eed32,5fa8c7e4,bdf77750,573a4ac7,1681ca04,4f796ea9,c8379cd5,ed55631d,bfdb8405)\n,S(537f194e,efe43985,8dbe1eb2,8e27448f,fd1b554a,b12805fb,3af43538,fe0e37f7,e82018eb,447b2810,1502453f,db4c1cb6,666330d2,ea3331d3,f79d5652,a1d64af7)\n,S(4af2a9f2,e0fa4b4e,731dbdf3,676538c1,110f3232,7b8f2766,a7f489de,8aec3b4b,cf2e0ca5,dc830856,43151cc0,1507af4f,d84b253,2f0fdcc9,6489baf8,6c1bd4ab)\n,S(81369bd2,a4945c15,389aaea3,4e2855d7,6343e200,a9407ed,d05ae927,5585aa36,a9b4ba4,e26950c6,6648b573,3c0c4e5a,22a51e71,ac3c1fdc,78403eaf,3a667161)\n,S(1c0813d7,ef91aa73,9e3a6f0c,e3c7edcb,2b7117a7,2ad1dad6,1aed130f,c61cdd3d,e3390572,67ac3bfc,5373cc31,14bd0f38,ccc3cb25,862b243c,912c0aeb,98bb86d)\n,S(8a651923,d2622057,59e5f82,b38bfae7,dc922488,749ea56c,e43f0f74,c268f9ab,f3df434f,14f67030,fe888ba0,185e25c8,38520bf6,6e85023e,e4ff4f04,b056d9d1)\n,S(89d98548,30a2a572,dbe91018,e66b28de,835dd02b,f793a469,2de3d720,d70e8f43,629868e9,9e434bfa,98bdc4,f191a08,72e68768,ce8a918c,7c2da42,75e5cb3b)\n,S(97d0c83c,5d83d399,c567ecd5,dae551fb,7f1838de,1967e84c,7f053b81,62965fe9,fd716683,73347fbc,407543b6,70734733,df623a55,1766f55,8a02059a,2ce55c4d)\n,S(20807bb2,650e6d82,38a66ed4,b239b59e,fe073a5f,9cbf0d6f,e3d9a16d,be427de9,46a25a29,c104c56d,8436155f,64b1d84a,b974fb2c,951470df,17a9704a,be5c1f9a)\n,S(3cbb1786,945bedb5,c8ac2d0e,dda1b0bd,ee314cc5,faf56b75,fa878bf2,b218a8f3,ddcec0c0,d05403e8,ea2094a9,6ea910f8,3261932d,701a2ea0,4e93581a,7e4b7275)\n,S(961d0144,1618561d,c3504859,7e1701bf,35412ad3,2d04486,704e5593,b9278734,7e137d6b,2060572b,ef66f8b4,c8ce535f,b858327e,26dc2295,6ee6c94b,c83859bc)\n,S(2814918a,115ca2d,688f4358,9010b7d8,b8b560f3,6a3dce2,8fcc05e,acd4845b,dbf76f51,ef80e324,8820cb0b,bc7f0c2,4d50ae48,6387d206,c333222c,5f959dd1)\n,S(6c4f3b00,c02c19a5,ddb0ab1,798929ca,222a9538,b641cb3c,dd61736,77c9442f,a91d13a4,d3888b82,eaba5173,3ff76fae,8022fb10,8cd61f19,206cd78,7d1c99cc)\n,S(8f48304c,ac37d495,fa1a2ff,2178f442,4af030ca,70662a1d,c750bde,5f5d8dd4,ccff6176,47cbdd3c,3d0c588c,37a98723,c2b2aa14,fd17cf9f,ea45ec72,eda8defc)\n,S(ae3da559,e3fce253,f5c1fbad,8e12a52d,ee989ea9,8552a192,93f7db0,eaac9405,430b86d1,322191c7,9aed5bb,12eece79,f2519bab,17998346,8aa13b69,94032ef7)\n,S(90c093fc,27fa9de,66a1fdc4,d921e5da,6f4fa049,81cb6f91,e085f89b,96561471,1bdad536,4ae198ae,bbb0ff88,3bd5dd2e,dfbaa91d,e989f45a,30befa9,76f2db23)\n,S(730a1c4,5ca28743,538fcacf,a65b7d90,b6f4b1c6,87364cd,53dd6585,328eeabf,7420e8da,cc64a059,b46221c6,c3adb4b3,46eceeb8,8effca39,1a1e36d0,d665257b)\n,S(341eabe9,66c6ce4,65ac18ca,1eda053d,4e6137c,ac0796d4,36a942e5,99ef897a,d298003d,fdd9f529,c1977b3,ed426d6e,2df46098,539b20ef,c2011a36,b7e49cde)\n,S(8f7e1b2,cb538fce,4b4a7775,90d1a95c,2fef8331,9792c0bc,8d5f3493,54fca169,71b0849f,cec62c5d,fdce37a2,61e2a06d,32b3e0de,87c8aebe,e5a95cab,b0c3f798)\n,S(c7ea6b43,ce1e0e83,819bee9a,31fba823,3ee03a6b,14988b98,e80aef2c,eace0d56,e9f1328f,dca6a16e,2100ad40,138f9810,17e37e67,7e7ca747,c3a57ad9,24b8891e)\n,S(b16ea5c3,b03e58b0,e6c217c8,6eacc4b9,3032add4,30acfd7a,e50eacb9,a0e5c1fb,507fed89,5c14380f,ab9e54e,a3624e5a,cbdaed64,b2712f88,48018b90,7a88f47c)\n,S(15cf4de,7c36b72d,f7b98c00,8e928731,a2e71c69,cd0427f3,ac9264b1,5a5fd487,3865beea,6b36732c,5ecfd21a,562ab253,d618546b,c1c24745,8881b20,643d7e2f)\n,S(394efbbb,fa740f53,b1e70eb9,d12671e7,55337357,b982921a,79915acf,ddd18218,8f1f1980,6c1d631e,6519aadf,b563dbf2,37b75db1,54baf06f,6fde8218,a0a68eb6)\n,S(e6c3e152,27453d32,cd4449d1,ab1ad78d,58f5bb6,f29d813c,e7c6628f,b284399f,89d87957,4b640a87,abadc6a,dc51a533,838a83f,53de4448,9ff0640a,502dfd62)\n,S(e2480000,9db30642,f925ef8a,e31c54fb,1340e88d,b6d633f8,415ceac5,f583cee6,39ad28f1,8ecd8302,5cc1fa72,ae4e9897,81318cea,9e506794,50abd959,f19758c0)\n,S(1c134120,3c2e7e21,f5b10ecf,402d52bd,33db3278,70cdfcec,f3b277e4,78f551f4,cd6907b,57cfad79,5e14e7c3,b2a06a46,17b7a27c,ff476bfe,38d68d0f,1470dd63)\n,S(6b2fbbb1,515c261c,954a0be0,279a1cd6,63daa083,1fbd58c9,c69b7be7,ee6047dd,d38ef59b,4e276fe5,6f1f2fe6,74b6974d,5ef1f4a9,74abb2c8,17cc68cf,78a164a)\n,S(dd5098a,8cc8ccf0,7db82096,b52d1fa3,6bd26c2b,57f0cbe6,2ca954db,1773e9cb,a198ec1e,71c53d73,5b50000d,678d7d93,de64a72e,8ad018bb,f515b4f7,c7840aff)\n,S(f6dc494,3baa0613,59a000ab,3aed3456,1972d425,34df86ae,3eb8e5e7,cae23c22,7150f3bc,5a968248,d8c71ea8,32b116db,73ff34e5,35ec1e6b,64b2474a,947174dc)\n,S(e115c926,5930dc67,bda89798,e267dc48,12c06d2a,a05e4a5a,6519b0bc,7096f84c,5b0dc7bc,82b61275,2aa17a13,c1fe2cd7,6b60cf1e,ceaa9234,ec9e6609,7b2018ec)\n,S(6687f498,98a22d8,58ef88a1,bcbfb446,33d51eb2,6c1fc2ec,eeecdae9,e0960c56,fd1912f5,7c0e691,23977524,ba58ea04,5757aeb9,309a5b94,3c993a93,57475ff)\n,S(366ea4df,3aa8da52,763b513c,efa3c739,af61a497,6fc4c884,e879ddde,c2457d1c,876520ba,cca3c711,a23186a4,833db7c7,14b3de4f,fc86e8e4,cbd61cc0,9a48f34a)\n,S(f7951805,eaddd012,2bed030,f3013e15,6fec02b9,80ba8ff1,1a0b978a,3fbeb778,b255b5c2,db866de0,a145a108,f5eb4b69,271c13aa,8db75fc9,f467843e,a59549a3)\n,S(c77d217c,5c7b8fbb,f7bfd244,b2a2d2db,372d8217,43eb4a03,47858678,471d8be7,55573d9b,dd16bda6,ad916820,874d64d4,b260a489,b4a93427,1ea5a79a,f57dc5c3)\n,S(c803dc3c,1432ac63,19db169,6d7ebc16,58021b8c,b92c0fe6,a59d1efc,2056f214,ce8e23ae,c7dca471,8666f61d,d7d8bc10,e06d1929,7fbad7b7,7d45526,9e207b09)\n,S(676c4c3f,617b661,2affb2c2,dcfe072c,ddee8b29,dad9124f,dd24e87b,52a80b88,6df8c35,be6818bc,b6857f47,f59a11b,e05cebae,ee6c53ed,8cb93fa8,92c49e0b)\n,S(8b0c8502,bfa15f59,335cc34,20e04c90,becc2308,12d40c7e,14fc3e30,88b8f34f,eb75d312,9fa4db28,27d20c93,de9c5cc9,4237bbb,a9710371,f767f686,e5ddbbbd)\n,S(6ea07148,5594bd90,2d0d526c,28918bb2,cdb7d1cf,d3ad0b1f,a3ebbf76,71a2f90f,3a30be2c,2058cb43,c6f8ae98,1ce8986a,8b4dfc3d,81d49a80,4e40c81a,a1fc8220)\n,S(aba7df4,8bcaa5e4,c4fd9a21,6b4bb3fa,27617205,693763bf,71b8b214,9cf83c48,6b1b719f,a0633abc,4580a9cb,9c1210a3,3e5e3bfd,177bc76,39057e51,3fb9b3fe)\n,S(ccfca0f,ee5bebb7,26e2062e,2b5cd592,847031d3,5edc7767,414af809,9b3ac2ad,135b2ff2,4e40f04c,adef93ed,ceededb7,380c1e9a,e32a499,467af149,cfb532cd)\n,S(9af36417,f3076595,42ea54b1,4671d2db,f7582ff9,b7e659a7,6465ee2d,4db88e35,dc5d07a2,58d4f5d5,ae649b63,e07a4253,8b8b3e42,c65a6ba3,44900028,c84df8aa)\n,S(e2f308a3,e4d99e74,d6b37cc1,dc41d9fd,e98a4472,6e86764a,89fe959d,deaf922e,f5f8eebc,d9252e1c,74b9040b,569c9d5e,11d12af5,aa21051,8f87043c,7b47776a)\n,S(a62581d4,c4fa4b6,aee11db0,8fb698e9,864cf336,578c536a,8a887d1a,89b43e35,b530ce21,bba9d034,d53dd490,2b76f25b,4391914a,5f87b6d8,2526f7c3,def132ba)\n,S(11ef91f5,dfeaceaa,52f434b0,fc03085f,60c12ea9,4441574a,5725aa86,52c259b4,a2c81e79,cb5ad0d6,bf0221ce,2bf7497e,bc91026e,adf0e25e,6269dfb3,2ced7d8)\n,S(ff549a04,fb86bf9e,3ad207b5,ac76a74c,2532a1a6,516327bc,96353baf,66269c5c,ef1088fc,633f639f,f0061bef,4c1e4c64,5897ba0e,ee229d44,d99be0d6,95e494db)\n,S(11c9ebb8,893b6534,b323909,961bb8ee,4c90c854,52848ad4,18fcf223,c80eb7cd,4b0229e0,89a1ca0e,d60ce2ee,590211a8,769d333,5f4ef32f,4460f8be,940a0dd2)\n,S(e86b3691,f8ae48c4,12a6216c,c3633f1e,88667299,f828d6b1,3ff88cac,e060b1b4,14d95d6a,61298fb5,1fc974fe,f3957db5,4aac7130,a1ed873c,cee5cada,6eec0c6a)\n,S(e5b9550e,eaeed973,5d8068b2,2c48bd2a,608fdabb,563c0e5a,6c2b2351,24c49d19,506ff679,2ea7c37c,254d7ae1,a459204d,aca23016,93c1598c,2449b758,6d437de4)\n,S(cab58ba0,cb15982a,c1ae5b51,ad65574f,55540820,d057e11e,f9c9f9b,a1388335,ae1c9e22,74958b33,2ce0f0c7,ef621a49,4d5b0ad,b04748c6,539dbcbd,6bd4ef18)\n,S(715e4568,9bd663cf,e9c83006,82fc7c90,5ae2da55,42b0ea4,40cbe2eb,36e1eb43,58ccbf96,8860cbfc,6b03f6a,a5fe05db,14be0e3f,3d6224bd,ce6eb54f,7372aa85)\n,S(df92f1de,4d22a7ee,6d2bf45a,5728745e,f59b6b07,29614536,722c7de7,965c0648,59e18767,f0e22894,be586a13,46950c03,88f1529e,cced0d18,50439dd0,e5bc192c)\n,S(885dd01e,dc8ffd40,c5f26d7a,bcecf670,7a791ac0,b2332b91,12e69cbf,11399808,4ad58276,6e763ddc,3f4ff718,569f600d,8c764659,87ebd74c,d506c2,ba886ac8)\n,S(d3fe74b6,17a1ab46,c773549b,af4bcbff,917c7ecc,fbedb63b,651b2197,89c1ff9e,b2e6bbee,5d84b593,d43467db,7372f40e,493a9fdc,c5d88fe6,5767f45c,837acf93)\n,S(c3730836,74b97237,66d9e9de,f7b6d792,93faedf4,f7d86301,75862d62,d4ada8e3,b669a24,a31f8277,8686d2aa,6b2acd16,872570f0,8e6f06b8,394f498a,dc29f099)\n,S(4ef2ace6,422be7ab,6a614e2b,fc43360a,2fdfcdde,51cb31c8,372a2042,2df4e100,86868f5c,37366665,fc6121e0,a8ab3a86,92ba1714,f5b8506f,9a3c3025,eaf9fbc8)\n,S(51110764,573c540b,813ebc4e,79d59277,67e30ed1,70a951b7,9ed05f8e,8d142cf8,ea8890e4,9668304b,63fad75e,33f42601,f2649a21,724fc495,61110e79,d7ddfea9)\n,S(36cbfeec,5491e1c2,f853d98a,275c1baa,e74dca33,2bd3d830,7d896607,c1cb651c,f67659d6,677b44cd,33c0cedc,d5886ad8,90eac77f,5b393fa5,6cba1077,54489eee)\n,S(d1ff3875,e1ef071,eef96f05,bc19d356,aeee18a7,f3892f02,4d07b43b,c3f09dbf,ba825e43,72b4a644,dcb5b8f9,62e0099,ab75ef9e,34b54874,f8d68197,ecbe8eae)\n,S(45e7bec6,75819b22,f2761ae7,575ebd6a,8ef87727,a15e33b,3edc7ead,dd58fa5d,3482080e,edaea330,240b539c,7d6a2e42,2cbaf40,f93d5052,28c773f9,6d80fa86)\n,S(8ca5d7e4,bd79aebb,bcc5250d,c86ac1df,373eb3ce,1d8cf2ff,5916cbb7,1e8e016e,1af3f417,afa5c1c7,89474f79,a0755bbf,a9a268bf,fdf242f4,c1599dc7,b7cb1e55)\n,S(56bf2e78,e7c43841,6324e581,7330a6bd,208edee5,3b5d61cb,a141f9cd,ec3002c4,e8f91e4b,3984a946,29060a4e,534bb4de,f345879a,f4884214,63dd0299,2bfc2fde)\n,S(af152859,31540f00,1be4a65c,e3f55437,f7be7d8c,db0283bd,f96bf71c,c004455f,1f58be49,77cf9b8,b7ddf7fb,74f7356d,62b8fe33,6bf798de,3dc435b1,86122b40)\n,S(2f4d8117,bcffeaab,7db186c5,7aedcb00,80d67b36,a560c5f0,e323b7d7,79be70b3,e0a50d82,80677ee9,caafcaaa,5d7d1747,3f4980c,73831f43,29b15452,94e71829)\n,S(bd96815c,e6b6d0f1,3688cc26,777c42bf,50fb8cd8,cd0aa082,94ad498c,620d1f4d,8a882c49,6592b186,b0a4071c,b0b556ca,27f2ec82,417aa246,ae24b415,8e4ddb23)\n,S(cf64bc04,e0796fec,112a5ef1,2c3cd909,5c041b46,2772b818,3e6656ea,16d046c2,6a05162a,eddf163a,fc2cc91f,34f7a7bf,41660b4e,a8ac7af5,698c259e,47e77e86)\n,S(3dc4bd0c,2c8253e2,4ed942a0,7f45c2c6,390a9d07,6d334f3c,80dfabe9,282a86c5,e0994668,7cc9c6ca,e2d04840,6d34cd22,e4f8e271,da4416dc,77e59af1,7057c43c)\n,S(40e00b89,e58de390,6a56133a,fa574019,51be1efa,6156baa0,45fb3987,94f7ff11,cf675e01,1f20efc4,24b882fb,b7bb9ca5,5a1134f,b628acd9,a597fb97,968641d)\n,S(5626496f,1f49190a,48929e9a,403f9f54,319a6b1d,301cf256,692cadc0,41301c27,21702c7e,2ee0efcd,b98a0170,110e3495,e23fe5b9,9674bb0d,b6f09e57,fe76b48f)\n,S(2a2c8f2c,a580145b,a9593b87,dfe0dcdd,caa3cef0,20b0e2cd,3792da6e,2f989a11,4aad23a0,e01f6a43,3f6c2a40,f480f945,d45c89b1,df42d67,acf6b0da,3f46bba8)\n,S(68a74703,a88b88d9,ee974a87,af7b1be5,1866ea40,ab4cae9d,90a4c2c6,5822b565,3660b266,c74b8be1,c98d3b9,b1f14dd7,e039b476,733a1322,d2d7d2f6,9ad59700)\n,S(b50ad45a,4898f77b,c5544dc1,cc8c0515,3b1e15ae,d043d2f1,40bf9dd7,29e413e1,1a59e623,3bea3be0,5713c06,b18badce,69b84693,636be68a,532adfa8,c617a773)\n,S(df18b016,3ad015e8,da7e87ad,e6fa5312,d665c696,e42e466a,5e9e2a82,18337c22,532d4260,eb34306e,691f42dd,c215ffdf,2f6cf3ef,cc1363c6,46b8921,ccf277b0)\n,S(405bc408,446bb0bd,49eb838a,eaadbf1b,27d413ef,a15fdec9,86e8446e,2c799391,1293bad0,ca26e4a9,f80dcdbf,1ccb70d3,fca9f403,89bcc331,e917d7e4,bf4d0b3e)\n,S(1230acd2,75b02450,255fdebe,dd0ae807,38f081bc,5faaeebe,4542664b,ec57bb15,aa31d16d,b145414d,acc29c11,b0ed9fe4,fad90a7c,451d9706,4f7ec6fd,75b15703)\n,S(4015c1de,3e09dc64,9ec990be,898db42d,1193e1cb,81956b08,da1c15c4,b9a2af48,d58b2d0e,553dd49f,ab07e5dc,c5a66543,b7dd351d,84375fdf,2ce1db56,8185e67c)\n,S(f3da2f12,7f47b9a7,192f00a1,5576aeb0,8bc36211,7fe1246,ad61421,85f79009,865ca0c6,4aa629af,b84f761f,b26a4938,25fdec29,ce1d4a66,9dbcd138,41bb83c0)\n,S(15f1e896,f7c7cc94,f3f921e7,6dc1e30c,f0d43b99,e9fa0352,42e56a4b,90a0c736,61e85195,215b864a,6f5bd52c,d0274526,dbc80af1,4395f9d1,ce60bf74,27c18b33)\n,S(3fad3455,470a113a,2f773ed1,258111ff,da926643,f7fa1cf2,8e9f7b80,dfd2105b,ffbe436f,a1975bcd,ee4eae51,8dece7d0,cb34aeae,ade738d1,b39f4c6,6ca08a05)\n,S(62bbb9ac,282329dc,65ae7b4f,bd15dca7,70a088e5,45850aaa,bc4c09b1,9177f92a,9c000eb7,f6104a03,51e1bd8c,d8ac8f7e,22578291,35eea222,866f2632,2573dd72)\n,S(9bf86604,a46cf253,324f5608,b7bc87c8,72939597,131f12c0,eae3482d,b1935e42,e9f2dd2,15cce5af,16149d3f,1116d79,74f51267,1b575f8f,6ab6367f,fede26e9)\n,S(a2ec976c,b5e72001,a25f95e,bbd7d354,2f3b174e,80ee3752,db082910,895f723,dbcb75c8,365c6248,c52a83fe,1c79d7b9,37ca8ebc,5060ba7f,60b881c1,964105d5)\n,S(dd91f713,ee212c4d,f94b1fc8,c7f246b9,cd162a9c,5c8988b8,f3adff0f,fdb0aded,efd02821,c4eb853b,bb8c55ef,c54f41fe,7e53582a,230d52fa,c18a53d,ca40c81e)\n,S(504e6ab0,c47fb3f4,b6b74a7b,1e67f6e8,c28ef108,62c2db35,f16f31cc,e71d423f,e7adb424,3200ab4e,71e50453,2d849315,1eae2247,50ff7a59,52bf2656,65b3ded1)\n,S(1a9ea377,27fad3be,155f7ed5,1caf01ab,1d30195b,1629fba0,dd04b7af,c1a4b8c7,2140f144,e531dab2,22cd4137,921b4720,59efbd57,c1c97367,ff2083e7,f2420206)\n,S(d76324e8,31920463,d5d94ce8,f9654393,89d97ba3,eb5e91ac,56898343,397b34aa,189631be,df5d46fe,fa8f60fc,a8b22fc2,ac987d23,b21ff267,560863,6ef3a72b)\n,S(de87a315,50a6f146,e681d8a9,f9a7cde6,7da28c7b,5cd7a70b,703695e2,3c9bddfe,d33a05e7,77ba9e6d,155bab56,2b8cbba,27f4cc63,13038f7e,d193137f,d14b8502)\n,S(d8381e05,7fbc1910,8b5a304,fa984e0c,cc0f5d27,303a3287,9ecfbf73,a1137974,1dc513d5,ac96238c,79d8f740,c855e045,e5c4e567,b3f44744,abb3bf46,ca394e8)\n,S(69da86a3,b355f0d8,138bf809,79e314ab,7cb34e64,45be4842,b8f3810f,11b2ad66,7db776df,68bcac9a,c0f8f55e,8ee6a7e1,771d4148,1f5d953e,e9bf832e,cf713cfe)\n,S(698f8b8,66093996,e2e357d4,d671d21b,230726a8,84079fbd,766332a5,4e7f18f3,5925e34e,dcab3458,ed959aa,3903ac93,c39b8ebd,1c562691,3f844150,d41ad20a)\n,S(37274120,6cb7047d,aa97274f,b12aa8d2,e5eabca2,f3ab0b4b,daa3fd7a,3d5365df,30d36bad,c10337a2,db6c30f2,e8876226,5ccc6a1,7104460a,6f438a9d,3e8e9300)\n,S(4e8c8df7,30f5d411,77355739,84a530b3,8ca4012d,3d4c8ce,f6c00689,b72cbeca,d9f7aed1,f5073c8a,8d2948d7,86ce6dd9,93a405ba,393a20a8,719287ce,797163)\n,S(1e62c3c7,16e4f6ca,77b6d325,8553a5fd,59f67df,f7295115,cd6e4bb1,19b4b5aa,7df17da2,a7397df9,e314fd8b,6b03d293,ff7325e2,769d7477,ef3802a5,7d8010a0)\n,S(c79f25a4,664cae13,d0971832,fee6a316,ff338f15,40c1f3e5,95c707c0,6e035db,5ef7879,c46266ca,7b342264,1594e81,5c189ce0,f057f187,e43a61fa,10330e85)\n,S(768a47a3,64304a44,34b097e5,132edab2,b9840584,6e543dd4,755038da,e355cb9b,79896b63,eed7e866,32c33041,d037554e,551f2a73,6f2c2b35,4dd7d7ac,f6562344)\n,S(131671bc,604d622,eea3f06f,200edb52,f7223fc9,3fc8d4e5,496af1a9,f72e56ad,5a6614d3,7985f503,2ad7a53,9b99ccf7,7c453f94,3975983c,e948dfe0,ffb867d6)\n,S(3b9e6127,48d11bfc,1d2d0081,24e79a9c,604bdb94,6b25ac57,749ca6ef,302d7a58,379e7cc0,fecf689c,f905e84e,8516388f,3e1cb41a,aab8192c,aa024de0,3332cc70)\n,S(4f9fdecd,10e8cc9c,f5f2573e,a2fd231f,b1313468,f516af1f,76af0eac,9ad51d76,26d6731b,71382ea2,1172142,fc5e0f5d,d0f7afa2,c9409fdc,62bced0,e8246194)\n,S(25f313d7,ad044b0,538bff0a,ead5c689,d5fafec5,7cddd9a8,31b9a4f,59b848e0,f28c77b8,9202c9fe,e64c0580,75a972cc,a4839e20,42c32b66,517605d5,87470c40)\n,S(24a8d407,e26c4cae,3f8dbc18,5820f345,81bf4355,7ad036a5,200b9b7a,68bb8d6e,fc6a5d96,4fa25fad,4d09a1a1,a4ec4697,818e46b0,8cdefb70,367e3453,2462b98b)\n,S(ef4df8ea,5cc100e2,768aeab3,112c7ac0,6077b754,75cab97,df3ed51d,6d397f4c,fbf555d2,27eb051f,54965eb3,fac1e21b,82d216ec,807b1485,5074ee56,1ad70883)\n,S(80c9d594,578f6e4,e8462dc,228cd99,9b621493,63d55cf5,80e1c524,627055e3,b6d5bf04,97b44e3a,7c7e52e3,28f63214,5eedda41,f80c44df,c7ca6d29,77436f24)\n,S(35961cd1,57bc1774,40dd41b1,6a81e31e,52349a5a,e4085248,fe4a19c3,b10f7a45,b999ee7c,b32f1051,f0e7eb9d,4689fb30,fac7af1e,b410d53a,85e79f27,70a7566f)\n,S(4aa49d09,32a7fc5f,77a76a12,16240142,596a82d6,6b59d388,24f0d8a1,e7f70948,adb5b12a,5e40bd0,a14c174b,13c242c6,c5f25ee0,642a6265,60d293d9,64a4671)\n,S(110d8320,a9b2c5d6,5b06f0c0,cddd243d,c83cfe4f,671db970,d1213780,f6c4af0a,a97c2689,5c7b6ea,a3a02564,d2af735c,9b43ceeb,9f6f2557,3fc468b0,467b12a1)\n,S(d01abcdc,a363b065,d8d2bb08,388c3545,cc8ee88e,90ee66c6,18a9f575,c0caee80,317409e4,a70e30ac,279914d7,135f9d18,e19fe520,4c83c472,5f86a614,1863b4f9)\n,S(cea07679,64506753,8dc24b68,19bc3332,f320f16c,61eb7b85,96e25bc4,1499796,edff87c0,67e97ced,4aa330e4,e9dbec3f,d800934e,ed7238f7,8e97a46c,a6ad9ea3)\n,S(d4463e7e,da5fcdd8,8ef0133,a5dbb1ca,c93aefb5,64581da1,3acc3871,cb94ce1f,bb1efe84,81dff341,dc7a4a8a,c2e44ca1,b071bcc3,81e7ecdf,4d4b7edb,6996547d)\n,S(89cb575,5e9323b8,7771a2d0,58dc78ab,ad8bba70,6f845a8e,9a45a16e,ffbca1bb,f7e743f8,a24a6728,f8e8051f,5a303d71,f1f47059,202d332c,23f3a293,9ab97e37)\n,S(d035032f,8e8e955b,b71006d5,a3b098eb,7dedb73f,a15d0d36,7e01c390,18bdea9e,1ba4cc2,fbabc437,a9d17ff4,f3c59f2d,2a416d2d,c07c0c81,c3e0a180,260bf2c0)\n,S(fec9ff6a,e37da167,208b1247,b754cda4,6c6eb072,8d6b65b1,3754e2e2,eb3223e9,305400aa,27a59f3f,f19d1513,3c5a3655,464c6f39,94fd2ec4,562d7f85,fccfb767)\n,S(3cfcc8e6,9e872314,5853743f,efd2802d,bb1a05dd,a03a731,77daf6ca,da9007f0,42b23158,fd0c1401,29298d42,a6cce708,743924fa,624d582a,94b682ee,4beb222e)\n,S(4438bc8c,f41b7916,dfcdb038,5c9b6806,83362409,69ce8869,c294990b,cd340e45,78154e51,a4dd31d5,14885a18,b7185fc6,84c699de,2862f480,937c9697,6155ae70)\n,S(d2ed1c29,faf76c12,fb15b514,6a31cc2f,c799cc4,5fb226bd,c38d3b0,176b5d52,54984b30,96d0c2ac,763654b3,32666baf,82c04562,d0d92310,cce6db16,216bb219)\n,S(37f21b9c,d1243170,5ee6db23,eb578ab7,31f4b470,ab07e1e1,68e69bc7,539b170a,afdc95dd,6379244d,cbcfc811,54aa1917,e8093b54,8ec2be73,5867574a,82ec10cd)\n,S(73fe29dd,54c8584a,7d25641e,c62f257d,400f013f,763c504f,f0a3ec02,d1ff8067,197ada53,ba57463e,e23b9831,ef8a6a69,d3d2f84d,c7225782,e7569603,fe1d1c83)\n,S(56b27676,f0e88c45,3db1819d,36a73d03,95aae3b6,59f612a9,fe28714e,20bc73c,98660256,fb7d7d75,aca14107,dda9e7c2,28459341,ee6de72,9e463c2c,17367149)\n,S(fd898f2f,e7f918a4,61f8e57e,f30380bc,5192a5d5,e1f520a0,5b99658e,8d57bf54,6861b3c3,5b0f6943,48bc4886,15eab8b1,36630618,592ac04f,80cdd632,aa63b620)\n,S(fef75974,2911ca2,8057e141,6288b351,ccf2d490,634c98a7,a80153f,e9dc6929,9d5d0031,3417797a,83f0ecb5,d4f45890,d679660f,b1b19686,ffbe060e,deff716e)\n,S(2c4338aa,18a27e60,d1daaa92,3d837414,f199f585,8d33b66b,471c6562,c8324bb1,13c28f36,25f2b273,8646cda3,5a2a729e,eac1de3d,80430cd1,6a0f3a9a,cb859fe7)\n,S(53d6a5c1,deb56159,34416235,c2f597af,f6e10ed5,444d15c5,d9ca82b6,8e1820f8,26a5d559,cc04f53c,6b1ff3c2,4d5a62f,f63e50f4,b7c1b619,9dc54c20,628364c9)\n,S(e432c338,e550a635,79ab747c,f01f3ffa,9e39d066,b221fbae,8b44429b,873decd5,297e10af,3006b09b,80d0ae19,3c1e8b3a,80ae9051,3dd9944a,444b2c7c,42d0066e)\n,S(a61c5ac2,60f3048f,92cc2af1,6d3f6a4d,696e543,f044192c,9d840962,493f5cf0,1249d4f,83608025,331ab42f,bbe338b4,727a5ccf,b086aeb3,f1d9c96,26859158)\n,S(a2f37e43,c3c2ffba,c45ad316,e912b586,2a9ac698,f85ea54e,98fe9a6c,e1fa038d,93e95000,6bd329ea,57397b25,71dc2e78,a466c4f8,76ace5fb,36d945b,a6e9b24c)\n,S(b2257994,44c2ed2f,3114185a,6ca617b4,bf4ac15d,40d73b62,44a81852,d30260c2,fd4607f1,3d4ee761,adb6b139,3f87bf8,e8b05156,5561d650,a47efacc,5ef01dc3)\n,S(d0607bf1,5317662c,73df9f40,805c9b3e,208ca1e,7fa8c04d,ab9766a2,8c7fffc2,f06da1e2,7e721799,41a9e128,e25ec992,eb030ca3,6161c02c,8ee31d22,388bd999)\n,S(596aa391,d4831e61,55d80829,35a85bed,a1ea3190,a499ec6,374389cd,1bd5d8c9,cd9240b2,9845911e,47ad147e,ae55a0c8,639b994,8d72d2f2,72e89fdb,578d4ff9)\n,S(433ec09e,19b7543f,a460de41,e70f63f6,6097ece6,dad9b5fb,f4030c7d,bc5862c1,dce03718,a609efe7,1858f6db,184708d1,9275ec2c,76d5e93f,e55a13e7,927cba95)\n,S(343b03eb,c285418f,ad522784,f91707e4,f268451a,394e85d2,824c837e,fa48900a,e6595234,643667c4,bb885b8c,1ced3a29,a71212df,f2904549,ccb91de3,75787922)\n,S(6094f67e,41b23bbf,4d594e97,b53391af,f10a978a,19244189,63814efa,ccd6488e,ea874289,dd943f7a,c109939b,8fa545f7,58359804,ad81ed0d,26cef135,cd138954)\n,S(cd0c3700,bba5677c,8d0ff53d,f06bdbf5,c5adce29,64921c9f,a1591c91,ae0a375,720b88ac,9374709d,1919854c,237cc5fe,dc53b14,3897e4f,3502af17,d7510c63)\n,S(d37ef1ea,95ae727e,5166dd59,bf5ee82a,1f215720,79d82e25,6369464e,d9a87cc4,59c5321a,d700c559,c92e500b,1d3a4589,15a88575,df9774e1,4bee7b2,ccf9bad8)\n,S(238158e3,d58e7618,95f7a0b1,cdad8a24,3e19bfb6,d1c65929,ff08e766,e62c2b12,1f65fb1,8969ccb7,27d50e46,39c7551c,5b3f25b4,90b7d70c,cc5e4ae8,7293a0b)\n,S(260a340a,5245a039,4a2f0908,f2912f0f,63ed68b6,aba66fb1,951128dc,9d542512,d30646c1,e8aabbd5,e758adbe,980715d2,b0b169c6,fe09c502,3beb7f5d,b5422be)\n,S(7333eee5,d111e138,f6e0b2d,4b476ba3,6df4357d,b28c8e7d,f232c61a,6c3067bb,d427a423,a4de1e60,e8b73098,b8582e0e,18923637,c44c52ef,fa0b5f90,8ccf786)\n,S(c411f215,dfb87aed,be2530c2,82a61e5b,37a0df71,1ce61fd1,25624b44,b7673eaf,ca3d89d7,d136fd46,161fdbd6,3f0b075a,afe90855,51e075d2,391f3206,382a0441)\n,S(275b0a1,9dd09495,78298aa1,c4b62ff,11e715fb,6c3740fd,80d7ec03,3f2635e,30dcc412,faf3f389,c9919b6a,f96e7b28,6eb8abb4,ada80525,b9ca7eaa,f3ce74cc)\n,S(9f774052,6818bbcc,b068c11c,b400eecb,da60c4dd,22353a3,4145e3e0,91f81617,a9e56fde,8f38116f,cafaea93,35ee3688,50da5107,a5a3e571,92f2bfc,1b55033)\n,S(60fb35ce,f1098201,353bd7e6,89b42fc8,9f86dbc6,3eb400e5,3b8d16f6,28ae4358,1906ce1c,6a6f41a5,2f45424e,86633937,8ed56578,ffd94174,f4f85960,ee0f5c2e)\n,S(1390a621,f999c3d,1737c72c,3235e542,99ce4796,d65c1ec5,45f60b71,19f4ae25,8f1cb557,b101a876,296881fd,5d30556f,55d739da,5122c0f1,43c04add,3485dbad)\n,S(15f372d6,9be09ee3,8d43c453,dc488f17,42f53a7a,7923439,66946210,60f1cfcf,c6007ae8,a836a1fc,b5a4c0f5,e584fb7f,2c468d68,9efaefa,6303bd6a,beecb05d)\n,S(bc2b2a76,17dd9fb9,e6d60931,ef2d5755,d33c7174,7e8e28e4,be151b42,14537d80,2582a69,b6e9b9a8,c5bb4b79,4ffeef15,96f383cd,670eb524,2ac4e7ba,375509e0)\n,S(5f8e0957,61e307de,26ffd39c,92410937,5dac9c83,7a5a62f0,b0864cd8,a37f2686,d342dc84,7657354d,d524b32b,62f5f69d,5b2ecbfd,71831b28,565cae36,777534c7)\n,S(5451cd91,9e849ec,b8dc75c7,9f939957,69a39234,38159544,dea98155,cb001c5c,e00d1d37,f9ec02d1,ae8222a,744381,4f16220,800f84d9,17cea9d5,9a9e2a60)\n,S(737b89ae,9d9951da,d2b489bf,f2ff714b,dcfb13fd,829160c1,39875a46,7343adc7,ef9e2ab9,f8246113,726e5be3,5c1da48c,a6b4fca0,53d35dfa,8a3d826e,e48c5ced)\n,S(8b80e227,9b0a91a7,6af48413,71ae6fdc,68f4f5c5,58de6efc,1ec0034a,36a26000,909b49ed,6ce8c555,25441ab5,1046956f,d25a3a73,5d979c04,43ae5891,fbd43df6)\n,S(9db9379d,346cd59e,ed0c0d44,abc4baa0,3b7af170,9f034c79,151aaf54,69296780,1a8f9e50,918a104d,b525c439,bb16b64,179dc4d5,452c86fa,e87ab757,61e97031)\n,S(3aa7c8c0,293e5c9d,fb50b63d,340851a3,88b1641b,b864cc08,fe776500,76f98d0d,974dde95,7c958b70,e0ff9399,d2d03da3,4dfc3437,c1ca557d,2240fdfb,3ae1d36d)\n,S(26cfaf0,d27825e1,6014e5c3,19bb907b,7a3b777f,b6bc69da,5cdafec8,40d5b4b5,2eabc11,73729fdb,d31fabb1,722be99,e5b4355e,8c2b4bef,53b21dd8,3cf81ba4)\n,S(ee495a13,bd1ba28d,cc26fc72,4cbfee95,3aa72852,57c883f0,cb09d6aa,1bdf3b20,b340a2f9,978013ce,8275b7cb,3fad5c1e,857bc6d7,b43782f2,1e737681,fb39b619)\n,S(2e04dc81,831bb465,59d6c354,c4c6105f,41f61301,769d6006,adb290b1,b75540c9,d086cbba,4d221cc3,7cc96b20,adceff4a,6157ab9e,686d1fd5,5d56801,dcf4b779)\n,S(557b5b41,b2b2e4c,598460ef,22888da0,aa2ec3a4,7980247a,e8bd465,a6e64c22,6a3c62ef,f80832ab,83a9d698,f61f7903,b7f64e41,9900950e,c7d79369,403d57b5)\n,S(a0ea9ddc,e2797fbb,d384a1a,2c26d7c0,edf866f6,9addb763,dc44b112,dc1cdc5d,a085725e,d947778b,40a2baee,98dcf460,b084aeb0,3f96658,4f990895,b15e3378)\n,S(1acb89f7,55a51f58,d8ed16e6,99a2294a,b2f4bff9,2fa2d1de,9883061,4ed4b5fd,5b243df,31c3bc95,79c47c57,58eef875,c18bb896,424c0293,22d729a8,b7a32a21)\n,S(fbced690,b601e450,2f0ed32b,8c2ac448,31c4b327,a4ad9648,97637b08,2f3d3912,3235804b,549210ae,8cb5bdae,e5b1b474,e682cdfd,8af4acd9,8c0c19a3,cb5c017a)\n,S(75339a0,82043d85,54ff592c,186a183e,4597a0ff,48f280ac,d760d134,9dfc6b5a,dbf1aaa6,8bd5db0d,8cdcfee7,de6635b4,b7877ef3,6da38418,5688fefd,dc584b18)\n,S(d83caf1b,2994a763,77a2bba0,3c644e48,7f170d5,845a7d17,b8be8bb9,84b0ad1e,e479d930,6d2a405e,f0be6418,3d4f8dfc,a7f58ff,95df1e38,c92a401f,17745879)\n,S(35fbbe06,39d9fc5e,d595a67f,442d7adc,ae6f566f,4641fb76,149d6c74,42af49b8,5eaf204e,6217ef53,1ab09a53,e6cf4d12,46d6c4e6,b71ae8ca,4e821474,94d00680)\n,S(d5563a62,bd6fba1d,e252a5a5,9c03bdfa,6c570145,71cd1a31,bba43700,2a7c1251,2f83b6a3,2efa7b70,1b4d3262,9e7a8755,8b681d17,cff0b992,1e102b7b,f851f543)\n,S(8f2a2a14,a834ec79,107153f0,ffaf8f46,5cbb46c7,5a72d07d,5e2af498,f3359b75,30ac7456,5c946e21,73bdbd9c,dc999e79,260445e0,dad2467b,97234789,a4de1184)\n,S(74482ce2,45605bdf,f7d586f3,c2e343a6,8f9579f2,543f7f7,22a4b352,24361b4,b2cae040,9ae59ee9,bff4fb5a,34847ca3,e4acd880,e35e4d5a,5ce47b70,3cc565c7)\n,S(ca0c158f,cd362d9e,3724bb2b,f07305a9,5adc440d,24270efa,2a8f208d,7f540295,9e1daa26,5a5effd1,29f62b,bf0f5c60,c0c2b73a,58ddbd99,c832125d,3927e7ae)\n,S(9c5403ab,b8b04f47,5eb4ac6b,5d526784,8d237d3d,c36e8698,d59172c8,a9d9e268,89cd0c87,9d02beeb,ffb6dc2f,fa882711,2071cde4,ee71a7cf,669f64b7,d463fbb5)\n,S(e6bf2997,5eb88332,64169169,62f49080,29072e85,797fb699,df05526c,c4ee0de9,ae9de06a,1952c472,6047bbb7,b967e6ac,db33a123,24b07165,d2caf737,3fa40068)\n,S(ae4ec439,e4392deb,5e1b1565,2310d52e,9cf5c0a9,8753a95d,d7b51e1e,5889a744,1400b900,c3159d2,25ceac35,4e566d2f,4e6f057,f4664b8f,465b0f53,2ba61852)\n,S(c6351ec4,27d1d6c5,64c05959,ccee21d9,b086a881,3f4d7406,ba8d0ec8,6cd139dd,b7173d5f,bec7a8da,89c4cfbc,a911687,f39a455a,9293640e,7d473bd3,ef2dba3f)\n,S(fe44937d,a54556c2,a50d9538,98abc367,6da5d722,6c6d3379,20092042,d1219cbf,c5c2e2a3,174fffd5,74761486,669b0cab,5a5eb21e,be669ba,c5c5a4a8,46e404b)\n,S(760dd500,b18aa066,19a3977f,ddbb6947,d092649e,485f2b6a,d26d01aa,445588a8,cac47a22,6da2825,38126d62,38751a4d,93daf13a,420be353,3fc0f7ad,db68c20)\n,S(8bdd111c,e271b136,45d00636,f2d33c92,df570cbf,6bbdc156,69fd898c,ce4ea8ff,884f1430,8ab84796,d61e557d,abb4d15d,15114c0b,dc770388,6ca3ff0c,622df5ad)\n,S(406c6d3e,79fed3cd,16d616e6,7fe004b5,4f589594,ecb7ca6e,24210224,c5b4eeb5,aeffee19,f82cee83,d4796668,8545f0b3,b8e61877,f34a0b23,c6a3573c,b98c9b7f)\n,S(c645ea95,2580652e,8e05df6a,3d208df0,83e00eaf,50cd7d4d,a7c51458,324a41f5,8b4b9cc9,d3f00fce,332d2ae8,2874787a,6c6c8008,a7577ad5,d225f951,82e8bd2d)\n,S(813cd833,dacd8916,76af5b48,5d1ff72b,df03f2ce,c7657e6d,249e79f1,f12d7476,c364d1ee,f5f1d5f2,7438c58d,ee926c18,7162cc71,383e9524,b80cbae,3cea17bb)\n,S(fef2337,cf88e025,d70e2a44,e68c22bd,95371f36,14ad9009,f2ba8286,290495e5,b622fc00,8b0a0f9a,9a36ddeb,ce10d871,e5dcd7e9,65ed2784,21ab5891,6aaf7404)\n,S(8505810f,22888b4c,c8bb708e,c1e4df79,a3a361d9,5ac2b259,acc18d68,e50b0952,b80fd8aa,b7196e00,3fe24ed,fc6742d3,e7b2115,967f838a,2ef00345,3dbd4d34)\n,S(b7aa2500,c77effba,3e93a4e0,b09a0f52,92240fef,4282cae,4c8036ab,2e5e5561,85823a06,1fcf2328,2dde378,8802d211,fb2cda3c,316dbba,d30048be,1295d7c)\n,S(6dd2e626,181f0007,6ed53763,32493f55,a77cf5,3c268524,2be805c,7da06c95,2a6a76bc,b3f96c70,78920303,c5ed3208,170fa969,6c5264e0,c3cb1d86,ca322da6)\n,S(ff5181a7,ab79b40,a3afdd39,8ac729cf,e49a6a23,2fa46f9e,4ce0bdc4,696e9f9a,99c20ca8,b11b6a05,47e81074,8a34c606,140eb3c7,ce5c843f,60203249,62858aad)\n,S(a5dfb758,32aa580a,790fce58,b4c04a1c,9de648f4,19ec33f0,92491275,e8243ef7,78a66f07,e1466785,edfd5523,99fd1935,1ccadfb,e3b25bf9,d5279ed4,1d0b9fd9)\n,S(fc5e4688,ea6e4553,610946a7,dd3497e,a5f698b,82d6b439,6a21e082,a9aabfce,d1b32a9d,761df7cc,3d69b5be,d7aac28f,976be204,7b2aff0f,2824fb00,b70d697a)\n,S(179fb126,a3cd9931,f135cbe7,2604d3bc,83cd986a,d9a7900a,17436875,d3507016,dc2a57cb,b0bd39d6,c8daf32f,fbe6b300,52cff0d3,12e84b72,c00a7d76,3578e749)\n,S(af37b7e,cac16810,9c51fe45,b2d6da7c,3505c1e4,bdc88b10,5a386fcf,e30a6c1b,4dc24b79,61e9199a,f594974,32c9352b,4ca9d735,84dde4f7,a4c0127f,21cc17f1)\n,S(62d66f6,b534cd8a,66236ca8,5b7de9a1,eeb49aa6,e65e5298,edd1a99f,96fb1dd1,83c05dc7,e69dcb3c,86dab3d1,153d93f3,e9861239,6e25d3f6,6a6d637,248f237e)\n,S(6a40f396,1587f5ab,89280eb0,568ec9c8,6958b4d,d8a379ec,2ce2489b,7e451ece,74972d6,1100a0bf,7751a400,6093ec78,1fe16c82,baaf0e69,74142a17,a405da36)\n,S(2838f8f0,c6e20e53,9ecba383,c6e07a2c,5022d436,904e5da2,b91b283e,40bbd6bb,6bbbf962,2b7c41a4,6b72a30b,d051551e,e1227362,b0664dc2,509404c2,819b4985)\n,S(21e927c2,82cd4635,c9c19c00,f18ddfe8,7aa9b60f,f3000c3,2019871e,a443333a,6834c23d,e05bc59c,f6fc64a3,af61f049,7c247d86,f76a2ada,7771dd16,999febb1)\n,S(d9817ec8,f88f9cef,92cf9df,1fa9099f,3f10ac61,fa641ddc,9f36e854,98822571,53c57b49,4d84c3e7,679060b7,c7c8d4ad,f2db0c4c,c8cabbc7,5c29ad15,80b963a9)\n,S(6eaafe92,1994519c,1c61bbcc,c1ad6ac6,f7a2d0b4,fd88354a,6a458e78,17503e30,f29a7f85,f3e91dbd,9e011055,f47a5079,7f55fa4f,46a6b188,ea4694d5,a086b4e)\n,S(2bd45f,1625722,2352b5bd,a6d8e2b8,e7d23c3,f8497fe7,348a8d59,97b5cdbb,b5f9d5a9,8ed6387a,41397e54,6b3ff76c,4c6bf446,3093e979,2d1f8748,7a6b725c)\n,S(176d02ae,cf4f1313,ff804e22,326d6a13,8b641e2a,3fd4d38f,2c27a35d,f1f456de,5ac13641,d2f19a4f,77097a4e,8eaae498,2afe9494,9188e411,e03ed031,fed9eb40)\n,S(6d0bfca8,6296255c,1fede5ef,8d04dad1,2b6625fd,7bc127f7,3f6b82d8,b257ca8c,3c5c434a,81c17be8,8101b5d5,ead55e60,9d9dfb10,c5ce1b41,484d5fb6,f595fc10)\n,S(b67d3fe4,f6617324,a4063fc1,142ff4b8,2a605a26,8b8fa146,697db96d,570ecca8,63ed93c7,a95a0ea2,9ffd6090,5c096042,b5562997,4957f47b,2d5bca14,21114bf5)\n,S(c171bc24,fd80dd05,4eb3e3a5,5f50c9a5,322989c8,a1213179,be4503d0,2fb1f1a,2ead84ac,7528e7ba,982fec81,4b68ff7f,7aecf675,281f126f,9f41a7c4,5deb2e03)\n,S(c4936f57,96269373,21abb8d7,df07e4ae,48ae1f18,ee1f8ea5,6682ced8,ec911593,52ea3664,1b441154,81805582,dcddf216,80eaadf7,4fb324dc,67439b03,aaccb1b2)\n,S(b0a38c84,ecc73fce,200658d3,cb43cbe8,e0df114b,5d1ff7a9,33158b67,b404dae0,40c381dd,fc600cfd,ff24d7c,988cd4ce,74c18fe,130f4248,2ced320b,b91f2ff3)\n,S(1610da0b,300d59db,d8746d5e,17d71ab2,e7e9c1d,2b43b688,656e570c,60336b82,8923b2e2,fa3fd34f,eff4ad22,7f9f6638,745167d8,fb769b34,b3bb7e12,a25c892e)\n,S(f6723495,10cb5b38,da909d65,333adb86,d22ed855,74d24d35,83294cfe,ac88d999,6f726bb3,891187c6,3c74392f,a1e3ffea,f55b9a9e,76e3b584,1d13dac2,e888c740)\n,S(3cda21c1,d048a768,d2863f4d,1028459b,c9a91c31,2626940c,f762c074,23d85796,af05c34b,4a15e00b,b6ce97cf,501316a0,85ba33f2,cb536f27,324f5506,54a8f03a)\n,S(24e1bc3c,84c0ce3f,52e1443c,1ce82330,b69bbdca,f09724d7,e616135a,d9f99c0c,61385dc5,e5c36e42,275109b7,9c22940d,3ee4c679,99802e67,3163c114,be7fb0eb)\n,S(f9511548,94dc4fd6,e2907990,7da4a5d8,ffff1eba,4fe12201,a3ebadec,2620a2fa,d40669dc,1eee21c8,ee1110c2,def5de0d,4f08ca55,6758dd14,b6f3ce64,46b2fe4d)\n,S(c6808c80,61dd7e3,f6fb5ae,d129d23b,c2101af0,130537d5,4bb99baa,1b8ee268,2fb3e2aa,77870909,993f9d91,bf670cf9,bcd5abfe,26ea9990,6f9805db,c8707f84)\n,S(ca952b81,f79a35bc,effc9f2c,c66c9928,cda6330f,42c44f9a,3191ea5b,5f473c3c,aa53ac41,f34fee5a,2028f7fa,8ffd5106,23cf2dfc,cfe5a1f0,99ef3649,d7f846b2)\n,S(679c1de6,521c29f1,9b0d3c5b,ab481e53,d01ec2ca,c719fbe4,16054bae,593c0592,61d4eff3,5daff1f,a4bb875e,bbb42722,9cc996d0,405c74d0,6ef0c6f1,31ade7c7)\n,S(6f7ac468,d33618d7,8c59d849,3571abb5,1d445a43,af10fbed,c5d25b13,58170f76,9187ac46,f2076aa,5cf4de93,52e5437c,4cbd2220,d8070172,807e84c8,10a05090)\n,S(f4ce85c0,86a4fb78,2f081fe5,379984c3,1a7aab89,ef9ac386,a6a8a11e,596278dc,89d6d9d6,75983a6a,d1dc4c45,a3dafc1,cf951dde,2a038261,b414eb94,f9899886)\n,S(18b0b225,19360c19,739623b1,7850107c,32ca6b61,295a8161,fc9d2e1f,8d1e60d4,4d8fd58,98ba10a7,3aadae04,a9ed18a7,8c48bd94,7825f0f3,b42685e0,d391dcc9)\n,S(3f75a866,537d022,f6b9b18a,330ecdc0,bdfa7aa7,5b213f4a,876705ff,635d8eb,fd0f335b,b4f41615,7ea2752,2b8aa40e,dcdcacbc,1beaa051,97ecc250,f0782cc9)\n,S(58310e74,290245af,c4acb91f,20b29db0,f5195039,24b9f76f,16952141,875d0124,f79e457c,364b374b,43c8d6ee,b408cbb2,94fe8eae,c6914427,83a74757,c8b27f98)\n,S(90692ace,4fd3c4cd,3c808952,d5ea0781,2192c807,4619b8aa,4274426e,feb7f6d4,3147db2e,7b3b8506,625c21bf,8803c5f4,e7250b0c,4523a6bd,e25e874f,76d1622e)\n,S(154d18c9,6c441173,ba7b8d2b,5099d9d3,92ae7e0d,57419144,229697cf,52384f73,1c196518,31ad8cc5,ea72b3f0,ed0d30f,78b773a8,1f54fc37,29043a35,6fde93a5)\n,S(311ebd4f,5f52bdca,290dc97c,73102ecc,421a0b07,4c53c052,11b0bfc7,3b6eb94,69d17492,eca55f53,72b04c34,6696454,ab779ddd,8c7eb07a,34c8971c,b5168019)\n,S(f62a716,6976f82d,b62e48a5,1eb45464,c845b71,6436d639,a9aa0a06,feb57d0c,a0b93a32,3fc8c047,3c4198e1,5ab5f499,e3eaa4f1,4bf99a69,b3ac303f,34839448)\n,S(c23e0cdd,5e39eec0,d3ad195b,19294bc4,30c11eaa,67c6e87b,a4e2a88c,60998ed4,a521d1b8,8e409682,bf7b7daf,ff45f697,6254b8ce,6c63985a,ad2d9cfa,559208fe)\n,S(742ca7fa,a8b4a98f,28040f8c,15db6045,70353954,b862c223,c7979eb2,3443ebfc,251ef412,e97a7e21,292ad45e,46c40774,b97a78cc,7826e45b,cef481f4,a64b838f)\n,S(622a14f9,7bd04407,63eb5d52,c15c2f3a,ae185395,e89dda70,3cc4c439,60c5592f,e5db52cb,ee60b303,69da59eb,87ce10c3,c485c239,ae1c849d,32e0e239,df4d4d46)\n,S(3d6dbb7b,4e28da6,b731c67a,6c038107,c2ec325b,6b10e31d,9b7d5273,fc81e20c,f0b619ac,febe82f,8c4caf5e,6d4710b0,caf89c2e,1a20073d,66ebe05d,69fc2c9f)\n,S(d450d441,bc191b5f,9c2556c5,a56d20c4,48afec13,c7e4b9be,320ddb90,b4c320e3,661be65,b5eef8e8,b357f521,d360379c,585c9e71,c27bd038,f2d63f72,6f6606af)\n,S(82f9dd1e,ddb046b2,2b33bf19,2970e41f,c5df0c45,f1375133,fe1b365c,eed1ec7d,cde9eef5,554476e5,e775e829,1d38a572,1d055c4a,925c7eff,35a389b1,388e18d8)\n,S(5227c547,834a79e2,d6fb0c3d,720661ac,7ec0e2ff,5a1480bf,3f31ac82,cfb2650d,dca309ff,621c591d,aea1bada,bb1be76d,2fa30a0e,1c83b4b0,d66cbd59,7612c0b2)\n,S(3eac813d,7e2c8034,f1d58217,c4372a96,a1fcae27,b29ed9c4,e870034f,7faa78ba,94005cc8,7b8f7aba,143573b1,79aef942,c1519b3,9c63b58e,e420a875,7c4c8b80)\n,S(9373c48b,50fb0243,b42762e,3b80994d,61986116,ba2c0677,a38daeac,7dcb21a0,295f694d,70f8295b,cddc1c76,141ed17c,a1cd8e5b,79909785,dad43e92,9247b250)\n,S(14019457,db851046,42b51ece,50fb8d94,201a80e0,f29d52ad,1af35e4b,8d82c6a8,c47d97c9,df2816f9,a6147dba,7658b5da,f9588dab,8aa393c5,8f721786,9c498b9a)\n,S(1b01f484,ce98064b,f60333d3,65d926fe,ee1cead3,c1497c88,8409be91,2288890b,6817b86a,86c98512,634bf90b,564ce109,13fad61f,c807a256,36a5d6aa,7f2d6005)\n,S(5bad5660,f615f36f,6bb9ff3b,19c07b74,9519caab,fffd98a0,4520802c,88b6cb22,4d23780a,e6796a72,324c369b,1987465d,90540788,88987513,13dea0cd,69f90dc0)\n,S(7044bd7c,29d2a7cd,d662bf16,90d5ee35,93175691,b62d68e3,f8f66ef5,8304c509,f263888d,52d74133,60ddfb1e,d1c09b9c,871d6eb1,e5833949,13d24973,5721ce12)\n,S(186411c2,f90c5402,6445dc4a,4764318a,f3acd811,52c01dcf,d11d13cb,a8c02afc,462b9556,1bf18dff,8a4211d8,89f420d2,122c4ea9,7fda3d23,558b6304,d25b7aa3)\n,S(62ea528c,185fd551,745c1512,6fbfd40e,5f8933de,4e1e3b95,92a93b0e,b762ec3f,276da42e,3c8a6755,6be49e00,2e42522b,e3b95e15,39a4708b,36429a94,4f6a86a3)\n,S(5e2c7621,efa587ce,bd3c2392,a1b8dac8,50b15316,c42570ed,7270b521,a65d6cc0,c7faa23f,eafb70ce,723338d8,19bebd10,bae703d2,1e72b496,f2f95b6,e83d7d22)\n,S(7e27207a,b80f124f,9694f143,9a0cd895,2c67a719,4075d9fd,1bb7c9a5,a22dfa3e,322b729f,e19d75f5,89749527,80f3ae04,48edf9e9,d8c24267,18812dc6,bef5e602)\n,S(3de40b43,9077ea26,8d94aaa1,93e9c7cb,98e362a1,551b9b10,d5eb64ce,15986582,ba36c2b,e0f9d3d0,220eb47f,4ea66d01,59236411,2898172,8582d3c5,19576943)\n,S(81e94808,7e89846e,6c7e5ad4,feb8f0da,4553e460,e3e4620,d87a206c,9d3232b,e216962e,4068a44,920e6a9e,f03efd5e,afae7f96,3497ecaa,dc741c37,7e9943b3)\n,S(3056eeb0,d00a19cc,bb5a2ac7,f320ea3a,4e931187,498ec23c,daadc820,a34f49da,c6803559,271b265c,80257585,1f0a78e9,85abeaac,cb570787,f398766c,aa21fed3)\n,S(9b1e1189,752fb763,7a61246a,7134145f,86b973b1,e44a5e7c,c59998a2,77ed64f2,f6793c87,9b8c380e,65296c8b,eaeb98c6,b66e0be0,d03865f4,4a09177,5dcfd332)\n,S(807179ba,f1f9ce93,bb1f7dc6,e3c6514,99077419,472b9d8a,1a8cc4e2,f35c0c5,36807219,9966eb7,f18dfb7,d3316eec,54f1a9a7,7214d4fb,ce3f3ff2,935e2ced)\n,S(60dd7b7c,cbcab93b,8ecfa461,8cfef03f,a74bdd47,9cb90a1,5e46ca7c,c1bafcc8,1d24d147,9987f779,90cde228,22ea0cd4,4236875d,943eda25,fa25096f,e16b8ce6)\n,S(19daeb26,23383b3d,d15b0075,77a5e92f,bcedee4c,91996546,a7c52200,d243e4f8,12676559,3d67fe33,b1c01d4f,cae44be1,5f5f5e31,1149962,83ce8f92,f6485e3)\n,S(f42f8e1a,813dab8,9e4db5de,27445215,c0fb1cd8,91c9a96f,ca5ae1db,14e84361,3cd2ab35,55705994,42070743,d01fe633,34819d2a,af95e97,6dbee1b4,e3ba2ae)\n,S(1a2b774c,d5d0dd28,26d7c4e5,886d65b7,a219952c,6a413d2b,9fa8f765,73fe2bd8,4e2d0ecb,384a158e,e57da809,d065e39a,27830625,400c51ab,dffdf615,5d88032b)\n,S(e9fa7d8,94c55075,1ad1731a,b322fab,fd3d17a,889bccc3,73e44e37,b4c2c880,67528cad,e7987d12,77c61681,36abe0c9,5dfdce09,33129f27,ffa9d36,53673bd2)\n,S(5347f349,e54c301b,abcfd8cc,50f6fe6d,8fcd0fcd,861757d2,bc36cbfe,39f460b8,16d08dcc,2a837b6d,f9fe2ffa,b188a966,9d39181a,ed2aeb40,9ed17c8b,554e9d27)\n,S(e20e8cea,4450bf03,149bdf60,e95f7ed3,69fd79d0,aff9fb8c,ef6e5287,830c7ddc,fa256932,fcc569e2,613bc0af,5f90263e,6db633f3,6cebfe46,4c70b043,9b886058)\n,S(69132e10,b3a919a9,8a7188b3,e9afcf6c,2d53859a,5955e114,a41f1310,55ef8441,e6c339cd,ddd26e0e,ac4a1c2b,39e19cae,2d67e726,8518b750,94cb5e6c,b525d84e)\n,S(11e10c95,9bd9f79d,c2819a87,e17c0de7,9105af6b,fdbe3f6b,88d198a7,106c861a,27c29227,4a3677c7,381fe385,8382ca38,d4b98e91,af4250fb,40540828,246d5c16)\n,S(785934d,e1b1827a,471d7e59,2a4c3475,3054b00e,b8aae372,444b00ef,d9d894b1,7b8dd2e,a038d4e6,23f0f1f5,a2f75dbc,fe34e76f,6d106ae3,33d88a07,56dc4a60)\n,S(f09c814e,8e66b8e5,930f1a49,28b28e5d,206f4108,fe99f04f,ead93096,1cc17605,469bf934,b4059a4c,4a942214,e1d86fe6,dc900426,c7d0eddb,8d89e86c,76d60f24)\n,S(732901c7,26982b9f,ff1229a,3e8f7c83,2f47437b,412d0b3e,274a73e4,24ad6480,6b82e2d3,d4830086,cf416593,9b04ff7a,89b835bd,81cccd8a,7a29d47c,b70da3b7)\n,S(b8369a11,d23ff4ea,99ce166a,4708ab9d,389cefed,b1843d8d,6fc11f74,7260faea,f4346c36,63ec0ab3,6ac12df7,f61e9848,c2d4cbd8,c8e6e173,2d104d0b,aecaef9)\n,S(5499e409,3df85dad,411b8675,c09d0c0,c25bfefc,2afb0228,b94f834a,34ff83bb,7775c877,8fc6e8d0,519a67a8,7d2fe9c,c8abd8c1,15ae1700,ad1a94d7,925a4c78)\n,S(fa5bc8e6,fa9b13e8,ad787ba1,497a6b97,5c34a64d,a0da5b5c,836bd71b,88c93740,8c919cc1,19e45de1,54f6d0d8,f22d3b51,169b3f0d,181bb40a,56213cfa,a4ad126a)\n,S(a871c481,a84f4447,89ecded1,e2b1f525,9b1d4ab2,b16af331,199f89f5,730cdb0b,c478609,30b85d69,1ae45d62,7aeca01c,9f10a119,500d5d4a,c317fdd7,8de4a103)\n,S(63d3be27,66d33bf8,f7a38577,aadd5d9b,234bb77f,d206b056,379e023b,ecd25616,9509d09a,6dad6da0,aa5151f8,dd8e3800,abd8a799,2276ea0d,3c958f76,498ada87)\n,S(413ab945,c133d383,d70e81d3,34bda75c,be7bacf5,e49d71e3,7a884489,adb28f8f,c3d49f0d,6c65f6d6,1c9c84df,a4138076,f0168916,393612b,837c1df5,df710a02)\n,S(df070f4d,ce208b39,e2614db,77c6aa32,2a50bb26,2ec7141a,b1e26835,911b85c2,b0b1f453,1815fa7,83609235,da7bec0e,f1bf2ad3,b0e71f7f,7c18de8f,83f55a3b)\n,S(1ae86e7f,300efbe7,8cc933c,f8cda339,1f0f8f7e,411e6c0e,708a0d75,a1ab1815,d322b34f,f0778782,7d2da5c1,4d6bf17f,f8afc8a1,8051a724,bbd719e0,f5f31a2b)\n,S(2a38dfd9,ee86308b,e0c76ca1,8dbb9ec0,fbaa86fb,51075887,9283c070,f31106a9,69cb45,94832b55,abd6b686,f67d493a,9d45e4a1,7d557723,fbbbbb83,7ab30cc4)\n,S(2c6d7ab3,b1c3301d,65c79d40,583b566d,3ee39014,345a4553,a77a8e46,95b779e7,eb392dde,318bd27d,446b814e,73f9cbf1,380e38d,fed25022,bd584585,d671e470)\n,S(758739e8,2aa2e25e,b1d8e027,b0e401b2,c82db2ca,549ebb9c,e1560ec4,531c5c77,d3792987,c3da2cc5,5760e52d,a19ea1b4,d0c2cce5,3f612760,bfc28414,37090975)\n,S(7ef11cac,99fcb66b,71de229b,b34e82c6,e3149f85,ba1ffbf7,f22db64c,6a72588,64d7c546,28892864,1db41465,a134cfab,bc08ea64,11f5b2d5,b1de9f0f,7ae41b70)\n,S(a7d48b06,c66ef847,f17b4b3d,ec40eb97,cb91bff1,c06d4a6,5d6db8c3,5561e4c7,2f22aae0,d6eb7221,d24f025d,ad1768a9,a619d6d9,db9d8e74,948d9263,3d0676f)\n,S(a14d7354,1bb93625,d80f654,af67febb,d774e42b,6430a14,a907c52f,84088ab,adfe7f75,2b080bb6,89c031fe,c7c11d1a,bc303b7,f1a0ec2,38a4dac4,afbb2a5c)\n,S(16076f95,b067381c,9d71cc9a,928f10db,43553332,f747e33e,367cc7ca,ffaa5f88,5c05040e,43a29d4d,e16b5e42,b672f618,8f0496ef,f307c269,13df7c79,ed2b1502)\n,S(973450b4,a297ebf1,70630a71,fa74ae2c,8f3f8e39,18ff73fe,41bd1e65,5a5acd29,ba04c21f,e92ea639,99d5d87f,77181c31,ae8ed87c,dca22054,2f746fad,61f63039)\n,S(aa29f7ef,d2f06187,108ab23e,16d9f3a7,74ab6459,550048cf,e1ddca0b,45fb5942,431cbd5,c77b31b4,d8b8568d,b092e721,a02d643a,75621eb6,1016b363,9728e2e8)\n,S(bba61b3e,52614d14,358dc227,e0c0ea6c,e4dce364,fb7e0500,72d0d780,14642d9b,f33e0e72,6e9ee195,21fb4a80,2510156b,230a7ff,6e4c6b38,cd38b3cf,65336d6e)\n,S(911443a6,979ede22,f23df6af,e4b1ab,73867dd7,a47e9268,3e3cd83f,241bfacc,a0e5be1d,31cf0375,7c2469a5,90f3493b,e43a99e2,755af9d8,b87aac67,ee7a6488)\n,S(ff2126cc,5698e6c1,2da7f441,b031ea11,30132b86,23994f64,b332a8f2,87616d41,c616d5b3,79eeaae2,b072a11a,d2b316c1,b2c851d6,698b6d86,7fae1abd,482e91d4)\n,S(2fe68e9d,de151731,12e1653a,2a6abce7,615062fe,a5375ef6,a2be1e90,67f6d8ed,c24e4b95,718acdfc,cd9f39f5,eca6f2fe,74fe7f9b,ae6aa352,e3651bbe,5d81c9b8)\n,S(dc08aedd,90e96f6b,892ee62b,1f719619,6af44975,58d70f1e,7294863e,271ddb99,7250d846,1ac24a2e,e74bc5a7,53d5361f,8c012986,4364d84b,4afe22cf,c94aad99)\n,S(e9c21052,f350d1dd,caa82594,b6eefb5b,f8f01ec4,1a423278,fba3951b,fcc7eaae,6992071d,becaac44,a5cd1537,cd066f2f,c432f198,621b70ab,360ea8d1,35757784)\n,S(110d5ac,7838b9d2,d33bdf5e,8aed8529,5ceb9334,d409074f,3c26e3f9,f0cb792c,7879e339,427d8425,b597e76f,56a7a6e7,9a8cb00b,374ac98e,9cbec66a,47bceac)\n,S(92982af9,ab48532f,cf2ece2c,9ab346b8,7def4729,8ebcc03b,91869aeb,42f9bbda,c6bf5a6e,8639e2ca,772e8c36,5f824b3d,331c7be9,4c13e9a8,ae6a779e,208a157e)\n,S(c3f07f47,5246bb78,eac4e9cb,263c774a,3447acce,993a9707,14c1b553,79013162,f1931fa5,d6fd228a,a5781b35,45faba70,df6bca90,936acf17,f81a1155,4897e136)\n,S(37640e7a,eef3f326,a598d363,df4f46dc,8f0decb5,ab6e368e,62294c53,ef3fdc7b,54fe19ac,83a074aa,796feef6,8d39358c,7be8848b,433e1eaf,9982701a,3eca7a1d)\n,S(e903363b,6c90bd,2bf15176,83411d1d,aa9f0bb4,a22b5f03,ebbee32f,8f0cdf4d,fa44eae0,78b4b6fc,63abac71,ce0a6e0e,16b42d80,94179f1a,657eabd8,7eea2480)\n,S(3c5fdd9f,7313d178,312bc477,849ce90b,a22770df,867a815b,2bd1d1a0,600afb6f,d81524ea,9e23ad00,bd7197ee,63457745,75795d6a,63b8b15,a19cf606,72159a05)\n,S(40b540cf,43713ef5,c8b919af,6c991632,e60c198a,677887be,33b84c70,7c0ede8f,54586256,7352c824,49ebecbe,6eaae259,8e1cf694,fbb296bd,c14a4a59,240798e9)\n,S(67da332f,f57adb72,8eb8b926,5a650e23,bfe5271e,396d74f3,9878c22,6f912053,91aec263,d7b74e09,b4fcffa4,87cee236,356e4fdd,bfa257c8,f3e3be0f,3a3b16f6)\n,S(40cea066,fa029178,5662c994,db5b1153,e59fa121,c9133c2,fe1c6d20,91d44d98,61475cc7,a5ff5251,558f258b,aa8d69a1,52ed6497,c8ffcd55,2b66baa5,534df64c)\n,S(c4eed050,248cf186,f8e2c079,870a139,c0cb13ed,2cec040e,d98a18ca,9b67ed0,50e9997e,263c7441,9e71405a,4d342e76,c5548e,1a7a3cc2,97e4e00e,91fc476c)\n,S(676b60d2,14e309a6,8c7a8470,70d5bf62,8b71b7fd,322ae568,56fd4a48,9f3ee83,16e0d8d,371ad6bd,4713e9f,7c5f329c,72215cf,21a48527,35a0df71,205b733d)\n,S(af268996,29117c69,c3beb193,c5cf7944,d4d3cc1b,7481d08e,1a190b45,c03e1fe7,359e17db,bdbe179c,8cb75ead,8a0e3c86,2b1d7d28,4aafd2c,e45e7b9a,c6d83ebf)\n,S(62e15cc5,a30d1388,2b3c3890,4e1d11db,97b0a7b7,c658175d,e438591c,ed1ed489,fab66c6b,ab7b5ed5,815c81ca,65cf364,f4cdf8fd,7a6fe8e9,ab5ceb66,3bb4e8f5)\n,S(6c7af496,df980977,41f5068,f34d0477,7da16397,c853539c,1b0c1263,2e43ccaa,4eb0e461,5c6fd9e4,3aa05201,88bb264b,d55b3a05,fc2b6c8c,d6f5f51a,4314f6b)\n,S(757a45d4,4c662311,289be914,4ccca5ae,6ef89f51,52d66a2a,9be64096,cfc8fba3,732ddb9f,62fdf217,44d7daa6,35ca3e92,c3b84061,bae4c220,13339e06,fd4da7e0)\n,S(14978c08,f1eaa9ce,4d878db3,29f0bc94,43301fdb,24b525e5,4f9f27d5,7fc114f9,439d8e8b,2b9fdc0d,85914620,9c883731,26e961f6,82407867,b10bdbb5,3074e5b7)\n,S(3f231c93,760d9198,4a8d9adc,abd83c1b,3ae620c8,f067d103,6d1e5e02,2a72bcf9,95eb3a0,a928d3f7,dff3426d,763cf6ed,20d6df2f,c5dfb17f,c53ce0b7,90412bc7)\n,S(c90268ee,75cc8e7d,7fe84298,b1db4255,80c3c45d,3643a280,e3d5d0f6,7337b616,f566fecd,1158d49c,c12a1dde,d0b1fd7d,d9cafbb6,ed3fd09b,48689f85,b01cb59)\n,S(6457f0e,4d6cee8,7a2c0aee,85306a02,42c017d0,1e1c9807,5b460732,5c1d82f,67bf2f81,262de4e2,ba9d29aa,aecc9315,ff56c3ed,2e73d438,2a3dfa6d,faf9808a)\n,S(ddc591c,1abcbb88,3de13bc4,490a66d5,3d96c97c,f1e21ae5,6a430c1c,39b1b629,80ae50f7,b81f043b,e3db78c4,da7b6078,871d4813,1e076ad9,de59fb27,b942f72e)\n,S(22b19bf0,5efeb280,44b43bfd,7a6b3427,2e8b3c1,f6635ec8,d6966a,6667a252,47f504fb,ef2cea6c,8692d0a5,1f492560,151429c3,e522c23,2914e880,9ffdeef0)\n,S(d5883bd6,c13d93ed,50371ce6,ed6c4263,395c5d28,f589c84e,cb9fbfc7,2dca651e,acde7b79,969cde2b,9a580387,d8e3a99c,45f15d38,f2e2ed79,688a3a95,80aa9a8)\n,S(9615736a,4804dbbe,439f2f82,ca576623,a1675aeb,9ea9e40e,f6b910b6,c84af16b,a0967216,67f9dce6,25ce5331,62d45477,31be7427,74eeb1ec,4e3fe578,343c46be)\n,S(ea36bced,959bc461,95e730f2,26224652,2472c2c5,70df6832,befa40aa,5c600e32,dd52094,82eb08c4,bc233090,2aa54333,87d06885,a9357f40,246348b4,4d97fbf9)\n,S(44814860,ddf61b77,77cad443,18c21686,85c614b0,1c5830b3,b178a52,d85539bd,f3e5fd15,c71050b7,280643dd,bd2c55b9,219e7fda,cfbd2e98,94fa9a4c,9cc7ce75)\n,S(814454b,cde86996,56b44c39,69bf0a8f,31b6d032,40098f9e,43d52266,cee66f49,8baf21a6,601db25f,2e18f5fe,decb9f31,9a6378c,adbff6ec,99bfa2ff,8d26b5c6)\n,S(1ff790f1,11f7bbb5,b6db5f83,22ac696,c1de09d8,e50b9f4d,641ef76f,d43fdad,145d0aae,c218d6c0,219ce9c2,313b4962,f873c5c3,5424d3b,536c1543,14fa9517)\n,S(275cc6c0,6a8faf20,c3c1e88b,87e27d35,661c6401,d3a1bd96,18cb016e,fdbc6d0c,45cc522e,97b61ff7,696c5780,638054cb,5e97b6d4,fc4a813c,7000a633,4e9f2a7c)\n,S(9c78cd3f,874afab,23874f0c,8a84fbc8,a6d032f6,7fef6c6f,29c90513,bb6926f5,818a2406,fedf958f,7efafc4a,584ff6b1,7bae1b65,f67d1086,c3e013a2,cc318b1a)\n,S(3c060395,f2cfe9f9,e3bb4afd,e5a71e03,c5a92491,323de27a,c9ebe1b,170153eb,344d08c3,8021fea2,6f55c0c5,85af3954,afda21e7,14cdedc6,8ffa3771,43b2ca27)\n,S(f4b61a9f,7392b960,752bafd0,ce521e4e,57bcb898,cbb2dd9a,b0f7db8a,3ce5ff2,e412589e,f3678029,15813dfd,acfe8056,2a59894a,4c87640c,6044656c,e8998d5c)\n,S(418698b7,6230acce,49505275,a0c01e9,4eb356a2,e3c242ff,470b64be,fa91ce85,cb9dfaf5,4c64ed94,f97e03d,30e07876,9e5a3142,d0fc0902,5e20ac2c,21c4ceeb)\n,S(809cbcd7,91c1f309,864ca343,3d9a11dd,2db3d9c4,5350ac5b,27f55e19,b9941ce2,8161347a,92fdcb92,263f1d85,2923a15c,42d5012e,30d7d9b8,623cefa6,12b06bf2)\n,S(6410c007,1d1025c9,8ce11509,5359e962,58c6a115,5e7f34fd,30fc8862,f9569f23,d76363d6,2661a55c,6c211bc4,13b1dd7d,63fa6964,a03d9461,e2870f2e,54c87d29)\n,S(8394abff,22ef6051,7517e352,12a4dca,103a19ab,4091c7e8,fd417a,98fcfd2e,20d0ad3e,bc0fd15,fd405417,61bfbb40,8e37975d,a77321b,67ad2ef8,35732c0b)\n,S(dbec1fa7,765386c1,d7558cb1,f19788bf,ce0e9fa4,7ca41edb,2f2d9ef8,78a04308,5d7c918e,335ef23a,934fc963,48dfd8f6,ce79885e,f4c463c5,b2645c8,48083ea0)\n,S(9d6fe17f,3f53f921,893a422f,c9f675d4,652cbe09,a870c81d,8b2ab9ee,9a591cc2,fae9ccd0,b22ce7e3,2e7faed,2d47c36f,25cac5b1,e56ea936,a6811f11,8d485a2f)\n,S(622f8f9d,65c4270b,1479e4d6,6f82fbc4,cf23e7a4,d09a6537,22c20d9c,54f85f55,e87650ee,4d9ac5d9,c6566612,1b6e4679,7e52953a,d7c3aedc,2fecc22f,d5b76591)\n,S(cb1db853,b615cb5a,b92d0340,7ad7891f,2e7b1d4d,120ba3fd,a1ea3565,ee1d1436,8362a39d,9d425eae,2451d601,27ac2824,3819da08,856d0db2,18f339d6,fcf20046)\n,S(5cbc6a63,59d9d6a5,2ceb093f,ca5cae,f32892f7,c9d04091,8245d9ae,ebd594cc,c4c18f88,7436575f,39b9e7c3,27c4efdc,6a3490b1,23c50743,ef03b1bc,34566bd)\n,S(37a3cb08,3a9b7561,78ff2128,e7a5b9a1,19577af6,61974869,cf555dac,ee2d11d8,1a8a6297,4d0b6c5a,12155e9b,cf895c95,f6fd2b1a,2776c32,8d6b56f8,32f114ca)\n,S(8e0611d7,ae0914d0,5d39e06b,9b359400,f21c3beb,73ede92d,bcaa6d96,8a995b95,ddd4f522,d1c6a964,9629727f,52740664,43e80ac9,7d9c68e1,225e60c5,38129bd7)\n,S(9ec34a91,8a4648f0,1c1d726b,51b1874f,36410180,8bee25ac,c159c251,fc115510,bc5ee2aa,b5e43b01,b34ab989,5f4cd71d,1d3e6288,915daa2,e84ed531,4b388b8b)\n,S(dc19ec7d,c901e215,f6d0603e,bb5494ca,aa9b5409,67a5a339,8915c4cd,84000654,b55b9596,a18e53c4,b82c669b,92defe5f,bb5e58b0,3cd227b6,3b439b4,ef13bf13)\n,S(51bc3804,bda51e9,d0c45087,13599f12,b9a8599d,6e8ce949,5a3f595c,7d38dc8f,ef0d6522,fe3a3c4e,64ee1092,b9ae8f6,e7847bf,94044693,a3ac7cf0,f4aaa37)\n,S(13463b32,dff393d3,dfddbe3f,bd6ade13,190e0bb5,83e3f126,344b5e01,3105e234,ea3df1a8,b8270f70,24910f40,a519cef4,9944fcf4,d82a4300,63b2026f,8f019ff4)\n,S(c49b3261,2e286adb,606686d9,67dbf4b9,57819dac,9bb75f44,8f1416ec,f900fa5f,ffe45b6d,8c19de7e,c08256e2,96667d89,f290f5d2,25a9e380,c106972d,79551b1f)\n,S(10fe7aff,36a8f4ef,79e2d8ac,619ca92e,2300878b,cf21a271,70f89e9b,6294dd28,f67da70f,623fe6fd,2c7113eb,fe6458fe,d0d5471,ab639050,685a0fd9,33afd6a3)\n,S(d56037f6,efec78c6,e31e633c,570c5e46,96f96276,b86d0b89,e993f014,53592300,2499b92,4fd99b5e,a56f9649,bd8e53c4,b2f20dab,9fc1de83,dc199022,1f606b37)\n,S(a3c1d0c8,939cd4b7,5cce8ce2,f3be0226,589fb32e,55457fde,8e700a77,a60bf003,b9054f66,bf6450cb,782533b9,33190084,d6f5944f,cf4e06f,de72d483,144c941c)\n,S(85d0c4ca,e1cfe42f,b5f73f31,42e97e6b,c0855f7e,db19b1a,8668e413,4efcd249,d8372bc,937fa754,b81631aa,33a8ecbc,a25f86d3,d5e0627,d6964ee,5c08e68b)\n,S(3092eae2,d41d0ccc,10af9d81,fe8c80f6,9ae27c9b,74b5f696,7a69211c,8d6ef98d,153f0882,f6b720bc,c8ae5924,923e0608,d6163c3b,32d36742,68718d6,e7f35e4e)\n,S(4aeb6ac7,fe874a0f,1c24681d,884d5497,3486f293,9b01ebd9,74c34ea3,429be71a,d7077161,c508a7d9,63006566,f652afdd,df87d0b2,8daf3fba,21f206ec,a94a53e4)\n,S(729bb0f7,be975284,a68363ef,40003a6e,c770fa4,5d6e6b99,ab0c5042,da563f32,1e0435d5,ea85370a,7293396b,407da43f,c540aa04,24f21de6,a002f555,cccd4480)\n,S(96164ac5,1074dce1,3b973689,a39b6795,9bf5756c,4de94829,66bbdd23,9e665fdd,5cf13b8f,56c92710,80c11626,6bce26c2,14a39237,9aa68ed1,b7a05d65,7bbea247)\n,S(6d45d79d,9297bb8a,326b889,391b18d7,31af609c,67b31be2,9b4273cc,405e3f80,2d99909a,7b6969fe,148111fa,1b9c9326,97fb465,494a8225,a6c62626,555ed02a)\n,S(70091076,b5b81f33,42170f0,4881c941,d2fe9b0e,ff156221,66f0c92b,4f9e8e71,7c676c5a,4fb434d6,58f635a8,20b454f3,4c9795e8,b8860d27,4d0fecbc,ce7824a2)\n,S(d04c0a77,c8fcb3a9,a02df253,b8819853,63dd47ca,bc1f8881,88d5e56,87a7db74,302d1b96,c35a2626,22bbc6e2,841b5cf8,efb77374,af428f9e,d69b2b11,6993db09)\n,S(3c93d2bb,7ee61cb0,7a25ef65,f3e22eda,6e74d2eb,f3ede111,b4f2a28b,b4f206d5,65ed4db2,b1647b39,7225741e,241310e6,7a47f0ee,4f459ab1,3d29689e,cef70336)\n,S(8efd5a54,a4c7567f,bd971cce,7ce3006e,3524dd81,cb7a4ee1,a5c61e12,62961037,6b9688d7,d73db9a7,1410738c,80430ea6,ea329145,718b4177,71e542a6,93b494cf)\n,S(e7aa8121,34fa1f75,efd2ff02,273becca,18bf1ea9,47d168e2,cadd6e9a,6c448425,8af9da38,e2471dad,128e004a,d7b03932,2976d84b,7c91f91a,af471546,dfa5acdd)\n,S(e4335a32,b3218d51,9c582689,85138591,4b7cd8fd,4e4eabc3,b5f9e0b4,c3212b84,ccfbfb0f,50b5fe75,c849510a,bac5870c,3016573a,53eda160,b14602c2,42ca02c7)\n,S(aeff696f,e98cf587,745adbee,3fca1ae2,3f8f5768,56bbad5f,4a26afe,904a17c4,55dfb880,250b9a5b,7eb971a1,fbe0cd6,ad2d375b,88d98e52,6afcafeb,7ac4617)\n,S(72fdb2e1,eb120244,4b20bd6d,afd6d49f,46a56f25,63e679c5,2de98cb5,bc999a5d,e29f2,34ad3637,7b4a9cf6,c307b8a3,a779cc22,ae472aac,eb519c10,8137162d)\n,S(eda9f183,f89750bc,8c12ce7a,fee54145,42edd9ae,9fefd508,ab588bf1,6c7da0e3,a9328c5,81b0cb02,fc09fcfd,2a57d2c8,fa313ef5,4e205902,9bcf0846,811be308)\n,S(744683c1,2a0150be,1d7655e,b5a3fc97,4303387b,e53bcdeb,41dfbabf,ff12f6be,df2e4b05,a459aa27,2d3de8dd,4c211dec,e35eb798,67050285,57dd53e3,5b9950f6)\n,S(9f3cabfc,106653e4,65daeb52,e86d99ff,e3ac6df4,5eef90f0,61226cc0,32592ef5,9f20d174,1b78c8ec,d7425d19,fc0a4c9b,1f1cac8d,b97514b5,8585901c,41862306)\n,S(9dc15715,9f59c338,d56a7d9d,ce63579e,9e95424d,e6db6927,418b024f,ed95936a,278716bc,3e131fa4,75b9ac00,6e868d88,ce17e6ba,d7ecd202,33fbba0,fb34f0f9)\n,S(b6c91d90,b1bf3b46,4b526186,69e1c118,dcf8d6f9,c8ca7473,5a361a28,b53c823e,15132dc7,69e59b7b,fe5e9966,1b82e47b,3ee4c3a3,1c0b8201,517dc567,ff90a4bd)\n,S(56604a9,ab972c4a,f18d5f8a,d5cb6d94,2d0c841,a7defd1b,b94b1b25,c31df400,3d2f2a27,adc2eb70,336b4b44,5229e09,a74a113a,f1b21bd9,1e3f2351,15f6a85b)\n,S(a5b57de,fcd3016a,917ababf,171c3c31,ed62957b,cd8d233d,c551fd9,6216561d,3731d822,155afc28,8bd7ed39,30c3f6e3,58a46f5d,d9fb3ed2,6d7c7da2,a8dee233)\n,S(da179b61,81e27ecd,d545af40,ea5967ab,7c0ea9ad,68a8c0e7,4d4a5aa6,4aafa549,c5c97c42,e74f4991,55191cf3,3118f05e,19633eac,ff5ea8d0,7ec866a0,7fbbef29)\n,S(42a0e864,1b594b98,90357e4e,8c32422a,19f368e8,190170bc,6d8abca0,9cf12f1a,bac7a5e5,baf7ddf4,934aaeb9,5078e0a9,c449de0a,cb932b13,a93f474f,52312d85)\n,S(74c85e38,944e2003,435bf345,124656a,6a409bdf,fd1c16dd,d1246d45,cadcaaf7,bc18315d,caf237d5,5f3ffc65,41bf9ca9,f39af9f0,cdde6fab,f602e888,dc51bb7a)\n,S(8ceda42,698e5995,40091f6d,f50388e2,7c229b0e,76e7def7,f8986b6c,af975e79,a8915f5e,7c524e55,5743c392,2b31c426,71fa938f,84679389,b3738af7,59e92430)\n,S(f44e2dd3,ffe43da2,66fbaa1,990d1f19,e3e4e44f,bb565ec8,74af57d5,feeac498,c307b3c1,a90da318,bf928a1a,a8894080,29874639,ece7700d,4f4dddee,d005f6f3)\n,S(7e30bb38,c9a603f9,d5fe78f7,453d1c81,30c140b2,1ad7706b,601d6b77,5c703984,49c9de1d,1d057fa6,b135ebdc,f0b5ad9c,f9f51cef,95a4cb7c,ebc11d4a,3bbb6d7)\n,S(8e1e53c7,4f7e1595,b4a5f7b4,5b324f0e,435473b0,a61cdd8b,1607c0ef,d11e3c56,584781c3,ae8a8beb,f6cd1bb8,3938fb12,35994977,2d1facc4,240fa43,7bc241d2)\n,S(63d0cd75,54bf2c18,bb180269,2d19b4a5,4acd77c,d2eccb7f,360dfd5d,4b9f22bf,ed79b7af,eee5ec82,e498ebeb,467380b6,1369802c,3dd995ae,c844d3d2,91ddd756)\n,S(feef5d30,b382dd6d,a0ec0d81,b18ae45a,8dbe12c3,dd695648,cea27c14,7d075be4,20ba81b6,b48ebc6,b185d6bb,2fb7bea5,c6a011a1,24f49550,415eb8f3,cde3aec7)\n,S(21bb575f,db07a152,5ff0a7a2,d7d2c189,742df276,9306bc7a,30c2c3df,f2125b94,8ea74299,b7b40a93,3db6afb6,6577ce64,dd10d24a,89bc3907,1f656f5a,71c56953)\n,S(dee2dc59,44cad7f2,310afc94,403067fc,5c1c3d2a,dde88ae0,55ba8bec,d6e5cb08,606542e4,5301a6ac,86c5c794,444006d,d77e2bda,11c8af0,6d883689,7a6b6dd7)\n,S(4768a2e4,98ca0472,67cef4b4,18e6398c,81289c73,e617a2e8,ca021155,edc576d8,f8c574bf,beea93d7,1a2a331b,cee494f3,75c1bc3b,ea918106,9f1665fd,589dbc3a)\n,S(53d75697,160c2b90,aaea7f95,ad24bd66,b5fd7681,f2802bef,d2a71080,74f66b40,4b04d94b,416a8098,144dccab,bcd8742b,13e85b2e,ec8817c7,7b7e5821,2e8b56c0)\n,S(832f268d,ad5f3bb2,dafef9dc,f94bacec,b369d4a1,ffbdfdae,bd4fcd9d,77404e99,a6495805,c9b439b3,26e32f78,8b06765e,8d984a37,86ccb4e3,88b36bfc,c9cc582b)\n,S(657acf28,15b8cc12,83265bcc,9c826be2,c6d5329b,351fee50,2ed96f4f,bb1a6333,171a0a97,b2809b24,a89b337a,cbeab96e,7d1d850d,dc577a10,ef3c757a,9c2da9fe)\n,S(7e3d0a00,a3378c89,741184cf,36e41bb8,758fd131,eccd970,638f60d9,31b8348b,6f2cc777,31f94565,2a3b4c42,29be627e,bb70d5c1,67648d16,df5470f8,90512517)\n,S(649a30aa,4fac6630,c7bab764,19f9a34c,6676f17c,2458fb1d,ac48317a,734242cc,fb3f07e2,5737d6b1,a28b074b,880db818,c9623c12,80268b02,dad90da1,c8d246d6)\n,S(6b65264f,537fa580,9d21588,fd86b246,4d1818e1,ec7fc43b,94af9211,c835c986,537365ae,4e61460d,c2c1caf0,62ac870c,9536d8b9,436a0ef0,dee6a39e,2bf25611)\n,S(dc1a5599,d5cba6b0,2d692eac,304b642b,db32afe2,59e2e8fc,3bdc8f40,72c66c51,bd18d5f8,f99c6070,b7bc06af,568e28b9,2b39dc31,ad49a842,4bff4a55,d11ff42e)\n,S(726d39f4,86401794,9e7a5498,8e8fbb53,b8b13ec1,cd5fa3c2,88f0d933,894e193d,f23e9fc5,68c9e0cc,b258dba2,58b3dd65,7aca0dd4,d9cb7bf,274e62d4,f65543aa)\n,S(78d76006,857c2f36,889c14ee,90a8f993,79c1e0f3,5344cafd,592c961f,75aa8ee5,76dfacfc,994f3985,70d98c75,4f5e6d00,ae3ed428,49cb75d1,580e81f6,3d7427c5)\n,S(d69c3e30,88874c19,71bf077c,89247826,b464d3d5,292196f,88ef0ad6,892375a9,cc7b98de,86017934,c472bc7b,e56f14c8,7494cf5,6f2791a5,d3132c07,26315cf5)\n,S(9b4022c,907c4aa6,87631f88,8d47bde4,faeab1c9,23e125f9,280dcf86,7920ae84,c7468b6a,a7b4db67,a9b4a23e,11fff527,19e454ee,65ed88eb,3b89e231,e504c284)\n,S(e638a253,84e985a3,5dca200a,5e3786de,52617824,7ed0c9f7,9c9d598b,8bcf8447,69211bb0,be8fcd6f,cdb0ebdd,a8782be8,a47d8852,7bb74b3c,d98c41d5,6aae614c)\n,S(e46758ab,e2838a28,42baafad,12376137,7cf72960,d6a93105,3270330a,203134b4,2c7ca1c4,73d0c3a5,8f5ca754,6604ac75,8c460c82,64f5ab4c,832893c3,fcbfc7c)\n,S(c8c8083c,3bd1b84,9b9402bb,9472263e,37e7d2bc,53a77b4c,b0ae9b3d,bc70342a,9085d285,6ebd4446,127ab4c2,fe7e5c84,d5c5c114,8ee76a1c,da72933,9ca6578d)\n,S(cf21f3d5,75f194a9,3133a382,514ca64a,f998b099,eb307655,46e2959,f71f838f,657df357,aa09b443,c4763432,45d3eae,4fedfd1f,7fa86896,2ffc5174,d61fc4ba)\n,S(684aa68,d4aabda9,65adbb29,1056db00,1c41b900,e11770c,c77c687d,ebcd702f,c6f0c4bd,f6f6193b,928d81b2,812c4303,7e6b90eb,598a50b0,742dd21,8d82bf3f)\n,S(b9a4ef5c,acf4a82,77b81803,6bcf2672,945ec080,e16e8c3b,19f7b612,c408c884,1cca67ba,9e98e737,b4a55145,7f254d4f,5d793d4e,22b81b35,f4ab48d0,92b9c745)\n,S(ff439f87,d4784ca7,490da489,e2757106,e59836ba,f3fe2e4d,f6700c08,cdb2327e,98f21471,84659fa9,a9cdb709,f894236f,18ecdac9,f5834dfb,b91a7bf5,8edb7461)\n,S(e1750c62,9c35027a,c1a5f1aa,c9fb4076,badfd925,f5915b11,a267672b,15945ed8,e17610ce,a0b8d837,d1038d7d,9300edfb,5832fa84,c4e630f5,2b01ac64,a79c0e17)\n,S(2b7057dc,1c59ed7c,e64f187b,86adbbb7,1d228e5d,eea347c,75c73d2d,a73b3a28,1b136a49,713b433f,f2c79de6,77b5a322,8003e614,2b845470,5ce884ba,329e20a1)\n,S(711c07c9,ae61ac68,f1041b58,c0f2ed07,1106c2b1,bc47e104,527d540f,53690434,e9199a45,2f5a3a39,9506473f,be6bb46a,3105aa70,2c517051,7b4c810a,5a194c09)\n,S(54dc7650,68c38627,4619d9a1,faadc0d8,c2ad8296,dd0d00a5,f2e53c5e,1a1a0d4b,2e9b7179,3af2f752,c111fd71,c00f4bd0,8fa646a0,428b4813,885d4e4b,ab7e3fd9)\n,S(9c5aecba,3f8b3507,db7cc231,c2c1674c,3c3e27be,84757fc,4f1521f9,c3d9323c,413455e1,9e157ddd,17f51c1e,618dd726,d300c023,f0a0d24b,518c93e3,f2954630)\n,S(c22c2972,5f67e23,a369342d,9a4e1f6d,dc1bf6f5,88d63086,fb54718c,f5183a,a26ca30b,d97ad611,4ea4ece4,cfdd3928,23c02838,9723d53f,32c3b38,320eb707)\n,S(8f87ac94,a29dd2c9,d37aa130,f8b4e67b,da595ca,a22803d1,e2d8cd4,eba4f2a9,551fab10,16227763,6d7ad2c,bb055439,21743078,e02fe0e1,b7dffd6,8749b04)\n,S(bc486976,76c0f638,a116bcce,d7ee781b,876ef486,111fd680,4dedb176,8125dbd8,16d7c6d0,19708ccb,510ddcd8,698c2fdd,bc6978b8,7b0639d7,a1c8ec6e,ee3ea383)\n,S(5a6ec844,201d9b39,92a46fe5,ad4f05db,6e8cf251,24ecae84,3a28da7d,46e75ae8,9e1538ef,f27344ae,8f9c1049,c12b49d0,2d5341fe,33652a8a,9f2eb512,c74ef224)\n,S(dd6b2c56,b13f0ab5,4e0a75ec,526219e1,4d43ad78,7deae379,1dfb387c,541f4d6f,7379c5ff,1b793b97,c8acba99,97a3c079,f1c147a0,f63a2ec1,a0a771fb,fc3d432b)\n,S(74e27534,4d7d8cab,e4995d08,6d61d27e,942e2514,3c6e3040,8402a5ff,12a63ebb,7b5914d7,fefb7b3d,2fdeb49,359878b8,355eecef,65ac589b,dd31ccb4,c270d854)\n,S(bea186e4,b5e3663a,fb00230e,d8ac1660,67b022b9,b69b6e75,aaecb88d,d750d34d,35807d83,5b75e3ae,670bf35c,d415d37,6fbc86e7,4f99afbd,c60a0b46,9153a0d7)\n,S(17ef6838,a07f65f7,cc094d4f,77743c6b,fde12ae3,b81625c,23826228,650f30f0,9d696a8e,a5356fa2,10626ce2,cf312fb7,198b0937,493c9dde,4711dba1,333eba5c)\n,S(b3e1bfcb,38c89fac,af3baf39,80b21e47,d6465473,c9d6a29c,8a08cb18,141bcb7,aa33ab83,2a9d4eaf,2a50f9f8,ba55d0b,c5e3b120,69a8330c,23120928,5f6b90)\n,S(689d499d,c754f099,83372631,2f307f0d,807f4f6,d67df40a,318aadd5,5776202a,dd4f9012,8a19dfbd,8f5f96ed,df2c7d79,d451f84f,fa63b1a5,9845f84b,759377eb)\n,S(4bfb2e58,9df27505,91a73a4c,6ce88397,a2f68f6e,8f866e1f,d3af9df1,f3c96bb4,a9d94c07,29948553,6433f0ec,b4618d1d,af309c6b,73fa4749,aa949e6f,bdc24b7e)\n,S(97a3004f,26461f5f,b6cbbca3,13eecbe7,5026d958,a1804c34,6e661722,c67f91d,8b8e9bfd,b9b704d5,13bb5a50,a725bae2,c7ceb6a1,ffcf8c49,8e87c6ff,e47844f9)\n,S(a07a76e2,48f87384,48e607ee,7f30aed1,db657b9f,b159ac9a,3d38e8ad,61050c28,7d7749b7,aa6dcd68,931c3c0d,87eb73d9,6bd5f43a,b633e7b8,f77406a9,23fdd47f)\n,S(9bcff8ce,3a280998,fe077cb7,a6e4854c,4c834e21,af118937,9a133986,320b8e25,da3214eb,5cfea248,f1f8a1c1,e8b0dfcd,4171b2fa,5e133854,84a6c99b,215c9ca1)\n,S(8f1d2dd,bab8242e,fad20574,c0f28976,d2e98df7,5e144d27,e558b9c9,8d75a036,8bd117cb,294db5d6,a39097e9,8976c701,1042af41,680637d1,c8a1d56d,30800bab)\n,S(73910449,2a44d0fa,d27b97b8,df75ca46,caefe44c,741848f5,36b78986,8d966991,d31b7807,e1db48a3,380608e6,5f865cf4,445c47f6,c6094819,da2450e4,6b78168b)\n,S(e024cfa9,4fdae1e1,2895590f,222b167d,8a41a87b,b1a6b720,61ccac0c,4caf9dc3,d62f1129,cd84f36f,bd1b9439,6f5ce037,fbdafe41,fbebd066,110549fd,50b0ba05)\n,S(a378ab39,e3dce826,6805bcec,b8123eb3,ffada53d,883c752e,e46ce4f8,5bf093fc,db9d124e,4c0a8d1f,14cfc406,4498a7a6,513261f3,300ebe0,99a41f0e,701c7dd3)\n,S(bea5d211,b808e4bc,5aaa1a96,a9b8842b,5204b60e,24d5e518,4b4e92aa,12d8968f,caf8b92f,87c4b8fc,4692efb,889ccd64,610fd604,b9669dca,e033ae9a,453bbca9)\n,S(7ec06291,40b6bfd4,cc4bd45a,8a953fc2,653d73c5,d366b5e8,b732dd8d,5d30428,e96c9515,da8dfae3,a2f4e01f,f02ebad9,8499a318,8905c0f0,fcbcbb58,87360a08)\n,S(9f9698a7,6ccc8bc5,31dcd9a5,b21f3f8c,9d143194,8902312c,b5ab89cf,554c3b26,e08acb08,2ab0eb8f,fc31f7a3,1ca8dfbc,d4b1863e,29d155f,4abb8d54,6c59a221)\n,S(ad955b37,a45f2bfa,1779e8c8,e6786af0,dc49dc9d,d692281c,da10b25d,7517214f,b2048fe,ee71c152,8c8f5dbb,cedde340,284af2c7,71ee86e1,8d565285,5de918ef)\n,S(e7e56815,9412123b,7737b006,f48b3f32,513023a0,70c595af,1749c564,8222e21d,3ff11313,c2992218,cb3a1c01,e333f2fc,ffdd05a0,c381f8e2,24de6add,85aad0b0)\n,S(4afab50b,55c2a433,488adadc,ca5d11,2e225f81,9ab817bb,116109ce,71dd3439,d232e25a,e5a8f6d5,68344997,442bdc54,de9cc597,cc474555,5f64cbfb,6252808d)\n,S(2f739ca4,6559727c,cc2fdfa7,c66da19,b7d2660f,cc63b74,155057be,d55313bb,c39350a6,10a844f,80730a2f,27bbee8b,a06d7ae4,a279f490,f975111f,eada018b)\n,S(f3596671,79f9343b,bc3238e7,bab4686b,5b7aaadc,95848f20,52adfc33,d15a990e,8b5759c8,e0bfb8ff,e298e824,ef18c042,65d7f886,1af8252f,8c9d9d92,c1822849)\n,S(b3feced5,8d79e1c4,d0a210dc,de416353,404f533f,5a1295bd,4d888d59,b43725c3,b07089f0,871f7c3e,440ea905,cebf66de,52c68c04,a6aae237,e23c3272,26d99826)\n,S(85c74622,bb28186b,5f1bffc9,74d51ea1,8bd7e6f9,1a02285d,6d8818df,b87d2f9c,8eb95100,63263c67,976fda8a,18910459,df0755b9,307e4145,cfdd18,15b799ff)\n,S(3823d01,5b240e83,44c936a,c9a5f7f0,fbbe3059,1c20f39c,ca51be63,98ea7a7d,6e6539ac,8f404753,dda08dbe,f7ad4e48,69a67a93,f0efd0b7,b53c14be,130435fb)\n,S(b73ae7aa,e97af1d1,b6ae34b5,f6188c62,33ac811e,1ce5818a,a9f20703,7deaa539,cf495bd7,2df163b1,f6908b7,23042bf1,137a325f,bb8ebd78,c0d12086,e7b76005)\n,S(f6724463,faac9880,41dc4918,5e27b97e,889e74a1,81f35b58,2601328b,143688a2,a290e04a,f10a477c,7c0269ff,42285277,f1faced9,eff88272,45f2d069,58897554)\n,S(9eff8038,1d546c1e,e1b5d562,947f3a98,427e17f4,84d0007f,eebd71c8,261ff959,bca422aa,d4748c66,6aa99f76,eb8e75b8,55f89b0,917ec29f,401caf83,cec111c9)\n,S(93384df7,33d0fece,931587d3,410f2520,6bbbd992,5e6fce75,5432252d,8bc1bcc5,9e3beba1,b9a92647,c630cb4a,69b9bbf,80e301be,fb8eeafb,fa0021c3,ae27c38c)\n,S(ca85653f,975882c3,71902d14,6f50b3ec,1dfe1fa4,b6e6d5a9,e5068685,632074bf,a64fdea1,66808f60,736f7d84,850f841f,588879e9,5d1adcf8,ccbdc4bf,4f743bba)\n,S(b80a52f6,951aa063,1094a2e2,866d3a29,b95cf239,48753ea5,cf5c6f6e,8e082f90,61c95d57,d6fc3ca7,5f92771,61ca211,1f20a67,9a85f4f,2b8b0fbd,494d55dd)\n,S(3d5d3037,3a97dd67,fe45b273,2ce21e19,b29587dd,301f3dd9,b411432,e642a3c8,5c8e3a19,896ef1a5,5cf1ad28,41e47dd6,1f207f22,3388c6aa,23d011d8,fd95929a)\n,S(b274f8ca,29a87fe2,8a3a1269,ddc35b5b,44f9e4d9,81af118a,187a7c36,acb155c8,410d9c55,bc34c21a,6368155b,c282e449,c5317dd1,c4e5758e,27493fa0,4f028ea8)\n,S(f1557792,8cac518,66f59814,a70c14f7,beeaefa5,33d3b535,df19d31b,ce1cacf8,113dbebd,9fef9cfb,93b5606a,e4b48aca,5b7e9c00,a59832e9,6865282b,80b70ecb)\n,S(fbe3f262,18fcb657,7fe56753,42765926,59ff099e,f36252f4,cb5af101,622c40e6,4c872d52,f1202df3,e905a0d,3f9c89f,b347723c,99b1b273,8f3dbb83,df0fa2ff)\n,S(ef7d13fa,25ef46c5,3663eddb,a677f6e3,b24c7e7c,6895e731,2c6993da,3d9384a2,cda2cc35,114e06d2,1f6f896,666c16db,78fef74d,2ee46fb6,a4a34e09,8546935f)\n,S(8e34b93e,afb7f027,cdf8696f,a6407213,91860119,cae17b66,d4f16175,fd7118cc,3198f5fa,27ee190a,e56813e,910d917e,3bb8c850,20b0376e,e55e88ea,eb56397b)\n,S(a8291a3b,8e544240,a0f0dcaf,6369b2cd,98ab80bb,4dcbc2fe,e023cea,1fa52399,f8305f7a,b1993569,82b8f2a0,1fa0e808,46a506ef,5cf0ccf4,fcba9211,284e15a8)\n,S(bd36854f,90dcd6ac,978c2545,7800489,35c4cca,79a0f9b6,bf461da6,5522c88e,631a3d75,7c05e2cf,4a445b22,73cf663a,332610a,8461dff3,846503fa,12e65ae2)\n,S(fad86e9a,ae78aaf2,e55e93f4,b8ee049c,73b86524,e942ab93,f05f9dfe,8b783116,657988b7,20822c63,dadaef15,a5cb3d49,be52946d,53b62ed7,1814ef3,b5aa4b7c)\n,S(e1235938,db5e1f30,fa0b4d4e,a9e1925c,6308917c,23efde51,47fb818d,a39bcb2,7641244a,7384acbc,3133fd6e,9ed61af4,40e3b951,751f9d0c,384328f8,b87bb2bb)\n,S(40ec62d9,7c9bf05a,cd4bd50c,137cb143,8e3331ac,554098a,57b6a92,afb137da,8b1468fa,f334dcfd,5a43d405,aacd3f31,7e868af2,73498367,4d0e5a06,67186a8e)\n,S(f6f5c9e1,c7d94d25,9abe1a8d,745dabfe,59e911cb,c917fefc,e2da2a63,cacb26a0,7f2454a8,550b385e,f49c26fe,bac89a9f,33bd6c9c,2eb05c98,4303a16,6b21ca51)\n,S(be4dd8db,c703a834,9e24773a,acefd0d5,70dd2ec,ef07bc70,ea8156bf,d5b516ab,46a7dc2,5d56052e,dc64a0d1,b414da49,dbb218d8,5abe14e5,c753eaa3,84b958ee)\n,S(273f227d,448ee218,1e43f2a9,89d5942,54eae85e,54fe9f76,fb67ce81,169e1be1,67cf461a,a6c7ac60,1ccdd925,b4b38e84,1998cbec,cabf9441,29575438,a855f35f)\n,S(94ca507b,96c063b5,bfa9d74a,c92e656e,db186570,9a017ce0,e5270bfc,8a8c4a31,98daf409,49c48c6b,8c674361,17aeb669,36c76169,8d39eda8,9922490b,4fa6a25d)\n,S(91d6f747,c1c7e012,440cf7c1,34ba64f8,9ef67b54,3a57196b,d2bd6ae8,f5ef4356,e2117eb0,4d4d29cb,5b13f628,f69e5eaf,2befc095,2fa361fd,f757430a,168c19d6)\n,S(8e2c4d62,c17835b0,97ba07b,37947515,e710e825,15bc614,75a66ed2,ac4cfb84,7b7f7e56,22bbca12,2863c230,5271ad25,b5e4195f,cb96e5a5,ca2be6d5,273d6532)\n,S(55738482,d32c4248,1bb0d1a0,666adab3,8bd2441b,9436b690,77925e15,2d8c948f,93a6705b,ba5e5b36,e73fe83e,e0ea81b,3de393c9,1c209e89,af90c539,9af5ea2d)\n,S(7faa0f45,45fa7d68,918396f6,19beb941,43d93f86,c5a26539,5016d386,b3e85086,cde251a8,3de1f2c7,11b884b5,33226baf,cac36791,1ff30e19,25f499ef,27da9c06)\n,S(61a766a7,7bf6f8f3,a07ed7c6,6648606c,69134c6f,4ab4931,9033f9a5,e8b7d191,7dfa24d7,6bba181d,7bd77606,c73b1635,46f41751,c05c34dc,ec54773b,4abea4a)\n,S(64317c72,4f1207dd,a6009736,6fd2d189,8b702e71,8cf84fcc,7c50427d,7eee171,d1d45f23,b1c5fda9,ee05652,dd30f898,c75923d8,293d6eb4,18a0e892,ae400895)\n,S(4c328f82,5923e7c8,9cdba421,92ad7a37,5a328323,71242c4a,e108c771,fc47356,322421bd,92c5142c,efe89e59,4689a7a2,e8e5507e,be8b505f,9dc9ac86,9d90ae6)\n,S(360aa32,797804f1,649c44aa,b38fa9a3,5d011301,708ac7cd,a4135c13,d86a6758,ce4b0fb6,6957f5a9,7e4ef923,ebfbd850,4f6d4098,5333db66,1152f1c,ac6eef59)\n,S(5b110b6b,d9ec8ab6,635f5016,bc597f31,ec22f7ce,cfeedd2a,1e6f883f,64d2379e,9472fb70,87ab6f91,2b10c6ff,995af03c,5086c034,f0f69860,ead562a6,e409c8b2)\n,S(be27b39b,5a657cf2,9ebb1b16,45f5e1d6,bb6e32bf,e3a52b08,a916e091,9affa38c,93fbf27b,5d03ae3f,471ad91b,69e74fd5,a8f2f925,2bd16473,62c4feac,d26d1dbe)\n,S(8ec65d75,c599fe6a,bddf3cf4,6ddcb4d6,1e9b5324,f5e7b7be,5407cb5e,28a9df4f,3d52541d,49ce4b07,7b543747,3a219db8,29680777,3cdcbf80,e4b47786,14ca082)\n,S(6edaa1b9,ea8c2c45,6c6a34c6,13ad60ed,aed18a04,32e96030,ac7305e3,2dbbf94c,c64c8279,40cbabbf,fcdd4db5,1719c53e,f8cdb650,67af48cf,fd731618,bd304b7f)\n,S(3fb5f6f6,60847e2d,e04341e0,26c4102,68d5a1fe,880602de,c07be98c,22640a29,ddd43c38,95e663fa,5aee3227,4a16f532,df3a180f,e0813ba,3ba113d6,f6fbd9cb)\n,S(2d740009,d7addda8,a802b263,35d41284,b3b9a119,248a3b,29b4a532,654e84c2,cbe1e2d8,1bffb79a,6f9292f,43ccbbad,e763a56d,6d68cde3,d946f310,dba8f28b)\n,S(15bf4abc,1d74793f,6ebf2fe4,aa74e34d,b359ad76,3d5624d8,19c24386,33517436,5efdcb90,259b5dca,39054a98,b6702fb0,f2fd4b61,235ed4c6,cd1f3dc,dab15f12)\n,S(feabbebf,3c6ee0ab,9b584162,476c8e9b,f7523c30,7874d7cc,c4a6b88c,b118d423,c51d328d,276502fa,f79168f7,3787d3ac,b4e7bb7e,1f65b421,64ad6e93,2d405460)\n,S(e3664247,929c3455,e98de868,60010f47,4258c686,4d4a7c0e,4bec28d1,b9af3188,7cb4bd55,ba579fd4,a3066f83,710a3606,2fab9f87,34311609,902407a5,88454bc7)\n,S(d570f391,365aa2ee,29b6db92,2a96e4db,f1820a6b,94fbb8b4,aec45ae2,f97a21af,c0841986,2b0adbae,1cb192e7,bf80dba1,830520e2,35e1e42,569a31cd,fc0c1543)\n,S(9cfce5e3,5119ca91,38629b08,c75b77f0,db3cb593,b2bf8dbc,b7d6fe3c,d1eba55c,33891655,226885b4,cd74d8ce,f29e978f,60a71bea,be99a2c1,d2071f53,239e4f12)\n,S(186ecba5,f9998439,f6a3dca1,a179608d,a15adf9f,f4d2f386,4268ec3e,e62e4407,ec7eaeb9,bec50709,e8dd761f,6253248b,2fd064a9,638953bf,510a38ae,c7c6d24)\n,S(ad52f2f6,fe0b72ed,2a0fe483,3745aebf,acfae58b,b40a0291,21767058,3e0f6b83,b0cae754,85e3038e,c6dc8d,b4e95a54,63e3e6f2,1b99d991,2f521663,3eea0c71)\n,S(aa06c0be,7d72350e,6b094df,f4dec4c1,993588f8,5bd82a1c,158f92cd,eaa7804,ed628163,29369fde,f0fac2f1,a533fcb2,a704637d,6dfaa1f4,a3b57f74,4efbeed0)\n,S(5f7a102c,4bdf0a06,76e1bd4a,4df17a3f,124bfee6,312b3972,c49fc4a7,14b3e867,85f153db,ab40a9e6,747aef3b,cd30f59b,fc9776c3,93293222,8f534d59,9efb30e3)\n,S(31a4309a,64c225e,69567574,e05bb994,3fe01679,6f09a0d9,358b1237,96cd3fe0,9b9862a2,916ad0f4,1e588567,5a1e357d,19ec82c5,b31f967d,af058e1f,da7cab16)\n,S(8906bd2a,505e8401,cc89e32,b9362c84,3443b4f,bafb7c03,75bc883b,11c3e59c,ca78e1d0,1c6fca33,b39d690f,5b85c764,ee15dbfc,48fa78dc,5f7d7cc4,5323d187)\n,S(41cc93ec,a27c4fc4,19fc1c8e,4568744e,dab8917d,d8936cd3,2723737e,e36b4f9d,c11d8299,bdb95efb,842ba828,a6d89120,1fc6a28a,9f208430,c1e2f748,bce6b7ae)\n,S(6e1b0bc6,199c3b84,220020e1,1a698e74,2fa97a58,c498254c,d3af1e8b,23ef34ed,25e0ed2,3f04706,6b4134fa,b6252276,b2205bd0,7a8ba64c,636e0b0e,1d6d0217)\n,S(b55741a5,7b9c7270,dd1e5115,995ecc55,8729832d,9f4e373a,6824d9a2,83490eb5,9adffc91,52eca815,465e533e,c82bab6,ec6b37a0,dbb3b6f8,c3bce25f,6e3d944b)\n,S(fde1167e,67f0e084,251d50fb,bafb538c,9c375e4c,fd6441bc,59a46104,46ff090f,662451a2,444d39f9,58593a02,e9a94ec1,4a1b8d87,9dc80c5a,73bb68fb,67af754)\n,S(bbc374da,188df5c6,5a633621,804d22e6,f7474faa,47a8af94,a1cb78fa,aee68040,c2c74abd,17acf272,6c03bbfe,7dbe06ce,eb1f4e0a,b0001aef,4d8f342c,aef50186)\n,S(bde6680d,414ce86,548504d5,55c83b18,c9f94e45,f55b6683,166cc81f,583e0eb,2b1ce8a2,6b5bbd8e,a087eaa6,49f49a48,2891abda,87c2037b,a73409a2,69b5e2e8)\n,S(8f9ba006,faf50323,b9637f00,9aa29cb,8e402219,75d329ce,15796428,6c84e5d3,1bb33199,e5c30e98,5f5eaa1d,65879a3c,703b7a50,cb04c7ec,a6c7512c,94180e16)\n,S(19f03bc4,3b61d7a8,62bb81e0,f4b84c02,7359a170,de0108f0,e9b9e9d3,95b63481,8239d21c,f31ae885,ae10c62b,8be0ee1a,95db0368,cf0488c9,4a110a76,7d22dd73)\n,S(667c2647,2261828f,2653a0eb,e70de204,29231fd8,132961dd,ba3e4853,8e332941,5758f0ef,4362f75b,c4356b3f,cd8cb2fc,3c77cb25,b7d65c8f,ef7b4096,e0d879e5)\n,S(86558922,618551b5,c4c66c50,9b81a622,ca376318,7c558ca1,8a00a00d,cf100ca8,32cd16ef,955deafe,e3fedb4e,55fd2071,8e35c1e3,736dba12,9f3c3287,4413739b)\n,S(255bfbc3,d0b0d6e,385905b4,af6ee2a0,18109db9,73788509,2d5fb275,f1b47b45,b1b1078c,afe453b9,a35fbc30,c5f605b8,4a1f61a3,1104b406,ab5014db,57e2b167)\n,S(acdae8d2,eeab48c1,9507f575,6ba60b0c,e9d5b6be,e2ac15ba,d31e8932,fe89e14e,b077540,ab137999,7e7dfb3f,5e3fff46,10c2a369,2306ac0a,418d5026,caee0466)\n,S(162b0c77,da3bc13,a62753f2,b7b19c9f,3fe864ca,66fa2dc4,226c5cd8,ca8d7112,377956e8,59c2f465,2af5159,bdfc86c,df0bd742,ec7f9eca,6e675b47,d6eda222)\n,S(9453c9ef,afb6a23e,40ebf013,eb1af363,c28a6e14,d235c7eb,58d3d142,9d1b498b,65e3b737,ede3c00b,5f322b38,9b09a68c,2ff44f30,c7737932,4e9c94c9,bdd78961)\n,S(8409ed29,38a5bec8,669e24db,88c1b6fb,b397ba64,d8a1826a,f011e2e8,32e85506,573a0053,1be979e,1ae3f2bc,3d28ce2b,7a3ec55a,bd00242e,73523a2,582500dd)\n,S(3b55d457,b1878898,9c486cf5,3d1ef107,4161330c,64fc2250,81096148,f5ea2c45,24780fa0,3e83919b,9e3491a3,7e0b76d0,f5d32f2f,a4c3aaf0,d2e7c955,43476fc6)\n,S(d3fa2c21,f4704812,a5b582f,9096fc87,422af325,5c5d006c,63e1e9ff,d2d9ebb6,a6aea607,9ed334eb,9355fbff,27650096,ab19a007,191d57b9,4a8fc12b,a59bbab9)\n,S(a938a4a9,9dc45307,29f3bac7,4fcd7241,1e56cff6,f53fb048,c727087a,9a54b374,3949a589,388ef8cf,aee8fe82,fde39e01,41ad91c5,2beaea97,e7494659,1a27bebd)\n,S(792220fa,aaf49862,479a6de2,35be75f7,e811d12,7420571f,e46213a3,e77aa93b,5f274791,31fc7585,8b82b021,52057cc4,f1686543,3eb6e22a,de56bea5,8823131e)\n,S(b1bcdf1d,57699459,1bc11d27,cb15d84e,75eb3d5b,2f9b4bd6,1c848c14,e9b7f2d1,a2115735,8c35ac77,e116a0c7,77917e62,e1d09897,316e2389,41d8e170,90adeb50)\n,S(735b746f,6f0d453a,c45cf288,6941cf13,c63899e1,a41ff3b4,cc1a4c74,a9b2ab33,e4c2b67a,c6bd7917,2478b52a,994dccd4,475cb24a,ed1eb77d,a39fbcda,9c02771f)\n,S(1640d0cd,ba4b4fc2,f3670b35,2485027e,2724ea4f,df918b72,3807870a,39fbcb2e,a0a71f4b,ba481eab,999dfc3c,15275eb6,b06d129,48000828,be4754b2,749bae30)\n,S(bff651f6,df72e476,a097231e,b496618f,6e7d621d,dfd45356,8b08c718,e138caa7,10dbc188,2d0a17fa,d769f855,bffe1a81,14183445,5d9ae144,e6eddb52,8e67f99d)\n,S(1a3fa743,cf429f3b,49e122c4,5c6d6e8d,18c633b3,f9903c9a,207f0405,c2716b69,b1b2c87e,65faf1fd,debc377a,bd9648cc,24abeb81,75efa4cb,5f0a0b06,aa2f1e28)\n,S(bc2a9ae8,e2940908,ef5420f0,9ef4c2b2,ae988e5c,c0c0efbf,62f8ea05,b305ff21,ede884fe,6b48627c,84c96869,5944be60,df3ed5c6,66f16b56,188a9e1d,6bb14e80)\n,S(8cee080c,e9204a62,502ae88a,15965abc,b2a8f18c,80f6c461,24b073f7,63990ec,3adc08be,7bea0bc2,b2c5ca91,963f4c40,bdfdaaea,318fe3c7,866229e7,e53c8fb5)\n,S(2fc784eb,f79f916f,7f57dfc5,8fc62e8d,bcdc7dc6,70d6a444,c13f397d,ed528e2c,56c58a3c,be510393,90a88028,12d03658,20141c,b1b24241,241dba91,74d6eb37)\n,S(fcd83e1c,ec7a6db9,1aef0894,cfb2e1e0,d2b48fe4,88bcd28d,c14e7824,6e62aa35,a86c9321,e2dd113b,cb7ec78a,d9d4db68,b5ddbc01,70aa0f67,5586b08d,6694a853)\n,S(4e4fc5b9,65584dc3,40cec4ed,87ab0610,d674e1c0,9d76d28f,e28888df,7f9be562,d2344fc3,de7e5372,ebd87d0c,ea5431d3,2364249c,f6c350b6,d7aa2353,26e9ac7c)\n,S(8df04fe6,e93afc18,b0508831,320caa9d,b21fb740,46bcc364,aa80564f,6f89270e,d7b37dd,2463e50c,583dde08,ca253215,4d52bd8e,a4252c55,6749641b,71ee7214)\n,S(f662c961,3102fc4f,afd27352,cc697de0,1f4a1406,f99a0656,6597b96e,cbc99305,43783b26,759a2eb7,8ba4a3cd,e865d1f6,474b1ae,26eeaa2a,15220353,f6bce384)\n,S(2052f92,b66998ca,f172ce,15cde941,484c5ee3,d3ae329c,87f339df,ae944439,3e9ef8c,9f4257d,c563509,6df8efa8,ffd2312f,60684baf,bb9e5d,9cbd04ff)\n,S(730aa6c8,9c8abb08,855bc551,1938bc46,bad8f226,4b162386,9f2e1ef7,c2d6702c,7523fb97,799e2bb2,f13ba1d,59510bec,ee682f98,f865aefa,cf3c6578,bf46ff81)\n,S(c5773c0,7d65fcb9,7cefd396,b07dfa58,1ab237a6,be3c1739,e6db944b,c7991c59,6afea6af,44ea94f3,ee67d071,4b6654a2,b1b335cb,e914d305,1a60b05d,44cb81dc)\n,S(3ef9a63a,5bdce751,48d7c585,5e3e9aec,90d34ca5,1a3b4829,979d67be,c38c83f9,145e65ae,635acb42,e7949060,fe44f350,3535d417,f3ce9e42,4c3b3d0f,b02f2c73)\n,S(a1632263,42b900e5,887b1800,196c5be5,11065746,52cb88c1,4011aae4,6d14bdc8,beda5e2c,40b55506,31aae0d3,fd9997c5,3f37169a,2d810b5b,402210c7,7c372cdc)\n,S(8c1f5646,65449ca1,f16015a,a876bdb4,4d965993,7ca6936d,5bbb80cd,c2da6d65,7cbacf98,f6f7363,8940358b,60beec4d,1cd1a1d,900f84bb,9db5f784,d4565034)\n,S(693ab562,230c1ddd,3493c64c,6f7e2bb3,a74cc535,2b7efc30,630904,e700d5a6,db890cb6,d09d5be7,ddaeec01,299880a1,2e68acdb,dd950118,3c8f5f07,739cf4e7)\n,S(d761653f,f7979336,f833ca51,b91b9e90,b2bc04f,7b7407eb,be3c8462,95d59df2,f81a5d74,446e9762,2391368a,ed154b2f,4faefa60,af93d727,8357fd6d,98537c5f)\n,S(41de1c8c,a1315711,3435ce37,c2d2efef,24a67cae,59347d23,44bebf0f,a2cecc64,77629b7f,46cf1d57,a03898fb,cc9f4e37,937daac8,12c4df74,846d8c89,60095559)\n,S(21f89207,4e3a00c9,39862265,c1762dd3,2662d182,397c1127,4ef144b7,f598b650,e6e30e11,566dce23,b7a6a06a,11e12bcc,978a6b7a,fa9297b,8c978f56,40f8b4f1)\n,S(6163f61c,628b4800,dc49f30d,dff19310,369012a8,f31d4a25,27c790b4,c51f068,4e87a17a,12055cd0,4c4bc19,e052a219,7dc5847f,ec984f9c,aebb8f81,7a7065ec)\n,S(a68ebde6,43ab3c15,72f5ab0f,85d683f2,6e6eaada,550e2425,f85596db,8e2dd200,487604ed,38a6387a,27e3cf1e,9d4865fe,7fc67e7c,ee26ab11,1f03e0a3,316de778)\n,S(9b9fd342,4e065ff5,b82e0c4e,e5efa0b1,d0991087,684c46d5,7885adcf,b352d06c,b11a7a46,570eb251,6562ae87,90eeb403,823380c4,aae99329,de713677,5b5b5e0d)\n,S(d80c347e,98db32bd,57ba5728,20c7322b,b295cc3a,ae326fd9,49e7557d,27151fc2,6d734eee,40229d19,465a0e2b,a011af39,62ff5c08,f83a2e17,e5c2783c,a430cb42)\n,S(c8aba983,5f814895,e5d05139,7b23988c,7fefedd9,aed9dd20,a9bb0025,49e63ef9,3811b18d,8310a67,532be770,45461d82,e40c0ff5,6af355a7,55ed4708,f1ab0c7b)\n,S(1bad15b0,a186d418,bb84a87d,d2fb9255,9aa64547,cf47a93f,73d23953,86b0e301,e432c50f,662da1ae,f7ee8f73,f5d7ac4b,4a4da6ee,5a943d17,7557e64b,5eeab1d2)\n,S(720fcf05,dcbb0609,e5b45efa,e055811a,66d84384,16f7091d,7ea66186,922779e1,9045fb14,37d2086e,ae7d6a64,49effaae,17e3a559,571ab010,57f20fb5,80535906)\n,S(96a540e7,8fb6647,63d3b129,8a1100b0,88a2c3e6,6da3ebe1,4b6c39cb,f01c4b2c,4debf0e5,c95b9a1,7bec7f14,12018197,88a1c325,12f60973,9d5b4909,f087b5c2)\n,S(2f068148,d385bcd9,6fd6b60,b7e331b5,88419085,3942ed16,18b464c5,9c3ca99,596f3fb9,2fa7377f,a9ecc8e5,be8421cc,77339f62,c6f1572d,7a28266e,eb66ae52)\n,S(466e9733,ef167fb7,233363de,16d9d510,74d8e5b6,35abaf38,20a037d4,f6b3e45c,73548e1b,d4d5b78b,821fb1d9,94919bac,a9d4e12e,13a2e8f2,d4c5df51,2553410e)\n,S(f8a841c,a8c7fb3c,9a334f12,cfed9ddd,d1dbd4ac,764f3c6e,87a42818,a4a8e51d,57ebf669,72e9c4fc,7c435cc6,a85d381,6a969d02,ea85edc5,63c57187,34f0f926)\n,S(d8c7d6e9,6719e74b,2eb7ae7,59d82ad2,6aa003ee,58e3d9df,ea97c7ae,6d6b887f,f1bec88e,5e8df038,b069692b,9e44245d,a11feed4,c89ff45f,17bbb6b7,1b0e43ca)\n,S(afd5e13c,cabf51c,19c39c4c,815618a6,14a4f461,5fbaab69,624d366d,540ab638,9ced3d42,5c361706,16cdba99,653c00aa,e5212c5e,939c0bf0,3e5a1cb0,a05cba0a)\n,S(fb491696,a4a1b9a1,572b462,f4628f66,b8368f3,3ce957d0,6ec29a0,92ce994e,b4fa2340,68741570,a56182bf,4f1c71eb,2c80d6a0,cffa42bf,a3e9d9da,59507de8)\n,S(96e301b1,efd54091,80e3aa96,6652a253,78ce4bd3,cf587238,f0367a58,ec45b0a2,1bcdfe49,5ed90efe,7eb853f6,6fdc5b7,365ca2ae,e1d9b787,afd41b9f,c00f308c)\n,S(9cde8d26,40d197a0,9ac00167,9b93092a,6eb8b13a,4d9fe2e5,6365a5f5,fc38d809,c86345d9,cf95fe50,40b2b2e6,2bf4267,72cdf10c,988a4f27,836d960d,c98501ef)\n,S(d33ba473,10c37342,43e2219c,f3cf4881,2e843be3,c7492d01,80239bdd,20a829f2,ac774707,a5b0888e,b2ffa131,b71035d3,6af5be1d,3a3605b5,751b92c9,9e58a45a)\n,S(6b364a32,1b5aecb3,749093e0,1b5229d6,5576e65e,1bea096c,29065a87,e26cf2aa,668ba97c,a01f659b,3687cef8,ac87dcd4,7a8a4f85,4a434f49,9592151c,b8f96152)\n,S(d0009cbf,1d0d0673,5f66c16f,5cd4747b,d33b3347,fd7f096b,a026355e,917b5015,41c10a72,3e82bec0,b92e560d,3bf1e0d8,15a22e50,3afb4bf0,e5caf771,569a7dee)\n,S(e618f641,a5b443d0,704102b5,40efb697,c470955a,8375e6b,a845c299,f377b701,9d615e53,edf6463,9b3b2d0,8684f8b6,15cf4122,33991a4b,5b7c85bb,f5698825)\n,S(789c55f5,d393228c,7cc7920,9e705d29,867a6e9e,750d05da,9bc6dbdd,36c5c49f,8f38e43a,338058c9,39c64ff4,3f8f7bf0,2a7910bf,dc2f9af9,532049df,ca236de3)\n,S(8fa4f0a8,1bacc20c,5d402478,23401597,bfbcc47b,973abe3d,71d33e2d,fee792f7,7dfac188,c5d6c17d,9e7430ed,d9038a6,e6fcf47,174347d8,7a68aa4e,cdc46c38)\n,S(4d5f8d87,9377b056,afd4c8df,54a48673,c43fce03,d05be56a,56c42a23,356c34a2,b064c60f,a3b75513,577c171d,68acbef6,ac96f665,6a899d54,29e9427b,533b8e36)\n,S(7a409ee0,8299930e,ddfc1e4a,db8475ca,9a99bf4f,a178a8b2,540ae448,ac87a3b1,5c4873af,c8a079cc,38a385c7,2ca039d4,4363425e,67de4cd4,15d09514,50f28e17)\n,S(ac327275,44973221,dfb8b577,e33bd935,76407a86,77a1a842,bb04832f,68304e88,2b41b0de,3e406560,a57978e6,3359a911,6f993a91,9dd1c2ca,79c9a36a,6a4c8815)\n,S(f9168fd3,973728c1,30dda9c6,907912d3,2e6cf9fb,b1c7a058,cc948f4e,44282720,c7005217,a6adf515,d8d3a87a,7e8a8b2e,aeb470db,c014824c,733e9a7b,17111677)\n,S(818b9a9a,295d8f3b,bfb69d3a,f4749e5e,b0c1c04c,838ac3b2,9e74f6e5,dc73281a,141d14ab,64b3023c,597e96c9,3fdf393a,b53f45f4,56cd17a2,bd917af5,dca8daa5)\n,S(90a416a9,dba0e05,bdd25dce,2dd0b0d9,200aef56,a6c0e16c,748e7d4c,99cac1c7,bc871391,95a2f128,af9c9c0d,56bff605,2fc27648,4e0a855d,6472f0e9,a779e0dc)\n,S(678248e3,d48fd800,8e694890,b442d3f8,4f851881,9b152a6f,da24a6ea,88e1efb8,fa5d302b,51a36e66,98477693,9ba9c095,eb8b78c1,8f1bb114,53cb1904,a2185615)\n,S(c2333e2e,742bb244,b7dac90a,18c2e65c,1dcb447b,11f8596c,bb3fcb8a,1e85195d,d15b8771,a31ff36d,b46b9ca1,b0ba345e,b877b7ec,48de20d4,71792a78,17ee826f)\n,S(7d562291,9c72b694,d81bd71a,e78204af,995a63bf,3e8ecb3c,d9b3f589,c75ef8d8,aa554f52,67d9d3a5,8d35cf02,191b533d,ffdebf32,dde4cf07,252ef949,ec7df6bc)\n,S(c5023f92,698f955e,4fcf7fda,288673ba,97b4d275,7f26f25a,c63ccfe9,155232b4,7d9dbce,def550c4,ee4c881f,69010859,c7a09ea5,36a8f7d7,17c1573d,c5db971f)\n,S(37dc82b2,ed0e9533,e87867e8,d1eb57ed,707f335,b081d14d,d57aa247,645bb1d5,ff0c021a,d28649f2,3f000ae1,123f909f,1c803a9d,98ef2487,bf5d44bd,a97068dc)\n,S(ceae1d30,2bf19dd3,a952ac79,8426244d,968b6ddf,25e16357,553f7636,a15ba8ed,c5a3a752,4d05206,39ecb8b,bf4282df,a1f9c795,ea74410a,ed9e064f,9a37c70)\n,S(8bd49da5,fdb92648,f321bfc4,2d8145c5,20b8dea1,46b2bbf2,7a054698,3eb6574f,f769854c,5b5c9058,20ab0765,1a6d8104,e9a9dd1c,7aea6425,2b239ba9,7b0609f4)\n,S(d1553a8,9a5226bb,3c5b6296,9f094b2c,1b761aaf,2605b0ba,b3793f6c,6959e8ee,d7b11159,d289d42b,8ca2889,f3dd7d01,e1cd0e5a,745b9f12,ab98b823,3211b2fc)\n,S(ccf443ea,d8b17d4c,ec59ab81,74f1b1b4,8b6c3934,6e64a955,c617336e,aa6abc89,5cdbd39c,64510cdd,b342cce2,62915966,f8cef7cd,e10f4a7c,41a0d495,e5bdccd1)\n,S(f95ad24e,7accb2b4,ce6afabf,6c1a40a0,172cf2b8,42871778,881ad94e,3f3d8d57,f3142d40,377543bb,6dee8195,743a6d73,e60dc5ef,4b0756eb,68d09d6e,326caf5b)\n,S(464189d2,52726cd2,6f5ad4ca,5184503f,c546144a,ce7dfb32,5e4b4147,da7bcaba,910f8aae,acb04646,3c6a2a31,6174510d,8ae8bac9,fdce4c47,6c0dbd62,5196e2f9)\n,S(637d373a,7355334e,70c78ae4,99429ce2,a5d97257,c0f407b8,1cb41704,d1b36415,469fa81,5dba5bd8,bb53a5fa,aff5b4c,18e7c28e,fbf21f52,14359d6c,7114c818)\n,S(b489330e,2a4a4a6e,a99091aa,4e5aebaf,dcdba016,2bbc38df,5a49d4e4,7eee62b6,e1fed3d,93333ae9,2198b85e,fd68582a,35f6fb60,ff268494,720b387b,b3a7543e)\n,S(8f2fbd92,70781f54,9d32ca01,2479438,2ec9cad6,2151c893,64c1cefb,c2324b12,2ae5c8a,2e018e74,2089a4b,12082c73,ba466dc9,851e7226,388e48ae,b1270a1d)\n,S(a1871963,e9a65bd3,9e1b667c,55fe1a1b,87fe4215,8273c6c,f338f8cd,9119a828,e6881210,adb32d79,10dfe9da,c46c728b,20bca3e1,ad130240,f0dac7b9,fcc0cbc7)\n,S(4a91a506,e8b32ca,13cbad7,99c4e3d7,21fd64c9,7ac8a1b1,e7f4bf2b,cc0ffa1e,66a0ee78,cb63bdd0,1a7c4bed,7bb565fe,832eb2c2,d32f2032,c33935f3,f16a40ca)\n,S(61c960ef,2a3a6244,e8e7ee79,d4f5e98,88539c0a,b8be739b,314a100a,375ab66f,13b94913,ac8f600d,dbe9a82e,8987a061,3672629e,45d7d887,822faff2,60fb9e08)\n,S(10325f87,f797c48b,2e6c7acb,bc0aa0e0,537fbf59,e74ab9fa,a7630c9b,86a04b72,685c5ae7,26b5c9c0,31e1c830,d513db4,b7fda140,14f8b723,7a9da11c,7ce9403f)\n,S(71bca019,c15a3534,e5bebab0,6e1e1821,1ab01e97,dd24e1f9,1f89f834,b2cfde74,102387d9,a8da4f7,a483480b,316f0303,2178e668,f7a72719,2ae7e54d,27314a8e)\n,S(7d30b01c,5c93abf8,9a50d14a,535a88f6,7cbb535b,1e58540,661fd7ea,91121fe6,e3d7e70d,1a9c0cb,2d6c86df,53709d18,b1989a5e,7642c1b7,cb381338,f6ed96d2)\n,S(6f0322af,c1617968,b2550b3a,cafc8d0b,9445fd7a,4692f933,3ae9146e,fa2d3a4e,ba402962,d311b424,d05f199d,31b07d5c,8534ccff,caf817e0,88712bb4,2e6496a1)\n,S(a3719ef2,c34bce90,feb7668c,a07d1a23,e2e6fbbe,1eef4b93,d2995e84,2c74688a,7164f77b,67aadb53,30b4127c,2d71dc46,f11e2d72,25968163,f4ea7358,134e5d56)\n,S(3cb0007a,d2f1fb76,aa9752f0,218e2498,b7217440,a6a5136,68e95a78,4f71a72a,2f498749,12e8f469,e511b7a2,5a5046c0,f922a343,24620b51,3f6f0160,6de6b308)\n,S(26b62d6e,f46929fd,88f00ca5,a699ac87,e090ab0c,8f02a078,393fb3ad,ae18c055,4fb9e53d,1b643585,4f2c78ed,1a818a80,1ff62c5d,fb0f8f23,d5e4d096,29886fbc)\n,S(55e9ad69,68f490d,bfc2e17b,4e90dc5f,58335c1f,7bf30d44,79679acc,8cd7442,d4df7806,f74d9701,378ea804,be9a6270,85767e0f,b816ddec,4dbe34d9,536fe892)\n,S(74a87add,723320ea,f1f9c35c,eddb6133,79835723,c74bc043,af36aeb3,5e1cbc45,5c79ef91,bccc2579,eea907ac,85ff8c0a,57fb48a7,c273f9af,6113e177,588fb14c)\n,S(d4f1a9e0,2189ffca,c1d9914c,177fd66e,9d9a41cf,d1a38626,aed6b82f,70ba8020,923bf669,6ad7c71b,bfd696f3,9d68373b,9d0cbad,f367363e,2f70a93,4a0dea5c)\n,S(593c7afd,c178edf,9eae7fb0,85984992,bc5ca489,16a2a155,a0314d8e,31fed706,ef39bd47,64f3b3b4,cd505e3a,628197df,5aa74126,30d83793,75c85b27,76a1073f)\n,S(6622a6ea,569856b4,23e9f68a,78bab680,759a0089,3f6f645b,2e0eae60,f5dc9d3d,e84d491a,1bfc3127,3cfecf5b,65621213,bdf1af30,2dd39d26,d756e75c,4f9bc86d)\n,S(d7149e32,fb34d956,1f5b25d0,650409f7,33a28fc1,fa4ad822,eabe98c6,74b3437d,2c249dbd,a1a82561,51b6eca8,a44bad96,1b2d37c6,d01c1d1a,70ceaa38,9b3f5039)\n,S(64058ff8,7cadb65,8efbf32f,a68b7b3f,19915f5f,b434830f,bd5ca208,a4a09b6f,71c6dc90,f4d8082f,72d5697e,48fb380b,8486d7e1,5f113cc,28365ef7,d3ee9999)\n,S(6a6cbb7f,5b571865,d70ec29d,425115a0,82d1fc1,f0209e8d,47be5e5,a9965dfc,fbf10d18,f3af0e94,b2a6ed30,c610f17f,5bd571a,41d073c4,2b2a4dce,c98ced0c)\n,S(3f9a9be2,9a72cf7f,2086d9ff,3701a35a,94a7f81d,4b34a364,916a45e0,d8652874,25b12751,5ff033c1,70feaee1,189a35d8,ba0b8da,d4c943bb,4fdcebd2,1cffdf72)\n,S(873be5e6,3cca17ca,95980167,9568b487,3d34c5ce,68abd305,169917a7,30dd206f,6ea148c1,280396a0,7ea5c5a4,17980f48,d076bdab,3df1628a,89da4c45,14bcbd4c)\n,S(17865995,f28d4c4f,43e2e9f5,9b20edfd,830a65cd,d632cf9e,e7024ec3,4da0834a,6773c06d,478f3822,86c749c,5ae09a10,910b5666,5b6df747,36d20adc,af58332c)\n,S(efe91146,fdfc4865,bd784853,ef79b8d4,d2f020db,3f901f45,38c74c80,bef49172,a81a34a8,dc3a229,8348109c,14d367c8,7abe6753,50d013e0,b1b0372d,2a6ee5ba)\n,S(7ee6fb63,36cc88be,3b3c2821,1552031f,d017aa4e,192bc122,973545bf,924e8a8e,a656fe25,846e8173,327ab11b,d8ecd2ed,9d1909fb,21d1f789,588b4fa9,a8ceb0d8)\n,S(449677d0,2a78e9a,ce374016,e19e7fae,46efd0d6,4839680a,4d5cbc42,173ee605,47017ad3,3357db8b,ceca2513,c6477157,f3daa99,9cccb709,bbe88340,29312013)\n,S(ca9db080,12b9fd4a,cef2255e,83f35fb,e20806f3,9839c2a1,699c5d03,d7b5762,6a1a811,3d82a60b,677d61c0,af995bd1,4c598f08,f915e971,d9f17e9f,8398487b)\n,S(d040da2,8dd69fc,67414651,714d4e94,5a27c4a2,9fb44612,d6d87f4f,80e2ba45,a1a72b85,957a01ca,8c8d5d3e,d9ae6a2b,31d2d192,cd7afb9a,4d1e4629,aeb9f356)\n,S(27eeb708,fd2d52a9,47f69872,3706b67a,1d6e29b,cc0c86e8,111057f1,e3655608,7f67db4c,25b2e88e,275e53c1,c52eb47f,c2dab668,64b91236,522229d3,1b001a94)\n,S(3bc82484,daab22ad,6d887a01,ea9f4b38,bb70e272,b15a7b4d,ab5e3dd2,439d8a23,b0ec952e,6cfe3ed7,4e6246d1,46c9c354,dacbc024,45b1af9a,6a668f0f,6fd52ded)\n,S(d0a00060,13596198,8f070ff6,7ea731be,7f97a51f,68faf899,95eb0ad7,746aec69,dde4a735,d6dd08cc,28e2588e,9af0eed7,57017b38,790d381f,74748f30,9717a989)\n,S(8efc4c50,51c65e10,56f5ccb6,a4be2014,a9dd043b,641b7690,cae2a8a9,1bbe8ecb,26fd1112,e1aa603c,91eb458e,3874d010,db58efab,5dd9ed20,e156886a,5f39fc13)\n,S(e42271b8,881306ce,f166138,7d14f0d,da0db64a,b379368e,fa79969f,432cb110,d2b9999e,7ce9f3c5,8a6c77ce,a97cb9f5,f2860299,9bacdc7a,b7d5487f,8b5c9f5b)\n,S(bb068f3f,8e7fbd31,f3aaf96f,de53d134,e3a88b63,9d8d43c6,4b3a2b45,2f8de740,574410bf,903c173e,23d88fb1,3f7534fe,566984c1,aa10f0d0,f54eea9e,7883819b)\n,S(a3d0bd11,d728bee1,b166dff1,81c3682d,650fde7f,285ed5ef,b2ac5033,5327cd66,3e290c2a,42afb4ed,8b5a685f,69bdd379,44215104,17a61d8d,bd3dd2cd,805c5f44)\n,S(9884434,78bfd51b,d27d04df,b5282a72,4cf82c21,487a8733,9347e560,994debdc,545574c4,359fe553,b694803c,5a07339b,b4e1a95a,b9fc72c7,5d4c8f5d,ec6ce4df)\n,S(8cc104b8,58b8fb94,e0771dce,a103a7ae,adfc50cc,dea4cf93,a5f4ec9a,d44acea3,ad73883f,57c470cf,d477f228,8badab99,938b6723,516f97b1,22578f2b,f893b506)\n,S(1627b08d,a822d244,ec8fe2e7,d8f02094,111fa362,e7190cbc,11229a4c,2043c626,41f6b029,80fb1370,c1e800de,39507798,8b6f315c,f910bb00,423ff727,e9e04c3c)\n,S(459d4b1f,2676fd9c,2aac5937,376dc18c,fd4244d9,dc937407,d641e0d5,491df69,6f22ce37,a6ea6a5d,c9823197,22b0085a,e61fe140,d7558fcf,7bb44976,5de7aae6)\n,S(cdfc7b3a,b755c181,72882e37,ff641e2a,94fa4e5e,b1b2947,4cd6e94b,f4f9387,76a11dae,107bced7,c2870dd,62ef183a,d45a02be,ce33e333,dea061fb,d89e787)\n,S(5e189861,b1615f76,ac416236,e84b0961,b2639845,ecf6e6ee,8dc33217,b0952afd,1cfc65b0,9194d1f9,71136626,a2c3896f,5a3de705,ff1009c3,49a09c86,ea1667e1)\n,S(84749eb3,3d482c59,81cc08bb,8634bad,fe0572d1,42367cc8,57a3c399,821d12c2,146a4fa2,3fecc0de,f00299c0,19406b30,dfbd9ad0,975717c8,7630e726,6e96022e)\n,S(d73a1958,e9aa29b3,b1ab0807,2165c06f,daa38c90,6be76384,1851fa3,5711bca3,41f13f90,20633dac,3a5eca40,229ad15b,434c4f8d,4ea570ff,76d15d4f,63ea882e)\n,S(1d77616e,1ccf1fda,bd4f0beb,6b60c1b3,1b94576e,bf2b61b8,c085cd79,caf8c018,7d3e5813,cf181271,55f3d084,df1077eb,2bfc9d6b,8ab6ede9,55c0ba4e,5095f23c)\n,S(bac936d3,63887dab,cf27ea02,50bd550e,db37cb71,a2a8351f,fabcb1d,6d6ca9c4,7aa18819,8bd513e6,b45d6633,aa1af70d,b1a9c432,ffd1be4f,8a8fda79,a38c47f6)\n,S(4d18c5c7,51639d86,b21712fe,b2333d52,5f4bd3f5,e4208537,e1e3bf7a,9343475f,2a60352a,4d8fcb6a,ce01b4c7,63619f16,156868c2,d85e882e,a2e7fb80,16f6500d)\n,S(8e473caf,d74fb06,b483d955,ba3e35ec,e99a4495,cc86485,a8b6fada,c4c8eb4f,41708d5d,ae2de832,c7c38389,d0ae46c4,46add069,8e83990f,52a545f1,6ef66942)\n,S(91366f76,48ed27a9,2ab639ac,f37aba5c,44e8bea6,1402e075,e307c4fa,ea2cefa8,868fe0f5,565092ad,677eb1c9,8959affe,5af504a0,c929bb58,2f5c3263,114ea371)\n,S(1eab20f6,51b63685,a0a8489b,4e3247ce,1592c4db,40cb2f90,7eff1c58,c6609915,c142e9f4,b9522b0f,1db90912,c6f83c7,add6d8a,6bd1de4b,c54503a8,4e873cce)\n,S(a0652eda,796ff72a,eaf8cfef,371594fb,e1528929,1320230d,2bc6a252,f4b49484,67e6d40e,8aaca7cd,f2a2047a,fc0a59c3,b4eddc1f,d3d5662f,45bb5792,9e4dc9a3)\n,S(83915afa,c936886a,3deb8958,70e926e9,7ee4a6ab,1a5c66b,a1602c13,c4f959f1,86dad7b8,e870dba7,712ca968,1ab63524,2ed55fe0,36a148fe,25b1bdb1,1ac2da4c)\n,S(293f0bc4,11454959,86b19fb8,6f738d2c,814523f8,b75b280,f8f9021f,95db6061,12d98ddc,894669fa,86b073e6,5855a0a1,760733e7,b7c5bf5e,868dd977,82a4fdbd)\n,S(a829b1c0,d6780732,321871da,2d28ecdf,18d13311,4ddc33aa,8ff4caf0,58fb9ad,c5375298,501294a4,dc38d1f,a8c96f9b,789ee9c5,6533643e,1142bce6,8e1ef5ef)\n,S(48133900,866a344,68309fc0,cc18f79,c0e01dfd,ed6a7bb4,e5a4697d,4b9cd462,335b7188,ccea4687,50fcdfc9,a6fa6034,c239fe6b,27cf6460,182a1c0e,c8c96707)\n,S(7fe9d310,bbdaa101,b28c1e71,137a7ab5,181dca39,aa8d1469,bc06c856,3c7a70ec,18006c39,538a5141,2371828a,4d73e02,f4699a34,7e887318,57e394fe,75c8143c)\n,S(1bd5b65b,d79c3eb,54ee1ce2,541b4352,1b7d6c37,d2a26f21,b51d2c07,103ebd8b,66e81b90,a120f04b,340adb2c,42143ef6,5d8a383,46e71856,673090ef,291d7bf2)\n,S(237374f9,306e5714,5f37a1ce,1418a238,73938fa0,8bb971ab,fb5d97e8,e5fa0206,d8410815,fd4049e,f54abd51,fe2053a9,bde7f3ac,f40fe992,21bdcf8d,4b9808a5)\n,S(33279bf7,38cee621,c17f75eb,bf78af4,58c1a4ef,a7197456,b57ee679,f2c34bfd,d63a21a4,5dc29462,13750d88,ea5e12c9,900b110b,ce433c49,e9b37382,7de327ac)\n,S(ee274c71,b1f43251,11d7e100,5d7e9d97,ed1590d8,95cc6504,3e8ed6e5,5a87a9b,73f2bd1b,1baec4f8,ebbcf9ec,f613869e,8a262d99,7bdee49c,c5b2fb22,b652e9dd)\n,S(2f49f0ab,c24536a3,3bb0857d,57c35846,f5dd036,3851a873,46f93d0e,53ab8de2,66b3dcd,d367958f,fd06121b,e42237a0,a9edaf21,79ded853,e8bf3c5,b6a81531)\n,S(2d122193,ea92ca9b,46eec10e,2a23268e,9b1f972e,91821489,8cb12571,1e3094b0,b54d4b85,a02f77a1,57a48001,c0a26c81,2c038d0f,b91575cd,835183ff,3a0b7071)\n,S(9047eae7,841f346a,374131ee,d4299fef,970f59e1,e4bb1fab,819fecb7,3026ad44,d59d3d2a,2c03be1e,553a54d,2dc61c9,e13364bf,3338a5f0,4e4466b6,86695061)\n,S(f689480d,c0ddd61c,ba5aefe3,17aaa497,c2d051ed,d527cc20,16877986,12d7c8f,dac41495,a948d83e,37a9f310,18cd7abf,6d5608f2,213aa5cb,7a2b8f90,98d87398)\n,S(4a01c418,be472958,5bae0c45,cf6233b9,ad0177ef,eb6e74ca,ded59788,a22d083a,8a12550b,83de095f,22411b16,937a85b5,a079c7ea,b8137f80,ffa66116,2a1c53f2)\n,S(a6c715ad,cdc77020,febc4ae7,c6caf5a1,107147ba,8281d3f3,7945682e,72a5da7c,69b4ce46,2634da4e,e9e43559,72f87511,a26718d1,d232f726,577f0d5,6b49d165)\n,S(68ecec4f,aa19ac3d,dd8b928e,8362ed53,3be24406,15f5ddf8,4b8a376b,cbff327d,f725f978,f6129f28,49a1c9fe,b07bc2b2,78fcdf4a,96a6ee3a,70b9b943,98a89f3d)\n,S(5701d52e,2cdb7b71,a9ed91e6,95396487,1b656bc7,271299b,62ce0a4a,78dc69ee,eb8e4539,be99cbf0,ad730fa5,fcf785b7,35e1f5ad,f5c16c72,85abfeee,4058ea1b)\n,S(8210f0c4,4b2f54b0,62de4761,b7c62d87,42424b13,ca0448ca,ba999eab,73b26409,1c79890,e4149248,b9dcd496,1da563f1,517275ec,79949969,8c6b864f,c03f8050)\n,S(64cb2793,4ee57641,9d52cd81,6144543b,e4319d16,fdde7a7e,2bd824c,113bc1b7,c3144c3a,518eaebb,51a55bba,d87aba0a,12d3add5,5a5e00c0,94a2e227,80f0f6b7)\n,S(37eb1010,acb889,932d8536,b86648e7,c124a8f5,1005c0fd,ec40bdd3,6369c82a,1da5703f,b387312d,d5a337c2,2d3f63b7,33dcc994,38109c2c,4807fc45,c02a2717)\n,S(84bbf980,b54d60e1,ccfacb7,e861aded,b4cd7bd1,a3f7baa0,9a1898fa,22144d2b,3820c4d2,7b545166,2515064c,dc9b4cf,813c2435,e84a4a67,ba47068a,e6e09045)\n,S(29e74c02,6b43add6,939ae05b,dc0a5e0e,b7d05bc0,536e23f8,8fed55e0,6f93f1f7,f0f6fd9c,798732c2,1dd1c550,3cfbd56a,71b335d3,aaa22359,75fb0c89,9571186c)\n,S(98f3530,1122a0d2,629e5adc,579acbf8,8c0aea34,c3450ea6,784c4ce5,ee9672f1,427b899e,74e0c5cc,c289304d,b9a874c5,1d401369,55dc5b03,e0713bb0,8c3ec3ac)\n,S(16af2e5c,4c37b50f,5f2b6e94,341e365c,90548d68,2bd9af37,1d849126,ad2c6c6b,1dd1bef1,6077f6df,32054335,c81ff474,33b7c1c7,d6243dbf,6a2564b0,fb9d8502)\n,S(56998d6,bd5b2da6,d452f951,5343a9bc,4ed64463,adc6b8df,6a3edd64,e75e1cbc,ccd52462,9dbda3a3,10f3beac,7b3d3bb2,f1bf3c50,bca242ba,224861c8,1f26760f)\n,S(f1732044,ec59c52,86273115,3c53aee0,c7f1c4df,e6e55cb0,e7e37d62,c1e11ce9,16a547b9,a61a6c10,4df1d1a9,de99f54,b42e0ad1,104a6a30,e6e616c4,dcadb2a2)\n,S(6e5fcc4d,2df77b2b,8d2f95dc,56ddb885,6030f9af,aa51d86e,20d4772a,854b8973,11939a24,26c1ad6f,90db151e,c5c9f036,3f0b6898,2464fe92,c33aeedc,77347660)\n,S(74a3ff02,98c3cbde,ba066554,d6def895,3954af05,f0f72365,680b7b8,4c5e9fc8,23b5f011,e50dd2b6,9c5ad6b,b4dad524,9c6a8abd,f134c232,f40de18c,3c65206)\n,S(12a40a59,169e806c,8e32deb6,7e64c615,77a3ca,5c56723d,ebc98ed3,11983bc1,9d97709a,9c644c8e,3fcda745,a70cf3be,c405d230,eedac78f,96792bce,a715c081)\n,S(f25dcc0c,5ae3f442,7fc17acc,bf888557,82673050,c3594abf,cea7eec4,7a4662af,52a20297,bb9213cd,d1b4f1f3,4f6168aa,ec2d326e,d9aef5eb,5b497c39,e0642e0b)\n,S(fe31ac7b,ee45ffd7,99941eb1,8d65cb2d,38618938,c6278e45,4b87e41b,3c7d0f90,a5f1be4b,e0373cea,c3137a8a,c5b5cab3,e1209c93,2d49b245,eb99a0c6,469c3e64)\n,S(c0ff7403,2855c2c9,ba06c2fc,6c9a8fc5,29b4ebb8,be082951,475196b0,ca4d6711,2c53707e,540e0c03,27a10980,25e356a,81fa6a48,b1e41d78,b7fe5515,b022173f)\n,S(5b23e392,b87bef43,a3c08956,e1930c10,cae049e,b6f041f9,1bf3de75,4a84f984,c905adbc,337b9e7d,78781dd5,deaa0590,18e20bc3,5114c842,72343879,7a37987e)\n,S(2100a6c5,b6b96ad6,37e13430,8d92e2cd,97902da4,7a016ccb,63a20cef,e72ac25c,a1fdc3cf,93560ea3,8418c470,679c5389,7bcc12aa,dc87ee6c,3429c68f,690f7e11)\n,S(d57874e,509198e9,ee6ac826,b101ab2d,fe952895,ab288184,55f2d85a,eb2c3387,1c7bd36b,cdb6debc,99228b,341abac2,94dfd768,c9e00e73,8aa58339,d226f940)\n,S(ff91057a,e46817be,b3874656,42afecb2,a290d31d,f18c6da3,d6313565,99657c4d,a2bb1559,96ca6cbe,2a375c3e,510df603,69d0cd8,f66d6571,9f9866f8,c6e73675)\n,S(7f20e461,ee306c4d,7db625b3,49906235,14aca551,21b7890f,244de5e5,84d18b7f,8cc69fd1,eeb89a9f,9e126be4,3983ed45,d88c22fc,89f47006,ecd57431,4eb5d1c5)\n,S(7ca32320,75421226,257670e4,5f277f4d,32cc7b4d,53588423,317203cc,b787696d,1e940799,8f25b7da,8f1212ba,c1dceaae,ca7b1952,26655535,6a98769c,b3da15fd)\n,S(bcb7060e,f2685623,9aac249b,f603ce7d,b5c253a2,c998e44c,4ed60db6,730d5450,e03df58e,6d279025,955a4f52,dfce586b,f427e376,ca72e09,36d80c31,5047f57)\n,S(30387990,3157ac6,fed71113,a004284e,82fdfc7a,3e08c0ff,1ff5dbc5,dbdfc04c,7132084a,1230ecfb,200ded60,9a1666a5,2f574014,d29475e1,6a061330,fbe19e7f)\n,S(c5b3aa24,1147d664,a0b80f33,5dfefed8,a8f7c1a8,c6258686,cb16e3c,c365a249,fb5143c6,5f8907b9,a44f10fd,27064fef,93ee588f,9e77a65b,1cf64e4f,956f5748)\n,S(11d8bdb2,b750146d,d78d8c55,6e6ac45f,4d34f1ae,35332673,cbb46bdd,3d76d9a9,1ea28ad5,c92761b8,7df96987,6e5b3243,9fe97661,87b5978a,d7515288,f30a5970)\n,S(d6db4c60,742914e,c9c7bfa0,7a716cc5,f5492aa8,5381f31d,f76d089d,a773814d,b0ca5fa3,bc5d1fa2,c62a657d,77215b49,82f72e89,b138552d,bdea8166,359b6a3d)\n,S(d28a6123,3b4e073,f1242c4f,5292bf70,9e1ae15e,a654bae3,4239133c,4a8a86e8,89519c8,8c44b38e,ad5c2ace,52d01de1,d74ee0de,5365567,cf1b21b2,2ae8b95)\n,S(ff32042b,6a943772,d6f5794a,43420218,2ed31ac2,447167ba,ec82d19b,86751337,16961368,e20f2550,383268c3,9fe62fe3,b5d356b1,da2e4231,8f9618e3,13655f0e)\n,S(f2c6177,30a9870f,5999ed69,d34efac3,589baa96,9f660cf9,ac839eee,a10e374c,fbb2480e,b6f191c0,15ee3c58,bd950aa6,7bee7569,1681250e,502e1d76,b6ec9069)\n,S(dca14b70,e5e33022,eb559d90,1cf3a533,4c40bd45,7a43df85,e87acd40,90342539,7d038e51,30f77ec7,efe84748,4145594f,87d613bb,85a95715,9d0cd377,91678d23)\n,S(9cbb407d,acc7c2df,2d86a258,d5ab2b43,31a18bea,9480f5e3,7727aef7,644416cf,7ab9fb64,c5f54f6a,4e5529b6,eb7834ae,80283bcd,c3f6b24a,8a014d02,b3b80b57)\n,S(4552c48f,2d96ef41,aaf27778,a7ab4945,e4f2a2fb,7e1564ee,c375e50e,3516f555,e63da54e,28b70a99,5f35a1ac,3a25e384,6efafcbe,4e8f73fe,d84e095f,126524ac)\n,S(b4cfb90b,168dc850,36559181,3d2d084a,9866512,9396f76,879280f2,38e4af3f,cfca0080,37006c35,7fd89c5a,1d444d19,5fd72d4,17fee670,e7b743dd,57f71b00)\n,S(8e264996,e4e8a858,a1e32c59,b0df640b,a096401c,e77be6ee,ccd228d9,67dada3f,c9f5a8bc,89322e56,838c6d8d,859b6012,6d0a40f2,8377aca6,b5b4dacd,44931d0e)\n,S(34ea02ae,49a4dce2,5ec2dc07,c71e3400,390b3054,83b8f30a,81021eef,5761ed99,b4b6f9ea,c41bf9d6,c4bba143,4639fd57,b8735d27,6098e374,d9324319,3def4c1b)\n,S(bd391dfd,8569db85,b567c36c,5e6c378c,c152ad9b,c23d1fd6,1af23e29,543a56c3,9bf167d2,77e6bca3,a8d3cce7,61a36abe,91fcad0d,8d6ce398,877d3748,f2f13bf)\n,S(67b295aa,440c8807,95369b98,c67d1d5c,1b9265af,58541994,7353c0bc,47ea8483,c94a0287,f2983c42,14f3baca,a8c5c791,d4d88fb7,30eb5b3d,4309f5cb,c5706f23)\n,S(755e0335,284ad31b,5afb5775,fa191486,32b29c84,f38cafce,1b0b3b4f,2d073a42,c4506c75,c8cc96d2,8e31766e,a8ed1cf,531f4f7c,73888831,65f825d2,2b74c47d)\n,S(e4b0cb3a,6149079b,5e47ccd,bfc4f351,64e575c9,20cd9827,a83f68e7,e5ba0a97,1604e71a,afa83b19,61bdd7ae,e4be5113,f9e9ddc2,29957255,cfe40341,9e45e5f4)\n,S(3baca490,3147531c,905a2c73,277e4f39,c27ff6e5,41f6f2b,3ed4f730,3af0c4a,cf36fade,87b988ee,a4ccec6b,6b70ec01,d057173f,3aa7c79a,6bf4d412,d4bcafbc)\n,S(229519e8,2a4dd2e7,ae77d713,21fbc8ff,f31191ee,6604823c,a6aefe03,19d06d95,a70e9af6,14ae7a1f,76224b8f,f5d1fc26,2e34707e,a6bfd26c,8cd7fba9,b5627e15)\n,S(59364b22,4a53ed1a,7dbe9753,1b3a2600,2f700045,b0576733,8ee87a9b,2559dd54,b08cc507,70f5f3d8,851908b7,ed79ebc9,7f4f7342,61de0752,e14237c2,14eb5f6)\n,S(d4b681cb,f3467c9c,649fd640,7991b4ac,3c66bf50,26ae93f9,e9b0238,9fb7c1f2,6df1a03f,4a5f00f4,8356bb9f,b23f1621,bb18a8e0,5afac4ce,4edbb01f,99a27000)\n,S(49784426,fb036d23,a289f4f5,b3b92535,76da111f,ffcefdb6,a4163e55,2c56bc,76de5ca2,16ce703c,6a62ea4c,a0f7ae07,3744a22d,6db67389,9b0e93ff,a69e2a9d)\n,S(5b213b9d,3f84b248,a98fe326,929b94a9,7bf78521,106a83fc,adba632c,8ed4892f,8eec203e,d015749f,f01402b1,722214d2,b58af86a,95384ae1,c39a7780,5623a204)\n,S(6bb55cfb,9e3f5468,966711b8,6343e4af,6e372d04,ee7f570c,6a12005d,628959ef,75359562,9d633c9f,c2432ad5,f4c9f00,c6f54005,cdffaf82,438e3e58,70d14154)\n,S(d760efaa,3a9e5c7a,967174a4,705baafe,d230dadb,4c957cf0,c025ab55,4b2eeb43,c019790a,b1b8498b,58daa784,ba02b7b5,672ba2b6,13d312cb,b4563f6f,e26675ce)\n,S(f8be7bdc,6a361b6b,2844c60b,af7fec1a,216d75f6,96418734,337f9ccb,ae9117c0,df66b665,21e3dccf,639a323,5d773c21,4364062f,c5260323,3007e2cc,457d783a)\n,S(6bbd2558,84348c88,c75a8155,6529be50,93b06a4,885c5d32,f1047357,a11434a2,842f9093,fd41b2a2,153727ae,ca2cbf00,a494ab7b,eef1a2cd,8696e972,1b1491d1)\n,S(e692623d,cda3bde3,d32c1c01,f480d21f,9ccf8f1c,416a7dd5,17f1aab,12d3f3c6,30dab6f8,71f4c6d4,c768e086,fd6287ad,3fd000bc,3b04aa70,35cf441d,44764b89)\n,S(86dbfe13,5db905ef,9ec7483c,6f51b75a,71726a1a,27e5131,8d6c0b2c,b0b933c2,371f23bd,45c46d3c,18056f23,10ab6afa,1259c88a,3a55f8ce,cecaea71,aea083a0)\n,S(7ee329d5,9c625a92,594e620,4cb48559,458514f8,da94c7ba,fd2a4835,a4f10239,80a58a2b,e17f32da,dc80038c,7ed57de4,c7c561c6,69bf6786,57ee72ae,dd2bef04)\n,S(e16a922b,8255d2c9,6ef776b,cda14285,b1cad5f7,62f75465,f8c82695,cf1065c2,44bc0e38,df9ce403,a927cb01,849e166e,6838468d,c7a8bd4e,6ec3fbbe,1f3465bd)\n,S(5311e064,23145aa3,10737d38,41adf49b,988c1ca8,e8a705ca,3ca67f98,f756fe87,21c3f6ef,73bcca3a,c376e20f,dec775af,e22e708e,7e500c24,23114b4c,84ea8678)\n,S(c09eda1d,dad1ca36,a9aaefdc,d16c5f50,a6ae499f,2cdefa2e,e5b61ab6,69f7fdf3,2220cbe5,bc279362,c5506404,e1df076,52624966,e3222b7a,62a1f7f9,faf00500)\n,S(8888e104,18fb5c16,fc3c2b7e,b9ea06c1,da2df71f,c647b989,e71662a1,731628b4,7444a776,fa8f5bbe,959c71e2,c919b761,a2f8fdcb,5e66e5b,65e561e0,928e2d73)\n,S(5c70258c,c1030231,d897c9a9,199df5b5,8b920f59,18141ece,d84bbcb8,b9b6c243,d627669a,e3dbb6d8,57d65a42,ec53bdf1,c688492,d189b1b8,67b75c3,f003ff90)\n,S(eb58739b,878ea9f6,74b16f8a,406e7135,1ef06377,d9be32e8,1f657648,60e35ae0,752ae84c,8db0c7f4,e956d2b4,5750a5ef,24ea454,8f275f0,52b59ead,e3405ab5)\n,S(996af698,ef26245e,35e4845a,dbf9c45d,6fec5564,c1fab0b4,8ac78f06,9840e0e7,a86b564c,ee788008,bbb04ee,e3d66c42,3c6910e7,7988aa54,420f3a4d,3137a1b5)\n,S(bd03f2ea,a505bdd,7f39915,23f3e3b7,7532335a,6b5a11a1,4e303542,c00b8f4b,345f765f,cad902c4,56211eb0,bbe520ad,aacf55d9,e9c67787,aa02f18d,ccd88ea)\n,S(8480c77f,3dd59c6,329c221b,ed8473e0,8cb0446d,c4e9bc6b,f2dba8d1,7ddf0f1,b055a135,a224f1e2,965cff1,a4f0d764,fed265bb,c644c696,2f3570d1,9af6e360)\n,S(f46b6845,fa45e8c4,576b7c74,cd1a308e,f1adeedc,1d539d21,1158318c,ebd4c584,e1ed2665,34a14e05,c1ecf136,8cf8d6bf,fd9f0258,a5f0a53c,8abb00a3,e953c425)\n,S(596db19c,38d91452,ad238f05,453bb773,9883df63,a0b545e2,47e5947c,d9f52a2e,bcb35b45,b172aeff,9e4fc5d1,714d6743,46bb4073,6f571291,e6575d34,f8b0d929)\n,S(4cfbd998,f9544921,e5f1658d,e3ee95c6,df85b3f9,309f7a85,f6e4d08b,7e535497,ccd54e2e,437e4aff,7fc2ef17,3bed5ce6,b7d6e34b,4b386f36,72140d72,ceba71e9)\n,S(c3f056d2,357ffe13,4403cee,6dd5ba3a,a7d2d0d,91d83f25,cb2cee44,34e57f94,1c31cee1,595b3682,fd85840e,312a61e4,40cbbf68,55418b30,bd6b24ab,c3bbf7b)\n,S(e272370b,82ffc486,53274eb8,898409c5,9338e024,202be5e7,e18b5ec5,7f824680,d2f4e6c,619f0d,71e38990,f4e52881,de27ee31,ff7ad9cb,11a7f735,80a546cb)\n,S(81537bc4,6a5fe897,827aeba4,6e66d576,6cd05a35,cd3fe1cd,9c06a2d7,194be59f,6706c254,125be3c5,92ad55f,6fa6289,4298f23f,2f4f397f,3bc84f50,79bcb8ae)\n,S(50e161e2,6bc89d2c,816030ad,45559a3b,49c8606c,b28b6307,6ac6a051,9226d2b2,98478bc6,3f8d6be9,2db02910,67e5e359,e865d046,a5dd853a,fccb7592,72985c67)\n,S(76ce7272,fcff02f9,bfc355eb,24286fab,88ba08ad,b15e099,22724b84,315be56,88f98fe7,62e37fdb,b72c1526,59528cdc,fc4c4203,c465e772,38dc8618,78a5a14d)\n,S(77935c1,3a7f5f47,13098101,6e10ec54,d5ca10eb,492d4025,365d5265,ef7e6ebb,3c15e7c9,cf230340,44444126,5e74456a,4f3b72dd,7aff0ac1,aa76c67b,ce77dd0a)\n,S(b37c3ecf,5813b5a5,2f52fc4,42049653,991d9241,e8677d2a,f9779fda,43c7a255,4361c742,c070b356,387fef42,1a9cdf79,58dd47a0,b7c9add5,57fa425d,626a1786)\n,S(90c64aa3,28d43534,271e2f37,3460d8af,d17f9585,516b909a,6a7bea2f,1b12d2c6,79394191,a37a451f,e439e538,5e876c2d,ac397f0e,dfe29114,d14b9363,b76823c4)\n,S(a314f637,2362ef7c,c4bec6a7,9396c318,568d9f05,9b6ca38a,c5f56090,c33e5e5e,b3a401e4,f7741130,95179507,2ce3b0e,53d2f51,f2dcaa9,d289e25a,8de01519)\n,S(15c25f4e,80a7de90,8c49fc7b,649afd24,4c5a4be4,dfc15b2f,70099f73,6ad003dd,4aa9fb98,39855fca,c9f8bb26,b6322c95,e5d7adae,5aca9bf6,de073949,eb364b86)\n,S(445e6d34,90f4ce76,22b6713f,584065a5,e0998d47,1b7603a,2527ed85,5d67d7a0,ecf994bd,7ba618b7,6eaca0,b852e0eb,be7b7f86,70d028e3,f52d1b2,846ce8ea)\n,S(def695be,1ded66c3,650e9918,e942e4c,bd420fab,3a4708c2,43ab4e3f,1bf2101b,63569e13,532bf299,a0cf8d0e,a4addffc,1e782a1e,98a2f7c0,e0b64f50,8dd0afc5)\n,S(eb364f1b,89938b48,2d32271,551f9529,5013185e,3ee2b534,bf01a288,9a534a88,9e6091fa,b439d0,d96f6a9d,cb468573,881234c1,6bbf4c50,32a6c950,99e6e6c1)\n,S(7efe80e6,5c0134b8,49b6c58c,7d4c54ac,873e43fd,1b47f9d2,1d33f9c8,ee26646b,5411262d,63357cc8,d8280243,41d1767f,c25a0972,4c8c7a7f,3ddf6701,d12478e7)\n,S(5f412876,3774e9de,6f2f25d8,a1d98de9,edf959a8,884643a4,fa18ac7a,26d6308,d3f6eff0,e336d4f5,abe35a12,4c47ed4e,5dbbe6d8,7d563fb1,8ea89242,aa454411)\n,S(c63e3b34,bafd384b,2b60328b,4aee3a28,c7b3ed30,8a7cde45,87aa6c75,6c49c2dd,724fbbfc,11d05623,a5cb449e,a2f9f65f,a3de167a,a811bfcb,6ab9c3d0,3b123ad7)\n,S(cc92795e,a0be5e79,757a86b5,147429eb,ca7a7c7,d51a8d3c,93650178,4f6ba5b5,92053ab3,db369d61,3af1093f,50829c73,4618c1d3,610ebc57,420d2824,935ae2ff)\n,S(ba73d310,b5170cd1,57bbe14,63bfe944,ce7cea80,1b1aedb2,da3db11d,f1c7ea5c,4114e55,15806ca6,323edc6b,f0b75a92,834c72ff,9579d1f2,27fdadd6,d773c577)\n,S(6047bc6,fd3a1c7b,9a36036a,94139542,7d9432c0,f652259e,1d52d709,e5088b22,bb119bf4,5d8ac9bb,1a918e6b,95cdf23e,6e2ccbf0,171579f7,ecfc9126,6d236b8a)\n,S(a0600a7c,484559cf,3da255c4,935d2d97,1628fe8a,e75b88bb,1f3c4eca,e68f78d5,a439ac58,42bc6ee8,be096973,d87598da,349929c6,92e37852,e57ac941,eedef402)\n,S(bfdef77e,1efac235,c1c49f04,290f89aa,c2e4632c,85f40481,dfdf5c59,d479e2a,e6e451cf,d76433ab,1de85511,9abaa5c7,8e4499a5,fa48ad77,f098c825,206dc7fc)\n,S(81ff778c,373975,fb041cf8,ce4bc337,e2c977f2,d6bb2c61,9122240b,8e21234,3fc02add,e92c9928,e94e0ad0,218d6204,d71ef295,4c32227d,96b30b5b,9a61f640)\n,S(84c4653c,d1af54f3,fc59dab4,5bbaa470,48f8eb13,4afc8f5b,60a8974a,cbf03933,98ff808b,a4682139,68b73ecb,67fe0a32,85dace7a,19d300dd,bd517e3d,b04ddba9)\n,S(9d7ed86a,69f39ecd,c448de07,55197029,f81ee886,7c9a61b9,62d13eb3,abce35ae,d9b27e39,41c6bd1d,87dab6e9,32e8ba57,1dcd2c58,67177ce8,e7ef0fdc,668fccd5)\n,S(540b7fe1,ee263e6b,3610bb96,1071d817,b9cdd162,77aaf28,87e7e5fd,df72f5b5,6638015d,591305c1,7a598a44,ba6871cb,8d1d3628,3ea25c5c,846bab2b,cd910340)\n,S(4799c5ec,f1fb2112,f479abab,217ed0dc,e936c6bd,14215eee,6bbbb34f,d811cbe0,abfdeb73,4ac738cf,f607cd93,de58c0a3,237201eb,da47a808,3bccaee6,da5c5515)\n,S(70a58362,b360c280,626a8698,7e4f2aa1,abdc9f8,f0b8c216,bb88b0cc,133c2312,5e37daac,d2835f3,1d924659,e51858ab,68e3a874,947360eb,c520767f,ce4d46d0)\n,S(f345a0ca,857102b6,e225dfc5,7ae1cbbb,dd5c2737,116adbd8,b3d1f74,7d132b01,16fcaf2d,f7cae2ec,ef25da7b,3d51afd2,8f5e9920,5c0d74f0,c1e7b360,17eb2fb8)\n,S(c3f4282b,29f253d4,fae8deb7,941484e3,9d2555d3,f96889b4,551e7d8a,eb2a209d,fc562248,8a6e83f1,6bb1530d,2a35629d,b25c8280,2eea7057,d22d109d,4263ac1d)\n,S(5542218f,606e7cf3,9cf646a1,3677b0ed,4ff61aac,1dcea3f5,da5dd4a7,d4727632,f1bce63e,a11d5176,f47e576f,66817f45,4b51840b,a79695e6,3a1a1cd6,fb6c07db)\n,S(65e81ed2,7d6b839e,5c3829f9,24beda63,98264de8,b2223479,43881582,4d124b35,2a17e09c,e4dd6e6a,32d85d71,e6cc2378,b53b9356,ee5790f6,8fc3040c,e6b6179f)\n,S(5066b022,e43a5f83,c4290064,9e2b611e,750a5ded,7c89b8f5,892126f1,e112edf3,381e92b3,e407c6c5,d1c0ab40,6fbe1a99,57643da9,a2118cb1,3b8c6243,9328d9e8)\n,S(8df78ac5,c5ff1cc6,df1e1dfb,58ef889b,17886433,61bea73b,a805c3ae,a83e2373,dc668ddf,5b39eebb,7b692997,f22140c1,8347e14b,edb6d343,96017e09,d37ca4d3)\n,S(426c1767,7d7b00ee,af8d7d30,1bb11cea,1cebfa58,fc54bf0f,de719937,fb484434,4fcfa5b9,ab7b71fd,560ecbfa,985db2f2,418465f7,cbf8acd8,fdd71af5,7f9519d8)\n,S(4f7f0061,bb90e396,63f6aadf,70dd3312,f781b2a2,3867df3c,566e18f9,b4a511e1,1308473f,d8956b35,97d904c6,cf73c05c,fd7c075d,c83848b8,571e666d,dc44b3df)\n,S(7393002d,d2e85925,3b23db69,6c140258,8272a847,d834982c,5b22b256,93685107,b61532fc,6706f7ad,78548e76,b334a836,c899a49c,46afa1f4,4579b5cd,27641528)\n,S(c41dff65,e88e5c6f,fca3b0ab,6ae69bde,c4215194,cd7c57ca,fd9b38be,feab4e05,9a9ba27b,a0b7e217,d31340cb,acd8506,7f052d8b,f92a4be1,cf59fbe9,6241f0c9)\n,S(f619dc9d,6dcc39d2,9155082c,2ed9bc60,99296a8a,982327f0,60fd6208,5765c518,87961d3e,2b850ffd,f080d5aa,cceb1912,120ddbc3,4e0ad8d7,96e74afc,aa4871fd)\n,S(6becdd5d,f02a7bbc,d1cc811c,fb83901c,46aa8207,35e81c29,a8d4d4ea,3f5cf99a,a45f7dd1,8949f842,2905c7ee,836004a6,5bb106d2,fb623d68,c2690c14,f181e39d)\n,S(cd2390,db1e7c53,f424a893,c2529660,69a8f151,6f60722a,524578e3,e5427196,b817ed1b,457633ab,a3439454,6ed410cd,8140b9d2,e7e679b6,3322eae5,f3466e90)\n,S(96cd9608,7f1cbcc9,b017ad2b,c7824285,4047dc3d,f98e7951,2fc09fbc,e3cd33ab,dfdb9090,c8a5ae70,13b8faa7,855554d7,3df381d7,88fd5569,d3a7ef7d,f729d625)\n,S(99cd7508,5e9abb74,5fe03e3d,b100f2c5,2a43acc9,4127bd8f,83314baf,70d72b4a,19c98b68,2ded269a,57e50e3a,28b9cd65,344000ed,dac3d3e9,d8ac8370,662ee1c5)\n,S(f53c2afa,647496ac,6c1220e1,4627c138,186286ef,b776449,55f9238,b39fdb20,1598c495,106a200,58fe1fd9,b29140e6,a93996d4,fe4cfdd6,74ec10f0,75badbd7)\n,S(c127dad5,3b9457b9,51192c79,5793734a,d0a84671,ff6ba236,f53cc40f,769585f8,688e6264,da4e9d1e,fe66f5ab,db078c56,98696ef3,53b3bd42,c344b3f1,3d3ad744)\n,S(882bc4c7,651634c,930384d1,3daf5a91,41508df3,2d34818a,e61bb65,40e92bd7,5c456414,430eece2,fc6e95b3,7700f608,9815f5cb,12a09ebe,8a87e370,85bcf255)\n,S(4cbc141f,55c0b001,cfd934e4,dbbc2c2e,4b5dc68,72e3388f,2388e54c,e2a91bdc,1749d8e5,30d21894,221b2aa5,96541f1d,e700bbc1,e3427140,24f0a9b,9c0766b0)\n,S(bff11777,6bb9bfd6,bbf872a1,3b9b6a62,32465cef,f16c3c75,441c39ea,2975528e,9e7412e4,ae492669,58dbdc9a,b7b1f4c5,d2edefc1,d4f0a483,27f2fd69,f992eb34)\n,S(251416e5,887b294f,c752a1e2,3e991f11,90b8798b,11c97033,e470bfb5,b7bb6328,e6981dcf,15fb4b98,ac8a37da,267f1bb6,a2a38b86,3919d20f,72b5bc34,cb5e329c)\n,S(bfe2490,569255d1,a62318c8,416e9114,66dec59a,bcca5df4,e64c2f48,46d050d4,f78bf673,577508c8,3846bd5a,312b9284,2283c47e,d4df7651,79d33bda,ba6eea54)\n,S(e50d0a78,40779b75,fa121def,456865d9,3d7bb9c5,d566d790,58b1b56c,3fdc7b15,2f2688ee,4abcfa52,9424d4cd,eb40a8a6,a6de26b1,be8946f1,e4ba429b,5b32a6c8)\n,S(b3a9d7ef,235df6ef,262e177d,19bd1121,167a056a,3957ffd2,a3d22d00,9a199bab,6a7adf,40ab5386,21fc3447,77c97416,66537460,44113c5b,a73455bd,9658753b)\n,S(ec7277c4,20af5d48,3a6247d3,a1da7243,31c0e35a,85d6057d,55a3e526,bb7962bf,2dcd3e8c,5abc47d4,56bfcf,a8086889,89354e10,8188fb0b,c9ab4578,7b91d69d)\n,S(91ed86a2,330ef91d,e085df2,a947c9de,f1284b8c,76d9b432,8dee9342,bd297242,fcc226b0,c46a36f3,ac56ec31,bf297360,8375f0f7,d248c669,f8b31ca9,9d056713)\n,S(e2a09eb6,6e76b287,36c5824f,829afff2,439d973,e5be5b4,f3c55cea,e83bbda4,6b217b22,123bf3db,f35845f,315264c0,4a67ba18,a49abd08,6b2acc76,ca0b016c)\n,S(78501449,bd76ff1f,58cdf2e9,203de4d8,3325ce45,1bf106d,2f474e91,bb0545c1,d0bbcc92,acbad044,218a830d,5f461332,cf488003,4b6f89fa,2f58b708,63aaa585)\n,S(c3626c48,95df6e93,2c79d5d7,eac22ef1,d7679f1b,1df1259d,2be08aaf,7217d978,a594df74,250bcb50,dd9f294d,e7322b25,f72cf935,700856e3,c31fc5f,35e61b67)\n,S(5c6e0358,ec09945a,c4240f22,3304f744,63269e16,c4f87dbb,99bbb744,bb4afaae,e6168dcb,d719ad05,8020dbc5,b03ec4c0,61b1fd87,d530913e,6df5d498,69e340d7)\n,S(4a3fb364,d55fca64,4cc03c40,5a5956b8,a794718a,5b43cdf0,795e5d5d,5f79e7c0,4c4e0c11,5f88ef66,545280de,af9e3d59,3ff7d1ec,d8f20779,70ed84a7,8d660d28)\n,S(fdc828e6,e305427d,c925de61,6f57e13f,5d0c8777,b538e511,49cdd304,1b022d05,de9e1037,db0dab0c,fedd8544,3b926a36,88e8bc54,7420b27,c65e2c6d,bbcb1662)\n,S(6d70ad6c,375119a0,f4b2b65f,51257d7b,e73a8d69,ab944dcb,232b8fd8,e7021583,31de3a22,c8e8034a,d812a7d,234cad97,978aba7a,1c2996b7,aee623f5,858770e2)\n,S(faa9dff,68f63fc5,7ca8c39d,8d950c2f,78a90317,c5d7f787,6ffa035,fcce8dc6,419b6c29,a7c02ea6,c8b7ed5b,c9b6fe89,1b3c705d,2ed2707f,3ef7995c,81a17de0)\n,S(53d9472b,eb9a020,e84e10f0,1d5ed8c2,6219d24a,eab4cd67,dd30f084,8fa47a12,624f4c9c,64c02832,9b6ad395,dd51f960,41eeffc3,b3238764,57d21f85,d8c674ce)\n,S(598daff5,aac2831e,21d5eff6,319e563e,3208ea18,e3ffe13f,2bf19444,73292f02,3db66869,2538e2f,e3689a41,dbb05504,bc86dabd,e033fc1,dbd7f84d,dd4e18c2)\n,S(eefd321d,41fe6468,a7766276,5932449a,d3956209,c4c6a548,c4392db9,b4e39a97,6a372971,d5515d4e,c691b3cf,e73ccf6a,a491df97,570c9f52,3f29b108,c626c319)\n,S(5a3a8225,49ecb78a,9c5aa12a,49e02c5e,10c168ac,e053f85f,30921724,96177ee4,482a65fb,f57726d9,d4ad61c6,75cdd5c3,25b6e59,899366a5,3ddbf239,96016448)\n,S(e21f7d4d,b2343eb0,1d23d1c,5ec76db9,89e1e624,2fabc41a,b204ca64,838eee55,fb64c87d,ba7c54d6,f1d68d7f,a49d50b1,bd79d699,a75227e8,4363ed30,430b2605)\n,S(fd688c92,f80983b8,496689ae,fcc0820a,a3d91fb2,aa4d599a,f48de5b0,98ed491e,7f946da9,9169612b,dd6ad8b5,d686052e,3ff25610,21432c92,f8728187,29e860e7)\n,S(65594f34,947f182,bcd1703c,dbb1ddbc,4bf59b2c,2fff23f4,1d363631,cd54af0f,e8d98a21,a603eabe,cc1a1b83,9ccd553e,fa5eb258,5dc94e10,d134f40a,63b5bb1b)\n,S(4f47f3b9,8bcf3917,464c07cd,be99d2ea,adf31166,8199324e,d120d087,e14789e7,279da4fb,d718e578,b10d316b,9994dd05,ffa05431,f85db2d6,6d4327d3,68aac28a)\n,S(32cd8b52,c027e4e1,7991ccf5,6460f3dc,1d2ea6be,6434067d,bd4880e8,a09196dc,1d3066d3,76961716,1882da20,e467e035,4ad84041,f391a042,9e94d8a0,5d89807)\n,S(c454b400,c7946f9b,b35003a7,c51e8037,dd03fcda,f0a19b14,f8daba3f,310d8bec,dffa7652,86aecb65,2744c9e0,21229687,1c305d91,6279b414,1ca1a,acc021b9)\n,S(151b7159,4fce7438,2ac83025,6d98abbb,6ca309b6,64ef0235,53495342,34f7b4f6,fc61aa0d,722156b5,dd7ffd24,38100589,1bf236be,a41aff71,c3f1964f,15978a28)\n,S(59716aa9,6b60ebde,848783d1,a686e9ab,e337b87d,104aa3f9,4cc7af46,ea8b8710,2e3062d4,a7d290eb,f53ee38,31dd8e80,354fd671,62a01a4c,73c57fb3,4582d345)\n,S(81838542,7622429e,832e7a50,b1a670e1,2a626c3b,97cc69f7,abaadd5a,44a92395,18a88d63,d42e3ba2,af4b6c36,9971b0b9,35363e5d,77417116,b58de2d,8b6afb42)\n,S(c95cf1fc,af7dd741,479a54ca,40a0e264,a989f0da,99b3a1b3,c4f67284,c8ae2a75,14b32e26,99662bee,51ad8534,fca1925a,a835cd00,9807c5e6,915b8283,63872f76)\n,S(9362c939,ea51a649,2ae2dc2b,c01e4bfe,ccdf4612,97932668,2435bf44,e9c6ea1f,944684c5,2cb534b1,4871f48,41e889ad,933299bb,474b392d,a1e85ffc,5763c2e0)\n,S(8852fd51,1e5f5e93,c6c3c7b8,4b0544af,cdb7d0b8,497d4bfc,90cb7322,28a77040,b0ea5bb9,c338a6de,7333b4cf,ac29f997,36c248,405facd2,6ce438f9,cb997a13)\n,S(59105318,491ab266,2fb94506,532ed81b,74c8f82e,a13581ae,ef6c0c77,80696ad9,3417191f,bdcc1dd1,43323ff8,6e6051ee,921dcf69,9eda369a,afec66ff,a06097ec)\n,S(c78bb701,8e96901d,3f13681e,ecc24df9,65b124b6,43f72904,ddf00ce8,bd28a127,ef07ce8,1b9c1cf1,26108dd5,f96ff86b,e0d49bdf,ad3d518b,1004b3c9,4c79bea0)\n,S(9eb55ba5,2b5d11ae,3d419ede,5a5480b6,c2aee921,6f9aeb4a,96e51934,e8e4c11d,50094963,25b94022,2642ca89,1fb4697a,5e643e50,19670934,99937432,f020eaf)\n,S(79ca2986,d40c7786,dc4d3e6f,71c33233,ad0b65fd,96822383,c11949f1,ab42f5e1,275db48a,fab1f0db,188e1298,4b391ce,6872e216,85c04c0f,3e62d42,d1e6d310)\n,S(a2cf65b8,fe2a7abc,b78bcdf3,f25db18f,432ada89,1ce7d99f,faccefe8,e9673463,418e9be4,f6a1dce9,200823f0,5a6a0e31,7924a0f9,44c18b2f,1602a2fd,1ef13a72)\n,S(7f6881f3,9f4684d1,3bf35c4b,c350b64b,28eb3c44,2adf05fb,c5e2c1e0,307fef19,20ac47a9,b954e805,db6fa20a,4e1a04f3,36c058f2,1946aff4,d4c24f63,6bd608eb)\n,S(abf40dcf,72704e6c,65502d17,aa384bca,5834a802,62ec0de2,fd46ca2d,d9316ef,f605192b,a8c56b66,f3bdb35d,9c1df4d9,94662b41,85e8e6c2,9fde9d27,45039564)\n,S(4fbb0d5d,ada948f6,2877c665,9cfe5f57,c6d5be5c,8cbb7bee,71cc575a,f4c92989,d2290911,45c718d5,243e1ef,92b8f7bc,2c77af95,f8666ce8,15900462,35d1c3dc)\n,S(6c62710d,d0ce5eb9,5196e202,7c3c1d12,5a25f329,878b1f38,fa883146,b8ccffa4,c70ee1dc,174a6a4b,908b54d,69c94ec,5829bc8d,f6513c82,b0fc02ce,f566dde7)\n,S(83ac175e,e220c800,a40adc87,df8450a3,963015a5,2c9e9497,602f930c,37af6c12,b7dd932,95601178,f6db7b5f,98046d7c,e42371ab,34e5f11,31f7cb31,59d37994)\n,S(c823727a,348e275b,f52c18b1,43653c3f,8f0a5c0a,e8f48432,a8016486,ec3674b5,760237f6,2222cf21,fe1813da,4cfe9437,edca8286,cf3be63b,5bb05560,fa71235f)\n,S(388b02ce,506784cf,2ec7e315,e765f126,23f764a,7d1ef836,fe360355,cb3f0517,ed0998cc,9069f336,c938b639,d6a74e8c,672a7d2a,2fe1dd1a,d7e18969,e7e57b20)\n,S(517d4da9,e25f9eaf,7ab6efcd,cc00e6eb,7bfb975d,e8287b2b,d7d15914,4b7a981a,2ea7196b,a14b60c0,78444a20,2b67fedf,8fd119a3,7a39738b,17694cd4,c0dd712d)\n,S(eac89275,54b0f71c,4ee80260,4945c5e5,578fdd50,ad68c478,2295670a,80432bee,dfe1ac53,dc9e18b7,1a930e73,cea36af2,8c8326eb,3615f858,fa1d3884,446f59a7)\n,S(f77a0877,e7ffd2e2,cba9f0b2,c419e886,73711125,7cee4480,f6529851,6013ce29,fb245db7,29acfa2c,145011f4,42c9d480,5fcb0be8,b7f27dd9,9d532f6,aee2d57c)\n,S(747d96af,94b3ae3,4cbcec25,fe8f4b74,e8d2077e,31ca2520,6d0d5613,3a49bd7e,b13d780b,8d322848,de5463af,3dc9c6fb,4cee70e0,da4731db,14916252,4b6d8d4f)\n,S(9bf6ae06,6db68c50,4ef9b1cd,6d123efe,1d8608c5,3a1a2276,f1f44493,f8b5bf72,5b0080f7,694a756,f306714,aa9d8b3e,617b7c5e,84d862be,470df13d,e79c8994)\n,S(91d0275d,e99c876b,d6de2cd,481fd72,13d9f6f0,e41c3444,4790dd80,cbc72e72,b12126c0,8b03b040,60183216,d1468246,d32d834c,57e687a8,9ce42ae4,d4eba7bf)\n,S(e3cd4480,6585252c,8eb09442,74222016,5ed4cb90,462310ac,ddc769b1,b9a111e2,d8821a94,f1bd3def,434557ed,4739d625,c74548d1,44bd370b,180fc4d9,ee04afa0)\n,S(3502269d,e8a68ef1,a0d74a0e,1423de94,99b84d3a,1fbef636,d9f38801,ed00d64a,9c4b6259,8c1bb627,449800ba,d9e93c7a,265114eb,99f9b5,7bca5b6a,72e3b302)\n,S(244e51da,a54a3c4d,69f7a53e,6ef82bf4,7907bb40,7713f5e8,84694641,1daa2ec3,61f00ad5,f30928ca,a20cd38e,5af6b3fa,afd4def2,f8433609,4f08e82e,d46a0320)\n,S(4f00186b,5d6f0420,88ac1221,a13e3aa4,60190cc2,2bd8fc26,4df81f44,1e508032,fcf58149,b8ab94c,67b30d73,4a3a5835,c7f89e44,6aa8d2d9,291c5f6c,b17b2e3c)\n,S(10a96b69,2f522f4d,58d1c9af,463ae371,73e6f72d,93aaf756,6267b3d2,f62a579c,fcc7a656,c9d72dcc,1540a638,51328135,85d3a0f4,ba5242f,f5aa35f1,88ee3070)\n,S(ee66c2c,2b19242f,4d7a22bd,df36fe3b,b5c151f7,1dd8a81,93fbae52,23064f9d,9d4f46db,7639d9a6,95d51d1e,44b08d6b,4791e443,744042e5,cc9e3933,cc27aefc)\n,S(872337c4,e34a3dbb,f4b274a0,a47c1398,f78ce842,fb11b994,b550e9e2,e21934c2,aa8a7840,d6dbf62e,d91577c8,8b8c6baa,69e01f94,5294e3fe,4ccbadc4,c1d64221)\n,S(e2eeb213,bfeb413a,9093be1a,7f75820e,5f48dc34,8515ef1c,7026c116,9be224a6,a49c846e,9132e039,9d66da39,57cebf1d,2e673831,3a89f682,c28d2230,1792d36b)\n,S(fe264a9d,63932bdd,5cd4629a,dda37c9a,8d2bbb1f,5809d333,80a561a9,66af74c5,543b7920,c6c27b7a,515b5adc,b8d144ae,64118447,dee21638,1d6cfd2,5627fc53)\n,S(13806a30,2d32152f,a1ee8060,67b07cc8,fce1e67f,16f21859,e7b60de1,37debf51,ffcb1150,7be5c2a8,90237923,5335b575,4cd83460,423ece53,18be988,c7e5e978)\n,S(db67e361,f9d91cff,1d8b99db,b7bd2584,f1b91cfd,77473802,f603ee9d,debf4dfe,6407a133,7604fbb9,35fbdfb,9fd6e2a4,ea6d8f28,a63e7524,172cebfb,d3331e2b)\n,S(606d4f47,d1d4cc58,3e30f214,e1ee57cd,98e68b6c,91c852ad,cad6c32c,989d8bd8,81911891,8a074dd6,ebfb95b1,c97b4fd8,5ef0887c,15ae5e88,ec6e97b9,cba46701)\n,S(51d60942,e93fbcf7,e230c116,77528c0d,3b63f7ee,64c1da65,692aa91c,af482ecc,b82db22e,3f104807,6338369f,d77dc11,d982296d,e630af66,36cedecc,108ae433)\n,S(2553006b,b8474473,29108ffd,cfd9c91d,22b7ad2b,6a0e7bb,72f98a0b,770da376,6173583e,e6b238be,ff3cd6cc,9bba1b48,d89dcf6f,481868dc,773eea98,59ffa871)\n,S(52e35836,fb0a1c1f,efb092fe,3c95bb32,26bf9aaf,50fd1ddf,29ef0ba4,b100d794,639078d1,cd1cd22d,135ca950,d754d3f2,bcd11a95,91abb6c7,c4a5177c,53adc86f)\n,S(332e02e5,5c089c84,82ee9863,a4dff4ea,b01a7a83,4747ff83,512fb567,7a8ee3d,b1edbfc7,9c1f9264,10c4cc3b,8919b4f4,e89bad8f,34135af5,f16b1c66,9a28b87c)\n,S(d9113a61,7d5a4a75,2080931a,84bad37b,ce2f907b,cc05adf4,16750e8b,8951435a,ab1f66e5,8d3a5887,2f664b56,6c2468df,f9d4d76c,a73111bf,57e10d1a,f7df7aab)\n,S(71999a85,799030fa,b0575523,fab4111c,f4b60351,e03f8703,1f5a852a,f22131d4,eb171070,d6124255,9adbd82,565c8dd3,fba6b8c0,df939501,4223b2e6,148668f4)\n,S(a9436d74,a39c7193,368ccbf0,d24098be,41309668,87ebb8d8,4213e0b3,436c23cd,7b93ba5d,e2ad9b42,ac45ac85,43f7ae59,7300e745,8fed1359,bc392015,540e7a19)\n,S(f6288f25,57359179,cd3659c6,1cceef6d,c5a69631,174f63ac,115633ef,83530b2a,d54f0f2d,51a365dc,7ba8b630,67ae663c,b4102e2c,59cfa616,b8878483,6ca85722)\n,S(bf685c41,863c9fee,dff2fdd4,ba47d726,1f0fcb6f,b0432a8a,3b7c4f6d,6f52700a,336b1d57,43ca6d28,52e20cd6,ab276441,61b2ed82,ea4e0051,d88ea92c,a66828c7)\n,S(672eaa18,1009f3da,3fe74eb7,4b479e24,4b73b54f,206f7342,eaa865ee,f945b00f,3f056594,a113cd63,810adf1d,b76efaad,babcd42d,347282c2,ce66ad54,37cb89d0)\n,S(299deede,3b6722e4,4c5e7600,214f85aa,4dd70ac9,df75cfe6,c020ec58,c8c859f7,92ecac9e,4a6326a7,8b01c0e3,6466723a,3d00593b,6597b6e,e16924cd,60105137)\n,S(e4268a68,7e6c26b9,2cec18b6,8581bf03,8b25544e,2040d505,7b9823b8,b01c07d5,35d1c370,95a9cc03,f91db5d4,250a904f,b9f9daed,9388b5cf,d6a3699e,b03c30c0)\n,S(7164e9,bfa6ade,a42bcc27,db38cf5b,fe908499,eda21bf2,27063fb6,369b1ae1,a2367f94,fe683e07,1cb7ffb4,287cce88,b11336ca,98e6769e,178262a6,b9103d9b)\n,S(84d8d32,a4be7402,1c94d3b6,c0913724,b2db26fd,862fee1b,c467a37f,b98b299a,46b92145,46603cb9,1cd5ff05,a237079a,e290b496,19d868f2,8143d660,94e61cf5)\n,S(60372ba5,d0eaaacb,c1445979,74a0553a,6e63c4d,15001b76,39f5d05b,84f626dc,8fab368b,c4d011aa,edf7d98c,2e6a0359,5737b1bd,bf701060,d30c9f0e,a8e8c847)\n,S(453c17f5,5364f812,a7da0f75,d7c074b1,81cc0901,a938447c,df55ba92,a7decfbc,53d465f2,6d3d86b,a76ad1e6,f147d208,474989a4,64ceb6ce,79972cc9,3e2e2c3a)\n,S(cf1f79b4,b765a894,2b967271,85d0c2c4,dfab4c4d,d679693a,4b35b343,c411cdc4,b89916ea,4ea34abc,63b9292f,591b5c8d,5ce802df,9d4f2be,275ef244,7e1ece)\n,S(74b07994,b7fe3a27,eff2f9aa,72f8746a,299f9eb7,81f09b15,f3ae595f,a0c4ac37,5464345,f4873a6e,9f4cb569,acc8e551,a9acff9e,5e0a92ca,e2c3f800,1888f905)\n,S(f9de1544,89b7a06e,40115de1,fcb7897a,f6bb2b91,5a1e8971,8d5d5ee8,68bab74f,789b5c55,2b352db3,4345ca30,328f542b,ad22e5cf,d98e5b8b,e85646e8,d47a0e6e)\n,S(c011f3d1,897cfe72,827d2cc7,c04a6aa7,496273ac,11f0df10,27ab4d69,aa745c5d,8e31fcd8,3842ffbb,a600e771,feb0cc2b,1fb257ab,7c19fe61,67802313,cdec95ad)\n,S(16567ed2,4ea1cb2a,15418d66,c70c0587,386201f3,4dde86b,82f687f,95229648,fc4aa805,45366f8c,3ee336f4,51397e3,7f78188e,b6dff3ce,d80c7e7b,6d9f7cf2)\n,S(8cd33d56,9acd3607,979b3c17,bf5c2175,ef6f3428,7a25c18e,89a1b38c,979d50e,f4312cbf,f301e942,61b7da0e,cadda424,336b1201,82ad73c3,c907be8d,840f8614)\n,S(646e22ba,39927176,4e1df1b3,16767718,79d7a16d,587b9e47,5232a331,42ea2a5b,55378afe,5f29feb3,2a3152ba,4d83305e,f77b1025,79154aeb,7bb8b8ef,c5958576)\n,S(2699d984,462e1fa6,208a833b,8af2e32f,58cf2d02,7707b4fe,2e3f888d,82e8e2fc,ed6c46a5,c5121755,5f236a62,21399a40,5fd87fca,f4cc6603,fffb440d,54b888c4)\n,S(be4b6631,3fd3e2fb,163530c7,2fa4a41b,e36d04b2,638315a9,1d07de72,c4ced54c,a7a71077,83a27b72,4e8aa644,a88ea181,c770cf6f,489829c6,6660c44d,45fd2ddd)\n,S(1f2ad69d,a1438b51,fe02a47,9cf865e2,18bdbe01,259b0818,1b6e7e6b,762a72a6,d4da99d5,7aa328df,3c587a45,2d756bae,fc09c626,fa5516bb,c8781b9e,b1ecd29b)\n,S(b1adb241,721a1622,35540622,f8e84291,e1c2702d,70cad33a,89aa3806,f7acda43,e6cd9324,12542fc4,25b8f16c,c0820f3f,26f33e11,1ba0ca5c,b5aeaa54,1fa3d9c6)\n,S(b604e2,f06df266,1163604f,2a1941ff,4d6991fb,84796c40,ccbe74e4,cf68e207,306936ee,e887427e,6005b265,38af5ca,53b3cab9,a3aebaaa,96556c46,7db96e88)\n,S(afb935fa,1e30617a,9b4f26b2,e7b150b3,f33566b4,7b5b4a7d,6223fe3,9c0dced3,83624f43,66dd82d6,8e4cd94c,464b6322,db0b1774,9fa1125b,a0944503,b0c63b0d)\n,S(5cc7252,a08ff892,93022eca,b56a5e9,cd2eb4c4,71161d15,5d7a5113,8b12d235,c272b6cc,42461529,b31943fd,fcb51a59,7a0eaec3,ae8c2754,827fe1ce,a182bcc4)\n,S(6c17c206,7c72a1ba,410f2446,e4ae2012,6eccaf88,aa4fea14,522a7607,143c1122,7172af08,2adea428,2f6a3cbc,7946db2f,c0170975,50ad8ee7,f4c514e5,dcd693eb)\n,S(fd82afcf,c55d226b,274cd62f,385e882f,716210f,9a14be15,baf7e17f,b98eac8,4aeac666,a1153851,6d66390e,6c7818d3,3de26fa9,3d234eb8,5e4d5b42,853eb3c1)\n,S(3d0121e6,c758dc91,8ce3bbca,1884788b,20717075,1e80742c,49b202d3,c2f8012,ca6b47b,306cef6c,662bf21f,77bae3c4,25009561,72dfc630,e2b1a6da,e733413d)\n,S(488306dd,3bf3bb5f,24160f1d,67b8c053,bceb8da3,cb1b05ae,7ae9fa72,e3f7b0c2,2356a8e6,77ae2f06,6135bd88,1fab5b4c,6aa57769,3e2d476a,1b2a4db7,fc6c27be)\n,S(d7e91488,6786009e,eaf12d14,a23ec6e7,fe41e406,aca5a5b7,47010ee8,8441d6b2,c98389a9,143a8fdb,df4a67d8,7c05cd4d,fff75fae,845e7e62,26c61aff,3dc4dde6)\n,S(873a2877,9c45280e,3d196725,5da756d0,ee5ac567,cbb7c52d,c8e654a7,ed78a1f1,9bb9672e,e76feae0,d52be301,983c182d,ec99b228,defb2166,5310a4ab,cae7eccd)\n,S(410a7c98,85f531ab,46d99b26,b6fc2576,97723e4,bd9b9c57,6544542e,2cad2ff3,8bc9e686,4f139032,cd443148,4f43abd4,3234e3eb,3825a0a7,db8176be,cb5207cb)\n,S(39269060,b38b4abb,107c2230,6f541353,d8627901,3399b368,8b650ad4,cbf99144,780c2949,aad303f,ef8fff3f,b9734551,b45639cd,9437935f,d93f7d95,bc9d1aa4)\n,S(bbc52d26,36e861e1,3e593d4a,c6ad573a,e4698ede,f101b3e4,f4aaca54,325b9f9,4a311f44,9f16bfb6,4c5c554,5ba373e9,fc41b7ec,beadb4a6,a929cf0d,79f37922)\n,S(bb74e659,5ed6d931,9716b8e6,120f0cb0,57dcce87,150cb26a,cbdf5b1c,f86ccbcd,9f2385a3,bb460cdb,8ec74db8,fc5e6014,f4310665,c5b69e1b,cf96203,1afe085)\n,S(67e64d65,badbd97a,bb204cb4,f9009f5a,973700d8,34f6b6a5,395fbaa2,c6eb0672,a122f76f,67490b28,9977d730,df544f7,d725dfd0,93135ba4,4bb348c9,e4dd3303)\n,S(dbd294ba,e0775f43,f58ee677,6240eaca,b9b29ceb,92fc3354,de4d4b20,95548050,1987ba2e,3ce8ef0,5b71acbf,4c69f706,e2cb4d6f,354f0fc6,53a7a9b9,5dd1c115)\n,S(45c946f3,93658d3e,589fdcbb,6895c97d,60352342,3a3676df,680b6bad,de6cee1,629c7238,db2cd3e5,29e5b30f,a8ba5629,dcbb1ccd,ada1eb22,294f98f0,4cae2d00)\n,S(33ad0e14,44be7775,3fe47875,2688e384,2be7ae06,7d38e473,6b7dbe0,c106e14f,d89eed78,6518775e,1ef441d5,fe51c4d4,b2a1e377,eb1a4cf7,804c2e1a,5175f1ef)\n,S(f9f78161,4cd463fb,6e358274,e47812b,4b0113d8,3f426aa7,85756c6f,b9e7853e,5eab09ab,51247c76,f87f592d,77e0870,238877dc,a47cf6b4,5fe72940,ff4469a2)\n,S(ed3015a6,7a1fec82,f0f7a59c,45cb69ae,8aa0d883,39a05f,f6959c9d,b7d761c5,b7c94a9c,28389f1d,17bdf197,307411fe,1c395483,da8a097a,fb3b5fcf,e392e16d)\n,S(301af330,de741ec5,61b71fc3,c5048a42,6b55d58f,800934f5,c59aa8f5,914092b0,3d3137d8,262d196d,872fe1f9,8acba295,fec02ee1,30aa4c19,8c888765,357b67e4)\n,S(21e197a7,85953a90,226c1ab0,441e35a0,fd8444b1,92c0e5ad,65588063,f40c1246,6811f94f,18a9569d,4df2ffa7,fd8d75ff,5f66ad1e,62da2a60,c0084381,4437a2c4)\n,S(325fcc8c,27804b7c,e73d6687,70db7f5d,3ed4b6ac,feb04003,c61d6262,8fd41385,2110e8d7,24e3a03f,46183536,b208b595,8586202c,2e69b954,d3ee1500,21ae7d8)\n,S(48597aad,ec69eb0d,90f60e6a,abf83129,1de759f5,eff24d81,8677248b,ea87d945,c3fd850a,cddc2597,499be90c,24e249b,328728ff,5443fbd5,6515a6f0,4111775d)\n,S(58648599,8ac44bd2,e937796,d8dfa60d,c56d94c4,d53cfb77,ee0e380a,53ab8f76,2f47f278,6a285454,475d3c9,ffe9ee44,a93e15cb,b17772ec,67a30943,d3191110)\n,S(bd2761c5,722288b1,409aa7a5,db7690d2,73dba76a,3847d94e,3e3d3a7f,2dd35597,42590713,6ab6745d,5e573412,663d4d93,29c4a284,4430899d,68e5ca64,197ad58c)\n,S(fac9260f,1d420371,7e468769,1af8c270,dada5d97,5ceda9f2,64deffe9,1990b52a,9ce17c1,ebe94ab4,e092d1d5,850194d1,7e6a87e6,7b283ba4,ba68640a,94193314)\n,S(82e65b52,e4585ec1,4bc03591,249cf4bc,e5391f69,7b813175,b3b4b403,a64d6877,627e196b,42d327be,48526318,2dafb37e,222578a0,ccbcc443,7941eca4,a82ac893)\n,S(b9473eb4,dd002597,464965e5,b6d95842,543cd14,e18c95d5,b45bb654,eedbd6da,1b6e80a5,377ba31f,b5b6fcac,633321e7,f6e5b2ad,4a54e143,e963effd,6805c3a9)\n,S(31113d99,4caaea40,40182db0,17a880ac,64b183af,1746b820,2f29fbd0,d1bcc524,3f476b72,eeeb7c27,f9d04cba,71ac54aa,a25ec4ab,15d77e17,8544a651,653e83ad)\n,S(d04adc5e,73e21fc1,8c3b047,4d34f8cd,1cdcebdc,5dabf14,e258af57,860157d2,b21150d6,ad94a07c,d11a81c7,b741a2f0,5cd6a5ae,aba194ce,b874bd19,bfb6c326)\n,S(4e59356b,f280f51a,c492751b,3b3c7c2e,3fd1fb58,679b4fb5,5abeeb65,bce6ac2b,33a1ed9a,1d9c34c8,42b95e4a,108c7985,21c1f06,91f3716a,68fa5c5f,89dc73f)\n,S(53d76685,9ddc778c,b4f719ad,55f74fa7,85d52300,65c06b1e,4aafc560,39ba3547,168b5451,29170fe2,c53abea9,68a25dcc,2719090b,e0814635,a1dc7267,9d83a01)\n,S(7e9107a0,d2830362,7e53e06d,6e82efa8,b1a037a,328df546,a6d04c30,3037a63f,222d8b81,2a99860e,87fa24e0,aaab4ddb,b903cbe6,39c46cb6,3f2144d7,f8856489)\n,S(6775b2d7,b23dc08a,beb65049,db8552f5,565a092f,fad86865,c17347e2,a744106b,a6f23c87,fb639e66,9830ed33,34c6dd42,6bab0e23,aadcff44,1d4c73d1,a61efda4)\n,S(559885b6,a54fd0dc,b275662e,f66566e2,87a17219,e9c02f68,8c1cc8f5,6f814673,2ec87df5,917d1d7b,f217621e,82c31844,d2bb138b,bc35f873,5b52309a,baf800c1)\n,S(6fb774c1,2971b620,b40a17ec,74dccc9a,8c711844,a44a3e4d,e8310d47,bda53428,68ab0f6,57b823e3,35df55d1,ed9632a8,f0825f67,8a05d5eb,9e115ea3,e43ff4e7)\n,S(623c155c,2787396e,815ecfdb,5f03bdb7,282aeda1,7c9298f5,306ec10e,21dd0b90,69382be3,a4bae926,47252910,ad1ec62f,f4bbcde5,6259cb52,10ff2158,6b111f66)\n,S(c42c41e0,63db66dc,9b32c21c,af94a158,14fd5b62,aaa975d,3ca06925,f6d6ecc2,e93159a3,ad6fbcb6,38f7b09d,40601189,cafbe5c5,90c70103,b56fbd47,d36ccfba)\n,S(1103e98e,7a1659ac,4242ad9d,6fb012d9,21696e58,413f71aa,e19fff6f,1c334fbf,9f2d4667,ce5a1285,524d91d9,265d7a5d,da9f5ea6,cd508cf5,90076d57,a975bc62)\n,S(9e113cd5,9e7177b9,19859144,598263cd,630f72f3,4da00ad9,84964043,9d82878a,6a09bef7,6e13f2f6,8e70ee90,5dd5af4,495f5965,859a1d83,ef149f67,2643c9f7)\n,S(c03c5ebc,d04bf8a2,bdec182b,32d8c726,1913652f,e4547892,3e0dba7a,1fe275ed,f567e3c7,4b9313c4,11ac9411,11f1b62f,74a16f79,e7d90817,b54d4d89,958cda21)\n,S(205c4c44,7b84661b,cc8ab2f0,221343f4,140c9efa,fb107c59,b5095b48,25f54b24,94a10344,ac5f48a3,600309ef,8ef94242,a8050865,3c018e57,a7734d9e,da18a55c)\n,S(e393821a,58c9e9c5,6e45cda0,334bebc4,359c4b3c,1a60bab3,f1dce2de,c1da81b6,5469cb0f,4edf5f47,80df616,3a6b7074,7b26291e,8830d113,79d84aa2,15814e6d)\n,S(38fc36b7,a866b165,a424f0ae,74ca34bb,b05922d5,1bdb447,5df797ad,4d042e2f,a9279b50,4b3edff3,aa8fe039,3415c21a,556609bd,8089383f,f5dbdd34,291c2b1b)\n,S(1c4a1aac,3c3247d9,99a75a00,305a4092,c5f34321,d3a33b66,b110331c,85be2b27,a10e4138,a835e3b1,16d7b6c9,46c752e8,dc92c39b,21677968,147a3cab,fa5a0f1)\n,S(41d70c82,207c3b7b,716a2d4f,784302e7,e1034555,a79965b7,d951ebac,b7d62c00,7311a36f,cf3de546,37013e84,b2162c35,3eba0387,3d296427,220e5942,af398bac)\n,S(bada1cce,dcf3dfc,9834c49d,200fb82a,b13cf2d3,d5da9ee5,c9c35448,352e660a,42e0d3db,511cbbe7,942ff10d,a7d49805,972d9373,a75545b7,206e490b,6c5dc651)\n,S(233c0c68,4b9fe726,baf2b7d7,a0503e,7aba8b1b,3c4f28d9,4d095107,2b429bc2,a7bc02a6,2b81154,c3bce0f1,6a0b4f77,d412d162,1c713372,11ac1c61,a8f6fa28)\n,S(a675f208,a0d48078,93525e1f,b6c5be3b,ef24ade,8d3ab14a,afac550a,fa6362cd,3f8edef0,3e0600fd,1fdf10e7,c5562ddb,af4266a1,52bfca59,e1235d7,c9e8223b)\n,S(4adffdf7,a8a92b65,6f747fe2,92e6bfd2,cd3deb68,ccfd7f01,5639d779,7d21e48c,4d4079af,a6e89720,3a50015,92e43c6e,97fa1e57,11f21bef,c9df4274,441f7d81)\n,S(c786e96d,fa658a6f,a9f1fbfb,a15d7021,835ebbb4,3e8ed3a2,c7ea573,c2944dba,81130470,7a10b1e8,74f5b856,b7223346,eef3c562,8959454b,d536494a,f075393f)\n,S(10df82c4,64b75895,2c54f335,6fc24ace,cda4578f,d34ae82a,8a1eb2e3,d0830349,dae5c271,86031dd9,2eff2db9,6af91689,2a131cb2,44534495,c3562cb8,dbc5e1b0)\n,S(55532c4c,c4483aac,26b049d7,df1da7e1,ef281c7d,bd99d21b,72626443,f2c748c4,58160e32,da446337,d0642596,c17500f7,b0e64081,1017bc1f,4452c4a6,8d2c2789)\n,S(fe994c5,d63149e0,d31f6cdb,fce5b941,239c4adf,8d5e6866,37990411,d88ead47,200532b8,4ee2fb18,b2c27cd5,9c3940f3,58c6a2c1,d96ad043,4d826c8c,2a457dce)\n,S(c7690e5b,3148cd96,592e654f,2eed33ec,a69d2684,545cbadc,6f6a7e8b,4d3cfbdd,98e0018c,36423854,6dede771,b78bc4b8,c52d956,d26eb22a,e447ab3a,144cd394)\n,S(8f1f0986,d273476f,b31d4ddc,de949584,97ec74c9,acc6b0eb,900e4cc,2c98cac3,31f420f4,b9209657,1656b663,a06804fb,78597071,6c138106,119ef214,43aa765b)\n,S(bee7ab1c,c23f6101,be01ed60,574ffca,70fbd4db,ae73e5c7,128da065,9f78c042,9187835b,66b2b634,a87d1baa,7666bda3,57dd5ed,26871976,8e0ea9a6,ed102dfc)\n,S(8093581b,3205e5c1,90e9d38b,5b5ac422,b48fb5a3,9176bf7a,e1d377,c764f74b,3a3e06f3,4c00cf7f,6216e67f,2d55236d,db54640f,192897e9,fd68820c,bf22ce39)\n,S(fc018da2,70dfe007,871e0be7,f5edfb7c,30fc30bd,bed5052c,78a7701b,50954702,9483d20d,af9fb123,723e0c17,7905e94f,462831c7,dceb0238,6f0942e5,188f3a90)\n,S(f4ca4cab,7f06af06,d0a8bd7,97d6eed1,7354420d,65d80e09,32f6eaf1,ca12a39c,76770553,69f93094,3f368b0f,2ef6e412,f3d5a45d,1c7edc3d,9550fdd4,ebb1950)\n,S(fb03fae2,87265749,787de276,84bfdab0,4993112d,f384113f,1dd41e6a,b438bdf3,ae8829f6,80f60534,50113930,2aba238b,1dc295bc,6598c060,af8393b5,1153b479)\n,S(b76268c2,6b873f54,9438a569,5e2d5e24,a92da29a,ca26f18e,143e3290,69638a45,bb4543e,23abdead,c3377320,dd8ffb6a,d38967ac,ea90afd3,23c69373,eeb2407a)\n,S(87db8064,9a5a31a6,487893d,f487c00b,143c09c8,fe878621,b592b25a,6c3d8646,872a4547,520d307b,a537d42a,ffbc8e9c,e04d1c80,e3d4f506,b001b0f4,79e92972)\n,S(fb9295d5,a7c2cda9,c08b0f39,1fcdea4d,b768b086,dd170d8a,966516fa,bd476acf,62496929,a85c828c,cda71d2a,ae70c429,7bc12f03,5a99ff75,7d66cedd,5fb5135c)\n,S(96f749ed,a1fc306,6d133829,774293e0,b179a598,327c3bde,a2e94200,770d12ba,c16915b8,af011de7,614fda0,ce1c4a3,ffeabc2e,2e891e4c,a2d9c277,247fc8c1)\n,S(1564d7b9,77b4eb29,e7b23ba7,a3cf453a,8eaadc50,87448fb0,fd9310ec,653ec66d,6d8935ef,a7d41cb7,5c5dad07,c3ca864d,89e49f0,f74d4474,af85bf05,c408009f)\n,S(93db7b68,9ed6ad1d,bb61223c,dcca7280,9cf4a49a,14d94f3c,7cae77c8,f1298340,9088165,7b4979f7,26b156c9,d34430db,4a0af993,eeb996c,d091ad5c,4f7bbaff)\n,S(2656af7e,d8a2e718,9849cd,793baf93,1c23374a,a3b5596,d8c88841,2b6a5ad9,dca0f4b2,7c7f1547,97346dfc,589374d6,1224048b,ead5442c,9f8950f1,63689045)\n,S(a7dc8558,c0adf996,b7f57c08,1b509e34,7819131d,42647498,ba819c12,6d26cbf7,9fc494c9,2bbf6116,14527eaa,1de4708a,f0c19847,3ee9164b,6b9de909,f6a4497d)\n,S(1f6d4701,effe09fa,17ecc014,a7a0033c,143fbfac,ba4861cd,d7ee2fe8,5bcb2cda,84c5b017,81ce481a,e610bd8d,96ffa58b,b7a158e9,d1cccd79,7e6436dd,b1308de6)\n,S(eefe37c5,d547b779,d905849e,dd1038b,f054233b,f2d1af47,1684e5c2,a1e69960,b5f00dee,8b1f7960,aa068db6,78b6b41a,f8c3e14b,27c1f43e,10f9b34c,fe8eefef)\n,S(8d4e8462,60602ee0,948ba5c9,f0506046,d0bf3fd5,e1b93073,bcc8a6b3,30af96d0,62d0e36b,bdffa309,f1257b23,6327506,5a5e7999,b314dbed,edc75800,b35534ba)\n,S(da22079d,352d3527,5a80b95f,80b7b8b1,3eb6d178,310b6889,a94cbf2b,9a9a898,e8b06b65,37aae428,cd25fae,d0c1af8b,827b296,886de122,c6690a19,fe94df72)\n,S(beb411ff,67cdbb5e,58da6353,172813fe,e386c7,95550395,1ddc23e5,d4e579a4,919f8f30,41f53020,4d3620bc,b0bc80e5,9d87ab73,355c046d,cf2986d3,c9995866)\n,S(b0a5732b,76b4a526,e8e742e3,528891c7,3a1febb5,c7657a90,4bc1f95b,96d462b6,a5e4f134,93f9e24,75ac7dab,479092cd,fb59a931,dd042add,3d875e22,76965a9e)\n,S(5a87a782,13130193,4ce6180b,714e99c7,30fc8bd4,fd4e8c59,f5b6aae2,f3622561,a929d120,68a64953,90c559f1,ed8ff0d9,bef92431,66117208,d0e8a08a,de9a3d0b)\n,S(777ba7aa,6c50e927,64ed93ac,daf56285,9909b031,7c3c5ab9,38ebba26,d62a1748,27a32172,d7ff61ea,b6a26d00,c252f99d,bcf614af,1434641d,cdbd5f4,10e6657e)\n,S(ad0f9f5c,8fa07d5d,3c18d4a5,7dc16bc6,3be0dac5,9166fb42,6bfca8f0,65b76720,d2c9c778,3caf2c93,f6c3980e,60ec0fcc,1f1d5ffc,8aff6af,a912b5b4,245fff6e)\n,S(8904706f,17aad850,7a71f0c0,94f981e0,5e5a42d9,7f5cc3ed,99b4f635,660e227b,371d5f58,a63ec71b,3cd8b601,ee622586,2822a2c3,99ac70f4,ce293846,23ad8198)\n,S(ce32a220,2e276dd,3f5b0a10,38a70f21,3c29ba7,58934c4e,27ee3bc3,c9dadf00,e43d28,80486b34,65e545d7,6618d80c,56874afd,29ea4ee1,e79dbe5b,b1ec1f42)\n,S(3d031c0,c717447e,19266420,cef08d59,ac2aed4,7e84c84f,8980e8ed,ee59c7c1,86eabd82,d6a5f57e,cdb52825,a8c726d5,4a9faba3,6272441b,22627c4,a321d970)\n,S(9dc08947,fa3983dd,44730aee,d8e94f2c,78eefc44,df126804,281f740,53330b43,58838246,3fc02261,c0e771b9,3d4a90cc,c2c19f7,2893ffb,22fe6d5c,6c5e7318)\n,S(f9fb51c7,29646acf,94ecadf7,30989d5e,669ca4fb,3b4dfe66,dad9838a,f239057e,d4a04a8f,f44b86c3,17ce4350,1a2325cd,46b5decf,5f4e14e7,17ef0c30,1241f8e7)\n,S(d4a1c33e,816419c1,884c2838,abc7148,c61f05d3,71fe3de8,9f06b580,cc5e1006,28d8f049,a1daec88,5d186da2,66e2b8a2,893d90c8,5e720d03,a53cf8bb,f8a10208)\n,S(1b1c6ab,74436126,203ffd8d,8e9c58b3,e18f2767,3a72bfb4,ae4c9e25,ce17c570,ad28aaa5,eaf7128,fc8788e5,b9c1c13b,a4cf16e9,f651da6b,6c43fd1c,cf2903dd)\n,S(3d791154,b2c062fb,e1f6ad1,dcc17bd6,b648aadf,cd573cb7,d29f9e47,e089e1c3,a578f2d,a568b0b,e95e1189,7bad8311,3098787d,62756c99,7dc3d795,8e0d3745)\n,S(6daac2f7,ee7b01f7,277b3a5a,44785b4b,c6b6adf9,b112dd6a,227b2b46,9f27940a,fe9504e5,75c1e349,9267624f,2b2e603,55befd7e,d66d7fe6,80c521b5,e0d1aaab)\n,S(ea6343d7,73a5966c,2ea66806,ed59079e,8b216a9f,4fcbe8f6,744808b3,2478c26f,15ab94e5,cc1f4a5a,33955f6,b30571e2,5104c615,c0aef2bb,6a8f6693,64639f6f)\n,S(ffc78cf2,4b436203,dcc1b892,c77fb336,463a8070,332783c6,1824acb3,f5cc55c,7bfe0b6d,666b28c2,3259c4f9,2c0dd94b,fcf53921,91d617df,da1c651a,1fcb81a3)\n,S(db38103d,5156c309,67189677,9317879a,f31dcfa6,b8d0f5d9,1f2bc691,6090e6b0,b5b3e45d,9bd41082,cd3115ff,824ff027,78f47a0b,d0ae71fb,32c48d72,cd540c84)\n,S(4c08de87,abf89885,2791b455,126e7e54,d660903,f407b842,7b4fcd70,53e0b000,a9f83c6f,dcea99fb,fcb301dd,c31146c8,25c02978,6e5019e8,7b1b6db0,731b9189)\n,S(53b6a23b,8f93200c,41bf45b2,bd0d20a5,e6fa5db9,a3686a7c,c669815b,993604c5,31bbf5d2,21023fc2,fef75f0a,f7bc33e,b4d38323,cbdaa511,c40ed497,ef42a850)\n,S(b39ebc0e,53b74f35,6f573a40,1df6f8d6,fe1e4fed,f7d976e9,949da398,a45b464e,9d58ae16,a633ea0e,86bad1de,39f0b203,c1ef0b24,b5f1d824,48fc606c,a97fdff1)\n,S(182e4920,f4a60741,a0b94fc3,e3ff0bef,39f1d459,cd6c18fb,16b072b8,de0bd416,6d048d0e,ffdf4e60,8097cde5,46955541,491721a3,d6e051ef,9279c5c0,22a32fb6)\n,S(7a39e7e0,a2da209d,8cbb9797,5f12acce,840dddfc,5acf7c5f,fe778a11,829e1003,c24aa083,20e6a786,1c161e14,f37b1c7a,65117e55,2c252445,20b47b67,66fb410)\n,S(62e6173f,2273d3ff,d9fb640b,87d5cb15,e5df841e,3462bc5f,6b94575d,a110914e,7c424010,4ba37e57,48404997,689a01cb,851343f1,ea8259fc,938483dd,d70ac5d4)\n,S(3960d4cd,96de0126,5c2cc88,68e94d66,40e9ac8a,f2abfcd5,2108848c,ad62467,fb24aaf2,85a54405,f75db03a,464bbc29,3bcaaa44,344c763f,dd44656,fa7faeed)\n,S(463437ab,42694ce9,98ac17cb,fd4d9034,ab7a1be0,35f911e2,864441a3,eff8e3e3,370056b1,24b894d6,3631087b,194dc5ca,fcd2475c,a95402b8,418f1954,d47599e8)\n,S(65774018,fd428788,e4234b36,42c8a354,770ddafa,c38040e9,49f194c0,ff7ad3a4,462ec7,cb17abb6,5200a88a,9874c7f9,40469a51,c48c1fdd,6c0938ad,67741467)\n,S(738feb40,e7f16fc3,19ed6649,2507406e,6501308e,5112dff4,db9d12d3,bc0f138a,4923678b,84470212,cc5472de,2163ac3c,51ed5419,dc1b1b1e,78dc0946,f730b940)\n,S(546841d9,7985d80b,a0eb3448,3dc5d17c,441b7eb5,d24b6216,ab98b14a,d320cf36,719434a4,952ee43a,b1006ce6,f7785734,c6a5c018,383eed75,e3660f7,94eb6829)\n,S(31143de9,1a4b96eb,be7efe31,56b6688,5d39ce66,fa8ce202,57626dc2,8557ece4,d8d8bd18,36e5c388,2273143e,721bef10,b0c3005a,5e2fd3a7,e471ae33,ebfae7be)\n,S(ad8076d9,29feddae,a52c009,f3967726,a0a94301,dfc12d59,da63c47b,df6566fe,39eedd66,13fb7141,796c0353,9f560ac,e23f844f,d0d3d422,5b36e41c,b6707602)\n,S(b01a4f7b,9362be2e,78f5cdbf,d9e35f21,4d296a3f,3e233d93,2cf33c71,95b3f613,245b535f,c58254a2,157caa87,38e855ac,fa9b071c,1b6182f3,5260da9d,18e385cb)\n,S(50f3458f,a781d513,a944ebd9,6f6b791a,1b0cedec,1421f9a0,16a7f350,2d5f429a,4972c646,c1ad5958,18766bab,5bf54ea9,e9c4fe3,19810f1e,27f46cc9,41594045)\n,S(d7b606ed,e8fc3a20,925e0a59,5c9462d9,4e04b5c2,b64d13cc,19a47d1,ccf10b0a,dc39a8dd,d5447a0,f07b5e7a,6ea35286,ec01679d,ffb6eaea,6222711a,d57cc63f)\n,S(7629836b,73691a1f,f3ae6c99,7e06f597,34fb9625,2d1ec88f,2af15cac,f89c199d,296e4034,8eacfd71,7f64beb5,76736398,62114296,5fc818a3,ea89ba52,1b1a410e)\n,S(88f6a162,7baea31,3a2a5d5d,aeda2f4b,4becca6b,812a60d,4b5b4e22,6c822a1,d3acfe53,d6189ab8,31106ca8,2388fc28,5b567e5a,5172050,5be56bf0,187534eb)\n,S(8e93c72f,cfeae58d,fecd373e,dd3f31ab,3e4fa28c,f53681dd,ebf37d40,c376283a,e9c82571,2d0cfc0d,e6f35e77,acf0597a,7e2437e2,80f13420,cbe93acc,52901d71)\n,S(b2264df0,eaead63,111d7b05,8767cc7f,36d386c7,edf21792,e8aef135,9958b2bd,242eccda,5e4324a5,40e8d098,cad23ecb,88955bb1,126314fc,5da973ee,b1d83313)\n,S(9f1c9e90,7a6813a8,da520f6,84553a4c,aab650a6,7eaf4f0e,f2ec212b,95a885ce,416dae6b,f47aeb47,453fd0f4,7da6375d,136b6ee2,450bfe75,504f3619,84a0f355)\n,S(dcc7585,132b95e6,a4a24450,d557a0fc,3ec93506,fd1f5f02,17bd0f7a,6943fa1a,c62ca95e,d976d1e7,2bcad48d,9bc3a316,a35e8496,952a7a07,760ecbc,8903b001)\n,S(e3c674b1,eeb380f3,f08b1d64,32f4dddd,77cb602,915ac478,4f3c769b,dc2a30fd,fa8b08f9,8bb4a1b7,568c9d3e,754292b,1a35cede,1b377c99,fcee16ff,a16bbe5e)\n,S(1152da70,2b7341ff,69e8d3e,6f5ce8d3,bdcd3a03,27df54bb,846ac8e9,18e747e4,7c139d20,1e2ea5db,984cc8d2,4b66c64,8adbd0c9,48c0b085,d59c73ce,b4d7a91c)\n,S(3449cac4,abbd3ae5,e09dbc5,c89258a3,df93ead9,1f62fad3,a5add3f9,87a2f83b,197ecb64,5dc998fe,eb9b0df8,6267c7c3,f7af9647,96fea60d,88d4de89,33171e2a)\n,S(ad5cc468,11c5a39d,ffa313f6,578acb00,cdda9ce,b3757479,9f2afd6,a8df7a19,4fdf6093,c8fa8a92,7702982e,7e638948,b982d84f,ae6658bc,fa839354,6d6e76f4)\n,S(acad447c,b57e8f5,f528a113,347e5c5a,2097766a,b4664c70,3f496635,759a7799,88e1b4ff,3bf3e967,d2c6c948,4bb727a1,d13231cd,acc45463,d421431a,b6fc46ad)\n,S(b74286a7,e2699aee,9802563a,4da514cc,d74fd001,48534822,9214395b,36158246,8df2b491,ea018b23,b1c7fb54,b7a05db,b79b0ebe,1117e2d9,ce73e70d,d097bf90)\n,S(86bc560b,19d583b3,62c1634a,139bbd16,db30e823,75913cd6,fb688e4,38ceca4d,2126168,75c3adc6,c2aa16ee,2e028052,9e6612b,fe4b1aee,e4961feb,f530423c)\n,S(dd79faa2,e97dd468,5f3ff8b8,d5e55598,73736de3,9493a3f4,4e679516,f51e495a,2cb89020,efaae785,5376d901,4d1bc374,21e0ee60,29ac70c4,65bdcdd1,e240e57d)\n,S(caf6318f,825ca3d8,6d45c681,60d897d1,76875e26,bcd36d00,82b4e1ea,e6d8c142,d7abc304,55a5fab2,68c6d17c,3763e586,5b9e266b,bc6211b9,48b5ff3d,19f5df72)\n,S(c49dbf15,70c3f0ce,1afd166f,884af550,1f26905d,2f726185,7c026405,efe9a2bd,54eaad70,8bdb7b2a,59f5d69b,5be6ed79,5fbc4137,945be17c,b4736649,6e8cd3c0)\n,S(a87447c2,83c88db2,15630cb7,6029132f,47dadd57,5ea6f9bc,10d1b36d,8317a91a,8489d3c3,6334d65,fdf6089b,df19c3e8,7eecd697,516e1756,5fc8b977,be82c363)\n,S(7467b357,7d21b028,dab4100b,ebfa734d,36345024,adc60b1,10b8f96b,c7860889,b2978a5d,dea9765f,7877d8ff,fba66c0d,f7c8e0f4,6854deab,21908da2,8572b1a2)\n,S(6af133d9,bf2d6b57,ef69e0e7,5eef6d,eeb82d31,af490320,bd26f4eb,38ffd42d,7f4a4d1e,ce23c530,a4d64c23,cf0bf8,a46c59aa,74dce4ac,2854c6bc,d11b056f)\n,S(faff2662,5a41c80f,c0889d4,83eaf50c,596aa571,6807b118,1e94ce5b,581b0a7d,32f3d057,4afc487b,43b129af,f83bc7dc,d495402b,90fdc30f,736e87a5,469e8aa7)\n,S(8c6983d2,8047ab24,ddb292cf,1c8836af,7e75d7ad,6ce23149,e022cb64,2439ba2f,70a10314,447eaa73,924fdf58,fc607dc1,c69a69aa,29b84dcb,156fec4e,568a5bb9)\n,S(bfdda2aa,b23a37b2,bc129bb4,280a2c45,926360c3,2719872c,ae1e81b3,1b3d3d02,e8319769,b7d21199,9e5de1ae,76021c9c,2bf75ed0,4c9a6c2a,c52da4f4,88cf78a5)\n,S(80e24bf,3559d05e,c0cf63af,21dd7adf,237c23e7,ed930c7b,4124ad4,46871de8,c8f37f91,4e78e037,602ae9bf,ea3511fd,2c95ad3,6665117d,64f9fbbd,ecd10063)\n,S(7f56d940,2d6fb0ed,dc6ce187,2ee8e55f,45db30f9,8defa84d,f7fb76ca,aef5e800,f43b9e6c,b60ce85f,44682fae,d8a48e5,3d9599d4,f19b4757,74f7d6fe,2fb2554f)\n,S(437e7a08,900216be,72f14ef7,33127d49,9130309a,73369d2e,58fd4187,a0d428bd,3f0a4c4c,63dc779d,69dea37f,786a5157,43b3560c,16d4e56,4a1d7802,f40dec83)\n,S(3bb8db7e,8cb3534e,d7f70f8d,eeb1cb81,3ab21dd0,552c311f,f98f38e3,63321626,9ffd98a4,b3c271e7,83ec8c72,98ba83b3,f4f0a5bb,61ce1edd,5c1095ee,eb16a569)\n,S(21de8ce4,6aaebc6b,4ac51620,e2c78904,f9300b6,2930fa79,699e2782,5dc2310f,12a21855,50ceab27,aeb2e7cf,14710b7c,b3dc837a,67a1e4d2,6950e2b8,1942b9c1)\n,S(6c24ddca,e4245972,5268369c,545bc910,ffddd8c3,49d83fec,eb27af78,cfc0c965,6263abc6,ed17a124,c8b2c5e5,c91b157a,13512939,b9d60e48,929fe6d8,4d032338)\n,S(ddc0dfb0,49f7b6b1,cd1d03c6,f8ed2470,ae320f04,bc6f13f5,a88ba89,7bd1f91b,57c5f0df,8fd22e02,da44cd05,74fbcc1,c8b4a903,a909f906,aef9208a,89eeddd0)\n,S(6fc5fdee,78c61421,a3ec2284,583a56d8,f18e66eb,58c54dde,e5209a1f,3e3761eb,baeac905,6101b825,8b08a807,72c977bf,60956b2e,d98d1b25,e71b2b7e,10e3d25e)\n,S(1b6735d6,ac2f1db0,1c3781d0,cf42e2cc,3ccbf030,2e3837f1,3f6655eb,ba0dfddc,621e8c0e,cedfd28e,608c3da5,135d63fb,93dc6919,2a6154db,bf63e315,2f7db68e)\n,S(1a875a0c,ecae6600,4bbdab3c,4fa5a57f,925079dd,671bd9aa,e8ac5c51,b21a5e83,2317a0c0,81c17bed,a15e1148,f44beb72,d4e65fa4,96408778,8216f85b,3924d9fa)\n,S(51635c0c,ce51684d,9631c8ad,f6c9c4a9,3f66dc04,a372c891,294c42ae,2be5a84a,5c6cf3f1,bbc9c21b,124e78cf,ba05b2f9,ffb9c902,3895d584,48622259,635d3517)\n,S(c548df8c,b685f457,71c564ed,a3e9a77e,a4734faf,7cef877c,b0bd70ff,d85afe0d,2675d6b8,24f99a19,8825f1ee,19510492,9eb633d0,367c01f7,c922bfb,c2cd6dc2)\n,S(121592ee,aa39a310,3c02502d,72e360f,f500853a,7d2e449b,16c5e443,f42e700c,b5cfa2c6,689d973d,e0578a39,bc687720,acc0305d,6ad3b678,1d36941b,7f0cb435)\n,S(c2a8b66d,cce99233,b3d83699,b20f0c60,21a83ee1,46a491e6,d7e69ebc,92a3e046,e0f3aff2,64228803,d8c1d729,88780d2,ae8c344d,f9571b86,70254b39,b4243705)\n,S(b2b703c2,56ab219e,528886a4,4d6b7772,5cfc1b5b,17865ecc,c46e2d2,2420514d,b6aff027,b4408177,8c6cfaa0,123590a7,4615394c,aa83891d,15013d35,ba28a9cf)\n,S(d249c36d,fbf43f5d,c6ddb196,d78d4cbe,898d64cb,3b239f89,1e8c4245,ab647afb,4e58c9e9,4199e0b7,8a0179c2,c82b6442,17eb3fe7,80c687e5,166f56ec,f812d092)\n,S(ac3519a1,92c13eb,b37cd560,1a141d80,817226ec,7c86a053,42655c1,997b476,3522765a,afc2fe6b,2af9b489,27809189,74c2bc57,58ce502,13777ce1,a569083a)\n,S(e9b69596,8983ee86,340b96ce,efd9a289,e86e6d49,3f057962,77b99067,af83c70f,983a83a,e1b08fee,392e51e1,c12a8e12,731d592a,517e240e,ea508f7d,b34059d5)\n,S(e11e982f,10e65120,ca357106,f273c5b2,9900454f,81456781,36f52871,65444dd6,e961b155,81ee9ec5,1e6a3616,b7182da1,bd2e5db4,d08dad5b,46bee558,44c21850)\n,S(f63f4434,bb0c17dd,3a17c75d,2d179e41,10a7810a,847bd4eb,37827997,94e57b14,480bff24,69c2e268,a51b2147,3d6cf7ca,23a3c61b,513267f7,c25b092,7dcc8549)\n,S(cd8ea46,d65bb2da,7234508e,fb48a828,27678525,d102fa85,6d26475,eadc1a69,ba231ab9,513f90be,9cc8260a,fc63b05a,5aaa0280,3502532c,916d99c7,20b7b2d0)\n,S(af9a2285,ec491b56,9cf53c8,6ec188e0,5bf18d1c,d7e898c3,c881a5de,481bbe13,a0cca7f3,714f8d00,92af7bc9,62abbe5,4d106dd0,a6089607,35a6d9b4,73d9ed58)\n,S(5d90a039,55f41998,62e5cef1,af05ddd9,114632eb,abf27d6b,9b92c6c8,cfed8640,a0025e54,482aa49,11d8a556,2205c2ae,2a0f75c4,6f3faa55,7463b9b9,cce1281d)\n,S(aa1f071c,55541753,3a47b490,c5603aed,2d2e5282,71acd0de,6ea7c5bc,ba66a348,195d8b00,fd90b1ad,15e46620,22d78bb2,47c1e9a7,8ab3b018,f341a005,6267a167)\n,S(4225728f,ee2495d6,73f64d5a,cee2e372,2713a3b4,dbd2f098,d20415c9,3ab513e6,76c17939,461504e6,e1420d53,c5b07449,ce7f976a,e4de178e,69552755,75e92412)\n,S(669c2815,b3357084,bf7bab89,63753b0b,ebbea33e,5b731ba7,5f969890,3a281eb6,23fcf486,e2839e2d,91fb08a9,11ed7361,81de7406,54c13306,575c576c,d0459c28)\n,S(7b29749b,393869b0,d7f0977b,340b9e07,76a20ceb,ff6d8f8e,f4650348,11773665,a0d68cd,b6033ab6,a4c92113,c8f07110,aa5cf600,2335d2d5,2ca9b956,2874832b)\n,S(6f096ed8,56f38c26,25200774,77ef7ade,19fb616e,30ed560a,ee5b4987,5f43a7db,54453b3d,1ffce3dc,b5e72ec9,3f15b57c,6725b271,d3fe8b7d,8f30ed00,35845b6d)\n,S(1354de01,ef040d5c,681318c5,a6dfe7af,5c8eba0e,ab581674,acd5335c,e33c4bec,4002513f,ed215b53,c65686ad,8366cd7e,38711fd9,98d27750,bfce7e24,dda317b)\n,S(5f8afb0b,3800c535,47cdf93d,61ae5c67,233c2525,17f99c38,8e97e7a9,1a90b561,7dad53b7,a64b7068,967fc0dc,e7178a43,a06e56f7,7aab1a57,7910d69c,23540671)\n,S(901d50d9,b88abad7,84e75135,85a81d9f,a1d167f2,c9f377b8,e2598cc7,b249f3d8,7242b591,3c80db3e,748c63ae,47ee6229,2c1bc29b,e9f9088d,fb882259,405c3dd0)\n,S(2f5e27e7,4c7e00df,c0bf6401,7d1a888d,1bb7a3e1,3ff66874,f7c306e3,806a48d3,87c3836c,7fb767f,4b5ac585,62c48a18,21dede2a,7d63fe40,da75d967,cf9191d0)\n,S(8b2277a1,70464589,1d8b54cc,43bd5fc3,54fa6f1b,e7a062e6,6349ac2c,40eef8ba,ac3a007d,6b3278de,1c043476,13b254b7,69c9e14a,c2f50f9d,5f025046,2e06081f)\n,S(4a6273a4,e9f28e9a,82c3532b,e7d3e564,66e87273,ad1fcfad,7ecace6c,54890de4,6d8b0fb2,1cb99844,610a325c,9592cc1d,e7c8b32,d70e19b7,ab7df472,8fd1aa51)\n,S(f07330e,2ab0150e,435fe3a6,8c703091,4e7fb52c,307d58d5,d5120bfb,891f84d5,25b6ebc5,4c1d9206,33891a8e,39aadebd,988bd98b,a29b04bf,6ce4c283,a4438b08)\n,S(3a30b22d,6f1fd617,9fff2c21,d6635828,8c21fc8a,94a274b8,993ecb91,eaab54eb,94035c56,6ea179ac,d58eb0f9,d12cb41d,67b94fbe,65805110,61cd9806,890946b)\n,S(8c4f39cb,87d7f65e,591fa10,fd46d08f,fc5de3e1,67d8c9e7,718bff95,b112a5a,726c4bb,c64373f1,9399db5,18b5f823,3faef361,3e363b84,ad76052e,bdc8f2e6)\n,S(38118e59,63a1929e,74f6d98b,c80e44e4,d9b32254,6a0f1eb0,690d08f4,f3bd4bfb,23167e00,c29513e8,e82d1140,bef5bf02,b806a652,fee592fb,1dad0811,604a4b50)\n,S(75d4246b,db065274,550e9784,f3c9437f,3aec0fde,3af54a0d,61430cdf,2626bf5c,8392f570,3896cc62,d66f8485,9f7f269,4ff40a81,9505447b,7d79bb98,77f8f621)\n,S(ab3bb0ae,c1f390fc,8d1bd3fb,4ecdad66,3db868c7,c4fbe0ba,6cf4f059,7068ed87,91382a2,2dcfe0c1,b51148ce,bad2140,24cf099c,e3e5e3ee,867db7ee,d070c7e4)\n,S(d1453e12,383386e1,1976cae0,8a448b63,1a977dd8,47c19d2f,d7a212ad,5090011c,7044d595,fa8f68c2,4a972658,590d7ab6,dfc06ace,b9d8c320,205b858e,ba0402c5)\n,S(894afc53,b0d1bb6a,c948d117,7e83c42,b4ff4084,e593fd75,d0660680,2ec0a4eb,5c5eb493,73e74fc7,39ca4fba,1940ebe4,6912d896,7cfc036c,7402e8ff,8d071d7c)\n,S(f1dbde60,43133dc6,8699e89a,3dcaddc1,fbcb5ea5,e815eb5,8e7a6b87,dea2e6e9,96a7b1a5,b36e5492,68168c91,775d6107,a3f87f9,fb5c8b3b,acb75dad,5dc544fa)\n,S(ad9126ba,6d35d780,dd2841cb,2ba817d3,f0267446,ee99abd0,ee2b4910,a4450b8,f77eaa1e,66c0f3f6,88268d92,9c9ee53d,6dbbc20b,b74e864f,d7831cc9,3d47280b)\n,S(70d5638f,d3fc43c7,6f321157,f9715994,3b797d8b,1d366f5a,a5a7f1e4,ff1ff7a6,ba6f2d41,7af1c5af,dac8c83d,dcc289e9,4d6f29b4,2631ab7b,19414bdf,4a9ece36)\n,S(e43bb23e,1f82bcd2,708730b9,3d3ed915,e3b4ad84,61904f68,bd91a065,80a4ebad,3b528db,117cfb49,99941b0b,63f51ef3,926a6230,dadbfcdc,28fd1d6,2bd44147)\n,S(9daf3516,a015bd59,b648fd9d,9143e76,46b2e3fa,df5e446a,c57f2e22,9c9dad2b,5ec57ad4,808a9f2,ed297f7d,a7794e2e,3f1bb14c,bef58047,e0bddfb1,8ff11149)\n,S(13970b21,3115c499,5eac245b,33633c53,1f2be101,a541f129,7403a727,67df16f8,3444e05a,7e49ecfd,633c96dc,99a0fc81,cc3c359c,440ffcd4,5df61c5d,1c027e97)\n,S(12aef793,66978a2d,3fab4377,7debd5c7,4315b002,829b49df,c80fbb4e,1eaa94c1,e3f5c1d6,ea42b741,8bb3446d,c23679f8,e7a96d02,a8f33d1d,3404126f,71f9e37b)\n,S(62a2ef7b,887de5a6,19c753f5,e0bc45c1,7c47b8b1,ffbb0ce4,8b93caf1,d1ab4b02,7d00482c,20c25e01,ad6ae35e,89c263a3,5d0fc816,952a96b0,9f2c2fa4,b8fc9bef)\n,S(e6b03f17,92df5b1e,ec324ea0,898c031b,d745221e,791d2406,2aa917fc,de6f8a87,b4ee4b18,41153d22,1ec0ffe0,ec05b1c3,408d71c,5d2ca29e,a01ef9c2,e669b205)\n,S(dbc02e03,e03e2f14,53ff6410,afded1f4,f0d51461,5ee00f75,d041ee33,c4f35783,6a3a332d,99ffedd3,d442b44b,aaa9d12,9d93e372,36dad034,9c47bd83,7c7674c4)\n,S(f11be23d,6884890f,78ccbcaa,c1759ceb,5e7f98dc,19073aba,b85d85be,5fd23ef0,9afda170,dc1270d2,e43989a,4ffac7d5,c848ee6a,51e03b58,c308a4fa,39e2cfe9)\n,S(16ec4f95,1db5c83a,c2c26209,f2577650,e9c48c44,224b221c,c09b0b19,1c1c5552,e3959034,d259e9f5,163a44da,f87ffd63,7a35b220,eea5ec6c,301cba9,eb09dc54)\n,S(3cf701ab,8991e981,e9cbfe30,7b3aced5,c2147c47,f76bc2a0,733ee544,3fef3f99,1e6a3069,d4d0bb8c,def98d49,cd303b51,c45617ed,833be051,ca2836bc,13b8e1ac)\n,S(96d093fd,1a8efbe,4f93c544,d0d7e397,cc83e114,4574f804,570fa3ec,58d5669c,2a29438,a05fe50d,b980db60,b343b06d,1796ddff,7e7fe39a,356cb608,69c05ccb)\n,S(a6457eee,21025732,5094d3eb,6f6ea05,21e83184,adeabfa7,b6cd1206,9a9dc9ee,83e436a8,b234778d,9c7be0db,88639177,1d7a48df,19c29c47,682fa2cc,30b5e7f2)\n,S(1b366505,1c858ac3,5890e7dd,b4aa7984,dbacbbe1,f4d2b62d,5337b530,da9bb0a5,39d3c2d,42c5d292,40b474e7,2e94a64b,4612f5a,68f5b6bc,586db5fc,a41025d6)\n,S(e09325f4,68328cc4,d69a71d4,8ffe0380,bc118cb3,b8f390d3,4c1e56fd,27f4589a,16cbf183,78946fb8,3ff9763,41c6cc3c,9b2f451d,7661bc3f,3811f7e6,ea89a01d)\n,S(6a8ea7a9,ddfa0f9a,8473c47e,f5667e44,3e64e03c,5c33a9a1,f0f1257b,40e1ce62,92806471,56238c84,9c0aadaa,2e9efdcd,e5a56a2a,78803f7b,66210333,88f525db)\n,S(480b30ca,dc57c623,9ede2763,f113b46e,599076ae,ec687c49,33343178,c620f2ea,b5aa1b8a,ffe1e5ed,de587df3,341dd34b,57180cd4,752a1bfd,d06e4c2c,273b4433)\n,S(134be6f0,b03ea43e,98e2364,46a45253,ea5822df,46227aec,b24b09d5,b25a34b2,d4841d54,b7fc1736,b293d314,bf6352f2,c7b08ece,4de652d4,2c1b985,d1fd78a2)\n,S(7c84e23f,c54de6a1,a4ff6c9a,c7c88ac6,732d019f,a53b1a9a,a6eb2ab8,a3101f31,4ca88bac,a8d52f44,3703fa27,4fddde3d,ae5924bd,26b062fc,6f7fd0d,43ddf5ad)\n,S(7c6a349,911f02ef,2aebdc3b,ce77f639,94c4dd2a,a842b567,141c023f,4f2d92d5,9b4f2f9,6215aad9,c7e0edf6,efcd8aa8,74dbbcd5,4a0c4cd0,fb7e01e8,ba6884af)\n,S(9e1dffc6,a919c9b8,4e3d818a,5ec60f7d,5a2baba7,7d2dd65e,137d2ba2,8a1aed3c,cf26f543,bb7ef705,e2d3c429,f0ea27,84e3daae,1a71c556,38d281fd,aa3b1738)\n,S(e24f6abe,c7519588,33ecc765,7446ae36,937e310b,d5754c5c,343eecf3,6e140079,c38a0399,774ff24d,90f8e599,183bf011,aa3c911b,9a66bbe6,920522a6,7510e62d)\n,S(517505bd,1fe28c21,2fa85f18,99823b01,bcc3bd1,748169ea,54f35ab7,870f0e1,da94c34a,5de41881,1184fe92,8b3f08fc,362aadf7,5e7abf87,5d5f4798,fa712f3f)\n,S(a02217de,4ec87155,b877b7c9,dd7425b9,79627f0d,ebe127ce,27d4f3ef,fb988a8b,cdbd866d,7b69e8eb,9321d07b,2a5c9d8f,6eec8be2,f19a6d24,4c987a1a,12752bd5)\n,S(2e595023,c8ba084c,1cbb2d05,96ec35b2,7c366bf,cde27666,35d7e820,8fcb0ae9,ac08f27e,b8fd5ac4,deb1f46b,23ac1c5c,aa02b918,9761e6ba,d7c1ebb0,f412d8cf)\n,S(ce384358,fba557d3,b76df62e,d2264cf1,e0bc7b43,bab30be9,fd6f65e1,a82b6c2f,a3cbf24a,e067ad85,ae0fc86a,6e8490b6,1e44980b,52f29a75,4a3f7e4b,a79ad119)\n,S(9715da8,79cb1c5c,4291e00,fd2822c1,7f067d63,664170fe,463e86c2,d25e46,c5179ad3,a4846fb8,d6f290b9,2f957e14,cee99f6e,12fc8066,ec4dfaaf,a82edb99)\n,S(19f61bb0,4cedc19e,5054eeff,8d0bc384,6cf62a35,1af3ab95,e03e45d0,786e1aef,aaacadc8,db84d7c3,f869931b,bd33d295,45fb37cb,7e474fa1,7a69a683,117c05b8)\n,S(2a69afa7,581777ad,38882f6c,659ff4da,33fcdc17,a5355583,d1f8ae37,7dcbd718,878eb429,d42dfbd6,435df1fa,c5e0ed4d,e7b2fe4b,6f7dd6f2,6a3150a2,213fa619)\n,S(c3da1980,cdf257db,f2a5eda9,94267691,a5e1e679,79d4908c,c06f7f50,71002381,2cdf4de1,90ef2995,a984d882,598c24cc,35cfc47e,5cbd2d53,53d880cf,a944bfb6)\n,S(19294eba,9d19c03b,497551cb,7cc8d8ad,3e3b2130,942ca8dd,c8bc5579,1c424d2d,5523ac45,e676daaf,2d8da00f,5e9240e3,d904a536,63e6b704,735889c8,84b680ba)\n,S(d8b3b307,41ee7ff8,2306615f,2d2ef361,6e3f7cd7,fed9d56e,69300fb8,5eab6bd3,7d57c12d,e65bf3c4,6dde736c,373ea374,d090b240,6e1d97fc,8049e21e,aa10a74c)\n,S(e2fa1bd1,164528f0,87c72a18,e9843e33,43b376d9,b5616b74,5e0c3d00,eca95fd1,72dcfc41,15b35406,8bd3057d,506d592,771eb3fd,60a2c2c3,dfc2645f,86b249e5)\n,S(ac587775,bee32b7e,90031ad8,9786df14,8e4d9662,55a06399,e43c0441,883fd6b4,b6d3eaa,6f6a50ef,ef84c578,b241591e,4a718eef,fb40ac34,99a57079,b74c45b5)\n,S(74976cb0,77d481f5,e6bf700,6db57a13,f362fabb,e6aaf25b,6e956452,9d093bbc,bb40be31,7cfde25c,75ea859,2b622e4,9d42a0a7,30602241,219bcc84,a5f4bfe1)\n,S(e71e6967,f32647fc,2c13a94d,4bc1410a,cf9728d,1f543522,681d750b,2620a668,33c4fc82,720210d9,afb9f1fd,51671f3f,fc1df5f4,e61a5ff8,c59f06c7,91f996de)\n,S(bc36cf57,161e9b17,828e4557,74204c59,805b35e3,abdf4ba4,daa9a5c3,fafad6d2,df34c492,3018e879,bf459cb4,528d2983,340444f5,a85efc29,71e260df,29cd8a20)\n,S(925251b3,9c8761c6,317c2066,717a2e8d,89e43acf,89527ddd,6078fa49,2d040f95,aa7a084,8b2633ac,ce551f1c,63312895,f4ece420,5e224665,2c486beb,b8131f10)\n,S(4ec27df3,d9e755ce,b93e1ca0,e0e43f44,595b529f,6460e3f4,e6cc3765,3a2bbb21,eee3fa06,257b4be9,387ac7b6,6cc1ff6a,aae43583,37d6ed71,27ff753f,1fb179ac)\n,S(6f733e9c,b86c3a17,5bce6c08,347577eb,69cceb17,3c19abef,c94b6646,92859812,2a895d6f,c4a7a4f5,610e8b8,9e7361bb,db728625,ee31e6de,927c74f5,b10ad0fe)\n,S(c631f4ec,f205b1b4,6bc0fce5,3680e6a7,27f9e64d,5ee3fe24,c37291a0,d3a69b53,f0de9e0,e4bea2a9,cc01a5d,2f9aad2,f5af7ab2,7c2ff98b,983dd2b6,38dced4c)\n,S(9326d449,4fcb3049,8badc221,6d3a90c0,131d31ea,cbca74f7,2cf7da2c,bb6aa2b8,c3f268ba,4c9a9ab5,3f9edb88,74f2786c,4e4c065e,ab58487e,cd8101b,7132511a)\n,S(538c52d4,8fa6c492,cf546349,675d6a2c,ba10b442,8827dfeb,69f0303b,1b7ac774,c1b1db4f,d6d50f3e,c7533ee8,cea0d47,883b57e6,dd4137c8,2132f846,3b81ebf9)\n,S(5e58a25d,8bdb4576,d178fdb7,23158d26,508f8486,ad553727,907901d5,6e99a680,97c1f814,8880cd85,51c9f1e4,9ae58eb3,d1a01285,bfa8248,44bc794b,7d83ec62)\n,S(1e9830ee,b75d6c6d,c70989d4,ccb85e62,34a1cf94,ef81b65a,49b25753,cb6c13c4,d0780a7f,9607e530,d80dc068,68b1cf8b,82d3047a,2977d204,65187ed3,13c94c6c)\n,S(c5b441c2,f7e97a03,dd690cbc,ac605772,1524dce7,fb5068f3,f73d78ce,50fe0183,9bdd2242,e35008dd,4f907600,64eb3b29,427ee9b2,bbeeb548,62878688,a916e410)\n,S(a5f56816,e9448d0a,aaa7593e,e3145678,3be74521,b129f13,f11a276e,d419492,8406662,65c275da,76ef289e,d36f8af6,6ead9be1,48cec081,7c21987e,9e8af9fc)\n,S(c5e85955,44004f79,2260d553,25628858,ce50c95b,9362d868,90fdfd20,8d1184c4,6a5f02f1,c0f381f2,7fd21eb,928f03a,c8524dc5,9bfc1bca,d025a290,7cf939d1)\n,S(d5dd810,9e691f5,8694c87b,59907ed5,ec18d37b,8554799c,1481ac78,825d2ac9,ffbaef54,fd35a5ab,a49f9946,a11e5ad9,2f29590c,20e28180,9f4be3e4,b156dbe0)\n,S(ee5d42a2,c705bae5,a11d9d09,af3217d,2ec16588,64a60a56,d8e4a1cd,4313c61a,f08f0e08,89c015f5,3a2a74c3,3dd625da,b329181d,1d0f4fa0,14ec01e9,5d113d88)\n,S(90409eee,78af819e,249f62ea,3b4d70a9,26557f8,731e50ed,532c0b30,4616d615,17aa7a7f,8af635c9,c4ea353c,56c89da9,70df599a,faec8916,ec9a6d82,cdf957f2)\n,S(5f19aa1b,a6d6e3d6,9445e8cd,71c95e3f,a3ddad6c,ff0dcb4b,9e09aee5,65ba9e46,f82b3170,c2953397,a6cd29fc,9c87bcd9,76cbc7a3,5f953948,5a57a940,63c2e570)\n,S(5081942d,1039bfcd,96a759c9,27583c45,8dd4c013,59fea307,40c65fad,d020606b,f6f204b0,97cecd15,b2619aef,c25328fb,226598b,fc9384bd,de99a4d6,567e9b8e)\n,S(43eea7b1,acbb1450,c9a49b0,262639f,702612b1,b184ac15,675d6496,a5df1a54,a31636f9,ceecfbd6,60f78f,f6cee471,d4366d7f,ff863db4,9a5a652c,71b94797)\n,S(f2860e98,a30a6c14,ac43dc9c,61bbae1f,b8ecb294,36c8f0a8,7dd43c01,486706a1,bc83bfae,9a4effeb,4beb025e,962108e5,4a5d7979,cb9ae2a0,7cc44295,b95a2e9c)\n,S(6b4a8c28,7d5c7af,63ad8d34,9751116b,60a613f5,7cac229d,7ef0d9c8,166d69c9,48333ada,f4810cf,94c78d43,88f8842d,fdc9fd7c,d391e456,a592d8b2,200bd6c6)\n,S(d1efc808,393d4498,50837323,9b791d0d,a814e888,2958da8a,87136d93,bf1b7d74,13247e74,3c323631,9e557476,4ad4dcf2,b91dbc97,2d38244a,fabe4c0c,d08a9924)\n,S(d3fd7a6a,fdc7332d,f2e6683b,a05ab787,e3c48262,ce837f9e,d8ebae1c,1f6f7ab2,3d25bfd3,3ddd4f74,8ff395a6,b4f36d19,cdb28ce6,b56aaa55,e783e9f6,3d74e70b)\n,S(816f76c4,c5ea8733,5f220c54,28b31cc6,89fd8267,e498a675,4d6a2620,a60d9aac,d3b61647,f6624bb3,9fbb672f,51b66613,8a441a3b,660bb223,1f255488,806e79c4)\n,S(1e344f97,98f11372,aef5c6c7,6b32a568,16198e18,8e611026,1dc78338,2522cc93,474e0218,9bb4f698,15e304d4,8166e3cd,717a1bc,a9cf4e4b,1f5c5d23,a36e392c)\n,S(4d3bcef1,d6cff8a0,e0582d11,22eb7f67,28aae077,e9ef7960,ec519ab,3c6d6087,29f1b01f,a70e6812,3dade19e,d5d2689,6c491389,27a2da1d,3c628965,bccf38e2)\n,S(6d5d596e,467ce203,297cdfe6,ce4807a6,1686a8c9,f0606283,5e0fa194,894d027b,ef58ab41,1d6a002c,12f469e2,e9f8ded4,4291b270,4b7490c5,4c70c94a,cb7b24ce)\n,S(86f6ebc9,c25f6866,f14af018,88486b22,6c89b1fb,64bd9ac6,e523e503,e2cc6819,b0725647,4d9f3b4,8d4055d,e15b72ca,ce599bfc,247ce9a8,4b0d5e72,16b30425)\n,S(520115e9,a47c3df7,23f81df,8422c03a,ea0084df,b122759a,8d6a5b75,540cb339,93b12878,44f22aec,9d5ed727,3d204d85,d3bddaad,73e3545e,5725b171,2b8417bb)\n,S(19c9ff30,e5e50038,7e9be1f8,efddca98,7a72de0,d5cad8ce,7569d4e7,2b381009,b43b0c98,402748ee,16b362c8,b68ae79f,8493a7ef,293b149e,3faf7247,83ee3661)\n,S(bdf0f8e0,928affd0,87566820,3c95b3b4,e6baf9f,f1da25c9,73814c27,551ee4cf,5f701bb6,8f8a6795,cb4ad675,e00b5ca5,761a0eff,32a1d3f0,9b29d5b6,3885163b)\n,S(5c609591,37a48dfb,f778dc26,80de17ce,390ec33c,ea5cace2,a969ee9d,1e413e1a,670078d8,59a2c138,93946d1,e052552d,fd92c380,5fdf2ed7,8aad7795,2ddf2f51)\n,S(98f22ef1,b9a62928,c5ddbdf,70e71c08,eb910ff1,fa6a6a1,56de82bf,bed8fae,f87be19a,9433d279,8088c882,5d122e31,bec9102f,c580fa2,24d40f32,2a2db1e8)\n,S(d1842bec,2bfc5fc0,d5208d7b,40e04b76,88f26add,9b5a6845,751147e4,b4524615,f0405ace,6dc9bc88,48d18586,b713ca3d,67b76ad9,4f2f794c,55fbe9d2,f72ffa56)\n,S(732cdad8,e0aaee77,473c0140,9702cb39,555ee048,357fa448,33ce8e3f,5f50bea5,24666502,448268a5,bc2c693a,85a1fea9,dc5f010b,a9b0cce7,6bf36124,bca1cb0c)\n,S(6c86ebd9,5200b1ff,dbb6ce6d,e9fff6b7,1b6100e3,1144239d,77e7201c,db2e8af5,39c687d5,abff0ec7,c7ccc4b2,a4a16ba9,7324430e,a1ef209d,5ea126d2,cef24539)\n,S(655d63c1,47441ab0,e65f9893,dd38f3ca,22d2d8a,a7b2c87d,a2e2293,b24ffe0f,d19ede94,b25ca138,94ab8fe9,842cae29,92cb58da,592c19eb,57c4184a,45121281)\n,S(8efc14d2,d5845886,ec264438,449ff49d,ddab7567,69999bd3,6191cb39,efa41b72,9f1052fc,416db1a1,d9797e66,a816b403,475ac091,ded4dfdc,e262d527,3c535293)\n,S(31a7f0b9,1686e695,d1fae6e3,8fcdbeb4,246fde30,f2ca80d5,2d9fde31,c728eef2,9661bf7d,46248da3,8ae1ff52,a8aba654,351a1f58,4f3bbfed,1875d439,3612190d)\n,S(9dd959a9,8c862275,93dcc957,e369b2fe,5cc1d411,d4162ad7,d8e22b64,633adb85,78ccfeef,d95ede71,32a7011d,bd39b9dd,f77e38bc,47f7432c,f90d6583,5a6e665e)\n,S(51beca99,fe3cedfd,1ba44caf,58c0fe4,8b926e72,50e5ca7f,8a187cb4,909b1892,12f38fea,aa9de148,7c14eff6,96cccf6b,c7cb23a8,6f2b7e0f,10fa971f,3545a0b2)\n,S(1a84e21,3ef9b9a5,9f9a4fe9,d21dc1cd,1ec7a102,fd91557c,1129921b,781e6b51,aefbd931,17a42a75,13db0e04,782aa0b6,9cd79d36,b074f026,bfb7682,983cb78c)\n,S(9eb14847,2d02a287,cd197450,78d81963,3943183d,c76c2090,9f68b94,12eeeaf0,6fe4b5a2,d18ac52f,9a129a91,1db00993,ca505380,2054b5c5,48f35380,c6d467d)\n,S(9ecb3cc8,da5475cf,1a66ef54,3286f07,f5be1196,2c1fd420,b394bae6,c4256441,b4160952,e3701895,6f25c5d2,98ce90c7,91797571,267902a0,bba53d2c,2fe2cde0)\n,S(541e567c,b2160fe2,75e9d479,1beb8ad0,4c07d6b5,12b43d49,888963f6,d6696ce,2444e184,66cc09d6,aec704c6,ea8ef670,4ed1488c,dd8107c0,c625b783,6534d6f4)\n,S(8c061b6b,b6b55fc3,7c6d805c,808fb3e1,6fab1cb3,a05853bc,4933eb39,ca7b3580,20430304,c3780c29,a977f8d3,54424539,67924c2e,9a1353da,40716ef5,a0a0d37d)\n,S(b9b674ab,361aacec,bbb69f7f,7c2b1361,44e55da6,1566ed97,cd58152e,4d391033,7841975a,4cf0b5b7,3bad8433,10866275,8a8eb93c,3b5db58a,15346083,f3d10386)\n,S(3453c3d2,27e1dfc5,3e22487d,cce25ab6,18a3d25a,48f6fd1f,8e9158ec,dd6bfa1c,aeef1768,b754d998,fcbc75db,7a750396,930d169d,bf933c1c,15dfe041,17ff63a6)\n,S(f36f7b9f,28463b22,d2c43e29,6b96846c,1b3401ec,53490c5c,35ec197d,da2c440c,9876476d,e2cfb7eb,b1cdef50,a39d20c,4ba5000f,9edef22e,ab7b96c6,f0cb5585)\n,S(77c64190,33ef6119,ac3edefe,ed519632,ef5dccf3,f46066bf,6d5204e0,66788b5d,980cc59e,a103486a,9c8cfccd,213cf704,3e6aacb6,abbf3293,c833de88,e5b2716a)\n,S(818911ee,6051c4d5,19fb7785,d52c6f27,a82e2d79,a4a55623,909f3d6d,b549e851,5d031307,a2d66fce,4b607967,f662bc0,af855112,11cc209d,8457ff41,968fa325)\n,S(bf5900a7,7c211a75,231ebe58,17f91748,c957f5ae,b98377b1,9554fe90,d11ff226,d910b2e3,1760f0de,838cc159,7da6915d,e6c3fb29,80bc0e65,e87a36f7,749cf1f1)\n,S(654b4257,11f03dbe,75b7d60d,b578d75,20e7cb6f,4923f774,8799b4a1,df06fa16,12c9e75e,26d3ab4d,645a7a64,d97eb6c9,356a3951,fb715bbe,9e42f500,a0c3f44c)\n,S(33a425f4,f178af6d,48b78873,cf70da66,aabbaae0,397e6673,7a9c6074,15ab3d2f,1e5aaddf,d76b1b91,14016f02,1812d7ea,18decd14,ca3e3925,89894151,92178cb0)\n,S(cb088930,f0ba3995,d7542d48,92ce47e5,5d8fdd5d,7adf60d9,3651240b,12fe7636,aad156ed,f0b25c30,e4bc3784,a1b7857a,4cabbe5d,2ceffb72,ca2cb7d2,45ddb024)\n,S(ffa9e81,afb11dee,83a54b47,fe9b41e4,de4191af,7279d19e,90e1c528,7c205c0a,405233e,b20a4848,80210b40,18c098ff,a0a17203,c5a13b12,5ec0fe92,1d1c3567)\n,S(92ce3be2,8fd6c9db,be1cd4d1,f58005b2,af0c136,89181c52,a67c2503,2649a6af,cdb840c7,7e0fc2c3,d4b959c6,6fc47142,622c8a16,b30168a6,c62ef368,8bd23932)\n,S(46079065,b64bd3d3,3e3efc91,374e1443,69adc4a,bcd2bcfd,91ebed0d,88f78cff,b09653a1,1c0710bd,b737611d,e5d80e67,a516dcc6,2ee3f63f,e2d6a7,f3794ae4)\n,S(5cf961ff,de982138,958471b4,b316cae3,6246ae74,e1309400,a3acd118,e4736c93,ab8e425c,ab39325b,b94925d7,795d8799,18efc449,e44c9f03,cf7bf487,fc32b185)\n,S(d8fa1009,27c1aad9,6ba97005,f8a24013,bc29082b,ada0e0ae,f6f72ec9,8abc4240,38d88e5e,183b2c09,d53adeb5,8d0525f0,83a512c4,1dd64cfb,a7024602,f39e484c)\n,S(cdabe8c6,7d0d4627,54cdd3d5,3e70bcba,e2ec925c,a46a4536,ce3be9ae,e0b37d8a,c2032dac,527cd15a,a1d812ce,1c658cc2,a0a379a5,2a30613c,2737812a,6e683830)\n,S(394fbdd6,7069d83,8fdf87f7,b1c179d9,1a491ca3,680f0103,46de3299,37e92374,5ceac741,828ac862,7fcd587c,69844243,d17ba038,901cdb42,36e96685,d589a693)\n,S(84eb6d44,103f56df,96617c7,11c79dc7,a6161189,157a0782,74fec78,fc5f6c37,57a16660,4d1fa3d9,cb358e7a,47984a00,6926df57,4e06a313,7b3c7524,2e882320)\n,S(295dca03,657995e5,d432a606,da12bec9,fec8f4f0,582d75dc,5657c973,7cf1051d,c4df0ad7,b1e3a29d,cca4120f,478a2d63,f18fc67f,bd201be4,e2fe05fa,66ba2d6c)\n,S(b42d81ca,1bdfb038,d7888194,deda7307,eb846bf1,738d8b7d,89663bf2,8097fa7e,2d913cc9,93ed5118,1082c85a,42495133,ace8bc6c,65530309,c6e15794,aceff5cb)\n,S(48484186,4f6d8f3e,94977a3,45bc0db3,1330910d,4c555032,da8da876,912df644,7a78a8c7,68c9d9ef,b5242fcd,b7a5946c,5fbedaa3,2914339f,8b0c0ac0,eb8a3146)\n,S(7376d600,9a7a76b9,dfb7e225,c0da3186,b683fb13,daed9fdd,25ac6606,7e7d2316,fc733036,dabd7c4a,719b699c,da115547,8a52d69f,387b8a94,28744144,c0502901)\n,S(9be9c65f,5fd6cbcf,522eb9ca,91427f68,152caa2,a152051e,3919307c,9f67ab8f,14da6642,fa3b7c37,41c9f953,d1e01c09,267b7885,8414fe5f,24f47c4,b44c413e)\n,S(7d0ae5e4,18d6c6df,45f6d26a,7e962335,4ea1a338,8f183eac,85b1eac9,1962e2f5,551eedf8,264763b0,913307a5,14fd9e09,479f43a8,87983e69,509a3688,d09308be)\n,S(d91d965,d3b85441,acec7257,d444cba0,6243b34,14e9665,9cc62cbd,89aea7db,54e26ec,9c82bf54,f06cce16,2cfb924,2a354c83,fe530937,9bbe733,6010f44f)\n,S(44c8fe95,aa48f8bb,6c0a32da,a6263918,fc2df7b8,6a68f277,6bf405cd,1bf0566,87fc1fa8,3fea76e5,52f53612,45e54053,9d70377,cd865915,b6b78acb,f73a6e03)\n,S(c7f8e825,5f2ddcfd,f21c5c20,ea84a527,2c5f6c59,99843c96,3bce9e0a,aa7ef398,5c1cf086,9c1f790,b1e59ddd,ec9729dc,2b73c6a1,be333dd7,e423a0be,bee50243)\n,S(3a8ebd85,a2bd4b1e,6c0373d0,63e9cc4e,a91e6e1a,f4bd7af7,501e0160,8fb7f4d9,4d9351b7,3c3f6f36,1b86ae94,ccecd211,ee3b13a9,522d799f,e78c87df,4473f23c)\n,S(bb01a4cf,ad90f3e0,5355f0b6,d1b28420,786c09dd,9db0ed5b,38a56506,4da77e9e,1742b511,43bc276f,273afb9,8473ee3d,3d962050,7462cdf4,a8c641ef,cc2eccde)\n,S(eee45594,1a04bdec,a02e7e85,1d86987e,798c27df,adcfd5d8,2979960a,3983f4b9,3cc75025,9b5d215,37570928,1abca8a9,29f5609d,56c8dca4,3d1b23d3,cba3fedc)\n,S(d2290ec5,120d591d,2e4e2796,3d10c0eb,e73d8b9b,600587ca,84173ce6,796123ba,c4760011,4c68baf7,b4053666,d8bd494b,b4ef1786,c1d7a522,8a656f10,1c837304)\n,S(21e359ca,9b7326bc,b3380282,b9017df0,3cdfb7f0,af95f326,701bd8bc,25dc047a,68b866e8,555206e9,7cc43461,34c3a61d,ce2a50ab,2b514935,a05f8e04,ad95c70)\n,S(b4acba20,94b35033,5095b208,9126367f,3203efc3,35caa43a,51857181,f4987e42,fa0f72af,77db4913,af6d906e,54eb33f0,a3e9d20e,d366c878,3b7c513c,c5165c16)\n,S(5ac6b2da,18754c30,9ae46ac8,3592d673,ac5d61e0,35ef1b4,512aa9b6,7551862a,e93b1d74,105974cd,b6bd3043,c0dedb8c,b4eaa81,c949999e,68d52fa,4a3941a8)\n,S(4a53cad7,2a894cab,9b761157,38ae78b0,c36c293,c60ba8d4,b87300aa,792c51d,4b0dcfda,b890ffdd,cf8a6a71,15f2a351,d883ad8,fe3d15a9,118f3e04,43f840c8)\n,S(5edec48f,7d8c9b4c,af3371c2,6e054392,755fa073,1e660971,4e089b04,2a07bc36,b18b8d1e,407f934f,e526fa5d,38b3a408,76bab92a,2bc192b5,b7c206ed,6ad040e0)\n,S(986b120,618abe6a,d965f9d9,6f50fd7b,29f1b897,8276ff8c,562519ab,8aa92890,2c981569,23ff1809,1cb47459,bafc0d51,699740b,ca59dd7a,14e07b9,432f681)\n,S(8c61517b,397d36a6,b30f0894,98d525ff,bbda959a,126e9be6,f67b9831,e5e7372d,f7608f24,130ce8cf,56a7b762,c1563519,a4be88d1,79e90f1d,b432ac05,d472d771)\n,S(d6abe67b,e30fa40,b642483e,a6ae7ecb,4217a07f,35546f97,469aae99,a286b8f6,b5e5675c,91aa08d2,a5a77349,5f1ad2bf,8b6b9dbf,4b35dc6c,262ff1c9,8eaa70ed)\n,S(26be12b4,ae013009,45c8ec05,58edb030,e19a75ad,872104f6,8642bf5b,c30f7934,1086891b,3ce97d8a,a568fe54,28164f25,4fc15953,c97d40c8,f32c0ec6,6ed49fcd)\n,S(3f0281e9,1dfdf1de,69d5112b,1b86ea89,d737d09f,1cbbb71d,2400d0e7,719987fb,27451e9a,2cb336a2,998d55ca,ac12e16c,fffbbd5a,3703897d,5f566ab4,5f4aba92)\n,S(b84b8115,7b1782f1,e4b641c2,a001daac,ac7d53f5,b3f1fa5a,d0a5ddc2,732af3b0,a0c8f7f4,8fa49815,7a6c590d,4ea18dc2,c586b332,2a303061,c19edf44,ebba25ae)\n,S(790ab328,fd86da4c,66f0989,296229fb,609de28e,cc8cc6d3,d315eb89,fdf31e38,cdcf83d3,44d103c6,736bb5c6,375bc2e4,3fcc46f5,777d6e5d,cc407700,15d29aa0)\n,S(d5fee68a,f9b7f182,20ea6525,6a591f24,da79a642,4ea0fe31,88a0b658,9006fb51,87b8608b,1b3d0d71,c9ab2c9b,84654408,af6551c7,1e8ec6d4,a8f26cb3,20577532)\n,S(410f9801,4622b22d,62eef39a,3c5350c9,e80ecef8,48c4295e,2ae279ca,9623e777,53dbc737,5766d9f8,ac0b8b7c,e4b852b0,3214fe70,24386915,84856c83,6376821)\n,S(6cbfa6f,fc7a6009,75edf0b,c260bd2d,258bec55,382e650d,c464b16b,e5f34eeb,de72cf4e,33028bb9,18ed3a41,d885faf7,e1d5901a,ad7a325f,801f1a36,2ed730c5)\n,S(2a75c02b,3325ec0b,ffa42250,e224a4de,e0c4c12b,69b71039,4bc3040d,80e5c504,ed666a2d,8ac26964,f0445d21,f1719ada,fbaea128,9edd69bc,94ae6123,a2e6b8bd)\n,S(ea2bbd57,6c0b20a5,6790ad87,29f25475,24ef97e3,86663aba,2473994e,fab39134,d98d55fc,daedbd5c,3aab619e,1288634d,f526f873,19743f81,149ba85d,535172cc)\n,S(893e9899,fe1b8a92,439c1594,634ff44d,1d0a60cd,8a0183a,b810bb8e,f80d0400,c680717b,aa2ff029,7baa807,d7290190,37c73d0f,a5a1878c,9fa2a6dd,d17cbb2)\n,S(d75b0a2d,1e9a20c5,398fc3b7,cacc79ba,fd53a14e,ebe23196,e4bdf4a8,f8546422,37a8efdd,618bcff3,3dd0c0c9,f8bf3192,2e131764,305b610c,88a2b74e,44672981)\n,S(96c84a8d,5dd2ec9b,44a5b2d7,af3b65e4,9c07786,969452c2,5e8e64f5,a264c14e,292ed1a0,dafdf3f4,83a2a419,6e1b6b28,4d7daf88,88c7268d,70e556fc,ff55341e)\n,S(458895f0,77782a62,43abb775,7daec5af,264a71e0,6eccaf8a,3b23baaf,fbd7343f,809eb056,87bb618c,a0f4e1e7,c8d05e48,95f18393,2e949b22,b9ddab0c,55d32b93)\n,S(59dba4a8,d7956515,7f639316,75fecc7b,58a0e91a,6c9c3d50,7dae6d40,2e67a9df,718094a2,83e47265,1ef52d4e,db25b0b9,9e069f,391ddfb0,d9987596,d2f4ee2f)\n,S(a5f92445,b7cd75c3,9a4b3199,96baf00b,f855ebf,ab3e19bb,71d4346c,878b4bb,9bb1bdb5,baa4d56,5b9c5077,c86b96ec,953ce381,17cc8d53,7b0f3957,a582ddd1)\n,S(f146eff,2a9ee1ec,a3f26d6a,17c89639,a1f3505d,2776e340,ae89449b,99c8b198,1674daf7,a66f1a89,7b5378e4,add6a196,fd27795d,88969a07,a210d33d,646a64af)\n,S(e67f5967,d98c1d3c,3a4d0872,12d3b65f,6f8df216,5dc14633,92c23ecf,ffc17e1a,c3dbbcab,d1971eb7,a8b088c8,c71d65a8,328bf43,58f0e685,9025db87,e5391380)\n,S(32e8d775,ed37cc2e,6f69c85b,71c95d65,d40f033c,b5eef362,86d4499b,fb6071f,2fbb1d8d,a6364791,95ecaf52,6f63eb86,e4604973,edebbf82,b796d88b,ade44334)\n,S(b98c7cac,475ee4a3,c1815a17,e460f76e,e5334b27,e1ea319f,be8924b5,819a473b,d7f1bb1b,a653f20d,c7145420,d8c8c339,d789ee60,9b9ff0ce,73910b94,3deeb88f)\n,S(d9830fd5,545dcca0,ee37a402,9f406cd7,50bbaf59,e60a80fe,da976bbe,ff9027d0,cffab795,e45a2833,75e7b861,728421d5,f9e22d03,44f835a4,c55207bc,6479b947)\n,S(399fbb5e,4f4e27ab,3e737a32,d065fdd8,c003ecaa,84a2430b,4a7b4d40,eb6f9721,93f7b541,121d13bc,480f7868,ac9d8302,6706d2f1,a46955de,a3912735,c5f02e0)\n,S(64e067fe,17127128,6ef0fbdb,b2adb4c3,395a1ddd,f2ea76e6,261e6cf0,112c6227,8ef6afa,4bac7536,a23f08ed,eb8656a3,47a13f25,2dfacd37,c215cc3f,473687ab)\n,S(57eb5e46,40721263,97f0d12a,532aa1ff,abef7822,4ba9b10e,8fc95e1c,6075a071,8a700d2c,80df0b4d,7e2c9291,9a51e565,8dd6ba5e,59bf1503,7bf7a0a,935545a1)\n,S(b83adb94,ba1874cc,c61ade9e,43093cae,5bd86ff5,e86615c1,abca14cb,6eb81877,93417bf2,1fe01c85,5c6f7782,a5cdb01,a5d13b29,d719f0fb,a2373ba2,8bada7f1)\n,S(7a90bb49,71537bc9,3d1bed23,891e43c6,e350fa37,ef8e73a2,3fd46ea0,5ed879bf,ee0fa59,3a51af19,70a6d8b7,22d42bf7,ca253572,2324a59f,c041b3e7,305fa3d4)\n,S(195e4afc,6c95d6d0,8273cb0d,fda2da3b,4696b569,650d4230,4d396fb,3e653831,44075199,9dce9d6c,f10ef736,7888dbb3,a713423c,f2881cd5,76a681ce,6fee2c8a)\n,S(28ec566a,29bd09e2,f8b228b9,ff2ec49d,56660734,f2ea864e,856be0ff,fd6f60ee,5b4f5e34,298b5a56,a6826143,8ba59d25,4922078d,f36dfdfe,d4e8972c,647fe031)\n,S(1e005b72,be1bb77c,80512581,58e940e3,544cc133,a76ddf49,b681422c,1815cd22,9c523adf,4ba5d753,93e432f,491f8e1a,435165b2,f40f79d7,889d82f,8951a25a)\n,S(f54ae39a,d074c399,636f0dca,682b9405,4e87e87,3132d7f9,cf79ad85,fa82586d,db2e9b90,1c2dac2f,f4851f4e,b0ffae7a,4c0cdf34,ae9f964b,841c539d,84040667)\n,S(bc8dafb8,d385cfca,3643fc75,c8a93f9,792d2b9a,715269b9,ec40d581,5936e6c6,dda791ce,186ff28c,db7636ad,4073996c,4a2e2875,80da17e8,90d03886,1c14aec9)\n,S(60b6ea82,627f5414,16978e7d,3c9d911d,9d9de92f,3baa0975,a8de4e3a,8ed3ab2d,64693ab,fd095109,ef89cdb2,204f2f3,89dae035,f451fe28,58fcb4f1,dbff0999)\n,S(9c8d1352,bf291803,22730718,5ee65aa8,b14211de,6d73dace,2937cc6a,1ee79134,3c6e0d66,48f3fb6b,23e6e4a9,5df3911d,797afb50,9c12e90d,7eac557c,7b1a9505)\n,S(bb2a8344,2997babd,6cefa2a6,1c9d2fc7,a42db3d5,bfb19334,c7535bd5,630be896,20de4f27,69596e65,edcd695f,61a0d8,3c8925a0,c8707470,9e84bd41,615ac75f)\n,S(ba8bca72,496a6046,7b250a38,cbb536e3,b9fb9ab1,43800655,8ef5d186,2b66d50a,81abbb33,e835f864,3d075858,7ce59671,7e08c1c6,75af4c5b,eb80429b,9dc46aec)\n,S(529fde52,c4d1c978,405107ba,d862f7b1,995ffef5,cba4a59e,d71b366c,28e17b46,ed7c2521,d39ca130,60d5f509,d0a8b0b3,40eb78c0,d4e4fc4a,83318a65,226d0a05)\n,S(6e0e10c9,4445acc3,593efdd5,4b8ea1f9,db4a45a1,4c2d0a27,edbe3fc0,7a90e91d,43537a25,d2091290,f753460d,8816ff10,41308e6d,fb04b7e7,d5a108d5,c9fd83a)\n,S(b2f90714,6fe2e01c,5cbd73a0,c0a358c7,a05aa730,97a060ff,491f362c,75c20e90,d0e680d8,f7d27eff,12b332e8,a92b846b,4242a746,9b31740,6c6af499,5ab51948)\n,S(bf631a7,933e3ab5,f7b8707e,55a9498e,31ec3f36,970bb9b3,f5efa0cd,1a3f28a0,1030146a,387d4fd9,c12544dd,a448133a,49b5a6e0,d4b96933,cd47e89c,608dd5b9)\n,S(cd7ec470,e9d5e3fc,a4c344f2,9edcd4df,4b7033ef,5e7ee99,de0db6a8,43926034,3aae77b3,bb008cb6,e982d673,7f78e920,f3a587db,bc106c0a,25c65d45,df8a4f6e)\n,S(b3ac95ff,8365813e,e71199eb,946b5888,7dd34b1b,a214482f,dd3b7fa,3b8ce6b6,e3d9bbdd,aaba7887,8e763360,abd370d5,9d941ba5,cf758d33,3b480f00,ec5e7672)\n,S(7fdc21a8,6962fced,e6f9fbdd,77e60a00,4dfb858b,5b149362,dae4b4f4,a4ab84fa,2ec0f21c,3d1c6d60,f22817a2,954d02b1,ce6e8b91,d826c11e,f8e542c4,245a55f3)\n,S(6f019691,def39afb,103e524a,598bca92,3c99e44d,7dff4866,f76fb6c4,47e6b40b,a225b484,cda916f3,559e5782,3b519827,8bd7300a,c31dace1,7a797582,2a2e2a31)\n,S(cb9a979f,c4e8d887,f03956da,9ac89637,579813b0,c3b27874,82961a54,e54c16a5,ff42bdc3,1a837d98,b7d37a38,db3c74ee,6109e868,d06b7c33,d5562dde,b11ddbf2)\n,S(2ccee51c,9d63f3e8,99314da1,656cbb15,635928bd,309cde4b,69699860,c0e28736,dff9a128,adb8b4fb,7bcaa1eb,6bfb390f,226b2ae0,b72443a4,5982d559,91d379eb)\n,S(a239538c,c5e0b53e,879f484f,7202a52b,d52d1cdb,ca7ae7d0,639850cd,b2c4f57c,6cc1f9c5,8998e347,2c6db0b8,6b1d9092,d3cd0c84,267bea8e,75a172f9,f4879dd5)\n,S(e77796ac,c619974a,63476635,7bb3bf33,6ad1e87e,8496bac3,378db956,7beaee90,3eaa4b63,c9679050,59d8cf67,7b7095c,4064534,1c592ccd,ddb7626c,10586f0c)\n,S(52c332cf,37646a2c,c1bf25cd,26a6131c,3b243688,9c44d804,d2762fae,618250c6,2279bab0,a19f78a9,43e695d4,53a0dc3c,f0312987,6ccbb70b,1d61eae1,e92729bb)\n,S(d68826da,36e5f78c,bf728468,88bbe6ef,f6e55d34,f8b47a9c,8296e662,4ad9bbb3,88ffeb15,5f70c6ab,9b83f9e8,30e2f449,7e661dac,889803a6,d30a2ddb,11bfca5f)\n,S(af92bd8a,2a5b0034,ea074d69,a1d7a517,808d3b61,58f5f7c2,d3fb08e4,eb825cf3,2fef9245,a4a3c837,d4b57ded,52009294,c077a801,8f633313,b6db2d4c,92c724b7)\n,S(df86fa3f,63d95d73,98872011,c7545b3c,f5f27fc6,a821bff4,5d09afd1,bf76d895,a891e766,12953c4f,37a463c5,ce449574,b1906c63,c192ba4c,67f4f78e,d1e93a35)\n,S(a049a35e,119e27f6,e272774e,f470ca50,9a1da9b,a4e5d781,6e64a13a,23383c24,4cb8e2eb,ccc82ca4,a2f82841,34eb3a05,f85a2335,a3b1b117,92886029,96fb3fd6)\n,S(b3193cbb,f3c8f3b0,b47b1a0e,5689461a,8da801c2,4c8d51ab,fc2e67b,1d9f331,2032a290,3f0cf0ad,21b63de1,565170a3,edee470,a4dbbabe,5f3d459a,3827c7ff)\n,S(ff3cd387,554fb3a,89142ff7,3e97fdd8,884964bb,2f457283,e45b79ae,ef1d692d,24475b62,c1ade1b0,ba36ad93,27916e19,637071c,22fb59c1,f2108fb8,d38ec5b2)\n,S(c095d24c,42b058d,c2f77e2b,463a2c7f,1ddd1dae,dd6f6111,11ba78db,26763204,d2648519,61974d6c,cf66de22,1028943d,ceccb181,ae03cd38,fb5aec22,fae54326)\n,S(5365a446,389f54dd,8279826c,e1e7df5d,b4a9699d,b8208efe,80d1eff,2d883ee,74625a49,b7856c1f,b157776c,cd79270a,2957862c,a437bfc8,75986264,401e714e)\n,S(4c073085,e96134b7,75248412,c36b3b33,77afa275,24c83369,a2477b8c,9851f15e,fed40d9f,a44f64b1,59c290e1,63d1add6,92bd2782,51de71db,e302cbfa,67e508aa)\n,S(71edf152,ab95a066,2b7e5190,8af75f38,d03d27b0,3a3b6607,4f472b7,706a3114,c3e6f145,dad44a3d,5cf056d6,2c608b4c,840608bb,aa15a101,c9bd3cca,e511741d)\n,S(1b7d41a9,3cba67ad,c145962e,7b2c6353,bfbc8eed,34eb4c27,bfc181d3,1ac0a802,b165e7e4,23c5d880,1bc3bd1,ee0c6778,50986b35,9dbad06e,aabb2f57,dbe553bf)\n,S(ce997626,cb41ab98,58f591ca,c89f7a73,bc1df836,716ee74c,45c4c781,eef4ccc9,be76f81f,a8e4b053,f63be23a,5e72ad6b,7aa359aa,e9407b60,98bdcadf,e367b167)\n,S(5b0cfa70,aeccd544,cd634d10,a2bcccdc,33e4525a,54259ba9,92c40100,698bbf2f,ec50e655,163994b6,4881369f,b3aab550,65df1a5b,dc6037a7,7c01e56,904660d2)\n,S(a03873b9,695ee82a,42b72a90,f0cdfc68,dbedbd2e,a50d5ff6,e120d811,ce8d5097,5947c8e3,56e64f71,b36fc1f7,7ecfc7f,a31c0f0b,cbb05102,775648bc,f2435758)\n,S(d6b91cc6,6dd31e59,f04c6e58,bd7448a3,fac62753,68579214,11a8b42c,66084ed1,fec7fa6d,778c0b63,e7dfd72f,ef044da0,903ccfc7,1786f0b1,85edd004,f691a0f2)\n,S(896a1313,e0a96d35,9fd42841,7790baef,a40647cc,f56264a,ac3b72df,687b5692,831d4b47,52f5fcd3,4942ca26,95dc86d8,4fe49c73,7c2bd46a,f892eef7,304117e6)\n,S(779e7400,8e564167,56795a4f,9d2021b7,94aa9689,eaa37780,8e3a6061,b5bdc04d,739ea3a9,4f38be31,df57c052,362d1872,333d2777,c6704c2,e69271d2,9f78b123)\n,S(f20988a9,3a3273a5,a015866a,c4de930e,507b5b48,cc5ba52f,a2a71e9c,185e72a5,6c861907,8fadd612,c0535163,dfa4cf39,648b59d6,4b056bb0,4e06695b,3b51213a)\n,S(7e8520e2,3151c78f,9f48bd10,5aff4087,dd90f9c4,2ac33e24,19499ab6,8e5b21aa,995827b,43c276dd,61403388,27b2fb9d,9fbb46ec,af10b65a,a8025971,608f38c9)\n,S(98f0e4b0,9e72ec0f,d80ce3ad,eab29913,fe84fa49,1786bd79,7f6832cd,7ed4dc6a,58c42bdd,7ca43579,b45df8f,b2a6db3d,41f75a3f,89dfab0e,e000383,c9e04a54)\n,S(31cf38d3,dec1162e,e75eeac6,6827aad,22fa3ee9,abfda002,b6956600,6fe596ec,ceeb4b04,fc6c31e7,7a6260ca,bdf92569,92841221,d60ca74e,81309472,8fff4442)\n,S(60766d5b,50cc4d46,a1234c92,1baeec1d,29900e23,4493f174,2f06ada3,ed9dfbea,13debdc8,9795f421,6f796a53,74b87aaa,bca4f73e,fda2ecf,7d151870,179c44a4)\n,S(1b0ebbaa,35e8ecb5,a76d9c30,ab88fa10,b211ce3,e7c2b428,117645b6,881c7895,a312adef,e1c4a34c,d9f75d10,bb2ceb29,79184181,bb955439,e317cde4,202b2f83)\n,S(b3129f71,c3438602,c9c24ee3,2f997341,26dbd76c,60cf7713,200ffb68,e486fc94,bd4beeb5,70966285,6a15002e,a25046cf,996a1cc7,9a570549,467ac179,b4f145f9)\n,S(2925ca17,662f0905,3927d40f,f2fdee1f,66cc5c13,c3587e78,fe48effc,40cc075f,6d37757e,64f0438d,7bfb3658,5df58dbe,a8ab8cdd,89871670,dbe221b7,4c416185)\n,S(8d55b85e,fce6bd0f,ff8906d1,6497d35e,4b69e701,da7845f2,aec1a049,39c9ec45,435416dd,9fd01388,b717ba9a,df574456,785cc0fa,c115dc04,8a242270,4a3c77dd)\n,S(a660a9bd,b419e19b,16823b5e,dc3fcdde,f1021b71,4debd17a,9a0619a3,aabc23c9,ef6d4bbc,e963bb1c,2edffa5c,ef70e330,bddccb4b,3b23cc52,d5b4a689,e0c76c32)\n,S(8896427f,c92bdbfd,59699ec2,222b4bbf,2198e160,94945c77,1f207bbe,4cdd6b0b,bc6081fa,abd2df26,b087acbd,a2c67c63,2eb1a8dd,6fae2454,6f3fa747,be421ff1)\n,S(47e5d9b2,3f429484,61ee9f38,2f14babb,f93e318f,32d67063,ed20e917,9894e993,bd17f8b5,6084d3f6,62facae,24e93e3e,29205f21,68903ade,4f7476a5,ba70e8b1)\n,S(ff352870,69bf1131,6f530ef3,b32a487b,3f11e6e,f8518c15,b1202a18,4e6d5487,8920338,ccf36f98,4afde38e,1a74528e,86fddfc7,8d7a6964,cad4286f,231462b6)\n,S(2a713d8f,eca88def,b5fda7f8,8de9c6cf,9b97bf0,4c070173,aa47dad9,197bae2d,5ba64900,f7d18ec6,8887bd26,d2769b0,26d22e96,1007b58c,b27b8983,a6e7adb1)\n,S(853d813d,3133ed7d,a85065a5,755ca0c5,3f32f156,154853b4,b018668c,b165ace1,fda8017,e00d20db,6ee4c0a,5790b504,afc376ad,170d74bc,1261abcd,241ea020)\n,S(d5c4dc15,37b048d8,6631fd14,7d896d6f,f403ceda,7de8883e,1ccc006b,6d9ccd99,9ea2829e,64213434,eaaaadc,43ed10b8,28e706a,5001d7df,47146058,8bffa8ed)\n,S(f649da82,d50fa298,8c598d5c,caf1e7f7,2bde2cc8,8073b55a,2e43b6e7,5d44905e,4438f4cb,d3e1938a,b461b1e7,b94d8f6a,c6e287e2,50d06da6,67aacb1c,609bb6cb)\n,S(adc3515d,4fb7776c,b1592a69,13254d7,afcb20bb,8a4d7529,7ddba70a,c35a7193,49b7bd8b,3f280916,c6024e46,afb45e6b,da5bb15f,3d3497fc,85e9a46f,acec3d80)\n,S(d78c46f2,603a00df,b45d0495,c1e2b346,963dc82b,84512cac,c2227acb,383f75ed,76b02870,2e7a3da8,79272759,1e2f81ef,54ed02f,debde8b5,38f9ff1e,4335a21f)\n,S(13904467,59e0fc27,c2a499ec,384e0906,bf293dcf,c13ca16f,d3bedfda,d320e466,5320c884,b74bcdc8,6e0c21f5,40c16f65,dc61f19e,9ec5e8ef,385fb637,ee7a3701)\n,S(93700603,543ec558,3fe48141,310b184,aa8faa04,6058467c,389c10f3,b98c42f0,8e0acf55,bfc585df,4f8cae06,131753ee,23a7bcca,68354182,61450e1d,e1a136ce)\n,S(bdcb9434,4c556618,a247c935,29c5ba74,c68f25ea,a5507148,1431c00d,6926884a,c29b7b1b,ad6ec5a8,e7046cf7,cdf99c6d,15f6a3e4,3c6ce718,9ae2acbd,531bb17a)\n,S(839ac85a,9337818a,b07b5611,f67eb16,6342c1a6,8aadefc4,6842c023,336afb08,88b30690,e79fb157,3e424c80,75bc810a,fb9d57de,5464a253,79d06222,ea656b69)\n,S(2959c32e,bcf9289,9882e003,c8a28e71,3d491402,4d24d878,ba8bed88,47b949c,ba2643c3,95fac027,6b7c55e4,d2d2f530,318665f1,ec2065d6,eaf32c05,123e04c0)\n,S(71116eb0,5def3abf,bff3e235,a0306605,b18aa465,b47167b4,4eb3486c,c442f3aa,2652a726,35be8336,f9b51607,76b3af84,26a23716,871fa64c,898520eb,822d6630)\n,S(400c1bcb,dd3e3978,3ca06e8c,2abe8b0b,9b45034,a1655cde,fb748ef4,e2a477af,1471c86c,c8b27b48,1d4c45d,1533a5c8,d46fc3cb,ea4788d6,c48dbdad,6f7670e3)\n,S(2a4abe28,5cf94456,aa92216a,dd635abe,71a7e825,712d775f,d61fdc98,a4c9288f,3c0d2483,3d6ffcad,b471d234,4ee8d07,15c09719,b18cb581,8ede730,35d89c15)\n,S(cb0113a,1832843f,7e32ce25,15b0b23b,8a803ea7,50b500b6,3fb89f6c,e7bb1884,816d7056,b775f13a,cfd94a6,f88f442e,519495a3,6e74d8f8,359a8a03,16583bda)\n,S(4d7be7ae,5c4271f6,c1adeb7f,4dac8467,beae22bf,ae00a71b,1e353be9,5ef172fd,cd7e6415,5708d20a,9fc3b0e9,85517642,f677281b,49490439,14845a36,afe6ca56)\n,S(bc285658,fd724cfe,e6ec8c7e,35f9197f,e9083bf5,439fd4d8,d9b262bb,7a3c38f3,80c10d7,59f76b4b,8330c96f,38a1af24,1d1b0db7,4e6befc4,4f085180,c1c33729)\n,S(a829ee43,221d9955,38ce8aef,e80c49ac,dc6e71f,4293750c,c0585c1,69963f04,144f6b56,d996a18e,627d4c8b,8115b2c1,c369f410,ec8924c1,73382302,3758ba33)\n,S(f5450bd7,efc9227b,e7d28ad6,75ee14df,1b2378fd,308e6c5e,68945ac9,a47d82d1,20201fb5,cba463af,cc46e6da,caac8417,63356e64,5cdcfa5d,9d810c48,272cf8e0)\n,S(7dcbdb69,46dcf79d,454095f0,b61341e4,45243bc7,c2262817,374fea5,37a1a380,bd2cee4d,c7ebc71b,46fb3bec,bd6787eb,d2be3128,703a884d,98359c5a,43875977)\n,S(f1d6c1db,cc8d33d4,fbff821c,8c788d06,2d906063,2f44a786,585a6526,20ce776a,3696a3c,8473bd07,76e77226,8cd09f96,3dbcd143,e631c32d,5d83254,ada29340)\n,S(f1688e1a,d5df4e43,67caec6,f2234534,f65aac3b,79a94ca,32a786bb,9fee4b49,efb620b8,e2164685,c9a3837b,5c6eb70d,759824,96541aed,eb80aebe,4193e34e)\n,S(b639e284,3ecffb0f,66c2819c,73787e10,527086e2,5d3da074,e037a915,e06a5813,61fde1dd,63ff304c,8ec99d4,67ffbabe,e8000637,b9856bec,344b825a,4f198407)\n,S(11a4ff89,d5e63ec8,6a0ce18,53dde8a8,875c9a9b,f563526b,cd25b830,6e3314dd,9f7ec77c,9a3f88cb,7f64b1ca,f2b5c7cb,d70d65d6,dbdba9f2,68832f3c,a2e117a4)\n,S(323db783,26abfd99,2b13d67f,3ae01415,77162203,c50322c5,7a7933e8,7d687d3a,92c8a67c,ec834653,d0f1a50e,a7834b38,631d83ec,ee38e50,33ed927f,7e14253b)\n,S(2907fe12,c8433ab6,2e6283ec,85b93342,ecf14d16,6d90cfdb,b4061968,aa35170f,160f9790,66291ed7,d51962d4,be02d85f,8a92ff8f,258a9a07,55b8a5ca,2d57c2c2)\n,S(67cef7bf,a58519cb,6c5cd8c4,f69d5cc8,84cc77a7,854a4b6e,a40b6dcd,57e43e17,e8071d35,e590dfa7,4d4f4da2,82033f1b,590b9383,70b571ac,ebb3bc11,b9b48482)\n,S(81e40522,3d4ccb14,3952867b,b8398cd4,e5ab92c5,d91066b0,d1fdeaed,55c71165,55357564,af12b507,b2e24e6a,425697b9,e6356b82,da36f111,2b5c3394,183c0d10)\n,S(4880abe1,47bcc598,a3743304,1afabe99,fc525daa,564c4b05,2aa60c27,5c814628,b6d944f1,ec69e7bf,2cdcf621,864ba76,a1df44a7,ed15ae15,290ddbe5,b91f585e)\n,S(fa2bc507,19131dc7,d5f23fe6,9e60377e,2d2f11c7,f8a9a451,82aa69e6,24eef53e,9b0f2017,5f287d80,41f58930,6cd022e5,9b63bab5,1b26abfe,1a295ac3,46a2e9fc)\n,S(aaa18fe1,25e781a8,901ac351,38d2bffa,83cf7c3c,99a4c7d8,54b30c70,c9483e8,6a8f9e1e,a40f6383,6008a0c3,596f7644,c044bf53,9700a142,ec5e3c97,c075b03c)\n,S(d473950a,8465711f,71a6f1f0,22f4bfcc,1c16ba81,4bf73c2c,1eca244a,da4999f1,6eccf9c8,aafb09df,46ca0d36,ee9028dd,1df62bdc,6ade77b8,a5d410d1,a69bc775)\n,S(d7e2b17c,f8e1895c,cf9fb163,b56f4be8,ad99133f,f00f2ce8,8ce911d3,3b8e36cc,b6557693,ed9371ce,69bf397b,56c0b566,21d38958,ebdc0b96,ca488570,1561e6bc)\n,S(3f1e73f2,a2192809,acaecea1,71d175af,683e796,e1337db2,11b6b34,8ba924f0,a593bd94,96308bb7,76b63703,bc11e30a,c5f01c17,c8b9748f,3b4c8015,56f52c3f)\n,S(4cbb68b4,27899c92,1c0d969c,94341d8d,161f3b8b,3fe4cfca,2b583a63,eb383dd2,6b3c29d4,97728ac7,b45cf7ce,ea618789,95935bea,bd146e1,6c756f61,4698b6cb)\n,S(e41b826b,52ff9bea,354af41e,3004b7b9,edd01e13,8cbd466c,ba4cbab8,d63bb4e0,75d5b642,47388aa1,51d4d8d5,2568a804,fcf66ba2,42b3f56b,dee0350d,ecc527ed)\n,S(d508dd5b,ec38f795,88bf2d9b,6bcc9f8,aa96689e,91c1381b,9f8db311,94588028,9b144547,1a2ee559,6584c927,2d779fa3,123a760d,9faeabfa,1e39d3b5,ddac2595)\n,S(5276f127,3bad7149,ee5ff022,2769dd6e,973018e2,a9948070,fdc82148,ac637de0,73f778c2,caca737f,acd3d877,14e24d83,964dd47c,f22915e6,212bfb09,8e804e21)\n,S(2e9ebbb5,9d108d21,71d28c27,32af659d,b534cd10,c5457cea,3fcef018,4d7761a,229d20ba,cbf0104f,b385621f,dfe386df,4f40c287,7d956046,60eb3923,46937bff)\n,S(ad819539,5b94bb1f,4e60ab85,932b24cf,2c79c20b,79a972bd,db1e4201,c49f1d1f,9226c45f,4d161a1a,c5c3c0ba,a0536def,3c6052a4,ec22dd24,cc803a37,b5d791a1)\n,S(f5d4baf3,93ee5acd,944b2057,78cae170,8a622f30,68d3147b,62bef05a,88fee96f,9a187396,9eeba528,9f5fca32,6bbb922,2eeff5f6,6d205a0c,78b77dea,ee17d1db)\n,S(1a0f5e1c,b2fb5d01,fbcbfddc,da83693e,9619ea60,1669c728,7710733a,e6ca778c,3074e8d1,61da2d34,38be57cc,fc437742,533e415e,5f0c888b,834a2fe5,5d4fd6bf)\n,S(a78f6f7a,110cd16f,99fbe16e,9be52782,248518d8,e621f478,2167887,f81cdae4,e3f78e8d,507f9af8,11653ab8,5f2286dc,db34d9dc,8106e9f0,57610267,411f02a0)\n,S(c53e4243,b26ebe40,a1abffdf,3c42129c,47e92cb7,32bd66c0,3d4a4290,c68b1c25,bd4f96b5,b5801b82,300b2132,2c39fd2c,65b2d084,e657ba2d,7db5df15,ab960e34)\n,S(a3a1ddc8,56957468,2e9b8a57,50bbc738,f72dc60a,1c09c95e,a6559b2a,736535e4,94887a0f,a4381d9e,dcc4faf5,1525ce98,fc43116d,29f68c99,236e4940,6842a741)\n,S(8160ee7f,738f54a0,698806b8,35ed4bca,113bb568,b23fd331,ef5f1cc2,80b6230b,382ff30b,f13f1e28,95a38af3,13fcd099,249b195c,96ac42a6,6a929fc7,a907b17b)\n,S(68552ddc,6b219554,dbabd276,e0f2a5d9,33610bcc,776bc40d,7efdc1c6,1b992e35,eee09352,c82dec92,b0ae8d8c,d6918ac6,df620dec,86a0e4ac,abfe8025,52a0ab5e)\n,S(919fef57,f308255e,1fa802cb,5acab880,c1810c62,c79a4ecf,c2251a2c,cc02ef51,cb38c163,8f7890f2,d61a980f,ed712ca8,97296366,7927ff7,39de824d,207ab566)\n,S(d7e493e2,e2c33635,ee8d22f3,76fa8de9,31ed4eb0,9771746,f48ba201,307e04d1,ff7e6d72,f712f2be,2bfffb43,2764f677,62917509,3cf6bfe5,eb5cb7ce,85c1a8b4)\n,S(6b642a8d,f4131ddf,7f31dc9f,c26b96c9,286e1f80,de2af96d,52e383d1,ffa73a41,1e55e667,5f0ee13e,76818c02,ce424d8f,48cbc930,b25dbb85,363019c5,fc29979c)\n,S(7ade4aa8,1df8c53d,1e64655f,bfe0ad88,4057e0b2,1c88bb2b,4c8d5f19,34794191,cb0e9802,fbf1027f,dd8d2167,f4f4680c,f9e18f4c,3bc3310a,c4014745,530a06fa)\n,S(6d578cb3,1ed19dc,812fd360,a367996b,91a7ba42,7d2f74c3,e2a1721d,72e1c017,4ac9ad2e,aab987ed,dc994b74,733fc710,19301e1,f691999a,5161cb15,ba11e9b4)\n,S(df95b5f7,7bb79814,21892d72,743abe4e,828a7544,f9f0e774,b1f5ada7,a054978c,4ccd011f,a966604b,32f70bd6,1a3c1515,c6d1b261,a3ce5c59,7078cc9d,f723b32)\n,S(d7392d17,1cf72e1e,ddea0be,a242edf2,c418e9eb,7dcbe1b3,aa07ae7f,a11ef08c,4b696f78,20a9ac8d,a5f52c8e,9d1a39c,bbb3d3d9,fb5b38c8,1b46bcfc,90e869ef)\n,S(f01f2aa9,82842315,98f414ae,f87c9d7b,6eaf21be,c4dddea1,3967677f,5d2a1032,7c3be753,da5485bf,13a4cd72,a9e3fbe2,28fc6a22,c502b19d,1b6f7d18,149e2b3e)\n,S(cee8f811,4b1829ab,a47e9b5a,54de7cba,1f6edfe,624f30e2,ec4979f8,3145242,4b01f7b4,cebb1125,20bb0ab2,7013af9d,11d19c4,14b0c29f,d142c7d,5b903a09)\n,S(f4215bb,973b5586,ec051388,203b1c99,cf69b555,6b1591d2,fc711842,759e9832,5d8a5ce3,ece7c011,df3d414d,e62ecd4,2d716c73,cab02e29,621307e0,658e6fe5)\n,S(e39ecc23,90c9464c,32b08759,9a44586a,da09af95,ba8a3b30,2cb015d6,4a49b18a,bd7957c6,e1feb061,f5535231,4f5c5e5e,c8245f28,4638f390,d079cffe,bd2eea7a)\n,S(9e6bbe6c,402e4cbf,e298e789,458fa9a6,68cfd407,3efb3d25,4699278,760589,989bf3f,9912b242,419c848c,f82c3fb6,8690ab05,bc23372f,eb9a850f,b4dd44ba)\n,S(67504bbf,57824cd9,8a3bd82d,34fcb59,3d20590c,a90b5652,c4ea4695,1f48905d,93ebbf6d,3678478f,56ae5a54,cde812f7,d8d40928,21b5e82,71669dd3,f0b263d3)\n,S(4e5bee50,503a28c0,9252b9bc,dd28af66,cecae127,2128e88e,fc431373,7324657d,d6891df5,3a4cdf2a,d7ab610b,817b0f60,c2502442,2e40269,a7da80dd,2672e0f3)\n,S(7481d5a5,bef3d397,533e01b3,640b0809,fd6ff946,a1e5481f,b90f0b3d,dd05c21,21ee7275,9c217d19,3999df2b,e3cddff6,fe59f26a,e570e0ae,58868441,f37e342b)\n,S(778dff4f,dd32f251,6defcd94,188f2440,26b9f789,ff4eefd5,84b2c15e,2bc61d62,996a2edc,f43e10d6,93cc2d00,c6f4506f,45be1dc5,c762fe20,3dce124e,34e320e0)\n,S(cf531271,3d65d471,929f6108,12db63ac,b1c52203,eb879ca4,a8ee9f62,774580,38e28f4c,881391e0,55fa7148,2c92c097,c842dd,74a58d6b,5753d6e1,2f773b19)\n,S(99702d01,9420286e,723625b5,62c8152a,2dd5f1a,eff84437,8a182cf4,25582031,8c4af2b2,654f1631,82d08bd6,e7f8b6ca,d5365b9e,d869fd23,e5a3c4d4,7e5990c)\n,S(68614c88,6b59c198,c49245c1,e1232cb0,b4bcce31,e0a2aa15,9fb2331d,ff1dce66,49c870bc,7ac78e22,b635c2b9,6f29e641,3b29c6ec,8ec8b3b7,8fa6597c,90180c7c)\n,S(f497a9bd,3c0e923d,5d622ab6,afeb9e8b,d9b4525f,d1f30cae,2a44d0b3,e13256b,af4d0273,e088adb0,b7de7724,b387e109,d49d20a6,eceb369c,12e07eb4,f28c9e32)\n,S(50a764f7,f5e29cba,ed7ababb,97d2ace2,22c06c65,9ce87d77,83b5bd0d,d165bbbe,4abc57c5,4c9f1d54,e73cead6,d77a85a0,8be25ba0,ce96b8a5,1b4fb460,5eca949c)\n,S(fccfe1e1,e312e6a3,92e83cb,97274576,56415255,b127ad54,432c93cf,4ae29bc0,e681795f,d8340902,da0018a0,dbb8a424,870e4bcf,7de95f0e,b2c7e98f,47a46c58)\n,S(66de61ba,48c1fd44,80d5c78c,3f06c3e2,45ecaf25,e4c235d5,8408c90,e1b62ed1,bf3bf086,a90221ba,711819d0,d80194c,c45177e2,57b1408e,7e649f15,a92aa6a0)\n,S(4373e7ff,e3995503,97bdee9,c9d3d70b,39f47446,45fd3c1,63b2012d,58e148d6,440a1376,16096124,42c7bff3,5f9a8aa2,3ac64e8b,bd5ca839,bd3c5a39,b84e6fe)\n,S(c8774ea8,7d83fc06,c36ab357,b1fa76b6,c647cc9c,ebf2e125,3f3ab303,9306ef1d,ccbde78d,2e4d2c0d,ace4e660,efdc4d1f,a1dbb44,4cabb0df,bfe29de3,191f7249)\n,S(748cb6cd,c57d89d7,8842fae7,731b1e28,3b59ed18,cb761c88,a4d2e4c1,c3359fc,62f5b6c4,11c72d4d,a412148b,8b038b32,8f98aecf,ece537a7,237b9f87,646b9a3b)\n,S(35a83610,30fc10f3,53d2fdbf,cf67655a,91b86555,cd3d9eba,f962996f,ecf55cbf,6fd79f5c,df8093db,5c7f3a94,52dbe6ae,bd1ca410,199deb04,761ffffc,77ec9fec)\n,S(cd05bbae,d0a8d78a,2e05e9d4,1c33cbd2,8d59d384,75d42389,43f9cc35,3a8a30c7,9f7336dc,8e77fd55,bd0b9e8f,23eedf1f,d0c16f69,921994db,dc2588dd,ff72a8f8)\n,S(da3fe760,2547c831,2d4f515a,5ce530be,29379325,41c6de36,364c4b5d,ead43c58,df60bf1a,d2fca43f,6d482df4,61fc180e,5e3cf692,995bf8c1,7d32a263,730b3ddd)\n,S(bbd7996c,25ba5c24,a14742a9,745dd2,8c18a598,8279581b,f8b5958a,8092051,896a39f1,310be1c5,9de4b86c,7c9bde10,8035ba39,864a45a3,69573d16,4afbc2d)\n,S(bf7c20dd,64ba5f51,2a996bd,428fdbaa,df1853fb,f814e6c7,a415fb64,a3e16070,afaec0ea,2b18c89,93a1a565,f3db58dc,748df9eb,4d9f8a04,a18cdc23,4710d5c6)\n,S(919d0aa8,10928129,cad99b09,85bea5ba,7d4ea114,9f9d5d65,2b6c0e0f,20464903,60d9352b,d053b01c,83caa121,63e8c9a3,e2153cbf,b335943,7a2a788b,7aa02dfb)\n,S(5e7c2a9c,6ab8251e,8f8749ab,e0ef107c,aee593e1,a8632a6e,1e0e0c4e,d3cace9c,74186f42,6f03f806,36d79258,e9edf593,6e21e0b2,d882d933,c0241ae9,7d761582)\n,S(2815184d,af1e838d,86d63a32,db5339df,24731743,aee62add,21e3a6c2,c2b0b1c0,2a4951e8,3ec61221,b1035c6b,a7d2cbed,f6ef93e8,cff69e01,295e09d9,20e05919)\n,S(e3086e36,91432a20,8602458a,87d82955,c8920ca9,fe1c079,3eed878b,282ec3b0,13db4219,50388269,cd591c5c,d8e07ba1,b532f01b,485829e2,aae4f55,f05e4362)\n,S(8264d534,2db3261c,d7e294c6,eba040f5,461fb9e7,e3fa13fb,dfcec29c,20f2fa7c,4dc311ff,10b92db6,b67f47ad,86fd74be,24e3dbe0,d6a74842,92f35d9f,6e95eac1)\n,S(9edbed6,3c4b66ce,a8c2ac6d,89622d61,6838e1fd,9b93c363,c2bde528,a629b2b,c1706a02,5b1f9419,2dde89fc,63ae2a81,ea015ab2,964beb58,d5ca7ffe,84266644)\n,S(68006753,672e9ae0,79fcdee7,9814a904,80c170a7,f644302d,e5de7982,7684e12e,fc1209de,88ca7c3a,614252e3,153df13a,6d0e8db0,4c82d83a,fcbe65a4,5c084398)\n,S(acdfba80,9e519114,a11b1634,1835d7e4,5b93a6d4,7094846a,e1ecec00,18bc4531,a4e57d02,51511f2e,5b729309,4c50ebef,4f8d3cb0,d930ff48,20d0623b,d636d664)\n,S(978304cb,e99eb899,5ef43f94,c67c471d,6d42ec19,f83f9323,3a44b9f2,e2d13896,ab26782d,2c1dbf16,a90f90c,8e49d250,1e1172f1,3e1bd20a,3deba979,85fcb110)\n,S(8c8b561f,9c857510,88478c03,866b347f,46e06801,82482343,923d7e27,c67f49e8,e7908d27,79cc5b19,dd00f2f0,4ab52474,5c35cd6d,4b85932c,99614fdc,64048cc4)\n,S(d4a7ebc1,987b1abb,5d02e598,190f73a,36d1176,d7f0f7a8,cb9491c1,b86a3c55,4f321dec,9c1832e3,b0d0c974,798834ab,6a410bfb,398ebf58,177f39a2,22ba4e50)\n,S(14bbfb6e,7910f522,69e544f2,ad3175d2,3a36b7aa,8209c24d,1fbb4277,9508c261,d16147c7,2a1df442,d8e831e5,aecd54c6,8bc3f225,4d0f51e4,9a375053,73e8d08)\n,S(d24ad71e,81de43d5,7096e101,6bd4d99a,46e52e56,782d99ee,838217a0,dfea0f5b,ae574f68,e07cead9,f214976,67a18c2f,fbbcbddf,2bfb6c95,3b7ba673,7d08903b)\n,S(ac96889a,f0b46b7,6896b763,8e1a13f3,dd24459e,8601f892,c3367c7d,8b52931a,b68a8631,8672c378,d99b0b20,44b06190,876ab100,eadb12e6,c16c2ba7,c1ee2381)\n,S(36b4da52,4f4ad5da,d7396445,1e79bd5c,20973df0,efa82bb2,da4bf68c,55afeeb7,5cb7598b,576f0db4,db1093c5,e6c9723c,f493bb91,450a0017,9f79c8e9,92dd6136)\n,S(98c7bc3a,7054f928,d062ae65,b4140dd6,293f2fb6,cd16fbba,e00d39d0,b11befd2,82d134ac,3e614e4e,62b1b475,bbb5fd80,a5e6d3e4,e4572dc5,7cb666c9,a06131da)\n,S(95bb18cd,991cdf72,1c627d62,aee4655e,aaed0b6a,b1e64537,fa89a0ac,f60b4a52,c37e37ee,5b87a5a5,e61824a3,ea519f03,dc3b0a77,f755485,d337ac79,f1f9e8c9)\n,S(41e45ca2,b88a4679,6df9106b,c8b53180,81674c34,9646545,e5ad9b6d,e5f6cdc6,151ba666,b0fdb7a7,18110f62,83e3cb8f,8e40fb8b,fa1a1854,75958a3b,ec10d197)\n,S(32d15f16,dda923d5,c2f1bf5c,9c003b33,b77d2450,95e5ad31,2ec62956,ae092805,58d64c72,96ba6976,d61774f,f37a0d1,6316cd19,3ac0d930,bdcf4924,cd904095)\n,S(41c4e029,817de516,8dc04b2a,9bde3850,7ae48602,dab08db0,3272c694,6cf099eb,303738a8,7b888601,2f9e2053,5bb8b610,92f6222e,96968afb,98940d85,98181458)\n,S(28b8ccf,b14a86a1,84fc3c3c,a6a7dbd8,763415,91a67d8b,4109f026,1dd964c5,899f98fd,5e0c59be,69150d8c,5a917d6e,864fa15c,63072769,f75f6353,8cb276e6)\n,S(f2776367,762d6468,c9cc0e38,d3921813,16dd394c,eaeea519,786b4353,a5044586,1a873421,1b170183,a117e420,c41d2725,84acf219,a415778a,4eb0c34b,bee9a68c)\n,S(7a1a5f53,6e96ee57,e10b1337,6bb1e895,d0703c6,5adfa4bd,f24937da,98bd7144,860921d5,67fbdd1f,11aa3ced,103453af,8c3f5037,b92ff10b,ee70ddc,e4323206)\n,S(d82e79dc,5d6de6ff,8863e039,60401bd1,610500f1,57fd2b41,f20689d8,889c3f76,f1947dc2,ca625df3,af5ec97d,32e62c09,2139d108,948795ba,5cb164b9,351bbf34)\n,S(6a2e184c,23ee235f,93f036c4,3875db01,22416a6d,26ef54bd,85a2b465,defd0351,6c44297d,724eb2d3,2f58a197,2f52a7ad,ee49d30f,c8f8424d,7f26c6e1,73dc6868)\n,S(ea0d5281,bd1417c7,2dbedbd4,dff37c49,bf143417,d2a40dc2,573b4b3b,2ccddcde,c7a35ef7,685faf18,c5a4cfcb,2eca27b7,46b21d65,ed71aae9,15185cc2,6d2b54ee)\n,S(d5432c9f,8ed0b4a4,c3e42dd8,28098f13,11d2cdf3,94672331,51fddbf2,a6030974,1e047ebb,8cc01a43,2ee6ea04,578513aa,17ad2bef,7fc7653e,936b2d22,bf8f6c3)\n,S(c99ee053,655c9d53,1fdd2298,3cc03756,299f47bb,5e1d0a4,d7b861fa,c3b5e332,61c5187e,4e12f8fc,617a5fd8,746f28c3,368b6b19,1189172d,8c56e2f4,679f6b7a)\n,S(f41ee431,170be2d7,fd488c3f,5f21f3f3,aae5e501,1a3c4ebe,d0f6db8f,63e11e55,f767b289,118391c4,4d27c1e0,76b7c70d,110cb938,e9c5c62f,1af200ad,7e9976cc)\n,S(505a65a4,29388bcd,55561f5e,fb3090b2,2d553bac,2f8cee97,6c0685da,40006e41,c72c9e86,6b4de925,3d463d7,e7bcf7d3,d6e7c351,1fe6c4b4,7fc436f6,d793e0ae)\n,S(ca34be0d,48bc2931,cabe71d7,9cd2bc23,ffa928a,5d532d67,f3665acd,375dc01e,263008ca,4dcf002f,8fdd580a,65701694,bf4530e8,baa0438d,b77ec246,75b4db4c)\n,S(d52c25e,9a76600,b16dfa93,cf9c2df3,38c806a7,d8cff18a,1d262662,5fed6d7,80309810,6055c3a4,d5d1e5ac,945aa815,bb8ca3ed,10b5d54f,156e4336,39c4ac77)\n,S(83e43bbe,62e39426,a0a74ef3,831cb4d2,776d7ea3,d5a2d57a,8280bae6,ae0bd8d7,a1c2c1b4,ea1140c8,cb4ec2a6,98a3f727,666eaf81,1ae9b89a,9e09db39,d1a257d2)\n,S(12326a97,ad8dbe89,3181d76c,6d7507e2,74d62cca,1f0a3517,30e9ddd7,198de84f,79e7823e,7cfa4df0,bb31e9dc,ac415297,edc6e061,4fca2f18,1ac7fd46,d27fff48)\n,S(1ad3375e,c82aa917,88bd787c,37fef8a0,2071509e,aef62e8a,dd5c5e4c,b096cea4,f9f9f10e,efc1fa79,454c6d55,b894d65b,ff5c445b,f4e9e46b,8c82a4c2,a94d5a71)\n,S(8e8bf9c3,a752258c,278bcf19,7aeebae6,fcc198f9,2310b13d,d114c1a7,d10fd2c9,e2f41d5,b7d94378,5f61f572,763e6e88,df7b321e,9baf0445,482d9f22,f1160195)\n,S(c44cd33a,144e2926,b7ebfb93,d7d9ab56,3888f6d2,694efbbf,a5665e10,f6e0ff7,c2d4afed,f77c22d2,88f9cf38,a057df90,baae8ca3,1e074d11,bb8f89f4,e9e1bf4b)\n,S(b960f0cc,bd7d3431,4138accd,aadc2efa,d5b60071,7c69f1c5,92900a40,ea68b24a,e0cbda14,801794eb,19401935,3f8ab80a,f525b8eb,2b64e5ee,62afaa5a,da4680b1)\n,S(f7104560,8fe120fe,5d036260,5bc3de58,76e24b6,20684413,a440cf56,6520559b,2e208f0f,fea3f78a,9a283f9a,6b601ce,db4df4b,b2fda7b6,306dc8b7,3d514f35)\n,S(83a31aa2,cb10fc14,ca8cb2cd,b21cc163,41cc9862,67a5f1cb,75f3f90e,1a92c59c,be18918,400a6e32,b4fa3469,ea6e3613,251ceabb,29cbbfaf,2c16af07,fc5413ac)\n,S(3d7b800f,8802e521,341f83a5,efdb355a,b60669d0,adc15531,72c62097,8106f6ab,f9b179a3,aae98427,e02d4f00,89b3cee7,250e30e5,ed72d59c,198d5ae7,1d639e72)\n,S(7bef4e27,9064400c,48d4f27a,a754deaf,8af74b10,d5dfc497,98c38216,803f50e8,bab0d71f,d02c67e6,b274693f,6a4f402f,831aa4a3,5fd83014,fb07c5c2,e62d561d)\n,S(e6b2c83f,2a6ea201,f56a024c,482a8076,2f2053b4,2e4d2901,4a5178d2,3361bcc,75d1f7b5,209cafe4,f98e63ac,53052a40,487b3390,e4ab73eb,ac63acb5,cc3dc88c)\n,S(eb4f3b95,f12c16a8,e5e13446,d9b8ca7e,92c56bdf,565aa4f9,bc1c47af,914fd145,e3776908,e3f3228b,ba0c0523,7eaf1963,1835797b,ffd7eff5,61b30fb3,9fcd6307)\n,S(e2926c0a,858b9732,82c1b34b,4c4ba4b0,3099797d,d29c5fb7,4447f28d,ff962e54,2730f3b,e59e862b,37ac50,e5375d08,920cb62,b87ee8d2,f5ec9975,886359e2)\n,S(8bf4efd6,c11d7251,b06a5e08,99ff2e80,349f8022,387f3200,6d9de060,bfbf3f68,5514395,457848e,a79ba6c4,39a7c151,b497751a,a4a1784f,114686e,e351afb)\n,S(4ea97c1b,920d2ec5,3c2182ce,d6f7e1f3,df49e673,1a14ecd7,d67aba0f,fd077c78,5e958afc,d3894757,e0aa89ed,ba26e035,f06e4b11,da13675e,29d382c7,b21fa9e)\n,S(1b12e81,3c7c19be,18576f93,69d938f4,bc81bbfd,7e9eb443,cf2b9ef2,b8e2b3ee,47220a1f,718c36af,8eb8a9e7,ecee3899,ddc49127,91421438,8760d6d1,699a5ad1)\n,S(7c6c144d,4f839904,ba40fba8,b739913,54f40bf0,f5810329,c4e3b961,ee6a101d,6eebb976,3ceae5f4,f1ef2473,a50b795b,a6375c72,df67d15,f310b5ca,9706b5eb)\n,S(ec637ec6,bea71803,2bae7631,9227ae58,9581d3a7,131323ec,35f0d9fa,27a3e285,c12b830f,f273fe72,4f3bfdef,4279ce4a,8ae6d0a6,de5cbad2,b0a7b4ab,643c79db)\n,S(33c8d6fc,d2b37103,2426910,6b9adb76,6c76f788,9627a9,6807572,e0af0f84,b3f01db0,7ed82f45,252d494c,af735e6d,3934ff78,c89c57e6,6c42a663,e5d6a792)\n,S(35ee32e5,f7204f0d,d48b1a80,cea0a418,1d71205e,c373827b,2afc25eb,e3ab7e20,d57bc815,684adacc,756291c6,87d0eab1,63067976,a7c3a2a1,98ef1d8e,bad12935)\n,S(97362395,200d807e,623826e8,3bdfa37b,e98793fd,6d7057f6,370720b7,5089a6b0,c908e9de,cd1d54a,172973b9,1706fc6c,c3367d75,2216c2d8,1085dffa,5627f06b)\n,S(bd37e01,eb944b32,b379b195,16256ad7,4061760e,4eb44361,5e8e5fd4,34eae9a,dadb545e,2a613e54,6067cb6c,179fbdf6,d94b7b8b,c799adef,391b2957,2b93f57)\n,S(b332b57a,4f070d20,35986e86,d82cc6f,7180293,53bd360f,d3f883fd,68e9c5ef,eebd3a05,933526ab,ba9e63f8,cb24ffa8,550e50d6,8cc7a4bf,215c551,ab89832b)\n,S(fe5bf27f,9459e640,7489bb32,2012d1d1,69d40635,74dc05bd,6bdd6c38,cffb61a3,72c6318a,3775b8fc,5c790d6e,31bbfddc,7ee07a71,93e5f137,e3c3e098,bae25da9)\n,S(f27cbe27,ed93086b,517c5859,9929310c,ad0e05fd,482f1fc3,af041852,c63a2a23,cce74e61,4e14bd09,8f11674f,23e30be6,b3276f4c,f85dedea,b3cbfa49,5a716e4)\n,S(b328535,1a1b22cc,51b7a590,3582dc27,518bbfa7,410dc36c,e63da663,daa8693a,1b260487,7d3ad6e3,db75a0b5,d6b89df,df507809,c203b4c4,cb0712ce,ae2e3d2f)\n,S(bb47bb09,70dae4b5,4f4c3aa4,ad4c966,ae42691e,ae39f1ea,a6711d6b,5f04b81e,2edfe19b,b52b7b0,2b4cf349,aeeeab0f,67524375,7f35b6e7,b920d343,e71561d2)\n,S(fb6c9735,d4333142,5bf6ad83,50c7241d,b82e35a2,9cbafa37,d822304a,c1b3dd02,946a7ec7,1e0e6dd,a4d4c315,2a6e7489,8671dcb6,8a219781,3e2491a7,6a9e3357)\n,S(c711f224,40cb6e74,a60509ec,23daa2d9,fbca44aa,9a093475,524e31e5,43575a3b,e4259800,352d0d79,c5e22d3e,2bf59f4d,e4b42484,68d15c47,ab5a9cbf,854294b2)\n,S(9c748d45,a07e141c,639ef97e,8887ccc3,aa84bdc,ca0618ff,4f43b1bc,7496c83f,3dab775e,c3001657,e71a9d46,bf8cc120,9a74b9d5,1025f97c,4dbb9457,e932b5b4)\n,S(9d5e6479,81a9278,6db60938,4a462621,23070938,d50e1bed,8df9474d,bee12513,30f2517c,6ff04eb8,9a6ef21,e4ff33b8,e14567ef,e38871bd,b9dba6d5,584c8b0e)\n,S(4d24d6e8,91644ed6,ac1aa619,f9eb2b58,a9932c5b,3e8c82cb,589694d0,14b1d472,6ef1a21a,9dcba4d6,850e6593,3ee1a259,91203278,2f478fae,cda13d6e,5abdab22)\n,S(fa226c4,36b389c4,50143041,da93c906,70258092,a8de85cb,d20a0dcd,284bc808,524d2992,655c77bb,59258257,5db3d663,a7a345f2,85572ff6,e9dd1dd3,21bebf6a)\n,S(d4e659a8,e9af7543,2d9ec769,5dda0371,7bd79ff1,9ba73f07,ad0bf13a,45ad3b77,5f4a2de8,db9814f9,9b73ec63,6c77f847,1aa48356,ff67c8f8,3f0b6aaf,1ac7ba9e)\n,S(157b6da0,1556b23f,b6c46b06,145727c0,21d6e573,782bcded,d594ae46,598df23,737d45d5,2c247718,e720fed0,56352768,ce111425,72730890,5a84a545,c53c560b)\n,S(d97a6087,19c8572a,78b73938,5479e4bc,9a2b249e,a4f064a4,550ce127,fc4bd45e,f11e233a,75ba1651,144368b9,55bd4dd0,f4ba1f2d,2d0bce2e,82315e5b,78e0d76e)\n,S(d2fdeec2,9b5f4ef6,374c2b87,57e4867b,d2e036d8,964a2ae,15632ca4,6f79a294,2d2c1502,a935f5b5,960abbda,9db42aea,c9f58f0a,bfaccddd,f8d59881,e2953872)\n,S(fbc6a2b1,b3c0b039,9abc55fa,835bbeba,b0461db,41f3d9f3,160d0154,72861b3d,54421d5e,a5ed3abe,f22df1a7,26a2b5da,a298b41d,acc69bd5,a72952a2,13f928c4)\n,S(7ac224b,cf7efd8d,b214db6,a6601d51,829d57d7,28c4c3cc,398ba57f,5079bf99,edf12fdb,9e281367,5e7df40b,1cc3c572,55213edd,c0fa07b,4e3f750d,36d6935c)\n,S(f2bc4452,4af39f04,afb480c2,f7addb57,a04db86c,3691b26a,922b6ce5,a1724d9a,63c372e2,4a659127,ace8f54d,33969635,1d890dbf,7e2a31c4,251352ed,53c3a0bf)\n,S(5ac48ffd,bf27b452,ca37dbdf,83f2fe6d,8f704040,f3a56180,ab991228,a74ad88c,c7ccab4a,e859e7bd,982310ff,2b7eb408,678b6f21,f52ebea8,41021f3d,fab6f091)\n,S(daa3d659,a4defb4d,3291a16a,d669a43e,b6891e90,dbe0147f,568b650d,1213750a,af36d811,9ce1ff85,5dd637a3,bd475b10,50216093,aedf5f24,2c98da62,29bdcdbf)\n,S(381d3791,30d4beaf,aed138d1,4072bbcc,b8d71d6,dbb13226,ff168f64,3bf55d37,fbfd7b62,3ce32a4,4335682c,d5ccd4b4,aa4430ce,d8fe3d34,9582bba,fedaf9c)\n,S(757c7b23,ff6b6ecc,51ac84e6,26ed70ce,4e6e5c74,e4b65f3c,fd17c304,e19b1ccf,56848ab7,f814a047,2bd286f6,b386af5d,34b27c4e,a3ece71,f153dcc7,7e4027b8)\n,S(ea498d11,ca35804c,d6103185,ae468bec,6c2f4f6d,ab025173,b1de4027,551b913,ee939bff,8d30bf5,9e3341e3,58acab90,17de8fb6,e2977847,f4322ceb,ca8829c6)\n,S(9d119046,59ea5dff,30105d1b,5ee3f8dc,c9291bef,15844057,66e07d44,72ee1418,45355041,4d4715d,e8c087d4,f05b5f8b,a424ac3,49b3ceba,bf806b9c,e657e139)\n,S(97bce776,90f8790f,e7d82b68,b7dc1b38,f3baded3,f7c67655,1894fc4f,cd1b834c,fcc18c2b,4f743ca0,e00f4b34,509fc237,c030b689,83451d5f,e7407b81,ed04f7b4)\n,S(5339f056,abeb4926,f46dce7,3b8d735e,c6e9c4a3,2057c22a,49c86400,f15d7ed9,5be6a0b9,37e26dd9,f6db74a7,74fa10d2,cbae30f6,bdfafb,dfa2922c,58a8e37e)\n,S(27f22d01,4dc5d3,162f39c9,7de3ef62,f2275b5e,cc6d5e32,6ab064ad,f762a446,6aebbb58,d671179,d712926e,d56cd280,8393fd85,dee45558,300a0f8a,a2986f09)\n,S(94af2fff,61741cf2,5f158308,e7333e3f,678bf1ee,56adfd56,629312e2,2435f9d5,33a7269,79df6672,b13198f7,e674330,806f2dd9,50d8e82,1774f381,d9ec24d6)\n,S(ae8a0e18,486273a5,36d526ee,3974031f,f3ed095b,a6835a68,2e943dc7,e19b37e4,23c2a51f,69df1826,9b21413e,505c0785,576fbc84,acbb2812,fda146c7,f5e8c8c)\n,S(623fb527,d3d99023,9f720cbc,64478e0e,a0b84b28,5c0c3f3f,107b3e3d,7dc430aa,3ea48a8,d1eb543e,ade4a55a,f909e62,14e47d26,9471dbf,4d98a3e0,39c72849)\n,S(1ff42295,d85e98be,f7aa84c4,47ec854,29f01b4e,c87371f2,b2025ba7,1e31a768,d9500f9,6e8c697,7ecc51d5,7bb7dfd1,3cc97017,58bb4196,b0b11d1b,3c24937)\n,S(bc808b0b,67bedaeb,2e7a4bc0,d328efbb,1ff35dc3,b51716ca,3e501a3f,956aed3f,6af0de4b,26a6378e,6d86378d,d1f54243,929c37ee,d5c10bbd,86b80c3,ead8e545)\n,S(e8ab92e0,17a9e956,354203b5,5d7b15fb,acc666a2,79158016,33a91865,b5bb46af,3e87cbd3,66926e66,3f5faa,426a9db9,811a9db4,de3a4bd8,79073b7f,c1e3197e)\n,S(a7bf0061,c383040b,6e89ba95,b57102ae,2c291ad6,72bb5027,3c27fcd,f90613ec,79ac8ff2,4bbc79cf,431f4159,4852ad4e,2f0a9f86,ca72ac11,9d4e3fdf,8746539f)\n,S(6841bcc7,22b705e2,759ba4e6,83d6b83a,19ee6b4a,375b38f4,5722474c,ca41894c,dac48021,5c168519,d147a966,451dd63,7838d236,5667803e,80658faa,1029a7e)\n,S(d67e6d5e,a1606817,512f1db3,9033829f,69089a41,902189c5,20f0202b,8511479f,9cb4a747,7224f93a,8447152a,9fdf4c92,36a1b698,2e9196b5,a4355715,b9fd6ee9)\n,S(61b3a7a0,53c477b9,e03d0a96,8ba38de0,b02e42df,162a13fe,8ad538c2,840eed06,94c07520,fa19457e,8d98fdbd,d9a9bf93,57642cd8,1b48fa58,b4b14a89,cb6142ce)\n,S(cbd26d0e,a00f7dd,4b0b26ba,7358b2c7,587e233c,3a13c86a,d5022ecf,c865e4ba,50e832c9,d84ff55b,7ba79035,559bc889,53700622,59dec3cd,8b3eda3f,1f2b6e67)\n,S(17a6f57e,d3d729d,c5ec018e,1b69394b,1ed78e59,6c7a5e31,bfe5dc43,f9c67e56,34f16cdb,c23e46e6,bda5db2,7538d7e1,f66751de,3eb05543,96c66a54,36bdfe9b)\n,S(eaeb62d,93fa13e1,ff9d9a4,9eda40ce,dd6006e5,ced0e8b8,c02f7ab9,98f06f31,7e225365,b4b39204,b01c8890,4476c141,1c166f75,1726718,8ad917c4,9a719ad3)\n,S(d09999b6,c35d5d71,55605a17,e7f82d3c,dd8d68ce,9be252e6,99493031,a39c7487,9165e761,8dfec3d7,cf733fcc,e548f672,362637aa,8687f47c,b1eb5c18,a780b061)\n,S(2b4cf8d,7fb166d8,a6931bce,e67f580,870c61c7,635632a0,71166fc7,4a11c693,7974e2d5,164771d5,2e7a121e,2b015565,b3a874d,d6313721,ec69d3aa,b44d473e)\n,S(d5c0045f,a411cdea,470d85a6,66aafa44,49ed682f,a1903c5b,c9594d19,5cbebea6,ffeebc77,5b24e736,8a8b46a3,64837466,85df5c8c,b40bf2b2,291f370e,94c6eca4)\n,S(1eed08dd,d9569712,6c0a4039,c6aa5ae5,ab4aabe2,a88142c3,b9aa763c,632b5e38,d180547e,c4640035,ca86d925,10a70a64,5dcbf2b5,d3add4b0,3f6d0fba,5f4c2f8a)\n,S(9591b04e,3de43104,3a6982e1,29a2e79f,f525888,846689f0,44e50b18,ce14413e,cc4cc696,73279c51,4aa4fd63,474050b1,930e627e,a1bd9d55,867d700e,fccf8155)\n,S(690a17c1,b2dc7ff,520aecaa,380b19d6,d4a28669,83dc5df5,8ab2bfb7,6c7b0600,bdd8a858,e2d989ca,79fbfd46,60ffdc0b,e0231562,711b13d3,47cfd37b,7a53d4d)\n,S(800a632a,aca6b505,f9fddc22,14efe53e,4e7ad2a1,a6c07d90,27d8109d,893851ab,bf242683,e0c1a24c,9220c6ab,deae8baa,12c6203c,a0080856,bc5e5ac6,4c3f3261)\n,S(6dceb824,c48159d8,57a92334,4c72b4e5,cf2005c5,6fadedaf,5a8b780d,3ceeeab7,e6b961f7,6162ab6a,d44f3fb4,5aefc843,bf0d714a,1a50d13c,68036f42,30a1ad10)\n,S(3ef5eff1,2b76432c,4bdfd1f8,23bdfdee,f60b5d0f,5d0b4051,2a3e22bb,665f2b0,8741e43e,9f78066e,d57d317b,d50252fb,11d8d235,3c2c9d57,76191c21,8798b0a9)\n,S(4ce8d33f,a53f2e1d,aa696e9a,2de694df,2192db5f,8e6fe88e,b5d51340,83791c17,a023ff40,69587bb9,49ebb15a,d047f141,9985b521,ae915f54,bebc6dbf,5320558f)\n,S(da030efd,a3f6363,926abcd1,182f183c,43c4a6d8,8bcb0519,3d137827,6dcd3fbe,c14f27d3,2251248e,3c4b8613,481e7c48,f1493b6e,5c0716c7,8d5e3b97,876ccf3a)\n,S(65c12034,87b729bc,3709759d,beabdd79,ee7f50d7,ed2cedfe,f2c2b7e9,97192f40,f440d69e,d59adfbe,e087ef70,9b75b95d,13ac0e06,20683d3c,6d49762,ddf68a01)\n,S(82c052fd,dbd6aceb,1f429f21,eed34d44,f915e949,7190aa6a,d487bd6e,68d91c20,90dfd944,c7c20ec4,4ce35d2d,4036eb97,894f5b93,6bef62a0,f2f65082,b0f7678d)\n,S(43e2f20e,cab47065,e71abd8b,aa511163,e17e3efd,3e17d790,ba924de5,ab402255,6b1ff657,e37b65e0,bf2c5e60,47e36c8a,2b7ba965,79bdc711,c3ae5935,d2c47bed)\n,S(27f177cc,6722e5a7,70200e2e,a9198bb9,f227251f,8efa1988,ac7342b0,985a3853,a76767a5,3743db5a,1062ccb,64452ad1,606d5065,9df8c0a5,64f049f7,764d6a99)\n,S(6b1ce20d,d15cf54e,59aec7fa,c1919791,c40c926c,55801801,75c09ac0,dcce0147,c90a76f2,627d2510,8b89df25,23f069a3,6b102201,c2fb7e9c,932ae678,4a28906e)\n,S(f9df6109,27b5ff70,d55d2a46,ebc6a734,df165bab,3bd27398,24a60727,5410f62b,4da454cf,7a381056,581fb115,d36161a4,4beeef74,26724d,d4f5500e,3a6c1612)\n,S(16bd87e8,2f87778f,6b3f1da1,a04bc048,3b14de01,420b0074,81aab07d,ad806cbd,13a50b5d,886047b7,6898c85d,cd1bfb4,87642f95,8304d54d,12c03b25,9429170b)\n,S(f35175c6,2244f0c3,ddb104fa,3ae57557,424c2d0e,f6a20246,e2fa48d3,2908dae7,dfc1ef36,8ffb4e8,2076ae27,7788444b,33880ee5,b6d5bd0a,9a2ba79f,30c4d1ff)\n,S(6a9ec43a,b8a6cb70,465ba668,5e15fe2f,9e714c0e,31f1f227,186d95ad,2faeccd9,ee752bfe,4da4feb5,e4c0266a,57929e56,62483704,6e927e73,9edec593,8d538708)\n,S(92e3b0b1,3df6dea4,371601ba,3d92f507,2388a23e,302edf74,6da973b4,613d2292,9442966a,dff82878,f6e0b8d9,9e56f99c,68eea310,79b365cc,5f057eed,ec38496a)\n,S(35427db7,f03afb34,d13ba232,420e5d9c,4a8d16c7,924a2043,a217fbd,4287230b,5cfc1908,108fa47c,95ff8e02,634351d2,523dd990,aee1700c,7cda57c1,b106a734)\n,S(a61be939,d3a33b8f,65b8fb5b,897598a7,ee25e71,5797014c,fdb087f1,90895825,fa6b7a9c,f2a4a71a,857bb126,44fdcf27,c9f4ccf2,7bf6a0d0,dcf8179e,af1a3396)\n,S(659868b8,2a9422d7,1da877f8,59956376,b999dc3a,657278f0,89e1b7,a3014222,9ecb6c01,fb97f691,92402a76,13f7932,d8a82252,e6b97c66,5c727d9d,e6b2ac62)\n,S(12667366,d27bbe3a,d75f00c7,b28fcf20,86e9caf6,e8b5615e,eee0f180,526602ec,dbac0f9c,32895bf1,21c90190,d5bfea81,84289a4f,a0cf498c,3a3084db,1d4a833f)\n,S(74af3ac2,60461898,c502229a,8eb4e7e0,962c8f38,897e43f,6e421ca3,3240b7db,72f03ec2,7c24abdc,dbc9af25,41e10f51,5e470c7b,19ab9680,24eecce0,954c84cb)\n,S(9aefb23,d88c5745,da9606e7,ce81d4f4,5a39c8d0,4f5d5f07,62653594,d3a34732,f797796e,5c1c0a56,9886af6b,fd8a8299,29ae1897,ca43314b,cb6ed78c,6c0b0572)\n,S(93a3da8b,1f686078,1849ca06,24c2cec1,796f64f8,4f46da9d,34766eb9,dfc1f018,e5c50d0,fe7d2f53,fe1053a2,985d2b15,25125981,30de3cce,2ebf300b,4b944c0)\n,S(ed8d18c3,f526a062,bd6095cc,249b7d10,ee09d072,435218be,f2ab6c90,c5ed66a6,42084909,f4bfb751,5ec6da47,2cba7678,7870a9fd,bfc86fba,669e31ff,233a72a2)\n,S(dba838ae,b57fad4a,6ecfae8a,acb50123,decb0f60,b702a9cf,7af7d78d,814845df,c3213cec,8f225c2b,fc02519f,dce1f67,5ad59b20,91381f0e,feef93b0,3c6536b8)\n,S(f1a033b8,64caff57,21857094,e1038fec,7879765a,3b977a4a,c6616162,68c1d8fe,9592b8b9,e4cc6a7,ce173980,e68fc405,88a83788,a08c6027,8623ef61,ba81b652)\n,S(53967cf9,7058ad43,1222e9a,46caeba2,d8fa447a,6b0295ab,f40b8aa1,af1f0097,e8e86c76,cef5299a,9a15a6d3,4985411f,2a71b8fc,99f7a76e,230052fd,d5309017)\n,S(2477d3a2,bc3fd88,6daba319,8c6fa6c9,5206bc1e,955e9d4a,c6e5916e,5883eae3,baddd174,ce70e285,1e7ed788,cb81cb7a,3402276e,d94e6e72,f20789bc,ec4f5257)\n,S(b483c05e,22824454,52f44e9e,287bc21a,634018f7,babd1252,d7a6bc70,24d9cdc7,5d7cd9d,23ad04b3,3a7ccdb0,38676342,5b2338bf,48d4f910,853e9100,e1f3aadb)\n,S(6ae41ce9,6c8f0a33,674f74a4,587db25f,7c368fa8,83abe414,a3f6bf13,840d46f8,d52f2dc7,d4fd791b,36e6448f,5c8f746,759e68ba,994de0d6,48c6b1b3,58476871)\n,S(bd1a4d61,e19ce013,d06740be,c3ad88fe,bc3b2391,45563be4,41768f01,45f4c450,88c18e77,c5313848,bd19bf27,374deffb,1f40e479,9687791e,675af225,1141fda3)\n,S(1d2fccee,47b4553b,215dd2c7,f26412d6,73319507,43136454,35426bc1,29b358d9,93e52147,c13791f6,aceab8dc,95df1637,83d985d8,3a4426d2,f825d126,e7b8c564)\n,S(322cdebe,5aef9ab,957b355c,e8e4fa7c,23f23f83,bf311785,f0fc40be,ce0f7453,2eb8c80e,561e419e,f898f772,12eccab6,e6c4ffc2,5daf67b8,47853a6e,8475d19e)\n,S(c7474f42,5491fe9d,51a9e00a,a42bc188,50d4fa36,c19d9869,6939962e,61e207b9,8dd394ad,799a69c8,da550741,7352e7a7,92a941d2,10b3f65,f634cdc3,1f42a875)\n,S(ac33b339,1bddf66a,6d04c62c,da618bc4,1ad217c9,7d37526a,38d12e28,9fa9dd30,602267b,59fe438f,ac57d14a,8dd3451f,acde0be6,c8984b58,7cfc1b24,34ed9688)\n,S(158e2a30,36f71701,2020f476,dd869974,66f157a2,27548e65,688ae79c,3bf8141b,fac16be0,6033e61,d34d1d,1e2c95ca,6109dfa3,64232edc,8f8f62d7,19ce6303)\n,S(88384c6,42d1bdcb,af5b472c,2f7a54b2,11ae4947,433d5d35,add21374,33ec4b78,3c3a484d,5b8793ae,203f90bb,476b4d25,773b268a,8e89dfb5,dcb17576,166b3e7c)\n,S(21e3c1d6,32299e3b,5da75f6e,7ffa2958,e5d686c2,6322491a,2597dd44,f6973d2,9866fc69,7b9399b7,4307b1ea,e27eda12,590bb138,b22485b9,de6e3cfd,8d23bba6)\n,S(abc484c2,6d06ec8,bba4170f,727055de,2611145c,8e4a33ea,56507b60,3477d319,4f92a638,17f6b635,d2d944a6,b9194d40,c4ab7041,2a8ccf05,e2fee038,58d87592)\n,S(7a98d6d0,202f4230,a12fe9d2,e321bc55,a3a3b35c,92443731,cc8112f0,579b08fa,bad00e1b,578de9d3,73f0ea77,85502035,c5a04c98,8904923b,f0059a3a,a8ec6285)\n,S(282e401f,57ef51d9,f9a10959,d272e0da,e9898f32,d2a3e059,4a65c901,cb1ae10f,6bb8b543,e9461164,a66d55a0,adc51ada,4ac311be,c6625276,5b2c1639,c803037b)\n,S(5259a2f8,3dacac1c,18a9a64,d9834c82,e862169c,7a1b9d24,2b521c4a,d7ec4274,196fac52,458c7d1c,3dfae8b8,2ca130ba,99d43a40,8bf41da7,d2e9d040,291f165b)\n,S(cbc4fdda,9ed1707b,59db2171,38e9bc1d,eda499c0,78f22c28,4309e184,cf906081,2929df0b,24074d42,75e8a861,8f064466,9ca0dd45,752c7d5c,8cf32661,f8a1ebe8)\n,S(96b294a7,ed8d4916,21f10b04,3c2a5ad8,88b92c76,3c93f375,f6d31d99,64b9cef8,f5502e33,f1416c8,77cf06f2,5752998d,a30ed434,365b8239,617ab3e1,65948a96)\n,S(287e1f0a,a510c8f6,273362d4,ff8d96f0,dd27113a,b45d0bf0,1af5d5,d24f5038,4b5ddc1d,6c9c4423,1f27ebde,bf4afa29,df337f18,2a2559b0,33de6830,cd7b9e14)\n,S(eed0e323,3475ee14,5160d4b7,49210f47,c58d7b26,95dc8036,eae0e6aa,91a545bf,22407aa5,430aa089,3f7218f,2ca23ea0,16eb04b3,3c967e6c,d4c68ad7,16e4378d)\n,S(1417cc87,72c932b2,b1116b4d,ab4e86a6,e7d80fc7,b082a6a4,c148c50d,177299a8,66e06245,56f09207,ab2d944d,167590d6,44afa2b7,b598b92b,65706271,d7b50e30)\n,S(af6029b8,93c549c7,3544e849,b01ff2d7,b991fb98,2b8a3baa,b9f1b8ed,2b24bc89,dea2973,a97bcb6d,3257121e,9233956d,43ea9155,8105559d,ae17db09,fbc14f2c)\n,S(dbb5544d,d28d2510,8a91dfa5,9a3c7538,1b4173c5,eecc8e18,b5065fd8,fa4fa570,4f84feee,755215e9,15abfbb,ff46eb6,9148efbf,39f69261,a9d2a345,3aaf1bd2)\n,S(50ee1b42,be9598e6,3fcb0467,18786633,18b550ec,16645f70,869b231b,674a1878,8f4fafc5,fb1e714d,f52c0a10,55016f9f,3ca57c9e,48fca138,68464b8d,70c6b2fe)\n,S(77b88613,4bcf9ab7,a1a6e0bc,82137906,d5c24607,a6d4812b,a6d1c8d9,55a5669f,2ffe0de,c5426e8c,92fc247f,a024f1e2,86668e7e,d7a24c33,2c887946,4cbfdfcf)\n,S(2bf83837,74a9b9d4,7acfa6cb,6010fd44,620f51c4,e076d5b7,e798edba,21d7fb8c,5f336533,5203a820,a9f75f58,61bf2d0b,fcad07ae,9e297433,79d22b3e,a75f40f7)\n,S(207b1218,9a6c2653,69f66738,b2e61d3a,c43cfedc,bd9f94fa,2b883991,ae69e350,c43b15c8,c08b4592,70c887dd,d15cbe95,d627a3e1,4a1c7afe,da2b0c69,549649c2)\n,S(5ec76ba9,63dbe3e1,d054ad89,7a00c7af,f60f043,d2472f6,d3369e87,45637cbc,b66d383a,c4ec579b,8350a1b0,b2751fdb,f2ab329f,6ad63cdb,d6d46e35,944009ae)\n,S(d010ddeb,3959bd8a,7a7ac178,ca573326,b578e940,b46f5808,12398722,42e13c94,2343d4e2,a380fc9f,617ed8b0,903b722b,a707c53d,a2140021,403ac617,d71fe37)\n,S(49157637,c5c47498,5590bdd0,e4a8cdb9,f9bfd422,99812950,9ed25a49,7dad0da4,2564d49e,5c53c818,770c8a36,6e92532b,59fb90ef,e7ff4dba,c6baedc6,b792eefa)\n,S(7e39cef2,8285f9ad,1b5ea712,78720954,f4933546,bcd7f9a,b4c7bcc7,54147a9f,6bbe4096,c4c107d1,c361befc,75916c87,6a2a0da5,dde637bf,1f125a21,5408e78c)\n,S(45457311,84171f1d,aa931d3c,16b9926,59357877,84a4655c,54822c9c,1685761a,a13710ad,597e7da8,f4b12c17,9afdc5e0,5fc4f05b,e204567,9314149,9c73b421)\n,S(c0bbe693,23e256fc,f69f0427,74c59091,287bc0be,82f0b5a5,6ea8f957,6d647d8b,c22981fc,6a015c20,525a0bf7,a9ba8ac6,dab6256d,d763614e,ea250c5f,fb433231)\n,S(bb224b39,ff7d27f8,1ba86e92,a6897776,85074fa5,48b5515,987df332,15dca58,73bbcc60,c3adbb94,651cb73b,b311f690,6995d611,8b8238c0,4519de94,1e6bd47a)\n,S(94489617,8b4bb641,9cdce312,5d863395,7ea54002,7f759e39,a8846551,ad3a0866,4a16c110,7730cd80,55fb7ddf,93c6deab,e3282da3,8a35d79b,3238e8ee,c8917935)\n,S(9ae267ae,a964e8de,68398609,d6351619,4019778b,2341696c,7e44f446,dc8fac38,6d175dce,e589920,851c02cc,3fe3dfee,e9398e53,7742249c,e2745713,fee236c3)\n,S(9e237d91,a6ce503a,65dafb47,a9fc5f7f,6dbcf3cb,b026ea73,68403187,d95afd67,64d491e6,df79eadc,74c198f6,fbdc481a,330d030f,851c7fc9,63974047,ddf2d12f)\n,S(a5c5e0d4,920f0e3e,6973b71b,90ae2b32,2fa16960,b850eefa,1e516b4c,37252d6c,1aae183c,52ba9f14,f06c57dc,b483ba6f,740d6bfa,7ebb72e8,266895c,e6f6551a)\n,S(a6d0cd83,9a198c9f,62bbefc4,b91b696b,57a4f876,6a16fac8,1131a9b1,1b36bc1,97981c96,9f758543,2c810b09,460c07f8,8520e78,3e68529d,7a1d3bbb,e0a86e85)\n,S(4a75be64,16d6a87d,49e393c8,a26467b9,4b43887f,a90a25bb,139626e8,58b122b6,ace3e92a,c693f8d4,210932c3,89d4275d,75a46c6f,a9a76358,39c26288,1b8f83ba)\n,S(1559a339,7f1e1195,51d8b4c0,fa53b5af,c693ab8f,843e6b00,1a6fc435,5967d7ee,8e450f28,78b2e9ea,829e965f,ae4484be,7e98f39b,a7b0ecaa,b777914b,848f324c)\n,S(33565a48,44d9b25c,109eb9f2,9546fd5a,3f30d4a6,157a4e69,6029420a,21f74deb,c8141513,c4e370e2,400b8df6,208e867d,9bcacdd,d87cd975,8f91913,3ba97557)\n,S(b49c8814,23db909f,c68c73ee,3995a7db,89e919f2,dc697855,357053a5,7ce26988,65878108,879801bb,ae412aff,72e83051,bb13c415,60499b94,8e0831d3,c2e11fb7)\n,S(3a9635b0,b82585d2,37068f72,76291c4f,cd3d211f,80fa7256,58e28dfe,920e3e93,a1711c74,ba4e1a1f,f0a9b6d2,12c8b995,7b6c8c0f,f71da246,154f13f4,719f0713)\n,S(ce6dc56e,6f5c496,71a900c1,ae531e3a,a8246877,98044497,fc543013,2572bff8,1af98ef7,3703f8a7,6fc88e9e,c9134aa8,a9e24326,314bf4d8,2a0c85ed,af291f8)\n,S(a945a79f,1627e79c,9ce1cc5b,79ad02b7,c07263a9,11f8f78a,ad314049,92bea11f,f41aa315,4049b7c8,c9bef95,f3462336,ccfadf0e,16c1f129,26a5c9e3,7a443bf5)\n,S(3debe447,a5f793d4,210e1607,642abdc3,c3a8d446,5a553a45,d73ede0f,20819dae,c0463782,dc5383b4,f7f81557,efddb90d,30138670,858c4197,5a47e6a5,565e339e)\n,S(dba32245,a37b5636,9d7120fb,a99880a5,aa590299,601c6cff,d33238a0,395f8d2f,d589ab1f,ff442551,12aa1283,3deb9b43,947059bc,9cb1b32,4d8a29e1,1da82b2e)\n,S(9c52bd5d,1fd61e1f,8e75f23f,f6e8baea,a8b7b5e1,5e780870,ea9f8dea,2b75cd56,e6d0a620,c116a7d2,2b2f797c,da7119be,556cd834,caab1007,e9a8ac02,f8945859)\n,S(1ec28a0f,24e8910a,85f3c583,415afad6,dc5e10be,cc600749,8cbb40ea,b80fd383,c616ac82,bc6aa8b7,1a3cf89c,b82d7e9d,ddb95761,dd64da13,290f6bd4,a4ff907c)\n,S(4fcefc4f,134d223b,994c1274,bd39655,878a35fc,2f50e405,ce11c76,1a6833c6,50c62036,fa49f62f,ab1781da,ec17a13c,4ec82c57,7993fd20,c5c56d70,145c2a54)\n,S(85481ce2,90bb32a6,eb0fcfb6,9cb9fdda,580d8808,5b09611d,2d8747f6,ca657e20,ad2f9361,85aea05b,6a0d20db,9b6620ee,ee718c2b,2ae1810,42f6bf1a,2b3a2453)\n,S(11aa1424,7760f682,3c11cf4f,12c013f9,7b1c9eaa,5ff0a504,334d2e41,f5daebfe,dda53fb7,b09620c8,fbcdf9b6,605710aa,f807dad5,c7ee4e9f,c7dc9c34,23302646)\n,S(908c4f4a,15c58b2c,a0512eb6,b07c67d6,5b08b99c,13d22358,a52bbe24,b3823dc0,5e708db1,d4b37459,e33db06e,21a45fa6,5dd5c959,22ee7b60,7162a77,d89fc674)\n,S(d192c334,65630164,2edf01aa,d974fb7d,af13ce8b,2c8975c6,ddde145c,1a2784c9,96bf7877,ced69d6a,a71f0908,86e2dc9c,f6529297,a2f8500d,d683b6a7,ebe4504b)\n,S(8fa0f7a1,97138152,75f6c886,245902ef,b6e57515,c28732fe,d49b7f57,c19c6b9b,c09b428a,e54fe6d2,effdb332,4b1fc1e1,11aaf4dc,965b72c5,f97a8a97,18fdb68b)\n,S(e53249d5,4d80b59,31d40779,4c550ff5,d6cfc715,13e0f419,4d7b42e0,62e74681,face5c4e,f404cf9a,275846b,11339448,d9133e1b,470489ba,64c190e0,b73735d0)\n,S(9a1c943e,7f7178dc,c4453de2,d578c4e6,ab80d538,70c03001,a7a4d5d6,fabca0de,6ae6fb2a,1a7d87c0,99f6eef5,dea6a53b,a296824b,d8ab0848,b44d1216,c2c0789c)\n,S(f0d4f862,dd60a74b,e06c9478,1b14b9db,af5847f0,baa00a97,72b61857,bb3d192c,6f48f413,90f9cdb9,edffe12,859b82ff,f8f7b32b,b655f3af,f28175c0,8f1efd8)\n,S(1f474fc9,f6ee1699,7a7f37b5,f10f1d02,f2445e12,ae17324e,cd31d2e,c6fb8e1,cbb396e0,4b754b24,3dd587a7,d71eb673,c41b0fb6,329013a6,8ba95dff,c6d0d9c4)\n,S(dd871b68,1cf78706,61bd7b4d,1ab259a2,1636cedf,39ac276d,5d36f086,fc9ad4d3,89456fa8,cce6295e,56cd18f5,9d9b83a6,4e4983ca,b55d425d,730726ef,12958dc7)\n,S(5223e3b8,3809df92,8db9f4fc,d2b81408,96ed1b89,e6480fe,8a6b815b,bc7a33a5,95b640ed,128da08e,a10148d9,6f53b9ce,e53077e4,64eac3ca,1f604225,75b12182)\n,S(65f26a8c,88fed562,12f11676,e2f237d,b4c500e4,a4ee0715,ae2e332d,74c48815,78df921c,545b864d,7ebe6c36,bedd987c,51ac9d73,795b3c8a,2a125d2f,2fb8cbd2)\n,S(b62376f4,bd858d69,dc5d2757,b67dfdf7,1d3f770f,e96a0dce,3c61fcad,ed0e2586,c58d5af0,d669832f,4ff38f98,298e9240,c6202343,4e829b0d,145093ac,9ef023f0)\n,S(a3297102,6001a6ab,ac0e84c,bfc4c829,4c607d6,c2147833,b1f726,752ddf07,b2c820e9,35502858,eea3b657,c15173fb,d1d45454,3c4fa17a,591a20d1,802d5c65)\n,S(3b6e214,94773849,46056d4a,dec9e5c6,86f9873d,76accfa4,b4a377ec,84081339,d7e8ac79,e03d1cd1,7c83ad60,6a140b26,dfe67ed1,254a46e2,9c527cfd,c6afdf96)\n,S(ff6aaeab,11cd4c80,ea69c3c,a10f09a4,40b3e51,abf56ee7,2c337414,f3220264,71d8a65d,7a605e01,852f0fcb,1bccfef9,147007f5,7c6b83d0,ef127b0,fe90bdf9)\n,S(a0800062,64942e,b9bc70b9,f40bcc7b,52c0d43a,b4d608b4,ff65d73d,75fd4a87,de229122,80c1d66b,364fc250,5b3020dd,1482e43e,c4e67ad2,f2e49ca7,df9659b7)\n,S(7c2b8b50,7e2256da,15afa166,84dcb7e7,c437b925,6c042450,6025a551,cafadd5c,747b5b36,e247939,7dd719aa,6ce55c0a,218312b7,26adf84d,eb7e3820,57a0b375)\n,S(631c89e9,ee8a3192,c593ef08,baf3fc1e,d30a47e4,6a4ee9b7,e1c6cf5f,d6a0a5e5,8d49bbec,85a5245d,ecf6b084,fc65c697,190f8220,cbb84525,a344263c,ae10e2af)\n,S(7ee8cbf4,a0b12cb9,d598835,bcf13fed,72e441e3,bc4b515,4182cf7b,f2818b3c,ea3b208e,70542467,a1e09248,8f34b44c,3821f0dc,169c6037,a7299ecb,25111774)\n,S(69c085e5,86fad3f9,7b94d5b4,63b937be,5a95905f,eb33b25e,11ef9e8d,6b5ab3c4,5badd881,779a04f1,3a7333f2,dfcd0fb3,6167d168,b86b6a8,27640559,6e5510c2)\n,S(951c09f5,563288a4,e25284a5,a694aebc,1e4b3d45,db0f0ef5,86ce87ed,237aa05f,a0c2704a,fddd2f24,462ac715,cca72894,7de034a9,2c958111,3f55c58d,83911c24)\n,S(ba30b632,6ad18aae,6d87a1c4,6af749e4,6d639106,76f25f8a,673d0249,5e813e42,6c174bd6,3def5d0,2ce342b,1d0f895c,ef792f42,a97768b0,d091a92b,14f5192e)\n,S(53a1d69b,77ee7d09,f9530860,31e93038,42daf062,c1ec9f19,1328b346,559fea0a,baea6eed,b33605f7,4bdac4e,749650a7,256bf215,737d1081,2c805ed5,298de5b6)\n,S(23635f56,f8122da0,91d7e3a0,1125b99,a0f87e98,a717dbe1,f6d9528e,82f9b4ae,1a326517,904ad591,43f0f733,8c98f11c,2ea0fc9b,54e9eeb8,c41e469d,ef0ed297)\n,S(c574946f,79574d9a,32c588bb,5cd8fee5,dc60403e,81b11fad,cafc69be,67c0eb67,d2598c1a,8568e4bd,a477d9d9,909b083d,f55a7116,9ccddf5b,666a8b61,96e2f73c)\n,S(966bbcbb,4d397eb1,91ea2ecc,871fb24,b0c47469,33df7b03,124408fe,583db143,11741ab6,a38217c,e55bba9f,1c7f41cb,2e69e54a,8a78cf02,60bd3d2b,22789b8f)\n,S(6ebbecdf,69e6e137,ad70cfd1,741ed404,4b3620ff,15a07f8a,769edc8f,c1aa1667,2ac87d70,baa106f3,a3490b56,a5960f64,fd80160,d0c14d64,ca1d40c5,f244c57)\n,S(815f7f47,8609fee,733b7239,b272afdd,89c2f984,5da8186f,4ee8be2e,2e3e73ce,a972e06b,388be908,86c1e324,e1d2b953,18e99ef3,c0120906,f1508732,f839b930)\n,S(24799358,53364be7,4675e3e3,c141e64a,febf3a04,386fa41e,f19696bc,5d3253bb,d6233c69,ec254367,673bedc7,1319641b,f9c029a7,2523f8ba,39dc375a,df245804)\n,S(db32eded,dc803ff,d5a1f3e7,8437efbe,8c098fd8,e05f2aaa,c03e0daf,50ba5622,30ceea35,22ba7bbf,2ffe9c1f,bb817fb0,748efb45,65d01eda,9f9cff5c,b5afdad9)\n,S(c5fb9cd8,8408cd00,33592de0,e602ad35,74e873be,4442d0bf,fe3bf837,51601689,a604a6eb,85233ccf,ef57fe7f,8a73c430,10e94b8c,4189225b,fe97637f,e7b97935)\n,S(7b74932c,71dc26be,429f53eb,efc29905,bdf088a3,f2cf4bb,9828b701,11798163,e07d2133,c628a82e,4a22f58d,710b7d88,892cb999,2f921c28,3772310,c72909ff)\n,S(308a025,4f659ac0,7c4e0850,738a2f16,df89ca15,fd64b35f,8f968413,b00b2819,4b4758f4,1eab6491,a8b50fc5,17f7767b,add40ea1,7b1272d4,1b1adf09,5d33c990)\n,S(26a78f16,95b595f,63ff1b4c,cd52acca,ae650319,e67554b3,a77f85a3,637fa8ec,3db38db3,ca1e5dec,c73f2192,c4af6ff,66842a38,c76d62c7,c5958fcb,67f38097)\n,S(bc440e62,f8524e7b,aef0af7,38e60a61,b213ab6e,713fa9c7,66d28785,891f15ec,175add64,8d472b3f,1547970c,6de2a57b,d2d3833d,2e847810,253b3712,f4d740aa)\n,S(f2300d54,ebe04aeb,7a9409c4,3f2bce46,72d9937f,cf7e2a86,c4e8d55a,ef2a4e26,59e0e44b,9e090bfa,5291f436,6a3a5336,a56dbc96,65ae1aeb,e71e8c7d,e2fe77af)\n,S(4d34ac85,c64d7d4d,97d40331,3fc19118,ddf31d19,18196594,d2f7a08c,db951c1a,551b6581,e6a1949a,4bbc211f,30fea215,5da8389,a69f6681,96f947e5,f7c8f7f4)\n,S(53c3e6f0,fa2795a,adab1a45,a0f30f00,5f0310e,2f989d7f,d1f4504e,d03f2c04,12b382e9,b867a8c8,55461627,b7996676,880784b0,19690280,e709e91d,93048a32)\n,S(259b0a65,79eced6b,2dcaa804,ff86122a,24e0d338,165a3013,9ab59f30,343f9ed3,27195af8,5217e109,33e2e1ba,57ebe333,9910c84,9b4e8f6c,af5700bf,93395635)\n,S(fe07b39c,f9bd07e7,980b45c2,bd791e14,450eadeb,f6c41206,e73c101d,51093908,a8e47a5e,7a7cd98f,4f5e0afb,b5cccf03,56491271,c85fe0e4,9ae12558,721c66fe)\n,S(7f38bd5a,87e2ebd4,526bfa35,5ced4f47,87c404c7,74e7f481,85d40d10,894210a1,4073ed4,cc499ca9,e7f8ff5c,f91f9c4b,782b6e6,f6225edd,d6f69fa8,b0b7fdd2)\n,S(8796a424,9a251ecc,c0b3b44a,37edd05b,e34efda1,20926343,3a099e7b,8ae40a82,c02ec680,2860ecd8,f6ac62e2,845e8470,ff60cc55,10bf0179,49f95517,c1dd25d5)\n,S(cadcc04b,9d4d8e5,22c153bb,def50fc,941cf94f,bb3b254,61422a4,7e6891b0,4ea1718a,53d64935,ff01f0c3,37ed2b7e,a31f9a15,edbbb60d,bceef362,8a454259)\n,S(f2e614fb,346faa61,ec752d79,f9518b1f,e8f535bf,75496cca,513fa961,77f571a,1831227a,b5a35867,82b30fe4,720d2467,68f8c358,8472100e,fea76526,4581fa0)\n,S(cb10686b,d361e64e,d82d6aab,5373f62d,b165d3a1,30bc7022,cb3f37ab,d61adff1,d969d37d,9c3db8d4,2c60a24f,44abdf65,b19fc6f7,56a452d6,7ef1b099,613019d2)\n,S(6e903855,15042422,cc16d104,962352f0,2e86847c,f816468d,5754c70,fbc6d3cd,cc49058,80b7c15f,6f718ff0,ec2d8544,62e636c4,3e20dbdc,ee318a87,2d52d9fa)\n,S(2c0a40ca,38f70b73,ef4da636,185c8260,e50643ff,9b5a83a0,fc0d410f,5526ac12,3f1eda92,8c32cf57,64d768ef,7a6afeb3,89dba8b7,e5bbe5d5,29b50410,5136ab15)\n,S(1da89240,4f7ac31,136097f3,ed3055ea,d700aac5,a87ad4c5,49246211,f0ab0d0,e20f1baa,6ca3514e,ed4ceba5,9afe1875,c717597a,b7dd3c37,6d638e,287bd49b)\n,S(5113fec4,172e4cf4,4eb27c6e,932e1d93,f16b3ec5,8c791b3c,e22c9bb3,634f76cb,7b129bae,b450023b,ebf81c01,bcd486a9,b494884f,b005b2e9,48eceeae,a6911760)\n,S(a8d236b7,bff53a1a,fe23dd5d,63433dd0,a267e05f,31bce172,f80c5d65,c24373c9,698101e4,33e8a6cc,45b07552,7aa4ffae,3714324f,d5da0ff6,4fbc7123,773dde9a)\n,S(79b2cfbc,b5a0c79b,d2ba680f,a1b594ef,4b2869da,3baba7b2,81cbf373,9d6f89b6,df45bb38,a21f4838,9e9eec46,f34eb6a9,78967e6c,5d181a92,e989e275,45756aaf)\n,S(ba0eca95,4ec16133,1245f4fe,d70b725b,97393053,84fb962b,d1a0a014,cc403bdd,7bb5626d,2ee7d5fb,ad9cb623,7ba48440,26cbc27d,651811f3,92682622,2df76258)\n,S(69609368,c01a1920,d3f62310,311cb7d9,cfca4659,1f53fc31,1f0af251,1f99fcc7,73ee24fd,32b08bef,f4254bf4,51614b2b,c0269e59,c6caf25b,bedb4919,76186894)\n,S(c0b4d69b,d2344ab6,df9d8427,d480296f,5e0333a6,4a447302,5eac698b,e916f676,817dd44c,49b24aaf,627620c,ff7bb843,a84c7eb3,cc7e77c4,f65ba06a,14abd07a)\n,S(80fd0f21,435d42a3,5ba377d4,e2401afc,dec30b21,db770277,fbab9841,3c5d9f9c,502f305a,a3350f4f,50d418d4,9b19768e,4976020d,8e158f2a,6cada628,e79953fe)\n,S(7e18fb26,a881189,e3862fe0,9006e1a5,e07aa6b,39a5ef66,4f52547e,1cd7ebcb,dac9006,d99e8a47,d3c5539a,508f3f41,c649d475,4a53fc43,2dace107,1112ca84)\n,S(a5b8503e,3f7c067e,628e5f5a,e65a0891,74385de9,69049aaa,26df1906,ed85af56,e9cc7458,fda4c95b,6b502498,95f4bdfa,ad9ed7d,346609ee,6549fa16,6e98dd1d)\n,S(d93f866,450f7693,689bc9a4,644b52a9,3d006ced,d284332,4dac7fc0,bc6ff548,94c7526a,14b30b8c,b5a2b33f,c6508dce,fa141bbe,b6aba116,cf3cc169,ca094b08)\n,S(424ec330,e4f5dff4,31ce33ed,1ef8293b,b8cdd070,12b5b18a,67b3f4c4,d766bae3,94f29933,fc5ee8a9,27295c4d,8d28b3a3,67c60d6b,13247616,a4dcab96,b58e2dd0)\n,S(58805d5b,10cf81e5,b114c372,69dd5dff,cdf7e153,370a8305,bcba9d3b,7ebfe952,15e7b2cc,3ab0ab9e,a36df4bd,ce66bf72,8c45e295,d4a6c94b,e366f86a,ab39df5d)\n,S(dab0c80c,a05aa70a,e626f81d,7b85c06f,b418ca69,8067b9fd,83cc6e0d,6a3949e8,4c728c4c,527f9839,498aff2b,91e8a344,aedb11cf,7ab9486c,ab3c7014,3dde8e3)\n,S(55b54261,cd493b2d,7dd46f1c,78ad3983,787a37e7,ad8092d8,5cd6a55a,b870e09b,bee36be0,1168a67c,13faf147,6a614b6c,bf7b149b,4600c93e,4ec199e0,9f7fc63a)\n,S(ea4f2da7,a5cec770,d986ba06,b1f18ec2,b3907a44,47fa2bef,4c9fbc10,d92afd4e,18f9565a,41583c3b,f7015986,ca7c94c7,4222b81a,9ac26eec,e7954baf,cb470072)\n,S(5d835d26,54e489c3,d726f54,bc06ee3f,11390023,fb8d16,61f76b2c,29cfb78e,83091f39,9d1bfaf5,216add5f,dd4d60a3,469aaf82,ca6bf5e4,1070c03f,792dcb2e)\n,S(f5efa7d1,484fe717,428e9f54,88c12db1,c775073e,27d028bf,7def8c3f,4f558774,1139d67,793faccc,70c7f48f,c892c314,988d4767,b9d6fa2a,2f2b632f,367453a4)\n,S(132950c1,6f24a24f,a907cc59,704692ed,b6a5d254,79dea8d8,38cd71a2,a5d6542,b1e87d14,db8725f4,e2c2522e,c2f3f290,11d664f0,e6e85368,6c142c3,bfefd736)\n,S(e479b0c5,478e49b2,c9e211c0,8e610b4c,1f1917fe,5960ba35,9af83c9b,4640d05,66ab2af5,3ffbfca,fdceb064,452c8ab4,b112ed68,8bafed44,1b66ef80,92144364)\n,S(41b8288c,19cfecba,562b30e4,93a4c796,dc3adc21,f0c7a9d1,6adf4459,375edc5a,3ae93bec,6f438174,b3956d57,d9dcf29a,d673f6ca,74c96120,c22018dc,fea42398)\n,S(56696d31,6d3cb87a,a3eb312e,1cd41768,2d0183f3,b91f605b,c4389d59,d86052e4,5e96c041,e495e90e,2812c09e,81d431c4,eca7274a,2204cb,a3a00a0e,650c6b21)\n,S(ea36425,bc35c1f2,f0d96a49,ce4f4446,72848c5b,ec47d7df,6ac5cc30,d3968ebe,b00381cd,a5c19740,a266e63d,d59fea3b,d3d3d3eb,c899bf9b,da8090f8,1eea766b)\n,S(84463c57,b01dd5c9,b98e0e4,38e221af,58c0e077,20540b7,da0b4d89,b3c36502,deb3a24f,9a0305e8,812fbaa2,f81e5fea,fd24c375,6a529c3c,c2bf4aa3,8d87b30b)\n,S(13a22d5b,d23428f9,912df3be,eb82f4b,411fb39b,1604fa7d,4db63862,293c2310,99a19b77,c6912900,1047d70b,7e84ed80,a8427709,67384cbc,da11a158,6ddfb1db)\n,S(de017231,52bdadcd,21b028b,4cee806b,89e98728,f91784d3,a418d7b1,22aaeb57,7ac0a9cf,15ff4a0c,f7d8a0e9,d2fe1469,1a08d526,7e3475a9,381be3bc,64771e65)\n,S(1fc63549,9d462327,afc13d0c,eecddb5e,e99bb085,55076d88,7c064e8e,e40396dc,841f309,e47fb335,d2691c43,248a151b,426f1205,ccba170c,7c644615,54258a55)\n,S(323e5acb,f821f131,7ff1dddc,822cba0a,b3b2380c,ea2f1b76,903c906d,83491dda,afc25ce3,b13cad24,6f6d9a2f,71e97d1e,e31bd2b5,967a5cc,7ebb1caa,adc7ee)\n,S(57b1ec40,5c187317,ff9e70dd,2fd0eca8,cf2b94f0,3d7737ac,dd1468ab,61f56384,247e6f6d,7e2e70ab,a8d50794,36b1f6a0,b27865ac,791d1f08,c334013a,4ed93386)\n,S(d6f5f80f,80586e87,5cd322f5,7836327e,225aceb5,6d8a83b1,6cf3bd12,4b581074,e925199,b597c7a0,a179cf34,519ca3a,f35b6d9b,24d76118,ace70f99,f1932979)\n,S(2fef6c2f,eaa8c4e7,1cd31179,e0bfaa85,95d26471,fc36be60,1df75cd9,94e73c02,eedc9575,5bbca159,2271bcdf,d9ec8bc3,466e4b77,36d28abd,e6d68ff9,b9820f06)\n,S(e488b041,358bf98b,11cd31a7,77a7d93d,e9cb3a61,c49fbafc,4bdabcdd,7b895964,755147d5,ba8f1d44,4ed0eeb3,d072c11d,f448c132,b9e06f4d,66f92ab3,7114a1b5)\n,S(ba2591b6,35e7747f,20553589,11e7165e,618b6150,222a70ab,afa66bc9,a931cf35,3c60585,b16b1d07,7bd578f1,85e76bf6,77ff788e,a9b2caee,6c64ef9b,143ef487)\n,S(ff4b12b3,cb0ec8d1,750c648d,6ed2695e,a41f8e82,58ba8b16,bf4727ba,6120ccf4,e2cbc52b,f0031efa,74c1fc8d,25466888,41c695d2,393e19e7,287bb34f,afb689ec)\n,S(9e42cb1c,aaac0c62,47e4028d,501c84ba,6279b39,dd17424,73c2cd10,9bd36063,c9d0d646,381ca19d,528d2ff2,b04aaefd,9f8095a6,8811f8e3,e85b5ff1,5a5da5f)\n,S(610e8f14,eb180ac5,ee435530,812941e3,ed7dad5f,c7bc7924,10f296e2,449fe005,67632a19,b1567d77,b0b5f013,77c6a05e,9261ca50,d010340a,968d8507,877fd4d4)\n,S(f4c4230,443f3324,7be7bd5e,5cc12a0,27f0ff23,ede41c44,beacedd0,64789752,55d7b7c6,866f6bfd,29a410e9,8d5d5e21,98719d60,93e2bafa,697a8b5f,734d8bb8)\n,S(66221ff,1d344797,1f308b89,a26e993e,c4d1c05,2c2fa436,3729c9aa,8c9dad0d,c0c78a0f,be8ba04a,932a7d6d,604f0fac,4ee01452,fef801d,36d3ca93,c4b7a965)\n,S(c3ea4e8d,f8ac15b2,1dd251f9,7ebd19ca,2d91e97e,b13085fa,98294915,6aecfcf3,a7286bd0,3bc8f0bb,a3d28b6f,c513c4d0,472225b7,aab70f62,18c1a735,b31f1547)\n,S(762ea616,8b3056b9,da318ef7,53ae0cb4,ff57eb15,8fff58ec,7e4fca2c,b605a49b,195d761e,9caa7603,ff1b5ab9,85d4bdb9,d128ba93,33d6cd94,f00c62f2,9452c8e1)\n,S(50cbfa1c,f9a07c2b,42783077,8cae738c,3c3a0d5,617b8c6b,81914720,25712a6a,40a37fbf,97da5646,a653ec25,eeef583e,15cc1db,5bee9ebf,addf9706,cb14e689)\n,S(bb8b806c,6798d001,f0d6b31d,1b17cf31,7a5422d4,3a906a79,294e5243,e22ae3ba,46b763df,b7a7a967,75b6b3ac,d21cfa37,a187ab39,99506c99,31623acb,841d4dd3)\n,S(5491fa1d,88f0c9f3,6d87e074,331a9a6d,c17a5f63,b1e3326,500a5bba,1f0081d2,6c206f15,7dfb29d0,3b0e5878,57d1abb3,5f18b260,45c58da,87e8c128,7f699a83)\n,S(c9d2726f,5ce823a3,ce02ee66,262d0673,f04ee272,dbc16cc0,27068850,cf472435,ff62f77e,60de3ae1,52c7f943,c3eed295,fe6a7aaf,8e6ba0df,bb60a8a2,b6081aef)\n,S(a0d934b4,68151a34,cea5ff0b,d002dfb0,ec51df7d,ca5afd35,56acd53e,39515256,2f27f413,ac43711d,fc69e5af,785546f5,8e0da1d0,c9e89271,c8933b21,5998a999)\n,S(342b7a8d,a3664884,1d8198dc,5e17b669,f4e602bd,5dfb28f0,95b7751e,4ce8602e,cf36fd4b,24cc36a2,806f8926,db6951a4,4c545076,70ee674e,8e2fefb7,e33f65f0)\n,S(1f0993db,1084fdf2,6b2fbcfc,cf0c8a24,124c2474,92acbcb9,6221b788,18542b87,fbf92437,f6feeffa,4e04267a,c8dc57d0,c6d521b0,2631c20f,876fd9f8,b00793a8)\n,S(f8f4034b,d7fcc9b4,256433c0,c2b40f9b,2f45a117,3a371707,f6ebec47,e456d9aa,cd895dbe,d97ab95c,b3c98512,c46a538f,385b9b26,5438f7f9,8caa245c,c680f54c)\n,S(c80f3bbe,d409d5a8,cc0502ec,d7d95d8b,69067e61,fd2e8f7d,45f06ba6,7db89a33,dc803aae,6b936dc7,27773f6e,17c5d2d,af87a1f9,464320c5,4fd0cdd6,d7ef5c1a)\n,S(b19fd3c7,8ee32a3e,dba4d6db,bb1464b8,5b3a5865,7f0c06f8,31af5b39,de2b436e,242c72a1,91f17614,8ee25c12,e0f8d4ad,52837a48,9b94b16c,27c8053,43c8e523)\n,S(c88c52f8,a658160c,b10614bf,c744f668,ac46b774,94592a1b,99562a6e,e6482099,5a2f3a43,bfa6873e,7a198ad5,4fc0e3cb,2047f268,6396231a,a158a5eb,f4aa3170)\n,S(b5f02d99,8f8f1c5a,8c8995b0,6879c804,1dca6f17,3666613c,efdbb82,820164e0,8e39ef2,207f5d31,2e36ce55,3569d2d7,2204a9f2,500ccff8,50bb67d0,a0802585)\n,S(4d4e728b,5da0713c,18fdde5b,290d24ae,f7150d42,f9e5625e,f05bd17b,124f8302,be413caa,b7c77064,91110243,a20545f,8f9e5357,49ce98d5,cdb41384,5471bb5c)\n,S(92832d03,32f7ebae,b67701ca,a0a2bfc2,b36b6403,742f4ff5,ff2ae46c,242dd226,cacf8955,92bc2fd2,90dc5b5f,b4185159,3e4a6a0,709a51f7,32e8c554,7cdc4114)\n,S(2807a982,b4fc3fc0,8908fc5e,b3734a83,b2e2035d,8c6e3036,b16f9ac2,f4bba58a,ddbb9f8,3a9a6ae0,9945ebfa,9cb7e7a8,49798032,8545379,df582f93,72cea69e)\n,S(e755ddd9,139cc4fc,b266477d,645b4efb,b02088da,752d10af,aee5ff8a,45df9659,fa7daf3d,605846c6,35e2534d,746873ab,cd502ee4,27e62c45,ef66401b,c816beae)\n,S(93c33dc5,152a9bf8,31c3cf7e,ea833ca0,485f852d,52a255f3,55d7e67a,c1964f63,4a3a36df,13c8cde5,48feb589,dc56eb16,9a874272,c7a0becd,d40554db,cf4d8f63)\n,S(70d66e2c,8f934356,d6720d9b,4809b984,6c7ab1c4,f8604990,d2e559b,a59c24c,24e8b668,4ee0062d,7bd79b3a,c96e0316,dcbffe2c,973ff6bf,e99590fa,192603e8)\n,S(c165111e,fc2d7105,f6bde2aa,7f682287,2d803fa2,ec904380,27195cc,147904d2,c71184de,f408b79f,32086d4b,2b0e5d95,aed6e0e0,eb99bfb2,7e917abb,8d3a5e74)\n,S(12144a63,67cc355e,e75486,357b0c79,ff4fe703,57a2f89f,3e3f7e20,ef860204,f2bb05e6,e55171c,c839fdb1,2b49ba11,dfd53af1,7a5a9602,4327f93,940b8491)\n,S(3179dfa8,bd134725,3988033e,70f806de,fde9c6c7,aa4a6d43,a5cf110d,6fda7828,3133a35a,ffd1f24f,579fb314,2e72590e,475e931e,8766d462,842972cd,70e49344)\n,S(51fe3e70,e5f21b21,1cae97a9,d0fa49bd,166dac17,5087ac3,a93219bf,d17ee77f,f3309396,5677c691,2a987cc1,5b3f016a,4efc22c7,6f89f562,4830f09,a9fc9bd1)\n,S(2d7c98c,a224ebd2,a5167017,88018bf2,1f29444b,6eeead79,dfd9e503,7fe1680e,abae552b,bbeb09d9,dc82af6a,eea16d50,613c9314,be23eb79,d254a16c,decdc02a)\n,S(c356823a,37dc335a,918a5553,bb0dfb9c,704ba647,d6cef22c,1e71bc9b,dedaa333,d8715c0c,a0ebf8be,d79ea3d0,85a70d2b,b40efecf,7dded60e,13d0577,cc235e3d)\n,S(91af0d4a,56a75616,e9cb1351,4ca27ef1,b7411d9e,5991be14,c1658450,71a2b3f,f6c845a8,76657a63,ed37bd33,46ca60ef,a8fd151c,24a9e35c,5893f969,2580e26)\n,S(6a32ae36,93ee1e7b,77fe8418,7266e6c5,cb41c7a7,37351cea,987a4f80,a26cbe00,2816504,dc3efca2,67e4bba2,5d4c9dbb,e8622e99,4a712503,37320925,ed5f64db)\n,S(5851d327,5e18fb4d,79292e6e,2bd6bf29,b6301e08,7b418ac1,43afdf70,7d880901,1e17a9c3,dfa8c3e6,c1e9c34a,785321a6,e58d8024,c61cd02a,8b83ad41,a2366211)\n,S(233a98a8,9fec3399,f74d99cd,7d5d4894,1be8274d,8f7ecfa1,f4f3693a,fb26a654,e9d5a9ee,fa5e6cbf,9ffe590,bd7db1fb,b9e08125,93f42238,65298e9,eb42d7fd)\n,S(8751bf4a,9676e2f9,5036c3ea,97749d8f,f452f67,cd1259c8,4c39e8de,9cf796c9,4f883d63,bfb0a01b,e26b31b,53ed8755,49ed6c1e,4b67a160,7fb68be1,7b845711)\n,S(a21126cf,7330697d,714be16f,27986c9d,cca4a0f0,3a12b6a,d54ef31e,d7a3dc23,3b0e984f,565d9825,2c523913,d2d90a26,b47973a4,8d8669f6,8dcb4c62,399b9777)\n,S(8123c441,96d17ce1,c6c1a9d6,2aaecfb4,cdde74b9,317599ea,450e62f1,5639c3e4,406c585b,c9aee3ea,dedc117e,d58b1c3f,db5846cb,6eb11592,469bf958,6872b068)\n,S(6f8e1a45,c18ebfce,2e2f710,efbd7ffb,4f107a32,fa6a46a4,caaf8ee2,37a22805,b36a7c4d,712315f9,a89b5ac2,8d1a5d55,5ead81,d7c43b8,8155eee2,b3ba8d3b)\n,S(51db2e94,7e75c9d5,4ea07ea3,35942071,5987090d,b81c3b99,40b85684,2b0f0bcf,70967acd,454e6ce8,ad015f45,e0578940,c95dd818,70268d0b,9782a595,9a1462d4)\n,S(84e0b0fd,b16e03c2,cae53675,4eb3452c,86ef07a1,ba278abc,d5aeed37,f71a3151,5a8e435b,53a4b51e,2ea659b7,1f3371ea,dfb28579,8b062eda,300664b6,d3b204ed)\n,S(ced68408,c2b01401,fc039059,5140ab68,14142b7e,d69a64bb,e6ec5d85,be833367,76ce2478,28d2581f,6779f723,327fa83c,8cb10451,fc34625b,d069885,3cfad07c)\n,S(8d860f70,a32921af,6376c310,bf5093e0,572e9b3,44e9204d,f5487554,c4f5484c,6dd24078,cb9f8ea0,eeaa4f4,3f3cf99c,890966c,5da8fe0f,9cd70128,88907cfa)\n,S(6223ee77,4e56b9e3,da6e008a,eb3ba06a,40bafa1e,84383ff5,65f98286,d9095d37,ebcec7ec,f750cde,9ff7972d,172340c3,c324d843,f31db269,c3f35a62,c5f15f36)\n,S(326943a5,5e7b7ca6,951a78dd,afd00e10,c8ca7f6f,3c01a038,ffc4fc7a,20fe2c63,b3bc5a8b,c87ba023,ee22bb4d,3f92cd81,787f2af2,4ecaebe2,67fe0a86,21c5d201)\n,S(f69b5d4a,eb0b550f,851f601c,92698789,f9f94821,47a0ade8,c8a19fe0,5742731f,2a74e8bd,94469645,c8a328b4,24975dc4,93adc83e,4baddba,6c41e10,3b58e90c)\n,S(f69a5a88,b8f13bef,a987194d,6b00a79b,7e576749,3d180fe0,32a1868a,26d853ba,6eb589cc,9c51900e,a6d99110,206f60dd,cbdc368f,5ae8dd48,cea05218,3415cbfa)\n,S(c00ffc9d,8a57cfcf,9624a812,dd2181f7,195f459c,3b858a19,864393bb,1d1a269e,3097e10a,d6abfc0a,3fa039fe,952034e7,6bda4fc5,c5614092,b124ee3b,bf55f87a)\n,S(9c021c49,d6671103,cfddcc3d,8e54848a,addfefa1,d6de5455,e5bda021,126dd183,4fa1ad18,81362f4f,f0587b52,a7a1b483,2d14127,434ffc4,c5bb90e4,fce50834)\n,S(59aae0a2,923bc36a,1a5bc8cb,ea5bbbc8,b34f1504,4671a046,eb3090ed,3f4b2345,659f89e0,faa1577e,36175240,2cf1736,a18b070e,4d4b0fae,9ed08297,362cb246)\n,S(7ba1ee89,479254b1,f32e9e53,517f0961,79d17d81,3ab3666a,75d4bf7a,7113f252,6530b40b,7e66a084,97168778,61cffd96,5eb71e62,e8b0ad7a,7d2851aa,15a26dd8)\n,S(4b0e5728,cef356a5,c6d08616,47c268b4,c8a12d8e,89c2da7b,78e9db87,7b606719,235ec085,a1f3651,11b5f03d,7237dcf3,d70e851a,6dab8446,10e45fa,2996e70b)\n,S(54285c70,315d9a43,a040bd05,70c35713,68504efb,fd103098,79067d6e,765d4499,de233654,e7c05b5e,f144d25c,6d539157,51e83ce,7f88dedb,7fbef11f,d6acadb6)\n,S(ae15f764,d20e4eba,b95c3463,402a2159,fcd21daf,fa831b3c,e47bec08,9bd43da8,474c4cb8,afeba9e9,3f1d0a2d,28911298,939328e,5e364d44,68c64cf4,fec2eb78)\n,S(6de8743a,68c42b81,ad069f2b,fc1482c0,204640f7,74515924,441ebd9c,917e3974,7ed602bc,16300648,86ed0369,21936ee,aa5e9764,ffc294e0,bcded12b,bcc86f55)\n,S(7e4951,dfae38e6,f9869fd9,6d058847,2a38b0f8,827052f8,46195e21,44213a47,6fa2e60,a3883383,f8efebc,f39329a3,b7aec31,2958510a,dbdd5a72,728035be)\n,S(1f7eb5f4,47d53537,3d29770d,5d7ed36c,a2d2a4a5,550d8bc1,849382fe,3847df55,5a351374,da5a804e,3b995d43,49560f7b,aa417dab,936860c5,baa252cd,1753f25f)\n,S(dcc1272e,b31560ec,64a4b53d,24727bde,da576493,b571b5b0,aa7bb3ad,e8b2dfb6,567e08e7,bde60e6d,a614f321,a9cdba4,1b860f41,387b3854,603a8740,f93039b2)\n,S(3f4e219f,5014414a,3c757cd,28120043,3cc199b,fa843c40,b344b32b,87dc7e7d,dba2099d,839e9c1e,7d7d4c0c,9444e956,168e2bc,4df1dc52,bb5b4da6,3a8283f3)\n,S(dac6f264,74fee94e,dfbe9de,cb2fb88e,272ff622,4d7f8b86,3076337d,6d37acec,1bfc6855,5af0f07a,c9329ed7,5549560e,8d3e0c67,753d2673,eb6706b5,27a0de10)\n,S(82ac1fb6,5a975de1,4bbd5709,9e2574d5,ebf883c7,7f38a7c6,1408dd3d,5e49b33f,a6d9dde8,b43656b7,9ab5d880,f3af2ca8,b70da7dc,251a7299,cb236b1d,75276c56)\n,S(19a59ade,a0da1340,36a533b8,ff202a58,55b9182f,b19e8b79,caea80b0,9e263706,58030bb4,b17da5b,1879a67a,12c1d929,88cee2a5,d8915528,26456762,9a99f256)\n,S(27e8a699,eca192b6,7a66b1be,5b290e37,1ff8e912,5afef253,134af2c6,ae709ead,54ae6059,58d036ec,959d789a,5316c70,a09db19b,179e5d4f,effbb057,abd87eeb)\n,S(25e6cdbe,5d7e37ea,fe2b51f1,95cac707,a2aaa70,57fd5e78,8fc926cf,76e65466,576b2c22,cb6ba6bd,6acf0eae,79b52ee4,1fdebde,25293347,d624973f,e9b66be1)\n,S(a0114d87,cc03bfbf,97e96821,2b69c53f,12910c87,e87e7a79,109f83c1,7042dbb0,869c33a4,cec89d65,633bbe60,a3cf7b70,1e5c83eb,e7c229ea,a4c279a0,4203a9f9)\n,S(e8017e4e,806557e4,61ea997,f5f46e72,9fb668d1,e8faacc3,5804c35b,6d5cbad3,eca21b4c,294ed18d,d0df0dbb,771b8bd1,659c2eae,2c843f8b,bfd3aad,f44a4070)\n,S(948209cc,528dc6d6,a406c996,7d7c191,19ab5142,679ac9ba,afc5098d,4d7c83e,3cc37cf5,1aecaa1d,ef14a2bd,cb6a1084,f3e60da0,9fdc4fb0,9d9f9fa5,84f14b25)\n,S(10f4d6e1,c141dc53,fecfbdb0,b39e3e8a,c7f5279b,dc231fdb,55b25551,df90fca0,4f5e59b0,9c6daad5,80adde67,1583af4d,fae40d52,6017d5b2,9e798bca,6917e735)\n,S(66361888,5d081bf3,9e9fc4bf,a0922dbf,dbbe8eae,451c199f,9aa844f0,71a327e4,f31b98f6,48940706,13a086df,12416779,a5c16ad3,7cf885d,5f1fdb37,1be94cce)\n,S(6afc24bb,ae6cbfca,b34fd467,f23a31a4,4a0a35f6,203dd7b,a881ee5f,f340db5,7ab76f2f,6bada7ac,1e01c930,90c741fd,90c41fa6,943aa804,ff960b17,3ab28cf8)\n,S(3551d572,2eff7d0b,275e310,d1466a70,2b828d8c,fec039aa,ce629aa1,2a9c23a6,b58af71e,1f9a6cce,c48d1fd1,18902a21,7f1e7f35,3ee9d794,8133d41e,2d2d61eb)\n,S(e6e8cceb,f6096fcb,8f21cd9e,d428260d,c3867e0d,9c4cacc8,b8900fff,7bd4c1aa,d1b12068,f85e64f,7c9de5ca,f1490bd8,6dabf18b,4b78b5ef,531d9bd4,f64f13a8)\n,S(5cd74a22,d46e7769,15b3c84a,492fad11,8790534e,dd8d9bb1,e117a6a4,78f566cf,397b2429,f978404f,ec96a4b5,28db5a,1b0cf9ef,61f2fc7d,470f0554,eed5ee08)\n,S(abeeb656,151fc7a0,fdfca1ae,fef91a7,ae156db7,c433178f,be6fd700,991e8b86,e2a10216,3a8bdd0e,8254f459,b573d182,eb55f2b4,969a3f80,267b060,9f208a8c)\n,S(3f9702ac,3b96bd4,ac9412cc,8f40d5c,99f4d7b9,d211bd2b,18c6f96a,ebd2f958,e077e28d,8f171626,9488fa5b,67a54800,b0d5a519,4384ca56,f9836b87,68e9821a)\n,S(3c8e54a0,d094d63d,60aecab8,675349e9,f229995,587cefde,eaa1f50,cf3032ac,e77aa94a,fd252860,3bff0189,f11d5f93,fb26fe86,dec719b2,f8bbeda1,3cf38ba8)\n,S(8e88168f,41689167,ead8ca79,5ef784c9,8e3cdc41,43a0ff8f,2891d476,98387bee,fb4bf21f,343fc6eb,ca6fe337,ccb7a7a6,899bb29f,d2f60480,ffb0a187,e875b00e)\n,S(d5c7df6f,31001177,f2e88aa5,43276617,7a598335,cf6ad98a,e55a6d66,1b75c1ec,2edb20b5,47b7c233,23d5c4e3,295921d9,9d98854,e780f4c1,e756021d,79f1b035)\n,S(262b9c58,75087b02,490291f3,963160c,c1f5a3a0,fd6a905c,25c98bb9,f7268514,c7e4ec06,b4cc77a4,ee551a5f,6c90ea97,4a0b2193,f1b828c,305a0fc1,b22e5b81)\n,S(cc94ea5b,a4fdaa06,93976b76,893dbd92,f602bcce,822ff271,7a13bc2d,6b31e7b1,c81c01ad,f2ff92f,5c2cc42,f3c30091,11e6901d,36c9af9f,9b408df5,c7460932)\n,S(b21abb23,4c435197,5b73471e,3b2eebe2,f537b95d,1b19361d,31ca4e63,336b0066,db02da36,73e62e9d,e96e1bc7,b79ef4ed,49449c29,7f4f0330,227dabdd,5b4c3d9e)\n,S(ed130512,5af211bb,28118dc7,fc22b8e,8bc2554a,a19a8c7,16f69f11,a03df1dc,fa146b3c,2e0eab2,bba69407,9ee3b6f4,2f64dab3,9c19a1a4,256283f5,bc0886ec)\n,S(42b829a,96989e82,37e48200,20eca1d9,61e487d,a9c6f9ee,60586dad,8fcd0e83,c2e164f0,29b6cab0,14fe76ad,82ee7372,78124cf6,5f251c9c,c260e239,50ec4014)\n,S(15f09133,fe57a223,e2c9ad79,dadbbc7d,ec85df2c,6af39fd4,a156eb0b,1602a13c,563206ac,b190bc2f,c7b24d2e,ff376cb8,64102efa,12f7be73,84898cc8,76a12b4f)\n,S(b8446387,4262c03e,312eb0cb,e562f460,8cd4f65a,75b099d0,b45e0de7,8398f5bd,da730acf,79fa0282,a3a29b99,7a0ea45,ba0896e7,598be8fb,8298aaa6,9b94640d)\n,S(6a926c00,ef4c32f2,52d9f336,29fc708b,e21f571f,1f320ae8,6e6c46b8,9511fb95,9106e0c8,2eb9fa36,4a84a2e8,8eadc9aa,9113927d,99adeb61,a2ac5527,5de9a9ba)\n,S(fd6cbc21,9ec03dff,8f3d00e6,9de0c64d,30ca5a04,1556d0d5,87339b0a,925d064,742ce8ed,a4b47eeb,29883606,211c453f,fc15ae40,174e1c74,656a78ee,f3a85e8e)\n,S(6fd7f1b7,61116218,68e1038f,d5f341,c43b61bc,b6ec53c2,8d84b321,ac664274,f681256b,947a9492,5b8402e4,26ef8d53,20c65a29,3a7758de,6b7e3f45,a9d635d)\n,S(c28c2cff,1e418550,f73fb839,58c1ca6d,4c616c3,74a67978,d4dd71c1,99902ac5,537d774,83b1ca9,50174ee,381023de,cc210f91,3a66615c,b242829e,e3285285)\n,S(89458f8b,7db2cd74,346b8b74,759088,fbf81591,5fa1e97a,3f34ff90,908cb183,9b5b21fa,378f50f,dff2e276,353179a,c0a6e43b,13373940,c2e73e20,106742bd)\n,S(e66ed94e,793b894,552b3893,88a657d8,55ccbb2d,f9ae0061,2cc07244,bfd434a3,8a6a17f5,da95e907,7b03192b,eba324a3,5595b6d0,660851a4,7f9e2259,2f093275)\n,S(8c7e4ce,f5dca16e,620d6690,ce3b9337,8000ca08,e73eac21,deb5deae,83359160,29a44639,f9a6b8ef,990b72c1,5ca6f539,31000a2f,394b59c9,36542992,7959c505)\n,S(a0d1611a,807750a2,45c68132,2f7adab1,9b81de3,809a9a82,ac038294,b732bdb,c6e35357,246fec0b,ed0c5491,24f13f9a,a01fe39d,e7630357,110a5878,90d9bf95)\n,S(c1cc130c,474f5ebf,e4b4e26e,a444d5d,7542609a,2bc65a68,9c6453f7,9dcf6ab5,deaba85c,f0f7f9fa,cac2415d,9f82c62e,9caf457e,fc9149fb,55bd8f2c,32f74ea7)\n,S(d6dd2a36,763b77e6,259f1305,43c8262b,784a268e,45adcd26,efbd6d54,afeabd68,2987d048,9549cdd4,c27222a1,9562b005,56dac521,1e67d052,e76266bf,fbab179e)\n,S(885cf8e4,ee0498f,29a7f3b6,a2420629,4a941f56,f3d852e1,4641a604,9415c49d,b1002bf3,e34ce44d,54a18be5,3737d98b,28ad0f7f,31d9bc37,ce31279c,fc039b2e)\n,S(8f0c57d0,3d85979d,5bec7346,1f0a3b7d,540fd0c3,8d8a6775,fde2ca35,ec8a0d91,86a3f4a2,cc4f934a,8b833cfb,dbb96eaf,159e00ee,caa0871b,235e4f8f,97bf542f)\n,S(53456583,d2f4d9fe,1a13883b,7775b363,3993c9ce,6bca547f,d05021a2,d36cd366,92cec0bd,cd83312c,455690fd,d715e41e,c29cc70d,f5eb2e17,7f0b2caa,f3b5214b)\n,S(a5ac3a28,fad5cda9,200bef2c,454b73ee,bbc853a3,e8b2ff77,111ea25e,5f3b5359,4951843f,6e23b9ba,60f326b5,d6b13f1f,f49e8b3d,b399be4e,46cb3ab5,7ef10bec)\n,S(2ec53b3e,6d91835e,d236898f,8857a64c,4d898098,9af6ba60,392b774,6eb99ad,e21f4abb,cc05952,eec3fe34,f02d64c7,e7a91658,b0b11b14,118c3489,7bb2a2ee)\n,S(5863f940,a45c8f5e,a2361500,84c588b8,a7f99d26,84121d59,9073d38a,69494c38,db422c38,41a2bb32,98390c98,e9f4c23c,da27c64e,a5481870,b33a2bc,866852d4)\n,S(3492772e,d177b4a2,5f9eed03,7094c52b,aa72dee7,1c5b315b,70948dcf,a1975a64,c5a26844,26418929,b5bd1488,49b3241b,d0eb5243,61106911,1fc32cdb,29087562)\n,S(4405762c,ba4f63b4,2401ce63,120c3599,af37ac13,d2de044d,26d830,9e664a4b,3143da5a,8319bf4d,32941d58,e9bda807,74c58380,ad8c3a33,460bfd85,36d9baa2)\n,S(4894f457,1324691,8f32111,e1bd94e8,a43f717d,74e8c465,550e864b,9ae2a16e,9c89818e,6f09fdc5,b36c65f7,12f26be6,40598712,fefda799,4b200967,7de01ea)\n,S(620abc9d,4efdc1a,55edc41f,29834528,ca87b333,a8678e8c,205d6817,cb7ec3cc,f524cc99,9e911d67,dd0e8bd4,3e003ec1,64af288f,3135a602,4e93856f,8110f867)\n,S(d69800fb,9fe61ca8,97f77226,d42749b,1274176e,29bb85a6,226f91e1,e8c62a7b,43baaafa,e10649d3,ff2bb0cf,10c58f8a,f01fd3f4,1a06c245,a4e9c483,8bc9e3f9)\n,S(87a12e5e,d002cacf,f55901c0,d374f81c,ab9da24b,80e1fa9b,25f038c9,38344721,36586bc,17aaf4d2,5d02ae3e,e9f98235,f9d605fc,1954be4a,dbbcb917,1f736d72)\n,S(a0af0d5c,bfdf4fa8,98a3ea89,867721d6,3178341b,ba30f091,946c72af,bb876624,100f795b,18dd85c0,9af012b2,5d7d5d1d,5118d02d,3837fabc,ceab0b23,99f98e43)\n,S(ac94b41,7becf857,1248a94b,a853f4f9,dd47284,157e0b9b,1756c4ca,fb692086,cf94bf3d,d0c7f89f,acf8f678,5508e510,faf27a33,10915d99,80b9fcd9,62f75c92)\n,S(649654d2,966fb2df,b917367,e2ea4034,fe886725,3711bc40,8520d5d,579a3481,bf8ac886,a7550c40,29279fe1,c4d330d0,89935427,d6967412,66d79ec1,f1a2780a)\n,S(5f7776ad,e73826a7,fd2969a6,1511141f,cbf6fb11,23c8d7e4,3ff93835,ee1860c1,9faebe0,2140468d,4564f7c8,bfe4f097,dd0ba493,8656fb43,ea9f0f8d,22089e5b)\n,S(f5dfe7be,f4c42f3c,e91fea18,10402c5a,9072b001,286a7371,35a00fd5,c71e2f17,9787d33f,821a0633,ab1982a4,f9240b53,38a5644a,4d203b1c,6b5cb212,3c837b4e)\n,S(d3432817,3f33fa7,e517d6f0,408bfcb4,6a882c0a,6d78feb7,44f731e7,4e1bed23,bc1e6ff7,cbdaca91,edd419f2,e80e617c,506bf8d,8acd4548,8267938b,813a281)\n,S(a4420846,95528dde,2c52d5ec,cd67266e,3024865a,c6e812e5,1ef4f780,505f9d2c,4a721caa,63d62b9a,c23ac717,7a27e27d,d54e5ff8,aa204bf7,3e6b3131,3ccc31ac)\n,S(b3818c70,ea29c1bf,db63ba44,1e42c842,11f9d2e,4d6b07cc,79938d3b,b294b820,1b2c711,a98418b8,15abf79,44fa75b7,db8965c3,1779d4e6,1967f009,8c005d2a)\n,S(3854b55b,def18a47,7e87f62e,d7607c6d,aa2e737d,e0e5015d,de7e90e4,570d43b0,2865de79,552c68ce,4841ad3a,69376a36,9d74d55a,98c35d25,f97656a2,fa22785b)\n,S(e2e805af,78bf592,6a37fac8,7429f6ad,88c45522,e58e5c9,2bd2ddcb,e893ff33,c2206185,254ef80d,fcc7365f,1dee9a3a,cdac0ebc,d0ce6a5d,4c9a6875,f07a46f6)\n,S(37510b86,df2d8e60,10d40e34,77af6c24,47f2a41a,fa35ed49,224bee62,eb0b77c1,1f30b802,6a3288d9,714b33b3,7a09cf20,cb754f09,730888d2,a09869ac,1e905ff9)\n,S(14b2bcad,c5272c56,8930c574,d745fac7,d190558c,121df6e0,c2c9cc1a,f9662fcf,baaf56ed,f70fc0b6,520bea13,a8794d2,d397e935,65841028,6dafdc16,96caaf3b)\n,S(2984937c,e3d6a155,7a185609,9e44bfb7,28dc6d0c,bd8c628a,23a383ca,3f38082a,637c5e4,9b0943d8,e09960fd,2375770c,5d4dc4b1,3ea460df,d5ba49ab,fd6339c0)\n,S(e64f46da,d9b9e7ee,3d2878b2,f604728b,8203a591,d02e7d23,721fc436,165918c0,f7ec0e4c,9f66adf9,98b8e41a,d43fe3e4,7cb9be23,6356ef3,ef5b9a23,711e1140)\n,S(3f587c9f,1b88ca37,d32af584,e510609e,ae113e54,8d07fbb9,a34f6916,908f686e,37712f53,41485518,241835aa,d31c45b6,f5370c6b,238380a4,ddbd0755,17b2b49e)\n,S(8218250d,b1ee7484,b8892bdd,53be130b,4b5d3db4,7c3c9e36,5a17baac,5d8654a1,f19955f2,a7f954b9,2050c815,8e801222,8e77405f,c9f0676e,76ec2e4a,f3b93bf)\n,S(5ad1a4a2,55a22c56,e8d17acf,786356f1,7ffd6453,262980f7,188879be,9e1eaac5,fec5d2b7,ac26e4f2,d4d7af01,b49295c3,3a969fd5,28e3aeb3,90e86bf9,85093dc4)\n,S(1c92ee58,c5226166,c313b491,5c731d34,739068b8,f0241dde,6f0d7151,243304c6,5dff29a6,1197aab4,c1ac8a25,625c4dc1,11729680,15f03488,b8a4baaa,d541bcdc)\n,S(fe622f9b,fd9c4ba8,8c80c82d,d1a07bac,c1c9da11,996240cd,50b6a41,f6f8fdc3,666e59ff,e9efb9a9,b7c36539,ac948438,f1de235b,fbed8fe7,3a084076,39f6b901)\n,S(b2e8301d,ee34bbc1,d95de73f,b947bbd0,325bb3a5,555738a2,8fbe4e3,601a40d,6953963d,3496413c,53ef500,6def0fda,607d9a9a,319cb93e,22d9bfd,a0c3b807)\n,S(1505e140,4644537b,56da7114,5efd34d1,566ee38f,dd4b549a,34ff312d,5cb9bb96,d6440284,c1ba972b,413f8c12,7fc40001,39954fd2,5ee4993b,4dcd5e3d,a2b843a6)\n,S(7a524409,67918e47,53b451e5,243c6996,c053fce6,1f492995,8d2bb84,9fd1088d,e089d973,19788a2e,853a3067,c4a98c59,4fce75cc,a9ba908f,37780e1e,567b7284)\n,S(69eff8da,8efa75c2,ab052d71,e898a975,c58a074f,c46fc6b3,2b385e41,93ff5a30,30e873ca,f0e7d1d,e58713db,cf7c5c9,6c9f068f,e0e3d1d6,c3863d44,8da1cca4)\n,S(64a5649f,2da4eb15,1be3fb68,b1210cca,61b32492,60225ef5,53426992,95e6d6ec,8c53c12e,8fbd7c,811d4a85,95787105,4719c5fc,368845a1,6b8babba,1d92f56f)\n,S(ca23d56f,46ce3458,d95a5b24,d998188c,3ed76a22,2034b337,933c4298,8c804fdb,efcbc7c7,d0d11fd3,ef1c0ac1,38d1a2bf,d0e94a85,a0700cb3,630dcaa,426a4c43)\n,S(630b2d2e,62bf28a2,ebf80f2c,2bb10cc,82014ee0,c48e15a6,4cd691db,dfe8a55,908eba92,e889f132,4da0f927,9c1bfb74,dcf16786,c9c8a964,79757a79,d4443e9e)\n,S(29b5c3d2,57674ebb,1cab5fd0,56534261,5a059eae,c8002aac,c000a857,a7b7c840,e7724381,f3f1cd4d,198a06aa,33b7fb9a,d6acdd57,45f900d7,be34fd6d,4f6dd41)\n,S(f4b9c47a,2454985f,e732c151,3216f7aa,f5de769,89344c0a,4b8b46fa,c15508db,9c51095a,c45d901a,75229288,fe5d49c1,1dbab43b,9a030cc7,c6d71bf8,9d097378)\n,S(af0dbf55,79f3f1f,91847143,99a09fff,75c8922b,48213c42,1cb17d11,2ab7ac71,56e7f5fe,e96e464d,50cf98b2,90a04917,430bc2c6,72a411a0,842149,8fe23d66)\n,S(7ddbb2fb,f5d68e,6acf574f,1fba12e8,323e06d0,b6b80cb,1b9e9368,5543a8e9,888670aa,f057a051,1738d69d,162ac2f4,9074e5ae,d28cd6a3,a30edf9e,e874d7ed)\n,S(43612257,2c25dce0,4a0273a8,a83890da,3a27848b,103d5ee9,1f0bb33f,ddf131c8,62cf1a80,7bdfeaf7,7b9d90bb,ec403b7a,b4261e04,62a16c58,5c9e1435,afb177d3)\n,S(8691a20c,6df3b947,e173735b,d764ce9a,4a7773b4,4b4276a,873786a8,8e5b0932,974ca0c,6644983f,e4288afa,a80c03de,fa8d9215,c148a63f,1a1d4aef,365d9e81)\n,S(7376518a,528c1190,b95cfdb,ef241485,c84f34d9,3690041a,e4d8b0db,295fe87,fcd56fa1,3d5cbebc,ea197636,ad3e7bb,f9faf472,56d44489,e7cbad3b,ca9e01e)\n,S(9c5e491d,838b7471,87eeff8,f44ebd70,d6087ba7,fa2b957,8302e46a,3e5113ed,3e312d47,a32d61ee,f88dcb4d,aa38b024,7327ba59,cd377798,75bcd10c,2aa13278)\n,S(884a9710,9e6e95f9,9a52d8a3,7b91480,d33a95e2,4f385ecb,d9666bc7,ddad4c63,f39408bf,4f27f2f4,ef65b195,b231edc6,c50aca83,60d23ff3,32b1c3e7,149e8d6a)\n,S(f99760ec,771c8f39,d349fa7d,19b0ff65,bfd2ebbb,f2d4707,eff2d646,4beca7fd,d71a5750,a9737ff1,bdd2fbbb,9674905,5508c2eb,ad22aee3,6aff09f0,1fc9d996)\n,S(f2cbe279,98214502,77f79ae5,22da1671,452c8e94,27562e3e,5d78fc17,9e758e2f,8334d592,9b50b714,a50ead97,6fcd8b12,f9806edc,5da45d8a,a226e029,282ab52d)\n,S(df67bf7b,861d0636,30784bd7,f9a472df,6c2db3a4,7af8d06b,ea3665,cceb76fb,e939458e,513e55b8,7e4b90d4,3f073e47,620dbdec,d7ceb425,1353f4cf,a8d20624)\n,S(e3f17365,4bb1e860,d1812852,c67c0095,50f82b34,434c5326,d5864884,bf64fcb3,9f07baf6,ae6b8c28,e8a9d807,22a97f51,bae7c98b,daa09578,5a2d1fae,3f359139)\n,S(1cc073f8,ac4fe62f,e311eb31,42bd357e,45ea17,a844528c,7261bfb8,24642103,52303125,ef059a48,142036a1,ab6353cf,90a021d8,30a936ee,9cc4ffc4,91f514b3)\n,S(f6b037a4,9394a077,7483c0ef,326e694c,be4b01a0,3accec75,629f7224,7fce7f0,f922659,25e4434c,4054ea7d,d4bdebc4,d3801c39,be53b037,715c6ec2,88b34db3)\n,S(74966556,eb8c4cbf,cd364f06,b2bac116,5b914c76,d394dbf6,b5f2f7ca,14e54207,8ef7ffba,85b9eb27,f444de36,86ce67f7,75c8eb30,5bae0c6d,1962c839,a88202df)\n,S(44d3ad0a,bd1f2ad,30957e00,594f7738,18777896,9b4237cc,d61931fb,a564ff35,af69cb36,28168fbc,f194f55e,e7691ca1,88178a44,2e6bb250,84c6ea77,a3d41748)\n,S(7914f911,b6956f5,cb0fa063,bff4ee00,cb67058,3dd4eeba,daa4e445,97f816a1,a61b333a,e72fef24,a47f48df,90b5384b,b25b5f8d,5530a5e5,117a4f45,43948fc6)\n,S(65a31bd4,10c97121,dcf656fb,55a71c94,ac34ba43,c3219b1c,86f19f56,bda94c38,a2e19092,35d8b549,b1926524,132a5220,e26beb5,f9d87ddf,f46aae23,dd8834c7)\n,S(eb092b73,5b789bfe,9a466b70,3801b511,aaa33260,407b8750,cad24563,abaafb49,ee29705,18088ea6,132314c,999ee924,5f50346f,c7a9d114,169fc20a,2e6b6a42)\n,S(38574e2e,8ff7d427,3870b6ae,d859322b,deac3824,bdc1ec6c,e34d88a,8d92196f,a0a6691b,4d770ffe,e5503d61,bba954d2,f4185860,19aa60f9,303f3e89,9fbbc7d6)\n,S(5e555cf3,adf0d5fb,530f87cb,6fa753bd,e2c09d9b,d703a899,f27d2a15,a051a64e,41bba138,c76d1e98,90ce88be,1053bd3d,559e7118,4b900aff,c048a494,24e1768a)\n,S(4e8518ed,92b06242,b0f28b2c,e02582db,e5f908ee,fc660c63,964f5e88,95b509c9,9e4fa860,cd07c071,fea0ccdb,f1b9284e,393d9f61,45dc4ddd,5ded2dad,b8897e5d)\n,S(507d72be,dc881de7,86103317,77afe208,69619a4c,f6cd3012,e04c8cfd,2029b562,2f2ec47a,963f7c86,de8497cf,fa70846f,22dad843,29643444,706487c7,d9999da6)\n,S(c87295fb,299c6f1b,410f1128,a1c88eb3,4467d0b3,df7dfcd2,18fa3819,58df06f6,2977ab13,5abd0c43,ef791c18,5cdd6b59,443ad076,5f190cd4,77620227,dc38c479)\n,S(5f9fcb3e,2d7f842e,22ae0d41,48d74b9b,66b8d98f,fb66e4d0,1f279be7,931731ef,523a9ed2,a911ec36,87619cd3,f7ffde07,e11a2b19,e90771b1,8ff86170,a747193)\n,S(42d833f2,b9717832,1b9174ee,75127d0f,5a850a63,52452942,56fc4257,f90f74e7,fcb299b0,ed234bb5,4f0c9ad3,e9a87bd3,f4a83bd9,916c9050,6952df68,f39dbda8)\n,S(cb173f92,400cf477,47ec4ce9,f9852778,6636247d,55279b52,81388daf,99b77f68,f9d99960,1e669f8a,d8283ced,317eb2bd,5aebe201,ab97a62c,25573a0,65b28e0e)\n,S(a73a52d,a2ed0dad,e9943a25,8e6a1f0b,6b2b772,b010d81f,a6eb3bb1,61877d65,71f7bd19,7e9d575e,25a4c592,92061743,2cf69ecd,f33705d0,3429966d,956a2e58)\n,S(209411b0,398bdbaa,7412b2b1,49162c31,da88d9c1,5dd4db67,8ab3e19,c90a8415,1392e77d,af6bcf59,3162c8b2,2e8ff0b5,4ecf8e01,4fbdc743,dda8f061,ba8a24dd)\n,S(74590b3f,a03daf8d,537d9eaf,410b6c61,780f4146,44e7360f,7d6e2710,3c8a6d9,d40fb53a,1f6768ae,b4918201,54dc85bb,62c5ee68,614f1e3,b6cbbdb8,e182d9f4)\n,S(cd77abfc,78148f0e,1acc919d,e3afeee4,2cb6fae7,5f68ce7e,cd31e3a5,adb54544,a46dc809,f9b1d0ee,4ba8872f,95166de3,87b08a0,b68b3622,492841d3,f4c8ee1e)\n,S(ad1d5f2f,ef4890e3,5d1916e5,2dc6bac2,612d3b0a,3511ce92,94262b7e,fe2da353,6aff87fe,3778f197,ca8b1a67,9b8f89f9,69fcaaa5,4ef0a629,c0dd311e,ae83e568)\n,S(de45c27f,fdb38ff3,a91c0dda,56076875,be8a1369,23ef5a55,26af8829,c9a17705,43564551,83b6ec8c,48c1daf8,d8f0cacc,4b3bd932,5d6e5adb,89368834,2ef5ee90)\n,S(deba00f,aa0d172,a6bf1c71,6d280e2c,8c8e35ba,9c15f0cb,ae574940,fb78883f,2b282f66,c9499232,dbe30521,da2298c9,7a0dfc43,562ac5af,74eaac20,1d2dd708)\n,S(eb95be9c,eb4d5db2,ae9071,e5dca616,dcdffd15,762dda32,5d13b576,f6532b04,c21f9054,d504aeac,79f98cda,de167ee,60e8cd52,bd44e4e9,3d66e2be,a9867741)\n,S(a2849585,a2d9d78b,9da83fa0,cdf7f4b2,62c29e29,876297fe,3ad3bcc3,691acca9,a165f5d5,9ba43cba,816ddc9c,b33c4d14,e4f768e7,96ce32ed,2f711127,7bb8c720)\n,S(e5a492b8,cae88b61,c72c8772,eaf6de20,40c89597,a4c4c703,85c28e29,62bdad2d,a0dd4bd,8cc5136a,184fd7e3,aa025c2f,62f85693,163e726f,cffa37e,2be168c)\n,S(875a7369,7940cc11,b00b28fd,c72b31f6,19c9018d,5c261af,f1cef7e1,be71b61f,93718642,241a4e8b,22760240,2b4f4e1,fef54882,1af31e69,cd45afb3,427fe8c0)\n,S(39a301a4,69836ad3,f98d7086,24b53106,fd9d9aff,c1253059,f45617d6,ad6c0c7b,a7f00229,6ff382a6,4bcb9dd1,fd9afb5,4dfdc2f2,bac962c4,8bb76603,7224a403)\n,S(8bc53451,922203aa,caae8513,4deadac8,10c585c9,f9fb44bc,57113a31,9474f090,a4bc9c8e,8ea5d122,54a6cecf,aa46b791,68cf14a2,280c86ca,177871b2,abc65b8e)\n,S(796eec76,37c1fc11,3ef31366,dbefc78d,ba5735a9,28505c0c,e2a22ad8,b447b1bc,11e91c1c,f9195b5c,b8948081,7d8ca5e5,f0fa07e0,19ee5566,90da195b,c5eda060)\n,S(ac52e134,1b531c25,60efb2eb,1c0c79b0,d1f3cb6f,3bcc4b16,6a7f701d,7d5a60df,4415cb74,b2ca5b76,985a1386,2278f53f,871813e2,905e51a,cad23265,64efe34f)\n,S(c231c57a,ed49f271,2d571e10,fea59a11,c4d427c3,4a67b024,b4713af7,d2288d69,bb4ec242,6026ce7b,56471afb,c4ed8772,dada1335,61d07981,907d278e,70ce398c)\n,S(1a1b76ef,11f3d64c,5670f06e,7354fc4f,a7c17129,75ed3094,b5a6df78,c8c03034,600c7a61,188e6ea8,76b8bd21,b121ee22,ba9d50a2,d2ce0fc3,d836829d,1f829430)\n,S(82b4e49f,2d9d49c0,f409ce6,13b65a5,c031c8fa,adb3ec8b,62885760,c69bc5,67b8cfb9,56b80bee,5e5ec168,6cbad5f5,cddf38ae,3bffcafe,17d242ab,896fca10)\n,S(bb3201,8ebb358d,575cf58f,c08426b2,f7116d40,8cd2d779,9acf6c4f,55de461f,8f3205b3,291c8da0,b0ebab8b,ac292913,12ad3a7a,83ac3ff1,6e6f55d0,445f22bf)\n,S(fab9cc75,60a02c8a,e916bfe9,b61cce9e,32d37203,8b42b58,150db6a7,cdd40a22,132d8021,8e3b6ced,e6b3060,5812823b,80c7f0ba,f369caab,8b3b7cb3,bbb477d1)\n,S(9f96535a,bbd2b21a,bf41bd19,549528fe,1353724e,cfa3870b,3df3256a,661c7e47,b8acdf49,a9783748,40232e1c,9a0f6854,1547b7d6,d1d60bb5,c321a1b6,54fee431)\n,S(60d4754a,2faf463d,f7b0cc2b,ff4e6495,ea9fa9a2,e2f1f4e9,d773301b,3d406daa,43d16225,6bddfb93,3588da3e,511ec648,5599ef3f,7db3a1c8,899c21ea,2fc91936)\n,S(3850610e,10a40ef1,5aaf4d4d,b11ce214,7c82a449,ea965cb2,5cd9ad46,45ba44d8,c10cdca4,aa919f20,4ab148c7,2eb4e6f3,7939c70e,e134433f,5c70e45c,fc30be3f)\n,S(68089586,3a26181,a6966055,1ad8d431,9d325533,70839d17,fbfed5c7,fb84fab4,a0cee277,97d2ff7f,fb7a6805,604eec37,4ef4182f,a163c53,15924f,287bd447)\n,S(aee5d57d,17a9167e,9d3ff19e,8eebeb09,7675b709,e3a89ec7,38280b9f,ab9404da,154f14e4,f991644d,aad6d858,940a6126,5a8f1c1e,ef6071db,5e138081,5e2d34c9)\n,S(8f3362fa,659c58a8,2376ab88,c921fe2f,2c8a5de,f36c057b,3154800f,bd493950,5f88cf3c,3fc1ccc2,2105f3c7,8ba7b8c5,525a9fa7,7cf76976,8906d0e8,caa64408)\n,S(2bfce32a,9d69a14d,324d8f94,15b42f87,25f5befd,ba3cc6ac,2a5c7778,f23187a3,f7e88e0,51ea8e3b,788e18e2,95355b2a,75fc3c3c,e62f7797,d3b02681,d6a3b63c)\n,S(62984e62,5d026f0a,c6c82fb0,46dbc152,a05c9a22,3f55663d,5cdd87d1,e094022,1dadce42,d6b68fcb,19439f33,2d2db167,f33861de,28cd303d,c94e3a8b,7b26964e)\n,S(15502824,b02a10a1,d7b13137,4175bcb5,6b70f796,fd3d0713,42bdee98,99d8a057,b391d51b,b2b89dae,5b687e16,e2ce1351,2296130b,e86a7d21,c1d3c6b7,b20eca57)\n,S(1bd98bca,c0ed80d4,f23422d,c32c5922,1164ce33,55526ea1,61e1d9fe,518c0e11,6b0afff3,b0fa5029,b4e9731a,fe772fca,c0e30c84,e6c652e0,f22dfd41,a9cf0ef1)\n,S(4dc9e532,d5543e88,a59872fa,24b99968,e649977f,9ea08bdc,303ca4e,d574bf40,7c05536,d9181687,133dec90,43cae3af,42dbe034,af05a746,b6de1ef8,20276947)\n,S(3e92be78,d7c7db61,1049827,42b0d213,672cc543,c27628cb,f5985c19,5685f3a0,171c3afe,c69648e,7bb7912f,fdfecc4a,78cfd246,a4fe1263,e5eeedd5,330f84e4)\n,S(57b6c4f4,75bb9ce2,2086a5a,dfd5473b,73b0f6d6,278afc7a,16854e6d,32b2842b,4fb4aff6,738f05ce,31ec7934,3638a717,3806d347,c11afd82,e39d492f,b961ebb)\n,S(571ac8b,835c5f4,a7457344,e8572910,309f0d3a,26b849a1,b3bca2a5,28771b59,317ae805,3aa2855d,aaec95e1,72f4005a,6ae09ce7,187590b6,41fc13c4,9bb4cf9f)\n,S(534c2141,e38a7880,bf146951,7d4ceaf2,a25bf5d6,a538eb1d,4161461a,ae54c4be,59dc6548,1b056dc8,c3e98364,ce6b76f5,fbc9c501,6ff24e0c,1c7bfffd,306b03e2)\n,S(7a761f86,3a224193,157d3d1f,8fff8a05,e5c13366,a7ef7604,2cd3a1ff,f9f936f1,20e86bd4,5e93b784,f433d6a5,8056c6a8,e8d1fdd9,e924fd37,bd5b16fe,fa0ece9)\n,S(c1497e7a,b9373d32,4bfe813c,32aa9dae,f1351351,c86ed382,fd3d4c5,6a54f62c,9401bb9,1621a327,2c233004,d6a8093d,f812ee66,604eaa86,32085b3e,482eccf8)\n,S(2dd83787,e31e7237,f49a570d,adc675bb,147b91e1,3910f22c,e41bd16f,edf3c0bc,10148349,6883687b,7ee844f6,d60ee90f,1aeb7c0e,c9f83293,be96eb2f,5cd6d46d)\n,S(938f1399,18a0fe3,55ddc7ec,d6dacd34,1d9c996f,9ab4f9d6,90b435e1,fbc0a74c,30c71b30,e7a3c244,b8a576be,9e527e6e,60d1834d,17908e6f,a0771daa,92517448)\n,S(e71217df,430dc65a,d188f6,861b00ac,c3214125,447d8e26,7dc5473f,9471284,8f27019f,114e542e,96eb5121,b7c3e094,f18f6287,f2cefd9e,6a5290e8,5e1dbac0)\n,S(ca2ba87e,4c040efd,c06ca7fa,50cbe414,b66bb2e3,ded2bfdf,7744f81a,91b102fc,24848b82,4019bae7,4cd7604d,101c4819,6e808ecc,79db885d,bed68354,ba3f138)\n,S(c267ce5b,633c7f12,1be2b297,45b4dab9,ff488b02,c8f89ba8,706948c7,77167ad7,16184a77,954c3b5,f9e330f8,e8b308de,1489ebe4,bb9ffe59,f3f545da,e7748385)\n,S(1eb9af42,96d58c44,bd6fe2ff,db05e0ba,1b5f581a,af842883,5a47a050,468f8b33,f88a1128,95e53e05,4e514117,5a2c54f6,a235cb08,3494a7a,991fba4a,fd0bf1b2)\n,S(ba342b95,76bea3ec,15aafca6,2f4f505f,c35bc2ca,64e2f4be,22323b77,1ee39062,91be5746,1fb662f6,cc28e73d,f0dd61e5,20cd3ceb,2d6fb0b3,39a76e5a,39114afb)\n,S(f3a8c7f2,86117118,a4714895,eda7f401,dce4be87,dab4d4fe,b55068b4,c948b350,1dd2f669,31f0ec62,74e8bd53,97cb6b50,d97f9238,2603c931,8ff1c6b,18893bf0)\n,S(3cc304a4,3aa02bc5,25437a89,977b8ee0,9f5f997c,56c4d317,f531d22e,4a60f55b,9ce121dc,cce749b4,78823adc,c9a613b8,aaf78f5d,c2eac8b5,d5ee6aed,592c7bae)\n,S(e5be6c29,b9f12f42,1f499fb1,13e54bf4,4a577fa6,d8d0dcd9,6b509f65,1b4f3587,7755eecc,721bdd9c,c6e8c96a,d398cff3,c03e77c7,9e34dfac,1f51873b,8771d40)\n,S(f933bc46,f296b780,4284de6d,5bbeed68,bae90bdc,cd731cb,b9519c05,278c7fda,b6ec0484,faa4c53a,630a8b81,e1d567dd,543a4e55,4e89ba69,d72646c5,7ab3740)\n,S(e1d21ebc,297edcc2,b595976b,2f65b2a7,a6797cfa,3e5abd27,34e2a962,dd2f507e,aa31ee8f,4c80a0fb,9e52f32,c7e4a69d,fbe8d297,8dba479e,b0c9f4d0,350012fc)\n,S(c3cf0aa1,8e45aa16,343c52ac,41b12278,f9899b46,e17ef9d,d7b67f75,84a1eb72,174cf510,70418a6e,f83b3db4,97102ca9,5bd99985,f2554e5f,c32cdefb,ba47e411)\n,S(e6a90aff,6e1f0311,34f93967,538040e4,92120644,8e8e2106,dbba6f5c,701700f8,93895ef2,1d3513e1,19228b95,86289c26,f3efc024,1ac2c963,b394cb87,265638c8)\n,S(e2b695fc,8f1856c6,131761e0,9f75a558,94a4a7a9,2837dd29,f8e8a474,7a9b9a91,b580a2e4,240724d,5c5381df,27a17d72,4d0e638d,958c0a27,fcbba34d,da5361d5)\n,S(c0660a14,6db599e2,15f813a9,f267d6db,4542a696,9b08334c,6bc80558,ae518063,6a901346,6bee774a,54ec2f97,47d7a8d1,e157a13,fcde8cfc,57e48d84,374f6ee6)\n,S(5c41cced,2b091fa7,df1f8e30,3d78b117,842511eb,41717b59,f776e05e,39daacb5,dc4964e4,d91fc985,af5c0f87,f0026a6e,290bb1c0,b181fe2e,195f7001,52509f40)\n,S(6abe8574,49cbaffd,d0e5fdf6,450484b5,f8636170,5c8a0a59,a3612dc0,8d0d52a1,c669b059,3a5fadf6,86b9583e,7fecc9f2,c5eae967,9eb5be36,a2018337,64703bdb)\n,S(560dc0ec,2d407e81,4b5034cb,8d26c8bc,7c86487c,f74e2fb9,a076b521,f68e22de,faa241bb,ee929015,b4183152,5aff5062,3a270bfd,6026d94e,c3106e3a,e66783da)\n,S(f3ef40ed,8d82c02,a141b953,e8593f06,b74b244a,b85edb18,eda3e693,3c8f90a3,aeaa6d25,6db6b12c,d9a6ab5b,d6d0d854,62c0d298,5a772648,db46b614,3050d4a7)\n,S(413e0fff,df030385,248b1fe2,1bebedfa,77c1cb86,d665790b,21914da4,58a4479d,6fa9db70,80ab1736,ee7d54dc,e5d1b545,dd17e3f4,45b39038,595fe180,2b34b443)\n,S(ed3c5ee2,cf1cc502,37e5c654,d903083c,6fce29e,cda0f427,5a6e1ac,940b8183,fd265e79,3474e60,109cac37,a867bb81,d8ba8b8f,94b13f08,c409ad5,362492c2)\n,S(b98e14a2,3f5e5d6a,a99ef39f,18e234d4,42102e72,2e330d2e,e654b328,e2f3bf49,67a60b41,8e820ef9,72ffa57b,1e383b1,35585920,20434df0,e443c318,89734499)\n,S(31bb6293,28793b42,dbafdc9e,6a418c51,f0a0cf0b,6da96879,11a6f046,c146e475,1bdb131c,b14a3d85,a532f889,89112231,341a546e,c88e8a25,8bfa341a,7826512)\n,S(79b2d26f,f257ac80,ca67a639,9be17ff1,8ea0c10d,739b106a,a9310754,6ba0b252,e09448ea,b102b1cd,654b6e1e,7e4754e1,c63d11c2,46b0ec5d,31df6175,6b99e850)\n,S(ab8cbf8b,c3a740d3,c1bfc2e6,efbd7ac,f444795,cf2e311d,edfd5c2d,124d55da,70599847,895f335,a8bd33f1,811201b9,a860555e,8cde2a27,4c348b4c,6ab449a5)\n,S(f6b7c2ba,c5468fb1,cfa0785b,f67972b5,36367ef4,d3dc9ef9,25e88085,524e6021,663be56d,c325b2e2,3753bf15,1f6b2ea0,2d6a62b3,a3d5f565,2734401c,9c661a3b)\n,S(f5d2e04d,229d784,d7af5af3,ea65a35d,637b404b,c431ca72,1bec7fa4,dee33377,16c90231,e570a434,700fd8e7,cae5f8d,fbfda2e0,e234ef23,a2e82452,a0a953e9)\n,S(4df218c9,4277fac3,3ca43921,e29fba57,6f183e74,fa2ea781,88b8245d,eddab853,7828e929,6c589e6b,1d80b036,2c9bb0c9,2c2a79aa,378c597e,8a64b985,d6e4d108)\n,S(60e1cbc2,78d4a0bc,b7973b32,964da674,9e2b3448,24075a0d,1db93e51,ee3414c1,cec0aaa2,3db6c3e,6d6c3189,c2dca9de,8ce91791,a721ecbc,1f09c7ad,468ee8c5)\n,S(1e7a9c4d,a6cf3251,559d58eb,bafd1a7f,ee686c72,8b1ad271,d9da3b15,6a9f3737,794e3bbb,cdc0df3e,b9669a10,8a32d7b7,f3fb843,388cc55e,aa893f64,ce1b960e)\n,S(e8984316,5ee703c2,a413c7,2a5c8ea0,605c0b4b,58cb844c,85df83c3,b4f361b0,69fd6f89,5cac1716,f0bacdd,5a880f12,f964c2cf,1cd402ee,27ccdbcb,5188b64d)\n,S(2b95eaae,6078c535,32a23225,eb9821e,c7bf864b,75187df3,2736459,f0797e4e,aa6e1922,b5102e69,77fc23b5,ac2de98c,edcbcc37,54c928b1,7c7d124d,980666fa)\n,S(403c1933,59ac9027,7aed0f41,f9ebc507,8ae553a6,ec3b8a4e,4f66a841,19d221a0,edab5156,8667e7b2,c7793e17,839e46e7,85a6c7a0,8af7295,8e25b411,13829ead)\n,S(fb182399,c535de2d,556ecded,54e42f29,8c0054a6,1dea2477,9df1c7c3,bb53e1b5,7bed179b,73268027,4fa6b227,d13763d8,4fa62dec,2e351ac2,d3aa59d8,8961123e)\n,S(9375a9d3,ecfff9b4,b672d90,45aa4872,f61c3b8e,4cf86a38,7daf74cd,affaa521,41c7bd13,f4e491db,77a42bb8,d65ba77d,f03acc6c,cd789759,37486d08,c3f691d4)\n,S(abb9554e,1b68c554,81d8bb12,5b426a4c,433cb110,79254f8a,ddebabd2,9f5be0c7,946d680c,1bee958d,32089353,41ceb7ee,5b4a8168,a6368a92,e1ab1050,5d0e76d4)\n,S(56e8aa51,37b38531,1e5e1097,4df857ea,b4f7e53d,11102021,6463c212,ebcb873d,b51e1981,7eee5672,afe7f688,92ada73,abe703ac,4e19770c,97dac300,8d3b1632)\n,S(ac487fb0,4b00962b,2b098cfc,4f22eb28,e5007944,d32a136e,5988dd47,d9828f5,bd305529,5f4200e4,c5e6238d,76665bc7,67ad8402,dad13d8,6c6fb316,a214a5c)\n,S(1dd7562a,ce273114,660ccde4,5f41d690,11621bce,56cc49c7,2016f19f,d94e9e9f,a8e8861b,ef664d9a,c19391b6,5bb97715,ef677199,a373f255,876aa9ad,d8a93043)\n,S(c198019,cda66df3,2bd528db,e3869d6,1d1d7cae,57ced846,eebcf1e2,bcceb8c3,b0a9c52,ae2b2625,7699d3b1,861474,4d66f09f,8b795d81,acd3e5de,902b247a)\n,S(950f54ab,3cb421f6,95404b53,9b1f4936,6b43e61c,7bf9879d,168027bd,f58dc386,e14586c,7f005f5f,21e122bb,2a35194,d5d2fcfa,4898c279,cc296b24,9b48b2a0)\n,S(5b20af8a,31b69820,a56d0df0,c7374c8a,37805449,81e0c017,83b4ff49,2bd40ed9,7e49b8a1,c5bbcb32,55991da7,99613598,cfab9d8a,82f731d0,dc2f52a1,6ec39c55)\n,S(eb8a10cf,3777670f,437f55c0,2ddd8681,63da41ff,5b534c63,ffb23ac9,ecaed755,99c18d8d,df2ba9a0,d46ea92d,8b983f50,c16f14b9,86b955e,a577f332,10533df2)\n,S(12977f3f,d75a9c72,81358c91,73664b40,8d8ccc98,45153ede,c62b189d,8da2b176,f24f505a,75761c5d,939ad836,17f0c6,dfd8a2f3,fea04721,9078e2b2,1aa317df)\n,S(7a591539,ff4fc3ce,2e2936d3,50d753fb,131ba419,8d034c65,e76d0744,c159096f,c95d8b25,52b3920a,6341ef43,5e3e797a,446565e0,652a562,7e0674c7,ca243425)\n,S(993061ac,819fde52,ae500ed7,3277ecb,fd08930f,8adff61d,f5f9c3c6,cca49640,d54444ce,748f6058,10051838,52f0073a,8a5d1477,f14111d8,b623a316,a67ad06a)\n,S(cf807c40,c5664fbd,910a31bd,ed3cb7e5,2e54d1ff,ffcb4b43,7a579931,6f803051,a5d21e6,6fa9b5a8,2882b77b,ca66b6e4,163d579a,d245d089,602274f4,55ca9881)\n,S(9c0119ba,461d003e,c6fb7a01,2bb32b89,ec819d97,8fd4cfec,ca1c3b2f,1f14f0bd,b41c5fa,ce1e9a54,f1605e84,61b5e6ce,c11590c0,15838059,2c511360,f4b537c4)\n,S(56ea3259,5d97b7f,d7f9fe51,b525d73d,3d77d483,f8bf8460,8d874d25,aed3da3c,f764a40,2cc9278a,f1ae6369,e1723bf5,f0a15a47,992f8fe0,ae33752e,473c3058)\n,S(2851e3cc,2fa6752b,e0a65326,46aa8445,71736e1,d22a01fa,ab3becd6,50460acd,ad778ace,631584df,da4730a4,20242779,81f9f829,cb18b20f,8ce727b,d62d64b7)\n,S(1674559a,528fe0ad,5aef46f4,eeb4e0ba,34b8c2e8,c23d3409,5ec1e164,ef351979,afaef98e,ee2ada75,7be9675f,fee76686,d2350972,a9d1b80d,fbbc0719,efc38b21)\n,S(ede70ea,37946f71,848d72fc,7a98102b,f9c167f3,219671ab,1843b5c6,8ba6d7c0,920d6108,6929e5b8,30c4fa,eb155b4c,9d324001,59d748c9,d7e74980,d54be37b)\n,S(fd3b1f22,c5037c8e,93f4f9ac,27ea723b,3d3e861e,694ef349,dfe51f83,50ac9fa5,cc02effd,6df18244,fcbd177,a624ff17,b0da8fec,fd60624a,3d066be0,9c466cdd)\n,S(72f037df,352a4619,729bc550,e23ad7bb,6f2d7977,7d39ae36,bbc1d45d,d6e864c2,c4bfcde1,2a5cbba3,7e047070,5937c2c9,da702040,bf49cb5,c762d60c,e8fca76b)\n,S(f17a9b25,601ec8ef,e320558f,ca832789,d0d8d558,76ff7c53,6af0f84b,ca799a61,c90583c6,2a863567,b0d8c41,e47c3d8e,7e196a1,9269a409,31a1eab8,f1402837)\n,S(ea9fdf49,9e201fbb,b0a26a71,1b9be2e,dd17b2d2,b96390c,4aa2dd00,83bf5c86,64322654,c8bb2a83,ab0cb743,eb907234,d8503fe7,381e17be,c17bad5c,d33b4df1)\n,S(8d5d6f0a,24aa6e3e,7dff42b9,ab8b22aa,656788b1,1e18ca35,b4ca6f19,1d50de6f,d509a2b5,e9800d5e,a7d1d047,e945e693,2e5c1923,59bb0210,1b2e8956,33e0257e)\n,S(25ebcc4e,84a1d22c,f0a8c980,8252d96,7dfd528a,808ea293,ffcae94,50e1fb81,3127af8e,4012c2b5,c92e428,2e455de1,681eb1b2,6e660fcb,4ee8fef,b64c6101)\n,S(c55c17a1,dcd8fa41,8a3edb5e,c2da8678,4fed0840,522b24ed,4bcb85c8,cc45c20,7d583091,25261489,44b56fed,17b07906,9d156fa2,e9bdc462,eeddeebe,68f4f463)\n,S(f4297f59,21a867ba,1e58b9e1,def633f1,18e058d5,a7889721,f0e4814b,7e63ecce,a39f359e,35a123eb,5fb66d81,f117858f,b0557859,aa2c388,a8298d11,43f137a9)\n,S(626b0a,cbcf0e7,daf7d218,74f72be4,8d824883,4428bfee,f82ea516,c2d1b98d,74ae6867,1c27a642,53a36590,5247cbeb,77173b07,2e429de2,3ce09730,8d54ddc4)\n,S(8ed35ae3,c02c5db2,acb516f3,2d3b6823,61964f2e,701889ab,26dc9512,ed40172c,aef4c71c,e241be56,63a091d9,e230463d,237e0717,78b7b6ba,a63688c7,6c694334)\n,S(5b082ab8,963510de,46c1cc49,4ac6d3c6,dfa25f33,8627a00b,6b98121c,73899ed,cd8b2b84,185718a1,c4686ff0,7cad18ec,fe3d4532,9537910d,31458086,c280bb32)\n,S(deaf505d,b08a282,d5274de6,43c5719d,f51827e6,2ed035f1,74279276,7ddc1158,c1067344,5e4c0d47,ad1ca85d,713a5916,1aef6960,9294d738,103b945a,e99ed1c4)\n,S(eb62dcb4,d820019c,e865129a,28b98b5,be6c6e16,a80f7c76,db3a15ee,31ba7aea,e78eec22,be4a175d,68b2257f,c5adbe46,fbe31c3d,5eed4736,2304d80,ae4577a7)\n,S(6c58cb64,7ef638c2,337cfedc,a9345837,597ac142,577b2230,7d231a3e,5a9173cf,563008a5,7b823427,60bbc400,5f604024,92f0bcf0,2ab2430a,5d7accc5,b62cbcd0)\n,S(106d8978,775a41b1,12f07815,7c3bc5db,bb5980d9,c745806a,b5ca5ede,8b468d51,bf960349,6f7d7906,141bc4fd,b1766102,e8dfc49f,decb469f,75dbc54f,21338dab)\n,S(cd6124f4,21796b6f,44c34982,8b536ef7,44bf30ec,6ca08142,e959a35e,c0385224,97ccdb9f,2896e815,19bbe9e8,ae491e61,e83417c6,6db8b6a9,bede3aca,f6608ea1)\n,S(2918b2d9,b0bd83d0,b8d02815,59219c6,bd708e2f,2139ad0,1815b1ff,ae60e03c,f322596e,c56984f2,e7b2ee90,8a9bb56a,d213f84f,3088aefa,67e372f2,76e2a233)\n,S(6d3fe999,acc04d13,2462f14d,680a90c9,89b747f2,3601d779,507c36ce,8c2acc7d,a6c7413c,36b6399e,58a443b4,e4137ea5,551a9fb2,c5397457,9d55b48a,5df0e30b)\n,S(bd74ac79,8b320aaa,e3e51123,9354d4e9,280c99c2,809e88be,13980305,62d55d52,73477881,9b9067a0,78b40108,38ae59f4,3f6ef064,ba35209c,46a9f0dc,aaf84597)\n,S(303f6cbe,866b4574,9d282217,1f571fb7,8c54dbfe,901f2f43,681ebb0c,76e5700d,b13dea58,d3dfe08,7fd043f5,8e63e565,85230d6c,273d9e3b,22145e39,afd6ea4a)\n,S(3bbb0824,16a2e3bd,e328f013,154f18c1,4e840030,707057cc,f4fa0fae,ff56181a,18b214c7,823b0cb1,76375146,7a49bb8c,ddc0047f,782e3802,be12a119,ecf0f480)\n,S(ef42fcbc,999a3f80,b4e7319b,1fafc2c6,49f51845,2e423c55,f57e5e1e,f8338adf,786ffec5,60464882,48641155,38aac187,ced4678a,cee2b9ea,eab6ae61,ab2061e2)\n,S(afb21e4e,c095bf31,34276f4e,f1a4883a,6038c20b,a7a87ba6,6288bb1a,3bc6f77d,cda832eb,73dc0e9,fb77315f,6cc7a313,2212c7b4,1075a290,d5917033,62363bad)\n,S(329c98f5,a40b81bd,7d121b90,78b50bdf,bc16c9bc,47744368,34a5208f,20d39d63,dc14f7d8,4bd2a1e7,22fdab98,1044d6e5,98515df1,7da5536c,7a95866d,8231a)\n,S(6929a4df,e15e7ac8,e8a9c5a9,3544af51,aa621dc7,ca04038a,9c9cf603,8e081754,e1333f46,e4d1f151,f2b8c341,d2ff90cf,d36cf73c,6f441b4c,5c0ae272,6a25fbf3)\n,S(f40fbdb4,27d2d68e,854cbae0,24ea5980,5948ca40,e3fdfcc3,3efea0a4,57e2bc24,33493d84,41c8945a,9e291b58,5e12789,34990a7f,5fec49db,ea1ff605,4bf8802f)\n,S(220417f3,d9fb32c0,1439e473,d638856,9b169c38,1057b780,c9de7d12,e30dd796,4cd93672,5abc4e39,89e64ed1,af9b3d4b,4732ac76,a6c34d6b,23274573,8d765a1a)\n,S(dcbe3dcf,2c0120d9,4d6336ae,6158bdf2,859cdb03,8c76ea3c,cad4ed11,13ed216,670823d9,73c74725,ce929318,c2ea650d,5feb7c33,c7831a26,821f2614,7db7d8ee)\n,S(34de2319,c535a31a,87fd9b70,33c363e2,8ff754a7,9e0669a6,37230443,228ab3b8,31c65b12,cf6f4a9d,662238b0,c8ab52af,ceb96acc,35b90b2b,81667b8b,dfd9895)\n,S(f0fb2bde,a5626729,720ff432,542c5e41,abf0fbc4,772aca7a,75b882ab,2b364acd,114edca0,74520c9e,2f5b8059,59c5273f,25d2e621,d2f55709,b42d187c,932b6bb8)\n,S(90477ee6,a00742ef,78662c11,f3725077,dbda7b66,7ba55b55,f9bfea1a,4c5f88f4,467196ec,638d137,33971505,f291dc0b,b9d0f3f8,f284e3ab,9035273e,d9c7279)\n,S(ecdef6b7,455a41ff,96cf943d,e489858c,b7abc526,e41d463e,b24a56f9,dd6eeada,1116e7da,9fe72782,e8c656b,9f677c5b,dfb3e46c,98957c30,49efd7b6,dd5d3258)\n,S(58d30bd1,d8dbf5d9,885b6e7e,4f28ceb8,381415eb,3851a031,ef04b073,65e16598,9cb96ab0,546246fb,f5cc0878,7b99db0b,26c9bdac,184a0eba,728fbd26,bc880480)\n,S(a7587d1b,771b3421,f56e342a,cca98e7d,82c7dc60,765a481,53379da6,fd341c10,9499ba9d,8351d194,213ba35,43d4b563,aa28bba0,9a6d8811,9b55f389,90742929)\n,S(8aa99d89,9db3c7e1,c28bfc5e,18abdfbf,d9fff46c,560e4fc0,cff65ce,e18ae6b0,aacbc2e2,bcc4ae58,1e354d29,617afee6,20ced0ff,859c62b6,669cf2e0,565a9bef)\n,S(45d81a7a,b4158aa4,2e45fe7f,3966d278,75f8647b,defa0c8d,a761ebef,894ef249,93a76905,d0e785f2,db52e09f,573a461f,183f672f,9f10005a,eeed6e0c,d40d31bb)\n,S(de19bc8,6fddeed9,909eff4,80b0760b,66a1a245,82e33be4,55b8061b,225942f9,6eb2c1f6,f604056a,15c4e91f,789e35b6,1a787abe,aded0f30,abd2525f,19486d00)\n,S(653f0e92,977b7830,fa546dec,44f05549,80f5a9f6,61f2cecb,7e360efc,41d16380,58ba9f7a,eb7aed3,40b54d7a,6f9ad0aa,ab5eaa2a,7715d8ec,48d52ce3,c3c57128)\n,S(c05441fe,2ddce6b6,64270b69,83d44d5c,251efcb8,2bce4665,9388eb3d,537acce,cc82b7bd,3a049b06,98feacc8,11a1c9fa,e95181d2,50c0c62a,55a6d662,c9587d65)\n,S(7a569bc6,a089fbd,294dd5d0,b10f3a7a,31b6bf39,42ee97d0,49c9259f,7adf0a7c,2399d17a,f6207b8f,20286fc4,78896af4,5e596b09,7c97f662,9bff0c03,14db53e5)\n,S(1c4c7a37,4e14ce88,fd08a1b3,10025711,7d96878a,e173d29e,1ac53a57,1d6ae794,919f9b82,e827cc78,7352f0ab,99770e97,bfe1b600,40cf1034,b7c5178b,3d1104fe)\n,S(fd4ef218,a09baf70,57b53f65,2ca1e2e5,8386e867,521dc998,1bd4ffdc,619c31c1,b1d2e716,64fec6d9,3cc8bf17,70ab5f10,a49a0497,ac1586b7,b8299f7a,e92354ce)\n,S(f012612c,1f933373,ac30413c,1b2cfb9b,6582957e,b74e4de5,29c0267a,e7552a41,a38b2418,e7ace7bf,3a15035b,a68f82b5,aae49192,5783066e,f0f0263d,6dbc86fa)\n,S(8e0d504b,c9598eac,c4bd2726,8b3ad24c,a22b7534,32eb5a31,d7e54948,d57f6f4b,50f59455,ba1ea3a,5a0cc105,a1c40c4b,72637a31,44bf9438,a1e3b52e,7b30911c)\n,S(8635604b,89ec22bb,b3b4e266,3e76cb3a,976cc78e,c7db31fa,fc16a7ab,411ed197,8a11d457,6868d117,4f41c40d,4c82d27e,3960d57d,4b1309a4,531c2617,b1d90227)\n,S(aba7addf,c234513b,3e861382,654959c9,984628df,72b2a896,6459b3c4,86bdbd2b,ddec8263,bfdb4c38,c9e7fd,e4693b0d,962c6e5f,a4f9eb9b,9561e81a,f04a3a3c)\n,S(12aa3b40,44f699c4,8ff6c598,8a7ce56,84f3af85,8cf2ebd3,4d59ca7f,f7501895,76397e3f,3c42935b,6a42222a,525c2166,7662ea00,25decbf7,8a856391,a03956db)\n,S(e01136bd,da38f328,af447a50,43a48606,a1ab5a86,b3bca98,b13a53aa,c7061098,76f3fc47,c1aedcc,bf26ec5c,4f6ad56c,fa163212,65844d01,8d2f2b94,184b64df)\n,S(639cb266,f0672340,d0a789a9,41eec287,b60c380e,f2f62f96,41b67137,4b286aa6,d381e7bd,5dffffd9,50645e56,63c36d91,83210038,d70df2ca,4bbb837,e8eff508)\n,S(eb12f18c,89a6d2e6,5e07d20f,f7acf3c4,b903ce68,5237aca4,5692c0e0,f6a4714e,d26860ab,e6f97745,dfb01cf,f6225c36,bf62e5dd,24088d54,a6d44384,e9eed86a)\n,S(8fd06b6d,96f37c6f,8e69187c,c5ace64a,6e36b45e,37de82b4,872731cc,8781e941,e7dc3254,3b40599e,852d4e9b,e35a5438,ff68b063,3b81c8ff,c2f3298e,931e9e98)\n,S(d248d914,4ca3f10b,3fb66763,713492ac,93b42781,9119683f,bf0e0f08,1bb6b241,e7a2ca15,f1867e9a,d19ffdc3,f1a20d0f,2469fa6a,e04f94be,a289d019,c405318c)\n,S(ba2150dc,15884df0,34a64e20,89023947,687d1322,475dd073,b163a4bf,4eaf0740,af92a566,a320a0a4,34095dc6,f02f765f,4ebdf04e,d81e2c04,a86e6e2e,923f8c94)\n,S(fb12f487,225a6843,31e39309,3133f377,a6f841a7,f6f90ccb,18ce3d39,48b56616,e3358a9,406905b7,d6bc0a33,6a89a5ba,e62136a5,4135c3db,bb32f115,4cf92b9b)\n,S(bdeb3e38,7c36bb9f,c45a1d62,f7128217,20e6d0a6,55a285dc,da87af3f,f59e0644,b23fb389,3cdb280a,43275691,3c1de5fa,6da12909,c0ebece7,12c9da49,69a3cb29)\n,S(32f3ecc5,925ccc13,f753ddc7,d5c0c576,e80402ab,ffc6dc77,6e8bf74d,15735007,f950add3,926bebef,9d8e3a5e,4d0ebbef,24b54dfa,ae7c12d1,32b6e973,dc67c050)\n,S(94a725ed,e57e5162,817d95b0,54e2732a,3afe3a6,52ae3e46,ca9de38f,6dd9f0fd,805f6634,f8ba79b8,ecd5f46f,74b741a4,de5f9678,d29b8cba,eec73498,27671f67)\n,S(22197e54,d35357fc,ad20f6cc,986216e7,f24e6dc,cfd9bb89,3e5c1ee6,9a99b3a4,b3e7edac,abb1d1c3,d375f361,1f04a927,9d2995c9,3e18e7fc,4b5dca90,a2a3fe17)\n,S(a51664bc,5a1edd2a,ee8ea644,7beef61b,419e20ad,ac955847,5e1d666b,1b4dd52d,b8a95fad,e3aeac7,bcd8670c,78dd1b2b,5dcad225,277ca5bd,f24f131d,94405c39)\n,S(896a11cf,f9db64a1,aef51088,baec42d0,16dd5a99,98262f71,a005cdc8,ae8cab78,7a7263ea,f64962db,bd09a278,a3958708,e61c4858,1a759726,c225471b,20899077)\n,S(fff75552,46da269a,2124d03c,677f59a2,18b995aa,e69c85d4,3b29f81e,5201a757,dbbf1558,6670c191,9da69467,6e8906f3,80eb3f61,34c656b2,a4ccfc71,4b3223f5)\n,S(89da8ea8,56f946d6,6e9b07f3,db5b2ca7,49a07e5f,78b59c1b,e52e46b1,3793e198,25889e02,d2013d86,6653cad2,7b3504d1,4e547343,fec74a37,a3ee71a9,646a36b3)\n,S(d260dbae,6ac3e8a1,442ca7b9,8f7118c5,7d6cef72,783c0b3b,a4ad7e7c,3a8836fc,e00ee7fc,95131cd3,3a446bf4,c21b85cc,45a8e61d,2d9d6cf0,287996e2,77b7cb6b)\n,S(bacf90ec,75ff002b,c1a259f0,3c9debe5,9f5f9dd5,cc0cbff9,e8fd62c,4552a619,82dedfc1,42202786,a7a12a29,22937c0c,23bddd23,4418979e,78723ff2,6a9e5e88)\n,S(1ec23fa,995a22ef,53a91dec,a5b2faa9,514b5ef8,faf125ad,da61f84c,5b13a397,1568ab1c,cf75692c,b7d41c53,2dd4427b,ed7043e6,cdfe01a6,2f9bcb47,cb97435d)\n,S(48225de5,eb07155b,dd86e759,9e172a3b,b96f69bc,ddcdb051,af2dc769,f4450b1b,856ce939,b81d976c,6a6c249e,c0d087cb,36e28082,ba050de5,4948d92c,6693f4aa)\n,S(e9ac9963,16c1ff8e,a7d2bbf4,148c8b3b,a869d4e1,290168f,b3831d6b,3bbd164f,2b1ac664,6bc87e3a,e6914792,d0bda8b8,5cfe1107,3d0447ef,e4a65acc,6eac846d)\n,S(8af31ba2,af0b68c9,4290bdf4,b4b80345,5f52ee89,f4ddbc98,1dda1000,9c1a2ec2,a37cbc1,a5efc09c,dc944f42,a66a305a,b302eb17,21ce5088,a7deb46b,5223f0b6)\n,S(1d211de7,d75d4389,4cdac235,9b0b9e40,6b71b8a9,8c0583a5,7d7a0056,b3e88779,3ae4bfde,20f83eae,96982e96,62d65443,4359b2bb,df249a85,c7c83b95,56d7679f)\n,S(be6beeec,18aa8d77,20100975,3dc7d745,c6d49f9b,ea64ebfe,b8fdafc0,92a192ac,c9e14aa2,4bce41e0,f444030f,ddbf035d,e808bc06,63a70593,454ba287,4ebe50cf)\n,S(b126dd86,555491a8,e2ab601b,2f133960,d86a7f9e,bcd2c88a,cbd8764f,1afee3b2,d22ae79f,fbc60439,baaf2c2e,418edb77,70837ebc,a909322d,b5580c30,27c20821)\n,S(857b9c62,6350cec4,f928d456,7d30cad8,6f1cfad,142b338d,74a137ec,61212791,9d3dc070,f610ee55,cfb9cfaa,4bffda56,52f7fd18,7f354634,ed4f2dc,d27f9ca9)\n,S(bbb7d30,3e242e87,2e94e3b4,27197ebe,5252c363,43ccd8ca,940202ff,fe5775ac,f2b5b210,a40d1fe,140f8638,3a5b0f9c,96885d5,d9857a3d,252523b8,d59d33f5)\n,S(3e90a10c,a61bd12a,fe9caabd,e52dafbe,8bcd332c,e0ff8bd,7718b685,89e26447,3a4d342d,fec7d557,7cc52bf9,d7c60537,50150146,8a05baae,7b562dbe,b626a952)\n,S(dc1f2531,d5e0d304,66b963fd,7d09524f,c66e6bbb,3855b6d3,141db170,9af05fa4,f1644b11,e8291f92,4884d3ea,cf89d857,fc98c3fc,e49fef96,7986e8e9,d67c9b0e)\n,S(2b4714d1,fd0aa7ab,6c103ae9,19493efe,4a503d5f,beba56dd,93a8c9db,485c1dad,d65bb3c,47efcc3f,7484b6c0,9f51605,30542a81,d1192ac7,5d506c43,16f41220)\n,S(c9ffd7fa,3b14fce7,c2946111,e940ab3c,8199b7e5,40bface2,5d8e3b0d,d1a15176,3b40f328,a4539bd0,a0b71e5d,91a881c8,87b31e11,453d9f5,82066f44,ead8d5a5)\n,S(e019b0e7,6b4221c0,e45d387c,6ee41bdd,ed5e219e,a7069b73,d92b6339,2657c39e,792691b8,4c8748a,cf10475a,955aaf5a,77328c6,f03c2e9,bd1b20be,f363f368)\n,S(51e07e1f,e8dc56df,f6394d1d,7f2887a6,9e7959bc,ca10af77,cd54064e,6268929d,c09b86d6,6837e473,574bdf95,f0b99851,b97a821f,6dc622d0,d9c6cfbf,18db5ceb)\n,S(c5c19c69,9a9b6908,4625d3b9,5c6598cc,d1bba7a0,6d4e2f91,88f1b77b,4aab720c,af066357,107d856a,51c699a0,259774b3,352f8c12,988201c3,c71bfe3,c5d8280c)\n,S(7b51ad32,ec4a6df5,f9c952e1,fcabd8dc,7661ec53,2631331e,5205d231,533f8d77,e1346672,ebbb97d8,569a12ae,fea65246,e1902f0a,9cd91894,a4b8aaad,5a02ad35)\n,S(be3059dc,3789e16f,5ca8f6e2,c469f834,bcd3fa73,5d84377f,907cadf9,e7eb895a,5a6fa277,ee5d317e,81819fb1,11f40778,ab437567,48eed726,238ab5c7,f4d6ef06)\n,S(cf75a66e,810f3284,52e09fa3,15451289,e1cba33a,ff1013e,4702ff1b,92b6f587,a0658bc5,8c894702,ec5c366c,5a6b18fd,86269d5a,8117dee3,601dc40f,cc93f17b)\n,S(6356c70,7d5228e5,253f09b7,7020681a,fa64dfd6,3cabd703,91d7f892,d9822737,3241ba88,cef88e8f,98d19fda,717904fc,737a9c77,45838ba3,97141964,946ac7b5)\n,S(90d7f09f,7b8a1232,236b4459,b031b0ff,d5e8c903,36a35f04,94a89615,3baf8554,4a612ce4,b18b7ae0,f3c557e,c4ab51bd,7c32f26b,24d0ca7e,accc748b,3a2db676)\n,S(170265f9,5a3f936f,57a39e1f,a748a3cc,902b1b20,4306c49e,f4485b15,555f80af,d2f813a4,b329da9c,68104a55,301eb7cd,3ff6dfe1,c4aab9d9,d2fb03c9,e7ae2bee)\n,S(2d6316de,37598fe8,ed6e3e52,ac47d442,636a6553,64274692,5a468f08,54377eea,e064f40,7f0d3b32,74a61d82,d7b75006,6fab6447,e66f2d4b,20439303,cdb3a107)\n,S(8c89678e,73f3085a,1a766e14,f566625a,cc29dda6,3eb7bc9,ed1195b8,5fa2092b,12b42d8e,91c9640,b8b2509a,157229bc,a66d28b8,157742fb,a12d7405,eec110f5)\n,S(ddeb928,de6424c,f9ea76f0,abc208f1,16731596,29fdb2c5,c8e6ed28,38ab6b11,b1395663,9ac1f06d,74aef36b,61916872,7709eaff,d8b76905,ca404459,325839b6)\n,S(485e8e44,35c46bd1,d0c2a4db,19b958fd,4a87511a,ad4aae65,eec4f5ba,6cbb38ee,e621d1d8,736d6df5,df2db5d2,36887c27,a93733b8,d3232dc0,95d0b2b6,d0be516a)\n,S(bc527a44,2547aca1,91fd98fb,84ce7b3b,6210378c,46f7bd46,bfd375a8,1b61206f,ff7c1cfb,d3c21616,85d6f405,e6f19e8b,6785e6be,ce374189,4efc149b,b3031707)\n,S(9911194a,7a75269d,2fda7214,21e4e2e,3666ad12,3e76004,b5ff9afe,9ea89ca8,b1f350ab,c87d942f,1aea75fe,6c144ea2,fc5cc040,5c38af56,9ee45413,17c7bd4)\n,S(93226535,e27a96af,7953597,4db1d4d5,4a65d3e9,331fc3df,7f028fa3,288c3189,98007e66,60fc6673,5e8e864,afc62171,49168a86,27d35eea,2d02d90f,e6f15331)\n,S(752d352b,2459fb97,d5a0c46c,3fef99ed,50ebfe74,ceb1c881,b2fa518f,3aa59e72,c6e99a8a,2544731e,d932a164,ca0def49,dbfe4f29,f8894133,ff5eed02,66c4fbcc)\n,S(ab37b416,dd06a595,ae6fe33d,717c4ff1,fd1de2ad,6c58e2b3,660e872e,aac7aeb5,182f07fd,61ba43fd,e11ad355,d7027fef,714c9b9c,364c0b72,1838ef7c,f85d9470)\n,S(d2fa3ff2,b1cd8909,52a0d380,d43233f4,1eef04da,aeac6ceb,46dd8e6e,572d170a,85f3c854,3eea0e64,b8a9eabf,18057700,6c3a6f70,a790cce6,24a3f6f9,5752c520)\n,S(e256c5b7,99ae8dd7,1daf5a7f,3dd94f94,e040d98,291a2d6e,9b398889,addff0c,b4375e5c,82517974,b515ae28,54c83443,e8bf9391,cb975013,727e3bc5,1473b133)\n,S(30056648,afaac00,c1d77bd7,e7b5235a,fea2bc8c,58b34a6b,83e630d2,3036db6c,16ca5c30,6882fd6e,f7d82f93,b25ad01c,eb3e9e69,b8280f0e,e3aef2e2,ec204600)\n,S(8602fe69,d4b1f32b,e8422928,200c5b5,816f08a1,759faafb,29861e07,c5dccef7,59a5ca0,35490ebe,66409e2a,283f4c9d,f6e0a7c7,9dd1ec82,f31f7e4e,4f23ead0)\n,S(53bb9f5,ed205516,36ab170,7afc75b5,6ab3a75a,3d360c15,3b0b74c2,d7d9d64c,77c6c1ec,c7a53dc3,8c6540d4,461757c8,b5f7b66,654fd754,fbfa8f5a,a5318cbf)\n,S(badc41b2,86982d76,e5374b3,dcf023e,dbc1e187,70cd0b2e,2916d436,108a4328,b1694651,a69dfad,924fdf5d,526c25cd,e732078f,31128556,3d42ebb1,3329e2fb)\n,S(15b43026,f5134b3f,1ad441c9,793b9e57,a318d455,fd6f10df,e4b0bb91,5d36600,43568550,60fb010a,6d5123e8,b446a1e7,cfddb6b4,6e4fb18f,245a4be8,f9975a1a)\n,S(fcc64bd,c9df17,4d4e8e18,cad6116,a48780e2,a180f7c7,57f532da,9fdf37e7,ede37062,35eca482,b935410b,6d495f53,12b133cc,238eeb6d,e8e5f593,65601951)\n,S(f394fa79,254fbdc2,7a1b31df,1f868c48,9b48b6d5,1afab542,2da5b1f5,6f3edd2,f56d3d7d,e7f8d9c5,fd45d6e2,cc2af300,fdce3293,9be5b975,9d81cead,e2000e7d)\n,S(3c7c8c54,6b853a5f,97f92932,5558793a,e1debf3,3f680d5,6a79bdef,d4608d91,575771ed,f26feb38,a728354a,6c4023ce,4b019d65,3f7adfee,3c83cf58,9f2fe4a)\n,S(51d61258,43b8d621,6c0880d,f04f34d,9acbb422,d8194a98,dcbf222d,cf27fc4e,2d0bbd0e,ae299afb,93980894,bfbdbdf8,6edf9509,ea408286,ef602cf0,ce3b33a2)\n,S(14b17f35,ac7b5914,e08babb5,5aa37cb4,26d3bd34,f2c1e4f,45acb493,8ef51a65,a9090e25,cd8273c3,15d1ac6a,15eab027,7981f6bd,a85fb082,2b24cc88,2918fbc1)\n,S(59ceb93d,d78ff6a5,f45c5fcc,7c1ecd72,43f2d8af,e4ba8a3f,fb03053a,586387dc,28f4d0e6,38ac1fc1,98aa3548,56f4f19b,479ff825,5d150f29,871630ae,f82f3777)\n,S(273bc0a7,eb63a0df,eea8d7ac,b24a5200,a7086078,388db5bb,37a0a6f6,acf24656,a971405,a287160e,22909b67,357fb63d,10af5ece,f725b1ac,17c7fc73,759936f3)\n,S(c9b5b690,3a45e529,3a298219,cca93e0,52a2719c,25cf2f50,c4ff7f04,5f346475,7db09fca,ff1aeae2,dad001ff,1fca6166,a607eaff,bdfc327b,9b63e2a8,e97f665d)\n,S(90044bea,c8459e34,edf7c40d,2a101b45,66728d1,cf0055ee,c8ea07ab,e39307f0,19763d08,77d4a896,ca9ecbc0,56d405b,5a6ebcce,1ff6ac26,593be19f,63caf6cf)\n,S(6e0898bf,bf6baaef,d085f41,da7e6b93,6b6c9a88,3728dc7,8ce7d71b,fd597b2e,4769146,91587abc,c2f21e05,4542280a,f7260a72,e822edca,1e63c089,3bea3dd9)\n,S(e94563b6,e0156145,ca2ef19f,58de9727,7b806969,a249629a,4f024b99,8a023792,c8949547,a4d25901,f3980cf5,333f65f5,8e1797d8,b42ccb0b,dc550e6d,5909927f)\n,S(3cd027e4,173c2799,54d06c3c,ec05c0d,161a3b73,348db0d2,8c03d097,8921ad64,f0d1a3e8,ebc3387a,ee88189e,c1fb3f6d,5e73e895,7b7372d9,32b00144,248271ba)\n,S(4c96f51,2b4f0758,38335d47,db599db9,a2dfe1d1,6783960c,dedda119,693d5686,4e840262,66897288,9bd54c15,219ae871,e6426b67,afa949c5,e1226bbe,1204dfe1)\n,S(8b03ca2e,458873,963ba6b,c9dcd14b,59fb1190,3f2330cb,22997bb4,19002fbd,2b29df15,c6be49d8,27981ffe,aae26930,7a461f84,8285f561,4f910508,eb865781)\n,S(f4217bd2,32229dbf,39066a17,c2524838,38098362,f0891b69,275dede1,f8e64f0d,7581350a,957f480c,89246800,86c2803e,99ff5037,938e3e19,22e3f9a6,7098dd96)\n,S(247274b3,d5095d63,132673ca,dbf0e418,898468d3,9a30c538,a46a2719,42846bf8,4265a1b7,7d1dbc68,956f2441,9c4d2b70,9e71f6e4,6e24e336,a978285c,22a84f11)\n,S(19c25b9b,97f40ddb,23d62bd4,a298ce7d,befdf39d,327aca47,61815c0a,28d4af9a,a9b5d705,94cf4c7e,b7e947e2,101b18bd,fb9f2f20,fc3bf89d,f5a63d7f,61d3b3ce)\n,S(fb69718c,baf0c5f8,e20ca98c,2fdb18f5,59df27e5,c2a064fd,ffb2785a,73bf27d6,b612c590,4e0b1c54,7beb4e07,82ad2716,84eb895a,862b59b5,cf6476b8,af52107)\n,S(9fe6e793,ed1aed77,d8381352,84890e3c,f817ca60,37ee80df,6646a3ce,9c316a6b,17214a01,99370a88,41717ae5,41d35a4,96f8f041,e9b3fe88,4188f6f4,e30b0657)\n,S(c7f7ab4a,394f17c8,47010e9d,f1764fae,6159b140,578f70c9,fe50703b,aaba62cc,9673f262,c875953b,90558dec,8ddd04a2,6d7d3ac1,672e3d10,c1a3c656,b0318c19)\n,S(cc2e30bc,2d63d4d2,bd0f5bca,8faac99e,a6add123,82d014c1,d7bf8285,7ede2297,cb87a21c,f1efe789,fe72ca0a,b6acc5be,63e6973,2ca899e6,fb9e05e7,72d4d8ff)\n,S(6fe7070d,a78205ea,1f12661b,4538d0fb,60b4bb4,9c1709c9,e53de22e,c3c25d6b,2f6b773d,492a82f7,f9609cbe,e1af3c9b,2940a12f,1e615c1a,801c02b2,19e6b8cb)\n,S(1affe9da,ab5da7f7,9b331e9f,91eb7e3a,f4dad51,2317ca45,3ae13528,66013d8f,2706d2aa,d3139097,73a0febc,191c7a0a,df2ef168,c65e759d,7c034bac,49c8a92b)\n,S(13566dd2,d0cdb199,20a1f9c,aa1ab581,c3ddf2ad,125c13cf,efe199d5,bc338231,b403ab04,67df46b,2efa5b8a,4cfa8bd,97399c87,12ffc55e,cae8de52,d4f6f28c)\n,S(135fae69,9a969720,b1c0d899,790afa99,83074584,da3ee8dc,1e011336,dbc3636e,b4260b88,2dc79423,8cd0fbe6,5242147b,c96690da,c391e3cf,d2c53ecd,2ae9fc60)\n,S(1b05d97,744364a0,5432de4a,7d840834,3ffe211f,a543bccf,71a4b210,3bb0489,d61c9d21,671b2481,a4ca0c36,7d4ea919,ae1b331f,a8aedb87,cc6b6c98,85616a9a)\n,S(2877f026,83a5cb48,7014da9d,419c8b9c,920f0940,718e2d06,d7252de5,5b46a84d,849f9fb2,88d3fdee,de734aaa,3592ef01,483e02d3,62a5e0ca,2ead6c0b,42628038)\n,S(8a7024ce,6348d2fd,84be71ab,b363bdb8,86ec6a2d,29d9cd83,1934270a,27370b78,8f520972,9e4e1325,363a68f4,ad53737b,688c63dd,1cec6cfc,bf9da51a,98b29c0)\n,S(5ac77dfb,2309c061,8f68b320,bb6eb76e,4b0f0792,b8235fc1,ed768c57,44fabb1d,fab11baa,beafeab4,43a14a82,f8d70228,57752732,7b016b56,32b924c9,ccbb1db6)\n,S(aee4edc,93413d53,45e0df68,99fc2193,be318a8b,f279f0e0,56c0ac42,a60759d2,b6a87499,1dc68ba8,503beb0b,8a6c09df,cb9efb6b,a44aed6a,3cd7befb,506119b9)\n,S(b51d3e77,741d0d44,3a67b5d5,67b45aac,2008c25b,5196c71d,c9f910e7,b76dd2d1,431c7ea3,cf4f577f,950d22e2,74b7cfdf,2c2934af,ad0215f9,459a802d,ddee4c21)\n,S(803a2ff,c59c2a94,65d8935d,93d47653,86e5beb9,c8e702a,12d7b565,98a09841,d5e02ccc,5d8ccf6e,29a7fb76,5a257dc9,c902c900,a4fe16d1,53e9187e,290efbeb)\n,S(22c17725,44eef514,5636a398,23e874df,8c58bc6b,6935598a,440ae9aa,5b738075,a67f431c,688d4426,c519be32,9b1dd50e,2c64648,4d3612f,35d52089,c98dbcfd)\n,S(ed67feaa,5aab50a9,ff71c434,855bafb0,5191f036,c691c8c5,563395,d2053b86,b2d13cb6,4ea821df,f8829ee1,57cb5fca,81dcce75,d091719c,73cc7785,c443f0a8)\n,S(f8cc5ae2,3b670b9,3c27ab8c,7d8055c8,4654b427,f9e6b733,b083fecc,c7c5d375,7dc996,7bc3a2f2,f516aab3,682f8d6a,32b84173,ecc742d5,c8a15c5c,72eb261b)\n,S(838891a1,fa46e300,a20fa3d0,cba3fe09,3326ffd7,bcdd7c73,b6e96da,5d591332,d46717e2,c5fa3d52,a268aa9e,a85922e4,547ea986,3a37b1ae,b77d75b0,d48a8fea)\n,S(92caeb7f,400d043,6d36656c,8ffd5d45,6097cb51,cf512c00,1fe613e,8dcd5544,2096bc03,dfd088ca,25cb9aef,29b24b99,2b2aa00b,e3429cad,c0976a3f,162e47e2)\n,S(2e6226d,574b687c,20dcd4a9,683697f8,afce56a3,1e11cdef,6f0ba6f0,dceb89b4,d9c4d7a7,a7aa5f8b,f30f0930,d6c3bbdd,b1963b1d,8cf24796,141bddb1,ba8ffcf7)\n,S(33aab3f4,17d936de,b8c1f07a,9fd5024f,802fa5b3,a593a6b0,9fd42871,75f4ee7d,4c13dc95,7311dfaf,932eb4cc,68c82550,3b185530,13008dc6,878dd092,50edca9c)\n,S(ed74a882,a947da53,fd62a242,b67dcd04,50896a43,e9882c84,ada77f47,691e5fc4,454a18f,a8fc6d8d,e673410b,213875ee,35190221,9f7cf88e,f363be08,571030d8)\n,S(b5d3f084,56db930a,7d8b4728,2caaf807,be7bca65,bddf9738,67a56224,39723ebd,a89e0271,28d5872a,f4d6b4d7,c5a7efa3,b0339a32,89a12918,2077c106,b61e1a4a)\n,S(5e40e90c,1a01e008,d5fde186,283919ef,eb859921,c3ec07ca,e34eedc2,b0f07967,e4be6ef4,26eb3c94,70ee3084,f431c68d,82b2df48,5286082,82cc1b2,afe77900)\n,S(2f4b14a2,674a743a,4aefd302,7fb214f1,a7678336,3c9e7c8f,8ebee72d,c5f29830,11b13461,b6578710,677bc733,3d28e773,c78dec4b,27ca1aac,a17121b0,de9868e6)\n,S(71909162,35890bbe,6a8f7a99,5b1cc3c,a68b3ff9,7551d09,59a97835,5b7167c7,f9aa3992,124fa99f,167f1351,865a1456,8ed9eb92,c7cb2050,5082d228,4b1532de)\n,S(8df50d7d,d3cf99c7,b0269ae5,e70546dd,bed3f05e,260bd834,575d56e,e65f7f0,835405bf,3c84c4ba,5e253fef,f306bd1c,c1240ef,8c03da98,d7c092db,3a2606ca)\n,S(5e0f6a7c,e9bc1e0b,852841ad,52045b02,b4fd545b,f2106c82,17a76bcb,441173ee,ad70f065,4d75c88f,e6654d56,fe65c57b,857d91e8,ad6abff,148f3577,7afa2aa7)\n,S(27880a25,21a78fca,cddd0b78,5a3da1f4,2e832641,8f804a2a,42fe3c0e,f69b43b7,ac9f930,12402aad,c55c12bd,e450700,b0208d85,a6784586,d04f1c93,6df8624a)\n,S(6578c4a0,dc25e068,97482b12,3f38cef3,39cfd6b2,ec06c89f,6da11449,de5e43a5,8a249d9a,41e6c1a5,a776ddfd,ea93ba78,15f2e908,b8b854c2,3a7e3ff2,cb99bf70)\n,S(c66e890a,71beeba3,301bbbef,2bcf4cdd,def8e634,dcf476f4,6907a280,df3dd33e,f3510cb8,9c46f493,c4a70976,34a9c502,11532929,ddc883ab,d43bd360,1b028dff)\n,S(393f0dcd,24b47380,81197794,58bf5e48,b2f5479c,8efd8925,a1f78bef,6bd16665,9898d880,e24f840f,f1b4662d,3d444c29,6527cfe8,2b6f1b4f,f0e5928c,bf09de74)\n,S(337fc469,43942ce4,f1601877,874366fc,a8726f4a,65a9bb26,c6c2c013,856a3adb,95df242b,2d4446de,b2b792a4,d36ceb2c,add17365,380d78c6,3b23b101,1b3be914)\n,S(b7edfbe5,118cfeb1,4c1aa23b,48154dbf,5e9d1057,a2758516,7fb8e030,a457874,bc1e5723,dabdfd76,c98f408d,1d8c13e5,7dee979e,83b3d610,981b9718,f1e61eee)\n,S(4dffac46,6a507b9c,2e2ee5b6,ca81d8e4,d4e8aae6,3d73395b,dd29b024,51436e5b,af227fa8,ad0bfc48,eb469596,b9b2759b,f41eb169,1fb8f896,1451489,ebe0d5d7)\n,S(553ab99,3448879,b42c72e2,97d597a6,24416a45,f5b35720,c93a303b,c6dd0e88,5ba2d3fb,222a03dd,c5302b25,ffce74cd,58de90a1,c3e41928,19717c28,52ad1b39)\n,S(b351ad4e,4c7df853,8f6f71d4,e95554ca,3a07932e,7a812309,b0b0c807,f98cea2a,5ba5141d,b3d4ff44,7efe06c9,c624d447,1aa3c3f3,47af74af,49929de8,d8558c70)\n,S(844b9bc0,ae73df50,e5b80fe2,fb24a35c,dbc91c61,2753c2e8,e3765e1e,47d44263,80eeb80c,414c3a08,a42d89b8,87883d48,84b38bd1,40f7bbee,e977ff5b,c4c57b90)\n,S(f64b4ef6,8fc11491,38ed4ef8,ab2d6336,3d494b37,b56649d1,5d15777a,8cd315b9,c6f83010,5dcfc707,f435cfa0,b6bc32f3,8ce8afb6,28bf9139,dfc47279,cafa56a5)\n,S(969ceb7a,441f8be1,f16c94bd,6065db17,942f88dd,e5506742,7cd30dee,cf9ba5c7,a08ae62c,6e6758f9,724baa45,d35f3e03,9f636265,d841b61a,f1b31d20,bc8d65f8)\n,S(e465041b,78c33311,d4397b30,9a8ba4de,6b312d10,ec2ca906,583162ca,1c599102,3f21d5d4,416f1954,7af1ba97,6687dea3,520ac304,43c180ad,3892d46b,86618f55)\n,S(87b2e548,b019224f,b1021a06,522073dd,46892847,308fffe9,910ffc28,5b702bd0,6e641d35,9e7ff12b,20123b72,f0e5ef16,338c3418,38c2f4ea,6dab94c,7c3f6940)\n,S(f832d7b3,590a59d7,ec2c8a63,7ca0347a,893fe461,4eaba097,8707c353,8296ee14,3fb3e845,4624fe35,326062b4,a6f30c85,f0e7101b,a3532455,7687812e,412233e)\n,S(52aff21f,fe1819f3,7f8b5974,ab004393,6e99d8cd,8342b7bb,ad46d333,5e4d6651,66d79c3c,c7d08828,d8646e4a,6a44853b,4a49df0e,85c95e85,d9c995c2,d09b427c)\n,S(aae62778,8069bcdb,fc91bdb,946cedab,63896817,575a471b,315a47cc,d567c678,f254c548,832d95f8,4f20215e,ca4805fe,356e806d,9b3b7338,7dd36e85,214b70bf)\n,S(fc15d494,b6580e0d,e1c769c3,95c5d047,202e8d07,ba94bd1a,f96064b8,d1a4bfbc,f9327fc8,75319184,c1876748,bdbbdd3c,bfee8baa,bf46844b,af465d4e,ec6be335)\n,S(aacec857,fa4bc62c,82790a4a,496206f2,d79a31dd,e17d2db2,d99619d8,c3d880d9,6dd1e4a2,adc502ac,150293d9,42a1cbea,a576da49,f1de7d15,de70bd67,d95c5fb0)\n,S(c7ba3155,bf34fb9a,2441832a,27396e1,99836557,9c9cb856,44c3ace2,9ade66bc,afccc814,243a1fa1,345fa46f,ee4b4190,96082bf0,7866fa8a,2a887d84,d24192f4)\n,S(cf7a0525,3bee95d7,711d8f7b,7b301f5d,8036a487,a55e3860,900b25b1,c4599115,e8a4a9be,7b9cf99a,5dcb4db9,8249350b,7a71a12f,a9582620,eda5a35,1a8a0484)\n,S(a4336248,6b999ad1,623c4c32,c79ebb3,4e8d6f3b,484f808b,9a088ffb,2885a11c,edf8eef9,74d3e5ae,2a991a28,6323597f,5a161f9,2eeb9256,207be548,f9b38d16)\n,S(d3cdbd98,8cefc8ac,3a442587,51364a10,649243a8,d4a63927,f4fa3b10,b1a7dcc8,f10e26c8,11f4a219,da4f948c,51e8b81b,d8bb357a,182031cf,40ffb464,d5f7d7c4)\n,S(fa038534,28dd093,26977fc,da344269,fe3c61fe,35567eef,909a2309,8e5ceaef,f31c5d30,9e234b3b,44fbb52b,8c973aa2,bd85afac,1f9f0798,788721a9,380d8606)\n,S(718c2bc,26dba98f,24f34af5,18e18870,5510c0a7,4e228cd6,9d4e39d8,a00a577f,c41d0d81,8f093246,5675a326,d0615b0,294b8455,909af0c6,e557195e,11225152)\n,S(378ade51,463d949,1ed22ab1,834cd7bd,6b99a123,52c65e18,70d5005b,e97e602f,76469796,d7758ba4,b3bed1eb,9f8389a2,2a421f5a,20f8df71,72821a8a,508e4c1)\n,S(40bd7df9,1255680b,b50d3d08,fead6815,5f807759,87e9cf80,15e6359c,9f138b8b,ec0417d4,2eb1ab50,a469a853,edc65ca5,2fe00ee7,53b30b9c,56536e3b,36144e8a)\n,S(f01b30bb,985dfb53,7bb4cd62,18cb0b00,b5a77215,4d84a802,8a4969,260d963f,3cf483df,d6b58eb8,46e8ba1b,f06c2e9,6784255a,2afbf68,613f39f1,44b82417)\n,S(2392d86a,1bf9a636,38eaa5dd,76a7c6c9,eabd50bc,9f2ba568,183c0995,f7195900,806cd3da,ac23f93c,3b11cb5d,a3bc4482,ea49ed2b,444c6e64,dc557e46,3ac5c033)\n,S(b0e7747e,c9496fb,aa7798db,e616fa42,5b0b7acb,7409265d,c989b8e9,20087133,32fa615e,d0286b64,b83cbfb1,e8c4b133,85527655,48071401,89f42d93,330491e1)\n,S(8d1342f4,2f6dc3cb,9bb741c1,9daa08e2,25fb6352,ffe860e1,76a26fda,a0601624,82d35ed7,57cb6f31,81af31fc,36f53817,191fb9b,c9338a97,3757d0bf,50d79d77)\n,S(ad09dcc1,d3ebbbd6,ecd7be45,d7eec5d,ef743851,2ce076e3,cfc4f8b9,449a2ccb,26bde63a,e1f7fbd8,46260a64,372d015a,fd3d5ae6,125dd801,523a94fc,8421d04f)\n,S(128f5199,68435c1,a27591a3,2edff533,d12a725c,f0c7e121,260cbb74,925cc292,dd8945f7,42f1d013,92152dbd,1e4dd8e,53277da8,bab68acd,8c7c8d73,f5d7e190)\n,S(118c1167,196e8eac,e519d83d,17ae1e30,36ff1fa0,cbd1cc58,41cc3763,d1d8a931,eea348d,54f47b73,d5d8c2b4,7eb7604b,53beb345,c82ceca3,4f8639e1,45b2e3b2)\n,S(81ee4bba,6a84edb1,83e1f2b7,5103e453,2ba9613a,b612e0f1,27009ee7,7be3bfb,e58208,d152059b,73b42039,e0a7a489,df067fab,1d1c2c04,9eed00cf,893f4847)\n,S(494a821f,6f4b2d75,7e5be34c,fb9949ba,b9271599,3e060005,dd807c83,adf04f2f,8ab15e9f,c37d368,3586a1ed,ef9ddc59,8dae7206,499cf53c,31a8cc4b,d7ba15e0)\n,S(3749271a,da87c292,724a3ad7,2861a7df,9757e31,3c3156a1,72cd3735,608c865a,aeffa1c1,aaab4f09,3998b4ef,e046aaf0,f404d590,d6cd762f,1aea5745,1f8aa3f5)\n,S(103c8721,321ddfbb,cc3ef6af,1ea8fab1,3de6aca0,294dbc79,3a1e4216,563dc1f5,fe9cca2d,b459596c,462fb268,a8115880,16c2894e,e8839caa,362e4813,e8e827cf)\n,S(ddbfc655,6aff403b,10a643fb,f62a60ed,656baa39,b10febe6,92140bf6,7b78f2f9,1cd4169e,cc8ac589,de57b5a6,e02e03df,f3cc7bb3,45993d5c,4ea57e6,852a8417)\n,S(d025f583,3e51a9c6,a1c785c5,1c579528,5af0c297,c0fdb82a,f555fd59,88dbb28,5170614c,110f31ce,d88424fc,7d569f4e,e93d5017,a8c676af,c7261ed3,340d22ef)\n,S(3f349cbd,8ebac9e,c570b0ca,29fe8ce8,dbd98eba,103f131d,daaf193,4fe78516,ec9641f3,175ed56b,d0c8f26d,188f9fa4,b38d069f,cef8f4cf,71acf66f,1ef7dbc9)\n,S(7624599c,61e71532,a177e838,ba92d789,5160e43f,ad798fe2,9170e6d9,bbcc11ce,409e8cbf,6aea70b8,21533902,150148a0,7e45dd61,c9c8d24a,b8cc3da3,f03c49a3)\n,S(8a1e1b47,3c699dea,aa418ba2,85cf7467,51af1cb0,8bf78228,932dc6ed,845403f4,1bd300a2,7a9a8da,6ed2bce3,73b9d39e,661d02bd,b4605740,20934bc6,abf3c483)\n,S(eeb91c38,d9b834bb,5e3945b0,9655b988,96efff11,1e3dde8c,add6ef2c,7ea51b09,899d841,24f83b43,e2ea82ad,3a6411dc,cf36fa86,17bdab35,d83829d1,456c56be)\n,S(46360f69,8c023375,6f050969,60b3defc,2a1897dd,44e0e159,d185ac04,3315ef47,ec02a6d3,828246f0,684d2059,23ba73ee,10cc88c9,575fc005,6271fb8c,67e0a4a0)\n,S(16e5cccc,b410c20,e8de1e76,e5b71649,64cabc26,f629f8be,36eff4da,66f875ad,a80de48e,e079d9c,bac312e0,70f10d6f,fb875c90,7dd3ff57,c9bf8b90,57c0fe14)\n,S(c315230,c8ee5bd8,429efc06,bd089f49,5f4c5a1e,2fb188bd,81e41bfb,85acc82f,71430e8e,cee9c6f5,eb91eb14,20e07b5d,736217e5,4bc25cac,9767a749,a477599b)\n,S(7731eb8c,1684092a,d9d2ec69,b50339d1,19436082,c9116366,8ce2bda7,ee80c0c9,e6636efc,22a4c339,f8100dea,a227a709,42d18222,8cc58d13,ae4d613c,a879de8d)\n,S(2c1c200,4a5f04c0,b83d143f,ede81755,67d4d54e,b2dc4ffb,de00b83d,9802f68b,b3e2e434,30d409cd,26490c1c,818b24ed,b10e835b,d6292422,45c529f7,6e299159)\n,S(2d984bc6,a2031a3e,1a57d0ae,d13d798d,fab45382,d29e4a7e,8e029fdf,2a9d95c2,b169c34f,9932f02,8320ed87,4a74da8b,5cba81bd,f20a9454,feb315fe,a0926720)\n,S(f61abdda,f7673f75,74e966f1,c77096c7,7f6e8659,746e45e7,2c9fbf3d,5e0db5f6,1717dd6f,86edd17a,b242212c,91878ef8,9ff1b865,b32b4e24,cfdab7de,de90937f)\n,S(a68f5871,bfbce14a,1097eced,68a9e906,c94599cf,b6dd4176,ef946fa7,e5552c3b,cbc07a08,86faa82e,d231eb0,739a24e3,62a717ed,30b0512b,96ac8dd9,56ab05f2)\n,S(52035076,1af3e786,60906105,36a2ced0,6f8209d,a0eb2757,cba705a3,467ccbe2,7a01b944,5f63cf43,cba95191,262b1b53,ae0af9b,4b172b78,3970f84f,f8ace09c)\n,S(bc8f1537,9d4b9862,a437065b,10f6c28c,8c3323f4,51f2847c,63251000,c9f144d6,894826ed,61d85e90,58c00e74,cc731dd5,d62684b1,ca996c07,ab176df0,e4b951f7)\n,S(536b0cb5,81dbf6,ab3b364,64a397d7,2a513bd8,a7bb8237,70a725d2,2eb12a98,85bc95fe,6e160f2f,9a31b7e2,74c09023,90cb2f4a,22f15ac3,3d0ee72a,b666f5bb)\n,S(267840ea,e2f49fe8,9889bac7,40eb797e,ee42f922,c1821a66,163a580a,a0df90d0,2c7fe7f3,4e06f09d,a1a2b1ba,79906a0b,18c3d51b,d9b6011f,688c69e9,1504a00)\n,S(d8fd79cf,6beed8c,fa57bedc,ca06e367,e0667e9d,a057222b,81fba682,979808ec,39cab613,9cef186a,248562d4,fa581384,d6c81de5,a0f7fc49,140d0822,f6126034)\n,S(601407de,9ecff4d0,836228ae,eeaa612f,2b659706,576e2eca,74bc32a1,d3d14b7b,6cfde694,2f0e4495,1e25ff02,2f2501e6,7101828f,8088c7bc,a8ef2b25,88036ec3)\n,S(f518c5c,bc0e8541,48c40253,d500a2d,1ea1d25f,d31dc777,d6365050,d3b26804,8dcc6378,2b1ce6fb,9f15c8fb,70c5fd0e,53e4d80a,cf38261f,49a558e1,de637b6b)\n,S(16a9bcff,334e35e2,80258378,b2e25d9a,56ce58c3,b3426bd,da82978f,370ee6f6,c7b6656e,baa3864e,bfbc5294,fe9836a9,9fdc095d,ceac6a32,642e6911,a6f3e933)\n,S(9d940fce,5ecdc659,30c945db,7151b823,a9259d0a,2a3991c9,f71e8b00,bbe35d4f,32f533d,d96f2e36,2109a96,48ef55b2,e5887387,80de97ad,c7974227,b23fe647)\n,S(19e973f7,69c2d02a,8bed34dd,b7591828,5036e724,22227a81,850f3d31,3128f586,f2f5fab4,fe79c177,752ee60b,cd85e625,e459b50e,de702010,a6fbcbd1,5b31aa6f)\n,S(ff07bc26,473271d6,4371a4d2,9b59f858,b1b01e40,472bb4e0,1769ed2b,66bf2097,3eba7660,492ae09a,abd7bb8,c5d80e33,44539ab7,276edfd5,b599b02f,27c60b8a)\n,S(175f786c,93d89acb,8959d846,934c21df,5dc4f6ce,a9c1e150,e7da469f,d27e6605,343366e5,7f5b9f7a,407cd566,7ef1f0f2,464a2938,61fd5f2c,b0363a5b,dc9c2f9a)\n,S(a9027f8e,b662a7e0,d70aa1ac,d3e0b9ba,d4e0bd8e,8bf8c883,40b0a7f5,cbafa761,2f9dfc2c,57bfd835,271d63ac,e3cecdfe,f6e19e0a,fc19ac0f,71ef9ec2,7fac30e3)\n,S(677daf40,728a6c89,6804ed3,1df283e,19b41c2d,36a3a98f,d4b93fa6,6699983,1affbe57,3a561872,37dafd1b,bdcaa594,e499b298,6af58591,c6a2ea3a,2016c039)\n,S(1105aff4,d4761b77,68db74ca,d9fc7aa0,14c5417e,de1fe641,ed1dcdb1,9b5a3690,bfabb1aa,76906ada,4a1ea463,f4caff44,a41afa71,b82e2457,d2756ddd,14946ff0)\n,S(3221d033,16be670b,e05ecc94,8b537ca7,9318eb65,f93ab3e7,32e7f36c,bd06249e,92f7b5c9,85ba3fd8,7b14a093,74d4ef94,130d3642,517369e8,f9de5fa1,c8ccb803)\n,S(ac10037c,ad83fcbe,6aa7acf2,3043ed,831dcdb5,66921f16,246488de,6e012fc8,d530eaa8,ebe1d47c,8e57892d,9301c4a4,29b223b2,7344e433,f2bf77c4,d9a20205)\n,S(b3ea670b,f5001657,913d5d49,ee1005ea,65fdd33c,4ad81987,efa0331d,b29a3e53,6d758db6,df4275e3,fc148e91,6536505f,6393daef,c54c3b0,b708e0d0,8de3f1bc)\n,S(42762d8,bf60f678,924b7cf5,4e8c513b,fa1223cf,98e124d9,18d88cd9,a54c8d88,96be42a1,f0dadc84,64a3522d,e13f10ad,3272505,f7d4fc54,e6dc1a33,ef6b2eed)\n,S(7b9e0117,167c51ed,c3f7d2b9,edb61bde,aa90efd,88349510,c4b1cf1a,43a9ae6e,c43e0d1d,8a673cb,1f0d9d1a,e3a4c985,bd47a068,2528ac36,67976881,1ead7a4)\n,S(1e807fdf,c69acac4,ba5be7fc,9c617005,d34ff896,dae25e6c,428abb96,3255239e,7db7d6e8,8bf3b869,fe4f7c11,65d85faf,55bd677f,5670ebdd,89d2f8b9,f56d972c)\n,S(9aadd434,75384190,a6289f2,32cc6491,fb7a1d86,b04ae9ea,94dfd2c8,449c3961,fc491907,3ffe94d1,3b945382,eb9c482e,9da5a764,d9aa1d1c,c3d973aa,5edcd3f3)\n,S(5012b7eb,481fd85,db13c3fe,2bdd06a,720eb4c9,805193d2,b99b4bf7,39802f26,db8555d7,e2cc1858,21920564,3c288352,22086161,1a611dcb,d1e98518,7c46cd4e)\n,S(78f9e5ba,91071270,5160654e,2393cd73,85e4681f,8efb4a45,cdce5ef3,d73cc7b1,24c4512f,911101c9,d3a4fe24,b7468585,36cb8137,e13578e,95cc016b,96d86e20)\n,S(91a7d927,4de2c0fe,84a10579,891ea8cd,f87fcf5b,a0939411,4612efd4,6bb9f826,d5a5e511,b85436b,89e46211,ec69dfa8,d0ee87eb,7c0daa31,24d48462,10e6c40)\n,S(3940b4e9,4626f86d,4592b96a,4f27f874,c37c6cbf,5940de,37dafc1f,35350b69,ecc6176c,43df3f71,cbf0160b,697afeec,1a9a0d69,5ebdb7bc,34b0efe9,2cc68b39)\n,S(76e7ab54,8c63ee6a,30c736ff,11762061,283af0e5,5a7dbbd2,23fe467b,85c95d8b,f266c922,fc5e61f1,65bf521c,33235e05,113140db,6a481b0e,e4f9976d,2696fdce)\n,S(ecdc2e5d,b8d5028f,f93de09,c9f5a6b3,c439b14b,3c322c53,94622a13,80f04067,e70df9f2,bf6b0a35,9029f937,5e74aa93,4014e78d,e68e29b0,9d96da05,5ff78112)\n,S(ccfe93db,de087d5b,9194b286,99243dc0,91d4dd5d,7189a5e0,d5621311,9dee9a94,2b0a0a20,cfef0c73,addd2dc6,d9b4ba7e,9e44f2c,26d9f376,8ef90241,b2d907da)\n,S(4e82a200,e64f5b3b,3e473e50,e437c224,e21bf875,ec8ac364,7e599ba7,84f02574,ff696d9d,2d9cc0be,217394da,85201a1d,208e4309,9b9372a8,19f6d069,88839c0a)\n,S(a292e105,6f3f0a1e,e816a49f,51ef4760,91324316,2e3c734e,802550a2,c942c17f,479a2e95,7a05a686,1c08df3b,221ed2c6,5d192181,189269fe,9ef42a8,e71fd6ef)\n,S(47279a82,8311aa4c,b6138c9b,ccb2fc6c,c4b9d27e,2e334389,1773fc1,ee09f461,2480a805,496e8bd3,e02b36cf,8081bc5a,254f821e,40c0ef48,291ecbb1,6699a10b)\n,S(b903b4f8,2126fe06,44976643,5f0982f4,394db57f,b473401,9536740,595562fc,e8c97572,bfae91fd,61cfee63,3b24bece,e587291,f65a6aff,b71c6a3b,615e1361)\n,S(16b9e3eb,eadf469d,368ab368,431afb79,214bc728,5df165e6,c3bf98a4,701b05a5,26e74ff0,64cf5de9,ec3d084f,8d75337d,c04918eb,f783c65e,b50b948,d48eb003)\n,S(4927fd2b,c17b92c1,3b3ca52e,759324ca,353e8505,ba81ac24,9003091d,1cebbfa9,95a6c16d,c4c52f20,2883ab4c,a9c050c2,b2849b71,e19e0df0,8ff495cd,f62d73ac)\n,S(70c503d,93e47,10262c8b,b1630409,979b673a,79ad08b0,8d855365,f51ffcaa,2ad207aa,5fe05144,95baf3f0,b0807efb,d10265f0,5de63d6b,563e4ac5,e70b89ff)\n,S(cf598642,32972f7a,a6cf12ce,dc5aa95d,4bd0f96e,38ed546b,9ba9040a,e25a9e6e,67f2f83a,f5f09b52,caed83e5,1b9d6de0,58a6e9b8,96d1a6ed,d7ab4d40,30332027)\n,S(617b9e5a,8d0b8c44,b186aa60,281cee51,dc224e2c,9e1c4f07,c342a180,78b271f0,b64d8d5f,bc2907bf,90b983cb,a6126586,dbb7e7f3,d95993e2,2bc1b8f8,9472d200)\n,S(d52e0c90,c69cd94e,3c849ea7,dbba79d8,6aed2a3e,3ca3f106,d2baa2a3,59c50534,36c8390c,fe400769,fd2b2fe1,b6af62d0,7fbd667c,fcd9a132,b6b4f974,a7e454f7)\n,S(ea474a01,36d16bc2,fae6f568,9ea3c035,aa6580e6,b238f42f,e2ab19be,81330a46,d09379ce,aa89765e,1164f438,4b0f0ef0,c1e8be86,427c7455,af98e4b5,c9ee8145)\n,S(4e5dd22c,b6a4b205,97f71375,cc49ee10,ba6b82cf,b06cf065,a25d6f5d,bef51d70,d4ff2ed0,55279f96,344dc16e,10e3410,40378ff8,b8d912c3,a17cbfb0,70588cf0)\n,S(774587f7,f3038136,131fa9eb,f1eb3407,9e473a8b,b9e5acb7,317ff5c9,17447878,9d3779a1,2b067b00,d2a2a3e9,46f8078b,e6279024,d94c83c6,28c0cd48,145f510e)\n,S(ab807569,d1a3630c,e5447b36,c205e601,a6a23069,4d2c0786,19d9b97c,e0ba6611,2b9eef15,54f8ee6,e11af6b,6a1d045e,d47b8821,ec84c6da,366afe10,2730e9ea)\n,S(91602928,ed3cea8f,4faa254c,28962b68,c4437602,3076a5c1,6bad95ff,3e328049,764faf56,2d8de3c1,89b7fef7,62012be8,112db4,a3201692,95c7e76d,fcbd3be9)\n,S(6c1ecc2a,258a44b1,ca1d964b,c86c5600,49fdfd98,b362c35e,3c830647,cf1266d4,1f9d3edf,5e0e8550,e4534c33,5b07d731,19c49c4e,29397f6a,938fc1bc,ebf8fcef)\n,S(e176821a,4006b429,999de3a4,ada09166,f6e5deaa,f09fa613,60bd3733,db8f7084,7d07d1a5,390325d0,27b05e18,d90e7659,f5ef4c8c,c7c6dd00,c7a5427,4ec91842)\n,S(2ae0b70e,53536893,8a7faee5,da5d8dbe,e5af4873,32caf51d,7bade79f,eea50df2,e70be2e8,c8110c31,c3eb5e36,31dc5a5e,bebeb184,e6b9f081,bb7236dd,cadf903a)\n,S(1c686fcb,d7a751b2,d420614b,56d37c8f,81c9a600,335fa911,835dad8a,7c663e24,4fe2eeae,7ea1b639,b893329a,a65bbfcd,b9fd8f07,28614bd8,6a5b0712,76aa576)\n,S(b369d7e5,c31c9a56,f480b44b,3354be,84145c3,97dbed68,d87a4c3c,be31dc5c,50800690,17d31473,59bab021,c876d152,c17ea8e8,b5c95762,c749a2d,29adf3cb)\n,S(522d3ac3,42a0ff3a,9a8eb5ba,54ed4dad,fbcdb48f,53bc6e1f,2c0c12a5,61cb1e9d,32ed883e,1e1f562a,50063d79,45075ad9,9ab55ba6,fdff0d58,9d2b4a4d,10df82fa)\n,S(7d001803,7b722a7a,17d74696,fed9bbb5,f3d5f6f,d8a623b6,9c952a2e,f2be939e,81ee30e6,deb893d6,274c4b46,8533d845,38073ed8,68b101e9,515ebd84,70e368de)\n,S(c76b074b,b228dc24,1dc9b704,75fcc52d,a3f3bf0a,5e954910,ca4e6f16,bd298983,4fcc807b,4c1e37cb,6a6c42da,b939a7bb,6f1d5ec2,87320d74,408622fa,ece22266)\n,S(8497f267,99c7f525,83c620f6,e284a9a0,35130556,9d7caa1a,f118de41,c51b05e4,3b861f56,16ce6234,c6847273,16bfa629,7cac9d5,ff562f66,24b26146,413960d1)\n,S(ddb10ff0,a217ab76,241a587a,8cd46cdf,ce6ff5ae,e39d2d85,7f47eeb7,6d2bd68e,a4110196,fd0813ea,19846dc7,12537cb6,8faf9333,19e7e49b,553e523,f07b004f)\n,S(47eb53da,455cbbb9,a8330e12,e0210d80,cc565661,348fec72,529390e2,a75b812e,88e4a8f,91ada187,5734dcf,42b85e2b,a3f5fc53,1f1c1df1,300c3d5f,e811fb70)\n,S(eb0a8903,42fb2710,a4c7811e,78384918,dedea7a2,9bb7da46,e49211bd,95da1426,8d69a88b,d85e2edc,d8264cb6,c44d8218,1ce8946a,818c9d4a,6f757bf8,5817ac56)\n,S(d400c8ef,655d3879,579ba4c,488c3e55,af5af95c,1701bd15,482b2549,9334906d,e7bafda2,5a9f5934,6bcec6e2,a9408f18,e81b76f9,7a9d721f,496c27f6,42725e5c)\n,S(bae81c3d,1772e104,66625f8b,ef08d4a4,5f07892c,72bcee05,fb7e382,2a6261fc,4ce5f14f,74f28b03,34a6cc64,452b9049,8460493f,3b64d9be,2ecf98ef,c0270377)\n,S(7f575b9b,46bd0f74,555a363c,d80122c4,232e8c53,a6624d8,e13b5c06,74986961,edc0ffd5,952fd4d3,c752271b,7cdfaf3b,4cefecd8,66d722f0,3da1e97b,49aaa080)\n,S(a86871d9,1292f7fa,7249ee8,e77270fe,e7bddafd,3255b4a1,16851ae,411293f3,c21ee1b0,bd897d82,566cf438,b66439dd,3dfab0ec,3c7a4038,ccb86039,3b0b0187)\n,S(c320cfdf,9cbc6579,8c8b33c4,d97d690b,64ae90c9,a5070646,8c8791e9,1ee4a18a,8f1a295b,2a3c8c5c,3b5bd8ce,e3380a04,819a8658,7be87d03,73a0194c,fafac74b)\n,S(169a1b4,f2eacec2,be263ced,2e0576b4,ae77b863,525b2a9f,f8fc05d2,c07a8fc4,7703f867,d997a2ca,bb697f87,b97ea986,78777183,aea81417,1dd0946,309e77c)\n,S(218de686,ed51588b,1307d8b6,54f7f6fc,e673cb37,553d23b7,b8c23367,d6b7ea5f,98325ea9,150a100a,f5d2af49,2fa25b23,40ee9606,1553c3d7,edd4d870,5288b8cf)\n,S(c7c2e438,d12ed0ac,6363564,8bf2899c,d1b39b1b,200ffeda,4ef9cae0,5d8381e5,93a36085,fd09ff08,b83d50a8,3b140edd,a63e2442,e4bf4d1c,7ae44963,c1646f41)\n,S(12e834e5,605d6e35,8cbe550b,8fe917dc,59194c58,66b265cc,50b00e3c,38fe058,6a44ecf2,17f46865,2e0991b7,df3b3565,444e7e29,3a2d6378,61a8f3c1,5ec1517e)\n,S(30f33c39,af77735c,749fd328,e228ed67,bd625fbe,79dc3b06,ab31c173,777308fe,29a00f66,1c998f1d,bd62935e,44794420,7ffd7b1c,24f63806,9206e1c6,5c3d9604)\n,S(c5bd81b6,b057e687,19c47964,d55ab996,6c7ea99b,25c1c2cb,50d6fbd9,af492358,5a6b1332,8562599e,e87c475a,1e7da886,c460ec67,ad81372a,7ed39498,41225e5e)\n,S(1fd0e769,9d931a80,dbcfaf1,46b5cebe,b9547f8b,b7fa75fd,b2bac9ae,ac0908ab,11770838,88607506,bad87ba6,38c9ae26,d79a9dc6,6746816a,b9f21d64,fea96838)\n,S(ac14a06a,4679e9af,b2ea3aea,15f2749,bc9610a3,b576a506,f96fa41a,76df97de,5aafae08,5b8a0a7d,48ebb339,f4dec906,21bf5162,dcb85100,eb7524e3,a65a4921)\n,S(ad583074,13a4eba9,ceecba6b,c568bfbb,30566031,c06e8e97,5c5d992b,9ed2bd33,c2bda9bf,d5c87e0f,a663a40,34162dcb,29b61800,c1dcf02a,c11fe615,25af1772)\n,S(5a8bd45d,6fd468dd,41ecafd5,aa072227,6d0176be,81b92061,b4277b73,32acfaab,878a8d5f,7903d74f,6abe28f8,d94d4767,3698a7e,6acbc32d,9e92f9d6,bf31c2d5)\n,S(6690c9c1,d9666be4,56d3540a,6a2ed706,372256f0,43265478,7b54e56d,f28df74a,7ad591,23772578,999c90c1,24704c13,a7193b62,64240aef,63d12d88,340762a4)\n,S(3c051303,c113779a,6137f46d,38d1175d,8778e460,8b1e0abb,f7bc4539,80b64a2f,9d4d04a0,ad1c772b,4a523c13,cc48990,c733eb87,993cdbaf,61dbf75c,4f6a96c2)\n,S(1fdff503,66319168,f5dc381e,8085ac92,223b3484,a8b362c2,26d1f00c,976f9f04,5cb328e8,56aaeb05,62017bf8,65da44b2,94ad7404,df11e117,8426b79c,25a49fa6)\n,S(ae83da7,52ec2098,a4a593ac,f99dd58f,cd48da14,361feaae,6cd992d3,96b4fd8e,6dc92b41,f1e1474b,a259e96b,ec4f2b36,108745b9,a500ad9a,edd9c828,4c3d129)\n,S(c0f86e7a,6c0fee54,a2f73d2b,6b1522e9,fee994cb,d5089886,d98a4748,161811d7,4aea0b92,2441c184,c347243e,5ad5a064,ba00768d,52d7153,a5e0838f,f497d551)\n,S(8e5b23f8,85d683a6,a6a657ed,d2d2f403,1320d4c0,83340126,d2958dc2,4c5f5ba2,25c6db80,477f37e0,ed6c6e3c,c96b1c7c,f9a7ca16,8e940e8a,b2946c7,3b02e61f)\n,S(6672b4db,bb16c672,2592c239,7d9ea25e,f081d48d,aeb42c89,ae6c42bb,af09b3c5,a3778252,e239ae3a,f64e3b91,7f646181,4f71753d,b4bc958c,b5bcd3ba,4b5b1a4e)\n,S(e0af1a1,b894fe1c,1f7de814,1a393a3f,b12b31e3,fcbd8f2a,356e61f4,402d76d0,37913973,b4de9a2d,23f4f795,709fe825,8eee8aee,afec5996,83d924e7,21fb9b0e)\n,S(94355dd3,c3d73a1,cabdbe7a,295cb015,335a5a79,dd301718,10c245b3,d0c840ff,31e96abe,22a16033,56681d3e,e5e8330,628d8090,bfdcb925,79074cb6,82845475)\n,S(fc340c8d,1e3e2849,1470dfcd,1c2fb445,e807e1a3,9c525ce8,141b292c,596d2e36,738e7213,7580eb3,615b7eed,9b069cd2,b644447,24696a,7cd22257,7a931464)\n,S(c0c4e03,61d923fc,4201872a,1ff525c6,1697412a,7bea7a92,596e9204,f1af90c3,25c4c2c6,d6593ef7,ff5f04fa,a5b0b2ca,736ab33f,5c36dc63,433821b5,382fc4b2)\n,S(81afd4a8,d666b97f,dcdf0d36,f2dfdf7,bf7c3322,69728b75,26dcb3aa,df51365c,b7fe7653,2c8d48fb,8c3d0382,68d57839,edf80cb5,732ae303,5c1b51c7,cb8d3efc)\n,S(140b32fa,62130c2f,1d49e39d,15f9c64,f5cf54af,3a0c65b2,298e91e3,21b9477d,bac2aca4,c96d4363,12107b2d,8996875e,6772eaea,a5070920,39c1171b,9113b516)\n,S(17418ab7,46f1eaa,b98725ab,68bca72b,9cc645d9,cbe0835e,4bf91a7b,3939b98,dc964031,b1292c03,117a4ce8,b3341e23,da54a539,fdd31126,41706257,bb9382b6)\n,S(8f0222bb,6cbf7491,12b95780,b50077d7,be2a27ec,5bb6dab4,923cf36d,3a12618d,8df2a149,abcd276,31265890,471094cc,fe6bd8ed,b75c2364,6f7dd54e,30c4c6fb)\n,S(e3965324,1c543ba1,2d0ca0ad,88c26ace,b265f42a,41d2b7d4,f252ecf0,a48275d0,44467da5,18786654,5722fa15,36c187a6,f67f2e8f,5a424336,b0ce8bbc,a53f9cca)\n,S(6a4b614c,41c4a6d4,ba4f8c53,26d08bc4,ecbc72cd,d2415c3,b7caf285,acb07c1d,76dd92d6,3f85e1dd,685faa18,283f8667,2425de4c,95a7985a,cf5f74c2,7b29b576)\n,S(afdd252f,82037cb1,928d896,74f3ff64,57b94412,b563a4e0,1a32cf2d,1afde412,d57f319,300a6f93,1155b0b8,3dd83a5e,d2b4a0e0,5d58786a,8024627b,73360609)\n,S(65adaf88,4297a087,6ec0d433,ea82bd5b,9e3590c4,921fc2ef,d1fa0b12,cc74808,30e4ac9,77b97c4d,b7516c02,df65de7c,d9e8ae08,6146716c,3da4b26b,eca17033)\n,S(eba0dd63,c667395a,9e9eda33,93f5d101,8462b957,1aae6a09,cb723e2d,a45704e7,8314c569,49b7c144,197647da,baf857ca,a164e385,62c1cf46,bb30e7a7,a8dcb680)\n,S(d3341d4f,1f967f0f,10932a5,351c6c22,c748af09,1d547cc,2766e6f3,1a9f570c,9694fb83,74177e3d,80775206,f58b2e12,32b87c9a,21f060ec,19152435,45502951)\n,S(1596b717,8dceadc1,b5f3a5de,89c089f,62506b6e,2c6e49a7,f1cc4a11,e502079f,97157538,2aba92cd,8f009de0,9dc143c8,51b0f3ea,31067381,48a34858,8c085d49)\n,S(138c0bbb,17c63e1a,a3e65b50,3c602d8c,74178847,8dc2bcce,65b84cfc,95f7ec41,bdf88a3e,34f69fc2,415fb95d,a4b6d3b7,f159651f,36a2d4e0,b4063e5a,ee86dafb)\n,S(7d99662d,e6274432,65ab2842,a4ed79be,480404b3,1b847c01,c557e277,ee073176,e2ceda2,bada9b63,ff2fc022,44124d3c,b83dd4d1,f3fb74b2,763ecdb6,46e4cbf0)\n,S(9e3f4ea0,b1db451b,7d713eae,35802229,fabbbfd,6f6d0ab0,af7483a5,37992e63,a9023199,10301c3d,78933143,b54e87d4,1419524b,16c9c00c,5550fafd,e6be8b65)\n,S(108c8cda,d6ffc3d,b0863a66,43f0a4bb,efcdb0c7,202f630f,f971a7ce,dec3ff40,847ab4b9,8fba1fbd,15f6bb2a,4b3d1038,726c2d66,f4c9b8e9,f740af8f,5067d95f)\n,S(5258a6a,7c85d4f3,e650f0e5,1e2d8254,8a768c0a,f276da55,27ab0050,6e97e710,e5605a14,31c8941e,4f2aa3c7,9ab94e3f,ffed156e,ba2159a2,7fde377e,e2ea7e26)\n,S(c40820e7,f46acad2,5bffcc6d,745aa3e,7036f26a,b6ae85f0,e3cb8f95,29dc3f3,6ddf9217,88249ac7,6ac2c9b0,1dc5e62e,91587d15,c76fe26d,6d7c3b2f,feaf3b12)\n,S(c135f50f,160d04e,43148abf,d76509c4,e55aadc7,554e4ea5,823e013e,a0490da7,f9a597a6,b26a1485,a7d5a91d,486d099,93de9a4,6484edc8,72f8f4be,710aae69)\n,S(484be5a8,b903230f,991c3118,38d3ebdd,9759f5cb,11a9d0a3,9bb11a03,3924268,18f80a36,a3d70e67,5bd65253,a1ad3e40,a3152d55,c1141315,57f8585e,315ba462)\n,S(af67562e,998a4032,77fc5827,cf222258,cb2f23a7,4dcd0d4b,315564c3,eb66da9c,dd5bf89e,c9b2c178,6adea201,d36f3a66,771b3f2a,cfba7acb,c30024fb,fa73ad6f)\n,S(38dd6cd,475f2808,938d92be,8ad0c955,f3cf3255,c3602b99,3c177e06,553af411,1abcdd02,d82cc0f,680362bb,f898bf89,304d681b,6bc3afcf,65454ab5,8d44214)\n,S(ee37f0ab,3db1f9b3,2da0031d,48f53766,3530b68a,f47bdb87,679426b0,d90fa6d5,6cdb12d8,136fc9c6,2f025cbe,7882ef21,4e7b09dc,9fba4cf9,b021c4d6,610c0397)\n,S(670684dd,fcc19f15,ba9201b,ca36d143,47dabf31,bad07e8d,68e6fbd,2630a98e,77bd28ff,a9699737,1304d4f,82d29d1f,a69dc123,6f2ee438,cffe3f2d,358ce706)\n,S(1654f447,78026345,64e3608,bb29004a,812ea39a,d96830f6,66a92f5c,54a79359,11d91962,3f81fda0,36d2d021,607d9750,cbd30359,83c4f47a,21fc8116,ca93cbe9)\n,S(ccf0a89d,429a0274,7b000326,d62825ec,6978f24e,8f92f490,e8cab1ab,ff90bfa1,5f047694,375222bd,5968dbcf,a331db73,85b4df25,72791c53,42c62467,3d84400d)\n,S(45d36700,32ab11c7,897d648,67ed4d03,a9504461,bf28f3df,7e1276fe,4c1de796,67e837fb,37108844,2338086a,d1506453,ed1f37ff,fb14e617,93908c7c,2a8e6fa4)\n,S(9af3b6e1,627a2ffb,c18ddf33,b668fece,bbe7ebe0,986df82f,1b2fdfa1,56dbc565,55e9562e,882f6629,1eae4c6b,5a82b0b,b5bc2cb2,b8f884bc,3e45a126,aeee19e0)\n,S(ecfe9d5e,d3b9fe15,c320e05c,7e0f3b1a,5fdaa9a4,5e1ff99f,88012642,a5d45b4a,b3cc1fd0,e0117151,f53ec671,e1d207ad,5f2b0755,8956cf28,2be5228d,db5d48bb)\n,S(6e482326,6ef64478,dfa30c6c,f3a951f9,fd9d3108,dbe80e5d,3cbf2217,70f5483c,97a3f599,906b1738,372212da,80309562,d3d4179d,d2abc2b6,41ef2f4e,6561095e)\n,S(3de89149,f6c939cc,5419e4ba,f0baa93a,390f01a3,4ad0fb7b,3b170e54,60a380c6,e9a07758,1c4617c0,b996ae3f,b250b723,874b66fb,85a6d826,cc5826e5,bb068491)\n,S(d4d28193,53ace188,703643d3,84622505,d9020459,a600349e,69016cf4,faed2e25,9a494bcf,e15bcdb0,97513682,ef09890a,424d6bc1,ad1cb73f,123ff5f6,7babb364)\n,S(f694a819,fd0f2035,1193eba,c18e2db7,9c219191,2bfcc60b,6af8e067,2281095a,d80d1652,1e43f18a,4b663898,bfce8670,6f53436d,a30b0663,9ee6f99e,ca87e667)\n,S(af8595b8,8de7c459,7d1d1614,ac897de0,5dd9ff05,593dd3b6,cbac81ce,d2e1fb5d,e9dcce9c,83ee7217,857d5ca5,a48bb720,69d467b6,897be9ac,658dfbef,3d40e6a6)\n,S(df4177f6,a7deccf4,c618b710,b096bb4e,b310e4e2,470b5795,6a633154,8ae8123e,3638e20,5d42ebc6,7184e567,c177f479,18fbf9b1,e4f69435,487b289c,35c7fedf)\n,S(ef50482,30344ae2,70ec6d30,f4daea23,ce7b64bd,b101638b,5a52ff3d,6dbe9fd3,a6eec78f,e38a2e6f,a9c062bd,4ce28dde,c5d25fd5,a3204281,ae30d79d,99a2658d)\n,S(f89596f3,ddd57abe,3344080c,a6d85d0c,492261ca,7a698aad,ae00dafc,75615954,f8d7d2eb,45dc2b9e,a0979550,8d9da016,20b53a19,b4150ca6,36bf0f86,ab3dc0dc)\n,S(a7c2ffd7,50b99bde,92ac1419,57d8df27,56ca49e9,3f4c7434,b24899f1,24fb3cc5,a1672ade,aadad853,47d1440,d573e3dc,91987d6d,ce55c67d,665402d5,f8b0a289)\n,S(463f5f25,b5c63801,a6b1accc,6662e6de,5256fce7,37e1c875,2b4a880f,19ceeee9,858e4a68,39eb48a7,f1a7de4a,514fdb46,1f4203c2,65e308d0,3fb9770f,1f8f13e5)\n,S(4c99bf38,57073c27,cc92314c,f260dbf9,e0f4bb7d,1a5ffadd,a808783d,3bb602b8,aa107422,ac7dbbbb,f6e8064d,22a5526a,96bcbca9,9dbaac33,c1f35b2f,c6df568f)\n,S(f6825035,64438569,aa7a5a4b,e2468453,8d8bfb88,f7e983d5,33ebffd,f8588520,84ff2ce6,9d79938d,fd910bf0,25a2fe8d,e6013c03,74784b73,168049e,c851cf15)\n,S(62ea02ca,16b2e528,2f913a,36463494,c00df046,8afbeb34,cc9573,b71577fc,36be98bd,2c83e8cf,e0fc1aad,98ffd9e2,9ccbad8f,a25b9da8,23de20fb,fe91f9b3)\n,S(ea34600a,7591c57,d0a7e351,de6e6d0,2c72220,62a980cb,bcca8966,356a2984,25eccb4f,a6102f52,60e4c545,57aa960,b427e372,80c35b8,edad5f52,1bc93aca)\n,S(5b76cc79,2e78f177,97b32c46,92f2eca5,1ae1b7be,a753ce98,8e58d116,6c667027,2e01ba25,799e1b9b,3416493e,3fe9fff2,c46e634c,2175a30d,7458429,3ea60b5e)\n,S(62a52d8c,d8562624,48ce5315,28213ad0,6fc6044,b6490db7,c27b7662,bb66f07a,e8f5e0aa,aaa65c7c,2b51e665,f3b31157,54ab9fdc,ac492ee5,fbb2a348,d8db5376)\n,S(a276992a,5e155e29,d091e05a,5f0513d9,ff2dfbee,6ec1ffd9,a91f55b9,bca641c1,3d480cf4,e3f6efda,6cea9cc9,d769b16c,d1f3d64,23aefe9a,abc82b8a,adb22e48)\n,S(bdb5fd64,bc99741f,a2a672d4,a895aacc,98886a9a,d38a486d,ed1915f1,f0b515f,d9744595,ae6e1e64,5a52a094,75ad094e,6af9655f,185ab90c,c03262cd,39794f93)\n,S(cd6c6829,9d2b1c60,9b70153a,45259261,91b9b9d0,9fcf0682,d312960c,c3f82c04,2178ce3f,1bc21a2f,7accf32a,b20d625a,182f8733,e460e8b9,e1067dfa,fee6b36e)\n,S(ebbfa9e1,8a4107a2,475f99a8,672be581,f32426a2,d774acdb,efe501c0,af97a0f1,1845a5fd,d71baefa,64cdf1f,d1211158,a70752b3,adf2b4d4,b5bf1a9f,7a0abdf2)\n,S(bd5af866,4d51256f,455a3190,88b754a5,34223135,1491f763,3e090bd6,27414fa6,f8b5bbf2,2154786a,29f75090,fca2e149,60f84b47,50ea8db,d7c309d2,52233f3c)\n,S(34ef0b38,5a8e776f,1c3ff95a,5852027a,ab6d1da6,6201548a,fa181c81,55382b77,958180ce,9afc501f,84d4d3b4,eb556ca2,e6ae8dcf,f949db6d,33cca5e2,9b357280)\n,S(4b5f6663,11e6956c,e186fe3,85f00069,c0dfbf67,e4130bda,64e0e89,1abaf471,a6cf3571,2e790d5f,b500324,773281c,43f6d008,f6578ab2,b48fe4de,1ce3b545)\n,S(cb22489c,bac94ccc,887a1d7d,8836cacc,c8c2a43a,4e09595c,39cc6064,ca04546c,dced75ef,d7ee6ae0,18ff2690,9abc82ca,da74e823,c62e4268,606334e2,969bf94d)\n,S(b069007c,4a50bfdd,38ebcbe4,31a952ae,5356d63a,9f4179b5,e4cda3f,fe478c42,bb90d5c8,e66c6194,ec55acc7,6dae5f0b,dd498746,2d24a265,c314e93d,618a0f41)\n,S(18722ce2,9d9cf99a,e52a420e,23fd8e85,e1582d02,c520d4f1,16c2b82d,464091f9,9fe257cb,5cd5f644,183c8461,ac2dde6,94cc84e9,76d9c623,584a9d94,40fea12b)\n,S(a1562afa,6420b34f,92a78951,e9ab1bd7,8772a181,636df487,81bf4bc0,b16bd196,ce4435e8,7105d006,9b353734,5a503e0f,a692d3a,8571e8b9,66d9a722,48ecbd1c)\n,S(f466db58,b4fae060,b12b780b,df11c7e5,ea8a08cb,cc50e68b,f5d85926,b9f3cd97,c86b4153,45515a2c,9a831ff1,d6377a8c,cae62456,f207df2c,42a1e767,684f79a4)\n,S(686a1d05,e2bfaac8,e31def35,21876c81,27be2ad1,34ef3dcf,6de52778,37278176,111404e1,7f2153ab,43597a74,be1c278a,998b3695,5f4d465f,271a6a46,8e9e8986)\n,S(d8433d5f,e5ec423c,73bb3ec4,95d06cf5,3a77474c,1e97ff97,f72a0457,9a60926e,3df114d5,a9d63dad,ada0ec4f,f98cb8ce,f1ad419a,e2c23dc2,f24048b4,1879be1c)\n,S(3a9a0aed,4581937f,fe49392f,488053df,349f0194,9666418f,16e56fcc,533cb73d,c9db1a90,2d6676da,251b4be9,7a643bdd,d55c2b15,95ce51b3,281cc866,40cb558b)\n,S(b35a204a,28884708,3091abf3,34be3696,b1082fc7,5caeb0d5,18387aa2,711a4190,65f951c8,78232345,487e8e,376c22bc,e5d9e8d5,ac04ecbf,24cafef9,4de358f8)\n,S(81ff6fec,11f48691,59a2d23b,b2a6a9b5,68c5e6c5,1df9905f,ff73e1cc,a2c505a,c7b794cc,d657519,fc05632e,33e23474,654f1344,6ef1b4aa,1a1da18b,4acc1e49)\n,S(3588a9e1,7feaaca1,a62fcdfb,3952beba,43116167,bb238f10,a41fdfa9,bc316d8e,acb24c1a,58ed9a0b,9744fa76,df4742b9,b440347a,4b4446ea,a3e55234,102d4789)\n,S(7eb13fdc,9588b724,e7cddaec,498a8b15,d57a49af,529c8c9a,cc8303b5,e81f91c0,89f6ac3f,38351f7d,e4b293e,f61a87a4,2c08a4a3,ae0c160a,563ae5af,dc62dcfd)\n,S(2f68c6ef,b363459d,862710a0,a0ae67c4,afc3cc00,85f02e21,ca4d764,3c76e00a,f8be9930,3a3aa7e5,c50d3f53,9b88bfad,60f05fb0,1461d7a8,225bb21e,18616cd7)\n,S(b11994c2,5e3e6d0d,917ac215,c5f39606,3b9b764b,5dfc2b75,ab8ef880,3b57d802,4a7ae35e,c525d91a,cfbdea6f,cc9afbc9,b3cc8c80,acb4385e,9bc20158,f9f2b55b)\n,S(d8e7881a,e1e4d04,c431c097,25dd4cd9,b4efb4c4,3896256b,7de47fc6,3a3b30bf,ccaf57cc,138f0bbf,5dbde16e,91d14875,c0d5ea,3842e864,be8de17d,875fef67)\n,S(88e02abf,a37ffc97,f564cf3d,8a086c8a,62c05720,802319a2,30ab7cfe,b448c478,ec2d3169,15dd0c2d,6f03f851,97a96f9a,6c0772ee,df0c4524,c08f58f2,39c89308)\n,S(ad258ffc,b42d127e,a875b181,a8883a5,31d18a64,d75a6dd4,4111d697,90752d1f,acf5ad9d,bfbb14cf,a25748e3,96bf23eb,aefe1bab,6550b234,90ca0278,276e9db4)\n,S(a2bfdb6d,38159e5a,604d564e,af29cf09,a0a8ac79,1aef5a63,e1c05da5,fb6a0c39,7a45c5c,a7ee7c0e,74c05914,1e3d898f,ab62a8c7,31ca0a66,a937ef55,51dad999)\n,S(7c7bb792,ef21cd53,bcf33a82,6a1ebf93,e9f3357,51131f9b,36f659d9,594f453d,bc98b32e,173d91ca,e9daf137,766c5ca5,6e0434f0,e2eb070e,7fa7f8b2,e7364635)\n,S(40a2000c,dc0c1c9e,4c037a3f,3113b48,f26730ce,11e03b1f,d2f07217,7816f8c,1966929f,210afe16,9daee99b,7b48eef7,27e1703c,8bf42006,922c0496,888b690a)\n,S(6427d169,cfd7e9fc,1b310f68,e3371720,28c17dd7,c6d5a32f,4ed6d41a,634f3f1a,b1a71fdc,6a030ca3,d7dc2ce9,27f3b9b3,ca7169f5,2fdecba4,bc85e32b,4e52fcff)\n,S(723013b4,24fd897a,1e8ab77d,ee0618c9,3c832117,94f8b822,9d7a9e51,1ba8194f,21acfca6,e5e0cc31,479e5a97,17494692,9134f2e6,ebcef2ac,c7779251,77e9aede)\n,S(1b18b7a5,43a284b8,3165bfa8,ca947da5,376fc4a0,8f4070e0,a20aa905,fd12acb9,713ab4fd,9e0bab6c,aadd2f63,1c5ef168,7cae85e7,6146319e,94b19a1e,f6a69584)\n,S(65e5990a,4700f51c,9d3e61d4,26c92f88,5506817c,d4d60c66,a341cf91,9646ff81,2ebdd818,f69cd135,1405c63a,7160ad4f,17a6a7e2,d4353db4,7b554eab,3e737819)\n,S(eb131661,eb78d37f,92a851f4,506c43b5,1f2a155a,dac7eee3,b1dbc29b,a0b1250c,45f2f418,47d2258c,3f78a2d2,794e9aa8,eab23395,8debf0e,b1440d56,dc728334)\n,S(f20aaa98,ab7d6f1,d6de080e,ecd0bd28,b14cac9e,7f27c931,5576b039,16777203,4d0dc753,84c942d9,347f007d,543bc399,ee01e84,7625d5c1,a57cdd67,79c4dfba)\n,S(9994a963,ef21ca0e,9657cbcb,3da57f3f,e28ce389,60ae5dd2,812b2949,96969047,93d75bb1,35572b75,4801509e,5b64858b,c0a415e0,3968efe4,2e558786,8516362b)\n,S(4696ef39,95e5818f,d7894737,2fd68c75,fbb455fa,8477863b,b2687fca,fc2cd7b5,1cdc53f1,c52112c2,f58a6f66,7c1e4e9,110d83f9,d765347e,a724c784,d8e5d5ee)\n,S(7b052f1f,e1af9537,ab3bb5b,3e0e510f,7e101cf0,999f85be,c403fd62,53e68d25,69c7f158,4b6c36c,f7d881a0,fe4efa5e,3f879753,641ce0f4,3e73bfe4,77ada27c)\n,S(99452d74,3311867d,1d86c1b1,decd1ed4,7192a58b,3ef98cf0,7816823b,1296abc9,ffabb50d,a1a0451d,36b811ab,5e0c55d8,751a1851,3ca8bca4,8d6b3ffc,61ba36e3)\n,S(40c6fec6,5ded4688,31f72de9,fb5c7f67,32c0c170,29f19b36,b00b0f85,5a12424,17aa0baa,eb3ba6e4,c5000e96,c3eb620d,ce1dfd81,b35a3e79,b27b8246,97dd5741)\n,S(b9bd9e2f,c55ce5dc,2e46e4df,56401c72,e01ac3d5,201a3cbb,a6609fef,ae2e827b,f545efa7,f95e9a60,72cb9750,6f929b4c,e0360c8f,a9f058e6,5b87bd55,a72abdcf)\n,S(867c0fa9,f885935,2756e3e4,11666eb2,59a416b4,7c2ff329,e30be462,13178921,6fdda875,4a50ee1b,d229d4f0,fa8876d6,9caf9fb2,a6af19fd,dbbd2a81,5dae486b)\n,S(1cbe8374,3decb58f,f2fc9668,7ba45c64,812507ec,c2f71d66,eeea12c2,92fb36cb,799533ce,46d2c091,d0b553b5,18c82317,f516049c,4a4f50be,909c875e,b0bbe21b)\n,S(c654f9fd,57426248,fd24097,2595d71d,80cf771f,cabed8d4,63bdda8,340398cd,898e9224,c9e94d14,3f96702d,c296bf50,9b2cee37,da574bdf,b7c09cec,18357a18)\n,S(49e8e14f,4a9f09ff,48725eda,85ecae6c,3fe3400b,81012e00,991f6a69,2d75083c,815230c9,284924fa,57d08944,2a30c61b,8ce19644,7a8ede69,fb645864,ef35977f)\n,S(43a6ecde,ed83f1fa,8946f584,99e71bd9,978f610,b46d1613,c15fcfc0,f79786af,2995f70c,11eb448e,68eb3d10,c84b36cd,7605e249,1df1fa3,2e9eb57c,c0275482)\n,S(96861d91,678e5004,7c491950,5bbfc70a,e342c3d2,361729b0,4d0bcb5f,d93eceb5,6845ec37,9bee6269,464b2e9f,156ada30,c518bb8e,105153e1,c3b3e948,d38078e7)\n,S(3c72be53,c9f82add,504a1955,7b9560a1,7716a058,26063408,79aca60,c55f4515,e584b72b,cc4744d9,6a00dc44,b03ba61f,c2269731,a8178755,2a6dce8,25d31b81)\n,S(ce4b4d07,deae1fad,33192544,448ac5b2,77ba7f70,27b81a08,d7f84581,4f71787b,2013299b,2c744a5b,da6b243c,d04d95b7,e515848c,dc28eb40,892d40c,210bd1b2)\n,S(37984db1,6d288866,78e1804b,9c94ebf8,f3a1aa05,1fefce96,65712f98,198ce116,20a25966,8ed14a5f,fc3aac09,6d2351b3,b6cb19ab,da4c833b,4a2a6c68,55d1ce59)\n,S(ac01bcf,b02e627b,2c9c931c,f87beb2f,4ad7328f,9caf627a,2bf695ed,b7353acd,be4eacf4,77c92348,fe0feea9,3075e93b,bb3633c6,6747524a,e387df82,176ea252)\n,S(d5d6af83,1a81b72f,efe5618b,ea43335,bf1d81f1,73382fda,860260d8,1a2faa83,865f9ee,4ff0fc6b,fa761709,db4c67ee,a3213d07,21b2facd,fcd8fa57,8945698f)\n,S(3c16399c,4de35853,a6dac8c1,8eea4b40,92a22a8d,5e69ed0c,13b9c2a4,3cd5e39c,bffc2dbc,c2ce4b04,6a92b967,d1a04b5a,2fe40be0,fd9930d0,45b51f8a,15b53edf)\n,S(f67018d4,23e50a73,68045b0d,ce803e35,a26d9a5c,288a3a7c,c25ebb03,dad28187,ee97afc5,1c73531f,ea8998f5,53086a59,cc67c6db,955baaa2,8f57153c,afc4e772)\n,S(de67026,529a32fa,b3ae79f6,ef9ece7a,47008d2,46f89053,e9339c4c,dcb53b30,4daa8700,4b055005,90611f78,43d258b9,516f1fe8,61cf06ca,d466e000,d3a68783)\n,S(a133627c,af6e7ed3,1d267608,19b69f45,7e75ecae,2169284a,48b5ee16,b5dc8c10,755ef12a,fb5c071a,36dbe2b7,1f858d87,31c93d81,d271c999,8f632982,d7e97ce6)\n,S(d255c1e7,ccc88c4c,33887c9c,b9c15a2b,52b08471,90ad1420,5fb5909e,d36059c7,83e3e1ca,99a386e8,4b119391,2c20593c,f9573996,d42cb7c3,6db24a5f,cb413080)\n,S(aca6c69b,9ea17803,4af67422,71b8062f,77e6dbe5,1df2a570,65fb3057,ea185b8c,40cb09f2,adef414c,816b22f8,d7a59f8c,f5197fb9,b31614d9,ac172436,d0f54647)\n,S(fbc19c84,3b656fcb,21d99c3,5289d3e3,2bc58fdb,c2404309,a9d8831a,f2365f24,cc22999f,203a4fae,59eac72c,28bed6d9,291f204b,707bffca,ca6d8359,1e403124)\n,S(ea308c88,c366677d,5e575457,cd3e6978,5b491a02,c542dcae,5dd5e149,2f839c55,c1916831,2f48555f,b80845fc,ba89eee7,a7967807,d10c6f6e,b516c190,94873ac9)\n,S(d911d62a,33fefc48,abfd4409,7ee2d32f,d7e85816,2a8a00d1,342646ac,8dda6cd2,f160f933,41bb32f7,401d153b,4a2decf8,b793fb5b,4d5520c9,6d9cb9e,cba79aa3)\n,S(bb75b497,7d698442,7b0ac74b,939ab3d8,fb94304f,602e102,1fdacf22,27022a4e,ee3cc171,8e9190df,9b45d8d3,54eeef9e,11639423,dc091128,ae09e451,fffe3468)\n,S(358e7639,b4031852,b983b5c0,a6c0d33e,5edb304a,3f8bd15c,35d35794,e2cf90f0,5da4be1d,2e9bef5a,5da3cc59,d3c4f85a,e6624ee3,17395ded,398147a,12c56c45)\n,S(e098fb9c,440a5cdf,bc570270,4b57eeed,f3087b7,e196522e,4b194618,f3c874fe,9a5b80e6,b22dd111,1f824c36,4830e723,18b7825e,2f2a0fe6,ca460d0c,34eb6449)\n,S(62d607b2,d1a16e4e,cf60480a,be9416a7,15d70b5c,56734e7d,1498ba03,7632528e,70c5f4d1,4f5c900a,96291a4e,d0f795ff,439d35d5,2c5bddd2,ab10571b,1d7d20c2)\n,S(a630c5bd,ec76f869,40842391,cba6cdfb,9109940b,e1034b87,c6a1e5e6,9662857c,8f28f55e,beed2883,3e347b10,92ff8938,133558c3,bfeac1f6,a6b938a4,c783b79f)\n,S(e2a164aa,e17cb0c4,8ae1e911,872b0b3a,7c0e29f0,93cd5e18,97145211,d72147b,23ccf99c,afd1bfbf,a7ce1ade,1590d609,9a423b26,381f5761,c19ba373,290e6193)\n,S(742526f5,b95051cf,2ee34994,8385fa72,425162e7,e46bba3,febe5ce8,595a8b37,d106a3be,638987e6,870acf8d,26d4f78c,e6aa0e9b,63e4eb19,114fc97a,eee3a12f)\n,S(ce7837c2,31c32444,10dcc790,de465c06,75404a1a,68d23fe9,b69d887e,9c554f45,2c0be877,20cfdb11,8c37b2de,a2c355,d12279da,58f75570,7e738867,146257a3)\n,S(601167cb,2788b146,998f0b91,d582cbd,27f4b866,40db7ec6,7f26214,f3ab9212,50525e40,1f2da57d,1f605f34,8f11ac23,19ad1827,41d7be11,46538e83,e03bbeeb)\n,S(d2f657da,6f7c3c80,9d2e5291,b1161d46,393009ce,e2bd22ae,32b99eed,f76fc728,6df58d32,b795b6de,2a9c3b15,f4f1dc9,4e6e6757,e01891e2,79acde59,d13e3e75)\n,S(e9fb6b74,f84973fe,7c7a0924,e0133b92,bb4c22d1,ce9a94e8,433f0c72,2a86e00d,f4df6cd9,df43c150,9d4b9580,eb87298a,551ebec5,2438597c,87dd46d4,3a8ad2c4)\n,S(98d46b64,e43f3384,88c63da7,35af1141,e8b41981,b706ac5a,7aa1c0ac,1182afd3,3b2ce203,5bbd2cd7,f3206b3b,6aa3ac68,31e0e2d4,7f9e57f2,3e780fc9,cf865733)\n,S(b358a4c6,a7130b1e,a00d8403,7164e68f,c6cf96ea,c6580ee5,b1cc2452,8d2bb5b,3bbb25ab,4645c17a,2a6f7e64,2d3952eb,86462564,5647abd1,2e80d965,be1d3854)\n,S(fd8807c6,c456582e,d03114a6,2b42316d,4d0d386a,aee634cb,d33f2f82,c1ad6f05,c67d1611,e45c57d6,1f8d721c,437c0ca2,189488bc,f363aab0,f25314b0,14f896)\n,S(cd53fa2a,1f989ceb,cedfb7a5,237addfb,2efe9469,8b6509c9,3081710b,f0db107a,47e61ca6,4d26e617,8192e993,411d0540,bf7c37b5,8c748eb7,6c1c197c,87c3f844)\n,S(38cfdfb1,1b60a68,b00a4096,8f2da5e4,4a60868b,de9af728,fcb888b4,9a098c66,65f4f191,92667492,d717cfbe,bafd0076,59c08392,30da216c,315f2cfa,d3725184)\n,S(cc179d39,1c6ab4f3,7fae6380,35886e2f,82038bca,768d1396,13fae8df,a167a271,a12fff68,84a967e6,fdd6e14b,4083c0ba,2a2bcf49,f7d6071,d708c70,4722b1f3)\n,S(cdd61b33,75fd00cf,430d9d54,202c5c61,465fe7c0,a3f51660,ce74a3bc,58068c,46e5334d,bad31f3f,6c4bccbc,6812cf13,5c039a5d,d51c6516,49564f45,45f13ab)\n,S(39ecf8d5,4fa9c3b,fef7d5e6,5ebe0e75,288f17df,4b33036b,d034be2d,fa5bdbbd,21991cec,ef62e421,70da3bf9,8b2f9bd7,790d5b13,25159727,a53a0735,5ab1d956)\n,S(7b621836,342994d2,3185da8,67d47e69,a67a184e,925a3,524f5e7b,63639263,b08c269a,1569538e,653f2beb,3e6e348d,c61537e0,7afc5f13,f56d1f74,518b274e)\n,S(28e5ec3b,38359a6e,7d3a965a,c5713365,44b91ea5,c9f350bc,d315c153,72133bb4,5bdc5a02,62734535,8621c1f1,492b3434,be731c25,f82c1a32,163ecf09,7f548465)\n,S(37ac3ac2,3f6b2a1,a3a5a99c,707a6b8d,5f05e80,133ac522,107ae5ff,414d33c7,460c947e,76eb51c8,42bd0e6,6ccc0937,87f61bc3,554538b4,c2065fdd,533d0b02)\n,S(275f5ef2,a4546ba0,9d96d138,e698cd32,78cf27f3,2ee297a,5ff8dd41,f16bea50,ca91a3b8,5b0a493c,a49168b4,c9eff873,66212b9a,c030fe6d,a9be42b7,45d0464a)\n,S(6c43669f,a69bd51c,63cacca0,21c69bf7,9a94ef9f,3f0aaa92,3be9380,a6702e34,b416195a,1419771d,82fc2ce0,637cf5a,29823d1a,95614642,c93a979e,5ff3fff6)\n,S(606c37c1,271b90f7,482e6ba1,81bd956c,44a44189,346bfa67,539c188,ac0eb61f,f6af64cd,3f04e30a,1b4a7019,c6caa84b,823bd00f,587eb58a,e190ef25,322154b0)\n,S(e4136e15,b3fdf609,f779d0c0,70ce8521,2babc592,577361d0,47ada13a,2a83d43b,1af23c84,ad240ac8,50da2ec2,721531e7,18776ddc,5847edd8,b4d79d52,26e53125)\n,S(a338d942,6ce420ac,c9fb29b9,cf572af0,72c0d144,46dc2c3c,75b9d5c9,f7fa244d,c88a4399,f6e3ef2c,619cd9d5,215d305d,3715b962,b02b29ca,231446cf,8ea7c40f)\n,S(c454d1b2,6f77ad27,a168d032,fc1a73ca,fcc4aac3,ace31f2a,433599fa,7107fd9a,989b6091,ba2ec267,380c5139,47059d4d,2773109c,1afc21a4,3be54ea6,ad8f19ee)\n,S(bbd7bd30,5bf1b36c,6cd6c180,2f41525d,75675d76,9352dc60,1a727931,ee6f40c8,3c3263d3,75bd412e,1d7f7d5e,72f73216,6415ef3,52d1fcf0,58e6c046,ceb46abc)\n,S(acae6fb0,5d5b503,c2e3d841,19ce3bbe,1380b363,e5d8763d,3c520a3f,df39f7b6,6fab4b7b,daba880c,9167ae8f,5feb9aa4,3ca19f28,77ec5021,df36ac7,db730293)\n,S(c9d4ba53,a44403b3,b06915f,6bd9bb43,4716a639,453797e,5b8e1cf5,abc78425,749cca45,6abc2a6a,4e970589,42cefba5,a2f55dc5,39bf4f3e,be5088cf,ae04bf70)\n,S(3408e460,99f1a176,fd52f70,3c772f1d,a46d32db,246815d,a21826dc,c5657e61,a93bd344,de7afec8,2ea2842d,40fbcf60,732be8fb,738b8364,aaaab796,1e20974f)\n,S(5e061a06,f97f61d1,5f66c3ff,17372621,4ce82af,3e606b4e,9f64fb62,e405376c,609064a0,bde996b2,d909e50f,726ed7be,b4698ec7,5e1c9c45,3ba18815,2915cb1)\n,S(b12ca67f,739f4284,3a7adf58,d2a2f3ca,fd245ff4,b766793c,c79cdc31,45579113,b1deaf81,34f017f,b2bc20cd,da75fcb7,d219c353,98ee9887,612781a0,e3f3d1e5)\n,S(95a72f2f,c241fa0f,c9500cea,d9cf069d,23820078,f61d4492,508d0fc4,34fc223d,832a3979,1fb9fd9b,79748643,64643bcb,b227c39a,e4cb5051,d136263c,293cd453)\n,S(ab8ccb01,4b672660,b867e544,926749bf,7172a0f5,ac6317a1,a18b7d15,f039fc94,28471e3c,a2d6e77c,87700c4c,7e3df1e9,2fe91efc,77724df3,2f20ceba,1ba000fb)\n,S(26131926,5261c0d3,ecfa9769,fa987347,1b9d4ebf,dccd830a,96bd160b,61b47278,dc9ab665,485133d2,59d7b604,5e1e4f52,9b099e9d,4db9f680,4935e712,f8402f66)\n,S(87a4227d,2303f5c0,acace6e,96586b68,178dc65e,2c99583e,8e427ad7,167c4a65,5bce1d82,216355d6,5bbf33e0,9b3baec4,fb0befff,ebe48b24,cc01d454,7de6db8)\n,S(a6576ea2,39af87ba,392a225f,bcec3045,8920b494,68c54ff3,92d2f509,519ce85f,deb950bb,6a767b3f,3603be36,6234480c,1851ae4b,1980f902,f8fec863,dfabde82)\n,S(ed41c3a2,48285ad9,1642f6a6,feccdbb1,66298fa6,467b0ec0,ea256570,c8e343a4,dccf3578,aafbc34d,8ca5fb6c,b4482de,4b94dc65,a8d22845,ac800947,dc1042b8)\n,S(227756ff,800f7eb5,4493181f,83050c32,9f27a35b,891a3bc1,ea5f0e89,b94e77e7,571c9345,e9e95238,3c7dc62,69aa0fff,46455825,a032f33a,154a89ed,e13a09c3)\n,S(6f3b91f1,3f2d6787,454bc7a2,2ee780a2,3c251697,c0da9aa0,a03dcc3f,f03e2b0b,432b396f,c2dcd370,647eadde,ec058a01,53fac955,4b3f400c,435c4755,5e61afe8)\n,S(aa79f0aa,767db1c0,3893c9c9,c75a1f8f,457f3f36,72c1d2ae,31e58658,a916fe5,4da2c69c,8033860c,14f8438b,8edf290c,5d02f2e5,153b68ed,fb945043,a6e6a1f0)\n,S(48f2a720,df970127,2385a961,5a215d8a,3d41e0b4,ad439c9a,9d0453af,4699e527,11669dc9,26f70e96,e76178c5,7d698d05,b6e7da96,eef4e986,c4f6e6be,216f22ac)\n,S(561d8010,a81a1191,3bb2436b,bbe0ce2a,6f1af6c6,fc064d57,59edaf45,c7f9781a,bfb2561,bc311bdd,707aee1f,af3d5c9d,faa9d564,a5121bae,9989665,b074f026)\n,S(64d0fc68,6369a225,a15cefec,431fe434,1a424c78,85bdf2,51cccf53,9e266fed,694fdfa8,12f6bffd,b1c75baa,3b843d02,1b69cc8,20f2a8b8,69908a00,ac7050c)\n,S(2b80d86d,341d05f6,218eb96c,fb227834,44bdcdf3,65cc3809,1bcba0ff,fa8b3d09,152eb516,2794fd0f,abf030cb,1968faa4,100e803c,e5b8046d,c36e3075,9317a8a5)\n,S(62652ecc,daf7ff5,3aa255de,ecbcd653,7840a657,dd53e58a,514ec1bb,98c9b5b9,2a05c8cd,bcc4a512,1d2cafd0,6289fa14,178e91b5,b1fa1190,e4c7c13f,f50cef6c)\n,S(f23fe7d7,69cd7bd8,5e0d97c5,4163e596,a0e7dce9,488e8f67,4ca6f3ca,81726ce0,eb1355f6,ecac2b79,dd299fce,c0f273fc,3767a3f3,3ac4777d,cb871a1a,99077e1c)\n,S(91d4028d,1ea8e320,5718f427,b427c21f,4780a944,55ec46c4,2fb2a1cf,4772af1e,7a529f92,3756a212,24dcd316,bf9a3f6b,f5bfbc54,3b015c10,54ae51be,5c2e6b2)\n,S(7a8fdf03,175969a7,80475dad,c43e5c66,fa75846f,63cfd62c,e82d2153,d185670a,b7b58ebb,fa0b2d3e,ec2a2638,accd965e,c7db6cf1,c847c1b7,9f0714b0,c1cf7dde)\n,S(9d72d9af,5e9d7b2,7fb2b867,4aa35438,946c4ca9,eb9ea4be,e20b2eb5,e7cdb89,324214ce,d556acd2,3ac00175,f120d59e,50dc95e,96e6fda6,ff348bde,5ff7e701)\n,S(33556ab7,bbf601ba,44dcb33e,aa5efc82,3c70f507,550f3d7c,22f4ba62,cf2d6bcb,a21d830f,233a657f,7857560f,c030f053,656aada8,f7812424,f38a2409,7505dcb7)\n,S(e002b33d,93022868,60b39e1c,2820ad06,2063c344,bef98dec,3a9a0428,20e2c507,3133f829,1c81d970,f879d1eb,2128f21d,7540e135,31189576,191ac4bb,d83d99b7)\n,S(9eeb1972,ffd49c0c,7982671c,59071b20,422a053e,394db993,8ef7b3d8,98795c5d,ae48763e,5ad78988,7a756827,4a17708f,8afdd8be,bc9c0316,73dd9485,319763c0)\n,S(60f821e8,ad12907f,e445f049,141c7718,a495d1ea,3e39edbf,f0a73018,a5cb6854,6dc1b291,62b025ae,2a285e59,a5b406dd,927a743b,483454d1,20426fa7,50adb95d)\n,S(5b8bcdc6,40f4a217,6d0661ef,f2ca5d6c,b1aa2069,557274c8,287fba59,dfd65a41,42ab52dc,cad04998,63e634db,ebaae018,c999eee4,c3cf05b9,4f18d218,23f21256)\n,S(e764e748,4ec2a2ac,6843df3b,5316f29b,701b5191,778bda16,a23a20c1,69ed0cff,e1007e10,4ae52971,875bf7ea,9e9d9431,94c2e9b5,bc7b2844,7b7acded,de7d633c)\n,S(37f0d948,48742a8b,e73ef1ad,495b88f,ea95f7ee,b343152d,85f9e442,771a22b4,bf960e80,467cf81,bc22380b,af2f57f0,d5938ccc,55f3f691,784be72,7fa68bb2)\n,S(7ff13c43,7f2189a1,18b2095f,be268dfe,e1375a3d,f71e88b8,4cf5b94d,63b04612,10295e49,1f0a882e,aba663f8,f0202223,21c422d5,f3b453f4,8ab8bf4b,4319930a)\n,S(74f6853e,f4a2d018,4cf113d7,62fe2a1c,33ff2729,5414a5bf,3f381989,551ceaa4,629f116d,37c1809,f4e2ecfd,19c2627,6deff6c5,b89249fc,d4f6e82e,58eeea79)\n,S(d54d88bd,abdcc56,c1bb8cbf,cdaea6ac,16949256,f78d70f6,7a1416ba,b4cf51ce,996afb9c,5b36f588,812bad4,95c368da,f9e96035,4bb7dd1,3f457a6e,da159b59)\n,S(a860ca66,3ecd7482,c862fac6,f6a7b0e5,f5f6bb26,ee950db9,2942fc89,4b6fbacf,3445137d,2047c17d,65b3cb88,8e1b0ba3,619db023,bd989a0d,c585a59d,14da7b9f)\n,S(d794dc2,4e0e36fc,6f38fc8e,7a68cdac,8d547d42,b9667241,2dd7e6d2,c40f9aab,22a9a90c,10f1b80,e277be34,3c492125,24ebc477,1f838070,f2be48bf,cec3a7f5)\n,S(7e28db65,2115f5a4,575293c3,d792fc97,9ea1adf9,dac468e4,60e5526f,6847657f,8025944c,16a12ac9,25e67f13,3835bcbd,33c338d6,824b1fba,f0ee001b,d79d66e3)\n,S(d3f13a27,524f0c87,266f3d46,14d965a1,3865df67,5d20c5aa,99a4411c,dc6322c4,9a1025a3,845a4bc1,9f7cc175,9377c7f,e46ecaf7,53263433,baed836f,77e2e841)\n,S(d845636c,db18d557,1759f6e6,bad6a60d,3a67141c,b0bfbbf9,33e628bf,8344c053,40de706,ef833427,80e5120b,ec6e61e4,a8a3726,32818317,729e60e6,3ab7e37)\n,S(f40f53fb,c672573b,c020338b,71589d53,3709ac32,b38cb943,ed0ca0ff,e592e552,502145c,5f542a77,652a4ab7,d79791cd,e92f3e72,d9d0190a,2724e114,49b64e0b)\n,S(2065a8bb,a0d61dde,921a0741,21ae5678,8766f712,bdb3c4c5,776af9e3,774120be,fd12cac4,a85d5b10,1aec6ee1,4b1301a9,950df948,86427be5,55f52736,3ca29847)\n,S(a9b1e8dc,410466c2,df97cc8e,bbcb3af5,f981726c,2daf8803,ef06ef2f,a23e038f,b09dd4e2,77b1d10d,bfdd06e1,a42baf37,a5157017,ba026d98,fee13512,4a1c5419)\n,S(c54ce1c,bbfa3808,f24b2661,793c3574,a58aeb0d,128d7e5b,ddcd98a6,d8c9bdbb,c1a2291f,d20e8a23,f4012b54,37a7be7d,5af5f776,bdbb2c53,193e07da,bc1a3212)\n,S(41ad2d03,31f57724,6476d0c1,f2c46216,6156296d,8bfd3783,eec40892,835ec421,62777bb0,f8b6ba08,128f1727,9c237286,abc5d2a6,492b9c67,3edc903,7b0e3008)\n,S(a8eddde5,eb761183,ef5cce4d,a7958b92,db28bab8,2f695fbb,597f6535,50048a3c,7f60d3aa,95ee5ae5,f4cf10ac,cb5729e2,bf89ba7,6b1070c7,ba385f41,a5912685)\n,S(f1db8d40,2cee572f,6eb250bd,ed3d978b,1346ce96,d65291da,977b42cd,36bd073,9bdd0bdb,a546ce4d,774f79fc,3561c0fb,ca11f4fd,b46ab1c2,a7520913,f254f42c)\n,S(55cee66c,7ebecc0c,7f22d03f,8f166b99,ec7b5e6a,776bcf60,b5f4d452,c861bfc7,772832cd,55b13c5,890c7ba9,96731ced,5a2e1c05,6ac89469,320c08f4,43159d36)\n,S(61427868,7710db98,d4347d4c,aae4c70a,9efbfc7e,bfeffe5d,6f33bddc,4aeddedf,fe8b32bb,d0c7a7d3,b93dcb7a,99a5cc8f,e386bf89,7dcdcd86,ffaac641,6550dd85)\n,S(9f3ac763,c117bd99,658f5379,119aa025,cd422ed3,b1ed2cc8,545d6f93,39baf4e4,41b2409d,cec0065e,4026e879,84b99d35,4eed93f4,15e8981,256e8734,a4eebb74)\n,S(8510bf74,8f5255a1,8f408565,30f909d5,2bed111d,6347da9d,8da2a97e,751d4a98,2ed99b6,6af7cc01,37329730,1b0b63c9,f8732547,fc632eb7,7357e67e,df5549b4)\n,S(d81fc0cf,9646ae0,7dad1a3f,e06adaf,1d3508fb,13af2309,c200c2e1,2228807d,cac833d6,c94e674c,a7aec186,42e4a501,ffbfed92,dfa1015e,c95740e6,57978cd5)\n,S(32aa5e70,972a899e,e25e6c6d,e43c32ee,df07ebcf,e5ed13e,5095f7c3,3bb55622,38e82901,990a1e42,38639a42,66a93fb5,4368df0e,befe19a,7f234424,a8b68c0d)\n,S(68f7b02a,ea38424f,decbbfc3,498c6193,62c732a3,b048800c,85d042d,b284f7d4,bef680d,90660176,f3d3d009,9f6cf818,a277dc5b,3d765a30,b7a4ee9,cf3bd46e)\n,S(9437ace9,6b566bb3,87d9946c,2c32c06,f62f1158,dead214f,2b721c6f,b6e8888d,f8dee3bb,331e1e33,9963b7e2,316a1352,c8748f42,44463ffa,5bf2265a,243941d5)\n,S(af40e909,85e5ce8d,dfb6d6d4,222d3c57,2ffae40f,53de2c06,55a74cc,70cd8dc5,2f08f237,3fc922c3,f0ed9d6c,b9538f4b,c661ccac,ea2f4975,50f47ec2,17d8e626)\n,S(382e5a07,f1f236d5,ca1a68b8,f0fdb813,29e0393c,c375df88,f87914d,cef93c64,e24ee731,c0a88fa4,8ed3dba,87e97096,e0ec2224,dd657411,a9f1a9e8,2b0a6657)\n,S(99fce288,c6ef1d18,ad630097,8ba82dd9,1c779a60,b266109a,288d51c3,978fe565,294c9e53,3cd42a54,c071d5c8,acb7edc9,897db8ac,d25b5f10,9eaf8dac,42a9c1a4)\n,S(748326fa,c8dc9394,2de0a000,933dc18c,6ef92cfe,bac46939,f4405d89,627e6727,adf2d561,45581b4f,e706ccd1,8dc82bcc,14d76fa6,94ac8a61,a51d06d2,89e36d2d)\n,S(43fef689,67074a2b,7e944b76,8f8b1ca,15aac3ad,c8f5590c,f1f02c3,afa82e90,5313cf6e,8cac44d9,fd548032,dbef3ab2,26e93880,644468bc,799c87d4,c0bc3f99)\n,S(404341da,829f537a,c425050c,5ba93ca7,baa8a8b7,dfe51c23,e2ce7c72,43d57659,f91a0d59,bc35db64,b250adca,3cfbbaa2,2a82cfb4,d684e8db,e17484ee,af009f9b)\n,S(3af33cb6,b4d553e5,50fd35f1,a0b569e3,eae05737,7b7d735b,545f7f00,d9acae67,42aa2cea,deab8cb3,b1ee9c3f,4b1b06df,e157cbfa,3912035b,585980bb,cf85279c)\n,S(2e96133a,1da8a378,c138583e,86ba1de2,3450b285,3559a431,654ec9aa,1f64229f,3bfa5a75,4dbd936d,7a41266c,97472020,6cac86b4,d684bc1a,59dd1f27,fed8e76b)\n,S(adc4b672,69fbb719,92bd6e22,3cf9ecb3,c9388b5c,45ffadd6,94c72e2f,b355984a,ed177eea,ac8cbd88,2a368fcc,4908ba4c,8a4054ae,3411d75d,b06939cc,72522a7c)\n,S(68ac3244,49eac1e3,df997282,65a0176,bf6c6115,64daf79a,135bc6c2,5578b6e,407a75bd,b1e5e6be,a9b815ce,833c0be5,f5c462c5,c71a086e,59fbe0d2,5e7b1fca)\n,S(5176afcc,b4235cc5,ea41eaa7,b657a77,bb383bf,aa71ef8d,d33990b9,9c2acab9,cb363792,9d249fc6,1c0931c,8a27dbfa,c8371574,52c40306,c3291814,ceb57095)\n,S(4938cd76,e1aa6b28,2a89e883,8671e4e3,82d7bc76,dc4653c8,46323cd2,51d18542,2bfe67eb,6da39ea8,c8160621,158eac48,550c3730,664590a2,731247a1,399bc42f)\n,S(9364dddd,dadbaa52,efc81971,75041c81,e7ebb48a,f20b82a8,125d85fb,a7fea192,ee568f7,53513b91,cf6720,2c45c4f4,181e855,ac0300bf,d7de30e7,317a6ea2)\n,S(bdbc0937,243e563,df29781d,3b14d4ac,a664fe5e,70f3d9c1,39ef1b69,57839156,2a84b153,549c6d1b,27dd9ac2,1ab86f34,9ace0619,6f814d08,92a1958e,d137bb1f)\n,S(b616b635,adf7b64c,43c4e242,32ffb330,bf28ee8e,48918093,9584c26c,28c82f2c,27fddaab,e5d47957,6344022b,68744822,eec7b937,d29b0631,93c7f6c5,6385cc89)\n,S(55a3849a,50606886,abf6f0a6,5a3e657f,46031cd7,4c117365,8f27aa14,326f3cac,4a522c0c,17fcd116,61b11d9b,f88e0ad,c7a5761e,e01db8ff,a7bc3dca,a7976b00)\n,S(d53e472b,439dc5dd,c8ff479,ff678dae,95b2e207,c92df108,728c3783,f8818542,3f3f7ecf,df3d9f89,1c723161,75a57931,4ebeadab,3c4dccf,bf2b834,c762d30f)\n,S(1e27dd,f6186285,41f5d8a1,6587e2a4,ed38c34d,8393a6c9,fc0a7c07,cef36053,280b223,da8d01c2,12315c1c,ba7dd8d9,96d3202b,91c4eb4b,26c802e5,9494378c)\n,S(b6d9d97c,64ba01fb,e8a9d29b,806d8a6,42413bfb,fbb4ae0c,10d8fe52,7ae6415d,894875dc,d912f8fa,845614de,a2b09796,d402c738,ca1f3c9e,c0796681,d715b8e4)\n,S(2c97985a,5fd96164,e4c4d9d5,9a9fb52e,b2e6df0c,77ed4745,3dca6eac,7550756a,b3526bbd,de58e408,a4f45dd6,61f5c6fe,2f82d2ca,3e2172e1,c99d1fee,93d44c98)\n,S(405deafb,528991e2,ef924f55,b7e4dfd8,185de449,cd6f71d6,53025999,4caae657,e959b7e,59cecac7,f813dc1b,a15bb71b,4a4832ca,54026e18,479d71d9,191c3ad)\n,S(4276ecae,a14c0556,b4573b26,dba35226,4fff2c3d,12a3e4a8,4937ae9a,3f687bfa,7611836b,d3b335b,66f92914,6df0de13,d6ecd47e,88369ffb,6c9aa493,e67dfc71)\n,S(6fd734de,6d2fadcb,d7b19f56,ae7153d9,1ddb396f,e0c1e51f,ae31fe80,8a35556f,aaa647c6,92865772,f31fdc1a,3b430ffb,e1647e10,3cd5d629,19bcc905,ff7ae633)\n,S(4f0a22c,ad6ebf6c,e6b444dd,35a54e38,70017bae,eecc14cc,3f7ca88a,6d4e27c9,1386d40e,680060ca,bb46d678,d2be7209,418d6f72,d3917e20,7b833124,29b43ea1)\n,S(873ccb39,5c10f57,6e50093d,44879f2,687d9321,441d8a7c,993c1083,ae7b0570,b261d029,dbe15f4,ff70ee42,36f558de,8984db4a,608d45f,4e28d001,e564c5e2)\n,S(75d41857,5be3709c,5c732073,24f36089,b87532b8,e91db4e6,70a89117,9d25e039,47e29f54,fa62ef44,139db763,4b1c8f5c,e027b0d7,e1ec3501,1e8c6dfc,dcd1a105)\n,S(b325bb90,cea81ac1,c79df75b,e7615ace,9b2a9d4c,fa1f4504,1a47e0d4,30b64b67,3024fffc,2005699d,5351615f,baee8c49,8a319a19,45ac8132,71c609b4,23e14a07)\n,S(436c92bd,a6c7e124,5aaffb22,62036329,ddb8984e,624f2469,b30fab18,1269ee2b,2a9f90d,88c01880,62a152d7,e7ed5acd,33f12e92,4e36fab0,bc0602f8,2c1d3e3)\n,S(c0105c64,4e51d333,c7ed28b3,c94292d8,6d9c04f1,89b3827d,f1f22fe2,99bc51cc,d73bc012,1233ba52,ef9727b3,1249babe,bf63cacf,ece0192b,5cbd618c,c48a9d35)\n,S(9f2a01b0,46109d49,d11ee109,5e94c281,1cb6f76f,7773141f,632b3a9,2e5f3f7e,1e260290,fda1caa9,ea315380,781f633f,21c90765,2815251a,fa70b169,e4b0da58)\n,S(4d805499,23dc1905,7fd35a86,feefb937,f2b621e,48946e53,b8390620,3aef584a,2cd9c060,d66be813,12a3fd9f,ebb9cbdd,4fc23431,c3e0531f,4a026f50,a40dbd30)\n,S(76779423,b5e5acad,55137380,276c4033,a865ae5f,9ada0f30,dee6986c,444a1526,9a6fc30b,4f4c5093,b343c8d1,aa204ef3,7c2a6d5c,712ad8d6,39ef545d,1eaa9a57)\n,S(1ccc1998,33f8b121,18227adc,2f27c3fe,8d328b26,684b271e,85f8368f,40378881,da21e917,94851bd5,a8859173,830ddd0e,988ffdd7,f7dcb263,f6755eab,e2d73f75)\n,S(afeea14,e8306fb8,e69689a3,d12efe72,949b6b03,8c4cdc70,c95bc351,1f999030,cafbd04e,79378032,47c71954,d8c2a11f,d60e53b,35045507,8f6701ed,621e7d53)\n,S(cefa268b,e551b02f,8fe50481,44920abc,3d03d97,3f2e9368,d2d2cb42,341c11b3,77440b02,64eb1972,91d2d69,ebdc1de7,66915a09,aa01615,e4001d62,7219d491)\n,S(8625c163,58bfd43d,888ef97b,e33d9938,c62f7f2a,9e7b9735,26dd14ca,7c76abda,e1351920,59085272,3ea7b55f,49c4045e,2dda5ceb,c1a31841,1b6cf38b,b97bc1c4)\n,S(43b8caf5,d4f72519,19630044,13bd459c,f5913edc,ff303fa6,dceb3412,f8e39c2,7d1df179,13186dc0,d7957f61,a3232180,21a6b50f,61a86f33,72623f5f,d3dc1a11)\n,S(163fff8b,cece557b,6fd77b4d,e22e5b55,a6ed51a7,76dfe2b1,362040bc,9e7e4fe0,29204f73,5bc6428,3c510e0e,2192299a,7f6ed56d,1a0cc569,aa37f895,c0c4646a)\n,S(fdbfcee1,69aa6724,b5839a55,e1c54856,86503b51,d1320b37,dcd9af73,2bfc4497,d7f75ba3,7af2f969,31bfa612,446c6807,a207af9a,17269199,77b0d71b,16b11a0e)\n,S(f1981a9,aa585d6d,102b3a7d,e3509e0f,ed002866,b379b4e2,ba9d175e,4e5879ee,bad6366b,71a7cd67,163b6313,3dcd442d,24f9362e,5d0b9791,2a8dbfb5,74517e1a)\n,S(dd3de17f,1cffd240,424096cf,effcaeee,87bf4d30,4a41d5db,6953102e,4b91853d,d136d363,1b9b968b,7c7d1a16,b2302e7a,7770e5ce,afae92a3,8f6e1299,6fb04718)\n,S(b1d95fc1,4e35f77f,7e64f62a,36b26218,86397228,35ccadb8,39fa7d7b,834bdae3,75611c0a,920e0251,345b3213,422959c5,ac66c495,14d50c35,de7aa7ff,2a330a6d)\n,S(1eeb92e6,75f25a35,9ed16c8b,51a5c130,d2210c35,ce954430,ea2cb3a3,af69187,cdefc1ac,40fac4de,e42ba496,eae80bc7,680e214,4117e6da,c2b3bc12,ce9eec45)\n,S(aeef491a,fabae168,9d58c2f3,808b22fd,760e8607,c043c10b,591ed211,6fbb5ce9,b0db916,30810159,7e79aa7,82d8b643,d739bda2,c45ee36c,4f328108,4e55a33c)\n,S(c56793cf,822c3da5,300c6c2d,cf06b5ef,413d51af,633ec77b,b9b68b1d,d3079e43,a423e25e,1eb466da,f521c5d1,6395805f,a2da609,fcfcffc1,2728add5,61eb2c0c)\n,S(2aa824c3,c8c648eb,8bd0c151,b30452aa,c097bc38,a9f53db5,a8375631,25887e06,20aa4bfa,3bb2c5c2,a113299f,6c61102c,7586deaa,938a33f8,4a517dc,4ba78ada)\n,S(4a0bb8dc,1833942d,9ae3428,ed493cb9,5716b50e,c96db120,c18ccac4,f6c3dd9,d0526d5d,c8be139f,53427e50,17cedc51,6b4960ac,bb98d4a4,f07fdf26,640b78b)\n,S(2808616a,309b64c1,5d061adf,ae65711a,a561f8b8,345132e1,5b18fdb0,e476240,d2190f22,7320a55e,ad2dc736,671db631,9b18d6cc,b4d2bffc,cb4b692f,74eeaa0c)\n,S(3dc4b015,13a95221,32ef431d,33435ba,8cf9e6d7,7e4ac75e,54848916,c23e7959,eaa2516b,9b13bc99,1f4b8ba,fa90a6dc,a007fea4,e26fbe0b,a2c5d1da,326d5420)\n,S(473f6157,50af1d8,839ee0d0,eb5dfb8a,c14ce65a,e04e5f03,99fe8666,bd6efe6a,18d204d9,1b27527c,50823d5,222c4e4c,e3e193e5,a282daf2,75d2b43c,ffba8412)\n,S(3b87175a,db1a5e49,1cf7565a,28250c51,9fff906b,ef0eecb,e8e50a7d,a190aaaf,fc58f2dd,16f1a5cf,1a728117,dcac3dbf,3a3963f,3859a518,2616b65b,59e96403)\n,S(12f1b577,1410d1be,d0c4863,360e37d9,d36643d8,e0cf6fe7,8770478f,504174fa,be29140e,6b5a40a1,40559972,7e0727f8,ca904c3b,813897d2,bea089d9,dc2f17bf)\n,S(8658f35b,902afb85,408280f2,3b4d98db,9526b57a,1e6cd0e9,37d8c629,ae174a3c,4060349d,47a69720,7d29e83,d8c82197,d32bb9ae,8c83879,1e09a7b7,1c3e7c28)\n,S(530545eb,526d9657,2ce6cfc0,22e1c0a7,b9965c7c,3c2db355,cb5d414a,6c1ac8c7,99243b26,17f8ae2,898b96b4,1c3c65f9,96a9f8f5,83ff341c,671a2d5f,2d04637a)\n,S(2e808732,bbab8507,e65936f3,fd1d1662,91ada8c4,c0d865ff,849e0a1a,5f08d265,96dbf7c9,53fd2f61,7e149f06,89b66431,88b091d5,1227a1a6,a0ebb140,18a79fdb)\n,S(4272e028,b4b9c90c,44526fe6,b25f5e84,4b8baba6,34ceb2e2,33447413,cd5bb35a,6b4a4076,fc3706a7,50b0c824,93f5e363,f9fcdb64,9d683a1f,fc3bc2af,fc8470cc)\n,S(78712f3,449d07ac,7f8171d5,42ee8b40,4761e054,eb0362c8,3b30cd52,6f9ac60,c7ff5ae1,38ca3c13,79457619,dd76061b,7b59778,79db2ca1,5b07ea47,7aa41bf7)\n,S(be40166a,60ad9af2,d1bdfc7d,9b0660c1,640d4f1b,640ce485,8fb22eda,65d15a21,78c49afc,1d992bdc,b70bab6d,d3619305,a32fe90a,2f2b1b43,38d77c80,b208cf90)\n,S(2fd5831e,6bd5a79b,35bc75f,92e83e4c,9acff5cf,61eaad7e,dacb149f,46d5e6ba,82f38222,4b6be0f2,f52318eb,7fe44a4c,4c0c1b05,8eae3f99,dbdea80f,a70ca3d0)\n,S(32fc3fb,4574a651,472e0328,c15a71e3,bf9a12ca,15d341f1,c5102dab,2ee6de37,7e9398a6,760df809,e5eb57df,8fdc3234,eff1aa8,bef57008,c36e7953,c07f25a9)\n,S(b9018d98,3452e952,7944f2fb,3354487d,a82f8b90,e52689d4,edb2a91a,a8faa6bf,e9cd0e4e,5c5efcbf,9ca25cf9,f271f9c,a2c46b4a,322cc966,e7789607,324348f8)\n,S(a74ba662,32afb3e7,d5c22ad1,c792da33,f1bc88dc,244a8ce5,d4d582bb,b16ced23,444c5512,b49c2c63,4cc0328d,20f7321,a88db1ee,6d525be3,5d2de8df,cc381377)\n,S(40f6df83,6d5e8c94,332174e2,2fa43556,d06f48a8,f52cfd69,820c2c46,2185dbfa,852c5b98,15ba4ef0,18f5d231,195fb62d,afafc08d,fbf9159a,eb5f6063,ca353424)\n,S(e05800f5,f7890a14,6bbbabb1,27924cc2,e33e3c81,eb88606c,6bca020f,1aa71747,ab905ec6,3af1bc11,897a44e,89c2c2a8,3fb7255,c0e7f76e,8378e59f,1289158f)\n,S(7b75dff9,a1afde87,be8528f7,9df63d70,e4df925b,a15f01c5,8e8162f0,89ee735e,bc057ff8,bdc9e37f,554a6ad2,3ebfeb2e,5d64adb7,69fa0082,2b2d4902,ca82712e)\n,S(2fb81423,3b01e312,7ceabacd,a9ca518e,b1ab993c,bff855a5,20a96f52,afa9a0cf,a7e4bc57,b53affba,9e2cd875,9665cd9,215fcc,35dfc402,4d1db86b,9605c4b7)\n,S(f346a33a,ec17d0e6,a10262f2,fd8185eb,f80a1fbb,f6b06bdd,1c04f18d,75dbaaeb,c09caf81,120586fc,33a6a0bc,97ef5cc7,56d20806,1340a1cc,ba9955ff,4a059e10)\n,S(d128544f,a5f5dd38,62a759b8,5d538baa,63d112e2,f8c343a1,1bb3b8bb,ebf548d8,7893faee,b73f0530,bb67e8e0,9c2806d7,e303dd5e,116bc9e5,93e4dcdb,eac031f8)\n,S(69046ec4,11c06822,59de20b1,a2a8f84c,58c56765,2ddcae,a26f533a,9c706f43,c17a9640,adc07d61,4a264ffe,272cd686,99b9af9f,6890cdc9,ac02c761,637dda8a)\n,S(7b50f61a,9dd7b9ef,7af49c17,6ca5555f,eadf3b67,90998365,29379dd2,a3c85b5b,c08e18cc,bea8a970,7bc34d98,6b36475e,e2e24695,2304df65,bbe0347b,6052416)\n,S(794a9728,9db4743e,c91a8560,e430b14,a7d8312,1fbacfbd,ec37a9bd,c749d3f,c57a5b9a,f0cb23a3,5e9b092f,386cda86,bf2f8242,1f74dfa1,837047c3,ae0d2235)\n,S(fd8d1485,3d2fa064,c4682ee1,1c319a8a,49fa9b23,2cde9d1a,9a44b2dc,93b2f251,8cc4001d,f0121ce0,ad2119d1,7aaba363,ec45345,87fa10b0,c94a5043,f641b91c)\n,S(7b5fbad,8105fe06,6962a72e,39a9a4fb,fac27794,e39a6660,133b9ef4,a6877557,b9b4c9c,1200d879,6013de67,958176c6,dc04ef69,b1021057,de8d3b40,564fbcd3)\n,S(2c7ffc8b,40eda03e,20e64678,68959141,c66f01e8,b7cb050d,c60e8a48,6f6e41f9,cd0f3510,39aed3c1,56ae2b0d,1a117f78,c14a704c,992db297,60d22700,2f71ff7a)\n,S(79533078,d81a6fe8,446dd750,b59ecdc3,8904f13b,48ca89a6,5644aa8c,9233de64,d7c95bff,77fa9894,74634aab,3b8f86e0,ee0bf92a,3a338fb7,f89881e6,e1fd746)\n,S(be96c5e5,d3fb03a1,801a7760,16bf3824,aa16010e,884359b,d5e30658,5f13b214,d156346f,158d0c1a,2ef96a95,86cd8d34,20be21de,6997904,8299744,b40a5d9f)\n,S(165c53d1,9ac89139,c063d934,511478aa,bc296cb9,7201dbca,fea4cac2,16a4fa02,4b002644,1e6f1369,d3603780,f33f74e8,42a812d8,b4e7ff7a,4aeea468,35f67348)\n,S(508fb72e,dbd27f3c,76569185,a18af8bc,6242462e,cecffffb,3352ce3a,da5ccb5e,e1698f3e,1d53607b,4911423a,f2167466,a473a8f1,e2226849,f4dfe551,dfd14652)\n,S(e9be0fb7,8e95dc1c,7b79f4eb,7976367,a85034ce,ea8642cb,19106dad,1d10ab92,b7867a7f,51f89779,a32a7b8e,273f9659,fb84367b,90ca3ff6,afc2cdac,7f596c45)\n,S(e6ea5e6f,97116554,2de16c66,1f15d6e1,24aa449e,960b393a,e5337de1,d4c94800,bbd62bdd,1c235fea,60be143a,9155ffa8,204a1b11,3f19f4e,6e683c7d,e234ca7e)\n,S(ab3f8a0,5b8f5ff4,149a390b,a858092c,9653d159,6d84bbc5,6e4a7a8b,fd54d7e8,41008916,311de07b,16c1b49,c6aa65ed,8baaebf,7a4e75b1,5aa1bc34,37483e53)\n,S(515e02e9,52a347e7,5e0c5eed,a266242b,48bf33d0,70048562,c20feb3f,aecea1e3,797b3ef8,f6c35440,58517c56,ef5c6464,fcb63353,2bd6d2e2,83487a1d,8a403b36)\n,S(520cf598,b3552fe0,a42438f8,55aefb81,3a3e10d3,f4985998,492e06a2,42ef46e1,c69de50e,2bf9658a,40567066,3cac0e4,8c8d2920,95ac1df9,9535b7e9,209324ed)\n,S(26a8e655,4a2cf338,33bd27fb,d96880bc,bcc1d360,2a76920c,37075790,1c50bb1a,ba5a4560,5ddc5236,2a0d09df,3247a507,9c87e652,c4ad35f2,e19ecc9e,ec1ae4af)\n,S(bd06a5a2,362ac91a,759dc578,dff3a3f8,102a67ae,a86ac11,5ddb2e14,bc1bba44,e8751dd7,153537ca,eec17988,98337cd2,abdfa554,52c597c8,61c364dd,78f49de7)\n,S(ddbccf92,da0ab07a,e99fda1f,4a03927d,66b0bd21,f1e54fc5,afd4f329,35a0cae7,26fc18c1,52755bc5,d68dc3f2,461d60ee,b4dfc02e,a04b4779,6e7725b1,23acf8dd)\n,S(650e1616,2a30c776,b54130c9,9fbbf567,32e2bdde,f667b09b,9b7f25ed,93c0737c,14972f76,429eb04c,1ebb0583,8c54fa0d,309fee09,a55d7eb3,700be0df,5801d56b)\n,S(2920d280,41ad7365,cc0e33c8,7a3d6f3c,f9fec9c3,b00e5698,55ae3b83,8cf08973,3821fdd1,fe36668e,16f2cbd0,b2704fbc,24354f08,8ba19a1f,67d1b11a,b70c2d68)\n,S(3842fb0f,1b26bfe7,535c9f5b,cee85ba5,6cd491dc,346829a2,a178ce65,c5294302,8e02342a,cb0e1233,9e638018,a125622c,5f66ab52,86a74a6c,28982c25,aa3a0fe2)\n,S(9c21d89f,f1142d24,1e62c1df,e0481268,c2273d01,f153af5c,d31b3514,5b9b41ac,f5a924a1,d60e1eb3,72837535,4e252740,593c96f4,87328e9e,2a80cae,15fabdb)\n,S(59320ba5,c9088701,f354a3a1,93391880,2829ce91,be9b4c14,c9018fe6,4fcd387a,610e48aa,705e2e7f,86a6a12a,817984a1,7bc60f9b,abc0ba9f,775f3446,8e3f3815)\n,S(d800691f,83c2903b,1add209b,35d796e7,15b805a0,9bbe6120,3bf68a08,a13c46e5,21d194ed,bcb8bea0,cc35a9f2,328f1689,cdacc58a,73f65a28,56811e54,d96e5576)\n,S(865588f8,66c21986,7b9643d8,7f1215fb,90fe186f,46478e8,522a5da6,724f6e8f,91a6b315,a7ddca8d,b4ecfbc3,9b55eb81,393f4c51,f573fef6,e7ca0c9f,cc551e7d)\n,S(9dfe808f,cf7f574a,ddb251c0,4b053d00,8915f8fa,5a975479,d43c719a,b67aa4ad,4d40cc00,ea6720db,ff1f1339,7bb26c0b,281686a8,726fa430,bce0e4e4,ff01b01d)\n,S(835f1c87,cf8d4420,72728601,ab6aef63,cd0d73a1,80f81f07,f5d57cc6,bab5ef7d,bac2d1d4,c8541f65,be0644c9,40a18f7f,d2c30360,2083a455,4d70a111,1c5bf07c)\n,S(9562dc71,33c48e4,b46d73ac,d42db4c0,b0222c4d,dcd0e76e,b4f84969,348fa46,7cfe0965,96f691de,d358c00e,a292975d,465ef064,e9437556,40bc1d4a,33c3a0ba)\n,S(21afe3b9,4237473c,dc032588,c4c1b7ec,853987a6,dcd1fce,2c48bbb6,8d0f3b45,1751c5ef,674cf88d,d5385943,b40a20a4,6d20cbd3,9876adc4,a4a4bba8,477e78a7)\n,S(89809c4d,572cc5c1,2241ae09,fe1cee6f,71aaa292,c9ff8d6e,c3eb8a92,8e144ebe,462c023e,1710ed77,bd47d22e,e222598c,68cd7c56,b004369,a9356a47,ed6809d)\n,S(b7c6164f,b9e175c1,5724c596,988b496a,b9f5b0d9,dd45d0e6,4a0f08cb,9000e3e9,1a13e8e5,a23b40a0,aba44bad,5cb4d37d,a6061157,aeab7a0d,d327242,ab2ad11f)\n,S(62088450,24eef2d5,4fabe8f8,fabf519,72908ac3,23596378,c377c458,9719bba8,26216b3,a353295e,a1877547,b826c240,351f227e,293abcd2,e3967fed,30391f5a)\n,S(dcfe82df,4049089,f3f8b275,120ca438,998fb22f,e11d40e0,9d09c4ce,c12ad036,388f9754,39b1c412,10014136,c3b58fe3,30ab524d,d7d3524b,37ce9133,5cb3bf3f)\n,S(324ec5b0,12de7919,2f27f5ed,166344e1,934b3527,2b197d28,9a634044,5dd4bce1,99944794,579e12e8,c5c0c11f,a8eae5f1,88cb8cdb,3ce7814c,f89e3f1b,a3d3de0f)\n,S(b3a70b0f,af96cb56,7dc4245,13ab7c6c,bbc38634,faa0c286,b81b9754,454a363f,b507745b,97843c90,170f8ffb,f731fee8,4532c1d0,6b2a077c,2aba5d94,189545ed)\n,S(c4a6ff4e,cdf1ac83,29a1cdb7,b5165d88,2a1f1823,d1c38006,1b53144f,56187fce,6f7d0fc0,c08a7ba7,386f9a59,330996ef,b13d9d21,eb6d3915,4c8fb919,66159919)\n,S(61d9ee96,1ef58634,5c4a73e3,a8c3df82,eac28aa2,6d740cbe,1833dcf6,d5a38811,c9e4a482,1700107,f2d4af3d,fcc74e68,8123b589,4da1c2bb,1fd926e7,11330892)\n,S(67ecbd0f,4f4fe300,49390655,5289c9a5,cb6ac090,dff38502,75f7751,a84c6172,e422b1dd,10467cfe,921028f6,71cc75cd,2be5d8a6,75e644e5,d3c40b3a,2836726d)\n,S(47f6c669,70898fa8,16dcd4d7,4553c644,2ce5bbe9,cda91324,ee3bba7a,868ff0f7,e56b9590,838bdfaa,1c2be1c3,95f775e,4a0b3982,d0eee531,26ec7ddc,9e3f77a6)\n,S(e39ec9af,c8dccd35,4b155dd3,1d1750cb,ab096807,f89c8afc,fe61e6d2,e348cfa3,df3fca08,99158319,b93bac62,88c302f8,a59e175a,cda9fbf7,6f0ad59,8358088)\n,S(2d1aae84,500037f9,8e08b64,341eab03,e0f1cdf,5a079b46,738746c2,18b3a0,747c23ac,8173adcc,de767d2e,ac156384,ddf40797,131a6167,c32486aa,12c89e5)\n,S(ed1bbf04,d4570df5,8f584158,1fc47665,481ebf59,cb88322e,497d128a,678c2b4a,a40765c4,772da2d0,b3c8f107,22ec3931,ab3fc8cc,c28b003c,bea1a0da,279c8fba)\n,S(bcbc3e1f,7bd268,93f377b2,eee4b76d,49a8a603,738de309,5353fde3,deff55f3,fb697a08,2f2570bd,1e9e4ec3,fc7f6c81,2a27a7e6,f7b8a53e,30da80ef,f59ef2cc)\n,S(4f98b2d9,2f0b5d57,51ed3784,94cf4de5,65cf632e,982a270b,2746a5a6,3da9333d,43857e7e,437bdc02,6dcdbe68,d056784f,a2cc606d,7ce09a0e,12978a74,5b67e529)\n,S(9dbb995d,d0667371,1731bf05,c8029035,2b413411,45318de8,2236df5c,87728582,c0a90e4c,6fbc0665,f8cd9fb6,fd59ea3e,f6ae9a16,9bfb71fc,5fe73e3a,4d665f86)\n,S(83692208,1d099344,3d979c51,90940e44,5465624d,3a945c05,7885cd00,5ce6b9e,49be5e40,2e1d05e0,67b16279,855bc1de,6f0d8aad,35d8bc0e,142dbe87,33a14e13)\n,S(f713e920,7a699b68,12d7ee9d,1475ba85,a6c56af2,8b73ace7,cf67ed6b,55650e97,a5a2c2a2,45012812,29fc71c8,103db717,48a51f88,61765d31,4b9ec278,3d0aab45)\n,S(919f2d21,256ae682,fe514320,9c6551cc,d165de1b,8213fdbc,9c06578d,ef705725,9780da96,eeaac4e8,c96f3d6a,89c222cc,9b16b4c2,e8faad4d,96cc0136,a06021d3)\n,S(1738093d,197a5ce3,cedd1fa7,e2a8ff03,959a6c23,6aedf9e8,9dbd74c4,d82b6e48,74363112,d16b829,d371a0c,f1b3bcd1,2000254e,196ea80c,a9d46570,1ee4a1d8)\n,S(41242a81,35811b36,d4ffc40d,bbdeaa7c,cce36135,3c4fc9f2,d23191a4,b9c46379,7b894326,789f3071,374983c7,cd2a5ad7,e0ee49c5,e740dd33,817a31ed,97c388ba)\n,S(894a6ec9,96eaa8e0,9e077b34,7b4f1e1,a387c930,a526c469,aaefc0c5,402d41a,a080fb43,c8e6bc6,388fa766,2398e096,b65032e8,26c5a9a8,47793924,4dcf5e41)\n,S(a71f2131,3599cb7e,8c1058c9,52a5712e,661d01d5,79bc7ee5,1fbadd35,34ca5d5f,afe5b47b,663ebd7c,d788e0f,d3f963c9,ac63ee24,b7495e61,4a5d6553,9ab5f859)\n,S(8f330e77,82eb62e4,4ea389f5,7f1c58b3,458c5d39,127d9783,6ddef8c1,27fa390,894e6142,bc359171,999489e1,1ed08224,4a46100,136fba84,e2b8732,e9bb626b)\n,S(d2f0700d,6124c46f,a64cb709,1181cea9,34fe0406,21267334,c85ace2,cf05fc6f,8dc30ae9,83a95b74,2d800490,fbd8c290,bda64daf,f82d8fa5,e69243cb,43556cb4)\n,S(c2478e89,8c075873,ba6cd5e9,6a730e1c,b6ade2f2,7fc9e7ec,93da9201,63f88c32,c6412063,9921d8c5,77dced53,76907410,82b1b4ff,4434bd,9a55b6c,8591ed5c)\n,S(c5bc11a3,4e701898,d22e2920,2806c880,b24efa7a,c6d4ee36,cd440386,e4463a10,2c2b89fc,48feefc8,8bcb4ef5,68d16b44,cd7d8c7,485c9703,91c1c243,bf91003e)\n,S(4b3930e8,21827b05,8c487bd2,fefa3458,6d0d3f20,5a2236fe,1b735d63,ac8c62b9,c38a29ad,c9b9941d,dc92a0db,4ce5f312,252c1f66,8a3189c5,595a371,19321c6c)\n,S(fc646e3c,eab5a96a,1785da2b,1b50f7db,f0515091,76ade1f5,b057d05f,3aa3b8fe,b2014537,dbf2637d,6f683fb1,6af00d5c,63d4ed59,cdbdd673,f3bfbd48,e9574dd5)\n,S(c0ada793,e2d9ed24,8ce307da,a6bebffd,3df2fc27,d2001dd4,5dbfc7be,c5f97a0c,6f3a787e,d40f073b,4965d52c,40700f66,da93f679,9efceafb,4894788f,5c9c7fd7)\n,S(b1a45f3d,f2d45a,e21e43af,31ec3159,e8877d91,3efea814,b66f6fa4,a227b157,d988122a,eab167b9,f89db9e2,dd82405b,404f8a9c,a9acfd29,81c8bfa4,273ed248)\n,S(4e19b9e2,ad3e421f,1b85a174,89d8841f,65672fad,9a17ad70,ca4fcd12,716d7a68,51412d39,59b158c1,3905c267,f5cf66e2,364aeb8,b66a11fd,ea6f5471,35db6dcd)\n,S(533ee2b1,379a6ddd,6e5b3a2a,3a197e7d,eece722d,5c5b9c66,5e1be9dc,f3c09adc,b91b7477,fd0eabdd,bdc4047a,9bcad0cd,9da8496e,bd328fa3,a3ab20a6,3508a6d9)\n,S(ccdb933a,816ac55e,c8fb97e1,504fa512,67408fd3,77aeeaf9,565ab66c,a2033b94,20299202,99b57beb,5d3817f5,26aae569,b490b24c,d5834dbe,8b05e8bc,89110de4)\n,S(770d7c72,2e9964d6,84dead28,328b1925,287184b4,6e3abbdc,534eb87a,e0ea5873,363c73a7,bbb9b2af,3c0cc91,6f8ffe74,837a99c8,58b5464c,9f253764,e4a78285)\n,S(d440dafd,b1d0609f,7c2354d5,74e711cf,852b364,8827fd41,88228ca5,98f71eeb,57d438de,c1aa78b7,c872cae5,c6803a2c,9844809c,7bca1a54,1be6f779,893aae1c)\n,S(1602ca76,35ee0795,4fed3cea,d3e54470,41033887,2f060e19,990f3cd3,501b951e,1ea7f857,4b72d3e2,bd45fe36,c828f18a,5810812f,ab6e0936,a7854ed7,c7e32bd6)\n,S(9c4d2a24,e4ad8226,bccab8ee,96960b1b,4722d2a1,88a429ad,f9d194ca,6687f7e,e3a4b46f,bf608018,ada2383,5c70fbe,cabbd446,78c9e5c1,35e91138,7d66b01b)\n,S(fdf84be7,5be40fa8,db537848,e2fc8ba2,b7c58824,74fea4f4,6e8fcf15,f33d3bb1,2af57dd8,60ba0e6c,dc3606a9,a902420f,9283f721,70ce32d8,39c33673,5da1ff77)\n,S(6083a785,fc5aedbf,34615139,e2f97964,ef65d254,a38251ba,203f8ea0,26eea81c,bb4d48bb,894fb656,22cd752f,6e3bc6e7,670a4bd2,64675035,8481561a,2c18439c)\n,S(e03ad08e,5b4b9e01,5103e028,668f09a2,7d2f5254,25c6a985,6dfee667,6afffb82,f53acd57,1ab23ddb,d6b104b8,71d957c7,f254bc40,c37017ad,f7350e18,7a24865b)\n,S(5a382a4c,88656b6c,4a5c8dcf,4052b1c0,a0bbc0a9,86289ab0,e212fd24,b852d9bc,912caa9a,32a10900,eadd0eec,423f710a,3e0aaba7,93f7b675,912223a2,6ba14f31)\n,S(37dd526a,b5392b03,3bd05ff9,3952a31c,7bb0cfe1,f02f4f57,3b8d0ef0,c05d5ec0,7e329228,36595c82,14c8a776,15482931,98966225,4d4315c,c236c156,254e3249)\n,S(ed4460f9,cd4bc957,aca653a0,5b6f0935,9dd7e19a,6d65c60,ca585ea3,ee2e1263,733af30e,6edd2b2b,317bba97,d24abd7e,41af6256,e7353f97,58357ff4,1a701829)\n,S(eb01d9cd,50ff4778,b29e5096,93388ee1,12cfbc35,2c1b1382,7b3195e7,44a3bc3a,24877b7,99b7a2c9,db23047a,3194e9cb,91e5dd50,d0f1e252,b6f3bfca,f5b4d110)\n,S(9fcfa274,b180ce82,14624545,22bb9289,1e0a8fc9,71949bfe,7aa25cde,88dc284e,6787be0a,12a76a23,9de45596,2a11f7f4,4051fbbe,3ba7dfb3,996c60ee,97be2b9)\n,S(c8a0d869,87a7a854,99bd5663,30a07d67,70265d8e,cd3286ce,c9be4d02,6145bff,a65c64e4,af865e6a,893e902b,b06c43d6,10bb8181,134a4b71,d136b5fd,f42982a8)\n,S(374294c5,932d3f74,a6e74731,6c6a84ca,dfda6d35,5edd914b,70b26161,50628735,ac47d048,8433754e,3deb79c6,7056d828,14d73bdd,703b299a,ca910180,e518672f)\n,S(baa9e3a6,2b4bf099,1fde27ad,4b043b50,76a184cb,4f9a6da9,9b56ecd8,a2ab99e5,1e8e836f,f76043c2,c187ee45,7138cf3a,270e2d3f,5bc96979,c12c34cf,9205c63d)\n,S(72f85ea,784a5ef1,71516c22,13abca1e,8017db34,4e00b397,4cb509de,a124654d,c78ec627,6cbc5072,fd75b28c,8d395f13,e84731f,7767448d,e06c0ba7,372968bf)\n,S(c9173d63,bf5a1301,f0750b1d,e3cb7061,bb9cdd36,296b422e,d23513d1,10b61903,d26a6a0a,ceef78eb,73c6b031,a5455d2c,2a9c4ab2,d916b7cc,7b8e627d,6d581c56)\n,S(865ff86a,58fb9853,8bcfe496,26c0bb89,e419083d,f21dbf6a,7b13e041,d5cd3f18,f0bdbabb,8118de57,bce9a90c,83529ec8,abfc2812,ab0088d2,8ade4bde,fe2fa383)\n,S(3f14eb28,fd9852c9,bf4d4497,4d794ef1,c30f7748,5c7bb766,6f32fcb5,5ad910ad,e982971b,ec014b05,a9b5657c,a0bf45b7,adfe19d,22726075,80b42eeb,f4dc5217)\n,S(61dfae27,c7bb68a1,ede331c,6499a7ed,e242457a,77e5a606,cea82e9f,f450d01,973739f2,c1e4ff77,cae3cf59,b481e730,5ebe8196,c5b62b9d,a96ae224,9b83efa7)\n,S(e319690b,e944c297,f7c1bc1f,462ac3b5,a74fb913,9b963384,ac11046f,4343883a,3dadda66,538ea9c8,8fa0c02f,208ede8a,b6ef3480,82af4a32,2ddb5fa7,96d2efeb)\n,S(f3db5e84,a9015b39,1617fea6,58143553,baa1975a,ab017012,38dc4243,7d9eaf9b,df55628b,c50cb2b1,be2ef193,a7f90e6a,3bfef4ac,63aaeee7,39907906,547d8b62)\n,S(83a7dcd,58742725,8d17657c,ec64b5ed,4807db49,911296e7,10cf349d,c4fc709f,e5201a27,c37cca5f,2f7bf74a,fe000c0f,56643a5b,bafe9f91,de181e74,1d327183)\n,S(b95b2363,28f51c80,b376dd90,a0f92d08,1e395132,deaa8f42,c142f642,3d3611ee,c111a08c,a6dbccad,2e784498,22816422,f2200f6b,bb24842a,f96c9502,13479f55)\n,S(c3ff0645,921f2b9b,2fe590de,dfbac094,8475bdfc,a6446177,6422cca5,6fb549e6,e07ecccb,4b972834,e2711423,c0fba72f,eb0bb7c0,71a9e206,bf7715f2,62f03e04)\n,S(96a37acc,527ee163,51c46241,1df94da3,eb0229b8,6a6e34d0,234bdcb0,5313c10a,46014617,fdd3f8b3,a67269d5,20a49680,9e5fa57e,76da4ef3,59ef862a,c58380c)\n,S(b135c091,ec98a07d,b624fe48,4d336b85,62facf81,50346e2d,d0be2cfd,618d1e0e,24456a71,e8f2cc29,19f53594,6d7aaa79,e3d7dcfb,4af2feb5,ea0a2ad3,a23ec070)\n,S(71d26219,81730b69,b0411b1c,f553c81,6f35a34,e09d086c,4500ba,94812017,c25357f,8915a2c4,98fe0d60,ca979ecd,8bd7ded3,ad6bc9ad,262db1d2,c3d3e7be)\n,S(363cae8,ab2259ee,80283084,d98dc16,60c0934,68e3e854,dd86d9a0,d5e97884,756c60f7,c5e113d8,6e92df38,8fc9a1a2,a4889d86,f7440429,7661365a,ccfd8ce8)\n,S(aef32d83,81ba3804,6e5b3305,6764ce3a,726c4e5a,ea61a17,ac114599,63f36247,dea5fc8b,d4ceba19,89640462,a957a8a7,44ca42d6,901716a,734e6f87,9aadb81e)\n,S(65980f89,e4d0e342,d4b4fcf5,228692c0,9ebfed11,52d951c7,80963e6f,8c81313e,2d594cdd,a1f0b9db,7b3d8815,f7402a06,acba8e31,b9b0c597,8d2118a2,5dffa75d)\n,S(f979280d,7e35cce4,8b9372cd,f73cebe3,6ee08388,e98e6069,fbeeb168,52329433,9181e8aa,bf7d4723,4cb851d5,6b3ca08,8c5f31eb,6b1b8c7,2879cfba,bd3ecaac)\n,S(3b9f877e,286a13c8,a8463db3,b306ad62,c152065c,6708bbd5,68931e8a,2deb537f,12436d2a,5269a319,4f605dc1,4a34fcb0,445be9f4,5cc2bdc1,b96d86e8,b9465631)\n,S(f2c70f82,1f86e94d,426e3e3c,e31ee519,f5a95b6f,38b663ae,9a6aba4e,f7bdc4e5,dc534655,4ba850bc,fef2485d,51e08c3,ab546119,49fee2ee,4dfc4e09,ff203b44)\n,S(e2fb481,da8a356a,ab82098a,f622db2d,6f0a4349,2428dbac,922c1350,65801f15,5f735bb5,bb805980,d85ae242,4855bb2d,5de0c1f5,5018e1a8,e65bc2f4,86b7742d)\n,S(d99e2001,33cf632a,f66c382e,d8ef862a,17092764,2c8f1f40,bd3d7bb,f0070324,d00f12db,cdb6e1ed,d190a754,fcbefdec,ee459be4,d5a46d69,afd6cbf8,4a4d30f2)\n,S(dd765b6b,cb2dd356,f5965a8d,38108610,688fedc,eb3ce48d,352b095b,aa0daa,636258b3,58171669,f0dc68bd,3dff2a6d,bea6e5ef,20060913,66b12082,e2d7fa0)\n,S(f549c14,f099a957,6267ad6c,3adc985b,9d0626b7,3f1f5849,d64ceb1e,266a9965,45a17dc8,30118c3d,28e73a3c,3d026afc,29ecf50d,198afdab,dff3d130,8f32f3d3)\n,S(20d80860,90a192a8,51eddb84,f79b2882,ad7ce8a0,9374b365,61e6da34,427e8226,b48b6947,9febc104,880aa8b4,17344206,b19dd720,e5392bac,7e1954d4,a341eec1)\n,S(b9f383ff,2545078a,c22cf9cb,83fc9e00,e9d37f30,e03ae03,5694437d,c1de2d7f,14f8b209,d1128a44,20dfb93d,3dc9ccb6,7ed22dd8,ecf5a181,2cd687dd,64a2996b)\n,S(2ba0e5b,cec7a4f0,c6edd1c8,2d2f5927,2d97f4dc,3ecf353,8d3854aa,8d6f9739,8b10b217,6e56e5e6,5b99a617,eb71da00,3bee99af,b80e5ef7,3ca8c332,5ca7a75f)\n,S(28b45a0f,3c308ecd,c0f7beca,c62d42b,500b704a,9af39931,b8debae8,8cef27e,9a3f95d,a17888ac,19eb4e42,1279c400,a60a0c1f,70a11696,4cf6943,9fc858d8)\n,S(d8993bb9,e73af10,26ab41f0,9ec5adf7,437ce08a,4295cccb,283657f0,7a9ca3a5,ad8930d7,817534b1,e8407db9,bb8a608f,538b2bc6,9827a234,743382b,4381ddbd)\n,S(77cd88a1,76bfed38,d7dd7152,32e2554a,a644b79,64a85f86,dbd6ffc6,69714e82,4394630a,42436802,1d0a0681,87fcc6a4,dfee0fe3,6db3bf2f,dac6fc58,34faccf5)\n,S(d2557185,9c0fd15f,1f3666d3,aba99e38,89419099,ce7be94a,81ca1045,158f2da,90e94d6e,ac00b9d9,19832505,75bb2f,3242e7fb,fb429dc2,a90e3231,d1316cf0)\n,S(f4e26c7d,4ccd80e2,7620917a,fdc72ca,94178f54,547eb330,77baa95c,d92a981e,c8ff014d,a388dcc4,c634304b,5973b274,785927e6,190c5557,773b9a0b,ef7d7005)\n,S(da3a12a9,50dcd18d,c9e531e9,86f85a53,e7ce5bb8,8f2b5869,9830c44d,8c14cba2,7380a5b8,c01209e9,a1face4d,798f63ad,519a67fe,6bc90511,c763ca19,7e8c6b41)\n,S(3565fae0,daf5d9ef,609bede3,6e19417a,45d8c0d2,59163f71,b4d9f54,43756fcc,7b1ef713,a88f9965,be7e6799,4a936960,c44f67ae,d5fa798d,8c0286af,e9da257c)\n,S(6683fb20,d435a139,bd08c35f,adcc8aa5,8fbb8f48,7f9576d1,6f41d086,3a4e3de6,6a969f08,566afbc,dc98abfc,9d0d4d54,5076ebaf,efc9b966,957f1dd0,af52209f)\n,S(900de92c,cbd4528f,57a72013,77dc1b51,7af67416,1013a20b,30d356bf,e011f508,cb55db4c,8799575d,9dea64f6,9fdf081d,959210eb,32b26bee,b903bf0b,80264c60)\n,S(9d84bcf8,1be8a9f5,df2c6e80,d1b5679e,476e39c5,c30351ef,dc6b0b41,61c17613,8aa0cee8,cbc22e60,b71d9066,3533c2cc,a02b8d7f,7df93ce9,897154c6,2fae046d)\n,S(6280fba,a3c3c8e4,4fcf0f55,a783eea5,2ebda748,501730de,71781be,abadd211,45b74c18,f0c18d3b,76cc1089,8741246b,202fd272,cdd0e866,5e1f4d86,ee527f5a)\n,S(a4237add,7a5ea66e,8a1b48cd,7d5ef195,d90f25e5,6f2f148c,6d4eeff1,805b9024,d512d16e,632bd9ce,6cb1b2d4,c9a41e36,f9a2b83e,73fc8631,1e4dfa1b,b3bf71af)\n,S(51effda3,e84027a,47afb48e,dc5c1937,9a685a24,ded2998c,c2b74422,b1e83fe0,346a9d82,cc07ed91,d785c6f0,dc32b62,e3e7877a,892007cf,c015444e,46001f19)\n,S(87ac6bee,837ce155,29c005a1,6eca4540,de1480b6,91bc0ed8,90fed51c,de923cf4,9a9aa52f,1be1a33b,7280d0a7,3c19f5c5,b6baf99d,3c9c2d54,4a8d9bf3,a25ceb71)\n,S(c8fd7df6,a3b0c0e2,5a931146,72a0af1a,1f995f1a,109e6e83,10b0d433,5dc2666a,3a853149,9b28c2ee,b5baf17d,dba8f57,3cf6e269,f4f21b1e,72bf38c7,79d239c4)\n,S(890f9eed,47126c8a,355658f9,296b1845,b142eb17,4c2270d2,46293ba2,997e5a54,f294c38a,1c929ba4,2a9234d3,249690d,10a990cc,137bda3c,ada4b3,6d4e4b79)\n,S(9329dbcf,45adc298,65c8defb,ee2ce008,a3474855,39826516,b417b9d3,bd47c86a,469a6cde,e1b0c094,f536fa91,f7617890,1be77c00,896efc5d,94cdd787,3886959f)\n,S(6fa5326e,7b161c7c,742188d1,c47263a8,2f1f78e1,df83c664,2546c9ac,70660332,86cfd636,11879179,16d51a4,eac57709,5b8abab2,1024ce5d,35d64b4c,78559375)\n,S(ece2e23b,8915d7fd,dab9e58e,8489b053,24eb1485,d18eff66,ee5013ac,3e0556aa,6a94e4cb,8fdf0549,a01621b4,438c2757,fe9753f5,13dcbb35,5655f9b2,ebaaea58)\n,S(891b613f,413c155b,c2dedaf9,96d75e1b,54a5b5b0,3705808c,f575cdf,1f697ced,11904787,c1fb6f8f,8856aeb9,f7e05bae,f599b78,d7450bf9,13288e95,ff3f871f)\n,S(b7bd8742,d1af6cb2,9b55a307,dd3c0318,6923be55,78ba2797,e38a7154,8d6231c,269e9a33,7a9421b4,cf45938,1961b0a4,3e4a0f6d,f6a0f10,2d7a831a,d7d4cd3f)\n,S(7c6f5db3,1620a83f,b4388d45,75d244ca,1f38a0d8,611300b5,d4fdc9c4,34a16432,d5c0c35b,e4a371b0,3b85214e,f5e472de,e6c8175a,b140f05f,6e52b766,aa313f7a)\n,S(18d303bb,d2bd6f9b,7f941879,6a23fbea,5ece2078,982064a5,e040c95f,c534ad3b,76eaa3dd,b73af546,7b1862c5,7b4385a0,28b03b7c,66729fce,94885373,1ed2dccc)\n,S(31c0daf3,31aa6248,de302243,a768aac0,c8e27da2,c2b8e0a8,7fd74214,b49bb78b,e8e1f975,b77550bc,d404631b,12c72d38,55d3bf5e,5477a588,b11d57e0,e71e1ebe)\n,S(940aa62e,e3bff798,327e806,b644a972,fae9eb09,dffb8394,61b080b4,708f715d,2853e12d,56898ea6,8e922497,3660a29b,37ec41c7,339b8059,2075c7a,2836c1b5)\n,S(66db37fe,3bcfd7bb,25ca4a1f,b2ee09df,5c748061,1c3a6fb5,d0f079dc,cdbf9b7a,a6d37fd5,5d58ee33,73898711,69794421,9cd7a2f3,3becc8fe,761bcf83,ce603b9a)\n,S(fb04bfa,a93a8ed9,3d755351,98895c8f,e90d545f,8eb1d08d,5d7282bc,66026e3f,e77f3c9e,afa2791,b4db2f69,3438d051,47edc983,a8541296,a8cae9a2,174e03b5)\n,S(5792afeb,7766365d,e6b36beb,aafde8a1,8e556ac4,207965d7,9e18c1ca,63465c78,95fa5ad4,4b93db96,2c26d740,d2aa582d,da19b761,480ecadc,212452ef,cd885b40)\n,S(186c0feb,6298e341,a2440465,547ad137,c56593dd,ed82b608,6824097f,3f83f8eb,b3b58cce,8375d9a1,e63500d,141feec1,38778c46,4be1ad43,7c63256f,33ac3b6c)\n,S(d39114b7,c22beefe,6796b6ae,3f740a39,9e3c98bb,58b647b3,5cb23ead,76eae678,1df690f,383db8a3,86284ff8,f914925d,c688aa2a,8ec01a2a,243eb309,e79aa071)\n,S(6195550f,8ce49ce2,f762011b,2e8feaca,509a0628,eaa93151,4c779616,721b39b3,ee8208f1,6d86fdbb,c75c265e,88090c85,aec112be,a1d803e1,211151d6,cfbeee2c)\n,S(a8429368,37b33a8,2d41a26d,e11a0fd8,7af231bf,30d3eb64,73aa064e,acfd8740,18524c63,c0cf7a0a,b4e0eddd,61717f6c,3221a8f6,3522d35d,4eccee30,b6ed82c9)\n,S(bf42ae9e,a64351a6,eb1d2c64,57d23481,f913de5a,d3c00359,5eb8cb5b,228fb202,2d74804a,34413cef,8d2cb488,ea780cf5,15faabd2,36a9db67,91549577,70a09d3)\n,S(f1bdfcaa,ba133809,f915e0af,1a08fcbb,dd9cb3d8,b62f545d,6b71b44b,b130daa2,51fba8b2,2c7935ed,4241a87,f19c2b76,bc1a288e,3e53855d,c532f0b8,1ee382c9)\n,S(7bf32637,4c6adf01,c7796f59,a11e5c3d,103e3339,a0cfbdc2,dec57f5e,69429bcd,8926e57c,a1fe7442,72d2e89,d037feff,df263831,e40e9ac4,8473336a,269f6b44)\n,S(95b652a7,7f58b0d3,4c6d25e1,c294907f,a22a3ee0,f8e8478a,4e8458ef,37791c2f,e7dc4caf,b5bfdaa4,7185f0f3,a98876d,b50bfb35,a77a8b11,b522196,9f255845)\n,S(d9f8c6ab,693f8058,8c73e2a,9221b0c4,c8f1d1bb,5e1e58e1,8468a48b,c74f50e1,cb38d48a,89c1ecc0,23e0e248,e1991ac4,3fbddf5a,9beeb53b,4cd9c49d,41f42a9e)\n,S(43f62528,287e50,5cbf1a68,18bd99c,9f307e95,84e0d73a,f9fefeb5,b6dff92b,85fbb4ea,b81a0409,ce43ca05,3dfd5a1,9756fb5,f4b964bd,dc409efe,696c2ace)\n,S(425a68ad,6d20661c,ca7d688,6bb9c66,f37dbf29,30ccc6da,dc34025a,5ea7a92b,7853cbea,d7816579,fa98ab94,875ebd2e,7ceebf73,20b50b2f,7e67f0f6,dfd2eeee)\n,S(929ea74f,9b75c327,a7b26127,8828feca,821e4d8f,c5e308da,f3169a2,bf84bc2,f19e6cfe,d8c966da,bb070d42,3c62289a,5193146e,4297fa35,5908663a,a36b0578)\n,S(83da36be,b1bedbd9,4a4ee417,f9faae5c,c20a9763,2c1ab2c8,b997f23c,f6d35c31,a91def1d,7871aa84,eed0bce6,12bf6a82,98d0ebb7,536d8e49,f6757a48,aa7a86ea)\n,S(a2e1da8b,4318fad3,52c8c285,46f0a8d7,8fd6cf6a,b506f8ac,2d6746c6,75f2d5b3,584489cc,58b08663,1cdd1b7,3e61cac3,52c16814,493b611e,ffb94a71,2cd85699)\n,S(5d7c1af4,4b257440,22b82ca2,9923a180,bb7fc209,1990b111,12061b6e,9eec4d2b,b40ca0f6,a974223,3a7b0253,9f0dbefa,1bf23dfc,cd59c747,c290f525,2e960b02)\n,S(e2831933,6cce89c9,993bf230,ae4311ed,48fb0913,b5f35da2,b7531418,b512a75b,660aa9d9,8bfea898,810107e1,711abff0,88881efa,4d9d586d,91381b11,67cc2a21)\n,S(722c1e28,498d3c21,66fb0f1b,f44e3ba6,181a962,75efeed6,ac83b36c,12426031,27a135d2,3b70006b,480c3aa3,bd057bfa,200da08f,f9eff741,6bff7885,4a1795be)\n,S(f3cd71bd,f93f2100,c534d788,ba607845,cf6049e3,b94f5274,84e8608d,7adb9c99,b8e86285,db09b729,dd789293,7cf5fdc,989e00f4,5dcd4916,a6860bf8,d77cecfe)\n,S(36341496,d986b096,5e5ad593,de6f88,67aa6130,889714a3,dc0d58b7,19647318,8cbeb984,a3f4bb5d,75cf77ce,14368b9b,77dfeeeb,7313f16a,8a573953,c7b898a2)\n,S(a48443b4,3783c58d,4b7b2f27,17efafc5,e5ffe24c,a7c26bbc,dcbf93,538fbdea,33bd2bf6,9a64a742,c461fc0b,b0ae8770,9ed47a9a,26e7d05c,b71e4e2d,20c894a5)\n,S(d4364d96,71f2876e,843dede5,9991ac5a,cf92268a,73212ab0,54b1c196,197dddfa,b30038a0,fd9f7387,fb37754e,9b050e80,e0f28596,d251d627,5149149e,880f6d43)\n,S(ce277a60,19ac0b41,16b9d863,5a2555cf,30ef3408,f1a15769,91e48d0f,9465d250,5260ee90,65c89bc,7ef55fa3,d5f5d7ed,594fe592,322b7e97,965a9a3a,5654e710)\n,S(587ecb1e,7c08da9d,75ed0249,b1281762,e9c71475,5c3ae35a,f7d66b53,c83117be,c6dda341,cb7d88b,b4a1b13e,313dcca6,1ec58063,376d38f2,cf142b56,87bafcb6)\n,S(d87f96bc,69510c4f,19b84e93,cd8dd0b2,eee4fbb6,c5c5074f,ea76a209,e059f41d,a9b83947,b557c4b6,41952117,45ddff77,b5952798,66fb4095,6b5361a1,b463d326)\n,S(af9f0d3a,78454c,eb8ca65,c9d7a324,312c01e9,dd8a00ad,e923f2f6,41fb0ead,2d3003ef,29a5ad10,20262c54,936411f0,f8082630,8506fcb1,e1848a7d,5d16482b)\n,S(efd0467e,f4791ec9,9380be87,394225ac,637f906f,800abf9b,1ad5b3cd,cf9f017f,a14308d6,b0d16772,f36da4fd,d77945f7,1d82276c,ec4dddc0,de24f760,965c5725)\n,S(e892235e,39ac312c,f30dfb97,97e88446,dc1f9a3,ef5cb8eb,d540c64f,d6b6129a,5b291ebe,7c055f52,b9fae6ff,cdcc6dbf,f84cad1e,4d35f495,4dc19b3d,64eb992)\n,S(3158351a,542ff38b,12f82b5a,daa6ea3e,6e75caae,600b76a1,16ebe3f8,c9bcd66b,2006c258,a327481c,d324acda,b8ddc331,6a6aca81,44dba340,527babd6,4de975e2)\n,S(f17bbac8,c0a7d2da,bbc5a5cd,4b28e96,4ab88639,546b2b22,d40c519d,25dd448d,14f9f488,e76663bc,278961f4,a33e11f6,98d6f5fc,1eaac638,79ccfae,1ab40991)\n,S(9aa24eb3,44e010c2,d6fd3efd,fa03cfe6,aff67d25,2f08dda9,3d00332d,3065defb,494cc5bf,e60fff11,f42190dc,e607f067,7e355a9,52ccc682,6845111,322ac050)\n,S(3f36168d,77711926,deb0f7ea,b6dad80b,8c755db8,e6705fa5,61285f96,84f1ccc5,486d57cd,b46d998a,5d064f9c,68511657,e53e544a,ee8c5521,87a1cd16,4121c6c2)\n,S(fad18e89,219c449,87551525,6150e4a8,1fa2b23a,b6c1d90c,2e2f9152,ee8cd054,b285a7de,4eeff44b,751b4e51,f252f3a0,be7c2223,a715e301,23e9bcea,495ea7d4)\n,S(1cb1cf55,9c56951f,58147d84,9482dba7,8dc6050e,2897f389,e30aa87c,519dadb6,b9e54a71,93a8e255,b2cf1fe1,80fe54e4,3e17470,60e9128d,bd527abd,c7ef1f97)\n,S(74e68afc,9c8d9e0c,92675d9e,2fc12803,4ce7d22f,e31f5332,d18817a3,bd05efda,1d8442db,d55e8abd,aa1de803,f4fb1295,e9a8710a,3f25a242,7af9a5d0,b5dd786a)\n,S(10336317,ec82d4e8,543dea2e,b8cb597d,3aec0e70,fb2971f8,7c5699aa,e4576de2,f2ccc066,5eae8645,54816dfe,c82e1162,226ab207,a17c6085,62925f5a,ffa3e021)\n,S(b06a55cf,57668bef,6c51bb66,ac8ba7fc,6714c864,ca788279,2c8b759d,290342b3,7311f47e,5b526dbc,e4bc7833,e4c5b45a,190e3517,8f0f8137,2857e7b0,fb1f0528)\n,S(af83a357,81306453,e576c819,d1cdacd2,689b0198,4f108d2b,6d9b8148,50df5523,14f52176,909c7e1b,eda13d20,7567f31e,161a80ac,112e4016,ad7c0bd6,20ec0ce7)\n,S(f8f56d54,54faf536,3ea98913,827d57f2,a8983112,aa8809dc,594af919,3ae5c4a5,cc9d4182,bcb00a0d,cb73bfcf,da46ced0,ecee167d,fd7bbfc8,899063e8,d659dd7d)\n,S(61aa26b7,415001ae,d6b3afd0,1c690177,879cac31,93a2e410,4148df74,733c4ea1,972510d3,697b93ad,60711b39,f3b3c237,771bfbc0,b7238e78,5a786707,dd179f23)\n,S(781f196c,dde0f8e5,10ad45ad,6be062aa,1315c246,85d0ca97,21533c65,627ad492,6f3248fb,e7e61cad,1b01ec2c,fdb4dc4a,b1f4dc25,3666d4ae,27a88d50,c566d18b)\n,S(c422d61,7f84ddc6,4483d55e,19228dcb,395f16fc,e85b5c93,2778f62f,ce8917bd,2f3cef48,deefbbe9,9477389b,be898cb3,90499b2a,615899bf,1e910e21,ed337652)\n,S(c325955e,b56fe9a6,66555a32,72f637d7,3351b65,da5059f2,17748e68,4da4a4a8,3fa27721,2364140b,5b71526f,ad963d01,16889555,bdd42fda,c2b451c,fb70a3b4)\n,S(e393cca1,49142f01,9be9a4a6,e8597354,e34f8d55,b400fa4e,8ac6b4c5,7e50b7a7,e40b69bb,44d6d1e5,22cc30f7,26b7a262,3e5b76e,7b190f07,10325a08,a99fb2ac)\n,S(33e3686a,e4e69510,e939e53d,62fd669f,f1a39af5,c6179364,a190ae11,a600cbf1,cfe60b76,1306222e,7052b0f1,f799380,ed564d47,1f6418ac,dfb13d98,47f9154)\n,S(1c35b5c8,3072f4d9,b3b294b7,69ff1b8a,ed2954cd,a013c7b3,34b53fec,c783b251,1c691a2e,782ff393,b0ac6c31,94f4cb0,f8dbd5f5,b51654a4,3914a458,6b855318)\n,S(147255dd,3af5eb26,119e3d86,b2bed206,43579099,742c4ccd,974f7fb9,83e47fa6,5e0a0a01,7497235b,4766b44e,2fbe8902,aa0e2c2,69e7ceb1,d65c0f34,7a97f7f9)\n,S(9524d71,57304a13,71d46aa,bc43986a,5ece70cb,ea008aa2,b8c97070,6436b237,a343af97,db30b94b,3d8d366f,1cd27b11,83c9f44a,75f0aa93,8c4932aa,52f6ea55)\n,S(8502e7c6,e498d868,3816188,a99d0f35,79058887,dbeb3c03,676b3b91,be7481a0,28bda608,a9e18df9,c304896f,94efa7d2,46ee528a,6061afd0,322e052b,e7cfb68e)\n,S(b89a0d8d,a21903a7,200b196e,46714aa5,ad49c5b0,8fc84de7,8e72ca76,2a3ad3b9,953bac1f,85e4f631,38464a99,e6e3be5c,328b3c10,7523701,c60aad8f,d57e6bee)\n,S(49bf791d,67125d38,496d8ae6,ffcc25f8,97114f6f,9fcd5541,9876dca,4bdd7d7,6c2976ec,1b9078a9,a90f55eb,510b1a89,17efca39,d2fda494,b9013d07,7f4e05d8)\n,S(c63bdf20,1ff5b07c,14273727,ff174322,422b6497,9ca8427f,5f868eb3,a1fcf05e,c4135e1f,1b5a09b5,d628674c,21ead97a,42957d31,92a44de9,b785986b,3269a782)\n,S(58c8c84b,e9f85bd,b26f99b3,cde715b4,4b057d56,d5411c3e,a3000829,27ebe551,15de85b2,1467bee0,d4e0b0c5,114fdafd,410cf720,3ab35f1c,1eb2577e,fc2ec620)\n,S(5fc5177f,e0b59e31,e4abef85,31f3fbaa,e3399bb4,126b6119,c7acac83,777cf9b8,adf27f69,b613fa62,3cff72eb,4dd10b4c,4009b73f,2cb885d9,57ab8c78,ca705fe9)\n,S(1017a9b8,5116ce3a,498888e5,7a408f36,12a6e8b,b18f6961,d6e1d2e4,38902928,24f7a939,5e0d3c0a,579ae611,b733248a,640db7da,929edb24,b11bd617,3e573658)\n,S(d9ea68f4,6af94d9d,232a5deb,c485fed0,d719cdf3,2afe4617,524958ed,751a2c47,e59f2193,db2fe578,642a774f,c4fc8515,f638d1c0,ae8081f,e9d3c0a0,fe20410e)\n,S(61d975c7,e4d7e262,5b067179,667325c9,a32ef6de,a0bcbcb4,a825d89f,de6f7aea,b7a00d17,5a2d827d,37de6c8,667bebd9,da92ba42,4efeb706,54092342,e644db9f)\n,S(2ff5cd3a,fefe0c25,bbb8245f,c9399409,83194bf8,f4599f3,101e9d79,b7f8d9bf,3c154b7,11964aee,5fe9175d,deacabe2,400350e5,3ea1ba23,20d9e675,5aac8fa9)\n,S(cb438486,954c4a00,effd88db,29e0e61c,f9fef94,5b42bbca,8939e0a5,dad9e8a9,920ab096,41789957,6c3a8ab7,249ae2cc,73d1443f,5c650ad3,4da9d473,221de71e)\n,S(9aaeefc2,889948cd,f59fa4ac,352204ab,46aa399a,c848041f,446be421,e0e4758d,8e4d2899,2ef8d6d7,3e1e118c,70729e7b,4e0bc28,69d7b5da,72df7b46,38fb3365)\n,S(ace47cbf,846e95f2,9387dab7,6ed4e272,e32f6215,1e745738,69f2bfbc,720c78f0,a35997f8,37b8e86c,3b4377d9,71098d88,95d6a008,b9d65552,b1385a4b,49c53d3d)\n,S(66610f69,1558942f,8285a9df,3081e431,5c946a5f,df958f03,b2ffde5b,c591850f,be93a2f6,53a8630a,ef037f8a,624e623,8f2ad9d7,3ff4624e,f4240cd8,d3495a98)\n,S(db4bc8b3,7a12e950,706e148e,4f07df0d,a24d1de,615f2201,2dc1befe,f1ad95ca,fd55628c,c260a1a2,e56b95ee,ebd6b854,f548dfcf,2c4a6b99,7c4e95a0,a52c4894)\n,S(a2a7aebf,58a9a58,24d5a996,da18958a,5fc23d8,452d13b2,b254d4fa,bcba959,d6440764,1642f25c,8b31a117,cd7ed90b,dcdc54f9,e652a818,bfa032cd,18bf085)\n,S(2d8846f3,fa8a7a0d,408f8ad,bd76366f,4bf7bade,c255e2fe,595e4e22,cfe86684,2c0a7297,228185cd,3b21c10b,5c7f490c,b01bfe72,9513eb63,f2716d27,f0fbe19)\n,S(27ba20c,a44821f,d6ebd41c,8c29e584,6237d8bd,13b3eedb,a82b5aaf,10a6fc59,68d65fe7,b511bde2,f922f119,4bb411a0,c000b4fd,268c2c86,e14279ae,9a63e42)\n,S(c2f0b611,3a6bebe9,22ec3e97,a3962280,ab0b6713,76a6778e,5ceb73a7,e2894b13,27b90863,65989917,68a9635a,7f6c674e,71a433fa,ce4f1ec4,cd775277,89d290e8)\n,S(8420787c,a0df74fc,5c81d19e,64f7ed56,8bc54a2c,ce1c5714,1706888d,bdf377f8,4a94b5e6,ad402877,dc4c0df,38c7fe41,d9e6e085,e70431e9,99c2b724,e35ae74)\n,S(29d08c36,c45715f4,1eb5138f,a5c2f002,b4021f2b,bdc49592,e4242443,1f4d5f0a,903d61f7,2e81352f,582ce3b3,ead7b6f9,e0340c23,6925882a,cdb41285,6181bcab)\n,S(ccabdbe,f68b6549,2158d4c8,91dd1d23,efa7a84a,a985252a,3a1e895d,757e5f10,94a0e915,2addabd3,d5adad5e,cbcb38ec,e1a045bb,9d7295a,92aee49c,a6f0bb4b)\n,S(5bd30e4,9e2ba9a,745c6ebe,434b8d4f,1d8c34c7,6d478ffb,2871466f,a3ff23e4,1067b3c8,5980ea3a,dd1a4cba,8bb0b96f,ad988cc6,4dd8e206,51eee853,915226ae)\n,S(eb233898,8f12eb2b,5369d9f1,56d754dc,8733745b,30967e17,697e69c4,4fa80493,c258bfa5,e993ff4a,4a9eb82f,ce1530ce,25fe74ec,2bbc2639,683464f8,a26b5667)\n,S(4b44ca53,f01e1c64,8ff41a97,721e7c3,b0d62b4d,b15c5bd5,d84621c,4dee2ace,d8999254,b359a155,99e59761,f42639ad,27caf87f,ed4ddc57,203fef6c,9abbd922)\n,S(ce5ef1f7,6cef6b65,35631e65,d4f47924,df370ac8,ce059a19,5455fb1e,b156f7a1,74c9b95a,a4dc212c,3e127bdd,266aa89c,a4773f27,5607dff1,4438647c,f0e50a60)\n,S(563d7e99,40325aee,e66557d0,b14b7e8e,14f86643,de2b3300,1bcfa7f1,ef788bc4,ceebeb99,9878a305,1a8bd9df,bd6cb2f7,3ac18776,ea78df41,30fd22d1,bcdf37da)\n,S(ff929868,fb5a1b53,6acca702,f5dc1e83,efe8cb96,f96a3303,d107c6ae,ab5dbee3,82828150,fe8fbb3c,f2bfe03a,3c79fa5e,67c33d97,b12faaaf,572b1455,6ae11969)\n,S(1004e4ad,487212a5,8af57ea1,49e0edae,6aac884,2f488bc7,1b75a5bd,4a20204c,88d9a6,164cbc21,52d60ee2,7c8003b6,b39e418,b10c72d0,504a6a7,d7b8b2db)\n,S(28dca143,206abca7,1c48137f,8bebd26e,6c79666d,ce164fdd,ef1ca7ac,8e141a25,ec1dea42,575e5cc0,804f6da3,21ee739b,ff244cb,2b299413,4b8539e3,88f7ccf7)\n,S(cbb81690,a7e511bf,56a5190,b9366345,7b4fe8f9,64b8fb57,36df2067,28e1ca48,c2d2686a,5405dc79,d6a2deef,95a97813,4a434309,c5303985,f173015c,6571e5e)\n,S(3e1e663e,378c44b9,b61d04ca,bfaf65fc,df6b59a2,ae83719,11b11582,978f008f,bbf4b3b8,2010fd76,70d23b07,6018708e,8f78d70a,b2da1efd,be668c9b,d5125d51)\n,S(7f742a3b,9edf6aaf,cfbbf368,5a622318,1a6c3b5d,588b74de,c2d2c049,91d97784,238a4f6b,5cd25489,1b8aa5bb,41f253e6,6a59a020,bce98966,ed4c75f6,b7939e32)\n,S(f073f95f,f6c809d0,9271eb48,abf35b2d,b760caa6,54b0969c,e327cff,f806f43b,6a7eb8ce,9e297e07,170e9287,7fc737cf,bf923cc1,e72efdbe,5b3b4920,6602746f)\n,S(855f6451,5b98ef1,67d3a11a,fec74625,cf3801ab,75df42d2,1b33b1bc,c36d074b,6e8cb794,9990748b,f54a9291,e7ec374f,a31bef56,ed1812a7,7b2ef00,149938fd)\n,S(f0164c7,f204384,d3235b4c,cc1bb9ed,bb10cabc,d69c02b5,aed1dfa9,56c74d49,872fc547,78580a6f,38792974,a64399b8,cd674622,659ec31a,91fea06e,77e27118)\n,S(16e83238,e95e29f3,ebc297e7,fbbc77eb,53431f3,cc90f809,1e540457,aced09bf,3f3c0ff5,754630bf,88ec765c,a5c04da3,f6ca4ad5,e72d9c0,715cddeb,69c4f8b0)\n,S(70d371c8,8b2e47a,47982dfc,bc98ffd8,324b6bcf,2f1aa2a8,f4815f66,dd4949bc,34cc039d,3c69b4d1,833375db,e7315340,bab2452b,2a82163b,dec73702,f4c8da46)\n,S(db250b65,6848570b,5a59a2f2,d45e99d2,de1b3813,46fa6ce0,8bca0b34,57c27d10,2859a0e8,fde87061,d7ea8786,f5667aa8,b2633e8c,c52926cc,c5427d64,a7ae6494)\n,S(d6ecb3fd,b1ef3350,a2a831e2,321cfe9b,6b22b38d,6a8fa0f,b256f2cd,ac73f949,ad83f35b,c1b5c568,49436cfe,6ff17f5e,8abc6891,e24f4a0c,524d88e0,6c3f1028)\n,S(ee2059ff,a2c5bef0,646bf76d,ae2f3bfa,193b8a28,bc74cfbf,a96b48,921ac0d0,3a8f4693,15d6a6e2,2e57edb7,e5897039,153e0283,8d66b1ce,1814ac74,195379e7)\n,S(6dd7fa4d,bc12da89,1669cf7f,b1024a8a,551d7281,83fd221a,7a0ca9a0,8c2aa725,67fe6a0d,fca0fc02,1fc89584,d2a5f19e,ce890708,490c79e3,cdbd43ad,ad24493e)\n,S(15102e09,b966ca25,1a9b4609,16ca1229,7ab64d60,980582e5,e8bf0e4d,80fd6c35,7ebf61f9,956109c4,3cfb52ad,4e60078c,93ea653f,17c7328f,9120545c,48988be7)\n,S(a0697816,4a0511f9,3a48efe1,de74992b,54679aaa,a99e328d,6771386,945e9039,92d24154,971add65,c40e6f32,a5b5fd01,765effb6,c8d64676,c9d97e8b,f857d630)\n,S(ac925df1,3a9ce7db,18b9071f,f81880f7,c8ec97be,4b78a31b,27917d71,da0defce,6347aee9,abe9b2bb,1f1e3ab2,2792009e,ee009011,337fb184,d3f637f3,186acba6)\n,S(74f3c7b4,e237db77,9229cb2f,1fdba8be,9ba990ed,6dd84976,ff92646e,55e21091,44e9a71e,a07e4254,c4dae620,9c437873,7c56187f,23f42224,3167e45,932055f2)\n,S(78f0a024,f6a5bbaa,f3eaf550,92a55bae,73348e82,37dc095c,11ee34fc,3194eb00,54e9b6e7,2f758d54,23d5b9bd,b329262d,6745eb32,c93c2571,f86f40cd,1cfeeef9)\n,S(83d3e538,92d722a4,8c006910,a22f32ad,2ff7bdec,d9bd2ea3,a2f315cb,550a1bc3,a4f3c8e1,732b23ae,9f21c03e,7c3711ff,687683c3,13455107,68278332,8d9a25d0)\n,S(15deb2e3,f0f0b65,5edbb7d1,8d86cedd,7242a693,a271d853,b468d57a,52cbd647,7cb1ea70,8e12acb,6bbec5ac,26f513cf,51460493,9db6cccb,ba712561,a6f4a80)\n,S(6fc5c841,eca2637b,67fcd5f1,3c3dbf40,3b00e4e5,270bccad,617c58af,ac54195,afc3fc7d,92f0f77c,5147ae41,8aae93d3,b5cb7785,d65e623a,391d6a06,1f82d4c4)\n,S(154dad09,40e83686,d0942998,e220f8b6,bd106af7,beb9bc66,1f1a4c2e,29300f20,9a47095d,b2a357c7,16d8773f,18c953ff,dc0ed270,1cd881f,f3088176,e61bd7ed)\n,S(a498ef6b,89b882d6,81ea0647,f83d53aa,d1fb39e6,6bba74bf,8008a43f,197b301a,cf4d289e,f723ad46,27edc96f,5315bc2c,9ad39c04,4e8e6785,222ca142,3f5c2881)\n,S(5c01e4d2,465c3326,1828c45d,bbb2cf69,79cdb746,fb659a6b,44f0f2f1,f388fa3f,315dab9e,5e53f939,610e9729,3e686d33,e46f8262,5ddfb45d,46728b03,927a6837)\n,S(d058f58b,255164fe,e6d60472,2b32624b,2eb523b,6c7f1e6a,7ce1c248,fb3fe505,21761abe,1bcb844,39645310,7a3dd2ee,28bb4dc9,93dcd0e9,a09d5176,1a7c6536)\n,S(eb89dbf1,67c1352e,5ea2a7fb,206663b1,8c95d962,cec35412,3b9be6b3,51799ca1,9566074f,ec54174,a49a5f84,e4965174,408425f2,22d485ec,b020740c,74b08ef1)\n,S(19ddc300,84dda580,db5b1230,b0fe9508,5575eb10,680181ff,ee0d521b,17b39cb8,6af18172,bfb03b77,db456836,b9617f05,bbcbcccf,f6ed2dd9,a9c6e734,c01d188f)\n,S(66240aec,7e72f707,69560e0c,f31f2c41,9a8efab5,32f17f59,19bd56e2,93c41e13,16fad661,3600a79d,41eba5b2,d0721dca,afe94372,fe83b20f,7178e29a,e6f3949a)\n,S(3c75905b,9e7c7751,9f4617ff,6010c39f,92b852fe,89dca73d,cb3f15b0,23f7a286,799ffb8,94fd4f3e,61dd489f,da746fdb,ae955eb1,3c8dd9eb,e4f73d41,2feccec1)\n,S(9719a34,e765cca4,68ab3453,3c6dedd1,6247af51,b73295f6,8b936914,c03f10a,4d4e7f2d,ee3aec6f,71fa8978,f532e995,c0e1533c,5cf0b51d,f35d8f8,29cc10ec)\n,S(e32f292e,e5c41e2d,bd262c45,eda0b729,713207c0,17fa5c47,c8bce6,ca550814,105716c5,5995ffa6,998f2209,b9d0b37e,f2bd78be,527f6c12,b707faf1,ef73a82c)\n,S(76aa4115,595e7656,c76300d0,a60e3316,fd9c1b60,d41920a6,128e59f0,74a9dde5,f3ca0754,b6daef99,acd6e1e6,fb36d93d,e068c0d2,26b843a6,e7e111e9,9df8efda)\n,S(215186c7,ba018fee,747c2030,f57d1105,945b021b,be053da,efb1136b,f0d6f0a9,62994ba3,62d9a8a0,7432690,689a859e,ef498860,3d52352b,e27e0f8f,d02e4de7)\n,S(62e16f47,4d3ce3d8,a21f0c8c,875eea7c,111ca0f5,21c03f54,6bcee790,ab0d48bd,e9a8c8ab,99f916e0,4141972c,f60843be,72088d1,e044b27c,6a84b21f,c787abb)\n,S(372b5966,8b00faaa,a714e7a8,2462107a,3d1226e4,988faafe,988d06a7,dfb27bd0,c6d349aa,6a53d0bb,185e0f59,a4c137c,8622be1c,5df205f3,4b090080,bf4e4035)\n,S(b11cb8c,cd6302bd,e6005ed0,9a1ce2ea,a81fbd9c,748a17e8,fe1c139e,d2d1d725,29ec84f8,e8d627a6,b81a63c,4b13abb,88d7e5d4,9e56e2b9,a3f15f40,60efa38d)\n,S(652b5427,f45d07c1,8cd9afb6,7d5743e2,836d78f3,528917fe,2a5c6162,c4a06d81,3e93d9e4,25ce53a4,915bd12d,4327e89b,64a7112c,5ebae53,35c631c9,64b2e5f9)\n,S(c0812ee9,89fa0531,56847bb4,edd517a6,7d6d7d0,90ab5955,a59326da,f3833afa,2450338a,cf923109,d67b0501,3557f310,f3b0550a,8f1cd5fc,6eef8a5c,14b46c27)\n,S(627c169e,fb0d9937,8ddd0fd5,a73afa16,2a317e56,7d957695,41e52a41,d9344ca1,11dfbcf7,75bafe74,eec503cc,22c8b485,90a17079,580acdd9,c51158f5,efd0cd7b)\n,S(69916299,5b83ba3a,6bf16e2,97e8031e,74dc9054,c05ab59a,335a8296,d876a66d,39e45d50,aeceb888,8a1d64ab,9cb3b127,71269b7e,a14ca4eb,2179d762,4ee6d953)\n,S(6693adae,579636f3,2332a418,7e49ffc6,921aa51d,852b5136,9a96c8e1,cc268574,ae73a660,580a4005,50865060,dbe9ab43,2f304ca5,506b9f4e,7e17f602,1456bfa2)\n,S(ccc178c,7168ac1e,e7bf7579,f75f9645,5ca2b558,e1e709ee,de86df5e,5ebe0789,81c63b04,eddbf33b,432e00c5,9e76d319,fd1ef2f7,d6f31349,1f7a3c10,431a2130)\n,S(d80687f6,89f7c28b,d6ef1531,c4e4b283,c6e5dabc,ad7fe5d9,6dc20d30,e1feeea2,71e24cd5,9d2c33ac,2b298946,bc90e0fe,d229720d,539a6f5,e128973a,9bd6c5fb)\n,S(c53a6911,88f785f3,efc1fe1a,d142a259,cbda5f76,f3e9de36,895a8963,ffefcb74,7a225bd6,a348728d,951d55bf,257de9e9,d88df32c,ff2c4391,f4ddae8e,ce357cc0)\n,S(d512c64d,1932fd1,5636740e,2bbd302c,3d8674e6,52a30d40,ce879145,bed9b7c1,52e336dd,3c7eca6a,469bc97e,a330fa03,1cda3c57,a4354ba2,acffcaa,a1e6b424)\n,S(384aed3b,531098a1,99312d65,74b1b1bb,e79a8bf0,ea4f7a86,c5114fda,b32061d6,f2290bbb,2bbe7b53,eb64f87b,17a9e1,49356d9e,de3c0be4,28a4dc7d,709ef731)\n,S(6db6c2c1,1fbd5b92,31a4e34f,ca2f9315,dde00dee,909b8d53,d7149c6,6e3cecb7,cb2f0b26,e1bcd464,6e6ee074,8efcd499,f535a8ba,f61a38e7,aaae3511,3c781649)\n,S(6bc2f0f2,c0118efd,4fbab4c4,90c56da9,d66c0b1b,ec88e8b1,c8da967a,95d1ae60,a568f40f,24e51e2a,d01c13de,4490f34d,5a5bff13,e005ce77,94a59128,f6d871ae)\n,S(12e4e92a,aa40ad9d,281316d2,358bb0d6,c69fac28,24114a9b,a96091d1,64ee29cb,f717cba6,b07eac9c,34b8821c,218519c3,886d5cc7,a22be959,54b3eefa,8819bb51)\n,S(6dee0e1c,b887e155,e67996de,92716821,7874f9f0,a14c8673,1eaba91d,272705b3,28d9f2fc,23807874,9dd40ac1,8ace2dce,18ac3980,7c7a5922,43260eb8,ededbc3)\n,S(f9d667ac,ec2120aa,50c2b6f0,810b54eb,4928bef4,779e2311,7d12eebf,d093f139,29c9458a,52d4cde7,e32a265b,fb537b3e,5a5fdbe6,ece9be95,b645b960,c160166d)\n,S(e026f66,af79f4ea,52955b52,bca16e2f,b2cb05f4,38568c06,ebf1ca25,e6f5be17,6319ae60,3e733681,c8caa501,d7715b98,6244c1df,1c42d391,d8d47e15,a681df15)\n,S(1ddd29c9,bbb37823,1185f631,23d5e1fd,39c6b03e,44e2a542,318a6f3e,8325ffb8,22d80158,cee2f596,8da360e5,93a2a86,ce1ed25b,77a4d66,a2e7592d,26c2c715)\n,S(138f88f5,f9f46b81,2246373,6034958a,d5476a0f,348ca538,f789e980,9c799f30,adac6393,3e2de680,6fc38d7b,23ec5214,43ab505d,cedde216,6accf786,bd4e4aa5)\n,S(b516a9a9,4630ba5e,7469d5e5,ee0f03c2,51bfdf5,a1983506,79baca9a,e6de6f6,9c184956,7ad68859,89a2013a,5a902fea,66d398e4,6c85203e,b7a143b1,90b42587)\n,S(bb1a5499,548ee5a6,79500a49,a1466b11,9d56918a,735c3e07,31939ed0,2d47abe7,b946e966,2df43be8,6478e809,ac690d4d,b25398e8,de13731e,89867f80,63f8021e)\n,S(394ee032,8be13bc3,ffa069f3,92b72070,36ad018b,503ed70b,9bbf9f7b,458faf36,3a494b0,dd538dc,fa3a10e9,70b83c4a,2169b4ea,255c6423,50f7ee72,40a6910d)\n,S(a021889,ce4c941,606c0226,2b423afd,f44d6a75,483dc4cf,797b3512,8131e2ed,d8ae98ca,572b5a38,cd10a763,6638c47f,2867710,373af6a1,bfab6cc9,64b26547)\n,S(99e2cf77,a0f389ad,a6c21457,d3e94ee5,95fded19,89c326da,3cef2e49,670f2572,8144a88c,a90a7685,ea3155ea,8fa5cc0c,c282fc25,532aa5da,84494b97,94810a1c)\n,S(23c4b50e,80278869,b77c62de,8232a70e,52a4a3c3,4d0d6114,78989746,54e57aca,afba6a63,e35b15f3,1a24e5b5,844b0f3c,b247deee,a764b3c1,1075c3b8,c65bb0b5)\n,S(ae0ea240,91b09648,6bd06ec7,ab6dd488,fd6669be,58c2e91d,e8486560,47493d5a,63e13a3,aed0b2f5,a11e914a,3617b1ea,abf62d4d,731eda05,62251d76,939aea63)\n,S(d9e9ec51,cea0b150,28199afd,70fa86ef,dfa90e86,b9613831,9cbbeb86,c6573bf2,561519ee,f8dd5ebb,df47d4bb,c24eed76,5ff4342d,6ec6e537,8a2952e7,db51354a)\n,S(e674a628,7472d602,8c0b888e,1dc86429,207e38a,af61d3e7,60708721,c1a44613,c145e723,eabf1dc7,f09fcef,1ae24116,1bc0d24e,9c96c83a,3c4e76e4,cdbb9e7f)\n,S(19a43fb6,ad571142,42644af6,a3ce367d,329f44e5,bbbd8948,9368620d,944f413f,29a616f2,5f2bf4df,e516574,cbe840de,9ab9ee1d,abc86ca9,6413bfb7,a79a4095)\n,S(cf1e1a87,32eb52e1,660186f9,6aaa4cac,9248d8ef,2738a6e7,5e600f3b,658825d,379dd9a1,8355ac8a,94a9614b,e3f51540,c17a76dd,3e3f853f,252f0e75,164dd346)\n,S(342147b5,8a1ac1d0,baba5b2d,e924e7a3,b804e385,466f5ae8,29138bc9,5c5b386b,9d8792c5,8917aabb,6a3cbc4c,7f18d2b0,768dc9b9,1871bf48,8ebabc00,f51e2bf0)\n,S(1c24e35d,35fda6b1,f6ae6b43,7599ec91,dff1fbb3,b3d26976,783c0539,a8b9af32,58591ff1,68290b12,d729c621,f5da504c,e697ef00,7d922152,9a76ed61,2dbe8608)\n,S(d0fa4d47,a29e1101,baa08cca,73e00d6,660e2588,6e1b5cce,ee1c2a5a,9fb806da,918cb1f1,608f9e40,37a59bb7,28c25708,db898d76,a8b2e2b9,d4450c64,3606212)\n,S(f3307ffb,7e72413e,2207918d,8a93f183,d5cc93e6,ae07d196,a6d22f1d,253b2499,8a44b83b,feffd6d2,78442d72,51929c0d,42b690a2,d91d99bc,c5dff056,d37e1f27)\n,S(77e612a6,9931080c,7d910573,fe55582b,30eb4ca4,c7b7fe1c,9c4eeda9,b296097f,cc85c0f3,6f020bb0,9705f560,15268e36,bf61db2b,814b51b7,c958f1a8,656c26b8)\n,S(fe3b3fdb,b8d768aa,8248087b,70e6d0de,592c95e9,b9816996,a3b4c88b,21bb9605,23b44ffb,20e8fc95,ad3c035e,3f52fb53,51291965,95fbda63,8a192cf9,43630e0d)\n,S(e664460b,253050fd,8814a2,b2bc0f56,fd8d2f53,94673a67,9a76eee3,f7ae6e80,bf0a7515,a0a6351e,62bdf527,6974f06d,be87345b,438eea33,ddb980fc,788eec9c)\n,S(b8ab3266,6cb96b06,a363d87a,a7ee820c,695b7372,b9341b,292dd0f1,d5fc35af,720da144,39ac9d53,c480dc25,5eb45ffa,b9e406c,8eb5bae5,1c145058,8120f900)\n,S(38242b07,d1904c72,6da9ca1c,f1acced2,96c1c4a9,b37671c2,e529917d,a651b99,3d47a793,688603a,d6ddfc87,1c85a19f,e21ac51b,d292ff7c,69e219e5,7a0dea85)\n,S(ae9a9354,e451abb4,454766fb,7eaac21,5982008e,6cd47d7d,df5a6289,27131913,46d291c0,7f99fbb8,2eea4c66,525602f9,6af5c16b,f4c31ca8,c26a831e,a39985f)\n,S(59e59fd6,6a89a538,f5277950,816bf2dc,7070f70e,98d04b95,1b83a80,dab205a9,cec6b519,4d1122d6,dd3e39a6,fb3e80a3,2d829158,3ddf0bb0,3dc3086e,9f247f4d)\n,S(59aade5,c117e92a,97ba1785,2e1ef3f6,d000620d,a8f82e2c,1d4272d5,34a8e22a,6a6b6ab1,bd9a69cb,181538fd,eb4a9e8b,eda75811,96ef31ae,deaf516c,e68c1cc3)\n,S(f29d02a4,5b464774,fbc1bcd7,7caaf22f,12efcc9b,2a569966,b9adbe8,18a9f075,ba87956,5e0a1c56,fd03175b,a781110,3f34542,ded10367,6d44f706,7b8ab418)\n,S(db630bf6,e9ff0092,eebeebb8,a5bc72e8,774c083,cafa0519,2e6d913d,112181a8,6b764e8,2213a7de,79b9abe7,edabf502,d9ac04c8,eb5a4b26,9d22b666,f657685f)\n,S(45b9f064,71b848c7,48ff3fc3,34d425d2,57a71abc,27c4d002,dda26c77,1b09d2b8,c2119389,e4cecaa9,c0c72e4e,20c95cf9,1acb1698,c0bcfd42,f8620a9e,d781de57)\n,S(d4919e2,3a278aa4,25bb55cd,2fdcde2,eac63058,4cd57f50,390c6a9a,1015ffb4,f8e9f461,950f17fd,8c46f04a,3a6f3c52,5318cb93,a0aa3f3b,bf90c02e,80e1c288)\n,S(ea000677,2a76378f,3faa3c1f,c7227cc1,4b11764a,3c9a14c0,4f18f9d0,b55acc46,eafaf0b5,9a308182,8e6d07d7,2e16509f,bbf76fbd,e1473e35,18b795c8,87ff84c6)\n,S(70b539a4,4750f763,be1145b5,b433e98,847545a2,8fc72986,2c17045b,f0d6fded,d5438ebf,18eb5feb,fcf6edae,4fcca2af,e0208adb,2f82648,2af428cf,bc761464)\n,S(10b4a235,99ce2be7,fdc31f8e,ad91523a,47b8162f,8ed9387b,4c208657,25fa88d3,773ef1b3,a3943b86,729661bb,6ce6f4ae,e8c7165f,97a88fe9,5df9e027,3ccf9e7c)\n,S(67d7633,499323f7,cc378c5e,2e62cc6a,5f34ff83,e11e6061,9ec4a404,d63b91b7,cd7616ed,60f0f4fc,1006dcf1,850807d7,e8730954,30db6761,cb7cbbf1,a9c2958b)\n,S(5744c77f,8371057,61b1c782,1c9d9c53,14219e1c,5df80ea0,f772f9fe,ff157aa7,578459ee,13ec92b8,b685acda,a153f24,f6c844bb,e195ad58,77364ead,7a9e5fa4)\n,S(7c6b254d,39ab709c,cd63c2c2,56c43483,183b1b27,25ca49a3,19753f68,6486ad02,5669fcba,d8662be6,2d12cde6,30102f3,70f7ef0b,5b347fa8,6000ae6f,497fad6a)\n,S(8ec715c5,bda8f9ef,3b197ea8,a182a3dd,6cbc3b8a,88227e00,53a2eefb,b2006676,e59ecc81,aea7f2a5,4f659bdf,a317bada,3f8ccb7b,134ae21d,733b9710,335e73c9)\n,S(fc7eb1e0,95d0b18,58d22b5,ad36fbac,1b513d86,2bb3c9ef,61b55a5e,985e642,7206dfc3,10056bcc,4071e9f8,13495744,dd903d72,2aa0d6b7,3fb35394,4b66c85d)\n,S(4954bd00,308e205b,90c191ab,6262daf2,81939084,668c43dd,1ae998d7,e143f1dc,8efa802f,e67f72c2,5b4fc279,4e23608,7b343d89,255272d6,3c3968c8,7f26237)\n,S(f27e6c84,f60858e8,2eb53d39,a6860189,9172da9c,e0d1ea70,9225effe,23de6969,90533e33,321f1f5a,ce37ff79,b4dd3109,a1efd6eb,de502aae,4dbdf58b,1e697c74)\n,S(166f3aeb,cd040509,85df120,edf55c1b,f6eed0b5,fb24173d,c7d9125d,d0b2b29a,54b8de8b,c24b1cd7,8f89820f,d4b3ac6a,1588ebce,6de99b9c,81773ba,5fd32e20)\n,S(c0797522,8dabaaf2,b46108c4,88ebd104,b0bfafdb,b344b5e0,72f6cb6a,f58f3cdb,bae0280c,704e0d0d,2d421b20,828cd00d,9b388f32,fcadb511,ad5ed4de,281a4a29)\n,S(81366739,2085f96c,6a39c9f5,ff60b51c,4991a289,7106619d,1ab0de9b,34de87bc,d7b8599,2464c1e1,9f575cfd,de5bec08,987230b6,20d911d5,d6dd3d2a,8a75e079)\n,S(335f446a,f3964e77,8f4985a5,c19e371b,876494b4,467ed700,482558a,9cab3c65,6e8fa42,24cd52c4,b78af9de,b7efa726,c26a94d,85bfeb6,fdb1b97f,674cbe6f)\n,S(b6a34b42,bf5e4781,df14fe99,1a14b414,fa488da2,29314366,1ba83ecf,1e80d60c,b633c9f3,cd359dc9,2ce47287,670fe80e,131315c1,6fc17811,f319f1e9,82f88e8b)\n,S(95f99013,a9e937e6,ff784b07,23287960,5eb4532,e16b3881,25a18012,17ee3ed9,2d0fa2ee,1aed211d,5b90915f,f3b2116a,28528f19,35b6b534,333b102d,177c08a2)\n,S(9c0923b0,d681933,bc8bca36,a6af4058,682c5661,95d3a211,a1ef602f,933f6a45,a72df8d,a9a951e5,a63f0424,4974d74f,fb809cf5,fe7c24da,9c1715a7,2419c7d5)\n,S(931cd34d,e32188a8,802b6a73,204eadf2,cae8d8de,52423daf,daf042cb,946657f1,d84b7406,d58c53e2,89ca15bb,4ba78db3,6bd2947,34d0ee9d,6939c15a,9f28b856)\n,S(24be4b41,f845c43b,5fc594ac,90e3e4aa,b49cc79c,4b0a8408,1803c27b,ce62fe4,c6651cb0,be54ab0,78940179,6dca2448,3d9349ee,e45e78d4,b786a636,83861bb9)\n,S(f19a51c2,ebff1d77,81b0e7f0,a29947fc,3ed9dd26,9f0b9cb9,c27c3f7,500c81eb,8e1cfe92,6128173f,556b3ec4,4c394ba0,201a4f93,e2db054f,63934b2,479a301e)\n,S(f6e7e4cb,88ecad49,a1653a6c,5510571a,cec77024,2f490774,a8dd62a7,d6e16363,60842dbb,b8ae082e,9538e725,1a3dd7f9,8edabff3,5444719d,97134a3c,236c97b3)\n,S(e7b7bb26,af8cc2ba,6e54e923,6af55e40,7ff704c6,1264cacc,74d96b52,81f2ca00,3abaca16,e20f74d7,6d11a942,415987c7,8da5ed50,3d781f2f,aba6d534,cbc3908c)\n,S(c8acf1d3,89a29f6d,e0d03835,80a0a562,aefcaa99,b184f910,f2c8370b,bedc4c16,924e9b2e,2c6463ac,e8eda0b3,feee2f82,73050559,1071bbcd,72f6e323,31617359)\n,S(1453b2dc,efe09d16,373ffc2d,42e79805,64ff194c,6b9944dc,b12d3cdb,1d84ae27,2d7faeab,7ca11212,a1aa9d4,a462c04b,8dacd2ec,1f7ee3b8,28fcdfb7,a26c6e17)\n,S(ae92e090,b3c6ae15,68a12c6c,882d1b4,345f0a46,b9ad364,bc869243,dd533f4d,3f50449b,a3865900,ff63d944,27a0b967,56c00179,5b5f51cd,5996ca2b,19ad7abf)\n,S(3086b503,ad8afe4d,fe2795f7,c972e0c0,8d6f040a,1be88309,606fee4d,b977fd06,b8631fad,80689ce2,7f62db6c,d6a56f3c,d3dc110e,610f3732,fa3f2c10,a4d588d9)\n,S(7a17def1,e9c2b175,9944eb35,262908e7,c988f602,2440e151,928dfb44,462e2856,42171a1,f71ae8ea,d437a1d7,e1ec3394,b713044d,6c895930,2535787f,b93fcec3)\n,S(97975e9e,b0698b70,995411da,37ce2a87,91198b90,e104476e,b86c4a77,dc5ce9c4,b8999b7,69b36de2,13cfc81c,c2fffc3,65e5dbc2,db1906a0,ec88e931,cd05bd41)\n,S(839fa603,a2ec722d,1253328e,15f7d187,55ee80fd,b6bc7b09,bbca59eb,316d1b22,4e43cdca,1b33fa9,cf397ef3,91d40b46,fdcfa770,b2be8e9d,9ee22d61,6e12dfa9)\n,S(ccfb8b97,7baefebd,eaf49c7c,1ddada20,861e1c0d,acba4caf,4e30f21b,ca3a05a7,7d9bced6,62579237,a348071,3ea1af91,256e9d62,1265fa27,cc80b5fc,cf75f99f)\n,S(8f9f369b,3f325823,e8c9b16f,f2142ebc,3c6f7bfd,dd28c4df,63d1c92b,581cb6a4,114c7d9b,3f54f549,c10d93d4,25843477,9c297e2f,3f07b208,12335fe2,5771b12c)\n,S(f0deaa5c,324c5ead,6f6f1cb0,cf1dac32,ef342606,3533435,65ac164a,ac8f0f2f,ef6dd597,e2203c03,f0ce0780,bcc1e963,621c1460,7a4ce616,9ee6624d,11c2eee9)\n,S(638362c2,18c9e0e8,72dafa8e,fed86fcf,da5641eb,7cd01725,9a85103,f04fa408,3c224389,bff1fd09,338ea28c,7c9a93cb,32be8749,4a6c629,5c1c3dff,2b582877)\n,S(49acbef2,64708117,a53f52e6,84bc15e9,d004baa2,fb3a756a,72d35efb,49871759,b678efb3,fa09158f,d1f9c74a,87a56883,b0a8316c,d4848ef5,1f35dfc0,8c4b5bb)\n,S(a79d63c7,b718cd66,b393e70a,f032bc50,a90209b2,5f5b07c0,303eb8d1,1db618ee,ecf7f89d,2f6f9877,9b5e390,ce5837ba,49bc2b3,a7c1047b,7a7c852e,89f1551a)\n,S(c922d543,f192f654,3445d3f9,c36a05b8,2ee043e0,92afcae5,a21b9b17,a06d0257,cf77d5eb,9e555f90,34ce1c14,63f7c4b6,a0202d81,deb02ddf,a26113ba,292554e7)\n,S(dbb8f077,b411a4dd,faf0d89c,3dc20375,1bb20e16,2052ee46,915528e5,1f461387,a6c0d5df,91cc4ba1,cbba0588,774d47e1,7ef97281,63ca8950,7ff6b779,da12b7e6)\n,S(dea21a21,eccb1733,14d76fcf,dc6109c8,88a633d9,645f86e4,e59ee237,cb18110c,a1390d1d,69a304f1,a2792ecc,675f2dae,1ddef908,2f2e3929,6b9a068,3933264b)\n,S(f088ed85,750dd58a,cd03b3a9,93d88760,34f50780,985f7552,114f957a,ce8904a1,b810e652,f596cb80,c369f61,f632bc3c,fcfb1fc2,b906acaf,c1f39d02,5e3ae4dd)\n,S(b85da431,16b898e8,56fe3c18,b60a48b7,c2ba9f65,ad67c31d,f45ac3b6,608b774c,357d324b,474ae7d8,97398506,c550a1fc,5353a00c,7e6f1245,c0f57683,80ac9e1f)\n,S(eaac0d2c,276000ff,899dcb3c,61b41663,70123276,14585bea,7704de95,d164514b,aad696cb,1af2f12,1ba915ec,64afc13d,a689719d,8f188424,25d6068e,9bb06a69)\n,S(7a3cfc7e,51fbf61f,ffed3430,eb9ac40,c84164b0,21220837,29f20ed8,eacac977,9015b896,e034d2b6,684f7352,185e959b,5c45406f,6187930f,82f62269,d3ba70a)\n,S(5a9def12,e06f0ac4,35b9f853,53db864c,77288050,c349ed7d,a8d8b109,b001a856,b63b74ba,868df816,9dfc30a9,1efbae1e,1617a230,3ed20239,9ecf5798,5ec4bf99)\n,S(b937b3d4,287a0f84,5323cc72,95b4a201,ba9d97d3,2d968533,7caccbdc,ce8623ed,6f2ad251,a66e5ff0,77384746,9208db13,2a396dc2,17e781ce,9aa8d556,83fc0adf)\n,S(d44f7fc2,97e079f4,ba0689de,dc743d4,964c6ab,8c34bbff,f95bf22e,b7d3c209,b5afe3b6,f6b02542,e6ce811b,f4bb0fce,79e7916f,fed8845c,dd83de07,9320a2d1)\n,S(5980fbb1,6be7acd7,b090a2b1,c83dbf80,9148cc99,75fd6834,edf564c5,50fdf2f2,72340269,8d22b946,ae51c9c8,33d5b44d,ee884a02,e12a6d4a,23957483,32abac9)\n,S(94733aeb,dce57a89,16961f41,3eb04b5e,71f0a055,29baf93f,c9ff178a,12b70511,e591b62e,5cf92ea4,306e16b5,acc5958d,a5516bf5,7a7dab17,db38cef7,44302c47)\n,S(1172b006,3d5ae491,8699e756,75ddfc59,fb5cc8d4,f332ce72,f99fb99e,c9799d96,2845be1b,b97830d3,f9d04a3b,36ae381c,5654bef3,f3fa8516,3a7b9738,ed867ef4)\n,S(29afd093,5ca567f7,eb4cc1c2,ebbbe8c3,bc405691,b41a2812,b7c71312,81bbe691,77e9a59d,c0aebd28,9cf2960,ebe7fc19,236c1859,7882df0f,a8e6e0c2,6d92b821)\n,S(191c7ed6,72c36def,576f645c,6b475eff,793119e3,ebc3a29b,71eee3c9,cb52a635,642bdce7,90d0f104,54ebe4d6,282be83a,443f8f44,faba4c76,5b1491d8,c7c83210)\n,S(237eff13,89c20d30,9902a738,fa4543d4,c2a4a2b5,6731603,500997bb,40d28eda,973d696c,ba9eb05d,73ce7491,5c1cf3d1,5a998608,7ce85854,f7bdd157,3d5c7394)\n,S(d4985b52,80673074,53ec0edb,f02b9d4c,b1ce9a0c,af7c675,77789b8d,f3b5ab33,ad8fa145,94c510a7,830f3353,4ac94a98,cdf2fa30,b6a1b572,9222969c,e27eb1ea)\n,S(3baed9b6,25f5d0b2,6e0132c6,20a9015,f79bd8d1,8e5ce170,20fed78f,a2238914,6ef88df1,3c7a9023,1180edfd,d041b950,3ad89f22,4ec557b7,2e900bc8,fa820c19)\n,S(6e2298a6,102268b1,af97bf67,c0aba783,5463165b,1df8a824,530ee5d7,86d354f6,c3864e52,3bb5cfe0,a64adc7a,9e8926e9,876516a4,c83767d8,5ebfc39a,e125c19c)\n,S(f9e87f15,2412598d,775131de,abbd0272,4d658849,cb60aac6,92280e63,8e835e9,e843a3dd,a30f9685,70fcf86e,86206c22,af40ce3a,3beb620c,aa167e63,271d95ac)\n,S(f9925b7e,80b8b8b1,b5c56f80,74bd5ee1,9e419678,2c5a33d2,c59f8016,56cfbb0e,3e2fda0b,50aa7671,5810a8d2,2d4778d8,66bd2515,acf87b79,7b2f4875,dee19719)\n,S(6fc34efd,5d11ae35,2cca3254,c5f8a040,52b81357,556d4d67,dd02d22b,91f4e49b,f14c656,ec946492,a6af3f2f,56fd7355,71e41b2c,dfeda7bd,ed567658,202f6e61)\n,S(ab504458,4b38c846,e282038,1f02f55d,fc6a5648,1b1830c1,e4ee94e3,d11af8d9,4ad3821e,3f5219c,aab31787,2a8fbccf,f0f445d7,da30f05,d9523f55,13eee3cc)\n,S(2378d11,716b6d34,85bd5a57,5c5b2c96,1b817abe,e21b7d45,38244933,5ce7e7a5,33682ec0,8c59a158,c4ef12bd,d2a46d31,6abc6dd4,f81a1fef,5be40577,4e03fab)\n,S(cfa95425,8608d9b,9c568a1c,fd4b078a,ff49150f,a4681324,ac56b6e9,df569016,e200a3ae,2d82ddc2,a71767e5,842ef30c,86cd9b17,7c5e52ff,ac316e50,1e7e2)\n,S(585542d9,a3a582a3,bde74fef,112924c4,e00cafcb,61518d87,f524211d,bdb98993,2035bc19,7a0ea2b6,8d1d1333,b5aadc61,c9dff2c1,e4dea034,1539ff15,9a3d18ae)\n,S(fab2433,905e5b46,e47103f2,e353d503,cb141e61,2167cb4d,34946a5c,cd2c06b,7097d735,3f17734f,8eff6993,77916c9,884f67db,42f7a96c,62a3e1d9,9e341547)\n,S(b10db548,be55521c,de5edc26,fa39716,154e365d,a1b8b7fd,2265d78b,7edee8cd,389efe1c,7fd8b4a5,4a42e651,b5c06a2a,7c153664,e52ef30d,90eda2d5,9e9690c8)\n,S(218a8a36,273fce14,85c0c9f7,1910aff8,64910b00,6254af75,e78a6b5b,3d5c7bad,4a1984e8,e90d4695,b8dcf34a,55eaf568,b0fd34cc,528a147c,bebb052a,8e6e8604)\n,S(e120bc22,fe6dc81f,dc3ead1b,a2ca966f,c5702ec,479793b1,5f0ebae3,b6c5ff3,9f92f1d5,e8aa56f6,1ef20685,c8085782,be180658,c7d2b9e1,c020c98e,cd425835)\n,S(e83373fa,f80d4560,5ac4da9a,c9cfa220,b2a2c656,26857035,a228c93b,495be15f,8b915652,3c532657,7945021,d6c1b1a6,3b1fd090,ea93cf01,90fdb791,a2397a91)\n,S(b7d8a393,a10590ea,91d2a495,eec07262,f2f43e29,74f7b2e5,6ba6ee92,17e3e74b,4ad6671f,58b2c7ba,7a940613,5986b3f3,5a6e13ec,8243b0fa,c8bec130,2afbad0f)\n,S(75a5ed46,b2103f5f,ee808803,bf419bbc,232cf5d3,84955e8b,1d4fbaee,5194ca35,51b9670c,4c65e969,a5a56e15,25f33dc9,458c317b,6faf484a,186d52d1,757e4857)\n,S(6d8d67cb,c309ecc6,3c1e04d4,aa42683c,775d5f32,51111500,9166c574,b0dd66e4,e127b8c,f431cf09,5939712e,c96d299e,efbdeeec,eeca3d2a,9f6b3d29,fb8f72fd)\n,S(51a6d684,463065c8,7d3e0fee,ac72e4f3,1e5187a4,dd14d59e,ef71ee93,85fb229,7fe1069c,b384178c,ae2241fa,6886e1fd,286347f0,d2488dbb,f4d6eaf9,e722a90a)\n,S(5140ba9e,81a272eb,30ac5c96,a8b054bf,870b1785,9519cdbe,4f2e6573,2a56e6bc,3b6a2c0e,7421eab3,147b61e6,d8252326,1819bd94,9e3c805f,ca2a12b2,e13599a9)\n,S(b94c7812,6c60a3b0,48b28f47,f9d461e,27ffdf7f,93a3ee70,ae38962c,8060166b,bab7aa94,385d224f,f20e7c60,7f7f11db,4ec3526a,c226cc96,16af6a3e,356208f2)\n,S(45046678,76689fbc,a94ebd79,ddb5d655,3e97b788,c91cee0,b62ee75c,1fd12ff3,635b3d75,a0621530,d7ff26cf,f1878d52,2864a6ea,e82b220f,d35ae5a5,edea1895)\n,S(45f4025d,7b88ddaf,e39566e4,27060b7c,ac59ae7a,526ac3d6,a489424b,d677a54d,d732c322,18307ace,354ade14,21d13438,ac4c7c3,5b5021a6,cea9137f,b47465ac)\n,S(c6e8912e,a197f39b,817b743d,deb3320b,558af332,96e0ebb,58c258c4,f1c0d5cc,6e0c8ecc,fd97ccd,deb08f4a,73ca13cf,b48d3633,afb74139,36550e0a,c23f04ea)\n,S(6fd13fd,c7d3809d,6a3bf6b1,5208d0ab,5f476e99,57a7fc71,29824154,a05a7dd7,95922641,32be31b4,c34ea614,df6b8c1a,c386dbc2,1318868d,b40869a7,17b862e6)\n,S(54fc0732,968b0207,ea2c115f,d11bfb57,b9b28164,4644d82f,45af1100,6b63d0b3,318ef9f3,b2173c45,bba5ffdd,8345a08b,66c8e183,80ef9dbb,b5d80c1f,15f95bfb)\n,S(9e6ac718,6e09f698,1f384cdc,b9c48703,a8ee3726,d6d8ee3,a10499f5,e17731e1,95b4c37f,ec98faca,b41c628e,12f606e,79829b17,96ef3dce,c4aba99e,3882bc0a)\n,S(85732ae2,eb7944a2,6609aea5,607604c4,c30f25ca,c365fb2,e01c7600,40542ce6,928a62fb,b082f38b,52890540,7b20f9ac,1f4841a7,bde217ab,828780ee,94749fcb)\n,S(3ea5ace,80e47aa1,9bf1406d,3559fd50,85d38504,93752563,de66393e,37a652a1,db5fa543,142d36f,fcc1cc8,36b1f4c4,e82d4980,f2b277c7,bec53324,fbdc8e9c)\n,S(7d40f7ae,f1866d87,8e42f9c8,d5afff76,2a427567,f6130f73,439d67fe,d14be54d,5bee61f5,31e4ebb5,679c9645,d565cf,f93b391b,f48c5504,a5054e23,47859d2a)\n,S(3dc80cd7,478ea38e,1d6e1e41,aca892c4,4e4d8339,acd72fb4,c27861ae,3e7d8664,98412c68,68af56ab,19876499,fa30c8b7,8bfa5d19,b4aea0ec,52787690,49b7e3b5)\n,S(2dd92155,81bbbcdb,a1900b90,9018ea30,2e40ec35,cf2b74ca,6065e8d1,f3bcc057,cdb59ee3,b5d42deb,5a4ffe56,46f5dec0,218d0e9d,569cdd3f,b96610ab,2a382fe5)\n,S(a245a185,ed85c547,3b78a561,76a32e45,b35efe75,36a1fef4,569f4f70,ba510ae5,93b66fc4,6fde9554,1363bdbd,117073cd,f3f5e406,75fc5710,34bef6bc,47a2519c)\n,S(5136c2e4,5004c1fd,615fe81a,e4463153,2753c670,86d1bba0,b3a35bdc,47bbec08,1743f5c5,d0a58608,a66fab55,69f7134d,7fe49fad,2dbee1a6,d01c581d,18f97d85)\n,S(b65423af,618b242b,71e258e8,c22f975b,621a8900,9e0a3f12,f9f8314d,7fc6ca54,e3c39b1c,e4159306,e730c2ad,4ecec430,720355a2,815b63a9,720ef623,b91e4230)\n,S(d6db49c6,4e68f6b0,59cb5a00,3c826a59,bea1e9fe,7622a2e,6eca605e,fe9a7858,cff0a39d,83e246f1,efad5dad,72c5df0d,62e9cf8f,4da81a5a,68586187,3dfd758f)\n,S(ff2f739,8e5aaae1,a589a82f,e8e36315,34ff1081,cb083933,d08473b4,bd16f03,1559e2e8,49dc5aeb,50f3de13,1478fa99,e110627,aa0c4c5d,43ab03ca,dde04cdf)\n,S(a7c9398c,5938a3ca,e32d2947,d8e3a58,e42a669f,5cd9b219,d8acf6f5,2cef9bf5,43e2a5a3,dae4bd5e,64a30861,7056fce6,cf86d0b7,41c3b46e,3a3ed90e,98d2d51c)\n,S(faa9724a,357b6806,7be30aa6,4fb85879,1969191e,346d5d73,8a85b27c,c6608d72,ea1f8a66,8f4881fc,4ecfc556,f0ca4e12,b93ee6ca,54a0fce,b2fe51ca,174d9713)\n,S(28301cf8,328171c0,74cd585f,6e5870ac,815de8d0,9c9f15c5,5540de9a,b29a86df,31910e6f,15585710,74e87f41,e5cc9c73,4ddd15bd,4436ec8f,59806afe,7901c2e4)\n,S(fbde2380,ae0cccc4,e044ca59,92be8e11,5fc782eb,c1d49bc2,cbdfd1f5,d7908a09,c1a1d67c,74777fbb,68919bf4,11de555a,6485436f,7e34062b,480b7516,8a03dba3)\n,S(59d8ba7b,6c71ba1d,191d4cce,662483cb,9784ede7,d1908e81,815d0a48,4b84bf7d,8a32e968,1ecf963b,3c23a9d2,f382490b,1f229b27,a663f4a6,9819c33b,f9f6149f)\n,S(6c3a61d7,1c999ae0,604511ad,23f620ad,dfc7891b,925eeed1,6a5ca37f,b41b47e4,f7115905,c696c2b3,e2b82a30,9728923e,b8eba53c,363f1456,73676b59,9b50b9c0)\n,S(8e53027f,8e137bfa,73eb5167,35382ba,ab3468f4,d4227b19,a45c51c2,ef3d8339,2b5ea7b9,542a83ab,a1c402ba,be13437b,c621067,96e83b7a,2cdedc52,2bcff513)\n,S(113aa35e,6a5f794b,a56b04a3,d639b1e1,64a790b5,8ff310c,fbeab588,f93be16a,227c17e7,d95583e7,fdcc3ab7,b24182b5,1bb11e91,9f28fd7b,3a2e4a40,4f333962)\n,S(16c4c83f,5a06b2de,9d3f39e7,1f0a9de7,af6e8fc7,b0fecaf3,2c82f1aa,fe9a5343,b4cbf71e,c3ad4635,87f8e355,cffe1ea,a19f1dc6,d233d617,776a69a9,ab8dec03)\n,S(4d97594c,613de84a,e685199a,ac639a56,e5c15a0e,c00282bd,197cc2ea,90f8fbb0,b9f39a44,24cbb1e2,f77afa90,ec7266ee,64ea987e,80a32b34,483c1f2e,b0c5844a)\n,S(b679693a,b3fecff0,819e0598,65406521,1f9aee9c,1ea44417,eba86ebe,32414ac3,7bfe1ba0,ae17291d,71aac3f3,66e5a927,56b53312,a6818d1a,78b7d9ef,a5d01b2f)\n,S(a97c2730,a78cf5b7,538b518a,87d8fc55,f95a367d,4e021d23,79f163eb,98b6eb9a,aed1e51c,3ce7e35e,ff69e7d9,3fd3a968,59f0f23a,7bbab9d8,3b60cabd,cebd34f)\n,S(7dd4e84f,6547d66b,5e0b204c,ed1d0258,4fe92ed8,6b504ae4,eb1b3d66,d43b8ca4,7956148f,de975510,5e3b5126,f82e77b,89a77b68,ffc9364c,bfb596e8,187ea99b)\n,S(5e856d1d,25acc306,e8c1a2b7,a9ccea1,beb3008d,c224b38f,e2f31376,65d07c3f,7dccf6b1,55c12be2,f3da02c9,12fdb666,816558b1,11a2a545,9d88aa28,9d855e6c)\n,S(c85ee868,7f507429,e5c26af6,7ef1fe45,e782661c,1fa03aa3,ee9dd9c9,302e5dd6,732de6ad,d071a0b0,b77e47bc,14e176d4,c85b39d0,ac5b4ea,55f0d367,dba5ab5d)\n,S(a97ba3a5,cc2d5148,3f65c65b,483b3e4f,3c68e46b,87bcfea1,42aeed8,4c42e42b,f4eb1271,3024d1,b7612c3b,7dc3dff8,ca336f23,5db7daf9,3ca6f7d8,1bdb4a21)\n,S(3c0396cf,6ff0150c,5b6bd528,4a05d0a5,3b735c85,125bd49c,f62db5b6,4eaf54a7,6ec02c02,f8d9a61e,6bb38d64,daaf3c7d,5324462e,37e2df8d,4ad12bfa,37fd2cb2)\n,S(e36fcebc,e406d2a4,ad42f7dd,cc00e9f3,cf385eeb,58cee004,5aab8174,82d84f94,7c98182f,6edd358e,76d66de0,b45ae9f6,5eb75092,1a25194c,1911bd9f,7e6a1a6b)\n,S(171ea2ec,b9641746,7d7edcf,ecd6d85,8577322e,6ebac130,5ab57f33,62eb4e37,9f219970,753a7b9c,e4f0c6ce,5745596a,aca8df7b,a73660c9,10add5a9,d4c533d6)\n,S(a81d720a,bf8047e8,ef67bf2,71a13f47,636a5f9e,ec425649,1cbdad65,39652f9e,92b37c88,275c022b,635df6b,9246edf5,5dbd8284,eaa4cd7e,3d3ce6d1,c0ca3794)\n,S(fa3b6973,4bd9939c,4b6ecd3b,f0a06327,2dc11345,1bddd717,f17b745f,bc3f99b3,f38a4e1a,bcb35097,7acc8f2e,d7f73f75,d406e7f2,22fdeea,2c12d8b9,e5d2dfa3)\n,S(c117681e,b55bff67,feda80a1,ae88b4be,c806860d,91916619,288a7ce0,b31aef86,d94ae124,dca678bc,b69c9421,f295405f,d6dc1fac,de96a2b4,58ba5fd2,72faa032)\n,S(5ccc0619,92744a57,683de5e3,7b956fa1,fd7287d,b4516fc9,f8635be3,a0db42a9,af1f73ea,4d2168e1,7550ffc,dcbba288,8397931b,e457ce6f,3f8082f8,cfc5f03)\n,S(858b019c,8a93524f,6c86738d,cb10b534,d8caaf86,5c0ce75c,fc9b83b0,7c661a0a,7c59d30,1ffc8ce1,b0767ed7,91f84bc5,60bb8ca,ed3464ba,698a53c,160ec570)\n,S(e1e217b8,69da0c77,599dcc38,40fa1d8c,a8d08b1a,4ac9a882,da1476cc,cc76fa56,83f0ef77,905f0801,4bd86e17,63b8c2cf,ab2018a8,9586620a,b49a15,9fc314ca)\n,S(15a1ae40,b4fc51dc,554b75d4,db0c2bfd,62dfbbfc,dede18e1,4edbb689,91525cff,4f0453b7,e4e0e99d,9663e5c6,bb018007,b52c8e14,d78a28d,c4a888e4,8c4326c2)\n,S(1b9a142f,fc4d03ea,4b079f2d,b05fad98,8ddb2d32,b359967f,c173801f,63320825,59bda7ed,5b691c20,4fc8f8ac,f53be298,ae628954,a8134d0f,dd097e67,be9ff9b6)\n#endif\n}\n#endif\n;\n#undef S\n\n#endif /* SECP256K1_PRECOMPUTED_ECMULT_H */\n"
  },
  {
    "path": "C/secp256k1/scalar.h",
    "content": "/***********************************************************************\n * Copyright (c) 2014 Pieter Wuille                                    *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_SCALAR_H\n#define SECP256K1_SCALAR_H\n\n#include \"util.h\"\n\n#if defined(SECP256K1_WIDEMUL_INT128)\n#include \"scalar_4x64.h\"\n#else\n#error \"Please select wide multiplication implementation\"\n#endif\n\n/** Clear a scalar to prevent the leak of sensitive data. */\nstatic void secp256k1_scalar_clear(secp256k1_scalar *r);\n\n#if 0\n/** Access bits from a scalar. All requested bits must belong to the same 32-bit limb. */\nstatic unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count);\n\n/** Access bits from a scalar. Not constant time. */\nstatic unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count);\n#endif\n\n/** Set a scalar from a big endian byte array. The scalar will be reduced modulo group order `n`.\n * In:      bin:        pointer to a 32-byte array.\n * Out:     r:          scalar to be set.\n *          overflow:   non-zero if the scalar was bigger or equal to `n` before reduction, zero otherwise (can be NULL).\n */\nstatic void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow);\n\n#if 0\n/** Set a scalar from a big endian byte array and returns 1 if it is a valid\n *  seckey and 0 otherwise. */\nstatic int secp256k1_scalar_set_b32_seckey(secp256k1_scalar *r, const unsigned char *bin);\n#endif\n\n/** Set a scalar to an unsigned integer. */\nstatic void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v);\n\n/** Convert a scalar to a byte array. */\nstatic void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a);\n\n/** Add two scalars together (modulo the group order). Returns whether it overflowed. */\nstatic int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b);\n\n/** Conditionally add a power of two to a scalar. The result is not allowed to overflow. */\nstatic void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag);\n\n/** Multiply two scalars (modulo the group order). */\nstatic void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b);\n\n#if 0\n/** Shift a scalar right by some amount strictly between 0 and 16, returning\n *  the low bits that were shifted off */\nstatic int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n);\n\n/** Compute the inverse of a scalar (modulo the group order). */\nstatic void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *a);\n#endif\n\n/** Compute the inverse of a scalar (modulo the group order), without constant-time guarantee. */\nstatic void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *a);\n\n/** Compute the complement of a scalar (modulo the group order). */\nstatic void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a);\n\n/** Check whether a scalar equals zero. */\nstatic int secp256k1_scalar_is_zero(const secp256k1_scalar *a);\n\n#if 0\n/** Check whether a scalar equals one. */\nstatic int secp256k1_scalar_is_one(const secp256k1_scalar *a);\n\n/** Check whether a scalar, considered as an nonnegative integer, is even. */\nstatic int secp256k1_scalar_is_even(const secp256k1_scalar *a);\n\n/** Check whether a scalar is higher than the group order divided by 2. */\nstatic int secp256k1_scalar_is_high(const secp256k1_scalar *a);\n\n/** Conditionally negate a number, in constant time.\n * Returns -1 if the number was negated, 1 otherwise */\nstatic int secp256k1_scalar_cond_negate(secp256k1_scalar *a, int flag);\n\n/** Compare two scalars. */\nstatic int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b);\n#endif\n\n/** Find r1 and r2 such that r1+r2*2^128 = k. */\nstatic void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *k);\n/** Find r1 and r2 such that r1+r2*lambda = k, where r1 and r2 or their\n *  negations are maximum 128 bits long (see secp256k1_ge_mul_lambda). It is\n *  required that r1, r2, and k all point to different objects. */\nstatic void secp256k1_scalar_split_lambda(secp256k1_scalar * SECP256K1_RESTRICT r1, secp256k1_scalar * SECP256K1_RESTRICT r2, const secp256k1_scalar * SECP256K1_RESTRICT k);\n\n/** Multiply a and b (without taking the modulus!), divide by 2**shift, and round to the nearest integer. Shift must be at least 256. */\nstatic void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift);\n\n#if 0\n/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time.  Both *r and *a must be initialized.*/\nstatic void secp256k1_scalar_cmov(secp256k1_scalar *r, const secp256k1_scalar *a, int flag);\n#endif\n\n#endif /* SECP256K1_SCALAR_H */\n"
  },
  {
    "path": "C/secp256k1/scalar_4x64.h",
    "content": "/***********************************************************************\n * Copyright (c) 2014 Pieter Wuille                                    *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_SCALAR_REPR_H\n#define SECP256K1_SCALAR_REPR_H\n\n#include <stdint.h>\n\n/** A scalar modulo the group order of the secp256k1 curve. */\ntypedef struct {\n    uint64_t d[4];\n} secp256k1_scalar;\n\n#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{((uint64_t)(d1)) << 32 | (d0), ((uint64_t)(d3)) << 32 | (d2), ((uint64_t)(d5)) << 32 | (d4), ((uint64_t)(d7)) << 32 | (d6)}}\n\n#endif /* SECP256K1_SCALAR_REPR_H */\n"
  },
  {
    "path": "C/secp256k1/scalar_4x64_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_SCALAR_REPR_IMPL_H\n#define SECP256K1_SCALAR_REPR_IMPL_H\n\n#include \"int128.h\"\n#include \"modinv64_impl.h\"\n\n/* Limbs of the secp256k1 order. */\n#define SECP256K1_N_0 ((uint64_t)0xBFD25E8CD0364141ULL)\n#define SECP256K1_N_1 ((uint64_t)0xBAAEDCE6AF48A03BULL)\n#define SECP256K1_N_2 ((uint64_t)0xFFFFFFFFFFFFFFFEULL)\n#define SECP256K1_N_3 ((uint64_t)0xFFFFFFFFFFFFFFFFULL)\n\n/* Limbs of 2^256 minus the secp256k1 order. */\n#define SECP256K1_N_C_0 (~SECP256K1_N_0 + 1)\n#define SECP256K1_N_C_1 (~SECP256K1_N_1)\n#define SECP256K1_N_C_2 (1)\n\n/* Limbs of half the secp256k1 order. */\n#define SECP256K1_N_H_0 ((uint64_t)0xDFE92F46681B20A0ULL)\n#define SECP256K1_N_H_1 ((uint64_t)0x5D576E7357A4501DULL)\n#define SECP256K1_N_H_2 ((uint64_t)0xFFFFFFFFFFFFFFFFULL)\n#define SECP256K1_N_H_3 ((uint64_t)0x7FFFFFFFFFFFFFFFULL)\n\nSECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) {\n    r->d[0] = 0;\n    r->d[1] = 0;\n    r->d[2] = 0;\n    r->d[3] = 0;\n}\n\nSECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) {\n    r->d[0] = v;\n    r->d[1] = 0;\n    r->d[2] = 0;\n    r->d[3] = 0;\n}\n\nSECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {\n    VERIFY_CHECK((offset + count - 1) >> 6 == offset >> 6);\n    return (a->d[offset >> 6] >> (offset & 0x3F)) & ((((uint64_t)1) << count) - 1);\n}\n\nSECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {\n    VERIFY_CHECK(count < 32);\n    VERIFY_CHECK(offset + count <= 256);\n    if ((offset + count - 1) >> 6 == offset >> 6) {\n        return secp256k1_scalar_get_bits(a, offset, count);\n    } else {\n        VERIFY_CHECK((offset >> 6) + 1 < 4);\n        return ((a->d[offset >> 6] >> (offset & 0x3F)) | (a->d[(offset >> 6) + 1] << (64 - (offset & 0x3F)))) & ((((uint64_t)1) << count) - 1);\n    }\n}\n\nSECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) {\n    int yes = 0;\n    int no = 0;\n    no |= (a->d[3] < SECP256K1_N_3); /* No need for a > check. */\n    no |= (a->d[2] < SECP256K1_N_2);\n    yes |= (a->d[2] > SECP256K1_N_2) & ~no;\n    no |= (a->d[1] < SECP256K1_N_1);\n    yes |= (a->d[1] > SECP256K1_N_1) & ~no;\n    yes |= (a->d[0] >= SECP256K1_N_0) & ~no;\n    return yes;\n}\n\nSECP256K1_INLINE static int secp256k1_scalar_reduce(secp256k1_scalar *r, unsigned int overflow) {\n    secp256k1_uint128 t;\n    VERIFY_CHECK(overflow <= 1);\n    secp256k1_u128_from_u64(&t, r->d[0]);\n    secp256k1_u128_accum_u64(&t, overflow * SECP256K1_N_C_0);\n    r->d[0] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[1]);\n    secp256k1_u128_accum_u64(&t, overflow * SECP256K1_N_C_1);\n    r->d[1] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[2]);\n    secp256k1_u128_accum_u64(&t, overflow * SECP256K1_N_C_2);\n    r->d[2] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[3]);\n    r->d[3] = secp256k1_u128_to_u64(&t);\n    return overflow;\n}\n\nstatic int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {\n    int overflow;\n    secp256k1_uint128 t;\n    secp256k1_u128_from_u64(&t, a->d[0]);\n    secp256k1_u128_accum_u64(&t, b->d[0]);\n    r->d[0] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, a->d[1]);\n    secp256k1_u128_accum_u64(&t, b->d[1]);\n    r->d[1] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, a->d[2]);\n    secp256k1_u128_accum_u64(&t, b->d[2]);\n    r->d[2] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, a->d[3]);\n    secp256k1_u128_accum_u64(&t, b->d[3]);\n    r->d[3] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    overflow = secp256k1_u128_to_u64(&t) + secp256k1_scalar_check_overflow(r);\n    VERIFY_CHECK(overflow == 0 || overflow == 1);\n    secp256k1_scalar_reduce(r, overflow);\n    return overflow;\n}\n\nstatic void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {\n    secp256k1_uint128 t;\n    VERIFY_CHECK(bit < 256);\n    bit += ((uint32_t) flag - 1) & 0x100;  /* forcing (bit >> 6) > 3 makes this a noop */\n    secp256k1_u128_from_u64(&t, r->d[0]);\n    secp256k1_u128_accum_u64(&t, ((uint64_t)((bit >> 6) == 0)) << (bit & 0x3F));\n    r->d[0] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[1]);\n    secp256k1_u128_accum_u64(&t, ((uint64_t)((bit >> 6) == 1)) << (bit & 0x3F));\n    r->d[1] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[2]);\n    secp256k1_u128_accum_u64(&t, ((uint64_t)((bit >> 6) == 2)) << (bit & 0x3F));\n    r->d[2] = secp256k1_u128_to_u64(&t); secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[3]);\n    secp256k1_u128_accum_u64(&t, ((uint64_t)((bit >> 6) == 3)) << (bit & 0x3F));\n    r->d[3] = secp256k1_u128_to_u64(&t);\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_u128_hi_u64(&t) == 0);\n#endif\n}\n\nstatic void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) {\n    int over;\n    r->d[0] = (uint64_t)b32[31] | (uint64_t)b32[30] << 8 | (uint64_t)b32[29] << 16 | (uint64_t)b32[28] << 24 | (uint64_t)b32[27] << 32 | (uint64_t)b32[26] << 40 | (uint64_t)b32[25] << 48 | (uint64_t)b32[24] << 56;\n    r->d[1] = (uint64_t)b32[23] | (uint64_t)b32[22] << 8 | (uint64_t)b32[21] << 16 | (uint64_t)b32[20] << 24 | (uint64_t)b32[19] << 32 | (uint64_t)b32[18] << 40 | (uint64_t)b32[17] << 48 | (uint64_t)b32[16] << 56;\n    r->d[2] = (uint64_t)b32[15] | (uint64_t)b32[14] << 8 | (uint64_t)b32[13] << 16 | (uint64_t)b32[12] << 24 | (uint64_t)b32[11] << 32 | (uint64_t)b32[10] << 40 | (uint64_t)b32[9] << 48 | (uint64_t)b32[8] << 56;\n    r->d[3] = (uint64_t)b32[7] | (uint64_t)b32[6] << 8 | (uint64_t)b32[5] << 16 | (uint64_t)b32[4] << 24 | (uint64_t)b32[3] << 32 | (uint64_t)b32[2] << 40 | (uint64_t)b32[1] << 48 | (uint64_t)b32[0] << 56;\n    over = secp256k1_scalar_reduce(r, secp256k1_scalar_check_overflow(r));\n    if (overflow) {\n        *overflow = over;\n    }\n}\n\nstatic void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) {\n    bin[0] = a->d[3] >> 56; bin[1] = a->d[3] >> 48; bin[2] = a->d[3] >> 40; bin[3] = a->d[3] >> 32; bin[4] = a->d[3] >> 24; bin[5] = a->d[3] >> 16; bin[6] = a->d[3] >> 8; bin[7] = a->d[3];\n    bin[8] = a->d[2] >> 56; bin[9] = a->d[2] >> 48; bin[10] = a->d[2] >> 40; bin[11] = a->d[2] >> 32; bin[12] = a->d[2] >> 24; bin[13] = a->d[2] >> 16; bin[14] = a->d[2] >> 8; bin[15] = a->d[2];\n    bin[16] = a->d[1] >> 56; bin[17] = a->d[1] >> 48; bin[18] = a->d[1] >> 40; bin[19] = a->d[1] >> 32; bin[20] = a->d[1] >> 24; bin[21] = a->d[1] >> 16; bin[22] = a->d[1] >> 8; bin[23] = a->d[1];\n    bin[24] = a->d[0] >> 56; bin[25] = a->d[0] >> 48; bin[26] = a->d[0] >> 40; bin[27] = a->d[0] >> 32; bin[28] = a->d[0] >> 24; bin[29] = a->d[0] >> 16; bin[30] = a->d[0] >> 8; bin[31] = a->d[0];\n}\n\nSECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) {\n    return (a->d[0] | a->d[1] | a->d[2] | a->d[3]) == 0;\n}\n\nstatic void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) {\n    uint64_t nonzero = 0xFFFFFFFFFFFFFFFFULL * (secp256k1_scalar_is_zero(a) == 0);\n    secp256k1_uint128 t;\n    secp256k1_u128_from_u64(&t, ~a->d[0]);\n    secp256k1_u128_accum_u64(&t, SECP256K1_N_0 + 1);\n    r->d[0] = secp256k1_u128_to_u64(&t) & nonzero; secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, ~a->d[1]);\n    secp256k1_u128_accum_u64(&t, SECP256K1_N_1);\n    r->d[1] = secp256k1_u128_to_u64(&t) & nonzero; secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, ~a->d[2]);\n    secp256k1_u128_accum_u64(&t, SECP256K1_N_2);\n    r->d[2] = secp256k1_u128_to_u64(&t) & nonzero; secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, ~a->d[3]);\n    secp256k1_u128_accum_u64(&t, SECP256K1_N_3);\n    r->d[3] = secp256k1_u128_to_u64(&t) & nonzero;\n}\n\n#if 0\nSECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) {\n    return ((a->d[0] ^ 1) | a->d[1] | a->d[2] | a->d[3]) == 0;\n}\n\nstatic int secp256k1_scalar_is_high(const secp256k1_scalar *a) {\n    int yes = 0;\n    int no = 0;\n    no |= (a->d[3] < SECP256K1_N_H_3);\n    yes |= (a->d[3] > SECP256K1_N_H_3) & ~no;\n    no |= (a->d[2] < SECP256K1_N_H_2) & ~yes; /* No need for a > check. */\n    no |= (a->d[1] < SECP256K1_N_H_1) & ~yes;\n    yes |= (a->d[1] > SECP256K1_N_H_1) & ~no;\n    yes |= (a->d[0] > SECP256K1_N_H_0) & ~no;\n    return yes;\n}\n\nstatic int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {\n    /* If we are flag = 0, mask = 00...00 and this is a no-op;\n     * if we are flag = 1, mask = 11...11 and this is identical to secp256k1_scalar_negate */\n    uint64_t mask = !flag - 1;\n    uint64_t nonzero = (secp256k1_scalar_is_zero(r) != 0) - 1;\n    secp256k1_uint128 t;\n    secp256k1_u128_from_u64(&t, r->d[0] ^ mask);\n    secp256k1_u128_accum_u64(&t, (SECP256K1_N_0 + 1) & mask);\n    r->d[0] = secp256k1_u128_to_u64(&t) & nonzero; secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[1] ^ mask);\n    secp256k1_u128_accum_u64(&t, SECP256K1_N_1 & mask);\n    r->d[1] = secp256k1_u128_to_u64(&t) & nonzero; secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[2] ^ mask);\n    secp256k1_u128_accum_u64(&t, SECP256K1_N_2 & mask);\n    r->d[2] = secp256k1_u128_to_u64(&t) & nonzero; secp256k1_u128_rshift(&t, 64);\n    secp256k1_u128_accum_u64(&t, r->d[3] ^ mask);\n    secp256k1_u128_accum_u64(&t, SECP256K1_N_3 & mask);\n    r->d[3] = secp256k1_u128_to_u64(&t) & nonzero;\n    return 2 * (mask == 0) - 1;\n}\n#endif\n\n/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */\n\n/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */\n#define muladd(a,b) { \\\n    uint64_t tl, th; \\\n    { \\\n        secp256k1_uint128 t; \\\n        secp256k1_u128_mul(&t, a, b); \\\n        th = secp256k1_u128_hi_u64(&t);  /* at most 0xFFFFFFFFFFFFFFFE */ \\\n        tl = secp256k1_u128_to_u64(&t); \\\n    } \\\n    c0 += tl;                 /* overflow is handled on the next line */ \\\n    th += (c0 < tl);          /* at most 0xFFFFFFFFFFFFFFFF */ \\\n    c1 += th;                 /* overflow is handled on the next line */ \\\n    c2 += (c1 < th);          /* never overflows by contract (verified in the next line) */ \\\n    VERIFY_CHECK((c1 >= th) || (c2 != 0)); \\\n}\n\n/** Add a*b to the number defined by (c0,c1). c1 must never overflow. */\n#define muladd_fast(a,b) { \\\n    uint64_t tl, th; \\\n    { \\\n        secp256k1_uint128 t; \\\n        secp256k1_u128_mul(&t, a, b); \\\n        th = secp256k1_u128_hi_u64(&t);  /* at most 0xFFFFFFFFFFFFFFFE */ \\\n        tl = secp256k1_u128_to_u64(&t); \\\n    } \\\n    c0 += tl;                 /* overflow is handled on the next line */ \\\n    th += (c0 < tl);          /* at most 0xFFFFFFFFFFFFFFFF */ \\\n    c1 += th;                 /* never overflows by contract (verified in the next line) */ \\\n    VERIFY_CHECK(c1 >= th); \\\n}\n\n/** Add a to the number defined by (c0,c1,c2). c2 must never overflow. */\n#define sumadd(a) { \\\n    unsigned int over; \\\n    c0 += (a);                  /* overflow is handled on the next line */ \\\n    over = (c0 < (a));         \\\n    c1 += over;                 /* overflow is handled on the next line */ \\\n    c2 += (c1 < over);          /* never overflows by contract */ \\\n}\n\n/** Add a to the number defined by (c0,c1). c1 must never overflow, c2 must be zero. */\n#define sumadd_fast(a) { \\\n    c0 += (a);                 /* overflow is handled on the next line */ \\\n    c1 += (c0 < (a));          /* never overflows by contract (verified the next line) */ \\\n    VERIFY_CHECK((c1 != 0) | (c0 >= (a))); \\\n    VERIFY_CHECK(c2 == 0); \\\n}\n\n/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. */\n#define extract(n) { \\\n    (n) = c0; \\\n    c0 = c1; \\\n    c1 = c2; \\\n    c2 = 0; \\\n}\n\n/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. c2 is required to be zero. */\n#define extract_fast(n) { \\\n    (n) = c0; \\\n    c0 = c1; \\\n    c1 = 0; \\\n    VERIFY_CHECK(c2 == 0); \\\n}\n\nstatic void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint64_t *l) {\n#ifdef USE_ASM_X86_64\n    /* Reduce 512 bits into 385. */\n    uint64_t m0, m1, m2, m3, m4, m5, m6;\n    uint64_t p0, p1, p2, p3, p4;\n    uint64_t c;\n\n    __asm__ __volatile__(\n    /* Preload. */\n    \"movq 32(%%rsi), %%r11\\n\"\n    \"movq 40(%%rsi), %%r12\\n\"\n    \"movq 48(%%rsi), %%r13\\n\"\n    \"movq 56(%%rsi), %%r14\\n\"\n    /* Initialize r8,r9,r10 */\n    \"movq 0(%%rsi), %%r8\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    \"xorq %%r10, %%r10\\n\"\n    /* (r8,r9) += n0 * c0 */\n    \"movq %8, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    /* extract m0 */\n    \"movq %%r8, %q0\\n\"\n    \"xorq %%r8, %%r8\\n\"\n    /* (r9,r10) += l1 */\n    \"addq 8(%%rsi), %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r9,r10,r8) += n1 * c0 */\n    \"movq %8, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* (r9,r10,r8) += n0 * c1 */\n    \"movq %9, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* extract m1 */\n    \"movq %%r9, %q1\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    /* (r10,r8,r9) += l2 */\n    \"addq 16(%%rsi), %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += n2 * c0 */\n    \"movq %8, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += n1 * c1 */\n    \"movq %9, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += n0 */\n    \"addq %%r11, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* extract m2 */\n    \"movq %%r10, %q2\\n\"\n    \"xorq %%r10, %%r10\\n\"\n    /* (r8,r9,r10) += l3 */\n    \"addq 24(%%rsi), %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r8,r9,r10) += n3 * c0 */\n    \"movq %8, %%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r8,r9,r10) += n2 * c1 */\n    \"movq %9, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r8,r9,r10) += n1 */\n    \"addq %%r12, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* extract m3 */\n    \"movq %%r8, %q3\\n\"\n    \"xorq %%r8, %%r8\\n\"\n    /* (r9,r10,r8) += n3 * c1 */\n    \"movq %9, %%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* (r9,r10,r8) += n2 */\n    \"addq %%r13, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* extract m4 */\n    \"movq %%r9, %q4\\n\"\n    /* (r10,r8) += n3 */\n    \"addq %%r14, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* extract m5 */\n    \"movq %%r10, %q5\\n\"\n    /* extract m6 */\n    \"movq %%r8, %q6\\n\"\n    : \"=g\"(m0), \"=g\"(m1), \"=g\"(m2), \"=g\"(m3), \"=g\"(m4), \"=g\"(m5), \"=g\"(m6)\n    : \"S\"(l), \"i\"(SECP256K1_N_C_0), \"i\"(SECP256K1_N_C_1)\n    : \"rax\", \"rdx\", \"r8\", \"r9\", \"r10\", \"r11\", \"r12\", \"r13\", \"r14\", \"cc\");\n\n    /* Reduce 385 bits into 258. */\n    __asm__ __volatile__(\n    /* Preload */\n    \"movq %q9, %%r11\\n\"\n    \"movq %q10, %%r12\\n\"\n    \"movq %q11, %%r13\\n\"\n    /* Initialize (r8,r9,r10) */\n    \"movq %q5, %%r8\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    \"xorq %%r10, %%r10\\n\"\n    /* (r8,r9) += m4 * c0 */\n    \"movq %12, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    /* extract p0 */\n    \"movq %%r8, %q0\\n\"\n    \"xorq %%r8, %%r8\\n\"\n    /* (r9,r10) += m1 */\n    \"addq %q6, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r9,r10,r8) += m5 * c0 */\n    \"movq %12, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* (r9,r10,r8) += m4 * c1 */\n    \"movq %13, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* extract p1 */\n    \"movq %%r9, %q1\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    /* (r10,r8,r9) += m2 */\n    \"addq %q7, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += m6 * c0 */\n    \"movq %12, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += m5 * c1 */\n    \"movq %13, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += m4 */\n    \"addq %%r11, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* extract p2 */\n    \"movq %%r10, %q2\\n\"\n    /* (r8,r9) += m3 */\n    \"addq %q8, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r8,r9) += m6 * c1 */\n    \"movq %13, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    /* (r8,r9) += m5 */\n    \"addq %%r12, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* extract p3 */\n    \"movq %%r8, %q3\\n\"\n    /* (r9) += m6 */\n    \"addq %%r13, %%r9\\n\"\n    /* extract p4 */\n    \"movq %%r9, %q4\\n\"\n    : \"=&g\"(p0), \"=&g\"(p1), \"=&g\"(p2), \"=g\"(p3), \"=g\"(p4)\n    : \"g\"(m0), \"g\"(m1), \"g\"(m2), \"g\"(m3), \"g\"(m4), \"g\"(m5), \"g\"(m6), \"i\"(SECP256K1_N_C_0), \"i\"(SECP256K1_N_C_1)\n    : \"rax\", \"rdx\", \"r8\", \"r9\", \"r10\", \"r11\", \"r12\", \"r13\", \"cc\");\n\n    /* Reduce 258 bits into 256. */\n    __asm__ __volatile__(\n    /* Preload */\n    \"movq %q5, %%r10\\n\"\n    /* (rax,rdx) = p4 * c0 */\n    \"movq %7, %%rax\\n\"\n    \"mulq %%r10\\n\"\n    /* (rax,rdx) += p0 */\n    \"addq %q1, %%rax\\n\"\n    \"adcq $0, %%rdx\\n\"\n    /* extract r0 */\n    \"movq %%rax, 0(%q6)\\n\"\n    /* Move to (r8,r9) */\n    \"movq %%rdx, %%r8\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    /* (r8,r9) += p1 */\n    \"addq %q2, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r8,r9) += p4 * c1 */\n    \"movq %8, %%rax\\n\"\n    \"mulq %%r10\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    /* Extract r1 */\n    \"movq %%r8, 8(%q6)\\n\"\n    \"xorq %%r8, %%r8\\n\"\n    /* (r9,r8) += p4 */\n    \"addq %%r10, %%r9\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* (r9,r8) += p2 */\n    \"addq %q3, %%r9\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* Extract r2 */\n    \"movq %%r9, 16(%q6)\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    /* (r8,r9) += p3 */\n    \"addq %q4, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* Extract r3 */\n    \"movq %%r8, 24(%q6)\\n\"\n    /* Extract c */\n    \"movq %%r9, %q0\\n\"\n    : \"=g\"(c)\n    : \"g\"(p0), \"g\"(p1), \"g\"(p2), \"g\"(p3), \"g\"(p4), \"D\"(r), \"i\"(SECP256K1_N_C_0), \"i\"(SECP256K1_N_C_1)\n    : \"rax\", \"rdx\", \"r8\", \"r9\", \"r10\", \"cc\", \"memory\");\n#else\n    secp256k1_uint128 c128;\n    uint64_t c, c0, c1, c2;\n    uint64_t n0 = l[4], n1 = l[5], n2 = l[6], n3 = l[7];\n    uint64_t m0, m1, m2, m3, m4, m5;\n    uint32_t m6;\n    uint64_t p0, p1, p2, p3;\n    uint32_t p4;\n\n    /* Reduce 512 bits into 385. */\n    /* m[0..6] = l[0..3] + n[0..3] * SECP256K1_N_C. */\n    c0 = l[0]; c1 = 0; c2 = 0;\n    muladd_fast(n0, SECP256K1_N_C_0);\n    extract_fast(m0);\n    sumadd_fast(l[1]);\n    muladd(n1, SECP256K1_N_C_0);\n    muladd(n0, SECP256K1_N_C_1);\n    extract(m1);\n    sumadd(l[2]);\n    muladd(n2, SECP256K1_N_C_0);\n    muladd(n1, SECP256K1_N_C_1);\n    sumadd(n0);\n    extract(m2);\n    sumadd(l[3]);\n    muladd(n3, SECP256K1_N_C_0);\n    muladd(n2, SECP256K1_N_C_1);\n    sumadd(n1);\n    extract(m3);\n    muladd(n3, SECP256K1_N_C_1);\n    sumadd(n2);\n    extract(m4);\n    sumadd_fast(n3);\n    extract_fast(m5);\n    VERIFY_CHECK(c0 <= 1);\n    m6 = c0;\n\n    /* Reduce 385 bits into 258. */\n    /* p[0..4] = m[0..3] + m[4..6] * SECP256K1_N_C. */\n    c0 = m0; c1 = 0; c2 = 0;\n    muladd_fast(m4, SECP256K1_N_C_0);\n    extract_fast(p0);\n    sumadd_fast(m1);\n    muladd(m5, SECP256K1_N_C_0);\n    muladd(m4, SECP256K1_N_C_1);\n    extract(p1);\n    sumadd(m2);\n    muladd(m6, SECP256K1_N_C_0);\n    muladd(m5, SECP256K1_N_C_1);\n    sumadd(m4);\n    extract(p2);\n    sumadd_fast(m3);\n    muladd_fast(m6, SECP256K1_N_C_1);\n    sumadd_fast(m5);\n    extract_fast(p3);\n    p4 = c0 + m6;\n    VERIFY_CHECK(p4 <= 2);\n\n    /* Reduce 258 bits into 256. */\n    /* r[0..3] = p[0..3] + p[4] * SECP256K1_N_C. */\n    secp256k1_u128_from_u64(&c128, p0);\n    secp256k1_u128_accum_mul(&c128, SECP256K1_N_C_0, p4);\n    r->d[0] = secp256k1_u128_to_u64(&c128); secp256k1_u128_rshift(&c128, 64);\n    secp256k1_u128_accum_u64(&c128, p1);\n    secp256k1_u128_accum_mul(&c128, SECP256K1_N_C_1, p4);\n    r->d[1] = secp256k1_u128_to_u64(&c128); secp256k1_u128_rshift(&c128, 64);\n    secp256k1_u128_accum_u64(&c128, p2);\n    secp256k1_u128_accum_u64(&c128, p4);\n    r->d[2] = secp256k1_u128_to_u64(&c128); secp256k1_u128_rshift(&c128, 64);\n    secp256k1_u128_accum_u64(&c128, p3);\n    r->d[3] = secp256k1_u128_to_u64(&c128);\n    c = secp256k1_u128_hi_u64(&c128);\n#endif\n\n    /* Final reduction of r. */\n    secp256k1_scalar_reduce(r, c + secp256k1_scalar_check_overflow(r));\n}\n\nstatic void secp256k1_scalar_mul_512(uint64_t l[8], const secp256k1_scalar *a, const secp256k1_scalar *b) {\n#ifdef USE_ASM_X86_64\n    const uint64_t *pb = b->d;\n    __asm__ __volatile__(\n    /* Preload */\n    \"movq 0(%%rdi), %%r15\\n\"\n    \"movq 8(%%rdi), %%rbx\\n\"\n    \"movq 16(%%rdi), %%rcx\\n\"\n    \"movq 0(%%rdx), %%r11\\n\"\n    \"movq 8(%%rdx), %%r12\\n\"\n    \"movq 16(%%rdx), %%r13\\n\"\n    \"movq 24(%%rdx), %%r14\\n\"\n    /* (rax,rdx) = a0 * b0 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    /* Extract l0 */\n    \"movq %%rax, 0(%%rsi)\\n\"\n    /* (r8,r9,r10) = (rdx) */\n    \"movq %%rdx, %%r8\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    \"xorq %%r10, %%r10\\n\"\n    /* (r8,r9,r10) += a0 * b1 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r8,r9,r10) += a1 * b0 */\n    \"movq %%rbx, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* Extract l1 */\n    \"movq %%r8, 8(%%rsi)\\n\"\n    \"xorq %%r8, %%r8\\n\"\n    /* (r9,r10,r8) += a0 * b2 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* (r9,r10,r8) += a1 * b1 */\n    \"movq %%rbx, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* (r9,r10,r8) += a2 * b0 */\n    \"movq %%rcx, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* Extract l2 */\n    \"movq %%r9, 16(%%rsi)\\n\"\n    \"xorq %%r9, %%r9\\n\"\n    /* (r10,r8,r9) += a0 * b3 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* Preload a3 */\n    \"movq 24(%%rdi), %%r15\\n\"\n    /* (r10,r8,r9) += a1 * b2 */\n    \"movq %%rbx, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += a2 * b1 */\n    \"movq %%rcx, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* (r10,r8,r9) += a3 * b0 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r11\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    \"adcq $0, %%r9\\n\"\n    /* Extract l3 */\n    \"movq %%r10, 24(%%rsi)\\n\"\n    \"xorq %%r10, %%r10\\n\"\n    /* (r8,r9,r10) += a1 * b3 */\n    \"movq %%rbx, %%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r8,r9,r10) += a2 * b2 */\n    \"movq %%rcx, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* (r8,r9,r10) += a3 * b1 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r12\\n\"\n    \"addq %%rax, %%r8\\n\"\n    \"adcq %%rdx, %%r9\\n\"\n    \"adcq $0, %%r10\\n\"\n    /* Extract l4 */\n    \"movq %%r8, 32(%%rsi)\\n\"\n    \"xorq %%r8, %%r8\\n\"\n    /* (r9,r10,r8) += a2 * b3 */\n    \"movq %%rcx, %%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* (r9,r10,r8) += a3 * b2 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r13\\n\"\n    \"addq %%rax, %%r9\\n\"\n    \"adcq %%rdx, %%r10\\n\"\n    \"adcq $0, %%r8\\n\"\n    /* Extract l5 */\n    \"movq %%r9, 40(%%rsi)\\n\"\n    /* (r10,r8) += a3 * b3 */\n    \"movq %%r15, %%rax\\n\"\n    \"mulq %%r14\\n\"\n    \"addq %%rax, %%r10\\n\"\n    \"adcq %%rdx, %%r8\\n\"\n    /* Extract l6 */\n    \"movq %%r10, 48(%%rsi)\\n\"\n    /* Extract l7 */\n    \"movq %%r8, 56(%%rsi)\\n\"\n    : \"+d\"(pb)\n    : \"S\"(l), \"D\"(a->d)\n    : \"rax\", \"rbx\", \"rcx\", \"r8\", \"r9\", \"r10\", \"r11\", \"r12\", \"r13\", \"r14\", \"r15\", \"cc\", \"memory\");\n#else\n    /* 160 bit accumulator. */\n    uint64_t c0 = 0, c1 = 0;\n    uint32_t c2 = 0;\n\n    /* l[0..7] = a[0..3] * b[0..3]. */\n    muladd_fast(a->d[0], b->d[0]);\n    extract_fast(l[0]);\n    muladd(a->d[0], b->d[1]);\n    muladd(a->d[1], b->d[0]);\n    extract(l[1]);\n    muladd(a->d[0], b->d[2]);\n    muladd(a->d[1], b->d[1]);\n    muladd(a->d[2], b->d[0]);\n    extract(l[2]);\n    muladd(a->d[0], b->d[3]);\n    muladd(a->d[1], b->d[2]);\n    muladd(a->d[2], b->d[1]);\n    muladd(a->d[3], b->d[0]);\n    extract(l[3]);\n    muladd(a->d[1], b->d[3]);\n    muladd(a->d[2], b->d[2]);\n    muladd(a->d[3], b->d[1]);\n    extract(l[4]);\n    muladd(a->d[2], b->d[3]);\n    muladd(a->d[3], b->d[2]);\n    extract(l[5]);\n    muladd_fast(a->d[3], b->d[3]);\n    extract_fast(l[6]);\n    VERIFY_CHECK(c1 == 0);\n    l[7] = c0;\n#endif\n}\n\n#undef sumadd\n#undef sumadd_fast\n#undef muladd\n#undef muladd_fast\n#undef extract\n#undef extract_fast\n\nstatic void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {\n    uint64_t l[8];\n    secp256k1_scalar_mul_512(l, a, b);\n    secp256k1_scalar_reduce_512(r, l);\n}\n\n#if 0\nstatic int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) {\n    int ret;\n    VERIFY_CHECK(n > 0);\n    VERIFY_CHECK(n < 16);\n    ret = r->d[0] & ((1 << n) - 1);\n    r->d[0] = (r->d[0] >> n) + (r->d[1] << (64 - n));\n    r->d[1] = (r->d[1] >> n) + (r->d[2] << (64 - n));\n    r->d[2] = (r->d[2] >> n) + (r->d[3] << (64 - n));\n    r->d[3] = (r->d[3] >> n);\n    return ret;\n}\n#endif\n\nstatic void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *k) {\n    r1->d[0] = k->d[0];\n    r1->d[1] = k->d[1];\n    r1->d[2] = 0;\n    r1->d[3] = 0;\n    r2->d[0] = k->d[2];\n    r2->d[1] = k->d[3];\n    r2->d[2] = 0;\n    r2->d[3] = 0;\n}\n\n#if 0\nSECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) {\n    return ((a->d[0] ^ b->d[0]) | (a->d[1] ^ b->d[1]) | (a->d[2] ^ b->d[2]) | (a->d[3] ^ b->d[3])) == 0;\n}\n#endif\n\nSECP256K1_INLINE static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift) {\n    uint64_t l[8];\n    unsigned int shiftlimbs;\n    unsigned int shiftlow;\n    unsigned int shifthigh;\n    VERIFY_CHECK(shift >= 256);\n    secp256k1_scalar_mul_512(l, a, b);\n    shiftlimbs = shift >> 6;\n    shiftlow = shift & 0x3F;\n    shifthigh = 64 - shiftlow;\n    r->d[0] = shift < 512 ? (l[0 + shiftlimbs] >> shiftlow | (shift < 448 && shiftlow ? (l[1 + shiftlimbs] << shifthigh) : 0)) : 0;\n    r->d[1] = shift < 448 ? (l[1 + shiftlimbs] >> shiftlow | (shift < 384 && shiftlow ? (l[2 + shiftlimbs] << shifthigh) : 0)) : 0;\n    r->d[2] = shift < 384 ? (l[2 + shiftlimbs] >> shiftlow | (shift < 320 && shiftlow ? (l[3 + shiftlimbs] << shifthigh) : 0)) : 0;\n    r->d[3] = shift < 320 ? (l[3 + shiftlimbs] >> shiftlow) : 0;\n    secp256k1_scalar_cadd_bit(r, 0, (l[(shift - 1) >> 6] >> ((shift - 1) & 0x3f)) & 1);\n}\n\n#if 0\nstatic SECP256K1_INLINE void secp256k1_scalar_cmov(secp256k1_scalar *r, const secp256k1_scalar *a, int flag) {\n    uint64_t mask0, mask1;\n    SECP256K1_CHECKMEM_CHECK_VERIFY(r->d, sizeof(r->d));\n    mask0 = flag + ~((uint64_t)0);\n    mask1 = ~mask0;\n    r->d[0] = (r->d[0] & mask0) | (a->d[0] & mask1);\n    r->d[1] = (r->d[1] & mask0) | (a->d[1] & mask1);\n    r->d[2] = (r->d[2] & mask0) | (a->d[2] & mask1);\n    r->d[3] = (r->d[3] & mask0) | (a->d[3] & mask1);\n}\n#endif\n\nstatic void secp256k1_scalar_from_signed62(secp256k1_scalar *r, const secp256k1_modinv64_signed62 *a) {\n    const uint64_t a0 = a->v[0], a1 = a->v[1], a2 = a->v[2], a3 = a->v[3], a4 = a->v[4];\n\n    /* The output from secp256k1_modinv64{_var} should be normalized to range [0,modulus), and\n     * have limbs in [0,2^62). The modulus is < 2^256, so the top limb must be below 2^(256-62*4).\n     */\n    VERIFY_CHECK(a0 >> 62 == 0);\n    VERIFY_CHECK(a1 >> 62 == 0);\n    VERIFY_CHECK(a2 >> 62 == 0);\n    VERIFY_CHECK(a3 >> 62 == 0);\n    VERIFY_CHECK(a4 >> 8 == 0);\n\n    r->d[0] = a0      | a1 << 62;\n    r->d[1] = a1 >> 2 | a2 << 60;\n    r->d[2] = a2 >> 4 | a3 << 58;\n    r->d[3] = a3 >> 6 | a4 << 56;\n\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);\n#endif\n}\n\nstatic void secp256k1_scalar_to_signed62(secp256k1_modinv64_signed62 *r, const secp256k1_scalar *a) {\n    const uint64_t M62 = UINT64_MAX >> 2;\n    const uint64_t a0 = a->d[0], a1 = a->d[1], a2 = a->d[2], a3 = a->d[3];\n\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_scalar_check_overflow(a) == 0);\n#endif\n\n    r->v[0] =  a0                   & M62;\n    r->v[1] = (a0 >> 62 | a1 <<  2) & M62;\n    r->v[2] = (a1 >> 60 | a2 <<  4) & M62;\n    r->v[3] = (a2 >> 58 | a3 <<  6) & M62;\n    r->v[4] =  a3 >> 56;\n}\n\nstatic const secp256k1_modinv64_modinfo secp256k1_const_modinfo_scalar = {\n    {{0x3FD25E8CD0364141LL, 0x2ABB739ABD2280EELL, -0x15LL, 0, 256}},\n    0x34F20099AA774EC1LL\n};\n\n#if 0\nstatic void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *x) {\n    secp256k1_modinv64_signed62 s;\n#ifdef VERIFY\n    int zero_in = secp256k1_scalar_is_zero(x);\n#endif\n    secp256k1_scalar_to_signed62(&s, x);\n    secp256k1_modinv64(&s, &secp256k1_const_modinfo_scalar);\n    secp256k1_scalar_from_signed62(r, &s);\n\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_scalar_is_zero(r) == zero_in);\n#endif\n}\n#endif\n\nstatic void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *x) {\n    secp256k1_modinv64_signed62 s;\n#ifdef VERIFY\n    int zero_in = secp256k1_scalar_is_zero(x);\n#endif\n    secp256k1_scalar_to_signed62(&s, x);\n    secp256k1_modinv64_var(&s, &secp256k1_const_modinfo_scalar);\n    secp256k1_scalar_from_signed62(r, &s);\n\n#ifdef VERIFY\n    VERIFY_CHECK(secp256k1_scalar_is_zero(r) == zero_in);\n#endif\n}\n\n#if 0\nSECP256K1_INLINE static int secp256k1_scalar_is_even(const secp256k1_scalar *a) {\n    return !(a->d[0] & 1);\n}\n#endif\n\n#endif /* SECP256K1_SCALAR_REPR_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/scalar_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2014 Pieter Wuille                                    *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_SCALAR_IMPL_H\n#define SECP256K1_SCALAR_IMPL_H\n\n#ifdef VERIFY\n#include <string.h>\n#endif\n\n#include \"scalar.h\"\n#include \"util.h\"\n\n#if defined(SECP256K1_WIDEMUL_INT128)\n#include \"scalar_4x64_impl.h\"\n#else\n#error \"Please select wide multiplication implementation\"\n#endif\n\nstatic const secp256k1_scalar secp256k1_scalar_one = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1);\nstatic const secp256k1_scalar secp256k1_scalar_zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);\n\n#if 0\nstatic int secp256k1_scalar_set_b32_seckey(secp256k1_scalar *r, const unsigned char *bin) {\n    int overflow;\n    secp256k1_scalar_set_b32(r, bin, &overflow);\n    return (!overflow) & (!secp256k1_scalar_is_zero(r));\n}\n#endif\n\n/**\n * The Secp256k1 curve has an endomorphism, where lambda * (x, y) = (beta * x, y), where\n * lambda is: */\nstatic const secp256k1_scalar secp256k1_const_lambda = SECP256K1_SCALAR_CONST(\n    0x5363AD4CUL, 0xC05C30E0UL, 0xA5261C02UL, 0x8812645AUL,\n    0x122E22EAUL, 0x20816678UL, 0xDF02967CUL, 0x1B23BD72UL\n);\n\n#ifdef VERIFY\nstatic void secp256k1_scalar_split_lambda_verify(const secp256k1_scalar *r1, const secp256k1_scalar *r2, const secp256k1_scalar *k);\n#endif\n\n/*\n * Both lambda and beta are primitive cube roots of unity.  That is lambda^3 == 1 mod n and\n * beta^3 == 1 mod p, where n is the curve order and p is the field order.\n *\n * Furthermore, because (X^3 - 1) = (X - 1)(X^2 + X + 1), the primitive cube roots of unity are\n * roots of X^2 + X + 1.  Therefore lambda^2 + lambda == -1 mod n and beta^2 + beta == -1 mod p.\n * (The other primitive cube roots of unity are lambda^2 and beta^2 respectively.)\n *\n * Let l = -1/2 + i*sqrt(3)/2, the complex root of X^2 + X + 1. We can define a ring\n * homomorphism phi : Z[l] -> Z_n where phi(a + b*l) == a + b*lambda mod n. The kernel of phi\n * is a lattice over Z[l] (considering Z[l] as a Z-module). This lattice is generated by a\n * reduced basis {a1 + b1*l, a2 + b2*l} where\n *\n * - a1 =      {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15}\n * - b1 =     -{0xe4,0x43,0x7e,0xd6,0x01,0x0e,0x88,0x28,0x6f,0x54,0x7f,0xa9,0x0a,0xbf,0xe4,0xc3}\n * - a2 = {0x01,0x14,0xca,0x50,0xf7,0xa8,0xe2,0xf3,0xf6,0x57,0xc1,0x10,0x8d,0x9d,0x44,0xcf,0xd8}\n * - b2 =      {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15}\n *\n * \"Guide to Elliptic Curve Cryptography\" (Hankerson, Menezes, Vanstone) gives an algorithm\n * (algorithm 3.74) to find k1 and k2 given k, such that k1 + k2 * lambda == k mod n, and k1\n * and k2 are small in absolute value.\n *\n * The algorithm computes c1 = round(b2 * k / n) and c2 = round((-b1) * k / n), and gives\n * k1 = k - (c1*a1 + c2*a2) and k2 = -(c1*b1 + c2*b2). Instead, we use modular arithmetic, and\n * compute r2 = k2 mod n, and r1 = k1 mod n = (k - r2 * lambda) mod n, avoiding the need for\n * the constants a1 and a2.\n *\n * g1, g2 are precomputed constants used to replace division with a rounded multiplication\n * when decomposing the scalar for an endomorphism-based point multiplication.\n *\n * The possibility of using precomputed estimates is mentioned in \"Guide to Elliptic Curve\n * Cryptography\" (Hankerson, Menezes, Vanstone) in section 3.5.\n *\n * The derivation is described in the paper \"Efficient Software Implementation of Public-Key\n * Cryptography on Sensor Networks Using the MSP430X Microcontroller\" (Gouvea, Oliveira, Lopez),\n * Section 4.3 (here we use a somewhat higher-precision estimate):\n * d = a1*b2 - b1*a2\n * g1 = round(2^384 * b2/d)\n * g2 = round(2^384 * (-b1)/d)\n *\n * (Note that d is also equal to the curve order, n, here because [a1,b1] and [a2,b2]\n * can be found as outputs of the Extended Euclidean Algorithm on inputs n and lambda).\n *\n * The function below splits k into r1 and r2, such that\n * - r1 + lambda * r2 == k (mod n)\n * - either r1 < 2^128 or -r1 mod n < 2^128\n * - either r2 < 2^128 or -r2 mod n < 2^128\n *\n * See proof below.\n */\nstatic void secp256k1_scalar_split_lambda(secp256k1_scalar * SECP256K1_RESTRICT r1, secp256k1_scalar * SECP256K1_RESTRICT r2, const secp256k1_scalar * SECP256K1_RESTRICT k) {\n    secp256k1_scalar c1, c2;\n    static const secp256k1_scalar minus_b1 = SECP256K1_SCALAR_CONST(\n        0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,\n        0xE4437ED6UL, 0x010E8828UL, 0x6F547FA9UL, 0x0ABFE4C3UL\n    );\n    static const secp256k1_scalar minus_b2 = SECP256K1_SCALAR_CONST(\n        0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL,\n        0x8A280AC5UL, 0x0774346DUL, 0xD765CDA8UL, 0x3DB1562CUL\n    );\n    static const secp256k1_scalar g1 = SECP256K1_SCALAR_CONST(\n        0x3086D221UL, 0xA7D46BCDUL, 0xE86C90E4UL, 0x9284EB15UL,\n        0x3DAA8A14UL, 0x71E8CA7FUL, 0xE893209AUL, 0x45DBB031UL\n    );\n    static const secp256k1_scalar g2 = SECP256K1_SCALAR_CONST(\n        0xE4437ED6UL, 0x010E8828UL, 0x6F547FA9UL, 0x0ABFE4C4UL,\n        0x221208ACUL, 0x9DF506C6UL, 0x1571B4AEUL, 0x8AC47F71UL\n    );\n    VERIFY_CHECK(r1 != k);\n    VERIFY_CHECK(r2 != k);\n    VERIFY_CHECK(r1 != r2);\n    /* these _var calls are constant time since the shift amount is constant */\n    secp256k1_scalar_mul_shift_var(&c1, k, &g1, 384);\n    secp256k1_scalar_mul_shift_var(&c2, k, &g2, 384);\n    secp256k1_scalar_mul(&c1, &c1, &minus_b1);\n    secp256k1_scalar_mul(&c2, &c2, &minus_b2);\n    secp256k1_scalar_add(r2, &c1, &c2);\n    secp256k1_scalar_mul(r1, r2, &secp256k1_const_lambda);\n    secp256k1_scalar_negate(r1, r1);\n    secp256k1_scalar_add(r1, r1, k);\n\n#ifdef VERIFY\n    secp256k1_scalar_split_lambda_verify(r1, r2, k);\n#endif\n}\n\n#ifdef VERIFY\n/*\n * Proof for secp256k1_scalar_split_lambda's bounds.\n *\n * Let\n *  - epsilon1 = 2^256 * |g1/2^384 - b2/d|\n *  - epsilon2 = 2^256 * |g2/2^384 - (-b1)/d|\n *  - c1 = round(k*g1/2^384)\n *  - c2 = round(k*g2/2^384)\n *\n * Lemma 1: |c1 - k*b2/d| < 2^-1 + epsilon1\n *\n *    |c1 - k*b2/d|\n *  =\n *    |c1 - k*g1/2^384 + k*g1/2^384 - k*b2/d|\n * <=   {triangle inequality}\n *    |c1 - k*g1/2^384| + |k*g1/2^384 - k*b2/d|\n *  =\n *    |c1 - k*g1/2^384| + k*|g1/2^384 - b2/d|\n * <    {rounding in c1 and 0 <= k < 2^256}\n *    2^-1 + 2^256 * |g1/2^384 - b2/d|\n *  =   {definition of epsilon1}\n *    2^-1 + epsilon1\n *\n * Lemma 2: |c2 - k*(-b1)/d| < 2^-1 + epsilon2\n *\n *    |c2 - k*(-b1)/d|\n *  =\n *    |c2 - k*g2/2^384 + k*g2/2^384 - k*(-b1)/d|\n * <=   {triangle inequality}\n *    |c2 - k*g2/2^384| + |k*g2/2^384 - k*(-b1)/d|\n *  =\n *    |c2 - k*g2/2^384| + k*|g2/2^384 - (-b1)/d|\n * <    {rounding in c2 and 0 <= k < 2^256}\n *    2^-1 + 2^256 * |g2/2^384 - (-b1)/d|\n *  =   {definition of epsilon2}\n *    2^-1 + epsilon2\n *\n * Let\n *  - k1 = k - c1*a1 - c2*a2\n *  - k2 = - c1*b1 - c2*b2\n *\n * Lemma 3: |k1| < (a1 + a2 + 1)/2 < 2^128\n *\n *    |k1|\n *  =   {definition of k1}\n *    |k - c1*a1 - c2*a2|\n *  =   {(a1*b2 - b1*a2)/n = 1}\n *    |k*(a1*b2 - b1*a2)/n - c1*a1 - c2*a2|\n *  =\n *    |a1*(k*b2/n - c1) + a2*(k*(-b1)/n - c2)|\n * <=   {triangle inequality}\n *    a1*|k*b2/n - c1| + a2*|k*(-b1)/n - c2|\n * <    {Lemma 1 and Lemma 2}\n *    a1*(2^-1 + epslion1) + a2*(2^-1 + epsilon2)\n * <    {rounding up to an integer}\n *    (a1 + a2 + 1)/2\n * <    {rounding up to a power of 2}\n *    2^128\n *\n * Lemma 4: |k2| < (-b1 + b2)/2 + 1 < 2^128\n *\n *    |k2|\n *  =   {definition of k2}\n *    |- c1*a1 - c2*a2|\n *  =   {(b1*b2 - b1*b2)/n = 0}\n *    |k*(b1*b2 - b1*b2)/n - c1*b1 - c2*b2|\n *  =\n *    |b1*(k*b2/n - c1) + b2*(k*(-b1)/n - c2)|\n * <=   {triangle inequality}\n *    (-b1)*|k*b2/n - c1| + b2*|k*(-b1)/n - c2|\n * <    {Lemma 1 and Lemma 2}\n *    (-b1)*(2^-1 + epslion1) + b2*(2^-1 + epsilon2)\n * <    {rounding up to an integer}\n *    (-b1 + b2)/2 + 1\n * <    {rounding up to a power of 2}\n *    2^128\n *\n * Let\n *  - r2 = k2 mod n\n *  - r1 = k - r2*lambda mod n.\n *\n * Notice that r1 is defined such that r1 + r2 * lambda == k (mod n).\n *\n * Lemma 5: r1 == k1 mod n.\n *\n *    r1\n * ==   {definition of r1 and r2}\n *    k - k2*lambda\n * ==   {definition of k2}\n *    k - (- c1*b1 - c2*b2)*lambda\n * ==\n *    k + c1*b1*lambda + c2*b2*lambda\n * ==  {a1 + b1*lambda == 0 mod n and a2 + b2*lambda == 0 mod n}\n *    k - c1*a1 - c2*a2\n * ==  {definition of k1}\n *    k1\n *\n * From Lemma 3, Lemma 4, Lemma 5 and the definition of r2, we can conclude that\n *\n *  - either r1 < 2^128 or -r1 mod n < 2^128\n *  - either r2 < 2^128 or -r2 mod n < 2^128.\n *\n * Q.E.D.\n */\nstatic void secp256k1_scalar_split_lambda_verify(const secp256k1_scalar *r1, const secp256k1_scalar *r2, const secp256k1_scalar *k) {\n    secp256k1_scalar s;\n    unsigned char buf1[32];\n    unsigned char buf2[32];\n\n    /* (a1 + a2 + 1)/2 is 0xa2a8918ca85bafe22016d0b917e4dd77 */\n    static const unsigned char k1_bound[32] = {\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0xa2, 0xa8, 0x91, 0x8c, 0xa8, 0x5b, 0xaf, 0xe2, 0x20, 0x16, 0xd0, 0xb9, 0x17, 0xe4, 0xdd, 0x77\n    };\n\n    /* (-b1 + b2)/2 + 1 is 0x8a65287bd47179fb2be08846cea267ed */\n    static const unsigned char k2_bound[32] = {\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x8a, 0x65, 0x28, 0x7b, 0xd4, 0x71, 0x79, 0xfb, 0x2b, 0xe0, 0x88, 0x46, 0xce, 0xa2, 0x67, 0xed\n    };\n\n    secp256k1_scalar_mul(&s, &secp256k1_const_lambda, r2);\n    secp256k1_scalar_add(&s, &s, r1);\n    VERIFY_CHECK(secp256k1_scalar_eq(&s, k));\n\n    secp256k1_scalar_negate(&s, r1);\n    secp256k1_scalar_get_b32(buf1, r1);\n    secp256k1_scalar_get_b32(buf2, &s);\n    VERIFY_CHECK(secp256k1_memcmp_var(buf1, k1_bound, 32) < 0 || secp256k1_memcmp_var(buf2, k1_bound, 32) < 0);\n\n    secp256k1_scalar_negate(&s, r2);\n    secp256k1_scalar_get_b32(buf1, r2);\n    secp256k1_scalar_get_b32(buf2, &s);\n    VERIFY_CHECK(secp256k1_memcmp_var(buf1, k2_bound, 32) < 0 || secp256k1_memcmp_var(buf2, k2_bound, 32) < 0);\n}\n#endif /* VERIFY */\n\n#endif /* SECP256K1_SCALAR_IMPL_H */\n"
  },
  {
    "path": "C/secp256k1/schnorrsig.h",
    "content": "#ifndef SECP256K1_SCHNORRSIG_H\n#define SECP256K1_SCHNORRSIG_H\n\n#include \"secp256k1.h\"\n#include \"extrakeys.h\"\n\n/** This module implements a variant of Schnorr signatures compliant with\n *  Bitcoin Improvement Proposal 340 \"Schnorr Signatures for secp256k1\"\n *  (https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki).\n */\n\n/** Verify a Schnorr signature.\n *\n *  Returns: 1: correct signature\n *           0: incorrect signature\n *  In:    sig64: pointer to the 64-byte signature to verify.\n *           msg: the message being verified. Can only be NULL if msglen is 0.\n *        msglen: length of the message\n *        pubkey: pointer to an x-only public key to verify with (cannot be NULL)\n */\nstatic SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorrsig_verify(\n    const unsigned char *sig64,\n    const unsigned char *msg,\n    size_t msglen,\n    const secp256k1_xonly_pubkey *pubkey\n) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(4);\n\n#endif /* SCHNORRSIG_H */\n"
  },
  {
    "path": "C/secp256k1/schnorrsig_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2018-2020 Andrew Poelstra, Jonas Nick                 *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_SCHNORRSIG_IMPL_H\n#define SECP256K1_SCHNORRSIG_IMPL_H\n\n#include \"secp256k1.h\"\n#include \"schnorrsig.h\"\n#include \"../sha256.h\"\n\n/* Initializes SHA256 with fixed midstate. This midstate was computed by applying\n * SHA256 to SHA256(\"BIP0340/challenge\")||SHA256(\"BIP0340/challenge\"). */\nstatic sha256_context secp256k1_schnorrsig_sha256_tagged(uint32_t* output) {\n    output[0] = 0x9cecba11ul;\n    output[1] = 0x23925381ul;\n    output[2] = 0x11679112ul;\n    output[3] = 0xd1627e0ful;\n    output[4] = 0x97c87550ul;\n    output[5] = 0x003cc765ul;\n    output[6] = 0x90f61164ul;\n    output[7] = 0x33e9b66aul;\n    return (sha256_context){ .output = output, .counter = 64 };\n}\n\nstatic void secp256k1_schnorrsig_challenge(secp256k1_scalar* e, const unsigned char *r32, const unsigned char *msg, size_t msglen, const unsigned char *pubkey32)\n{\n    unsigned char buf[32];\n   sha256_midstate sha_buf;\n\n    /* tagged hash(r.x, pk.x, msg32) */\n    sha256_context sha = secp256k1_schnorrsig_sha256_tagged(sha_buf.s);\n    sha256_uchars(&sha, r32, 32);\n    sha256_uchars(&sha, pubkey32, 32);\n    sha256_uchars(&sha, msg, msglen);\n    sha256_finalize(&sha);\n    sha256_fromMidstate(buf, sha_buf.s);\n\n    /* Set scalar e to the challenge hash modulo the curve order as per\n     * BIP340. */\n    secp256k1_scalar_set_b32(e, buf, NULL);\n}\n\nstatic int secp256k1_schnorrsig_verify(const unsigned char *sig64, const unsigned char *msg, size_t msglen, const secp256k1_xonly_pubkey *pubkey) {\n    secp256k1_scalar s;\n    secp256k1_scalar e;\n    secp256k1_gej rj;\n    secp256k1_ge pk;\n    secp256k1_gej pkj;\n    secp256k1_fe rx;\n    secp256k1_ge r;\n    unsigned char buf[32];\n    int overflow;\n\n    ARG_CHECK(sig64 != NULL);\n    ARG_CHECK(msg != NULL || msglen == 0);\n    ARG_CHECK(pubkey != NULL);\n\n    if (!secp256k1_fe_set_b32(&rx, &sig64[0])) {\n        return 0;\n    }\n\n    secp256k1_scalar_set_b32(&s, &sig64[32], &overflow);\n    if (overflow) {\n        return 0;\n    }\n\n    if (!secp256k1_xonly_pubkey_load(&pk, pubkey)) {\n        return 0;\n    }\n\n    /* Compute e. */\n    secp256k1_fe_get_b32(buf, &pk.x);\n    secp256k1_schnorrsig_challenge(&e, &sig64[0], msg, msglen, buf);\n\n    /* Compute rj =  s*G + (-e)*pkj */\n    secp256k1_scalar_negate(&e, &e);\n    secp256k1_gej_set_ge(&pkj, &pk);\n    secp256k1_ecmult(&rj, &pkj, &e, &s);\n\n    secp256k1_ge_set_gej_var(&r, &rj);\n    if (secp256k1_ge_is_infinity(&r)) {\n        return 0;\n    }\n\n    secp256k1_fe_normalize_var(&r.y);\n    return !secp256k1_fe_is_odd(&r.y) &&\n           secp256k1_fe_equal_var(&rx, &r.x);\n}\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/secp256k1.h",
    "content": "#ifndef SECP256K1_H\n#define SECP256K1_H\n\n#include <stddef.h>\n\n/** Unless explicitly stated all pointer arguments must not be NULL.\n *\n * The following rules specify the order of arguments in API calls:\n *\n * 1. Context pointers go first, followed by output arguments, combined\n *    output/input arguments, and finally input-only arguments.\n * 2. Array lengths always immediately follow the argument whose length\n *    they describe, even if this violates rule 1.\n * 3. Within the OUT/OUTIN/IN groups, pointers to data that is typically generated\n *    later go first. This means: signatures, public nonces, secret nonces,\n *    messages, public keys, secret keys, tweaks.\n * 4. Arguments that are not data pointers go last, from more complex to less\n *    complex: function pointers, algorithm names, messages, void pointers,\n *    counts, flags, booleans.\n * 5. Opaque data pointers follow the function pointer they are to be passed to.\n */\n\n/** Opaque data structure that holds a parsed and valid public key.\n *\n *  The exact representation of data inside is implementation defined and not\n *  guaranteed to be portable between different platforms or versions. It is\n *  however guaranteed to be 64 bytes in size, and can be safely copied/moved.\n *  If you need to convert to a format suitable for storage or transmission,\n *  use secp256k1_ec_pubkey_serialize and secp256k1_ec_pubkey_parse. To\n *  compare keys, use secp256k1_ec_pubkey_cmp.\n */\ntypedef struct {\n    unsigned char data[64];\n} secp256k1_pubkey;\n\n# if !defined(SECP256K1_GNUC_PREREQ)\n#  if defined(__GNUC__)&&defined(__GNUC_MINOR__)\n#   define SECP256K1_GNUC_PREREQ(_maj,_min) \\\n ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))\n#  else\n#   define SECP256K1_GNUC_PREREQ(_maj,_min) 0\n#  endif\n# endif\n\n#define SECP256K1_INLINE inline\n\n/* Warning attributes\n * NONNULL is not used if SECP256K1_BUILD is set to avoid the compiler optimizing out\n * some paranoid null checks. */\n# if defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)\n#  define SECP256K1_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))\n# else\n#  define SECP256K1_WARN_UNUSED_RESULT\n# endif\n# if !defined(SECP256K1_BUILD) && defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)\n#  define SECP256K1_ARG_NONNULL(_x)  __attribute__ ((__nonnull__(_x)))\n# else\n#  define SECP256K1_ARG_NONNULL(_x)\n# endif\n\n#endif /* SECP256K1_H */\n"
  },
  {
    "path": "C/secp256k1/secp256k1_impl.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013-2015 Pieter Wuille                               *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_IMPL_H\n#define SECP256K1_IMPL_H\n\n#define SECP256K1_BUILD\n\n#include \"secp256k1.h\"\n\n#include \"assumptions.h\"\n#include \"util.h\"\n\n#include \"field_impl.h\"\n#include \"scalar_impl.h\"\n#include \"group_impl.h\"\n#include \"ecmult_impl.h\"\n#include \"eckey_impl.h\"\n#include \"int128_impl.h\"\n\n#ifdef SECP256K1_NO_BUILD\n# error \"secp256k1.h processed without SECP256K1_BUILD defined while building secp256k1.c\"\n#endif\n\n#define ARG_CHECK(cond) do { \\\n    if (EXPECT(!(cond), 0)) { \\\n        return 0; \\\n    } \\\n} while(0)\n\nstatic int secp256k1_pubkey_load(secp256k1_ge* ge, const secp256k1_pubkey* pubkey) {\n    if (sizeof(secp256k1_ge_storage) == 64) {\n        /* When the secp256k1_ge_storage type is exactly 64 byte, use its\n         * representation inside secp256k1_pubkey, as conversion is very fast.\n         * Note that secp256k1_pubkey_save must use the same representation. */\n        secp256k1_ge_storage s;\n        memcpy(&s, &pubkey->data[0], sizeof(s));\n        secp256k1_ge_from_storage(ge, &s);\n    } else {\n        /* Otherwise, fall back to 32-byte big endian for X and Y. */\n        secp256k1_fe x, y;\n        secp256k1_fe_set_b32(&x, pubkey->data);\n        secp256k1_fe_set_b32(&y, pubkey->data + 32);\n        secp256k1_ge_set_xy(ge, &x, &y);\n    }\n    ARG_CHECK(!secp256k1_fe_is_zero(&ge->x));\n    return 1;\n}\n\nstatic void secp256k1_pubkey_save(secp256k1_pubkey* pubkey, secp256k1_ge* ge) {\n    if (sizeof(secp256k1_ge_storage) == 64) {\n        secp256k1_ge_storage s;\n        secp256k1_ge_to_storage(&s, ge);\n        memcpy(&pubkey->data[0], &s, sizeof(s));\n    } else {\n        VERIFY_CHECK(!secp256k1_ge_is_infinity(ge));\n        secp256k1_fe_normalize_var(&ge->x);\n        secp256k1_fe_normalize_var(&ge->y);\n        secp256k1_fe_get_b32(pubkey->data, &ge->x);\n        secp256k1_fe_get_b32(pubkey->data + 32, &ge->y);\n    }\n}\n\nstatic int secp256k1_ec_pubkey_tweak_add_helper(secp256k1_ge *p, const unsigned char *tweak32) {\n    secp256k1_scalar term;\n    int overflow = 0;\n    secp256k1_scalar_set_b32(&term, tweak32, &overflow);\n    return !overflow && secp256k1_eckey_pubkey_tweak_add(p, &term);\n}\n\n#include \"extrakeys_impl.h\"\n#include \"schnorrsig_impl.h\"\n#include \"generator_impl.h\"\n\n#endif\n"
  },
  {
    "path": "C/secp256k1/util.h",
    "content": "/***********************************************************************\n * Copyright (c) 2013, 2014 Pieter Wuille                              *\n * Distributed under the MIT software license, see the accompanying    *\n * file COPYING or https://www.opensource.org/licenses/mit-license.php.*\n ***********************************************************************/\n\n#ifndef SECP256K1_UTIL_H\n#define SECP256K1_UTIL_H\n\n#include <stdlib.h>\n#include <stdint.h>\n#include <stdio.h>\n\n#ifdef DETERMINISTIC\n#define TEST_FAILURE(msg) do { \\\n    fprintf(stderr, \"%s\\n\", msg); \\\n    abort(); \\\n} while(0);\n#else\n#define TEST_FAILURE(msg) do { \\\n    fprintf(stderr, \"%s:%d: %s\\n\", __FILE__, __LINE__, msg); \\\n    abort(); \\\n} while(0)\n#endif\n\n#if SECP256K1_GNUC_PREREQ(3, 0)\n#define EXPECT(x,c) __builtin_expect((x),(c))\n#else\n#define EXPECT(x,c) (x)\n#endif\n\n#ifdef DETERMINISTIC\n#define CHECK(cond) do { \\\n    if (EXPECT(!(cond), 0)) { \\\n        TEST_FAILURE(\"test condition failed\"); \\\n    } \\\n} while(0)\n#else\n#define CHECK(cond) do { \\\n    if (EXPECT(!(cond), 0)) { \\\n        TEST_FAILURE(\"test condition failed: \" #cond); \\\n    } \\\n} while(0)\n#endif\n\n/* Like assert(), but when VERIFY is defined, and side-effect safe. */\n#if defined(COVERAGE)\n#define VERIFY_CHECK(check)\n#define VERIFY_SETUP(stmt)\n#elif defined(VERIFY)\n#define VERIFY_CHECK CHECK\n#define VERIFY_SETUP(stmt) do { stmt; } while(0)\n#else\n#define VERIFY_CHECK(cond) do { (void)(cond); } while(0)\n#define VERIFY_SETUP(stmt)\n#endif\n\n/* Macro for restrict, when available and not in a VERIFY build. */\n#if defined(SECP256K1_BUILD) && defined(VERIFY)\n# define SECP256K1_RESTRICT\n#else\n# define SECP256K1_RESTRICT restrict\n#endif\n\n#if defined(__GNUC__)\n# define SECP256K1_GNUC_EXT __extension__\n#else\n# define SECP256K1_GNUC_EXT\n#endif\n\n/** Semantics like memcmp. Variable-time.\n *\n * We use this to avoid possible compiler bugs with memcmp, e.g.\n * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95189\n */\nstatic SECP256K1_INLINE int secp256k1_memcmp_var(const void *s1, const void *s2, size_t n) {\n    const unsigned char *p1 = s1, *p2 = s2;\n    size_t i;\n\n    for (i = 0; i < n; i++) {\n        int diff = p1[i] - p2[i];\n        if (diff != 0) {\n            return diff;\n        }\n    }\n    return 0;\n}\n\n#if defined(USE_FORCE_WIDEMUL_INT128_STRUCT)\n/* If USE_FORCE_WIDEMUL_INT128_STRUCT is set, use int128_struct. */\n# define SECP256K1_WIDEMUL_INT128 1\n# define SECP256K1_INT128_STRUCT 1\n#elif defined(USE_FORCE_WIDEMUL_INT128)\n/* If USE_FORCE_WIDEMUL_INT128 is set, use int128. */\n# define SECP256K1_WIDEMUL_INT128 1\n# define SECP256K1_INT128_NATIVE 1\n#elif defined(USE_FORCE_WIDEMUL_INT64)\n/* If USE_FORCE_WIDEMUL_INT64 is set, use int64. */\n# error WIDEMUL_INT64 not supported in Simplicity.\n#elif defined(UINT128_MAX) || defined(__SIZEOF_INT128__)\n/* If a native 128-bit integer type exists, use int128. */\n# define SECP256K1_WIDEMUL_INT128 1\n# define SECP256K1_INT128_NATIVE 1\n#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64))\n/* On 64-bit MSVC targets (x86_64 and arm64), use int128_struct\n * (which has special logic to implement using intrinsics on those systems). */\n# define SECP256K1_WIDEMUL_INT128 1\n# define SECP256K1_INT128_STRUCT 1\n#elif SIZE_MAX > 0xffffffff\n/* Systems with 64-bit pointers (and thus registers) very likely benefit from\n * using 64-bit based arithmetic (even if we need to fall back to 32x32->64 based\n * multiplication logic). */\n# define SECP256K1_WIDEMUL_INT128 1\n# define SECP256K1_INT128_STRUCT 1\n#else\n/* Lastly, fall back to int128 structure based arithmetic. */\n# define SECP256K1_WIDEMUL_INT128 1\n# define SECP256K1_INT128_STRUCT 1\n/* Even though these 3 last branches all have the same body, we keep it this way so that it is easy to compare Simplicity's libsecp256k1 with the original libsepc256k1. */\n#endif\n\n#ifndef __has_builtin\n#define __has_builtin(x) 0\n#endif\n\n/* Determine the number of trailing zero bits in a (non-zero) 64-bit x.\n * This function is only intended to be used as fallback for\n * secp256k1_ctz64_var, but permits it to be tested separately. */\nstatic SECP256K1_INLINE int secp256k1_ctz64_var_debruijn(uint64_t x) {\n    static const uint8_t debruijn[64] = {\n        0, 1, 2, 53, 3, 7, 54, 27, 4, 38, 41, 8, 34, 55, 48, 28,\n        62, 5, 39, 46, 44, 42, 22, 9, 24, 35, 59, 56, 49, 18, 29, 11,\n        63, 52, 6, 26, 37, 40, 33, 47, 61, 45, 43, 21, 23, 58, 17, 10,\n        51, 25, 36, 32, 60, 20, 57, 16, 50, 31, 19, 15, 30, 14, 13, 12\n    };\n    return debruijn[(uint64_t)((x & -x) * 0x022FDD63CC95386DU) >> 58];\n}\n\n/* Determine the number of trailing zero bits in a (non-zero) 64-bit x. */\nstatic SECP256K1_INLINE int secp256k1_ctz64_var(uint64_t x) {\n    VERIFY_CHECK(x != 0);\n#if (__has_builtin(__builtin_ctzl) || SECP256K1_GNUC_PREREQ(3,4))\n    /* If the unsigned long type is sufficient to represent the largest uint64_t, consider __builtin_ctzl. */\n    if (((unsigned long)UINT64_MAX) == UINT64_MAX) {\n        return __builtin_ctzl((unsigned long)x);\n    }\n#endif\n#if (__has_builtin(__builtin_ctzll) || SECP256K1_GNUC_PREREQ(3,4))\n    /* Otherwise consider __builtin_ctzll (the unsigned long long type is always at least 64 bits). */\n    return __builtin_ctzll(x);\n#else\n    /* If no suitable CTZ builtin is available, use a (variable time) software emulation. */\n    return secp256k1_ctz64_var_debruijn(x);\n#endif\n}\n\n#endif /* SECP256K1_UTIL_H */\n"
  },
  {
    "path": "C/sha256.c",
    "content": "/* Parts translated from Bitcoin Core's C++ project:\n * src/crypto/sha256.cpp commit eb7daf4d600eeb631427c018a984a77a34aca66e\n *\n * Copyright (c) 2014-2018 The Bitcoin Core developers\n * Distributed under the MIT software license, see the accompanying\n * file COPYING or http://www.opensource.org/licenses/mit-license.php.\n */\n#include \"sha256.h\"\n\n#include <limits.h>\n#include \"simplicity_assert.h\"\n\n/* Multiplying a uint32_t by 1U promotes a value's type to the wider of unsigned int and uint32_t,\n * avoiding any possible issues with signed integer promotions causing havoc with unsigned modular arithmetic.\n */\nstatic inline uint32_t Ch(uint32_t x, uint32_t y, uint32_t z) { return z ^ (x & (y ^ z)); }\nstatic inline uint32_t Maj(uint32_t x, uint32_t y, uint32_t z) { return (x & y) | (z & (x | y)); }\nstatic inline uint32_t Sigma0(uint32_t x) { return (x >> 2 | 1U * x << 30) ^ (x >> 13 | 1U * x << 19) ^ (x >> 22 | 1U * x << 10); }\nstatic inline uint32_t Sigma1(uint32_t x) { return (x >> 6 | 1U * x << 26) ^ (x >> 11 | 1U * x << 21) ^ (x >> 25 | 1U * x << 7); }\nstatic inline uint32_t sigma0(uint32_t x) { return (x >> 7 | 1U * x << 25) ^ (x >> 18 | 1U * x << 14) ^ (x >> 3); }\nstatic inline uint32_t sigma1(uint32_t x) { return (x >> 17 | 1U * x << 15) ^ (x >> 19 | 1U * x << 13) ^ (x >> 10); }\n\n/* One round of SHA-256.\n *\n * Precondition: NULL != d\n *               NULL != h\n *               d != h\n */\nstatic inline void Round(uint32_t a, uint32_t b, uint32_t c, uint32_t* d, uint32_t e, uint32_t f, uint32_t g, uint32_t* h, uint32_t k) {\n    uint32_t t1 = 1U * *h + Sigma1(e) + Ch(e, f, g) + k;\n    uint32_t t2 = 1U * Sigma0(a) + Maj(a, b, c);\n    *d = 1U * *d + t1;\n    *h = 1U * t1 + t2;\n}\n\n/* Given a 256-bit 's' and a 512-bit 'chunk', then 's' becomes the value of the SHA-256 compression function (\"added\" to the original 's' value).\n *\n * Precondition: uint32_t s[8];\n *               uint32_t chunk[16]\n */\nstatic void sha256_compression_portable(uint32_t* s, const uint32_t* chunk) {\n    uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7];\n    uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;\n\n    Round(a, b, c, &d, e, f, g, &h, 0x428a2f98U + (w0 = chunk[0]));\n    Round(h, a, b, &c, d, e, f, &g, 0x71374491U + (w1 = chunk[1]));\n    Round(g, h, a, &b, c, d, e, &f, 0xb5c0fbcfU + (w2 = chunk[2]));\n    Round(f, g, h, &a, b, c, d, &e, 0xe9b5dba5U + (w3 = chunk[3]));\n    Round(e, f, g, &h, a, b, c, &d, 0x3956c25bU + (w4 = chunk[4]));\n    Round(d, e, f, &g, h, a, b, &c, 0x59f111f1U + (w5 = chunk[5]));\n    Round(c, d, e, &f, g, h, a, &b, 0x923f82a4U + (w6 = chunk[6]));\n    Round(b, c, d, &e, f, g, h, &a, 0xab1c5ed5U + (w7 = chunk[7]));\n    Round(a, b, c, &d, e, f, g, &h, 0xd807aa98U + (w8 = chunk[8]));\n    Round(h, a, b, &c, d, e, f, &g, 0x12835b01U + (w9 = chunk[9]));\n    Round(g, h, a, &b, c, d, e, &f, 0x243185beU + (w10 = chunk[10]));\n    Round(f, g, h, &a, b, c, d, &e, 0x550c7dc3U + (w11 = chunk[11]));\n    Round(e, f, g, &h, a, b, c, &d, 0x72be5d74U + (w12 = chunk[12]));\n    Round(d, e, f, &g, h, a, b, &c, 0x80deb1feU + (w13 = chunk[13]));\n    Round(c, d, e, &f, g, h, a, &b, 0x9bdc06a7U + (w14 = chunk[14]));\n    Round(b, c, d, &e, f, g, h, &a, 0xc19bf174U + (w15 = chunk[15]));\n\n    Round(a, b, c, &d, e, f, g, &h, 0xe49b69c1U + (w0 = 1U * w0 + sigma1(w14) + w9 + sigma0(w1)));\n    Round(h, a, b, &c, d, e, f, &g, 0xefbe4786U + (w1 = 1U * w1 + sigma1(w15) + w10 + sigma0(w2)));\n    Round(g, h, a, &b, c, d, e, &f, 0x0fc19dc6U + (w2 = 1U * w2 + sigma1(w0) + w11 + sigma0(w3)));\n    Round(f, g, h, &a, b, c, d, &e, 0x240ca1ccU + (w3 = 1U * w3 + sigma1(w1) + w12 + sigma0(w4)));\n    Round(e, f, g, &h, a, b, c, &d, 0x2de92c6fU + (w4 = 1U * w4 + sigma1(w2) + w13 + sigma0(w5)));\n    Round(d, e, f, &g, h, a, b, &c, 0x4a7484aaU + (w5 = 1U * w5 + sigma1(w3) + w14 + sigma0(w6)));\n    Round(c, d, e, &f, g, h, a, &b, 0x5cb0a9dcU + (w6 = 1U * w6 + sigma1(w4) + w15 + sigma0(w7)));\n    Round(b, c, d, &e, f, g, h, &a, 0x76f988daU + (w7 = 1U * w7 + sigma1(w5) + w0 + sigma0(w8)));\n    Round(a, b, c, &d, e, f, g, &h, 0x983e5152U + (w8 = 1U * w8 + sigma1(w6) + w1 + sigma0(w9)));\n    Round(h, a, b, &c, d, e, f, &g, 0xa831c66dU + (w9 = 1U * w9 + sigma1(w7) + w2 + sigma0(w10)));\n    Round(g, h, a, &b, c, d, e, &f, 0xb00327c8U + (w10 = 1U * w10 + sigma1(w8) + w3 + sigma0(w11)));\n    Round(f, g, h, &a, b, c, d, &e, 0xbf597fc7U + (w11 = 1U * w11 + sigma1(w9) + w4 + sigma0(w12)));\n    Round(e, f, g, &h, a, b, c, &d, 0xc6e00bf3U + (w12 = 1U * w12 + sigma1(w10) + w5 + sigma0(w13)));\n    Round(d, e, f, &g, h, a, b, &c, 0xd5a79147U + (w13 = 1U * w13 + sigma1(w11) + w6 + sigma0(w14)));\n    Round(c, d, e, &f, g, h, a, &b, 0x06ca6351U + (w14 = 1U * w14 + sigma1(w12) + w7 + sigma0(w15)));\n    Round(b, c, d, &e, f, g, h, &a, 0x14292967U + (w15 = 1U * w15 + sigma1(w13) + w8 + sigma0(w0)));\n\n    Round(a, b, c, &d, e, f, g, &h, 0x27b70a85U + (w0 = 1U * w0 + sigma1(w14) + w9 + sigma0(w1)));\n    Round(h, a, b, &c, d, e, f, &g, 0x2e1b2138U + (w1 = 1U * w1 + sigma1(w15) + w10 + sigma0(w2)));\n    Round(g, h, a, &b, c, d, e, &f, 0x4d2c6dfcU + (w2 = 1U * w2 + sigma1(w0) + w11 + sigma0(w3)));\n    Round(f, g, h, &a, b, c, d, &e, 0x53380d13U + (w3 = 1U * w3 + sigma1(w1) + w12 + sigma0(w4)));\n    Round(e, f, g, &h, a, b, c, &d, 0x650a7354U + (w4 = 1U * w4 + sigma1(w2) + w13 + sigma0(w5)));\n    Round(d, e, f, &g, h, a, b, &c, 0x766a0abbU + (w5 = 1U * w5 + sigma1(w3) + w14 + sigma0(w6)));\n    Round(c, d, e, &f, g, h, a, &b, 0x81c2c92eU + (w6 = 1U * w6 + sigma1(w4) + w15 + sigma0(w7)));\n    Round(b, c, d, &e, f, g, h, &a, 0x92722c85U + (w7 = 1U * w7 + sigma1(w5) + w0 + sigma0(w8)));\n    Round(a, b, c, &d, e, f, g, &h, 0xa2bfe8a1U + (w8 = 1U * w8 + sigma1(w6) + w1 + sigma0(w9)));\n    Round(h, a, b, &c, d, e, f, &g, 0xa81a664bU + (w9 = 1U * w9 + sigma1(w7) + w2 + sigma0(w10)));\n    Round(g, h, a, &b, c, d, e, &f, 0xc24b8b70U + (w10 = 1U * w10 + sigma1(w8) + w3 + sigma0(w11)));\n    Round(f, g, h, &a, b, c, d, &e, 0xc76c51a3U + (w11 = 1U * w11 + sigma1(w9) + w4 + sigma0(w12)));\n    Round(e, f, g, &h, a, b, c, &d, 0xd192e819U + (w12 = 1U * w12 + sigma1(w10) + w5 + sigma0(w13)));\n    Round(d, e, f, &g, h, a, b, &c, 0xd6990624U + (w13 = 1U * w13 + sigma1(w11) + w6 + sigma0(w14)));\n    Round(c, d, e, &f, g, h, a, &b, 0xf40e3585U + (w14 = 1U * w14 + sigma1(w12) + w7 + sigma0(w15)));\n    Round(b, c, d, &e, f, g, h, &a, 0x106aa070U + (w15 = 1U * w15 + sigma1(w13) + w8 + sigma0(w0)));\n\n    Round(a, b, c, &d, e, f, g, &h, 0x19a4c116U + (w0 = 1U * w0 + sigma1(w14) + w9 + sigma0(w1)));\n    Round(h, a, b, &c, d, e, f, &g, 0x1e376c08U + (w1 = 1U * w1 + sigma1(w15) + w10 + sigma0(w2)));\n    Round(g, h, a, &b, c, d, e, &f, 0x2748774cU + (w2 = 1U * w2 + sigma1(w0) + w11 + sigma0(w3)));\n    Round(f, g, h, &a, b, c, d, &e, 0x34b0bcb5U + (w3 = 1U * w3 + sigma1(w1) + w12 + sigma0(w4)));\n    Round(e, f, g, &h, a, b, c, &d, 0x391c0cb3U + (w4 = 1U * w4 + sigma1(w2) + w13 + sigma0(w5)));\n    Round(d, e, f, &g, h, a, b, &c, 0x4ed8aa4aU + (w5 = 1U * w5 + sigma1(w3) + w14 + sigma0(w6)));\n    Round(c, d, e, &f, g, h, a, &b, 0x5b9cca4fU + (w6 = 1U * w6 + sigma1(w4) + w15 + sigma0(w7)));\n    Round(b, c, d, &e, f, g, h, &a, 0x682e6ff3U + (w7 = 1U * w7 + sigma1(w5) + w0 + sigma0(w8)));\n    Round(a, b, c, &d, e, f, g, &h, 0x748f82eeU + (w8 = 1U * w8 + sigma1(w6) + w1 + sigma0(w9)));\n    Round(h, a, b, &c, d, e, f, &g, 0x78a5636fU + (w9 = 1U * w9 + sigma1(w7) + w2 + sigma0(w10)));\n    Round(g, h, a, &b, c, d, e, &f, 0x84c87814U + (w10 = 1U * w10 + sigma1(w8) + w3 + sigma0(w11)));\n    Round(f, g, h, &a, b, c, d, &e, 0x8cc70208U + (w11 = 1U * w11 + sigma1(w9) + w4 + sigma0(w12)));\n    Round(e, f, g, &h, a, b, c, &d, 0x90befffaU + (w12 = 1U * w12 + sigma1(w10) + w5 + sigma0(w13)));\n    Round(d, e, f, &g, h, a, b, &c, 0xa4506cebU + (w13 = 1U * w13 + sigma1(w11) + w6 + sigma0(w14)));\n    Round(c, d, e, &f, g, h, a, &b, 0xbef9a3f7U + (1U * w14 + sigma1(w12) + w7 + sigma0(w15)));\n    Round(b, c, d, &e, f, g, h, &a, 0xc67178f2U + (1U * w15 + sigma1(w13) + w8 + sigma0(w0)));\n\n    s[0] = 1U * s[0] + a;\n    s[1] = 1U * s[1] + b;\n    s[2] = 1U * s[2] + c;\n    s[3] = 1U * s[3] + d;\n    s[4] = 1U * s[4] + e;\n    s[5] = 1U * s[5] + f;\n    s[6] = 1U * s[6] + g;\n    s[7] = 1U * s[7] + h;\n}\n\nvoid (*simplicity_sha256_compression)(uint32_t* midstate, const uint32_t* block) = sha256_compression_portable;\n\n/* For information purposes only.\n * Returns true if the sha256_compression implementation has been optimized for the CPU.\n * Otherwise returns false.\n */\nbool simplicity_sha256_compression_is_optimized(void) {\n  return sha256_compression_portable != simplicity_sha256_compression;\n};\n\n/* Given a SHA-256 midstate, 'h', of 'len / 512' blocks, and\n * a 'block' with 'len % 512' bits set and with the remaining bits set to 0,\n * finalize the SHA-256 computation by adding SHA-256 padding and set 'h' to the resulting SHA-256 hash.\n *\n * Precondition: uint32_t h[8];\n *               uint32_t block[16];\n */\nstatic void sha256_end(uint32_t* h, uint32_t* block, const uint_fast64_t len) {\n  block[len / 32 % 16] |= (uint32_t)1 << (31 - len % 32);\n  if (448 <= len % 512) {\n    simplicity_sha256_compression(h, block);\n    memset(block, 0, sizeof(uint32_t[14]));\n  }\n  block[14] = (uint32_t)(len >> 32);\n  block[15] = (uint32_t)len;\n  simplicity_sha256_compression(h, block);\n}\n\n/* Compute the SHA-256 hash, 'h', of the bitstring represented by 's'.\n *\n * Precondition: uint32_t h[8];\n *               '*s' is a valid bitstring;\n *               's->len < 2^64;\n */\nvoid simplicity_sha256_bitstring(uint32_t* h, const bitstring* s) {\n  /* This static assert should never fail if uint32_t exists.\n   * But for more certainty, we note that the correctness of this implementation depends on CHAR_BIT being no more than 32.\n   */\n  static_assert(CHAR_BIT <= 32, \"CHAR_BIT has to be less than 32 for uint32_t to even exist.\");\n\n  uint32_t block[16] = { 0 };\n  size_t count = 0;\n  sha256_iv(h);\n  if (s->len) {\n    block[0] = s->arr[s->offset / CHAR_BIT];\n    if (s->len < CHAR_BIT - s->offset % CHAR_BIT) {\n      /* s->len is so short that we don't even use a whole char.\n       * Zero out the low bits.\n       */\n      block[0] = block[0] >> (CHAR_BIT - s->offset % CHAR_BIT - s->len)\n                          << (CHAR_BIT - s->offset % CHAR_BIT - s->len);\n      count = s->len;\n    } else {\n      count = CHAR_BIT - s->offset % CHAR_BIT;\n    }\n    block[0] = 1U * block[0] << (32 - CHAR_BIT + s->offset % CHAR_BIT);\n\n    while (count < s->len) {\n      unsigned char ch = s->arr[(s->offset + count)/CHAR_BIT];\n      size_t delta = CHAR_BIT;\n      if (s->len - count < CHAR_BIT) {\n        delta = s->len - count;\n        /* Zero out any extra low bits that 'ch' may have. */\n        ch = (unsigned char)(ch >> (CHAR_BIT - delta) << (CHAR_BIT - delta));\n      }\n\n      if (count / 32 != (count + CHAR_BIT) / 32) {\n        /* The next character from s->arr straddles (or almost straddles) the boundary of two elements of the block array. */\n        block[count / 32 % 16] |= (uint32_t)((uint_fast32_t)ch >> (count + CHAR_BIT) % 32);\n        if (count / 512 != (count + delta) / 512) {\n          simplicity_sha256_compression(h, block);\n          memset(block, 0, sizeof(uint32_t[16]));\n        }\n      }\n      if ((count + CHAR_BIT) % 32) {\n        block[(count + CHAR_BIT) / 32 % 16] |= (uint32_t)(1U * (uint_fast32_t)ch << (32 - (count + CHAR_BIT) % 32));\n      }\n      count += delta;\n    }\n  }\n  simplicity_assert(count == s->len);\n  sha256_end(h, block, s->len);\n}\n\n#ifndef NO_SHA_NI_FLAG\n#include \"sha256_x86.inc\"\n#endif\n"
  },
  {
    "path": "C/sha256.h",
    "content": "#ifndef SIMPLICITY_SHA256_H\n#define SIMPLICITY_SHA256_H\n\n#include <stdbool.h>\n#include <stdint.h>\n#include <string.h>\n#include \"bitstring.h\"\n\n/* A struct holding the 256-bit array of a SHA-256 hash or midstate.\n */\ntypedef struct sha256_midstate {\n  uint32_t s[8];\n} sha256_midstate;\n\n/* Packs (the 8 least significant bits of) 8 'unsigned char's into a 'uint_fast64_t' in \"big endian\" order.\n *\n * Precondition: unsigned char b[8]\n */\nstatic inline uint_fast64_t ReadBE64(const unsigned char* b) {\n  return (uint_fast64_t)(b[0] & 0xff) << 56\n       | (uint_fast64_t)(b[1] & 0xff) << 48\n       | (uint_fast64_t)(b[2] & 0xff) << 40\n       | (uint_fast64_t)(b[3] & 0xff) << 32\n       | (uint_fast64_t)(b[4] & 0xff) << 24\n       | (uint_fast64_t)(b[5] & 0xff) << 16\n       | (uint_fast64_t)(b[6] & 0xff) << 8\n       | (uint_fast64_t)(b[7] & 0xff);\n}\n\n/* Packs (the 8 least significant bits of) 4 'unsigned char's into a 'uint32_t' in \"big endian\" order.\n *\n * Precondition: unsigned char b[4]\n */\nstatic inline uint32_t ReadBE32(const unsigned char* b) {\n  return (uint32_t)(b[0]) << 24\n       | (uint32_t)(b[1] & 0xff) << 16\n       | (uint32_t)(b[2] & 0xff) << 8\n       | (uint32_t)(b[3] & 0xff);\n}\n\n/* Unpacks the 8 least significant bytes from a 'uint_fast64_t' into an 'unsigned char' array in \"big endian\" order.\n *\n * Precondition: unsigned char ptr[8]\n */\nstatic inline void WriteBE64(unsigned char* ptr, uint_fast64_t x) {\n  ptr[0] = (unsigned char)(0xff & x >> 56);\n  ptr[1] = 0xff & x >> 48;\n  ptr[2] = 0xff & x >> 40;\n  ptr[3] = 0xff & x >> 32;\n  ptr[4] = 0xff & x >> 24;\n  ptr[5] = 0xff & x >> 16;\n  ptr[6] = 0xff & x >> 8;\n  ptr[7] = 0xff & x;\n}\n\n/* Unpacks 4 bytes from a 'uint_fast32_t' into an 'unsigned char' array in \"big endian\" order.\n *\n * Precondition: unsigned char ptr[4]\n */\nstatic inline void WriteBE32(unsigned char* ptr, uint_fast32_t x) {\n  ptr[0] = (unsigned char)(x >> 24);\n  ptr[1] = (x >> 16) & 0xff;\n  ptr[2] = (x >> 8) & 0xff;\n  ptr[3] = x & 0xff;\n}\n\n/* Unpacks 4 bytes from a 'uint_fast32_t' into an 'unsigned char' array in \"little endian\" order.\n *\n * Precondition: unsigned char ptr[4]\n */\nstatic inline void WriteLE32(unsigned char* ptr, uint_fast32_t x) {\n  ptr[3] = (unsigned char)(0xff & x >> 24);\n  ptr[2] = 0xff & x >> 16;\n  ptr[1] = 0xff & x >> 8;\n  ptr[0] = 0xff & x;\n}\n\n/* Converts a given 'midstate' value to a 'hash' value as 32 bytes stored in an unsigned char array.\n *\n * Precondition: unsigned char hash[32];\n *               uint32_t midstate[8]\n */\nstatic inline void sha256_fromMidstate(unsigned char* hash, const uint32_t* midstate) {\n  WriteBE32(hash + 0*4, midstate[0]);\n  WriteBE32(hash + 1*4, midstate[1]);\n  WriteBE32(hash + 2*4, midstate[2]);\n  WriteBE32(hash + 3*4, midstate[3]);\n  WriteBE32(hash + 4*4, midstate[4]);\n  WriteBE32(hash + 5*4, midstate[5]);\n  WriteBE32(hash + 6*4, midstate[6]);\n  WriteBE32(hash + 7*4, midstate[7]);\n}\n\n/* Converts a given 'hash' value as 32 bytes stored in an unsigned char array to a 'midstate' value.\n *\n * Precondition: uint32_t midstate[8];\n *               unsigned char hash[32]\n */\nstatic inline void sha256_toMidstate(uint32_t* midstate, const unsigned char* hash) {\n  midstate[0] = ReadBE32(hash + 0*4);\n  midstate[1] = ReadBE32(hash + 1*4);\n  midstate[2] = ReadBE32(hash + 2*4);\n  midstate[3] = ReadBE32(hash + 3*4);\n  midstate[4] = ReadBE32(hash + 4*4);\n  midstate[5] = ReadBE32(hash + 5*4);\n  midstate[6] = ReadBE32(hash + 6*4);\n  midstate[7] = ReadBE32(hash + 7*4);\n}\n\n/* Sets the value of 'iv' to SHA-256's initial value.\n *\n * Precondition: uint32_t iv[8]\n */\nstatic inline void sha256_iv(uint32_t* iv) {\n    iv[0] = 0x6a09e667ul;\n    iv[1] = 0xbb67ae85ul;\n    iv[2] = 0x3c6ef372ul;\n    iv[3] = 0xa54ff53aul;\n    iv[4] = 0x510e527ful;\n    iv[5] = 0x9b05688cul;\n    iv[6] = 0x1f83d9abul;\n    iv[7] = 0x5be0cd19ul;\n}\n\n/* Given a 256-bit 'midstate' and a 512-bit 'block', then 'midstate' becomes the value of the SHA-256 compression function (\"added\" to the original 'midstate' value).\n *\n * Precondition: uint32_t midstate[8];\n *               uint32_t block[16]\n */\nextern void (*simplicity_sha256_compression)(uint32_t* midstate, const uint32_t* block);\n\n/* For information purposes only.\n * Returns true if the sha256_compression implementation has been optimized for the CPU.\n * Otherwise returns false.\n */\nbool simplicity_sha256_compression_is_optimized(void);\n\n/* Compute the SHA-256 hash, 'h', of the bitstring represented by 's'.\n *\n * Precondition: uint32_t h[8];\n *               '*s' is a valid bitstring;\n */\nvoid simplicity_sha256_bitstring(uint32_t* h, const bitstring* s);\n\n/* Given a 256-bit 's' and a 512-bit 'chunk', then 's' becomes the value of the SHA-256 compression function (\"added\" to the original 's' value).\n *\n * Precondition: uint32_t s[8];\n *               unsigned char chunk[64]\n */\nstatic void sha256_compression_uchar(uint32_t* s, const unsigned char* chunk) {\n  simplicity_sha256_compression(s, (const uint32_t[16])\n    { ReadBE32(chunk + 4*0)\n    , ReadBE32(chunk + 4*1)\n    , ReadBE32(chunk + 4*2)\n    , ReadBE32(chunk + 4*3)\n    , ReadBE32(chunk + 4*4)\n    , ReadBE32(chunk + 4*5)\n    , ReadBE32(chunk + 4*6)\n    , ReadBE32(chunk + 4*7)\n    , ReadBE32(chunk + 4*8)\n    , ReadBE32(chunk + 4*9)\n    , ReadBE32(chunk + 4*10)\n    , ReadBE32(chunk + 4*11)\n    , ReadBE32(chunk + 4*12)\n    , ReadBE32(chunk + 4*13)\n    , ReadBE32(chunk + 4*14)\n    , ReadBE32(chunk + 4*15)\n    });\n}\n\n/* This next section implements a (typical) byte-oriented interface to SHA-256 that consumes the 8 least significant bits of\n * an 'unsigned char' in big endian order.\n */\n\n/* This is the context structure for an ongoing SHA-256 evaluation.\n * It has a pointer to the output buffer, which is modified during evaluation to also hold the current SHA-256 midstate.\n * It has a counter to track the number of bytes consumed so far.\n * It has a block of bytes that are queued up that have been consumed but not digested.\n *\n * Invariant: uint32_t output[8]\n */\ntypedef struct sha256_context {\n  uint32_t* const output;\n  uint_fast64_t counter;\n  unsigned char block[64];\n  bool overflow;\n} sha256_context;\n\n/* SHA-256 is limited to strictly less than 2^64 bits or 2^56 bytes of data.\n * This limit cannot be reached in practice under proper use of the SHA-256 interface.\n * However some jets in simplicity load and store this context and it is easy to synthesize contexts with absurdly large counter values.\n */\nstatic const uint_fast64_t sha256_max_counter = 0x2000000000000000;\n\n/* Initialize a sha256_context given a buffer in which the final output will be written to.\n * Note that the 'output' buffer may be updated during the computation to hold a SHA-256 midstate.\n *\n * Precondition: unit32_t output[8]\n */\nstatic inline sha256_context sha256_init(uint32_t* output) {\n  sha256_iv(output);\n  return (sha256_context){ .output = output };\n}\n\n/* Initialize a sha256_context given a buffer in which the final output will be written to,\n * and the midstate of a tagged hash.\n *\n * Note that the 'output' buffer may be updated during the computation to hold a SHA-256 midstate.\n * Precondition: unit32_t output[8]\n *               unit32_t iv[8]\n */\nstatic inline sha256_context sha256_tagged_init(uint32_t* output, const sha256_midstate* iv) {\n  memcpy(output, iv->s, sizeof(uint32_t[8]));\n  return (sha256_context){ .output = output, .counter = 64 };\n}\n\n/* Add an array of bytes to be consumed by an ongoing SHA-256 evaluation.\n * Returns false if the counter overflows.\n *\n * Precondition: NULL != ctx;\n *               if 0 < len then unsigned char arr[len];\n */\nstatic inline bool sha256_uchars(sha256_context* ctx, const unsigned char* arr, size_t len) {\n  size_t delta = 64 - ctx->counter % 64;\n  unsigned char *block = ctx->block + ctx->counter % 64;\n  ctx->overflow = ctx->overflow || sha256_max_counter - ctx->counter <= len;\n  ctx->counter += len;\n\n  while (delta <= len) {\n    memcpy(block, arr, delta);\n    arr += delta;\n    len -= delta;\n    sha256_compression_uchar(ctx->output, ctx->block);\n    block = ctx->block;\n    delta = 64;\n  }\n\n  if (len) memcpy(block, arr, len);\n  return !ctx->overflow;\n}\n\n/* Add one byte to be consumed by an ongoing SHA-256 evaluation.\n *\n * Returns false if the counter overflows.\n *\n * Precondition: NULL != ctx;\n */\nstatic inline bool sha256_uchar(sha256_context* ctx, unsigned char x) {\n  return sha256_uchars(ctx, &x, 1);\n}\n\n/* Add a 64-bit word to be consumed in big endian order by an ongoing SHA-256 evaluation.\n * For greater certainty, only the least 64 bits of 'x' are consumed.\n *\n * Returns false if the counter overflows.\n *\n * Precondition: NULL != ctx;\n */\nstatic inline bool sha256_u64be(sha256_context* ctx, uint_fast64_t x) {\n  unsigned char buf[8];\n  WriteBE64(buf, x);\n  return sha256_uchars(ctx, buf, sizeof(buf));\n}\n\n/* Add a 32-bit word to be consumed in little endian byte-order by an ongoing SHA-256 evaluation.\n * For greater certainty, only the least 32 bits of 'x' are consumed.\n * Furthermore the bits within each byte are consumed in big endian order.\n *\n * Returns false if the counter overflows.\n *\n * Precondition: NULL != ctx;\n */\nstatic inline bool sha256_u32le(sha256_context* ctx, uint_fast32_t x) {\n  unsigned char buf[4];\n  WriteLE32(buf, x);\n  return sha256_uchars(ctx, buf, sizeof(buf));\n}\n\n/* Add a 32-bit word to be consumed in big endian byte-order by an ongoing SHA-256 evaluation.\n * For greater certainty, only the least 32 bits of 'x' are consumed.\n * Furthermore the bits within each byte are consumed in big endian order.\n *\n * Returns false if the counter overflows.\n *\n * Precondition: NULL != ctx;\n */\nstatic inline bool sha256_u32be(sha256_context* ctx, uint_fast32_t x) {\n  unsigned char buf[4];\n  WriteBE32(buf, x);\n  return sha256_uchars(ctx, buf, sizeof(buf));\n}\n\n/* Finish the SHA-256 computation by consuming and digesting the SHA-256 padding.\n * The final result is stored in the original 'output' buffer that was given to 'sha256_init'.\n *\n * Returns false if the counter had overflowed.\n *\n * Precondition: NULL != ctx;\n */\nstatic inline bool sha256_finalize(sha256_context* ctx) {\n  bool result = !ctx->overflow;\n  uint_fast64_t length = ctx->counter * 8;\n  sha256_uchars(ctx, (const unsigned char[64]){0x80}, 1 + (64 + 56 - ctx->counter % 64 - 1) % 64);\n  sha256_u64be(ctx, length);\n  return result;\n}\n\n/* Add a 256-bit hash to be consumed by an ongoing SHA-256 evaluation.\n *\n * Precondition: NULL != ctx;\n *               NULL != h;\n */\nstatic inline void sha256_hash(sha256_context* ctx, const sha256_midstate* h) {\n  unsigned char buf[32];\n  sha256_fromMidstate(buf, h->s);\n  sha256_uchars(ctx, buf, sizeof(buf));\n}\n\n/* Compare two hash interprted as big endian values.\n *\n * Precondition: NULL != a;\n *               NULL != b;\n */\nstatic inline int sha256_cmp_be(const sha256_midstate* a, const sha256_midstate* b) {\n  if (a->s[0] != b->s[0]) return a->s[0] < b->s[0] ? -1 : 1;\n  if (a->s[1] != b->s[1]) return a->s[1] < b->s[1] ? -1 : 1;\n  if (a->s[2] != b->s[2]) return a->s[2] < b->s[2] ? -1 : 1;\n  if (a->s[3] != b->s[3]) return a->s[3] < b->s[3] ? -1 : 1;\n  if (a->s[4] != b->s[4]) return a->s[4] < b->s[4] ? -1 : 1;\n  if (a->s[5] != b->s[5]) return a->s[5] < b->s[5] ? -1 : 1;\n  if (a->s[6] != b->s[6]) return a->s[6] < b->s[6] ? -1 : 1;\n  if (a->s[7] != b->s[7]) return a->s[7] < b->s[7] ? -1 : 1;\n  return 0;\n}\n#endif\n"
  },
  {
    "path": "C/sha256_x86.inc",
    "content": "#if defined(__SHA__) && defined(__SSE4_1__) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__))\n\n#include <cpuid.h>\n#include <stdbool.h>\n#include <immintrin.h>\n#include \"sha256.h\"\n\nstatic bool cpu_has_sha_ni(void) {\n  const uint32_t sse4_flag = (uint32_t)1 << 19;\n  const uint32_t sha_ni_flag = (uint32_t)1 << 29;\n  bool sse4, sha_ni;\n  uint32_t eax, ebx, ecx, edx;\n  __cpuid(0, eax, ebx, ecx, edx);\n  if (eax < 7) return false;\n  __cpuid_count(1, 0, eax, ebx, ecx, edx);\n  sse4 = ecx & sse4_flag;\n  __cpuid_count(7, 0, eax, ebx, ecx, edx);\n  sha_ni = ebx & sha_ni_flag;\n  return sse4 && sha_ni;\n}\n\n/* sha256_compression_x86_sha_ni based on\n   <https://github.com/bitcoin/bitcoin/blob/b1ba1b178f501daa1afdd91f9efec34e5ec1e294/src/crypto/sha256_x86_shani.cpp>\n*/\n/* Given a 256-bit 'midstate' and a 512-bit 'block', then 'midstate' becomes the value of the SHA-256 compression function (\"added\" to the original 'midstate' value).\n *\n * Precondition: uint32_t midstate[8];\n *               uint32_t block[16]\n */\nstatic void sha256_compression_x86_sha_ni(uint32_t* midstate, const uint32_t* block) {\n  __m128i msg, t1, t2, m0, m1, m2, m3, s0, s1, so0, so1;\n\n  /* Load state */\n  s0 = _mm_loadu_si128((const __m128i*)(midstate + 0));\n  s1 = _mm_loadu_si128((const __m128i*)(midstate + 4));\n  t1 = _mm_shuffle_epi32(s0, 0xB1);\n  t2 = _mm_shuffle_epi32(s1, 0x1B);\n  s0 = _mm_alignr_epi8(t1, t2, 0x08);\n  s1 = _mm_blend_epi16(t2, t1, 0xF0);\n\n  /* Remember old state */\n  so0 = s0;\n  so1 = s1;\n\n  /* Rounds 0 - 3 */\n  m0 = _mm_shuffle_epi32(_mm_loadu_si128((const __m128i*)(block + 0)), 0xE4);\n  msg = _mm_add_epi32(m0, _mm_set_epi64x(0xE9B5DBA5B5C0FBCFULL, 0x71374491428A2F98ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n\n  /* Rounds 4 - 7 */\n  m1 = _mm_shuffle_epi32(_mm_loadu_si128((const __m128i*)(block + 4)), 0xE4);\n  msg = _mm_add_epi32(m1, _mm_set_epi64x(0xAB1C5ED5923F82A4ULL, 0x59F111F13956C25BULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m0 = _mm_sha256msg1_epu32(m0, m1);\n\n  /* Rounds 8 - 11 */\n  m2 = _mm_shuffle_epi32(_mm_loadu_si128((const __m128i*)(block + 8)), 0xE4);\n  msg = _mm_add_epi32(m2, _mm_set_epi64x(0x550C7DC3243185BEULL, 0x12835B01D807AA98ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m1 = _mm_sha256msg1_epu32(m1, m2);\n\n  /* Rounds 12 - 15 */\n  m3 = _mm_shuffle_epi32(_mm_loadu_si128((const __m128i*)(block + 12)), 0xE4);\n  msg = _mm_add_epi32(m3, _mm_set_epi64x(0xC19BF1749BDC06A7ULL, 0x80DEB1FE72BE5D74ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m0 = _mm_sha256msg2_epu32(_mm_add_epi32(m0, _mm_alignr_epi8(m3, m2, 4)), m3);\n  m2 = _mm_sha256msg1_epu32(m2, m3);\n\n  /* Rounds 16 - 19 */\n  msg = _mm_add_epi32(m0, _mm_set_epi64x(0x240CA1CC0FC19DC6ULL, 0xEFBE4786E49B69C1ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m1 = _mm_sha256msg2_epu32(_mm_add_epi32(m1, _mm_alignr_epi8(m0, m3, 4)), m0);\n  m3 = _mm_sha256msg1_epu32(m3, m0);\n\n  /* Rounds 20 - 23 */\n  msg = _mm_add_epi32(m1, _mm_set_epi64x(0x76F988DA5CB0A9DCULL, 0x4A7484AA2DE92C6FULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m2 = _mm_sha256msg2_epu32(_mm_add_epi32(m2, _mm_alignr_epi8(m1, m0, 4)), m1);\n  m0 = _mm_sha256msg1_epu32(m0, m1);\n\n  /* Rounds 24 - 27 */\n  msg = _mm_add_epi32(m2, _mm_set_epi64x(0xBF597FC7B00327C8ULL, 0xA831C66D983E5152ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m3 = _mm_sha256msg2_epu32(_mm_add_epi32(m3, _mm_alignr_epi8(m2, m1, 4)), m2);\n  m1 = _mm_sha256msg1_epu32(m1, m2);\n\n  /* Rounds 28 - 31 */\n  msg = _mm_add_epi32(m3, _mm_set_epi64x(0x1429296706CA6351ULL, 0xD5A79147C6E00BF3ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m0 = _mm_sha256msg2_epu32(_mm_add_epi32(m0, _mm_alignr_epi8(m3, m2, 4)), m3);\n  m2 = _mm_sha256msg1_epu32(m2, m3);\n\n  /* Rounds 32 - 35 */\n  msg = _mm_add_epi32(m0, _mm_set_epi64x(0x53380D134D2C6DFCULL, 0x2E1B213827B70A85ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m1 = _mm_sha256msg2_epu32(_mm_add_epi32(m1, _mm_alignr_epi8(m0, m3, 4)), m0);\n  m3 = _mm_sha256msg1_epu32(m3, m0);\n\n  /* Rounds 36 - 39 */\n  msg = _mm_add_epi32(m1, _mm_set_epi64x(0x92722C8581C2C92EULL, 0x766A0ABB650A7354ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m2 = _mm_sha256msg2_epu32(_mm_add_epi32(m2, _mm_alignr_epi8(m1, m0, 4)), m1);\n  m0 = _mm_sha256msg1_epu32(m0, m1);\n\n  /* Rounds 40 - 43 */\n  msg = _mm_add_epi32(m2, _mm_set_epi64x(0xC76C51A3C24B8B70ULL, 0xA81A664BA2BFE8A1ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m3 = _mm_sha256msg2_epu32(_mm_add_epi32(m3, _mm_alignr_epi8(m2, m1, 4)), m2);\n  m1 = _mm_sha256msg1_epu32(m1, m2);\n\n  /* Rounds 44 - 47 */\n  msg = _mm_add_epi32(m3, _mm_set_epi64x(0x106AA070F40E3585ULL, 0xD6990624D192E819ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m0 = _mm_sha256msg2_epu32(_mm_add_epi32(m0, _mm_alignr_epi8(m3, m2, 4)), m3);\n  m2 = _mm_sha256msg1_epu32(m2, m3);\n\n  /* Rounds 48 - 51 */\n  msg = _mm_add_epi32(m0, _mm_set_epi64x(0x34B0BCB52748774CULL, 0x1E376C0819A4C116ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m1 = _mm_sha256msg2_epu32(_mm_add_epi32(m1, _mm_alignr_epi8(m0, m3, 4)), m0);\n  m3 = _mm_sha256msg1_epu32(m3, m0);\n\n  /* Rounds 52 - 55 */\n  msg = _mm_add_epi32(m1, _mm_set_epi64x(0x682E6FF35B9CCA4FULL, 0x4ED8AA4A391C0CB3ULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m2 = _mm_sha256msg2_epu32(_mm_add_epi32(m2, _mm_alignr_epi8(m1, m0, 4)), m1);\n\n  /* Rounds 56 - 59 */\n  msg = _mm_add_epi32(m2, _mm_set_epi64x(0x8CC7020884C87814ULL, 0x78A5636F748F82EEULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n  m3 = _mm_sha256msg2_epu32(_mm_add_epi32(m3, _mm_alignr_epi8(m2, m1, 4)), m2);\n\n  /* Rounds 60 - 63 */\n  msg = _mm_add_epi32(m3, _mm_set_epi64x(0xC67178F2BEF9A3F7ULL, 0xA4506CEB90BEFFFAULL));\n  s1 = _mm_sha256rnds2_epu32(s1, s0, msg);\n  s0 = _mm_sha256rnds2_epu32(s0, s1, _mm_shuffle_epi32(msg, 0x0e));\n\n  /* Combine with old state */\n  s0 = _mm_add_epi32(s0, so0);\n  s1 = _mm_add_epi32(s1, so1);\n\n  /* Store state */\n  t1 = _mm_shuffle_epi32(s0, 0x1B);\n  t2 = _mm_shuffle_epi32(s1, 0xB1);\n  s0 = _mm_blend_epi16(t1, t2, 0xF0);\n  s1 = _mm_alignr_epi8(t2, t1, 0x08);\n  _mm_storeu_si128((__m128i*)(midstate + 0), s0);\n  _mm_storeu_si128((__m128i*)(midstate + 4), s1);\n}\n\n/* This function inspects the CPU's capabilities and enables the use of some optimized instructions, if they are known and available.\n */\nextern void simplicity_sha256_cpu_optimize_not_thread_safe(void) __attribute__((constructor));\nextern void simplicity_sha256_cpu_optimize_not_thread_safe(void) {\n  if (cpu_has_sha_ni()) {\n    simplicity_sha256_compression = sha256_compression_x86_sha_ni;\n  }\n}\n\n#endif\n"
  },
  {
    "path": "C/simplicity_alloc.h",
    "content": "#ifndef SIMPLICITY_SIMPLICITY_ALLOC_H\n#define SIMPLICITY_SIMPLICITY_ALLOC_H\n\n#include <stdlib.h>\n\n/* Allocate with malloc by default. */\n#define simplicity_malloc malloc\n\n/* Allocate+zero initialize with calloc by default. */\n#define simplicity_calloc calloc\n\n/* Deallocate with free by default. */\n#define simplicity_free free\n\n#endif /* SIMPLICITY_SIMPLICITY_ALLOC_H */\n"
  },
  {
    "path": "C/simplicity_assert.h",
    "content": "#ifndef SIMPLICITY_SIMPLICITY_ASSERT_H\n#define SIMPLICITY_SIMPLICITY_ASSERT_H\n\n#include <assert.h>\n\n/* Disable NDEBUG mode. */\n#if (defined NDEBUG) && (!defined RECKLESS)\n# error \"Don't be RECKLESS.  Turn off NDEBUG when building.  For production builds use PRODUCTION.\"\n#endif\n\n/* Set a PRODUCTION_FLAG value based on whether PRODUCTION mode is enabled or not. */\n#ifdef PRODUCTION\n#  define PRODUCTION_FLAG 1\n#else\n#  define PRODUCTION_FLAG 0\n#endif\n\n/* Currently Simplicity's assert is the same a C's assert. */\n#define simplicity_assert assert\n\n/* simplicity_debug_assert is for assertions to be removed in PRODUCTION mode.\n * We use an if statement instead of conditional compilation to ensure the condition is type checked, even in PRODUCTION mode.\n */\n#define simplicity_debug_assert(cond) do { if (!PRODUCTION_FLAG) { assert(cond); } } while(0)\n\n/* Defines an UNREACHABLE macro that, if you manage to get into NDEBUG mode, calls '__builtin_unreachable' if it exists. */\n#if (defined NDEBUG) && (defined __hasbuiltin)\n#  if __has_builtin(__builtin_unreachable)\n#    define SIMPLICITY_UNREACHABLE() __builtin_unreachable()\n#  endif\n#endif\n\n#ifndef SIMPLICITY_UNREACHABLE\n#  define SIMPLICITY_UNREACHABLE assert(NULL == \"SIMPLICITY_UNCREACHABLE was reached\")\n#endif\n\n#endif /* SIMPLICITY_SIMPLICITY_ASSERT_H */\n"
  },
  {
    "path": "C/taptweak.h",
    "content": "#ifndef SIMPLICITY_TAPTWEAK_H\n#define SIMPLICITY_TAPTWEAK_H\n\n#include \"frame.h\"\n\n/* This is a generic taptweak jet implementation parameterized by the tag used in the hash.\n * It is designed to be specialized to implement slightly different taptweak operations for Bitcoin and Elements.\n *\n * PUBKEY * TWO^256 |- PUBKEY\n *\n * Precondition: unsigned char[tagLen] tag\n */\nbool simplicity_generic_taptweak(frameItem* dst, frameItem *src, const unsigned char *tag, size_t tagLen);\n\n#endif\n"
  },
  {
    "path": "C/test.c",
    "content": "#include <inttypes.h>\n#include <limits.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <getopt.h>\n#include <simplicity/elements/exec.h>\n#include <simplicity/elements/cmr.h>\n#include \"ctx8Pruned.h\"\n#include \"ctx8Unpruned.h\"\n#include \"dag.h\"\n#include \"deserialize.h\"\n#include \"eval.h\"\n#include \"hashBlock.h\"\n#include \"rsort.h\"\n#include \"sha256.h\"\n#include \"schnorr0.h\"\n#include \"schnorr6.h\"\n#include \"regression4.h\"\n#include \"typeSkipTest.h\"\n#include \"simplicity_alloc.h\"\n#include \"typeInference.h\"\n#include \"elements/checkSigHashAllTx1.h\"\n#include \"elements/primitive.h\"\n\n_Static_assert(CHAR_BIT == 8, \"Buffers passed to fmemopen presume 8 bit chars\");\n\n/* Bitcoin's (old-school) sigop limit is 80,000.  Ecdsa signature verification takes approximately 50 microseconds,\n * meaning a block for of sigops would take 4 seconds to verify.\n * Post-taproot, there is a block size limit of 4,000,000 WU.\n * To verify the worst case block full of simplicity programs, in the same 4 second limit\n * we need to limit Simplicity programs so they take no more than 1 microsecond per WU to run.\n */\nstatic const double secondsPerWU = 1 / 1000. / 1000.;\nstatic int successes = 0;\nstatic int failures = 0;\n\n#ifdef TIMING_FLAG\nstatic int timing_flag = 1;\n#else\nstatic int timing_flag = 0;\n#endif\n\nstatic void fprint_cmr(FILE* stream, const uint32_t* cmr) {\n  fprintf(stream, \"0x%08x, 0x%08x, 0x%08x, 0x%08x, 0x%08x, 0x%08x, 0x%08x, 0x%08x\",\n          cmr[0], cmr[1], cmr[2], cmr[3], cmr[4], cmr[5], cmr[6], cmr[7]\n         );\n}\n\nstatic void test_decodeUptoMaxInt(void) {\n  printf(\"Test decodeUptoMaxInt\\n\");\n  const unsigned char buf[] =\n  { 0x4b, 0x86, 0x39, 0xe8, 0xdf, 0xc0, 0x38, 0x0f, 0x7f, 0xff, 0xff, 0x00\n  , 0x00, 0x00, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0xff, 0xff, 0xff\n  , 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00\n  };\n  const int32_t expected[] =\n  { 1, 2, 3, 4, 5, 7, 8, 15, 16, 17\n  , 0xffff, 0x10000, 0x40000000, 0x7fffffff, SIMPLICITY_ERR_DATA_OUT_OF_RANGE\n  };\n\n  bitstream stream = initializeBitstream(buf, sizeof(buf));\n  for (size_t i = 0; i < sizeof(expected)/sizeof(expected[0]); ++i) {\n    int32_t result = simplicity_decodeUptoMaxInt(&stream);\n    if (expected[i] == result) {\n      successes++;\n    } else {\n      failures++;\n      printf(\"Unexpected result during parsing.  Expected %d and received %d\\n\", expected[i], result);\n    }\n  }\n}\n\nstatic void test_hashBlock(void) {\n  printf(\"Test hashBlock\\n\");\n  dag_node* dag;\n  combinator_counters census;\n  int_fast32_t len;\n  simplicity_err error;\n  {\n    bitstream stream = initializeBitstream(hashBlock, sizeof_hashBlock);\n    len = simplicity_decodeMallocDag(&dag, simplicity_elements_decodeJet, &census, &stream);\n    if (!dag) {\n      simplicity_assert(len < 0);\n      error = (simplicity_err)len;\n      failures++;\n      printf(\"Error parsing dag: %d\\n\", error);\n    } else {\n      simplicity_assert(0 < len);\n      error = simplicity_closeBitstream(&stream);\n      if (!IS_OK(error)) {\n        failures++;\n        printf(\"Error closing dag stream for hashblock\\n\");\n      }\n    }\n  }\n  if (dag && IS_OK(error)) {\n    successes++;\n\n    if (0 == memcmp(hashBlock_cmr, dag[len-1].cmr.s, sizeof(uint32_t[8]))) {\n      successes++;\n    } else {\n      failures++;\n      printf(\"Unexpected CMR of hashblock\\n\");\n    }\n\n    type* type_dag;\n    bitstream witness = initializeBitstream(hashBlock_witness, sizeof_hashBlock_witness);\n    if (!IS_OK(simplicity_mallocTypeInference(&type_dag, simplicity_elements_mallocBoundVars, dag, (uint_fast32_t)len, &census)) || !type_dag ||\n        type_dag[dag[len-1].sourceType].bitSize != 768 || type_dag[dag[len-1].targetType].bitSize != 256) {\n      failures++;\n      printf(\"Unexpected failure of type inference for hashblock\\n\");\n    } else if (!IS_OK(simplicity_fillWitnessData(dag, type_dag, (uint_fast32_t)len, &witness))) {\n      failures++;\n      printf(\"Unexpected failure of fillWitnessData for hashblock\\n\");\n    } else if (!IS_OK(simplicity_closeBitstream(&witness))) {\n      failures++;\n      printf(\"Unexpected failure of witness stream for hashblock\\n\");\n    } else {\n      {\n        analyses analysis[len];\n        simplicity_computeAnnotatedMerkleRoot(analysis, dag, type_dag, (uint_fast32_t)len);\n        if (0 == memcmp(hashBlock_amr, analysis[len-1].annotatedMerkleRoot.s, sizeof(uint32_t[8]))) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Unexpected AMR of hashblock\\n\");\n        }\n      }\n      {\n        sha256_midstate ihr;\n        if (IS_OK(simplicity_verifyNoDuplicateIdentityHashes(&ihr, dag, type_dag, (uint_fast32_t)len)) &&\n            0 == memcmp(hashBlock_ihr, ihr.s, sizeof(uint32_t[8]))) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Unexpected IHR of hashblock\\n\");\n        }\n      }\n\n      ubounded inputBitSize = type_dag[dag[len-1].sourceType].bitSize;\n      ubounded outputBitSize = type_dag[dag[len-1].targetType].bitSize;\n      UWORD input[ROUND_UWORD(inputBitSize)];\n      UWORD output[ROUND_UWORD(outputBitSize)];\n      { frameItem frame = initWriteFrame(inputBitSize, &input[ROUND_UWORD(inputBitSize)]);\n        simplicity_assert(256+512 == inputBitSize);\n        /* Set SHA-256's initial value. */\n        write32s(&frame, (uint32_t[8])\n            { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 }\n          , 8);\n        /* Set the block to be compressed to \"abc\" with padding. */\n        write32s(&frame, (uint32_t[16]){ [0] = 0x61626380, [15] = 0x18 }, 16);\n      }\n      {\n        ubounded cellsBound, UWORDBound, frameBound, costBound;\n        if (IS_OK(simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, UBOUNDED_MAX, 0, UBOUNDED_MAX, dag, type_dag, (uint_fast32_t)len))\n            && hashBlock_cost == costBound) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Expected %d for cost, but got %d instead.\\n\", hashBlock_cost, costBound);\n        }\n      }\n      simplicity_err err = simplicity_evalTCOExpression(CHECK_NONE, output, input, dag, type_dag, (uint_fast32_t)len, 0, NULL, NULL);\n      if (IS_OK(err)) {\n        /* The expected result is the value 'SHA256(\"abc\")'. */\n        const uint32_t expectedHash[8] = { 0xba7816bful, 0x8f01cfeaul, 0x414140deul, 0x5dae2223ul\n                                         , 0xb00361a3ul, 0x96177a9cul, 0xb410ff61ul, 0xf20015adul };\n        frameItem frame = initReadFrame(outputBitSize, &output[0]);\n        uint32_t result[8];\n        simplicity_assert(256 == outputBitSize);\n        read32s(result, 8, &frame);\n        if (0 == memcmp(expectedHash, result, sizeof(uint32_t[8]))) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Unexpected output of hashblock computation.\\n\");\n        }\n      } else {\n        failures++;\n        printf(\"Unexpected failure of hashblock evaluation: %d\\n\", err);\n      }\n    }\n    simplicity_free(type_dag);\n  }\n  simplicity_free(dag);\n}\n\nstatic void test_program(char* name, const unsigned char* program, size_t program_len, const unsigned char* witness, size_t witness_len,\n                         simplicity_err expectedResult, const uint32_t* expectedCMR,\n                         const uint32_t* expectedIHR, const uint32_t* expectedAMR, const ubounded *expectedCost) {\n  printf(\"Test %s\\n\", name);\n  dag_node* dag;\n  combinator_counters census;\n  int_fast32_t len;\n  simplicity_err error;\n  {\n    bitstream stream = initializeBitstream(program, program_len);\n    len = simplicity_decodeMallocDag(&dag, simplicity_elements_decodeJet, &census, &stream);\n    if (!dag) {\n      simplicity_assert(len < 0);\n      error = (simplicity_err)len;\n      failures++;\n      printf(\"Error parsing dag: %d\\n\", error);\n    } else {\n      simplicity_assert(0 < len);\n      error = simplicity_closeBitstream(&stream);\n      if (!IS_OK(error)) {\n        if (expectedResult == error) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Error closing dag stream: %d\\n\", error);\n        }\n      }\n    }\n  }\n  if (dag && IS_OK(error)) {\n    successes++;\n\n    if (expectedCMR) {\n      if (0 == memcmp(expectedCMR, dag[len-1].cmr.s, sizeof(uint32_t[8]))) {\n        successes++;\n      } else {\n        failures++;\n        printf(\"Unexpected CMR. Expected\\n{\");\n        fprint_cmr(stdout, expectedCMR);\n        printf(\"}, but received\\n{\");\n        fprint_cmr(stdout, dag[len-1].cmr.s);\n        printf(\"}\\n\");\n      }\n    }\n    type* type_dag;\n    bitstream witness_stream = initializeBitstream(witness, witness_len);\n    if (!IS_OK(simplicity_mallocTypeInference(&type_dag, simplicity_elements_mallocBoundVars, dag, (uint_fast32_t)len, &census)) || !type_dag ||\n        dag[len-1].sourceType != 0 || dag[len-1].targetType != 0) {\n      failures++;\n      printf(\"Unexpected failure of type inference.\\n\");\n    } else if (!IS_OK(simplicity_fillWitnessData(dag, type_dag, (uint_fast32_t)len, &witness_stream))) {\n      failures++;\n      printf(\"Unexpected failure of fillWitnessData.\\n\");\n    } else if (!IS_OK(simplicity_closeBitstream(&witness_stream))) {\n      failures++;\n      printf(\"Unexpected failure closing witness_stream\\n\");\n    } else {\n      if (expectedAMR) {\n        analyses analysis[len];\n        simplicity_computeAnnotatedMerkleRoot(analysis, dag, type_dag, (uint_fast32_t)len);\n        if (0 == memcmp(expectedAMR, analysis[len-1].annotatedMerkleRoot.s, sizeof(uint32_t[8]))) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Unexpected AMR.\\n\");\n        }\n      }\n      {\n        sha256_midstate ihr;\n        if (IS_OK(simplicity_verifyNoDuplicateIdentityHashes(&ihr, dag, type_dag, (uint_fast32_t)len)) &&\n            (!expectedIHR || 0 == memcmp(expectedIHR, ihr.s, sizeof(uint32_t[8])))) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Unexpected IHR.\\n\");\n        }\n      }\n      if (expectedCost) {\n        ubounded cellsBound, UWORDBound, frameBound, costBound;\n        if (IS_OK(simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, UBOUNDED_MAX, 0, UBOUNDED_MAX, dag, type_dag, (uint_fast32_t)len))\n           && 0 < costBound\n           && *expectedCost == costBound) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Expected %u for cost, but got %u instead.\\n\", *expectedCost, costBound);\n        }\n        /* Analysis should pass when computed bounds are used. */\n        if (IS_OK(simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, cellsBound, costBound-1, costBound, dag, type_dag, (uint_fast32_t)len))\n           && *expectedCost == costBound) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Analysis with computed bounds failed.\\n\");\n        }\n        /* if cellsBound is non-zero, analysis should fail when smaller cellsBound is used. */\n        if (0 < cellsBound) {\n          if (SIMPLICITY_ERR_EXEC_MEMORY == simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, cellsBound-1, 0, UBOUNDED_MAX, dag, type_dag, (uint_fast32_t)len)) {\n            successes++;\n          } else {\n            failures++;\n            printf(\"Analysis with too small cells bounds failed. \\n\");\n          }\n        }\n        /* Analysis should fail when smaller costBound is used. */\n        if (0 < *expectedCost &&\n            SIMPLICITY_ERR_EXEC_BUDGET == simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, UBOUNDED_MAX, 0, *expectedCost-1, dag, type_dag, (uint_fast32_t)len)\n           ) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Analysis with too small cost bounds failed.\\n\");\n        }\n        /* Analysis should fail when overweight. */\n        if (0 < *expectedCost &&\n            SIMPLICITY_ERR_OVERWEIGHT == simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, UBOUNDED_MAX, *expectedCost, UBOUNDED_MAX, dag, type_dag, (uint_fast32_t)len)\n           ) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"Analysis with too large minCost failed.\\n\");\n        }\n      }\n      simplicity_err actualResult = evalTCOProgram(dag, type_dag, (uint_fast32_t)len, 0, NULL, NULL);\n      if (expectedResult == actualResult) {\n        successes++;\n      } else {\n        failures++;\n        printf(\"Expected %d from evaluation, but got %d instead.\\n\", expectedResult, actualResult);\n      }\n    }\n    simplicity_free(type_dag);\n  }\n  simplicity_free(dag);\n}\n\nstatic void test_occursCheck(void) {\n  printf(\"Test occursCheck\\n\");\n  /* The untyped Simplicity term (case (drop iden) iden) ought to cause an occurs check failure. */\n  const unsigned char buf[] = { 0xc1, 0x07, 0x20, 0x30 };\n  dag_node* dag;\n  combinator_counters census;\n  int_fast32_t len;\n  {\n    bitstream stream = initializeBitstream(buf, sizeof(buf));\n    len = simplicity_decodeMallocDag(&dag, simplicity_elements_decodeJet, &census, &stream);\n  }\n  if (!dag) {\n    simplicity_assert(len < 0);\n    printf(\"Error parsing dag: %\" PRIdFAST32 \"\\n\", len);\n  } else {\n    type* type_dag;\n    simplicity_assert(0 < len);\n    if (SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK == simplicity_mallocTypeInference(&type_dag, simplicity_elements_mallocBoundVars, dag, (uint_fast32_t)len, &census) &&\n        !type_dag) {\n      successes++;\n    } else {\n      printf(\"Unexpected occurs check success\\n\");\n      failures++;\n    }\n    simplicity_free(type_dag);\n  }\n  simplicity_free(dag);\n}\n\nstatic void test_elements(void) {\n  unsigned char cmr[32], amr[32];\n  sha256_fromMidstate(cmr, elementsCheckSigHashAllTx1_cmr);\n  sha256_fromMidstate(amr, elementsCheckSigHashAllTx1_amr);\n\n  unsigned char genesisHash[32] = {0x0f, 0x91, 0x88, 0xf1, 0x3c, 0xb7, 0xb2, 0xc7, 0x1f, 0x2a, 0x33, 0x5e, 0x3a, 0x4f, 0xc3, 0x28, 0xbf, 0x5b, 0xeb, 0x43, 0x60, 0x12, 0xaf, 0xca, 0x59, 0x0b, 0x1a, 0x11, 0x46, 0x6e, 0x22, 0x06};\n  rawElementsTapEnv rawTaproot = (rawElementsTapEnv)\n    { .controlBlock = (unsigned char [33]){0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x78, 0xce, 0x56, 0x3f, 0x89, 0xa0, 0xed, 0x94, 0x14, 0xf5, 0xaa, 0x28, 0xad, 0x0d, 0x96, 0xd6, 0x79, 0x5f, 0x9c, 0x63}\n    , .pathLen = 0\n    , .scriptCMR = cmr\n    };\n  elementsTapEnv* taproot = simplicity_elements_mallocTapEnv(&rawTaproot);\n\n  printf(\"Test elements\\n\");\n  {\n    rawElementsTransaction testTx1 = (rawElementsTransaction)\n      { .txid = (unsigned char[32]){0xdb, 0x9a, 0x3d, 0xe0, 0xb6, 0xb8, 0xcc, 0x74, 0x1e, 0x4d, 0x6c, 0x8f, 0x19, 0xce, 0x75, 0xec, 0x0d, 0xfd, 0x01, 0x02, 0xdb, 0x9c, 0xb5, 0xcd, 0x27, 0xa4, 0x1a, 0x66, 0x91, 0x66, 0x3a, 0x07}\n      , .input = (rawElementsInput[])\n                 { { .annex = NULL\n                   , .prevTxid = (unsigned char[32]){0xeb, 0x04, 0xb6, 0x8e, 0x9a, 0x26, 0xd1, 0x16, 0x04, 0x6c, 0x76, 0xe8, 0xff, 0x47, 0x33, 0x2f, 0xb7, 0x1d, 0xda, 0x90, 0xff, 0x4b, 0xef, 0x53, 0x70, 0xf2, 0x52, 0x26, 0xd3, 0xbc, 0x09, 0xfc}\n                   , .prevIx = 0\n                   , .sequence = 0xfffffffe\n                   , .issuance = {0}\n                   , .scriptSig = {0}\n                   , .txo = { .asset = (unsigned char[33]){0x01, 0x23, 0x0f, 0x4f, 0x5d, 0x4b, 0x7c, 0x6f, 0xa8, 0x45, 0x80, 0x6e, 0xe4, 0xf6, 0x77, 0x13, 0x45, 0x9e, 0x1b, 0x69, 0xe8, 0xe6, 0x0f, 0xce, 0xe2, 0xe4, 0x94, 0x0c, 0x7a, 0x0d, 0x5d, 0xe1, 0xb2}\n                            , .value = (unsigned char[9]){0x01, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xe4, 0x00}\n                            , .scriptPubKey = {0}\n                 } }        }\n      , .output = (rawElementsOutput[])\n                  { { .asset = (unsigned char[33]){0x01, 0x23, 0x0f, 0x4f, 0x5d, 0x4b, 0x7c, 0x6f, 0xa8, 0x45, 0x80, 0x6e, 0xe4, 0xf6, 0x77, 0x13, 0x45, 0x9e, 0x1b, 0x69, 0xe8, 0xe6, 0x0f, 0xce, 0xe2, 0xe4, 0x94, 0x0c, 0x7a, 0x0d, 0x5d, 0xe1, 0xb2}\n                    , .value = (unsigned char[9]){0x01, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xd7, 0x1c}\n                    , .nonce = NULL\n                    , .scriptPubKey = { .buf = (unsigned char [26]){0x19, 0x76, 0xa9, 0x14, 0x48, 0x63, 0x3e, 0x2c, 0x0e, 0xe9, 0x49, 0x5d, 0xd3, 0xf9, 0xc4, 0x37, 0x32, 0xc4, 0x7f, 0x47, 0x02, 0xa3, 0x62, 0xc8, 0x88, 0xac}\n                                      , .len = 26\n                                      }\n                    }\n                  , { .asset = (unsigned char[33]){0x01, 0x23, 0x0f, 0x4f, 0x5d, 0x4b, 0x7c, 0x6f, 0xa8, 0x45, 0x80, 0x6e, 0xe4, 0xf6, 0x77, 0x13, 0x45, 0x9e, 0x1b, 0x69, 0xe8, 0xe6, 0x0f, 0xce, 0xe2, 0xe4, 0x94, 0x0c, 0x7a, 0x0d, 0x5d, 0xe1, 0xb2}\n                    , .value = (unsigned char[9]){0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xe4}\n                    , .nonce = NULL\n                    , .scriptPubKey = {0}\n                  } }\n      , .numInputs = 1\n      , .numOutputs = 2\n      , .version = 0x00000002\n      , .lockTime = 0x00000000\n      };\n    elementsTransaction* tx1 = simplicity_elements_mallocTransaction(&testTx1);\n    if (tx1) {\n      successes++;\n      simplicity_err execResult;\n      {\n        unsigned char cmrResult[32];\n        if (simplicity_elements_computeCmr(&execResult, cmrResult, elementsCheckSigHashAllTx1, sizeof_elementsCheckSigHashAllTx1) && IS_OK(execResult)) {\n          if (0 == memcmp(cmrResult, cmr, sizeof(unsigned char[8]))) {\n            successes++;\n          } else {\n            failures++;\n            printf(\"Unexpected CMR of elementsCheckSigHashAllTx1\\n\");\n          }\n        } else {\n          failures++;\n          printf(\"simplicity_elements_computeCmr of elementsCheckSigHashAllTx1 unexpectedly produced %d.\\n\", execResult);\n        }\n      }\n      {\n        unsigned char ihrResult[32];\n        if (simplicity_elements_execSimplicity(&execResult, ihrResult, tx1, 0, taproot, genesisHash, 0, (elementsCheckSigHashAllTx1_cost + 999)/1000, amr, elementsCheckSigHashAllTx1, sizeof_elementsCheckSigHashAllTx1, elementsCheckSigHashAllTx1_witness, sizeof_elementsCheckSigHashAllTx1_witness) && IS_OK(execResult)) {\n          sha256_midstate ihr;\n          sha256_toMidstate(ihr.s, ihrResult);\n          if (0 == memcmp(ihr.s, elementsCheckSigHashAllTx1_ihr, sizeof(uint32_t[8]))) {\n            successes++;\n          } else {\n            failures++;\n            printf(\"Unexpected IHR of elementsCheckSigHashAllTx1\\n\");\n          }\n        } else {\n          failures++;\n          printf(\"execSimplicity of elementsCheckSigHashAllTx1 on tx1 unexpectedly produced %d.\\n\", execResult);\n        }\n        if (elementsCheckSigHashAllTx1_cost){\n          /* test the same transaction without adequate budget. */\n          simplicity_assert(elementsCheckSigHashAllTx1_cost);\n          if (simplicity_elements_execSimplicity(&execResult, ihrResult, tx1, 0, taproot, genesisHash, 0, (elementsCheckSigHashAllTx1_cost - 1)/1000, amr, elementsCheckSigHashAllTx1, sizeof_elementsCheckSigHashAllTx1, elementsCheckSigHashAllTx1_witness, sizeof_elementsCheckSigHashAllTx1_witness) && SIMPLICITY_ERR_EXEC_BUDGET == execResult) {\n            successes++;\n          } else {\n            failures++;\n            printf(\"execSimplicity of elementsCheckSigHashAllTx1 on tx1 unexpectedly produced %d.\\n\", execResult);\n          }\n        }\n      }\n      {\n        /* test the same transaction with a erroneous signature. */\n        unsigned char brokenSig[sizeof_elementsCheckSigHashAllTx1_witness];\n        memcpy(brokenSig, elementsCheckSigHashAllTx1_witness, sizeof_elementsCheckSigHashAllTx1_witness);\n        brokenSig[sizeof_elementsCheckSigHashAllTx1_witness - 1] ^= 0x80;\n        if (simplicity_elements_execSimplicity(&execResult, NULL, tx1, 0, taproot, genesisHash, 0, BUDGET_MAX, NULL, elementsCheckSigHashAllTx1, sizeof_elementsCheckSigHashAllTx1, brokenSig, sizeof_elementsCheckSigHashAllTx1_witness) && SIMPLICITY_ERR_EXEC_JET == execResult) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"execSimplicity of brokenSig on tx1 unexpectedly produced %d.\\n\", execResult);\n        }\n      }\n    } else {\n      printf(\"mallocTransaction(&rawTx1) failed\\n\");\n      failures++;\n    }\n    simplicity_elements_freeTransaction(tx1);\n  }\n  /* test a modified transaction with the same signature. */\n  {\n    rawElementsTransaction testTx2 = (rawElementsTransaction)\n      { .txid = (unsigned char[32]){0xdb, 0x9a, 0x3d, 0xe0, 0xb6, 0xb8, 0xcc, 0x74, 0x1e, 0x4d, 0x6c, 0x8f, 0x19, 0xce, 0x75, 0xec, 0x0d, 0xfd, 0x01, 0x02, 0xdb, 0x9c, 0xb5, 0xcd, 0x27, 0xa4, 0x1a, 0x66, 0x91, 0x66, 0x3a, 0x07}\n      , .input = (rawElementsInput[])\n                 { { .prevTxid = (unsigned char[32]){0xeb, 0x04, 0xb6, 0x8e, 0x9a, 0x26, 0xd1, 0x16, 0x04, 0x6c, 0x76, 0xe8, 0xff, 0x47, 0x33, 0x2f, 0xb7, 0x1d, 0xda, 0x90, 0xff, 0x4b, 0xef, 0x53, 0x70, 0xf2, 0x52, 0x26, 0xd3, 0xbc, 0x09, 0xfc}\n                   , .prevIx = 0\n                   , .sequence = 0xffffffff /* Here is the modification. */\n                   , .issuance = {0}\n                   , .txo = { .asset = (unsigned char[33]){0x01, 0x23, 0x0f, 0x4f, 0x5d, 0x4b, 0x7c, 0x6f, 0xa8, 0x45, 0x80, 0x6e, 0xe4, 0xf6, 0x77, 0x13, 0x45, 0x9e, 0x1b, 0x69, 0xe8, 0xe6, 0x0f, 0xce, 0xe2, 0xe4, 0x94, 0x0c, 0x7a, 0x0d, 0x5d, 0xe1, 0xb2}\n                            , .value = (unsigned char[9]){0x01, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xe4, 0x00}\n                            , .scriptPubKey = {0}\n                 } }        }\n      , .output = (rawElementsOutput[])\n                  { { .asset = (unsigned char[33]){0x01, 0x23, 0x0f, 0x4f, 0x5d, 0x4b, 0x7c, 0x6f, 0xa8, 0x45, 0x80, 0x6e, 0xe4, 0xf6, 0x77, 0x13, 0x45, 0x9e, 0x1b, 0x69, 0xe8, 0xe6, 0x0f, 0xce, 0xe2, 0xe4, 0x94, 0x0c, 0x7a, 0x0d, 0x5d, 0xe1, 0xb2}\n                    , .value = (unsigned char[9]){0x01, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xd7, 0x1c}\n                    , .nonce = NULL\n                    , .scriptPubKey = { .buf = (unsigned char [26]){0x19, 0x76, 0xa9, 0x14, 0x48, 0x63, 0x3e, 0x2c, 0x0e, 0xe9, 0x49, 0x5d, 0xd3, 0xf9, 0xc4, 0x37, 0x32, 0xc4, 0x7f, 0x47, 0x02, 0xa3, 0x62, 0xc8, 0x88, 0xac}\n                                      , .len = 26\n                                      }\n                    }\n                  , { .asset = (unsigned char[33]){0x01, 0x23, 0x0f, 0x4f, 0x5d, 0x4b, 0x7c, 0x6f, 0xa8, 0x45, 0x80, 0x6e, 0xe4, 0xf6, 0x77, 0x13, 0x45, 0x9e, 0x1b, 0x69, 0xe8, 0xe6, 0x0f, 0xce, 0xe2, 0xe4, 0x94, 0x0c, 0x7a, 0x0d, 0x5d, 0xe1, 0xb2}\n                    , .value = (unsigned char[9]){0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xe4}\n                    , .nonce = NULL\n                    , .scriptPubKey = {0}\n                  } }\n      , .numInputs = 1\n      , .numOutputs = 2\n      , .version = 0x00000002\n      , .lockTime = 0x00000000\n      };\n    elementsTransaction* tx2 = simplicity_elements_mallocTransaction(&testTx2);\n    if (tx2) {\n      successes++;\n      simplicity_err execResult;\n      {\n        if (simplicity_elements_execSimplicity(&execResult, NULL, tx2, 0, taproot, genesisHash, 0, BUDGET_MAX, NULL, elementsCheckSigHashAllTx1, sizeof_elementsCheckSigHashAllTx1, elementsCheckSigHashAllTx1_witness, sizeof_elementsCheckSigHashAllTx1_witness) && SIMPLICITY_ERR_EXEC_JET == execResult) {\n          successes++;\n        } else {\n          failures++;\n          printf(\"execSimplicity of elementsCheckSigHashAllTx1 on tx2 unexpectedly produced %d.\\n\", execResult);\n        }\n      }\n    } else {\n      printf(\"mallocTransaction(&testTx2) failed\\n\");\n      failures++;\n    }\n    simplicity_elements_freeTransaction(tx2);\n  }\n  simplicity_elements_freeTapEnv(taproot);\n}\n\nstatic sha256_midstate hashint(uint_fast32_t n) {\n  sha256_midstate result;\n  sha256_context ctx = sha256_init(result.s);\n  sha256_u32le(&ctx, n);\n  sha256_finalize(&ctx);\n\n  return result;\n}\n\nstatic sha256_midstate rsort_no_duplicates(uint_fast32_t i) {\n  return hashint(i);\n}\n\nstatic sha256_midstate rsort_all_duplicates(uint_fast32_t i) {\n  (void)i;\n  return hashint(0);\n}\n\nstatic sha256_midstate rsort_one_duplicate(uint_fast32_t i) {\n  return hashint(i ? i : 1);\n}\n\n/* Tests a worst-case conditions for stack usage in rsort. */\nstatic sha256_midstate rsort_diagonal(uint_fast32_t i) {\n  sha256_midstate result = {0};\n  unsigned char *alias = (unsigned char *)(result.s);\n  for (uint_fast32_t j = 0; j < sizeof(result.s); ++j) {\n    alias[j] = j == i ? 0 : 0xff;\n  }\n  return result;\n}\n\nstatic void test_hasDuplicates(const char* name, int expected, sha256_midstate (*f)(uint_fast32_t), uint_fast32_t n) {\n  sha256_midstate hashes[n];\n\n  printf(\"Test %s\\n\", name);\n  for(uint_fast32_t i = 0; i < n; ++i) {\n    hashes[i] = f(i);\n  }\n\n  int actual = simplicity_hasDuplicates(hashes, n);\n  if (expected == actual) {\n    successes++;\n  } else if (actual < 0) {\n    failures++;\n    printf(\"Unexpected failure of hasDuplicates\\n\");\n  } else if (0 == expected) {\n    failures++;\n    printf(\"Expected no duplicate but found some.\\n\");\n  } else {\n    failures++;\n    printf(\"Expected duplicates but found none.\\n\");\n  }\n}\n\nstatic void regression_tests(void) {\n  {\n    /* word(\"2^23 zero bits\") ; unit */\n    size_t sizeof_regression3 = ((size_t)1 << 20) + 4;\n    unsigned char *regression3 = simplicity_calloc(sizeof_regression3, 1);\n    clock_t start, end;\n    double diff, bound;\n    const uint32_t cmr[] = {\n      0x872d12eeu, 0x631ae2e7u, 0xffb8b06au, 0xc54ef77fu, 0x693adbffu, 0xb229e760u, 0x111b8fd9u, 0x13d88b7au\n    };\n    simplicity_assert(regression3);\n    regression3[0] = 0xb7; regression3[1] = 0x08;\n    regression3[sizeof_regression3 - 2] = 0x48; regression3[sizeof_regression3 - 1] = 0x20;\n    start = clock();\n    test_program(\"regression3\", regression3, sizeof_regression3, NULL, 0, SIMPLICITY_ERR_EXEC_MEMORY, cmr, NULL, NULL, NULL);\n    end = clock();\n    diff = (double)(end - start) / CLOCKS_PER_SEC;\n    bound = (double)(sizeof_regression3) * secondsPerWU;\n    printf(\"cpu_time_used by regression3: %f s.  (Should be less than %f s.)\\n\", diff, bound);\n    if (timing_flag) {\n      if (diff <= bound) {\n        successes++;\n      } else {\n        failures++;\n        printf(\"regression3 took too long.\\n\");\n      }\n    }\n    simplicity_free(regression3);\n  }\n  {\n    clock_t start, end;\n    double diff, bound;\n    start = clock();\n    test_program(\"regression4\", regression4, sizeof_regression4, NULL, 0, SIMPLICITY_NO_ERROR, NULL, NULL, NULL, NULL);\n    end = clock();\n    diff = (double)(end - start) / CLOCKS_PER_SEC;\n    bound = (double)(sizeof_regression4) * secondsPerWU;\n    printf(\"cpu_time_used by regression4: %f s.  (Should be less than %f s.)\\n\", diff, bound);\n    if (timing_flag) {\n      if (diff <= bound) {\n        successes++;\n      } else {\n        failures++;\n        printf(\"regression4 took too long.\\n\");\n      }\n    }\n  }\n}\n\nstatic void iden8mebi_test(void) {\n  /* iden composed with itself 2^23 times. */\n  const unsigned char iden8mebi[23] = {0xe1, 0x08};\n  const ubounded expectedCost = 1677721500; /* in milliWU */\n  clock_t start, end;\n  double diff, bound;\n  start = clock();\n  test_program(\"iden8mebi\", iden8mebi, sizeof(iden8mebi), NULL, 0, SIMPLICITY_NO_ERROR, NULL, NULL, NULL, &expectedCost);\n  end = clock();\n  diff = (double)(end - start) / CLOCKS_PER_SEC;\n  bound = (double)expectedCost / 1000. * secondsPerWU;\n\n  printf(\"cpu_time_used by iden8mebi: %f s.  (Should be less than %f s.)\\n\", diff, bound);\n  if (timing_flag) {\n    if (diff <= bound) {\n      successes++;\n    } else {\n      failures++;\n      printf(\"iden8mebi took too long.\\n\");\n    }\n  }\n}\nstatic void exactBudget_test(void) {\n  /* Core Simplicity program with a cost that is exactly 410000 milliWU */\n  const unsigned char program[] = {\n    0xe0, 0x09, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x02,\n    0x05, 0xb4, 0x6d, 0xa0, 0x80\n  };\n  const ubounded expectedCost = 410; /* in WU */\n\n  printf(\"Test exactBudget\\n\");\n\n  dag_node* dag;\n  type* type_dag;\n  combinator_counters census;\n  int_fast32_t len;\n  simplicity_err error, expected;\n  sha256_midstate ihr;\n  {\n    bitstream stream = initializeBitstream(program, sizeof(program));\n    len = simplicity_decodeMallocDag(&dag, simplicity_elements_decodeJet, &census, &stream);\n    simplicity_assert(dag);\n    simplicity_assert(0 < len);\n    error = simplicity_closeBitstream(&stream);\n    simplicity_assert(IS_OK(error));\n  }\n  error = simplicity_mallocTypeInference(&type_dag, simplicity_elements_mallocBoundVars, dag, (uint_fast32_t)len, &census);\n  simplicity_assert(IS_OK(error));\n  simplicity_assert(type_dag);\n  simplicity_assert(!dag[len-1].sourceType);\n  simplicity_assert(!dag[len-1].targetType);\n  {\n    bitstream stream = initializeBitstream(NULL, 0);\n    error = simplicity_fillWitnessData(dag, type_dag, (uint_fast32_t)len, &stream);\n    simplicity_assert(IS_OK(error));\n  }\n  error = simplicity_verifyNoDuplicateIdentityHashes(&ihr, dag, type_dag, (uint_fast32_t)len);\n  simplicity_assert(IS_OK(error));\n  {\n    ubounded cellsBound, UWORDBound, frameBound, costBound;\n    error = simplicity_analyseBounds(&cellsBound, &UWORDBound, &frameBound, &costBound, UBOUNDED_MAX, 0, UBOUNDED_MAX, dag, type_dag, (uint_fast32_t)len);\n    simplicity_assert(IS_OK(error));\n    simplicity_assert(1000*expectedCost == costBound);\n  }\n  error = evalTCOProgram(dag, type_dag, (uint_fast32_t)len, expectedCost, &expectedCost, NULL);\n  expected = SIMPLICITY_ERR_OVERWEIGHT;\n  if (expected == error) {\n    successes++;\n  } else {\n    failures++;\n    printf(\"Expected %d from evaluation, but got %d instead.\\n\", expected, error);\n  }\n  error = evalTCOProgram(dag, type_dag, (uint_fast32_t)len, expectedCost-1, &(ubounded){expectedCost-1}, NULL);\n  expected = SIMPLICITY_ERR_EXEC_BUDGET;\n  if (expected == error) {\n    successes++;\n  } else {\n    failures++;\n    printf(\"Expected %d from evaluation, but got %d instead.\\n\", expected, error);\n  }\n  error = evalTCOProgram(dag, type_dag, (uint_fast32_t)len, expectedCost, &(ubounded){expectedCost+1}, NULL);\n  expected = SIMPLICITY_ERR_OVERWEIGHT;\n  if (expected == error) {\n    successes++;\n  } else {\n    failures++;\n    printf(\"Expected %d from evaluation, but got %d instead.\\n\", expected, error);\n  }\n  error = evalTCOProgram(dag, type_dag, (uint_fast32_t)len, expectedCost-1, &expectedCost, NULL);\n  expected = SIMPLICITY_NO_ERROR;\n  if (expected == error) {\n    successes++;\n  } else {\n    failures++;\n    printf(\"Expected %d from evaluation, but got %d instead.\\n\", expected, error);\n  }\n  simplicity_free(type_dag);\n  simplicity_free(dag);\n}\n\nint main(int argc, char **argv) {\n  while (true) {\n    static struct option long_options[] = {\n        /* These options set a flag. */\n        {\"timing\", no_argument, &timing_flag, 1},\n        {\"no-timing\", no_argument, &timing_flag, 0},\n        {0, 0, 0, 0}\n      };\n    int opt_result = getopt_long(argc, argv, \"\", long_options, NULL);\n    if (-1 == opt_result) break;\n    if (0 == opt_result) continue;\n    exit(EXIT_FAILURE);\n  }\n  if (simplicity_sha256_compression_is_optimized()) {\n    printf(\"Sha optimization enabled.\\n\");\n    if (timing_flag) {\n      printf(\"Timings are checked.\\n\");\n    } else {\n      printf(\"Timings not checked.\\n\");\n    }\n  } else {\n    printf(\"Sha optimization disabled.\\n\");\n    if (timing_flag) {\n      printf(\"Timings cannot be checked.\\n\");\n    } else {\n      printf(\"Timings not checked.\\n\");\n    }\n    timing_flag = 0;\n  }\n  test_decodeUptoMaxInt();\n  test_hashBlock();\n  test_occursCheck();\n\n  test_hasDuplicates(\"hasDuplicates no duplicates testcase\", 0, rsort_no_duplicates, 10000);\n  test_hasDuplicates(\"hasDuplicates all duplicates testcase\", 1, rsort_all_duplicates, 10000);\n  test_hasDuplicates(\"hasDuplicates one duplicate testcase\", 1, rsort_one_duplicate, 10000);\n  test_hasDuplicates(\"hasDuplicates diagonal testcase\", 0, rsort_diagonal, 33);\n\n  test_program(\"ctx8Pruned\", ctx8Pruned, sizeof_ctx8Pruned, ctx8Pruned_witness, sizeof_ctx8Pruned_witness, SIMPLICITY_NO_ERROR, ctx8Pruned_cmr, ctx8Pruned_ihr, ctx8Pruned_amr, &ctx8Pruned_cost);\n  test_program(\"ctx8Unpruned\", ctx8Unpruned, sizeof_ctx8Unpruned, ctx8Unpruned_witness, sizeof_ctx8Unpruned_witness, SIMPLICITY_ERR_ANTIDOS, ctx8Unpruned_cmr, ctx8Unpruned_ihr, ctx8Unpruned_amr, &ctx8Unpruned_cost);\n  if (0 == memcmp(ctx8Pruned_cmr, ctx8Unpruned_cmr, sizeof(uint32_t[8]))) {\n    successes++;\n  } else {\n    failures++;\n    printf(\"Pruned and Unpruned CMRs are not the same.\\n\");\n  }\n  test_program(\"schnorr0\", schnorr0, sizeof_schnorr0, schnorr0_witness, sizeof_schnorr0_witness, SIMPLICITY_NO_ERROR, schnorr0_cmr, schnorr0_ihr, schnorr0_amr, &schnorr0_cost);\n  test_program(\"schnorr6\", schnorr6, sizeof_schnorr6, schnorr6_witness, sizeof_schnorr6_witness, SIMPLICITY_ERR_EXEC_JET, schnorr6_cmr, schnorr6_ihr, schnorr6_amr, &schnorr0_cost);\n  test_program(\"typeSkipTest\", typeSkipTest, sizeof_typeSkipTest, typeSkipTest_witness, sizeof_typeSkipTest_witness, SIMPLICITY_NO_ERROR, NULL, NULL, NULL, NULL);\n  test_elements();\n  exactBudget_test();\n  regression_tests();\n  iden8mebi_test();\n\n  printf(\"Successes: %d\\n\", successes);\n  printf(\"Failures: %d\\n\", failures);\n  return (0 == failures) ? EXIT_SUCCESS : EXIT_FAILURE;\n}\n"
  },
  {
    "path": "C/type.c",
    "content": "#include \"type.h\"\n\n#include <stdbool.h>\n\n#include \"precomputed.h\"\n#include \"simplicity_assert.h\"\n\n/* Given a the 'kind' of a Simplicity type, return the SHA-256 hash of its associated TMR tag.\n * This is the \"initial value\" for computing the type Merkle root for that type.\n */\nstatic sha256_midstate tmrIV(typeName kind) {\n  switch (kind) {\n   case ONE: return unitIV;\n   case SUM: return sumIV;\n   case PRODUCT: return prodIV;\n  }\n  /* Impossible to reach here (unless you call with uninitialized values). */\n  SIMPLICITY_UNREACHABLE;\n}\n\n/* Given a well-formed 'type_dag', compute the bitSizes, skips, and type Merkle roots of all subexpressions.\n * For all 'i', 0 <= 'i' < 'len',\n *   'type_dag[i].typeMerkleRoot' will be the TMR\n *   and 'type_dag[i].bitSize' will be the bitSize of the subexpression denoted by the slice\n *\n *     (type_dag[i + 1])type_dag.\n *\n *   and when 'type_dag[i]' represents a non-trivial 'PRODUCT' type, where one of the two type arguments a trivial type.\n *       then 'type_dag[i].skip' is the index of the largest subexpression of 'type_dag[i]' such that\n *        either 'type_dag[type_dag[i].skip]' is a 'SUM' type\n *            or 'type_dag[type_dag[i].skip]' is a 'PRODUCT' type of two non-trivial types.\n *\n * Precondition: type type_dag[len] and 'type_dag' is well-formed.\n */\nvoid simplicity_computeTypeAnalyses(type* type_dag, const size_t len) {\n  for (size_t i = 0; i < len; ++i) {\n    type_dag[i].skip = i;\n    switch (type_dag[i].kind) {\n     case ONE:\n      type_dag[i].bitSize = 0;\n      break;\n     case SUM:\n      type_dag[i].bitSize = bounded_max(type_dag[type_dag[i].typeArg[0]].bitSize, type_dag[type_dag[i].typeArg[1]].bitSize);\n      bounded_inc(&type_dag[i].bitSize);\n      break;\n     case PRODUCT:\n      type_dag[i].bitSize = bounded_add(type_dag[type_dag[i].typeArg[0]].bitSize, type_dag[type_dag[i].typeArg[1]].bitSize);\n      if (0 == type_dag[type_dag[i].typeArg[0]].bitSize) {\n        type_dag[i].skip = type_dag[type_dag[i].typeArg[1]].skip;\n      } else if (0 == type_dag[type_dag[i].typeArg[1]].bitSize) {\n        type_dag[i].skip = type_dag[type_dag[i].typeArg[0]].skip;\n      }\n    }\n\n    type_dag[i].typeMerkleRoot = tmrIV(type_dag[i].kind);\n\n    uint32_t block[16];\n    switch (type_dag[i].kind) {\n     case ONE: break;\n     case SUM:\n     case PRODUCT:\n      memcpy(block, type_dag[type_dag[i].typeArg[0]].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      memcpy(block + 8, type_dag[type_dag[i].typeArg[1]].typeMerkleRoot.s, sizeof(uint32_t[8]));\n      simplicity_sha256_compression(type_dag[i].typeMerkleRoot.s, block);\n    }\n  }\n}\n"
  },
  {
    "path": "C/type.h",
    "content": "/* This module defines the structure for Simplicity type DAGs and computes type Merkle roots. */\n#ifndef SIMPLICITY_TYPE_H\n#define SIMPLICITY_TYPE_H\n\n#include <stddef.h>\n#include \"bounded.h\"\n#include \"sha256.h\"\n#include \"simplicity_assert.h\"\n\ntypedef enum typeName\n  { ONE, SUM, PRODUCT }\ntypeName;\n\n/* A structure for Simplicity type DAGs. */\n/* :TODO: when 'back' is used as \"mutable\" scratch space, concurrent evaluation of Simplicity expressions that share\n * subexpressions and typing information is not possible.\n * Consider instead implementing static analysis to determine a maximum stack size needed for traversing types in an expression\n * in order to remove uses of 'back'.\n */\ntypedef struct type {\n  size_t typeArg[2];\n  union {\n    size_t skip; /* Used by 'typeSkip'. */\n    size_t back; /* Sometimes used as scratch space when traversing types. */\n  };\n  sha256_midstate typeMerkleRoot;\n  ubounded bitSize;\n  typeName kind;\n} type;\n\n/* We say a Simplicity type is trivial if it is the 'ONE' type, or the 'PRODUCT' of two trivial types.\n * A Simplicity type is a trivial type if and only if its bitSize is 0.\n */\n\n/* A well-formed type DAG is an array of 'type's,\n *\n *     type type_dag[n],\n *\n * such that\n *\n *     0 < n\n *\n * and\n *\n *     type_dag[0].kind == ONE.\n *\n * and for all 'i', 1 <= 'i' < 'n' and for all 'j', 0 <= 'j' < 2.\n *\n *     type_dag[i].kind \\in { SUM, PRODUCT } and type_dag[i].typeArg[j] < i.\n */\n\n/* Given a well-formed 'type_dag', compute the bitSizes, skips, and type Merkle roots of all subexpressions.\n * For all 'i', 0 <= 'i' < 'len',\n *   'type_dag[i].typeMerkleRoot' will be the TMR\n *   and 'type_dag[i].bitSize' will be the bitSize of the subexpression denoted by the slice\n *\n *     (type_dag[i + 1])type_dag.\n *\n *   and when 'type_dag[i]' represents a non-trivial 'PRODUCT' type, where one of the two type arguments a trivial type.\n *       then 'type_dag[i].skip' is the index of the largest subexpression of 'type_dag[i]' such that\n *        either 'type_dag[type_dag[i].skip]' is a 'SUM' type\n *            or 'type_dag[type_dag[i].skip]' is a 'PRODUCT' type of two non-trivial types.\n *\n * Precondition: type type_dag[len] and 'type_dag' is well-formed.\n */\nvoid simplicity_computeTypeAnalyses(type* type_dag, size_t len);\n\n/* Return the index of the largest subexpression of 'type_dag[i]' (possibly 'i' itself) that is either\n * (1) a 'SUM' type;\n * (2) a 'PRODUCT' type of two non-trivial type arguments.\n *\n * If there is no such subexpression at all, i.e. when 'type_dag[i]' is a trivial type, return 0\n * (which is the index of the 'ONE' type).\n *\n * This functions is used for fast traversals of type expressions, skipping over trivial subexpressions,\n * as this function runs in in constant time.\n */\nstatic inline size_t typeSkip(size_t i, const type* type_dag) {\n  if (0 == type_dag[i].bitSize) return 0;\n  if (PRODUCT == type_dag[i].kind &&\n      (0 == type_dag[type_dag[i].typeArg[0]].bitSize || 0 == type_dag[type_dag[i].typeArg[1]].bitSize)) {\n    return type_dag[i].skip;\n  }\n  return i;\n}\n\n/* Precondition: type type_dag[i] and 'type_dag' is well-formed.\n *               if type_dag[i] is a non-trival 'PRODUCT', then both of its two type arguments are non-trival.\n * Postconditon: value == type_dag[i]\n */\nstatic inline void setTypeBack(size_t i, type* type_dag, size_t value) {\n  /* .back cannot be used if .skip is in use.\n     Specifically it cannot be a non-trivial 'PRODUCT' type where one of its two type arguments is a trivial type.\n   */\n  simplicity_assert((PRODUCT != type_dag[i].kind ||\n                     0 == type_dag[i].bitSize ||\n                     (0 != type_dag[type_dag[i].typeArg[0]].bitSize &&\n                      0 != type_dag[type_dag[i].typeArg[1]].bitSize)));\n  type_dag[i].back = value;\n}\n#endif\n"
  },
  {
    "path": "C/typeInference.c",
    "content": "#include \"typeInference.h\"\n\n#include <stdbool.h>\n#include \"bounded.h\"\n#include \"limitations.h\"\n#include \"simplicity_alloc.h\"\n#include \"simplicity_assert.h\"\n\nstatic_assert(DAG_LEN_MAX <= (SIZE_MAX - NUMBER_OF_TYPENAMES_MAX) / 4, \"TYPE_DAG_LEN_MAX doesn't fit in size_t.\");\n#define TYPE_DAG_LEN_MAX (NUMBER_OF_TYPENAMES_MAX + 4*DAG_LEN_MAX)\n\n/* Every subexpression in a Simplicity expression has a unification variable for its inferred source and target type. */\ntypedef struct unification_arrow {\n  unification_var source, target;\n} unification_arrow;\n\n/* Returns the representative of this variable's equivalence class.\n * Note: the 'parent' pointers of some variables within this equivalence class may be adjusted (to point more directly to the\n * representative).\n *\n * Precondition: NULL != alpha\n *\n * Postcondition: NULL == result_value->parent\n */\nstatic unification_var* findRoot(unification_var* alpha) {\n  /* During unification, when '.rank' fields are active, the value of 'alpha->rank' strictly increases during this loop.\n   * If 'alpha->rank' = 'i', then there must be at least 2^'i' unification variables referencing (indirectly) 'alpha'.\n   * Therefore, this loop terminates in at most log_2('n')/2 steps where 'n' is the number of unification variables in 'alpha's\n   * equivalence class.\n   * This bound holds even during freezing when 'alpha->rank' may not be activated.\n   *\n   * Note: the total number of unification variables created for type inference is linearly bounded by the number of nodes\n   * in the Simplicity expression being inferred's DAG.\n   *\n   * According to ``Worst-Case Analysis of Set Union Algorithms'' by Robert E. Tarjan and Jan van Leeuwen (1984)\n   * the \"path halving\" method used in this implementation is adequate to ensure that the amortized time complexity is\n   * O(InvAck('n')) and ``for all practical purposes InvAck('n') a constant no larger than four''.\n   */\n  while (alpha->parent != NULL) {\n    if (alpha->parent->parent != NULL) alpha->parent = alpha->parent->parent;\n    alpha = alpha->parent;\n  }\n  return alpha;\n}\n\n/* Begin attempt to add a new binding, 'bound', to a unification variable 'alpha' representing its equivalence class.\n * If 'alpha' is a free variable, it becomes a bound to a copy of 'bound' and 'true' is returned.\n * If 'alpha' is already bound to the same kind of type, new unification constraints may be added by overwriting '**cont'\n * and putting more elements into the '*cont' stack and 'true' is returned.\n * Hence, '*cont' must be a non-empty stack whose top element is scratch space available to be overwritten.\n * If 'alpha' is already bound to the same kind of non-trivial binding then '*bindings_used' is decremented\n * and 'bound->cont' may become active.\n *\n * In cases where no new unification constraints are need, the top element of '*cont' is popped off the stack,\n * removing the scratch item.\n *\n * If 'alpha' is already bound to a different kind of type, then 'false' is returned.\n *\n * If 'false' is returned, then '*alpha', '*bound', '*cont', '*bindings_used',\n * and values referenced by these structures may be modified.\n *\n * Preconditon: NULL != alpha and NULL == alpha->parent;\n *              NULL != bound;\n *              &alpha->bound != bound\n *              NULL != cont and '*cont' is a non-empty stack;\n *              NULL != bindings_used\n */\nstatic bool applyBinding_cont(unification_var* alpha, binding* bound, unification_cont** cont, size_t* bindings_used) {\n  if (!alpha->isBound) {\n    /* alpha is currently a free variable.  Copy the provided binding. */\n    alpha->isBound = true;\n    alpha->bound = *bound;\n    *cont = (*cont)->next;\n    return true;\n  }\n\n  if (&alpha->bound == bound) {\n    simplicity_assert(false); /* The algorithm should never try to bind an already bound variable to it's own binding. */\n\n    /* However, if it does happen then just return successfully without pushing any new unification constraints. */\n    *cont = (*cont)->next;\n    return true;\n  }\n\n  if (alpha->bound.kind != bound->kind) return false; /* Unification failure */\n  /* Otherwise 'bound' is bound to the same kind of type as 'alpha's. */\n\n  if (ONE == bound->kind) {\n    /* 'bound' is a trivial binding. */\n    *cont = (*cont)->next;\n    return true;\n  } else {\n    /* 'bound' is a non-trivial binding.\n     * Push two new pairs of the 'alpha->bound' and 'bound' type's unification variables to the stack of variables to be unified\n     * by overwriting the top of the stack and slipping a new stack item underneath it.\n     */\n\n    (*cont)->alpha = alpha->bound.arg[0];\n    (*cont)->beta = bound->arg[0];\n    /* 'bound' will not be used further, so it is safe to activate 'bound->cont'.  */\n    bound->cont = (unification_cont){ .alpha = alpha->bound.arg[1]\n                                    , .beta = bound->arg[1]\n                                    , .next = (*cont)->next\n                                    };\n    (*cont)->next = &(bound->cont);\n    simplicity_assert(0 < *bindings_used);\n    (*bindings_used)--;\n  }\n  return true;\n}\n\n/* Unify a stack of pairs of unification variables.\n * If any unification fails, then NULL is returned.\n * If all unifications are successful, the representative of the equivalence class of the top pair of unified variables\n * from the stack is returned.\n * '*bindings_used' is decremented by the number of pairs of (non-trivial) bindings that are successfully unified.\n *\n * If 'NULL' is returned, then '*cont', '*bindings_used', and values referenced by these structures may be modified.\n *\n * Precondition: 'cont' is a non-empty stack;\n *               All of the 'unification_var's accessible through 'cont' have their '.rank' fields active;\n *               NULL != bindings_used\n */\nstatic unification_var* unify_cont(unification_cont* cont, size_t* bindings_used) {\n  unification_var* result = NULL;\n\n  /* Each time we go through this loop, the stack size of 'cont' either increases by 1 or decreases by 1.\n   * Whenever the stack size increases by 1, at the same time '*bindings_used' decreases by 1.\n   *\n   * For the above reason, the total number of times this loop iterates summed over all calls to 'unify_cont' cannot exceed\n   *\n   *     (2 * the total number of bindings created + the number of times 'unify_cont' is called).\n   *\n   * The total number of bindings created is bounded linearly in the number of nodes in the Simplicity expression's DAG.\n   * The total number of calls to 'unify_cont' (via 'unify' and 'applyBinding') is bounded\n   * linearly in the number of nodes in the Simplicity expression's DAG.\n   * Therefore the total number of times this loop iterates summed over all calls to 'unify_cont' is bounded\n   * linearly in the number of nodes in the Simplicity DAG.\n   */\n  while (cont) {\n    unification_var* alpha = findRoot(cont->alpha);\n    unification_var* beta = findRoot(cont->beta);\n\n    if (alpha == beta) {\n      /* 'cont->alpha' and 'cont->beta' are already equivalent. */\n      cont = cont->next;\n    } else {\n      /* We will be making 'alpha' a parent of 'beta', so swap the variables to ensure that 'alpha's rank\n       * is at least as large as 'beta'.\n       */\n      if (alpha->rank < beta->rank) {\n         unification_var* tmp = beta; beta = alpha; alpha = tmp;\n      }\n\n      /* Make 'beta' equivalent to 'alpha'. */\n      beta->parent = alpha;\n\n      if (beta->isBound) {\n         /* Copy/unify 'beta's binding to/with 'alpha'. */\n         if (!applyBinding_cont(alpha, &beta->bound, &cont, bindings_used)) return NULL; /* Unification failure */\n      } else {\n        /* 'beta' used to be a free variable. */\n        cont = cont->next;\n      }\n\n      /* Ensure 'alpha's rank exceeds 'beta's rank.\n       * Note that if 'alpha->rank' == 'beta->rank' then the two variables equivalence classes each had at least\n       * 2^'alpha->rank' variables in each of them.\n       * Therefore the unified equivalence classes will now have at least 2^'alpha->rank + 1' variables,\n       * which will be compatible with 'alpha's increased rank.\n       */\n      if (alpha->rank == beta->rank) alpha->rank++;\n    }\n\n    /* Return the representative of the unified variable of the two inputs that was on the top of the stack\n     * (as long as all other unifications are successful).\n     */\n    if (!result) result = alpha;\n  }\n\n  return result;\n}\n\n/* Add a new binding, 'bound', to a unification variable 'alpha'.\n * If 'alpha' is already bound to a type that doesn't unify with 'bound', then 'false' is returned.\n * Otherwise variables of 'bound's bindings and 'alpha's bindings (if any) are recursively unified and 'true' is returned.\n * '*bindings_used' is decremented by the number of pairs of (non-trivial) bindings that are successfully unified.\n *\n * If 'false' is returned, then '*alpha', '*bound', '*bindings_used', and values referenced by these structures may be modified.\n *\n * Precondition: NULL != alpha;\n *               NULL != bound;\n *               All of the 'unification_var's accessible through 'alpha' and 'bound' (including 'alpha' itself)\n *                 have their '.rank' fields active;\n *               NULL != bindings_used\n */\nstatic bool applyBinding(unification_var* alpha, binding* bound, size_t* bindings_used) {\n  unification_cont scratch = {0};\n  unification_cont* cont = &scratch;\n  if (!applyBinding_cont(findRoot(alpha), bound, &cont, bindings_used)) return false;\n  return NULL == cont || unify_cont(cont, bindings_used);\n}\n\n/* Unify a pair of unification variables.\n * If unification fails, then NULL is returned.\n * If unification is successful, the representative of the equivalence class of unified pair of variables is returned.\n * If alpha or beta is NULL, then NULL is returned.  This allows you to chain calls to 'unify'.\n *\n * '*bindings_used' is decremented by the number of pairs of (non-trivial) bindings that are successfully unified.\n *\n * If unification fails, then '*alpha', '*beta', '*bindings_used', and values referenced by these structures may be modified.\n *\n * Precondition: NULL != bindings_used;\n *               All of the 'unification_var's accessible through 'alpha' and 'beta' (including themselves if they are not NULL)\n *                 have their '.rank' fields active.\n */\nstatic unification_var* unify(unification_var* alpha, unification_var* beta, size_t* bindings_used) {\n  return alpha && beta ? unify_cont(&(unification_cont){ .alpha = alpha, .beta = beta }, bindings_used) : NULL;\n}\n\n/* Given a census containing a tally of the different tags that occurs in some Simplicity DAG,\n * return an upper bound on number of extra unification variables, 'extra_var',\n * that the 'typeInference' function will end up needing for that DAG.\n *\n * Precondition: NULL != census\n */\nstatic size_t max_extra_vars(const combinator_counters* census) {\n  return 4*(census->case_cnt)\n       +   (census->disconnect_cnt)\n       +   (census->injl_cnt)\n       +   (census->injr_cnt)\n       +   (census->take_cnt)\n       +   (census->drop_cnt);\n}\n\n/* Solve the constraints of source and target types of each subexpression in a Simplicity DAG.\n *\n * If the Simplicity DAG, 'dag', has a principal type (including constraints due to sharing of subexprssions),\n * then 'arrow[i]'s and 'source' and 'target' fields are set to unification variables\n * that are bound to the principal source and target types of subexpression denoted by the slice '(dag_nodes[i + 1])dag'.\n * If the 'dag' does not have a principal type then either 'SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION' is returned\n * or there will be a cycle in the graph of the bindings of the unification variables accessible from the resulting 'arrows' array.\n *\n * If 'SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION' is not returned, then 'SIMPLICITY_NO_ERR' is returned.\n *\n * If 'SIMPLICITY_NO_ERR' is not returned,\n * then '*arrow', '*extra_var', '*word256Type', '*bindings_used', and values referenced by these structures may be modified.\n *\n * Precondition: unification_arrow arrow[len];\n *               dag_node dag[len] is well-formed;\n *               unification_var extra_var[max_extra_vars(&census)]\n *                 where 'census' contains a tally of the different tags that occur in 'dag';\n *               unification_var bound_var[N];\n *               forall '0 <= i < len', if 'dag[i].tag == JET'\n *                                      then 'dag[i].sourceIx < N' and 'dag[i].targetIx < N'\n *                                      and if 'jet[i].tag == WORD'\n *                                      then 'dag[i].targetIx < N'\n *               word256_ix < N and 'bound_var[word256_ix]' is bound to the type 'TWO^256';\n *               '*bindings_used' is at least the number of unification variables that have\n *                 non-trivial bindings that are accessible from the 'bound_var' array.\n *\n * Postcondition: if 'SIMPLICITY_NO_ERR' is returned\n *                  then '*bindings_used' is at least the number of unification variables that have non-trivial bindings\n *                    that are accessible from the 'arrow' array and 'bound_var' array.\n *                  and 'arrow' is a graph of bindings that satisfies the typing constraints of imposed by 'dag'.\n */\nstatic simplicity_err typeInference( unification_arrow* arrow, const dag_node* dag, const uint_fast32_t len,\n                                     unification_var* extra_var, unification_var* bound_var, size_t word256_ix, size_t* bindings_used\n                                   ) {\n  for (uint_fast32_t i = 0; i < len; ++i) {\n    switch (dag[i].tag) {\n      #define UNIFY(a, b) { if (!unify((a), (b), bindings_used)) return SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION; }\n      #define APPLY_BINDING(a, b) { if (!applyBinding((a), (b), bindings_used)) return SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION; }\n     case COMP:\n      arrow[i] = (unification_arrow){0};\n      UNIFY(&(arrow[dag[i].child[0]].source), &(arrow[i].source));\n      UNIFY(&(arrow[dag[i].child[1]].target), &(arrow[i].target));\n      UNIFY(&(arrow[dag[i].child[0]].target), &(arrow[dag[i].child[1]].source));\n      break;\n     case ASSERTL:\n     case ASSERTR:\n     case CASE:\n      *bindings_used += 2;\n      extra_var[0] = extra_var[1] = extra_var[2] = (unification_var){0};\n      extra_var[3] = (unification_var)\n       { .isBound = true\n       , .bound = { .kind = SUM\n                  , .arg = { &extra_var[0], &extra_var[1] }\n       }          };\n      arrow[i] = (unification_arrow){ .source =\n        { .isBound = true\n        , .bound = { .kind = PRODUCT\n                   , .arg = { &extra_var[3], &extra_var[2] }\n        }          } };\n      if (ASSERTR != dag[i].tag) {\n        *bindings_used += 1;\n        APPLY_BINDING(&(arrow[dag[i].child[0]].source), &((binding)\n          { .kind = PRODUCT\n          , .arg = { &extra_var[0], &extra_var[2] }\n          }));\n        UNIFY(&(arrow[dag[i].child[0]].target), &(arrow[i].target));\n      }\n      if (ASSERTL != dag[i].tag) {\n        *bindings_used += 1;\n        APPLY_BINDING(&(arrow[dag[i].child[1]].source), &((binding)\n          { .kind = PRODUCT\n          , .arg = { &extra_var[1], &extra_var[2] }\n          }));\n        UNIFY(&(arrow[dag[i].child[1]].target), &(arrow[i].target));\n      }\n      extra_var += 4;\n      break;\n     case PAIR:\n      *bindings_used += 1;\n      arrow[i] = (unification_arrow){ .target =\n        { .isBound = true\n        , .bound = { .kind = PRODUCT\n                   , .arg = { &(arrow[dag[i].child[0]].target), &(arrow[dag[i].child[1]].target) }\n        }          } };\n      UNIFY(unify(&(arrow[dag[i].child[0]].source), &(arrow[dag[i].child[1]].source), bindings_used), &(arrow[i].source));\n      break;\n     case DISCONNECT:\n      *bindings_used += 3;\n      *extra_var = (unification_var){0};\n      arrow[i] = (unification_arrow){ .target =\n        { .isBound = true\n        , .bound = { .kind = PRODUCT\n                   , .arg = { extra_var, &(arrow[dag[i].child[1]].target) }\n        }          } };\n      APPLY_BINDING(&(arrow[dag[i].child[0]].source), &((binding)\n        { .kind = PRODUCT\n        , .arg = { &(bound_var[word256_ix]), &(arrow[i].source) }\n        }));\n      APPLY_BINDING(&(arrow[dag[i].child[0]].target), &((binding)\n        { .kind = PRODUCT\n        , .arg = { extra_var, &(arrow[dag[i].child[1]].source) }\n        }));\n      extra_var++;\n      break;\n     case INJL:\n     case INJR:\n      *bindings_used += 1;\n      *extra_var = (unification_var){0};\n      arrow[i] = (unification_arrow){ .target =\n        { .isBound = true\n        , .bound = { .kind = SUM\n                   , .arg = { INJL == dag[i].tag ? &(arrow[dag[i].child[0]].target) : extra_var\n                            , INJL == dag[i].tag ? extra_var : &(arrow[dag[i].child[0]].target)\n        }          }        } };\n      UNIFY(&(arrow[dag[i].child[0]].source), &(arrow[i].source));\n      extra_var++;\n      break;\n     case TAKE:\n     case DROP:\n      *bindings_used += 1;\n      *extra_var = (unification_var){0};\n      arrow[i] = (unification_arrow){ .source =\n        { .isBound = true\n        , .bound = { .kind = PRODUCT\n                   , .arg = { TAKE == dag[i].tag ? &(arrow[dag[i].child[0]].source) : extra_var\n                            , TAKE == dag[i].tag ? extra_var : &(arrow[dag[i].child[0]].source)\n        }          }        } };\n      UNIFY(&(arrow[dag[i].child[0]].target), &(arrow[i].target));\n      extra_var++;\n      break;\n     case IDEN:\n      arrow[i] = (unification_arrow){0};\n      UNIFY(&(arrow[i].source), &(arrow[i].target));\n      break;\n     case UNIT:\n      /* UNIT only imposes trivial bindings, so we do not increment 'bindings_used'. */\n      arrow[i] = (unification_arrow){ .target = { .isBound = true, .bound = { .kind = ONE } } };\n      break;\n     case HIDDEN:\n     case WITNESS:\n      arrow[i] = (unification_arrow){0};\n      break;\n     case JET:\n      arrow[i] = (unification_arrow){0};\n      UNIFY(&(bound_var[dag[i].sourceIx]),&arrow[i].source);\n      UNIFY(&(bound_var[dag[i].targetIx]),&arrow[i].target);\n      break;\n     case WORD:\n      /* WORD only imposes trivial bindings, so we do not increment 'bindings_used'. */\n      arrow[i] = (unification_arrow){ .source = { .isBound = true, .bound = { .kind = ONE } } };\n      UNIFY(&(bound_var[dag[i].targetIx]),&arrow[i].target);\n      #undef APPLY_BINDING\n      #undef UNIFY\n    }\n  }\n\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* Determine if the representative of an equivalence class of unification variables already has a reference\n * to a frozen version of its bound type.\n *\n * Note that free variables and variables bound to the 'ONE' type are automatically always frozen.\n *\n * Precondition: NULL == var->parent\n */\nstatic bool isFrozen(unification_var* var) {\n  simplicity_assert(!var->isBound || ONE != var->bound.kind || 0 == var->bound.frozen_ix);\n  return !var->isBound || ONE == var->bound.kind || var->bound.frozen_ix;\n}\n\n/* Given the representative of an equivalence class of unification variables that already has a reference to a frozen version\n * of its bound type, return that reference.\n *\n * Precondition: NULL == var->parent;\n *               isFrozen(var)\n */\nstatic size_t getFrozenIx(unification_var* var) {\n  return var->isBound ? var->bound.frozen_ix : 0;\n}\n\n/* Set '*result' to the index within 'type_dag' that contains an instance type bound by 'var' where free variables are instantiated\n * at the ONE type, recursively adding new nodes to 'type_dag' as necessary.\n * '*type_dag_used' will be incremented by the number of new 'type_dag' nodes created.\n *\n * If it is impossible to create a required instance (due to a cycle in the bindings reachable by 'var'), then 'false' is returned,\n * otherwise 'true' is returned.\n *\n * If 'false' is returned, then '*result', '*type_dag', '*type_dag_used', and values referenced by these structures may be modified.\n *\n * Precondition: NULL != result;\n *               type type_dag[*type_dag_used + n]\n *                 where 'n' is the number of unfrozen unification variables that have non-trivial bindings\n *                   that are accessible from 'var' array;\n *               type type_dag[*type_dag_used] is well-formed;\n *               NULL != type_dag_used;\n *               NULL != var\n *\n * Postcondition: If 'true' is returned, then type type_dag[*type_dag_used] is well-formed\n */\nstatic bool freeze(size_t* result, type* type_dag, size_t* type_dag_used, unification_var* var) {\n  var = findRoot(var);\n\n  if (isFrozen(var)) {\n    *result = getFrozenIx(var);\n    return true;\n  }\n\n  /* 'var' is not frozen, and therefore it must have a non-trivial binding.\n   * Create a one item stack of unification variables 'var' to be frozen.\n   */\n  var->next = NULL;\n  simplicity_assert(!var->bound.occursCheck);\n  var->bound.occursCheck = true;\n\n  /* Attempt to freeze all variables on the stack, pushing new variables onto the stack to recursively freeze them if needed.\n   *\n   * All variables in the stack are representatives of their equivalence class and have just had their 'occursCheck' flag changed\n   * from 'false' to 'true'.\n   * Variables never change their 'occursCheck' flag back from 'true' to 'false'.\n   * Variables are only removed from the stack after being frozen.\n   * Each time we go through this loop, the stack size either increases by 1 or decreases by 1.\n   * Therefore the total number of times this loop iterates summed over all calls to 'freeze' is bounded by\n   * twice the number of unification variable (representatives) with non-trivial bindings.\n   * (\"twice\" because once to add the variable to the stack and once to remove the variable from the stack).\n   *\n   * Note that number of unification_variables is bound linearly in the number of nodes in the Simplicity DAG.\n   */\n  while (var) {\n    unification_var* typeArg[2] = { findRoot(var->bound.arg[0]), findRoot(var->bound.arg[1]) };\n    if (!isFrozen(typeArg[0])) {\n      /* The first type argument's representative isn't frozen.  Add it to the stack and immediately attempt to freeze it. */\n      if (typeArg[0]->bound.occursCheck) return false; /* Occurs check failure. */\n      typeArg[0]->bound.occursCheck = true;\n      typeArg[0]->next = var;\n      var = typeArg[0];\n    } else if (!isFrozen(typeArg[1])) {\n      /* The second type argument's representative isn't frozen.  Add it to the stack and immediately attempt to freeze it. */\n      if (typeArg[1]->bound.occursCheck) return false; /* Occurs check failure. */\n      typeArg[1]->bound.occursCheck = true;\n      typeArg[1]->next = var;\n      var = typeArg[1];\n    } else {\n      /* Both the type argument's representatives are frozen.\n       * Create a new entry in the 'type_dag' for 'var's binding and freeze 'var'.\n       */\n      *result = var->bound.frozen_ix = (*type_dag_used)++;\n      type_dag[var->bound.frozen_ix] = (type)\n        { .kind = var->bound.kind\n        , .typeArg = { getFrozenIx(typeArg[0]), getFrozenIx(typeArg[1]) }\n        };\n      var = var->next;\n    }\n  }\n\n  return true;\n}\n\n/* Create a type DAG that supports all the type annotations of the Simplicity expression, 'dag',\n * and the input and output types of whole expression.\n *\n * If the Simplicity DAG, 'dag', has a principal type (including constraints due to sharing of subexpressions),\n * and 'arrow[i]'s and 'source' and 'target' field's unification variables are bound to the principal source and target types\n * of subexpression denoted by the slice '(dag_nodes[i + 1])dag', then we create a well-formed 'type_dag' (see 'type.h')\n * that includes the input and output types for every subexpression in 'dag', with all free type variables instantiated to the type\n * 'ONE' and add references to these type annotations to 'dag'\n * and returns 'SIMPLICITY_NO_ERROR'.\n *\n * The type Merkle roots of the 'type_dag' are also filled in.\n *\n * We say 'dag' is \"well-typed\" if it is a well-formed 'dag' with source and target types on all subexpressions,\n * referencing a well-formed 'type_dag', that satisfies all the typing constraints of Simplicity.\n * Hidden nodes are not actually typed and are instead assigned references to the type 'ONE' for their input and output types.\n *\n * If the Simplicity DAG, 'dag' does not have a principal type, yet the precondition on 'arrow' below is still satisfied,\n * then there must be a cycle in the graph of bindings accessible through the 'arrow' array,\n * and in this case we return 'SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK'.\n *\n * In either case, '*arrow', and values referenced by these structures may be modified.\n *\n * If 'SIMPLICITY_NO_ERROR' is not returned, then the 'type_dag' array, and the '.sourceType', '.targetType' within the 'dag' array may be modified.\n *\n * Precondition: type type_dag[1 + n]\n *                 where 'n' is the number of unification variables that have non-trivial bindings\n *                   that are accessible from the 'arrow' array;\n *               dag_node dag[len] is well-formed;\n *               unification_arrow arrow[len] is a graph of bindings that satisfies the typing constraints of imposed by 'dag'.\n */\nstatic simplicity_err freezeTypes(type* type_dag, dag_node* dag, unification_arrow* arrow, const size_t len) {\n  /* First entry of type_dag gets assigned to the ONE type. */\n  type_dag[0] = (type){ .kind = ONE };\n  size_t type_dag_used = 1;\n\n  for (size_t i = 0; i < len; ++i) {\n    if (!(freeze(&(dag[i].sourceType), type_dag, &type_dag_used, &(arrow[i].source)) &&\n          freeze(&(dag[i].targetType), type_dag, &type_dag_used, &(arrow[i].target)))) {\n      return SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK;\n    }\n  }\n\n  simplicity_computeTypeAnalyses(type_dag, type_dag_used);\n\n  return SIMPLICITY_NO_ERROR;\n}\n\n/* If the Simplicity DAG, 'dag', has a principal type (including constraints due to sharing of subexpressions),\n * then allocate a well-formed type DAG containing all the types needed for all the subexpressions of 'dag',\n * with all free type variables instantiated at ONE, and set '*type_dag' to this allocation,\n * and update the '.sourceType' and '.targetType' fields within each node of the 'dag' 'type_dag[dag[i].sourceType]'\n * and 'type_dag[dag[i].targetType]' are the inferred types of the Simplicity subexpression at dag[i].\n *\n * If malloc fails, returns 'SIMPLICITY_ERR_MALLOC'.\n * If the Simplicity DAG, 'dag', has no principal type (because it has a type error), then '*type_dag' is set to NULL,\n * and either 'SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION' or 'SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK' is returned.\n * Otherwise 'SIMPLICITY_NO_ERROR' is returned.\n *\n * Precondition: NULL != type_dag;\n *               dag_node dag[len] is well-formed;\n *               '*census' contains a tally of the different tags that occur in 'dag'.\n *\n * Postcondition: if the return value is 'SIMPLICITY_NO_ERROR'\n *                then either NULL == '*type_dag'\n *                     or 'dag' is well-typed with '*type_dag' and without witness values\n *                if the return value is not 'SIMPLICITY_NO_ERROR' then 'NULL == *type_dag'\n */\nsimplicity_err simplicity_mallocTypeInference(type** type_dag, simplicity_callback_mallocBoundVars mallocBoundVars, dag_node* dag, const uint_fast32_t len, const combinator_counters* census) {\n  *type_dag = NULL;\n  static_assert(DAG_LEN_MAX <= SIZE_MAX / sizeof(unification_arrow), \"arrow array too large.\");\n  static_assert(1 <= DAG_LEN_MAX, \"DAG_LEN_MAX is zero.\");\n  static_assert(DAG_LEN_MAX - 1 <= UINT32_MAX, \"arrow array index does not fit in uint32_t.\");\n  simplicity_assert(1 <= len);\n  simplicity_assert(len <= DAG_LEN_MAX);\n  unification_arrow* arrow = simplicity_malloc(len * sizeof(unification_arrow));\n  unification_var* bound_var = NULL;\n  size_t word256_ix, extra_var_start;\n  const size_t orig_bindings_used = mallocBoundVars(&bound_var, &word256_ix, &extra_var_start, max_extra_vars(census));\n  size_t bindings_used = orig_bindings_used;\n\n  static_assert(1 <= NUMBER_OF_TYPENAMES_MAX, \"NUMBER_OF_TYPENAMES_MAX is zero.\");\n  simplicity_assert(orig_bindings_used <= NUMBER_OF_TYPENAMES_MAX - 1);\n\n  simplicity_err result = arrow && bound_var ? SIMPLICITY_NO_ERROR : SIMPLICITY_ERR_MALLOC;\n  if (IS_OK(result)) {\n    result = typeInference(arrow, dag, len, bound_var + extra_var_start, bound_var, word256_ix, &bindings_used);\n  }\n  if (IS_OK(result)) {\n    /* :TODO: constrain the root of the dag to be a Simplicity program: ONE |- ONE */\n    static_assert(TYPE_DAG_LEN_MAX <= SIZE_MAX / sizeof(type), \"type_dag array too large.\");\n    static_assert(1 <= TYPE_DAG_LEN_MAX, \"TYPE_DAG_LEN_MAX is zero.\");\n    static_assert(TYPE_DAG_LEN_MAX - 1 <= UINT32_MAX, \"type_dag array index does not fit in uint32_t.\");\n    /* 'bindings_used' is at most 4*len plus the initial value of 'bindings_used' set by 'mallocBoundVars'. */\n    simplicity_assert(bindings_used <= orig_bindings_used + 4*len);\n    *type_dag = simplicity_malloc((1 + bindings_used) * sizeof(type));\n    result = *type_dag ? SIMPLICITY_NO_ERROR : SIMPLICITY_ERR_MALLOC;\n    if (IS_OK(result)) {\n      result = freezeTypes(*type_dag, dag, arrow, len);\n    }\n    if (!IS_OK(result)) {\n      simplicity_free(*type_dag);\n      *type_dag = NULL;\n    }\n  }\n\n  simplicity_free(arrow);\n  simplicity_free(bound_var);\n  return result;\n}\n"
  },
  {
    "path": "C/typeInference.h",
    "content": "/* This module provides function for running monomorphic type inference over Simplicity DAGs. */\n#ifndef SIMPLICITY_TYPEINFERENCE_H\n#define SIMPLICITY_TYPEINFERENCE_H\n\n#include \"dag.h\"\n#include \"type.h\"\n\n/* Forward declarations for recursive data structures. */\ntypedef struct unification_cont unification_cont;\ntypedef struct unification_var unification_var;\n\n/* 'unification_cont' is a stack element holding a pair of variables to be unified.\n * 'next' points to the rest of the stack or NULL if this is the bottom of the stack.\n */\nstruct unification_cont {\n  unification_var* alpha;\n  unification_var* beta;\n  unification_cont* next;\n};\n\n/* We say that a value 'cont' of type 'unification_cont*' is a stack when\n * (a) 'NULL == cont', in which case we say 'cont' is an empty stack,\n * or\n * (b) 'NULL != cont', 'NULL != cont->alpha', 'NULL != cont->beta', and 'cont->next' is a stack,\n * in which case we say 'cont' is a non-empty stack.\n */\n\n/* A binding for a bound unification variable.\n * 'kind' is the kind of Simplicity type for this binding.\n * When 'kind' is 'ONE' then this is a called \"trivial\" binding and 'arg' is not used.\n * When 'kind' is in { 'SUM', 'PRODUCT' } then this is called a \"non-trivial\" binding\n * and 'arg[0]' and 'arg[1]' are pointers to variables for the type's arguments.\n *\n * During freezing, the 'occursCheck' flag may be set to help detect occurs check failures (a.k.a cyclic types).\n * After freezing, 'frozen_ix' refers to the index within some 'type' array that holds the frozen version of this binding.\n *\n * When a binding is unused (e.g. when a unification_var has a non-NULL 'parent'), unification may activate 'cont' as scratch space;\n */\ntypedef union binding {\n  struct {\n    unification_var* arg[2];\n    size_t frozen_ix;\n    typeName kind;\n    bool occursCheck;\n  };\n  unification_cont cont; /* unification uses this field as scratch space. */\n} binding;\n\n/* A unification variable.\n * When 'NULL == parent' then this variable is the representative of its equivalence class.\n * When 'NULL == parent' and '!isBound' this (and all equivalent variables) is a free unification variable.\n * When 'NULL == parent' and 'isBound' this (and all equivalent variables) is a bound unification variable\n *   with 'bound' holding its binding (and bound.kind is active).\n * When 'NULL != parent' then this variable is equivalent to '*parent' and 'isBound' and 'bound' are not used.\n *\n * During unification 'rank' is active and when 'NULL != parent' then 'rank < parent->rank'.\n * Also when 'rank' is active, there are at least 2^'rank' unification variables in this unification variable's equivalence class.\n *\n * After unification is completed, the freeze function may activate 'next' as scratch space.\n *\n * This structure is designed so that initializing it with '{0}' / implicit static initialization\n * produces a fresh free unification variable.\n */\nstruct unification_var {\n  unification_var* parent;\n  binding bound;\n  union {\n    int rank;\n    unification_var* next; /* freezing uses this field as scratch space. */\n  };\n  bool isBound;\n};\n\n/* Allocate a fresh set of unification variables bound to at least all the types necessary\n * for all the jets that can be created by 'simplicity_callbac_decodeJet', and also the type 'TWO^256',\n * and also allocate space for 'extra_var_len' many unification variables.\n * Return the number of non-trivial bindings created.\n *\n * However, if malloc fails, then return 0.\n *\n * Precondition: NULL != bound_var;\n *               NULL != word256_ix;\n *               NULL != extra_var_start;\n *               extra_var_len <= 6*DAG_LEN_MAX;\n *\n * Postcondition: Either '*bound_var == NULL' and the function returns 0\n *                or 'unification_var (*bound_var)[*extra_var_start + extra_var_len]' is an array of unification variables\n *                   such that for any 'jet : A |- B' there is some 'i < *extra_var_start' and 'j < *extra_var_start' such that\n *                      '(*bound_var)[i]' is bound to 'A' and '(*bound_var)[j]' is bound to 'B'\n *                   and, '*word256_ix < *extra_var_start' and '(*bound_var)[*word256_ix]' is bound the type 'TWO^256'\n */\ntypedef size_t (*simplicity_callback_mallocBoundVars)(unification_var** bound_var, size_t* word256_ix, size_t* extra_var_start, size_t extra_var_len);\n\n/* If the Simplicity DAG, 'dag', has a principal type (including constraints due to sharing of subexpressions),\n * then allocate a well-formed type DAG containing all the types needed for all the subexpressions of 'dag',\n * with all free type variables instantiated at ONE, and set '*type_dag' to this allocation,\n * and update the '.sourceType' and '.targetType' fields within each node of the 'dag' 'type_dag[dag[i].sourceType]'\n * and 'type_dag[dag[i].targetType]' are the inferred types of the Simplicity subexpression at dag[i].\n *\n * If malloc fails, returns 'SIMPLICITY_ERR_MALLOC'.\n * If the Simplicity DAG, 'dag', has no principal type (because it has a type error), then '*type_dag' is set to NULL,\n * and either 'SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION' or 'SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK' is returned.\n * Otherwise 'SIMPLICITY_NO_ERROR' is returned.\n *\n * Precondition: NULL != type_dag;\n *               dag_node dag[len] is well-formed;\n *               '*census' contains a tally of the different tags that occur in 'dag'.\n *\n * Postcondition: if the return value is 'SIMPLICITY_NO_ERROR'\n *                then either NULL == '*type_dag'\n *                     or 'dag' is well-typed with '*type_dag' and without witness values\n *                if the return value is not 'SIMPLICITY_NO_ERROR' then 'NULL == *type_dag'\n */\nsimplicity_err simplicity_mallocTypeInference(type** type_dag, simplicity_callback_mallocBoundVars mallocBoundVars, dag_node* dag, const uint_fast32_t len, const combinator_counters* census);\n\n#endif\n"
  },
  {
    "path": "C/typeSkipTest.c",
    "content": "#include \"typeSkipTest.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     witness (runIdentity (getValue (return True))) >>> mn >>> unit\n *      where\n *       l1 = take l0 &&& drop l0\n *       l2 = take l1 &&& drop l1\n *       l3 = take l2 &&& drop l2\n *       ltop = l3\n *       m1 = copair l3 l3\n *       m2 = take l1 &&& drop m1\n *       m3 = take m2 &&& drop l2\n *       m4 = take l3 &&& drop m3\n *       m5 = copair (injl m4) (injr ltop)\n *       m6 = take l1 &&& drop m5\n *       m7 = take m6 &&& drop l2\n *       m8 = take l3 &&& drop m7\n *       n1 = copair l3 l3\n *       n2 = take n1 &&& drop l1\n *       n3 = take l2 &&& drop n2\n *       n4 = take n3 &&& drop l3\n *       n5 = copair (injl ltop) (injr n4)\n *       n6 = take n5 &&& drop l0\n *       n7 = take l1 &&& drop n6\n *       n8 = take n7 &&& drop l2\n *       mn = copair (injl m8) (injr n8)\n */\nconst unsigned char typeSkipTest[] = {\n  0xe3, 0x77, 0x42, 0x45, 0x0c, 0xb5, 0xf0, 0xec, 0x6e, 0x61, 0xbb, 0x47, 0xa7, 0x00, 0x47, 0x8f, 0xc4, 0xd3, 0x00, 0x4b,\n  0x65, 0x5d, 0xb7, 0x70, 0x69, 0xf6, 0x7a, 0x99, 0x73, 0x8f, 0x03, 0x8f, 0x08, 0x94, 0x6b, 0x10, 0x8a, 0x83, 0x0f, 0x05,\n  0x06, 0x1e, 0x0a, 0x0c, 0x36, 0x84, 0x24, 0x50, 0xc3, 0xff, 0xf7, 0x0a, 0xf7, 0xbb, 0x16, 0x15, 0x3b, 0x42, 0x52, 0x00,\n  0x81, 0xa2, 0xc0, 0x81, 0xb1, 0x19, 0xa7, 0x90, 0xd6, 0x0c, 0x30, 0x8b, 0xd2, 0x37, 0xb6, 0xd8, 0x47, 0x5e, 0x0b, 0x4a,\n  0x66, 0xcd, 0x09, 0x14, 0x37, 0x9e, 0x40, 0x52, 0x60, 0x02, 0xb3, 0xf3, 0x3f, 0xc5, 0x2a, 0xba, 0xbd, 0x6f, 0x3d, 0x92,\n  0x1d, 0xc9, 0x30, 0x79, 0xe6, 0xe1, 0x2b, 0x6f, 0xdb, 0x7e, 0x6d, 0x62, 0x7f, 0x23, 0xc7, 0x9a, 0x81, 0xb6, 0x1f, 0x68,\n  0xa0, 0xc0, 0xe2, 0x06, 0x63, 0x0f, 0xc1, 0x85, 0x07, 0x0b, 0x78, 0xc3, 0xea, 0x14, 0x14, 0x60, 0x78, 0x30, 0x1c, 0x20,\n  0x70, 0xb8, 0x68, 0xc3, 0xf1, 0x20, 0xa0, 0xe1, 0x71, 0x18, 0xa3, 0x03, 0xc5, 0xc0, 0x71, 0x81, 0x20, 0x80, 0x71, 0xb0\n};\n\nconst size_t sizeof_typeSkipTest = sizeof(typeSkipTest);\nconst unsigned char typeSkipTest_witness[] = {\n  0xe0\n};\n\nconst size_t sizeof_typeSkipTest_witness = sizeof(typeSkipTest_witness);\n\n/* The commitment Merkle root of the above typeSkipTest Simplicity expression. */\nconst uint32_t typeSkipTest_cmr[] = {\n  0x2a791cd8u, 0xf1e2beeau, 0x883e53f2u, 0xce36db2bu, 0x246b3156u, 0xcc40f91bu, 0xb2f59059u, 0xb601ac4au\n};\n\n/* The identity hash of the root of the above typeSkipTest Simplicity expression. */\nconst uint32_t typeSkipTest_ihr[] = {\n  0xbadac773u, 0x19e9cabau, 0x7fe49174u, 0x54d0e25eu, 0x7d4c4a7eu, 0x4867c392u, 0x20bf409au, 0xc6e6bf10u\n};\n\n/* The annotated Merkle root of the above typeSkipTest Simplicity expression. */\nconst uint32_t typeSkipTest_amr[] = {\n  0xbf18694du, 0x9b6a4b10u, 0xe4facc4du, 0xf8718387u, 0x2998f5dau, 0x1b0adc45u, 0x1f58fc4du, 0x924de2c9u\n};\n\n/* The cost of the above typeSkipTest Simplicity expression in milli weight units. */\nconst ubounded typeSkipTest_cost = 13720;\n"
  },
  {
    "path": "C/typeSkipTest.h",
    "content": "#ifndef SIMPLICITY_TYPESKIPTEST_H\n#define SIMPLICITY_TYPESKIPTEST_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"bounded.h\"\n\n/* A length-prefixed encoding of the following Simplicity program:\n *     witness (runIdentity (getValue (return True))) >>> mn >>> unit\n *      where\n *       l1 = take l0 &&& drop l0\n *       l2 = take l1 &&& drop l1\n *       l3 = take l2 &&& drop l2\n *       ltop = l3\n *       m1 = copair l3 l3\n *       m2 = take l1 &&& drop m1\n *       m3 = take m2 &&& drop l2\n *       m4 = take l3 &&& drop m3\n *       m5 = copair (injl m4) (injr ltop)\n *       m6 = take l1 &&& drop m5\n *       m7 = take m6 &&& drop l2\n *       m8 = take l3 &&& drop m7\n *       n1 = copair l3 l3\n *       n2 = take n1 &&& drop l1\n *       n3 = take l2 &&& drop n2\n *       n4 = take n3 &&& drop l3\n *       n5 = copair (injl ltop) (injr n4)\n *       n6 = take n5 &&& drop l0\n *       n7 = take l1 &&& drop n6\n *       n8 = take n7 &&& drop l2\n *       mn = copair (injl m8) (injr n8)\n */\nextern const unsigned char typeSkipTest[];\nextern const size_t sizeof_typeSkipTest;\nextern const unsigned char typeSkipTest_witness[];\nextern const size_t sizeof_typeSkipTest_witness;\n\n/* The commitment Merkle root of the above typeSkipTest Simplicity expression. */\nextern const uint32_t typeSkipTest_cmr[];\n\n/* The identity hash of the root of the above typeSkipTest Simplicity expression. */\nextern const uint32_t typeSkipTest_ihr[];\n\n/* The annotated Merkle root of the above typeSkipTest Simplicity expression. */\nextern const uint32_t typeSkipTest_amr[];\n\n/* The cost of the above typeSkipTest Simplicity expression in milli weight units. */\nextern const ubounded typeSkipTest_cost;\n\n#endif\n"
  },
  {
    "path": "C/uword.h",
    "content": "#ifndef SIMPLICITY_UWORD_H\n#define SIMPLICITY_UWORD_H\n\n#include <limits.h>\n#include <stddef.h>\n#include <stdint.h>\n\n/* Number of bits for any value of the form 2^b - 1 where 0 <= b < 0x3fffffff * 30.\n * From: https://stackoverflow.com/a/4589384/727983\n *\n * A correctness proof can be found at\n *\n *     https://wiki.sei.cmu.edu/confluence/display/c/INT35-C.+Use+correct+integer+precisions?focusedCommentId=88018664#comment-88018664\n */\n#define UMAX_BITS(m) ((m)             / ((m) % 0x3fffffffu + 1) / 0x3fffffffu % 0x3fffffffu * 30 \\\n                    + (m)%0x3fffffffu / ((m) % 31          + 1) / 31          % 31          * 5  \\\n                    + 4 - 12 / ((m) % 31 + 3))\n\n/* UWORD can be any unsigned integer type.\n * The default ought to be 'unsigned int', but unfortunately that tends to be 32-bits on 64-bit platforms.\n * Instead we select 'uint_fast16_t' as our default (with the disadvantage that it is again 32-bits for the x32 target).\n */\n#ifndef UWORD\n#define UWORD uint_fast16_t\n#endif\n\n_Static_assert((UWORD)1 <= (UWORD)(-1), \"UWORD must be an unsigned type\");\n_Static_assert(sizeof(UWORD) < 0x3fffffffu * 30 / CHAR_BIT, \"UWORD must have fewer than 32 billion bits for UMAX_BITS.\");\n#define UWORD_MAX ((UWORD)-1)\n#define UWORD_BIT UMAX_BITS(UWORD_MAX)\n_Static_assert(UWORD_BIT <= SIZE_MAX, \"UWORD_BIT must fit into size_t.\");\n\n/* For all 'x' and 'y',\n *\n *    'x <= UWORD_BIT * y' if and only if 'ROUND_UWORD(x) <= y'\n *\n * Precondition: 0 <= bitSize\n */\n#define ROUND_UWORD(bitSize) ((bitSize) / UWORD_BIT + !!((bitSize) % UWORD_BIT))\n\n/* Clear the 'n' least significant bits of a UWORD.\n * Precondition: 0 < n <= UWORD_BIT\n */\nstatic inline UWORD LSBclear(UWORD x, size_t n) {\n  return (UWORD)(x >> 1 >> (n - 1) << 1 << (n - 1));\n}\n\n/* Clear all but the 'n' least significant bits of a UWORD.\n * Precondition: 0 < n <= UWORD_BIT\n */\nstatic inline UWORD LSBkeep(UWORD x, size_t n) {\n  return (UWORD)(x & (UWORD_MAX >> (UWORD_BIT - n)));\n}\n#endif\n"
  },
  {
    "path": "Coq/C/divstep.v",
    "content": "Require Import ZArith.\nRequire Import ZArith.Znumtheory.\nRequire Import ZArith.Zpow_facts.\nRequire Import Lia.\nRequire Import List.\n\nRequire Import divsteps.divsteps_def.\nRequire Import extraMath.\nRequire Import modinv.\n\nOpen Scope list_scope.\nOpen Scope Z_scope.\nArguments Z.add !x !y.\nArguments Z.sub !m !n.\nArguments Z.mul !x !y.\n\nDefinition Zodd_irr z (Hz1 Hz2 : Zodd z) : Hz1 = Hz2.\nProof.\nrevert Hz1 Hz2.\ndestruct z as [|p|p]; try destruct p; try contradiction; intros [] []; reflexivity.\nDefined.\n\nModule Step.\n\nInductive Step : Set :=\n| D : Step\n| S : Step\n| H : Step.\n\nEnd Step.\nDefinition Step := Step.Step.\n\nDefinition INC : Z := 1.\n\nRecord State : Set :=\n { delta : Z\n ; f : Z\n ; g : Z\n ; oddF : Zodd f\n }.\n\nDefinition eta (st : State) := Z.opp (delta st).\n\nDefinition init f g oddF :=\n{| delta := 1\n ; f := f\n ; g := g\n ; oddF := oddF\n |}.\n\nDefinition step (st : State) : State * Step :=\nmatch Zeven_odd_dec (g st) with\n| left _ => ({| delta := INC + delta st\n              ; f := f st\n              ; g := g st / 2\n              ; oddF := oddF st\n              |}\n            , Step.H)\n| right oddG =>\n    if (0 <? delta st)%Z\n    then ({| delta := INC - delta st\n           ; f := g st\n           ; g := (g st - f st) / 2\n           ; oddF := oddG\n           |}\n         , Step.D)\n    else ({| delta := INC + delta st\n           ; f := f st\n           ; g := (g st + f st) / 2\n           ; oddF := oddF st\n           |}\n         , Step.S)\nend.\n\n(* Last step is first in the list to facilitate matrix multiplication. *)\nFixpoint stepN (n : nat) : State -> State * list Step  :=\nmatch n with\n| O => fun st => (st, nil)\n| (S n) => fun st =>\n    let (st0, xs) := stepN n st in\n    let (st1, x) := step st0 in\n    (st1, x :: xs)\nend.\n\nInductive Spec : State -> (State * Step) -> Set :=\n| specH : forall d f' g', Spec {| delta := d; f := 2*f'+1; g := 2*g'; oddF := Zodd_2p_plus_1 f' |}\n                               ({| delta := INC + d; f := 2*f'+1; g := g'; oddF := Zodd_2p_plus_1 f' |}, Step.H)\n| specD : forall d f' g', Spec {| delta := Z.pos d; f := 2*f'+1; g := 2*g'+1; oddF := Zodd_2p_plus_1 f' |}\n                               ({| delta := INC - Z.pos d; f := 2*g'+1; g := g' - f'; oddF := Zodd_2p_plus_1 g' |}, Step.D)\n| specS : forall d f' g', (d <= 0) ->\n                          Spec {| delta := d; f := 2*f'+1; g := 2*g'+1; oddF := Zodd_2p_plus_1 f' |}\n                               ({| delta := INC + d; f := 2*f'+1; g := g' + f' + 1; oddF := Zodd_2p_plus_1 f' |}, Step.S).\n\nLemma spec st : Spec st (step st).\nProof.\ndestruct st as [d0 f0 g0 Hf0].\nunfold step; cbn -[Z.div].\ndestruct (Zeven_odd_dec g0) as [Hg0|Hg0].\ngeneralize Hf0.\napply Zodd_bool_iff in Hf0.\nrewrite (Zdiv2_odd_eqn f0), Hf0.\nrewrite (Zeven_div2 g0) by auto.\nreplace (2 * Z.div2 g0 / 2) with (Z.div2 g0) by (rewrite Z.mul_comm, Z.div_mul by lia; reflexivity).\nintros Hf0'.\nreplace Hf0' with (Zodd_2p_plus_1 (Z.div2 f0)) by apply Zodd_irr.\napply specH.\ngeneralize Hf0 Hg0.\napply Zodd_bool_iff in Hf0.\napply Zodd_bool_iff in Hg0.\nrewrite (Zdiv2_odd_eqn f0), Hf0.\nrewrite (Zdiv2_odd_eqn g0), Hg0.\ndestruct (0 <? d0) eqn:Hd.\ndestruct d0; try solve [cbn in Hd; congruence].\nreplace (2 * Z.div2 g0 + 1 - (2 * Z.div2 f0 + 1)) with ((Z.div2 g0 - Z.div2 f0) * 2) by ring.\nrewrite Z.div_mul by lia.\nintros Hf0' Hg0'.\nreplace Hf0' with (Zodd_2p_plus_1 (Z.div2 f0)) by apply Zodd_irr.\nreplace Hg0' with (Zodd_2p_plus_1 (Z.div2 g0)) by apply Zodd_irr.\napply specD.\nreplace (2 * Z.div2 g0 + 1 + (2 * Z.div2 f0 + 1)) with ((Z.div2 g0 + Z.div2 f0 + 1) * 2) by ring.\nrewrite Z.div_mul by lia.\nintros Hf0' _.\nreplace Hf0' with (Zodd_2p_plus_1 (Z.div2 f0)) by apply Zodd_irr.\napply specS.\nlia.\nQed.\n\nLemma etaBounds b n st : -b <= eta st < b ->\n  -b - Z.of_nat n <= eta (fst (stepN n st)) < b + Z.of_nat n.\nProof.\ninduction n; simpl; [lia|].\ndestruct (stepN n st).\nrewrite Zpos_P_of_succ_nat.\nrevert IHn.\nelim (spec s); intros d f' g'; try generalize (Z.pos d); unfold eta; cbn; try lia.\nQed.\n\nLemma gHs n st : (2^(Z.of_nat n) | g st) ->\n  g (fst (stepN n st)) = g st / 2^(Z.of_nat n).\nProof.\ninduction n;[intros;rewrite Z.div_1_r; reflexivity|].\nrewrite Nat2Z.inj_succ, Z.pow_succ_r by lia.\nsimpl (fst _).\ndestruct (stepN n st).\nintros Hg.\nassert (Hdivide : (2 ^ Z.of_nat n | g st)) by (etransitivity;[|apply Hg]; auto with *).\napply Zdivide_mod in Hg.\napply (f_equal (fun x => x / 2 ^ (Z.of_nat n))) in Hg.\nrewrite Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l in Hg by lia.\nrewrite <- IHn in Hg by assumption.\ndestruct (spec s);\nsimpl in Hg;\ntry solve [rewrite Zmod_odd, Z.add_comm, Z.odd_add_mul_2 in Hg;\n           discriminate].\nsimpl (g _).\nsimpl (g _) in IHn.\napply Z.mul_cancel_l with 2; try lia.\nrewrite !(Z.mul_comm 2), <- Zdiv_Zdiv by lia.\nrewrite <- IHn by assumption.\nrewrite !(Z.mul_comm 2), Z.div_mul; lia.\nQed.\n\nLemma fHs n st : (2^(Z.of_nat n) | g st) ->\n  f (fst (stepN n st)) = f st.\nProof.\ninduction n;[intros; reflexivity|].\nrewrite Nat2Z.inj_succ, Z.pow_succ_r by lia.\nintros Hg.\nsimpl (fst _).\nassert (Hg' : (2 ^ Z.of_nat n | g st)) by (etransitivity;[|apply Hg]; auto with *).\napply Zdivide_mod in Hg.\napply (f_equal (fun x => x / 2 ^ (Z.of_nat n))) in Hg.\nrewrite Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l in Hg by lia.\nrewrite <- gHs in Hg by assumption.\ndestruct (stepN n st).\nrewrite <- IHn by assumption.\ndestruct (spec s);\nsimpl in Hg;\ntry solve [rewrite Zmod_odd, Z.add_comm, Z.odd_add_mul_2 in Hg;\n           discriminate].\nreflexivity.\nQed.\n\nLemma etaHs n st : (2^(Z.of_nat n) | g st) ->\n  eta (fst (stepN n st)) = eta st - (Z.of_nat n).\nProof.\ninduction n;[intros;cbn;ring|].\nrewrite Nat2Z.inj_succ, Z.pow_succ_r by lia.\nintros Hg.\nsimpl (fst _).\nassert (Hg' : (2 ^ Z.of_nat n | g st)) by (etransitivity;[|apply Hg]; auto with *).\napply Zdivide_mod in Hg.\napply (f_equal (fun x => x / 2 ^ (Z.of_nat n))) in Hg.\nrewrite Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l in Hg by lia.\nrewrite <- gHs in Hg by assumption.\ndestruct (stepN n st).\nreplace (eta st - _) with (eta st - (Z.of_nat n) - 1) by lia.\nrewrite <- IHn by assumption.\ndestruct (spec s);\nsimpl in Hg;\ntry solve [rewrite Zmod_odd, Z.add_comm, Z.odd_add_mul_2 in Hg;\n           discriminate].\nunfold eta, INC.\nsimpl.\nring.\nQed.\n\nLemma etaSs n st : 0 <= eta st ->\n       Z.of_nat n <= 1 + eta st ->\n       eta (fst (stepN n st)) = eta st - Z.of_nat n.\nProof.\ninduction n;[intros;cbn;ring|].\nrewrite Nat2Z.inj_succ, <- Z.add_1_l.\nintros Heta Hn.\nsimpl (fst _).\ndestruct (stepN n st) as [s l].\ntransitivity (eta st - Z.of_nat n - 1);[|ring].\nassert (Hs : eta (fst (s, l)) = eta st - Z.of_nat n) by (apply IHn; lia).\nrewrite <- Hs.\nunfold eta in *.\ndestruct (spec s); cbn; try ring.\ncbn in Hs.\nlia.\nQed.\n\nLemma stepN_app (n m : nat) st : stepN (n + m) st = let st1 := stepN m st in\n  (fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1).\nProof.\ninduction n;[destruct (stepN _ _);reflexivity|].\ncbn.\nrewrite IHn.\ncbn.\ndestruct (stepN n _).\ncbn.\ndestruct (step s).\nreflexivity.\nQed.\n\nLemma stepN_app_fst (n m : nat) st : fst (stepN (n + m) st) = fst (stepN n (fst (stepN m st))).\nProof.\nrewrite stepN_app.\nreflexivity.\nQed.\n\nLemma stepN_app_snd (n m : nat) st : snd (stepN (n + m) st) = \n  snd (stepN n (fst (stepN m st))) ++ snd (stepN m st).\nProof.\nrewrite stepN_app.\nreflexivity.\nQed.\n\nLemma etaDs n st : Zodd (g st) -> eta st < 0 ->\n       0 < Z.of_nat n <= 1 - eta st ->\n       eta (fst (stepN n st)) = -eta st - Z.of_nat n.\nProof.\nintros Hodd Heta Hn.\ndestruct n;[lia|].\nrewrite <- Nat.add_1_r.\nrewrite stepN_app_fst.\nsimpl (stepN 1 st).\ndestruct (spec st);[elim (Zodd_not_Zeven _ Hodd); apply Zeven_2p| |unfold eta in *;cbn in *;lia].\nrewrite etaSs; unfold eta in *; cbn in *; change (Z.pos_sub 1 d) with (1 - Z.pos d); try lia.\nchange (0 < Z.of_nat (S n) <= 1 - -(Z.pos d)) in Hn.\nlia.\nQed.\n\nLemma stepN_mod n st1 st2 :\n  eqm (2^Z.of_nat n) (f st1) (f st2) ->\n  eqm (2^Z.of_nat n) (g st1) (g st2) ->\n  delta st1 = delta st2 ->\n  delta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\n  snd (stepN n st1) = snd (stepN n st2).\nProof.\nrevert st1 st2.\ninduction n;[simpl;repeat split;congruence|].\nintros st1 st2 Hf Hg Hdelta.\nreplace (S n) with (n + 1)%nat by lia.\nrewrite !stepN_app_fst, !stepN_app_snd.\nsimpl (stepN 1 st1); simpl (stepN 1 st2).\nunfold step; rewrite Hdelta.\nassert (Hdiv2 : forall x y, eqm (2 ^ Z.of_nat (S n)) x y -> eqm (2 ^ Z.of_nat n) (x / 2) (y / 2)).\n1:{\n intros x y.\n unfold eqm.\n rewrite <-!Z.land_ones, <-!(Z.shiftr_div_pow2 _ 1) by lia.\n replace (Z.of_nat n) with (Z.of_nat (S n) - 1) by lia.\n rewrite <-!extraMath.Z_shiftr_ones, <-!Z.shiftr_land by lia.\n congruence.\n}\ndestruct (Zeven_odd_dec (g st1)); destruct (Zeven_odd_dec (g st2)); \ntry solve\n[exfalso;\nrewrite <-?Zeven_bool_iff, <-?Zodd_bool_iff, ?Zeven_mod, ?Zodd_mod in *;\napply Zeq_bool_eq in z, z0;\napply (extraMath.eqm_2_pow_le 1) in Hg; try lia;\nchange (2^1) with 2 in *;\nrewrite Hg in z;\ncongruence\n];[|destruct (0 <? delta st2)];cbn;\n  set (st1' := Build_State _ _ _ _);\n  set (st2' := Build_State _ _ _ _);\n  destruct (IHn st1' st2');\n  try solve [cbn; lia|split; congruence].\n* eapply extraMath.eqm_2_pow_le;[|apply Hf]; lia.\n* apply Hdiv2; apply Hg.\n* eapply extraMath.eqm_2_pow_le;[|apply Hg]; lia.\n* apply Hdiv2; apply Zminus_eqm; assumption.\n* eapply extraMath.eqm_2_pow_le;[|apply Hf]; lia.\n* apply Hdiv2; apply Zplus_eqm; assumption.\nQed.\n\nLemma fStepBounds st : Z.abs (f (fst (step st))) <= Z.max (Z.abs (f st)) (Z.abs (g st)).\nProof.\ndestruct (spec st); cbn;lia.\nQed.\n\nLemma gStepBounds st : 2 * Z.abs (g (fst (step st))) <= Z.abs (f st) + Z.abs (g st).\nProof.\ndestruct (spec st); cbn;lia.\nQed.\n\nLemma fgBounds st n :\n Z.abs (f (fst (stepN n st))) <= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\n Z.abs (g (fst (stepN n st))) <= Z.max (Z.abs (f st)) (Z.abs (g st)).\nProof.\ninduction n;[cbn; lia|].\ncbn.\nassert (Hf := fStepBounds (fst (stepN n st))).\nassert (Hg := gStepBounds (fst (stepN n st))).\ndestruct (stepN n st) as [st' xs].\ncbn in *.\ndestruct (step st') as [st'' xs'].\ncbn in *.\nlia.\nQed.\n\nLemma fgBoundsStrict st n :\n Z.abs (g st) < Z.abs (f st) ->\n Z.abs (f (fst (stepN n st))) <= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\n Z.abs (g (fst (stepN n st))) < Z.max (Z.abs (f st)) (Z.abs (g st)).\nProof.\ninduction n;[cbn; lia|].\ncbn.\nassert (Hf := fStepBounds (fst (stepN n st))).\nassert (Hg := gStepBounds (fst (stepN n st))).\ndestruct (stepN n st) as [st' xs].\ncbn in *.\ndestruct (step st') as [st'' xs'].\ncbn in *.\nlia.\nQed.\n\nLemma fixed st n : g st = 0 ->\n f (fst (stepN n st)) = f st /\\ g (fst (stepN n st)) = 0.\nProof.\nintros Hg.\ninduction n;[auto|].\ncbn.\ndestruct (stepN n st) as [[eta f g Hf] l].\nunfold step.\ncbn in *.\ndestruct IHn as [-> ->].\ncbn.\nauto.\nQed.\n\nLemma fixed_f st n : g st = 0 ->\n f (fst (stepN n st)) = f st.\nProof.\nintros Hg.\ndestruct (fixed st n Hg).\nassumption.\nQed.\n\nLemma fixed_g st n : g st = 0 ->\n g (fst (stepN n st)) = 0.\nProof.\nintros Hg.\ndestruct (fixed st n Hg).\nassumption.\nQed.\n\nLemma gcd st d n : Zis_gcd (f st) (g st) d ->\n Zis_gcd (f (fst (stepN n st))) (g (fst (stepN n st))) d.\nProof.\nintros Hgcd.\ninduction n;[auto|].\ncbn.\ndestruct (stepN n st) as [st0 l].\ncbn in IHn.\ndestruct (spec st0);cbn in *;\n  revert IHn;\n  apply Zis_gcd_ind;\n  intros Hd1 Hd2 Hdx;\n  apply Zis_gcd_intro; try assumption. \n* assert (Hodd : Z.odd d = true).\n  1:{\n    destruct Hd1 as [z1 Hd1].\n    apply (f_equal Z.odd) in Hd1.\n    rewrite Z.add_comm, Z.odd_add_mul_2, Z.mul_comm, Z.odd_mul in Hd1.\n    destruct (Z.odd d);auto.\n  }\n  eapply Gauss;[apply Hd2|].\n  apply rel_prime_mod_rev;[lia|].\n  rewrite Zmod_odd, Hodd.\n  apply rel_prime_1.\n* intros x Hxf Hxg.\n  apply Hdx; try assumption.\n  auto with *.\n* assert (Hodd : Z.odd d = true).\n  1:{\n    destruct Hd1 as [z1 Hd1].\n    apply (f_equal Z.odd) in Hd1.\n    rewrite Z.add_comm, Z.odd_add_mul_2, Z.mul_comm, Z.odd_mul in Hd1.\n    destruct (Z.odd d);auto.\n  }\n  apply Gauss with 2.\n  + replace (2 * (g' - f')) with ((2 * g' + 1) - (2 * f' + 1)) by ring.\n    apply Z.divide_sub_r; assumption.\n  + apply rel_prime_mod_rev;[lia|].\n    rewrite Zmod_odd, Hodd.\n    apply rel_prime_1.\n* intros x Hxf Hxg.\n  apply Hdx; try assumption.\n  replace (2 * f' + 1) with ((2 * g' + 1) - (2*(g' - f'))) by ring.\n  apply Z.divide_sub_r; try assumption.\n  auto with *.\n* assert (Hodd : Z.odd d = true).\n  1:{\n    destruct Hd1 as [z1 Hd1].\n    apply (f_equal Z.odd) in Hd1.\n    rewrite Z.add_comm, Z.odd_add_mul_2, Z.mul_comm, Z.odd_mul in Hd1.\n    destruct (Z.odd d);auto.\n  }\n  apply Gauss with 2.\n  + replace (2 * (g' + f' + 1)) with ((2 * g' + 1) + (2 * f' + 1)) by ring.\n    apply Z.divide_add_r; assumption.\n  + apply rel_prime_mod_rev;[lia|].\n    rewrite Zmod_odd, Hodd.\n    apply rel_prime_1.\n* intros x Hxf Hxg.\n  apply Hdx; try assumption.\n  replace (2 * g' + 1) with ((2*(g' + f' + 1)) - (2 * f' + 1)) by ring.\n  apply Z.divide_sub_r; try assumption.\n  auto with *.\nQed.\n\nLemma Translate_divsteps n fi gi (Hf : Zodd fi) :\n delta (fst (stepN n (init fi gi Hf))) = divsteps.delta (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)) /\\\n f (fst (stepN n (init fi gi Hf))) = divsteps.f (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)) /\\\n g (fst (stepN n (init fi gi Hf))) = divsteps.g (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)).\nProof.\ninduction n;[cbn;auto|].\ndestruct IHn as [IHdelta [IHf IHg]].\nrewrite Nnat.Nat2N.inj_succ, N.iter_succ.\ndestruct (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)).\nsimpl.\ndestruct (stepN n (init fi gi Hf)) as [st0 l].\nsimpl in *.\nsubst delta0 f0 g0.\ndestruct (spec st0);\nunfold divsteps.step; cbn -[Z.div].\n* rewrite Z.even_mul; cbn -[Z.div].\n  rewrite (Z.mul_comm 2 g'), Z.div_mul; lia.\n* rewrite Z.add_comm, Z.even_add_mul_2; cbn -[Z.div].\n  repeat (split;try reflexivity).\n  replace (1 + 2 * g' - (2 * f' + 1)) with ((g' - f') * 2) by ring.\n  rewrite Z.div_mul; lia.\n* rewrite (Z.add_comm _ 1), Z.even_add_mul_2; cbn -[Z.div].\n  elim Z.ltb_spec;[lia|intros _];cbn -[Z.div].\n  repeat (split;try reflexivity).\n  replace (1 + 2 * g' + (2 * f' + 1)) with ((g' + f' + 1) * 2) by ring.\n  rewrite Z.div_mul; lia.\nQed.\n\nLemma Translate_divsteps_g n fi gi (Hf : Zodd fi) :\n g (fst (stepN n (init fi gi Hf))) = divsteps.g (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)).\nProof.\ndestruct (Translate_divsteps n fi gi Hf).\ntauto.\nQed.\n\nModule Trans.\n\nRecord V2 :=\n{ x : Z; y : Z }.\n\nDefinition scale (c : Z) (vec : V2) :=\n{| x := c * (x vec)\n ; y := c * (y vec)\n|}.\n\nLemma scale_mul c1 c2 vec : scale (c1 * c2) vec = scale c1 (scale c2 vec).\nProof.\ndestruct vec.\nunfold scale; simpl; f_equal; ring.\nQed.\n\nRecord M2x2 :=\n{ u : Z; v : Z; q : Z; r : Z}.\n\nDefinition I : M2x2 :=\n{| u := 1\n ; v := 0\n ; q := 0\n ; r := 1\n|}.\n\nDefinition ap (m : M2x2) (vec : V2) : V2 :=\n{| x := (u m) * (x vec) + (v m) * (y vec)\n ; y := (q m) * (x vec) + (r m) * (y vec)\n|}.\n\nLemma ap_scale m c vec : ap m (scale c vec) = scale c (ap m vec).\nProof.\ndestruct m, vec.\nunfold ap, scale; simpl; f_equal; ring.\nQed.\n\nDefinition mul (m1 m2: M2x2) : M2x2 :=\n{| u := (u m1) * (u m2) + (v m1) * (q m2)\n ; v := (u m1) * (v m2) + (v m1) * (r m2)\n ; q := (q m1) * (u m2) + (r m1) * (q m2)\n ; r := (q m1) * (v m2) + (r m1) * (r m2)\n|}.\n\nLemma mul_assoc m1 m2 m3 : mul m1 (mul m2 m3) = mul (mul m1 m2) m3.\nProof.\ndestruct m1, m2, m3.\nunfold mul; simpl; f_equal; ring.\nQed.\n\nLemma ap_mul m1 m2 vec : ap (mul m1 m2) vec = ap m1 (ap m2 vec).\nProof.\ndestruct m1, m2, vec.\nunfold ap, mul; simpl; f_equal; ring.\nQed.\n\nDefinition det (m: M2x2) : Z := (u m) * (r m) - (v m) * (q m).\n\nLemma det_mul m1 m2 : det (mul m1 m2) = det m1 * det m2.\nProof.\ndestruct m1, m2.\ncbn.\nring.\nQed.\n\nDefinition prod : list M2x2 -> M2x2 := fold_right mul I.\n\nLemma prod_app l1 l2 : prod (l1 ++ l2) = mul (prod l1) (prod l2).\nProof.\ninduction l1.\n1:cbn; destruct (prod l2); unfold mul; cbn; f_equal; ring.\ncbn.\nrewrite IHl1.\ndestruct (prod l1); destruct (prod l2); unfold mul; cbn; f_equal; ring.\nQed.\n\nLemma det_prod ms : det (prod ms) = fold_right Z.mul 1 (map det ms).\nProof.\ninduction ms; try reflexivity.\nsimpl.\nrewrite det_mul.\ncongruence.\nQed.\n\nDefinition bounded (b : Z) (m : M2x2) :=\n  (Z.abs (u m) + Z.abs (v m) <= b /\\ -b < u m + v m) /\\\n  (Z.abs (q m) + Z.abs (r m) <= b /\\ -b < q m + r m).\n\nLemma bounded_I : bounded 1 I.\nProof.\nunfold bounded.\nsimpl.\nlia.\nQed.\n\nDefinition trans (s : Step) : M2x2 :=\nmatch s with\n| Step.H => {| u := 2; v := 0; q := 0; r := 1 |}\n| Step.D => {| u := 0; v := 2; q := -1; r := 1 |}\n| Step.S => {| u := 2; v := 0; q := 1; r := 1 |}\nend.\n\nDefinition fg st := {| x := f st; y := g st |}.\n\nLemma trans_step st :\n  scale 2 (fg (fst (step st))) = ap (trans (snd (step st))) (fg st).\nProof.\ndestruct (spec st);\nunfold scale,ap, fg; cbn;\nf_equal; ring.\nQed.\n\nLemma det_trans s : det (trans s) = 2.\nProof.\ndestruct s; reflexivity.\nQed.\n\nLemma bounded_mul_trans b m s : bounded b m -> bounded (2*b) (mul (trans s) m).\nProof.\ndestruct m as [u v q r].\nintros [Huv Hqr]; simpl in *.\ndestruct s; unfold bounded; simpl; lia.\nQed.\n\nDefinition transN (n : nat) (st : State) : M2x2 :=\n  prod (map trans (snd (stepN n st))).\n\nLemma transN_S n st : {x | transN (S n) st = mul (trans x) (transN n st)}.\nProof.\nunfold transN.\nsimpl.\ndestruct (stepN n st) as [st0 xs] eqn:Hxs.\ndestruct (step st0) as [st1 x].\nexists x.\nreflexivity.\nQed.\n\nLemma transN_step n st :\n  scale (2^(Z.of_nat n)) (fg (fst (stepN n st))) = ap (transN n st) (fg st).\nProof.\ninduction n.\n rewrite Z.pow_0_r.\n destruct st; unfold scale, fg, ap; cbn.\n f_equal; ring.\nrewrite Nat2Z.inj_succ, Z.pow_succ_r by lia.\nunfold transN in *.\nsimpl.\ndestruct (stepN n st) as [st0 xs]; simpl in *.\nassert (Htrans := trans_step st0).\ndestruct (step st0) as [st1 x]; simpl in *.\nrewrite ap_mul, <- IHn, ap_scale, Z.mul_comm, scale_mul by auto.\nf_equal.\napply Htrans.\nQed.\n\nLemma det_transN n st : det (transN n st) = 2^(Z.of_nat n).\nProof.\nrevert st.\ninduction n; try reflexivity.\nintros st.\ndestruct (transN_S n st) as [x ->].\nrewrite det_mul, det_trans, Nat2Z.inj_succ, Z.pow_succ_r by lia.\ncongruence.\nQed.\n\nLemma bounded_transN n st : bounded (2^(Z.of_nat n)) (transN n st).\nProof.\ninduction n; try apply bounded_I.\ndestruct (transN_S n st) as [x ->].\nrewrite Nat2Z.inj_succ, Z.pow_succ_r by lia.\nauto using bounded_mul_trans.\nQed.\n\nLemma transN_stepN (n m : nat) (st : State) :\n  mul (transN n (fst (stepN m st))) (transN m st) = transN (n + m) st.\nProof.\nunfold transN.\nrewrite stepN_app_snd, map_app, prod_app.\nreflexivity.\nQed.\n\nLemma transHs n st : (2^(Z.of_nat n) | g st) ->\n  transN n st = {| u := 2^(Z.of_nat n); v := 0; q := 0; r := 1 |}.\nProof.\ninduction n;[intros; reflexivity|].\nrewrite Nat2Z.inj_succ, Z.pow_succ_r by lia.\nintros Hg.\nunfold transN in *.\nsimpl (snd _).\nassert (Hg' : (2 ^ Z.of_nat n | g st)) by (etransitivity;[|apply Hg]; auto with *).\napply Zdivide_mod in Hg.\napply (f_equal (fun x => x / 2 ^ (Z.of_nat n))) in Hg.\nrewrite Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l in Hg by lia.\nrewrite <- gHs in Hg by assumption.\ndestruct (stepN n st).\ntransitivity (mul (trans Step.H) {| u := 2^(Z.of_nat n); v := 0; q := 0; r := 1 |}).\n2:unfold mul;cbn;f_equal; ring.\nrewrite <- IHn by assumption.\ndestruct (spec s);\nsimpl in Hg;\ntry solve [rewrite Zmod_odd, Z.add_comm, Z.odd_add_mul_2 in Hg;\n           discriminate].\nreflexivity.\nQed.\n\nLemma transSs n st : delta st <= 0 -> Z.of_nat n <= 1 - delta st ->\n  transN n st = {| u := 2^(Z.of_nat n); v := 0;\n    q := (modInv (-f st) (2^(Z.of_nat n)) * g st) mod (2^(Z.of_nat n)); r := 1 |}.\nProof.\nintros Hdelta Hn.\nassert (Hrel_prime : rel_prime (f st) 2).\n1:{\n  apply rel_prime_mod_rev; try lia.\n  assert (Hfodd := oddF st).\n  apply <- Zodd_bool_iff in Hfodd.\n  rewrite Zmod_odd, Hfodd.\n  apply rel_prime_1.\n}\nassert (Hgcd : forall x, 0 <= x -> Z.gcd (f st) (2 ^ x) = 1).\n1:{\n  intros x Hx.\n  apply Zgcd_1_rel_prime.\n  apply Zpow_facts.rel_prime_Zpower_r; try lia.\n  assumption.\n}\nreplace ((modInv (-f st) (2 ^ Z.of_nat n)\n                     * g st) mod 2 ^ Z.of_nat n)\n with ((-modInv (f st) (2 ^ Z.of_nat n)\n                     * g st) mod 2 ^ Z.of_nat n).\n2:{\n  apply Zmult_eqm;[|reflexivity].\n  unfold eqm.\n  symmetry.\n  rewrite <- (Z.mul_1_l (modInv _ _)).\n  rewrite <- (Hgcd (Z.of_nat n)), <- Zmult_mod_idemp_l, <- modInv_mul_l, Zmult_mod_idemp_l, <- Z.mul_assoc by lia.\n  rewrite <- (Z.opp_involutive (f st)) at 2.\n  rewrite Z.mul_opp_l, Z.mul_opp_r, <- Z.mul_opp_l.\n  rewrite <- Zmult_mod_idemp_r, modInv_mul_r, Z.gcd_opp_l, Hgcd, Zmult_mod_idemp_r by lia.\n  rewrite Z.mul_1_r.\n  reflexivity.\n}\nset (w := _ mod _).\napply proj1 with ( (2^(Z.of_nat n) | f st * w + g st)\n                /\\ (delta (fst (stepN n st)) = Z.of_nat n + delta st)).\nrevert w Hn; induction n; intros w Hn;\n[repeat split;[unfold w;rewrite Z.mod_1_r;reflexivity|apply Z.divide_1_l]|].\ndestruct IHn as [IHn1 [IHn2 IHn3]];[lia|].\nrewrite <- (transN_stepN 1 n), IHn1.\nchange (stepN (S n) st) with (stepN (1 + n) st).\nrewrite stepN_app.\nunfold transN.\nsimpl (fst (_,_)).\nsimpl (stepN 1 _).\nset (st' := fst _).\nassert (Hst' := eq_refl st').\nrevert Hst'.\nunfold st' at 2.\nassert (Hbound : forall a, 0 <= a mod 2 ^ Z.of_nat n < 2 ^ Z.of_nat n) by\n auto using Z.mod_pos_bound with *.\n\nassert (Hdivide: (2 ^ Z.of_nat (S n) | f st * w + g st)).\n1:{\n  apply Z.mod_divide; try lia.\n  unfold w.\n  rewrite <- Zplus_mod_idemp_l, Zmult_mod_idemp_r, Z.mul_assoc,\n          Z.mul_opp_r, Z.mul_opp_l, <-Z.mul_opp_r,\n          <- Zmult_mod_idemp_l, modInv_mul_r.\n  replace (Z.gcd _ _) with 1.\n  2:{\n   symmetry.\n   apply Zgcd_1_rel_prime. \n   apply Zpow_facts.rel_prime_Zpower_r; try lia.\n   assumption.\n  }\n  rewrite Zmult_mod_idemp_l, Zplus_mod_idemp_l.\n  ring_simplify (1 * -g st + g st).\n  reflexivity.\n}\nelim (spec);intros d f' g' Hst'.\n* repeat split.\n  + replace (Z.of_nat (S n)) with (1 + Z.of_nat n) by lia.\n    rewrite Z.pow_add_r by lia.\n    unfold mul; cbn.\n    f_equal; try ring.\n    ring_simplify.\n    unfold w.\n    symmetry.\n    apply Zdivide_mod_minus.\n    - specialize (Hbound ((-modInv (f st) (2 ^ Z.of_nat n) * g st))).\n      replace (Z.of_nat (S n)) with (1 + Z.of_nat n) by lia.\n      rewrite Z.pow_add_r; lia.\n    - set (w0 := (-modInv (f st) (2 ^ Z.of_nat n) * g st) mod 2 ^ Z.of_nat n) in *.\n      apply Z.mod_divide; try lia.\n      rewrite <- Zminus_mod_idemp_r.\n      replace w0 with (1 * w0) by ring.\n      rewrite <- Zmult_mod_idemp_l, <- (Hgcd (Z.of_nat (S n))) by lia.\n      rewrite <- modInv_mul_l, Zmult_mod_idemp_l, Zminus_mod_idemp_r.\n      replace (-modInv (f st) (2 ^ Z.of_nat (S n)) * g st\n       - modInv (f st) (2 ^ Z.of_nat (S n))\n       * f st\n       * w0) with\n       (-modInv (f st) (2 ^ Z.of_nat (S n)) *\n        (w0 * f st + 1 * g st))\n       by ring.\n      assert (HtransN := transN_step n st).\n      rewrite <- Hst', IHn1 in HtransN.\n      unfold fg, scale, ap in HtransN.\n      simpl in HtransN.\n      injection HtransN; clear HtransN.\n      intros Hg' Hf'.\n      rewrite <- Hg'.\n      replace (2 ^ Z.of_nat n * (2 * g')) with (g' * (2 ^ Z.of_nat n * 2^1)) by ring.\n      rewrite <- Z.pow_add_r, Z.mul_assoc by lia.\n      replace (Z.of_nat n + 1) with (Z.of_nat (S n)) by lia.\n      apply Z_mod_mult.\n  + assumption.\n  + replace (Z.of_nat (S n) + delta st)\n    with (1 + (Z.of_nat n + delta st)) by lia.\n    rewrite <- IHn3.\n    simpl.\n    rewrite <- Hst'.\n    reflexivity.\n* rewrite <- Hst' in IHn3.\n  unfold delta at 1 in IHn3.\n  lia.\n* repeat split.\n  + replace (Z.of_nat (S n)) with (1 + Z.of_nat n) by lia.\n    rewrite Z.pow_add_r by lia.\n    unfold mul; cbn.\n    f_equal; try ring.\n    ring_simplify.\n    unfold w.\n    symmetry.\n    apply Zdivide_mod_minus.\n    - specialize (Hbound ((-modInv (f st) (2 ^ Z.of_nat n) * g st))).\n      replace (Z.of_nat (S n)) with (1 + Z.of_nat n) by lia.\n      rewrite Z.pow_add_r; lia.\n    - set (w0 := (-modInv (f st) (2 ^ Z.of_nat n) * g st) mod 2 ^ Z.of_nat n) in *.\n      apply Z.mod_divide; try lia.\n      rewrite <- Zminus_mod_idemp_r.\n      replace (2 ^ Z.of_nat n + w0) with (1 * (2 ^ Z.of_nat n + w0)) by ring.\n      rewrite <- Zmult_mod_idemp_l, <- (Hgcd (Z.of_nat (S n))) by lia.\n      rewrite <- modInv_mul_l, Zmult_mod_idemp_l, Zminus_mod_idemp_r.\n      replace (-modInv (f st) (2 ^ Z.of_nat (S n)) * g st\n   - modInv (f st) (2 ^ Z.of_nat (S n)) * f st\n       * (2 ^ Z.of_nat n + w0)) with\n       (-modInv (f st) (2 ^ Z.of_nat (S n)) *\n        (2 ^ Z.of_nat n * f st + 0 * g st + (w0 * f st + 1 * g st)))\n       by ring.\n      assert (HtransN := transN_step n st).\n      rewrite <- Hst'0, IHn1 in HtransN.\n      unfold fg, scale, ap in HtransN;\n      simpl in HtransN.\n      injection HtransN; clear HtransN.\n      intros Hg' Hf'.\n      rewrite <- Hg', <- Hf'.\n      replace (2 ^ Z.of_nat n * (2 * f' + 1) + 2 ^ Z.of_nat n * (2 * g' + 1))\n         with ((f' + g' + 1) * (2 ^ Z.of_nat n * 2^1)) by ring.\n      rewrite <- Z.pow_add_r, Z.mul_assoc by lia.\n      replace (Z.of_nat n + 1) with (Z.of_nat (S n)) by lia.\n      apply Z_mod_mult.\n  + assumption.\n  + replace (Z.of_nat (S n) + delta st)\n    with (1 + (Z.of_nat n + delta st)) by lia.\n    rewrite <- IHn3.\n    simpl.\n    rewrite <- Hst'0.\n    reflexivity.\nQed.\n\nLemma transDs n st : Zodd (g st) -> 0 < delta st -> 0 < Z.of_nat n <= 1 + delta st ->\n  transN n st = {| u := 0; v := 2^(Z.of_nat n); \n    q := -1; r := (modInv (-g st) (2^(Z.of_nat n)) * (-f st)) mod (2^(Z.of_nat n)) |}.\nProof.\nintros Hodd Hdelta [Hn0 Hn].\ndestruct n;[lia|].\nrewrite <- Nat.add_1_r, <- transN_stepN.\nunfold transN at 2; cbn.\nrevert Hodd Hdelta Hn.\nelim (spec);cbn;intros d f' g' Hodd Hdelta Hn;\n[elim (Zeven_not_Zodd _ (Zeven_2p _) Hodd)| |lia].\nchange (Z.of_nat (S n) <= 1 + Z.pos d) in Hn.\nchange (Z.pos_sub 1 d) with (1 - Z.pos d).\nset (dZ := Z.pos d) in *; clearbody dZ; clear d.\nchange (mul {| u := 0; v := 2; q := -1; r := 1 |} I)\n with (mul (trans Step.S) {| u := 0; v := 1; q := -1; r := 0 |}).\nrewrite !mul_assoc.\nclear st.\npose (st0 := {| delta := - dZ;\n                f := 2 * g' + 1;\n                g := - 2 * f' - 1;\n                oddF := Zodd_2p_plus_1 g' |}).\nset (st1 := Build_State _ _ _ _).\nassert (Hst01 : step st0 = (st1, Step.S)).\n1:{\n  unfold step.\n  assert (Hoddg : Zodd (g st0)) by\n   (replace (g st0) with (2*(-f' - 1) + 1) by (cbn;ring); apply Zodd_2p_plus_1).\n  destruct Zeven_odd_dec as [Heveng'|Hoddg'];\n  [elim (Zodd_not_Zeven _ Hoddg Heveng')|].\n  elim (Z.ltb_spec); intros Hd0; cbn in Hd0; try lia.\n  simpl (g st0 + f st0).\n  replace (-2 * f' - 1 + (2 * g' + 1)) with ((g' - f')*2) by ring.\n  rewrite Z_div_mult by lia.\n  reflexivity.\n}\nreplace (trans Step.S) with (transN 1 st0)\n by (unfold transN;cbn;rewrite Hst01;reflexivity).\nreplace st1 with (fst (stepN 1 st0)) by (unfold transN;cbn;rewrite Hst01;reflexivity).\nrewrite transN_stepN, transSs; cbn; try lia.\nunfold mul; cbn.\nf_equal; try ring.\nring_simplify.\ndo 1 f_equal.\nring.\nQed.\n\nEnd Trans.\n\nDefinition pre_div62Modulo (M a : Z) : Z :=\n  a - (((modInv M (2^62))*a) mod 2^62) * M.\n\nLemma pre_div62Modulo_mod (M a : Z) : pre_div62Modulo M a mod M = a mod M.\nProof.\nunfold pre_div62Modulo, Z.sub.\nrewrite <- Z.mul_opp_l.\napply Z_mod_plus_full.\nQed.\n\nLemma pre_div62Modulo_divide M a : Zodd M -> (2^62 | pre_div62Modulo M a).\nProof.\nintros HM.\napply Z.mod_divide;[lia|].\nunfold pre_div62Modulo.\nrewrite <- Zminus_mod_idemp_r, Zmult_mod_idemp_l.\nreplace (modInv M (2 ^ 62) * a * M) with (modInv M (2 ^ 62) * M * a) by ring.\nrewrite <- Zmult_mod_idemp_l, modInv_mul_l.\nreplace (Z.gcd M (2 ^ 62)) with 1;\n[rewrite Z.mul_1_l, Zminus_mod_idemp_r, Z.sub_diag; reflexivity|].\nsymmetry.\napply Zgcd_1_rel_prime.\napply Zpow_facts.rel_prime_Zpower_r;[lia|].\napply Zgcd_1_rel_prime.\napply Z.bezout_1_gcd.\napply Zodd_ex_iff in HM.\ndestruct HM as [m HMm].\nexists 1; exists (-m).\nlia.\nQed.\n\nDefinition update_de (M d e : Z) (mtx : Trans.M2x2) : (Z * Z) :=\n  let vec := Trans.ap mtx\n              {| Trans.x := d + if d <? 0 then M else 0\n               ; Trans.y := e + if e <? 0 then M else 0\n               |} in\n  ( pre_div62Modulo M (Trans.x vec) / 2^62\n  , pre_div62Modulo M (Trans.y vec) / 2^62\n  ).\n\nLemma update_de_bound m d e mtx : Zodd m ->\n   Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) <= 2 ^ 62 ->\n   Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) <= 2 ^ 62 ->\n   -2 * m < d < m -> -2 * m < e < m ->\n   -2 * m < fst (update_de m d e mtx) < m /\\ -2 * m < snd (update_de m d e mtx) < m.\nProof.\nintros Hoddm Huv Hqr Hmd Hme.\nunfold update_de.\nset (x := Trans.x _).\nset (y := Trans.y _).\nassert (Hm1 : 1 <= m) by lia.\nassert (Hxbound : Z.abs x <= 2^62 * (m - 1)).\n1:{\n  cbn.\n  eapply Z.le_trans;[apply Z.abs_triangle|].\n  rewrite !Z.abs_mul.\n  apply Z.le_trans with ((Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx))*(m - 1));[|nia].\n  destruct (Z.ltb_spec0 d 0); destruct (Z.ltb_spec0 e 0);\n  rewrite Z.mul_add_distr_r; apply Z.add_le_mono; apply Zmult_le_compat_l; lia.\n}\nassert (Hybound : Z.abs y <= 2^62 * (m - 1)).\n1:{\n  cbn.\n  eapply Z.le_trans;[apply Z.abs_triangle|].\n  rewrite !Z.abs_mul.\n  apply Z.le_trans with ((Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx))*(m - 1));[|nia].\n  destruct (Z.ltb_spec0 d 0); destruct (Z.ltb_spec0 e 0);\n  rewrite Z.mul_add_distr_r; apply Z.add_le_mono; apply Zmult_le_compat_l; lia.\n}\ncbn -[Z.div Z.pow x y].\nunfold pre_div62Modulo.\nassert (Hxmod : 0 <= (modInv m (2 ^ 62) * x) mod 2 ^ 62 < 2^62) by (apply Z.mod_pos_bound;lia).\nassert (Hymod : 0 <= (modInv m (2 ^ 62) * y) mod 2 ^ 62 < 2^62) by (apply Z.mod_pos_bound;lia).\nrewrite <- !Z.shiftr_div_pow2 by lia.\nsplit.\n* cut (-2*m + 1 <= Z.shiftr (x - (modInv m (2 ^ 62) * x) mod 2 ^ 62 * m) 62 < m);[lia|apply shiftr_bounds;nia].\n* cut (-2*m + 1 <= Z.shiftr (y - (modInv m (2 ^ 62) * y) mod 2 ^ 62 * m) 62 < m);[lia|apply shiftr_bounds;nia].\nQed.\n\nLemma update_de_eqm m x d e st : Zodd m ->\n  eqm m (x * d) (f st) ->\n  eqm m (x * e) (g st) ->\n  eqm m (x * fst (update_de m d e (Trans.transN 62 st))) (f (fst (stepN 62 st))) /\\\n  eqm m (x * snd (update_de m d e (Trans.transN 62 st))) (g (fst (stepN 62 st))).\nProof.\nintros Hoddm Hf Hg.\nunfold update_de.\ngeneralize (fun a => pre_div62Modulo_divide m a Hoddm).\ngeneralize (pre_div62Modulo_mod m).\ngeneralize (Trans.transN_step 62 st).\nchange (2^62) with (2^Z.of_nat 62).\ngeneralize 62%nat; intros n.\nintros X; injection X; clear X.\nintros Hgqr Hfuv Hpre1 Hpre2.\ndestruct (Trans.transN n st) as [u v q r].\ncbn -[Z.div pre_div62Modulo] in *.\nassert (Hn : 0 < 2^Z.of_nat n) by lia.\nassert (Hinv : modInv (2^Z.of_nat n) m * (2^Z.of_nat n) mod m = 1 mod m).\n1:{\n  rewrite modInv_mul_l.\n  f_equal.\n  rewrite Zgcd_1_rel_prime.\n  apply rel_prime_sym.\n  apply Zpow_facts.rel_prime_Zpower_r;[lia|].\n  apply rel_prime_sym.\n  apply prime_rel_prime;[apply prime_2|].\n  rewrite Zodd_equiv in Hoddm.\n  destruct Hoddm as [b ->].\n  intros Hdivide.\n  apply (Z.divide_add_cancel_r _ _ _ (Z.divide_factor_l _ _)) in Hdivide.\n  apply Z.divide_1_r_abs in Hdivide.\n  discriminate.\n}\nunfold eqm.\nrewrite <- !(Zmult_mod_idemp_l x).\nreplace x with (x*1) by ring.\nrewrite <- !(Zmult_mod_idemp_r 1), <-Hinv, !Zmult_mod_idemp_r, !Zmult_mod_idemp_l.\nrewrite <-!Z.mul_assoc, <-!Zdivide_Zdiv_eq by auto.\nrewrite !Z.mul_assoc, <-!(Zmult_mod_idemp_r (pre_div62Modulo m _)), !Hpre1.\nassert (Hab : forall a b, eqm m (a * (d + (if d <? 0 then m else 0)) + b * (e + (if e <? 0 then m else 0))) (a*d + b*e)).\n1:{\n intros a b.\n apply Zplus_eqm;apply Zmult_eqm;try apply eqm_refl;destruct (Z.ltb _ _);unfold eqm;\n  rewrite <-Zplus_mod_idemp_r, ?Z_mod_same_full, ?Zmod_0_l;f_equal;try ring.\n}\nrewrite !Hab, !Zmult_mod_idemp_r.\nrewrite !(Z.mul_comm (x * _)), !Z.mul_assoc, !(Z.mul_add_distr_r _ _ x).\nrewrite <-!Z.mul_assoc, !(Z.mul_comm _ x).\nrewrite <-!(Zmult_mod_idemp_l (_ + _)), !(Zplus_mod (_ * (x * d))), <- !(Zmult_mod_idemp_r (x * _)).\nrewrite Hf, Hg, !Zmult_mod_idemp_r, <-!Zplus_mod, !Zmult_mod_idemp_l.\nrewrite !(Z.mul_comm (_ + _)), <-Hfuv, <-Hgqr, !Z.mul_assoc.\nrewrite <-!(Zmult_mod_idemp_l (_ * _)), Hinv, !Zmult_mod_idemp_l, !Z.mul_1_l.\nauto.\nQed."
  },
  {
    "path": "Coq/C/extraMath.v",
    "content": "Require Import ZArith.\nRequire Import Bool.\nRequire Import Lia.\n\nLocal Open Scope Z.\n\nLemma f_if {A B} (f: A -> B) (b:bool) x y:\n  f (if b then x else y) = if b then f x else f y.\nProof.\ndestruct b; reflexivity.\nQed.\n\nLemma div_bounds a b c d : 0 < d -> d * a <= b < d * c <-> a <= b / d < c.\nProof.\nintros Hd.\nsplit; intros Hb.\n* split;[apply Z.div_le_lower_bound|apply Z.div_lt_upper_bound];tauto.\n* split.\n  - etransitivity;[apply Zmult_le_compat_l|apply Z.mul_div_le];lia.\n  - eapply Z.lt_le_trans;[apply Z.mul_succ_div_gt|apply Zmult_le_compat_l];try lia.\nQed.\n\nLemma Z_shiftr_neg1_l: forall n : Z, 0 <= n -> Z.shiftr (-1) n = -1.\nProof.\napply natlike_rec.\n reflexivity.\nintros x Hx Hrec.\nrewrite <- Z.add_1_r, <- Z.shiftr_shiftr, Hrec by auto with zarith.\nreflexivity.\nQed.\n\nLemma mod_add_carry m a b : 0 < m -> (a mod m + b mod m) / m = Z.b2z ((a + b) mod m <? b mod m).\nProof.\nintros Hm.\nassert (a_pos_bound := Z.mod_pos_bound a m Hm).\nassert (b_pos_bound := Z.mod_pos_bound b m Hm).\ncase Z.ltb_spec;simpl (Z.b2z _);[intros Hlt|intros Hge].\n cut (1 <= (a mod m + b mod m)/m < 2);[lia|].\n apply div_bounds; auto.\n replace (m * 1) with m by ring.\n replace (m * 2) with (m + m) by ring.\n split;[|lia].\n apply Z.nlt_ge; intro Hltm; revert Hlt; apply Z.le_ngt.\n rewrite <- Zplus_mod_idemp_r, <- Zplus_mod_idemp_l.\n rewrite (Zmod_small (_ + _)); lia.\ncut (0 <= (a mod m + b mod m)/m < 1);[lia|].\napply div_bounds; auto.\nreplace (m * 1) with m by ring.\nreplace (m * 0) with 0 by ring.\nsplit;[lia|].\napply Z.nle_gt; intro Hltm; revert Hge; apply Z.lt_nge.\nrewrite <- Zplus_mod_idemp_r, <- Zplus_mod_idemp_l.\nreplace (a mod m + b mod m) with (a mod m + b mod m - 0) by ring.\nrewrite <- (Z_mod_same_full m), Zminus_mod_idemp_r.\nrewrite Z.mod_small;lia.\nQed.\n\nLemma div_add_carry m a b : 0 < m -> (a + b) / m = a / m + b / m + Z.b2z ((a + b) mod m <? b mod m).\nProof.\nintros Hm.\nrewrite <- mod_add_carry by auto.\nrewrite <- Z_div_plus_full_l by lia.\nrewrite Z.mul_add_distr_r.\nreplace\n  (a / m * m + b / m * m + (a mod m + b mod m))\n with\n  (m * (a / m) + a mod m + (m * (b / m) + b mod m))\n by ring.\nrewrite <- !Z_div_mod_eq_full.\nreflexivity.\nQed.\n\nLemma shiftr_mod_add_carry n a b : 0 <= n -> Z.shiftr (a mod (2^n) + b mod (2^n)) n = Z.b2z ((a + b) mod (2^n) <? b mod (2^n)).\nProof.\nintros Hn.\nrewrite Z.shiftr_div_pow2 by assumption.\napply mod_add_carry.\nauto with *.\nQed.\n\nLemma shiftr_add_carry n a b : 0 <= n -> Z.shiftr (a + b) n = Z.shiftr a n + Z.shiftr b n + Z.b2z ((a + b) mod (2^n) <? b mod (2^n)).\nProof.\nintros Hn.\nrewrite !Z.shiftr_div_pow2 by assumption.\napply div_add_carry.\nauto with *.\nQed.\n\nLemma mod_sub_borrow m a b : 0 < m -> (a mod m - b mod m) / m = - Z.b2z (a mod m <? b mod m).\nProof.\nintros Hm.\nassert (a_pos_bound := Z.mod_pos_bound a m Hm).\nassert (b_pos_bound := Z.mod_pos_bound b m Hm).\ncase Z.ltb_spec;simpl (Z.b2z _);[intros Hlt|intros Hge].\n cut (-1 <= (a mod m - b mod m)/m < 0);[lia|].\n apply div_bounds; auto.\n lia.\ncut (0 <= (a mod m - b mod m)/m < 1);[lia|].\napply div_bounds; auto.\nlia.\nQed.\n\nLemma div_sub_borrow m a b : 0 < m -> (a - b) / m = a / m - b / m - Z.b2z (a mod m <? b mod m).\nProof.\nintros Hm.\nunfold Z.sub.\nrewrite <- mod_sub_borrow by auto.\nrewrite <- Z_div_plus_full_l by lia.\nrewrite Z.mul_add_distr_r.\nreplace\n  (a / m * m + - (b / m) * m + (a mod m - b mod m))\n with\n  (m * (a / m) + a mod m - (m * (b / m) + b mod m))\n by ring.\nrewrite <- !Z_div_mod_eq_full.\nreflexivity.\nQed.\n\nLemma shiftr_bounds a b c n : 2^n * a <= b < 2^n * c -> a <= Z.shiftr b n < c.\nProof.\nintros Hb.\nassert (Hn : 0 <= n).\n destruct (Z.neg_nonneg_cases n); auto.\n rewrite (Z.pow_neg_r 2 n) in Hb; lia. \nrewrite Z.shiftr_div_pow2 by assumption.\napply div_bounds; auto with *.\nQed.\n\nLemma shiftr_mod_sub_borrow n a b : 0 <= n -> Z.shiftr (a mod (2^n) - b mod (2^n)) n = - Z.b2z (a mod (2^n) <? b mod (2^n)).\nProof.\nintros Hn.\nrewrite Z.shiftr_div_pow2 by assumption.\napply mod_sub_borrow.\nauto with *.\nQed.\n\nLemma shiftr_sub_borrow n a b : 0 <= n -> Z.shiftr (a - b) n = Z.shiftr a n - Z.shiftr b n - Z.b2z (a mod (2^n) <? b mod (2^n)).\nProof.\nintros Hn.\nrewrite !Z.shiftr_div_pow2 by assumption.\napply div_sub_borrow.\nauto with *.\nQed.\n\nLemma shiftr_small a n : 0 <= a < 2^n -> Z.shiftr a n = 0.\nProof.\nintros [Ha0 Ha1].\napply Zle_lt_or_eq in Ha0.\ndestruct Ha0 as [Ha0| <-].\n apply Z.shiftr_eq_0.\n  lia.\n apply Z.log2_lt_pow2; assumption.\napply Z.shiftr_0_l.\nQed.\n\nLemma shiftr_small_iff a n : 0 <= n -> Z.shiftr a n = 0 <-> 0 <= a < 2^n.\nProof.\nintros Hn.\nsplit;[|apply shiftr_small].\nrewrite Z.shiftr_eq_0_iff.\nintros [->|[Ha Hlog]];[lia|].\nrewrite <- Z.log2_lt_pow2 in Hlog; lia.\nQed.\n\nLemma shiftr_small_neg a n : -2^n <= a < 0 -> Z.shiftr a n = -1.\nProof.\nintros Ha.\ncut (-1 <= Z.shiftr a n < 0);[lia|].\napply shiftr_bounds.\nlia.\nQed.\n\nLemma shiftr_small_neg_iff a n : 0 <= n -> Z.shiftr a n = -1 <-> -2^n <= a < 0.\nProof.\nintros Hn.\nsplit;[|apply shiftr_small_neg].\nintros Ha.\nsplit;[|apply (Z.shiftr_neg _ n);lia].\nrewrite Z.shiftr_div_pow2 in Ha by assumption.\nrewrite (Z_div_mod_eq_full a (2^n)), Ha.\nassert (X := Z.mod_pos_bound a (2^n)).\nlia.\nQed.\n\nLemma shiftr_small_signed a n m : -2^n <= a < 2^n -> 0 < m ->\n  Z.shiftr a (n + m) = Z.shiftr a n.\nProof.\nintros [Ha0 Ha1] Hm.\nrewrite <- Z.shiftr_shiftr by lia.\ndestruct (Z.neg_nonneg_cases a);\n[|rewrite (shiftr_small _ n), Z.shiftr_0_l by lia; reflexivity].\nreplace (Z.shiftr a n) with (-1);\n[rewrite Z_shiftr_neg1_l by lia; reflexivity|].\ncut (-1 <= Z.shiftr a n < 0);[lia|].\napply shiftr_bounds.\nlia.\nQed.\n\nLemma shiftl_mod_eqb_unique n a b c d :\n 0 <= n ->\n Z.shiftl a n + b mod 2^n =? Z.shiftl c n + d mod 2^n =\n ((a =? c) && (b mod 2^n =? d mod 2^n))%bool.\nProof.\nintros Hn.\nrewrite !Z.shiftl_mul_pow2 by auto.\nsymmetry; rewrite andb_comm.\ncase Z.eqb_spec;[case Z.eqb_spec|].\n- intros -> ->.\n  symmetry.\n  apply Z.eqb_eq.\n  reflexivity.\n- intros Hac ->.\n  symmetry.\n  apply Z.eqb_neq.\n  rewrite Z.add_cancel_r.\n  intros Hneq.\n  apply Z.mul_reg_r in Hneq; auto with *.\n- intros Hbd.\n  symmetry.\n  apply Z.eqb_neq.\n  intros Hneq.\n  apply Hbd.\n  rewrite <- Z.mod_mod by auto with *.\n  rewrite <- (Z_mod_plus_full _ a), Z.add_comm, Hneq, Z.add_comm, Z_mod_plus_full.\n  rewrite Z.mod_mod by auto with *.\n  reflexivity.\nQed.\n\nLemma Z_mod_eq_bounded a b m x y :\n 0 < m ->\n b - a <= m ->\n a <= x <= b - 1 ->\n a <= y <= b - 1 ->\n x mod m = y mod m ->\n x = y.\nProof.\nintros Hm Hab Hx Hy Hxym.\ncut (x - a = y - a);[lia|].\nrewrite (Z_div_mod_eq_full (x - a) m), (Z_div_mod_eq_full (y - a) m),\n        <- Zminus_mod_idemp_l, Hxym, Zminus_mod_idemp_l.\ndo 2 f_equal.\nassert (Hx' : 0 <= (x - a)/m < 1) by (apply div_bounds; lia).\nassert (Hy' : 0 <= (y - a)/m < 1) by (apply div_bounds; lia).\nlia.\nQed.\n\nLemma Z_lor_pos (a b : Z) : 0 <= a -> 0 < b -> 0 < Z.lor a b.\nProof.\nintros Ha Hb.\ncut (0 <= Z.lor a b).\n* intros Hab.\n  apply Z.le_lteq in Hab.\n  destruct Hab; try assumption.\n  cut (false = true);[discriminate|].\n  rewrite <- (Z.bits_0 (Z.log2 b)), H, Z.lor_spec, Z.bit_log2, orb_true_r; auto.\n* apply Z.lt_le_incl in Hb.\n  rewrite Z.bits_iff_nonneg_ex in *.\n  destruct Ha as [ka Ha].\n  destruct Hb as [kb Hb].\n  exists (Z.max ka kb).\n  intros m Hm.\n  rewrite Z.lor_spec, Ha, Hb; lia.\nQed.\n\nLemma Z_log2_lt_pow2 (a b : Z) : 0 < b -> a < 2 ^ b <-> Z.log2 a < b.\nProof.\nintros Hb.\ndestruct a as [|a|a];[|apply Z.log2_lt_pow2;lia|];auto with *.\nQed.\n\nLemma Z_shiftr_ones a n : 0 <= n <= a -> (Z.shiftr (Z.ones a) n) = Z.ones (a - n).\nProof.\nintros Hn.\napply Z.bits_inj.\nintros i.\ndestruct (Z.neg_nonneg_cases i) as [Hi|Hi];\n[rewrite !Z.testbit_neg_r by lia; reflexivity|].\nrewrite Z.shiftr_spec, !Z.testbit_ones_nonneg; lia.\nQed.\n\nLemma Z_land_ones_min a b : 0 <= a -> 0 <= b ->\n  (Z.land (Z.ones a) (Z.ones b)) = Z.ones (Z.min a b).\nintros Ha fhb.\napply Z.bits_inj.\nintros i.\ndestruct (Z.neg_nonneg_cases i) as [Hi|Hi];\n[rewrite !Z.testbit_neg_r by lia; reflexivity|].\nrewrite Z.land_spec; rewrite !Z.testbit_ones_nonneg; lia.\nQed.\n\nLemma eqm_2_pow_le m n a b : 0 <= m <= n -> eqm (2^n) a b -> eqm (2^m) a b.\nProof.\nintros Hmn.\nunfold eqm.\nrewrite <- !Z.land_ones by lia.\nreplace m with (Z.min n m) by lia.\nrewrite <- !Z_land_ones_min, !Z.land_assoc by lia.\nintros ->.\nreflexivity.\nQed.\n\nLemma Z_shiftr_mod_2 a i j : 0 <= i -> 0 <= j -> Z.shiftr a i mod 2^j = Z.shiftr (a mod 2^(j + i)) i.\nProof.\nintros Hi Hj.\nrewrite <-!Z.land_ones by lia.\nrewrite Z.shiftr_land, Z_shiftr_ones by lia.\nrepeat f_equal.\nlia.\nQed.\n\nDefinition Z_of_comparison (c : Datatypes.comparison) : Z :=\nmatch c with\n| Gt => 1\n| Eq => 0\n| Lt => -1\nend.\n\nLemma comp_Z_of_comparison c : Z_of_comparison c ?= 0 = c.\nProof.\ndestruct c; reflexivity.\nQed.\n\nLemma Z_of_comparison_bounds c : -1 <= Z_of_comparison c <= 1.\nProof.\ndestruct c; cbn; lia.\nQed.\n\nFixpoint Pos_ctz (p : positive) : nat :=\nmatch p with\n| xO p0 => Nat.succ (Pos_ctz p0)\n| _ => 0\nend.\n\n(* ctz 0 is normally undefined.  We simply return 0 in this case. *)\nDefinition Z_ctz (a : Z) : Z :=\nmatch a with\n| Z0 => 0\n| Zpos p => Z.of_nat (Pos_ctz p)\n| Zneg p => Z.of_nat (Pos_ctz p)\nend.\n\nLemma Z_ctz_non_neg a : 0 <= Z_ctz a.\nProof.\ndestruct a; cbn; lia.\nQed.\n\nLemma Z_ctz_bound_aux a n : Z.pos a < 2^(Z.of_nat n) -> (Pos_ctz a < n)%nat.\nProof.\ndestruct n; try lia.\nrevert n.\ninduction a; auto with *.\nintros n Hn.\nrewrite Nat2Z.inj_succ, Z.pow_succ_r, Pos2Z.inj_xO, <- Z.mul_lt_mono_pos_l in Hn by lia.\nsimpl.\nrewrite <- Nat.succ_lt_mono.\ndestruct n; try lia.\nauto.\nQed.\n\nLemma Z_ctz_bound a n : a <> 0 -> -2^n < a < 2^n -> Z_ctz a < n.\nProof.\nintros Ha0 Ha.\ndestruct (Z.neg_nonneg_cases n);[rewrite Z.pow_neg_r in Ha;lia|].\ndestruct a; try lia; simpl;\nrewrite <- (Z2Nat.id _ H);\napply Nat2Z.inj_lt;\napply Z_ctz_bound_aux;\nrewrite (Z2Nat.id _ H);\nlia.\nQed.\n\nLemma Z_ctz_testbit_false a i : i < Z_ctz a -> Z.testbit a i = false.\nProof.\nrevert i.\ndestruct a; try induction p; simpl in *; try lia;\ntry solve [auto using Z.testbit_neg_r];\nintros i Hi;\n[rewrite Pos2Z.pos_xO|rewrite Pos2Z.neg_xO];\nrewrite Z.double_bits;\napply IHp;\nrewrite Z.lt_pred_lt_succ, <- Zpos_P_of_succ_nat;\nassumption.\nQed.\n\nLemma Z_ctz_testbit_true a : a <> 0 -> Z.testbit a (Z_ctz a) = true.\nProof.\ndestruct a; try lia; intros _;\ninduction p; try reflexivity;\nsimpl (Z_ctz _);\nrewrite Zpos_P_of_succ_nat;\n[rewrite Pos2Z.pos_xO|rewrite Pos2Z.neg_xO];\nrewrite Z.double_bits_succ;\napply IHp.\nQed.\n\nLemma Z_neg_lnot a : -a = Z.lnot a + 1.\nProof.\ncut (a + Z.lnot a = -1);[lia|].\napply Z.add_lnot_diag.\nQed.\n\nLemma Z_testbit_neg_low_aux a i : i <= Z_ctz (Z.pos a) ->\n  Z.testbit (-(Z.pos a)) i = Z.testbit (Z.pos a) i.\nProof.\ndestruct (Z.neg_nonneg_cases i);\n[rewrite !Z.testbit_neg_r; auto|].\nrevert i H a.\napply (natlike_ind (fun i =>\nforall a, i <= Z_ctz (Z.pos a) ->\nZ.testbit (-(Z.pos a)) i =\nZ.testbit (Z.pos a) i)).\n* intros a _.\n  rewrite Z_neg_lnot, Z.add_bit0, Z.lnot_spec, xorb_true_r by lia.\n  apply negb_involutive.\n* intros i H Hrec a Hi.\n  destruct a; try solve [simpl in Hi; lia].\n  rewrite Pos2Z.inj_xO, <- Z.mul_opp_r, !Z.double_bits_succ.\n  apply Hrec.\n  simpl in *.\n  lia.\nQed.\n\nLemma Z_testbit_neg_low a i : i <= Z_ctz a ->\n  Z.testbit (-a) i = Z.testbit a i.\nProof.\nintros Hi.\ndestruct a.\n* reflexivity.\n* auto using Z_testbit_neg_low_aux.\n* symmetry; apply Z_testbit_neg_low_aux.\n  assumption.\nQed.\n\nLemma Z_testbit_neg_high_aux a i : Z_ctz (Z.pos a) < i ->\n  Z.testbit (-(Z.pos a)) i = negb (Z.testbit (Z.pos a) i).\nProof.\nrevert i.\ninduction a.\n* intros i Hi.\n  simpl in Hi.\n  rewrite Z_neg_lnot, Z.add_nocarry_lxor, Z.lxor_spec, Z.lnot_spec; try lia.\n  1:{\n    change (Z.testbit 1) with (Z.testbit (Z.ones 1)).\n    rewrite (Z.ones_spec_high 1 i), xorb_false_r by lia.\n    reflexivity.\n  }\n  apply Z.bits_inj_iff'.\n  intros n Hn.\n  rewrite Z.bits_0, Z.land_comm, Z.land_spec, Z.lnot_spec by lia.\n  apply Zle_lt_or_eq in Hn.\n  destruct Hn as [Hn|<-];[|reflexivity].\n  change (Z.testbit 1) with (Z.testbit (Z.ones 1)).\n  rewrite (Z.ones_spec_high 1 n) by lia.\n  reflexivity.\n* intros i Hi.\n  rewrite Pos2Z.inj_xO, <- Z.mul_opp_r, !Z.double_bits.\n  apply IHa.\n  cbn in Hi.\n  rewrite Zpos_P_of_succ_nat, Z.lt_succ_lt_pred in Hi.\n  assumption.\n* cbn.\n  intros i Hi.\n  change (Z.testbit 1) with (Z.testbit (Z.ones 1)).\n  rewrite Z.bits_m1, (Z.ones_spec_high 1 i) by lia. \n  reflexivity.\nQed.\n\nLemma Z_testbit_neg_high a i : a <> 0 -> Z_ctz a < i ->\n  Z.testbit (-a) i = negb (Z.testbit a i).\nProof.\nintros Ha Hi.\ndestruct a.\n* lia.\n* auto using Z_testbit_neg_high_aux.\n* rewrite <- (negb_involutive (Z.testbit (-Z.neg p) i)).\n  f_equal; symmetry.\n  apply (Z_testbit_neg_high_aux p).\n  assumption.\nQed.\n\nLemma Z_x_and_opp_x a : a <> 0 -> Z.land a (-a) = 2^(Z_ctz a).\nProof.\nintros Ha.\napply Z.bits_inj'.\nintros n Hn.\nrewrite Z.land_spec, Z.pow2_bits_eqb by apply Z_ctz_non_neg.\ndestruct (Z.le_gt_cases n (Z_ctz a));\n[|rewrite Z_testbit_neg_high, andb_negb_r by auto;lia].\nrewrite Z_testbit_neg_low, andb_diag by auto.\napply Z.le_lteq in H.\ndestruct H as [H| ->];\n[rewrite Z_ctz_testbit_false|rewrite Z_ctz_testbit_true]; lia.\nQed.\n\nLemma Z_testbit_false_ctz a i : a <> 0 -> (forall j, 0 <= j <= i -> Z.testbit a j = false) -> i < Z_ctz a.\nProof.\nintros Ha0 Ha.\napply Z.nle_gt.\nintros Hi.\nassert (Htest : Z.testbit a (Z_ctz a) = false).\n* apply Ha.\n  auto using Z_ctz_non_neg.\n* rewrite Z_ctz_testbit_true in Htest by assumption.\n  discriminate.\nQed.\n\nLemma Z_ctz_lor_l a b : a <> 0 -> Z_ctz (Z.lor a b) <= Z_ctz a.\nProof.\nintros Ha.\ncut (forall i, i < Z_ctz (Z.lor a b) -> i < Z_ctz a).\n* intros H.\n  apply Z.lt_pred_le.\n  apply H.\n  lia.\n* intros i Hi.\n  apply Z_testbit_false_ctz;[assumption|].\n  intros j Hj.\n  eapply proj1.\n  apply orb_false_iff.\n  rewrite <- Z.lor_spec.\n  apply Z_ctz_testbit_false.\n  eapply Z.le_lt_trans;[|apply Hi].\n  tauto.\nQed.\n\n"
  },
  {
    "path": "Coq/C/jets_secp256k1.v",
    "content": "(* clightgen -normalize -I secp256k1 -U__has_builtin -D USE_FORCE_WIDEMUL_INT128_STRUCT -D VERIFY -D VST -fstruct-passing jets-secp256k1.c *)\nFrom Coq Require Import String List ZArith.\nFrom compcert Require Import Coqlib Integers Floats AST Ctypes Cop Clight Clightdefs.\nImport Clightdefs.ClightNotations.\nLocal Open Scope Z_scope.\nLocal Open Scope string_scope.\nLocal Open Scope clight_scope.\n\nModule Info.\n  Definition version := \"22.10-sources\".\n  Definition build_number := \"11868730\".\n  Definition build_tag := \"auto/2022/10/17/2029\".\n  Definition build_branch := \"auto/2022/10\".\n  Definition arch := \"x86\".\n  Definition model := \"64\".\n  Definition abi := \"standard\".\n  Definition bitsize := 64.\n  Definition big_endian := false.\n  Definition source_file := \"jets-secp256k1.c\".\n  Definition normalized := true.\nEnd Info.\n\nDefinition _LSBclear : ident := $\"LSBclear\".\nDefinition _M : ident := $\"M\".\nDefinition _M52 : ident := $\"M52\".\nDefinition _M62 : ident := $\"M62\".\nDefinition _R : ident := $\"R\".\nDefinition _ReadBE32 : ident := $\"ReadBE32\".\nDefinition _SECP256K1_SIGNED62_ONE : ident := $\"SECP256K1_SIGNED62_ONE\".\nDefinition _WriteBE32 : ident := $\"WriteBE32\".\nDefinition _WriteBE64 : ident := $\"WriteBE64\".\nDefinition _Z : ident := $\"Z\".\nDefinition __2064 : ident := $\"_2064\".\nDefinition __2380 : ident := $\"_2380\".\nDefinition __2382 : ident := $\"_2382\".\nDefinition __2843 : ident := $\"_2843\".\nDefinition __3154 : ident := $\"_3154\".\nDefinition __3156 : ident := $\"_3156\".\nDefinition __3158 : ident := $\"_3158\".\nDefinition __3626 : ident := $\"_3626\".\nDefinition __3711 : ident := $\"_3711\".\nDefinition __IO_FILE : ident := $\"_IO_FILE\".\nDefinition __IO_backup_base : ident := $\"_IO_backup_base\".\nDefinition __IO_buf_base : ident := $\"_IO_buf_base\".\nDefinition __IO_buf_end : ident := $\"_IO_buf_end\".\nDefinition __IO_codecvt : ident := $\"_IO_codecvt\".\nDefinition __IO_marker : ident := $\"_IO_marker\".\nDefinition __IO_read_base : ident := $\"_IO_read_base\".\nDefinition __IO_read_end : ident := $\"_IO_read_end\".\nDefinition __IO_read_ptr : ident := $\"_IO_read_ptr\".\nDefinition __IO_save_base : ident := $\"_IO_save_base\".\nDefinition __IO_save_end : ident := $\"_IO_save_end\".\nDefinition __IO_wide_data : ident := $\"_IO_wide_data\".\nDefinition __IO_write_base : ident := $\"_IO_write_base\".\nDefinition __IO_write_end : ident := $\"_IO_write_end\".\nDefinition __IO_write_ptr : ident := $\"_IO_write_ptr\".\nDefinition ___assert_fail : ident := $\"__assert_fail\".\nDefinition ___builtin_addl : ident := $\"__builtin_addl\".\nDefinition ___builtin_ais_annot : ident := $\"__builtin_ais_annot\".\nDefinition ___builtin_annot : ident := $\"__builtin_annot\".\nDefinition ___builtin_annot_intval : ident := $\"__builtin_annot_intval\".\nDefinition ___builtin_bswap : ident := $\"__builtin_bswap\".\nDefinition ___builtin_bswap16 : ident := $\"__builtin_bswap16\".\nDefinition ___builtin_bswap32 : ident := $\"__builtin_bswap32\".\nDefinition ___builtin_bswap64 : ident := $\"__builtin_bswap64\".\nDefinition ___builtin_clz : ident := $\"__builtin_clz\".\nDefinition ___builtin_clzl : ident := $\"__builtin_clzl\".\nDefinition ___builtin_clzll : ident := $\"__builtin_clzll\".\nDefinition ___builtin_ctz : ident := $\"__builtin_ctz\".\nDefinition ___builtin_ctzl : ident := $\"__builtin_ctzl\".\nDefinition ___builtin_ctzll : ident := $\"__builtin_ctzll\".\nDefinition ___builtin_debug : ident := $\"__builtin_debug\".\nDefinition ___builtin_expect : ident := $\"__builtin_expect\".\nDefinition ___builtin_fabs : ident := $\"__builtin_fabs\".\nDefinition ___builtin_fabsf : ident := $\"__builtin_fabsf\".\nDefinition ___builtin_fmadd : ident := $\"__builtin_fmadd\".\nDefinition ___builtin_fmax : ident := $\"__builtin_fmax\".\nDefinition ___builtin_fmin : ident := $\"__builtin_fmin\".\nDefinition ___builtin_fmsub : ident := $\"__builtin_fmsub\".\nDefinition ___builtin_fnmadd : ident := $\"__builtin_fnmadd\".\nDefinition ___builtin_fnmsub : ident := $\"__builtin_fnmsub\".\nDefinition ___builtin_fsqrt : ident := $\"__builtin_fsqrt\".\nDefinition ___builtin_isfinite : ident := $\"__builtin_isfinite\".\nDefinition ___builtin_isfinitef : ident := $\"__builtin_isfinitef\".\nDefinition ___builtin_isinf : ident := $\"__builtin_isinf\".\nDefinition ___builtin_isinff : ident := $\"__builtin_isinff\".\nDefinition ___builtin_isnan : ident := $\"__builtin_isnan\".\nDefinition ___builtin_isnanf : ident := $\"__builtin_isnanf\".\nDefinition ___builtin_membar : ident := $\"__builtin_membar\".\nDefinition ___builtin_memcpy_aligned : ident := $\"__builtin_memcpy_aligned\".\nDefinition ___builtin_mull : ident := $\"__builtin_mull\".\nDefinition ___builtin_nan : ident := $\"__builtin_nan\".\nDefinition ___builtin_nanf : ident := $\"__builtin_nanf\".\nDefinition ___builtin_nans : ident := $\"__builtin_nans\".\nDefinition ___builtin_nansf : ident := $\"__builtin_nansf\".\nDefinition ___builtin_negl : ident := $\"__builtin_negl\".\nDefinition ___builtin_nop : ident := $\"__builtin_nop\".\nDefinition ___builtin_read16_reversed : ident := $\"__builtin_read16_reversed\".\nDefinition ___builtin_read32_reversed : ident := $\"__builtin_read32_reversed\".\nDefinition ___builtin_sel : ident := $\"__builtin_sel\".\nDefinition ___builtin_sqrt : ident := $\"__builtin_sqrt\".\nDefinition ___builtin_subl : ident := $\"__builtin_subl\".\nDefinition ___builtin_unreachable : ident := $\"__builtin_unreachable\".\nDefinition ___builtin_va_arg : ident := $\"__builtin_va_arg\".\nDefinition ___builtin_va_copy : ident := $\"__builtin_va_copy\".\nDefinition ___builtin_va_end : ident := $\"__builtin_va_end\".\nDefinition ___builtin_va_start : ident := $\"__builtin_va_start\".\nDefinition ___builtin_write16_reversed : ident := $\"__builtin_write16_reversed\".\nDefinition ___builtin_write32_reversed : ident := $\"__builtin_write32_reversed\".\nDefinition ___compcert_i64_dtos : ident := $\"__compcert_i64_dtos\".\nDefinition ___compcert_i64_dtou : ident := $\"__compcert_i64_dtou\".\nDefinition ___compcert_i64_ftos : ident := $\"__compcert_i64_ftos\".\nDefinition ___compcert_i64_ftou : ident := $\"__compcert_i64_ftou\".\nDefinition ___compcert_i64_sar : ident := $\"__compcert_i64_sar\".\nDefinition ___compcert_i64_sdiv : ident := $\"__compcert_i64_sdiv\".\nDefinition ___compcert_i64_shl : ident := $\"__compcert_i64_shl\".\nDefinition ___compcert_i64_shr : ident := $\"__compcert_i64_shr\".\nDefinition ___compcert_i64_smod : ident := $\"__compcert_i64_smod\".\nDefinition ___compcert_i64_smulh : ident := $\"__compcert_i64_smulh\".\nDefinition ___compcert_i64_stod : ident := $\"__compcert_i64_stod\".\nDefinition ___compcert_i64_stof : ident := $\"__compcert_i64_stof\".\nDefinition ___compcert_i64_udiv : ident := $\"__compcert_i64_udiv\".\nDefinition ___compcert_i64_umod : ident := $\"__compcert_i64_umod\".\nDefinition ___compcert_i64_umulh : ident := $\"__compcert_i64_umulh\".\nDefinition ___compcert_i64_utod : ident := $\"__compcert_i64_utod\".\nDefinition ___compcert_i64_utof : ident := $\"__compcert_i64_utof\".\nDefinition ___compcert_va_composite : ident := $\"__compcert_va_composite\".\nDefinition ___compcert_va_float32 : ident := $\"__compcert_va_float32\".\nDefinition ___compcert_va_float64 : ident := $\"__compcert_va_float64\".\nDefinition ___compcert_va_int32 : ident := $\"__compcert_va_int32\".\nDefinition ___compcert_va_int64 : ident := $\"__compcert_va_int64\".\nDefinition ___compound : ident := $\"__compound\".\nDefinition ___func__ : ident := $\"__func__\".\nDefinition ___func____1 : ident := $\"__func____1\".\nDefinition ___stringlit_1 : ident := $\"__stringlit_1\".\nDefinition ___stringlit_10 : ident := $\"__stringlit_10\".\nDefinition ___stringlit_100 : ident := $\"__stringlit_100\".\nDefinition ___stringlit_101 : ident := $\"__stringlit_101\".\nDefinition ___stringlit_102 : ident := $\"__stringlit_102\".\nDefinition ___stringlit_103 : ident := $\"__stringlit_103\".\nDefinition ___stringlit_104 : ident := $\"__stringlit_104\".\nDefinition ___stringlit_105 : ident := $\"__stringlit_105\".\nDefinition ___stringlit_106 : ident := $\"__stringlit_106\".\nDefinition ___stringlit_107 : ident := $\"__stringlit_107\".\nDefinition ___stringlit_108 : ident := $\"__stringlit_108\".\nDefinition ___stringlit_109 : ident := $\"__stringlit_109\".\nDefinition ___stringlit_11 : ident := $\"__stringlit_11\".\nDefinition ___stringlit_110 : ident := $\"__stringlit_110\".\nDefinition ___stringlit_111 : ident := $\"__stringlit_111\".\nDefinition ___stringlit_112 : ident := $\"__stringlit_112\".\nDefinition ___stringlit_113 : ident := $\"__stringlit_113\".\nDefinition ___stringlit_114 : ident := $\"__stringlit_114\".\nDefinition ___stringlit_115 : ident := $\"__stringlit_115\".\nDefinition ___stringlit_116 : ident := $\"__stringlit_116\".\nDefinition ___stringlit_117 : ident := $\"__stringlit_117\".\nDefinition ___stringlit_118 : ident := $\"__stringlit_118\".\nDefinition ___stringlit_119 : ident := $\"__stringlit_119\".\nDefinition ___stringlit_12 : ident := $\"__stringlit_12\".\nDefinition ___stringlit_120 : ident := $\"__stringlit_120\".\nDefinition ___stringlit_121 : ident := $\"__stringlit_121\".\nDefinition ___stringlit_122 : ident := $\"__stringlit_122\".\nDefinition ___stringlit_123 : ident := $\"__stringlit_123\".\nDefinition ___stringlit_124 : ident := $\"__stringlit_124\".\nDefinition ___stringlit_125 : ident := $\"__stringlit_125\".\nDefinition ___stringlit_126 : ident := $\"__stringlit_126\".\nDefinition ___stringlit_127 : ident := $\"__stringlit_127\".\nDefinition ___stringlit_128 : ident := $\"__stringlit_128\".\nDefinition ___stringlit_129 : ident := $\"__stringlit_129\".\nDefinition ___stringlit_13 : ident := $\"__stringlit_13\".\nDefinition ___stringlit_130 : ident := $\"__stringlit_130\".\nDefinition ___stringlit_131 : ident := $\"__stringlit_131\".\nDefinition ___stringlit_132 : ident := $\"__stringlit_132\".\nDefinition ___stringlit_133 : ident := $\"__stringlit_133\".\nDefinition ___stringlit_134 : ident := $\"__stringlit_134\".\nDefinition ___stringlit_135 : ident := $\"__stringlit_135\".\nDefinition ___stringlit_136 : ident := $\"__stringlit_136\".\nDefinition ___stringlit_137 : ident := $\"__stringlit_137\".\nDefinition ___stringlit_138 : ident := $\"__stringlit_138\".\nDefinition ___stringlit_139 : ident := $\"__stringlit_139\".\nDefinition ___stringlit_14 : ident := $\"__stringlit_14\".\nDefinition ___stringlit_140 : ident := $\"__stringlit_140\".\nDefinition ___stringlit_141 : ident := $\"__stringlit_141\".\nDefinition ___stringlit_142 : ident := $\"__stringlit_142\".\nDefinition ___stringlit_143 : ident := $\"__stringlit_143\".\nDefinition ___stringlit_144 : ident := $\"__stringlit_144\".\nDefinition ___stringlit_145 : ident := $\"__stringlit_145\".\nDefinition ___stringlit_146 : ident := $\"__stringlit_146\".\nDefinition ___stringlit_147 : ident := $\"__stringlit_147\".\nDefinition ___stringlit_148 : ident := $\"__stringlit_148\".\nDefinition ___stringlit_149 : ident := $\"__stringlit_149\".\nDefinition ___stringlit_15 : ident := $\"__stringlit_15\".\nDefinition ___stringlit_150 : ident := $\"__stringlit_150\".\nDefinition ___stringlit_151 : ident := $\"__stringlit_151\".\nDefinition ___stringlit_152 : ident := $\"__stringlit_152\".\nDefinition ___stringlit_153 : ident := $\"__stringlit_153\".\nDefinition ___stringlit_154 : ident := $\"__stringlit_154\".\nDefinition ___stringlit_155 : ident := $\"__stringlit_155\".\nDefinition ___stringlit_156 : ident := $\"__stringlit_156\".\nDefinition ___stringlit_157 : ident := $\"__stringlit_157\".\nDefinition ___stringlit_158 : ident := $\"__stringlit_158\".\nDefinition ___stringlit_159 : ident := $\"__stringlit_159\".\nDefinition ___stringlit_16 : ident := $\"__stringlit_16\".\nDefinition ___stringlit_160 : ident := $\"__stringlit_160\".\nDefinition ___stringlit_161 : ident := $\"__stringlit_161\".\nDefinition ___stringlit_162 : ident := $\"__stringlit_162\".\nDefinition ___stringlit_163 : ident := $\"__stringlit_163\".\nDefinition ___stringlit_164 : ident := $\"__stringlit_164\".\nDefinition ___stringlit_165 : ident := $\"__stringlit_165\".\nDefinition ___stringlit_166 : ident := $\"__stringlit_166\".\nDefinition ___stringlit_167 : ident := $\"__stringlit_167\".\nDefinition ___stringlit_168 : ident := $\"__stringlit_168\".\nDefinition ___stringlit_169 : ident := $\"__stringlit_169\".\nDefinition ___stringlit_17 : ident := $\"__stringlit_17\".\nDefinition ___stringlit_170 : ident := $\"__stringlit_170\".\nDefinition ___stringlit_171 : ident := $\"__stringlit_171\".\nDefinition ___stringlit_172 : ident := $\"__stringlit_172\".\nDefinition ___stringlit_18 : ident := $\"__stringlit_18\".\nDefinition ___stringlit_19 : ident := $\"__stringlit_19\".\nDefinition ___stringlit_2 : ident := $\"__stringlit_2\".\nDefinition ___stringlit_20 : ident := $\"__stringlit_20\".\nDefinition ___stringlit_21 : ident := $\"__stringlit_21\".\nDefinition ___stringlit_22 : ident := $\"__stringlit_22\".\nDefinition ___stringlit_23 : ident := $\"__stringlit_23\".\nDefinition ___stringlit_24 : ident := $\"__stringlit_24\".\nDefinition ___stringlit_25 : ident := $\"__stringlit_25\".\nDefinition ___stringlit_26 : ident := $\"__stringlit_26\".\nDefinition ___stringlit_27 : ident := $\"__stringlit_27\".\nDefinition ___stringlit_28 : ident := $\"__stringlit_28\".\nDefinition ___stringlit_29 : ident := $\"__stringlit_29\".\nDefinition ___stringlit_3 : ident := $\"__stringlit_3\".\nDefinition ___stringlit_30 : ident := $\"__stringlit_30\".\nDefinition ___stringlit_31 : ident := $\"__stringlit_31\".\nDefinition ___stringlit_32 : ident := $\"__stringlit_32\".\nDefinition ___stringlit_33 : ident := $\"__stringlit_33\".\nDefinition ___stringlit_34 : ident := $\"__stringlit_34\".\nDefinition ___stringlit_35 : ident := $\"__stringlit_35\".\nDefinition ___stringlit_36 : ident := $\"__stringlit_36\".\nDefinition ___stringlit_37 : ident := $\"__stringlit_37\".\nDefinition ___stringlit_38 : ident := $\"__stringlit_38\".\nDefinition ___stringlit_39 : ident := $\"__stringlit_39\".\nDefinition ___stringlit_4 : ident := $\"__stringlit_4\".\nDefinition ___stringlit_40 : ident := $\"__stringlit_40\".\nDefinition ___stringlit_41 : ident := $\"__stringlit_41\".\nDefinition ___stringlit_42 : ident := $\"__stringlit_42\".\nDefinition ___stringlit_43 : ident := $\"__stringlit_43\".\nDefinition ___stringlit_44 : ident := $\"__stringlit_44\".\nDefinition ___stringlit_45 : ident := $\"__stringlit_45\".\nDefinition ___stringlit_46 : ident := $\"__stringlit_46\".\nDefinition ___stringlit_47 : ident := $\"__stringlit_47\".\nDefinition ___stringlit_48 : ident := $\"__stringlit_48\".\nDefinition ___stringlit_49 : ident := $\"__stringlit_49\".\nDefinition ___stringlit_5 : ident := $\"__stringlit_5\".\nDefinition ___stringlit_50 : ident := $\"__stringlit_50\".\nDefinition ___stringlit_51 : ident := $\"__stringlit_51\".\nDefinition ___stringlit_52 : ident := $\"__stringlit_52\".\nDefinition ___stringlit_53 : ident := $\"__stringlit_53\".\nDefinition ___stringlit_54 : ident := $\"__stringlit_54\".\nDefinition ___stringlit_55 : ident := $\"__stringlit_55\".\nDefinition ___stringlit_56 : ident := $\"__stringlit_56\".\nDefinition ___stringlit_57 : ident := $\"__stringlit_57\".\nDefinition ___stringlit_58 : ident := $\"__stringlit_58\".\nDefinition ___stringlit_59 : ident := $\"__stringlit_59\".\nDefinition ___stringlit_6 : ident := $\"__stringlit_6\".\nDefinition ___stringlit_60 : ident := $\"__stringlit_60\".\nDefinition ___stringlit_61 : ident := $\"__stringlit_61\".\nDefinition ___stringlit_62 : ident := $\"__stringlit_62\".\nDefinition ___stringlit_63 : ident := $\"__stringlit_63\".\nDefinition ___stringlit_64 : ident := $\"__stringlit_64\".\nDefinition ___stringlit_65 : ident := $\"__stringlit_65\".\nDefinition ___stringlit_66 : ident := $\"__stringlit_66\".\nDefinition ___stringlit_67 : ident := $\"__stringlit_67\".\nDefinition ___stringlit_68 : ident := $\"__stringlit_68\".\nDefinition ___stringlit_69 : ident := $\"__stringlit_69\".\nDefinition ___stringlit_7 : ident := $\"__stringlit_7\".\nDefinition ___stringlit_70 : ident := $\"__stringlit_70\".\nDefinition ___stringlit_71 : ident := $\"__stringlit_71\".\nDefinition ___stringlit_72 : ident := $\"__stringlit_72\".\nDefinition ___stringlit_73 : ident := $\"__stringlit_73\".\nDefinition ___stringlit_74 : ident := $\"__stringlit_74\".\nDefinition ___stringlit_75 : ident := $\"__stringlit_75\".\nDefinition ___stringlit_76 : ident := $\"__stringlit_76\".\nDefinition ___stringlit_77 : ident := $\"__stringlit_77\".\nDefinition ___stringlit_78 : ident := $\"__stringlit_78\".\nDefinition ___stringlit_79 : ident := $\"__stringlit_79\".\nDefinition ___stringlit_8 : ident := $\"__stringlit_8\".\nDefinition ___stringlit_80 : ident := $\"__stringlit_80\".\nDefinition ___stringlit_81 : ident := $\"__stringlit_81\".\nDefinition ___stringlit_82 : ident := $\"__stringlit_82\".\nDefinition ___stringlit_83 : ident := $\"__stringlit_83\".\nDefinition ___stringlit_84 : ident := $\"__stringlit_84\".\nDefinition ___stringlit_85 : ident := $\"__stringlit_85\".\nDefinition ___stringlit_86 : ident := $\"__stringlit_86\".\nDefinition ___stringlit_87 : ident := $\"__stringlit_87\".\nDefinition ___stringlit_88 : ident := $\"__stringlit_88\".\nDefinition ___stringlit_89 : ident := $\"__stringlit_89\".\nDefinition ___stringlit_9 : ident := $\"__stringlit_9\".\nDefinition ___stringlit_90 : ident := $\"__stringlit_90\".\nDefinition ___stringlit_91 : ident := $\"__stringlit_91\".\nDefinition ___stringlit_92 : ident := $\"__stringlit_92\".\nDefinition ___stringlit_93 : ident := $\"__stringlit_93\".\nDefinition ___stringlit_94 : ident := $\"__stringlit_94\".\nDefinition ___stringlit_95 : ident := $\"__stringlit_95\".\nDefinition ___stringlit_96 : ident := $\"__stringlit_96\".\nDefinition ___stringlit_97 : ident := $\"__stringlit_97\".\nDefinition ___stringlit_98 : ident := $\"__stringlit_98\".\nDefinition ___stringlit_99 : ident := $\"__stringlit_99\".\nDefinition __chain : ident := $\"_chain\".\nDefinition __codecvt : ident := $\"_codecvt\".\nDefinition __cur_column : ident := $\"_cur_column\".\nDefinition __fileno : ident := $\"_fileno\".\nDefinition __flags : ident := $\"_flags\".\nDefinition __flags2 : ident := $\"_flags2\".\nDefinition __freeres_buf : ident := $\"_freeres_buf\".\nDefinition __freeres_list : ident := $\"_freeres_list\".\nDefinition __lock : ident := $\"_lock\".\nDefinition __markers : ident := $\"_markers\".\nDefinition __mode : ident := $\"_mode\".\nDefinition __offset : ident := $\"_offset\".\nDefinition __old_offset : ident := $\"_old_offset\".\nDefinition __prevchain : ident := $\"_prevchain\".\nDefinition __res : ident := $\"_res\".\nDefinition __res__1 : ident := $\"_res__1\".\nDefinition __shortbuf : ident := $\"_shortbuf\".\nDefinition __unused2 : ident := $\"_unused2\".\nDefinition __vtable_offset : ident := $\"_vtable_offset\".\nDefinition __wide_data : ident := $\"_wide_data\".\nDefinition _a : ident := $\"a\".\nDefinition _a0 : ident := $\"a0\".\nDefinition _a1 : ident := $\"a1\".\nDefinition _a2 : ident := $\"a2\".\nDefinition _a3 : ident := $\"a3\".\nDefinition _a4 : ident := $\"a4\".\nDefinition _a__1 : ident := $\"a__1\".\nDefinition _abort : ident := $\"abort\".\nDefinition _abs : ident := $\"abs\".\nDefinition _accum : ident := $\"accum\".\nDefinition _add : ident := $\"add\".\nDefinition _ai : ident := $\"ai\".\nDefinition _alen : ident := $\"alen\".\nDefinition _alphain : ident := $\"alphain\".\nDefinition _alphaquad : ident := $\"alphaquad\".\nDefinition _am : ident := $\"am\".\nDefinition _arr : ident := $\"arr\".\nDefinition _aux : ident := $\"aux\".\nDefinition _ax : ident := $\"ax\".\nDefinition _ay : ident := $\"ay\".\nDefinition _az : ident := $\"az\".\nDefinition _b : ident := $\"b\".\nDefinition _b32 : ident := $\"b32\".\nDefinition _betain : ident := $\"betain\".\nDefinition _betaquad : ident := $\"betaquad\".\nDefinition _bin : ident := $\"bin\".\nDefinition _bit : ident := $\"bit\".\nDefinition _bits : ident := $\"bits\".\nDefinition _bits_na_1 : ident := $\"bits_na_1\".\nDefinition _bits_na_lam : ident := $\"bits_na_lam\".\nDefinition _bits_ng_1 : ident := $\"bits_ng_1\".\nDefinition _bits_ng_128 : ident := $\"bits_ng_128\".\nDefinition _blind : ident := $\"blind\".\nDefinition _blind32 : ident := $\"blind32\".\nDefinition _block : ident := $\"block\".\nDefinition _bm : ident := $\"bm\".\nDefinition _buf : ident := $\"buf\".\nDefinition _buf1 : ident := $\"buf1\".\nDefinition _buf2 : ident := $\"buf2\".\nDefinition _bx : ident := $\"bx\".\nDefinition _by : ident := $\"by\".\nDefinition _bzinv : ident := $\"bzinv\".\nDefinition _bzinv2 : ident := $\"bzinv2\".\nDefinition _bzinv3 : ident := $\"bzinv3\".\nDefinition _c : ident := $\"c\".\nDefinition _c0 : ident := $\"c0\".\nDefinition _c1 : ident := $\"c1\".\nDefinition _c128 : ident := $\"c128\".\nDefinition _c2 : ident := $\"c2\".\nDefinition _carry : ident := $\"carry\".\nDefinition _cd : ident := $\"cd\".\nDefinition _ce : ident := $\"ce\".\nDefinition _cf : ident := $\"cf\".\nDefinition _cg : ident := $\"cg\".\nDefinition _chunk : ident := $\"chunk\".\nDefinition _cond : ident := $\"cond\".\nDefinition _cond_add : ident := $\"cond_add\".\nDefinition _cond_negate : ident := $\"cond_negate\".\nDefinition _count : ident := $\"count\".\nDefinition _counter : ident := $\"counter\".\nDefinition _ctx : ident := $\"ctx\".\nDefinition _ctx__1 : ident := $\"ctx__1\".\nDefinition _d : ident := $\"d\".\nDefinition _d0 : ident := $\"d0\".\nDefinition _d1 : ident := $\"d1\".\nDefinition _d2 : ident := $\"d2\".\nDefinition _d3 : ident := $\"d3\".\nDefinition _d4 : ident := $\"d4\".\nDefinition _d_ge : ident := $\"d_ge\".\nDefinition _data : ident := $\"data\".\nDefinition _debruijn : ident := $\"debruijn\".\nDefinition _delta : ident := $\"delta\".\nDefinition _diff : ident := $\"diff\".\nDefinition _dst : ident := $\"dst\".\nDefinition _dst_ptr : ident := $\"dst_ptr\".\nDefinition _e : ident := $\"e\".\nDefinition _e0 : ident := $\"e0\".\nDefinition _e1 : ident := $\"e1\".\nDefinition _e2 : ident := $\"e2\".\nDefinition _e3 : ident := $\"e3\".\nDefinition _e4 : ident := $\"e4\".\nDefinition _edge : ident := $\"edge\".\nDefinition _env : ident := $\"env\".\nDefinition _eta : ident := $\"eta\".\nDefinition _f : ident := $\"f\".\nDefinition _f0 : ident := $\"f0\".\nDefinition _factor : ident := $\"factor\".\nDefinition _fi : ident := $\"fi\".\nDefinition _flag : ident := $\"flag\".\nDefinition _fn : ident := $\"fn\".\nDefinition _fprintf : ident := $\"fprintf\".\nDefinition _frame : ident := $\"frame\".\nDefinition _frameItem : ident := $\"frameItem\".\nDefinition _g : ident := $\"g\".\nDefinition _g0 : ident := $\"g0\".\nDefinition _g1 : ident := $\"g1\".\nDefinition _g2 : ident := $\"g2\".\nDefinition _gammain : ident := $\"gammain\".\nDefinition _ge : ident := $\"ge\".\nDefinition _gen : ident := $\"gen\".\nDefinition _gi : ident := $\"gi\".\nDefinition _gn : ident := $\"gn\".\nDefinition _h : ident := $\"h\".\nDefinition _h2 : ident := $\"h2\".\nDefinition _h3 : ident := $\"h3\".\nDefinition _hash : ident := $\"hash\".\nDefinition _hh : ident := $\"hh\".\nDefinition _hi : ident := $\"hi\".\nDefinition _hl : ident := $\"hl\".\nDefinition _i : ident := $\"i\".\nDefinition _inf : ident := $\"inf\".\nDefinition _infinity : ident := $\"infinity\".\nDefinition _input32 : ident := $\"input32\".\nDefinition _input_hash : ident := $\"input_hash\".\nDefinition _input_pubkey : ident := $\"input_pubkey\".\nDefinition _internal_pubkey : ident := $\"internal_pubkey\".\nDefinition _iv : ident := $\"iv\".\nDefinition _j : ident := $\"j\".\nDefinition _jinv : ident := $\"jinv\".\nDefinition _k : ident := $\"k\".\nDefinition _k1_bound : ident := $\"k1_bound\".\nDefinition _k2_bound : ident := $\"k2_bound\".\nDefinition _key : ident := $\"key\".\nDefinition _key32 : ident := $\"key32\".\nDefinition _l : ident := $\"l\".\nDefinition _last_set_bit : ident := $\"last_set_bit\".\nDefinition _len : ident := $\"len\".\nDefinition _length : ident := $\"length\".\nDefinition _lh : ident := $\"lh\".\nDefinition _limit : ident := $\"limit\".\nDefinition _ll : ident := $\"ll\".\nDefinition _lo : ident := $\"lo\".\nDefinition _m : ident := $\"m\".\nDefinition _m0 : ident := $\"m0\".\nDefinition _m1 : ident := $\"m1\".\nDefinition _m2 : ident := $\"m2\".\nDefinition _m3 : ident := $\"m3\".\nDefinition _m4 : ident := $\"m4\".\nDefinition _m5 : ident := $\"m5\".\nDefinition _m6 : ident := $\"m6\".\nDefinition _magnitude : ident := $\"magnitude\".\nDefinition _main : ident := $\"main\".\nDefinition _mask : ident := $\"mask\".\nDefinition _mask0 : ident := $\"mask0\".\nDefinition _mask1 : ident := $\"mask1\".\nDefinition _md : ident := $\"md\".\nDefinition _me : ident := $\"me\".\nDefinition _memcpy : ident := $\"memcpy\".\nDefinition _memset : ident := $\"memset\".\nDefinition _mid34 : ident := $\"mid34\".\nDefinition _midstate : ident := $\"midstate\".\nDefinition _minus_b1 : ident := $\"minus_b1\".\nDefinition _minus_b2 : ident := $\"minus_b2\".\nDefinition _modinfo : ident := $\"modinfo\".\nDefinition _modulus : ident := $\"modulus\".\nDefinition _modulus_inv62 : ident := $\"modulus_inv62\".\nDefinition _msg : ident := $\"msg\".\nDefinition _msglen : ident := $\"msglen\".\nDefinition _n : ident := $\"n\".\nDefinition _n0 : ident := $\"n0\".\nDefinition _n1 : ident := $\"n1\".\nDefinition _n2 : ident := $\"n2\".\nDefinition _n3 : ident := $\"n3\".\nDefinition _na : ident := $\"na\".\nDefinition _na_1 : ident := $\"na_1\".\nDefinition _na__1 : ident := $\"na__1\".\nDefinition _na_lam : ident := $\"na_lam\".\nDefinition _negc : ident := $\"negc\".\nDefinition _ng : ident := $\"ng\".\nDefinition _ng_1 : ident := $\"ng_1\".\nDefinition _ng_128 : ident := $\"ng_128\".\nDefinition _ng__1 : ident := $\"ng__1\".\nDefinition _ng__2 : ident := $\"ng__2\".\nDefinition _no : ident := $\"no\".\nDefinition _nonzero : ident := $\"nonzero\".\nDefinition _normalized : ident := $\"normalized\".\nDefinition _now : ident := $\"now\".\nDefinition _np : ident := $\"np\".\nDefinition _num : ident := $\"num\".\nDefinition _odd : ident := $\"odd\".\nDefinition _offset : ident := $\"offset\".\nDefinition _one : ident := $\"one\".\nDefinition _output : ident := $\"output\".\nDefinition _output32 : ident := $\"output32\".\nDefinition _output_hash : ident := $\"output_hash\".\nDefinition _output_pubkey : ident := $\"output_pubkey\".\nDefinition _over : ident := $\"over\".\nDefinition _over__1 : ident := $\"over__1\".\nDefinition _over__2 : ident := $\"over__2\".\nDefinition _over__3 : ident := $\"over__3\".\nDefinition _over__4 : ident := $\"over__4\".\nDefinition _over__5 : ident := $\"over__5\".\nDefinition _over__6 : ident := $\"over__6\".\nDefinition _overflow : ident := $\"overflow\".\nDefinition _p : ident := $\"p\".\nDefinition _p0 : ident := $\"p0\".\nDefinition _p1 : ident := $\"p1\".\nDefinition _p2 : ident := $\"p2\".\nDefinition _p3 : ident := $\"p3\".\nDefinition _p4 : ident := $\"p4\".\nDefinition _peekBit : ident := $\"peekBit\".\nDefinition _pk : ident := $\"pk\".\nDefinition _pk_parity : ident := $\"pk_parity\".\nDefinition _pkj : ident := $\"pkj\".\nDefinition _pre : ident := $\"pre\".\nDefinition _pre_a : ident := $\"pre_a\".\nDefinition _prefix1 : ident := $\"prefix1\".\nDefinition _prefix2 : ident := $\"prefix2\".\nDefinition _ps : ident := $\"ps\".\nDefinition _pt : ident := $\"pt\".\nDefinition _ptr : ident := $\"ptr\".\nDefinition _pubkey : ident := $\"pubkey\".\nDefinition _pubkey32 : ident := $\"pubkey32\".\nDefinition _q : ident := $\"q\".\nDefinition _r : ident := $\"r\".\nDefinition _r0 : ident := $\"r0\".\nDefinition _r1 : ident := $\"r1\".\nDefinition _r2 : ident := $\"r2\".\nDefinition _r3 : ident := $\"r3\".\nDefinition _r32 : ident := $\"r32\".\nDefinition _r4 : ident := $\"r4\".\nDefinition _read32s : ident := $\"read32s\".\nDefinition _read8s : ident := $\"read8s\".\nDefinition _readBit : ident := $\"readBit\".\nDefinition _read_fe : ident := $\"read_fe\".\nDefinition _read_ge : ident := $\"read_ge\".\nDefinition _read_gej : ident := $\"read_gej\".\nDefinition _read_scalar : ident := $\"read_scalar\".\nDefinition _result : ident := $\"result\".\nDefinition _ret : ident := $\"ret\".\nDefinition _rj : ident := $\"rj\".\nDefinition _rx : ident := $\"rx\".\nDefinition _rzr : ident := $\"rzr\".\nDefinition _s : ident := $\"s\".\nDefinition _s1 : ident := $\"s1\".\nDefinition _s2 : ident := $\"s2\".\nDefinition _sd : ident := $\"sd\".\nDefinition _se : ident := $\"se\".\nDefinition _secp256k1_const_beta : ident := $\"secp256k1_const_beta\".\nDefinition _secp256k1_const_lambda : ident := $\"secp256k1_const_lambda\".\nDefinition _secp256k1_const_modinfo_fe : ident := $\"secp256k1_const_modinfo_fe\".\nDefinition _secp256k1_const_modinfo_scalar : ident := $\"secp256k1_const_modinfo_scalar\".\nDefinition _secp256k1_ctz64_var : ident := $\"secp256k1_ctz64_var\".\nDefinition _secp256k1_ctz64_var_debruijn : ident := $\"secp256k1_ctz64_var_debruijn\".\nDefinition _secp256k1_ec_pubkey_tweak_add_helper : ident := $\"secp256k1_ec_pubkey_tweak_add_helper\".\nDefinition _secp256k1_eckey_pubkey_tweak_add : ident := $\"secp256k1_eckey_pubkey_tweak_add\".\nDefinition _secp256k1_ecmult : ident := $\"secp256k1_ecmult\".\nDefinition _secp256k1_ecmult_odd_multiples_table : ident := $\"secp256k1_ecmult_odd_multiples_table\".\nDefinition _secp256k1_ecmult_strauss_wnaf : ident := $\"secp256k1_ecmult_strauss_wnaf\".\nDefinition _secp256k1_ecmult_table_get_ge : ident := $\"secp256k1_ecmult_table_get_ge\".\nDefinition _secp256k1_ecmult_table_get_ge_lambda : ident := $\"secp256k1_ecmult_table_get_ge_lambda\".\nDefinition _secp256k1_ecmult_table_get_ge_storage : ident := $\"secp256k1_ecmult_table_get_ge_storage\".\nDefinition _secp256k1_ecmult_wnaf : ident := $\"secp256k1_ecmult_wnaf\".\nDefinition _secp256k1_extrakeys_ge_even_y : ident := $\"secp256k1_extrakeys_ge_even_y\".\nDefinition _secp256k1_fe_add : ident := $\"secp256k1_fe_add\".\nDefinition _secp256k1_fe_add_int : ident := $\"secp256k1_fe_add_int\".\nDefinition _secp256k1_fe_clear : ident := $\"secp256k1_fe_clear\".\nDefinition _secp256k1_fe_cmov : ident := $\"secp256k1_fe_cmov\".\nDefinition _secp256k1_fe_equal_var : ident := $\"secp256k1_fe_equal_var\".\nDefinition _secp256k1_fe_from_signed62 : ident := $\"secp256k1_fe_from_signed62\".\nDefinition _secp256k1_fe_from_storage : ident := $\"secp256k1_fe_from_storage\".\nDefinition _secp256k1_fe_get_b32 : ident := $\"secp256k1_fe_get_b32\".\nDefinition _secp256k1_fe_half : ident := $\"secp256k1_fe_half\".\nDefinition _secp256k1_fe_inv_var : ident := $\"secp256k1_fe_inv_var\".\nDefinition _secp256k1_fe_is_odd : ident := $\"secp256k1_fe_is_odd\".\nDefinition _secp256k1_fe_is_zero : ident := $\"secp256k1_fe_is_zero\".\nDefinition _secp256k1_fe_mul : ident := $\"secp256k1_fe_mul\".\nDefinition _secp256k1_fe_mul_inner : ident := $\"secp256k1_fe_mul_inner\".\nDefinition _secp256k1_fe_mul_int : ident := $\"secp256k1_fe_mul_int\".\nDefinition _secp256k1_fe_negate : ident := $\"secp256k1_fe_negate\".\nDefinition _secp256k1_fe_normalize_var : ident := $\"secp256k1_fe_normalize_var\".\nDefinition _secp256k1_fe_normalize_weak : ident := $\"secp256k1_fe_normalize_weak\".\nDefinition _secp256k1_fe_normalizes_to_zero : ident := $\"secp256k1_fe_normalizes_to_zero\".\nDefinition _secp256k1_fe_normalizes_to_zero_var : ident := $\"secp256k1_fe_normalizes_to_zero_var\".\nDefinition _secp256k1_fe_set_b32 : ident := $\"secp256k1_fe_set_b32\".\nDefinition _secp256k1_fe_set_int : ident := $\"secp256k1_fe_set_int\".\nDefinition _secp256k1_fe_sqr : ident := $\"secp256k1_fe_sqr\".\nDefinition _secp256k1_fe_sqr_inner : ident := $\"secp256k1_fe_sqr_inner\".\nDefinition _secp256k1_fe_sqrt_var : ident := $\"secp256k1_fe_sqrt_var\".\nDefinition _secp256k1_fe_to_signed62 : ident := $\"secp256k1_fe_to_signed62\".\nDefinition _secp256k1_fe_to_storage : ident := $\"secp256k1_fe_to_storage\".\nDefinition _secp256k1_fe_verify : ident := $\"secp256k1_fe_verify\".\nDefinition _secp256k1_ge_from_storage : ident := $\"secp256k1_ge_from_storage\".\nDefinition _secp256k1_ge_is_in_correct_subgroup : ident := $\"secp256k1_ge_is_in_correct_subgroup\".\nDefinition _secp256k1_ge_is_infinity : ident := $\"secp256k1_ge_is_infinity\".\nDefinition _secp256k1_ge_is_valid_var : ident := $\"secp256k1_ge_is_valid_var\".\nDefinition _secp256k1_ge_neg : ident := $\"secp256k1_ge_neg\".\nDefinition _secp256k1_ge_set_gej_var : ident := $\"secp256k1_ge_set_gej_var\".\nDefinition _secp256k1_ge_set_gej_zinv : ident := $\"secp256k1_ge_set_gej_zinv\".\nDefinition _secp256k1_ge_set_infinity : ident := $\"secp256k1_ge_set_infinity\".\nDefinition _secp256k1_ge_set_xo_var : ident := $\"secp256k1_ge_set_xo_var\".\nDefinition _secp256k1_ge_set_xy : ident := $\"secp256k1_ge_set_xy\".\nDefinition _secp256k1_ge_table_set_globalz : ident := $\"secp256k1_ge_table_set_globalz\".\nDefinition _secp256k1_ge_to_storage : ident := $\"secp256k1_ge_to_storage\".\nDefinition _secp256k1_gej_add_ge_var : ident := $\"secp256k1_gej_add_ge_var\".\nDefinition _secp256k1_gej_add_var : ident := $\"secp256k1_gej_add_var\".\nDefinition _secp256k1_gej_add_zinv_var : ident := $\"secp256k1_gej_add_zinv_var\".\nDefinition _secp256k1_gej_double : ident := $\"secp256k1_gej_double\".\nDefinition _secp256k1_gej_double_var : ident := $\"secp256k1_gej_double_var\".\nDefinition _secp256k1_gej_eq_ge_var : ident := $\"secp256k1_gej_eq_ge_var\".\nDefinition _secp256k1_gej_eq_var : ident := $\"secp256k1_gej_eq_var\".\nDefinition _secp256k1_gej_eq_x_var : ident := $\"secp256k1_gej_eq_x_var\".\nDefinition _secp256k1_gej_is_infinity : ident := $\"secp256k1_gej_is_infinity\".\nDefinition _secp256k1_gej_neg : ident := $\"secp256k1_gej_neg\".\nDefinition _secp256k1_gej_rescale : ident := $\"secp256k1_gej_rescale\".\nDefinition _secp256k1_gej_set_ge : ident := $\"secp256k1_gej_set_ge\".\nDefinition _secp256k1_gej_set_infinity : ident := $\"secp256k1_gej_set_infinity\".\nDefinition _secp256k1_generator_generate : ident := $\"secp256k1_generator_generate\".\nDefinition _secp256k1_generator_generate_internal : ident := $\"secp256k1_generator_generate_internal\".\nDefinition _secp256k1_generator_load : ident := $\"secp256k1_generator_load\".\nDefinition _secp256k1_generator_save : ident := $\"secp256k1_generator_save\".\nDefinition _secp256k1_i128_accum_mul : ident := $\"secp256k1_i128_accum_mul\".\nDefinition _secp256k1_i128_check_pow2 : ident := $\"secp256k1_i128_check_pow2\".\nDefinition _secp256k1_i128_det : ident := $\"secp256k1_i128_det\".\nDefinition _secp256k1_i128_dissip_mul : ident := $\"secp256k1_i128_dissip_mul\".\nDefinition _secp256k1_i128_eq_var : ident := $\"secp256k1_i128_eq_var\".\nDefinition _secp256k1_i128_from_i64 : ident := $\"secp256k1_i128_from_i64\".\nDefinition _secp256k1_i128_mul : ident := $\"secp256k1_i128_mul\".\nDefinition _secp256k1_i128_rshift : ident := $\"secp256k1_i128_rshift\".\nDefinition _secp256k1_i128_to_i64 : ident := $\"secp256k1_i128_to_i64\".\nDefinition _secp256k1_i128_to_u64 : ident := $\"secp256k1_i128_to_u64\".\nDefinition _secp256k1_memcmp_var : ident := $\"secp256k1_memcmp_var\".\nDefinition _secp256k1_modinv64_abs : ident := $\"secp256k1_modinv64_abs\".\nDefinition _secp256k1_modinv64_det_check_pow2 : ident := $\"secp256k1_modinv64_det_check_pow2\".\nDefinition _secp256k1_modinv64_divsteps_62_var : ident := $\"secp256k1_modinv64_divsteps_62_var\".\nDefinition _secp256k1_modinv64_modinfo : ident := $\"secp256k1_modinv64_modinfo\".\nDefinition _secp256k1_modinv64_mul_62 : ident := $\"secp256k1_modinv64_mul_62\".\nDefinition _secp256k1_modinv64_mul_cmp_62 : ident := $\"secp256k1_modinv64_mul_cmp_62\".\nDefinition _secp256k1_modinv64_normalize_62 : ident := $\"secp256k1_modinv64_normalize_62\".\nDefinition _secp256k1_modinv64_signed62 : ident := $\"secp256k1_modinv64_signed62\".\nDefinition _secp256k1_modinv64_signed62_assign : ident := $\"secp256k1_modinv64_signed62_assign\".\nDefinition _secp256k1_modinv64_trans2x2 : ident := $\"secp256k1_modinv64_trans2x2\".\nDefinition _secp256k1_modinv64_update_de_62 : ident := $\"secp256k1_modinv64_update_de_62\".\nDefinition _secp256k1_modinv64_update_fg_62_var : ident := $\"secp256k1_modinv64_update_fg_62_var\".\nDefinition _secp256k1_modinv64_var : ident := $\"secp256k1_modinv64_var\".\nDefinition _secp256k1_mul128 : ident := $\"secp256k1_mul128\".\nDefinition _secp256k1_pre_g : ident := $\"secp256k1_pre_g\".\nDefinition _secp256k1_pre_g_128 : ident := $\"secp256k1_pre_g_128\".\nDefinition _secp256k1_pubkey_load : ident := $\"secp256k1_pubkey_load\".\nDefinition _secp256k1_pubkey_save : ident := $\"secp256k1_pubkey_save\".\nDefinition _secp256k1_scalar_add : ident := $\"secp256k1_scalar_add\".\nDefinition _secp256k1_scalar_cadd_bit : ident := $\"secp256k1_scalar_cadd_bit\".\nDefinition _secp256k1_scalar_check_overflow : ident := $\"secp256k1_scalar_check_overflow\".\nDefinition _secp256k1_scalar_eq : ident := $\"secp256k1_scalar_eq\".\nDefinition _secp256k1_scalar_from_signed62 : ident := $\"secp256k1_scalar_from_signed62\".\nDefinition _secp256k1_scalar_get_b32 : ident := $\"secp256k1_scalar_get_b32\".\nDefinition _secp256k1_scalar_get_bits : ident := $\"secp256k1_scalar_get_bits\".\nDefinition _secp256k1_scalar_get_bits_var : ident := $\"secp256k1_scalar_get_bits_var\".\nDefinition _secp256k1_scalar_inverse_var : ident := $\"secp256k1_scalar_inverse_var\".\nDefinition _secp256k1_scalar_is_zero : ident := $\"secp256k1_scalar_is_zero\".\nDefinition _secp256k1_scalar_mul : ident := $\"secp256k1_scalar_mul\".\nDefinition _secp256k1_scalar_mul_512 : ident := $\"secp256k1_scalar_mul_512\".\nDefinition _secp256k1_scalar_mul_shift_var : ident := $\"secp256k1_scalar_mul_shift_var\".\nDefinition _secp256k1_scalar_negate : ident := $\"secp256k1_scalar_negate\".\nDefinition _secp256k1_scalar_reduce : ident := $\"secp256k1_scalar_reduce\".\nDefinition _secp256k1_scalar_reduce_512 : ident := $\"secp256k1_scalar_reduce_512\".\nDefinition _secp256k1_scalar_set_b32 : ident := $\"secp256k1_scalar_set_b32\".\nDefinition _secp256k1_scalar_set_int : ident := $\"secp256k1_scalar_set_int\".\nDefinition _secp256k1_scalar_split_128 : ident := $\"secp256k1_scalar_split_128\".\nDefinition _secp256k1_scalar_split_lambda : ident := $\"secp256k1_scalar_split_lambda\".\nDefinition _secp256k1_scalar_split_lambda_verify : ident := $\"secp256k1_scalar_split_lambda_verify\".\nDefinition _secp256k1_scalar_to_signed62 : ident := $\"secp256k1_scalar_to_signed62\".\nDefinition _secp256k1_schnorrsig_challenge : ident := $\"secp256k1_schnorrsig_challenge\".\nDefinition _secp256k1_schnorrsig_sha256_tagged : ident := $\"secp256k1_schnorrsig_sha256_tagged\".\nDefinition _secp256k1_schnorrsig_verify : ident := $\"secp256k1_schnorrsig_verify\".\nDefinition _secp256k1_strauss_point_state : ident := $\"secp256k1_strauss_point_state\".\nDefinition _secp256k1_strauss_state : ident := $\"secp256k1_strauss_state\".\nDefinition _secp256k1_u128_accum_mul : ident := $\"secp256k1_u128_accum_mul\".\nDefinition _secp256k1_u128_accum_u64 : ident := $\"secp256k1_u128_accum_u64\".\nDefinition _secp256k1_u128_check_bits : ident := $\"secp256k1_u128_check_bits\".\nDefinition _secp256k1_u128_from_u64 : ident := $\"secp256k1_u128_from_u64\".\nDefinition _secp256k1_u128_hi_u64 : ident := $\"secp256k1_u128_hi_u64\".\nDefinition _secp256k1_u128_mul : ident := $\"secp256k1_u128_mul\".\nDefinition _secp256k1_u128_rshift : ident := $\"secp256k1_u128_rshift\".\nDefinition _secp256k1_u128_to_u64 : ident := $\"secp256k1_u128_to_u64\".\nDefinition _secp256k1_uint128 : ident := $\"secp256k1_uint128\".\nDefinition _secp256k1_umul128 : ident := $\"secp256k1_umul128\".\nDefinition _secp256k1_xonly_pubkey_from_pubkey : ident := $\"secp256k1_xonly_pubkey_from_pubkey\".\nDefinition _secp256k1_xonly_pubkey_load : ident := $\"secp256k1_xonly_pubkey_load\".\nDefinition _secp256k1_xonly_pubkey_parse : ident := $\"secp256k1_xonly_pubkey_parse\".\nDefinition _secp256k1_xonly_pubkey_save : ident := $\"secp256k1_xonly_pubkey_save\".\nDefinition _secp256k1_xonly_pubkey_serialize : ident := $\"secp256k1_xonly_pubkey_serialize\".\nDefinition _secp256k1_xonly_pubkey_tweak_add : ident := $\"secp256k1_xonly_pubkey_tweak_add\".\nDefinition _sha : ident := $\"sha\".\nDefinition _sha256_buf : ident := $\"sha256_buf\".\nDefinition _sha256_compression_uchar : ident := $\"sha256_compression_uchar\".\nDefinition _sha256_context : ident := $\"sha256_context\".\nDefinition _sha256_ctx : ident := $\"sha256_ctx\".\nDefinition _sha256_ctx__1 : ident := $\"sha256_ctx__1\".\nDefinition _sha256_finalize : ident := $\"sha256_finalize\".\nDefinition _sha256_fromMidstate : ident := $\"sha256_fromMidstate\".\nDefinition _sha256_hash : ident := $\"sha256_hash\".\nDefinition _sha256_init : ident := $\"sha256_init\".\nDefinition _sha256_iv : ident := $\"sha256_iv\".\nDefinition _sha256_max_counter : ident := $\"sha256_max_counter\".\nDefinition _sha256_midstate : ident := $\"sha256_midstate\".\nDefinition _sha256_tagged_init : ident := $\"sha256_tagged_init\".\nDefinition _sha256_u64be : ident := $\"sha256_u64be\".\nDefinition _sha256_uchars : ident := $\"sha256_uchars\".\nDefinition _sha_buf : ident := $\"sha_buf\".\nDefinition _shallue_van_de_woestijne : ident := $\"shallue_van_de_woestijne\".\nDefinition _shift : ident := $\"shift\".\nDefinition _shifthigh : ident := $\"shifthigh\".\nDefinition _shiftlimbs : ident := $\"shiftlimbs\".\nDefinition _shiftlow : ident := $\"shiftlow\".\nDefinition _sig : ident := $\"sig\".\nDefinition _sig64 : ident := $\"sig64\".\nDefinition _sign : ident := $\"sign\".\nDefinition _signatureIV : ident := $\"signatureIV\".\nDefinition _simplicity_bip_0340_verify : ident := $\"simplicity_bip_0340_verify\".\nDefinition _simplicity_check_sig_verify : ident := $\"simplicity_check_sig_verify\".\nDefinition _simplicity_decompress : ident := $\"simplicity_decompress\".\nDefinition _simplicity_fe_add : ident := $\"simplicity_fe_add\".\nDefinition _simplicity_fe_invert : ident := $\"simplicity_fe_invert\".\nDefinition _simplicity_fe_is_odd : ident := $\"simplicity_fe_is_odd\".\nDefinition _simplicity_fe_is_zero : ident := $\"simplicity_fe_is_zero\".\nDefinition _simplicity_fe_multiply : ident := $\"simplicity_fe_multiply\".\nDefinition _simplicity_fe_multiply_beta : ident := $\"simplicity_fe_multiply_beta\".\nDefinition _simplicity_fe_negate : ident := $\"simplicity_fe_negate\".\nDefinition _simplicity_fe_normalize : ident := $\"simplicity_fe_normalize\".\nDefinition _simplicity_fe_square : ident := $\"simplicity_fe_square\".\nDefinition _simplicity_fe_square_root : ident := $\"simplicity_fe_square_root\".\nDefinition _simplicity_ge_is_on_curve : ident := $\"simplicity_ge_is_on_curve\".\nDefinition _simplicity_ge_negate : ident := $\"simplicity_ge_negate\".\nDefinition _simplicity_gej_add : ident := $\"simplicity_gej_add\".\nDefinition _simplicity_gej_double : ident := $\"simplicity_gej_double\".\nDefinition _simplicity_gej_equiv : ident := $\"simplicity_gej_equiv\".\nDefinition _simplicity_gej_ge_add : ident := $\"simplicity_gej_ge_add\".\nDefinition _simplicity_gej_ge_add_ex : ident := $\"simplicity_gej_ge_add_ex\".\nDefinition _simplicity_gej_ge_equiv : ident := $\"simplicity_gej_ge_equiv\".\nDefinition _simplicity_gej_infinity : ident := $\"simplicity_gej_infinity\".\nDefinition _simplicity_gej_is_infinity : ident := $\"simplicity_gej_is_infinity\".\nDefinition _simplicity_gej_is_on_curve : ident := $\"simplicity_gej_is_on_curve\".\nDefinition _simplicity_gej_is_valid_var : ident := $\"simplicity_gej_is_valid_var\".\nDefinition _simplicity_gej_negate : ident := $\"simplicity_gej_negate\".\nDefinition _simplicity_gej_normalize : ident := $\"simplicity_gej_normalize\".\nDefinition _simplicity_gej_rescale : ident := $\"simplicity_gej_rescale\".\nDefinition _simplicity_gej_x_equiv : ident := $\"simplicity_gej_x_equiv\".\nDefinition _simplicity_gej_y_is_odd : ident := $\"simplicity_gej_y_is_odd\".\nDefinition _simplicity_generate : ident := $\"simplicity_generate\".\nDefinition _simplicity_generic_taptweak : ident := $\"simplicity_generic_taptweak\".\nDefinition _simplicity_hash_to_curve : ident := $\"simplicity_hash_to_curve\".\nDefinition _simplicity_linear_combination_1 : ident := $\"simplicity_linear_combination_1\".\nDefinition _simplicity_linear_verify_1 : ident := $\"simplicity_linear_verify_1\".\nDefinition _simplicity_off_curve_linear_combination_1 : ident := $\"simplicity_off_curve_linear_combination_1\".\nDefinition _simplicity_off_curve_scale : ident := $\"simplicity_off_curve_scale\".\nDefinition _simplicity_point_verify_1 : ident := $\"simplicity_point_verify_1\".\nDefinition _simplicity_read32 : ident := $\"simplicity_read32\".\nDefinition _simplicity_read8 : ident := $\"simplicity_read8\".\nDefinition _simplicity_scalar_add : ident := $\"simplicity_scalar_add\".\nDefinition _simplicity_scalar_invert : ident := $\"simplicity_scalar_invert\".\nDefinition _simplicity_scalar_is_zero : ident := $\"simplicity_scalar_is_zero\".\nDefinition _simplicity_scalar_multiply : ident := $\"simplicity_scalar_multiply\".\nDefinition _simplicity_scalar_multiply_lambda : ident := $\"simplicity_scalar_multiply_lambda\".\nDefinition _simplicity_scalar_negate : ident := $\"simplicity_scalar_negate\".\nDefinition _simplicity_scalar_normalize : ident := $\"simplicity_scalar_normalize\".\nDefinition _simplicity_scalar_square : ident := $\"simplicity_scalar_square\".\nDefinition _simplicity_scale : ident := $\"simplicity_scale\".\nDefinition _simplicity_sha256_compression : ident := $\"simplicity_sha256_compression\".\nDefinition _simplicity_swu : ident := $\"simplicity_swu\".\nDefinition _simplicity_write8 : ident := $\"simplicity_write8\".\nDefinition _skipBits : ident := $\"skipBits\".\nDefinition _skip_fe : ident := $\"skip_fe\".\nDefinition _skip_ge : ident := $\"skip_ge\".\nDefinition _src : ident := $\"src\".\nDefinition _state : ident := $\"state\".\nDefinition _stderr : ident := $\"stderr\".\nDefinition _succeed : ident := $\"succeed\".\nDefinition _t : ident := $\"t\".\nDefinition _t0 : ident := $\"t0\".\nDefinition _t1 : ident := $\"t1\".\nDefinition _t2 : ident := $\"t2\".\nDefinition _t3 : ident := $\"t3\".\nDefinition _t4 : ident := $\"t4\".\nDefinition _t__1 : ident := $\"t__1\".\nDefinition _t__10 : ident := $\"t__10\".\nDefinition _t__11 : ident := $\"t__11\".\nDefinition _t__12 : ident := $\"t__12\".\nDefinition _t__13 : ident := $\"t__13\".\nDefinition _t__14 : ident := $\"t__14\".\nDefinition _t__15 : ident := $\"t__15\".\nDefinition _t__2 : ident := $\"t__2\".\nDefinition _t__3 : ident := $\"t__3\".\nDefinition _t__4 : ident := $\"t__4\".\nDefinition _t__5 : ident := $\"t__5\".\nDefinition _t__6 : ident := $\"t__6\".\nDefinition _t__7 : ident := $\"t__7\".\nDefinition _t__8 : ident := $\"t__8\".\nDefinition _t__9 : ident := $\"t__9\".\nDefinition _tagLen : ident := $\"tagLen\".\nDefinition _tagName : ident := $\"tagName\".\nDefinition _taptweakTag : ident := $\"taptweakTag\".\nDefinition _term : ident := $\"term\".\nDefinition _th : ident := $\"th\".\nDefinition _th__1 : ident := $\"th__1\".\nDefinition _th__10 : ident := $\"th__10\".\nDefinition _th__11 : ident := $\"th__11\".\nDefinition _th__12 : ident := $\"th__12\".\nDefinition _th__13 : ident := $\"th__13\".\nDefinition _th__14 : ident := $\"th__14\".\nDefinition _th__15 : ident := $\"th__15\".\nDefinition _th__2 : ident := $\"th__2\".\nDefinition _th__3 : ident := $\"th__3\".\nDefinition _th__4 : ident := $\"th__4\".\nDefinition _th__5 : ident := $\"th__5\".\nDefinition _th__6 : ident := $\"th__6\".\nDefinition _th__7 : ident := $\"th__7\".\nDefinition _th__8 : ident := $\"th__8\".\nDefinition _th__9 : ident := $\"th__9\".\nDefinition _tl : ident := $\"tl\".\nDefinition _tl__1 : ident := $\"tl__1\".\nDefinition _tl__10 : ident := $\"tl__10\".\nDefinition _tl__11 : ident := $\"tl__11\".\nDefinition _tl__12 : ident := $\"tl__12\".\nDefinition _tl__13 : ident := $\"tl__13\".\nDefinition _tl__14 : ident := $\"tl__14\".\nDefinition _tl__15 : ident := $\"tl__15\".\nDefinition _tl__2 : ident := $\"tl__2\".\nDefinition _tl__3 : ident := $\"tl__3\".\nDefinition _tl__4 : ident := $\"tl__4\".\nDefinition _tl__5 : ident := $\"tl__5\".\nDefinition _tl__6 : ident := $\"tl__6\".\nDefinition _tl__7 : ident := $\"tl__7\".\nDefinition _tl__8 : ident := $\"tl__8\".\nDefinition _tl__9 : ident := $\"tl__9\".\nDefinition _tmp : ident := $\"tmp\".\nDefinition _tmpa : ident := $\"tmpa\".\nDefinition _tweak : ident := $\"tweak\".\nDefinition _tweak32 : ident := $\"tweak32\".\nDefinition _tx : ident := $\"tx\".\nDefinition _txEnv : ident := $\"txEnv\".\nDefinition _u : ident := $\"u\".\nDefinition _u0 : ident := $\"u0\".\nDefinition _u1 : ident := $\"u1\".\nDefinition _u2 : ident := $\"u2\".\nDefinition _v : ident := $\"v\".\nDefinition _verify_bit : ident := $\"verify_bit\".\nDefinition _w : ident := $\"w\".\nDefinition _wd : ident := $\"wd\".\nDefinition _wnaf : ident := $\"wnaf\".\nDefinition _wnaf_na_1 : ident := $\"wnaf_na_1\".\nDefinition _wnaf_na_lam : ident := $\"wnaf_na_lam\".\nDefinition _wnaf_ng_1 : ident := $\"wnaf_ng_1\".\nDefinition _wnaf_ng_128 : ident := $\"wnaf_ng_128\".\nDefinition _word : ident := $\"word\".\nDefinition _write8s : ident := $\"write8s\".\nDefinition _writeBit : ident := $\"writeBit\".\nDefinition _write_fe : ident := $\"write_fe\".\nDefinition _write_ge : ident := $\"write_ge\".\nDefinition _write_gej : ident := $\"write_gej\".\nDefinition _write_scalar : ident := $\"write_scalar\".\nDefinition _x : ident := $\"x\".\nDefinition _x1 : ident := $\"x1\".\nDefinition _x11 : ident := $\"x11\".\nDefinition _x176 : ident := $\"x176\".\nDefinition _x2 : ident := $\"x2\".\nDefinition _x22 : ident := $\"x22\".\nDefinition _x220 : ident := $\"x220\".\nDefinition _x223 : ident := $\"x223\".\nDefinition _x3 : ident := $\"x3\".\nDefinition _x3d : ident := $\"x3d\".\nDefinition _x44 : ident := $\"x44\".\nDefinition _x6 : ident := $\"x6\".\nDefinition _x88 : ident := $\"x88\".\nDefinition _x9 : ident := $\"x9\".\nDefinition _xonly_pubkey : ident := $\"xonly_pubkey\".\nDefinition _y : ident := $\"y\".\nDefinition _y1 : ident := $\"y1\".\nDefinition _y2 : ident := $\"y2\".\nDefinition _y3 : ident := $\"y3\".\nDefinition _y_parity : ident := $\"y_parity\".\nDefinition _yes : ident := $\"yes\".\nDefinition _z : ident := $\"z\".\nDefinition _z0 : ident := $\"z0\".\nDefinition _z1 : ident := $\"z1\".\nDefinition _z12 : ident := $\"z12\".\nDefinition _z2 : ident := $\"z2\".\nDefinition _z22 : ident := $\"z22\".\nDefinition _z3 : ident := $\"z3\".\nDefinition _z6 : ident := $\"z6\".\nDefinition _zero : ident := $\"zero\".\nDefinition _zero_in : ident := $\"zero_in\".\nDefinition _zeros : ident := $\"zeros\".\nDefinition _zi : ident := $\"zi\".\nDefinition _zi2 : ident := $\"zi2\".\nDefinition _zi3 : ident := $\"zi3\".\nDefinition _zr : ident := $\"zr\".\nDefinition _zs : ident := $\"zs\".\nDefinition _zz : ident := $\"zz\".\nDefinition _t'1 : ident := 128%positive.\nDefinition _t'10 : ident := 137%positive.\nDefinition _t'100 : ident := 227%positive.\nDefinition _t'101 : ident := 228%positive.\nDefinition _t'102 : ident := 229%positive.\nDefinition _t'103 : ident := 230%positive.\nDefinition _t'104 : ident := 231%positive.\nDefinition _t'105 : ident := 232%positive.\nDefinition _t'106 : ident := 233%positive.\nDefinition _t'107 : ident := 234%positive.\nDefinition _t'108 : ident := 235%positive.\nDefinition _t'109 : ident := 236%positive.\nDefinition _t'11 : ident := 138%positive.\nDefinition _t'110 : ident := 237%positive.\nDefinition _t'111 : ident := 238%positive.\nDefinition _t'112 : ident := 239%positive.\nDefinition _t'113 : ident := 240%positive.\nDefinition _t'114 : ident := 241%positive.\nDefinition _t'115 : ident := 242%positive.\nDefinition _t'116 : ident := 243%positive.\nDefinition _t'117 : ident := 244%positive.\nDefinition _t'118 : ident := 245%positive.\nDefinition _t'119 : ident := 246%positive.\nDefinition _t'12 : ident := 139%positive.\nDefinition _t'120 : ident := 247%positive.\nDefinition _t'121 : ident := 248%positive.\nDefinition _t'122 : ident := 249%positive.\nDefinition _t'123 : ident := 250%positive.\nDefinition _t'124 : ident := 251%positive.\nDefinition _t'125 : ident := 252%positive.\nDefinition _t'126 : ident := 253%positive.\nDefinition _t'13 : ident := 140%positive.\nDefinition _t'14 : ident := 141%positive.\nDefinition _t'15 : ident := 142%positive.\nDefinition _t'16 : ident := 143%positive.\nDefinition _t'17 : ident := 144%positive.\nDefinition _t'18 : ident := 145%positive.\nDefinition _t'19 : ident := 146%positive.\nDefinition _t'2 : ident := 129%positive.\nDefinition _t'20 : ident := 147%positive.\nDefinition _t'21 : ident := 148%positive.\nDefinition _t'22 : ident := 149%positive.\nDefinition _t'23 : ident := 150%positive.\nDefinition _t'24 : ident := 151%positive.\nDefinition _t'25 : ident := 152%positive.\nDefinition _t'26 : ident := 153%positive.\nDefinition _t'27 : ident := 154%positive.\nDefinition _t'28 : ident := 155%positive.\nDefinition _t'29 : ident := 156%positive.\nDefinition _t'3 : ident := 130%positive.\nDefinition _t'30 : ident := 157%positive.\nDefinition _t'31 : ident := 158%positive.\nDefinition _t'32 : ident := 159%positive.\nDefinition _t'33 : ident := 160%positive.\nDefinition _t'34 : ident := 161%positive.\nDefinition _t'35 : ident := 162%positive.\nDefinition _t'36 : ident := 163%positive.\nDefinition _t'37 : ident := 164%positive.\nDefinition _t'38 : ident := 165%positive.\nDefinition _t'39 : ident := 166%positive.\nDefinition _t'4 : ident := 131%positive.\nDefinition _t'40 : ident := 167%positive.\nDefinition _t'41 : ident := 168%positive.\nDefinition _t'42 : ident := 169%positive.\nDefinition _t'43 : ident := 170%positive.\nDefinition _t'44 : ident := 171%positive.\nDefinition _t'45 : ident := 172%positive.\nDefinition _t'46 : ident := 173%positive.\nDefinition _t'47 : ident := 174%positive.\nDefinition _t'48 : ident := 175%positive.\nDefinition _t'49 : ident := 176%positive.\nDefinition _t'5 : ident := 132%positive.\nDefinition _t'50 : ident := 177%positive.\nDefinition _t'51 : ident := 178%positive.\nDefinition _t'52 : ident := 179%positive.\nDefinition _t'53 : ident := 180%positive.\nDefinition _t'54 : ident := 181%positive.\nDefinition _t'55 : ident := 182%positive.\nDefinition _t'56 : ident := 183%positive.\nDefinition _t'57 : ident := 184%positive.\nDefinition _t'58 : ident := 185%positive.\nDefinition _t'59 : ident := 186%positive.\nDefinition _t'6 : ident := 133%positive.\nDefinition _t'60 : ident := 187%positive.\nDefinition _t'61 : ident := 188%positive.\nDefinition _t'62 : ident := 189%positive.\nDefinition _t'63 : ident := 190%positive.\nDefinition _t'64 : ident := 191%positive.\nDefinition _t'65 : ident := 192%positive.\nDefinition _t'66 : ident := 193%positive.\nDefinition _t'67 : ident := 194%positive.\nDefinition _t'68 : ident := 195%positive.\nDefinition _t'69 : ident := 196%positive.\nDefinition _t'7 : ident := 134%positive.\nDefinition _t'70 : ident := 197%positive.\nDefinition _t'71 : ident := 198%positive.\nDefinition _t'72 : ident := 199%positive.\nDefinition _t'73 : ident := 200%positive.\nDefinition _t'74 : ident := 201%positive.\nDefinition _t'75 : ident := 202%positive.\nDefinition _t'76 : ident := 203%positive.\nDefinition _t'77 : ident := 204%positive.\nDefinition _t'78 : ident := 205%positive.\nDefinition _t'79 : ident := 206%positive.\nDefinition _t'8 : ident := 135%positive.\nDefinition _t'80 : ident := 207%positive.\nDefinition _t'81 : ident := 208%positive.\nDefinition _t'82 : ident := 209%positive.\nDefinition _t'83 : ident := 210%positive.\nDefinition _t'84 : ident := 211%positive.\nDefinition _t'85 : ident := 212%positive.\nDefinition _t'86 : ident := 213%positive.\nDefinition _t'87 : ident := 214%positive.\nDefinition _t'88 : ident := 215%positive.\nDefinition _t'89 : ident := 216%positive.\nDefinition _t'9 : ident := 136%positive.\nDefinition _t'90 : ident := 217%positive.\nDefinition _t'91 : ident := 218%positive.\nDefinition _t'92 : ident := 219%positive.\nDefinition _t'93 : ident := 220%positive.\nDefinition _t'94 : ident := 221%positive.\nDefinition _t'95 : ident := 222%positive.\nDefinition _t'96 : ident := 223%positive.\nDefinition _t'97 : ident := 224%positive.\nDefinition _t'98 : ident := 225%positive.\nDefinition _t'99 : ident := 226%positive.\n\nDefinition v___stringlit_1 := {|\n  gvar_info := (tarray tschar 8);\n  gvar_init := (Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_2 := {|\n  gvar_info := (tarray tschar 18);\n  gvar_init := (Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_3 := {|\n  gvar_info := (tarray tschar 19);\n  gvar_init := (Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_4 := {|\n  gvar_info := (tarray tschar 30);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_5 := {|\n  gvar_info := (tarray tschar 17);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_6 := {|\n  gvar_info := (tarray tschar 11);\n  gvar_init := (Init_int8 (Int.repr 37) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 58) :: Init_int8 (Int.repr 37) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 37) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 10) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_7 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 73) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 84) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 77) ::\n                Init_int8 (Int.repr 73) :: Init_int8 (Int.repr 78) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_8 := {|\n  gvar_info := (tarray tschar 26);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_9 := {|\n  gvar_info := (tarray tschar 53);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 113) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_10 := {|\n  gvar_info := (tarray tschar 42);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 91) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 93) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_20 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_30 := {|\n  gvar_info := (tarray tschar 86);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_40 := {|\n  gvar_info := (tarray tschar 63);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 77) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_50 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_60 := {|\n  gvar_info := (tarray tschar 30);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_70 := {|\n  gvar_info := (tarray tschar 42);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_80 := {|\n  gvar_info := (tarray tschar 61);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 51) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_90 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_11 := {|\n  gvar_info := (tarray tschar 42);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 91) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 93) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_21 := {|\n  gvar_info := (tarray tschar 86);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_31 := {|\n  gvar_info := (tarray tschar 85);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_41 := {|\n  gvar_info := (tarray tschar 89);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_51 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_61 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_71 := {|\n  gvar_info := (tarray tschar 43);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_81 := {|\n  gvar_info := (tarray tschar 61);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_91 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_12 := {|\n  gvar_info := (tarray tschar 39);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 91) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 93) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 77) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_22 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_32 := {|\n  gvar_info := (tarray tschar 86);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_42 := {|\n  gvar_info := (tarray tschar 89);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_52 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 51) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_62 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_72 := {|\n  gvar_info := (tarray tschar 43);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_82 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_92 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 122) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_13 := {|\n  gvar_info := (tarray tschar 38);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 91) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 93) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 77) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_23 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_33 := {|\n  gvar_info := (tarray tschar 85);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_43 := {|\n  gvar_info := (tarray tschar 89);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_53 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_63 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_73 := {|\n  gvar_info := (tarray tschar 43);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_83 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_93 := {|\n  gvar_info := (tarray tschar 41);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_14 := {|\n  gvar_info := (tarray tschar 86);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_24 := {|\n  gvar_info := (tarray tschar 58);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 42) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 103) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_34 := {|\n  gvar_info := (tarray tschar 101);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_44 := {|\n  gvar_info := (tarray tschar 88);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_54 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_64 := {|\n  gvar_info := (tarray tschar 61);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_74 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_84 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 51) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_94 := {|\n  gvar_info := (tarray tschar 86);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 69) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 67) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 85) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 85) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_15 := {|\n  gvar_info := (tarray tschar 85);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_25 := {|\n  gvar_info := (tarray tschar 58);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 113) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 42) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 103) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_35 := {|\n  gvar_info := (tarray tschar 101);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 113) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_45 := {|\n  gvar_info := (tarray tschar 32);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 43) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_55 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_65 := {|\n  gvar_info := (tarray tschar 43);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_75 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_85 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 57) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_95 := {|\n  gvar_info := (tarray tschar 86);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 85) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 85) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_16 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_26 := {|\n  gvar_info := (tarray tschar 49);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_36 := {|\n  gvar_info := (tarray tschar 63);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 77) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_46 := {|\n  gvar_info := (tarray tschar 95);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 67) ::\n                Init_int8 (Int.repr 80) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 75) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 73) :: Init_int8 (Int.repr 71) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 69) ::\n                Init_int8 (Int.repr 68) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 79) :: Init_int8 (Int.repr 78) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_56 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_66 := {|\n  gvar_info := (tarray tschar 61);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 51) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_76 := {|\n  gvar_info := (tarray tschar 61);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_86 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_96 := {|\n  gvar_info := (tarray tschar 86);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 85) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 85) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 42) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_17 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_27 := {|\n  gvar_info := (tarray tschar 48);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_37 := {|\n  gvar_info := (tarray tschar 63);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 77) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_47 := {|\n  gvar_info := (tarray tschar 459);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 67) ::\n                Init_int8 (Int.repr 80) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 75) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 73) :: Init_int8 (Int.repr 71) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 69) ::\n                Init_int8 (Int.repr 68) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 79) :: Init_int8 (Int.repr 78) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 67) ::\n                Init_int8 (Int.repr 80) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 75) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 73) :: Init_int8 (Int.repr 71) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 69) ::\n                Init_int8 (Int.repr 68) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 79) :: Init_int8 (Int.repr 78) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 83) :: Init_int8 (Int.repr 69) ::\n                Init_int8 (Int.repr 67) :: Init_int8 (Int.repr 80) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 75) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 83) :: Init_int8 (Int.repr 73) ::\n                Init_int8 (Int.repr 71) :: Init_int8 (Int.repr 78) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 68) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 79) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 69) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 67) ::\n                Init_int8 (Int.repr 80) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 75) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 83) ::\n                Init_int8 (Int.repr 73) :: Init_int8 (Int.repr 71) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 69) ::\n                Init_int8 (Int.repr 68) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 79) :: Init_int8 (Int.repr 78) ::\n                Init_int8 (Int.repr 69) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_57 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 51) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_67 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_77 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_87 := {|\n  gvar_info := (tarray tschar 30);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_97 := {|\n  gvar_info := (tarray tschar 30);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_18 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_28 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_38 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_48 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_58 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_68 := {|\n  gvar_info := (tarray tschar 43);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_78 := {|\n  gvar_info := (tarray tschar 61);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_88 := {|\n  gvar_info := (tarray tschar 28);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_98 := {|\n  gvar_info := (tarray tschar 35);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 70) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_19 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_29 := {|\n  gvar_info := (tarray tschar 67);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 119) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_39 := {|\n  gvar_info := (tarray tschar 63);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 77) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_49 := {|\n  gvar_info := (tarray tschar 35);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_59 := {|\n  gvar_info := (tarray tschar 30);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_69 := {|\n  gvar_info := (tarray tschar 61);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_79 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_89 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 57) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_99 := {|\n  gvar_info := (tarray tschar 41);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_100 := {|\n  gvar_info := (tarray tschar 41);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_110 := {|\n  gvar_info := (tarray tschar 23);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_120 := {|\n  gvar_info := (tarray tschar 32);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_130 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_140 := {|\n  gvar_info := (tarray tschar 116);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_150 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 119) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 33) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 78) ::\n                Init_int8 (Int.repr 85) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_160 := {|\n  gvar_info := (tarray tschar 142);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_170 := {|\n  gvar_info := (tarray tschar 27);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 121) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_101 := {|\n  gvar_info := (tarray tschar 41);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_111 := {|\n  gvar_info := (tarray tschar 64);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_121 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_131 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_141 := {|\n  gvar_info := (tarray tschar 116);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_151 := {|\n  gvar_info := (tarray tschar 46);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_161 := {|\n  gvar_info := (tarray tschar 139);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_171 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 100) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_102 := {|\n  gvar_info := (tarray tschar 39);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_112 := {|\n  gvar_info := (tarray tschar 29);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_122 := {|\n  gvar_info := (tarray tschar 50);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 93) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_132 := {|\n  gvar_info := (tarray tschar 63);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 119) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_142 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 121) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_152 := {|\n  gvar_info := (tarray tschar 33);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 85) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_162 := {|\n  gvar_info := (tarray tschar 141);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_172 := {|\n  gvar_info := (tarray tschar 27);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_103 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_113 := {|\n  gvar_info := (tarray tschar 34);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 51) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_123 := {|\n  gvar_info := (tarray tschar 47);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_133 := {|\n  gvar_info := (tarray tschar 63);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 119) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_143 := {|\n  gvar_info := (tarray tschar 23);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_153 := {|\n  gvar_info := (tarray tschar 41);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 119) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 119) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_163 := {|\n  gvar_info := (tarray tschar 140);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 120) ::\n                Init_int8 (Int.repr 55) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 120) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_104 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_114 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 43) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_124 := {|\n  gvar_info := (tarray tschar 48);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_134 := {|\n  gvar_info := (tarray tschar 62);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 122) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 122) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_144 := {|\n  gvar_info := (tarray tschar 35);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 122) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 78) :: Init_int8 (Int.repr 85) ::\n                Init_int8 (Int.repr 76) :: Init_int8 (Int.repr 76) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_154 := {|\n  gvar_info := (tarray tschar 34);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 121) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_164 := {|\n  gvar_info := (tarray tschar 47);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_105 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_115 := {|\n  gvar_info := (tarray tschar 45);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 43) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_125 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_135 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 33) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_145 := {|\n  gvar_info := (tarray tschar 48);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 122) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_155 := {|\n  gvar_info := (tarray tschar 73);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 121) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 98) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_165 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_106 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_116 := {|\n  gvar_info := (tarray tschar 37);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 119) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_126 := {|\n  gvar_info := (tarray tschar 48);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_136 := {|\n  gvar_info := (tarray tschar 24);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_146 := {|\n  gvar_info := (tarray tschar 24);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 109) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_156 := {|\n  gvar_info := (tarray tschar 54);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 93) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 57) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_166 := {|\n  gvar_info := (tarray tschar 47);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 103) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_107 := {|\n  gvar_info := (tarray tschar 36);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_117 := {|\n  gvar_info := (tarray tschar 54);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 118) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 119) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 124) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 118) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 119) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_127 := {|\n  gvar_info := (tarray tschar 48);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_137 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 33) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_147 := {|\n  gvar_info := (tarray tschar 38);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 38) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_157 := {|\n  gvar_info := (tarray tschar 56);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 91) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 93) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 57) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_167 := {|\n  gvar_info := (tarray tschar 53);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 121) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 103) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_108 := {|\n  gvar_info := (tarray tschar 99);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 122) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 122) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 122) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 122) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 111) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_118 := {|\n  gvar_info := (tarray tschar 33);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 98) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_128 := {|\n  gvar_info := (tarray tschar 48);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 124) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 48) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_138 := {|\n  gvar_info := (tarray tschar 32);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 33) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_148 := {|\n  gvar_info := (tarray tschar 52);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 62) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 119) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_158 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_168 := {|\n  gvar_info := (tarray tschar 27);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_109 := {|\n  gvar_info := (tarray tschar 30);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_119 := {|\n  gvar_info := (tarray tschar 54);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 56) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 104) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 117) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_129 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 52) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 61) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_139 := {|\n  gvar_info := (tarray tschar 50);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 50) ::\n                Init_int8 (Int.repr 53) :: Init_int8 (Int.repr 54) ::\n                Init_int8 (Int.repr 107) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 113) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 44) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_149 := {|\n  gvar_info := (tarray tschar 51);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 60) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 119) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 45) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 41) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_159 := {|\n  gvar_info := (tarray tschar 31);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 49) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 117) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 109) ::\n                Init_int8 (Int.repr 112) :: Init_int8 (Int.repr 108) ::\n                Init_int8 (Int.repr 46) :: Init_int8 (Int.repr 104) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v___stringlit_169 := {|\n  gvar_info := (tarray tschar 52);\n  gvar_init := (Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 99) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 102) ::\n                Init_int8 (Int.repr 97) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 108) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 33) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 99) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 95) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 95) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 102) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 121) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_ReadBE32 := {|\n  fn_return := tuint;\n  fn_callconv := cc_default;\n  fn_params := ((_b, (tptr tuchar)) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'4, tuchar) :: (_t'3, tuchar) :: (_t'2, tuchar) ::\n               (_t'1, tuchar) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Ederef\n      (Ebinop Oadd (Etempvar _b (tptr tuchar)) (Econst_int (Int.repr 0) tint)\n        (tptr tuchar)) tuchar))\n  (Ssequence\n    (Sset _t'2\n      (Ederef\n        (Ebinop Oadd (Etempvar _b (tptr tuchar))\n          (Econst_int (Int.repr 1) tint) (tptr tuchar)) tuchar))\n    (Ssequence\n      (Sset _t'3\n        (Ederef\n          (Ebinop Oadd (Etempvar _b (tptr tuchar))\n            (Econst_int (Int.repr 2) tint) (tptr tuchar)) tuchar))\n      (Ssequence\n        (Sset _t'4\n          (Ederef\n            (Ebinop Oadd (Etempvar _b (tptr tuchar))\n              (Econst_int (Int.repr 3) tint) (tptr tuchar)) tuchar))\n        (Sreturn (Some (Ebinop Oor\n                         (Ebinop Oor\n                           (Ebinop Oor\n                             (Ebinop Oshl\n                               (Ecast (Etempvar _t'1 tuchar) tuint)\n                               (Econst_int (Int.repr 24) tint) tuint)\n                             (Ebinop Oshl\n                               (Ecast\n                                 (Ebinop Oand (Etempvar _t'2 tuchar)\n                                   (Econst_int (Int.repr 255) tint) tint)\n                                 tuint) (Econst_int (Int.repr 16) tint)\n                               tuint) tuint)\n                           (Ebinop Oshl\n                             (Ecast\n                               (Ebinop Oand (Etempvar _t'3 tuchar)\n                                 (Econst_int (Int.repr 255) tint) tint)\n                               tuint) (Econst_int (Int.repr 8) tint) tuint)\n                           tuint)\n                         (Ecast\n                           (Ebinop Oand (Etempvar _t'4 tuchar)\n                             (Econst_int (Int.repr 255) tint) tint) tuint)\n                         tuint)))))))\n|}.\n\nDefinition f_WriteBE64 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_ptr, (tptr tuchar)) :: (_x, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef\n      (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n        (Econst_int (Int.repr 0) tint) (tptr tuchar)) tuchar)\n    (Ecast\n      (Ebinop Oand (Econst_int (Int.repr 255) tint)\n        (Ebinop Oshr (Etempvar _x tulong) (Econst_int (Int.repr 56) tint)\n          tulong) tulong) tuchar))\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n          (Econst_int (Int.repr 1) tint) (tptr tuchar)) tuchar)\n      (Ebinop Oand (Econst_int (Int.repr 255) tint)\n        (Ebinop Oshr (Etempvar _x tulong) (Econst_int (Int.repr 48) tint)\n          tulong) tulong))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n            (Econst_int (Int.repr 2) tint) (tptr tuchar)) tuchar)\n        (Ebinop Oand (Econst_int (Int.repr 255) tint)\n          (Ebinop Oshr (Etempvar _x tulong) (Econst_int (Int.repr 40) tint)\n            tulong) tulong))\n      (Ssequence\n        (Sassign\n          (Ederef\n            (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n              (Econst_int (Int.repr 3) tint) (tptr tuchar)) tuchar)\n          (Ebinop Oand (Econst_int (Int.repr 255) tint)\n            (Ebinop Oshr (Etempvar _x tulong) (Econst_int (Int.repr 32) tint)\n              tulong) tulong))\n        (Ssequence\n          (Sassign\n            (Ederef\n              (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n                (Econst_int (Int.repr 4) tint) (tptr tuchar)) tuchar)\n            (Ebinop Oand (Econst_int (Int.repr 255) tint)\n              (Ebinop Oshr (Etempvar _x tulong)\n                (Econst_int (Int.repr 24) tint) tulong) tulong))\n          (Ssequence\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n                  (Econst_int (Int.repr 5) tint) (tptr tuchar)) tuchar)\n              (Ebinop Oand (Econst_int (Int.repr 255) tint)\n                (Ebinop Oshr (Etempvar _x tulong)\n                  (Econst_int (Int.repr 16) tint) tulong) tulong))\n            (Ssequence\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n                    (Econst_int (Int.repr 6) tint) (tptr tuchar)) tuchar)\n                (Ebinop Oand (Econst_int (Int.repr 255) tint)\n                  (Ebinop Oshr (Etempvar _x tulong)\n                    (Econst_int (Int.repr 8) tint) tulong) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n                    (Econst_int (Int.repr 7) tint) (tptr tuchar)) tuchar)\n                (Ebinop Oand (Econst_int (Int.repr 255) tint)\n                  (Etempvar _x tulong) tulong)))))))))\n|}.\n\nDefinition f_WriteBE32 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_ptr, (tptr tuchar)) :: (_x, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef\n      (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n        (Econst_int (Int.repr 0) tint) (tptr tuchar)) tuchar)\n    (Ecast\n      (Ebinop Oshr (Etempvar _x tulong) (Econst_int (Int.repr 24) tint)\n        tulong) tuchar))\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n          (Econst_int (Int.repr 1) tint) (tptr tuchar)) tuchar)\n      (Ebinop Oand\n        (Ebinop Oshr (Etempvar _x tulong) (Econst_int (Int.repr 16) tint)\n          tulong) (Econst_int (Int.repr 255) tint) tulong))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n            (Econst_int (Int.repr 2) tint) (tptr tuchar)) tuchar)\n        (Ebinop Oand\n          (Ebinop Oshr (Etempvar _x tulong) (Econst_int (Int.repr 8) tint)\n            tulong) (Econst_int (Int.repr 255) tint) tulong))\n      (Sassign\n        (Ederef\n          (Ebinop Oadd (Etempvar _ptr (tptr tuchar))\n            (Econst_int (Int.repr 3) tint) (tptr tuchar)) tuchar)\n        (Ebinop Oand (Etempvar _x tulong) (Econst_int (Int.repr 255) tint)\n          tulong)))))\n|}.\n\nDefinition f_sha256_fromMidstate := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_hash, (tptr tuchar)) :: (_midstate, (tptr tuint)) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'8, tuint) :: (_t'7, tuint) :: (_t'6, tuint) ::\n               (_t'5, tuint) :: (_t'4, tuint) :: (_t'3, tuint) ::\n               (_t'2, tuint) :: (_t'1, tuint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'8\n      (Ederef\n        (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n          (Econst_int (Int.repr 0) tint) (tptr tuint)) tuint))\n    (Scall None\n      (Evar _WriteBE32 (Tfunction (Tcons (tptr tuchar) (Tcons tulong Tnil))\n                         tvoid cc_default))\n      ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n         (Ebinop Omul (Econst_int (Int.repr 0) tint)\n           (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n       (Etempvar _t'8 tuint) :: nil)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'7\n        (Ederef\n          (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n            (Econst_int (Int.repr 1) tint) (tptr tuint)) tuint))\n      (Scall None\n        (Evar _WriteBE32 (Tfunction (Tcons (tptr tuchar) (Tcons tulong Tnil))\n                           tvoid cc_default))\n        ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n           (Ebinop Omul (Econst_int (Int.repr 1) tint)\n             (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n         (Etempvar _t'7 tuint) :: nil)))\n    (Ssequence\n      (Ssequence\n        (Sset _t'6\n          (Ederef\n            (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n              (Econst_int (Int.repr 2) tint) (tptr tuint)) tuint))\n        (Scall None\n          (Evar _WriteBE32 (Tfunction\n                             (Tcons (tptr tuchar) (Tcons tulong Tnil)) tvoid\n                             cc_default))\n          ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n             (Ebinop Omul (Econst_int (Int.repr 2) tint)\n               (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n           (Etempvar _t'6 tuint) :: nil)))\n      (Ssequence\n        (Ssequence\n          (Sset _t'5\n            (Ederef\n              (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n                (Econst_int (Int.repr 3) tint) (tptr tuint)) tuint))\n          (Scall None\n            (Evar _WriteBE32 (Tfunction\n                               (Tcons (tptr tuchar) (Tcons tulong Tnil))\n                               tvoid cc_default))\n            ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n               (Ebinop Omul (Econst_int (Int.repr 3) tint)\n                 (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n             (Etempvar _t'5 tuint) :: nil)))\n        (Ssequence\n          (Ssequence\n            (Sset _t'4\n              (Ederef\n                (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n                  (Econst_int (Int.repr 4) tint) (tptr tuint)) tuint))\n            (Scall None\n              (Evar _WriteBE32 (Tfunction\n                                 (Tcons (tptr tuchar) (Tcons tulong Tnil))\n                                 tvoid cc_default))\n              ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n                 (Ebinop Omul (Econst_int (Int.repr 4) tint)\n                   (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n               (Etempvar _t'4 tuint) :: nil)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'3\n                (Ederef\n                  (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n                    (Econst_int (Int.repr 5) tint) (tptr tuint)) tuint))\n              (Scall None\n                (Evar _WriteBE32 (Tfunction\n                                   (Tcons (tptr tuchar) (Tcons tulong Tnil))\n                                   tvoid cc_default))\n                ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n                   (Ebinop Omul (Econst_int (Int.repr 5) tint)\n                     (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n                 (Etempvar _t'3 tuint) :: nil)))\n            (Ssequence\n              (Ssequence\n                (Sset _t'2\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n                      (Econst_int (Int.repr 6) tint) (tptr tuint)) tuint))\n                (Scall None\n                  (Evar _WriteBE32 (Tfunction\n                                     (Tcons (tptr tuchar)\n                                       (Tcons tulong Tnil)) tvoid cc_default))\n                  ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n                     (Ebinop Omul (Econst_int (Int.repr 6) tint)\n                       (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n                   (Etempvar _t'2 tuint) :: nil)))\n              (Ssequence\n                (Sset _t'1\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _midstate (tptr tuint))\n                      (Econst_int (Int.repr 7) tint) (tptr tuint)) tuint))\n                (Scall None\n                  (Evar _WriteBE32 (Tfunction\n                                     (Tcons (tptr tuchar)\n                                       (Tcons tulong Tnil)) tvoid cc_default))\n                  ((Ebinop Oadd (Etempvar _hash (tptr tuchar))\n                     (Ebinop Omul (Econst_int (Int.repr 7) tint)\n                       (Econst_int (Int.repr 4) tint) tint) (tptr tuchar)) ::\n                   (Etempvar _t'1 tuint) :: nil))))))))))\n|}.\n\nDefinition f_sha256_iv := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_iv, (tptr tuint)) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef\n      (Ebinop Oadd (Etempvar _iv (tptr tuint)) (Econst_int (Int.repr 0) tint)\n        (tptr tuint)) tuint) (Econst_long (Int64.repr 1779033703) tulong))\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd (Etempvar _iv (tptr tuint))\n          (Econst_int (Int.repr 1) tint) (tptr tuint)) tuint)\n      (Econst_long (Int64.repr 3144134277) tulong))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd (Etempvar _iv (tptr tuint))\n            (Econst_int (Int.repr 2) tint) (tptr tuint)) tuint)\n        (Econst_long (Int64.repr 1013904242) tulong))\n      (Ssequence\n        (Sassign\n          (Ederef\n            (Ebinop Oadd (Etempvar _iv (tptr tuint))\n              (Econst_int (Int.repr 3) tint) (tptr tuint)) tuint)\n          (Econst_long (Int64.repr 2773480762) tulong))\n        (Ssequence\n          (Sassign\n            (Ederef\n              (Ebinop Oadd (Etempvar _iv (tptr tuint))\n                (Econst_int (Int.repr 4) tint) (tptr tuint)) tuint)\n            (Econst_long (Int64.repr 1359893119) tulong))\n          (Ssequence\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Etempvar _iv (tptr tuint))\n                  (Econst_int (Int.repr 5) tint) (tptr tuint)) tuint)\n              (Econst_long (Int64.repr 2600822924) tulong))\n            (Ssequence\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _iv (tptr tuint))\n                    (Econst_int (Int.repr 6) tint) (tptr tuint)) tuint)\n                (Econst_long (Int64.repr 528734635) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _iv (tptr tuint))\n                    (Econst_int (Int.repr 7) tint) (tptr tuint)) tuint)\n                (Econst_long (Int64.repr 1541459225) tulong)))))))))\n|}.\n\nDefinition v_simplicity_sha256_compression := {|\n  gvar_info := (tptr (Tfunction\n                       (Tcons (tptr tuint) (Tcons (tptr tuint) Tnil)) tvoid\n                       cc_default));\n  gvar_init := nil;\n  gvar_readonly := false;\n  gvar_volatile := false\n|}.\n\nDefinition f_sha256_compression_uchar := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_s, (tptr tuint)) :: (_chunk, (tptr tuchar)) :: nil);\n  fn_vars := ((___compound, (tarray tuint 16)) :: nil);\n  fn_temps := ((_t'16, tuint) :: (_t'15, tuint) :: (_t'14, tuint) ::\n               (_t'13, tuint) :: (_t'12, tuint) :: (_t'11, tuint) ::\n               (_t'10, tuint) :: (_t'9, tuint) :: (_t'8, tuint) ::\n               (_t'7, tuint) :: (_t'6, tuint) :: (_t'5, tuint) ::\n               (_t'4, tuint) :: (_t'3, tuint) :: (_t'2, tuint) ::\n               (_t'1, tuint) ::\n               (_t'17,\n                (tptr (Tfunction\n                        (Tcons (tptr tuint) (Tcons (tptr tuint) Tnil)) tvoid\n                        cc_default))) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Ssequence\n                (Ssequence\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Ssequence\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Scall (Some _t'1)\n                                                                  (Evar _ReadBE32 \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil)\n                                                                    tuint\n                                                                    cc_default))\n                                                                  ((Ebinop Oadd\n                                                                    (Etempvar _chunk (tptr tuchar))\n                                                                    (Ebinop Omul\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    (tptr tuchar)) ::\n                                                                   nil))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuint 16))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tuint))\n                                                                    tuint)\n                                                                  (Etempvar _t'1 tuint)))\n                                                              (Scall (Some _t'2)\n                                                                (Evar _ReadBE32 \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil)\n                                                                  tuint\n                                                                  cc_default))\n                                                                ((Ebinop Oadd\n                                                                   (Etempvar _chunk (tptr tuchar))\n                                                                   (Ebinop Omul\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint)\n                                                                   (tptr tuchar)) ::\n                                                                 nil)))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Evar ___compound (tarray tuint 16))\n                                                                  (Econst_int (Int.repr 1) tint)\n                                                                  (tptr tuint))\n                                                                tuint)\n                                                              (Etempvar _t'2 tuint)))\n                                                          (Scall (Some _t'3)\n                                                            (Evar _ReadBE32 \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr tuchar)\n                                                                Tnil) tuint\n                                                              cc_default))\n                                                            ((Ebinop Oadd\n                                                               (Etempvar _chunk (tptr tuchar))\n                                                               (Ebinop Omul\n                                                                 (Econst_int (Int.repr 4) tint)\n                                                                 (Econst_int (Int.repr 2) tint)\n                                                                 tint)\n                                                               (tptr tuchar)) ::\n                                                             nil)))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Evar ___compound (tarray tuint 16))\n                                                              (Econst_int (Int.repr 2) tint)\n                                                              (tptr tuint))\n                                                            tuint)\n                                                          (Etempvar _t'3 tuint)))\n                                                      (Scall (Some _t'4)\n                                                        (Evar _ReadBE32 \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr tuchar)\n                                                            Tnil) tuint\n                                                          cc_default))\n                                                        ((Ebinop Oadd\n                                                           (Etempvar _chunk (tptr tuchar))\n                                                           (Ebinop Omul\n                                                             (Econst_int (Int.repr 4) tint)\n                                                             (Econst_int (Int.repr 3) tint)\n                                                             tint)\n                                                           (tptr tuchar)) ::\n                                                         nil)))\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Evar ___compound (tarray tuint 16))\n                                                          (Econst_int (Int.repr 3) tint)\n                                                          (tptr tuint))\n                                                        tuint)\n                                                      (Etempvar _t'4 tuint)))\n                                                  (Scall (Some _t'5)\n                                                    (Evar _ReadBE32 (Tfunction\n                                                                    (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil)\n                                                                    tuint\n                                                                    cc_default))\n                                                    ((Ebinop Oadd\n                                                       (Etempvar _chunk (tptr tuchar))\n                                                       (Ebinop Omul\n                                                         (Econst_int (Int.repr 4) tint)\n                                                         (Econst_int (Int.repr 4) tint)\n                                                         tint) (tptr tuchar)) ::\n                                                     nil)))\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Evar ___compound (tarray tuint 16))\n                                                      (Econst_int (Int.repr 4) tint)\n                                                      (tptr tuint)) tuint)\n                                                  (Etempvar _t'5 tuint)))\n                                              (Scall (Some _t'6)\n                                                (Evar _ReadBE32 (Tfunction\n                                                                  (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil)\n                                                                  tuint\n                                                                  cc_default))\n                                                ((Ebinop Oadd\n                                                   (Etempvar _chunk (tptr tuchar))\n                                                   (Ebinop Omul\n                                                     (Econst_int (Int.repr 4) tint)\n                                                     (Econst_int (Int.repr 5) tint)\n                                                     tint) (tptr tuchar)) ::\n                                                 nil)))\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Evar ___compound (tarray tuint 16))\n                                                  (Econst_int (Int.repr 5) tint)\n                                                  (tptr tuint)) tuint)\n                                              (Etempvar _t'6 tuint)))\n                                          (Scall (Some _t'7)\n                                            (Evar _ReadBE32 (Tfunction\n                                                              (Tcons\n                                                                (tptr tuchar)\n                                                                Tnil) tuint\n                                                              cc_default))\n                                            ((Ebinop Oadd\n                                               (Etempvar _chunk (tptr tuchar))\n                                               (Ebinop Omul\n                                                 (Econst_int (Int.repr 4) tint)\n                                                 (Econst_int (Int.repr 6) tint)\n                                                 tint) (tptr tuchar)) :: nil)))\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Evar ___compound (tarray tuint 16))\n                                              (Econst_int (Int.repr 6) tint)\n                                              (tptr tuint)) tuint)\n                                          (Etempvar _t'7 tuint)))\n                                      (Scall (Some _t'8)\n                                        (Evar _ReadBE32 (Tfunction\n                                                          (Tcons\n                                                            (tptr tuchar)\n                                                            Tnil) tuint\n                                                          cc_default))\n                                        ((Ebinop Oadd\n                                           (Etempvar _chunk (tptr tuchar))\n                                           (Ebinop Omul\n                                             (Econst_int (Int.repr 4) tint)\n                                             (Econst_int (Int.repr 7) tint)\n                                             tint) (tptr tuchar)) :: nil)))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Evar ___compound (tarray tuint 16))\n                                          (Econst_int (Int.repr 7) tint)\n                                          (tptr tuint)) tuint)\n                                      (Etempvar _t'8 tuint)))\n                                  (Scall (Some _t'9)\n                                    (Evar _ReadBE32 (Tfunction\n                                                      (Tcons (tptr tuchar)\n                                                        Tnil) tuint\n                                                      cc_default))\n                                    ((Ebinop Oadd\n                                       (Etempvar _chunk (tptr tuchar))\n                                       (Ebinop Omul\n                                         (Econst_int (Int.repr 4) tint)\n                                         (Econst_int (Int.repr 8) tint) tint)\n                                       (tptr tuchar)) :: nil)))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Evar ___compound (tarray tuint 16))\n                                      (Econst_int (Int.repr 8) tint)\n                                      (tptr tuint)) tuint)\n                                  (Etempvar _t'9 tuint)))\n                              (Scall (Some _t'10)\n                                (Evar _ReadBE32 (Tfunction\n                                                  (Tcons (tptr tuchar) Tnil)\n                                                  tuint cc_default))\n                                ((Ebinop Oadd (Etempvar _chunk (tptr tuchar))\n                                   (Ebinop Omul\n                                     (Econst_int (Int.repr 4) tint)\n                                     (Econst_int (Int.repr 9) tint) tint)\n                                   (tptr tuchar)) :: nil)))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Evar ___compound (tarray tuint 16))\n                                  (Econst_int (Int.repr 9) tint)\n                                  (tptr tuint)) tuint)\n                              (Etempvar _t'10 tuint)))\n                          (Scall (Some _t'11)\n                            (Evar _ReadBE32 (Tfunction\n                                              (Tcons (tptr tuchar) Tnil)\n                                              tuint cc_default))\n                            ((Ebinop Oadd (Etempvar _chunk (tptr tuchar))\n                               (Ebinop Omul (Econst_int (Int.repr 4) tint)\n                                 (Econst_int (Int.repr 10) tint) tint)\n                               (tptr tuchar)) :: nil)))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd (Evar ___compound (tarray tuint 16))\n                              (Econst_int (Int.repr 10) tint) (tptr tuint))\n                            tuint) (Etempvar _t'11 tuint)))\n                      (Scall (Some _t'12)\n                        (Evar _ReadBE32 (Tfunction (Tcons (tptr tuchar) Tnil)\n                                          tuint cc_default))\n                        ((Ebinop Oadd (Etempvar _chunk (tptr tuchar))\n                           (Ebinop Omul (Econst_int (Int.repr 4) tint)\n                             (Econst_int (Int.repr 11) tint) tint)\n                           (tptr tuchar)) :: nil)))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd (Evar ___compound (tarray tuint 16))\n                          (Econst_int (Int.repr 11) tint) (tptr tuint))\n                        tuint) (Etempvar _t'12 tuint)))\n                  (Scall (Some _t'13)\n                    (Evar _ReadBE32 (Tfunction (Tcons (tptr tuchar) Tnil)\n                                      tuint cc_default))\n                    ((Ebinop Oadd (Etempvar _chunk (tptr tuchar))\n                       (Ebinop Omul (Econst_int (Int.repr 4) tint)\n                         (Econst_int (Int.repr 12) tint) tint) (tptr tuchar)) ::\n                     nil)))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd (Evar ___compound (tarray tuint 16))\n                      (Econst_int (Int.repr 12) tint) (tptr tuint)) tuint)\n                  (Etempvar _t'13 tuint)))\n              (Scall (Some _t'14)\n                (Evar _ReadBE32 (Tfunction (Tcons (tptr tuchar) Tnil) tuint\n                                  cc_default))\n                ((Ebinop Oadd (Etempvar _chunk (tptr tuchar))\n                   (Ebinop Omul (Econst_int (Int.repr 4) tint)\n                     (Econst_int (Int.repr 13) tint) tint) (tptr tuchar)) ::\n                 nil)))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Evar ___compound (tarray tuint 16))\n                  (Econst_int (Int.repr 13) tint) (tptr tuint)) tuint)\n              (Etempvar _t'14 tuint)))\n          (Scall (Some _t'15)\n            (Evar _ReadBE32 (Tfunction (Tcons (tptr tuchar) Tnil) tuint\n                              cc_default))\n            ((Ebinop Oadd (Etempvar _chunk (tptr tuchar))\n               (Ebinop Omul (Econst_int (Int.repr 4) tint)\n                 (Econst_int (Int.repr 14) tint) tint) (tptr tuchar)) :: nil)))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd (Evar ___compound (tarray tuint 16))\n              (Econst_int (Int.repr 14) tint) (tptr tuint)) tuint)\n          (Etempvar _t'15 tuint)))\n      (Scall (Some _t'16)\n        (Evar _ReadBE32 (Tfunction (Tcons (tptr tuchar) Tnil) tuint\n                          cc_default))\n        ((Ebinop Oadd (Etempvar _chunk (tptr tuchar))\n           (Ebinop Omul (Econst_int (Int.repr 4) tint)\n             (Econst_int (Int.repr 15) tint) tint) (tptr tuchar)) :: nil)))\n    (Sassign\n      (Ederef\n        (Ebinop Oadd (Evar ___compound (tarray tuint 16))\n          (Econst_int (Int.repr 15) tint) (tptr tuint)) tuint)\n      (Etempvar _t'16 tuint)))\n  (Ssequence\n    (Sset _t'17\n      (Evar _simplicity_sha256_compression (tptr (Tfunction\n                                                   (Tcons (tptr tuint)\n                                                     (Tcons (tptr tuint)\n                                                       Tnil)) tvoid\n                                                   cc_default))))\n    (Scall None\n      (Etempvar _t'17 (tptr (Tfunction\n                              (Tcons (tptr tuint) (Tcons (tptr tuint) Tnil))\n                              tvoid cc_default)))\n      ((Etempvar _s (tptr tuint)) :: (Evar ___compound (tarray tuint 16)) ::\n       nil))))\n|}.\n\nDefinition v_sha256_max_counter := {|\n  gvar_info := tulong;\n  gvar_init := (Init_int64 (Int64.repr 2305843009213693952) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_sha256_init := {|\n  fn_return := tvoid;\n  fn_callconv := {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|};\n  fn_params := ((__res, (tptr (Tstruct _sha256_context noattr))) ::\n                (_output, (tptr tuint)) :: nil);\n  fn_vars := ((___compound, (Tstruct _sha256_context noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _sha256_iv (Tfunction (Tcons (tptr tuint) Tnil) tvoid cc_default))\n    ((Etempvar _output (tptr tuint)) :: nil))\n  (Ssequence\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Ssequence\n                (Ssequence\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Ssequence\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _output\n                                                                    (tptr tuint))\n                                                                    (Etempvar _output (tptr tuint)))\n                                                                    (Sassign\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _counter\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 5) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 6) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 7) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 8) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 9) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 10) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 11) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 13) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 14) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 15) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 16) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 17) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 18) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 19) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 20) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 21) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 22) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 23) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 24) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 25) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 26) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 27) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 28) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 29) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 30) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 31) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 32) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 33) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 34) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                  (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 35) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 36) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                  (Econst_int (Int.repr 0) tint)))\n                                                              (Sassign\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 37) tint)\n                                                                    (tptr tuchar))\n                                                                  tuchar)\n                                                                (Econst_int (Int.repr 0) tint)))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                  (Econst_int (Int.repr 38) tint)\n                                                                  (tptr tuchar))\n                                                                tuchar)\n                                                              (Econst_int (Int.repr 0) tint)))\n                                                          (Sassign\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Efield\n                                                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                  _block\n                                                                  (tarray tuchar 64))\n                                                                (Econst_int (Int.repr 39) tint)\n                                                                (tptr tuchar))\n                                                              tuchar)\n                                                            (Econst_int (Int.repr 0) tint)))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                _block\n                                                                (tarray tuchar 64))\n                                                              (Econst_int (Int.repr 40) tint)\n                                                              (tptr tuchar))\n                                                            tuchar)\n                                                          (Econst_int (Int.repr 0) tint)))\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Evar ___compound (Tstruct _sha256_context noattr))\n                                                              _block\n                                                              (tarray tuchar 64))\n                                                            (Econst_int (Int.repr 41) tint)\n                                                            (tptr tuchar))\n                                                          tuchar)\n                                                        (Econst_int (Int.repr 0) tint)))\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Evar ___compound (Tstruct _sha256_context noattr))\n                                                            _block\n                                                            (tarray tuchar 64))\n                                                          (Econst_int (Int.repr 42) tint)\n                                                          (tptr tuchar))\n                                                        tuchar)\n                                                      (Econst_int (Int.repr 0) tint)))\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Efield\n                                                          (Evar ___compound (Tstruct _sha256_context noattr))\n                                                          _block\n                                                          (tarray tuchar 64))\n                                                        (Econst_int (Int.repr 43) tint)\n                                                        (tptr tuchar))\n                                                      tuchar)\n                                                    (Econst_int (Int.repr 0) tint)))\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Efield\n                                                        (Evar ___compound (Tstruct _sha256_context noattr))\n                                                        _block\n                                                        (tarray tuchar 64))\n                                                      (Econst_int (Int.repr 44) tint)\n                                                      (tptr tuchar)) tuchar)\n                                                  (Econst_int (Int.repr 0) tint)))\n                                              (Sassign\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Evar ___compound (Tstruct _sha256_context noattr))\n                                                      _block\n                                                      (tarray tuchar 64))\n                                                    (Econst_int (Int.repr 45) tint)\n                                                    (tptr tuchar)) tuchar)\n                                                (Econst_int (Int.repr 0) tint)))\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                    _block\n                                                    (tarray tuchar 64))\n                                                  (Econst_int (Int.repr 46) tint)\n                                                  (tptr tuchar)) tuchar)\n                                              (Econst_int (Int.repr 0) tint)))\n                                          (Sassign\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                                  _block (tarray tuchar 64))\n                                                (Econst_int (Int.repr 47) tint)\n                                                (tptr tuchar)) tuchar)\n                                            (Econst_int (Int.repr 0) tint)))\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                                _block (tarray tuchar 64))\n                                              (Econst_int (Int.repr 48) tint)\n                                              (tptr tuchar)) tuchar)\n                                          (Econst_int (Int.repr 0) tint)))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Evar ___compound (Tstruct _sha256_context noattr))\n                                              _block (tarray tuchar 64))\n                                            (Econst_int (Int.repr 49) tint)\n                                            (tptr tuchar)) tuchar)\n                                        (Econst_int (Int.repr 0) tint)))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Evar ___compound (Tstruct _sha256_context noattr))\n                                            _block (tarray tuchar 64))\n                                          (Econst_int (Int.repr 50) tint)\n                                          (tptr tuchar)) tuchar)\n                                      (Econst_int (Int.repr 0) tint)))\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Evar ___compound (Tstruct _sha256_context noattr))\n                                          _block (tarray tuchar 64))\n                                        (Econst_int (Int.repr 51) tint)\n                                        (tptr tuchar)) tuchar)\n                                    (Econst_int (Int.repr 0) tint)))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Evar ___compound (Tstruct _sha256_context noattr))\n                                        _block (tarray tuchar 64))\n                                      (Econst_int (Int.repr 52) tint)\n                                      (tptr tuchar)) tuchar)\n                                  (Econst_int (Int.repr 0) tint)))\n                              (Sassign\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Evar ___compound (Tstruct _sha256_context noattr))\n                                      _block (tarray tuchar 64))\n                                    (Econst_int (Int.repr 53) tint)\n                                    (tptr tuchar)) tuchar)\n                                (Econst_int (Int.repr 0) tint)))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                    _block (tarray tuchar 64))\n                                  (Econst_int (Int.repr 54) tint)\n                                  (tptr tuchar)) tuchar)\n                              (Econst_int (Int.repr 0) tint)))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                  _block (tarray tuchar 64))\n                                (Econst_int (Int.repr 55) tint)\n                                (tptr tuchar)) tuchar)\n                            (Econst_int (Int.repr 0) tint)))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                _block (tarray tuchar 64))\n                              (Econst_int (Int.repr 56) tint) (tptr tuchar))\n                            tuchar) (Econst_int (Int.repr 0) tint)))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Evar ___compound (Tstruct _sha256_context noattr))\n                              _block (tarray tuchar 64))\n                            (Econst_int (Int.repr 57) tint) (tptr tuchar))\n                          tuchar) (Econst_int (Int.repr 0) tint)))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Evar ___compound (Tstruct _sha256_context noattr))\n                            _block (tarray tuchar 64))\n                          (Econst_int (Int.repr 58) tint) (tptr tuchar))\n                        tuchar) (Econst_int (Int.repr 0) tint)))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Evar ___compound (Tstruct _sha256_context noattr))\n                          _block (tarray tuchar 64))\n                        (Econst_int (Int.repr 59) tint) (tptr tuchar))\n                      tuchar) (Econst_int (Int.repr 0) tint)))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Evar ___compound (Tstruct _sha256_context noattr))\n                        _block (tarray tuchar 64))\n                      (Econst_int (Int.repr 60) tint) (tptr tuchar)) tuchar)\n                  (Econst_int (Int.repr 0) tint)))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Evar ___compound (Tstruct _sha256_context noattr))\n                      _block (tarray tuchar 64))\n                    (Econst_int (Int.repr 61) tint) (tptr tuchar)) tuchar)\n                (Econst_int (Int.repr 0) tint)))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield (Evar ___compound (Tstruct _sha256_context noattr))\n                    _block (tarray tuchar 64))\n                  (Econst_int (Int.repr 62) tint) (tptr tuchar)) tuchar)\n              (Econst_int (Int.repr 0) tint)))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield (Evar ___compound (Tstruct _sha256_context noattr))\n                  _block (tarray tuchar 64)) (Econst_int (Int.repr 63) tint)\n                (tptr tuchar)) tuchar) (Econst_int (Int.repr 0) tint)))\n        (Sassign\n          (Efield (Evar ___compound (Tstruct _sha256_context noattr))\n            _overflow tbool) (Econst_int (Int.repr 0) tint)))\n      (Sassign\n        (Ederef (Etempvar __res (tptr (Tstruct _sha256_context noattr)))\n          (Tstruct _sha256_context noattr))\n        (Evar ___compound (Tstruct _sha256_context noattr))))\n    (Sreturn None)))\n|}.\n\nDefinition f_sha256_tagged_init := {|\n  fn_return := tvoid;\n  fn_callconv := {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|};\n  fn_params := ((__res, (tptr (Tstruct _sha256_context noattr))) ::\n                (_output, (tptr tuint)) ::\n                (_iv, (tptr (Tstruct _sha256_midstate noattr))) :: nil);\n  fn_vars := ((___compound, (Tstruct _sha256_context noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _memcpy (Tfunction\n                    (Tcons (tptr tvoid)\n                      (Tcons (tptr tvoid) (Tcons tulong Tnil))) (tptr tvoid)\n                    cc_default))\n    ((Etempvar _output (tptr tuint)) ::\n     (Efield\n       (Ederef (Etempvar _iv (tptr (Tstruct _sha256_midstate noattr)))\n         (Tstruct _sha256_midstate noattr)) _s (tarray tuint 8)) ::\n     (Esizeof (tarray tuint 8) tulong) :: nil))\n  (Ssequence\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Ssequence\n                (Ssequence\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Ssequence\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _output\n                                                                    (tptr tuint))\n                                                                    (Etempvar _output (tptr tuint)))\n                                                                    (Sassign\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _counter\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 64) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 5) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 6) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 7) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 8) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 9) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 10) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 11) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 13) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 14) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 15) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 16) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 17) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 18) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 19) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 20) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 21) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 22) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 23) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 24) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 25) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 26) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 27) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 28) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 29) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 30) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 31) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 32) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 33) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 34) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                  (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 35) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 36) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                  (Econst_int (Int.repr 0) tint)))\n                                                              (Sassign\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 37) tint)\n                                                                    (tptr tuchar))\n                                                                  tuchar)\n                                                                (Econst_int (Int.repr 0) tint)))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                  (Econst_int (Int.repr 38) tint)\n                                                                  (tptr tuchar))\n                                                                tuchar)\n                                                              (Econst_int (Int.repr 0) tint)))\n                                                          (Sassign\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Efield\n                                                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                  _block\n                                                                  (tarray tuchar 64))\n                                                                (Econst_int (Int.repr 39) tint)\n                                                                (tptr tuchar))\n                                                              tuchar)\n                                                            (Econst_int (Int.repr 0) tint)))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                _block\n                                                                (tarray tuchar 64))\n                                                              (Econst_int (Int.repr 40) tint)\n                                                              (tptr tuchar))\n                                                            tuchar)\n                                                          (Econst_int (Int.repr 0) tint)))\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Evar ___compound (Tstruct _sha256_context noattr))\n                                                              _block\n                                                              (tarray tuchar 64))\n                                                            (Econst_int (Int.repr 41) tint)\n                                                            (tptr tuchar))\n                                                          tuchar)\n                                                        (Econst_int (Int.repr 0) tint)))\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Evar ___compound (Tstruct _sha256_context noattr))\n                                                            _block\n                                                            (tarray tuchar 64))\n                                                          (Econst_int (Int.repr 42) tint)\n                                                          (tptr tuchar))\n                                                        tuchar)\n                                                      (Econst_int (Int.repr 0) tint)))\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Efield\n                                                          (Evar ___compound (Tstruct _sha256_context noattr))\n                                                          _block\n                                                          (tarray tuchar 64))\n                                                        (Econst_int (Int.repr 43) tint)\n                                                        (tptr tuchar))\n                                                      tuchar)\n                                                    (Econst_int (Int.repr 0) tint)))\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Efield\n                                                        (Evar ___compound (Tstruct _sha256_context noattr))\n                                                        _block\n                                                        (tarray tuchar 64))\n                                                      (Econst_int (Int.repr 44) tint)\n                                                      (tptr tuchar)) tuchar)\n                                                  (Econst_int (Int.repr 0) tint)))\n                                              (Sassign\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Evar ___compound (Tstruct _sha256_context noattr))\n                                                      _block\n                                                      (tarray tuchar 64))\n                                                    (Econst_int (Int.repr 45) tint)\n                                                    (tptr tuchar)) tuchar)\n                                                (Econst_int (Int.repr 0) tint)))\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                    _block\n                                                    (tarray tuchar 64))\n                                                  (Econst_int (Int.repr 46) tint)\n                                                  (tptr tuchar)) tuchar)\n                                              (Econst_int (Int.repr 0) tint)))\n                                          (Sassign\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                                  _block (tarray tuchar 64))\n                                                (Econst_int (Int.repr 47) tint)\n                                                (tptr tuchar)) tuchar)\n                                            (Econst_int (Int.repr 0) tint)))\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                                _block (tarray tuchar 64))\n                                              (Econst_int (Int.repr 48) tint)\n                                              (tptr tuchar)) tuchar)\n                                          (Econst_int (Int.repr 0) tint)))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Evar ___compound (Tstruct _sha256_context noattr))\n                                              _block (tarray tuchar 64))\n                                            (Econst_int (Int.repr 49) tint)\n                                            (tptr tuchar)) tuchar)\n                                        (Econst_int (Int.repr 0) tint)))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Evar ___compound (Tstruct _sha256_context noattr))\n                                            _block (tarray tuchar 64))\n                                          (Econst_int (Int.repr 50) tint)\n                                          (tptr tuchar)) tuchar)\n                                      (Econst_int (Int.repr 0) tint)))\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Evar ___compound (Tstruct _sha256_context noattr))\n                                          _block (tarray tuchar 64))\n                                        (Econst_int (Int.repr 51) tint)\n                                        (tptr tuchar)) tuchar)\n                                    (Econst_int (Int.repr 0) tint)))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Evar ___compound (Tstruct _sha256_context noattr))\n                                        _block (tarray tuchar 64))\n                                      (Econst_int (Int.repr 52) tint)\n                                      (tptr tuchar)) tuchar)\n                                  (Econst_int (Int.repr 0) tint)))\n                              (Sassign\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Evar ___compound (Tstruct _sha256_context noattr))\n                                      _block (tarray tuchar 64))\n                                    (Econst_int (Int.repr 53) tint)\n                                    (tptr tuchar)) tuchar)\n                                (Econst_int (Int.repr 0) tint)))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                    _block (tarray tuchar 64))\n                                  (Econst_int (Int.repr 54) tint)\n                                  (tptr tuchar)) tuchar)\n                              (Econst_int (Int.repr 0) tint)))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                  _block (tarray tuchar 64))\n                                (Econst_int (Int.repr 55) tint)\n                                (tptr tuchar)) tuchar)\n                            (Econst_int (Int.repr 0) tint)))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                _block (tarray tuchar 64))\n                              (Econst_int (Int.repr 56) tint) (tptr tuchar))\n                            tuchar) (Econst_int (Int.repr 0) tint)))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Evar ___compound (Tstruct _sha256_context noattr))\n                              _block (tarray tuchar 64))\n                            (Econst_int (Int.repr 57) tint) (tptr tuchar))\n                          tuchar) (Econst_int (Int.repr 0) tint)))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Evar ___compound (Tstruct _sha256_context noattr))\n                            _block (tarray tuchar 64))\n                          (Econst_int (Int.repr 58) tint) (tptr tuchar))\n                        tuchar) (Econst_int (Int.repr 0) tint)))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Evar ___compound (Tstruct _sha256_context noattr))\n                          _block (tarray tuchar 64))\n                        (Econst_int (Int.repr 59) tint) (tptr tuchar))\n                      tuchar) (Econst_int (Int.repr 0) tint)))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Evar ___compound (Tstruct _sha256_context noattr))\n                        _block (tarray tuchar 64))\n                      (Econst_int (Int.repr 60) tint) (tptr tuchar)) tuchar)\n                  (Econst_int (Int.repr 0) tint)))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Evar ___compound (Tstruct _sha256_context noattr))\n                      _block (tarray tuchar 64))\n                    (Econst_int (Int.repr 61) tint) (tptr tuchar)) tuchar)\n                (Econst_int (Int.repr 0) tint)))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield (Evar ___compound (Tstruct _sha256_context noattr))\n                    _block (tarray tuchar 64))\n                  (Econst_int (Int.repr 62) tint) (tptr tuchar)) tuchar)\n              (Econst_int (Int.repr 0) tint)))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield (Evar ___compound (Tstruct _sha256_context noattr))\n                  _block (tarray tuchar 64)) (Econst_int (Int.repr 63) tint)\n                (tptr tuchar)) tuchar) (Econst_int (Int.repr 0) tint)))\n        (Sassign\n          (Efield (Evar ___compound (Tstruct _sha256_context noattr))\n            _overflow tbool) (Econst_int (Int.repr 0) tint)))\n      (Sassign\n        (Ederef (Etempvar __res (tptr (Tstruct _sha256_context noattr)))\n          (Tstruct _sha256_context noattr))\n        (Evar ___compound (Tstruct _sha256_context noattr))))\n    (Sreturn None)))\n|}.\n\nDefinition f_sha256_uchars := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_ctx, (tptr (Tstruct _sha256_context noattr))) ::\n                (_arr, (tptr tuchar)) :: (_len, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_delta, tulong) :: (_block, (tptr tuchar)) :: (_t'1, tint) ::\n               (_t'9, tulong) :: (_t'8, tulong) :: (_t'7, tulong) ::\n               (_t'6, tulong) :: (_t'5, tbool) :: (_t'4, tulong) ::\n               (_t'3, (tptr tuint)) :: (_t'2, tbool) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'9\n      (Efield\n        (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n          (Tstruct _sha256_context noattr)) _counter tulong))\n    (Sset _delta\n      (Ebinop Osub (Econst_int (Int.repr 64) tint)\n        (Ebinop Omod (Etempvar _t'9 tulong) (Econst_int (Int.repr 64) tint)\n          tulong) tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'8\n        (Efield\n          (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n            (Tstruct _sha256_context noattr)) _counter tulong))\n      (Sset _block\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n              (Tstruct _sha256_context noattr)) _block (tarray tuchar 64))\n          (Ebinop Omod (Etempvar _t'8 tulong) (Econst_int (Int.repr 64) tint)\n            tulong) (tptr tuchar))))\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Sset _t'5\n            (Efield\n              (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                (Tstruct _sha256_context noattr)) _overflow tbool))\n          (Sifthenelse (Etempvar _t'5 tbool)\n            (Sset _t'1 (Econst_int (Int.repr 1) tint))\n            (Ssequence\n              (Sset _t'6 (Evar _sha256_max_counter tulong))\n              (Ssequence\n                (Sset _t'7\n                  (Efield\n                    (Ederef\n                      (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                      (Tstruct _sha256_context noattr)) _counter tulong))\n                (Sset _t'1\n                  (Ecast\n                    (Ebinop Ole\n                      (Ebinop Osub (Etempvar _t'6 tulong)\n                        (Etempvar _t'7 tulong) tulong) (Etempvar _len tulong)\n                      tint) tbool))))))\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n              (Tstruct _sha256_context noattr)) _overflow tbool)\n          (Etempvar _t'1 tint)))\n      (Ssequence\n        (Ssequence\n          (Sset _t'4\n            (Efield\n              (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                (Tstruct _sha256_context noattr)) _counter tulong))\n          (Sassign\n            (Efield\n              (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                (Tstruct _sha256_context noattr)) _counter tulong)\n            (Ebinop Oadd (Etempvar _t'4 tulong) (Etempvar _len tulong)\n              tulong)))\n        (Ssequence\n          (Swhile\n            (Ebinop Ole (Etempvar _delta tulong) (Etempvar _len tulong) tint)\n            (Ssequence\n              (Scall None\n                (Evar _memcpy (Tfunction\n                                (Tcons (tptr tvoid)\n                                  (Tcons (tptr tvoid) (Tcons tulong Tnil)))\n                                (tptr tvoid) cc_default))\n                ((Etempvar _block (tptr tuchar)) ::\n                 (Etempvar _arr (tptr tuchar)) :: (Etempvar _delta tulong) ::\n                 nil))\n              (Ssequence\n                (Sset _arr\n                  (Ebinop Oadd (Etempvar _arr (tptr tuchar))\n                    (Etempvar _delta tulong) (tptr tuchar)))\n                (Ssequence\n                  (Sset _len\n                    (Ebinop Osub (Etempvar _len tulong)\n                      (Etempvar _delta tulong) tulong))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'3\n                        (Efield\n                          (Ederef\n                            (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                            (Tstruct _sha256_context noattr)) _output\n                          (tptr tuint)))\n                      (Scall None\n                        (Evar _sha256_compression_uchar (Tfunction\n                                                          (Tcons (tptr tuint)\n                                                            (Tcons\n                                                              (tptr tuchar)\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                        ((Etempvar _t'3 (tptr tuint)) ::\n                         (Efield\n                           (Ederef\n                             (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                             (Tstruct _sha256_context noattr)) _block\n                           (tarray tuchar 64)) :: nil)))\n                    (Ssequence\n                      (Sset _block\n                        (Efield\n                          (Ederef\n                            (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                            (Tstruct _sha256_context noattr)) _block\n                          (tarray tuchar 64)))\n                      (Sset _delta\n                        (Ecast (Econst_int (Int.repr 64) tint) tulong))))))))\n          (Ssequence\n            (Sifthenelse (Etempvar _len tulong)\n              (Scall None\n                (Evar _memcpy (Tfunction\n                                (Tcons (tptr tvoid)\n                                  (Tcons (tptr tvoid) (Tcons tulong Tnil)))\n                                (tptr tvoid) cc_default))\n                ((Etempvar _block (tptr tuchar)) ::\n                 (Etempvar _arr (tptr tuchar)) :: (Etempvar _len tulong) ::\n                 nil))\n              Sskip)\n            (Ssequence\n              (Sset _t'2\n                (Efield\n                  (Ederef\n                    (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                    (Tstruct _sha256_context noattr)) _overflow tbool))\n              (Sreturn (Some (Eunop Onotbool (Etempvar _t'2 tbool) tint))))))))))\n|}.\n\nDefinition f_sha256_u64be := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_ctx, (tptr (Tstruct _sha256_context noattr))) ::\n                (_x, tulong) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 8)) :: nil);\n  fn_temps := ((_t'1, tbool) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _WriteBE64 (Tfunction (Tcons (tptr tuchar) (Tcons tulong Tnil))\n                       tvoid cc_default))\n    ((Evar _buf (tarray tuchar 8)) :: (Etempvar _x tulong) :: nil))\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _sha256_uchars (Tfunction\n                             (Tcons (tptr (Tstruct _sha256_context noattr))\n                               (Tcons (tptr tuchar) (Tcons tulong Tnil)))\n                             tbool cc_default))\n      ((Etempvar _ctx (tptr (Tstruct _sha256_context noattr))) ::\n       (Evar _buf (tarray tuchar 8)) :: (Esizeof (tarray tuchar 8) tulong) ::\n       nil))\n    (Sreturn (Some (Etempvar _t'1 tbool)))))\n|}.\n\nDefinition f_sha256_finalize := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_ctx, (tptr (Tstruct _sha256_context noattr))) :: nil);\n  fn_vars := ((___compound, (tarray tuchar 64)) :: nil);\n  fn_temps := ((_result, tbool) :: (_length, tulong) :: (_t'3, tbool) ::\n               (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'3\n      (Efield\n        (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n          (Tstruct _sha256_context noattr)) _overflow tbool))\n    (Sset _result (Ecast (Eunop Onotbool (Etempvar _t'3 tbool) tint) tbool)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n            (Tstruct _sha256_context noattr)) _counter tulong))\n      (Sset _length\n        (Ebinop Omul (Etempvar _t'2 tulong) (Econst_int (Int.repr 8) tint)\n          tulong)))\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Ssequence\n                (Ssequence\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Ssequence\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 128) tint))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 5) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 6) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 7) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 8) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 9) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 10) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 11) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 13) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 14) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 15) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 16) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 17) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 18) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 19) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 20) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 21) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 22) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 23) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 24) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 25) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 26) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 27) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 28) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 29) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 30) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 31) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 32) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 33) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 34) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                  (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 35) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 36) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                  (Econst_int (Int.repr 0) tint)))\n                                                              (Sassign\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Evar ___compound (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 37) tint)\n                                                                    (tptr tuchar))\n                                                                  tuchar)\n                                                                (Econst_int (Int.repr 0) tint)))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Evar ___compound (tarray tuchar 64))\n                                                                  (Econst_int (Int.repr 38) tint)\n                                                                  (tptr tuchar))\n                                                                tuchar)\n                                                              (Econst_int (Int.repr 0) tint)))\n                                                          (Sassign\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Evar ___compound (tarray tuchar 64))\n                                                                (Econst_int (Int.repr 39) tint)\n                                                                (tptr tuchar))\n                                                              tuchar)\n                                                            (Econst_int (Int.repr 0) tint)))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Evar ___compound (tarray tuchar 64))\n                                                              (Econst_int (Int.repr 40) tint)\n                                                              (tptr tuchar))\n                                                            tuchar)\n                                                          (Econst_int (Int.repr 0) tint)))\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Evar ___compound (tarray tuchar 64))\n                                                            (Econst_int (Int.repr 41) tint)\n                                                            (tptr tuchar))\n                                                          tuchar)\n                                                        (Econst_int (Int.repr 0) tint)))\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Evar ___compound (tarray tuchar 64))\n                                                          (Econst_int (Int.repr 42) tint)\n                                                          (tptr tuchar))\n                                                        tuchar)\n                                                      (Econst_int (Int.repr 0) tint)))\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Evar ___compound (tarray tuchar 64))\n                                                        (Econst_int (Int.repr 43) tint)\n                                                        (tptr tuchar))\n                                                      tuchar)\n                                                    (Econst_int (Int.repr 0) tint)))\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Evar ___compound (tarray tuchar 64))\n                                                      (Econst_int (Int.repr 44) tint)\n                                                      (tptr tuchar)) tuchar)\n                                                  (Econst_int (Int.repr 0) tint)))\n                                              (Sassign\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Evar ___compound (tarray tuchar 64))\n                                                    (Econst_int (Int.repr 45) tint)\n                                                    (tptr tuchar)) tuchar)\n                                                (Econst_int (Int.repr 0) tint)))\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Evar ___compound (tarray tuchar 64))\n                                                  (Econst_int (Int.repr 46) tint)\n                                                  (tptr tuchar)) tuchar)\n                                              (Econst_int (Int.repr 0) tint)))\n                                          (Sassign\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Evar ___compound (tarray tuchar 64))\n                                                (Econst_int (Int.repr 47) tint)\n                                                (tptr tuchar)) tuchar)\n                                            (Econst_int (Int.repr 0) tint)))\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Evar ___compound (tarray tuchar 64))\n                                              (Econst_int (Int.repr 48) tint)\n                                              (tptr tuchar)) tuchar)\n                                          (Econst_int (Int.repr 0) tint)))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Evar ___compound (tarray tuchar 64))\n                                            (Econst_int (Int.repr 49) tint)\n                                            (tptr tuchar)) tuchar)\n                                        (Econst_int (Int.repr 0) tint)))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Evar ___compound (tarray tuchar 64))\n                                          (Econst_int (Int.repr 50) tint)\n                                          (tptr tuchar)) tuchar)\n                                      (Econst_int (Int.repr 0) tint)))\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Evar ___compound (tarray tuchar 64))\n                                        (Econst_int (Int.repr 51) tint)\n                                        (tptr tuchar)) tuchar)\n                                    (Econst_int (Int.repr 0) tint)))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Evar ___compound (tarray tuchar 64))\n                                      (Econst_int (Int.repr 52) tint)\n                                      (tptr tuchar)) tuchar)\n                                  (Econst_int (Int.repr 0) tint)))\n                              (Sassign\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Evar ___compound (tarray tuchar 64))\n                                    (Econst_int (Int.repr 53) tint)\n                                    (tptr tuchar)) tuchar)\n                                (Econst_int (Int.repr 0) tint)))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Evar ___compound (tarray tuchar 64))\n                                  (Econst_int (Int.repr 54) tint)\n                                  (tptr tuchar)) tuchar)\n                              (Econst_int (Int.repr 0) tint)))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Evar ___compound (tarray tuchar 64))\n                                (Econst_int (Int.repr 55) tint)\n                                (tptr tuchar)) tuchar)\n                            (Econst_int (Int.repr 0) tint)))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Evar ___compound (tarray tuchar 64))\n                              (Econst_int (Int.repr 56) tint) (tptr tuchar))\n                            tuchar) (Econst_int (Int.repr 0) tint)))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd (Evar ___compound (tarray tuchar 64))\n                            (Econst_int (Int.repr 57) tint) (tptr tuchar))\n                          tuchar) (Econst_int (Int.repr 0) tint)))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd (Evar ___compound (tarray tuchar 64))\n                          (Econst_int (Int.repr 58) tint) (tptr tuchar))\n                        tuchar) (Econst_int (Int.repr 0) tint)))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd (Evar ___compound (tarray tuchar 64))\n                        (Econst_int (Int.repr 59) tint) (tptr tuchar))\n                      tuchar) (Econst_int (Int.repr 0) tint)))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd (Evar ___compound (tarray tuchar 64))\n                      (Econst_int (Int.repr 60) tint) (tptr tuchar)) tuchar)\n                  (Econst_int (Int.repr 0) tint)))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Evar ___compound (tarray tuchar 64))\n                    (Econst_int (Int.repr 61) tint) (tptr tuchar)) tuchar)\n                (Econst_int (Int.repr 0) tint)))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Evar ___compound (tarray tuchar 64))\n                  (Econst_int (Int.repr 62) tint) (tptr tuchar)) tuchar)\n              (Econst_int (Int.repr 0) tint)))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd (Evar ___compound (tarray tuchar 64))\n                (Econst_int (Int.repr 63) tint) (tptr tuchar)) tuchar)\n            (Econst_int (Int.repr 0) tint)))\n        (Ssequence\n          (Sset _t'1\n            (Efield\n              (Ederef (Etempvar _ctx (tptr (Tstruct _sha256_context noattr)))\n                (Tstruct _sha256_context noattr)) _counter tulong))\n          (Scall None\n            (Evar _sha256_uchars (Tfunction\n                                   (Tcons\n                                     (tptr (Tstruct _sha256_context noattr))\n                                     (Tcons (tptr tuchar)\n                                       (Tcons tulong Tnil))) tbool\n                                   cc_default))\n            ((Etempvar _ctx (tptr (Tstruct _sha256_context noattr))) ::\n             (Evar ___compound (tarray tuchar 64)) ::\n             (Ebinop Oadd (Econst_int (Int.repr 1) tint)\n               (Ebinop Omod\n                 (Ebinop Osub\n                   (Ebinop Osub\n                     (Ebinop Oadd (Econst_int (Int.repr 64) tint)\n                       (Econst_int (Int.repr 56) tint) tint)\n                     (Ebinop Omod (Etempvar _t'1 tulong)\n                       (Econst_int (Int.repr 64) tint) tulong) tulong)\n                   (Econst_int (Int.repr 1) tint) tulong)\n                 (Econst_int (Int.repr 64) tint) tulong) tulong) :: nil))))\n      (Ssequence\n        (Scall None\n          (Evar _sha256_u64be (Tfunction\n                                (Tcons\n                                  (tptr (Tstruct _sha256_context noattr))\n                                  (Tcons tulong Tnil)) tbool cc_default))\n          ((Etempvar _ctx (tptr (Tstruct _sha256_context noattr))) ::\n           (Etempvar _length tulong) :: nil))\n        (Sreturn (Some (Etempvar _result tbool)))))))\n|}.\n\nDefinition f_sha256_hash := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_ctx, (tptr (Tstruct _sha256_context noattr))) ::\n                (_h, (tptr (Tstruct _sha256_midstate noattr))) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 32)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _sha256_fromMidstate (Tfunction\n                                 (Tcons (tptr tuchar)\n                                   (Tcons (tptr tuint) Tnil)) tvoid\n                                 cc_default))\n    ((Evar _buf (tarray tuchar 32)) ::\n     (Efield\n       (Ederef (Etempvar _h (tptr (Tstruct _sha256_midstate noattr)))\n         (Tstruct _sha256_midstate noattr)) _s (tarray tuint 8)) :: nil))\n  (Scall None\n    (Evar _sha256_uchars (Tfunction\n                           (Tcons (tptr (Tstruct _sha256_context noattr))\n                             (Tcons (tptr tuchar) (Tcons tulong Tnil))) tbool\n                           cc_default))\n    ((Etempvar _ctx (tptr (Tstruct _sha256_context noattr))) ::\n     (Evar _buf (tarray tuchar 32)) :: (Esizeof (tarray tuchar 32) tulong) ::\n     nil)))\n|}.\n\nDefinition f_LSBclear := {|\n  fn_return := tulong;\n  fn_callconv := cc_default;\n  fn_params := ((_x, tulong) :: (_n, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Sreturn (Some (Ecast\n                 (Ebinop Oshl\n                   (Ebinop Oshl\n                     (Ebinop Oshr\n                       (Ebinop Oshr (Etempvar _x tulong)\n                         (Econst_int (Int.repr 1) tint) tulong)\n                       (Ebinop Osub (Etempvar _n tulong)\n                         (Econst_int (Int.repr 1) tint) tulong) tulong)\n                     (Econst_int (Int.repr 1) tint) tulong)\n                   (Ebinop Osub (Etempvar _n tulong)\n                     (Econst_int (Int.repr 1) tint) tulong) tulong) tulong)))\n|}.\n\nDefinition f_peekBit := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_frame, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, (tptr tulong)) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Efield\n      (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n        (Tstruct _frameItem noattr)) _edge (tptr tulong)))\n  (Ssequence\n    (Sset _t'2\n      (Efield\n        (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n          (Tstruct _frameItem noattr)) _offset tulong))\n    (Ssequence\n      (Sset _t'3\n        (Ederef\n          (Ebinop Osub\n            (Ebinop Osub (Etempvar _t'1 (tptr tulong))\n              (Econst_int (Int.repr 1) tint) (tptr tulong))\n            (Ebinop Odiv (Etempvar _t'2 tulong)\n              (Ebinop Osub\n                (Ebinop Oadd\n                  (Ebinop Oadd\n                    (Ebinop Omul\n                      (Ebinop Omod\n                        (Ebinop Odiv\n                          (Ebinop Odiv\n                            (Ecast\n                              (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                tint) tulong)\n                            (Ebinop Oadd\n                              (Ebinop Omod\n                                (Ecast\n                                  (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                    tint) tulong)\n                                (Econst_int (Int.repr 1073741823) tuint)\n                                tulong) (Econst_int (Int.repr 1) tint)\n                              tulong) tulong)\n                          (Econst_int (Int.repr 1073741823) tuint) tulong)\n                        (Econst_int (Int.repr 1073741823) tuint) tulong)\n                      (Econst_int (Int.repr 30) tint) tulong)\n                    (Ebinop Omul\n                      (Ebinop Omod\n                        (Ebinop Odiv\n                          (Ebinop Odiv\n                            (Ebinop Omod\n                              (Ecast\n                                (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                  tint) tulong)\n                              (Econst_int (Int.repr 1073741823) tuint)\n                              tulong)\n                            (Ebinop Oadd\n                              (Ebinop Omod\n                                (Ecast\n                                  (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                    tint) tulong)\n                                (Econst_int (Int.repr 31) tint) tulong)\n                              (Econst_int (Int.repr 1) tint) tulong) tulong)\n                          (Econst_int (Int.repr 31) tint) tulong)\n                        (Econst_int (Int.repr 31) tint) tulong)\n                      (Econst_int (Int.repr 5) tint) tulong) tulong)\n                  (Econst_int (Int.repr 4) tint) tulong)\n                (Ebinop Odiv (Econst_int (Int.repr 12) tint)\n                  (Ebinop Oadd\n                    (Ebinop Omod\n                      (Ecast (Eunop Oneg (Econst_int (Int.repr 1) tint) tint)\n                        tulong) (Econst_int (Int.repr 31) tint) tulong)\n                    (Econst_int (Int.repr 3) tint) tulong) tulong) tulong)\n              tulong) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t'4\n          (Efield\n            (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n              (Tstruct _frameItem noattr)) _offset tulong))\n        (Sreturn (Some (Ebinop Oand (Econst_int (Int.repr 1) tint)\n                         (Ebinop Oshr (Etempvar _t'3 tulong)\n                           (Ebinop Osub\n                             (Ebinop Osub\n                               (Ebinop Osub\n                                 (Ebinop Oadd\n                                   (Ebinop Oadd\n                                     (Ebinop Omul\n                                       (Ebinop Omod\n                                         (Ebinop Odiv\n                                           (Ebinop Odiv\n                                             (Ecast\n                                               (Eunop Oneg\n                                                 (Econst_int (Int.repr 1) tint)\n                                                 tint) tulong)\n                                             (Ebinop Oadd\n                                               (Ebinop Omod\n                                                 (Ecast\n                                                   (Eunop Oneg\n                                                     (Econst_int (Int.repr 1) tint)\n                                                     tint) tulong)\n                                                 (Econst_int (Int.repr 1073741823) tuint)\n                                                 tulong)\n                                               (Econst_int (Int.repr 1) tint)\n                                               tulong) tulong)\n                                           (Econst_int (Int.repr 1073741823) tuint)\n                                           tulong)\n                                         (Econst_int (Int.repr 1073741823) tuint)\n                                         tulong)\n                                       (Econst_int (Int.repr 30) tint)\n                                       tulong)\n                                     (Ebinop Omul\n                                       (Ebinop Omod\n                                         (Ebinop Odiv\n                                           (Ebinop Odiv\n                                             (Ebinop Omod\n                                               (Ecast\n                                                 (Eunop Oneg\n                                                   (Econst_int (Int.repr 1) tint)\n                                                   tint) tulong)\n                                               (Econst_int (Int.repr 1073741823) tuint)\n                                               tulong)\n                                             (Ebinop Oadd\n                                               (Ebinop Omod\n                                                 (Ecast\n                                                   (Eunop Oneg\n                                                     (Econst_int (Int.repr 1) tint)\n                                                     tint) tulong)\n                                                 (Econst_int (Int.repr 31) tint)\n                                                 tulong)\n                                               (Econst_int (Int.repr 1) tint)\n                                               tulong) tulong)\n                                           (Econst_int (Int.repr 31) tint)\n                                           tulong)\n                                         (Econst_int (Int.repr 31) tint)\n                                         tulong)\n                                       (Econst_int (Int.repr 5) tint) tulong)\n                                     tulong) (Econst_int (Int.repr 4) tint)\n                                   tulong)\n                                 (Ebinop Odiv (Econst_int (Int.repr 12) tint)\n                                   (Ebinop Oadd\n                                     (Ebinop Omod\n                                       (Ecast\n                                         (Eunop Oneg\n                                           (Econst_int (Int.repr 1) tint)\n                                           tint) tulong)\n                                       (Econst_int (Int.repr 31) tint)\n                                       tulong) (Econst_int (Int.repr 3) tint)\n                                     tulong) tulong) tulong)\n                               (Ebinop Omod (Etempvar _t'4 tulong)\n                                 (Ebinop Osub\n                                   (Ebinop Oadd\n                                     (Ebinop Oadd\n                                       (Ebinop Omul\n                                         (Ebinop Omod\n                                           (Ebinop Odiv\n                                             (Ebinop Odiv\n                                               (Ecast\n                                                 (Eunop Oneg\n                                                   (Econst_int (Int.repr 1) tint)\n                                                   tint) tulong)\n                                               (Ebinop Oadd\n                                                 (Ebinop Omod\n                                                   (Ecast\n                                                     (Eunop Oneg\n                                                       (Econst_int (Int.repr 1) tint)\n                                                       tint) tulong)\n                                                   (Econst_int (Int.repr 1073741823) tuint)\n                                                   tulong)\n                                                 (Econst_int (Int.repr 1) tint)\n                                                 tulong) tulong)\n                                             (Econst_int (Int.repr 1073741823) tuint)\n                                             tulong)\n                                           (Econst_int (Int.repr 1073741823) tuint)\n                                           tulong)\n                                         (Econst_int (Int.repr 30) tint)\n                                         tulong)\n                                       (Ebinop Omul\n                                         (Ebinop Omod\n                                           (Ebinop Odiv\n                                             (Ebinop Odiv\n                                               (Ebinop Omod\n                                                 (Ecast\n                                                   (Eunop Oneg\n                                                     (Econst_int (Int.repr 1) tint)\n                                                     tint) tulong)\n                                                 (Econst_int (Int.repr 1073741823) tuint)\n                                                 tulong)\n                                               (Ebinop Oadd\n                                                 (Ebinop Omod\n                                                   (Ecast\n                                                     (Eunop Oneg\n                                                       (Econst_int (Int.repr 1) tint)\n                                                       tint) tulong)\n                                                   (Econst_int (Int.repr 31) tint)\n                                                   tulong)\n                                                 (Econst_int (Int.repr 1) tint)\n                                                 tulong) tulong)\n                                             (Econst_int (Int.repr 31) tint)\n                                             tulong)\n                                           (Econst_int (Int.repr 31) tint)\n                                           tulong)\n                                         (Econst_int (Int.repr 5) tint)\n                                         tulong) tulong)\n                                     (Econst_int (Int.repr 4) tint) tulong)\n                                   (Ebinop Odiv\n                                     (Econst_int (Int.repr 12) tint)\n                                     (Ebinop Oadd\n                                       (Ebinop Omod\n                                         (Ecast\n                                           (Eunop Oneg\n                                             (Econst_int (Int.repr 1) tint)\n                                             tint) tulong)\n                                         (Econst_int (Int.repr 31) tint)\n                                         tulong)\n                                       (Econst_int (Int.repr 3) tint) tulong)\n                                     tulong) tulong) tulong) tulong)\n                             (Econst_int (Int.repr 1) tint) tulong) tulong)\n                         tulong)))))))\n|}.\n\nDefinition f_readBit := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_frame, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_result, tbool) :: (_t'1, tbool) :: (_t'2, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _peekBit (Tfunction\n                       (Tcons (tptr (Tstruct _frameItem noattr)) Tnil) tbool\n                       cc_default))\n      ((Etempvar _frame (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Sset _result (Ecast (Etempvar _t'1 tbool) tbool)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n            (Tstruct _frameItem noattr)) _offset tulong))\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n            (Tstruct _frameItem noattr)) _offset tulong)\n        (Ebinop Oadd (Etempvar _t'2 tulong) (Econst_int (Int.repr 1) tint)\n          tulong)))\n    (Sreturn (Some (Etempvar _result tbool)))))\n|}.\n\nDefinition v___func__ := {|\n  gvar_info := (tarray tschar 9);\n  gvar_init := (Init_int8 (Int.repr 119) :: Init_int8 (Int.repr 114) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 101) :: Init_int8 (Int.repr 66) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 116) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_writeBit := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_frame, (tptr (Tstruct _frameItem noattr))) ::\n                (_bit, tbool) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_dst_ptr, (tptr tulong)) :: (_t'1, tulong) ::\n               (_t'9, tulong) :: (_t'8, tulong) :: (_t'7, tulong) ::\n               (_t'6, (tptr tulong)) :: (_t'5, tulong) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool (Econst_int (Int.repr 0) tint) tint)\n      (Ssequence\n        (Sset _t'9\n          (Efield\n            (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n              (Tstruct _frameItem noattr)) _offset tulong))\n        (Sifthenelse (Ebinop Olt (Econst_int (Int.repr 0) tint)\n                       (Etempvar _t'9 tulong) tint)\n          Sskip\n          (Scall None\n            (Evar ___assert_fail (Tfunction\n                                   (Tcons (tptr tschar)\n                                     (Tcons (tptr tschar)\n                                       (Tcons tuint\n                                         (Tcons (tptr tschar) Tnil)))) tvoid\n                                   cc_default))\n            ((Evar ___stringlit_2 (tarray tschar 18)) ::\n             (Evar ___stringlit_1 (tarray tschar 8)) ::\n             (Econst_int (Int.repr 81) tint) ::\n             (Evar ___func__ (tarray tschar 9)) :: nil))))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Ssequence\n      (Sset _t'8\n        (Efield\n          (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n            (Tstruct _frameItem noattr)) _offset tulong))\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n            (Tstruct _frameItem noattr)) _offset tulong)\n        (Ebinop Osub (Etempvar _t'8 tulong) (Econst_int (Int.repr 1) tint)\n          tulong)))\n    (Ssequence\n      (Ssequence\n        (Sset _t'6\n          (Efield\n            (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n              (Tstruct _frameItem noattr)) _edge (tptr tulong)))\n        (Ssequence\n          (Sset _t'7\n            (Efield\n              (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n                (Tstruct _frameItem noattr)) _offset tulong))\n          (Sset _dst_ptr\n            (Ebinop Oadd (Etempvar _t'6 (tptr tulong))\n              (Ebinop Odiv (Etempvar _t'7 tulong)\n                (Ebinop Osub\n                  (Ebinop Oadd\n                    (Ebinop Oadd\n                      (Ebinop Omul\n                        (Ebinop Omod\n                          (Ebinop Odiv\n                            (Ebinop Odiv\n                              (Ecast\n                                (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                  tint) tulong)\n                              (Ebinop Oadd\n                                (Ebinop Omod\n                                  (Ecast\n                                    (Eunop Oneg\n                                      (Econst_int (Int.repr 1) tint) tint)\n                                    tulong)\n                                  (Econst_int (Int.repr 1073741823) tuint)\n                                  tulong) (Econst_int (Int.repr 1) tint)\n                                tulong) tulong)\n                            (Econst_int (Int.repr 1073741823) tuint) tulong)\n                          (Econst_int (Int.repr 1073741823) tuint) tulong)\n                        (Econst_int (Int.repr 30) tint) tulong)\n                      (Ebinop Omul\n                        (Ebinop Omod\n                          (Ebinop Odiv\n                            (Ebinop Odiv\n                              (Ebinop Omod\n                                (Ecast\n                                  (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                    tint) tulong)\n                                (Econst_int (Int.repr 1073741823) tuint)\n                                tulong)\n                              (Ebinop Oadd\n                                (Ebinop Omod\n                                  (Ecast\n                                    (Eunop Oneg\n                                      (Econst_int (Int.repr 1) tint) tint)\n                                    tulong) (Econst_int (Int.repr 31) tint)\n                                  tulong) (Econst_int (Int.repr 1) tint)\n                                tulong) tulong)\n                            (Econst_int (Int.repr 31) tint) tulong)\n                          (Econst_int (Int.repr 31) tint) tulong)\n                        (Econst_int (Int.repr 5) tint) tulong) tulong)\n                    (Econst_int (Int.repr 4) tint) tulong)\n                  (Ebinop Odiv (Econst_int (Int.repr 12) tint)\n                    (Ebinop Oadd\n                      (Ebinop Omod\n                        (Ecast\n                          (Eunop Oneg (Econst_int (Int.repr 1) tint) tint)\n                          tulong) (Econst_int (Int.repr 31) tint) tulong)\n                      (Econst_int (Int.repr 3) tint) tulong) tulong) tulong)\n                tulong) (tptr tulong)))))\n      (Ssequence\n        (Sifthenelse (Etempvar _bit tbool)\n          (Ssequence\n            (Sset _t'4 (Ederef (Etempvar _dst_ptr (tptr tulong)) tulong))\n            (Ssequence\n              (Sset _t'5\n                (Efield\n                  (Ederef\n                    (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n                    (Tstruct _frameItem noattr)) _offset tulong))\n              (Sassign (Ederef (Etempvar _dst_ptr (tptr tulong)) tulong)\n                (Ebinop Oor (Etempvar _t'4 tulong)\n                  (Ecast\n                    (Ebinop Oshl\n                      (Ecast (Econst_int (Int.repr 1) tint) tulong)\n                      (Ebinop Omod (Etempvar _t'5 tulong)\n                        (Ebinop Osub\n                          (Ebinop Oadd\n                            (Ebinop Oadd\n                              (Ebinop Omul\n                                (Ebinop Omod\n                                  (Ebinop Odiv\n                                    (Ebinop Odiv\n                                      (Ecast\n                                        (Eunop Oneg\n                                          (Econst_int (Int.repr 1) tint)\n                                          tint) tulong)\n                                      (Ebinop Oadd\n                                        (Ebinop Omod\n                                          (Ecast\n                                            (Eunop Oneg\n                                              (Econst_int (Int.repr 1) tint)\n                                              tint) tulong)\n                                          (Econst_int (Int.repr 1073741823) tuint)\n                                          tulong)\n                                        (Econst_int (Int.repr 1) tint)\n                                        tulong) tulong)\n                                    (Econst_int (Int.repr 1073741823) tuint)\n                                    tulong)\n                                  (Econst_int (Int.repr 1073741823) tuint)\n                                  tulong) (Econst_int (Int.repr 30) tint)\n                                tulong)\n                              (Ebinop Omul\n                                (Ebinop Omod\n                                  (Ebinop Odiv\n                                    (Ebinop Odiv\n                                      (Ebinop Omod\n                                        (Ecast\n                                          (Eunop Oneg\n                                            (Econst_int (Int.repr 1) tint)\n                                            tint) tulong)\n                                        (Econst_int (Int.repr 1073741823) tuint)\n                                        tulong)\n                                      (Ebinop Oadd\n                                        (Ebinop Omod\n                                          (Ecast\n                                            (Eunop Oneg\n                                              (Econst_int (Int.repr 1) tint)\n                                              tint) tulong)\n                                          (Econst_int (Int.repr 31) tint)\n                                          tulong)\n                                        (Econst_int (Int.repr 1) tint)\n                                        tulong) tulong)\n                                    (Econst_int (Int.repr 31) tint) tulong)\n                                  (Econst_int (Int.repr 31) tint) tulong)\n                                (Econst_int (Int.repr 5) tint) tulong)\n                              tulong) (Econst_int (Int.repr 4) tint) tulong)\n                          (Ebinop Odiv (Econst_int (Int.repr 12) tint)\n                            (Ebinop Oadd\n                              (Ebinop Omod\n                                (Ecast\n                                  (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                    tint) tulong)\n                                (Econst_int (Int.repr 31) tint) tulong)\n                              (Econst_int (Int.repr 3) tint) tulong) tulong)\n                          tulong) tulong) tulong) tulong) tulong))))\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Ederef (Etempvar _dst_ptr (tptr tulong)) tulong))\n              (Ssequence\n                (Sset _t'3\n                  (Efield\n                    (Ederef\n                      (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n                      (Tstruct _frameItem noattr)) _offset tulong))\n                (Scall (Some _t'1)\n                  (Evar _LSBclear (Tfunction\n                                    (Tcons tulong (Tcons tulong Tnil)) tulong\n                                    cc_default))\n                  ((Etempvar _t'2 tulong) ::\n                   (Ebinop Oadd\n                     (Ebinop Omod (Etempvar _t'3 tulong)\n                       (Ebinop Osub\n                         (Ebinop Oadd\n                           (Ebinop Oadd\n                             (Ebinop Omul\n                               (Ebinop Omod\n                                 (Ebinop Odiv\n                                   (Ebinop Odiv\n                                     (Ecast\n                                       (Eunop Oneg\n                                         (Econst_int (Int.repr 1) tint) tint)\n                                       tulong)\n                                     (Ebinop Oadd\n                                       (Ebinop Omod\n                                         (Ecast\n                                           (Eunop Oneg\n                                             (Econst_int (Int.repr 1) tint)\n                                             tint) tulong)\n                                         (Econst_int (Int.repr 1073741823) tuint)\n                                         tulong)\n                                       (Econst_int (Int.repr 1) tint) tulong)\n                                     tulong)\n                                   (Econst_int (Int.repr 1073741823) tuint)\n                                   tulong)\n                                 (Econst_int (Int.repr 1073741823) tuint)\n                                 tulong) (Econst_int (Int.repr 30) tint)\n                               tulong)\n                             (Ebinop Omul\n                               (Ebinop Omod\n                                 (Ebinop Odiv\n                                   (Ebinop Odiv\n                                     (Ebinop Omod\n                                       (Ecast\n                                         (Eunop Oneg\n                                           (Econst_int (Int.repr 1) tint)\n                                           tint) tulong)\n                                       (Econst_int (Int.repr 1073741823) tuint)\n                                       tulong)\n                                     (Ebinop Oadd\n                                       (Ebinop Omod\n                                         (Ecast\n                                           (Eunop Oneg\n                                             (Econst_int (Int.repr 1) tint)\n                                             tint) tulong)\n                                         (Econst_int (Int.repr 31) tint)\n                                         tulong)\n                                       (Econst_int (Int.repr 1) tint) tulong)\n                                     tulong) (Econst_int (Int.repr 31) tint)\n                                   tulong) (Econst_int (Int.repr 31) tint)\n                                 tulong) (Econst_int (Int.repr 5) tint)\n                               tulong) tulong) (Econst_int (Int.repr 4) tint)\n                           tulong)\n                         (Ebinop Odiv (Econst_int (Int.repr 12) tint)\n                           (Ebinop Oadd\n                             (Ebinop Omod\n                               (Ecast\n                                 (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                   tint) tulong)\n                               (Econst_int (Int.repr 31) tint) tulong)\n                             (Econst_int (Int.repr 3) tint) tulong) tulong)\n                         tulong) tulong) (Econst_int (Int.repr 1) tint)\n                     tulong) :: nil))))\n            (Sassign (Ederef (Etempvar _dst_ptr (tptr tulong)) tulong)\n              (Etempvar _t'1 tulong))))\n        (Sreturn (Some (Etempvar _bit tbool)))))))\n|}.\n\nDefinition v___func____1 := {|\n  gvar_info := (tarray tschar 9);\n  gvar_init := (Init_int8 (Int.repr 115) :: Init_int8 (Int.repr 107) ::\n                Init_int8 (Int.repr 105) :: Init_int8 (Int.repr 112) ::\n                Init_int8 (Int.repr 66) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_skipBits := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_frame, (tptr (Tstruct _frameItem noattr))) ::\n                (_n, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool (Econst_int (Int.repr 0) tint) tint)\n      (Ssequence\n        (Sset _t'2\n          (Efield\n            (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n              (Tstruct _frameItem noattr)) _offset tulong))\n        (Sifthenelse (Ebinop Ole (Etempvar _n tulong) (Etempvar _t'2 tulong)\n                       tint)\n          Sskip\n          (Scall None\n            (Evar ___assert_fail (Tfunction\n                                   (Tcons (tptr tschar)\n                                     (Tcons (tptr tschar)\n                                       (Tcons tuint\n                                         (Tcons (tptr tschar) Tnil)))) tvoid\n                                   cc_default))\n            ((Evar ___stringlit_3 (tarray tschar 19)) ::\n             (Evar ___stringlit_1 (tarray tschar 8)) ::\n             (Econst_int (Int.repr 105) tint) ::\n             (Evar ___func____1 (tarray tschar 9)) :: nil))))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sset _t'1\n      (Efield\n        (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n          (Tstruct _frameItem noattr)) _offset tulong))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _frame (tptr (Tstruct _frameItem noattr)))\n          (Tstruct _frameItem noattr)) _offset tulong)\n      (Ebinop Osub (Etempvar _t'1 tulong) (Etempvar _n tulong) tulong))))\n|}.\n\nDefinition f_read8s := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_x, (tptr tuchar)) :: (_n, tulong) ::\n                (_frame, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'2, tuchar) :: (_t'1, (tptr tuchar)) :: nil);\n  fn_body :=\n(Sloop\n  (Ssequence\n    (Sifthenelse (Etempvar _n tulong) Sskip Sbreak)\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Sset _t'1 (Etempvar _x (tptr tuchar)))\n          (Sset _x\n            (Ebinop Oadd (Etempvar _t'1 (tptr tuchar))\n              (Econst_int (Int.repr 1) tint) (tptr tuchar))))\n        (Scall (Some _t'2)\n          (Evar _simplicity_read8 (Tfunction\n                                    (Tcons (tptr (Tstruct _frameItem noattr))\n                                      Tnil) tuchar cc_default))\n          ((Etempvar _frame (tptr (Tstruct _frameItem noattr))) :: nil)))\n      (Sassign (Ederef (Etempvar _t'1 (tptr tuchar)) tuchar)\n        (Ecast (Etempvar _t'2 tuchar) tuchar))))\n  (Sset _n\n    (Ebinop Osub (Etempvar _n tulong) (Econst_int (Int.repr 1) tint) tulong)))\n|}.\n\nDefinition f_write8s := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_frame, (tptr (Tstruct _frameItem noattr))) ::\n                (_x, (tptr tuchar)) :: (_n, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, (tptr tuchar)) :: (_t'2, tuchar) :: nil);\n  fn_body :=\n(Sloop\n  (Ssequence\n    (Sifthenelse (Etempvar _n tulong) Sskip Sbreak)\n    (Ssequence\n      (Ssequence\n        (Sset _t'1 (Etempvar _x (tptr tuchar)))\n        (Sset _x\n          (Ebinop Oadd (Etempvar _t'1 (tptr tuchar))\n            (Econst_int (Int.repr 1) tint) (tptr tuchar))))\n      (Ssequence\n        (Sset _t'2 (Ederef (Etempvar _t'1 (tptr tuchar)) tuchar))\n        (Scall None\n          (Evar _simplicity_write8 (Tfunction\n                                     (Tcons\n                                       (tptr (Tstruct _frameItem noattr))\n                                       (Tcons tuchar Tnil)) tvoid cc_default))\n          ((Etempvar _frame (tptr (Tstruct _frameItem noattr))) ::\n           (Etempvar _t'2 tuchar) :: nil)))))\n  (Sset _n\n    (Ebinop Osub (Etempvar _n tulong) (Econst_int (Int.repr 1) tint) tulong)))\n|}.\n\nDefinition f_read32s := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_x, (tptr tuint)) :: (_n, tulong) ::\n                (_frame, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'2, tulong) :: (_t'1, (tptr tuint)) :: nil);\n  fn_body :=\n(Sloop\n  (Ssequence\n    (Sifthenelse (Etempvar _n tulong) Sskip Sbreak)\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Sset _t'1 (Etempvar _x (tptr tuint)))\n          (Sset _x\n            (Ebinop Oadd (Etempvar _t'1 (tptr tuint))\n              (Econst_int (Int.repr 1) tint) (tptr tuint))))\n        (Scall (Some _t'2)\n          (Evar _simplicity_read32 (Tfunction\n                                     (Tcons\n                                       (tptr (Tstruct _frameItem noattr))\n                                       Tnil) tulong cc_default))\n          ((Etempvar _frame (tptr (Tstruct _frameItem noattr))) :: nil)))\n      (Sassign (Ederef (Etempvar _t'1 (tptr tuint)) tuint)\n        (Ecast (Etempvar _t'2 tulong) tuint))))\n  (Sset _n\n    (Ebinop Osub (Etempvar _n tulong) (Econst_int (Int.repr 1) tint) tulong)))\n|}.\n\nDefinition v_signatureIV := {|\n  gvar_info := (Tstruct _sha256_midstate noattr);\n  gvar_init := (Init_int32 (Int.repr (-303315125)) ::\n                Init_int32 (Int.repr 2001476530) ::\n                Init_int32 (Int.repr (-882122114)) ::\n                Init_int32 (Int.repr 953564290) ::\n                Init_int32 (Int.repr 1863085798) ::\n                Init_int32 (Int.repr 37330614) ::\n                Init_int32 (Int.repr 1211883153) ::\n                Init_int32 (Int.repr 654973851) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_stderr := {|\n  gvar_info := (tptr (Tstruct __IO_FILE noattr));\n  gvar_init := nil;\n  gvar_readonly := false;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_memcmp_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_s1, (tptr tvoid)) :: (_s2, (tptr tvoid)) :: (_n, tulong) ::\n                nil);\n  fn_vars := nil;\n  fn_temps := ((_p1, (tptr tuchar)) :: (_p2, (tptr tuchar)) ::\n               (_i, tulong) :: (_diff, tint) :: (_t'2, tuchar) ::\n               (_t'1, tuchar) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _p1 (Etempvar _s1 (tptr tvoid)))\n  (Ssequence\n    (Sset _p2 (Etempvar _s2 (tptr tvoid)))\n    (Ssequence\n      (Ssequence\n        (Sset _i (Ecast (Econst_int (Int.repr 0) tint) tulong))\n        (Sloop\n          (Ssequence\n            (Sifthenelse (Ebinop Olt (Etempvar _i tulong)\n                           (Etempvar _n tulong) tint)\n              Sskip\n              Sbreak)\n            (Ssequence\n              (Ssequence\n                (Sset _t'1\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _p1 (tptr tuchar))\n                      (Etempvar _i tulong) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'2\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _p2 (tptr tuchar))\n                        (Etempvar _i tulong) (tptr tuchar)) tuchar))\n                  (Sset _diff\n                    (Ebinop Osub (Etempvar _t'1 tuchar)\n                      (Etempvar _t'2 tuchar) tint))))\n              (Sifthenelse (Ebinop One (Etempvar _diff tint)\n                             (Econst_int (Int.repr 0) tint) tint)\n                (Sreturn (Some (Etempvar _diff tint)))\n                Sskip)))\n          (Sset _i\n            (Ebinop Oadd (Etempvar _i tulong) (Econst_int (Int.repr 1) tint)\n              tulong))))\n      (Sreturn (Some (Econst_int (Int.repr 0) tint))))))\n|}.\n\nDefinition v_debruijn := {|\n  gvar_info := (tarray tuchar 64);\n  gvar_init := (Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 1) ::\n                Init_int8 (Int.repr 2) :: Init_int8 (Int.repr 53) ::\n                Init_int8 (Int.repr 3) :: Init_int8 (Int.repr 7) ::\n                Init_int8 (Int.repr 54) :: Init_int8 (Int.repr 27) ::\n                Init_int8 (Int.repr 4) :: Init_int8 (Int.repr 38) ::\n                Init_int8 (Int.repr 41) :: Init_int8 (Int.repr 8) ::\n                Init_int8 (Int.repr 34) :: Init_int8 (Int.repr 55) ::\n                Init_int8 (Int.repr 48) :: Init_int8 (Int.repr 28) ::\n                Init_int8 (Int.repr 62) :: Init_int8 (Int.repr 5) ::\n                Init_int8 (Int.repr 39) :: Init_int8 (Int.repr 46) ::\n                Init_int8 (Int.repr 44) :: Init_int8 (Int.repr 42) ::\n                Init_int8 (Int.repr 22) :: Init_int8 (Int.repr 9) ::\n                Init_int8 (Int.repr 24) :: Init_int8 (Int.repr 35) ::\n                Init_int8 (Int.repr 59) :: Init_int8 (Int.repr 56) ::\n                Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 18) ::\n                Init_int8 (Int.repr 29) :: Init_int8 (Int.repr 11) ::\n                Init_int8 (Int.repr 63) :: Init_int8 (Int.repr 52) ::\n                Init_int8 (Int.repr 6) :: Init_int8 (Int.repr 26) ::\n                Init_int8 (Int.repr 37) :: Init_int8 (Int.repr 40) ::\n                Init_int8 (Int.repr 33) :: Init_int8 (Int.repr 47) ::\n                Init_int8 (Int.repr 61) :: Init_int8 (Int.repr 45) ::\n                Init_int8 (Int.repr 43) :: Init_int8 (Int.repr 21) ::\n                Init_int8 (Int.repr 23) :: Init_int8 (Int.repr 58) ::\n                Init_int8 (Int.repr 17) :: Init_int8 (Int.repr 10) ::\n                Init_int8 (Int.repr 51) :: Init_int8 (Int.repr 25) ::\n                Init_int8 (Int.repr 36) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 60) :: Init_int8 (Int.repr 20) ::\n                Init_int8 (Int.repr 57) :: Init_int8 (Int.repr 16) ::\n                Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 31) ::\n                Init_int8 (Int.repr 19) :: Init_int8 (Int.repr 15) ::\n                Init_int8 (Int.repr 30) :: Init_int8 (Int.repr 14) ::\n                Init_int8 (Int.repr 13) :: Init_int8 (Int.repr 12) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_ctz64_var_debruijn := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_x, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tuchar) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Ederef\n      (Ebinop Oadd (Evar _debruijn (tarray tuchar 64))\n        (Ebinop Oshr\n          (Ecast\n            (Ebinop Omul\n              (Ebinop Oand (Etempvar _x tulong)\n                (Eunop Oneg (Etempvar _x tulong) tulong) tulong)\n              (Econst_long (Int64.repr 157587932685088877) tulong) tulong)\n            tulong) (Econst_int (Int.repr 58) tint) tulong) (tptr tuchar))\n      tuchar))\n  (Sreturn (Some (Etempvar _t'1 tuchar))))\n|}.\n\nDefinition f_secp256k1_ctz64_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_x, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One (Etempvar _x tulong)\n                     (Econst_int (Int.repr 0) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_5 (tarray tschar 17)) ::\n               (Econst_int (Int.repr 141) tint) ::\n               (Evar ___stringlit_4 (tarray tschar 30)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_ctz64_var_debruijn (Tfunction (Tcons tulong Tnil) tint\n                                            cc_default))\n      ((Etempvar _x tulong) :: nil))\n    (Sreturn (Some (Etempvar _t'1 tint)))))\n|}.\n\nDefinition v_secp256k1_const_beta := {|\n  gvar_info := (Tstruct __2380 noattr);\n  gvar_init := (Init_int64 (Int64.repr 2652195750478318) ::\n                Init_int64 (Int64.repr 2059588628732947) ::\n                Init_int64 (Int64.repr 3435101582848073) ::\n                Init_int64 (Int64.repr 124274446989802) ::\n                Init_int64 (Int64.repr 135142927197564) ::\n                Init_int32 (Int.repr 1) :: Init_int32 (Int.repr 1) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_modinv64_signed62_assign := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_src, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                nil);\n  fn_vars := nil;\n  fn_temps := ((_t'5, tlong) :: (_t'4, tlong) :: (_t'3, tlong) ::\n               (_t'2, tlong) :: (_t'1, tlong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'5\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef\n              (Etempvar _src (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n              (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n            (tarray tlong 5)) (Econst_int (Int.repr 0) tint) (tptr tlong))\n        tlong))\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef\n              (Etempvar _dst (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n              (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n            (tarray tlong 5)) (Econst_int (Int.repr 0) tint) (tptr tlong))\n        tlong) (Etempvar _t'5 tlong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'4\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef\n                (Etempvar _src (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n              (tarray tlong 5)) (Econst_int (Int.repr 1) tint) (tptr tlong))\n          tlong))\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef\n                (Etempvar _dst (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n              (tarray tlong 5)) (Econst_int (Int.repr 1) tint) (tptr tlong))\n          tlong) (Etempvar _t'4 tlong)))\n    (Ssequence\n      (Ssequence\n        (Sset _t'3\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef\n                  (Etempvar _src (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                  (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n              (tptr tlong)) tlong))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef\n                  (Etempvar _dst (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                  (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n              (tptr tlong)) tlong) (Etempvar _t'3 tlong)))\n      (Ssequence\n        (Ssequence\n          (Sset _t'2\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _src (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n                (tptr tlong)) tlong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _dst (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n                (tptr tlong)) tlong) (Etempvar _t'2 tlong)))\n        (Ssequence\n          (Sset _t'1\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _src (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                (tptr tlong)) tlong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _dst (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                (tptr tlong)) tlong) (Etempvar _t'1 tlong)))))))\n|}.\n\nDefinition f_secp256k1_modinv64_abs := {|\n  fn_return := tlong;\n  fn_callconv := cc_default;\n  fn_params := ((_v, tlong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Ogt (Etempvar _v tlong)\n                     (Ebinop Osub\n                       (Eunop Oneg\n                         (Econst_long (Int64.repr 9223372036854775807) tlong)\n                         tlong) (Econst_int (Int.repr 1) tint) tlong) tint)\n                   tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'1 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_8 (tarray tschar 26)) ::\n               (Econst_int (Int.repr 33) tint) ::\n               (Evar ___stringlit_7 (tarray tschar 37)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sifthenelse (Ebinop Olt (Etempvar _v tlong)\n                   (Econst_int (Int.repr 0) tint) tint)\n      (Sreturn (Some (Eunop Oneg (Etempvar _v tlong) tlong)))\n      Sskip)\n    (Sreturn (Some (Etempvar _v tlong)))))\n|}.\n\nDefinition v_SECP256K1_SIGNED62_ONE := {|\n  gvar_info := (Tstruct _secp256k1_modinv64_signed62 noattr);\n  gvar_init := (Init_int64 (Int64.repr 1) :: Init_space 32 :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_modinv64_mul_62 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_a, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_alen, tint) :: (_factor, tlong) :: nil);\n  fn_vars := ((_c, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_d, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_M62, tulong) :: (_i, tint) :: (_t'4, tlong) ::\n               (_t'3, tint) :: (_t'2, tlong) :: (_t'1, tulong) ::\n               (_t'7, tlong) :: (_t'6, tlong) ::\n               (_t'5, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _M62\n    (Ebinop Oshr (Econst_long (Int64.repr (-1)) tulong)\n      (Econst_int (Int.repr 2) tint) tulong))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_i128_from_i64 (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))\n                                         (Tcons tlong Tnil)) tvoid\n                                       cc_default))\n      ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n       (Econst_int (Int.repr 0) tint) :: nil))\n    (Ssequence\n      (Ssequence\n        (Sset _i (Econst_int (Int.repr 0) tint))\n        (Sloop\n          (Ssequence\n            (Sifthenelse (Ebinop Olt (Etempvar _i tint)\n                           (Econst_int (Int.repr 4) tint) tint)\n              Sskip\n              Sbreak)\n            (Ssequence\n              (Sifthenelse (Ebinop Olt (Etempvar _i tint)\n                             (Etempvar _alen tint) tint)\n                (Ssequence\n                  (Sset _t'7\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                            (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                          (tarray tlong 5)) (Etempvar _i tint) (tptr tlong))\n                      tlong))\n                  (Scall None\n                    (Evar _secp256k1_i128_accum_mul (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                        (Tcons tlong\n                                                          (Tcons tlong Tnil)))\n                                                      tvoid cc_default))\n                    ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                     (Etempvar _t'7 tlong) :: (Etempvar _factor tlong) ::\n                     nil)))\n                Sskip)\n              (Ssequence\n                (Ssequence\n                  (Scall (Some _t'1)\n                    (Evar _secp256k1_i128_to_u64 (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                     Tnil) tulong cc_default))\n                    ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                       (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                            (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                          (tarray tlong 5)) (Etempvar _i tint) (tptr tlong))\n                      tlong)\n                    (Ebinop Oand (Etempvar _t'1 tulong)\n                      (Etempvar _M62 tulong) tulong)))\n                (Scall None\n                  (Evar _secp256k1_i128_rshift (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                   (Tcons tuint Tnil)) tvoid\n                                                 cc_default))\n                  ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                   (Econst_int (Int.repr 62) tint) :: nil)))))\n          (Sset _i\n            (Ebinop Oadd (Etempvar _i tint) (Econst_int (Int.repr 1) tint)\n              tint))))\n      (Ssequence\n        (Sifthenelse (Ebinop Olt (Econst_int (Int.repr 4) tint)\n                       (Etempvar _alen tint) tint)\n          (Ssequence\n            (Sset _t'6\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef\n                      (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                      (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                    (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                  (tptr tlong)) tlong))\n            (Scall None\n              (Evar _secp256k1_i128_accum_mul (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  (Tcons tlong\n                                                    (Tcons tlong Tnil)))\n                                                tvoid cc_default))\n              ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n               (Etempvar _t'6 tlong) :: (Etempvar _factor tlong) :: nil)))\n          Sskip)\n        (Ssequence\n          (Ssequence\n            (Scall (Some _t'2)\n              (Evar _secp256k1_i128_to_i64 (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                               Tnil) tlong cc_default))\n              ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                 (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n            (Scall None\n              (Evar _secp256k1_i128_from_i64 (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                 (Tcons tlong Tnil)) tvoid\n                                               cc_default))\n              ((Eaddrof (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n               (Etempvar _t'2 tlong) :: nil)))\n          (Ssequence\n            (Sloop\n              (Ssequence\n                (Scall (Some _t'3)\n                  (Evar _secp256k1_i128_eq_var (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                   (Tcons\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                     Tnil)) tint cc_default))\n                  ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                   (Eaddrof (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                (Sifthenelse (Eunop Onotbool (Etempvar _t'3 tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'5\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_8 (tarray tschar 26)) ::\n                           (Econst_int (Int.repr 52) tint) ::\n                           (Evar ___stringlit_9 (tarray tschar 53)) :: nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip))\n              Sbreak)\n            (Ssequence\n              (Scall (Some _t'4)\n                (Evar _secp256k1_i128_to_i64 (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                 Tnil) tlong cc_default))\n                ((Eaddrof (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                   (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef\n                        (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                        (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                      (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                    (tptr tlong)) tlong) (Etempvar _t'4 tlong)))))))))\n|}.\n\nDefinition f_secp256k1_modinv64_mul_cmp_62 := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_alen, tint) ::\n                (_b, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_factor, tlong) :: nil);\n  fn_vars := ((_am, (Tstruct _secp256k1_modinv64_signed62 noattr)) ::\n              (_bm, (Tstruct _secp256k1_modinv64_signed62 noattr)) :: nil);\n  fn_temps := ((_i, tint) :: (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'7, tlong) :: (_t'6, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'5, tlong) :: (_t'4, tlong) :: (_t'3, tlong) ::\n               (_t'2, tlong) :: (_t'1, tlong) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_modinv64_mul_62 (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                         (Tcons\n                                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                           (Tcons tint (Tcons tlong Tnil))))\n                                       tvoid cc_default))\n    ((Eaddrof (Evar _am (Tstruct _secp256k1_modinv64_signed62 noattr))\n       (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n     (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n     (Etempvar _alen tint) :: (Econst_int (Int.repr 1) tint) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_modinv64_mul_62 (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                             (Tcons tint (Tcons tlong Tnil))))\n                                         tvoid cc_default))\n      ((Eaddrof (Evar _bm (Tstruct _secp256k1_modinv64_signed62 noattr))\n         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n       (Etempvar _b (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n       (Econst_int (Int.repr 5) tint) :: (Etempvar _factor tlong) :: nil))\n    (Ssequence\n      (Ssequence\n        (Sset _i (Econst_int (Int.repr 0) tint))\n        (Sloop\n          (Ssequence\n            (Sifthenelse (Ebinop Olt (Etempvar _i tint)\n                           (Econst_int (Int.repr 4) tint) tint)\n              Sskip\n              Sbreak)\n            (Ssequence\n              (Sloop\n                (Ssequence\n                  (Sset _t'7\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Evar _am (Tstruct _secp256k1_modinv64_signed62 noattr))\n                          _v (tarray tlong 5)) (Etempvar _i tint)\n                        (tptr tlong)) tlong))\n                  (Sifthenelse (Eunop Onotbool\n                                 (Ebinop Oeq\n                                   (Ebinop Oshr (Etempvar _t'7 tlong)\n                                     (Econst_int (Int.repr 62) tint) tlong)\n                                   (Econst_int (Int.repr 0) tint) tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'8\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_8 (tarray tschar 26)) ::\n                             (Econst_int (Int.repr 64) tint) ::\n                             (Evar ___stringlit_10 (tarray tschar 42)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip))\n                Sbreak)\n              (Sloop\n                (Ssequence\n                  (Sset _t'5\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Evar _bm (Tstruct _secp256k1_modinv64_signed62 noattr))\n                          _v (tarray tlong 5)) (Etempvar _i tint)\n                        (tptr tlong)) tlong))\n                  (Sifthenelse (Eunop Onotbool\n                                 (Ebinop Oeq\n                                   (Ebinop Oshr (Etempvar _t'5 tlong)\n                                     (Econst_int (Int.repr 62) tint) tlong)\n                                   (Econst_int (Int.repr 0) tint) tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'6\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_8 (tarray tschar 26)) ::\n                             (Econst_int (Int.repr 65) tint) ::\n                             (Evar ___stringlit_11 (tarray tschar 42)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip))\n                Sbreak)))\n          (Sset _i\n            (Ebinop Oadd (Etempvar _i tint) (Econst_int (Int.repr 1) tint)\n              tint))))\n      (Ssequence\n        (Ssequence\n          (Sset _i (Econst_int (Int.repr 4) tint))\n          (Sloop\n            (Ssequence\n              (Sifthenelse (Ebinop Oge (Etempvar _i tint)\n                             (Econst_int (Int.repr 0) tint) tint)\n                Sskip\n                Sbreak)\n              (Ssequence\n                (Ssequence\n                  (Sset _t'3\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Evar _am (Tstruct _secp256k1_modinv64_signed62 noattr))\n                          _v (tarray tlong 5)) (Etempvar _i tint)\n                        (tptr tlong)) tlong))\n                  (Ssequence\n                    (Sset _t'4\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Evar _bm (Tstruct _secp256k1_modinv64_signed62 noattr))\n                            _v (tarray tlong 5)) (Etempvar _i tint)\n                          (tptr tlong)) tlong))\n                    (Sifthenelse (Ebinop Olt (Etempvar _t'3 tlong)\n                                   (Etempvar _t'4 tlong) tint)\n                      (Sreturn (Some (Eunop Oneg\n                                       (Econst_int (Int.repr 1) tint) tint)))\n                      Sskip)))\n                (Ssequence\n                  (Sset _t'1\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Evar _am (Tstruct _secp256k1_modinv64_signed62 noattr))\n                          _v (tarray tlong 5)) (Etempvar _i tint)\n                        (tptr tlong)) tlong))\n                  (Ssequence\n                    (Sset _t'2\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Evar _bm (Tstruct _secp256k1_modinv64_signed62 noattr))\n                            _v (tarray tlong 5)) (Etempvar _i tint)\n                          (tptr tlong)) tlong))\n                    (Sifthenelse (Ebinop Ogt (Etempvar _t'1 tlong)\n                                   (Etempvar _t'2 tlong) tint)\n                      (Sreturn (Some (Econst_int (Int.repr 1) tint)))\n                      Sskip)))))\n            (Sset _i\n              (Ebinop Osub (Etempvar _i tint) (Econst_int (Int.repr 1) tint)\n                tint))))\n        (Sreturn (Some (Econst_int (Int.repr 0) tint)))))))\n|}.\n\nDefinition f_secp256k1_modinv64_det_check_pow2 := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_t, (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                (_n, tuint) :: (_abs, tint) :: nil);\n  fn_vars := ((_a, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_t'3, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'7, tlong) :: (_t'6, tlong) :: (_t'5, tlong) ::\n               (_t'4, tlong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'4\n      (Efield\n        (Ederef\n          (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n          (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _u tlong))\n    (Ssequence\n      (Sset _t'5\n        (Efield\n          (Ederef\n            (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n            (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _v tlong))\n      (Ssequence\n        (Sset _t'6\n          (Efield\n            (Ederef\n              (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n              (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _q tlong))\n        (Ssequence\n          (Sset _t'7\n            (Efield\n              (Ederef\n                (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _r tlong))\n          (Scall None\n            (Evar _secp256k1_i128_det (Tfunction\n                                        (Tcons\n                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                          (Tcons tlong\n                                            (Tcons tlong\n                                              (Tcons tlong\n                                                (Tcons tlong Tnil))))) tvoid\n                                        cc_default))\n            ((Eaddrof (Evar _a (Tstruct _secp256k1_uint128 noattr))\n               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n             (Etempvar _t'4 tlong) :: (Etempvar _t'5 tlong) ::\n             (Etempvar _t'6 tlong) :: (Etempvar _t'7 tlong) :: nil))))))\n  (Ssequence\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _secp256k1_i128_check_pow2 (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                             (Tcons tuint (Tcons tint Tnil)))\n                                           tint cc_default))\n        ((Eaddrof (Evar _a (Tstruct _secp256k1_uint128 noattr))\n           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n         (Etempvar _n tuint) :: (Econst_int (Int.repr 1) tint) :: nil))\n      (Sifthenelse (Etempvar _t'1 tint)\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))\n        Sskip))\n    (Ssequence\n      (Ssequence\n        (Sifthenelse (Etempvar _abs tint)\n          (Ssequence\n            (Scall (Some _t'3)\n              (Evar _secp256k1_i128_check_pow2 (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                   (Tcons tuint\n                                                     (Tcons tint Tnil))) tint\n                                                 cc_default))\n              ((Eaddrof (Evar _a (Tstruct _secp256k1_uint128 noattr))\n                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n               (Etempvar _n tuint) ::\n               (Eunop Oneg (Econst_int (Int.repr 1) tint) tint) :: nil))\n            (Sset _t'2 (Ecast (Etempvar _t'3 tint) tbool)))\n          (Sset _t'2 (Econst_int (Int.repr 0) tint)))\n        (Sifthenelse (Etempvar _t'2 tint)\n          (Sreturn (Some (Econst_int (Int.repr 1) tint)))\n          Sskip))\n      (Sreturn (Some (Econst_int (Int.repr 0) tint))))))\n|}.\n\nDefinition f_secp256k1_modinv64_normalize_62 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_sign, tlong) ::\n                (_modinfo,\n                 (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_M62, tlong) :: (_r0, tlong) :: (_r1, tlong) ::\n               (_r2, tlong) :: (_r3, tlong) :: (_r4, tlong) ::\n               (_cond_add, tlong) :: (_cond_negate, tlong) :: (_i, tint) ::\n               (_t'4, tint) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tint) :: (_t'27, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'26, tlong) ::\n               (_t'25, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'24, tlong) ::\n               (_t'23, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'22, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'21, tlong) :: (_t'20, tlong) :: (_t'19, tlong) ::\n               (_t'18, tlong) :: (_t'17, tlong) :: (_t'16, tlong) ::\n               (_t'15, tlong) :: (_t'14, tlong) :: (_t'13, tlong) ::\n               (_t'12, tlong) ::\n               (_t'11, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'10, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'9, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'7, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'6, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'5, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _M62\n    (Ecast\n      (Ebinop Oshr (Econst_long (Int64.repr (-1)) tulong)\n        (Econst_int (Int.repr 2) tint) tulong) tlong))\n  (Ssequence\n    (Sset _r0\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef\n              (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n              (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n            (tarray tlong 5)) (Econst_int (Int.repr 0) tint) (tptr tlong))\n        tlong))\n    (Ssequence\n      (Sset _r1\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n              (tarray tlong 5)) (Econst_int (Int.repr 1) tint) (tptr tlong))\n          tlong))\n      (Ssequence\n        (Sset _r2\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                  (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n              (tptr tlong)) tlong))\n        (Ssequence\n          (Sset _r3\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n                (tptr tlong)) tlong))\n          (Ssequence\n            (Sset _r4\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef\n                      (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                      (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                    (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                  (tptr tlong)) tlong))\n            (Ssequence\n              (Ssequence\n                (Sset _i (Econst_int (Int.repr 0) tint))\n                (Sloop\n                  (Ssequence\n                    (Sifthenelse (Ebinop Olt (Etempvar _i tint)\n                                   (Econst_int (Int.repr 5) tint) tint)\n                      Sskip\n                      Sbreak)\n                    (Ssequence\n                      (Sloop\n                        (Ssequence\n                          (Sset _t'26\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                  _v (tarray tlong 5)) (Etempvar _i tint)\n                                (tptr tlong)) tlong))\n                          (Sifthenelse (Eunop Onotbool\n                                         (Ebinop Oge (Etempvar _t'26 tlong)\n                                           (Eunop Oneg (Etempvar _M62 tlong)\n                                             tlong) tint) tint)\n                            (Sloop\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'27\n                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                  (Scall None\n                                    (Evar _fprintf (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __IO_FILE noattr))\n                                                       (Tcons (tptr tschar)\n                                                         Tnil)) tint\n                                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                    ((Etempvar _t'27 (tptr (Tstruct __IO_FILE noattr))) ::\n                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                     (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                     (Econst_int (Int.repr 97) tint) ::\n                                     (Evar ___stringlit_12 (tarray tschar 39)) ::\n                                     nil)))\n                                (Scall None\n                                  (Evar _abort (Tfunction Tnil tvoid\n                                                 cc_default)) nil))\n                              Sbreak)\n                            Sskip))\n                        Sbreak)\n                      (Sloop\n                        (Ssequence\n                          (Sset _t'24\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                  _v (tarray tlong 5)) (Etempvar _i tint)\n                                (tptr tlong)) tlong))\n                          (Sifthenelse (Eunop Onotbool\n                                         (Ebinop Ole (Etempvar _t'24 tlong)\n                                           (Etempvar _M62 tlong) tint) tint)\n                            (Sloop\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'25\n                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                  (Scall None\n                                    (Evar _fprintf (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __IO_FILE noattr))\n                                                       (Tcons (tptr tschar)\n                                                         Tnil)) tint\n                                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                    ((Etempvar _t'25 (tptr (Tstruct __IO_FILE noattr))) ::\n                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                     (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                     (Econst_int (Int.repr 98) tint) ::\n                                     (Evar ___stringlit_13 (tarray tschar 38)) ::\n                                     nil)))\n                                (Scall None\n                                  (Evar _abort (Tfunction Tnil tvoid\n                                                 cc_default)) nil))\n                              Sbreak)\n                            Sskip))\n                        Sbreak)))\n                  (Sset _i\n                    (Ebinop Oadd (Etempvar _i tint)\n                      (Econst_int (Int.repr 1) tint) tint))))\n              (Ssequence\n                (Sloop\n                  (Ssequence\n                    (Scall (Some _t'1)\n                      (Evar _secp256k1_modinv64_mul_cmp_62 (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                               (Tcons tint\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                   (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                             tint cc_default))\n                      ((Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                       (Econst_int (Int.repr 5) tint) ::\n                       (Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                             (Tstruct _secp256k1_modinv64_modinfo noattr))\n                           _modulus\n                           (Tstruct _secp256k1_modinv64_signed62 noattr))\n                         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                       (Eunop Oneg (Econst_int (Int.repr 2) tint) tint) ::\n                       nil))\n                    (Sifthenelse (Eunop Onotbool\n                                   (Ebinop Ogt (Etempvar _t'1 tint)\n                                     (Econst_int (Int.repr 0) tint) tint)\n                                   tint)\n                      (Sloop\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'23\n                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                            (Scall None\n                              (Evar _fprintf (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                 (Tcons (tptr tschar) Tnil))\n                                               tint\n                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                              ((Etempvar _t'23 (tptr (Tstruct __IO_FILE noattr))) ::\n                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                               (Evar ___stringlit_8 (tarray tschar 26)) ::\n                               (Econst_int (Int.repr 100) tint) ::\n                               (Evar ___stringlit_14 (tarray tschar 86)) ::\n                               nil)))\n                          (Scall None\n                            (Evar _abort (Tfunction Tnil tvoid cc_default))\n                            nil))\n                        Sbreak)\n                      Sskip))\n                  Sbreak)\n                (Ssequence\n                  (Sloop\n                    (Ssequence\n                      (Scall (Some _t'2)\n                        (Evar _secp256k1_modinv64_mul_cmp_62 (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                 (Tcons tint\n                                                                   (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                               tint\n                                                               cc_default))\n                        ((Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                         (Econst_int (Int.repr 5) tint) ::\n                         (Eaddrof\n                           (Efield\n                             (Ederef\n                               (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                               (Tstruct _secp256k1_modinv64_modinfo noattr))\n                             _modulus\n                             (Tstruct _secp256k1_modinv64_signed62 noattr))\n                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                         (Econst_int (Int.repr 1) tint) :: nil))\n                      (Sifthenelse (Eunop Onotbool\n                                     (Ebinop Olt (Etempvar _t'2 tint)\n                                       (Econst_int (Int.repr 0) tint) tint)\n                                     tint)\n                        (Sloop\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'22\n                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                              (Scall None\n                                (Evar _fprintf (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                   (Tcons (tptr tschar) Tnil))\n                                                 tint\n                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                ((Etempvar _t'22 (tptr (Tstruct __IO_FILE noattr))) ::\n                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                 (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                 (Econst_int (Int.repr 101) tint) ::\n                                 (Evar ___stringlit_15 (tarray tschar 85)) ::\n                                 nil)))\n                            (Scall None\n                              (Evar _abort (Tfunction Tnil tvoid cc_default))\n                              nil))\n                          Sbreak)\n                        Sskip))\n                    Sbreak)\n                  (Ssequence\n                    (Sset _cond_add\n                      (Ebinop Oshr (Etempvar _r4 tlong)\n                        (Econst_int (Int.repr 63) tint) tlong))\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'21\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                  _modulus\n                                  (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                _v (tarray tlong 5))\n                              (Econst_int (Int.repr 0) tint) (tptr tlong))\n                            tlong))\n                        (Sset _r0\n                          (Ebinop Oadd (Etempvar _r0 tlong)\n                            (Ebinop Oand (Etempvar _t'21 tlong)\n                              (Etempvar _cond_add tlong) tlong) tlong)))\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'20\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                      (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                    _modulus\n                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                  _v (tarray tlong 5))\n                                (Econst_int (Int.repr 1) tint) (tptr tlong))\n                              tlong))\n                          (Sset _r1\n                            (Ebinop Oadd (Etempvar _r1 tlong)\n                              (Ebinop Oand (Etempvar _t'20 tlong)\n                                (Etempvar _cond_add tlong) tlong) tlong)))\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'19\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                        (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                      _modulus\n                                      (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                    _v (tarray tlong 5))\n                                  (Econst_int (Int.repr 2) tint)\n                                  (tptr tlong)) tlong))\n                            (Sset _r2\n                              (Ebinop Oadd (Etempvar _r2 tlong)\n                                (Ebinop Oand (Etempvar _t'19 tlong)\n                                  (Etempvar _cond_add tlong) tlong) tlong)))\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'18\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                          (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                        _modulus\n                                        (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                      _v (tarray tlong 5))\n                                    (Econst_int (Int.repr 3) tint)\n                                    (tptr tlong)) tlong))\n                              (Sset _r3\n                                (Ebinop Oadd (Etempvar _r3 tlong)\n                                  (Ebinop Oand (Etempvar _t'18 tlong)\n                                    (Etempvar _cond_add tlong) tlong) tlong)))\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'17\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Efield\n                                          (Ederef\n                                            (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                            (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                          _modulus\n                                          (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                        _v (tarray tlong 5))\n                                      (Econst_int (Int.repr 4) tint)\n                                      (tptr tlong)) tlong))\n                                (Sset _r4\n                                  (Ebinop Oadd (Etempvar _r4 tlong)\n                                    (Ebinop Oand (Etempvar _t'17 tlong)\n                                      (Etempvar _cond_add tlong) tlong)\n                                    tlong)))\n                              (Ssequence\n                                (Sset _cond_negate\n                                  (Ebinop Oshr (Etempvar _sign tlong)\n                                    (Econst_int (Int.repr 63) tint) tlong))\n                                (Ssequence\n                                  (Sset _r0\n                                    (Ebinop Osub\n                                      (Ebinop Oxor (Etempvar _r0 tlong)\n                                        (Etempvar _cond_negate tlong) tlong)\n                                      (Etempvar _cond_negate tlong) tlong))\n                                  (Ssequence\n                                    (Sset _r1\n                                      (Ebinop Osub\n                                        (Ebinop Oxor (Etempvar _r1 tlong)\n                                          (Etempvar _cond_negate tlong)\n                                          tlong)\n                                        (Etempvar _cond_negate tlong) tlong))\n                                    (Ssequence\n                                      (Sset _r2\n                                        (Ebinop Osub\n                                          (Ebinop Oxor (Etempvar _r2 tlong)\n                                            (Etempvar _cond_negate tlong)\n                                            tlong)\n                                          (Etempvar _cond_negate tlong)\n                                          tlong))\n                                      (Ssequence\n                                        (Sset _r3\n                                          (Ebinop Osub\n                                            (Ebinop Oxor (Etempvar _r3 tlong)\n                                              (Etempvar _cond_negate tlong)\n                                              tlong)\n                                            (Etempvar _cond_negate tlong)\n                                            tlong))\n                                        (Ssequence\n                                          (Sset _r4\n                                            (Ebinop Osub\n                                              (Ebinop Oxor\n                                                (Etempvar _r4 tlong)\n                                                (Etempvar _cond_negate tlong)\n                                                tlong)\n                                              (Etempvar _cond_negate tlong)\n                                              tlong))\n                                          (Ssequence\n                                            (Sset _r1\n                                              (Ebinop Oadd\n                                                (Etempvar _r1 tlong)\n                                                (Ebinop Oshr\n                                                  (Etempvar _r0 tlong)\n                                                  (Econst_int (Int.repr 62) tint)\n                                                  tlong) tlong))\n                                            (Ssequence\n                                              (Sset _r0\n                                                (Ebinop Oand\n                                                  (Etempvar _r0 tlong)\n                                                  (Etempvar _M62 tlong)\n                                                  tlong))\n                                              (Ssequence\n                                                (Sset _r2\n                                                  (Ebinop Oadd\n                                                    (Etempvar _r2 tlong)\n                                                    (Ebinop Oshr\n                                                      (Etempvar _r1 tlong)\n                                                      (Econst_int (Int.repr 62) tint)\n                                                      tlong) tlong))\n                                                (Ssequence\n                                                  (Sset _r1\n                                                    (Ebinop Oand\n                                                      (Etempvar _r1 tlong)\n                                                      (Etempvar _M62 tlong)\n                                                      tlong))\n                                                  (Ssequence\n                                                    (Sset _r3\n                                                      (Ebinop Oadd\n                                                        (Etempvar _r3 tlong)\n                                                        (Ebinop Oshr\n                                                          (Etempvar _r2 tlong)\n                                                          (Econst_int (Int.repr 62) tint)\n                                                          tlong) tlong))\n                                                    (Ssequence\n                                                      (Sset _r2\n                                                        (Ebinop Oand\n                                                          (Etempvar _r2 tlong)\n                                                          (Etempvar _M62 tlong)\n                                                          tlong))\n                                                      (Ssequence\n                                                        (Sset _r4\n                                                          (Ebinop Oadd\n                                                            (Etempvar _r4 tlong)\n                                                            (Ebinop Oshr\n                                                              (Etempvar _r3 tlong)\n                                                              (Econst_int (Int.repr 62) tint)\n                                                              tlong) tlong))\n                                                        (Ssequence\n                                                          (Sset _r3\n                                                            (Ebinop Oand\n                                                              (Etempvar _r3 tlong)\n                                                              (Etempvar _M62 tlong)\n                                                              tlong))\n                                                          (Ssequence\n                                                            (Sset _cond_add\n                                                              (Ebinop Oshr\n                                                                (Etempvar _r4 tlong)\n                                                                (Econst_int (Int.repr 63) tint)\n                                                                tlong))\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'16\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                (Sset _r0\n                                                                  (Ebinop Oadd\n                                                                    (Etempvar _r0 tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'16 tlong)\n                                                                    (Etempvar _cond_add tlong)\n                                                                    tlong)\n                                                                    tlong)))\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Sset _t'15\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                  (Sset _r1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r1 tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'15 tlong)\n                                                                    (Etempvar _cond_add tlong)\n                                                                    tlong)\n                                                                    tlong)))\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Sset _t'14\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sset _r2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r2 tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'14 tlong)\n                                                                    (Etempvar _cond_add tlong)\n                                                                    tlong)\n                                                                    tlong)))\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'13\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sset _r3\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r3 tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'13 tlong)\n                                                                    (Etempvar _cond_add tlong)\n                                                                    tlong)\n                                                                    tlong)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'12\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sset _r4\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r4 tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'12 tlong)\n                                                                    (Etempvar _cond_add tlong)\n                                                                    tlong)\n                                                                    tlong)))\n                                                                    (Ssequence\n                                                                    (Sset _r1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r1 tlong)\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r0 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _r0\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _r0 tlong)\n                                                                    (Etempvar _M62 tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _r2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r2 tlong)\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r1 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _r1\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _r1 tlong)\n                                                                    (Etempvar _M62 tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _r3\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r3 tlong)\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r2 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _r2\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _r2 tlong)\n                                                                    (Etempvar _M62 tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _r4\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r4 tlong)\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r3 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _r3\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _r3 tlong)\n                                                                    (Etempvar _M62 tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Etempvar _r0 tlong))\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Etempvar _r1 tlong))\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Etempvar _r2 tlong))\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Etempvar _r3 tlong))\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Etempvar _r4 tlong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r0 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'11\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'11 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 148) tint) ::\n                                                                    (Evar ___stringlit_16 (tarray tschar 37)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r1 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'10\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'10 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 149) tint) ::\n                                                                    (Evar ___stringlit_17 (tarray tschar 37)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r2 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'9\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'9 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 150) tint) ::\n                                                                    (Evar ___stringlit_18 (tarray tschar 37)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r3 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'8\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 151) tint) ::\n                                                                    (Evar ___stringlit_19 (tarray tschar 37)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _r4 tlong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'7\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'7 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 152) tint) ::\n                                                                    (Evar ___stringlit_20 (tarray tschar 37)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'3)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 5) tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 0) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oge\n                                                                    (Etempvar _t'3 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'6\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 153) tint) ::\n                                                                    (Evar ___stringlit_21 (tarray tschar 86)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'4)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 5) tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 1) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _t'4 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'5\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 154) tint) ::\n                                                                    (Evar ___stringlit_15 (tarray tschar 85)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)))))))))))))))))))))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_modinv64_divsteps_62_var := {|\n  fn_return := tlong;\n  fn_callconv := cc_default;\n  fn_params := ((_eta, tlong) :: (_f0, tulong) :: (_g0, tulong) ::\n                (_t, (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                nil);\n  fn_vars := nil;\n  fn_temps := ((_u, tulong) :: (_v, tulong) :: (_q, tulong) ::\n               (_r, tulong) :: (_f, tulong) :: (_g, tulong) ::\n               (_m, tulong) :: (_w, tuint) :: (_i, tint) :: (_limit, tint) ::\n               (_zeros, tint) :: (_tmp, tulong) :: (_t'7, tint) ::\n               (_t'6, tint) :: (_t'5, tint) :: (_t'4, tint) ::\n               (_t'3, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'16, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'15, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'14, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'13, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'12, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'11, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'10, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'9, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'8, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _u (Ecast (Econst_int (Int.repr 1) tint) tulong))\n  (Ssequence\n    (Sset _v (Ecast (Econst_int (Int.repr 0) tint) tulong))\n    (Ssequence\n      (Sset _q (Ecast (Econst_int (Int.repr 0) tint) tulong))\n      (Ssequence\n        (Sset _r (Ecast (Econst_int (Int.repr 1) tint) tulong))\n        (Ssequence\n          (Sset _f (Etempvar _f0 tulong))\n          (Ssequence\n            (Sset _g (Etempvar _g0 tulong))\n            (Ssequence\n              (Sset _i (Econst_int (Int.repr 62) tint))\n              (Ssequence\n                (Sloop\n                  (Ssequence\n                    Sskip\n                    (Ssequence\n                      (Ssequence\n                        (Scall (Some _t'1)\n                          (Evar _secp256k1_ctz64_var (Tfunction\n                                                       (Tcons tulong Tnil)\n                                                       tint cc_default))\n                          ((Ebinop Oor (Etempvar _g tulong)\n                             (Ebinop Oshl\n                               (Econst_long (Int64.repr (-1)) tulong)\n                               (Etempvar _i tint) tulong) tulong) :: nil))\n                        (Sset _zeros (Etempvar _t'1 tint)))\n                      (Ssequence\n                        (Sset _g\n                          (Ebinop Oshr (Etempvar _g tulong)\n                            (Etempvar _zeros tint) tulong))\n                        (Ssequence\n                          (Sset _u\n                            (Ebinop Oshl (Etempvar _u tulong)\n                              (Etempvar _zeros tint) tulong))\n                          (Ssequence\n                            (Sset _v\n                              (Ebinop Oshl (Etempvar _v tulong)\n                                (Etempvar _zeros tint) tulong))\n                            (Ssequence\n                              (Sset _eta\n                                (Ebinop Osub (Etempvar _eta tlong)\n                                  (Etempvar _zeros tint) tlong))\n                              (Ssequence\n                                (Sset _i\n                                  (Ebinop Osub (Etempvar _i tint)\n                                    (Etempvar _zeros tint) tint))\n                                (Ssequence\n                                  (Sifthenelse (Ebinop Oeq (Etempvar _i tint)\n                                                 (Econst_int (Int.repr 0) tint)\n                                                 tint)\n                                    Sbreak\n                                    Sskip)\n                                  (Ssequence\n                                    (Sloop\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Ebinop Oeq\n                                                       (Ebinop Oand\n                                                         (Etempvar _f tulong)\n                                                         (Econst_int (Int.repr 1) tint)\n                                                         tulong)\n                                                       (Econst_int (Int.repr 1) tint)\n                                                       tint) tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'16\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'16 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                 (Econst_int (Int.repr 258) tint) ::\n                                                 (Evar ___stringlit_22 (tarray tschar 36)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip)\n                                      Sbreak)\n                                    (Ssequence\n                                      (Sloop\n                                        (Sifthenelse (Eunop Onotbool\n                                                       (Ebinop Oeq\n                                                         (Ebinop Oand\n                                                           (Etempvar _g tulong)\n                                                           (Econst_int (Int.repr 1) tint)\n                                                           tulong)\n                                                         (Econst_int (Int.repr 1) tint)\n                                                         tint) tint)\n                                          (Sloop\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'15\n                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                (Scall None\n                                                  (Evar _fprintf (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                   tint\n                                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                  ((Etempvar _t'15 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                   (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                   (Econst_int (Int.repr 259) tint) ::\n                                                   (Evar ___stringlit_23 (tarray tschar 36)) ::\n                                                   nil)))\n                                              (Scall None\n                                                (Evar _abort (Tfunction Tnil\n                                                               tvoid\n                                                               cc_default))\n                                                nil))\n                                            Sbreak)\n                                          Sskip)\n                                        Sbreak)\n                                      (Ssequence\n                                        (Sloop\n                                          (Sifthenelse (Eunop Onotbool\n                                                         (Ebinop Oeq\n                                                           (Ebinop Oadd\n                                                             (Ebinop Omul\n                                                               (Etempvar _u tulong)\n                                                               (Etempvar _f0 tulong)\n                                                               tulong)\n                                                             (Ebinop Omul\n                                                               (Etempvar _v tulong)\n                                                               (Etempvar _g0 tulong)\n                                                               tulong)\n                                                             tulong)\n                                                           (Ebinop Oshl\n                                                             (Etempvar _f tulong)\n                                                             (Ebinop Osub\n                                                               (Econst_int (Int.repr 62) tint)\n                                                               (Etempvar _i tint)\n                                                               tint) tulong)\n                                                           tint) tint)\n                                            (Sloop\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sset _t'14\n                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                  (Scall None\n                                                    (Evar _fprintf (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                    ((Etempvar _t'14 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                     (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                     (Econst_int (Int.repr 260) tint) ::\n                                                     (Evar ___stringlit_24 (tarray tschar 58)) ::\n                                                     nil)))\n                                                (Scall None\n                                                  (Evar _abort (Tfunction\n                                                                 Tnil tvoid\n                                                                 cc_default))\n                                                  nil))\n                                              Sbreak)\n                                            Sskip)\n                                          Sbreak)\n                                        (Ssequence\n                                          (Sloop\n                                            (Sifthenelse (Eunop Onotbool\n                                                           (Ebinop Oeq\n                                                             (Ebinop Oadd\n                                                               (Ebinop Omul\n                                                                 (Etempvar _q tulong)\n                                                                 (Etempvar _f0 tulong)\n                                                                 tulong)\n                                                               (Ebinop Omul\n                                                                 (Etempvar _r tulong)\n                                                                 (Etempvar _g0 tulong)\n                                                                 tulong)\n                                                               tulong)\n                                                             (Ebinop Oshl\n                                                               (Etempvar _g tulong)\n                                                               (Ebinop Osub\n                                                                 (Econst_int (Int.repr 62) tint)\n                                                                 (Etempvar _i tint)\n                                                                 tint)\n                                                               tulong) tint)\n                                                           tint)\n                                              (Sloop\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'13\n                                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                    (Scall None\n                                                      (Evar _fprintf \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __IO_FILE noattr))\n                                                          (Tcons\n                                                            (tptr tschar)\n                                                            Tnil)) tint\n                                                        {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                      ((Etempvar _t'13 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                       (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                       (Econst_int (Int.repr 261) tint) ::\n                                                       (Evar ___stringlit_25 (tarray tschar 58)) ::\n                                                       nil)))\n                                                  (Scall None\n                                                    (Evar _abort (Tfunction\n                                                                   Tnil tvoid\n                                                                   cc_default))\n                                                    nil))\n                                                Sbreak)\n                                              Sskip)\n                                            Sbreak)\n                                          (Ssequence\n                                            (Sloop\n                                              (Ssequence\n                                                (Sifthenelse (Ebinop Oge\n                                                               (Etempvar _eta tlong)\n                                                               (Eunop Oneg\n                                                                 (Econst_int (Int.repr 745) tint)\n                                                                 tint) tint)\n                                                  (Sset _t'2\n                                                    (Ecast\n                                                      (Ebinop Ole\n                                                        (Etempvar _eta tlong)\n                                                        (Econst_int (Int.repr 745) tint)\n                                                        tint) tbool))\n                                                  (Sset _t'2\n                                                    (Econst_int (Int.repr 0) tint)))\n                                                (Sifthenelse (Eunop Onotbool\n                                                               (Etempvar _t'2 tint)\n                                                               tint)\n                                                  (Sloop\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Sset _t'12\n                                                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                        (Scall None\n                                                          (Evar _fprintf \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __IO_FILE noattr))\n                                                              (Tcons\n                                                                (tptr tschar)\n                                                                Tnil)) tint\n                                                            {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                          ((Etempvar _t'12 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                           (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                           (Econst_int (Int.repr 263) tint) ::\n                                                           (Evar ___stringlit_26 (tarray tschar 49)) ::\n                                                           nil)))\n                                                      (Scall None\n                                                        (Evar _abort \n                                                        (Tfunction Tnil tvoid\n                                                          cc_default)) nil))\n                                                    Sbreak)\n                                                  Sskip))\n                                              Sbreak)\n                                            (Ssequence\n                                              (Sifthenelse (Ebinop Olt\n                                                             (Etempvar _eta tlong)\n                                                             (Econst_int (Int.repr 0) tint)\n                                                             tint)\n                                                (Ssequence\n                                                  (Sset _eta\n                                                    (Eunop Oneg\n                                                      (Etempvar _eta tlong)\n                                                      tlong))\n                                                  (Ssequence\n                                                    (Sset _tmp\n                                                      (Etempvar _f tulong))\n                                                    (Ssequence\n                                                      (Sset _f\n                                                        (Etempvar _g tulong))\n                                                      (Ssequence\n                                                        (Sset _g\n                                                          (Eunop Oneg\n                                                            (Etempvar _tmp tulong)\n                                                            tulong))\n                                                        (Ssequence\n                                                          (Sset _tmp\n                                                            (Etempvar _u tulong))\n                                                          (Ssequence\n                                                            (Sset _u\n                                                              (Etempvar _q tulong))\n                                                            (Ssequence\n                                                              (Sset _q\n                                                                (Eunop Oneg\n                                                                  (Etempvar _tmp tulong)\n                                                                  tulong))\n                                                              (Ssequence\n                                                                (Sset _tmp\n                                                                  (Etempvar _v tulong))\n                                                                (Ssequence\n                                                                  (Sset _v\n                                                                    (Etempvar _r tulong))\n                                                                  (Ssequence\n                                                                    (Sset _r\n                                                                    (Eunop Oneg\n                                                                    (Etempvar _tmp tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Ogt\n                                                                    (Ebinop Oadd\n                                                                    (Ecast\n                                                                    (Etempvar _eta tlong)\n                                                                    tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint)\n                                                                    (Etempvar _i tint)\n                                                                    tint)\n                                                                    (Sset _t'3\n                                                                    (Ecast\n                                                                    (Etempvar _i tint)\n                                                                    tint))\n                                                                    (Sset _t'3\n                                                                    (Ecast\n                                                                    (Ebinop Oadd\n                                                                    (Ecast\n                                                                    (Etempvar _eta tlong)\n                                                                    tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint)\n                                                                    tint)))\n                                                                    (Sset _limit\n                                                                    (Etempvar _t'3 tint)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Ogt\n                                                                    (Etempvar _limit tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    (Sset _t'4\n                                                                    (Ecast\n                                                                    (Ebinop Ole\n                                                                    (Etempvar _limit tint)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tint)\n                                                                    tbool))\n                                                                    (Sset _t'4\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'4 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'11\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'11 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 275) tint) ::\n                                                                    (Evar ___stringlit_27 (tarray tschar 48)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sset _m\n                                                                    (Ebinop Oand\n                                                                    (Ebinop Oshr\n                                                                    (Econst_long (Int64.repr (-1)) tulong)\n                                                                    (Ebinop Osub\n                                                                    (Econst_int (Int.repr 64) tint)\n                                                                    (Etempvar _limit tint)\n                                                                    tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 63) tuint)\n                                                                    tulong))\n                                                                    (Sset _w\n                                                                    (Ecast\n                                                                    (Ebinop Oand\n                                                                    (Ebinop Omul\n                                                                    (Ebinop Omul\n                                                                    (Etempvar _f tulong)\n                                                                    (Etempvar _g tulong)\n                                                                    tulong)\n                                                                    (Ebinop Osub\n                                                                    (Ebinop Omul\n                                                                    (Etempvar _f tulong)\n                                                                    (Etempvar _f tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tulong)\n                                                                    tulong)\n                                                                    (Etempvar _m tulong)\n                                                                    tulong)\n                                                                    tuint)))))))))))))))\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sifthenelse (Ebinop Ogt\n                                                                   (Ebinop Oadd\n                                                                    (Ecast\n                                                                    (Etempvar _eta tlong)\n                                                                    tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint)\n                                                                   (Etempvar _i tint)\n                                                                   tint)\n                                                      (Sset _t'5\n                                                        (Ecast\n                                                          (Etempvar _i tint)\n                                                          tint))\n                                                      (Sset _t'5\n                                                        (Ecast\n                                                          (Ebinop Oadd\n                                                            (Ecast\n                                                              (Etempvar _eta tlong)\n                                                              tint)\n                                                            (Econst_int (Int.repr 1) tint)\n                                                            tint) tint)))\n                                                    (Sset _limit\n                                                      (Etempvar _t'5 tint)))\n                                                  (Ssequence\n                                                    (Sloop\n                                                      (Ssequence\n                                                        (Sifthenelse \n                                                          (Ebinop Ogt\n                                                            (Etempvar _limit tint)\n                                                            (Econst_int (Int.repr 0) tint)\n                                                            tint)\n                                                          (Sset _t'6\n                                                            (Ecast\n                                                              (Ebinop Ole\n                                                                (Etempvar _limit tint)\n                                                                (Econst_int (Int.repr 62) tint)\n                                                                tint) tbool))\n                                                          (Sset _t'6\n                                                            (Econst_int (Int.repr 0) tint)))\n                                                        (Sifthenelse \n                                                          (Eunop Onotbool\n                                                            (Etempvar _t'6 tint)\n                                                            tint)\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'10\n                                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                (Scall None\n                                                                  (Evar _fprintf \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                  ((Etempvar _t'10 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                   (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                   (Econst_int (Int.repr 285) tint) ::\n                                                                   (Evar ___stringlit_27 (tarray tschar 48)) ::\n                                                                   nil)))\n                                                              (Scall None\n                                                                (Evar _abort \n                                                                (Tfunction\n                                                                  Tnil tvoid\n                                                                  cc_default))\n                                                                nil))\n                                                            Sbreak)\n                                                          Sskip))\n                                                      Sbreak)\n                                                    (Ssequence\n                                                      (Sset _m\n                                                        (Ebinop Oand\n                                                          (Ebinop Oshr\n                                                            (Econst_long (Int64.repr (-1)) tulong)\n                                                            (Ebinop Osub\n                                                              (Econst_int (Int.repr 64) tint)\n                                                              (Etempvar _limit tint)\n                                                              tint) tulong)\n                                                          (Econst_int (Int.repr 15) tuint)\n                                                          tulong))\n                                                      (Ssequence\n                                                        (Sset _w\n                                                          (Ecast\n                                                            (Ebinop Oadd\n                                                              (Etempvar _f tulong)\n                                                              (Ebinop Oshl\n                                                                (Ebinop Oand\n                                                                  (Ebinop Oadd\n                                                                    (Etempvar _f tulong)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tulong)\n                                                                  (Econst_int (Int.repr 4) tint)\n                                                                  tulong)\n                                                                (Econst_int (Int.repr 1) tint)\n                                                                tulong)\n                                                              tulong) tuint))\n                                                        (Sset _w\n                                                          (Ecast\n                                                            (Ebinop Oand\n                                                              (Ebinop Omul\n                                                                (Eunop Oneg\n                                                                  (Etempvar _w tuint)\n                                                                  tuint)\n                                                                (Etempvar _g tulong)\n                                                                tulong)\n                                                              (Etempvar _m tulong)\n                                                              tulong) tuint)))))))\n                                              (Ssequence\n                                                (Sset _g\n                                                  (Ebinop Oadd\n                                                    (Etempvar _g tulong)\n                                                    (Ebinop Omul\n                                                      (Etempvar _f tulong)\n                                                      (Etempvar _w tuint)\n                                                      tulong) tulong))\n                                                (Ssequence\n                                                  (Sset _q\n                                                    (Ebinop Oadd\n                                                      (Etempvar _q tulong)\n                                                      (Ebinop Omul\n                                                        (Etempvar _u tulong)\n                                                        (Etempvar _w tuint)\n                                                        tulong) tulong))\n                                                  (Ssequence\n                                                    (Sset _r\n                                                      (Ebinop Oadd\n                                                        (Etempvar _r tulong)\n                                                        (Ebinop Omul\n                                                          (Etempvar _v tulong)\n                                                          (Etempvar _w tuint)\n                                                          tulong) tulong))\n                                                    (Sloop\n                                                      (Sifthenelse (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _g tulong)\n                                                                    (Etempvar _m tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                        (Sloop\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Sset _t'9\n                                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                              (Scall None\n                                                                (Evar _fprintf \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                  tint\n                                                                  {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                ((Etempvar _t'9 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                 (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                 (Econst_int (Int.repr 296) tint) ::\n                                                                 (Evar ___stringlit_28 (tarray tschar 36)) ::\n                                                                 nil)))\n                                                            (Scall None\n                                                              (Evar _abort \n                                                              (Tfunction Tnil\n                                                                tvoid\n                                                                cc_default))\n                                                              nil))\n                                                          Sbreak)\n                                                        Sskip)\n                                                      Sbreak))))))))))))))))))\n                  Sskip)\n                (Ssequence\n                  (Sassign\n                    (Efield\n                      (Ederef\n                        (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                        (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _u\n                      tlong) (Ecast (Etempvar _u tulong) tlong))\n                  (Ssequence\n                    (Sassign\n                      (Efield\n                        (Ederef\n                          (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                          (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _v\n                        tlong) (Ecast (Etempvar _v tulong) tlong))\n                    (Ssequence\n                      (Sassign\n                        (Efield\n                          (Ederef\n                            (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                            (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _q\n                          tlong) (Ecast (Etempvar _q tulong) tlong))\n                      (Ssequence\n                        (Sassign\n                          (Efield\n                            (Ederef\n                              (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                              (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                            _r tlong) (Ecast (Etempvar _r tulong) tlong))\n                        (Ssequence\n                          (Sloop\n                            (Ssequence\n                              (Scall (Some _t'7)\n                                (Evar _secp256k1_modinv64_det_check_pow2 \n                                (Tfunction\n                                  (Tcons\n                                    (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                    (Tcons tuint (Tcons tint Tnil))) tint\n                                  cc_default))\n                                ((Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                                 (Econst_int (Int.repr 62) tint) ::\n                                 (Econst_int (Int.repr 0) tint) :: nil))\n                              (Sifthenelse (Eunop Onotbool\n                                             (Etempvar _t'7 tint) tint)\n                                (Sloop\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _t'8\n                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                      (Scall None\n                                        (Evar _fprintf (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __IO_FILE noattr))\n                                                           (Tcons\n                                                             (tptr tschar)\n                                                             Tnil)) tint\n                                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                        ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                         (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                         (Econst_int (Int.repr 308) tint) ::\n                                         (Evar ___stringlit_29 (tarray tschar 67)) ::\n                                         nil)))\n                                    (Scall None\n                                      (Evar _abort (Tfunction Tnil tvoid\n                                                     cc_default)) nil))\n                                  Sbreak)\n                                Sskip))\n                            Sbreak)\n                          (Sreturn (Some (Etempvar _eta tlong))))))))))))))))\n|}.\n\nDefinition f_secp256k1_modinv64_update_de_62 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_d, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_e, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_t, (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                (_modinfo,\n                 (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))) :: nil);\n  fn_vars := ((_cd, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_ce, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_M62, tulong) :: (_d0, tlong) :: (_d1, tlong) ::\n               (_d2, tlong) :: (_d3, tlong) :: (_d4, tlong) ::\n               (_e0, tlong) :: (_e1, tlong) :: (_e2, tlong) ::\n               (_e3, tlong) :: (_e4, tlong) :: (_u, tlong) :: (_v, tlong) ::\n               (_q, tlong) :: (_r, tlong) :: (_md, tlong) :: (_me, tlong) ::\n               (_sd, tlong) :: (_se, tlong) :: (_t'26, tint) ::\n               (_t'25, tint) :: (_t'24, tint) :: (_t'23, tint) ::\n               (_t'22, tlong) :: (_t'21, tlong) :: (_t'20, tulong) ::\n               (_t'19, tulong) :: (_t'18, tulong) :: (_t'17, tulong) ::\n               (_t'16, tulong) :: (_t'15, tulong) :: (_t'14, tulong) ::\n               (_t'13, tulong) :: (_t'12, tulong) :: (_t'11, tulong) ::\n               (_t'10, tulong) :: (_t'9, tulong) :: (_t'8, tlong) ::\n               (_t'7, tlong) :: (_t'6, tlong) :: (_t'5, tlong) ::\n               (_t'4, tint) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tint) :: (_t'53, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'52, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'51, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'50, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'49, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'48, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'47, tulong) :: (_t'46, tulong) :: (_t'45, tlong) ::\n               (_t'44, tlong) ::\n               (_t'43, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'42, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'41, tlong) :: (_t'40, tlong) :: (_t'39, tlong) ::\n               (_t'38, tlong) :: (_t'37, tlong) :: (_t'36, tlong) ::\n               (_t'35, tlong) :: (_t'34, tlong) :: (_t'33, tlong) ::\n               (_t'32, tlong) :: (_t'31, tlong) ::\n               (_t'30, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'29, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'28, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'27, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _M62\n    (Ebinop Oshr (Econst_long (Int64.repr (-1)) tulong)\n      (Econst_int (Int.repr 2) tint) tulong))\n  (Ssequence\n    (Sset _d0\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef\n              (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n              (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n            (tarray tlong 5)) (Econst_int (Int.repr 0) tint) (tptr tlong))\n        tlong))\n    (Ssequence\n      (Sset _d1\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef\n                (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n              (tarray tlong 5)) (Econst_int (Int.repr 1) tint) (tptr tlong))\n          tlong))\n      (Ssequence\n        (Sset _d2\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef\n                  (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                  (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n              (tptr tlong)) tlong))\n        (Ssequence\n          (Sset _d3\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n                (tptr tlong)) tlong))\n          (Ssequence\n            (Sset _d4\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef\n                      (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                      (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                    (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                  (tptr tlong)) tlong))\n            (Ssequence\n              (Sset _e0\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef\n                        (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                        (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                      (tarray tlong 5)) (Econst_int (Int.repr 0) tint)\n                    (tptr tlong)) tlong))\n              (Ssequence\n                (Sset _e1\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef\n                          (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                          (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                        (tarray tlong 5)) (Econst_int (Int.repr 1) tint)\n                      (tptr tlong)) tlong))\n                (Ssequence\n                  (Sset _e2\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                            (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                          (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n                        (tptr tlong)) tlong))\n                  (Ssequence\n                    (Sset _e3\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                              (Tstruct _secp256k1_modinv64_signed62 noattr))\n                            _v (tarray tlong 5))\n                          (Econst_int (Int.repr 3) tint) (tptr tlong)) tlong))\n                    (Ssequence\n                      (Sset _e4\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                (Tstruct _secp256k1_modinv64_signed62 noattr))\n                              _v (tarray tlong 5))\n                            (Econst_int (Int.repr 4) tint) (tptr tlong))\n                          tlong))\n                      (Ssequence\n                        (Sset _u\n                          (Efield\n                            (Ederef\n                              (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                              (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                            _u tlong))\n                        (Ssequence\n                          (Sset _v\n                            (Efield\n                              (Ederef\n                                (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                                (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                              _v tlong))\n                          (Ssequence\n                            (Sset _q\n                              (Efield\n                                (Ederef\n                                  (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                                  (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                _q tlong))\n                            (Ssequence\n                              (Sset _r\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                                    (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                  _r tlong))\n                              (Ssequence\n                                (Sloop\n                                  (Ssequence\n                                    (Scall (Some _t'1)\n                                      (Evar _secp256k1_modinv64_mul_cmp_62 \n                                      (Tfunction\n                                        (Tcons\n                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                          (Tcons tint\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              (Tcons tlong Tnil)))) tint\n                                        cc_default))\n                                      ((Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                       (Econst_int (Int.repr 5) tint) ::\n                                       (Eaddrof\n                                         (Efield\n                                           (Ederef\n                                             (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                             (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                           _modulus\n                                           (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                       (Eunop Oneg\n                                         (Econst_int (Int.repr 2) tint) tint) ::\n                                       nil))\n                                    (Sifthenelse (Eunop Onotbool\n                                                   (Ebinop Ogt\n                                                     (Etempvar _t'1 tint)\n                                                     (Econst_int (Int.repr 0) tint)\n                                                     tint) tint)\n                                      (Sloop\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'53\n                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                            (Scall None\n                                              (Evar _fprintf (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                                 (Tcons\n                                                                   (tptr tschar)\n                                                                   Tnil))\n                                                               tint\n                                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                              ((Etempvar _t'53 (tptr (Tstruct __IO_FILE noattr))) ::\n                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                               (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                               (Econst_int (Int.repr 422) tint) ::\n                                               (Evar ___stringlit_30 (tarray tschar 86)) ::\n                                               nil)))\n                                          (Scall None\n                                            (Evar _abort (Tfunction Tnil\n                                                           tvoid cc_default))\n                                            nil))\n                                        Sbreak)\n                                      Sskip))\n                                  Sbreak)\n                                (Ssequence\n                                  (Sloop\n                                    (Ssequence\n                                      (Scall (Some _t'2)\n                                        (Evar _secp256k1_modinv64_mul_cmp_62 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                            (Tcons tint\n                                              (Tcons\n                                                (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                (Tcons tlong Tnil)))) tint\n                                          cc_default))\n                                        ((Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                         (Econst_int (Int.repr 5) tint) ::\n                                         (Eaddrof\n                                           (Efield\n                                             (Ederef\n                                               (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                               (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                             _modulus\n                                             (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                         (Econst_int (Int.repr 1) tint) ::\n                                         nil))\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Ebinop Olt\n                                                       (Etempvar _t'2 tint)\n                                                       (Econst_int (Int.repr 0) tint)\n                                                       tint) tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'52\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'52 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                 (Econst_int (Int.repr 423) tint) ::\n                                                 (Evar ___stringlit_31 (tarray tschar 85)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip))\n                                    Sbreak)\n                                  (Ssequence\n                                    (Sloop\n                                      (Ssequence\n                                        (Scall (Some _t'3)\n                                          (Evar _secp256k1_modinv64_mul_cmp_62 \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              (Tcons tint\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                  (Tcons tlong Tnil)))) tint\n                                            cc_default))\n                                          ((Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                           (Econst_int (Int.repr 5) tint) ::\n                                           (Eaddrof\n                                             (Efield\n                                               (Ederef\n                                                 (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                 (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                               _modulus\n                                               (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                           (Eunop Oneg\n                                             (Econst_int (Int.repr 2) tint)\n                                             tint) :: nil))\n                                        (Sifthenelse (Eunop Onotbool\n                                                       (Ebinop Ogt\n                                                         (Etempvar _t'3 tint)\n                                                         (Econst_int (Int.repr 0) tint)\n                                                         tint) tint)\n                                          (Sloop\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'51\n                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                (Scall None\n                                                  (Evar _fprintf (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                   tint\n                                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                  ((Etempvar _t'51 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                   (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                   (Econst_int (Int.repr 424) tint) ::\n                                                   (Evar ___stringlit_32 (tarray tschar 86)) ::\n                                                   nil)))\n                                              (Scall None\n                                                (Evar _abort (Tfunction Tnil\n                                                               tvoid\n                                                               cc_default))\n                                                nil))\n                                            Sbreak)\n                                          Sskip))\n                                      Sbreak)\n                                    (Ssequence\n                                      (Sloop\n                                        (Ssequence\n                                          (Scall (Some _t'4)\n                                            (Evar _secp256k1_modinv64_mul_cmp_62 \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                (Tcons tint\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                    (Tcons tlong Tnil))))\n                                              tint cc_default))\n                                            ((Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                             (Econst_int (Int.repr 5) tint) ::\n                                             (Eaddrof\n                                               (Efield\n                                                 (Ederef\n                                                   (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                   (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                 _modulus\n                                                 (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                               (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                             (Econst_int (Int.repr 1) tint) ::\n                                             nil))\n                                          (Sifthenelse (Eunop Onotbool\n                                                         (Ebinop Olt\n                                                           (Etempvar _t'4 tint)\n                                                           (Econst_int (Int.repr 0) tint)\n                                                           tint) tint)\n                                            (Sloop\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sset _t'50\n                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                  (Scall None\n                                                    (Evar _fprintf (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                    ((Etempvar _t'50 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                     (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                     (Econst_int (Int.repr 425) tint) ::\n                                                     (Evar ___stringlit_33 (tarray tschar 85)) ::\n                                                     nil)))\n                                                (Scall None\n                                                  (Evar _abort (Tfunction\n                                                                 Tnil tvoid\n                                                                 cc_default))\n                                                  nil))\n                                              Sbreak)\n                                            Sskip))\n                                        Sbreak)\n                                      (Ssequence\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Scall (Some _t'5)\n                                                (Evar _secp256k1_modinv64_abs \n                                                (Tfunction (Tcons tlong Tnil)\n                                                  tlong cc_default))\n                                                ((Etempvar _u tlong) :: nil))\n                                              (Scall (Some _t'6)\n                                                (Evar _secp256k1_modinv64_abs \n                                                (Tfunction (Tcons tlong Tnil)\n                                                  tlong cc_default))\n                                                ((Etempvar _v tlong) :: nil)))\n                                            (Sifthenelse (Eunop Onotbool\n                                                           (Ebinop Ole\n                                                             (Etempvar _t'5 tlong)\n                                                             (Ebinop Osub\n                                                               (Ebinop Oshl\n                                                                 (Ecast\n                                                                   (Econst_int (Int.repr 1) tint)\n                                                                   tlong)\n                                                                 (Econst_int (Int.repr 62) tint)\n                                                                 tlong)\n                                                               (Etempvar _t'6 tlong)\n                                                               tlong) tint)\n                                                           tint)\n                                              (Sloop\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'49\n                                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                    (Scall None\n                                                      (Evar _fprintf \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __IO_FILE noattr))\n                                                          (Tcons\n                                                            (tptr tschar)\n                                                            Tnil)) tint\n                                                        {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                      ((Etempvar _t'49 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                       (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                       (Econst_int (Int.repr 426) tint) ::\n                                                       (Evar ___stringlit_34 (tarray tschar 101)) ::\n                                                       nil)))\n                                                  (Scall None\n                                                    (Evar _abort (Tfunction\n                                                                   Tnil tvoid\n                                                                   cc_default))\n                                                    nil))\n                                                Sbreak)\n                                              Sskip))\n                                          Sbreak)\n                                        (Ssequence\n                                          (Sloop\n                                            (Ssequence\n                                              (Ssequence\n                                                (Scall (Some _t'7)\n                                                  (Evar _secp256k1_modinv64_abs \n                                                  (Tfunction\n                                                    (Tcons tlong Tnil) tlong\n                                                    cc_default))\n                                                  ((Etempvar _q tlong) ::\n                                                   nil))\n                                                (Scall (Some _t'8)\n                                                  (Evar _secp256k1_modinv64_abs \n                                                  (Tfunction\n                                                    (Tcons tlong Tnil) tlong\n                                                    cc_default))\n                                                  ((Etempvar _r tlong) ::\n                                                   nil)))\n                                              (Sifthenelse (Eunop Onotbool\n                                                             (Ebinop Ole\n                                                               (Etempvar _t'7 tlong)\n                                                               (Ebinop Osub\n                                                                 (Ebinop Oshl\n                                                                   (Ecast\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tlong)\n                                                                   (Econst_int (Int.repr 62) tint)\n                                                                   tlong)\n                                                                 (Etempvar _t'8 tlong)\n                                                                 tlong) tint)\n                                                             tint)\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'48\n                                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                      (Scall None\n                                                        (Evar _fprintf \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __IO_FILE noattr))\n                                                            (Tcons\n                                                              (tptr tschar)\n                                                              Tnil)) tint\n                                                          {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                        ((Etempvar _t'48 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                         (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                         (Econst_int (Int.repr 427) tint) ::\n                                                         (Evar ___stringlit_35 (tarray tschar 101)) ::\n                                                         nil)))\n                                                    (Scall None\n                                                      (Evar _abort (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                      nil))\n                                                  Sbreak)\n                                                Sskip))\n                                            Sbreak)\n                                          (Ssequence\n                                            (Sset _sd\n                                              (Ebinop Oshr\n                                                (Etempvar _d4 tlong)\n                                                (Econst_int (Int.repr 63) tint)\n                                                tlong))\n                                            (Ssequence\n                                              (Sset _se\n                                                (Ebinop Oshr\n                                                  (Etempvar _e4 tlong)\n                                                  (Econst_int (Int.repr 63) tint)\n                                                  tlong))\n                                              (Ssequence\n                                                (Sset _md\n                                                  (Ebinop Oadd\n                                                    (Ebinop Oand\n                                                      (Etempvar _u tlong)\n                                                      (Etempvar _sd tlong)\n                                                      tlong)\n                                                    (Ebinop Oand\n                                                      (Etempvar _v tlong)\n                                                      (Etempvar _se tlong)\n                                                      tlong) tlong))\n                                                (Ssequence\n                                                  (Sset _me\n                                                    (Ebinop Oadd\n                                                      (Ebinop Oand\n                                                        (Etempvar _q tlong)\n                                                        (Etempvar _sd tlong)\n                                                        tlong)\n                                                      (Ebinop Oand\n                                                        (Etempvar _r tlong)\n                                                        (Etempvar _se tlong)\n                                                        tlong) tlong))\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_i128_mul \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tlong\n                                                            (Tcons tlong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       (Etempvar _u tlong) ::\n                                                       (Etempvar _d0 tlong) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Scall None\n                                                        (Evar _secp256k1_i128_accum_mul \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tlong\n                                                              (Tcons tlong\n                                                                Tnil))) tvoid\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                         (Etempvar _v tlong) ::\n                                                         (Etempvar _e0 tlong) ::\n                                                         nil))\n                                                      (Ssequence\n                                                        (Scall None\n                                                          (Evar _secp256k1_i128_mul \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tlong\n                                                                (Tcons tlong\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           (Etempvar _q tlong) ::\n                                                           (Etempvar _d0 tlong) ::\n                                                           nil))\n                                                        (Ssequence\n                                                          (Scall None\n                                                            (Evar _secp256k1_i128_accum_mul \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                (Tcons tlong\n                                                                  (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                             (Etempvar _r tlong) ::\n                                                             (Etempvar _e0 tlong) ::\n                                                             nil))\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Scall (Some _t'9)\n                                                                (Evar _secp256k1_i128_to_u64 \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                  tulong\n                                                                  cc_default))\n                                                                ((Eaddrof\n                                                                   (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                 nil))\n                                                              (Ssequence\n                                                                (Sset _t'47\n                                                                  (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus_inv62\n                                                                    tulong))\n                                                                (Sset _md\n                                                                  (Ebinop Osub\n                                                                    (Etempvar _md tlong)\n                                                                    (Ebinop Oand\n                                                                    (Ebinop Oadd\n                                                                    (Ebinop Omul\n                                                                    (Etempvar _t'47 tulong)\n                                                                    (Etempvar _t'9 tulong)\n                                                                    tulong)\n                                                                    (Etempvar _md tlong)\n                                                                    tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)\n                                                                    tulong))))\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Scall (Some _t'10)\n                                                                  (Evar _secp256k1_i128_to_u64 \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                   nil))\n                                                                (Ssequence\n                                                                  (Sset _t'46\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus_inv62\n                                                                    tulong))\n                                                                  (Sset _me\n                                                                    (Ebinop Osub\n                                                                    (Etempvar _me tlong)\n                                                                    (Ebinop Oand\n                                                                    (Ebinop Oadd\n                                                                    (Ebinop Omul\n                                                                    (Etempvar _t'46 tulong)\n                                                                    (Etempvar _t'10 tulong)\n                                                                    tulong)\n                                                                    (Etempvar _me tlong)\n                                                                    tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)\n                                                                    tulong))))\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Sset _t'45\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                  (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'45 tlong) ::\n                                                                    (Etempvar _md tlong) ::\n                                                                    nil)))\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Sset _t'44\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'44 tlong) ::\n                                                                    (Etempvar _me tlong) ::\n                                                                    nil)))\n                                                                  (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'11)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'11 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'43\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'43 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 446) tint) ::\n                                                                    (Evar ___stringlit_36 (tarray tschar 63)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'12)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'12 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'42\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'42 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 447) tint) ::\n                                                                    (Evar ___stringlit_37 (tarray tschar 63)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _u tlong) ::\n                                                                    (Etempvar _d1 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _v tlong) ::\n                                                                    (Etempvar _e1 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _q tlong) ::\n                                                                    (Etempvar _d1 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _r tlong) ::\n                                                                    (Etempvar _e1 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'39\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sifthenelse (Etempvar _t'39 tlong)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'41\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'41 tlong) ::\n                                                                    (Etempvar _md tlong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sset _t'40\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'40 tlong) ::\n                                                                    (Etempvar _me tlong) ::\n                                                                    nil))))\n                                                                    Sskip))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'13)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'13 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'14)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'14 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _u tlong) ::\n                                                                    (Etempvar _d2 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _v tlong) ::\n                                                                    (Etempvar _e2 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _q tlong) ::\n                                                                    (Etempvar _d2 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _r tlong) ::\n                                                                    (Etempvar _e2 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'36\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sifthenelse (Etempvar _t'36 tlong)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'38\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'38 tlong) ::\n                                                                    (Etempvar _md tlong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sset _t'37\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'37 tlong) ::\n                                                                    (Etempvar _me tlong) ::\n                                                                    nil))))\n                                                                    Sskip))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'15)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'15 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'16)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'16 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _u tlong) ::\n                                                                    (Etempvar _d3 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _v tlong) ::\n                                                                    (Etempvar _e3 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _q tlong) ::\n                                                                    (Etempvar _d3 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _r tlong) ::\n                                                                    (Etempvar _e3 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'33\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sifthenelse (Etempvar _t'33 tlong)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'35\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'35 tlong) ::\n                                                                    (Etempvar _md tlong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sset _t'34\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'34 tlong) ::\n                                                                    (Etempvar _me tlong) ::\n                                                                    nil))))\n                                                                    Sskip))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'17)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'17 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'18)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'18 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _u tlong) ::\n                                                                    (Etempvar _d4 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _v tlong) ::\n                                                                    (Etempvar _e4 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _q tlong) ::\n                                                                    (Etempvar _d4 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _r tlong) ::\n                                                                    (Etempvar _e4 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'32\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'32 tlong) ::\n                                                                    (Etempvar _md tlong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'31\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t'31 tlong) ::\n                                                                    (Etempvar _me tlong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'19)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'19 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'20)\n                                                                    (Evar _secp256k1_i128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'20 tulong)\n                                                                    (Etempvar _M62 tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_i128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'21)\n                                                                    (Evar _secp256k1_i128_to_i64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tlong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _cd (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Etempvar _t'21 tlong)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'22)\n                                                                    (Evar _secp256k1_i128_to_i64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tlong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _ce (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Etempvar _t'22 tlong)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'23)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 5) tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Eunop Oneg\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Ogt\n                                                                    (Etempvar _t'23 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'30\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'30 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 494) tint) ::\n                                                                    (Evar ___stringlit_30 (tarray tschar 86)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'24)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _d (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 5) tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 1) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _t'24 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'29\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'29 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 495) tint) ::\n                                                                    (Evar ___stringlit_31 (tarray tschar 85)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'25)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 5) tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Eunop Oneg\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Ogt\n                                                                    (Etempvar _t'25 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'28\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'28 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 496) tint) ::\n                                                                    (Evar ___stringlit_32 (tarray tschar 86)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'26)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _e (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 5) tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 1) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _t'26 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'27\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'27 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 497) tint) ::\n                                                                    (Evar ___stringlit_33 (tarray tschar 85)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_modinv64_update_fg_62_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_len, tint) ::\n                (_f, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_g, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_t, (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                nil);\n  fn_vars := ((_cf, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_cg, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_M62, tulong) :: (_u, tlong) :: (_v, tlong) :: (_q, tlong) ::\n               (_r, tlong) :: (_fi, tlong) :: (_gi, tlong) :: (_i, tint) ::\n               (_t'6, tlong) :: (_t'5, tlong) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tulong) ::\n               (_t'9, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'7, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _M62\n    (Ebinop Oshr (Econst_long (Int64.repr (-1)) tulong)\n      (Econst_int (Int.repr 2) tint) tulong))\n  (Ssequence\n    (Sset _u\n      (Efield\n        (Ederef\n          (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n          (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _u tlong))\n    (Ssequence\n      (Sset _v\n        (Efield\n          (Ederef\n            (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n            (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _v tlong))\n      (Ssequence\n        (Sset _q\n          (Efield\n            (Ederef\n              (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n              (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _q tlong))\n        (Ssequence\n          (Sset _r\n            (Efield\n              (Ederef\n                (Etempvar _t (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr)))\n                (Tstruct _secp256k1_modinv64_trans2x2 noattr)) _r tlong))\n          (Ssequence\n            (Sloop\n              (Sifthenelse (Eunop Onotbool\n                             (Ebinop Ogt (Etempvar _len tint)\n                               (Econst_int (Int.repr 0) tint) tint) tint)\n                (Sloop\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'9\n                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                      (Scall None\n                        (Evar _fprintf (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __IO_FILE noattr))\n                                           (Tcons (tptr tschar) Tnil)) tint\n                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                        ((Etempvar _t'9 (tptr (Tstruct __IO_FILE noattr))) ::\n                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                         (Evar ___stringlit_8 (tarray tschar 26)) ::\n                         (Econst_int (Int.repr 566) tint) ::\n                         (Evar ___stringlit_38 (tarray tschar 31)) :: nil)))\n                    (Scall None\n                      (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                  Sbreak)\n                Sskip)\n              Sbreak)\n            (Ssequence\n              (Sset _fi\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef\n                        (Etempvar _f (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                        (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                      (tarray tlong 5)) (Econst_int (Int.repr 0) tint)\n                    (tptr tlong)) tlong))\n              (Ssequence\n                (Sset _gi\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef\n                          (Etempvar _g (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                          (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                        (tarray tlong 5)) (Econst_int (Int.repr 0) tint)\n                      (tptr tlong)) tlong))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_i128_mul (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  (Tcons tlong\n                                                    (Tcons tlong Tnil)))\n                                                tvoid cc_default))\n                    ((Eaddrof (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                     (Etempvar _u tlong) :: (Etempvar _fi tlong) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_i128_accum_mul (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tlong\n                                                            (Tcons tlong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                      ((Eaddrof\n                         (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                       (Etempvar _v tlong) :: (Etempvar _gi tlong) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_i128_mul (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      (Tcons tlong\n                                                        (Tcons tlong Tnil)))\n                                                    tvoid cc_default))\n                        ((Eaddrof\n                           (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         (Etempvar _q tlong) :: (Etempvar _fi tlong) :: nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_i128_accum_mul (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tlong\n                                                                (Tcons tlong\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                          ((Eaddrof\n                             (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                           (Etempvar _r tlong) :: (Etempvar _gi tlong) ::\n                           nil))\n                        (Ssequence\n                          (Sloop\n                            (Ssequence\n                              (Scall (Some _t'1)\n                                (Evar _secp256k1_i128_to_u64 (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                 Tnil) tulong\n                                                               cc_default))\n                                ((Eaddrof\n                                   (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 nil))\n                              (Sifthenelse (Eunop Onotbool\n                                             (Ebinop Oeq\n                                               (Ebinop Oand\n                                                 (Etempvar _t'1 tulong)\n                                                 (Etempvar _M62 tulong)\n                                                 tulong)\n                                               (Econst_int (Int.repr 0) tint)\n                                               tint) tint)\n                                (Sloop\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _t'8\n                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                      (Scall None\n                                        (Evar _fprintf (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __IO_FILE noattr))\n                                                           (Tcons\n                                                             (tptr tschar)\n                                                             Tnil)) tint\n                                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                        ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                         (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                         (Econst_int (Int.repr 575) tint) ::\n                                         (Evar ___stringlit_39 (tarray tschar 63)) ::\n                                         nil)))\n                                    (Scall None\n                                      (Evar _abort (Tfunction Tnil tvoid\n                                                     cc_default)) nil))\n                                  Sbreak)\n                                Sskip))\n                            Sbreak)\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_i128_rshift (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                               (Tcons tuint\n                                                                 Tnil)) tvoid\n                                                             cc_default))\n                              ((Eaddrof\n                                 (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               (Econst_int (Int.repr 62) tint) :: nil))\n                            (Ssequence\n                              (Sloop\n                                (Ssequence\n                                  (Scall (Some _t'2)\n                                    (Evar _secp256k1_i128_to_u64 (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                   tulong\n                                                                   cc_default))\n                                    ((Eaddrof\n                                       (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                     nil))\n                                  (Sifthenelse (Eunop Onotbool\n                                                 (Ebinop Oeq\n                                                   (Ebinop Oand\n                                                     (Etempvar _t'2 tulong)\n                                                     (Etempvar _M62 tulong)\n                                                     tulong)\n                                                   (Econst_int (Int.repr 0) tint)\n                                                   tint) tint)\n                                    (Sloop\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'7\n                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                          (Scall None\n                                            (Evar _fprintf (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __IO_FILE noattr))\n                                                               (Tcons\n                                                                 (tptr tschar)\n                                                                 Tnil)) tint\n                                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                            ((Etempvar _t'7 (tptr (Tstruct __IO_FILE noattr))) ::\n                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                             (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                             (Econst_int (Int.repr 576) tint) ::\n                                             (Evar ___stringlit_40 (tarray tschar 63)) ::\n                                             nil)))\n                                        (Scall None\n                                          (Evar _abort (Tfunction Tnil tvoid\n                                                         cc_default)) nil))\n                                      Sbreak)\n                                    Sskip))\n                                Sbreak)\n                              (Ssequence\n                                (Scall None\n                                  (Evar _secp256k1_i128_rshift (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                   (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                 tvoid\n                                                                 cc_default))\n                                  ((Eaddrof\n                                     (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   (Econst_int (Int.repr 62) tint) :: nil))\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _i (Econst_int (Int.repr 1) tint))\n                                    (Sloop\n                                      (Ssequence\n                                        (Sifthenelse (Ebinop Olt\n                                                       (Etempvar _i tint)\n                                                       (Etempvar _len tint)\n                                                       tint)\n                                          Sskip\n                                          Sbreak)\n                                        (Ssequence\n                                          (Sset _fi\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Ederef\n                                                    (Etempvar _f (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                  _v (tarray tlong 5))\n                                                (Etempvar _i tint)\n                                                (tptr tlong)) tlong))\n                                          (Ssequence\n                                            (Sset _gi\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _g (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                      (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                    _v (tarray tlong 5))\n                                                  (Etempvar _i tint)\n                                                  (tptr tlong)) tlong))\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_i128_accum_mul \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tlong\n                                                      (Tcons tlong Tnil)))\n                                                  tvoid cc_default))\n                                                ((Eaddrof\n                                                   (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 (Etempvar _u tlong) ::\n                                                 (Etempvar _fi tlong) :: nil))\n                                              (Ssequence\n                                                (Scall None\n                                                  (Evar _secp256k1_i128_accum_mul \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      (Tcons tlong\n                                                        (Tcons tlong Tnil)))\n                                                    tvoid cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                   (Etempvar _v tlong) ::\n                                                   (Etempvar _gi tlong) ::\n                                                   nil))\n                                                (Ssequence\n                                                  (Scall None\n                                                    (Evar _secp256k1_i128_accum_mul \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                        (Tcons tlong\n                                                          (Tcons tlong Tnil)))\n                                                      tvoid cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                     (Etempvar _q tlong) ::\n                                                     (Etempvar _fi tlong) ::\n                                                     nil))\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_i128_accum_mul \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tlong\n                                                            (Tcons tlong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       (Etempvar _r tlong) ::\n                                                       (Etempvar _gi tlong) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Scall (Some _t'3)\n                                                          (Evar _secp256k1_i128_to_u64 \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              Tnil) tulong\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           nil))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Ederef\n                                                                  (Etempvar _f (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                  (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                _v\n                                                                (tarray tlong 5))\n                                                              (Ebinop Osub\n                                                                (Etempvar _i tint)\n                                                                (Econst_int (Int.repr 1) tint)\n                                                                tint)\n                                                              (tptr tlong))\n                                                            tlong)\n                                                          (Ebinop Oand\n                                                            (Etempvar _t'3 tulong)\n                                                            (Etempvar _M62 tulong)\n                                                            tulong)))\n                                                      (Ssequence\n                                                        (Scall None\n                                                          (Evar _secp256k1_i128_rshift \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tuint\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           (Econst_int (Int.repr 62) tint) ::\n                                                           nil))\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Scall (Some _t'4)\n                                                              (Evar _secp256k1_i128_to_u64 \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                  Tnil)\n                                                                tulong\n                                                                cc_default))\n                                                              ((Eaddrof\n                                                                 (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                                                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                               nil))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _g (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                  (Ebinop Osub\n                                                                    (Etempvar _i tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint)\n                                                                  (tptr tlong))\n                                                                tlong)\n                                                              (Ebinop Oand\n                                                                (Etempvar _t'4 tulong)\n                                                                (Etempvar _M62 tulong)\n                                                                tulong)))\n                                                          (Scall None\n                                                            (Evar _secp256k1_i128_rshift \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                (Tcons tuint\n                                                                  Tnil))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                             (Econst_int (Int.repr 62) tint) ::\n                                                             nil))))))))))))\n                                      (Sset _i\n                                        (Ebinop Oadd (Etempvar _i tint)\n                                          (Econst_int (Int.repr 1) tint)\n                                          tint))))\n                                  (Ssequence\n                                    (Ssequence\n                                      (Scall (Some _t'5)\n                                        (Evar _secp256k1_i128_to_i64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tlong cc_default))\n                                        ((Eaddrof\n                                           (Evar _cf (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _f (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              _v (tarray tlong 5))\n                                            (Ebinop Osub (Etempvar _len tint)\n                                              (Econst_int (Int.repr 1) tint)\n                                              tint) (tptr tlong)) tlong)\n                                        (Etempvar _t'5 tlong)))\n                                    (Ssequence\n                                      (Scall (Some _t'6)\n                                        (Evar _secp256k1_i128_to_i64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tlong cc_default))\n                                        ((Eaddrof\n                                           (Evar _cg (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _g (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                                (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              _v (tarray tlong 5))\n                                            (Ebinop Osub (Etempvar _len tint)\n                                              (Econst_int (Int.repr 1) tint)\n                                              tint) (tptr tlong)) tlong)\n                                        (Etempvar _t'6 tlong)))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_modinv64_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_x, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_modinfo,\n                 (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))) :: nil);\n  fn_vars := ((_d, (Tstruct _secp256k1_modinv64_signed62 noattr)) ::\n              (_e, (Tstruct _secp256k1_modinv64_signed62 noattr)) ::\n              (_f, (Tstruct _secp256k1_modinv64_signed62 noattr)) ::\n              (_g, (Tstruct _secp256k1_modinv64_signed62 noattr)) ::\n              (_t, (Tstruct _secp256k1_modinv64_trans2x2 noattr)) :: nil);\n  fn_temps := ((_i, tint) :: (_j, tint) :: (_len, tint) :: (_eta, tlong) ::\n               (_cond, tlong) :: (_fn, tlong) :: (_gn, tlong) ::\n               (_t'20, tint) :: (_t'19, tint) :: (_t'18, tint) ::\n               (_t'17, tint) :: (_t'16, tint) :: (_t'15, tint) ::\n               (_t'14, tint) :: (_t'13, tint) :: (_t'12, tint) ::\n               (_t'11, tint) :: (_t'10, tint) :: (_t'9, tint) ::\n               (_t'8, tint) :: (_t'7, tint) :: (_t'6, tint) ::\n               (_t'5, tint) :: (_t'4, tint) :: (_t'3, tint) ::\n               (_t'2, tint) :: (_t'1, tlong) :: (_t'38, tlong) ::\n               (_t'37, tlong) ::\n               (_t'36, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'35, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'34, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'33, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'32, tlong) :: (_t'31, tlong) :: (_t'30, tlong) ::\n               (_t'29, tlong) ::\n               (_t'28, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'27, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'26, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'25, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'24, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'23, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'22, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'21, tlong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef\n      (Ebinop Oadd\n        (Efield (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n          (tarray tlong 5)) (Econst_int (Int.repr 0) tint) (tptr tlong))\n      tlong) (Econst_int (Int.repr 0) tint))\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n            (tarray tlong 5)) (Econst_int (Int.repr 1) tint) (tptr tlong))\n        tlong) (Econst_int (Int.repr 0) tint))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr))\n              _v (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n            (tptr tlong)) tlong) (Econst_int (Int.repr 0) tint))\n      (Ssequence\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr))\n                _v (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n              (tptr tlong)) tlong) (Econst_int (Int.repr 0) tint))\n        (Ssequence\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                (tptr tlong)) tlong) (Econst_int (Int.repr 0) tint))\n          (Ssequence\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Evar _e (Tstruct _secp256k1_modinv64_signed62 noattr))\n                    _v (tarray tlong 5)) (Econst_int (Int.repr 0) tint)\n                  (tptr tlong)) tlong) (Econst_int (Int.repr 1) tint))\n            (Ssequence\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Evar _e (Tstruct _secp256k1_modinv64_signed62 noattr))\n                      _v (tarray tlong 5)) (Econst_int (Int.repr 1) tint)\n                    (tptr tlong)) tlong) (Econst_int (Int.repr 0) tint))\n              (Ssequence\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Evar _e (Tstruct _secp256k1_modinv64_signed62 noattr))\n                        _v (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n                      (tptr tlong)) tlong) (Econst_int (Int.repr 0) tint))\n                (Ssequence\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Evar _e (Tstruct _secp256k1_modinv64_signed62 noattr))\n                          _v (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n                        (tptr tlong)) tlong) (Econst_int (Int.repr 0) tint))\n                  (Ssequence\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Evar _e (Tstruct _secp256k1_modinv64_signed62 noattr))\n                            _v (tarray tlong 5))\n                          (Econst_int (Int.repr 4) tint) (tptr tlong)) tlong)\n                      (Econst_int (Int.repr 0) tint))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_modinv64_signed62_assign (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                        ((Eaddrof\n                           (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                         (Eaddrof\n                           (Efield\n                             (Ederef\n                               (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                               (Tstruct _secp256k1_modinv64_modinfo noattr))\n                             _modulus\n                             (Tstruct _secp256k1_modinv64_signed62 noattr))\n                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                         nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_modinv64_signed62_assign (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                          ((Eaddrof\n                             (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                           (Etempvar _x (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                           nil))\n                        (Ssequence\n                          (Sset _i (Econst_int (Int.repr 0) tint))\n                          (Ssequence\n                            (Sset _len (Econst_int (Int.repr 5) tint))\n                            (Ssequence\n                              (Sset _eta\n                                (Ecast\n                                  (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                    tint) tlong))\n                              (Ssequence\n                                (Sloop\n                                  (Ssequence\n                                    Sskip\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'37\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                  _v (tarray tlong 5))\n                                                (Econst_int (Int.repr 0) tint)\n                                                (tptr tlong)) tlong))\n                                          (Ssequence\n                                            (Sset _t'38\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                    _v (tarray tlong 5))\n                                                  (Econst_int (Int.repr 0) tint)\n                                                  (tptr tlong)) tlong))\n                                            (Scall (Some _t'1)\n                                              (Evar _secp256k1_modinv64_divsteps_62_var \n                                              (Tfunction\n                                                (Tcons tlong\n                                                  (Tcons tulong\n                                                    (Tcons tulong\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                                        Tnil)))) tlong\n                                                cc_default))\n                                              ((Etempvar _eta tlong) ::\n                                               (Etempvar _t'37 tlong) ::\n                                               (Etempvar _t'38 tlong) ::\n                                               (Eaddrof\n                                                 (Evar _t (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                                 (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                                               nil))))\n                                        (Sset _eta (Etempvar _t'1 tlong)))\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_modinv64_update_de_62 \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                    Tnil)))) tvoid\n                                            cc_default))\n                                          ((Eaddrof\n                                             (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _e (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _t (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                             (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                                           (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))) ::\n                                           nil))\n                                        (Ssequence\n                                          (Sloop\n                                            (Ssequence\n                                              (Scall (Some _t'2)\n                                                (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                    (Tcons tint\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                        (Tcons tlong Tnil))))\n                                                  tint cc_default))\n                                                ((Eaddrof\n                                                   (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                   (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                 (Etempvar _len tint) ::\n                                                 (Eaddrof\n                                                   (Efield\n                                                     (Ederef\n                                                       (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                       (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                     _modulus\n                                                     (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                   (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                 (Eunop Oneg\n                                                   (Econst_int (Int.repr 1) tint)\n                                                   tint) :: nil))\n                                              (Sifthenelse (Eunop Onotbool\n                                                             (Ebinop Ogt\n                                                               (Etempvar _t'2 tint)\n                                                               (Econst_int (Int.repr 0) tint)\n                                                               tint) tint)\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'36\n                                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                      (Scall None\n                                                        (Evar _fprintf \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __IO_FILE noattr))\n                                                            (Tcons\n                                                              (tptr tschar)\n                                                              Tnil)) tint\n                                                          {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                        ((Etempvar _t'36 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                         (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                         (Econst_int (Int.repr 674) tint) ::\n                                                         (Evar ___stringlit_41 (tarray tschar 89)) ::\n                                                         nil)))\n                                                    (Scall None\n                                                      (Evar _abort (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                      nil))\n                                                  Sbreak)\n                                                Sskip))\n                                            Sbreak)\n                                          (Ssequence\n                                            (Sloop\n                                              (Ssequence\n                                                (Scall (Some _t'3)\n                                                  (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                      (Tcons tint\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                          (Tcons tlong Tnil))))\n                                                    tint cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                     (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                   (Etempvar _len tint) ::\n                                                   (Eaddrof\n                                                     (Efield\n                                                       (Ederef\n                                                         (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                         (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                       _modulus\n                                                       (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                     (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                   (Econst_int (Int.repr 1) tint) ::\n                                                   nil))\n                                                (Sifthenelse (Eunop Onotbool\n                                                               (Ebinop Ole\n                                                                 (Etempvar _t'3 tint)\n                                                                 (Econst_int (Int.repr 0) tint)\n                                                                 tint) tint)\n                                                  (Sloop\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Sset _t'35\n                                                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                        (Scall None\n                                                          (Evar _fprintf \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __IO_FILE noattr))\n                                                              (Tcons\n                                                                (tptr tschar)\n                                                                Tnil)) tint\n                                                            {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                          ((Etempvar _t'35 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                           (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                           (Econst_int (Int.repr 675) tint) ::\n                                                           (Evar ___stringlit_42 (tarray tschar 89)) ::\n                                                           nil)))\n                                                      (Scall None\n                                                        (Evar _abort \n                                                        (Tfunction Tnil tvoid\n                                                          cc_default)) nil))\n                                                    Sbreak)\n                                                  Sskip))\n                                              Sbreak)\n                                            (Ssequence\n                                              (Sloop\n                                                (Ssequence\n                                                  (Scall (Some _t'4)\n                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                        (Tcons tint\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                            (Tcons tlong\n                                                              Tnil)))) tint\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                       (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                     (Etempvar _len tint) ::\n                                                     (Eaddrof\n                                                       (Efield\n                                                         (Ederef\n                                                           (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                           (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                         _modulus\n                                                         (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                       (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                     (Eunop Oneg\n                                                       (Econst_int (Int.repr 1) tint)\n                                                       tint) :: nil))\n                                                  (Sifthenelse (Eunop Onotbool\n                                                                 (Ebinop Ogt\n                                                                   (Etempvar _t'4 tint)\n                                                                   (Econst_int (Int.repr 0) tint)\n                                                                   tint)\n                                                                 tint)\n                                                    (Sloop\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Sset _t'34\n                                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                          (Scall None\n                                                            (Evar _fprintf \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __IO_FILE noattr))\n                                                                (Tcons\n                                                                  (tptr tschar)\n                                                                  Tnil)) tint\n                                                              {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                            ((Etempvar _t'34 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                             (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                             (Econst_int (Int.repr 676) tint) ::\n                                                             (Evar ___stringlit_43 (tarray tschar 89)) ::\n                                                             nil)))\n                                                        (Scall None\n                                                          (Evar _abort \n                                                          (Tfunction Tnil\n                                                            tvoid cc_default))\n                                                          nil))\n                                                      Sbreak)\n                                                    Sskip))\n                                                Sbreak)\n                                              (Ssequence\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Scall (Some _t'5)\n                                                      (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                          (Tcons tint\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                              (Tcons tlong\n                                                                Tnil)))) tint\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                       (Etempvar _len tint) ::\n                                                       (Eaddrof\n                                                         (Efield\n                                                           (Ederef\n                                                             (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                             (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                           _modulus\n                                                           (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                       (Econst_int (Int.repr 1) tint) ::\n                                                       nil))\n                                                    (Sifthenelse (Eunop Onotbool\n                                                                   (Ebinop Olt\n                                                                    (Etempvar _t'5 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                   tint)\n                                                      (Sloop\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Sset _t'33\n                                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                            (Scall None\n                                                              (Evar _fprintf \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __IO_FILE noattr))\n                                                                  (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                tint\n                                                                {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                              ((Etempvar _t'33 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                               (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                               (Econst_int (Int.repr 677) tint) ::\n                                                               (Evar ___stringlit_44 (tarray tschar 88)) ::\n                                                               nil)))\n                                                          (Scall None\n                                                            (Evar _abort \n                                                            (Tfunction Tnil\n                                                              tvoid\n                                                              cc_default))\n                                                            nil))\n                                                        Sbreak)\n                                                      Sskip))\n                                                  Sbreak)\n                                                (Ssequence\n                                                  (Scall None\n                                                    (Evar _secp256k1_modinv64_update_fg_62_var \n                                                    (Tfunction\n                                                      (Tcons tint\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                                              Tnil)))) tvoid\n                                                      cc_default))\n                                                    ((Etempvar _len tint) ::\n                                                     (Eaddrof\n                                                       (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                       (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                     (Eaddrof\n                                                       (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                       (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                     (Eaddrof\n                                                       (Evar _t (Tstruct _secp256k1_modinv64_trans2x2 noattr))\n                                                       (tptr (Tstruct _secp256k1_modinv64_trans2x2 noattr))) ::\n                                                     nil))\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'31\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                              _v\n                                                              (tarray tlong 5))\n                                                            (Econst_int (Int.repr 0) tint)\n                                                            (tptr tlong))\n                                                          tlong))\n                                                      (Sifthenelse (Ebinop Oeq\n                                                                    (Etempvar _t'31 tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                        (Ssequence\n                                                          (Sset _cond\n                                                            (Ecast\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              tlong))\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Sset _j\n                                                                (Econst_int (Int.repr 1) tint))\n                                                              (Sloop\n                                                                (Ssequence\n                                                                  (Sifthenelse \n                                                                    (Ebinop Olt\n                                                                    (Etempvar _j tint)\n                                                                    (Etempvar _len tint)\n                                                                    tint)\n                                                                    Sskip\n                                                                    Sbreak)\n                                                                  (Ssequence\n                                                                    (Sset _t'32\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Etempvar _j tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sset _cond\n                                                                    (Ebinop Oor\n                                                                    (Etempvar _cond tlong)\n                                                                    (Etempvar _t'32 tlong)\n                                                                    tlong))))\n                                                                (Sset _j\n                                                                  (Ebinop Oadd\n                                                                    (Etempvar _j tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint))))\n                                                            (Sifthenelse \n                                                              (Ebinop Oeq\n                                                                (Etempvar _cond tlong)\n                                                                (Econst_int (Int.repr 0) tint)\n                                                                tint)\n                                                              Sbreak\n                                                              Sskip)))\n                                                        Sskip))\n                                                    (Ssequence\n                                                      (Sset _fn\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                              _v\n                                                              (tarray tlong 5))\n                                                            (Ebinop Osub\n                                                              (Etempvar _len tint)\n                                                              (Econst_int (Int.repr 1) tint)\n                                                              tint)\n                                                            (tptr tlong))\n                                                          tlong))\n                                                      (Ssequence\n                                                        (Sset _gn\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                _v\n                                                                (tarray tlong 5))\n                                                              (Ebinop Osub\n                                                                (Etempvar _len tint)\n                                                                (Econst_int (Int.repr 1) tint)\n                                                                tint)\n                                                              (tptr tlong))\n                                                            tlong))\n                                                        (Ssequence\n                                                          (Sset _cond\n                                                            (Ebinop Oshr\n                                                              (Ebinop Osub\n                                                                (Ecast\n                                                                  (Etempvar _len tint)\n                                                                  tlong)\n                                                                (Econst_int (Int.repr 2) tint)\n                                                                tlong)\n                                                              (Econst_int (Int.repr 63) tint)\n                                                              tlong))\n                                                          (Ssequence\n                                                            (Sset _cond\n                                                              (Ebinop Oor\n                                                                (Etempvar _cond tlong)\n                                                                (Ebinop Oxor\n                                                                  (Etempvar _fn tlong)\n                                                                  (Ebinop Oshr\n                                                                    (Etempvar _fn tlong)\n                                                                    (Econst_int (Int.repr 63) tint)\n                                                                    tlong)\n                                                                  tlong)\n                                                                tlong))\n                                                            (Ssequence\n                                                              (Sset _cond\n                                                                (Ebinop Oor\n                                                                  (Etempvar _cond tlong)\n                                                                  (Ebinop Oxor\n                                                                    (Etempvar _gn tlong)\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _gn tlong)\n                                                                    (Econst_int (Int.repr 63) tint)\n                                                                    tlong)\n                                                                    tlong)\n                                                                  tlong))\n                                                              (Ssequence\n                                                                (Sifthenelse \n                                                                  (Ebinop Oeq\n                                                                    (Etempvar _cond tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'30\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Ebinop Osub\n                                                                    (Etempvar _len tint)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Ebinop Osub\n                                                                    (Etempvar _len tint)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oor\n                                                                    (Etempvar _t'30 tlong)\n                                                                    (Ebinop Oshl\n                                                                    (Ecast\n                                                                    (Etempvar _fn tlong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'29\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Ebinop Osub\n                                                                    (Etempvar _len tint)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tint)\n                                                                    (tptr tlong))\n                                                                    tlong))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    _v\n                                                                    (tarray tlong 5))\n                                                                    (Ebinop Osub\n                                                                    (Etempvar _len tint)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tint)\n                                                                    (tptr tlong))\n                                                                    tlong)\n                                                                    (Ebinop Oor\n                                                                    (Etempvar _t'29 tlong)\n                                                                    (Ebinop Oshl\n                                                                    (Ecast\n                                                                    (Etempvar _gn tlong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 62) tint)\n                                                                    tulong)\n                                                                    tulong)))\n                                                                    (Sset _len\n                                                                    (Ebinop Osub\n                                                                    (Etempvar _len tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint))))\n                                                                  Sskip)\n                                                                (Ssequence\n                                                                  (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'6\n                                                                    (Ecast\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _i tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint)\n                                                                    tint))\n                                                                    (Sset _i\n                                                                    (Etempvar _t'6 tint)))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _t'6 tint)\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'28\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'28 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 704) tint) ::\n                                                                    (Evar ___stringlit_45 (tarray tschar 32)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                  (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'7)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Etempvar _len tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Eunop Oneg\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Ogt\n                                                                    (Etempvar _t'7 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'27\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'27 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 705) tint) ::\n                                                                    (Evar ___stringlit_41 (tarray tschar 89)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'8)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Etempvar _len tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 1) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Ole\n                                                                    (Etempvar _t'8 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'26\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'26 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 706) tint) ::\n                                                                    (Evar ___stringlit_42 (tarray tschar 89)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'9)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Etempvar _len tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Eunop Oneg\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Ogt\n                                                                    (Etempvar _t'9 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'25\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'25 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 707) tint) ::\n                                                                    (Evar ___stringlit_43 (tarray tschar 89)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'10)\n                                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Etempvar _len tint) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                    (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                    _modulus\n                                                                    (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                                    (Econst_int (Int.repr 1) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _t'10 tint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'24\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'24 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                                    (Econst_int (Int.repr 708) tint) ::\n                                                                    (Evar ___stringlit_44 (tarray tschar 88)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak))))))))))))))))))))\n                                  Sskip)\n                                (Ssequence\n                                  (Sloop\n                                    (Ssequence\n                                      (Scall (Some _t'11)\n                                        (Evar _secp256k1_modinv64_mul_cmp_62 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                            (Tcons tint\n                                              (Tcons\n                                                (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                (Tcons tlong Tnil)))) tint\n                                          cc_default))\n                                        ((Eaddrof\n                                           (Evar _g (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                         (Etempvar _len tint) ::\n                                         (Eaddrof\n                                           (Evar _SECP256K1_SIGNED62_ONE (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                         (Econst_int (Int.repr 0) tint) ::\n                                         nil))\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Ebinop Oeq\n                                                       (Etempvar _t'11 tint)\n                                                       (Econst_int (Int.repr 0) tint)\n                                                       tint) tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'23\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'23 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                 (Econst_int (Int.repr 716) tint) ::\n                                                 (Evar ___stringlit_46 (tarray tschar 95)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip))\n                                    Sbreak)\n                                  (Ssequence\n                                    (Sloop\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Scall (Some _t'12)\n                                              (Evar _secp256k1_modinv64_mul_cmp_62 \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                  (Tcons tint\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                      (Tcons tlong Tnil))))\n                                                tint cc_default))\n                                              ((Eaddrof\n                                                 (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                 (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                               (Etempvar _len tint) ::\n                                               (Eaddrof\n                                                 (Evar _SECP256K1_SIGNED62_ONE (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                 (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                               (Eunop Oneg\n                                                 (Econst_int (Int.repr 1) tint)\n                                                 tint) :: nil))\n                                            (Sifthenelse (Ebinop Oeq\n                                                           (Etempvar _t'12 tint)\n                                                           (Econst_int (Int.repr 0) tint)\n                                                           tint)\n                                              (Sset _t'13\n                                                (Econst_int (Int.repr 1) tint))\n                                              (Ssequence\n                                                (Scall (Some _t'14)\n                                                  (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                      (Tcons tint\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                          (Tcons tlong Tnil))))\n                                                    tint cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                     (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                   (Etempvar _len tint) ::\n                                                   (Eaddrof\n                                                     (Evar _SECP256K1_SIGNED62_ONE (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                     (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                   (Econst_int (Int.repr 1) tint) ::\n                                                   nil))\n                                                (Sset _t'13\n                                                  (Ecast\n                                                    (Ebinop Oeq\n                                                      (Etempvar _t'14 tint)\n                                                      (Econst_int (Int.repr 0) tint)\n                                                      tint) tbool)))))\n                                          (Sifthenelse (Etempvar _t'13 tint)\n                                            (Sset _t'15\n                                              (Econst_int (Int.repr 1) tint))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Scall (Some _t'16)\n                                                  (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                      (Tcons tint\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                          (Tcons tlong Tnil))))\n                                                    tint cc_default))\n                                                  ((Etempvar _x (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                   (Econst_int (Int.repr 5) tint) ::\n                                                   (Eaddrof\n                                                     (Evar _SECP256K1_SIGNED62_ONE (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                     (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                   (Econst_int (Int.repr 0) tint) ::\n                                                   nil))\n                                                (Sifthenelse (Ebinop Oeq\n                                                               (Etempvar _t'16 tint)\n                                                               (Econst_int (Int.repr 0) tint)\n                                                               tint)\n                                                  (Ssequence\n                                                    (Scall (Some _t'18)\n                                                      (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                          (Tcons tint\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                              (Tcons tlong\n                                                                Tnil)))) tint\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                       (Econst_int (Int.repr 5) tint) ::\n                                                       (Eaddrof\n                                                         (Evar _SECP256K1_SIGNED62_ONE (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                       (Econst_int (Int.repr 0) tint) ::\n                                                       nil))\n                                                    (Sset _t'17\n                                                      (Ecast\n                                                        (Ebinop Oeq\n                                                          (Etempvar _t'18 tint)\n                                                          (Econst_int (Int.repr 0) tint)\n                                                          tint) tbool)))\n                                                  (Sset _t'17\n                                                    (Econst_int (Int.repr 0) tint))))\n                                              (Sifthenelse (Etempvar _t'17 tint)\n                                                (Ssequence\n                                                  (Scall (Some _t'19)\n                                                    (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                        (Tcons tint\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                            (Tcons tlong\n                                                              Tnil)))) tint\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                       (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                     (Etempvar _len tint) ::\n                                                     (Eaddrof\n                                                       (Efield\n                                                         (Ederef\n                                                           (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                           (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                         _modulus\n                                                         (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                       (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                     (Econst_int (Int.repr 1) tint) ::\n                                                     nil))\n                                                  (Sifthenelse (Ebinop Oeq\n                                                                 (Etempvar _t'19 tint)\n                                                                 (Econst_int (Int.repr 0) tint)\n                                                                 tint)\n                                                    (Ssequence\n                                                      (Sset _t'15\n                                                        (Ecast\n                                                          (Econst_int (Int.repr 1) tint)\n                                                          tbool))\n                                                      (Sset _t'15\n                                                        (Ecast\n                                                          (Etempvar _t'15 tint)\n                                                          tbool)))\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Scall (Some _t'20)\n                                                            (Evar _secp256k1_modinv64_mul_cmp_62 \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                (Tcons tint\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                                    (Tcons\n                                                                    tlong\n                                                                    Tnil))))\n                                                              tint\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                               (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                             (Etempvar _len tint) ::\n                                                             (Eaddrof\n                                                               (Efield\n                                                                 (Ederef\n                                                                   (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr)))\n                                                                   (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                                 _modulus\n                                                                 (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                               (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                                             (Eunop Oneg\n                                                               (Econst_int (Int.repr 1) tint)\n                                                               tint) :: nil))\n                                                          (Sset _t'15\n                                                            (Ecast\n                                                              (Ebinop Oeq\n                                                                (Etempvar _t'20 tint)\n                                                                (Econst_int (Int.repr 0) tint)\n                                                                tint) tbool)))\n                                                        (Sset _t'15\n                                                          (Ecast\n                                                            (Etempvar _t'15 tint)\n                                                            tbool)))\n                                                      (Sset _t'15\n                                                        (Ecast\n                                                          (Etempvar _t'15 tint)\n                                                          tbool)))))\n                                                (Sset _t'15\n                                                  (Ecast\n                                                    (Econst_int (Int.repr 0) tint)\n                                                    tbool))))))\n                                        (Sifthenelse (Eunop Onotbool\n                                                       (Etempvar _t'15 tint)\n                                                       tint)\n                                          (Sloop\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'22\n                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                (Scall None\n                                                  (Evar _fprintf (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                   tint\n                                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                  ((Etempvar _t'22 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                   (Evar ___stringlit_8 (tarray tschar 26)) ::\n                                                   (Econst_int (Int.repr 718) tint) ::\n                                                   (Evar ___stringlit_47 (tarray tschar 459)) ::\n                                                   nil)))\n                                              (Scall None\n                                                (Evar _abort (Tfunction Tnil\n                                                               tvoid\n                                                               cc_default))\n                                                nil))\n                                            Sbreak)\n                                          Sskip))\n                                      Sbreak)\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'21\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Evar _f (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                _v (tarray tlong 5))\n                                              (Ebinop Osub\n                                                (Etempvar _len tint)\n                                                (Econst_int (Int.repr 1) tint)\n                                                tint) (tptr tlong)) tlong))\n                                        (Scall None\n                                          (Evar _secp256k1_modinv64_normalize_62 \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              (Tcons tlong\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                                  Tnil))) tvoid cc_default))\n                                          ((Eaddrof\n                                             (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                           (Etempvar _t'21 tlong) ::\n                                           (Etempvar _modinfo (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))) ::\n                                           nil)))\n                                      (Scall None\n                                        (Evar _secp256k1_modinv64_signed62_assign \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              Tnil)) tvoid cc_default))\n                                        ((Etempvar _x (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                         (Eaddrof\n                                           (Evar _d (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                                         nil)))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_mul_inner := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr tulong)) :: (_a, (tptr tulong)) ::\n                (_b, (tptr tulong)) :: nil);\n  fn_vars := ((_c, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_d, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_t3, tulong) :: (_t4, tulong) :: (_tx, tulong) ::\n               (_u0, tulong) :: (_a0, tulong) :: (_a1, tulong) ::\n               (_a2, tulong) :: (_a3, tulong) :: (_a4, tulong) ::\n               (_M, tulong) :: (_R, tulong) :: (_t'38, tulong) ::\n               (_t'37, tint) :: (_t'36, tulong) :: (_t'35, tint) ::\n               (_t'34, tulong) :: (_t'33, tint) :: (_t'32, tulong) ::\n               (_t'31, tint) :: (_t'30, tint) :: (_t'29, tulong) ::\n               (_t'28, tint) :: (_t'27, tint) :: (_t'26, tint) ::\n               (_t'25, tulong) :: (_t'24, tint) :: (_t'23, tint) ::\n               (_t'22, tulong) :: (_t'21, tint) :: (_t'20, tint) ::\n               (_t'19, tint) :: (_t'18, tulong) :: (_t'17, tint) ::\n               (_t'16, tint) :: (_t'15, tulong) :: (_t'14, tint) ::\n               (_t'13, tint) :: (_t'12, tint) :: (_t'11, tulong) ::\n               (_t'10, tint) :: (_t'9, tulong) :: (_t'8, tint) ::\n               (_t'7, tint) :: (_t'6, tulong) :: (_t'5, tint) ::\n               (_t'4, tint) :: (_t'3, tulong) :: (_t'2, tint) ::\n               (_t'1, tint) :: (_t'126, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'125, tulong) ::\n               (_t'124, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'123, tulong) ::\n               (_t'122, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'121, tulong) ::\n               (_t'120, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'119, tulong) ::\n               (_t'118, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'117, tulong) ::\n               (_t'116, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'115, tulong) ::\n               (_t'114, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'113, tulong) ::\n               (_t'112, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'111, tulong) ::\n               (_t'110, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'109, tulong) ::\n               (_t'108, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'107, tulong) ::\n               (_t'106, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'105, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'104, tulong) :: (_t'103, tulong) :: (_t'102, tulong) ::\n               (_t'101, tulong) ::\n               (_t'100, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'99, tulong) ::\n               (_t'98, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'97, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'96, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'95, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'94, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'93, tulong) :: (_t'92, tulong) :: (_t'91, tulong) ::\n               (_t'90, tulong) :: (_t'89, tulong) ::\n               (_t'88, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'87, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'86, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'85, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'84, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'83, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'82, tulong) ::\n               (_t'81, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'80, tulong) :: (_t'79, tulong) :: (_t'78, tulong) ::\n               (_t'77, tulong) ::\n               (_t'76, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'75, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'74, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'73, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'72, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'71, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'70, tulong) ::\n               (_t'69, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'68, tulong) :: (_t'67, tulong) ::\n               (_t'66, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'65, tulong) :: (_t'64, tulong) :: (_t'63, tulong) ::\n               (_t'62, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'61, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'60, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'59, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'58, tulong) ::\n               (_t'57, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'56, tulong) :: (_t'55, tulong) :: (_t'54, tulong) ::\n               (_t'53, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'52, tulong) :: (_t'51, tulong) ::\n               (_t'50, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'49, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'48, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'47, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'46, tulong) ::\n               (_t'45, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'44, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'43, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'42, tulong) ::\n               (_t'41, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'40, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'39, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _a0\n    (Ederef\n      (Ebinop Oadd (Etempvar _a (tptr tulong)) (Econst_int (Int.repr 0) tint)\n        (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _a1\n      (Ederef\n        (Ebinop Oadd (Etempvar _a (tptr tulong))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _a2\n        (Ederef\n          (Ebinop Oadd (Etempvar _a (tptr tulong))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _a3\n          (Ederef\n            (Ebinop Oadd (Etempvar _a (tptr tulong))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _a4\n            (Ederef\n              (Ebinop Oadd (Etempvar _a (tptr tulong))\n                (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _M (Econst_long (Int64.repr 4503599627370495) tulong))\n            (Ssequence\n              (Sset _R (Econst_long (Int64.repr 68719492368) tulong))\n              (Ssequence\n                (Sloop\n                  (Ssequence\n                    (Sset _t'125\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _a (tptr tulong))\n                          (Econst_int (Int.repr 0) tint) (tptr tulong))\n                        tulong))\n                    (Sifthenelse (Eunop Onotbool\n                                   (Ebinop Oeq\n                                     (Ebinop Oshr (Etempvar _t'125 tulong)\n                                       (Econst_int (Int.repr 56) tint)\n                                       tulong) (Econst_int (Int.repr 0) tint)\n                                     tint) tint)\n                      (Sloop\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'126\n                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                            (Scall None\n                              (Evar _fprintf (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                 (Tcons (tptr tschar) Tnil))\n                                               tint\n                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                              ((Etempvar _t'126 (tptr (Tstruct __IO_FILE noattr))) ::\n                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                               (Evar ___stringlit_49 (tarray tschar 35)) ::\n                               (Econst_int (Int.repr 28) tint) ::\n                               (Evar ___stringlit_48 (tarray tschar 45)) ::\n                               nil)))\n                          (Scall None\n                            (Evar _abort (Tfunction Tnil tvoid cc_default))\n                            nil))\n                        Sbreak)\n                      Sskip))\n                  Sbreak)\n                (Ssequence\n                  (Sloop\n                    (Ssequence\n                      (Sset _t'123\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _a (tptr tulong))\n                            (Econst_int (Int.repr 1) tint) (tptr tulong))\n                          tulong))\n                      (Sifthenelse (Eunop Onotbool\n                                     (Ebinop Oeq\n                                       (Ebinop Oshr (Etempvar _t'123 tulong)\n                                         (Econst_int (Int.repr 56) tint)\n                                         tulong)\n                                       (Econst_int (Int.repr 0) tint) tint)\n                                     tint)\n                        (Sloop\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'124\n                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                              (Scall None\n                                (Evar _fprintf (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                   (Tcons (tptr tschar) Tnil))\n                                                 tint\n                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                ((Etempvar _t'124 (tptr (Tstruct __IO_FILE noattr))) ::\n                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                 (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                 (Econst_int (Int.repr 29) tint) ::\n                                 (Evar ___stringlit_50 (tarray tschar 45)) ::\n                                 nil)))\n                            (Scall None\n                              (Evar _abort (Tfunction Tnil tvoid cc_default))\n                              nil))\n                          Sbreak)\n                        Sskip))\n                    Sbreak)\n                  (Ssequence\n                    (Sloop\n                      (Ssequence\n                        (Sset _t'121\n                          (Ederef\n                            (Ebinop Oadd (Etempvar _a (tptr tulong))\n                              (Econst_int (Int.repr 2) tint) (tptr tulong))\n                            tulong))\n                        (Sifthenelse (Eunop Onotbool\n                                       (Ebinop Oeq\n                                         (Ebinop Oshr\n                                           (Etempvar _t'121 tulong)\n                                           (Econst_int (Int.repr 56) tint)\n                                           tulong)\n                                         (Econst_int (Int.repr 0) tint) tint)\n                                       tint)\n                          (Sloop\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'122\n                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                (Scall None\n                                  (Evar _fprintf (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __IO_FILE noattr))\n                                                     (Tcons (tptr tschar)\n                                                       Tnil)) tint\n                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                  ((Etempvar _t'122 (tptr (Tstruct __IO_FILE noattr))) ::\n                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                   (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                   (Econst_int (Int.repr 30) tint) ::\n                                   (Evar ___stringlit_51 (tarray tschar 45)) ::\n                                   nil)))\n                              (Scall None\n                                (Evar _abort (Tfunction Tnil tvoid\n                                               cc_default)) nil))\n                            Sbreak)\n                          Sskip))\n                      Sbreak)\n                    (Ssequence\n                      (Sloop\n                        (Ssequence\n                          (Sset _t'119\n                            (Ederef\n                              (Ebinop Oadd (Etempvar _a (tptr tulong))\n                                (Econst_int (Int.repr 3) tint) (tptr tulong))\n                              tulong))\n                          (Sifthenelse (Eunop Onotbool\n                                         (Ebinop Oeq\n                                           (Ebinop Oshr\n                                             (Etempvar _t'119 tulong)\n                                             (Econst_int (Int.repr 56) tint)\n                                             tulong)\n                                           (Econst_int (Int.repr 0) tint)\n                                           tint) tint)\n                            (Sloop\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'120\n                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                  (Scall None\n                                    (Evar _fprintf (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __IO_FILE noattr))\n                                                       (Tcons (tptr tschar)\n                                                         Tnil)) tint\n                                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                    ((Etempvar _t'120 (tptr (Tstruct __IO_FILE noattr))) ::\n                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                     (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                     (Econst_int (Int.repr 31) tint) ::\n                                     (Evar ___stringlit_52 (tarray tschar 45)) ::\n                                     nil)))\n                                (Scall None\n                                  (Evar _abort (Tfunction Tnil tvoid\n                                                 cc_default)) nil))\n                              Sbreak)\n                            Sskip))\n                        Sbreak)\n                      (Ssequence\n                        (Sloop\n                          (Ssequence\n                            (Sset _t'117\n                              (Ederef\n                                (Ebinop Oadd (Etempvar _a (tptr tulong))\n                                  (Econst_int (Int.repr 4) tint)\n                                  (tptr tulong)) tulong))\n                            (Sifthenelse (Eunop Onotbool\n                                           (Ebinop Oeq\n                                             (Ebinop Oshr\n                                               (Etempvar _t'117 tulong)\n                                               (Econst_int (Int.repr 52) tint)\n                                               tulong)\n                                             (Econst_int (Int.repr 0) tint)\n                                             tint) tint)\n                              (Sloop\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'118\n                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                    (Scall None\n                                      (Evar _fprintf (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __IO_FILE noattr))\n                                                         (Tcons (tptr tschar)\n                                                           Tnil)) tint\n                                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                      ((Etempvar _t'118 (tptr (Tstruct __IO_FILE noattr))) ::\n                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                       (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                       (Econst_int (Int.repr 32) tint) ::\n                                       (Evar ___stringlit_53 (tarray tschar 45)) ::\n                                       nil)))\n                                  (Scall None\n                                    (Evar _abort (Tfunction Tnil tvoid\n                                                   cc_default)) nil))\n                                Sbreak)\n                              Sskip))\n                          Sbreak)\n                        (Ssequence\n                          (Sloop\n                            (Ssequence\n                              (Sset _t'115\n                                (Ederef\n                                  (Ebinop Oadd (Etempvar _b (tptr tulong))\n                                    (Econst_int (Int.repr 0) tint)\n                                    (tptr tulong)) tulong))\n                              (Sifthenelse (Eunop Onotbool\n                                             (Ebinop Oeq\n                                               (Ebinop Oshr\n                                                 (Etempvar _t'115 tulong)\n                                                 (Econst_int (Int.repr 56) tint)\n                                                 tulong)\n                                               (Econst_int (Int.repr 0) tint)\n                                               tint) tint)\n                                (Sloop\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _t'116\n                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                      (Scall None\n                                        (Evar _fprintf (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __IO_FILE noattr))\n                                                           (Tcons\n                                                             (tptr tschar)\n                                                             Tnil)) tint\n                                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                        ((Etempvar _t'116 (tptr (Tstruct __IO_FILE noattr))) ::\n                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                         (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                         (Econst_int (Int.repr 33) tint) ::\n                                         (Evar ___stringlit_54 (tarray tschar 45)) ::\n                                         nil)))\n                                    (Scall None\n                                      (Evar _abort (Tfunction Tnil tvoid\n                                                     cc_default)) nil))\n                                  Sbreak)\n                                Sskip))\n                            Sbreak)\n                          (Ssequence\n                            (Sloop\n                              (Ssequence\n                                (Sset _t'113\n                                  (Ederef\n                                    (Ebinop Oadd (Etempvar _b (tptr tulong))\n                                      (Econst_int (Int.repr 1) tint)\n                                      (tptr tulong)) tulong))\n                                (Sifthenelse (Eunop Onotbool\n                                               (Ebinop Oeq\n                                                 (Ebinop Oshr\n                                                   (Etempvar _t'113 tulong)\n                                                   (Econst_int (Int.repr 56) tint)\n                                                   tulong)\n                                                 (Econst_int (Int.repr 0) tint)\n                                                 tint) tint)\n                                  (Sloop\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'114\n                                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                        (Scall None\n                                          (Evar _fprintf (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __IO_FILE noattr))\n                                                             (Tcons\n                                                               (tptr tschar)\n                                                               Tnil)) tint\n                                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                          ((Etempvar _t'114 (tptr (Tstruct __IO_FILE noattr))) ::\n                                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                           (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                           (Econst_int (Int.repr 34) tint) ::\n                                           (Evar ___stringlit_55 (tarray tschar 45)) ::\n                                           nil)))\n                                      (Scall None\n                                        (Evar _abort (Tfunction Tnil tvoid\n                                                       cc_default)) nil))\n                                    Sbreak)\n                                  Sskip))\n                              Sbreak)\n                            (Ssequence\n                              (Sloop\n                                (Ssequence\n                                  (Sset _t'111\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Etempvar _b (tptr tulong))\n                                        (Econst_int (Int.repr 2) tint)\n                                        (tptr tulong)) tulong))\n                                  (Sifthenelse (Eunop Onotbool\n                                                 (Ebinop Oeq\n                                                   (Ebinop Oshr\n                                                     (Etempvar _t'111 tulong)\n                                                     (Econst_int (Int.repr 56) tint)\n                                                     tulong)\n                                                   (Econst_int (Int.repr 0) tint)\n                                                   tint) tint)\n                                    (Sloop\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'112\n                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                          (Scall None\n                                            (Evar _fprintf (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __IO_FILE noattr))\n                                                               (Tcons\n                                                                 (tptr tschar)\n                                                                 Tnil)) tint\n                                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                            ((Etempvar _t'112 (tptr (Tstruct __IO_FILE noattr))) ::\n                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                             (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                             (Econst_int (Int.repr 35) tint) ::\n                                             (Evar ___stringlit_56 (tarray tschar 45)) ::\n                                             nil)))\n                                        (Scall None\n                                          (Evar _abort (Tfunction Tnil tvoid\n                                                         cc_default)) nil))\n                                      Sbreak)\n                                    Sskip))\n                                Sbreak)\n                              (Ssequence\n                                (Sloop\n                                  (Ssequence\n                                    (Sset _t'109\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _b (tptr tulong))\n                                          (Econst_int (Int.repr 3) tint)\n                                          (tptr tulong)) tulong))\n                                    (Sifthenelse (Eunop Onotbool\n                                                   (Ebinop Oeq\n                                                     (Ebinop Oshr\n                                                       (Etempvar _t'109 tulong)\n                                                       (Econst_int (Int.repr 56) tint)\n                                                       tulong)\n                                                     (Econst_int (Int.repr 0) tint)\n                                                     tint) tint)\n                                      (Sloop\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'110\n                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                            (Scall None\n                                              (Evar _fprintf (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                                 (Tcons\n                                                                   (tptr tschar)\n                                                                   Tnil))\n                                                               tint\n                                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                              ((Etempvar _t'110 (tptr (Tstruct __IO_FILE noattr))) ::\n                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                               (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                               (Econst_int (Int.repr 36) tint) ::\n                                               (Evar ___stringlit_57 (tarray tschar 45)) ::\n                                               nil)))\n                                          (Scall None\n                                            (Evar _abort (Tfunction Tnil\n                                                           tvoid cc_default))\n                                            nil))\n                                        Sbreak)\n                                      Sskip))\n                                  Sbreak)\n                                (Ssequence\n                                  (Sloop\n                                    (Ssequence\n                                      (Sset _t'107\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Etempvar _b (tptr tulong))\n                                            (Econst_int (Int.repr 4) tint)\n                                            (tptr tulong)) tulong))\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Ebinop Oeq\n                                                       (Ebinop Oshr\n                                                         (Etempvar _t'107 tulong)\n                                                         (Econst_int (Int.repr 52) tint)\n                                                         tulong)\n                                                       (Econst_int (Int.repr 0) tint)\n                                                       tint) tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'108\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'108 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                 (Econst_int (Int.repr 37) tint) ::\n                                                 (Evar ___stringlit_58 (tarray tschar 45)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip))\n                                    Sbreak)\n                                  (Ssequence\n                                    (Sloop\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Ebinop One\n                                                       (Etempvar _r (tptr tulong))\n                                                       (Etempvar _b (tptr tulong))\n                                                       tint) tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'106\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'106 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                 (Econst_int (Int.repr 38) tint) ::\n                                                 (Evar ___stringlit_59 (tarray tschar 30)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip)\n                                      Sbreak)\n                                    (Ssequence\n                                      (Sloop\n                                        (Sifthenelse (Eunop Onotbool\n                                                       (Ebinop One\n                                                         (Etempvar _a (tptr tulong))\n                                                         (Etempvar _b (tptr tulong))\n                                                         tint) tint)\n                                          (Sloop\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'105\n                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                (Scall None\n                                                  (Evar _fprintf (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                   tint\n                                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                  ((Etempvar _t'105 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                   (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                   (Econst_int (Int.repr 39) tint) ::\n                                                   (Evar ___stringlit_60 (tarray tschar 30)) ::\n                                                   nil)))\n                                              (Scall None\n                                                (Evar _abort (Tfunction Tnil\n                                                               tvoid\n                                                               cc_default))\n                                                nil))\n                                            Sbreak)\n                                          Sskip)\n                                        Sbreak)\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'104\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Etempvar _b (tptr tulong))\n                                                (Econst_int (Int.repr 3) tint)\n                                                (tptr tulong)) tulong))\n                                          (Scall None\n                                            (Evar _secp256k1_u128_mul \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                (Tcons tulong\n                                                  (Tcons tulong Tnil))) tvoid\n                                              cc_default))\n                                            ((Eaddrof\n                                               (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                             (Etempvar _a0 tulong) ::\n                                             (Etempvar _t'104 tulong) :: nil)))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'103\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Etempvar _b (tptr tulong))\n                                                  (Econst_int (Int.repr 2) tint)\n                                                  (tptr tulong)) tulong))\n                                            (Scall None\n                                              (Evar _secp256k1_u128_accum_mul \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  (Tcons tulong\n                                                    (Tcons tulong Tnil)))\n                                                tvoid cc_default))\n                                              ((Eaddrof\n                                                 (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                               (Etempvar _a1 tulong) ::\n                                               (Etempvar _t'103 tulong) ::\n                                               nil)))\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'102\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Etempvar _b (tptr tulong))\n                                                    (Econst_int (Int.repr 1) tint)\n                                                    (tptr tulong)) tulong))\n                                              (Scall None\n                                                (Evar _secp256k1_u128_accum_mul \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong\n                                                      (Tcons tulong Tnil)))\n                                                  tvoid cc_default))\n                                                ((Eaddrof\n                                                   (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 (Etempvar _a2 tulong) ::\n                                                 (Etempvar _t'102 tulong) ::\n                                                 nil)))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'101\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Etempvar _b (tptr tulong))\n                                                      (Econst_int (Int.repr 0) tint)\n                                                      (tptr tulong)) tulong))\n                                                (Scall None\n                                                  (Evar _secp256k1_u128_accum_mul \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      (Tcons tulong\n                                                        (Tcons tulong Tnil)))\n                                                    tvoid cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                   (Etempvar _a3 tulong) ::\n                                                   (Etempvar _t'101 tulong) ::\n                                                   nil)))\n                                              (Ssequence\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Scall (Some _t'1)\n                                                      (Evar _secp256k1_u128_check_bits \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tuint Tnil))\n                                                        tint cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       (Econst_int (Int.repr 114) tint) ::\n                                                       nil))\n                                                    (Sifthenelse (Eunop Onotbool\n                                                                   (Etempvar _t'1 tint)\n                                                                   tint)\n                                                      (Sloop\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Sset _t'100\n                                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                            (Scall None\n                                                              (Evar _fprintf \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __IO_FILE noattr))\n                                                                  (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                tint\n                                                                {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                              ((Etempvar _t'100 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                               (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                               (Econst_int (Int.repr 51) tint) ::\n                                                               (Evar ___stringlit_61 (tarray tschar 62)) ::\n                                                               nil)))\n                                                          (Scall None\n                                                            (Evar _abort \n                                                            (Tfunction Tnil\n                                                              tvoid\n                                                              cc_default))\n                                                            nil))\n                                                        Sbreak)\n                                                      Sskip))\n                                                  Sbreak)\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'99\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Etempvar _b (tptr tulong))\n                                                          (Econst_int (Int.repr 4) tint)\n                                                          (tptr tulong))\n                                                        tulong))\n                                                    (Scall None\n                                                      (Evar _secp256k1_u128_mul \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tulong\n                                                            (Tcons tulong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       (Etempvar _a4 tulong) ::\n                                                       (Etempvar _t'99 tulong) ::\n                                                       nil)))\n                                                  (Ssequence\n                                                    (Sloop\n                                                      (Ssequence\n                                                        (Scall (Some _t'2)\n                                                          (Evar _secp256k1_u128_check_bits \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tuint\n                                                                Tnil)) tint\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           (Econst_int (Int.repr 112) tint) ::\n                                                           nil))\n                                                        (Sifthenelse \n                                                          (Eunop Onotbool\n                                                            (Etempvar _t'2 tint)\n                                                            tint)\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'98\n                                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                (Scall None\n                                                                  (Evar _fprintf \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                  ((Etempvar _t'98 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                   (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                   (Econst_int (Int.repr 54) tint) ::\n                                                                   (Evar ___stringlit_62 (tarray tschar 62)) ::\n                                                                   nil)))\n                                                              (Scall None\n                                                                (Evar _abort \n                                                                (Tfunction\n                                                                  Tnil tvoid\n                                                                  cc_default))\n                                                                nil))\n                                                            Sbreak)\n                                                          Sskip))\n                                                      Sbreak)\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Scall (Some _t'3)\n                                                          (Evar _secp256k1_u128_to_u64 \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              Tnil) tulong\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           nil))\n                                                        (Scall None\n                                                          (Evar _secp256k1_u128_accum_mul \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tulong\n                                                                (Tcons tulong\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           (Etempvar _R tulong) ::\n                                                           (Etempvar _t'3 tulong) ::\n                                                           nil)))\n                                                      (Ssequence\n                                                        (Scall None\n                                                          (Evar _secp256k1_u128_rshift \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tuint\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           (Econst_int (Int.repr 64) tint) ::\n                                                           nil))\n                                                        (Ssequence\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Scall (Some _t'4)\n                                                                (Evar _secp256k1_u128_check_bits \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                  tint\n                                                                  cc_default))\n                                                                ((Eaddrof\n                                                                   (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                 (Econst_int (Int.repr 115) tint) ::\n                                                                 nil))\n                                                              (Sifthenelse \n                                                                (Eunop Onotbool\n                                                                  (Etempvar _t'4 tint)\n                                                                  tint)\n                                                                (Sloop\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'97\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'97 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 57) tint) ::\n                                                                    (Evar ___stringlit_63 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                  Sbreak)\n                                                                Sskip))\n                                                            Sbreak)\n                                                          (Ssequence\n                                                            (Sloop\n                                                              (Ssequence\n                                                                (Scall (Some _t'5)\n                                                                  (Evar _secp256k1_u128_check_bits \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                   (Econst_int (Int.repr 48) tint) ::\n                                                                   nil))\n                                                                (Sifthenelse \n                                                                  (Eunop Onotbool\n                                                                    (Etempvar _t'5 tint)\n                                                                    tint)\n                                                                  (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'96\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'96 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 58) tint) ::\n                                                                    (Evar ___stringlit_64 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                  Sskip))\n                                                              Sbreak)\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Scall (Some _t'6)\n                                                                  (Evar _secp256k1_u128_to_u64 \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                   nil))\n                                                                (Sset _t3\n                                                                  (Ebinop Oand\n                                                                    (Etempvar _t'6 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                              (Ssequence\n                                                                (Scall None\n                                                                  (Evar _secp256k1_u128_rshift \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                   (Econst_int (Int.repr 52) tint) ::\n                                                                   nil))\n                                                                (Ssequence\n                                                                  (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t3 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'95\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'95 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 61) tint) ::\n                                                                    (Evar ___stringlit_65 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                  (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'7)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 63) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'7 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'94\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'94 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    (Evar ___stringlit_66 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'93\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    (Etempvar _t'93 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'92\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    (Etempvar _t'92 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'91\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a2 tulong) ::\n                                                                    (Etempvar _t'91 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'90\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    (Etempvar _t'90 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'89\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a4 tulong) ::\n                                                                    (Etempvar _t'89 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'8)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 115) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'8 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'88\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'88 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 70) tint) ::\n                                                                    (Evar ___stringlit_63 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'9)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Ebinop Oshl\n                                                                    (Etempvar _R tulong)\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    tulong) ::\n                                                                    (Etempvar _t'9 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'10)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 116) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'10 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'87\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'87 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 73) tint) ::\n                                                                    (Evar ___stringlit_67 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'11)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _t4\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'11 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t4 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'86\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'86 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 76) tint) ::\n                                                                    (Evar ___stringlit_68 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'12)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 64) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'12 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'85\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'85 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 77) tint) ::\n                                                                    (Evar ___stringlit_69 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sset _tx\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t4 tulong)\n                                                                    (Econst_int (Int.repr 48) tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _t4\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t4 tulong)\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _M tulong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _tx tulong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'84\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'84 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 80) tint) ::\n                                                                    (Evar ___stringlit_70 (tarray tschar 42)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t4 tulong)\n                                                                    (Econst_int (Int.repr 48) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'83\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'83 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 81) tint) ::\n                                                                    (Evar ___stringlit_71 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'82\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    (Etempvar _t'82 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'13)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 112) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'13 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'81\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'81 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 85) tint) ::\n                                                                    (Evar ___stringlit_62 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'80\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    (Etempvar _t'80 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'79\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a2 tulong) ::\n                                                                    (Etempvar _t'79 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'78\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    (Etempvar _t'78 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'77\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a4 tulong) ::\n                                                                    (Etempvar _t'77 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'14)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 115) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'14 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'76\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'76 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 91) tint) ::\n                                                                    (Evar ___stringlit_63 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'15)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _u0\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'15 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _u0 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'75\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'75 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 94) tint) ::\n                                                                    (Evar ___stringlit_72 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'16)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 63) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'16 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'74\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'74 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 95) tint) ::\n                                                                    (Evar ___stringlit_66 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sset _u0\n                                                                    (Ebinop Oor\n                                                                    (Ebinop Oshl\n                                                                    (Etempvar _u0 tulong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tulong)\n                                                                    (Etempvar _tx tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _u0 tulong)\n                                                                    (Econst_int (Int.repr 56) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'73\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'73 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 99) tint) ::\n                                                                    (Evar ___stringlit_73 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _u0 tulong) ::\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _R tulong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'17)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 115) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'17 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'72\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'72 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 102) tint) ::\n                                                                    (Evar ___stringlit_74 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'18)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'18 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'70\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'70 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'71\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'71 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 105) tint) ::\n                                                                    (Evar ___stringlit_75 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'19)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 61) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'19 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'69\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'69 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 106) tint) ::\n                                                                    (Evar ___stringlit_76 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'68\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    (Etempvar _t'68 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'67\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    (Etempvar _t'67 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'20)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'20 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'66\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'66 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 111) tint) ::\n                                                                    (Evar ___stringlit_77 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'65\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a2 tulong) ::\n                                                                    (Etempvar _t'65 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'64\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    (Etempvar _t'64 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'63\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a4 tulong) ::\n                                                                    (Etempvar _t'63 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'21)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'21 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'62\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'62 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 116) tint) ::\n                                                                    (Evar ___stringlit_61 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'22)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'22 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong) ::\n                                                                    (Etempvar _R tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'23)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 115) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'23 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'61\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'61 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 119) tint) ::\n                                                                    (Evar ___stringlit_74 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'24)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'24 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'60\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'60 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 120) tint) ::\n                                                                    (Evar ___stringlit_78 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'25)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'25 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'58\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'58 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'59\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'59 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 123) tint) ::\n                                                                    (Evar ___stringlit_79 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'26)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 63) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'26 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'57\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'57 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 124) tint) ::\n                                                                    (Evar ___stringlit_80 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'56\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    (Etempvar _t'56 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'55\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    (Etempvar _t'55 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'54\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a2 tulong) ::\n                                                                    (Etempvar _t'54 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'27)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'27 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'53\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'53 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 130) tint) ::\n                                                                    (Evar ___stringlit_77 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'52\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    (Etempvar _t'52 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'51\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _b (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a4 tulong) ::\n                                                                    (Etempvar _t'51 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'28)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'28 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'50\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'50 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 134) tint) ::\n                                                                    (Evar ___stringlit_61 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'29)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _R tulong) ::\n                                                                    (Etempvar _t'29 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 64) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'30)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 115) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'30 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'49\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'49 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 137) tint) ::\n                                                                    (Evar ___stringlit_74 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'31)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 50) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'31 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'48\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'48 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 138) tint) ::\n                                                                    (Evar ___stringlit_81 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'32)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'32 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'46\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'46 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'47\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'47 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 142) tint) ::\n                                                                    (Evar ___stringlit_82 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'33)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 63) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'33 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'45\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'45 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 143) tint) ::\n                                                                    (Evar ___stringlit_80 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'34)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Ebinop Oshl\n                                                                    (Etempvar _R tulong)\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    tulong) ::\n                                                                    (Etempvar _t'34 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t3 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'35)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 100) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'35 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'44\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'44 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 147) tint) ::\n                                                                    (Evar ___stringlit_83 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'36)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'36 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'42\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'42 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'43\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'43 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 150) tint) ::\n                                                                    (Evar ___stringlit_84 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'37)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 48) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'37 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'41\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'41 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 151) tint) ::\n                                                                    (Evar ___stringlit_64 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'38)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _t'38 tulong)\n                                                                    (Etempvar _t4 tulong)\n                                                                    tulong)))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'39\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'39 tulong)\n                                                                    (Econst_int (Int.repr 49) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'40\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'40 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 154) tint) ::\n                                                                    (Evar ___stringlit_85 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_sqr_inner := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr tulong)) :: (_a, (tptr tulong)) :: nil);\n  fn_vars := ((_c, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_d, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_a0, tulong) :: (_a1, tulong) :: (_a2, tulong) ::\n               (_a3, tulong) :: (_a4, tulong) :: (_t3, tlong) ::\n               (_t4, tlong) :: (_tx, tlong) :: (_u0, tlong) ::\n               (_M, tulong) :: (_R, tulong) :: (_t'38, tulong) ::\n               (_t'37, tint) :: (_t'36, tulong) :: (_t'35, tint) ::\n               (_t'34, tulong) :: (_t'33, tint) :: (_t'32, tulong) ::\n               (_t'31, tint) :: (_t'30, tint) :: (_t'29, tulong) ::\n               (_t'28, tint) :: (_t'27, tint) :: (_t'26, tint) ::\n               (_t'25, tulong) :: (_t'24, tint) :: (_t'23, tint) ::\n               (_t'22, tulong) :: (_t'21, tint) :: (_t'20, tint) ::\n               (_t'19, tint) :: (_t'18, tulong) :: (_t'17, tint) ::\n               (_t'16, tint) :: (_t'15, tulong) :: (_t'14, tint) ::\n               (_t'13, tint) :: (_t'12, tint) :: (_t'11, tulong) ::\n               (_t'10, tint) :: (_t'9, tulong) :: (_t'8, tint) ::\n               (_t'7, tint) :: (_t'6, tulong) :: (_t'5, tint) ::\n               (_t'4, tint) :: (_t'3, tulong) :: (_t'2, tint) ::\n               (_t'1, tint) :: (_t'89, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'88, tulong) ::\n               (_t'87, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'86, tulong) ::\n               (_t'85, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'84, tulong) ::\n               (_t'83, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'82, tulong) ::\n               (_t'81, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'80, tulong) ::\n               (_t'79, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'78, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'77, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'76, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'75, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'74, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'73, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'72, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'71, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'70, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'69, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'68, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'67, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'66, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'65, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'64, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'63, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'62, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'61, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'60, tulong) ::\n               (_t'59, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'58, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'57, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'56, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'55, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'54, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'53, tulong) ::\n               (_t'52, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'51, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'50, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'49, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'48, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'47, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'46, tulong) ::\n               (_t'45, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'44, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'43, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'42, tulong) ::\n               (_t'41, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'40, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'39, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _a0\n    (Ederef\n      (Ebinop Oadd (Etempvar _a (tptr tulong)) (Econst_int (Int.repr 0) tint)\n        (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _a1\n      (Ederef\n        (Ebinop Oadd (Etempvar _a (tptr tulong))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _a2\n        (Ederef\n          (Ebinop Oadd (Etempvar _a (tptr tulong))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _a3\n          (Ederef\n            (Ebinop Oadd (Etempvar _a (tptr tulong))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _a4\n            (Ederef\n              (Ebinop Oadd (Etempvar _a (tptr tulong))\n                (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _M (Econst_long (Int64.repr 4503599627370495) tulong))\n            (Ssequence\n              (Sset _R (Econst_long (Int64.repr 68719492368) tulong))\n              (Ssequence\n                (Sloop\n                  (Ssequence\n                    (Sset _t'88\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _a (tptr tulong))\n                          (Econst_int (Int.repr 0) tint) (tptr tulong))\n                        tulong))\n                    (Sifthenelse (Eunop Onotbool\n                                   (Ebinop Oeq\n                                     (Ebinop Oshr (Etempvar _t'88 tulong)\n                                       (Econst_int (Int.repr 56) tint)\n                                       tulong) (Econst_int (Int.repr 0) tint)\n                                     tint) tint)\n                      (Sloop\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'89\n                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                            (Scall None\n                              (Evar _fprintf (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                 (Tcons (tptr tschar) Tnil))\n                                               tint\n                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                              ((Etempvar _t'89 (tptr (Tstruct __IO_FILE noattr))) ::\n                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                               (Evar ___stringlit_49 (tarray tschar 35)) ::\n                               (Econst_int (Int.repr 164) tint) ::\n                               (Evar ___stringlit_48 (tarray tschar 45)) ::\n                               nil)))\n                          (Scall None\n                            (Evar _abort (Tfunction Tnil tvoid cc_default))\n                            nil))\n                        Sbreak)\n                      Sskip))\n                  Sbreak)\n                (Ssequence\n                  (Sloop\n                    (Ssequence\n                      (Sset _t'86\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _a (tptr tulong))\n                            (Econst_int (Int.repr 1) tint) (tptr tulong))\n                          tulong))\n                      (Sifthenelse (Eunop Onotbool\n                                     (Ebinop Oeq\n                                       (Ebinop Oshr (Etempvar _t'86 tulong)\n                                         (Econst_int (Int.repr 56) tint)\n                                         tulong)\n                                       (Econst_int (Int.repr 0) tint) tint)\n                                     tint)\n                        (Sloop\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'87\n                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                              (Scall None\n                                (Evar _fprintf (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                   (Tcons (tptr tschar) Tnil))\n                                                 tint\n                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                ((Etempvar _t'87 (tptr (Tstruct __IO_FILE noattr))) ::\n                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                 (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                 (Econst_int (Int.repr 165) tint) ::\n                                 (Evar ___stringlit_50 (tarray tschar 45)) ::\n                                 nil)))\n                            (Scall None\n                              (Evar _abort (Tfunction Tnil tvoid cc_default))\n                              nil))\n                          Sbreak)\n                        Sskip))\n                    Sbreak)\n                  (Ssequence\n                    (Sloop\n                      (Ssequence\n                        (Sset _t'84\n                          (Ederef\n                            (Ebinop Oadd (Etempvar _a (tptr tulong))\n                              (Econst_int (Int.repr 2) tint) (tptr tulong))\n                            tulong))\n                        (Sifthenelse (Eunop Onotbool\n                                       (Ebinop Oeq\n                                         (Ebinop Oshr (Etempvar _t'84 tulong)\n                                           (Econst_int (Int.repr 56) tint)\n                                           tulong)\n                                         (Econst_int (Int.repr 0) tint) tint)\n                                       tint)\n                          (Sloop\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'85\n                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                (Scall None\n                                  (Evar _fprintf (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __IO_FILE noattr))\n                                                     (Tcons (tptr tschar)\n                                                       Tnil)) tint\n                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                  ((Etempvar _t'85 (tptr (Tstruct __IO_FILE noattr))) ::\n                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                   (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                   (Econst_int (Int.repr 166) tint) ::\n                                   (Evar ___stringlit_51 (tarray tschar 45)) ::\n                                   nil)))\n                              (Scall None\n                                (Evar _abort (Tfunction Tnil tvoid\n                                               cc_default)) nil))\n                            Sbreak)\n                          Sskip))\n                      Sbreak)\n                    (Ssequence\n                      (Sloop\n                        (Ssequence\n                          (Sset _t'82\n                            (Ederef\n                              (Ebinop Oadd (Etempvar _a (tptr tulong))\n                                (Econst_int (Int.repr 3) tint) (tptr tulong))\n                              tulong))\n                          (Sifthenelse (Eunop Onotbool\n                                         (Ebinop Oeq\n                                           (Ebinop Oshr\n                                             (Etempvar _t'82 tulong)\n                                             (Econst_int (Int.repr 56) tint)\n                                             tulong)\n                                           (Econst_int (Int.repr 0) tint)\n                                           tint) tint)\n                            (Sloop\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'83\n                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                  (Scall None\n                                    (Evar _fprintf (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __IO_FILE noattr))\n                                                       (Tcons (tptr tschar)\n                                                         Tnil)) tint\n                                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                    ((Etempvar _t'83 (tptr (Tstruct __IO_FILE noattr))) ::\n                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                     (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                     (Econst_int (Int.repr 167) tint) ::\n                                     (Evar ___stringlit_52 (tarray tschar 45)) ::\n                                     nil)))\n                                (Scall None\n                                  (Evar _abort (Tfunction Tnil tvoid\n                                                 cc_default)) nil))\n                              Sbreak)\n                            Sskip))\n                        Sbreak)\n                      (Ssequence\n                        (Sloop\n                          (Ssequence\n                            (Sset _t'80\n                              (Ederef\n                                (Ebinop Oadd (Etempvar _a (tptr tulong))\n                                  (Econst_int (Int.repr 4) tint)\n                                  (tptr tulong)) tulong))\n                            (Sifthenelse (Eunop Onotbool\n                                           (Ebinop Oeq\n                                             (Ebinop Oshr\n                                               (Etempvar _t'80 tulong)\n                                               (Econst_int (Int.repr 52) tint)\n                                               tulong)\n                                             (Econst_int (Int.repr 0) tint)\n                                             tint) tint)\n                              (Sloop\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'81\n                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                    (Scall None\n                                      (Evar _fprintf (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __IO_FILE noattr))\n                                                         (Tcons (tptr tschar)\n                                                           Tnil)) tint\n                                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                      ((Etempvar _t'81 (tptr (Tstruct __IO_FILE noattr))) ::\n                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                       (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                       (Econst_int (Int.repr 168) tint) ::\n                                       (Evar ___stringlit_53 (tarray tschar 45)) ::\n                                       nil)))\n                                  (Scall None\n                                    (Evar _abort (Tfunction Tnil tvoid\n                                                   cc_default)) nil))\n                                Sbreak)\n                              Sskip))\n                          Sbreak)\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_u128_mul (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tulong\n                                                            (Tcons tulong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                            ((Eaddrof\n                               (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             (Ebinop Omul (Etempvar _a0 tulong)\n                               (Econst_int (Int.repr 2) tint) tulong) ::\n                             (Etempvar _a3 tulong) :: nil))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_u128_accum_mul (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                  (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                tvoid\n                                                                cc_default))\n                              ((Eaddrof\n                                 (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               (Ebinop Omul (Etempvar _a1 tulong)\n                                 (Econst_int (Int.repr 2) tint) tulong) ::\n                               (Etempvar _a2 tulong) :: nil))\n                            (Ssequence\n                              (Sloop\n                                (Ssequence\n                                  (Scall (Some _t'1)\n                                    (Evar _secp256k1_u128_check_bits \n                                    (Tfunction\n                                      (Tcons\n                                        (tptr (Tstruct _secp256k1_uint128 noattr))\n                                        (Tcons tuint Tnil)) tint cc_default))\n                                    ((Eaddrof\n                                       (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                     (Econst_int (Int.repr 114) tint) :: nil))\n                                  (Sifthenelse (Eunop Onotbool\n                                                 (Etempvar _t'1 tint) tint)\n                                    (Sloop\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'79\n                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                          (Scall None\n                                            (Evar _fprintf (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __IO_FILE noattr))\n                                                               (Tcons\n                                                                 (tptr tschar)\n                                                                 Tnil)) tint\n                                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                            ((Etempvar _t'79 (tptr (Tstruct __IO_FILE noattr))) ::\n                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                             (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                             (Econst_int (Int.repr 177) tint) ::\n                                             (Evar ___stringlit_61 (tarray tschar 62)) ::\n                                             nil)))\n                                        (Scall None\n                                          (Evar _abort (Tfunction Tnil tvoid\n                                                         cc_default)) nil))\n                                      Sbreak)\n                                    Sskip))\n                                Sbreak)\n                              (Ssequence\n                                (Scall None\n                                  (Evar _secp256k1_u128_mul (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                (Tcons tulong\n                                                                  (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                  ((Eaddrof\n                                     (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   (Etempvar _a4 tulong) ::\n                                   (Etempvar _a4 tulong) :: nil))\n                                (Ssequence\n                                  (Sloop\n                                    (Ssequence\n                                      (Scall (Some _t'2)\n                                        (Evar _secp256k1_u128_check_bits \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            (Tcons tuint Tnil)) tint\n                                          cc_default))\n                                        ((Eaddrof\n                                           (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         (Econst_int (Int.repr 112) tint) ::\n                                         nil))\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Etempvar _t'2 tint)\n                                                     tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'78\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'78 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                 (Econst_int (Int.repr 180) tint) ::\n                                                 (Evar ___stringlit_62 (tarray tschar 62)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip))\n                                    Sbreak)\n                                  (Ssequence\n                                    (Ssequence\n                                      (Scall (Some _t'3)\n                                        (Evar _secp256k1_u128_to_u64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tulong cc_default))\n                                        ((Eaddrof\n                                           (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Scall None\n                                        (Evar _secp256k1_u128_accum_mul \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            (Tcons tulong\n                                              (Tcons tulong Tnil))) tvoid\n                                          cc_default))\n                                        ((Eaddrof\n                                           (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         (Etempvar _R tulong) ::\n                                         (Etempvar _t'3 tulong) :: nil)))\n                                    (Ssequence\n                                      (Scall None\n                                        (Evar _secp256k1_u128_rshift \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            (Tcons tuint Tnil)) tvoid\n                                          cc_default))\n                                        ((Eaddrof\n                                           (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         (Econst_int (Int.repr 64) tint) ::\n                                         nil))\n                                      (Ssequence\n                                        (Sloop\n                                          (Ssequence\n                                            (Scall (Some _t'4)\n                                              (Evar _secp256k1_u128_check_bits \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  (Tcons tuint Tnil)) tint\n                                                cc_default))\n                                              ((Eaddrof\n                                                 (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                               (Econst_int (Int.repr 115) tint) ::\n                                               nil))\n                                            (Sifthenelse (Eunop Onotbool\n                                                           (Etempvar _t'4 tint)\n                                                           tint)\n                                              (Sloop\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'77\n                                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                    (Scall None\n                                                      (Evar _fprintf \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __IO_FILE noattr))\n                                                          (Tcons\n                                                            (tptr tschar)\n                                                            Tnil)) tint\n                                                        {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                      ((Etempvar _t'77 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                       (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                       (Econst_int (Int.repr 183) tint) ::\n                                                       (Evar ___stringlit_63 (tarray tschar 62)) ::\n                                                       nil)))\n                                                  (Scall None\n                                                    (Evar _abort (Tfunction\n                                                                   Tnil tvoid\n                                                                   cc_default))\n                                                    nil))\n                                                Sbreak)\n                                              Sskip))\n                                          Sbreak)\n                                        (Ssequence\n                                          (Sloop\n                                            (Ssequence\n                                              (Scall (Some _t'5)\n                                                (Evar _secp256k1_u128_check_bits \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tuint Tnil)) tint\n                                                  cc_default))\n                                                ((Eaddrof\n                                                   (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 (Econst_int (Int.repr 48) tint) ::\n                                                 nil))\n                                              (Sifthenelse (Eunop Onotbool\n                                                             (Etempvar _t'5 tint)\n                                                             tint)\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'76\n                                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                      (Scall None\n                                                        (Evar _fprintf \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __IO_FILE noattr))\n                                                            (Tcons\n                                                              (tptr tschar)\n                                                              Tnil)) tint\n                                                          {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                        ((Etempvar _t'76 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                         (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                         (Econst_int (Int.repr 184) tint) ::\n                                                         (Evar ___stringlit_64 (tarray tschar 61)) ::\n                                                         nil)))\n                                                    (Scall None\n                                                      (Evar _abort (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                      nil))\n                                                  Sbreak)\n                                                Sskip))\n                                            Sbreak)\n                                          (Ssequence\n                                            (Ssequence\n                                              (Scall (Some _t'6)\n                                                (Evar _secp256k1_u128_to_u64 \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    Tnil) tulong cc_default))\n                                                ((Eaddrof\n                                                   (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 nil))\n                                              (Sset _t3\n                                                (Ebinop Oand\n                                                  (Etempvar _t'6 tulong)\n                                                  (Etempvar _M tulong)\n                                                  tulong)))\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_u128_rshift \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tuint Tnil)) tvoid\n                                                  cc_default))\n                                                ((Eaddrof\n                                                   (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 (Econst_int (Int.repr 52) tint) ::\n                                                 nil))\n                                              (Ssequence\n                                                (Sloop\n                                                  (Sifthenelse (Eunop Onotbool\n                                                                 (Ebinop Oeq\n                                                                   (Ebinop Oshr\n                                                                    (Etempvar _t3 tlong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tlong)\n                                                                   (Econst_int (Int.repr 0) tint)\n                                                                   tint)\n                                                                 tint)\n                                                    (Sloop\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Sset _t'75\n                                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                          (Scall None\n                                                            (Evar _fprintf \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __IO_FILE noattr))\n                                                                (Tcons\n                                                                  (tptr tschar)\n                                                                  Tnil)) tint\n                                                              {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                            ((Etempvar _t'75 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                             (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                             (Econst_int (Int.repr 187) tint) ::\n                                                             (Evar ___stringlit_65 (tarray tschar 43)) ::\n                                                             nil)))\n                                                        (Scall None\n                                                          (Evar _abort \n                                                          (Tfunction Tnil\n                                                            tvoid cc_default))\n                                                          nil))\n                                                      Sbreak)\n                                                    Sskip)\n                                                  Sbreak)\n                                                (Ssequence\n                                                  (Sloop\n                                                    (Ssequence\n                                                      (Scall (Some _t'7)\n                                                        (Evar _secp256k1_u128_check_bits \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tuint\n                                                              Tnil)) tint\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                         (Econst_int (Int.repr 63) tint) ::\n                                                         nil))\n                                                      (Sifthenelse (Eunop Onotbool\n                                                                    (Etempvar _t'7 tint)\n                                                                    tint)\n                                                        (Sloop\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Sset _t'74\n                                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                              (Scall None\n                                                                (Evar _fprintf \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                  tint\n                                                                  {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                ((Etempvar _t'74 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                 (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                 (Econst_int (Int.repr 188) tint) ::\n                                                                 (Evar ___stringlit_66 (tarray tschar 61)) ::\n                                                                 nil)))\n                                                            (Scall None\n                                                              (Evar _abort \n                                                              (Tfunction Tnil\n                                                                tvoid\n                                                                cc_default))\n                                                              nil))\n                                                          Sbreak)\n                                                        Sskip))\n                                                    Sbreak)\n                                                  (Ssequence\n                                                    (Sset _a4\n                                                      (Ebinop Omul\n                                                        (Etempvar _a4 tulong)\n                                                        (Econst_int (Int.repr 2) tint)\n                                                        tulong))\n                                                    (Ssequence\n                                                      (Scall None\n                                                        (Evar _secp256k1_u128_accum_mul \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              (Tcons tulong\n                                                                Tnil))) tvoid\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                         (Etempvar _a0 tulong) ::\n                                                         (Etempvar _a4 tulong) ::\n                                                         nil))\n                                                      (Ssequence\n                                                        (Scall None\n                                                          (Evar _secp256k1_u128_accum_mul \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tulong\n                                                                (Tcons tulong\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           (Ebinop Omul\n                                                             (Etempvar _a1 tulong)\n                                                             (Econst_int (Int.repr 2) tint)\n                                                             tulong) ::\n                                                           (Etempvar _a3 tulong) ::\n                                                           nil))\n                                                        (Ssequence\n                                                          (Scall None\n                                                            (Evar _secp256k1_u128_accum_mul \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                (Tcons tulong\n                                                                  (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                             (Etempvar _a2 tulong) ::\n                                                             (Etempvar _a2 tulong) ::\n                                                             nil))\n                                                          (Ssequence\n                                                            (Sloop\n                                                              (Ssequence\n                                                                (Scall (Some _t'8)\n                                                                  (Evar _secp256k1_u128_check_bits \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                   (Econst_int (Int.repr 115) tint) ::\n                                                                   nil))\n                                                                (Sifthenelse \n                                                                  (Eunop Onotbool\n                                                                    (Etempvar _t'8 tint)\n                                                                    tint)\n                                                                  (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'73\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'73 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 195) tint) ::\n                                                                    (Evar ___stringlit_63 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                  Sskip))\n                                                              Sbreak)\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Scall (Some _t'9)\n                                                                  (Evar _secp256k1_u128_to_u64 \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                   nil))\n                                                                (Scall None\n                                                                  (Evar _secp256k1_u128_accum_mul \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                   (Ebinop Oshl\n                                                                    (Etempvar _R tulong)\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    tulong) ::\n                                                                   (Etempvar _t'9 tulong) ::\n                                                                   nil)))\n                                                              (Ssequence\n                                                                (Sloop\n                                                                  (Ssequence\n                                                                    (Scall (Some _t'10)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 116) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'10 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'72\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'72 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 198) tint) ::\n                                                                    (Evar ___stringlit_67 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                  Sbreak)\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Scall (Some _t'11)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _t4\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'11 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                  (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t4 tlong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'71\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'71 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 201) tint) ::\n                                                                    (Evar ___stringlit_68 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'12)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 64) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'12 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'70\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'70 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 202) tint) ::\n                                                                    (Evar ___stringlit_69 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sset _tx\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t4 tlong)\n                                                                    (Econst_int (Int.repr 48) tint)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sset _t4\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t4 tlong)\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _M tulong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _tx tlong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'69\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'69 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 205) tint) ::\n                                                                    (Evar ___stringlit_70 (tarray tschar 42)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t4 tlong)\n                                                                    (Econst_int (Int.repr 48) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'68\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'68 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 206) tint) ::\n                                                                    (Evar ___stringlit_71 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'13)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 112) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'13 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'67\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'67 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 210) tint) ::\n                                                                    (Evar ___stringlit_62 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    (Etempvar _a4 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Ebinop Omul\n                                                                    (Etempvar _a2 tulong)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tulong) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'14)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'14 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'66\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'66 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 214) tint) ::\n                                                                    (Evar ___stringlit_61 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'15)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _u0\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'15 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _u0 tlong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'65\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'65 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 217) tint) ::\n                                                                    (Evar ___stringlit_72 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'16)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'16 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'64\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'64 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 218) tint) ::\n                                                                    (Evar ___stringlit_78 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sset _u0\n                                                                    (Ebinop Oor\n                                                                    (Ebinop Oshl\n                                                                    (Etempvar _u0 tlong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tlong)\n                                                                    (Etempvar _tx tlong)\n                                                                    tlong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _u0 tlong)\n                                                                    (Econst_int (Int.repr 56) tint)\n                                                                    tlong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'63\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'63 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 222) tint) ::\n                                                                    (Evar ___stringlit_73 (tarray tschar 43)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _u0 tlong) ::\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _R tulong)\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'17)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 113) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'17 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'62\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'62 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 225) tint) ::\n                                                                    (Evar ___stringlit_86 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'18)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'18 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'60\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'60 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'61\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'61 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 228) tint) ::\n                                                                    (Evar ___stringlit_75 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'19)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 61) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'19 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'59\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'59 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 229) tint) ::\n                                                                    (Evar ___stringlit_76 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sset _a0\n                                                                    (Ebinop Omul\n                                                                    (Etempvar _a0 tulong)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'20)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'20 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'58\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'58 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 234) tint) ::\n                                                                    (Evar ___stringlit_77 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a2 tulong) ::\n                                                                    (Etempvar _a4 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'21)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'21 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'57\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'57 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 238) tint) ::\n                                                                    (Evar ___stringlit_61 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'22)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'22 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong) ::\n                                                                    (Etempvar _R tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'23)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 115) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'23 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'56\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'56 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 241) tint) ::\n                                                                    (Evar ___stringlit_74 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'24)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 62) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'24 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'55\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'55 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 242) tint) ::\n                                                                    (Evar ___stringlit_78 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'25)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'25 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'53\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'53 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'54\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'54 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 245) tint) ::\n                                                                    (Evar ___stringlit_79 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'26)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 63) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'26 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'52\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'52 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 246) tint) ::\n                                                                    (Evar ___stringlit_80 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a0 tulong) ::\n                                                                    (Etempvar _a2 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    (Etempvar _a1 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'27)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'27 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'51\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'51 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 251) tint) ::\n                                                                    (Evar ___stringlit_77 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _a3 tulong) ::\n                                                                    (Etempvar _a4 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'28)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 114) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'28 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'50\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'50 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 254) tint) ::\n                                                                    (Evar ___stringlit_61 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'29)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _R tulong) ::\n                                                                    (Etempvar _t'29 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 64) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'30)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 115) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'30 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'49\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'49 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 257) tint) ::\n                                                                    (Evar ___stringlit_74 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'31)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 50) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'31 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'48\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'48 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 258) tint) ::\n                                                                    (Evar ___stringlit_81 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'32)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'32 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'46\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'46 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'47\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'47 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 261) tint) ::\n                                                                    (Evar ___stringlit_82 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'33)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 63) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'33 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'45\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'45 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 262) tint) ::\n                                                                    (Evar ___stringlit_80 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'34)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _d (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Ebinop Oshl\n                                                                    (Etempvar _R tulong)\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    tulong) ::\n                                                                    (Etempvar _t'34 tulong) ::\n                                                                    nil)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _t3 tlong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'35)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 100) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'35 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'44\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'44 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 267) tint) ::\n                                                                    (Evar ___stringlit_83 (tarray tschar 62)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'36)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'36 tulong)\n                                                                    (Etempvar _M tulong)\n                                                                    tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 52) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'42\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'42 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'43\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'43 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 270) tint) ::\n                                                                    (Evar ___stringlit_84 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'37)\n                                                                    (Evar _secp256k1_u128_check_bits \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 48) tint) ::\n                                                                    nil))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'37 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'41\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'41 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 271) tint) ::\n                                                                    (Evar ___stringlit_64 (tarray tschar 61)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'38)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _t'38 tulong)\n                                                                    (Etempvar _t4 tlong)\n                                                                    tulong)))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sset _t'39\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tulong))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'39 tulong)\n                                                                    (Econst_int (Int.repr 49) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'40\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'40 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_49 (tarray tschar 35)) ::\n                                                                    (Econst_int (Int.repr 274) tint) ::\n                                                                    (Evar ___stringlit_85 (tarray tschar 45)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_verify := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_d, (tptr tulong)) :: (_m, tint) :: (_r, tint) ::\n               (_t'3, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'20, tint) :: (_t'19, tint) :: (_t'18, tulong) ::\n               (_t'17, tulong) :: (_t'16, tulong) :: (_t'15, tulong) ::\n               (_t'14, tulong) :: (_t'13, tint) :: (_t'12, tint) ::\n               (_t'11, tint) :: (_t'10, tulong) :: (_t'9, tulong) ::\n               (_t'8, tulong) :: (_t'7, tulong) :: (_t'6, tulong) ::\n               (_t'5, tint) :: (_t'4, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sset _d\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n        (Tstruct __2380 noattr)) _n (tarray tulong 5)))\n  (Ssequence\n    (Ssequence\n      (Ssequence\n        (Sset _t'19\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _normalized tint))\n        (Sifthenelse (Etempvar _t'19 tint)\n          (Sset _t'1 (Ecast (Econst_int (Int.repr 1) tint) tint))\n          (Ssequence\n            (Sset _t'20\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _magnitude tint))\n            (Sset _t'1\n              (Ecast\n                (Ebinop Omul (Econst_int (Int.repr 2) tint)\n                  (Etempvar _t'20 tint) tint) tint)))))\n      (Sset _m (Etempvar _t'1 tint)))\n    (Ssequence\n      (Sset _r (Econst_int (Int.repr 1) tint))\n      (Ssequence\n        (Ssequence\n          (Sset _t'18\n            (Ederef\n              (Ebinop Oadd (Etempvar _d (tptr tulong))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n          (Sset _r\n            (Ebinop Oand (Etempvar _r tint)\n              (Ebinop Ole (Etempvar _t'18 tulong)\n                (Ebinop Omul\n                  (Econst_long (Int64.repr 4503599627370495) tulong)\n                  (Etempvar _m tint) tulong) tint) tint)))\n        (Ssequence\n          (Ssequence\n            (Sset _t'17\n              (Ederef\n                (Ebinop Oadd (Etempvar _d (tptr tulong))\n                  (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n            (Sset _r\n              (Ebinop Oand (Etempvar _r tint)\n                (Ebinop Ole (Etempvar _t'17 tulong)\n                  (Ebinop Omul\n                    (Econst_long (Int64.repr 4503599627370495) tulong)\n                    (Etempvar _m tint) tulong) tint) tint)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'16\n                (Ederef\n                  (Ebinop Oadd (Etempvar _d (tptr tulong))\n                    (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n              (Sset _r\n                (Ebinop Oand (Etempvar _r tint)\n                  (Ebinop Ole (Etempvar _t'16 tulong)\n                    (Ebinop Omul\n                      (Econst_long (Int64.repr 4503599627370495) tulong)\n                      (Etempvar _m tint) tulong) tint) tint)))\n            (Ssequence\n              (Ssequence\n                (Sset _t'15\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _d (tptr tulong))\n                      (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n                (Sset _r\n                  (Ebinop Oand (Etempvar _r tint)\n                    (Ebinop Ole (Etempvar _t'15 tulong)\n                      (Ebinop Omul\n                        (Econst_long (Int64.repr 4503599627370495) tulong)\n                        (Etempvar _m tint) tulong) tint) tint)))\n              (Ssequence\n                (Ssequence\n                  (Sset _t'14\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _d (tptr tulong))\n                        (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n                  (Sset _r\n                    (Ebinop Oand (Etempvar _r tint)\n                      (Ebinop Ole (Etempvar _t'14 tulong)\n                        (Ebinop Omul\n                          (Econst_long (Int64.repr 281474976710655) tulong)\n                          (Etempvar _m tint) tulong) tint) tint)))\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'13\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _magnitude tint))\n                    (Sset _r\n                      (Ebinop Oand (Etempvar _r tint)\n                        (Ebinop Oge (Etempvar _t'13 tint)\n                          (Econst_int (Int.repr 0) tint) tint) tint)))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'12\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _magnitude tint))\n                      (Sset _r\n                        (Ebinop Oand (Etempvar _r tint)\n                          (Ebinop Ole (Etempvar _t'12 tint)\n                            (Econst_int (Int.repr 2048) tint) tint) tint)))\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'5\n                          (Efield\n                            (Ederef\n                              (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _normalized tint))\n                        (Sifthenelse (Etempvar _t'5 tint)\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'11\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                    (Tstruct __2380 noattr)) _magnitude tint))\n                              (Sset _r\n                                (Ebinop Oand (Etempvar _r tint)\n                                  (Ebinop Ole (Etempvar _t'11 tint)\n                                    (Econst_int (Int.repr 1) tint) tint)\n                                  tint)))\n                            (Ssequence\n                              (Ssequence\n                                (Sifthenelse (Etempvar _r tint)\n                                  (Ssequence\n                                    (Sset _t'10\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _d (tptr tulong))\n                                          (Econst_int (Int.repr 4) tint)\n                                          (tptr tulong)) tulong))\n                                    (Sset _t'2\n                                      (Ecast\n                                        (Ebinop Oeq (Etempvar _t'10 tulong)\n                                          (Econst_long (Int64.repr 281474976710655) tulong)\n                                          tint) tbool)))\n                                  (Sset _t'2 (Econst_int (Int.repr 0) tint)))\n                                (Sifthenelse (Etempvar _t'2 tint)\n                                  (Ssequence\n                                    (Sset _t'7\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _d (tptr tulong))\n                                          (Econst_int (Int.repr 3) tint)\n                                          (tptr tulong)) tulong))\n                                    (Ssequence\n                                      (Sset _t'8\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Etempvar _d (tptr tulong))\n                                            (Econst_int (Int.repr 2) tint)\n                                            (tptr tulong)) tulong))\n                                      (Ssequence\n                                        (Sset _t'9\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Etempvar _d (tptr tulong))\n                                              (Econst_int (Int.repr 1) tint)\n                                              (tptr tulong)) tulong))\n                                        (Sset _t'3\n                                          (Ecast\n                                            (Ebinop Oeq\n                                              (Ebinop Oand\n                                                (Ebinop Oand\n                                                  (Etempvar _t'7 tulong)\n                                                  (Etempvar _t'8 tulong)\n                                                  tulong)\n                                                (Etempvar _t'9 tulong)\n                                                tulong)\n                                              (Econst_long (Int64.repr 4503599627370495) tulong)\n                                              tint) tbool)))))\n                                  (Sset _t'3 (Econst_int (Int.repr 0) tint))))\n                              (Sifthenelse (Etempvar _t'3 tint)\n                                (Ssequence\n                                  (Sset _t'6\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Etempvar _d (tptr tulong))\n                                        (Econst_int (Int.repr 0) tint)\n                                        (tptr tulong)) tulong))\n                                  (Sset _r\n                                    (Ebinop Oand (Etempvar _r tint)\n                                      (Ebinop Olt (Etempvar _t'6 tulong)\n                                        (Econst_long (Int64.repr 4503595332402223) tulong)\n                                        tint) tint)))\n                                Sskip)))\n                          Sskip))\n                      (Sloop\n                        (Sifthenelse (Eunop Onotbool\n                                       (Ebinop Oeq (Etempvar _r tint)\n                                         (Econst_int (Int.repr 1) tint) tint)\n                                       tint)\n                          (Sloop\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'4\n                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                (Scall None\n                                  (Evar _fprintf (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __IO_FILE noattr))\n                                                     (Tcons (tptr tschar)\n                                                       Tnil)) tint\n                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                  ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                   (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                   (Econst_int (Int.repr 53) tint) ::\n                                   (Evar ___stringlit_87 (tarray tschar 30)) ::\n                                   nil)))\n                              (Scall None\n                                (Evar _abort (Tfunction Tnil tvoid\n                                               cc_default)) nil))\n                            Sbreak)\n                          Sskip)\n                        Sbreak))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_normalize_weak := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t0, tulong) :: (_t1, tulong) :: (_t2, tulong) ::\n               (_t3, tulong) :: (_t4, tulong) :: (_x, tulong) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t0\n    (Ederef\n      (Ebinop Oadd\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _t1\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _t2\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t3\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t4\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _x\n              (Ebinop Oshr (Etempvar _t4 tulong)\n                (Econst_int (Int.repr 48) tint) tulong))\n            (Ssequence\n              (Sset _t4\n                (Ebinop Oand (Etempvar _t4 tulong)\n                  (Econst_long (Int64.repr 281474976710655) tulong) tulong))\n              (Ssequence\n                (Sset _t0\n                  (Ebinop Oadd (Etempvar _t0 tulong)\n                    (Ebinop Omul (Etempvar _x tulong)\n                      (Econst_long (Int64.repr 4294968273) tulong) tulong)\n                    tulong))\n                (Ssequence\n                  (Sset _t1\n                    (Ebinop Oadd (Etempvar _t1 tulong)\n                      (Ebinop Oshr (Etempvar _t0 tulong)\n                        (Econst_int (Int.repr 52) tint) tulong) tulong))\n                  (Ssequence\n                    (Sset _t0\n                      (Ebinop Oand (Etempvar _t0 tulong)\n                        (Econst_long (Int64.repr 4503599627370495) tulong)\n                        tulong))\n                    (Ssequence\n                      (Sset _t2\n                        (Ebinop Oadd (Etempvar _t2 tulong)\n                          (Ebinop Oshr (Etempvar _t1 tulong)\n                            (Econst_int (Int.repr 52) tint) tulong) tulong))\n                      (Ssequence\n                        (Sset _t1\n                          (Ebinop Oand (Etempvar _t1 tulong)\n                            (Econst_long (Int64.repr 4503599627370495) tulong)\n                            tulong))\n                        (Ssequence\n                          (Sset _t3\n                            (Ebinop Oadd (Etempvar _t3 tulong)\n                              (Ebinop Oshr (Etempvar _t2 tulong)\n                                (Econst_int (Int.repr 52) tint) tulong)\n                              tulong))\n                          (Ssequence\n                            (Sset _t2\n                              (Ebinop Oand (Etempvar _t2 tulong)\n                                (Econst_long (Int64.repr 4503599627370495) tulong)\n                                tulong))\n                            (Ssequence\n                              (Sset _t4\n                                (Ebinop Oadd (Etempvar _t4 tulong)\n                                  (Ebinop Oshr (Etempvar _t3 tulong)\n                                    (Econst_int (Int.repr 52) tint) tulong)\n                                  tulong))\n                              (Ssequence\n                                (Sset _t3\n                                  (Ebinop Oand (Etempvar _t3 tulong)\n                                    (Econst_long (Int64.repr 4503599627370495) tulong)\n                                    tulong))\n                                (Ssequence\n                                  (Sloop\n                                    (Sifthenelse (Eunop Onotbool\n                                                   (Ebinop Oeq\n                                                     (Ebinop Oshr\n                                                       (Etempvar _t4 tulong)\n                                                       (Econst_int (Int.repr 49) tint)\n                                                       tulong)\n                                                     (Econst_int (Int.repr 0) tint)\n                                                     tint) tint)\n                                      (Sloop\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'1\n                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                            (Scall None\n                                              (Evar _fprintf (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                                 (Tcons\n                                                                   (tptr tschar)\n                                                                   Tnil))\n                                                               tint\n                                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                              ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                               (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                               (Econst_int (Int.repr 131) tint) ::\n                                               (Evar ___stringlit_89 (tarray tschar 37)) ::\n                                               nil)))\n                                          (Scall None\n                                            (Evar _abort (Tfunction Tnil\n                                                           tvoid cc_default))\n                                            nil))\n                                        Sbreak)\n                                      Sskip)\n                                    Sbreak)\n                                  (Ssequence\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                              (Tstruct __2380 noattr)) _n\n                                            (tarray tulong 5))\n                                          (Econst_int (Int.repr 0) tint)\n                                          (tptr tulong)) tulong)\n                                      (Etempvar _t0 tulong))\n                                    (Ssequence\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                (Tstruct __2380 noattr)) _n\n                                              (tarray tulong 5))\n                                            (Econst_int (Int.repr 1) tint)\n                                            (tptr tulong)) tulong)\n                                        (Etempvar _t1 tulong))\n                                      (Ssequence\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                  (Tstruct __2380 noattr)) _n\n                                                (tarray tulong 5))\n                                              (Econst_int (Int.repr 2) tint)\n                                              (tptr tulong)) tulong)\n                                          (Etempvar _t2 tulong))\n                                        (Ssequence\n                                          (Sassign\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Ederef\n                                                    (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                    (Tstruct __2380 noattr))\n                                                  _n (tarray tulong 5))\n                                                (Econst_int (Int.repr 3) tint)\n                                                (tptr tulong)) tulong)\n                                            (Etempvar _t3 tulong))\n                                          (Ssequence\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                      (Tstruct __2380 noattr))\n                                                    _n (tarray tulong 5))\n                                                  (Econst_int (Int.repr 4) tint)\n                                                  (tptr tulong)) tulong)\n                                              (Etempvar _t4 tulong))\n                                            (Ssequence\n                                              (Sassign\n                                                (Efield\n                                                  (Ederef\n                                                    (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                    (Tstruct __2380 noattr))\n                                                  _magnitude tint)\n                                                (Econst_int (Int.repr 1) tint))\n                                              (Scall None\n                                                (Evar _secp256k1_fe_verify \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil) tvoid cc_default))\n                                                ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n                                                 nil)))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_normalize_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t0, tulong) :: (_t1, tulong) :: (_t2, tulong) ::\n               (_t3, tulong) :: (_t4, tulong) :: (_m, tulong) ::\n               (_x, tulong) :: (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t0\n    (Ederef\n      (Ebinop Oadd\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _t1\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _t2\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t3\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t4\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _x\n              (Ebinop Oshr (Etempvar _t4 tulong)\n                (Econst_int (Int.repr 48) tint) tulong))\n            (Ssequence\n              (Sset _t4\n                (Ebinop Oand (Etempvar _t4 tulong)\n                  (Econst_long (Int64.repr 281474976710655) tulong) tulong))\n              (Ssequence\n                (Sset _t0\n                  (Ebinop Oadd (Etempvar _t0 tulong)\n                    (Ebinop Omul (Etempvar _x tulong)\n                      (Econst_long (Int64.repr 4294968273) tulong) tulong)\n                    tulong))\n                (Ssequence\n                  (Sset _t1\n                    (Ebinop Oadd (Etempvar _t1 tulong)\n                      (Ebinop Oshr (Etempvar _t0 tulong)\n                        (Econst_int (Int.repr 52) tint) tulong) tulong))\n                  (Ssequence\n                    (Sset _t0\n                      (Ebinop Oand (Etempvar _t0 tulong)\n                        (Econst_long (Int64.repr 4503599627370495) tulong)\n                        tulong))\n                    (Ssequence\n                      (Sset _t2\n                        (Ebinop Oadd (Etempvar _t2 tulong)\n                          (Ebinop Oshr (Etempvar _t1 tulong)\n                            (Econst_int (Int.repr 52) tint) tulong) tulong))\n                      (Ssequence\n                        (Sset _t1\n                          (Ebinop Oand (Etempvar _t1 tulong)\n                            (Econst_long (Int64.repr 4503599627370495) tulong)\n                            tulong))\n                        (Ssequence\n                          (Sset _m (Etempvar _t1 tulong))\n                          (Ssequence\n                            (Sset _t3\n                              (Ebinop Oadd (Etempvar _t3 tulong)\n                                (Ebinop Oshr (Etempvar _t2 tulong)\n                                  (Econst_int (Int.repr 52) tint) tulong)\n                                tulong))\n                            (Ssequence\n                              (Sset _t2\n                                (Ebinop Oand (Etempvar _t2 tulong)\n                                  (Econst_long (Int64.repr 4503599627370495) tulong)\n                                  tulong))\n                              (Ssequence\n                                (Sset _m\n                                  (Ebinop Oand (Etempvar _m tulong)\n                                    (Etempvar _t2 tulong) tulong))\n                                (Ssequence\n                                  (Sset _t4\n                                    (Ebinop Oadd (Etempvar _t4 tulong)\n                                      (Ebinop Oshr (Etempvar _t3 tulong)\n                                        (Econst_int (Int.repr 52) tint)\n                                        tulong) tulong))\n                                  (Ssequence\n                                    (Sset _t3\n                                      (Ebinop Oand (Etempvar _t3 tulong)\n                                        (Econst_long (Int64.repr 4503599627370495) tulong)\n                                        tulong))\n                                    (Ssequence\n                                      (Sset _m\n                                        (Ebinop Oand (Etempvar _m tulong)\n                                          (Etempvar _t3 tulong) tulong))\n                                      (Ssequence\n                                        (Sloop\n                                          (Sifthenelse (Eunop Onotbool\n                                                         (Ebinop Oeq\n                                                           (Ebinop Oshr\n                                                             (Etempvar _t4 tulong)\n                                                             (Econst_int (Int.repr 49) tint)\n                                                             tulong)\n                                                           (Econst_int (Int.repr 0) tint)\n                                                           tint) tint)\n                                            (Sloop\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sset _t'2\n                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                  (Scall None\n                                                    (Evar _fprintf (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                    ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                     (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                                     (Econst_int (Int.repr 156) tint) ::\n                                                     (Evar ___stringlit_89 (tarray tschar 37)) ::\n                                                     nil)))\n                                                (Scall None\n                                                  (Evar _abort (Tfunction\n                                                                 Tnil tvoid\n                                                                 cc_default))\n                                                  nil))\n                                              Sbreak)\n                                            Sskip)\n                                          Sbreak)\n                                        (Ssequence\n                                          (Sset _x\n                                            (Ebinop Oor\n                                              (Ebinop Oshr\n                                                (Etempvar _t4 tulong)\n                                                (Econst_int (Int.repr 48) tint)\n                                                tulong)\n                                              (Ebinop Oand\n                                                (Ebinop Oand\n                                                  (Ebinop Oeq\n                                                    (Etempvar _t4 tulong)\n                                                    (Econst_long (Int64.repr 281474976710655) tulong)\n                                                    tint)\n                                                  (Ebinop Oeq\n                                                    (Etempvar _m tulong)\n                                                    (Econst_long (Int64.repr 4503599627370495) tulong)\n                                                    tint) tint)\n                                                (Ebinop Oge\n                                                  (Etempvar _t0 tulong)\n                                                  (Econst_long (Int64.repr 4503595332402223) tulong)\n                                                  tint) tint) tulong))\n                                          (Ssequence\n                                            (Sifthenelse (Etempvar _x tulong)\n                                              (Ssequence\n                                                (Sset _t0\n                                                  (Ebinop Oadd\n                                                    (Etempvar _t0 tulong)\n                                                    (Econst_long (Int64.repr 4294968273) tulong)\n                                                    tulong))\n                                                (Ssequence\n                                                  (Sset _t1\n                                                    (Ebinop Oadd\n                                                      (Etempvar _t1 tulong)\n                                                      (Ebinop Oshr\n                                                        (Etempvar _t0 tulong)\n                                                        (Econst_int (Int.repr 52) tint)\n                                                        tulong) tulong))\n                                                  (Ssequence\n                                                    (Sset _t0\n                                                      (Ebinop Oand\n                                                        (Etempvar _t0 tulong)\n                                                        (Econst_long (Int64.repr 4503599627370495) tulong)\n                                                        tulong))\n                                                    (Ssequence\n                                                      (Sset _t2\n                                                        (Ebinop Oadd\n                                                          (Etempvar _t2 tulong)\n                                                          (Ebinop Oshr\n                                                            (Etempvar _t1 tulong)\n                                                            (Econst_int (Int.repr 52) tint)\n                                                            tulong) tulong))\n                                                      (Ssequence\n                                                        (Sset _t1\n                                                          (Ebinop Oand\n                                                            (Etempvar _t1 tulong)\n                                                            (Econst_long (Int64.repr 4503599627370495) tulong)\n                                                            tulong))\n                                                        (Ssequence\n                                                          (Sset _t3\n                                                            (Ebinop Oadd\n                                                              (Etempvar _t3 tulong)\n                                                              (Ebinop Oshr\n                                                                (Etempvar _t2 tulong)\n                                                                (Econst_int (Int.repr 52) tint)\n                                                                tulong)\n                                                              tulong))\n                                                          (Ssequence\n                                                            (Sset _t2\n                                                              (Ebinop Oand\n                                                                (Etempvar _t2 tulong)\n                                                                (Econst_long (Int64.repr 4503599627370495) tulong)\n                                                                tulong))\n                                                            (Ssequence\n                                                              (Sset _t4\n                                                                (Ebinop Oadd\n                                                                  (Etempvar _t4 tulong)\n                                                                  (Ebinop Oshr\n                                                                    (Etempvar _t3 tulong)\n                                                                    (Econst_int (Int.repr 52) tint)\n                                                                    tulong)\n                                                                  tulong))\n                                                              (Ssequence\n                                                                (Sset _t3\n                                                                  (Ebinop Oand\n                                                                    (Etempvar _t3 tulong)\n                                                                    (Econst_long (Int64.repr 4503599627370495) tulong)\n                                                                    tulong))\n                                                                (Ssequence\n                                                                  (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t4 tulong)\n                                                                    (Econst_int (Int.repr 48) tint)\n                                                                    tulong)\n                                                                    (Etempvar _x tulong)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'1\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                                                    (Econst_int (Int.repr 170) tint) ::\n                                                                    (Evar ___stringlit_90 (tarray tschar 37)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                  (Sset _t4\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t4 tulong)\n                                                                    (Econst_long (Int64.repr 281474976710655) tulong)\n                                                                    tulong))))))))))))\n                                              Sskip)\n                                            (Ssequence\n                                              (Sassign\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Ederef\n                                                        (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                        (Tstruct __2380 noattr))\n                                                      _n (tarray tulong 5))\n                                                    (Econst_int (Int.repr 0) tint)\n                                                    (tptr tulong)) tulong)\n                                                (Etempvar _t0 tulong))\n                                              (Ssequence\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Efield\n                                                        (Ederef\n                                                          (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                          (Tstruct __2380 noattr))\n                                                        _n (tarray tulong 5))\n                                                      (Econst_int (Int.repr 1) tint)\n                                                      (tptr tulong)) tulong)\n                                                  (Etempvar _t1 tulong))\n                                                (Ssequence\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Efield\n                                                          (Ederef\n                                                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                            (Tstruct __2380 noattr))\n                                                          _n\n                                                          (tarray tulong 5))\n                                                        (Econst_int (Int.repr 2) tint)\n                                                        (tptr tulong))\n                                                      tulong)\n                                                    (Etempvar _t2 tulong))\n                                                  (Ssequence\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Ederef\n                                                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                              (Tstruct __2380 noattr))\n                                                            _n\n                                                            (tarray tulong 5))\n                                                          (Econst_int (Int.repr 3) tint)\n                                                          (tptr tulong))\n                                                        tulong)\n                                                      (Etempvar _t3 tulong))\n                                                    (Ssequence\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Ederef\n                                                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                                (Tstruct __2380 noattr))\n                                                              _n\n                                                              (tarray tulong 5))\n                                                            (Econst_int (Int.repr 4) tint)\n                                                            (tptr tulong))\n                                                          tulong)\n                                                        (Etempvar _t4 tulong))\n                                                      (Ssequence\n                                                        (Sassign\n                                                          (Efield\n                                                            (Ederef\n                                                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                              (Tstruct __2380 noattr))\n                                                            _magnitude tint)\n                                                          (Econst_int (Int.repr 1) tint))\n                                                        (Ssequence\n                                                          (Sassign\n                                                            (Efield\n                                                              (Ederef\n                                                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                                (Tstruct __2380 noattr))\n                                                              _normalized\n                                                              tint)\n                                                            (Econst_int (Int.repr 1) tint))\n                                                          (Scall None\n                                                            (Evar _secp256k1_fe_verify \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                Tnil) tvoid\n                                                              cc_default))\n                                                            ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n                                                             nil)))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_normalizes_to_zero_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t0, tulong) :: (_t1, tulong) :: (_t2, tulong) ::\n               (_t3, tulong) :: (_t4, tulong) :: (_z0, tulong) ::\n               (_z1, tulong) :: (_x, tulong) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t0\n    (Ederef\n      (Ebinop Oadd\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _t4\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _x\n        (Ebinop Oshr (Etempvar _t4 tulong) (Econst_int (Int.repr 48) tint)\n          tulong))\n      (Ssequence\n        (Sset _t0\n          (Ebinop Oadd (Etempvar _t0 tulong)\n            (Ebinop Omul (Etempvar _x tulong)\n              (Econst_long (Int64.repr 4294968273) tulong) tulong) tulong))\n        (Ssequence\n          (Sset _z0\n            (Ebinop Oand (Etempvar _t0 tulong)\n              (Econst_long (Int64.repr 4503599627370495) tulong) tulong))\n          (Ssequence\n            (Sset _z1\n              (Ebinop Oxor (Etempvar _z0 tulong)\n                (Econst_long (Int64.repr 4294968272) tulong) tulong))\n            (Ssequence\n              (Sifthenelse (Ebinop Oand\n                             (Ebinop One (Etempvar _z0 tulong)\n                               (Econst_long (Int64.repr 0) tulong) tint)\n                             (Ebinop One (Etempvar _z1 tulong)\n                               (Econst_long (Int64.repr 4503599627370495) tulong)\n                               tint) tint)\n                (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                Sskip)\n              (Ssequence\n                (Sset _t1\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n                (Ssequence\n                  (Sset _t2\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n                  (Ssequence\n                    (Sset _t3\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                          (Econst_int (Int.repr 3) tint) (tptr tulong))\n                        tulong))\n                    (Ssequence\n                      (Sset _t4\n                        (Ebinop Oand (Etempvar _t4 tulong)\n                          (Econst_long (Int64.repr 281474976710655) tulong)\n                          tulong))\n                      (Ssequence\n                        (Sset _t1\n                          (Ebinop Oadd (Etempvar _t1 tulong)\n                            (Ebinop Oshr (Etempvar _t0 tulong)\n                              (Econst_int (Int.repr 52) tint) tulong) tulong))\n                        (Ssequence\n                          (Sset _t2\n                            (Ebinop Oadd (Etempvar _t2 tulong)\n                              (Ebinop Oshr (Etempvar _t1 tulong)\n                                (Econst_int (Int.repr 52) tint) tulong)\n                              tulong))\n                          (Ssequence\n                            (Sset _t1\n                              (Ebinop Oand (Etempvar _t1 tulong)\n                                (Econst_long (Int64.repr 4503599627370495) tulong)\n                                tulong))\n                            (Ssequence\n                              (Sset _z0\n                                (Ebinop Oor (Etempvar _z0 tulong)\n                                  (Etempvar _t1 tulong) tulong))\n                              (Ssequence\n                                (Sset _z1\n                                  (Ebinop Oand (Etempvar _z1 tulong)\n                                    (Etempvar _t1 tulong) tulong))\n                                (Ssequence\n                                  (Sset _t3\n                                    (Ebinop Oadd (Etempvar _t3 tulong)\n                                      (Ebinop Oshr (Etempvar _t2 tulong)\n                                        (Econst_int (Int.repr 52) tint)\n                                        tulong) tulong))\n                                  (Ssequence\n                                    (Sset _t2\n                                      (Ebinop Oand (Etempvar _t2 tulong)\n                                        (Econst_long (Int64.repr 4503599627370495) tulong)\n                                        tulong))\n                                    (Ssequence\n                                      (Sset _z0\n                                        (Ebinop Oor (Etempvar _z0 tulong)\n                                          (Etempvar _t2 tulong) tulong))\n                                      (Ssequence\n                                        (Sset _z1\n                                          (Ebinop Oand (Etempvar _z1 tulong)\n                                            (Etempvar _t2 tulong) tulong))\n                                        (Ssequence\n                                          (Sset _t4\n                                            (Ebinop Oadd\n                                              (Etempvar _t4 tulong)\n                                              (Ebinop Oshr\n                                                (Etempvar _t3 tulong)\n                                                (Econst_int (Int.repr 52) tint)\n                                                tulong) tulong))\n                                          (Ssequence\n                                            (Sset _t3\n                                              (Ebinop Oand\n                                                (Etempvar _t3 tulong)\n                                                (Econst_long (Int64.repr 4503599627370495) tulong)\n                                                tulong))\n                                            (Ssequence\n                                              (Sset _z0\n                                                (Ebinop Oor\n                                                  (Etempvar _z0 tulong)\n                                                  (Etempvar _t3 tulong)\n                                                  tulong))\n                                              (Ssequence\n                                                (Sset _z1\n                                                  (Ebinop Oand\n                                                    (Etempvar _z1 tulong)\n                                                    (Etempvar _t3 tulong)\n                                                    tulong))\n                                                (Ssequence\n                                                  (Sset _z0\n                                                    (Ebinop Oor\n                                                      (Etempvar _z0 tulong)\n                                                      (Etempvar _t4 tulong)\n                                                      tulong))\n                                                  (Ssequence\n                                                    (Sset _z1\n                                                      (Ebinop Oand\n                                                        (Etempvar _z1 tulong)\n                                                        (Ebinop Oxor\n                                                          (Etempvar _t4 tulong)\n                                                          (Econst_long (Int64.repr 4222124650659840) tulong)\n                                                          tulong) tulong))\n                                                    (Ssequence\n                                                      (Sloop\n                                                        (Sifthenelse \n                                                          (Eunop Onotbool\n                                                            (Ebinop Oeq\n                                                              (Ebinop Oshr\n                                                                (Etempvar _t4 tulong)\n                                                                (Econst_int (Int.repr 49) tint)\n                                                                tulong)\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              tint) tint)\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'1\n                                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                (Scall None\n                                                                  (Evar _fprintf \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                  ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                   (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                                                   (Econst_int (Int.repr 246) tint) ::\n                                                                   (Evar ___stringlit_89 (tarray tschar 37)) ::\n                                                                   nil)))\n                                                              (Scall None\n                                                                (Evar _abort \n                                                                (Tfunction\n                                                                  Tnil tvoid\n                                                                  cc_default))\n                                                                nil))\n                                                            Sbreak)\n                                                          Sskip)\n                                                        Sbreak)\n                                                      (Sreturn (Some \n                                                        (Ebinop Oor\n                                                          (Ebinop Oeq\n                                                            (Etempvar _z0 tulong)\n                                                            (Econst_int (Int.repr 0) tint)\n                                                            tint)\n                                                          (Ebinop Oeq\n                                                            (Etempvar _z1 tulong)\n                                                            (Econst_long (Int64.repr 4503599627370495) tulong)\n                                                            tint) tint))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_set_int := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) :: (_a, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tint) :: (_t'5, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sifthenelse (Ebinop Ole (Econst_int (Int.repr 0) tint)\n                     (Etempvar _a tint) tint)\n        (Sset _t'1\n          (Ecast\n            (Ebinop Ole (Etempvar _a tint) (Econst_int (Int.repr 32767) tint)\n              tint) tbool))\n        (Sset _t'1 (Econst_int (Int.repr 0) tint)))\n      (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'5 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 252) tint) ::\n                 (Evar ___stringlit_91 (tarray tschar 45)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n      (Etempvar _a tint))\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Ssequence\n                (Ssequence\n                  (Sset _t'2 (Ecast (Econst_int (Int.repr 0) tint) tulong))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong)\n                    (Etempvar _t'2 tulong)))\n                (Sset _t'3 (Ecast (Etempvar _t'2 tulong) tulong)))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n                (Etempvar _t'3 tulong)))\n            (Sset _t'4 (Ecast (Etempvar _t'3 tulong) tulong)))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n            (Etempvar _t'4 tulong)))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n          (Etempvar _t'4 tulong)))\n      (Ssequence\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _magnitude tint)\n          (Ebinop One (Etempvar _a tint) (Econst_int (Int.repr 0) tint) tint))\n        (Ssequence\n          (Sassign\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _normalized tint)\n            (Econst_int (Int.repr 1) tint))\n          (Scall None\n            (Evar _secp256k1_fe_verify (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           Tnil) tvoid cc_default))\n            ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_fe_is_zero := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t, (tptr tulong)) ::\n               (_t'7, (tptr (Tstruct __IO_FILE noattr))) :: (_t'6, tint) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n        (Tstruct __2380 noattr)) _n (tarray tulong 5)))\n  (Ssequence\n    (Sloop\n      (Ssequence\n        (Sset _t'6\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _normalized tint))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'6 tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'7 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'7 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_88 (tarray tschar 28)) ::\n                   (Econst_int (Int.repr 265) tint) ::\n                   (Evar ___stringlit_92 (tarray tschar 37)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip))\n      Sbreak)\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_verify (Tfunction\n                                     (Tcons (tptr (Tstruct __2380 noattr))\n                                       Tnil) tvoid cc_default))\n        ((Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Sset _t'1\n          (Ederef\n            (Ebinop Oadd (Etempvar _t (tptr tulong))\n              (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t'2\n            (Ederef\n              (Ebinop Oadd (Etempvar _t (tptr tulong))\n                (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _t'3\n              (Ederef\n                (Ebinop Oadd (Etempvar _t (tptr tulong))\n                  (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n            (Ssequence\n              (Sset _t'4\n                (Ederef\n                  (Ebinop Oadd (Etempvar _t (tptr tulong))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n              (Ssequence\n                (Sset _t'5\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _t (tptr tulong))\n                      (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n                (Sreturn (Some (Ebinop Oeq\n                                 (Ebinop Oor\n                                   (Ebinop Oor\n                                     (Ebinop Oor\n                                       (Ebinop Oor (Etempvar _t'1 tulong)\n                                         (Etempvar _t'2 tulong) tulong)\n                                       (Etempvar _t'3 tulong) tulong)\n                                     (Etempvar _t'4 tulong) tulong)\n                                   (Etempvar _t'5 tulong) tulong)\n                                 (Econst_int (Int.repr 0) tint) tint)))))))))))\n|}.\n\nDefinition f_secp256k1_fe_is_odd := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'3, (tptr (Tstruct __IO_FILE noattr))) :: (_t'2, tint) ::\n               (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _normalized tint))\n      (Sifthenelse (Eunop Onotbool (Etempvar _t'2 tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 273) tint) ::\n                 (Evar ___stringlit_92 (tarray tschar 37)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_verify (Tfunction\n                                   (Tcons (tptr (Tstruct __2380 noattr))\n                                     Tnil) tvoid cc_default))\n      ((Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Sset _t'1\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n      (Sreturn (Some (Ebinop Oand (Etempvar _t'1 tulong)\n                       (Econst_int (Int.repr 1) tint) tulong))))))\n|}.\n\nDefinition f_secp256k1_fe_clear := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_i, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n        (Tstruct __2380 noattr)) _magnitude tint)\n    (Econst_int (Int.repr 0) tint))\n  (Ssequence\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n          (Tstruct __2380 noattr)) _normalized tint)\n      (Econst_int (Int.repr 1) tint))\n    (Ssequence\n      (Sset _i (Econst_int (Int.repr 0) tint))\n      (Sloop\n        (Ssequence\n          (Sifthenelse (Ebinop Olt (Etempvar _i tint)\n                         (Econst_int (Int.repr 5) tint) tint)\n            Sskip\n            Sbreak)\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Etempvar _i tint) (tptr tulong)) tulong)\n            (Econst_int (Int.repr 0) tint)))\n        (Sset _i\n          (Ebinop Oadd (Etempvar _i tint) (Econst_int (Int.repr 1) tint)\n            tint))))))\n|}.\n\nDefinition f_secp256k1_fe_set_b32 := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr tuchar)) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_ret, tint) :: (_t'39, tuchar) :: (_t'38, tuchar) ::\n               (_t'37, tuchar) :: (_t'36, tuchar) :: (_t'35, tuchar) ::\n               (_t'34, tuchar) :: (_t'33, tuchar) :: (_t'32, tuchar) ::\n               (_t'31, tuchar) :: (_t'30, tuchar) :: (_t'29, tuchar) ::\n               (_t'28, tuchar) :: (_t'27, tuchar) :: (_t'26, tuchar) ::\n               (_t'25, tuchar) :: (_t'24, tuchar) :: (_t'23, tuchar) ::\n               (_t'22, tuchar) :: (_t'21, tuchar) :: (_t'20, tuchar) ::\n               (_t'19, tuchar) :: (_t'18, tuchar) :: (_t'17, tuchar) ::\n               (_t'16, tuchar) :: (_t'15, tuchar) :: (_t'14, tuchar) ::\n               (_t'13, tuchar) :: (_t'12, tuchar) :: (_t'11, tuchar) ::\n               (_t'10, tuchar) :: (_t'9, tuchar) :: (_t'8, tuchar) ::\n               (_t'7, tuchar) :: (_t'6, tuchar) :: (_t'5, tulong) ::\n               (_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'33\n      (Ederef\n        (Ebinop Oadd (Etempvar _a (tptr tuchar))\n          (Econst_int (Int.repr 31) tint) (tptr tuchar)) tuchar))\n    (Ssequence\n      (Sset _t'34\n        (Ederef\n          (Ebinop Oadd (Etempvar _a (tptr tuchar))\n            (Econst_int (Int.repr 30) tint) (tptr tuchar)) tuchar))\n      (Ssequence\n        (Sset _t'35\n          (Ederef\n            (Ebinop Oadd (Etempvar _a (tptr tuchar))\n              (Econst_int (Int.repr 29) tint) (tptr tuchar)) tuchar))\n        (Ssequence\n          (Sset _t'36\n            (Ederef\n              (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                (Econst_int (Int.repr 28) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'37\n              (Ederef\n                (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                  (Econst_int (Int.repr 27) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'38\n                (Ederef\n                  (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                    (Econst_int (Int.repr 26) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'39\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                      (Econst_int (Int.repr 25) tint) (tptr tuchar)) tuchar))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n                  (Ebinop Oor\n                    (Ebinop Oor\n                      (Ebinop Oor\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ecast (Etempvar _t'33 tuchar) tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'34 tuchar) tulong)\n                                (Econst_int (Int.repr 8) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'35 tuchar) tulong)\n                              (Econst_int (Int.repr 16) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'36 tuchar) tulong)\n                            (Econst_int (Int.repr 24) tint) tulong) tulong)\n                        (Ebinop Oshl (Ecast (Etempvar _t'37 tuchar) tulong)\n                          (Econst_int (Int.repr 32) tint) tulong) tulong)\n                      (Ebinop Oshl (Ecast (Etempvar _t'38 tuchar) tulong)\n                        (Econst_int (Int.repr 40) tint) tulong) tulong)\n                    (Ebinop Oshl\n                      (Ecast\n                        (Ebinop Oand (Etempvar _t'39 tuchar)\n                          (Econst_int (Int.repr 15) tint) tint) tulong)\n                      (Econst_int (Int.repr 48) tint) tulong) tulong)))))))))\n  (Ssequence\n    (Ssequence\n      (Sset _t'26\n        (Ederef\n          (Ebinop Oadd (Etempvar _a (tptr tuchar))\n            (Econst_int (Int.repr 25) tint) (tptr tuchar)) tuchar))\n      (Ssequence\n        (Sset _t'27\n          (Ederef\n            (Ebinop Oadd (Etempvar _a (tptr tuchar))\n              (Econst_int (Int.repr 24) tint) (tptr tuchar)) tuchar))\n        (Ssequence\n          (Sset _t'28\n            (Ederef\n              (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                (Econst_int (Int.repr 23) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'29\n              (Ederef\n                (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                  (Econst_int (Int.repr 22) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'30\n                (Ederef\n                  (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                    (Econst_int (Int.repr 21) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'31\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                      (Econst_int (Int.repr 20) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'32\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                        (Econst_int (Int.repr 19) tint) (tptr tuchar))\n                      tuchar))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                    (Ebinop Oor\n                      (Ebinop Oor\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ecast\n                                  (Ebinop Oand\n                                    (Ebinop Oshr (Etempvar _t'26 tuchar)\n                                      (Econst_int (Int.repr 4) tint) tint)\n                                    (Econst_int (Int.repr 15) tint) tint)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'27 tuchar) tulong)\n                                  (Econst_int (Int.repr 4) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'28 tuchar) tulong)\n                                (Econst_int (Int.repr 12) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'29 tuchar) tulong)\n                              (Econst_int (Int.repr 20) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'30 tuchar) tulong)\n                            (Econst_int (Int.repr 28) tint) tulong) tulong)\n                        (Ebinop Oshl (Ecast (Etempvar _t'31 tuchar) tulong)\n                          (Econst_int (Int.repr 36) tint) tulong) tulong)\n                      (Ebinop Oshl (Ecast (Etempvar _t'32 tuchar) tulong)\n                        (Econst_int (Int.repr 44) tint) tulong) tulong)))))))))\n    (Ssequence\n      (Ssequence\n        (Sset _t'19\n          (Ederef\n            (Ebinop Oadd (Etempvar _a (tptr tuchar))\n              (Econst_int (Int.repr 18) tint) (tptr tuchar)) tuchar))\n        (Ssequence\n          (Sset _t'20\n            (Ederef\n              (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                (Econst_int (Int.repr 17) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'21\n              (Ederef\n                (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                  (Econst_int (Int.repr 16) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'22\n                (Ederef\n                  (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                    (Econst_int (Int.repr 15) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'23\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                      (Econst_int (Int.repr 14) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'24\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                        (Econst_int (Int.repr 13) tint) (tptr tuchar))\n                      tuchar))\n                  (Ssequence\n                    (Sset _t'25\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                          (Econst_int (Int.repr 12) tint) (tptr tuchar))\n                        tuchar))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                          (Econst_int (Int.repr 2) tint) (tptr tulong))\n                        tulong)\n                      (Ebinop Oor\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ebinop Oor\n                                  (Ecast (Etempvar _t'19 tuchar) tulong)\n                                  (Ebinop Oshl\n                                    (Ecast (Etempvar _t'20 tuchar) tulong)\n                                    (Econst_int (Int.repr 8) tint) tulong)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'21 tuchar) tulong)\n                                  (Econst_int (Int.repr 16) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'22 tuchar) tulong)\n                                (Econst_int (Int.repr 24) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'23 tuchar) tulong)\n                              (Econst_int (Int.repr 32) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'24 tuchar) tulong)\n                            (Econst_int (Int.repr 40) tint) tulong) tulong)\n                        (Ebinop Oshl\n                          (Ecast\n                            (Ebinop Oand (Etempvar _t'25 tuchar)\n                              (Econst_int (Int.repr 15) tint) tint) tulong)\n                          (Econst_int (Int.repr 48) tint) tulong) tulong)))))))))\n      (Ssequence\n        (Ssequence\n          (Sset _t'12\n            (Ederef\n              (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                (Econst_int (Int.repr 12) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'13\n              (Ederef\n                (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                  (Econst_int (Int.repr 11) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'14\n                (Ederef\n                  (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                    (Econst_int (Int.repr 10) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'15\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                      (Econst_int (Int.repr 9) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'16\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                        (Econst_int (Int.repr 8) tint) (tptr tuchar)) tuchar))\n                  (Ssequence\n                    (Sset _t'17\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                          (Econst_int (Int.repr 7) tint) (tptr tuchar))\n                        tuchar))\n                    (Ssequence\n                      (Sset _t'18\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                            (Econst_int (Int.repr 6) tint) (tptr tuchar))\n                          tuchar))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                (Tstruct __2380 noattr)) _n\n                              (tarray tulong 5))\n                            (Econst_int (Int.repr 3) tint) (tptr tulong))\n                          tulong)\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ebinop Oor\n                                  (Ebinop Oor\n                                    (Ecast\n                                      (Ebinop Oand\n                                        (Ebinop Oshr (Etempvar _t'12 tuchar)\n                                          (Econst_int (Int.repr 4) tint)\n                                          tint)\n                                        (Econst_int (Int.repr 15) tint) tint)\n                                      tulong)\n                                    (Ebinop Oshl\n                                      (Ecast (Etempvar _t'13 tuchar) tulong)\n                                      (Econst_int (Int.repr 4) tint) tulong)\n                                    tulong)\n                                  (Ebinop Oshl\n                                    (Ecast (Etempvar _t'14 tuchar) tulong)\n                                    (Econst_int (Int.repr 12) tint) tulong)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'15 tuchar) tulong)\n                                  (Econst_int (Int.repr 20) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'16 tuchar) tulong)\n                                (Econst_int (Int.repr 28) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'17 tuchar) tulong)\n                              (Econst_int (Int.repr 36) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'18 tuchar) tulong)\n                            (Econst_int (Int.repr 44) tint) tulong) tulong)))))))))\n        (Ssequence\n          (Ssequence\n            (Sset _t'6\n              (Ederef\n                (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                  (Econst_int (Int.repr 5) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'7\n                (Ederef\n                  (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                    (Econst_int (Int.repr 4) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'8\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                      (Econst_int (Int.repr 3) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'9\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                        (Econst_int (Int.repr 2) tint) (tptr tuchar)) tuchar))\n                  (Ssequence\n                    (Sset _t'10\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                          (Econst_int (Int.repr 1) tint) (tptr tuchar))\n                        tuchar))\n                    (Ssequence\n                      (Sset _t'11\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _a (tptr tuchar))\n                            (Econst_int (Int.repr 0) tint) (tptr tuchar))\n                          tuchar))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                (Tstruct __2380 noattr)) _n\n                              (tarray tulong 5))\n                            (Econst_int (Int.repr 4) tint) (tptr tulong))\n                          tulong)\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ebinop Oor\n                                  (Ecast (Etempvar _t'6 tuchar) tulong)\n                                  (Ebinop Oshl\n                                    (Ecast (Etempvar _t'7 tuchar) tulong)\n                                    (Econst_int (Int.repr 8) tint) tulong)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'8 tuchar) tulong)\n                                  (Econst_int (Int.repr 16) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'9 tuchar) tulong)\n                                (Econst_int (Int.repr 24) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'10 tuchar) tulong)\n                              (Econst_int (Int.repr 32) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'11 tuchar) tulong)\n                            (Econst_int (Int.repr 40) tint) tulong) tulong))))))))\n          (Ssequence\n            (Ssequence\n              (Sset _t'1\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n              (Ssequence\n                (Sset _t'2\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n                (Ssequence\n                  (Sset _t'3\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n                  (Ssequence\n                    (Sset _t'4\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                          (Econst_int (Int.repr 1) tint) (tptr tulong))\n                        tulong))\n                    (Ssequence\n                      (Sset _t'5\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                (Tstruct __2380 noattr)) _n\n                              (tarray tulong 5))\n                            (Econst_int (Int.repr 0) tint) (tptr tulong))\n                          tulong))\n                      (Sset _ret\n                        (Eunop Onotbool\n                          (Ebinop Oand\n                            (Ebinop Oand\n                              (Ebinop Oeq (Etempvar _t'1 tulong)\n                                (Econst_long (Int64.repr 281474976710655) tulong)\n                                tint)\n                              (Ebinop Oeq\n                                (Ebinop Oand\n                                  (Ebinop Oand (Etempvar _t'2 tulong)\n                                    (Etempvar _t'3 tulong) tulong)\n                                  (Etempvar _t'4 tulong) tulong)\n                                (Econst_long (Int64.repr 4503599627370495) tulong)\n                                tint) tint)\n                            (Ebinop Oge (Etempvar _t'5 tulong)\n                              (Econst_long (Int64.repr 4503595332402223) tulong)\n                              tint) tint) tint)))))))\n            (Ssequence\n              (Sassign\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _magnitude tint)\n                (Econst_int (Int.repr 1) tint))\n              (Ssequence\n                (Sifthenelse (Etempvar _ret tint)\n                  (Ssequence\n                    (Sassign\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _normalized tint)\n                      (Econst_int (Int.repr 1) tint))\n                    (Scall None\n                      (Evar _secp256k1_fe_verify (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __2380 noattr))\n                                                     Tnil) tvoid cc_default))\n                      ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil)))\n                  (Sassign\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _normalized tint)\n                    (Econst_int (Int.repr 0) tint)))\n                (Sreturn (Some (Etempvar _ret tint)))))))))))\n|}.\n\nDefinition f_secp256k1_fe_get_b32 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr tuchar)) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'36, (tptr (Tstruct __IO_FILE noattr))) :: (_t'35, tint) ::\n               (_t'34, tulong) :: (_t'33, tulong) :: (_t'32, tulong) ::\n               (_t'31, tulong) :: (_t'30, tulong) :: (_t'29, tulong) ::\n               (_t'28, tulong) :: (_t'27, tulong) :: (_t'26, tulong) ::\n               (_t'25, tulong) :: (_t'24, tulong) :: (_t'23, tulong) ::\n               (_t'22, tulong) :: (_t'21, tulong) :: (_t'20, tulong) ::\n               (_t'19, tulong) :: (_t'18, tulong) :: (_t'17, tulong) ::\n               (_t'16, tulong) :: (_t'15, tulong) :: (_t'14, tulong) ::\n               (_t'13, tulong) :: (_t'12, tulong) :: (_t'11, tulong) ::\n               (_t'10, tulong) :: (_t'9, tulong) :: (_t'8, tulong) ::\n               (_t'7, tulong) :: (_t'6, tulong) :: (_t'5, tulong) ::\n               (_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'35\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _normalized tint))\n      (Sifthenelse (Eunop Onotbool (Etempvar _t'35 tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'36 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'36 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 363) tint) ::\n                 (Evar ___stringlit_92 (tarray tschar 37)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_verify (Tfunction\n                                   (Tcons (tptr (Tstruct __2380 noattr))\n                                     Tnil) tvoid cc_default))\n      ((Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Sset _t'34\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd (Etempvar _r (tptr tuchar))\n              (Econst_int (Int.repr 0) tint) (tptr tuchar)) tuchar)\n          (Ebinop Oand\n            (Ebinop Oshr (Etempvar _t'34 tulong)\n              (Econst_int (Int.repr 40) tint) tulong)\n            (Econst_int (Int.repr 255) tint) tulong)))\n      (Ssequence\n        (Ssequence\n          (Sset _t'33\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                (Econst_int (Int.repr 1) tint) (tptr tuchar)) tuchar)\n            (Ebinop Oand\n              (Ebinop Oshr (Etempvar _t'33 tulong)\n                (Econst_int (Int.repr 32) tint) tulong)\n              (Econst_int (Int.repr 255) tint) tulong)))\n        (Ssequence\n          (Ssequence\n            (Sset _t'32\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                  (Econst_int (Int.repr 2) tint) (tptr tuchar)) tuchar)\n              (Ebinop Oand\n                (Ebinop Oshr (Etempvar _t'32 tulong)\n                  (Econst_int (Int.repr 24) tint) tulong)\n                (Econst_int (Int.repr 255) tint) tulong)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'31\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                    (Econst_int (Int.repr 3) tint) (tptr tuchar)) tuchar)\n                (Ebinop Oand\n                  (Ebinop Oshr (Etempvar _t'31 tulong)\n                    (Econst_int (Int.repr 16) tint) tulong)\n                  (Econst_int (Int.repr 255) tint) tulong)))\n            (Ssequence\n              (Ssequence\n                (Sset _t'30\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                      (Econst_int (Int.repr 4) tint) (tptr tuchar)) tuchar)\n                  (Ebinop Oand\n                    (Ebinop Oshr (Etempvar _t'30 tulong)\n                      (Econst_int (Int.repr 8) tint) tulong)\n                    (Econst_int (Int.repr 255) tint) tulong)))\n              (Ssequence\n                (Ssequence\n                  (Sset _t'29\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                        (Econst_int (Int.repr 5) tint) (tptr tuchar)) tuchar)\n                    (Ebinop Oand (Etempvar _t'29 tulong)\n                      (Econst_int (Int.repr 255) tint) tulong)))\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'28\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                          (Econst_int (Int.repr 3) tint) (tptr tulong))\n                        tulong))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                          (Econst_int (Int.repr 6) tint) (tptr tuchar))\n                        tuchar)\n                      (Ebinop Oand\n                        (Ebinop Oshr (Etempvar _t'28 tulong)\n                          (Econst_int (Int.repr 44) tint) tulong)\n                        (Econst_int (Int.repr 255) tint) tulong)))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'27\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                (Tstruct __2380 noattr)) _n\n                              (tarray tulong 5))\n                            (Econst_int (Int.repr 3) tint) (tptr tulong))\n                          tulong))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                            (Econst_int (Int.repr 7) tint) (tptr tuchar))\n                          tuchar)\n                        (Ebinop Oand\n                          (Ebinop Oshr (Etempvar _t'27 tulong)\n                            (Econst_int (Int.repr 36) tint) tulong)\n                          (Econst_int (Int.repr 255) tint) tulong)))\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'26\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                  (Tstruct __2380 noattr)) _n\n                                (tarray tulong 5))\n                              (Econst_int (Int.repr 3) tint) (tptr tulong))\n                            tulong))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                              (Econst_int (Int.repr 8) tint) (tptr tuchar))\n                            tuchar)\n                          (Ebinop Oand\n                            (Ebinop Oshr (Etempvar _t'26 tulong)\n                              (Econst_int (Int.repr 28) tint) tulong)\n                            (Econst_int (Int.repr 255) tint) tulong)))\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'25\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                    (Tstruct __2380 noattr)) _n\n                                  (tarray tulong 5))\n                                (Econst_int (Int.repr 3) tint) (tptr tulong))\n                              tulong))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                                (Econst_int (Int.repr 9) tint) (tptr tuchar))\n                              tuchar)\n                            (Ebinop Oand\n                              (Ebinop Oshr (Etempvar _t'25 tulong)\n                                (Econst_int (Int.repr 20) tint) tulong)\n                              (Econst_int (Int.repr 255) tint) tulong)))\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'24\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                      (Tstruct __2380 noattr)) _n\n                                    (tarray tulong 5))\n                                  (Econst_int (Int.repr 3) tint)\n                                  (tptr tulong)) tulong))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                                  (Econst_int (Int.repr 10) tint)\n                                  (tptr tuchar)) tuchar)\n                              (Ebinop Oand\n                                (Ebinop Oshr (Etempvar _t'24 tulong)\n                                  (Econst_int (Int.repr 12) tint) tulong)\n                                (Econst_int (Int.repr 255) tint) tulong)))\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'23\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                        (Tstruct __2380 noattr)) _n\n                                      (tarray tulong 5))\n                                    (Econst_int (Int.repr 3) tint)\n                                    (tptr tulong)) tulong))\n                              (Sassign\n                                (Ederef\n                                  (Ebinop Oadd (Etempvar _r (tptr tuchar))\n                                    (Econst_int (Int.repr 11) tint)\n                                    (tptr tuchar)) tuchar)\n                                (Ebinop Oand\n                                  (Ebinop Oshr (Etempvar _t'23 tulong)\n                                    (Econst_int (Int.repr 4) tint) tulong)\n                                  (Econst_int (Int.repr 255) tint) tulong)))\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'21\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                          (Tstruct __2380 noattr)) _n\n                                        (tarray tulong 5))\n                                      (Econst_int (Int.repr 2) tint)\n                                      (tptr tulong)) tulong))\n                                (Ssequence\n                                  (Sset _t'22\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Ederef\n                                            (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                            (Tstruct __2380 noattr)) _n\n                                          (tarray tulong 5))\n                                        (Econst_int (Int.repr 3) tint)\n                                        (tptr tulong)) tulong))\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Etempvar _r (tptr tuchar))\n                                        (Econst_int (Int.repr 12) tint)\n                                        (tptr tuchar)) tuchar)\n                                    (Ebinop Oor\n                                      (Ebinop Oand\n                                        (Ebinop Oshr (Etempvar _t'21 tulong)\n                                          (Econst_int (Int.repr 48) tint)\n                                          tulong)\n                                        (Econst_int (Int.repr 15) tint)\n                                        tulong)\n                                      (Ebinop Oshl\n                                        (Ebinop Oand (Etempvar _t'22 tulong)\n                                          (Econst_int (Int.repr 15) tint)\n                                          tulong)\n                                        (Econst_int (Int.repr 4) tint)\n                                        tulong) tulong))))\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'20\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Ederef\n                                            (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                            (Tstruct __2380 noattr)) _n\n                                          (tarray tulong 5))\n                                        (Econst_int (Int.repr 2) tint)\n                                        (tptr tulong)) tulong))\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Etempvar _r (tptr tuchar))\n                                        (Econst_int (Int.repr 13) tint)\n                                        (tptr tuchar)) tuchar)\n                                    (Ebinop Oand\n                                      (Ebinop Oshr (Etempvar _t'20 tulong)\n                                        (Econst_int (Int.repr 40) tint)\n                                        tulong)\n                                      (Econst_int (Int.repr 255) tint)\n                                      tulong)))\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'19\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                              (Tstruct __2380 noattr)) _n\n                                            (tarray tulong 5))\n                                          (Econst_int (Int.repr 2) tint)\n                                          (tptr tulong)) tulong))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _r (tptr tuchar))\n                                          (Econst_int (Int.repr 14) tint)\n                                          (tptr tuchar)) tuchar)\n                                      (Ebinop Oand\n                                        (Ebinop Oshr (Etempvar _t'19 tulong)\n                                          (Econst_int (Int.repr 32) tint)\n                                          tulong)\n                                        (Econst_int (Int.repr 255) tint)\n                                        tulong)))\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _t'18\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                (Tstruct __2380 noattr)) _n\n                                              (tarray tulong 5))\n                                            (Econst_int (Int.repr 2) tint)\n                                            (tptr tulong)) tulong))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Etempvar _r (tptr tuchar))\n                                            (Econst_int (Int.repr 15) tint)\n                                            (tptr tuchar)) tuchar)\n                                        (Ebinop Oand\n                                          (Ebinop Oshr\n                                            (Etempvar _t'18 tulong)\n                                            (Econst_int (Int.repr 24) tint)\n                                            tulong)\n                                          (Econst_int (Int.repr 255) tint)\n                                          tulong)))\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'17\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                  (Tstruct __2380 noattr)) _n\n                                                (tarray tulong 5))\n                                              (Econst_int (Int.repr 2) tint)\n                                              (tptr tulong)) tulong))\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Etempvar _r (tptr tuchar))\n                                              (Econst_int (Int.repr 16) tint)\n                                              (tptr tuchar)) tuchar)\n                                          (Ebinop Oand\n                                            (Ebinop Oshr\n                                              (Etempvar _t'17 tulong)\n                                              (Econst_int (Int.repr 16) tint)\n                                              tulong)\n                                            (Econst_int (Int.repr 255) tint)\n                                            tulong)))\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'16\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Ederef\n                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                    (Tstruct __2380 noattr))\n                                                  _n (tarray tulong 5))\n                                                (Econst_int (Int.repr 2) tint)\n                                                (tptr tulong)) tulong))\n                                          (Sassign\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Etempvar _r (tptr tuchar))\n                                                (Econst_int (Int.repr 17) tint)\n                                                (tptr tuchar)) tuchar)\n                                            (Ebinop Oand\n                                              (Ebinop Oshr\n                                                (Etempvar _t'16 tulong)\n                                                (Econst_int (Int.repr 8) tint)\n                                                tulong)\n                                              (Econst_int (Int.repr 255) tint)\n                                              tulong)))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'15\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                      (Tstruct __2380 noattr))\n                                                    _n (tarray tulong 5))\n                                                  (Econst_int (Int.repr 2) tint)\n                                                  (tptr tulong)) tulong))\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Etempvar _r (tptr tuchar))\n                                                  (Econst_int (Int.repr 18) tint)\n                                                  (tptr tuchar)) tuchar)\n                                              (Ebinop Oand\n                                                (Etempvar _t'15 tulong)\n                                                (Econst_int (Int.repr 255) tint)\n                                                tulong)))\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'14\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Ederef\n                                                        (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                        (Tstruct __2380 noattr))\n                                                      _n (tarray tulong 5))\n                                                    (Econst_int (Int.repr 1) tint)\n                                                    (tptr tulong)) tulong))\n                                              (Sassign\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Etempvar _r (tptr tuchar))\n                                                    (Econst_int (Int.repr 19) tint)\n                                                    (tptr tuchar)) tuchar)\n                                                (Ebinop Oand\n                                                  (Ebinop Oshr\n                                                    (Etempvar _t'14 tulong)\n                                                    (Econst_int (Int.repr 44) tint)\n                                                    tulong)\n                                                  (Econst_int (Int.repr 255) tint)\n                                                  tulong)))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'13\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Efield\n                                                        (Ederef\n                                                          (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                          (Tstruct __2380 noattr))\n                                                        _n (tarray tulong 5))\n                                                      (Econst_int (Int.repr 1) tint)\n                                                      (tptr tulong)) tulong))\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Etempvar _r (tptr tuchar))\n                                                      (Econst_int (Int.repr 20) tint)\n                                                      (tptr tuchar)) tuchar)\n                                                  (Ebinop Oand\n                                                    (Ebinop Oshr\n                                                      (Etempvar _t'13 tulong)\n                                                      (Econst_int (Int.repr 36) tint)\n                                                      tulong)\n                                                    (Econst_int (Int.repr 255) tint)\n                                                    tulong)))\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sset _t'12\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Efield\n                                                          (Ederef\n                                                            (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                            (Tstruct __2380 noattr))\n                                                          _n\n                                                          (tarray tulong 5))\n                                                        (Econst_int (Int.repr 1) tint)\n                                                        (tptr tulong))\n                                                      tulong))\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Etempvar _r (tptr tuchar))\n                                                        (Econst_int (Int.repr 21) tint)\n                                                        (tptr tuchar))\n                                                      tuchar)\n                                                    (Ebinop Oand\n                                                      (Ebinop Oshr\n                                                        (Etempvar _t'12 tulong)\n                                                        (Econst_int (Int.repr 28) tint)\n                                                        tulong)\n                                                      (Econst_int (Int.repr 255) tint)\n                                                      tulong)))\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'11\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Ederef\n                                                              (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                              (Tstruct __2380 noattr))\n                                                            _n\n                                                            (tarray tulong 5))\n                                                          (Econst_int (Int.repr 1) tint)\n                                                          (tptr tulong))\n                                                        tulong))\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Etempvar _r (tptr tuchar))\n                                                          (Econst_int (Int.repr 22) tint)\n                                                          (tptr tuchar))\n                                                        tuchar)\n                                                      (Ebinop Oand\n                                                        (Ebinop Oshr\n                                                          (Etempvar _t'11 tulong)\n                                                          (Econst_int (Int.repr 20) tint)\n                                                          tulong)\n                                                        (Econst_int (Int.repr 255) tint)\n                                                        tulong)))\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'10\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Ederef\n                                                                (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                (Tstruct __2380 noattr))\n                                                              _n\n                                                              (tarray tulong 5))\n                                                            (Econst_int (Int.repr 1) tint)\n                                                            (tptr tulong))\n                                                          tulong))\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Etempvar _r (tptr tuchar))\n                                                            (Econst_int (Int.repr 23) tint)\n                                                            (tptr tuchar))\n                                                          tuchar)\n                                                        (Ebinop Oand\n                                                          (Ebinop Oshr\n                                                            (Etempvar _t'10 tulong)\n                                                            (Econst_int (Int.repr 12) tint)\n                                                            tulong)\n                                                          (Econst_int (Int.repr 255) tint)\n                                                          tulong)))\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Sset _t'9\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Ederef\n                                                                  (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                  (Tstruct __2380 noattr))\n                                                                _n\n                                                                (tarray tulong 5))\n                                                              (Econst_int (Int.repr 1) tint)\n                                                              (tptr tulong))\n                                                            tulong))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Etempvar _r (tptr tuchar))\n                                                              (Econst_int (Int.repr 24) tint)\n                                                              (tptr tuchar))\n                                                            tuchar)\n                                                          (Ebinop Oand\n                                                            (Ebinop Oshr\n                                                              (Etempvar _t'9 tulong)\n                                                              (Econst_int (Int.repr 4) tint)\n                                                              tulong)\n                                                            (Econst_int (Int.repr 255) tint)\n                                                            tulong)))\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Sset _t'7\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Efield\n                                                                  (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                  _n\n                                                                  (tarray tulong 5))\n                                                                (Econst_int (Int.repr 0) tint)\n                                                                (tptr tulong))\n                                                              tulong))\n                                                          (Ssequence\n                                                            (Sset _t'8\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                    _n\n                                                                    (tarray tulong 5))\n                                                                  (Econst_int (Int.repr 1) tint)\n                                                                  (tptr tulong))\n                                                                tulong))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Etempvar _r (tptr tuchar))\n                                                                  (Econst_int (Int.repr 25) tint)\n                                                                  (tptr tuchar))\n                                                                tuchar)\n                                                              (Ebinop Oor\n                                                                (Ebinop Oand\n                                                                  (Ebinop Oshr\n                                                                    (Etempvar _t'7 tulong)\n                                                                    (Econst_int (Int.repr 48) tint)\n                                                                    tulong)\n                                                                  (Econst_int (Int.repr 15) tint)\n                                                                  tulong)\n                                                                (Ebinop Oshl\n                                                                  (Ebinop Oand\n                                                                    (Etempvar _t'8 tulong)\n                                                                    (Econst_int (Int.repr 15) tint)\n                                                                    tulong)\n                                                                  (Econst_int (Int.repr 4) tint)\n                                                                  tulong)\n                                                                tulong))))\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Sset _t'6\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                    _n\n                                                                    (tarray tulong 5))\n                                                                  (Econst_int (Int.repr 0) tint)\n                                                                  (tptr tulong))\n                                                                tulong))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Etempvar _r (tptr tuchar))\n                                                                  (Econst_int (Int.repr 26) tint)\n                                                                  (tptr tuchar))\n                                                                tuchar)\n                                                              (Ebinop Oand\n                                                                (Ebinop Oshr\n                                                                  (Etempvar _t'6 tulong)\n                                                                  (Econst_int (Int.repr 40) tint)\n                                                                  tulong)\n                                                                (Econst_int (Int.repr 255) tint)\n                                                                tulong)))\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Sset _t'5\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                    _n\n                                                                    (tarray tulong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                  tulong))\n                                                              (Sassign\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tuchar))\n                                                                    (Econst_int (Int.repr 27) tint)\n                                                                    (tptr tuchar))\n                                                                  tuchar)\n                                                                (Ebinop Oand\n                                                                  (Ebinop Oshr\n                                                                    (Etempvar _t'5 tulong)\n                                                                    (Econst_int (Int.repr 32) tint)\n                                                                    tulong)\n                                                                  (Econst_int (Int.repr 255) tint)\n                                                                  tulong)))\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'4\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                    _n\n                                                                    (tarray tulong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tuchar))\n                                                                    (Econst_int (Int.repr 28) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                  (Ebinop Oand\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'4 tulong)\n                                                                    (Econst_int (Int.repr 24) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 255) tint)\n                                                                    tulong)))\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Sset _t'3\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                    _n\n                                                                    (tarray tulong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                  (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tuchar))\n                                                                    (Econst_int (Int.repr 29) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Ebinop Oand\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'3 tulong)\n                                                                    (Econst_int (Int.repr 16) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 255) tint)\n                                                                    tulong)))\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Sset _t'2\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                    _n\n                                                                    (tarray tulong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tuchar))\n                                                                    (Econst_int (Int.repr 30) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Ebinop Oand\n                                                                    (Ebinop Oshr\n                                                                    (Etempvar _t'2 tulong)\n                                                                    (Econst_int (Int.repr 8) tint)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 255) tint)\n                                                                    tulong)))\n                                                                  (Ssequence\n                                                                    (Sset _t'1\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                                                    (Tstruct __2380 noattr))\n                                                                    _n\n                                                                    (tarray tulong 5))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _r (tptr tuchar))\n                                                                    (Econst_int (Int.repr 31) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Ebinop Oand\n                                                                    (Etempvar _t'1 tulong)\n                                                                    (Econst_int (Int.repr 255) tint)\n                                                                    tulong))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_negate := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: (_m, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'10, (tptr (Tstruct __IO_FILE noattr))) :: (_t'9, tint) ::\n               (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'7, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'6, (tptr (Tstruct __IO_FILE noattr))) :: (_t'5, tulong) ::\n               (_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'9\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _magnitude tint))\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Ole (Etempvar _t'9 tint) (Etempvar _m tint)\n                       tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'10 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'10 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 402) tint) ::\n                 (Evar ___stringlit_93 (tarray tschar 41)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_verify (Tfunction\n                                   (Tcons (tptr (Tstruct __2380 noattr))\n                                     Tnil) tvoid cc_default))\n      ((Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop Oge\n                         (Ebinop Omul\n                           (Ebinop Omul\n                             (Econst_long (Int64.repr 4503595332402223) tulong)\n                             (Econst_int (Int.repr 2) tint) tulong)\n                           (Ebinop Oadd (Etempvar _m tint)\n                             (Econst_int (Int.repr 1) tint) tint) tulong)\n                         (Ebinop Omul\n                           (Ebinop Omul\n                             (Econst_long (Int64.repr 4503599627370495) tulong)\n                             (Econst_int (Int.repr 2) tint) tulong)\n                           (Etempvar _m tint) tulong) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'8 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_88 (tarray tschar 28)) ::\n                   (Econst_int (Int.repr 404) tint) ::\n                   (Evar ___stringlit_94 (tarray tschar 86)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip)\n        Sbreak)\n      (Ssequence\n        (Sloop\n          (Sifthenelse (Eunop Onotbool\n                         (Ebinop Oge\n                           (Ebinop Omul\n                             (Ebinop Omul\n                               (Econst_long (Int64.repr 4503599627370495) tulong)\n                               (Econst_int (Int.repr 2) tint) tulong)\n                             (Ebinop Oadd (Etempvar _m tint)\n                               (Econst_int (Int.repr 1) tint) tint) tulong)\n                           (Ebinop Omul\n                             (Ebinop Omul\n                               (Econst_long (Int64.repr 4503599627370495) tulong)\n                               (Econst_int (Int.repr 2) tint) tulong)\n                             (Etempvar _m tint) tulong) tint) tint)\n            (Sloop\n              (Ssequence\n                (Ssequence\n                  (Sset _t'7\n                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                  (Scall None\n                    (Evar _fprintf (Tfunction\n                                     (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                       (Tcons (tptr tschar) Tnil)) tint\n                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                    ((Etempvar _t'7 (tptr (Tstruct __IO_FILE noattr))) ::\n                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                     (Evar ___stringlit_88 (tarray tschar 28)) ::\n                     (Econst_int (Int.repr 405) tint) ::\n                     (Evar ___stringlit_95 (tarray tschar 86)) :: nil)))\n                (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                  nil))\n              Sbreak)\n            Sskip)\n          Sbreak)\n        (Ssequence\n          (Sloop\n            (Sifthenelse (Eunop Onotbool\n                           (Ebinop Oge\n                             (Ebinop Omul\n                               (Ebinop Omul\n                                 (Econst_long (Int64.repr 281474976710655) tulong)\n                                 (Econst_int (Int.repr 2) tint) tulong)\n                               (Ebinop Oadd (Etempvar _m tint)\n                                 (Econst_int (Int.repr 1) tint) tint) tulong)\n                             (Ebinop Omul\n                               (Ebinop Omul\n                                 (Econst_long (Int64.repr 281474976710655) tulong)\n                                 (Econst_int (Int.repr 2) tint) tulong)\n                               (Etempvar _m tint) tulong) tint) tint)\n              (Sloop\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'6\n                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                    (Scall None\n                      (Evar _fprintf (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct __IO_FILE noattr))\n                                         (Tcons (tptr tschar) Tnil)) tint\n                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                      ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                       (Evar ___stringlit_88 (tarray tschar 28)) ::\n                       (Econst_int (Int.repr 406) tint) ::\n                       (Evar ___stringlit_96 (tarray tschar 86)) :: nil)))\n                  (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                    nil))\n                Sbreak)\n              Sskip)\n            Sbreak)\n          (Ssequence\n            (Ssequence\n              (Sset _t'5\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n                (Ebinop Osub\n                  (Ebinop Omul\n                    (Ebinop Omul\n                      (Econst_long (Int64.repr 4503595332402223) tulong)\n                      (Econst_int (Int.repr 2) tint) tulong)\n                    (Ebinop Oadd (Etempvar _m tint)\n                      (Econst_int (Int.repr 1) tint) tint) tulong)\n                  (Etempvar _t'5 tulong) tulong)))\n            (Ssequence\n              (Ssequence\n                (Sset _t'4\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                  (Ebinop Osub\n                    (Ebinop Omul\n                      (Ebinop Omul\n                        (Econst_long (Int64.repr 4503599627370495) tulong)\n                        (Econst_int (Int.repr 2) tint) tulong)\n                      (Ebinop Oadd (Etempvar _m tint)\n                        (Econst_int (Int.repr 1) tint) tint) tulong)\n                    (Etempvar _t'4 tulong) tulong)))\n              (Ssequence\n                (Ssequence\n                  (Sset _t'3\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n                    (Ebinop Osub\n                      (Ebinop Omul\n                        (Ebinop Omul\n                          (Econst_long (Int64.repr 4503599627370495) tulong)\n                          (Econst_int (Int.repr 2) tint) tulong)\n                        (Ebinop Oadd (Etempvar _m tint)\n                          (Econst_int (Int.repr 1) tint) tint) tulong)\n                      (Etempvar _t'3 tulong) tulong)))\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'2\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                          (Econst_int (Int.repr 3) tint) (tptr tulong))\n                        tulong))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                          (Econst_int (Int.repr 3) tint) (tptr tulong))\n                        tulong)\n                      (Ebinop Osub\n                        (Ebinop Omul\n                          (Ebinop Omul\n                            (Econst_long (Int64.repr 4503599627370495) tulong)\n                            (Econst_int (Int.repr 2) tint) tulong)\n                          (Ebinop Oadd (Etempvar _m tint)\n                            (Econst_int (Int.repr 1) tint) tint) tulong)\n                        (Etempvar _t'2 tulong) tulong)))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'1\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                                (Tstruct __2380 noattr)) _n\n                              (tarray tulong 5))\n                            (Econst_int (Int.repr 4) tint) (tptr tulong))\n                          tulong))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                (Tstruct __2380 noattr)) _n\n                              (tarray tulong 5))\n                            (Econst_int (Int.repr 4) tint) (tptr tulong))\n                          tulong)\n                        (Ebinop Osub\n                          (Ebinop Omul\n                            (Ebinop Omul\n                              (Econst_long (Int64.repr 281474976710655) tulong)\n                              (Econst_int (Int.repr 2) tint) tulong)\n                            (Ebinop Oadd (Etempvar _m tint)\n                              (Econst_int (Int.repr 1) tint) tint) tulong)\n                          (Etempvar _t'1 tulong) tulong)))\n                    (Ssequence\n                      (Sassign\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _magnitude tint)\n                        (Ebinop Oadd (Etempvar _m tint)\n                          (Econst_int (Int.repr 1) tint) tint))\n                      (Ssequence\n                        (Sassign\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                              (Tstruct __2380 noattr)) _normalized tint)\n                          (Econst_int (Int.repr 0) tint))\n                        (Scall None\n                          (Evar _secp256k1_fe_verify (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __2380 noattr))\n                                                         Tnil) tvoid\n                                                       cc_default))\n                          ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n                           nil))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_mul_int := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) :: (_a, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'6, tulong) :: (_t'5, tulong) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'6\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n      (Ebinop Omul (Etempvar _t'6 tulong) (Etempvar _a tint) tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'5\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n        (Ebinop Omul (Etempvar _t'5 tulong) (Etempvar _a tint) tulong)))\n    (Ssequence\n      (Ssequence\n        (Sset _t'4\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n          (Ebinop Omul (Etempvar _t'4 tulong) (Etempvar _a tint) tulong)))\n      (Ssequence\n        (Ssequence\n          (Sset _t'3\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n            (Ebinop Omul (Etempvar _t'3 tulong) (Etempvar _a tint) tulong)))\n        (Ssequence\n          (Ssequence\n            (Sset _t'2\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong)\n              (Ebinop Omul (Etempvar _t'2 tulong) (Etempvar _a tint) tulong)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'1\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _magnitude tint))\n              (Sassign\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _magnitude tint)\n                (Ebinop Omul (Etempvar _t'1 tint) (Etempvar _a tint) tint)))\n            (Ssequence\n              (Sassign\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _normalized tint)\n                (Econst_int (Int.repr 0) tint))\n              (Scall None\n                (Evar _secp256k1_fe_verify (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __2380 noattr))\n                                               Tnil) tvoid cc_default))\n                ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil)))))))))\n|}.\n\nDefinition f_secp256k1_fe_add_int := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) :: (_a, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'4, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'3, (tptr (Tstruct __IO_FILE noattr))) :: (_t'2, tulong) ::\n               (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_fe_verify (Tfunction\n                                 (Tcons (tptr (Tstruct __2380 noattr)) Tnil)\n                                 tvoid cc_default))\n    ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Oge (Etempvar _a tint)\n                       (Econst_int (Int.repr 0) tint) tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'4 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 436) tint) ::\n                 (Evar ___stringlit_97 (tarray tschar 30)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop Ole (Etempvar _a tint)\n                         (Econst_int (Int.repr 32767) tint) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_88 (tarray tschar 28)) ::\n                   (Econst_int (Int.repr 437) tint) ::\n                   (Evar ___stringlit_98 (tarray tschar 35)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip)\n        Sbreak)\n      (Ssequence\n        (Ssequence\n          (Sset _t'2\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n            (Ebinop Oadd (Etempvar _t'2 tulong) (Etempvar _a tint) tulong)))\n        (Ssequence\n          (Ssequence\n            (Sset _t'1\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _magnitude tint))\n            (Sassign\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _magnitude tint)\n              (Ebinop Oadd (Etempvar _t'1 tint)\n                (Econst_int (Int.repr 1) tint) tint)))\n          (Ssequence\n            (Sassign\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _normalized tint)\n              (Econst_int (Int.repr 0) tint))\n            (Scall None\n              (Evar _secp256k1_fe_verify (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             Tnil) tvoid cc_default))\n              ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))))))))\n|}.\n\nDefinition f_secp256k1_fe_add := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'12, tulong) :: (_t'11, tulong) :: (_t'10, tulong) ::\n               (_t'9, tulong) :: (_t'8, tulong) :: (_t'7, tulong) ::\n               (_t'6, tulong) :: (_t'5, tulong) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_fe_verify (Tfunction\n                                 (Tcons (tptr (Tstruct __2380 noattr)) Tnil)\n                                 tvoid cc_default))\n    ((Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n  (Ssequence\n    (Ssequence\n      (Sset _t'11\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t'12\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n          (Ebinop Oadd (Etempvar _t'11 tulong) (Etempvar _t'12 tulong)\n            tulong))))\n    (Ssequence\n      (Ssequence\n        (Sset _t'9\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t'10\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n            (Ebinop Oadd (Etempvar _t'9 tulong) (Etempvar _t'10 tulong)\n              tulong))))\n      (Ssequence\n        (Ssequence\n          (Sset _t'7\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _t'8\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n              (Ebinop Oadd (Etempvar _t'7 tulong) (Etempvar _t'8 tulong)\n                tulong))))\n        (Ssequence\n          (Ssequence\n            (Sset _t'5\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n            (Ssequence\n              (Sset _t'6\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n                (Ebinop Oadd (Etempvar _t'5 tulong) (Etempvar _t'6 tulong)\n                  tulong))))\n          (Ssequence\n            (Ssequence\n              (Sset _t'3\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n              (Ssequence\n                (Sset _t'4\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong)\n                  (Ebinop Oadd (Etempvar _t'3 tulong) (Etempvar _t'4 tulong)\n                    tulong))))\n            (Ssequence\n              (Ssequence\n                (Sset _t'1\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _magnitude tint))\n                (Ssequence\n                  (Sset _t'2\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _magnitude tint))\n                  (Sassign\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _magnitude tint)\n                    (Ebinop Oadd (Etempvar _t'1 tint) (Etempvar _t'2 tint)\n                      tint))))\n              (Ssequence\n                (Sassign\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _normalized tint)\n                  (Econst_int (Int.repr 0) tint))\n                (Scall None\n                  (Evar _secp256k1_fe_verify (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 Tnil) tvoid cc_default))\n                  ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))))))))))\n|}.\n\nDefinition f_secp256k1_fe_mul := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) ::\n                (_b, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'6, (tptr (Tstruct __IO_FILE noattr))) :: (_t'5, tint) ::\n               (_t'4, (tptr (Tstruct __IO_FILE noattr))) :: (_t'3, tint) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'5\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _magnitude tint))\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Ole (Etempvar _t'5 tint)\n                       (Econst_int (Int.repr 8) tint) tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'6 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 465) tint) ::\n                 (Evar ___stringlit_99 (tarray tschar 41)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Ssequence\n        (Sset _t'3\n          (Efield\n            (Ederef (Etempvar _b (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _magnitude tint))\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop Ole (Etempvar _t'3 tint)\n                         (Econst_int (Int.repr 8) tint) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'4 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_88 (tarray tschar 28)) ::\n                   (Econst_int (Int.repr 466) tint) ::\n                   (Evar ___stringlit_100 (tarray tschar 41)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip))\n      Sbreak)\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_verify (Tfunction\n                                     (Tcons (tptr (Tstruct __2380 noattr))\n                                       Tnil) tvoid cc_default))\n        ((Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_verify (Tfunction\n                                       (Tcons (tptr (Tstruct __2380 noattr))\n                                         Tnil) tvoid cc_default))\n          ((Etempvar _b (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Sloop\n            (Sifthenelse (Eunop Onotbool\n                           (Ebinop One\n                             (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                             (Etempvar _b (tptr (Tstruct __2380 noattr)))\n                             tint) tint)\n              (Sloop\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'2\n                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                    (Scall None\n                      (Evar _fprintf (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct __IO_FILE noattr))\n                                         (Tcons (tptr tschar) Tnil)) tint\n                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                      ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                       (Evar ___stringlit_88 (tarray tschar 28)) ::\n                       (Econst_int (Int.repr 469) tint) ::\n                       (Evar ___stringlit_59 (tarray tschar 30)) :: nil)))\n                  (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                    nil))\n                Sbreak)\n              Sskip)\n            Sbreak)\n          (Ssequence\n            (Sloop\n              (Sifthenelse (Eunop Onotbool\n                             (Ebinop One\n                               (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                               (Etempvar _b (tptr (Tstruct __2380 noattr)))\n                               tint) tint)\n                (Sloop\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'1\n                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                      (Scall None\n                        (Evar _fprintf (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __IO_FILE noattr))\n                                           (Tcons (tptr tschar) Tnil)) tint\n                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                        ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                         (Evar ___stringlit_88 (tarray tschar 28)) ::\n                         (Econst_int (Int.repr 470) tint) ::\n                         (Evar ___stringlit_60 (tarray tschar 30)) :: nil)))\n                    (Scall None\n                      (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                  Sbreak)\n                Sskip)\n              Sbreak)\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_mul_inner (Tfunction\n                                                (Tcons (tptr tulong)\n                                                  (Tcons (tptr tulong)\n                                                    (Tcons (tptr tulong)\n                                                      Tnil))) tvoid\n                                                cc_default))\n                ((Efield\n                   (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                     (Tstruct __2380 noattr)) _n (tarray tulong 5)) ::\n                 (Efield\n                   (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                     (Tstruct __2380 noattr)) _n (tarray tulong 5)) ::\n                 (Efield\n                   (Ederef (Etempvar _b (tptr (Tstruct __2380 noattr)))\n                     (Tstruct __2380 noattr)) _n (tarray tulong 5)) :: nil))\n              (Ssequence\n                (Sassign\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _magnitude tint)\n                  (Econst_int (Int.repr 1) tint))\n                (Ssequence\n                  (Sassign\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _normalized tint)\n                    (Econst_int (Int.repr 0) tint))\n                  (Scall None\n                    (Evar _secp256k1_fe_verify (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil) tvoid cc_default))\n                    ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil)))))))))))\n|}.\n\nDefinition f_secp256k1_fe_sqr := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'2, (tptr (Tstruct __IO_FILE noattr))) :: (_t'1, tint) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'1\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _magnitude tint))\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Ole (Etempvar _t'1 tint)\n                       (Econst_int (Int.repr 8) tint) tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 482) tint) ::\n                 (Evar ___stringlit_99 (tarray tschar 41)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_verify (Tfunction\n                                   (Tcons (tptr (Tstruct __2380 noattr))\n                                     Tnil) tvoid cc_default))\n      ((Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_sqr_inner (Tfunction\n                                        (Tcons (tptr tulong)\n                                          (Tcons (tptr tulong) Tnil)) tvoid\n                                        cc_default))\n        ((Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n             (Tstruct __2380 noattr)) _n (tarray tulong 5)) ::\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n             (Tstruct __2380 noattr)) _n (tarray tulong 5)) :: nil))\n      (Ssequence\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _magnitude tint)\n          (Econst_int (Int.repr 1) tint))\n        (Ssequence\n          (Sassign\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _normalized tint)\n            (Econst_int (Int.repr 0) tint))\n          (Scall None\n            (Evar _secp256k1_fe_verify (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           Tnil) tvoid cc_default))\n            ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_fe_cmov := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: (_flag, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_mask0, tulong) :: (_mask1, tulong) :: (_t'12, tulong) ::\n               (_t'11, tulong) :: (_t'10, tulong) :: (_t'9, tulong) ::\n               (_t'8, tulong) :: (_t'7, tulong) :: (_t'6, tulong) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _mask0\n    (Ebinop Oadd (Etempvar _flag tint)\n      (Eunop Onotint (Ecast (Econst_int (Int.repr 0) tint) tulong) tulong)\n      tulong))\n  (Ssequence\n    (Sset _mask1 (Eunop Onotint (Etempvar _mask0 tulong) tulong))\n    (Ssequence\n      (Ssequence\n        (Sset _t'11\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t'12\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n            (Ebinop Oor\n              (Ebinop Oand (Etempvar _t'11 tulong) (Etempvar _mask0 tulong)\n                tulong)\n              (Ebinop Oand (Etempvar _t'12 tulong) (Etempvar _mask1 tulong)\n                tulong) tulong))))\n      (Ssequence\n        (Ssequence\n          (Sset _t'9\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _t'10\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n              (Ebinop Oor\n                (Ebinop Oand (Etempvar _t'9 tulong) (Etempvar _mask0 tulong)\n                  tulong)\n                (Ebinop Oand (Etempvar _t'10 tulong) (Etempvar _mask1 tulong)\n                  tulong) tulong))))\n        (Ssequence\n          (Ssequence\n            (Sset _t'7\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n            (Ssequence\n              (Sset _t'8\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n                (Ebinop Oor\n                  (Ebinop Oand (Etempvar _t'7 tulong)\n                    (Etempvar _mask0 tulong) tulong)\n                  (Ebinop Oand (Etempvar _t'8 tulong)\n                    (Etempvar _mask1 tulong) tulong) tulong))))\n          (Ssequence\n            (Ssequence\n              (Sset _t'5\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n              (Ssequence\n                (Sset _t'6\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n                  (Ebinop Oor\n                    (Ebinop Oand (Etempvar _t'5 tulong)\n                      (Etempvar _mask0 tulong) tulong)\n                    (Ebinop Oand (Etempvar _t'6 tulong)\n                      (Etempvar _mask1 tulong) tulong) tulong))))\n            (Ssequence\n              (Ssequence\n                (Sset _t'3\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                      (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n                (Ssequence\n                  (Sset _t'4\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                        (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong)\n                    (Ebinop Oor\n                      (Ebinop Oand (Etempvar _t'3 tulong)\n                        (Etempvar _mask0 tulong) tulong)\n                      (Ebinop Oand (Etempvar _t'4 tulong)\n                        (Etempvar _mask1 tulong) tulong) tulong))))\n              (Sifthenelse (Etempvar _flag tint)\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'2\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _magnitude tint))\n                    (Sassign\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _magnitude tint)\n                      (Etempvar _t'2 tint)))\n                  (Ssequence\n                    (Sset _t'1\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _normalized tint))\n                    (Sassign\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                          (Tstruct __2380 noattr)) _normalized tint)\n                      (Etempvar _t'1 tint))))\n                Sskip))))))))\n|}.\n\nDefinition f_secp256k1_fe_half := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t0, tulong) :: (_t1, tulong) :: (_t2, tulong) ::\n               (_t3, tulong) :: (_t4, tulong) :: (_one, tulong) ::\n               (_mask, tulong) ::\n               (_t'4, (tptr (Tstruct __IO_FILE noattr))) :: (_t'3, tint) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) :: (_t'1, tint) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sset _t0\n    (Ederef\n      (Ebinop Oadd\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _n (tarray tulong 5))\n        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _t1\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _t2\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t3\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t4\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _one (Ecast (Econst_int (Int.repr 1) tint) tulong))\n            (Ssequence\n              (Sset _mask\n                (Ebinop Oshr\n                  (Eunop Oneg\n                    (Ebinop Oand (Etempvar _t0 tulong) (Etempvar _one tulong)\n                      tulong) tulong) (Econst_int (Int.repr 12) tint) tulong))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_verify (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 Tnil) tvoid cc_default))\n                  ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Sloop\n                    (Ssequence\n                      (Sset _t'3\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                            (Tstruct __2380 noattr)) _magnitude tint))\n                      (Sifthenelse (Eunop Onotbool\n                                     (Ebinop Olt (Etempvar _t'3 tint)\n                                       (Econst_int (Int.repr 32) tint) tint)\n                                     tint)\n                        (Sloop\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'4\n                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                              (Scall None\n                                (Evar _fprintf (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                   (Tcons (tptr tschar) Tnil))\n                                                 tint\n                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                 (Econst_int (Int.repr 520) tint) ::\n                                 (Evar ___stringlit_101 (tarray tschar 41)) ::\n                                 nil)))\n                            (Scall None\n                              (Evar _abort (Tfunction Tnil tvoid cc_default))\n                              nil))\n                          Sbreak)\n                        Sskip))\n                    Sbreak)\n                  (Ssequence\n                    (Sset _t0\n                      (Ebinop Oadd (Etempvar _t0 tulong)\n                        (Ebinop Oand\n                          (Econst_long (Int64.repr 4503595332402223) tulong)\n                          (Etempvar _mask tulong) tulong) tulong))\n                    (Ssequence\n                      (Sset _t1\n                        (Ebinop Oadd (Etempvar _t1 tulong)\n                          (Etempvar _mask tulong) tulong))\n                      (Ssequence\n                        (Sset _t2\n                          (Ebinop Oadd (Etempvar _t2 tulong)\n                            (Etempvar _mask tulong) tulong))\n                        (Ssequence\n                          (Sset _t3\n                            (Ebinop Oadd (Etempvar _t3 tulong)\n                              (Etempvar _mask tulong) tulong))\n                          (Ssequence\n                            (Sset _t4\n                              (Ebinop Oadd (Etempvar _t4 tulong)\n                                (Ebinop Oshr (Etempvar _mask tulong)\n                                  (Econst_int (Int.repr 4) tint) tulong)\n                                tulong))\n                            (Ssequence\n                              (Sloop\n                                (Sifthenelse (Eunop Onotbool\n                                               (Ebinop Oeq\n                                                 (Ebinop Oand\n                                                   (Etempvar _t0 tulong)\n                                                   (Etempvar _one tulong)\n                                                   tulong)\n                                                 (Econst_int (Int.repr 0) tint)\n                                                 tint) tint)\n                                  (Sloop\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'2\n                                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                        (Scall None\n                                          (Evar _fprintf (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __IO_FILE noattr))\n                                                             (Tcons\n                                                               (tptr tschar)\n                                                               Tnil)) tint\n                                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                          ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                           (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                           (Econst_int (Int.repr 539) tint) ::\n                                           (Evar ___stringlit_102 (tarray tschar 39)) ::\n                                           nil)))\n                                      (Scall None\n                                        (Evar _abort (Tfunction Tnil tvoid\n                                                       cc_default)) nil))\n                                    Sbreak)\n                                  Sskip)\n                                Sbreak)\n                              (Ssequence\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                          (Tstruct __2380 noattr)) _n\n                                        (tarray tulong 5))\n                                      (Econst_int (Int.repr 0) tint)\n                                      (tptr tulong)) tulong)\n                                  (Ebinop Oadd\n                                    (Ebinop Oshr (Etempvar _t0 tulong)\n                                      (Econst_int (Int.repr 1) tint) tulong)\n                                    (Ebinop Oshl\n                                      (Ebinop Oand (Etempvar _t1 tulong)\n                                        (Etempvar _one tulong) tulong)\n                                      (Econst_int (Int.repr 51) tint) tulong)\n                                    tulong))\n                                (Ssequence\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Ederef\n                                            (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                            (Tstruct __2380 noattr)) _n\n                                          (tarray tulong 5))\n                                        (Econst_int (Int.repr 1) tint)\n                                        (tptr tulong)) tulong)\n                                    (Ebinop Oadd\n                                      (Ebinop Oshr (Etempvar _t1 tulong)\n                                        (Econst_int (Int.repr 1) tint)\n                                        tulong)\n                                      (Ebinop Oshl\n                                        (Ebinop Oand (Etempvar _t2 tulong)\n                                          (Etempvar _one tulong) tulong)\n                                        (Econst_int (Int.repr 51) tint)\n                                        tulong) tulong))\n                                  (Ssequence\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                              (Tstruct __2380 noattr)) _n\n                                            (tarray tulong 5))\n                                          (Econst_int (Int.repr 2) tint)\n                                          (tptr tulong)) tulong)\n                                      (Ebinop Oadd\n                                        (Ebinop Oshr (Etempvar _t2 tulong)\n                                          (Econst_int (Int.repr 1) tint)\n                                          tulong)\n                                        (Ebinop Oshl\n                                          (Ebinop Oand (Etempvar _t3 tulong)\n                                            (Etempvar _one tulong) tulong)\n                                          (Econst_int (Int.repr 51) tint)\n                                          tulong) tulong))\n                                    (Ssequence\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                (Tstruct __2380 noattr)) _n\n                                              (tarray tulong 5))\n                                            (Econst_int (Int.repr 3) tint)\n                                            (tptr tulong)) tulong)\n                                        (Ebinop Oadd\n                                          (Ebinop Oshr (Etempvar _t3 tulong)\n                                            (Econst_int (Int.repr 1) tint)\n                                            tulong)\n                                          (Ebinop Oshl\n                                            (Ebinop Oand\n                                              (Etempvar _t4 tulong)\n                                              (Etempvar _one tulong) tulong)\n                                            (Econst_int (Int.repr 51) tint)\n                                            tulong) tulong))\n                                      (Ssequence\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                  (Tstruct __2380 noattr)) _n\n                                                (tarray tulong 5))\n                                              (Econst_int (Int.repr 4) tint)\n                                              (tptr tulong)) tulong)\n                                          (Ebinop Oshr (Etempvar _t4 tulong)\n                                            (Econst_int (Int.repr 1) tint)\n                                            tulong))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'1\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                  (Tstruct __2380 noattr))\n                                                _magnitude tint))\n                                            (Sassign\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                  (Tstruct __2380 noattr))\n                                                _magnitude tint)\n                                              (Ebinop Oadd\n                                                (Ebinop Oshr\n                                                  (Etempvar _t'1 tint)\n                                                  (Econst_int (Int.repr 1) tint)\n                                                  tint)\n                                                (Econst_int (Int.repr 1) tint)\n                                                tint)))\n                                          (Ssequence\n                                            (Sassign\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                                  (Tstruct __2380 noattr))\n                                                _normalized tint)\n                                              (Econst_int (Int.repr 0) tint))\n                                            (Scall None\n                                              (Evar _secp256k1_fe_verify \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil) tvoid cc_default))\n                                              ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n                                               nil))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_to_storage := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2382 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'10, (tptr (Tstruct __IO_FILE noattr))) :: (_t'9, tint) ::\n               (_t'8, tulong) :: (_t'7, tulong) :: (_t'6, tulong) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'9\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)) _normalized tint))\n      (Sifthenelse (Eunop Onotbool (Etempvar _t'9 tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'10 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'10 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                 (Econst_int (Int.repr 593) tint) ::\n                 (Evar ___stringlit_92 (tarray tschar 37)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Ssequence\n      (Sset _t'7\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t'8\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2382 noattr)))\n                  (Tstruct __2382 noattr)) _n (tarray tulong 4))\n              (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n          (Ebinop Oor (Etempvar _t'7 tulong)\n            (Ebinop Oshl (Etempvar _t'8 tulong)\n              (Econst_int (Int.repr 52) tint) tulong) tulong))))\n    (Ssequence\n      (Ssequence\n        (Sset _t'5\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t'6\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2382 noattr)))\n                    (Tstruct __2382 noattr)) _n (tarray tulong 4))\n                (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n            (Ebinop Oor\n              (Ebinop Oshr (Etempvar _t'5 tulong)\n                (Econst_int (Int.repr 12) tint) tulong)\n              (Ebinop Oshl (Etempvar _t'6 tulong)\n                (Econst_int (Int.repr 40) tint) tulong) tulong))))\n      (Ssequence\n        (Ssequence\n          (Sset _t'3\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _t'4\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2382 noattr)))\n                      (Tstruct __2382 noattr)) _n (tarray tulong 4))\n                  (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n              (Ebinop Oor\n                (Ebinop Oshr (Etempvar _t'3 tulong)\n                  (Econst_int (Int.repr 24) tint) tulong)\n                (Ebinop Oshl (Etempvar _t'4 tulong)\n                  (Econst_int (Int.repr 28) tint) tulong) tulong))))\n        (Ssequence\n          (Sset _t'1\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _t'2\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2382 noattr)))\n                      (Tstruct __2382 noattr)) _n (tarray tulong 4))\n                  (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n              (Ebinop Oor\n                (Ebinop Oshr (Etempvar _t'1 tulong)\n                  (Econst_int (Int.repr 36) tint) tulong)\n                (Ebinop Oshl (Etempvar _t'2 tulong)\n                  (Econst_int (Int.repr 16) tint) tulong) tulong))))))))\n|}.\n\nDefinition f_secp256k1_fe_from_storage := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __2382 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'8, tulong) :: (_t'7, tulong) :: (_t'6, tulong) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'8\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n              (Tstruct __2382 noattr)) _n (tarray tulong 4))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n      (Ebinop Oand (Etempvar _t'8 tulong)\n        (Econst_long (Int64.repr 4503599627370495) tulong) tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'6\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n                (Tstruct __2382 noattr)) _n (tarray tulong 4))\n            (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t'7\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n                  (Tstruct __2382 noattr)) _n (tarray tulong 4))\n              (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n          (Ebinop Oor\n            (Ebinop Oshr (Etempvar _t'6 tulong)\n              (Econst_int (Int.repr 52) tint) tulong)\n            (Ebinop Oand\n              (Ebinop Oshl (Etempvar _t'7 tulong)\n                (Econst_int (Int.repr 12) tint) tulong)\n              (Econst_long (Int64.repr 4503599627370495) tulong) tulong)\n            tulong))))\n    (Ssequence\n      (Ssequence\n        (Sset _t'4\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n                  (Tstruct __2382 noattr)) _n (tarray tulong 4))\n              (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _t'5\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n                    (Tstruct __2382 noattr)) _n (tarray tulong 4))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n            (Ebinop Oor\n              (Ebinop Oshr (Etempvar _t'4 tulong)\n                (Econst_int (Int.repr 40) tint) tulong)\n              (Ebinop Oand\n                (Ebinop Oshl (Etempvar _t'5 tulong)\n                  (Econst_int (Int.repr 24) tint) tulong)\n                (Econst_long (Int64.repr 4503599627370495) tulong) tulong)\n              tulong))))\n      (Ssequence\n        (Ssequence\n          (Sset _t'2\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n                    (Tstruct __2382 noattr)) _n (tarray tulong 4))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _t'3\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n                      (Tstruct __2382 noattr)) _n (tarray tulong 4))\n                  (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n              (Ebinop Oor\n                (Ebinop Oshr (Etempvar _t'2 tulong)\n                  (Econst_int (Int.repr 28) tint) tulong)\n                (Ebinop Oand\n                  (Ebinop Oshl (Etempvar _t'3 tulong)\n                    (Econst_int (Int.repr 36) tint) tulong)\n                  (Econst_long (Int64.repr 4503599627370495) tulong) tulong)\n                tulong))))\n        (Ssequence\n          (Ssequence\n            (Sset _t'1\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2382 noattr)))\n                      (Tstruct __2382 noattr)) _n (tarray tulong 4))\n                  (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong)\n              (Ebinop Oshr (Etempvar _t'1 tulong)\n                (Econst_int (Int.repr 16) tint) tulong)))\n          (Ssequence\n            (Sassign\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _magnitude tint)\n              (Econst_int (Int.repr 1) tint))\n            (Ssequence\n              (Sassign\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _normalized tint)\n                (Econst_int (Int.repr 1) tint))\n              (Scall None\n                (Evar _secp256k1_fe_verify (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __2380 noattr))\n                                               Tnil) tvoid cc_default))\n                ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil)))))))))\n|}.\n\nDefinition f_secp256k1_fe_from_signed62 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                nil);\n  fn_vars := nil;\n  fn_temps := ((_M52, tulong) :: (_a0, tulong) :: (_a1, tulong) ::\n               (_a2, tulong) :: (_a3, tulong) :: (_a4, tulong) ::\n               (_t'5, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'4, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'3, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _M52\n    (Ebinop Oshr (Econst_long (Int64.repr (-1)) tulong)\n      (Econst_int (Int.repr 12) tint) tulong))\n  (Ssequence\n    (Sset _a0\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef\n              (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n              (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n            (tarray tlong 5)) (Econst_int (Int.repr 0) tint) (tptr tlong))\n        tlong))\n    (Ssequence\n      (Sset _a1\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef\n                (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n              (tarray tlong 5)) (Econst_int (Int.repr 1) tint) (tptr tlong))\n          tlong))\n      (Ssequence\n        (Sset _a2\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef\n                  (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                  (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n              (tptr tlong)) tlong))\n        (Ssequence\n          (Sset _a3\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n                (tptr tlong)) tlong))\n          (Ssequence\n            (Sset _a4\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef\n                      (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                      (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                    (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                  (tptr tlong)) tlong))\n            (Ssequence\n              (Sloop\n                (Sifthenelse (Eunop Onotbool\n                               (Ebinop Oeq\n                                 (Ebinop Oshr (Etempvar _a0 tulong)\n                                   (Econst_int (Int.repr 62) tint) tulong)\n                                 (Econst_int (Int.repr 0) tint) tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'5\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_88 (tarray tschar 28)) ::\n                           (Econst_int (Int.repr 621) tint) ::\n                           (Evar ___stringlit_103 (tarray tschar 37)) :: nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip)\n                Sbreak)\n              (Ssequence\n                (Sloop\n                  (Sifthenelse (Eunop Onotbool\n                                 (Ebinop Oeq\n                                   (Ebinop Oshr (Etempvar _a1 tulong)\n                                     (Econst_int (Int.repr 62) tint) tulong)\n                                   (Econst_int (Int.repr 0) tint) tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'4\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_88 (tarray tschar 28)) ::\n                             (Econst_int (Int.repr 622) tint) ::\n                             (Evar ___stringlit_104 (tarray tschar 37)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip)\n                  Sbreak)\n                (Ssequence\n                  (Sloop\n                    (Sifthenelse (Eunop Onotbool\n                                   (Ebinop Oeq\n                                     (Ebinop Oshr (Etempvar _a2 tulong)\n                                       (Econst_int (Int.repr 62) tint)\n                                       tulong) (Econst_int (Int.repr 0) tint)\n                                     tint) tint)\n                      (Sloop\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'3\n                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                            (Scall None\n                              (Evar _fprintf (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                 (Tcons (tptr tschar) Tnil))\n                                               tint\n                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                              ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                               (Evar ___stringlit_88 (tarray tschar 28)) ::\n                               (Econst_int (Int.repr 623) tint) ::\n                               (Evar ___stringlit_105 (tarray tschar 37)) ::\n                               nil)))\n                          (Scall None\n                            (Evar _abort (Tfunction Tnil tvoid cc_default))\n                            nil))\n                        Sbreak)\n                      Sskip)\n                    Sbreak)\n                  (Ssequence\n                    (Sloop\n                      (Sifthenelse (Eunop Onotbool\n                                     (Ebinop Oeq\n                                       (Ebinop Oshr (Etempvar _a3 tulong)\n                                         (Econst_int (Int.repr 62) tint)\n                                         tulong)\n                                       (Econst_int (Int.repr 0) tint) tint)\n                                     tint)\n                        (Sloop\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'2\n                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                              (Scall None\n                                (Evar _fprintf (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                   (Tcons (tptr tschar) Tnil))\n                                                 tint\n                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                 (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                 (Econst_int (Int.repr 624) tint) ::\n                                 (Evar ___stringlit_106 (tarray tschar 37)) ::\n                                 nil)))\n                            (Scall None\n                              (Evar _abort (Tfunction Tnil tvoid cc_default))\n                              nil))\n                          Sbreak)\n                        Sskip)\n                      Sbreak)\n                    (Ssequence\n                      (Sloop\n                        (Sifthenelse (Eunop Onotbool\n                                       (Ebinop Oeq\n                                         (Ebinop Oshr (Etempvar _a4 tulong)\n                                           (Econst_int (Int.repr 8) tint)\n                                           tulong)\n                                         (Econst_int (Int.repr 0) tint) tint)\n                                       tint)\n                          (Sloop\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'1\n                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                (Scall None\n                                  (Evar _fprintf (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __IO_FILE noattr))\n                                                     (Tcons (tptr tschar)\n                                                       Tnil)) tint\n                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                  ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                   (Evar ___stringlit_88 (tarray tschar 28)) ::\n                                   (Econst_int (Int.repr 625) tint) ::\n                                   (Evar ___stringlit_107 (tarray tschar 36)) ::\n                                   nil)))\n                              (Scall None\n                                (Evar _abort (Tfunction Tnil tvoid\n                                               cc_default)) nil))\n                            Sbreak)\n                          Sskip)\n                        Sbreak)\n                      (Ssequence\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                  (Tstruct __2380 noattr)) _n\n                                (tarray tulong 5))\n                              (Econst_int (Int.repr 0) tint) (tptr tulong))\n                            tulong)\n                          (Ebinop Oand (Etempvar _a0 tulong)\n                            (Etempvar _M52 tulong) tulong))\n                        (Ssequence\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                    (Tstruct __2380 noattr)) _n\n                                  (tarray tulong 5))\n                                (Econst_int (Int.repr 1) tint) (tptr tulong))\n                              tulong)\n                            (Ebinop Oand\n                              (Ebinop Oor\n                                (Ebinop Oshr (Etempvar _a0 tulong)\n                                  (Econst_int (Int.repr 52) tint) tulong)\n                                (Ebinop Oshl (Etempvar _a1 tulong)\n                                  (Econst_int (Int.repr 10) tint) tulong)\n                                tulong) (Etempvar _M52 tulong) tulong))\n                          (Ssequence\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                      (Tstruct __2380 noattr)) _n\n                                    (tarray tulong 5))\n                                  (Econst_int (Int.repr 2) tint)\n                                  (tptr tulong)) tulong)\n                              (Ebinop Oand\n                                (Ebinop Oor\n                                  (Ebinop Oshr (Etempvar _a1 tulong)\n                                    (Econst_int (Int.repr 42) tint) tulong)\n                                  (Ebinop Oshl (Etempvar _a2 tulong)\n                                    (Econst_int (Int.repr 20) tint) tulong)\n                                  tulong) (Etempvar _M52 tulong) tulong))\n                            (Ssequence\n                              (Sassign\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                        (Tstruct __2380 noattr)) _n\n                                      (tarray tulong 5))\n                                    (Econst_int (Int.repr 3) tint)\n                                    (tptr tulong)) tulong)\n                                (Ebinop Oand\n                                  (Ebinop Oor\n                                    (Ebinop Oshr (Etempvar _a2 tulong)\n                                      (Econst_int (Int.repr 32) tint) tulong)\n                                    (Ebinop Oshl (Etempvar _a3 tulong)\n                                      (Econst_int (Int.repr 30) tint) tulong)\n                                    tulong) (Etempvar _M52 tulong) tulong))\n                              (Ssequence\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                          (Tstruct __2380 noattr)) _n\n                                        (tarray tulong 5))\n                                      (Econst_int (Int.repr 4) tint)\n                                      (tptr tulong)) tulong)\n                                  (Ebinop Oor\n                                    (Ebinop Oshr (Etempvar _a3 tulong)\n                                      (Econst_int (Int.repr 22) tint) tulong)\n                                    (Ebinop Oshl (Etempvar _a4 tulong)\n                                      (Econst_int (Int.repr 40) tint) tulong)\n                                    tulong))\n                                (Ssequence\n                                  (Sassign\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                        (Tstruct __2380 noattr)) _magnitude\n                                      tint) (Econst_int (Int.repr 1) tint))\n                                  (Ssequence\n                                    (Sassign\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                                          (Tstruct __2380 noattr))\n                                        _normalized tint)\n                                      (Econst_int (Int.repr 1) tint))\n                                    (Scall None\n                                      (Evar _secp256k1_fe_verify (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)\n                                                                   tvoid\n                                                                   cc_default))\n                                      ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n                                       nil))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_fe_to_signed62 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_M62, tulong) :: (_a0, tulong) :: (_a1, tulong) ::\n               (_a2, tulong) :: (_a3, tulong) :: (_a4, tulong) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) :: (_t'1, tint) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sset _M62\n    (Ebinop Oshr (Econst_long (Int64.repr (-1)) tulong)\n      (Econst_int (Int.repr 2) tint) tulong))\n  (Ssequence\n    (Sset _a0\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n              (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _a1\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _a2\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                  (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _a3\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                    (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _a4\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                      (Tstruct __2380 noattr)) _n (tarray tulong 5))\n                  (Econst_int (Int.repr 4) tint) (tptr tulong)) tulong))\n            (Ssequence\n              (Sloop\n                (Ssequence\n                  (Sset _t'1\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2380 noattr)))\n                        (Tstruct __2380 noattr)) _normalized tint))\n                  (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'2\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_88 (tarray tschar 28)) ::\n                             (Econst_int (Int.repr 645) tint) ::\n                             (Evar ___stringlit_92 (tarray tschar 37)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip))\n                Sbreak)\n              (Ssequence\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef\n                          (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                          (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                        (tarray tlong 5)) (Econst_int (Int.repr 0) tint)\n                      (tptr tlong)) tlong)\n                  (Ebinop Oand\n                    (Ebinop Oor (Etempvar _a0 tulong)\n                      (Ebinop Oshl (Etempvar _a1 tulong)\n                        (Econst_int (Int.repr 52) tint) tulong) tulong)\n                    (Etempvar _M62 tulong) tulong))\n                (Ssequence\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                            (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                          (tarray tlong 5)) (Econst_int (Int.repr 1) tint)\n                        (tptr tlong)) tlong)\n                    (Ebinop Oand\n                      (Ebinop Oor\n                        (Ebinop Oshr (Etempvar _a1 tulong)\n                          (Econst_int (Int.repr 10) tint) tulong)\n                        (Ebinop Oshl (Etempvar _a2 tulong)\n                          (Econst_int (Int.repr 42) tint) tulong) tulong)\n                      (Etempvar _M62 tulong) tulong))\n                  (Ssequence\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                              (Tstruct _secp256k1_modinv64_signed62 noattr))\n                            _v (tarray tlong 5))\n                          (Econst_int (Int.repr 2) tint) (tptr tlong)) tlong)\n                      (Ebinop Oand\n                        (Ebinop Oor\n                          (Ebinop Oshr (Etempvar _a2 tulong)\n                            (Econst_int (Int.repr 20) tint) tulong)\n                          (Ebinop Oshl (Etempvar _a3 tulong)\n                            (Econst_int (Int.repr 32) tint) tulong) tulong)\n                        (Etempvar _M62 tulong) tulong))\n                    (Ssequence\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                (Tstruct _secp256k1_modinv64_signed62 noattr))\n                              _v (tarray tlong 5))\n                            (Econst_int (Int.repr 3) tint) (tptr tlong))\n                          tlong)\n                        (Ebinop Oand\n                          (Ebinop Oor\n                            (Ebinop Oshr (Etempvar _a3 tulong)\n                              (Econst_int (Int.repr 30) tint) tulong)\n                            (Ebinop Oshl (Etempvar _a4 tulong)\n                              (Econst_int (Int.repr 22) tint) tulong) tulong)\n                          (Etempvar _M62 tulong) tulong))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                                (Tstruct _secp256k1_modinv64_signed62 noattr))\n                              _v (tarray tlong 5))\n                            (Econst_int (Int.repr 4) tint) (tptr tlong))\n                          tlong)\n                        (Ebinop Oshr (Etempvar _a4 tulong)\n                          (Econst_int (Int.repr 40) tint) tulong)))))))))))))\n|}.\n\nDefinition v_secp256k1_const_modinfo_fe := {|\n  gvar_info := (Tstruct _secp256k1_modinv64_modinfo noattr);\n  gvar_init := (Init_int64 (Int64.repr (-4294968273)) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 256) ::\n                Init_int64 (Int64.repr 2866531139136965327) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_fe_inv_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_x, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_tmp, (Tstruct __2380 noattr)) ::\n              (_s, (Tstruct _secp256k1_modinv64_signed62 noattr)) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) ::\n               (_t'3, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _tmp (Tstruct __2380 noattr))\n    (Ederef (Etempvar _x (tptr (Tstruct __2380 noattr)))\n      (Tstruct __2380 noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_normalize_var (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil) tvoid cc_default))\n      ((Eaddrof (Evar _tmp (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_to_signed62 (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _s (Tstruct _secp256k1_modinv64_signed62 noattr))\n           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n         (Eaddrof (Evar _tmp (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_modinv64_var (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                              Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _s (Tstruct _secp256k1_modinv64_signed62 noattr))\n             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n           (Eaddrof\n             (Evar _secp256k1_const_modinfo_fe (Tstruct _secp256k1_modinv64_modinfo noattr))\n             (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_from_signed62 (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                    Tnil)) tvoid cc_default))\n            ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof (Evar _s (Tstruct _secp256k1_modinv64_signed62 noattr))\n               (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) :: nil))\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Scall (Some _t'1)\n                  (Evar _secp256k1_fe_normalizes_to_zero (Tfunction Tnil tint\n                                                           {|cc_vararg:=None; cc_unproto:=true; cc_structret:=false|}))\n                  ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))\n                (Scall (Some _t'2)\n                  (Evar _secp256k1_fe_normalizes_to_zero (Tfunction Tnil tint\n                                                           {|cc_vararg:=None; cc_unproto:=true; cc_structret:=false|}))\n                  ((Eaddrof (Evar _tmp (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil)))\n              (Sifthenelse (Eunop Onotbool\n                             (Ebinop Oeq (Etempvar _t'1 tint)\n                               (Etempvar _t'2 tint) tint) tint)\n                (Sloop\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'3\n                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                      (Scall None\n                        (Evar _fprintf (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __IO_FILE noattr))\n                                           (Tcons (tptr tschar) Tnil)) tint\n                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                        ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                         (Evar ___stringlit_88 (tarray tschar 28)) ::\n                         (Econst_int (Int.repr 688) tint) ::\n                         (Evar ___stringlit_108 (tarray tschar 99)) :: nil)))\n                    (Scall None\n                      (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                  Sbreak)\n                Sskip))\n            Sbreak))))))\n|}.\n\nDefinition f_secp256k1_fe_equal_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2380 noattr))) ::\n                (_b, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_na, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_fe_negate (Tfunction\n                                 (Tcons (tptr (Tstruct __2380 noattr))\n                                   (Tcons (tptr (Tstruct __2380 noattr))\n                                     (Tcons tint Tnil))) tvoid cc_default))\n    ((Eaddrof (Evar _na (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) ::\n     (Etempvar _a (tptr (Tstruct __2380 noattr))) ::\n     (Econst_int (Int.repr 1) tint) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_add (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _na (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Etempvar _b (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _secp256k1_fe_normalizes_to_zero_var (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __2380 noattr))\n                                                       Tnil) tint cc_default))\n        ((Eaddrof (Evar _na (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Sreturn (Some (Etempvar _t'1 tint))))))\n|}.\n\nDefinition f_secp256k1_fe_sqrt_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_x2, (Tstruct __2380 noattr)) ::\n              (_x3, (Tstruct __2380 noattr)) ::\n              (_x6, (Tstruct __2380 noattr)) ::\n              (_x9, (Tstruct __2380 noattr)) ::\n              (_x11, (Tstruct __2380 noattr)) ::\n              (_x22, (Tstruct __2380 noattr)) ::\n              (_x44, (Tstruct __2380 noattr)) ::\n              (_x88, (Tstruct __2380 noattr)) ::\n              (_x176, (Tstruct __2380 noattr)) ::\n              (_x220, (Tstruct __2380 noattr)) ::\n              (_x223, (Tstruct __2380 noattr)) ::\n              (_t1, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_j, tint) :: (_t'1, tint) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One (Etempvar _r (tptr (Tstruct __2380 noattr)))\n                     (Etempvar _a (tptr (Tstruct __2380 noattr))) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_110 (tarray tschar 23)) ::\n               (Econst_int (Int.repr 47) tint) ::\n               (Evar ___stringlit_109 (tarray tschar 30)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_sqr (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_sqr (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil))) tvoid cc_default))\n            ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Etempvar _a (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Sassign (Evar _x6 (Tstruct __2380 noattr))\n              (Evar _x3 (Tstruct __2380 noattr)))\n            (Ssequence\n              (Ssequence\n                (Sset _j (Econst_int (Int.repr 0) tint))\n                (Sloop\n                  (Ssequence\n                    (Sifthenelse (Ebinop Olt (Etempvar _j tint)\n                                   (Econst_int (Int.repr 3) tint) tint)\n                      Sskip\n                      Sbreak)\n                    (Scall None\n                      (Evar _secp256k1_fe_sqr (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)) tvoid cc_default))\n                      ((Eaddrof (Evar _x6 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof (Evar _x6 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) :: nil)))\n                  (Sset _j\n                    (Ebinop Oadd (Etempvar _j tint)\n                      (Econst_int (Int.repr 1) tint) tint))))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_mul (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil))) tvoid cc_default))\n                  ((Eaddrof (Evar _x6 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _x6 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Sassign (Evar _x9 (Tstruct __2380 noattr))\n                    (Evar _x6 (Tstruct __2380 noattr)))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _j (Econst_int (Int.repr 0) tint))\n                      (Sloop\n                        (Ssequence\n                          (Sifthenelse (Ebinop Olt (Etempvar _j tint)\n                                         (Econst_int (Int.repr 3) tint) tint)\n                            Sskip\n                            Sbreak)\n                          (Scall None\n                            (Evar _secp256k1_fe_sqr (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                            ((Eaddrof (Evar _x9 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Eaddrof (Evar _x9 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) :: nil)))\n                        (Sset _j\n                          (Ebinop Oadd (Etempvar _j tint)\n                            (Econst_int (Int.repr 1) tint) tint))))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_fe_mul (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil))) tvoid\n                                                  cc_default))\n                        ((Eaddrof (Evar _x9 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _x9 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) :: nil))\n                      (Ssequence\n                        (Sassign (Evar _x11 (Tstruct __2380 noattr))\n                          (Evar _x9 (Tstruct __2380 noattr)))\n                        (Ssequence\n                          (Ssequence\n                            (Sset _j (Econst_int (Int.repr 0) tint))\n                            (Sloop\n                              (Ssequence\n                                (Sifthenelse (Ebinop Olt (Etempvar _j tint)\n                                               (Econst_int (Int.repr 2) tint)\n                                               tint)\n                                  Sskip\n                                  Sbreak)\n                                (Scall None\n                                  (Evar _secp256k1_fe_sqr (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                                  ((Eaddrof\n                                     (Evar _x11 (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) ::\n                                   (Eaddrof\n                                     (Evar _x11 (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) :: nil)))\n                              (Sset _j\n                                (Ebinop Oadd (Etempvar _j tint)\n                                  (Econst_int (Int.repr 1) tint) tint))))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_fe_mul (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                              ((Eaddrof (Evar _x11 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _x11 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) :: nil))\n                            (Ssequence\n                              (Sassign (Evar _x22 (Tstruct __2380 noattr))\n                                (Evar _x11 (Tstruct __2380 noattr)))\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _j (Econst_int (Int.repr 0) tint))\n                                  (Sloop\n                                    (Ssequence\n                                      (Sifthenelse (Ebinop Olt\n                                                     (Etempvar _j tint)\n                                                     (Econst_int (Int.repr 11) tint)\n                                                     tint)\n                                        Sskip\n                                        Sbreak)\n                                      (Scall None\n                                        (Evar _secp256k1_fe_sqr (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                        ((Eaddrof\n                                           (Evar _x22 (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         (Eaddrof\n                                           (Evar _x22 (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil)))\n                                    (Sset _j\n                                      (Ebinop Oadd (Etempvar _j tint)\n                                        (Econst_int (Int.repr 1) tint) tint))))\n                                (Ssequence\n                                  (Scall None\n                                    (Evar _secp256k1_fe_mul (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                    ((Eaddrof\n                                       (Evar _x22 (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     (Eaddrof\n                                       (Evar _x22 (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     (Eaddrof\n                                       (Evar _x11 (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     nil))\n                                  (Ssequence\n                                    (Sassign\n                                      (Evar _x44 (Tstruct __2380 noattr))\n                                      (Evar _x22 (Tstruct __2380 noattr)))\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _j\n                                          (Econst_int (Int.repr 0) tint))\n                                        (Sloop\n                                          (Ssequence\n                                            (Sifthenelse (Ebinop Olt\n                                                           (Etempvar _j tint)\n                                                           (Econst_int (Int.repr 22) tint)\n                                                           tint)\n                                              Sskip\n                                              Sbreak)\n                                            (Scall None\n                                              (Evar _secp256k1_fe_sqr \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)) tvoid cc_default))\n                                              ((Eaddrof\n                                                 (Evar _x44 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _x44 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               nil)))\n                                          (Sset _j\n                                            (Ebinop Oadd (Etempvar _j tint)\n                                              (Econst_int (Int.repr 1) tint)\n                                              tint))))\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_fe_mul (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                          ((Eaddrof\n                                             (Evar _x44 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _x44 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _x22 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           nil))\n                                        (Ssequence\n                                          (Sassign\n                                            (Evar _x88 (Tstruct __2380 noattr))\n                                            (Evar _x44 (Tstruct __2380 noattr)))\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _j\n                                                (Econst_int (Int.repr 0) tint))\n                                              (Sloop\n                                                (Ssequence\n                                                  (Sifthenelse (Ebinop Olt\n                                                                 (Etempvar _j tint)\n                                                                 (Econst_int (Int.repr 44) tint)\n                                                                 tint)\n                                                    Sskip\n                                                    Sbreak)\n                                                  (Scall None\n                                                    (Evar _secp256k1_fe_sqr \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _x88 (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     (Eaddrof\n                                                       (Evar _x88 (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     nil)))\n                                                (Sset _j\n                                                  (Ebinop Oadd\n                                                    (Etempvar _j tint)\n                                                    (Econst_int (Int.repr 1) tint)\n                                                    tint))))\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_fe_mul \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil))) tvoid\n                                                  cc_default))\n                                                ((Eaddrof\n                                                   (Evar _x88 (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _x88 (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _x44 (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 nil))\n                                              (Ssequence\n                                                (Sassign\n                                                  (Evar _x176 (Tstruct __2380 noattr))\n                                                  (Evar _x88 (Tstruct __2380 noattr)))\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _j\n                                                      (Econst_int (Int.repr 0) tint))\n                                                    (Sloop\n                                                      (Ssequence\n                                                        (Sifthenelse \n                                                          (Ebinop Olt\n                                                            (Etempvar _j tint)\n                                                            (Econst_int (Int.repr 88) tint)\n                                                            tint)\n                                                          Sskip\n                                                          Sbreak)\n                                                        (Scall None\n                                                          (Evar _secp256k1_fe_sqr \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _x176 (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           (Eaddrof\n                                                             (Evar _x176 (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           nil)))\n                                                      (Sset _j\n                                                        (Ebinop Oadd\n                                                          (Etempvar _j tint)\n                                                          (Econst_int (Int.repr 1) tint)\n                                                          tint))))\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_fe_mul \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _x176 (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       (Eaddrof\n                                                         (Evar _x176 (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       (Eaddrof\n                                                         (Evar _x88 (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Sassign\n                                                        (Evar _x220 (Tstruct __2380 noattr))\n                                                        (Evar _x176 (Tstruct __2380 noattr)))\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Sset _j\n                                                            (Econst_int (Int.repr 0) tint))\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Sifthenelse \n                                                                (Ebinop Olt\n                                                                  (Etempvar _j tint)\n                                                                  (Econst_int (Int.repr 44) tint)\n                                                                  tint)\n                                                                Sskip\n                                                                Sbreak)\n                                                              (Scall None\n                                                                (Evar _secp256k1_fe_sqr \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                                                ((Eaddrof\n                                                                   (Evar _x220 (Tstruct __2380 noattr))\n                                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                                 (Eaddrof\n                                                                   (Evar _x220 (Tstruct __2380 noattr))\n                                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                                 nil)))\n                                                            (Sset _j\n                                                              (Ebinop Oadd\n                                                                (Etempvar _j tint)\n                                                                (Econst_int (Int.repr 1) tint)\n                                                                tint))))\n                                                        (Ssequence\n                                                          (Scall None\n                                                            (Evar _secp256k1_fe_mul \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _x220 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _x220 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _x44 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             nil))\n                                                          (Ssequence\n                                                            (Sassign\n                                                              (Evar _x223 (Tstruct __2380 noattr))\n                                                              (Evar _x220 (Tstruct __2380 noattr)))\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _j\n                                                                  (Econst_int (Int.repr 0) tint))\n                                                                (Sloop\n                                                                  (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Olt\n                                                                    (Etempvar _j tint)\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    tint)\n                                                                    Sskip\n                                                                    Sbreak)\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_sqr \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _x223 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _x223 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil)))\n                                                                  (Sset _j\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _j tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint))))\n                                                              (Ssequence\n                                                                (Scall None\n                                                                  (Evar _secp256k1_fe_mul \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _x223 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                   (Eaddrof\n                                                                    (Evar _x223 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                   (Eaddrof\n                                                                    (Evar _x3 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                   nil))\n                                                                (Ssequence\n                                                                  (Sassign\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (Evar _x223 (Tstruct __2380 noattr)))\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _j\n                                                                    (Econst_int (Int.repr 0) tint))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Olt\n                                                                    (Etempvar _j tint)\n                                                                    (Econst_int (Int.repr 23) tint)\n                                                                    tint)\n                                                                    Sskip\n                                                                    Sbreak)\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_sqr \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil)))\n                                                                    (Sset _j\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _j tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint))))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _x22 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _j\n                                                                    (Econst_int (Int.repr 0) tint))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Olt\n                                                                    (Etempvar _j tint)\n                                                                    (Econst_int (Int.repr 6) tint)\n                                                                    tint)\n                                                                    Sskip\n                                                                    Sbreak)\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_sqr \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil)))\n                                                                    (Sset _j\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _j tint)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tint))))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _x2 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_sqr \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_sqr \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_sqr \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'1)\n                                                                    (Evar _secp256k1_fe_equal_var \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Etempvar _a (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Sreturn (Some (Etempvar _t'1 tint))))))))))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_set_int := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) :: (_v, tuint) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef\n      (Ebinop Oadd\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n    (Etempvar _v tuint))\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n      (Econst_int (Int.repr 0) tint))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n        (Econst_int (Int.repr 0) tint))\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n        (Econst_int (Int.repr 0) tint)))))\n|}.\n\nDefinition f_secp256k1_scalar_get_bits := {|\n  fn_return := tuint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2843 noattr))) :: (_offset, tuint) ::\n                (_count, tuint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'2, (tptr (Tstruct __IO_FILE noattr))) :: (_t'1, tulong) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Oeq\n                     (Ebinop Oshr\n                       (Ebinop Osub\n                         (Ebinop Oadd (Etempvar _offset tuint)\n                           (Etempvar _count tuint) tuint)\n                         (Econst_int (Int.repr 1) tint) tuint)\n                       (Econst_int (Int.repr 6) tint) tuint)\n                     (Ebinop Oshr (Etempvar _offset tuint)\n                       (Econst_int (Int.repr 6) tint) tuint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_112 (tarray tschar 29)) ::\n               (Econst_int (Int.repr 45) tint) ::\n               (Evar ___stringlit_111 (tarray tschar 64)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sset _t'1\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Ebinop Oshr (Etempvar _offset tuint)\n            (Econst_int (Int.repr 6) tint) tuint) (tptr tulong)) tulong))\n    (Sreturn (Some (Ebinop Oand\n                     (Ebinop Oshr (Etempvar _t'1 tulong)\n                       (Ebinop Oand (Etempvar _offset tuint)\n                         (Econst_int (Int.repr 63) tint) tuint) tulong)\n                     (Ebinop Osub\n                       (Ebinop Oshl\n                         (Ecast (Econst_int (Int.repr 1) tint) tulong)\n                         (Etempvar _count tuint) tulong)\n                       (Econst_int (Int.repr 1) tint) tulong) tulong)))))\n|}.\n\nDefinition f_secp256k1_scalar_get_bits_var := {|\n  fn_return := tuint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2843 noattr))) :: (_offset, tuint) ::\n                (_count, tuint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tuint) :: (_t'6, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'5, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'4, (tptr (Tstruct __IO_FILE noattr))) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Olt (Etempvar _count tuint)\n                     (Econst_int (Int.repr 32) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'6 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_112 (tarray tschar 29)) ::\n               (Econst_int (Int.repr 50) tint) ::\n               (Evar ___stringlit_113 (tarray tschar 34)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Ole\n                       (Ebinop Oadd (Etempvar _offset tuint)\n                         (Etempvar _count tuint) tuint)\n                       (Econst_int (Int.repr 256) tint) tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'5 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_112 (tarray tschar 29)) ::\n                 (Econst_int (Int.repr 51) tint) ::\n                 (Evar ___stringlit_114 (tarray tschar 45)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip)\n      Sbreak)\n    (Sifthenelse (Ebinop Oeq\n                   (Ebinop Oshr\n                     (Ebinop Osub\n                       (Ebinop Oadd (Etempvar _offset tuint)\n                         (Etempvar _count tuint) tuint)\n                       (Econst_int (Int.repr 1) tint) tuint)\n                     (Econst_int (Int.repr 6) tint) tuint)\n                   (Ebinop Oshr (Etempvar _offset tuint)\n                     (Econst_int (Int.repr 6) tint) tuint) tint)\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_scalar_get_bits (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __2843 noattr))\n                                               (Tcons tuint\n                                                 (Tcons tuint Tnil))) tuint\n                                             cc_default))\n          ((Etempvar _a (tptr (Tstruct __2843 noattr))) ::\n           (Etempvar _offset tuint) :: (Etempvar _count tuint) :: nil))\n        (Sreturn (Some (Etempvar _t'1 tuint))))\n      (Ssequence\n        (Sloop\n          (Sifthenelse (Eunop Onotbool\n                         (Ebinop Olt\n                           (Ebinop Oadd\n                             (Ebinop Oshr (Etempvar _offset tuint)\n                               (Econst_int (Int.repr 6) tint) tuint)\n                             (Econst_int (Int.repr 1) tint) tuint)\n                           (Econst_int (Int.repr 4) tint) tint) tint)\n            (Sloop\n              (Ssequence\n                (Ssequence\n                  (Sset _t'4\n                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                  (Scall None\n                    (Evar _fprintf (Tfunction\n                                     (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                       (Tcons (tptr tschar) Tnil)) tint\n                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                    ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                     (Evar ___stringlit_112 (tarray tschar 29)) ::\n                     (Econst_int (Int.repr 55) tint) ::\n                     (Evar ___stringlit_115 (tarray tschar 45)) :: nil)))\n                (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                  nil))\n              Sbreak)\n            Sskip)\n          Sbreak)\n        (Ssequence\n          (Sset _t'2\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                    (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                (Ebinop Oshr (Etempvar _offset tuint)\n                  (Econst_int (Int.repr 6) tint) tuint) (tptr tulong))\n              tulong))\n          (Ssequence\n            (Sset _t'3\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                      (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                  (Ebinop Oadd\n                    (Ebinop Oshr (Etempvar _offset tuint)\n                      (Econst_int (Int.repr 6) tint) tuint)\n                    (Econst_int (Int.repr 1) tint) tuint) (tptr tulong))\n                tulong))\n            (Sreturn (Some (Ebinop Oand\n                             (Ebinop Oor\n                               (Ebinop Oshr (Etempvar _t'2 tulong)\n                                 (Ebinop Oand (Etempvar _offset tuint)\n                                   (Econst_int (Int.repr 63) tint) tuint)\n                                 tulong)\n                               (Ebinop Oshl (Etempvar _t'3 tulong)\n                                 (Ebinop Osub (Econst_int (Int.repr 64) tint)\n                                   (Ebinop Oand (Etempvar _offset tuint)\n                                     (Econst_int (Int.repr 63) tint) tuint)\n                                   tuint) tulong) tulong)\n                             (Ebinop Osub\n                               (Ebinop Oshl\n                                 (Ecast (Econst_int (Int.repr 1) tint)\n                                   tulong) (Etempvar _count tuint) tulong)\n                               (Econst_int (Int.repr 1) tint) tulong) tulong)))))))))\n|}.\n\nDefinition f_secp256k1_scalar_check_overflow := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_yes, tint) :: (_no, tint) :: (_t'6, tulong) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _yes (Econst_int (Int.repr 0) tint))\n  (Ssequence\n    (Sset _no (Econst_int (Int.repr 0) tint))\n    (Ssequence\n      (Ssequence\n        (Sset _t'6\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                  (Tstruct __2843 noattr)) _d (tarray tulong 4))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Sset _no\n          (Ebinop Oor (Etempvar _no tint)\n            (Ebinop Olt (Etempvar _t'6 tulong)\n              (Ecast (Econst_long (Int64.repr (-1)) tulong) tulong) tint)\n            tint)))\n      (Ssequence\n        (Ssequence\n          (Sset _t'5\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                    (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n          (Sset _no\n            (Ebinop Oor (Etempvar _no tint)\n              (Ebinop Olt (Etempvar _t'5 tulong)\n                (Ecast (Econst_long (Int64.repr (-2)) tulong) tulong) tint)\n              tint)))\n        (Ssequence\n          (Ssequence\n            (Sset _t'4\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                      (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                  (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n            (Sset _yes\n              (Ebinop Oor (Etempvar _yes tint)\n                (Ebinop Oand\n                  (Ebinop Ogt (Etempvar _t'4 tulong)\n                    (Ecast (Econst_long (Int64.repr (-2)) tulong) tulong)\n                    tint) (Eunop Onotint (Etempvar _no tint) tint) tint)\n                tint)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'3\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n              (Sset _no\n                (Ebinop Oor (Etempvar _no tint)\n                  (Ebinop Olt (Etempvar _t'3 tulong)\n                    (Ecast\n                      (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                      tulong) tint) tint)))\n            (Ssequence\n              (Ssequence\n                (Sset _t'2\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                          (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                      (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n                (Sset _yes\n                  (Ebinop Oor (Etempvar _yes tint)\n                    (Ebinop Oand\n                      (Ebinop Ogt (Etempvar _t'2 tulong)\n                        (Ecast\n                          (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                          tulong) tint)\n                      (Eunop Onotint (Etempvar _no tint) tint) tint) tint)))\n              (Ssequence\n                (Ssequence\n                  (Sset _t'1\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n                  (Sset _yes\n                    (Ebinop Oor (Etempvar _yes tint)\n                      (Ebinop Oand\n                        (Ebinop Oge (Etempvar _t'1 tulong)\n                          (Ecast\n                            (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                            tulong) tint)\n                        (Eunop Onotint (Etempvar _no tint) tint) tint) tint)))\n                (Sreturn (Some (Etempvar _yes tint)))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_reduce := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) :: (_overflow, tuint) ::\n                nil);\n  fn_vars := ((_t, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) :: (_t'9, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'8, tulong) :: (_t'7, tulong) :: (_t'6, tulong) ::\n               (_t'5, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Ole (Etempvar _overflow tuint)\n                     (Econst_int (Int.repr 1) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'9 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'9 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_112 (tarray tschar 29)) ::\n               (Econst_int (Int.repr 74) tint) ::\n               (Evar ___stringlit_116 (tarray tschar 37)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Ssequence\n      (Sset _t'8\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n      (Scall None\n        (Evar _secp256k1_u128_from_u64 (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                           (Tcons tulong Tnil)) tvoid\n                                         cc_default))\n        ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n         (Etempvar _t'8 tulong) :: nil)))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            (Tcons tulong Tnil)) tvoid\n                                          cc_default))\n        ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n         (Ebinop Omul (Etempvar _overflow tuint)\n           (Ebinop Oadd\n             (Eunop Onotint\n               (Ecast\n                 (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                 tulong) tulong) (Econst_int (Int.repr 1) tint) tulong)\n           tulong) :: nil))\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_u128_to_u64 (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                             Tnil) tulong cc_default))\n            ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n               (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                    (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n            (Etempvar _t'1 tulong)))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_u128_rshift (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                             (Tcons tuint Tnil)) tvoid\n                                           cc_default))\n            ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n             (Econst_int (Int.repr 64) tint) :: nil))\n          (Ssequence\n            (Ssequence\n              (Sset _t'7\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n              (Scall None\n                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong Tnil))\n                                                  tvoid cc_default))\n                ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                 (Etempvar _t'7 tulong) :: nil)))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong Tnil))\n                                                  tvoid cc_default))\n                ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                 (Ebinop Omul (Etempvar _overflow tuint)\n                   (Eunop Onotint\n                     (Ecast\n                       (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                       tulong) tulong) tulong) :: nil))\n              (Ssequence\n                (Ssequence\n                  (Scall (Some _t'2)\n                    (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                     Tnil) tulong cc_default))\n                    ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                       (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                        (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                    (Etempvar _t'2 tulong)))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_u128_rshift (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                     (Tcons tuint Tnil))\n                                                   tvoid cc_default))\n                    ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                     (Econst_int (Int.repr 64) tint) :: nil))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'6\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                (Tstruct __2843 noattr)) _d\n                              (tarray tulong 4))\n                            (Econst_int (Int.repr 2) tint) (tptr tulong))\n                          tulong))\n                      (Scall None\n                        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                        ((Eaddrof\n                           (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         (Etempvar _t'6 tulong) :: nil)))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                        ((Eaddrof\n                           (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         (Ebinop Omul (Etempvar _overflow tuint)\n                           (Econst_int (Int.repr 1) tint) tuint) :: nil))\n                      (Ssequence\n                        (Ssequence\n                          (Scall (Some _t'3)\n                            (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                             Tnil) tulong\n                                                           cc_default))\n                            ((Eaddrof\n                               (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             nil))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                    (Tstruct __2843 noattr)) _d\n                                  (tarray tulong 4))\n                                (Econst_int (Int.repr 2) tint) (tptr tulong))\n                              tulong) (Etempvar _t'3 tulong)))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_u128_rshift (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                             (Tcons tuint\n                                                               Tnil)) tvoid\n                                                           cc_default))\n                            ((Eaddrof\n                               (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             (Econst_int (Int.repr 64) tint) :: nil))\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'5\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                        (Tstruct __2843 noattr)) _d\n                                      (tarray tulong 4))\n                                    (Econst_int (Int.repr 3) tint)\n                                    (tptr tulong)) tulong))\n                              (Scall None\n                                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                ((Eaddrof\n                                   (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 (Etempvar _t'5 tulong) :: nil)))\n                            (Ssequence\n                              (Ssequence\n                                (Scall (Some _t'4)\n                                  (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                   Tnil)\n                                                                 tulong\n                                                                 cc_default))\n                                  ((Eaddrof\n                                     (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   nil))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                          (Tstruct __2843 noattr)) _d\n                                        (tarray tulong 4))\n                                      (Econst_int (Int.repr 3) tint)\n                                      (tptr tulong)) tulong)\n                                  (Etempvar _t'4 tulong)))\n                              (Sreturn (Some (Etempvar _overflow tuint))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_add := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_a, (tptr (Tstruct __2843 noattr))) ::\n                (_b, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_t, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_overflow, tint) :: (_t'7, tint) :: (_t'6, tint) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: (_t'1, tulong) :: (_t'16, tulong) ::\n               (_t'15, tulong) :: (_t'14, tulong) :: (_t'13, tulong) ::\n               (_t'12, tulong) :: (_t'11, tulong) :: (_t'10, tulong) ::\n               (_t'9, tulong) :: (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'16\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n    (Scall None\n      (Evar _secp256k1_u128_from_u64 (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))\n                                         (Tcons tulong Tnil)) tvoid\n                                       cc_default))\n      ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n       (Etempvar _t'16 tulong) :: nil)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'15\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n      (Scall None\n        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            (Tcons tulong Tnil)) tvoid\n                                          cc_default))\n        ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n         (Etempvar _t'15 tulong) :: nil)))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_u128_to_u64 (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                           Tnil) tulong cc_default))\n          ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n             (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                  (Tstruct __2843 noattr)) _d (tarray tulong 4))\n              (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n          (Etempvar _t'1 tulong)))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_u128_rshift (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                           (Tcons tuint Tnil)) tvoid\n                                         cc_default))\n          ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n           (Econst_int (Int.repr 64) tint) :: nil))\n        (Ssequence\n          (Ssequence\n            (Sset _t'14\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                      (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                  (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n            (Scall None\n              (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  (Tcons tulong Tnil)) tvoid\n                                                cc_default))\n              ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n               (Etempvar _t'14 tulong) :: nil)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'13\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n              (Scall None\n                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong Tnil))\n                                                  tvoid cc_default))\n                ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                 (Etempvar _t'13 tulong) :: nil)))\n            (Ssequence\n              (Ssequence\n                (Scall (Some _t'2)\n                  (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                   Tnil) tulong cc_default))\n                  ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                          (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                      (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                  (Etempvar _t'2 tulong)))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_u128_rshift (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                   (Tcons tuint Tnil)) tvoid\n                                                 cc_default))\n                  ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                   (Econst_int (Int.repr 64) tint) :: nil))\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'12\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                          (Econst_int (Int.repr 2) tint) (tptr tulong))\n                        tulong))\n                    (Scall None\n                      (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tulong Tnil))\n                                                        tvoid cc_default))\n                      ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                       (Etempvar _t'12 tulong) :: nil)))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'11\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                (Tstruct __2843 noattr)) _d\n                              (tarray tulong 4))\n                            (Econst_int (Int.repr 2) tint) (tptr tulong))\n                          tulong))\n                      (Scall None\n                        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                        ((Eaddrof\n                           (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         (Etempvar _t'11 tulong) :: nil)))\n                    (Ssequence\n                      (Ssequence\n                        (Scall (Some _t'3)\n                          (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                           Tnil) tulong\n                                                         cc_default))\n                          ((Eaddrof\n                             (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                           nil))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                  (Tstruct __2843 noattr)) _d\n                                (tarray tulong 4))\n                              (Econst_int (Int.repr 2) tint) (tptr tulong))\n                            tulong) (Etempvar _t'3 tulong)))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_u128_rshift (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                           (Tcons tuint Tnil))\n                                                         tvoid cc_default))\n                          ((Eaddrof\n                             (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                           (Econst_int (Int.repr 64) tint) :: nil))\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'10\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                      (Tstruct __2843 noattr)) _d\n                                    (tarray tulong 4))\n                                  (Econst_int (Int.repr 3) tint)\n                                  (tptr tulong)) tulong))\n                            (Scall None\n                              (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                  (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                tvoid\n                                                                cc_default))\n                              ((Eaddrof\n                                 (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               (Etempvar _t'10 tulong) :: nil)))\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'9\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                        (Tstruct __2843 noattr)) _d\n                                      (tarray tulong 4))\n                                    (Econst_int (Int.repr 3) tint)\n                                    (tptr tulong)) tulong))\n                              (Scall None\n                                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                ((Eaddrof\n                                   (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 (Etempvar _t'9 tulong) :: nil)))\n                            (Ssequence\n                              (Ssequence\n                                (Scall (Some _t'4)\n                                  (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                   Tnil)\n                                                                 tulong\n                                                                 cc_default))\n                                  ((Eaddrof\n                                     (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   nil))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                          (Tstruct __2843 noattr)) _d\n                                        (tarray tulong 4))\n                                      (Econst_int (Int.repr 3) tint)\n                                      (tptr tulong)) tulong)\n                                  (Etempvar _t'4 tulong)))\n                              (Ssequence\n                                (Scall None\n                                  (Evar _secp256k1_u128_rshift (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                   (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                 tvoid\n                                                                 cc_default))\n                                  ((Eaddrof\n                                     (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   (Econst_int (Int.repr 64) tint) :: nil))\n                                (Ssequence\n                                  (Ssequence\n                                    (Ssequence\n                                      (Scall (Some _t'5)\n                                        (Evar _secp256k1_u128_to_u64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tulong cc_default))\n                                        ((Eaddrof\n                                           (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Scall (Some _t'6)\n                                        (Evar _secp256k1_scalar_check_overflow \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            Tnil) tint cc_default))\n                                        ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n                                         nil)))\n                                    (Sset _overflow\n                                      (Ecast\n                                        (Ebinop Oadd (Etempvar _t'5 tulong)\n                                          (Etempvar _t'6 tint) tulong) tint)))\n                                  (Ssequence\n                                    (Sloop\n                                      (Ssequence\n                                        (Sifthenelse (Ebinop Oeq\n                                                       (Etempvar _overflow tint)\n                                                       (Econst_int (Int.repr 0) tint)\n                                                       tint)\n                                          (Sset _t'7\n                                            (Econst_int (Int.repr 1) tint))\n                                          (Sset _t'7\n                                            (Ecast\n                                              (Ebinop Oeq\n                                                (Etempvar _overflow tint)\n                                                (Econst_int (Int.repr 1) tint)\n                                                tint) tbool)))\n                                        (Sifthenelse (Eunop Onotbool\n                                                       (Etempvar _t'7 tint)\n                                                       tint)\n                                          (Sloop\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'8\n                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                (Scall None\n                                                  (Evar _fprintf (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                   tint\n                                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                  ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                   (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                   (Econst_int (Int.repr 105) tint) ::\n                                                   (Evar ___stringlit_117 (tarray tschar 54)) ::\n                                                   nil)))\n                                              (Scall None\n                                                (Evar _abort (Tfunction Tnil\n                                                               tvoid\n                                                               cc_default))\n                                                nil))\n                                            Sbreak)\n                                          Sskip))\n                                      Sbreak)\n                                    (Ssequence\n                                      (Scall None\n                                        (Evar _secp256k1_scalar_reduce \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            (Tcons tuint Tnil)) tint\n                                          cc_default))\n                                        ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n                                         (Etempvar _overflow tint) :: nil))\n                                      (Sreturn (Some (Etempvar _overflow tint))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_cadd_bit := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) :: (_bit, tuint) ::\n                (_flag, tint) :: nil);\n  fn_vars := ((_t, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: (_t'1, tulong) ::\n               (_t'11, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'10, tulong) :: (_t'9, tulong) :: (_t'8, tulong) ::\n               (_t'7, tulong) :: (_t'6, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Olt (Etempvar _bit tuint)\n                     (Econst_int (Int.repr 256) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'11 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'11 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_112 (tarray tschar 29)) ::\n               (Econst_int (Int.repr 112) tint) ::\n               (Evar ___stringlit_118 (tarray tschar 33)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sset _bit\n      (Ebinop Oadd (Etempvar _bit tuint)\n        (Ebinop Oand\n          (Ebinop Osub (Ecast (Etempvar _flag tint) tuint)\n            (Econst_int (Int.repr 1) tint) tuint)\n          (Econst_int (Int.repr 256) tint) tuint) tuint))\n    (Ssequence\n      (Ssequence\n        (Sset _t'10\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                  (Tstruct __2843 noattr)) _d (tarray tulong 4))\n              (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n        (Scall None\n          (Evar _secp256k1_u128_from_u64 (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                             (Tcons tulong Tnil)) tvoid\n                                           cc_default))\n          ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n           (Etempvar _t'10 tulong) :: nil)))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                              (Tcons tulong Tnil)) tvoid\n                                            cc_default))\n          ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n           (Ebinop Oshl\n             (Ecast\n               (Ebinop Oeq\n                 (Ebinop Oshr (Etempvar _bit tuint)\n                   (Econst_int (Int.repr 6) tint) tuint)\n                 (Econst_int (Int.repr 0) tint) tint) tulong)\n             (Ebinop Oand (Etempvar _bit tuint)\n               (Econst_int (Int.repr 63) tint) tuint) tulong) :: nil))\n        (Ssequence\n          (Ssequence\n            (Scall (Some _t'1)\n              (Evar _secp256k1_u128_to_u64 (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                               Tnil) tulong cc_default))\n              ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                 (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                      (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                  (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n              (Etempvar _t'1 tulong)))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_u128_rshift (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                               (Tcons tuint Tnil)) tvoid\n                                             cc_default))\n              ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n               (Econst_int (Int.repr 64) tint) :: nil))\n            (Ssequence\n              (Ssequence\n                (Sset _t'9\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                          (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                      (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n                (Scall None\n                  (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      (Tcons tulong Tnil))\n                                                    tvoid cc_default))\n                  ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                   (Etempvar _t'9 tulong) :: nil)))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      (Tcons tulong Tnil))\n                                                    tvoid cc_default))\n                  ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                   (Ebinop Oshl\n                     (Ecast\n                       (Ebinop Oeq\n                         (Ebinop Oshr (Etempvar _bit tuint)\n                           (Econst_int (Int.repr 6) tint) tuint)\n                         (Econst_int (Int.repr 1) tint) tint) tulong)\n                     (Ebinop Oand (Etempvar _bit tuint)\n                       (Econst_int (Int.repr 63) tint) tuint) tulong) :: nil))\n                (Ssequence\n                  (Ssequence\n                    (Scall (Some _t'2)\n                      (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                       Tnil) tulong\n                                                     cc_default))\n                      ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                          (Econst_int (Int.repr 1) tint) (tptr tulong))\n                        tulong) (Etempvar _t'2 tulong)))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_u128_rshift (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                       (Tcons tuint Tnil))\n                                                     tvoid cc_default))\n                      ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                       (Econst_int (Int.repr 64) tint) :: nil))\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'8\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                  (Tstruct __2843 noattr)) _d\n                                (tarray tulong 4))\n                              (Econst_int (Int.repr 2) tint) (tptr tulong))\n                            tulong))\n                        (Scall None\n                          (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tulong\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                          ((Eaddrof\n                             (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                           (Etempvar _t'8 tulong) :: nil)))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tulong\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                          ((Eaddrof\n                             (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                           (Ebinop Oshl\n                             (Ecast\n                               (Ebinop Oeq\n                                 (Ebinop Oshr (Etempvar _bit tuint)\n                                   (Econst_int (Int.repr 6) tint) tuint)\n                                 (Econst_int (Int.repr 2) tint) tint) tulong)\n                             (Ebinop Oand (Etempvar _bit tuint)\n                               (Econst_int (Int.repr 63) tint) tuint) tulong) ::\n                           nil))\n                        (Ssequence\n                          (Ssequence\n                            (Scall (Some _t'3)\n                              (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                               Tnil) tulong\n                                                             cc_default))\n                              ((Eaddrof\n                                 (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               nil))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                      (Tstruct __2843 noattr)) _d\n                                    (tarray tulong 4))\n                                  (Econst_int (Int.repr 2) tint)\n                                  (tptr tulong)) tulong)\n                              (Etempvar _t'3 tulong)))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_u128_rshift (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                               (Tcons tuint\n                                                                 Tnil)) tvoid\n                                                             cc_default))\n                              ((Eaddrof\n                                 (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               (Econst_int (Int.repr 64) tint) :: nil))\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'7\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                          (Tstruct __2843 noattr)) _d\n                                        (tarray tulong 4))\n                                      (Econst_int (Int.repr 3) tint)\n                                      (tptr tulong)) tulong))\n                                (Scall None\n                                  (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                  ((Eaddrof\n                                     (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   (Etempvar _t'7 tulong) :: nil)))\n                              (Ssequence\n                                (Scall None\n                                  (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                  ((Eaddrof\n                                     (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   (Ebinop Oshl\n                                     (Ecast\n                                       (Ebinop Oeq\n                                         (Ebinop Oshr (Etempvar _bit tuint)\n                                           (Econst_int (Int.repr 6) tint)\n                                           tuint)\n                                         (Econst_int (Int.repr 3) tint) tint)\n                                       tulong)\n                                     (Ebinop Oand (Etempvar _bit tuint)\n                                       (Econst_int (Int.repr 63) tint) tuint)\n                                     tulong) :: nil))\n                                (Ssequence\n                                  (Ssequence\n                                    (Scall (Some _t'4)\n                                      (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                      ((Eaddrof\n                                         (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                       nil))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                              (Tstruct __2843 noattr)) _d\n                                            (tarray tulong 4))\n                                          (Econst_int (Int.repr 3) tint)\n                                          (tptr tulong)) tulong)\n                                      (Etempvar _t'4 tulong)))\n                                  (Sloop\n                                    (Ssequence\n                                      (Scall (Some _t'5)\n                                        (Evar _secp256k1_u128_hi_u64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tulong cc_default))\n                                        ((Eaddrof\n                                           (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Ebinop Oeq\n                                                       (Etempvar _t'5 tulong)\n                                                       (Econst_int (Int.repr 0) tint)\n                                                       tint) tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'6\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                 (Econst_int (Int.repr 127) tint) ::\n                                                 (Evar ___stringlit_119 (tarray tschar 54)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip))\n                                    Sbreak))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_set_b32 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_b32, (tptr tuchar)) :: (_overflow, (tptr tint)) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_over, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'34, tuchar) :: (_t'33, tuchar) :: (_t'32, tuchar) ::\n               (_t'31, tuchar) :: (_t'30, tuchar) :: (_t'29, tuchar) ::\n               (_t'28, tuchar) :: (_t'27, tuchar) :: (_t'26, tuchar) ::\n               (_t'25, tuchar) :: (_t'24, tuchar) :: (_t'23, tuchar) ::\n               (_t'22, tuchar) :: (_t'21, tuchar) :: (_t'20, tuchar) ::\n               (_t'19, tuchar) :: (_t'18, tuchar) :: (_t'17, tuchar) ::\n               (_t'16, tuchar) :: (_t'15, tuchar) :: (_t'14, tuchar) ::\n               (_t'13, tuchar) :: (_t'12, tuchar) :: (_t'11, tuchar) ::\n               (_t'10, tuchar) :: (_t'9, tuchar) :: (_t'8, tuchar) ::\n               (_t'7, tuchar) :: (_t'6, tuchar) :: (_t'5, tuchar) ::\n               (_t'4, tuchar) :: (_t'3, tuchar) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'27\n      (Ederef\n        (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n          (Econst_int (Int.repr 31) tint) (tptr tuchar)) tuchar))\n    (Ssequence\n      (Sset _t'28\n        (Ederef\n          (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n            (Econst_int (Int.repr 30) tint) (tptr tuchar)) tuchar))\n      (Ssequence\n        (Sset _t'29\n          (Ederef\n            (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n              (Econst_int (Int.repr 29) tint) (tptr tuchar)) tuchar))\n        (Ssequence\n          (Sset _t'30\n            (Ederef\n              (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                (Econst_int (Int.repr 28) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'31\n              (Ederef\n                (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                  (Econst_int (Int.repr 27) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'32\n                (Ederef\n                  (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                    (Econst_int (Int.repr 26) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'33\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                      (Econst_int (Int.repr 25) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'34\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                        (Econst_int (Int.repr 24) tint) (tptr tuchar))\n                      tuchar))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n                    (Ebinop Oor\n                      (Ebinop Oor\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ebinop Oor\n                                  (Ecast (Etempvar _t'27 tuchar) tulong)\n                                  (Ebinop Oshl\n                                    (Ecast (Etempvar _t'28 tuchar) tulong)\n                                    (Econst_int (Int.repr 8) tint) tulong)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'29 tuchar) tulong)\n                                  (Econst_int (Int.repr 16) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'30 tuchar) tulong)\n                                (Econst_int (Int.repr 24) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'31 tuchar) tulong)\n                              (Econst_int (Int.repr 32) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'32 tuchar) tulong)\n                            (Econst_int (Int.repr 40) tint) tulong) tulong)\n                        (Ebinop Oshl (Ecast (Etempvar _t'33 tuchar) tulong)\n                          (Econst_int (Int.repr 48) tint) tulong) tulong)\n                      (Ebinop Oshl (Ecast (Etempvar _t'34 tuchar) tulong)\n                        (Econst_int (Int.repr 56) tint) tulong) tulong))))))))))\n  (Ssequence\n    (Ssequence\n      (Sset _t'19\n        (Ederef\n          (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n            (Econst_int (Int.repr 23) tint) (tptr tuchar)) tuchar))\n      (Ssequence\n        (Sset _t'20\n          (Ederef\n            (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n              (Econst_int (Int.repr 22) tint) (tptr tuchar)) tuchar))\n        (Ssequence\n          (Sset _t'21\n            (Ederef\n              (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                (Econst_int (Int.repr 21) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'22\n              (Ederef\n                (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                  (Econst_int (Int.repr 20) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'23\n                (Ederef\n                  (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                    (Econst_int (Int.repr 19) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'24\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                      (Econst_int (Int.repr 18) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'25\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                        (Econst_int (Int.repr 17) tint) (tptr tuchar))\n                      tuchar))\n                  (Ssequence\n                    (Sset _t'26\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                          (Econst_int (Int.repr 16) tint) (tptr tuchar))\n                        tuchar))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                          (Econst_int (Int.repr 1) tint) (tptr tulong))\n                        tulong)\n                      (Ebinop Oor\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ebinop Oor\n                                  (Ebinop Oor\n                                    (Ecast (Etempvar _t'19 tuchar) tulong)\n                                    (Ebinop Oshl\n                                      (Ecast (Etempvar _t'20 tuchar) tulong)\n                                      (Econst_int (Int.repr 8) tint) tulong)\n                                    tulong)\n                                  (Ebinop Oshl\n                                    (Ecast (Etempvar _t'21 tuchar) tulong)\n                                    (Econst_int (Int.repr 16) tint) tulong)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'22 tuchar) tulong)\n                                  (Econst_int (Int.repr 24) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'23 tuchar) tulong)\n                                (Econst_int (Int.repr 32) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'24 tuchar) tulong)\n                              (Econst_int (Int.repr 40) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'25 tuchar) tulong)\n                            (Econst_int (Int.repr 48) tint) tulong) tulong)\n                        (Ebinop Oshl (Ecast (Etempvar _t'26 tuchar) tulong)\n                          (Econst_int (Int.repr 56) tint) tulong) tulong))))))))))\n    (Ssequence\n      (Ssequence\n        (Sset _t'11\n          (Ederef\n            (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n              (Econst_int (Int.repr 15) tint) (tptr tuchar)) tuchar))\n        (Ssequence\n          (Sset _t'12\n            (Ederef\n              (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                (Econst_int (Int.repr 14) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'13\n              (Ederef\n                (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                  (Econst_int (Int.repr 13) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'14\n                (Ederef\n                  (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                    (Econst_int (Int.repr 12) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'15\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                      (Econst_int (Int.repr 11) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'16\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                        (Econst_int (Int.repr 10) tint) (tptr tuchar))\n                      tuchar))\n                  (Ssequence\n                    (Sset _t'17\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                          (Econst_int (Int.repr 9) tint) (tptr tuchar))\n                        tuchar))\n                    (Ssequence\n                      (Sset _t'18\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                            (Econst_int (Int.repr 8) tint) (tptr tuchar))\n                          tuchar))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                (Tstruct __2843 noattr)) _d\n                              (tarray tulong 4))\n                            (Econst_int (Int.repr 2) tint) (tptr tulong))\n                          tulong)\n                        (Ebinop Oor\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ebinop Oor\n                                  (Ebinop Oor\n                                    (Ebinop Oor\n                                      (Ecast (Etempvar _t'11 tuchar) tulong)\n                                      (Ebinop Oshl\n                                        (Ecast (Etempvar _t'12 tuchar)\n                                          tulong)\n                                        (Econst_int (Int.repr 8) tint)\n                                        tulong) tulong)\n                                    (Ebinop Oshl\n                                      (Ecast (Etempvar _t'13 tuchar) tulong)\n                                      (Econst_int (Int.repr 16) tint) tulong)\n                                    tulong)\n                                  (Ebinop Oshl\n                                    (Ecast (Etempvar _t'14 tuchar) tulong)\n                                    (Econst_int (Int.repr 24) tint) tulong)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'15 tuchar) tulong)\n                                  (Econst_int (Int.repr 32) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'16 tuchar) tulong)\n                                (Econst_int (Int.repr 40) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'17 tuchar) tulong)\n                              (Econst_int (Int.repr 48) tint) tulong) tulong)\n                          (Ebinop Oshl (Ecast (Etempvar _t'18 tuchar) tulong)\n                            (Econst_int (Int.repr 56) tint) tulong) tulong))))))))))\n      (Ssequence\n        (Ssequence\n          (Sset _t'3\n            (Ederef\n              (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                (Econst_int (Int.repr 7) tint) (tptr tuchar)) tuchar))\n          (Ssequence\n            (Sset _t'4\n              (Ederef\n                (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                  (Econst_int (Int.repr 6) tint) (tptr tuchar)) tuchar))\n            (Ssequence\n              (Sset _t'5\n                (Ederef\n                  (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                    (Econst_int (Int.repr 5) tint) (tptr tuchar)) tuchar))\n              (Ssequence\n                (Sset _t'6\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                      (Econst_int (Int.repr 4) tint) (tptr tuchar)) tuchar))\n                (Ssequence\n                  (Sset _t'7\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                        (Econst_int (Int.repr 3) tint) (tptr tuchar)) tuchar))\n                  (Ssequence\n                    (Sset _t'8\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                          (Econst_int (Int.repr 2) tint) (tptr tuchar))\n                        tuchar))\n                    (Ssequence\n                      (Sset _t'9\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                            (Econst_int (Int.repr 1) tint) (tptr tuchar))\n                          tuchar))\n                      (Ssequence\n                        (Sset _t'10\n                          (Ederef\n                            (Ebinop Oadd (Etempvar _b32 (tptr tuchar))\n                              (Econst_int (Int.repr 0) tint) (tptr tuchar))\n                            tuchar))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                  (Tstruct __2843 noattr)) _d\n                                (tarray tulong 4))\n                              (Econst_int (Int.repr 3) tint) (tptr tulong))\n                            tulong)\n                          (Ebinop Oor\n                            (Ebinop Oor\n                              (Ebinop Oor\n                                (Ebinop Oor\n                                  (Ebinop Oor\n                                    (Ebinop Oor\n                                      (Ebinop Oor\n                                        (Ecast (Etempvar _t'3 tuchar) tulong)\n                                        (Ebinop Oshl\n                                          (Ecast (Etempvar _t'4 tuchar)\n                                            tulong)\n                                          (Econst_int (Int.repr 8) tint)\n                                          tulong) tulong)\n                                      (Ebinop Oshl\n                                        (Ecast (Etempvar _t'5 tuchar) tulong)\n                                        (Econst_int (Int.repr 16) tint)\n                                        tulong) tulong)\n                                    (Ebinop Oshl\n                                      (Ecast (Etempvar _t'6 tuchar) tulong)\n                                      (Econst_int (Int.repr 24) tint) tulong)\n                                    tulong)\n                                  (Ebinop Oshl\n                                    (Ecast (Etempvar _t'7 tuchar) tulong)\n                                    (Econst_int (Int.repr 32) tint) tulong)\n                                  tulong)\n                                (Ebinop Oshl\n                                  (Ecast (Etempvar _t'8 tuchar) tulong)\n                                  (Econst_int (Int.repr 40) tint) tulong)\n                                tulong)\n                              (Ebinop Oshl\n                                (Ecast (Etempvar _t'9 tuchar) tulong)\n                                (Econst_int (Int.repr 48) tint) tulong)\n                              tulong)\n                            (Ebinop Oshl\n                              (Ecast (Etempvar _t'10 tuchar) tulong)\n                              (Econst_int (Int.repr 56) tint) tulong) tulong))))))))))\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Scall (Some _t'1)\n                (Evar _secp256k1_scalar_check_overflow (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __2843 noattr))\n                                                           Tnil) tint\n                                                         cc_default))\n                ((Etempvar _r (tptr (Tstruct __2843 noattr))) :: nil))\n              (Scall (Some _t'2)\n                (Evar _secp256k1_scalar_reduce (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __2843 noattr))\n                                                   (Tcons tuint Tnil)) tint\n                                                 cc_default))\n                ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n                 (Etempvar _t'1 tint) :: nil)))\n            (Sset _over (Etempvar _t'2 tint)))\n          (Sifthenelse (Etempvar _overflow (tptr tint))\n            (Sassign (Ederef (Etempvar _overflow (tptr tint)) tint)\n              (Etempvar _over tint))\n            Sskip))))))\n|}.\n\nDefinition f_secp256k1_scalar_get_b32 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_bin, (tptr tuchar)) ::\n                (_a, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'32, tulong) :: (_t'31, tulong) :: (_t'30, tulong) ::\n               (_t'29, tulong) :: (_t'28, tulong) :: (_t'27, tulong) ::\n               (_t'26, tulong) :: (_t'25, tulong) :: (_t'24, tulong) ::\n               (_t'23, tulong) :: (_t'22, tulong) :: (_t'21, tulong) ::\n               (_t'20, tulong) :: (_t'19, tulong) :: (_t'18, tulong) ::\n               (_t'17, tulong) :: (_t'16, tulong) :: (_t'15, tulong) ::\n               (_t'14, tulong) :: (_t'13, tulong) :: (_t'12, tulong) ::\n               (_t'11, tulong) :: (_t'10, tulong) :: (_t'9, tulong) ::\n               (_t'8, tulong) :: (_t'7, tulong) :: (_t'6, tulong) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'32\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n    (Sassign\n      (Ederef\n        (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n          (Econst_int (Int.repr 0) tint) (tptr tuchar)) tuchar)\n      (Ebinop Oshr (Etempvar _t'32 tulong) (Econst_int (Int.repr 56) tint)\n        tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'31\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n      (Sassign\n        (Ederef\n          (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n            (Econst_int (Int.repr 1) tint) (tptr tuchar)) tuchar)\n        (Ebinop Oshr (Etempvar _t'31 tulong) (Econst_int (Int.repr 48) tint)\n          tulong)))\n    (Ssequence\n      (Ssequence\n        (Sset _t'30\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                  (Tstruct __2843 noattr)) _d (tarray tulong 4))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Sassign\n          (Ederef\n            (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n              (Econst_int (Int.repr 2) tint) (tptr tuchar)) tuchar)\n          (Ebinop Oshr (Etempvar _t'30 tulong)\n            (Econst_int (Int.repr 40) tint) tulong)))\n      (Ssequence\n        (Ssequence\n          (Sset _t'29\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                    (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                (Econst_int (Int.repr 3) tint) (tptr tuchar)) tuchar)\n            (Ebinop Oshr (Etempvar _t'29 tulong)\n              (Econst_int (Int.repr 32) tint) tulong)))\n        (Ssequence\n          (Ssequence\n            (Sset _t'28\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                      (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                  (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                  (Econst_int (Int.repr 4) tint) (tptr tuchar)) tuchar)\n              (Ebinop Oshr (Etempvar _t'28 tulong)\n                (Econst_int (Int.repr 24) tint) tulong)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'27\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                    (Econst_int (Int.repr 5) tint) (tptr tuchar)) tuchar)\n                (Ebinop Oshr (Etempvar _t'27 tulong)\n                  (Econst_int (Int.repr 16) tint) tulong)))\n            (Ssequence\n              (Ssequence\n                (Sset _t'26\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                          (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                      (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                      (Econst_int (Int.repr 6) tint) (tptr tuchar)) tuchar)\n                  (Ebinop Oshr (Etempvar _t'26 tulong)\n                    (Econst_int (Int.repr 8) tint) tulong)))\n              (Ssequence\n                (Ssequence\n                  (Sset _t'25\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                        (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                        (Econst_int (Int.repr 7) tint) (tptr tuchar)) tuchar)\n                    (Etempvar _t'25 tulong)))\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'24\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                          (Econst_int (Int.repr 2) tint) (tptr tulong))\n                        tulong))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                          (Econst_int (Int.repr 8) tint) (tptr tuchar))\n                        tuchar)\n                      (Ebinop Oshr (Etempvar _t'24 tulong)\n                        (Econst_int (Int.repr 56) tint) tulong)))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'23\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                (Tstruct __2843 noattr)) _d\n                              (tarray tulong 4))\n                            (Econst_int (Int.repr 2) tint) (tptr tulong))\n                          tulong))\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                            (Econst_int (Int.repr 9) tint) (tptr tuchar))\n                          tuchar)\n                        (Ebinop Oshr (Etempvar _t'23 tulong)\n                          (Econst_int (Int.repr 48) tint) tulong)))\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'22\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                  (Tstruct __2843 noattr)) _d\n                                (tarray tulong 4))\n                              (Econst_int (Int.repr 2) tint) (tptr tulong))\n                            tulong))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                              (Econst_int (Int.repr 10) tint) (tptr tuchar))\n                            tuchar)\n                          (Ebinop Oshr (Etempvar _t'22 tulong)\n                            (Econst_int (Int.repr 40) tint) tulong)))\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'21\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                    (Tstruct __2843 noattr)) _d\n                                  (tarray tulong 4))\n                                (Econst_int (Int.repr 2) tint) (tptr tulong))\n                              tulong))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                                (Econst_int (Int.repr 11) tint)\n                                (tptr tuchar)) tuchar)\n                            (Ebinop Oshr (Etempvar _t'21 tulong)\n                              (Econst_int (Int.repr 32) tint) tulong)))\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'20\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                      (Tstruct __2843 noattr)) _d\n                                    (tarray tulong 4))\n                                  (Econst_int (Int.repr 2) tint)\n                                  (tptr tulong)) tulong))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                                  (Econst_int (Int.repr 12) tint)\n                                  (tptr tuchar)) tuchar)\n                              (Ebinop Oshr (Etempvar _t'20 tulong)\n                                (Econst_int (Int.repr 24) tint) tulong)))\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'19\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                        (Tstruct __2843 noattr)) _d\n                                      (tarray tulong 4))\n                                    (Econst_int (Int.repr 2) tint)\n                                    (tptr tulong)) tulong))\n                              (Sassign\n                                (Ederef\n                                  (Ebinop Oadd (Etempvar _bin (tptr tuchar))\n                                    (Econst_int (Int.repr 13) tint)\n                                    (tptr tuchar)) tuchar)\n                                (Ebinop Oshr (Etempvar _t'19 tulong)\n                                  (Econst_int (Int.repr 16) tint) tulong)))\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'18\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                          (Tstruct __2843 noattr)) _d\n                                        (tarray tulong 4))\n                                      (Econst_int (Int.repr 2) tint)\n                                      (tptr tulong)) tulong))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Etempvar _bin (tptr tuchar))\n                                      (Econst_int (Int.repr 14) tint)\n                                      (tptr tuchar)) tuchar)\n                                  (Ebinop Oshr (Etempvar _t'18 tulong)\n                                    (Econst_int (Int.repr 8) tint) tulong)))\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'17\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Ederef\n                                            (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                            (Tstruct __2843 noattr)) _d\n                                          (tarray tulong 4))\n                                        (Econst_int (Int.repr 2) tint)\n                                        (tptr tulong)) tulong))\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Etempvar _bin (tptr tuchar))\n                                        (Econst_int (Int.repr 15) tint)\n                                        (tptr tuchar)) tuchar)\n                                    (Etempvar _t'17 tulong)))\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'16\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                              (Tstruct __2843 noattr)) _d\n                                            (tarray tulong 4))\n                                          (Econst_int (Int.repr 1) tint)\n                                          (tptr tulong)) tulong))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _bin (tptr tuchar))\n                                          (Econst_int (Int.repr 16) tint)\n                                          (tptr tuchar)) tuchar)\n                                      (Ebinop Oshr (Etempvar _t'16 tulong)\n                                        (Econst_int (Int.repr 56) tint)\n                                        tulong)))\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _t'15\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                (Tstruct __2843 noattr)) _d\n                                              (tarray tulong 4))\n                                            (Econst_int (Int.repr 1) tint)\n                                            (tptr tulong)) tulong))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Etempvar _bin (tptr tuchar))\n                                            (Econst_int (Int.repr 17) tint)\n                                            (tptr tuchar)) tuchar)\n                                        (Ebinop Oshr (Etempvar _t'15 tulong)\n                                          (Econst_int (Int.repr 48) tint)\n                                          tulong)))\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'14\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                  (Tstruct __2843 noattr)) _d\n                                                (tarray tulong 4))\n                                              (Econst_int (Int.repr 1) tint)\n                                              (tptr tulong)) tulong))\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Etempvar _bin (tptr tuchar))\n                                              (Econst_int (Int.repr 18) tint)\n                                              (tptr tuchar)) tuchar)\n                                          (Ebinop Oshr\n                                            (Etempvar _t'14 tulong)\n                                            (Econst_int (Int.repr 40) tint)\n                                            tulong)))\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'13\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Ederef\n                                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                    (Tstruct __2843 noattr))\n                                                  _d (tarray tulong 4))\n                                                (Econst_int (Int.repr 1) tint)\n                                                (tptr tulong)) tulong))\n                                          (Sassign\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Etempvar _bin (tptr tuchar))\n                                                (Econst_int (Int.repr 19) tint)\n                                                (tptr tuchar)) tuchar)\n                                            (Ebinop Oshr\n                                              (Etempvar _t'13 tulong)\n                                              (Econst_int (Int.repr 32) tint)\n                                              tulong)))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'12\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                      (Tstruct __2843 noattr))\n                                                    _d (tarray tulong 4))\n                                                  (Econst_int (Int.repr 1) tint)\n                                                  (tptr tulong)) tulong))\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Etempvar _bin (tptr tuchar))\n                                                  (Econst_int (Int.repr 20) tint)\n                                                  (tptr tuchar)) tuchar)\n                                              (Ebinop Oshr\n                                                (Etempvar _t'12 tulong)\n                                                (Econst_int (Int.repr 24) tint)\n                                                tulong)))\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'11\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Ederef\n                                                        (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                        (Tstruct __2843 noattr))\n                                                      _d (tarray tulong 4))\n                                                    (Econst_int (Int.repr 1) tint)\n                                                    (tptr tulong)) tulong))\n                                              (Sassign\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Etempvar _bin (tptr tuchar))\n                                                    (Econst_int (Int.repr 21) tint)\n                                                    (tptr tuchar)) tuchar)\n                                                (Ebinop Oshr\n                                                  (Etempvar _t'11 tulong)\n                                                  (Econst_int (Int.repr 16) tint)\n                                                  tulong)))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'10\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Efield\n                                                        (Ederef\n                                                          (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                          (Tstruct __2843 noattr))\n                                                        _d (tarray tulong 4))\n                                                      (Econst_int (Int.repr 1) tint)\n                                                      (tptr tulong)) tulong))\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Etempvar _bin (tptr tuchar))\n                                                      (Econst_int (Int.repr 22) tint)\n                                                      (tptr tuchar)) tuchar)\n                                                  (Ebinop Oshr\n                                                    (Etempvar _t'10 tulong)\n                                                    (Econst_int (Int.repr 8) tint)\n                                                    tulong)))\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sset _t'9\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Efield\n                                                          (Ederef\n                                                            (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                            (Tstruct __2843 noattr))\n                                                          _d\n                                                          (tarray tulong 4))\n                                                        (Econst_int (Int.repr 1) tint)\n                                                        (tptr tulong))\n                                                      tulong))\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Etempvar _bin (tptr tuchar))\n                                                        (Econst_int (Int.repr 23) tint)\n                                                        (tptr tuchar))\n                                                      tuchar)\n                                                    (Etempvar _t'9 tulong)))\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'8\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Ederef\n                                                              (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                              (Tstruct __2843 noattr))\n                                                            _d\n                                                            (tarray tulong 4))\n                                                          (Econst_int (Int.repr 0) tint)\n                                                          (tptr tulong))\n                                                        tulong))\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Etempvar _bin (tptr tuchar))\n                                                          (Econst_int (Int.repr 24) tint)\n                                                          (tptr tuchar))\n                                                        tuchar)\n                                                      (Ebinop Oshr\n                                                        (Etempvar _t'8 tulong)\n                                                        (Econst_int (Int.repr 56) tint)\n                                                        tulong)))\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'7\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Ederef\n                                                                (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                (Tstruct __2843 noattr))\n                                                              _d\n                                                              (tarray tulong 4))\n                                                            (Econst_int (Int.repr 0) tint)\n                                                            (tptr tulong))\n                                                          tulong))\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Etempvar _bin (tptr tuchar))\n                                                            (Econst_int (Int.repr 25) tint)\n                                                            (tptr tuchar))\n                                                          tuchar)\n                                                        (Ebinop Oshr\n                                                          (Etempvar _t'7 tulong)\n                                                          (Econst_int (Int.repr 48) tint)\n                                                          tulong)))\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Sset _t'6\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Ederef\n                                                                  (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                  (Tstruct __2843 noattr))\n                                                                _d\n                                                                (tarray tulong 4))\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              (tptr tulong))\n                                                            tulong))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Etempvar _bin (tptr tuchar))\n                                                              (Econst_int (Int.repr 26) tint)\n                                                              (tptr tuchar))\n                                                            tuchar)\n                                                          (Ebinop Oshr\n                                                            (Etempvar _t'6 tulong)\n                                                            (Econst_int (Int.repr 40) tint)\n                                                            tulong)))\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Sset _t'5\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Efield\n                                                                  (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                  _d\n                                                                  (tarray tulong 4))\n                                                                (Econst_int (Int.repr 0) tint)\n                                                                (tptr tulong))\n                                                              tulong))\n                                                          (Sassign\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Etempvar _bin (tptr tuchar))\n                                                                (Econst_int (Int.repr 27) tint)\n                                                                (tptr tuchar))\n                                                              tuchar)\n                                                            (Ebinop Oshr\n                                                              (Etempvar _t'5 tulong)\n                                                              (Econst_int (Int.repr 32) tint)\n                                                              tulong)))\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Sset _t'4\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                  (Econst_int (Int.repr 0) tint)\n                                                                  (tptr tulong))\n                                                                tulong))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Etempvar _bin (tptr tuchar))\n                                                                  (Econst_int (Int.repr 28) tint)\n                                                                  (tptr tuchar))\n                                                                tuchar)\n                                                              (Ebinop Oshr\n                                                                (Etempvar _t'4 tulong)\n                                                                (Econst_int (Int.repr 24) tint)\n                                                                tulong)))\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Sset _t'3\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                  tulong))\n                                                              (Sassign\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Etempvar _bin (tptr tuchar))\n                                                                    (Econst_int (Int.repr 29) tint)\n                                                                    (tptr tuchar))\n                                                                  tuchar)\n                                                                (Ebinop Oshr\n                                                                  (Etempvar _t'3 tulong)\n                                                                  (Econst_int (Int.repr 16) tint)\n                                                                  tulong)))\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'2\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _bin (tptr tuchar))\n                                                                    (Econst_int (Int.repr 30) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                  (Ebinop Oshr\n                                                                    (Etempvar _t'2 tulong)\n                                                                    (Econst_int (Int.repr 8) tint)\n                                                                    tulong)))\n                                                              (Ssequence\n                                                                (Sset _t'1\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _bin (tptr tuchar))\n                                                                    (Econst_int (Int.repr 31) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                  (Etempvar _t'1 tulong))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_is_zero := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Ederef\n      (Ebinop Oadd\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _t'2\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _t'3\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _t'4\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                  (Tstruct __2843 noattr)) _d (tarray tulong 4))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n        (Sreturn (Some (Ebinop Oeq\n                         (Ebinop Oor\n                           (Ebinop Oor\n                             (Ebinop Oor (Etempvar _t'1 tulong)\n                               (Etempvar _t'2 tulong) tulong)\n                             (Etempvar _t'3 tulong) tulong)\n                           (Etempvar _t'4 tulong) tulong)\n                         (Econst_int (Int.repr 0) tint) tint)))))))\n|}.\n\nDefinition f_secp256k1_scalar_negate := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_a, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_t, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_nonzero, tulong) :: (_t'5, tulong) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tint) ::\n               (_t'9, tulong) :: (_t'8, tulong) :: (_t'7, tulong) ::\n               (_t'6, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_scalar_is_zero (Tfunction\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          Tnil) tint cc_default))\n      ((Etempvar _a (tptr (Tstruct __2843 noattr))) :: nil))\n    (Sset _nonzero\n      (Ebinop Omul (Econst_long (Int64.repr (-1)) tulong)\n        (Ebinop Oeq (Etempvar _t'1 tint) (Econst_int (Int.repr 0) tint) tint)\n        tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'9\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n      (Scall None\n        (Evar _secp256k1_u128_from_u64 (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                           (Tcons tulong Tnil)) tvoid\n                                         cc_default))\n        ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n         (Eunop Onotint (Etempvar _t'9 tulong) tulong) :: nil)))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            (Tcons tulong Tnil)) tvoid\n                                          cc_default))\n        ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n         (Ebinop Oadd\n           (Ecast (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n             tulong) (Econst_int (Int.repr 1) tint) tulong) :: nil))\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'2)\n            (Evar _secp256k1_u128_to_u64 (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                             Tnil) tulong cc_default))\n            ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n               (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                    (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n            (Ebinop Oand (Etempvar _t'2 tulong) (Etempvar _nonzero tulong)\n              tulong)))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_u128_rshift (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                             (Tcons tuint Tnil)) tvoid\n                                           cc_default))\n            ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n             (Econst_int (Int.repr 64) tint) :: nil))\n          (Ssequence\n            (Ssequence\n              (Sset _t'8\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n              (Scall None\n                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong Tnil))\n                                                  tvoid cc_default))\n                ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                 (Eunop Onotint (Etempvar _t'8 tulong) tulong) :: nil)))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong Tnil))\n                                                  tvoid cc_default))\n                ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                 (Ecast\n                   (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                   tulong) :: nil))\n              (Ssequence\n                (Ssequence\n                  (Scall (Some _t'3)\n                    (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                     Tnil) tulong cc_default))\n                    ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                       (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                        (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                    (Ebinop Oand (Etempvar _t'3 tulong)\n                      (Etempvar _nonzero tulong) tulong)))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_u128_rshift (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                     (Tcons tuint Tnil))\n                                                   tvoid cc_default))\n                    ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                     (Econst_int (Int.repr 64) tint) :: nil))\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'7\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                (Tstruct __2843 noattr)) _d\n                              (tarray tulong 4))\n                            (Econst_int (Int.repr 2) tint) (tptr tulong))\n                          tulong))\n                      (Scall None\n                        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                        ((Eaddrof\n                           (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         (Eunop Onotint (Etempvar _t'7 tulong) tulong) ::\n                         nil)))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                        ((Eaddrof\n                           (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         (Ecast (Econst_long (Int64.repr (-2)) tulong)\n                           tulong) :: nil))\n                      (Ssequence\n                        (Ssequence\n                          (Scall (Some _t'4)\n                            (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                             Tnil) tulong\n                                                           cc_default))\n                            ((Eaddrof\n                               (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             nil))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                    (Tstruct __2843 noattr)) _d\n                                  (tarray tulong 4))\n                                (Econst_int (Int.repr 2) tint) (tptr tulong))\n                              tulong)\n                            (Ebinop Oand (Etempvar _t'4 tulong)\n                              (Etempvar _nonzero tulong) tulong)))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_u128_rshift (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                             (Tcons tuint\n                                                               Tnil)) tvoid\n                                                           cc_default))\n                            ((Eaddrof\n                               (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             (Econst_int (Int.repr 64) tint) :: nil))\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'6\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                        (Tstruct __2843 noattr)) _d\n                                      (tarray tulong 4))\n                                    (Econst_int (Int.repr 3) tint)\n                                    (tptr tulong)) tulong))\n                              (Scall None\n                                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                ((Eaddrof\n                                   (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 (Eunop Onotint (Etempvar _t'6 tulong)\n                                   tulong) :: nil)))\n                            (Ssequence\n                              (Scall None\n                                (Evar _secp256k1_u128_accum_u64 (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                ((Eaddrof\n                                   (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 (Ecast\n                                   (Econst_long (Int64.repr (-1)) tulong)\n                                   tulong) :: nil))\n                              (Ssequence\n                                (Scall (Some _t'5)\n                                  (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                   Tnil)\n                                                                 tulong\n                                                                 cc_default))\n                                  ((Eaddrof\n                                     (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   nil))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                          (Tstruct __2843 noattr)) _d\n                                        (tarray tulong 4))\n                                      (Econst_int (Int.repr 3) tint)\n                                      (tptr tulong)) tulong)\n                                  (Ebinop Oand (Etempvar _t'5 tulong)\n                                    (Etempvar _nonzero tulong) tulong))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_reduce_512 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_l, (tptr tulong)) :: nil);\n  fn_vars := ((_c128, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__1, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__2, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__3, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__4, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__5, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__6, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__7, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__8, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__9, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__10, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__11, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__12, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__13, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_c, tulong) :: (_c0, tulong) :: (_c1, tulong) ::\n               (_c2, tulong) :: (_n0, tulong) :: (_n1, tulong) ::\n               (_n2, tulong) :: (_n3, tulong) :: (_m0, tulong) ::\n               (_m1, tulong) :: (_m2, tulong) :: (_m3, tulong) ::\n               (_m4, tulong) :: (_m5, tulong) :: (_m6, tuint) ::\n               (_p0, tulong) :: (_p1, tulong) :: (_p2, tulong) ::\n               (_p3, tulong) :: (_p4, tuint) :: (_tl, tulong) ::\n               (_th, tulong) :: (_tl__1, tulong) :: (_th__1, tulong) ::\n               (_tl__2, tulong) :: (_th__2, tulong) :: (_over, tuint) ::\n               (_tl__3, tulong) :: (_th__3, tulong) :: (_tl__4, tulong) ::\n               (_th__4, tulong) :: (_over__1, tuint) :: (_over__2, tuint) ::\n               (_tl__5, tulong) :: (_th__5, tulong) :: (_tl__6, tulong) ::\n               (_th__6, tulong) :: (_over__3, tuint) :: (_tl__7, tulong) ::\n               (_th__7, tulong) :: (_over__4, tuint) :: (_tl__8, tulong) ::\n               (_th__8, tulong) :: (_tl__9, tulong) :: (_th__9, tulong) ::\n               (_tl__10, tulong) :: (_th__10, tulong) :: (_over__5, tuint) ::\n               (_tl__11, tulong) :: (_th__11, tulong) :: (_tl__12, tulong) ::\n               (_th__12, tulong) :: (_over__6, tuint) :: (_tl__13, tulong) ::\n               (_th__13, tulong) :: (_t'45, tint) :: (_t'44, tulong) ::\n               (_t'43, tulong) :: (_t'42, tulong) :: (_t'41, tulong) ::\n               (_t'40, tulong) :: (_t'39, tulong) :: (_t'38, tulong) ::\n               (_t'37, tint) :: (_t'36, tulong) :: (_t'35, tulong) ::\n               (_t'34, tint) :: (_t'33, tulong) :: (_t'32, tulong) ::\n               (_t'31, tint) :: (_t'30, tulong) :: (_t'29, tulong) ::\n               (_t'28, tint) :: (_t'27, tulong) :: (_t'26, tulong) ::\n               (_t'25, tulong) :: (_t'24, tulong) :: (_t'23, tint) ::\n               (_t'22, tulong) :: (_t'21, tulong) :: (_t'20, tint) ::\n               (_t'19, tulong) :: (_t'18, tulong) :: (_t'17, tint) ::\n               (_t'16, tulong) :: (_t'15, tulong) :: (_t'14, tint) ::\n               (_t'13, tulong) :: (_t'12, tulong) :: (_t'11, tint) ::\n               (_t'10, tulong) :: (_t'9, tulong) :: (_t'8, tint) ::\n               (_t'7, tulong) :: (_t'6, tulong) :: (_t'5, tint) ::\n               (_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) ::\n               (_t'82, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'81, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'80, tulong) :: (_t'79, tulong) ::\n               (_t'78, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'77, tulong) ::\n               (_t'76, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'75, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'74, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'73, tulong) :: (_t'72, tulong) ::\n               (_t'71, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'70, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'69, tulong) :: (_t'68, tulong) ::\n               (_t'67, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'66, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'65, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'64, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'63, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'62, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'61, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'60, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'59, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'58, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'57, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'56, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'55, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'54, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'53, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'52, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'51, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'50, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'49, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'48, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'47, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'46, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _n0\n    (Ederef\n      (Ebinop Oadd (Etempvar _l (tptr tulong)) (Econst_int (Int.repr 4) tint)\n        (tptr tulong)) tulong))\n  (Ssequence\n    (Sset _n1\n      (Ederef\n        (Ebinop Oadd (Etempvar _l (tptr tulong))\n          (Econst_int (Int.repr 5) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _n2\n        (Ederef\n          (Ebinop Oadd (Etempvar _l (tptr tulong))\n            (Econst_int (Int.repr 6) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _n3\n          (Ederef\n            (Ebinop Oadd (Etempvar _l (tptr tulong))\n              (Econst_int (Int.repr 7) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _c0\n            (Ederef\n              (Ebinop Oadd (Etempvar _l (tptr tulong))\n                (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sset _c1 (Ecast (Econst_int (Int.repr 0) tint) tulong))\n            (Ssequence\n              (Sset _c2 (Ecast (Econst_int (Int.repr 0) tint) tulong))\n              (Ssequence\n                (Ssequence\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_u128_mul (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong\n                                                      (Tcons tulong Tnil)))\n                                                  tvoid cc_default))\n                      ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                       (Etempvar _n0 tulong) ::\n                       (Ebinop Oadd\n                         (Eunop Onotint\n                           (Ecast\n                             (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                             tulong) tulong) (Econst_int (Int.repr 1) tint)\n                         tulong) :: nil))\n                    (Ssequence\n                      (Ssequence\n                        (Scall (Some _t'1)\n                          (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                           Tnil) tulong\n                                                         cc_default))\n                          ((Eaddrof\n                             (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                           nil))\n                        (Sset _th (Etempvar _t'1 tulong)))\n                      (Ssequence\n                        (Scall (Some _t'2)\n                          (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                           Tnil) tulong\n                                                         cc_default))\n                          ((Eaddrof\n                             (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                           nil))\n                        (Sset _tl (Etempvar _t'2 tulong)))))\n                  (Ssequence\n                    (Sset _c0\n                      (Ebinop Oadd (Etempvar _c0 tulong)\n                        (Etempvar _tl tulong) tulong))\n                    (Ssequence\n                      (Sset _th\n                        (Ebinop Oadd (Etempvar _th tulong)\n                          (Ebinop Olt (Etempvar _c0 tulong)\n                            (Etempvar _tl tulong) tint) tulong))\n                      (Ssequence\n                        (Sset _c1\n                          (Ebinop Oadd (Etempvar _c1 tulong)\n                            (Etempvar _th tulong) tulong))\n                        (Sloop\n                          (Sifthenelse (Eunop Onotbool\n                                         (Ebinop Oge (Etempvar _c1 tulong)\n                                           (Etempvar _th tulong) tint) tint)\n                            (Sloop\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'82\n                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                  (Scall None\n                                    (Evar _fprintf (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __IO_FILE noattr))\n                                                       (Tcons (tptr tschar)\n                                                         Tnil)) tint\n                                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                    ((Etempvar _t'82 (tptr (Tstruct __IO_FILE noattr))) ::\n                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                     (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                     (Econst_int (Int.repr 524) tint) ::\n                                     (Evar ___stringlit_120 (tarray tschar 32)) ::\n                                     nil)))\n                                (Scall None\n                                  (Evar _abort (Tfunction Tnil tvoid\n                                                 cc_default)) nil))\n                              Sbreak)\n                            Sskip)\n                          Sbreak)))))\n                (Ssequence\n                  (Ssequence\n                    (Sset _m0 (Etempvar _c0 tulong))\n                    (Ssequence\n                      (Sset _c0 (Etempvar _c1 tulong))\n                      (Ssequence\n                        (Sset _c1\n                          (Ecast (Econst_int (Int.repr 0) tint) tulong))\n                        (Sloop\n                          (Sifthenelse (Eunop Onotbool\n                                         (Ebinop Oeq (Etempvar _c2 tulong)\n                                           (Econst_int (Int.repr 0) tint)\n                                           tint) tint)\n                            (Sloop\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'81\n                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                  (Scall None\n                                    (Evar _fprintf (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __IO_FILE noattr))\n                                                       (Tcons (tptr tschar)\n                                                         Tnil)) tint\n                                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                    ((Etempvar _t'81 (tptr (Tstruct __IO_FILE noattr))) ::\n                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                     (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                     (Econst_int (Int.repr 525) tint) ::\n                                     (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                     nil)))\n                                (Scall None\n                                  (Evar _abort (Tfunction Tnil tvoid\n                                                 cc_default)) nil))\n                              Sbreak)\n                            Sskip)\n                          Sbreak))))\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'80\n                          (Ederef\n                            (Ebinop Oadd (Etempvar _l (tptr tulong))\n                              (Econst_int (Int.repr 1) tint) (tptr tulong))\n                            tulong))\n                        (Sset _c0\n                          (Ebinop Oadd (Etempvar _c0 tulong)\n                            (Etempvar _t'80 tulong) tulong)))\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'79\n                            (Ederef\n                              (Ebinop Oadd (Etempvar _l (tptr tulong))\n                                (Econst_int (Int.repr 1) tint) (tptr tulong))\n                              tulong))\n                          (Sset _c1\n                            (Ebinop Oadd (Etempvar _c1 tulong)\n                              (Ebinop Olt (Etempvar _c0 tulong)\n                                (Etempvar _t'79 tulong) tint) tulong)))\n                        (Ssequence\n                          (Sloop\n                            (Ssequence\n                              (Sset _t'77\n                                (Ederef\n                                  (Ebinop Oadd (Etempvar _l (tptr tulong))\n                                    (Econst_int (Int.repr 1) tint)\n                                    (tptr tulong)) tulong))\n                              (Sifthenelse (Eunop Onotbool\n                                             (Ebinop Oor\n                                               (Ebinop One\n                                                 (Etempvar _c1 tulong)\n                                                 (Econst_int (Int.repr 0) tint)\n                                                 tint)\n                                               (Ebinop Oge\n                                                 (Etempvar _c0 tulong)\n                                                 (Etempvar _t'77 tulong)\n                                                 tint) tint) tint)\n                                (Sloop\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _t'78\n                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                      (Scall None\n                                        (Evar _fprintf (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __IO_FILE noattr))\n                                                           (Tcons\n                                                             (tptr tschar)\n                                                             Tnil)) tint\n                                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                        ((Etempvar _t'78 (tptr (Tstruct __IO_FILE noattr))) ::\n                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                         (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                         (Econst_int (Int.repr 526) tint) ::\n                                         (Evar ___stringlit_122 (tarray tschar 50)) ::\n                                         nil)))\n                                    (Scall None\n                                      (Evar _abort (Tfunction Tnil tvoid\n                                                     cc_default)) nil))\n                                  Sbreak)\n                                Sskip))\n                            Sbreak)\n                          (Sloop\n                            (Sifthenelse (Eunop Onotbool\n                                           (Ebinop Oeq (Etempvar _c2 tulong)\n                                             (Econst_int (Int.repr 0) tint)\n                                             tint) tint)\n                              (Sloop\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'76\n                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                    (Scall None\n                                      (Evar _fprintf (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __IO_FILE noattr))\n                                                         (Tcons (tptr tschar)\n                                                           Tnil)) tint\n                                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                      ((Etempvar _t'76 (tptr (Tstruct __IO_FILE noattr))) ::\n                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                       (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                       (Econst_int (Int.repr 526) tint) ::\n                                       (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                       nil)))\n                                  (Scall None\n                                    (Evar _abort (Tfunction Tnil tvoid\n                                                   cc_default)) nil))\n                                Sbreak)\n                              Sskip)\n                            Sbreak))))\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_u128_mul (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tulong\n                                                            (Tcons tulong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                            ((Eaddrof\n                               (Evar _t__1 (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             (Etempvar _n1 tulong) ::\n                             (Ebinop Oadd\n                               (Eunop Onotint\n                                 (Ecast\n                                   (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                                   tulong) tulong)\n                               (Econst_int (Int.repr 1) tint) tulong) :: nil))\n                          (Ssequence\n                            (Ssequence\n                              (Scall (Some _t'3)\n                                (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                 Tnil) tulong\n                                                               cc_default))\n                                ((Eaddrof\n                                   (Evar _t__1 (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 nil))\n                              (Sset _th__1 (Etempvar _t'3 tulong)))\n                            (Ssequence\n                              (Scall (Some _t'4)\n                                (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                 Tnil) tulong\n                                                               cc_default))\n                                ((Eaddrof\n                                   (Evar _t__1 (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 nil))\n                              (Sset _tl__1 (Etempvar _t'4 tulong)))))\n                        (Ssequence\n                          (Sset _c0\n                            (Ebinop Oadd (Etempvar _c0 tulong)\n                              (Etempvar _tl__1 tulong) tulong))\n                          (Ssequence\n                            (Sset _th__1\n                              (Ebinop Oadd (Etempvar _th__1 tulong)\n                                (Ebinop Olt (Etempvar _c0 tulong)\n                                  (Etempvar _tl__1 tulong) tint) tulong))\n                            (Ssequence\n                              (Sset _c1\n                                (Ebinop Oadd (Etempvar _c1 tulong)\n                                  (Etempvar _th__1 tulong) tulong))\n                              (Ssequence\n                                (Sset _c2\n                                  (Ebinop Oadd (Etempvar _c2 tulong)\n                                    (Ebinop Olt (Etempvar _c1 tulong)\n                                      (Etempvar _th__1 tulong) tint) tulong))\n                                (Sloop\n                                  (Ssequence\n                                    (Sifthenelse (Ebinop Oge\n                                                   (Etempvar _c1 tulong)\n                                                   (Etempvar _th__1 tulong)\n                                                   tint)\n                                      (Sset _t'5\n                                        (Econst_int (Int.repr 1) tint))\n                                      (Sset _t'5\n                                        (Ecast\n                                          (Ebinop One (Etempvar _c2 tulong)\n                                            (Econst_int (Int.repr 0) tint)\n                                            tint) tbool)))\n                                    (Sifthenelse (Eunop Onotbool\n                                                   (Etempvar _t'5 tint) tint)\n                                      (Sloop\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'75\n                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                            (Scall None\n                                              (Evar _fprintf (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                                 (Tcons\n                                                                   (tptr tschar)\n                                                                   Tnil))\n                                                               tint\n                                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                              ((Etempvar _t'75 (tptr (Tstruct __IO_FILE noattr))) ::\n                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                               (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                               (Econst_int (Int.repr 527) tint) ::\n                                               (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                               nil)))\n                                          (Scall None\n                                            (Evar _abort (Tfunction Tnil\n                                                           tvoid cc_default))\n                                            nil))\n                                        Sbreak)\n                                      Sskip))\n                                  Sbreak))))))\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_u128_mul (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              (Tcons tulong\n                                                                Tnil))) tvoid\n                                                          cc_default))\n                              ((Eaddrof\n                                 (Evar _t__2 (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               (Etempvar _n0 tulong) ::\n                               (Eunop Onotint\n                                 (Ecast\n                                   (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                   tulong) tulong) :: nil))\n                            (Ssequence\n                              (Ssequence\n                                (Scall (Some _t'6)\n                                  (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                   Tnil)\n                                                                 tulong\n                                                                 cc_default))\n                                  ((Eaddrof\n                                     (Evar _t__2 (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   nil))\n                                (Sset _th__2 (Etempvar _t'6 tulong)))\n                              (Ssequence\n                                (Scall (Some _t'7)\n                                  (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                   Tnil)\n                                                                 tulong\n                                                                 cc_default))\n                                  ((Eaddrof\n                                     (Evar _t__2 (Tstruct _secp256k1_uint128 noattr))\n                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                   nil))\n                                (Sset _tl__2 (Etempvar _t'7 tulong)))))\n                          (Ssequence\n                            (Sset _c0\n                              (Ebinop Oadd (Etempvar _c0 tulong)\n                                (Etempvar _tl__2 tulong) tulong))\n                            (Ssequence\n                              (Sset _th__2\n                                (Ebinop Oadd (Etempvar _th__2 tulong)\n                                  (Ebinop Olt (Etempvar _c0 tulong)\n                                    (Etempvar _tl__2 tulong) tint) tulong))\n                              (Ssequence\n                                (Sset _c1\n                                  (Ebinop Oadd (Etempvar _c1 tulong)\n                                    (Etempvar _th__2 tulong) tulong))\n                                (Ssequence\n                                  (Sset _c2\n                                    (Ebinop Oadd (Etempvar _c2 tulong)\n                                      (Ebinop Olt (Etempvar _c1 tulong)\n                                        (Etempvar _th__2 tulong) tint)\n                                      tulong))\n                                  (Sloop\n                                    (Ssequence\n                                      (Sifthenelse (Ebinop Oge\n                                                     (Etempvar _c1 tulong)\n                                                     (Etempvar _th__2 tulong)\n                                                     tint)\n                                        (Sset _t'8\n                                          (Econst_int (Int.repr 1) tint))\n                                        (Sset _t'8\n                                          (Ecast\n                                            (Ebinop One (Etempvar _c2 tulong)\n                                              (Econst_int (Int.repr 0) tint)\n                                              tint) tbool)))\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Etempvar _t'8 tint)\n                                                     tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'74\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'74 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                 (Econst_int (Int.repr 528) tint) ::\n                                                 (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip))\n                                    Sbreak))))))\n                        (Ssequence\n                          (Ssequence\n                            (Sset _m1 (Etempvar _c0 tulong))\n                            (Ssequence\n                              (Sset _c0 (Etempvar _c1 tulong))\n                              (Ssequence\n                                (Sset _c1 (Etempvar _c2 tulong))\n                                (Sset _c2\n                                  (Ecast (Econst_int (Int.repr 0) tint)\n                                    tulong)))))\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'73\n                                  (Ederef\n                                    (Ebinop Oadd (Etempvar _l (tptr tulong))\n                                      (Econst_int (Int.repr 2) tint)\n                                      (tptr tulong)) tulong))\n                                (Sset _c0\n                                  (Ebinop Oadd (Etempvar _c0 tulong)\n                                    (Etempvar _t'73 tulong) tulong)))\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'72\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Etempvar _l (tptr tulong))\n                                        (Econst_int (Int.repr 2) tint)\n                                        (tptr tulong)) tulong))\n                                  (Sset _over\n                                    (Ebinop Olt (Etempvar _c0 tulong)\n                                      (Etempvar _t'72 tulong) tint)))\n                                (Ssequence\n                                  (Sset _c1\n                                    (Ebinop Oadd (Etempvar _c1 tulong)\n                                      (Etempvar _over tuint) tulong))\n                                  (Sset _c2\n                                    (Ebinop Oadd (Etempvar _c2 tulong)\n                                      (Ebinop Olt (Etempvar _c1 tulong)\n                                        (Etempvar _over tuint) tint) tulong)))))\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Scall None\n                                    (Evar _secp256k1_u128_mul (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                  (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                tvoid\n                                                                cc_default))\n                                    ((Eaddrof\n                                       (Evar _t__3 (Tstruct _secp256k1_uint128 noattr))\n                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                     (Etempvar _n2 tulong) ::\n                                     (Ebinop Oadd\n                                       (Eunop Onotint\n                                         (Ecast\n                                           (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                                           tulong) tulong)\n                                       (Econst_int (Int.repr 1) tint) tulong) ::\n                                     nil))\n                                  (Ssequence\n                                    (Ssequence\n                                      (Scall (Some _t'9)\n                                        (Evar _secp256k1_u128_hi_u64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tulong cc_default))\n                                        ((Eaddrof\n                                           (Evar _t__3 (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Sset _th__3 (Etempvar _t'9 tulong)))\n                                    (Ssequence\n                                      (Scall (Some _t'10)\n                                        (Evar _secp256k1_u128_to_u64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tulong cc_default))\n                                        ((Eaddrof\n                                           (Evar _t__3 (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Sset _tl__3 (Etempvar _t'10 tulong)))))\n                                (Ssequence\n                                  (Sset _c0\n                                    (Ebinop Oadd (Etempvar _c0 tulong)\n                                      (Etempvar _tl__3 tulong) tulong))\n                                  (Ssequence\n                                    (Sset _th__3\n                                      (Ebinop Oadd (Etempvar _th__3 tulong)\n                                        (Ebinop Olt (Etempvar _c0 tulong)\n                                          (Etempvar _tl__3 tulong) tint)\n                                        tulong))\n                                    (Ssequence\n                                      (Sset _c1\n                                        (Ebinop Oadd (Etempvar _c1 tulong)\n                                          (Etempvar _th__3 tulong) tulong))\n                                      (Ssequence\n                                        (Sset _c2\n                                          (Ebinop Oadd (Etempvar _c2 tulong)\n                                            (Ebinop Olt (Etempvar _c1 tulong)\n                                              (Etempvar _th__3 tulong) tint)\n                                            tulong))\n                                        (Sloop\n                                          (Ssequence\n                                            (Sifthenelse (Ebinop Oge\n                                                           (Etempvar _c1 tulong)\n                                                           (Etempvar _th__3 tulong)\n                                                           tint)\n                                              (Sset _t'11\n                                                (Econst_int (Int.repr 1) tint))\n                                              (Sset _t'11\n                                                (Ecast\n                                                  (Ebinop One\n                                                    (Etempvar _c2 tulong)\n                                                    (Econst_int (Int.repr 0) tint)\n                                                    tint) tbool)))\n                                            (Sifthenelse (Eunop Onotbool\n                                                           (Etempvar _t'11 tint)\n                                                           tint)\n                                              (Sloop\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'71\n                                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                    (Scall None\n                                                      (Evar _fprintf \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __IO_FILE noattr))\n                                                          (Tcons\n                                                            (tptr tschar)\n                                                            Tnil)) tint\n                                                        {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                      ((Etempvar _t'71 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                       (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                       (Econst_int (Int.repr 531) tint) ::\n                                                       (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                       nil)))\n                                                  (Scall None\n                                                    (Evar _abort (Tfunction\n                                                                   Tnil tvoid\n                                                                   cc_default))\n                                                    nil))\n                                                Sbreak)\n                                              Sskip))\n                                          Sbreak))))))\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Scall None\n                                      (Evar _secp256k1_u128_mul (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                  tvoid\n                                                                  cc_default))\n                                      ((Eaddrof\n                                         (Evar _t__4 (Tstruct _secp256k1_uint128 noattr))\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                       (Etempvar _n1 tulong) ::\n                                       (Eunop Onotint\n                                         (Ecast\n                                           (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                           tulong) tulong) :: nil))\n                                    (Ssequence\n                                      (Ssequence\n                                        (Scall (Some _t'12)\n                                          (Evar _secp256k1_u128_hi_u64 \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                              Tnil) tulong cc_default))\n                                          ((Eaddrof\n                                             (Evar _t__4 (Tstruct _secp256k1_uint128 noattr))\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                           nil))\n                                        (Sset _th__4 (Etempvar _t'12 tulong)))\n                                      (Ssequence\n                                        (Scall (Some _t'13)\n                                          (Evar _secp256k1_u128_to_u64 \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                              Tnil) tulong cc_default))\n                                          ((Eaddrof\n                                             (Evar _t__4 (Tstruct _secp256k1_uint128 noattr))\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                           nil))\n                                        (Sset _tl__4 (Etempvar _t'13 tulong)))))\n                                  (Ssequence\n                                    (Sset _c0\n                                      (Ebinop Oadd (Etempvar _c0 tulong)\n                                        (Etempvar _tl__4 tulong) tulong))\n                                    (Ssequence\n                                      (Sset _th__4\n                                        (Ebinop Oadd (Etempvar _th__4 tulong)\n                                          (Ebinop Olt (Etempvar _c0 tulong)\n                                            (Etempvar _tl__4 tulong) tint)\n                                          tulong))\n                                      (Ssequence\n                                        (Sset _c1\n                                          (Ebinop Oadd (Etempvar _c1 tulong)\n                                            (Etempvar _th__4 tulong) tulong))\n                                        (Ssequence\n                                          (Sset _c2\n                                            (Ebinop Oadd\n                                              (Etempvar _c2 tulong)\n                                              (Ebinop Olt\n                                                (Etempvar _c1 tulong)\n                                                (Etempvar _th__4 tulong)\n                                                tint) tulong))\n                                          (Sloop\n                                            (Ssequence\n                                              (Sifthenelse (Ebinop Oge\n                                                             (Etempvar _c1 tulong)\n                                                             (Etempvar _th__4 tulong)\n                                                             tint)\n                                                (Sset _t'14\n                                                  (Econst_int (Int.repr 1) tint))\n                                                (Sset _t'14\n                                                  (Ecast\n                                                    (Ebinop One\n                                                      (Etempvar _c2 tulong)\n                                                      (Econst_int (Int.repr 0) tint)\n                                                      tint) tbool)))\n                                              (Sifthenelse (Eunop Onotbool\n                                                             (Etempvar _t'14 tint)\n                                                             tint)\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'70\n                                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                      (Scall None\n                                                        (Evar _fprintf \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __IO_FILE noattr))\n                                                            (Tcons\n                                                              (tptr tschar)\n                                                              Tnil)) tint\n                                                          {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                        ((Etempvar _t'70 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                         (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                         (Econst_int (Int.repr 532) tint) ::\n                                                         (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                         nil)))\n                                                    (Scall None\n                                                      (Evar _abort (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                      nil))\n                                                  Sbreak)\n                                                Sskip))\n                                            Sbreak))))))\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _c0\n                                      (Ebinop Oadd (Etempvar _c0 tulong)\n                                        (Etempvar _n0 tulong) tulong))\n                                    (Ssequence\n                                      (Sset _over__1\n                                        (Ebinop Olt (Etempvar _c0 tulong)\n                                          (Etempvar _n0 tulong) tint))\n                                      (Ssequence\n                                        (Sset _c1\n                                          (Ebinop Oadd (Etempvar _c1 tulong)\n                                            (Etempvar _over__1 tuint) tulong))\n                                        (Sset _c2\n                                          (Ebinop Oadd (Etempvar _c2 tulong)\n                                            (Ebinop Olt (Etempvar _c1 tulong)\n                                              (Etempvar _over__1 tuint) tint)\n                                            tulong)))))\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _m2 (Etempvar _c0 tulong))\n                                      (Ssequence\n                                        (Sset _c0 (Etempvar _c1 tulong))\n                                        (Ssequence\n                                          (Sset _c1 (Etempvar _c2 tulong))\n                                          (Sset _c2\n                                            (Ecast\n                                              (Econst_int (Int.repr 0) tint)\n                                              tulong)))))\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'69\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Etempvar _l (tptr tulong))\n                                                (Econst_int (Int.repr 3) tint)\n                                                (tptr tulong)) tulong))\n                                          (Sset _c0\n                                            (Ebinop Oadd\n                                              (Etempvar _c0 tulong)\n                                              (Etempvar _t'69 tulong) tulong)))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'68\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Etempvar _l (tptr tulong))\n                                                  (Econst_int (Int.repr 3) tint)\n                                                  (tptr tulong)) tulong))\n                                            (Sset _over__2\n                                              (Ebinop Olt\n                                                (Etempvar _c0 tulong)\n                                                (Etempvar _t'68 tulong) tint)))\n                                          (Ssequence\n                                            (Sset _c1\n                                              (Ebinop Oadd\n                                                (Etempvar _c1 tulong)\n                                                (Etempvar _over__2 tuint)\n                                                tulong))\n                                            (Sset _c2\n                                              (Ebinop Oadd\n                                                (Etempvar _c2 tulong)\n                                                (Ebinop Olt\n                                                  (Etempvar _c1 tulong)\n                                                  (Etempvar _over__2 tuint)\n                                                  tint) tulong)))))\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Scall None\n                                              (Evar _secp256k1_u128_mul \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  (Tcons tulong\n                                                    (Tcons tulong Tnil)))\n                                                tvoid cc_default))\n                                              ((Eaddrof\n                                                 (Evar _t__5 (Tstruct _secp256k1_uint128 noattr))\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                               (Etempvar _n3 tulong) ::\n                                               (Ebinop Oadd\n                                                 (Eunop Onotint\n                                                   (Ecast\n                                                     (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                                                     tulong) tulong)\n                                                 (Econst_int (Int.repr 1) tint)\n                                                 tulong) :: nil))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Scall (Some _t'15)\n                                                  (Evar _secp256k1_u128_hi_u64 \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      Tnil) tulong\n                                                    cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _t__5 (Tstruct _secp256k1_uint128 noattr))\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                   nil))\n                                                (Sset _th__5\n                                                  (Etempvar _t'15 tulong)))\n                                              (Ssequence\n                                                (Scall (Some _t'16)\n                                                  (Evar _secp256k1_u128_to_u64 \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      Tnil) tulong\n                                                    cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _t__5 (Tstruct _secp256k1_uint128 noattr))\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                   nil))\n                                                (Sset _tl__5\n                                                  (Etempvar _t'16 tulong)))))\n                                          (Ssequence\n                                            (Sset _c0\n                                              (Ebinop Oadd\n                                                (Etempvar _c0 tulong)\n                                                (Etempvar _tl__5 tulong)\n                                                tulong))\n                                            (Ssequence\n                                              (Sset _th__5\n                                                (Ebinop Oadd\n                                                  (Etempvar _th__5 tulong)\n                                                  (Ebinop Olt\n                                                    (Etempvar _c0 tulong)\n                                                    (Etempvar _tl__5 tulong)\n                                                    tint) tulong))\n                                              (Ssequence\n                                                (Sset _c1\n                                                  (Ebinop Oadd\n                                                    (Etempvar _c1 tulong)\n                                                    (Etempvar _th__5 tulong)\n                                                    tulong))\n                                                (Ssequence\n                                                  (Sset _c2\n                                                    (Ebinop Oadd\n                                                      (Etempvar _c2 tulong)\n                                                      (Ebinop Olt\n                                                        (Etempvar _c1 tulong)\n                                                        (Etempvar _th__5 tulong)\n                                                        tint) tulong))\n                                                  (Sloop\n                                                    (Ssequence\n                                                      (Sifthenelse (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__5 tulong)\n                                                                    tint)\n                                                        (Sset _t'17\n                                                          (Econst_int (Int.repr 1) tint))\n                                                        (Sset _t'17\n                                                          (Ecast\n                                                            (Ebinop One\n                                                              (Etempvar _c2 tulong)\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              tint) tbool)))\n                                                      (Sifthenelse (Eunop Onotbool\n                                                                    (Etempvar _t'17 tint)\n                                                                    tint)\n                                                        (Sloop\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Sset _t'67\n                                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                              (Scall None\n                                                                (Evar _fprintf \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                  tint\n                                                                  {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                ((Etempvar _t'67 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                 (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                 (Econst_int (Int.repr 536) tint) ::\n                                                                 (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                 nil)))\n                                                            (Scall None\n                                                              (Evar _abort \n                                                              (Tfunction Tnil\n                                                                tvoid\n                                                                cc_default))\n                                                              nil))\n                                                          Sbreak)\n                                                        Sskip))\n                                                    Sbreak))))))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_u128_mul \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong\n                                                      (Tcons tulong Tnil)))\n                                                  tvoid cc_default))\n                                                ((Eaddrof\n                                                   (Evar _t__6 (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 (Etempvar _n2 tulong) ::\n                                                 (Eunop Onotint\n                                                   (Ecast\n                                                     (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                                     tulong) tulong) :: nil))\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Scall (Some _t'18)\n                                                    (Evar _secp256k1_u128_hi_u64 \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                        Tnil) tulong\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _t__6 (Tstruct _secp256k1_uint128 noattr))\n                                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                     nil))\n                                                  (Sset _th__6\n                                                    (Etempvar _t'18 tulong)))\n                                                (Ssequence\n                                                  (Scall (Some _t'19)\n                                                    (Evar _secp256k1_u128_to_u64 \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                        Tnil) tulong\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _t__6 (Tstruct _secp256k1_uint128 noattr))\n                                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                     nil))\n                                                  (Sset _tl__6\n                                                    (Etempvar _t'19 tulong)))))\n                                            (Ssequence\n                                              (Sset _c0\n                                                (Ebinop Oadd\n                                                  (Etempvar _c0 tulong)\n                                                  (Etempvar _tl__6 tulong)\n                                                  tulong))\n                                              (Ssequence\n                                                (Sset _th__6\n                                                  (Ebinop Oadd\n                                                    (Etempvar _th__6 tulong)\n                                                    (Ebinop Olt\n                                                      (Etempvar _c0 tulong)\n                                                      (Etempvar _tl__6 tulong)\n                                                      tint) tulong))\n                                                (Ssequence\n                                                  (Sset _c1\n                                                    (Ebinop Oadd\n                                                      (Etempvar _c1 tulong)\n                                                      (Etempvar _th__6 tulong)\n                                                      tulong))\n                                                  (Ssequence\n                                                    (Sset _c2\n                                                      (Ebinop Oadd\n                                                        (Etempvar _c2 tulong)\n                                                        (Ebinop Olt\n                                                          (Etempvar _c1 tulong)\n                                                          (Etempvar _th__6 tulong)\n                                                          tint) tulong))\n                                                    (Sloop\n                                                      (Ssequence\n                                                        (Sifthenelse \n                                                          (Ebinop Oge\n                                                            (Etempvar _c1 tulong)\n                                                            (Etempvar _th__6 tulong)\n                                                            tint)\n                                                          (Sset _t'20\n                                                            (Econst_int (Int.repr 1) tint))\n                                                          (Sset _t'20\n                                                            (Ecast\n                                                              (Ebinop One\n                                                                (Etempvar _c2 tulong)\n                                                                (Econst_int (Int.repr 0) tint)\n                                                                tint) tbool)))\n                                                        (Sifthenelse \n                                                          (Eunop Onotbool\n                                                            (Etempvar _t'20 tint)\n                                                            tint)\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'66\n                                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                (Scall None\n                                                                  (Evar _fprintf \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                  ((Etempvar _t'66 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                   (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                   (Econst_int (Int.repr 537) tint) ::\n                                                                   (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                   nil)))\n                                                              (Scall None\n                                                                (Evar _abort \n                                                                (Tfunction\n                                                                  Tnil tvoid\n                                                                  cc_default))\n                                                                nil))\n                                                            Sbreak)\n                                                          Sskip))\n                                                      Sbreak))))))\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _c0\n                                                (Ebinop Oadd\n                                                  (Etempvar _c0 tulong)\n                                                  (Etempvar _n1 tulong)\n                                                  tulong))\n                                              (Ssequence\n                                                (Sset _over__3\n                                                  (Ebinop Olt\n                                                    (Etempvar _c0 tulong)\n                                                    (Etempvar _n1 tulong)\n                                                    tint))\n                                                (Ssequence\n                                                  (Sset _c1\n                                                    (Ebinop Oadd\n                                                      (Etempvar _c1 tulong)\n                                                      (Etempvar _over__3 tuint)\n                                                      tulong))\n                                                  (Sset _c2\n                                                    (Ebinop Oadd\n                                                      (Etempvar _c2 tulong)\n                                                      (Ebinop Olt\n                                                        (Etempvar _c1 tulong)\n                                                        (Etempvar _over__3 tuint)\n                                                        tint) tulong)))))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _m3\n                                                  (Etempvar _c0 tulong))\n                                                (Ssequence\n                                                  (Sset _c0\n                                                    (Etempvar _c1 tulong))\n                                                  (Ssequence\n                                                    (Sset _c1\n                                                      (Etempvar _c2 tulong))\n                                                    (Sset _c2\n                                                      (Ecast\n                                                        (Econst_int (Int.repr 0) tint)\n                                                        tulong)))))\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_u128_mul \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tulong\n                                                            (Tcons tulong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _t__7 (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       (Etempvar _n3 tulong) ::\n                                                       (Eunop Onotint\n                                                         (Ecast\n                                                           (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                                           tulong) tulong) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Scall (Some _t'21)\n                                                          (Evar _secp256k1_u128_hi_u64 \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              Tnil) tulong\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _t__7 (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           nil))\n                                                        (Sset _th__7\n                                                          (Etempvar _t'21 tulong)))\n                                                      (Ssequence\n                                                        (Scall (Some _t'22)\n                                                          (Evar _secp256k1_u128_to_u64 \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              Tnil) tulong\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _t__7 (Tstruct _secp256k1_uint128 noattr))\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                           nil))\n                                                        (Sset _tl__7\n                                                          (Etempvar _t'22 tulong)))))\n                                                  (Ssequence\n                                                    (Sset _c0\n                                                      (Ebinop Oadd\n                                                        (Etempvar _c0 tulong)\n                                                        (Etempvar _tl__7 tulong)\n                                                        tulong))\n                                                    (Ssequence\n                                                      (Sset _th__7\n                                                        (Ebinop Oadd\n                                                          (Etempvar _th__7 tulong)\n                                                          (Ebinop Olt\n                                                            (Etempvar _c0 tulong)\n                                                            (Etempvar _tl__7 tulong)\n                                                            tint) tulong))\n                                                      (Ssequence\n                                                        (Sset _c1\n                                                          (Ebinop Oadd\n                                                            (Etempvar _c1 tulong)\n                                                            (Etempvar _th__7 tulong)\n                                                            tulong))\n                                                        (Ssequence\n                                                          (Sset _c2\n                                                            (Ebinop Oadd\n                                                              (Etempvar _c2 tulong)\n                                                              (Ebinop Olt\n                                                                (Etempvar _c1 tulong)\n                                                                (Etempvar _th__7 tulong)\n                                                                tint) tulong))\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Sifthenelse \n                                                                (Ebinop Oge\n                                                                  (Etempvar _c1 tulong)\n                                                                  (Etempvar _th__7 tulong)\n                                                                  tint)\n                                                                (Sset _t'23\n                                                                  (Econst_int (Int.repr 1) tint))\n                                                                (Sset _t'23\n                                                                  (Ecast\n                                                                    (Ebinop One\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tbool)))\n                                                              (Sifthenelse \n                                                                (Eunop Onotbool\n                                                                  (Etempvar _t'23 tint)\n                                                                  tint)\n                                                                (Sloop\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'65\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'65 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 540) tint) ::\n                                                                    (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                  Sbreak)\n                                                                Sskip))\n                                                            Sbreak))))))\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _c0\n                                                      (Ebinop Oadd\n                                                        (Etempvar _c0 tulong)\n                                                        (Etempvar _n2 tulong)\n                                                        tulong))\n                                                    (Ssequence\n                                                      (Sset _over__4\n                                                        (Ebinop Olt\n                                                          (Etempvar _c0 tulong)\n                                                          (Etempvar _n2 tulong)\n                                                          tint))\n                                                      (Ssequence\n                                                        (Sset _c1\n                                                          (Ebinop Oadd\n                                                            (Etempvar _c1 tulong)\n                                                            (Etempvar _over__4 tuint)\n                                                            tulong))\n                                                        (Sset _c2\n                                                          (Ebinop Oadd\n                                                            (Etempvar _c2 tulong)\n                                                            (Ebinop Olt\n                                                              (Etempvar _c1 tulong)\n                                                              (Etempvar _over__4 tuint)\n                                                              tint) tulong)))))\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _m4\n                                                        (Etempvar _c0 tulong))\n                                                      (Ssequence\n                                                        (Sset _c0\n                                                          (Etempvar _c1 tulong))\n                                                        (Ssequence\n                                                          (Sset _c1\n                                                            (Etempvar _c2 tulong))\n                                                          (Sset _c2\n                                                            (Ecast\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              tulong)))))\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Sset _c0\n                                                          (Ebinop Oadd\n                                                            (Etempvar _c0 tulong)\n                                                            (Etempvar _n3 tulong)\n                                                            tulong))\n                                                        (Ssequence\n                                                          (Sset _c1\n                                                            (Ebinop Oadd\n                                                              (Etempvar _c1 tulong)\n                                                              (Ebinop Olt\n                                                                (Etempvar _c0 tulong)\n                                                                (Etempvar _n3 tulong)\n                                                                tint) tulong))\n                                                          (Ssequence\n                                                            (Sloop\n                                                              (Sifthenelse \n                                                                (Eunop Onotbool\n                                                                  (Ebinop Oor\n                                                                    (Ebinop One\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _n3 tulong)\n                                                                    tint)\n                                                                    tint)\n                                                                  tint)\n                                                                (Sloop\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'64\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'64 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 543) tint) ::\n                                                                    (Evar ___stringlit_124 (tarray tschar 48)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                  Sbreak)\n                                                                Sskip)\n                                                              Sbreak)\n                                                            (Sloop\n                                                              (Sifthenelse \n                                                                (Eunop Onotbool\n                                                                  (Ebinop Oeq\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                  tint)\n                                                                (Sloop\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'63\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'63 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 543) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                  Sbreak)\n                                                                Sskip)\n                                                              Sbreak))))\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Sset _m5\n                                                            (Etempvar _c0 tulong))\n                                                          (Ssequence\n                                                            (Sset _c0\n                                                              (Etempvar _c1 tulong))\n                                                            (Ssequence\n                                                              (Sset _c1\n                                                                (Ecast\n                                                                  (Econst_int (Int.repr 0) tint)\n                                                                  tulong))\n                                                              (Sloop\n                                                                (Sifthenelse \n                                                                  (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                  (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'62\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'62 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 544) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                  Sskip)\n                                                                Sbreak))))\n                                                        (Ssequence\n                                                          (Sloop\n                                                            (Sifthenelse \n                                                              (Eunop Onotbool\n                                                                (Ebinop Ole\n                                                                  (Etempvar _c0 tulong)\n                                                                  (Econst_int (Int.repr 1) tint)\n                                                                  tint) tint)\n                                                              (Sloop\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Sset _t'61\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'61 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 545) tint) ::\n                                                                    (Evar ___stringlit_125 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                  (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                Sbreak)\n                                                              Sskip)\n                                                            Sbreak)\n                                                          (Ssequence\n                                                            (Sset _m6\n                                                              (Ecast\n                                                                (Etempvar _c0 tulong)\n                                                                tuint))\n                                                            (Ssequence\n                                                              (Sset _c0\n                                                                (Etempvar _m0 tulong))\n                                                              (Ssequence\n                                                                (Sset _c1\n                                                                  (Ecast\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tulong))\n                                                                (Ssequence\n                                                                  (Sset _c2\n                                                                    (Ecast\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tulong))\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__8 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _m4 tulong) ::\n                                                                    (Ebinop Oadd\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                                                                    tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'24)\n                                                                    (Evar _secp256k1_u128_hi_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__8 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _th__8\n                                                                    (Etempvar _t'24 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'25)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__8 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _tl__8\n                                                                    (Etempvar _t'25 tulong)))))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__8 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _th__8\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _th__8 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__8 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__8 tulong)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__8 tulong)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'60\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'60 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 551) tint) ::\n                                                                    (Evar ___stringlit_120 (tarray tschar 32)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _p0\n                                                                    (Etempvar _c0 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Etempvar _c1 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ecast\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'59\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'59 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 552) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m1 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m1 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oor\n                                                                    (Ebinop One\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m1 tulong)\n                                                                    tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'58\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'58 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 553) tint) ::\n                                                                    (Evar ___stringlit_126 (tarray tschar 48)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'57\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'57 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 553) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__9 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _m5 tulong) ::\n                                                                    (Ebinop Oadd\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                                                                    tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'26)\n                                                                    (Evar _secp256k1_u128_hi_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__9 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _th__9\n                                                                    (Etempvar _t'26 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'27)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__9 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _tl__9\n                                                                    (Etempvar _t'27 tulong)))))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__9 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _th__9\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _th__9 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__9 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__9 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__9 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__9 tulong)\n                                                                    tint)\n                                                                    (Sset _t'28\n                                                                    (Econst_int (Int.repr 1) tint))\n                                                                    (Sset _t'28\n                                                                    (Ecast\n                                                                    (Ebinop One\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tbool)))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'28 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'56\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'56 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 554) tint) ::\n                                                                    (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak))))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__10 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _m4 tulong) ::\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                                                    tulong)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'29)\n                                                                    (Evar _secp256k1_u128_hi_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__10 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _th__10\n                                                                    (Etempvar _t'29 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'30)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__10 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _tl__10\n                                                                    (Etempvar _t'30 tulong)))))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__10 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _th__10\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _th__10 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__10 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__10 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__10 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__10 tulong)\n                                                                    tint)\n                                                                    (Sset _t'31\n                                                                    (Econst_int (Int.repr 1) tint))\n                                                                    (Sset _t'31\n                                                                    (Ecast\n                                                                    (Ebinop One\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tbool)))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'31 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'55\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'55 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 555) tint) ::\n                                                                    (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak))))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _p1\n                                                                    (Etempvar _c0 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Etempvar _c1 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Etempvar _c2 tulong))\n                                                                    (Sset _c2\n                                                                    (Ecast\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tulong)))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m2 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _over__5\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m2 tulong)\n                                                                    tint))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _over__5 tuint)\n                                                                    tulong))\n                                                                    (Sset _c2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _over__5 tuint)\n                                                                    tint)\n                                                                    tulong)))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__11 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _m6 tuint) ::\n                                                                    (Ebinop Oadd\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                                                                    tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'32)\n                                                                    (Evar _secp256k1_u128_hi_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__11 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _th__11\n                                                                    (Etempvar _t'32 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'33)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__11 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _tl__11\n                                                                    (Etempvar _t'33 tulong)))))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__11 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _th__11\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _th__11 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__11 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__11 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__11 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__11 tulong)\n                                                                    tint)\n                                                                    (Sset _t'34\n                                                                    (Econst_int (Int.repr 1) tint))\n                                                                    (Sset _t'34\n                                                                    (Ecast\n                                                                    (Ebinop One\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tbool)))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'34 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'54\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'54 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 558) tint) ::\n                                                                    (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak))))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__12 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _m5 tulong) ::\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                                                    tulong)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'35)\n                                                                    (Evar _secp256k1_u128_hi_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__12 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _th__12\n                                                                    (Etempvar _t'35 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'36)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__12 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _tl__12\n                                                                    (Etempvar _t'36 tulong)))))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__12 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _th__12\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _th__12 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__12 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__12 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__12 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Sifthenelse \n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__12 tulong)\n                                                                    tint)\n                                                                    (Sset _t'37\n                                                                    (Econst_int (Int.repr 1) tint))\n                                                                    (Sset _t'37\n                                                                    (Ecast\n                                                                    (Ebinop One\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tbool)))\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _t'37 tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'53\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'53 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 559) tint) ::\n                                                                    (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip))\n                                                                    Sbreak))))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m4 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _over__6\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m4 tulong)\n                                                                    tint))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _over__6 tuint)\n                                                                    tulong))\n                                                                    (Sset _c2\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _over__6 tuint)\n                                                                    tint)\n                                                                    tulong)))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _p2\n                                                                    (Etempvar _c0 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Etempvar _c1 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Etempvar _c2 tulong))\n                                                                    (Sset _c2\n                                                                    (Ecast\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tulong)))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m3 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m3 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oor\n                                                                    (Ebinop One\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m3 tulong)\n                                                                    tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'52\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'52 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 562) tint) ::\n                                                                    (Evar ___stringlit_127 (tarray tschar 48)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'51\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'51 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 562) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__13 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _m6 tuint) ::\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                                                    tulong)\n                                                                    tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'38)\n                                                                    (Evar _secp256k1_u128_hi_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__13 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _th__13\n                                                                    (Etempvar _t'38 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'39)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _t__13 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _tl__13\n                                                                    (Etempvar _t'39 tulong)))))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__13 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _th__13\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _th__13 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _tl__13 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__13 tulong)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__13 tulong)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'50\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'50 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 563) tint) ::\n                                                                    (Evar ___stringlit_120 (tarray tschar 32)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m5 tulong)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Ebinop Olt\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m5 tulong)\n                                                                    tint)\n                                                                    tulong))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oor\n                                                                    (Ebinop One\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    (Ebinop Oge\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m5 tulong)\n                                                                    tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'49\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'49 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 564) tint) ::\n                                                                    (Evar ___stringlit_128 (tarray tschar 48)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'48\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'48 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 564) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak))))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _p3\n                                                                    (Etempvar _c0 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c0\n                                                                    (Etempvar _c1 tulong))\n                                                                    (Ssequence\n                                                                    (Sset _c1\n                                                                    (Ecast\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tulong))\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Oeq\n                                                                    (Etempvar _c2 tulong)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'47\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'47 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 565) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak))))\n                                                                    (Ssequence\n                                                                    (Sset _p4\n                                                                    (Ecast\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c0 tulong)\n                                                                    (Etempvar _m6 tuint)\n                                                                    tulong)\n                                                                    tuint))\n                                                                    (Ssequence\n                                                                    (Sloop\n                                                                    (Sifthenelse \n                                                                    (Eunop Onotbool\n                                                                    (Ebinop Ole\n                                                                    (Etempvar _p4 tuint)\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    tint)\n                                                                    tint)\n                                                                    (Sloop\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sset _t'46\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'46 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 567) tint) ::\n                                                                    (Evar ___stringlit_129 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                    (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                    Sbreak)\n                                                                    Sskip)\n                                                                    Sbreak)\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_from_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _p0 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Ebinop Oadd\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4624529908474429119)) tulong)\n                                                                    tulong)\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    tulong) ::\n                                                                    (Etempvar _p4 tuint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'40)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Etempvar _t'40 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 64) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _p1 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_mul \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Eunop Onotint\n                                                                    (Ecast\n                                                                    (Econst_long (Int64.repr (-4994812053365940165)) tulong)\n                                                                    tulong)\n                                                                    tulong) ::\n                                                                    (Etempvar _p4 tuint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'41)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Etempvar _t'41 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 64) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _p2 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _p4 tuint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'42)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Etempvar _t'42 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_rshift \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Econst_int (Int.repr 64) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_u128_accum_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    (Etempvar _p3 tulong) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'43)\n                                                                    (Evar _secp256k1_u128_to_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                    _d\n                                                                    (tarray tulong 4))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tulong))\n                                                                    tulong)\n                                                                    (Etempvar _t'43 tulong)))\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'44)\n                                                                    (Evar _secp256k1_u128_hi_u64 \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _c128 (Tstruct _secp256k1_uint128 noattr))\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                                    nil))\n                                                                    (Sset _c\n                                                                    (Etempvar _t'44 tulong)))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'45)\n                                                                    (Evar _secp256k1_scalar_check_overflow \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    Tnil)\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_scalar_reduce \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil))\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n                                                                    (Ebinop Oadd\n                                                                    (Etempvar _c tulong)\n                                                                    (Etempvar _t'45 tint)\n                                                                    tulong) ::\n                                                                    nil))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_mul_512 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_l, (tptr tulong)) ::\n                (_a, (tptr (Tstruct __2843 noattr))) ::\n                (_b, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_t, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__1, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__2, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__3, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__4, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__5, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__6, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__7, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__8, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__9, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__10, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__11, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__12, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__13, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__14, (Tstruct _secp256k1_uint128 noattr)) ::\n              (_t__15, (Tstruct _secp256k1_uint128 noattr)) :: nil);\n  fn_temps := ((_c0, tulong) :: (_c1, tulong) :: (_c2, tuint) ::\n               (_tl, tulong) :: (_th, tulong) :: (_tl__1, tulong) ::\n               (_th__1, tulong) :: (_tl__2, tulong) :: (_th__2, tulong) ::\n               (_tl__3, tulong) :: (_th__3, tulong) :: (_tl__4, tulong) ::\n               (_th__4, tulong) :: (_tl__5, tulong) :: (_th__5, tulong) ::\n               (_tl__6, tulong) :: (_th__6, tulong) :: (_tl__7, tulong) ::\n               (_th__7, tulong) :: (_tl__8, tulong) :: (_th__8, tulong) ::\n               (_tl__9, tulong) :: (_th__9, tulong) :: (_tl__10, tulong) ::\n               (_th__10, tulong) :: (_tl__11, tulong) :: (_th__11, tulong) ::\n               (_tl__12, tulong) :: (_th__12, tulong) :: (_tl__13, tulong) ::\n               (_th__13, tulong) :: (_tl__14, tulong) :: (_th__14, tulong) ::\n               (_tl__15, tulong) :: (_th__15, tulong) :: (_t'46, tulong) ::\n               (_t'45, tulong) :: (_t'44, tint) :: (_t'43, tulong) ::\n               (_t'42, tulong) :: (_t'41, tint) :: (_t'40, tulong) ::\n               (_t'39, tulong) :: (_t'38, tint) :: (_t'37, tulong) ::\n               (_t'36, tulong) :: (_t'35, tint) :: (_t'34, tulong) ::\n               (_t'33, tulong) :: (_t'32, tint) :: (_t'31, tulong) ::\n               (_t'30, tulong) :: (_t'29, tint) :: (_t'28, tulong) ::\n               (_t'27, tulong) :: (_t'26, tint) :: (_t'25, tulong) ::\n               (_t'24, tulong) :: (_t'23, tint) :: (_t'22, tulong) ::\n               (_t'21, tulong) :: (_t'20, tint) :: (_t'19, tulong) ::\n               (_t'18, tulong) :: (_t'17, tint) :: (_t'16, tulong) ::\n               (_t'15, tulong) :: (_t'14, tint) :: (_t'13, tulong) ::\n               (_t'12, tulong) :: (_t'11, tint) :: (_t'10, tulong) ::\n               (_t'9, tulong) :: (_t'8, tint) :: (_t'7, tulong) ::\n               (_t'6, tulong) :: (_t'5, tint) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tulong) ::\n               (_t'97, tulong) :: (_t'96, tulong) ::\n               (_t'95, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'94, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'93, tulong) :: (_t'92, tulong) ::\n               (_t'91, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'90, tulong) :: (_t'89, tulong) ::\n               (_t'88, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'87, tulong) :: (_t'86, tulong) ::\n               (_t'85, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'84, tulong) :: (_t'83, tulong) ::\n               (_t'82, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'81, tulong) :: (_t'80, tulong) ::\n               (_t'79, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'78, tulong) :: (_t'77, tulong) ::\n               (_t'76, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'75, tulong) :: (_t'74, tulong) ::\n               (_t'73, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'72, tulong) :: (_t'71, tulong) ::\n               (_t'70, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'69, tulong) :: (_t'68, tulong) ::\n               (_t'67, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'66, tulong) :: (_t'65, tulong) ::\n               (_t'64, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'63, tulong) :: (_t'62, tulong) ::\n               (_t'61, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'60, tulong) :: (_t'59, tulong) ::\n               (_t'58, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'57, tulong) :: (_t'56, tulong) ::\n               (_t'55, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'54, tulong) :: (_t'53, tulong) ::\n               (_t'52, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'51, tulong) :: (_t'50, tulong) ::\n               (_t'49, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'48, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'47, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _c0 (Ecast (Econst_int (Int.repr 0) tint) tulong))\n  (Ssequence\n    (Sset _c1 (Ecast (Econst_int (Int.repr 0) tint) tulong))\n    (Ssequence\n      (Sset _c2 (Econst_int (Int.repr 0) tint))\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Sset _t'96\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n              (Ssequence\n                (Sset _t'97\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                          (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                      (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n                (Scall None\n                  (Evar _secp256k1_u128_mul (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                (Tcons tulong\n                                                  (Tcons tulong Tnil))) tvoid\n                                              cc_default))\n                  ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                   (Etempvar _t'96 tulong) :: (Etempvar _t'97 tulong) :: nil))))\n            (Ssequence\n              (Ssequence\n                (Scall (Some _t'1)\n                  (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                   Tnil) tulong cc_default))\n                  ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                (Sset _th (Etempvar _t'1 tulong)))\n              (Ssequence\n                (Scall (Some _t'2)\n                  (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                   Tnil) tulong cc_default))\n                  ((Eaddrof (Evar _t (Tstruct _secp256k1_uint128 noattr))\n                     (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                (Sset _tl (Etempvar _t'2 tulong)))))\n          (Ssequence\n            (Sset _c0\n              (Ebinop Oadd (Etempvar _c0 tulong) (Etempvar _tl tulong)\n                tulong))\n            (Ssequence\n              (Sset _th\n                (Ebinop Oadd (Etempvar _th tulong)\n                  (Ebinop Olt (Etempvar _c0 tulong) (Etempvar _tl tulong)\n                    tint) tulong))\n              (Ssequence\n                (Sset _c1\n                  (Ebinop Oadd (Etempvar _c1 tulong) (Etempvar _th tulong)\n                    tulong))\n                (Sloop\n                  (Sifthenelse (Eunop Onotbool\n                                 (Ebinop Oge (Etempvar _c1 tulong)\n                                   (Etempvar _th tulong) tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'95\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'95 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_112 (tarray tschar 29)) ::\n                             (Econst_int (Int.repr 728) tint) ::\n                             (Evar ___stringlit_120 (tarray tschar 32)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip)\n                  Sbreak)))))\n        (Ssequence\n          (Ssequence\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Etempvar _l (tptr tulong))\n                  (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n              (Etempvar _c0 tulong))\n            (Ssequence\n              (Sset _c0 (Etempvar _c1 tulong))\n              (Ssequence\n                (Sset _c1 (Ecast (Econst_int (Int.repr 0) tint) tulong))\n                (Sloop\n                  (Sifthenelse (Eunop Onotbool\n                                 (Ebinop Oeq (Etempvar _c2 tuint)\n                                   (Econst_int (Int.repr 0) tint) tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'94\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'94 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_112 (tarray tschar 29)) ::\n                             (Econst_int (Int.repr 729) tint) ::\n                             (Evar ___stringlit_121 (tarray tschar 31)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip)\n                  Sbreak))))\n          (Ssequence\n            (Ssequence\n              (Ssequence\n                (Ssequence\n                  (Sset _t'92\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n                  (Ssequence\n                    (Sset _t'93\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                          (Econst_int (Int.repr 1) tint) (tptr tulong))\n                        tulong))\n                    (Scall None\n                      (Evar _secp256k1_u128_mul (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong\n                                                      (Tcons tulong Tnil)))\n                                                  tvoid cc_default))\n                      ((Eaddrof\n                         (Evar _t__1 (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                       (Etempvar _t'92 tulong) :: (Etempvar _t'93 tulong) ::\n                       nil))))\n                (Ssequence\n                  (Ssequence\n                    (Scall (Some _t'3)\n                      (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                       Tnil) tulong\n                                                     cc_default))\n                      ((Eaddrof\n                         (Evar _t__1 (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                    (Sset _th__1 (Etempvar _t'3 tulong)))\n                  (Ssequence\n                    (Scall (Some _t'4)\n                      (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                       Tnil) tulong\n                                                     cc_default))\n                      ((Eaddrof\n                         (Evar _t__1 (Tstruct _secp256k1_uint128 noattr))\n                         (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n                    (Sset _tl__1 (Etempvar _t'4 tulong)))))\n              (Ssequence\n                (Sset _c0\n                  (Ebinop Oadd (Etempvar _c0 tulong) (Etempvar _tl__1 tulong)\n                    tulong))\n                (Ssequence\n                  (Sset _th__1\n                    (Ebinop Oadd (Etempvar _th__1 tulong)\n                      (Ebinop Olt (Etempvar _c0 tulong)\n                        (Etempvar _tl__1 tulong) tint) tulong))\n                  (Ssequence\n                    (Sset _c1\n                      (Ebinop Oadd (Etempvar _c1 tulong)\n                        (Etempvar _th__1 tulong) tulong))\n                    (Ssequence\n                      (Sset _c2\n                        (Ebinop Oadd (Etempvar _c2 tuint)\n                          (Ebinop Olt (Etempvar _c1 tulong)\n                            (Etempvar _th__1 tulong) tint) tuint))\n                      (Sloop\n                        (Ssequence\n                          (Sifthenelse (Ebinop Oge (Etempvar _c1 tulong)\n                                         (Etempvar _th__1 tulong) tint)\n                            (Sset _t'5 (Econst_int (Int.repr 1) tint))\n                            (Sset _t'5\n                              (Ecast\n                                (Ebinop One (Etempvar _c2 tuint)\n                                  (Econst_int (Int.repr 0) tint) tint) tbool)))\n                          (Sifthenelse (Eunop Onotbool (Etempvar _t'5 tint)\n                                         tint)\n                            (Sloop\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'91\n                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                  (Scall None\n                                    (Evar _fprintf (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __IO_FILE noattr))\n                                                       (Tcons (tptr tschar)\n                                                         Tnil)) tint\n                                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                    ((Etempvar _t'91 (tptr (Tstruct __IO_FILE noattr))) ::\n                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                     (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                     (Econst_int (Int.repr 730) tint) ::\n                                     (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                     nil)))\n                                (Scall None\n                                  (Evar _abort (Tfunction Tnil tvoid\n                                                 cc_default)) nil))\n                              Sbreak)\n                            Sskip))\n                        Sbreak))))))\n            (Ssequence\n              (Ssequence\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'89\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                          (Econst_int (Int.repr 1) tint) (tptr tulong))\n                        tulong))\n                    (Ssequence\n                      (Sset _t'90\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                (Tstruct __2843 noattr)) _d\n                              (tarray tulong 4))\n                            (Econst_int (Int.repr 0) tint) (tptr tulong))\n                          tulong))\n                      (Scall None\n                        (Evar _secp256k1_u128_mul (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      (Tcons tulong\n                                                        (Tcons tulong Tnil)))\n                                                    tvoid cc_default))\n                        ((Eaddrof\n                           (Evar _t__2 (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         (Etempvar _t'89 tulong) ::\n                         (Etempvar _t'90 tulong) :: nil))))\n                  (Ssequence\n                    (Ssequence\n                      (Scall (Some _t'6)\n                        (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                         Tnil) tulong\n                                                       cc_default))\n                        ((Eaddrof\n                           (Evar _t__2 (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         nil))\n                      (Sset _th__2 (Etempvar _t'6 tulong)))\n                    (Ssequence\n                      (Scall (Some _t'7)\n                        (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                         Tnil) tulong\n                                                       cc_default))\n                        ((Eaddrof\n                           (Evar _t__2 (Tstruct _secp256k1_uint128 noattr))\n                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                         nil))\n                      (Sset _tl__2 (Etempvar _t'7 tulong)))))\n                (Ssequence\n                  (Sset _c0\n                    (Ebinop Oadd (Etempvar _c0 tulong)\n                      (Etempvar _tl__2 tulong) tulong))\n                  (Ssequence\n                    (Sset _th__2\n                      (Ebinop Oadd (Etempvar _th__2 tulong)\n                        (Ebinop Olt (Etempvar _c0 tulong)\n                          (Etempvar _tl__2 tulong) tint) tulong))\n                    (Ssequence\n                      (Sset _c1\n                        (Ebinop Oadd (Etempvar _c1 tulong)\n                          (Etempvar _th__2 tulong) tulong))\n                      (Ssequence\n                        (Sset _c2\n                          (Ebinop Oadd (Etempvar _c2 tuint)\n                            (Ebinop Olt (Etempvar _c1 tulong)\n                              (Etempvar _th__2 tulong) tint) tuint))\n                        (Sloop\n                          (Ssequence\n                            (Sifthenelse (Ebinop Oge (Etempvar _c1 tulong)\n                                           (Etempvar _th__2 tulong) tint)\n                              (Sset _t'8 (Econst_int (Int.repr 1) tint))\n                              (Sset _t'8\n                                (Ecast\n                                  (Ebinop One (Etempvar _c2 tuint)\n                                    (Econst_int (Int.repr 0) tint) tint)\n                                  tbool)))\n                            (Sifthenelse (Eunop Onotbool (Etempvar _t'8 tint)\n                                           tint)\n                              (Sloop\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'88\n                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                    (Scall None\n                                      (Evar _fprintf (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __IO_FILE noattr))\n                                                         (Tcons (tptr tschar)\n                                                           Tnil)) tint\n                                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                      ((Etempvar _t'88 (tptr (Tstruct __IO_FILE noattr))) ::\n                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                       (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                       (Econst_int (Int.repr 731) tint) ::\n                                       (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                       nil)))\n                                  (Scall None\n                                    (Evar _abort (Tfunction Tnil tvoid\n                                                   cc_default)) nil))\n                                Sbreak)\n                              Sskip))\n                          Sbreak))))))\n              (Ssequence\n                (Ssequence\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd (Etempvar _l (tptr tulong))\n                        (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                    (Etempvar _c0 tulong))\n                  (Ssequence\n                    (Sset _c0 (Etempvar _c1 tulong))\n                    (Ssequence\n                      (Sset _c1 (Ecast (Etempvar _c2 tuint) tulong))\n                      (Sset _c2 (Econst_int (Int.repr 0) tint)))))\n                (Ssequence\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'86\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                  (Tstruct __2843 noattr)) _d\n                                (tarray tulong 4))\n                              (Econst_int (Int.repr 0) tint) (tptr tulong))\n                            tulong))\n                        (Ssequence\n                          (Sset _t'87\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                    (Tstruct __2843 noattr)) _d\n                                  (tarray tulong 4))\n                                (Econst_int (Int.repr 2) tint) (tptr tulong))\n                              tulong))\n                          (Scall None\n                            (Evar _secp256k1_u128_mul (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tulong\n                                                            (Tcons tulong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                            ((Eaddrof\n                               (Evar _t__3 (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             (Etempvar _t'86 tulong) ::\n                             (Etempvar _t'87 tulong) :: nil))))\n                      (Ssequence\n                        (Ssequence\n                          (Scall (Some _t'9)\n                            (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                             Tnil) tulong\n                                                           cc_default))\n                            ((Eaddrof\n                               (Evar _t__3 (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             nil))\n                          (Sset _th__3 (Etempvar _t'9 tulong)))\n                        (Ssequence\n                          (Scall (Some _t'10)\n                            (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                             Tnil) tulong\n                                                           cc_default))\n                            ((Eaddrof\n                               (Evar _t__3 (Tstruct _secp256k1_uint128 noattr))\n                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                             nil))\n                          (Sset _tl__3 (Etempvar _t'10 tulong)))))\n                    (Ssequence\n                      (Sset _c0\n                        (Ebinop Oadd (Etempvar _c0 tulong)\n                          (Etempvar _tl__3 tulong) tulong))\n                      (Ssequence\n                        (Sset _th__3\n                          (Ebinop Oadd (Etempvar _th__3 tulong)\n                            (Ebinop Olt (Etempvar _c0 tulong)\n                              (Etempvar _tl__3 tulong) tint) tulong))\n                        (Ssequence\n                          (Sset _c1\n                            (Ebinop Oadd (Etempvar _c1 tulong)\n                              (Etempvar _th__3 tulong) tulong))\n                          (Ssequence\n                            (Sset _c2\n                              (Ebinop Oadd (Etempvar _c2 tuint)\n                                (Ebinop Olt (Etempvar _c1 tulong)\n                                  (Etempvar _th__3 tulong) tint) tuint))\n                            (Sloop\n                              (Ssequence\n                                (Sifthenelse (Ebinop Oge\n                                               (Etempvar _c1 tulong)\n                                               (Etempvar _th__3 tulong) tint)\n                                  (Sset _t'11 (Econst_int (Int.repr 1) tint))\n                                  (Sset _t'11\n                                    (Ecast\n                                      (Ebinop One (Etempvar _c2 tuint)\n                                        (Econst_int (Int.repr 0) tint) tint)\n                                      tbool)))\n                                (Sifthenelse (Eunop Onotbool\n                                               (Etempvar _t'11 tint) tint)\n                                  (Sloop\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'85\n                                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                        (Scall None\n                                          (Evar _fprintf (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __IO_FILE noattr))\n                                                             (Tcons\n                                                               (tptr tschar)\n                                                               Tnil)) tint\n                                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                          ((Etempvar _t'85 (tptr (Tstruct __IO_FILE noattr))) ::\n                                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                           (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                           (Econst_int (Int.repr 733) tint) ::\n                                           (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                           nil)))\n                                      (Scall None\n                                        (Evar _abort (Tfunction Tnil tvoid\n                                                       cc_default)) nil))\n                                    Sbreak)\n                                  Sskip))\n                              Sbreak))))))\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'83\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                    (Tstruct __2843 noattr)) _d\n                                  (tarray tulong 4))\n                                (Econst_int (Int.repr 1) tint) (tptr tulong))\n                              tulong))\n                          (Ssequence\n                            (Sset _t'84\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                      (Tstruct __2843 noattr)) _d\n                                    (tarray tulong 4))\n                                  (Econst_int (Int.repr 1) tint)\n                                  (tptr tulong)) tulong))\n                            (Scall None\n                              (Evar _secp256k1_u128_mul (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              (Tcons tulong\n                                                                Tnil))) tvoid\n                                                          cc_default))\n                              ((Eaddrof\n                                 (Evar _t__4 (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               (Etempvar _t'83 tulong) ::\n                               (Etempvar _t'84 tulong) :: nil))))\n                        (Ssequence\n                          (Ssequence\n                            (Scall (Some _t'12)\n                              (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                               Tnil) tulong\n                                                             cc_default))\n                              ((Eaddrof\n                                 (Evar _t__4 (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               nil))\n                            (Sset _th__4 (Etempvar _t'12 tulong)))\n                          (Ssequence\n                            (Scall (Some _t'13)\n                              (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                               Tnil) tulong\n                                                             cc_default))\n                              ((Eaddrof\n                                 (Evar _t__4 (Tstruct _secp256k1_uint128 noattr))\n                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                               nil))\n                            (Sset _tl__4 (Etempvar _t'13 tulong)))))\n                      (Ssequence\n                        (Sset _c0\n                          (Ebinop Oadd (Etempvar _c0 tulong)\n                            (Etempvar _tl__4 tulong) tulong))\n                        (Ssequence\n                          (Sset _th__4\n                            (Ebinop Oadd (Etempvar _th__4 tulong)\n                              (Ebinop Olt (Etempvar _c0 tulong)\n                                (Etempvar _tl__4 tulong) tint) tulong))\n                          (Ssequence\n                            (Sset _c1\n                              (Ebinop Oadd (Etempvar _c1 tulong)\n                                (Etempvar _th__4 tulong) tulong))\n                            (Ssequence\n                              (Sset _c2\n                                (Ebinop Oadd (Etempvar _c2 tuint)\n                                  (Ebinop Olt (Etempvar _c1 tulong)\n                                    (Etempvar _th__4 tulong) tint) tuint))\n                              (Sloop\n                                (Ssequence\n                                  (Sifthenelse (Ebinop Oge\n                                                 (Etempvar _c1 tulong)\n                                                 (Etempvar _th__4 tulong)\n                                                 tint)\n                                    (Sset _t'14\n                                      (Econst_int (Int.repr 1) tint))\n                                    (Sset _t'14\n                                      (Ecast\n                                        (Ebinop One (Etempvar _c2 tuint)\n                                          (Econst_int (Int.repr 0) tint)\n                                          tint) tbool)))\n                                  (Sifthenelse (Eunop Onotbool\n                                                 (Etempvar _t'14 tint) tint)\n                                    (Sloop\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'82\n                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                          (Scall None\n                                            (Evar _fprintf (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __IO_FILE noattr))\n                                                               (Tcons\n                                                                 (tptr tschar)\n                                                                 Tnil)) tint\n                                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                            ((Etempvar _t'82 (tptr (Tstruct __IO_FILE noattr))) ::\n                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                             (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                             (Econst_int (Int.repr 734) tint) ::\n                                             (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                             nil)))\n                                        (Scall None\n                                          (Evar _abort (Tfunction Tnil tvoid\n                                                         cc_default)) nil))\n                                      Sbreak)\n                                    Sskip))\n                                Sbreak))))))\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'80\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                      (Tstruct __2843 noattr)) _d\n                                    (tarray tulong 4))\n                                  (Econst_int (Int.repr 2) tint)\n                                  (tptr tulong)) tulong))\n                            (Ssequence\n                              (Sset _t'81\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                        (Tstruct __2843 noattr)) _d\n                                      (tarray tulong 4))\n                                    (Econst_int (Int.repr 0) tint)\n                                    (tptr tulong)) tulong))\n                              (Scall None\n                                (Evar _secp256k1_u128_mul (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                              (Tcons tulong\n                                                                (Tcons tulong\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                ((Eaddrof\n                                   (Evar _t__5 (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 (Etempvar _t'80 tulong) ::\n                                 (Etempvar _t'81 tulong) :: nil))))\n                          (Ssequence\n                            (Ssequence\n                              (Scall (Some _t'15)\n                                (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                 Tnil) tulong\n                                                               cc_default))\n                                ((Eaddrof\n                                   (Evar _t__5 (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 nil))\n                              (Sset _th__5 (Etempvar _t'15 tulong)))\n                            (Ssequence\n                              (Scall (Some _t'16)\n                                (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                 Tnil) tulong\n                                                               cc_default))\n                                ((Eaddrof\n                                   (Evar _t__5 (Tstruct _secp256k1_uint128 noattr))\n                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                 nil))\n                              (Sset _tl__5 (Etempvar _t'16 tulong)))))\n                        (Ssequence\n                          (Sset _c0\n                            (Ebinop Oadd (Etempvar _c0 tulong)\n                              (Etempvar _tl__5 tulong) tulong))\n                          (Ssequence\n                            (Sset _th__5\n                              (Ebinop Oadd (Etempvar _th__5 tulong)\n                                (Ebinop Olt (Etempvar _c0 tulong)\n                                  (Etempvar _tl__5 tulong) tint) tulong))\n                            (Ssequence\n                              (Sset _c1\n                                (Ebinop Oadd (Etempvar _c1 tulong)\n                                  (Etempvar _th__5 tulong) tulong))\n                              (Ssequence\n                                (Sset _c2\n                                  (Ebinop Oadd (Etempvar _c2 tuint)\n                                    (Ebinop Olt (Etempvar _c1 tulong)\n                                      (Etempvar _th__5 tulong) tint) tuint))\n                                (Sloop\n                                  (Ssequence\n                                    (Sifthenelse (Ebinop Oge\n                                                   (Etempvar _c1 tulong)\n                                                   (Etempvar _th__5 tulong)\n                                                   tint)\n                                      (Sset _t'17\n                                        (Econst_int (Int.repr 1) tint))\n                                      (Sset _t'17\n                                        (Ecast\n                                          (Ebinop One (Etempvar _c2 tuint)\n                                            (Econst_int (Int.repr 0) tint)\n                                            tint) tbool)))\n                                    (Sifthenelse (Eunop Onotbool\n                                                   (Etempvar _t'17 tint)\n                                                   tint)\n                                      (Sloop\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'79\n                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                            (Scall None\n                                              (Evar _fprintf (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                                 (Tcons\n                                                                   (tptr tschar)\n                                                                   Tnil))\n                                                               tint\n                                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                              ((Etempvar _t'79 (tptr (Tstruct __IO_FILE noattr))) ::\n                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                               (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                               (Econst_int (Int.repr 735) tint) ::\n                                               (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                               nil)))\n                                          (Scall None\n                                            (Evar _abort (Tfunction Tnil\n                                                           tvoid cc_default))\n                                            nil))\n                                        Sbreak)\n                                      Sskip))\n                                  Sbreak))))))\n                      (Ssequence\n                        (Ssequence\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd (Etempvar _l (tptr tulong))\n                                (Econst_int (Int.repr 2) tint) (tptr tulong))\n                              tulong) (Etempvar _c0 tulong))\n                          (Ssequence\n                            (Sset _c0 (Etempvar _c1 tulong))\n                            (Ssequence\n                              (Sset _c1 (Ecast (Etempvar _c2 tuint) tulong))\n                              (Sset _c2 (Econst_int (Int.repr 0) tint)))))\n                        (Ssequence\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'77\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                          (Tstruct __2843 noattr)) _d\n                                        (tarray tulong 4))\n                                      (Econst_int (Int.repr 0) tint)\n                                      (tptr tulong)) tulong))\n                                (Ssequence\n                                  (Sset _t'78\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Ederef\n                                            (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                            (Tstruct __2843 noattr)) _d\n                                          (tarray tulong 4))\n                                        (Econst_int (Int.repr 3) tint)\n                                        (tptr tulong)) tulong))\n                                  (Scall None\n                                    (Evar _secp256k1_u128_mul (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                  (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                tvoid\n                                                                cc_default))\n                                    ((Eaddrof\n                                       (Evar _t__6 (Tstruct _secp256k1_uint128 noattr))\n                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                     (Etempvar _t'77 tulong) ::\n                                     (Etempvar _t'78 tulong) :: nil))))\n                              (Ssequence\n                                (Ssequence\n                                  (Scall (Some _t'18)\n                                    (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                   tulong\n                                                                   cc_default))\n                                    ((Eaddrof\n                                       (Evar _t__6 (Tstruct _secp256k1_uint128 noattr))\n                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                     nil))\n                                  (Sset _th__6 (Etempvar _t'18 tulong)))\n                                (Ssequence\n                                  (Scall (Some _t'19)\n                                    (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                   tulong\n                                                                   cc_default))\n                                    ((Eaddrof\n                                       (Evar _t__6 (Tstruct _secp256k1_uint128 noattr))\n                                       (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                     nil))\n                                  (Sset _tl__6 (Etempvar _t'19 tulong)))))\n                            (Ssequence\n                              (Sset _c0\n                                (Ebinop Oadd (Etempvar _c0 tulong)\n                                  (Etempvar _tl__6 tulong) tulong))\n                              (Ssequence\n                                (Sset _th__6\n                                  (Ebinop Oadd (Etempvar _th__6 tulong)\n                                    (Ebinop Olt (Etempvar _c0 tulong)\n                                      (Etempvar _tl__6 tulong) tint) tulong))\n                                (Ssequence\n                                  (Sset _c1\n                                    (Ebinop Oadd (Etempvar _c1 tulong)\n                                      (Etempvar _th__6 tulong) tulong))\n                                  (Ssequence\n                                    (Sset _c2\n                                      (Ebinop Oadd (Etempvar _c2 tuint)\n                                        (Ebinop Olt (Etempvar _c1 tulong)\n                                          (Etempvar _th__6 tulong) tint)\n                                        tuint))\n                                    (Sloop\n                                      (Ssequence\n                                        (Sifthenelse (Ebinop Oge\n                                                       (Etempvar _c1 tulong)\n                                                       (Etempvar _th__6 tulong)\n                                                       tint)\n                                          (Sset _t'20\n                                            (Econst_int (Int.repr 1) tint))\n                                          (Sset _t'20\n                                            (Ecast\n                                              (Ebinop One\n                                                (Etempvar _c2 tuint)\n                                                (Econst_int (Int.repr 0) tint)\n                                                tint) tbool)))\n                                        (Sifthenelse (Eunop Onotbool\n                                                       (Etempvar _t'20 tint)\n                                                       tint)\n                                          (Sloop\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'76\n                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                (Scall None\n                                                  (Evar _fprintf (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                   tint\n                                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                  ((Etempvar _t'76 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                   (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                   (Econst_int (Int.repr 737) tint) ::\n                                                   (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                   nil)))\n                                              (Scall None\n                                                (Evar _abort (Tfunction Tnil\n                                                               tvoid\n                                                               cc_default))\n                                                nil))\n                                            Sbreak)\n                                          Sskip))\n                                      Sbreak))))))\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'74\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Ederef\n                                            (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                            (Tstruct __2843 noattr)) _d\n                                          (tarray tulong 4))\n                                        (Econst_int (Int.repr 1) tint)\n                                        (tptr tulong)) tulong))\n                                  (Ssequence\n                                    (Sset _t'75\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                              (Tstruct __2843 noattr)) _d\n                                            (tarray tulong 4))\n                                          (Econst_int (Int.repr 2) tint)\n                                          (tptr tulong)) tulong))\n                                    (Scall None\n                                      (Evar _secp256k1_u128_mul (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                  tvoid\n                                                                  cc_default))\n                                      ((Eaddrof\n                                         (Evar _t__7 (Tstruct _secp256k1_uint128 noattr))\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                       (Etempvar _t'74 tulong) ::\n                                       (Etempvar _t'75 tulong) :: nil))))\n                                (Ssequence\n                                  (Ssequence\n                                    (Scall (Some _t'21)\n                                      (Evar _secp256k1_u128_hi_u64 (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                      ((Eaddrof\n                                         (Evar _t__7 (Tstruct _secp256k1_uint128 noattr))\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                       nil))\n                                    (Sset _th__7 (Etempvar _t'21 tulong)))\n                                  (Ssequence\n                                    (Scall (Some _t'22)\n                                      (Evar _secp256k1_u128_to_u64 (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    Tnil)\n                                                                    tulong\n                                                                    cc_default))\n                                      ((Eaddrof\n                                         (Evar _t__7 (Tstruct _secp256k1_uint128 noattr))\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                       nil))\n                                    (Sset _tl__7 (Etempvar _t'22 tulong)))))\n                              (Ssequence\n                                (Sset _c0\n                                  (Ebinop Oadd (Etempvar _c0 tulong)\n                                    (Etempvar _tl__7 tulong) tulong))\n                                (Ssequence\n                                  (Sset _th__7\n                                    (Ebinop Oadd (Etempvar _th__7 tulong)\n                                      (Ebinop Olt (Etempvar _c0 tulong)\n                                        (Etempvar _tl__7 tulong) tint)\n                                      tulong))\n                                  (Ssequence\n                                    (Sset _c1\n                                      (Ebinop Oadd (Etempvar _c1 tulong)\n                                        (Etempvar _th__7 tulong) tulong))\n                                    (Ssequence\n                                      (Sset _c2\n                                        (Ebinop Oadd (Etempvar _c2 tuint)\n                                          (Ebinop Olt (Etempvar _c1 tulong)\n                                            (Etempvar _th__7 tulong) tint)\n                                          tuint))\n                                      (Sloop\n                                        (Ssequence\n                                          (Sifthenelse (Ebinop Oge\n                                                         (Etempvar _c1 tulong)\n                                                         (Etempvar _th__7 tulong)\n                                                         tint)\n                                            (Sset _t'23\n                                              (Econst_int (Int.repr 1) tint))\n                                            (Sset _t'23\n                                              (Ecast\n                                                (Ebinop One\n                                                  (Etempvar _c2 tuint)\n                                                  (Econst_int (Int.repr 0) tint)\n                                                  tint) tbool)))\n                                          (Sifthenelse (Eunop Onotbool\n                                                         (Etempvar _t'23 tint)\n                                                         tint)\n                                            (Sloop\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sset _t'73\n                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                  (Scall None\n                                                    (Evar _fprintf (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                    ((Etempvar _t'73 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                     (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                     (Econst_int (Int.repr 738) tint) ::\n                                                     (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                     nil)))\n                                                (Scall None\n                                                  (Evar _abort (Tfunction\n                                                                 Tnil tvoid\n                                                                 cc_default))\n                                                  nil))\n                                              Sbreak)\n                                            Sskip))\n                                        Sbreak))))))\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'71\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                              (Tstruct __2843 noattr)) _d\n                                            (tarray tulong 4))\n                                          (Econst_int (Int.repr 2) tint)\n                                          (tptr tulong)) tulong))\n                                    (Ssequence\n                                      (Sset _t'72\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                (Tstruct __2843 noattr)) _d\n                                              (tarray tulong 4))\n                                            (Econst_int (Int.repr 1) tint)\n                                            (tptr tulong)) tulong))\n                                      (Scall None\n                                        (Evar _secp256k1_u128_mul (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                        ((Eaddrof\n                                           (Evar _t__8 (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         (Etempvar _t'71 tulong) ::\n                                         (Etempvar _t'72 tulong) :: nil))))\n                                  (Ssequence\n                                    (Ssequence\n                                      (Scall (Some _t'24)\n                                        (Evar _secp256k1_u128_hi_u64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tulong cc_default))\n                                        ((Eaddrof\n                                           (Evar _t__8 (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Sset _th__8 (Etempvar _t'24 tulong)))\n                                    (Ssequence\n                                      (Scall (Some _t'25)\n                                        (Evar _secp256k1_u128_to_u64 \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                            Tnil) tulong cc_default))\n                                        ((Eaddrof\n                                           (Evar _t__8 (Tstruct _secp256k1_uint128 noattr))\n                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                         nil))\n                                      (Sset _tl__8 (Etempvar _t'25 tulong)))))\n                                (Ssequence\n                                  (Sset _c0\n                                    (Ebinop Oadd (Etempvar _c0 tulong)\n                                      (Etempvar _tl__8 tulong) tulong))\n                                  (Ssequence\n                                    (Sset _th__8\n                                      (Ebinop Oadd (Etempvar _th__8 tulong)\n                                        (Ebinop Olt (Etempvar _c0 tulong)\n                                          (Etempvar _tl__8 tulong) tint)\n                                        tulong))\n                                    (Ssequence\n                                      (Sset _c1\n                                        (Ebinop Oadd (Etempvar _c1 tulong)\n                                          (Etempvar _th__8 tulong) tulong))\n                                      (Ssequence\n                                        (Sset _c2\n                                          (Ebinop Oadd (Etempvar _c2 tuint)\n                                            (Ebinop Olt (Etempvar _c1 tulong)\n                                              (Etempvar _th__8 tulong) tint)\n                                            tuint))\n                                        (Sloop\n                                          (Ssequence\n                                            (Sifthenelse (Ebinop Oge\n                                                           (Etempvar _c1 tulong)\n                                                           (Etempvar _th__8 tulong)\n                                                           tint)\n                                              (Sset _t'26\n                                                (Econst_int (Int.repr 1) tint))\n                                              (Sset _t'26\n                                                (Ecast\n                                                  (Ebinop One\n                                                    (Etempvar _c2 tuint)\n                                                    (Econst_int (Int.repr 0) tint)\n                                                    tint) tbool)))\n                                            (Sifthenelse (Eunop Onotbool\n                                                           (Etempvar _t'26 tint)\n                                                           tint)\n                                              (Sloop\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'70\n                                                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                    (Scall None\n                                                      (Evar _fprintf \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __IO_FILE noattr))\n                                                          (Tcons\n                                                            (tptr tschar)\n                                                            Tnil)) tint\n                                                        {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                      ((Etempvar _t'70 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                       (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                       (Econst_int (Int.repr 739) tint) ::\n                                                       (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                       nil)))\n                                                  (Scall None\n                                                    (Evar _abort (Tfunction\n                                                                   Tnil tvoid\n                                                                   cc_default))\n                                                    nil))\n                                                Sbreak)\n                                              Sskip))\n                                          Sbreak))))))\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Ssequence\n                                      (Sset _t'68\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                (Tstruct __2843 noattr)) _d\n                                              (tarray tulong 4))\n                                            (Econst_int (Int.repr 3) tint)\n                                            (tptr tulong)) tulong))\n                                      (Ssequence\n                                        (Sset _t'69\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                  (Tstruct __2843 noattr)) _d\n                                                (tarray tulong 4))\n                                              (Econst_int (Int.repr 0) tint)\n                                              (tptr tulong)) tulong))\n                                        (Scall None\n                                          (Evar _secp256k1_u128_mul (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                    (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                          ((Eaddrof\n                                             (Evar _t__9 (Tstruct _secp256k1_uint128 noattr))\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                           (Etempvar _t'68 tulong) ::\n                                           (Etempvar _t'69 tulong) :: nil))))\n                                    (Ssequence\n                                      (Ssequence\n                                        (Scall (Some _t'27)\n                                          (Evar _secp256k1_u128_hi_u64 \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                              Tnil) tulong cc_default))\n                                          ((Eaddrof\n                                             (Evar _t__9 (Tstruct _secp256k1_uint128 noattr))\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                           nil))\n                                        (Sset _th__9 (Etempvar _t'27 tulong)))\n                                      (Ssequence\n                                        (Scall (Some _t'28)\n                                          (Evar _secp256k1_u128_to_u64 \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_uint128 noattr))\n                                              Tnil) tulong cc_default))\n                                          ((Eaddrof\n                                             (Evar _t__9 (Tstruct _secp256k1_uint128 noattr))\n                                             (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                           nil))\n                                        (Sset _tl__9 (Etempvar _t'28 tulong)))))\n                                  (Ssequence\n                                    (Sset _c0\n                                      (Ebinop Oadd (Etempvar _c0 tulong)\n                                        (Etempvar _tl__9 tulong) tulong))\n                                    (Ssequence\n                                      (Sset _th__9\n                                        (Ebinop Oadd (Etempvar _th__9 tulong)\n                                          (Ebinop Olt (Etempvar _c0 tulong)\n                                            (Etempvar _tl__9 tulong) tint)\n                                          tulong))\n                                      (Ssequence\n                                        (Sset _c1\n                                          (Ebinop Oadd (Etempvar _c1 tulong)\n                                            (Etempvar _th__9 tulong) tulong))\n                                        (Ssequence\n                                          (Sset _c2\n                                            (Ebinop Oadd (Etempvar _c2 tuint)\n                                              (Ebinop Olt\n                                                (Etempvar _c1 tulong)\n                                                (Etempvar _th__9 tulong)\n                                                tint) tuint))\n                                          (Sloop\n                                            (Ssequence\n                                              (Sifthenelse (Ebinop Oge\n                                                             (Etempvar _c1 tulong)\n                                                             (Etempvar _th__9 tulong)\n                                                             tint)\n                                                (Sset _t'29\n                                                  (Econst_int (Int.repr 1) tint))\n                                                (Sset _t'29\n                                                  (Ecast\n                                                    (Ebinop One\n                                                      (Etempvar _c2 tuint)\n                                                      (Econst_int (Int.repr 0) tint)\n                                                      tint) tbool)))\n                                              (Sifthenelse (Eunop Onotbool\n                                                             (Etempvar _t'29 tint)\n                                                             tint)\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'67\n                                                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                      (Scall None\n                                                        (Evar _fprintf \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __IO_FILE noattr))\n                                                            (Tcons\n                                                              (tptr tschar)\n                                                              Tnil)) tint\n                                                          {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                        ((Etempvar _t'67 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                         (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                         (Econst_int (Int.repr 740) tint) ::\n                                                         (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                         nil)))\n                                                    (Scall None\n                                                      (Evar _abort (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                      nil))\n                                                  Sbreak)\n                                                Sskip))\n                                            Sbreak))))))\n                                (Ssequence\n                                  (Ssequence\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _l (tptr tulong))\n                                          (Econst_int (Int.repr 3) tint)\n                                          (tptr tulong)) tulong)\n                                      (Etempvar _c0 tulong))\n                                    (Ssequence\n                                      (Sset _c0 (Etempvar _c1 tulong))\n                                      (Ssequence\n                                        (Sset _c1\n                                          (Ecast (Etempvar _c2 tuint) tulong))\n                                        (Sset _c2\n                                          (Econst_int (Int.repr 0) tint)))))\n                                  (Ssequence\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'65\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Ederef\n                                                    (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                    (Tstruct __2843 noattr))\n                                                  _d (tarray tulong 4))\n                                                (Econst_int (Int.repr 1) tint)\n                                                (tptr tulong)) tulong))\n                                          (Ssequence\n                                            (Sset _t'66\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                      (Tstruct __2843 noattr))\n                                                    _d (tarray tulong 4))\n                                                  (Econst_int (Int.repr 3) tint)\n                                                  (tptr tulong)) tulong))\n                                            (Scall None\n                                              (Evar _secp256k1_u128_mul \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  (Tcons tulong\n                                                    (Tcons tulong Tnil)))\n                                                tvoid cc_default))\n                                              ((Eaddrof\n                                                 (Evar _t__10 (Tstruct _secp256k1_uint128 noattr))\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                               (Etempvar _t'65 tulong) ::\n                                               (Etempvar _t'66 tulong) ::\n                                               nil))))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Scall (Some _t'30)\n                                              (Evar _secp256k1_u128_hi_u64 \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  Tnil) tulong cc_default))\n                                              ((Eaddrof\n                                                 (Evar _t__10 (Tstruct _secp256k1_uint128 noattr))\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                               nil))\n                                            (Sset _th__10\n                                              (Etempvar _t'30 tulong)))\n                                          (Ssequence\n                                            (Scall (Some _t'31)\n                                              (Evar _secp256k1_u128_to_u64 \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                  Tnil) tulong cc_default))\n                                              ((Eaddrof\n                                                 (Evar _t__10 (Tstruct _secp256k1_uint128 noattr))\n                                                 (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                               nil))\n                                            (Sset _tl__10\n                                              (Etempvar _t'31 tulong)))))\n                                      (Ssequence\n                                        (Sset _c0\n                                          (Ebinop Oadd (Etempvar _c0 tulong)\n                                            (Etempvar _tl__10 tulong) tulong))\n                                        (Ssequence\n                                          (Sset _th__10\n                                            (Ebinop Oadd\n                                              (Etempvar _th__10 tulong)\n                                              (Ebinop Olt\n                                                (Etempvar _c0 tulong)\n                                                (Etempvar _tl__10 tulong)\n                                                tint) tulong))\n                                          (Ssequence\n                                            (Sset _c1\n                                              (Ebinop Oadd\n                                                (Etempvar _c1 tulong)\n                                                (Etempvar _th__10 tulong)\n                                                tulong))\n                                            (Ssequence\n                                              (Sset _c2\n                                                (Ebinop Oadd\n                                                  (Etempvar _c2 tuint)\n                                                  (Ebinop Olt\n                                                    (Etempvar _c1 tulong)\n                                                    (Etempvar _th__10 tulong)\n                                                    tint) tuint))\n                                              (Sloop\n                                                (Ssequence\n                                                  (Sifthenelse (Ebinop Oge\n                                                                 (Etempvar _c1 tulong)\n                                                                 (Etempvar _th__10 tulong)\n                                                                 tint)\n                                                    (Sset _t'32\n                                                      (Econst_int (Int.repr 1) tint))\n                                                    (Sset _t'32\n                                                      (Ecast\n                                                        (Ebinop One\n                                                          (Etempvar _c2 tuint)\n                                                          (Econst_int (Int.repr 0) tint)\n                                                          tint) tbool)))\n                                                  (Sifthenelse (Eunop Onotbool\n                                                                 (Etempvar _t'32 tint)\n                                                                 tint)\n                                                    (Sloop\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Sset _t'64\n                                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                          (Scall None\n                                                            (Evar _fprintf \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __IO_FILE noattr))\n                                                                (Tcons\n                                                                  (tptr tschar)\n                                                                  Tnil)) tint\n                                                              {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                            ((Etempvar _t'64 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                             (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                             (Econst_int (Int.repr 742) tint) ::\n                                                             (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                             nil)))\n                                                        (Scall None\n                                                          (Evar _abort \n                                                          (Tfunction Tnil\n                                                            tvoid cc_default))\n                                                          nil))\n                                                      Sbreak)\n                                                    Sskip))\n                                                Sbreak))))))\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'62\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                      (Tstruct __2843 noattr))\n                                                    _d (tarray tulong 4))\n                                                  (Econst_int (Int.repr 2) tint)\n                                                  (tptr tulong)) tulong))\n                                            (Ssequence\n                                              (Sset _t'63\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Ederef\n                                                        (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                        (Tstruct __2843 noattr))\n                                                      _d (tarray tulong 4))\n                                                    (Econst_int (Int.repr 2) tint)\n                                                    (tptr tulong)) tulong))\n                                              (Scall None\n                                                (Evar _secp256k1_u128_mul \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    (Tcons tulong\n                                                      (Tcons tulong Tnil)))\n                                                  tvoid cc_default))\n                                                ((Eaddrof\n                                                   (Evar _t__11 (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 (Etempvar _t'62 tulong) ::\n                                                 (Etempvar _t'63 tulong) ::\n                                                 nil))))\n                                          (Ssequence\n                                            (Ssequence\n                                              (Scall (Some _t'33)\n                                                (Evar _secp256k1_u128_hi_u64 \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    Tnil) tulong cc_default))\n                                                ((Eaddrof\n                                                   (Evar _t__11 (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 nil))\n                                              (Sset _th__11\n                                                (Etempvar _t'33 tulong)))\n                                            (Ssequence\n                                              (Scall (Some _t'34)\n                                                (Evar _secp256k1_u128_to_u64 \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                    Tnil) tulong cc_default))\n                                                ((Eaddrof\n                                                   (Evar _t__11 (Tstruct _secp256k1_uint128 noattr))\n                                                   (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                 nil))\n                                              (Sset _tl__11\n                                                (Etempvar _t'34 tulong)))))\n                                        (Ssequence\n                                          (Sset _c0\n                                            (Ebinop Oadd\n                                              (Etempvar _c0 tulong)\n                                              (Etempvar _tl__11 tulong)\n                                              tulong))\n                                          (Ssequence\n                                            (Sset _th__11\n                                              (Ebinop Oadd\n                                                (Etempvar _th__11 tulong)\n                                                (Ebinop Olt\n                                                  (Etempvar _c0 tulong)\n                                                  (Etempvar _tl__11 tulong)\n                                                  tint) tulong))\n                                            (Ssequence\n                                              (Sset _c1\n                                                (Ebinop Oadd\n                                                  (Etempvar _c1 tulong)\n                                                  (Etempvar _th__11 tulong)\n                                                  tulong))\n                                              (Ssequence\n                                                (Sset _c2\n                                                  (Ebinop Oadd\n                                                    (Etempvar _c2 tuint)\n                                                    (Ebinop Olt\n                                                      (Etempvar _c1 tulong)\n                                                      (Etempvar _th__11 tulong)\n                                                      tint) tuint))\n                                                (Sloop\n                                                  (Ssequence\n                                                    (Sifthenelse (Ebinop Oge\n                                                                   (Etempvar _c1 tulong)\n                                                                   (Etempvar _th__11 tulong)\n                                                                   tint)\n                                                      (Sset _t'35\n                                                        (Econst_int (Int.repr 1) tint))\n                                                      (Sset _t'35\n                                                        (Ecast\n                                                          (Ebinop One\n                                                            (Etempvar _c2 tuint)\n                                                            (Econst_int (Int.repr 0) tint)\n                                                            tint) tbool)))\n                                                    (Sifthenelse (Eunop Onotbool\n                                                                   (Etempvar _t'35 tint)\n                                                                   tint)\n                                                      (Sloop\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Sset _t'61\n                                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                            (Scall None\n                                                              (Evar _fprintf \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __IO_FILE noattr))\n                                                                  (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                tint\n                                                                {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                              ((Etempvar _t'61 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                               (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                               (Econst_int (Int.repr 743) tint) ::\n                                                               (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                               nil)))\n                                                          (Scall None\n                                                            (Evar _abort \n                                                            (Tfunction Tnil\n                                                              tvoid\n                                                              cc_default))\n                                                            nil))\n                                                        Sbreak)\n                                                      Sskip))\n                                                  Sbreak))))))\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'59\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Ederef\n                                                        (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                        (Tstruct __2843 noattr))\n                                                      _d (tarray tulong 4))\n                                                    (Econst_int (Int.repr 3) tint)\n                                                    (tptr tulong)) tulong))\n                                              (Ssequence\n                                                (Sset _t'60\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Efield\n                                                        (Ederef\n                                                          (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                          (Tstruct __2843 noattr))\n                                                        _d (tarray tulong 4))\n                                                      (Econst_int (Int.repr 1) tint)\n                                                      (tptr tulong)) tulong))\n                                                (Scall None\n                                                  (Evar _secp256k1_u128_mul \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      (Tcons tulong\n                                                        (Tcons tulong Tnil)))\n                                                    tvoid cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _t__12 (Tstruct _secp256k1_uint128 noattr))\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                   (Etempvar _t'59 tulong) ::\n                                                   (Etempvar _t'60 tulong) ::\n                                                   nil))))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Scall (Some _t'36)\n                                                  (Evar _secp256k1_u128_hi_u64 \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      Tnil) tulong\n                                                    cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _t__12 (Tstruct _secp256k1_uint128 noattr))\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                   nil))\n                                                (Sset _th__12\n                                                  (Etempvar _t'36 tulong)))\n                                              (Ssequence\n                                                (Scall (Some _t'37)\n                                                  (Evar _secp256k1_u128_to_u64 \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                      Tnil) tulong\n                                                    cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _t__12 (Tstruct _secp256k1_uint128 noattr))\n                                                     (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                   nil))\n                                                (Sset _tl__12\n                                                  (Etempvar _t'37 tulong)))))\n                                          (Ssequence\n                                            (Sset _c0\n                                              (Ebinop Oadd\n                                                (Etempvar _c0 tulong)\n                                                (Etempvar _tl__12 tulong)\n                                                tulong))\n                                            (Ssequence\n                                              (Sset _th__12\n                                                (Ebinop Oadd\n                                                  (Etempvar _th__12 tulong)\n                                                  (Ebinop Olt\n                                                    (Etempvar _c0 tulong)\n                                                    (Etempvar _tl__12 tulong)\n                                                    tint) tulong))\n                                              (Ssequence\n                                                (Sset _c1\n                                                  (Ebinop Oadd\n                                                    (Etempvar _c1 tulong)\n                                                    (Etempvar _th__12 tulong)\n                                                    tulong))\n                                                (Ssequence\n                                                  (Sset _c2\n                                                    (Ebinop Oadd\n                                                      (Etempvar _c2 tuint)\n                                                      (Ebinop Olt\n                                                        (Etempvar _c1 tulong)\n                                                        (Etempvar _th__12 tulong)\n                                                        tint) tuint))\n                                                  (Sloop\n                                                    (Ssequence\n                                                      (Sifthenelse (Ebinop Oge\n                                                                    (Etempvar _c1 tulong)\n                                                                    (Etempvar _th__12 tulong)\n                                                                    tint)\n                                                        (Sset _t'38\n                                                          (Econst_int (Int.repr 1) tint))\n                                                        (Sset _t'38\n                                                          (Ecast\n                                                            (Ebinop One\n                                                              (Etempvar _c2 tuint)\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              tint) tbool)))\n                                                      (Sifthenelse (Eunop Onotbool\n                                                                    (Etempvar _t'38 tint)\n                                                                    tint)\n                                                        (Sloop\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Sset _t'58\n                                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                              (Scall None\n                                                                (Evar _fprintf \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                  tint\n                                                                  {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                ((Etempvar _t'58 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                 (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                 (Econst_int (Int.repr 744) tint) ::\n                                                                 (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                 nil)))\n                                                            (Scall None\n                                                              (Evar _abort \n                                                              (Tfunction Tnil\n                                                                tvoid\n                                                                cc_default))\n                                                              nil))\n                                                          Sbreak)\n                                                        Sskip))\n                                                    Sbreak))))))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Etempvar _l (tptr tulong))\n                                                  (Econst_int (Int.repr 4) tint)\n                                                  (tptr tulong)) tulong)\n                                              (Etempvar _c0 tulong))\n                                            (Ssequence\n                                              (Sset _c0\n                                                (Etempvar _c1 tulong))\n                                              (Ssequence\n                                                (Sset _c1\n                                                  (Ecast (Etempvar _c2 tuint)\n                                                    tulong))\n                                                (Sset _c2\n                                                  (Econst_int (Int.repr 0) tint)))))\n                                          (Ssequence\n                                            (Ssequence\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sset _t'56\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Efield\n                                                          (Ederef\n                                                            (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                            (Tstruct __2843 noattr))\n                                                          _d\n                                                          (tarray tulong 4))\n                                                        (Econst_int (Int.repr 2) tint)\n                                                        (tptr tulong))\n                                                      tulong))\n                                                  (Ssequence\n                                                    (Sset _t'57\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Ederef\n                                                              (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                              (Tstruct __2843 noattr))\n                                                            _d\n                                                            (tarray tulong 4))\n                                                          (Econst_int (Int.repr 3) tint)\n                                                          (tptr tulong))\n                                                        tulong))\n                                                    (Scall None\n                                                      (Evar _secp256k1_u128_mul \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          (Tcons tulong\n                                                            (Tcons tulong\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _t__13 (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       (Etempvar _t'56 tulong) ::\n                                                       (Etempvar _t'57 tulong) ::\n                                                       nil))))\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Scall (Some _t'39)\n                                                      (Evar _secp256k1_u128_hi_u64 \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          Tnil) tulong\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _t__13 (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       nil))\n                                                    (Sset _th__13\n                                                      (Etempvar _t'39 tulong)))\n                                                  (Ssequence\n                                                    (Scall (Some _t'40)\n                                                      (Evar _secp256k1_u128_to_u64 \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                          Tnil) tulong\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _t__13 (Tstruct _secp256k1_uint128 noattr))\n                                                         (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                       nil))\n                                                    (Sset _tl__13\n                                                      (Etempvar _t'40 tulong)))))\n                                              (Ssequence\n                                                (Sset _c0\n                                                  (Ebinop Oadd\n                                                    (Etempvar _c0 tulong)\n                                                    (Etempvar _tl__13 tulong)\n                                                    tulong))\n                                                (Ssequence\n                                                  (Sset _th__13\n                                                    (Ebinop Oadd\n                                                      (Etempvar _th__13 tulong)\n                                                      (Ebinop Olt\n                                                        (Etempvar _c0 tulong)\n                                                        (Etempvar _tl__13 tulong)\n                                                        tint) tulong))\n                                                  (Ssequence\n                                                    (Sset _c1\n                                                      (Ebinop Oadd\n                                                        (Etempvar _c1 tulong)\n                                                        (Etempvar _th__13 tulong)\n                                                        tulong))\n                                                    (Ssequence\n                                                      (Sset _c2\n                                                        (Ebinop Oadd\n                                                          (Etempvar _c2 tuint)\n                                                          (Ebinop Olt\n                                                            (Etempvar _c1 tulong)\n                                                            (Etempvar _th__13 tulong)\n                                                            tint) tuint))\n                                                      (Sloop\n                                                        (Ssequence\n                                                          (Sifthenelse \n                                                            (Ebinop Oge\n                                                              (Etempvar _c1 tulong)\n                                                              (Etempvar _th__13 tulong)\n                                                              tint)\n                                                            (Sset _t'41\n                                                              (Econst_int (Int.repr 1) tint))\n                                                            (Sset _t'41\n                                                              (Ecast\n                                                                (Ebinop One\n                                                                  (Etempvar _c2 tuint)\n                                                                  (Econst_int (Int.repr 0) tint)\n                                                                  tint)\n                                                                tbool)))\n                                                          (Sifthenelse \n                                                            (Eunop Onotbool\n                                                              (Etempvar _t'41 tint)\n                                                              tint)\n                                                            (Sloop\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Sset _t'55\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                  (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'55 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 746) tint) ::\n                                                                    (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                    nil)))\n                                                                (Scall None\n                                                                  (Evar _abort \n                                                                  (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                  nil))\n                                                              Sbreak)\n                                                            Sskip))\n                                                        Sbreak))))))\n                                            (Ssequence\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Sset _t'53\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Ederef\n                                                              (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                              (Tstruct __2843 noattr))\n                                                            _d\n                                                            (tarray tulong 4))\n                                                          (Econst_int (Int.repr 3) tint)\n                                                          (tptr tulong))\n                                                        tulong))\n                                                    (Ssequence\n                                                      (Sset _t'54\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Ederef\n                                                                (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                                (Tstruct __2843 noattr))\n                                                              _d\n                                                              (tarray tulong 4))\n                                                            (Econst_int (Int.repr 2) tint)\n                                                            (tptr tulong))\n                                                          tulong))\n                                                      (Scall None\n                                                        (Evar _secp256k1_u128_mul \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            (Tcons tulong\n                                                              (Tcons tulong\n                                                                Tnil))) tvoid\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _t__14 (Tstruct _secp256k1_uint128 noattr))\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                         (Etempvar _t'53 tulong) ::\n                                                         (Etempvar _t'54 tulong) ::\n                                                         nil))))\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Scall (Some _t'42)\n                                                        (Evar _secp256k1_u128_hi_u64 \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            Tnil) tulong\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _t__14 (Tstruct _secp256k1_uint128 noattr))\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                         nil))\n                                                      (Sset _th__14\n                                                        (Etempvar _t'42 tulong)))\n                                                    (Ssequence\n                                                      (Scall (Some _t'43)\n                                                        (Evar _secp256k1_u128_to_u64 \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                            Tnil) tulong\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _t__14 (Tstruct _secp256k1_uint128 noattr))\n                                                           (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                         nil))\n                                                      (Sset _tl__14\n                                                        (Etempvar _t'43 tulong)))))\n                                                (Ssequence\n                                                  (Sset _c0\n                                                    (Ebinop Oadd\n                                                      (Etempvar _c0 tulong)\n                                                      (Etempvar _tl__14 tulong)\n                                                      tulong))\n                                                  (Ssequence\n                                                    (Sset _th__14\n                                                      (Ebinop Oadd\n                                                        (Etempvar _th__14 tulong)\n                                                        (Ebinop Olt\n                                                          (Etempvar _c0 tulong)\n                                                          (Etempvar _tl__14 tulong)\n                                                          tint) tulong))\n                                                    (Ssequence\n                                                      (Sset _c1\n                                                        (Ebinop Oadd\n                                                          (Etempvar _c1 tulong)\n                                                          (Etempvar _th__14 tulong)\n                                                          tulong))\n                                                      (Ssequence\n                                                        (Sset _c2\n                                                          (Ebinop Oadd\n                                                            (Etempvar _c2 tuint)\n                                                            (Ebinop Olt\n                                                              (Etempvar _c1 tulong)\n                                                              (Etempvar _th__14 tulong)\n                                                              tint) tuint))\n                                                        (Sloop\n                                                          (Ssequence\n                                                            (Sifthenelse \n                                                              (Ebinop Oge\n                                                                (Etempvar _c1 tulong)\n                                                                (Etempvar _th__14 tulong)\n                                                                tint)\n                                                              (Sset _t'44\n                                                                (Econst_int (Int.repr 1) tint))\n                                                              (Sset _t'44\n                                                                (Ecast\n                                                                  (Ebinop One\n                                                                    (Etempvar _c2 tuint)\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    tint)\n                                                                  tbool)))\n                                                            (Sifthenelse \n                                                              (Eunop Onotbool\n                                                                (Etempvar _t'44 tint)\n                                                                tint)\n                                                              (Sloop\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Sset _t'52\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'52 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 747) tint) ::\n                                                                    (Evar ___stringlit_123 (tarray tschar 47)) ::\n                                                                    nil)))\n                                                                  (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                Sbreak)\n                                                              Sskip))\n                                                          Sbreak))))))\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Etempvar _l (tptr tulong))\n                                                        (Econst_int (Int.repr 5) tint)\n                                                        (tptr tulong))\n                                                      tulong)\n                                                    (Etempvar _c0 tulong))\n                                                  (Ssequence\n                                                    (Sset _c0\n                                                      (Etempvar _c1 tulong))\n                                                    (Ssequence\n                                                      (Sset _c1\n                                                        (Ecast\n                                                          (Etempvar _c2 tuint)\n                                                          tulong))\n                                                      (Sset _c2\n                                                        (Econst_int (Int.repr 0) tint)))))\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Sset _t'50\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Ederef\n                                                                  (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                                                  (Tstruct __2843 noattr))\n                                                                _d\n                                                                (tarray tulong 4))\n                                                              (Econst_int (Int.repr 3) tint)\n                                                              (tptr tulong))\n                                                            tulong))\n                                                        (Ssequence\n                                                          (Sset _t'51\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Efield\n                                                                  (Ederef\n                                                                    (Etempvar _b (tptr (Tstruct __2843 noattr)))\n                                                                    (Tstruct __2843 noattr))\n                                                                  _d\n                                                                  (tarray tulong 4))\n                                                                (Econst_int (Int.repr 3) tint)\n                                                                (tptr tulong))\n                                                              tulong))\n                                                          (Scall None\n                                                            (Evar _secp256k1_u128_mul \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                (Tcons tulong\n                                                                  (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _t__15 (Tstruct _secp256k1_uint128 noattr))\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                             (Etempvar _t'50 tulong) ::\n                                                             (Etempvar _t'51 tulong) ::\n                                                             nil))))\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Scall (Some _t'45)\n                                                            (Evar _secp256k1_u128_hi_u64 \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                Tnil) tulong\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _t__15 (Tstruct _secp256k1_uint128 noattr))\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                             nil))\n                                                          (Sset _th__15\n                                                            (Etempvar _t'45 tulong)))\n                                                        (Ssequence\n                                                          (Scall (Some _t'46)\n                                                            (Evar _secp256k1_u128_to_u64 \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct _secp256k1_uint128 noattr))\n                                                                Tnil) tulong\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _t__15 (Tstruct _secp256k1_uint128 noattr))\n                                                               (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                                                             nil))\n                                                          (Sset _tl__15\n                                                            (Etempvar _t'46 tulong)))))\n                                                    (Ssequence\n                                                      (Sset _c0\n                                                        (Ebinop Oadd\n                                                          (Etempvar _c0 tulong)\n                                                          (Etempvar _tl__15 tulong)\n                                                          tulong))\n                                                      (Ssequence\n                                                        (Sset _th__15\n                                                          (Ebinop Oadd\n                                                            (Etempvar _th__15 tulong)\n                                                            (Ebinop Olt\n                                                              (Etempvar _c0 tulong)\n                                                              (Etempvar _tl__15 tulong)\n                                                              tint) tulong))\n                                                        (Ssequence\n                                                          (Sset _c1\n                                                            (Ebinop Oadd\n                                                              (Etempvar _c1 tulong)\n                                                              (Etempvar _th__15 tulong)\n                                                              tulong))\n                                                          (Sloop\n                                                            (Sifthenelse \n                                                              (Eunop Onotbool\n                                                                (Ebinop Oge\n                                                                  (Etempvar _c1 tulong)\n                                                                  (Etempvar _th__15 tulong)\n                                                                  tint) tint)\n                                                              (Sloop\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Sset _t'49\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'49 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 749) tint) ::\n                                                                    (Evar ___stringlit_120 (tarray tschar 32)) ::\n                                                                    nil)))\n                                                                  (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                Sbreak)\n                                                              Sskip)\n                                                            Sbreak)))))\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Etempvar _l (tptr tulong))\n                                                            (Econst_int (Int.repr 6) tint)\n                                                            (tptr tulong))\n                                                          tulong)\n                                                        (Etempvar _c0 tulong))\n                                                      (Ssequence\n                                                        (Sset _c0\n                                                          (Etempvar _c1 tulong))\n                                                        (Ssequence\n                                                          (Sset _c1\n                                                            (Ecast\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              tulong))\n                                                          (Sloop\n                                                            (Sifthenelse \n                                                              (Eunop Onotbool\n                                                                (Ebinop Oeq\n                                                                  (Etempvar _c2 tuint)\n                                                                  (Econst_int (Int.repr 0) tint)\n                                                                  tint) tint)\n                                                              (Sloop\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Sset _t'48\n                                                                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                    (Scall None\n                                                                    (Evar _fprintf \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                    ((Etempvar _t'48 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                    (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                    (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                    (Econst_int (Int.repr 750) tint) ::\n                                                                    (Evar ___stringlit_121 (tarray tschar 31)) ::\n                                                                    nil)))\n                                                                  (Scall None\n                                                                    (Evar _abort \n                                                                    (Tfunction\n                                                                    Tnil\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    nil))\n                                                                Sbreak)\n                                                              Sskip)\n                                                            Sbreak))))\n                                                    (Ssequence\n                                                      (Sloop\n                                                        (Sifthenelse \n                                                          (Eunop Onotbool\n                                                            (Ebinop Oeq\n                                                              (Etempvar _c1 tulong)\n                                                              (Econst_int (Int.repr 0) tint)\n                                                              tint) tint)\n                                                          (Sloop\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Sset _t'47\n                                                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                                                (Scall None\n                                                                  (Evar _fprintf \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __IO_FILE noattr))\n                                                                    (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                    tint\n                                                                    {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                                  ((Etempvar _t'47 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                                   (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                                                   (Econst_int (Int.repr 751) tint) ::\n                                                                   (Evar ___stringlit_130 (tarray tschar 31)) ::\n                                                                   nil)))\n                                                              (Scall None\n                                                                (Evar _abort \n                                                                (Tfunction\n                                                                  Tnil tvoid\n                                                                  cc_default))\n                                                                nil))\n                                                            Sbreak)\n                                                          Sskip)\n                                                        Sbreak)\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Etempvar _l (tptr tulong))\n                                                            (Econst_int (Int.repr 7) tint)\n                                                            (tptr tulong))\n                                                          tulong)\n                                                        (Etempvar _c0 tulong)))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_mul := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_a, (tptr (Tstruct __2843 noattr))) ::\n                (_b, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_l, (tarray tulong 8)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_scalar_mul_512 (Tfunction\n                                      (Tcons (tptr tulong)\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            Tnil))) tvoid cc_default))\n    ((Evar _l (tarray tulong 8)) ::\n     (Etempvar _a (tptr (Tstruct __2843 noattr))) ::\n     (Etempvar _b (tptr (Tstruct __2843 noattr))) :: nil))\n  (Scall None\n    (Evar _secp256k1_scalar_reduce_512 (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2843 noattr))\n                                           (Tcons (tptr tulong) Tnil)) tvoid\n                                         cc_default))\n    ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n     (Evar _l (tarray tulong 8)) :: nil)))\n|}.\n\nDefinition f_secp256k1_scalar_split_128 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r1, (tptr (Tstruct __2843 noattr))) ::\n                (_r2, (tptr (Tstruct __2843 noattr))) ::\n                (_k, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'4\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _k (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _r1 (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n      (Etempvar _t'4 tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'3\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _k (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r1 (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n        (Etempvar _t'3 tulong)))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _r1 (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n        (Econst_int (Int.repr 0) tint))\n      (Ssequence\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _r1 (tptr (Tstruct __2843 noattr)))\n                  (Tstruct __2843 noattr)) _d (tarray tulong 4))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n          (Econst_int (Int.repr 0) tint))\n        (Ssequence\n          (Ssequence\n            (Sset _t'2\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _k (tptr (Tstruct __2843 noattr)))\n                      (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                  (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n            (Sassign\n              (Ederef\n                (Ebinop Oadd\n                  (Efield\n                    (Ederef (Etempvar _r2 (tptr (Tstruct __2843 noattr)))\n                      (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                  (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n              (Etempvar _t'2 tulong)))\n          (Ssequence\n            (Ssequence\n              (Sset _t'1\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _k (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r2 (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                (Etempvar _t'1 tulong)))\n            (Ssequence\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r2 (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n                (Econst_int (Int.repr 0) tint))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r2 (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n                (Econst_int (Int.repr 0) tint)))))))))\n|}.\n\nDefinition f_secp256k1_scalar_mul_shift_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_a, (tptr (Tstruct __2843 noattr))) ::\n                (_b, (tptr (Tstruct __2843 noattr))) :: (_shift, tuint) ::\n                nil);\n  fn_vars := ((_l, (tarray tulong 8)) :: nil);\n  fn_temps := ((_shiftlimbs, tuint) :: (_shiftlow, tuint) ::\n               (_shifthigh, tuint) :: (_t'10, tulong) :: (_t'9, tulong) ::\n               (_t'8, tint) :: (_t'7, tulong) :: (_t'6, tulong) ::\n               (_t'5, tint) :: (_t'4, tulong) :: (_t'3, tulong) ::\n               (_t'2, tint) :: (_t'1, tulong) ::\n               (_t'19, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'18, tulong) :: (_t'17, tulong) :: (_t'16, tulong) ::\n               (_t'15, tulong) :: (_t'14, tulong) :: (_t'13, tulong) ::\n               (_t'12, tulong) :: (_t'11, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Oge (Etempvar _shift tuint)\n                     (Econst_int (Int.repr 256) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'19 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'19 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_112 (tarray tschar 29)) ::\n               (Econst_int (Int.repr 805) tint) ::\n               (Evar ___stringlit_131 (tarray tschar 36)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_scalar_mul_512 (Tfunction\n                                        (Tcons (tptr tulong)\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2843 noattr))\n                                              Tnil))) tvoid cc_default))\n      ((Evar _l (tarray tulong 8)) ::\n       (Etempvar _a (tptr (Tstruct __2843 noattr))) ::\n       (Etempvar _b (tptr (Tstruct __2843 noattr))) :: nil))\n    (Ssequence\n      (Sset _shiftlimbs\n        (Ebinop Oshr (Etempvar _shift tuint) (Econst_int (Int.repr 6) tint)\n          tuint))\n      (Ssequence\n        (Sset _shiftlow\n          (Ebinop Oand (Etempvar _shift tuint)\n            (Econst_int (Int.repr 63) tint) tuint))\n        (Ssequence\n          (Sset _shifthigh\n            (Ebinop Osub (Econst_int (Int.repr 64) tint)\n              (Etempvar _shiftlow tuint) tuint))\n          (Ssequence\n            (Ssequence\n              (Sifthenelse (Ebinop Olt (Etempvar _shift tuint)\n                             (Econst_int (Int.repr 512) tint) tint)\n                (Ssequence\n                  (Ssequence\n                    (Sifthenelse (Ebinop Olt (Etempvar _shift tuint)\n                                   (Econst_int (Int.repr 448) tint) tint)\n                      (Sset _t'2 (Ecast (Etempvar _shiftlow tuint) tbool))\n                      (Sset _t'2 (Econst_int (Int.repr 0) tint)))\n                    (Sifthenelse (Etempvar _t'2 tint)\n                      (Ssequence\n                        (Sset _t'18\n                          (Ederef\n                            (Ebinop Oadd (Evar _l (tarray tulong 8))\n                              (Ebinop Oadd (Econst_int (Int.repr 1) tint)\n                                (Etempvar _shiftlimbs tuint) tuint)\n                              (tptr tulong)) tulong))\n                        (Sset _t'3\n                          (Ecast\n                            (Ebinop Oshl (Etempvar _t'18 tulong)\n                              (Etempvar _shifthigh tuint) tulong) tulong)))\n                      (Sset _t'3\n                        (Ecast (Econst_int (Int.repr 0) tint) tulong))))\n                  (Ssequence\n                    (Sset _t'17\n                      (Ederef\n                        (Ebinop Oadd (Evar _l (tarray tulong 8))\n                          (Ebinop Oadd (Econst_int (Int.repr 0) tint)\n                            (Etempvar _shiftlimbs tuint) tuint)\n                          (tptr tulong)) tulong))\n                    (Sset _t'1\n                      (Ecast\n                        (Ebinop Oor\n                          (Ebinop Oshr (Etempvar _t'17 tulong)\n                            (Etempvar _shiftlow tuint) tulong)\n                          (Etempvar _t'3 tulong) tulong) tulong))))\n                (Sset _t'1 (Ecast (Econst_int (Int.repr 0) tint) tulong)))\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                    (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n                (Etempvar _t'1 tulong)))\n            (Ssequence\n              (Ssequence\n                (Sifthenelse (Ebinop Olt (Etempvar _shift tuint)\n                               (Econst_int (Int.repr 448) tint) tint)\n                  (Ssequence\n                    (Ssequence\n                      (Sifthenelse (Ebinop Olt (Etempvar _shift tuint)\n                                     (Econst_int (Int.repr 384) tint) tint)\n                        (Sset _t'5 (Ecast (Etempvar _shiftlow tuint) tbool))\n                        (Sset _t'5 (Econst_int (Int.repr 0) tint)))\n                      (Sifthenelse (Etempvar _t'5 tint)\n                        (Ssequence\n                          (Sset _t'16\n                            (Ederef\n                              (Ebinop Oadd (Evar _l (tarray tulong 8))\n                                (Ebinop Oadd (Econst_int (Int.repr 2) tint)\n                                  (Etempvar _shiftlimbs tuint) tuint)\n                                (tptr tulong)) tulong))\n                          (Sset _t'6\n                            (Ecast\n                              (Ebinop Oshl (Etempvar _t'16 tulong)\n                                (Etempvar _shifthigh tuint) tulong) tulong)))\n                        (Sset _t'6\n                          (Ecast (Econst_int (Int.repr 0) tint) tulong))))\n                    (Ssequence\n                      (Sset _t'15\n                        (Ederef\n                          (Ebinop Oadd (Evar _l (tarray tulong 8))\n                            (Ebinop Oadd (Econst_int (Int.repr 1) tint)\n                              (Etempvar _shiftlimbs tuint) tuint)\n                            (tptr tulong)) tulong))\n                      (Sset _t'4\n                        (Ecast\n                          (Ebinop Oor\n                            (Ebinop Oshr (Etempvar _t'15 tulong)\n                              (Etempvar _shiftlow tuint) tulong)\n                            (Etempvar _t'6 tulong) tulong) tulong))))\n                  (Sset _t'4 (Ecast (Econst_int (Int.repr 0) tint) tulong)))\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                          (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                      (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n                  (Etempvar _t'4 tulong)))\n              (Ssequence\n                (Ssequence\n                  (Sifthenelse (Ebinop Olt (Etempvar _shift tuint)\n                                 (Econst_int (Int.repr 384) tint) tint)\n                    (Ssequence\n                      (Ssequence\n                        (Sifthenelse (Ebinop Olt (Etempvar _shift tuint)\n                                       (Econst_int (Int.repr 320) tint) tint)\n                          (Sset _t'8\n                            (Ecast (Etempvar _shiftlow tuint) tbool))\n                          (Sset _t'8 (Econst_int (Int.repr 0) tint)))\n                        (Sifthenelse (Etempvar _t'8 tint)\n                          (Ssequence\n                            (Sset _t'14\n                              (Ederef\n                                (Ebinop Oadd (Evar _l (tarray tulong 8))\n                                  (Ebinop Oadd (Econst_int (Int.repr 3) tint)\n                                    (Etempvar _shiftlimbs tuint) tuint)\n                                  (tptr tulong)) tulong))\n                            (Sset _t'9\n                              (Ecast\n                                (Ebinop Oshl (Etempvar _t'14 tulong)\n                                  (Etempvar _shifthigh tuint) tulong) tulong)))\n                          (Sset _t'9\n                            (Ecast (Econst_int (Int.repr 0) tint) tulong))))\n                      (Ssequence\n                        (Sset _t'13\n                          (Ederef\n                            (Ebinop Oadd (Evar _l (tarray tulong 8))\n                              (Ebinop Oadd (Econst_int (Int.repr 2) tint)\n                                (Etempvar _shiftlimbs tuint) tuint)\n                              (tptr tulong)) tulong))\n                        (Sset _t'7\n                          (Ecast\n                            (Ebinop Oor\n                              (Ebinop Oshr (Etempvar _t'13 tulong)\n                                (Etempvar _shiftlow tuint) tulong)\n                              (Etempvar _t'9 tulong) tulong) tulong))))\n                    (Sset _t'7 (Ecast (Econst_int (Int.repr 0) tint) tulong)))\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                            (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                        (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n                    (Etempvar _t'7 tulong)))\n                (Ssequence\n                  (Ssequence\n                    (Sifthenelse (Ebinop Olt (Etempvar _shift tuint)\n                                   (Econst_int (Int.repr 320) tint) tint)\n                      (Ssequence\n                        (Sset _t'12\n                          (Ederef\n                            (Ebinop Oadd (Evar _l (tarray tulong 8))\n                              (Ebinop Oadd (Econst_int (Int.repr 3) tint)\n                                (Etempvar _shiftlimbs tuint) tuint)\n                              (tptr tulong)) tulong))\n                        (Sset _t'10\n                          (Ecast\n                            (Ebinop Oshr (Etempvar _t'12 tulong)\n                              (Etempvar _shiftlow tuint) tulong) tulong)))\n                      (Sset _t'10\n                        (Ecast (Econst_int (Int.repr 0) tint) tulong)))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                          (Econst_int (Int.repr 3) tint) (tptr tulong))\n                        tulong) (Etempvar _t'10 tulong)))\n                  (Ssequence\n                    (Sset _t'11\n                      (Ederef\n                        (Ebinop Oadd (Evar _l (tarray tulong 8))\n                          (Ebinop Oshr\n                            (Ebinop Osub (Etempvar _shift tuint)\n                              (Econst_int (Int.repr 1) tint) tuint)\n                            (Econst_int (Int.repr 6) tint) tuint)\n                          (tptr tulong)) tulong))\n                    (Scall None\n                      (Evar _secp256k1_scalar_cadd_bit (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __2843 noattr))\n                                                           (Tcons tuint\n                                                             (Tcons tint\n                                                               Tnil))) tvoid\n                                                         cc_default))\n                      ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n                       (Econst_int (Int.repr 0) tint) ::\n                       (Ebinop Oand\n                         (Ebinop Oshr (Etempvar _t'11 tulong)\n                           (Ebinop Oand\n                             (Ebinop Osub (Etempvar _shift tuint)\n                               (Econst_int (Int.repr 1) tint) tuint)\n                             (Econst_int (Int.repr 63) tint) tuint) tulong)\n                         (Econst_int (Int.repr 1) tint) tulong) :: nil))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_from_signed62 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_a, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                nil);\n  fn_vars := nil;\n  fn_temps := ((_a0, tulong) :: (_a1, tulong) :: (_a2, tulong) ::\n               (_a3, tulong) :: (_a4, tulong) :: (_t'1, tint) ::\n               (_t'7, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'6, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'5, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'4, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'3, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _a0\n    (Ederef\n      (Ebinop Oadd\n        (Efield\n          (Ederef\n            (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n            (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n          (tarray tlong 5)) (Econst_int (Int.repr 0) tint) (tptr tlong))\n      tlong))\n  (Ssequence\n    (Sset _a1\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef\n              (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n              (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n            (tarray tlong 5)) (Econst_int (Int.repr 1) tint) (tptr tlong))\n        tlong))\n    (Ssequence\n      (Sset _a2\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef\n                (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n              (tarray tlong 5)) (Econst_int (Int.repr 2) tint) (tptr tlong))\n          tlong))\n      (Ssequence\n        (Sset _a3\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef\n                  (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                  (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                (tarray tlong 5)) (Econst_int (Int.repr 3) tint)\n              (tptr tlong)) tlong))\n        (Ssequence\n          (Sset _a4\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef\n                    (Etempvar _a (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                    (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                  (tarray tlong 5)) (Econst_int (Int.repr 4) tint)\n                (tptr tlong)) tlong))\n          (Ssequence\n            (Sloop\n              (Sifthenelse (Eunop Onotbool\n                             (Ebinop Oeq\n                               (Ebinop Oshr (Etempvar _a0 tulong)\n                                 (Econst_int (Int.repr 62) tint) tulong)\n                               (Econst_int (Int.repr 0) tint) tint) tint)\n                (Sloop\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'7\n                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                      (Scall None\n                        (Evar _fprintf (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __IO_FILE noattr))\n                                           (Tcons (tptr tschar) Tnil)) tint\n                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                        ((Etempvar _t'7 (tptr (Tstruct __IO_FILE noattr))) ::\n                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                         (Evar ___stringlit_112 (tarray tschar 29)) ::\n                         (Econst_int (Int.repr 836) tint) ::\n                         (Evar ___stringlit_103 (tarray tschar 37)) :: nil)))\n                    (Scall None\n                      (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                  Sbreak)\n                Sskip)\n              Sbreak)\n            (Ssequence\n              (Sloop\n                (Sifthenelse (Eunop Onotbool\n                               (Ebinop Oeq\n                                 (Ebinop Oshr (Etempvar _a1 tulong)\n                                   (Econst_int (Int.repr 62) tint) tulong)\n                                 (Econst_int (Int.repr 0) tint) tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'6\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_112 (tarray tschar 29)) ::\n                           (Econst_int (Int.repr 837) tint) ::\n                           (Evar ___stringlit_104 (tarray tschar 37)) :: nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip)\n                Sbreak)\n              (Ssequence\n                (Sloop\n                  (Sifthenelse (Eunop Onotbool\n                                 (Ebinop Oeq\n                                   (Ebinop Oshr (Etempvar _a2 tulong)\n                                     (Econst_int (Int.repr 62) tint) tulong)\n                                   (Econst_int (Int.repr 0) tint) tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'5\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_112 (tarray tschar 29)) ::\n                             (Econst_int (Int.repr 838) tint) ::\n                             (Evar ___stringlit_105 (tarray tschar 37)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip)\n                  Sbreak)\n                (Ssequence\n                  (Sloop\n                    (Sifthenelse (Eunop Onotbool\n                                   (Ebinop Oeq\n                                     (Ebinop Oshr (Etempvar _a3 tulong)\n                                       (Econst_int (Int.repr 62) tint)\n                                       tulong) (Econst_int (Int.repr 0) tint)\n                                     tint) tint)\n                      (Sloop\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'4\n                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                            (Scall None\n                              (Evar _fprintf (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                 (Tcons (tptr tschar) Tnil))\n                                               tint\n                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                              ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                               (Evar ___stringlit_112 (tarray tschar 29)) ::\n                               (Econst_int (Int.repr 839) tint) ::\n                               (Evar ___stringlit_106 (tarray tschar 37)) ::\n                               nil)))\n                          (Scall None\n                            (Evar _abort (Tfunction Tnil tvoid cc_default))\n                            nil))\n                        Sbreak)\n                      Sskip)\n                    Sbreak)\n                  (Ssequence\n                    (Sloop\n                      (Sifthenelse (Eunop Onotbool\n                                     (Ebinop Oeq\n                                       (Ebinop Oshr (Etempvar _a4 tulong)\n                                         (Econst_int (Int.repr 8) tint)\n                                         tulong)\n                                       (Econst_int (Int.repr 0) tint) tint)\n                                     tint)\n                        (Sloop\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'3\n                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                              (Scall None\n                                (Evar _fprintf (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                   (Tcons (tptr tschar) Tnil))\n                                                 tint\n                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                 (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                 (Econst_int (Int.repr 840) tint) ::\n                                 (Evar ___stringlit_107 (tarray tschar 36)) ::\n                                 nil)))\n                            (Scall None\n                              (Evar _abort (Tfunction Tnil tvoid cc_default))\n                              nil))\n                          Sbreak)\n                        Sskip)\n                      Sbreak)\n                    (Ssequence\n                      (Sassign\n                        (Ederef\n                          (Ebinop Oadd\n                            (Efield\n                              (Ederef\n                                (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                (Tstruct __2843 noattr)) _d\n                              (tarray tulong 4))\n                            (Econst_int (Int.repr 0) tint) (tptr tulong))\n                          tulong)\n                        (Ebinop Oor (Etempvar _a0 tulong)\n                          (Ebinop Oshl (Etempvar _a1 tulong)\n                            (Econst_int (Int.repr 62) tint) tulong) tulong))\n                      (Ssequence\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Ederef\n                                  (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                  (Tstruct __2843 noattr)) _d\n                                (tarray tulong 4))\n                              (Econst_int (Int.repr 1) tint) (tptr tulong))\n                            tulong)\n                          (Ebinop Oor\n                            (Ebinop Oshr (Etempvar _a1 tulong)\n                              (Econst_int (Int.repr 2) tint) tulong)\n                            (Ebinop Oshl (Etempvar _a2 tulong)\n                              (Econst_int (Int.repr 60) tint) tulong) tulong))\n                        (Ssequence\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                    (Tstruct __2843 noattr)) _d\n                                  (tarray tulong 4))\n                                (Econst_int (Int.repr 2) tint) (tptr tulong))\n                              tulong)\n                            (Ebinop Oor\n                              (Ebinop Oshr (Etempvar _a2 tulong)\n                                (Econst_int (Int.repr 4) tint) tulong)\n                              (Ebinop Oshl (Etempvar _a3 tulong)\n                                (Econst_int (Int.repr 58) tint) tulong)\n                              tulong))\n                          (Ssequence\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _r (tptr (Tstruct __2843 noattr)))\n                                      (Tstruct __2843 noattr)) _d\n                                    (tarray tulong 4))\n                                  (Econst_int (Int.repr 3) tint)\n                                  (tptr tulong)) tulong)\n                              (Ebinop Oor\n                                (Ebinop Oshr (Etempvar _a3 tulong)\n                                  (Econst_int (Int.repr 6) tint) tulong)\n                                (Ebinop Oshl (Etempvar _a4 tulong)\n                                  (Econst_int (Int.repr 56) tint) tulong)\n                                tulong))\n                            (Sloop\n                              (Ssequence\n                                (Scall (Some _t'1)\n                                  (Evar _secp256k1_scalar_check_overflow \n                                  (Tfunction\n                                    (Tcons (tptr (Tstruct __2843 noattr))\n                                      Tnil) tint cc_default))\n                                  ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n                                   nil))\n                                (Sifthenelse (Eunop Onotbool\n                                               (Ebinop Oeq\n                                                 (Etempvar _t'1 tint)\n                                                 (Econst_int (Int.repr 0) tint)\n                                                 tint) tint)\n                                  (Sloop\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'2\n                                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                        (Scall None\n                                          (Evar _fprintf (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __IO_FILE noattr))\n                                                             (Tcons\n                                                               (tptr tschar)\n                                                               Tnil)) tint\n                                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                          ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                           (Evar ___stringlit_112 (tarray tschar 29)) ::\n                                           (Econst_int (Int.repr 848) tint) ::\n                                           (Evar ___stringlit_132 (tarray tschar 63)) ::\n                                           nil)))\n                                      (Scall None\n                                        (Evar _abort (Tfunction Tnil tvoid\n                                                       cc_default)) nil))\n                                    Sbreak)\n                                  Sskip))\n                              Sbreak)))))))))))))))\n|}.\n\nDefinition f_secp256k1_scalar_to_signed62 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n                (_a, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_M62, tulong) :: (_a0, tulong) :: (_a1, tulong) ::\n               (_a2, tulong) :: (_a3, tulong) :: (_t'1, tint) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _M62\n    (Ebinop Oshr (Econst_long (Int64.repr (-1)) tulong)\n      (Econst_int (Int.repr 2) tint) tulong))\n  (Ssequence\n    (Sset _a0\n      (Ederef\n        (Ebinop Oadd\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n              (Tstruct __2843 noattr)) _d (tarray tulong 4))\n          (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong))\n    (Ssequence\n      (Sset _a1\n        (Ederef\n          (Ebinop Oadd\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                (Tstruct __2843 noattr)) _d (tarray tulong 4))\n            (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong))\n      (Ssequence\n        (Sset _a2\n          (Ederef\n            (Ebinop Oadd\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                  (Tstruct __2843 noattr)) _d (tarray tulong 4))\n              (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong))\n        (Ssequence\n          (Sset _a3\n            (Ederef\n              (Ebinop Oadd\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                    (Tstruct __2843 noattr)) _d (tarray tulong 4))\n                (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong))\n          (Ssequence\n            (Sloop\n              (Ssequence\n                (Scall (Some _t'1)\n                  (Evar _secp256k1_scalar_check_overflow (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __2843 noattr))\n                                                             Tnil) tint\n                                                           cc_default))\n                  ((Etempvar _a (tptr (Tstruct __2843 noattr))) :: nil))\n                (Sifthenelse (Eunop Onotbool\n                               (Ebinop Oeq (Etempvar _t'1 tint)\n                                 (Econst_int (Int.repr 0) tint) tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'2\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_112 (tarray tschar 29)) ::\n                           (Econst_int (Int.repr 857) tint) ::\n                           (Evar ___stringlit_133 (tarray tschar 63)) :: nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip))\n              Sbreak)\n            (Ssequence\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd\n                    (Efield\n                      (Ederef\n                        (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                        (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                      (tarray tlong 5)) (Econst_int (Int.repr 0) tint)\n                    (tptr tlong)) tlong)\n                (Ebinop Oand (Etempvar _a0 tulong) (Etempvar _M62 tulong)\n                  tulong))\n              (Ssequence\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd\n                      (Efield\n                        (Ederef\n                          (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                          (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                        (tarray tlong 5)) (Econst_int (Int.repr 1) tint)\n                      (tptr tlong)) tlong)\n                  (Ebinop Oand\n                    (Ebinop Oor\n                      (Ebinop Oshr (Etempvar _a0 tulong)\n                        (Econst_int (Int.repr 62) tint) tulong)\n                      (Ebinop Oshl (Etempvar _a1 tulong)\n                        (Econst_int (Int.repr 2) tint) tulong) tulong)\n                    (Etempvar _M62 tulong) tulong))\n                (Ssequence\n                  (Sassign\n                    (Ederef\n                      (Ebinop Oadd\n                        (Efield\n                          (Ederef\n                            (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                            (Tstruct _secp256k1_modinv64_signed62 noattr)) _v\n                          (tarray tlong 5)) (Econst_int (Int.repr 2) tint)\n                        (tptr tlong)) tlong)\n                    (Ebinop Oand\n                      (Ebinop Oor\n                        (Ebinop Oshr (Etempvar _a1 tulong)\n                          (Econst_int (Int.repr 60) tint) tulong)\n                        (Ebinop Oshl (Etempvar _a2 tulong)\n                          (Econst_int (Int.repr 4) tint) tulong) tulong)\n                      (Etempvar _M62 tulong) tulong))\n                  (Ssequence\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                              (Tstruct _secp256k1_modinv64_signed62 noattr))\n                            _v (tarray tlong 5))\n                          (Econst_int (Int.repr 3) tint) (tptr tlong)) tlong)\n                      (Ebinop Oand\n                        (Ebinop Oor\n                          (Ebinop Oshr (Etempvar _a2 tulong)\n                            (Econst_int (Int.repr 58) tint) tulong)\n                          (Ebinop Oshl (Etempvar _a3 tulong)\n                            (Econst_int (Int.repr 6) tint) tulong) tulong)\n                        (Etempvar _M62 tulong) tulong))\n                    (Sassign\n                      (Ederef\n                        (Ebinop Oadd\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct _secp256k1_modinv64_signed62 noattr)))\n                              (Tstruct _secp256k1_modinv64_signed62 noattr))\n                            _v (tarray tlong 5))\n                          (Econst_int (Int.repr 4) tint) (tptr tlong)) tlong)\n                      (Ebinop Oshr (Etempvar _a3 tulong)\n                        (Econst_int (Int.repr 56) tint) tulong))))))))))))\n|}.\n\nDefinition v_secp256k1_const_modinfo_scalar := {|\n  gvar_info := (Tstruct _secp256k1_modinv64_modinfo noattr);\n  gvar_init := (Init_int64 (Int64.repr 4598842128380346689) ::\n                Init_int64 (Int64.repr 3079181878673178862) ::\n                Init_int64 (Int64.repr (-21)) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 256) ::\n                Init_int64 (Int64.repr 3815112494326173377) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_scalar_inverse_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_x, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_s, (Tstruct _secp256k1_modinv64_signed62 noattr)) :: nil);\n  fn_temps := ((_zero_in, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'3, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_scalar_is_zero (Tfunction\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          Tnil) tint cc_default))\n      ((Etempvar _x (tptr (Tstruct __2843 noattr))) :: nil))\n    (Sset _zero_in (Etempvar _t'1 tint)))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_scalar_to_signed62 (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2843 noattr))\n                                                Tnil)) tvoid cc_default))\n      ((Eaddrof (Evar _s (Tstruct _secp256k1_modinv64_signed62 noattr))\n         (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n       (Etempvar _x (tptr (Tstruct __2843 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_modinv64_var (Tfunction\n                                        (Tcons\n                                          (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))\n                                            Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _s (Tstruct _secp256k1_modinv64_signed62 noattr))\n           (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) ::\n         (Eaddrof\n           (Evar _secp256k1_const_modinfo_scalar (Tstruct _secp256k1_modinv64_modinfo noattr))\n           (tptr (Tstruct _secp256k1_modinv64_modinfo noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_scalar_from_signed62 (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2843 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))\n                                                      Tnil)) tvoid\n                                                  cc_default))\n          ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _s (Tstruct _secp256k1_modinv64_signed62 noattr))\n             (tptr (Tstruct _secp256k1_modinv64_signed62 noattr))) :: nil))\n        (Sloop\n          (Ssequence\n            (Scall (Some _t'2)\n              (Evar _secp256k1_scalar_is_zero (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  Tnil) tint cc_default))\n              ((Etempvar _r (tptr (Tstruct __2843 noattr))) :: nil))\n            (Sifthenelse (Eunop Onotbool\n                           (Ebinop Oeq (Etempvar _t'2 tint)\n                             (Etempvar _zero_in tint) tint) tint)\n              (Sloop\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'3\n                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                    (Scall None\n                      (Evar _fprintf (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct __IO_FILE noattr))\n                                         (Tcons (tptr tschar) Tnil)) tint\n                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                      ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                       (Evar ___stringlit_112 (tarray tschar 29)) ::\n                       (Econst_int (Int.repr 898) tint) ::\n                       (Evar ___stringlit_134 (tarray tschar 62)) :: nil)))\n                  (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                    nil))\n                Sbreak)\n              Sskip))\n          Sbreak)))))\n|}.\n\nDefinition v_secp256k1_const_lambda := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr (-2377172193522762382)) ::\n                Init_int64 (Int64.repr 1310022930574435960) ::\n                Init_int64 (Int64.repr (-6546514211138018214)) ::\n                Init_int64 (Int64.repr 6008836872998760672) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_minus_b1 := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr 8022177200260244675) ::\n                Init_int64 (Int64.repr (-1998614352016537560)) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_minus_b2 := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr (-2925706260434037204)) ::\n                Init_int64 (Int64.repr (-8491525256057179027)) ::\n                Init_int64 (Int64.repr (-2)) ::\n                Init_int64 (Int64.repr (-1)) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_g1 := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr (-1687969588364726223)) ::\n                Init_int64 (Int64.repr 4443515802769476223) ::\n                Init_int64 (Int64.repr (-1698823648040391915)) ::\n                Init_int64 (Int64.repr 3496713202691238861) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_g2 := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr 1545214808910233457) ::\n                Init_int64 (Int64.repr 2455034284347819718) ::\n                Init_int64 (Int64.repr 8022177200260244676) ::\n                Init_int64 (Int64.repr (-1998614352016537560)) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_scalar_split_lambda := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r1, (tptr (Tstruct __2843 noattr))) ::\n                (_r2, (tptr (Tstruct __2843 noattr))) ::\n                (_k, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_c1, (Tstruct __2843 noattr)) ::\n              (_c2, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := ((_t'3, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One (Etempvar _r1 (tptr (Tstruct __2843 noattr)))\n                     (Etempvar _k (tptr (Tstruct __2843 noattr))) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_136 (tarray tschar 24)) ::\n               (Econst_int (Int.repr 114) tint) ::\n               (Evar ___stringlit_135 (tarray tschar 31)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop One\n                       (Etempvar _r2 (tptr (Tstruct __2843 noattr)))\n                       (Etempvar _k (tptr (Tstruct __2843 noattr))) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_136 (tarray tschar 24)) ::\n                 (Econst_int (Int.repr 115) tint) ::\n                 (Evar ___stringlit_137 (tarray tschar 31)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop One\n                         (Etempvar _r1 (tptr (Tstruct __2843 noattr)))\n                         (Etempvar _r2 (tptr (Tstruct __2843 noattr))) tint)\n                       tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'1 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_136 (tarray tschar 24)) ::\n                   (Econst_int (Int.repr 116) tint) ::\n                   (Evar ___stringlit_138 (tarray tschar 32)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip)\n        Sbreak)\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_scalar_mul_shift_var (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2843 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2843 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2843 noattr))\n                                                        (Tcons tuint Tnil))))\n                                                  tvoid cc_default))\n          ((Eaddrof (Evar _c1 (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Etempvar _k (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _g1 (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Econst_int (Int.repr 384) tint) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_scalar_mul_shift_var (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2843 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2843 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2843 noattr))\n                                                          (Tcons tuint Tnil))))\n                                                    tvoid cc_default))\n            ((Eaddrof (Evar _c2 (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) ::\n             (Etempvar _k (tptr (Tstruct __2843 noattr))) ::\n             (Eaddrof (Evar _g2 (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) ::\n             (Econst_int (Int.repr 384) tint) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_scalar_mul (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2843 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2843 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  Tnil))) tvoid cc_default))\n              ((Eaddrof (Evar _c1 (Tstruct __2843 noattr))\n                 (tptr (Tstruct __2843 noattr))) ::\n               (Eaddrof (Evar _c1 (Tstruct __2843 noattr))\n                 (tptr (Tstruct __2843 noattr))) ::\n               (Eaddrof (Evar _minus_b1 (Tstruct __2843 noattr))\n                 (tptr (Tstruct __2843 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_scalar_mul (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2843 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2843 noattr))\n                                                    Tnil))) tvoid cc_default))\n                ((Eaddrof (Evar _c2 (Tstruct __2843 noattr))\n                   (tptr (Tstruct __2843 noattr))) ::\n                 (Eaddrof (Evar _c2 (Tstruct __2843 noattr))\n                   (tptr (Tstruct __2843 noattr))) ::\n                 (Eaddrof (Evar _minus_b2 (Tstruct __2843 noattr))\n                   (tptr (Tstruct __2843 noattr))) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_scalar_add (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2843 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2843 noattr))\n                                                      Tnil))) tint\n                                                cc_default))\n                  ((Etempvar _r2 (tptr (Tstruct __2843 noattr))) ::\n                   (Eaddrof (Evar _c1 (Tstruct __2843 noattr))\n                     (tptr (Tstruct __2843 noattr))) ::\n                   (Eaddrof (Evar _c2 (Tstruct __2843 noattr))\n                     (tptr (Tstruct __2843 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_scalar_mul (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2843 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2843 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2843 noattr))\n                                                        Tnil))) tvoid\n                                                  cc_default))\n                    ((Etempvar _r1 (tptr (Tstruct __2843 noattr))) ::\n                     (Etempvar _r2 (tptr (Tstruct __2843 noattr))) ::\n                     (Eaddrof\n                       (Evar _secp256k1_const_lambda (Tstruct __2843 noattr))\n                       (tptr (Tstruct __2843 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_scalar_negate (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __2843 noattr))\n                                                         (Tcons\n                                                           (tptr (Tstruct __2843 noattr))\n                                                           Tnil)) tvoid\n                                                       cc_default))\n                      ((Etempvar _r1 (tptr (Tstruct __2843 noattr))) ::\n                       (Etempvar _r1 (tptr (Tstruct __2843 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_scalar_add (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2843 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2843 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2843 noattr))\n                                                            Tnil))) tint\n                                                      cc_default))\n                        ((Etempvar _r1 (tptr (Tstruct __2843 noattr))) ::\n                         (Etempvar _r1 (tptr (Tstruct __2843 noattr))) ::\n                         (Etempvar _k (tptr (Tstruct __2843 noattr))) :: nil))\n                      (Scall None\n                        (Evar _secp256k1_scalar_split_lambda_verify (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                        ((Etempvar _r1 (tptr (Tstruct __2843 noattr))) ::\n                         (Etempvar _r2 (tptr (Tstruct __2843 noattr))) ::\n                         (Etempvar _k (tptr (Tstruct __2843 noattr))) :: nil)))))))))))))\n|}.\n\nDefinition v_k1_bound := {|\n  gvar_info := (tarray tuchar 32);\n  gvar_init := (Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 162) :: Init_int8 (Int.repr 168) ::\n                Init_int8 (Int.repr 145) :: Init_int8 (Int.repr 140) ::\n                Init_int8 (Int.repr 168) :: Init_int8 (Int.repr 91) ::\n                Init_int8 (Int.repr 175) :: Init_int8 (Int.repr 226) ::\n                Init_int8 (Int.repr 32) :: Init_int8 (Int.repr 22) ::\n                Init_int8 (Int.repr 208) :: Init_int8 (Int.repr 185) ::\n                Init_int8 (Int.repr 23) :: Init_int8 (Int.repr 228) ::\n                Init_int8 (Int.repr 221) :: Init_int8 (Int.repr 119) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_k2_bound := {|\n  gvar_info := (tarray tuchar 32);\n  gvar_init := (Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 0) :: Init_int8 (Int.repr 0) ::\n                Init_int8 (Int.repr 138) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 40) :: Init_int8 (Int.repr 123) ::\n                Init_int8 (Int.repr 212) :: Init_int8 (Int.repr 113) ::\n                Init_int8 (Int.repr 121) :: Init_int8 (Int.repr 251) ::\n                Init_int8 (Int.repr 43) :: Init_int8 (Int.repr 224) ::\n                Init_int8 (Int.repr 136) :: Init_int8 (Int.repr 70) ::\n                Init_int8 (Int.repr 206) :: Init_int8 (Int.repr 162) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 237) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_scalar_split_lambda_verify := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r1, (tptr (Tstruct __2843 noattr))) ::\n                (_r2, (tptr (Tstruct __2843 noattr))) ::\n                (_k, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_s, (Tstruct __2843 noattr)) :: (_buf1, (tarray tuchar 32)) ::\n              (_buf2, (tarray tuchar 32)) :: nil);\n  fn_temps := ((_t'7, tint) :: (_t'6, tint) :: (_t'5, tint) ::\n               (_t'4, tint) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tint) :: (_t'10, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'9, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'8, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_scalar_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2843 noattr))\n                                    (Tcons (tptr (Tstruct __2843 noattr))\n                                      (Tcons (tptr (Tstruct __2843 noattr))\n                                        Tnil))) tvoid cc_default))\n    ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n       (tptr (Tstruct __2843 noattr))) ::\n     (Eaddrof (Evar _secp256k1_const_lambda (Tstruct __2843 noattr))\n       (tptr (Tstruct __2843 noattr))) ::\n     (Etempvar _r2 (tptr (Tstruct __2843 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_scalar_add (Tfunction\n                                    (Tcons (tptr (Tstruct __2843 noattr))\n                                      (Tcons (tptr (Tstruct __2843 noattr))\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          Tnil))) tint cc_default))\n      ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _s (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Etempvar _r1 (tptr (Tstruct __2843 noattr))) :: nil))\n    (Ssequence\n      (Sloop\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_scalar_eq (Tfunction Tnil tint\n                                         {|cc_vararg:=None; cc_unproto:=true; cc_structret:=false|}))\n            ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) ::\n             (Etempvar _k (tptr (Tstruct __2843 noattr))) :: nil))\n          (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n            (Sloop\n              (Ssequence\n                (Ssequence\n                  (Sset _t'10\n                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                  (Scall None\n                    (Evar _fprintf (Tfunction\n                                     (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                       (Tcons (tptr tschar) Tnil)) tint\n                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                    ((Etempvar _t'10 (tptr (Tstruct __IO_FILE noattr))) ::\n                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                     (Evar ___stringlit_136 (tarray tschar 24)) ::\n                     (Econst_int (Int.repr 256) tint) ::\n                     (Evar ___stringlit_139 (tarray tschar 50)) :: nil)))\n                (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                  nil))\n              Sbreak)\n            Sskip))\n        Sbreak)\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_scalar_negate (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __2843 noattr))\n                                             (Tcons\n                                               (tptr (Tstruct __2843 noattr))\n                                               Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Etempvar _r1 (tptr (Tstruct __2843 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_scalar_get_b32 (Tfunction\n                                              (Tcons (tptr tuchar)\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  Tnil)) tvoid cc_default))\n            ((Evar _buf1 (tarray tuchar 32)) ::\n             (Etempvar _r1 (tptr (Tstruct __2843 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_scalar_get_b32 (Tfunction\n                                                (Tcons (tptr tuchar)\n                                                  (Tcons\n                                                    (tptr (Tstruct __2843 noattr))\n                                                    Tnil)) tvoid cc_default))\n              ((Evar _buf2 (tarray tuchar 32)) ::\n               (Eaddrof (Evar _s (Tstruct __2843 noattr))\n                 (tptr (Tstruct __2843 noattr))) :: nil))\n            (Ssequence\n              (Sloop\n                (Ssequence\n                  (Ssequence\n                    (Scall (Some _t'2)\n                      (Evar _secp256k1_memcmp_var (Tfunction\n                                                    (Tcons (tptr tvoid)\n                                                      (Tcons (tptr tvoid)\n                                                        (Tcons tulong Tnil)))\n                                                    tint cc_default))\n                      ((Evar _buf1 (tarray tuchar 32)) ::\n                       (Evar _k1_bound (tarray tuchar 32)) ::\n                       (Econst_int (Int.repr 32) tint) :: nil))\n                    (Sifthenelse (Ebinop Olt (Etempvar _t'2 tint)\n                                   (Econst_int (Int.repr 0) tint) tint)\n                      (Sset _t'3 (Econst_int (Int.repr 1) tint))\n                      (Ssequence\n                        (Scall (Some _t'4)\n                          (Evar _secp256k1_memcmp_var (Tfunction\n                                                        (Tcons (tptr tvoid)\n                                                          (Tcons (tptr tvoid)\n                                                            (Tcons tulong\n                                                              Tnil))) tint\n                                                        cc_default))\n                          ((Evar _buf2 (tarray tuchar 32)) ::\n                           (Evar _k1_bound (tarray tuchar 32)) ::\n                           (Econst_int (Int.repr 32) tint) :: nil))\n                        (Sset _t'3\n                          (Ecast\n                            (Ebinop Olt (Etempvar _t'4 tint)\n                              (Econst_int (Int.repr 0) tint) tint) tbool)))))\n                  (Sifthenelse (Eunop Onotbool (Etempvar _t'3 tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'9\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'9 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_136 (tarray tschar 24)) ::\n                             (Econst_int (Int.repr 261) tint) ::\n                             (Evar ___stringlit_140 (tarray tschar 116)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip))\n                Sbreak)\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_scalar_negate (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __2843 noattr))\n                                                     (Tcons\n                                                       (tptr (Tstruct __2843 noattr))\n                                                       Tnil)) tvoid\n                                                   cc_default))\n                  ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n                     (tptr (Tstruct __2843 noattr))) ::\n                   (Etempvar _r2 (tptr (Tstruct __2843 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_scalar_get_b32 (Tfunction\n                                                      (Tcons (tptr tuchar)\n                                                        (Tcons\n                                                          (tptr (Tstruct __2843 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                    ((Evar _buf1 (tarray tuchar 32)) ::\n                     (Etempvar _r2 (tptr (Tstruct __2843 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_scalar_get_b32 (Tfunction\n                                                        (Tcons (tptr tuchar)\n                                                          (Tcons\n                                                            (tptr (Tstruct __2843 noattr))\n                                                            Tnil)) tvoid\n                                                        cc_default))\n                      ((Evar _buf2 (tarray tuchar 32)) ::\n                       (Eaddrof (Evar _s (Tstruct __2843 noattr))\n                         (tptr (Tstruct __2843 noattr))) :: nil))\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Scall (Some _t'5)\n                            (Evar _secp256k1_memcmp_var (Tfunction\n                                                          (Tcons (tptr tvoid)\n                                                            (Tcons\n                                                              (tptr tvoid)\n                                                              (Tcons tulong\n                                                                Tnil))) tint\n                                                          cc_default))\n                            ((Evar _buf1 (tarray tuchar 32)) ::\n                             (Evar _k2_bound (tarray tuchar 32)) ::\n                             (Econst_int (Int.repr 32) tint) :: nil))\n                          (Sifthenelse (Ebinop Olt (Etempvar _t'5 tint)\n                                         (Econst_int (Int.repr 0) tint) tint)\n                            (Sset _t'6 (Econst_int (Int.repr 1) tint))\n                            (Ssequence\n                              (Scall (Some _t'7)\n                                (Evar _secp256k1_memcmp_var (Tfunction\n                                                              (Tcons\n                                                                (tptr tvoid)\n                                                                (Tcons\n                                                                  (tptr tvoid)\n                                                                  (Tcons\n                                                                    tulong\n                                                                    Tnil)))\n                                                              tint\n                                                              cc_default))\n                                ((Evar _buf2 (tarray tuchar 32)) ::\n                                 (Evar _k2_bound (tarray tuchar 32)) ::\n                                 (Econst_int (Int.repr 32) tint) :: nil))\n                              (Sset _t'6\n                                (Ecast\n                                  (Ebinop Olt (Etempvar _t'7 tint)\n                                    (Econst_int (Int.repr 0) tint) tint)\n                                  tbool)))))\n                        (Sifthenelse (Eunop Onotbool (Etempvar _t'6 tint)\n                                       tint)\n                          (Sloop\n                            (Ssequence\n                              (Ssequence\n                                (Sset _t'8\n                                  (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                (Scall None\n                                  (Evar _fprintf (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __IO_FILE noattr))\n                                                     (Tcons (tptr tschar)\n                                                       Tnil)) tint\n                                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                  ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                   (Evar ___stringlit_136 (tarray tschar 24)) ::\n                                   (Econst_int (Int.repr 266) tint) ::\n                                   (Evar ___stringlit_141 (tarray tschar 116)) ::\n                                   nil)))\n                              (Scall None\n                                (Evar _abort (Tfunction Tnil tvoid\n                                               cc_default)) nil))\n                            Sbreak)\n                          Sskip))\n                      Sbreak)))))))))))\n|}.\n\nDefinition f_secp256k1_ge_set_gej_zinv := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) ::\n                (_zi, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_zi2, (Tstruct __2380 noattr)) ::\n              (_zi3, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'3, (tptr (Tstruct __IO_FILE noattr))) :: (_t'2, tint) ::\n               (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n            (Tstruct __3156 noattr)) _infinity tint))\n      (Sifthenelse (Eunop Onotbool (Eunop Onotbool (Etempvar _t'2 tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_143 (tarray tschar 23)) ::\n                 (Econst_int (Int.repr 58) tint) ::\n                 (Evar ___stringlit_142 (tarray tschar 36)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_sqr (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _zi2 (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Etempvar _zi (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _zi3 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _zi2 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Etempvar _zi (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_mul (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil))) tvoid cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _zi2 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil))) tvoid cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof (Evar _zi3 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Sset _t'1\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                  (Tstruct __3156 noattr)) _infinity tint))\n            (Sassign\n              (Efield\n                (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                  (Tstruct __3154 noattr)) _infinity tint)\n              (Etempvar _t'1 tint))))))))\n|}.\n\nDefinition f_secp256k1_ge_set_xy := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_x, (tptr (Tstruct __2380 noattr))) ::\n                (_y, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n        (Tstruct __3154 noattr)) _infinity tint)\n    (Econst_int (Int.repr 0) tint))\n  (Ssequence\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n      (Ederef (Etempvar _x (tptr (Tstruct __2380 noattr)))\n        (Tstruct __2380 noattr)))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n      (Ederef (Etempvar _y (tptr (Tstruct __2380 noattr)))\n        (Tstruct __2380 noattr)))))\n|}.\n\nDefinition f_secp256k1_ge_is_infinity := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n        (Tstruct __3154 noattr)) _infinity tint))\n  (Sreturn (Some (Etempvar _t'1 tint))))\n|}.\n\nDefinition f_secp256k1_ge_neg := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_a, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n      (Tstruct __3154 noattr))\n    (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n      (Tstruct __3154 noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             Tnil) tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Scall None\n      (Evar _secp256k1_fe_negate (Tfunction\n                                   (Tcons (tptr (Tstruct __2380 noattr))\n                                     (Tcons (tptr (Tstruct __2380 noattr))\n                                       (Tcons tint Tnil))) tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: (Econst_int (Int.repr 1) tint) ::\n       nil))))\n|}.\n\nDefinition f_secp256k1_ge_set_gej_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := ((_z2, (Tstruct __2380 noattr)) ::\n              (_z3, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'1\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint))\n    (Sifthenelse (Etempvar _t'1 tint)\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_ge_set_infinity (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3154 noattr))\n                                               Tnil) tvoid cc_default))\n          ((Etempvar _r (tptr (Tstruct __3154 noattr))) :: nil))\n        (Sreturn None))\n      Sskip))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_inv_var (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_sqr (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _z2 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_mul (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil))) tvoid cc_default))\n          ((Eaddrof (Evar _z3 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _z2 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil))) tvoid cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof (Evar _z2 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_mul (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil))) tvoid cc_default))\n              ((Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                     (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                     (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof (Evar _z3 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_set_int (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons tint Tnil)) tvoid\n                                              cc_default))\n                ((Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                       (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Econst_int (Int.repr 1) tint) :: nil))\n              (Scall None\n                (Evar _secp256k1_ge_set_xy (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3154 noattr))\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil))) tvoid cc_default))\n                ((Etempvar _r (tptr (Tstruct __3154 noattr))) ::\n                 (Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                       (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                       (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil)))))))))\n|}.\n\nDefinition f_secp256k1_ge_table_set_globalz := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_len, tulong) :: (_a, (tptr (Tstruct __3154 noattr))) ::\n                (_zr, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_zs, (Tstruct __2380 noattr)) ::\n              (_tmpa, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_i, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _i\n    (Ebinop Osub (Etempvar _len tulong) (Econst_int (Int.repr 1) tint)\n      tulong))\n  (Sifthenelse (Ebinop Ogt (Etempvar _len tulong)\n                 (Econst_int (Int.repr 0) tint) tint)\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __2380 noattr))\n                                               Tnil) tvoid cc_default))\n        ((Eaddrof\n           (Efield\n             (Ederef\n               (Ebinop Oadd (Etempvar _a (tptr (Tstruct __3154 noattr)))\n                 (Etempvar _i tulong) (tptr (Tstruct __3154 noattr)))\n               (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Sassign (Evar _zs (Tstruct __2380 noattr))\n          (Ederef\n            (Ebinop Oadd (Etempvar _zr (tptr (Tstruct __2380 noattr)))\n              (Etempvar _i tulong) (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr)))\n        (Swhile\n          (Ebinop Ogt (Etempvar _i tulong) (Econst_int (Int.repr 0) tint)\n            tint)\n          (Ssequence\n            (Sifthenelse (Ebinop One (Etempvar _i tulong)\n                           (Ebinop Osub (Etempvar _len tulong)\n                             (Econst_int (Int.repr 1) tint) tulong) tint)\n              (Scall None\n                (Evar _secp256k1_fe_mul (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil))) tvoid cc_default))\n                ((Eaddrof (Evar _zs (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _zs (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Ebinop Oadd (Etempvar _zr (tptr (Tstruct __2380 noattr)))\n                   (Etempvar _i tulong) (tptr (Tstruct __2380 noattr))) ::\n                 nil))\n              Sskip)\n            (Ssequence\n              (Sset _i\n                (Ebinop Osub (Etempvar _i tulong)\n                  (Econst_int (Int.repr 1) tint) tulong))\n              (Ssequence\n                (Sassign\n                  (Efield (Evar _tmpa (Tstruct __3156 noattr)) _x\n                    (Tstruct __2380 noattr))\n                  (Efield\n                    (Ederef\n                      (Ebinop Oadd\n                        (Etempvar _a (tptr (Tstruct __3154 noattr)))\n                        (Etempvar _i tulong) (tptr (Tstruct __3154 noattr)))\n                      (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr)))\n                (Ssequence\n                  (Sassign\n                    (Efield (Evar _tmpa (Tstruct __3156 noattr)) _y\n                      (Tstruct __2380 noattr))\n                    (Efield\n                      (Ederef\n                        (Ebinop Oadd\n                          (Etempvar _a (tptr (Tstruct __3154 noattr)))\n                          (Etempvar _i tulong)\n                          (tptr (Tstruct __3154 noattr)))\n                        (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr)))\n                  (Ssequence\n                    (Sassign\n                      (Efield (Evar _tmpa (Tstruct __3156 noattr)) _infinity\n                        tint) (Econst_int (Int.repr 0) tint))\n                    (Scall None\n                      (Evar _secp256k1_ge_set_gej_zinv (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __3154 noattr))\n                                                           (Tcons\n                                                             (tptr (Tstruct __3156 noattr))\n                                                             (Tcons\n                                                               (tptr (Tstruct __2380 noattr))\n                                                               Tnil))) tvoid\n                                                         cc_default))\n                      ((Ebinop Oadd\n                         (Etempvar _a (tptr (Tstruct __3154 noattr)))\n                         (Etempvar _i tulong) (tptr (Tstruct __3154 noattr))) ::\n                       (Eaddrof (Evar _tmpa (Tstruct __3156 noattr))\n                         (tptr (Tstruct __3156 noattr))) ::\n                       (Eaddrof (Evar _zs (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) :: nil))))))))))\n    Sskip))\n|}.\n\nDefinition f_secp256k1_gej_set_infinity := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n        (Tstruct __3156 noattr)) _infinity tint)\n    (Econst_int (Int.repr 1) tint))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_clear (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil)\n                                  tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_clear (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil) tvoid cc_default))\n        ((Eaddrof\n           (Efield\n             (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Scall None\n        (Evar _secp256k1_fe_clear (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil) tvoid cc_default))\n        ((Eaddrof\n           (Efield\n             (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil)))))\n|}.\n\nDefinition f_secp256k1_ge_set_infinity := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n        (Tstruct __3154 noattr)) _infinity tint)\n    (Econst_int (Int.repr 1) tint))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_clear (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil)\n                                  tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Scall None\n      (Evar _secp256k1_fe_clear (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil)\n                                  tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))))\n|}.\n\nDefinition f_secp256k1_ge_set_xo_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_x, (tptr (Tstruct __2380 noattr))) :: (_odd, tint) :: nil);\n  fn_vars := ((_x2, (Tstruct __2380 noattr)) ::\n              (_x3, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n        (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n    (Ederef (Etempvar _x (tptr (Tstruct __2380 noattr)))\n      (Tstruct __2380 noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_sqr (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Etempvar _x (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Etempvar _x (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n              (Tstruct __3154 noattr)) _infinity tint)\n          (Econst_int (Int.repr 0) tint))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_add_int (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons tint Tnil)) tvoid\n                                          cc_default))\n            ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 7) tint) :: nil))\n          (Ssequence\n            (Ssequence\n              (Scall (Some _t'1)\n                (Evar _secp256k1_fe_sqrt_var (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil)) tint cc_default))\n                ((Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                       (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil))\n              (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                Sskip))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_normalize_var (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil) tvoid cc_default))\n                ((Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                       (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil))\n              (Ssequence\n                (Ssequence\n                  (Scall (Some _t'2)\n                    (Evar _secp256k1_fe_is_odd (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil) tint cc_default))\n                    ((Eaddrof\n                       (Efield\n                         (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                           (Tstruct __3154 noattr)) _y\n                         (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) :: nil))\n                  (Sifthenelse (Ebinop One (Etempvar _t'2 tint)\n                                 (Etempvar _odd tint) tint)\n                    (Scall None\n                      (Evar _secp256k1_fe_negate (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __2380 noattr))\n                                                     (Tcons\n                                                       (tptr (Tstruct __2380 noattr))\n                                                       (Tcons tint Tnil)))\n                                                   tvoid cc_default))\n                      ((Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                             (Tstruct __3154 noattr)) _y\n                           (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                             (Tstruct __3154 noattr)) _y\n                           (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Econst_int (Int.repr 1) tint) :: nil))\n                    Sskip))\n                (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))))))\n|}.\n\nDefinition f_secp256k1_gej_set_ge := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'2\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _infinity tint))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint) (Etempvar _t'2 tint)))\n  (Ssequence\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr)))\n    (Ssequence\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n            (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n            (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr)))\n      (Ssequence\n        (Sset _t'1\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _infinity tint))\n        (Scall None\n          (Evar _secp256k1_fe_set_int (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons tint Tnil)) tvoid\n                                        cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eunop Onotbool (Etempvar _t'1 tint) tint) :: nil))))))\n|}.\n\nDefinition f_secp256k1_gej_eq_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __3156 noattr))) ::\n                (_b, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := ((_tmp, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_gej_neg (Tfunction\n                               (Tcons (tptr (Tstruct __3156 noattr))\n                                 (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                               tvoid cc_default))\n    ((Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n       (tptr (Tstruct __3156 noattr))) ::\n     (Etempvar _a (tptr (Tstruct __3156 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_gej_add_var (Tfunction\n                                     (Tcons (tptr (Tstruct __3156 noattr))\n                                       (Tcons (tptr (Tstruct __3156 noattr))\n                                         (Tcons\n                                           (tptr (Tstruct __3156 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             Tnil)))) tvoid cc_default))\n      ((Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Etempvar _b (tptr (Tstruct __3156 noattr))) ::\n       (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _secp256k1_gej_is_infinity (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __3156 noattr))\n                                             Tnil) tint cc_default))\n        ((Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) :: nil))\n      (Sreturn (Some (Etempvar _t'1 tint))))))\n|}.\n\nDefinition f_secp256k1_gej_eq_ge_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __3156 noattr))) ::\n                (_b, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := ((_tmp, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_gej_neg (Tfunction\n                               (Tcons (tptr (Tstruct __3156 noattr))\n                                 (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                               tvoid cc_default))\n    ((Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n       (tptr (Tstruct __3156 noattr))) ::\n     (Etempvar _a (tptr (Tstruct __3156 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                        (Tcons (tptr (Tstruct __3156 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil)))) tvoid cc_default))\n      ((Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Etempvar _b (tptr (Tstruct __3154 noattr))) ::\n       (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _secp256k1_gej_is_infinity (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __3156 noattr))\n                                             Tnil) tint cc_default))\n        ((Eaddrof (Evar _tmp (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) :: nil))\n      (Sreturn (Some (Etempvar _t'1 tint))))))\n|}.\n\nDefinition f_secp256k1_gej_eq_x_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_x, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := ((_r, (Tstruct __2380 noattr)) ::\n              (_r2, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: (_t'3, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'2, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n            (Tstruct __3156 noattr)) _infinity tint))\n      (Sifthenelse (Eunop Onotbool (Eunop Onotbool (Etempvar _t'2 tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_143 (tarray tschar 23)) ::\n                 (Econst_int (Int.repr 249) tint) ::\n                 (Evar ___stringlit_142 (tarray tschar 36)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_sqr (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _r (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _r (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _r (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Etempvar _x (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Sassign (Evar _r2 (Tstruct __2380 noattr))\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr)))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil) tvoid cc_default))\n            ((Eaddrof (Evar _r2 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall (Some _t'1)\n              (Evar _secp256k1_fe_equal_var (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil)) tint cc_default))\n              ((Eaddrof (Evar _r (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof (Evar _r2 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Sreturn (Some (Etempvar _t'1 tint)))))))))\n|}.\n\nDefinition f_secp256k1_gej_neg := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'1\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint) (Etempvar _t'1 tint)))\n  (Ssequence\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr)))\n    (Ssequence\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n            (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n            (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr)))\n      (Ssequence\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr)))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil) tvoid cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Scall None\n            (Evar _secp256k1_fe_negate (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             (Tcons tint Tnil))) tvoid\n                                         cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 1) tint) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_gej_is_infinity := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n        (Tstruct __3156 noattr)) _infinity tint))\n  (Sreturn (Some (Etempvar _t'1 tint))))\n|}.\n\nDefinition f_secp256k1_ge_is_valid_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := ((_y2, (Tstruct __2380 noattr)) ::\n              (_x3, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: (_t'2, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'2\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _infinity tint))\n    (Sifthenelse (Etempvar _t'2 tint)\n      (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n      Sskip))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_sqr (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _y2 (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_sqr (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n               (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_mul (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil))) tvoid cc_default))\n          ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_add_int (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons tint Tnil)) tvoid\n                                          cc_default))\n            ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 7) tint) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __2380 noattr))\n                                                     Tnil) tvoid cc_default))\n              ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall (Some _t'1)\n                (Evar _secp256k1_fe_equal_var (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)) tint cc_default))\n                ((Eaddrof (Evar _y2 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil))\n              (Sreturn (Some (Etempvar _t'1 tint))))))))))\n|}.\n\nDefinition f_secp256k1_gej_double := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := ((_l, (Tstruct __2380 noattr)) ::\n              (_s, (Tstruct __2380 noattr)) ::\n              (_t, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'1\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint) (Etempvar _t'1 tint)))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_mul (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil))) tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_sqr (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _s (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_sqr (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _l (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_mul_int (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons tint Tnil)) tvoid\n                                          cc_default))\n            ((Eaddrof (Evar _l (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 3) tint) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_half (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           Tnil) tvoid cc_default))\n              ((Eaddrof (Evar _l (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_negate (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __2380 noattr))\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 (Tcons tint Tnil))) tvoid\n                                             cc_default))\n                ((Eaddrof (Evar _t (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _s (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Econst_int (Int.repr 1) tint) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_mul (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil))) tvoid cc_default))\n                  ((Eaddrof (Evar _t (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _t (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof\n                     (Efield\n                       (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                         (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_fe_sqr (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil)) tvoid cc_default))\n                    ((Eaddrof\n                       (Efield\n                         (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                           (Tstruct __3156 noattr)) _x\n                         (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof (Evar _l (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_fe_add (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)) tvoid cc_default))\n                      ((Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                             (Tstruct __3156 noattr)) _x\n                           (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof (Evar _t (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_fe_add (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil)) tvoid\n                                                  cc_default))\n                        ((Eaddrof\n                           (Efield\n                             (Ederef\n                               (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                               (Tstruct __3156 noattr)) _x\n                             (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _t (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) :: nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_fe_sqr (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil)) tvoid\n                                                    cc_default))\n                          ((Eaddrof (Evar _s (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) ::\n                           (Eaddrof (Evar _s (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) :: nil))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_fe_add (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                            ((Eaddrof (Evar _t (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Eaddrof\n                               (Efield\n                                 (Ederef\n                                   (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                   (Tstruct __3156 noattr)) _x\n                                 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) :: nil))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_fe_mul (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                              ((Eaddrof\n                                 (Efield\n                                   (Ederef\n                                     (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                     (Tstruct __3156 noattr)) _y\n                                   (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _t (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _l (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) :: nil))\n                            (Ssequence\n                              (Scall None\n                                (Evar _secp256k1_fe_add (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                                ((Eaddrof\n                                   (Efield\n                                     (Ederef\n                                       (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                       (Tstruct __3156 noattr)) _y\n                                     (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) ::\n                                 (Eaddrof (Evar _s (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) :: nil))\n                              (Scall None\n                                (Evar _secp256k1_fe_negate (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __2380 noattr))\n                                                               (Tcons\n                                                                 (tptr (Tstruct __2380 noattr))\n                                                                 (Tcons tint\n                                                                   Tnil)))\n                                                             tvoid\n                                                             cc_default))\n                                ((Eaddrof\n                                   (Efield\n                                     (Ederef\n                                       (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                       (Tstruct __3156 noattr)) _y\n                                     (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) ::\n                                 (Eaddrof\n                                   (Efield\n                                     (Ederef\n                                       (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                       (Tstruct __3156 noattr)) _y\n                                     (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) ::\n                                 (Econst_int (Int.repr 2) tint) :: nil)))))))))))))))))\n|}.\n\nDefinition f_secp256k1_gej_double_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) ::\n                (_rzr, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: (_t'2, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'2\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint))\n    (Sifthenelse (Etempvar _t'2 tint)\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_gej_set_infinity (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                Tnil) tvoid cc_default))\n          ((Etempvar _r (tptr (Tstruct __3156 noattr))) :: nil))\n        (Ssequence\n          (Sifthenelse (Ebinop One\n                         (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint)\n            (Scall None\n              (Evar _secp256k1_fe_set_int (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons tint Tnil)) tvoid\n                                            cc_default))\n              ((Etempvar _rzr (tptr (Tstruct __2380 noattr))) ::\n               (Econst_int (Int.repr 1) tint) :: nil))\n            Sskip)\n          (Sreturn None)))\n      Sskip))\n  (Ssequence\n    (Sifthenelse (Ebinop One (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                   (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) tint)\n      (Ssequence\n        (Sassign\n          (Ederef (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n            (Tstruct __2380 noattr))\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr)))\n        (Scall None\n          (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 Tnil) tvoid cc_default))\n          ((Etempvar _rzr (tptr (Tstruct __2380 noattr))) :: nil)))\n      Sskip)\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_gej_double (Tfunction\n                                      (Tcons (tptr (Tstruct __3156 noattr))\n                                        (Tcons (tptr (Tstruct __3156 noattr))\n                                          Tnil)) tvoid cc_default))\n        ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n         (Etempvar _a (tptr (Tstruct __3156 noattr))) :: nil))\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_fe_normalizes_to_zero_var (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __2380 noattr))\n                                                         Tnil) tint\n                                                       cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _infinity tint) (Etempvar _t'1 tint))))))\n|}.\n\nDefinition f_secp256k1_gej_add_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) ::\n                (_b, (tptr (Tstruct __3156 noattr))) ::\n                (_rzr, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_z22, (Tstruct __2380 noattr)) ::\n              (_z12, (Tstruct __2380 noattr)) ::\n              (_u1, (Tstruct __2380 noattr)) ::\n              (_u2, (Tstruct __2380 noattr)) ::\n              (_s1, (Tstruct __2380 noattr)) ::\n              (_s2, (Tstruct __2380 noattr)) ::\n              (_h, (Tstruct __2380 noattr)) ::\n              (_i, (Tstruct __2380 noattr)) ::\n              (_h2, (Tstruct __2380 noattr)) ::\n              (_h3, (Tstruct __2380 noattr)) ::\n              (_t, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) ::\n               (_t'5, (tptr (Tstruct __IO_FILE noattr))) :: (_t'4, tint) ::\n               (_t'3, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'4\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint))\n    (Sifthenelse (Etempvar _t'4 tint)\n      (Ssequence\n        (Sloop\n          (Sifthenelse (Eunop Onotbool\n                         (Ebinop Oeq\n                           (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                           (Ecast (Econst_int (Int.repr 0) tint)\n                             (tptr tvoid)) tint) tint)\n            (Sloop\n              (Ssequence\n                (Ssequence\n                  (Sset _t'5\n                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                  (Scall None\n                    (Evar _fprintf (Tfunction\n                                     (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                       (Tcons (tptr tschar) Tnil)) tint\n                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                    ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                     (Evar ___stringlit_143 (tarray tschar 23)) ::\n                     (Econst_int (Int.repr 346) tint) ::\n                     (Evar ___stringlit_144 (tarray tschar 35)) :: nil)))\n                (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                  nil))\n              Sbreak)\n            Sskip)\n          Sbreak)\n        (Ssequence\n          (Sassign\n            (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr))\n            (Ederef (Etempvar _b (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)))\n          (Sreturn None)))\n      Sskip))\n  (Ssequence\n    (Ssequence\n      (Sset _t'3\n        (Efield\n          (Ederef (Etempvar _b (tptr (Tstruct __3156 noattr)))\n            (Tstruct __3156 noattr)) _infinity tint))\n      (Sifthenelse (Etempvar _t'3 tint)\n        (Ssequence\n          (Sifthenelse (Ebinop One\n                         (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint)\n            (Scall None\n              (Evar _secp256k1_fe_set_int (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons tint Tnil)) tvoid\n                                            cc_default))\n              ((Etempvar _rzr (tptr (Tstruct __2380 noattr))) ::\n               (Econst_int (Int.repr 1) tint) :: nil))\n            Sskip)\n          (Ssequence\n            (Sassign\n              (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                (Tstruct __3156 noattr))\n              (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                (Tstruct __3156 noattr)))\n            (Sreturn None)))\n        Sskip))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_sqr (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _z22 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _b (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_sqr (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil))) tvoid cc_default))\n            ((Eaddrof (Evar _u1 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof (Evar _z22 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_mul (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil))) tvoid cc_default))\n              ((Eaddrof (Evar _u2 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _b (tptr (Tstruct __3156 noattr)))\n                     (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_mul (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil))) tvoid cc_default))\n                ((Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                       (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _z22 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_mul (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil))) tvoid cc_default))\n                  ((Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof\n                     (Efield\n                       (Ederef (Etempvar _b (tptr (Tstruct __3156 noattr)))\n                         (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_fe_mul (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil))) tvoid cc_default))\n                    ((Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof\n                       (Efield\n                         (Ederef (Etempvar _b (tptr (Tstruct __3156 noattr)))\n                           (Tstruct __3156 noattr)) _y\n                         (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_fe_mul (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil))) tvoid\n                                                cc_default))\n                      ((Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                             (Tstruct __3156 noattr)) _z\n                           (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_fe_negate (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __2380 noattr))\n                                                       (Tcons\n                                                         (tptr (Tstruct __2380 noattr))\n                                                         (Tcons tint Tnil)))\n                                                     tvoid cc_default))\n                        ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _u1 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Econst_int (Int.repr 1) tint) :: nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_fe_add (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil)) tvoid\n                                                    cc_default))\n                          ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) ::\n                           (Eaddrof (Evar _u2 (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) :: nil))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_fe_negate (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __2380 noattr))\n                                                           (Tcons\n                                                             (tptr (Tstruct __2380 noattr))\n                                                             (Tcons tint\n                                                               Tnil))) tvoid\n                                                         cc_default))\n                            ((Eaddrof (Evar _i (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Econst_int (Int.repr 1) tint) :: nil))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_fe_add (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            Tnil)) tvoid\n                                                        cc_default))\n                              ((Eaddrof (Evar _i (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) :: nil))\n                            (Ssequence\n                              (Ssequence\n                                (Scall (Some _t'2)\n                                  (Evar _secp256k1_fe_normalizes_to_zero_var \n                                  (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil) tint cc_default))\n                                  ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) :: nil))\n                                (Sifthenelse (Etempvar _t'2 tint)\n                                  (Ssequence\n                                    (Ssequence\n                                      (Scall (Some _t'1)\n                                        (Evar _secp256k1_fe_normalizes_to_zero_var \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil) tint cc_default))\n                                        ((Eaddrof\n                                           (Evar _i (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil))\n                                      (Sifthenelse (Etempvar _t'1 tint)\n                                        (Scall None\n                                          (Evar _secp256k1_gej_double_var \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil))) tvoid cc_default))\n                                          ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                           (Etempvar _a (tptr (Tstruct __3156 noattr))) ::\n                                           (Etempvar _rzr (tptr (Tstruct __2380 noattr))) ::\n                                           nil))\n                                        (Ssequence\n                                          (Sifthenelse (Ebinop One\n                                                         (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                                                         (Ecast\n                                                           (Econst_int (Int.repr 0) tint)\n                                                           (tptr tvoid))\n                                                         tint)\n                                            (Scall None\n                                              (Evar _secp256k1_fe_set_int \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons tint Tnil)) tvoid\n                                                cc_default))\n                                              ((Etempvar _rzr (tptr (Tstruct __2380 noattr))) ::\n                                               (Econst_int (Int.repr 0) tint) ::\n                                               nil))\n                                            Sskip)\n                                          (Scall None\n                                            (Evar _secp256k1_gej_set_infinity \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                Tnil) tvoid cc_default))\n                                            ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                             nil)))))\n                                    (Sreturn None))\n                                  Sskip))\n                              (Ssequence\n                                (Sassign\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                      (Tstruct __3156 noattr)) _infinity\n                                    tint) (Econst_int (Int.repr 0) tint))\n                                (Ssequence\n                                  (Scall None\n                                    (Evar _secp256k1_fe_mul (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                    ((Eaddrof\n                                       (Evar _t (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     (Eaddrof\n                                       (Evar _h (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     (Eaddrof\n                                       (Efield\n                                         (Ederef\n                                           (Etempvar _b (tptr (Tstruct __3156 noattr)))\n                                           (Tstruct __3156 noattr)) _z\n                                         (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     nil))\n                                  (Ssequence\n                                    (Sifthenelse (Ebinop One\n                                                   (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                                                   (Ecast\n                                                     (Econst_int (Int.repr 0) tint)\n                                                     (tptr tvoid)) tint)\n                                      (Sassign\n                                        (Ederef\n                                          (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                                          (Tstruct __2380 noattr))\n                                        (Evar _t (Tstruct __2380 noattr)))\n                                      Sskip)\n                                    (Ssequence\n                                      (Scall None\n                                        (Evar _secp256k1_fe_mul (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                  tvoid\n                                                                  cc_default))\n                                        ((Eaddrof\n                                           (Efield\n                                             (Ederef\n                                               (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                               (Tstruct __3156 noattr)) _z\n                                             (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         (Eaddrof\n                                           (Efield\n                                             (Ederef\n                                               (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                                               (Tstruct __3156 noattr)) _z\n                                             (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         (Eaddrof\n                                           (Evar _t (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil))\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_fe_sqr (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                          ((Eaddrof\n                                             (Evar _h2 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _h (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           nil))\n                                        (Ssequence\n                                          (Scall None\n                                            (Evar _secp256k1_fe_negate \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons tint Tnil))) tvoid\n                                              cc_default))\n                                            ((Eaddrof\n                                               (Evar _h2 (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             (Eaddrof\n                                               (Evar _h2 (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             (Econst_int (Int.repr 1) tint) ::\n                                             nil))\n                                          (Ssequence\n                                            (Scall None\n                                              (Evar _secp256k1_fe_mul \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil))) tvoid\n                                                cc_default))\n                                              ((Eaddrof\n                                                 (Evar _h3 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _h2 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _h (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               nil))\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_fe_mul \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil))) tvoid\n                                                  cc_default))\n                                                ((Eaddrof\n                                                   (Evar _t (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _u1 (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _h2 (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 nil))\n                                              (Ssequence\n                                                (Scall None\n                                                  (Evar _secp256k1_fe_sqr \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil)) tvoid\n                                                    cc_default))\n                                                  ((Eaddrof\n                                                     (Efield\n                                                       (Ederef\n                                                         (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                         (Tstruct __3156 noattr))\n                                                       _x\n                                                       (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   (Eaddrof\n                                                     (Evar _i (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   nil))\n                                                (Ssequence\n                                                  (Scall None\n                                                    (Evar _secp256k1_fe_add \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Efield\n                                                         (Ederef\n                                                           (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                           (Tstruct __3156 noattr))\n                                                         _x\n                                                         (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     (Eaddrof\n                                                       (Evar _h3 (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     nil))\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_fe_add \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            Tnil)) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Efield\n                                                           (Ederef\n                                                             (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                             (Tstruct __3156 noattr))\n                                                           _x\n                                                           (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       (Eaddrof\n                                                         (Evar _t (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Scall None\n                                                        (Evar _secp256k1_fe_add \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Efield\n                                                             (Ederef\n                                                               (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                               (Tstruct __3156 noattr))\n                                                             _x\n                                                             (Tstruct __2380 noattr))\n                                                           (tptr (Tstruct __2380 noattr))) ::\n                                                         (Eaddrof\n                                                           (Evar _t (Tstruct __2380 noattr))\n                                                           (tptr (Tstruct __2380 noattr))) ::\n                                                         nil))\n                                                      (Ssequence\n                                                        (Scall None\n                                                          (Evar _secp256k1_fe_add \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                                                          ((Eaddrof\n                                                             (Evar _t (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           (Eaddrof\n                                                             (Efield\n                                                               (Ederef\n                                                                 (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                                 (Tstruct __3156 noattr))\n                                                               _x\n                                                               (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           nil))\n                                                        (Ssequence\n                                                          (Scall None\n                                                            (Evar _secp256k1_fe_mul \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Efield\n                                                                 (Ederef\n                                                                   (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                                   (Tstruct __3156 noattr))\n                                                                 _y\n                                                                 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _t (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _i (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             nil))\n                                                          (Ssequence\n                                                            (Scall None\n                                                              (Evar _secp256k1_fe_mul \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                tvoid\n                                                                cc_default))\n                                                              ((Eaddrof\n                                                                 (Evar _h3 (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               (Eaddrof\n                                                                 (Evar _h3 (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               (Eaddrof\n                                                                 (Evar _s1 (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               nil))\n                                                            (Scall None\n                                                              (Evar _secp256k1_fe_add \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                tvoid\n                                                                cc_default))\n                                                              ((Eaddrof\n                                                                 (Efield\n                                                                   (Ederef\n                                                                    (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                                    (Tstruct __3156 noattr))\n                                                                   _y\n                                                                   (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               (Eaddrof\n                                                                 (Evar _h3 (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               nil))))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_gej_add_ge_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) ::\n                (_b, (tptr (Tstruct __3154 noattr))) ::\n                (_rzr, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_z12, (Tstruct __2380 noattr)) ::\n              (_u1, (Tstruct __2380 noattr)) ::\n              (_u2, (Tstruct __2380 noattr)) ::\n              (_s1, (Tstruct __2380 noattr)) ::\n              (_s2, (Tstruct __2380 noattr)) ::\n              (_h, (Tstruct __2380 noattr)) ::\n              (_i, (Tstruct __2380 noattr)) ::\n              (_h2, (Tstruct __2380 noattr)) ::\n              (_h3, (Tstruct __2380 noattr)) ::\n              (_t, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) ::\n               (_t'5, (tptr (Tstruct __IO_FILE noattr))) :: (_t'4, tint) ::\n               (_t'3, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'4\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint))\n    (Sifthenelse (Etempvar _t'4 tint)\n      (Ssequence\n        (Sloop\n          (Sifthenelse (Eunop Onotbool\n                         (Ebinop Oeq\n                           (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                           (Ecast (Econst_int (Int.repr 0) tint)\n                             (tptr tvoid)) tint) tint)\n            (Sloop\n              (Ssequence\n                (Ssequence\n                  (Sset _t'5\n                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                  (Scall None\n                    (Evar _fprintf (Tfunction\n                                     (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                       (Tcons (tptr tschar) Tnil)) tint\n                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                    ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                     (Evar ___stringlit_143 (tarray tschar 23)) ::\n                     (Econst_int (Int.repr 405) tint) ::\n                     (Evar ___stringlit_144 (tarray tschar 35)) :: nil)))\n                (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                  nil))\n              Sbreak)\n            Sskip)\n          Sbreak)\n        (Ssequence\n          (Sifthenelse (Ebinop One\n                         (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint)\n            (Scall None\n              (Evar _secp256k1_fe_clear (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil) tvoid cc_default))\n              ((Etempvar _rzr (tptr (Tstruct __2380 noattr))) :: nil))\n            Sskip)\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_gej_set_ge (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3154 noattr))\n                                                Tnil)) tvoid cc_default))\n              ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n               (Etempvar _b (tptr (Tstruct __3154 noattr))) :: nil))\n            (Sreturn None))))\n      Sskip))\n  (Ssequence\n    (Ssequence\n      (Sset _t'3\n        (Efield\n          (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n            (Tstruct __3154 noattr)) _infinity tint))\n      (Sifthenelse (Etempvar _t'3 tint)\n        (Ssequence\n          (Sifthenelse (Ebinop One\n                         (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint)\n            (Scall None\n              (Evar _secp256k1_fe_set_int (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons tint Tnil)) tvoid\n                                            cc_default))\n              ((Etempvar _rzr (tptr (Tstruct __2380 noattr))) ::\n               (Econst_int (Int.repr 1) tint) :: nil))\n            Sskip)\n          (Ssequence\n            (Sassign\n              (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                (Tstruct __3156 noattr))\n              (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                (Tstruct __3156 noattr)))\n            (Sreturn None)))\n        Sskip))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_sqr (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Sassign (Evar _u1 (Tstruct __2380 noattr))\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr)))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil) tvoid cc_default))\n            ((Eaddrof (Evar _u1 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_mul (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil))) tvoid cc_default))\n              ((Eaddrof (Evar _u2 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n                     (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Sassign (Evar _s1 (Tstruct __2380 noattr))\n                (Efield\n                  (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                    (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr)))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __2380 noattr))\n                                                         Tnil) tvoid\n                                                       cc_default))\n                  ((Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_fe_mul (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil))) tvoid cc_default))\n                    ((Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof\n                       (Efield\n                         (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n                           (Tstruct __3154 noattr)) _y\n                         (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_fe_mul (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil))) tvoid\n                                                cc_default))\n                      ((Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                             (Tstruct __3156 noattr)) _z\n                           (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_fe_negate (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __2380 noattr))\n                                                       (Tcons\n                                                         (tptr (Tstruct __2380 noattr))\n                                                         (Tcons tint Tnil)))\n                                                     tvoid cc_default))\n                        ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _u1 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Econst_int (Int.repr 1) tint) :: nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_fe_add (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil)) tvoid\n                                                    cc_default))\n                          ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) ::\n                           (Eaddrof (Evar _u2 (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) :: nil))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_fe_negate (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __2380 noattr))\n                                                           (Tcons\n                                                             (tptr (Tstruct __2380 noattr))\n                                                             (Tcons tint\n                                                               Tnil))) tvoid\n                                                         cc_default))\n                            ((Eaddrof (Evar _i (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Econst_int (Int.repr 1) tint) :: nil))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_fe_add (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            Tnil)) tvoid\n                                                        cc_default))\n                              ((Eaddrof (Evar _i (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) :: nil))\n                            (Ssequence\n                              (Ssequence\n                                (Scall (Some _t'2)\n                                  (Evar _secp256k1_fe_normalizes_to_zero_var \n                                  (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil) tint cc_default))\n                                  ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) :: nil))\n                                (Sifthenelse (Etempvar _t'2 tint)\n                                  (Ssequence\n                                    (Ssequence\n                                      (Scall (Some _t'1)\n                                        (Evar _secp256k1_fe_normalizes_to_zero_var \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil) tint cc_default))\n                                        ((Eaddrof\n                                           (Evar _i (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil))\n                                      (Sifthenelse (Etempvar _t'1 tint)\n                                        (Scall None\n                                          (Evar _secp256k1_gej_double_var \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil))) tvoid cc_default))\n                                          ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                           (Etempvar _a (tptr (Tstruct __3156 noattr))) ::\n                                           (Etempvar _rzr (tptr (Tstruct __2380 noattr))) ::\n                                           nil))\n                                        (Ssequence\n                                          (Sifthenelse (Ebinop One\n                                                         (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                                                         (Ecast\n                                                           (Econst_int (Int.repr 0) tint)\n                                                           (tptr tvoid))\n                                                         tint)\n                                            (Scall None\n                                              (Evar _secp256k1_fe_set_int \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons tint Tnil)) tvoid\n                                                cc_default))\n                                              ((Etempvar _rzr (tptr (Tstruct __2380 noattr))) ::\n                                               (Econst_int (Int.repr 0) tint) ::\n                                               nil))\n                                            Sskip)\n                                          (Scall None\n                                            (Evar _secp256k1_gej_set_infinity \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                Tnil) tvoid cc_default))\n                                            ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                             nil)))))\n                                    (Sreturn None))\n                                  Sskip))\n                              (Ssequence\n                                (Sassign\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                      (Tstruct __3156 noattr)) _infinity\n                                    tint) (Econst_int (Int.repr 0) tint))\n                                (Ssequence\n                                  (Sifthenelse (Ebinop One\n                                                 (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                                                 (Ecast\n                                                   (Econst_int (Int.repr 0) tint)\n                                                   (tptr tvoid)) tint)\n                                    (Sassign\n                                      (Ederef\n                                        (Etempvar _rzr (tptr (Tstruct __2380 noattr)))\n                                        (Tstruct __2380 noattr))\n                                      (Evar _h (Tstruct __2380 noattr)))\n                                    Sskip)\n                                  (Ssequence\n                                    (Scall None\n                                      (Evar _secp256k1_fe_mul (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                tvoid\n                                                                cc_default))\n                                      ((Eaddrof\n                                         (Efield\n                                           (Ederef\n                                             (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                             (Tstruct __3156 noattr)) _z\n                                           (Tstruct __2380 noattr))\n                                         (tptr (Tstruct __2380 noattr))) ::\n                                       (Eaddrof\n                                         (Efield\n                                           (Ederef\n                                             (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                                             (Tstruct __3156 noattr)) _z\n                                           (Tstruct __2380 noattr))\n                                         (tptr (Tstruct __2380 noattr))) ::\n                                       (Eaddrof\n                                         (Evar _h (Tstruct __2380 noattr))\n                                         (tptr (Tstruct __2380 noattr))) ::\n                                       nil))\n                                    (Ssequence\n                                      (Scall None\n                                        (Evar _secp256k1_fe_sqr (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                        ((Eaddrof\n                                           (Evar _h2 (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         (Eaddrof\n                                           (Evar _h (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil))\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_fe_negate \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons tint Tnil))) tvoid\n                                            cc_default))\n                                          ((Eaddrof\n                                             (Evar _h2 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _h2 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Econst_int (Int.repr 1) tint) ::\n                                           nil))\n                                        (Ssequence\n                                          (Scall None\n                                            (Evar _secp256k1_fe_mul (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                            ((Eaddrof\n                                               (Evar _h3 (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             (Eaddrof\n                                               (Evar _h2 (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             (Eaddrof\n                                               (Evar _h (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             nil))\n                                          (Ssequence\n                                            (Scall None\n                                              (Evar _secp256k1_fe_mul \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil))) tvoid\n                                                cc_default))\n                                              ((Eaddrof\n                                                 (Evar _t (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _u1 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _h2 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               nil))\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_fe_sqr \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil)) tvoid\n                                                  cc_default))\n                                                ((Eaddrof\n                                                   (Efield\n                                                     (Ederef\n                                                       (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                       (Tstruct __3156 noattr))\n                                                     _x\n                                                     (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _i (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 nil))\n                                              (Ssequence\n                                                (Scall None\n                                                  (Evar _secp256k1_fe_add \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil)) tvoid\n                                                    cc_default))\n                                                  ((Eaddrof\n                                                     (Efield\n                                                       (Ederef\n                                                         (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                         (Tstruct __3156 noattr))\n                                                       _x\n                                                       (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   (Eaddrof\n                                                     (Evar _h3 (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   nil))\n                                                (Ssequence\n                                                  (Scall None\n                                                    (Evar _secp256k1_fe_add \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Efield\n                                                         (Ederef\n                                                           (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                           (Tstruct __3156 noattr))\n                                                         _x\n                                                         (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     (Eaddrof\n                                                       (Evar _t (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     nil))\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_fe_add \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            Tnil)) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Efield\n                                                           (Ederef\n                                                             (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                             (Tstruct __3156 noattr))\n                                                           _x\n                                                           (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       (Eaddrof\n                                                         (Evar _t (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Scall None\n                                                        (Evar _secp256k1_fe_add \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _t (Tstruct __2380 noattr))\n                                                           (tptr (Tstruct __2380 noattr))) ::\n                                                         (Eaddrof\n                                                           (Efield\n                                                             (Ederef\n                                                               (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                               (Tstruct __3156 noattr))\n                                                             _x\n                                                             (Tstruct __2380 noattr))\n                                                           (tptr (Tstruct __2380 noattr))) ::\n                                                         nil))\n                                                      (Ssequence\n                                                        (Scall None\n                                                          (Evar _secp256k1_fe_mul \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                                          ((Eaddrof\n                                                             (Efield\n                                                               (Ederef\n                                                                 (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                                 (Tstruct __3156 noattr))\n                                                               _y\n                                                               (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           (Eaddrof\n                                                             (Evar _t (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           (Eaddrof\n                                                             (Evar _i (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           nil))\n                                                        (Ssequence\n                                                          (Scall None\n                                                            (Evar _secp256k1_fe_mul \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _h3 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _h3 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _s1 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             nil))\n                                                          (Scall None\n                                                            (Evar _secp256k1_fe_add \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Efield\n                                                                 (Ederef\n                                                                   (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                                   (Tstruct __3156 noattr))\n                                                                 _y\n                                                                 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _h3 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             nil)))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_gej_add_zinv_var := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) ::\n                (_b, (tptr (Tstruct __3154 noattr))) ::\n                (_bzinv, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_az, (Tstruct __2380 noattr)) ::\n              (_z12, (Tstruct __2380 noattr)) ::\n              (_u1, (Tstruct __2380 noattr)) ::\n              (_u2, (Tstruct __2380 noattr)) ::\n              (_s1, (Tstruct __2380 noattr)) ::\n              (_s2, (Tstruct __2380 noattr)) ::\n              (_h, (Tstruct __2380 noattr)) ::\n              (_i, (Tstruct __2380 noattr)) ::\n              (_h2, (Tstruct __2380 noattr)) ::\n              (_h3, (Tstruct __2380 noattr)) ::\n              (_t, (Tstruct __2380 noattr)) ::\n              (_bzinv2, (Tstruct __2380 noattr)) ::\n              (_bzinv3, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) :: (_t'6, tint) ::\n               (_t'5, tint) :: (_t'4, tint) :: (_t'3, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'4\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n          (Tstruct __3156 noattr)) _infinity tint))\n    (Sifthenelse (Etempvar _t'4 tint)\n      (Ssequence\n        (Ssequence\n          (Sset _t'6\n            (Efield\n              (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n                (Tstruct __3154 noattr)) _infinity tint))\n          (Sassign\n            (Efield\n              (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                (Tstruct __3156 noattr)) _infinity tint)\n            (Etempvar _t'6 tint)))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_sqr (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil)) tvoid cc_default))\n            ((Eaddrof (Evar _bzinv2 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Etempvar _bzinv (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_mul (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil))) tvoid cc_default))\n              ((Eaddrof (Evar _bzinv3 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof (Evar _bzinv2 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Etempvar _bzinv (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_mul (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil))) tvoid cc_default))\n                ((Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                       (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n                       (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _bzinv2 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_mul (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil))) tvoid cc_default))\n                  ((Eaddrof\n                     (Efield\n                       (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                         (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof\n                     (Efield\n                       (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n                         (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _bzinv3 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'5\n                      (Efield\n                        (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                          (Tstruct __3156 noattr)) _infinity tint))\n                    (Scall None\n                      (Evar _secp256k1_fe_set_int (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons tint Tnil))\n                                                    tvoid cc_default))\n                      ((Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                             (Tstruct __3156 noattr)) _z\n                           (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eunop Onotbool (Etempvar _t'5 tint) tint) :: nil)))\n                  (Sreturn None)))))))\n      Sskip))\n  (Ssequence\n    (Ssequence\n      (Sset _t'3\n        (Efield\n          (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n            (Tstruct __3154 noattr)) _infinity tint))\n      (Sifthenelse (Etempvar _t'3 tint)\n        (Ssequence\n          (Sassign\n            (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr))\n            (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)))\n          (Sreturn None))\n        Sskip))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _az (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Etempvar _bzinv (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_sqr (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _az (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Sassign (Evar _u1 (Tstruct __2380 noattr))\n            (Efield\n              (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr)))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __2380 noattr))\n                                                     Tnil) tvoid cc_default))\n              ((Eaddrof (Evar _u1 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_mul (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil))) tvoid cc_default))\n                ((Eaddrof (Evar _u2 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof\n                   (Efield\n                     (Ederef (Etempvar _b (tptr (Tstruct __3154 noattr)))\n                       (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil))\n              (Ssequence\n                (Sassign (Evar _s1 (Tstruct __2380 noattr))\n                  (Efield\n                    (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                      (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr)))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_fe_normalize_weak (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __2380 noattr))\n                                                           Tnil) tvoid\n                                                         cc_default))\n                    ((Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_fe_mul (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil))) tvoid\n                                                cc_default))\n                      ((Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof\n                         (Efield\n                           (Ederef\n                             (Etempvar _b (tptr (Tstruct __3154 noattr)))\n                             (Tstruct __3154 noattr)) _y\n                           (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof (Evar _z12 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_fe_mul (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil))) tvoid\n                                                  cc_default))\n                        ((Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _az (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) :: nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_fe_negate (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __2380 noattr))\n                                                         (Tcons\n                                                           (tptr (Tstruct __2380 noattr))\n                                                           (Tcons tint Tnil)))\n                                                       tvoid cc_default))\n                          ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) ::\n                           (Eaddrof (Evar _u1 (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) ::\n                           (Econst_int (Int.repr 1) tint) :: nil))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_fe_add (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                            ((Eaddrof (Evar _h (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Eaddrof (Evar _u2 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) :: nil))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_fe_negate (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __2380 noattr))\n                                                             (Tcons\n                                                               (tptr (Tstruct __2380 noattr))\n                                                               (Tcons tint\n                                                                 Tnil)))\n                                                           tvoid cc_default))\n                              ((Eaddrof (Evar _i (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _s2 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Econst_int (Int.repr 1) tint) :: nil))\n                            (Ssequence\n                              (Scall None\n                                (Evar _secp256k1_fe_add (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                                ((Eaddrof (Evar _i (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) ::\n                                 (Eaddrof (Evar _s1 (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) :: nil))\n                              (Ssequence\n                                (Ssequence\n                                  (Scall (Some _t'2)\n                                    (Evar _secp256k1_fe_normalizes_to_zero_var \n                                    (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil) tint cc_default))\n                                    ((Eaddrof\n                                       (Evar _h (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     nil))\n                                  (Sifthenelse (Etempvar _t'2 tint)\n                                    (Ssequence\n                                      (Ssequence\n                                        (Scall (Some _t'1)\n                                          (Evar _secp256k1_fe_normalizes_to_zero_var \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil) tint cc_default))\n                                          ((Eaddrof\n                                             (Evar _i (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           nil))\n                                        (Sifthenelse (Etempvar _t'1 tint)\n                                          (Scall None\n                                            (Evar _secp256k1_gej_double_var \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __3156 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil))) tvoid cc_default))\n                                            ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                             (Etempvar _a (tptr (Tstruct __3156 noattr))) ::\n                                             (Ecast\n                                               (Econst_int (Int.repr 0) tint)\n                                               (tptr tvoid)) :: nil))\n                                          (Scall None\n                                            (Evar _secp256k1_gej_set_infinity \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                Tnil) tvoid cc_default))\n                                            ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                             nil))))\n                                      (Sreturn None))\n                                    Sskip))\n                                (Ssequence\n                                  (Sassign\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                        (Tstruct __3156 noattr)) _infinity\n                                      tint) (Econst_int (Int.repr 0) tint))\n                                  (Ssequence\n                                    (Scall None\n                                      (Evar _secp256k1_fe_mul (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                tvoid\n                                                                cc_default))\n                                      ((Eaddrof\n                                         (Efield\n                                           (Ederef\n                                             (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                             (Tstruct __3156 noattr)) _z\n                                           (Tstruct __2380 noattr))\n                                         (tptr (Tstruct __2380 noattr))) ::\n                                       (Eaddrof\n                                         (Efield\n                                           (Ederef\n                                             (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                                             (Tstruct __3156 noattr)) _z\n                                           (Tstruct __2380 noattr))\n                                         (tptr (Tstruct __2380 noattr))) ::\n                                       (Eaddrof\n                                         (Evar _h (Tstruct __2380 noattr))\n                                         (tptr (Tstruct __2380 noattr))) ::\n                                       nil))\n                                    (Ssequence\n                                      (Scall None\n                                        (Evar _secp256k1_fe_sqr (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                        ((Eaddrof\n                                           (Evar _h2 (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         (Eaddrof\n                                           (Evar _h (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil))\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_fe_negate \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons tint Tnil))) tvoid\n                                            cc_default))\n                                          ((Eaddrof\n                                             (Evar _h2 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _h2 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Econst_int (Int.repr 1) tint) ::\n                                           nil))\n                                        (Ssequence\n                                          (Scall None\n                                            (Evar _secp256k1_fe_mul (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                            ((Eaddrof\n                                               (Evar _h3 (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             (Eaddrof\n                                               (Evar _h2 (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             (Eaddrof\n                                               (Evar _h (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             nil))\n                                          (Ssequence\n                                            (Scall None\n                                              (Evar _secp256k1_fe_mul \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil))) tvoid\n                                                cc_default))\n                                              ((Eaddrof\n                                                 (Evar _t (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _u1 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _h2 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               nil))\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_fe_sqr \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil)) tvoid\n                                                  cc_default))\n                                                ((Eaddrof\n                                                   (Efield\n                                                     (Ederef\n                                                       (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                       (Tstruct __3156 noattr))\n                                                     _x\n                                                     (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _i (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 nil))\n                                              (Ssequence\n                                                (Scall None\n                                                  (Evar _secp256k1_fe_add \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil)) tvoid\n                                                    cc_default))\n                                                  ((Eaddrof\n                                                     (Efield\n                                                       (Ederef\n                                                         (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                         (Tstruct __3156 noattr))\n                                                       _x\n                                                       (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   (Eaddrof\n                                                     (Evar _h3 (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   nil))\n                                                (Ssequence\n                                                  (Scall None\n                                                    (Evar _secp256k1_fe_add \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Efield\n                                                         (Ederef\n                                                           (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                           (Tstruct __3156 noattr))\n                                                         _x\n                                                         (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     (Eaddrof\n                                                       (Evar _t (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     nil))\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_fe_add \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            Tnil)) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Efield\n                                                           (Ederef\n                                                             (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                             (Tstruct __3156 noattr))\n                                                           _x\n                                                           (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       (Eaddrof\n                                                         (Evar _t (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Scall None\n                                                        (Evar _secp256k1_fe_add \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _t (Tstruct __2380 noattr))\n                                                           (tptr (Tstruct __2380 noattr))) ::\n                                                         (Eaddrof\n                                                           (Efield\n                                                             (Ederef\n                                                               (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                               (Tstruct __3156 noattr))\n                                                             _x\n                                                             (Tstruct __2380 noattr))\n                                                           (tptr (Tstruct __2380 noattr))) ::\n                                                         nil))\n                                                      (Ssequence\n                                                        (Scall None\n                                                          (Evar _secp256k1_fe_mul \n                                                          (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                                          ((Eaddrof\n                                                             (Efield\n                                                               (Ederef\n                                                                 (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                                 (Tstruct __3156 noattr))\n                                                               _y\n                                                               (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           (Eaddrof\n                                                             (Evar _t (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           (Eaddrof\n                                                             (Evar _i (Tstruct __2380 noattr))\n                                                             (tptr (Tstruct __2380 noattr))) ::\n                                                           nil))\n                                                        (Ssequence\n                                                          (Scall None\n                                                            (Evar _secp256k1_fe_mul \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _h3 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _h3 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _s1 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             nil))\n                                                          (Scall None\n                                                            (Evar _secp256k1_fe_add \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil))\n                                                              tvoid\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Efield\n                                                                 (Ederef\n                                                                   (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                                                   (Tstruct __3156 noattr))\n                                                                 _y\n                                                                 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _h3 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             nil)))))))))))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_gej_rescale := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_s, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_zz, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _secp256k1_fe_is_zero (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil) tint cc_default))\n        ((Etempvar _s (tptr (Tstruct __2380 noattr))) :: nil))\n      (Sifthenelse (Eunop Onotbool (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_143 (tarray tschar 23)) ::\n                 (Econst_int (Int.repr 663) tint) ::\n                 (Evar ___stringlit_145 (tarray tschar 48)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_sqr (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _zz (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Etempvar _s (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof\n           (Efield\n             (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _zz (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_mul (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil))) tvoid cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _zz (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil))) tvoid cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Etempvar _s (tptr (Tstruct __2380 noattr))) :: nil))\n          (Scall None\n            (Evar _secp256k1_fe_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil))) tvoid cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Etempvar _s (tptr (Tstruct __2380 noattr))) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_ge_to_storage := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3158 noattr))) ::\n                (_a, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := ((_x, (Tstruct __2380 noattr)) ::\n              (_y, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'2, (tptr (Tstruct __IO_FILE noattr))) :: (_t'1, tint) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'1\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n            (Tstruct __3154 noattr)) _infinity tint))\n      (Sifthenelse (Eunop Onotbool (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_143 (tarray tschar 23)) ::\n                 (Econst_int (Int.repr 673) tint) ::\n                 (Evar ___stringlit_142 (tarray tschar 36)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Sassign (Evar _x (Tstruct __2380 noattr))\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr)))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_normalize_var (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil) tvoid cc_default))\n        ((Eaddrof (Evar _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Sassign (Evar _y (Tstruct __2380 noattr))\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct __3154 noattr)))\n              (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr)))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_normalize_var (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil) tvoid cc_default))\n            ((Eaddrof (Evar _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_to_storage (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __2382 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil)) tvoid cc_default))\n              ((Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _r (tptr (Tstruct __3158 noattr)))\n                     (Tstruct __3158 noattr)) _x (Tstruct __2382 noattr))\n                 (tptr (Tstruct __2382 noattr))) ::\n               (Eaddrof (Evar _x (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Scall None\n              (Evar _secp256k1_fe_to_storage (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __2382 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil)) tvoid cc_default))\n              ((Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _r (tptr (Tstruct __3158 noattr)))\n                     (Tstruct __3158 noattr)) _y (Tstruct __2382 noattr))\n                 (tptr (Tstruct __2382 noattr))) ::\n               (Eaddrof (Evar _y (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))))))))\n|}.\n\nDefinition f_secp256k1_ge_from_storage := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_a, (tptr (Tstruct __3158 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_fe_from_storage (Tfunction\n                                       (Tcons (tptr (Tstruct __2380 noattr))\n                                         (Tcons\n                                           (tptr (Tstruct __2382 noattr))\n                                           Tnil)) tvoid cc_default))\n    ((Eaddrof\n       (Efield\n         (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n           (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) ::\n     (Eaddrof\n       (Efield\n         (Ederef (Etempvar _a (tptr (Tstruct __3158 noattr)))\n           (Tstruct __3158 noattr)) _x (Tstruct __2382 noattr))\n       (tptr (Tstruct __2382 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_from_storage (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2382 noattr))\n                                             Tnil)) tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3158 noattr)))\n             (Tstruct __3158 noattr)) _y (Tstruct __2382 noattr))\n         (tptr (Tstruct __2382 noattr))) :: nil))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _infinity tint)\n      (Econst_int (Int.repr 0) tint))))\n|}.\n\nDefinition f_secp256k1_ge_is_in_correct_subgroup := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_ge, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Sreturn (Some (Econst_int (Int.repr 1) tint)))\n|}.\n\nDefinition v_secp256k1_pre_g := {|\n  gvar_info := (tarray (Tstruct __3158 noattr) 8192);\n  gvar_init := (Init_space 524288 :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_secp256k1_pre_g_128 := {|\n  gvar_info := (tarray (Tstruct __3158 noattr) 8192);\n  gvar_init := (Init_space 524288 :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_ecmult_odd_multiples_table := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_n, tint) :: (_pre_a, (tptr (Tstruct __3154 noattr))) ::\n                (_zr, (tptr (Tstruct __2380 noattr))) ::\n                (_z, (tptr (Tstruct __2380 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := ((_d, (Tstruct __3156 noattr)) ::\n              (_ai, (Tstruct __3156 noattr)) ::\n              (_d_ge, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_i, tint) :: (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'1\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n            (Tstruct __3156 noattr)) _infinity tint))\n      (Sifthenelse (Eunop Onotbool (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_146 (tarray tschar 24)) ::\n                 (Econst_int (Int.repr 78) tint) ::\n                 (Evar ___stringlit_142 (tarray tschar 36)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_gej_double_var (Tfunction\n                                        (Tcons (tptr (Tstruct __3156 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil))) tvoid cc_default))\n      ((Eaddrof (Evar _d (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Etempvar _a (tptr (Tstruct __3156 noattr))) ::\n       (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_ge_set_xy (Tfunction\n                                     (Tcons (tptr (Tstruct __3154 noattr))\n                                       (Tcons (tptr (Tstruct __2380 noattr))\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _d_ge (Tstruct __3154 noattr))\n           (tptr (Tstruct __3154 noattr))) ::\n         (Eaddrof\n           (Efield (Evar _d (Tstruct __3156 noattr)) _x\n             (Tstruct __2380 noattr)) (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield (Evar _d (Tstruct __3156 noattr)) _y\n             (Tstruct __2380 noattr)) (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_ge_set_gej_zinv (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3154 noattr))\n                                               (Tcons\n                                                 (tptr (Tstruct __3156 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   Tnil))) tvoid cc_default))\n          ((Ebinop Oadd (Etempvar _pre_a (tptr (Tstruct __3154 noattr)))\n             (Econst_int (Int.repr 0) tint) (tptr (Tstruct __3154 noattr))) ::\n           (Etempvar _a (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof\n             (Efield (Evar _d (Tstruct __3156 noattr)) _z\n               (Tstruct __2380 noattr)) (tptr (Tstruct __2380 noattr))) ::\n           nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_gej_set_ge (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              Tnil)) tvoid cc_default))\n            ((Eaddrof (Evar _ai (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) ::\n             (Ebinop Oadd (Etempvar _pre_a (tptr (Tstruct __3154 noattr)))\n               (Econst_int (Int.repr 0) tint) (tptr (Tstruct __3154 noattr))) ::\n             nil))\n          (Ssequence\n            (Sassign\n              (Efield (Evar _ai (Tstruct __3156 noattr)) _z\n                (Tstruct __2380 noattr))\n              (Efield\n                (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                  (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr)))\n            (Ssequence\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _zr (tptr (Tstruct __2380 noattr)))\n                    (Econst_int (Int.repr 0) tint)\n                    (tptr (Tstruct __2380 noattr))) (Tstruct __2380 noattr))\n                (Efield (Evar _d (Tstruct __3156 noattr)) _z\n                  (Tstruct __2380 noattr)))\n              (Ssequence\n                (Ssequence\n                  (Sset _i (Econst_int (Int.repr 1) tint))\n                  (Sloop\n                    (Ssequence\n                      (Sifthenelse (Ebinop Olt (Etempvar _i tint)\n                                     (Etempvar _n tint) tint)\n                        Sskip\n                        Sbreak)\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __3156 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __3156 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __3154 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))))\n                                                            tvoid cc_default))\n                          ((Eaddrof (Evar _ai (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _ai (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _d_ge (Tstruct __3154 noattr))\n                             (tptr (Tstruct __3154 noattr))) ::\n                           (Ebinop Oadd\n                             (Etempvar _zr (tptr (Tstruct __2380 noattr)))\n                             (Etempvar _i tint)\n                             (tptr (Tstruct __2380 noattr))) :: nil))\n                        (Scall None\n                          (Evar _secp256k1_ge_set_xy (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __3154 noattr))\n                                                         (Tcons\n                                                           (tptr (Tstruct __2380 noattr))\n                                                           (Tcons\n                                                             (tptr (Tstruct __2380 noattr))\n                                                             Tnil))) tvoid\n                                                       cc_default))\n                          ((Ebinop Oadd\n                             (Etempvar _pre_a (tptr (Tstruct __3154 noattr)))\n                             (Etempvar _i tint)\n                             (tptr (Tstruct __3154 noattr))) ::\n                           (Eaddrof\n                             (Efield (Evar _ai (Tstruct __3156 noattr)) _x\n                               (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) ::\n                           (Eaddrof\n                             (Efield (Evar _ai (Tstruct __3156 noattr)) _y\n                               (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) :: nil))))\n                    (Sset _i\n                      (Ebinop Oadd (Etempvar _i tint)\n                        (Econst_int (Int.repr 1) tint) tint))))\n                (Scall None\n                  (Evar _secp256k1_fe_mul (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil))) tvoid cc_default))\n                  ((Etempvar _z (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof\n                     (Efield (Evar _ai (Tstruct __3156 noattr)) _z\n                       (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof\n                     (Efield (Evar _d (Tstruct __3156 noattr)) _z\n                       (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))))))))))\n|}.\n\nDefinition f_secp256k1_ecmult_table_get_ge := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_pre, (tptr (Tstruct __3154 noattr))) :: (_n, tint) ::\n                (_w, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'3, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Oeq\n                     (Ebinop Oand (Etempvar _n tint)\n                       (Econst_int (Int.repr 1) tint) tint)\n                     (Econst_int (Int.repr 1) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_146 (tarray tschar 24)) ::\n               (Econst_int (Int.repr 123) tint) ::\n               (Evar ___stringlit_147 (tarray tschar 38)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Oge (Etempvar _n tint)\n                       (Eunop Oneg\n                         (Ebinop Osub\n                           (Ebinop Oshl (Econst_int (Int.repr 1) tint)\n                             (Ebinop Osub (Etempvar _w tint)\n                               (Econst_int (Int.repr 1) tint) tint) tint)\n                           (Econst_int (Int.repr 1) tint) tint) tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_146 (tarray tschar 24)) ::\n                 (Econst_int (Int.repr 123) tint) ::\n                 (Evar ___stringlit_148 (tarray tschar 52)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop Ole (Etempvar _n tint)\n                         (Ebinop Osub\n                           (Ebinop Oshl (Econst_int (Int.repr 1) tint)\n                             (Ebinop Osub (Etempvar _w tint)\n                               (Econst_int (Int.repr 1) tint) tint) tint)\n                           (Econst_int (Int.repr 1) tint) tint) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'1 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_146 (tarray tschar 24)) ::\n                   (Econst_int (Int.repr 123) tint) ::\n                   (Evar ___stringlit_149 (tarray tschar 51)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip)\n        Sbreak)\n      (Sifthenelse (Ebinop Ogt (Etempvar _n tint)\n                     (Econst_int (Int.repr 0) tint) tint)\n        (Sassign\n          (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n            (Tstruct __3154 noattr))\n          (Ederef\n            (Ebinop Oadd (Etempvar _pre (tptr (Tstruct __3154 noattr)))\n              (Ebinop Odiv\n                (Ebinop Osub (Etempvar _n tint)\n                  (Econst_int (Int.repr 1) tint) tint)\n                (Econst_int (Int.repr 2) tint) tint)\n              (tptr (Tstruct __3154 noattr))) (Tstruct __3154 noattr)))\n        (Ssequence\n          (Sassign\n            (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n              (Tstruct __3154 noattr))\n            (Ederef\n              (Ebinop Oadd (Etempvar _pre (tptr (Tstruct __3154 noattr)))\n                (Ebinop Odiv\n                  (Ebinop Osub (Eunop Oneg (Etempvar _n tint) tint)\n                    (Econst_int (Int.repr 1) tint) tint)\n                  (Econst_int (Int.repr 2) tint) tint)\n                (tptr (Tstruct __3154 noattr))) (Tstruct __3154 noattr)))\n          (Scall None\n            (Evar _secp256k1_fe_negate (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             (Tcons tint Tnil))) tvoid\n                                         cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 1) tint) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_ecmult_table_get_ge_lambda := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_pre, (tptr (Tstruct __3154 noattr))) ::\n                (_x, (tptr (Tstruct __2380 noattr))) :: (_n, tint) ::\n                (_w, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'3, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Oeq\n                     (Ebinop Oand (Etempvar _n tint)\n                       (Econst_int (Int.repr 1) tint) tint)\n                     (Econst_int (Int.repr 1) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_146 (tarray tschar 24)) ::\n               (Econst_int (Int.repr 133) tint) ::\n               (Evar ___stringlit_147 (tarray tschar 38)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Oge (Etempvar _n tint)\n                       (Eunop Oneg\n                         (Ebinop Osub\n                           (Ebinop Oshl (Econst_int (Int.repr 1) tint)\n                             (Ebinop Osub (Etempvar _w tint)\n                               (Econst_int (Int.repr 1) tint) tint) tint)\n                           (Econst_int (Int.repr 1) tint) tint) tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_146 (tarray tschar 24)) ::\n                 (Econst_int (Int.repr 133) tint) ::\n                 (Evar ___stringlit_148 (tarray tschar 52)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop Ole (Etempvar _n tint)\n                         (Ebinop Osub\n                           (Ebinop Oshl (Econst_int (Int.repr 1) tint)\n                             (Ebinop Osub (Etempvar _w tint)\n                               (Econst_int (Int.repr 1) tint) tint) tint)\n                           (Econst_int (Int.repr 1) tint) tint) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'1 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_146 (tarray tschar 24)) ::\n                   (Econst_int (Int.repr 133) tint) ::\n                   (Evar ___stringlit_149 (tarray tschar 51)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip)\n        Sbreak)\n      (Sifthenelse (Ebinop Ogt (Etempvar _n tint)\n                     (Econst_int (Int.repr 0) tint) tint)\n        (Scall None\n          (Evar _secp256k1_ge_set_xy (Tfunction\n                                       (Tcons (tptr (Tstruct __3154 noattr))\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             Tnil))) tvoid cc_default))\n          ((Etempvar _r (tptr (Tstruct __3154 noattr))) ::\n           (Ebinop Oadd (Etempvar _x (tptr (Tstruct __2380 noattr)))\n             (Ebinop Odiv\n               (Ebinop Osub (Etempvar _n tint) (Econst_int (Int.repr 1) tint)\n                 tint) (Econst_int (Int.repr 2) tint) tint)\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef\n                 (Ebinop Oadd (Etempvar _pre (tptr (Tstruct __3154 noattr)))\n                   (Ebinop Odiv\n                     (Ebinop Osub (Etempvar _n tint)\n                       (Econst_int (Int.repr 1) tint) tint)\n                     (Econst_int (Int.repr 2) tint) tint)\n                   (tptr (Tstruct __3154 noattr))) (Tstruct __3154 noattr))\n               _y (Tstruct __2380 noattr)) (tptr (Tstruct __2380 noattr))) ::\n           nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_ge_set_xy (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __3154 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             (Tcons\n                                               (tptr (Tstruct __2380 noattr))\n                                               Tnil))) tvoid cc_default))\n            ((Etempvar _r (tptr (Tstruct __3154 noattr))) ::\n             (Ebinop Oadd (Etempvar _x (tptr (Tstruct __2380 noattr)))\n               (Ebinop Odiv\n                 (Ebinop Osub (Eunop Oneg (Etempvar _n tint) tint)\n                   (Econst_int (Int.repr 1) tint) tint)\n                 (Econst_int (Int.repr 2) tint) tint)\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef\n                   (Ebinop Oadd\n                     (Etempvar _pre (tptr (Tstruct __3154 noattr)))\n                     (Ebinop Odiv\n                       (Ebinop Osub (Eunop Oneg (Etempvar _n tint) tint)\n                         (Econst_int (Int.repr 1) tint) tint)\n                       (Econst_int (Int.repr 2) tint) tint)\n                     (tptr (Tstruct __3154 noattr))) (Tstruct __3154 noattr))\n                 _y (Tstruct __2380 noattr)) (tptr (Tstruct __2380 noattr))) ::\n             nil))\n          (Scall None\n            (Evar _secp256k1_fe_negate (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             (Tcons tint Tnil))) tvoid\n                                         cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 1) tint) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_ecmult_table_get_ge_storage := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_pre, (tptr (Tstruct __3158 noattr))) :: (_n, tint) ::\n                (_w, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'3, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'1, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Oeq\n                     (Ebinop Oand (Etempvar _n tint)\n                       (Econst_int (Int.repr 1) tint) tint)\n                     (Econst_int (Int.repr 1) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_146 (tarray tschar 24)) ::\n               (Econst_int (Int.repr 143) tint) ::\n               (Evar ___stringlit_147 (tarray tschar 38)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop Oge (Etempvar _n tint)\n                       (Eunop Oneg\n                         (Ebinop Osub\n                           (Ebinop Oshl (Econst_int (Int.repr 1) tint)\n                             (Ebinop Osub (Etempvar _w tint)\n                               (Econst_int (Int.repr 1) tint) tint) tint)\n                           (Econst_int (Int.repr 1) tint) tint) tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_146 (tarray tschar 24)) ::\n                 (Econst_int (Int.repr 143) tint) ::\n                 (Evar ___stringlit_148 (tarray tschar 52)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop Ole (Etempvar _n tint)\n                         (Ebinop Osub\n                           (Ebinop Oshl (Econst_int (Int.repr 1) tint)\n                             (Ebinop Osub (Etempvar _w tint)\n                               (Econst_int (Int.repr 1) tint) tint) tint)\n                           (Econst_int (Int.repr 1) tint) tint) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'1 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'1 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_146 (tarray tschar 24)) ::\n                   (Econst_int (Int.repr 143) tint) ::\n                   (Evar ___stringlit_149 (tarray tschar 51)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip)\n        Sbreak)\n      (Sifthenelse (Ebinop Ogt (Etempvar _n tint)\n                     (Econst_int (Int.repr 0) tint) tint)\n        (Scall None\n          (Evar _secp256k1_ge_from_storage (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3154 noattr))\n                                               (Tcons\n                                                 (tptr (Tstruct __3158 noattr))\n                                                 Tnil)) tvoid cc_default))\n          ((Etempvar _r (tptr (Tstruct __3154 noattr))) ::\n           (Ebinop Oadd (Etempvar _pre (tptr (Tstruct __3158 noattr)))\n             (Ebinop Odiv\n               (Ebinop Osub (Etempvar _n tint) (Econst_int (Int.repr 1) tint)\n                 tint) (Econst_int (Int.repr 2) tint) tint)\n             (tptr (Tstruct __3158 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_ge_from_storage (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __3154 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __3158 noattr))\n                                                   Tnil)) tvoid cc_default))\n            ((Etempvar _r (tptr (Tstruct __3154 noattr))) ::\n             (Ebinop Oadd (Etempvar _pre (tptr (Tstruct __3158 noattr)))\n               (Ebinop Odiv\n                 (Ebinop Osub (Eunop Oneg (Etempvar _n tint) tint)\n                   (Econst_int (Int.repr 1) tint) tint)\n                 (Econst_int (Int.repr 2) tint) tint)\n               (tptr (Tstruct __3158 noattr))) :: nil))\n          (Scall None\n            (Evar _secp256k1_fe_negate (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             (Tcons tint Tnil))) tvoid\n                                         cc_default))\n            ((Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 1) tint) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_ecmult_wnaf := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_wnaf, (tptr tint)) :: (_len, tint) ::\n                (_a, (tptr (Tstruct __2843 noattr))) :: (_w, tint) :: nil);\n  fn_vars := ((_s, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := ((_last_set_bit, tint) :: (_bit, tint) :: (_sign, tint) ::\n               (_carry, tint) :: (_now, tint) :: (_word, tint) ::\n               (_verify_bit, tint) :: (_t'6, tuint) :: (_t'5, tuint) ::\n               (_t'4, tuint) :: (_t'3, tuint) :: (_t'2, tint) ::\n               (_t'1, tint) :: (_t'12, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'11, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'10, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'9, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'7, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _last_set_bit (Eunop Oneg (Econst_int (Int.repr 1) tint) tint))\n  (Ssequence\n    (Sset _bit (Econst_int (Int.repr 0) tint))\n    (Ssequence\n      (Sset _sign (Econst_int (Int.repr 1) tint))\n      (Ssequence\n        (Sset _carry (Econst_int (Int.repr 0) tint))\n        (Ssequence\n          (Sloop\n            (Sifthenelse (Eunop Onotbool\n                           (Ebinop One (Etempvar _wnaf (tptr tint))\n                             (Ecast (Econst_int (Int.repr 0) tint)\n                               (tptr tvoid)) tint) tint)\n              (Sloop\n                (Ssequence\n                  (Ssequence\n                    (Sset _t'12\n                      (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                    (Scall None\n                      (Evar _fprintf (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct __IO_FILE noattr))\n                                         (Tcons (tptr tschar) Tnil)) tint\n                                       {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                      ((Etempvar _t'12 (tptr (Tstruct __IO_FILE noattr))) ::\n                       (Evar ___stringlit_6 (tarray tschar 11)) ::\n                       (Evar ___stringlit_146 (tarray tschar 24)) ::\n                       (Econst_int (Int.repr 166) tint) ::\n                       (Evar ___stringlit_150 (tarray tschar 36)) :: nil)))\n                  (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                    nil))\n                Sbreak)\n              Sskip)\n            Sbreak)\n          (Ssequence\n            (Sloop\n              (Ssequence\n                (Sifthenelse (Ebinop Ole (Econst_int (Int.repr 0) tint)\n                               (Etempvar _len tint) tint)\n                  (Sset _t'1\n                    (Ecast\n                      (Ebinop Ole (Etempvar _len tint)\n                        (Econst_int (Int.repr 256) tint) tint) tbool))\n                  (Sset _t'1 (Econst_int (Int.repr 0) tint)))\n                (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'11\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'11 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_146 (tarray tschar 24)) ::\n                           (Econst_int (Int.repr 167) tint) ::\n                           (Evar ___stringlit_151 (tarray tschar 46)) :: nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip))\n              Sbreak)\n            (Ssequence\n              (Sloop\n                (Sifthenelse (Eunop Onotbool\n                               (Ebinop One\n                                 (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                                 (Ecast (Econst_int (Int.repr 0) tint)\n                                   (tptr tvoid)) tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'10\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'10 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_146 (tarray tschar 24)) ::\n                           (Econst_int (Int.repr 168) tint) ::\n                           (Evar ___stringlit_152 (tarray tschar 33)) :: nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip)\n                Sbreak)\n              (Ssequence\n                (Sloop\n                  (Ssequence\n                    (Sifthenelse (Ebinop Ole (Econst_int (Int.repr 2) tint)\n                                   (Etempvar _w tint) tint)\n                      (Sset _t'2\n                        (Ecast\n                          (Ebinop Ole (Etempvar _w tint)\n                            (Econst_int (Int.repr 31) tint) tint) tbool))\n                      (Sset _t'2 (Econst_int (Int.repr 0) tint)))\n                    (Sifthenelse (Eunop Onotbool (Etempvar _t'2 tint) tint)\n                      (Sloop\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'9\n                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                            (Scall None\n                              (Evar _fprintf (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                 (Tcons (tptr tschar) Tnil))\n                                               tint\n                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                              ((Etempvar _t'9 (tptr (Tstruct __IO_FILE noattr))) ::\n                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                               (Evar ___stringlit_146 (tarray tschar 24)) ::\n                               (Econst_int (Int.repr 169) tint) ::\n                               (Evar ___stringlit_153 (tarray tschar 41)) ::\n                               nil)))\n                          (Scall None\n                            (Evar _abort (Tfunction Tnil tvoid cc_default))\n                            nil))\n                        Sbreak)\n                      Sskip))\n                  Sbreak)\n                (Ssequence\n                  (Scall None\n                    (Evar _memset (Tfunction\n                                    (Tcons (tptr tvoid)\n                                      (Tcons tint (Tcons tulong Tnil)))\n                                    (tptr tvoid) cc_default))\n                    ((Etempvar _wnaf (tptr tint)) ::\n                     (Econst_int (Int.repr 0) tint) ::\n                     (Ebinop Omul (Etempvar _len tint) (Esizeof tint tulong)\n                       tulong) :: nil))\n                  (Ssequence\n                    (Sassign (Evar _s (Tstruct __2843 noattr))\n                      (Ederef (Etempvar _a (tptr (Tstruct __2843 noattr)))\n                        (Tstruct __2843 noattr)))\n                    (Ssequence\n                      (Ssequence\n                        (Scall (Some _t'3)\n                          (Evar _secp256k1_scalar_get_bits (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __2843 noattr))\n                                                               (Tcons tuint\n                                                                 (Tcons tuint\n                                                                   Tnil)))\n                                                             tuint\n                                                             cc_default))\n                          ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n                             (tptr (Tstruct __2843 noattr))) ::\n                           (Econst_int (Int.repr 255) tint) ::\n                           (Econst_int (Int.repr 1) tint) :: nil))\n                        (Sifthenelse (Etempvar _t'3 tuint)\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_scalar_negate (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __2843 noattr))\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __2843 noattr))\n                                                                   Tnil))\n                                                               tvoid\n                                                               cc_default))\n                              ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n                                 (tptr (Tstruct __2843 noattr))) ::\n                               (Eaddrof (Evar _s (Tstruct __2843 noattr))\n                                 (tptr (Tstruct __2843 noattr))) :: nil))\n                            (Sset _sign\n                              (Eunop Oneg (Econst_int (Int.repr 1) tint)\n                                tint)))\n                          Sskip))\n                      (Ssequence\n                        (Swhile\n                          (Ebinop Olt (Etempvar _bit tint)\n                            (Etempvar _len tint) tint)\n                          (Ssequence\n                            (Ssequence\n                              (Scall (Some _t'4)\n                                (Evar _secp256k1_scalar_get_bits (Tfunction\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    (Tcons\n                                                                    tuint\n                                                                    (Tcons\n                                                                    tuint\n                                                                    Tnil)))\n                                                                   tuint\n                                                                   cc_default))\n                                ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n                                   (tptr (Tstruct __2843 noattr))) ::\n                                 (Etempvar _bit tint) ::\n                                 (Econst_int (Int.repr 1) tint) :: nil))\n                              (Sifthenelse (Ebinop Oeq (Etempvar _t'4 tuint)\n                                             (Ecast (Etempvar _carry tint)\n                                               tuint) tint)\n                                (Ssequence\n                                  (Sset _bit\n                                    (Ebinop Oadd (Etempvar _bit tint)\n                                      (Econst_int (Int.repr 1) tint) tint))\n                                  Scontinue)\n                                Sskip))\n                            (Ssequence\n                              (Sset _now (Etempvar _w tint))\n                              (Ssequence\n                                (Sifthenelse (Ebinop Ogt (Etempvar _now tint)\n                                               (Ebinop Osub\n                                                 (Etempvar _len tint)\n                                                 (Etempvar _bit tint) tint)\n                                               tint)\n                                  (Sset _now\n                                    (Ebinop Osub (Etempvar _len tint)\n                                      (Etempvar _bit tint) tint))\n                                  Sskip)\n                                (Ssequence\n                                  (Ssequence\n                                    (Scall (Some _t'5)\n                                      (Evar _secp256k1_scalar_get_bits_var \n                                      (Tfunction\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons tuint (Tcons tuint Tnil)))\n                                        tuint cc_default))\n                                      ((Eaddrof\n                                         (Evar _s (Tstruct __2843 noattr))\n                                         (tptr (Tstruct __2843 noattr))) ::\n                                       (Etempvar _bit tint) ::\n                                       (Etempvar _now tint) :: nil))\n                                    (Sset _word\n                                      (Ebinop Oadd (Etempvar _t'5 tuint)\n                                        (Etempvar _carry tint) tuint)))\n                                  (Ssequence\n                                    (Sset _carry\n                                      (Ebinop Oand\n                                        (Ebinop Oshr (Etempvar _word tint)\n                                          (Ebinop Osub (Etempvar _w tint)\n                                            (Econst_int (Int.repr 1) tint)\n                                            tint) tint)\n                                        (Econst_int (Int.repr 1) tint) tint))\n                                    (Ssequence\n                                      (Sset _word\n                                        (Ebinop Osub (Etempvar _word tint)\n                                          (Ebinop Oshl (Etempvar _carry tint)\n                                            (Etempvar _w tint) tint) tint))\n                                      (Ssequence\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Etempvar _wnaf (tptr tint))\n                                              (Etempvar _bit tint)\n                                              (tptr tint)) tint)\n                                          (Ebinop Omul (Etempvar _sign tint)\n                                            (Etempvar _word tint) tint))\n                                        (Ssequence\n                                          (Sset _last_set_bit\n                                            (Etempvar _bit tint))\n                                          (Sset _bit\n                                            (Ebinop Oadd (Etempvar _bit tint)\n                                              (Etempvar _now tint) tint)))))))))))\n                        (Ssequence\n                          (Ssequence\n                            (Sset _verify_bit (Etempvar _bit tint))\n                            (Ssequence\n                              (Sloop\n                                (Sifthenelse (Eunop Onotbool\n                                               (Ebinop Oeq\n                                                 (Etempvar _carry tint)\n                                                 (Econst_int (Int.repr 0) tint)\n                                                 tint) tint)\n                                  (Sloop\n                                    (Ssequence\n                                      (Ssequence\n                                        (Sset _t'8\n                                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                        (Scall None\n                                          (Evar _fprintf (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __IO_FILE noattr))\n                                                             (Tcons\n                                                               (tptr tschar)\n                                                               Tnil)) tint\n                                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                          ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                           (Evar ___stringlit_146 (tarray tschar 24)) ::\n                                           (Econst_int (Int.repr 206) tint) ::\n                                           (Evar ___stringlit_154 (tarray tschar 34)) ::\n                                           nil)))\n                                      (Scall None\n                                        (Evar _abort (Tfunction Tnil tvoid\n                                                       cc_default)) nil))\n                                    Sbreak)\n                                  Sskip)\n                                Sbreak)\n                              (Swhile\n                                (Ebinop Olt (Etempvar _verify_bit tint)\n                                  (Econst_int (Int.repr 256) tint) tint)\n                                (Ssequence\n                                  (Sloop\n                                    (Ssequence\n                                      (Scall (Some _t'6)\n                                        (Evar _secp256k1_scalar_get_bits \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            (Tcons tuint (Tcons tuint Tnil)))\n                                          tuint cc_default))\n                                        ((Eaddrof\n                                           (Evar _s (Tstruct __2843 noattr))\n                                           (tptr (Tstruct __2843 noattr))) ::\n                                         (Etempvar _verify_bit tint) ::\n                                         (Econst_int (Int.repr 1) tint) ::\n                                         nil))\n                                      (Sifthenelse (Eunop Onotbool\n                                                     (Ebinop Oeq\n                                                       (Etempvar _t'6 tuint)\n                                                       (Econst_int (Int.repr 0) tint)\n                                                       tint) tint)\n                                        (Sloop\n                                          (Ssequence\n                                            (Ssequence\n                                              (Sset _t'7\n                                                (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                              (Scall None\n                                                (Evar _fprintf (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __IO_FILE noattr))\n                                                                   (Tcons\n                                                                    (tptr tschar)\n                                                                    Tnil))\n                                                                 tint\n                                                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                                ((Etempvar _t'7 (tptr (Tstruct __IO_FILE noattr))) ::\n                                                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                                 (Evar ___stringlit_146 (tarray tschar 24)) ::\n                                                 (Econst_int (Int.repr 209) tint) ::\n                                                 (Evar ___stringlit_155 (tarray tschar 73)) ::\n                                                 nil)))\n                                            (Scall None\n                                              (Evar _abort (Tfunction Tnil\n                                                             tvoid\n                                                             cc_default))\n                                              nil))\n                                          Sbreak)\n                                        Sskip))\n                                    Sbreak)\n                                  (Sset _verify_bit\n                                    (Ebinop Oadd (Etempvar _verify_bit tint)\n                                      (Econst_int (Int.repr 1) tint) tint))))))\n                          (Sreturn (Some (Ebinop Oadd\n                                           (Etempvar _last_set_bit tint)\n                                           (Econst_int (Int.repr 1) tint)\n                                           tint))))))))))))))))\n|}.\n\nDefinition f_secp256k1_ecmult_strauss_wnaf := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_state, (tptr (Tstruct _secp256k1_strauss_state noattr))) ::\n                (_r, (tptr (Tstruct __3156 noattr))) :: (_num, tulong) ::\n                (_a, (tptr (Tstruct __3156 noattr))) ::\n                (_na, (tptr (Tstruct __2843 noattr))) ::\n                (_ng, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_tmpa, (Tstruct __3154 noattr)) ::\n              (_Z, (Tstruct __2380 noattr)) ::\n              (_ng_1, (Tstruct __2843 noattr)) ::\n              (_ng_128, (Tstruct __2843 noattr)) ::\n              (_wnaf_ng_1, (tarray tint 129)) ::\n              (_wnaf_ng_128, (tarray tint 129)) ::\n              (_tmp, (Tstruct __3156 noattr)) ::\n              (_na_1, (Tstruct __2843 noattr)) ::\n              (_na_lam, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := ((_bits_ng_1, tint) :: (_bits_ng_128, tint) :: (_i, tint) ::\n               (_bits, tint) :: (_np, tulong) :: (_no, tulong) ::\n               (_n, tint) :: (_t'15, tint) :: (_t'14, tint) ::\n               (_t'13, tint) :: (_t'12, tint) :: (_t'11, tint) ::\n               (_t'10, tint) :: (_t'9, tint) :: (_t'8, tint) ::\n               (_t'7, tint) :: (_t'6, tint) :: (_t'5, tint) ::\n               (_t'4, tint) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tint) ::\n               (_t'53,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'52,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'51,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'50,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'49, (tptr (Tstruct __IO_FILE noattr))) :: (_t'48, tint) ::\n               (_t'47,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'46, (tptr (Tstruct __IO_FILE noattr))) :: (_t'45, tint) ::\n               (_t'44,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'43,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'42, tint) ::\n               (_t'41,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'40,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'39, tint) ::\n               (_t'38,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'37, (tptr (Tstruct __2380 noattr))) ::\n               (_t'36, (tptr (Tstruct __3154 noattr))) ::\n               (_t'35, (tptr (Tstruct __2380 noattr))) ::\n               (_t'34, (tptr (Tstruct __2380 noattr))) ::\n               (_t'33, (tptr (Tstruct __2380 noattr))) ::\n               (_t'32, (tptr (Tstruct __3154 noattr))) ::\n               (_t'31, (tptr (Tstruct __3154 noattr))) ::\n               (_t'30, (tptr (Tstruct __2380 noattr))) :: (_t'29, tint) ::\n               (_t'28,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'27, tint) ::\n               (_t'26,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'25, (tptr (Tstruct __3154 noattr))) :: (_t'24, tint) ::\n               (_t'23,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'22, tint) ::\n               (_t'21,\n                (tptr (Tstruct _secp256k1_strauss_point_state noattr))) ::\n               (_t'20, (tptr (Tstruct __2380 noattr))) ::\n               (_t'19, (tptr (Tstruct __3154 noattr))) :: (_t'18, tint) ::\n               (_t'17, tint) :: (_t'16, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _bits_ng_1 (Econst_int (Int.repr 0) tint))\n  (Ssequence\n    (Sset _bits_ng_128 (Econst_int (Int.repr 0) tint))\n    (Ssequence\n      (Sset _bits (Econst_int (Int.repr 0) tint))\n      (Ssequence\n        (Sset _no (Ecast (Econst_int (Int.repr 0) tint) tulong))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_set_int (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons tint Tnil)) tvoid\n                                          cc_default))\n            ((Eaddrof (Evar _Z (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 1) tint) :: nil))\n          (Ssequence\n            (Ssequence\n              (Sset _np (Ecast (Econst_int (Int.repr 0) tint) tulong))\n              (Sloop\n                (Ssequence\n                  (Sifthenelse (Ebinop Olt (Etempvar _np tulong)\n                                 (Etempvar _num tulong) tint)\n                    Sskip\n                    Sbreak)\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Scall (Some _t'1)\n                          (Evar _secp256k1_scalar_is_zero (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2843 noattr))\n                                                              Tnil) tint\n                                                            cc_default))\n                          ((Ebinop Oadd\n                             (Etempvar _na (tptr (Tstruct __2843 noattr)))\n                             (Etempvar _np tulong)\n                             (tptr (Tstruct __2843 noattr))) :: nil))\n                        (Sifthenelse (Etempvar _t'1 tint)\n                          (Sset _t'2 (Econst_int (Int.repr 1) tint))\n                          (Ssequence\n                            (Scall (Some _t'3)\n                              (Evar _secp256k1_gej_is_infinity (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __3156 noattr))\n                                                                   Tnil) tint\n                                                                 cc_default))\n                              ((Ebinop Oadd\n                                 (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                                 (Etempvar _np tulong)\n                                 (tptr (Tstruct __3156 noattr))) :: nil))\n                            (Sset _t'2 (Ecast (Etempvar _t'3 tint) tbool)))))\n                      (Sifthenelse (Etempvar _t'2 tint) Scontinue Sskip))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_scalar_split_lambda (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __2843 noattr))\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __2843 noattr))\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    Tnil)))\n                                                               tvoid\n                                                               cc_default))\n                        ((Eaddrof (Evar _na_1 (Tstruct __2843 noattr))\n                           (tptr (Tstruct __2843 noattr))) ::\n                         (Eaddrof (Evar _na_lam (Tstruct __2843 noattr))\n                           (tptr (Tstruct __2843 noattr))) ::\n                         (Ebinop Oadd\n                           (Etempvar _na (tptr (Tstruct __2843 noattr)))\n                           (Etempvar _np tulong)\n                           (tptr (Tstruct __2843 noattr))) :: nil))\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Sset _t'53\n                              (Efield\n                                (Ederef\n                                  (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                  (Tstruct _secp256k1_strauss_state noattr))\n                                _ps\n                                (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                            (Scall (Some _t'4)\n                              (Evar _secp256k1_ecmult_wnaf (Tfunction\n                                                             (Tcons\n                                                               (tptr tint)\n                                                               (Tcons tint\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __2843 noattr))\n                                                                   (Tcons\n                                                                    tint\n                                                                    Tnil))))\n                                                             tint cc_default))\n                              ((Efield\n                                 (Ederef\n                                   (Ebinop Oadd\n                                     (Etempvar _t'53 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                     (Etempvar _no tulong)\n                                     (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                   (Tstruct _secp256k1_strauss_point_state noattr))\n                                 _wnaf_na_1 (tarray tint 129)) ::\n                               (Econst_int (Int.repr 129) tint) ::\n                               (Eaddrof (Evar _na_1 (Tstruct __2843 noattr))\n                                 (tptr (Tstruct __2843 noattr))) ::\n                               (Econst_int (Int.repr 5) tint) :: nil)))\n                          (Ssequence\n                            (Sset _t'52\n                              (Efield\n                                (Ederef\n                                  (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                  (Tstruct _secp256k1_strauss_state noattr))\n                                _ps\n                                (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                            (Sassign\n                              (Efield\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Etempvar _t'52 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                    (Etempvar _no tulong)\n                                    (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                  (Tstruct _secp256k1_strauss_point_state noattr))\n                                _bits_na_1 tint) (Etempvar _t'4 tint))))\n                        (Ssequence\n                          (Ssequence\n                            (Ssequence\n                              (Sset _t'51\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                    (Tstruct _secp256k1_strauss_state noattr))\n                                  _ps\n                                  (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                              (Scall (Some _t'5)\n                                (Evar _secp256k1_ecmult_wnaf (Tfunction\n                                                               (Tcons\n                                                                 (tptr tint)\n                                                                 (Tcons tint\n                                                                   (Tcons\n                                                                    (tptr (Tstruct __2843 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil))))\n                                                               tint\n                                                               cc_default))\n                                ((Efield\n                                   (Ederef\n                                     (Ebinop Oadd\n                                       (Etempvar _t'51 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                       (Etempvar _no tulong)\n                                       (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                     (Tstruct _secp256k1_strauss_point_state noattr))\n                                   _wnaf_na_lam (tarray tint 129)) ::\n                                 (Econst_int (Int.repr 129) tint) ::\n                                 (Eaddrof\n                                   (Evar _na_lam (Tstruct __2843 noattr))\n                                   (tptr (Tstruct __2843 noattr))) ::\n                                 (Econst_int (Int.repr 5) tint) :: nil)))\n                            (Ssequence\n                              (Sset _t'50\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                    (Tstruct _secp256k1_strauss_state noattr))\n                                  _ps\n                                  (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                              (Sassign\n                                (Efield\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Etempvar _t'50 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                      (Etempvar _no tulong)\n                                      (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                    (Tstruct _secp256k1_strauss_point_state noattr))\n                                  _bits_na_lam tint) (Etempvar _t'5 tint))))\n                          (Ssequence\n                            (Sloop\n                              (Ssequence\n                                (Sset _t'47\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                      (Tstruct _secp256k1_strauss_state noattr))\n                                    _ps\n                                    (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                (Ssequence\n                                  (Sset _t'48\n                                    (Efield\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _t'47 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                          (Etempvar _no tulong)\n                                          (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                        (Tstruct _secp256k1_strauss_point_state noattr))\n                                      _bits_na_1 tint))\n                                  (Sifthenelse (Eunop Onotbool\n                                                 (Ebinop Ole\n                                                   (Etempvar _t'48 tint)\n                                                   (Econst_int (Int.repr 129) tint)\n                                                   tint) tint)\n                                    (Sloop\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'49\n                                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                          (Scall None\n                                            (Evar _fprintf (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __IO_FILE noattr))\n                                                               (Tcons\n                                                                 (tptr tschar)\n                                                                 Tnil)) tint\n                                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                            ((Etempvar _t'49 (tptr (Tstruct __IO_FILE noattr))) ::\n                                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                             (Evar ___stringlit_146 (tarray tschar 24)) ::\n                                             (Econst_int (Int.repr 258) tint) ::\n                                             (Evar ___stringlit_156 (tarray tschar 54)) ::\n                                             nil)))\n                                        (Scall None\n                                          (Evar _abort (Tfunction Tnil tvoid\n                                                         cc_default)) nil))\n                                      Sbreak)\n                                    Sskip)))\n                              Sbreak)\n                            (Ssequence\n                              (Sloop\n                                (Ssequence\n                                  (Sset _t'44\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                        (Tstruct _secp256k1_strauss_state noattr))\n                                      _ps\n                                      (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                  (Ssequence\n                                    (Sset _t'45\n                                      (Efield\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Etempvar _t'44 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                            (Etempvar _no tulong)\n                                            (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                          (Tstruct _secp256k1_strauss_point_state noattr))\n                                        _bits_na_lam tint))\n                                    (Sifthenelse (Eunop Onotbool\n                                                   (Ebinop Ole\n                                                     (Etempvar _t'45 tint)\n                                                     (Econst_int (Int.repr 129) tint)\n                                                     tint) tint)\n                                      (Sloop\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'46\n                                              (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                                            (Scall None\n                                              (Evar _fprintf (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct __IO_FILE noattr))\n                                                                 (Tcons\n                                                                   (tptr tschar)\n                                                                   Tnil))\n                                                               tint\n                                                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                                              ((Etempvar _t'46 (tptr (Tstruct __IO_FILE noattr))) ::\n                                               (Evar ___stringlit_6 (tarray tschar 11)) ::\n                                               (Evar ___stringlit_146 (tarray tschar 24)) ::\n                                               (Econst_int (Int.repr 259) tint) ::\n                                               (Evar ___stringlit_157 (tarray tschar 56)) ::\n                                               nil)))\n                                          (Scall None\n                                            (Evar _abort (Tfunction Tnil\n                                                           tvoid cc_default))\n                                            nil))\n                                        Sbreak)\n                                      Sskip)))\n                                Sbreak)\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _t'41\n                                    (Efield\n                                      (Ederef\n                                        (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                        (Tstruct _secp256k1_strauss_state noattr))\n                                      _ps\n                                      (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                  (Ssequence\n                                    (Sset _t'42\n                                      (Efield\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Etempvar _t'41 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                            (Etempvar _no tulong)\n                                            (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                          (Tstruct _secp256k1_strauss_point_state noattr))\n                                        _bits_na_1 tint))\n                                    (Sifthenelse (Ebinop Ogt\n                                                   (Etempvar _t'42 tint)\n                                                   (Etempvar _bits tint)\n                                                   tint)\n                                      (Ssequence\n                                        (Sset _t'43\n                                          (Efield\n                                            (Ederef\n                                              (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                              (Tstruct _secp256k1_strauss_state noattr))\n                                            _ps\n                                            (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                        (Sset _bits\n                                          (Efield\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Etempvar _t'43 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                (Etempvar _no tulong)\n                                                (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                              (Tstruct _secp256k1_strauss_point_state noattr))\n                                            _bits_na_1 tint)))\n                                      Sskip)))\n                                (Ssequence\n                                  (Ssequence\n                                    (Sset _t'38\n                                      (Efield\n                                        (Ederef\n                                          (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                          (Tstruct _secp256k1_strauss_state noattr))\n                                        _ps\n                                        (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                    (Ssequence\n                                      (Sset _t'39\n                                        (Efield\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Etempvar _t'38 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                              (Etempvar _no tulong)\n                                              (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                            (Tstruct _secp256k1_strauss_point_state noattr))\n                                          _bits_na_lam tint))\n                                      (Sifthenelse (Ebinop Ogt\n                                                     (Etempvar _t'39 tint)\n                                                     (Etempvar _bits tint)\n                                                     tint)\n                                        (Ssequence\n                                          (Sset _t'40\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                (Tstruct _secp256k1_strauss_state noattr))\n                                              _ps\n                                              (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                          (Sset _bits\n                                            (Efield\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Etempvar _t'40 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                  (Etempvar _no tulong)\n                                                  (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                (Tstruct _secp256k1_strauss_point_state noattr))\n                                              _bits_na_lam tint)))\n                                        Sskip)))\n                                  (Ssequence\n                                    (Sassign\n                                      (Evar _tmp (Tstruct __3156 noattr))\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                                          (Etempvar _np tulong)\n                                          (tptr (Tstruct __3156 noattr)))\n                                        (Tstruct __3156 noattr)))\n                                    (Ssequence\n                                      (Sifthenelse (Etempvar _no tulong)\n                                        (Ssequence\n                                          (Scall None\n                                            (Evar _secp256k1_fe_normalize_var \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil) tvoid cc_default))\n                                            ((Eaddrof\n                                               (Evar _Z (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             nil))\n                                          (Scall None\n                                            (Evar _secp256k1_gej_rescale \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  Tnil)) tvoid cc_default))\n                                            ((Eaddrof\n                                               (Evar _tmp (Tstruct __3156 noattr))\n                                               (tptr (Tstruct __3156 noattr))) ::\n                                             (Eaddrof\n                                               (Evar _Z (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             nil)))\n                                        Sskip)\n                                      (Ssequence\n                                        (Ssequence\n                                          (Sset _t'36\n                                            (Efield\n                                              (Ederef\n                                                (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                (Tstruct _secp256k1_strauss_state noattr))\n                                              _pre_a\n                                              (tptr (Tstruct __3154 noattr))))\n                                          (Ssequence\n                                            (Sset _t'37\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                  (Tstruct _secp256k1_strauss_state noattr))\n                                                _aux\n                                                (tptr (Tstruct __2380 noattr))))\n                                            (Scall None\n                                              (Evar _secp256k1_ecmult_odd_multiples_table \n                                              (Tfunction\n                                                (Tcons tint\n                                                  (Tcons\n                                                    (tptr (Tstruct __3154 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __3156 noattr))\n                                                          Tnil))))) tvoid\n                                                cc_default))\n                                              ((Ebinop Oshl\n                                                 (Econst_long (Int64.repr 1) tlong)\n                                                 (Ebinop Osub\n                                                   (Econst_int (Int.repr 5) tint)\n                                                   (Econst_int (Int.repr 2) tint)\n                                                   tint) tlong) ::\n                                               (Ebinop Oadd\n                                                 (Etempvar _t'36 (tptr (Tstruct __3154 noattr)))\n                                                 (Ebinop Omul\n                                                   (Etempvar _no tulong)\n                                                   (Ebinop Oshl\n                                                     (Econst_long (Int64.repr 1) tlong)\n                                                     (Ebinop Osub\n                                                       (Econst_int (Int.repr 5) tint)\n                                                       (Econst_int (Int.repr 2) tint)\n                                                       tint) tlong) tulong)\n                                                 (tptr (Tstruct __3154 noattr))) ::\n                                               (Ebinop Oadd\n                                                 (Etempvar _t'37 (tptr (Tstruct __2380 noattr)))\n                                                 (Ebinop Omul\n                                                   (Etempvar _no tulong)\n                                                   (Ebinop Oshl\n                                                     (Econst_long (Int64.repr 1) tlong)\n                                                     (Ebinop Osub\n                                                       (Econst_int (Int.repr 5) tint)\n                                                       (Econst_int (Int.repr 2) tint)\n                                                       tint) tlong) tulong)\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _Z (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _tmp (Tstruct __3156 noattr))\n                                                 (tptr (Tstruct __3156 noattr))) ::\n                                               nil))))\n                                        (Ssequence\n                                          (Sifthenelse (Etempvar _no tulong)\n                                            (Ssequence\n                                              (Sset _t'34\n                                                (Efield\n                                                  (Ederef\n                                                    (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                    (Tstruct _secp256k1_strauss_state noattr))\n                                                  _aux\n                                                  (tptr (Tstruct __2380 noattr))))\n                                              (Ssequence\n                                                (Sset _t'35\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                      (Tstruct _secp256k1_strauss_state noattr))\n                                                    _aux\n                                                    (tptr (Tstruct __2380 noattr))))\n                                                (Scall None\n                                                  (Evar _secp256k1_fe_mul \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil))) tvoid\n                                                    cc_default))\n                                                  ((Ebinop Oadd\n                                                     (Etempvar _t'34 (tptr (Tstruct __2380 noattr)))\n                                                     (Ebinop Omul\n                                                       (Etempvar _no tulong)\n                                                       (Ebinop Oshl\n                                                         (Econst_long (Int64.repr 1) tlong)\n                                                         (Ebinop Osub\n                                                           (Econst_int (Int.repr 5) tint)\n                                                           (Econst_int (Int.repr 2) tint)\n                                                           tint) tlong)\n                                                       tulong)\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   (Ebinop Oadd\n                                                     (Etempvar _t'35 (tptr (Tstruct __2380 noattr)))\n                                                     (Ebinop Omul\n                                                       (Etempvar _no tulong)\n                                                       (Ebinop Oshl\n                                                         (Econst_long (Int64.repr 1) tlong)\n                                                         (Ebinop Osub\n                                                           (Econst_int (Int.repr 5) tint)\n                                                           (Econst_int (Int.repr 2) tint)\n                                                           tint) tlong)\n                                                       tulong)\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   (Eaddrof\n                                                     (Efield\n                                                       (Ederef\n                                                         (Ebinop Oadd\n                                                           (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                                                           (Etempvar _np tulong)\n                                                           (tptr (Tstruct __3156 noattr)))\n                                                         (Tstruct __3156 noattr))\n                                                       _z\n                                                       (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   nil))))\n                                            Sskip)\n                                          (Sset _no\n                                            (Ebinop Oadd\n                                              (Etempvar _no tulong)\n                                              (Econst_int (Int.repr 1) tint)\n                                              tulong)))))))))))))))\n                (Sset _np\n                  (Ebinop Oadd (Etempvar _np tulong)\n                    (Econst_int (Int.repr 1) tint) tulong))))\n            (Ssequence\n              (Ssequence\n                (Sset _t'32\n                  (Efield\n                    (Ederef\n                      (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                      (Tstruct _secp256k1_strauss_state noattr)) _pre_a\n                    (tptr (Tstruct __3154 noattr))))\n                (Ssequence\n                  (Sset _t'33\n                    (Efield\n                      (Ederef\n                        (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                        (Tstruct _secp256k1_strauss_state noattr)) _aux\n                      (tptr (Tstruct __2380 noattr))))\n                  (Scall None\n                    (Evar _secp256k1_ge_table_set_globalz (Tfunction\n                                                            (Tcons tulong\n                                                              (Tcons\n                                                                (tptr (Tstruct __3154 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                    ((Ebinop Omul\n                       (Ebinop Oshl (Econst_long (Int64.repr 1) tlong)\n                         (Ebinop Osub (Econst_int (Int.repr 5) tint)\n                           (Econst_int (Int.repr 2) tint) tint) tlong)\n                       (Etempvar _no tulong) tulong) ::\n                     (Etempvar _t'32 (tptr (Tstruct __3154 noattr))) ::\n                     (Etempvar _t'33 (tptr (Tstruct __2380 noattr))) :: nil))))\n              (Ssequence\n                (Ssequence\n                  (Sset _np (Ecast (Econst_int (Int.repr 0) tint) tulong))\n                  (Sloop\n                    (Ssequence\n                      (Sifthenelse (Ebinop Olt (Etempvar _np tulong)\n                                     (Etempvar _no tulong) tint)\n                        Sskip\n                        Sbreak)\n                      (Ssequence\n                        (Sset _i (Econst_int (Int.repr 0) tint))\n                        (Sloop\n                          (Ssequence\n                            (Sifthenelse (Ebinop Olt (Etempvar _i tint)\n                                           (Ebinop Oshl\n                                             (Econst_long (Int64.repr 1) tlong)\n                                             (Ebinop Osub\n                                               (Econst_int (Int.repr 5) tint)\n                                               (Econst_int (Int.repr 2) tint)\n                                               tint) tlong) tint)\n                              Sskip\n                              Sbreak)\n                            (Ssequence\n                              (Sset _t'30\n                                (Efield\n                                  (Ederef\n                                    (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                    (Tstruct _secp256k1_strauss_state noattr))\n                                  _aux (tptr (Tstruct __2380 noattr))))\n                              (Ssequence\n                                (Sset _t'31\n                                  (Efield\n                                    (Ederef\n                                      (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                      (Tstruct _secp256k1_strauss_state noattr))\n                                    _pre_a (tptr (Tstruct __3154 noattr))))\n                                (Scall None\n                                  (Evar _secp256k1_fe_mul (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                  ((Ebinop Oadd\n                                     (Etempvar _t'30 (tptr (Tstruct __2380 noattr)))\n                                     (Ebinop Oadd\n                                       (Ebinop Omul (Etempvar _np tulong)\n                                         (Ebinop Oshl\n                                           (Econst_long (Int64.repr 1) tlong)\n                                           (Ebinop Osub\n                                             (Econst_int (Int.repr 5) tint)\n                                             (Econst_int (Int.repr 2) tint)\n                                             tint) tlong) tulong)\n                                       (Etempvar _i tint) tulong)\n                                     (tptr (Tstruct __2380 noattr))) ::\n                                   (Eaddrof\n                                     (Efield\n                                       (Ederef\n                                         (Ebinop Oadd\n                                           (Etempvar _t'31 (tptr (Tstruct __3154 noattr)))\n                                           (Ebinop Oadd\n                                             (Ebinop Omul\n                                               (Etempvar _np tulong)\n                                               (Ebinop Oshl\n                                                 (Econst_long (Int64.repr 1) tlong)\n                                                 (Ebinop Osub\n                                                   (Econst_int (Int.repr 5) tint)\n                                                   (Econst_int (Int.repr 2) tint)\n                                                   tint) tlong) tulong)\n                                             (Etempvar _i tint) tulong)\n                                           (tptr (Tstruct __3154 noattr)))\n                                         (Tstruct __3154 noattr)) _x\n                                       (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) ::\n                                   (Eaddrof\n                                     (Evar _secp256k1_const_beta (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) :: nil)))))\n                          (Sset _i\n                            (Ebinop Oadd (Etempvar _i tint)\n                              (Econst_int (Int.repr 1) tint) tint)))))\n                    (Sset _np\n                      (Ebinop Oadd (Etempvar _np tulong)\n                        (Econst_int (Int.repr 1) tint) tulong))))\n                (Ssequence\n                  (Sifthenelse (Etempvar _ng (tptr (Tstruct __2843 noattr)))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_scalar_split_128 (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2843 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2843 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2843 noattr))\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                        ((Eaddrof (Evar _ng_1 (Tstruct __2843 noattr))\n                           (tptr (Tstruct __2843 noattr))) ::\n                         (Eaddrof (Evar _ng_128 (Tstruct __2843 noattr))\n                           (tptr (Tstruct __2843 noattr))) ::\n                         (Etempvar _ng (tptr (Tstruct __2843 noattr))) ::\n                         nil))\n                      (Ssequence\n                        (Ssequence\n                          (Scall (Some _t'6)\n                            (Evar _secp256k1_ecmult_wnaf (Tfunction\n                                                           (Tcons (tptr tint)\n                                                             (Tcons tint\n                                                               (Tcons\n                                                                 (tptr (Tstruct __2843 noattr))\n                                                                 (Tcons tint\n                                                                   Tnil))))\n                                                           tint cc_default))\n                            ((Evar _wnaf_ng_1 (tarray tint 129)) ::\n                             (Econst_int (Int.repr 129) tint) ::\n                             (Eaddrof (Evar _ng_1 (Tstruct __2843 noattr))\n                               (tptr (Tstruct __2843 noattr))) ::\n                             (Econst_int (Int.repr 15) tint) :: nil))\n                          (Sset _bits_ng_1 (Etempvar _t'6 tint)))\n                        (Ssequence\n                          (Ssequence\n                            (Scall (Some _t'7)\n                              (Evar _secp256k1_ecmult_wnaf (Tfunction\n                                                             (Tcons\n                                                               (tptr tint)\n                                                               (Tcons tint\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __2843 noattr))\n                                                                   (Tcons\n                                                                    tint\n                                                                    Tnil))))\n                                                             tint cc_default))\n                              ((Evar _wnaf_ng_128 (tarray tint 129)) ::\n                               (Econst_int (Int.repr 129) tint) ::\n                               (Eaddrof\n                                 (Evar _ng_128 (Tstruct __2843 noattr))\n                                 (tptr (Tstruct __2843 noattr))) ::\n                               (Econst_int (Int.repr 15) tint) :: nil))\n                            (Sset _bits_ng_128 (Etempvar _t'7 tint)))\n                          (Ssequence\n                            (Sifthenelse (Ebinop Ogt\n                                           (Etempvar _bits_ng_1 tint)\n                                           (Etempvar _bits tint) tint)\n                              (Sset _bits (Etempvar _bits_ng_1 tint))\n                              Sskip)\n                            (Sifthenelse (Ebinop Ogt\n                                           (Etempvar _bits_ng_128 tint)\n                                           (Etempvar _bits tint) tint)\n                              (Sset _bits (Etempvar _bits_ng_128 tint))\n                              Sskip)))))\n                    Sskip)\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_gej_set_infinity (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __3156 noattr))\n                                                            Tnil) tvoid\n                                                          cc_default))\n                      ((Etempvar _r (tptr (Tstruct __3156 noattr))) :: nil))\n                    (Ssequence\n                      (Ssequence\n                        (Sset _i\n                          (Ebinop Osub (Etempvar _bits tint)\n                            (Econst_int (Int.repr 1) tint) tint))\n                        (Sloop\n                          (Ssequence\n                            (Sifthenelse (Ebinop Oge (Etempvar _i tint)\n                                           (Econst_int (Int.repr 0) tint)\n                                           tint)\n                              Sskip\n                              Sbreak)\n                            (Ssequence\n                              (Scall None\n                                (Evar _secp256k1_gej_double_var (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __3156 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3156 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                  tvoid\n                                                                  cc_default))\n                                ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                 (Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                 (Ecast (Econst_int (Int.repr 0) tint)\n                                   (tptr tvoid)) :: nil))\n                              (Ssequence\n                                (Ssequence\n                                  (Sset _np\n                                    (Ecast (Econst_int (Int.repr 0) tint)\n                                      tulong))\n                                  (Sloop\n                                    (Ssequence\n                                      (Sifthenelse (Ebinop Olt\n                                                     (Etempvar _np tulong)\n                                                     (Etempvar _no tulong)\n                                                     tint)\n                                        Sskip\n                                        Sbreak)\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'26\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                  (Tstruct _secp256k1_strauss_state noattr))\n                                                _ps\n                                                (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                            (Ssequence\n                                              (Sset _t'27\n                                                (Efield\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Etempvar _t'26 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                      (Etempvar _np tulong)\n                                                      (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                    (Tstruct _secp256k1_strauss_point_state noattr))\n                                                  _bits_na_1 tint))\n                                              (Sifthenelse (Ebinop Olt\n                                                             (Etempvar _i tint)\n                                                             (Etempvar _t'27 tint)\n                                                             tint)\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'28\n                                                        (Efield\n                                                          (Ederef\n                                                            (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                            (Tstruct _secp256k1_strauss_state noattr))\n                                                          _ps\n                                                          (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                                      (Ssequence\n                                                        (Sset _t'29\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Etempvar _t'28 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                                    (Etempvar _np tulong)\n                                                                    (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                                  (Tstruct _secp256k1_strauss_point_state noattr))\n                                                                _wnaf_na_1\n                                                                (tarray tint 129))\n                                                              (Etempvar _i tint)\n                                                              (tptr tint))\n                                                            tint))\n                                                        (Sset _t'9\n                                                          (Ecast\n                                                            (Etempvar _t'29 tint)\n                                                            tint))))\n                                                    (Sset _n\n                                                      (Etempvar _t'9 tint)))\n                                                  (Sset _t'8\n                                                    (Ecast\n                                                      (Etempvar _t'9 tint)\n                                                      tbool)))\n                                                (Sset _t'8\n                                                  (Econst_int (Int.repr 0) tint)))))\n                                          (Sifthenelse (Etempvar _t'8 tint)\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'25\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                      (Tstruct _secp256k1_strauss_state noattr))\n                                                    _pre_a\n                                                    (tptr (Tstruct __3154 noattr))))\n                                                (Scall None\n                                                  (Evar _secp256k1_ecmult_table_get_ge \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __3154 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __3154 noattr))\n                                                        (Tcons tint\n                                                          (Tcons tint Tnil))))\n                                                    tvoid cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _tmpa (Tstruct __3154 noattr))\n                                                     (tptr (Tstruct __3154 noattr))) ::\n                                                   (Ebinop Oadd\n                                                     (Etempvar _t'25 (tptr (Tstruct __3154 noattr)))\n                                                     (Ebinop Omul\n                                                       (Etempvar _np tulong)\n                                                       (Ebinop Oshl\n                                                         (Econst_long (Int64.repr 1) tlong)\n                                                         (Ebinop Osub\n                                                           (Econst_int (Int.repr 5) tint)\n                                                           (Econst_int (Int.repr 2) tint)\n                                                           tint) tlong)\n                                                       tulong)\n                                                     (tptr (Tstruct __3154 noattr))) ::\n                                                   (Etempvar _n tint) ::\n                                                   (Econst_int (Int.repr 5) tint) ::\n                                                   nil)))\n                                              (Scall None\n                                                (Evar _secp256k1_gej_add_ge_var \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __3156 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __3156 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __3154 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)))) tvoid\n                                                  cc_default))\n                                                ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                                 (Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _tmpa (Tstruct __3154 noattr))\n                                                   (tptr (Tstruct __3154 noattr))) ::\n                                                 (Ecast\n                                                   (Econst_int (Int.repr 0) tint)\n                                                   (tptr tvoid)) :: nil)))\n                                            Sskip))\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'21\n                                              (Efield\n                                                (Ederef\n                                                  (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                  (Tstruct _secp256k1_strauss_state noattr))\n                                                _ps\n                                                (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                            (Ssequence\n                                              (Sset _t'22\n                                                (Efield\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Etempvar _t'21 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                      (Etempvar _np tulong)\n                                                      (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                    (Tstruct _secp256k1_strauss_point_state noattr))\n                                                  _bits_na_lam tint))\n                                              (Sifthenelse (Ebinop Olt\n                                                             (Etempvar _i tint)\n                                                             (Etempvar _t'22 tint)\n                                                             tint)\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Sset _t'23\n                                                        (Efield\n                                                          (Ederef\n                                                            (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                            (Tstruct _secp256k1_strauss_state noattr))\n                                                          _ps\n                                                          (tptr (Tstruct _secp256k1_strauss_point_state noattr))))\n                                                      (Ssequence\n                                                        (Sset _t'24\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Etempvar _t'23 (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                                    (Etempvar _np tulong)\n                                                                    (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n                                                                  (Tstruct _secp256k1_strauss_point_state noattr))\n                                                                _wnaf_na_lam\n                                                                (tarray tint 129))\n                                                              (Etempvar _i tint)\n                                                              (tptr tint))\n                                                            tint))\n                                                        (Sset _t'11\n                                                          (Ecast\n                                                            (Etempvar _t'24 tint)\n                                                            tint))))\n                                                    (Sset _n\n                                                      (Etempvar _t'11 tint)))\n                                                  (Sset _t'10\n                                                    (Ecast\n                                                      (Etempvar _t'11 tint)\n                                                      tbool)))\n                                                (Sset _t'10\n                                                  (Econst_int (Int.repr 0) tint)))))\n                                          (Sifthenelse (Etempvar _t'10 tint)\n                                            (Ssequence\n                                              (Ssequence\n                                                (Sset _t'19\n                                                  (Efield\n                                                    (Ederef\n                                                      (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                      (Tstruct _secp256k1_strauss_state noattr))\n                                                    _pre_a\n                                                    (tptr (Tstruct __3154 noattr))))\n                                                (Ssequence\n                                                  (Sset _t'20\n                                                    (Efield\n                                                      (Ederef\n                                                        (Etempvar _state (tptr (Tstruct _secp256k1_strauss_state noattr)))\n                                                        (Tstruct _secp256k1_strauss_state noattr))\n                                                      _aux\n                                                      (tptr (Tstruct __2380 noattr))))\n                                                  (Scall None\n                                                    (Evar _secp256k1_ecmult_table_get_ge_lambda \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __3154 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __3154 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons tint\n                                                              (Tcons tint\n                                                                Tnil)))))\n                                                      tvoid cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _tmpa (Tstruct __3154 noattr))\n                                                       (tptr (Tstruct __3154 noattr))) ::\n                                                     (Ebinop Oadd\n                                                       (Etempvar _t'19 (tptr (Tstruct __3154 noattr)))\n                                                       (Ebinop Omul\n                                                         (Etempvar _np tulong)\n                                                         (Ebinop Oshl\n                                                           (Econst_long (Int64.repr 1) tlong)\n                                                           (Ebinop Osub\n                                                             (Econst_int (Int.repr 5) tint)\n                                                             (Econst_int (Int.repr 2) tint)\n                                                             tint) tlong)\n                                                         tulong)\n                                                       (tptr (Tstruct __3154 noattr))) ::\n                                                     (Ebinop Oadd\n                                                       (Etempvar _t'20 (tptr (Tstruct __2380 noattr)))\n                                                       (Ebinop Omul\n                                                         (Etempvar _np tulong)\n                                                         (Ebinop Oshl\n                                                           (Econst_long (Int64.repr 1) tlong)\n                                                           (Ebinop Osub\n                                                             (Econst_int (Int.repr 5) tint)\n                                                             (Econst_int (Int.repr 2) tint)\n                                                             tint) tlong)\n                                                         tulong)\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     (Etempvar _n tint) ::\n                                                     (Econst_int (Int.repr 5) tint) ::\n                                                     nil))))\n                                              (Scall None\n                                                (Evar _secp256k1_gej_add_ge_var \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __3156 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __3156 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __3154 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)))) tvoid\n                                                  cc_default))\n                                                ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                                 (Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _tmpa (Tstruct __3154 noattr))\n                                                   (tptr (Tstruct __3154 noattr))) ::\n                                                 (Ecast\n                                                   (Econst_int (Int.repr 0) tint)\n                                                   (tptr tvoid)) :: nil)))\n                                            Sskip))))\n                                    (Sset _np\n                                      (Ebinop Oadd (Etempvar _np tulong)\n                                        (Econst_int (Int.repr 1) tint)\n                                        tulong))))\n                                (Ssequence\n                                  (Ssequence\n                                    (Sifthenelse (Ebinop Olt\n                                                   (Etempvar _i tint)\n                                                   (Etempvar _bits_ng_1 tint)\n                                                   tint)\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'18\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Evar _wnaf_ng_1 (tarray tint 129))\n                                                  (Etempvar _i tint)\n                                                  (tptr tint)) tint))\n                                            (Sset _t'13\n                                              (Ecast (Etempvar _t'18 tint)\n                                                tint)))\n                                          (Sset _n (Etempvar _t'13 tint)))\n                                        (Sset _t'12\n                                          (Ecast (Etempvar _t'13 tint) tbool)))\n                                      (Sset _t'12\n                                        (Econst_int (Int.repr 0) tint)))\n                                    (Sifthenelse (Etempvar _t'12 tint)\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_ecmult_table_get_ge_storage \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3158 noattr))\n                                                (Tcons tint\n                                                  (Tcons tint Tnil)))) tvoid\n                                            cc_default))\n                                          ((Eaddrof\n                                             (Evar _tmpa (Tstruct __3154 noattr))\n                                             (tptr (Tstruct __3154 noattr))) ::\n                                           (Evar _secp256k1_pre_g (tarray (Tstruct __3158 noattr) 8192)) ::\n                                           (Etempvar _n tint) ::\n                                           (Econst_int (Int.repr 15) tint) ::\n                                           nil))\n                                        (Scall None\n                                          (Evar _secp256k1_gej_add_zinv_var \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __3154 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)))) tvoid\n                                            cc_default))\n                                          ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                           (Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _tmpa (Tstruct __3154 noattr))\n                                             (tptr (Tstruct __3154 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _Z (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           nil)))\n                                      Sskip))\n                                  (Ssequence\n                                    (Sifthenelse (Ebinop Olt\n                                                   (Etempvar _i tint)\n                                                   (Etempvar _bits_ng_128 tint)\n                                                   tint)\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Sset _t'17\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Evar _wnaf_ng_128 (tarray tint 129))\n                                                  (Etempvar _i tint)\n                                                  (tptr tint)) tint))\n                                            (Sset _t'15\n                                              (Ecast (Etempvar _t'17 tint)\n                                                tint)))\n                                          (Sset _n (Etempvar _t'15 tint)))\n                                        (Sset _t'14\n                                          (Ecast (Etempvar _t'15 tint) tbool)))\n                                      (Sset _t'14\n                                        (Econst_int (Int.repr 0) tint)))\n                                    (Sifthenelse (Etempvar _t'14 tint)\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_ecmult_table_get_ge_storage \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3158 noattr))\n                                                (Tcons tint\n                                                  (Tcons tint Tnil)))) tvoid\n                                            cc_default))\n                                          ((Eaddrof\n                                             (Evar _tmpa (Tstruct __3154 noattr))\n                                             (tptr (Tstruct __3154 noattr))) ::\n                                           (Evar _secp256k1_pre_g_128 (tarray (Tstruct __3158 noattr) 8192)) ::\n                                           (Etempvar _n tint) ::\n                                           (Econst_int (Int.repr 15) tint) ::\n                                           nil))\n                                        (Scall None\n                                          (Evar _secp256k1_gej_add_zinv_var \n                                          (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __3154 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)))) tvoid\n                                            cc_default))\n                                          ((Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                           (Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _tmpa (Tstruct __3154 noattr))\n                                             (tptr (Tstruct __3154 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _Z (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           nil)))\n                                      Sskip))))))\n                          (Sset _i\n                            (Ebinop Osub (Etempvar _i tint)\n                              (Econst_int (Int.repr 1) tint) tint))))\n                      (Ssequence\n                        (Sset _t'16\n                          (Efield\n                            (Ederef\n                              (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                              (Tstruct __3156 noattr)) _infinity tint))\n                        (Sifthenelse (Eunop Onotbool (Etempvar _t'16 tint)\n                                       tint)\n                          (Scall None\n                            (Evar _secp256k1_fe_mul (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            Tnil))) tvoid\n                                                      cc_default))\n                            ((Eaddrof\n                               (Efield\n                                 (Ederef\n                                   (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                   (Tstruct __3156 noattr)) _z\n                                 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Eaddrof\n                               (Efield\n                                 (Ederef\n                                   (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                                   (Tstruct __3156 noattr)) _z\n                                 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Eaddrof (Evar _Z (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) :: nil))\n                          Sskip)))))))))))))\n|}.\n\nDefinition f_secp256k1_ecmult := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_a, (tptr (Tstruct __3156 noattr))) ::\n                (_na, (tptr (Tstruct __2843 noattr))) ::\n                (_ng, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_aux, (tarray (Tstruct __2380 noattr) 8)) ::\n              (_pre_a, (tarray (Tstruct __3154 noattr) 8)) ::\n              (_ps,\n               (tarray (Tstruct _secp256k1_strauss_point_state noattr) 1)) ::\n              (_state, (Tstruct _secp256k1_strauss_state noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield (Evar _state (Tstruct _secp256k1_strauss_state noattr)) _aux\n      (tptr (Tstruct __2380 noattr)))\n    (Evar _aux (tarray (Tstruct __2380 noattr) 8)))\n  (Ssequence\n    (Sassign\n      (Efield (Evar _state (Tstruct _secp256k1_strauss_state noattr)) _pre_a\n        (tptr (Tstruct __3154 noattr)))\n      (Evar _pre_a (tarray (Tstruct __3154 noattr) 8)))\n    (Ssequence\n      (Sassign\n        (Efield (Evar _state (Tstruct _secp256k1_strauss_state noattr)) _ps\n          (tptr (Tstruct _secp256k1_strauss_point_state noattr)))\n        (Evar _ps (tarray (Tstruct _secp256k1_strauss_point_state noattr) 1)))\n      (Scall None\n        (Evar _secp256k1_ecmult_strauss_wnaf (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct _secp256k1_strauss_state noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __3156 noattr))\n                                                   (Tcons tulong\n                                                     (Tcons\n                                                       (tptr (Tstruct __3156 noattr))\n                                                       (Tcons\n                                                         (tptr (Tstruct __2843 noattr))\n                                                         (Tcons\n                                                           (tptr (Tstruct __2843 noattr))\n                                                           Tnil)))))) tvoid\n                                               cc_default))\n        ((Eaddrof (Evar _state (Tstruct _secp256k1_strauss_state noattr))\n           (tptr (Tstruct _secp256k1_strauss_state noattr))) ::\n         (Etempvar _r (tptr (Tstruct __3156 noattr))) ::\n         (Econst_int (Int.repr 1) tint) ::\n         (Etempvar _a (tptr (Tstruct __3156 noattr))) ::\n         (Etempvar _na (tptr (Tstruct __2843 noattr))) ::\n         (Etempvar _ng (tptr (Tstruct __2843 noattr))) :: nil)))))\n|}.\n\nDefinition f_secp256k1_eckey_pubkey_tweak_add := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_key, (tptr (Tstruct __3154 noattr))) ::\n                (_tweak, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_pt, (Tstruct __3156 noattr)) ::\n              (_one, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_gej_set_ge (Tfunction\n                                  (Tcons (tptr (Tstruct __3156 noattr))\n                                    (Tcons (tptr (Tstruct __3154 noattr))\n                                      Tnil)) tvoid cc_default))\n    ((Eaddrof (Evar _pt (Tstruct __3156 noattr))\n       (tptr (Tstruct __3156 noattr))) ::\n     (Etempvar _key (tptr (Tstruct __3154 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_scalar_set_int (Tfunction\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons tuint Tnil)) tvoid\n                                        cc_default))\n      ((Eaddrof (Evar _one (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) :: (Econst_int (Int.repr 1) tint) ::\n       nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_ecmult (Tfunction\n                                  (Tcons (tptr (Tstruct __3156 noattr))\n                                    (Tcons (tptr (Tstruct __3156 noattr))\n                                      (Tcons (tptr (Tstruct __2843 noattr))\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          Tnil)))) tvoid cc_default))\n        ((Eaddrof (Evar _pt (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _pt (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _one (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Etempvar _tweak (tptr (Tstruct __2843 noattr))) :: nil))\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_gej_is_infinity (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __3156 noattr))\n                                                 Tnil) tint cc_default))\n            ((Eaddrof (Evar _pt (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Sifthenelse (Etempvar _t'1 tint)\n            (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n            Sskip))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_ge_set_gej_var (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3154 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __3156 noattr))\n                                                  Tnil)) tvoid cc_default))\n            ((Etempvar _key (tptr (Tstruct __3154 noattr))) ::\n             (Eaddrof (Evar _pt (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_secp256k1_umul128 := {|\n  fn_return := tulong;\n  fn_callconv := cc_default;\n  fn_params := ((_a, tulong) :: (_b, tulong) :: (_hi, (tptr tulong)) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_ll, tulong) :: (_lh, tulong) :: (_hl, tulong) ::\n               (_hh, tulong) :: (_mid34, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _ll\n    (Ebinop Omul (Ecast (Ecast (Etempvar _a tulong) tuint) tulong)\n      (Ecast (Etempvar _b tulong) tuint) tulong))\n  (Ssequence\n    (Sset _lh\n      (Ebinop Omul (Ecast (Etempvar _a tulong) tuint)\n        (Ebinop Oshr (Etempvar _b tulong) (Econst_int (Int.repr 32) tint)\n          tulong) tulong))\n    (Ssequence\n      (Sset _hl\n        (Ebinop Omul\n          (Ebinop Oshr (Etempvar _a tulong) (Econst_int (Int.repr 32) tint)\n            tulong) (Ecast (Etempvar _b tulong) tuint) tulong))\n      (Ssequence\n        (Sset _hh\n          (Ebinop Omul\n            (Ebinop Oshr (Etempvar _a tulong) (Econst_int (Int.repr 32) tint)\n              tulong)\n            (Ebinop Oshr (Etempvar _b tulong) (Econst_int (Int.repr 32) tint)\n              tulong) tulong))\n        (Ssequence\n          (Sset _mid34\n            (Ebinop Oadd\n              (Ebinop Oadd\n                (Ebinop Oshr (Etempvar _ll tulong)\n                  (Econst_int (Int.repr 32) tint) tulong)\n                (Ecast (Etempvar _lh tulong) tuint) tulong)\n              (Ecast (Etempvar _hl tulong) tuint) tulong))\n          (Ssequence\n            (Sassign (Ederef (Etempvar _hi (tptr tulong)) tulong)\n              (Ebinop Oadd\n                (Ebinop Oadd\n                  (Ebinop Oadd (Etempvar _hh tulong)\n                    (Ebinop Oshr (Etempvar _lh tulong)\n                      (Econst_int (Int.repr 32) tint) tulong) tulong)\n                  (Ebinop Oshr (Etempvar _hl tulong)\n                    (Econst_int (Int.repr 32) tint) tulong) tulong)\n                (Ebinop Oshr (Etempvar _mid34 tulong)\n                  (Econst_int (Int.repr 32) tint) tulong) tulong))\n            (Sreturn (Some (Ebinop Oadd\n                             (Ebinop Oshl (Etempvar _mid34 tulong)\n                               (Econst_int (Int.repr 32) tint) tulong)\n                             (Ecast (Etempvar _ll tulong) tuint) tulong)))))))))\n|}.\n\nDefinition f_secp256k1_mul128 := {|\n  fn_return := tulong;\n  fn_callconv := cc_default;\n  fn_params := ((_a, tlong) :: (_b, tlong) :: (_hi, (tptr tlong)) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_ll, tulong) :: (_lh, tlong) :: (_hl, tlong) ::\n               (_hh, tlong) :: (_mid34, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _ll\n    (Ebinop Omul (Ecast (Ecast (Etempvar _a tlong) tuint) tulong)\n      (Ecast (Etempvar _b tlong) tuint) tulong))\n  (Ssequence\n    (Sset _lh\n      (Ebinop Omul (Ecast (Etempvar _a tlong) tuint)\n        (Ebinop Oshr (Etempvar _b tlong) (Econst_int (Int.repr 32) tint)\n          tlong) tlong))\n    (Ssequence\n      (Sset _hl\n        (Ebinop Omul\n          (Ebinop Oshr (Etempvar _a tlong) (Econst_int (Int.repr 32) tint)\n            tlong) (Ecast (Etempvar _b tlong) tuint) tlong))\n      (Ssequence\n        (Sset _hh\n          (Ebinop Omul\n            (Ebinop Oshr (Etempvar _a tlong) (Econst_int (Int.repr 32) tint)\n              tlong)\n            (Ebinop Oshr (Etempvar _b tlong) (Econst_int (Int.repr 32) tint)\n              tlong) tlong))\n        (Ssequence\n          (Sset _mid34\n            (Ebinop Oadd\n              (Ebinop Oadd\n                (Ebinop Oshr (Etempvar _ll tulong)\n                  (Econst_int (Int.repr 32) tint) tulong)\n                (Ecast (Etempvar _lh tlong) tuint) tulong)\n              (Ecast (Etempvar _hl tlong) tuint) tulong))\n          (Ssequence\n            (Sassign (Ederef (Etempvar _hi (tptr tlong)) tlong)\n              (Ebinop Oadd\n                (Ebinop Oadd\n                  (Ebinop Oadd (Etempvar _hh tlong)\n                    (Ebinop Oshr (Etempvar _lh tlong)\n                      (Econst_int (Int.repr 32) tint) tlong) tlong)\n                  (Ebinop Oshr (Etempvar _hl tlong)\n                    (Econst_int (Int.repr 32) tint) tlong) tlong)\n                (Ecast\n                  (Ebinop Oshr (Etempvar _mid34 tulong)\n                    (Econst_int (Int.repr 32) tint) tulong) tlong) tlong))\n            (Sreturn (Some (Ebinop Oadd\n                             (Ebinop Oshl (Etempvar _mid34 tulong)\n                               (Econst_int (Int.repr 32) tint) tulong)\n                             (Ecast (Etempvar _ll tulong) tuint) tulong)))))))))\n|}.\n\nDefinition f_secp256k1_u128_mul := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tulong) :: (_b, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall (Some _t'1)\n    (Evar _secp256k1_umul128 (Tfunction\n                               (Tcons tulong\n                                 (Tcons tulong (Tcons (tptr tulong) Tnil)))\n                               tulong cc_default))\n    ((Etempvar _a tulong) :: (Etempvar _b tulong) ::\n     (Eaddrof\n       (Efield\n         (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n           (Tstruct _secp256k1_uint128 noattr)) _hi tulong) (tptr tulong)) ::\n     nil))\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n    (Etempvar _t'1 tulong)))\n|}.\n\nDefinition f_secp256k1_u128_accum_mul := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tulong) :: (_b, tulong) :: nil);\n  fn_vars := ((_hi, tulong) :: nil);\n  fn_temps := ((_lo, tulong) :: (_t'1, tulong) :: (_t'5, tulong) ::\n               (_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_umul128 (Tfunction\n                                 (Tcons tulong\n                                   (Tcons tulong (Tcons (tptr tulong) Tnil)))\n                                 tulong cc_default))\n      ((Etempvar _a tulong) :: (Etempvar _b tulong) ::\n       (Eaddrof (Evar _hi tulong) (tptr tulong)) :: nil))\n    (Sset _lo (Etempvar _t'1 tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'5\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n        (Ebinop Oadd (Etempvar _t'5 tulong) (Etempvar _lo tulong) tulong)))\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n      (Ssequence\n        (Sset _t'3 (Evar _hi tulong))\n        (Ssequence\n          (Sset _t'4\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n          (Sassign\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n            (Ebinop Oadd (Etempvar _t'2 tulong)\n              (Ebinop Oadd (Etempvar _t'3 tulong)\n                (Ebinop Olt (Etempvar _t'4 tulong) (Etempvar _lo tulong)\n                  tint) tulong) tulong)))))))\n|}.\n\nDefinition f_secp256k1_u128_accum_u64 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'3\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n          (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n          (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n      (Ebinop Oadd (Etempvar _t'3 tulong) (Etempvar _a tulong) tulong)))\n  (Ssequence\n    (Sset _t'1\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n          (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n        (Ebinop Oadd (Etempvar _t'1 tulong)\n          (Ebinop Olt (Etempvar _t'2 tulong) (Etempvar _a tulong) tint)\n          tulong)))))\n|}.\n\nDefinition f_secp256k1_u128_rshift := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_n, tuint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'5, (tptr (Tstruct __IO_FILE noattr))) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Olt (Etempvar _n tuint)\n                     (Econst_int (Int.repr 128) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'5 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_159 (tarray tschar 31)) ::\n               (Econst_int (Int.repr 79) tint) ::\n               (Evar ___stringlit_158 (tarray tschar 31)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Sifthenelse (Ebinop Oge (Etempvar _n tuint)\n                 (Econst_int (Int.repr 64) tint) tint)\n    (Ssequence\n      (Ssequence\n        (Sset _t'4\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n          (Ebinop Oshr (Etempvar _t'4 tulong)\n            (Ebinop Osub (Etempvar _n tuint) (Econst_int (Int.repr 64) tint)\n              tuint) tulong)))\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n        (Econst_int (Int.repr 0) tint)))\n    (Sifthenelse (Ebinop Ogt (Etempvar _n tuint)\n                   (Econst_int (Int.repr 0) tint) tint)\n      (Ssequence\n        (Ssequence\n          (Sset _t'2\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n          (Ssequence\n            (Sset _t'3\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n            (Sassign\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n              (Ebinop Oor\n                (Ebinop Oshl\n                  (Ebinop Omul (Econst_int (Int.repr 1) tuint)\n                    (Etempvar _t'2 tulong) tulong)\n                  (Ebinop Osub (Econst_int (Int.repr 64) tint)\n                    (Etempvar _n tuint) tuint) tulong)\n                (Ebinop Oshr (Etempvar _t'3 tulong) (Etempvar _n tuint)\n                  tulong) tulong))))\n        (Ssequence\n          (Sset _t'1\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n          (Sassign\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n            (Ebinop Oshr (Etempvar _t'1 tulong) (Etempvar _n tuint) tulong))))\n      Sskip)))\n|}.\n\nDefinition f_secp256k1_u128_to_u64 := {|\n  fn_return := tulong;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n  (Sreturn (Some (Etempvar _t'1 tulong))))\n|}.\n\nDefinition f_secp256k1_u128_hi_u64 := {|\n  fn_return := tulong;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n  (Sreturn (Some (Etempvar _t'1 tulong))))\n|}.\n\nDefinition f_secp256k1_u128_from_u64 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tulong) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n    (Econst_int (Int.repr 0) tint))\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n    (Etempvar _a tulong)))\n|}.\n\nDefinition f_secp256k1_u128_check_bits := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_n, tuint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: (_t'5, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Olt (Etempvar _n tuint)\n                     (Econst_int (Int.repr 128) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'5 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'5 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_159 (tarray tschar 31)) ::\n               (Econst_int (Int.repr 103) tint) ::\n               (Evar ___stringlit_158 (tarray tschar 31)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sifthenelse (Ebinop Oge (Etempvar _n tuint)\n                   (Econst_int (Int.repr 64) tint) tint)\n      (Ssequence\n        (Sset _t'4\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n        (Sset _t'1\n          (Ecast\n            (Ebinop Oeq\n              (Ebinop Oshr (Etempvar _t'4 tulong)\n                (Ebinop Osub (Etempvar _n tuint)\n                  (Econst_int (Int.repr 64) tint) tuint) tulong)\n              (Econst_int (Int.repr 0) tint) tint) tint)))\n      (Ssequence\n        (Sset _t'2\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n        (Sifthenelse (Ebinop Oeq (Etempvar _t'2 tulong)\n                       (Econst_int (Int.repr 0) tint) tint)\n          (Ssequence\n            (Ssequence\n              (Sset _t'3\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                    (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n              (Sset _t'1\n                (Ecast\n                  (Ebinop Oeq\n                    (Ebinop Oshr (Etempvar _t'3 tulong) (Etempvar _n tuint)\n                      tulong) (Econst_int (Int.repr 0) tint) tint) tbool)))\n            (Sset _t'1 (Ecast (Etempvar _t'1 tint) tint)))\n          (Sset _t'1 (Ecast (Econst_int (Int.repr 0) tint) tint)))))\n    (Sreturn (Some (Etempvar _t'1 tint)))))\n|}.\n\nDefinition f_secp256k1_i128_mul := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tlong) :: (_b, tlong) :: nil);\n  fn_vars := ((_hi, tlong) :: nil);\n  fn_temps := ((_t'1, tulong) :: (_t'2, tlong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_mul128 (Tfunction\n                                (Tcons tlong\n                                  (Tcons tlong (Tcons (tptr tlong) Tnil)))\n                                tulong cc_default))\n      ((Etempvar _a tlong) :: (Etempvar _b tlong) ::\n       (Eaddrof (Evar _hi tlong) (tptr tlong)) :: nil))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n          (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n      (Etempvar _t'1 tulong)))\n  (Ssequence\n    (Sset _t'2 (Evar _hi tlong))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n          (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n      (Ecast (Etempvar _t'2 tlong) tulong))))\n|}.\n\nDefinition f_secp256k1_i128_accum_mul := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tlong) :: (_b, tlong) :: nil);\n  fn_vars := ((_hi, tlong) :: nil);\n  fn_temps := ((_lo, tulong) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tulong) :: (_t'18, tulong) :: (_t'17, tulong) ::\n               (_t'16, tlong) :: (_t'15, tlong) :: (_t'14, tulong) ::\n               (_t'13, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'12, tlong) :: (_t'11, tulong) :: (_t'10, tlong) ::\n               (_t'9, tulong) :: (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'7, tlong) :: (_t'6, tulong) :: (_t'5, tlong) ::\n               (_t'4, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_mul128 (Tfunction\n                                (Tcons tlong\n                                  (Tcons tlong (Tcons (tptr tlong) Tnil)))\n                                tulong cc_default))\n      ((Etempvar _a tlong) :: (Etempvar _b tlong) ::\n       (Eaddrof (Evar _hi tlong) (tptr tlong)) :: nil))\n    (Sset _lo (Etempvar _t'1 tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'18\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n      (Sassign\n        (Efield\n          (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n        (Ebinop Oadd (Etempvar _t'18 tulong) (Etempvar _lo tulong) tulong)))\n    (Ssequence\n      (Ssequence\n        (Sset _t'16 (Evar _hi tlong))\n        (Ssequence\n          (Sset _t'17\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n          (Sassign (Evar _hi tlong)\n            (Ebinop Oadd (Etempvar _t'16 tlong)\n              (Ebinop Olt (Etempvar _t'17 tulong) (Etempvar _lo tulong) tint)\n              tlong))))\n      (Ssequence\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'14\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                    (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n              (Sifthenelse (Ebinop Ole (Etempvar _t'14 tulong)\n                             (Econst_long (Int64.repr 9223372036854775807) tulong)\n                             tint)\n                (Ssequence\n                  (Sset _t'15 (Evar _hi tlong))\n                  (Sset _t'2\n                    (Ecast\n                      (Ebinop Ole (Ecast (Etempvar _t'15 tlong) tulong)\n                        (Econst_long (Int64.repr 9223372036854775807) tulong)\n                        tint) tbool)))\n                (Sset _t'2 (Econst_int (Int.repr 0) tint))))\n            (Ssequence\n              (Sset _t'11\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                    (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n              (Ssequence\n                (Sset _t'12 (Evar _hi tlong))\n                (Sifthenelse (Eunop Onotbool\n                               (Ebinop Ole (Etempvar _t'2 tint)\n                                 (Ebinop Ole\n                                   (Ebinop Oadd (Etempvar _t'11 tulong)\n                                     (Ecast (Etempvar _t'12 tlong) tulong)\n                                     tulong)\n                                   (Econst_long (Int64.repr 9223372036854775807) tulong)\n                                   tint) tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'13\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'13 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_159 (tarray tschar 31)) ::\n                           (Econst_int (Int.repr 129) tint) ::\n                           (Evar ___stringlit_160 (tarray tschar 142)) ::\n                           nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip))))\n          Sbreak)\n        (Ssequence\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'9\n                  (Efield\n                    (Ederef\n                      (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                      (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n                (Sifthenelse (Ebinop Ogt (Etempvar _t'9 tulong)\n                               (Econst_long (Int64.repr 9223372036854775807) tulong)\n                               tint)\n                  (Ssequence\n                    (Sset _t'10 (Evar _hi tlong))\n                    (Sset _t'3\n                      (Ecast\n                        (Ebinop Ogt (Ecast (Etempvar _t'10 tlong) tulong)\n                          (Econst_long (Int64.repr 9223372036854775807) tulong)\n                          tint) tbool)))\n                  (Sset _t'3 (Econst_int (Int.repr 0) tint))))\n              (Ssequence\n                (Sset _t'6\n                  (Efield\n                    (Ederef\n                      (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                      (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n                (Ssequence\n                  (Sset _t'7 (Evar _hi tlong))\n                  (Sifthenelse (Eunop Onotbool\n                                 (Ebinop Ole (Etempvar _t'3 tint)\n                                   (Ebinop Ogt\n                                     (Ebinop Oadd (Etempvar _t'6 tulong)\n                                       (Ecast (Etempvar _t'7 tlong) tulong)\n                                       tulong)\n                                     (Econst_long (Int64.repr 9223372036854775807) tulong)\n                                     tint) tint) tint)\n                    (Sloop\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'8\n                            (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                          (Scall None\n                            (Evar _fprintf (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __IO_FILE noattr))\n                                               (Tcons (tptr tschar) Tnil))\n                                             tint\n                                             {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                            ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n                             (Evar ___stringlit_6 (tarray tschar 11)) ::\n                             (Evar ___stringlit_159 (tarray tschar 31)) ::\n                             (Econst_int (Int.repr 134) tint) ::\n                             (Evar ___stringlit_161 (tarray tschar 139)) ::\n                             nil)))\n                        (Scall None\n                          (Evar _abort (Tfunction Tnil tvoid cc_default))\n                          nil))\n                      Sbreak)\n                    Sskip))))\n            Sbreak)\n          (Ssequence\n            (Sset _t'4\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n            (Ssequence\n              (Sset _t'5 (Evar _hi tlong))\n              (Sassign\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                    (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n                (Ebinop Oadd (Etempvar _t'4 tulong)\n                  (Ecast (Etempvar _t'5 tlong) tulong) tulong)))))))))\n|}.\n\nDefinition f_secp256k1_i128_dissip_mul := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tlong) :: (_b, tlong) :: nil);\n  fn_vars := ((_hi, tlong) :: nil);\n  fn_temps := ((_lo, tulong) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tulong) :: (_t'18, tulong) :: (_t'17, tlong) ::\n               (_t'16, tlong) :: (_t'15, tulong) ::\n               (_t'14, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'13, tlong) :: (_t'12, tulong) :: (_t'11, tlong) ::\n               (_t'10, tulong) ::\n               (_t'9, (tptr (Tstruct __IO_FILE noattr))) :: (_t'8, tlong) ::\n               (_t'7, tulong) :: (_t'6, tlong) :: (_t'5, tulong) ::\n               (_t'4, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_mul128 (Tfunction\n                                (Tcons tlong\n                                  (Tcons tlong (Tcons (tptr tlong) Tnil)))\n                                tulong cc_default))\n      ((Etempvar _a tlong) :: (Etempvar _b tlong) ::\n       (Eaddrof (Evar _hi tlong) (tptr tlong)) :: nil))\n    (Sset _lo (Etempvar _t'1 tulong)))\n  (Ssequence\n    (Ssequence\n      (Sset _t'17 (Evar _hi tlong))\n      (Ssequence\n        (Sset _t'18\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n        (Sassign (Evar _hi tlong)\n          (Ebinop Oadd (Etempvar _t'17 tlong)\n            (Ebinop Olt (Etempvar _t'18 tulong) (Etempvar _lo tulong) tint)\n            tlong))))\n    (Ssequence\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'15\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n            (Sifthenelse (Ebinop Ole (Etempvar _t'15 tulong)\n                           (Econst_long (Int64.repr 9223372036854775807) tulong)\n                           tint)\n              (Ssequence\n                (Sset _t'16 (Evar _hi tlong))\n                (Sset _t'2\n                  (Ecast\n                    (Ebinop Ogt (Ecast (Etempvar _t'16 tlong) tulong)\n                      (Econst_long (Int64.repr 9223372036854775807) tulong)\n                      tint) tbool)))\n              (Sset _t'2 (Econst_int (Int.repr 0) tint))))\n          (Ssequence\n            (Sset _t'12\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n            (Ssequence\n              (Sset _t'13 (Evar _hi tlong))\n              (Sifthenelse (Eunop Onotbool\n                             (Ebinop Ole (Etempvar _t'2 tint)\n                               (Ebinop Ole\n                                 (Ebinop Osub (Etempvar _t'12 tulong)\n                                   (Ecast (Etempvar _t'13 tlong) tulong)\n                                   tulong)\n                                 (Econst_long (Int64.repr 9223372036854775807) tulong)\n                                 tint) tint) tint)\n                (Sloop\n                  (Ssequence\n                    (Ssequence\n                      (Sset _t'14\n                        (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                      (Scall None\n                        (Evar _fprintf (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __IO_FILE noattr))\n                                           (Tcons (tptr tschar) Tnil)) tint\n                                         {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                        ((Etempvar _t'14 (tptr (Tstruct __IO_FILE noattr))) ::\n                         (Evar ___stringlit_6 (tarray tschar 11)) ::\n                         (Evar ___stringlit_159 (tarray tschar 31)) ::\n                         (Econst_int (Int.repr 146) tint) ::\n                         (Evar ___stringlit_162 (tarray tschar 141)) :: nil)))\n                    (Scall None\n                      (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                  Sbreak)\n                Sskip))))\n        Sbreak)\n      (Ssequence\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'10\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                    (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n              (Sifthenelse (Ebinop Ogt (Etempvar _t'10 tulong)\n                             (Econst_long (Int64.repr 9223372036854775807) tulong)\n                             tint)\n                (Ssequence\n                  (Sset _t'11 (Evar _hi tlong))\n                  (Sset _t'3\n                    (Ecast\n                      (Ebinop Ole (Ecast (Etempvar _t'11 tlong) tulong)\n                        (Econst_long (Int64.repr 9223372036854775807) tulong)\n                        tint) tbool)))\n                (Sset _t'3 (Econst_int (Int.repr 0) tint))))\n            (Ssequence\n              (Sset _t'7\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                    (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n              (Ssequence\n                (Sset _t'8 (Evar _hi tlong))\n                (Sifthenelse (Eunop Onotbool\n                               (Ebinop Ole (Etempvar _t'3 tint)\n                                 (Ebinop Ogt\n                                   (Ebinop Osub (Etempvar _t'7 tulong)\n                                     (Ecast (Etempvar _t'8 tlong) tulong)\n                                     tulong)\n                                   (Econst_long (Int64.repr 9223372036854775807) tulong)\n                                   tint) tint) tint)\n                  (Sloop\n                    (Ssequence\n                      (Ssequence\n                        (Sset _t'9\n                          (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                        (Scall None\n                          (Evar _fprintf (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __IO_FILE noattr))\n                                             (Tcons (tptr tschar) Tnil)) tint\n                                           {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                          ((Etempvar _t'9 (tptr (Tstruct __IO_FILE noattr))) ::\n                           (Evar ___stringlit_6 (tarray tschar 11)) ::\n                           (Evar ___stringlit_159 (tarray tschar 31)) ::\n                           (Econst_int (Int.repr 151) tint) ::\n                           (Evar ___stringlit_163 (tarray tschar 140)) ::\n                           nil)))\n                      (Scall None\n                        (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n                    Sbreak)\n                  Sskip))))\n          Sbreak)\n        (Ssequence\n          (Ssequence\n            (Sset _t'5\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n            (Ssequence\n              (Sset _t'6 (Evar _hi tlong))\n              (Sassign\n                (Efield\n                  (Ederef\n                    (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                    (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n                (Ebinop Osub (Etempvar _t'5 tulong)\n                  (Ecast (Etempvar _t'6 tlong) tulong) tulong))))\n          (Ssequence\n            (Sset _t'4\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n            (Sassign\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n              (Ebinop Osub (Etempvar _t'4 tulong) (Etempvar _lo tulong)\n                tulong))))))))\n|}.\n\nDefinition f_secp256k1_i128_det := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tlong) :: (_b, tlong) :: (_c, tlong) :: (_d, tlong) ::\n                nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_i128_mul (Tfunction\n                                (Tcons\n                                  (tptr (Tstruct _secp256k1_uint128 noattr))\n                                  (Tcons tlong (Tcons tlong Tnil))) tvoid\n                                cc_default))\n    ((Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n     (Etempvar _a tlong) :: (Etempvar _d tlong) :: nil))\n  (Scall None\n    (Evar _secp256k1_i128_dissip_mul (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct _secp256k1_uint128 noattr))\n                                         (Tcons tlong (Tcons tlong Tnil)))\n                                       tvoid cc_default))\n    ((Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n     (Etempvar _b tlong) :: (Etempvar _c tlong) :: nil)))\n|}.\n\nDefinition f_secp256k1_i128_rshift := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_n, tuint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'6, (tptr (Tstruct __IO_FILE noattr))) :: (_t'5, tulong) ::\n               (_t'4, tulong) :: (_t'3, tulong) :: (_t'2, tulong) ::\n               (_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Olt (Etempvar _n tuint)\n                     (Econst_int (Int.repr 128) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'6 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'6 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_159 (tarray tschar 31)) ::\n               (Econst_int (Int.repr 165) tint) ::\n               (Evar ___stringlit_158 (tarray tschar 31)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Sifthenelse (Ebinop Oge (Etempvar _n tuint)\n                 (Econst_int (Int.repr 64) tint) tint)\n    (Ssequence\n      (Ssequence\n        (Sset _t'5\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n          (Ecast\n            (Ebinop Oshr (Ecast (Etempvar _t'5 tulong) tlong)\n              (Ebinop Osub (Etempvar _n tuint)\n                (Econst_int (Int.repr 64) tint) tuint) tlong) tulong)))\n      (Ssequence\n        (Sset _t'4\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n          (Ecast\n            (Ebinop Oshr (Ecast (Etempvar _t'4 tulong) tlong)\n              (Econst_int (Int.repr 63) tint) tlong) tulong))))\n    (Sifthenelse (Ebinop Ogt (Etempvar _n tuint)\n                   (Econst_int (Int.repr 0) tint) tint)\n      (Ssequence\n        (Ssequence\n          (Sset _t'2\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n          (Ssequence\n            (Sset _t'3\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n            (Sassign\n              (Efield\n                (Ederef\n                  (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n              (Ebinop Oor\n                (Ebinop Oshl\n                  (Ebinop Omul (Econst_int (Int.repr 1) tuint)\n                    (Etempvar _t'2 tulong) tulong)\n                  (Ebinop Osub (Econst_int (Int.repr 64) tint)\n                    (Etempvar _n tuint) tuint) tulong)\n                (Ebinop Oshr (Etempvar _t'3 tulong) (Etempvar _n tuint)\n                  tulong) tulong))))\n        (Ssequence\n          (Sset _t'1\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n          (Sassign\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n            (Ecast\n              (Ebinop Oshr (Ecast (Etempvar _t'1 tulong) tlong)\n                (Etempvar _n tuint) tlong) tulong))))\n      Sskip)))\n|}.\n\nDefinition f_secp256k1_i128_to_u64 := {|\n  fn_return := tulong;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _t'1\n    (Efield\n      (Ederef (Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n  (Sreturn (Some (Etempvar _t'1 tulong))))\n|}.\n\nDefinition f_secp256k1_i128_to_i64 := {|\n  fn_return := tlong;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tulong) :: (_t'4, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Sset _t'2\n        (Efield\n          (Ederef (Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n      (Ssequence\n        (Sset _t'3\n          (Efield\n            (Ederef (Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr)))\n              (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop Oeq (Etempvar _t'2 tulong)\n                         (Eunop Oneg\n                           (Ebinop Oshr (Etempvar _t'3 tulong)\n                             (Econst_int (Int.repr 63) tint) tulong) tulong)\n                         tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'4 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_159 (tarray tschar 31)) ::\n                   (Econst_int (Int.repr 181) tint) ::\n                   (Evar ___stringlit_164 (tarray tschar 47)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip)))\n    Sbreak)\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_i128_to_u64 (Tfunction\n                                     (Tcons\n                                       (tptr (Tstruct _secp256k1_uint128 noattr))\n                                       Tnil) tulong cc_default))\n      ((Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil))\n    (Sreturn (Some (Ecast (Etempvar _t'1 tulong) tlong)))))\n|}.\n\nDefinition f_secp256k1_i128_from_i64 := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_a, tlong) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _hi tulong)\n    (Ecast\n      (Ebinop Oshr (Etempvar _a tlong) (Econst_int (Int.repr 63) tint) tlong)\n      tulong))\n  (Sassign\n    (Efield\n      (Ederef (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n        (Tstruct _secp256k1_uint128 noattr)) _lo tulong)\n    (Ecast (Etempvar _a tlong) tulong)))\n|}.\n\nDefinition f_secp256k1_i128_eq_var := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_b, (tptr (Tstruct _secp256k1_uint128 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: (_t'5, tulong) :: (_t'4, tulong) ::\n               (_t'3, tulong) :: (_t'2, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Sset _t'2\n      (Efield\n        (Ederef (Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr)))\n          (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n    (Ssequence\n      (Sset _t'3\n        (Efield\n          (Ederef (Etempvar _b (tptr (Tstruct _secp256k1_uint128 noattr)))\n            (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n      (Sifthenelse (Ebinop Oeq (Etempvar _t'2 tulong) (Etempvar _t'3 tulong)\n                     tint)\n        (Ssequence\n          (Sset _t'4\n            (Efield\n              (Ederef\n                (Etempvar _a (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n          (Ssequence\n            (Sset _t'5\n              (Efield\n                (Ederef\n                  (Etempvar _b (tptr (Tstruct _secp256k1_uint128 noattr)))\n                  (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n            (Sset _t'1\n              (Ecast\n                (Ebinop Oeq (Etempvar _t'4 tulong) (Etempvar _t'5 tulong)\n                  tint) tbool))))\n        (Sset _t'1 (Econst_int (Int.repr 0) tint)))))\n  (Sreturn (Some (Etempvar _t'1 tint))))\n|}.\n\nDefinition f_secp256k1_i128_check_pow2 := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct _secp256k1_uint128 noattr))) ::\n                (_n, tuint) :: (_sign, tint) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) ::\n               (_t'8, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'7, (tptr (Tstruct __IO_FILE noattr))) :: (_t'6, tulong) ::\n               (_t'5, tulong) :: (_t'4, tulong) :: (_t'3, tulong) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop Olt (Etempvar _n tuint)\n                     (Econst_int (Int.repr 127) tint) tint) tint)\n      (Sloop\n        (Ssequence\n          (Ssequence\n            (Sset _t'8 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n            (Scall None\n              (Evar _fprintf (Tfunction\n                               (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                 (Tcons (tptr tschar) Tnil)) tint\n                               {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n              ((Etempvar _t'8 (tptr (Tstruct __IO_FILE noattr))) ::\n               (Evar ___stringlit_6 (tarray tschar 11)) ::\n               (Evar ___stringlit_159 (tarray tschar 31)) ::\n               (Econst_int (Int.repr 195) tint) ::\n               (Evar ___stringlit_165 (tarray tschar 31)) :: nil)))\n          (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n        Sbreak)\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Ssequence\n        (Sifthenelse (Ebinop Oeq (Etempvar _sign tint)\n                       (Econst_int (Int.repr 1) tint) tint)\n          (Sset _t'1 (Econst_int (Int.repr 1) tint))\n          (Sset _t'1\n            (Ecast\n              (Ebinop Oeq (Etempvar _sign tint)\n                (Eunop Oneg (Econst_int (Int.repr 1) tint) tint) tint) tbool)))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'7 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'7 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_159 (tarray tschar 31)) ::\n                   (Econst_int (Int.repr 196) tint) ::\n                   (Evar ___stringlit_166 (tarray tschar 47)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip))\n      Sbreak)\n    (Ssequence\n      (Sifthenelse (Ebinop Oge (Etempvar _n tuint)\n                     (Econst_int (Int.repr 64) tint) tint)\n        (Ssequence\n          (Sset _t'5\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n          (Sifthenelse (Ebinop Oeq (Etempvar _t'5 tulong)\n                         (Ebinop Oshl (Ecast (Etempvar _sign tint) tulong)\n                           (Ebinop Osub (Etempvar _n tuint)\n                             (Econst_int (Int.repr 64) tint) tuint) tulong)\n                         tint)\n            (Ssequence\n              (Ssequence\n                (Sset _t'6\n                  (Efield\n                    (Ederef\n                      (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                      (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n                (Sset _t'2\n                  (Ecast\n                    (Ebinop Oeq (Etempvar _t'6 tulong)\n                      (Econst_int (Int.repr 0) tint) tint) tbool)))\n              (Sset _t'2 (Ecast (Etempvar _t'2 tint) tint)))\n            (Sset _t'2 (Ecast (Econst_int (Int.repr 0) tint) tint))))\n        (Ssequence\n          (Sset _t'3\n            (Efield\n              (Ederef\n                (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                (Tstruct _secp256k1_uint128 noattr)) _hi tulong))\n          (Sifthenelse (Ebinop Oeq (Etempvar _t'3 tulong)\n                         (Ecast\n                           (Ebinop Oshr\n                             (Ebinop Osub (Etempvar _sign tint)\n                               (Econst_int (Int.repr 1) tint) tint)\n                             (Econst_int (Int.repr 1) tint) tint) tulong)\n                         tint)\n            (Ssequence\n              (Ssequence\n                (Sset _t'4\n                  (Efield\n                    (Ederef\n                      (Etempvar _r (tptr (Tstruct _secp256k1_uint128 noattr)))\n                      (Tstruct _secp256k1_uint128 noattr)) _lo tulong))\n                (Sset _t'2\n                  (Ecast\n                    (Ebinop Oeq (Etempvar _t'4 tulong)\n                      (Ebinop Oshl (Ecast (Etempvar _sign tint) tulong)\n                        (Etempvar _n tuint) tulong) tint) tbool)))\n              (Sset _t'2 (Ecast (Etempvar _t'2 tint) tint)))\n            (Sset _t'2 (Ecast (Econst_int (Int.repr 0) tint) tint)))))\n      (Sreturn (Some (Etempvar _t'2 tint))))))\n|}.\n\nDefinition f_secp256k1_pubkey_load := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_ge, (tptr (Tstruct __3154 noattr))) ::\n                (_pubkey, (tptr (Tstruct __2064 noattr))) :: nil);\n  fn_vars := ((_s, (Tstruct __3158 noattr)) ::\n              (_x, (Tstruct __2380 noattr)) ::\n              (_y, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sifthenelse (Ebinop Oeq (Esizeof (Tstruct __3158 noattr) tulong)\n                 (Econst_int (Int.repr 64) tint) tint)\n    (Ssequence\n      (Scall None\n        (Evar _memcpy (Tfunction\n                        (Tcons (tptr tvoid)\n                          (Tcons (tptr tvoid) (Tcons tulong Tnil)))\n                        (tptr tvoid) cc_default))\n        ((Eaddrof (Evar _s (Tstruct __3158 noattr))\n           (tptr (Tstruct __3158 noattr))) ::\n         (Ebinop Oadd\n           (Efield\n             (Ederef (Etempvar _pubkey (tptr (Tstruct __2064 noattr)))\n               (Tstruct __2064 noattr)) _data (tarray tuchar 64))\n           (Econst_int (Int.repr 0) tint) (tptr tuchar)) ::\n         (Esizeof (Tstruct __3158 noattr) tulong) :: nil))\n      (Scall None\n        (Evar _secp256k1_ge_from_storage (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __3154 noattr))\n                                             (Tcons\n                                               (tptr (Tstruct __3158 noattr))\n                                               Tnil)) tvoid cc_default))\n        ((Etempvar _ge (tptr (Tstruct __3154 noattr))) ::\n         (Eaddrof (Evar _s (Tstruct __3158 noattr))\n           (tptr (Tstruct __3158 noattr))) :: nil)))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_set_b32 (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr tuchar) Tnil)) tint\n                                      cc_default))\n        ((Eaddrof (Evar _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Efield\n           (Ederef (Etempvar _pubkey (tptr (Tstruct __2064 noattr)))\n             (Tstruct __2064 noattr)) _data (tarray tuchar 64)) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_set_b32 (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons (tptr tuchar) Tnil)) tint\n                                        cc_default))\n          ((Eaddrof (Evar _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Ebinop Oadd\n             (Efield\n               (Ederef (Etempvar _pubkey (tptr (Tstruct __2064 noattr)))\n                 (Tstruct __2064 noattr)) _data (tarray tuchar 64))\n             (Econst_int (Int.repr 32) tint) (tptr tuchar)) :: nil))\n        (Scall None\n          (Evar _secp256k1_ge_set_xy (Tfunction\n                                       (Tcons (tptr (Tstruct __3154 noattr))\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             Tnil))) tvoid cc_default))\n          ((Etempvar _ge (tptr (Tstruct __3154 noattr))) ::\n           (Eaddrof (Evar _x (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil)))))\n  (Ssequence\n    (Sloop\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_fe_is_zero (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil) tint cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sifthenelse (Eunop Onotbool\n                       (Eunop Onotbool (Etempvar _t'1 tint) tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip))\n      Sbreak)\n    (Sreturn (Some (Econst_int (Int.repr 1) tint)))))\n|}.\n\nDefinition f_secp256k1_pubkey_save := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_pubkey, (tptr (Tstruct __2064 noattr))) ::\n                (_ge, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := ((_s, (Tstruct __3158 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Sifthenelse (Ebinop Oeq (Esizeof (Tstruct __3158 noattr) tulong)\n               (Econst_int (Int.repr 64) tint) tint)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_ge_to_storage (Tfunction\n                                       (Tcons (tptr (Tstruct __3158 noattr))\n                                         (Tcons\n                                           (tptr (Tstruct __3154 noattr))\n                                           Tnil)) tvoid cc_default))\n      ((Eaddrof (Evar _s (Tstruct __3158 noattr))\n         (tptr (Tstruct __3158 noattr))) ::\n       (Etempvar _ge (tptr (Tstruct __3154 noattr))) :: nil))\n    (Scall None\n      (Evar _memcpy (Tfunction\n                      (Tcons (tptr tvoid)\n                        (Tcons (tptr tvoid) (Tcons tulong Tnil)))\n                      (tptr tvoid) cc_default))\n      ((Ebinop Oadd\n         (Efield\n           (Ederef (Etempvar _pubkey (tptr (Tstruct __2064 noattr)))\n             (Tstruct __2064 noattr)) _data (tarray tuchar 64))\n         (Econst_int (Int.repr 0) tint) (tptr tuchar)) ::\n       (Eaddrof (Evar _s (Tstruct __3158 noattr))\n         (tptr (Tstruct __3158 noattr))) ::\n       (Esizeof (Tstruct __3158 noattr) tulong) :: nil)))\n  (Ssequence\n    (Sloop\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_ge_is_infinity (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              Tnil) tint cc_default))\n          ((Etempvar _ge (tptr (Tstruct __3154 noattr))) :: nil))\n        (Sifthenelse (Eunop Onotbool\n                       (Eunop Onotbool (Etempvar _t'1 tint) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_168 (tarray tschar 27)) ::\n                   (Econst_int (Int.repr 59) tint) ::\n                   (Evar ___stringlit_167 (tarray tschar 53)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip))\n      Sbreak)\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_normalize_var (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil) tvoid cc_default))\n        ((Eaddrof\n           (Efield\n             (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n               (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_normalize_var (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil) tvoid cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_get_b32 (Tfunction\n                                          (Tcons (tptr tuchar)\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil)) tvoid cc_default))\n            ((Efield\n               (Ederef (Etempvar _pubkey (tptr (Tstruct __2064 noattr)))\n                 (Tstruct __2064 noattr)) _data (tarray tuchar 64)) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Scall None\n            (Evar _secp256k1_fe_get_b32 (Tfunction\n                                          (Tcons (tptr tuchar)\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil)) tvoid cc_default))\n            ((Ebinop Oadd\n               (Efield\n                 (Ederef (Etempvar _pubkey (tptr (Tstruct __2064 noattr)))\n                   (Tstruct __2064 noattr)) _data (tarray tuchar 64))\n               (Econst_int (Int.repr 32) tint) (tptr tuchar)) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                   (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil)))))))\n|}.\n\nDefinition f_secp256k1_ec_pubkey_tweak_add_helper := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_p, (tptr (Tstruct __3154 noattr))) ::\n                (_tweak32, (tptr tuchar)) :: nil);\n  fn_vars := ((_term, (Tstruct __2843 noattr)) :: (_overflow, tint) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) :: (_t'3, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _overflow tint) (Econst_int (Int.repr 0) tint))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_scalar_set_b32 (Tfunction\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons (tptr tuchar)\n                                            (Tcons (tptr tint) Tnil))) tvoid\n                                        cc_default))\n      ((Eaddrof (Evar _term (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Etempvar _tweak32 (tptr tuchar)) ::\n       (Eaddrof (Evar _overflow tint) (tptr tint)) :: nil))\n    (Ssequence\n      (Ssequence\n        (Sset _t'3 (Evar _overflow tint))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'3 tint) tint)\n          (Ssequence\n            (Scall (Some _t'2)\n              (Evar _secp256k1_eckey_pubkey_tweak_add (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __3154 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2843 noattr))\n                                                            Tnil)) tint\n                                                        cc_default))\n              ((Etempvar _p (tptr (Tstruct __3154 noattr))) ::\n               (Eaddrof (Evar _term (Tstruct __2843 noattr))\n                 (tptr (Tstruct __2843 noattr))) :: nil))\n            (Sset _t'1 (Ecast (Etempvar _t'2 tint) tbool)))\n          (Sset _t'1 (Econst_int (Int.repr 0) tint))))\n      (Sreturn (Some (Etempvar _t'1 tint))))))\n|}.\n\nDefinition f_secp256k1_xonly_pubkey_load := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_ge, (tptr (Tstruct __3154 noattr))) ::\n                (_pubkey, (tptr (Tstruct __3626 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall (Some _t'1)\n    (Evar _secp256k1_pubkey_load (Tfunction\n                                   (Tcons (tptr (Tstruct __3154 noattr))\n                                     (Tcons (tptr (Tstruct __2064 noattr))\n                                       Tnil)) tint cc_default))\n    ((Etempvar _ge (tptr (Tstruct __3154 noattr))) ::\n     (Ecast (Etempvar _pubkey (tptr (Tstruct __3626 noattr)))\n       (tptr (Tstruct __2064 noattr))) :: nil))\n  (Sreturn (Some (Etempvar _t'1 tint))))\n|}.\n\nDefinition f_secp256k1_xonly_pubkey_save := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_pubkey, (tptr (Tstruct __3626 noattr))) ::\n                (_ge, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Scall None\n  (Evar _secp256k1_pubkey_save (Tfunction\n                                 (Tcons (tptr (Tstruct __2064 noattr))\n                                   (Tcons (tptr (Tstruct __3154 noattr))\n                                     Tnil)) tvoid cc_default))\n  ((Ecast (Etempvar _pubkey (tptr (Tstruct __3626 noattr)))\n     (tptr (Tstruct __2064 noattr))) ::\n   (Etempvar _ge (tptr (Tstruct __3154 noattr))) :: nil))\n|}.\n\nDefinition f_secp256k1_xonly_pubkey_parse := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_pubkey, (tptr (Tstruct __3626 noattr))) ::\n                (_input32, (tptr tuchar)) :: nil);\n  fn_vars := ((_pk, (Tstruct __3154 noattr)) ::\n              (_x, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'3, tint) :: (_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One\n                     (Etempvar _pubkey (tptr (Tstruct __3626 noattr)))\n                     (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                     tint) tint)\n      (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _memset (Tfunction\n                      (Tcons (tptr tvoid) (Tcons tint (Tcons tulong Tnil)))\n                      (tptr tvoid) cc_default))\n      ((Etempvar _pubkey (tptr (Tstruct __3626 noattr))) ::\n       (Econst_int (Int.repr 0) tint) ::\n       (Esizeof (Tstruct __3626 noattr) tulong) :: nil))\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop One (Etempvar _input32 (tptr tuchar))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip)\n        Sbreak)\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_fe_set_b32 (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons (tptr tuchar) Tnil)) tint\n                                          cc_default))\n            ((Eaddrof (Evar _x (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Etempvar _input32 (tptr tuchar)) :: nil))\n          (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n            (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n            Sskip))\n        (Ssequence\n          (Ssequence\n            (Scall (Some _t'2)\n              (Evar _secp256k1_ge_set_xo_var (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __3154 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   (Tcons tint Tnil))) tint\n                                               cc_default))\n              ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) ::\n               (Eaddrof (Evar _x (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Econst_int (Int.repr 0) tint) :: nil))\n            (Sifthenelse (Eunop Onotbool (Etempvar _t'2 tint) tint)\n              (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n              Sskip))\n          (Ssequence\n            (Ssequence\n              (Scall (Some _t'3)\n                (Evar _secp256k1_ge_is_in_correct_subgroup (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __3154 noattr))\n                                                               Tnil) tint\n                                                             cc_default))\n                ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                   (tptr (Tstruct __3154 noattr))) :: nil))\n              (Sifthenelse (Eunop Onotbool (Etempvar _t'3 tint) tint)\n                (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                Sskip))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_xonly_pubkey_save (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __3626 noattr))\n                                                       (Tcons\n                                                         (tptr (Tstruct __3154 noattr))\n                                                         Tnil)) tvoid\n                                                     cc_default))\n                ((Etempvar _pubkey (tptr (Tstruct __3626 noattr))) ::\n                 (Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                   (tptr (Tstruct __3154 noattr))) :: nil))\n              (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))))\n|}.\n\nDefinition f_secp256k1_xonly_pubkey_serialize := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_output32, (tptr tuchar)) ::\n                (_pubkey, (tptr (Tstruct __3626 noattr))) :: nil);\n  fn_vars := ((_pk, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One (Etempvar _output32 (tptr tuchar))\n                     (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                     tint) tint)\n      (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _memset (Tfunction\n                      (Tcons (tptr tvoid) (Tcons tint (Tcons tulong Tnil)))\n                      (tptr tvoid) cc_default))\n      ((Etempvar _output32 (tptr tuchar)) ::\n       (Econst_int (Int.repr 0) tint) :: (Econst_int (Int.repr 32) tint) ::\n       nil))\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop One\n                         (Etempvar _pubkey (tptr (Tstruct __3626 noattr)))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip)\n        Sbreak)\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_xonly_pubkey_load (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __3154 noattr))\n                                                   (Tcons\n                                                     (tptr (Tstruct __3626 noattr))\n                                                     Tnil)) tint cc_default))\n            ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n               (tptr (Tstruct __3154 noattr))) ::\n             (Etempvar _pubkey (tptr (Tstruct __3626 noattr))) :: nil))\n          (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n            (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n            Sskip))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_get_b32 (Tfunction\n                                          (Tcons (tptr tuchar)\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil)) tvoid cc_default))\n            ((Etempvar _output32 (tptr tuchar)) ::\n             (Eaddrof\n               (Efield (Evar _pk (Tstruct __3154 noattr)) _x\n                 (Tstruct __2380 noattr)) (tptr (Tstruct __2380 noattr))) ::\n             nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_secp256k1_extrakeys_ge_even_y := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_y_parity, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'3, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Sset _y_parity (Econst_int (Int.repr 0) tint))\n  (Ssequence\n    (Sloop\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_ge_is_infinity (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              Tnil) tint cc_default))\n          ((Etempvar _r (tptr (Tstruct __3154 noattr))) :: nil))\n        (Sifthenelse (Eunop Onotbool\n                       (Eunop Onotbool (Etempvar _t'1 tint) tint) tint)\n          (Sloop\n            (Ssequence\n              (Ssequence\n                (Sset _t'3 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                (Scall None\n                  (Evar _fprintf (Tfunction\n                                   (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                     (Tcons (tptr tschar) Tnil)) tint\n                                   {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                  ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                   (Evar ___stringlit_6 (tarray tschar 11)) ::\n                   (Evar ___stringlit_170 (tarray tschar 27)) ::\n                   (Econst_int (Int.repr 61) tint) ::\n                   (Evar ___stringlit_169 (tarray tschar 52)) :: nil)))\n              (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                nil))\n            Sbreak)\n          Sskip))\n      Sbreak)\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'2)\n          (Evar _secp256k1_fe_is_odd (Tfunction\n                                       (Tcons (tptr (Tstruct __2380 noattr))\n                                         Tnil) tint cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sifthenelse (Etempvar _t'2 tint)\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_negate (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             (Tcons\n                                               (tptr (Tstruct __2380 noattr))\n                                               (Tcons tint Tnil))) tvoid\n                                           cc_default))\n              ((Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                     (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof\n                 (Efield\n                   (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n                     (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Econst_int (Int.repr 1) tint) :: nil))\n            (Sset _y_parity (Econst_int (Int.repr 1) tint)))\n          Sskip))\n      (Sreturn (Some (Etempvar _y_parity tint))))))\n|}.\n\nDefinition f_secp256k1_xonly_pubkey_from_pubkey := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_xonly_pubkey, (tptr (Tstruct __3626 noattr))) ::\n                (_pk_parity, (tptr tint)) ::\n                (_pubkey, (tptr (Tstruct __2064 noattr))) :: nil);\n  fn_vars := ((_pk, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_tmp, tint) :: (_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One\n                     (Etempvar _xonly_pubkey (tptr (Tstruct __3626 noattr)))\n                     (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                     tint) tint)\n      (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop One\n                       (Etempvar _pubkey (tptr (Tstruct __2064 noattr)))\n                       (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                       tint) tint)\n        (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_pubkey_load (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __3154 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2064 noattr))\n                                             Tnil)) tint cc_default))\n          ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n             (tptr (Tstruct __3154 noattr))) ::\n           (Etempvar _pubkey (tptr (Tstruct __2064 noattr))) :: nil))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip))\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'2)\n            (Evar _secp256k1_extrakeys_ge_even_y (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __3154 noattr))\n                                                     Tnil) tint cc_default))\n            ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n               (tptr (Tstruct __3154 noattr))) :: nil))\n          (Sset _tmp (Etempvar _t'2 tint)))\n        (Ssequence\n          (Sifthenelse (Ebinop One (Etempvar _pk_parity (tptr tint))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint)\n            (Sassign (Ederef (Etempvar _pk_parity (tptr tint)) tint)\n              (Etempvar _tmp tint))\n            Sskip)\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_xonly_pubkey_save (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __3626 noattr))\n                                                     (Tcons\n                                                       (tptr (Tstruct __3154 noattr))\n                                                       Tnil)) tvoid\n                                                   cc_default))\n              ((Etempvar _xonly_pubkey (tptr (Tstruct __3626 noattr))) ::\n               (Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) :: nil))\n            (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))))\n|}.\n\nDefinition f_secp256k1_xonly_pubkey_tweak_add := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_output_pubkey, (tptr (Tstruct __2064 noattr))) ::\n                (_internal_pubkey, (tptr (Tstruct __3626 noattr))) ::\n                (_tweak32, (tptr tuchar)) :: nil);\n  fn_vars := ((_pk, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_t'3, tint) :: (_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One\n                     (Etempvar _output_pubkey (tptr (Tstruct __2064 noattr)))\n                     (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                     tint) tint)\n      (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _memset (Tfunction\n                      (Tcons (tptr tvoid) (Tcons tint (Tcons tulong Tnil)))\n                      (tptr tvoid) cc_default))\n      ((Etempvar _output_pubkey (tptr (Tstruct __2064 noattr))) ::\n       (Econst_int (Int.repr 0) tint) ::\n       (Esizeof (Tstruct __2064 noattr) tulong) :: nil))\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop One\n                         (Etempvar _internal_pubkey (tptr (Tstruct __3626 noattr)))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip)\n        Sbreak)\n      (Ssequence\n        (Sloop\n          (Sifthenelse (Eunop Onotbool\n                         (Ebinop One (Etempvar _tweak32 (tptr tuchar))\n                           (Ecast (Econst_int (Int.repr 0) tint)\n                             (tptr tvoid)) tint) tint)\n            (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n            Sskip)\n          Sbreak)\n        (Ssequence\n          (Ssequence\n            (Ssequence\n              (Scall (Some _t'1)\n                (Evar _secp256k1_xonly_pubkey_load (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __3154 noattr))\n                                                       (Tcons\n                                                         (tptr (Tstruct __3626 noattr))\n                                                         Tnil)) tint\n                                                     cc_default))\n                ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                   (tptr (Tstruct __3154 noattr))) ::\n                 (Etempvar _internal_pubkey (tptr (Tstruct __3626 noattr))) ::\n                 nil))\n              (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                (Sset _t'2 (Econst_int (Int.repr 1) tint))\n                (Ssequence\n                  (Scall (Some _t'3)\n                    (Evar _secp256k1_ec_pubkey_tweak_add_helper (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __3154 noattr))\n                                                                    (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil))\n                                                                  tint\n                                                                  cc_default))\n                    ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                       (tptr (Tstruct __3154 noattr))) ::\n                     (Etempvar _tweak32 (tptr tuchar)) :: nil))\n                  (Sset _t'2\n                    (Ecast (Eunop Onotbool (Etempvar _t'3 tint) tint) tbool)))))\n            (Sifthenelse (Etempvar _t'2 tint)\n              (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n              Sskip))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_pubkey_save (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __2064 noattr))\n                                               (Tcons\n                                                 (tptr (Tstruct __3154 noattr))\n                                                 Tnil)) tvoid cc_default))\n              ((Etempvar _output_pubkey (tptr (Tstruct __2064 noattr))) ::\n               (Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) :: nil))\n            (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))))\n|}.\n\nDefinition f_secp256k1_schnorrsig_sha256_tagged := {|\n  fn_return := tvoid;\n  fn_callconv := {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|};\n  fn_params := ((__res, (tptr (Tstruct _sha256_context noattr))) ::\n                (_output, (tptr tuint)) :: nil);\n  fn_vars := ((___compound, (Tstruct _sha256_context noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef\n      (Ebinop Oadd (Etempvar _output (tptr tuint))\n        (Econst_int (Int.repr 0) tint) (tptr tuint)) tuint)\n    (Econst_long (Int64.repr 2632759825) tulong))\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd (Etempvar _output (tptr tuint))\n          (Econst_int (Int.repr 1) tint) (tptr tuint)) tuint)\n      (Econst_long (Int64.repr 596792193) tulong))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd (Etempvar _output (tptr tuint))\n            (Econst_int (Int.repr 2) tint) (tptr tuint)) tuint)\n        (Econst_long (Int64.repr 292000018) tulong))\n      (Ssequence\n        (Sassign\n          (Ederef\n            (Ebinop Oadd (Etempvar _output (tptr tuint))\n              (Econst_int (Int.repr 3) tint) (tptr tuint)) tuint)\n          (Econst_long (Int64.repr 3512892943) tulong))\n        (Ssequence\n          (Sassign\n            (Ederef\n              (Ebinop Oadd (Etempvar _output (tptr tuint))\n                (Econst_int (Int.repr 4) tint) (tptr tuint)) tuint)\n            (Econst_long (Int64.repr 2546496848) tulong))\n          (Ssequence\n            (Sassign\n              (Ederef\n                (Ebinop Oadd (Etempvar _output (tptr tuint))\n                  (Econst_int (Int.repr 5) tint) (tptr tuint)) tuint)\n              (Econst_long (Int64.repr 3983205) tulong))\n            (Ssequence\n              (Sassign\n                (Ederef\n                  (Ebinop Oadd (Etempvar _output (tptr tuint))\n                    (Econst_int (Int.repr 6) tint) (tptr tuint)) tuint)\n                (Econst_long (Int64.repr 2432045412) tulong))\n              (Ssequence\n                (Sassign\n                  (Ederef\n                    (Ebinop Oadd (Etempvar _output (tptr tuint))\n                      (Econst_int (Int.repr 7) tint) (tptr tuint)) tuint)\n                  (Econst_long (Int64.repr 870954602) tulong))\n                (Ssequence\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Ssequence\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Ssequence\n                                  (Ssequence\n                                    (Ssequence\n                                      (Ssequence\n                                        (Ssequence\n                                          (Ssequence\n                                            (Ssequence\n                                              (Ssequence\n                                                (Ssequence\n                                                  (Ssequence\n                                                    (Ssequence\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Ssequence\n                                                              (Ssequence\n                                                                (Ssequence\n                                                                  (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Ssequence\n                                                                    (Sassign\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _output\n                                                                    (tptr tuint))\n                                                                    (Etempvar _output (tptr tuint)))\n                                                                    (Sassign\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _counter\n                                                                    tulong)\n                                                                    (Econst_int (Int.repr 64) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 0) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 1) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 2) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 3) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 4) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 5) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 6) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 7) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 8) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 9) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 10) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 11) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 12) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 13) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 14) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 15) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 16) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 17) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 18) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 19) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 20) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 21) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 22) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 23) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 24) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 25) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 26) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 27) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 28) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 29) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 30) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 31) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 32) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 33) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 34) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 35) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 36) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 37) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 38) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 39) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 40) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                    (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 41) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                  (Sassign\n                                                                    (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 42) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                    (Econst_int (Int.repr 0) tint)))\n                                                                (Sassign\n                                                                  (Ederef\n                                                                    (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 43) tint)\n                                                                    (tptr tuchar))\n                                                                    tuchar)\n                                                                  (Econst_int (Int.repr 0) tint)))\n                                                              (Sassign\n                                                                (Ederef\n                                                                  (Ebinop Oadd\n                                                                    (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                    (Econst_int (Int.repr 44) tint)\n                                                                    (tptr tuchar))\n                                                                  tuchar)\n                                                                (Econst_int (Int.repr 0) tint)))\n                                                            (Sassign\n                                                              (Ederef\n                                                                (Ebinop Oadd\n                                                                  (Efield\n                                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                    _block\n                                                                    (tarray tuchar 64))\n                                                                  (Econst_int (Int.repr 45) tint)\n                                                                  (tptr tuchar))\n                                                                tuchar)\n                                                              (Econst_int (Int.repr 0) tint)))\n                                                          (Sassign\n                                                            (Ederef\n                                                              (Ebinop Oadd\n                                                                (Efield\n                                                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                  _block\n                                                                  (tarray tuchar 64))\n                                                                (Econst_int (Int.repr 46) tint)\n                                                                (tptr tuchar))\n                                                              tuchar)\n                                                            (Econst_int (Int.repr 0) tint)))\n                                                        (Sassign\n                                                          (Ederef\n                                                            (Ebinop Oadd\n                                                              (Efield\n                                                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                                                _block\n                                                                (tarray tuchar 64))\n                                                              (Econst_int (Int.repr 47) tint)\n                                                              (tptr tuchar))\n                                                            tuchar)\n                                                          (Econst_int (Int.repr 0) tint)))\n                                                      (Sassign\n                                                        (Ederef\n                                                          (Ebinop Oadd\n                                                            (Efield\n                                                              (Evar ___compound (Tstruct _sha256_context noattr))\n                                                              _block\n                                                              (tarray tuchar 64))\n                                                            (Econst_int (Int.repr 48) tint)\n                                                            (tptr tuchar))\n                                                          tuchar)\n                                                        (Econst_int (Int.repr 0) tint)))\n                                                    (Sassign\n                                                      (Ederef\n                                                        (Ebinop Oadd\n                                                          (Efield\n                                                            (Evar ___compound (Tstruct _sha256_context noattr))\n                                                            _block\n                                                            (tarray tuchar 64))\n                                                          (Econst_int (Int.repr 49) tint)\n                                                          (tptr tuchar))\n                                                        tuchar)\n                                                      (Econst_int (Int.repr 0) tint)))\n                                                  (Sassign\n                                                    (Ederef\n                                                      (Ebinop Oadd\n                                                        (Efield\n                                                          (Evar ___compound (Tstruct _sha256_context noattr))\n                                                          _block\n                                                          (tarray tuchar 64))\n                                                        (Econst_int (Int.repr 50) tint)\n                                                        (tptr tuchar))\n                                                      tuchar)\n                                                    (Econst_int (Int.repr 0) tint)))\n                                                (Sassign\n                                                  (Ederef\n                                                    (Ebinop Oadd\n                                                      (Efield\n                                                        (Evar ___compound (Tstruct _sha256_context noattr))\n                                                        _block\n                                                        (tarray tuchar 64))\n                                                      (Econst_int (Int.repr 51) tint)\n                                                      (tptr tuchar)) tuchar)\n                                                  (Econst_int (Int.repr 0) tint)))\n                                              (Sassign\n                                                (Ederef\n                                                  (Ebinop Oadd\n                                                    (Efield\n                                                      (Evar ___compound (Tstruct _sha256_context noattr))\n                                                      _block\n                                                      (tarray tuchar 64))\n                                                    (Econst_int (Int.repr 52) tint)\n                                                    (tptr tuchar)) tuchar)\n                                                (Econst_int (Int.repr 0) tint)))\n                                            (Sassign\n                                              (Ederef\n                                                (Ebinop Oadd\n                                                  (Efield\n                                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                                    _block\n                                                    (tarray tuchar 64))\n                                                  (Econst_int (Int.repr 53) tint)\n                                                  (tptr tuchar)) tuchar)\n                                              (Econst_int (Int.repr 0) tint)))\n                                          (Sassign\n                                            (Ederef\n                                              (Ebinop Oadd\n                                                (Efield\n                                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                                  _block (tarray tuchar 64))\n                                                (Econst_int (Int.repr 54) tint)\n                                                (tptr tuchar)) tuchar)\n                                            (Econst_int (Int.repr 0) tint)))\n                                        (Sassign\n                                          (Ederef\n                                            (Ebinop Oadd\n                                              (Efield\n                                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                                _block (tarray tuchar 64))\n                                              (Econst_int (Int.repr 55) tint)\n                                              (tptr tuchar)) tuchar)\n                                          (Econst_int (Int.repr 0) tint)))\n                                      (Sassign\n                                        (Ederef\n                                          (Ebinop Oadd\n                                            (Efield\n                                              (Evar ___compound (Tstruct _sha256_context noattr))\n                                              _block (tarray tuchar 64))\n                                            (Econst_int (Int.repr 56) tint)\n                                            (tptr tuchar)) tuchar)\n                                        (Econst_int (Int.repr 0) tint)))\n                                    (Sassign\n                                      (Ederef\n                                        (Ebinop Oadd\n                                          (Efield\n                                            (Evar ___compound (Tstruct _sha256_context noattr))\n                                            _block (tarray tuchar 64))\n                                          (Econst_int (Int.repr 57) tint)\n                                          (tptr tuchar)) tuchar)\n                                      (Econst_int (Int.repr 0) tint)))\n                                  (Sassign\n                                    (Ederef\n                                      (Ebinop Oadd\n                                        (Efield\n                                          (Evar ___compound (Tstruct _sha256_context noattr))\n                                          _block (tarray tuchar 64))\n                                        (Econst_int (Int.repr 58) tint)\n                                        (tptr tuchar)) tuchar)\n                                    (Econst_int (Int.repr 0) tint)))\n                                (Sassign\n                                  (Ederef\n                                    (Ebinop Oadd\n                                      (Efield\n                                        (Evar ___compound (Tstruct _sha256_context noattr))\n                                        _block (tarray tuchar 64))\n                                      (Econst_int (Int.repr 59) tint)\n                                      (tptr tuchar)) tuchar)\n                                  (Econst_int (Int.repr 0) tint)))\n                              (Sassign\n                                (Ederef\n                                  (Ebinop Oadd\n                                    (Efield\n                                      (Evar ___compound (Tstruct _sha256_context noattr))\n                                      _block (tarray tuchar 64))\n                                    (Econst_int (Int.repr 60) tint)\n                                    (tptr tuchar)) tuchar)\n                                (Econst_int (Int.repr 0) tint)))\n                            (Sassign\n                              (Ederef\n                                (Ebinop Oadd\n                                  (Efield\n                                    (Evar ___compound (Tstruct _sha256_context noattr))\n                                    _block (tarray tuchar 64))\n                                  (Econst_int (Int.repr 61) tint)\n                                  (tptr tuchar)) tuchar)\n                              (Econst_int (Int.repr 0) tint)))\n                          (Sassign\n                            (Ederef\n                              (Ebinop Oadd\n                                (Efield\n                                  (Evar ___compound (Tstruct _sha256_context noattr))\n                                  _block (tarray tuchar 64))\n                                (Econst_int (Int.repr 62) tint)\n                                (tptr tuchar)) tuchar)\n                            (Econst_int (Int.repr 0) tint)))\n                        (Sassign\n                          (Ederef\n                            (Ebinop Oadd\n                              (Efield\n                                (Evar ___compound (Tstruct _sha256_context noattr))\n                                _block (tarray tuchar 64))\n                              (Econst_int (Int.repr 63) tint) (tptr tuchar))\n                            tuchar) (Econst_int (Int.repr 0) tint)))\n                      (Sassign\n                        (Efield\n                          (Evar ___compound (Tstruct _sha256_context noattr))\n                          _overflow tbool) (Econst_int (Int.repr 0) tint)))\n                    (Sassign\n                      (Ederef\n                        (Etempvar __res (tptr (Tstruct _sha256_context noattr)))\n                        (Tstruct _sha256_context noattr))\n                      (Evar ___compound (Tstruct _sha256_context noattr))))\n                  (Sreturn None))))))))))\n|}.\n\nDefinition f_secp256k1_schnorrsig_challenge := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_e, (tptr (Tstruct __2843 noattr))) ::\n                (_r32, (tptr tuchar)) :: (_msg, (tptr tuchar)) ::\n                (_msglen, tulong) :: (_pubkey32, (tptr tuchar)) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 32)) ::\n              (_sha_buf, (Tstruct _sha256_midstate noattr)) ::\n              (_sha, (Tstruct _sha256_context noattr)) ::\n              (__res, (Tstruct _sha256_context noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_schnorrsig_sha256_tagged (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct _sha256_context noattr))\n                                                    (Tcons (tptr tuint) Tnil))\n                                                  tvoid\n                                                  {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|}))\n      ((Eaddrof (Evar __res (Tstruct _sha256_context noattr))\n         (tptr (Tstruct _sha256_context noattr))) ::\n       (Efield (Evar _sha_buf (Tstruct _sha256_midstate noattr)) _s\n         (tarray tuint 8)) :: nil))\n    (Sassign (Evar _sha (Tstruct _sha256_context noattr))\n      (Evar __res (Tstruct _sha256_context noattr))))\n  (Ssequence\n    (Scall None\n      (Evar _sha256_uchars (Tfunction\n                             (Tcons (tptr (Tstruct _sha256_context noattr))\n                               (Tcons (tptr tuchar) (Tcons tulong Tnil)))\n                             tbool cc_default))\n      ((Eaddrof (Evar _sha (Tstruct _sha256_context noattr))\n         (tptr (Tstruct _sha256_context noattr))) ::\n       (Etempvar _r32 (tptr tuchar)) :: (Econst_int (Int.repr 32) tint) ::\n       nil))\n    (Ssequence\n      (Scall None\n        (Evar _sha256_uchars (Tfunction\n                               (Tcons (tptr (Tstruct _sha256_context noattr))\n                                 (Tcons (tptr tuchar) (Tcons tulong Tnil)))\n                               tbool cc_default))\n        ((Eaddrof (Evar _sha (Tstruct _sha256_context noattr))\n           (tptr (Tstruct _sha256_context noattr))) ::\n         (Etempvar _pubkey32 (tptr tuchar)) ::\n         (Econst_int (Int.repr 32) tint) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _sha256_uchars (Tfunction\n                                 (Tcons\n                                   (tptr (Tstruct _sha256_context noattr))\n                                   (Tcons (tptr tuchar) (Tcons tulong Tnil)))\n                                 tbool cc_default))\n          ((Eaddrof (Evar _sha (Tstruct _sha256_context noattr))\n             (tptr (Tstruct _sha256_context noattr))) ::\n           (Etempvar _msg (tptr tuchar)) :: (Etempvar _msglen tulong) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _sha256_finalize (Tfunction\n                                     (Tcons\n                                       (tptr (Tstruct _sha256_context noattr))\n                                       Tnil) tbool cc_default))\n            ((Eaddrof (Evar _sha (Tstruct _sha256_context noattr))\n               (tptr (Tstruct _sha256_context noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _sha256_fromMidstate (Tfunction\n                                           (Tcons (tptr tuchar)\n                                             (Tcons (tptr tuint) Tnil)) tvoid\n                                           cc_default))\n              ((Evar _buf (tarray tuchar 32)) ::\n               (Efield (Evar _sha_buf (Tstruct _sha256_midstate noattr)) _s\n                 (tarray tuint 8)) :: nil))\n            (Scall None\n              (Evar _secp256k1_scalar_set_b32 (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  (Tcons (tptr tuchar)\n                                                    (Tcons (tptr tint) Tnil)))\n                                                tvoid cc_default))\n              ((Etempvar _e (tptr (Tstruct __2843 noattr))) ::\n               (Evar _buf (tarray tuchar 32)) ::\n               (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))))))))\n|}.\n\nDefinition f_secp256k1_schnorrsig_verify := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_sig64, (tptr tuchar)) :: (_msg, (tptr tuchar)) ::\n                (_msglen, tulong) ::\n                (_pubkey, (tptr (Tstruct __3626 noattr))) :: nil);\n  fn_vars := ((_s, (Tstruct __2843 noattr)) ::\n              (_e, (Tstruct __2843 noattr)) ::\n              (_rj, (Tstruct __3156 noattr)) ::\n              (_pk, (Tstruct __3154 noattr)) ::\n              (_pkj, (Tstruct __3156 noattr)) ::\n              (_rx, (Tstruct __2380 noattr)) ::\n              (_r, (Tstruct __3154 noattr)) :: (_buf, (tarray tuchar 32)) ::\n              (_overflow, tint) :: nil);\n  fn_temps := ((_t'7, tint) :: (_t'6, tint) :: (_t'5, tint) ::\n               (_t'4, tint) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tint) :: (_t'8, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One (Etempvar _sig64 (tptr tuchar))\n                     (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                     tint) tint)\n      (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Ssequence\n        (Sifthenelse (Ebinop One (Etempvar _msg (tptr tuchar))\n                       (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                       tint)\n          (Sset _t'1 (Econst_int (Int.repr 1) tint))\n          (Sset _t'1\n            (Ecast\n              (Ebinop Oeq (Etempvar _msglen tulong)\n                (Econst_int (Int.repr 0) tint) tint) tbool)))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip))\n      Sbreak)\n    (Ssequence\n      (Sloop\n        (Sifthenelse (Eunop Onotbool\n                       (Ebinop One\n                         (Etempvar _pubkey (tptr (Tstruct __3626 noattr)))\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                         tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip)\n        Sbreak)\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'2)\n            (Evar _secp256k1_fe_set_b32 (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons (tptr tuchar) Tnil)) tint\n                                          cc_default))\n            ((Eaddrof (Evar _rx (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Ebinop Oadd (Etempvar _sig64 (tptr tuchar))\n               (Econst_int (Int.repr 0) tint) (tptr tuchar)) :: nil))\n          (Sifthenelse (Eunop Onotbool (Etempvar _t'2 tint) tint)\n            (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n            Sskip))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_scalar_set_b32 (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2843 noattr))\n                                                (Tcons (tptr tuchar)\n                                                  (Tcons (tptr tint) Tnil)))\n                                              tvoid cc_default))\n            ((Eaddrof (Evar _s (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) ::\n             (Ebinop Oadd (Etempvar _sig64 (tptr tuchar))\n               (Econst_int (Int.repr 32) tint) (tptr tuchar)) ::\n             (Eaddrof (Evar _overflow tint) (tptr tint)) :: nil))\n          (Ssequence\n            (Ssequence\n              (Sset _t'8 (Evar _overflow tint))\n              (Sifthenelse (Etempvar _t'8 tint)\n                (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                Sskip))\n            (Ssequence\n              (Ssequence\n                (Scall (Some _t'3)\n                  (Evar _secp256k1_xonly_pubkey_load (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __3154 noattr))\n                                                         (Tcons\n                                                           (tptr (Tstruct __3626 noattr))\n                                                           Tnil)) tint\n                                                       cc_default))\n                  ((Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                     (tptr (Tstruct __3154 noattr))) ::\n                   (Etempvar _pubkey (tptr (Tstruct __3626 noattr))) :: nil))\n                (Sifthenelse (Eunop Onotbool (Etempvar _t'3 tint) tint)\n                  (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                  Sskip))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_get_b32 (Tfunction\n                                                (Tcons (tptr tuchar)\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)) tvoid cc_default))\n                  ((Evar _buf (tarray tuchar 32)) ::\n                   (Eaddrof\n                     (Efield (Evar _pk (Tstruct __3154 noattr)) _x\n                       (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_schnorrsig_challenge (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2843 noattr))\n                                                              (Tcons\n                                                                (tptr tuchar)\n                                                                (Tcons\n                                                                  (tptr tuchar)\n                                                                  (Tcons\n                                                                    tulong\n                                                                    (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil)))))\n                                                            tvoid cc_default))\n                    ((Eaddrof (Evar _e (Tstruct __2843 noattr))\n                       (tptr (Tstruct __2843 noattr))) ::\n                     (Ebinop Oadd (Etempvar _sig64 (tptr tuchar))\n                       (Econst_int (Int.repr 0) tint) (tptr tuchar)) ::\n                     (Etempvar _msg (tptr tuchar)) ::\n                     (Etempvar _msglen tulong) ::\n                     (Evar _buf (tarray tuchar 32)) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_scalar_negate (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __2843 noattr))\n                                                         (Tcons\n                                                           (tptr (Tstruct __2843 noattr))\n                                                           Tnil)) tvoid\n                                                       cc_default))\n                      ((Eaddrof (Evar _e (Tstruct __2843 noattr))\n                         (tptr (Tstruct __2843 noattr))) ::\n                       (Eaddrof (Evar _e (Tstruct __2843 noattr))\n                         (tptr (Tstruct __2843 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_gej_set_ge (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __3156 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __3154 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                        ((Eaddrof (Evar _pkj (Tstruct __3156 noattr))\n                           (tptr (Tstruct __3156 noattr))) ::\n                         (Eaddrof (Evar _pk (Tstruct __3154 noattr))\n                           (tptr (Tstruct __3154 noattr))) :: nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_ecmult (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __3156 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __3156 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2843 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2843 noattr))\n                                                            Tnil)))) tvoid\n                                                    cc_default))\n                          ((Eaddrof (Evar _rj (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _pkj (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _e (Tstruct __2843 noattr))\n                             (tptr (Tstruct __2843 noattr))) ::\n                           (Eaddrof (Evar _s (Tstruct __2843 noattr))\n                             (tptr (Tstruct __2843 noattr))) :: nil))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_ge_set_gej_var (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __3154 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __3156 noattr))\n                                                                  Tnil))\n                                                              tvoid\n                                                              cc_default))\n                            ((Eaddrof (Evar _r (Tstruct __3154 noattr))\n                               (tptr (Tstruct __3154 noattr))) ::\n                             (Eaddrof (Evar _rj (Tstruct __3156 noattr))\n                               (tptr (Tstruct __3156 noattr))) :: nil))\n                          (Ssequence\n                            (Ssequence\n                              (Scall (Some _t'4)\n                                (Evar _secp256k1_ge_is_infinity (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __3154 noattr))\n                                                                    Tnil)\n                                                                  tint\n                                                                  cc_default))\n                                ((Eaddrof (Evar _r (Tstruct __3154 noattr))\n                                   (tptr (Tstruct __3154 noattr))) :: nil))\n                              (Sifthenelse (Etempvar _t'4 tint)\n                                (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                                Sskip))\n                            (Ssequence\n                              (Scall None\n                                (Evar _secp256k1_fe_normalize_var (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)\n                                                                    tvoid\n                                                                    cc_default))\n                                ((Eaddrof\n                                   (Efield (Evar _r (Tstruct __3154 noattr))\n                                     _y (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) :: nil))\n                              (Ssequence\n                                (Ssequence\n                                  (Scall (Some _t'5)\n                                    (Evar _secp256k1_fe_is_odd (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __2380 noattr))\n                                                                   Tnil) tint\n                                                                 cc_default))\n                                    ((Eaddrof\n                                       (Efield\n                                         (Evar _r (Tstruct __3154 noattr)) _y\n                                         (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     nil))\n                                  (Sifthenelse (Eunop Onotbool\n                                                 (Etempvar _t'5 tint) tint)\n                                    (Ssequence\n                                      (Scall (Some _t'7)\n                                        (Evar _secp256k1_fe_equal_var \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil)) tint cc_default))\n                                        ((Eaddrof\n                                           (Evar _rx (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         (Eaddrof\n                                           (Efield\n                                             (Evar _r (Tstruct __3154 noattr))\n                                             _x (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil))\n                                      (Sset _t'6\n                                        (Ecast (Etempvar _t'7 tint) tbool)))\n                                    (Sset _t'6\n                                      (Econst_int (Int.repr 0) tint))))\n                                (Sreturn (Some (Etempvar _t'6 tint)))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_generator_load := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_ge, (tptr (Tstruct __3154 noattr))) ::\n                (_gen, (tptr (Tstruct __3711 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_succeed, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'4, (tptr (Tstruct __IO_FILE noattr))) ::\n               (_t'3, (tptr (Tstruct __IO_FILE noattr))) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_fe_set_b32 (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr tuchar) Tnil)) tint\n                                    cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Ebinop Oadd\n         (Efield\n           (Ederef (Etempvar _gen (tptr (Tstruct __3711 noattr)))\n             (Tstruct __3711 noattr)) _data (tarray tuchar 64))\n         (Econst_int (Int.repr 0) tint) (tptr tuchar)) :: nil))\n    (Sset _succeed (Etempvar _t'1 tint)))\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop One (Etempvar _succeed tint)\n                       (Econst_int (Int.repr 0) tint) tint) tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'4 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'4 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_172 (tarray tschar 27)) ::\n                 (Econst_int (Int.repr 43) tint) ::\n                 (Evar ___stringlit_171 (tarray tschar 36)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'2)\n          (Evar _secp256k1_fe_set_b32 (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons (tptr tuchar) Tnil)) tint\n                                        cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Ebinop Oadd\n             (Efield\n               (Ederef (Etempvar _gen (tptr (Tstruct __3711 noattr)))\n                 (Tstruct __3711 noattr)) _data (tarray tuchar 64))\n             (Econst_int (Int.repr 32) tint) (tptr tuchar)) :: nil))\n        (Sset _succeed (Etempvar _t'2 tint)))\n      (Ssequence\n        (Sloop\n          (Sifthenelse (Eunop Onotbool\n                         (Ebinop One (Etempvar _succeed tint)\n                           (Econst_int (Int.repr 0) tint) tint) tint)\n            (Sloop\n              (Ssequence\n                (Ssequence\n                  (Sset _t'3\n                    (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n                  (Scall None\n                    (Evar _fprintf (Tfunction\n                                     (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                       (Tcons (tptr tschar) Tnil)) tint\n                                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                    ((Etempvar _t'3 (tptr (Tstruct __IO_FILE noattr))) ::\n                     (Evar ___stringlit_6 (tarray tschar 11)) ::\n                     (Evar ___stringlit_172 (tarray tschar 27)) ::\n                     (Econst_int (Int.repr 45) tint) ::\n                     (Evar ___stringlit_171 (tarray tschar 36)) :: nil)))\n                (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default))\n                  nil))\n              Sbreak)\n            Sskip)\n          Sbreak)\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n              (Tstruct __3154 noattr)) _infinity tint)\n          (Econst_int (Int.repr 0) tint))))))\n|}.\n\nDefinition f_secp256k1_generator_save := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_gen, (tptr (Tstruct __3711 noattr))) ::\n                (_ge, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: (_t'2, (tptr (Tstruct __IO_FILE noattr))) ::\n               nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _secp256k1_ge_is_infinity (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3154 noattr))\n                                            Tnil) tint cc_default))\n        ((Etempvar _ge (tptr (Tstruct __3154 noattr))) :: nil))\n      (Sifthenelse (Eunop Onotbool (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                     tint)\n        (Sloop\n          (Ssequence\n            (Ssequence\n              (Sset _t'2 (Evar _stderr (tptr (Tstruct __IO_FILE noattr))))\n              (Scall None\n                (Evar _fprintf (Tfunction\n                                 (Tcons (tptr (Tstruct __IO_FILE noattr))\n                                   (Tcons (tptr tschar) Tnil)) tint\n                                 {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n                ((Etempvar _t'2 (tptr (Tstruct __IO_FILE noattr))) ::\n                 (Evar ___stringlit_6 (tarray tschar 11)) ::\n                 (Evar ___stringlit_172 (tarray tschar 27)) ::\n                 (Econst_int (Int.repr 51) tint) ::\n                 (Evar ___stringlit_167 (tarray tschar 53)) :: nil)))\n            (Scall None (Evar _abort (Tfunction Tnil tvoid cc_default)) nil))\n          Sbreak)\n        Sskip))\n    Sbreak)\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_normalize_var (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil) tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_normalize_var (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil) tvoid cc_default))\n        ((Eaddrof\n           (Efield\n             (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n               (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_get_b32 (Tfunction\n                                        (Tcons (tptr tuchar)\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil)) tvoid cc_default))\n          ((Ebinop Oadd\n             (Efield\n               (Ederef (Etempvar _gen (tptr (Tstruct __3711 noattr)))\n                 (Tstruct __3711 noattr)) _data (tarray tuchar 64))\n             (Econst_int (Int.repr 0) tint) (tptr tuchar)) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Scall None\n          (Evar _secp256k1_fe_get_b32 (Tfunction\n                                        (Tcons (tptr tuchar)\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil)) tvoid cc_default))\n          ((Ebinop Oadd\n             (Efield\n               (Ederef (Etempvar _gen (tptr (Tstruct __3711 noattr)))\n                 (Tstruct __3711 noattr)) _data (tarray tuchar 64))\n             (Econst_int (Int.repr 32) tint) (tptr tuchar)) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                 (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))))))\n|}.\n\nDefinition v_negc := {|\n  gvar_info := (Tstruct __2380 noattr);\n  gvar_init := (Init_int64 (Int64.repr 800791873586141) ::\n                Init_int64 (Int64.repr 4119177257465895) ::\n                Init_int64 (Int64.repr 2366603538325650) ::\n                Init_int64 (Int64.repr 248548893979605) ::\n                Init_int64 (Int64.repr 270285854395128) ::\n                Init_int32 (Int.repr 1) :: Init_int32 (Int.repr 1) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_d := {|\n  gvar_info := (Tstruct __2380 noattr);\n  gvar_init := (Init_int64 (Int64.repr 1851399581923904) ::\n                Init_int64 (Int64.repr 2444010998637548) ::\n                Init_int64 (Int64.repr 1068498044522422) ::\n                Init_int64 (Int64.repr 4379325180380693) ::\n                Init_int64 (Int64.repr 146332049513091) ::\n                Init_int32 (Int.repr 1) :: Init_int32 (Int.repr 1) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_shallue_van_de_woestijne := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_ge, (tptr (Tstruct __3154 noattr))) ::\n                (_t, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_wd, (Tstruct __2380 noattr)) ::\n              (_x3d, (Tstruct __2380 noattr)) ::\n              (_jinv, (Tstruct __2380 noattr)) ::\n              (_tmp, (Tstruct __2380 noattr)) ::\n              (_x1, (Tstruct __2380 noattr)) ::\n              (_x2, (Tstruct __2380 noattr)) ::\n              (_x3, (Tstruct __2380 noattr)) ::\n              (_alphain, (Tstruct __2380 noattr)) ::\n              (_betain, (Tstruct __2380 noattr)) ::\n              (_gammain, (Tstruct __2380 noattr)) ::\n              (_y1, (Tstruct __2380 noattr)) ::\n              (_y2, (Tstruct __2380 noattr)) ::\n              (_y3, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_alphaquad, tint) :: (_betaquad, tint) :: (_t'3, tint) ::\n               (_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_fe_sqr (Tfunction\n                              (Tcons (tptr (Tstruct __2380 noattr))\n                                (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                              tvoid cc_default))\n    ((Eaddrof (Evar _wd (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) ::\n     (Etempvar _t (tptr (Tstruct __2380 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_mul (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil))) tvoid cc_default))\n      ((Eaddrof (Evar _x1 (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _negc (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _wd (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Sassign (Evar _x3d (Tstruct __2380 noattr))\n        (Evar _wd (Tstruct __2380 noattr)))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_mul_int (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons tint Tnil)) tvoid\n                                        cc_default))\n          ((Eaddrof (Evar _x3d (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Econst_int (Int.repr 3) tint) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_negate (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             (Tcons tint Tnil))) tvoid\n                                         cc_default))\n            ((Eaddrof (Evar _x3d (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof (Evar _x3d (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Econst_int (Int.repr 3) tint) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_add_int (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons tint Tnil)) tvoid\n                                            cc_default))\n              ((Eaddrof (Evar _wd (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Ebinop Oadd (Econst_int (Int.repr 7) tint)\n                 (Econst_int (Int.repr 1) tint) tint) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_mul (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil))) tvoid cc_default))\n                ((Eaddrof (Evar _jinv (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _wd (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _x3d (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_inv_var (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)) tvoid cc_default))\n                  ((Eaddrof (Evar _jinv (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _jinv (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_fe_mul (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil))) tvoid cc_default))\n                    ((Eaddrof (Evar _x1 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof (Evar _x1 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof (Evar _x3d (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_fe_mul (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil))) tvoid\n                                                cc_default))\n                      ((Eaddrof (Evar _x1 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof (Evar _x1 (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) ::\n                       (Eaddrof (Evar _jinv (Tstruct __2380 noattr))\n                         (tptr (Tstruct __2380 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_fe_add (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil)) tvoid\n                                                  cc_default))\n                        ((Eaddrof (Evar _x1 (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Eaddrof (Evar _d (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) :: nil))\n                      (Ssequence\n                        (Sassign (Evar _x2 (Tstruct __2380 noattr))\n                          (Evar _x1 (Tstruct __2380 noattr)))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_fe_add_int (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons tint Tnil))\n                                                          tvoid cc_default))\n                            ((Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n                               (tptr (Tstruct __2380 noattr))) ::\n                             (Econst_int (Int.repr 1) tint) :: nil))\n                          (Ssequence\n                            (Scall None\n                              (Evar _secp256k1_fe_negate (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct __2380 noattr))\n                                                             (Tcons\n                                                               (tptr (Tstruct __2380 noattr))\n                                                               (Tcons tint\n                                                                 Tnil)))\n                                                           tvoid cc_default))\n                              ((Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Eaddrof (Evar _x2 (Tstruct __2380 noattr))\n                                 (tptr (Tstruct __2380 noattr))) ::\n                               (Econst_int (Int.repr 3) tint) :: nil))\n                            (Ssequence\n                              (Scall None\n                                (Evar _secp256k1_fe_sqr (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil)) tvoid\n                                                          cc_default))\n                                ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) ::\n                                 (Eaddrof (Evar _wd (Tstruct __2380 noattr))\n                                   (tptr (Tstruct __2380 noattr))) :: nil))\n                              (Ssequence\n                                (Scall None\n                                  (Evar _secp256k1_fe_mul (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil)))\n                                                            tvoid cc_default))\n                                  ((Eaddrof\n                                     (Evar _x3 (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) ::\n                                   (Eaddrof\n                                     (Evar _x3 (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) ::\n                                   (Eaddrof\n                                     (Evar _wd (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) :: nil))\n                                (Ssequence\n                                  (Scall None\n                                    (Evar _secp256k1_fe_mul (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                              tvoid\n                                                              cc_default))\n                                    ((Eaddrof\n                                       (Evar _x3 (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     (Eaddrof\n                                       (Evar _x3 (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     (Eaddrof\n                                       (Evar _jinv (Tstruct __2380 noattr))\n                                       (tptr (Tstruct __2380 noattr))) ::\n                                     nil))\n                                  (Ssequence\n                                    (Scall None\n                                      (Evar _secp256k1_fe_add_int (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                      ((Eaddrof\n                                         (Evar _x3 (Tstruct __2380 noattr))\n                                         (tptr (Tstruct __2380 noattr))) ::\n                                       (Econst_int (Int.repr 1) tint) :: nil))\n                                    (Ssequence\n                                      (Scall None\n                                        (Evar _secp256k1_fe_sqr (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                  tvoid\n                                                                  cc_default))\n                                        ((Eaddrof\n                                           (Evar _alphain (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         (Eaddrof\n                                           (Evar _x1 (Tstruct __2380 noattr))\n                                           (tptr (Tstruct __2380 noattr))) ::\n                                         nil))\n                                      (Ssequence\n                                        (Scall None\n                                          (Evar _secp256k1_fe_mul (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                          ((Eaddrof\n                                             (Evar _alphain (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _alphain (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           (Eaddrof\n                                             (Evar _x1 (Tstruct __2380 noattr))\n                                             (tptr (Tstruct __2380 noattr))) ::\n                                           nil))\n                                        (Ssequence\n                                          (Scall None\n                                            (Evar _secp256k1_fe_add_int \n                                            (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons tint Tnil)) tvoid\n                                              cc_default))\n                                            ((Eaddrof\n                                               (Evar _alphain (Tstruct __2380 noattr))\n                                               (tptr (Tstruct __2380 noattr))) ::\n                                             (Econst_int (Int.repr 7) tint) ::\n                                             nil))\n                                          (Ssequence\n                                            (Scall None\n                                              (Evar _secp256k1_fe_sqr \n                                              (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __2380 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)) tvoid cc_default))\n                                              ((Eaddrof\n                                                 (Evar _betain (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               (Eaddrof\n                                                 (Evar _x2 (Tstruct __2380 noattr))\n                                                 (tptr (Tstruct __2380 noattr))) ::\n                                               nil))\n                                            (Ssequence\n                                              (Scall None\n                                                (Evar _secp256k1_fe_mul \n                                                (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil))) tvoid\n                                                  cc_default))\n                                                ((Eaddrof\n                                                   (Evar _betain (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _betain (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 (Eaddrof\n                                                   (Evar _x2 (Tstruct __2380 noattr))\n                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                 nil))\n                                              (Ssequence\n                                                (Scall None\n                                                  (Evar _secp256k1_fe_add_int \n                                                  (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons tint Tnil))\n                                                    tvoid cc_default))\n                                                  ((Eaddrof\n                                                     (Evar _betain (Tstruct __2380 noattr))\n                                                     (tptr (Tstruct __2380 noattr))) ::\n                                                   (Econst_int (Int.repr 7) tint) ::\n                                                   nil))\n                                                (Ssequence\n                                                  (Scall None\n                                                    (Evar _secp256k1_fe_sqr \n                                                    (Tfunction\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          Tnil)) tvoid\n                                                      cc_default))\n                                                    ((Eaddrof\n                                                       (Evar _gammain (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     (Eaddrof\n                                                       (Evar _x3 (Tstruct __2380 noattr))\n                                                       (tptr (Tstruct __2380 noattr))) ::\n                                                     nil))\n                                                  (Ssequence\n                                                    (Scall None\n                                                      (Evar _secp256k1_fe_mul \n                                                      (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __2380 noattr))\n                                                              Tnil))) tvoid\n                                                        cc_default))\n                                                      ((Eaddrof\n                                                         (Evar _gammain (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       (Eaddrof\n                                                         (Evar _gammain (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       (Eaddrof\n                                                         (Evar _x3 (Tstruct __2380 noattr))\n                                                         (tptr (Tstruct __2380 noattr))) ::\n                                                       nil))\n                                                    (Ssequence\n                                                      (Scall None\n                                                        (Evar _secp256k1_fe_add_int \n                                                        (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2380 noattr))\n                                                            (Tcons tint Tnil))\n                                                          tvoid cc_default))\n                                                        ((Eaddrof\n                                                           (Evar _gammain (Tstruct __2380 noattr))\n                                                           (tptr (Tstruct __2380 noattr))) ::\n                                                         (Econst_int (Int.repr 7) tint) ::\n                                                         nil))\n                                                      (Ssequence\n                                                        (Ssequence\n                                                          (Scall (Some _t'1)\n                                                            (Evar _secp256k1_fe_sqrt_var \n                                                            (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil)) tint\n                                                              cc_default))\n                                                            ((Eaddrof\n                                                               (Evar _y1 (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             (Eaddrof\n                                                               (Evar _alphain (Tstruct __2380 noattr))\n                                                               (tptr (Tstruct __2380 noattr))) ::\n                                                             nil))\n                                                          (Sset _alphaquad\n                                                            (Etempvar _t'1 tint)))\n                                                        (Ssequence\n                                                          (Ssequence\n                                                            (Scall (Some _t'2)\n                                                              (Evar _secp256k1_fe_sqrt_var \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                tint\n                                                                cc_default))\n                                                              ((Eaddrof\n                                                                 (Evar _y2 (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               (Eaddrof\n                                                                 (Evar _betain (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               nil))\n                                                            (Sset _betaquad\n                                                              (Etempvar _t'2 tint)))\n                                                          (Ssequence\n                                                            (Scall None\n                                                              (Evar _secp256k1_fe_sqrt_var \n                                                              (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                tint\n                                                                cc_default))\n                                                              ((Eaddrof\n                                                                 (Evar _y3 (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               (Eaddrof\n                                                                 (Evar _gammain (Tstruct __2380 noattr))\n                                                                 (tptr (Tstruct __2380 noattr))) ::\n                                                               nil))\n                                                            (Ssequence\n                                                              (Scall None\n                                                                (Evar _secp256k1_fe_cmov \n                                                                (Tfunction\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil)))\n                                                                  tvoid\n                                                                  cc_default))\n                                                                ((Eaddrof\n                                                                   (Evar _x1 (Tstruct __2380 noattr))\n                                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                                 (Eaddrof\n                                                                   (Evar _x2 (Tstruct __2380 noattr))\n                                                                   (tptr (Tstruct __2380 noattr))) ::\n                                                                 (Ebinop Oand\n                                                                   (Eunop Onotbool\n                                                                    (Etempvar _alphaquad tint)\n                                                                    tint)\n                                                                   (Etempvar _betaquad tint)\n                                                                   tint) ::\n                                                                 nil))\n                                                              (Ssequence\n                                                                (Scall None\n                                                                  (Evar _secp256k1_fe_cmov \n                                                                  (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                  ((Eaddrof\n                                                                    (Evar _y1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                   (Eaddrof\n                                                                    (Evar _y2 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                   (Ebinop Oand\n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _alphaquad tint)\n                                                                    tint)\n                                                                    (Etempvar _betaquad tint)\n                                                                    tint) ::\n                                                                   nil))\n                                                                (Ssequence\n                                                                  (Scall None\n                                                                    (Evar _secp256k1_fe_cmov \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _x1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _x3 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Ebinop Oand\n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _alphaquad tint)\n                                                                    tint)\n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _betaquad tint)\n                                                                    tint)\n                                                                    tint) ::\n                                                                    nil))\n                                                                  (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_cmov \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _y1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _y3 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Ebinop Oand\n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _alphaquad tint)\n                                                                    tint)\n                                                                    (Eunop Onotbool\n                                                                    (Etempvar _betaquad tint)\n                                                                    tint)\n                                                                    tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_ge_set_xy \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3154 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Etempvar _ge (tptr (Tstruct __3154 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _x1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _y1 (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_negate \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Evar _tmp (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                                                                    (Tstruct __3154 noattr))\n                                                                    _y\n                                                                    (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Econst_int (Int.repr 1) tint) ::\n                                                                    nil))\n                                                                    (Ssequence\n                                                                    (Scall (Some _t'3)\n                                                                    (Evar _secp256k1_fe_is_odd \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil)\n                                                                    tint\n                                                                    cc_default))\n                                                                    ((Etempvar _t (tptr (Tstruct __2380 noattr))) ::\n                                                                    nil))\n                                                                    (Scall None\n                                                                    (Evar _secp256k1_fe_cmov \n                                                                    (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    (Tcons\n                                                                    tint\n                                                                    Tnil)))\n                                                                    tvoid\n                                                                    cc_default))\n                                                                    ((Eaddrof\n                                                                    (Efield\n                                                                    (Ederef\n                                                                    (Etempvar _ge (tptr (Tstruct __3154 noattr)))\n                                                                    (Tstruct __3154 noattr))\n                                                                    _y\n                                                                    (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Eaddrof\n                                                                    (Evar _tmp (Tstruct __2380 noattr))\n                                                                    (tptr (Tstruct __2380 noattr))) ::\n                                                                    (Etempvar _t'3 tint) ::\n                                                                    nil)))))))))))))))))))))))))))))))))))))))\n|}.\n\nDefinition v_prefix1 := {|\n  gvar_info := (tarray tuchar 17);\n  gvar_init := (Init_int8 (Int.repr 49) :: Init_int8 (Int.repr 115) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 58) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_prefix2 := {|\n  gvar_info := (tarray tuchar 17);\n  gvar_init := (Init_int8 (Int.repr 50) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 100) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 103) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 110) :: Init_int8 (Int.repr 101) ::\n                Init_int8 (Int.repr 114) :: Init_int8 (Int.repr 97) ::\n                Init_int8 (Int.repr 116) :: Init_int8 (Int.repr 105) ::\n                Init_int8 (Int.repr 111) :: Init_int8 (Int.repr 110) ::\n                Init_int8 (Int.repr 58) :: Init_int8 (Int.repr 32) ::\n                Init_int8 (Int.repr 0) :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_inf := {|\n  gvar_info := (Tstruct __3156 noattr);\n  gvar_init := (Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int32 (Int.repr 1) ::\n                Init_int32 (Int.repr 1) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int32 (Int.repr 1) :: Init_int32 (Int.repr 1) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int32 (Int.repr 1) ::\n                Init_int32 (Int.repr 1) :: Init_int32 (Int.repr 1) ::\n                Init_space 4 :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_zero := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_secp256k1_generator_generate_internal := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_gen, (tptr (Tstruct __3711 noattr))) ::\n                (_key32, (tptr tuchar)) :: (_blind32, (tptr tuchar)) :: nil);\n  fn_vars := ((_t, (Tstruct __2380 noattr)) ::\n              (_add, (Tstruct __3154 noattr)) ::\n              (_accum, (Tstruct __3156 noattr)) :: (_overflow, tint) ::\n              (_sha256_buf, (Tstruct _sha256_midstate noattr)) ::\n              (_b32, (tarray tuchar 32)) ::\n              (_blind, (Tstruct __2843 noattr)) ::\n              (_sha256_ctx, (Tstruct _sha256_context noattr)) ::\n              (_sha256_ctx__1, (Tstruct _sha256_context noattr)) ::\n              (__res, (Tstruct _sha256_context noattr)) ::\n              (__res__1, (Tstruct _sha256_context noattr)) :: nil);\n  fn_temps := ((_ret, tint) :: (_t'2, tint) :: (_t'1, tint) ::\n               (_t'3, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign\n    (Ederef\n      (Ebinop Oadd\n        (Efield (Evar _t (Tstruct __2380 noattr)) _n (tarray tulong 5))\n        (Econst_int (Int.repr 0) tint) (tptr tulong)) tulong)\n    (Ebinop Oor (Econst_int (Int.repr 4) tint)\n      (Ebinop Oshl\n        (Ebinop Oand (Ecast (Econst_int (Int.repr 0) tint) tulong)\n          (Econst_long (Int64.repr 1048575) tulong) tulong)\n        (Econst_int (Int.repr 32) tint) tulong) tulong))\n  (Ssequence\n    (Sassign\n      (Ederef\n        (Ebinop Oadd\n          (Efield (Evar _t (Tstruct __2380 noattr)) _n (tarray tulong 5))\n          (Econst_int (Int.repr 1) tint) (tptr tulong)) tulong)\n      (Ebinop Oor\n        (Ebinop Oor\n          (Ebinop Oshr (Ecast (Econst_int (Int.repr 0) tint) tulong)\n            (Econst_int (Int.repr 20) tint) tulong)\n          (Ebinop Oshl (Ecast (Econst_int (Int.repr 0) tint) tulong)\n            (Econst_int (Int.repr 12) tint) tulong) tulong)\n        (Ebinop Oshl\n          (Ebinop Oand (Ecast (Econst_int (Int.repr 0) tint) tulong)\n            (Econst_long (Int64.repr 255) tulong) tulong)\n          (Econst_int (Int.repr 44) tint) tulong) tulong))\n    (Ssequence\n      (Sassign\n        (Ederef\n          (Ebinop Oadd\n            (Efield (Evar _t (Tstruct __2380 noattr)) _n (tarray tulong 5))\n            (Econst_int (Int.repr 2) tint) (tptr tulong)) tulong)\n        (Ebinop Oor\n          (Ebinop Oshr (Ecast (Econst_int (Int.repr 0) tint) tulong)\n            (Econst_int (Int.repr 8) tint) tulong)\n          (Ebinop Oshl\n            (Ebinop Oand (Ecast (Econst_int (Int.repr 0) tint) tulong)\n              (Econst_long (Int64.repr 268435455) tulong) tulong)\n            (Econst_int (Int.repr 24) tint) tulong) tulong))\n      (Ssequence\n        (Sassign\n          (Ederef\n            (Ebinop Oadd\n              (Efield (Evar _t (Tstruct __2380 noattr)) _n (tarray tulong 5))\n              (Econst_int (Int.repr 3) tint) (tptr tulong)) tulong)\n          (Ebinop Oor\n            (Ebinop Oor\n              (Ebinop Oshr (Ecast (Econst_int (Int.repr 0) tint) tulong)\n                (Econst_int (Int.repr 28) tint) tulong)\n              (Ebinop Oshl (Ecast (Econst_int (Int.repr 0) tint) tulong)\n                (Econst_int (Int.repr 4) tint) tulong) tulong)\n            (Ebinop Oshl\n              (Ebinop Oand (Ecast (Econst_int (Int.repr 0) tint) tulong)\n                (Econst_long (Int64.repr 65535) tulong) tulong)\n              (Econst_int (Int.repr 36) tint) tulong) tulong))\n        (Ssequence\n          (Sassign\n            (Ederef\n              (Ebinop Oadd\n                (Efield (Evar _t (Tstruct __2380 noattr)) _n\n                  (tarray tulong 5)) (Econst_int (Int.repr 4) tint)\n                (tptr tulong)) tulong)\n            (Ebinop Oor\n              (Ebinop Oshr (Ecast (Econst_int (Int.repr 0) tint) tulong)\n                (Econst_int (Int.repr 16) tint) tulong)\n              (Ebinop Oshl (Ecast (Econst_int (Int.repr 0) tint) tulong)\n                (Econst_int (Int.repr 16) tint) tulong) tulong))\n          (Ssequence\n            (Sassign\n              (Efield (Evar _t (Tstruct __2380 noattr)) _magnitude tint)\n              (Econst_int (Int.repr 1) tint))\n            (Ssequence\n              (Sassign\n                (Efield (Evar _t (Tstruct __2380 noattr)) _normalized tint)\n                (Econst_int (Int.repr 1) tint))\n              (Ssequence\n                (Sset _ret (Econst_int (Int.repr 1) tint))\n                (Ssequence\n                  (Sifthenelse (Etempvar _blind32 (tptr tuchar))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_scalar_set_b32 (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __2843 noattr))\n                                                            (Tcons\n                                                              (tptr tuchar)\n                                                              (Tcons\n                                                                (tptr tint)\n                                                                Tnil))) tvoid\n                                                          cc_default))\n                        ((Eaddrof (Evar _blind (Tstruct __2843 noattr))\n                           (tptr (Tstruct __2843 noattr))) ::\n                         (Etempvar _blind32 (tptr tuchar)) ::\n                         (Eaddrof (Evar _overflow tint) (tptr tint)) :: nil))\n                      (Ssequence\n                        (Ssequence\n                          (Sset _t'3 (Evar _overflow tint))\n                          (Sset _ret\n                            (Eunop Onotbool (Etempvar _t'3 tint) tint)))\n                        (Scall None\n                          (Evar _secp256k1_ecmult (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __3156 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __3156 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2843 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2843 noattr))\n                                                            Tnil)))) tvoid\n                                                    cc_default))\n                          ((Eaddrof (Evar _accum (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _inf (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _zero (Tstruct __2843 noattr))\n                             (tptr (Tstruct __2843 noattr))) ::\n                           (Eaddrof (Evar _blind (Tstruct __2843 noattr))\n                             (tptr (Tstruct __2843 noattr))) :: nil))))\n                    Sskip)\n                  (Ssequence\n                    (Ssequence\n                      (Ssequence\n                        (Scall None\n                          (Evar _sha256_init (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct _sha256_context noattr))\n                                                 (Tcons (tptr tuint) Tnil))\n                                               tvoid\n                                               {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|}))\n                          ((Eaddrof\n                             (Evar __res__1 (Tstruct _sha256_context noattr))\n                             (tptr (Tstruct _sha256_context noattr))) ::\n                           (Efield\n                             (Evar _sha256_buf (Tstruct _sha256_midstate noattr))\n                             _s (tarray tuint 8)) :: nil))\n                        (Sassign\n                          (Evar _sha256_ctx (Tstruct _sha256_context noattr))\n                          (Evar __res__1 (Tstruct _sha256_context noattr))))\n                      (Ssequence\n                        (Scall None\n                          (Evar _sha256_uchars (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _sha256_context noattr))\n                                                   (Tcons (tptr tuchar)\n                                                     (Tcons tulong Tnil)))\n                                                 tbool cc_default))\n                          ((Eaddrof\n                             (Evar _sha256_ctx (Tstruct _sha256_context noattr))\n                             (tptr (Tstruct _sha256_context noattr))) ::\n                           (Evar _prefix1 (tarray tuchar 17)) ::\n                           (Econst_int (Int.repr 16) tint) :: nil))\n                        (Ssequence\n                          (Scall None\n                            (Evar _sha256_uchars (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct _sha256_context noattr))\n                                                     (Tcons (tptr tuchar)\n                                                       (Tcons tulong Tnil)))\n                                                   tbool cc_default))\n                            ((Eaddrof\n                               (Evar _sha256_ctx (Tstruct _sha256_context noattr))\n                               (tptr (Tstruct _sha256_context noattr))) ::\n                             (Etempvar _key32 (tptr tuchar)) ::\n                             (Econst_int (Int.repr 32) tint) :: nil))\n                          (Ssequence\n                            (Scall None\n                              (Evar _sha256_finalize (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct _sha256_context noattr))\n                                                         Tnil) tbool\n                                                       cc_default))\n                              ((Eaddrof\n                                 (Evar _sha256_ctx (Tstruct _sha256_context noattr))\n                                 (tptr (Tstruct _sha256_context noattr))) ::\n                               nil))\n                            (Scall None\n                              (Evar _sha256_fromMidstate (Tfunction\n                                                           (Tcons\n                                                             (tptr tuchar)\n                                                             (Tcons\n                                                               (tptr tuint)\n                                                               Tnil)) tvoid\n                                                           cc_default))\n                              ((Evar _b32 (tarray tuchar 32)) ::\n                               (Efield\n                                 (Evar _sha256_buf (Tstruct _sha256_midstate noattr))\n                                 _s (tarray tuint 8)) :: nil))))))\n                    (Ssequence\n                      (Ssequence\n                        (Scall (Some _t'1)\n                          (Evar _secp256k1_fe_set_b32 (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __2380 noattr))\n                                                          (Tcons\n                                                            (tptr tuchar)\n                                                            Tnil)) tint\n                                                        cc_default))\n                          ((Eaddrof (Evar _t (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) ::\n                           (Evar _b32 (tarray tuchar 32)) :: nil))\n                        (Sset _ret\n                          (Ebinop Oand (Etempvar _ret tint)\n                            (Etempvar _t'1 tint) tint)))\n                      (Ssequence\n                        (Scall None\n                          (Evar _shallue_van_de_woestijne (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __3154 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __2380 noattr))\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                          ((Eaddrof (Evar _add (Tstruct __3154 noattr))\n                             (tptr (Tstruct __3154 noattr))) ::\n                           (Eaddrof (Evar _t (Tstruct __2380 noattr))\n                             (tptr (Tstruct __2380 noattr))) :: nil))\n                        (Ssequence\n                          (Sifthenelse (Etempvar _blind32 (tptr tuchar))\n                            (Scall None\n                              (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __3156 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __3156 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3154 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))))\n                                                                tvoid\n                                                                cc_default))\n                              ((Eaddrof (Evar _accum (Tstruct __3156 noattr))\n                                 (tptr (Tstruct __3156 noattr))) ::\n                               (Eaddrof (Evar _accum (Tstruct __3156 noattr))\n                                 (tptr (Tstruct __3156 noattr))) ::\n                               (Eaddrof (Evar _add (Tstruct __3154 noattr))\n                                 (tptr (Tstruct __3154 noattr))) ::\n                               (Ecast (Econst_int (Int.repr 0) tint)\n                                 (tptr tvoid)) :: nil))\n                            (Scall None\n                              (Evar _secp256k1_gej_set_ge (Tfunction\n                                                            (Tcons\n                                                              (tptr (Tstruct __3156 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __3154 noattr))\n                                                                Tnil)) tvoid\n                                                            cc_default))\n                              ((Eaddrof (Evar _accum (Tstruct __3156 noattr))\n                                 (tptr (Tstruct __3156 noattr))) ::\n                               (Eaddrof (Evar _add (Tstruct __3154 noattr))\n                                 (tptr (Tstruct __3154 noattr))) :: nil)))\n                          (Ssequence\n                            (Ssequence\n                              (Ssequence\n                                (Scall None\n                                  (Evar _sha256_init (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct _sha256_context noattr))\n                                                         (Tcons (tptr tuint)\n                                                           Tnil)) tvoid\n                                                       {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|}))\n                                  ((Eaddrof\n                                     (Evar __res (Tstruct _sha256_context noattr))\n                                     (tptr (Tstruct _sha256_context noattr))) ::\n                                   (Efield\n                                     (Evar _sha256_buf (Tstruct _sha256_midstate noattr))\n                                     _s (tarray tuint 8)) :: nil))\n                                (Sassign\n                                  (Evar _sha256_ctx__1 (Tstruct _sha256_context noattr))\n                                  (Evar __res (Tstruct _sha256_context noattr))))\n                              (Ssequence\n                                (Scall None\n                                  (Evar _sha256_uchars (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct _sha256_context noattr))\n                                                           (Tcons\n                                                             (tptr tuchar)\n                                                             (Tcons tulong\n                                                               Tnil))) tbool\n                                                         cc_default))\n                                  ((Eaddrof\n                                     (Evar _sha256_ctx__1 (Tstruct _sha256_context noattr))\n                                     (tptr (Tstruct _sha256_context noattr))) ::\n                                   (Evar _prefix2 (tarray tuchar 17)) ::\n                                   (Econst_int (Int.repr 16) tint) :: nil))\n                                (Ssequence\n                                  (Scall None\n                                    (Evar _sha256_uchars (Tfunction\n                                                           (Tcons\n                                                             (tptr (Tstruct _sha256_context noattr))\n                                                             (Tcons\n                                                               (tptr tuchar)\n                                                               (Tcons tulong\n                                                                 Tnil)))\n                                                           tbool cc_default))\n                                    ((Eaddrof\n                                       (Evar _sha256_ctx__1 (Tstruct _sha256_context noattr))\n                                       (tptr (Tstruct _sha256_context noattr))) ::\n                                     (Etempvar _key32 (tptr tuchar)) ::\n                                     (Econst_int (Int.repr 32) tint) :: nil))\n                                  (Ssequence\n                                    (Scall None\n                                      (Evar _sha256_finalize (Tfunction\n                                                               (Tcons\n                                                                 (tptr (Tstruct _sha256_context noattr))\n                                                                 Tnil) tbool\n                                                               cc_default))\n                                      ((Eaddrof\n                                         (Evar _sha256_ctx__1 (Tstruct _sha256_context noattr))\n                                         (tptr (Tstruct _sha256_context noattr))) ::\n                                       nil))\n                                    (Scall None\n                                      (Evar _sha256_fromMidstate (Tfunction\n                                                                   (Tcons\n                                                                    (tptr tuchar)\n                                                                    (Tcons\n                                                                    (tptr tuint)\n                                                                    Tnil))\n                                                                   tvoid\n                                                                   cc_default))\n                                      ((Evar _b32 (tarray tuchar 32)) ::\n                                       (Efield\n                                         (Evar _sha256_buf (Tstruct _sha256_midstate noattr))\n                                         _s (tarray tuint 8)) :: nil))))))\n                            (Ssequence\n                              (Ssequence\n                                (Scall (Some _t'2)\n                                  (Evar _secp256k1_fe_set_b32 (Tfunction\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil))\n                                                                tint\n                                                                cc_default))\n                                  ((Eaddrof (Evar _t (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) ::\n                                   (Evar _b32 (tarray tuchar 32)) :: nil))\n                                (Sset _ret\n                                  (Ebinop Oand (Etempvar _ret tint)\n                                    (Etempvar _t'2 tint) tint)))\n                              (Ssequence\n                                (Scall None\n                                  (Evar _shallue_van_de_woestijne (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3154 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))\n                                                                    tvoid\n                                                                    cc_default))\n                                  ((Eaddrof\n                                     (Evar _add (Tstruct __3154 noattr))\n                                     (tptr (Tstruct __3154 noattr))) ::\n                                   (Eaddrof (Evar _t (Tstruct __2380 noattr))\n                                     (tptr (Tstruct __2380 noattr))) :: nil))\n                                (Ssequence\n                                  (Scall None\n                                    (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3156 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3156 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3154 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))))\n                                                                    tvoid\n                                                                    cc_default))\n                                    ((Eaddrof\n                                       (Evar _accum (Tstruct __3156 noattr))\n                                       (tptr (Tstruct __3156 noattr))) ::\n                                     (Eaddrof\n                                       (Evar _accum (Tstruct __3156 noattr))\n                                       (tptr (Tstruct __3156 noattr))) ::\n                                     (Eaddrof\n                                       (Evar _add (Tstruct __3154 noattr))\n                                       (tptr (Tstruct __3154 noattr))) ::\n                                     (Ecast (Econst_int (Int.repr 0) tint)\n                                       (tptr tvoid)) :: nil))\n                                  (Ssequence\n                                    (Scall None\n                                      (Evar _secp256k1_ge_set_gej_var \n                                      (Tfunction\n                                        (Tcons (tptr (Tstruct __3154 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            Tnil)) tvoid cc_default))\n                                      ((Eaddrof\n                                         (Evar _add (Tstruct __3154 noattr))\n                                         (tptr (Tstruct __3154 noattr))) ::\n                                       (Eaddrof\n                                         (Evar _accum (Tstruct __3156 noattr))\n                                         (tptr (Tstruct __3156 noattr))) ::\n                                       nil))\n                                    (Ssequence\n                                      (Scall None\n                                        (Evar _secp256k1_generator_save \n                                        (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3711 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              Tnil)) tvoid cc_default))\n                                        ((Etempvar _gen (tptr (Tstruct __3711 noattr))) ::\n                                         (Eaddrof\n                                           (Evar _add (Tstruct __3154 noattr))\n                                           (tptr (Tstruct __3154 noattr))) ::\n                                         nil))\n                                      (Sreturn (Some (Etempvar _ret tint))))))))))))))))))))))\n|}.\n\nDefinition f_secp256k1_generator_generate := {|\n  fn_return := tint;\n  fn_callconv := cc_default;\n  fn_params := ((_gen, (tptr (Tstruct __3711 noattr))) ::\n                (_key32, (tptr tuchar)) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sloop\n    (Sifthenelse (Eunop Onotbool\n                   (Ebinop One (Etempvar _gen (tptr (Tstruct __3711 noattr)))\n                     (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                     tint) tint)\n      (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n      Sskip)\n    Sbreak)\n  (Ssequence\n    (Sloop\n      (Sifthenelse (Eunop Onotbool\n                     (Ebinop One (Etempvar _key32 (tptr tuchar))\n                       (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid))\n                       tint) tint)\n        (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n        Sskip)\n      Sbreak)\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _secp256k1_generator_generate_internal (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __3711 noattr))\n                                                         (Tcons (tptr tuchar)\n                                                           (Tcons\n                                                             (tptr tuchar)\n                                                             Tnil))) tint\n                                                       cc_default))\n        ((Etempvar _gen (tptr (Tstruct __3711 noattr))) ::\n         (Etempvar _key32 (tptr tuchar)) ::\n         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))\n      (Sreturn (Some (Etempvar _t'1 tint))))))\n|}.\n\nDefinition f_simplicity_gej_is_valid_var := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_a, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := ((_x3, (Tstruct __2380 noattr)) ::\n              (_y2, (Tstruct __2380 noattr)) ::\n              (_z6, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_fe_sqr (Tfunction\n                              (Tcons (tptr (Tstruct __2380 noattr))\n                                (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                              tvoid cc_default))\n    ((Eaddrof (Evar _y2 (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) ::\n     (Eaddrof\n       (Efield\n         (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n           (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_sqr (Tfunction\n                                (Tcons (tptr (Tstruct __2380 noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n      ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof\n           (Efield\n             (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_sqr (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _z6 (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof\n             (Efield\n               (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_fe_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil))) tvoid cc_default))\n            ((Eaddrof (Evar _z6 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof (Evar _z6 (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) ::\n             (Eaddrof\n               (Efield\n                 (Ederef (Etempvar _a (tptr (Tstruct __3156 noattr)))\n                   (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_fe_sqr (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2380 noattr))\n                                            Tnil)) tvoid cc_default))\n              ((Eaddrof (Evar _z6 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) ::\n               (Eaddrof (Evar _z6 (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_mul_int (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                (Tcons tint Tnil)) tvoid\n                                              cc_default))\n                ((Eaddrof (Evar _z6 (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Econst_int (Int.repr 7) tint) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_fe_add (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil)) tvoid cc_default))\n                  ((Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _z6 (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Ssequence\n                  (Scall (Some _t'1)\n                    (Evar _secp256k1_fe_equal_var (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2380 noattr))\n                                                        Tnil)) tint\n                                                    cc_default))\n                    ((Eaddrof (Evar _y2 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Eaddrof (Evar _x3 (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) :: nil))\n                  (Sreturn (Some (Etempvar _t'1 tint))))))))))))\n|}.\n\nDefinition f_read_fe := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2380 noattr))) ::\n                (_src, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 32)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _read8s (Tfunction\n                    (Tcons (tptr tuchar)\n                      (Tcons tulong\n                        (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)))\n                    tvoid cc_default))\n    ((Evar _buf (tarray tuchar 32)) :: (Econst_int (Int.repr 32) tint) ::\n     (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n  (Ssequence\n    (Scall (Some _t'1)\n      (Evar _secp256k1_fe_set_b32 (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr tuchar) Tnil)) tint\n                                    cc_default))\n      ((Etempvar _r (tptr (Tstruct __2380 noattr))) ::\n       (Evar _buf (tarray tuchar 32)) :: nil))\n    (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n      (Scall None\n        (Evar _secp256k1_fe_normalize_var (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil) tvoid cc_default))\n        ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))\n      Sskip)))\n|}.\n\nDefinition f_write_fe := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_r, (tptr (Tstruct __2380 noattr))) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 32)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_fe_normalize_var (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil) tvoid cc_default))\n    ((Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_get_b32 (Tfunction\n                                    (Tcons (tptr tuchar)\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n      ((Evar _buf (tarray tuchar 32)) ::\n       (Etempvar _r (tptr (Tstruct __2380 noattr))) :: nil))\n    (Scall None\n      (Evar _write8s (Tfunction\n                       (Tcons (tptr (Tstruct _frameItem noattr))\n                         (Tcons (tptr tuchar) (Tcons tulong Tnil))) tvoid\n                       cc_default))\n      ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n       (Evar _buf (tarray tuchar 32)) :: (Econst_int (Int.repr 32) tint) ::\n       nil))))\n|}.\n\nDefinition f_skip_fe := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Scall None\n  (Evar _skipBits (Tfunction\n                    (Tcons (tptr (Tstruct _frameItem noattr))\n                      (Tcons tulong Tnil)) tvoid cc_default))\n  ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n   (Econst_int (Int.repr 256) tint) :: nil))\n|}.\n\nDefinition f_read_ge := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3154 noattr))) ::\n                (_src, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _read_fe (Tfunction\n                     (Tcons (tptr (Tstruct __2380 noattr))\n                       (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)) tvoid\n                     cc_default))\n    ((Eaddrof\n       (Efield\n         (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n           (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) ::\n     (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n             (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Sassign\n      (Efield\n        (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n          (Tstruct __3154 noattr)) _infinity tint)\n      (Econst_int (Int.repr 0) tint))))\n|}.\n\nDefinition f_write_ge := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_r, (tptr (Tstruct __3154 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _write_fe (Tfunction\n                      (Tcons (tptr (Tstruct _frameItem noattr))\n                        (Tcons (tptr (Tstruct __2380 noattr)) Tnil)) tvoid\n                      cc_default))\n    ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n     (Eaddrof\n       (Efield\n         (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n           (Tstruct __3154 noattr)) _x (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) :: nil))\n  (Scall None\n    (Evar _write_fe (Tfunction\n                      (Tcons (tptr (Tstruct _frameItem noattr))\n                        (Tcons (tptr (Tstruct __2380 noattr)) Tnil)) tvoid\n                      cc_default))\n    ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n     (Eaddrof\n       (Efield\n         (Ederef (Etempvar _r (tptr (Tstruct __3154 noattr)))\n           (Tstruct __3154 noattr)) _y (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) :: nil)))\n|}.\n\nDefinition f_skip_ge := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _skip_fe (Tfunction (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)\n                     tvoid cc_default))\n    ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) :: nil))\n  (Scall None\n    (Evar _skip_fe (Tfunction (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)\n                     tvoid cc_default))\n    ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) :: nil)))\n|}.\n\nDefinition f_read_gej := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __3156 noattr))) ::\n                (_src, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _read_fe (Tfunction\n                     (Tcons (tptr (Tstruct __2380 noattr))\n                       (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)) tvoid\n                     cc_default))\n    ((Eaddrof\n       (Efield\n         (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n           (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) ::\n     (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_fe (Tfunction\n                         (Tcons (tptr (Tstruct __2380 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof\n           (Efield\n             (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n               (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_fe_is_zero (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil) tint cc_default))\n          ((Eaddrof\n             (Efield\n               (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n                 (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sassign\n          (Efield\n            (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n              (Tstruct __3156 noattr)) _infinity tint) (Etempvar _t'1 tint))))))\n|}.\n\nDefinition f_write_gej := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_r, (tptr (Tstruct __3156 noattr))) :: nil);\n  fn_vars := nil;\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _write_fe (Tfunction\n                      (Tcons (tptr (Tstruct _frameItem noattr))\n                        (Tcons (tptr (Tstruct __2380 noattr)) Tnil)) tvoid\n                      cc_default))\n    ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n     (Eaddrof\n       (Efield\n         (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n           (Tstruct __3156 noattr)) _x (Tstruct __2380 noattr))\n       (tptr (Tstruct __2380 noattr))) :: nil))\n  (Ssequence\n    (Scall None\n      (Evar _write_fe (Tfunction\n                        (Tcons (tptr (Tstruct _frameItem noattr))\n                          (Tcons (tptr (Tstruct __2380 noattr)) Tnil)) tvoid\n                        cc_default))\n      ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _y (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Scall None\n      (Evar _write_fe (Tfunction\n                        (Tcons (tptr (Tstruct _frameItem noattr))\n                          (Tcons (tptr (Tstruct __2380 noattr)) Tnil)) tvoid\n                        cc_default))\n      ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n       (Eaddrof\n         (Efield\n           (Ederef (Etempvar _r (tptr (Tstruct __3156 noattr)))\n             (Tstruct __3156 noattr)) _z (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))))\n|}.\n\nDefinition f_read_scalar := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_r, (tptr (Tstruct __2843 noattr))) ::\n                (_src, (tptr (Tstruct _frameItem noattr))) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 32)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _read8s (Tfunction\n                    (Tcons (tptr tuchar)\n                      (Tcons tulong\n                        (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)))\n                    tvoid cc_default))\n    ((Evar _buf (tarray tuchar 32)) :: (Econst_int (Int.repr 32) tint) ::\n     (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n  (Scall None\n    (Evar _secp256k1_scalar_set_b32 (Tfunction\n                                      (Tcons (tptr (Tstruct __2843 noattr))\n                                        (Tcons (tptr tuchar)\n                                          (Tcons (tptr tint) Tnil))) tvoid\n                                      cc_default))\n    ((Etempvar _r (tptr (Tstruct __2843 noattr))) ::\n     (Evar _buf (tarray tuchar 32)) ::\n     (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil)))\n|}.\n\nDefinition f_write_scalar := {|\n  fn_return := tvoid;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_r, (tptr (Tstruct __2843 noattr))) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 32)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Scall None\n    (Evar _secp256k1_scalar_get_b32 (Tfunction\n                                      (Tcons (tptr tuchar)\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          Tnil)) tvoid cc_default))\n    ((Evar _buf (tarray tuchar 32)) ::\n     (Etempvar _r (tptr (Tstruct __2843 noattr))) :: nil))\n  (Scall None\n    (Evar _write8s (Tfunction\n                     (Tcons (tptr (Tstruct _frameItem noattr))\n                       (Tcons (tptr tuchar) (Tcons tulong Tnil))) tvoid\n                     cc_default))\n    ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n     (Evar _buf (tarray tuchar 32)) :: (Econst_int (Int.repr 32) tint) ::\n     nil)))\n|}.\n\nDefinition f_simplicity_fe_normalize := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _write_fe (Tfunction\n                          (Tcons (tptr (Tstruct _frameItem noattr))\n                            (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                          tvoid cc_default))\n        ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_fe_negate := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_negate (Tfunction\n                                     (Tcons (tptr (Tstruct __2380 noattr))\n                                       (Tcons (tptr (Tstruct __2380 noattr))\n                                         (Tcons tint Tnil))) tvoid\n                                     cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Econst_int (Int.repr 1) tint) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_fe (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                            tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_fe_add := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) ::\n              (_b, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_fe (Tfunction\n                         (Tcons (tptr (Tstruct __2380 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_add (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _b (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_fe (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                              tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_fe_square := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_sqr (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_fe (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                            tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_fe_multiply := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) ::\n              (_b, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_fe (Tfunction\n                         (Tcons (tptr (Tstruct __2380 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_fe_mul (Tfunction\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil))) tvoid cc_default))\n          ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _b (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_fe (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                              tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_fe_multiply_beta := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_mul (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr))\n                                    (Tcons (tptr (Tstruct __2380 noattr))\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _secp256k1_const_beta (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_fe (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                            tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_fe_invert := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_fe_inv_var (Tfunction\n                                      (Tcons (tptr (Tstruct __2380 noattr))\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_fe (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                            tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_fe_square_root := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_r, (Tstruct __2380 noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_result, tint) :: (_t'2, tbool) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_fe_sqrt_var (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2380 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             Tnil)) tint cc_default))\n          ((Eaddrof (Evar _r (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Sset _result (Etempvar _t'1 tint)))\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'2)\n            (Evar _writeBit (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons tbool Tnil)) tbool cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Etempvar _result tint) :: nil))\n          (Sifthenelse (Etempvar _t'2 tbool)\n            (Scall None\n              (Evar _write_fe (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n               (Eaddrof (Evar _r (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Scall None\n              (Evar _skip_fe (Tfunction\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 Tnil) tvoid cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) :: nil))))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_fe_is_zero := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_fe_is_zero (Tfunction\n                                        (Tcons (tptr (Tstruct __2380 noattr))\n                                          Tnil) tint cc_default))\n          ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Scall None\n          (Evar _writeBit (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons tbool Tnil)) tbool cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Etempvar _t'1 tint) :: nil)))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_fe_is_odd := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_fe_is_odd (Tfunction\n                                       (Tcons (tptr (Tstruct __2380 noattr))\n                                         Tnil) tint cc_default))\n          ((Eaddrof (Evar _a (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Scall None\n          (Evar _writeBit (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons tbool Tnil)) tbool cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Etempvar _t'1 tint) :: nil)))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_scalar_normalize := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _write_scalar (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons (tptr (Tstruct __2843 noattr)) Tnil))\n                              tvoid cc_default))\n        ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) :: nil))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_scalar_negate := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_scalar_negate (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __2843 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2843 noattr))\n                                             Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_scalar (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __2843 noattr)) Tnil))\n                                tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_scalar_add := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) ::\n              (_b, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_scalar (Tfunction\n                             (Tcons (tptr (Tstruct __2843 noattr))\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_scalar_add (Tfunction\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2843 noattr))\n                                              Tnil))) tint cc_default))\n          ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _b (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_scalar (Tfunction\n                                  (Tcons (tptr (Tstruct _frameItem noattr))\n                                    (Tcons (tptr (Tstruct __2843 noattr))\n                                      Tnil)) tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_scalar_square := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_scalar_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2843 noattr))\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_scalar (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __2843 noattr)) Tnil))\n                                tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_scalar_multiply := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) ::\n              (_b, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_scalar (Tfunction\n                             (Tcons (tptr (Tstruct __2843 noattr))\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_scalar_mul (Tfunction\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2843 noattr))\n                                              Tnil))) tvoid cc_default))\n          ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _b (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_scalar (Tfunction\n                                  (Tcons (tptr (Tstruct _frameItem noattr))\n                                    (Tcons (tptr (Tstruct __2843 noattr))\n                                      Tnil)) tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_scalar_multiply_lambda := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_scalar_mul (Tfunction\n                                      (Tcons (tptr (Tstruct __2843 noattr))\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _secp256k1_const_lambda (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_scalar (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __2843 noattr)) Tnil))\n                                tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_scalar_invert := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_scalar_inverse_var (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __2843 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_scalar (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __2843 noattr)) Tnil))\n                                tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_scalar_is_zero := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_scalar_is_zero (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __2843 noattr))\n                                              Tnil) tint cc_default))\n          ((Eaddrof (Evar _a (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Scall None\n          (Evar _writeBit (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons tbool Tnil)) tbool cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Etempvar _t'1 tint) :: nil)))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_gej_infinity := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_gej_set_infinity (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            Tnil) tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _write_gej (Tfunction\n                           (Tcons (tptr (Tstruct _frameItem noattr))\n                             (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                           tvoid cc_default))\n        ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) :: nil))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_gej_rescale := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_c, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_fe (Tfunction\n                         (Tcons (tptr (Tstruct __2380 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof (Evar _c (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_gej_rescale (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __3156 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __2380 noattr))\n                                             Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof (Evar _c (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_gej (Tfunction\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                               tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_gej_normalize := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_r, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_t'2, tbool) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_gej_is_infinity (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __3156 noattr))\n                                                 Tnil) tint cc_default))\n            ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Scall (Some _t'2)\n            (Evar _writeBit (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons tbool Tnil)) tbool cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eunop Onotbool (Etempvar _t'1 tint) tint) :: nil)))\n        (Sifthenelse (Etempvar _t'2 tbool)\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_ge_set_gej_var (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __3154 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __3156 noattr))\n                                                    Tnil)) tvoid cc_default))\n              ((Eaddrof (Evar _r (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) ::\n               (Eaddrof (Evar _a (Tstruct __3156 noattr))\n                 (tptr (Tstruct __3156 noattr))) :: nil))\n            (Scall None\n              (Evar _write_ge (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __3154 noattr)) Tnil))\n                                tvoid cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n               (Eaddrof (Evar _r (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) :: nil)))\n          (Scall None\n            (Evar _skip_ge (Tfunction\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)\n                             tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) :: nil))))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_gej_negate := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_gej_neg (Tfunction\n                                   (Tcons (tptr (Tstruct __3156 noattr))\n                                     (Tcons (tptr (Tstruct __3156 noattr))\n                                       Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_gej (Tfunction\n                             (Tcons (tptr (Tstruct _frameItem noattr))\n                               (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                             tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_ge_negate := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_ge (Tfunction\n                       (Tcons (tptr (Tstruct __3154 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3154 noattr))\n         (tptr (Tstruct __3154 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_ge_neg (Tfunction\n                                  (Tcons (tptr (Tstruct __3154 noattr))\n                                    (Tcons (tptr (Tstruct __3154 noattr))\n                                      Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __3154 noattr))\n           (tptr (Tstruct __3154 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __3154 noattr))\n           (tptr (Tstruct __3154 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_ge (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons (tptr (Tstruct __3154 noattr)) Tnil))\n                            tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __3154 noattr))\n             (tptr (Tstruct __3154 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_gej_double := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_gej_double_var (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2380 noattr))\n                                                Tnil))) tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_gej (Tfunction\n                             (Tcons (tptr (Tstruct _frameItem noattr))\n                               (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                             tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_gej_add := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_b, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_gej_add_var (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct __3156 noattr))\n                                           (Tcons\n                                             (tptr (Tstruct __3156 noattr))\n                                             (Tcons\n                                               (tptr (Tstruct __3156 noattr))\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 Tnil)))) tvoid cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof (Evar _b (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_gej (Tfunction\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                               tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_gej_ge_add_ex := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_b, (Tstruct __3154 noattr)) ::\n              (_rzr, (Tstruct __2380 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _secp256k1_fe_clear (Tfunction\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil)\n                                  tvoid cc_default))\n      ((Eaddrof (Evar _rzr (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _read_ge (Tfunction\n                           (Tcons (tptr (Tstruct __3154 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n          ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n             (tptr (Tstruct __3154 noattr))) ::\n           (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n             (tptr (Tstruct _frameItem noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __3156 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __3154 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil)))) tvoid\n                                              cc_default))\n            ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) ::\n             (Eaddrof (Evar _b (Tstruct __3154 noattr))\n               (tptr (Tstruct __3154 noattr))) ::\n             (Eaddrof (Evar _rzr (Tstruct __2380 noattr))\n               (tptr (Tstruct __2380 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _write_fe (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __2380 noattr)) Tnil))\n                                tvoid cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n               (Eaddrof (Evar _rzr (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _write_gej (Tfunction\n                                   (Tcons (tptr (Tstruct _frameItem noattr))\n                                     (Tcons (tptr (Tstruct __3156 noattr))\n                                       Tnil)) tvoid cc_default))\n                ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n                 (Eaddrof (Evar _a (Tstruct __3156 noattr))\n                   (tptr (Tstruct __3156 noattr))) :: nil))\n              (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))))\n|}.\n\nDefinition f_simplicity_gej_ge_add := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_b, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_ge (Tfunction\n                         (Tcons (tptr (Tstruct __3154 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n           (tptr (Tstruct __3154 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3156 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __3154 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    Tnil)))) tvoid\n                                            cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof (Evar _b (Tstruct __3154 noattr))\n             (tptr (Tstruct __3154 noattr))) ::\n           (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_gej (Tfunction\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                               tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_gej_is_infinity := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_gej_is_infinity (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3156 noattr))\n                                               Tnil) tint cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) :: nil))\n        (Scall None\n          (Evar _writeBit (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons tbool Tnil)) tbool cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Etempvar _t'1 tint) :: nil)))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_gej_equiv := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_b, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_gej_eq_var (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              Tnil)) tint cc_default))\n            ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) ::\n             (Eaddrof (Evar _b (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Scall None\n            (Evar _writeBit (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons tbool Tnil)) tbool cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Etempvar _t'1 tint) :: nil)))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_gej_ge_equiv := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_b, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_ge (Tfunction\n                         (Tcons (tptr (Tstruct __3154 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n           (tptr (Tstruct __3154 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _secp256k1_gej_eq_ge_var (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3156 noattr))\n                                               (Tcons\n                                                 (tptr (Tstruct __3154 noattr))\n                                                 Tnil)) tint cc_default))\n            ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) ::\n             (Eaddrof (Evar _b (Tstruct __3154 noattr))\n               (tptr (Tstruct __3154 noattr))) :: nil))\n          (Scall None\n            (Evar _writeBit (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons tbool Tnil)) tbool cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Etempvar _t'1 tint) :: nil)))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_gej_x_equiv := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_x, (Tstruct __2380 noattr)) ::\n              (_a, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_t'3, tint) :: (_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _x (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Scall (Some _t'1)\n              (Evar _secp256k1_gej_is_infinity (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __3156 noattr))\n                                                   Tnil) tint cc_default))\n              ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n                 (tptr (Tstruct __3156 noattr))) :: nil))\n            (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n              (Ssequence\n                (Scall (Some _t'3)\n                  (Evar _secp256k1_gej_eq_x_var (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __2380 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __3156 noattr))\n                                                      Tnil)) tint cc_default))\n                  ((Eaddrof (Evar _x (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) ::\n                   (Eaddrof (Evar _a (Tstruct __3156 noattr))\n                     (tptr (Tstruct __3156 noattr))) :: nil))\n                (Sset _t'2 (Ecast (Etempvar _t'3 tint) tbool)))\n              (Sset _t'2 (Econst_int (Int.repr 0) tint))))\n          (Scall None\n            (Evar _writeBit (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons tbool Tnil)) tbool cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Etempvar _t'2 tint) :: nil)))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_gej_y_is_odd := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_b, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'2)\n          (Evar _secp256k1_gej_is_infinity (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3156 noattr))\n                                               Tnil) tint cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) :: nil))\n        (Sifthenelse (Etempvar _t'2 tint)\n          (Scall None\n            (Evar _writeBit (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons tbool Tnil)) tbool cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Econst_int (Int.repr 0) tint) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_ge_set_gej_var (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __3154 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __3156 noattr))\n                                                    Tnil)) tvoid cc_default))\n              ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) ::\n               (Eaddrof (Evar _a (Tstruct __3156 noattr))\n                 (tptr (Tstruct __3156 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_fe_normalize_var (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __2380 noattr))\n                                                      Tnil) tvoid cc_default))\n                ((Eaddrof\n                   (Efield (Evar _b (Tstruct __3154 noattr)) _y\n                     (Tstruct __2380 noattr)) (tptr (Tstruct __2380 noattr))) ::\n                 nil))\n              (Ssequence\n                (Scall (Some _t'1)\n                  (Evar _secp256k1_fe_is_odd (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __2380 noattr))\n                                                 Tnil) tint cc_default))\n                  ((Eaddrof\n                     (Efield (Evar _b (Tstruct __3154 noattr)) _y\n                       (Tstruct __2380 noattr))\n                     (tptr (Tstruct __2380 noattr))) :: nil))\n                (Scall None\n                  (Evar _writeBit (Tfunction\n                                    (Tcons (tptr (Tstruct _frameItem noattr))\n                                      (Tcons tbool Tnil)) tbool cc_default))\n                  ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n                   (Etempvar _t'1 tint) :: nil)))))))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_gej_is_on_curve := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_t'1, tbool) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_gej (Tfunction\n                        (Tcons (tptr (Tstruct __3156 noattr))\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                        tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n         (tptr (Tstruct __3156 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _simplicity_gej_is_valid_var (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __3156 noattr))\n                                                 Tnil) tbool cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) :: nil))\n        (Scall None\n          (Evar _writeBit (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons tbool Tnil)) tbool cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Etempvar _t'1 tbool) :: nil)))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition f_simplicity_ge_is_on_curve := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_ge (Tfunction\n                       (Tcons (tptr (Tstruct __3154 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _a (Tstruct __3154 noattr))\n         (tptr (Tstruct __3154 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_ge_is_valid_var (Tfunction\n                                             (Tcons\n                                               (tptr (Tstruct __3154 noattr))\n                                               Tnil) tint cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3154 noattr))\n             (tptr (Tstruct __3154 noattr))) :: nil))\n        (Scall None\n          (Evar _writeBit (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons tbool Tnil)) tbool cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Etempvar _t'1 tint) :: nil)))\n      (Sreturn (Some (Econst_int (Int.repr 1) tint))))))\n|}.\n\nDefinition v_ng := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_simplicity_off_curve_scale := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_r, (Tstruct __3156 noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_na, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _na (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_ecmult (Tfunction\n                                    (Tcons (tptr (Tstruct __3156 noattr))\n                                      (Tcons (tptr (Tstruct __3156 noattr))\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            Tnil)))) tvoid cc_default))\n          ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) ::\n           (Eaddrof (Evar _na (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _ng (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_gej (Tfunction\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                               tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _r (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition v_ng__1 := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_simplicity_scale := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_r, (Tstruct __3156 noattr)) ::\n              (_a, (Tstruct __3156 noattr)) ::\n              (_na, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := ((_t'1, tbool) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _na (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _simplicity_gej_is_valid_var (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __3156 noattr))\n                                                 Tnil) tbool cc_default))\n          ((Eaddrof (Evar _a (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) :: nil))\n        (Sifthenelse (Etempvar _t'1 tbool)\n          (Ssequence\n            (Scall None\n              (Evar _secp256k1_ecmult (Tfunction\n                                        (Tcons (tptr (Tstruct __3156 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2843 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2843 noattr))\n                                                Tnil)))) tvoid cc_default))\n              ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                 (tptr (Tstruct __3156 noattr))) ::\n               (Eaddrof (Evar _a (Tstruct __3156 noattr))\n                 (tptr (Tstruct __3156 noattr))) ::\n               (Eaddrof (Evar _na (Tstruct __2843 noattr))\n                 (tptr (Tstruct __2843 noattr))) ::\n               (Eaddrof (Evar _ng__1 (Tstruct __2843 noattr))\n                 (tptr (Tstruct __2843 noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _write_gej (Tfunction\n                                   (Tcons (tptr (Tstruct _frameItem noattr))\n                                     (Tcons (tptr (Tstruct __3156 noattr))\n                                       Tnil)) tvoid cc_default))\n                ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n                 (Eaddrof (Evar _r (Tstruct __3156 noattr))\n                   (tptr (Tstruct __3156 noattr))) :: nil))\n              (Sreturn (Some (Econst_int (Int.repr 1) tint)))))\n          (Sreturn (Some (Econst_int (Int.repr 0) tint))))))))\n|}.\n\nDefinition v_a := {|\n  gvar_info := (Tstruct __3156 noattr);\n  gvar_init := (Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int32 (Int.repr 1) ::\n                Init_int32 (Int.repr 1) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int32 (Int.repr 1) :: Init_int32 (Int.repr 1) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int32 (Int.repr 1) ::\n                Init_int32 (Int.repr 1) :: Init_int32 (Int.repr 1) ::\n                Init_space 4 :: nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition v_na := {|\n  gvar_info := (Tstruct __2843 noattr);\n  gvar_init := (Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                Init_int64 (Int64.repr 0) :: Init_int64 (Int64.repr 0) ::\n                nil);\n  gvar_readonly := true;\n  gvar_volatile := false\n|}.\n\nDefinition f_simplicity_generate := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_r, (Tstruct __3156 noattr)) ::\n              (_ng__2, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _secp256k1_ecmult (Tfunction\n                                  (Tcons (tptr (Tstruct __3156 noattr))\n                                    (Tcons (tptr (Tstruct __3156 noattr))\n                                      (Tcons (tptr (Tstruct __2843 noattr))\n                                        (Tcons (tptr (Tstruct __2843 noattr))\n                                          Tnil)))) tvoid cc_default))\n        ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _a (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _na (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) ::\n         (Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n           (tptr (Tstruct __2843 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_gej (Tfunction\n                             (Tcons (tptr (Tstruct _frameItem noattr))\n                               (Tcons (tptr (Tstruct __3156 noattr)) Tnil))\n                             tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _r (Tstruct __3156 noattr))\n             (tptr (Tstruct __3156 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_off_curve_linear_combination_1 := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_r, (Tstruct __3156 noattr)) ::\n              (_a__1, (Tstruct __3156 noattr)) ::\n              (_na__1, (Tstruct __2843 noattr)) ::\n              (_ng__2, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _a__1 (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _read_scalar (Tfunction\n                               (Tcons (tptr (Tstruct __2843 noattr))\n                                 (Tcons (tptr (Tstruct _frameItem noattr))\n                                   Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n             (tptr (Tstruct _frameItem noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _secp256k1_ecmult (Tfunction\n                                      (Tcons (tptr (Tstruct __3156 noattr))\n                                        (Tcons (tptr (Tstruct __3156 noattr))\n                                          (Tcons\n                                            (tptr (Tstruct __2843 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2843 noattr))\n                                              Tnil)))) tvoid cc_default))\n            ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) ::\n             (Eaddrof (Evar _a__1 (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) ::\n             (Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) ::\n             (Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _write_gej (Tfunction\n                                 (Tcons (tptr (Tstruct _frameItem noattr))\n                                   (Tcons (tptr (Tstruct __3156 noattr))\n                                     Tnil)) tvoid cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n               (Eaddrof (Evar _r (Tstruct __3156 noattr))\n                 (tptr (Tstruct __3156 noattr))) :: nil))\n            (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))))\n|}.\n\nDefinition f_simplicity_linear_combination_1 := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_r, (Tstruct __3156 noattr)) ::\n              (_a__1, (Tstruct __3156 noattr)) ::\n              (_na__1, (Tstruct __2843 noattr)) ::\n              (_ng__2, (Tstruct __2843 noattr)) :: nil);\n  fn_temps := ((_t'1, tbool) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_gej (Tfunction\n                          (Tcons (tptr (Tstruct __3156 noattr))\n                            (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                          tvoid cc_default))\n        ((Eaddrof (Evar _a__1 (Tstruct __3156 noattr))\n           (tptr (Tstruct __3156 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _read_scalar (Tfunction\n                               (Tcons (tptr (Tstruct __2843 noattr))\n                                 (Tcons (tptr (Tstruct _frameItem noattr))\n                                   Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n             (tptr (Tstruct _frameItem noattr))) :: nil))\n        (Ssequence\n          (Scall (Some _t'1)\n            (Evar _simplicity_gej_is_valid_var (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct __3156 noattr))\n                                                   Tnil) tbool cc_default))\n            ((Eaddrof (Evar _a__1 (Tstruct __3156 noattr))\n               (tptr (Tstruct __3156 noattr))) :: nil))\n          (Sifthenelse (Etempvar _t'1 tbool)\n            (Ssequence\n              (Scall None\n                (Evar _secp256k1_ecmult (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3156 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __3156 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __2843 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __2843 noattr))\n                                                  Tnil)))) tvoid cc_default))\n                ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                   (tptr (Tstruct __3156 noattr))) ::\n                 (Eaddrof (Evar _a__1 (Tstruct __3156 noattr))\n                   (tptr (Tstruct __3156 noattr))) ::\n                 (Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n                   (tptr (Tstruct __2843 noattr))) ::\n                 (Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n                   (tptr (Tstruct __2843 noattr))) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _write_gej (Tfunction\n                                     (Tcons\n                                       (tptr (Tstruct _frameItem noattr))\n                                       (Tcons (tptr (Tstruct __3156 noattr))\n                                         Tnil)) tvoid cc_default))\n                  ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n                   (Eaddrof (Evar _r (Tstruct __3156 noattr))\n                     (tptr (Tstruct __3156 noattr))) :: nil))\n                (Sreturn (Some (Econst_int (Int.repr 1) tint)))))\n            (Sreturn (Some (Econst_int (Int.repr 0) tint)))))))))\n|}.\n\nDefinition f_simplicity_linear_verify_1 := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_a__1, (Tstruct __3154 noattr)) ::\n              (_b, (Tstruct __3154 noattr)) ::\n              (_na__1, (Tstruct __2843 noattr)) ::\n              (_ng__2, (Tstruct __2843 noattr)) ::\n              (_r, (Tstruct __3156 noattr)) ::\n              (_a0, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_t'4, tint) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _read_ge (Tfunction\n                         (Tcons (tptr (Tstruct __3154 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof (Evar _a__1 (Tstruct __3154 noattr))\n           (tptr (Tstruct __3154 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _read_scalar (Tfunction\n                               (Tcons (tptr (Tstruct __2843 noattr))\n                                 (Tcons (tptr (Tstruct _frameItem noattr))\n                                   Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n             (tptr (Tstruct __2843 noattr))) ::\n           (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n             (tptr (Tstruct _frameItem noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _read_ge (Tfunction\n                             (Tcons (tptr (Tstruct __3154 noattr))\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 Tnil)) tvoid cc_default))\n            ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n               (tptr (Tstruct __3154 noattr))) ::\n             (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n               (tptr (Tstruct _frameItem noattr))) :: nil))\n          (Ssequence\n            (Ssequence\n              (Scall (Some _t'2)\n                (Evar _secp256k1_ge_is_valid_var (Tfunction\n                                                   (Tcons\n                                                     (tptr (Tstruct __3154 noattr))\n                                                     Tnil) tint cc_default))\n                ((Eaddrof (Evar _a__1 (Tstruct __3154 noattr))\n                   (tptr (Tstruct __3154 noattr))) :: nil))\n              (Sifthenelse (Etempvar _t'2 tint)\n                (Ssequence\n                  (Scall (Some _t'4)\n                    (Evar _secp256k1_ge_is_valid_var (Tfunction\n                                                       (Tcons\n                                                         (tptr (Tstruct __3154 noattr))\n                                                         Tnil) tint\n                                                       cc_default))\n                    ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n                       (tptr (Tstruct __3154 noattr))) :: nil))\n                  (Sset _t'3 (Ecast (Etempvar _t'4 tint) tbool)))\n                (Sset _t'3 (Econst_int (Int.repr 0) tint))))\n            (Sifthenelse (Etempvar _t'3 tint)\n              (Ssequence\n                (Scall None\n                  (Evar _secp256k1_gej_set_ge (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __3156 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __3154 noattr))\n                                                    Tnil)) tvoid cc_default))\n                  ((Eaddrof (Evar _a0 (Tstruct __3156 noattr))\n                     (tptr (Tstruct __3156 noattr))) ::\n                   (Eaddrof (Evar _a__1 (Tstruct __3154 noattr))\n                     (tptr (Tstruct __3154 noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _secp256k1_ge_neg (Tfunction\n                                              (Tcons\n                                                (tptr (Tstruct __3154 noattr))\n                                                (Tcons\n                                                  (tptr (Tstruct __3154 noattr))\n                                                  Tnil)) tvoid cc_default))\n                    ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n                       (tptr (Tstruct __3154 noattr))) ::\n                     (Eaddrof (Evar _b (Tstruct __3154 noattr))\n                       (tptr (Tstruct __3154 noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_ecmult (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __3156 noattr))\n                                                  (Tcons\n                                                    (tptr (Tstruct __3156 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __2843 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __2843 noattr))\n                                                        Tnil)))) tvoid\n                                                cc_default))\n                      ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                         (tptr (Tstruct __3156 noattr))) ::\n                       (Eaddrof (Evar _a0 (Tstruct __3156 noattr))\n                         (tptr (Tstruct __3156 noattr))) ::\n                       (Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n                         (tptr (Tstruct __2843 noattr))) ::\n                       (Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n                         (tptr (Tstruct __2843 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                                          (Tcons\n                                                            (tptr (Tstruct __3156 noattr))\n                                                            (Tcons\n                                                              (tptr (Tstruct __3156 noattr))\n                                                              (Tcons\n                                                                (tptr (Tstruct __3154 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __2380 noattr))\n                                                                  Tnil))))\n                                                          tvoid cc_default))\n                        ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                           (tptr (Tstruct __3156 noattr))) ::\n                         (Eaddrof (Evar _r (Tstruct __3156 noattr))\n                           (tptr (Tstruct __3156 noattr))) ::\n                         (Eaddrof (Evar _b (Tstruct __3154 noattr))\n                           (tptr (Tstruct __3154 noattr))) ::\n                         (Ecast (Econst_int (Int.repr 0) tint) (tptr tvoid)) ::\n                         nil))\n                      (Ssequence\n                        (Scall (Some _t'1)\n                          (Evar _secp256k1_gej_is_infinity (Tfunction\n                                                             (Tcons\n                                                               (tptr (Tstruct __3156 noattr))\n                                                               Tnil) tint\n                                                             cc_default))\n                          ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) :: nil))\n                        (Sreturn (Some (Etempvar _t'1 tint))))))))\n              (Sreturn (Some (Econst_int (Int.repr 0) tint))))))))))\n|}.\n\nDefinition f_simplicity_decompress := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_x, (Tstruct __2380 noattr)) ::\n              (_r, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_y, tbool) :: (_t'3, tbool) :: (_t'2, tint) ::\n               (_t'1, tbool) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Ssequence\n      (Scall (Some _t'1)\n        (Evar _readBit (Tfunction\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)\n                         tbool cc_default))\n        ((Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Sset _y (Ecast (Etempvar _t'1 tbool) tbool)))\n    (Ssequence\n      (Scall None\n        (Evar _read_fe (Tfunction\n                         (Tcons (tptr (Tstruct __2380 noattr))\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                         tvoid cc_default))\n        ((Eaddrof (Evar _x (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) ::\n         (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n           (tptr (Tstruct _frameItem noattr))) :: nil))\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Scall (Some _t'2)\n              (Evar _secp256k1_ge_set_xo_var (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct __3154 noattr))\n                                                 (Tcons\n                                                   (tptr (Tstruct __2380 noattr))\n                                                   (Tcons tint Tnil))) tint\n                                               cc_default))\n              ((Eaddrof (Evar _r (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) ::\n               (Eaddrof (Evar _x (Tstruct __2380 noattr))\n                 (tptr (Tstruct __2380 noattr))) :: (Etempvar _y tbool) ::\n               nil))\n            (Scall (Some _t'3)\n              (Evar _writeBit (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons tbool Tnil)) tbool cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n               (Etempvar _t'2 tint) :: nil)))\n          (Sifthenelse (Etempvar _t'3 tbool)\n            (Scall None\n              (Evar _write_ge (Tfunction\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  (Tcons (tptr (Tstruct __3154 noattr)) Tnil))\n                                tvoid cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n               (Eaddrof (Evar _r (Tstruct __3154 noattr))\n                 (tptr (Tstruct __3154 noattr))) :: nil))\n            (Scall None\n              (Evar _skip_ge (Tfunction\n                               (Tcons (tptr (Tstruct _frameItem noattr))\n                                 Tnil) tvoid cc_default))\n              ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) :: nil))))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_point_verify_1 := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_ax, (Tstruct __2380 noattr)) ::\n              (_bx, (Tstruct __2380 noattr)) ::\n              (_a__1, (Tstruct __3154 noattr)) ::\n              (_b, (Tstruct __3154 noattr)) ::\n              (_na__1, (Tstruct __2843 noattr)) ::\n              (_ng__2, (Tstruct __2843 noattr)) ::\n              (_r, (Tstruct __3156 noattr)) ::\n              (_a0, (Tstruct __3156 noattr)) :: nil);\n  fn_temps := ((_ay, tbool) :: (_by, tbool) :: (_t'6, tint) ::\n               (_t'5, tint) :: (_t'4, tint) :: (_t'3, tint) ::\n               (_t'2, tbool) :: (_t'1, tbool) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_scalar (Tfunction\n                           (Tcons (tptr (Tstruct __2843 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n      ((Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n         (tptr (Tstruct __2843 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _readBit (Tfunction\n                           (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)\n                           tbool cc_default))\n          ((Eaddrof (Evar _src (Tstruct _frameItem noattr))\n             (tptr (Tstruct _frameItem noattr))) :: nil))\n        (Sset _ay (Ecast (Etempvar _t'1 tbool) tbool)))\n      (Ssequence\n        (Scall None\n          (Evar _read_fe (Tfunction\n                           (Tcons (tptr (Tstruct __2380 noattr))\n                             (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                           tvoid cc_default))\n          ((Eaddrof (Evar _ax (Tstruct __2380 noattr))\n             (tptr (Tstruct __2380 noattr))) ::\n           (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n             (tptr (Tstruct _frameItem noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _read_scalar (Tfunction\n                                 (Tcons (tptr (Tstruct __2843 noattr))\n                                   (Tcons (tptr (Tstruct _frameItem noattr))\n                                     Tnil)) tvoid cc_default))\n            ((Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n               (tptr (Tstruct __2843 noattr))) ::\n             (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n               (tptr (Tstruct _frameItem noattr))) :: nil))\n          (Ssequence\n            (Ssequence\n              (Scall (Some _t'2)\n                (Evar _readBit (Tfunction\n                                 (Tcons (tptr (Tstruct _frameItem noattr))\n                                   Tnil) tbool cc_default))\n                ((Eaddrof (Evar _src (Tstruct _frameItem noattr))\n                   (tptr (Tstruct _frameItem noattr))) :: nil))\n              (Sset _by (Ecast (Etempvar _t'2 tbool) tbool)))\n            (Ssequence\n              (Scall None\n                (Evar _read_fe (Tfunction\n                                 (Tcons (tptr (Tstruct __2380 noattr))\n                                   (Tcons (tptr (Tstruct _frameItem noattr))\n                                     Tnil)) tvoid cc_default))\n                ((Eaddrof (Evar _bx (Tstruct __2380 noattr))\n                   (tptr (Tstruct __2380 noattr))) ::\n                 (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n                   (tptr (Tstruct _frameItem noattr))) :: nil))\n              (Ssequence\n                (Ssequence\n                  (Scall (Some _t'4)\n                    (Evar _secp256k1_ge_set_xo_var (Tfunction\n                                                     (Tcons\n                                                       (tptr (Tstruct __3154 noattr))\n                                                       (Tcons\n                                                         (tptr (Tstruct __2380 noattr))\n                                                         (Tcons tint Tnil)))\n                                                     tint cc_default))\n                    ((Eaddrof (Evar _a__1 (Tstruct __3154 noattr))\n                       (tptr (Tstruct __3154 noattr))) ::\n                     (Eaddrof (Evar _ax (Tstruct __2380 noattr))\n                       (tptr (Tstruct __2380 noattr))) ::\n                     (Etempvar _ay tbool) :: nil))\n                  (Sifthenelse (Etempvar _t'4 tint)\n                    (Ssequence\n                      (Scall (Some _t'6)\n                        (Evar _secp256k1_ge_set_xo_var (Tfunction\n                                                         (Tcons\n                                                           (tptr (Tstruct __3154 noattr))\n                                                           (Tcons\n                                                             (tptr (Tstruct __2380 noattr))\n                                                             (Tcons tint\n                                                               Tnil))) tint\n                                                         cc_default))\n                        ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n                           (tptr (Tstruct __3154 noattr))) ::\n                         (Eaddrof (Evar _bx (Tstruct __2380 noattr))\n                           (tptr (Tstruct __2380 noattr))) ::\n                         (Etempvar _by tbool) :: nil))\n                      (Sset _t'5 (Ecast (Etempvar _t'6 tint) tbool)))\n                    (Sset _t'5 (Econst_int (Int.repr 0) tint))))\n                (Sifthenelse (Etempvar _t'5 tint)\n                  (Ssequence\n                    (Scall None\n                      (Evar _secp256k1_gej_set_ge (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __3156 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __3154 noattr))\n                                                        Tnil)) tvoid\n                                                    cc_default))\n                      ((Eaddrof (Evar _a0 (Tstruct __3156 noattr))\n                         (tptr (Tstruct __3156 noattr))) ::\n                       (Eaddrof (Evar _a__1 (Tstruct __3154 noattr))\n                         (tptr (Tstruct __3154 noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _secp256k1_ge_neg (Tfunction\n                                                  (Tcons\n                                                    (tptr (Tstruct __3154 noattr))\n                                                    (Tcons\n                                                      (tptr (Tstruct __3154 noattr))\n                                                      Tnil)) tvoid\n                                                  cc_default))\n                        ((Eaddrof (Evar _b (Tstruct __3154 noattr))\n                           (tptr (Tstruct __3154 noattr))) ::\n                         (Eaddrof (Evar _b (Tstruct __3154 noattr))\n                           (tptr (Tstruct __3154 noattr))) :: nil))\n                      (Ssequence\n                        (Scall None\n                          (Evar _secp256k1_ecmult (Tfunction\n                                                    (Tcons\n                                                      (tptr (Tstruct __3156 noattr))\n                                                      (Tcons\n                                                        (tptr (Tstruct __3156 noattr))\n                                                        (Tcons\n                                                          (tptr (Tstruct __2843 noattr))\n                                                          (Tcons\n                                                            (tptr (Tstruct __2843 noattr))\n                                                            Tnil)))) tvoid\n                                                    cc_default))\n                          ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _a0 (Tstruct __3156 noattr))\n                             (tptr (Tstruct __3156 noattr))) ::\n                           (Eaddrof (Evar _na__1 (Tstruct __2843 noattr))\n                             (tptr (Tstruct __2843 noattr))) ::\n                           (Eaddrof (Evar _ng__2 (Tstruct __2843 noattr))\n                             (tptr (Tstruct __2843 noattr))) :: nil))\n                        (Ssequence\n                          (Scall None\n                            (Evar _secp256k1_gej_add_ge_var (Tfunction\n                                                              (Tcons\n                                                                (tptr (Tstruct __3156 noattr))\n                                                                (Tcons\n                                                                  (tptr (Tstruct __3156 noattr))\n                                                                  (Tcons\n                                                                    (tptr (Tstruct __3154 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2380 noattr))\n                                                                    Tnil))))\n                                                              tvoid\n                                                              cc_default))\n                            ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                               (tptr (Tstruct __3156 noattr))) ::\n                             (Eaddrof (Evar _r (Tstruct __3156 noattr))\n                               (tptr (Tstruct __3156 noattr))) ::\n                             (Eaddrof (Evar _b (Tstruct __3154 noattr))\n                               (tptr (Tstruct __3154 noattr))) ::\n                             (Ecast (Econst_int (Int.repr 0) tint)\n                               (tptr tvoid)) :: nil))\n                          (Ssequence\n                            (Scall (Some _t'3)\n                              (Evar _secp256k1_gej_is_infinity (Tfunction\n                                                                 (Tcons\n                                                                   (tptr (Tstruct __3156 noattr))\n                                                                   Tnil) tint\n                                                                 cc_default))\n                              ((Eaddrof (Evar _r (Tstruct __3156 noattr))\n                                 (tptr (Tstruct __3156 noattr))) :: nil))\n                            (Sreturn (Some (Etempvar _t'3 tint))))))))\n                  (Sreturn (Some (Econst_int (Int.repr 0) tint))))))))))))\n|}.\n\nDefinition f_simplicity_bip_0340_verify := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_buf, (tarray tuchar 32)) ::\n              (_pubkey, (Tstruct __3626 noattr)) ::\n              (_msg, (tarray tuchar 32)) :: (_sig, (tarray tuchar 64)) ::\n              nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read8s (Tfunction\n                      (Tcons (tptr tuchar)\n                        (Tcons tulong\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)))\n                      tvoid cc_default))\n      ((Evar _buf (tarray tuchar 32)) :: (Econst_int (Int.repr 32) tint) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_xonly_pubkey_parse (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __3626 noattr))\n                                                  (Tcons (tptr tuchar) Tnil))\n                                                tint cc_default))\n          ((Eaddrof (Evar _pubkey (Tstruct __3626 noattr))\n             (tptr (Tstruct __3626 noattr))) ::\n           (Evar _buf (tarray tuchar 32)) :: nil))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip))\n      (Ssequence\n        (Scall None\n          (Evar _read8s (Tfunction\n                          (Tcons (tptr tuchar)\n                            (Tcons tulong\n                              (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)))\n                          tvoid cc_default))\n          ((Evar _msg (tarray tuchar 32)) ::\n           (Econst_int (Int.repr 32) tint) ::\n           (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n             (tptr (Tstruct _frameItem noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _read8s (Tfunction\n                            (Tcons (tptr tuchar)\n                              (Tcons tulong\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  Tnil))) tvoid cc_default))\n            ((Evar _sig (tarray tuchar 64)) ::\n             (Econst_int (Int.repr 64) tint) ::\n             (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n               (tptr (Tstruct _frameItem noattr))) :: nil))\n          (Ssequence\n            (Scall (Some _t'2)\n              (Evar _secp256k1_schnorrsig_verify (Tfunction\n                                                   (Tcons (tptr tuchar)\n                                                     (Tcons (tptr tuchar)\n                                                       (Tcons tulong\n                                                         (Tcons\n                                                           (tptr (Tstruct __3626 noattr))\n                                                           Tnil)))) tint\n                                                   cc_default))\n              ((Evar _sig (tarray tuchar 64)) ::\n               (Evar _msg (tarray tuchar 32)) ::\n               (Esizeof (tarray tuchar 32) tulong) ::\n               (Eaddrof (Evar _pubkey (Tstruct __3626 noattr))\n                 (tptr (Tstruct __3626 noattr))) :: nil))\n            (Sreturn (Some (Etempvar _t'2 tint)))))))))\n|}.\n\nDefinition f_simplicity_check_sig_verify := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_buf, (tarray tuchar 32)) ::\n              (_pubkey, (Tstruct __3626 noattr)) ::\n              (_msg, (tarray tuchar 64)) :: (_sig, (tarray tuchar 64)) ::\n              (_output, (Tstruct _sha256_midstate noattr)) ::\n              (_ctx, (Tstruct _sha256_context noattr)) ::\n              (__res, (Tstruct _sha256_context noattr)) :: nil);\n  fn_temps := ((_t'2, tint) :: (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read8s (Tfunction\n                      (Tcons (tptr tuchar)\n                        (Tcons tulong\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)))\n                      tvoid cc_default))\n      ((Evar _buf (tarray tuchar 32)) :: (Econst_int (Int.repr 32) tint) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_xonly_pubkey_parse (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __3626 noattr))\n                                                  (Tcons (tptr tuchar) Tnil))\n                                                tint cc_default))\n          ((Eaddrof (Evar _pubkey (Tstruct __3626 noattr))\n             (tptr (Tstruct __3626 noattr))) ::\n           (Evar _buf (tarray tuchar 32)) :: nil))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip))\n      (Ssequence\n        (Ssequence\n          (Ssequence\n            (Scall None\n              (Evar _sha256_tagged_init (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct _sha256_context noattr))\n                                            (Tcons (tptr tuint)\n                                              (Tcons\n                                                (tptr (Tstruct _sha256_midstate noattr))\n                                                Tnil))) tvoid\n                                          {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|}))\n              ((Eaddrof (Evar __res (Tstruct _sha256_context noattr))\n                 (tptr (Tstruct _sha256_context noattr))) ::\n               (Efield (Evar _output (Tstruct _sha256_midstate noattr)) _s\n                 (tarray tuint 8)) ::\n               (Eaddrof (Evar _signatureIV (Tstruct _sha256_midstate noattr))\n                 (tptr (Tstruct _sha256_midstate noattr))) :: nil))\n            (Sassign (Evar _ctx (Tstruct _sha256_context noattr))\n              (Evar __res (Tstruct _sha256_context noattr))))\n          (Ssequence\n            (Scall None\n              (Evar _read8s (Tfunction\n                              (Tcons (tptr tuchar)\n                                (Tcons tulong\n                                  (Tcons (tptr (Tstruct _frameItem noattr))\n                                    Tnil))) tvoid cc_default))\n              ((Evar _msg (tarray tuchar 64)) ::\n               (Econst_int (Int.repr 64) tint) ::\n               (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n                 (tptr (Tstruct _frameItem noattr))) :: nil))\n            (Ssequence\n              (Scall None\n                (Evar _sha256_uchars (Tfunction\n                                       (Tcons\n                                         (tptr (Tstruct _sha256_context noattr))\n                                         (Tcons (tptr tuchar)\n                                           (Tcons tulong Tnil))) tbool\n                                       cc_default))\n                ((Eaddrof (Evar _ctx (Tstruct _sha256_context noattr))\n                   (tptr (Tstruct _sha256_context noattr))) ::\n                 (Evar _msg (tarray tuchar 64)) ::\n                 (Econst_int (Int.repr 64) tint) :: nil))\n              (Ssequence\n                (Scall None\n                  (Evar _sha256_finalize (Tfunction\n                                           (Tcons\n                                             (tptr (Tstruct _sha256_context noattr))\n                                             Tnil) tbool cc_default))\n                  ((Eaddrof (Evar _ctx (Tstruct _sha256_context noattr))\n                     (tptr (Tstruct _sha256_context noattr))) :: nil))\n                (Scall None\n                  (Evar _sha256_fromMidstate (Tfunction\n                                               (Tcons (tptr tuchar)\n                                                 (Tcons (tptr tuint) Tnil))\n                                               tvoid cc_default))\n                  ((Evar _buf (tarray tuchar 32)) ::\n                   (Efield (Evar _output (Tstruct _sha256_midstate noattr))\n                     _s (tarray tuint 8)) :: nil))))))\n        (Ssequence\n          (Scall None\n            (Evar _read8s (Tfunction\n                            (Tcons (tptr tuchar)\n                              (Tcons tulong\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  Tnil))) tvoid cc_default))\n            ((Evar _sig (tarray tuchar 64)) ::\n             (Econst_int (Int.repr 64) tint) ::\n             (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n               (tptr (Tstruct _frameItem noattr))) :: nil))\n          (Ssequence\n            (Scall (Some _t'2)\n              (Evar _secp256k1_schnorrsig_verify (Tfunction\n                                                   (Tcons (tptr tuchar)\n                                                     (Tcons (tptr tuchar)\n                                                       (Tcons tulong\n                                                         (Tcons\n                                                           (tptr (Tstruct __3626 noattr))\n                                                           Tnil)))) tint\n                                                   cc_default))\n              ((Evar _sig (tarray tuchar 64)) ::\n               (Evar _buf (tarray tuchar 32)) ::\n               (Esizeof (tarray tuchar 32) tulong) ::\n               (Eaddrof (Evar _pubkey (Tstruct __3626 noattr))\n                 (tptr (Tstruct __3626 noattr))) :: nil))\n            (Sreturn (Some (Etempvar _t'2 tint)))))))))\n|}.\n\nDefinition f_simplicity_swu := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_t, (Tstruct __2380 noattr)) ::\n              (_ge, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := nil;\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read_fe (Tfunction\n                       (Tcons (tptr (Tstruct __2380 noattr))\n                         (Tcons (tptr (Tstruct _frameItem noattr)) Tnil))\n                       tvoid cc_default))\n      ((Eaddrof (Evar _t (Tstruct __2380 noattr))\n         (tptr (Tstruct __2380 noattr))) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Scall None\n        (Evar _shallue_van_de_woestijne (Tfunction\n                                          (Tcons\n                                            (tptr (Tstruct __3154 noattr))\n                                            (Tcons\n                                              (tptr (Tstruct __2380 noattr))\n                                              Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _ge (Tstruct __3154 noattr))\n           (tptr (Tstruct __3154 noattr))) ::\n         (Eaddrof (Evar _t (Tstruct __2380 noattr))\n           (tptr (Tstruct __2380 noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _write_ge (Tfunction\n                            (Tcons (tptr (Tstruct _frameItem noattr))\n                              (Tcons (tptr (Tstruct __3154 noattr)) Tnil))\n                            tvoid cc_default))\n          ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n           (Eaddrof (Evar _ge (Tstruct __3154 noattr))\n             (tptr (Tstruct __3154 noattr))) :: nil))\n        (Sreturn (Some (Econst_int (Int.repr 1) tint)))))))\n|}.\n\nDefinition f_simplicity_hash_to_curve := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (Tstruct _frameItem noattr)) ::\n                (_env, (tptr (Tstruct _txEnv noattr))) :: nil);\n  fn_vars := ((_src, (Tstruct _frameItem noattr)) ::\n              (_key, (tarray tuchar 32)) ::\n              (_gen, (Tstruct __3711 noattr)) ::\n              (_ge, (Tstruct __3154 noattr)) :: nil);\n  fn_temps := ((_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Sassign (Evar _src (Tstruct _frameItem noattr))\n    (Etempvar _src (Tstruct _frameItem noattr)))\n  (Ssequence\n    (Scall None\n      (Evar _read8s (Tfunction\n                      (Tcons (tptr tuchar)\n                        (Tcons tulong\n                          (Tcons (tptr (Tstruct _frameItem noattr)) Tnil)))\n                      tvoid cc_default))\n      ((Evar _key (tarray tuchar 32)) :: (Econst_int (Int.repr 32) tint) ::\n       (Eaddrof (Evar _src (Tstruct _frameItem noattr))\n         (tptr (Tstruct _frameItem noattr))) :: nil))\n    (Ssequence\n      (Ssequence\n        (Scall (Some _t'1)\n          (Evar _secp256k1_generator_generate (Tfunction\n                                                (Tcons\n                                                  (tptr (Tstruct __3711 noattr))\n                                                  (Tcons (tptr tuchar) Tnil))\n                                                tint cc_default))\n          ((Eaddrof (Evar _gen (Tstruct __3711 noattr))\n             (tptr (Tstruct __3711 noattr))) ::\n           (Evar _key (tarray tuchar 32)) :: nil))\n        (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n          (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n          Sskip))\n      (Ssequence\n        (Scall None\n          (Evar _secp256k1_generator_load (Tfunction\n                                            (Tcons\n                                              (tptr (Tstruct __3154 noattr))\n                                              (Tcons\n                                                (tptr (Tstruct __3711 noattr))\n                                                Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _ge (Tstruct __3154 noattr))\n             (tptr (Tstruct __3154 noattr))) ::\n           (Eaddrof (Evar _gen (Tstruct __3711 noattr))\n             (tptr (Tstruct __3711 noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _write_ge (Tfunction\n                              (Tcons (tptr (Tstruct _frameItem noattr))\n                                (Tcons (tptr (Tstruct __3154 noattr)) Tnil))\n                              tvoid cc_default))\n            ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n             (Eaddrof (Evar _ge (Tstruct __3154 noattr))\n               (tptr (Tstruct __3154 noattr))) :: nil))\n          (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))\n|}.\n\nDefinition f_simplicity_generic_taptweak := {|\n  fn_return := tbool;\n  fn_callconv := cc_default;\n  fn_params := ((_dst, (tptr (Tstruct _frameItem noattr))) ::\n                (_src, (tptr (Tstruct _frameItem noattr))) ::\n                (_tagName, (tptr tuchar)) :: (_tagLen, tulong) :: nil);\n  fn_vars := ((_buf, (tarray tuchar 32)) ::\n              (_input_pubkey, (Tstruct __3626 noattr)) ::\n              (_output_pubkey, (Tstruct __3626 noattr)) ::\n              (_pubkey, (Tstruct __2064 noattr)) ::\n              (_taptweakTag, (Tstruct _sha256_midstate noattr)) ::\n              (_input_hash, (Tstruct _sha256_midstate noattr)) ::\n              (_output_hash, (Tstruct _sha256_midstate noattr)) ::\n              (_ctx, (Tstruct _sha256_context noattr)) ::\n              (_ctx__1, (Tstruct _sha256_context noattr)) ::\n              (__res, (Tstruct _sha256_context noattr)) ::\n              (__res__1, (Tstruct _sha256_context noattr)) :: nil);\n  fn_temps := ((_t'4, tint) :: (_t'3, tint) :: (_t'2, tint) ::\n               (_t'1, tint) :: nil);\n  fn_body :=\n(Ssequence\n  (Ssequence\n    (Ssequence\n      (Scall None\n        (Evar _sha256_init (Tfunction\n                             (Tcons (tptr (Tstruct _sha256_context noattr))\n                               (Tcons (tptr tuint) Tnil)) tvoid\n                             {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|}))\n        ((Eaddrof (Evar __res__1 (Tstruct _sha256_context noattr))\n           (tptr (Tstruct _sha256_context noattr))) ::\n         (Efield (Evar _taptweakTag (Tstruct _sha256_midstate noattr)) _s\n           (tarray tuint 8)) :: nil))\n      (Sassign (Evar _ctx (Tstruct _sha256_context noattr))\n        (Evar __res__1 (Tstruct _sha256_context noattr))))\n    (Ssequence\n      (Scall None\n        (Evar _sha256_uchars (Tfunction\n                               (Tcons (tptr (Tstruct _sha256_context noattr))\n                                 (Tcons (tptr tuchar) (Tcons tulong Tnil)))\n                               tbool cc_default))\n        ((Eaddrof (Evar _ctx (Tstruct _sha256_context noattr))\n           (tptr (Tstruct _sha256_context noattr))) ::\n         (Etempvar _tagName (tptr tuchar)) :: (Etempvar _tagLen tulong) ::\n         nil))\n      (Scall None\n        (Evar _sha256_finalize (Tfunction\n                                 (Tcons\n                                   (tptr (Tstruct _sha256_context noattr))\n                                   Tnil) tbool cc_default))\n        ((Eaddrof (Evar _ctx (Tstruct _sha256_context noattr))\n           (tptr (Tstruct _sha256_context noattr))) :: nil))))\n  (Ssequence\n    (Ssequence\n      (Scall None\n        (Evar _sha256_init (Tfunction\n                             (Tcons (tptr (Tstruct _sha256_context noattr))\n                               (Tcons (tptr tuint) Tnil)) tvoid\n                             {|cc_vararg:=None; cc_unproto:=false; cc_structret:=true|}))\n        ((Eaddrof (Evar __res (Tstruct _sha256_context noattr))\n           (tptr (Tstruct _sha256_context noattr))) ::\n         (Efield (Evar _output_hash (Tstruct _sha256_midstate noattr)) _s\n           (tarray tuint 8)) :: nil))\n      (Sassign (Evar _ctx__1 (Tstruct _sha256_context noattr))\n        (Evar __res (Tstruct _sha256_context noattr))))\n    (Ssequence\n      (Scall None\n        (Evar _sha256_hash (Tfunction\n                             (Tcons (tptr (Tstruct _sha256_context noattr))\n                               (Tcons\n                                 (tptr (Tstruct _sha256_midstate noattr))\n                                 Tnil)) tvoid cc_default))\n        ((Eaddrof (Evar _ctx__1 (Tstruct _sha256_context noattr))\n           (tptr (Tstruct _sha256_context noattr))) ::\n         (Eaddrof (Evar _taptweakTag (Tstruct _sha256_midstate noattr))\n           (tptr (Tstruct _sha256_midstate noattr))) :: nil))\n      (Ssequence\n        (Scall None\n          (Evar _sha256_hash (Tfunction\n                               (Tcons (tptr (Tstruct _sha256_context noattr))\n                                 (Tcons\n                                   (tptr (Tstruct _sha256_midstate noattr))\n                                   Tnil)) tvoid cc_default))\n          ((Eaddrof (Evar _ctx__1 (Tstruct _sha256_context noattr))\n             (tptr (Tstruct _sha256_context noattr))) ::\n           (Eaddrof (Evar _taptweakTag (Tstruct _sha256_midstate noattr))\n             (tptr (Tstruct _sha256_midstate noattr))) :: nil))\n        (Ssequence\n          (Scall None\n            (Evar _read8s (Tfunction\n                            (Tcons (tptr tuchar)\n                              (Tcons tulong\n                                (Tcons (tptr (Tstruct _frameItem noattr))\n                                  Tnil))) tvoid cc_default))\n            ((Evar _buf (tarray tuchar 32)) ::\n             (Econst_int (Int.repr 32) tint) ::\n             (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n          (Ssequence\n            (Scall None\n              (Evar _sha256_uchars (Tfunction\n                                     (Tcons\n                                       (tptr (Tstruct _sha256_context noattr))\n                                       (Tcons (tptr tuchar)\n                                         (Tcons tulong Tnil))) tbool\n                                     cc_default))\n              ((Eaddrof (Evar _ctx__1 (Tstruct _sha256_context noattr))\n                 (tptr (Tstruct _sha256_context noattr))) ::\n               (Evar _buf (tarray tuchar 32)) ::\n               (Econst_int (Int.repr 32) tint) :: nil))\n            (Ssequence\n              (Ssequence\n                (Scall (Some _t'1)\n                  (Evar _secp256k1_xonly_pubkey_parse (Tfunction\n                                                        (Tcons\n                                                          (tptr (Tstruct __3626 noattr))\n                                                          (Tcons\n                                                            (tptr tuchar)\n                                                            Tnil)) tint\n                                                        cc_default))\n                  ((Eaddrof (Evar _input_pubkey (Tstruct __3626 noattr))\n                     (tptr (Tstruct __3626 noattr))) ::\n                   (Evar _buf (tarray tuchar 32)) :: nil))\n                (Sifthenelse (Eunop Onotbool (Etempvar _t'1 tint) tint)\n                  (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                  Sskip))\n              (Ssequence\n                (Scall None\n                  (Evar _read32s (Tfunction\n                                   (Tcons (tptr tuint)\n                                     (Tcons tulong\n                                       (Tcons\n                                         (tptr (Tstruct _frameItem noattr))\n                                         Tnil))) tvoid cc_default))\n                  ((Efield\n                     (Evar _input_hash (Tstruct _sha256_midstate noattr)) _s\n                     (tarray tuint 8)) :: (Econst_int (Int.repr 8) tint) ::\n                   (Etempvar _src (tptr (Tstruct _frameItem noattr))) :: nil))\n                (Ssequence\n                  (Scall None\n                    (Evar _sha256_hash (Tfunction\n                                         (Tcons\n                                           (tptr (Tstruct _sha256_context noattr))\n                                           (Tcons\n                                             (tptr (Tstruct _sha256_midstate noattr))\n                                             Tnil)) tvoid cc_default))\n                    ((Eaddrof (Evar _ctx__1 (Tstruct _sha256_context noattr))\n                       (tptr (Tstruct _sha256_context noattr))) ::\n                     (Eaddrof\n                       (Evar _input_hash (Tstruct _sha256_midstate noattr))\n                       (tptr (Tstruct _sha256_midstate noattr))) :: nil))\n                  (Ssequence\n                    (Scall None\n                      (Evar _sha256_finalize (Tfunction\n                                               (Tcons\n                                                 (tptr (Tstruct _sha256_context noattr))\n                                                 Tnil) tbool cc_default))\n                      ((Eaddrof\n                         (Evar _ctx__1 (Tstruct _sha256_context noattr))\n                         (tptr (Tstruct _sha256_context noattr))) :: nil))\n                    (Ssequence\n                      (Scall None\n                        (Evar _sha256_fromMidstate (Tfunction\n                                                     (Tcons (tptr tuchar)\n                                                       (Tcons (tptr tuint)\n                                                         Tnil)) tvoid\n                                                     cc_default))\n                        ((Evar _buf (tarray tuchar 32)) ::\n                         (Efield\n                           (Evar _output_hash (Tstruct _sha256_midstate noattr))\n                           _s (tarray tuint 8)) :: nil))\n                      (Ssequence\n                        (Ssequence\n                          (Scall (Some _t'2)\n                            (Evar _secp256k1_xonly_pubkey_tweak_add (Tfunction\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __2064 noattr))\n                                                                    (Tcons\n                                                                    (tptr (Tstruct __3626 noattr))\n                                                                    (Tcons\n                                                                    (tptr tuchar)\n                                                                    Tnil)))\n                                                                    tint\n                                                                    cc_default))\n                            ((Eaddrof (Evar _pubkey (Tstruct __2064 noattr))\n                               (tptr (Tstruct __2064 noattr))) ::\n                             (Eaddrof\n                               (Evar _input_pubkey (Tstruct __3626 noattr))\n                               (tptr (Tstruct __3626 noattr))) ::\n                             (Evar _buf (tarray tuchar 32)) :: nil))\n                          (Sifthenelse (Eunop Onotbool (Etempvar _t'2 tint)\n                                         tint)\n                            (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                            Sskip))\n                        (Ssequence\n                          (Ssequence\n                            (Scall (Some _t'3)\n                              (Evar _secp256k1_xonly_pubkey_from_pubkey \n                              (Tfunction\n                                (Tcons (tptr (Tstruct __3626 noattr))\n                                  (Tcons (tptr tint)\n                                    (Tcons (tptr (Tstruct __2064 noattr))\n                                      Tnil))) tint cc_default))\n                              ((Eaddrof\n                                 (Evar _output_pubkey (Tstruct __3626 noattr))\n                                 (tptr (Tstruct __3626 noattr))) ::\n                               (Ecast (Econst_int (Int.repr 0) tint)\n                                 (tptr tvoid)) ::\n                               (Eaddrof\n                                 (Evar _pubkey (Tstruct __2064 noattr))\n                                 (tptr (Tstruct __2064 noattr))) :: nil))\n                            (Sifthenelse (Eunop Onotbool (Etempvar _t'3 tint)\n                                           tint)\n                              (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                              Sskip))\n                          (Ssequence\n                            (Ssequence\n                              (Scall (Some _t'4)\n                                (Evar _secp256k1_xonly_pubkey_serialize \n                                (Tfunction\n                                  (Tcons (tptr tuchar)\n                                    (Tcons (tptr (Tstruct __3626 noattr))\n                                      Tnil)) tint cc_default))\n                                ((Evar _buf (tarray tuchar 32)) ::\n                                 (Eaddrof\n                                   (Evar _output_pubkey (Tstruct __3626 noattr))\n                                   (tptr (Tstruct __3626 noattr))) :: nil))\n                              (Sifthenelse (Eunop Onotbool\n                                             (Etempvar _t'4 tint) tint)\n                                (Sreturn (Some (Econst_int (Int.repr 0) tint)))\n                                Sskip))\n                            (Ssequence\n                              (Scall None\n                                (Evar _write8s (Tfunction\n                                                 (Tcons\n                                                   (tptr (Tstruct _frameItem noattr))\n                                                   (Tcons (tptr tuchar)\n                                                     (Tcons tulong Tnil)))\n                                                 tvoid cc_default))\n                                ((Etempvar _dst (tptr (Tstruct _frameItem noattr))) ::\n                                 (Evar _buf (tarray tuchar 32)) ::\n                                 (Econst_int (Int.repr 32) tint) :: nil))\n                              (Sreturn (Some (Econst_int (Int.repr 1) tint))))))))))))))))))\n|}.\n\nDefinition composites : list composite_definition :=\n(Composite _sha256_midstate Struct\n   (Member_plain _s (tarray tuint 8) :: nil)\n   noattr ::\n Composite _sha256_context Struct\n   (Member_plain _output (tptr tuint) :: Member_plain _counter tulong ::\n    Member_plain _block (tarray tuchar 64) :: Member_plain _overflow tbool ::\n    nil)\n   noattr ::\n Composite _frameItem Struct\n   (Member_plain _edge (tptr tulong) :: Member_plain _offset tulong :: nil)\n   noattr ::\n Composite __2064 Struct\n   (Member_plain _data (tarray tuchar 64) :: nil)\n   noattr ::\n Composite __IO_FILE Struct\n   (Member_plain __flags tint :: Member_plain __IO_read_ptr (tptr tschar) ::\n    Member_plain __IO_read_end (tptr tschar) ::\n    Member_plain __IO_read_base (tptr tschar) ::\n    Member_plain __IO_write_base (tptr tschar) ::\n    Member_plain __IO_write_ptr (tptr tschar) ::\n    Member_plain __IO_write_end (tptr tschar) ::\n    Member_plain __IO_buf_base (tptr tschar) ::\n    Member_plain __IO_buf_end (tptr tschar) ::\n    Member_plain __IO_save_base (tptr tschar) ::\n    Member_plain __IO_backup_base (tptr tschar) ::\n    Member_plain __IO_save_end (tptr tschar) ::\n    Member_plain __markers (tptr (Tstruct __IO_marker noattr)) ::\n    Member_plain __chain (tptr (Tstruct __IO_FILE noattr)) ::\n    Member_plain __fileno tint :: Member_plain __flags2 tint ::\n    Member_plain __old_offset tlong :: Member_plain __cur_column tushort ::\n    Member_plain __vtable_offset tschar ::\n    Member_plain __shortbuf (tarray tschar 1) ::\n    Member_plain __lock (tptr tvoid) :: Member_plain __offset tlong ::\n    Member_plain __codecvt (tptr (Tstruct __IO_codecvt noattr)) ::\n    Member_plain __wide_data (tptr (Tstruct __IO_wide_data noattr)) ::\n    Member_plain __freeres_list (tptr (Tstruct __IO_FILE noattr)) ::\n    Member_plain __freeres_buf (tptr tvoid) ::\n    Member_plain __prevchain (tptr (tptr (Tstruct __IO_FILE noattr))) ::\n    Member_plain __mode tint :: Member_plain __unused2 (tarray tschar 20) ::\n    nil)\n   noattr ::\n Composite __2380 Struct\n   (Member_plain _n (tarray tulong 5) :: Member_plain _magnitude tint ::\n    Member_plain _normalized tint :: nil)\n   noattr ::\n Composite __2382 Struct (Member_plain _n (tarray tulong 4) :: nil) noattr ::\n Composite _secp256k1_uint128 Struct\n   (Member_plain _lo tulong :: Member_plain _hi tulong :: nil)\n   noattr ::\n Composite _secp256k1_modinv64_signed62 Struct\n   (Member_plain _v (tarray tlong 5) :: nil)\n   noattr ::\n Composite _secp256k1_modinv64_modinfo Struct\n   (Member_plain _modulus (Tstruct _secp256k1_modinv64_signed62 noattr) ::\n    Member_plain _modulus_inv62 tulong :: nil)\n   noattr ::\n Composite _secp256k1_modinv64_trans2x2 Struct\n   (Member_plain _u tlong :: Member_plain _v tlong ::\n    Member_plain _q tlong :: Member_plain _r tlong :: nil)\n   noattr ::\n Composite __2843 Struct (Member_plain _d (tarray tulong 4) :: nil) noattr ::\n Composite __3154 Struct\n   (Member_plain _x (Tstruct __2380 noattr) ::\n    Member_plain _y (Tstruct __2380 noattr) :: Member_plain _infinity tint ::\n    nil)\n   noattr ::\n Composite __3156 Struct\n   (Member_plain _x (Tstruct __2380 noattr) ::\n    Member_plain _y (Tstruct __2380 noattr) ::\n    Member_plain _z (Tstruct __2380 noattr) :: Member_plain _infinity tint ::\n    nil)\n   noattr ::\n Composite __3158 Struct\n   (Member_plain _x (Tstruct __2382 noattr) ::\n    Member_plain _y (Tstruct __2382 noattr) :: nil)\n   noattr ::\n Composite _secp256k1_strauss_point_state Struct\n   (Member_plain _wnaf_na_1 (tarray tint 129) ::\n    Member_plain _wnaf_na_lam (tarray tint 129) ::\n    Member_plain _bits_na_1 tint :: Member_plain _bits_na_lam tint :: nil)\n   noattr ::\n Composite _secp256k1_strauss_state Struct\n   (Member_plain _aux (tptr (Tstruct __2380 noattr)) ::\n    Member_plain _pre_a (tptr (Tstruct __3154 noattr)) ::\n    Member_plain _ps (tptr (Tstruct _secp256k1_strauss_point_state noattr)) ::\n    nil)\n   noattr ::\n Composite __3626 Struct\n   (Member_plain _data (tarray tuchar 64) :: nil)\n   noattr ::\n Composite __3711 Struct\n   (Member_plain _data (tarray tuchar 64) :: nil)\n   noattr :: nil).\n\nDefinition global_definitions : list (ident * globdef fundef type) :=\n((___compcert_va_int32,\n   Gfun(External (EF_runtime \"__compcert_va_int32\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint cc_default))\n     (Tcons (tptr tvoid) Tnil) tuint cc_default)) ::\n (___compcert_va_int64,\n   Gfun(External (EF_runtime \"__compcert_va_int64\"\n                   (mksignature (AST.Tlong :: nil) AST.Tlong cc_default))\n     (Tcons (tptr tvoid) Tnil) tulong cc_default)) ::\n (___compcert_va_float64,\n   Gfun(External (EF_runtime \"__compcert_va_float64\"\n                   (mksignature (AST.Tlong :: nil) AST.Tfloat cc_default))\n     (Tcons (tptr tvoid) Tnil) tdouble cc_default)) ::\n (___compcert_va_float32,\n   Gfun(External (EF_runtime \"__compcert_va_float32\"\n                   (mksignature (AST.Tlong :: nil) AST.Tsingle cc_default))\n     (Tcons (tptr tvoid) Tnil) tfloat cc_default)) ::\n (___compcert_va_composite,\n   Gfun(External (EF_runtime \"__compcert_va_composite\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons (tptr tvoid) (Tcons tulong Tnil))\n     (tptr tvoid) cc_default)) ::\n (___compcert_i64_dtos,\n   Gfun(External (EF_runtime \"__compcert_i64_dtos\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tlong cc_default))\n     (Tcons tdouble Tnil) tlong cc_default)) ::\n (___compcert_i64_dtou,\n   Gfun(External (EF_runtime \"__compcert_i64_dtou\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tlong cc_default))\n     (Tcons tdouble Tnil) tulong cc_default)) ::\n (___compcert_i64_ftos,\n   Gfun(External (EF_runtime \"__compcert_i64_ftos\"\n                   (mksignature (AST.Tsingle :: nil) AST.Tlong cc_default))\n     (Tcons tfloat Tnil) tulong cc_default)) ::\n (___compcert_i64_ftou,\n   Gfun(External (EF_runtime \"__compcert_i64_ftou\"\n                   (mksignature (AST.Tsingle :: nil) AST.Tlong cc_default))\n     (Tcons tfloat Tnil) tlong cc_default)) ::\n (___compcert_i64_stod,\n   Gfun(External (EF_runtime \"__compcert_i64_stod\"\n                   (mksignature (AST.Tlong :: nil) AST.Tfloat cc_default))\n     (Tcons tlong Tnil) tdouble cc_default)) ::\n (___compcert_i64_utod,\n   Gfun(External (EF_runtime \"__compcert_i64_utod\"\n                   (mksignature (AST.Tlong :: nil) AST.Tfloat cc_default))\n     (Tcons tulong Tnil) tdouble cc_default)) ::\n (___compcert_i64_stof,\n   Gfun(External (EF_runtime \"__compcert_i64_stof\"\n                   (mksignature (AST.Tlong :: nil) AST.Tsingle cc_default))\n     (Tcons tlong Tnil) tfloat cc_default)) ::\n (___compcert_i64_utof,\n   Gfun(External (EF_runtime \"__compcert_i64_utof\"\n                   (mksignature (AST.Tlong :: nil) AST.Tsingle cc_default))\n     (Tcons tulong Tnil) tfloat cc_default)) ::\n (___compcert_i64_sdiv,\n   Gfun(External (EF_runtime \"__compcert_i64_sdiv\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tlong Tnil)) tlong\n     cc_default)) ::\n (___compcert_i64_udiv,\n   Gfun(External (EF_runtime \"__compcert_i64_udiv\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tulong (Tcons tulong Tnil)) tulong\n     cc_default)) ::\n (___compcert_i64_smod,\n   Gfun(External (EF_runtime \"__compcert_i64_smod\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tlong Tnil)) tlong\n     cc_default)) ::\n (___compcert_i64_umod,\n   Gfun(External (EF_runtime \"__compcert_i64_umod\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tulong (Tcons tulong Tnil)) tulong\n     cc_default)) ::\n (___compcert_i64_shl,\n   Gfun(External (EF_runtime \"__compcert_i64_shl\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tint Tnil)) tlong\n     cc_default)) ::\n (___compcert_i64_shr,\n   Gfun(External (EF_runtime \"__compcert_i64_shr\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tlong\n                     cc_default)) (Tcons tulong (Tcons tint Tnil)) tulong\n     cc_default)) ::\n (___compcert_i64_sar,\n   Gfun(External (EF_runtime \"__compcert_i64_sar\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tint Tnil)) tlong\n     cc_default)) ::\n (___compcert_i64_smulh,\n   Gfun(External (EF_runtime \"__compcert_i64_smulh\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tlong Tnil)) tlong\n     cc_default)) ::\n (___compcert_i64_umulh,\n   Gfun(External (EF_runtime \"__compcert_i64_umulh\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tulong (Tcons tulong Tnil)) tulong\n     cc_default)) :: (___stringlit_1, Gvar v___stringlit_1) ::\n (___stringlit_2, Gvar v___stringlit_2) ::\n (___stringlit_3, Gvar v___stringlit_3) ::\n (___stringlit_4, Gvar v___stringlit_4) ::\n (___stringlit_5, Gvar v___stringlit_5) ::\n (___stringlit_6, Gvar v___stringlit_6) ::\n (___stringlit_7, Gvar v___stringlit_7) ::\n (___stringlit_8, Gvar v___stringlit_8) ::\n (___stringlit_9, Gvar v___stringlit_9) ::\n (___stringlit_10, Gvar v___stringlit_10) ::\n (___stringlit_20, Gvar v___stringlit_20) ::\n (___stringlit_30, Gvar v___stringlit_30) ::\n (___stringlit_40, Gvar v___stringlit_40) ::\n (___stringlit_50, Gvar v___stringlit_50) ::\n (___stringlit_60, Gvar v___stringlit_60) ::\n (___stringlit_70, Gvar v___stringlit_70) ::\n (___stringlit_80, Gvar v___stringlit_80) ::\n (___stringlit_90, Gvar v___stringlit_90) ::\n (___stringlit_11, Gvar v___stringlit_11) ::\n (___stringlit_21, Gvar v___stringlit_21) ::\n (___stringlit_31, Gvar v___stringlit_31) ::\n (___stringlit_41, Gvar v___stringlit_41) ::\n (___stringlit_51, Gvar v___stringlit_51) ::\n (___stringlit_61, Gvar v___stringlit_61) ::\n (___stringlit_71, Gvar v___stringlit_71) ::\n (___stringlit_81, Gvar v___stringlit_81) ::\n (___stringlit_91, Gvar v___stringlit_91) ::\n (___stringlit_12, Gvar v___stringlit_12) ::\n (___stringlit_22, Gvar v___stringlit_22) ::\n (___stringlit_32, Gvar v___stringlit_32) ::\n (___stringlit_42, Gvar v___stringlit_42) ::\n (___stringlit_52, Gvar v___stringlit_52) ::\n (___stringlit_62, Gvar v___stringlit_62) ::\n (___stringlit_72, Gvar v___stringlit_72) ::\n (___stringlit_82, Gvar v___stringlit_82) ::\n (___stringlit_92, Gvar v___stringlit_92) ::\n (___stringlit_13, Gvar v___stringlit_13) ::\n (___stringlit_23, Gvar v___stringlit_23) ::\n (___stringlit_33, Gvar v___stringlit_33) ::\n (___stringlit_43, Gvar v___stringlit_43) ::\n (___stringlit_53, Gvar v___stringlit_53) ::\n (___stringlit_63, Gvar v___stringlit_63) ::\n (___stringlit_73, Gvar v___stringlit_73) ::\n (___stringlit_83, Gvar v___stringlit_83) ::\n (___stringlit_93, Gvar v___stringlit_93) ::\n (___stringlit_14, Gvar v___stringlit_14) ::\n (___stringlit_24, Gvar v___stringlit_24) ::\n (___stringlit_34, Gvar v___stringlit_34) ::\n (___stringlit_44, Gvar v___stringlit_44) ::\n (___stringlit_54, Gvar v___stringlit_54) ::\n (___stringlit_64, Gvar v___stringlit_64) ::\n (___stringlit_74, Gvar v___stringlit_74) ::\n (___stringlit_84, Gvar v___stringlit_84) ::\n (___stringlit_94, Gvar v___stringlit_94) ::\n (___stringlit_15, Gvar v___stringlit_15) ::\n (___stringlit_25, Gvar v___stringlit_25) ::\n (___stringlit_35, Gvar v___stringlit_35) ::\n (___stringlit_45, Gvar v___stringlit_45) ::\n (___stringlit_55, Gvar v___stringlit_55) ::\n (___stringlit_65, Gvar v___stringlit_65) ::\n (___stringlit_75, Gvar v___stringlit_75) ::\n (___stringlit_85, Gvar v___stringlit_85) ::\n (___stringlit_95, Gvar v___stringlit_95) ::\n (___stringlit_16, Gvar v___stringlit_16) ::\n (___stringlit_26, Gvar v___stringlit_26) ::\n (___stringlit_36, Gvar v___stringlit_36) ::\n (___stringlit_46, Gvar v___stringlit_46) ::\n (___stringlit_56, Gvar v___stringlit_56) ::\n (___stringlit_66, Gvar v___stringlit_66) ::\n (___stringlit_76, Gvar v___stringlit_76) ::\n (___stringlit_86, Gvar v___stringlit_86) ::\n (___stringlit_96, Gvar v___stringlit_96) ::\n (___stringlit_17, Gvar v___stringlit_17) ::\n (___stringlit_27, Gvar v___stringlit_27) ::\n (___stringlit_37, Gvar v___stringlit_37) ::\n (___stringlit_47, Gvar v___stringlit_47) ::\n (___stringlit_57, Gvar v___stringlit_57) ::\n (___stringlit_67, Gvar v___stringlit_67) ::\n (___stringlit_77, Gvar v___stringlit_77) ::\n (___stringlit_87, Gvar v___stringlit_87) ::\n (___stringlit_97, Gvar v___stringlit_97) ::\n (___stringlit_18, Gvar v___stringlit_18) ::\n (___stringlit_28, Gvar v___stringlit_28) ::\n (___stringlit_38, Gvar v___stringlit_38) ::\n (___stringlit_48, Gvar v___stringlit_48) ::\n (___stringlit_58, Gvar v___stringlit_58) ::\n (___stringlit_68, Gvar v___stringlit_68) ::\n (___stringlit_78, Gvar v___stringlit_78) ::\n (___stringlit_88, Gvar v___stringlit_88) ::\n (___stringlit_98, Gvar v___stringlit_98) ::\n (___stringlit_19, Gvar v___stringlit_19) ::\n (___stringlit_29, Gvar v___stringlit_29) ::\n (___stringlit_39, Gvar v___stringlit_39) ::\n (___stringlit_49, Gvar v___stringlit_49) ::\n (___stringlit_59, Gvar v___stringlit_59) ::\n (___stringlit_69, Gvar v___stringlit_69) ::\n (___stringlit_79, Gvar v___stringlit_79) ::\n (___stringlit_89, Gvar v___stringlit_89) ::\n (___stringlit_99, Gvar v___stringlit_99) ::\n (___stringlit_100, Gvar v___stringlit_100) ::\n (___stringlit_110, Gvar v___stringlit_110) ::\n (___stringlit_120, Gvar v___stringlit_120) ::\n (___stringlit_130, Gvar v___stringlit_130) ::\n (___stringlit_140, Gvar v___stringlit_140) ::\n (___stringlit_150, Gvar v___stringlit_150) ::\n (___stringlit_160, Gvar v___stringlit_160) ::\n (___stringlit_170, Gvar v___stringlit_170) ::\n (___stringlit_101, Gvar v___stringlit_101) ::\n (___stringlit_111, Gvar v___stringlit_111) ::\n (___stringlit_121, Gvar v___stringlit_121) ::\n (___stringlit_131, Gvar v___stringlit_131) ::\n (___stringlit_141, Gvar v___stringlit_141) ::\n (___stringlit_151, Gvar v___stringlit_151) ::\n (___stringlit_161, Gvar v___stringlit_161) ::\n (___stringlit_171, Gvar v___stringlit_171) ::\n (___stringlit_102, Gvar v___stringlit_102) ::\n (___stringlit_112, Gvar v___stringlit_112) ::\n (___stringlit_122, Gvar v___stringlit_122) ::\n (___stringlit_132, Gvar v___stringlit_132) ::\n (___stringlit_142, Gvar v___stringlit_142) ::\n (___stringlit_152, Gvar v___stringlit_152) ::\n (___stringlit_162, Gvar v___stringlit_162) ::\n (___stringlit_172, Gvar v___stringlit_172) ::\n (___stringlit_103, Gvar v___stringlit_103) ::\n (___stringlit_113, Gvar v___stringlit_113) ::\n (___stringlit_123, Gvar v___stringlit_123) ::\n (___stringlit_133, Gvar v___stringlit_133) ::\n (___stringlit_143, Gvar v___stringlit_143) ::\n (___stringlit_153, Gvar v___stringlit_153) ::\n (___stringlit_163, Gvar v___stringlit_163) ::\n (___stringlit_104, Gvar v___stringlit_104) ::\n (___stringlit_114, Gvar v___stringlit_114) ::\n (___stringlit_124, Gvar v___stringlit_124) ::\n (___stringlit_134, Gvar v___stringlit_134) ::\n (___stringlit_144, Gvar v___stringlit_144) ::\n (___stringlit_154, Gvar v___stringlit_154) ::\n (___stringlit_164, Gvar v___stringlit_164) ::\n (___stringlit_105, Gvar v___stringlit_105) ::\n (___stringlit_115, Gvar v___stringlit_115) ::\n (___stringlit_125, Gvar v___stringlit_125) ::\n (___stringlit_135, Gvar v___stringlit_135) ::\n (___stringlit_145, Gvar v___stringlit_145) ::\n (___stringlit_155, Gvar v___stringlit_155) ::\n (___stringlit_165, Gvar v___stringlit_165) ::\n (___stringlit_106, Gvar v___stringlit_106) ::\n (___stringlit_116, Gvar v___stringlit_116) ::\n (___stringlit_126, Gvar v___stringlit_126) ::\n (___stringlit_136, Gvar v___stringlit_136) ::\n (___stringlit_146, Gvar v___stringlit_146) ::\n (___stringlit_156, Gvar v___stringlit_156) ::\n (___stringlit_166, Gvar v___stringlit_166) ::\n (___stringlit_107, Gvar v___stringlit_107) ::\n (___stringlit_117, Gvar v___stringlit_117) ::\n (___stringlit_127, Gvar v___stringlit_127) ::\n (___stringlit_137, Gvar v___stringlit_137) ::\n (___stringlit_147, Gvar v___stringlit_147) ::\n (___stringlit_157, Gvar v___stringlit_157) ::\n (___stringlit_167, Gvar v___stringlit_167) ::\n (___stringlit_108, Gvar v___stringlit_108) ::\n (___stringlit_118, Gvar v___stringlit_118) ::\n (___stringlit_128, Gvar v___stringlit_128) ::\n (___stringlit_138, Gvar v___stringlit_138) ::\n (___stringlit_148, Gvar v___stringlit_148) ::\n (___stringlit_158, Gvar v___stringlit_158) ::\n (___stringlit_168, Gvar v___stringlit_168) ::\n (___stringlit_109, Gvar v___stringlit_109) ::\n (___stringlit_119, Gvar v___stringlit_119) ::\n (___stringlit_129, Gvar v___stringlit_129) ::\n (___stringlit_139, Gvar v___stringlit_139) ::\n (___stringlit_149, Gvar v___stringlit_149) ::\n (___stringlit_159, Gvar v___stringlit_159) ::\n (___stringlit_169, Gvar v___stringlit_169) ::\n (___builtin_ais_annot,\n   Gfun(External (EF_builtin \"__builtin_ais_annot\"\n                   (mksignature (AST.Tlong :: nil) AST.Tvoid\n                     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|}))\n     (Tcons (tptr tschar) Tnil) tvoid\n     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|})) ::\n (___builtin_bswap64,\n   Gfun(External (EF_builtin \"__builtin_bswap64\"\n                   (mksignature (AST.Tlong :: nil) AST.Tlong cc_default))\n     (Tcons tulong Tnil) tulong cc_default)) ::\n (___builtin_bswap,\n   Gfun(External (EF_builtin \"__builtin_bswap\"\n                   (mksignature (AST.Tint :: nil) AST.Tint cc_default))\n     (Tcons tuint Tnil) tuint cc_default)) ::\n (___builtin_bswap32,\n   Gfun(External (EF_builtin \"__builtin_bswap32\"\n                   (mksignature (AST.Tint :: nil) AST.Tint cc_default))\n     (Tcons tuint Tnil) tuint cc_default)) ::\n (___builtin_bswap16,\n   Gfun(External (EF_builtin \"__builtin_bswap16\"\n                   (mksignature (AST.Tint :: nil) AST.Tint16unsigned\n                     cc_default)) (Tcons tushort Tnil) tushort cc_default)) ::\n (___builtin_clz,\n   Gfun(External (EF_builtin \"__builtin_clz\"\n                   (mksignature (AST.Tint :: nil) AST.Tint cc_default))\n     (Tcons tuint Tnil) tint cc_default)) ::\n (___builtin_clzl,\n   Gfun(External (EF_builtin \"__builtin_clzl\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint cc_default))\n     (Tcons tulong Tnil) tint cc_default)) ::\n (___builtin_clzll,\n   Gfun(External (EF_builtin \"__builtin_clzll\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint cc_default))\n     (Tcons tulong Tnil) tint cc_default)) ::\n (___builtin_ctz,\n   Gfun(External (EF_builtin \"__builtin_ctz\"\n                   (mksignature (AST.Tint :: nil) AST.Tint cc_default))\n     (Tcons tuint Tnil) tint cc_default)) ::\n (___builtin_ctzl,\n   Gfun(External (EF_builtin \"__builtin_ctzl\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint cc_default))\n     (Tcons tulong Tnil) tint cc_default)) ::\n (___builtin_ctzll,\n   Gfun(External (EF_builtin \"__builtin_ctzll\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint cc_default))\n     (Tcons tulong Tnil) tint cc_default)) ::\n (___builtin_negl,\n   Gfun(External (EF_builtin \"__builtin_negl\"\n                   (mksignature (AST.Tlong :: nil) AST.Tlong cc_default))\n     (Tcons tlong Tnil) tlong cc_default)) ::\n (___builtin_addl,\n   Gfun(External (EF_builtin \"__builtin_addl\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tlong Tnil)) tlong\n     cc_default)) ::\n (___builtin_subl,\n   Gfun(External (EF_builtin \"__builtin_subl\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tlong Tnil)) tlong\n     cc_default)) ::\n (___builtin_mull,\n   Gfun(External (EF_builtin \"__builtin_mull\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tlong Tnil)) tlong\n     cc_default)) ::\n (___builtin_fabs,\n   Gfun(External (EF_builtin \"__builtin_fabs\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tfloat cc_default))\n     (Tcons tdouble Tnil) tdouble cc_default)) ::\n (___builtin_fabsf,\n   Gfun(External (EF_builtin \"__builtin_fabsf\"\n                   (mksignature (AST.Tsingle :: nil) AST.Tsingle cc_default))\n     (Tcons tfloat Tnil) tfloat cc_default)) ::\n (___builtin_fsqrt,\n   Gfun(External (EF_builtin \"__builtin_fsqrt\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tfloat cc_default))\n     (Tcons tdouble Tnil) tdouble cc_default)) ::\n (___builtin_sqrt,\n   Gfun(External (EF_builtin \"__builtin_sqrt\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tfloat cc_default))\n     (Tcons tdouble Tnil) tdouble cc_default)) ::\n (___builtin_nanf,\n   Gfun(External (EF_builtin \"__builtin_nanf\"\n                   (mksignature (AST.Tlong :: nil) AST.Tsingle cc_default))\n     (Tcons (tptr tschar) Tnil) tfloat cc_default)) ::\n (___builtin_nansf,\n   Gfun(External (EF_builtin \"__builtin_nansf\"\n                   (mksignature (AST.Tlong :: nil) AST.Tsingle cc_default))\n     (Tcons (tptr tschar) Tnil) tfloat cc_default)) ::\n (___builtin_nan,\n   Gfun(External (EF_builtin \"__builtin_nan\"\n                   (mksignature (AST.Tlong :: nil) AST.Tfloat cc_default))\n     (Tcons (tptr tschar) Tnil) tdouble cc_default)) ::\n (___builtin_nans,\n   Gfun(External (EF_builtin \"__builtin_nans\"\n                   (mksignature (AST.Tlong :: nil) AST.Tfloat cc_default))\n     (Tcons (tptr tschar) Tnil) tdouble cc_default)) ::\n (___builtin_isnanf,\n   Gfun(External (EF_builtin \"__builtin_isnanf\"\n                   (mksignature (AST.Tsingle :: nil) AST.Tint cc_default))\n     (Tcons tfloat Tnil) tint cc_default)) ::\n (___builtin_isnan,\n   Gfun(External (EF_builtin \"__builtin_isnan\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tint cc_default))\n     (Tcons tdouble Tnil) tint cc_default)) ::\n (___builtin_isinff,\n   Gfun(External (EF_builtin \"__builtin_isinff\"\n                   (mksignature (AST.Tsingle :: nil) AST.Tint cc_default))\n     (Tcons tfloat Tnil) tint cc_default)) ::\n (___builtin_isinf,\n   Gfun(External (EF_builtin \"__builtin_isinf\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tint cc_default))\n     (Tcons tdouble Tnil) tint cc_default)) ::\n (___builtin_isfinitef,\n   Gfun(External (EF_builtin \"__builtin_isfinitef\"\n                   (mksignature (AST.Tsingle :: nil) AST.Tint cc_default))\n     (Tcons tfloat Tnil) tint cc_default)) ::\n (___builtin_isfinite,\n   Gfun(External (EF_builtin \"__builtin_isfinite\"\n                   (mksignature (AST.Tfloat :: nil) AST.Tint cc_default))\n     (Tcons tdouble Tnil) tint cc_default)) ::\n (___builtin_memcpy_aligned,\n   Gfun(External (EF_builtin \"__builtin_memcpy_aligned\"\n                   (mksignature\n                     (AST.Tlong :: AST.Tlong :: AST.Tlong :: AST.Tlong ::\n                      nil) AST.Tvoid cc_default))\n     (Tcons (tptr tvoid)\n       (Tcons (tptr tvoid) (Tcons tulong (Tcons tulong Tnil)))) tvoid\n     cc_default)) ::\n (___builtin_sel,\n   Gfun(External (EF_builtin \"__builtin_sel\"\n                   (mksignature (AST.Tint :: nil) AST.Tvoid\n                     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|}))\n     (Tcons tbool Tnil) tvoid\n     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|})) ::\n (___builtin_annot,\n   Gfun(External (EF_builtin \"__builtin_annot\"\n                   (mksignature (AST.Tlong :: nil) AST.Tvoid\n                     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|}))\n     (Tcons (tptr tschar) Tnil) tvoid\n     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|})) ::\n (___builtin_annot_intval,\n   Gfun(External (EF_builtin \"__builtin_annot_intval\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tint\n                     cc_default)) (Tcons (tptr tschar) (Tcons tint Tnil))\n     tint cc_default)) ::\n (___builtin_membar,\n   Gfun(External (EF_builtin \"__builtin_membar\"\n                   (mksignature nil AST.Tvoid cc_default)) Tnil tvoid\n     cc_default)) ::\n (___builtin_debug,\n   Gfun(External (EF_builtin \"__builtin_debug\"\n                   (mksignature (AST.Tint :: nil) AST.Tvoid\n                     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|}))\n     (Tcons tint Tnil) tvoid\n     {|cc_vararg:=(Some 1); cc_unproto:=false; cc_structret:=false|})) ::\n (___builtin_nop,\n   Gfun(External (EF_builtin \"__builtin_nop\"\n                   (mksignature nil AST.Tvoid cc_default)) Tnil tvoid\n     cc_default)) ::\n (___builtin_va_start,\n   Gfun(External (EF_builtin \"__builtin_va_start\"\n                   (mksignature (AST.Tlong :: nil) AST.Tvoid cc_default))\n     (Tcons (tptr tvoid) Tnil) tvoid cc_default)) ::\n (___builtin_va_arg,\n   Gfun(External (EF_builtin \"__builtin_va_arg\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tvoid\n                     cc_default)) (Tcons (tptr tvoid) (Tcons tuint Tnil))\n     tvoid cc_default)) ::\n (___builtin_va_copy,\n   Gfun(External (EF_builtin \"__builtin_va_copy\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tvoid\n                     cc_default))\n     (Tcons (tptr tvoid) (Tcons (tptr tvoid) Tnil)) tvoid cc_default)) ::\n (___builtin_va_end,\n   Gfun(External (EF_builtin \"__builtin_va_end\"\n                   (mksignature (AST.Tlong :: nil) AST.Tvoid cc_default))\n     (Tcons (tptr tvoid) Tnil) tvoid cc_default)) ::\n (___builtin_unreachable,\n   Gfun(External (EF_builtin \"__builtin_unreachable\"\n                   (mksignature nil AST.Tvoid cc_default)) Tnil tvoid\n     cc_default)) ::\n (___builtin_expect,\n   Gfun(External (EF_builtin \"__builtin_expect\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tlong\n                     cc_default)) (Tcons tlong (Tcons tlong Tnil)) tlong\n     cc_default)) ::\n (___builtin_fmax,\n   Gfun(External (EF_builtin \"__builtin_fmax\"\n                   (mksignature (AST.Tfloat :: AST.Tfloat :: nil) AST.Tfloat\n                     cc_default)) (Tcons tdouble (Tcons tdouble Tnil))\n     tdouble cc_default)) ::\n (___builtin_fmin,\n   Gfun(External (EF_builtin \"__builtin_fmin\"\n                   (mksignature (AST.Tfloat :: AST.Tfloat :: nil) AST.Tfloat\n                     cc_default)) (Tcons tdouble (Tcons tdouble Tnil))\n     tdouble cc_default)) ::\n (___builtin_fmadd,\n   Gfun(External (EF_builtin \"__builtin_fmadd\"\n                   (mksignature\n                     (AST.Tfloat :: AST.Tfloat :: AST.Tfloat :: nil)\n                     AST.Tfloat cc_default))\n     (Tcons tdouble (Tcons tdouble (Tcons tdouble Tnil))) tdouble\n     cc_default)) ::\n (___builtin_fmsub,\n   Gfun(External (EF_builtin \"__builtin_fmsub\"\n                   (mksignature\n                     (AST.Tfloat :: AST.Tfloat :: AST.Tfloat :: nil)\n                     AST.Tfloat cc_default))\n     (Tcons tdouble (Tcons tdouble (Tcons tdouble Tnil))) tdouble\n     cc_default)) ::\n (___builtin_fnmadd,\n   Gfun(External (EF_builtin \"__builtin_fnmadd\"\n                   (mksignature\n                     (AST.Tfloat :: AST.Tfloat :: AST.Tfloat :: nil)\n                     AST.Tfloat cc_default))\n     (Tcons tdouble (Tcons tdouble (Tcons tdouble Tnil))) tdouble\n     cc_default)) ::\n (___builtin_fnmsub,\n   Gfun(External (EF_builtin \"__builtin_fnmsub\"\n                   (mksignature\n                     (AST.Tfloat :: AST.Tfloat :: AST.Tfloat :: nil)\n                     AST.Tfloat cc_default))\n     (Tcons tdouble (Tcons tdouble (Tcons tdouble Tnil))) tdouble\n     cc_default)) ::\n (___builtin_read16_reversed,\n   Gfun(External (EF_builtin \"__builtin_read16_reversed\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint16unsigned\n                     cc_default)) (Tcons (tptr tushort) Tnil) tushort\n     cc_default)) ::\n (___builtin_read32_reversed,\n   Gfun(External (EF_builtin \"__builtin_read32_reversed\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint cc_default))\n     (Tcons (tptr tuint) Tnil) tuint cc_default)) ::\n (___builtin_write16_reversed,\n   Gfun(External (EF_builtin \"__builtin_write16_reversed\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tvoid\n                     cc_default)) (Tcons (tptr tushort) (Tcons tushort Tnil))\n     tvoid cc_default)) ::\n (___builtin_write32_reversed,\n   Gfun(External (EF_builtin \"__builtin_write32_reversed\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tvoid\n                     cc_default)) (Tcons (tptr tuint) (Tcons tuint Tnil))\n     tvoid cc_default)) ::\n (_memcpy,\n   Gfun(External (EF_external \"memcpy\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: AST.Tlong :: nil)\n                     AST.Tlong cc_default))\n     (Tcons (tptr tvoid) (Tcons (tptr tvoid) (Tcons tulong Tnil)))\n     (tptr tvoid) cc_default)) ::\n (_memset,\n   Gfun(External (EF_external \"memset\"\n                   (mksignature (AST.Tlong :: AST.Tint :: AST.Tlong :: nil)\n                     AST.Tlong cc_default))\n     (Tcons (tptr tvoid) (Tcons tint (Tcons tulong Tnil))) (tptr tvoid)\n     cc_default)) ::\n (___assert_fail,\n   Gfun(External (EF_external \"__assert_fail\"\n                   (mksignature\n                     (AST.Tlong :: AST.Tlong :: AST.Tint :: AST.Tlong :: nil)\n                     AST.Tvoid cc_default))\n     (Tcons (tptr tschar)\n       (Tcons (tptr tschar) (Tcons tuint (Tcons (tptr tschar) Tnil)))) tvoid\n     cc_default)) :: (_ReadBE32, Gfun(Internal f_ReadBE32)) ::\n (_WriteBE64, Gfun(Internal f_WriteBE64)) ::\n (_WriteBE32, Gfun(Internal f_WriteBE32)) ::\n (_sha256_fromMidstate, Gfun(Internal f_sha256_fromMidstate)) ::\n (_sha256_iv, Gfun(Internal f_sha256_iv)) ::\n (_simplicity_sha256_compression, Gvar v_simplicity_sha256_compression) ::\n (_sha256_compression_uchar, Gfun(Internal f_sha256_compression_uchar)) ::\n (_sha256_max_counter, Gvar v_sha256_max_counter) ::\n (_sha256_init, Gfun(Internal f_sha256_init)) ::\n (_sha256_tagged_init, Gfun(Internal f_sha256_tagged_init)) ::\n (_sha256_uchars, Gfun(Internal f_sha256_uchars)) ::\n (_sha256_u64be, Gfun(Internal f_sha256_u64be)) ::\n (_sha256_finalize, Gfun(Internal f_sha256_finalize)) ::\n (_sha256_hash, Gfun(Internal f_sha256_hash)) ::\n (_LSBclear, Gfun(Internal f_LSBclear)) ::\n (_peekBit, Gfun(Internal f_peekBit)) ::\n (_readBit, Gfun(Internal f_readBit)) :: (___func__, Gvar v___func__) ::\n (_writeBit, Gfun(Internal f_writeBit)) ::\n (___func____1, Gvar v___func____1) ::\n (_skipBits, Gfun(Internal f_skipBits)) ::\n (_simplicity_read8,\n   Gfun(External (EF_external \"simplicity_read8\"\n                   (mksignature (AST.Tlong :: nil) AST.Tint8unsigned\n                     cc_default))\n     (Tcons (tptr (Tstruct _frameItem noattr)) Tnil) tuchar cc_default)) ::\n (_simplicity_read32,\n   Gfun(External (EF_external \"simplicity_read32\"\n                   (mksignature (AST.Tlong :: nil) AST.Tlong cc_default))\n     (Tcons (tptr (Tstruct _frameItem noattr)) Tnil) tulong cc_default)) ::\n (_simplicity_write8,\n   Gfun(External (EF_external \"simplicity_write8\"\n                   (mksignature (AST.Tlong :: AST.Tint :: nil) AST.Tvoid\n                     cc_default))\n     (Tcons (tptr (Tstruct _frameItem noattr)) (Tcons tuchar Tnil)) tvoid\n     cc_default)) :: (_read8s, Gfun(Internal f_read8s)) ::\n (_write8s, Gfun(Internal f_write8s)) ::\n (_read32s, Gfun(Internal f_read32s)) ::\n (_signatureIV, Gvar v_signatureIV) ::\n (_abort,\n   Gfun(External (EF_external \"abort\" (mksignature nil AST.Tvoid cc_default))\n     Tnil tvoid cc_default)) :: (_stderr, Gvar v_stderr) ::\n (_fprintf,\n   Gfun(External (EF_external \"fprintf\"\n                   (mksignature (AST.Tlong :: AST.Tlong :: nil) AST.Tint\n                     {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|}))\n     (Tcons (tptr (Tstruct __IO_FILE noattr)) (Tcons (tptr tschar) Tnil))\n     tint {|cc_vararg:=(Some 2); cc_unproto:=false; cc_structret:=false|})) ::\n (_secp256k1_memcmp_var, Gfun(Internal f_secp256k1_memcmp_var)) ::\n (_debruijn, Gvar v_debruijn) ::\n (_secp256k1_ctz64_var_debruijn, Gfun(Internal f_secp256k1_ctz64_var_debruijn)) ::\n (_secp256k1_ctz64_var, Gfun(Internal f_secp256k1_ctz64_var)) ::\n (_secp256k1_const_beta, Gvar v_secp256k1_const_beta) ::\n (_secp256k1_modinv64_signed62_assign, Gfun(Internal f_secp256k1_modinv64_signed62_assign)) ::\n (_secp256k1_modinv64_abs, Gfun(Internal f_secp256k1_modinv64_abs)) ::\n (_SECP256K1_SIGNED62_ONE, Gvar v_SECP256K1_SIGNED62_ONE) ::\n (_secp256k1_modinv64_mul_62, Gfun(Internal f_secp256k1_modinv64_mul_62)) ::\n (_secp256k1_modinv64_mul_cmp_62, Gfun(Internal f_secp256k1_modinv64_mul_cmp_62)) ::\n (_secp256k1_modinv64_det_check_pow2, Gfun(Internal f_secp256k1_modinv64_det_check_pow2)) ::\n (_secp256k1_modinv64_normalize_62, Gfun(Internal f_secp256k1_modinv64_normalize_62)) ::\n (_secp256k1_modinv64_divsteps_62_var, Gfun(Internal f_secp256k1_modinv64_divsteps_62_var)) ::\n (_secp256k1_modinv64_update_de_62, Gfun(Internal f_secp256k1_modinv64_update_de_62)) ::\n (_secp256k1_modinv64_update_fg_62_var, Gfun(Internal f_secp256k1_modinv64_update_fg_62_var)) ::\n (_secp256k1_modinv64_var, Gfun(Internal f_secp256k1_modinv64_var)) ::\n (_secp256k1_fe_mul_inner, Gfun(Internal f_secp256k1_fe_mul_inner)) ::\n (_secp256k1_fe_sqr_inner, Gfun(Internal f_secp256k1_fe_sqr_inner)) ::\n (_secp256k1_fe_verify, Gfun(Internal f_secp256k1_fe_verify)) ::\n (_secp256k1_fe_normalize_weak, Gfun(Internal f_secp256k1_fe_normalize_weak)) ::\n (_secp256k1_fe_normalize_var, Gfun(Internal f_secp256k1_fe_normalize_var)) ::\n (_secp256k1_fe_normalizes_to_zero_var, Gfun(Internal f_secp256k1_fe_normalizes_to_zero_var)) ::\n (_secp256k1_fe_set_int, Gfun(Internal f_secp256k1_fe_set_int)) ::\n (_secp256k1_fe_is_zero, Gfun(Internal f_secp256k1_fe_is_zero)) ::\n (_secp256k1_fe_is_odd, Gfun(Internal f_secp256k1_fe_is_odd)) ::\n (_secp256k1_fe_clear, Gfun(Internal f_secp256k1_fe_clear)) ::\n (_secp256k1_fe_set_b32, Gfun(Internal f_secp256k1_fe_set_b32)) ::\n (_secp256k1_fe_get_b32, Gfun(Internal f_secp256k1_fe_get_b32)) ::\n (_secp256k1_fe_negate, Gfun(Internal f_secp256k1_fe_negate)) ::\n (_secp256k1_fe_mul_int, Gfun(Internal f_secp256k1_fe_mul_int)) ::\n (_secp256k1_fe_add_int, Gfun(Internal f_secp256k1_fe_add_int)) ::\n (_secp256k1_fe_add, Gfun(Internal f_secp256k1_fe_add)) ::\n (_secp256k1_fe_mul, Gfun(Internal f_secp256k1_fe_mul)) ::\n (_secp256k1_fe_sqr, Gfun(Internal f_secp256k1_fe_sqr)) ::\n (_secp256k1_fe_cmov, Gfun(Internal f_secp256k1_fe_cmov)) ::\n (_secp256k1_fe_half, Gfun(Internal f_secp256k1_fe_half)) ::\n (_secp256k1_fe_to_storage, Gfun(Internal f_secp256k1_fe_to_storage)) ::\n (_secp256k1_fe_from_storage, Gfun(Internal f_secp256k1_fe_from_storage)) ::\n (_secp256k1_fe_from_signed62, Gfun(Internal f_secp256k1_fe_from_signed62)) ::\n (_secp256k1_fe_to_signed62, Gfun(Internal f_secp256k1_fe_to_signed62)) ::\n (_secp256k1_const_modinfo_fe, Gvar v_secp256k1_const_modinfo_fe) ::\n (_secp256k1_fe_normalizes_to_zero,\n   Gfun(External (EF_external \"secp256k1_fe_normalizes_to_zero\"\n                   (mksignature nil AST.Tint\n                     {|cc_vararg:=None; cc_unproto:=true; cc_structret:=false|}))\n     Tnil tint {|cc_vararg:=None; cc_unproto:=true; cc_structret:=false|})) ::\n (_secp256k1_fe_inv_var, Gfun(Internal f_secp256k1_fe_inv_var)) ::\n (_secp256k1_fe_equal_var, Gfun(Internal f_secp256k1_fe_equal_var)) ::\n (_secp256k1_fe_sqrt_var, Gfun(Internal f_secp256k1_fe_sqrt_var)) ::\n (_secp256k1_scalar_set_int, Gfun(Internal f_secp256k1_scalar_set_int)) ::\n (_secp256k1_scalar_get_bits, Gfun(Internal f_secp256k1_scalar_get_bits)) ::\n (_secp256k1_scalar_get_bits_var, Gfun(Internal f_secp256k1_scalar_get_bits_var)) ::\n (_secp256k1_scalar_check_overflow, Gfun(Internal f_secp256k1_scalar_check_overflow)) ::\n (_secp256k1_scalar_reduce, Gfun(Internal f_secp256k1_scalar_reduce)) ::\n (_secp256k1_scalar_add, Gfun(Internal f_secp256k1_scalar_add)) ::\n (_secp256k1_scalar_cadd_bit, Gfun(Internal f_secp256k1_scalar_cadd_bit)) ::\n (_secp256k1_scalar_set_b32, Gfun(Internal f_secp256k1_scalar_set_b32)) ::\n (_secp256k1_scalar_get_b32, Gfun(Internal f_secp256k1_scalar_get_b32)) ::\n (_secp256k1_scalar_is_zero, Gfun(Internal f_secp256k1_scalar_is_zero)) ::\n (_secp256k1_scalar_negate, Gfun(Internal f_secp256k1_scalar_negate)) ::\n (_secp256k1_scalar_reduce_512, Gfun(Internal f_secp256k1_scalar_reduce_512)) ::\n (_secp256k1_scalar_mul_512, Gfun(Internal f_secp256k1_scalar_mul_512)) ::\n (_secp256k1_scalar_mul, Gfun(Internal f_secp256k1_scalar_mul)) ::\n (_secp256k1_scalar_split_128, Gfun(Internal f_secp256k1_scalar_split_128)) ::\n (_secp256k1_scalar_mul_shift_var, Gfun(Internal f_secp256k1_scalar_mul_shift_var)) ::\n (_secp256k1_scalar_from_signed62, Gfun(Internal f_secp256k1_scalar_from_signed62)) ::\n (_secp256k1_scalar_to_signed62, Gfun(Internal f_secp256k1_scalar_to_signed62)) ::\n (_secp256k1_const_modinfo_scalar, Gvar v_secp256k1_const_modinfo_scalar) ::\n (_secp256k1_scalar_inverse_var, Gfun(Internal f_secp256k1_scalar_inverse_var)) ::\n (_secp256k1_const_lambda, Gvar v_secp256k1_const_lambda) ::\n (_minus_b1, Gvar v_minus_b1) :: (_minus_b2, Gvar v_minus_b2) ::\n (_g1, Gvar v_g1) :: (_g2, Gvar v_g2) ::\n (_secp256k1_scalar_split_lambda, Gfun(Internal f_secp256k1_scalar_split_lambda)) ::\n (_k1_bound, Gvar v_k1_bound) :: (_k2_bound, Gvar v_k2_bound) ::\n (_secp256k1_scalar_eq,\n   Gfun(External (EF_external \"secp256k1_scalar_eq\"\n                   (mksignature nil AST.Tint\n                     {|cc_vararg:=None; cc_unproto:=true; cc_structret:=false|}))\n     Tnil tint {|cc_vararg:=None; cc_unproto:=true; cc_structret:=false|})) ::\n (_secp256k1_scalar_split_lambda_verify, Gfun(Internal f_secp256k1_scalar_split_lambda_verify)) ::\n (_secp256k1_ge_set_gej_zinv, Gfun(Internal f_secp256k1_ge_set_gej_zinv)) ::\n (_secp256k1_ge_set_xy, Gfun(Internal f_secp256k1_ge_set_xy)) ::\n (_secp256k1_ge_is_infinity, Gfun(Internal f_secp256k1_ge_is_infinity)) ::\n (_secp256k1_ge_neg, Gfun(Internal f_secp256k1_ge_neg)) ::\n (_secp256k1_ge_set_gej_var, Gfun(Internal f_secp256k1_ge_set_gej_var)) ::\n (_secp256k1_ge_table_set_globalz, Gfun(Internal f_secp256k1_ge_table_set_globalz)) ::\n (_secp256k1_gej_set_infinity, Gfun(Internal f_secp256k1_gej_set_infinity)) ::\n (_secp256k1_ge_set_infinity, Gfun(Internal f_secp256k1_ge_set_infinity)) ::\n (_secp256k1_ge_set_xo_var, Gfun(Internal f_secp256k1_ge_set_xo_var)) ::\n (_secp256k1_gej_set_ge, Gfun(Internal f_secp256k1_gej_set_ge)) ::\n (_secp256k1_gej_eq_var, Gfun(Internal f_secp256k1_gej_eq_var)) ::\n (_secp256k1_gej_eq_ge_var, Gfun(Internal f_secp256k1_gej_eq_ge_var)) ::\n (_secp256k1_gej_eq_x_var, Gfun(Internal f_secp256k1_gej_eq_x_var)) ::\n (_secp256k1_gej_neg, Gfun(Internal f_secp256k1_gej_neg)) ::\n (_secp256k1_gej_is_infinity, Gfun(Internal f_secp256k1_gej_is_infinity)) ::\n (_secp256k1_ge_is_valid_var, Gfun(Internal f_secp256k1_ge_is_valid_var)) ::\n (_secp256k1_gej_double, Gfun(Internal f_secp256k1_gej_double)) ::\n (_secp256k1_gej_double_var, Gfun(Internal f_secp256k1_gej_double_var)) ::\n (_secp256k1_gej_add_var, Gfun(Internal f_secp256k1_gej_add_var)) ::\n (_secp256k1_gej_add_ge_var, Gfun(Internal f_secp256k1_gej_add_ge_var)) ::\n (_secp256k1_gej_add_zinv_var, Gfun(Internal f_secp256k1_gej_add_zinv_var)) ::\n (_secp256k1_gej_rescale, Gfun(Internal f_secp256k1_gej_rescale)) ::\n (_secp256k1_ge_to_storage, Gfun(Internal f_secp256k1_ge_to_storage)) ::\n (_secp256k1_ge_from_storage, Gfun(Internal f_secp256k1_ge_from_storage)) ::\n (_secp256k1_ge_is_in_correct_subgroup, Gfun(Internal f_secp256k1_ge_is_in_correct_subgroup)) ::\n (_secp256k1_pre_g, Gvar v_secp256k1_pre_g) ::\n (_secp256k1_pre_g_128, Gvar v_secp256k1_pre_g_128) ::\n (_secp256k1_ecmult_odd_multiples_table, Gfun(Internal f_secp256k1_ecmult_odd_multiples_table)) ::\n (_secp256k1_ecmult_table_get_ge, Gfun(Internal f_secp256k1_ecmult_table_get_ge)) ::\n (_secp256k1_ecmult_table_get_ge_lambda, Gfun(Internal f_secp256k1_ecmult_table_get_ge_lambda)) ::\n (_secp256k1_ecmult_table_get_ge_storage, Gfun(Internal f_secp256k1_ecmult_table_get_ge_storage)) ::\n (_secp256k1_ecmult_wnaf, Gfun(Internal f_secp256k1_ecmult_wnaf)) ::\n (_secp256k1_ecmult_strauss_wnaf, Gfun(Internal f_secp256k1_ecmult_strauss_wnaf)) ::\n (_secp256k1_ecmult, Gfun(Internal f_secp256k1_ecmult)) ::\n (_secp256k1_eckey_pubkey_tweak_add, Gfun(Internal f_secp256k1_eckey_pubkey_tweak_add)) ::\n (_secp256k1_umul128, Gfun(Internal f_secp256k1_umul128)) ::\n (_secp256k1_mul128, Gfun(Internal f_secp256k1_mul128)) ::\n (_secp256k1_u128_mul, Gfun(Internal f_secp256k1_u128_mul)) ::\n (_secp256k1_u128_accum_mul, Gfun(Internal f_secp256k1_u128_accum_mul)) ::\n (_secp256k1_u128_accum_u64, Gfun(Internal f_secp256k1_u128_accum_u64)) ::\n (_secp256k1_u128_rshift, Gfun(Internal f_secp256k1_u128_rshift)) ::\n (_secp256k1_u128_to_u64, Gfun(Internal f_secp256k1_u128_to_u64)) ::\n (_secp256k1_u128_hi_u64, Gfun(Internal f_secp256k1_u128_hi_u64)) ::\n (_secp256k1_u128_from_u64, Gfun(Internal f_secp256k1_u128_from_u64)) ::\n (_secp256k1_u128_check_bits, Gfun(Internal f_secp256k1_u128_check_bits)) ::\n (_secp256k1_i128_mul, Gfun(Internal f_secp256k1_i128_mul)) ::\n (_secp256k1_i128_accum_mul, Gfun(Internal f_secp256k1_i128_accum_mul)) ::\n (_secp256k1_i128_dissip_mul, Gfun(Internal f_secp256k1_i128_dissip_mul)) ::\n (_secp256k1_i128_det, Gfun(Internal f_secp256k1_i128_det)) ::\n (_secp256k1_i128_rshift, Gfun(Internal f_secp256k1_i128_rshift)) ::\n (_secp256k1_i128_to_u64, Gfun(Internal f_secp256k1_i128_to_u64)) ::\n (_secp256k1_i128_to_i64, Gfun(Internal f_secp256k1_i128_to_i64)) ::\n (_secp256k1_i128_from_i64, Gfun(Internal f_secp256k1_i128_from_i64)) ::\n (_secp256k1_i128_eq_var, Gfun(Internal f_secp256k1_i128_eq_var)) ::\n (_secp256k1_i128_check_pow2, Gfun(Internal f_secp256k1_i128_check_pow2)) ::\n (_secp256k1_pubkey_load, Gfun(Internal f_secp256k1_pubkey_load)) ::\n (_secp256k1_pubkey_save, Gfun(Internal f_secp256k1_pubkey_save)) ::\n (_secp256k1_ec_pubkey_tweak_add_helper, Gfun(Internal f_secp256k1_ec_pubkey_tweak_add_helper)) ::\n (_secp256k1_xonly_pubkey_load, Gfun(Internal f_secp256k1_xonly_pubkey_load)) ::\n (_secp256k1_xonly_pubkey_save, Gfun(Internal f_secp256k1_xonly_pubkey_save)) ::\n (_secp256k1_xonly_pubkey_parse, Gfun(Internal f_secp256k1_xonly_pubkey_parse)) ::\n (_secp256k1_xonly_pubkey_serialize, Gfun(Internal f_secp256k1_xonly_pubkey_serialize)) ::\n (_secp256k1_extrakeys_ge_even_y, Gfun(Internal f_secp256k1_extrakeys_ge_even_y)) ::\n (_secp256k1_xonly_pubkey_from_pubkey, Gfun(Internal f_secp256k1_xonly_pubkey_from_pubkey)) ::\n (_secp256k1_xonly_pubkey_tweak_add, Gfun(Internal f_secp256k1_xonly_pubkey_tweak_add)) ::\n (_secp256k1_schnorrsig_sha256_tagged, Gfun(Internal f_secp256k1_schnorrsig_sha256_tagged)) ::\n (_secp256k1_schnorrsig_challenge, Gfun(Internal f_secp256k1_schnorrsig_challenge)) ::\n (_secp256k1_schnorrsig_verify, Gfun(Internal f_secp256k1_schnorrsig_verify)) ::\n (_secp256k1_generator_load, Gfun(Internal f_secp256k1_generator_load)) ::\n (_secp256k1_generator_save, Gfun(Internal f_secp256k1_generator_save)) ::\n (_negc, Gvar v_negc) :: (_d, Gvar v_d) ::\n (_shallue_van_de_woestijne, Gfun(Internal f_shallue_van_de_woestijne)) ::\n (_prefix1, Gvar v_prefix1) :: (_prefix2, Gvar v_prefix2) ::\n (_inf, Gvar v_inf) :: (_zero, Gvar v_zero) ::\n (_secp256k1_generator_generate_internal, Gfun(Internal f_secp256k1_generator_generate_internal)) ::\n (_secp256k1_generator_generate, Gfun(Internal f_secp256k1_generator_generate)) ::\n (_simplicity_gej_is_valid_var, Gfun(Internal f_simplicity_gej_is_valid_var)) ::\n (_read_fe, Gfun(Internal f_read_fe)) ::\n (_write_fe, Gfun(Internal f_write_fe)) ::\n (_skip_fe, Gfun(Internal f_skip_fe)) ::\n (_read_ge, Gfun(Internal f_read_ge)) ::\n (_write_ge, Gfun(Internal f_write_ge)) ::\n (_skip_ge, Gfun(Internal f_skip_ge)) ::\n (_read_gej, Gfun(Internal f_read_gej)) ::\n (_write_gej, Gfun(Internal f_write_gej)) ::\n (_read_scalar, Gfun(Internal f_read_scalar)) ::\n (_write_scalar, Gfun(Internal f_write_scalar)) ::\n (_simplicity_fe_normalize, Gfun(Internal f_simplicity_fe_normalize)) ::\n (_simplicity_fe_negate, Gfun(Internal f_simplicity_fe_negate)) ::\n (_simplicity_fe_add, Gfun(Internal f_simplicity_fe_add)) ::\n (_simplicity_fe_square, Gfun(Internal f_simplicity_fe_square)) ::\n (_simplicity_fe_multiply, Gfun(Internal f_simplicity_fe_multiply)) ::\n (_simplicity_fe_multiply_beta, Gfun(Internal f_simplicity_fe_multiply_beta)) ::\n (_simplicity_fe_invert, Gfun(Internal f_simplicity_fe_invert)) ::\n (_simplicity_fe_square_root, Gfun(Internal f_simplicity_fe_square_root)) ::\n (_simplicity_fe_is_zero, Gfun(Internal f_simplicity_fe_is_zero)) ::\n (_simplicity_fe_is_odd, Gfun(Internal f_simplicity_fe_is_odd)) ::\n (_simplicity_scalar_normalize, Gfun(Internal f_simplicity_scalar_normalize)) ::\n (_simplicity_scalar_negate, Gfun(Internal f_simplicity_scalar_negate)) ::\n (_simplicity_scalar_add, Gfun(Internal f_simplicity_scalar_add)) ::\n (_simplicity_scalar_square, Gfun(Internal f_simplicity_scalar_square)) ::\n (_simplicity_scalar_multiply, Gfun(Internal f_simplicity_scalar_multiply)) ::\n (_simplicity_scalar_multiply_lambda, Gfun(Internal f_simplicity_scalar_multiply_lambda)) ::\n (_simplicity_scalar_invert, Gfun(Internal f_simplicity_scalar_invert)) ::\n (_simplicity_scalar_is_zero, Gfun(Internal f_simplicity_scalar_is_zero)) ::\n (_simplicity_gej_infinity, Gfun(Internal f_simplicity_gej_infinity)) ::\n (_simplicity_gej_rescale, Gfun(Internal f_simplicity_gej_rescale)) ::\n (_simplicity_gej_normalize, Gfun(Internal f_simplicity_gej_normalize)) ::\n (_simplicity_gej_negate, Gfun(Internal f_simplicity_gej_negate)) ::\n (_simplicity_ge_negate, Gfun(Internal f_simplicity_ge_negate)) ::\n (_simplicity_gej_double, Gfun(Internal f_simplicity_gej_double)) ::\n (_simplicity_gej_add, Gfun(Internal f_simplicity_gej_add)) ::\n (_simplicity_gej_ge_add_ex, Gfun(Internal f_simplicity_gej_ge_add_ex)) ::\n (_simplicity_gej_ge_add, Gfun(Internal f_simplicity_gej_ge_add)) ::\n (_simplicity_gej_is_infinity, Gfun(Internal f_simplicity_gej_is_infinity)) ::\n (_simplicity_gej_equiv, Gfun(Internal f_simplicity_gej_equiv)) ::\n (_simplicity_gej_ge_equiv, Gfun(Internal f_simplicity_gej_ge_equiv)) ::\n (_simplicity_gej_x_equiv, Gfun(Internal f_simplicity_gej_x_equiv)) ::\n (_simplicity_gej_y_is_odd, Gfun(Internal f_simplicity_gej_y_is_odd)) ::\n (_simplicity_gej_is_on_curve, Gfun(Internal f_simplicity_gej_is_on_curve)) ::\n (_simplicity_ge_is_on_curve, Gfun(Internal f_simplicity_ge_is_on_curve)) ::\n (_ng, Gvar v_ng) ::\n (_simplicity_off_curve_scale, Gfun(Internal f_simplicity_off_curve_scale)) ::\n (_ng__1, Gvar v_ng__1) ::\n (_simplicity_scale, Gfun(Internal f_simplicity_scale)) :: (_a, Gvar v_a) ::\n (_na, Gvar v_na) ::\n (_simplicity_generate, Gfun(Internal f_simplicity_generate)) ::\n (_simplicity_off_curve_linear_combination_1, Gfun(Internal f_simplicity_off_curve_linear_combination_1)) ::\n (_simplicity_linear_combination_1, Gfun(Internal f_simplicity_linear_combination_1)) ::\n (_simplicity_linear_verify_1, Gfun(Internal f_simplicity_linear_verify_1)) ::\n (_simplicity_decompress, Gfun(Internal f_simplicity_decompress)) ::\n (_simplicity_point_verify_1, Gfun(Internal f_simplicity_point_verify_1)) ::\n (_simplicity_bip_0340_verify, Gfun(Internal f_simplicity_bip_0340_verify)) ::\n (_simplicity_check_sig_verify, Gfun(Internal f_simplicity_check_sig_verify)) ::\n (_simplicity_swu, Gfun(Internal f_simplicity_swu)) ::\n (_simplicity_hash_to_curve, Gfun(Internal f_simplicity_hash_to_curve)) ::\n (_simplicity_generic_taptweak, Gfun(Internal f_simplicity_generic_taptweak)) ::\n nil).\n\nDefinition public_idents : list ident :=\n(_simplicity_generic_taptweak :: _simplicity_hash_to_curve ::\n _simplicity_swu :: _simplicity_check_sig_verify ::\n _simplicity_bip_0340_verify :: _simplicity_point_verify_1 ::\n _simplicity_decompress :: _simplicity_linear_verify_1 ::\n _simplicity_linear_combination_1 ::\n _simplicity_off_curve_linear_combination_1 :: _simplicity_generate ::\n _simplicity_scale :: _simplicity_off_curve_scale ::\n _simplicity_ge_is_on_curve :: _simplicity_gej_is_on_curve ::\n _simplicity_gej_y_is_odd :: _simplicity_gej_x_equiv ::\n _simplicity_gej_ge_equiv :: _simplicity_gej_equiv ::\n _simplicity_gej_is_infinity :: _simplicity_gej_ge_add ::\n _simplicity_gej_ge_add_ex :: _simplicity_gej_add ::\n _simplicity_gej_double :: _simplicity_ge_negate :: _simplicity_gej_negate ::\n _simplicity_gej_normalize :: _simplicity_gej_rescale ::\n _simplicity_gej_infinity :: _simplicity_scalar_is_zero ::\n _simplicity_scalar_invert :: _simplicity_scalar_multiply_lambda ::\n _simplicity_scalar_multiply :: _simplicity_scalar_square ::\n _simplicity_scalar_add :: _simplicity_scalar_negate ::\n _simplicity_scalar_normalize :: _simplicity_fe_is_odd ::\n _simplicity_fe_is_zero :: _simplicity_fe_square_root ::\n _simplicity_fe_invert :: _simplicity_fe_multiply_beta ::\n _simplicity_fe_multiply :: _simplicity_fe_square :: _simplicity_fe_add ::\n _simplicity_fe_negate :: _simplicity_fe_normalize :: _secp256k1_scalar_eq ::\n _secp256k1_fe_normalizes_to_zero :: _fprintf :: _stderr :: _abort ::\n _simplicity_write8 :: _simplicity_read32 :: _simplicity_read8 ::\n _simplicity_sha256_compression :: ___assert_fail :: _memset :: _memcpy ::\n ___builtin_write32_reversed :: ___builtin_write16_reversed ::\n ___builtin_read32_reversed :: ___builtin_read16_reversed ::\n ___builtin_fnmsub :: ___builtin_fnmadd :: ___builtin_fmsub ::\n ___builtin_fmadd :: ___builtin_fmin :: ___builtin_fmax ::\n ___builtin_expect :: ___builtin_unreachable :: ___builtin_va_end ::\n ___builtin_va_copy :: ___builtin_va_arg :: ___builtin_va_start ::\n ___builtin_nop :: ___builtin_debug :: ___builtin_membar ::\n ___builtin_annot_intval :: ___builtin_annot :: ___builtin_sel ::\n ___builtin_memcpy_aligned :: ___builtin_isfinite :: ___builtin_isfinitef ::\n ___builtin_isinf :: ___builtin_isinff :: ___builtin_isnan ::\n ___builtin_isnanf :: ___builtin_nans :: ___builtin_nan ::\n ___builtin_nansf :: ___builtin_nanf :: ___builtin_sqrt ::\n ___builtin_fsqrt :: ___builtin_fabsf :: ___builtin_fabs ::\n ___builtin_mull :: ___builtin_subl :: ___builtin_addl :: ___builtin_negl ::\n ___builtin_ctzll :: ___builtin_ctzl :: ___builtin_ctz :: ___builtin_clzll ::\n ___builtin_clzl :: ___builtin_clz :: ___builtin_bswap16 ::\n ___builtin_bswap32 :: ___builtin_bswap :: ___builtin_bswap64 ::\n ___builtin_ais_annot :: ___compcert_i64_umulh :: ___compcert_i64_smulh ::\n ___compcert_i64_sar :: ___compcert_i64_shr :: ___compcert_i64_shl ::\n ___compcert_i64_umod :: ___compcert_i64_smod :: ___compcert_i64_udiv ::\n ___compcert_i64_sdiv :: ___compcert_i64_utof :: ___compcert_i64_stof ::\n ___compcert_i64_utod :: ___compcert_i64_stod :: ___compcert_i64_ftou ::\n ___compcert_i64_ftos :: ___compcert_i64_dtou :: ___compcert_i64_dtos ::\n ___compcert_va_composite :: ___compcert_va_float32 ::\n ___compcert_va_float64 :: ___compcert_va_int64 :: ___compcert_va_int32 ::\n nil).\n\nDefinition prog : Clight.program := \n  mkprogram composites global_definitions public_idents _main Logic.I.\n\n\n"
  },
  {
    "path": "Coq/C/modinv.v",
    "content": "Require Import ZArith.\nRequire Import Coq.ZArith.Znumtheory.\nRequire Import Lia.\nRequire Import Coq.Logic.Eqdep_dec.\n\nOpen Scope Z_scope.\nArguments Z.add !x !y.\nArguments Z.sub !m !n.\nArguments Z.mul !x !y.\n\nRecord Bezout (a b d : Z) :=\n{ uBezout : Z\n; vBezout : Z\n; HBezout : uBezout * a + vBezout * b = d\n}.\nArguments uBezout [a b d].\nArguments vBezout [a b d].\n\nDefinition Bezout_normalize [a b d] (H: Bezout a b d) : Bezout a b d.\nexists (uBezout H) (vBezout H).\nmatch goal with\n |- ?x = ?y => destruct (Z.eq_dec x y);[assumption|]\nend.\nabstract (destruct H;contradiction).\nDefined.\n\nLemma Bezout_normalize_eq a b d (H: Bezout a b d) : Bezout_normalize H = H.\nProof.\ndestruct H as [u v H].\nunfold Bezout_normalize.\ndestruct (Z.eq_dec _ _);try contradiction.\nreplace e with H; try reflexivity.\napply UIP_dec.\napply Z.eq_dec.\nQed.\n\nDefinition Bezout_0b b : Bezout 0 b (Z.abs b).\nexists 0 (Z.sgn b).\nabstract (rewrite <- Z.sgn_abs;ring).\nDefined.\n\nDefinition Bezout_a0 a : Bezout a 0 (Z.abs a).\nexists (Z.sgn a) 0.\nabstract (rewrite <- Z.sgn_abs;ring).\nDefined.\n\nDefinition Bezout_aba a b : Bezout a b a.\nexists 1 0.\nabstract ring.\nDefined.\n\nDefinition Bezout_abb a b : Bezout a b b.\nexists 0 1.\nabstract ring.\nDefined.\n\nDefinition Bezout_b_minus_a a b d : Bezout (b - a) a d -> Bezout a b d.\nintros bezout.\nexists (vBezout bezout - uBezout bezout) (uBezout bezout).\nabstract (destruct bezout as [u v <-];simpl;ring).\nDefined.\n\nDefinition Bezout_a_minus_b a b d : Bezout (a - b) b d -> Bezout a b d.\nintros bezout.\nexists (uBezout bezout) (vBezout bezout - uBezout bezout).\nabstract (destruct bezout as [u v <-];simpl;ring).\nDefined.\n\nDefinition Bezout_even a b d : Bezout a b d -> Bezout (2*a) (2*b) (2*d).\nintros bezout.\nexists (uBezout bezout) (vBezout bezout).\nabstract (destruct bezout as [u v <-];simpl;ring).\nDefined.\n\nDefinition Bezout_flip a b d : Bezout a b d -> Bezout b a d.\nintros bezout.\nexists (vBezout bezout) (uBezout bezout).\nabstract (destruct bezout as [u v <-];simpl;ring).\nDefined.\n\nDefinition Bezout_2a a b d : Z.Odd b -> Bezout a b d -> Bezout (2*a) b d.\nintros Hodd [u v Huv].\ndestruct (Z.odd u) eqn:H.\n  exists (Z.div2 (u + b)) (v - a).\n  abstract (\n    rewrite <- Z.odd_spec in Hodd;\n    rewrite (Zdiv2_odd_eqn u), (Zdiv2_odd_eqn b) in Huv|-*;\n    rewrite <- Huv, H, Hodd;\n    rewrite Z.div2_div;\n    replace (2 * Z.div2 u + 1 + (2 * Z.div2 b + 1)) with\n      ((Z.div2 u + Z.div2 b + 1) * 2) by ring;\n    rewrite Z.div_mul by lia;\n    ring\n  ).\nexists (Z.div2 u) v.\nabstract (\n  rewrite (Zdiv2_odd_eqn u) in Huv;\n  rewrite <- Huv, H;\n  ring\n).\nDefined.\n\nDefinition Bezout_2b a b d : Z.Odd a -> Bezout a b d -> Bezout a (2*b) d.\nintros Hodd bezout.\napply Bezout_flip.\napply Bezout_2a; try assumption.\napply Bezout_flip.\nassumption.\nDefined.\n\nLemma Pos_size_nat_sub a b : (Pos.size_nat (a - b) <= Pos.size_nat a)%nat.\nProof.\ndestruct (Pos.lt_total a b) as [H|[->|H]].\n* rewrite (Pos.sub_lt _ _ H); destruct a; simpl; lia.\n* rewrite Pos.sub_diag; destruct b; simpl; lia.\n* apply Pos.size_nat_monotone; apply Pos.sub_decr; assumption.\nQed.\n\nDefinition Pos_Bezoutn : forall n a b,\n  (Pos.size_nat a + Pos.size_nat b <= n)%nat -> Bezout (Z.pos a) (Z.pos b) (Z.pos (Pos.gcdn n a b)).\nfix Pos_Bezoutn 1.\nintros [|n].\n* abstract (intros a b Hn; destruct a; destruct b; simpl in Hn; lia).\n* intros [a'|a0|].\n  + intros [b'|b0|] Hsize;simpl.\n    - destruct (a' ?= b')%positive eqn:Hcmp; simpl.\n      apply Bezout_aba.\n      apply Bezout_b_minus_a;simpl;apply Bezout_2a;\n      [abstract (rewrite <- Z.odd_spec; reflexivity)|].\n      destruct (Z.eq_dec (Z.pos_sub b' a') (Z.pos (b' - a'))) as [->|Hneq];\n      [apply (Pos_Bezoutn n);abstract(assert (H:=Pos_size_nat_sub b' a'); simpl in *;lia)|].\n      abstract (rewrite Pos.compare_lt_iff in Hcmp;apply Z.pos_sub_gt in Hcmp;contradiction).\n      apply Bezout_a_minus_b;simpl;apply Bezout_2a;\n      [abstract (rewrite <- Z.odd_spec; reflexivity)|].\n      destruct (Z.eq_dec (Z.pos_sub a' b') (Z.pos (a' - b'))) as [->|Hneq];\n      [apply (Pos_Bezoutn n);abstract(assert (H:=Pos_size_nat_sub a' b'); simpl in *;lia)|].\n      abstract (rewrite Pos.compare_gt_iff in Hcmp;apply Z.pos_sub_gt in Hcmp;contradiction).\n    - change (Z.pos b0~0) with (2*Z.pos b0);apply Bezout_2b;\n      [abstract (rewrite <- Z.odd_spec; reflexivity)|].\n      apply (Pos_Bezoutn n).\n      abstract(simpl in *;lia).\n    - apply Bezout_abb.\n  + intros [b'|b0|] Hsize;simpl.\n    - change (Z.pos a0~0) with (2*Z.pos a0);apply Bezout_2a;\n      [abstract (rewrite <- Z.odd_spec; reflexivity)|].\n      apply (Pos_Bezoutn n).\n      abstract(simpl in *;lia).\n    - apply (Bezout_even (Z.pos a0) (Z.pos b0) (Z.pos (Pos.gcdn n a0 b0))).\n      apply (Pos_Bezoutn n).\n      abstract(simpl in *;lia).\n    - apply Bezout_abb.\n  + intros b _.\n    apply Bezout_aba.\nDefined.\n\nDefinition Pos_Bezout a b : Bezout (Z.pos a) (Z.pos b) (Z.pos (Pos.gcd a b)).\napply Bezout_normalize.\napply Pos_Bezoutn.\nabstract lia.\nDefined.\n\nDefinition Bezout_neg_a a b d : Bezout (-a) b d -> Bezout a b d.\nintros bezout.\nexists (- uBezout bezout) (vBezout bezout).\nabstract (destruct bezout as [u v <-];simpl;ring).\nDefined.\n\nDefinition Bezout_neg_b a b d : Bezout a (-b) d -> Bezout a b d.\nintros bezout.\nexists (uBezout bezout) (- vBezout bezout).\nabstract (destruct bezout as [u v <-];simpl;ring).\nDefined.\n\nDefinition Bezout_gcd a b : Bezout a b (Z.gcd a b).\napply Bezout_normalize.\ndestruct a; try apply Bezout_0b; destruct b; try apply Bezout_a0.\n* apply Pos_Bezout.\n* apply Bezout_neg_b; apply Pos_Bezout.\n* apply Bezout_neg_a; apply Pos_Bezout.\n* apply Bezout_neg_a; apply Bezout_neg_b; apply Pos_Bezout.\nDefined.\n\nDefinition modInv a b := Z.modulo (uBezout (Bezout_gcd (Z.modulo a b) b)) b.\n\nLemma modInv_zero b : modInv 0 b = 0.\nProof.\nreflexivity.\nQed.\n\nLemma modInv_divide a b : (b | a) -> modInv a b = 0.\nProof.\nintros Hba.\nunfold modInv.\nrewrite (Zdivide_mod _ _ Hba).\napply (modInv_zero b).\nQed.\n\nLemma modInv_mul_l a b : modInv a b * a mod b = Z.gcd a b mod b.\nProof.\nunfold modInv.\ndestruct (Bezout_gcd (a mod b) b) as [u v Huv]; simpl.\nrewrite Zmult_mod_idemp_l, <- Zmult_mod_idemp_r.\nreplace (u * (a mod b)) with (Z.gcd (a mod b) b + (- v) * b) by lia.\ndestruct (Z.eq_dec b 0) as [->|Hb].\n* rewrite !Zmod_0_r; ring.\n* rewrite Z.gcd_mod, Z.gcd_comm by assumption.\n  apply Z_mod_plus_full.\nQed.\n\nLemma modInv_mul_r a b : a * modInv a b mod b = Z.gcd a b mod b.\nProof.\nrewrite Z.mul_comm.\napply modInv_mul_l.\nQed.\n\nLemma modInv_mul_unique_l a b x : x * a mod b = 1 -> x mod b = modInv a b.\nProof.\nintros Hx.\ndestruct (Z_dec' b 0) as [[Hb0|Hb0]| ->].\n* apply (Z.mod_neg_bound (x*a)) in Hb0.\n  lia.\n* apply Zmod_divide_minus in Hx;[|assumption].\n  destruct (Hx) as [c Hc].\n  unfold modInv.\n  symmetry.\n  apply Zdivide_mod_minus;[apply Z.mod_pos_bound;assumption|].\n  replace (uBezout (Bezout_gcd (a mod b) b) - x mod b)\n   with ((uBezout (Bezout_gcd (a mod b) b) - x) + (x - x mod b)) by ring.\n  apply Z.divide_add_r;[|apply Zmod_divide_minus;lia].\n  destruct (Bezout_gcd (a mod b) b) as [u v Huv]; simpl.\n  rewrite Z.gcd_mod, Zmod_eq in Huv by lia.\n  assert (Hgcd : Z.gcd b a = 1).\n  1:{\n    apply Z.bezout_1_gcd.\n    exists (-c); exists x.\n    lia.\n  }\n  rewrite Hgcd in Huv.\n  apply Z.gauss with a;[|lia].\n  exists (-c - v + u*(a/b)).\n  lia.\n* assert (Hmodinv := modInv_mul_r a 0).\n  rewrite !Zmod_0_r, Z.gcd_0_r in *.\n  rewrite Z.mul_comm in Hx.\n  destruct (Z.mul_eq_1 _ _ Hx) as [->| ->];lia.\nQed.\n\nLemma modInv_mul_unique_r a b x : a * x mod b = 1 -> x mod b = modInv a b.\nProof.\nrewrite Z.mul_comm.\napply modInv_mul_unique_l.\nQed.\n\nLemma modInv_eqm N a b : eqm N a b -> modInv a N = modInv b N.\nProof.\nintros Hab.\nunfold modInv.\nrewrite Hab.\nreflexivity.\nQed.\n\nTransparent Z.shiftr Z.pow.\nLemma HackersDelightA a : Z.Odd a ->\n  Z.land (-(a + (Z.shiftl (Z.land (a + 1) 4)) 1)) (Z.ones 4) =  modInv (-a) (2^4).\nProof.\nrewrite <- Z.odd_spec.\nintros Hodd.\nrewrite Z.land_ones by lia.\nrewrite <- Z.sub_0_l, <- Zminus_mod_idemp_r, Z.sub_0_l.\nrewrite <- Zplus_mod_idemp_l.\nchange (Z.land (a + 1) 4) with (Z.land (a + 1) (Z.land (Z.ones 4) 4)).\nrewrite Z.land_assoc, Z.land_ones by lia.\nrewrite <- (Zplus_mod_idemp_l a).\nunfold modInv.\nsymmetry.\nrewrite <- Z.sub_0_l, <- Zminus_mod_idemp_r, Z.sub_0_l.\nassert (Ha : 0 <= a mod 2^4 < 2^4) by (apply Z.mod_pos_bound;lia).\nassert (Hodd0 : Z.odd (a mod 2 ^ 4) = true).\n1:{\n  rewrite <- Z.bit0_odd in *|-*.\n  rewrite <- Z.land_ones by lia.\n  rewrite Z.land_spec, Hodd.\n  reflexivity.\n}\ndestruct (a mod 2^4) as [|b|b]; try discriminate; try lia.\ndo 4 (destruct b; try reflexivity; try discriminate; try lia).\nQed.\n\nLemma HackersDelightB a : Z.Odd a ->\n  Z.land (a * (a * a - 2)) (Z.ones 6) =  modInv (-a) (2^6).\nProof.\nrewrite <- Z.odd_spec.\nintros Hodd.\nrewrite Z.land_ones by lia.\nrewrite <- Zmult_mod_idemp_l, <- Zmult_mod_idemp_r, <- Zminus_mod_idemp_l.\nrewrite <- (Zmult_mod_idemp_l a), <- (Zmult_mod_idemp_r a).\nrewrite Zminus_mod_idemp_l, Zmult_mod_idemp_r.\nunfold modInv.\nsymmetry.\nrewrite <- Z.sub_0_l, <- Zminus_mod_idemp_r, Z.sub_0_l.\nassert (Ha : 0 <= a mod 2^6 < 2^6) by (apply Z.mod_pos_bound;lia).\nassert (Hodd0 : Z.odd (a mod 2 ^ 6) = true).\n1:{\n  rewrite <- Z.bit0_odd in *|-*.\n  rewrite <- Z.land_ones by lia.\n  rewrite Z.land_spec, Hodd.\n  reflexivity.\n}\ndestruct (a mod 2^6) as [|b|b]; try discriminate; try lia.\ndo 6 (destruct b; try reflexivity; try discriminate; try lia).\nQed."
  },
  {
    "path": "Coq/C/progressC.v",
    "content": "Require Import VST.floyd.proofauto.\nRequire Import extraMath.\n\nLemma Int64_low_is_nonneg (x : Z) :\n Int64.min_signed <= x <= Int64.max_signed ->\n x mod 2 ^ 64 <= Int64.max_signed -> 0 <= x <= Int64.max_signed.\nProof.\nintros [Hx0 Hx1] Hxmod.\ndestruct (Z.neg_nonneg_cases x) as [Hneg|Hpos].\n* apply Zlt_not_le in Hxmod.\n  elim Hxmod.\n  change x with (2^64 mod 2^64 + x).\n  rewrite Zplus_mod_idemp_l.\n  rewrite Z.mod_small; rep_lia.\n* rewrite Z.mod_small in Hxmod; rep_lia.\nQed.\n\nLemma Int64_high_is_neg (x : Z) :\n Int64.min_signed <= x <= Int64.max_signed ->\n Int64.max_signed < x mod 2 ^ 64 -> Int64.min_signed <= x < 0.\nProof.\nintros [Hx0 Hx1] Hxmod.\ndestruct (Z.neg_nonneg_cases x) as [Hneg|Hpos].\n* change x with (2^64 mod 2^64 + x) in Hxmod.\n  rewrite Zplus_mod_idemp_l in Hxmod.\n  rewrite Z.mod_small in Hxmod; rep_lia.\n* apply Zle_not_lt in Hxmod;[contradiction|].\n  rewrite Z.mod_small; rep_lia.\nQed.\n\nLemma umul_bounds_tight a x y : 0 <= x <= a -> 0 <= y <= a ->\n  0 <= x * y <= a * a.\nProof.\nintros Hx Hy.\nsplit;[lia|].\ntransitivity (x * a);[apply Zmult_le_compat_l|apply Zmult_le_compat_r]; try tauto.\nlia.\nQed.\n\nLemma umul64_bounds_tight x y : 0 <= x <= 2^32 - 1 -> 0 <= y <= 2^32-1 ->\n  0 <= x * y <= 2^64 - 2^33 + 1.\nProof.\napply (umul_bounds_tight (2^32-1)).\nQed.\n\nLemma smul_bounds_tight a b x y : 0 <= a <= b ->\n  -b <= x <= a -> -b <= y <= a ->\n  -(a * b) <= x * y <= b * b.\nProof.\nintros Hab.\ndestruct (Z.neg_nonneg_cases y).\n split.\n  rewrite <- Z.mul_opp_r.\n  etransitivity;[apply Z.mul_le_mono_nonneg_l|apply Z.mul_le_mono_nonpos_r];lia.\n etransitivity;[apply (Z.mul_le_mono_nonpos_r (-b))\n               |rewrite Z.mul_opp_comm;apply Z.mul_le_mono_nonneg_l];lia.\nsplit.\n rewrite Z.mul_comm, <- Z.mul_opp_l.\n etransitivity;[apply Z.mul_le_mono_nonpos_l|apply Z.mul_le_mono_nonneg_r];lia.\netransitivity;[apply (Z.mul_le_mono_nonneg_r _ b)|apply Z.mul_le_mono_nonneg_l];lia.\nQed.\n\nLemma smul_bounds a b x y :\n  -a <= x <= a-1 -> -b <= y <= b-1 ->\n  -(a * b) <= x * y <= a * b.\nProof.\nintros Hab.\ndestruct (Z.neg_nonneg_cases y).\n split.\n  rewrite <- Z.mul_opp_r.\n  etransitivity;[apply Z.mul_le_mono_nonneg_l|apply Z.mul_le_mono_nonpos_r];lia.\n etransitivity;[apply (Z.mul_le_mono_nonpos_r (-a))\n               |rewrite Z.mul_opp_comm;apply Z.mul_le_mono_nonneg_l]; lia.\nsplit.\n transitivity (-a*(b-1));[lia|].\n etransitivity;[apply Z.mul_le_mono_nonpos_l|apply Z.mul_le_mono_nonneg_r]; lia.\n transitivity ((a-1)*(b-1));[|lia].\netransitivity;[apply (Z.mul_le_mono_nonneg_r _ (a-1))|apply Z.mul_le_mono_nonneg_l];lia.\nQed.\n\nLemma usmul_bounds_tight a b x y : 0 <= x <= a ->\n  -b <= y <= b-1 ->\n  a * (-b) <= x * y <= a * (b - 1).\nProof.\ndestruct (Z.neg_nonneg_cases y).\n split.\n  etransitivity;[apply Z.mul_le_mono_nonneg_l|apply Z.mul_le_mono_nonpos_r];lia.\n etransitivity;[apply Z.mul_le_mono_nonneg_l|apply Z.mul_le_mono_nonneg_r];lia.\nsplit.\n rewrite Z.mul_opp_r, <- Z.mul_opp_l.\n etransitivity;[apply Z.mul_le_mono_nonpos_l|apply Z.mul_le_mono_nonneg_r]; lia.\netransitivity;[apply Z.mul_le_mono_nonneg_l|apply Z.mul_le_mono_nonneg_r];lia.\nQed.\n\nLemma smul64_bounds_tight x y : -2^31 <= x <= 2^31 - 1 -> -2^31 <= y <= 2^31 - 1 ->\n  -2^62+2^31 <= x * y <= 2^62.\nProof.\nassert (H := smul_bounds_tight (2^31 - 1) (2^31) x y).\nlia.\nQed.\n\nLemma smul128_bounds_tight x y : -2^63 <= x <= 2^63 - 1 -> -2^63 <= y <= 2^63 - 1 ->\n  -2^126+2^63 <= x * y <= 2^126.\nProof.\nassert (H := smul_bounds_tight (2^63 - 1) (2^63) x y).\nlia.\nQed.\n\nLemma sumul64_bounds x y : -2^31 <= x <= 2^31 - 1 -> 0 <= y <= 2^32-1 ->\n  -2^63 <= x * y <= 2^63 - 1.\nProof.\nintros Hx Hy.\nchange (2^63) with (2^31 * 2^32).\nsplit.\n rewrite <- Z.mul_opp_l.\n transitivity (-2^31 * y);[|apply Z.mul_le_mono_nonneg_r];lia.\ntransitivity ((2^31 - 1)*(2^32));[|lia].\ntransitivity ((2^31 - 1) * y);[apply Z.mul_le_mono_nonneg_r|];lia.\nQed.\n\nLemma usmul64_bounds x y : -2^31 <= y <= 2^31 - 1 -> 0 <= x <= 2^32-1 ->\n  -2^63 <= x * y <= 2^63 - 1.\nProof.\nrewrite Z.mul_comm.\nauto using sumul64_bounds.\nQed.\n(*\nLemma add_bounds ax ay az cx cy cz : ax <= ay <= az -> cx <= cy <= cz ->\n ax + cx <= ay + cy <= az + cz.\nProof.\nlia.\nQed.\n*)\nLemma unadd_bounds_unsigned_32 ax ay az b : 0 <= b <= 2^32-1 -> ax <= ay <= az - 2^32 + 1 ->\n  ax <= ay + b <= az.\nProof.\nlia.\nQed.\n\nLemma unadd_bounds_signed_32 ax ay az b : -2^31 <= b <= 2^31-1 -> ax + 2^31 <= ay <= az - 2^31 + 1 ->\n  ax <= ay + b <= az.\nProof.\nlia.\nQed.\n\nLemma unadd_bounds_unsigned_62 ax ay az b : 0 <= b <= 2^62-1 -> ax <= ay <= az - 2^62 + 1 ->\n  ax <= ay + b <= az.\nProof.\nlia.\nQed.\n\nLemma unadd_bounds_shiftr_62 ax ay az b : -2^63 <= b <= 2^63 - 1 -> ax + 2 <= ay <= az - 1 ->\n  ax <= ay + (Z.shiftr b 62) <= az.\nProof.\nintros Hay Hb.\nassert (-2 <= Z.shiftr b 62 < 2) by (apply shiftr_bounds;lia).\nlia.\nQed.\n\nLemma unadd_bounds_b2z ax ay az b : ax <= ay <= az - 1 ->\n  ax <= ay + Z.b2z b <= az.\nProof.\ndestruct b;simpl;lia.\nQed.\n\nLemma unadd_bounds_small b ax ay az : ax - b <= ay <= az - b ->\n   ax <= ay + b <= az.\nProof.\nlia.\nQed.\n\nLemma opp_bounds x y z : (-z <= y <= -x) -> x <= -y <= z.\nProof.\nlia.\nQed.\n\nLemma if_bounds (b : bool) ax ay1 ay2 az : ax <= ay1 <= az -> ax <= ay2 <= az ->\n  ax <= (if b then ay1 else ay2) <= az.\nProof.\ndestruct b;lia.\nQed.\n\n(*\nLemma umul64_bounds x y a b : 0 <= x <= 2^32 - 1 -> 0 <= y <= 2^32-1 ->\n  0 <= a <= 2^32-1 -> 0 <= b <= 2^32-1 -> 0 <= x * y + a + b <= 2^64 - 1.\nProof.\nintros Hx Hy Ha Hb.\nchange (2 ^ 64- 1) with (2^64 - 2^33 + 1 + (2^32 - 1) + (2^32 - 1)).\nchange 0 with (0 + 0 + 0).\nrepeat (apply add_bounds;[|tauto]).\napply umul64_bounds_tight; tauto.\nQed.\n*)\n\nLemma strict_bounds a b : a < b <-> a <= b-1.\nProof.\nrep_lia.\nQed.\n\nLemma strict_bounds' a b c : a <= b < c+1 <-> a <= b <= c.\nProof.\nrep_lia.\nQed.\n\nLemma weaken_bounds a b c d e : b <= c <= d -> a <= b -> d <= e -> a <= c <= e.\nProof.\nrep_lia.\nQed.\n\nLemma of_bool_if b : Val.of_bool b = Vint (Int.repr (Z.b2z b)).\nProof.\ndestruct b; reflexivity.\nQed.\n(*\nLemma Int_unsigned_b2z b : Int.unsigned (Int.repr (Z.b2z b)) = Z.b2z b.\nProof.\ndestruct b; reflexivity.\nQed.\n*)\nLemma Int_signed_b2z b : Int.signed (Int.repr (Z.b2z b)) = Z.b2z b.\nProof.\ndestruct b; reflexivity.\nQed.\n\nLemma zlt_ltb a b : (if zlt a b then true else false) = (a <? b).\nProof.\ndestruct (zlt a b); destruct (Z.ltb_spec a b); try reflexivity; lia.\nQed.\n\nLemma zeq_eqb a b : (if zeq a b then true else false) = (a =? b).\nProof.\ndestruct (zeq a b); destruct (Z.eqb_spec a b); try reflexivity; lia.\nQed.\n\nLemma Zleb_bool a b : negb (Z.b2z b <? Z.b2z a) = orb (negb a) b.\nProof.\ndestruct a; destruct b; reflexivity.\nQed.\n\nLemma Int_shr_shiftr x y : Int.shr x y = Int.repr (Z.shiftr (Int.signed x) (Int.unsigned y)).\nProof.\nrewrite Int.shr_div_two_p.\nrewrite Zbits.Zshiftr_div_two_p by rep_lia.\nreflexivity.\nQed.\n\nLemma Int64_shru_shiftr x y : Int64.shru x y = Int64.repr (Z.shiftr (Int64.unsigned x) (Int64.unsigned y)).\nProof.\nrewrite Int64.shru_div_two_p.\nrewrite Zbits.Zshiftr_div_two_p by rep_lia.\nreflexivity.\nQed.\n\nLemma Int64_shr_shiftr x y : Int64.shr x y = Int64.repr (Z.shiftr (Int64.signed x) (Int64.unsigned y)).\nProof.\nrewrite Int64.shr_div_two_p.\nrewrite Zbits.Zshiftr_div_two_p by rep_lia.\nreflexivity.\nQed.\n\nLemma Int64_shl_shiftl x y : Int64.shl x y = Int64.repr (Z.shiftl (Int64.signed x) (Int64.unsigned y)).\nProof.\nrewrite Int64.shl_mul_two_p.\nrewrite Zbits.Zshiftl_mul_two_p by rep_lia.\nrewrite <- mul64_repr, Int64.repr_signed.\nreflexivity.\nQed.\n\nLemma mul128_tight x y (Hx : -2^63 <= x <= 2^63-1)\n                       (Hy : -2^63 <= y <= 2^63-1) :\n                   -2^126+2^63 <= x * y <= 2^126.\nProof.\nchange (- 2 ^ 126 + 2 ^ 63) with (-(2^63 * (2^63 - 1))).\ndestruct (Z.neg_nonneg_cases y).\n change (2^126) with ((-2^63) * (-2^63)).\n split.\n  rewrite Z.mul_comm, <- Z.mul_opp_r.\n  transitivity ((2 ^ 63 - 1) * y);[apply Z.mul_le_mono_nonneg_l|apply Z.mul_le_mono_nonpos_r];rep_lia.\n transitivity ((-2 ^ 63) * y);[apply Z.mul_le_mono_nonpos_r|];rep_lia.\nchange (2^62) with (2^63 * 2^63).\nsplit.\n rewrite <- Z.mul_opp_l.\n transitivity ((-2 ^ 63) * y);[apply Z.mul_le_mono_nonpos_l|apply Z.mul_le_mono_nonneg_r];rep_lia.\ntransitivity ((2 ^ 63) * y);[apply Z.mul_le_mono_nonneg_r|];rep_lia.\nQed.\n\nLemma xor64_repr i j : Int64.xor (Int64.repr i) (Int64.repr j) = Int64.repr (Z.lxor i j).\nProof.\napply Int64.same_bits_eq.\nintros k Hk.\nrewrite Int64.bits_xor, !Int64.testbit_repr, Z.lxor_spec; auto.\nQed.\n\nLemma Int_repr_Int64_Z_mod_modulus x : Int.repr (Int64.Z_mod_modulus x) = Int.repr x.\nProof.\napply modulo_samerepr.\nrewrite Int64.Z_mod_modulus_eq, <- Zmod_div_mod; try rep_lia.\nexists Int.modulus; reflexivity.\nQed.\n\nLtac unfold_C :=\nchange (Int.unsigned Int64.iwordsize') with 64 in *;\nchange Int.modulus with (2^32) in *;\nchange Int64.modulus with (2^64) in *;\nchange Int64.min_signed with (-2^63) in *;\nchange Int64.max_signed with (2^63-1) in *.\n\n(* Tries to solve bounds of the form x <= expr <= y *)\nLtac solve_bounds_body :=\n  (rep_lia\n      + (setoid_rewrite <- strict_bounds';apply shiftr_bounds;rewrite strict_bounds)\n      + apply unadd_bounds_shiftr_62\n      + apply unadd_bounds_unsigned_32\n      + apply unadd_bounds_signed_32\n      + apply unadd_bounds_unsigned_62\n      + apply unadd_bounds_b2z\n      + apply if_bounds\n      + apply (unadd_bounds_small 1)\n      + apply (unadd_bounds_small (-1))\n      + apply opp_bounds\n      + (eapply weaken_bounds;[(setoid_rewrite <- strict_bounds;apply Z.mod_pos_bound;lia)\n                              +apply umul64_bounds_tight\n                              +apply smul64_bounds_tight\n                              +apply sumul64_bounds\n                              +apply usmul64_bounds\n                              +apply smul128_bounds_tight\n                              |rep_lia|rep_lia])\n     );[> solve_bounds_body ..].\nLtac solve_bounds :=\nunfold_C;\nrewrite ?Z.ones_equiv, <- ?Z.sub_1_r;\nrepeat match goal with\n |- (?a1 /\\ ?a2 /\\ ?b) => split\nend;\nsolve_bounds_body.\n\nLtac clear_mod :=\nrepeat match goal with\n | |- context [ (?a mod ?b)%Z ] =>\n  first\n  [change (?a mod ?b)%Z with ?a\n  |rewrite <- Zmod_div_mod by\n    (try lia; change (2^64) with (2^32 * 2^32);auto with *)\n  |rewrite (Z.mod_small a b);[|solve[rewrite strict_bounds;solve_bounds]]\n  ]\nend.\n\nLtac convert_C_to_math :=\nunfold Int.eq, Int.lt, Int.ltu, Int64.eq, Int64.lt, Int64.ltu;\nrepeat (first [rewrite of_bool_if;simpl (force_val _)\n              |rewrite Int64.signed_zero\n              |rewrite Int64.unsigned_zero\n              |rewrite Int_signed_b2z\n              |rewrite Int.signed_zero\n              |rewrite Int.signed_one by rep_lia\n              |rewrite zlt_ltb\n              |rewrite zeq_eqb\n              |rewrite Zleb_bool\n              |rewrite add64_repr\n              |rewrite Int64.neg_repr\n              |rewrite sub64_repr\n              |rewrite sub_repr\n              |rewrite mul64_repr\n              |rewrite and64_repr\n              |rewrite or64_repr\n              |rewrite xor64_repr\n              |rewrite Int64_shru_shiftr\n              |rewrite Int_shr_shiftr\n              |rewrite Int64_shr_shiftr\n              |rewrite Int64.shl_mul_two_p; try rewrite !two_p_equiv\n              |rewrite Int64.Z_mod_modulus_eq\n              ]);\nrepeat match goal with\n | |- context [ Int.unsigned (Int.repr ?a) ] => rewrite (Int.unsigned_repr a) by rep_lia\n | |- context [ Int64.unsigned (Int64.repr ?a) ] => rewrite (Int64.unsigned_repr a) by rep_lia\n | |- context [ Int.signed (Int.repr ?a) ] => rewrite (Int.signed_repr a) by solve_bounds\n | |- context [ Int64.signed (Int64.repr ?a) ] => rewrite (Int64.signed_repr a) by solve_bounds\nend;\nrepeat (first [rewrite (Int.unsigned_repr_eq _)\n              |rewrite (Int64.unsigned_repr_eq _)\n              ]);\nunfold_C;\nclear_mod.\n\nLtac progressC :=\nfirst [forward|forward_if]; try (entailer!!;cbn);convert_C_to_math;try entailer!!;try solve_bounds.\n\nLtac forward_verify_check :=\n  match goal with\n  | |- semax _ ?E (Sloop _ _) _ => forward_loop E;\n       [entailer!!|try (forward_if;[elimtype False|forward;entailer!!])]\n  | |- semax _ ?E _ _ => forward_loop E continue:E break:E;\n       [entailer!!|try (forward_if;[elimtype False|forward;entailer!!])|forward;entailer!!|]\n  end.\n"
  },
  {
    "path": "Coq/C/secp256k1/spec_int128.v",
    "content": "Require Import VST.floyd.proofauto.\nRequire Import VST.msl.iter_sepcon.\nRequire Import jets_secp256k1.\n\n#[export] Instance CompSpecs : compspecs. make_compspecs prog. Defined.\n\nDefinition Int128_modulus : Z := 2^128.\nDefinition Int128_max_unsigned : Z := Int128_modulus - 1.\nDefinition Int128_max_signed : Z := 2^127 - 1.\nDefinition Int128_min_signed : Z := -2^127.\nDefinition t_secp256k1_uint128 := Tstruct _secp256k1_uint128 noattr.  \n(* (secp256k1_uint128_at sh x p) says that the structure pointed to by p\n * is equivalent to x modulo 2^128.\n *)\nDefinition secp256k1_uint128_at sh x :=\n   data_at sh\n     t_secp256k1_uint128 (Vlong (Int64.repr x), Vlong (Int64.repr (Z.shiftr x 64))).\n\n(*/\nDefinition secp256k1_u128_load_spec : ident * funspec :=\nDECLARE _secp256k1_u128_load\n  WITH r : val, sh : share, hi : Z, lo : Z\n  PRE [ tptr t_secp256k1_uint128, tulong, tulong ]\n    PROP(writable_share sh;\n         0 <= lo < Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr hi); Vlong (Int64.repr lo))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (Z.shiftl hi 64 + lo) r).\n*)\n\nDefinition secp256k1_u128_mul_spec : ident * funspec :=\nDECLARE _secp256k1_u128_mul\n  WITH r : val, sh : share, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tulong, tulong ]\n    PROP(writable_share sh;\n         0 <= a < Int64.modulus;\n         0 <= b < Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (a * b) r).\n\nDefinition secp256k1_u128_accum_mul_spec : ident * funspec :=\nDECLARE _secp256k1_u128_accum_mul\n  WITH r : val, sh : share, r0 : Z, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tulong, tulong ]\n    PROP(writable_share sh;\n         0 <= a < Int64.modulus;\n         0 <= b < Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 + a * b) r).\n\nDefinition secp256k1_u128_accum_u64_spec : ident * funspec :=\nDECLARE _secp256k1_u128_accum_u64\n  WITH r : val, sh : share, r0 : Z, a : Z\n  PRE [ tptr t_secp256k1_uint128, tulong ]\n    PROP(writable_share sh;\n         0 <= a < Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 + a) r).\n\nDefinition secp256k1_u128_rshift_spec : ident * funspec :=\nDECLARE _secp256k1_u128_rshift\n  WITH r : val, sh : share, r0 : Z, n : Z\n  PRE [ tptr t_secp256k1_uint128, tuint ]\n    PROP(writable_share sh;\n         0 <= r0 < Int128_modulus;\n         0 <= n < 128)\n    PARAMS(r; Vint (Int.repr n))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (Z.shiftr r0 n) r).\n\nDefinition secp256k1_u128_to_u64_spec : ident * funspec :=\nDECLARE _secp256k1_u128_to_u64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr r0))\n  SEP(secp256k1_uint128_at sh r0 r).\n\nDefinition secp256k1_u128_hi_u64_spec : ident * funspec :=\nDECLARE _secp256k1_u128_hi_u64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr (Z.shiftr r0 64)))\n  SEP(secp256k1_uint128_at sh r0 r).\n\nDefinition secp256k1_u128_from_u64_spec : ident * funspec :=\nDECLARE _secp256k1_u128_from_u64\n  WITH r : val, sh : share, a : Z\n  PRE [ tptr t_secp256k1_uint128, tulong ]\n    PROP(writable_share sh;\n         0 <= a < Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh a r).\n\nDefinition secp256k1_u128_check_bits_spec : ident * funspec :=\nDECLARE _secp256k1_u128_check_bits\n  WITH r : val, sh : share, r0 : Z, n : Z\n  PRE [ tptr t_secp256k1_uint128, tuint ]\n    PROP(readable_share sh;\n         0 <= r0 < 2^128;\n         0 <= n < 128)\n    PARAMS(r; Vint (Int.repr n))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr (if r0 <? 2^n then 1 else 0)))\n  SEP(secp256k1_uint128_at sh r0 r).\n\n(*\nDefinition secp256k1_i128_load_spec : ident * funspec :=\nDECLARE _secp256k1_i128_load\n  WITH r : val, sh : share, hi : Z, lo : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tulong ]\n    PROP(writable_share sh;\n         Int64.min_signed <= hi <= Int64.max_signed;\n         0 <= lo < Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr hi); Vlong (Int64.repr lo))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (Z.shiftl hi 64 + lo) r).\n*)\n\nDefinition secp256k1_i128_mul_spec : ident * funspec :=\nDECLARE _secp256k1_i128_mul\n  WITH r : val, sh : share, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed <= a <= Int64.max_signed;\n         Int64.min_signed <= b <= Int64.max_signed)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (a * b) r).\n\nDefinition secp256k1_i128_accum_mul_spec : ident * funspec :=\nDECLARE _secp256k1_i128_accum_mul\n  WITH r : val, sh : share, r0 : Z, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed <= a <= Int64.max_signed;\n         Int64.min_signed <= b <= Int64.max_signed;\n         Int128_min_signed <= r0 <= Int128_max_signed;\n         Int128_min_signed <= r0 + a * b <= Int128_max_signed)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 + a * b) r).\n\nDefinition secp256k1_i128_dissip_mul_spec : ident * funspec :=\nDECLARE _secp256k1_i128_dissip_mul\n  WITH r : val, sh : share, r0 : Z, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed <= a <= Int64.max_signed;\n         Int64.min_signed <= b <= Int64.max_signed;\n         Int128_min_signed <= r0 <= Int128_max_signed;\n         Int128_min_signed <= r0 - a * b <= Int128_max_signed)\n   PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 - a * b) r).\n\nDefinition secp256k1_i128_det_spec : ident * funspec :=\nDECLARE _secp256k1_i128_det\n  WITH r : val, sh : share, a : Z, b : Z, c : Z, d : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed <= a <= Int64.max_signed;\n         Int64.min_signed <= b <= Int64.max_signed;\n         Int64.min_signed <= c <= Int64.max_signed;\n         Int64.min_signed <= d <= Int64.max_signed)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b);\n              Vlong (Int64.repr c); Vlong (Int64.repr d))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (a * d - b * c) r).\n\nDefinition secp256k1_i128_rshift_spec : ident * funspec :=\nDECLARE _secp256k1_i128_rshift\n  WITH r : val, sh : share, r0 : Z, n : Z\n  PRE [ tptr t_secp256k1_uint128, tuint ]\n    PROP(writable_share sh;\n         Int128_min_signed <= r0 <= Int128_max_signed;\n         0 <= n < 128)\n    PARAMS(r; Vint (Int.repr n))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (Z.shiftr r0 n) r).\n\nDefinition secp256k1_i128_to_u64_spec : ident * funspec :=\nDECLARE _secp256k1_i128_to_u64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr r0))\n  SEP(secp256k1_uint128_at sh r0 r).\n\nDefinition secp256k1_i128_to_i64_spec : ident * funspec :=\nDECLARE _secp256k1_i128_to_i64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh;\n         Int64.min_signed <= r0 <= Int64.max_signed)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tlong ]\n  PROP()\n  RETURN(Vlong (Int64.repr r0))\n  SEP(secp256k1_uint128_at sh r0 r).\n\nDefinition secp256k1_i128_from_i64_spec : ident * funspec :=\nDECLARE _secp256k1_i128_from_i64\n  WITH r : val, sh : share, a : Z\n  PRE [ tptr t_secp256k1_uint128, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed <= a <= Int64.max_signed)\n    PARAMS(r; Vlong (Int64.repr a))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh a r).\n\nDefinition secp256k1_i128_eq_var_spec : ident * funspec :=\nDECLARE _secp256k1_i128_eq_var\n  WITH r : val, shr : share, r0 : Z,\n       s : val, shs : share, s0 : Z\n  PRE [ tptr t_secp256k1_uint128, tptr t_secp256k1_uint128 ]\n    PROP(readable_share shr;\n         readable_share shs)\n    PARAMS(r; s)\n  SEP(secp256k1_uint128_at shr r0 r;\n      secp256k1_uint128_at shs s0 s)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr (if r0 mod 2^128 =? s0 mod 2^128 then 1 else 0)))\n  SEP(secp256k1_uint128_at shr r0 r\n     ;secp256k1_uint128_at shs s0 s).\n\nDefinition secp256k1_i128_eq_var_spec_alias : ident * funspec :=\nDECLARE _secp256k1_i128_eq_var\n  WITH r : val, shr : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128, tptr t_secp256k1_uint128 ]\n    PROP(readable_share shr)\n    PARAMS(r; r)\n  SEP(secp256k1_uint128_at shr r0 r)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr 1))\n  SEP(secp256k1_uint128_at shr r0 r).\n\nDefinition secp256k1_i128_check_pow2_spec : ident * funspec :=\nDECLARE _secp256k1_i128_check_pow2\n  WITH r : val, sh : share, r0 : Z, n : Z, sign : Z\n  PRE [ tptr t_secp256k1_uint128, tuint, tint ]\n    PROP(readable_share sh;\n         Int128_min_signed <= r0 <= Int128_max_signed;\n         0 <= n < 127;\n         sign = -1 \\/ sign = 1)\n    PARAMS(r; Vint (Int.repr n); Vint (Int.repr sign))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr (Z.b2z (r0 =? sign*2^n))))\n  SEP(secp256k1_uint128_at sh r0 r).\n"
  },
  {
    "path": "Coq/C/secp256k1/spec_modinv64.v",
    "content": "Require Import VST.floyd.proofauto.\nRequire Import jets_secp256k1.\nRequire Import Coq.Logic.Eqdep_dec.\n\nRequire Import progressC.\nRequire Import extraMath.\nRequire Import modinv.\nRequire divstep.\n\n#[export] Instance CompSpecs : compspecs. make_compspecs prog. Defined.\n\nOpaque Z.shiftr Z.pow.\n\nDefinition t_secp256k1_modinv64_signed62 := Tstruct _secp256k1_modinv64_signed62 noattr.\nDefinition t_secp256k1_modinv64_modinfo := Tstruct _secp256k1_modinv64_modinfo noattr.\n\nModule Signed62.\n\nDefinition max_signed n : Z := 2^(n*62)-1.\nDefinition min_signed n : Z := -2^(n*62).\n\nFixpoint signed (l : list int64) : Z :=\nmatch l with\n| [] => 0\n| (a :: l') => Int64.signed a + 2^62 * signed l'\nend.\n\nLemma app_signed l1 l2 : signed (l1 ++ l2) = signed l1 + 2^(Zlength l1 * 62) * signed l2.\nProof.\nrevert l2.\ninduction l1; intros l2.\n* rewrite Z.pow_0_r. cbn. ring.\n* rewrite Zlength_cons.\n  cbn.\n  assert (Hlen := Zlength_nonneg l1).\n  rewrite IHl1, Z.mul_succ_l, Z.pow_add_r; lia.\nQed.\n\nFixpoint reprn (n : nat) (a : Z) : list int64 :=\nmatch n with\n| 0%nat => []\n| 1%nat => [Int64.repr a]\n| (S n0) => Int64.repr (a mod (2 ^ 62)) :: (reprn n0 (Z.shiftr a 62))\nend.\n\nLemma reprn_length n : forall a, length (reprn n a) = n.\nProof.\ninduction n;try reflexivity.\ndestruct n;try reflexivity.\nintro a; simpl in *; rewrite IHn; reflexivity.\nQed.\n\nLemma reprn_Zlength n : forall a, Zlength (reprn n a) = Z.of_nat n.\nProof.\nintros a.\nrewrite Zlength_correct, Signed62.reprn_length; reflexivity.\nQed.\n\nLemma reprn_succ n a : reprn (S n) a = \n  reprn n (a mod 2 ^ (62 * Z.of_nat n)) ++ [Int64.repr (Z.shiftr a (62 * Z.of_nat n))].\nProof.\nrevert a; induction n; intros a;[reflexivity|].\npattern (S n).\nsimpl (reprn (S _) a).\ncbn beta.\nrewrite IHn, Z.shiftr_shiftr, Nat2Z.inj_succ, Z.mul_succ_r, Z.add_comm by lia.\nsimpl.\ndestruct n;[reflexivity|].\nrewrite Z.pow_add_r by lia.\nrewrite <- Zmod_div_mod, !(Z.shiftr_div_pow2 _ 62) by (try lia; auto with *).\nrewrite (Z.mul_comm _ (2^62)), Zaux.Zdiv_mod_mult by lia.\nreflexivity.\nQed.\n\nLemma reprn_last : forall a n d, (1 <= n)%nat ->\n  last (reprn n a) d = Int64.repr (Z.shiftr a (62 * (Z.of_nat n - 1))).\nProof.\nintros a n.\nrevert a.\ninduction n;[lia|].\nintros a d Hn.\nrewrite Nat2Z.inj_succ.\nunfold Z.succ.\nreplace (Z.of_nat n + 1 - 1) with (Z.of_nat n) by ring.\nrewrite reprn_succ.\napply last_last.\nQed.\n\nLemma reprn_nth : forall a n i d, (0 <= i < n - 1)%nat ->\n  nth i (reprn n a) d = Int64.repr ((Z.shiftr a (62 * (Z.of_nat i))) mod (2^62)).\nProof.\nintros a n.\nrevert a.\ninduction n;[intros; lia|].\nintros a i d Hi.\nrewrite reprn_succ.\nrewrite app_nth1 by (rewrite reprn_length; lia).\ndestruct (Nat.lt_ge_cases i (n - 1)).\n+ rewrite IHn, !Z.shiftr_div_pow2, <- (Nat.sub_add i n), Nat2Z.inj_add,\n          Z.mul_add_distr_l, Z.pow_add_r, Z.mul_comm, Zaux.Zdiv_mod_mult by lia.\n  rewrite !Z.pow_mul_r, <- Zmod_div_mod; try reflexivity; try lia.\n  apply Zpow_facts.Zpower_divide.\n  lia.\n+ set (l := (reprn n _)).\n  replace i with (n - 1)%nat by lia.\n  replace n with (length l) at 1 by apply reprn_length.\n  unfold l.\n  rewrite nth_last, reprn_last by lia.\n  replace (62 * Z.of_nat n) with (62 * (Z.of_nat n - 1) + 62) by ring.\n  rewrite Z.pow_add_r, !Z.shiftr_div_pow2, Zaux.Zdiv_mod_mult by lia.\n  repeat f_equal.\n  lia.\nQed.\n\nLemma reprn_Znth : forall a n i, 0 <= i < Z.of_nat n - 1 ->\n  Znth i (reprn n a) = Int64.repr ((Z.shiftr a (62 * i)) mod (2^62)).\nProof.\nintros a n i Hi.\nrewrite <- nth_Znth by (rewrite reprn_Zlength; lia).\nrewrite reprn_nth, Z2Nat.id by lia.\nreflexivity.\nQed.\n\nLemma signed_firstn_reprn a i n : (i < n)%nat -> signed (firstn i (reprn n a)) = a mod (2^(62*Z.of_nat i)).\nProof.\nrevert a i.\ninduction n;[lia|].\nintros a [|i];[simpl; rewrite Z.pow_0_r, Zmod_1_r; reflexivity|].\nintros Hi.\napply Nat.succ_lt_mono in Hi.\ndestruct n;[lia|].\nrewrite Nat2Z.inj_succ, Z.mul_succ_r, Z.pow_add_r by lia.\nsimpl.\nchange (signed _) with (signed (firstn i (reprn (S n) (Z.shiftr a 62)))).\nrewrite IHn by assumption.\nrewrite Int64.signed_repr by solve_bounds.\nrewrite Z.shiftr_div_pow2 by lia.\nsymmetry.\nrewrite Zmod_recombine by lia.\nring.\nQed.\n\nLemma signed_reprn a n : (1 <= n)%nat -> -2 ^ (62 * Z.of_nat n + 1) <= a <= 2 ^ (62 * Z.of_nat n + 1) - 1 ->\n signed (reprn n a) = a.\nProof.\nrevert a.\ninduction n;[lia|].\nintros a _.\nrewrite Nat2Z.inj_succ, Z.mul_succ_r.\ndestruct n.\n* simpl. intros Ha. rewrite Int64.signed_repr;[lia|assumption].\n* change (reprn _ a) with (Int64.repr (a mod (2 ^ 62)) :: (reprn (S n) (Z.shiftr a 62))).\n  cbn [signed].\n  rewrite !Z.pow_add_r in * by lia.\n  intros Ha.\n  rewrite IHn by solve_bounds.\n  rewrite Int64.signed_repr by solve_bounds.\n  rewrite Z.shiftr_div_pow2, Z.add_comm by lia.\n  symmetry.\n  apply Z_div_mod_eq_full.\nQed.\n\nLemma reprn_shrink a n1 n2 : (min_signed (Z.of_nat n1) <= a <= max_signed (Z.of_nat n1)) -> (1 <= n1 < n2)%nat -> \n     (firstn n1\n        (upd_Znth (Z.of_nat n1 - 1) (reprn n2 a)\n           (Int64.or (Znth (Z.of_nat n1 - 1) (reprn n2 a))\n              (Int64.repr (Z.shiftl (if 0 <=? a then 0 else -1) 62))))) =\n     (reprn n1 a).\nProof.\nintros Ha Hn.\napply (nth_eq_ext _ default);\n  rewrite firstn_length, <-ZtoNat_Zlength, Zlength_upd_Znth, ZtoNat_Zlength, !reprn_length;\n[lia|].\nreplace (Init.Nat.min n1 n2) with n1 by lia.\nintros i Hi.\nrewrite nth_firstn by lia.\ndestruct (Nat.eq_dec i (n1 - 1)) as [->|Hneq];rewrite nth_Znth';\n[|rewrite reprn_nth, Znth_upd_Znth_diff, reprn_Znth by lia; reflexivity].\nreplace (Z.of_nat (n1 - 1)) with (Z.of_nat n1 - 1) by lia.\nrewrite upd_Znth_same by (rewrite reprn_Zlength; lia).\nrewrite reprn_Znth by lia.\nsymmetry.\nreplace n1 with (length (reprn n1 a)) at 1 by (rewrite reprn_length;reflexivity).\nrewrite nth_last.\nrewrite reprn_last by lia.\nunfold min_signed, max_signed in Ha.\nelim Z.leb_spec;intros Ha0.\n+ rewrite Int64.or_zero.\n  symmetry.\n  f_equal.\n  apply Z.mod_small.\n  apply shiftr_bounds.\n  rewrite <-Z.pow_add_r by lia.\n  replace (62 * (Z.of_nat n1 - 1) + 62) with (Z.of_nat n1 * 62) by lia.\n  lia.\n+ rewrite <- Int64.add_is_or.\n  2:{\n    apply Int64.same_bits_eq.\n    intros j Hj.\n    rewrite Int64.bits_zero, and64_repr, Int64.testbit_repr by assumption.\n    rewrite <- Z.land_ones, !Z.land_spec, Z.testbit_ones_nonneg, Z.shiftl_spec by lia.\n    elim Z.ltb_spec;[|rewrite andb_false_r;reflexivity].\n    intro; rewrite (Z.testbit_neg_r _ (j - 62)), !andb_false_r by lia; reflexivity.\n  }\n  rewrite add64_repr.\n  f_equal.\n  change (Z.shiftl (-1) 62) with (-2^62).\n  rewrite <- (Z_mod_plus_full _ 1), Z.mod_small;[ring|].\n  rewrite strict_bounds.\n  apply unadd_bounds_small.\n  setoid_rewrite <- strict_bounds'.\n  apply shiftr_bounds.\n  rewrite Z.mul_0_r.\n  cut (-(2^62 * 2 ^ (62 * (Z.of_nat n1 - 1))) <= a < 0);[lia|].\n  rewrite <-Z.pow_add_r by lia.\n  replace (62 + 62 * (Z.of_nat n1 - 1)) with (Z.of_nat n1 * 62); lia.\nQed.\n\nDefinition pad (l : list int64) : list val := map Vlong l ++ repeat Vundef (5 - length l).\n\nLemma pad_nth i (l : list int64) : 0 <= i < Zlength l -> Znth i (pad l) = Vlong (Znth i l).\nProof.\nintros Hi.\nrewrite <- !nth_Znth; try auto.\n* assert (Z.to_nat i < length l)%nat by (rewrite <- ZtoNat_Zlength, <- Z2Nat.inj_lt; lia).\n  unfold pad.\n  rewrite app_nth1 by (rewrite map_length; assumption).\n  erewrite nth_indep by (rewrite map_length; assumption).\n  apply map_nth.\n* unfold pad.\n  rewrite Zlength_app, Zlength_map.\n  assert (Hlen := Zlength_nonneg (repeat Vundef (5 - Datatypes.length l))).\n  lia.\nQed.\n\nLemma pad_nth_undef i (l : list int64) : Zlength l <= i -> Znth i (pad l) = Vundef.\nProof.\nintros Hi.\npose (Hl := Zlength_nonneg l).\nrewrite <- (Z2Nat.id i), <- nth_Znth' by lia.\nrewrite Z2Nat.inj_le, ZtoNat_Zlength in Hi by lia.\nunfold pad.\nrewrite app_nth2 by (rewrite map_length; lia).\napply nth_repeat.\nQed.\n\nLemma pad_length l : (length l <= 5)%nat -> length (pad l) = 5%nat.\nProof.\nintros Hl.\nunfold pad.\nrewrite app_length, map_length, repeat_length.\nlia.\nQed.\n\nLemma pad_Zlength l : Zlength l <= 5 -> Zlength (pad l) = 5.\nProof.\nintros Hl.\nrewrite Zlength_correct, pad_length in *; try lia.\nQed.\n\nLemma pad0 : pad nil = repeat Vundef 5.\nProof.\nreflexivity.\nQed.\n\nLemma pad5 l : length l = 5%nat -> pad l = map Vlong l.\nProof.\nunfold pad.\nintros ->.\ncbn.\nrewrite app_nil_end.\nreflexivity.\nQed.\n\n\nLemma pad_upd_Znth a i l : 0 <= i < Zlength l -> upd_Znth i (pad l) (Vlong a) = pad (upd_Znth i l a).\nProof.\nintros Hi.\nunfold pad.\nrewrite upd_Znth_app1 by (rewrite Zlength_map; assumption).\nf_equal.\n* apply upd_Znth_map.\n* rewrite <- (ZtoNat_Zlength (upd_Znth _ _ _)), Zlength_upd_Znth, ZtoNat_Zlength.\n  reflexivity.\nQed.\n\nLemma pad_upd_Znth_end a l : (length l <= 4)%nat -> upd_Znth (Zlength l) (pad l) (Vlong a) = pad (l++[a]).\nProof.\nintros Hl.\nrewrite <- ZtoNat_Zlength in Hl.\n(* assert (Hl' : Zlength l <= 4) by lia. *)\napply (nth_ext _ _ default default).\n* apply Nat2Z.inj.\n  rewrite <- !Zlength_correct, Zlength_upd_Znth, !pad_Zlength; simpl; try lia.\n  rewrite Zlength_app, Zlength_cons; simpl; lia.  \n* intros n Hn.\n  rewrite !nth_Znth'.\n  pose (Hpad := pad_Zlength l).\n  destruct (Z.lt_total (Z.of_nat n) (Zlength l)) as [Hnl|[Hnl|Hnl]].\n  + rewrite Znth_upd_Znth_diff, pad_nth by lia.\n    rewrite pad_nth by (rewrite Zlength_app, Zlength_cons; simpl; lia).\n    rewrite Znth_app1 by lia.\n    reflexivity.\n  + rewrite Znth_upd_Znth_same by lia.\n    unfold pad.\n    rewrite map_app, Znth_app1, Znth_app2, Zlength_map, Hnl, Z.sub_diag by\n      (rewrite ?Zlength_app, !Zlength_map, ?Zlength_cons; simpl; lia).\n    reflexivity.\n  + rewrite Znth_upd_Znth_diff, pad_nth_undef by lia.\n    rewrite pad_nth_undef by (rewrite Zlength_app, Zlength_cons; simpl; lia).\n    reflexivity.\nQed.\n\nEnd Signed62.\n\nDefinition make_modinfo (m : Z) : (list val * val)%type :=\n  (map Vlong (Signed62.reprn 5 m), Vlong (Int64.repr (modInv m (2^62)))).\n\nDefinition debruijn64_array (sh: share) (gv: globals) : mpred :=\n  Eval cbn in\n  let\n    is_all_init_int8 := fix is_all_init_int8 (l : list init_data) :=\n      match l with\n      | [] => True\n      | Init_int8 _ :: l' => is_all_init_int8 l'\n      | _ => False\n      end\n  in let\n    uninit_int8s := fix uninit_int8s (l: list init_data) :\n        is_all_init_int8 l -> list int :=\n      match l with\n      | [] => fun _ => []\n      | x :: l' =>\n        match x with\n        | Init_int8 i => fun pf => i :: uninit_int8s l' pf\n        | _ => False_rec (list int)\n        end\n      end\n  in data_at sh (gvar_info v_debruijn)\n    (map Vint (uninit_int8s (gvar_init v_debruijn) I)) (gv _debruijn).\n\nLemma data_at_tulong_tlong {cs: compspecs}: forall sh v p, data_at sh tulong v p = data_at sh tlong v p.\nProof.\n  intros.\n  unfold data_at, field_at.\n  f_equal.\n  unfold field_compatible.\n  apply ND_prop_ext.\n  assert (align_compatible tulong p <-> align_compatible tlong p); [| tauto].\n  destruct p; simpl; try tauto.\n  split; intros.\n  + eapply align_compatible_rec_by_value_inv in H; [| reflexivity].\n    eapply align_compatible_rec_by_value; [reflexivity |].\n    auto.\n  + eapply align_compatible_rec_by_value_inv in H; [| reflexivity].\n    eapply align_compatible_rec_by_value; [reflexivity |].\n    auto.\nQed.\n\nLemma SECP256K1_SIGNED62_ONE_global gv : headptr (gv _SECP256K1_SIGNED62_ONE) ->\n   globvar2pred gv (_SECP256K1_SIGNED62_ONE, v_SECP256K1_SIGNED62_ONE) |--\n   data_at Ers t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE).\nProof.\nintros Hheadptr.\nunfold globvar2pred.\nsimpl.\nrewrite sepcon_emp.\nchange (Z.shiftr 1 _) with 0.\nrepeat change (Z.shiftr 0 _) with 0.\nchange (1 mod _) with 1.\nchange (0 mod _) with 0.\nunfold t_secp256k1_modinv64_signed62.\nassert (Hptr : isptr (gv _SECP256K1_SIGNED62_ONE)) by (apply headptr_isptr; assumption).\n\nunfold data_at.\nerewrite field_at_Tstruct;\n[|reflexivity|apply JMeq_refl].\nsimpl (co_members (get_co _secp256k1_modinv64_signed62)).\ncbn -[mapsto].\nchange (0 + _) with 40.\nunfold withspacer.\ndestruct (Z.eq_dec _ _);[clear e|lia].\nrewrite field_at_data_at.\nassert (Hcompat : field_compatible\n          (Tstruct _secp256k1_modinv64_signed62 noattr)\n          (DOT _v) (gv _SECP256K1_SIGNED62_ONE)).\n1:{\n  apply headptr_field_compatible.\n  - assumption.\n  - reflexivity.\n  - repeat constructor.\n  - reflexivity.\n  - eapply align_compatible_rec_Tstruct.\n    + reflexivity.\n    + reflexivity.\n    + simpl; intros i0 t0 z0 H0 H1.\n      destruct (ident_eq _ _) in H0;[|discriminate].\n      injection H0; clear H0.\n      intros <-.\n      subst i0.\n      injection H1; clear H1.\n      intros <-.\n      eapply align_compatible_rec_Tarray.\n      * intros i Hi.\n        cut (i = 0 \\/ i = 1 \\/ i = 2 \\/ i = 3 \\/ i = 4);[|lia].\n        clear Hi.\n        intros [->|[->|[->|[->| ->]]]];econstructor;try reflexivity;apply Zmod_divide;try reflexivity;cbn;lia.\n}\nrewrite field_address_offset by assumption.\nrewrite isptr_offset_val_zero by (apply headptr_isptr; assumption).\nsimpl (nested_field_type _ _).\n\nunfold tarray.\n  rewrite (split2_data_at_Tarray _ tlong _ 1 _\n   [Vlong (Int64.repr 1); Vlong (Int64.repr 0);\n       Vlong (Int64.repr 0); Vlong (Int64.repr 0);\n       Vlong (Int64.repr 0)]\n   [Vlong (Int64.repr 1)] [Vlong (Int64.repr 0);\n       Vlong (Int64.repr 0); Vlong (Int64.repr 0);\n       Vlong (Int64.repr 0)]); try solve[cbn;lia]; try reflexivity.\n  apply sepcon_derives.\n  -  eapply derives_trans;[|apply data_at_singleton_array];[|reflexivity].\n     rewrite <-data_at_tulong_tlong.\n     erewrite mapsto_data_at'; try reflexivity; try apply JMeq_refl;try entailer.\n  apply headptr_field_compatible.\n  + assumption.\n  + reflexivity.\n  + repeat constructor.\n  + reflexivity.\n  + econstructor;[reflexivity|apply Z.divide_0_r].\n  - clear Hcompat.\n      assert (Hcompat : field_compatible (tarray tlong 5) [] (gv _SECP256K1_SIGNED62_ONE)).\n      1:{\n        apply headptr_field_compatible.\n  - assumption.\n  - reflexivity.\n  - repeat constructor.\n  - reflexivity.\n  - eapply align_compatible_rec_Tarray.\n      * intros i Hi.\n        cut (i = 0 \\/ i = 1 \\/ i = 2 \\/ i = 3 \\/ i = 4);[|lia].\n        clear Hi.\n        intros [->|[->|[->|[->| ->]]]];econstructor;try reflexivity;apply Zmod_divide;try reflexivity;cbn;lia.\n       }\n    eapply derives_trans;[apply (mapsto_zero_data_at_zero (Tarray tlong (5 - 1) noattr))|].\n    + apply readable_Ers.\n    + reflexivity.\n    + reflexivity.\n    + apply (field_compatible0_nested_field_array (Tarray tlong 5 noattr) []); try lia; apply arr_field_compatible0; try lia; assumption.\n    + rewrite field_address0_offset by\n       (eapply field_compatible0_cons_Tarray;[reflexivity|assumption|lia]).\n      change (nested_field_offset (Tarray tlong 5 noattr) (SUB 1)) with 8.\n      fold (tarray tlong (5 - 1)).\n      rewrite zero_val_tarray, zero_val_tlong.\n      apply derives_refl.\nQed.\n\nDefinition secp256k1_modinv64_signed62_assign_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_signed62_assign\n  WITH x : Z, ptr_dst : val, ptr_src : val, sh_dst : share, sh_src : share\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_signed62\n      ]\n    PROP( writable_share sh_dst\n        ; readable_share sh_src\n        )\n    PARAMS(ptr_dst; ptr_src)\n    SEP( data_at_ sh_dst t_secp256k1_modinv64_signed62 ptr_dst\n       ; data_at sh_src t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x)) ptr_src\n       )\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP( data_at sh_dst t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x)) ptr_dst\n       ; data_at sh_src t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x)) ptr_src\n       ).\n\nDefinition secp256k1_modinv64_var_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_var\n  WITH x : Z, m : Z, ptrx : val, modinfo : val, shx : share, sh_modinfo : share,\n       sh_debruijn : share, sh_SECP256K1_SIGNED62_ONE : share, gv : globals\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_modinfo\n      ]\n    PROP( Z.Odd m\n        ; 0 <= x < m\n        ; 1 < m < 2^256\n        ; x = 0 \\/ rel_prime x m\n        ; writable_share shx\n        ; readable_share sh_modinfo\n        ; readable_share sh_debruijn\n        ; readable_share sh_SECP256K1_SIGNED62_ONE\n        )\n    PARAMS(ptrx; modinfo)\n    GLOBALS(gv)\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x)) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE))\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 (modInv x m))) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE)).\n\nDefinition secp256k1_modinv64_var_spec_prime : ident * funspec :=\nDECLARE _secp256k1_modinv64_var\n  WITH x : Z, m : Z, ptrx : val, modinfo : val, shx : share, sh_modinfo : share,\n       sh_debruijn : share, sh_SECP256K1_SIGNED62_ONE : share, gv : globals\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_modinfo\n      ]\n    PROP( Z.Odd m\n        ; 0 <= x < m\n        ; m < 2^256\n        ; prime m\n        ; writable_share shx\n        ; readable_share sh_modinfo\n        ; readable_share sh_debruijn\n        ; readable_share sh_SECP256K1_SIGNED62_ONE\n        )\n    PARAMS(ptrx; modinfo)\n    GLOBALS(gv)\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x)) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE))\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 (modInv x m))) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE)).\n\n(* Use with\n   forward_call secp256k1_modinv64_var_spec_prime_sub (x, m, ptrx, modinfo, shx, sh_modinfo, sh_debruijn, sh_SECP256K1_SIGNED62_ONE, gv)\n*)\nLemma secp256k1_modinv64_var_spec_prime_sub :\n  funspec_sub (snd secp256k1_modinv64_var_spec) (snd secp256k1_modinv64_var_spec_prime).\nProof.\ndo_funspec_sub.\nExists w emp.\ndestruct w as [[[[[[[[x m] ptrx] modinfo] shx] sh_modinfo] sh_debruinj] sh_SECP256K1_SIGNED62_ONE] gv].\nentailer!!.\nsplit.\n* cut (m <> 1);[lia|].\n  intros Hm; apply not_prime_1.\n  congruence.\n* destruct (Z.eq_dec x 0) as [Hx0|Hx0];[tauto|].\n  right.\n  apply rel_prime_le_prime;[assumption|lia].\nQed.\n"
  },
  {
    "path": "Coq/C/secp256k1/verif_int128_impl.v",
    "content": "Require Import VST.floyd.proofauto.\nRequire Import jets_secp256k1.\nRequire Import spec_int128.\nRequire Import VST.msl.iter_sepcon.\nRequire Import extraMath.\nRequire Import progressC.\n\nOpaque Z.shiftl Z.shiftr Z.pow.\n\nDefinition Vprog : varspecs. mk_varspecs prog. Defined.\n\nDefinition secp256k1_umul128_spec : ident * funspec :=\nDECLARE _secp256k1_umul128\n  WITH a : Z, b : Z, hi : val, sh : share\nPRE [ tulong, tulong, tptr tulong ]\n  PROP(writable_share sh;\n       0 <= a < Int64.modulus;\n       0 <= b < Int64.modulus)\n  PARAMS(Vlong (Int64.repr a); Vlong (Int64.repr b); hi)\n  SEP(data_at_ sh tulong hi)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr (a * b)))\n  SEP(data_at sh tulong (Vlong (Int64.repr (Z.shiftr (a * b) 64))) hi).\n\nDefinition secp256k1_mul128_spec : ident * funspec :=\nDECLARE _secp256k1_mul128\n  WITH a : Z, b : Z, hi : val, sh : share\n  PRE [ tlong, tlong, tptr tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed <= a <= Int64.max_signed;\n         Int64.min_signed <= b <= Int64.max_signed)\n    PARAMS(Vlong (Int64.repr a); Vlong (Int64.repr b); hi)\n  SEP(data_at_ sh tlong hi)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr (a * b)))\n  SEP(data_at sh tlong (Vlong (Int64.repr (Z.shiftr (a * b) 64))) hi).\n\nLemma iter_sepcon_wand_in B f (x : B) l (Hl : In x l) : iter_sepcon f l = (f x * (f x -* iter_sepcon f l))%logic.\nProof.\napply pred_ext;[|apply wand_frame_elim].\napply In_Permutation_cons in Hl.\ndestruct Hl as [l' Hl'].\nrewrite (iter_sepcon_permutation _ Hl').\nsimpl.\nentailer!.\napply wand_frame_intro.\nQed.\n\nLtac unfold_Int128 :=\n  unfold Int128_max_unsigned,\n         Int128_max_signed,\n         Int128_min_signed,\n         Int128_modulus\n  in *|-*.\n\nDefinition Gprog := ltac:(with_library prog\n  [secp256k1_umul128_spec\n  ;secp256k1_mul128_spec\n(*   ;secp256k1_u128_load_spec *)\n  ;secp256k1_u128_mul_spec\n  ;secp256k1_u128_accum_mul_spec\n  ;secp256k1_u128_accum_u64_spec\n  ;secp256k1_u128_rshift_spec\n  ;secp256k1_u128_to_u64_spec\n  ;secp256k1_u128_hi_u64_spec\n  ;secp256k1_u128_from_u64_spec\n  ;secp256k1_u128_check_bits_spec\n(*   ;secp256k1_i128_load_spec *)\n  ;secp256k1_i128_mul_spec\n  ;secp256k1_i128_accum_mul_spec\n  ;secp256k1_i128_dissip_mul_spec\n  ;secp256k1_i128_det_spec\n  ;secp256k1_i128_rshift_spec\n  ;secp256k1_i128_to_u64_spec\n  ;secp256k1_i128_to_i64_spec\n  ;secp256k1_i128_from_i64_spec\n  ;secp256k1_i128_eq_var_spec\n  ;secp256k1_i128_check_pow2_spec\n  ]).\n\nLemma body_secp256k1_umul128: semax_body Vprog Gprog f_secp256k1_umul128 secp256k1_umul128_spec.\nProof.\nstart_function.\nrepeat progressC.\n* f_equal.\n  apply Int64.eqm_repr_eq.\n  eapply Int64.eqm_trans;[apply Int64.eqm_unsigned_repr|apply Int64.eqm_refl2].\n  rewrite !Int64.unsigned_repr_eq.\n  change Int64.modulus with (2^64).\n  rewrite !Z.shiftr_div_pow2 by lia.\n  match goal with\n   |- (?x mod 2^64) = _ => replace x with\n  (2 ^ 32 * ((a mod 2 ^ 32 * (b / 2 ^ 32)) mod 2 ^ 32) +\n  2 ^ 32 * ((a / 2 ^ 32 * (b mod 2 ^ 32)) mod 2 ^ 32)  +\n  (2 ^ 32 * (a mod 2 ^ 32 * (b mod 2 ^ 32) / 2 ^ 32) +\n  (a mod 2 ^ 32 * (b mod 2 ^ 32)) mod 2 ^ 32)) by ring\n  end.\n  rewrite <- Z_div_mod_eq by lia.\n  rewrite <- !(Zmult_mod_distr_l _ _ (2^32)).\n  rewrite <- (Z.mod_small (a mod 2 ^ 32 * (b mod 2 ^ 32)) (2^64)) by (rewrite strict_bounds; solve_bounds).\n  change (2^32 * 2^32) with (2^64).\n  rewrite Zplus_mod_idemp_r, <- Zplus_assoc, Zplus_mod_idemp_l.\n  match goal with\n   |- (?x mod 2^64) = _ => replace x with\n  ((2 ^ 32 * (a / 2 ^ 32 * (b mod 2 ^ 32)) mod 2^64 +\n  (a mod 2 ^ 32 * (2 ^ 32 * (b / 2 ^ 32) + b mod 2 ^ 32)))) by ring\n  end.\n  rewrite <- Z_div_mod_eq by lia.\n  change (2^64) with (2^32 * 2^32) at 1.\n  rewrite Zmult_mod_distr_l, Zmult_mod_idemp_r, <- Zmult_mod_distr_l, Zplus_mod_idemp_l.\n  match goal with\n   |- (?x mod 2^64) = _ => replace x with\n  ((2 ^ 32 * (a / 2 ^ 32) + (a mod 2 ^ 32)) * b) by ring\n  end.\n  rewrite <- Z_div_mod_eq by lia.\n  reflexivity.\n* rewrite <- (Z.shiftr_shiftr _ 32 32), !Z.shiftr_div_pow2 by lia.\n  rewrite <- Z.div_add_l by lia.\n  match goal with\n   |- context [Int64.repr (?x / 2^32)] => replace x with\n   (((2 ^ 32 * (a mod 2 ^ 32 * (b / 2 ^ 32) / 2 ^ 32) + (a mod 2 ^ 32 * (b / 2 ^ 32)) mod 2 ^ 32) +\n     (a mod 2 ^ 32 * (b mod 2 ^ 32) / 2 ^ 32)) +\n    (a / 2 ^ 32 * (2 ^ 32 * (b / 2 ^ 32)) +\n    (2 ^ 32 * (a / 2 ^ 32 * (b mod 2 ^ 32) / 2 ^ 32) + (a / 2 ^ 32 * (b mod 2 ^ 32)) mod 2 ^ 32))\n   ) by ring\n  end.\n  rewrite <- !Z_div_mod_eq by lia.\n  rewrite <- Z.mul_add_distr_l.\n  rewrite <- Z_div_mod_eq by lia.\n  rewrite <- Z.div_add_l by lia.\n  rewrite <- Z.mul_assoc.\n  rewrite <- Z.mul_add_distr_l.\n  rewrite (Z.mul_comm _ (2^32)).\n  rewrite <- Z_div_mod_eq by lia.\n  rewrite Z.add_comm.\n  rewrite <- Z.div_add_l by lia.\n  rewrite (Z.mul_comm _ (2^32)), Z.mul_assoc.\n  rewrite <- Z.mul_add_distr_r.\n  rewrite <- Z_div_mod_eq by lia.\n  entailer!.\nQed.\n\nLemma body_secp256k1_mul128: semax_body Vprog Gprog f_secp256k1_mul128 secp256k1_mul128_spec.\nProof.\nstart_function.\nrepeat progressC.\n* f_equal.\n  apply Int64.eqm_repr_eq.\n  eapply Int64.eqm_trans;[apply Int64.eqm_unsigned_repr|apply Int64.eqm_refl2].\n  rewrite !Int64.unsigned_repr_eq.\n  change Int64.modulus with (2^64).\n  rewrite !Z.shiftr_div_pow2 by lia.\n  unfold Int64.Z_mod_modulus.\n  match goal with\n   |- (?x mod 2^64) = _ => replace x with\n  (2 ^ 32 * ((a mod 2 ^ 32 * (b / 2 ^ 32)) mod 2 ^ 32) +\n  2 ^ 32 * ((a / 2 ^ 32 * (b mod 2 ^ 32)) mod 2 ^ 32)  +\n  (2 ^ 32 * (a mod 2 ^ 32 * (b mod 2 ^ 32) / 2 ^ 32) +\n  (a mod 2 ^ 32 * (b mod 2 ^ 32)) mod 2 ^ 32)) by ring\n  end.\n  rewrite <- Z_div_mod_eq by lia.\n  rewrite <- !(Zmult_mod_distr_l _ _ (2^32)).\n  rewrite <- (Z.mod_small (a mod 2 ^ 32 * (b mod 2 ^ 32)) (2^64)) by (rewrite strict_bounds; solve_bounds).\n  change (2^32 * 2^32) with (2^64).\n  rewrite Zplus_mod_idemp_r, <- Zplus_assoc, Zplus_mod_idemp_l.\n  match goal with\n   |- (?x mod 2^64) = _ => replace x with\n  ((2 ^ 32 * (a / 2 ^ 32 * (b mod 2 ^ 32)) mod 2^64 +\n  (a mod 2 ^ 32 * (2 ^ 32 * (b / 2 ^ 32) + b mod 2 ^ 32)))) by ring\n  end.\n  rewrite <- Z_div_mod_eq by lia.\n  change (2^64) with (2^32 * 2^32) at 1.\n  rewrite Zmult_mod_distr_l, Zmult_mod_idemp_r, <- Zmult_mod_distr_l, Zplus_mod_idemp_l.\n  match goal with\n   |- (?x mod 2^64) = _ => replace x with\n  ((2 ^ 32 * (a / 2 ^ 32) + (a mod 2 ^ 32)) * b) by ring\n  end.\n  rewrite <- Z_div_mod_eq by lia.\n  reflexivity.\n* rewrite <- (Z.shiftr_shiftr _ 32 32), !Z.shiftr_div_pow2 by lia.\n  rewrite <- Z.div_add_l by lia.\n  match goal with\n   |- context [Int64.repr (?x / 2^32)] => replace x with\n   (((2 ^ 32 * (a mod 2 ^ 32 * (b / 2 ^ 32) / 2 ^ 32) + (a mod 2 ^ 32 * (b / 2 ^ 32)) mod 2 ^ 32) +\n     (a mod 2 ^ 32 * (b mod 2 ^ 32) / 2 ^ 32)) +\n    (a / 2 ^ 32 * (2 ^ 32 * (b / 2 ^ 32)) +\n    (2 ^ 32 * (a / 2 ^ 32 * (b mod 2 ^ 32) / 2 ^ 32) + (a / 2 ^ 32 * (b mod 2 ^ 32)) mod 2 ^ 32))\n   ) by ring\n  end.\n  rewrite <- !Z_div_mod_eq by lia.\n  rewrite <- Z.mul_add_distr_l.\n  rewrite <- Z_div_mod_eq by lia.\n  rewrite <- Z.div_add_l by lia.\n  rewrite <- Z.mul_assoc.\n  rewrite <- Z.mul_add_distr_l.\n  rewrite (Z.mul_comm _ (2^32)).\n  rewrite <- Z_div_mod_eq by lia.\n  rewrite Z.add_comm.\n  rewrite <- Z.div_add_l by lia.\n  rewrite (Z.mul_comm _ (2^32)), Z.mul_assoc.\n  rewrite <- Z.mul_add_distr_r.\n  rewrite <- Z_div_mod_eq by lia.\n  entailer!.\nQed.\n\n(*\nLemma body_secp256k1_u128_load: semax_body Vprog Gprog f_secp256k1_u128_load secp256k1_u128_load_spec.\nProof.\nstart_function.\nrepeat forward.\nentailer!.\nunfold secp256k1_uint128_at.\nrewrite <- (Int64.repr_unsigned (Int64.repr (_ + lo))), Int64.unsigned_repr_eq.\nrewrite Z.shiftl_mul_pow2, <- Zplus_mod_idemp_l, <- Zmult_mod_idemp_r, Z_mod_same_full by lia.\nrewrite Z.mul_0_r, Z.add_0_l.\nclear_mod.\nrewrite Z.shiftr_div_pow2, Z.div_add_l by lia.\nrewrite Z.div_small, Z.add_0_r by solve_bounds.\nentailer!.\nQed.\n*)\n\nLemma body_secp256k1_u128_mul: semax_body Vprog Gprog f_secp256k1_u128_mul secp256k1_u128_mul_spec.\nProof.\nstart_function.\nunfold_data_at (data_at_ sh t_secp256k1_uint128 r).\nsimpl.\nrewrite (field_at_data_at _ _ (DOT _hi)).\nassert_PROP (field_compatible t_secp256k1_uint128 (DOT _hi) r) by\n entailer!.\nforward_call (a, b, (field_address t_secp256k1_uint128 (DOT _hi) r), sh).\nforward.\nunfold secp256k1_uint128_at.\nunfold_data_at (data_at sh t_secp256k1_uint128 _ r).\nentailer!.\nQed.\n\nLemma body_secp256k1_u128_accum_mul: semax_body Vprog Gprog f_secp256k1_u128_accum_mul secp256k1_u128_accum_mul_spec.\nProof.\nstart_function.\nforward_call.\nrepeat progressC.\nunfold secp256k1_uint128_at.\nrewrite Z.add_assoc.\nrewrite <- shiftr_add_carry by lia.\nentailer!.\nQed.\n\nLemma body_secp256k1_u128_accum_u64: semax_body Vprog Gprog f_secp256k1_u128_accum_u64 secp256k1_u128_accum_u64_spec.\nProof.\nstart_function.\nrepeat progressC.\nunfold secp256k1_uint128_at.\nrewrite shiftr_add_carry by lia.\nrewrite (shiftr_small a), Z.add_0_r, (Z.mod_small a) by solve_bounds.\nentailer!.\nQed.\n\nLemma body_secp256k1_u128_rshift: semax_body Vprog Gprog f_secp256k1_u128_rshift secp256k1_u128_rshift_spec.\nProof.\nstart_function.\nforward_verify_check.\n revert H1.\n convert_C_to_math.\n cbn.\n case Z.ltb_spec;[discriminate|lia].\nunfold secp256k1_uint128_at.\nunfold_Int128.\nrepeat progressC.\n* rewrite !Z.shiftr_shiftr by lia.\n  replace (64 + (n - 64)) with n by ring.\n  rewrite (shiftr_small _ (n + 64));[entailer!|].\n  cut (0 <= r0 < 2^128);[|solve_bounds].\n  assert (2^128 <= 2^(n+64)) by (apply Z.pow_le_mono_r;lia).\n  lia.\n* rewrite !Z.shiftr_shiftr by lia.\n  rewrite Z.add_comm.\n  replace (Int64.repr (Z.lor _ _)) with (Int64.repr (Z.shiftr r0 n));[entailer!|].\n  rewrite <- Z.shiftl_mul_pow2 by lia.\n  apply Int64.eqm_samerepr.\n  apply Int64.eqm_same_bits.\n  change Int64.zwordsize with 64.\n  intros i Hi.\n  rewrite Z.lor_spec, !Z.shiftr_spec, Z.shiftl_spec by lia.\n  destruct (Z.neg_nonneg_cases (i - (64 - n))) as [Hneg|Hpos].\n  - rewrite (Z.testbit_neg_r _ _ Hneg).\n    rewrite Z.mod_pow2_bits_low by lia.\n    reflexivity.\n  - rewrite Z.shiftr_spec by lia.\n    rewrite Z.mod_pow2_bits_high, orb_false_r by lia.\n    replace (i - (64 - n) + 64) with (i + n) by ring.\n    reflexivity.\n* replace n with 0 by lia.\n  rewrite Z.shiftr_0_r.\n  entailer!.\nQed.\n\nLemma body_secp256k1_u128_to_u64: semax_body Vprog Gprog f_secp256k1_u128_to_u64 secp256k1_u128_to_u64_spec.\nProof.\nstart_function.\nunfold secp256k1_uint128_at.\nrepeat progressC.\nQed.\n\nLemma body_secp256k1_u128_hi_u64: semax_body Vprog Gprog f_secp256k1_u128_hi_u64 secp256k1_u128_hi_u64_spec.\nProof.\nstart_function.\nunfold secp256k1_uint128_at.\nrepeat progressC.\nQed.\n\nLemma body_secp256k1_u128_from_u64: semax_body Vprog Gprog f_secp256k1_u128_from_u64 secp256k1_u128_from_u64_spec.\nProof.\nstart_function.\nrepeat progressC.\nunfold secp256k1_uint128_at.\nreplace (Z.shiftr a 64) with 0;[entailer!|].\nsymmetry; auto using shiftr_small.\nQed.\n\nLemma body_secp256k1_u128_check_bits: semax_body Vprog Gprog f_secp256k1_u128_check_bits secp256k1_u128_check_bits_spec.\nProof.\nstart_function.\nforward_verify_check.\n revert H1.\n convert_C_to_math.\n cbn.\n case Z.ltb_spec;[discriminate|lia].\nunfold secp256k1_uint128_at.\nassert (shiftr_small_eq : (r0 <? 2 ^ n) = (Z.shiftr r0 n =? 0)) by\n  (case Z.eqb_spec; intros Heq; rewrite shiftr_small_iff in Heq; lia).\nforward_if (temp _t'1 (Vint (Int.repr (Z.b2z (r0 <? 2^n)))));[| |forward].\n* repeat progressC.\n  do 3 f_equal.\n  rewrite !Z.shiftr_shiftr by lia.\n  replace (64 + (n - 64)) with n by ring.\n  assumption.\n* repeat progressC.\n  - rewrite shiftr_small_eq.\n    rewrite (Z_div_mod_eq_full r0 (2^64)) at 1.\n    rewrite <- Z.shiftr_div_pow2 by lia.\n    apply (f_equal Int64.unsigned) in H2.\n    revert H2; convert_C_to_math; intros ->.\n    replace (_ + r0 mod 2^64) with (r0 mod 2^64) by ring.\n    reflexivity.\n  - rewrite shiftr_small_eq.\n    case (Z.eqb_spec);[|reflexivity].\n    intros Hr0.\n    elim H2.\n    replace 64 with (n + (64 - n)) by ring.\n    rewrite <- Z.shiftr_shiftr, Hr0, Z.shiftr_0_l by lia.\n    reflexivity.\nQed.\n\n(*\nLemma body_secp256k1_i128_load: semax_body Vprog Gprog f_secp256k1_i128_load secp256k1_i128_load_spec.\nProof.\nstart_function.\nrepeat forward.\nentailer!.\nunfold secp256k1_uint128_at.\nrewrite <- (Int64.repr_unsigned (Int64.repr (_ + lo))), Int64.unsigned_repr_eq.\nrewrite Z.shiftl_mul_pow2, <- Zplus_mod_idemp_l, <- Zmult_mod_idemp_r, Z_mod_same_full by lia.\nrewrite Z.mul_0_r, Z.add_0_l.\nclear_mod.\nrewrite Z.shiftr_div_pow2, Z.div_add_l by lia.\nrewrite Z.div_small, Z.add_0_r by solve_bounds.\nentailer!.\nQed.\n*)\n\nLemma body_secp256k1_i128_mul: semax_body Vprog Gprog f_secp256k1_i128_mul secp256k1_i128_mul_spec.\nProof.\nstart_function.\nforward_call.\nrepeat progressC.\nQed.\n\nLemma body_secp256k1_i128_accum_mul: semax_body Vprog Gprog f_secp256k1_i128_accum_mul secp256k1_i128_accum_mul_spec.\nProof.\nstart_function.\nunfold secp256k1_uint128_at.\nunfold_Int128.\nforward_call.\nrepeat progressC.\nforward_verify_check.\n repeat progressC.\n set (hi := (_ + Z.b2z _)).\n forward_if (temp _t'2 (Vint (Int.repr (Z.b2z (((Z.shiftr r0 64) mod 2^64 <=? 9223372036854775807) && (hi mod 2^64 <=? 9223372036854775807))%bool))));\n repeat progressC;\n revert H3;\n convert_C_to_math;\n try solve \n  [repeat (first[case (Z.leb_spec _ _)|case (Z.ltb_spec _ _)];try lia;try reflexivity)].\n case (Z.leb_spec _ _);try discriminate; intros Hr0.\n case (Z.leb_spec _ _);try discriminate; intros Hhi.\n case (Z.ltb_spec _ _);try discriminate; intros Hr0hi.\n apply Int64_low_is_nonneg in Hr0; [|solve_bounds].\n apply Int64_low_is_nonneg in Hhi;[|solve_bounds].\n apply Int64_high_is_neg in Hr0hi;[lia|].\n unfold hi.\n rewrite Z.add_assoc, <- shiftr_add_carry by lia.\n solve_bounds.\nforward_verify_check.\n repeat progressC.\n set (hi := (_ + Z.b2z _)).\n forward_if (temp _t'3 (Vint (Int.repr (Z.b2z ((2^63-1 <? (Z.shiftr r0 64) mod 2^64) && (2^63-1 <? hi mod 2^64))%bool))));\n repeat progressC;\n revert H3;\n convert_C_to_math;\n try solve \n  [repeat (first[case (Z.leb_spec _ _)|case (Z.ltb_spec _ _)];try lia;try reflexivity)].\n case (Z.ltb_spec _ _);try discriminate; intros Hr0.\n case (Z.ltb_spec _ _);try discriminate; intros Hhi.\n case (Z.ltb_spec _ _);try discriminate; intros Hr0hi.\n apply Int64_high_is_neg in Hr0; [|solve_bounds].\n apply Int64_high_is_neg in Hhi;[|solve_bounds].\n apply Int64_low_is_nonneg in Hr0hi;[lia|].\n unfold hi.\n rewrite Z.add_assoc, <- shiftr_add_carry by lia.\n solve_bounds.\nrepeat progressC.\nunfold secp256k1_uint128_at.\nrewrite Z.add_assoc, <- shiftr_add_carry by lia.\nentailer!.\nQed.\n\nLemma body_secp256k1_i128_dissip_mul: semax_body Vprog Gprog f_secp256k1_i128_dissip_mul secp256k1_i128_dissip_mul_spec.\nProof.\nstart_function.\nunfold secp256k1_uint128_at.\nunfold_Int128.\nforward_call.\nrepeat progressC.\nforward_verify_check.\n repeat progressC.\n set (hi := (_ + Z.b2z _)).\n forward_if (temp _t'2 (Vint (Int.repr (Z.b2z (((Z.shiftr r0 64) mod 2^64 <=? 2^63-1) && (2^63-1 <? hi mod 2^64))%bool))));\n repeat progressC;\n revert H3;\n convert_C_to_math;\n try solve \n  [repeat (first[case (Z.leb_spec _ _)|case (Z.ltb_spec _ _)];try lia;try reflexivity)].\n case (Z.leb_spec _ _);try discriminate; intros Hr0.\n case (Z.ltb_spec _ _);try discriminate; intros Hhi.\n case (Z.ltb_spec _ _);try discriminate; intros Hr0hi.\n apply Int64_low_is_nonneg in Hr0; [|solve_bounds].\n apply Int64_high_is_neg in Hhi;[|solve_bounds].\n apply Int64_high_is_neg in Hr0hi;[lia|].\n unfold hi.\n rewrite Z.sub_add_distr, <- shiftr_sub_borrow by lia.\n solve_bounds.\nforward_verify_check.\n repeat progressC.\n set (hi := (_ + Z.b2z _)).\n forward_if (temp _t'3 (Vint (Int.repr (Z.b2z ((2^63-1 <? (Z.shiftr r0 64) mod 2^64) && (hi mod 2^64 <=? 2^63-1))%bool))));\n repeat progressC;\n revert H3;\n convert_C_to_math;\n try solve \n  [repeat (first[case (Z.leb_spec _ _)|case (Z.ltb_spec _ _)];try lia;try reflexivity)].\n case (Z.ltb_spec _ _);try discriminate; intros Hr0.\n case (Z.leb_spec _ _);try discriminate; intros Hhi.\n case (Z.ltb_spec _ _);try discriminate; intros Hr0hi.\n apply Int64_high_is_neg in Hr0; [|solve_bounds].\n apply Int64_low_is_nonneg in Hhi;[|solve_bounds].\n apply Int64_low_is_nonneg in Hr0hi;[lia|].\n unfold hi.\n rewrite Z.sub_add_distr, <- shiftr_sub_borrow by lia.\n solve_bounds.\nrepeat progressC.\nunfold secp256k1_uint128_at.\nrewrite Z.sub_add_distr, <- shiftr_sub_borrow by lia.\nentailer!.\nQed.\n\nLemma body_secp256k1_i128_det: semax_body Vprog Gprog f_secp256k1_i128_det secp256k1_i128_det_spec.\nProof.\nstart_function.\nforward_call.\nforward_call;[|entailer!].\nunfold Int128_min_signed, Int128_max_signed.\nassert (Htight := mul128_tight _ _ H H2).\nassert (Htight' := mul128_tight _ _ H0 H1).\nlia.\nQed.\n\nLemma body_secp256k1_i128_rshift: semax_body Vprog Gprog f_secp256k1_i128_rshift secp256k1_i128_rshift_spec.\nProof.\nstart_function.\nforward_verify_check.\n revert H1.\n convert_C_to_math.\n cbn.\n case Z.ltb_spec;[discriminate|lia].\nunfold secp256k1_uint128_at.\nunfold_Int128.\nrepeat progressC.\n* rewrite !Z.shiftr_shiftr by lia.\n  replace (64 + (n - 64)) with n by ring.\n  change (64 + 63) with 127.\n  replace (n + 64) with (127 + (n - 63)) by ring.\n  rewrite shiftr_small_signed by solve_bounds.\n  entailer!.\n* rewrite !Z.shiftr_shiftr by lia.\n  rewrite Z.add_comm.\n  replace (Int64.repr (Z.lor _ _)) with (Int64.repr (Z.shiftr r0 n));[entailer!|].\n  rewrite <- Z.shiftl_mul_pow2 by lia.\n  apply Int64.eqm_samerepr.\n  apply Int64.eqm_same_bits.\n  change Int64.zwordsize with 64.\n  intros i Hi.\n  rewrite Z.lor_spec, !Z.shiftr_spec, Z.shiftl_spec by lia.\n  destruct (Z.neg_nonneg_cases (i - (64 - n))) as [Hneg|Hpos].\n   rewrite (Z.testbit_neg_r _ _ Hneg).\n   rewrite Z.mod_pow2_bits_low by lia.\n   reflexivity.\n  rewrite Z.shiftr_spec by lia.\n  rewrite Z.mod_pow2_bits_high, orb_false_r by lia.\n  replace (i - (64 - n) + 64) with (i + n) by ring.\n  reflexivity.\n* replace n with 0 by lia.\n  rewrite Z.shiftr_0_r.\n  entailer!.\nQed.\n\nLemma body_secp256k1_i128_to_u64: semax_body Vprog Gprog f_secp256k1_i128_to_u64 secp256k1_i128_to_u64_spec.\nProof.\nstart_function.\nunfold secp256k1_uint128_at.\nrepeat progressC.\nQed.\n\nLemma body_secp256k1_i128_to_i64: semax_body Vprog Gprog f_secp256k1_i128_to_i64 secp256k1_i128_to_i64_spec.\nProof.\nstart_function.\nforward_verify_check.\n repeat progressC.\n revert H0.\n convert_C_to_math.\n change (Z.shiftr r0 64) with (Z.shiftr r0 (63 + 1)).\n rewrite <- Z.shiftr_shiftr by lia.\n destruct (Z.neg_nonneg_cases r0) as [Hneg|Hpos].\n  rewrite <- (Z_mod_plus_full r0 1 (2^64)), Z.mul_1_l.\n  clear_mod.\n  rewrite !Z.shiftr_div_pow2 by lia.\n  change (r0 + 2 ^ 64) with (r0 + 2 * 2^63).\n  rewrite Z_div_plus_full by lia.\n  replace (r0 / 2^63) with (-1).\n   rewrite Z.eqb_refl; discriminate.\n  cut (-1 <= r0 / 2 ^ 63 < 0);[|apply div_bounds];lia.\n clear_mod.\n replace (Z.shiftr r0 63) with 0.\n  rewrite Z.eqb_refl; discriminate.\n rewrite !Z.shiftr_div_pow2, Z.div_small by lia.\n reflexivity.\nforward_call.\nrepeat progressC.\nQed.\n\nLemma body_secp256k1_i128_from_i64: semax_body Vprog Gprog f_secp256k1_i128_from_i64 secp256k1_i128_from_i64_spec.\nProof.\nstart_function.\nrepeat progressC.\nunfold secp256k1_uint128_at.\nchange 64 with (63 + 1).\nrewrite <- Z.shiftr_shiftr, !Z.shiftr_div_pow2 by lia.\ndestruct (Z.neg_nonneg_cases a).\n+ replace (a/2^63) with (-1);[entailer!|].\n  cut (0 = a / 2^63 + 1);[lia|].\n  rewrite <- Z_div_plus, Z.mul_1_l by lia.\n  rewrite Zdiv_small;[reflexivity|rep_lia].\n+ rewrite (Zdiv_small a);[entailer!|rep_lia].\nQed.\n\nLemma body_secp256k1_i128_eq_var: semax_body Vprog Gprog f_secp256k1_i128_eq_var secp256k1_i128_eq_var_spec.\nProof.\nstart_function.\ndo 2 forward.\nassert (Hrs: r0 mod 2 ^ 128 =? s0 mod 2 ^ 128 =\n             (((Z.shiftr r0 64) mod 2 ^ 64 =? (Z.shiftr s0 64) mod 2 ^ 64) &&\n                (r0 mod 2^64 =? s0 mod 2^64))%bool).\n change (2^128) with (2^64 * 2^64).\n rewrite !Zmod_recombine, <-! Z.shiftl_mul_pow2, <-! Z.shiftr_div_pow2 by lia.\n apply shiftl_mod_eqb_unique; lia.\nforward_if\n  (temp _t'1 (Vint (Int.repr (Z.b2z (r0 mod 2^128 =? s0 mod 2^128))))).\n+ repeat progressC.\n  rewrite Hrs.\n  revert H.\n  convert_C_to_math.\n  intros ->.\n  reflexivity.\n+ repeat progressC.\n  apply Int64.eq_false in H.\n  rewrite Hrs.\n  revert H.\n  convert_C_to_math.\n  intros ->.\n  reflexivity.\n+ repeat progressC.\nQed.\n\n(* Use with\n   forward_call secp256k1_i128_eq_var_spec_alias_sub (r, shr, r0)\n*)\nLemma secp256k1_i128_eq_var_spec_alias_sub :\n  funspec_sub (snd secp256k1_i128_eq_var_spec) (snd secp256k1_i128_eq_var_spec_alias).\nProof.\ndo_funspec_sub.\ndestruct w as [[r shr] r0].\nentailer!.\ndestruct (slice.split_readable_share _ H0) as [sh1 [sh2 [Hsh1 [Hsh2 Hsh]]]].\nExists (((((r, sh1), r0), r), sh2), r0) emp.\nunfold secp256k1_uint128_at.\nrewrite <- (data_at_share_join _ _ _ _ _ _ Hsh), Z.eqb_refl.\nentailer!.\nintros.\nentailer!.\nQed.\n\nLemma body_secp256k1_i128_check_pow2: semax_body Vprog Gprog f_secp256k1_i128_check_pow2 secp256k1_i128_check_pow2_spec.\nProof.\nstart_function.\nunfold_Int128.\nforward_verify_check.\n revert H2.\n convert_C_to_math.\n cbn.\n case Z.ltb_spec;[discriminate|lia].\nforward_verify_check.\n forward_if (temp _t'1 (Vint (Int.repr 1)));\n [forward|forward;replace sign with (-1) by lia|]; try entailer!.\n forward_if;[discriminate|forward;entailer].\nunfold secp256k1_uint128_at.\nforward_if (temp _t'2 (Vint (Int.repr (Z.b2z (r0 =? sign*2^n)))));[| |forward].\n* assert (Hr0: r0 =? sign * 2 ^ n =\n             ((Z.shiftr r0 64 =? sign * 2 ^ (n - 64)) && (r0 mod 2^64 =? 0))%bool).\n   rewrite (Z_div_mod_eq_full r0 (2^64)) at 1.\n   rewrite Z.mul_comm.\n   replace n with (n - 64 + 64) at 1 by ring.\n   rewrite <- (Z.add_0_r (sign * 2 ^ (n - 64 + 64))).\n   change 0 with (0 mod 2^64).\n   rewrite Z.pow_add_r, Z.mul_assoc, <- !Z.shiftl_mul_pow2, <- Z.shiftr_div_pow2 by lia.\n   apply shiftl_mod_eqb_unique; lia.\n  repeat progressC.\n  - rewrite Hr0.\n    replace (_ =? sign * 2 ^ _) with true;[reflexivity|].\n    symmetry; rewrite Z.eqb_eq.\n    revert H3.\n    convert_C_to_math.\n    rewrite Z.eqb_eq.\n    apply (Z_mod_eq_bounded (-2^63) (2^63)); try solve_bounds.\n    pose (Hpow := Z.pow_lt_mono_r 2 (n-64) 63).\n    lia.\n  - rewrite Hr0.\n    case Z.eqb_spec; try reflexivity.\n    intros Hr0n.\n    elim H3.\n    convert_C_to_math.\n    congruence.\n* assert (Hr0: r0 =? sign * 2 ^ n =\n             ((Z.shiftr r0 64 =? Z.shiftr (sign - 1) 1) && (r0 mod 2^64 =? (sign * 2^n) mod 2^64))%bool).\n   rewrite (Z_div_mod_eq_full r0 (2^64)) at 1.\n   rewrite (Z_div_mod_eq_full (sign * 2^n) (2^64)) at 1.\n   rewrite !(Z.mul_comm (2^64)).\n   rewrite <- (Z.shiftl_mul_pow2 _ n), <- !(Z.shiftl_mul_pow2 _ 64), <- !Z.shiftr_div_pow2,\n           Z.shiftr_shiftl_l by lia.\n   replace (n - 64) with (-(64 - n)) by ring.\n   rewrite Z.shiftl_opp_r.\n   replace (Z.shiftr sign (64 - n)) with (Z.shiftr (sign - 1) 1).\n   apply shiftl_mod_eqb_unique; lia.\n   destruct H1 as [-> | ->];\n   [rewrite Z_shiftr_neg1_l;[reflexivity|lia]|].\n   rewrite (shiftr_small 1);[reflexivity|].\n   split; try apply Z.pow_gt_1; lia.\n  repeat progressC.\n  - rewrite Hr0.\n    replace (_ =? Z.shiftr _ _) with true;[reflexivity|].\n    symmetry; rewrite Z.eqb_eq.\n    revert H3.\n    convert_C_to_math.\n    rewrite Z.eqb_eq.\n    apply (Z_mod_eq_bounded (-2^63) (2^63)); solve_bounds.\n  - rewrite Hr0.\n    case Z.eqb_spec; try reflexivity.\n    intros Hr0n.\n    elim H3.\n    convert_C_to_math.\n    congruence.\nQed.\n"
  },
  {
    "path": "Coq/C/secp256k1/verif_modinv64_impl.v",
    "content": "Require Import VST.floyd.proofauto.\nRequire Import jets_secp256k1.\nRequire Import spec_int128.\nRequire Import spec_modinv64.\nRequire Import extraMath.\nRequire Import progressC.\nRequire Import divsteps.divsteps_theory.\nRequire Import divsteps.divsteps724.\nRequire Import modinv.\nRequire divstep.\n\nOpaque Z.shiftl Z.shiftr Z.pow.\n\nDefinition Vprog : varspecs. mk_varspecs prog. Defined.\n\nDefinition t_secp256k1_modinv64_trans2x2 := Tstruct _secp256k1_modinv64_trans2x2 noattr.\n\nDefinition Trans_repr (m: divstep.Trans.M2x2) : reptype t_secp256k1_modinv64_trans2x2 :=\n( Vlong (Int64.repr (divstep.Trans.u m))\n, (Vlong (Int64.repr (divstep.Trans.v m))\n, (Vlong (Int64.repr (divstep.Trans.q m))\n, Vlong (Int64.repr (divstep.Trans.r m))\n))).\n\nDefinition secp256k1_ctz64_var_debruijn_spec : ident * funspec :=\nDECLARE _secp256k1_ctz64_var_debruijn\n  WITH a : Z, sh_debruijn : share, gv : globals\n  PRE [ tulong ]\n    PROP(0 <= a < Int64.modulus; readable_share sh_debruijn)\n    PARAMS(Vlong (Int64.repr a))\n    GLOBALS(gv)\n    SEP(debruijn64_array sh_debruijn gv)\n  POST [ tint ]\n    PROP()\n    RETURN(Vint (Int.repr (Z_ctz a)))\n    SEP(debruijn64_array sh_debruijn gv).\n\n(* secp256k1_ctz64_var is undefined for 0. *)\nDefinition secp256k1_ctz64_var_spec : ident * funspec :=\nDECLARE _secp256k1_ctz64_var\n  WITH a : Z, sh_debruijn : share, gv : globals\n  PRE [ tulong ]\n    PROP(0 < a < Int64.modulus; readable_share sh_debruijn)\n    PARAMS(Vlong (Int64.repr a))\n    GLOBALS(gv)\n    SEP(debruijn64_array sh_debruijn gv)\n  POST [ tint ]\n    PROP()\n    RETURN(Vint (Int.repr (Z_ctz a)))\n    SEP(debruijn64_array sh_debruijn gv).\n\nDefinition secp256k1_modinv64_abs_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_abs\n  WITH a : Z\n  PRE [ tlong ]\n    PROP(Int64.min_signed < a <= Int64.max_signed)\n    PARAMS(Vlong (Int64.repr a))\n    SEP()\n  POST [ tlong ]\n    PROP()\n    RETURN(Vlong (Int64.repr (Z.abs a)))\n    SEP().\n\nDefinition secp256k1_modinv64_mul_62_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_mul_62\n  WITH a : Z, alen : nat, factor : Z,\n       ptrr : val, ptra : val, shr : share, sha : share\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_signed62\n      , tint\n      , tlong\n      ]\n    PROP( (1 <= alen <= 5)%nat\n        ; -2^(62 * Z.of_nat alen + 1) <= a <= 2^(62 * Z.of_nat alen + 1) - 1\n        ; -2^311 <= a * factor <= 2^311 - 1\n        ; Int64.min_signed <= factor <= Int64.max_signed\n        ; writable_share shr\n        ; readable_share sha\n        )\n    PARAMS(ptrr; ptra; Vint (Int.repr (Z.of_nat alen)); Vlong (Int64.repr factor))\n    SEP( data_at_ shr t_secp256k1_modinv64_signed62 ptrr\n       ; data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra\n       )\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP( data_at shr t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 (a*factor))) ptrr\n       ; data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra\n       ).\n\nDefinition secp256k1_modinv64_mul_cmp_62_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_mul_cmp_62\n  WITH a : Z, alen : nat, b : Z, factor : Z,\n       ptra : val, ptrb : val, sha : share, shb : share\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tint\n      , tptr t_secp256k1_modinv64_signed62\n      , tlong\n      ]\n    PROP( (1 <= alen <= 5)%nat\n        ; -2^(62 * Z.of_nat alen + 1) <= a <= 2^(62 * Z.of_nat alen + 1) - 1\n        ; -2^311 <= b <= 2^311 - 1\n        ; -2^311 <= b * factor <= 2^311 - 1\n        ; Int64.min_signed <= factor <= Int64.max_signed\n        ; readable_share sha\n        ; readable_share shb\n        )\n    PARAMS(ptra; Vint (Int.repr (Z.of_nat alen)); ptrb; Vlong (Int64.repr factor))\n    SEP( data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra\n       ; data_at shb t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 b)) ptrb\n       )\n  POST [ tint ]\n    PROP()\n    RETURN(Vint (Int.repr (Z_of_comparison (a ?= b * factor))))\n    SEP( data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra\n       ; data_at shb t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 b)) ptrb\n       ).\n\nDefinition secp256k1_modinv64_det_check_pow2_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_det_check_pow2\n  WITH m : divstep.Trans.M2x2, t : val, sh : share, n : Z, abs_flag : bool\n  PRE [ tptr t_secp256k1_modinv64_trans2x2, tuint, tint ]\n    PROP(divstep.Trans.bounded (2^62) m;\n         0 <= n < 127;\n         readable_share sh)\n    PARAMS(t; Vint (Int.repr n); Vint (Int.repr (Z.b2z abs_flag)))\n    SEP(data_at sh t_secp256k1_modinv64_trans2x2 (Trans_repr m) t)\n  POST [ tint ]\n    PROP()\n    RETURN(Vint (Int.repr (Z.b2z \n      ((if abs_flag then Z.abs else id) (divstep.Trans.det m) =? 2^n))))\n    SEP(data_at sh t_secp256k1_modinv64_trans2x2 (Trans_repr m) t).\n\nDefinition secp256k1_modinv64_normalize_62_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_normalize_62\n  WITH r : Z, sign : int64, m : Z,\n       ptrr : val, ptrm : val, shr : share, shm : share\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tlong\n      , tptr t_secp256k1_modinv64_modinfo\n      ]\n    PROP( 0 <= m <= 2^310 - 2 ^ 248\n        ; -2^310 + 2^248 <= r\n        ; -2 * m < r < m\n        ; writable_share shr\n        ; readable_share shm\n        )\n    PARAMS(ptrr; Vlong sign; ptrm)\n    SEP( data_at shr t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 r)) ptrr\n       ; data_at shm t_secp256k1_modinv64_modinfo (make_modinfo m) ptrm\n       )\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP( data_at shr t_secp256k1_modinv64_signed62\n           (map Vlong (Signed62.reprn 5 ((if Int64.signed sign <? 0 then -r else r) mod m))) ptrr\n       ; data_at shm t_secp256k1_modinv64_modinfo (make_modinfo m) ptrm\n       ).\n\nDefinition secp256k1_modinv64_divsteps_62_var_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_divsteps_62_var\n  WITH st : divstep.State, t : val, sh : share,\n       sh_debruijn : share, gv : globals\n  PRE [ tlong, tulong, tulong, tptr t_secp256k1_modinv64_trans2x2 ]\n    PROP(-683 <= divstep.eta st < 683;\n         writable_share sh;\n         readable_share sh_debruijn)\n    PARAMS(Vlong (Int64.repr (divstep.eta st)); Vlong (Int64.repr (divstep.f st)); Vlong (Int64.repr (divstep.g st)); t)\n    GLOBALS(gv)\n    SEP(data_at_ sh t_secp256k1_modinv64_trans2x2 t;\n        debruijn64_array sh_debruijn gv)\n  POST [ tlong ]\n    PROP()\n    RETURN(Vlong (Int64.repr (divstep.eta (fst (divstep.stepN 62 st)))))\n    SEP(data_at sh t_secp256k1_modinv64_trans2x2 (Trans_repr (divstep.Trans.transN 62 st)) t;\n        debruijn64_array sh_debruijn gv).\n\nDefinition secp256k1_modinv64_update_de_62_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_update_de_62\n  WITH d : Z, e : Z, mtx : divstep.Trans.M2x2, m : Z,\n       ptrd : val, ptre : val, ptrt : val, ptrm : val, shd : share, she : share, sht : share, shm : share\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_trans2x2\n      , tptr t_secp256k1_modinv64_modinfo\n      ]\n    PROP( Z.Odd m\n        ; 0 <= m <= 2^308\n        ; -2 * m < d < m\n        ; -2 * m < e < m\n        ; divstep.Trans.bounded (2 ^ 62) mtx\n        ; writable_share shd\n        ; writable_share she\n        ; readable_share sht\n        ; readable_share shm\n        )\n    PARAMS(ptrd; ptre; ptrt; ptrm)\n    SEP( data_at shd t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 d)) ptrd\n       ; data_at she t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 e)) ptre\n       ; data_at sht t_secp256k1_modinv64_trans2x2 (Trans_repr mtx) ptrt\n       ; data_at shm t_secp256k1_modinv64_modinfo (make_modinfo m) ptrm\n       )\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP( data_at shd t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 (fst (divstep.update_de m d e mtx)))) ptrd\n       ; data_at she t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 (snd (divstep.update_de m d e mtx)))) ptre\n       ; data_at sht t_secp256k1_modinv64_trans2x2 (Trans_repr mtx) ptrt\n       ; data_at shm t_secp256k1_modinv64_modinfo (make_modinfo m) ptrm\n       ).\n\nDefinition secp256k1_modinv64_update_fg_62_var_spec : ident * funspec :=\nDECLARE _secp256k1_modinv64_update_fg_62_var\n  WITH len : nat, st : divstep.State,\n       ptrf : val, ptrg : val, ptrt : val, shf : share, shg : share, sht : share\n  PRE [ tint\n      , tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_trans2x2\n      ]\n    PROP((1 <= len <= 5)%nat\n        ; -2^(62 * Z.of_nat len + 1) <= divstep.f st <= 2^(62 * Z.of_nat len + 1) - 1\n        ; -2^(62 * Z.of_nat len + 1) <= divstep.g st <= 2^(62 * Z.of_nat len + 1) - 1\n        ; writable_share shf\n        ; writable_share shg\n        ; readable_share sht)\n    PARAMS(Vint (Int.repr (Z.of_nat len)); ptrf; ptrg; ptrt)\n    SEP( data_at shf t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn len (divstep.f st))) ptrf\n       ; data_at shg t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn len (divstep.g st))) ptrg\n       ; data_at sht t_secp256k1_modinv64_trans2x2 (Trans_repr (divstep.Trans.transN 62 st)) ptrt\n       )\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP( data_at shf t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn len (divstep.f (fst (divstep.stepN 62 st))))) ptrf\n       ; data_at shg t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn len (divstep.g (fst (divstep.stepN 62 st))))) ptrg\n       ; data_at sht t_secp256k1_modinv64_trans2x2 (Trans_repr (divstep.Trans.transN 62 st)) ptrt\n       ).\n\nDefinition Gprog := ltac:(with_library prog\n  [(*secp256k1_u128_load_spec *)\n   secp256k1_u128_mul_spec\n  ;secp256k1_u128_accum_mul_spec\n  ;secp256k1_u128_accum_u64_spec\n  ;secp256k1_u128_rshift_spec\n  ;secp256k1_u128_to_u64_spec\n  ;secp256k1_u128_hi_u64_spec\n  ;secp256k1_u128_from_u64_spec\n  ;secp256k1_u128_check_bits_spec\n(*   ;secp256k1_i128_load_spec *)\n  ;secp256k1_i128_mul_spec\n  ;secp256k1_i128_accum_mul_spec\n  ;secp256k1_i128_dissip_mul_spec\n  ;secp256k1_i128_det_spec\n  ;secp256k1_i128_rshift_spec\n  ;secp256k1_i128_to_u64_spec\n  ;secp256k1_i128_to_i64_spec\n  ;secp256k1_i128_from_i64_spec\n  ;secp256k1_i128_eq_var_spec\n  ;secp256k1_i128_check_pow2_spec\n\n  ;secp256k1_ctz64_var_debruijn_spec\n  ;secp256k1_ctz64_var_spec\n  ;secp256k1_modinv64_signed62_assign_spec\n  ;secp256k1_modinv64_abs_spec\n  ;secp256k1_modinv64_mul_62_spec\n  ;secp256k1_modinv64_mul_cmp_62_spec\n  ;secp256k1_modinv64_det_check_pow2_spec\n  ;secp256k1_modinv64_normalize_62_spec\n  ;secp256k1_modinv64_divsteps_62_var_spec\n  ;secp256k1_modinv64_update_de_62_spec\n  ;secp256k1_modinv64_update_fg_62_var_spec\n  ;secp256k1_modinv64_var_spec\n  ]).\n\nLemma body_secp256k1_modinv64_signed62_assign: semax_body Vprog Gprog f_secp256k1_modinv64_signed62_assign secp256k1_modinv64_signed62_assign_spec.\nProof.\nstart_function.\nassert (Hlenx := Signed62.reprn_Zlength 5 x).\nfastforward 10.\nentailer!!.\nQed.\n\nLemma body_secp256k1_ctz64_var_debruijn: semax_body Vprog Gprog f_secp256k1_ctz64_var_debruijn secp256k1_ctz64_var_debruijn_spec.\nProof.\nstart_function.\nunfold_C.\nunfold debruijn64_array.\nset (l64 := cons (Vint (Int.repr 0)) _).\nassert (Hctz64: 0 <= Z.shiftr (Z.shiftl 157587932685088877 (Z_ctz a) mod 2 ^ 64) 58 < 64)\n  by (rewrite strict_bounds; solve_bounds).\nassert_PROP (force_val\n   (sem_add_ptr_long tuchar (gv _debruijn)\n      (Vlong\n         (Int64.shru\n            (Int64.mul\n               (Int64.and (Int64.repr a)\n                  (Int64.neg (Int64.repr a)))\n               (Int64.repr 157587932685088877))\n            (Int64.repr 58)))) =\n field_address (tarray tuchar 64)\n   [ArraySubsc (Z.shiftr (Z.shiftl 157587932685088877 (Z_ctz a) mod (2^64)) 58)]\n   (gv _debruijn)).\n  convert_C_to_math.\n  entailer!.\n  rewrite arr_field_address; auto; simpl.\n  destruct (Zle_lt_or_eq _ _ (proj1 H)) as [H0a|<-];[|reflexivity].\n  rewrite Z_x_and_opp_x, Z.mul_comm, Z.mul_1_l by lia.\n  rewrite Z.shiftl_mul_pow2;[reflexivity|apply Z_ctz_non_neg].\nassert (Hctz : 0 <= Z_ctz a < 64).\n  split;[apply Z_ctz_non_neg|].\n  destruct (Zle_lt_or_eq _ _ (proj1 H)) as [Ha0|<-];[|simpl;lia].\n  apply Z_ctz_bound; lia.\nassert (Hl64 :\n  (@Znth val Vundef (Z.shiftr (Z.shiftl 157587932685088877 (Z_ctz a) mod 2 ^ 64) 58) l64) =\n  (Vint (Int.repr (Z_ctz a)))).\n  revert Hctz.\n  generalize (Z_ctz a).\n  intros z [Hz Hz64].\n  do 64 (\n    apply Zle_lt_or_eq in Hz;\n    destruct Hz as [Hz|<-];[|reflexivity];\n    apply Zlt_le_succ in Hz; simpl in Hz).\n  lia.\nforward.\nrewrite Hl64.\nentailer!;rep_lia.\nentailer!.\nrewrite H0.\napply field_address_isptr.\napply arr_field_compatible; auto.\nforward.\nfold l64; rewrite Hl64.\nentailer!.\nQed.\n\nLemma body_secp256k1_ctz64_var: semax_body Vprog Gprog f_secp256k1_ctz64_var secp256k1_ctz64_var_spec.\nProof.\nstart_function.\nforward_verify_check.\n revert H0.\n convert_C_to_math.\n destruct (Z.eqb_spec a 0);[lia|cbn].\n discriminate.\nforward_call.\nforward.\nQed.\n\nLemma body_secp256k1_modinv64_abs: semax_body Vprog Gprog f_secp256k1_modinv64_abs secp256k1_modinv64_abs_spec.\nProof.\nstart_function.\nforward_verify_check.\n revert H0.\n convert_C_to_math.\n elim Z.ltb_spec; try discriminate; lia.\nforward_if; revert H0; convert_C_to_math; intros H0; progressC;\ndo 2 f_equal; lia.\nQed.\n\nLemma body_secp256k1_modinv64_mul_62: semax_body Vprog Gprog f_secp256k1_modinv64_mul_62 secp256k1_modinv64_mul_62_spec.\nProof.\nstart_function.\nprogressC.\nchange (Z.shiftr (-1 mod 2 ^ 64) 2) with (2^62 - 1).\nforward_call (v_c, Tsh, 0).\nassert (Hlen := Signed62.reprn_length alen a).\nassert (HZlen : Zlength (Signed62.reprn alen a) = Z.of_nat alen) by (rewrite Zlength_correct; lia).\n    assert (Hstep : forall i, 0 <= i < Z.of_nat alen -> Signed62.signed (firstn (Z.to_nat i) (Signed62.reprn alen a)) * factor / 2 ^ (62 * i) \n              + Int64.signed (Znth i (Signed62.reprn alen a)) * factor =\n            Signed62.signed (firstn (Z.to_nat (Z.succ i)) (Signed62.reprn alen a)) * factor / 2 ^ (62 * i)).\n      clear - H Hlen HZlen.\n      intros i Hi.\n      rewrite (app_removelast_last (l:=firstn (Z.to_nat (Z.succ i)) _) default) by\n        (rewrite <- length_zero_iff_nil, firstn_length; lia).\n      rewrite Signed62.app_signed.\n      rewrite Z2Nat.inj_succ, <- removelast_firstn, <- nth_last, removelast_firstn_len,\n              Zlength_correct, !firstn_length, !min_l, Nat.sub_1_r, Z.mul_add_distr_r, <- Z.mul_assoc,\n              firstn_firstn, nth_firstn_low by lia.\n      change (Nat.pred (S (Z.to_nat i)))%nat with (Z.to_nat i).\n      rewrite nth_Znth, Z2Nat.id by lia.\n      rewrite (Z.mul_comm i 62), (Z.mul_comm (2^(62*i))), Z_div_plus_full by lia.\n      simpl (Signed62.signed [Znth i (Signed62.reprn alen a)]).\n      rewrite Z.mul_0_r, Z.add_0_r.\n      reflexivity.\nforward_for_simple_bound 4 (EX i:Z,\n  PROP ( )\n  LOCAL ( lvar _d (Tstruct _secp256k1_uint128 noattr) v_d\n        ; lvar _c (Tstruct _secp256k1_uint128 noattr) v_c\n        ; temp _M62 (Vlong (Int64.repr (2 ^ 62 - 1)))\n        ; temp _r ptrr\n        ; temp _a ptra\n        ; temp _alen (Vint (Int.repr (Z.of_nat alen)))\n        ; temp _factor (Vlong (Int64.repr factor))\n        )\n  SEP( data_at_ Tsh (Tstruct _secp256k1_uint128 noattr) v_d\n     ; secp256k1_uint128_at Tsh ((Signed62.signed (firstn (Z.to_nat i) (Signed62.reprn alen a)))*factor / 2^(62*i)) v_c\n     ; data_at shr t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn (Z.to_nat i) (a*factor mod 2^(62*i)))) ptrr\n     ; data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra\n     )\n)%assert.\n1:{\n  rewrite Z.div_1_r, Z.mul_0_l.\n  change (Signed62.pad (Signed62.reprn 5 _)) with (repeat Vundef 5).\n  entailer!!.\n}\n1:{\n(* TODO Make this an external lemma. *)\n  assert (Hfirst : forall i, 0 <= i -> -2 ^ (62 * i + 1) <= Signed62.signed (firstn (Z.to_nat i) (Signed62.reprn alen a)) <= 2 ^ (62 * i + 1) - 1).\n  1:{\n    clear -H0.\n    intros i Hi.\n    destruct (Z.lt_ge_cases i (Z.of_nat alen)).\n    - rewrite Signed62.signed_firstn_reprn, Z2Nat.id, Z.mul_comm, Z.pow_add_r by lia.\n      eapply weaken_bounds;[setoid_rewrite <- strict_bounds;apply Z.mod_pos_bound| |]; try lia.\n    - rewrite firstn_same by (rewrite Signed62.reprn_length; lia).\n      destruct alen;[simpl;lia|].\n      rewrite Signed62.signed_reprn by lia.\n      eapply weaken_bounds;[apply H0|apply -> Z.opp_le_mono|apply Z.sub_le_mono_r];apply Z.pow_le_mono_r; lia.\n  }\n  forward_if (\n  PROP ( )\n  LOCAL ( temp _i (Vint (Int.repr i))\n        ; lvar _d (Tstruct _secp256k1_uint128 noattr) v_d\n        ; lvar _c (Tstruct _secp256k1_uint128 noattr) v_c\n        ; temp _M62 (Vlong (Int64.repr (2 ^ 62 - 1)))\n        ; temp _r ptrr\n        ; temp _a ptra\n        ; temp _alen (Vint (Int.repr (Z.of_nat alen)))\n        ; temp _factor (Vlong (Int64.repr factor))\n        )\n  SEP( data_at_ Tsh (Tstruct _secp256k1_uint128 noattr) v_d\n     ; secp256k1_uint128_at Tsh ((Signed62.signed (firstn (Z.to_nat (Z.succ i)) (Signed62.reprn alen a)))*factor / 2^(62*i)) v_c\n     ; data_at shr t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn (Z.to_nat i) (a*factor mod 2^(62*i)))) ptrr\n     ; data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra\n     )\n)%assert.\n  2:{\n    forward.\n    rewrite !firstn_same by lia.\n    entailer!.\n  }\n  1:{\n    forward; rewrite Signed62.pad_nth by lia;[entailer!|].\n    rewrite <- (Int64.repr_signed (Znth i (Signed62.reprn alen a))).\n    forward_call;rewrite Hstep by lia;[|entailer!].\n    split;\n      unfold Int128_min_signed, Int128_max_signed;\n      (setoid_rewrite <- strict_bounds';apply div_bounds;rewrite strict_bounds;[lia|];\n      eapply weaken_bounds;[\n        apply smul_bounds;[apply Hfirst;lia|apply H2]\n      | |]); rewrite ?Z.mul_succ_r, !Z.pow_add_r; lia.\n  }\n  set (c:= _ / _).\n  forward_call.\n  forward.\n  forward_call.\n  1:{\n    unfold c, Int128_min_signed, Int128_max_signed.\n    setoid_rewrite <- strict_bounds';apply div_bounds;rewrite strict_bounds;[lia|].\n    eapply weaken_bounds;[\n      apply smul_bounds;[apply Hfirst;lia|apply H2]\n    | |]; rewrite ?Z.mul_succ_r, !Z.pow_add_r; lia.\n  }\n  entailer!.\n  unfold c at 1.\n  rewrite <- Z.add_1_r, Z.shiftr_div_pow2, Zdiv_Zdiv, <- Z.pow_add_r by lia.\n  replace (62 * (i + 1)) with (62 * i + 62) by ring.\n  entailer!.\n  erewrite <- (Z2Nat.id i), <- Signed62.reprn_length, <- Zlength_correct at 1 by lia.\n  rewrite Signed62.pad_upd_Znth_end by (rewrite Signed62.reprn_length; lia).\n  replace (2^62 - 1) with (Z.ones 62) by apply Z.ones_equiv.\n  rewrite Z.land_ones, Z2Nat.inj_add, Nat.add_1_r, Signed62.reprn_succ, Z2Nat.id, Z.pow_add_r by lia.\n  rewrite <- Zmod_div_mod, Z.shiftr_div_pow2 by (try lia; auto with *).\n  destruct (Z.lt_ge_cases (Z.succ i) (Z.of_nat alen)); unfold c.\n  * rewrite Signed62.signed_firstn_reprn, Z2Nat.id, Z.mul_succ_r, Z.pow_add_r,\n            <- Zaux.Zdiv_mod_mult, Zmult_mod_idemp_l by lia.\n    entailer!.\n  * rewrite Zfirstn_same, Signed62.signed_reprn, <- Zaux.Zdiv_mod_mult by lia.\n    entailer!.\n}\nforward_if (\nPROP ( )\nLOCAL ( lvar _d (Tstruct _secp256k1_uint128 noattr) v_d\n      ; lvar _c (Tstruct _secp256k1_uint128 noattr) v_c\n      ; temp _M62 (Vlong (Int64.repr (2 ^ 62 - 1)))\n      ; temp _r ptrr\n      ; temp _a ptra\n      ; temp _alen (Vint (Int.repr (Z.of_nat alen)))\n      ; temp _factor (Vlong (Int64.repr factor))\n      )\nSEP( data_at_ Tsh (Tstruct _secp256k1_uint128 noattr) v_d\n   ; secp256k1_uint128_at Tsh (a*factor / 2^(62*4)) v_c\n   ; data_at shr t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn (Z.to_nat 4) (a*factor mod 2^(62*4)))) ptrr\n   ; data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra\n   )\n)%assert.\n2:{\n  forward.\n  entailer!.\n  rewrite Zfirstn_same, Signed62.signed_reprn by lia.\n  entailer!.\n}\n1:{\n  forward; rewrite Signed62.pad_nth by lia;[entailer|].\n  rewrite <- (Int64.repr_signed (Znth 4 (Signed62.reprn alen a))).\n  forward_call;rewrite Hstep by lia;\n  [|rewrite Zfirstn_same, Signed62.signed_reprn by lia; entailer!].\n  rewrite Signed62.signed_firstn_reprn, Zfirstn_same, Signed62.signed_reprn by lia.\n  simpl (62 * _).\n  unfold Int128_min_signed, Int128_max_signed.\n  split;setoid_rewrite <- strict_bounds';apply div_bounds;rewrite strict_bounds; try lia.\n  eapply weaken_bounds;[\n        apply usmul_bounds_tight;[setoid_rewrite <- strict_bounds; apply Z.mod_pos_bound|apply H2]\n      | |]; lia.\n}\nforward_call;\n[setoid_rewrite <- strict_bounds';apply div_bounds;rewrite strict_bounds; lia|].\nrewrite <- Z.shiftr_div_pow2 by lia.\nforward_call (v_d, Tsh, (Z.shiftr (a * factor) (62 * 4)));[solve_bounds|].\nforward_verify_check.\n1:{\n  simpl (62 * 4).\n  set (n := Z.shiftr (a * factor) 248).\n  forward_call.\n  rewrite Z.eqb_refl.\n  unfold n; clear n.\n  forward_if;[discriminate|forward].\n  entailer!.\n}\nforward_call;[solve_bounds|].\nforward.\nunfold secp256k1_uint128_at.\nreplace (upd_Znth 4 _ _) with (map Vlong (Signed62.reprn 5 (a * factor))).\n* do 2 sep_apply (data_at_data_at_ Tsh t_secp256k1_uint128 (Vlong (Int64.repr (Z.shiftr (a * factor) (62 * 4))),\n        Vlong (Int64.repr (Z.shiftr (Z.shiftr (a * factor) (62 * 4)) 64)))).\n  entailer!!.\n* unfold Signed62.pad, upd_Znth, sublist.\n  simpl.\n  rewrite !Z.shiftr_shiftr, !Z.shiftr_div_pow2,\n          <- !Zaux.Zdiv_mod_mult, <- !Z.pow_add_r by lia.\n  repeat (rewrite <- Zmod_div_mod; try lia; \n  [|match goal with\n   |- (2 ^ ?a | 2 ^ ?b) => exists (2^(b - a)); reflexivity\n  end]).\n  reflexivity.\nQed.\n\nLemma body_secp256k1_modinv64_mul_cmp_62: semax_body Vprog Gprog f_secp256k1_modinv64_mul_cmp_62 secp256k1_modinv64_mul_cmp_62_spec.\nProof.\nstart_function.\nassert (H311: 2 ^ (62 * Z.of_nat alen + 1) <= 2^311) by\n  (apply Z.pow_le_mono_r; lia).\nforward_call;[lia|].\nforward_call (b, 5%nat, factor, v_bm, ptrb, Tsh, shb).\nchange (a * Int.signed (Int.repr 1)) with (a * 1).\nset (bf := b * factor) in *.\nrewrite Z.mul_1_r.\nmatch goal with\n| |- semax _ ?E _ _ => forward_for_simple_bound 4 (EX _:Z, E)\nend.\n1: entailer!.\n1: {\n  assert (H5a := Signed62.reprn_Zlength 5 a).\n  assert (H5b := Signed62.reprn_Zlength 5 bf).\n  forward_verify_check;[|forward_verify_check];(\n    forward;\n    rewrite Signed62.reprn_Znth by lia;\n    match goal with\n    | |- semax _ ?E _ _ => forward_if E\n    end;try (try forward;entailer!);elimtype False;\n    revert H5; convert_C_to_math;\n    rewrite shiftr_small, Z.eqb_refl;[discriminate|];\n    apply Z.mod_pos_bound; lia;\n    forward;entailer!).\n}\nforward_for (fun i:Z =>\n   PROP ( -1 <= i < 5 /\\ (i = 4 \\/ (i < 4 /\\ Z.shiftr a (62*(i + 1)) = Z.shiftr bf (62*(i + 1)))) )\n   LOCAL (temp _i (Vint (Int.repr i));\n   lvar _bm (Tstruct _secp256k1_modinv64_signed62 noattr) v_bm;\n   lvar _am (Tstruct _secp256k1_modinv64_signed62 noattr) v_am; \n   temp _a ptra; temp _alen (Vint (Int.repr (Z.of_nat alen))); \n   temp _b ptrb; temp _factor (Vlong (Int64.repr factor)))\n   SEP (data_at shb t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn 5 b)) ptrb;\n   data_at sha t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn alen a)) ptra;\n   data_at Tsh t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 bf)) v_bm;\n   data_at Tsh t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 a)) v_am)).\n1: forward; Exists 4; entailer!.\n1: entailer!.\n2: {\n  forward.\n  replace x with (-1) in * by lia.\n  rewrite !Z.shiftr_0_r in H4.\n  destruct H4 as [_ [|[_ ->]]];[lia|].\n  rewrite Z.compare_refl.\n  entailer!.\n}\nassert (Ha := Signed62.reprn_Zlength 5 a).\nassert (Hbf := Signed62.reprn_Zlength 5 bf).\ndo 2 forward.\ndestruct H4 as [Hx [H4|[Hx4 H4]]];forward_if;repeat forward;try forward_if;repeat forward;try entailer!!.\n* unfold Znth in H5; simpl in H5.\n  revert H5;convert_C_to_math;intros H5.\n  rewrite Z.ltb_lt, !Z.shiftr_shiftr in H5 by lia.\n  simpl in H5.\n  rewrite !Z.shiftr_div_pow2 in H5 by lia.\n  rewrite (proj2 (Z.compare_lt_iff _ _));[reflexivity|].\n  apply Z.nle_gt; intro; revert H5; apply Z.le_ngt.\n  apply Z.div_le_mono; lia.\n* unfold Znth in H6; simpl in H6.\n  revert H6;convert_C_to_math;intros H6.\n  rewrite Z.ltb_lt, !Z.shiftr_shiftr in H6 by lia.\n  simpl in H6.\n  rewrite !Z.shiftr_div_pow2 in H6 by lia.\n  rewrite (proj2 (Z.compare_gt_iff _ _));[reflexivity|].\n  apply Z.nle_gt; intro; revert H6; apply Z.le_ngt.\n  apply Z.div_le_mono; lia.\n* Exists 3.\n  entailer!.\n  right.\n  unfold Znth in H5,H6; simpl in H5,H6.\n  revert H5 H6;convert_C_to_math.\n  rewrite !Z.ltb_ge, !Z.shiftr_shiftr by lia.\n  simpl; unfold bf.\n  lia.\n* rewrite (proj2 (Z.compare_lt_iff _ _));[reflexivity|].\n  rewrite (Z_div_mod_eq_full a (2^(62 * (x + 1)))).\n  rewrite (Z_div_mod_eq_full bf (2^(62 * (x + 1)))).\n  change (cons (Int64.repr (a mod 2 ^ 62)) _) with (Signed62.reprn 5 a) in H5.\n  change (cons _ _) with (Signed62.reprn 5 bf) in H5.\n  rewrite !Signed62.reprn_Znth in H5 by lia.\n  revert H5;convert_C_to_math;intros H5.\n  rewrite Z.ltb_lt, !Z.shiftr_div_pow2, <- !Zaux.Zdiv_mod_mult, <- Z.pow_add_r in H5 by lia.\n  replace (62 * x + 62) with (62 * (x + 1)) in H5 by lia.\n  rewrite !Z.shiftr_div_pow2 in H4 by lia.\n  rewrite H4.\n  apply Z.add_le_lt_mono; [lia|].\n  apply Z.nle_gt; intro; revert H5; apply Z.le_ngt.\n  apply Z.div_le_mono; lia.\n* rewrite (proj2 (Z.compare_gt_iff _ _));[reflexivity|].\n  rewrite (Z_div_mod_eq_full a (2^(62 * (x + 1)))).\n  rewrite (Z_div_mod_eq_full bf (2^(62 * (x + 1)))).\n  change (cons (Int64.repr (a mod 2 ^ 62)) _) with (Signed62.reprn 5 a) in H6.\n  change (cons _ _) with (Signed62.reprn 5 bf) in H6.\n  rewrite !Signed62.reprn_Znth in H6 by lia.\n  revert H6;convert_C_to_math;intros H6.\n  rewrite Z.ltb_lt, !Z.shiftr_div_pow2, <- !Zaux.Zdiv_mod_mult, <- Z.pow_add_r in H6 by lia.\n  replace (62 * x + 62) with (62 * (x + 1)) in H6 by lia.\n  rewrite !Z.shiftr_div_pow2 in H4 by lia.\n  rewrite H4.\n  apply Z.add_le_lt_mono; [lia|].\n  apply Z.nle_gt; intro; revert H6; apply Z.le_ngt.\n  apply Z.div_le_mono; lia.\n* Exists (x-1).\n  entailer!.\n  right.\n  split;[lia|].\n  replace (x - 1 + 1) with x by ring.\n  rewrite (Z_div_mod_eq_full (Z.shiftr a _) (2^62)).\n  rewrite (Z_div_mod_eq_full (Z.shiftr bf _) (2^62)).\n  rewrite <- !Z.shiftr_div_pow2, !Z.shiftr_shiftr by lia.\n  replace (62 * x + 62) with (62 * (x + 1)) by lia.\n  change (cons (Int64.repr (a mod 2 ^ 62)) _) with (Signed62.reprn 5 a) in *.\n  change (cons _ _) with (Signed62.reprn 5 bf) in *.\n  rewrite !Signed62.reprn_Znth in H5, H6 by lia.\n  revert H5 H6;convert_C_to_math.\n  rewrite !Z.ltb_ge;lia.\nQed.\n\nLemma body_secp256k1_modinv64_det_check_pow2: semax_body Vprog Gprog f_secp256k1_modinv64_det_check_pow2 secp256k1_modinv64_det_check_pow2_spec.\nProof.\nstart_function.\ndestruct m as [u v q r].\nunfold divstep.Trans.bounded in H.\nsimpl in H.\ndestruct H as [[Huv _] [Hqr _]].\nunfold Trans_repr.\nsimpl (data_at _ _ _ _).\nassert (Hur : -((2 ^ 62 + 1) * (2 ^ 62 + 1))  <= u * r <= (2 ^ 62 + 1) * (2 ^ 62 + 1)) by\n  (apply smul_bounds; lia).\nassert (Hvq : -((2 ^ 62 + 1) * (2 ^ 62 + 1))  <= v * q <= (2 ^ 62 + 1) * (2 ^ 62 + 1)) by\n  (apply smul_bounds; lia).\nfastforward 4.\nforward_call (v_a, Tsh, u, v, q, r).\nforward_call;[unfold Int128_min_signed, Int128_max_signed; lia|].\nforward_if.\n1: {\n  unfold secp256k1_uint128_at.\n  sep_apply (data_at_data_at_ Tsh t_secp256k1_uint128\n          (Vlong (Int64.repr (u * r - v * q)),\n           Vlong (Int64.repr (Z.shiftr (u * r - v * q) 64))) v_a).\n  forward; entailer!!.\n  revert H.\n  elim Z.eqb_spec; cbn; try lia.\n  intros -> _.\n  rewrite Z.mul_1_l.\n  elim Z.eqb_spec; try reflexivity.\n  intros e; elim e.\n  destruct abs_flag; try reflexivity.\n  auto with *.\n}\nforward_if (temp _t'2 (Vint (Int.repr (Z.b2z (abs_flag && (u * r - v * q =? -2^n)))))).\n1: {\n  forward_call;[unfold Int128_min_signed, Int128_max_signed; lia|].\n  forward; entailer!.\n}\n1: {\n  forward; entailer!.\n}\nforward_if.\n1: {\n  unfold secp256k1_uint128_at.\n  sep_apply (data_at_data_at_ Tsh t_secp256k1_uint128\n          (Vlong (Int64.repr (u * r - v * q)),\n           Vlong (Int64.repr (Z.shiftr (u * r - v * q) 64))) v_a).\n  forward; entailer!!.\n  destruct abs_flag; try discriminate. \n  revert H1.\n  elim Z.eqb_spec; unfold Int.zero; cbn; try congruence.\n  intros -> _.\n  rewrite Z.abs_opp.\n  elim Z.eqb_spec; try reflexivity.\n  intros e; elim e.\n  auto with *.\n}\nunfold secp256k1_uint128_at.\nsep_apply (data_at_data_at_ Tsh t_secp256k1_uint128\n        (Vlong (Int64.repr (u * r - v * q)),\n         Vlong (Int64.repr (Z.shiftr (u * r - v * q) 64))) v_a).\nforward; entailer!!.\ncbn.\nelim Z.eqb_spec; try reflexivity.\ndestruct abs_flag;\n[replace (2^n) with (Z.abs (2^n)) by auto with *; intros Habs; destruct (Z.abs_eq_cases _ _ Habs)|cbn; intros H5];\ntry (rewrite H5, Z.mul_1_l, Z.eqb_refl in H; discriminate).\nrewrite H5, Z.eqb_refl in H1; discriminate.\nQed.\n\nLemma body_secp256k1_modinv64_normalize_62: semax_body Vprog Gprog f_secp256k1_modinv64_normalize_62 secp256k1_modinv64_normalize_62_spec.\nProof.\nstart_function.\nassert (H5r := Signed62.reprn_Zlength 5 r).\nassert (H5m := Signed62.reprn_Zlength 5 m).\nassert (Hrbound : -(2 ^ 62 - 1) <= Z.shiftr r 248 <= 2 ^ 62 - 1) by solve_bounds.\nassert (Hmbound : 0 <= Z.shiftr m 248 <= 2 ^ 62 - 1) by solve_bounds.\nset (rl := Signed62.reprn 5 r) in *.\nset (ml := Signed62.reprn 5 m) in *.\nprogressC.\nchange (Z.shiftr (-1 mod 2 ^ 64) 2) with (2^62 - 1). \nfastforward 5.\nmatch goal with\n |- semax _ ?E _ _ => forward_for_simple_bound 5 (EX i:Z, E)\nend;[entailer| |].\n1:{\n  forward_verify_check;[|forward_verify_check].\n  1:{\n   forward; forward_if;[entailer!; cbn; lia| | forward;entailer].\n   revert H3.\n   change (Znth i _) with (Znth i (Signed62.reprn 5 r)).\n   destruct (Z.lt_ge_cases i 4) as [Hi|Hi].\n   * rewrite Signed62.reprn_Znth by lia.\n     convert_C_to_math.\n     elim Z.ltb_spec0; try discriminate.\n     intros H3.\n     assert (Hr:=Z.mod_pos_bound (Z.shiftr r (62 * i)) (2 ^ 62)).\n     lia.\n   * replace i with 4 by lia.\n     change 4 with (Zlength (Signed62.reprn 5 r) - 1).\n     rewrite Znth_last, Signed62.reprn_last by lia.\n     convert_C_to_math.\n     elim Z.ltb_spec0; try discriminate.\n     cbn;lia.\n  }\n  1:{\n   forward.\n   match goal with\n    |- semax _ ?E _ _ => forward_if E\n   end;[|forward;entailer|forward;entailer].\n   revert H3.\n   change (Znth i _) with (Znth i (Signed62.reprn 5 r)).\n   destruct (Z.lt_ge_cases i 4) as [Hi|Hi].\n   * rewrite Signed62.reprn_Znth by lia.\n     convert_C_to_math.\n     elim Z.ltb_spec0; try discriminate.\n     intros H3.\n     assert (Hr:=Z.mod_pos_bound (Z.shiftr r (62 * i)) (2 ^ 62)).\n     lia.\n   * replace i with 4 by lia.\n     change 4 with (Zlength (Signed62.reprn 5 r) - 1).\n     rewrite Znth_last, Signed62.reprn_last by lia.\n     convert_C_to_math.\n     elim Z.ltb_spec0; try discriminate.\n     cbn;lia.\n  }\n}\nunfold make_modinfo.\nassert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm) by entailer.\nforward_verify_check.\n1:{\n  forward_call (r, 5%nat, m, -2, ptrr, (field_address t_secp256k1_modinv64_modinfo (DOT _modulus)\n        ptrm), shr, shm);\n  [rewrite field_address_offset by assumption;entailer!\n  |unfold_data_at (data_at _ _ _ ptrm);entailer!|].\n  forward_if.\n  1:{\n    rewrite Zaux.Zcompare_Gt in H3; try discriminate.\n    lia.\n  }\n  forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ ptrm);entailer!.\n}\nforward_verify_check.\n1:{\n  forward_call (r, 5%nat, m, 1, ptrr, (field_address t_secp256k1_modinv64_modinfo (DOT _modulus)\n        ptrm), shr, shm);\n  [rewrite field_address_offset by assumption;entailer!\n  |unfold_data_at (data_at _ _ _ ptrm);entailer!|].\n  forward_if.\n  1:{\n    rewrite Zaux.Zcompare_Lt in H3; try discriminate.\n    lia.\n  }\n  forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ ptrm);entailer!.\n}\nprogressC.\nchange 4 with (Zlength rl - 1);rewrite Znth_last.\nunfold rl.\nrewrite Signed62.reprn_last by lia.\nrepeat (rewrite Signed62.reprn_Znth by lia).\nconvert_C_to_math.\nrewrite Z.shiftr_shiftr by lia.\nsimpl (62 * (Z.of_nat 5 - 1) + 63).\nassert (-1 <= Z.shiftr r 311 <= 0) by solve_bounds.\nreplace (Z.shiftr r 311) with (if r <? 0 then -1 else 0) by\n (elim Z.ltb_spec;\n  [rewrite <- (Z.shiftr_neg r 311); intros Hr; replace (Z.shiftr r 311) with (-1) by lia; reflexivity\n  |rewrite <- (Z.shiftr_nonneg r 311); intros Hr; replace (Z.shiftr r 311) with 0 by lia; reflexivity]).\nassert (Hand : forall (b:bool) x, Z.land x (if b then -1 else 0) =\n                                  if b then x else 0) by\n  (intros [|] x;rewrite ?Z.land_m1_r, ?Z.land_0_r; reflexivity).\nunfold ml in H5m.\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC.\nchange 4 with (Zlength ml - 1);rewrite Znth_last.\nrewrite Signed62.reprn_last by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nrewrite !Hand.\nprogressC.\nassert (-1 <= Z.shiftr (Int64.signed sign) 63 <= 0) by solve_bounds.\nreplace (Z.shiftr (Int64.signed sign) 63) with (if Int64.signed sign <? 0 then -1 else 0) by\n(elim Z.ltb_spec;\n [rewrite <- (Z.shiftr_neg (Int64.signed sign) 63); intros Hsign; replace (Z.shiftr (Int64.signed sign) 63) with (-1) by lia; reflexivity\n |rewrite <- (Z.shiftr_nonneg (Int64.signed sign) 63); intros Hsign; replace (Z.shiftr (Int64.signed sign) 63) with 0 by lia; reflexivity]).\nassert (Hxor : forall (b:bool) x, Z.lxor x (if b then -1 else 0) = if b then (-x-1) else x) by\n (intros [|] x; rewrite ?Z_neg_lnot, ?Z.lxor_m1_r, ?Z.lxor_0_r; ring).\nprogressC;rewrite Hxor;\n[destruct (Int64.signed sign <? 0);rewrite ?Z.sub_0_r;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Hxor;\n[destruct (Int64.signed sign <? 0);rewrite ?Z.sub_0_r;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Hxor;\n[destruct (Int64.signed sign <? 0);rewrite ?Z.sub_0_r;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Hxor;\n[destruct (Int64.signed sign <? 0);rewrite ?Z.sub_0_r;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Hxor;\n[destruct (Int64.signed sign <? 0);rewrite ?Z.sub_0_r;convert_C_to_math;solve_bounds|].\nassert (Hsub : forall (b:bool) x y, (if b then x - 1 else y) - (if b then -1 else 0) =\n                                    if b then x else y) by\n (intros [|] x y; ring).\nrewrite !Hsub.\nrewrite (Z.sub_1_r (2^_)), <- Z.ones_equiv.\nset (s4 := if Int64.signed sign <? 0 then _ else _).\nset (s3 := if Int64.signed sign <? 0 then _ else _).\nset (s2 := if Int64.signed sign <? 0 then _ else _).\nset (s1 := if Int64.signed sign <? 0 then _ else _).\nset (s0 := if Int64.signed sign <? 0 then _ else _).\nassert (Hs0 : -2^63 + 2 <= s0 <= 2^63 - 2) by solve_bounds.\nassert (Hs1 : -2^63 + 2 <= s1 <= 2^63 - 2) by solve_bounds.\nassert (Hs2 : -2^63 + 2 <= s2 <= 2^63 - 2) by solve_bounds.\nassert (Hs3 : -2^63 + 2 <= s3 <= 2^63 - 2) by solve_bounds.\nassert (Hs4 : -2^63 + 2 <= s4 <= 2^63 - 2) by solve_bounds.\ndo 8 progressC.\nrewrite !Z.land_ones by lia.\npose (s' := s0 + s1 * 2 ^ 62 + s2 * 2 ^ 62 * 2 ^ 62 + s3 * 2 ^ 62 * 2 ^ 62 * 2 ^ 62\n      + s4 * 2 ^ 62 * 2 ^ 62 * 2 ^ 62 * 2 ^ 62).\nreplace (s4 + _) with (Z.shiftr s' (62 * 4)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus, !Zdiv_Zdiv by lia.\nreflexivity.\n}\nreplace ((s3 + _) mod 2^62) with ((Z.shiftr s' (62 * 3)) mod (2^62)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus, !Zdiv_Zdiv by lia.\nunfold s'.\nrewrite <- !Z.mul_assoc;\nchange (2 ^ 62 * (2 ^ 62 * 2 ^ 62)) with (2 ^ (62 * 3));\nrewrite !Z.mul_assoc.\nrewrite !Z_div_plus_full, !Z_mod_plus_full by lia.\nreflexivity.\n}\nreplace ((s2 + _) mod 2^62) with ((Z.shiftr s' (62 * 2)) mod (2^62)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus, !Zdiv_Zdiv by lia.\nunfold s'.\nrewrite <- !Z.mul_assoc;\nchange (2 ^ 62 * 2 ^ 62) with (2 ^ (62 * 2));\nrewrite !Z.mul_assoc.\nrewrite !Z_div_plus_full, !Z_mod_plus_full by lia.\nreflexivity.\n}\nreplace ((s1 + _) mod 2^62) with ((Z.shiftr s' (62 * 1)) mod (2^62)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus by lia.\nunfold s'.\nrewrite Z.mul_1_r.\nrewrite !Z_div_plus_full, !Z_mod_plus_full by lia.\nreflexivity.\n}\nreplace (s0 mod 2^62) with ((Z.shiftr s' (62 * 0)) mod (2^62)).\n2:{\nchange (Z.shiftr s' (62 * 0)) with s'.\nunfold s'.\nrewrite !Z_mod_plus_full by lia.\nreflexivity.\n}\npose (s := if Int64.signed sign <? 0 then -(r + if r <? 0 then m else 0) else r + if r <? 0 then m else 0).\nreplace s' with s by\n(unfold s, s';\ndestruct (Int64.signed sign <? 0) in *; destruct (r <? 0) in *;\nchange r with (Z.shiftr r 0);\nchange m with (Z.shiftr m 0);\ndo 4 rewrite (Z_div_mod_eq (Z.shiftr r _) (2^62)), <- Z.shiftr_div_pow2, Z.shiftr_shiftr by lia;\ntry do 4 rewrite (Z_div_mod_eq (Z.shiftr m _) (2^62)), <- Z.shiftr_div_pow2, Z.shiftr_shiftr by lia;\nunfold s0, s1, s2, s3, s4; cbn; ring\n).\nclear s' Hs0 Hs1 Hs2 Hs3 Hs4 s0 s1 s2 s3 s4.\nassert (Hsbound : -(2 ^ 62 - 1) <= Z.shiftr s (62 * 4) <= 2 ^ 62 - 1) by\n  (unfold s; elim (Z.ltb_spec r); intro; solve_bounds).\nprogressC.\nrewrite Z.shiftr_shiftr by lia.\nsimpl (62 * _ + 63).\nassert (-1 <= Z.shiftr s 311 <= 0) by (unfold s; elim (Z.ltb_spec r); intro; solve_bounds).\nreplace (Z.shiftr s 311) with (if s <? 0 then -1 else 0) by\n (elim Z.ltb_spec;\n  [rewrite <- (Z.shiftr_neg s 311); intros Hr; replace (Z.shiftr s 311) with (-1) by lia; reflexivity\n  |rewrite <- (Z.shiftr_nonneg s 311); intros Hr; replace (Z.shiftr s 311) with 0 by lia; reflexivity]).\ncbn in Hsbound.\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC;rewrite Signed62.reprn_Znth by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nprogressC.\nchange 4 with (Zlength ml - 1);rewrite Znth_last.\nunfold ml.\nrewrite Signed62.reprn_last by lia.\nprogressC;[rewrite Hand;convert_C_to_math;solve_bounds|].\nrewrite !Hand.\nset (t4 := Z.shiftr s _ + _).\nset (t3 := _ mod _ + _).\nset (t2 := _ mod _ + _).\nset (t1 := _ mod _ + _).\nset (t0 := _ mod _ + _).\nassert (Ht0 : -2^63 + 2 <= t0 <= 2^63 - 2) by solve_bounds.\nassert (Ht1 : -2^63 + 2 <= t1 <= 2^63 - 2) by solve_bounds.\nassert (Ht2 : -2^63 + 2 <= t2 <= 2^63 - 2) by solve_bounds.\nassert (Ht3 : -2^63 + 2 <= t3 <= 2^63 - 2) by solve_bounds.\ncbn in t4.\nassert (Ht4 : -2^63 + 2 <= t4 <= 2^63 - 2) by solve_bounds.\ndo 8 progressC.\nrewrite !Z.land_ones by lia.\npose (t' := t0 + t1 * 2 ^ 62 + t2 * 2 ^ 62 * 2 ^ 62 + t3 * 2 ^ 62 * 2 ^ 62 * 2 ^ 62\n      + t4 * 2 ^ 62 * 2 ^ 62 * 2 ^ 62 * 2 ^ 62).\nreplace (t4 + _) with (Z.shiftr t' (62 * 4)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus, !Zdiv_Zdiv by lia.\nreflexivity.\n}\nreplace ((t3 + _) mod 2^62) with ((Z.shiftr t' (62 * 3)) mod (2^62)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus, !Zdiv_Zdiv by lia.\nunfold t'.\nrewrite <- !Z.mul_assoc;\nchange (2 ^ 62 * (2 ^ 62 * 2 ^ 62)) with (2 ^ (62 * 3));\nrewrite !Z.mul_assoc.\nrewrite !Z_div_plus_full, !Z_mod_plus_full by lia.\nreflexivity.\n}\nreplace ((t2 + _) mod 2^62) with ((Z.shiftr t' (62 * 2)) mod (2^62)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus, !Zdiv_Zdiv by lia.\nunfold t'.\nrewrite <- !Z.mul_assoc;\nchange (2 ^ 62 * 2 ^ 62) with (2 ^ (62 * 2));\nrewrite !Z.mul_assoc.\nrewrite !Z_div_plus_full, !Z_mod_plus_full by lia.\nreflexivity.\n}\nreplace ((t1 + _) mod 2^62) with ((Z.shiftr t' (62 * 1)) mod (2^62)).\n2:{\nrewrite !Z.shiftr_div_pow2, !(Z.add_comm _ (_ / _)), <- !Z_div_plus by lia.\nunfold t'.\nrewrite Z.mul_1_r.\nrewrite !Z_div_plus_full, !Z_mod_plus_full by lia.\nreflexivity.\n}\nreplace (t0 mod 2^62) with ((Z.shiftr t' (62 * 0)) mod (2^62)).\n2:{\nchange (Z.shiftr t' (62 * 0)) with t'.\nunfold t'.\nrewrite !Z_mod_plus_full by lia.\nreflexivity.\n}\npose (t := (if Int64.signed sign <? 0 then -r else r) mod m).\nassert (Hrm : -m < r + (if r <? 0 then m else 0) < m) by \n (elim Z.ltb_spec; lia).\nassert (Hsm : -m < s < m) by\n (unfold s; elim Z.ltb_spec; lia).\nreplace t' with t.\n2:{\n transitivity (if s <? 0 then s + m else s);\n [|unfold t';\n  destruct (s <? 0) in *;\n  change s with (Z.shiftr s 0);\n  change m with (Z.shiftr m 0);\n  do 4 rewrite (Z_div_mod_eq (Z.shiftr s _) (2^62)), <- Z.shiftr_div_pow2, Z.shiftr_shiftr by lia;\n  try do 4 rewrite (Z_div_mod_eq (Z.shiftr m _) (2^62)), <- Z.shiftr_div_pow2, Z.shiftr_shiftr by lia;\n  unfold t0, t1, t2, t3, t4; cbn;ring\n ].\n unfold t.\n apply Zdivide_mod_minus.\n * elim Z.ltb_spec; lia.\n * unfold s; destruct (_ <? 0); destruct (_ <? 0); destruct (_ <? 0);\n   match goal with\n   | |- (m | ?x) => ring_simplify x\n   end;\n   solve [auto with *].\n}\nclear t' Ht0 Ht1 Ht2 Ht3 Ht4 t0 t1 t2 t3 t4.\ndo 5 progressC.\n\ndo 5 (forward_verify_check;[\n revert H6; convert_C_to_math;\n elim Z.eqb_spec; try discriminate;\n intros H6 _; apply H6;\n apply shiftr_small; rewrite strict_bounds;\n solve_bounds\n|]).\nchange (upd_Znth 4 _ _) with (map Vlong (Signed62.reprn 5 t)).\nassert (Ht0: 0 <= t < m) by (apply Z.mod_pos_bound; lia).\nforward_verify_check.\n1:{\n  forward_call (t, 5%nat, m, 0, ptrr, (field_address t_secp256k1_modinv64_modinfo (DOT _modulus)\n        ptrm), shr, shm);\n  [rewrite field_address_offset by assumption;entailer!\n  |unfold_data_at (data_at _ _ _ ptrm);entailer!|].\n  forward_if.\n  1:{\n    revert H6.\n    fold t.\n    elim Z.compare_spec; try discriminate.\n    lia.\n  }\n  forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ ptrm);entailer!.\n}\nforward_verify_check.\n1:{\n  forward_call (t, 5%nat, m, 1, ptrr, (field_address t_secp256k1_modinv64_modinfo (DOT _modulus)\n        ptrm), shr, shm);\n  [rewrite field_address_offset by assumption;entailer!\n  |unfold_data_at (data_at _ _ _ ptrm);entailer!|].\n  match goal with\n   |- semax _ ?E _ _ => forward_if E\n  end.\n  * revert H6.\n    fold t.\n    rewrite Zaux.Zcompare_Lt; try discriminate.\n    lia.\n  * forward. entailer!.\n  * forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ ptrm);entailer!.\n}\nQed.\n\nLemma body_secp256k1_modinv64_divsteps_62_var: semax_body Vprog Gprog f_secp256k1_modinv64_divsteps_62_var secp256k1_modinv64_divsteps_62_var_spec.\nProof.\nstart_function.\ndo 7 forward.\nforward_loop (EX i:nat, EX j:nat, EX u:Z, EX v:Z, EX f:Z, EX g:Z,\n PROP ( Z.of_nat j <= Z.of_nat i <= 62\n      ; divstep.Trans.u (divstep.Trans.transN i st) = (u * 2^(Z.of_nat j))%Z\n      ; divstep.Trans.v (divstep.Trans.transN i st) = (v * 2^(Z.of_nat j))%Z\n      ; eqm (2^(64 - Z.of_nat i)) f (divstep.f (fst (divstep.stepN i st)))\n      ; eqm (2^(64 - Z.of_nat i)) g (divstep.g (fst (divstep.stepN i st)))\n      )\n  LOCAL (temp _i (Vint (Int.repr (62 - Z.of_nat i + Z.of_nat j)));\n   temp _g (Vlong (Int64.repr (g * 2^(Z.of_nat j))));\n   temp _f (Vlong (Int64.repr f));\n   temp _r (Vlong (Int64.repr (divstep.Trans.r (divstep.Trans.transN i st))));\n   temp _q (Vlong (Int64.repr (divstep.Trans.q (divstep.Trans.transN i st))));\n   temp _v (Vlong (Int64.repr v));\n   temp _u (Vlong (Int64.repr u)); \n   gvars gv; temp _eta (Vlong (Int64.repr (divstep.eta (fst (divstep.stepN i st)) + Z.of_nat j)));\n   temp _f0 (Vlong (Int64.repr (divstep.f st)));\n   temp _g0 (Vlong (Int64.repr (divstep.g st))); temp _t t)\n SEP (data_at_ sh t_secp256k1_modinv64_trans2x2 t;\n   debruijn64_array sh_debruijn gv)\n)%assert\nbreak:(\n PROP ( )\n  LOCAL (\n   temp _r (Vlong (Int64.repr (divstep.Trans.r (divstep.Trans.transN 62 st))));\n   temp _q (Vlong (Int64.repr (divstep.Trans.q (divstep.Trans.transN 62 st))));\n   temp _v (Vlong (Int64.repr (divstep.Trans.v (divstep.Trans.transN 62 st))));\n   temp _u (Vlong (Int64.repr (divstep.Trans.u (divstep.Trans.transN 62 st)))); \n   gvars gv; temp _eta (Vlong (Int64.repr (divstep.eta (fst (divstep.stepN 62 st)))));\n   temp _t t)\n SEP (data_at_ sh t_secp256k1_modinv64_trans2x2 t;\n   debruijn64_array sh_debruijn gv)\n)%assert.\n* Exists 0%nat; Exists 0%nat;\n  Exists (divstep.Trans.u (divstep.Trans.transN 0 st)); Exists (divstep.Trans.v (divstep.Trans.transN 0 st));\n  Exists (divstep.f (fst (divstep.stepN 0 st)));Exists (divstep.g (fst (divstep.stepN 0 st)));\n  entailer!.\n* Intros n j u v f g;\n  rename H4 into Hg;\n  rename H3 into Hf;\n  rename H2 into Hv;\n  rename H1 into Hu;\n  rename H0 into Hn.\n  assert (Hmask : 0 <> (-1 * 2 ^ (62 - Z.of_nat n + Z.of_nat j)) mod (2^64)).\n  1:{\n    intros Hzero; symmetry in Hzero.\n    apply Zmod_divide in Hzero; try lia.\n    replace 64 with ((2 + Z.of_nat n - Z.of_nat j) + (62 - Z.of_nat n + Z.of_nat j)) in Hzero by ring.\n    rewrite !Z.pow_add_r, Z.mul_divide_cancel_r, (Z.divide_opp_r _ 1) in Hzero by lia.\n    apply Z.divide_1_r_nonneg in Hzero; try lia.\n    replace (2 + Z.of_nat n - Z.of_nat j) with (2 + (Z.of_nat n - Z.of_nat j)) in Hzero by ring.\n    rewrite Z.pow_add_r in Hzero by lia.\n    lia.\n  }\n  assert (Hbound := Z.mod_pos_bound (-1 * 2 ^ (62 - Z.of_nat n + Z.of_nat j)) (2 ^ 64)).\n  assert (Heta := divstep.etaBounds 683 n st H).\n  assert (Hfodd : Zodd f).\n  1:{\n    apply Zodd_bool_iff.\n    assert (Hf0 := Zmod_odd f).\n    revert Hf0.\n    destruct (Z.odd f); try reflexivity.\n    assert (H2 : (2 | 2 ^ (64 - Z.of_nat n))) by (apply Zpow_facts.Zpower_divide; lia).\n    rewrite (Zmod_div_mod 2 (2 ^ (64 - Z.of_nat n))), Hf, <- (Zmod_div_mod 2 (2 ^ (64 - Z.of_nat n)))\n      by (try lia; assumption).\n    assert (Hfodd := divstep.oddF (fst (divstep.stepN n st))).\n    apply Zodd_bool_iff in Hfodd.\n    assert (Hmod := Zmod_odd (divstep.f (fst (divstep.stepN n st)))).\n    rewrite Hfodd in Hmod.\n    rewrite Hmod.\n    discriminate.\n  }\n  assert (Hgcd : forall z a, Zodd z -> 0 <= a -> Z.gcd z (2 ^ a) = 1).\n  1:{\n    intros z a Hz Ha.\n    apply Zgcd_1_rel_prime.\n    apply Zpow_facts.rel_prime_Zpower_r;[lia|].\n    apply rel_prime_mod_rev;[lia|].\n    rewrite Zmod_odd.\n    replace (Z.odd z) with true;[apply rel_prime_1|].\n    symmetry; apply Zodd_bool_iff.\n    assumption.\n  }\n  forward_call.\n  1:{ change (Int.unsigned Int64.iwordsize') with 64; lia. }\n  1:{ split;\n      [|unfold_C; rewrite Z_log2_lt_pow2, Z.log2_lor, Z.max_lub_lt_iff, <- !Z_log2_lt_pow2; rep_lia].\n      apply Z_lor_pos; try rep_lia.\n      convert_C_to_math.\n      lia.\n  }\n  convert_C_to_math.\n  set (g' := g * _).\n  assert (Hgbound := Z.mod_pos_bound g' (2 ^ 64)).\n  set (zeros := (Z_ctz _)).\n  assert (Hzeros_pos : 0 <= zeros) by apply Z_ctz_non_neg.\n  assert (Hzeros62 : zeros <= 62 - Z.of_nat n + Z.of_nat j).\n  1:{\n   unfold zeros.\n   rewrite Z.lor_comm.\n   etransitivity.\n   * apply Z_ctz_lor_l.\n     lia.\n   * apply Z.nlt_ge.\n     intros Hctz.\n     apply Z_ctz_testbit_false in Hctz.\n     rewrite Z.mod_pow2_bits_low, <- two_p_equiv, Z.mul_comm, <- Z.opp_eq_mul_m1,\n             Zbits.Ztestbit_neg_two_p in Hctz by lia.\n     destruct zlt in Hctz; lia.\n  }\n  assert (Hg'zeros : (2^zeros | g')).\n  1:{\n   apply Zmod_divide;[auto with *|].\n   apply Z.bits_inj_0; intros k.\n   destruct (Z_le_lt_dec 0 k);[|auto using Z.testbit_neg_r].\n   rewrite <- two_p_equiv, Zbits.Ztestbit_mod_two_p by lia.\n   destruct zlt as [Hk|Hk];[|reflexivity].\n   rewrite <- (Z.mod_pow2_bits_low _ 64) by lia.\n   destruct (Z.eq_dec (g' mod 2^64) 0) as [->|Hne];[apply Z.bits_0|].\n   apply Z_ctz_testbit_false.\n   eapply Z.lt_le_trans;[apply Hk|].\n   apply Z_ctz_lor_l; assumption.\n  }\n  assert (Hzeros_opt: forall i, (2^i | g') -> i <= 62 - Z.of_nat n + Z.of_nat j -> i <= zeros).\n  1:{\n    intros i Hig Hi62.\n    apply Z.lt_pred_le.\n    apply Z_testbit_false_ctz;[apply Z_lt_neq;apply Z_lor_pos; lia|].\n    intros k Hk.\n    destruct Hig as [m ->].\n    rewrite Z.lor_spec, orb_false_iff, !Z.mod_pow2_bits_low, Z.mul_pow2_bits_low by lia.\n    rewrite <- two_p_equiv, Z.mul_comm, <- Z.opp_eq_mul_m1, Zbits.Ztestbit_neg_two_p by lia.\n    elim zlt; lia.\n  }\n  do 5 progressC.\n  unfold g'.\n  replace 64 with (zeros + (64 - zeros)) by ring.\n  rewrite Z.pow_add_r, (Z.shiftr_div_pow2 _ zeros), Zaux.Zdiv_mod_mult by lia.\n  replace zeros with (Z.of_nat j + (zeros - Z.of_nat j)) by ring.\n  set (k := zeros - Z.of_nat j).\n  assert (Hk : 0 <= k).\n  1:{\n    apply Z.nlt_ge.\n    intros Hk.\n    cut (zeros + 1 <= zeros);[lia|].\n    apply Hzeros_opt;[|lia].\n    etransitivity;[|apply Z.divide_factor_r].\n    apply Zmod_divide;try lia.\n    replace (Z.of_nat j) with ((-1 - k) + (zeros + 1)) by (unfold k; ring).\n    rewrite Z.pow_add_r by lia.\n    apply Z_mod_mult.\n  }\n  rewrite !Z.pow_add_r, !Z.mul_assoc, <- Hu, <- Hv by lia.\n  clear u v Hu Hv.\n  replace (62 - Z.of_nat n + Z.of_nat j - (Z.of_nat j + k))\n   with (62 - Z.of_nat n - k) by ring.\n  replace (divstep.eta (fst (divstep.stepN n st)) + Z.of_nat j - (Z.of_nat j + k))\n   with (divstep.eta (fst (divstep.stepN n st)) - k) by ring.\n  rewrite (Z.mul_comm g), Zdiv_mult_cancel_l by lia.\n  assert (Hkn : (2 ^ k | 2 ^ (64 - Z.of_nat n))).\n  1:{\n    replace (64 - Z.of_nat n) with (k + (64 - Z.of_nat n - k)) by ring.\n    rewrite Z.pow_add_r by lia.\n    apply Z.divide_factor_l.\n  }\n  assert (Hgzeros : (2 ^ k | divstep.g (fst (divstep.stepN n st)))).\n  1:{\n    apply Zmod_divide; try lia.\n    rewrite (Zmod_div_mod _ (2 ^ (64 - Z.of_nat n))), <- Hg, <-Zmod_div_mod by (try lia; assumption).\n    apply Zdivide_mod.\n    eapply Z.mul_divide_cancel_r;[|etransitivity;[|apply Hg'zeros]];[lia|].\n    rewrite <- Z.pow_add_r by lia.\n    replace (k + Z.of_nat j) with zeros by (unfold k; ring).\n    reflexivity.\n  }\n  rewrite <- (Z2Nat.id _ Hk) in Hgzeros |- *.\n  rewrite <- divstep.etaHs by assumption.\n  set (g1 := ((g / _) mod _)).\n  assert (Hg1 : eqm (2 ^ (64 - Z.of_nat n - k)) g1 (divstep.g (fst (divstep.stepN (Z.to_nat k) (fst (divstep.stepN n st)))))).\n  1:{\n    rewrite divstep.gHs by assumption.\n    unfold eqm, g1.\n    rewrite (Z2Nat.id _ Hk).\n    rewrite <- Zmod_div_mod; try lia.\n    2:{\n      replace (64 - (Z.of_nat j + k)) with ((64 - Z.of_nat n - k) + (0 - Z.of_nat j + Z.of_nat n)) by ring. \n      rewrite Z.pow_add_r by lia.\n      apply Z.divide_factor_l.\n    }\n    rewrite <- !Zaux.Zdiv_mod_mult by lia.\n    rewrite <- Z.pow_add_r by lia.\n    replace (k + (64 - Z.of_nat n - k)) with (64 - Z.of_nat n) by ring.\n    f_equal.\n    assumption.\n  }\n  assert (Hf1 : eqm (2 ^ (64 - Z.of_nat n - k)) f (divstep.f (fst (divstep.stepN (Z.to_nat k) (fst (divstep.stepN n st)))))).\n  1:{\n    rewrite divstep.fHs by assumption.\n    unfold eqm.\n    rewrite (Zmod_div_mod _ (2 ^ (64 - Z.of_nat n - k + k)) (divstep.f _)),\n            (Zmod_div_mod _ (2 ^ (64 - Z.of_nat n - k + k))) by (try lia;rewrite Z.pow_add_r by lia; apply Z.divide_factor_l).\n    f_equal.\n    replace (64 - Z.of_nat n - k + k) with (64 - Z.of_nat n) by ring.\n    assumption.\n  }\n  rewrite <- divstep.stepN_app_fst in *.\n  assert (trans_n_k := divstep.Trans.transN_stepN (Z.to_nat k) n st).\n  rewrite divstep.Trans.transHs in trans_n_k by assumption.\n  unfold divstep.Trans.mul in trans_n_k.\n  cbn in trans_n_k.\n  rewrite !Z.mul_0_l, !Z.mul_1_l, !Z.add_0_r in trans_n_k.\n  replace (divstep.Trans.v (divstep.Trans.transN n st) * 2 ^ Z.of_nat (Z.to_nat k))\n   with (divstep.Trans.v (divstep.Trans.transN (Z.to_nat k + n) st))\n   by (rewrite <- trans_n_k; cbn; ring).\n  replace (divstep.Trans.u (divstep.Trans.transN n st) * 2 ^ Z.of_nat (Z.to_nat k))\n   with (divstep.Trans.u (divstep.Trans.transN (Z.to_nat k + n) st))\n   by (rewrite <- trans_n_k; cbn; ring).\n  replace (divstep.Trans.r (divstep.Trans.transN n st))\n   with (divstep.Trans.r (divstep.Trans.transN (Z.to_nat k + n) st))\n   by (rewrite <- trans_n_k; reflexivity).\n  replace (divstep.Trans.q (divstep.Trans.transN n st))\n   with (divstep.Trans.q (divstep.Trans.transN (Z.to_nat k + n) st))\n   by (rewrite <- trans_n_k; reflexivity).\n  replace (62 - Z.of_nat n - Z.of_nat (Z.to_nat k))\n   with (62 - Z.of_nat (Z.to_nat k + n)) by lia.\n  replace (64 - Z.of_nat n - k)\n   with (64 - Z.of_nat (Z.to_nat k + n)) in * by lia.\n  set (n1 := (Z.to_nat k + n)%nat) in *.\n  assert (Hn1 : 0 <= Z.of_nat n1 <= 62) by lia.\n  assert (Hg1odd : Zodd g1 \\/ n1 = 62%nat).\n  1:{\n    destruct (Zeven_odd_dec g1) as [Hg1even|Hg1odd];[|tauto].\n    right.\n    apply Zeven_div2 in Hg1even.\n    rewrite (Z_div_mod_eq_full g1 2) in Hg1even at 1.\n    rewrite Z.div2_div in Hg1even.\n    assert (Hgeven : g1 mod 2 = 0) by lia.\n    clear Hg1even.\n    unfold g1 in Hgeven.\n    rewrite <- Zmod_div_mod, (* <- Zaux.Zdiv_mod_mult, *) (Z2Nat.id _ Hk) in Hgeven; try lia.\n    2:apply Zpow_facts.Zpower_divide; lia.\n    cut (2 ^ (zeros + 1) | g').\n    1:intros Hg';specialize (Hzeros_opt (zeros + 1) Hg');lia.\n    apply Zmod_divide; try lia.\n    apply Zdivide_mod in Hg'zeros.\n    rewrite Z.pow_add_r, Z.rem_mul_r, Hg'zeros, Z.add_0_l by lia.\n    replace 0 with (2 ^ zeros * 0) by ring.\n    rewrite Z.mul_cancel_l by lia.\n    unfold g'.\n    replace zeros with (k + Z.of_nat j) by lia.\n    rewrite Z.pow_add_r, Zdiv_mult_cancel_r by lia.\n    assumption.\n  }\n  clearbody n1 k g1.\n  clear zeros Hzeros_pos Hzeros62 Hg'zeros Hzeros_opt Hk Hkn Hgzeros g' Hgbound Hf Hg g Hmask Hbound Hn n Heta trans_n_k.\n  forward_if;change (62 - _) with (62 - Z.of_nat n1) in H0.\n  1:{\n    rewrite H0.\n    replace n1 with 62%nat by lia.\n    forward.\n    entailer!.\n  }\n  assert (Hn162 : Z.of_nat n1 < 62) by lia.\n  clear H0.\n  destruct Hg1odd as [Hg1odd|Hg1odd];[|lia].\n  forward_verify_check.\n  1:{\n    revert H0.\n    convert_C_to_math.\n    change (Z.land f 1) with (Z.land f (Z.ones 1)).\n    rewrite Z.land_ones by lia.\n    change (2^1) with 2.\n    rewrite (Zmod_div_mod 2 (2 ^ (64 - Z.of_nat n1)))\n     by (try lia; apply Zpow_facts.Zpower_divide; lia).\n    rewrite Hf1.\n    rewrite <- (Zmod_div_mod 2)\n     by (try lia; apply Zpow_facts.Zpower_divide; lia).\n    rewrite Zmod_odd.\n    assert (Hf1odd := divstep.oddF (fst (divstep.stepN n1 st))).\n    rewrite <- Zodd_bool_iff in Hf1odd.\n    rewrite Hf1odd, Z.eqb_refl.\n    cbn.\n    discriminate.\n  }\n  forward_verify_check.\n  1:{\n    revert H0.\n    convert_C_to_math.\n    change (Z.land g1 1) with (Z.land g1 (Z.ones 1)).\n    rewrite Z.land_ones by lia.\n    change (2^1) with 2.\n    rewrite Zmod_odd.\n    rewrite <- Zodd_bool_iff in Hg1odd.\n    rewrite Hg1odd, Z.eqb_refl.\n    cbn.\n    discriminate.\n  }\n  assert (Hstepn := divstep.Trans.transN_step n1 st).\n  injection Hstepn; intros Hstepng Hstepnf; clear Hstepn.\n  assert (Hshift : 62 - (62 - Z.of_nat n1) < 64) by lia.\n  forward_verify_check.\n  1:{\n    assert (Hfshift : eqm (2^64) (2 ^ Z.of_nat n1 * f) (2 ^ Z.of_nat n1 * divstep.f (fst (divstep.stepN n1 st)))).\n    1:{\n      unfold eqm.\n      replace 64 with (Z.of_nat n1 + (64 - Z.of_nat n1)) by ring.\n      rewrite Z.pow_add_r, !Zmult_mod_distr_l, Hf1; lia.\n    }\n    rewrite Hstepnf in Hfshift.\n    revert H0.\n    convert_C_to_math.\n    replace (62 - _) with (Z.of_nat n1) by ring.\n    rewrite <- Hfshift, (Z.mul_comm f), Z.eqb_refl.\n    discriminate.\n  }\n  forward_verify_check.\n  1:{\n    assert (Hgshift : eqm (2^64) (2 ^ Z.of_nat n1 * g1) (2 ^ Z.of_nat n1 * divstep.g (fst (divstep.stepN n1 st)))).\n    1:{\n      unfold eqm.\n      replace 64 with (Z.of_nat n1 + (64 - Z.of_nat n1)) by ring.\n      rewrite Z.pow_add_r, !Zmult_mod_distr_l, Hg1; lia.\n    }\n    rewrite Hstepng in Hgshift.\n    revert H0.\n    convert_C_to_math.\n    replace (62 - _) with (Z.of_nat n1) by ring.\n    rewrite <- Hgshift, (Z.mul_comm g1), Z.eqb_refl.\n    discriminate.\n  }\n  clear Hstepng Hstepnf.\n  assert (Heta := divstep.etaBounds 683 n1 st H).\n  forward_verify_check.\n  1:{\n    forward_if (temp _t'2 (Vint Int.one));\n    [| |forward_if; try discriminate; forward; entailer!];\n    forward; entailer!; revert H0; convert_C_to_math;\n    try lia.\n    cbn; convert_C_to_math.\n    elim Z.ltb_spec0; try lia; reflexivity.\n  }\n  forward_if (EX n2 : nat, EX u:Z, EX v:Z, EX f2:Z, EX g2:Z, EX w: int,\n  PROP ( 1 <= Z.of_nat n2 <= 62 - Z.of_nat n1; Z.of_nat n2 <= 32\n      ; divstep.Trans.u (divstep.Trans.transN (n1 + n2) st) = (u * 2^(Z.of_nat n2))%Z\n      ; divstep.Trans.v (divstep.Trans.transN (n1 + n2) st) = (v * 2^(Z.of_nat n2))%Z\n      ; eqm (2^(64 - Z.of_nat (n1 + n2))) f2 (divstep.f (fst (divstep.stepN (n1 + n2) st)))\n      ; eqm (2^(64 - Z.of_nat (n1 + n2))) g2 (divstep.g (fst (divstep.stepN (n1 + n2) st)))\n      )\n  LOCAL (temp _i (Vint (Int.repr (62 - Z.of_nat n1)));\n   temp _g (Vlong (Int64.repr (g2 * 2^(Z.of_nat n2) - f2 * Int.unsigned w)));\n   temp _f (Vlong (Int64.repr f2));\n   temp _r (Vlong (Int64.repr (divstep.Trans.r (divstep.Trans.transN (n1 + n2) st) - v * Int.unsigned w)));\n   temp _q (Vlong (Int64.repr (divstep.Trans.q (divstep.Trans.transN (n1 + n2) st) - u * Int.unsigned w)));\n   temp _v (Vlong (Int64.repr v));\n   temp _u (Vlong (Int64.repr u)); \n   temp _m (Vlong (Int64.repr (Z.ones (Z.of_nat n2))));\n   temp _w (Vint w);\n   gvars gv; temp _eta (Vlong (Int64.repr (divstep.eta (fst (divstep.stepN (n1 + n2) st)) + Z.of_nat n2)));\n   temp _f0 (Vlong (Int64.repr (divstep.f st)));\n   temp _g0 (Vlong (Int64.repr (divstep.g st)));\n   temp _t t)\n SEP (data_at_ sh t_secp256k1_modinv64_trans2x2 t;\n   debruijn64_array sh_debruijn gv)\n)%assert.\n  1:{\n    do 10 progressC.\n    forward_if (temp _t'3 (Vint (Int.repr (Z.min (62 - Z.of_nat n1) ((-divstep.eta (fst (divstep.stepN n1 st))) + 1)))));\n    try (progressC; revert H1; rewrite <- add_repr);\n    try rewrite Int_repr_Int64_Z_mod_modulus;\n    try entailer;\n    try rewrite add_repr;\n    convert_C_to_math;\n    try lia;\n    try (intros H1;first [rewrite Z.min_l by lia|rewrite Z.min_r by lia];reflexivity).\n    progressC.\n    forward_verify_check.\n    1:{\n      forward_if (temp _t'4 (Vint Int.one)); try lia.\n      1:{\n        progressC.\n        destruct (zlt _ _); try lia.\n        reflexivity.\n      }\n      forward_if; try discriminate.\n      forward; entailer!.\n    }\n    replace ((Z.of_nat j + Z.of_nat (Z.to_nat k)\n               + (64 - (Z.of_nat j + Z.of_nat (Z.to_nat k))))) with 64 by ring.\n    progressC.\n    change 63 with (Z.ones 6).\n    rewrite <- Z.land_ones, Z.land_m1_l, Z_shiftr_ones, subsub1, Z_land_ones_min by lia.\n    set (n2 := (Z.min _ 6)).\n    pose (w := (modInv (-g1) (2^n2) * (-f)) mod (2^n2)).\n    progressC.\n    Exists (Z.to_nat n2) (divstep.Trans.q (divstep.Trans.transN n1 st)) (divstep.Trans.r (divstep.Trans.transN n1 st)) g1\n           ((-f + g1 * w) / 2^n2)\n           (Int.repr w).\n    entailer!.\n    rewrite Nat.add_comm.\n    rewrite <- divstep.Trans.transN_stepN.\n    assert (Hgn1 : Zodd (divstep.g (fst (divstep.stepN n1 st)))).\n    1:{\n      rewrite <- Zodd_bool_iff, <- Z.bit0_odd in *|-*.\n      change (Z.testbit (divstep.g (fst (divstep.stepN n1 st))) 0)\n       with (true && (Z.testbit (divstep.g (fst (divstep.stepN n1 st))) 0))%bool.\n      rewrite <- (Z.ones_spec_low (64 - Z.of_nat n1) 0) at 1 by lia.\n      rewrite <- Z.land_spec, Z.land_comm, Z.land_ones, <- Hg1,\n              <- Z.land_ones, Z.land_comm, Z.land_spec, Z.ones_spec_low by lia.\n      assumption.\n    }\n    rewrite divstep.Trans.transDs;\n    try solve [assumption|unfold divstep.eta in H0; unfold n2, divstep.eta; lia].\n    split;[cbn; ring|].\n    split;[cbn; ring|].\n    rewrite Nat2Z.inj_add, Z2Nat.id, divstep.stepN_app_fst by lia.\n    injection (divstep.Trans.transN_step (Z.to_nat n2) (fst (divstep.stepN n1 st))); intros Hg2 Hf2.\n    rewrite divstep.Trans.transDs in Hf2, Hg2;\n    try solve [assumption|unfold divstep.eta in H0; unfold n2, divstep.eta; lia].\n    cbn in Hf2, Hg2.\n    ring_simplify in Hf2; ring_simplify in Hg2.\n    assert (Hw : 0 <= w < 2^6).\n    1:{\n      assert (0 < 2^n2 <= 2^6) by (split;[|apply Z.pow_le_mono_r];lia).\n      pose (Z.mod_pos_bound (modInv (-g1) (2 ^ n2) * (-f)) (2 ^ n2)).\n      lia.\n    }\n    convert_C_to_math.\n    assert (Hg1fw : (2^n2 | (-f) + g1 * w)).\n    1: {\n      apply Zmod_divide;[lia|].\n      unfold w.\n      rewrite <- Zplus_mod_idemp_r, Zmult_mod_idemp_r, Zplus_mod_idemp_r, Z.mul_assoc,\n              <- Z.sub_opp_r, !Zopp_mult_distr_l, <- Zminus_mod_idemp_r, <- Zmult_mod_idemp_l,\n              modInv_mul_r, Z.gcd_opp_l.\n      rewrite Hgcd by assumption || lia.\n      rewrite Zmult_mod_idemp_l, Zminus_mod_idemp_r, Z.mul_1_l, Z.sub_diag, Zmod_0_l; lia.\n    }\n    assert (Hw0 : w = (modInv (-divstep.g (fst (divstep.stepN n1 st))) (2 ^ n2)\n       * (-divstep.f (fst (divstep.stepN n1 st)))) mod 2 ^ n2).\n    1:{\n      assert (Hn2 : (2^n2 | 2^((64 - Z.of_nat n1)))) by \n        (exists (2^((64 - Z.of_nat n1) - n2)); rewrite <- Z.pow_add_r by lia; f_equal; ring).\n      apply Zmult_eqm;[|eapply eqm_2_pow_le;[|apply Zopp_eqm;apply Hf1];lia].\n      unfold eqm; f_equal.\n      apply modInv_eqm.\n      apply Zopp_eqm.\n      eapply eqm_2_pow_le;[|apply Hg1].\n      lia.\n    }\n    apply Z.mul_cancel_l in Hf2;[|lia].\n    repeat split.\n    * rewrite Hf2.\n      apply (eqm_2_pow_le _ (64 - Z.of_nat n1));[lia|assumption].\n    * rewrite Z2Nat.id in Hg2 by lia.\n      unfold eqm.\n      rewrite <- Zaux.Zdiv_mod_mult by lia.\n      symmetry.\n      apply Z.div_unique_exact;[lia|].\n      rewrite <- Zmult_mod_distr_l, <- Z.pow_add_r, Hg2 by lia.\n      replace (n2 + (64 - (n2 + Z.of_nat n1))) with (64 - (Z.of_nat n1)) by ring.\n      apply Zplus_eqm;[apply Zopp_eqm; assumption|].\n      rewrite (Z.mul_comm _ (divstep.g (fst (divstep.stepN n1 st)))).\n      apply Zmult_eqm; try assumption.\n      unfold eqm; f_equal.\n      assumption.\n    * repeat f_equal.\n      rewrite Z.mul_comm, <-Z_div_exact_full_2 by (try lia; apply Zdivide_mod; assumption).\n      ring.\n    * repeat f_equal.\n      apply Z.sub_move_r.\n      rewrite  <- Hw0 by lia.\n      cbn; ring.\n    * repeat f_equal.\n      apply Z.sub_move_r.\n      rewrite  <- Hw0 by lia.\n      cbn; ring.\n    * repeat f_equal.\n      rewrite Z.land_ones by lia.\n      assert (Hn264 : 2^n2 < 2^64) by (apply Z.pow_lt_mono_r; lia).\n      change Int64.modulus with (2^64).\n      assert (Hmod := Z.mod_pos_bound (g1 * -f * (g1 * g1 - 2)) (2^n2)).\n      rewrite Z.mod_small by lia.\n      unfold w.\n      replace (g1 * -f * (g1 * g1 - 2)) with (g1 * (g1 * g1 - 2) * -f) by ring.\n      do 2 (rewrite <- Zmult_mod_idemp_l; symmetry).\n      do 2 f_equal.\n      symmetry.\n      rewrite <- Z.land_ones by lia.\n      replace n2 with (Z.min 6 n2) at 1 by lia.\n      rewrite <- Z_land_ones_min, Z.land_assoc by lia.\n      rewrite HackersDelightB by (apply Zodd_equiv; assumption).\n      rewrite Z.land_ones by lia.\n      rewrite <- (Z.mul_1_l (modInv _ _)), <- Zmult_mod_idemp_l.\n      rewrite <- (Hgcd g1 n2) at 1 by assumption || lia.\n      rewrite <- Z.gcd_opp_l, <- Zmult_mod_idemp_r, <- modInv_mul_l, Zmult_mod_idemp_r, Zmult_mod_idemp_l, <- Z.mul_assoc.\n      rewrite <- Z.land_ones by lia.\n      replace n2 with (Z.min 6 n2) at 2 by lia.\n      rewrite <- Z_land_ones_min, Z.land_assoc by lia.\n      rewrite !Z.land_ones by lia.\n      rewrite <- Zmult_mod_idemp_r, modInv_mul_r, Z.gcd_opp_l, Hgcd, Zmult_mod_idemp_r, Z.mul_1_r by assumption || lia.\n      rewrite <- Zmod_div_mod; try lia.\n      exists (2^(6 - n2)); rewrite <-Z.pow_add_r; try lia; f_equal; ring.\n    * repeat f_equal.\n      rewrite divstep.etaDs by assumption || lia.\n      lia.\n  }\n  1:{\n    forward_if (temp _t'5 (Vint (Int.repr (Z.min (62 - Z.of_nat n1) ((divstep.eta (fst (divstep.stepN n1 st))) + 1)))));\n    try (progressC; revert H1; rewrite <- add_repr);\n    try rewrite Int_repr_Int64_Z_mod_modulus;\n    try entailer;\n    try rewrite add_repr;\n    convert_C_to_math;\n    try lia;\n    try (intros H1;first [rewrite Z.min_l by lia|rewrite Z.min_r by lia];reflexivity).\n    progressC.\n    forward_verify_check.\n    1:{\n      forward_if (temp _t'6 (Vint Int.one)); try lia.\n      1:{\n        progressC.\n        destruct (zlt _ _); try lia.\n        reflexivity.\n      }\n      forward_if; try discriminate.\n      forward; entailer!.\n    }\n    replace ((Z.of_nat j + Z.of_nat (Z.to_nat k)\n               + (64 - (Z.of_nat j + Z.of_nat (Z.to_nat k))))) with 64 by ring.\n    progressC.\n    change 15 with (Z.ones 4).\n    rewrite <- Z.land_ones, Z.land_m1_l, Z_shiftr_ones, subsub1, Z_land_ones_min by lia.\n    set (n2 := (Z.min _ 4)).\n    pose (w := (modInv (-f) (2^n2) * g1) mod (2^n2)).\n    do 2 progressC.\n    Exists (Z.to_nat n2) (divstep.Trans.u (divstep.Trans.transN n1 st)) (divstep.Trans.v (divstep.Trans.transN n1 st)) f\n           ((g1 + f * w) / 2^n2)\n           (Int.repr w).\n    entailer!.\n    rewrite Nat.add_comm.\n    rewrite <- divstep.Trans.transN_stepN.\n    rewrite divstep.Trans.transSs;\n    try solve [unfold divstep.eta in H0; unfold n2, divstep.eta; lia].\n    split;[cbn; ring|].\n    split;[cbn; ring|].\n    rewrite Nat2Z.inj_add, Z2Nat.id, divstep.stepN_app_fst by lia.\n    injection (divstep.Trans.transN_step (Z.to_nat n2) (fst (divstep.stepN n1 st))); intros Hg2 Hf2.\n    rewrite divstep.Trans.transSs in Hf2, Hg2;\n    try solve [unfold divstep.eta in H0; unfold n2, divstep.eta; lia].\n    cbn in Hf2, Hg2.\n    ring_simplify in Hf2; ring_simplify in Hg2.\n    assert (Hw : 0 <= w < 2^4).\n    1:{\n      assert (0 < 2^n2 <= 2^4) by (split;[|apply Z.pow_le_mono_r];lia).\n      pose (Z.mod_pos_bound (modInv (-f) (2 ^ n2) * g1) (2 ^ n2)).\n      lia.\n    }\n    convert_C_to_math.\n    assert (Hg1fw : (2^n2 | g1 + f * w)).\n    1: {\n      apply Zmod_divide;[lia|].\n      unfold w.\n      rewrite <- Zplus_mod_idemp_r, Zmult_mod_idemp_r, Zplus_mod_idemp_r, Z.mul_assoc,\n              <- Z.sub_opp_r, !Zopp_mult_distr_l, <- Zminus_mod_idemp_r, <- Zmult_mod_idemp_l,\n              modInv_mul_r, Z.gcd_opp_l.\n      rewrite Hgcd by assumption || lia.\n      rewrite Zmult_mod_idemp_l, Zminus_mod_idemp_r, Z.mul_1_l, Z.sub_diag, Zmod_0_l; lia.\n    }\n    assert (Hw0 : w = (modInv (-divstep.f (fst (divstep.stepN n1 st))) (2 ^ n2)\n       * divstep.g (fst (divstep.stepN n1 st))) mod 2 ^ n2).\n    1:{\n      assert (Hn2 : (2^n2 | 2^((64 - Z.of_nat n1)))) by \n        (exists (2^((64 - Z.of_nat n1) - n2)); rewrite <- Z.pow_add_r by lia; f_equal; ring).\n      apply Zmult_eqm;[|eapply eqm_2_pow_le;[|apply Hg1];lia].\n      unfold eqm; f_equal.\n      apply modInv_eqm.\n      apply Zopp_eqm.\n      eapply eqm_2_pow_le;[|apply Hf1].\n      lia.\n    }\n    apply Z.mul_cancel_l in Hf2;[|lia].\n    repeat split.\n    * rewrite Hf2.\n      apply (eqm_2_pow_le _ (64 - Z.of_nat n1));[lia|assumption].\n    * rewrite Z2Nat.id in Hg2 by lia.\n      unfold eqm.\n      rewrite <- Zaux.Zdiv_mod_mult by lia.\n      symmetry.\n      apply Z.div_unique_exact;[lia|].\n      rewrite <- Zmult_mod_distr_l, <- Z.pow_add_r, Hg2 by lia.\n      replace (n2 + (64 - (n2 + Z.of_nat n1))) with (64 - (Z.of_nat n1)) by ring.\n      rewrite (Z.add_comm _ (divstep.g (fst (divstep.stepN n1 st)))).\n      apply Zplus_eqm; try assumption.\n      rewrite (Z.mul_comm _ (divstep.f (fst (divstep.stepN n1 st)))).\n      apply Zmult_eqm; try assumption.\n      unfold eqm; f_equal.\n      assumption.\n    * repeat f_equal.\n      rewrite Z.mul_comm, <-Z_div_exact_full_2 by (try lia; apply Zdivide_mod; assumption).\n      ring.\n    * repeat f_equal.\n      apply Z.sub_move_r.\n      rewrite  <- Hw0 by lia.\n      cbn; ring.\n    * repeat f_equal.\n      apply Z.sub_move_r.\n      rewrite  <- Hw0 by lia.\n      cbn; ring.\n    * repeat f_equal.\n      rewrite Z.land_ones by lia.\n      assert (Hn264 : 2^n2 < 2^64) by (apply Z.pow_lt_mono_r; lia).\n      change Int64.modulus with (2^64).\n      assert (Hmod := Z.mod_pos_bound (-((f + Z.land (f + 1) 4 * 2 ^ 1) mod 2 ^ 64) mod 2 ^ 32 * g1) (2^n2)).\n      rewrite Z.mod_small by lia.\n      unfold w.\n      do 2 (rewrite <- Zmult_mod_idemp_l; symmetry).\n      do 2 f_equal.\n      rewrite <- Zmod_div_mod; try lia.\n      2:exists (2^(32 - n2)); rewrite <-Z.pow_add_r; try lia; f_equal; ring.\n      rewrite <- (Z.mul_1_l (_ mod (2^64))), <- Z.mul_opp_l, <- Zmult_mod_idemp_r.\n      rewrite <- Zmod_div_mod, Zmult_mod_idemp_r; try lia.\n      2:exists (2^(64 - n2)); rewrite <-Z.pow_add_r; try lia; f_equal; ring.\n      rewrite (Zmod_div_mod (2^n2) (2^4)); try lia.\n      2:exists (2^(4 - n2)); rewrite <-Z.pow_add_r; try lia; f_equal; ring.\n      rewrite <- (Z.mul_1_r (modInv (-f) (2 ^ n2))).\n      rewrite <- (Hgcd f 4) at 1 by assumption || lia.\n      rewrite <- Z.gcd_opp_l, <- Zmult_mod_idemp_r, <- modInv_mul_r, Zmult_mod_idemp_r, Z.mul_assoc.\n      rewrite <- Zmod_div_mod; try lia.\n      2:exists (2^(4 - n2)); rewrite <-Z.pow_add_r; try lia; f_equal; ring.\n      rewrite <- Zmult_mod_idemp_l, modInv_mul_l, Z.gcd_opp_l, Hgcd, Zmult_mod_idemp_l, Z.mul_1_l by assumption || lia.\n      rewrite <- HackersDelightA, Z.land_ones by (try lia; apply Zodd_equiv; assumption).\n      rewrite <- Zmod_div_mod; try lia.\n      2:exists (2^(4 - n2)); rewrite <-Z.pow_add_r; try lia; f_equal; ring.\n      rewrite Z.mul_opp_l, Z.mul_1_l.\n      do 3 f_equal.\n      rewrite Z.shiftl_mul_pow2; lia.\n    * repeat f_equal.\n      rewrite divstep.etaSs; lia.\n  }\n  Intros n2 u v f2 g2 w.\n  rename H0 into Hn2; rename H1 into Hn232;\n  rename H2 into Hu; rename H3 into Hv;\n  rename H4 into Hf2; rename H5 into Hg2.\n  do 3 progressC. \n  ring_simplify (g2 * 2 ^ Z.of_nat n2\n                   - f2 * Int.unsigned w\n                   + f2 * Int.unsigned w).\n  ring_simplify ((divstep.Trans.q (divstep.Trans.transN (n1 + n2) st)\n            - u * Int.unsigned w\n            + u * Int.unsigned w)).\n  ring_simplify ((divstep.Trans.r (divstep.Trans.transN (n1 + n2) st)\n            - v * Int.unsigned w\n            + v * Int.unsigned w)).\n  forward_verify_check.\n  match goal with\n  | |- semax _ ?E _ _ => forward_if E\n  end.\n  2:(forward;entailer!).\n  1:{\n    elimtype False.\n    revert H0.\n    convert_C_to_math.\n    rewrite Z.land_ones, Z_mod_mult, Z.eqb_refl by lia.\n    discriminate.\n  }\n  forward.\n  Exists (n1 + n2)%nat n2 u v f2 g2.\n  rewrite Nat2Z.inj_add in * |- *.\n  replace (62 - (Z.of_nat n1 + Z.of_nat n2) + Z.of_nat n2) \n   with (62 - Z.of_nat n1) by ring.\n  entailer!.\n* do 4 progressC.\n  forward_verify_check.\n  1:{\n    forward_call (divstep.Trans.transN 62 st, t, sh, 62, false);\n    [apply (divstep.Trans.bounded_transN 62)|].\n    rewrite divstep.Trans.det_transN, Z.eqb_refl.\n    simpl (Z.b2z true).\n    forward_if;[discriminate|forward;entailer!].\n  }\n  forward.\nQed.\n\nLemma body_modinv64_update_de_62: semax_body Vprog Gprog f_secp256k1_modinv64_update_de_62 secp256k1_modinv64_update_de_62_spec.\nProof.\nstart_function.\nassert (Hoddm : forall n, 0 <= n -> Z.gcd m (2^n) = 1).\n1:{\n  intros n Hn.\n  apply Zgcd_1_rel_prime.\n  apply Zpow_facts.rel_prime_Zpower_r;[assumption|].\n  apply rel_prime_sym.\n  apply prime_rel_prime;[apply prime_2|].\n  intros [m0 Hm0].\n  revert H; apply Z.Even_Odd_False.\n  rewrite Hm0, Z.mul_comm.\n  apply Zeven_equiv.\n  apply Zeven_2p.\n}\nunfold Trans_repr, Signed62.reprn.\nfastforward 16.\nchange (Int64.shru (Int64.repr (-1)) (Int64.repr 2)) with (Int64.repr (Z.ones 62)).\nunfold Znth; simpl (Vlong _).\nunfold make_modinfo.\nforward_verify_check.\n1:{\n  unfold_data_at (data_at _ _ _ ptrm).\n  assert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\n  forward_call (d, 5%nat, m, -2, ptrd, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, shd, shm);\n  [rewrite field_address_offset by assumption;entailer!|].\n  rewrite Zaux.Zcompare_Gt by lia.\n  forward_if;[discriminate|forward].\n  unfold_data_at (data_at _ _ _ ptrm).\n  entailer!!.\n}\nforward_verify_check.\n1:{\n  unfold_data_at (data_at _ _ _ ptrm).\n  assert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\n  forward_call (d, 5%nat, m, 1, ptrd, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, shd, shm);\n  [rewrite field_address_offset by assumption;entailer!|].\n  rewrite Zaux.Zcompare_Lt by lia.\n  forward_if;[discriminate|forward].\n  unfold_data_at (data_at _ _ _ ptrm).\n  entailer!!.\n}\nforward_verify_check.\n1:{\n  unfold_data_at (data_at _ _ _ ptrm).\n  assert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\n  forward_call (e, 5%nat, m, -2, ptre, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, she, shm);\n  [rewrite field_address_offset by assumption;entailer!|].\n  rewrite Zaux.Zcompare_Gt by lia.\n  forward_if;[discriminate|forward].\n  unfold_data_at (data_at _ _ _ ptrm).\n  entailer!!.\n}\nforward_verify_check.\n1:{\n  unfold_data_at (data_at _ _ _ ptrm).\n  assert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\n  forward_call (e, 5%nat, m, 1, ptre, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, she, shm);\n  [rewrite field_address_offset by assumption;entailer!|].\n  rewrite Zaux.Zcompare_Lt by lia.\n  forward_if;[discriminate|forward].\n  unfold_data_at (data_at _ _ _ ptrm).\n  entailer!!.\n}\ndestruct H3 as [[Huv _] [Hqr _]].\nforward_verify_check.\n1:{\n\n  do 2 forward_call.\n  forward_if;[convert_C_to_math;entailer!!| |forward;entailer!!].\n  revert H3.\n  convert_C_to_math.\n  replace (_ <? _) with false by lia.\n  discriminate.\n}\nforward_verify_check.\n1:{\n  do 2 forward_call.\n  forward_if;[convert_C_to_math;entailer!!| |forward;entailer!!].\n  revert H3.\n  convert_C_to_math.\n  replace (_ <? _) with false by lia.\n  discriminate.\n}\ndo 2 progressC.\nsimpl (map Vlong _).\nrewrite !Z.shiftr_shiftr by lia; simpl (62 + _); simpl (_ + 62).\nassert (H311 : forall x, -2 * m < x < m -> Z.shiftr x 311 = if x <? 0 then -1 else 0).\n1:{\n intros x Hx.\n destruct (Z.ltb_spec0 x 0) as [Hx0|Hx0].\n * cut (-1 <= Z.shiftr x 311 < 0);[|apply shiftr_bounds];lia.\n * cut (0 <= Z.shiftr x 311 < 1);[|apply shiftr_bounds];lia.\n}\nrewrite !H311 by lia; clear H311.\nassert (Hland : forall x (b:bool), Z.land x (if b then -1 else 0) = if b then x else 0).\n1:{\n intros x b.\n rewrite !(f_if (Z.land _)), !Z.land_0_r, !Z.land_m1_r.\n reflexivity.\n}\nprogressC;rewrite !Hland by lia.\n1:{\n rewrite !(f_if (Int64.repr)), !(f_if (Int64.signed)).\r\n convert_C_to_math.\r\n destruct (_ <? _);destruct (_ <? _);lia.\r\n}\r\nprogressC;rewrite !Hland by lia.\r\n1:{\r\n rewrite !(f_if (Int64.repr)), !(f_if (Int64.signed)).\r\n convert_C_to_math.\r\n destruct (_ <? _);destruct (_ <? _);lia.\r\n}\r\nset (me0 := _ + _).\r\nset (md0 := _ + _).\r\nassert (Habsmd0 : Z.abs md0 <= 2^62) by (unfold md0; repeat destruct (_ <? 0); lia).\r\nassert (Habsme0 : Z.abs me0 <= 2^62) by (unfold me0; repeat destruct (_ <? 0); lia).\r\nassert (Habsmod62 : forall x, Z.abs (x mod 2 ^ 62) < 2 ^ 62).\r\n1:{\r\n intros x.\r\n assert (Hbound : 0 <= x mod 2 ^ 62 < 2^62) by (apply Z.mod_pos_bound;lia).\r\n rewrite Z.abs_eq; lia.\r\n}\r\nassert (Habsmod62m := Habsmod62 m).\r\nassert (Habsmod62d := Habsmod62 d).\r\nassert (Habsmod62e := Habsmod62 e).\r\nassert (Hudve : Z.abs (divstep.Trans.u mtx * (d mod 2 ^ 62) + divstep.Trans.v mtx * (e mod 2 ^ 62)) <= (2^62*(2^62 - 1))).\r\n1:{\r\n etransitivity;[apply Z.abs_triangle|].\r\n rewrite !Z.abs_mul.\r\n transitivity (Z.abs (divstep.Trans.u mtx) * (2 ^ 62 - 1)+ Z.abs (divstep.Trans.v mtx) * (2 ^ 62 - 1));[|lia].\r\n apply Z.add_le_mono; apply Z.mul_le_mono_nonneg_l; lia.\r\n}\r\nassert (Hqrve : Z.abs (divstep.Trans.q mtx * (d mod 2 ^ 62) + divstep.Trans.r mtx * (e mod 2 ^ 62)) <= (2^62*(2^62 - 1))).\r\n1:{\r\n etransitivity;[apply Z.abs_triangle|].\r\n rewrite !Z.abs_mul.\r\n transitivity (Z.abs (divstep.Trans.q mtx) * (2 ^ 62 - 1)+ Z.abs (divstep.Trans.r mtx) * (2 ^ 62 - 1));[|lia].\r\n apply Z.add_le_mono; apply Z.mul_le_mono_nonneg_l; lia.\r\n}\r\nrewrite ?Z.abs_lt, ?Z.abs_le in *. (* This speeds up lia exponentially. *)\r\nforward_call (v_cd, Tsh, divstep.Trans.u mtx, d mod 2 ^ 62).\r\nforward_call;[\r\n change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds\r\n|].\r\nforward_call (v_ce, Tsh, divstep.Trans.q mtx, d mod 2 ^ 62).\r\nforward_call;[\r\n change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds\r\n|].\r\nset (cd0 := divstep.Trans.u mtx * (d mod 2 ^ 62) + divstep.Trans.v mtx * (e mod 2 ^ 62)).\r\nset (ce0 := divstep.Trans.q mtx * (d mod 2 ^ 62) + divstep.Trans.r mtx * (e mod 2 ^ 62)).\r\nassert (Hcd0 : -2^124 <= cd0 <= 2^124) by solve_bounds.\r\nassert (Hce0 : -2^124 <= ce0 <= 2^124) by solve_bounds.\r\nforward_call;forward;progressC.\r\nforward_call;forward;progressC.\r\nrewrite !Z.land_ones by lia.\r\nassert (Habsmodinvd := Habsmod62 (modInv m (2 ^ 62) * cd0 + md0)).\r\nassert (Habsmodinve := Habsmod62 (modInv m (2 ^ 62) * ce0 + me0)).\r\nrewrite ?Z.abs_lt, ?Z.abs_le in *. (* This speeds up lia exponentially. *)\r\nassert (Habsmd0modinv : Z.abs (m mod 2 ^ 62 * (md0 - (modInv m (2 ^ 62) * cd0 + md0) mod 2 ^ 62)) <= 2^125).\r\n1:{\r\n  rewrite Z.abs_mul.\r\n  change (2^125) with (2^62 * 2^63).\r\n  apply Zmult_le_compat; lia.\r\n}\r\nassert (Habsme0modinv : Z.abs (m mod 2 ^ 62 * (me0 - (modInv m (2 ^ 62) * ce0 + me0) mod 2 ^ 62)) <= 2^125).\r\n1:{\r\n  rewrite Z.abs_mul.\r\n  change (2^125) with (2^62 * 2^63).\r\n  apply Zmult_le_compat; lia.\r\n}\r\nrewrite ?Z.abs_lt, ?Z.abs_le in *. (* This speeds up lia exponentially. *)\r\nsimpl (Signed62.reprn 5 m).\r\nassert (Hcd0'b : -2^126 <=\r\n  cd0 + m mod 2 ^ 62 * (md0 - (modInv m (2 ^ 62) * cd0 + md0) mod 2 ^ 62) <=\r\n  2^126) by solve_bounds.\r\nassert (Hce0'b : -2^126 <=\r\n  ce0 + m mod 2 ^ 62 * (me0 - (modInv m (2 ^ 62) * ce0 + me0) mod 2 ^ 62) <=\r\n  2^126) by solve_bounds.\r\ndo 2 (forward;forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]).\r\ndrop_LOCALs [_t'44; _t'45; _t'46; _t'47; _t'10; _t'9].\r\nassert (Hmod262 : forall c0 m0, (c0 + m mod 2^62 * (m0 - (modInv m (2^62) * c0 + m0) mod 2^62)) mod 2^62 = 0).\r\n1:{\r\n  intros c0 m0.\r\n  rewrite <- Zplus_mod_idemp_r, <- Zmult_mod_idemp_r, Zminus_mod_idemp_r, Zmult_mod_idemp_l.\r\n  replace (m0 - (modInv m (2 ^ 62) * c0 + m0)) with (-(modInv m (2 ^ 62) * c0)) by ring.\r\n  rewrite Zmult_mod_idemp_r, Zplus_mod_idemp_r, Z.mul_opp_r, Z.mul_assoc, Z.add_opp_r.\r\n  rewrite <- Zminus_mod_idemp_r, <- Zmult_mod_idemp_l, modInv_mul_r, Hoddm, Z.mul_1_l, Zminus_mod_idemp_r, Z.sub_diag by lia.\r\n  reflexivity.\r\n}\r\nforward_verify_check.\r\n1:{\r\n  forward_call.\r\n  forward_if;[|forward;entailer!!].\r\n  revert H3; fold cd0 md0; convert_C_to_math.\r\n  rewrite <-(Z.land_ones _ 64), <- Z.land_assoc by lia.\r\n  change (Z.land (Z.ones 62) (Z.ones 64)) with (Z.ones 62).\r\n  rewrite Z.land_ones, Hmod262, Z.eqb_refl by lia.\r\n  discriminate.\r\n}\r\nforward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|].\r\nforward_verify_check.\r\n1:{\r\n  forward_call.\r\n  forward_if;[|forward;entailer!!].\r\n  revert H3; fold cd0 md0; convert_C_to_math.\r\n  rewrite <-(Z.land_ones _ 64), <- Z.land_assoc by lia.\r\n  change (Z.land (Z.ones 62) (Z.ones 64)) with (Z.ones 62).\r\n  rewrite Z.land_ones, Hmod262, Z.eqb_refl by lia.\r\n  discriminate.\r\n}\r\nforward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|].\r\nset (md := md0 - (modInv m (2 ^ 62) * cd0 + md0) mod 2 ^ 62) in *.\r\nset (me := me0 - (modInv m (2 ^ 62) * ce0 + me0) mod 2 ^ 62) in *.\r\nassert (Hmd : -2 ^ 63 <= md <= 2^63) by (clear -Habsmodinvd Habsmd0;nia).\r\nassert (Hme : -2 ^ 63 <= me <= 2^63) by (clear -Habsmodinve Habsme0;nia).\r\nset (cd0' := cd0 + m mod 2 ^ 62 * md) in *.\r\nset (ce0' := ce0 + m mod 2 ^ 62 * me) in *.\r\nclear Hmod262.\r\nassert (HboundA : forall x y z, -2^127 <= x < 2^127 -> -2^62 <= y <= 2^62 -> \r\n  -2 ^ 126 <= Z.shiftr x 62 + y * (z mod 2 ^ 62) <= 2 ^ 126 - 1).\r\n1:{\r\n  intros x y z Hx Hy.\r\n  clear -Hx Hy.\r\n  apply (shiftr_bounds (-2^65) _ (2^65) 62) in Hx.\r\n  assert (0 <= z mod 2^62 < 2^62) by (apply Z.mod_pos_bound; lia).\r\n  nia.\r\n}\r\nassert (HboundB : forall x y0 z0 y1 z1, -2^127 <= x < 2^127 -> -2^62 <= y0 <= 2^62 -> -2^62 <= y1 <= 2^62 -> \r\n  -2 ^ 126 <= Z.shiftr x 62 + y0 * (z0 mod 2 ^ 62) + y1 * (z1 mod 2 ^ 62) <= 2 ^ 126 - 1).\r\n1:{\r\n  intros x y0 z0 y1 z1 Hx Hy0 Hy1.\r\n  clear -Hx Hy0 Hy1.\r\n  apply (shiftr_bounds (-2^65) _ (2^65) 62) in Hx.\r\n  assert (0 <= z0 mod 2^62 < 2^62) by (apply Z.mod_pos_bound; lia).\r\n  assert (0 <= z1 mod 2^62 < 2^62) by (apply Z.mod_pos_bound; lia).\r\n  nia.\r\n}\r\nassert (Hcd1' : -2 ^ 126 <= Z.shiftr cd0' 62 + divstep.Trans.u mtx * (Z.shiftr d 62 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundA;lia).\r\nassert (Hcd1'' : -2 ^ 126 <= Z.shiftr cd0' 62 + divstep.Trans.u mtx * (Z.shiftr d 62 mod 2 ^ 62) + divstep.Trans.v mtx * (Z.shiftr e 62 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundB;lia).\r\nassert (Hce1' : -2 ^ 126 <= Z.shiftr ce0' 62 + divstep.Trans.q mtx * (Z.shiftr d 62 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundA;lia).\r\nassert (Hce1'' : -2 ^ 126 <= Z.shiftr ce0' 62 + divstep.Trans.q mtx * (Z.shiftr d 62 mod 2 ^ 62) + divstep.Trans.r mtx * (Z.shiftr e 62 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundB;lia).\r\ndo 4 (forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]).\r\nforward;unfold Znth;simpl (temp _ _).\r\nset (dval := [Vlong _;Vlong _;Vlong _;Vlong _;Vlong _]).\r\nset (eval := [Vlong _;Vlong _;Vlong _;Vlong _;Vlong _]).\r\nset (tval := (Vlong _, (Vlong _, (Vlong _, Vlong _)))).\r\nset (mval := [Vlong _;Vlong _;Vlong _;Vlong _;Vlong _]).\r\nset (minvval := Vlong (Int64.repr (modInv m (2 ^ 62)))).\r\nset (m1 := Z.shiftr m 62 mod 2 ^ 62) in *.\r\nassert (Hm1 : 0 <= m1 < 2^62) by (apply Z.mod_pos_bound;lia).\r\nassert (Hm1md : -2 ^ 125 <= m1 * md <= 2^125) by (clear -Hm1 Hmd;nia).\r\nassert (Hm1me : -2 ^ 125 <= m1 * me <= 2^125) by (clear -Hm1 Hme;nia).\r\npose (cd1 := Z.shiftr cd0' 62 + divstep.Trans.u mtx * (Z.shiftr d 62 mod 2 ^ 62)\r\n        + divstep.Trans.v mtx * (Z.shiftr e 62 mod 2 ^ 62)\r\n        + m1 * md).\r\npose (ce1 := Z.shiftr ce0' 62 + divstep.Trans.q mtx * (Z.shiftr d 62 mod 2 ^ 62)\r\n          + divstep.Trans.r mtx * (Z.shiftr e 62 mod 2 ^ 62)\r\n          + m1 * me).\r\nassert (Hcd1 : -2 ^ 127 <= cd1 <= 2 ^ 127 - 1) by lia.\r\nassert (Hce1 : -2 ^ 127 <= ce1 <= 2 ^ 127 - 1) by lia.\r\nmatch goal with\r\n  | |- semax _ (PROPx nil (LOCALx ?L _)) _ _ =>\r\nforward_if (PROPx nil (LOCALx L (SEPx [\r\n   secp256k1_uint128_at Tsh ce1 v_ce;\r\n   secp256k1_uint128_at Tsh cd1 v_cd;\r\n   data_at shd t_secp256k1_modinv64_signed62 dval ptrd;\r\n   data_at she t_secp256k1_modinv64_signed62 eval ptre;\r\n   data_at sht t_secp256k1_modinv64_trans2x2 tval ptrt;\r\n   data_at shm t_secp256k1_modinv64_modinfo (mval, minvval) ptrm])))\r\nend.\r\n2:{\r\n  forward.\r\n  unfold cd1, ce1; replace m1 with 0;\r\n  [rewrite !Z.mul_0_l, !Z.add_0_r;apply ENTAIL_refl|].\r\n  symmetry.\r\n  revert H3.\r\n  apply repr_inj_unsigned64;rep_lia.\r\n}\r\n1:{\r\n  do 2(\r\n    forward;change (Znth 1 mval) with (Vlong (Int64.repr m1));\r\n    forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]\r\n  ).\r\n  fold cd1 ce1.\r\n  clear -m;entailer!!.\r\n}\r\ndo 2 (forward_call;progressC;forward_call).\r\nrewrite !Z.land_ones by lia.\r\nassert (Hcd2' : -2 ^ 126 <= Z.shiftr cd1 62 + divstep.Trans.u mtx * (Z.shiftr d 124 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundA;lia).\r\nassert (Hcd2'' : -2 ^ 126 <= Z.shiftr cd1 62 + divstep.Trans.u mtx * (Z.shiftr d 124 mod 2 ^ 62) + divstep.Trans.v mtx * (Z.shiftr e 124 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundB;lia).\r\nassert (Hce2' : -2 ^ 126 <= Z.shiftr ce1 62 + divstep.Trans.q mtx * (Z.shiftr d 124 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundA;lia).\r\nassert (Hce2'' : -2 ^ 126 <= Z.shiftr ce1 62 + divstep.Trans.q mtx * (Z.shiftr d 124 mod 2 ^ 62) + divstep.Trans.r mtx * (Z.shiftr e 124 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundB;lia).\r\ndo 4 (forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]).\r\nforward;unfold Znth;simpl (temp _ _).\r\nset (dval1 := (upd_Znth 0 dval (Vlong (Int64.repr (cd1 mod 2 ^ 62))))).\r\nset (eval1 := (upd_Znth 0 eval (Vlong (Int64.repr (ce1 mod 2 ^ 62))))).\r\nset (m2 := Z.shiftr m 124 mod 2 ^ 62) in *.\r\nassert (Hm2 : 0 <= m2 < 2^62) by (apply Z.mod_pos_bound;lia).\r\nassert (Hm2md : -2 ^ 125 <= m2 * md <= 2^125) by (clear -Hm2 Hmd;nia).\r\nassert (Hm2me : -2 ^ 125 <= m2 * me <= 2^125) by (clear -Hm2 Hme;nia).\r\npose (cd2 := Z.shiftr cd1 62 + divstep.Trans.u mtx * (Z.shiftr d 124 mod 2 ^ 62)\r\n        + divstep.Trans.v mtx * (Z.shiftr e 124 mod 2 ^ 62)\r\n        + m2 * md).\r\npose (ce2 := Z.shiftr ce1 62 + divstep.Trans.q mtx * (Z.shiftr d 124 mod 2 ^ 62)\r\n          + divstep.Trans.r mtx * (Z.shiftr e 124 mod 2 ^ 62)\r\n          + m2 * me).\r\nassert (Hcd2 : -2 ^ 127 <= cd2 <= 2 ^ 127 - 1) by lia.\r\nassert (Hce2 : -2 ^ 127 <= ce2 <= 2 ^ 127 - 1) by lia.\r\nmatch goal with\r\n  | |- semax _ (PROPx nil (LOCALx ?L _)) _ _ =>\r\nforward_if (PROPx nil (LOCALx L (SEPx [\r\n   secp256k1_uint128_at Tsh ce2 v_ce;\r\n   secp256k1_uint128_at Tsh cd2 v_cd;\r\n   data_at shd t_secp256k1_modinv64_signed62 dval1 ptrd;\r\n   data_at she t_secp256k1_modinv64_signed62 eval1 ptre;\r\n   data_at sht t_secp256k1_modinv64_trans2x2 tval ptrt;\r\n   data_at shm t_secp256k1_modinv64_modinfo (mval, minvval) ptrm])))\r\nend.\r\n2:{\r\n  forward.\r\n  unfold cd2, ce2; replace m2 with 0;\r\n  [rewrite !Z.mul_0_l, !Z.add_0_r;apply ENTAIL_refl|].\r\n  symmetry.\r\n  revert H3.\r\n  apply repr_inj_unsigned64;rep_lia.\r\n}\r\n1:{\r\n  do 2(\r\n    forward;change (Znth 2 mval) with (Vlong (Int64.repr m2));\r\n    forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]\r\n  ).\r\n  fold cd2 ce2.\r\n  clear -m;entailer!!.\r\n}\r\ndo 2 (forward_call;progressC;forward_call).\r\nrewrite !Z.land_ones by lia.\r\nassert (Hcd3' : -2 ^ 126 <= Z.shiftr cd2 62 + divstep.Trans.u mtx * (Z.shiftr d 186 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundA;lia).\r\nassert (Hcd3'' : -2 ^ 126 <= Z.shiftr cd2 62 + divstep.Trans.u mtx * (Z.shiftr d 186 mod 2 ^ 62) + divstep.Trans.v mtx * (Z.shiftr e 186 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundB;lia).\r\nassert (Hce3' : -2 ^ 126 <= Z.shiftr ce2 62 + divstep.Trans.q mtx * (Z.shiftr d 186 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundA;lia).\r\nassert (Hce3'' : -2 ^ 126 <= Z.shiftr ce2 62 + divstep.Trans.q mtx * (Z.shiftr d 186 mod 2 ^ 62) + divstep.Trans.r mtx * (Z.shiftr e 186 mod 2 ^ 62) <= 2 ^ 126 - 1) \r\n by (apply HboundB;lia).\r\ndo 4 (forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]).\r\nforward;unfold Znth;simpl (temp _ _).\r\nset (dval2 := (upd_Znth 1 dval1 (Vlong (Int64.repr (cd2 mod 2 ^ 62))))).\r\nset (eval2 := (upd_Znth 1 eval1 (Vlong (Int64.repr (ce2 mod 2 ^ 62))))).\r\nset (m3 := Z.shiftr m 186 mod 2 ^ 62) in *.\r\nassert (Hm3 : 0 <= m3 < 2^62) by (apply Z.mod_pos_bound;lia).\r\nassert (Hm3md : -2 ^ 125 <= m3 * md <= 2^125) by (clear -Hm3 Hmd;nia).\r\nassert (Hm3me : -2 ^ 125 <= m3 * me <= 2^125) by (clear -Hm3 Hme;nia).\r\npose (cd3 := Z.shiftr cd2 62 + divstep.Trans.u mtx * (Z.shiftr d 186 mod 2 ^ 62)\r\n        + divstep.Trans.v mtx * (Z.shiftr e 186 mod 2 ^ 62)\r\n        + m3 * md).\r\npose (ce3 := Z.shiftr ce2 62 + divstep.Trans.q mtx * (Z.shiftr d 186 mod 2 ^ 62)\r\n          + divstep.Trans.r mtx * (Z.shiftr e 186 mod 2 ^ 62)\r\n          + m3 * me).\r\nassert (Hcd3 : -2 ^ 127 <= cd3 <= 2 ^ 127 - 1) by lia.\r\nassert (Hce3 : -2 ^ 127 <= ce3 <= 2 ^ 127 - 1) by lia.\r\nmatch goal with\r\n  | |- semax _ (PROPx nil (LOCALx ?L _)) _ _ =>\r\nforward_if (PROPx nil (LOCALx L (SEPx [\r\n   secp256k1_uint128_at Tsh ce3 v_ce;\r\n   secp256k1_uint128_at Tsh cd3 v_cd;\r\n   data_at shd t_secp256k1_modinv64_signed62 dval2 ptrd;\r\n   data_at she t_secp256k1_modinv64_signed62 eval2 ptre;\r\n   data_at sht t_secp256k1_modinv64_trans2x2 tval ptrt;\r\n   data_at shm t_secp256k1_modinv64_modinfo (mval, minvval) ptrm])))\r\nend.\r\n2:{\r\n  forward.\r\n  unfold cd3, ce3; replace m3 with 0;\r\n  [rewrite !Z.mul_0_l, !Z.add_0_r;apply ENTAIL_refl|].\r\n  symmetry.\r\n  revert H3.\r\n  apply repr_inj_unsigned64;rep_lia.\r\n}\r\n1:{\r\n  do 2(\r\n    forward;change (Znth 3 mval) with (Vlong (Int64.repr m3));\r\n    forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]\r\n  ).\r\n  fold cd3 ce3.\r\n  clear -m;entailer!!.\r\n}\r\ndo 2 (forward_call;progressC;forward_call).\r\nrewrite !Z.land_ones by lia.\r\nassert (Hd248 : -2^61 <= Z.shiftr d 248 <= 2^61 - 1) by solve_bounds.\r\nassert (He248 : -2^61 <= Z.shiftr e 248 <= 2^61 - 1) by solve_bounds.\r\nassert (Hcd4' : -2 ^ 124 <= Z.shiftr cd3 62 + divstep.Trans.u mtx * Z.shiftr d 248 <= 2 ^ 124 - 1).\r\n1:{\r\n  rewrite <- strict_bounds in Hcd3.\r\n  apply (shiftr_bounds (-2^65) _ (2^65) 62) in Hcd3.\r\n  clear -Hd248 Hcd3 Huv; nia.\r\n}\r\nassert (Hcd4'' : -2 ^ 124 <= Z.shiftr cd3 62 + divstep.Trans.u mtx * Z.shiftr d 248 + divstep.Trans.v mtx * Z.shiftr e 248 <= 2 ^ 124 - 1).\r\n1:{\r\n  rewrite <- strict_bounds in Hcd3.\r\n  apply (shiftr_bounds (-2^65) _ (2^65) 62) in Hcd3.\r\n  clear -Hd248 He248 Hcd3 Huv; nia.\r\n}\r\nassert (Hce4' : -2 ^ 124 <= Z.shiftr ce3 62 + divstep.Trans.q mtx * Z.shiftr d 248 <= 2 ^ 124 - 1) .\r\n1:{\r\n  rewrite <- strict_bounds in Hce3.\r\n  apply (shiftr_bounds (-2^65) _ (2^65) 62) in Hce3.\r\n  clear -Hd248 Hce3 Hqr; nia.\r\n}\r\nassert (Hce4'' : -2 ^ 124 <= Z.shiftr ce3 62 + divstep.Trans.q mtx * Z.shiftr d 248 + divstep.Trans.r mtx * Z.shiftr e 248 <= 2 ^ 124 - 1) .\r\n1:{\r\n  rewrite <- strict_bounds in Hce3.\r\n  apply (shiftr_bounds (-2^65) _ (2^65) 62) in Hce3.\r\n  clear -Hd248 He248 Hce3 Hqr; nia.\r\n}\r\ndo 4 (forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]).\r\nset (dval3 := (upd_Znth 2 dval2 (Vlong (Int64.repr (cd3 mod 2 ^ 62))))).\r\nset (eval3 := (upd_Znth 2 eval2 (Vlong (Int64.repr (ce3 mod 2 ^ 62))))).\r\nset (m4 := Z.shiftr m 248) in *.\r\nassert (Hm4 : 0 <= m4 <= 2^61) by (unfold m4;solve_bounds).\r\nassert (Hm4md : -2 ^ 124 <= m4 * md <= 2^124) by (clear -Hm4 Hmd;nia).\r\nassert (Hm4me : -2 ^ 124 <= m4 * me <= 2^124) by (clear -Hm4 Hme;nia).\r\npose (cd4 := Z.shiftr cd3 62 + divstep.Trans.u mtx * Z.shiftr d 248\r\n        + divstep.Trans.v mtx * Z.shiftr e 248\r\n        + m4 * md).\r\npose (ce4 := Z.shiftr ce3 62 + divstep.Trans.q mtx * Z.shiftr d 248\r\n          + divstep.Trans.r mtx * Z.shiftr e 248\r\n          + m4 * me).\r\nassert (Hcd4 : -2 ^ 125 <= cd4 <= 2 ^ 125 - 1) by lia.\r\nassert (Hce4 : -2 ^ 125 <= ce4 <= 2 ^ 125 - 1) by lia.\r\ndo 2(\r\n  forward;change (Znth 4 mval) with (Vlong (Int64.repr m4));\r\n  forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]\r\n).\r\nfold cd4 ce4.\r\ndo 2 (forward_call;progressC;forward_call;[change Int128_min_signed with (-2^127);change Int128_max_signed with (2^127-1);solve_bounds|]).\r\nrewrite !Z.land_ones by lia.\r\ndo 2 (forward_call;[solve_bounds|forward]).\r\nset (dval4 := (upd_Znth 4 _ _)).\r\nset (eval4 := (upd_Znth 4 _ _)).\r\nassert (Hcarry : forall n a x y z, 0 <= n ->\r\n a = Z.shiftr (x * (d mod 2^(n+62))\r\n                     + y * (e mod 2^(n+62))\r\n                     + (m mod 2^(n+62)) * z) n ->\r\n Z.shiftr a 62 + x * (Z.shiftr d (n+62) mod 2 ^ 62)\r\n       + y * (Z.shiftr e (n+62) mod 2 ^ 62)\r\n       + (Z.shiftr m (n+62) mod 2 ^ 62) * z \r\n   = Z.shiftr (x * (d mod 2^(n+124))\r\n                     + y * (e mod 2^(n+124))\r\n                     + (m mod 2^(n+124)) * z) (n+62)).\r\n1:{\r\n  intros n a x y z Hn ->.\r\n  rewrite !Z.shiftr_div_pow2 by lia.\r\n  rewrite Z.div_div by lia.\r\n  rewrite <-!Z.add_assoc, Z.add_comm, !Z.add_assoc, <- Z.div_add_l, <-!Z.pow_add_r by lia.\r\n  replace ((x * ((d / 2 ^ (n + 62)) mod 2 ^ 62)\r\n  + y * ((e / 2 ^ (n + 62)) mod 2 ^ 62)\r\n  + (m / 2 ^ (n + 62)) mod 2 ^ 62 * z)\r\n * 2 ^ (n + 62)\r\n + (x * (d mod 2 ^ (n + 62)) + y * (e mod 2 ^ (n + 62))\r\n      + m mod 2 ^ (n + 62) * z))\r\n  with (x * (d mod 2 ^ (n + 62) + 2 ^ (n + 62) * ((d / 2 ^ (n + 62)) mod 2 ^ 62))\r\n + y * (e mod 2 ^ (n + 62) + 2 ^ (n + 62) * ((e / 2 ^ (n + 62)) mod 2 ^ 62))\r\n      + (m mod 2 ^ (n + 62) + 2 ^ (n + 62) * ((m / 2 ^ (n + 62)) mod 2 ^ 62)) * z)\r\n  by ring.\r\n  rewrite <-!Z.rem_mul_r, <-!Z.pow_add_r, <-!Z.add_assoc by lia.\r\n  reflexivity.\r\n}\r\nassert (Hcd124 : cd1 = Z.shiftr (divstep.Trans.u mtx * (d mod 2^124)\r\n                     + divstep.Trans.v mtx * (e mod 2^124)\r\n                     + (m mod 2^124) * md) 62)\r\nby (apply (Hcarry 0);[lia|reflexivity]).\r\nassert (Hce124 : ce1 = Z.shiftr (divstep.Trans.q mtx * (d mod 2^124)\r\n                     + divstep.Trans.r mtx * (e mod 2^124)\r\n                     + (m mod 2^124) * me) 62)\r\nby (apply (Hcarry 0);[lia|reflexivity]).\r\nassert (Hcd186 : cd2 = Z.shiftr (divstep.Trans.u mtx * (d mod 2^186)\r\n                     + divstep.Trans.v mtx * (e mod 2^186)\r\n                     + (m mod 2^186) * md) 124) by\r\n(apply (Hcarry 62);[lia|assumption]).\r\nassert (Hce186 : ce2 = Z.shiftr (divstep.Trans.q mtx * (d mod 2^186)\r\n                     + divstep.Trans.r mtx * (e mod 2^186)\r\n                     + (m mod 2^186) * me) 124) by\r\n(apply (Hcarry 62);[lia|assumption]).\r\nassert (Hcd248 : cd3 = Z.shiftr (divstep.Trans.u mtx * (d mod 2^248)\r\n                     + divstep.Trans.v mtx * (e mod 2^248)\r\n                     + (m mod 2^248) * md) 186) by\r\n(apply (Hcarry 124);[lia|assumption]).\r\nassert (Hce248 : ce3 = Z.shiftr (divstep.Trans.q mtx * (d mod 2^248)\r\n                     + divstep.Trans.r mtx * (e mod 2^248)\r\n                     + (m mod 2^248) * me) 186) by\r\n(apply (Hcarry 124);[lia|assumption]).\r\nassert (Hcd310 : cd4 = Z.shiftr (divstep.Trans.u mtx * d\r\n                     + divstep.Trans.v mtx * e\r\n                     + m * md) 248).\r\n1:{\r\n  unfold cd4, m4.\r\n  symmetry.\r\n  rewrite (Z_div_mod_eq_full d (2^248)) at 1.\r\n  rewrite (Z_div_mod_eq_full e (2^248)) at 1.\r\n  rewrite (Z_div_mod_eq_full m (2^248)) at 1.\r\n  replace (divstep.Trans.u mtx * (2 ^ 248 * (d / 2 ^ 248) + d mod 2 ^ 248)\r\n     + divstep.Trans.v mtx * (2 ^ 248 * (e / 2 ^ 248) + e mod 2 ^ 248)\r\n     + (2 ^ 248 * (m / 2 ^ 248) + m mod 2 ^ 248) * md)\r\n   with\r\n    ((divstep.Trans.u mtx * (d / 2 ^ 248) + divstep.Trans.v mtx * (e / 2 ^ 248) + (m / 2 ^ 248) * md) * 2^248\r\n     + (divstep.Trans.u mtx * (d mod 2 ^ 248) + divstep.Trans.v mtx * (e mod 2 ^ 248) + (m mod 2 ^ 248) * md))\r\n   by ring.\r\n  rewrite Hcd248, Z.shiftr_shiftr, !Z.shiftr_div_pow2, Z.div_add_l by lia.\r\n  change (186 + 62) with 248.\r\n  ring.\r\n}\r\nassert (Hce310 : ce4 = Z.shiftr (divstep.Trans.q mtx * d\r\n                     + divstep.Trans.r mtx * e\r\n                     + m * me) 248).\r\n1:{\r\n  unfold ce4, m4.\r\n  symmetry.\r\n  rewrite (Z_div_mod_eq_full d (2^248)) at 1.\r\n  rewrite (Z_div_mod_eq_full e (2^248)) at 1.\r\n  rewrite (Z_div_mod_eq_full m (2^248)) at 1.\r\n  replace (divstep.Trans.q mtx * (2 ^ 248 * (d / 2 ^ 248) + d mod 2 ^ 248)\r\n     + divstep.Trans.r mtx * (2 ^ 248 * (e / 2 ^ 248) + e mod 2 ^ 248)\r\n     + (2 ^ 248 * (m / 2 ^ 248) + m mod 2 ^ 248) * me)\r\n   with\r\n    ((divstep.Trans.q mtx * (d / 2 ^ 248) + divstep.Trans.r mtx * (e / 2 ^ 248) + (m / 2 ^ 248) * me) * 2^248\r\n     + (divstep.Trans.q mtx * (d mod 2 ^ 248) + divstep.Trans.r mtx * (e mod 2 ^ 248) + (m mod 2 ^ 248) * me))\r\n   by ring.\r\n  rewrite Hce248, Z.shiftr_shiftr, !Z.shiftr_div_pow2, Z.div_add_l by lia.\r\n  change (186 + 62) with 248.\r\n  ring.\r\n}\r\nset (cd := divstep.Trans.u mtx * d + divstep.Trans.v mtx * e + m * md) in *.\r\nset (ce := divstep.Trans.q mtx * d + divstep.Trans.r mtx * e + m * me) in *.\r\nreplace dval4 with (map Vlong (Signed62.reprn 5 (Z.shiftr cd 62))).\r\n2:{\r\n  cbn.\r\n  rewrite !Z.shiftr_shiftr by lia.\r\n  change dval4 with\r\n  [ (Vlong (Int64.repr (cd1 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (cd2 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (cd3 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (cd4 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (Z.shiftr cd4 62)))\r\n  ].\r\n  cbn.\r\n  rewrite <-!Z.land_ones by lia.\r\n  rewrite Hcd124, Hcd186, Hcd248, Hcd310.\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 124) 62).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 186) 124).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 248) 186).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 310) 248).\r\n  symmetry.\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 124) 62).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 186) 124).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 248) 186).\r\n  rewrite !Z.land_ones by lia.\r\n  repeat (apply eqm_refl || apply Zmod_eqm || apply Zplus_eqm || apply Zmult_eqm || f_equal).\r\n}\r\nreplace eval4 with (map Vlong (Signed62.reprn 5 (Z.shiftr ce 62))).\r\n2:{\r\n  cbn.\r\n  rewrite !Z.shiftr_shiftr by lia.\r\n  change eval4 with\r\n  [ (Vlong (Int64.repr (ce1 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (ce2 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (ce3 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (ce4 mod 2 ^ 62)))\r\n  ; (Vlong (Int64.repr (Z.shiftr ce4 62)))\r\n  ].\r\n  cbn.\r\n  rewrite <-!Z.land_ones by lia.\r\n  rewrite Hce124, Hce186, Hce248, Hce310.\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 124) 62).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 186) 124).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 248) 186).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 310) 248).\r\n  symmetry.\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 124) 62).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 186) 124).\r\n  rewrite <-(Z.shiftr_land _ (Z.ones 248) 186).\r\n  rewrite !Z.land_ones by lia.\r\n  repeat (apply eqm_refl || apply Zmod_eqm || apply Zplus_eqm || apply Zmult_eqm || f_equal).\r\n}\r\nassert (Hcd' : cd = (divstep.Trans.u mtx * (d + if d <? 0 then m else 0)\r\n                  + divstep.Trans.v mtx * (e + if e <? 0 then m else 0)\r\n                  - m * ((modInv m (2 ^ 62) * cd0 + md0) mod 2^62))).\r\n1:{\r\n  unfold cd, md.\r\n  set (X := modInv _ _ * _ + _).\r\n  unfold md0.\r\n  destruct (d <? 0);destruct (e <? 0);ring.\r\n}\r\nassert (Hce' : ce = (divstep.Trans.q mtx * (d + if d <? 0 then m else 0)\r\n                  + divstep.Trans.r mtx * (e + if e <? 0 then m else 0)\r\n                  - m * ((modInv m (2 ^ 62) * ce0 + me0) mod 2^62))).\r\n1:{\r\n  unfold ce, me.\r\n  set (X := modInv _ _ * _ + _).\r\n  unfold me0.\r\n  destruct (d <? 0);destruct (e <? 0);ring.\r\n}\r\nreplace (Z.shiftr cd 62) with (fst (divstep.update_de m d e mtx)) in *.\r\n2:{\r\n  unfold divstep.update_de.\r\n  rewrite <-!Z.shiftr_div_pow2 by lia.\r\n  cbn.\r\n  rewrite Hcd'.\r\n  f_equal.\r\n  f_equal.\r\n  rewrite Z.mul_comm; f_equal.\r\n  transitivity\r\n   (((if d <? 0 then (divstep.Trans.u mtx * (modInv m (2 ^ 62) * d + modInv m (2 ^ 62) * m)) mod 2^62 else (modInv m (2 ^ 62) * (divstep.Trans.u mtx * d)) mod 2^62)\r\n   + (if e <? 0 then (divstep.Trans.v mtx * (modInv m (2 ^ 62) * e + modInv m (2 ^ 62) * m)) mod 2^62 else (modInv m (2 ^ 62) * (divstep.Trans.v mtx * e)) mod 2^62))\r\n   mod 2^62);\r\n  [destruct (d <? 0); destruct (e <? 0);rewrite <-!Z.add_mod by lia;f_equal;ring|].\r\n  rewrite <- (Zmult_mod_idemp_r _ (divstep.Trans.u mtx)), <- (Zmult_mod_idemp_r _ (divstep.Trans.v mtx)), <-!(Zplus_mod_idemp_r (_ * m)).\r\n  rewrite modInv_mul_l, Hoddm by lia.\r\n  transitivity (((if d <? 0\r\n  then\r\n   (divstep.Trans.u mtx * ((modInv m (2 ^ 62) * (d mod 2 ^ 62) + 1)))\r\n  else (modInv m (2 ^ 62) * (divstep.Trans.u mtx * (d mod 2 ^ 62))))\r\n   + (if e <? 0\r\n      then\r\n       (divstep.Trans.v mtx * ((modInv m (2 ^ 62) * (e mod 2 ^ 62) + 1)))\r\n      else (modInv m (2 ^ 62) * (divstep.Trans.v mtx * (e mod 2 ^ 62))))) mod \r\n    2 ^ 62);\r\n  [destruct (d <? 0); destruct (e <? 0);\r\n    repeat (apply eqm_refl || apply Zmod_eqm || apply Zplus_eqm || apply Zmult_eqm || (unfold eqm; rewrite Zmod_mod))\r\n  |].\r\n  unfold cd0, md0.\r\n  f_equal.\r\n  destruct (d <? 0); destruct (e <? 0); ring.\r\n}\r\nreplace (Z.shiftr ce 62) with (snd (divstep.update_de m d e mtx)) in *.\r\n2:{\r\n  unfold divstep.update_de.\r\n  rewrite <-!Z.shiftr_div_pow2 by lia.\r\n  cbn.\r\n  rewrite Hce'.\r\n  f_equal.\r\n  f_equal.\r\n  rewrite Z.mul_comm; f_equal.\r\n  transitivity\r\n   (((if d <? 0 then (divstep.Trans.q mtx * (modInv m (2 ^ 62) * d + modInv m (2 ^ 62) * m)) mod 2^62 else (modInv m (2 ^ 62) * (divstep.Trans.q mtx * d)) mod 2^62)\r\n   + (if e <? 0 then (divstep.Trans.r mtx * (modInv m (2 ^ 62) * e + modInv m (2 ^ 62) * m)) mod 2^62 else (modInv m (2 ^ 62) * (divstep.Trans.r mtx * e)) mod 2^62))\r\n   mod 2^62);\r\n  [destruct (d <? 0); destruct (e <? 0);rewrite <-!Z.add_mod by lia;f_equal;ring|].\r\n  rewrite <- (Zmult_mod_idemp_r _ (divstep.Trans.q mtx)), <- (Zmult_mod_idemp_r _ (divstep.Trans.r mtx)), <-!(Zplus_mod_idemp_r (_ * m)).\r\n  rewrite modInv_mul_l, Hoddm by lia.\r\n  transitivity (((if d <? 0\r\n  then\r\n   (divstep.Trans.q mtx * ((modInv m (2 ^ 62) * (d mod 2 ^ 62) + 1)))\r\n  else (modInv m (2 ^ 62) * (divstep.Trans.q mtx * (d mod 2 ^ 62))))\r\n   + (if e <? 0\r\n      then\r\n       (divstep.Trans.r mtx * ((modInv m (2 ^ 62) * (e mod 2 ^ 62) + 1)))\r\n      else (modInv m (2 ^ 62) * (divstep.Trans.r mtx * (e mod 2 ^ 62))))) mod \r\n    2 ^ 62);\r\n  [destruct (d <? 0); destruct (e <? 0);\r\n    repeat (apply eqm_refl || apply Zmod_eqm || apply Zplus_eqm || apply Zmult_eqm || (unfold eqm; rewrite Zmod_mod))\r\n  |].\r\n  unfold ce0, me0.\r\n  f_equal.\r\n  destruct (d <? 0); destruct (e <? 0); ring.\r\n}\r\nrewrite <- Zodd_equiv in H.\r\ndestruct (divstep.update_de_bound m d e mtx) as [Hcdm Hcem]; try assumption.\r\nassert (Hcd62 : -2 ^ (62 * Z.of_nat 5 + 1) <= fst (divstep.update_de m d e mtx) <= 2 ^ (62 * Z.of_nat 5 + 1) - 1) by lia.\r\nassert (Hce62 : -2 ^ (62 * Z.of_nat 5 + 1) <= snd (divstep.update_de m d e mtx) <= 2 ^ (62 * Z.of_nat 5 + 1) - 1) by lia.\r\nchange mval with (map Vlong (Signed62.reprn 5 m)).\r\nforward_verify_check.\r\n1:{\r\n  unfold_data_at (data_at _ _ _ ptrm).\r\n  assert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\r\n  change mval with (map Vlong (Signed62.reprn 5 m)).\r\n  forward_call (fst (divstep.update_de m d e mtx), 5%nat, m, -2, ptrd, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, shd, shm);\r\n  [rewrite field_address_offset by assumption;entailer!|].\r\n  rewrite Zaux.Zcompare_Gt by lia.\r\n  forward_if;[discriminate|forward].\r\n  unfold_data_at (data_at _ _ _ ptrm).\r\n  entailer!!.\r\n}\r\nforward_verify_check.\r\n1:{\r\n  unfold_data_at (data_at _ _ _ ptrm).\r\n  assert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\r\n  forward_call (fst (divstep.update_de m d e mtx), 5%nat, m, 1, ptrd, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, shd, shm);\r\n  [rewrite field_address_offset by assumption;entailer!|].\r\n  rewrite Zaux.Zcompare_Lt by lia.\r\n  forward_if;[discriminate|forward].\r\n  unfold_data_at (data_at _ _ _ ptrm).\r\n  entailer!!.\r\n}\r\nforward_verify_check.\r\n1:{\r\n  unfold_data_at (data_at _ _ _ ptrm).\r\n  assert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\r\n  forward_call (snd (divstep.update_de m d e mtx), 5%nat, m, -2, ptre, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, she, shm);\r\n  [rewrite field_address_offset by assumption;entailer!|].\r\n  rewrite Zaux.Zcompare_Gt by lia.\r\n  forward_if;[discriminate|forward].\r\n  unfold_data_at (data_at _ _ _ ptrm).\r\n  entailer!!.\r\n}\r\nforward_verify_check.\r\nunfold_data_at (data_at _ _ _ ptrm).\r\nassert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm);[entailer!|].\r\nforward_call (snd (divstep.update_de m d e mtx), 5%nat, m, 1, ptre, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) ptrm, she, shm);\r\n[rewrite field_address_offset by assumption;entailer!|].\r\nrewrite Zaux.Zcompare_Lt by lia.\r\nmatch goal with\r\n| |- semax _ ?E _ _ => forward_if E;[discriminate|forward;entailer!!|]\r\nend.\r\nforward.\r\nunfold_data_at (data_at _ _ _ ptrm).\r\nentailer!!.\r\nunfold secp256k1_uint128_at, t_secp256k1_uint128.\r\nset (X := (_,_)).\r\nset (Y := (_,_)).\r\nclearbody X Y.\r\nclear -X Y.\r\napply sepcon_derives;apply data_at_data_at_.\r\nQed.\r\n\r\nLemma body_modinv64_update_fg_62_var: semax_body Vprog Gprog f_secp256k1_modinv64_update_fg_62_var secp256k1_modinv64_update_fg_62_var_spec.\r\nProof.\r\nstart_function.\r\nset (f := divstep.f st).\r\nset (g := divstep.g st).\r\nunfold Trans_repr.\r\ndo 5 forward.\r\nforward_verify_check.\r\n1:{\r\n  revert H2.\r\n  convert_C_to_math.\r\n  elim Z.ltb_spec; try discriminate.\r\n  lia.\r\n}\r\nassert (HZnth : forall a i, 0 <= i < Z.of_nat len ->\r\n        Znth i (Signed62.reprn len a) =\r\n        Int64.repr (Z.shiftr (if Z.of_nat len =? i + 1 then a else a mod 2^(62 * (i + 1))) (62 * i))).\r\n1:{\r\n  intros a i Hi.\r\n  rewrite f_if, (f_if (fun f => f (62 * i))).\r\n  rewrite Z.mul_add_distr_l, (Z.add_comm (62 * i)), <- Z_shiftr_mod_2 by lia.\r\n  assert (Ha := Signed62.reprn_Zlength len a).\r\n  elim (Z.eqb_spec); intros Hlen.\r\n  * replace i with (Z.of_nat len - 1)%Z by lia.\r\n    rewrite <- Ha at 1.\r\n    rewrite Znth_last, Signed62.reprn_last by lia.\r\n    reflexivity.\r\n  * rewrite Signed62.reprn_Znth by lia.\r\n    reflexivity.\r\n}\r\nassert (HZnth0 : forall a, @Znth _ Vundef 0 (Signed62.pad (Signed62.reprn len a)) =\r\n        Vlong (Int64.repr (if Z.of_nat len =? 1 then a else a mod 2^62))).\r\n1:{\r\n  intros a.\r\n  specialize (HZnth a 0).\r\n  rewrite Z.shiftr_0_r in HZnth.\r\n  assert (Ha := Signed62.reprn_Zlength len a).\r\n  rewrite Signed62.pad_nth by lia.\r\n  destruct len;[lia|]. \r\n  destruct len.\r\n  * rewrite HZnth by lia.\r\n    reflexivity.\r\n  * replace (Z.of_nat (S (S len)) =? 0 + 1) with false in HZnth by\r\n    (symmetry;apply Z.eqb_neq; lia).\r\n    rewrite HZnth by lia.\r\n    rewrite <- zeq_eqb.\r\n    destruct zeq;try reflexivity.\r\n    lia.\r\n}\r\nforward;[rewrite HZnth0;entailer!!|].\r\nforward;[rewrite (HZnth0 g);entailer!!|].\r\nfold t_secp256k1_uint128.\r\nrewrite (HZnth0 f), (HZnth0 g).\r\nclear HZnth0.\r\npose (fi := fun i => if Z.of_nat len =? i then f else f mod 2^(62*i)).\r\npose (gi := fun i => if Z.of_nat len =? i then g else g mod 2^(62*i)).\r\nchange (if Z.of_nat len =? 1 then f else _) with (fi 1).\r\nchange (if Z.of_nat len =? 1 then g else _) with (gi 1).\r\nassert (Hfij : forall i j, j <= Z.of_nat len -> 0 <= i < j -> (fi j) mod 2^(62 * i) = fi i).\r\n1:{\r\n intros i j Hj Hij.\r\n unfold fi.\r\n replace (Z.of_nat len =? i) with false by lia.\r\n destruct (Z.of_nat len =? j); try reflexivity.\r\n rewrite <- !Z.land_ones, <- Z.land_assoc, Z_land_ones_min, Z.min_r by lia.\r\n reflexivity.\r\n}\r\nassert (Hgij : forall i j, j <= Z.of_nat len -> 0 <= i < j -> (gi j) mod 2^(62 * i) = gi i).\r\n1:{\r\n intros i j Hj Hij.\r\n unfold gi.\r\n replace (Z.of_nat len =? i) with false by lia.\r\n destruct (Z.of_nat len =? j); try reflexivity.\r\n rewrite <- !Z.land_ones, <- Z.land_assoc, Z_land_ones_min, Z.min_r by lia.\r\n reflexivity.\r\n}\r\nassert (Hfi : forall i, 0 <= i -> -2 ^ (62*i + 1) <= fi i <= 2 ^ (62*i + 1) - 1).\r\n1:{\r\n intros i Hi.\r\n unfold fi.\r\n elim Z.eqb_spec;[intros <-; lia|intros _].\r\n cut (0 <= f mod 2 ^ (62 * i) <= 2 ^ (62 * i) - 1);\r\n [rewrite Z.pow_add_r;lia|solve_bounds].\r\n}\r\nassert (Hgi : forall i, 0 <= i -> -2 ^ (62*i + 1) <= gi i <= 2 ^ (62*i + 1) - 1).\r\n1:{\r\n intros i Hi.\r\n unfold gi.\r\n elim Z.eqb_spec;[intros <-; lia|intros _].\r\n cut (0 <= g mod 2 ^ (62 * i) <= 2 ^ (62 * i) - 1);\r\n [rewrite Z.pow_add_r;lia|solve_bounds].\r\n}\r\nassert (Hf1 := Hfi 1).\r\nassert (Hg1 := Hgi 1).\r\ndestruct (divstep.Trans.bounded_transN 62 st) as [[Huv Huv'] [Hqr Hqr']].\r\nset (u := divstep.Trans.u (divstep.Trans.transN 62 st)) in *.\r\nset (v := divstep.Trans.v (divstep.Trans.transN 62 st)) in *.\r\nset (q := divstep.Trans.q (divstep.Trans.transN 62 st)) in *.\r\nset (r := divstep.Trans.r (divstep.Trans.transN 62 st)) in *.\r\nset (T := (Vlong (Int64.repr u),(Vlong (Int64.repr v),\r\n       (Vlong (Int64.repr q), Vlong (Int64.repr r))))).\r\nassert (H6262i : forall a b x y, -2 ^ a <= x <= 2 ^ a -> -2 ^ b <= y <= 2 ^ b ->\r\n  -(2 ^ a * 2 ^ b) <= x * y <= 2 ^ a * 2 ^ b).\r\n1:{\r\n intros a b x y Hx Hy.\r\n rewrite <- Z.abs_le in *.\r\n rewrite Z.abs_mul.\r\n etransitivity;[apply Z.mul_le_mono_nonneg_l;[|apply Hy]|apply Z.mul_le_mono_nonneg_r];lia.\r\n}\r\nassert (Hufi : forall i, 0 <= i -> -(2 ^ 62 * 2^(62 * i + 1)) <= u * fi i <= 2 ^ 62 * 2^(62 * i + 1))\r\n by (intros;specialize (Hfi i);apply H6262i;lia).\r\nassert (Hvgi : forall i, 0 <= i -> -(2 ^ 62 * 2^(62 * i + 1)) <= v * gi i <= 2 ^ 62 * 2^(62 * i + 1))\r\n by (intros;specialize (Hgi i);apply H6262i;lia).\r\nassert (Huf1 := Hufi 1).\r\nassert (Hvg1 := Hvgi 1).\r\nforward_call (v_cf, Tsh, u, fi 1).\r\nforward_call.\r\n1: unfold Int128_min_signed, Int128_max_signed;lia.\r\nassert (Hqfi : forall i, 0 <= i -> -(2 ^ 62 * 2^(62 * i + 1)) <= q * fi i <= 2 ^ 62 * 2^(62 * i + 1))\r\n by (intros;specialize (Hfi i);apply H6262i;lia).\r\nassert (Hrgi : forall i, 0 <= i -> -(2 ^ 62 * 2^(62 * i + 1)) <= r * gi i <= 2 ^ 62 * 2^(62 * i + 1))\r\n by (intros;specialize (Hgi i);apply H6262i;lia).\r\nassert (Hqf1 := Hqfi 1).\r\nassert (Hrg1 := Hrgi 1).\r\nforward_call (v_cg, Tsh, q, fi 1).\r\nforward_call.\r\n1: unfold Int128_min_signed, Int128_max_signed;lia.\r\nchange (Int64.shru _ _) with (Int64.repr (Z.ones 62)).\r\nset (f1 := divstep.f (fst (divstep.stepN 62 st))).\r\nset (g1 := divstep.g (fst (divstep.stepN 62 st))).\r\nassert (Hfg := divstep.Trans.transN_step 62 st).\r\ninjection Hfg as Htransf Htransg.\r\nchange (2^62 * f1 = u*f + v*g) in Htransf.\r\nchange (2^62 * g1 = q*f + r*g) in Htransg.\r\nassert (Hfi62 : forall i, 0 <= i -> fi i mod 2^(62*i) = f mod 2^(62*i)) by\r\n (intros; unfold fi; destruct Z.eqb; rewrite ?Zmod_mod; reflexivity).\r\nassert (Hgi62 : forall i, 0 <= i -> gi i mod 2^(62*i) = g mod 2^(62*i)) by\r\n (intros; unfold gi; destruct Z.eqb; rewrite ?Zmod_mod; reflexivity).\r\nforward_verify_check.\r\n1:{\r\n  forward_call.\r\n  forward_if;[|forward;entailer!!].\r\n  exfalso.\r\n  revert H2.\r\n  convert_C_to_math.\r\n  change (_ + _) with (u*(fi 1) + v*(gi 1)).\r\n  rewrite <-(Z.land_ones _ 64), <-Z.land_assoc by lia.\r\n  change (Z.land (Z.ones _) _) with (Z.ones 62).\r\n  rewrite Z.land_ones by lia.\r\n  rewrite <- Zplus_mod_idemp_l, <- Zmult_mod_idemp_r, Hfi62,\r\n          Zmult_mod_idemp_r, Zplus_mod_idemp_l by lia.\r\n  rewrite <- Zplus_mod_idemp_r, <- Zmult_mod_idemp_r, Hgi62,\r\n          Zmult_mod_idemp_r, Zplus_mod_idemp_r by lia.\r\n  rewrite <- Htransf, Z.mul_comm, Z_mod_mult, Z.eqb_refl.\r\n  discriminate.\r\n}\r\nforward_call.\r\n1: unfold Int128_min_signed, Int128_max_signed;lia.\r\nforward_verify_check.\r\n1:{\r\n  forward_call.\r\n  forward_if;[|forward;entailer!!].\r\n  exfalso.\r\n  revert H2.\r\n  convert_C_to_math.\r\n  change (_ + _) with (q*(fi 1) + r*(gi 1)).\r\n  rewrite <-(Z.land_ones _ 64), <-Z.land_assoc by lia.\r\n  change (Z.land (Z.ones _) _) with (Z.ones 62).\r\n  rewrite Z.land_ones by lia.\r\n  rewrite <- Zplus_mod_idemp_l, <- Zmult_mod_idemp_r, Hfi62,\r\n          Zmult_mod_idemp_r, Zplus_mod_idemp_l by lia.\r\n  rewrite <- Zplus_mod_idemp_r, <- Zmult_mod_idemp_r, Hgi62,\r\n          Zmult_mod_idemp_r, Zplus_mod_idemp_r by lia.\r\n  rewrite <- Htransg, Z.mul_comm, Z_mod_mult, Z.eqb_refl.\r\n  discriminate.\r\n}\r\nforward_call.\r\n1: unfold Int128_min_signed, Int128_max_signed;lia.\r\nassert (Hlength_firstn_skipn : forall n m x y,\r\n    Zlength (firstn (Z.to_nat n) (Signed62.reprn m x) ++ skipn (Z.to_nat n) (Signed62.reprn m y)) = Z.of_nat m)\r\n  by (intros; rewrite Zlength_app, Zlength_firstn, Zlength_skipn, !Signed62.reprn_Zlength; lia).\r\nforward_for_simple_bound (Z.of_nat len)\r\n(EX i:Z, PROP ( )\r\n   LOCAL (temp _r (Vlong (Int64.repr r));\r\n   temp _q (Vlong (Int64.repr q)); temp _v (Vlong (Int64.repr v));\r\n   temp _u (Vlong (Int64.repr u));\r\n   temp _M62 (Vlong (Int64.repr (Z.ones 62)));\r\n   lvar _cg t_secp256k1_uint128 v_cg; lvar _cf t_secp256k1_uint128 v_cf;\r\n   temp _len (Vint (Int.repr (Z.of_nat len))); \r\n   temp _f ptrf; temp _g ptrg; temp _t ptrt)\r\n   SEP (secp256k1_uint128_at Tsh (Z.shiftr (q * (fi i) + r * (gi i)) (62*i)) v_cg;\r\n   secp256k1_uint128_at Tsh (Z.shiftr (u * (fi i) + v * (gi i)) (62*i)) v_cf;\r\n   data_at shf t_secp256k1_modinv64_signed62\r\n     (Signed62.pad (firstn (Z.to_nat (i - 1)) (Signed62.reprn len ((u * f + v * g) / 2^62)) ++ skipn (Z.to_nat (i - 1)) (Signed62.reprn len f))) ptrf;\r\n   data_at shg t_secp256k1_modinv64_signed62\r\n     (Signed62.pad (firstn (Z.to_nat (i - 1)) (Signed62.reprn len ((q * f + r * g) / 2^62)) ++ skipn (Z.to_nat (i - 1)) (Signed62.reprn len g))) ptrg;\r\n   data_at sht t_secp256k1_modinv64_trans2x2 T ptrt))%assert.  \r\n* entailer!!.\r\n* do 2 (forward;rewrite !Signed62.pad_nth by (rewrite Hlength_firstn_skipn;lia);try entailer).\r\n  rewrite !Znth_app2;rewrite !Zlength_firstn; try lia.\r\n  rewrite !Signed62.reprn_Zlength, !Znth_skipn by lia.\r\n  replace (i - Z.min (Z.max 0 (i - 1)) (Z.of_nat len) + (i - 1)) with i by lia.\r\n  rewrite !HZnth by lia.\r\n  fold (fi (i + 1)) (gi (i + 1)).\r\n  assert (Hi01 : 0 <= i + 1) by lia.\r\n  assert (Hi0 : 0 <= i) by lia.\r\n  specialize (Hfi _ Hi01);\r\n  specialize (Hgi _ Hi01).\r\n  rewrite !Z.mul_add_distr_l, !Z.pow_add_r in Hfi, Hgi by lia.\r\n  assert (Hfi_boundA : -2^63 <= Z.shiftr (fi (i + 1)) (62 * i) <= 2^63) by solve_bounds.\r\n  assert (Hfi_boundB : -(2^62 * 2^63) <= u * Z.shiftr (fi (i + 1)) (62 * i) <= 2^62 * 2^63) by (apply H6262i; lia).\r\n  assert (Hgi_boundA : -2^63 <= Z.shiftr (gi (i + 1)) (62 * i) <= 2^63) by solve_bounds.\r\n  assert (Hgi_boundB : -(2^62 * 2^63) <= v * Z.shiftr (gi (i + 1)) (62 * i) <= 2^62 * 2^63) by (apply H6262i; lia).\r\n  specialize (Hufi _ Hi0);\r\n  specialize (Hvgi _ Hi0);\r\n  specialize (Hqfi _ Hi0);\r\n  specialize (Hrgi _ Hi0).\r\n  rewrite !Z.pow_add_r in Hufi, Hvgi, Hqfi, Hrgi by lia.\r\n  assert (Hfgi_boundA : -2^64 <= Z.shiftr (u * fi i + v * gi i) (62 * i) <= 2^64) by solve_bounds.\r\n  forward_call;[unfold Int128_min_signed, Int128_max_signed;split;solve_bounds|].\r\n  forward_call;[unfold Int128_min_signed, Int128_max_signed;split;solve_bounds|].\r\n  assert (Hfi_boundC : -(2^62 * 2^63) <= q * Z.shiftr (fi (i + 1)) (62 * i) <= 2^62 * 2^63) by (apply H6262i; lia).\r\n  assert (Hgi_boundC : -(2^62 * 2^63) <= r * Z.shiftr (gi (i + 1)) (62 * i) <= 2^62 * 2^63) by (apply H6262i; lia).\r\n  assert (Hfgi_boundB : -2^64 <= Z.shiftr (q * fi i + r * gi i) (62 * i) <= 2^64) by solve_bounds.\r\n  forward_call;[unfold Int128_min_signed, Int128_max_signed;split;solve_bounds|].\r\n  forward_call;[unfold Int128_min_signed, Int128_max_signed;split;solve_bounds|].\r\n  forward_call;forward;forward_call;[unfold Int128_min_signed, Int128_max_signed;solve_bounds|].\r\n  forward_call;forward;forward_call;[unfold Int128_min_signed, Int128_max_signed;solve_bounds|].\r\n  replace (Z.shiftr (u * fi i + v * gi i) (62 * i) + u * Z.shiftr (fi (i + 1)) (62 * i) + v * Z.shiftr (gi (i + 1)) (62 * i))\r\n   with (Z.shiftr (u * fi (i + 1) + v * gi (i + 1)) (62 * i)).\r\n  2:{\r\n    rewrite (Z_div_mod_eq_full (fi (i + 1)) (2^(62 * i))) at 1.\r\n    rewrite (Z_div_mod_eq_full (gi (i + 1)) (2^(62 * i))) at 1.\r\n    rewrite Hfij, Hgij by lia.\r\n    replace (u * ((2^(62 * i)) * (fi (i + 1) / (2^(62 * i))) + fi i) + v * ((2^(62 * i)) * (gi (i + 1) / (2^(62 * i))) + gi i))\r\n     with ((u * fi i + v * gi i) + ((u * (fi (i + 1) / (2^(62 * i))) + v * (gi (i + 1) / (2^(62 * i)))) *  2^(62 * i))) by ring.\r\n    rewrite !Z.shiftr_div_pow2, Z.div_add by lia.\r\n    ring.\r\n  }\r\n  replace (Z.shiftr (q * fi i + r * gi i) (62 * i) + q * Z.shiftr (fi (i + 1)) (62 * i) + r * Z.shiftr (gi (i + 1)) (62 * i))\r\n   with (Z.shiftr (q * fi (i + 1) + r * gi (i + 1)) (62 * i)).\r\n  2:{\r\n    rewrite (Z_div_mod_eq_full (fi (i + 1)) (2^(62 * i))) at 1.\r\n    rewrite (Z_div_mod_eq_full (gi (i + 1)) (2^(62 * i))) at 1.\r\n    rewrite Hfij, Hgij by lia.\r\n    replace (q * ((2^(62 * i)) * (fi (i + 1) / (2^(62 * i))) + fi i) + r * ((2^(62 * i)) * (gi (i + 1) / (2^(62 * i))) + gi i))\r\n     with ((q * fi i + r * gi i) + ((q * (fi (i + 1) / (2^(62 * i))) + r * (gi (i + 1) / (2^(62 * i)))) *  2^(62 * i))) by ring.\r\n    rewrite !Z.shiftr_div_pow2, Z.div_add by lia.\r\n    ring.\r\n  }\r\n  rewrite !Z.shiftr_shiftr by lia.\r\n  convert_C_to_math.\r\n  rewrite !Signed62.pad_upd_Znth by (rewrite Hlength_firstn_skipn; lia).\r\n  rewrite !upd_Znth_app2 by (rewrite Zlength_firstn, Zlength_skipn, Signed62.reprn_Zlength; lia).\r\n  rewrite !Zlength_firstn, !Signed62.reprn_Zlength.\r\n  replace (i - 1 - Z.min (Z.max 0 (i - 1)) (Z.of_nat len)) with 0 by lia.\r\n  rewrite !(skipn_cons (Z.to_nat (i - 1))) by (rewrite Signed62.reprn_length; lia).\r\n  rewrite !upd_Znth0.\r\n  replace (S (Z.to_nat (i - 1))) with (Z.to_nat (i + 1 - 1)) by lia.\r\n  replace (Z.ones 62) with (Z.ones (62 * (i + 1) - 62 * i)) by (f_equal;ring).\r\n  rewrite <- !Z_shiftr_ones, <- !Z.shiftr_land, !Z.land_ones by lia.\r\n  rewrite !(Z.add_mod (_*_) (_*_)), <-!(Z.mul_mod_idemp_r _ (fi (i + 1))), <-!(Z.mul_mod_idemp_r _ (gi (i+1))) by lia.\r\n  rewrite !Hfi62, !Hgi62 by lia.\r\n  rewrite !Z.mul_mod_idemp_r, <-!Z.add_mod by lia.\r\n  replace (62 * (i + 1)) with (62 + 62 * i) by ring.\r\n  rewrite <- !Z_shiftr_mod_2 by lia.\r\n  replace (62 * i) with (62 + (62 * (i - 1))) by ring.\r\n  rewrite <- !(Z.shiftr_shiftr _ 62 (62 * (i - 1))), !(Z.shiftr_div_pow2 _ 62) by lia.\r\n  rewrite <- !(Signed62.reprn_Znth _ len) by lia.\r\n  rewrite !Znth_cons by (rewrite Signed62.reprn_Zlength; lia).\r\n  rewrite !app_assoc, !firstn_app, <- Z2Nat.inj_add by lia.\r\n  replace (i - 1 + 1) with (i + 1 - 1) by lia.\r\n  rewrite !(Z.add_comm _ 62).\r\n  entailer!!.\r\n* unfold fi, gi.\r\n  rewrite !Z.eqb_refl.\r\n  assert (Hcfdg : forall c d, Z.abs c + Z.abs d <= 2^62 -> -2^62 < c + d ->\r\n     -(2^63 * 2^(62 * Z.of_nat len)) <= c * f + d * g < 2^63 * 2^(62 * Z.of_nat len)).\r\n  1:{\r\n    intros c d Hcd0 Hcd1.\r\n    rewrite <- Z.pow_add_r by lia.\r\n    replace (63 + 62 * Z.of_nat len) with (62 + (62 * Z.of_nat len + 1)) by ring.\r\n    rewrite Z.pow_add_r by lia.\r\n    split;[|destruct (Z_le_lt_dec c 0); destruct (Z_le_lt_dec d 0)].\r\n    * cut (Z.abs (c * f) + Z.abs (d * g) <= 2 ^ 62 * 2 ^ (62 * Z.of_nat len + 1));[lia|].\r\n      transitivity (Z.abs (c * f) + Z.abs (d * g));[lia|].\r\n      rewrite !Z.abs_mul.\r\n      transitivity (Z.abs c * Z.max (Z.abs f) (Z.abs g) + Z.abs d * Z.max (Z.abs f) (Z.abs g));\r\n      [apply Z.add_le_mono; apply Zmult_le_compat_l; lia|].\r\n      rewrite <- Z.mul_add_distr_r.\r\n      apply Zmult_le_compat; lia.\r\n    * apply Z.le_lt_trans with (c * (-2 ^ (62 * Z.of_nat len + 1)) + d * (-2 ^ (62 * Z.of_nat len + 1)));\r\n      [apply Z.add_le_mono;apply Z.mul_le_mono_nonpos_l;lia|].\r\n      replace (c * -2 ^ (62 * Z.of_nat len + 1) + d * -2 ^ (62 * Z.of_nat len + 1))\r\n       with (-(c + d) * 2 ^ (62 * Z.of_nat len + 1)) by ring.\r\n      apply Zmult_lt_compat_r;lia.\r\n    * apply Z.le_lt_trans with (c * (-2 ^ (62 * Z.of_nat len + 1)) + d * (2 ^ (62 * Z.of_nat len + 1) - 1));\r\n      [apply Z.add_le_mono;[apply Z.mul_le_mono_nonpos_l|apply Z.mul_le_mono_nonneg_l];lia|].\r\n      replace (c * -2 ^ (62 * Z.of_nat len + 1) + d * (2 ^ (62 * Z.of_nat len + 1) - 1))\r\n       with ((d - c) * (2 ^ (62 * Z.of_nat len + 1)) - d) by ring.\r\n      apply Z.le_lt_trans with (2^62 * (2 ^ (62 * Z.of_nat len + 1)) - d);\r\n      [apply Z.add_le_mono_r;apply Zmult_le_compat_r;lia|lia].\r\n    * apply Z.le_lt_trans with (c * (2 ^ (62 * Z.of_nat len + 1) - 1) + d * (-2 ^ (62 * Z.of_nat len + 1)));\r\n      [apply Z.add_le_mono;[apply Z.mul_le_mono_nonneg_l|apply Z.mul_le_mono_nonpos_l];lia|].\r\n      replace (c * (2 ^ (62 * Z.of_nat len + 1) - 1) + d * (-2 ^ (62 * Z.of_nat len + 1)))\r\n       with ((c - d) * (2 ^ (62 * Z.of_nat len + 1)) - c) by ring.\r\n      apply Z.le_lt_trans with (2^62 * (2 ^ (62 * Z.of_nat len + 1)) - c);\r\n      [apply Z.add_le_mono_r;apply Zmult_le_compat_r;lia|lia].\r\n    * apply Z.le_lt_trans with (c * (2 ^ (62 * Z.of_nat len + 1) - 1) + d * (2 ^ (62 * Z.of_nat len + 1) - 1));\r\n      [apply Z.add_le_mono; apply Z.mul_le_mono_nonneg_l;lia|].\r\n      replace (c * (2 ^ (62 * Z.of_nat len + 1) - 1) + d * (2 ^ (62 * Z.of_nat len + 1) - 1))\r\n       with ((c + d) * (2 ^ (62 * Z.of_nat len + 1) - 1)) by ring.\r\n      apply Z.le_lt_trans with (2^62 * (2 ^ (62 * Z.of_nat len + 1) - 1));\r\n      [apply Zmult_le_compat_r;lia|lia].\r\n  }\r\n  assert (Hufvg : -(2 ^ 63 * 2 ^ (62 * Z.of_nat len)) <= u * f + v * g < 2 ^ 63 * 2 ^ (62 * Z.of_nat len)) by\r\n    (apply Hcfdg; lia).\r\n  assert (Hqfrg : -(2 ^ 63 * 2 ^ (62 * Z.of_nat len)) <= q * f + r * g < 2 ^ 63 * 2 ^ (62 * Z.of_nat len)) by\r\n    (apply Hcfdg; lia).\r\n  forward_call;[solve_bounds|].\r\n  forward.\r\n  forward_call;[solve_bounds|].\r\n  forward.\r\n  rewrite !Signed62.pad_upd_Znth by (rewrite Hlength_firstn_skipn; lia).\r\n  rewrite !upd_Znth_app2 by (rewrite Zlength_firstn, Zlength_skipn, Signed62.reprn_Zlength; lia).\r\n  rewrite !Zlength_firstn, !Signed62.reprn_Zlength.\r\n  replace (Z.of_nat len - 1 - Z.min (Z.max 0 (Z.of_nat len - 1)) (Z.of_nat len)) with 0 by lia.\r\n  rewrite !(skipn_cons (Z.to_nat (Z.of_nat len - 1))) by (rewrite Signed62.reprn_length; lia).\r\n  rewrite !upd_Znth0.\r\n  replace (S (Z.to_nat (Z.of_nat len - 1))) with (len) by lia.\r\n  rewrite !skipn_short by (rewrite Signed62.reprn_length;lia).\r\n  replace (62 * Z.of_nat len) with (62 + (62 * (Z.of_nat len - 1))) by ring.\r\n  rewrite <- !(Z.shiftr_shiftr _ 62 (62 * (Z.of_nat len - 1))), !(Z.shiftr_div_pow2 _ 62) by lia.\r\n  replace (Z.to_nat (Z.of_nat len - 1)) with (Init.Nat.pred (Datatypes.length (Signed62.reprn len ((u * f + v * g) / 2 ^ 62)))) at 1\r\n   by (rewrite Signed62.reprn_length; lia).\r\n  replace (Z.to_nat (Z.of_nat len - 1)) with (Init.Nat.pred (Datatypes.length (Signed62.reprn len ((q * f + r * g) / 2 ^ 62))))\r\n   by (rewrite Signed62.reprn_length; lia).\r\n  rewrite <- !removelast_firstn_len, <- !(Signed62.reprn_last _ len default) by lia.\r\n  rewrite <- !app_removelast_last by (rewrite <- length_zero_iff_nil, Signed62.reprn_length; lia).\r\n  rewrite <- Htransf, <- Htransg, !(Z.mul_comm (2 ^ 62)), !Z.div_mul by lia.\r\n  unfold secp256k1_uint128_at.\r\n  sep_apply (data_at_data_at_ Tsh t_secp256k1_uint128\r\n  (Vlong (Int64.repr (Z.shiftr f1 (62 * (Z.of_nat len - 1)))),\r\n   Vlong\r\n     (Int64.repr (Z.shiftr (Z.shiftr f1 (62 * (Z.of_nat len - 1))) 64)))\r\n  v_cf).\r\n  sep_apply (data_at_data_at_ Tsh t_secp256k1_uint128\r\n  (Vlong (Int64.repr (Z.shiftr g1 (62 * (Z.of_nat len - 1)))),\r\n   Vlong\r\n     (Int64.repr (Z.shiftr (Z.shiftr g1 (62 * (Z.of_nat len - 1))) 64)))\r\n  v_cg).\r\n  entailer!!.\r\nQed.\r\n\r\nLemma body_secp256k1_modinv64_var: semax_body Vprog Gprog f_secp256k1_modinv64_var secp256k1_modinv64_var_spec.\r\nProof.\r\nstart_function.\r\nfastforward 5.\r\nchange (upd_Znth 4 _ _) with (map Vlong (Signed62.reprn 5 0)).\r\nfastforward 5.\r\nchange (upd_Znth 4 _ _) with (map Vlong (Signed62.reprn 5 1)).\r\nunfold make_modinfo.\r\nunfold_data_at (data_at _ _ _ modinfo).\r\nassert_PROP (field_compatible t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo) by entailer.\r\nforward_call (m, v_f, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n[rewrite field_address_offset by assumption;entailer!!|].\r\nchange (data_at sh_modinfo t_secp256k1_modinv64_signed62) with\r\n (data_at sh_modinfo (nested_field_type t_secp256k1_modinv64_modinfo (DOT _modulus))).\r\nrewrite <- field_at_data_at.\r\nassert (Hmodinfo :\r\n ((field_at sh_modinfo t_secp256k1_modinv64_modinfo (DOT _modulus) (map Vlong (Signed62.reprn 5 m)) modinfo) *\r\n  (field_at sh_modinfo t_secp256k1_modinv64_modinfo (DOT _modulus_inv62) (Vlong (Int64.repr (modInv m (2 ^ 62)))) modinfo) |--\r\n  data_at sh_modinfo t_secp256k1_modinv64_modinfo (map Vlong (Signed62.reprn 5 m), Vlong (Int64.repr (modInv m (2 ^ 62)))) modinfo))\r\n by (unfold_data_at (data_at _ _ _ modinfo);entailer!!).\r\nsep_apply Hmodinfo.\r\nfold (make_modinfo m).\r\nclear Hmodinfo.\r\nforward_call.\r\nfastforward 3.\r\nchange (Int.neg (Int.repr 1)) with (Int.repr (-1)).\r\nrewrite <- Zodd_equiv in H.\r\nset (init := divstep.init m x H).\r\nassert (HfBound : forall i, -m < divstep.f (fst (divstep.stepN i init)) <= m).\r\n1:{\r\n  clear -H0 H1; intro i.\r\n  injection (divstep.Trans.transN_step i init).\r\n  intros _.\r\n  destruct (divstep.Trans.bounded_transN i init) as [[Huv Huv'] _].\r\n  nia.\r\n}\r\nassert (HgBound : forall i, -m < divstep.g (fst (divstep.stepN i init)) < m).\r\n1:{\r\n  clear -H0 H1; intro i.\r\n  case (divstep.fgBoundsStrict init i);[cbn; lia|].\r\n  intros _.\r\n  change (divstep.f init) with m.\r\n  change (divstep.g init) with x.\r\n  lia.\r\n}\r\nset (invariant := fun P f => (EX i:nat, EX len:nat, EX d:Z, EX e:Z,\r\n PROP ( 0 <= Z.of_nat i < 12\r\n      ; (1 <= len <= 5)%nat\r\n      ; -2^(62 * Z.of_nat len + 1) <= divstep.f (fst (divstep.stepN (f i) init)) <= 2^(62 * Z.of_nat len + 1) - 1\r\n      ; -2^(62 * Z.of_nat len + 1) <= divstep.g (fst (divstep.stepN (f i) init)) <= 2^(62 * Z.of_nat len + 1) - 1\r\n      ; -2 * m < d < m\r\n      ; -2 * m < e < m\r\n      ; eqm m (x * d) (divstep.f (fst (divstep.stepN (f i) init)))\r\n      ; eqm m (x * e) (divstep.g (fst (divstep.stepN (f i) init)))\r\n      ; x = 0 -> d = 0\r\n      ; P (divstep.g (fst (divstep.stepN (f i) init)))\r\n      )\r\n  LOCAL (temp _eta (Vlong (Int64.repr (divstep.eta (fst (divstep.stepN (f i) init)))));\r\n   temp _len (Vint (Int.repr (Z.of_nat len)));\r\n   temp _i (Vint (Int.repr (Z.of_nat i)));\r\n   lvar _t (Tstruct _secp256k1_modinv64_trans2x2 noattr) v_t;\r\n   lvar _g (Tstruct _secp256k1_modinv64_signed62 noattr) v_g;\r\n   lvar _f (Tstruct _secp256k1_modinv64_signed62 noattr) v_f;\r\n   lvar _e (Tstruct _secp256k1_modinv64_signed62 noattr) v_e;\r\n   lvar _d (Tstruct _secp256k1_modinv64_signed62 noattr) v_d;\r\n   gvars gv; temp _x ptrx; temp _modinfo modinfo)\r\n   SEP (\r\n   data_at (cs := CompSpecs) Tsh t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn len (divstep.g (fst (divstep.stepN (f i) init))))) v_g;\r\n   data_at (cs := CompSpecs) shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x)) ptrx;\r\n   data_at (cs := CompSpecs) Tsh t_secp256k1_modinv64_signed62 (Signed62.pad (Signed62.reprn len (divstep.f (fst (divstep.stepN (f i) init))))) v_f;\r\n   data_at_ (cs := CompSpecs) Tsh (Tstruct _secp256k1_modinv64_trans2x2 noattr) v_t;\r\n   data_at (cs := CompSpecs) Tsh (Tstruct _secp256k1_modinv64_signed62 noattr) (map Vlong (Signed62.reprn 5 e)) v_e;\r\n   data_at (cs := CompSpecs) Tsh (Tstruct _secp256k1_modinv64_signed62 noattr) (map Vlong (Signed62.reprn 5 d)) v_d;\r\n   data_at (cs := CompSpecs) sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\r\n   debruijn64_array sh_debruijn gv;\r\n   data_at (cs := CompSpecs) sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE))\r\n)%assert).\r\nforward_loop (invariant (fun g => True) (fun i => 62*i)%nat) break: (invariant (fun g => g = 0) (fun i => 62*(i + 1))%nat);\r\n  unfold invariant in *; clear invariant.\r\n* Exists 0%nat; Exists 5%nat; Exists 0; Exists 1.\r\n  rewrite !Signed62.pad5 by (rewrite Signed62.reprn_length; reflexivity).\r\n  simpl (divstep.stepN (62 * 0) init).\r\n  simpl (divstep.g _).\r\n  simpl (divstep.f _).\r\n  entailer!!.\r\n  split.\r\n  - unfold eqm; rewrite Z.mod_same, Z.mul_0_r, Z.mod_0_l; lia.\r\n  - apply eqm_refl.\r\n* Intros i len d e.\r\n  set (sti := (fst (divstep.stepN (62 * i) init))) in *.\r\n  set (fi := divstep.f sti) in *.\r\n  set (gi := divstep.g sti) in *.\r\n  forward;rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength; lia);[entailer!!|].\r\n  forward;rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength; lia);[entailer!!|].\r\n  assert (Hi0 : forall z, Znth 0 (Signed62.reprn len z) = Int64.repr (if (len =? 1)%nat then z else z mod 2^62)).\r\n  1:{\r\n    intros z.\r\n    destruct len;[lia|].\r\n    destruct len.\r\n    - rewrite Nat.eqb_refl.\r\n      change (Znth 0 (Signed62.reprn 1 z)) with (last (Signed62.reprn 1 z) default).\r\n      rewrite Signed62.reprn_last by lia.\r\n      reflexivity.\r\n    - replace (_ =? _)%nat with false by (symmetry; apply Nat.eqb_neq; lia).\r\n      rewrite Signed62.reprn_Znth by lia.\r\n      reflexivity.\r\n  }\r\n  rewrite !Hi0.\r\n  set (fi0 := if (len =? 1)%nat then fi else fi mod 2^62).\r\n  set (gi0 := if (len =? 1)%nat then gi else gi mod 2^62).\r\n  assert (Hfi0Odd : Zodd fi0).\r\n  1:{\r\n   unfold fi0.\r\n   destruct (len =? 1)%nat; try apply divstep.oddF.\r\n   apply Zodd_bool_iff.\r\n   rewrite <- Zbits.Ztestbit_base, <-Z.land_ones, Z.land_spec, Zbits.Ztestbit_base, andb_true_r by lia.\r\n   apply Zodd_bool_iff.\r\n   apply divstep.oddF.\r\n  }\r\n  set (stCall := {| divstep.delta := divstep.delta sti; divstep.f := _; divstep.g := gi0; divstep.oddF := Hfi0Odd |}).\r\n  assert (etaStCall : -683 <= divstep.eta stCall < 683).\r\n  1:{\r\n    assert (etaInit : -(1) <= divstep.eta init < 1) by (cbn;lia).\r\n    assert (etaBounds := divstep.etaBounds 1 (62*i) init etaInit).\r\n    fold sti in etaBounds.\r\n    change (divstep.eta stCall) with (divstep.eta sti).\r\n    lia.\r\n  }\r\n  forward_call (stCall, v_t, Tsh, sh_debruijn, gv).\r\n  assert (Hi0mod : forall z, eqm (2^62) (if (len =? 1)%nat then z else z mod 2^62) z).\r\n  1:{\r\n    intros z.\r\n    destruct (_ =? _)%nat;[reflexivity|].\r\n    unfold eqm.\r\n    rewrite Z.mod_mod by lia.\r\n    reflexivity.\r\n  }\r\n  unfold divstep.eta, divstep.Trans.transN.\r\n  destruct (divstep.stepN_mod 62 stCall sti (Hi0mod fi) (Hi0mod gi) (eq_refl _)) as [-> ->].\r\n  fold (divstep.Trans.transN 62 sti).\r\n  fold (divstep.eta (fst (divstep.stepN 62 sti))).\r\n  clear Hi0mod etaStCall stCall.\r\n  forward.\r\n  assert (HmOdd : Z.Odd m) by (apply Zodd_equiv; assumption).\r\n  assert (HstiBounded := divstep.Trans.bounded_transN 62 sti).\r\n  forward_call (d, e, divstep.Trans.transN 62 sti, m, v_d, v_e, v_t, modinfo, Tsh, Tsh, Tsh, sh_modinfo).\r\n  destruct HstiBounded as [[Huv Huv'] [Hqr Hqr']].\r\n  destruct (divstep.update_de_bound m d e (divstep.Trans.transN 62 sti)) as [Hdm Hem]; try assumption.\r\n  set (d' := fst (divstep.update_de m d e (divstep.Trans.transN 62 sti))).\r\n  set (e' := snd (divstep.update_de m d e (divstep.Trans.transN 62 sti))).\r\n  assert (Hx0d'0 : x = 0 -> d' = 0).\r\n  1:{\r\n    intros Hx0.\r\n    specialize (H13 Hx0).\r\n    unfold d', sti, init.\r\n    rewrite divstep.Trans.transHs.\r\n    - rewrite H13.\r\n      simpl.\r\n      replace (_ + _) with (0) by ring.\r\n      unfold divstep.pre_div62Modulo.\r\n      rewrite Z.mul_0_r.\r\n      reflexivity.\r\n    - rewrite divstep.fixed_g;[|assumption].\r\n      apply Z.divide_0_r.\r\n  }\r\n  clear H13.\r\n  assert (HfiBound : -m < fi <= m) by apply HfBound.\r\n  assert (HgiBound : -m < gi < m) by apply HgBound.\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (fi, len, m, -1, v_f, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      rewrite Zaux.Zcompare_Gt in H13; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (fi, len, m, 1, v_f, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      revert H13.\r\n      elim Z.compare_spec; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (gi, len, m, -1, v_g, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      rewrite Zaux.Zcompare_Gt in H13; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (gi, len, m, 1, v_g, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      rewrite Zaux.Zcompare_Lt in H13; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  forward_call (len, sti, v_f, v_g, v_t, Tsh, Tsh, Tsh).\r\n  sep_apply (data_at_data_at_ Tsh t_secp256k1_modinv64_trans2x2).\r\n  set (fi' := divstep.f (fst (divstep.stepN 62 sti))).\r\n  set (gi' := divstep.g (fst (divstep.stepN 62 sti))).\r\n  assert (Hfgi'Bound : \r\n    -2 ^ (62 * Z.of_nat len + 1) <= fi' <= 2 ^ (62 * Z.of_nat len + 1) - 1 /\\\r\n    -2 ^ (62 * Z.of_nat len + 1) <= gi' <= 2 ^ (62 * Z.of_nat len + 1) - 1).\r\n  1:{\r\n    unfold fi'.\r\n    remember 62%nat as n62.\r\n    injection (divstep.Trans.transN_step n62 sti).\r\n    subst n62.\r\n    destruct (divstep.Trans.bounded_transN 62 sti) as [[Hb1 Hb2] [Hb3 Hb4]].\r\n    clear -Hb1 Hb2 Hb3 Hb4 H7 H8.\r\n    nia.\r\n  }\r\n  destruct Hfgi'Bound as [Hfi'Bound Hgi'Bound].\r\n  destruct (divstep.update_de_eqm m x d e sti) as [Hxd' Hxe']; try assumption.\r\n  fold d' in Hxd'.\r\n  fold e' in Hxe'.\r\n  pose (sti' := fst (divstep.stepN (62 * (i + 1)) init)).\r\n  unfold fi', gi' in *; clear fi' gi'.\r\n  replace (fst (divstep.stepN 62 sti)) with sti' in * by\r\n  (unfold sti';\r\n   replace (62 * (i + 1))%nat with (62 + 62 * i)%nat by lia;\r\n   apply divstep.stepN_app_fst).\r\n  set (fi' := divstep.f sti') in *.\r\n  set (gi' := divstep.g sti') in *.\r\n  forward;\r\n  rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength;lia);\r\n  [entailer!!|].\r\n  drop_LOCALs [_t'1; _t'38; _t'37].\r\n  forward_if (gi' <> 0).\r\n  2:{\r\n    forward.\r\n    entailer!!.\r\n    apply H13.\r\n    rewrite H14.\r\n    clear -len.\r\n    destruct len as [|[|len]];reflexivity.\r\n  }\r\n  1:{\r\n    forward.\r\n    forward_for_simple_bound (Z.of_nat len)  (EX j:Z,\r\n   PROP ( )\r\n   LOCAL (temp _cond (Vlong (fold_left (fun x y => Int64.or x y) (firstn (Z.to_nat j) (Signed62.reprn len gi')) Int64.zero));\r\n   temp _t'31 (Vlong (Znth 0 (Signed62.reprn len gi')));\r\n   temp _eta (Vlong (Int64.repr (divstep.eta sti')));\r\n   temp _len (Vint (Int.repr (Z.of_nat len)));\r\n   temp _i (Vint (Int.repr (Z.of_nat i)));\r\n   lvar _t (Tstruct _secp256k1_modinv64_trans2x2 noattr) v_t;\r\n   lvar _g (Tstruct _secp256k1_modinv64_signed62 noattr) v_g;\r\n   lvar _f (Tstruct _secp256k1_modinv64_signed62 noattr) v_f;\r\n   lvar _e (Tstruct _secp256k1_modinv64_signed62 noattr) v_e;\r\n   lvar _d (Tstruct _secp256k1_modinv64_signed62 noattr) v_d; \r\n   gvars gv; temp _x ptrx; temp _modinfo modinfo)\r\n   SEP (data_at_ Tsh t_secp256k1_modinv64_trans2x2 v_t;\r\n   data_at Tsh t_secp256k1_modinv64_signed62\r\n     (Signed62.pad (Signed62.reprn len fi')) v_f;\r\n   data_at Tsh t_secp256k1_modinv64_signed62\r\n     (Signed62.pad (Signed62.reprn len gi')) v_g;\r\n   data_at Tsh t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 d'))\r\n     v_d;\r\n   data_at Tsh t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 e'))\r\n     v_e;\r\n   data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\r\n   debruijn64_array sh_debruijn gv;\r\n   data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE);\r\n   data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x))\r\n     ptrx))%assert.\r\n   + entailer!!.\r\n     rewrite <-sublist_firstn, sublist_one, H13;[reflexivity|lia| |lia].\r\n     rewrite Signed62.reprn_Zlength;lia.\r\n   + forward;\r\n     rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength;lia);\r\n     [entailer!!|].\r\n     forward.\r\n     entailer!!.\r\n     rewrite <-Zfirstn_app by lia.\r\n     rewrite (app_nil_end (firstn (Z.to_nat 1) _)), <-(Znth_cons Int64.zero) by (rewrite Signed62.reprn_Zlength;lia).\r\n     rewrite fold_left_app.\r\n     cbn.\r\n     reflexivity.\r\n   + rewrite Nat2Z.id, firstn_all2 by (rewrite Signed62.reprn_length;lia).\r\n     rewrite fold_symmetric;intros;[|rewrite Int64.or_assoc|rewrite Int64.or_commut];try reflexivity.\r\n     forward_if (gi' <> 0);[| |entailer!!].\r\n     2:{\r\n       forward;entailer!!.\r\n       apply H14.\r\n       rewrite H15.\r\n       clear -len.\r\n       induction len;[reflexivity|].\r\n       destruct len;[reflexivity|].\r\n       cbn in *.\r\n       rewrite !Z.shiftr_0_l, !Zmod_0_l in *.\r\n       rewrite IHlen.\r\n       reflexivity.\r\n     }\r\n     forward.\r\n     Exists i len d' e'.\r\n     entailer!!.\r\n     change (gi' = 0).\r\n     assert (Hgi'0 : Forall (fun x => x = Int64.zero) (Signed62.reprn len gi')).\r\n     1:{\r\n       revert H14.\r\n       clear H13.\r\n       induction (Signed62.reprn len gi');[constructor|].\r\n       cbn.\r\n       intros H14.\r\n       assert (Horzero : forall a b, Int64.or a b = Int64.zero -> a = Int64.zero).\r\n       1:{\r\n         clear -l.\r\n         intros a b Hab.\r\n         destruct (Int64.bits_size_1 a);[assumption|].\r\n         assert (Hsize : 0 < Int64.size a).\r\n         1:{\r\n           destruct (Z_le_lt_dec 0 (Z.pred (Int64.size a))) as [Hle|Hlt];[lia|].\r\n           assert (Hcontra := Int64.bits_below a _ Hlt).\r\n           congruence.\r\n         }\r\n         apply (f_equal (fun x => Int64.testbit x (Z.pred (Int64.size a)))) in Hab.\r\n         rewrite Int64.bits_zero, Int64.bits_or in Hab by (assert (Hrange := Int64.size_range a); lia). \r\n         apply orb_false_elim in Hab.\r\n         destruct Hab;congruence.\r\n       }\r\n       constructor;[eapply Horzero; apply H14|].\r\n       apply IHl.\r\n       eapply Horzero; rewrite Int64.or_commut; apply H14.\r\n     }\r\n     rewrite <-(Signed62.signed_reprn gi' len);[|lia|assumption].\r\n     clear -Hgi'0.\r\n     induction (Signed62.reprn len gi');[reflexivity|].\r\n     cbn.\r\n     inversion_clear Hgi'0 as [|Ha Hl].\r\n     rewrite H0, IHl;[reflexivity|assumption].\r\n  }\r\n  drop_LOCALs [_t'31].\r\n  forward;\r\n  rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength;lia);\r\n  [entailer!!|].\r\n  replace (Z.of_nat len - 1) with (Zlength (Signed62.reprn len fi') - 1)\r\n  by (rewrite Signed62.reprn_Zlength; reflexivity).\r\n  rewrite Znth_last, Signed62.reprn_last by lia.\r\n  forward;\r\n  rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength;lia);\r\n  [entailer!!|].\r\n  replace (Z.of_nat len - 1) with (Zlength (Signed62.reprn len gi') - 1) at 1\r\n  by (rewrite Signed62.reprn_Zlength; reflexivity).\r\n  rewrite Znth_last, Signed62.reprn_last by lia.\r\n  progressC.\r\n  replace (Z.shiftr (Z.of_nat len - 2) 63) with (if 2 <=? Z.of_nat len then 0 else -1).\r\n  2:{\r\n    rewrite Z.shiftr_div_pow2 by lia.\r\n    elim Z.leb_spec; intros Hlen.\r\n    + cut (0 <= (Z.of_nat len - 2) / 2 ^ 63 < 1);[lia|].\r\n      apply div_bounds; lia.\r\n    + cut (-1 <= (Z.of_nat len - 2) / 2 ^ 63 < 0);[lia|].\r\n      apply div_bounds; lia.\r\n  }\r\n  do 2 forward.\r\n  forward_if (EX len:nat,\r\n   PROP (\r\n     (1 <= len <= 5)%nat\r\n   ; -2^(62 * Z.of_nat len + 1) <= divstep.f (fst (divstep.stepN (62 * (i + 1)) init)) <= 2^(62 * Z.of_nat len + 1) - 1\r\n   ; -2^(62 * Z.of_nat len + 1) <= divstep.g (fst (divstep.stepN (62 * (i + 1)) init)) <= 2^(62 * Z.of_nat len + 1) - 1\r\n   )\r\n   LOCAL (\r\n   temp _eta (Vlong (Int64.repr (divstep.eta sti')));\r\n   temp _len (Vint (Int.repr (Z.of_nat len)));\r\n   temp _i (Vint (Int.repr (Z.of_nat i)));\r\n   lvar _t (Tstruct _secp256k1_modinv64_trans2x2 noattr) v_t;\r\n   lvar _g (Tstruct _secp256k1_modinv64_signed62 noattr) v_g;\r\n   lvar _f (Tstruct _secp256k1_modinv64_signed62 noattr) v_f;\r\n   lvar _e (Tstruct _secp256k1_modinv64_signed62 noattr) v_e;\r\n   lvar _d (Tstruct _secp256k1_modinv64_signed62 noattr) v_d; \r\n   gvars gv; temp _x ptrx; temp _modinfo modinfo)\r\n   SEP (data_at_ Tsh t_secp256k1_modinv64_trans2x2 v_t;\r\n   data_at Tsh t_secp256k1_modinv64_signed62\r\n     (Signed62.pad (Signed62.reprn len fi')) v_f;\r\n   data_at Tsh t_secp256k1_modinv64_signed62\r\n     (Signed62.pad (Signed62.reprn len gi')) v_g;\r\n   data_at Tsh t_secp256k1_modinv64_signed62\r\n     (map Vlong (Signed62.reprn 5 d')) v_d;\r\n   data_at Tsh t_secp256k1_modinv64_signed62\r\n     (map Vlong (Signed62.reprn 5 e')) v_e;\r\n   data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\r\n   debruijn64_array sh_debruijn gv;\r\n   data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 1)) (gv _SECP256K1_SIGNED62_ONE);\r\n   data_at shx t_secp256k1_modinv64_signed62\r\n     (map Vlong (Signed62.reprn 5 x)) ptrx))%assert;\r\n   [|forward;Exists len;entailer!!|Intros len0].\r\n   1:{\r\n    assert (Hor0_l : forall x y, Int64.or x y = Int64.zero -> x = Int64.zero).\r\n    1:{\r\n      clear.\r\n      intros x y Hxy.\r\n      apply Int64.same_bits_eq.\r\n      intros i Hi.\r\n      apply (f_equal (fun x => Int64.testbit x i)) in Hxy.\r\n      rewrite Int64.bits_or, Int64.bits_zero, orb_false_iff in Hxy by assumption.\r\n      rewrite Int64.bits_zero.\r\n      tauto.\r\n    }\r\n    assert (H14ab := Hor0_l _ _ H14).\r\n    rewrite Int64.or_commut in H14.\r\n    generalize (Hor0_l _ _ H14).\r\n    clear H14.\r\n    assert (H14a := Hor0_l _ _ H14ab).\r\n    rewrite Int64.or_commut in H14ab.\r\n    generalize (Hor0_l _ _ H14ab).\r\n    clear H14ab.\r\n    convert_C_to_math.\r\n    assert (Hxor : forall x, -2^63 <= x < 2^63 -> Int64.repr (Z.lxor x (Z.shiftr (Int64.signed (Int64.repr x)) 63)) = Int64.zero -> -1 <= x <= 0).\r\n    1:{\r\n      clear.\r\n      intros x Hx Hlxor.\r\n      rewrite <- xor64_repr in Hlxor.\r\n      apply Int64.xor_zero_equal in Hlxor.\r\n      rewrite Int64.signed_repr in Hlxor by rep_lia.\r\n      assert (Heq : x = Z.shiftr x 63).\r\n      1:{\r\n        rewrite <- (Int64.signed_repr (Z.shiftr x 63)) by solve_bounds.\r\n        rewrite <- (Int64.signed_repr x) at 1 by solve_bounds.\r\n        congruence.\r\n      }\r\n      rewrite Heq.\r\n      solve_bounds.\r\n    }\r\n    intros Hfi'last Hgi'last.\r\n    apply Hxor in Hfi'last, Hgi'last.\r\n    2:{\r\n      rewrite Z.mul_sub_distr_l, Z.shiftr_div_pow2 by lia.\r\n      apply div_bounds;[lia|]. \r\n      clear -Hgi'Bound H5 H6.\r\n      rewrite Z.mul_opp_r, <- Z.pow_add_r by lia.\r\n      replace (62 * Z.of_nat len - 62 * 1 + 63) with (62 * Z.of_nat len + 1) by ring.\r\n      lia.\r\n    }\r\n    2:{\r\n      rewrite Z.mul_sub_distr_l, Z.shiftr_div_pow2 by lia.\r\n      apply div_bounds;[lia|]. \r\n      clear -Hfi'Bound H5 H6.\r\n      rewrite Z.mul_opp_r, <- Z.pow_add_r by lia.\r\n      replace (62 * Z.of_nat len - 62 * 1 + 63) with (62 * Z.of_nat len + 1) by ring.\r\n      lia.\r\n    }\r\n    revert H14a.\r\n    elim Z.leb_spec;[|discriminate].\r\n    intros Hlen2 _.\r\n    set (fisign := Z.shiftr fi' (62 * (Z.of_nat len - 1))) in *.\r\n    set (gisign := Z.shiftr gi' (62 * (Z.of_nat len - 1))) in *.\r\n    forward;\r\n    rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength;lia);\r\n    [entailer!!|forward].\r\n    forward;\r\n    rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength;lia);\r\n    [entailer!!|forward].\r\n    rewrite !Int64_shl_shiftl, !Signed62.pad_upd_Znth by (rewrite Signed62.reprn_Zlength;lia).\r\n    change (Int64.unsigned(Int64.repr (Int.unsigned (Int.repr 62)))) with 62.\r\n    rewrite !Int64.signed_repr by rep_lia.\r\n    forward.\r\n    rewrite sub_repr.\r\n    Exists (len - 1)%nat.\r\n    rewrite Nat2Z.inj_sub by lia.\r\n    change (Z.of_nat 1) with 1.\r\n    assert (Hfi'Bound' : -2 ^ (Z.of_nat (len - 1) * 62) <= fi' <\r\n            2 ^ (Z.of_nat (len - 1) * 62)).\r\n    1:{\r\n      replace (Z.of_nat (len - 1) * 62) with (62 * (Z.of_nat len - 1)) by lia.\r\n      destruct (Z.eq_dec fisign 0) as [Hfisign0|Hfisign0];\r\n      [apply shiftr_small_iff in Hfisign0; lia|].\r\n      destruct (Z.eq_dec fisign (-1)) as [Hfisign1|Hfisign1];[|lia].\r\n      apply shiftr_small_neg_iff in Hfisign1; lia.\r\n    }\r\n    assert (Hgi'Bound' : -2 ^ (Z.of_nat (len - 1) * 62) <= gi' <\r\n            2 ^ (Z.of_nat (len - 1) * 62)).\r\n    1:{\r\n      replace (Z.of_nat (len - 1) * 62) with (62 * (Z.of_nat len - 1)) by lia.\r\n      destruct (Z.eq_dec gisign 0) as [Hgisign0|Hgisign0];\r\n      [apply shiftr_small_iff in Hgisign0; lia|].\r\n      destruct (Z.eq_dec gisign (-1)) as [Hgisign1|Hgisign1];[|lia].\r\n      apply shiftr_small_neg_iff in Hgisign1; lia.\r\n    }\r\n    entailer!!.\r\n    1:{\r\n      replace (62 * (Z.of_nat len - 1) + 1) with (Z.of_nat (len - 1) * 62 + 1) by lia.\r\n      rewrite Z.pow_add_r by lia.\r\n      fold sti' fi' gi'.\r\n      lia.\r\n    }\r\n    assert (Hsign : forall x n, -1 <= Z.shiftr x n <= 0 -> Z.shiftr x n = if 0 <=? x then 0 else -1).\r\n    1:{\r\n      clear.\r\n      intros x n Hx.\r\n      elim Z.leb_spec; intros Hx0.\r\n      + apply (Z.shiftr_nonneg _ n) in Hx0; lia.\r\n      + apply (Z.shiftr_neg _ n) in Hx0; lia.\r\n    }\r\n    unfold fisign, gisign.\r\n    rewrite !Hsign by assumption.\r\n    cut (forall v x, -2 ^ (Z.of_nat (len - 1) * 62) <= x <= 2 ^ (Z.of_nat (len - 1) * 62) - 1 -> data_at Tsh t_secp256k1_modinv64_signed62\r\n  (Signed62.pad\r\n     (upd_Znth (Z.of_nat len - 2) (Signed62.reprn len x)\r\n        (Int64.or (Znth (Z.of_nat len - 2) (Signed62.reprn len x))\r\n           (Int64.repr (Z.shiftl (if 0 <=? x then 0 else -1) 62))))) v\r\n|-- data_at Tsh t_secp256k1_modinv64_signed62\r\n      (Signed62.pad (Signed62.reprn (len - 1) x)) v).\r\n    intro K.\r\n    apply sepcon_derives;apply K;lia.\r\n    intros v h Hh.\r\n    unfold Signed62.pad at 2.\r\n    do 2 unfold_data_at (data_at _ _ _ v).\r\n    rewrite !field_at_data_at.\r\n    simpl (nested_field_type t_secp256k1_modinv64_signed62 (DOT _v)).\r\n    rewrite (split2_data_at_Tarray_app (Z.of_nat len - 1));rewrite ?Signed62.reprn_length;[\r\n    |rewrite Zlength_map, Signed62.reprn_Zlength; lia\r\n    |rewrite Zlength_repeat'; lia\r\n    ].\r\n    rewrite <-(data_at__tarray' _ tlong _ (repeat Vundef (5 - (len - 1)))) by\r\n     (replace (5 - (len - 1))%nat with (Z.to_nat (5 - (Z.of_nat len - 1))) by lia;apply repeat_Zrepeat).\r\n    sep_apply (split2_data_at_Tarray_unfold Tsh tlong 5 (Z.of_nat len - 1));[lia|].\r\n    entailer!!.\r\n    unfold Signed62.pad.\r\n    rewrite sublist0_app1, sublist_map, sublist_firstn by (rewrite Zlength_map, Zlength_upd_Znth, Signed62.reprn_Zlength;lia).\r\n    replace (Z.to_nat (Z.of_nat len - 1)) with (len - 1)%nat by lia.\r\n    replace (Z.of_nat len - 2) with ((Z.of_nat (len - 1)) - 1) by lia.\r\n    rewrite Signed62.reprn_shrink;[entailer!!| |lia].\r\n    unfold Signed62.min_signed, Signed62.max_signed.\r\n    lia.\r\n  }\r\n  clear Hgi'Bound Hfi'Bound Hfi0Odd gi0 fi0 Hi0 H8 H7 H6 H5 len.\r\n  rename len0 into len.\r\n  assert(Hi0 : (i <> 11)%nat).\r\n  1:{\r\n    intros ->.\r\n    apply H13.\r\n    unfold gi', sti', init.\r\n    rewrite (divstep.stepN_app_fst 20 724).\r\n    apply divstep.fixed_g.\r\n    rewrite divstep.Translate_divsteps_g.\r\n    apply (processDivstep_correct _ 0x1030596cf6d817d1357f908ef70cdb00b38d047fbba852139babb6c8646fb15b2); try lia;[assumption|].\r\n    apply example724.\r\n  }\r\n  match goal with\r\n  | |- semax _ (PROPx (?P) (LOCALx ?Q ?R)) _ _ =>\r\n    let Q' := remove_LOCAL2 [temp _i (Vint (Int.repr (Z.of_nat i)))] Q in\r\n    forward_loop (PROPx (P) (LOCALx Q R))\r\n    break:(PROPx (P) (LOCALx (temp _i (Vint (Int.repr (Z.of_nat i + 1)))::Q') R))\r\n  end;[entailer!!| |].\r\n  1:{\r\n    forward.\r\n    rewrite add_repr.\r\n    forward.\r\n    forward_if True;[exfalso|forward;entailer!!|forward;entailer!!].\r\n    revert H5.\r\n    convert_C_to_math.\r\n    case Z.ltb_spec;[discriminate|lia].\r\n  }\r\n  assert (Hfi'Bound : -m < fi' <= m) by apply HfBound.\r\n  assert (Hgi'Bound : -m < gi' < m) by apply HgBound.\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (fi', len, m, -1, v_f, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      rewrite Zaux.Zcompare_Gt in H5; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (fi', len, m, 1, v_f, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      revert H5.\r\n      elim Z.compare_spec; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (gi', len, m, -1, v_g, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      rewrite Zaux.Zcompare_Gt in H5; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  forward_verify_check.\r\n  1:{\r\n    unfold make_modinfo.\r\n    forward_call (gi', len, m, 1, v_g, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n    [rewrite field_address_offset by assumption;entailer!\r\n    |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n    forward_if.\r\n    1:{\r\n      rewrite Zaux.Zcompare_Lt in H5; try discriminate.\r\n      lia.\r\n    }\r\n    forward;unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!.\r\n  }\r\n  Exists (i+1)%nat; Exists len; Exists d'; Exists e'.\r\n  entailer!!.\r\n  do 2 f_equal.\r\n  lia.\r\n* Intros i len d e.\r\n  rename H13 into Hx0d0.\r\n  rename H14 into H13.\r\n  set (sti := (fst (divstep.stepN (62 * (i + 1)) init))) in *.\r\n  set (fi := divstep.f sti) in *.\r\n  set (gi := divstep.g sti) in *.\r\n  forward_verify_check.\r\n  1:{\r\n    forward_call (gi, len, 1, 0, v_g, gv _SECP256K1_SIGNED62_ONE, Tsh, sh_SECP256K1_SIGNED62_ONE).\r\n    rewrite H13 at 1.\r\n   forward_if;[discriminate|].\r\n   forward.\r\n   entailer!!.\r\n  }\r\n  assert (Hverify : (Z.abs fi = 1) \\/ (x = 0 /\\ fi = m)).\r\n  1:{\r\n    destruct (Z.eq_dec x 0) as [Hx0|Hx0];[right|left].\r\n    - split;[assumption|].\r\n      specialize (HfBound (62 * (i + 1))%nat).\r\n      fold sti fi in HfBound.\r\n      cut (m = Z.abs fi);[lia|].\r\n      etransitivity;[|apply Z.gcd_0_r].\r\n      symmetry.\r\n      apply Zis_gcd_gcd;[lia|].\r\n      rewrite <- H13.\r\n      apply divstep.gcd.\r\n      subst x.\r\n      apply Zis_gcd_0.\r\n    - rewrite <- Z.gcd_0_r.\r\n      apply Zis_gcd_gcd;[lia|].\r\n      rewrite <- H13.\r\n      apply divstep.gcd.\r\n      apply Zis_gcd_sym.\r\n      destruct H2 as [H2|H2];[lia|].\r\n      apply H2.\r\n  }\r\n  forward_verify_check.\r\n  1:{\r\n    forward_call (fi, len, 1, -1, v_f, gv _SECP256K1_SIGNED62_ONE, Tsh, sh_SECP256K1_SIGNED62_ONE).\r\n    forward_if (temp _t'13 (Vint (Int.repr (Z.b2z (Z.abs fi =? 1))))).\r\n    1:{\r\n      forward.\r\n      destruct (Z.eq_dec fi (-1)) as [->|Hne];[entailer!!|].\r\n      revert H14.\r\n      elim Zaux.Zcompare_spec;try discriminate.\r\n      lia.\r\n    }\r\n    1:{\r\n      forward_call (fi, len, 1, 1, v_f, gv _SECP256K1_SIGNED62_ONE, Tsh, sh_SECP256K1_SIGNED62_ONE).\r\n      forward.\r\n      entailer!!.\r\n      assert (Hfi1 : fi <> -1) by (revert H14;elim Zaux.Zcompare_spec;try contradiction;lia).\r\n      elim Z.eqb_spec;intros Habsfi.\r\n      - replace fi with 1 by lia.\r\n        reflexivity.\r\n      - elim Zaux.Zcompare_spec;try reflexivity.\r\n        lia.\r\n    }\r\n    forward_if (temp _t'15 (Vint (Int.repr (Z.b2z ((Z.abs fi =? 1) || (x =? 0) && (d =? 0) && (Z.abs fi =? m)))))).\r\n    1:{\r\n      forward.\r\n      entailer!!.\r\n      rewrite H14.\r\n      reflexivity.\r\n    }\r\n    1:{\r\n      forward_call (x, 5%nat, 1, 0, ptrx, gv _SECP256K1_SIGNED62_ONE, shx, sh_SECP256K1_SIGNED62_ONE).\r\n      forward_if (temp _t'17 (Vint (Int.repr (Z.b2z ((x =? 0) && (d =? 0)))))).\r\n      2:{\r\n        forward.\r\n        entailer!!.\r\n        elim Z.eqb_spec; try reflexivity.\r\n        intros ->.\r\n        contradiction.\r\n      }\r\n      1:{\r\n        forward_call (d, 5%nat, 1, 0, v_d, gv _SECP256K1_SIGNED62_ONE, Tsh, sh_SECP256K1_SIGNED62_ONE).\r\n        forward.\r\n        entailer!!.\r\n        elim (Z.eqb_spec d).\r\n        2:{\r\n          rewrite andb_false_r; simpl.\r\n          elim Zaux.Zcompare_spec;try reflexivity; lia.\r\n        }\r\n        revert H15.\r\n        elim Zaux.Zcompare_spec;try discriminate.\r\n        intros -> _ ->.\r\n        reflexivity.\r\n      }\r\n      forward_if.\r\n      2:{\r\n        forward.\r\n        entailer!!.\r\n      }\r\n      unfold make_modinfo.\r\n      forward_call (fi, len, m, 1, v_f, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n      [rewrite field_address_offset by assumption;entailer!\r\n      |unfold_data_at (data_at _ _ _ modinfo);entailer!|].\r\n      forward_if.\r\n      1:{\r\n        fastforward.\r\n        entailer!!;[|\r\n          unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!].\r\n        revert H16.\r\n        elim Zaux.Zcompare_spec;try discriminate.\r\n        rewrite H14, H15.\r\n        intros -> _.\r\n        replace (Z.abs (m * 1)) with m by lia.\r\n        rewrite Z.eqb_refl.\r\n        reflexivity.\r\n      }\r\n      forward_call (fi, len, m, -1, v_f, field_address t_secp256k1_modinv64_modinfo (DOT _modulus) modinfo, Tsh, sh_modinfo);\r\n      [rewrite field_address_offset by assumption;entailer!|].\r\n      fastforward.\r\n      entailer!!;[|\r\n        unfold_data_at (data_at _ t_secp256k1_modinv64_modinfo _ modinfo);entailer!].\r\n      assert (Hfim : fi <> m).\r\n      1:{\r\n        revert H16.\r\n        elim Zaux.Zcompare_spec;try contradiction;lia.\r\n      }\r\n      rewrite H14, H15.\r\n      simpl.\r\n      elim Z.eqb_spec;elim Zaux.Zcompare_spec;try lia; reflexivity.\r\n   }\r\n   forward_if;[|forward;entailer!!].\r\n   exfalso.\r\n   destruct Hverify as [Hverify|[Hx0 Hverify]].\r\n   - rewrite Hverify, Z.eqb_refl in H14 by reflexivity;discriminate.\r\n   - subst x.\r\n     rewrite orb_comm, Hverify in H14.\r\n     replace (Z.abs m) with m in H14 by lia.\r\n     rewrite Hx0d0, !Z.eqb_refl in H14 by reflexivity.\r\n     discriminate.\r\n  }\r\n  forward;\r\n  rewrite Signed62.pad_nth by (rewrite Signed62.reprn_Zlength;lia);\r\n  [entailer!!|].\r\n  rewrite <- (Signed62.reprn_Zlength len fi), Znth_last, Signed62.reprn_last at 1 by lia.\r\n  forward_call.\r\n  assert (Hfibound : 2 ^ (62 * (Z.of_nat len - 1)) * -2 ^ 63 <= fi <=\r\n    2 ^ (62 * (Z.of_nat len - 1)) * (2 ^ 63 - 1 + 1) - 1).\r\n  1:{\r\n    rewrite Z.sub_add, Z.mul_opp_r, <-Z.pow_add_r, Z.mul_sub_distr_l by lia.\r\n    replace (62 * Z.of_nat len - 62 * 1 + 63) with (62 * Z.of_nat len + 1);lia.\r\n  }\r\n  rewrite Int64.signed_repr by solve_bounds.\r\n  replace (_<?0) with (fi<?0).\r\n  2:{\r\n   do 2 elim Z.ltb_spec0; try reflexivity.\r\n   - intros Hcontra Hfi0; elim Hcontra.\r\n     rewrite Z.shiftr_neg; assumption.\r\n   - intros Hshift Hcontra; elim Hcontra.\r\n     rewrite Z.shiftr_neg in Hshift; assumption.\r\n  }\r\n  replace ((if fi <? 0 then -d else d) mod m) with (modInv x m).\r\n  2:{\r\n    symmetry.\r\n    destruct Hverify as [Habsfi|[Hx0 _]].\r\n    2:{\r\n      rewrite Hx0d0, Hx0, modInv_zero by assumption.\r\n      destruct (fi <? 0); reflexivity.\r\n    }\r\n    apply modInv_mul_unique_r.\r\n    replace ((if fi <? 0 then -d else d)) with (d*Z.sgn fi) by (elim (Z.ltb_spec);lia).\r\n    rewrite Z.mul_assoc, <-Zmult_mod_idemp_l, H11, Zmult_mod_idemp_l, Z.sgn_abs, Habsfi, Z.mod_1_l; lia.\r\n  }\r\n  sep_apply (data_at_data_at_ shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn 5 x)) ptrx).\r\n  forward_call.\r\n  entailer!!.\r\nQed.\r\n"
  },
  {
    "path": "Coq/Simplicity/Alg.v",
    "content": "Require Import Simplicity.Util.Monad.\nRequire Import Simplicity.Util.Option.\nRequire Import Simplicity.Util.PackedClass.\nImport Coq.Strings.String.StringSyntax.\n\nRequire Import Simplicity.Ty.\nRequire Import Simplicity.Digest.\nRequire Simplicity.Core.\n\nSet Implicit Arguments.\nLocal Open Scope ty_scope.\nLocal Open Scope monad_scope.\nDeclare Scope term_scope.\nDeclare Scope semantic_scope.\n\nModule Core.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ iden : forall {A}, term A A\n; comp : forall {A B C}, term A B -> term B C -> term A C\n; unit : forall {A}, term A Unit\n; injl : forall {A B C}, term A B -> term A (B + C)\n; injr : forall {A B C}, term A C -> term A (B + C)\n; case : forall {A B C D}, term (A * C) D -> term (B * C) D -> term ((A + B) * C) D\n; pair : forall {A B C}, term A B -> term A C -> term A (B * C)\n; take : forall {A B C}, term A C -> term (A * B) C\n; drop : forall {A B C}, term B C -> term (A * B) C\n}.\n\nStructure Algebra := Pack { domain :> Ty -> Ty -> Type; class_of : class domain }.\nArguments Pack : clear implicits.\n\nModule Combinators.\n\nDefinition iden {A} {alg : Algebra} : alg A A := iden (class_of alg).\nDefinition comp {A B C} {alg : Algebra} : alg A B -> alg B C -> alg A C := comp (class_of alg).\nDefinition unit {A} {alg : Algebra} : alg A Unit := unit (class_of alg).\nDefinition injl {A B C} {alg : Algebra} : alg A B -> alg A (B + C) := injl (class_of alg).\nDefinition injr {A B C} {alg : Algebra} : alg A C -> alg A (B + C) := injr (class_of alg).\nDefinition case {A B C D} {alg : Algebra} : alg (A * C) D -> alg (B * C) D -> alg ((A + B) * C) D := case (class_of alg).\nDefinition pair {A B C} {alg : Algebra} : alg A B -> alg A C -> alg A (B * C) := pair (class_of alg).\nDefinition take {A B C} {alg : Algebra} : alg A C -> alg (A * B) C := take (class_of alg).\nDefinition drop {A B C} {alg : Algebra} : alg B C -> alg (A * B) C := drop (class_of alg).\n\nDefinition elimS {A B C D} {alg : Algebra} (r : alg A (B + C)) (s : alg B D) (t : alg C D) : alg A D :=\n  comp (pair r unit) (case (take s) (take t)).\nDefinition copair {A B C} {alg : Algebra} : alg A C -> alg B C -> alg (A + B) C :=\n  elimS iden.\nDefinition swapS {A B} {alg : Algebra} : alg (A + B) (B + A) :=\n  copair (injr iden) (injl iden).\nDefinition swapP {A B} {alg : Algebra} : alg (A * B) (B * A) :=\n  pair (drop iden) (take iden).\n\nNotation \"s &&& t\" := (pair s t) (at level 70, right associativity) : term_scope.\nNotation \"s >>> t\" := (comp s t) (at level 90, right associativity) : term_scope.\n\nNotation \"'H'\" := iden : term_scope.\nNotation \"'O' x\" := (take x) (at level 0, right associativity) : term_scope.\nNotation \"'I' x\" := (drop x) (at level 0, right associativity) : term_scope.\n\nEnd Combinators.\n\nModule Parametric.\nImport Combinators.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { _ : forall A, rel iden (@iden A _)\n ; _ : forall A B C s1 s2 t1 t2 (Hs : rel s1 s2) (Ht : rel t1 t2), rel (comp s1 t1) (@comp A B C _ s2 t2)\n ; _ : forall A, rel unit (@unit A _)\n ; _ : forall A B C t1 t2 (Ht : rel t1 t2), rel (injl t1) (@injl A B C _ t2)\n ; _ : forall A B C t1 t2 (Ht : rel t1 t2), rel (injr t1) (@injr A B C _ t2)\n ; _ : forall A B C D s1 s2 t1 t2 (Hs : rel s1 s2) (Ht : rel t1 t2), rel (case s1 t1) (@case A B C D _ s2 t2)\n ; _ : forall A B C s1 s2 t1 t2 (Hs : rel s1 s2) (Ht : rel t1 t2), rel (pair s1 t1) (@pair A B C _ s2 t2)\n ; _ : forall A B C t1 t2 (Ht : rel t1 t2), rel (take t1) (@take A B C _ t2)\n ; _ : forall A B C t1 t2 (Ht : rel t1 t2), rel (drop t1) (@drop A B C _ t2)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall {alg : Algebra}, alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B x y.\n\nDefinition Parametric {A B} (x : forall {alg : Algebra}, alg A B) : Prop := Reynolds (@x) (@x).\nEnd Reynolds.\n\nSection CoreTerm.\nImport Combinators.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nFixpoint eval {A B} (x : Simplicity.Core.Term A B) {alg : Algebra} : alg A B :=\nmatch x in Simplicity.Core.Term A B return alg A B with\n| Simplicity.Core.iden => iden\n| Simplicity.Core.comp s t => comp (eval s) (eval t)\n| Simplicity.Core.unit => unit\n| Simplicity.Core.injl t => injl (eval t)\n| Simplicity.Core.injr t => injr (eval t)\n| Simplicity.Core.case s t => case (eval s) (eval t)\n| Simplicity.Core.pair s t => pair (eval s) (eval t)\n| Simplicity.Core.take t => take (eval t)\n| Simplicity.Core.drop t => drop (eval t)\nend.\n\nLemma eval_Parametric {A B} (x : Simplicity.Core.Term A B) : Parametric (@eval A B x).\nProof.\nintros alg1 alg2 [R []].\ninduction x; simpl; auto.\nQed.\n\nDefinition Term_mixin : class Simplicity.Core.Term :=\n  {| Core.iden := @Simplicity.Core.iden\n   ; Core.comp := @Simplicity.Core.comp\n   ; Core.unit := @Simplicity.Core.unit\n   ; Core.injl := @Simplicity.Core.injl\n   ; Core.injr := @Simplicity.Core.injr\n   ; Core.case := @Simplicity.Core.case\n   ; Core.pair := @Simplicity.Core.pair\n   ; Core.take := @Simplicity.Core.take\n   ; Core.drop := @Simplicity.Core.drop\n   |}.\n\nCanonical Structure Term : Algebra := Pack Simplicity.Core.Term Term_mixin.\n\nLemma eval_Term {A B} (x : Simplicity.Core.Term A B) : eval x = x.\nProof.\ninduction x; cbn; congruence.\nQed.\n\nLemma term_eval {A B} (x : forall alg : Algebra, alg A B) (Hx : Parametric x) (alg : Algebra) :\n  x alg = eval (x Term).\nProof.\nrefine (Hx _ _ (@Parametric.Pack Term alg (fun a b x y => y = eval x) _)); constructor;\nintros; simpl; congruence.\nQed.\n\nEnd CoreTerm.\n\nEnd Core.\nExport Core.Combinators.\nCoercion Core.domain : Core.Algebra >-> Funclass.\nCoercion Core.Parametric.rel : Core.Parametric.Rel >-> Funclass.\nCanonical Structure Core.Term.\n\nLemma iden_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A} : R A A iden iden.\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma comp_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C} s1 s2 t1 t2 : R A B s1 s2 -> R B C t1 t2 -> R A C (comp s1 t1) (comp s2 t2).\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma unit_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A} : R A Unit unit unit.\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma injl_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C} t1 t2 : R A B t1 t2 -> R A (B + C) (injl t1) (injl t2).\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma injr_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C} t1 t2 : R A C t1 t2 -> R A (B + C) (injr t1) (injr t2).\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma case_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C D} s1 s2 t1 t2 : R (A * C) D s1 s2 -> R (B * C) D t1 t2 -> R ((A + B) * C) D (case s1 t1) (case s2 t2).\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma pair_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C} s1 s2 t1 t2 : R A B s1 s2 -> R A C t1 t2 -> R A (B * C) (pair s1 t1) (pair s2 t2).\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma take_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C} t1 t2 : R A C t1 t2 -> R (A * B) C (take t1) (take t2).\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nLemma drop_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C} t1 t2 : R B C t1 t2 -> R (A * B) C (drop t1) (drop t2).\nProof.\ndestruct R as [R []].\ncbn; auto.\nQed.\n\nCreate HintDb parametricity discriminated.\n#[export] Hint Immediate iden_Parametric : parametricity.\n#[export] Hint Resolve comp_Parametric : parametricity.\n#[export] Hint Immediate unit_Parametric : parametricity.\n#[export] Hint Resolve injl_Parametric : parametricity.\n#[export] Hint Resolve injr_Parametric : parametricity.\n#[export] Hint Resolve case_Parametric : parametricity.\n#[export] Hint Resolve pair_Parametric : parametricity.\n#[export] Hint Resolve take_Parametric : parametricity.\n#[export] Hint Resolve drop_Parametric : parametricity.\n\nLemma elimS_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C D} r1 r2 s1 s2 t1 t2 : R A (B + C) r1 r2 -> R B D s1 s2 -> R C D t1 t2\n                             -> R A D (elimS r1 s1 t1) (elimS r2 s2 t2).\nProof.\nunfold elimS.\nauto with parametricity.\nQed.\n#[export] Hint Resolve elimS_Parametric : parametricity.\n\nLemma copair_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B C} s1 s2 t1 t2 : R A C s1 s2 -> R B C t1 t2\n                     -> R (A + B) C (copair s1 t1) (copair s2 t2).\nProof.\nunfold copair.\nauto with parametricity.\nQed.\n#[export] Hint Resolve copair_Parametric : parametricity.\n\nLemma swapS_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B} : R (A + B) (B + A) swapS swapS.\nProof.\nunfold swapS.\nauto with parametricity.\nQed.\n#[export] Hint Resolve swapS_Parametric : parametricity.\n\nLemma swapP_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B} : R (A * B) (B * A) swapP swapP.\nProof.\nunfold swapP.\nauto with parametricity.\nQed.\n#[export] Hint Resolve swapP_Parametric : parametricity.\n\nSection CoreSem.\n\nDefinition FunSem_mixin : Core.class Arrow :=\n  {| Core.iden A a := a\n   ; Core.comp A B C s t (a : A) := t (s a)\n   ; Core.unit A _ := tt\n   ; Core.injl A B C t a := inl (t a)\n   ; Core.injr A B C t a := inr (t a)\n   ; Core.case A B C D s t p := let (ab, c) := p in\n      match ab with\n      | inl a => s (a, c)\n      | inr b => t (b, c)\n      end\n   ; Core.pair A B C s t a := (s a, t a)\n   ; Core.take A B C t ab := t (fst ab)\n   ; Core.drop A B C t ab := t (snd ab)\n   |}.\n\nDefinition CoreSem_mixin (M : CIMonad) : Core.class (Kleisli M) :=\n  {| Core.iden A a := eta a\n   ; Core.comp A B C s t (a : A) := (t <-< s) a\n   ; Core.unit A _ := eta tt\n   ; Core.injl A B C t a := map inl (t a)\n   ; Core.injr A B C t a := map inr (t a)\n   ; Core.case A B C D s t p := let (ab, c) := p in\n      match ab with\n      | inl a => s (a, c)\n      | inr b => t (b, c)\n      end\n   ; Core.pair A B C s t a := phi (s a) (t a)\n   ; Core.take A B C t ab := t (fst ab)\n   ; Core.drop A B C t ab := t (snd ab)\n   |}.\n\nEnd CoreSem.\nCanonical Structure CoreFunSem : Core.Algebra := Core.Pack Arrow FunSem_mixin.\nCanonical Structure CoreSem (M : CIMonad) : Core.Algebra :=\n  Core.Pack (Kleisli M) (CoreSem_mixin M).\n\nNotation \"|[ x ]|^ M\" := (x : Kleisli M _ _) (at level 0, M at level 0) : semantic_scope.\nNotation \"|[ x ]|\" := (x : Arrow _ _) : semantic_scope.\n\nLocal Open Scope semantic_scope.\nLocal Open Scope monad_scope.\n\nLemma CoreFunSem_correct {A B} {t : forall {alg : Core.Algebra}, alg A B} (Ht : Core.Parametric (@t)) :\n forall a, Simplicity.Core.eval t a = |[ t ]| a.\nProof.\nset (R A B (x : Simplicity.Core.Term A B) (y : Arrow A B) := forall a, Simplicity.Core.eval x a = |[ y ]| a).\nrefine (Ht _ _ (Core.Parametric.Pack (_ : Core.Parametric.class R))).\nconstructor; unfold R; clear; intros; cbn; try destruct a as [[a|b] c];\n try rewrite Hs; try rewrite Ht; try reflexivity.\nQed.\n\nLemma CoreSem_initial {M : CIMonad} {A B} {t : forall {alg : Core.Algebra}, alg A B} (Ht : Core.Parametric (@t)) :\n  forall a, |[ t ]|^M a = eta (|[ t ]| a).\nProof.\nset (R A B (x : Kleisli M A B) (y : Arrow A B) := forall a, |[ x ]|^M a = eta (|[ y ]| a)).\nrefine (Ht _ _ (Core.Parametric.Pack (_ : Core.Parametric.class R))).\nconstructor; unfold R; clear; intros; cbn.\n- reflexivity.\n- rewrite kleisli_comp_def, Hs, <- kleisli_comp_def.\n  rewrite kleisli_compr; apply Ht.\n- reflexivity.\n- rewrite Ht; apply eta_natural.\n- rewrite Ht; apply eta_natural.\n- destruct a as [[a|b] c]; [apply Hs|apply Ht].\n- rewrite Hs, Ht.\n  apply phi_eta.\n- apply Ht.\n- apply Ht.\nQed.\n\nSection Generic.\n\nFixpoint scribe {A B : Ty} : B -> forall {alg : Core.Algebra}, alg A B :=\nmatch B with\n| Unit => fun _ _ => unit\n| Sum BL BR => fun b =>\n  match b with\n  | inl l => fun _ => injl (scribe l)\n  | inr r => fun _ => injr (scribe r)\n  end\n| Prod B1 B2 => fun b _ => pair (scribe (fst b)) (scribe (snd b))\nend.\n\nLemma scribe_correct {A B : Ty} (a : A) (b : B) : |[scribe b]| a = b.\nProof.\ninduction B;[destruct b as [] | destruct b as [b|b] | destruct b as [b0 b1]]; cbn;\ntry rewrite IHB1; try rewrite IHB2; reflexivity.\nQed.\n\nEnd Generic.\n\nLemma scribe_Parametric {alg1 alg2 : Core.Algebra} (R : Core.Parametric.Rel alg1 alg2)\n  {A B : Ty} (b : B) : R A B (scribe b) (scribe b).\nProof.\ninduction B;[|destruct b as [b|b] |]; cbn;\nauto with parametricity.\nQed.\n#[export] Hint Immediate scribe_Parametric : parametricity.\n\n\nModule Assertion.\n\nRecord mixin (term : Ty -> Ty -> Type) := Mixin\n{ assertl : forall {A B C D}, term (A * C) D -> hash256 -> term ((A + B) * C) D\n; assertr : forall {A B C D}, hash256 -> term (B * C) D -> term ((A + B) * C) D\n; fail : forall {A B}, (hash256 * hash256) -> term A B\n}.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base :> Core.class term\n; ext  :> mixin term\n}.\n\nStructure Algebra := _Pack { domain :> Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom (a0 : mixin dom) :=\n [find c  | Core.domain c ~ dom | \"is not a Core algebra\" ]\n [find cc | Core.class_of c ~ cc ]\n [find a  | a ~ a0 | \"is not the right mixin\" ]\n @_Pack dom (@Class dom cc a).\n\nNotation Pack dom a := (@packager dom a _ id _ id _ id).\n\nCanonical Structure toCore (alg : Algebra) : Core.Algebra := Core.Pack alg (class_of alg).\n\nModule Combinators.\n\nDefinition assertl {A B C D} {alg : Algebra} : alg (A * C) D -> hash256 -> alg ((A + B) * C) D := assertl (class_of alg).\nDefinition assertr {A B C D} {alg : Algebra} : hash256 -> alg (B * C) D -> alg ((A + B) * C) D := assertr (class_of alg).\nDefinition fail {A B} {alg : Algebra} : (hash256 * hash256) -> alg A B := fail (class_of alg).\n\nEnd Combinators.\n\nModule Parametric.\nImport Combinators.\n\nRecord mixin {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { _ : forall A B C D s1 s2 th, rel s1 s2 -> rel (assertl s1 th) (@assertl A B C D _ s2 th)\n ; _ : forall A B C D sh t1 t2, rel t1 t2 -> rel (assertr sh t1) (@assertr A B C D _ sh t2)\n ; _ : forall A B hh, rel (fail hh) (@fail A B _ hh)\n }.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base :> Core.Parametric.class (@rel)\n ; ext :> mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nEnd Assertion.\nExport Assertion.Combinators.\nCoercion Assertion.domain : Assertion.Algebra >-> Funclass.\nCoercion Assertion.toCore : Assertion.Algebra >-> Core.Algebra.\nCoercion Assertion.base : Assertion.class >-> Core.class.\nCoercion Assertion.ext : Assertion.class >-> Assertion.mixin.\nCoercion Assertion.Parametric.rel : Assertion.Parametric.Rel >-> Funclass.\nCanonical Structure Assertion.toCore.\n\nLemma assertl_Parametric {alg1 alg2 : Assertion.Algebra} (R : Assertion.Parametric.Rel alg1 alg2)\n  {A B C D} s1 s2 th : R (A * C) D s1 s2 -> R ((A + B) * C) D (assertl s1 th) (assertl s2 th).\nProof.\ndestruct R as [R [Rb []]].\ncbn; auto.\nQed.\n\nLemma assertr_Parametric {alg1 alg2 : Assertion.Algebra} (R : Assertion.Parametric.Rel alg1 alg2)\n  {A B C D} sh t1 t2 : R (B * C) D t1 t2 -> R ((A + B) * C) D (assertr sh t1) (assertr sh t2).\nProof.\ndestruct R as [R [Rb []]].\ncbn; auto.\nQed.\n\nLemma fail_Parametric {alg1 alg2 : Assertion.Algebra} (R : Assertion.Parametric.Rel alg1 alg2)\n  {A B} hh : R A B (fail hh) (fail hh).\nProof.\ndestruct R as [R [Rb []]].\ncbn; auto.\nQed.\n\n#[export] Hint Resolve assertl_Parametric : parametricity.\n#[export] Hint Resolve assertr_Parametric : parametricity.\n#[export] Hint Immediate fail_Parametric : parametricity.\n\nSection AssertionSem.\n\nDefinition AssertionSem_mixin (M : CIMonadZero) : Assertion.mixin (Kleisli M) :=\n  {| Assertion.assertl A B C D s _ (p : tySem ((A + B) * C)):= let (ab, c) := p in\n      match ab with\n      | inl a => s (a, c)\n      | inr b => mzero\n      end\n   ; Assertion.assertr A B C D _ t p := let (ab, c) := p in\n      match ab with\n      | inl a => mzero\n      | inr b => t (b, c)\n      end\n   ; Assertion.fail A B _ := kzero\n   |}.\n\nEnd AssertionSem.\nCanonical Structure AssertionSem (M : CIMonadZero) : Assertion.Algebra :=\n  Assertion.Pack (Kleisli M) (AssertionSem_mixin M).\n\nLemma AssertionSem_initial {M : CIMonadZero} {A B} {t : forall {alg : Assertion.Algebra}, alg A B} (Ht : Assertion.Parametric (@t)) :\n  forall (a : A), |[ t ]|^M a = optionZero (|[ t ]|^option a).\nProof.\nset (R := fun A B (x : AssertionSem M A B) (y : AssertionSem option_Monad_Zero A B) =>\n          forall a : A, x a = optionZero (y a)).\nrefine (Ht _ _ (Assertion.Parametric.Pack (_ : Assertion.Parametric.class R)));\nrepeat constructor; unfold R; clear; try reflexivity; cbn.\n- intros A B C s1 s2 t1 t2 Hs Ht a.\n  symmetry; rewrite kleisli_comp_def.\n  rewrite optionZero_mu, optionZero_natural, map_comp, <- optionZero_natural, <- Hs.\n  erewrite map_ext;[|intros;symmetry;apply Ht].\n  rewrite <- kleisli_comp_def.\n  reflexivity.\n- intros A B C t1 t2 Ht a.\n  rewrite Ht; apply optionZero_natural.\n- intros A B C t1 t2 Ht a.\n  rewrite Ht; apply optionZero_natural.\n- intros A B C D s1 s2 t1 t2 Hs Ht [[a|b] c]; [apply Hs|apply Ht].\n- intros A B C s1 s2 t1 t2 Hs Ht a.\n  rewrite Hs, Ht.\n  symmetry; apply optionZero_phi.\n- intros A B C t1 t2 Ht a.\n  apply Ht.\n- intros A B C t1 t2 Ht a.\n  apply Ht.\n- intros A B C D s1 s2 h Hs [[a|b] c]; [apply Hs|reflexivity].\n- intros A B C D h t1 t2 Ht [[a|b] c]; [reflexivity|apply Ht].\nQed.\n\nModule Witness.\n\nRecord mixin (term : Ty -> Ty -> Type) := Mixin\n{ witness : forall {A B : Ty}, B -> term A B }.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base :> Core.class term\n; ext  :> mixin term\n}.\n\nStructure Algebra := _Pack { domain :> Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom (a0 : mixin dom) :=\n [find c  | Core.domain c ~ dom | \"is not a Core algebra\" ]\n [find cc | Core.class_of c ~ cc ]\n [find a  | a ~ a0 | \"is not the right mixin\" ]\n @_Pack dom (@Class dom cc a).\n\nNotation Pack dom a := (@packager dom a _ id _ id _ id).\n\nCanonical Structure toCore (alg : Algebra) : Core.Algebra := Core.Pack alg (class_of alg).\n\nModule Combinators.\n\nDefinition witness {A B : Ty} {alg : Algebra} : B -> alg A B := witness (class_of alg).\n\nEnd Combinators.\n\nModule Parametric.\nImport Combinators.\n\nRecord mixin {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { _ : forall A B b, rel (witness b) (@witness A B _ b) }.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base :> Core.Parametric.class (@rel)\n ; ext :> mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nEnd Witness.\nExport Witness.Combinators.\nCoercion Witness.domain : Witness.Algebra >-> Funclass.\nCoercion Witness.toCore : Witness.Algebra >-> Core.Algebra.\nCoercion Witness.base : Witness.class >-> Core.class.\nCoercion Witness.ext : Witness.class >-> Witness.mixin.\nCoercion Witness.Parametric.rel : Witness.Parametric.Rel >-> Funclass.\nCanonical Structure Witness.toCore.\n\nLemma witness_Parametric {alg1 alg2 : Witness.Algebra} (R : Witness.Parametric.Rel alg1 alg2)\n  {A B} b : R A B (witness b) (witness b).\nProof.\ndestruct R as [R [Rb []]].\ncbn; auto.\nQed.\n#[export] Hint Immediate witness_Parametric : parametricity.\n\nSection WitnessSem.\n\nDefinition WitnessFunSem_mixin : Witness.mixin Arrow :=\n  {| Witness.witness A B b a := b |}.\n\nDefinition WitnessSem_mixin (M : CIMonad) : Witness.mixin (Kleisli M) :=\n  {| Witness.witness A B b a := eta b |}.\n\nEnd WitnessSem.\nCanonical Structure WitnessFunSem : Witness.Algebra := Witness.Pack Arrow WitnessFunSem_mixin.\nCanonical Structure WitnessSem (M : CIMonad) : Witness.Algebra :=\n  Witness.Pack (Kleisli M) (WitnessSem_mixin M).\n\nLemma WitnessSem_initial {M : CIMonad} {A B} {t : forall {alg : Witness.Algebra}, alg A B} (Ht : Witness.Parametric (@t)) :\n  forall a, |[ t ]|^M a = eta (|[ t ]| a).\nProof.\nset (R A B (x : Kleisli M A B) (y : Arrow A B) := forall a, |[ x ]|^M a = eta (|[ y ]| a)).\nrefine (Ht _ _ (Witness.Parametric.Pack (_ : Witness.Parametric.class R))).\ndo 2 constructor; unfold R; clear; intros; cbn.\n- reflexivity.\n- rewrite kleisli_comp_def, Hs, <- kleisli_comp_def.\n  rewrite kleisli_compr; apply Ht.\n- reflexivity.\n- rewrite Ht; apply eta_natural.\n- rewrite Ht; apply eta_natural.\n- destruct a as [[a|b] c]; [apply Hs|apply Ht].\n- rewrite Hs, Ht.\n  apply phi_eta.\n- apply Ht.\n- apply Ht.\n- reflexivity.\nQed.\n\nModule AssertionWitness.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base :> Assertion.class term\n; ext  :> Witness.mixin term\n}.\n\nDefinition base2 term (c : class term) : Witness.class term := Witness.Class (base c) (ext c).\n\nStructure Algebra := _Pack { domain :> Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom :=\n [find a  | Assertion.domain a ~ dom | \"is not a Assertion algebra\" ]\n [find ac | Assertion.class_of a ~ ac ]\n [find w  | Witness.domain w ~ dom | \"is not a Witness algebra\" ]\n [find wm | Witness.ext (Witness.class_of w) ~ wm ]\n @_Pack dom (@Class dom ac wm).\n\nNotation Pack dom := (@packager dom _ id _ id _ id _ id).\n\nCanonical Structure toCore (alg : Algebra) : Core.Algebra := Core.Pack alg (class_of alg).\nCanonical Structure toAssertion (alg : Algebra) : Assertion.Algebra := Assertion.Pack alg (class_of alg).\nCanonical Structure toWitness (alg : Algebra) : Witness.Algebra := Witness.Pack alg (class_of alg).\n\nModule Parametric.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base :> Assertion.Parametric.class (@rel)\n ; ext :> Witness.Parametric.mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nEnd AssertionWitness.\nCoercion AssertionWitness.domain : AssertionWitness.Algebra >-> Funclass.\nCoercion AssertionWitness.toAssertion : AssertionWitness.Algebra >-> Assertion.Algebra.\nCoercion AssertionWitness.toWitness : AssertionWitness.Algebra >-> Witness.Algebra.\nCoercion AssertionWitness.base : AssertionWitness.class >-> Assertion.class.\nCoercion AssertionWitness.base2 : AssertionWitness.class >-> Witness.class.\nCoercion AssertionWitness.Parametric.rel : AssertionWitness.Parametric.Rel >-> Funclass.\nCanonical Structure AssertionWitness.toCore.\nCanonical Structure AssertionWitness.toAssertion.\nCanonical Structure AssertionWitness.toWitness.\n\nCanonical Structure AssertionWitnessSem (M : CIMonadZero) : AssertionWitness.Algebra :=\n  AssertionWitness.Pack (Kleisli M).\n\nLemma AssertionWitnessSem_initial {M : CIMonadZero} {A B} {t : forall {alg : AssertionWitness.Algebra}, alg A B} (Ht : AssertionWitness.Parametric (@t)) :\n  forall (a : A), |[ t ]|^M a = optionZero (|[ t ]|^option a).\nProof.\nset (R := fun A B (x : AssertionSem M A B) (y : AssertionSem option_Monad_Zero A B) =>\n          forall a : A, x a = optionZero (y a)).\nrefine (Ht _ _ (AssertionWitness.Parametric.Pack (_ : AssertionWitness.Parametric.class R))).\nrepeat constructor; unfold R; clear; try reflexivity; cbn.\n- intros A B C s1 s2 t1 t2 Hs Ht a.\n  symmetry; rewrite kleisli_comp_def.\n  rewrite optionZero_mu, optionZero_natural, map_comp, <- optionZero_natural, <- Hs.\n  erewrite map_ext;[|intros;symmetry;apply Ht].\n  rewrite <- kleisli_comp_def.\n  reflexivity.\n- intros A B C t1 t2 Ht a.\n  rewrite Ht; apply optionZero_natural.\n- intros A B C t1 t2 Ht a.\n  rewrite Ht; apply optionZero_natural.\n- intros A B C D s1 s2 t1 t2 Hs Ht [[a|b] c]; [apply Hs|apply Ht].\n- intros A B C s1 s2 t1 t2 Hs Ht a.\n  rewrite Hs, Ht.\n  symmetry; apply optionZero_phi.\n- intros A B C t1 t2 Ht a.\n  apply Ht.\n- intros A B C t1 t2 Ht a.\n  apply Ht.\n- intros A B C D s1 s2 h Hs [[a|b] c]; [apply Hs|reflexivity].\n- intros A B C D h t1 t2 Ht [[a|b] c]; [reflexivity|apply Ht].\nQed.\n"
  },
  {
    "path": "Coq/Simplicity/Bit.v",
    "content": "Require Import Simplicity.Ty.\nRequire Import Simplicity.Alg.\n\nSet Implicit Arguments.\n\nLocal Open Scope ty_scope.\nLocal Open Scope term_scope.\n\nNotation Bit := (Unit + Unit).\nNotation \"'Bit.zero'\" := (inl tt).\nNotation \"'Bit.one'\" := (inr tt).\n\nDefinition toBool (b : Bit) :=\nmatch b with\n| inl _ => false\n| inr _ => true\nend.\n\nDefinition fromBool (b : bool) := if b then Bit.one else Bit.zero.\n\nSection Definitions.\n\nDefinition false {A} {term : Core.Algebra} : term A Bit := injl unit.\nDefinition true {A} {term : Core.Algebra} : term A Bit := injr unit.\n\nDefinition cond {A B} {term : Core.Algebra} (thn els : term A B) : term (Bit * A) B :=\n  case (drop els) (drop thn).\n\nDefinition ch {A} {term : Core.Algebra} : term (Bit * (A * A)) A :=\n  cond (O H) (I H).\n\nDefinition not {A} {term : Core.Algebra} (t : term A Bit) : term A Bit :=\n  t &&& unit >>> cond false true.\n\nDefinition and {A} {term : Core.Algebra} (s t : term A Bit) : term A Bit :=\n  s &&& iden >>> cond t false.\n\nDefinition or {A} {term : Core.Algebra} (s t : term A Bit) : term A Bit :=\n  s &&& iden >>> cond true t.\n\nDefinition xor3 {term : Core.Algebra} : term (Bit * (Bit * Bit)) Bit :=\n  cond (cond iden (not iden)) (cond (not iden) iden).\n\nDefinition maj {term : Core.Algebra} : term (Bit * (Bit * Bit)) Bit :=\n  cond (cond true iden) (cond iden false).\n\nEnd Definitions.\n\nLemma false_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {A} : R A Bit false false.\nProof.\nunfold false.\nauto with parametricity.\nQed.\n#[export] Hint Immediate false_Parametric : parametricity.\n\nLemma true_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {A} : R A Bit true true.\nProof.\nunfold true.\nauto with parametricity.\nQed.\n#[export] Hint Immediate true_Parametric : parametricity.\n\nLemma cond_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {A B} s1 s2 t1 t2 : R A B s1 s2 -> R A B t1 t2 -> R (Bit * A) B (cond s1 t1) (cond s2 t2).\nProof.\nunfold cond.\nauto with parametricity.\nQed.\n#[export] Hint Resolve cond_Parametric : parametricity.\n\nLemma ch_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {A} : R _ A ch ch.\nProof.\nunfold ch.\nauto with parametricity.\nQed.\n#[export] Hint Immediate ch_Parametric : parametricity.\n\nLemma not_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {A} t1 t2 : R A Bit t1 t2 -> R A Bit (not t1) (not t2).\nProof.\nunfold not.\nauto with parametricity.\nQed.\n#[export] Hint Resolve not_Parametric : parametricity.\n\nLemma and_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {A} s1 s2 t1 t2 : R A Bit s1 s2 -> R A Bit t1 t2 -> R A Bit (and s1 t1) (and s2 t2).\nProof.\nunfold and.\nauto with parametricity.\nQed.\n#[export] Hint Resolve and_Parametric : parametricity.\n\nLemma or_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {A} s1 s2 t1 t2 : R A Bit s1 s2 -> R A Bit t1 t2 -> R A Bit (or s1 t1) (or s2 t2).\nProof.\nunfold or.\nauto with parametricity.\nQed.\n#[export] Hint Resolve or_Parametric : parametricity.\n\nLemma xor3_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  : R _ _ xor3 xor3.\nProof.\nunfold xor3.\nauto with parametricity.\nQed.\n#[export] Hint Immediate xor3_Parametric : parametricity.\n\nLemma maj_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  : R _ _ maj maj.\nProof.\nunfold maj.\nauto with parametricity.\nQed.\n#[export] Hint Immediate maj_Parametric : parametricity."
  },
  {
    "path": "Coq/Simplicity/BitMachine.v",
    "content": "Require Import PeanoNat.\nRequire Import NArith.\nRequire Import Simplicity.Util.List.\nRequire Import Simplicity.Util.Thrist.\nRequire Import Eqdep_dec.\n\nSet Primitive Projections.\nSet Implicit Arguments.\n\nLocal Open Scope N_scope.\nDeclare Scope mc_scope.\n\nDefinition Cell := option bool.\n\n(* Write-only frames are append only.  We represent the frame by, writeData,\n * the list of cells before the frame's cursor, and by writeEmpty, which\n * contains the number of undefined cells after the cursor.\n *\n * The writeData store the list of cells in reverse order! This is analogous to\n * the zipper used in ReadFrame below.\n *)\nRecord WriteFrame :=\n { writeData : list Cell\n ; writeEmpty : nat\n }.\n\nDefinition writeSize wf := N.of_nat (length (writeData wf)) + N.of_nat (writeEmpty wf).\n\nDefinition newWriteFrame n : WriteFrame := {| writeData := nil; writeEmpty := n |}.\n\n(* Note that fullWriteFrame take a list of cells in forward order and\n * transforms it into the reverse representation.\n *)\nDefinition fullWriteFrame l : WriteFrame := {| writeData := rev l; writeEmpty := 0 |}.\n\nLemma fullWriteFrame_size l : writeSize (fullWriteFrame l) = N.of_nat (length l).\nProof.\nunfold writeSize; cbn.\nrewrite rev_length.\nring.\nQed.\n\n(* Read-only frames are represented in zipper format.  The cells before the\n * cursor are stored in prevData in reverse order.  The cells after the cursor\n * are stored in nextData in forward order.\n *)\nRecord ReadFrame :=\n { prevData : list Cell\n ; nextData : list Cell\n }.\n\nDefinition readSize rf := N.of_nat (length (prevData rf)) + N.of_nat (length (nextData rf)).\n\nDefinition setFrame l := {| prevData := nil; nextData := l |}.\n\n(* The full running state of the Bit Machine is captured by a list of inactive\n * read-only and write-only frames.  The top of the two stacks are held in the\n * activeReadFrame and activeWriteFrame.  This ensures that both stacks are\n * non-empty.\n *)\nRecord RunState :=\n { inactiveReadFrames : list ReadFrame\n ; activeReadFrame : ReadFrame\n ; activeWriteFrame : WriteFrame\n ; inactiveWriteFrames : list WriteFrame\n }.\n\n(* The state of the Bit Machine can either be a running state or a halted\n * state.\n *)\nInductive State :=\n| Halted : State\n| Running : RunState -> State.\nCoercion Running : RunState >-> State.\n\nLemma State_dec (x y : State) : {x = y} + {x <> y}.\nProof.\nrepeat (decide equality).\nQed.\n\nRecord RunStateShape :=\n { inactiveReadFrameSizes : list N\n ; activeReadFrameSize : N\n ; activeWriteFrameSize : N\n ; inactiveWriteFrameSizes : list N\n }.\n\nInductive StateShape :=\n| HaltedSS : StateShape\n| RunningSS : RunStateShape -> StateShape.\nCoercion RunningSS : RunStateShape >-> StateShape.\n\nDefinition runStateShape s :=\n {| inactiveReadFrameSizes := map readSize (inactiveReadFrames s)\n  ; activeReadFrameSize := readSize (activeReadFrame s)\n  ; activeWriteFrameSize := writeSize (activeWriteFrame s)\n  ; inactiveWriteFrameSizes := map writeSize (inactiveWriteFrames s)\n  |}.\n\nDefinition stateShape s :=\nmatch s with\n| Running s0 => RunningSS (runStateShape s0)\n| Halted => HaltedSS\nend.\n\nDefinition stateShapeSize s :=\nmatch s with\n| RunningSS s0 =>\n  N_sum (inactiveReadFrameSizes s0) +\n  activeReadFrameSize s0 +\n  activeWriteFrameSize s0 +\n  N_sum (inactiveWriteFrameSizes s0)\n| HaltedSS => 0\nend.\n\nDefinition stateSize s := stateShapeSize (stateShape s).\n\n(* Logically, the state of the Bit Machine is commonly divided between the part\n * of the state that we are focused on and the rest of state.  The focused part\n * consists of some fragment of data after the cursor in the read-only frame,\n * which contains the encoding of the input to some sub-expression in\n * Simplicity, and some fragment of data around the cursor in the write-only\n * frame, which contains the, partially written, output of some sub-expression.\n *\n * This focused part of the state is captured by the LocalState type.\n * The remainder of the state is captured by the Context type, and happens to\n * be isomorphic to the State type.  The fillContext function combines the\n * LocalState with some context to produce a complete state.\n *)\nDefinition Context := RunState.\n\nDefinition emptyCtx : Context :=\n {| inactiveReadFrames := nil\n  ; activeReadFrame := setFrame nil\n  ; activeWriteFrame := newWriteFrame 0\n  ; inactiveWriteFrames := nil\n  |}.\n\nRecord LocalState :=\n { readLocalState : list Cell\n ; writeLocalState : WriteFrame\n }.\n\nRecord LocalStateShape :=\n { readLocalStateSize : N\n ; writeLocalStateSize : N\n }.\n\nDefinition localStateShape ls :=\n {| readLocalStateSize := N.of_nat (length (readLocalState ls))\n  ; writeLocalStateSize := writeSize (writeLocalState ls)\n  |}.\n\nDefinition localStateShapeSize ls :=\n  readLocalStateSize ls +\n  writeLocalStateSize ls.\n\nDefinition localStateSize ls := localStateShapeSize (localStateShape ls).\n\nDefinition fillContext (ctx : Context) (h : LocalState) : RunState :=\n {| inactiveReadFrames := inactiveReadFrames ctx\n  ; activeReadFrame :=\n      {| prevData := prevData (activeReadFrame ctx)\n       ; nextData := readLocalState h ++ nextData (activeReadFrame ctx)\n       |}\n  ; activeWriteFrame :=\n      {| writeData := writeData (writeLocalState h) ++ writeData (activeWriteFrame ctx)\n       ; writeEmpty := writeEmpty (writeLocalState h) + writeEmpty (activeWriteFrame ctx)\n       |}\n  ; inactiveWriteFrames := inactiveWriteFrames ctx\n  |}.\n\nDefinition fillContextShape (ctx : RunStateShape) (h : LocalStateShape) : StateShape :=\n {| inactiveReadFrameSizes := inactiveReadFrameSizes ctx\n  ; activeReadFrameSize := activeReadFrameSize ctx + readLocalStateSize h\n  ; activeWriteFrameSize := activeWriteFrameSize ctx + writeLocalStateSize h\n  ; inactiveWriteFrameSizes := inactiveWriteFrameSizes ctx\n  |}.\n\nLemma fillContextShape_correct ctx h :\n  stateShape (fillContext ctx h) = fillContextShape (runStateShape ctx) (localStateShape h).\nProof.\ndestruct ctx as [irf [prf nrf] awf iwf].\ndestruct h as [rl wl].\nunfold stateShape, runStateShape, fillContextShape; simpl.\nrepeat f_equal; [unfold readSize|unfold writeSize]; simpl;\nrewrite app_length; repeat rewrite Nat2N.inj_add; ring.\nQed.\n\n(* Sometimes we need to focus in on part of the LocalState.  We can divide the\n * LocalState into a localer state and its (relative) context.  Both the\n * localer state and its context are isomorphic to the LocalState type and we\n * do not give them separate types.\n * We define appendLocalState to combine ls2, a LocalState representing the\n * localer state, with ls1, a LocalState representing its relative context.\n * Note that this append operation makes LocalState a monoid.\n *)\n\nDefinition appendLocalState (ls1 ls2 : LocalState) : LocalState :=\n {| readLocalState := readLocalState ls2 ++ readLocalState ls1\n  ; writeLocalState :=\n    {| writeData := writeData (writeLocalState ls2) ++ writeData (writeLocalState ls1)\n     ; writeEmpty := writeEmpty (writeLocalState ls2) + writeEmpty (writeLocalState ls1)\n     |}\n  |}.\n\n(* The monoid for LocalState above makes fillContext into a (right) monoid\n * action on Contexts.\n *)\nLemma context_action ctx ls1 ls2 :\n  fillContext (fillContext ctx ls1) ls2 = fillContext ctx (appendLocalState ls1 ls2).\nProof.\nunfold fillContext.\ncbn.\nrepeat rewrite app_assoc.\nrewrite Nat.add_assoc.\nreflexivity.\nQed.\n\nDefinition fillReadFrame (ctx : Context) (h : ReadFrame) : RunState :=\n {| inactiveReadFrames := inactiveReadFrames ctx\n  ; activeReadFrame :=\n      {| prevData := prevData h ++ prevData (activeReadFrame ctx)\n       ; nextData := nextData h ++ nextData (activeReadFrame ctx)\n       |}\n  ; activeWriteFrame := activeWriteFrame ctx\n  ; inactiveWriteFrames := inactiveWriteFrames ctx\n  |}.\n\nDefinition fillReadFrameShape (ctx : RunStateShape) (h : N) : StateShape :=\n {| inactiveReadFrameSizes := inactiveReadFrameSizes ctx\n  ; activeReadFrameSize := activeReadFrameSize ctx + h\n  ; activeWriteFrameSize := activeWriteFrameSize ctx\n  ; inactiveWriteFrameSizes := inactiveWriteFrameSizes ctx\n  |}.\n\nLemma fillReadFrameShape_correct ctx h :\n  stateShape (fillReadFrame ctx h) = fillReadFrameShape (runStateShape ctx) (readSize h).\nProof.\ndestruct ctx as [irf [prf nrf] awf iwf].\ndestruct h as [rl wl].\nunfold stateShape, runStateShape, fillReadFrameShape; simpl.\nrepeat f_equal.\nunfold readSize; simpl.\nrepeat rewrite app_length, Nat2N.inj_add; ring.\nQed.\n\nModule MachineCode.\n\n(* Although the types for the following instructions have the form of a\n * Proposition (i.e. they have at most one inhabitant) we put them in the Set\n * universe because we want to compute with the witness values.\n *)\nModule NewFrame.\n\nInductive T n ctx : RunState -> Set :=\nop : T n ctx\n      {| inactiveReadFrames := inactiveReadFrames ctx\n       ; activeReadFrame := activeReadFrame ctx\n       ; activeWriteFrame := newWriteFrame n\n       ; inactiveWriteFrames := activeWriteFrame ctx :: inactiveWriteFrames ctx\n       |}.\n\n(* This isn't really needed, but we add it for completeness *)\nDefinition chk n s0 : (forall s1, T n s0 s1 -> False)+{s1 : RunState & T n s0 s1}.\nright.\neconstructor.\nconstructor.\nDefined.\n\nEnd NewFrame.\n\nModule MoveFrame.\n\nInductive T : RunState -> RunState -> Set :=\nop : forall l ctx,\n    T {| inactiveReadFrames := inactiveReadFrames ctx\n       ; activeReadFrame := activeReadFrame ctx\n       ; activeWriteFrame := fullWriteFrame l\n       ; inactiveWriteFrames := activeWriteFrame ctx :: inactiveWriteFrames ctx\n       |}\n      {| inactiveReadFrames := activeReadFrame ctx :: inactiveReadFrames ctx\n       ; activeReadFrame := setFrame l\n       ; activeWriteFrame := activeWriteFrame ctx\n       ; inactiveWriteFrames := inactiveWriteFrames ctx\n       |}.\n\nDefinition chk s0 : (forall s1, T s0 s1 -> False)+{s1 : RunState & T s0 s1}.\ndestruct s0 as [irf arf [l n] [|awf iwf]].\n left;abstract (inversion 1).\ndestruct n as [|n];[|left;abstract (inversion 1)].\npose (ctx := {| inactiveReadFrames := irf\n              ; activeReadFrame := arf\n              ; activeWriteFrame := awf\n              ; inactiveWriteFrames := iwf\n              |}).\nright.\nexists {| inactiveReadFrames := activeReadFrame ctx :: inactiveReadFrames ctx\n       ; activeReadFrame := setFrame (rev l)\n       ; activeWriteFrame := activeWriteFrame ctx\n       ; inactiveWriteFrames := inactiveWriteFrames ctx\n       |}.\npattern l at 1.\nelim (rev_involutive l).\nexact (op _ ctx).\nDefined.\n\nEnd MoveFrame.\n\nModule DropFrame.\n\nInductive T : RunState -> RunState -> Set :=\nop : forall rf ctx,\n    T {| inactiveReadFrames := activeReadFrame ctx :: inactiveReadFrames ctx\n       ; activeReadFrame := rf\n       ; activeWriteFrame := activeWriteFrame ctx\n       ; inactiveWriteFrames := inactiveWriteFrames ctx\n       |}\n      ctx.\n\nDefinition chk s0 : (forall s1, T s0 s1 -> False)+{s1 : RunState & T s0 s1}.\ndestruct s0 as [[|arf irf] rf awf iwf].\n left;abstract (inversion 1).\nright.\npose (ctx := {| inactiveReadFrames := irf\n              ; activeReadFrame := arf\n              ; activeWriteFrame := awf\n              ; inactiveWriteFrames := iwf\n              |}).\nexists ctx.\nexact (op rf ctx).\nDefined.\n\nEnd DropFrame.\n\nModule Write.\n\nInductive T b : RunState -> RunState -> Set :=\nop : forall ctx,\n    T b\n      (fillContext ctx {| readLocalState := nil\n                        ; writeLocalState := newWriteFrame 1\n                        |})\n      (fillContext ctx {| readLocalState := nil\n                        ; writeLocalState := fullWriteFrame (Some b :: nil)\n                        |}).\n\nDefinition chk b s0 : (forall s1, T b s0 s1 -> False)+{s1 : RunState & T b s0 s1}.\ndestruct s0 as [irf [rp rn] [wd [|we]] iwf].\n left;abstract (inversion 1).\nright.\neexists.\nexact (op _ {| inactiveReadFrames := irf\n        ; activeReadFrame := {| prevData := rp; nextData := rn |}\n        ; activeWriteFrame := {| writeData := wd; writeEmpty := we |}\n        ; inactiveWriteFrames := iwf\n        |}).\nDefined.\n\nEnd Write.\n\nModule Skip.\n\nInductive T n : RunState -> RunState -> Set :=\nop : forall ctx,\n    T n\n      (fillContext ctx {| readLocalState := nil\n                        ; writeLocalState := newWriteFrame n\n                        |})\n      (fillContext ctx {| readLocalState := nil\n                        ; writeLocalState := fullWriteFrame (repeat None n)\n                        |}).\n\nDefinition chk n s0 : (forall s1, T n s0 s1 -> False)+{s1 : RunState & T n s0 s1}.\ndestruct s0 as [irf [rp rn] [wd we] iwf].\ngeneralize (Nat.leb_spec n we).\ndestruct (n <=? we)%nat;intros H.\n right.\n pose (ctx := {| inactiveReadFrames := irf\n               ; activeReadFrame := {| prevData := rp; nextData := rn |}\n               ; activeWriteFrame := {| writeData := wd; writeEmpty := we - n |}\n               ; inactiveWriteFrames := iwf\n               |}).\n exists (fillContext ctx {| readLocalState := nil\n                          ; writeLocalState := fullWriteFrame (repeat None n)\n                          |}).\n replace we with (n + (we - n))%nat.\n  exact (op _ ctx).\n abstract (rewrite Nat.add_comm; apply Nat.sub_add; inversion_clear H; assumption).\nleft.\nabstract(\n inversion 1;\n apply (Nat.lt_nge we n);\n [inversion_clear H; assumption\n |replace <- we;auto with arith\n ]).\nDefined.\n\nEnd Skip.\n\nModule Copy.\n\nInductive T n : RunState -> RunState -> Set :=\nop : forall l ctx, length l = n ->\n    T n\n      (fillContext ctx {| readLocalState := l\n                        ; writeLocalState := newWriteFrame n\n                        |})\n      (fillContext ctx {| readLocalState := l\n                        ; writeLocalState := fullWriteFrame l\n                        |}).\n\nDefinition chk n s0 : (forall s1, T n s0 s1 -> False)+{s1 : RunState & T n s0 s1}.\ndestruct s0 as [irf [rp rn] [wd we] iwf].\ngeneralize (Nat.leb_spec n we).\ndestruct (n <=? we)%nat;intros Hwe.\n generalize (Nat.leb_spec n (length rn)).\n destruct (n <=? length rn)%nat;intros Hrn.\n  right.\n  pose (ctx := {| inactiveReadFrames := irf\n                ; activeReadFrame := {| prevData := rp; nextData := skipn n rn |}\n                ; activeWriteFrame := {| writeData := wd; writeEmpty := we - n |}\n                ; inactiveWriteFrames := iwf\n                |}).\n  pose (l := firstn n rn).\n  exists (fillContext ctx {| readLocalState := l\n                           ; writeLocalState := fullWriteFrame l\n                           |}).\n  elim (firstn_skipn n rn).\n  replace we with (n + (we - n))%nat.\n   refine (op l ctx _).\n   abstract (apply (firstn_length_le _); inversion_clear Hrn; assumption).\n  abstract (rewrite Nat.add_comm; apply Nat.sub_add; inversion_clear Hwe; assumption).\n left.\n abstract (\n  inversion 1;\n  apply (Nat.lt_nge (length rn) n);\n  [inversion_clear Hrn; assumption\n  |replace <- rn; replace <- n; rewrite app_length; auto with arith\n  ]).\nleft.\nabstract(\n inversion 1;\n apply (Nat.lt_nge we n);\n [inversion_clear Hwe; assumption\n |replace <- we;auto with arith\n ]).\nDefined.\n\nEnd Copy.\n\nModule Fwd.\n\nInductive T n : RunState -> RunState -> Set :=\nop : forall l ctx, length l = n ->\n    T n\n      (fillReadFrame ctx {| prevData := nil\n                          ; nextData := l\n                          |})\n      (fillReadFrame ctx {| prevData := rev l\n                          ; nextData := nil\n                          |}).\n\nDefinition chk n s0 : (forall s1, T n s0 s1 -> False)+{s1 : RunState & T n s0 s1}.\nProof.\ndestruct s0 as [irf [rp rn] awf iwf].\ngeneralize (Nat.leb_spec n (length rn)).\ndestruct (n <=? length rn)%nat;intros Hrn.\n right.\n pose (ctx := {| inactiveReadFrames := irf\n               ; activeReadFrame := {| prevData := rp; nextData := skipn n rn |}\n               ; activeWriteFrame := awf\n               ; inactiveWriteFrames := iwf\n               |}).\n pose (l := firstn n rn).\n exists (fillReadFrame ctx {| prevData := rev l\n                            ; nextData := nil\n                            |}).\n elim (firstn_skipn n rn).\n refine (op l ctx _).\n abstract (apply (firstn_length_le _); inversion_clear Hrn; assumption).\nleft.\nabstract (\n inversion 1;\n apply (Nat.lt_nge (length rn) n);\n [inversion_clear Hrn; assumption\n |replace <- rn; replace <- n; rewrite app_length; auto with arith\n ]).\nDefined.\n\nEnd Fwd.\n\nModule Bwd.\n\nInductive T n : RunState -> RunState -> Set :=\nop : forall l ctx, length l = n ->\n    T n\n      (fillReadFrame ctx {| prevData := rev l\n                          ; nextData := nil\n                          |})\n      (fillReadFrame ctx {| prevData := nil\n                          ; nextData := l\n                          |}).\n\nDefinition chk n s0 : (forall s1, T n s0 s1 -> False)+{s1 : RunState & T n s0 s1}.\ndestruct s0 as [irf [rp rn] awf iwf].\ngeneralize (Nat.leb_spec n (length rp)).\ndestruct (n <=? length rp)%nat;intros Hrp.\n right.\n pose (ctx := {| inactiveReadFrames := irf\n               ; activeReadFrame := {| prevData := skipn n rp; nextData := rn |}\n               ; activeWriteFrame := awf\n               ; inactiveWriteFrames := iwf\n               |}).\n pose (l := rev (firstn n rp)).\n exists (fillReadFrame ctx {| prevData := nil\n                            ; nextData := l\n                            |}).\n elim (firstn_skipn n rp).\n elim (rev_involutive (firstn n rp)).\n refine (op l ctx _).\n abstract (unfold l; rewrite rev_length; apply (firstn_length_le _); inversion_clear Hrp; assumption).\nleft.\nabstract(\n inversion 1;\n apply (Nat.lt_nge (length rp) n);\n [inversion_clear Hrp; assumption\n |replace <- rp; replace <- n; rewrite app_length, rev_length; auto with arith\n ]).\nDefined.\n\nEnd Bwd.\n\n(* This machine code type specifies all legal basic Bit Machine state\n * transitions.  Notice that all legal state transitions begin in a RunState\n * and only Abort ends in a Halted state.\n *)\nInductive T : State -> State -> Set :=\n| NewFrame : forall s0 s1 n, NewFrame.T n s0 s1 -> T s0 s1\n| MoveFrame : forall s0 s1, MoveFrame.T s0 s1 -> T s0 s1\n| DropFrame : forall s0 s1, DropFrame.T s0 s1 -> T s0 s1\n| Write : forall s0 s1 b, Write.T b s0 s1 -> T s0 s1\n| Skip : forall s0 s1 n, Skip.T n s0 s1 -> T s0 s1\n| Copy : forall s0 s1 n, Copy.T n s0 s1 -> T s0 s1\n| Fwd : forall s0 s1 n, Fwd.T n s0 s1 -> T s0 s1\n| Bwd : forall s0 s1 n, Bwd.T n s0 s1 -> T s0 s1\n| Abort : forall (s0 : RunState), T s0 Halted.\nArguments NewFrame [s0 s1].\nArguments MoveFrame [s0 s1].\nArguments DropFrame [s0 s1].\nArguments Write [s0 s1].\nArguments Skip [s0 s1].\nArguments Copy [s0 s1].\nArguments Fwd [s0 s1].\nArguments Bwd [s0 s1].\nArguments Abort {s0}.\n\nDefinition newFrame n ctx : T _ _ :=\n NewFrame _ (NewFrame.op n ctx).\n\nDefinition moveFrame l ctx : T _ _ :=\n MoveFrame (MoveFrame.op l ctx).\n\nDefinition dropFrame l ctx : T _ _ :=\n DropFrame (DropFrame.op l ctx).\n\nDefinition write b ctx : T _ _ :=\n Write _ (Write.op b ctx).\n\nDefinition skip n ctx : T _ _ :=\n Skip _ (Skip.op n ctx).\n\nDefinition copy l ctx : T _ _ :=\n Copy _ (Copy.op l ctx (refl_equal _)).\n\nDefinition fwd l ctx : T _ _ :=\n Fwd _ (Fwd.op l ctx (refl_equal _)).\n\nDefinition bwd l ctx : T _ _ :=\n Bwd _ (Bwd.op l ctx (refl_equal _)).\n\nEnd MachineCode.\n\nLocal Open Scope thrist_scope.\n\nNotation \"x ~~> y\" := (MachineCode.T x y) (at level 70) : type_scope.\nNotation \"x ->> y\" := (Thrst MachineCode.T x y) (at level 70) : type_scope.\n\n(* When starting from the Halted state, the final state must also be\n * Halted, and the only trace possible is the empty trace.\n *)\nInductive nop_trace s0 : forall s1, s0 ->> s1 -> Prop :=\n nop_trace_empty : nop_trace [].\n\nLemma runHalt {s} (tr : Halted ->> s): nop_trace tr.\nProof.\ndependent inversion tr.\n constructor.\ninversion t.\nQed.\n\n(* A Bit Machine programs takes an initial state, x, and tries to produce a\n * thrist of basic state transformations to some final state, y. However, a\n * program can potentially crash instead if it encounters an instruction that\n * cannot execute successfully from the given state.\n *)\nDefinition Program := forall x : State, option { y : State & x ->> y }.\n\n(* runProgram lives in Prop so the witness, tr, isn't directly extractable.\n * However, the trace function below can be used to (indirectly) extract this\n * witness value.\n *)\nDefinition runProgram (p : Program) s0 s1 := exists tr : s0 ->> s1, (p s0) = Some (existT _ _ tr).\n\nNotation \"s0 >>- p ->> s1\" := (runProgram p s0 s1) (at level 70, p at next level) : type_scope.\n\nDefinition trace {p s0 s1} : s0 >>- p ->> s1 -> s0 ->> s1.\nunfold runProgram.\nintros Htr.\ndestruct (p s0) as [[s1' Hs1]|].\n replace s1 with s1'.\n  exact Hs1.\n abstract (destruct Htr as [tr Htr]; inversion_clear Htr; reflexivity).\nabstract (elimtype False; destruct Htr as [tr Htr]; discriminate).\nDefined.\n\nLemma trace_correct {p s0 s1} (tr : s0 >>- p ->> s1) : p s0 = Some (existT _ _ (trace tr)).\nProof.\nrevert tr.\nunfold trace, runProgram.\ndestruct (p s0) as [[s1' Hs1]|].\n intros tr.\n set (eq:= trace_subproof _).\n destruct eq; reflexivity.\nintros [tr Htr].\ndiscriminate.\nQed.\n\n(* The nop program has no instructions. *)\nDefinition nop : Program :=\n  fun x => Some (existT _ x []).\n\nLemma nop_correct s : s >>- nop ->> s.\nProof.\neexists.\nreflexivity.\nQed.\n\nLemma nop_complete s1 s2 : s1 >>- nop ->> s2 -> s1 = s2.\nProof.\nintros [tr Htr].\nunfold nop, runProgram in Htr.\ninversion_clear Htr.\nreflexivity.\nQed.\n\n(* For each instruction we define a program that executes only that single\n * instruction.  For each instruction we have a correctness lemma that\n * describes the result of the program when executed with an initial state\n * that is legal for that instruction.\n *)\n\n(* This function is used to build a program from a single instruction.\n * When in the Halted state we ignore the instruction and return the\n * empty trace.\n *)\nDefinition makeProgram {T : RunState -> RunState -> Set}\n                  (inj : forall {s0 s1}, T s0 s1 -> s0 ~~> s1)\n                  (dec : forall s0, (forall s1, T s0 s1 -> False)+{s1 : RunState & T s0 s1})\n                  : Program :=\nfun s0 : State =>\nmatch s0 with\n| Halted => Some (existT _ _ [])\n| Running s0' =>\n match dec s0' with\n | inl _ => None\n | inr (existT _ s2 t) =>\n     Some (existT (fun y : State => s0' ->> y) s2 (inj t <| []))\n end\nend.\n\nInductive complete_spec (T : RunState -> RunState -> Set) : State -> State -> Set :=\n| complete_step : forall s0 s1, T s0 s1 -> complete_spec T s0 s1\n| complete_halted : complete_spec T Halted Halted.\n\nLemma op_complete {T : RunState -> RunState -> Set}\n                  (inj : forall s0 s1, T s0 s1 -> s0 ~~> s1)\n                  (dec : forall s0, (forall s1, T s0 s1 -> False)+{s1 : RunState & T s0 s1})\n                  s0 s1 :\n  s0 >>- makeProgram inj dec ->> s1 -> complete_spec T s0 s1.\nunfold makeProgram, runProgram.\ndestruct s0 as [|s0].\n destruct s1 as [|s1].\n  intros _; constructor.\n abstract (intros Htr; elimtype False; destruct Htr; discriminate).\ndestruct (dec s0) as [|[s1' Hs1]].\n abstract (intros Htr; elimtype False; destruct Htr; discriminate).\nintros Htr.\nreplace s1 with (Running s1').\n constructor; assumption.\nabstract(\n destruct Htr as [tr Htr];\n inversion Htr;\n auto\n).\nDefined.\n\nDefinition newFrame (n : nat) : Program := makeProgram (fun s0 s1 => @MachineCode.NewFrame s0 s1 n) (MachineCode.NewFrame.chk n).\n\nLemma newFrame_correct n (s : RunState) : s >>- newFrame n ->> {|\n       inactiveReadFrames := inactiveReadFrames s;\n       activeReadFrame := activeReadFrame s;\n       activeWriteFrame := newWriteFrame n;\n       inactiveWriteFrames := activeWriteFrame s :: inactiveWriteFrames s |}.\nProof.\neexists.\nreflexivity.\nQed.\n\nDefinition newFrame_complete {n s0 s1} (tr : s0 >>- newFrame n ->> s1)\n : complete_spec (MachineCode.NewFrame.T n) s0 s1\n:= op_complete tr.\n\nDefinition moveFrame : Program := makeProgram MachineCode.MoveFrame MachineCode.MoveFrame.chk.\n\nLemma moveFrame_correct : forall l irf arf awf iwf,\n  {| inactiveReadFrames := irf\n   ; activeReadFrame := arf\n   ; activeWriteFrame := fullWriteFrame l\n   ; inactiveWriteFrames := awf :: iwf\n   |}\n  >>- moveFrame ->>\n  {| inactiveReadFrames := arf :: irf\n   ; activeReadFrame := setFrame l\n   ; activeWriteFrame := awf\n   ; inactiveWriteFrames := iwf\n   |}.\nProof.\neexists.\ncbn.\ngeneralize (rev_involutive (rev l)).\nrewrite (rev_involutive l).\napply K_dec_set.\n repeat decide equality.\nreflexivity.\nQed.\n\nDefinition moveFrame_complete {s0 s1} (tr : s0 >>- moveFrame ->> s1)\n : complete_spec MachineCode.MoveFrame.T s0 s1\n:= op_complete tr.\n\nDefinition dropFrame : Program := makeProgram MachineCode.DropFrame MachineCode.DropFrame.chk.\n\nLemma dropFrame_correct : forall rf s,\n  {| inactiveReadFrames := activeReadFrame s :: inactiveReadFrames s\n   ; activeReadFrame := rf\n   ; activeWriteFrame := activeWriteFrame s\n   ; inactiveWriteFrames := inactiveWriteFrames s\n   |} >>- dropFrame ->> s.\nProof.\neexists.\ndestruct s; reflexivity.\nQed.\n\nDefinition dropFrame_complete {s0 s1} (tr : s0 >>- dropFrame ->> s1)\n : complete_spec MachineCode.DropFrame.T s0 s1\n:= op_complete tr.\n\nDefinition write (b : bool) : Program := makeProgram (fun s0 s1 => @MachineCode.Write s0 s1 b) (MachineCode.Write.chk b).\n\nLemma write_correct : forall b ctx,\n  fillContext ctx {| readLocalState := nil; writeLocalState := newWriteFrame 1 |}\n  >>- write b ->>\n  fillContext ctx\n   {| readLocalState := nil; writeLocalState := fullWriteFrame (Some b :: nil) |}.\nProof.\neexists.\nreflexivity.\nQed.\n\nDefinition write_complete {b s0 s1} (tr : s0 >>- (write b) ->> s1)\n : complete_spec (MachineCode.Write.T b) s0 s1\n:= op_complete tr.\n\nDefinition skip (n : nat) : Program := makeProgram (fun s0 s1 => @MachineCode.Skip s0 s1 n) (MachineCode.Skip.chk n).\n\nLemma skip_correct : forall n ctx,\n  fillContext ctx {| readLocalState := nil; writeLocalState := newWriteFrame n |}\n  >>- skip n ->>\n  fillContext ctx\n   {| readLocalState := nil; writeLocalState := fullWriteFrame (repeat None n) |}.\nProof.\neexists.\nunfold skip, makeProgram, MachineCode.Skip.chk.\ncbn.\nset (H := Nat.leb_spec _ _).\ngeneralize H; clear H.\nrewrite (Compare_dec.leb_correct n (n + writeEmpty (activeWriteFrame ctx))%nat)\n  by auto with arith.\nintros H.\nset (e := MachineCode.Skip.chk_subproof _).\ngeneralize e; clear e.\nreplace (n + writeEmpty (activeWriteFrame ctx) - n)%nat\n with (writeEmpty (activeWriteFrame ctx)).\n  apply (K_dec_set Nat.eq_dec); reflexivity.\nrewrite Nat.add_comm, Nat.add_sub; reflexivity.\nQed.\n\nDefinition skip_complete {n s0 s1} (tr : s0 >>- (skip n) ->> s1)\n : complete_spec (MachineCode.Skip.T n) s0 s1\n:= op_complete tr.\n\nDefinition copy (n : nat) : Program := makeProgram (fun s0 s1 => @MachineCode.Copy s0 s1 n) (MachineCode.Copy.chk n).\n\nLemma copy_correct : forall l ctx,\n  fillContext ctx {| readLocalState := l; writeLocalState := newWriteFrame (length l) |}\n  >>- copy (length l) ->>\n  fillContext ctx {| readLocalState := l; writeLocalState := fullWriteFrame l |}.\nProof.\neexists.\nunfold copy, makeProgram, MachineCode.Copy.chk.\ncbn.\nset (H := Nat.leb_spec _ (_ + writeEmpty _)%nat).\ngeneralize H; clear H.\nrewrite (Compare_dec.leb_correct (length l) (length l + writeEmpty (activeWriteFrame ctx))%nat)\n  by auto with arith.\nintros H.\nset (H1 := Nat.leb_spec _ _).\ngeneralize H1; clear H1.\nrewrite (Compare_dec.leb_correct (length l) (length (l ++ nextData (activeReadFrame ctx))))\n  by (rewrite app_length;auto with arith).\nintros H1.\nset (e := MachineCode.Copy.chk_subproof0 _).\ngeneralize e; clear e.\nreplace (length l + writeEmpty (activeWriteFrame ctx) - length l)%nat\n with (writeEmpty (activeWriteFrame ctx)) by\n (rewrite Nat.add_comm, Nat.add_sub; reflexivity).\napply (K_dec_set Nat.eq_dec).\nset (e := firstn_skipn _ _).\ngeneralize e; clear e.\ngeneralize (MachineCode.Copy.chk_subproof _ H1).\nrewrite firstn_app_3, skipn_app_3; intros e.\napply (K_dec_set).\n repeat decide equality.\nrevert e.\napply (K_dec_set Nat.eq_dec).\nreflexivity.\nQed.\n\nDefinition copy_complete {n s0 s1} (tr : s0 >>- (copy n) ->> s1)\n : complete_spec (MachineCode.Copy.T n) s0 s1\n:= op_complete tr.\n\nDefinition fwd (n : nat) : Program := makeProgram (fun s0 s1 => @MachineCode.Fwd s0 s1 n) (MachineCode.Fwd.chk n).\n\nLemma fwd_correct : forall l ctx,\n  fillReadFrame ctx {| prevData := nil; nextData := l |}\n  >>- fwd (length l) ->>\n  fillReadFrame ctx {| prevData := rev l; nextData := nil |}.\nProof.\neexists.\nunfold fwd, makeProgram, MachineCode.Fwd.chk; cbn.\nset (H := Nat.leb_spec _ _).\ngeneralize H; clear H.\nrewrite (Compare_dec.leb_correct (length l) (length (l ++ nextData (activeReadFrame ctx))))\n  by (rewrite app_length;auto with arith).\nintros H1.\nset (e := firstn_skipn _ _).\ngeneralize e; clear e.\ngeneralize (MachineCode.Fwd.chk_subproof _ H1).\nrewrite firstn_app_3, skipn_app_3; intros e.\napply (K_dec_set).\n repeat decide equality.\nrevert e.\napply (K_dec_set Nat.eq_dec).\nreflexivity.\nQed.\n\nDefinition fwd_complete {n s0 s1} (tr : s0 >>- (fwd n) ->> s1)\n : complete_spec (MachineCode.Fwd.T n) s0 s1\n:= op_complete tr.\n\nDefinition bwd (n : nat) : Program := makeProgram (fun s0 s1 => @MachineCode.Bwd s0 s1 n) (MachineCode.Bwd.chk n).\n\nLemma bwd_correct : forall l ctx,\n  fillReadFrame ctx {| prevData := rev l; nextData := nil |}\n  >>- bwd (length l) ->>\n  fillReadFrame ctx {| prevData := nil; nextData := l |}.\nProof.\neexists.\nunfold bwd, makeProgram, MachineCode.Bwd.chk; cbn.\nset (H := Nat.leb_spec _ _).\ngeneralize H; clear H.\nrewrite (Compare_dec.leb_correct (length l) (length (rev l ++ prevData (activeReadFrame ctx))))\n  by (rewrite app_length, rev_length;auto with arith).\nintros H1.\nset (e := firstn_skipn _ _).\ngeneralize e; clear e.\ngeneralize (MachineCode.Bwd.chk_subproof _ H1).\nrewrite <- rev_length.\nrewrite firstn_app_3, skipn_app_3; intros e.\napply K_dec_set.\n repeat decide equality.\nset (e1 := rev_involutive (rev l)).\ngeneralize e1; clear e1.\nrevert e; rewrite rev_involutive; intros e.\napply K_dec_set.\n repeat decide equality.\nrevert e.\nrewrite rev_length.\napply (K_dec_set Nat.eq_dec).\nreflexivity.\nQed.\n\nDefinition bwd_complete {n s0 s1} (tr : s0 >>- (bwd n) ->> s1)\n : complete_spec (MachineCode.Bwd.T n) s0 s1\n:= op_complete tr.\n\n(* The basic instruction abort halts the machine. Of course if the machine\n * is already halted, it does nothing, like every other program starting from\n * the halted state.\n *)\nDefinition abort : Program :=\nfun s0 : State => Some\nmatch s0 with\n| Halted => existT _ _ []\n| Running s0' => existT _ _ (MachineCode.Abort <| [])\nend.\n\n(* There are two combinators for building larger programs from smaller ones:\n * seq runs two programs, one after the other.  choice runs one of two programs\n * depending on whether the Cell value under the cursor on the active read\n * frame is a 0 or a 1.\n *)\nDefinition seq (p1 p2 : Program) : Program.\nintros x.\ndestruct (p1 x) as [[y thr1]|];[|exact None].\ndestruct (p2 y) as [[z thr2]|];[|exact None].\nexact (Some (existT _ _ (thr1 |><| thr2))).\nDefined.\nNotation \"p1 ;;; p2\" := (seq p1 p2) (at level 40, left associativity) : mc_scope.\n\nDefinition choice (p1 p2 : Program) : Program.\nintros [|x];[exact (Some (existT _ _ []))|].\ndestruct (nextData (activeReadFrame x)) as [|[b|] tl];[exact None| |exact None].\nexact ((if b then p2 else p1) x).\nDefined.\nNotation \"p1 ||| p2\" := (choice p1 p2) (at level 50, left associativity) : mc_scope.\n\nLocal Open Scope mc_scope.\n\nLemma seq_correct p q s0 s1 s2 :\n s0 >>- p ->> s1 ->\n s1 >>- q ->> s2 ->\n s0 >>- p ;;; q ->> s2.\nProof.\nintros [trp Hp] [trq Hq].\neexists.\nunfold seq.\nrewrite Hp, Hq.\nreflexivity.\nQed.\n\nLemma seq_complete p q s0 s2 :\n s0 >>- p ;;; q ->> s2 ->\n { s1 | s0 >>- p ->> s1 & s1 >>- q ->> s2}.\nunfold seq, runProgram.\ndestruct (p s0) as [[s1 tr1]|].\n- intros Hpq.\n  exists s1.\n   exists tr1; reflexivity.\n  abstract (\n   destruct (q s1) as [[s2' tr2]|];\n   [destruct Hpq as [tr Htr];\n    inversion Htr;\n    exists tr2; reflexivity\n   |destruct Hpq; discriminate\n   ]).\n- abstract (intros Hpq; elimtype False; destruct Hpq; discriminate).\nDefined.\n\nLemma choice_left_correct p q s0 s1 :\n head (nextData (activeReadFrame s0)) = Some (Some false) ->\n s0 >>- p ->> s1 ->\n s0 >>- p ||| q ->> s1.\nProof.\nunfold choice, runProgram.\ndestruct (nextData _) as [|[[|]|] tl]; try discriminate.\nauto.\nQed.\n\nLemma choice_right_correct p q s0 s1 :\n head (nextData (activeReadFrame s0)) = Some (Some true) ->\n s0 >>- q ->> s1 ->\n s0 >>- p ||| q ->> s1.\nProof.\nunfold choice, runProgram.\ndestruct (nextData _) as [|[[|]|] tl]; try discriminate.\nauto.\nQed.\n\nLemma choice_complete p q : forall (P : State -> State -> Type),\n       (forall (s0 : RunState) s1 b, head (nextData (activeReadFrame s0)) = Some (Some b) ->\n                                     s0 >>- (if b then q else p) ->> s1 -> P s0 s1) ->\n       P Halted Halted ->\n       forall s0 s1 : State,\n       s0 >>- p ||| q ->> s1 -> P s0 s1.\nintros P H HHalted s0 s1.\nunfold choice, runProgram.\ndestruct s0 as [|s0].\n destruct s1.\n  intros _; exact HHalted.\n try abstract (intros Hpq; elimtype False; destruct Hpq; discriminate).\nspecialize (H s0 s1).\ndestruct (nextData _) as [|[b|]];\n try abstract (intros Hpq; elimtype False; destruct Hpq; discriminate).\nintros Htr.\napply (H b).\n reflexivity.\nassumption.\nDefined.\n\nLemma trace_left p q (s0 : RunState) s1 (trp : s0 >>- p ->> s1) (trpq : s0 >>- p ||| q ->> s1) :\n head (nextData (activeReadFrame s0)) = Some (Some false) ->\n trace trp = trace trpq.\nProof.\nintros H.\nunfold trace, runProgram, choice in *.\ndestruct (nextData _) as [|b];[discriminate|cbn in *].\nrevert trpq.\ninversion_clear H.\ndestruct (p s0) as [[s1' Hs1]|];[|intros [ ]; discriminate].\ndestruct (trace_subproof trp).\nintros trpq.\ngeneralize (trace_subproof trpq).\napply (K_dec_set State_dec).\nreflexivity.\nQed.\n\nLemma trace_right p q (s0 : RunState) s1 (trq : s0 >>- q ->> s1) (trpq : s0 >>- p ||| q ->> s1) :\n head (nextData (activeReadFrame s0)) = Some (Some true) ->\n trace trq = trace trpq.\nProof.\nintros H.\nunfold trace, runProgram, choice in *.\ndestruct (nextData _) as [|b];[discriminate|cbn in *].\nrevert trpq.\ninversion_clear H.\ndestruct (q s0) as [[s1' Hs1]|];[|intros [ ]; discriminate].\ndestruct (trace_subproof trq).\nintros trpq.\ngeneralize (trace_subproof trpq).\napply (K_dec_set State_dec).\nreflexivity.\nQed.\n\n(* bump is notation for a program that is run where the active read frame's\n * cursor is temporarily advanced.\n *)\nDefinition bump n p : Program := fwd n ;;; p ;;; bwd n.\n\nLemma bump_correct p l ctx0 ctx1 :\n fillReadFrame ctx0 {| prevData := rev l; nextData := nil |}\n >>- p ->>\n fillReadFrame ctx1 {| prevData := rev l; nextData := nil |} ->\n fillReadFrame ctx0 {| prevData := nil; nextData := l |}\n >>- bump (length l) p ->>\n fillReadFrame ctx1 {| prevData := nil; nextData := l |}.\nProof.\nintros Hp.\nunfold bump.\nrepeat eapply seq_correct;[apply fwd_correct|exact Hp|apply bwd_correct].\nQed.\n\nLemma bump_complete p l ctx0 ctx1 :\n fillReadFrame ctx0 {| prevData := nil; nextData := l |}\n >>- bump (length l) p ->>\n fillReadFrame ctx1 {| prevData := nil; nextData := l |} ->\n fillReadFrame ctx0 {| prevData := rev l; nextData := nil |}\n >>- p ->>\n fillReadFrame ctx1 {| prevData := rev l; nextData := nil |}.\nProof.\nunfold bump.\nintros Hb.\napply seq_complete in Hb.\ndestruct Hb as [s2 Hb Hs2].\napply seq_complete in Hb.\ndestruct Hb as [s1 Hs1 Hb].\nreplace (_ (fillReadFrame _ _)) with s1.\n replace (_ (fillReadFrame _ _)) with s2.\n  assumption.\n clear - Hs2.\n pose (inv := bwd_complete Hs2);inversion_clear inv as [s0 s1 Hs01|].\n destruct ctx1; inversion Hs01; unfold fillReadFrame; cbn.\n replace l0 with l in *.\n  rewrite (app_inv_head _ _ _ H3).\n  congruence.\n apply (f_equal (firstn (length l0))) in H3.\n rewrite firstn_app_3 in H3.\n replace (length l0) in H3.\n rewrite firstn_app_3 in H3.\n congruence.\nclear - Hs1.\npose (inv := fwd_complete Hs1);inversion_clear inv as [s0 s1' Hs01|].\ndestruct ctx0; inversion Hs01; unfold fillReadFrame; cbn.\nreplace l0 with l in *.\n rewrite (app_inv_head _ _ _ H2).\n congruence.\napply (f_equal (firstn (length l0))) in H2.\nrewrite firstn_app_3 in H2.\nreplace (length l0) in H2.\nrewrite firstn_app_3 in H2.\ncongruence.\nQed.\n\nLemma stateShape_write b x y :\n x >>- write b ->> y ->\n stateShape x = stateShape y.\nProof.\nintros Hxy.\ndestruct (write_complete Hxy) as[x' y' Hxy'|];[|reflexivity].\ninversion_clear Hxy'.\ndo 2 rewrite fillContextShape_correct.\nreflexivity.\nQed.\n\nLemma stateShape_skip n x y :\n x >>- skip n ->> y ->\n stateShape x = stateShape y.\nProof.\nintros Hxy.\ndestruct (skip_complete Hxy) as [x' y' Hxy'|];[|reflexivity].\ninversion_clear Hxy'.\ndo 2 rewrite fillContextShape_correct.\nf_equal.\nunfold localStateShape; cbn.\nrewrite fullWriteFrame_size, repeat_length.\nreflexivity.\nQed.\n\nLemma stateShape_copy n x y :\n x >>- copy n ->> y ->\n stateShape x = stateShape y.\nProof.\nintros Hxy.\ndestruct (copy_complete Hxy) as [x' y' Hxy'|];[|reflexivity].\ninversion_clear Hxy'.\ndo 2 rewrite fillContextShape_correct.\nf_equal.\nunfold localStateShape; cbn.\nrewrite fullWriteFrame_size.\ncongruence.\nQed.\n\nLemma stateShape_fwd n x y :\n x >>- fwd n ->> y ->\n stateShape x = stateShape y.\nProof.\nintros Hxy.\ndestruct (fwd_complete Hxy) as [x' y' Hxy'|];[|reflexivity].\ninversion_clear Hxy'.\ndo 2 rewrite fillReadFrameShape_correct.\nf_equal.\nunfold readSize; cbn.\nrewrite rev_length.\nring.\nQed.\n\nLemma stateShape_bwd n x y :\n x >>- bwd n ->> y ->\n stateShape x = stateShape y.\nProof.\nintros Hxy.\ndestruct (bwd_complete Hxy) as [x' y' Hxy'|];[|reflexivity].\ninversion_clear Hxy'.\ndo 2 rewrite fillReadFrameShape_correct.\nf_equal.\nunfold readSize; cbn.\nrewrite rev_length.\nring.\nQed.\n\nFixpoint maximumMemoryResidence {x y} (tr : x ->> y) : N :=\nmatch tr with\n| Thrist.nil _ _ => stateSize y\n| Thrist.cons _ _ z _ _ tr0 => N.max (stateSize z) (maximumMemoryResidence tr0)\nend.\n\nLemma MMR_app {x y z} (tr0 : x ->> y) (tr1 : y ->> z) :\n maximumMemoryResidence (tr0 |><| tr1) =\n N.max (maximumMemoryResidence tr0) (maximumMemoryResidence tr1).\nProof.\ninduction tr0;cbn.\n induction tr1;cbn;[|rewrite N.max_assoc];rewrite N.max_id; reflexivity.\nrewrite <- N.max_assoc, IHtr0.\nreflexivity.\nQed.\n\nLemma MMR_bounds {x y} (tr0 : x ->> y) :\n N.max (stateSize x) (stateSize y) <= maximumMemoryResidence tr0.\nProof.\napply N.max_lub.\n destruct tr0.\n  reflexivity.\n apply N.le_max_l.\ninduction tr0.\n reflexivity.\netransitivity;[exact IHtr0|apply N.le_max_r].\nQed.\n\nLemma MMR_newFrame n x y (tr : x >>- newFrame n ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize y.\nProof.\nunfold runProgram in tr.\nunfold trace.\nunfold newFrame in *.\ndestruct x as [|x];cbn;destruct (trace_subproof tr);[reflexivity|cbn;clear].\napply N.max_r.\ndestruct x.\nunfold stateSize, stateShape, stateShapeSize.\ncbn.\nrewrite N.add_assoc.\nrepeat apply N.add_le_mono_r.\nrewrite <- N.add_assoc.\nrepeat apply N.add_le_mono_l.\napply N.le_add_r.\nQed.\n\nLemma MMR_moveFrame x y (tr : x >>- moveFrame ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize x.\nProof.\nunfold runProgram in tr.\nunfold trace.\nunfold moveFrame, makeProgram in *.\ndestruct x as [|x];[cbn;destruct (trace_subproof tr);reflexivity|].\ndestruct (MachineCode.MoveFrame.chk x) as [|[y' Hy]]in *.\n destruct tr; discriminate.\ndestruct (trace_subproof tr);cbn.\napply N.max_l.\nunfold stateSize, stateShape, stateShapeSize.\ninversion Hy.\ncbn.\nrewrite fullWriteFrame_size.\napply N.eq_le_incl.\nring.\nQed.\n\nLemma MMR_dropFrame x y (tr : x >>- dropFrame ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize x.\nProof.\nunfold runProgram in tr.\nunfold trace.\nunfold dropFrame, makeProgram in *.\ndestruct x as [|x];[cbn;destruct (trace_subproof tr);reflexivity|].\ndestruct (MachineCode.DropFrame.chk x) as [|[y' Hy]]in *.\n destruct tr; discriminate.\ndestruct (trace_subproof tr);cbn.\napply N.max_l.\nunfold stateSize, stateShape, stateShapeSize.\ninversion Hy.\ncbn.\nrepeat apply N.add_le_mono_r.\nrewrite N.add_comm, <- N.add_assoc.\nrepeat apply N.add_le_mono_l.\napply N.le_add_r.\nQed.\n\nLemma MMR_write b x y (tr : x >>- write b ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize x.\nProof.\nassert (Hx := stateShape_write tr).\nunfold runProgram in tr.\nunfold trace.\nunfold write, makeProgram in *.\ndestruct x as [|x];[cbn;destruct (trace_subproof tr);reflexivity|].\ndestruct (MachineCode.Write.chk b x) as [|[y' Hy]]in *.\n destruct tr; discriminate.\ndestruct (trace_subproof tr);simpl.\nunfold stateSize.\nrewrite Hx.\napply N.max_id.\nQed.\n\nLemma MMR_skip n x y (tr : x >>- skip n ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize x.\nProof.\nassert (Hx := stateShape_skip tr).\nunfold runProgram in tr.\nunfold trace.\nunfold skip, makeProgram in *.\ndestruct x as [|x];[cbn;destruct (trace_subproof tr);reflexivity|].\ndestruct (MachineCode.Skip.chk n x) as [|[y' Hy]]in *.\n destruct tr; discriminate.\ndestruct (trace_subproof tr);simpl.\nunfold stateSize.\nrewrite Hx.\napply N.max_id.\nQed.\n\nLemma MMR_copy n x y (tr : x >>- copy n ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize x.\nProof.\nassert (Hx := stateShape_copy tr).\nunfold runProgram in tr.\nunfold trace.\nunfold copy, makeProgram in *.\ndestruct x as [|x];[cbn;destruct (trace_subproof tr);reflexivity|].\ndestruct (MachineCode.Copy.chk n x) as [|[y' Hy]]in *.\n destruct tr; discriminate.\ndestruct (trace_subproof tr);simpl.\nunfold stateSize.\nrewrite Hx.\napply N.max_id.\nQed.\n\nLemma MMR_fwd n x y (tr : x >>- fwd n ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize x.\nProof.\nassert (Hx := stateShape_fwd tr).\nunfold runProgram in tr.\nunfold trace.\nunfold fwd, makeProgram in *.\ndestruct x as [|x];[cbn;destruct (trace_subproof tr);reflexivity|].\ndestruct (MachineCode.Fwd.chk n x) as [|[y' Hy]]in *.\n destruct tr; discriminate.\ndestruct (trace_subproof tr);simpl.\nunfold stateSize.\nrewrite Hx.\napply N.max_id.\nQed.\n\nLemma MMR_bwd n x y (tr : x >>- bwd n ->> y) :\n   maximumMemoryResidence (trace tr) = stateSize x.\nProof.\nassert (Hx := stateShape_bwd tr).\nunfold runProgram in tr.\nunfold trace.\nunfold bwd, makeProgram in *.\ndestruct x as [|x];[cbn;destruct (trace_subproof tr);reflexivity|].\ndestruct (MachineCode.Bwd.chk n x) as [|[y' Hy]]in *.\n destruct tr; discriminate.\ndestruct (trace_subproof tr);simpl.\nunfold stateSize.\nrewrite Hx.\napply N.max_id.\nQed.\n\nLemma MMR_seq (p q : Program) x y z (trp : x >>- p ->> y) (trq : y >>- q ->> z) (trpq : x >>- p ;;; q ->> z) :\n maximumMemoryResidence (trace trpq) =\n N.max (maximumMemoryResidence (trace trp)) (maximumMemoryResidence (trace trq)).\nProof.\nunfold runProgram in *.\nunfold trace.\nunfold seq in *.\ndestruct (p x) as [[y' Hy]|];[|destruct trp; discriminate].\ndestruct (trace_subproof  trp).\ndestruct (q y') as [[z' Hz]|];[|destruct trq; discriminate].\ndestruct (trace_subproof trq).\ndestruct (trace_subproof trpq).\napply MMR_app.\nQed.\n"
  },
  {
    "path": "Coq/Simplicity/Core.v",
    "content": "Require Import Simplicity.Ty.\n\nSet Implicit Arguments.\n\nInductive Term : Ty -> Ty -> Set :=\n| iden : forall {A}, Term A A\n| comp : forall {A B C}, Term A B -> Term B C -> Term A C\n| unit : forall {A}, Term A Unit\n| injl : forall {A B C}, Term A B -> Term A (Sum B C)\n| injr : forall {A B C}, Term A C -> Term A (Sum B C)\n| case : forall {A B C D},\n    Term (Prod A C) D -> Term (Prod B C) D -> Term (Prod (Sum A B) C) D\n| pair : forall {A B C}, Term A B -> Term A C -> Term A (Prod B C)\n| take : forall {A B C}, Term A C -> Term (Prod A B) C\n| drop : forall {A B C}, Term B C -> Term (Prod A B) C.\n\nFixpoint eval {A B} (x : Term A B) : tySem A -> tySem B :=\nmatch x in Term A B return tySem A -> tySem B with\n| iden => fun a => a\n| comp s t => fun a => eval t (eval s a)\n| unit => fun _ => tt\n| injl t => fun a => inl (eval t a)\n| injr t => fun a => inr (eval t a)\n| case s t => fun p => let (ab, c) := p in\n    match ab with\n    | inl a => eval s (a, c)\n    | inr b => eval t (b, c)\n    end\n| pair s t => fun a => (eval s a, eval t a)\n| take t => fun ab => eval t (fst ab)\n| drop t => fun ab => eval t (snd ab)\nend.\n\nSection Completeness.\n\nFixpoint scribe {A B : Ty} : B -> Term A B :=\nmatch B with\n| Unit => fun _ => unit\n| Sum BL BR => fun b =>\n  match b with\n  | inl l => injl (scribe l)\n  | inr r => injr (scribe r)\n  end\n| Prod B1 B2 => fun b => pair (scribe (fst b)) (scribe (snd b))\nend.\n\nLemma scribe_correct (A B : Ty) (a : A) (b : B) : eval (scribe b) a = b.\nProof.\ninduction B.\n- destruct b; reflexivity.\n- destruct b as [b|b];cbn;f_equal;auto.\n- destruct b as [b0 b1];cbn;f_equal;auto.\nQed.\n\nFixpoint reifyProd {A B C : Ty} : (A -> Term B C) -> Term (Prod A B) C :=\nmatch A with\n| Unit => fun f => drop (f tt)\n| Sum AL AR => fun f => case (reifyProd (fun al => f (inl al)))\n                             (reifyProd (fun ar => f (inr ar)))\n| Prod A1 A2 => fun f => comp (pair (take (take iden))\n                                    (pair (take (drop iden)) (drop iden)))\n                         (reifyProd (fun a1 => reifyProd (fun a2 => f (a1, a2))))\nend.\n\nLemma reifyProd_correct : forall (A B C : Ty) (f : A -> Term B C) (a : A) (b : B),\n  eval (reifyProd f) (a, b) = eval (f a) b.\nProof.\nintros A.\ninduction A; intros B C f a b.\n- destruct a; reflexivity.\n- destruct a as [a|a];cbn;[rewrite IHA1|rewrite IHA2];reflexivity.\n- destruct a as [a1 a2];cbn;rewrite IHA1, IHA2;reflexivity.\nQed.\n\nFixpoint reify {A B : Ty} : (A -> B) -> Term A B :=\nmatch A with\n| Unit => fun f => scribe (f tt)\n| Sum AL AR => fun f => comp (pair iden unit)\n                             (case (take (reify (fun al => f (inl al))))\n                                   (take (reify (fun ar => f (inr ar)))))\n| Prod A1 A2 => fun f => reifyProd (fun a1 => reify (fun a2 => f (a1, a2)))\nend.\n\nLemma reify_correct (A B : Ty) (f : A -> B) (a : A) : eval (reify f) a = f a.\nProof.\ninduction A.\n- destruct a; cbn; apply scribe_correct.\n- destruct a as [a|a];cbn;[apply IHA1|apply IHA2].\n- destruct a as [a0 a1]; cbn; rewrite reifyProd_correct; apply IHA2.\nQed.\n\nTheorem Simplicity_Completeness : forall (A B : Ty) (f : A -> B),\n  { t : Term A B | forall a, eval t a = f a }.\nProof.\nintros A B f.\nexists (reify f).\napply reify_correct.\nDefined.\n\nEnd Completeness."
  },
  {
    "path": "Coq/Simplicity/Delegation.v",
    "content": "Require Import Simplicity.Util.PackedClass.\nImport Coq.Strings.String.StringSyntax.\n\nRequire Import Simplicity.Alg.\nRequire Import Simplicity.MerkleRoot.\nRequire Import Simplicity.Ty.\nRequire Import Simplicity.Word.\n\nSet Implicit Arguments.\nLocal Open Scope ty_scope.\nLocal Open Scope term_scope.\n\nModule Delegation.\n\nRecord mixin (term : Ty -> Ty -> Type) := Mixin\n{ disconnect : forall {A B C D},\n    term (Word256 * A) (B * C) -> term C D -> term A (B * D)\n}.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base :> Witness.class term\n; ext  :> mixin term\n}.\n\nStructure Algebra := _Pack { domain :> Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom (d0 : mixin dom) :=\n [find w  | Witness.domain w ~ dom | \"is not a Witness algebra\" ]\n [find wc | Witness.class_of w ~ wc ]\n [find d  | d ~ d0 | \"is not the right mixin\" ]\n @_Pack dom (@Class dom wc d).\n\nNotation Pack dom d := (@packager dom d _ id _ id _ id).\n\nCanonical Structure toCore (alg : Algebra) : Core.Algebra := Core.Pack alg (class_of alg).\nCanonical Structure toWitness (alg : Algebra) : Witness.Algebra := Witness.Pack alg (class_of alg).\n\nModule Combinators.\n\nDefinition disconnect {A B C D : Ty} {alg : Algebra} : alg (Word256 * A) (B * C) -> alg C D -> alg A (B * D) :=\n  disconnect (class_of alg).\n\nEnd Combinators.\n\nModule Parametric.\nImport Combinators.\n\nRecord mixin {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { _ : forall A B C D s1 s2 t1 t2 (Hs : rel s1 s2) (Ht : rel t1 t2), rel (disconnect s1 t1) (@disconnect A B C D _ s2 t2) }.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base :> Witness.Parametric.class (@rel)\n ; ext :> mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nEnd Delegation.\nExport Delegation.Combinators.\nCoercion Delegation.domain : Delegation.Algebra >-> Funclass.\nCoercion Delegation.toWitness : Delegation.Algebra >-> Witness.Algebra.\nCoercion Delegation.base : Delegation.class >-> Witness.class.\nCoercion Delegation.ext : Delegation.class >-> Delegation.mixin.\nCoercion Delegation.Parametric.rel : Delegation.Parametric.Rel >-> Funclass.\nCanonical Structure Delegation.toCore.\nCanonical Structure Delegation.toWitness.\n\nLemma disconnect_Parametric {alg1 alg2 : Delegation.Algebra} (R : Delegation.Parametric.Rel alg1 alg2)\n  {A B C D} s1 s2 t1 t2 : R (Word256 * A) (B * C) s1 s2 -> R C D t1 t2 -> R A (B * D) (disconnect s1 t1) (disconnect s2 t2).\nProof.\ndestruct R as [R [Rb []]].\ncbn; auto.\nQed.\n#[export] Hint Resolve disconnect_Parametric : parametricity.\n\nModule AssertionDelegation.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base :> AssertionWitness.class term\n; ext  :> Delegation.mixin term\n}.\nDefinition base2 term (c : class term) := Delegation.Class (base c) (ext c).\n\nStructure Algebra := _Pack { domain :> Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom :=\n [find aw  | AssertionWitness.domain aw ~ dom | \"is not a AssertionWitness algebra\" ]\n [find awc | AssertionWitness.class_of aw ~ awc ]\n [find d  | Delegation.domain d ~ dom | \"is not a Delegation algebra\" ]\n [find dm | Delegation.ext (Delegation.class_of d) ~ dm ]\n @_Pack dom (@Class dom awc dm).\n\nNotation Pack dom := (@packager dom _ id _ id _ id _ id).\n\nCanonical Structure toCore (alg : Algebra) : Core.Algebra := Core.Pack alg (class_of alg).\nCanonical Structure toAssertion (alg : Algebra) : Assertion.Algebra := Assertion.Pack alg (class_of alg).\nCanonical Structure toWitness (alg : Algebra) : Witness.Algebra := Witness.Pack alg (class_of alg).\nCanonical Structure toAssertionWitness (alg : Algebra) : AssertionWitness.Algebra := AssertionWitness.Pack alg.\nCanonical Structure toDelegation (alg : Algebra) : Delegation.Algebra := Delegation.Pack alg (class_of alg).\n\nModule Parametric.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base :> AssertionWitness.Parametric.class (@rel)\n ; ext :> Delegation.Parametric.mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nEnd AssertionDelegation.\nCoercion AssertionDelegation.domain : AssertionDelegation.Algebra >-> Funclass.\nCoercion AssertionDelegation.toAssertionWitness : AssertionDelegation.Algebra >-> AssertionWitness.Algebra.\nCoercion AssertionDelegation.toDelegation : AssertionDelegation.Algebra >-> Delegation.Algebra.\nCoercion AssertionDelegation.base : AssertionDelegation.class >-> AssertionWitness.class.\nCoercion AssertionDelegation.base2 : AssertionDelegation.class >-> Delegation.class.\nCoercion AssertionDelegation.Parametric.rel : AssertionDelegation.Parametric.Rel >-> Funclass.\nCanonical Structure AssertionDelegation.toCore.\nCanonical Structure AssertionDelegation.toAssertion.\nCanonical Structure AssertionDelegation.toWitness.\nCanonical Structure AssertionDelegation.toAssertionWitness.\nCanonical Structure AssertionDelegation.toDelegation.\n\nSection MerkleRoot.\n\nLet disconnectTag := Eval vm_compute in commitmentTag \"disconnect\".\n\nDefinition CommitmentRoot_Delegation_mixin : Delegation.mixin CommitmentRoot :=\n {| Delegation.disconnect A B C D s _ := compress_half disconnectTag s |}.\n\nEnd MerkleRoot.\nCanonical Structure CommitmentRoot_Delegation_alg : Delegation.Algebra :=\n  Delegation.Pack CommitmentRoot CommitmentRoot_Delegation_mixin.\nCanonical Structure CommitmentRoot_AssertionDelegation_alg : AssertionDelegation.Algebra :=\n  AssertionDelegation.Pack CommitmentRoot.\n\nSection Delegator.\n\nRecord Delegator (Arrow : Ty -> Ty -> Type) (A B : Ty) :=\n{ delegatorRoot : CommitmentRoot A B\n; runDelegator : Arrow A B\n}.\n\nDefinition CoreDelegator_mixin (alg : Core.Algebra) : Core.class (Delegator alg) :=\n  {| Core.iden A := {| delegatorRoot := iden\n                     ; runDelegator := iden |}\n   ; Core.comp A B C s t := {| delegatorRoot := comp (delegatorRoot s) (delegatorRoot t)\n                             ; runDelegator := comp (runDelegator s) (runDelegator t)\n                             |}\n   ; Core.unit A := {| delegatorRoot := unit\n                     ; runDelegator := unit |}\n   ; Core.injl A B C t := {| delegatorRoot := injl (delegatorRoot t)\n                           ; runDelegator := injl (runDelegator t)\n                           |}\n   ; Core.injr A B C t := {| delegatorRoot := injr (delegatorRoot t)\n                           ; runDelegator := injr (runDelegator t)\n                           |}\n   ; Core.case A B C D s t := {| delegatorRoot := case (delegatorRoot s) (delegatorRoot t)\n                               ; runDelegator := case (runDelegator s) (runDelegator t)\n                               |}\n   ; Core.pair A B C s t := {| delegatorRoot := pair (delegatorRoot s) (delegatorRoot t)\n                             ; runDelegator := pair (runDelegator s) (runDelegator t)\n                             |}\n   ; Core.take A B C t := {| delegatorRoot := take (delegatorRoot t)\n                           ; runDelegator := take (runDelegator t)\n                           |}\n   ; Core.drop A B C t := {| delegatorRoot := drop (delegatorRoot t)\n                           ; runDelegator := drop (runDelegator t)\n                           |}\n   |}.\n\nDefinition AssertionDelegator_mixin (alg : Assertion.Algebra) : Assertion.mixin (Delegator alg) :=\n  {| Assertion.assertl A B C D s ht := {| delegatorRoot := assertl (delegatorRoot s) ht\n                                       ; runDelegator := assertl (runDelegator s) ht\n                                       |}\n   ; Assertion.assertr A B C D hs t := {| delegatorRoot := assertr hs (delegatorRoot t)\n                                       ; runDelegator := assertr hs (runDelegator t)\n                                       |}\n   ; Assertion.fail A B h := {| delegatorRoot := fail h\n                              ; runDelegator := @fail A B alg h\n                              |}\n   |}.\n\nDefinition WitnessDelegator_mixin (alg : Witness.Algebra) : Witness.mixin (Delegator alg) :=\n  {| Witness.witness A B b := {| delegatorRoot := witness b\n                               ; runDelegator := witness b\n                               |}\n   |}.\n\nDefinition DelegationDelegator_mixin (alg : Core.Algebra) : Delegation.mixin (Delegator alg) :=\n  {| Delegation.disconnect A B C D s t :=\n     {| delegatorRoot := @disconnect A B C D _ (delegatorRoot s) (delegatorRoot t)\n      ; runDelegator := scribe (from_hash256 (delegatorRoot t)) &&& iden\n                    >>> runDelegator s >>> take iden &&& drop (runDelegator t)\n      |}\n   |}.\n\nEnd Delegator.\n\nCanonical Structure CoreDelegator (alg : Core.Algebra) : Core.Algebra :=\n  Core.Pack (Delegator alg) (CoreDelegator_mixin alg).\nCanonical Structure AssertionDelegator (alg : Assertion.Algebra) : Assertion.Algebra :=\n  Assertion.Pack (Delegator alg) (AssertionDelegator_mixin alg).\nCanonical Structure WitnessDelegator (alg : Witness.Algebra) : Witness.Algebra :=\n  Witness.Pack (Delegator alg) (WitnessDelegator_mixin alg).\nCanonical Structure AssertionWitnessDelegator (alg : AssertionWitness.Algebra) : AssertionWitness.Algebra :=\n  AssertionWitness.Pack (Delegator alg).\nCanonical Structure DelegationDelegator (alg : Witness.Algebra) : Delegation.Algebra :=\n  Delegation.Pack (Delegator alg) (DelegationDelegator_mixin alg).\nCanonical Structure AssertionDelegationDelegator (alg : AssertionWitness.Algebra) : AssertionDelegation.Algebra :=\n  AssertionDelegation.Pack (Delegator alg).\n\nLemma delegatorRoot_correctness A B (t : forall alg : AssertionDelegation.Algebra, alg A B)\n  (Ht : AssertionDelegation.Parametric t) alg : delegatorRoot (t (AssertionDelegationDelegator alg)) = t _.\nProof.\nset (R := fun A B (x : Delegator alg A B) (y : CommitmentRoot A B) => delegatorRoot x = y).\nrefine (Ht _ _ (AssertionDelegation.Parametric.Pack (_ : AssertionDelegation.Parametric.class R))).\nrepeat constructor; unfold R; clear; intros; cbn; repeat f_equal; assumption.\nQed.\n\nLemma runDelegator_correctness A B (t : forall alg : AssertionWitness.Algebra, alg A B)\n  (Ht : AssertionWitness.Parametric t) alg : runDelegator (t (AssertionWitnessDelegator alg)) = t alg.\nProof.\nset (R := fun A B (x : Delegator alg A B) (y : alg A B) => runDelegator x = y).\nrefine (Ht _ _ (AssertionWitness.Parametric.Pack (_ : AssertionWitness.Parametric.class R))).\nrepeat constructor; unfold R; clear; intros; cbn; repeat f_equal; assumption.\nQed.\n"
  },
  {
    "path": "Coq/Simplicity/Digest.v",
    "content": "Require Import Logic.Eqdep_dec.\nRequire Import Strings.String.\nRequire Import List.\nRequire BinInt.\nImport Coq.ZArith.BinIntDef.\n\nRequire compcert.lib.Integers.\nRequire sha.SHA256.\nRequire Import sha.functional_prog.\nRequire Import sha.general_lemmas.\nGlobal Unset Asymmetric Patterns. (* the VST library does a Global Set so we must unset it. *)\n\nSet Implicit Arguments.\n\nRecord hash256 : Set := Hash256\n { hash256_reg :> SHA256.registers\n ; hash256_len : length hash256_reg = 8\n }.\n\nDefinition hash256_to_bytelist (x : hash256) := intlist_to_bytelist (hash256_reg x).\n\n(* The normalizeInt and normalizeHash functions are extensionally the identity\n * function.  Operationally they work by replacing the internal proof\n * obligations of their inputs with canonical versions of those proofs.  When\n * evaluated in the empty context, this has the effect of pruning away any\n * opaque proof terms.  This will also work whenever the internal data values\n * of the inputs are independent of the context.\n *)\nDefinition normalizeInt (x : Integers.Int.int) : Integers.Int.int.\nset (v := Integers.Int.intval x).\nexists v.\nassert (Hv := Integers.Int.intrange x).\nfold v in Hv.\nunfold BinInt.Z.lt in *.\nsplit;\n[destruct (BinInt.Z.compare (-1) v)\n|destruct (BinInt.Z.compare v Integers.Int.modulus)\n]; solve [reflexivity|destruct Hv; discriminate].\nDefined.\n\nLemma normalizeInt_correct x : normalizeInt x = x.\nProof.\ndestruct x; apply Integers.Int.mkint_eq.\nreflexivity.\nQed.\n\nDefinition normalizeHash (x : hash256) : hash256.\nexists (map normalizeInt (hash256_reg x)).\nassert (Heq := hash256_len x).\nrewrite <- (map_length normalizeInt) in Heq.\ndestruct (length (map normalizeInt (hash256_reg x))) as [|n]; try discriminate.\nrepeat (destruct n as [|n]; try reflexivity; try discriminate).\nDefined.\n\nLemma normalizeHash_correct x : normalizeHash x = x.\nProof.\ndestruct x as [x Hx].\nunfold normalizeHash;cbn.\nset (Heq:= eq_ind_r _ _ _).\ngeneralize Heq; clear Heq.\nreplace (map normalizeInt x) with x\n by (clear; induction x; cbn;[|rewrite normalizeInt_correct, <- IHx]; auto).\nintros Heq.\nf_equal.\napply UIP_dec; decide equality.\nQed.\n\nDefinition byteStringHash (x : list Integers.byte) : hash256 :=\n Hash256 (process_msg SHA256.init_registers (generate_and_pad_alt x))\n  (length_process_msg _).\n\nDefinition stringHash (x : string) : hash256 := byteStringHash (SHA256.str_to_bytes x).\n\nDefinition sha256_iv : hash256 := Hash256 SHA256.init_registers refl_equal.\n\nDefinition compress (iv h1 h2 : hash256) : hash256 :=\n  Hash256 (process_block iv (List.rev (hash256_reg h1 ++ hash256_reg h2)))\n   (length_process_block _ _ (hash256_len iv)).\n\nDefinition compress_half (iv h: hash256) : hash256 :=\n  Hash256 (process_block iv (List.rev (hash256_reg h) ++ repeat Integers.Int.zero 8))\n   (length_process_block _ _ (hash256_len iv))."
  },
  {
    "path": "Coq/Simplicity/MerkleRoot.v",
    "content": "Require Import List.\nRequire Import Coq.Strings.String.\nImport Coq.Strings.Ascii.AsciiSyntax.\n\nRequire Import Simplicity.Alg.\nRequire Export Simplicity.Digest.\nRequire Import Simplicity.Ty.\n\nSet Implicit Arguments.\n\nImport ListNotations.\n\nDefinition tag (ws : list string) :=\n let str := concat (String \"031\" EmptyString) ws in\n let tagDigest := normalizeHash (stringHash str) in\n  normalizeHash (compress sha256_iv tagDigest tagDigest).\n\nDefinition prefix := [\"Simplicity\"%string].\nDefinition typePrefix := prefix ++ [\"Type\"%string].\nDefinition commitmentPrefix := prefix ++ [\"Commitment\"%string].\nDefinition identityPrefix := prefix ++ [\"Identity\"%string].\n\nSection TypeRoot.\n\nLet typeTag tg := tag (typePrefix ++ [tg]).\n\nLet unitTag := Eval vm_compute in typeTag \"unit\".\nLet sumTag := Eval vm_compute in typeTag \"sum\".\nLet prodTag := Eval vm_compute in typeTag \"prod\".\n\nDefinition typeRootAlg : tyAlg hash256 :=\n{| unitA := unitTag\n ; sumA  := compress sumTag\n ; prodA := compress prodTag\n |}.\n\nEnd TypeRoot.\n\n(* :TODO: memoize the computation of type roots. *)\nDefinition typeRoot : Ty -> hash256 := tyCata typeRootAlg.\n\nDefinition commitmentTag tg := tag (commitmentPrefix ++ [tg]).\n\nSection CommitmentRoot.\n\nLet idenTag := Eval vm_compute in commitmentTag \"iden\".\nLet compTag := Eval vm_compute in commitmentTag \"comp\".\nLet unitTag := Eval vm_compute in commitmentTag \"unit\".\nLet injlTag := Eval vm_compute in commitmentTag \"injl\".\nLet injrTag := Eval vm_compute in commitmentTag \"injr\".\nLet caseTag := Eval vm_compute in commitmentTag \"case\".\nLet pairTag := Eval vm_compute in commitmentTag \"pair\".\nLet takeTag := Eval vm_compute in commitmentTag \"take\".\nLet dropTag := Eval vm_compute in commitmentTag \"drop\".\nLet failTag := Eval vm_compute in commitmentTag \"fail\".\nLet witnessTag := Eval vm_compute in commitmentTag \"witness\".\n\nDefinition CommitmentRoot (A B:Ty) := hash256.\n\nDefinition commitmentRoot {A B} (x : CommitmentRoot A B) : hash256 := x.\n\nDefinition CommitmentRoot_Core_mixin : Core.class CommitmentRoot :=\n {| Core.iden A := idenTag\n  ; Core.comp A B C hs ht := compress compTag hs ht\n  ; Core.unit A := unitTag\n  ; Core.injl A B C ht := compress_half injlTag ht\n  ; Core.injr A B C ht := compress_half injrTag ht\n  ; Core.case A B C D hs ht := compress caseTag hs ht\n  ; Core.pair A B C hs ht := compress pairTag hs ht\n  ; Core.take A B C ht := compress_half takeTag ht\n  ; Core.drop A B C ht := compress_half dropTag ht\n  |}.\n\nDefinition CommitmentRoot_Assertion_mixin : Assertion.mixin CommitmentRoot :=\n {| Assertion.assertl A B C D hs ht := compress caseTag hs ht\n  ; Assertion.assertr A B C D hs ht := compress caseTag hs ht\n  ; Assertion.fail A B h := compress failTag (fst h) (snd h)\n  |}.\n\nDefinition CommitmentRoot_Witness_mixin : Witness.mixin CommitmentRoot :=\n {| Witness.witness A B b := witnessTag |}.\n\nEnd CommitmentRoot.\n\nCanonical Structure CommitmentRoot_Core_alg : Core.Algebra :=\n  Core.Pack CommitmentRoot CommitmentRoot_Core_mixin.\n\nCanonical Structure CommitmentRoot_Assertion_alg : Assertion.Algebra :=\n  Assertion.Pack CommitmentRoot CommitmentRoot_Assertion_mixin.\n\nCanonical Structure CommitmentRoot_Witness_alg : Witness.Algebra :=\n  Witness.Pack CommitmentRoot CommitmentRoot_Witness_mixin.\n\nCanonical Structure CommitmentRoot_AssertionWitness_alg : AssertionWitness.Algebra :=\n  AssertionWitness.Pack CommitmentRoot.\n\nDefinition identityHashTag := tag identityPrefix.\n\nSection IdentityRoot.\n\nDefinition IdentityRoot (A B:Ty) := hash256.\n\nDefinition identityHash {A B} (x : IdentityRoot A B) : hash256 :=\n  compress (compress_half identityHashTag x) (typeRoot A) (typeRoot B).\n\nDefinition IdentityRoot_Core_mixin : Core.class IdentityRoot := CommitmentRoot_Core_mixin.\n\nDefinition IdentityRoot_Assertion_mixin : Assertion.mixin IdentityRoot := CommitmentRoot_Assertion_mixin.\n\nEnd IdentityRoot.\n\nCanonical Structure IdentityRoot_Core_alg : Core.Algebra :=\n  Core.Pack IdentityRoot IdentityRoot_Core_mixin.\n\nCanonical Structure IdentityRoot_Assertion_alg : Assertion.Algebra :=\n  Assertion.Pack IdentityRoot IdentityRoot_Assertion_mixin.\n"
  },
  {
    "path": "Coq/Simplicity/Primitive/Bitcoin.v",
    "content": "Require Import ZArith.\nRequire Import String.\nRequire Import Simplicity.Util.List.\nRequire Import compcert.lib.Integers.\nGlobal Unset Asymmetric Patterns. (* the VST library does a Global Set so we must unset it. *)\n\nRequire Import Simplicity.Digest.\nRequire Simplicity.MerkleRoot.\nRequire Import Simplicity.Primitive.\nRequire Import Simplicity.Ty.\nRequire Import Simplicity.Word.\n\nSet Primitive Projections.\nSet Implicit Arguments.\n\nImport ListNotations.\n\nSection DataTypes.\n\nDefinition MAX_MONEY : Z := 21000000 * 10^8.\nNotation moneyRange x := (-1 < x < Z.succ MAX_MONEY)%Z.\n\nDefinition lock := int.\nDefinition script := list byte.\n\nRecord outpoint : Set :=\n { opHash : hash256\n ; opIndex : int\n }.\n\nRecord sigTxInput : Set :=\n { sigTxiPreviousOutpoint : outpoint\n ; sigTxiValue : int64\n ; sigTxiSequence : int\n ; sigTxiValue_bound : moneyRange (Int64.signed sigTxiValue)\n }.\n\nRecord txOutput : Set :=\n { txoValue : int64\n ; txoScript : script\n ; txoValue_bound : moneyRange (Int64.signed txoValue)\n ; txoScript_bound : (Zlength txoScript < Int.modulus)%Z\n }.\n\nRecord sigTx : Set :=\n { sigTxVersion : int\n ; sigTxIn : list sigTxInput\n ; sigTxOut : list txOutput\n ; sigTxLock : lock\n ; sigTxInBounds : (0 < Zlength sigTxIn < Int.modulus)%Z\n ; sigTxOutBounds : (0 < Zlength sigTxOut < Int.modulus)%Z\n ; sigTxTotalInValue : Z := Z_sum (map (fun i => Int64.signed (sigTxiValue i)) sigTxIn)\n ; sigTxTotalOutValue : Z := Z_sum (map (fun i => Int64.signed (txoValue i)) sigTxOut)\n ; sigTxFee : Z := sigTxTotalOutValue - sigTxTotalInValue\n ; sigTxTotalInValue_bound : moneyRange sigTxTotalInValue\n ; sigTxTotalOutValue_bound : moneyRange sigTxTotalOutValue\n ; sigTxFee_bound : moneyRange sigTxFee\n }.\n\nEnd DataTypes.\n\nSection Serialization.\n\nDefinition putHash256 (x : hash256) : list byte := hash256_to_bytelist x.\n\nDefinition putInt64le (x : Int64.int) : list byte :=\nlet z := Int64.unsigned x in\nmap (fun i => Byte.repr (z / two_power_nat (i*Byte.wordsize))%Z) (seq 0 8).\n\nDefinition putInt32le (x : Int.int) : list byte :=\nlet z := Int.unsigned x in\nmap (fun i => Byte.repr (z / two_power_nat (i*Byte.wordsize))%Z) (seq 0 4).\n\nDefinition putOutpoint (x : outpoint) : list byte :=\n    putHash256 (opHash x)\n ++ putInt32le (opIndex x).\n\nEnd Serialization.\n\nModule Bitcoin <: PrimitiveSig.\n\nInductive prim : Ty -> Ty -> Set :=\n| Version : prim Unit Word32\n| LockTime : prim Unit Word32\n| InputsHash : prim Unit Word256\n| OutputsHash : prim Unit Word256\n| NumInputs : prim Unit Word32\n| TotalInputValue : prim Unit Word64\n| CurrentPrevOutpoint : prim Unit (Prod Word256 Word32)\n| CurrentValue : prim Unit Word64\n| CurrentSequence : prim Unit Word32\n| CurrentIndex : prim Unit Word32\n| InputPrevOutpoint : prim Word32 (Sum Unit (Prod Word256 Word32))\n| InputValue : prim Word32 (Sum Unit Word64)\n| InputSequence : prim Word32 (Sum Unit Word32)\n| NumOutputs : prim Unit Word32\n| TotalOutputValue : prim Unit Word64\n| OutputValue : prim Word32 (Sum Unit Word64)\n| OutputScriptHash : prim Word32 (Sum Unit Word256)\n| ScriptCMR : prim Unit Word256.\nDefinition t := prim.\n\nDefinition primName : string := \"Bitcoin\".\n\nDefinition name {a b} (p : t a b) : string :=\nmatch p with\n| Version => \"version\"\n| LockTime => \"locktime\"\n| InputsHash => \"inputsHash\"\n| OutputsHash => \"outputsHash\"\n| NumInputs => \"numInputs\"\n| TotalInputValue => \"totalInputValue\"\n| CurrentPrevOutpoint => \"currentPrevOutpoint\"\n| CurrentValue => \"currentValue\"\n| CurrentSequence => \"currentSequence\"\n| CurrentIndex => \"currentIndex\"\n| InputPrevOutpoint => \"inputPrevOutpoint\"\n| InputValue => \"inputValue\"\n| InputSequence => \"inputSequence\"\n| NumOutputs => \"numOutputs\"\n| TotalOutputValue => \"totalOutputValue\"\n| OutputValue => \"outputValue\"\n| OutputScriptHash => \"outputScriptHash\"\n| ScriptCMR => \"scriptCMR\"\nend.\n\nSection Tag.\n\nLet tag_def {A B} (p : t A B) : hash256.\npose (nm := name p).\nrevert p nm; intros [] nm;\nexact (MerkleRoot.tag (primitivePrefix primName ++ [nm])).\nDefined.\n\n(* Using Eval vm_compute lets us precompute all the tags for all our primitives *)\nDefinition tag {A B} (p : t A B) := Eval vm_compute in (tag_def p).\n(* Try running *)\n(* Print tag.  *)\n\nEnd Tag.\n\nRecord environment :=\n{ envTx : sigTx\n; envIx : nat\n; envScriptCMR : hash256\n; envIxBounded : envIx < length (sigTxIn envTx)\n}.\nDefinition env := environment.\n\nSection primSem.\n\nLet cast {A : Ty} (x : option A) : tySem (Unit + A) :=\nmatch x with\n| Some a => inr a\n| None => inl tt\nend.\n\nLet encodeOutpoint (op : outpoint) : tySem (Word256 * Word32) :=\n (from_hash256 (opHash op), fromZ (Int.unsigned (opIndex op)) : Word32).\n\nDefinition sem {A B} (p : t A B) (a : A) (e : env) : option B :=\nlet tx := envTx e in\nlet ix := envIx e in\nlet currentInput {A : Ty} (f : sigTxInput -> A) := option_map f (nth_error (sigTxIn tx) ix) in\nlet atInput {A : Ty} (f : sigTxInput -> A) (i : Word32) :=\n  Some (cast (option_map f (nth_error (sigTxIn tx) (Z.to_nat (toZ i))))) in\nlet atOutput {A : Ty} (f : txOutput -> A) (i : Word32) :=\n  Some (cast (option_map f (nth_error (sigTxOut tx) (Z.to_nat (toZ i))))) in\nlet outputsHash :=\n  let go i := putInt64le (txoValue i) ++ putHash256 (byteStringHash (txoScript i)) in\n  byteStringHash (concat (map go (sigTxOut tx))) in\nlet inputsHash :=\n  let go i := putOutpoint (sigTxiPreviousOutpoint i) ++ putInt64le (sigTxiValue i) ++ putInt32le (sigTxiSequence i) in\n  byteStringHash (concat (map go (sigTxIn tx))) in\n(match p in prim A B return A -> option B with\n | Version => fun _ => Some (fromZ (Int.signed (sigTxVersion tx)))\n | LockTime => fun _ => Some (fromZ (Int.unsigned (sigTxLock tx)))\n | InputsHash => fun _ => Some (from_hash256 inputsHash)\n | OutputsHash => fun _ => Some (from_hash256 outputsHash)\n | NumInputs => fun _ => Some (fromZ (Zlength (sigTxIn tx)))\n | TotalInputValue => fun _ => Some (fromZ (sigTxTotalInValue tx))\n | CurrentPrevOutpoint => fun _ => currentInput (fun txi => encodeOutpoint (sigTxiPreviousOutpoint txi))\n | CurrentValue => fun _ => currentInput (fun txi => fromZ (Int64.signed (sigTxiValue txi)))\n | CurrentSequence => fun _ => currentInput (fun txi => fromZ (Int.unsigned (sigTxiSequence txi)))\n | CurrentIndex => fun _ => Some (fromZ (Z.of_nat ix))\n | InputPrevOutpoint => atInput (fun txi => encodeOutpoint (sigTxiPreviousOutpoint txi))\n | InputValue => atInput (fun txi => fromZ (Int64.signed (sigTxiValue txi)))\n | InputSequence => atInput (fun txi => fromZ (Int.unsigned (sigTxiSequence txi)))\n | NumOutputs => fun _ => Some (fromZ (Zlength (sigTxOut tx)))\n | TotalOutputValue => fun _ => Some (fromZ (sigTxTotalOutValue tx))\n | OutputValue => atOutput (fun txout => fromZ (Int64.signed (txoValue txout)))\n | OutputScriptHash => atOutput (fun txout => from_hash256 (byteStringHash (txoScript txout)))\n | ScriptCMR => fun _ => Some (from_hash256 (envScriptCMR e))\n end\n) a.\n\nEnd primSem.\n\nEnd Bitcoin.\n\nModule Export PrimitiveBitcoin := PrimitiveModule Bitcoin.\n"
  },
  {
    "path": "Coq/Simplicity/Primitive.v",
    "content": "Require Import Simplicity.Util.List.\nRequire Import Strings.String.\nRequire Import Simplicity.Util.PackedClass.\nRequire Import Simplicity.Util.Monad.\nRequire Import Simplicity.Util.Monad.Reader.\nRequire Import Simplicity.Util.Option.\n\nRequire Import Simplicity.Alg.\nRequire Import Simplicity.Delegation.\nRequire Import Simplicity.MerkleRoot.\nRequire Import Simplicity.Ty.\n\nSet Implicit Arguments.\nImport ListNotations.\n\nDefinition primitivePrefix primName := (MerkleRoot.prefix ++ [\"Primitive\"%string; primName])%list.\nDefinition jetTag := Eval vm_compute in tag (MerkleRoot.prefix ++ [\"Jet\"%string]).\n\nModule Type PrimitiveSig.\n\nParameter t : Ty -> Ty -> Set.\nParameter tag : forall {A B}, t A B -> hash256.\n\nParameter env : Set.\nParameter sem : forall {A B}, t A B -> A -> env -> option B.\n\nEnd PrimitiveSig.\n\nModule PrimitiveModule (Prim : PrimitiveSig).\n\nModule Primitive.\n\nRecord mixin (term : Ty -> Ty -> Type) := Mixin\n{ prim : forall {A B}, Prim.t A B -> term A B\n}.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base : Assertion.class term\n; ext  : mixin term\n}.\n\nStructure Algebra := _Pack { domain : Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom (p0 : mixin dom) :=\n [find a  | Assertion.domain a ~ dom | \"is not a Assertion algebra\" ]\n [find ac | Assertion.class_of a ~ ac ]\n [find p  | p ~ p0 | \"is not the right mixin\" ]\n @_Pack dom (@Class dom ac p).\n\nNotation Pack dom p := (@packager dom p _ id _ id _ id).\n\nModule Coercions.\nCoercion domain : Algebra >-> Funclass.\nCoercion base : class >-> Assertion.class.\nCoercion ext : class >-> mixin.\nEnd Coercions.\n\nModule CanonicalStructures.\nExport Coercions.\nCanonical Structure toCore (alg : Algebra) : Core.Algebra :=\n  Core.Pack alg (class_of alg).\nCanonical Structure toAssertion (alg : Algebra) : Assertion.Algebra :=\n  Assertion.Pack alg (class_of alg).\nEnd CanonicalStructures.\n\nModule Combinators.\nExport CanonicalStructures.\n\nDefinition prim {A B} {alg : Algebra} : Prim.t A B -> alg A B := prim (class_of alg).\n\nEnd Combinators.\n\nModule Parametric.\nImport Combinators.\n\nRecord mixin {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { _ : forall A B (p : Prim.t A B), rel (prim p) (prim p)\n }.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base : Assertion.Parametric.class (@rel)\n ; ext : mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nImport Combinators.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nModule Theory.\nExport Combinators.\nCoercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nLemma prim_Parametric {alg1 alg2 : Algebra} (R : Parametric.Rel alg1 alg2)\n  {A B} (p : Prim.t A B) : R A B (prim p) (prim p).\nProof.\ndestruct R as [R [Rb []]].\ncbn; auto.\nQed.\n#[export] Hint Immediate prim_Parametric : parametricity.\n\nDefinition primSem M A B := Kleisli (ReaderT Prim.env M) A B.\n\nDefinition PrimSem_mixin (M : CIMonadZero) : mixin (primSem M) :=\n  {| Primitive.prim A B p := fun a e => optionZero (Prim.sem p a e)\n   |}.\n\nCanonical Structure CorePrimSem (M : CIMonad) : Core.Algebra :=\n  Core.Pack (primSem M) (CoreSem_mixin (ReaderT_CIMonad Prim.env M)).\nCanonical Structure AssertionPrimSem (M : CIMonadZero) : Assertion.Algebra :=\n  Assertion.Pack (primSem M) (AssertionSem_mixin (ReaderT_CIMonadZero Prim.env M)).\nCanonical Structure PrimitivePrimSem (M : CIMonadZero) : Algebra :=\n  Pack (primSem M) (PrimSem_mixin M).\nCanonical Structure WitnessPrimSem (M : CIMonad) : Witness.Algebra :=\n  Witness.Pack (primSem M) (WitnessSem_mixin (ReaderT_CIMonad Prim.env M)).\nCanonical Structure AssertionWitnessPrimSem (M : CIMonadZero) : AssertionWitness.Algebra :=\n  AssertionWitness.Pack (primSem M).\n\nDefinition CommitmentRoot_Primitive_mixin : mixin CommitmentRoot :=\n {| Primitive.prim A B p := Prim.tag p\n  |}.\n\nCanonical Structure CommitmentRoot_Primitive_alg : Algebra :=\n  Pack CommitmentRoot CommitmentRoot_Primitive_mixin.\n\nDefinition IdentityRoot_Primitive_mixin : mixin IdentityRoot :=\n {| Primitive.prim A B p := Prim.tag p\n  |}.\n\nCanonical Structure IdentityRoot_Primitive_alg : Algebra :=\n  Pack IdentityRoot IdentityRoot_Primitive_mixin.\n\nDefinition Delegator_Primitive_mixin (alg : Algebra) : mixin (Delegator alg) :=\n  {| Primitive.prim A B p := {| delegatorRoot := prim p\n                              ; runDelegator := prim p\n                              |}\n   |}.\n\nCanonical Structure Delegator_Primitive_alg (alg : Algebra) : Algebra :=\n  Pack (Delegator alg) (Delegator_Primitive_mixin alg).\n\nEnd Theory.\n\nEnd Primitive.\nExport Primitive.Theory.\n\nModule Jet.\n\nRecord mixin (term : Ty -> Ty -> Type) := Mixin\n{ jet : forall {A B} (t : forall (term : Primitive.Algebra), term A B),\n          Primitive.Parametric t -> term A B\n}.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base : Primitive.class term\n; ext  : mixin term\n}.\n\nStructure Algebra := _Pack { domain : Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom (p0 : mixin dom) :=\n [find a  | Primitive.domain a ~ dom | \"is not a Primitive algebra\" ]\n [find ac | Primitive.class_of a ~ ac ]\n [find p  | p ~ p0 | \"is not the right mixin\" ]\n @_Pack dom (@Class dom ac p).\n\nNotation Pack dom p := (@packager dom p _ id _ id _ id).\n\nModule Coercions.\nCoercion domain : Algebra >-> Funclass.\nCoercion base : class >-> Primitive.class.\nCoercion ext : class >-> mixin.\nEnd Coercions.\n\nModule CanonicalStructures.\nExport Coercions.\nCanonical Structure toCore (alg : Algebra) : Core.Algebra :=\n  Core.Pack alg (class_of alg).\nCanonical Structure toAssertion (alg : Algebra) : Assertion.Algebra :=\n  Assertion.Pack alg (class_of alg).\nCanonical Structure toPrimitive (alg : Algebra) : Primitive.Algebra :=\n  Primitive.Pack alg (class_of alg).\nEnd CanonicalStructures.\n\nModule Combinators.\nExport CanonicalStructures.\n\nDefinition jet {A B} {alg : Algebra} : forall (t : _), Primitive.Parametric t -> alg A B :=\n  jet (class_of alg).\n\nEnd Combinators.\n\nModule Parametric.\nImport Combinators.\n\nRecord mixin {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { _ : forall A B (t : _) (p : Primitive.Parametric t), @rel A B (jet p) (jet p)\n }.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base : Assertion.Parametric.class (@rel)\n ; ext : mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nImport Combinators.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nModule Theory.\nExport Combinators.\n\nCoercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nLemma jet_Parametric {alg1 alg2 : Algebra} (R : Parametric.Rel alg1 alg2)\n  {A B} {t : _} (p : Primitive.Parametric t) : R A B (jet p) (jet p).\nProof.\ndestruct R as [R [Rb []]].\ncbn; auto.\nQed.\n#[export] Hint Resolve jet_Parametric : parametricity.\n\nDefinition PrimSem_jet_mixin (M : CIMonadZero) : mixin (primSem M) :=\n  {| Jet.jet A B t p := t (PrimitivePrimSem M) |}.\n\nCanonical Structure JetPrimSem (M : CIMonadZero) : Algebra :=\n  Pack (primSem M) (PrimSem_jet_mixin M).\n\nDefinition CommitmentRoot_Jet_mixin : mixin CommitmentRoot :=\n {| Jet.jet A B t p := compress_half jetTag (identityHash (t _))\n  |}.\n\nCanonical Structure CommitmentRoot_Jet_alg : Algebra :=\n  Pack CommitmentRoot CommitmentRoot_Jet_mixin.\n\nDefinition IdentityRoot_Jet_mixin : mixin IdentityRoot :=\n {| Jet.jet A B t p := compress_half jetTag (identityHash (t _))\n  |}.\n\nCanonical Structure IdentityRoot_Jet_alg : Algebra :=\n  Pack IdentityRoot IdentityRoot_Jet_mixin.\n\nDefinition Delegator_Jet_mixin (alg : Algebra) : mixin (Delegator alg) :=\n  {| Jet.jet A B t p := {| delegatorRoot := jet p\n                         ; runDelegator := jet p\n                         |}\n   |}.\n\nCanonical Structure Delegator_Jet_alg (alg : Algebra) : Algebra :=\n  Pack (Delegator alg) (Delegator_Jet_mixin alg).\n\nEnd Theory.\nEnd Jet.\nExport Jet.Theory.\n\nModule FullSimplicity.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base : Jet.class term\n; ext  : Witness.mixin term\n}.\nDefinition base2 term (c : class term) : AssertionWitness.class term :=\n  AssertionWitness.Class (base c) (ext c).\n\nStructure Algebra := _Pack { domain : Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom :=\n [find j  | Jet.domain j ~ dom | \"is not a Jet algebra\" ]\n [find jc | Jet.class_of j ~ jc ]\n [find aw  | AssertionWitness.domain aw ~ dom | \"is not a AssertionWitness algebra\" ]\n [find awm | AssertionWitness.ext (AssertionWitness.class_of aw) ~ awm ]\n @_Pack dom (@Class dom jc awm).\n\nNotation Pack dom := (@packager dom _ id _ id _ id _ id).\n\nModule Coercions.\nCoercion domain : Algebra >-> Funclass.\nCoercion base : class >-> Jet.class.\nCoercion base2 : class >-> AssertionWitness.class.\nEnd Coercions.\n\nModule CanonicalStructures.\nExport Coercions.\n\nCanonical Structure toCore (alg : Algebra) : Core.Algebra :=\n  Core.Pack alg (class_of alg).\nCanonical Structure toAssertion (alg : Algebra) : Assertion.Algebra :=\n  Assertion.Pack alg (class_of alg).\nCanonical Structure toPrimitive (alg : Algebra) : Primitive.Algebra :=\n  Primitive.Pack alg (class_of alg).\nCanonical Structure toJet (alg : Algebra) : Jet.Algebra :=\n  Jet.Pack alg (class_of alg).\nCanonical Structure toWitiness (alg : Algebra) : Witness.Algebra :=\n  Witness.Pack alg (class_of alg).\nCanonical Structure toAssertionWitiness (alg : Algebra) : AssertionWitness.Algebra :=\n  AssertionWitness.Pack alg.\n\nEnd CanonicalStructures.\n\nModule Parametric.\nImport CanonicalStructures.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base :> Jet.Parametric.class (@rel)\n ; ext :> Witness.Parametric.mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nImport CanonicalStructures.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nModule Theory.\nExport CanonicalStructures.\n\nCoercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nCanonical Structure SimplicityPrimSem (M : CIMonadZero) : Algebra :=\n  Pack (primSem M).\n\nCanonical Structure CommitmentRoot_Simplicity_alg : Algebra :=\n  Pack CommitmentRoot.\n\nCanonical Structure Delegator_Simplicity_alg (alg : Algebra) : Algebra :=\n  Pack (Delegator alg).\n\nLemma runDelegator_correctness A B (t : forall alg : Algebra, alg A B)\n  (Ht : Parametric t) alg : runDelegator (t (Delegator_Simplicity_alg alg)) = t alg.\nProof.\nset (R := fun A B (x : Delegator alg A B) (y : alg A B) => runDelegator x = y).\nrefine (Ht _ _ (Parametric.Pack (_ : Parametric.class R))).\nrepeat constructor; unfold R; clear; intros; cbn; repeat f_equal; assumption.\nQed.\n\nEnd Theory.\n\nEnd FullSimplicity.\nExport FullSimplicity.Theory.\n\nModule FullSimplicityWithDelegation.\n\nRecord class (term : Ty -> Ty -> Type) := Class\n{ base : FullSimplicity.class term\n; ext  : Delegation.mixin term\n}.\nDefinition base2 term (c : class term) : AssertionDelegation.class term :=\n  AssertionDelegation.Class (base c) (ext c).\n\nStructure Algebra := _Pack { domain : Ty -> Ty -> Type; class_of : class domain }.\n\nDefinition packager dom :=\n [find fs  | FullSimplicity.domain fs ~ dom | \"is not a FullSimplicity algebra\" ]\n [find fsc | FullSimplicity.class_of fs ~ fsc ]\n [find ad  | AssertionDelegation.domain ad ~ dom | \"is not a AssertionDelegation algebra\" ]\n [find adm | AssertionDelegation.ext (AssertionDelegation.class_of ad) ~ adm ]\n @_Pack dom (@Class dom fsc adm).\n\nNotation Pack dom := (@packager dom _ id _ id _ id _ id).\n\nModule Coercions.\nCoercion domain : Algebra >-> Funclass.\nCoercion base : class >-> FullSimplicity.class.\nCoercion base2 : class >-> AssertionDelegation.class.\nEnd Coercions.\n\nModule CanonicalStructures.\nExport Coercions.\n\nCanonical Structure toCore (alg : Algebra) : Core.Algebra :=\n  Core.Pack alg (class_of alg).\nCanonical Structure toAssertion (alg : Algebra) : Assertion.Algebra :=\n  Assertion.Pack alg (class_of alg).\nCanonical Structure toPrimitive (alg : Algebra) : Primitive.Algebra :=\n  Primitive.Pack alg (class_of alg).\nCanonical Structure toJet (alg : Algebra) : Jet.Algebra :=\n  Jet.Pack alg (class_of alg).\nCanonical Structure toWitiness (alg : Algebra) : Witness.Algebra :=\n  Witness.Pack alg (class_of alg).\nCanonical Structure toAssertionWitiness (alg : Algebra) : AssertionWitness.Algebra :=\n  AssertionWitness.Pack alg.\nCanonical Structure toFullSimplicity (alg : Algebra) : FullSimplicity.Algebra :=\n  FullSimplicity.Pack alg.\nCanonical Structure toDelegation (alg : Algebra) : Delegation.Algebra :=\n  Delegation.Pack alg (class_of alg).\nCanonical Structure toAssertionDelegation (alg : Algebra) : AssertionDelegation.Algebra :=\n  AssertionDelegation.Pack alg.\n\nEnd CanonicalStructures.\n\nModule Parametric.\nImport CanonicalStructures.\n\nRecord class {alg1 alg2 : Algebra} (rel : forall {A B}, alg1 A B -> alg2 A B -> Prop) :=\n { base :> FullSimplicity.Parametric.class (@rel)\n ; ext :> Delegation.Parametric.mixin (@rel)\n }.\n\nRecord Rel (alg1 alg2 : Algebra) := Pack\n { rel :> forall {A B}, alg1 A B -> alg2 A B -> Prop\n ; class_of : class (@rel)\n }.\n\nEnd Parametric.\n\nSection Reynolds.\nImport CanonicalStructures.\nLocal Coercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nDefinition Reynolds {A B} (x y : forall (alg : Algebra), alg A B) : Prop :=\n  forall alg1 alg2 (R : Parametric.Rel alg1 alg2), R A B (x alg1) (y alg2).\n\nDefinition Parametric {A B} (x : forall (alg : Algebra), alg A B) : Prop := Reynolds x x.\nEnd Reynolds.\n\nModule Theory.\nExport CanonicalStructures.\n\nCoercion Parametric.rel : Parametric.Rel >-> Funclass.\n\nCanonical Structure CommitmentRoot_Simplicity_alg : Algebra :=\n  Pack CommitmentRoot.\n\nCanonical Structure SimplicityDelegationDelegator (alg : FullSimplicity.Algebra) : Algebra :=\n  Pack (Delegator alg).\n\nLemma delegatorRoot_correctness A B (t : forall alg : Algebra, alg A B)\n  (Ht : Parametric t) alg : delegatorRoot (t (SimplicityDelegationDelegator alg)) = t _.\nProof.\nset (R := fun A B (x : Delegator alg A B) (y : CommitmentRoot A B) => delegatorRoot x = y).\nrefine (Ht _ _ (Parametric.Pack (_ : Parametric.class R))).\nrepeat constructor; unfold R; clear; intros; cbn; repeat f_equal; assumption.\nQed.\n\nEnd Theory.\n\nEnd FullSimplicityWithDelegation.\nExport FullSimplicityWithDelegation.Theory.\n\nEnd PrimitiveModule.\n"
  },
  {
    "path": "Coq/Simplicity/SHA256.v",
    "content": "Require Import ZArith.\nRequire Import List.\nRequire Import Lia.\n\nRequire sha.SHA256.\nRequire Import compcert.lib.Integers.\nGlobal Unset Asymmetric Patterns. (* the VST library does a Global Set so we must unset it. *)\nImport Coq.Strings.String.StringSyntax.\n\nRequire Import Simplicity.Alg.\nRequire Import Simplicity.Bit.\nRequire Import Simplicity.Digest.\nRequire Import Simplicity.Ty.\nRequire Import Simplicity.Word.\n\nSet Implicit Arguments.\n\nImport ListNotations.\nLocal Open Scope list_scope.\nLocal Open Scope ty_scope.\nLocal Open Scope term_scope.\nLocal Open Scope semantic_scope.\n\nLocal Tactic Notation \"introLet\" := match goal with\n  |- context f [let N := ?V in (@?b N)] => let N0 := fresh N in set (N0 := V); let Y := eval cbv beta in (b N0) in let X := context f[Y] in change X\nend.\n\nLocal Tactic Notation \"clearLet\" := match goal with\n  |- context f [let N := ?V in (@?b N)] => let Y := eval cbv beta in (b V) in let X := context f[Y] in change X\nend.\n\nDefinition repr_Block (b : Word512) : list int :=\n  let (b0,b1) := b in\n    hash256_reg (to_hash256 b0) ++ hash256_reg (to_hash256 b1).\n\nDefinition repr_Block_inv (l : list int) : Word512 :=\nmatch l with\n| [b0; b1; b2; b3; b4; b5; b6; b7;\n   b8; b9; ba; bb; bc; bd; be; bf] =>\n  (from_hash256 (Hash256 [b0; b1; b2; b3; b4; b5; b6; b7] refl_equal)\n  ,from_hash256 (Hash256 [b8; b9; ba; bb; bc; bd; be; bf] refl_equal))\n| _ => fromZ 0%Z\nend.\n\nLemma repr_Block_inj (b : Word512) : repr_Block_inv (repr_Block b) = b.\nProof.\nassert (H32 : forall x : Word32, (0 <= toZ x <= Int.max_unsigned)%Z).\n intros x.\n change Int.max_unsigned with (Z.pred Int.modulus).\n rewrite <- Z.lt_le_pred, toZ_mod.\n apply Z.mod_pos_bound.\n reflexivity.\ndestruct b as [[[[b0 b1][b2 b3]][[b4 b5][b6 b7]]]\n               [[[b8 b9][ba bb]][[bc bd][be bf]]]].\nsimpl.\nunfold from_hash256.\nsimpl map.\ncbv iota beta.\nrepeat rewrite Int.unsigned_repr by auto.\nrepeat rewrite from_toZ.\nreflexivity.\nQed.\n\nLemma repr_Block_length (b : Word512) : length (repr_Block b) = 16.\nProof.\ndestruct b as [b0 b1];cbn.\nrewrite app_length, !hash256_len.\nreflexivity.\nQed.\n\nSection Definitions.\n\nDefinition scribe32 (z : Z) {A} {term : Core.Algebra} : term A Word32 :=\n scribe (fromZ z).\n\nDefinition add32 {term : Core.Algebra} : term (Word32 * Word32) Word32 := adder >>> I H.\n\nDefinition xor3Word32 {term : Core.Algebra} : term (Word32 * (Word32 * Word32)) Word32 := \n  bitwiseTri xor3.\n\nDefinition chWord32 {term : Core.Algebra} : term (Word32 * (Word32 * Word32)) Word32 := \n  bitwiseTri ch.\n\nDefinition majWord32 {term : Core.Algebra} : term (Word32 * (Word32 * Word32)) Word32 := \n  bitwiseTri maj.\n\nDefinition shift32 z {term : Core.Algebra} : term Word32 Word32 := \n  shift_const z.\n\nDefinition rotate32 z {term : Core.Algebra} : term Word32 Word32 := \n  rotate_const z.\n\nDefinition hashBlock {term : Core.Algebra} : term (Word256 * Word512) Word256 :=\nlet a32 := add32 in\nlet x32 := xor3Word32 in\nlet diag := O I H &&& I O H in\nlet odiag := O diag in\nlet idiag := I diag in\nlet bigDiag := O I I H &&& I O O H in\nlet part1Schedule := odiag &&& bigDiag in\nlet smallSigma0 := rotate32 (-7) &&& rotate32 (-18) &&& shift32 (-3) >>> x32 in\nlet smallSigma1 := rotate32 (-17) &&& rotate32 (-19) &&& shift32 (-10) >>> x32 in\nlet smallSigma := (O O O (O H &&& (I H >>> smallSigma0)) >>> a32)\n             &&& (I (O O I H &&& (I I O H >>> smallSigma1)) >>> a32) >>> a32 in\nlet schedule := (O part1Schedule &&& (O idiag &&& (O I I I H &&& I (O O O H))))\n           &&& (I part1Schedule &&& (I idiag &&& (I I I I H &&& smallSigma))) in\nlet bigSigma0 := rotate32 (-2) &&& rotate32 (-13) &&& rotate32 (-22) >>> x32 in\nlet bigSigma1 := rotate32 (-6) &&& rotate32 (-11) &&& rotate32 (-25) >>> x32 in\nlet t1 := (O H &&& I I O O O O H >>> a32) &&& I O (I (I I H &&& ((O O H >>> bigSigma1) &&& (O O H &&& diag >>> chWord32) >>> a32)) >>> a32) >>> a32 in\nlet t12 := O ((O I H &&& I H >>> majWord32) &&& (O (O H &&& (I H >>> bigSigma0)) >>> a32)) >>> a32 in\nlet t1d := O O O H &&& I O O H >>> a32 in\nlet part1Round := ((t1 &&& I O O O O H) &&& I O odiag)\n             &&& I O (bigDiag &&& idiag) in\nlet part2Round := ((t12 &&& O O I H) &&& O I H)\n              &&& ((t1d &&& I O I H) &&& I I H) in\nlet round := part1Round >>> part2Round in\nlet step := round &&& I I schedule in\nlet k0 := 1116352408%Z in\nlet ks :=    [ 1899447441; 3049323471; 3921009573;\n   961987163 ; 1508970993; 2453635748; 2870763221;\n   3624381080;  310598401;  607225278; 1426881987;\n   1925078388; 2162078206; 2614888103; 3248222580;\n   3835390401; 4022224774;  264347078;  604807628;\n    770255983; 1249150122; 1555081692; 1996064986;\n   2554220882; 2821834349; 2952996808; 3210313671;\n   3336571891; 3584528711;  113926993;  338241895;\n    666307205;  773529912; 1294757372; 1396182291;\n   1695183700; 1986661051; 2177026350; 2456956037;\n   2730485921; 2820302411; 3259730800; 3345764771;\n   3516065817; 3600352804; 4094571909;  275423344;\n    430227734;  506948616;  659060556;  883997877;\n    958139571; 1322822218; 1537002063; 1747873779;\n   1955562222; 2024104815; 2227730452; 2361852424;\n   2428436474; 2756734187; 3204031479; 3329325298]%Z in\nlet compression := scribe32 k0 &&& iden >>> fold_right (fun k (rec : term (Word32 * (Word256 * Word512)) Word256) => scribe32 k &&& step >>> rec) round ks in\nlet collate (x : term Word256 Word32) := O x &&& I x >>> a32 in\n  O H &&& compression >>>\n    ((collate (O O O H) &&& collate (O O I H)) &&&\n     (collate (O I O H) &&& collate (O I I H))) &&&\n    ((collate (I O O H) &&& collate (I O I H)) &&&\n     (collate (I I O H) &&& collate (I I I H))).\n\nEnd Definitions.\n\nLemma add32_correct (x y : Word32) : \n  Int.repr (toZ (|[add32]| (x,y))) = Int.add (Int.repr (toZ x)) (Int.repr (toZ y)).\nProof.\nrewrite coqlib3.add_repr.\nchange (_ (x, y)) with (|[I H]| (|[adder (n:=5)]| (x,y))).\nrewrite <- (adder_correct _ x y).\ndestruct (|[adder (n:=5)]| (x,y)) as [c z].\nrewrite toZ_Pair, two_power_nat_equiv.\nrewrite <- Int.repr_unsigned, Int.unsigned_repr_eq.\nrewrite Zplus_comm, Z_mod_plus_full.\nrewrite toZ_mod.\nreflexivity.\nQed.\n\nLemma xor3Word32_xor (x y z : Word32) :\n  Int.repr (toZ (|[xor3Word32]| (x,(y,z)))) = Int.xor (Int.xor (Int.repr (toZ x)) (Int.repr (toZ y))) (Int.repr (toZ z)).\nProof.\napply Int.same_bits_eq; intros i Hi.\nrepeat rewrite Int.bits_xor by auto.\nrepeat rewrite Int.testbit_repr by auto.\nset (f a b c := xorb (xorb a b) c).\napply (bitwiseTri_correct f);[|intros [[] | []] [[] | []] [[] | []]];\nreflexivity.\nQed.\n\nLemma chWord32_Ch (x y z : Word32) :\n  Int.repr (toZ (|[chWord32]| (x,(y,z)))) = SHA256.Ch (Int.repr (toZ x)) (Int.repr (toZ y)) (Int.repr (toZ z)).\nProof.\napply Int.same_bits_eq; intros i Hi.\nunfold SHA256.Ch.\nrewrite Int.bits_xor by auto.\nrepeat rewrite Int.bits_and by auto.\nrewrite Int.bits_not by auto.\nrepeat rewrite Int.testbit_repr by auto.\nset (f a b c := xorb (a && b) (negb a && c)).\napply (bitwiseTri_correct f);[|intros [[] | []] [[] | []] [[] | []]];\nreflexivity.\nQed.\n\nLemma majWord32_Maj (x y z : Word32) :\n  Int.repr (toZ (|[majWord32]| (x,(y,z)))) = SHA256.Maj (Int.repr (toZ x)) (Int.repr (toZ y)) (Int.repr (toZ z)).\nProof.\napply Int.same_bits_eq; intros i Hi.\nunfold SHA256.Maj.\nrepeat rewrite Int.bits_xor by auto.\nrepeat rewrite Int.bits_and by auto.\nrepeat rewrite Int.testbit_repr by auto.\nset (f a b c := xorb (xorb (a && c) (b && c)) (a && b)).\napply (bitwiseTri_correct f);[|intros [[] | []] [[] | []] [[] | []]];\nreflexivity.\nQed.\n\nLemma shift32_correct z (Hz : (0 <= (-z) <= Int.max_unsigned)%Z) (x : Word32) :\n  Int.repr (toZ (|[shift32 z]| x)) = general_lemmas.Shr (-z) (Int.repr (toZ x)).\nProof.\nunfold general_lemmas.Shr.\napply Int.same_bits_eq; intros i Hi.\nrewrite Int.testbit_repr by assumption.\nrewrite Int.bits_shru by assumption.\nunfold shift32.\nrewrite <-(Z.opp_involutive z) at 1.\nrewrite shift_const_correct by assumption.\nrewrite Int.unsigned_repr by assumption.\ndestruct (Coqlib.zlt _ _) as [Hiz|Hiz].\n rewrite Int.testbit_repr by lia.\n reflexivity.\nrewrite toZ_mod, two_power_nat_equiv.\napply Z.mod_pow2_bits_high.\nclear - Hiz.\ncbn in *.\nlia.\nQed.\n\nLemma rotate32_correct z (x : Word32) :\n  Int.repr (toZ (|[rotate32 z]| x)) = SHA256.Rotr (-z) (Int.repr (toZ x)).\nProof.\nunfold SHA256.Rotr.\napply Int.same_bits_eq; intros i Hi.\nrewrite Int.bits_ror by assumption.\nrewrite Int.testbit_repr by assumption.\nrewrite Int.testbit_repr by (apply Z_mod_lt; constructor).\nunfold rotate32.\nrewrite <-(Z.opp_involutive z) at 1.\nrewrite rotate_const_correct_word by assumption.\nrewrite Int.unsigned_repr_eq, <- (Zplus_mod_idemp_r ((-z) mod Int.modulus))%Z, <- Znumtheory.Zmod_div_mod; try constructor.\n rewrite Zplus_mod_idemp_r.\n reflexivity.\napply Znumtheory.Zmod_divide; auto with zarith.\nQed.\n\nLemma hashBlock_correct (h : Word256) (b : Word512) :\n to_hash256 (|[hashBlock]| (h, b)) = SHA256.hash_block (to_hash256 h) (repr_Block b) :> SHA256.registers.\nProof.\ncbv beta delta [hashBlock].\ndo 7 clearLet.\ndo 6 introLet.\ndo 5 clearLet.\ndo 6 introLet.\nsimpl.\nchange (|[O H &&& compression]| (h, b)) with (h, |[compression]| (h,b)).\nunfold SHA256.hash_block.\nreplace (SHA256.Round (to_hash256 h) (SHA256.nthi (repr_Block b)) 63) with\n  (hash256_reg (to_hash256 (|[compression]| (h,b)))).\n destruct (|[compression]| (h,b)) as [[[h'0 h'1][h'2 h'3]][[h'4 h'5][h'6 h'7]]].\n destruct h as [[[h0 h1][h2 h3]][[h4 h5][h6 h7]]].\n simpl.\n rewrite <- !add32_correct.\n reflexivity.\nclear collate.\npose (ks' := k0::ks).\npose (fr := fold_right (fun (k rec : Arrow (Word256 * Word512) (Word256 * Word512)) => rec >>> k) H (map (fun k => scribe32 k &&& H >>> step) (rev ks'))).\nreplace (|[compression]| (h,b)) with\n  (|[fr >>> O H]| (h, b)); revgoals.\n unfold fr, compression, ks'; clear fr compression ks'.\n clearbody ks.\n rewrite <- fold_symmetric by reflexivity.\n rewrite <- fold_left_rev_right, map_rev, rev_involutive.\n simpl fold_right at 1.\n set (fr0 := fold_right comp _ _);fold (Word256) in fr0.\n set (fr1 := fold_right _ _ _).\n unfold comp; simpl; fold Word32.\n match goal with\n  |- _ = fr1 ?p => set (p0:=p)\n end.\n change (step _) with (step p0).\n generalize p0; clear p0.\n clear h b.\n induction ks;[reflexivity|].\n intros p.\n unfold fr0.\n simpl fold_right at 1.\n unfold comp; simpl; rewrite IHks.\n destruct p as [k [h b]].\n unfold fr1, comp; simpl; f_equal.\n unfold pair; simpl.\n unfold scribe32; rewrite !scribe_correct.\n reflexivity.\ncut  (to_hash256 (fst (|[fr]| (h, b))) = SHA256.Round (to_hash256 h) (SHA256.nthi (repr_Block b)) 63 :> SHA256.registers\n   /\\ repr_Block (snd (|[fr]| (h, b))) = map (fun n => SHA256.W (SHA256.nthi (repr_Block b)) (Z.of_nat n)) (seq (Z.to_nat (63 + 1)) 16)).\n intros [<- _].\n reflexivity.\nrevert fr.\nrewrite <- (firstn_all ks').\nchange (length ks') with (Z.to_nat (63 + 1)).\ncut (63 < 64)%Z;[|lia].\napply SHA256.Round_ind.\n intros t Ht _ _ fr; unfold fr.\n replace (Z.to_nat _) with 0 by\n  (destruct t as [|t|t];try discriminate;destruct t;reflexivity).\n split.\n  reflexivity.\n cbn.\n repeat (rewrite SHA256.W_equation; cbn).\n destruct b as [[[[b0 b1][b2 b3]][[b4 b5][b6 b7]]]\n                [[[b8 b9][ba bb]][[bc bd][be bf]]]].\n reflexivity.\nintros t Ht Hzlt IH Ht0.\nassert (Ht1 : (t - 1 < 64)%Z) by lia.\nspecialize (IH Ht1).\nrewrite Z.sub_add in IH.\npose (kt := nth (Z.to_nat t) ks' 0%Z).\nassert (Ht2 : Z.to_nat t < length ks').\n change (Z.to_nat t < Z.to_nat 64).\n rewrite <- Z2Nat.inj_lt; lia.\nreplace (firstn (Z.to_nat (t + 1)) ks') with (firstn (Z.to_nat t) ks' ++ [kt]); revgoals.\n rewrite Z2Nat.inj_add by lia.\n unfold kt.\n rewrite sublist.firstn_1_skipn by auto.\n rewrite <- firstn_app_2, firstn_skipn, firstn_length_le by lia.\n reflexivity.\nrewrite rev_app_distr, map_app, fold_right_app.\nset (fr := fold_right _ H _) in *.\nreplace (SHA256.nthi SHA256.K256 t) with (Int.repr kt) by (symmetry; apply map_nth).\nclearbody ks'; clear k0 ks compression.\ndestruct IH as [IH0 IH1].\nsplit.\n rewrite <- IH0.\n replace (SHA256.W (SHA256.nthi (repr_Block b)) t) with (hd Int.zero (repr_Block (snd (fr (h, b))))); revgoals.\n  rewrite IH1.\n  cbn.\n  rewrite Z2Nat.id by lia.\n  reflexivity.\n cbn -[round scribe32 kt].\n unfold scribe32; rewrite scribe_correct.\n match goal with\n  |- _ (to_hash256 (round (_, ?p))) = _ =>\n    destruct p as [[[[h0 h1][h2 h3]][[h4 h5][h6 h7]]] \n                   [[[[b0 b1][b2 b3]][[b4 b5][b6 b7]]]\n                    [[[b8 b9][ba bb]][[bc bd][be bf]]]]]\n end.\n cbn -[rotate32 xor3Word32 majWord32 chWord32 add32 toZ fromZ kt].\n unfold SHA256.Sigma_0, SHA256.Sigma_1.\n assert (Hkt : Int.repr (toZ (fromZ kt : Word32)) = Int.repr kt).\n  rewrite to_fromZ.\n  symmetry.\n  apply Int.eqm_samerepr.\n  apply Zbits.eqmod_mod.\n  reflexivity.\n repeat f_equal;\n  rewrite !add32_correct, ?majWord32_Maj, chWord32_Ch,\n          !xor3Word32_xor, !rotate32_correct, Hkt.\n  rewrite Int.add_commut, Int.add_assoc; f_equal.\n  rewrite Int.add_commut, <- Int.add_assoc; do 2 f_equal.\n  rewrite Int.add_assoc; reflexivity.\n rewrite Int.add_commut; f_equal.\n rewrite Int.add_commut, <- Int.add_assoc; do 2 f_equal.\n rewrite Int.add_assoc; reflexivity.\nunfold iden; simpl.\nrewrite (Zplus_comm t 1), Z2Nat.inj_add by lia.\nclear -IH1 Ht.\nset (p := snd (fr (h, b))) in *.\nmatch goal with\n|- (Int.repr (toZ (O I H (fst (fst ?p0)))))::_ = _ => change p0 with p\nend.\ndestruct p as [[[[b0 b1][b2 b3]][[b4 b5][b6 b7]]]\n               [[[b8 b9][ba bb]][[bc bd][be bf]]]].\nunfold drop, take, iden; simpl.\ninjection IH1; repeat (intros ->); intros _.\nrepeat f_equal.\nrewrite !Pos2Z.inj_succ, Zpos_P_of_succ_nat, Z2Nat.id by auto with zarith.\nreplace (Z.succ _) with (16 + t)%Z by ring.\nrewrite SHA256.W_equation.\ndestruct Coqlib.zlt;[lia|].\nreplace (16 + t - 2)%Z with (Z.of_nat 14 + t)%Z by ring.\nreplace (16 + t - 7)%Z with (Z.of_nat 9 + t)%Z by ring.\nreplace (16 + t - 15)%Z with (Z.of_nat 1 + t)%Z by ring.\nreplace (16 + t - 16)%Z with (Z.of_nat 0 + t)%Z by ring.\nassert (HIH : forall i, i < 16 -> SHA256.W (SHA256.nthi (repr_Block b)) (Z.of_nat i + t) = \n  nth i (map (fun n : nat => SHA256.W (SHA256.nthi (repr_Block b)) (Z.of_nat n))\n        (seq (Z.to_nat t) 16)) (SHA256.W (SHA256.nthi (repr_Block b)) (Z.of_nat 0))).\n intros i Hi.\n rewrite (map_nth (fun n => SHA256.W (SHA256.nthi (repr_Block b)) (Z.of_nat n))).\n rewrite seq_nth by auto.\n rewrite Nat.add_comm, Nat2Z.inj_add, Z2Nat.id by lia.\n reflexivity.\nrewrite <- IH1 in HIH.\nrewrite !HIH by lia.\ncbn -[shift32 rotate32 xor3Word32 add32 toZ].\nrewrite !add32_correct, !xor3Word32_xor, !rotate32_correct, !shift32_correct by (cbn; lia).\nrewrite Int.add_commut; f_equal; apply Int.add_commut.\nQed.\n\nLemma scribe32_Parametric z {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) {A} :\n  R A _ (scribe32 z) (scribe32 z).\nProof.\nunfold scribe32.\nauto with parametricity.\nQed.\n#[export] Hint Immediate scribe32_Parametric : parametricity.\n\nLemma add32_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R _ _ add32 add32.\nProof.\nunfold add32.\nauto with parametricity.\nQed.\n#[export] Hint Immediate add32_Parametric : parametricity.\n\nLemma xor3Word32_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R _ _ xor3Word32 xor3Word32.\nProof.\nunfold xor3Word32.\nrepeat apply buildBitwiseTri_Parametric.\nauto with parametricity.\nQed.\n#[export] Hint Immediate xor3Word32_Parametric : parametricity.\n\nLemma chWord32_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R _ _ chWord32 chWord32.\nProof.\nunfold chWord32.\nrepeat apply buildBitwiseTri_Parametric.\nauto with parametricity.\nQed.\n#[export] Hint Immediate chWord32_Parametric : parametricity.\n\nLemma majWord32_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R _ _ majWord32 majWord32.\nProof.\nunfold majWord32.\nrepeat apply buildBitwiseTri_Parametric.\nauto with parametricity.\nQed.\n#[export] Hint Immediate majWord32_Parametric : parametricity.\n\nLemma shift32_Parametric z {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R _ _ (shift32 z) (shift32 z).\nProof.\nunfold shift32.\nauto with parametricity.\nQed.\n#[export] Hint Immediate shift32_Parametric : parametricity.\n\nLemma rotate32_Parametric z {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R _ _ (rotate32 z) (rotate32 z).\nProof.\nunfold rotate32.\nauto with parametricity.\nQed.\n#[export] Hint Immediate rotate32_Parametric : parametricity.\n\nLemma hashBlock_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R _ _ hashBlock hashBlock.\nProof.\nunfold hashBlock.\nchange Word512 with (Word256*Word256).\nchange Word256 with ((Word64*Word64)*(Word64*Word64)).\nset (f0 := fun k => _).\nset (f1 := fun k => _).\nassert (Hfold : forall l e0 e1, R _ _ e0 e1 ->\n                (forall k rec0 rec1, R _ _ rec0 rec1 -> R _ _ (f0 k rec0) (f1 k rec1))\n             -> R _ _ (fold_right f0 e0 l) (fold_right f1 e1 l));\n [induction l;simpl|unfold f0, f1 in *; clear f0 f1];\nsolve [auto 30 with parametricity].\nQed.\n\n#[export] Hint Immediate hashBlock_Parametric : parametricity.\n\nRequire Import Simplicity.MerkleRoot.\n\nFact identityHash_hashBlock : map Byte.unsigned (hash256_to_bytelist (identityHash hashBlock)) =\n  map Byte.unsigned (sha.functional_prog.hexstring_to_bytelist \"609cc1459375db728f2172c962807e3161df4cced6592d2c4e594a7779ab3175\").\nProof.\nvm_compute.\nreflexivity.\nQed.\n"
  },
  {
    "path": "Coq/Simplicity/StaticAnalysis.v",
    "content": "Require Import NArith.\nRequire Import Simplicity.Util.List.\n\nRequire Import Simplicity.Alg.\nRequire Import Simplicity.BitMachine.\nRequire Import Simplicity.Translate.\nRequire Import Simplicity.Ty.\n\nSet Implicit Arguments.\n\nLocal Open Scope N_scope.\n\nModule StateShape.\n(* In this section we prove that executing Simplicity programs on the Bit\n * Machine starting from *any* state, preserves the shape of the state if it\n * doesn't crash or halt.\n * Although spec allows for starting from the Halted state, any program\n * starting from the Halted state must end in the Halted state, which will\n * violating the assumptions of spec that it doesn't end in the Halted state.\n * Hence this scenario vacuously sastifies the spec.\n *)\n\nDefinition spec {A B : Ty} (p : Naive.Program_ty A B) :=\n  forall s0 (s1 : RunState),\n   s0 >>- p ->> s1 ->\n   stateShape s0 = stateShape s1.\n\nLemma iden_spec {A : Ty} : spec (A:=A) iden.\nProof.\nintros s0 s1.\napply stateShape_copy.\nQed.\n\nLemma comp_spec {A B C : Ty} (s : Naive.Program_ty A B) (t : Naive.Program_ty B C) :\n spec s -> spec t -> spec (comp s t) .\nProof.\nintros Hs Ht s0 s5 Hs05.\nsimpl in Hs05.\napply seq_complete in Hs05.\ndestruct Hs05 as [s4 Hs04 Hs45].\napply seq_complete in Hs04.\ndestruct Hs04 as [s3 Hs03 Hs34].\napply seq_complete in Hs03.\ndestruct Hs03 as [s2 Hs02 Hs23].\napply seq_complete in Hs02.\ndestruct Hs02 as [s1 Hs01 Hs12].\npose (inv := dropFrame_complete Hs45);inversion inv as [s4' s5' Hs45'|]; clear inv Hs45.\nsubst s4; subst s5.\napply Ht in Hs34.\ndestruct s3 as [|s3];[discriminate|].\npose (inv := moveFrame_complete Hs23);inversion inv as [s2' s3' Hs23'|]; clear inv Hs23.\nsubst s2; subst s3.\napply Hs in Hs12.\ndestruct s1 as [|s1];[discriminate|].\npose (inv := newFrame_complete Hs01);inversion inv as [s0' s1' Hs01'|]; clear inv Hs01.\nsubst s0; subst s1.\nrevert Hs12 Hs34.\ninversion_clear Hs01'.\ninversion_clear Hs23'.\ninversion_clear Hs45'.\nclear.\nunfold stateShape, runStateShape; cbn.\ndo 2 inversion 1.\nreflexivity.\nQed.\n\nLemma unit_spec {A : Ty} : spec (A:=A) unit.\nProof.\nintros x y Hxy.\ncbn in Hxy.\napply nop_complete in Hxy.\ncongruence.\nQed.\n\nLemma injl_spec {A B C : Ty} (t : Naive.Program_ty A B) :\n spec t -> spec (injl (C:=C) t).\nProof.\nintros Ht s0 s3 Hs03.\nsimpl in Hs03.\napply seq_complete in Hs03.\ndestruct Hs03 as [s2 Hs02 Hs23].\napply seq_complete in Hs02.\ndestruct Hs02 as [s1 Hs01 Hs12].\nrewrite (stateShape_write Hs01).\nrewrite (stateShape_skip Hs12).\napply (Ht _ _ Hs23).\nQed.\n\nLemma injr_spec {A B C : Ty} (t : Naive.Program_ty A C) :\n spec t -> spec (injr (B:=B) t).\nProof.\nintros Ht s0 s3 Hs03.\nsimpl in Hs03.\napply seq_complete in Hs03.\ndestruct Hs03 as [s2 Hs02 Hs23].\napply seq_complete in Hs02.\ndestruct Hs02 as [s1 Hs01 Hs12].\nrewrite (stateShape_write Hs01).\nrewrite (stateShape_skip Hs12).\napply (Ht _ _ Hs23).\nQed.\n\nLemma bump_spec {A B : Ty} (t : Naive.Program_ty A B) n (Ht : spec t) x (y : RunState) :\n x >>- bump n t ->> y ->\n stateShape x = stateShape y.\nProof.\nunfold bump.\nintros Hxy.\napply seq_complete in Hxy.\ndestruct Hxy as [s2 Hxs2 Hs2y].\napply seq_complete in Hxs2.\ndestruct Hxs2 as [s1 Hxs1 Hs1s2].\nrewrite (stateShape_fwd Hxs1).\ndestruct s2 as [|s2].\n pose (inv := runHalt (trace Hs2y));inversion inv.\nrewrite (Ht _ _ Hs1s2).\napply (stateShape_bwd Hs2y).\nQed.\n\nLemma case_spec {A B C D : Ty} (s : Naive.Program_ty (A * C) D) (t : Naive.Program_ty (B * C) D) :\n spec s -> spec t -> spec (case s t).\nProof.\nintros Hs Ht x y Hxy.\nsimpl in Hxy.\nremember (Running y) as y'.\nrevert Heqy'; pattern x; pattern y; revert x y' Hxy.\napply choice_complete;[intros x y' [|] Hb Hxy ->|discriminate];\neauto using bump_spec.\nQed.\n\nLemma pair_spec {A B C : Ty} (s : Naive.Program_ty A B) (t : Naive.Program_ty A C) :\n spec s -> spec t -> spec (pair s t).\nProof.\nintros Hs Ht x z Hxz.\nsimpl in Hxz.\napply seq_complete in Hxz.\ndestruct Hxz as [y Hxy Hyz].\ndestruct y as [|y].\n pose (inv := runHalt (trace Hyz));inversion inv.\nrewrite (Hs _ _ Hxy).\napply (Ht _ _ Hyz).\nQed.\n\nLemma take_spec {A B C : Ty} (t : Naive.Program_ty A C) :\n spec t -> spec (take (B:=B) t).\nProof.\nauto.\nQed.\n\nLemma drop_spec {A B C : Ty} (t : Naive.Program_ty B C) :\n spec t -> spec (drop (A:=A) t).\nProof.\nintros Ht x y; cbn.\napply bump_spec.\nassumption.\nQed.\n\nLemma Core_spec {A B : Ty} (t : forall {alg : Core.Algebra}, alg A B) (Ht : Core.Parametric (@t)) :\n forall s0 (s1 : RunState),\n s0 >>- @t Naive.translate ->> s1 ->\n stateShape s0 = stateShape s1.\nProof.\nrefine (Ht _ _ (Core.Parametric.Pack (_ : Core.Parametric.class (fun A B x (_:Naive.Program_ty A B) => @spec A B x)))).\nconstructor; intros.\n- apply iden_spec.\n- apply comp_spec; assumption.\n- apply unit_spec.\n- apply injl_spec; assumption.\n- apply injr_spec; assumption.\n- apply case_spec; assumption.\n- apply pair_spec; assumption.\n- apply take_spec; assumption.\n- apply drop_spec; assumption.\nQed.\n\nLemma StateSize A B (p : Naive.Program_ty A B) (Hp : spec p) s0 s1 :\n  s0 >>- p ->> s1 -> stateSize s1 <= stateSize s0.\nProof.\nintros H01.\ndestruct s1 as [|s1];[apply N.le_0_l|].\nunfold stateSize.\nrewrite (Hp _ _ H01).\nreflexivity.\nQed.\n\nEnd StateShape.\n\nModule MaximumMemory.\n\nDefinition bound_ty (A B : Ty) := N.\n\nDefinition extraMemoryBound_class : Core.class bound_ty :=\n  {| Core.iden A := 0\n   ; Core.comp A B C s t := N.of_nat (bitSize B) + N.max s t\n   ; Core.unit A := 0\n   ; Core.injl A B C t := t\n   ; Core.injr A B C t := t\n   ; Core.case A B C D s t := N.max s t\n   ; Core.pair A B C s t := N.max s t\n   ; Core.take A B C t := t\n   ; Core.drop A B C t := t\n   |}.\n\nCanonical Structure extraMemoryBound : Core.Algebra :=\n  Core.Pack bound_ty extraMemoryBound_class.\n\nDefinition MemoryBound {A B : Ty} (t : bound_ty A B) x : N := stateSize x + t.\n\nDefinition spec {A B : Ty} (p : Naive.Program_ty A B) (mt : bound_ty A B)  :=\n  forall x y (tr : x >>- p ->> y),\n   maximumMemoryResidence (trace tr) <= MemoryBound mt x.\n\nLemma iden_spec {A : Ty} : spec iden (iden (A:=A)).\nProof.\nintros x y tr.\nunfold MemoryBound.\ncbn in *.\nrewrite MMR_copy, N.add_0_r.\nreflexivity.\nQed.\n\nLemma comp_spec {A B C : Ty} (ps : Naive.Program_ty A B) (pt : Naive.Program_ty B C) ms mt:\n spec ps ms -> spec pt mt -> StateShape.spec ps -> StateShape.spec pt -> spec (comp ps pt) (comp ms mt).\nProof.\nintros Hs Ht Ss St s0 s5 tr05.\nunfold MemoryBound.\ncbn in *.\ndestruct (seq_complete tr05) as [s4 tr04 tr45].\nrewrite (MMR_seq tr04 tr45 tr05).\ndestruct (seq_complete tr04) as [s3 tr03 tr34].\nrewrite (MMR_seq tr03 tr34 tr04).\ndestruct (seq_complete tr03) as [s2 tr02 tr23].\nrewrite (MMR_seq tr02 tr23 tr03).\ndestruct (seq_complete tr02) as [s1 tr01 tr12].\nrewrite (MMR_seq tr01 tr12 tr02).\nrewrite N.add_assoc.\nrewrite MMR_newFrame, MMR_moveFrame, MMR_dropFrame.\ntransitivity (stateSize s1 + N.max ms mt).\n rewrite <- N.add_max_distr_l; do 2 rewrite <- N.max_assoc.\n apply N.max_le_compat.\n  apply N.max_lub;[apply N.le_add_r|apply (Hs _ _ tr12)].\n transitivity (stateSize s2 + mt).\n  replace (stateSize s2) with (stateSize s3).\n   transitivity (N.max (stateSize s3) (maximumMemoryResidence (trace tr34))).\n    rewrite N.max_assoc.\n    apply N.max_lub;[reflexivity|].\n    etransitivity;[apply (StateShape.StateSize St tr34)|apply N.le_max_l].\n   apply N.max_lub;[apply N.le_add_r|apply (Ht _ _ tr34)].\n  destruct (moveFrame_complete tr23) as [s2 s3 T23|];[|reflexivity].\n  inversion T23;cbn.\n  rewrite fullWriteFrame_size.\n  ring.\n apply N.add_le_mono_r.\n apply (StateShape.StateSize Ss tr12).\napply N.add_le_mono_r.\ndestruct (newFrame_complete tr01) as [s0 s1 T01|];[apply N.eq_le_incl|apply N.le_0_l].\ninversion T01; cbn.\nring.\nQed.\n\nLemma unit_spec {A : Ty} : spec unit (unit (A:=A)).\nProof.\nintros x y tr.\nunfold MemoryBound.\ncbn in *.\ndestruct (trace_subproof _); cbn.\nrewrite N.add_0_r.\nreflexivity.\nQed.\n\nLemma injl_spec {A B C : Ty} (pt : Naive.Program_ty A B) mt :\n spec pt mt -> spec (injl pt) (injl (C:=C) mt).\nProof.\nintros Ht s0 s3 tr03.\nunfold MemoryBound.\ncbn in *.\ndestruct (seq_complete tr03) as [s2 tr02 tr23].\nrewrite (MMR_seq tr02 tr23 tr03).\ndestruct (seq_complete tr02) as [s1 tr01 tr12].\nrewrite (MMR_seq tr01 tr12 tr02).\nrewrite MMR_write, MMR_skip.\nunfold stateSize.\nrewrite (stateShape_write tr01), N.max_id, (stateShape_skip tr12).\napply N.max_lub.\n apply N.le_add_r.\napply Ht.\nQed.\n\nLemma injr_spec {A B C : Ty} (pt : Naive.Program_ty A C) mt :\n spec pt mt -> spec (injr pt) (injr (B:=B) mt).\nProof.\nintros Ht s0 s3 tr03.\nunfold MemoryBound.\ncbn in *.\ndestruct (seq_complete tr03) as [s2 tr02 tr23].\nrewrite (MMR_seq tr02 tr23 tr03).\ndestruct (seq_complete tr02) as [s1 tr01 tr12].\nrewrite (MMR_seq tr01 tr12 tr02).\nrewrite MMR_write, MMR_skip.\nunfold stateSize.\nrewrite (stateShape_write tr01), N.max_id, (stateShape_skip tr12).\napply N.max_lub.\n apply N.le_add_r.\napply Ht.\nQed.\n\nLemma bump_spec {A B : Ty} (pt : Naive.Program_ty A B) mt (Ht : spec pt mt) x y n (tr : x >>- bump n pt ->> y) :\n   maximumMemoryResidence (trace tr) <= MemoryBound mt x.\nProof.\nunfold bump in tr.\ndestruct (seq_complete tr) as [s2 tr02 tr23].\nrewrite (MMR_seq tr02 tr23).\ndestruct (seq_complete tr02) as [s1 tr01 tr12].\nrewrite (MMR_seq tr01 tr12).\nrewrite MMR_bwd, MMR_fwd.\nunfold MemoryBound, stateSize.\nrewrite (stateShape_fwd tr01).\nrewrite (N.max_comm (stateShapeSize _)), <- N.max_assoc, N.max_l.\n apply Ht.\napply MMR_bounds.\nQed.\n\nLemma case_spec {A B C D : Ty} (ps : Naive.Program_ty (A * C) D) (pt : Naive.Program_ty (B * C) D) ms mt :\n spec ps ms -> spec pt mt -> spec (case ps pt) (case ms mt).\nProof.\nintros Hs Ht s0 s1 tr01.\nunfold MemoryBound.\ncbn in *.\nrewrite <- N.add_max_distr_l.\ngeneralize tr01.\npattern s0; pattern s1.\nrevert s0 s1 tr01.\napply choice_complete.\n intros s0 s1 [|] Heq tr tr01.\n  rewrite <- (trace_right tr tr01);[|assumption].\n  etransitivity;[apply bump_spec;apply Ht|apply N.le_max_r].\n rewrite <- (trace_left tr tr01);[|assumption].\n etransitivity;[apply bump_spec;apply Hs|apply N.le_max_l].\nunfold runProgram, choice;cbn.\nintros tr01.\ndestruct (trace_subproof _); cbn.\napply N.le_0_l.\nQed.\n\nLemma pair_spec {A B C : Ty} (ps : Naive.Program_ty A B) (pt : Naive.Program_ty A C) ms mt :\n  spec ps ms -> spec pt mt -> StateShape.spec ps -> spec (pair ps pt) (pair ms mt).\nProof.\nintros Hs Ht Ss s0 s2 tr02.\nunfold MemoryBound.\ncbn in *.\ndestruct (seq_complete tr02) as [s1 tr01 tr12].\nrewrite (MMR_seq tr01 tr12 tr02).\nrewrite <- N.add_max_distr_l.\napply N.max_le_compat.\n apply Hs.\netransitivity;[apply Ht|].\napply N.add_le_mono_r.\napply (StateShape.StateSize Ss tr01).\nQed.\n\nLemma take_spec {A B C : Ty} (pt : Naive.Program_ty A C) mt :\n spec pt mt -> spec (take pt) (take (B:=B) mt).\nProof.\nauto.\nQed.\n\nLemma drop_spec {A B C : Ty} (pt : Naive.Program_ty B C) mt :\n spec pt mt -> spec (drop pt) (drop (A:=A) mt).\nProof.\nintros Ht x n Hp;cbn.\napply (bump_spec Ht Hp).\nQed.\n\nLemma Core_spec  {A B : Ty} (t : forall {alg : Core.Algebra}, alg A B) (Ht : Core.Parametric (@t)) :\n  spec t t.\nProof.\npose (R A B (x : Naive.Program_ty A B) y := StateShape.spec x /\\ spec x y).\ncut (R A B (t _) (t _));[intros [spec1 spec2]; auto|]. \nrefine (Ht _ _ (Core.Parametric.Pack (_ : Core.Parametric.class R))).\nconstructor; unfold R; intros; split.\n- apply StateShape.iden_spec.\n- apply iden_spec.\n- apply StateShape.comp_spec; tauto.\n- apply comp_spec; tauto.\n- apply StateShape.unit_spec.\n- apply unit_spec.\n- apply StateShape.injl_spec; tauto.\n- apply injl_spec; tauto.\n- apply StateShape.injr_spec; tauto.\n- apply injr_spec; tauto.\n- apply StateShape.case_spec; tauto.\n- apply case_spec; tauto.\n- apply StateShape.pair_spec; tauto.\n- apply pair_spec; tauto.\n- apply StateShape.take_spec; tauto.\n- apply take_spec; tauto.\n- apply StateShape.drop_spec; tauto.\n- apply drop_spec; tauto.\nQed.\n\nDefinition CellBound {A B : Ty} (t : bound_ty A B) : N := N.of_nat (bitSize A) + N.of_nat (bitSize B) + t.\n\nLemma CellBound_correct {A B : Ty} (t : forall {alg : Core.Algebra}, alg A B) (Ht : Core.Parametric (@t)) a y\n  (tr : fillContext emptyCtx (Naive.LocalStateBegin t a) >>- @t Naive.translate ->> y) :\n  maximumMemoryResidence (trace tr) <= CellBound t.\nProof.\netransitivity;[apply (Core_spec Ht tr)|].\nunfold MemoryBound, CellBound, stateSize, stateShapeSize; cbn.\nrewrite app_nil_r, encode_length, N.add_0_r, <- plus_n_O.\nreflexivity.\nQed.\n\nEnd MaximumMemory.\n"
  },
  {
    "path": "Coq/Simplicity/Translate.v",
    "content": "Require Import PeanoNat.\nRequire Import Simplicity.Util.List.\nRequire Import Simplicity.Util.Thrist.\n\nRequire Import Simplicity.Alg.\nRequire Import Simplicity.BitMachine.\nRequire Import Simplicity.Ty.\n\nSet Implicit Arguments.\n\nLocal Open Scope ty_scope.\nLocal Open Scope mc_scope.\nLocal Open Scope semantic_scope.\n\nFixpoint bitSize (X : Ty) : nat :=\nmatch X with\n| Unit => 0\n| Sum A B => 1 + max (bitSize A) (bitSize B)\n| Prod A B => bitSize A + bitSize B\nend.\n\n(* We take advantage that x - y = 0 when x <= y for natural numbers. *)\nDefinition padL (X Y : Ty) : nat := bitSize Y - bitSize X.\nDefinition padR (X Y : Ty) : nat := bitSize X - bitSize Y.\n\nLemma padL_bitSize (X Y : Ty) : (padL X Y + bitSize X = max (bitSize X) (bitSize Y))%nat.\nProof.\nunfold padL.\napply Nat.max_case_strong; intros HXY.\n- rewrite <- Nat.sub_0_le in HXY.\n  rewrite HXY.\n  reflexivity.\n- rewrite Nat.sub_add; auto.\nQed.\n\nLemma padR_bitSize (X Y : Ty) : (padR X Y + bitSize Y = max (bitSize X) (bitSize Y))%nat.\nProof.\nunfold padR.\napply Nat.max_case_strong; intros HXY.\n- rewrite Nat.sub_add; auto.\n- rewrite <- Nat.sub_0_le in HXY.\n  rewrite HXY.\n  reflexivity.\nQed.\n\nFixpoint encode {X : Ty} : X -> list Cell :=\nmatch X with\n| Unit => fun _ => nil\n| Sum A B => fun ab =>\n  match ab with\n  | inl a => Some false :: repeat None (padL A B) ++ encode a\n  | inr b => Some true  :: repeat None (padR A B) ++ encode b\n  end\n| Prod A B => fun ab =>\n  let (a, b) := ab in encode a ++ encode b\nend.\n\nLemma encode_length {X : Ty} : forall x : X, length (encode x) = bitSize X.\nProof.\ninduction X.\n- reflexivity.\n- intros [a|b]; cbn; rewrite app_length, repeat_length;\n  [rewrite IHX1, padL_bitSize | rewrite IHX2, padR_bitSize];\n  reflexivity.\n- intros [a b]; cbn.\n  rewrite app_length, IHX1, IHX2.\n  reflexivity.\nQed.\n\nModule Naive.\n\nDefinition Program_ty (A B : Ty) := Program.\n\nDefinition translate_class : Core.class Program_ty :=\n  {| Core.iden A := copy (bitSize A)\n   ; Core.comp A B C ps pt := newFrame (bitSize B) ;;; ps ;;; moveFrame ;;; pt ;;; dropFrame\n   ; Core.unit A := nop\n   ; Core.injl A B C pt := write false ;;; skip (padL B C) ;;; pt\n   ; Core.injr A B C pt := write true ;;; skip (padR B C) ;;; pt\n   ; Core.case A B C D ps pt := bump (1 + padL A B) ps ||| bump (1 + padR A B) pt\n   ; Core.pair A B C ps pt := ps ;;; pt\n   ; Core.take A B C pt := pt\n   ; Core.drop A B C pt := bump (bitSize A) pt\n   |}.\n\nCanonical Structure translate : Core.Algebra := Core.Pack Program_ty translate_class.\n\nDefinition LocalStateBegin {A B : Ty} (t : Arrow A B) (a : A) :=\n  {| readLocalState := encode a; writeLocalState := newWriteFrame (bitSize B) |}.\n\nDefinition LocalStateEnd {A B : Ty} (t : Arrow A B) (a : A) :=\n  {| readLocalState := encode a; writeLocalState := fullWriteFrame (encode (t a)) |}.\n\nDefinition spec {A B : Ty} (p : Program_ty A B) (t : Arrow A B)  :=\n  forall a ctx, fillContext ctx (LocalStateBegin t a) >>- p ->> fillContext ctx (LocalStateEnd t a).\n\nLemma iden_spec {A : Ty} : spec (A:=A) iden iden.\nProof.\nintros a ctx; cbn.\nunfold LocalStateBegin, LocalStateEnd.\nrewrite <- (encode_length a).\napply copy_correct.\nQed.\n\nLemma comp_spec {A B C : Ty} (s : Arrow A B) (t : Arrow B C) ps pt :\n spec ps s -> spec pt t ->\n spec (comp ps pt) (comp s t) .\nProof.\nintros Hs Ht a ctx.\nunfold LocalStateBegin, LocalStateEnd.\ndestruct ctx as [irf arf awf iwf].\nrepeat eapply seq_correct.\n- apply newFrame_correct.\n- cbn.\n  pose (ctx0 := {| inactiveReadFrames := irf\n                 ; activeReadFrame := arf\n                 ; activeWriteFrame := newWriteFrame 0\n                 ; inactiveWriteFrames :=\n                   {| writeData := writeData awf\n                    ; writeEmpty := bitSize C + writeEmpty awf\n                    |} :: iwf\n                 |}).\n  rewrite (plus_n_O (bitSize B)).\n  apply (Hs a ctx0).\n- unfold fillContext; cbn.\n  rewrite app_nil_r.\n  apply moveFrame_correct.\n- cbn.\n  pose (ctx0 := {| inactiveReadFrames := {| prevData := prevData arf; nextData := encode a ++ nextData arf |} :: irf\n                 ; activeReadFrame := setFrame nil\n                 ; activeWriteFrame := awf\n                 ; inactiveWriteFrames := iwf\n                 |}).\n  rewrite <- (app_nil_r (encode (s a))).\n  apply (Ht (s a) ctx0).\n- unfold fillContext; cbn.\n  rewrite app_nil_r.\n  apply dropFrame_correct.\nQed.\n\nLemma unit_spec {A : Ty} : spec (A:=A) unit unit.\nProof.\nintros a ctx.\napply nop_correct.\nQed.\n\nLemma injl_spec {A B C : Ty} (t : Arrow A B) pt :\n spec pt t ->\n spec (injl pt) (injl (C:=C) t).\nProof.\nintros Ht a ctx.\nrepeat eapply seq_correct.\n- pose (ls1 := {| readLocalState := encode a; writeLocalState := newWriteFrame (max (bitSize B) (bitSize C)) |}).\n  pose (ls2 := {| readLocalState := nil; writeLocalState := newWriteFrame 1 |}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 ls2)) at 1.\n  rewrite <- context_action.\n  apply write_correct.\n- rewrite context_action.\n  unfold appendLocalState; cbn.\n  rewrite <- padL_bitSize.\n  pose (ls1 := {| readLocalState := encode a; writeLocalState := {| writeData := Some false :: nil; writeEmpty := bitSize B |}|}).\n  pose (ls2 := {| readLocalState := nil; writeLocalState := newWriteFrame (padL B C)|}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 ls2)) at 1.\n  rewrite <- context_action.\n  apply skip_correct.\n- rewrite context_action.\n  unfold appendLocalState; cbn.\n  rewrite <- (app_nil_r (encode a)), <- (Nat.add_0_r (bitSize B)).\n  pose (ls1 := {| readLocalState := nil; writeLocalState := fullWriteFrame (Some false :: repeat None (padL B C))|}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateBegin t a))) at 1.\n  unfold LocalStateEnd, fullWriteFrame; cbn.\n  rewrite <- (app_nil_r (encode a)), rev_app_distr, <- app_assoc.\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateEnd t a))) at 2.\n  do 2 rewrite <- context_action.\n  apply Ht.\nQed.\n\nLemma injr_spec {A B C : Ty} (t : Arrow A C) pt :\n spec pt t ->\n spec (injr pt) (injr (B:=B) t).\nProof.\nintros Ht a ctx.\nrepeat eapply seq_correct.\n- pose (ls1 := {| readLocalState := encode a; writeLocalState := newWriteFrame (max (bitSize B) (bitSize C)) |}).\n  pose (ls2 := {| readLocalState := nil; writeLocalState := newWriteFrame 1 |}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 ls2)) at 1.\n  rewrite <- context_action.\n  apply write_correct.\n- rewrite context_action.\n  unfold appendLocalState; cbn.\n  rewrite <- padR_bitSize.\n  pose (ls1 := {| readLocalState := encode a; writeLocalState := {| writeData := Some true :: nil; writeEmpty := bitSize C |}|}).\n  pose (ls2 := {| readLocalState := nil; writeLocalState := newWriteFrame (padR B C)|}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 ls2)) at 1.\n  rewrite <- context_action.\n  apply skip_correct.\n- rewrite context_action.\n  unfold appendLocalState; cbn.\n  rewrite <- (app_nil_r (encode a)), <- (Nat.add_0_r (bitSize C)).\n  pose (ls1 := {| readLocalState := nil; writeLocalState := fullWriteFrame (Some true :: repeat None (padR B C))|}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateBegin t a))) at 1.\n  unfold LocalStateEnd, fullWriteFrame; cbn.\n  rewrite <- (app_nil_r (encode a)), rev_app_distr, <- app_assoc.\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateEnd t a))) at 2.\n  do 2 rewrite <- context_action.\n  apply Ht.\nQed.\n\nLemma caseL_spec {A B C D : Ty} (s : Arrow (A * C) D) (t : Arrow (B * C) D) ps pt :\n spec ps s ->\n forall (a : A) (c : C) ctx,\n  fillContext ctx (LocalStateBegin (case s t) (inl a, c))\n   >>- bump (1 + padL A B) ps ||| bump (1 + padR A B) pt ->>\n  fillContext ctx (LocalStateEnd (case s t) (inl a, c)).\nProof.\nintros Hs a c ctx.\napply choice_left_correct;[reflexivity|].\nunfold LocalStateBegin, LocalStateEnd; cbn.\nrewrite <- app_assoc.\nrewrite <- (@repeat_length Cell None (padL A B)) at 1.\nset (prefix := Some false :: repeat None (padL A B)).\npose (ls2 := {| readLocalState := prefix; writeLocalState := newWriteFrame 0 |}).\nchange (fillContext _ _) with (fillContext ctx (appendLocalState (LocalStateBegin s (a,c)) ls2)) at 1.\nchange (fillContext _ _) with (fillContext ctx (appendLocalState (LocalStateEnd s (a,c)) ls2)) at 2.\nrepeat rewrite <- context_action.\nchange (fillContext _ _) with (fillReadFrame (fillContext ctx (LocalStateBegin s (a,c))) {| prevData := nil; nextData := prefix |}) at 1.\nchange (fillContext _ _) with (fillReadFrame (fillContext ctx (LocalStateEnd s (a,c))) {| prevData := nil; nextData := prefix |}) at 2.\napply bump_correct.\napply (Hs _ (fillReadFrame ctx {| prevData := rev (prefix); nextData := nil |})).\nQed.\n\nLemma caseR_spec {A B C D : Ty} (s : Arrow (A * C) D) (t : Arrow (B * C) D) ps pt :\n spec pt t ->\n forall (b : B) (c : C) ctx,\n  fillContext ctx (LocalStateBegin (case s t) (inr b, c))\n   >>- bump (1 + padL A B) ps ||| bump (1 + padR A B) pt ->>\n  fillContext ctx (LocalStateEnd (case s t) (inr b, c)).\nProof.\nintros Ht b c ctx.\napply choice_right_correct;[reflexivity|].\nunfold LocalStateBegin, LocalStateEnd; cbn.\nrewrite <- app_assoc.\nrewrite <- (@repeat_length Cell None (padR A B)) at 1.\nset (prefix := Some true :: repeat None (padR A B)).\npose (ls2 := {| readLocalState := prefix; writeLocalState := newWriteFrame 0 |}).\nchange (fillContext _ _) with (fillContext ctx (appendLocalState (LocalStateBegin t (b,c)) ls2)) at 1.\nchange (fillContext _ _) with (fillContext ctx (appendLocalState (LocalStateEnd t (b,c)) ls2)) at 2.\nrepeat rewrite <- context_action.\nchange (fillContext _ _) with (fillReadFrame (fillContext ctx (LocalStateBegin t (b,c))) {| prevData := nil; nextData := prefix |}) at 1.\nchange (fillContext _ _) with (fillReadFrame (fillContext ctx (LocalStateEnd t (b,c))) {| prevData := nil; nextData := prefix |}) at 2.\napply bump_correct.\napply (Ht _ (fillReadFrame ctx {| prevData := rev (prefix); nextData := nil |})).\nQed.\n\nLemma case_spec {A B C D : Ty} (s : Arrow (A * C) D) (t : Arrow (B * C) D) ps pt :\n spec ps s -> spec pt t ->\n spec (case ps pt) (case s t).\nProof.\nintros Hs Ht [[a|b] c] ctx.\n- apply caseL_spec; assumption.\n- apply caseR_spec; assumption.\nQed.\n\nLemma pair_spec {A B C : Ty} (s : Arrow A B) (t : Arrow A C) ps pt :\n spec ps s -> spec pt t ->\n spec (pair ps pt) (pair s t).\nProof.\nintros Hs Ht a ctx.\nunfold LocalStateBegin, LocalStateEnd.\neapply seq_correct.\n- rewrite <- (app_nil_r (encode a)) at 1.\n  pose (ls1 := {| readLocalState := nil; writeLocalState := newWriteFrame (bitSize C) |}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateBegin s a))) at 1.\n  rewrite <- context_action.\n  apply Hs.\n- rewrite context_action.\n  unfold appendLocalState, fullWriteFrame; cbn.\n  rewrite (app_nil_r (rev _)), <- (Nat.add_0_r (bitSize C)), rev_app_distr.\n  rewrite <- (app_nil_r (encode a)) at 2.\n  pose (ls1 := {| readLocalState := nil; writeLocalState := fullWriteFrame (encode (s a)) |}).\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateBegin t a))) at 1.\n  change (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateEnd t a))) at 2.\n  do 2 rewrite <- context_action.\n  apply Ht.\nQed.\n\nLemma take_spec {A B C : Ty} (t : Arrow A C) pt :\n spec pt t ->\n spec (take pt) (take (B:=B) t).\nProof.\nintros Ht [a b] ctx.\nunfold LocalStateBegin, LocalStateEnd, fullWriteFrame; cbn.\nrewrite <- (Nat.add_0_r (bitSize C)), <- (app_nil_r (rev _)).\npose (ls1 := {| readLocalState := encode b; writeLocalState := newWriteFrame 0 |}).\nchange (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateBegin t a))) at 1.\nchange (fillContext _ _) with (fillContext ctx (appendLocalState ls1 (LocalStateEnd t a))) at 2.\ndo 2 rewrite <- context_action.\napply Ht.\nQed.\n\nLemma drop_spec {A B C : Ty} (t : Arrow B C) pt :\n spec pt t ->\n spec (drop pt) (drop (A:=A) t).\nProof.\nintros Ht [a b] ctx; cbn.\npose (ls2 := {| readLocalState := encode a; writeLocalState := newWriteFrame 0 |}).\nchange (fillContext _ _) with (fillContext ctx (appendLocalState (LocalStateBegin t b) ls2)) at 1.\nchange (fillContext _ _) with (fillContext ctx (appendLocalState (LocalStateEnd t b) ls2)) at 2.\nrepeat rewrite <- context_action.\nchange (fillContext _ _) with (fillReadFrame (fillContext ctx (LocalStateBegin t b)) {| prevData := nil; nextData := encode a |}) at 1.\nchange (fillContext _ _) with (fillReadFrame (fillContext ctx (LocalStateEnd t b)) {| prevData := nil; nextData := encode a |}) at 2.\nrewrite <- (encode_length a).\napply bump_correct.\napply (Ht _ (fillReadFrame ctx {| prevData := rev (encode a); nextData := nil |})).\nQed.\n\nTheorem translate_correct {A B : Ty} (t : forall {alg : Core.Algebra}, alg A B) (Ht : Core.Parametric (@t)) :\n forall a ctx,\n fillContext ctx {| readLocalState := encode a; writeLocalState := newWriteFrame (bitSize B) |}\n  >>- @t translate ->>\n fillContext ctx {| readLocalState := encode a; writeLocalState := fullWriteFrame (encode (|[ t ]| a)) |}.\nrefine (Ht _ _ (Core.Parametric.Pack (_ : Core.Parametric.class (@spec)))).\nconstructor; clear; intros.\n- apply iden_spec.\n- apply comp_spec; assumption.\n- apply unit_spec.\n- apply injl_spec; assumption.\n- apply injr_spec; assumption.\n- apply case_spec; assumption.\n- apply pair_spec; assumption.\n- apply take_spec; assumption.\n- apply drop_spec; assumption.\nQed.\n\nEnd Naive.\nCanonical Structure Naive.translate.\n"
  },
  {
    "path": "Coq/Simplicity/Ty.v",
    "content": "Set Primitive Projections.\nSet Implicit Arguments.\n\nDeclare Scope ty_scope.\n\nInductive Ty : Set :=\n| Unit : Ty\n| Sum  : Ty -> Ty -> Ty\n| Prod : Ty -> Ty -> Ty.\nBind Scope ty_scope with Ty.\n\nFixpoint tySem (X : Ty) : Set :=\nmatch X with\n| Unit => Datatypes.unit\n| Sum A B => tySem A + tySem B\n| Prod A B => tySem A * tySem B\nend.\n\nNotation \"A + B\" := (Sum A B) : ty_scope.\nNotation \"A * B\" := (Prod A B) : ty_scope.\nCoercion tySem : Ty >-> Sortclass.\n\nDefinition Arrow (A B : Ty) := A -> B.\nDefinition Kleisli (M : Type -> Type) (A B : Ty) := A -> M B.\n\nRecord tyAlg (A : Set) : Set :=\n{ unitA : A\n; sumA  : A -> A -> A\n; prodA : A -> A -> A\n}.\n\nFixpoint tyCata A (alg : tyAlg A) (t : Ty) : A :=\nmatch t with\n| Unit => unitA alg\n| Sum tl tr => sumA alg (tyCata alg tl) (tyCata alg tr)\n| Prod t1 t2 => prodA alg (tyCata alg t1) (tyCata alg t2)\nend.\n"
  },
  {
    "path": "Coq/Simplicity/Util/Arith.v",
    "content": "Require Import ZArith.\n\nSet Implicit Arguments.\n\n(* In order to compute, this needs to be transparent *)\nDefinition natDiff : forall n m, {i | i + n = m} + {i | i + m = n}.\nProof.\nassert (H0 : forall n, n + 0 = n).\n induction n.\n  reflexivity.\n simpl; rewrite IHn; reflexivity.\nassert (HS : forall n m, n + S m = S (n + m)).\n induction n; intros m.\n  reflexivity.\n simpl; rewrite IHn; reflexivity.\ninduction n.\nintros m.\nleft.\nexists m.\napply H0.\ninduction m.\n right.\n exists (S n).\n apply H0.\ncase (IHn m); intros [i Hi].\n left.\n exists i.\n rewrite <- Hi.\n apply HS.\nright.\nexists i.\nrewrite <- Hi.\napply HS.\nDefined.\n\nLemma Zmod_div (x y : Z) : (x mod y / y = 0)%Z.\nProof.\ndestruct (Z.eq_dec y 0) as [->|Hy].\n- apply Zdiv_0_r.\n- auto using Z.mod_div.\nQed.\n\nLemma two_power_nat_le n m : n <= m -> (two_power_nat n <= two_power_nat m)%Z.\nProof.\nrepeat rewrite two_power_nat_equiv.\nauto using Z.pow_le_mono_r with zarith.\nQed.\n\nLemma two_power_nat_plus n m : (two_power_nat (n + m) = two_power_nat n * two_power_nat m)%Z.\nProof.\nrepeat rewrite two_power_nat_equiv.\nrewrite inj_plus, Z.pow_add_r; auto with zarith.\nQed.\n\n"
  },
  {
    "path": "Coq/Simplicity/Util/List.v",
    "content": "Require Export Coq.Lists.List.\nRequire Import ZArith.\n\nLemma repeat_S_tail {A} : forall (a : A) n, repeat a n ++ (a :: nil) = repeat a (S n).\nProof.\nintros a.\ninduction n;[reflexivity|].\nsimpl.\nrewrite IHn.\nreflexivity.\nQed.\n\nLemma rev_repeat {A} : forall (a : A) n, rev (repeat a n) = repeat a n.\nProof.\nintros a.\ninduction n;[reflexivity|].\nsimpl.\nrewrite IHn, repeat_S_tail.\nreflexivity.\nQed.\n\nLemma firstn_app_3 {A} (l1 l2 : list A) :\n  firstn (length l1) (l1 ++ l2) = l1.\nProof.\nrewrite <- (Nat.add_0_r (length l1)), firstn_app_2; cbn.\napply app_nil_r.\nQed.\n\nLemma skipn_all {A} (l : list A) : skipn (length l) l = nil.\nProof.\napply (app_inv_head (firstn (length l) l)).\nrewrite firstn_skipn, firstn_all, app_nil_r; auto.\nQed.\n\nLemma skipn_all2 {A} n (l : list A) : length l <= n -> skipn n l = nil.\nProof.\nintros Hn.\napply (app_inv_head (firstn n l)).\nrewrite firstn_skipn, firstn_all2, app_nil_r; auto.\nQed.\n\nLemma skipn_app {A} (n : nat) : forall (l1 l2 : list A),\n       skipn n (l1 ++ l2) = skipn n l1 ++ skipn (n - length l1) l2.\nProof.\ninduction n.\n reflexivity.\ndestruct l1.\n reflexivity.\napply IHn.\nQed.\n\nLemma skipn_app_2 {A} (n : nat) : forall (l1 l2 : list A),\n       skipn (length l1 + n) (l1 ++ l2) = skipn n l2.\nProof.\nintros l1 l2.\nrewrite skipn_app, Nat.add_comm, Nat.add_sub, skipn_all2; auto with arith.\nQed.\n\nLemma skipn_app_3 {A} (l1 l2 : list A) :\n  skipn (length l1) (l1 ++ l2) = l2.\nProof.\napply (app_inv_head l1).\nrewrite <- (firstn_app_3 l1 l2) at 1.\napply firstn_skipn.\nQed.\n\nDefinition N_sum : list N -> N := fold_right N.add 0%N.\n\nDefinition Z_sum : list Z -> Z := fold_right Z.add 0%Z."
  },
  {
    "path": "Coq/Simplicity/Util/Monad/Reader.v",
    "content": "Require Import Logic.FunctionalExtensionality.\n\nRequire Import Simplicity.Util.Monad.\nLocal Open Scope monad_scope.\n\nDefinition ReaderT E (M : Type -> Type) A := E -> M A.\n\nSection ReaderT_CIMonad.\n\nVariable E : Type.\nVariable M : CIMonad.\n\nDefinition ReaderT_eta A (a : A) : ReaderT E M A :=\nfun _ => eta a.\n\nDefinition ReaderT_bind A B (f : A -> ReaderT E M B) (x : ReaderT E M A) :\n  ReaderT E M B :=\nfun e => bind (fun a => f a e) (x e).\n\nDefinition ReaderT_CIMonad_class : CIMonad.class (ReaderT E M).\nexists ReaderT_eta ReaderT_bind.\n- abstract (\n  intros A B f0 f1 Hf a;\n  extensionality e;\n  unfold ReaderT_bind; rewrite !bind_def;\n  apply f_equal;\n  apply map_ext; intros a0;\n  rewrite Hf;\n  reflexivity).\n- abstract (\n  intros A x;\n  extensionality e;\n  unfold ReaderT_bind; rewrite bind_def, <- kleisli_comp_def;\n  apply kleisli_compl).\n- abstract (\n  intros A B f a;\n  extensionality e;\n  unfold ReaderT_bind; rewrite bind_def;\n  unfold ReaderT_eta; rewrite <- kleisli_comp_def, kleisli_compr;\n  reflexivity).\n- abstract (\n  intros A B C g f x;\n  extensionality e;\n  unfold ReaderT_bind; rewrite !bind_def;\n  rewrite <- (kleisli_comp_def (fun a : A => f a e)), <- kleisli_comp_def;\n  rewrite <- kleisli_comp_assoc, !kleisli_comp_def;\n  reflexivity).\n- abstract (\n  intros A B [x y];\n  extensionality e;\n  unfold ReaderT_bind, ReaderT_eta; cbn;\n  rewrite !bind_def;\n  repeat (rewrite <- map_comp, <- (kleisli_comp_def eta), kleisli_compl);\n  pose (f0 (p : A * M B) := bind (fun b => eta (fst p, b)) (snd p));\n  rewrite <- (map_comp f0 (fun p => (fst p, snd p e)));\n  rewrite (map_comp (fun p => (fst p, snd p e)) ((fun a : A => (a, y)))); cbn;\n  pose (f1 (p : M A * B) := bind (fun a => eta (a, snd p)) (fst p));\n  rewrite <- (map_comp f1 (fun p => (fst p e, snd p)));\n  rewrite (map_comp (fun p => (fst p e, snd p)) (pair x)); cbn;\n  rewrite (map_ext _ strength) by\n   (intros [a y0]; unfold f0; rewrite bind_def;\n    rewrite <- map_comp, <- (kleisli_comp_def eta), kleisli_compl;\n    reflexivity);\n  rewrite (map_ext _ strength') by\n   (intros [a y0]; unfold f1; rewrite bind_def;\n    rewrite <- map_comp, <- (kleisli_comp_def eta), kleisli_compl;\n    reflexivity);\n  rewrite <- !kleisli_comp_def;\n  apply phi_phi').\n- abstract (\n  intros A x;\n  extensionality e;\n  unfold ReaderT_bind, ReaderT_eta; cbn;\n  rewrite !bind_def;\n  repeat (rewrite <- map_comp, <- (kleisli_comp_def eta), kleisli_compl);\n  pose (f0 (p : A * M A) := bind (fun b => eta (fst p, b)) (snd p));\n  rewrite <- (map_comp f0 (fun p => (fst p, snd p e)));\n  rewrite (map_comp (fun p => (fst p, snd p e)) ((fun a : A => (a, x)))); cbn;\n  rewrite (map_ext _ strength) by\n   (intros [a y0]; unfold f0; rewrite bind_def;\n    rewrite <- map_comp, <- (kleisli_comp_def eta), kleisli_compl;\n    reflexivity);\n  rewrite <- kleisli_comp_def;\n  apply phi_diag).\nDefined.\n\nEnd ReaderT_CIMonad.\nCanonical Structure ReaderT_CIMonad E (M : CIMonad) :=\n  CIMonad.Pack (ReaderT E M) (ReaderT_CIMonad_class E M).\n\nSection ReaderT_CIMonadZero.\n\nVariable E : Type.\nVariable M : CIMonadZero.\n\nDefinition ReaderT_mzero A : ReaderT E M A := fun _ => mzero.\n\nDefinition ReaderT_MonadZero_mixin : MonadZero.mixin (ReaderT_CIMonad E M).\nexists ReaderT_mzero.\n- abstract (\n  intros A B f;\n  extensionality e;\n  change (map f mzero = mzero :> M B);\n  apply mzero_natural).\n- abstract (\n  intros A B C f a;\n  extensionality e;\n  change ((kzero <-< (fun a => f a e)) a = kzero a :> M C);\n  apply kleisli_comp_zerol).\n- abstract (\n  intros A B C f a;\n  extensionality e;\n  change (((fun b => f b e) <-< kzero) a = kzero a :> M C);\n  apply kleisli_comp_zeror).\nDefined.\n\nEnd ReaderT_CIMonadZero.\nCanonical Structure ReaderT_CIMonadZero E (M : CIMonadZero) :=\n  MonadZero.Pack (ReaderT E M) (ReaderT_MonadZero_mixin E M).\n"
  },
  {
    "path": "Coq/Simplicity/Util/Monad.v",
    "content": "Require Import Simplicity.Util.PackedClass.\nImport Coq.Strings.String.StringSyntax.\n\nSet Implicit Arguments.\n\nLocal Open Scope type_scope.\nDeclare Scope monad_scope.\n\n(* Commutative and Idempotnent Monads *)\nModule CIMonad.\n\n(* Eventually we will need the functional extensionality axoim, but let's try\n * to delay that as long as possible.  The alternative is to use Setoid / PERs\n * but that would seem to entail writing an entirely new standard library.\n *)\nRecord class (M : Type -> Type) := Class\n{ eta : forall {A}, A -> M A\n; bind : forall {A B}, (A -> M B) -> M A -> M B\n; map := (fun A B f => bind (fun a => eta (f a))) : forall {A B}, (A -> B) -> M A -> M B\n; kleisliComp := (fun A B C g f a => bind g (f a)) : forall {A B C}, (B -> M C) -> (A -> M B) -> A -> M C\n; strength := (fun A B p => map (pair (fst p)) (snd p)) : forall {A B}, A * M B -> M (A * B)\n; strength' := (fun A B p => map (fun a => pair a (snd p)) (fst p)) : forall {A B}, M A * B -> M (A * B)\n; _ : forall {A B} (f0 f1: A -> M B), (forall a, f0 a = f1 a) -> forall a, bind f0 a = bind f1 a\n; _ : forall {A} (x : M A), bind eta x = x\n; _ : forall {A B} (f : A -> M B) (a : A), bind f (eta a) = f a\n; _ : forall {A B C} (g : B -> M C) (f : A -> M B) (x : M A),\n        bind g (bind f x) = bind (fun a => bind g (f a)) x\n; _ : forall {A B} (p : M A * M B), kleisliComp strength strength' p = kleisliComp strength' strength p\n; _ : forall {A} (x : M A), kleisliComp strength strength' (pair x x) = map (fun a => pair a a) x\n}.\n\nStructure type := Pack { domain :> Type -> Type; class_of : class domain }.\nArguments Pack : clear implicits.\n\nModule Theory.\n\nSection Context.\n\nContext {M : type}.\n\nDefinition eta {A} (a : A) := eta (class_of M) a.\nDefinition bind {A B} (f : A -> M B) := bind (class_of M) f.\nDefinition map {A B} (f : A -> B) := map (class_of M) f.\nDefinition kleisliComp {A B C} (g : B -> M C) (f : A -> M B) :=\n  kleisliComp (class_of M) g f.\nDefinition strength {A B} (p : A * M B) := strength (class_of M) p.\nDefinition strength' {A B} (p : M A * B) := strength' (class_of M) p.\nDefinition mu {A} (x : M (M A)) : M A := bind (fun y => y) x.\n\nInfix \"<-<\" := kleisliComp (at level 40, left associativity).\n\nDefinition phi {A B} (x : M A) (y : M B) : M (A * B) := (strength <-< strength') (pair x y).\nDefinition phi' {A B} (x : M A) (y : M B) : M (A * B) := (strength' <-< strength) (pair x y).\n\nLemma bind_def {A B} (f : A -> M B) (x : M A) :\n  bind f x = mu (map f x).\nProof.\nunfold mu, map.\nunfold bind, eta; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\nrewrite bind_assoc.\napply bind_ext; intros a.\nrewrite bind_right.\nreflexivity.\nQed.\n\nLemma kleisli_comp_def {A B C} (g : B -> M C) (f : A -> M B) (a : A) :\n  (g <-< f) a = mu (map g (f a)).\nProof.\napply bind_def.\nQed.\n\nLemma kleisli_compl {A B} (f : A -> M B) (a : A) :\n  (eta <-< f) a = f a.\nProof.\nunfold kleisliComp.\nunfold bind, eta; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply bind_left.\nQed.\n\nLemma kleisli_compr {A B} (f : A -> M B) (a : A) :\n  (f <-< eta) a = f a.\nProof.\nunfold kleisliComp.\nunfold bind, eta; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply bind_right.\nQed.\n\nLemma kleisli_comp_assoc {A B C D}\n  (h : C -> M D) (g : B -> M C) (f : A -> M B) (a : A) :\n  ((h <-< g) <-< f) a = (h <-< (g <-< f)) a.\nProof.\nunfold kleisliComp.\nunfold bind, eta; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\nerewrite (bind_assoc _ _ _ h g);reflexivity.\nQed.\n\nLemma eta_natural {A B} (f : A -> B) (a : A) :\n  map f (eta a) = eta (f a).\nProof.\nunfold map, eta; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply bind_right.\nQed.\n\nLemma mu_natural {A B} (f : A -> B) (x : M (M A)) :\n  map f (mu x) = mu (map (map f) x).\nProof.\nunfold map, mu, bind; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\nrepeat rewrite bind_assoc.\napply bind_ext; intros y.\nrewrite bind_right.\nreflexivity.\nQed.\n\nLemma map_ext {A B} (f0 f1 : A -> B) (Hf : forall a, f0 a = f1 a) (x : M A) :\n  map f0 x = map f1 x.\nProof.\nunfold map, bind; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply bind_ext.\ncongruence.\nQed.\n\nLemma map_comp {A B C} (g : B -> C) (f : A -> B) (x : M A) : map g (map f x) = map (fun a => g (f a)) x.\nProof.\nunfold map, bind; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\nrewrite bind_assoc.\napply bind_ext.\nintros.\napply bind_right.\nQed.\n\nLemma strength_eta {A B} (a : A) (b : B) : strength (a, eta b) = eta (a, b).\nProof.\nunfold strength, eta, map, bind; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply bind_right.\nQed.\n\nLemma strength'_eta {A B} (a : A) (b : B) : strength' (eta a, b) = eta (a, b).\nProof.\nunfold strength', eta, map, bind; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply bind_right.\nQed.\n\nLemma phi_eta {A B} (a : A) (b : B) : phi (eta a) (eta b) = eta (a, b).\nProof.\nunfold phi.\nrewrite kleisli_comp_def, strength'_eta, <- kleisli_comp_def.\nrewrite kleisli_compr.\napply strength_eta.\nQed.\n\nLemma phi_phi' {A B} (a : M A) (b : M B) : phi a b = phi' a b.\nProof.\nunfold phi, phi', kleisliComp, strength, strength', eta, map, bind; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply (comm _ _ (a,b)).\nQed.\n\nLemma phi_diag {A} (a : M A) : phi a a = map (fun x => (x,x)) a.\nProof.\nunfold phi, kleisliComp, strength, strength', eta, map, bind; destruct (class_of M) as [eta0 bind0 map0 kleisliComp0 strength0 strength'0 bind_ext bind_left bind_right bind_assoc comm idem]; cbn.\napply (idem _ a).\nQed.\n\nEnd Context.\nEnd Theory.\nEnd CIMonad.\nExport CIMonad.Theory.\nNotation CIMonad := CIMonad.type.\nCoercion CIMonad.domain : CIMonad >-> Funclass.\nInfix \"<-<\" := kleisliComp (at level 40, left associativity) : monad_scope.\nArguments kleisliComp {M A B C} g f : simpl never.\nArguments map {M A B} f : simpl never.\nLocal Open Scope monad_scope.\n\nDefinition Identity (A : Type) : Type := A.\n\nDefinition Identity_CIMonad_class : CIMonad.class Identity.\nexists (fun A a => a) (fun A B f => f); auto.\nDefined.\n\nCanonical Structure Identity_CIMonad := CIMonad.Pack Identity Identity_CIMonad_class.\n\n(* Monad with zero *)\nModule MonadZero.\n\nRecord mixin (M : CIMonad) := Mixin\n{ mzero : forall {A}, M A\n; kzero := (fun A B a => mzero) : forall {A B}, A -> M B\n; _ : forall {A B} (f : A -> B), map f mzero = mzero\n; _ : forall {A B C} (f : A -> M B) (a : A), (kzero <-< f) a = kzero a :> M C\n; _ : forall {A B C} (f : B -> M C) (a : A), (f <-< kzero) a = kzero a\n}.\n\nRecord class (M : Type -> Type) := Class\n{ base :> CIMonad.class M\n; ext :> mixin (CIMonad.Pack M base)\n}.\n\nStructure type := _Pack { domain :> Type -> Type; class_of : class domain }.\n\nDefinition packager F M0 (mz0 : mixin M0) :=\n [find M  | CIMonad.domain M ~ F | \"is not a CIMonad\" ]\n [find cM | CIMonad.class_of M0 ~ cM ]\n [find mz | mz ~ mz0 | \"is not the right mixin\" ]\n @_Pack F (@Class F cM mz).\n\nNotation Pack F mz := (@packager F _ mz _ id _ id _ id).  \n\nCanonical Structure to_Monad (M : type) : CIMonad := CIMonad.Pack M (class_of M).\n\nModule Theory.\n\nSection Context.\n\nContext {M : type}.\n\nDefinition mzero {A} := mzero (class_of M) : M A.\nDefinition kzero {A B} := kzero (class_of M) : A -> M B.\n\nLemma mzero_natural {A B} (f : A -> B) :\n  map f mzero = mzero.\nProof.\nunfold mzero; destruct M as [M0 [Monad_class0 [mzero0 kzero natural kzerol kzeror]]]; cbn.\napply natural.\nQed.\n\nLemma kleisli_comp_zerol {A B C} (f : A -> M B) (a : A) :\n  (kzero <-< f) a = kzero a :> M C.\nProof.\nunfold kzero; destruct M as [M0 [Monad_class0 [mzero0 kzero natural kzerol kzeror]]]; cbn.\napply kzerol.\nQed.\n\nLemma kleisli_comp_zeror {A B C} (f : B -> M C) (a : A) :\n  (f <-< kzero) a = kzero a.\nProof.\nunfold kzero; destruct M as [M0 [Monad_class0 [mzero0 kzero natural kzerol kzeror]]]; cbn.\napply kzeror.\nQed.\n\nLemma mu_mzero {A} : mu mzero = mzero :> M A.\nProof.\ncbn; change (@mzero (M A)) with (@kzero (M A) (M A) mzero).\nunfold mu.\nrewrite bind_def, <- kleisli_comp_def.\nrewrite kleisli_comp_zeror; reflexivity.\nQed.\n\nLemma mu_eta_mzero {A} : mu (eta mzero) = mzero :> M A.\nProof.\ncbn; change (@mzero A) with (@kzero (M A) A mzero).\nunfold mu.\nrewrite bind_def, <- kleisli_comp_def.\nrewrite kleisli_compr; reflexivity.\nQed.\n\nLemma phi_mzeror {A B} (x : M B) : phi mzero x = mzero :> M (A * B).\nProof.\nunfold phi.\nrewrite kleisli_comp_def.\nchange (mu (map strength (map (fun a => pair a x) mzero)) = mzero :> M (A * B)).\nrepeat rewrite mzero_natural.\napply mu_mzero.\nQed.\n\nLemma phi_mzerol {A B} (x : M A) : phi x mzero = mzero :> M (A * B).\nProof.\nunfold phi.\nrewrite kleisli_comp_def.\nchange (mu (map strength (map (fun a => pair a mzero) x)) = mzero :> M (A * B)).\nrewrite map_comp.\nerewrite map_ext;[|intros; apply mzero_natural].\nchange x with ((fun y => y) x).\nrewrite <- kleisli_comp_def.\napply kleisli_comp_zerol.\nQed.\n\nEnd Context.\nEnd Theory.\nEnd MonadZero.\nNotation CIMonadZero := MonadZero.type.\nCanonical Structure MonadZero.to_Monad.\nCoercion MonadZero.to_Monad : CIMonadZero >-> CIMonad.\nExport MonadZero.Theory.\n"
  },
  {
    "path": "Coq/Simplicity/Util/Option.v",
    "content": "Require Import Simplicity.Util.Monad.\n\nSet Implicit Arguments.\n\nLocal Open Scope monad_scope.\n\nDefinition option_join {A} (x : option (option A)) : option A :=\nmatch x with\n| None => None\n| Some x => x\nend.\n\nDefinition option_bind {A B} (f : A -> option B) (x : option A) : option B :=\noption_join (option_map f x).\n\nLemma option_bind_ext {A B} (f1 f2 : A -> option B) :\n  (forall a, f1 a = f2 a) -> forall x, option_bind f1 x = option_bind f2 x.\nProof.\nintros H [|];[apply H|reflexivity].\nQed.\n\nDefinition option_CIMonad_class : CIMonad.class option.\nexists @Some @option_bind; try abstract (intros; try destruct x; try reflexivity).\n- abstract (auto using option_bind_ext).\n- abstract (intros; destruct p as [[|] [|]]; reflexivity).\nDefined.\n\nCanonical Structure option_CIMonad := CIMonad.Pack option option_CIMonad_class.\n\nDefinition option_MonadZero_mixin : MonadZero.mixin option_CIMonad.\nexists @None; try abstract (intros; try reflexivity).\nabstract (intros; unfold kleisliComp; cbn; destruct (f a); reflexivity).\nDefined.\n\nCanonical Structure option_Monad_Zero := MonadZero.Pack option option_MonadZero_mixin.\n\nDefinition optionZero {M : CIMonadZero} {A} (x : option A) : M A :=\nmatch x with\n| None => mzero\n| Some a => eta a\nend.\n\nLemma optionZero_natural {M :CIMonadZero} {A B} (f : A -> B) x :\n  map f (optionZero x) = optionZero (map f x) :> M B.\nProof.\ndestruct x; cbn.\n- apply eta_natural.\n- apply mzero_natural.\nQed.\n\nLemma optionZero_mu {M :CIMonadZero} {A} x :\n  optionZero (mu x) = mu (map optionZero (optionZero x)) :> M A.\nProof.\ndestruct x as [x|]; cbn.\n- rewrite <- kleisli_comp_def, kleisli_compr.\n  reflexivity.\n- rewrite mzero_natural.\n  symmetry.\n  apply mu_mzero.\nQed.\n\nLemma optionZero_phi {M :CIMonadZero} {A B} x y :\n  optionZero (phi x y) = phi (optionZero x) (optionZero y) :> M (A * B)%type.\nProof.\ndestruct x as [a|]; destruct y as [b|]; cbn; try reflexivity;\nfirst [rewrite phi_eta|rewrite phi_mzerol|rewrite phi_mzeror];\nreflexivity.\nQed.\n\n(* TODO: move these into CIMonad when needed.\nDefinition option_ap {A B} (f : option (A -> B)) : option A -> option B :=\noption_bind (fun a => option_map (fun f => f a) f).\n\nDefinition option_map2 {A B C} (f : A -> B -> C) (x : option A) : option B -> option C :=\noption_ap (option_map f x).\n*)\n"
  },
  {
    "path": "Coq/Simplicity/Util/PackedClass.v",
    "content": "Require Import Coq.Strings.String.\n\n(* Assia Mahboubi, Enrico Tassi.  Canonical Structures for the working Coq user.  2013.\n * <hal-00816703v1> https://hal.inria.fr/hal-00816703v1\n *)\n\nInductive phantom {T : Type} (t : T) : Type := Phantom.\n\nDefinition unify {T1 T2} (t1 : T1) (t2 : T2) (s : option string) :=\n  phantom t1 -> phantom t2.\n\nDefinition id {T} {t : T} (x : phantom t) := x.\n\nNotation \"[find v | t1 ~ t2 ] p\" := (fun v (_ : unify t1 t2 None) => p) (at level 50, v name, only parsing).\nNotation \"[find v | t1 ~ t2 | msg ] p\" := (fun v (_ : unify t1 t2 (Some msg)) => p) (at level 50, v name, only parsing).\nNotation \"'Error : t : msg\" := (unify _ t (Some msg)) (at level 50, format \"''Error'  :  t  :  msg\").\nOpen Scope string_scope."
  },
  {
    "path": "Coq/Simplicity/Util/Thrist.v",
    "content": "Module Thrist.\n\nDeclare Scope thrist_scope.\n\nInductive T {A} (P : A -> A -> Type) (z:A) : A -> Type :=\n| nil : T P z z\n| cons : forall x y, P x y -> T P z y -> T P z x.\n\nFixpoint append {A : Type} {P : A -> A -> Type} {x y z} (thr1 : T P y x) : T P z y -> T P z x :=\nmatch thr1 with\n| nil _ _ => fun thr2 => thr2\n| cons _ _ _ _ hd tl => fun thr2 => cons _ _ _ _ hd (append tl thr2)\nend.\n\nEnd Thrist.\nBind Scope thrist_scope with Thrist.T.\n\nLocal Open Scope thrist_scope.\n\nNotation \"'Thrst' P x y\" := (Thrist.T P y x) (at level 0, P at level 0, x at level 0, y at level 0).\nNotation \"x <| y\" := (Thrist.cons _ _ _ _ x y) (at level 30) : thrist_scope.\nNotation \"x |><| y\" := (Thrist.append x y) (at level 30)  : thrist_scope.\nNotation \"[]\" := (Thrist.nil _ _ ) : thrist_scope.\nNotation \"x |> y\" := (x |><| (y <| [])) (at level 30) : thrist_scope.\n\nDefinition eq_nil {A : Type} {P : A -> A -> Type} {x y} (Hxy : x = y) : Thrst P x y :=\nmatch Hxy with\n| eq_refl => []\nend.\n\nLemma thrist_app_nil {A : Type} {P : A -> A -> Type} {x y} (thr : Thrst P x y) :\n  thr |><| [] = thr.\nProof.\ninduction thr.\n reflexivity.\ncbn.\nrewrite IHthr.\nreflexivity.\nQed.\n"
  },
  {
    "path": "Coq/Simplicity/Word.v",
    "content": "Require Import Logic.Eqdep_dec.\nRequire Import List.\nRequire Import ZArith.\nRequire Import Simplicity.Util.Arith.\nRequire Import Lia.\nRequire Coq.Vectors.Vector.\nRequire compcert.lib.Integers.\n\nRequire Import Simplicity.Ty.\nRequire Import Simplicity.Alg.\nRequire Import Simplicity.Bit.\nRequire Import Simplicity.Digest.\nSet Implicit Arguments.\n\nLocal Set Keyed Unification.\nImport ListNotations.\nLocal Open Scope list_scope.\nLocal Open Scope ty_scope.\nLocal Open Scope term_scope.\nLocal Open Scope semantic_scope.\n\nFixpoint Vector X (n : nat) :=\nmatch n with\n| 0 => X\n| S n => let rec := Vector X n in Prod rec rec\nend.\n\nLemma VectorPromote {X n} : Vector X (S n) = Vector (X * X) n.\nProof.\ninduction n.\n- reflexivity.\n- cbn.\n  rewrite <-!IHn.\n  reflexivity.\nDefined.\n\nDefinition Word := Vector Bit.\n\nModule ToZ.\n\nRecord class T := Class\n  { bitSize : nat\n  ; toZ : T -> Z\n  ; fromZ : Z -> T\n  ; from_toZ : forall (v : T), fromZ (toZ v) = v\n  ; to_fromZ : forall (z : Z), toZ (fromZ z) = Z.modulo z (two_power_nat bitSize)\n  }.\n\nStructure type := Pack { obj :> Ty; class_of : class obj }.\nArguments Pack : clear implicits.\n\nModule Theory.\n\nSection Context.\n\nContext {T : type}.\n\nDefinition bitSize : nat := bitSize (class_of T).\nDefinition toZ : obj T -> Z := toZ (class_of T).\nDefinition fromZ : Z -> obj T := fromZ (class_of T).\n\nLemma from_toZ (v : T) : fromZ (toZ v) = v.\nProof.\nunfold fromZ, toZ.\ndestruct (class_of T); auto.\nQed.\n\nLemma to_fromZ (z : Z) : toZ (fromZ z : T) = Z.modulo z (two_power_nat bitSize).\nProof.\nunfold fromZ, toZ, bitSize.\ndestruct (class_of T); auto.\nQed.\n\nLemma toZ_mod (v : T) : toZ v = Z.modulo (toZ v) (two_power_nat bitSize).\nProof.\nrewrite <- from_toZ at 1.\napply to_fromZ.\nQed.\n\nLemma galois (v : T) (z : Z) : v = fromZ z <-> eqm (two_power_nat bitSize) (toZ v) z.\nProof.\nunfold eqm.\nsplit.\n- intros ->.\n  rewrite to_fromZ.\n  rewrite Z.mod_mod;[reflexivity|].\n  rewrite two_power_nat_equiv.\n  auto using  Z.pow_nonzero with zarith.\n- unfold eqm.\n  rewrite <- 2!to_fromZ, from_toZ.\n  rewrite <- from_toZ at 2.\n  intros ->.\n  rewrite from_toZ.\n  reflexivity.\nQed.\n\nEnd Context.\nArguments bitSize : clear implicits.\nEnd Theory.\nEnd ToZ.\nExport ToZ.Theory.\nCoercion ToZ.obj : ToZ.type >-> Ty.\n\nSection BitToZ.\n\nLet BitToZ (v : Bit) : Z :=\nmatch v with\n| Bit.zero => 0%Z\n| Bit.one => 1%Z\nend.\n\nLet BitFromZ (z : Z) : Bit :=\nif Z.odd z then Bit.one else Bit.zero.\n\nLemma Bit_from_toZ (v : Bit) : BitFromZ (BitToZ v) = v.\nProof.\ndestruct v as [[] | []]; reflexivity.\nQed.\n\nLemma Bit_to_fromZ (z : Z) : BitToZ (BitFromZ z) = Z.modulo z (two_power_nat 1).\nProof.\nunfold BitFromZ.\nrewrite (Zmod_odd z).\ndestruct (Z.odd z); reflexivity.\nQed.\n\nDefinition BitToZ_Class := ToZ.Class 1 BitToZ BitFromZ Bit_from_toZ Bit_to_fromZ.\nEnd BitToZ.\nCanonical Structure BitToZ : ToZ.type := ToZ.Pack Bit BitToZ_Class.\n\nSection PairToZ.\nContext {a b : ToZ.type}.\n\nLet PairBitSize : nat := bitSize a + bitSize b.\n\nLet PairToZ (v : a * b) : Z :=\nlet (va, vb) := v in\n toZ va * two_power_nat (bitSize b) +\n toZ vb.\n\nLet PairFromZ (z : Z) : a * b :=\n( fromZ (z / two_power_nat (bitSize b))\n, fromZ z\n).\n\nLemma Pair_from_toZ (v : a * b) : PairFromZ (PairToZ v) = v.\nProof.\ndestruct v as [va vb].\ncbn; unfold PairFromZ.\nassert (Hb : two_power_nat (bitSize b) <> 0%Z).\n rewrite two_power_nat_equiv.\n apply Z.pow_nonzero; auto with zarith.\nf_equal.\n- rewrite Z_div_plus_full_l by auto.\n  rewrite <- (from_toZ vb), to_fromZ.\n  rewrite Zmod_div, Z.add_0_r.\n  apply from_toZ.\n- rewrite <- (from_toZ (fromZ _ )), to_fromZ.\n  rewrite Zplus_comm, Z_mod_plus_full.\n  rewrite <- toZ_mod.\n  apply from_toZ.\nQed.\n\nLemma Pair_to_fromZ (z : Z) : PairToZ (PairFromZ z) = Z.modulo z (two_power_nat PairBitSize).\nProof.\nassert (H2 : forall n, (0 < Zpower_nat 2 n)%Z).\n intros n.\n rewrite Zpower_nat_Z.\n auto using Z.pow_pos_nonneg with zarith.\nassert (H2' : forall n, (Zpower_nat 2 n <> 0)%Z).\n intros n.\n generalize (H2 n).\n lia.\nunfold PairBitSize.\nrewrite two_power_nat_correct, Zpower_nat_is_exp.\nrewrite Zmult_comm, Z.rem_mul_r by auto; cbn.\nrewrite 2!to_fromZ; rewrite !two_power_nat_correct.\nrewrite Zplus_comm, Zmult_comm; reflexivity.\nQed.\n\nDefinition PairToZ_Class :=\n  ToZ.Class PairBitSize PairToZ PairFromZ Pair_from_toZ Pair_to_fromZ.\n\nEnd PairToZ.\nCanonical Structure PairToZ (a b : ToZ.type) : ToZ.type := ToZ.Pack (a * b) PairToZ_Class.\n\nLemma toZ_Pair {A B : ToZ.type} (a : A) (b : B) :\n  @toZ (PairToZ A B) (a, b) = (toZ a * two_power_nat (bitSize B) + toZ b)%Z.\nProof.\ndestruct A; destruct B; reflexivity.\nQed.\n\nLemma bitSize_Pair (A B : ToZ.type) :\n  bitSize (PairToZ A B) = (bitSize A + bitSize B)%nat.\nProof.\ndestruct A; destruct B; reflexivity.\nQed.\n\nFixpoint WordToZ_Class {n : nat} : ToZ.class (Word n) :=\nmatch n with\n| 0 => BitToZ_Class\n| (S m) => @PairToZ_Class (ToZ.Pack _ WordToZ_Class) (ToZ.Pack _ WordToZ_Class)\nend.\n\nCanonical Structure WordToZ (n : nat) : ToZ.type := ToZ.Pack (Word n) WordToZ_Class.\n\nNotation Word8 := (Word 3).\nNotation Word16 := (Word 4).\nNotation Word32 := (Word 5).\nNotation Word64 := (Word 6).\nNotation Word256 := (Word 8).\nNotation Word512 := (Word 9).\n\nLemma bitSize_Word n :\n  Z.of_nat (bitSize (WordToZ n)) = two_power_nat n.\nProof.\ninduction n.\n reflexivity.\ncbn.\nrewrite Nat2Z.inj_add, IHn, two_power_nat_S.\nring.\nQed.\n\nLemma testbitToZLo {n} (ahi alo : Word n) i (Hi : (i < two_power_nat n)%Z) :\n  Z.testbit (toZ ((ahi, alo) : Word (S n))) i = Z.testbit (toZ alo) i.\nProof.\nrewrite (toZ_Pair ahi alo), two_power_nat_equiv, <- (Z.mod_pow2_bits_low _ _ _ Hi),\n        bitSize_Word, Zplus_comm, Z_mod_plus_full.\nauto using Z.mod_pow2_bits_low.\nQed.\n\nLemma testbitToZHi {n} (ahi alo : Word n) i (Hi : (two_power_nat n <= i)%Z) :\n  Z.testbit (toZ ((ahi, alo) : Word (S n))) i = Z.testbit (toZ ahi) (i - two_power_nat n).\nProof.\nrewrite <- bitSize_Word in *.\nreplace i with (i - Z.of_nat (bitSize (WordToZ n)) + Z.of_nat (bitSize (WordToZ n)))%Z at 1 by ring.\nrewrite (toZ_Pair ahi alo), two_power_nat_equiv, <- Z.div_pow2_bits,\n        Zplus_comm, Z_div_plus, (toZ_mod alo), two_power_nat_equiv, Zmod_div, Z.add_0_l;\nauto using Z.lt_gt, Z.pow_pos_nonneg with zarith.\nQed.\n\nDefinition to_hash256 (h : Word256) : hash256 :=\n  let '(((h0,h1),(h2,h3)),((h4,h5),(h6,h7))) := h in\n    Hash256 (List.map (fun x : Word32 => Integers.Int.repr (toZ x))\n              [h0;h1;h2;h3;h4;h5;h6;h7])\n            refl_equal.\n\nDefinition from_hash256 (l : hash256) : Word256 :=\nmatch map (fun x => fromZ (Integers.Int.unsigned x) : Word32) (hash256_reg l) with\n| [h0;h1;h2;h3;h4;h5;h6;h7] => (((h0,h1),(h2,h3)),((h4,h5),(h6,h7)))\n| _ => fromZ 0%Z\nend.\n\nLemma from_to_hash256 (h : Word256) : from_hash256 (to_hash256 h) = h.\nProof.\nassert (H32 : forall x : Word32, (0 <= toZ x <= Integers.Int.max_unsigned)%Z).\n intros x.\n change Integers.Int.max_unsigned with (Z.pred Integers.Int.modulus).\n rewrite <- Z.lt_le_pred, toZ_mod.\n apply Z.mod_pos_bound.\n reflexivity.\ndestruct h as [[[h0 h1][h2 h3]][[h4 h5][h6 h7]]]; cbn -[Word toZ fromZ].\nrepeat rewrite Integers.Int.unsigned_repr by auto.\nrepeat rewrite from_toZ.\nreflexivity.\nQed.\n\nLemma to_from_hash256 (h : hash256) : to_hash256 (from_hash256 h) = h.\nProof.\ndestruct h as [[|h0 [|h1 [|h2 [|h3 [|h4 [|h5 [|h6 [|h7 [|h8 h]]]]]]]]] Hh]; try discriminate.\nsimpl.\nrewrite !to_fromZ.\nchange (two_power_nat (bitSize (WordToZ 5))) with Integers.Int.modulus.\nrewrite <- !Integers.Int.unsigned_repr_eq, !Integers.Int.repr_unsigned.\nelim Hh using K_dec_set;[decide equality|].\nreflexivity.\nQed.\n\nSection Definitions.\n\nSection Arith.\n\nFixpoint zero {n : nat} {term : Core.Algebra} : term Unit (Word n) :=\nmatch n with\n| 0 => false\n| S n => zero &&& zero\nend.\n\nDefinition adderBit {term : Core.Algebra} : term (Bit * Bit) (Bit * Bit) :=\n  cond (iden &&& not iden) (false &&& iden).\n\nDefinition fullAdderBit {term : Core.Algebra} : term (Bit * (Bit * Bit)) (Bit * Bit) :=\n  maj &&& xor3.\n\nDefinition buildFullAdder {W} {term : Core.Algebra} (rec : term (Bit * (W * W)) (Bit * W)) :\n  term (Bit * ((W * W) * (W * W))) (Bit * (W * W)) :=\n    drop (O O H &&& I O H) &&& (O H &&& drop (O I H &&& I I H) >>> rec)\n>>> I I H &&& (I O H &&& O H >>> rec)\n>>> I O H &&& (I I H &&& O H).\n\nFixpoint fullAdder {n : nat} {term : Core.Algebra} : term (Bit * (Word n * Word n)) (Bit * Word n) :=\nmatch n with\n| 0 => fullAdderBit\n| S n => buildFullAdder fullAdder\nend.\n\nDefinition adder {n : nat} {term : Core.Algebra} : term (Word n * Word n) (Bit * Word n) :=\nmatch n with\n| 0 => adderBit\n| S n => false &&& iden >>> fullAdder\nend.\n\nDefinition fullMultiplierBit {term : Core.Algebra} : term ((Bit * Bit) * (Bit * Bit)) (Word 1) :=\n    take (cond iden false) &&& drop iden\n>>> fullAdderBit.\n\nDefinition buildFullMultiplier {W} {term : Core.Algebra} (rec : term ((W * W) * (W * W)) (W * W)) :\n  term (((W * W) * (W * W)) * ((W * W) * (W * W))) (((W * W) * (W * W))) :=\n    take (O O H &&& (I O H &&& O I H))\n&&& ((take (O O H &&& I I H) &&& drop (O O H &&& I O H) >>> rec)\n&&& (take (O I H &&& I I H) &&& drop (O I H &&& I I H) >>> rec))\n>>> take (O H &&& I O H)\n&&& (drop (O O H &&& I I H) &&& (O I H &&& drop (O I H &&& I O H) >>> rec))\n>>> (O H &&& drop (I O H &&& O O H) >>> rec) &&& drop (I I H &&& O I H).\n\nFixpoint fullMultiplier {n : nat} {term : Core.Algebra} : term ((Word n * Word n) * (Word n * Word n)) (Word (S n)) :=\nmatch n with\n| 0 => fullMultiplierBit\n| S n => buildFullMultiplier fullMultiplier\nend.\n\nDefinition multiplier {n : nat} {term : Core.Algebra} : term (Word n * Word n) (Word (S n)) :=\n   iden &&& (unit >>> zero &&& zero) >>> fullMultiplier.\n\nEnd Arith.\n\nSection Vector.\n\nDefinition build_fill {C X} {term : Core.Algebra} \n  (rec : term C X) : term C (X * X) := rec &&& rec.\n\nFixpoint fill {C X n} {term : Core.Algebra} (t : term C X) : term C (Vector X n) :=\nmatch n with\n| 0 => t\n| (S n) => build_fill (fill t)\nend.\n\nDefinition buildBitwiseTri {W} {term : Core.Algebra} (rec : term (W * (W * W)) W) :\n  term ((W * W) * ((W * W) * (W * W))) (W * W) :=\n    (O O H &&& (I O O H &&& I I O H) >>> rec)\n&&& (O I H &&& (I O I H &&& I I I H) >>> rec).\n\nFixpoint bitwiseTri {X} {n : nat} {term : Core.Algebra} (op : term (X * (X * X)) X) :\n  term (Vector X n * (Vector X n * Vector X n)) (Vector X n) :=\nmatch n with\n| 0 => op\n| S n => buildBitwiseTri (bitwiseTri op)\nend.\n\nDefinition build_leftmost {V X} {term : Core.Algebra} \n  (rec : term V X) : term (V * V) X := take rec.\n\nFixpoint leftmost {X n} {term : Core.Algebra} : term (Vector X n) X :=\nmatch n with\n| 0 => iden\n| S n => build_leftmost leftmost\nend.\n\nDefinition build_rightmost {V X} {term : Core.Algebra} \n  (rec : term V X) : term (V * V) X := drop rec.\n\nFixpoint rightmost {X n} {term : Core.Algebra} : term (Vector X n) X :=\nmatch n with\n| 0 => iden\n| S n => build_rightmost rightmost\nend.\n\nDefinition build_full_left_shift1 {X W} {term : Core.Algebra} \n  (rec : term (W * X) (X * W)) : term ((W * W) * X) (X * (W * W)) :=\n   O O H &&& (O I H &&& I H >>> rec) >>> (O H &&& I O H >>> rec) &&& I I H >>> O O H &&& (O I H &&& I H).\n\nFixpoint full_left_shift1 {X n} {term : Core.Algebra} :\n  term (Vector X n * X) (X * Vector X n) :=\nmatch n with\n| 0 => iden\n| S n => build_full_left_shift1 full_left_shift1\nend.\n\nDefinition build_full_right_shift1 {X W} {term : Core.Algebra} \n  (rec : term (X * W) (W * X)) : term (X * (W * W)) ((W * W) * X) :=\n(O H &&& I O H >>> rec) &&& I I H >>> O O H &&& (O I H &&& I H >>> rec) >>> (O H &&& I O H) &&& I I H.\n\nFixpoint full_right_shift1 {X n} {term : Core.Algebra} :\n  term (X * Vector X n) (Vector X n * X) :=\nmatch n with\n| 0 => iden\n| S n => build_full_right_shift1 full_right_shift1\nend.\n\nDefinition left_shift1 {X n} {term : Core.Algebra} (t : term Unit X) : term (Vector X n) (Vector X n) :=\niden &&& (unit >>> t) >>> full_left_shift1 >>> I H.\n\nFixpoint left_shift_const_by {X n} {term : Core.Algebra} (t : term Unit X) (p : positive) \n : term (Vector X n) (Vector X n) :=\nif (Zpower_nat 2 n <=? Zpos p)%Z then\n unit >>> fill t else\nmatch n with \n| 0 => iden\n| (S n0) => match p with\n  | xH => left_shift1 t\n  | xO p0 => eq_rect _ (fun x => term x x) (left_shift_const_by (t &&& t) p0) _ (eq_sym VectorPromote)\n  | xI p0 => left_shift1 t >>> eq_rect _ (fun x => term x x) (left_shift_const_by (t &&& t) p0) _ (eq_sym VectorPromote)\n  end\nend.\n\nDefinition right_shift1 {X n} {term : Core.Algebra} (t : term Unit X) : term (Vector X n) (Vector X n) :=\n(unit >>> t) &&& iden >>> full_right_shift1 >>> O H.\n\nFixpoint right_shift_const_by {X n} {term : Core.Algebra} (t : term Unit X) (p : positive) \n : term (Vector X n) (Vector X n) :=\nif (Zpower_nat 2 n <=? Zpos p)%Z then\n unit >>> fill t else\nmatch n with \n| 0 => iden\n| (S n0) => match p with\n  | xH => right_shift1 t\n  | xO p0 => eq_rect _ (fun x => term x x) (right_shift_const_by (t &&& t) p0) _ (eq_sym VectorPromote)\n  | xI p0 => right_shift1 t >>> eq_rect _ (fun x => term x x) (right_shift_const_by (t &&& t) p0) _ (eq_sym VectorPromote)\n  end\nend.\n\nDefinition shift_const_by {X n} {term : Core.Algebra} (t : term Unit X) (c : Z) \n : term (Vector X n) (Vector X n) :=\nmatch c with\n| Z0 => iden\n| Zpos p => left_shift_const_by t p\n| Zneg p => right_shift_const_by t p\nend.\n\nDefinition shift_const {n} {term : Core.Algebra} : Z -> term (Vector Bit n) (Vector Bit n) :=\n  shift_const_by false.\n\nDefinition left_rotate1 {X n} {term : Core.Algebra} : term (Vector X n) (Vector X n) :=\niden &&& leftmost >>> full_left_shift1 >>> I H.\n\nDefinition right_rotate1 {X n} {term : Core.Algebra} : term (Vector X n) (Vector X n) :=\nrightmost &&& iden >>> full_right_shift1 >>> O H.\n\nFixpoint rotate_const_list {X n} {term : Core.Algebra} (z : Z) \n : list (term (Vector X n) (Vector X n)) :=\nmatch n with \n| 0 => []\n| (S n0) =>\n  if Z.even z\n  then eq_rect _ (fun x => list (term x x)) (rotate_const_list (Z.div z 2)%Z) _ (eq_sym VectorPromote)\n  else if Z.even (Z.div z 2)\n  then left_rotate1 :: eq_rect _ (fun x => list (term x x)) (rotate_const_list (Z.div z 2)%Z) _ (eq_sym VectorPromote)\n  else right_rotate1 :: eq_rect _ (fun x => list (term x x)) (rotate_const_list (Z.div (z + 1) 2)%Z) _ (eq_sym VectorPromote)\nend.\n\nFixpoint foldr_comp {X} {term : Core.Algebra} (l : list (term X X)) : term X X :=\nmatch l with\n| [] => iden\n| i::[] => i\n| i::l => i >>> foldr_comp l\nend.\n\nDefinition rotate_const {X n} {term : Core.Algebra} (z : Z) : term (Vector X n) (Vector X n) :=\nfoldr_comp (rotate_const_list z).\n\nEnd Vector.\n\nEnd Definitions.\n\nSection Specifications.\n\nLemma zero_correct n : toZ (|[zero (n:=n)]| tt) = 0%Z.\nProof.\ninduction n; cbn;[|rewrite IHn];reflexivity.\nQed.\n\nLemma fullAdder_correct n : forall (a b : Word n) (c : Bit),\n  (toZ (|[fullAdder]| (c, (a, b))) = toZ a + toZ b  + toZ c)%Z.\nProof.\ninduction n. { intros [[] | []] [[] | []] [[] | []]; reflexivity. }\nintros [ahi alo] [bhi blo] c.\nfold Word in *.\ncbn -[toZ]; fold tySem; fold (tySem Bit).\nrewrite (toZ_Pair ahi alo), (toZ_Pair bhi blo).\nset (C := two_power_nat _).\ntransitivity ((toZ ahi + toZ bhi) * C + (toZ alo + toZ blo + toZ c))%Z;[|ring].\nrewrite <- IHn.\ndestruct (|[fullAdder]| (c, (alo, blo))) as [c0 rlo]; clear alo blo c.\ncbn [fst snd].\nrewrite (toZ_Pair c0 rlo).\nfold C.\ntransitivity ((toZ ahi + toZ bhi + toZ c0) * C + toZ rlo)%Z;[|ring].\nrewrite <- IHn.\ndestruct (|[fullAdder]| (c0, (ahi, bhi))) as [c1 rhi]; clear ahi bhi c0.\ncbn [fst snd].\nrewrite (toZ_Pair c1 rhi); fold C.\nrewrite (toZ_Pair c1 _).\nrewrite (bitSize_Pair (WordToZ n) (WordToZ n)).\nrewrite two_power_nat_correct, Zpower_nat_is_exp, <- two_power_nat_correct; fold C.\nrewrite (toZ_Pair rhi rlo); fold C.\nring.\nQed.\n\nLemma adder_correct n : forall (a b : Word n),\n  (toZ (|[adder]| (a, b)) = toZ a + toZ b)%Z.\ndestruct n. { intros [[] | []] [[] | []]; reflexivity. }\nunfold adder.\ngeneralize (S n); clear n; intros n a b.\ncbn -[toZ].\nrewrite fullAdder_correct.\ncbn.\nring.\nQed.\n\nLemma fullMultiplier_correct n : forall (a b c d : Word n),\n  (toZ (|[fullMultiplier]| ((a, b), (c, d))) = toZ a * toZ b + toZ c + toZ d)%Z.\nProof.\ninduction n. { intros [[] | []] [[] | []] [[] | []] [[] | []]; reflexivity. }\nintros [ahi alo] [bhi blo] [chi clo] [dhi dlo].\ncbn -[toZ]; fold tySem; fold (tySem Bit).\nfold Word in *.\nrewrite (toZ_Pair ahi alo), (toZ_Pair bhi blo), (toZ_Pair chi clo), (toZ_Pair dhi dlo).\nset (C := two_power_nat _).\ntransitivity ((toZ ahi * C + toZ alo) * toZ bhi * C +\n ((toZ ahi * toZ blo + toZ chi + toZ dhi) * C) + (toZ alo * toZ blo + toZ clo + toZ dlo))%Z;\n [|ring].\nrewrite <- 2!IHn.\ndestruct (|[fullMultiplier]| ((alo, blo), (clo, dlo))) as [c0 rOO]; clear clo dlo.\ndestruct (|[fullMultiplier]| ((ahi, blo), (chi, dhi))) as [c1 c2]; clear chi dhi blo.\ncbn [fst snd].\nfold Word in *.\nrewrite (toZ_Pair c1 c2), (toZ_Pair c0 rOO); fold C.\ntransitivity ((toZ ahi * toZ bhi + toZ c1) * C * C +\n (toZ bhi * toZ alo + toZ c2 + toZ c0) * C + toZ rOO)%Z;\n [|ring].\nrewrite <- IHn.\ndestruct (|[fullMultiplier]| ((bhi, alo), (c2, c0))) as [c3 rOI]; clear c2 c0 alo.\ncbn [fst snd].\nfold Word in *.\nrewrite (toZ_Pair c3 rOI); fold C.\ntransitivity ((toZ ahi * toZ bhi + toZ c3 + toZ c1) * C * C + toZ rOI * C + toZ rOO)%Z;\n [|ring].\nrewrite <- IHn.\ndestruct (|[fullMultiplier]| ((ahi, bhi), (c3, c1))) as [rII rIO]; clear c3 c1 ahi bhi.\nrewrite (@toZ_Pair (WordToZ (S n)) (WordToZ (S n))), (toZ_Pair rOI rOO); fold C.\nrewrite (bitSize_Pair (WordToZ n) (WordToZ n)).\nrewrite two_power_nat_correct, Zpower_nat_is_exp, <- two_power_nat_correct; fold C.\nset (X := toZ _); ring.\nQed.\n\nLemma multiplier_correct n : forall (a b : Word n),\n  (toZ (|[multiplier]| (a, b)) = toZ a * toZ b)%Z.\nProof.\nintros a b.\ncbn -[toZ].\nrewrite fullMultiplier_correct, zero_correct.\nring.\nQed.\n\nImport Coq.Vectors.Vector.VectorNotations.\n\nFixpoint replicate {X} (x : X) n : Vector.t X n :=\nmatch n return Vector.t X n with \n| 0 => []\n| S m => (x :: replicate x m)\nend.\n\nLemma replicate_append {X} (x : X) n m : replicate x n ++ replicate x m = replicate x (n + m).\nProof.\ninduction n.\n- reflexivity.\n- cbn.\n  f_equal.\n  assumption.\nQed.\n\nLemma nth_replicate {X n i} (x : X) (ix : i < n) : Vector.nth_order (replicate x n) ix = x.\nProof.\nrevert i ix.\ninduction n;[|intros [|i] Hi].\n- lia.\n- simpl.\n  rewrite Vector.nth_order_hd.\n  reflexivity.\n- assert (Hin : i < n) by lia.\n  rewrite <- (Vector.nth_order_tl _ _ _ _ Hin).\n  apply IHn.\nQed.\n\nLemma mul_2_r n : (2 * n = n + n)%nat.\nProof.\ncbn.\nf_equal.\ninduction n.\n- reflexivity.\n- cbn.\n  f_equal.\n  assumption.\nDefined.\n\nFixpoint flatten {X n} : Vector X n -> Vector.t X (2^n) :=\nmatch n return Vector X n -> Vector.t X (2^n) with\n| 0 => fun v => [v]\n| S n => fun v => eq_rect _ (Vector.t X) (flatten (fst v) ++ flatten (snd v)) _ (eq_sym (mul_2_r (2^n)))\nend.\n\nLemma fill_correct {C X n} (t : Arrow C X) (c : C) : flatten (|[ fill t ]| c) = replicate (|[ t ]| c) (2^n).\nProof.\ninduction n.\n- reflexivity.\n- cbn.\n  rewrite IHn.\n  generalize ( (mul_2_r (2 ^ n))).\n  cbn; intros ->; cbn.\n  apply replicate_append.\nQed.\n\nDefinition TrinarySpec {n} (f : bool -> bool -> bool -> bool) (term : Arrow (Word n * (Word n * Word n)) (Word n)) :=\n  forall (x y z : Word n) i, (Z.testbit (toZ (term (x,(y,z)))) i = f (Z.testbit (toZ x) i) (Z.testbit (toZ y) i) (Z.testbit (toZ z) i))%Z.\n\nLemma bitwiseTri_correct {n} (f : bool -> bool -> bool -> bool) (op : Arrow (Bit * (Bit * Bit)) Bit)\n    (Hf : f Datatypes.false Datatypes.false Datatypes.false = Datatypes.false)\n    (Hop : (forall (a b c : Bit), toBool (op (a,(b,c))) = f (toBool a) (toBool b) (toBool c))) :\n  TrinarySpec (n:=n) f (bitwiseTri op).\nProof.\ninduction n.\n intros a b c i.\n simpl (bitwiseTri op).\n assert (to01 : (forall (b : Bit), Z.testbit (toZ b) i = if toBool b then Z.testbit 1 i else Z.testbit 0 i)%Z) by\n  (intros [[] | []]; reflexivity).\n repeat rewrite to01.\n rewrite Hop; clear - Hf.\n destruct (toBool a);\n destruct (toBool b);\n destruct (toBool c);\n destruct i; cbn; try rewrite Hf; try reflexivity;\n destruct (f _ _ _) in |- *; reflexivity.\nintros [ahi alo] [bhi blo] [chi clo] i.\ndestruct (Z_lt_le_dec i (two_power_nat n)) as [Hi|Hi]; cbn;\n[repeat rewrite (testbitToZLo _ _ Hi)\n|repeat rewrite (testbitToZHi _ _ Hi)\n]; auto.\nQed.\n\nDefinition pow_succ n : (2^n = S (pred (2^n)))%nat.\ncase_eq (2^n).\n- abstract (intros H;elim (Nat.pow_nonzero 2 n);lia).\n- reflexivity.\nDefined.\n\nDefinition pow_hd {X n} (v : Vector.t X (2^n)) : X :=\nVector.hd (eq_rect _ (Vector.t X) v _ (pow_succ n)).\n\nDefinition pow_last {X n} (v : Vector.t X (2^n)) : X :=\nVector.last (eq_rect _ (Vector.t X) v _ (pow_succ n)).\n\nLemma hd_flatten {X n} (v0 v1 : Vector X n):\n  pow_hd (@flatten X (S n) (v0,v1)) = pow_hd (@flatten X n v0).\nProof.\nunfold pow_hd; cbn.\ngeneralize (mul_2_r (2 ^ n)) (pow_succ n) (pow_succ (S n)).\n  change (2 * 2 ^ n)%nat with (2 ^ (S n))%nat.\nchange (2 ^ n + (2 ^ n + 0))%nat with (2 ^ (S n))%nat.\nintros -> e0 e1; simpl.\ncut (forall a b (e0 : a = S (Init.Nat.pred a))\n(e1 : (a + b)%nat = S (Init.Nat.pred (a + b)))\n  (v : Vector.t X a) (w : Vector.t X b),\nVector.hd\n  (eq_rect (a + b)%nat (Vector.t X) (v ++ w)\n     (S (Init.Nat.pred (a + b))) e1) =\nVector.hd\n  (eq_rect a (Vector.t X) v (S (Init.Nat.pred a)) e0));\n[intros H0; apply H0|clear e0 e1].\nintros a b -> e; simpl.\nelim e using K_dec_set;[apply Nat.eq_dec|simpl].\nintros v.\nrewrite (Vector.eta v).\nreflexivity.\nQed.\n\nLemma leftmost_correct {X n v} : |[ leftmost ]| v = pow_hd (@flatten X n v).\nProof.\ninduction n.\n- reflexivity.\n- cbn.\n  rewrite IHn; clear IHn.\n  symmetry.\n  apply hd_flatten.\nQed.\n\nLemma Vector_eta_shift {X n} (v : Vector.t X (S n)) : v = Vector.shiftin (Vector.last v) (Vector.shiftout v).\nProof.\nelim v using Vector.rectS.\n- reflexivity.\n- simpl. intros a c w IH. f_equal. assumption.\nQed.\n\nLemma rightmost_correct {X n v} : |[ rightmost ]| v = pow_last (@flatten X n v).\nProof.\ninduction n.\n- reflexivity.\n- cbn.\n  rewrite IHn; clear IHn.\n  unfold pow_last.\n  generalize (mul_2_r (2 ^ n)) (pow_succ n) (pow_succ (S n)).\n    change (2 * 2 ^ n)%nat with (2 ^ (S n))%nat.\n  change (2 ^ n + (2 ^ n + 0))%nat with (2 ^ (S n))%nat.\n  intros -> e0 e1; simpl.\n  cut (forall a b (e0 : b = S (Init.Nat.pred b))\n  (e1 : (a + b)%nat = S (Init.Nat.pred (a + b)))\n  (v : Vector.t X a) (w : Vector.t X b),\nVector.last\n  (eq_rect b (Vector.t X) w (S (Init.Nat.pred b)) e0) =\nVector.last\n  (eq_rect (a + b)%nat (Vector.t X) (v ++ w)\n     (S (Init.Nat.pred (a + b))) e1));\n  [intros H0; apply H0|clear v e0 e1].\n  intros a b ->; simpl.\n  replace (Init.Nat.pred (a + S (Init.Nat.pred b))) with \n    (a + Init.Nat.pred b)%nat by (rewrite Nat.add_succ_r; reflexivity).\n  intros e v w.\n  transitivity (Vector.last (Vector.shiftin (Vector.last w) (v ++ Vector.shiftout w)));\n  [rewrite Vector.shiftin_last; reflexivity|].\n  f_equal.\n  revert e w.\n  generalize (pred b); clear b.\n  (* This shiftin/app/shiftout lemma could perhaps be generalized *)\n  induction v.\n  + simpl.\n    intros b e w.\n    elim e using K_dec_set;[apply Nat.eq_dec|clear e].\n    simpl.\n    symmetry.\n    apply Vector_eta_shift.\n  + simpl.\n    intros b e w.\n    assert (e0 : (n0 + S b)%nat = S (n0 + b)) by lia.\n    rewrite (IHv b e0).\n    generalize (v ++ w).\n    revert e.\n    rewrite e0.\n    intros e.\n    elim e using K_dec_set;[apply Nat.eq_dec|reflexivity].\nQed.\n\nDefinition map_fst {A B C} (f : A -> B) (v : A * C) : B * C := (f (fst v), snd v).\nDefinition map_snd {A B C} (f : B -> C) (v : A * B) : A * C := (fst v, f (snd v)).\n\nLemma tail_shiftin {X n} x (v: Vector.t X (S n)) :\n  Vector.tl (Vector.shiftin x v) = Vector.shiftin x (Vector.tl v).\nProof.\nrewrite (Vector.eta v).\nreflexivity.\nQed.\n\nLemma shiftin_append {X n m} (e : (n + S m = S (n + m))%nat) x (v0 : Vector.t X n) (v1 : Vector.t X m) :\n  Vector.shiftin x (v0 ++ v1) = eq_rect _ (Vector.t X) (v0 ++ (Vector.shiftin x v1)) _ e.\nProof.\nrevert e.\ninduction v0.\n- cbn; intros e.\n  elim e using K_dec_set;[apply Nat.eq_dec|reflexivity].\n- intros e.\n  assert (e0 : (n + S m)%nat = S (n + m)) by lia.\n  cbn in *.\n  rewrite (IHv0 e0).\n  revert e.\n  rewrite <- e0.\n  cbn.\n  intros e.\n  elim e using K_dec_set;[apply Nat.eq_dec|reflexivity].\nQed.\n\nLemma append_shiftin {X n m} (e : (n + S m = S (n + m))%nat) x (v0 : Vector.t X n) (v1 : Vector.t X m) :\n  Vector.shiftin x v0 ++ v1 = eq_rect _ (Vector.t X) (v0 ++ x ::v1) _ e.\nProof.\nrevert e.\ninduction v0.\n- cbn; intros e.\n  elim e using K_dec_set;[apply Nat.eq_dec|reflexivity].\n- intros e.\n  assert (e0 : (n + S m)%nat = S (n + m)) by lia.\n  cbn in *.\n  rewrite (IHv0 e0).\n  revert e.\n  rewrite <- e0.\n  cbn.\n  intros e; elim e using K_dec_set;[apply Nat.eq_dec|reflexivity].\nQed.\n\nLemma last_flatten {X n} v0 v1 :\n  pow_last (@flatten X (S n) (v0,v1)) = pow_last (@flatten X n v1).\nProof.\nfold tySem Vector in *.\nunfold pow_last; cbn.\ngeneralize (mul_2_r (2 ^ n)) (pow_succ n) (pow_succ (S n)).\n  change (2 * 2 ^ n)%nat with (2 ^ (S n))%nat.\nchange (2 ^ n + (2 ^ n + 0))%nat with (2 ^ (S n))%nat.\nintros -> e0 e1; simpl.\ncut (forall a b (e0 : b = S (Init.Nat.pred b))\n(e1 : (a + b)%nat = S (Init.Nat.pred (a + b)))\n  (v : Vector.t X a) (w : Vector.t X b),\nVector.last\n  (eq_rect (a + b)%nat (Vector.t X) (v ++ w)\n     (S (Init.Nat.pred (a + b))) e1) =\nVector.last\n  (eq_rect b (Vector.t X) w (S (Init.Nat.pred b)) e0));\n[intros H0; apply H0|clear e0 e1].\nintros a b -> e v w; simpl.\nrevert e.\nreplace (Init.Nat.pred (a + S (Init.Nat.pred b))) with (a + (Init.Nat.pred b))%nat by lia.\nrewrite (Vector_eta_shift w).\nintros e.\nrewrite <- (shiftin_append e).\nrewrite !VectorSpec.shiftin_last.\nreflexivity.\nQed.\n\nLemma full_left_shift1_correct {X n v x} :\n  map_snd flatten (|[ full_left_shift1 ]| (v, x)) = (pow_hd (@flatten X n v), Vector.tl (Vector.shiftin x (flatten v))).\nProof.\nfold tySem in *.\nrevert x.\ninduction n.\n- reflexivity.\n- destruct v as [v0 v1].\n  simpl.\n  unfold build_full_left_shift1.\n  intros x.\n  unfold map_snd.\n  cbn.\n  injection (IHn v1 x); intros -> ->.\n  set (y := pow_hd (flatten v1)).\n  injection (IHn v0 y); intros -> ->.\n  clear IHn.\n  f_equal.\n  + symmetry. apply hd_flatten.\n  + generalize (mul_2_r (2 ^ n)).\n    cbn; intros ->; cbn.\n    unfold y.\n    generalize (flatten v0) (flatten v1).\n    clear y v0 v1.\n    unfold pow_hd.\n    generalize (pow_succ n).\n    set (Z := pred (2^n)).\n    rewrite (pow_succ n).\n    intros ->.\n    unfold Z; clear Z.\n    cbn.\n    intros v0 v1.\n    rewrite tail_shiftin.\n    rewrite (append_shiftin  (Nat.add_succ_r _ _)).\n    replace (Vector.hd v1) with (Vector.hd (Vector.shiftin x v1)) by\n      (rewrite (Vector.eta v1); reflexivity).\n    rewrite <-Vector.eta.\n    rewrite (shiftin_append (Nat.add_succ_r _ _) x v0 v1).\n    set (e0 := (Nat.add_succ_r _ _)).\n    set (e1 := (Nat.add_succ_r _ _)).\n    clearbody e0 e1.\n    cbn in *.\n    revert e1.\n    rewrite <- e0.\n    intros e; elim e using K_dec_set;[apply Nat.eq_dec|].\n    cbn.\n    rewrite (Vector.eta v0).\n    reflexivity.\nQed.\n\nLemma left_shift1_correct {X n v t} :\n  @flatten X n (|[ left_shift1 t ]| v) = Vector.tl (Vector.shiftin (|[ t ]| tt) (flatten v)).\nProof.\nunfold left_shift1.\ncbn.\nchange (flatten (snd _)) with (snd (map_snd flatten (|[full_left_shift1]| (v, t tt)))).\nrewrite full_left_shift1_correct.\nreflexivity.\nQed.\n\nLemma shiftout_append {X n m} (e : (n + S m = S (n + m))%nat) (v0 : Vector.t X n) (v1 : Vector.t X (S m)) :\n  Vector.shiftout (eq_rect _ (Vector.t X) (v0 ++ v1) _ e) = v0 ++ (Vector.shiftout v1).\nProof.\nrevert e.\ninduction v0.\n- cbn; intros e.\n  elim e using K_dec_set;[apply Nat.eq_dec|reflexivity].\n- intros e.\n  assert (e0 : (n + S m)%nat = S (n + m)) by lia.\n  cbn in *.\n  rewrite <-(IHv0 e0).\n  generalize (v0 ++ v1).\n  revert e.\n  rewrite e0.\n  cbn.\n  intros e.\n  elim e using K_dec_set;[apply Nat.eq_dec|reflexivity].\nQed.\n\nLemma full_right_shift1_correct {X n v x} :\n  map_fst flatten (|[ full_right_shift1 ]| (x, v)) = (Vector.shiftout (x :: flatten v), pow_last (@flatten X n v)).\nProof.\nfold tySem in *.\nrevert x.\ninduction n.\n- reflexivity.\n- destruct v as [v0 v1].\n  simpl (map_fst _ _).\n  unfold build_full_right_shift1.\n  intros x.\n  unfold map_fst.\n  etransitivity;[cbn|reflexivity].\n  unfold map_fst in IHn.\n  replace (flatten (fst (|[full_right_shift1]| (x, v0)))) with (Vector.shiftout (x :: flatten v0))\n  by (injection (IHn v0 x); auto).\n  replace (snd (|[full_right_shift1]| (x, v0))) with (pow_last (flatten v0))\n  by (injection (IHn v0 x); auto).\n  set (y := pow_last (flatten v0)).\n  replace (flatten (fst (|[full_right_shift1]| (y, v1)))) with (Vector.shiftout (y :: flatten v1))\n  by (injection (IHn v1 y); auto).\n  replace (snd (|[full_right_shift1]| (y, v1))) with (pow_last (flatten v1))\n  by (injection (IHn v1 y); auto).\n  clear IHn.\n  f_equal.\n  + simpl (@flatten X (S n) (v0, v1)).\n    generalize (mul_2_r (2 ^ n)).\n    simpl (2 * _)%nat; simpl (2 ^ (S n))%nat.\n    intros ->.\n    change (Vector.shiftout (x :: flatten v0) ++ Vector.shiftout (y :: flatten v1)\n         = Vector.shiftout (x :: (flatten v0 ++ flatten v1))).\n    unfold y.\n    generalize (flatten v0) (flatten v1).\n    clear y v0 v1.\n    unfold pow_last.\n    generalize (pow_succ n).\n    set (Z := pred (2^n)).\n    rewrite (pow_succ n).\n    intros ->.\n    unfold Z; clear Z.\n    cbn.\n    intros v0 v1.\n    f_equal.\n    change (eq_rect _ (Vector.t X) (Vector.shiftout v0 ++ Vector.last v0 :: Vector.shiftout v1) _ eq_refl\n      = Vector.shiftout (v0 ++ v1)).\n    rewrite <- (eq_trans_sym_inv_r (Nat.add_succ_r _ _)), eq_trans_rew_distr.\n    rewrite <- append_shiftin.\n    rewrite <- Vector_eta_shift.\n    rewrite <- (shiftout_append (Nat.add_succ_r _ _)).\n    generalize (v0 ++ v1).\n    generalize (Nat.add_succ_r (S (Init.Nat.pred (2 ^ n)))\n           (Init.Nat.pred (2 ^ n))).\n    generalize (Nat.add_succ_r (Init.Nat.pred (2 ^ n))\n           (Init.Nat.pred (2 ^ n))).\n    cbn; intros <-; cbn.\n    intros e;elim e using K_dec_set;[apply Nat.eq_dec|].\n    reflexivity.\n  + symmetry. apply last_flatten.\nQed.\n\nLemma right_shift1_correct {X n v t} :\n  @flatten X n (|[ right_shift1 t ]| v) = Vector.shiftout (|[ t ]| tt :: flatten v).\nProof.\nunfold right_shift1.\netransitivity;[cbn|reflexivity].\nchange (flatten (fst _)) with (fst (map_fst flatten (|[full_right_shift1]| (t tt, v)))).\nrewrite full_right_shift1_correct.\nreflexivity.\nQed.\n\nLemma nth_order_shiftout {X n i} (v : Vector.t X (S n)) (ix1 : i < n) (ix2 : i < S n) :\n Vector.nth_order (Vector.shiftout v) ix1 = Vector.nth_order v ix2.\nProof.\nrevert i ix1 ix2.\nelim v using Vector.rectS.\n- lia.\n- intros h n0 t IHv i ix1 ix2.\n  destruct i. \n  + rewrite !Vector.nth_order_hd.\n    reflexivity.\n  + assert (ix1' : i < n0) by lia.\n    assert (ix2' : i < S n0) by lia.\n    rewrite <-(Vector.nth_order_tl _ _ _ _ ix1').\n    rewrite <-(Vector.nth_order_tl _ _ _ _ ix2').\n    change (VectorDef.nth_order (Vector.shiftout t) ix1' = VectorDef.nth_order t ix2').\n    apply IHv.\nQed.\n\nLemma nth_order_append_front {X n m i} (v : Vector.t X n) (w : Vector.t X m) (ix1 : i < n + m) (ix2 : i < n) :\n  Vector.nth_order (v ++ w) ix1 = Vector.nth_order v ix2.\nProof.\nrevert i ix1 ix2.\ninduction v;[lia|].\nintros [|i] ix1 ix2;simpl.\n- rewrite !Vector.nth_order_hd.\n  reflexivity.\n- assert (ix1' : i < n + m) by lia.\n  assert (ix2' : i < n) by lia.\n  rewrite <-(Vector.nth_order_tl _ _ _ _ ix1'), <-(Vector.nth_order_tl _ _ _ _ ix2').\n  simpl.\n  apply IHv.\nQed.\n\nLemma nth_order_append_back {X n m i} (v : Vector.t X n) (w : Vector.t X m) (ix1 : n + i < n + m) (ix2 : i < m) :\n  Vector.nth_order (v ++ w) ix1 = Vector.nth_order w ix2.\nProof.\nrevert i ix1 ix2.\ninduction v; intros i ix1 ix2.\n- apply Vector.nth_order_ext.\n- simpl.\n  assert (ix1' : n + i < n + m) by lia.\n  rewrite <- (Vector.nth_order_tl _ _ _ _ ix1').\n  apply IHv.\nQed.\n\nLemma nth_order_flatten {X n i} (v : Vector (X * X) n) (ix :(i < 2^n)) (ix1 : 2*i < 2^(S n)) (ix2 : 2*i + 1 < 2^(S n)) : \n         Vector.nth_order (flatten v) ix =\n         (Vector.nth_order (flatten (eq_rect _ tySem v _ (eq_sym VectorPromote))) ix1,\n          Vector.nth_order (flatten (eq_rect _ tySem v _ (eq_sym VectorPromote))) ix2).\nProof.\nrevert v i ix ix1 ix2.\ninduction n; intros [v0 v1] i ix ix1 ix2.\n- simpl in *|-.\n  destruct i;[|lia].\n  reflexivity.\n- simpl (@flatten _ (S n) _).\n  simpl (2 ^ _)%nat in *.\n  revert ix.\n  generalize (mul_2_r (2 ^ n)); simpl (2 * 2 ^ n)%nat.\n  intros -> ix.\n  fold (2^n).\n  simpl (eq_rect _ _ _ _ (eq_sym eq_refl)).\n  replace (eq_rect (Vector (X * X) (S n)) tySem (v0, v1) (Vector X (S (S n))) (eq_sym VectorPromote))\n   with ((eq_rect (Vector (X * X) n) tySem v0\n               (Vector X (S n)) (eq_sym VectorPromote)), (eq_rect (Vector (X * X) n) tySem v1\n               (Vector X (S n)) (eq_sym VectorPromote))).\n  2:{\n    generalize (eq_sym (@VectorPromote X (S n))).\n    revert v0 v1.\n    generalize (eq_sym (@VectorPromote X n)).\n    simpl.\n    intros -> v0 v1 e.\n    elim e using K_dec_set;[decide equality|].\n    reflexivity.\n  }\n  set (v0' := (eq_rect (Vector (X * X) n) _ _ _ _)).\n  set (v1' := (eq_rect (Vector (X * X) n) _ _ _ _)).\n  change (@flatten _ (S (S n)) (v0', v1'))\n   with (eq_rect _ (Vector.t X)\n     (flatten v0' ++ flatten v1') _\n     (eq_sym (mul_2_r (2 ^ (S n))))).\n  revert ix1 ix2.\n  generalize (mul_2_r (2 ^ S n)).\n  simpl (2 * _)%nat.\n  simpl (2 ^ _)%nat.\n  intros -> ix1 ix2.\n  change (Vector.nth_order (flatten v0 ++ flatten v1) ix =\n    ( Vector.nth_order (flatten v0' ++ flatten v1') ix1\n    , Vector.nth_order (flatten v0' ++ flatten v1') ix2)).\n  destruct (Nat.le_gt_cases (2^n) i) as [Hi|ix'].\n  + pose (j:= i - 2^n).\n    assert (ix' : j < 2 ^ n) by lia.\n    assert (ix1' : 2 * j < 2 ^ S n) by (cbn; lia).\n    assert (ix2' : 2 * j + 1 < 2 ^ S n) by (cbn; lia).\n    revert ix.\n    pattern i at 1 2.\n    replace i with (2^n + j)%nat by lia.\n    intros ix.\n    fold (2*i)%nat in *.\n    revert ix1.\n    pattern (2*i)%nat at 1 2.\n    replace (2*i)%nat with (2^(S n) + 2*j)%nat by (cbn;lia).\n    intros ix1.\n    revert ix2.\n    replace (2*i + 1)%nat with (2^(S n) + (2*j + 1))%nat by (cbn;lia).\n    intros ix2.\n    rewrite (nth_order_append_back _ _ _ ix'),\n            (nth_order_append_back _ _ _ ix1'),\n            (nth_order_append_back _ _ _ ix2').\n    apply IHn.\n  + assert (ix1' : 2 * i < 2 ^ S n) by (cbn; lia).\n    assert (ix2' : 2 * i + 1 < 2 ^ S n) by (cbn; lia).\n    rewrite (nth_order_append_front _ _ _ ix'),\n            (nth_order_append_front _ _ _ ix1'),\n            (nth_order_append_front _ _ _ ix2').\n    apply IHn.\nQed.\n\nLemma nth_order_flatten_if {X n i} (v : Vector (X * X) n) (ix : i < 2^(S n)) (ix_half : Nat.div2 i < 2^n) :\n      Vector.nth_order (flatten (eq_rect _ tySem v _ (eq_sym VectorPromote))) ix =\n      (if Nat.even i then fst else snd) (Vector.nth_order (flatten v) ix_half).\nProof.\nassert (ix_half1 : 2 * Nat.div2 i < 2 ^ (S n)) by (cbn;lia).\nassert (ix_half2 : 2 * Nat.div2 i + 1 < 2 ^ (S n)) by (cbn;lia).\nrewrite (nth_order_flatten _ _ ix_half1 ix_half2).\ndestruct (Nat.Even_Odd_dec i) as [Heven|Hodd].\n- rewrite <- Nat.even_spec in Heven.\n  rewrite Heven.\n  rewrite Nat.even_spec in Heven.\n  destruct Heven as [i' ->].\n  revert ix_half1 ix_half2.\n  rewrite Nat.div2_double.\n  intros; apply Vector.nth_order_ext.\n- rewrite <- Nat.odd_spec in Hodd.\n  rewrite <- Nat.negb_odd, Hodd.\n  rewrite Nat.odd_spec in Hodd.\n  destruct Hodd as [i' ->].\n  revert ix ix_half1 ix_half2.\n  replace (2 * i' + 1)%nat with (S (2 * i'))%nat by lia.\n  rewrite Nat.div2_succ_double.\n  replace (2 * i' + 1)%nat with (S (2 * i'))%nat by lia.\n  intros; apply Vector.nth_order_ext.\nQed.\n\nLemma right_shift_const_by_correct {X n v t p i} (ix1 : i < 2^n) (ix2 : i - Pos.to_nat p < 2^n) :\n  Vector.nth_order (@flatten X n (|[ right_shift_const_by t p ]| v)) ix1 =\n  if i <? Pos.to_nat p then |[ t ]| tt else Vector.nth_order (@flatten X n v) ix2.\nProof.\nrevert X t p v i ix1 ix2.\ninduction n;intros X t p v i ix1 ix2.\n- simpl in *.\n  destruct i;[|lia].\n  elim (Z.leb_spec);[intros _|lia].\n  elim (Nat.ltb_spec);[intros _|lia].\n  reflexivity.\n- simpl (right_shift_const_by t p v).\n  change (_ <=? _)%Z with  (Zpower_nat 2 (S n) <=? Z.pos p)%Z.\n  elim (Z.leb_spec).\n  1:{\n    rewrite Zpower_nat_Z.\n    change 2%Z with (Z.of_nat 2%nat) at 1.\n    rewrite <- Nat2Z.inj_pow.\n    intros Hp.    \n    elim (Nat.ltb_spec);[intros _|lia].\n    change (Vector.nth_order (flatten (|[@fill _ X (S n)  _ t]| tt)) ix1 = |[t]| tt).\n    rewrite fill_correct.\n    apply nth_replicate.\n  }\n  intros Hpn.\n  transitivity (match p with\n      | (p0~1)%positive => Vector.nth_order (flatten ((\n          eq_rect (Vector (X * X) n)\n            (fun x : Ty => Arrow x x)\n            (right_shift_const_by (t &&& t) p0)\n            (Vector X (S n))\n            (eq_sym VectorPromote)) (right_shift1 t v))) ix1\n      | (p0~0)%positive =>\n          Vector.nth_order (flatten ((eq_rect (Vector (X * X) n)\n            (fun x : Ty => Arrow x x)\n            (right_shift_const_by (t &&& t) p0)\n            (Vector X (S n))\n            (eq_sym VectorPromote)) v)) ix1\n      | 1%positive => Vector.nth_order (flatten (right_shift1 t v)) ix1\n      end);\n  [destruct p; reflexivity|].\n  assert (Hcast : forall (f : Arrow (Vector (X*X) n) (Vector (X*X) n)),\n    (eq_rect _ (fun x : Ty => Arrow x x) f _ (eq_sym VectorPromote) =\n    (fun w => eq_rect _ tySem (f (eq_rect _ tySem w _ VectorPromote)) _ (eq_sym VectorPromote)))).\n  1:{\n    generalize (@VectorPromote X n).\n    intros <-.\n    reflexivity.\n  }\n  assert (ix_half : Nat.div2 i < 2^n).\n  1:{\n    rewrite Nat.div2_div.\n    apply Nat.Div0.div_lt_upper_bound.\n    rewrite <- Nat.pow_succ_r'.\n    assumption.\n  }\n  specialize (IHn (X*X) (t &&& t)).\n  destruct p.\n  + rewrite Hcast.\n    set (w:= right_shift_const_by (t &&& t) p _).\n    rewrite (nth_order_flatten_if _ _ ix_half).\n    assert (ix_half2 : Nat.div2 i - Pos.to_nat p < 2 ^ n) by lia.\n    rewrite (IHn _ _ _ ix_half ix_half2).\n    elim Nat.ltb_spec; rewrite Nat.div2_div at 1.\n    * intros Hip.\n      elim Nat.ltb_spec.\n      2:{\n        rewrite (Pos2Nat.inj_xI p) at 1.\n        intros Hpi.\n        assert (Hpi0 : S (2 * Pos.to_nat p) / 2 <= i / 2) by (apply Nat.Div0.div_le_mono;lia).\n        rewrite <- (Nat.div_unique _ _ (Pos.to_nat p) 1) in Hpi0; lia.\n      }\n      intros _.\n      destruct (Nat.even i);reflexivity.\n    * intros Hpi.\n      assert (ix_half2a : 2*(Nat.div2 i - Pos.to_nat p) < 2 ^ (S n)) by (rewrite Nat.pow_succ_r';lia).\n      assert (ix_half2b : 2*(Nat.div2 i - Pos.to_nat p) + 1 < 2 ^ (S n)) by (rewrite Nat.pow_succ_r';lia).\n      erewrite (nth_order_flatten _ _ ix_half2a ix_half2b).\n      rewrite <-eq_trans_rew_distr, eq_trans_sym_inv_r.\n      cbn -[right_shift1 flatten Pos.to_nat Nat.ltb].\n      rewrite right_shift1_correct.\n      elim Nat.ltb_spec.\n      1:{\n        rewrite (Pos2Nat.inj_xI p) at 1.\n        intros Hip.\n        assert (Hi : (i = 2*Pos.to_nat p)%nat).\n        1:{\n          apply Nat.le_antisymm;[lia|].\n          apply (Nat.mul_le_mono_l _ _ 2) in Hpi.\n          assert (Hle := Nat.Div0.mul_div_le i 2).\n          lia.\n        }\n        replace (Nat.even i) with (Nat.even (2 * Pos.to_nat p)%nat) by congruence.\n        rewrite Nat.even_mul.\n        change (Vector.nth_order (Vector.shiftout (t tt :: flatten v)) ix_half2a = t tt).\n        revert ix_half2a.\n        rewrite Hi, Nat.div2_double.\n        replace (2 * (Pos.to_nat p - Pos.to_nat p))%nat with 0 by lia.\n        intros ix_half2a.\n        assert (ix_half2a' : 0 < S (2 ^ S n)) by lia.\n        rewrite (nth_order_shiftout _ _ ix_half2a').\n        rewrite Vector.nth_order_hd.\n        reflexivity.\n      }\n      assert (ix_half2a' : 2 * (Nat.div2 i - Pos.to_nat p) < S (2 ^ S n)) by lia.\n      assert (ix_half2b' : 2 * (Nat.div2 i - Pos.to_nat p) + 1 < S (2 ^ S n)) by lia.\n      rewrite (nth_order_shiftout _ _ ix_half2a'), (nth_order_shiftout _ _ ix_half2b').\n      intros Hp1i.\n      transitivity (Vector.nth_order (Vector.tl (t tt :: flatten v)) ix2);[|reflexivity].\n      assert (ix2' : S (i - Pos.to_nat p~1) < S (2 ^ S n)) by lia.\n      rewrite (VectorSpec.nth_order_tl _ _ _ _ _ ix2').\n      destruct (Nat.Even_Odd_dec i) as [Heven|Hodd].\n      1:{\n        rewrite <- Nat.even_spec in Heven.\n        rewrite Heven.\n        rewrite Nat.even_spec in Heven.\n        destruct Heven as [i' Hi'].\n        revert ix2'.\n        replace (S (i - Pos.to_nat p~1)) with (2 * (Nat.div2 i - Pos.to_nat p))%nat;\n        [intros; apply Vector.nth_order_ext|].\n        rewrite Hi', Nat.div2_double.\n        lia.\n      }\n      1:{\n        rewrite <- Nat.odd_spec in Hodd.\n        rewrite <- Nat.negb_odd, Hodd.\n        rewrite Nat.odd_spec in Hodd.\n        destruct Hodd as [i' Hi'].\n        revert ix2'.\n        replace (S (i - Pos.to_nat p~1)) with (2 * (Nat.div2 i - Pos.to_nat p) + 1)%nat;\n        [intros; apply Vector.nth_order_ext|].\n        replace (2 * i' + 1)%nat with (S (2 * i')) in Hi' by lia.\n        rewrite Hi', Nat.div2_succ_double.\n        lia.\n      }\n  + rewrite Hcast.\n    set (w:= right_shift_const_by (t &&& t) p _).\n    rewrite (nth_order_flatten_if _ _ ix_half).\n    assert (ix_half2 : Nat.div2 i - Pos.to_nat p < 2 ^ n) by lia.\n    rewrite (IHn _ _ _ ix_half ix_half2).\n    elim Nat.ltb_spec; rewrite Nat.div2_div at 1.\n    * intros Hip.\n      elim Nat.ltb_spec.\n      2:{\n        rewrite (Pos2Nat.inj_xO p) at 1.\n        intros Hpi.\n        assert (Hpi0 : (2 * Pos.to_nat p) / 2 <= i / 2) by (apply Nat.Div0.div_le_mono;lia).\n        rewrite <- (Nat.div_unique _ _ (Pos.to_nat p) 0) in Hpi0; lia.\n      }\n      intros _.\n      destruct (Nat.even i);reflexivity.\n    * intros Hpi.\n      elim Nat.ltb_spec.\n      1:{ \n        rewrite (Pos2Nat.inj_xO p) at 1.\n        assert (Hle := Nat.Div0.mul_div_le i 2).\n        lia.\n      }\n      assert (ix_half2a : 2*(Nat.div2 i - Pos.to_nat p) < 2 ^ (S n)) by (rewrite Nat.pow_succ_r';lia).\n      assert (ix_half2b : 2*(Nat.div2 i - Pos.to_nat p) + 1 < 2 ^ (S n)) by (rewrite Nat.pow_succ_r';lia).\n      erewrite (nth_order_flatten _ _ ix_half2a ix_half2b).\n      rewrite <-eq_trans_rew_distr, eq_trans_sym_inv_r.\n      cbn -[right_shift1 flatten Pos.to_nat Nat.ltb].\n      intros Hp0i.\n      destruct (Nat.Even_Odd_dec i) as [Heven|Hodd].\n      1:{\n        rewrite <- Nat.even_spec in Heven.\n        rewrite Heven.\n        rewrite Nat.even_spec in Heven.\n        destruct Heven as [i' Hi'].\n        revert ix2.\n        replace (i - Pos.to_nat p~0) with (2 * (Nat.div2 i - Pos.to_nat p))%nat;\n        [intros; apply Vector.nth_order_ext|].\n        rewrite Hi', Nat.div2_double.\n        lia.\n      }\n      1:{\n        rewrite <- Nat.odd_spec in Hodd.\n        rewrite <- Nat.negb_odd, Hodd.\n        rewrite Nat.odd_spec in Hodd.\n        destruct Hodd as [i' Hi'].\n        revert ix2.\n        replace (i - Pos.to_nat p~0) with (2 * (Nat.div2 i - Pos.to_nat p) + 1)%nat;\n        [intros; apply Vector.nth_order_ext|].\n        replace (2 * i' + 1)%nat with (S (2 * i')) in Hi' by lia.\n        rewrite Hi', Nat.div2_succ_double.\n        lia.\n      }\n  + rewrite right_shift1_correct.\n    assert (ix1' : i < S (2 ^ S n)) by lia.\n    rewrite (nth_order_shiftout _ _ ix1').\n    elim Nat.ltb_spec; intros Hi.\n    * destruct i;[|lia].\n      rewrite Vector.nth_order_hd.\n      reflexivity.\n    * destruct i;[lia|].\n      assert (ix1'S : i < 2 ^ S n) by lia.\n      rewrite <- (Vector.nth_order_tl _ _ _ _ ix1'S).\n      change (Vector.nth_order (flatten v) ix1'S = Vector.nth_order (flatten v) ix2).\n      revert ix2.\n      replace (S i - Pos.to_nat 1)%nat with i;\n      [intros; apply Vector.nth_order_ext|lia].\nQed.\n\nLemma shiftout_shiftin {X n} a (v : Vector.t X n) : (Vector.shiftout (Vector.shiftin a v)) = v.\nProof.\ninduction v.\n- reflexivity.\n- simpl.\n  rewrite IHv.\n  reflexivity.\nQed.\n\nLemma left_shift_const_by_correct {X n v t p i} (ix1 : i < 2^n) :\n  Vector.nth_order (@flatten X n (|[ left_shift_const_by t p ]| v)) ix1 =\n  match lt_dec (i + Pos.to_nat p) (2^n) with\n  | left ix2 => Vector.nth_order (@flatten X n v) ix2\n  | right _ => |[ t ]| tt\n  end.\nProof.\nrevert X t p v i ix1.\ninduction n;intros X t p v i ix1.\n- simpl in *.\n  destruct i;[|lia].\n  elim (Z.leb_spec);[intros _|lia].\n  destruct (lt_dec _ _);[lia|reflexivity].\n- simpl (left_shift_const_by t p v).\n  change (_ <=? _)%Z with  (Zpower_nat 2 (S n) <=? Z.pos p)%Z.\n  elim (Z.leb_spec).\n  1:{\n    rewrite Zpower_nat_Z.\n    change 2%Z with (Z.of_nat 2%nat) at 1.\n    rewrite <- Nat2Z.inj_pow.\n    intros Hp.\n    destruct (lt_dec _ _);[lia|].\n    change (Vector.nth_order (flatten (|[@fill _ X (S n)  _ t]| tt)) ix1 = |[t]| tt).\n    rewrite fill_correct.\n    apply nth_replicate.\n  }\n  intros Hpn.\n  transitivity (match p with\n      | (p0~1)%positive => Vector.nth_order (flatten ((\n          eq_rect (Vector (X * X) n)\n            (fun x : Ty => Arrow x x)\n            (left_shift_const_by (t &&& t) p0)\n            (Vector X (S n))\n            (eq_sym VectorPromote)) (left_shift1 t v))) ix1\n      | (p0~0)%positive =>\n          Vector.nth_order (flatten ((eq_rect (Vector (X * X) n)\n            (fun x : Ty => Arrow x x)\n            (left_shift_const_by (t &&& t) p0)\n            (Vector X (S n))\n            (eq_sym VectorPromote)) v)) ix1\n      | 1%positive => Vector.nth_order (flatten (left_shift1 t v)) ix1\n      end);\n  [destruct p; reflexivity|].\n  assert (Hcast : forall (f : Arrow (Vector (X*X) n) (Vector (X*X) n)),\n    (eq_rect _ (fun x : Ty => Arrow x x) f _ (eq_sym VectorPromote) =\n    (fun w => eq_rect _ tySem (f (eq_rect _ tySem w _ VectorPromote)) _ (eq_sym VectorPromote)))).\n  1:{\n    generalize (@VectorPromote X n).\n    intros <-.\n    reflexivity.\n  }\n  assert (ix_half : Nat.div2 i < 2^n).\n  1:{\n    rewrite Nat.div2_div.\n    apply Nat.Div0.div_lt_upper_bound.\n    rewrite <- Nat.pow_succ_r'.\n    assumption.\n  }\n  specialize (IHn (X*X) (t &&& t)).\n  destruct p.\n  + rewrite Hcast.\n    set (w:= left_shift_const_by (t &&& t) p _).\n    rewrite (nth_order_flatten_if _ _ ix_half).\n    rewrite (IHn _ _ _ ix_half).\n    elim lt_dec; rewrite Nat.div2_div.\n    2:{\n      intros Hip.\n      elim lt_dec.\n      1:{\n        intros Hpi.\n        exfalso.\n        rewrite (Pos2Nat.inj_xI p) in Hpi.\n        rewrite <- Nat.le_succ_l in Hpi.\n        assert (Hpi0 : (i + (S (Pos.to_nat p)) * 2) / 2 <= 2 ^ (S n) / 2) by (apply Nat.Div0.div_le_mono;lia).\n        rewrite Nat.div_add in Hpi0 by lia.\n        change (2^(S n)) with (2*(2^n))%nat in Hpi0.\n        rewrite Nat.mul_comm, Nat.div_mul in Hpi0 by lia.\n        lia.\n      }\n      intros _.\n      destruct (Nat.even i);reflexivity.\n    }\n    1:{\n      intros ix_half2.\n      assert (ix_half2a : 2 * (i / 2 + Pos.to_nat p) < 2 ^ (S n)) by (rewrite Nat.pow_succ_r';lia).\n      assert (ix_half2b : 2 * (i / 2 + Pos.to_nat p) + 1 < 2 ^ (S n)) by (rewrite Nat.pow_succ_r';lia).\n      erewrite (nth_order_flatten _ ix_half2 ix_half2a ix_half2b).\n      rewrite <-eq_trans_rew_distr, eq_trans_sym_inv_r.\n      cbn -[left_shift1 flatten Pos.to_nat Nat.ltb].\n      rewrite left_shift1_correct.\n      elim lt_dec.\n      2:{\n        intros Hip.\n        assert (Hi : (i = 2^(S n) - 2*(Pos.to_nat p) - 1)%nat).\n        1:{\n          apply Nat.le_antisymm;[|cbn;lia].\n          apply (Nat.mul_le_mono_l _ _ 2) in ix_half2.\n          assert (Hlt := Nat.mul_succ_div_gt i 2).\n          lia.\n        }\n        replace (Nat.even i) with (Nat.even (2^(S n) - 2*(Pos.to_nat p) - 1)) by congruence.\n        rewrite !Nat.even_sub, Nat.even_pow, Nat.even_mul by lia.\n        change (Vector.nth_order (Vector.tl (Vector.shiftin (t tt) (flatten v))) ix_half2b = t tt).\n        revert ix_half2b.\n        replace (2 * (i / 2 + Pos.to_nat p) + 1)%nat with (pred (2^(S n))).\n        2:{\n          rewrite Nat.mul_add_distr_l, Hi.\n          change (2^ (S n)) with (2*(2^n))%nat.\n          replace (2 * 2 ^ n - 2 * Pos.to_nat p - 1) with (((2 ^ n - Pos.to_nat p -1) * 2 + 1))%nat by lia.\n          rewrite Nat.div_add_l by lia.\n          change (1 / 2) with 0.\n          lia.\n        }\n        intros ix_half2b.\n        assert (ix_half2b' : S (Init.Nat.pred (2 ^ S n)) < S (2 ^ S n)) by lia.\n        rewrite (VectorSpec.nth_order_tl _ _ _ _ _ ix_half2b').\n        revert ix_half2b'.\n        rewrite <- pow_succ.\n        intros ix_half2b'.\n        rewrite Vector.nth_order_last, Vector.shiftin_last.\n        reflexivity.\n      }\n      assert (ix_half2a' : S (2 * (i / 2 + Pos.to_nat p)) < S (2 ^ S n)) by lia.\n      assert (ix_half2b' : S (2 * (i / 2 + Pos.to_nat p) + 1) < S (2 ^ S n)) by lia.\n      rewrite (VectorSpec.nth_order_tl _ _ _ _ _ ix_half2a'),\n              (VectorSpec.nth_order_tl _ _ _ _ _ ix_half2b').\n      intros ix2.\n      transitivity (Vector.nth_order (Vector.shiftout (Vector.shiftin (t tt) (flatten v))) ix2);\n      [|rewrite shiftout_shiftin;reflexivity].\n      assert (ix2' :i + Pos.to_nat p~1 < S (2 ^ n + (2 ^ n + 0))) by lia.\n      rewrite (nth_order_shiftout _ _ ix2').\n      destruct (Nat.Even_Odd_dec i) as [Heven|Hodd].\n      1:{\n        rewrite <- Nat.even_spec in Heven.\n        rewrite Heven.\n        rewrite Nat.even_spec in Heven.\n        destruct Heven as [i' Hi'].\n        revert ix2'.\n        replace (i + Pos.to_nat p~1)%nat with (S (2 * (i / 2 + Pos.to_nat p)))%nat;\n        [intros; apply Vector.nth_order_ext|].\n        rewrite Hi', (Nat.mul_comm _ i'), Nat.div_mul; lia.\n      }\n      1:{\n        rewrite <- Nat.odd_spec in Hodd.\n        rewrite <- Nat.negb_odd, Hodd.\n        rewrite Nat.odd_spec in Hodd.\n        destruct Hodd as [i' Hi'].\n        revert ix2'.\n        replace (i + Pos.to_nat p~1)%nat with (S (2 * (i / 2 + Pos.to_nat p) + 1))%nat;\n        [intros; apply Vector.nth_order_ext|].\n        replace (2 * i' + 1)%nat with (S (2 * i')) in Hi' by lia.\n        rewrite Hi', <- Nat.div2_div, Nat.div2_succ_double.\n        lia.\n      }\n    }\n  + rewrite Hcast.\n    set (w:= left_shift_const_by (t &&& t) p _).\n    rewrite (nth_order_flatten_if _ _ ix_half).\n    rewrite (IHn _ _ _ ix_half).\n    elim lt_dec; rewrite Nat.div2_div.\n    2:{\n      intros Hip.\n      elim lt_dec.\n      1:{\n        intros Hpi.\n        elim Hip.\n        rewrite (Pos2Nat.inj_xO p) in Hpi.\n        change (2^(S n)) with (2*(2^n))%nat in Hpi.\n        assert (Hle := Nat.Div0.mul_div_le i 2).\n        cut (i/2 <= 2^n - (Pos.to_nat p + 1));[lia|].\n        apply Nat.Div0.div_le_upper_bound;lia.\n      }\n      intros _.\n      destruct (Nat.even i);reflexivity.\n    }\n    1:{\n      intros ix_half2.\n      elim lt_dec.\n      2:{\n        intros Hip.\n        apply Nat.nlt_ge in Hip.\n        rewrite (Pos2Nat.inj_xO p) in Hip.\n        apply (Nat.Div0.div_le_mono _ _ 2) in Hip.\n        change (2^(S n)) with (2*(2^n))%nat in Hip.\n        rewrite Nat.mul_comm, Nat.div_mul in Hip by lia.\n        rewrite Nat.mul_comm, Nat.div_add in Hip by lia.\n        lia.\n      }\n      assert (ix_half2a : 2 * (i / 2 + Pos.to_nat p) < 2 ^ S n) by (rewrite Nat.pow_succ_r';lia).\n      assert (ix_half2b : 2 * (i / 2 + Pos.to_nat p) + 1 < 2 ^ S n) by (rewrite Nat.pow_succ_r';lia).\n      erewrite (nth_order_flatten _ _ ix_half2a ix_half2b).\n      rewrite <-eq_trans_rew_distr, eq_trans_sym_inv_r.\n      cbn -[flatten Pos.to_nat Nat.ltb].\n      intros ix2.\n      destruct (Nat.Even_Odd_dec i) as [Heven|Hodd].\n      1:{\n        rewrite <- Nat.even_spec in Heven.\n        rewrite Heven.\n        rewrite Nat.even_spec in Heven.\n        destruct Heven as [i' Hi'].\n        revert ix2.\n        replace (i + Pos.to_nat p~0)%nat with (2 * (i / 2 + Pos.to_nat p))%nat;\n        [intros; apply Vector.nth_order_ext|].\n        rewrite Hi', <- Nat.div2_div, Nat.div2_double.\n        lia.\n      }\n      1:{\n        rewrite <- Nat.odd_spec in Hodd.\n        rewrite <- Nat.negb_odd, Hodd.\n        rewrite Nat.odd_spec in Hodd.\n        destruct Hodd as [i' Hi'].\n        revert ix2.\n        replace (i + Pos.to_nat p~0)%nat with (2 * (i / 2 + Pos.to_nat p) + 1)%nat;\n        [intros; apply Vector.nth_order_ext|].\n        replace (2 * i' + 1)%nat with (S (2 * i')) in Hi' by lia.\n        rewrite Hi', <- Nat.div2_div, Nat.div2_succ_double.\n        lia.\n      }\n    }\n  + rewrite left_shift1_correct.\n    assert (ix1' : S i < S (2 ^ S n)) by lia.\n    rewrite (Vector.nth_order_tl _ _ _ _ _ ix1').\n    elim lt_dec; intros Hi.\n    * transitivity (VectorDef.nth_order (Vector.shiftout (Vector.shiftin (t tt) (flatten v))) Hi).\n      1:{\n       revert Hi.\n       replace (i + Pos.to_nat 1)%nat with (S i) by lia.\n       intros Hi.\n       rewrite (nth_order_shiftout _ _ ix1').\n       reflexivity.\n      }\n      f_equal.\n      apply shiftout_shiftin.\n    * revert ix1'.\n      replace (S i) with (2^S n) by lia.\n      intros ix1'.\n      rewrite Vector.nth_order_last.\n      apply Vector.shiftin_last.\nQed.\n\nLemma nth_Word {n i} (x : Word n) (ix : i < 2^n) :\n  toBool (Vector.nth_order (flatten x) ix) = Z.testbit (toZ x) (2^(Z.of_nat n) - 1 - Z.of_nat i).\nProof.\nrevert i x ix.\ninduction n.\n- intros [|i];[|cbn;lia].\n  intros [[] | []];reflexivity.\n- intros i [x0 x1].\n  rewrite <- (Nat2Z.inj_pow 2) in *.\n  simpl.\n  generalize (mul_2_r (2 ^ n)); simpl.\n  intros -> ix; simpl.\n  destruct (lt_dec i (2^n)) as [ix'|Hi].\n  + rewrite (nth_order_append_front _ _ _ ix'), IHn, testbitToZHi;\n    rewrite two_power_nat_equiv, <- (Nat2Z.inj_pow 2);[f_equal|];lia.\n  + assert (ix' : i - 2^n < 2^n) by lia.\n    revert ix.\n    replace i with (2^n + (i - 2^n))%nat by lia.\n    intros ix.\n    rewrite (nth_order_append_back _ _ _ ix'), IHn, testbitToZLo;[f_equal;lia|].\n    rewrite two_power_nat_equiv, <- (Nat2Z.inj_pow 2).\n    lia.\nQed.\n\nLemma shift_const_correct n z (x : Word n) i (Hi : (0 <= i < two_power_nat n)%Z) :\n  Z.testbit (toZ (|[shift_const (-z)]| x : tySem (Word n))) i = Z.testbit (toZ x) (i + z)%Z.\nProof.\nassert (Htwo : forall n, two_power_nat n = Z.of_nat (2 ^ n)).\n1:{\n  intros.\n  rewrite two_power_nat_equiv, <- (Nat2Z.inj_pow 2).\n  reflexivity.\n}\nrewrite Htwo in *.\nassert (ix : 2^n - 1 - Z.to_nat i < 2^n) by lia.\ndestruct z;cbn.\n- f_equal.\n  lia.\n- replace i with (Z.of_nat (2 ^  n - 1 - (2 ^ n - 1 - Z.to_nat i))) at 1 by lia.\n  rewrite Nat2Z.inj_sub, (Nat2Z.inj_sub _ 1), Nat2Z.inj_pow by lia.\n  rewrite <- (nth_Word _ ix).\n  assert (ix2 : (2 ^ n - 1 - Z.to_nat i) - Pos.to_nat p < 2 ^ n) by lia.\n  rewrite (right_shift_const_by_correct _ ix2).\n  elim Nat.ltb_spec; intros Hp.\n  + rewrite toZ_mod.\n    rewrite two_power_nat_equiv, Z.mod_pow2_bits_high;[reflexivity|].\n    rewrite bitSize_Word, two_power_nat_equiv, <- (Nat2Z.inj_pow 2). lia.\n  + rewrite nth_Word.\n    f_equal.\n    rewrite <- (Nat2Z.inj_pow 2).\n    lia.\n- replace i with (Z.of_nat (2 ^  n - 1 - (2 ^ n - 1 - Z.to_nat i))) at 1 by lia.\n  rewrite Nat2Z.inj_sub, (Nat2Z.inj_sub _ 1), Nat2Z.inj_pow by lia.\n  rewrite <- (nth_Word _ ix).\n  rewrite left_shift_const_by_correct.\n  elim lt_dec; intros Hp.\n  + rewrite nth_Word.\n    f_equal.\n    rewrite <- (Nat2Z.inj_pow 2).\n    lia.\n  + rewrite Z.testbit_neg_r;[reflexivity|].\n    lia.\nQed.\n\nLemma left_rotate1_correct {X n v} :\n  @flatten X n (|[ left_rotate1 ]| v) = Vector.tl (Vector.shiftin (pow_hd (flatten v)) (flatten v)).\nProof.\nunfold left_rotate1.\netransitivity;[cbn|reflexivity].\nchange (flatten (snd _)) with (snd (map_snd flatten (|[full_left_shift1]| (v, |[leftmost]| v)))).\nrewrite full_left_shift1_correct, leftmost_correct.\nreflexivity.\nQed.\n\nLemma right_rotate1_correct {X n v} :\n  @flatten X n (|[ right_rotate1 ]| v) = Vector.shiftout (pow_last (flatten v) :: (flatten v)).\nProof.\nunfold right_rotate1.\netransitivity;[cbn|reflexivity].\nchange (flatten (fst _)) with (fst (map_fst flatten (|[full_right_shift1]| (|[rightmost]| v, v)))).\nrewrite full_right_shift1_correct, rightmost_correct.\nreflexivity.\nQed.\n\nLemma foldr_comp_correct {X} l v : |[foldr_comp l]| v = fold_right (@comp X X X CoreFunSem) |[iden]| l v.\nProof.\nrevert v.\ninduction l;[reflexivity|].\ndestruct l as [|b l];[reflexivity|].\n- intros v. \n  change (foldr_comp (a :: b :: l) v) with (foldr_comp (b :: l) (a v)).\n  apply IHl.\nQed.\n\nLemma rotate_const_correct {X n i j} z (v : Vector X n) (ix : i < 2^n) (jx : j < 2^n) :\n  eqm (2^Z.of_nat n) (Z.of_nat j) (Z.of_nat i + z) ->\n  Vector.nth_order (flatten (|[rotate_const z]| v)) ix = Vector.nth_order (flatten v) jx.\nProof.\nrewrite <- (Nat2Z.inj_pow 2).\nunfold rotate_const.\nrewrite foldr_comp_correct.\nintros Hij.\ngeneralize jx.\nrewrite <-(Nat2Z.id j), <-(Z.mod_small (Z.of_nat j) (Z.of_nat (2^n))), Hij by lia.\nclear j jx Hij.\nintros jx.\nassert (ixmod : forall n a, Z.to_nat (a  mod Z.of_nat (2 ^ n)) < 2 ^ n).\n1:{\n  clear.\n  intros n a.\n  assert (Hmod := Z.mod_pos_bound a (Z.of_nat (2^n))).\n  rewrite pow_succ in Hmod at 1.\n  lia.\n}\ntransitivity (Vector.nth_order (flatten v) (ixmod _ (Z.of_nat i + z)))%Z;[|apply Vector.nth_order_ext].\nclear jx.\nrevert X i z v ix.\ninduction n;\n[intros X [|i] z;simpl;[generalize (ixmod 0 z);simpl;rewrite Z.mod_1_r;intros;apply Vector.nth_order_ext|lia] |].\nintros X i z v ix.\nassert (Hcast : forall (l : list (Arrow (Vector (X*X) n) (Vector (X*X) n))) w,\n  fold_right comp iden (eq_rect _ (fun x : Ty => list (Arrow x x)) l _ (eq_sym VectorPromote)) w =\n  eq_rect _ tySem (fold_right comp iden l (eq_rect _ tySem w _ VectorPromote)) _ (eq_sym VectorPromote)).\n1:{\n  generalize (@VectorPromote X n).\n  intros <-.\n  reflexivity.\n}\nassert (ix_half : Nat.div2 i < 2^n).\n1:{\n  rewrite Nat.div2_div.\n  apply Nat.Div0.div_lt_upper_bound.\n  rewrite <- Nat.pow_succ_r'.\n  assumption.\n}\nassert (Heven : forall a, Nat.even a = Z.even (Z.of_nat a)).\n1:{\n  clear.\n  intros a.\n  induction a as [a IH] using lt_wf_ind.\n  destruct a as [| [|a]]; try reflexivity.\n  simpl (Nat.even _).\n  rewrite IH;[|lia].\n  symmetry.\n  etransitivity;[|apply Z.even_succ_succ].\n  f_equal.\n  lia.\n}\ngeneralize (ixmod (S n) (Z.of_nat i + z)%Z).\nchange (2^S n) with (2 * 2^n)%nat.\nrewrite Nat2Z.inj_mul.\nchange (Z.of_nat 2) with 2%Z.\nintros jx.\nsimpl (rotate_const_list z).\ncase_eq (Z.even z);[|case_eq (Z.even (z/2))].\n- rewrite Z.even_spec.\n  intros [z' ->].\n  replace (2 * z' / 2)%Z with z' by (rewrite Z.mul_comm, Z_div_mult by lia;reflexivity).\n  rewrite Hcast, (nth_order_flatten_if _ _ ix_half).\n  rewrite (IHn _ _ _ _ ix_half).\n  generalize (ixmod n (Z.of_nat (Nat.div2 i) + z')%Z).\n  set (j := Z.to_nat\n       ((Z.of_nat i + 2 * z') mod (2 * Z.of_nat (2 ^ n)))) in *.\n  replace (Z.to_nat ((Z.of_nat (Nat.div2 i) + z') mod Z.of_nat (2 ^ n))) \n     with (Nat.div2 j).\n  2:{\n    symmetry.\n    rewrite !Nat.div2_div, Nat2Z.inj_div, <- Z_div_plus, <-Zaux.Zdiv_mod_mult, Z.mul_comm by lia.\n    rewrite Z2Nat.inj_div by (assert (Hmod := Z.mod_pos_bound (Z.of_nat i + Z.of_nat 2 * z') (Z.of_nat 2 * Z.of_nat (2 ^ n)));lia). \n    reflexivity.\n  }\n  intros jx_half.\n  replace (Nat.even i) with (Nat.even j);\n  [rewrite <-(nth_order_flatten_if _ jx jx_half), <-eq_trans_rew_distr, eq_trans_sym_inv_r;\n   apply Vector.nth_order_ext|].\n  rewrite !Heven.\n  symmetry.\n  apply Bool.eqb_true_iff.\n  rewrite <- Z.even_sub.\n  symmetry.\n  change ((Z.even 2 || Z.even z') = Z.even (Z.of_nat i - Z.of_nat j))%bool.\n  apply Bool.eqb_true_iff.\n  rewrite <- Z.even_mul, <- Z.even_add, Zeven_mod.\n  apply Zeq_is_eq_bool.\n  replace (_ + _)%Z with ((Z.of_nat i + 2 * z') - Z.of_nat j)%Z by lia.\n  apply Z.mod_divide;[lia|].\n  etransitivity;[apply (Z.divide_factor_l 2 (Z.of_nat (2^n)))|].\n  apply Z.mod_divide;[lia|].\n  unfold j.\n  rewrite Z2Nat.id by (assert (Hmod := Z.mod_pos_bound (Z.of_nat i + 2 * z') (2 * Z.of_nat (2^n)));lia).\n  rewrite Zminus_mod_idemp_r, Z.sub_diag.\n  reflexivity.\n- rewrite Z.even_spec, <-Z.negb_odd, Bool.negb_false_iff, Z.odd_spec.\n  intros Hz' [z' ->].\n  replace ((2 * z' + 1) / 2)%Z with z' in * by (rewrite Z.mul_comm, Z.div_add_l, Z.add_0_r by lia;reflexivity).\n  destruct Hz' as [z ->].\n  set (l := eq_rect _ _ _ _ _).\n  change (fold_right comp H (_ :: l) v) with (fold_right comp H l (|[left_rotate1]| v)).\n  rewrite Hcast, (nth_order_flatten_if _ _ ix_half), (IHn _ _ _ _ ix_half); clear l.\n  generalize (ixmod n (Z.of_nat (Nat.div2 i) + 2 * z)%Z).  \n  rewrite Nat.div2_div, Nat2Z.inj_div, <- Z_div_plus, <-Zaux.Zdiv_mod_mult, Z.mul_comm by lia.\n  change (Z.of_nat 2) with 2%Z.\n  set (k:= (Z.of_nat i + 2 * (2 * z))%Z).\n  assert (Hmod := Z.mod_pos_bound k (2 * Z.of_nat (2^n))).\n  rewrite Z2Nat.inj_div by lia.\n  rewrite <-Nat.div2_div.\n  revert jx.\n  rewrite Z.add_assoc.\n  set (j := Z.to_nat (k mod (2 * Z.of_nat (2 ^ n)))).\n  intros jx jx_half.\n  assert (jx' : j < 2 ^ (S n)) by (cbn;lia).\n  replace (Nat.even i) with (Nat.even j).\n  * rewrite <-(nth_order_flatten_if _ jx'), <-eq_trans_rew_distr, eq_trans_sym_inv_r;\n    simpl (eq_rect _ _ _ _ eq_refl).\n    rewrite left_rotate1_correct.\n    assert (jx'S : S j < S (2^S n)) by lia.\n    rewrite (VectorSpec.nth_order_tl _ _ _ _ _ jx'S).\n    elim (lt_dec (S j) (2 ^ S n)).\n    + intros jx'S'.\n      rewrite <- (nth_order_shiftout _ jx'S'), shiftout_shiftin.\n      revert jx.\n      fold k.\n      rewrite <- Zplus_mod_idemp_l, Z.mod_small;\n      [rewrite Z2Nat.inj_succ;[apply Vector.nth_order_ext|lia] |].\n      unfold j in jx'S'.\n      rewrite <- Z2Nat.inj_succ in jx'S' by lia.\n      change (2^S n) with (2 * 2^n)%nat in *.\n      lia.\n    + intros Hj.\n      revert jx'S.\n      replace (S j) with (2 ^ S n) by lia.\n      intros jx'S.\n      rewrite Vector.nth_order_last, Vector.shiftin_last.\n      revert jx.\n      rewrite <-Zplus_mod_idemp_l, <-(Z2Nat.id (k mod (2 * Z.of_nat (2 ^ n)))) by lia.\n      fold (Z.succ (Z.of_nat (Z.to_nat (k mod (2 * Z.of_nat (2 ^ n)))))) j.\n      rewrite <- Nat2Z.inj_succ.\n      replace (S j) with (2 ^ S n) by lia.\n      change (2^S n) with (2 * 2^n)%nat.\n      rewrite Nat2Z.inj_mul, Z_mod_same_full.\n      change (2 * 2^n)%nat with (2^S n).\n      generalize (flatten v).\n      unfold pow_hd.\n      generalize (pow_succ (S n));intros -> w wx.\n      symmetry.\n      apply Vector.nth_order_hd.\n  * rewrite !Heven, !Zeven_mod.\n    change 2%Z with (2^1)%Z.\n    unfold j.\n    rewrite Z2Nat.id, Nat2Z.inj_pow, <- Z.pow_succ_r, <- !Z.land_ones, <- Z.land_assoc by lia.\n    rewrite Z.land_ones, Z.ones_mod_pow2, !Z.land_ones, <-!Zeven_mod by lia.\n    unfold k.\n    rewrite Z.even_add, Z.even_mul.\n    change (_ || _)%bool with (Z.even 0).\n    rewrite <-Z.even_add.\n    f_equal.\n    lia.\n- rewrite <-!Z.negb_odd, !Bool.negb_false_iff, !Z.odd_spec.\n  intros Hz' [z' ->].\n  replace ((2 * z' + 1) / 2)%Z with z' in * by (rewrite Z.mul_comm, Z.div_add_l, Z.add_0_r by lia;reflexivity).\n  destruct Hz' as [z ->].\n  replace (2 * (2 * z + 1) + 1 + 1)%Z with ((2*(z + 1))*2)%Z by lia.\n  rewrite Z_div_mult by lia.\n  set (l := eq_rect _ _ _ _ _).\n  change (fold_right comp H (_ :: l) v) with (fold_right comp H l (|[right_rotate1]| v)).\n  rewrite Hcast, (nth_order_flatten_if _ _ ix_half), (IHn _ _ _ _ ix_half); clear l.\n  generalize (ixmod n (Z.of_nat (Nat.div2 i) + 2 * (z + 1))%Z).  \n  rewrite Nat.div2_div, Nat2Z.inj_div, <- Z_div_plus, <-Zaux.Zdiv_mod_mult, Z.mul_comm by lia.\n  change (Z.of_nat 2) with 2%Z.\n  set (k:= (Z.of_nat i + 2 * (2 * (z + 1)))%Z).\n  assert (Hmod := Z.mod_pos_bound k (2 * Z.of_nat (2^n))).\n  rewrite Z2Nat.inj_div by lia.\n  rewrite <-Nat.div2_div.\n  revert jx.\n  replace (Z.of_nat i + (2 * (2 * z + 1) + 1))%Z with (k - 1)%Z by lia.\n  set (j := Z.to_nat (k mod (2 * Z.of_nat (2 ^ n)))).\n  intros jx jx_half.\n  assert (jx' : j < 2 ^ (S n)) by (cbn;lia).\n  replace (Nat.even i) with (Nat.even j).\n  * rewrite <-(nth_order_flatten_if _ jx'), <-eq_trans_rew_distr, eq_trans_sym_inv_r;\n    simpl (eq_rect _ _ _ _ eq_refl).\n    rewrite right_rotate1_correct.\n    assert (jx'S : j < S (2^S n)) by lia.\n    rewrite (nth_order_shiftout _ _ jx'S).\n    elim (Nat.eq_dec j 0).\n    + intros Hj.\n      revert jx'S.\n      rewrite Hj.\n      intros jx'S.\n      rewrite Vector.nth_order_hd.\n      revert jx.\n      rewrite <-Zplus_mod_idemp_l, <-(Z2Nat.id (k mod (2 * Z.of_nat (2 ^ n)))) by lia.\n      fold j.\n      rewrite Hj.\n      simpl (Z.of_nat 0).\n      rewrite <- (Z_mod_same_full (2 * Z.of_nat (2 ^ n))), Zplus_mod_idemp_l, Z.mod_small by lia.\n      replace (_ * _)%Z with (Z.of_nat (2 * 2 ^ n)) by lia.\n      change (2 * 2^n)%nat with (2^S n).\n      generalize (flatten v).\n      unfold pow_last.\n      generalize (pow_succ (S n));intros -> w.\n      replace (Z.to_nat _) with (Init.Nat.pred (2 ^ S n)) by lia.\n      intros wx.\n      symmetry.\n      apply Vector.nth_order_last.\n    + intros Hj.\n      revert jx'S.\n      replace j with (S (pred j)) by lia.\n      intros jx'S.\n      symmetry.\n      change (flatten v) with (Vector.tl (pow_last (flatten v) :: flatten v)) at 1.\n      revert jx.\n      rewrite <-Zplus_mod_idemp_l, <-(Z2Nat.id (k mod (2 * Z.of_nat (2 ^ n)))) by lia.\n      fold j.\n      replace (Z.of_nat j + - (1))%Z with (Z.of_nat (pred j)) by lia.\n      rewrite Z.mod_small, Nat2Z.id by lia.\n      change (2 * 2^n)%nat with (2^S n).\n      intros jx.\n      apply Vector.nth_order_tl.\n  * rewrite !Heven, !Zeven_mod.\n    change 2%Z with (2^1)%Z.\n    unfold j.\n    rewrite Z2Nat.id, Nat2Z.inj_pow, <- Z.pow_succ_r, <- !Z.land_ones, <- Z.land_assoc by lia.\n    rewrite Z.land_ones, Z.ones_mod_pow2, !Z.land_ones, <-!Zeven_mod by lia.\n    unfold k.\n    rewrite Z.even_add, Z.even_mul.\n    change (_ || _)%bool with (Z.even 0).\n    rewrite <-Z.even_add.\n    f_equal.\n    lia.\nQed.\n\nLemma rotate_const_correct_word n z (x : Word n) i (Hi : (0 <= i < two_power_nat n)%Z) :\n  Z.testbit (toZ (|[rotate_const (-z)]| x : tySem (Word n))) i = Z.testbit (toZ x) (Z.modulo (i + z) (two_power_nat n))%Z.\nProof.\nassert (Htwo : forall n, two_power_nat n = Z.of_nat (2 ^ n)).\n1:{\n  intros.\n  rewrite two_power_nat_equiv, <- (Nat2Z.inj_pow 2).\n  reflexivity.\n}\nrewrite Htwo in *.\nset (i0 := Z.to_nat (Z.of_nat (2^n) - 1 - i)).\nassert (ix : i0 < 2^n) by lia.\nreplace i with (Z.of_nat (2 ^ n) - 1 - Z.of_nat i0)%Z at 1 by lia.\nrewrite Nat2Z.inj_pow by lia.\nrewrite <- (nth_Word _ ix).\nset (j0 := Z.to_nat ((Z.of_nat (2^n) - 1 - i - z) mod (2^Z.of_nat n))).\ndestruct (Z.mod_pos_bound (Z.of_nat (2 ^ n) - 1 - i - z) (2 ^ Z.of_nat n)) as [Hj0 Hj1];[lia|].\nassert (jx : j0 < 2^n).\n1:{\n  rewrite <- (Nat2Z.id (2^n)).\n  rewrite Nat2Z.inj_pow by lia.\n  apply Z2Nat.inj_lt;lia.\n}\nrewrite (rotate_const_correct _ _ _ jx).\n2:{\n  unfold eqm, i0, j0.\n  rewrite !Z2Nat.id, Zmod_mod by lia.\n  reflexivity.\n}\nrewrite nth_Word.\nf_equal.\nrewrite <-(Z.mod_small (2 ^ Z.of_nat n - 1 - Z.of_nat j0)%Z (2 ^ Z.of_nat n)) by lia.\nunfold j0.\nrewrite Z2Nat.id, Nat2Z.inj_pow, Zminus_mod_idemp_r by lia.\nf_equal.\nlia.\nQed.\n\nEnd Specifications.\n\nLemma zero_Parametric {n} {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) : R _ (Word n) zero zero.\nProof.\ninduction n; cbn; auto with parametricity.\nQed.\n#[export] Hint Immediate zero_Parametric : parametricity.\n\nLemma adderBit_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) : R _ _ adderBit adderBit.\nProof.\nunfold adderBit.\nauto with parametricity.\nQed.\n#[export] Hint Immediate adderBit_Parametric : parametricity.\n\nLemma fullAdderBit_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) : R _ _ fullAdderBit fullAdderBit.\nProof.\nunfold fullAdderBit.\nauto 10 with parametricity.\nQed.\n#[export] Hint Immediate fullAdderBit_Parametric : parametricity.\n\nLemma buildFullAdder_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {W} t1 t2 : R _ (Bit * W) t1 t2 -> R _ _ (buildFullAdder t1) (buildFullAdder t2).\nProof.\nunfold buildFullAdder.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve buildFullAdder_Parametric : parametricity.\n\nLemma fullAdder_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {n} : R _ _ fullAdder (@fullAdder n _).\nProof.\ninduction n; cbn; auto with parametricity.\nQed.\n#[export] Hint Immediate fullAdder_Parametric : parametricity.\n\nLemma adder_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {n} : R _ _ adder (@adder n _).\nProof.\ninduction n; cbn; auto with parametricity.\nQed.\n#[export] Hint Immediate adder_Parametric : parametricity.\n\nLemma fullMultiplierBit_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) : R _ _ fullMultiplierBit fullMultiplierBit.\nProof.\nunfold fullMultiplierBit.\nauto with parametricity.\nQed.\n#[export] Hint Immediate fullMultiplierBit_Parametric : parametricity.\n\nLemma buildFullMultiplier_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {W} t1 t2 : R _ (W * W) t1 t2 -> R _ _ (buildFullMultiplier t1) (buildFullMultiplier t2).\nProof.\nunfold buildFullMultiplier.\nauto 15 with parametricity.\nQed.\n#[export] Hint Resolve buildFullMultiplier_Parametric : parametricity.\n\nLemma fullMultiplier_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {n} : R _ (Word n * Word n) fullMultiplier (@fullMultiplier n _).\nProof.\ninduction n; cbn; auto with parametricity.\nQed.\n#[export] Hint Immediate fullMultiplier_Parametric : parametricity.\n\nLemma multiplier_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {n} : R _ _ multiplier (@multiplier n _).\nProof.\nunfold multiplier.\ncbn; auto with parametricity.\nQed.\n#[export] Hint Immediate multiplier_Parametric : parametricity.\n\nLemma build_fill_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {C X} t1 t2 : R C X t1 t2 -> R _ _ (build_fill t1) (build_fill t2).\nProof.\nunfold build_fill.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve build_fill_Parametric : parametricity.\n\nLemma fill_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {C X n} op1 op2 : R _ _ op1 op2 -> R _ _ (fill op1) (@fill C X n _ op2).\nProof.\ninduction n; simpl; auto with parametricity.\nQed.\n#[export] Hint Resolve fill_Parametric : parametricity.\n\nLemma buildBitwiseTri_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {W} t1 t2 : R _ W t1 t2 -> R _ _ (buildBitwiseTri t1) (buildBitwiseTri t2).\nProof.\nunfold buildBitwiseTri.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve buildBitwiseTri_Parametric : parametricity.\n\nLemma bitwiseTri_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} op1 op2 : R _ _ op1 op2 -> R _ _ (bitwiseTri op1) (@bitwiseTri X n _ op2).\nProof.\ninduction n; simpl; auto with parametricity.\nQed.\n#[export] Hint Resolve bitwiseTri_Parametric : parametricity.\n\nLemma build_leftmost_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {V X} t1 t2 : R V X t1 t2 -> R _ _ (build_leftmost t1) (build_leftmost t2).\nProof.\nunfold build_leftmost.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve build_leftmost_Parametric : parametricity.\n\nLemma leftmost_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} : R _ _ leftmost (@leftmost X n term2).\nProof.\ninduction n; simpl; auto with parametricity.\nQed.\n#[export] Hint Resolve leftmost_Parametric : parametricity.\n\nLemma build_rightmost_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {V X} t1 t2 : R V X t1 t2 -> R _ _ (build_rightmost t1) (build_rightmost t2).\nProof.\nunfold build_rightmost.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve build_rightmost_Parametric : parametricity.\n\nLemma rightmost_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} : R _ _ rightmost (@rightmost X n term2).\nProof.\ninduction n; simpl; auto with parametricity.\nQed.\n#[export] Hint Resolve rightmost_Parametric : parametricity.\n\nLemma build_full_left_shift1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X W} t1 t2 : R (W * X) (X * W) t1 t2 -> R _ _ (build_full_left_shift1 t1) (build_full_left_shift1 t2).\nProof.\nunfold build_full_left_shift1.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve build_full_left_shift1_Parametric : parametricity.\n\nLemma full_left_shift1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} : R _ _ full_left_shift1 (@full_left_shift1 X n term2).\nProof.\ninduction n; simpl; auto with parametricity.\nQed.\n#[export] Hint Resolve full_left_shift1_Parametric : parametricity.\n\nLemma build_full_right_shift1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X W} t1 t2 : R (W * X) (X * W) t1 t2 -> R _ _ (build_full_right_shift1 t1) (build_full_right_shift1 t2).\nProof.\nunfold build_full_right_shift1.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve build_full_right_shift1_Parametric : parametricity.\n\nLemma full_right_shift1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} : R _ _ full_right_shift1 (@full_right_shift1 X n term2).\nProof.\ninduction n; simpl; auto with parametricity.\nQed.\n#[export] Hint Resolve full_right_shift1_Parametric : parametricity.\n\nLemma left_shift1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} t1 t2 : R _ _ t1 t2 -> R _ _ (left_shift1 t1) (@left_shift1 X n term2 t2).\nProof.\nunfold left_shift1.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve left_shift1_Parametric : parametricity.\n\nLemma left_shift_const_by_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} t1 t2 p : R _ _ t1 t2 -> R _ _ (left_shift_const_by t1 p) (@left_shift_const_by X n term2 t2 p).\nProof.\nrevert X t1 t2 p.\ninduction n; intros X t1 t2 p Ht; simpl; destruct (_ <=? _)%Z; auto with parametricity.\nchange (Vector X n * Vector X n) with (Vector X (S n)).\ndestruct p;\ntry apply comp_Parametric;auto 10 with parametricity;\ndestruct (@eq_sym Ty (Vector X (S n)) (Vector (X * X) n) (@VectorPromote X n));\napply IHn;auto 10 with parametricity.\nQed.\n#[export] Hint Resolve left_shift_const_by_Parametric : parametricity.\n\nLemma right_shift1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} t1 t2 : R _ _ t1 t2 -> R _ _ (right_shift1 t1) (@right_shift1 X n term2 t2).\nProof.\nunfold right_shift1.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve right_shift1_Parametric : parametricity.\n\nLemma right_shift_const_by_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} t1 t2 p : R _ _ t1 t2 -> R _ _ (right_shift_const_by t1 p) (@right_shift_const_by X n term2 t2 p).\nProof.\nrevert X t1 t2 p.\ninduction n; intros X t1 t2 p Ht; simpl; destruct (_ <=? _)%Z; auto with parametricity.\nchange (Vector X n * Vector X n) with (Vector X (S n)).\ndestruct p;\ntry apply comp_Parametric;auto 10 with parametricity;\ndestruct (@eq_sym Ty (Vector X (S n)) (Vector (X * X) n) (@VectorPromote X n));\napply IHn;auto 10 with parametricity.\nQed.\n#[export] Hint Resolve right_shift_const_by_Parametric : parametricity.\n\nLemma shift_const_by_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} t1 t2 z : R _ _ t1 t2 -> R _ _ (shift_const_by t1 z) (@shift_const_by X n term2 t2 z).\nProof.\ndestruct z;simpl;auto 10 with parametricity.\nQed.\n#[export] Hint Resolve shift_const_by_Parametric : parametricity.\n\nLemma shift_const_Parametric {n} z {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R (Word n) (Word n) (shift_const z) (shift_const z).\nProof.\nunfold shift_const.\napply shift_const_by_Parametric.\nauto 10 with parametricity.\nQed.\n#[export] Hint Immediate shift_const_Parametric : parametricity.\n\nLemma left_rotate1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} : R _ _ left_rotate1 (@left_rotate1 X n term2).\nProof.\nunfold left_rotate1.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve left_rotate1_Parametric : parametricity.\n\nLemma right_rotate1_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} : R _ _ right_rotate1 (@right_rotate1 X n term2).\nProof.\nunfold right_rotate1.\nauto 10 with parametricity.\nQed.\n#[export] Hint Resolve right_rotate1_Parametric : parametricity.\n\nLemma rotate_const_list_length {term1 term2 : Core.Algebra}\n  {X n} z : length (@rotate_const_list X n term1 z) = length (@rotate_const_list X n term2 z).\nProof.\nrevert X z.\ninduction n; intros X z; simpl.\n- reflexivity.\n- repeat destruct (Z.even _);simpl;change (Vector X n * Vector X n) with (Vector X (S n));\n  destruct (@eq_sym Ty (Vector X (S n)) (Vector (X * X) n) (@VectorPromote X n)); simpl;\n  firstorder.\nQed.\n\nLemma rotate_const_list_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X n} z i : R _ _ (nth i (@rotate_const_list X n term1 z) iden) (nth i (@rotate_const_list X n term2 z) iden).\nProof.\nrevert X z i.\ninduction n; intros X z i; simpl.\n- destruct i; auto with parametricity.\n- repeat destruct (Z.even _);[|destruct i|destruct i];simpl;change (Vector X n * Vector X n) with (Vector X (S n));auto 10 with parametricity;\n  destruct (@eq_sym Ty (Vector X (S n)) (Vector (X * X) n) (@VectorPromote X n));apply IHn.\nQed.\n\nLemma foldr_comp_Parametric {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2)\n  {X} l1 l2 : length l1 = length l2 -> (forall i, R X X (nth i l1 iden) (nth i l2 iden)) -> R _ _ (foldr_comp l1) (foldr_comp l2).\nProof.\nrevert l2.\ninduction l1; intros [|x l2]; simpl; try discriminate.\n- auto with parametricity.\n- intros H.\n  inversion H.\n  intros H0.\n  assert (H00 := H0 0).\n  destruct l1; destruct l2; try discriminate.\n  + assumption.\n  + apply comp_Parametric;[assumption|].\n    apply IHl1;[assumption|].\n    intros i.\n    apply (H0 (S i)).\nQed.\n\nLemma rotate_const_Parametric {n} z {term1 term2 : Core.Algebra} (R : Core.Parametric.Rel term1 term2) :\n  R (Word n) (Word n) (rotate_const z) (rotate_const z).\nProof.\nunfold rotate_const.\napply foldr_comp_Parametric.\n- apply rotate_const_list_length.\n- apply rotate_const_list_Parametric.\nQed.\n#[export] Hint Immediate rotate_const_Parametric : parametricity.\n"
  },
  {
    "path": "Coq/_CoqProject",
    "content": "-Q Simplicity Simplicity\n-R C C\nSimplicity/StaticAnalysis.v\nSimplicity/MerkleRoot.v\nSimplicity/Core.v\nSimplicity/Digest.v\nSimplicity/BitMachine.v\nSimplicity/Alg.v\nSimplicity/Word.v\nSimplicity/Primitive.v\nSimplicity/Ty.v\nSimplicity/SHA256.v\nSimplicity/Bit.v\nSimplicity/Primitive/Bitcoin.v\nSimplicity/Translate.v\nSimplicity/Delegation.v\nSimplicity/Util/Monad.v\nSimplicity/Util/Thrist.v\nSimplicity/Util/List.v\nSimplicity/Util/Option.v\nSimplicity/Util/Arith.v\nSimplicity/Util/Monad/Reader.v\nSimplicity/Util/PackedClass.v\nC/jets_secp256k1.v\nC/extraMath.v\nC/progressC.v\nC/modinv.v\nC/divstep.v\nC/secp256k1/spec_int128.v\nC/secp256k1/spec_modinv64.v\nC/secp256k1/verif_int128_impl.v\nC/secp256k1/verif_modinv64_impl.v\n"
  },
  {
    "path": "Haskell/Bitcoin/Simplicity/Bitcoin/DataTypes.hs",
    "content": "-- | This module defines the data structures that make up the signed data in a Bitcoin transaction.\nmodule Simplicity.Bitcoin.DataTypes\n  ( Script, Lock, Value\n  , Outpoint(Outpoint), opHash, opIndex, putOutpointBE\n  , SigTxInput(SigTxInput), sigTxiPreviousOutpoint, sigTxiTxo, sigTxiSequence, sigTxiAnnex, sigTxiScriptSig, sigTxiValue, sigTxiScript\n  , TxOutput(TxOutput), txoValue, txoScript\n  , SigTx(SigTx), sigTxVersion, sigTxIn, sigTxOut, sigTxLock\n  , putNoWitnessTx, txid\n  , TapEnv(..)\n  , txTotalInputValue, txTotalOutputValue, txFee\n  , txIsFinal, txiLockDistance, txiLockDuration\n  , outputValuesHash, outputScriptsHash\n  , outputsHash, outputHash\n  , inputOutpointsHash, inputValuesHash, inputScriptsHash, inputUtxosHash\n  , inputSequencesHash, inputAnnexesHash, inputScriptSigsHash, inputsHash, inputHash\n  , txHash\n  , tapleafHash, tappathHash, tapEnvHash\n  , taptweak\n  , module Simplicity.Bitcoin\n  ) where\n\nimport Control.Monad (guard)\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.Semigroup (Max(Max,getMax), Sum(Sum,getSum))\nimport Data.Word (Word64, Word32, Word16, Word8)\nimport Data.Serialize ( Serialize\n                      , Get, get, getWord8, getWord16le, getWord32le, getWord64le, getLazyByteString\n                      , Putter, put, putWord8, putWord16le, putWord32be, putWord32le, putWord64be, putWord64le, putLazyByteString, runPutLazy\n                      )\nimport Data.String (fromString)\nimport Data.Vector (Vector)\nimport qualified Data.Vector as V\n\nimport Simplicity.Bitcoin\nimport Simplicity.Digest\nimport Simplicity.LibSecp256k1.Spec\nimport Simplicity.LibSecp256k1.Schnorr\n\n{-\ngetVarInteger :: Get Word64\ngetVarInteger = go =<< getWord8\n where\n  go 0xff = getWord64le\n  go 0xfe = fromIntegral `fmap` getWord32le\n  go 0xfd = fromIntegral `fmap` getWord16le\n  go x = return (fromIntegral x)\n\nputVarInteger :: Word64 -> Put\nputVarInteger x | x < 0xfd = putWord8 (fromIntegral x)\n                | x <= 0xffff = putWord8 0xfd >> putWord16le (fromIntegral x)\n                | x <= 0xffffffff = putWord8 0xfe >> putWord32le (fromIntegral x)\n                | otherwise = putWord8 0xff >> putWord64le (fromIntegral x)\n\ngetVarByteString :: Get BSL.ByteString\ngetVarByteString = do l <- getVarInteger\n                      let l' = fromIntegral l :: Word32 -- length must be strictly less than 2^32.\n                                                        -- This is how Bitcoin Core reads bytestrings.\n                      getLazyByteString (fromIntegral l')\n  where\n\nputVarByteString :: BSL.ByteString -> Put\nputVarByteString s | len < 2^32 = putVarInteger len >> putLazyByteString s\n where\n  len :: Word64\n  len = BSL.foldlChunks (\\a c -> a + fromIntegral (BS.length c)) 0 s\n-}\n\n-- | Unparsed Bitcoin Script.\n-- Script in transactions outputs do not have to be parsable, so we encode this as a raw 'Data.ByteString.ByteString'.\ntype Script = BSL.ByteString\n\n-- | Transaction locktime.\n-- This represents either a block height or a block time.\n-- It is encoded as a 32-bit value.\ntype Lock = Word32\n\n-- | A type for Bitcoin amounts measured in units of satoshi.\ntype Value = Word64 -- bitcoin uses an Int64, but it doesn't really matter.\n\nmoneyRange :: Value -> Bool\nmoneyRange v = v <= 21000000 * 10^8\n\ngetValue :: Get Value\ngetValue = do\n  v <- getWord64le\n  guard $ moneyRange v\n  return v\n\n-- | An outpoint is an index into the TXO set.\ndata Outpoint = Outpoint { opHash :: Hash256\n                         , opIndex :: Word32\n                         } deriving Show\n\ninstance Serialize Outpoint where\n  get = Outpoint <$> get <*> getWord32le\n  put (Outpoint h i) = put h >> putWord32le i\n\n-- | Big endian serialization of an 'Outpoint'\nputOutpointBE :: Putter Outpoint\nputOutpointBE op = put (opHash op)\n                >> putWord32be (opIndex op)\n\n-- | The data type for signed transaction inputs.\n-- Note that signed transaction inputs for BIP 143 include the value of the input, which doesn't appear in the serialized transaction input format.\ndata SigTxInput = SigTxInput { sigTxiPreviousOutpoint :: Outpoint\n                             , sigTxiTxo :: TxOutput\n                             , sigTxiSequence :: Word32\n                             , sigTxiAnnex :: Maybe BSL.ByteString\n                             , sigTxiScriptSig :: Script -- length must be strictly less than 2^32.\n                             } deriving Show\n\n-- | The value of the input being spent.\nsigTxiValue :: SigTxInput -> Value\nsigTxiValue = txoValue . sigTxiTxo\n\n-- | The value of the input being spent.\nsigTxiScript :: SigTxInput -> Script\nsigTxiScript = txoScript . sigTxiTxo\n\n{-\ninstance Serialize SigTxInput where\n  get = SigTxInput <$> get <*> getValue <*> getWord32le\n  put (SigTxInput p v sq) = put p >> putWord64le v >> putWord32le sq\n-}\n\n-- | The data type for transaction outputs.\n-- The signed transactin output format is identical to the serialized transaction output format.\ndata TxOutput = TxOutput { txoValue :: Value\n                         , txoScript :: Script -- length must be strictly less than 2^32.\n                         } deriving Show\n\n{-\ninstance Serialize TxOutput where\n  get = TxOutput <$> getValue <*> getVarByteString\n  put (TxOutput v s) = putWord64le v >> putVarByteString s\n-}\n\n-- | The data type for transactions in the context of signatures.\n-- The data signed in a BIP 143 directly covers input values.\ndata SigTx = SigTx { sigTxVersion :: Word32\n                   , sigTxIn :: Vector SigTxInput\n                   , sigTxOut :: Vector TxOutput\n                   , sigTxLock :: Lock\n                   } deriving Show\n\n{-\ninstance Serialize Tx where\n  get = Tx <$> getWord32le <*> getList <*> getList <*> get\n  put (Tx v is os t) = putWord32le v >> putList is >> putList os >> put t\n-}\n\n-- | Taproot specific environment data about the input being spent.\ndata TapEnv = TapEnv { tapleafVersion :: Word8\n                     , tapInternalKey :: PubKey\n                     , tappath :: [Hash256]\n                     , tapScriptCMR :: Hash256\n                     } deriving Show\n\ntxTotalInputValue :: SigTx -> Value\ntxTotalInputValue tx = getSum . foldMap (Sum . sigTxiValue) $ sigTxIn tx\n\ntxTotalOutputValue :: SigTx -> Value\ntxTotalOutputValue tx = getSum . foldMap (Sum . txoValue) $ sigTxOut tx\n\ntxFee :: SigTx -> Value\ntxFee tx = txTotalInputValue tx - txTotalOutputValue tx\n\ntxIsFinal :: SigTx -> Bool\ntxIsFinal tx = all finalSequence (sigTxIn tx)\n where\n  finalSequence sigin = sigTxiSequence sigin == maxBound\n\ntxiLockDistance :: SigTxInput -> Word16\ntxiLockDistance sigin =\n  case parseSequence (sigTxiSequence sigin) of\n    Just (Left x) -> x\n    _ -> 0\n\ntxiLockDuration :: SigTxInput -> Word16\ntxiLockDuration sigin =\n  case parseSequence (sigTxiSequence sigin) of\n    Just (Right x) -> x\n    _ -> 0\n\n-- | A hash of all 'txoValues's.\noutputValuesHash :: SigTx -> Hash256\noutputValuesHash tx = bslHash . runPutLazy $ mapM_ (putWord64be . txoValue) (sigTxOut tx)\n\n-- | A hash of all 'txoScript' hashes.\noutputScriptsHash :: SigTx -> Hash256\noutputScriptsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . txoScript) (sigTxOut tx)\n\n-- | A hash of\n--\n-- * 'outputValuesHash'\n-- * 'outputScriptsHash'\noutputsHash :: SigTx -> Hash256\noutputsHash tx = bslHash . runPutLazy $ do\n                   put $ outputValuesHash tx\n                   put $ outputScriptsHash tx\n\n-- | A hash of one output's\n--\n-- * value\n-- * hash of its script\noutputHash :: TxOutput -> Hash256\noutputHash txo = bslHash . runPutLazy $ do\n                   putWord64be $ txoValue txo\n                   put . bslHash $ txoScript txo\n\n-- | Serialize an input's previous output including whether the previous input is from an pegin or not, and which parent chain if it is a pegin.\nputOutpoint :: Putter SigTxInput\nputOutpoint txi = putOutpointBE (sigTxiPreviousOutpoint txi)\n\n-- | A hash of all 'sigTxiPreviousOutpoint's.\ninputOutpointsHash :: SigTx -> Hash256\ninputOutpointsHash tx = bslHash . runPutLazy $ mapM_ putOutpoint (sigTxIn tx)\n\n-- | A hash of all 'utxoValue's.\ninputValuesHash :: SigTx -> Hash256\ninputValuesHash tx = bslHash . runPutLazy $ mapM_ (putWord64be . sigTxiValue) (sigTxIn tx)\n\n-- | A hash of all 'utxoScript' hashes.\ninputScriptsHash :: SigTx -> Hash256\ninputScriptsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . sigTxiScript) (sigTxIn tx)\n\n-- | A hash of\n--\n-- * 'inputValuesHash'\n-- * 'inputScriptsHash'\ninputUtxosHash :: SigTx -> Hash256\ninputUtxosHash tx = bslHash . runPutLazy $ do\n                      put $ inputValuesHash tx\n                      put $ inputScriptsHash tx\n\n-- | A hash of all 'sigTxiSequence's.\ninputSequencesHash :: SigTx -> Hash256\ninputSequencesHash tx = bslHash . runPutLazy $ mapM_ (putWord32be . sigTxiSequence) (sigTxIn tx)\n\nputAnnex :: Putter (Maybe BSL.ByteString)\nputAnnex Nothing = putWord8 0x00\nputAnnex (Just annex) = putWord8 0x01 >> put (bslHash annex)\n\n-- | A hash of all 'sigTxiAnnex' hashes.\ninputAnnexesHash :: SigTx -> Hash256\ninputAnnexesHash tx = bslHash . runPutLazy $ mapM_ (putAnnex . sigTxiAnnex) (sigTxIn tx)\n\n-- | A hash of all 'sigTxiScriptSig' hashes.\ninputScriptSigsHash :: SigTx -> Hash256\ninputScriptSigsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . sigTxiScriptSig) (sigTxIn tx)\n\n-- | A hash of\n--\n-- * 'inputOutpointsHash'\n-- * 'inputSequencesHash'\n-- * 'inputAnnexesHash'\n--\n-- Note that 'inputScriptSigsHash' is excluded.\ninputsHash :: SigTx -> Hash256\ninputsHash tx = bslHash . runPutLazy $ do\n                  put $ inputOutpointsHash tx\n                  put $ inputSequencesHash tx\n                  put $ inputAnnexesHash tx\n\n-- | A hash of\n--\n-- * The inputs's outpoint (including if and where the pegin came from)\n-- * The inputs's sequence number\n-- * Whether or not the input has an annex and the hash of that annex.\ninputHash :: SigTxInput -> Hash256\ninputHash txi = bslHash . runPutLazy $ do\n                  putOutpoint txi\n                  putWord32be $ sigTxiSequence txi\n                  putAnnex $ sigTxiAnnex txi\n\n-- | A hash of\n--\n-- * 'sigTxVersion'\n-- * 'sigTxLock'\n-- * 'inputsHash'\n-- * 'outputsHash'\n-- * 'inputUtxosHash'\ntxHash :: SigTx -> Hash256\ntxHash tx = bslHash . runPutLazy $ do\n              putWord32be $ sigTxVersion tx\n              putWord32be $ sigTxLock tx\n              put $ inputsHash tx\n              put $ outputsHash tx\n              put $ inputUtxosHash tx\n\n-- | Serialize transaction data without witness data.\n-- Mainly suitable for computing a 'txid'.\nputNoWitnessTx :: Putter SigTx\nputNoWitnessTx tx = do\n  putWord32le $ sigTxVersion tx\n  putVarInt (V.length (sigTxIn tx))\n  mapM_ putInput (sigTxIn tx)\n  putVarInt (V.length (sigTxOut tx))\n  mapM_ putOutput (sigTxOut tx)\n  putWord32le $ sigTxLock tx\n where\n  putVarInt x | x < 0 = error \"putVarInt: negative value\"\n              | x <= 0xFC = putWord8 (fromIntegral x)\n              | x <= 0xFFFF = putWord8 0xFD >> putWord16le (fromIntegral x)\n              | x <= 0xFFFFFFFF = putWord8 0xFE >> putWord32le (fromIntegral x)\n              | x <= 0xFFFFFFFFFFFFFFFF = putWord8 0xFF >> putWord64le (fromIntegral x)\n  putInput txi = do\n    put (opHash (sigTxiPreviousOutpoint txi))\n    putWord32le (opIndex (sigTxiPreviousOutpoint txi))\n    putVarInt (BSL.length (sigTxiScriptSig txi))\n    putLazyByteString (sigTxiScriptSig txi)\n    putWord32le (sigTxiSequence txi)\n\n  putOutput txo = do\n    putWord64le (txoValue txo)\n    putVarInt (BSL.length (txoScript txo))\n    putLazyByteString (txoScript txo)\n\n-- | Return the txid of the transaction.\ntxid :: SigTx -> Hash256\ntxid = bslDoubleHash . runPutLazy . putNoWitnessTx\n\n-- | A hash of\n--\n-- * 'tapleafVersion'\n-- * 'tapScriptCMR'\ntapleafHash :: TapEnv -> Hash256\ntapleafHash tapEnv = bslHash . runPutLazy $ do\n  put tag\n  put tag\n  putWord8 $ tapleafVersion tapEnv\n  putWord8 32\n  put $ tapScriptCMR tapEnv\n where\n  tag = bsHash (fromString \"TapLeaf\")\n\n-- | A hash of 'tappath's.\ntappathHash :: TapEnv -> Hash256\ntappathHash tapEnv = bslHash . runPutLazy $ mapM_ put (tappath tapEnv)\n\n-- | A hash of\n--\n-- * 'tapleafHash'\n-- * 'tappathHash'\n-- * 'tapInternalKey'\ntapEnvHash :: TapEnv -> Hash256\ntapEnvHash tapEnv = bslHash . runPutLazy $ do\n              put $ tapleafHash tapEnv\n              put $ tappathHash tapEnv\n              put $ tapInternalKey tapEnv\n\n-- | Implementation of BIP-0341's taptweak function.\ntaptweak :: PubKey -> Hash256 -> Maybe PubKey\ntaptweak (PubKey internalKey) h = do\n  guard $ toInteger internalKey < fieldOrder\n  guard $ h0 < groupOrder\n  a <- scale (scalar h0) g\n  b <- decompress (Point False xkey)\n  GE x y <- gej_normalize . snd $ gej_ge_add_ex a b\n  return $ PubKey (fe_pack x)\n where\n  xkey = fe (toInteger internalKey)\n  h0 = integerHash256 . bslHash . runPutLazy $ do\n    put tag\n    put tag\n    put (fe_pack xkey)\n    put h\n  tag = bsHash (fromString \"TapTweak\")\n"
  },
  {
    "path": "Haskell/Bitcoin/Simplicity/Bitcoin/Primitive.hs",
    "content": "{-# LANGUAGE GADTs, ScopedTypeVariables #-}\n-- | This module provides the Simplicity primitives specific for Bitcoin or Bitcoin-like applications.\nmodule Simplicity.Bitcoin.Primitive\n  ( Prim(..), primPrefix, primName\n  , PrimEnv(..), primEnv, primEnvHash\n  , primSem\n  -- * Re-exported Types\n  , PubKey\n  ) where\n\nimport qualified Data.List as List\nimport Data.Maybe (listToMaybe)\nimport Data.Serialize (Get, getWord8,\n                       Putter, put, putWord8, putWord32be, putWord32le, putWord64le, runPutLazy)\nimport qualified Data.Word\nimport Data.Vector as Vector ((!?), length)\n\nimport Simplicity.Digest\nimport Simplicity.Bitcoin.DataTypes\nimport qualified Simplicity.LibSecp256k1.Schnorr as Schnorr\nimport Simplicity.Programs.LibSecp256k1\nimport Simplicity.Serialization\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\ndata Prim a b where\n  Version :: Prim () Word32\n  LockTime :: Prim () Word32\n  CurrentIndex :: Prim () Word32\n  InputPrevOutpoint :: Prim Word32 (S (Word256,Word32))\n  InputValue :: Prim Word32 (S Word64)\n  InputScriptHash :: Prim Word32 (S Word256)\n  InputSequence :: Prim Word32 (S Word32)\n  InputAnnexHash :: Prim Word32 (S (S Word256))\n  InputScriptSigHash :: Prim Word32 (S Word256)\n  OutputValue :: Prim Word32 (S Word64)\n  OutputScriptHash :: Prim Word32 (S Word256)\n  TapleafVersion :: Prim () Word8\n  Tappath :: Prim Word8 (S Word256)\n  InternalKey :: Prim () PubKey\n  ScriptCMR :: Prim () Word256\n  TransactionId :: Prim () Word256\n\ninstance Eq (Prim a b) where\n  Version == Version = True\n  LockTime == LockTime = True\n  CurrentIndex == CurrentIndex = True\n  InputPrevOutpoint == InputPrevOutpoint = True\n  InputValue == InputValue = True\n  InputScriptHash == InputScriptHash = True\n  InputSequence == InputSequence = True\n  InputAnnexHash == InputAnnexHash = True\n  InputScriptSigHash == InputScriptSigHash = True\n  OutputValue == OutputValue = True\n  OutputScriptHash == OutputScriptHash = True\n  TapleafVersion == TapleafVersion = True\n  Tappath == Tappath = True\n  InternalKey == InternalKey = True\n  ScriptCMR == ScriptCMR = True\n  TransactionId == TransactionId = True\n  _ == _ = False\n\nprimPrefix :: String\nprimPrefix = \"Bitcoin\"\n\n-- Consider deriving Show instead?\nprimName :: Prim a b -> String\nprimName Version = \"version\"\nprimName LockTime = \"lockTime\"\nprimName CurrentIndex = \"currentIndex\"\nprimName InputPrevOutpoint = \"inputPrevOutpoint\"\nprimName InputValue = \"inputValue\"\nprimName InputScriptHash = \"inputScriptHash\"\nprimName InputSequence = \"inputSequence\"\nprimName InputAnnexHash = \"inputAnnexHash\"\nprimName InputScriptSigHash = \"inputScriptSigHash\"\nprimName OutputValue = \"outputValue\"\nprimName OutputScriptHash = \"outputScriptHash\"\nprimName TapleafVersion = \"tapleafVersion\"\nprimName Tappath = \"tappath\"\nprimName InternalKey = \"internalKey\"\nprimName ScriptCMR = \"scriptCMR\"\nprimName TransactionId = \"transactionId\"\n\ndata PrimEnv = PrimEnv { envTx :: SigTx\n                       , envIx :: Data.Word.Word32\n                       , envTap :: TapEnv\n                       }\n\ninstance Show PrimEnv where\n  showsPrec d env = showParen (d > 10)\n                  $ showString \"primEnv \"\n                  . showsPrec 11 (envTx env)\n                  . showString \" \"\n                  . showsPrec 11 (envIx env)\n                  . showString \" \"\n                  . showsPrec 11 (envTap env)\n\nprimEnv :: SigTx -> Data.Word.Word32 -> TapEnv -> Maybe PrimEnv\nprimEnv tx ix tap | cond = Just $ PrimEnv { envTx = tx\n                                          , envIx = ix\n                                          , envTap = tap\n                                          }\n                  | otherwise = Nothing\n where\n  cond = fromIntegral ix < Vector.length (sigTxIn tx)\n\n-- | A hash of\n--\n-- * 'txHash'\n-- * 'tapEnvHash'\n-- * 'envIx'\n--\n-- Note: this is the hash used for the \"sig-all\" hash.\nprimEnvHash :: PrimEnv -> Hash256\nprimEnvHash env = bslHash . runPutLazy $ do\n                    put $ txHash (envTx env)\n                    put $ tapEnvHash (envTap env)\n                    putWord32be $ envIx env\n\nprimSem :: Prim a b -> a -> PrimEnv -> Maybe b\nprimSem p a env = interpret p a\n where\n  tx = envTx env\n  ix = envIx env\n  lookupInput = (sigTxIn tx !?) . fromIntegral\n  lookupOutput = (sigTxOut tx !?) . fromIntegral\n  currentInput = lookupInput ix\n  maxInput = fromIntegral $ Vector.length (sigTxIn tx) - 1\n  maxOutput = fromIntegral $ Vector.length (sigTxOut tx) - 1\n  cast :: Maybe a -> Either () a\n  cast (Just x) = Right x\n  cast Nothing = Left ()\n  element :: a -> () -> a\n  element = const\n  atInput :: (SigTxInput -> a) -> Word32 -> Either () a\n  atInput f = cast . fmap f . lookupInput . fromInteger . fromWord32\n  atOutput :: (TxOutput -> a) -> Word32 -> Either () a\n  atOutput f = cast . fmap f . lookupOutput . fromInteger . fromWord32\n  encodeHash = toWord256 . integerHash256\n  encodeOutpoint op = (toWord256 . integerHash256 $ opHash op, toWord32 . fromIntegral $ opIndex op)\n  encodeKey (Schnorr.PubKey x) = toWord256 . toInteger $ x\n  interpret Version = element . return . toWord32 . toInteger $ sigTxVersion tx\n  interpret LockTime = element . return . toWord32 . toInteger $ sigTxLock tx\n  interpret CurrentIndex = element . return . toWord32 . toInteger $ ix\n  interpret InputPrevOutpoint = return . (atInput $ encodeOutpoint . sigTxiPreviousOutpoint)\n  interpret InputValue = return . (atInput $ toWord64 . toInteger . sigTxiValue)\n  interpret InputScriptHash = return . (atInput $ encodeHash . bslHash . sigTxiScript)\n  interpret InputSequence = return . (atInput $ toWord32 . toInteger . sigTxiSequence)\n  interpret InputAnnexHash = return . (atInput $ cast . fmap (encodeHash . bslHash) . sigTxiAnnex)\n  interpret InputScriptSigHash = return . (atInput $ encodeHash . bslHash . sigTxiScriptSig)\n  interpret OutputValue = return . (atOutput $ toWord64 . fromIntegral . txoValue)\n  interpret OutputScriptHash = return . (atOutput $ encodeHash . bslHash . txoScript)\n  interpret TapleafVersion = element . return . toWord8 . toInteger . tapleafVersion $ envTap env\n  interpret Tappath = return . cast . fmap encodeHash . listToMaybe . flip drop (tappath (envTap env)) . fromInteger . fromWord8\n  interpret InternalKey = element . return . encodeKey . tapInternalKey $ envTap env\n  interpret ScriptCMR = element . return . toWord256 . integerHash256 . tapScriptCMR $ envTap env\n  interpret TransactionId = element . return . encodeHash . txid $ tx\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine/Authentic.hs",
    "content": "{-# LANGUAGE FlexibleContexts #-}\n-- | This modules implements the Bit Machine according to its specification.\n--\n-- This @Authentic@ module properly tracks undefined values in the Bit Machine's cells and will properly crash when, for example, reading from undefined cells.\n-- Other non-authentic implementations of the Bit Machine might invoke undefined behaviour when the Bit Machine crashes.\nmodule Simplicity.BitMachine.Authentic\n ( runMachine\n , Stats(..)\n , instrumentMachine\n ) where\n\nimport Control.Monad ((>=>), guard, unless)\nimport Control.Monad.Fail (MonadFail)\nimport Control.Monad.Writer (MonadWriter, tell)\nimport Data.Functor.Fixedpoint (cata)\nimport Data.Monoid (Endo(..))\nimport Data.Vector ((//), (!?))\nimport qualified Data.Vector as V\nimport qualified Data.Vector.Mutable as VM\nimport Lens.Family2 ((^.), to)\n\nimport Simplicity.BitMachine (Cell, MachineCodeF(..), MachineCode, Interpreter)\n\n-- For the Bit Machine a frame is an array of Cell's and a cursor pointing at a position within the array.\ndata Frame = Frame { fData :: !(V.Vector Cell)\n                   , fOffset :: !Int\n                   }\n\n-- Create a frame from a list of cells with the cursor initialized to the start of the frame.\nfInit cells = Frame (V.fromList cells) 0\n\n-- Create an empty frame of a given size with the cursor initialized to the start of the frame.\nfNew n | 0 <= n = Frame (V.replicate n Nothing) 0\n\n-- Reset a frame by moving the cursor from the end of the frame to the beginning of the frame.\n-- This function fails if the input frame doesn't have its cursor at the end of the frame.\nfReset fm = unless (fOffset fm == length (fData fm)) (fail \"fReset: offset not at end of frame\")\n         >> return (fm {fOffset = 0})\n\n-- Return the value of the cell under the frame's cursor.\n-- This function fails if the cursor is at the end of the frame.\nfRead fr = maybe (fail \"fRead: offset out of range\") return (fData fr !? fOffset fr)\n\n-- Return an array of 'n' cells starting from the frame's cursor.\n-- The function fails if there are not enough cells in the frame.\nfSlice n = to go\n where\n  go (Frame dt os) | os + n <= V.length dt = return $ V.slice os n dt\n                   | otherwise = fail \"fSlice: slice too large\"\n\n-- Write a Cell to a frame at the frame's cursor and advance the frame's cursor by 1.\n-- This function fails if the cursor is at the end of the frame.\nfWrite v (Frame dt os) | os < V.length dt = return $ Frame dt' os'\n                       | otherwise = fail \"fWrite: data too large\"\n where\n  dt' = dt // [(os, v)]\n  os' = os+1\n\n-- Write a vector of Cells to a frame starting at the frame's cursor and advance the frame's cursor by the length of the written data.\n-- This function fails if there isn't sufficient room in the frame to write the data.\nfFill v (Frame dt os) | os + n <= V.length dt = return $ Frame dt' os'\n where\n  n = V.length v\n  dt' = V.modify go dt\n   where\n    go mv = V.copy (VM.slice os n mv) v\n  os' = os + n\n\n-- Move a frame's cursor by 'n' cells.\n-- If 'n' is positive the cursor moves forward and if 'n' negative the cursor moves backward.\n-- This function fails if the cursors would end up past the end of the frame or past the beginning of the frame.\nfMove n (Frame dt os) | 0 <= os' && os' <= length dt = return $ Frame dt os'\n                      | otherwise = fail \"fMove: index out of range\"\n where\n  os' = os+n\n\n-- Returns the number of cells in the frame.\nfSize (Frame dt _) = V.length dt\n\n-- The active frames are the frames at the top of the read frame stack and the write frame stack.\ndata Active = Active { activeReadFrame :: !Frame\n                     , activeWriteFrame :: !Frame\n                     }\n\n-- Two lenses that access the active read and write frames.\nrf f x = (\\y -> x { activeReadFrame = y }) <$> f (activeReadFrame x)\nwf f x = (\\y -> x { activeWriteFrame = y }) <$> f (activeWriteFrame x)\n\n-- The state of the Bit Machine consists of the inactive read and write frames, and the active frames.\ndata State = State { inactiveReadFrames :: [Frame]\n                   , activeFrames :: !Active\n                   , inactiveWriteFrames :: [Frame]\n                   }\n-- A lens that accesses the active frames of a state.\nact f x = (\\y -> x { activeFrames = y }) <$> f (activeFrames x)\n\n-- A state transformation that turns one state into another with possible side effects (such as crashing).\n-- MachineCode instructions are interpreted as these State transformations.\ntype StateTrans m = State -> m State\n\n-- Below are functions used in 'runMachineF' to implement the instructions for the Bit Machine.\nabort :: MonadFail m => StateTrans m\nabort _ = fail \"explicit abort\"\n\ncopy :: MonadFail m => Int -> StateTrans m\ncopy n st = do\n  v <- st^.act.rf.fSlice n\n  (act.wf) (fFill v) st\n\nnewFrame :: MonadFail m => Int -> StateTrans m\nnewFrame n (State irf (Active rf wf) iwf) = do\n  unless (0 <= n) (fail \"newFrame: negative size\")\n  return $ State irf (Active rf (fNew n)) (wf:iwf)\n\nmoveFrame :: MonadFail m => StateTrans m\nmoveFrame (State irf (Active rf wf) (iwf0:iwf)) = do\n  nrf <- fReset wf\n  return $ State (rf:irf) (Active nrf iwf0) iwf\nmoveFrame _ = fail \"moveFrame: empty write frame stack\"\n\ndropFrame (State (irf0:irf) (Active _ wf) iwf) =\n  return $ State irf (Active irf0 wf) iwf\ndropFrame _ = fail \"dropFrame: empty read frame stack\"\n\n-- 'runMachineF' is a MachineCode algebra that implements the bit machine.\n-- 'runMachine' calls this algebra to recursively evaluate 'MachineCode'. \nrunMachineF :: MonadFail m => MachineCodeF (StateTrans m) -> StateTrans m\nrunMachineF End = return\nrunMachineF Abort = abort\nrunMachineF (Write b k) = (act.wf) (fWrite (Just b)) >=> k\nrunMachineF (Copy n k) | 0 <= n = copy n >=> k\n                       | otherwise = \\_ -> fail \"runMachineF Copy: negative index\"\nrunMachineF (Skip n k) | 0 <= n = (act.wf) (fMove n) >=> k\n                       | otherwise = \\_ -> fail \"runMachineF Skip: negative index\"\nrunMachineF (Fwd n k) | 0 <= n = (act.rf) (fMove n) >=> k\n                      | otherwise = \\_ -> fail \"runMachineF Fwd: negative index\"\nrunMachineF (Bwd n k) | 0 <= n = (act.rf) (fMove (-n)) >=> k\n                      | otherwise = \\_ -> fail \"runMachineF Bwd: negative index\"\nrunMachineF (NewFrame n k) = newFrame n >=> k\nrunMachineF (MoveFrame k) = moveFrame >=> k\nrunMachineF (DropFrame k) = dropFrame >=> k\nrunMachineF (Read k0 k1) = \\st -> do\n  v <- fRead (st^.act.rf)\n  b <- maybe (fail \"runMachine Read: cell value undefined\") return v\n  if b then k1 st else k0 st\n\n-- Create an initial state from the initial data for the read frame and the size of the write frame.\ninitialState :: [Cell] -> Int -> State\ninitialState input outLength = State [] (Active (fInit input) (fNew outLength)) []\n\n-- Extract the write frame's data which contains the output of the Bit Machine.\nfinalState :: MonadFail m => State -> m [Cell]\nfinalState (State [] (Active _ output) []) = return $ V.toList (fData output)\nfinalState _ = fail \"finalState: invalid final state\"\n\n-- | The implementation of the authentic Bit Machine.\n--\n-- Given 'MachineCode', creates an 'Interpreter'.\n-- The 'Interpreter' expects an initial state specified by the data for the initial read frame and the size of the initial write frame.\n-- The 'Interpreter' returns the final data on the write frame.\nrunMachine :: MonadFail m => MachineCode -> Interpreter m\nrunMachine code input outputSize = cata runMachineF code (initialState input outputSize)\n                               >>= finalState\n\n-- These functions are used to instrument the Bit Machine and calculate the computations resources used during execution.\nactReadFrameSize :: State -> Int\nactReadFrameSize st = fSize (st^.act.rf)\n\nactWriteFrameSize :: State -> Int\nactWriteFrameSize st = fSize (st^.act.wf)\n\ninactReadFrameSizes :: State -> [Int]\ninactReadFrameSizes st = fSize <$> inactiveReadFrames st\n\ninactWriteFrameSizes :: State -> [Int]\ninactWriteFrameSizes st = fSize <$> inactiveWriteFrames st\n\n-- | A collection of statistics about computation resources used during execution of the Bit Machine.\ndata Stats = Stats { memSize :: !Int   -- ^ Maximum total number of 'Cell's occurring during execution\n                   , stackSize :: !Int -- ^ Maximum total number of frames occurring during execution\n                   } deriving Show\n\ninstance Semigroup Stats where\n  a <> b = Stats { memSize = max (memSize a) (memSize b)\n                 , stackSize = max (stackSize a) (stackSize b)\n                 }\n\n-- The monoid instance for statistics combine intermediate execution profiles of the Bit Machine's state.\ninstance Monoid Stats where\n  mempty = Stats { memSize = 0\n                 , stackSize = 0\n                 }\n  mappend = (<>)\n\n-- This function computes the memory statistics of a snapshot of the Bit Machine's state.\nprofile :: State -> Stats\nprofile st = Stats { memSize = sum readStackStats + sum writeStackStats + actReadFrameSize st + actWriteFrameSize st\n                   , stackSize = length readStackStats + length writeStackStats\n                   }\n where\n  readStackStats = inactReadFrameSizes st\n  writeStackStats = inactWriteFrameSizes st\n\n-- A state transformation that doesn't transform the state but results in a side effect that emits the statistics of the current state.\ninstrument st = tell [profile st] >> return st\n\n-- | An instrumented version of the authentic Bit Machine.\n--\n-- 'intrumentMachine' behaves as 'runMachine' but also profiles the execution returning 'Stats' about computation resources used during execution.\ninstrumentMachine :: (MonadWriter [Stats] m, MonadFail m) => MachineCode -> Interpreter m\ninstrumentMachine code input outputSize = interpreter (initialState input outputSize)\n                                      >>= finalState\n where\n  -- add an instrumentation step at the beginning of the runMachineF algebra.\n  instrumentMachineF f = instrument >=> runMachineF f\n  -- run the modified algebra and add a final instrumentation step to the result.\n  interpreter = cata instrumentMachineF code >=> instrument\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine/StaticAnalysis/Cost.hs",
    "content": "{-# LANGUAGE GADTs #-}\nmodule Simplicity.BitMachine.StaticAnalysis.Cost\n  ( TermWeight(..)\n  , overhead\n  , milliWeigh\n-- * Reexports\n  , Weight\n  ) where\n\nimport Simplicity.BitMachine.Ty\nimport Simplicity.Term.Core\nimport Simplicity.Weight\n\n-- | The CPU weight of a Simplicity expression.\n--\n-- Note that serializing an expression could generalize the types of expressions and sub-expressions, lowering the weight.\nnewtype TermWeight a b = TermWeight { weigh :: Weight }\n\n-- | Cost of a term in milli weight units\nmilliWeigh :: TermWeight a b -> Integer\nmilliWeigh = milliWeight . weigh\n\ninstance Core TermWeight where\n  iden = result\n    where\n     result = TermWeight $ overhead + milli (bitSizeR (reifyProxy result))\n  comp s0@(TermWeight s) (TermWeight t) = TermWeight $ overhead + milli (bitSizeR (reifyProxy s0)) + s + t\n  unit = TermWeight overhead\n  injl (TermWeight s) = TermWeight $ overhead + s\n  injr (TermWeight s) = TermWeight $ overhead + s\n  match (TermWeight s) (TermWeight t) = TermWeight $ overhead + max s t\n  pair (TermWeight s) (TermWeight t) = TermWeight $ overhead + s + t\n  take (TermWeight s) = TermWeight $ overhead + s\n  drop (TermWeight s) = TermWeight $ overhead + s\n\ninstance Assert TermWeight where\n  assertl s _ = match s (TermWeight 0)\n  assertr _ t = match (TermWeight 0) t\n  fail _ = TermWeight 0\n\ninstance Witness TermWeight where\n  witness _ = result\n   where\n    result = TermWeight $ overhead + milli (bitSizeR (reifyProxy result))\n\ninstance Delegate TermWeight where\n  disconnect s0@(TermWeight s) t0@(TermWeight t) = TermWeight $ overhead + milli (2 * bitSizeR w256a + bitSizeR bc + bitSizeR b) + s + t\n   where\n    (w256a, bc@(ProdR b _c)) = reifyArrow s0\n\n-- :TODO: This overhead is just estimated.  It needs to be replaced with a measured value.\n-- :TODO: Perhaps fold this into a generic 'mkTermWeight' or 'withOverhead' constructor that adds in the overhead.\n-- | Helper value for creating 'TermWeight' instances.\noverhead :: Weight\noverhead = 0.1\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine/StaticAnalysis/TCO.hs",
    "content": "-- | This module has functions for computing static analysis of Bit Machine resources used during execution of tail call optimized translated Simplicity expressions.\nmodule Simplicity.BitMachine.StaticAnalysis.TCO\n ( ExtraCellsBnd, cellsBnd\n ) where\n\nimport Simplicity.BitMachine.Ty\nimport Simplicity.Delegator.Impl\nimport Simplicity.Term.Core\n\n-- | @'ExtraCellsBnd' a b@ is the data type for the Simplicity algebra used for computing the bound on the maximum number of Cells used by the Bit Machine.\ndata ExtraCellsBnd a b = ExtraCellsBnd Integer Integer\n\n-- @extraCellBnd r@ is the number of extra cells that will be allocated by the TCOon program when the active read frame as 'r' number of cells.\n-- The number of extra cells that will be allocated by TCOoff is (extraCellsBnd 0).\nextraCellsBnd r (ExtraCellsBnd n m) = max (n - r) m\n\ncellsBnd0 :: (TyC a, TyC b) => ExtraCellsBnd a b -> Integer\ncellsBnd0 t = bitSizeR a + bitSizeR b + extraCellsBnd 0 t\n where\n  (a,b) = reifyArrow t\n\n-- | @'cellsBnd' t@ computes an upper bound on the maximum number of Cells used by the Bit Machine, including the cells used to hold the input and output, when executing TCO translated Simplicity expressions.\n--\n-- Simplicity terms are represented in tagless-final style, so any Simplicity term can be instantiated as @'ExtraCellsBnd' a b@ and can be passed to the 'cellsBnd' function.\ncellsBnd :: (TyC a, TyC b) => Delegator ExtraCellsBnd a b -> Integer\ncellsBnd = cellsBnd0 . runDelegator\n\n-- Below is the Simplicity algebra that is used for computing 'cellsBnd'\ninstance Core ExtraCellsBnd where\n  iden = ExtraCellsBnd 0 0\n  comp arrS@(ExtraCellsBnd sn sm) (ExtraCellsBnd tn tm) = ExtraCellsBnd (maximum [s + sn, tn, s + tm]) (s + sm)\n   where\n    s = bitSizeR b\n    b = reifyProxy arrS\n  unit = ExtraCellsBnd 0 0\n  injl (ExtraCellsBnd tn tm) = ExtraCellsBnd tn tm\n  injr (ExtraCellsBnd tn tm) = ExtraCellsBnd tn tm\n  match (ExtraCellsBnd sn sm) (ExtraCellsBnd tn tm) = ExtraCellsBnd (max sn tn) (max sm tm)\n  pair (ExtraCellsBnd sn sm) (ExtraCellsBnd tn tm) = ExtraCellsBnd tn (maximum [sn, sm, tm])\n  take (ExtraCellsBnd tn tm) = ExtraCellsBnd tn tm\n  drop (ExtraCellsBnd tn tm) = ExtraCellsBnd tn tm\n\ninstance Assert ExtraCellsBnd where\n  assertl (ExtraCellsBnd sn sm) _ = ExtraCellsBnd sn sm\n  assertr _ (ExtraCellsBnd tn tm) = ExtraCellsBnd tn tm\n  fail _ = ExtraCellsBnd 0 0\n\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine/StaticAnalysis.hs",
    "content": "-- | This module has functions for computing static analysis of Bit Machine resources used during execution of naive translated Simplicity expressions.\nmodule Simplicity.BitMachine.StaticAnalysis\n ( ExtraCellsBnd, cellsBnd\n ) where\n\nimport Simplicity.BitMachine.Ty\nimport Simplicity.Delegator.Impl\nimport Simplicity.Term.Core\n\n-- | @'ExtraCellsBnd' a b@ is the data type for the Simplicity algebra used for computing the bound on the maximum number of Cells used by the Bit Machine.\nnewtype ExtraCellsBnd a b = ExtraCellsBnd { extraCellsBnd :: Integer }\n\ncellsBnd0 :: (TyC a, TyC b) => ExtraCellsBnd a b -> Integer\ncellsBnd0 t = bitSizeR a + bitSizeR b + extraCellsBnd t\n where\n  (a,b) = reifyArrow t\n\n-- | @'cellsBnd' t@ computes an upper bound on the maximum number of Cells used by the Bit Machine, including the cells used to hold the input and output,  when executing naive translated Simplicity expressions.\n--\n-- Simplicity terms are represented in tagless-final style, so any Simplicity term can be instantiated as @'ExtraCellsBnd' a b@ and can be passed to the 'cellsBnd' function.\ncellsBnd :: (TyC a, TyC b) => Delegator ExtraCellsBnd a b -> Integer\ncellsBnd = cellsBnd0 . runDelegator\n\n-- Below is the Simplicity algebra that is used for computing 'cellsBnd'\ninstance Core ExtraCellsBnd where\n  iden = ExtraCellsBnd 0\n  comp arrS@(ExtraCellsBnd s) (ExtraCellsBnd t) = ExtraCellsBnd (bitSizeR b + max s t)\n   where\n    b = reifyProxy arrS\n  unit = ExtraCellsBnd 0\n  injl (ExtraCellsBnd t) = ExtraCellsBnd t\n  injr (ExtraCellsBnd t) = ExtraCellsBnd t\n  match (ExtraCellsBnd s) (ExtraCellsBnd t) = ExtraCellsBnd (max s t)\n  pair (ExtraCellsBnd s) (ExtraCellsBnd t) = ExtraCellsBnd (max s t)\n  take (ExtraCellsBnd t) = ExtraCellsBnd t\n  drop (ExtraCellsBnd t) = ExtraCellsBnd t\n\ninstance Assert ExtraCellsBnd where\n  assertl (ExtraCellsBnd s) _ = ExtraCellsBnd s\n  assertr _ (ExtraCellsBnd t) = ExtraCellsBnd t\n  fail _ = ExtraCellsBnd 0\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine/Translate/TCO.hs",
    "content": "-- | This module implements tail call optimized translation of Simplicity terms to Bit Machine 'MachineCode'.\nmodule Simplicity.BitMachine.Translate.TCO\n ( Translation, translate\n ) where\n\nimport Data.Proxy (Proxy(..))\n\nimport Simplicity.BitMachine\nimport Simplicity.BitMachine.Ty\nimport Simplicity.Delegator.Impl\nimport Simplicity.Term.Core\n\n-- | @'Translation' a b@ is the data type for the Simplicity algebra used for translating terms to 'MachineCode'\ndata Translation a b = Translation { tcoOn :: MachineCodeK\n                                   , tcoOff :: MachineCodeK\n                                   }\n\ntranslate0 :: Translation a b -> MachineCode\ntranslate0 trans = tcoOff trans end\n\n-- | 'translate' converts a Simplicity term to the Bit Machine's 'MachineCode' with tail call optimization.\n--\n-- Simplicity terms are represented in tagless-final style, so any Simplicity term can be instantiated as @'Translation' a b@ and can be passed to the 'translate' function.\ntranslate :: Delegator Translation a b -> MachineCode\ntranslate = translate0 . runDelegator\n\n-- Below is the Simplicity algebra that implements TCO translation to 'MachineCodeK'.\n-- Every term has two translations, one with TCO-on and one with TOC-off.\n-- The two translations are mutually recursive, which is why the are computed together in this Simplicity algebra.\ninstance Core Translation where\n  iden = result\n   where\n    a = reifyProxy result\n    result = Translation\n           { tcoOn  = copy (bitSizeR a)\n                    . dropFrame\n           , tcoOff = copy (bitSizeR a)\n           }\n\n  comp s t = Translation\n    { tcoOn  = newFrame (bitSizeR b)\n             . tcoOn s\n             . moveFrame\n             . tcoOn t\n    , tcoOff = newFrame (bitSizeR b)\n             . tcoOff s\n             . moveFrame\n             . tcoOn t\n    }\n   where\n    b = reifyProxy s\n\n  unit = Translation\n       { tcoOn = dropFrame\n       , tcoOff = nop\n       }\n\n  injl t = result\n   where\n    proxyB :: arr a (Either b c) -> Proxy b\n    proxyB _ = Proxy\n    proxyC :: arr a (Either b c) -> Proxy c\n    proxyC _ = Proxy\n    pad = padLR (reifyProxy (proxyB result)) (reifyProxy (proxyC result))\n    result = Translation\n           { tcoOn  = write False\n                    . skip pad\n                    . tcoOn t\n           , tcoOff = write False\n                    . skip pad\n                    . tcoOff t\n           }\n\n\n  injr t = result\n   where\n    proxyB :: arr a (Either b c) -> Proxy b\n    proxyB _ = Proxy\n    proxyC :: arr a (Either b c) -> Proxy c\n    proxyC _ = Proxy\n    pad = padRR (reifyProxy (proxyB result)) (reifyProxy (proxyC result))\n    result = Translation\n           { tcoOn  = write True\n                    . skip pad\n                    . tcoOn t\n           , tcoOff = write True\n                    . skip pad\n                    . tcoOff t\n           }\n\n  match s t = result\n   where\n    result = Translation\n           { tcoOn  = (fwd padl . tcoOn s) ||| (fwd padr . tcoOn t)\n           , tcoOff = bump padl (tcoOff s) ||| bump padr (tcoOff t)\n           }\n    proxy :: arr (Either a b, c) d -> (Proxy a, Proxy b)\n    proxy _ = (Proxy, Proxy)\n    a = reifyProxy . fst $ proxy result\n    b = reifyProxy . snd $ proxy result\n    padl = 1 + padLR a b\n    padr = 1 + padRR a b\n\n  pair s t = Translation\n           { tcoOn  = tcoOff s\n                    . tcoOn t\n           , tcoOff = tcoOff s\n                    . tcoOff t\n           }\n\n  take t = Translation\n         { tcoOn  = tcoOn t\n         , tcoOff = tcoOff t\n         }\n\n  drop t = result\n   where\n    proxyA :: arr (a, b) c -> Proxy a\n    proxyA _ = Proxy\n    bs = bitSizeR (reifyProxy (proxyA result))\n    result = Translation\n           { tcoOn  = fwd bs\n                    . tcoOn t\n           , tcoOff = bump bs (tcoOff t)\n           }\n\ninstance Assert Translation where\n  assertl s _ = result\n   where\n    result = Translation\n           { tcoOn  = (fwd padl . tcoOn s) ||| abort\n           , tcoOff = bump padl (tcoOff s) ||| abort\n           }\n    proxy :: arr (Either a b, c) d -> (Proxy a, Proxy b)\n    proxy _ = (Proxy, Proxy)\n    a = reifyProxy . fst $ proxy result\n    b = reifyProxy . snd $ proxy result\n    padl = 1 + padLR a b\n\n  assertr _ t = result\n   where\n    result = Translation\n           { tcoOn  = abort ||| (fwd padr . tcoOn t)\n           , tcoOff = abort ||| bump padr (tcoOff t)\n           }\n    proxy :: arr (Either a b, c) d -> (Proxy a, Proxy b)\n    proxy _ = (Proxy, Proxy)\n    a = reifyProxy . fst $ proxy result\n    b = reifyProxy . snd $ proxy result\n    padr = 1 + padRR a b\n\n  fail _  = Translation { tcoOn = abort, tcoOff = abort }\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine/Translate.hs",
    "content": "-- | This module implements naive translation of Simplicity terms to Bit Machine 'MachineCode'.\nmodule Simplicity.BitMachine.Translate\n ( Translation, translate\n ) where\n\nimport Data.Proxy (Proxy(..))\n\nimport Simplicity.BitMachine\nimport Simplicity.BitMachine.Ty\nimport Simplicity.Delegator.Impl\nimport Simplicity.Term.Core\n\n-- | @'Translation' a b@ is the data type for the Simplicity algebra used for translating terms to 'MachineCode'\nnewtype Translation a b = Translation MachineCodeK\n\ntranslate0 :: Translation a b -> MachineCode\ntranslate0 (Translation f) = f end\n\n-- | 'translate' converts a Simplicity term to the Bit Machine's 'MachineCode'.\n--\n-- Simplicity terms are represented in tagless-final style, so any Simplicity term can be instantiated as @'Translation' a b@ and can be passed to the 'translate' function.\ntranslate :: Delegator Translation a b -> MachineCode\ntranslate = translate0 . runDelegator\n\n-- Below is the Simplicity algebra that implements naive translation to 'MachineCodeK'.\ninstance Core Translation where\n  iden = result\n   where\n    a = reifyProxy result\n    result = Translation\n           $ copy (bitSizeR a)\n\n  comp arrS@(Translation s) (Translation t) =\n    Translation\n    $ newFrame (bitSizeR b)\n    . s\n    . moveFrame\n    . t\n    . dropFrame\n   where\n    b = reifyProxy arrS\n\n  unit = Translation nop\n\n  injl (Translation t) = result\n   where\n    proxyB :: arr a (Either b c) -> Proxy b\n    proxyB _ = Proxy\n    proxyC :: arr a (Either b c) -> Proxy c\n    proxyC _ = Proxy\n    pad = padLR (reifyProxy (proxyB result)) (reifyProxy (proxyC result))\n    result = Translation\n           $ write False\n           . skip pad\n           . t\n\n  injr (Translation t) = result\n   where\n    proxyB :: arr a (Either b c) -> Proxy b\n    proxyB _ = Proxy\n    proxyC :: arr a (Either b c) -> Proxy c\n    proxyC _ = Proxy\n    pad = padRR (reifyProxy (proxyB result)) (reifyProxy (proxyC result))\n    result = Translation\n           $ write True\n           . skip pad\n           . t\n\n  match (Translation s) (Translation t) = result\n   where\n    result = Translation $ bump padl s ||| bump padr t\n    proxy :: arr (Either a b, c) d -> (Proxy a, Proxy b)\n    proxy _ = (Proxy, Proxy)\n    a = reifyProxy . fst $ proxy result\n    b = reifyProxy . snd $ proxy result\n    padl = 1 + padLR a b\n    padr = 1 + padRR a b\n\n  pair (Translation s) (Translation t) =\n   Translation $ s . t\n\n  take (Translation t) = Translation t\n\n  drop (Translation t) = result\n   where\n    proxyA :: arr (a, b) c -> Proxy a\n    proxyA _ = Proxy\n    bs = bitSizeR (reifyProxy (proxyA result))\n    result = Translation\n           $ bump bs t\n\ninstance Assert Translation where\n  assertl (Translation s) _ = result\n   where\n    result = Translation $ bump padl s ||| abort\n    proxy :: arr (Either a b, c) d -> (Proxy a, Proxy b)\n    proxy _ = (Proxy, Proxy)\n    a = reifyProxy . fst $ proxy result\n    b = reifyProxy . snd $ proxy result\n    padl = 1 + padLR a b\n\n  assertr _ (Translation t) = result\n   where\n    result = Translation $ abort ||| bump padr t\n    proxy :: arr (Either a b, c) d -> (Proxy a, Proxy b)\n    proxy _ = (Proxy, Proxy)\n    a = reifyProxy . fst $ proxy result\n    b = reifyProxy . snd $ proxy result\n    padr = 1 + padRR a b\n\n  fail _ = Translation $ abort\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine/Ty.hs",
    "content": "-- | This module has some functions operating on Simplicity types that are used for evaluating Simplicity on the Bit Machine.\nmodule Simplicity.BitMachine.Ty\n ( bitSize, padL, padR\n , padLR, padRR, bitSizeR\n ) where\n\nimport Data.Functor.Fixedpoint (cata)\n\nimport Simplicity.Ty\n\n-- | Compute the number of cells needed to represent values of a Simplicity type.\nbitSize :: Integral i => Ty -> i\nbitSize = fromInteger . bitSizeMemo\n\nbitSizeMemo :: Ty -> Integer\nbitSizeMemo = cata bitSizeF\n where\n  bitSizeF One = 0\n  bitSizeF (Sum a b) = 1 + max a b\n  bitSizeF (Prod a b) = a + b\n\n-- | Compute the number of cells needed to represent values of a Simplicity type.\n--\n-- @'bitsizeR' a = 'bitSize' ('unreflect' a)@\nbitSizeR :: Integral i => TyReflect a -> i\nbitSizeR = bitSize . unreflect\n\n-- | @'padL' a b@ is the number of cells of padding used for σ^L tagged values of the Simplicity type @'sum' a b@.\npadL :: Integral i => Ty -> Ty -> i\npadL a b = max bsa bsb - bsa\n where\n  bsa = bitSize a\n  bsb = bitSize b\n\n-- | @'padLR' a b@ is the number of cells of padding used for σ^L tagged values of the Simplicity type @'SumR' a b@.\n--\n-- @'padLR' a = 'padL' ('unreflect' a)@\npadLR :: Integral i => TyReflect a -> TyReflect b -> i\npadLR a b = padL (unreflect a) (unreflect b)\n\n-- | @'padR' a b@ is the number of cells of padding used for σ^R tagged values of the Simplicity type @'sum' a b@.\npadR :: Integral i => Ty -> Ty -> i\npadR a b = max bsa bsb - bsb\n where\n  bsa = bitSize a\n  bsb = bitSize b\n\n-- | @'padRR' a b@ is the number of cells of padding used for σ^R tagged values of the Simplicity type @'SumR' a b@.\n--\n-- @'padRR' a = 'padR' ('unreflect' a)@\npadRR :: Integral i => TyReflect a -> TyReflect b -> i\npadRR a b = padR (unreflect a) (unreflect b)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/BitMachine.hs",
    "content": "{-# LANGUAGE DeriveTraversable, GADTs #-}\n-- | This module defines encoding and decoding of values for the Bit Machine and the instructions for operating the Bit Machine.\nmodule Simplicity.BitMachine\n ( Cell\n , encode, decode\n , Interpreter, executeUsing\n -- * Bit Machine Code\n , MachineCode, MachineCodeF(..), MachineCodeK\n , end, abort, write, copy, skip, fwd, bwd, newFrame, moveFrame, dropFrame, (|||)\n , bump, nop\n ) where\n\nimport Control.Monad (unless)\nimport Control.Monad.Fail (MonadFail)\nimport Data.Functor.Fixedpoint (Fix(..), cata)\n\nimport Simplicity.Ty\nimport Simplicity.BitMachine.Ty\n\n-- | The type representing Cell's for the Bit Machine.\n--\n--    * @'Just' 'False'@ denotes a cell holding a @0@ value.\n--    * @'Just' 'True'@ denotes a cell holding a @1@ value.\n--    * 'Nothing' denotes a cell holding an unknown value @?@.\ntype Cell = Maybe Bool\n\nsafeSplitAt :: MonadFail m => Int -> [a] -> m ([a], [a])\nsafeSplitAt n l = do\n  unless (0 <= n && n <= length l) (fail \"safeSplitAt: index out of range\")\n  return (splitAt n l)\n\n-- | Encodes a value of a Simplicity type as a list of cells.\n--\n-- @'length' ('encode' a) = 'bitSizeR' ('reifyProxy' ('Data.Functor.Identity.Identity' a))@\nencode :: TyC a => a -> [Cell]\nencode x = encodeR reify x []\n where\n  encodeR :: TyReflect a -> a -> [Cell] -> [Cell]\n  encodeR OneR () = id\n  encodeR (SumR a b) (Left x) = ([Just False] ++) . (replicate (padLR a b) Nothing ++) . encodeR a x\n  encodeR (SumR a b) (Right y) = ([Just True] ++) . (replicate (padRR a b) Nothing ++) . encodeR b y\n  encodeR (ProdR a b) (x, y) = encodeR a x . encodeR b y\n\n-- | Decodes a value of a Simplicity type from a list of cells.\n--\n-- 'decode' does strict checking of the padding used in sum types.\n-- The padding must be filled with unknown values (represented by 'Nothing').\n--\n-- @'decode' ('encode' a) = 'return' a@\ndecode :: (MonadFail m, TyC a) => [Cell] -> m a\ndecode = decodeR reify\n where\n  decodeR :: MonadFail m => TyReflect a -> [Cell] -> m a\n  decodeR OneR [] = return ()\n  decodeR (SumR a b) (Just v:l) = do\n    (l0, l1) <- safeSplitAt (pad a b) l\n    unless (all (==Nothing) l0) (fail \"decodeR SumR: bad padding\")\n    if v then Right <$> decodeR b l1 else Left <$> decodeR a l1\n   where\n    pad = if v then padRR else padLR\n  decodeR (ProdR a b) l = do\n    (l0, l1) <- safeSplitAt (bitSizeR a) l\n    (,) <$> decodeR a l0 <*> decodeR b l1\n  decodeR _ _ = fail \"decode: invalid encoding\"\n\n-- | @'Interpreter' m@ is a type capturing the form of Bit Machine execution functions.\n--\n-- The Bit Machine expects an initial read frame and the size of the initial write frame.\n-- Execution of the Bit Machine returns the final write frame, which should be the same length as the initial size of the write frame.\n-- The 'm' parameter is a monad that captures side effects of execution such as failure, logging for aggregated signature, instrumentation of the Bit Machine for analysis, etc.\ntype Interpreter m = [Cell] -> Int -> m [Cell]\n\n-- | Given a \"compiler\" that transforms any Simplicity program into a Bit Machine 'Interpreter', and a Simplicity program, execute it by encoding the input and decoding the output.\n--\n-- This is largely a wrapper for handling encoding and decoding of values when executing Simplicity programs on an implementation of the Bit Machine.\n--\n-- Typically this function is called as\n--\n-- @'executeUsing' (runMachine . translator) program input@\n--\n-- where @translator@ converts a Simplicity term into a Bit Machine 'MachineCode', @runMachine@ executes 'MachineCode' and @program@ is a Simplicity term.\nexecuteUsing :: (MonadFail m, TyC a, TyC b) => (term a b -> Interpreter m) -> term a b -> a -> m b\nexecuteUsing interpreter program input = result\n where\n  result = interpreter program (encode input) (bitSizeR (reifyProxy result)) >>= decode\n\n-- | 'MachineCode' is the type of (complete) BitMachine programs.\n-- \n-- It is a sequence of instructions with the exception of 'Read' which has two branches.\n-- The sequence is terminated by 'End' or 'Abort'.\n-- The semantics of Bit Machine program is defined by a model of execution found in 'Simplicity.BitMachine.Authentic'.\n--\n-- This type is defined as the explicit fixedpoint of the 'MachineCodeF' functor.\ntype MachineCode = Fix MachineCodeF\n\n-- | This is the functor used to define 'MachineCode'.\ndata MachineCodeF a = End\n                    | Abort\n                    | Write Bool a\n                    | Copy Int a\n                    | Skip Int a\n                    | Fwd Int a\n                    | Bwd Int a\n                    | NewFrame Int a\n                    | MoveFrame a\n                    | DropFrame a\n                    | Read a a\n                    deriving (Functor, Show)\n\n-- | 'MachineCodeK' is a type used during construction of Bit Machine programs and can be viewed as a type holding incomplete programs.\n-- It is used in the same manner as difference lists (or 'StringS') and used a continuation expecting the rest of the program.\n--\n-- The @p '.' q@ expression puts two 'MachineCodeK' values in sequence, and @p '|||' q@ is a 'MachineCodeK' value for a program that deterministically chooses between @p@ and @q@.\ntype MachineCodeK = MachineCode -> MachineCode\n\n-- |'end' instructs the Bit Machine execution to terminate yielding success.\nend :: MachineCode\nend = Fix End\n\n-- | 'abort' instructs the Bit Machine execution to terminate by explicitly failing.\nabort :: MachineCodeK\nabort _ = Fix Abort\n\n-- | @'write' b@ instructs the Bit Machine to write the value 'b' to the active write frame and advance its cursor.\nwrite :: Bool -> MachineCodeK\nwrite b k = Fix (Write b k)\n\n-- | @'copy' n@ instructs the Bit Machine to copy 'n' values from the active read frame to the active write frame and advance the active write frame's cursor to the end of the written data.\ncopy :: Int -> MachineCodeK\ncopy i k = Fix (Copy i k)\n\n-- | @'skip' n@ instructs the Bit Machine to advance the active write frame's cursor by 'n' cells.\nskip :: Int -> MachineCodeK\nskip i k = Fix (Skip i k)\n\n-- | @'fwd' n@ instructs the Bit Machine to advance the active read frame's cursor by 'n' cells.\nfwd :: Int -> MachineCodeK\nfwd i k = Fix (Fwd i k)\n\n-- | @'bwd' n@ instructs the Bit Machine to move the active read frame's cursor backwards by 'n' cells.\nbwd :: Int -> MachineCodeK\nbwd i k = Fix (Bwd i k)\n\n-- | @'newFrame' n@ instructs the Bit Machine to push a new write frame of size 'n' onto the write frame stack.\nnewFrame :: Int -> MachineCodeK\nnewFrame i k = Fix (NewFrame i k)\n\n-- | 'moveFrame' instructs the Bit Machine to pop a frame off the write frame stack and push it onto the read frame stack while resetting that frame's cursor to the beginning of the frame.\nmoveFrame :: MachineCodeK\nmoveFrame k = Fix (MoveFrame k)\n\n-- | 'dropFrame' instructs the Bit Machine to pop a frame off the read frame stack.\ndropFrame :: MachineCodeK\ndropFrame k = Fix (DropFrame k)\n\n-- | @p '|||' q@ instructs the Bit Machine to deterministically choose between two programs by reading the value under the active read frame's cursor.\n-- If the value read is '0' then 'p' is executed.\n-- If the value read is '1' then 'q' is executed.\n(|||) :: MachineCodeK -> MachineCodeK -> MachineCodeK\nx ||| y = \\k -> Fix (Read (x k) (y k))\n\n-- | @'bump' i p@ temporarily advances the active read frame's cursor by @i@ cells and executes @p@ before moving the cursor back.\n--\n-- It is intended that @p@ return the read frame stack back to its original configuration after execution; however, this is not enforced by 'bump'.\n--\n-- @'bump' i p = 'fwd' i . p . 'bwd' i@\nbump :: Int -> MachineCodeK -> MachineCodeK\nbump i p = fwd i . p . bwd i\n\n-- | 'nop' is the empty program that does nothing.\nnop :: MachineCodeK\nnop k = k\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Bitcoin.hs",
    "content": "-- | This module defines utilities used in the processing of Bitcoin-like transaction data.\nmodule Simplicity.Bitcoin\n  ( parseLock, parseSequence\n  ) where\n\nimport Data.Bits (testBit)\nimport Data.Word (Word32, Word16)\n\n-- | Decodes a transaction's lock value into either @'Left' height@ or @'Right' time@.\n-- Note that an \"unlocked\" value is decoded as a height of @0@, which is semantically equivalent to being unlocked.\nparseLock :: Word32 -> Either Word32 Word32\nparseLock v | v < 500000000 = Left v\n            | otherwise = Right v\n\n-- | Decodes a transaction's input's sequence number into optionally either @'Just' ('Left' distance)@ or @'Just' ('Right' duration)@.\n-- If the sequence number's relative lock is disabled, 'Nothing' is returned\n-- Bits without relative lock time semantics are ignored.\nparseSequence :: Word32 -> Maybe (Either Word16 Word16)\nparseSequence v | testBit v 31 = Nothing\n                | testBit v 22 = Just (Right (fromIntegral v))\n                | otherwise    = Just (Left (fromIntegral v))\n"
  },
  {
    "path": "Haskell/Core/Simplicity/CoreJets.hs",
    "content": "-- | This modules provides a GADT for a type of \"core\" Simplicity jets, i.e. those jets that don't use application specific primitives.\n--\n-- While the 'CoreJet' data type could be made an instance of 'Simplicity.JetType.JetType', we instead generally expect it to be used as a substructure of all jets used in each specific Simplicity application.\n-- The other exports of this library aid in building an instance of 'Simplicity.JetType.JetType' for those that make use of 'CoreJet' as a substructure.\n{-# LANGUAGE RankNTypes, GADTs, StandaloneDeriving, ScopedTypeVariables, TypeFamilies #-}\nmodule Simplicity.CoreJets\n ( CoreJet(..), WordJet(..), ArithJet(..), HashJet(..), Secp256k1Jet(..), SignatureJet(..), BitcoinJet(..)\n , coreCatalogue\n , specification, coreJetMap, coreJetLookup\n , implementation\n , fastCoreEval\n , putJetBit, getJetBit\n , ConstWordContent(..), specificationConstWord, implementationConstWord, putConstWordBit, putConstWordValueBit\n , SomeConstWordContent(..), getConstWordBit\n , FastCoreEval\n ) where\n\nimport qualified Prelude\nimport Prelude hiding (fail, drop, take, negate, subtract, min, max, Word)\n\nimport Control.Arrow ((+++), Kleisli(Kleisli), runKleisli)\nimport Data.Bits ((.&.), (.|.), complement, rotate, shift, xor)\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Char8 as BSC\nimport Data.Foldable (toList)\nimport qualified Data.List as List\nimport qualified Data.Map as Map\nimport Data.Serialize (encode)\nimport Data.Type.Equality ((:~:)(Refl))\nimport Data.Void (Void, vacuous)\nimport Lens.Family2 ((^..), over, review)\n\nimport Simplicity.Bitcoin\nimport Simplicity.Digest\nimport Simplicity.FFI.Jets as FFI\nimport Simplicity.LibSecp256k1.Spec as LibSecp256k1\nimport Simplicity.MerkleRoot\nimport Simplicity.Serialization\nimport qualified Simplicity.Programs.Bit as Prog\nimport qualified Simplicity.Programs.Arith as Prog\nimport Simplicity.Programs.Generic as Prog\nimport qualified Simplicity.Programs.CheckSig.Lib as CheckSig\nimport qualified Simplicity.Programs.TimeLock as TimeLock\nimport qualified Simplicity.Programs.LibSecp256k1.Lib as Secp256k1\nimport qualified Simplicity.Programs.Sha256.Lib as Sha256\nimport qualified Simplicity.Programs.Word as Prog\nimport Simplicity.Term.Core\nimport Simplicity.Tree\nimport Simplicity.Ty.LibSecp256k1\nimport Simplicity.Ty.Word\nimport Simplicity.Weight\nimport qualified Simplicity.Word as W\n\n-- | A data type of (typed) tokens representing known \"core\" jets.\n--\n-- A core jet is a jet that doesn't use primitives.\ndata CoreJet a b where\n  WordJet :: WordJet a b -> CoreJet a b\n  ArithJet :: ArithJet a b -> CoreJet a b\n  HashJet :: HashJet a b -> CoreJet a b\n  Secp256k1Jet :: Secp256k1Jet a b -> CoreJet a b\n  SignatureJet :: SignatureJet a b -> CoreJet a b\n  BitcoinJet :: BitcoinJet a b -> CoreJet a b\nderiving instance Eq (CoreJet a b)\nderiving instance Show (CoreJet a b)\n\ndata WordJet a b where\n  Verify :: WordJet Bit ()\n  Low1 :: WordJet () Word1\n  Low8 :: WordJet () Word8\n  Low16 :: WordJet () Word16\n  Low32 :: WordJet () Word32\n  Low64 :: WordJet () Word64\n  High1 :: WordJet () Word1\n  High8 :: WordJet () Word8\n  High16 :: WordJet () Word16\n  High32 :: WordJet () Word32\n  High64 :: WordJet () Word64\n  Complement1 :: WordJet Word1 Word1\n  Complement8 :: WordJet Word8 Word8\n  Complement16 :: WordJet Word16 Word16\n  Complement32 :: WordJet Word32 Word32\n  Complement64 :: WordJet Word64 Word64\n  And1 :: WordJet (Word1, Word1) Word1\n  And8 :: WordJet (Word8, Word8) Word8\n  And16 :: WordJet (Word16, Word16) Word16\n  And32 :: WordJet (Word32, Word32) Word32\n  And64 :: WordJet (Word64, Word64) Word64\n  Or1 :: WordJet (Word1, Word1) Word1\n  Or8 :: WordJet (Word8, Word8) Word8\n  Or16 :: WordJet (Word16, Word16) Word16\n  Or32 :: WordJet (Word32, Word32) Word32\n  Or64 :: WordJet (Word64, Word64) Word64\n  Xor1 :: WordJet (Word1, Word1) Word1\n  Xor8 :: WordJet (Word8, Word8) Word8\n  Xor16 :: WordJet (Word16, Word16) Word16\n  Xor32 :: WordJet (Word32, Word32) Word32\n  Xor64 :: WordJet (Word64, Word64) Word64\n  Maj1 :: WordJet (Word1, (Word1, Word1)) Word1\n  Maj8 :: WordJet (Word8, (Word8, Word8)) Word8\n  Maj16 :: WordJet (Word16, (Word16, Word16)) Word16\n  Maj32 :: WordJet (Word32, (Word32, Word32)) Word32\n  Maj64 :: WordJet (Word64, (Word64, Word64)) Word64\n  XorXor1 :: WordJet (Word1, (Word1, Word1)) Word1\n  XorXor8 :: WordJet (Word8, (Word8, Word8)) Word8\n  XorXor16 :: WordJet (Word16, (Word16, Word16)) Word16\n  XorXor32 :: WordJet (Word32, (Word32, Word32)) Word32\n  XorXor64 :: WordJet (Word64, (Word64, Word64)) Word64\n  Ch1 :: WordJet (Word1, (Word1, Word1)) Word1\n  Ch8 :: WordJet (Word8, (Word8, Word8)) Word8\n  Ch16 :: WordJet (Word16, (Word16, Word16)) Word16\n  Ch32 :: WordJet (Word32, (Word32, Word32)) Word32\n  Ch64 :: WordJet (Word64, (Word64, Word64)) Word64\n  Some1 :: WordJet Word1 Bit\n  Some8 :: WordJet Word8 Bit\n  Some16 :: WordJet Word16 Bit\n  Some32 :: WordJet Word32 Bit\n  Some64 :: WordJet Word64 Bit\n  All8 :: WordJet Word8 Bit\n  All16 :: WordJet Word16 Bit\n  All32 :: WordJet Word32 Bit\n  All64 :: WordJet Word64 Bit\n  Eq1 :: WordJet (Word1, Word1) Bit\n  Eq8 :: WordJet (Word8, Word8) Bit\n  Eq16 :: WordJet (Word16, Word16) Bit\n  Eq32 :: WordJet (Word32, Word32) Bit\n  Eq64 :: WordJet (Word64, Word64) Bit\n  Eq256 :: WordJet (Word256, Word256) Bit\n  FullLeftShift8_1 :: WordJet (Word8, Word1) (Word1, Word8)\n  FullLeftShift8_2 :: WordJet (Word8, Word2) (Word2, Word8)\n  FullLeftShift8_4 :: WordJet (Word8, Word4) (Word4, Word8)\n  FullLeftShift16_1 :: WordJet (Word16, Word1) (Word1, Word16)\n  FullLeftShift16_2 :: WordJet (Word16, Word2) (Word2, Word16)\n  FullLeftShift16_4 :: WordJet (Word16, Word4) (Word4, Word16)\n  FullLeftShift16_8 :: WordJet (Word16, Word8) (Word8, Word16)\n  FullLeftShift32_1 :: WordJet (Word32, Word1) (Word1, Word32)\n  FullLeftShift32_2 :: WordJet (Word32, Word2) (Word2, Word32)\n  FullLeftShift32_4 :: WordJet (Word32, Word4) (Word4, Word32)\n  FullLeftShift32_8 :: WordJet (Word32, Word8) (Word8, Word32)\n  FullLeftShift32_16 :: WordJet (Word32, Word16) (Word16, Word32)\n  FullLeftShift64_1 :: WordJet (Word64, Word1) (Word1, Word64)\n  FullLeftShift64_2 :: WordJet (Word64, Word2) (Word2, Word64)\n  FullLeftShift64_4 :: WordJet (Word64, Word4) (Word4, Word64)\n  FullLeftShift64_8 :: WordJet (Word64, Word8) (Word8, Word64)\n  FullLeftShift64_16 :: WordJet (Word64, Word16) (Word16, Word64)\n  FullLeftShift64_32 :: WordJet (Word64, Word32) (Word32, Word64)\n  FullRightShift8_1 :: WordJet (Word1, Word8) (Word8, Word1)\n  FullRightShift8_2 :: WordJet (Word2, Word8) (Word8, Word2)\n  FullRightShift8_4 :: WordJet (Word4, Word8) (Word8, Word4)\n  FullRightShift16_1 :: WordJet (Word1, Word16) (Word16, Word1)\n  FullRightShift16_2 :: WordJet (Word2, Word16) (Word16, Word2)\n  FullRightShift16_4 :: WordJet (Word4, Word16) (Word16, Word4)\n  FullRightShift16_8 :: WordJet (Word8, Word16) (Word16, Word8)\n  FullRightShift32_1 :: WordJet (Word1, Word32) (Word32, Word1)\n  FullRightShift32_2 :: WordJet (Word2, Word32) (Word32, Word2)\n  FullRightShift32_4 :: WordJet (Word4, Word32) (Word32, Word4)\n  FullRightShift32_8 :: WordJet (Word8, Word32) (Word32, Word8)\n  FullRightShift32_16 :: WordJet (Word16, Word32) (Word32, Word16)\n  FullRightShift64_1 :: WordJet (Word1, Word64) (Word64, Word1)\n  FullRightShift64_2 :: WordJet (Word2, Word64) (Word64, Word2)\n  FullRightShift64_4 :: WordJet (Word4, Word64) (Word64, Word4)\n  FullRightShift64_8 :: WordJet (Word8, Word64) (Word64, Word8)\n  FullRightShift64_16 :: WordJet (Word16, Word64) (Word64, Word16)\n  FullRightShift64_32 :: WordJet (Word32, Word64) (Word64, Word32)\n  Leftmost8_1 :: WordJet Word8 Word1\n  Leftmost8_2 :: WordJet Word8 Word2\n  Leftmost8_4 :: WordJet Word8 Word4\n  Leftmost16_1 :: WordJet Word16 Word1\n  Leftmost16_2 :: WordJet Word16 Word2\n  Leftmost16_4 :: WordJet Word16 Word4\n  Leftmost16_8 :: WordJet Word16 Word8\n  Leftmost32_1 :: WordJet Word32 Word1\n  Leftmost32_2 :: WordJet Word32 Word2\n  Leftmost32_4 :: WordJet Word32 Word4\n  Leftmost32_8 :: WordJet Word32 Word8\n  Leftmost32_16 :: WordJet Word32 Word16\n  Leftmost64_1 :: WordJet Word64 Word1\n  Leftmost64_2 :: WordJet Word64 Word2\n  Leftmost64_4 :: WordJet Word64 Word4\n  Leftmost64_8 :: WordJet Word64 Word8\n  Leftmost64_16 :: WordJet Word64 Word16\n  Leftmost64_32 :: WordJet Word64 Word32\n  Rightmost8_1 :: WordJet Word8 Word1\n  Rightmost8_2 :: WordJet Word8 Word2\n  Rightmost8_4 :: WordJet Word8 Word4\n  Rightmost16_1 :: WordJet Word16 Word1\n  Rightmost16_2 :: WordJet Word16 Word2\n  Rightmost16_4 :: WordJet Word16 Word4\n  Rightmost16_8 :: WordJet Word16 Word8\n  Rightmost32_1 :: WordJet Word32 Word1\n  Rightmost32_2 :: WordJet Word32 Word2\n  Rightmost32_4 :: WordJet Word32 Word4\n  Rightmost32_8 :: WordJet Word32 Word8\n  Rightmost32_16 :: WordJet Word32 Word16\n  Rightmost64_1 :: WordJet Word64 Word1\n  Rightmost64_2 :: WordJet Word64 Word2\n  Rightmost64_4 :: WordJet Word64 Word4\n  Rightmost64_8 :: WordJet Word64 Word8\n  Rightmost64_16 :: WordJet Word64 Word16\n  Rightmost64_32 :: WordJet Word64 Word32\n  LeftPadLow1_8 :: WordJet Word1 Word8\n  LeftPadLow1_16 :: WordJet Word1 Word16\n  LeftPadLow8_16 :: WordJet Word8 Word16\n  LeftPadLow1_32 :: WordJet Word1 Word32\n  LeftPadLow8_32 :: WordJet Word8 Word32\n  LeftPadLow16_32 :: WordJet Word16 Word32\n  LeftPadLow1_64 :: WordJet Word1 Word64\n  LeftPadLow8_64 :: WordJet Word8 Word64\n  LeftPadLow16_64 :: WordJet Word16 Word64\n  LeftPadLow32_64 :: WordJet Word32 Word64\n  LeftPadHigh1_8 :: WordJet Word1 Word8\n  LeftPadHigh1_16 :: WordJet Word1 Word16\n  LeftPadHigh8_16 :: WordJet Word8 Word16\n  LeftPadHigh1_32 :: WordJet Word1 Word32\n  LeftPadHigh8_32 :: WordJet Word8 Word32\n  LeftPadHigh16_32 :: WordJet Word16 Word32\n  LeftPadHigh1_64 :: WordJet Word1 Word64\n  LeftPadHigh8_64 :: WordJet Word8 Word64\n  LeftPadHigh16_64 :: WordJet Word16 Word64\n  LeftPadHigh32_64 :: WordJet Word32 Word64\n  LeftExtend1_8 :: WordJet Word1 Word8\n  LeftExtend1_16 :: WordJet Word1 Word16\n  LeftExtend8_16 :: WordJet Word8 Word16\n  LeftExtend1_32 :: WordJet Word1 Word32\n  LeftExtend8_32 :: WordJet Word8 Word32\n  LeftExtend16_32 :: WordJet Word16 Word32\n  LeftExtend1_64 :: WordJet Word1 Word64\n  LeftExtend8_64 :: WordJet Word8 Word64\n  LeftExtend16_64 :: WordJet Word16 Word64\n  LeftExtend32_64 :: WordJet Word32 Word64\n  RightPadLow1_8 :: WordJet Word1 Word8\n  RightPadLow1_16 :: WordJet Word1 Word16\n  RightPadLow8_16 :: WordJet Word8 Word16\n  RightPadLow1_32 :: WordJet Word1 Word32\n  RightPadLow8_32 :: WordJet Word8 Word32\n  RightPadLow16_32 :: WordJet Word16 Word32\n  RightPadLow1_64 :: WordJet Word1 Word64\n  RightPadLow8_64 :: WordJet Word8 Word64\n  RightPadLow16_64 :: WordJet Word16 Word64\n  RightPadLow32_64 :: WordJet Word32 Word64\n  RightPadHigh1_8 :: WordJet Word1 Word8\n  RightPadHigh1_16 :: WordJet Word1 Word16\n  RightPadHigh8_16 :: WordJet Word8 Word16\n  RightPadHigh1_32 :: WordJet Word1 Word32\n  RightPadHigh8_32 :: WordJet Word8 Word32\n  RightPadHigh16_32 :: WordJet Word16 Word32\n  RightPadHigh1_64 :: WordJet Word1 Word64\n  RightPadHigh8_64 :: WordJet Word8 Word64\n  RightPadHigh16_64 :: WordJet Word16 Word64\n  RightPadHigh32_64 :: WordJet Word32 Word64\n  RightExtend8_16 :: WordJet Word8 Word16\n  RightExtend8_32 :: WordJet Word8 Word32\n  RightExtend16_32 :: WordJet Word16 Word32\n  RightExtend8_64 :: WordJet Word8 Word64\n  RightExtend16_64 :: WordJet Word16 Word64\n  RightExtend32_64 :: WordJet Word32 Word64\n  LeftShiftWith8 :: WordJet (Bit, (Word4, Word8)) Word8\n  LeftShiftWith16 :: WordJet (Bit, (Word4, Word16)) Word16\n  LeftShiftWith32 :: WordJet (Bit, (Word8, Word32)) Word32\n  LeftShiftWith64 :: WordJet (Bit, (Word8, Word64)) Word64\n  LeftShift8 :: WordJet (Word4, Word8) Word8\n  LeftShift16 :: WordJet (Word4, Word16) Word16\n  LeftShift32 :: WordJet (Word8, Word32) Word32\n  LeftShift64 :: WordJet (Word8, Word64) Word64\n  RightShiftWith8 :: WordJet (Bit, (Word4, Word8)) Word8\n  RightShiftWith16 :: WordJet (Bit, (Word4, Word16)) Word16\n  RightShiftWith32 :: WordJet (Bit, (Word8, Word32)) Word32\n  RightShiftWith64 :: WordJet (Bit, (Word8, Word64)) Word64\n  RightShift8 :: WordJet (Word4, Word8) Word8\n  RightShift16 :: WordJet (Word4, Word16) Word16\n  RightShift32 :: WordJet (Word8, Word32) Word32\n  RightShift64 :: WordJet (Word8, Word64) Word64\n  LeftRotate8 :: WordJet (Word4, Word8) Word8\n  LeftRotate16 :: WordJet (Word4, Word16) Word16\n  LeftRotate32 :: WordJet (Word8, Word32) Word32\n  LeftRotate64 :: WordJet (Word8, Word64) Word64\n  RightRotate8 :: WordJet (Word4, Word8) Word8\n  RightRotate16 :: WordJet (Word4, Word16) Word16\n  RightRotate32 :: WordJet (Word8, Word32) Word32\n  RightRotate64 :: WordJet (Word8, Word64) Word64\n\nderiving instance Eq (WordJet a b)\nderiving instance Show (WordJet a b)\n\ndata ArithJet a b where\n  One8 :: ArithJet () Word8\n  One16 :: ArithJet () Word16\n  One32 :: ArithJet () Word32\n  One64 :: ArithJet () Word64\n  Add8 :: ArithJet (Word8, Word8) (Bit, Word8)\n  Add16 :: ArithJet (Word16, Word16) (Bit, Word16)\n  Add32 :: ArithJet (Word32, Word32) (Bit, Word32)\n  Add64 :: ArithJet (Word64, Word64) (Bit, Word64)\n  FullAdd8 :: ArithJet (Bit, (Word8, Word8)) (Bit, Word8)\n  FullAdd16 :: ArithJet (Bit, (Word16, Word16)) (Bit, Word16)\n  FullAdd32 :: ArithJet (Bit, (Word32, Word32)) (Bit, Word32)\n  FullAdd64 :: ArithJet (Bit, (Word64, Word64)) (Bit, Word64)\n  FullIncrement8 :: ArithJet (Bit, Word8) (Bit, Word8)\n  FullIncrement16 :: ArithJet (Bit, Word16) (Bit, Word16)\n  FullIncrement32 :: ArithJet (Bit, Word32) (Bit, Word32)\n  FullIncrement64 :: ArithJet (Bit, Word64) (Bit, Word64)\n  Increment8 :: ArithJet Word8 (Bit, Word8)\n  Increment16 :: ArithJet Word16 (Bit, Word16)\n  Increment32 :: ArithJet Word32 (Bit, Word32)\n  Increment64 :: ArithJet Word64 (Bit, Word64)\n  Subtract8 :: ArithJet (Word8, Word8) (Bit, Word8)\n  Subtract16 :: ArithJet (Word16, Word16) (Bit, Word16)\n  Subtract32 :: ArithJet (Word32, Word32) (Bit, Word32)\n  Subtract64 :: ArithJet (Word64, Word64) (Bit, Word64)\n  FullSubtract8 :: ArithJet (Bit, (Word8, Word8)) (Bit, Word8)\n  FullSubtract16 :: ArithJet (Bit, (Word16, Word16)) (Bit, Word16)\n  FullSubtract32 :: ArithJet (Bit, (Word32, Word32)) (Bit, Word32)\n  FullSubtract64 :: ArithJet (Bit, (Word64, Word64)) (Bit, Word64)\n  Negate8 :: ArithJet Word8 (Bit, Word8)\n  Negate16 :: ArithJet Word16 (Bit, Word16)\n  Negate32 :: ArithJet Word32 (Bit, Word32)\n  Negate64 :: ArithJet Word64 (Bit, Word64)\n  FullDecrement8 :: ArithJet (Bit, Word8) (Bit, Word8)\n  FullDecrement16 :: ArithJet (Bit, Word16) (Bit, Word16)\n  FullDecrement32 :: ArithJet (Bit, Word32) (Bit, Word32)\n  FullDecrement64 :: ArithJet (Bit, Word64) (Bit, Word64)\n  Decrement8 :: ArithJet Word8 (Bit, Word8)\n  Decrement16 :: ArithJet Word16 (Bit, Word16)\n  Decrement32 :: ArithJet Word32 (Bit, Word32)\n  Decrement64 :: ArithJet Word64 (Bit, Word64)\n  Multiply8 :: ArithJet (Word8, Word8) Word16\n  Multiply16 :: ArithJet (Word16, Word16) Word32\n  Multiply32 :: ArithJet (Word32, Word32) Word64\n  Multiply64 :: ArithJet (Word64, Word64) Word128\n  FullMultiply8 :: ArithJet ((Word8, Word8), (Word8, Word8)) Word16\n  FullMultiply16 :: ArithJet ((Word16, Word16), (Word16, Word16)) Word32\n  FullMultiply32 :: ArithJet ((Word32, Word32), (Word32, Word32)) Word64\n  FullMultiply64 :: ArithJet ((Word64, Word64), (Word64, Word64)) Word128\n  IsZero8 :: ArithJet Word8 Bit\n  IsZero16 :: ArithJet Word16 Bit\n  IsZero32 :: ArithJet Word32 Bit\n  IsZero64 :: ArithJet Word64 Bit\n  IsOne8 :: ArithJet Word8 Bit\n  IsOne16 :: ArithJet Word16 Bit\n  IsOne32 :: ArithJet Word32 Bit\n  IsOne64 :: ArithJet Word64 Bit\n  Le8 :: ArithJet (Word8, Word8) Bit\n  Le16 :: ArithJet (Word16, Word16) Bit\n  Le32 :: ArithJet (Word32, Word32) Bit\n  Le64 :: ArithJet (Word64, Word64) Bit\n  Lt8 :: ArithJet (Word8, Word8) Bit\n  Lt16 :: ArithJet (Word16, Word16) Bit\n  Lt32 :: ArithJet (Word32, Word32) Bit\n  Lt64 :: ArithJet (Word64, Word64) Bit\n  Min8 :: ArithJet (Word8, Word8) Word8\n  Min16 :: ArithJet (Word16, Word16) Word16\n  Min32 :: ArithJet (Word32, Word32) Word32\n  Min64 :: ArithJet (Word64, Word64) Word64\n  Max8 :: ArithJet (Word8, Word8) Word8\n  Max16 :: ArithJet (Word16, Word16) Word16\n  Max32 :: ArithJet (Word32, Word32) Word32\n  Max64 :: ArithJet (Word64, Word64) Word64\n  Median8 :: ArithJet (Word8, (Word8, Word8)) Word8\n  Median16 :: ArithJet (Word16, (Word16, Word16)) Word16\n  Median32 :: ArithJet (Word32, (Word32, Word32)) Word32\n  Median64 :: ArithJet (Word64, (Word64, Word64)) Word64\n  DivMod8 :: ArithJet (Word8, Word8) (Word8, Word8)\n  DivMod16 :: ArithJet (Word16, Word16) (Word16, Word16)\n  DivMod32 :: ArithJet (Word32, Word32) (Word32, Word32)\n  DivMod64 :: ArithJet (Word64, Word64) (Word64, Word64)\n  Divide8 :: ArithJet (Word8, Word8) Word8\n  Divide16 :: ArithJet (Word16, Word16) Word16\n  Divide32 :: ArithJet (Word32, Word32) Word32\n  Divide64 :: ArithJet (Word64, Word64) Word64\n  Modulo8 :: ArithJet (Word8, Word8) Word8\n  Modulo16 :: ArithJet (Word16, Word16) Word16\n  Modulo32 :: ArithJet (Word32, Word32) Word32\n  Modulo64 :: ArithJet (Word64, Word64) Word64\n  Divides8 :: ArithJet (Word8, Word8) Bit\n  Divides16 :: ArithJet (Word16, Word16) Bit\n  Divides32 :: ArithJet (Word32, Word32) Bit\n  Divides64 :: ArithJet (Word64, Word64) Bit\n  DivMod128_64 :: ArithJet (Word128, Word64) (Word64, Word64)\nderiving instance Eq (ArithJet a b)\nderiving instance Show (ArithJet a b)\n\ndata HashJet a b where\n  Sha256Block :: HashJet (Sha256.Hash, Sha256.Block) Sha256.Hash\n  Sha256Iv :: HashJet () Sha256.Hash\n  Sha256Ctx8Init :: HashJet () Sha256.Ctx8\n  Sha256Ctx8Add1 :: HashJet (Sha256.Ctx8, Word8) Sha256.Ctx8\n  Sha256Ctx8Add2 :: HashJet (Sha256.Ctx8, Word16) Sha256.Ctx8\n  Sha256Ctx8Add4 :: HashJet (Sha256.Ctx8, Word32) Sha256.Ctx8\n  Sha256Ctx8Add8 :: HashJet (Sha256.Ctx8, Word64) Sha256.Ctx8\n  Sha256Ctx8Add16 :: HashJet (Sha256.Ctx8, Word128) Sha256.Ctx8\n  Sha256Ctx8Add32 :: HashJet (Sha256.Ctx8, Word256) Sha256.Ctx8\n  Sha256Ctx8Add64 :: HashJet (Sha256.Ctx8, Word512) Sha256.Ctx8\n  Sha256Ctx8Add128 :: HashJet (Sha256.Ctx8, Word1024) Sha256.Ctx8\n  Sha256Ctx8Add256 :: HashJet (Sha256.Ctx8, Word2048) Sha256.Ctx8\n  Sha256Ctx8Add512 :: HashJet (Sha256.Ctx8, Word4096) Sha256.Ctx8\n  Sha256Ctx8AddBuffer511 :: HashJet (Sha256.Ctx8, Buffer511 Word8) Sha256.Ctx8\n  Sha256Ctx8Finalize :: HashJet Sha256.Ctx8 Sha256.Hash\nderiving instance Eq (HashJet a b)\nderiving instance Show (HashJet a b)\n\ndata Secp256k1Jet a b where\n  FeNormalize :: Secp256k1Jet Secp256k1.FE Secp256k1.FE\n  FeNegate :: Secp256k1Jet Secp256k1.FE Secp256k1.FE\n  FeAdd :: Secp256k1Jet (Secp256k1.FE, Secp256k1.FE) Secp256k1.FE\n  FeSquare :: Secp256k1Jet Secp256k1.FE Secp256k1.FE\n  FeMultiply :: Secp256k1Jet (Secp256k1.FE, Secp256k1.FE) Secp256k1.FE\n  FeMultiplyBeta :: Secp256k1Jet Secp256k1.FE Secp256k1.FE\n  FeInvert :: Secp256k1Jet Secp256k1.FE Secp256k1.FE\n  FeSquareRoot :: Secp256k1Jet Secp256k1.FE (Either () Secp256k1.FE)\n  FeIsZero :: Secp256k1Jet Secp256k1.FE Bit\n  FeIsOdd :: Secp256k1Jet Secp256k1.FE Bit\n  ScalarNormalize :: Secp256k1Jet Secp256k1.Scalar Secp256k1.Scalar\n  ScalarNegate :: Secp256k1Jet Secp256k1.Scalar Secp256k1.Scalar\n  ScalarAdd :: Secp256k1Jet (Secp256k1.Scalar, Secp256k1.Scalar) Secp256k1.Scalar\n  ScalarSquare :: Secp256k1Jet Secp256k1.Scalar Secp256k1.Scalar\n  ScalarMultiply :: Secp256k1Jet (Secp256k1.Scalar, Secp256k1.Scalar) Secp256k1.Scalar\n  ScalarMultiplyLambda :: Secp256k1Jet Secp256k1.Scalar Secp256k1.Scalar\n  ScalarInvert :: Secp256k1Jet Secp256k1.Scalar Secp256k1.Scalar\n  ScalarIsZero :: Secp256k1Jet Secp256k1.Scalar Bit\n  GejInfinity :: Secp256k1Jet () Secp256k1.GEJ\n  GejNormalize :: Secp256k1Jet Secp256k1.GEJ (Either () Secp256k1.GE)\n  GejNegate :: Secp256k1Jet Secp256k1.GEJ Secp256k1.GEJ\n  GeNegate :: Secp256k1Jet Secp256k1.GE Secp256k1.GE\n  GejDouble :: Secp256k1Jet Secp256k1.GEJ Secp256k1.GEJ\n  GejAdd :: Secp256k1Jet (Secp256k1.GEJ,Secp256k1.GEJ) Secp256k1.GEJ\n  GejGeAddEx :: Secp256k1Jet (Secp256k1.GEJ,Secp256k1.GE) (Secp256k1.FE, Secp256k1.GEJ)\n  GejGeAdd :: Secp256k1Jet (Secp256k1.GEJ,Secp256k1.GE) Secp256k1.GEJ\n  GejRescale :: Secp256k1Jet (Secp256k1.GEJ,Secp256k1.FE) Secp256k1.GEJ\n  GejIsInfinity :: Secp256k1Jet Secp256k1.GEJ Bit\n  GejEquiv :: Secp256k1Jet (Secp256k1.GEJ, Secp256k1.GEJ) Bit\n  GejGeEquiv :: Secp256k1Jet (Secp256k1.GEJ, Secp256k1.GE) Bit\n  GejXEquiv :: Secp256k1Jet (Secp256k1.FE, Secp256k1.GEJ) Bit\n  GejYIsOdd :: Secp256k1Jet Secp256k1.GEJ Bit\n  GejIsOnCurve :: Secp256k1Jet Secp256k1.GEJ Bit\n  GeIsOnCurve :: Secp256k1Jet Secp256k1.GE Bit\n  Generate :: Secp256k1Jet Secp256k1.Scalar Secp256k1.GEJ\n  Scale :: Secp256k1Jet (Secp256k1.Scalar,Secp256k1.GEJ) Secp256k1.GEJ\n  LinearCombination1 :: Secp256k1Jet ((Secp256k1.Scalar,Secp256k1.GEJ),Secp256k1.Scalar) Secp256k1.GEJ\n  LinearVerify1 :: Secp256k1Jet (((Secp256k1.Scalar,Secp256k1.GE),Secp256k1.Scalar),Secp256k1.GE) ()\n  PointVerify1 :: Secp256k1Jet (((Secp256k1.Scalar,Secp256k1.Point),Secp256k1.Scalar),Secp256k1.Point) ()\n  Decompress :: Secp256k1Jet Secp256k1.Point (Either () Secp256k1.GE)\n  Swu :: Secp256k1Jet Secp256k1.FE Secp256k1.GE\n  HashToCurve :: Secp256k1Jet Word256 Secp256k1.GE\nderiving instance Eq (Secp256k1Jet a b)\nderiving instance Show (Secp256k1Jet a b)\n\ndata SignatureJet a b where\n  CheckSigVerify :: SignatureJet ((Secp256k1.PubKey, Word512),Secp256k1.Sig) ()\n  Bip0340Verify :: SignatureJet ((Secp256k1.PubKey, Word256),Secp256k1.Sig) ()\nderiving instance Eq (SignatureJet a b)\nderiving instance Show (SignatureJet a b)\n\ndata BitcoinJet a b where\n  ParseLock :: BitcoinJet Word32 (Either Word32 Word32)\n  ParseSequence :: BitcoinJet Word32 (Either () (Either Word16 Word16))\n  TapdataInit :: BitcoinJet () Sha256.Ctx8\nderiving instance Eq (BitcoinJet a b)\nderiving instance Show (BitcoinJet a b)\n\n-- | The specification of \"core\" jets.  This can be used to help instantiate the 'Simplicity.JetType.specification' method.\nspecification :: Assert term => CoreJet a b -> term a b\nspecification (WordJet x) = specificationWord x\nspecification (ArithJet x) = specificationArith x\nspecification (HashJet x) = specificationHash x\nspecification (Secp256k1Jet x) = specificationSecp256k1 x\nspecification (SignatureJet x) = specificationSignature x\nspecification (BitcoinJet x) = specificationBitcoin x\n\nspecificationWord :: Assert term => WordJet a b -> term a b\nspecificationWord Verify = Prog.verify\nspecificationWord Low1 = Prog.zero word1\nspecificationWord Low8 = Prog.zero word8\nspecificationWord Low16 = Prog.zero word16\nspecificationWord Low32 = Prog.zero word32\nspecificationWord Low64 = Prog.zero word64\nspecificationWord High1 = Prog.high word1\nspecificationWord High8 = Prog.high word8\nspecificationWord High16 = Prog.high word16\nspecificationWord High32 = Prog.high word32\nspecificationWord High64 = Prog.high word64\nspecificationWord Complement1 = Prog.complement word1\nspecificationWord Complement8 = Prog.complement word8\nspecificationWord Complement16 = Prog.complement word16\nspecificationWord Complement32 = Prog.complement word32\nspecificationWord Complement64 = Prog.complement word64\nspecificationWord And1 = Prog.bitwise_and word1\nspecificationWord And8 = Prog.bitwise_and word8\nspecificationWord And16 = Prog.bitwise_and word16\nspecificationWord And32 = Prog.bitwise_and word32\nspecificationWord And64 = Prog.bitwise_and word64\nspecificationWord Or1 = Prog.bitwise_or word1\nspecificationWord Or8 = Prog.bitwise_or word8\nspecificationWord Or16 = Prog.bitwise_or word16\nspecificationWord Or32 = Prog.bitwise_or word32\nspecificationWord Or64 = Prog.bitwise_or word64\nspecificationWord Xor1 = Prog.bitwise_xor word1\nspecificationWord Xor8 = Prog.bitwise_xor word8\nspecificationWord Xor16 = Prog.bitwise_xor word16\nspecificationWord Xor32 = Prog.bitwise_xor word32\nspecificationWord Xor64 = Prog.bitwise_xor word64\nspecificationWord Maj1 = Prog.bitwise_maj word1\nspecificationWord Maj8 = Prog.bitwise_maj word8\nspecificationWord Maj16 = Prog.bitwise_maj word16\nspecificationWord Maj32 = Prog.bitwise_maj word32\nspecificationWord Maj64 = Prog.bitwise_maj word64\nspecificationWord XorXor1 = Prog.bitwise_xor_xor word1\nspecificationWord XorXor8 = Prog.bitwise_xor_xor word8\nspecificationWord XorXor16 = Prog.bitwise_xor_xor word16\nspecificationWord XorXor32 = Prog.bitwise_xor_xor word32\nspecificationWord XorXor64 = Prog.bitwise_xor_xor word64\nspecificationWord Ch1 = Prog.bitwise_ch word1\nspecificationWord Ch8 = Prog.bitwise_ch word8\nspecificationWord Ch16 = Prog.bitwise_ch word16\nspecificationWord Ch32 = Prog.bitwise_ch word32\nspecificationWord Ch64 = Prog.bitwise_ch word64\nspecificationWord Some1 = Prog.some word1\nspecificationWord Some8 = Prog.some word8\nspecificationWord Some16 = Prog.some word16\nspecificationWord Some32 = Prog.some word32\nspecificationWord Some64 = Prog.some word64\nspecificationWord All8 = Prog.all word8\nspecificationWord All16 = Prog.all word16\nspecificationWord All32 = Prog.all word32\nspecificationWord All64 = Prog.all word64\nspecificationWord Eq1 = eq\nspecificationWord Eq8 = eq\nspecificationWord Eq16 = eq\nspecificationWord Eq32 = eq\nspecificationWord Eq64 = eq\nspecificationWord Eq256 = eq\nspecificationWord FullLeftShift8_1 = Prog.full_shift word8 word1\nspecificationWord FullLeftShift8_2 = Prog.full_shift word8 word2\nspecificationWord FullLeftShift8_4 = Prog.full_shift word8 word4\nspecificationWord FullLeftShift16_1 = Prog.full_shift word16 word1\nspecificationWord FullLeftShift16_2 = Prog.full_shift word16 word2\nspecificationWord FullLeftShift16_4 = Prog.full_shift word16 word4\nspecificationWord FullLeftShift16_8 = Prog.full_shift word16 word8\nspecificationWord FullLeftShift32_1 = Prog.full_shift word32 word1\nspecificationWord FullLeftShift32_2 = Prog.full_shift word32 word2\nspecificationWord FullLeftShift32_4 = Prog.full_shift word32 word4\nspecificationWord FullLeftShift32_8 = Prog.full_shift word32 word8\nspecificationWord FullLeftShift32_16 = Prog.full_shift word32 word16\nspecificationWord FullLeftShift64_1 = Prog.full_shift word64 word1\nspecificationWord FullLeftShift64_2 = Prog.full_shift word64 word2\nspecificationWord FullLeftShift64_4 = Prog.full_shift word64 word4\nspecificationWord FullLeftShift64_8 = Prog.full_shift word64 word8\nspecificationWord FullLeftShift64_16 = Prog.full_shift word64 word16\nspecificationWord FullLeftShift64_32 = Prog.full_shift word64 word32\nspecificationWord FullRightShift8_1 = Prog.full_shift word1 word8\nspecificationWord FullRightShift8_2 = Prog.full_shift word2 word8\nspecificationWord FullRightShift8_4 = Prog.full_shift word4 word8\nspecificationWord FullRightShift16_1 = Prog.full_shift word1 word16\nspecificationWord FullRightShift16_2 = Prog.full_shift word2 word16\nspecificationWord FullRightShift16_4 = Prog.full_shift word4 word16\nspecificationWord FullRightShift16_8 = Prog.full_shift word8 word16\nspecificationWord FullRightShift32_1 = Prog.full_shift word1 word32\nspecificationWord FullRightShift32_2 = Prog.full_shift word2 word32\nspecificationWord FullRightShift32_4 = Prog.full_shift word4 word32\nspecificationWord FullRightShift32_8 = Prog.full_shift word8 word32\nspecificationWord FullRightShift32_16 = Prog.full_shift word16 word32\nspecificationWord FullRightShift64_1 = Prog.full_shift word1 word64\nspecificationWord FullRightShift64_2 = Prog.full_shift word2 word64\nspecificationWord FullRightShift64_4 = Prog.full_shift word4 word64\nspecificationWord FullRightShift64_8 = Prog.full_shift word8 word64\nspecificationWord FullRightShift64_16 = Prog.full_shift word16 word64\nspecificationWord FullRightShift64_32 = Prog.full_shift word32 word64\nspecificationWord Leftmost8_1 = Prog.leftmost vector8\nspecificationWord Leftmost8_2 = Prog.leftmost vector4\nspecificationWord Leftmost8_4 = Prog.leftmost vector2\nspecificationWord Leftmost16_1 = Prog.leftmost vector16\nspecificationWord Leftmost16_2 = Prog.leftmost vector8\nspecificationWord Leftmost16_4 = Prog.leftmost vector4\nspecificationWord Leftmost16_8 = Prog.leftmost vector2\nspecificationWord Leftmost32_1 = Prog.leftmost vector32\nspecificationWord Leftmost32_2 = Prog.leftmost vector16\nspecificationWord Leftmost32_4 = Prog.leftmost vector8\nspecificationWord Leftmost32_8 = Prog.leftmost vector4\nspecificationWord Leftmost32_16 = Prog.leftmost vector2\nspecificationWord Leftmost64_1 = Prog.leftmost vector64\nspecificationWord Leftmost64_2 = Prog.leftmost vector32\nspecificationWord Leftmost64_4 = Prog.leftmost vector16\nspecificationWord Leftmost64_8 = Prog.leftmost vector8\nspecificationWord Leftmost64_16 = Prog.leftmost vector4\nspecificationWord Leftmost64_32 = Prog.leftmost vector2\nspecificationWord Rightmost8_1 = Prog.rightmost vector8\nspecificationWord Rightmost8_2 = Prog.rightmost vector4\nspecificationWord Rightmost8_4 = Prog.rightmost vector2\nspecificationWord Rightmost16_1 = Prog.rightmost vector16\nspecificationWord Rightmost16_2 = Prog.rightmost vector8\nspecificationWord Rightmost16_4 = Prog.rightmost vector4\nspecificationWord Rightmost16_8 = Prog.rightmost vector2\nspecificationWord Rightmost32_1 = Prog.rightmost vector32\nspecificationWord Rightmost32_2 = Prog.rightmost vector16\nspecificationWord Rightmost32_4 = Prog.rightmost vector8\nspecificationWord Rightmost32_8 = Prog.rightmost vector4\nspecificationWord Rightmost32_16 = Prog.rightmost vector2\nspecificationWord Rightmost64_1 = Prog.rightmost vector64\nspecificationWord Rightmost64_2 = Prog.rightmost vector32\nspecificationWord Rightmost64_4 = Prog.rightmost vector16\nspecificationWord Rightmost64_8 = Prog.rightmost vector8\nspecificationWord Rightmost64_16 = Prog.rightmost vector4\nspecificationWord Rightmost64_32 = Prog.rightmost vector2\nspecificationWord LeftPadLow1_8 = Prog.left_pad_low word1 vector8\nspecificationWord LeftPadLow1_16 = Prog.left_pad_low word1 vector16\nspecificationWord LeftPadLow8_16 = Prog.left_pad_low word8 vector2\nspecificationWord LeftPadLow1_32 = Prog.left_pad_low word1 vector32\nspecificationWord LeftPadLow8_32 = Prog.left_pad_low word8 vector4\nspecificationWord LeftPadLow16_32 = Prog.left_pad_low word16 vector2\nspecificationWord LeftPadLow1_64 = Prog.left_pad_low word1 vector64\nspecificationWord LeftPadLow8_64 = Prog.left_pad_low word8 vector8\nspecificationWord LeftPadLow16_64 = Prog.left_pad_low word16 vector4\nspecificationWord LeftPadLow32_64 = Prog.left_pad_low word32 vector2\nspecificationWord LeftPadHigh1_8 = Prog.left_pad_high word1 vector8\nspecificationWord LeftPadHigh1_16 = Prog.left_pad_high word1 vector16\nspecificationWord LeftPadHigh8_16 = Prog.left_pad_high word8 vector2\nspecificationWord LeftPadHigh1_32 = Prog.left_pad_high word1 vector32\nspecificationWord LeftPadHigh8_32 = Prog.left_pad_high word8 vector4\nspecificationWord LeftPadHigh16_32 = Prog.left_pad_high word16 vector2\nspecificationWord LeftPadHigh1_64 = Prog.left_pad_high word1 vector64\nspecificationWord LeftPadHigh8_64 = Prog.left_pad_high word8 vector8\nspecificationWord LeftPadHigh16_64 = Prog.left_pad_high word16 vector4\nspecificationWord LeftPadHigh32_64 = Prog.left_pad_high word32 vector2\nspecificationWord LeftExtend1_8 = Prog.left_extend word1 vector8\nspecificationWord LeftExtend1_16 = Prog.left_extend word1 vector16\nspecificationWord LeftExtend8_16 = Prog.left_extend word8 vector2\nspecificationWord LeftExtend1_32 = Prog.left_extend word1 vector32\nspecificationWord LeftExtend8_32 = Prog.left_extend word8 vector4\nspecificationWord LeftExtend16_32 = Prog.left_extend word16 vector2\nspecificationWord LeftExtend1_64 = Prog.left_extend word1 vector64\nspecificationWord LeftExtend8_64 = Prog.left_extend word8 vector8\nspecificationWord LeftExtend16_64 = Prog.left_extend word16 vector4\nspecificationWord LeftExtend32_64 = Prog.left_extend word32 vector2\nspecificationWord RightPadLow1_8 = Prog.right_pad_low word1 vector8\nspecificationWord RightPadLow1_16 = Prog.right_pad_low word1 vector16\nspecificationWord RightPadLow8_16 = Prog.right_pad_low word8 vector2\nspecificationWord RightPadLow1_32 = Prog.right_pad_low word1 vector32\nspecificationWord RightPadLow8_32 = Prog.right_pad_low word8 vector4\nspecificationWord RightPadLow16_32 = Prog.right_pad_low word16 vector2\nspecificationWord RightPadLow1_64 = Prog.right_pad_low word1 vector64\nspecificationWord RightPadLow8_64 = Prog.right_pad_low word8 vector8\nspecificationWord RightPadLow16_64 = Prog.right_pad_low word16 vector4\nspecificationWord RightPadLow32_64 = Prog.right_pad_low word32 vector2\nspecificationWord RightPadHigh1_8 = Prog.right_pad_high word1 vector8\nspecificationWord RightPadHigh1_16 = Prog.right_pad_high word1 vector16\nspecificationWord RightPadHigh8_16 = Prog.right_pad_high word8 vector2\nspecificationWord RightPadHigh1_32 = Prog.right_pad_high word1 vector32\nspecificationWord RightPadHigh8_32 = Prog.right_pad_high word8 vector4\nspecificationWord RightPadHigh16_32 = Prog.right_pad_high word16 vector2\nspecificationWord RightPadHigh1_64 = Prog.right_pad_high word1 vector64\nspecificationWord RightPadHigh8_64 = Prog.right_pad_high word8 vector8\nspecificationWord RightPadHigh16_64 = Prog.right_pad_high word16 vector4\nspecificationWord RightPadHigh32_64 = Prog.right_pad_high word32 vector2\nspecificationWord RightExtend8_16 = Prog.right_extend word8 vector2\nspecificationWord RightExtend8_32 = Prog.right_extend word8 vector4\nspecificationWord RightExtend16_32 = Prog.right_extend word16 vector2\nspecificationWord RightExtend8_64 = Prog.right_extend word8 vector8\nspecificationWord RightExtend16_64 = Prog.right_extend word16 vector4\nspecificationWord RightExtend32_64 = Prog.right_extend word32 vector2\nspecificationWord LeftShiftWith8 = Prog.left_shift_with word4 word8\nspecificationWord LeftShiftWith16 = Prog.left_shift_with word4 word16\nspecificationWord LeftShiftWith32 = Prog.left_shift_with word8 word32\nspecificationWord LeftShiftWith64 = Prog.left_shift_with word8 word64\nspecificationWord LeftShift8 = Prog.left_shift word4 word8\nspecificationWord LeftShift16 = Prog.left_shift word4 word16\nspecificationWord LeftShift32 = Prog.left_shift word8 word32\nspecificationWord LeftShift64 = Prog.left_shift word8 word64\nspecificationWord RightShiftWith8 = Prog.right_shift_with word4 word8\nspecificationWord RightShiftWith16 = Prog.right_shift_with word4 word16\nspecificationWord RightShiftWith32 = Prog.right_shift_with word8 word32\nspecificationWord RightShiftWith64 = Prog.right_shift_with word8 word64\nspecificationWord RightShift8 = Prog.right_shift word4 word8\nspecificationWord RightShift16 = Prog.right_shift word4 word16\nspecificationWord RightShift32 = Prog.right_shift word8 word32\nspecificationWord RightShift64 = Prog.right_shift word8 word64\nspecificationWord LeftRotate8 = Prog.left_rotate word4 word8\nspecificationWord LeftRotate16 = Prog.left_rotate word4 word16\nspecificationWord LeftRotate32 = Prog.left_rotate word8 word32\nspecificationWord LeftRotate64 = Prog.left_rotate word8 word64\nspecificationWord RightRotate8 = Prog.right_rotate word4 word8\nspecificationWord RightRotate16 = Prog.right_rotate word4 word16\nspecificationWord RightRotate32 = Prog.right_rotate word8 word32\nspecificationWord RightRotate64 = Prog.right_rotate word8 word64\n\nspecificationArith :: Assert term => ArithJet a b -> term a b\nspecificationArith One8 = Prog.one word8\nspecificationArith One16 = Prog.one word16\nspecificationArith One32 = Prog.one word32\nspecificationArith One64 = Prog.one word64\nspecificationArith Add8 = Prog.add word8\nspecificationArith Add16 = Prog.add word16\nspecificationArith Add32 = Prog.add word32\nspecificationArith Add64 = Prog.add word64\nspecificationArith FullAdd8 = Prog.full_add word8\nspecificationArith FullAdd16 = Prog.full_add word16\nspecificationArith FullAdd32 = Prog.full_add word32\nspecificationArith FullAdd64 = Prog.full_add word64\nspecificationArith FullIncrement8 = Prog.full_increment word8\nspecificationArith FullIncrement16 = Prog.full_increment word16\nspecificationArith FullIncrement32 = Prog.full_increment word32\nspecificationArith FullIncrement64 = Prog.full_increment word64\nspecificationArith Increment8 = Prog.increment word8\nspecificationArith Increment16 = Prog.increment word16\nspecificationArith Increment32 = Prog.increment word32\nspecificationArith Increment64 = Prog.increment word64\nspecificationArith Subtract8 = Prog.subtract word8\nspecificationArith Subtract16 = Prog.subtract word16\nspecificationArith Subtract32 = Prog.subtract word32\nspecificationArith Subtract64 = Prog.subtract word64\nspecificationArith FullSubtract8 = Prog.full_subtract word8\nspecificationArith FullSubtract16 = Prog.full_subtract word16\nspecificationArith FullSubtract32 = Prog.full_subtract word32\nspecificationArith FullSubtract64 = Prog.full_subtract word64\nspecificationArith Negate8 = Prog.negate word8\nspecificationArith Negate16 = Prog.negate word16\nspecificationArith Negate32 = Prog.negate word32\nspecificationArith Negate64 = Prog.negate word64\nspecificationArith FullDecrement8 = Prog.full_decrement word8\nspecificationArith FullDecrement16 = Prog.full_decrement word16\nspecificationArith FullDecrement32 = Prog.full_decrement word32\nspecificationArith FullDecrement64 = Prog.full_decrement word64\nspecificationArith Decrement8 = Prog.decrement word8\nspecificationArith Decrement16 = Prog.decrement word16\nspecificationArith Decrement32 = Prog.decrement word32\nspecificationArith Decrement64 = Prog.decrement word64\nspecificationArith Multiply8 = Prog.multiply word8\nspecificationArith Multiply16 = Prog.multiply word16\nspecificationArith Multiply32 = Prog.multiply word32\nspecificationArith Multiply64 = Prog.multiply word64\nspecificationArith FullMultiply8 = Prog.full_multiply word8\nspecificationArith FullMultiply16 = Prog.full_multiply word16\nspecificationArith FullMultiply32 = Prog.full_multiply word32\nspecificationArith FullMultiply64 = Prog.full_multiply word64\nspecificationArith IsZero8 = Prog.is_zero word8\nspecificationArith IsZero16 = Prog.is_zero word16\nspecificationArith IsZero32 = Prog.is_zero word32\nspecificationArith IsZero64 = Prog.is_zero word64\nspecificationArith IsOne8 = Prog.is_one word8\nspecificationArith IsOne16 = Prog.is_one word16\nspecificationArith IsOne32 = Prog.is_one word32\nspecificationArith IsOne64 = Prog.is_one word64\nspecificationArith Le8 = Prog.le word8\nspecificationArith Le16 = Prog.le word16\nspecificationArith Le32 = Prog.le word32\nspecificationArith Le64 = Prog.le word64\nspecificationArith Lt8 = Prog.lt word8\nspecificationArith Lt16 = Prog.lt word16\nspecificationArith Lt32 = Prog.lt word32\nspecificationArith Lt64 = Prog.lt word64\nspecificationArith Min8 = Prog.min word8\nspecificationArith Min16 = Prog.min word16\nspecificationArith Min32 = Prog.min word32\nspecificationArith Min64 = Prog.min word64\nspecificationArith Max8 = Prog.max word8\nspecificationArith Max16 = Prog.max word16\nspecificationArith Max32 = Prog.max word32\nspecificationArith Max64 = Prog.max word64\nspecificationArith Median8 = Prog.median word8\nspecificationArith Median16 = Prog.median word16\nspecificationArith Median32 = Prog.median word32\nspecificationArith Median64 = Prog.median word64\nspecificationArith DivMod8 = Prog.div_mod word8\nspecificationArith DivMod16 = Prog.div_mod word16\nspecificationArith DivMod32 = Prog.div_mod word32\nspecificationArith DivMod64 = Prog.div_mod word64\nspecificationArith Divide8 = Prog.divide word8\nspecificationArith Divide16 = Prog.divide word16\nspecificationArith Divide32 = Prog.divide word32\nspecificationArith Divide64 = Prog.divide word64\nspecificationArith Modulo8 = Prog.modulo word8\nspecificationArith Modulo16 = Prog.modulo word16\nspecificationArith Modulo32 = Prog.modulo word32\nspecificationArith Modulo64 = Prog.modulo word64\nspecificationArith Divides8 = Prog.divides word8\nspecificationArith Divides16 = Prog.divides word16\nspecificationArith Divides32 = Prog.divides word32\nspecificationArith Divides64 = Prog.divides word64\nspecificationArith DivMod128_64 = Prog.div2n1n word64\n\nspecificationHash :: Assert term => HashJet a b -> term a b\nspecificationHash Sha256Block = Sha256.hashBlock\nspecificationHash Sha256Iv = Sha256.iv\nspecificationHash Sha256Ctx8Add1 = Sha256.ctx8Add1\nspecificationHash Sha256Ctx8Add2 = Sha256.ctx8Addn vector2\nspecificationHash Sha256Ctx8Add4 = Sha256.ctx8Addn vector4\nspecificationHash Sha256Ctx8Add8 = Sha256.ctx8Addn vector8\nspecificationHash Sha256Ctx8Add16 = Sha256.ctx8Addn vector16\nspecificationHash Sha256Ctx8Add32 = Sha256.ctx8Addn vector32\nspecificationHash Sha256Ctx8Add64 = Sha256.ctx8Addn vector64\nspecificationHash Sha256Ctx8Add128 = Sha256.ctx8Addn vector128\nspecificationHash Sha256Ctx8Add256 = Sha256.ctx8Addn vector256\nspecificationHash Sha256Ctx8Add512 = Sha256.ctx8Addn vector512\nspecificationHash Sha256Ctx8AddBuffer511 = Sha256.ctx8AddBuffer buffer511\nspecificationHash Sha256Ctx8Finalize = Sha256.ctx8Finalize\nspecificationHash Sha256Ctx8Init = Sha256.ctx8Init\n\nspecificationSecp256k1 :: Assert term => Secp256k1Jet a b -> term a b\nspecificationSecp256k1 FeNormalize = Secp256k1.fe_normalize\nspecificationSecp256k1 FeNegate = Secp256k1.fe_negate\nspecificationSecp256k1 FeAdd = Secp256k1.fe_add\nspecificationSecp256k1 FeSquare = Secp256k1.fe_square\nspecificationSecp256k1 FeMultiply = Secp256k1.fe_multiply\nspecificationSecp256k1 FeMultiplyBeta = Secp256k1.fe_multiply_beta\nspecificationSecp256k1 FeInvert = Secp256k1.fe_invert\nspecificationSecp256k1 FeSquareRoot = Secp256k1.fe_square_root\nspecificationSecp256k1 FeIsZero = Secp256k1.fe_is_zero\nspecificationSecp256k1 FeIsOdd = Secp256k1.fe_is_odd\nspecificationSecp256k1 ScalarNormalize = Secp256k1.scalar_normalize\nspecificationSecp256k1 ScalarNegate = Secp256k1.scalar_negate\nspecificationSecp256k1 ScalarAdd = Secp256k1.scalar_add\nspecificationSecp256k1 ScalarSquare = Secp256k1.scalar_square\nspecificationSecp256k1 ScalarMultiply = Secp256k1.scalar_multiply\nspecificationSecp256k1 ScalarMultiplyLambda = Secp256k1.scalar_multiply_lambda\nspecificationSecp256k1 ScalarInvert = Secp256k1.scalar_invert\nspecificationSecp256k1 ScalarIsZero = Secp256k1.scalar_is_zero\nspecificationSecp256k1 GejInfinity = Secp256k1.gej_infinity\nspecificationSecp256k1 GejNormalize = Secp256k1.gej_normalize\nspecificationSecp256k1 GejNegate = Secp256k1.gej_negate\nspecificationSecp256k1 GeNegate = Secp256k1.ge_negate\nspecificationSecp256k1 GejDouble = Secp256k1.gej_double\nspecificationSecp256k1 GejAdd = Secp256k1.gej_add\nspecificationSecp256k1 GejGeAddEx = Secp256k1.gej_ge_add_ex\nspecificationSecp256k1 GejGeAdd = Secp256k1.gej_ge_add\nspecificationSecp256k1 GejRescale = Secp256k1.gej_rescale\nspecificationSecp256k1 GejIsInfinity = Secp256k1.gej_is_infinity\nspecificationSecp256k1 GejEquiv = Secp256k1.gej_equiv\nspecificationSecp256k1 GejGeEquiv = Secp256k1.gej_ge_equiv\nspecificationSecp256k1 GejXEquiv = Secp256k1.gej_x_equiv\nspecificationSecp256k1 GejYIsOdd = Secp256k1.gej_y_is_odd\nspecificationSecp256k1 GejIsOnCurve = Secp256k1.gej_is_on_curve\nspecificationSecp256k1 GeIsOnCurve = Secp256k1.ge_is_on_curve\nspecificationSecp256k1 Generate = Secp256k1.generate\nspecificationSecp256k1 Scale = Secp256k1.scale\nspecificationSecp256k1 LinearCombination1 = Secp256k1.linear_combination_1\nspecificationSecp256k1 LinearVerify1 = Secp256k1.linear_verify_1\nspecificationSecp256k1 PointVerify1 = Secp256k1.point_verify_1\nspecificationSecp256k1 Decompress = Secp256k1.decompress\nspecificationSecp256k1 Swu = Secp256k1.swu\nspecificationSecp256k1 HashToCurve = Secp256k1.hash_to_curve\n\nspecificationSignature :: Assert term => SignatureJet a b -> term a b\nspecificationSignature CheckSigVerify = CheckSig.checkSigVerify\nspecificationSignature Bip0340Verify = Secp256k1.bip_0340_verify\n\nspecificationBitcoin :: Assert term => BitcoinJet a b -> term a b\nspecificationBitcoin ParseLock = TimeLock.parseLock\nspecificationBitcoin ParseSequence = TimeLock.parseSequence\nspecificationBitcoin TapdataInit = Sha256.tapdataInit\n\n-- | A jetted implementation for \"core\" jets.\n--\n-- @\n-- 'implementation' x === 'runKleisli' ('specification' x)\n-- @\nimplementation :: CoreJet a b -> a -> Maybe b\nimplementation (WordJet x) = implementationWord x\nimplementation (ArithJet x) = implementationArith x\nimplementation (HashJet x) = implementationHash x\nimplementation (Secp256k1Jet x) = implementationSecp256k1 x\nimplementation (SignatureJet x) = implementationSignature x\nimplementation (BitcoinJet x) = implementationBitcoin x\n\nimplementationWord :: WordJet a b -> a -> Maybe b\nimplementationWord Verify = either (const Nothing) Just\nimplementationWord Low1 = const . return $ toWord1 0\nimplementationWord Low8 = const . return $ toWord8 0\nimplementationWord Low16 = const . return $ toWord16 0\nimplementationWord Low32 = const . return $ toWord32 0\nimplementationWord Low64 = const . return $ toWord64 0\nimplementationWord High1 = const . return $ toWord1 (-1)\nimplementationWord High8 = const . return $ toWord8 (-1)\nimplementationWord High16 = const . return $ toWord16 (-1)\nimplementationWord High32 = const . return $ toWord32 (-1)\nimplementationWord High64 = const . return $ toWord64 (-1)\nimplementationWord Complement1 = \\x -> return (toWord1 (complement (fromWord1 x)))\nimplementationWord Complement8 = \\x -> return (toWord8 (complement (fromWord8 x)))\nimplementationWord Complement16 = \\x -> return (toWord16 (complement (fromWord16 x)))\nimplementationWord Complement32 = \\x -> return (toWord32 (complement (fromWord32 x)))\nimplementationWord Complement64 = \\x -> return (toWord64 (complement (fromWord64 x)))\nimplementationWord And1 = \\(x, y) -> return (toWord1 (fromWord1 x .&. fromWord1 y))\nimplementationWord And8 = \\(x, y) -> return (toWord8 (fromWord8 x .&. fromWord8 y))\nimplementationWord And16 = \\(x, y) -> return (toWord16 (fromWord16 x .&. fromWord16 y))\nimplementationWord And32 = \\(x, y) -> return (toWord32 (fromWord32 x .&. fromWord32 y))\nimplementationWord And64 = \\(x, y) -> return (toWord64 (fromWord64 x .&. fromWord64 y))\nimplementationWord Or1 = \\(x, y) -> return (toWord1 (fromWord1 x .|. fromWord1 y))\nimplementationWord Or8 = \\(x, y) -> return (toWord8 (fromWord8 x .|. fromWord8 y))\nimplementationWord Or16 = \\(x, y) -> return (toWord16 (fromWord16 x .|. fromWord16 y))\nimplementationWord Or32 = \\(x, y) -> return (toWord32 (fromWord32 x .|. fromWord32 y))\nimplementationWord Or64 = \\(x, y) -> return (toWord64 (fromWord64 x .|. fromWord64 y))\nimplementationWord Xor1 = \\(x, y) -> return (toWord1 (fromWord1 x `xor` fromWord1 y))\nimplementationWord Xor8 = \\(x, y) -> return (toWord8 (fromWord8 x `xor` fromWord8 y))\nimplementationWord Xor16 = \\(x, y) -> return (toWord16 (fromWord16 x `xor` fromWord16 y))\nimplementationWord Xor32 = \\(x, y) -> return (toWord32 (fromWord32 x `xor` fromWord32 y))\nimplementationWord Xor64 = \\(x, y) -> return (toWord64 (fromWord64 x `xor` fromWord64 y))\nimplementationWord Maj1 = \\(x, (y, z)) -> return (toWord1 (fromWord1 x .&. fromWord1 y\n                                                       .|. fromWord1 y .&. fromWord1 z\n                                                       .|. fromWord1 z .&. fromWord1 x))\nimplementationWord Maj8 = \\(x, (y, z)) -> return (toWord8 (fromWord8 x .&. fromWord8 y\n                                                       .|. fromWord8 y .&. fromWord8 z\n                                                       .|. fromWord8 z .&. fromWord8 x))\nimplementationWord Maj16 = \\(x, (y, z)) -> return (toWord16 (fromWord16 x .&. fromWord16 y\n                                                         .|. fromWord16 y .&. fromWord16 z\n                                                         .|. fromWord16 z .&. fromWord16 x))\nimplementationWord Maj32 = \\(x, (y, z)) -> return (toWord32 (fromWord32 x .&. fromWord32 y\n                                                         .|. fromWord32 y .&. fromWord32 z\n                                                         .|. fromWord32 z .&. fromWord32 x))\nimplementationWord Maj64 = \\(x, (y, z)) -> return (toWord64 (fromWord64 x .&. fromWord64 y\n                                                         .|. fromWord64 y .&. fromWord64 z\n                                                         .|. fromWord64 z .&. fromWord64 x))\nimplementationWord XorXor1 = \\(x, (y, z)) -> return (toWord1 (fromWord1 x `xor` fromWord1 y `xor` fromWord1 z))\nimplementationWord XorXor8 = \\(x, (y, z)) -> return (toWord8 (fromWord8 x `xor` fromWord8 y `xor` fromWord8 z))\nimplementationWord XorXor16 = \\(x, (y, z)) -> return (toWord16 (fromWord16 x `xor` fromWord16 y `xor` fromWord16 z))\nimplementationWord XorXor32 = \\(x, (y, z)) -> return (toWord32 (fromWord32 x `xor` fromWord32 y `xor` fromWord32 z))\nimplementationWord XorXor64 = \\(x, (y, z)) -> return (toWord64 (fromWord64 x `xor` fromWord64 y `xor` fromWord64 z))\nimplementationWord Ch1 = \\(x, (y, z)) -> return (toWord1 (fromWord1 x .&. fromWord1 y\n                                                      .|. complement (fromWord1 x) .&. fromWord1 z))\nimplementationWord Ch8 = \\(x, (y, z)) -> return (toWord8 (fromWord8 x .&. fromWord8 y\n                                                      .|. complement (fromWord8 x) .&. fromWord8 z))\nimplementationWord Ch16 = \\(x, (y, z)) -> return (toWord16 (fromWord16 x .&. fromWord16 y\n                                                        .|. complement (fromWord16 x) .&. fromWord16 z))\nimplementationWord Ch32 = \\(x, (y, z)) -> return (toWord32 (fromWord32 x .&. fromWord32 y\n                                                        .|. complement (fromWord32 x) .&. fromWord32 z))\nimplementationWord Ch64 = \\(x, (y, z)) -> return (toWord64 (fromWord64 x .&. fromWord64 y\n                                                        .|. complement (fromWord64 x) .&. fromWord64 z))\nimplementationWord Some1 = \\x -> do\n  let z = fromWord1 x /= 0\n  return (toBit z)\nimplementationWord Some8 = \\x -> do\n  let z = fromWord8 x /= 0\n  return (toBit z)\nimplementationWord Some16 = \\x -> do\n  let z = fromWord16 x /= 0\n  return (toBit z)\nimplementationWord Some32 = \\x -> do\n  let z = fromWord32 x /= 0\n  return (toBit z)\nimplementationWord Some64 = \\x -> do\n  let z = fromWord64 x /= 0\n  return (toBit z)\nimplementationWord All8 = \\x -> do\n  let z = fromWord8 x == 2^8 - 1\n  return (toBit z)\nimplementationWord All16 = \\x -> do\n  let z = fromWord16 x == 2^16 - 1\n  return (toBit z)\nimplementationWord All32 = \\x -> do\n  let z = fromWord32 x == 2^32 - 1\n  return (toBit z)\nimplementationWord All64 = \\x -> do\n  let z = fromWord64 x == 2^64 - 1\n  return (toBit z)\nimplementationWord Eq1 = \\(x, y) -> return (toBit (x == y))\nimplementationWord Eq8 = \\(x, y) -> return (toBit (x == y))\nimplementationWord Eq16 = \\(x, y) -> return (toBit (x == y))\nimplementationWord Eq32 = \\(x, y) -> return (toBit (x == y))\nimplementationWord Eq64 = \\(x, y) -> return (toBit (x == y))\nimplementationWord Eq256 = \\(x, y) -> return (toBit (x == y))\nimplementationWord FullLeftShift8_1 = \\(x, y) ->\n  return (toWord1 $ fromWord8 x `shift` (1-8), toWord8 $ fromWord8 x `shift` 1 .|. fromWord1 y)\nimplementationWord FullLeftShift8_2 = \\(x, y) ->\n  return (toWord2 $ fromWord8 x `shift` (2-8), toWord8 $ fromWord8 x `shift` 2 .|. fromWord2 y)\nimplementationWord FullLeftShift8_4 = \\(x, y) ->\n  return (toWord4 $ fromWord8 x `shift` (4-8), toWord8 $ fromWord8 x `shift` 4 .|. fromWord4 y)\nimplementationWord FullLeftShift16_1 = \\(x, y) ->\n  return (toWord1 $ fromWord16 x `shift` (1-16), toWord16 $ fromWord16 x `shift` 1 .|. fromWord1 y)\nimplementationWord FullLeftShift16_2 = \\(x, y) ->\n  return (toWord2 $ fromWord16 x `shift` (2-16), toWord16 $ fromWord16 x `shift` 2 .|. fromWord2 y)\nimplementationWord FullLeftShift16_4 = \\(x, y) ->\n  return (toWord4 $ fromWord16 x `shift` (4-16), toWord16 $ fromWord16 x `shift` 4 .|. fromWord4 y)\nimplementationWord FullLeftShift16_8 = \\(x, y) ->\n  return (toWord8 $ fromWord16 x `shift` (8-16), toWord16 $ fromWord16 x `shift` 8 .|. fromWord8 y)\nimplementationWord FullLeftShift32_1 = \\(x, y) ->\n  return (toWord1 $ fromWord32 x `shift` (1-32), toWord32 $ fromWord32 x `shift` 1 .|. fromWord1 y)\nimplementationWord FullLeftShift32_2 = \\(x, y) ->\n  return (toWord2 $ fromWord32 x `shift` (2-32), toWord32 $ fromWord32 x `shift` 2 .|. fromWord2 y)\nimplementationWord FullLeftShift32_4 = \\(x, y) ->\n  return (toWord4 $ fromWord32 x `shift` (4-32), toWord32 $ fromWord32 x `shift` 4 .|. fromWord4 y)\nimplementationWord FullLeftShift32_8 = \\(x, y) ->\n  return (toWord8 $ fromWord32 x `shift` (8-32), toWord32 $ fromWord32 x `shift` 8 .|. fromWord8 y)\nimplementationWord FullLeftShift32_16 = \\(x, y) ->\n  return (toWord16 $ fromWord32 x `shift` (16-32), toWord32 $ fromWord32 x `shift` 16 .|. fromWord16 y)\nimplementationWord FullLeftShift64_1 = \\(x, y) ->\n  return (toWord1 $ fromWord64 x `shift` (1-64), toWord64 $ fromWord64 x `shift` 1 .|. fromWord1 y)\nimplementationWord FullLeftShift64_2 = \\(x, y) ->\n  return (toWord2 $ fromWord64 x `shift` (2-64), toWord64 $ fromWord64 x `shift` 2 .|. fromWord2 y)\nimplementationWord FullLeftShift64_4 = \\(x, y) ->\n  return (toWord4 $ fromWord64 x `shift` (4-64), toWord64 $ fromWord64 x `shift` 4 .|. fromWord4 y)\nimplementationWord FullLeftShift64_8 = \\(x, y) ->\n  return (toWord8 $ fromWord64 x `shift` (8-64), toWord64 $ fromWord64 x `shift` 8 .|. fromWord8 y)\nimplementationWord FullLeftShift64_16 = \\(x, y) ->\n  return (toWord16 $ fromWord64 x `shift` (16-64), toWord64 $ fromWord64 x `shift` 16 .|. fromWord16 y)\nimplementationWord FullLeftShift64_32 = \\(x, y) ->\n  return (toWord32 $ fromWord64 x `shift` (32-64), toWord64 $ fromWord64 x `shift` 32 .|. fromWord32 y)\nimplementationWord FullRightShift8_1 = \\(x, y) ->\n  return (toWord8 $ fromWord1 x `shift` (8-1) .|. fromWord8 y `shift` (-1), toWord1 $ fromWord8 y)\nimplementationWord FullRightShift8_2 = \\(x, y) ->\n  return (toWord8 $ fromWord2 x `shift` (8-2) .|. fromWord8 y `shift` (-2), toWord2 $ fromWord8 y)\nimplementationWord FullRightShift8_4 = \\(x, y) ->\n  return (toWord8 $ fromWord4 x `shift` (8-4) .|. fromWord8 y `shift` (-4), toWord4 $ fromWord8 y)\nimplementationWord FullRightShift16_1 = \\(x, y) ->\n  return (toWord16 $ fromWord1 x `shift` (16-1) .|. fromWord16 y `shift` (-1), toWord1 $ fromWord16 y)\nimplementationWord FullRightShift16_2 = \\(x, y) ->\n  return (toWord16 $ fromWord2 x `shift` (16-2) .|. fromWord16 y `shift` (-2), toWord2 $ fromWord16 y)\nimplementationWord FullRightShift16_4 = \\(x, y) ->\n  return (toWord16 $ fromWord4 x `shift` (16-4) .|. fromWord16 y `shift` (-4), toWord4 $ fromWord16 y)\nimplementationWord FullRightShift16_8 = \\(x, y) ->\n  return (toWord16 $ fromWord8 x `shift` (16-8) .|. fromWord16 y `shift` (-8), toWord8 $ fromWord16 y)\nimplementationWord FullRightShift32_1 = \\(x, y) ->\n  return (toWord32 $ fromWord1 x `shift` (32-1) .|. fromWord32 y `shift` (-1), toWord1 $ fromWord32 y)\nimplementationWord FullRightShift32_2 = \\(x, y) ->\n  return (toWord32 $ fromWord2 x `shift` (32-2) .|. fromWord32 y `shift` (-2), toWord2 $ fromWord32 y)\nimplementationWord FullRightShift32_4 = \\(x, y) ->\n  return (toWord32 $ fromWord4 x `shift` (32-4) .|. fromWord32 y `shift` (-4), toWord4 $ fromWord32 y)\nimplementationWord FullRightShift32_8 = \\(x, y) ->\n  return (toWord32 $ fromWord8 x `shift` (32-8) .|. fromWord32 y `shift` (-8), toWord8 $ fromWord32 y)\nimplementationWord FullRightShift32_16 = \\(x, y) ->\n  return (toWord32 $ fromWord16 x `shift` (32-16) .|. fromWord32 y `shift` (-16), toWord16 $ fromWord32 y)\nimplementationWord FullRightShift64_1 = \\(x, y) ->\n  return (toWord64 $ fromWord1 x `shift` (64-1) .|. fromWord64 y `shift` (-1), toWord1 $ fromWord64 y)\nimplementationWord FullRightShift64_2 = \\(x, y) ->\n  return (toWord64 $ fromWord2 x `shift` (64-2) .|. fromWord64 y `shift` (-2), toWord2 $ fromWord64 y)\nimplementationWord FullRightShift64_4 = \\(x, y) ->\n  return (toWord64 $ fromWord4 x `shift` (64-4) .|. fromWord64 y `shift` (-4), toWord4 $ fromWord64 y)\nimplementationWord FullRightShift64_8 = \\(x, y) ->\n  return (toWord64 $ fromWord8 x `shift` (64-8) .|. fromWord64 y `shift` (-8), toWord8 $ fromWord64 y)\nimplementationWord FullRightShift64_16 = \\(x, y) ->\n  return (toWord64 $ fromWord16 x `shift` (64-16) .|. fromWord64 y `shift` (-16), toWord16 $ fromWord64 y)\nimplementationWord FullRightShift64_32 = \\(x, y) ->\n  return (toWord64 $ fromWord32 x `shift` (64-32) .|. fromWord64 y `shift` (-32), toWord32 $ fromWord64 y)\nimplementationWord Leftmost8_1 = Just . fst . fst . fst\nimplementationWord Leftmost8_2 = Just . fst . fst\nimplementationWord Leftmost8_4 = Just . fst\nimplementationWord Leftmost16_1 = Just . fst . fst . fst . fst\nimplementationWord Leftmost16_2 = Just . fst . fst . fst\nimplementationWord Leftmost16_4 = Just . fst . fst\nimplementationWord Leftmost16_8 = Just . fst\nimplementationWord Leftmost32_1 = Just . fst . fst . fst . fst . fst\nimplementationWord Leftmost32_2 = Just . fst . fst . fst . fst\nimplementationWord Leftmost32_4 = Just . fst . fst . fst\nimplementationWord Leftmost32_8 = Just . fst . fst\nimplementationWord Leftmost32_16 = Just . fst\nimplementationWord Leftmost64_1 = Just . fst . fst . fst . fst . fst . fst\nimplementationWord Leftmost64_2 = Just . fst . fst . fst . fst . fst\nimplementationWord Leftmost64_4 = Just . fst . fst . fst . fst\nimplementationWord Leftmost64_8 = Just . fst . fst . fst\nimplementationWord Leftmost64_16 = Just . fst . fst\nimplementationWord Leftmost64_32 = Just . fst\nimplementationWord Rightmost8_1 = Just . snd . snd . snd\nimplementationWord Rightmost8_2 = Just . snd . snd\nimplementationWord Rightmost8_4 = Just . snd\nimplementationWord Rightmost16_1 = Just . snd . snd . snd . snd\nimplementationWord Rightmost16_2 = Just . snd . snd . snd\nimplementationWord Rightmost16_4 = Just . snd . snd\nimplementationWord Rightmost16_8 = Just . snd\nimplementationWord Rightmost32_1 = Just . snd . snd . snd . snd . snd\nimplementationWord Rightmost32_2 = Just . snd . snd . snd . snd\nimplementationWord Rightmost32_4 = Just . snd . snd . snd\nimplementationWord Rightmost32_8 = Just . snd . snd\nimplementationWord Rightmost32_16 = Just . snd\nimplementationWord Rightmost64_1 = Just . snd . snd . snd . snd . snd . snd\nimplementationWord Rightmost64_2 = Just . snd . snd . snd . snd . snd\nimplementationWord Rightmost64_4 = Just . snd . snd . snd . snd\nimplementationWord Rightmost64_8 = Just . snd . snd . snd\nimplementationWord Rightmost64_16 = Just . snd . snd\nimplementationWord Rightmost64_32 = Just . snd\nimplementationWord LeftPadLow1_8 = Just . toWord8 . fromWord1\nimplementationWord LeftPadLow1_16 = Just . toWord16 . fromWord1\nimplementationWord LeftPadLow8_16 = Just . toWord16 . fromWord8\nimplementationWord LeftPadLow1_32 = Just . toWord32 . fromWord1\nimplementationWord LeftPadLow8_32 = Just . toWord32 . fromWord8\nimplementationWord LeftPadLow16_32 = Just . toWord32 . fromWord16\nimplementationWord LeftPadLow1_64 = Just . toWord64 . fromWord1\nimplementationWord LeftPadLow8_64 = Just . toWord64 . fromWord8\nimplementationWord LeftPadLow16_64 = Just . toWord64 . fromWord16\nimplementationWord LeftPadLow32_64 = Just . toWord64 . fromWord32\nimplementationWord LeftPadHigh1_8 = \\x -> Just . toWord8 $ ((-1) `shift` 1) .|. fromWord1 x\nimplementationWord LeftPadHigh1_16 = \\x -> Just . toWord16 $ ((-1) `shift` 1) .|. fromWord1 x\nimplementationWord LeftPadHigh8_16 = \\x -> Just . toWord16 $ ((-1) `shift` 8) .|. fromWord8 x\nimplementationWord LeftPadHigh1_32 = \\x -> Just . toWord32 $ ((-1) `shift` 1) .|. fromWord1 x\nimplementationWord LeftPadHigh8_32 = \\x -> Just . toWord32 $ ((-1) `shift` 8) .|. fromWord8 x\nimplementationWord LeftPadHigh16_32 = \\x -> Just . toWord32 $ ((-1) `shift` 16) .|. fromWord16 x\nimplementationWord LeftPadHigh1_64 = \\x -> Just . toWord64 $ ((-1) `shift` 1) .|. fromWord1 x\nimplementationWord LeftPadHigh8_64 = \\x -> Just . toWord64 $ ((-1) `shift` 8) .|. fromWord8 x\nimplementationWord LeftPadHigh16_64 = \\x -> Just . toWord64 $ ((-1) `shift` 16) .|. fromWord16 x\nimplementationWord LeftPadHigh32_64 = \\x -> Just . toWord64 $ ((-1) `shift` 32) .|. fromWord32 x\nimplementationWord LeftExtend1_8 = Just . toWord8 . fromInt1\nimplementationWord LeftExtend1_16 = Just . toWord16 . fromInt1\nimplementationWord LeftExtend8_16 = Just . toWord16 . fromInt8\nimplementationWord LeftExtend1_32 = Just . toWord32 . fromInt1\nimplementationWord LeftExtend8_32 = Just . toWord32 . fromInt8\nimplementationWord LeftExtend16_32 = Just . toWord32 . fromInt16\nimplementationWord LeftExtend1_64 = Just . toWord64 . fromInt1\nimplementationWord LeftExtend8_64 = Just . toWord64 . fromInt8\nimplementationWord LeftExtend16_64 = Just . toWord64 . fromInt16\nimplementationWord LeftExtend32_64 = Just . toWord64 . fromInt32\nimplementationWord RightPadLow1_8 = \\x -> Just . toWord8 $ fromWord1 x `shift` (8 - 1)\nimplementationWord RightPadLow1_16 = \\x -> Just . toWord16 $ fromWord1 x `shift` (16 - 1)\nimplementationWord RightPadLow8_16 = \\x -> Just . toWord16 $ fromWord8 x `shift` (16 - 8)\nimplementationWord RightPadLow1_32 = \\x -> Just . toWord32 $ fromWord1 x `shift` (32 - 1)\nimplementationWord RightPadLow8_32 = \\x -> Just . toWord32 $ fromWord8 x `shift` (32 - 8)\nimplementationWord RightPadLow16_32 = \\x -> Just . toWord32 $ fromWord16 x `shift` (32 - 16)\nimplementationWord RightPadLow1_64 = \\x -> Just . toWord64 $ fromWord1 x `shift` (64 - 1)\nimplementationWord RightPadLow8_64 = \\x -> Just . toWord64 $ fromWord8 x `shift` (64 - 8)\nimplementationWord RightPadLow16_64 = \\x -> Just . toWord64 $ fromWord16 x `shift` (64 - 16)\nimplementationWord RightPadLow32_64 = \\x -> Just . toWord64 $ fromWord32 x `shift` (64 - 32)\nimplementationWord RightPadHigh1_8 = \\x -> Just . toWord8 $ (fromWord1 x `shift` (8 - 1) .|. (2^(8 - 1) - 1))\nimplementationWord RightPadHigh1_16 = \\x -> Just . toWord16 $ (fromWord1 x `shift` (16 - 1) .|. (2^(16 - 1) - 1))\nimplementationWord RightPadHigh8_16 = \\x -> Just . toWord16 $ (fromWord8 x `shift` (16 - 8) .|. (2^(16 - 8) - 1))\nimplementationWord RightPadHigh1_32 = \\x -> Just . toWord32 $ (fromWord1 x `shift` (32 - 1) .|. (2^(32 - 1) - 1))\nimplementationWord RightPadHigh8_32 = \\x -> Just . toWord32 $ (fromWord8 x `shift` (32 - 8) .|. (2^(32 - 8) - 1))\nimplementationWord RightPadHigh16_32 = \\x -> Just . toWord32 $ (fromWord16 x `shift` (32 - 16) .|. (2^(32 - 16) - 1))\nimplementationWord RightPadHigh1_64 = \\x -> Just . toWord64 $ (fromWord1 x `shift` (64 - 1) .|. (2^(64 - 1) - 1))\nimplementationWord RightPadHigh8_64 = \\x -> Just . toWord64 $ (fromWord8 x `shift` (64 - 8) .|. (2^(64 - 8) - 1))\nimplementationWord RightPadHigh16_64 = \\x -> Just . toWord64 $ (fromWord16 x `shift` (64 - 16) .|. (2^(64 - 16) - 1))\nimplementationWord RightPadHigh32_64 = \\x -> Just . toWord64 $ (fromWord32 x `shift` (64 - 32) .|. (2^(64 - 32) - 1))\nimplementationWord RightExtend8_16 = \\x -> Just . toWord16 $ (fromWord8 x `shift` (16 - 8) .|. if odd (fromWord8 x) then (2^(16 - 8) - 1) else 0)\nimplementationWord RightExtend8_32 = \\x -> Just . toWord32 $ (fromWord8 x `shift` (32 - 8) .|. if odd (fromWord8 x) then (2^(32 - 8) - 1) else 0)\nimplementationWord RightExtend16_32 = \\x -> Just . toWord32 $ (fromWord16 x `shift` (32 - 16) .|. if odd (fromWord16 x) then (2^(32 - 16) - 1) else 0)\nimplementationWord RightExtend8_64 = \\x -> Just . toWord64 $ (fromWord8 x `shift` (64 - 8) .|. if odd (fromWord8 x) then (2^(64 - 8) - 1) else 0)\nimplementationWord RightExtend16_64 = \\x -> Just . toWord64 $ (fromWord16 x `shift` (64 - 16) .|. if odd (fromWord16 x) then (2^(64 - 16) - 1) else 0)\nimplementationWord RightExtend32_64 = \\x -> Just . toWord64 $ (fromWord32 x `shift` (64 - 32) .|. if odd (fromWord32 x) then (2^(64 - 32) - 1) else 0)\nimplementationWord LeftShiftWith8 = \\(w,(x,y)) -> Just . toWord8 $ (fromWord8 y `shift` fromInteger (fromWord4 x)) .|. if fromBit w then (2^(fromWord4 x) -1) else 0\nimplementationWord LeftShiftWith16 = \\(w,(x,y)) -> Just . toWord16 $ (fromWord16 y `shift` fromInteger (fromWord4 x)) .|. if fromBit w then (2^(fromWord4 x) -1) else 0\nimplementationWord LeftShiftWith32 = \\(w,(x,y)) -> Just . toWord32 $ (fromWord32 y `shift` fromInteger (fromWord8 x)) .|. if fromBit w then (2^(fromWord8 x) -1) else 0\nimplementationWord LeftShiftWith64 = \\(w,(x,y)) -> Just . toWord64 $ (fromWord64 y `shift` fromInteger (fromWord8 x)) .|. if fromBit w then (2^(fromWord8 x) -1) else 0\nimplementationWord LeftShift8 = \\(x,y) -> Just . toWord8 $ fromWord8 y `shift` fromInteger (fromWord4 x)\nimplementationWord LeftShift16 = \\(x,y) -> Just . toWord16 $ fromWord16 y `shift` fromInteger (fromWord4 x)\nimplementationWord LeftShift32 = \\(x,y) -> Just . toWord32 $ fromWord32 y `shift` fromInteger (fromWord8 x)\nimplementationWord LeftShift64 = \\(x,y) -> Just . toWord64 $ fromWord64 y `shift` fromInteger (fromWord8 x)\nimplementationWord RightShiftWith8 = \\(w,(x,y)) -> Just . toWord8 $ (fromWord8 y `shift` fromInteger (-fromWord4 x)) .|. if fromBit w then ((-1 :: Integer) `shift` fromInteger (8-fromWord4 x)) else 0\nimplementationWord RightShiftWith16 = \\(w,(x,y)) -> Just . toWord16 $ (fromWord16 y `shift` fromInteger (-fromWord4 x)) .|. if fromBit w then ((-1 :: Integer) `shift` fromInteger (16-fromWord4 x)) else 0\nimplementationWord RightShiftWith32 = \\(w,(x,y)) -> Just . toWord32 $ (fromWord32 y `shift` fromInteger (-fromWord8 x)) .|. if fromBit w then ((-1 :: Integer) `shift` fromInteger (32-fromWord8 x)) else 0\nimplementationWord RightShiftWith64 = \\(w,(x,y)) -> Just . toWord64 $ (fromWord64 y `shift` fromInteger (-fromWord8 x)) .|. if fromBit w then ((-1 :: Integer) `shift` fromInteger (64-fromWord8 x)) else 0\nimplementationWord RightShift8 = \\(x,y) -> Just . toWord8 $ fromWord8 y `shift` fromInteger (-fromWord4 x)\nimplementationWord RightShift16 = \\(x,y) -> Just . toWord16 $ fromWord16 y `shift` fromInteger (-fromWord4 x)\nimplementationWord RightShift32 = \\(x,y) -> Just . toWord32 $ fromWord32 y `shift` fromInteger (-fromWord8 x)\nimplementationWord RightShift64 = \\(x,y) -> Just . toWord64 $ fromWord64 y `shift` fromInteger (-fromWord8 x)\nimplementationWord LeftRotate8 = \\(x,y) -> Just . toWord8 . toInteger $ (fromInteger (fromWord8 y) :: W.Word8) `rotate` fromInteger (fromWord4 x)\nimplementationWord LeftRotate16 = \\(x,y) -> Just . toWord16 . toInteger $ (fromInteger (fromWord16 y) :: W.Word16) `rotate` fromInteger (fromWord4 x)\nimplementationWord LeftRotate32 = \\(x,y) -> Just . toWord32 . toInteger $ (fromInteger (fromWord32 y) :: W.Word32) `rotate` fromInteger (fromWord8 x)\nimplementationWord LeftRotate64 = \\(x,y) -> Just . toWord64 . toInteger $ (fromInteger (fromWord64 y) :: W.Word64) `rotate` fromInteger (fromWord8 x)\nimplementationWord RightRotate8 = \\(x,y) -> Just . toWord8 . toInteger $ (fromInteger (fromWord8 y) :: W.Word8) `rotate` fromInteger (-fromWord4 x)\nimplementationWord RightRotate16 = \\(x,y) -> Just . toWord16 . toInteger $ (fromInteger (fromWord16 y) :: W.Word16) `rotate` fromInteger (-fromWord4 x)\nimplementationWord RightRotate32 = \\(x,y) -> Just . toWord32 . toInteger $ (fromInteger (fromWord32 y) :: W.Word32) `rotate` fromInteger (-fromWord8 x)\nimplementationWord RightRotate64 = \\(x,y) -> Just . toWord64 . toInteger $ (fromInteger (fromWord64 y) :: W.Word64) `rotate` fromInteger (-fromWord8 x)\n\nimplementationArith :: ArithJet a b -> a -> Maybe b\nimplementationArith One8 = const . return $ toWord8 1\nimplementationArith One16 = const . return $ toWord16 1\nimplementationArith One32 = const . return $ toWord32 1\nimplementationArith One64 = const . return $ toWord64 1\nimplementationArith Add8 = \\(x, y) -> do\n  let z = fromWord8 x + fromWord8 y\n  return (toBit (z >= 2 ^ 8), toWord8 z)\nimplementationArith Add16 = \\(x, y) -> do\n  let z = fromWord16 x + fromWord16 y\n  return (toBit (z >= 2 ^ 16), toWord16 z)\nimplementationArith Add32 = \\(x, y) -> do\n  let z = fromWord32 x + fromWord32 y\n  return (toBit (z >= 2 ^ 32), toWord32 z)\nimplementationArith Add64 = \\(x, y) -> do\n  let z = fromWord64 x + fromWord64 y\n  return (toBit (z >= 2 ^ 64), toWord64 z)\nimplementationArith FullAdd8 = \\(c, (x, y)) -> do\n  let z = fromWord8 x + fromWord8 y + fromWord1 c\n  return (toBit (z >= 2 ^ 8), toWord8 z)\nimplementationArith FullAdd16 = \\(c, (x, y)) -> do\n  let z = fromWord16 x + fromWord16 y + fromWord1 c\n  return (toBit (z >= 2 ^ 16), toWord16 z)\nimplementationArith FullAdd32 = \\(c, (x, y)) -> do\n  let z = fromWord32 x + fromWord32 y + fromWord1 c\n  return (toBit (z >= 2 ^ 32), toWord32 z)\nimplementationArith FullAdd64 = \\(c, (x, y)) -> do\n  let z = fromWord64 x + fromWord64 y + fromWord1 c\n  return (toBit (z >= 2 ^ 64), toWord64 z)\nimplementationArith FullIncrement8 = \\(b, x) -> do\n  let z = fromWord8 x + fromWord1 b\n  return (toBit (z >= 2 ^ 8), toWord8 z)\nimplementationArith FullIncrement16 = \\(b, x) -> do\n  let z = fromWord16 x + fromWord1 b\n  return (toBit (z >= 2 ^ 16), toWord16 z)\nimplementationArith FullIncrement32 = \\(b, x) -> do\n  let z = fromWord32 x + fromWord1 b\n  return (toBit (z >= 2 ^ 32), toWord32 z)\nimplementationArith FullIncrement64 = \\(b, x) -> do\n  let z = fromWord64 x + fromWord1 b\n  return (toBit (z >= 2 ^ 64), toWord64 z)\nimplementationArith Increment8 = \\x -> do\n  let z = fromWord8 x + 1\n  return (toBit (z >= 2 ^ 8), toWord8 z)\nimplementationArith Increment16 = \\x -> do\n  let z = fromWord16 x + 1\n  return (toBit (z >= 2 ^ 16), toWord16 z)\nimplementationArith Increment32 = \\x -> do\n  let z = fromWord32 x + 1\n  return (toBit (z >= 2 ^ 32), toWord32 z)\nimplementationArith Increment64 = \\x -> do\n  let z = fromWord64 x + 1\n  return (toBit (z >= 2 ^ 64), toWord64 z)\nimplementationArith Subtract8 = \\(x, y) -> do\n  let z = fromWord8 x - fromWord8 y\n  return (toBit (z < 0), toWord8 z)\nimplementationArith Subtract16 = \\(x, y) -> do\n  let z = fromWord16 x - fromWord16 y\n  return (toBit (z < 0), toWord16 z)\nimplementationArith Subtract32 = \\(x, y) -> do\n  let z = fromWord32 x - fromWord32 y\n  return (toBit (z < 0), toWord32 z)\nimplementationArith Subtract64 = \\(x, y) -> do\n  let z = fromWord64 x - fromWord64 y\n  return (toBit (z < 0), toWord64 z)\nimplementationArith FullSubtract8 = \\(b, (x, y)) -> do\n  let z = fromWord8 x - fromWord8 y - fromWord1 b\n  return (toBit (z < 0), toWord8 z)\nimplementationArith FullSubtract16 = \\(b, (x, y)) -> do\n  let z = fromWord16 x - fromWord16 y - fromWord1 b\n  return (toBit (z < 0), toWord16 z)\nimplementationArith FullSubtract32 = \\(b, (x, y)) -> do\n  let z = fromWord32 x - fromWord32 y - fromWord1 b\n  return (toBit (z < 0), toWord32 z)\nimplementationArith FullSubtract64 = \\(b, (x, y)) -> do\n  let z = fromWord64 x - fromWord64 y - fromWord1 b\n  return (toBit (z < 0), toWord64 z)\nimplementationArith Negate8 = \\x -> do\n  let z = - fromWord8 x\n  return (toBit (z < 0), toWord8 z)\nimplementationArith Negate16 = \\x -> do\n  let z = - fromWord16 x\n  return (toBit (z < 0), toWord16 z)\nimplementationArith Negate32 = \\x -> do\n  let z = - fromWord32 x\n  return (toBit (z < 0), toWord32 z)\nimplementationArith Negate64 = \\x -> do\n  let z = - fromWord64 x\n  return (toBit (z < 0), toWord64 z)\nimplementationArith FullDecrement8 = \\(b, x) -> do\n  let z = fromWord8 x - fromWord1 b\n  return (toBit (z < 0), toWord8 z)\nimplementationArith FullDecrement16 = \\(b, x) -> do\n  let z = fromWord16 x - fromWord1 b\n  return (toBit (z < 0), toWord16 z)\nimplementationArith FullDecrement32 = \\(b, x) -> do\n  let z = fromWord32 x - fromWord1 b\n  return (toBit (z < 0), toWord32 z)\nimplementationArith FullDecrement64 = \\(b, x) -> do\n  let z = fromWord64 x - fromWord1 b\n  return (toBit (z < 0), toWord64 z)\nimplementationArith Decrement8 = \\x -> do\n  let z = fromWord8 x - 1\n  return (toBit (z < 0), toWord8 z)\nimplementationArith Decrement16 = \\x -> do\n  let z = fromWord16 x - 1\n  return (toBit (z < 0), toWord16 z)\nimplementationArith Decrement32 = \\x -> do\n  let z = fromWord32 x - 1\n  return (toBit (z < 0), toWord32 z)\nimplementationArith Decrement64 = \\x -> do\n  let z = fromWord64 x - 1\n  return (toBit (z < 0), toWord64 z)\nimplementationArith Multiply8 = \\(x, y) -> do\n  let z = fromWord8 x * fromWord8 y\n  return (toWord16 z)\nimplementationArith Multiply16 = \\(x, y) -> do\n  let z = fromWord16 x * fromWord16 y\n  return (toWord32 z)\nimplementationArith Multiply32 = \\(x, y) -> do\n  let z = fromWord32 x * fromWord32 y\n  return (toWord64 z)\nimplementationArith Multiply64 = \\(x, y) -> do\n  let z = fromWord64 x * fromWord64 y\n  return (toWord128 z)\nimplementationArith FullMultiply8 = \\((x, y), (a, b)) -> do\n  let z = fromWord8 x * fromWord8 y + fromWord8 a + fromWord8 b\n  return (toWord16 z)\nimplementationArith FullMultiply16 = \\((x, y), (a, b)) -> do\n  let z = fromWord16 x * fromWord16 y + fromWord16 a + fromWord16 b\n  return (toWord32 z)\nimplementationArith FullMultiply32 = \\((x, y), (a, b)) -> do\n  let z = fromWord32 x * fromWord32 y + fromWord32 a + fromWord32 b\n  return (toWord64 z)\nimplementationArith FullMultiply64 = \\((x, y), (a, b)) -> do\n  let z = fromWord64 x * fromWord64 y + fromWord64 a + fromWord64 b\n  return (toWord128 z)\nimplementationArith IsZero8 = \\x -> do\n  let z = fromWord8 x == 0\n  return (toBit z)\nimplementationArith IsZero16 = \\x -> do\n  let z = fromWord16 x == 0\n  return (toBit z)\nimplementationArith IsZero32 = \\x -> do\n  let z = fromWord32 x == 0\n  return (toBit z)\nimplementationArith IsZero64 = \\x -> do\n  let z = fromWord64 x == 0\n  return (toBit z)\nimplementationArith IsOne8 = \\x -> do\n  let z = fromWord8 x == 1\n  return (toBit z)\nimplementationArith IsOne16 = \\x -> do\n  let z = fromWord16 x == 1\n  return (toBit z)\nimplementationArith IsOne32 = \\x -> do\n  let z = fromWord32 x == 1\n  return (toBit z)\nimplementationArith IsOne64 = \\x -> do\n  let z = fromWord64 x == 1\n  return (toBit z)\nimplementationArith Le8 = \\(x, y) -> do\n  let z = fromWord8 x <= fromWord8 y\n  return (toBit z)\nimplementationArith Le16 = \\(x, y) -> do\n  let z = fromWord16 x <= fromWord16 y\n  return (toBit z)\nimplementationArith Le32 = \\(x, y) -> do\n  let z = fromWord32 x <= fromWord32 y\n  return (toBit z)\nimplementationArith Le64 = \\(x, y) -> do\n  let z = fromWord64 x <= fromWord64 y\n  return (toBit z)\nimplementationArith Lt8 = \\(x, y) -> do\n  let z = fromWord8 x < fromWord8 y\n  return (toBit z)\nimplementationArith Lt16 = \\(x, y) -> do\n  let z = fromWord16 x < fromWord16 y\n  return (toBit z)\nimplementationArith Lt32 = \\(x, y) -> do\n  let z = fromWord32 x < fromWord32 y\n  return (toBit z)\nimplementationArith Lt64 = \\(x, y) -> do\n  let z = fromWord64 x < fromWord64 y\n  return (toBit z)\nimplementationArith Min8 = \\(x, y) -> do\n  let z = Prelude.min (fromWord8 x) (fromWord8 y)\n  return (toWord8 z)\nimplementationArith Min16 = \\(x, y) -> do\n  let z = Prelude.min (fromWord16 x) (fromWord16 y)\n  return (toWord16 z)\nimplementationArith Min32 = \\(x, y) -> do\n  let z = Prelude.min (fromWord32 x) (fromWord32 y)\n  return (toWord32 z)\nimplementationArith Min64 = \\(x, y) -> do\n  let z = Prelude.min (fromWord64 x) (fromWord64 y)\n  return (toWord64 z)\nimplementationArith Max8 = \\(x, y) -> do\n  let z = Prelude.max (fromWord8 x) (fromWord8 y)\n  return (toWord8 z)\nimplementationArith Max16 = \\(x, y) -> do\n  let z = Prelude.max (fromWord16 x) (fromWord16 y)\n  return (toWord16 z)\nimplementationArith Max32 = \\(x, y) -> do\n  let z = Prelude.max (fromWord32 x) (fromWord32 y)\n  return (toWord32 z)\nimplementationArith Max64 = \\(x, y) -> do\n  let z = Prelude.max (fromWord64 x) (fromWord64 y)\n  return (toWord64 z)\nimplementationArith Median8 = \\(x, (y, z)) -> do\n  let r = median (fromWord8 x) (fromWord8 y) (fromWord8 z)\n  return (toWord8 r)\nimplementationArith Median16 = \\(x, (y, z)) -> do\n  let r = median (fromWord16 x) (fromWord16 y) (fromWord16 z)\n  return (toWord16 r)\nimplementationArith Median32 = \\(x, (y, z)) -> do\n  let r = median (fromWord32 x) (fromWord32 y) (fromWord32 z)\n  return (toWord32 r)\nimplementationArith Median64 = \\(x, (y, z)) -> do\n  let r = median (fromWord64 x) (fromWord64 y) (fromWord64 z)\n  return (toWord64 r)\nimplementationArith DivMod8 = \\(x, y) -> do\n  let (d,m) = Prelude.divMod (fromWord8 x) (fromWord8 y)\n  return (if 0 == fromWord8 y then (y, x) else (toWord8 d, toWord8 m))\nimplementationArith DivMod16 = \\(x, y) -> do\n  let (d,m) = Prelude.divMod (fromWord16 x) (fromWord16 y)\n  return (if 0 == fromWord16 y then (y, x) else (toWord16 d, toWord16 m))\nimplementationArith DivMod32 = \\(x, y) -> do\n  let (d,m) = Prelude.divMod (fromWord32 x) (fromWord32 y)\n  return (if 0 == fromWord32 y then (y, x) else (toWord32 d, toWord32 m))\nimplementationArith DivMod64 = \\(x, y) -> do\n  let (d,m) = Prelude.divMod (fromWord64 x) (fromWord64 y)\n  return (if 0 == fromWord64 y then (y, x) else (toWord64 d, toWord64 m))\nimplementationArith Divide8 = \\(x, y) -> do\n  let z = Prelude.div (fromWord8 x) (fromWord8 y)\n  return (if 0 == fromWord8 y then y else toWord8 z)\nimplementationArith Divide16 = \\(x, y) -> do\n  let z = Prelude.div (fromWord16 x) (fromWord16 y)\n  return (if 0 == fromWord16 y then y else toWord16 z)\nimplementationArith Divide32 = \\(x, y) -> do\n  let z = Prelude.div (fromWord32 x) (fromWord32 y)\n  return (if 0 == fromWord32 y then y else toWord32 z)\nimplementationArith Divide64 = \\(x, y) -> do\n  let z = Prelude.div (fromWord64 x) (fromWord64 y)\n  return (if 0 == fromWord64 y then y else toWord64 z)\nimplementationArith Modulo8 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord8 x) (fromWord8 y)\n  return (if 0 == fromWord8 y then x else toWord8 z)\nimplementationArith Modulo16 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord16 x) (fromWord16 y)\n  return (if 0 == fromWord16 y then x else toWord16 z)\nimplementationArith Modulo32 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord32 x) (fromWord32 y)\n  return (if 0 == fromWord32 y then x else toWord32 z)\nimplementationArith Modulo64 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord64 x) (fromWord64 y)\n  return (if 0 == fromWord64 y then x else toWord64 z)\nimplementationArith Divides8 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord8 y) (fromWord8 x)\n  return (toBit (0 == if 0 == fromWord8 x then fromWord8 y else z))\nimplementationArith Divides16 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord16 y) (fromWord16 x)\n  return (toBit (0 == if 0 == fromWord16 x then fromWord16 y else z))\nimplementationArith Divides32 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord32 y) (fromWord32 x)\n  return (toBit (0 == if 0 == fromWord32 x then fromWord32 y else z))\nimplementationArith Divides64 = \\(x, y) -> do\n  let z = Prelude.mod (fromWord64 y) (fromWord64 x)\n  return (toBit (0 == if 0 == fromWord64 x then fromWord64 y else z))\nimplementationArith DivMod128_64 = \\(x0, y0) -> do\n  let x = fromWord128 x0\n      y = fromWord64 y0\n      (d,m) = Prelude.divMod x y\n  return (if 2^63 <= y && x < y * 2^64 then (toWord64 d, toWord64 m) else (toWord64 (-1), toWord64 (-1)))\n\nimplementationHash :: HashJet a b -> a -> Maybe b\nimplementationHash = go\n where\n  go :: HashJet a b -> a -> Maybe b\n  go Sha256Block = \\(h, (b1, b2)) ->\n    Just . toWord256 . integerHash256 . ivHash $ compress (freeStart (fromHash h)) (fromHash b1, fromHash b2)\n  go Sha256Iv = const (Just . toWord256 . integerHash256 . ivHash $ noTagIv)\n  go Sha256Ctx8Add1 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack [fromInteger . fromWord8 $ v]))\n  go Sha256Ctx8Add2 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector2)))\n  go Sha256Ctx8Add4 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector4)))\n  go Sha256Ctx8Add8 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector8)))\n  go Sha256Ctx8Add16 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector16)))\n  go Sha256Ctx8Add32 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector32)))\n  go Sha256Ctx8Add64 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector64)))\n  go Sha256Ctx8Add128 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector128)))\n  go Sha256Ctx8Add256 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector256)))\n  go Sha256Ctx8Add512 = \\(ctx, v) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> v^..vector_ vector512)))\n  go Sha256Ctx8AddBuffer511 = \\(ctx, b) -> toCtx <$> (fromCtx ctx >>= flip ctxAdd (BS.pack (fromInteger . fromWord8 <$> b^..buffer_ buffer511)))\n  go Sha256Ctx8Finalize = \\ctx -> toWord256 . integerHash256 . ctxFinalize <$> fromCtx ctx\n  go Sha256Ctx8Init = const (Just . toCtx $ ctxInit)\n  fromHash = review (over be256) . fromIntegral . fromWord256\n  fromCtx (buffer, (count, midstate)) = ctxBuild (fromInteger . fromWord8 <$> buffer^..buffer_ buffer63)\n                                                 (fromWord64 count)\n                                                 (fromHash midstate)\n  toCtx ctx = (buffer, (count, midstate))\n   where\n    buffer = fst $ bufferFill buffer63 (toWord8 . fromIntegral <$> BS.unpack (ctxBuffer ctx))\n    count = toWord64 . fromIntegral $ ctxCounter ctx\n    midstate = toWord256 . integerHash256 . ivHash $ ctxIV ctx\n\nimplementationSecp256k1 :: Secp256k1Jet a b -> a -> Maybe b\nimplementationSecp256k1 FeNormalize = FFI.fe_normalize\nimplementationSecp256k1 FeNegate = FFI.fe_negate\nimplementationSecp256k1 FeAdd = FFI.fe_add\nimplementationSecp256k1 FeSquare = FFI.fe_square\nimplementationSecp256k1 FeMultiply = FFI.fe_multiply\nimplementationSecp256k1 FeMultiplyBeta = FFI.fe_multiply_beta\nimplementationSecp256k1 FeInvert = FFI.fe_invert\nimplementationSecp256k1 FeSquareRoot = FFI.fe_square_root\nimplementationSecp256k1 FeIsZero = FFI.fe_is_zero\nimplementationSecp256k1 FeIsOdd = FFI.fe_is_odd\nimplementationSecp256k1 ScalarNormalize = FFI.scalar_normalize\nimplementationSecp256k1 ScalarNegate = FFI.scalar_negate\nimplementationSecp256k1 ScalarAdd = FFI.scalar_add\nimplementationSecp256k1 ScalarSquare = FFI.scalar_square\nimplementationSecp256k1 ScalarMultiply = FFI.scalar_multiply\nimplementationSecp256k1 ScalarMultiplyLambda = FFI.scalar_multiply_lambda\nimplementationSecp256k1 ScalarInvert = FFI.scalar_invert\nimplementationSecp256k1 ScalarIsZero = FFI.scalar_is_zero\nimplementationSecp256k1 GejInfinity = FFI.gej_infinity\nimplementationSecp256k1 GejNormalize = FFI.gej_normalize\nimplementationSecp256k1 GejNegate = FFI.gej_negate\nimplementationSecp256k1 GeNegate = FFI.ge_negate\nimplementationSecp256k1 GejDouble = FFI.gej_double\nimplementationSecp256k1 GejAdd = FFI.gej_add\nimplementationSecp256k1 GejGeAddEx = FFI.gej_ge_add_ex\nimplementationSecp256k1 GejGeAdd = FFI.gej_ge_add\nimplementationSecp256k1 GejRescale = FFI.gej_rescale\nimplementationSecp256k1 GejIsInfinity = FFI.gej_is_infinity\nimplementationSecp256k1 GejEquiv = \\(a,b) -> return . toBit $ LibSecp256k1.gej_equiv (fromGEJ a) (fromGEJ b)\nimplementationSecp256k1 GejGeEquiv = \\(a,b) -> return . toBit $ LibSecp256k1.gej_ge_equiv (fromGEJ a) (fromGE b)\nimplementationSecp256k1 GejXEquiv = FFI.gej_x_equiv\nimplementationSecp256k1 GejYIsOdd = FFI.gej_y_is_odd\nimplementationSecp256k1 GejIsOnCurve = FFI.gej_is_on_curve\nimplementationSecp256k1 GeIsOnCurve = FFI.ge_is_on_curve\nimplementationSecp256k1 Generate = FFI.generate\nimplementationSecp256k1 Scale = FFI.scale\nimplementationSecp256k1 LinearCombination1 = FFI.linear_combination_1\nimplementationSecp256k1 LinearVerify1 = FFI.linear_verify_1\nimplementationSecp256k1 PointVerify1 = FFI.point_verify_1\nimplementationSecp256k1 Decompress = FFI.decompress\nimplementationSecp256k1 Swu = Just . toGE . LibSecp256k1.shallueVanDeWoestijne . fromFE\n where\n  toGE (LibSecp256k1.GE x y) = (toWord256 (LibSecp256k1.fe_repr x), toWord256 (LibSecp256k1.fe_repr y))\n  fromFE = LibSecp256k1.fe . fromWord256\nimplementationSecp256k1 HashToCurve = fmap toGE . LibSecp256k1.hash_to_curve . fromW256\n where\n  toGE (LibSecp256k1.GE x y) = (toWord256 (LibSecp256k1.fe_repr x), toWord256 (LibSecp256k1.fe_repr y))\n  fromW256 = fromInteger . fromWord256\n\nimplementationSignature :: SignatureJet a b -> a -> Maybe b\nimplementationSignature CheckSigVerify ((pk, (ir, h)), sig) = FFI.bip_0340_verify ((pk, msg), sig)\n  where\n   msg = toWord256 . integerHash256 $ sigHash (mkHash ir) (mkHash h)\n   mkHash = review (over be256) . fromInteger . fromWord256\nimplementationSignature Bip0340Verify a = FFI.bip_0340_verify a\n\nimplementationBitcoin :: BitcoinJet a b -> a -> Maybe b\nimplementationBitcoin ParseLock v = Just . (toW32 +++ toW32) . parseLock $ fromW32 v\n  where\n   toW32 = toWord32 . fromIntegral\n   fromW32 = fromInteger . fromWord32\nimplementationBitcoin ParseSequence v = Just . maybe (Left ()) (Right . (toW16 +++ toW16)) . parseSequence $ fromW32 v\n  where\n   toW16 = toWord16 . fromIntegral\n   fromW32 = fromInteger . fromWord32\nimplementationBitcoin TapdataInit v = toCtx <$> ctxAdd ctxInit (tag<>tag)\n where\n  tag = encode . bsHash . BSC.pack $ \"TapData\"\n  toCtx ctx = (buffer, (count, midstate))\n   where\n    buffer = fst $ bufferFill buffer63 (toWord8 . fromIntegral <$> BS.unpack (ctxBuffer ctx))\n    count = toWord64 . fromIntegral $ ctxCounter ctx\n    midstate = toWord256 . integerHash256 . ivHash $ ctxIV ctx\n\n-- | A canonical deserialization operation for \"core\" jets.  This can be used to help instantiate the 'Simplicity.JetType.getJetBit' method.\ngetJetBit :: (Monad m) => m Void -> m Bool -> m (SomeArrow CoreJet)\ngetJetBit = getCatalogue coreCatalogue\n\n-- | A 'Catalogue' of the core jets.  The structure informs the canonical serialization format for the jets.\ncoreCatalogue :: Catalogue (SomeArrow CoreJet)\ncoreCatalogue = Shelf\n  [ someArrowMap WordJet <$> wordBook\n  , someArrowMap ArithJet <$> arithBook\n  , someArrowMap HashJet <$> hashBook\n  , someArrowMap Secp256k1Jet <$> secp256k1Book\n  , someArrowMap SignatureJet <$> signatureBook\n  , Missing\n  , someArrowMap BitcoinJet <$> bitcoinBook\n  ]\nwordBook = Shelf\n  [ Item $ SomeArrow Verify\n  , lowBook\n  , highBook\n  , complementBook\n  , andBook\n  , orBook\n  , xorBook\n  , majBook\n  , xorXorBook\n  , chBook\n  , someBook\n  , allBook\n  , eqBook\n  , fullLeftShiftBook\n  , fullRightShiftBook\n  , leftmostBook\n  , rightmostBook\n  , leftPadLowBook\n  , leftPadHighBook\n  , leftExtendBook\n  , rightPadLowBook\n  , rightPadHighBook\n  , rightExtendBook\n  , leftShiftWithBook\n  , rightShiftWithBook\n  , leftShiftBook\n  , rightShiftBook\n  , leftRotateBook\n  , rightRotateBook\n  ]\nlowBook = Shelf\n  [ Item $ SomeArrow Low1\n  , Missing\n  , Item $ SomeArrow Low8\n  , Item $ SomeArrow Low16\n  , Item $ SomeArrow Low32\n  , Item $ SomeArrow Low64\n  ]\nhighBook = Shelf\n  [ Item $ SomeArrow High1\n  , Missing\n  , Item $ SomeArrow High8\n  , Item $ SomeArrow High16\n  , Item $ SomeArrow High32\n  , Item $ SomeArrow High64\n  ]\ncomplementBook = Shelf\n  [ Item $ SomeArrow Complement1\n  , Missing\n  , Item $ SomeArrow Complement8\n  , Item $ SomeArrow Complement16\n  , Item $ SomeArrow Complement32\n  , Item $ SomeArrow Complement64\n  ]\nandBook = Shelf\n  [ Item $ SomeArrow And1\n  , Missing\n  , Item $ SomeArrow And8\n  , Item $ SomeArrow And16\n  , Item $ SomeArrow And32\n  , Item $ SomeArrow And64\n  ]\norBook = Shelf\n  [ Item $ SomeArrow Or1\n  , Missing\n  , Item $ SomeArrow Or8\n  , Item $ SomeArrow Or16\n  , Item $ SomeArrow Or32\n  , Item $ SomeArrow Or64\n  ]\nxorBook = Shelf\n  [ Item $ SomeArrow Xor1\n  , Missing\n  , Item $ SomeArrow Xor8\n  , Item $ SomeArrow Xor16\n  , Item $ SomeArrow Xor32\n  , Item $ SomeArrow Xor64\n  ]\nmajBook = Shelf\n  [ Item $ SomeArrow Maj1\n  , Missing\n  , Item $ SomeArrow Maj8\n  , Item $ SomeArrow Maj16\n  , Item $ SomeArrow Maj32\n  , Item $ SomeArrow Maj64\n  ]\nxorXorBook = Shelf\n  [ Item $ SomeArrow XorXor1\n  , Missing\n  , Item $ SomeArrow XorXor8\n  , Item $ SomeArrow XorXor16\n  , Item $ SomeArrow XorXor32\n  , Item $ SomeArrow XorXor64\n  ]\nchBook = Shelf\n  [ Item $ SomeArrow Ch1\n  , Missing\n  , Item $ SomeArrow Ch8\n  , Item $ SomeArrow Ch16\n  , Item $ SomeArrow Ch32\n  , Item $ SomeArrow Ch64\n  ]\nsomeBook = Shelf\n  [ Item $ SomeArrow Some1\n  , Missing\n  , Item $ SomeArrow Some8\n  , Item $ SomeArrow Some16\n  , Item $ SomeArrow Some32\n  , Item $ SomeArrow Some64\n  ]\nallBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow All8\n  , Item $ SomeArrow All16\n  , Item $ SomeArrow All32\n  , Item $ SomeArrow All64\n  ]\neqBook = Shelf\n  [ Item $ SomeArrow Eq1\n  , Missing\n  , Item $ SomeArrow Eq8\n  , Item $ SomeArrow Eq16\n  , Item $ SomeArrow Eq32\n  , Item $ SomeArrow Eq64\n  , Missing\n  , Item $ SomeArrow Eq256\n  ]\nfullLeftShiftBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow FullLeftShift8_1\n    , Item $ SomeArrow FullLeftShift16_1\n    , Item $ SomeArrow FullLeftShift32_1\n    , Item $ SomeArrow FullLeftShift64_1\n    ]\n  , Shelf\n    [ Missing\n    , Item $ SomeArrow FullLeftShift8_2\n    , Item $ SomeArrow FullLeftShift16_2\n    , Item $ SomeArrow FullLeftShift32_2\n    , Item $ SomeArrow FullLeftShift64_2\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullLeftShift8_4\n    , Item $ SomeArrow FullLeftShift16_4\n    , Item $ SomeArrow FullLeftShift32_4\n    , Item $ SomeArrow FullLeftShift64_4\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullLeftShift16_8\n    , Item $ SomeArrow FullLeftShift32_8\n    , Item $ SomeArrow FullLeftShift64_8\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullLeftShift32_16\n    , Item $ SomeArrow FullLeftShift64_16\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullLeftShift64_32\n    ]\n  ]\nfullRightShiftBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow FullRightShift8_1\n    , Item $ SomeArrow FullRightShift16_1\n    , Item $ SomeArrow FullRightShift32_1\n    , Item $ SomeArrow FullRightShift64_1\n    ]\n  , Shelf\n    [ Missing\n    , Item $ SomeArrow FullRightShift8_2\n    , Item $ SomeArrow FullRightShift16_2\n    , Item $ SomeArrow FullRightShift32_2\n    , Item $ SomeArrow FullRightShift64_2\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullRightShift8_4\n    , Item $ SomeArrow FullRightShift16_4\n    , Item $ SomeArrow FullRightShift32_4\n    , Item $ SomeArrow FullRightShift64_4\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullRightShift16_8\n    , Item $ SomeArrow FullRightShift32_8\n    , Item $ SomeArrow FullRightShift64_8\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullRightShift32_16\n    , Item $ SomeArrow FullRightShift64_16\n    ]\n  , Shelf\n    [ Item $ SomeArrow FullRightShift64_32\n    ]\n  ]\nleftmostBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow Leftmost8_1\n    , Item $ SomeArrow Leftmost16_1\n    , Item $ SomeArrow Leftmost32_1\n    , Item $ SomeArrow Leftmost64_1\n    ]\n  , Shelf\n    [ Missing\n    , Item $ SomeArrow Leftmost8_2\n    , Item $ SomeArrow Leftmost16_2\n    , Item $ SomeArrow Leftmost32_2\n    , Item $ SomeArrow Leftmost64_2\n    ]\n  , Shelf\n    [ Item $ SomeArrow Leftmost8_4\n    , Item $ SomeArrow Leftmost16_4\n    , Item $ SomeArrow Leftmost32_4\n    , Item $ SomeArrow Leftmost64_4\n    ]\n  , Shelf\n    [ Item $ SomeArrow Leftmost16_8\n    , Item $ SomeArrow Leftmost32_8\n    , Item $ SomeArrow Leftmost64_8\n    ]\n  , Shelf\n    [ Item $ SomeArrow Leftmost32_16\n    , Item $ SomeArrow Leftmost64_16\n    ]\n  , Shelf\n    [ Item $ SomeArrow Leftmost64_32\n    ]\n  ]\nrightmostBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow Rightmost8_1\n    , Item $ SomeArrow Rightmost16_1\n    , Item $ SomeArrow Rightmost32_1\n    , Item $ SomeArrow Rightmost64_1\n    ]\n  , Shelf\n    [ Missing\n    , Item $ SomeArrow Rightmost8_2\n    , Item $ SomeArrow Rightmost16_2\n    , Item $ SomeArrow Rightmost32_2\n    , Item $ SomeArrow Rightmost64_2\n    ]\n  , Shelf\n    [ Item $ SomeArrow Rightmost8_4\n    , Item $ SomeArrow Rightmost16_4\n    , Item $ SomeArrow Rightmost32_4\n    , Item $ SomeArrow Rightmost64_4\n    ]\n  , Shelf\n    [ Item $ SomeArrow Rightmost16_8\n    , Item $ SomeArrow Rightmost32_8\n    , Item $ SomeArrow Rightmost64_8\n    ]\n  , Shelf\n    [ Item $ SomeArrow Rightmost32_16\n    , Item $ SomeArrow Rightmost64_16\n    ]\n  , Shelf\n    [ Item $ SomeArrow Rightmost64_32\n    ]\n  ]\nleftPadLowBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow LeftPadLow1_8\n    , Item $ SomeArrow LeftPadLow1_16\n    , Item $ SomeArrow LeftPadLow1_32\n    , Item $ SomeArrow LeftPadLow1_64\n    ]\n  , Missing\n  , Missing\n  , Shelf\n    [ Item $ SomeArrow LeftPadLow8_16\n    , Item $ SomeArrow LeftPadLow8_32\n    , Item $ SomeArrow LeftPadLow8_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow LeftPadLow16_32\n    , Item $ SomeArrow LeftPadLow16_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow LeftPadLow32_64\n    ]\n  ]\nleftPadHighBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow LeftPadHigh1_8\n    , Item $ SomeArrow LeftPadHigh1_16\n    , Item $ SomeArrow LeftPadHigh1_32\n    , Item $ SomeArrow LeftPadHigh1_64\n    ]\n  , Missing\n  , Missing\n  , Shelf\n    [ Item $ SomeArrow LeftPadHigh8_16\n    , Item $ SomeArrow LeftPadHigh8_32\n    , Item $ SomeArrow LeftPadHigh8_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow LeftPadHigh16_32\n    , Item $ SomeArrow LeftPadHigh16_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow LeftPadHigh32_64\n    ]\n  ]\nleftExtendBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow LeftExtend1_8\n    , Item $ SomeArrow LeftExtend1_16\n    , Item $ SomeArrow LeftExtend1_32\n    , Item $ SomeArrow LeftExtend1_64\n    ]\n  , Missing\n  , Missing\n  , Shelf\n    [ Item $ SomeArrow LeftExtend8_16\n    , Item $ SomeArrow LeftExtend8_32\n    , Item $ SomeArrow LeftExtend8_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow LeftExtend16_32\n    , Item $ SomeArrow LeftExtend16_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow LeftExtend32_64\n    ]\n  ]\nrightPadLowBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow RightPadLow1_8\n    , Item $ SomeArrow RightPadLow1_16\n    , Item $ SomeArrow RightPadLow1_32\n    , Item $ SomeArrow RightPadLow1_64\n    ]\n  , Missing\n  , Missing\n  , Shelf\n    [ Item $ SomeArrow RightPadLow8_16\n    , Item $ SomeArrow RightPadLow8_32\n    , Item $ SomeArrow RightPadLow8_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow RightPadLow16_32\n    , Item $ SomeArrow RightPadLow16_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow RightPadLow32_64\n    ]\n  ]\nrightPadHighBook = Shelf\n  [ Shelf\n    [ Missing\n    , Missing\n    , Item $ SomeArrow RightPadHigh1_8\n    , Item $ SomeArrow RightPadHigh1_16\n    , Item $ SomeArrow RightPadHigh1_32\n    , Item $ SomeArrow RightPadHigh1_64\n    ]\n  , Missing\n  , Missing\n  , Shelf\n    [ Item $ SomeArrow RightPadHigh8_16\n    , Item $ SomeArrow RightPadHigh8_32\n    , Item $ SomeArrow RightPadHigh8_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow RightPadHigh16_32\n    , Item $ SomeArrow RightPadHigh16_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow RightPadHigh32_64\n    ]\n  ]\nrightExtendBook = Shelf\n  [ Missing\n  , Missing\n  , Missing\n  , Shelf\n    [ Item $ SomeArrow RightExtend8_16\n    , Item $ SomeArrow RightExtend8_32\n    , Item $ SomeArrow RightExtend8_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow RightExtend16_32\n    , Item $ SomeArrow RightExtend16_64\n    ]\n  , Shelf\n    [ Item $ SomeArrow RightExtend32_64\n    ]\n  ]\nleftShiftWithBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow LeftShiftWith8\n  , Item $ SomeArrow LeftShiftWith16\n  , Item $ SomeArrow LeftShiftWith32\n  , Item $ SomeArrow LeftShiftWith64\n  ]\nrightShiftWithBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow RightShiftWith8\n  , Item $ SomeArrow RightShiftWith16\n  , Item $ SomeArrow RightShiftWith32\n  , Item $ SomeArrow RightShiftWith64\n  ]\nleftShiftBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow LeftShift8\n  , Item $ SomeArrow LeftShift16\n  , Item $ SomeArrow LeftShift32\n  , Item $ SomeArrow LeftShift64\n  ]\nrightShiftBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow RightShift8\n  , Item $ SomeArrow RightShift16\n  , Item $ SomeArrow RightShift32\n  , Item $ SomeArrow RightShift64\n  ]\nleftRotateBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow LeftRotate8\n  , Item $ SomeArrow LeftRotate16\n  , Item $ SomeArrow LeftRotate32\n  , Item $ SomeArrow LeftRotate64\n  ]\nrightRotateBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow RightRotate8\n  , Item $ SomeArrow RightRotate16\n  , Item $ SomeArrow RightRotate32\n  , Item $ SomeArrow RightRotate64\n  ]\narithBook = Shelf\n  [ oneBook\n  , fullAddBook\n  , addBook\n  , fullIncrementBook\n  , incrementBook\n  , Missing\n  , fullSubtractBook\n  , subtractBook\n  , negateBook\n  , fullDecrementBook\n  , decrementBook\n  , fullMultiplyBook\n  , multiplyBook\n  , isZeroBook\n  , isOneBook\n  , leBook\n  , ltBook\n  , minBook\n  , maxBook\n  , medianBook\n  , div2n1nBook\n  , divModBook\n  , divideBook\n  , moduloBook\n  , dividesBook\n  ]\noneBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow One8\n  , Item $ SomeArrow One16\n  , Item $ SomeArrow One32\n  , Item $ SomeArrow One64\n  ]\naddBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Add8\n  , Item $ SomeArrow Add16\n  , Item $ SomeArrow Add32\n  , Item $ SomeArrow Add64\n  ]\nfullAddBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow FullAdd8\n  , Item $ SomeArrow FullAdd16\n  , Item $ SomeArrow FullAdd32\n  , Item $ SomeArrow FullAdd64\n  ]\nfullIncrementBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow FullIncrement8\n  , Item $ SomeArrow FullIncrement16\n  , Item $ SomeArrow FullIncrement32\n  , Item $ SomeArrow FullIncrement64\n  ]\nincrementBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Increment8\n  , Item $ SomeArrow Increment16\n  , Item $ SomeArrow Increment32\n  , Item $ SomeArrow Increment64\n  ]\nsubtractBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Subtract8\n  , Item $ SomeArrow Subtract16\n  , Item $ SomeArrow Subtract32\n  , Item $ SomeArrow Subtract64\n  ]\nfullSubtractBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow FullSubtract8\n  , Item $ SomeArrow FullSubtract16\n  , Item $ SomeArrow FullSubtract32\n  , Item $ SomeArrow FullSubtract64\n  ]\nnegateBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Negate8\n  , Item $ SomeArrow Negate16\n  , Item $ SomeArrow Negate32\n  , Item $ SomeArrow Negate64\n  ]\nfullDecrementBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow FullDecrement8\n  , Item $ SomeArrow FullDecrement16\n  , Item $ SomeArrow FullDecrement32\n  , Item $ SomeArrow FullDecrement64\n  ]\ndecrementBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Decrement8\n  , Item $ SomeArrow Decrement16\n  , Item $ SomeArrow Decrement32\n  , Item $ SomeArrow Decrement64\n  ]\nmultiplyBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Multiply8\n  , Item $ SomeArrow Multiply16\n  , Item $ SomeArrow Multiply32\n  , Item $ SomeArrow Multiply64\n  ]\nfullMultiplyBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow FullMultiply8\n  , Item $ SomeArrow FullMultiply16\n  , Item $ SomeArrow FullMultiply32\n  , Item $ SomeArrow FullMultiply64\n  ]\nisZeroBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow IsZero8\n  , Item $ SomeArrow IsZero16\n  , Item $ SomeArrow IsZero32\n  , Item $ SomeArrow IsZero64\n  ]\nisOneBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow IsOne8\n  , Item $ SomeArrow IsOne16\n  , Item $ SomeArrow IsOne32\n  , Item $ SomeArrow IsOne64\n  ]\nleBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Le8\n  , Item $ SomeArrow Le16\n  , Item $ SomeArrow Le32\n  , Item $ SomeArrow Le64\n  ]\nltBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Lt8\n  , Item $ SomeArrow Lt16\n  , Item $ SomeArrow Lt32\n  , Item $ SomeArrow Lt64\n  ]\nminBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Min8\n  , Item $ SomeArrow Min16\n  , Item $ SomeArrow Min32\n  , Item $ SomeArrow Min64\n  ]\nmaxBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Max8\n  , Item $ SomeArrow Max16\n  , Item $ SomeArrow Max32\n  , Item $ SomeArrow Max64\n  ]\nmedianBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Median8\n  , Item $ SomeArrow Median16\n  , Item $ SomeArrow Median32\n  , Item $ SomeArrow Median64\n  ]\ndiv2n1nBook = Shelf\n  [ Missing\n  , Missing\n  , Missing\n  , Missing\n  , Missing\n  , Item $ SomeArrow DivMod128_64\n  ]\ndivModBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow DivMod8\n  , Item $ SomeArrow DivMod16\n  , Item $ SomeArrow DivMod32\n  , Item $ SomeArrow DivMod64\n  ]\ndivideBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Divide8\n  , Item $ SomeArrow Divide16\n  , Item $ SomeArrow Divide32\n  , Item $ SomeArrow Divide64\n  ]\nmoduloBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Modulo8\n  , Item $ SomeArrow Modulo16\n  , Item $ SomeArrow Modulo32\n  , Item $ SomeArrow Modulo64\n  ]\ndividesBook = Shelf\n  [ Missing\n  , Missing\n  , Item $ SomeArrow Divides8\n  , Item $ SomeArrow Divides16\n  , Item $ SomeArrow Divides32\n  , Item $ SomeArrow Divides64\n  ]\nhashBook = Shelf [sha2Book]\nsha2Book = Shelf\n  [ Item $ SomeArrow Sha256Block\n  , Item $ SomeArrow Sha256Iv\n  , sha2AddBook\n  , Item $ SomeArrow Sha256Ctx8AddBuffer511\n  , Item $ SomeArrow Sha256Ctx8Finalize\n  , Item $ SomeArrow Sha256Ctx8Init\n  ]\nsha2AddBook = book\n  [ SomeArrow Sha256Ctx8Add1\n  , SomeArrow Sha256Ctx8Add2\n  , SomeArrow Sha256Ctx8Add4\n  , SomeArrow Sha256Ctx8Add8\n  , SomeArrow Sha256Ctx8Add16\n  , SomeArrow Sha256Ctx8Add32\n  , SomeArrow Sha256Ctx8Add64\n  , SomeArrow Sha256Ctx8Add128\n  , SomeArrow Sha256Ctx8Add256\n  , SomeArrow Sha256Ctx8Add512\n  ]\nsecp256k1Book = Shelf\n  [ Shelf [Item $ SomeArrow PointVerify1]\n  , Item $ SomeArrow Decompress\n  , Shelf [Item $ SomeArrow LinearVerify1]\n  , Shelf [Item $ SomeArrow LinearCombination1]\n  , Item $ SomeArrow Scale\n  , Item $ SomeArrow Generate\n  , Item $ SomeArrow GejInfinity\n  , Item $ SomeArrow GejNormalize\n  , Item $ SomeArrow GejNegate\n  , Item $ SomeArrow GeNegate\n  , Item $ SomeArrow GejDouble\n  , Item $ SomeArrow GejAdd\n  , Item $ SomeArrow GejGeAddEx\n  , Item $ SomeArrow GejGeAdd\n  , Item $ SomeArrow GejRescale\n  , Item $ SomeArrow GejIsInfinity\n  , Item $ SomeArrow GejEquiv\n  , Item $ SomeArrow GejGeEquiv\n  , Item $ SomeArrow GejXEquiv\n  , Item $ SomeArrow GejYIsOdd\n  , Item $ SomeArrow GejIsOnCurve\n  , Item $ SomeArrow GeIsOnCurve\n  , Item $ SomeArrow ScalarNormalize\n  , Item $ SomeArrow ScalarNegate\n  , Item $ SomeArrow ScalarAdd\n  , Item $ SomeArrow ScalarSquare\n  , Item $ SomeArrow ScalarMultiply\n  , Item $ SomeArrow ScalarMultiplyLambda\n  , Item $ SomeArrow ScalarInvert\n  , Item $ SomeArrow ScalarIsZero\n  , Missing\n  , Missing\n  , Missing\n  , Missing\n  , Item $ SomeArrow FeNormalize\n  , Item $ SomeArrow FeNegate\n  , Item $ SomeArrow FeAdd\n  , Item $ SomeArrow FeSquare\n  , Item $ SomeArrow FeMultiply\n  , Item $ SomeArrow FeMultiplyBeta\n  , Item $ SomeArrow FeInvert\n  , Item $ SomeArrow FeSquareRoot\n  , Item $ SomeArrow FeIsZero\n  , Item $ SomeArrow FeIsOdd\n  , Missing\n  , Item $ SomeArrow HashToCurve\n  , Item $ SomeArrow Swu\n  ]\nsignatureBook = book\n  [ SomeArrow CheckSigVerify\n  , SomeArrow Bip0340Verify\n  ]\nbitcoinBook = book\n  [ SomeArrow ParseLock\n  , SomeArrow ParseSequence\n  , SomeArrow TapdataInit\n  ]\n\n-- | A canonical serialization operation for \"core\" jets.  This can be used to help instantiate the 'Simplicity.JetType.putJetBit' method.\nputJetBit :: CoreJet a b -> DList Bool\nputJetBit (WordJet x) = putPositive 1 . putJetBitWord x\nputJetBit (ArithJet x) = putPositive 2 . putJetBitArith x\nputJetBit (HashJet x) = putPositive 3 . putJetBitHash x\nputJetBit (Secp256k1Jet x) = putPositive 4 . putJetBitSecp256k1 x\nputJetBit (SignatureJet x) = putPositive 5 . putJetBitSignature x\nputJetBit (BitcoinJet x) = putPositive 7 . putJetBitBitcoin x\n\nputJetBitWord :: WordJet a b -> DList Bool\nputJetBitWord Verify = putPositive 1\nputJetBitWord Low1   = putPositive 2 . putPositive 1\nputJetBitWord Low8   = putPositive 2 . putPositive 3\nputJetBitWord Low16  = putPositive 2 . putPositive 4\nputJetBitWord Low32  = putPositive 2 . putPositive 5\nputJetBitWord Low64  = putPositive 2 . putPositive 6\nputJetBitWord High1   = putPositive 3 . putPositive 1\nputJetBitWord High8   = putPositive 3 . putPositive 3\nputJetBitWord High16  = putPositive 3 . putPositive 4\nputJetBitWord High32  = putPositive 3 . putPositive 5\nputJetBitWord High64  = putPositive 3 . putPositive 6\nputJetBitWord Complement1   = putPositive 4 . putPositive 1\nputJetBitWord Complement8   = putPositive 4 . putPositive 3\nputJetBitWord Complement16  = putPositive 4 . putPositive 4\nputJetBitWord Complement32  = putPositive 4 . putPositive 5\nputJetBitWord Complement64  = putPositive 4 . putPositive 6\nputJetBitWord And1   = putPositive 5 . putPositive 1\nputJetBitWord And8   = putPositive 5 . putPositive 3\nputJetBitWord And16  = putPositive 5 . putPositive 4\nputJetBitWord And32  = putPositive 5 . putPositive 5\nputJetBitWord And64  = putPositive 5 . putPositive 6\nputJetBitWord Or1   = putPositive 6 . putPositive 1\nputJetBitWord Or8   = putPositive 6 . putPositive 3\nputJetBitWord Or16  = putPositive 6 . putPositive 4\nputJetBitWord Or32  = putPositive 6 . putPositive 5\nputJetBitWord Or64  = putPositive 6 . putPositive 6\nputJetBitWord Xor1   = putPositive 7 . putPositive 1\nputJetBitWord Xor8   = putPositive 7 . putPositive 3\nputJetBitWord Xor16  = putPositive 7 . putPositive 4\nputJetBitWord Xor32  = putPositive 7 . putPositive 5\nputJetBitWord Xor64  = putPositive 7 . putPositive 6\nputJetBitWord Maj1   = putPositive 8 . putPositive 1\nputJetBitWord Maj8   = putPositive 8 . putPositive 3\nputJetBitWord Maj16  = putPositive 8 . putPositive 4\nputJetBitWord Maj32  = putPositive 8 . putPositive 5\nputJetBitWord Maj64  = putPositive 8 . putPositive 6\nputJetBitWord XorXor1   = putPositive 9 . putPositive 1\nputJetBitWord XorXor8   = putPositive 9 . putPositive 3\nputJetBitWord XorXor16  = putPositive 9 . putPositive 4\nputJetBitWord XorXor32  = putPositive 9 . putPositive 5\nputJetBitWord XorXor64  = putPositive 9 . putPositive 6\nputJetBitWord Ch1   = putPositive 10 . putPositive 1\nputJetBitWord Ch8   = putPositive 10 . putPositive 3\nputJetBitWord Ch16  = putPositive 10 . putPositive 4\nputJetBitWord Ch32  = putPositive 10 . putPositive 5\nputJetBitWord Ch64  = putPositive 10 . putPositive 6\nputJetBitWord Some1   = putPositive 11 . putPositive 1\nputJetBitWord Some8   = putPositive 11 . putPositive 3\nputJetBitWord Some16  = putPositive 11 . putPositive 4\nputJetBitWord Some32  = putPositive 11 . putPositive 5\nputJetBitWord Some64  = putPositive 11 . putPositive 6\nputJetBitWord All8   = putPositive 12 . putPositive 3\nputJetBitWord All16  = putPositive 12 . putPositive 4\nputJetBitWord All32  = putPositive 12 . putPositive 5\nputJetBitWord All64  = putPositive 12 . putPositive 6\nputJetBitWord Eq1    = putPositive 13 . putPositive 1\nputJetBitWord Eq8    = putPositive 13 . putPositive 3\nputJetBitWord Eq16   = putPositive 13 . putPositive 4\nputJetBitWord Eq32   = putPositive 13 . putPositive 5\nputJetBitWord Eq64   = putPositive 13 . putPositive 6\nputJetBitWord Eq256  = putPositive 13 . putPositive 8\nputJetBitWord FullLeftShift8_1  = putPositive 14 . putPositive 1 . putPositive 3\nputJetBitWord FullLeftShift8_2  = putPositive 14 . putPositive 2 . putPositive 2\nputJetBitWord FullLeftShift8_4  = putPositive 14 . putPositive 3 . putPositive 1\nputJetBitWord FullLeftShift16_1  = putPositive 14 . putPositive 1 . putPositive 4\nputJetBitWord FullLeftShift16_2  = putPositive 14 . putPositive 2 . putPositive 3\nputJetBitWord FullLeftShift16_4  = putPositive 14 . putPositive 3 . putPositive 2\nputJetBitWord FullLeftShift16_8  = putPositive 14 . putPositive 4 . putPositive 1\nputJetBitWord FullLeftShift32_1  = putPositive 14 . putPositive 1 . putPositive 5\nputJetBitWord FullLeftShift32_2  = putPositive 14 . putPositive 2 . putPositive 4\nputJetBitWord FullLeftShift32_4  = putPositive 14 . putPositive 3 . putPositive 3\nputJetBitWord FullLeftShift32_8  = putPositive 14 . putPositive 4 . putPositive 2\nputJetBitWord FullLeftShift32_16  = putPositive 14 . putPositive 5 . putPositive 1\nputJetBitWord FullLeftShift64_1  = putPositive 14 . putPositive 1 . putPositive 6\nputJetBitWord FullLeftShift64_2  = putPositive 14 . putPositive 2 . putPositive 5\nputJetBitWord FullLeftShift64_4  = putPositive 14 . putPositive 3 . putPositive 4\nputJetBitWord FullLeftShift64_8  = putPositive 14 . putPositive 4 . putPositive 3\nputJetBitWord FullLeftShift64_16  = putPositive 14 . putPositive 5 . putPositive 2\nputJetBitWord FullLeftShift64_32  = putPositive 14 . putPositive 6 . putPositive 1\nputJetBitWord FullRightShift8_1  = putPositive 15 . putPositive 1 . putPositive 3\nputJetBitWord FullRightShift8_2  = putPositive 15 . putPositive 2 . putPositive 2\nputJetBitWord FullRightShift8_4  = putPositive 15 . putPositive 3 . putPositive 1\nputJetBitWord FullRightShift16_1  = putPositive 15 . putPositive 1 . putPositive 4\nputJetBitWord FullRightShift16_2  = putPositive 15 . putPositive 2 . putPositive 3\nputJetBitWord FullRightShift16_4  = putPositive 15 . putPositive 3 . putPositive 2\nputJetBitWord FullRightShift16_8  = putPositive 15 . putPositive 4 . putPositive 1\nputJetBitWord FullRightShift32_1  = putPositive 15 . putPositive 1 . putPositive 5\nputJetBitWord FullRightShift32_2  = putPositive 15 . putPositive 2 . putPositive 4\nputJetBitWord FullRightShift32_4  = putPositive 15 . putPositive 3 . putPositive 3\nputJetBitWord FullRightShift32_8  = putPositive 15 . putPositive 4 . putPositive 2\nputJetBitWord FullRightShift32_16  = putPositive 15 . putPositive 5 . putPositive 1\nputJetBitWord FullRightShift64_1  = putPositive 15 . putPositive 1 . putPositive 6\nputJetBitWord FullRightShift64_2  = putPositive 15 . putPositive 2 . putPositive 5\nputJetBitWord FullRightShift64_4  = putPositive 15 . putPositive 3 . putPositive 4\nputJetBitWord FullRightShift64_8  = putPositive 15 . putPositive 4 . putPositive 3\nputJetBitWord FullRightShift64_16  = putPositive 15 . putPositive 5 . putPositive 2\nputJetBitWord FullRightShift64_32  = putPositive 15 . putPositive 6 . putPositive 1\nputJetBitWord Leftmost8_1  = putPositive 16 . putPositive 1 . putPositive 3\nputJetBitWord Leftmost8_2  = putPositive 16 . putPositive 2 . putPositive 2\nputJetBitWord Leftmost8_4  = putPositive 16 . putPositive 3 . putPositive 1\nputJetBitWord Leftmost16_1  = putPositive 16 . putPositive 1 . putPositive 4\nputJetBitWord Leftmost16_2  = putPositive 16 . putPositive 2 . putPositive 3\nputJetBitWord Leftmost16_4  = putPositive 16 . putPositive 3 . putPositive 2\nputJetBitWord Leftmost16_8  = putPositive 16 . putPositive 4 . putPositive 1\nputJetBitWord Leftmost32_1  = putPositive 16 . putPositive 1 . putPositive 5\nputJetBitWord Leftmost32_2  = putPositive 16 . putPositive 2 . putPositive 4\nputJetBitWord Leftmost32_4  = putPositive 16 . putPositive 3 . putPositive 3\nputJetBitWord Leftmost32_8  = putPositive 16 . putPositive 4 . putPositive 2\nputJetBitWord Leftmost32_16  = putPositive 16 . putPositive 5 . putPositive 1\nputJetBitWord Leftmost64_1  = putPositive 16 . putPositive 1 . putPositive 6\nputJetBitWord Leftmost64_2  = putPositive 16 . putPositive 2 . putPositive 5\nputJetBitWord Leftmost64_4  = putPositive 16 . putPositive 3 . putPositive 4\nputJetBitWord Leftmost64_8  = putPositive 16 . putPositive 4 . putPositive 3\nputJetBitWord Leftmost64_16  = putPositive 16 . putPositive 5 . putPositive 2\nputJetBitWord Leftmost64_32  = putPositive 16 . putPositive 6 . putPositive 1\nputJetBitWord Rightmost8_1  = putPositive 17 . putPositive 1 . putPositive 3\nputJetBitWord Rightmost8_2  = putPositive 17 . putPositive 2 . putPositive 2\nputJetBitWord Rightmost8_4  = putPositive 17 . putPositive 3 . putPositive 1\nputJetBitWord Rightmost16_1  = putPositive 17 . putPositive 1 . putPositive 4\nputJetBitWord Rightmost16_2  = putPositive 17 . putPositive 2 . putPositive 3\nputJetBitWord Rightmost16_4  = putPositive 17 . putPositive 3 . putPositive 2\nputJetBitWord Rightmost16_8  = putPositive 17 . putPositive 4 . putPositive 1\nputJetBitWord Rightmost32_1  = putPositive 17 . putPositive 1 . putPositive 5\nputJetBitWord Rightmost32_2  = putPositive 17 . putPositive 2 . putPositive 4\nputJetBitWord Rightmost32_4  = putPositive 17 . putPositive 3 . putPositive 3\nputJetBitWord Rightmost32_8  = putPositive 17 . putPositive 4 . putPositive 2\nputJetBitWord Rightmost32_16  = putPositive 17 . putPositive 5 . putPositive 1\nputJetBitWord Rightmost64_1  = putPositive 17 . putPositive 1 . putPositive 6\nputJetBitWord Rightmost64_2  = putPositive 17 . putPositive 2 . putPositive 5\nputJetBitWord Rightmost64_4  = putPositive 17 . putPositive 3 . putPositive 4\nputJetBitWord Rightmost64_8  = putPositive 17 . putPositive 4 . putPositive 3\nputJetBitWord Rightmost64_16  = putPositive 17 . putPositive 5 . putPositive 2\nputJetBitWord Rightmost64_32  = putPositive 17 . putPositive 6 . putPositive 1\nputJetBitWord LeftPadLow1_8  = putPositive 18 . putPositive 1 . putPositive 3\nputJetBitWord LeftPadLow1_16  = putPositive 18 . putPositive 1 . putPositive 4\nputJetBitWord LeftPadLow8_16  = putPositive 18 . putPositive 4 . putPositive 1\nputJetBitWord LeftPadLow1_32  = putPositive 18 . putPositive 1 . putPositive 5\nputJetBitWord LeftPadLow8_32  = putPositive 18 . putPositive 4 . putPositive 2\nputJetBitWord LeftPadLow16_32  = putPositive 18 . putPositive 5 . putPositive 1\nputJetBitWord LeftPadLow1_64  = putPositive 18 . putPositive 1 . putPositive 6\nputJetBitWord LeftPadLow8_64  = putPositive 18 . putPositive 4 . putPositive 3\nputJetBitWord LeftPadLow16_64  = putPositive 18 . putPositive 5 . putPositive 2\nputJetBitWord LeftPadLow32_64  = putPositive 18 . putPositive 6 . putPositive 1\nputJetBitWord LeftPadHigh1_8  = putPositive 19 . putPositive 1 . putPositive 3\nputJetBitWord LeftPadHigh1_16  = putPositive 19 . putPositive 1 . putPositive 4\nputJetBitWord LeftPadHigh8_16  = putPositive 19 . putPositive 4 . putPositive 1\nputJetBitWord LeftPadHigh1_32  = putPositive 19 . putPositive 1 . putPositive 5\nputJetBitWord LeftPadHigh8_32  = putPositive 19 . putPositive 4 . putPositive 2\nputJetBitWord LeftPadHigh16_32  = putPositive 19 . putPositive 5 . putPositive 1\nputJetBitWord LeftPadHigh1_64  = putPositive 19 . putPositive 1 . putPositive 6\nputJetBitWord LeftPadHigh8_64  = putPositive 19 . putPositive 4 . putPositive 3\nputJetBitWord LeftPadHigh16_64  = putPositive 19 . putPositive 5 . putPositive 2\nputJetBitWord LeftPadHigh32_64  = putPositive 19 . putPositive 6 . putPositive 1\nputJetBitWord LeftExtend1_8  = putPositive 20 . putPositive 1 . putPositive 3\nputJetBitWord LeftExtend1_16  = putPositive 20 . putPositive 1 . putPositive 4\nputJetBitWord LeftExtend8_16  = putPositive 20 . putPositive 4 . putPositive 1\nputJetBitWord LeftExtend1_32  = putPositive 20 . putPositive 1 . putPositive 5\nputJetBitWord LeftExtend8_32  = putPositive 20 . putPositive 4 . putPositive 2\nputJetBitWord LeftExtend16_32  = putPositive 20 . putPositive 5 . putPositive 1\nputJetBitWord LeftExtend1_64  = putPositive 20 . putPositive 1 . putPositive 6\nputJetBitWord LeftExtend8_64  = putPositive 20 . putPositive 4 . putPositive 3\nputJetBitWord LeftExtend16_64  = putPositive 20 . putPositive 5 . putPositive 2\nputJetBitWord LeftExtend32_64  = putPositive 20 . putPositive 6 . putPositive 1\nputJetBitWord RightPadLow1_8  = putPositive 21 . putPositive 1 . putPositive 3\nputJetBitWord RightPadLow1_16  = putPositive 21 . putPositive 1 . putPositive 4\nputJetBitWord RightPadLow8_16  = putPositive 21 . putPositive 4 . putPositive 1\nputJetBitWord RightPadLow1_32  = putPositive 21 . putPositive 1 . putPositive 5\nputJetBitWord RightPadLow8_32  = putPositive 21 . putPositive 4 . putPositive 2\nputJetBitWord RightPadLow16_32  = putPositive 21 . putPositive 5 . putPositive 1\nputJetBitWord RightPadLow1_64  = putPositive 21 . putPositive 1 . putPositive 6\nputJetBitWord RightPadLow8_64  = putPositive 21 . putPositive 4 . putPositive 3\nputJetBitWord RightPadLow16_64  = putPositive 21 . putPositive 5 . putPositive 2\nputJetBitWord RightPadLow32_64  = putPositive 21 . putPositive 6 . putPositive 1\nputJetBitWord RightPadHigh1_8  = putPositive 22 . putPositive 1 . putPositive 3\nputJetBitWord RightPadHigh1_16  = putPositive 22 . putPositive 1 . putPositive 4\nputJetBitWord RightPadHigh8_16  = putPositive 22 . putPositive 4 . putPositive 1\nputJetBitWord RightPadHigh1_32  = putPositive 22 . putPositive 1 . putPositive 5\nputJetBitWord RightPadHigh8_32  = putPositive 22 . putPositive 4 . putPositive 2\nputJetBitWord RightPadHigh16_32  = putPositive 22 . putPositive 5 . putPositive 1\nputJetBitWord RightPadHigh1_64  = putPositive 22 . putPositive 1 . putPositive 6\nputJetBitWord RightPadHigh8_64  = putPositive 22 . putPositive 4 . putPositive 3\nputJetBitWord RightPadHigh16_64  = putPositive 22 . putPositive 5 . putPositive 2\nputJetBitWord RightPadHigh32_64  = putPositive 22 . putPositive 6 . putPositive 1\nputJetBitWord RightExtend8_16  = putPositive 23 . putPositive 4 . putPositive 1\nputJetBitWord RightExtend8_32  = putPositive 23 . putPositive 4 . putPositive 2\nputJetBitWord RightExtend16_32  = putPositive 23 . putPositive 5 . putPositive 1\nputJetBitWord RightExtend8_64  = putPositive 23 . putPositive 4 . putPositive 3\nputJetBitWord RightExtend16_64  = putPositive 23 . putPositive 5 . putPositive 2\nputJetBitWord RightExtend32_64  = putPositive 23 . putPositive 6 . putPositive 1\nputJetBitWord LeftShiftWith8   = putPositive 24 . putPositive 3\nputJetBitWord LeftShiftWith16  = putPositive 24 . putPositive 4\nputJetBitWord LeftShiftWith32  = putPositive 24 . putPositive 5\nputJetBitWord LeftShiftWith64  = putPositive 24 . putPositive 6\nputJetBitWord RightShiftWith8  = putPositive 25 . putPositive 3\nputJetBitWord RightShiftWith16 = putPositive 25 . putPositive 4\nputJetBitWord RightShiftWith32 = putPositive 25 . putPositive 5\nputJetBitWord RightShiftWith64 = putPositive 25 . putPositive 6\nputJetBitWord LeftShift8   = putPositive 26 . putPositive 3\nputJetBitWord LeftShift16  = putPositive 26 . putPositive 4\nputJetBitWord LeftShift32  = putPositive 26 . putPositive 5\nputJetBitWord LeftShift64  = putPositive 26 . putPositive 6\nputJetBitWord RightShift8  = putPositive 27 . putPositive 3\nputJetBitWord RightShift16 = putPositive 27 . putPositive 4\nputJetBitWord RightShift32 = putPositive 27 . putPositive 5\nputJetBitWord RightShift64 = putPositive 27 . putPositive 6\nputJetBitWord LeftRotate8  = putPositive 28 . putPositive 3\nputJetBitWord LeftRotate16 = putPositive 28 . putPositive 4\nputJetBitWord LeftRotate32 = putPositive 28 . putPositive 5\nputJetBitWord LeftRotate64 = putPositive 28 . putPositive 6\nputJetBitWord RightRotate8  = putPositive 29 . putPositive 3\nputJetBitWord RightRotate16 = putPositive 29 . putPositive 4\nputJetBitWord RightRotate32 = putPositive 29 . putPositive 5\nputJetBitWord RightRotate64 = putPositive 29 . putPositive 6\n\nputJetBitArith :: ArithJet a b -> DList Bool\nputJetBitArith One8   = putPositive 1 . putPositive 3\nputJetBitArith One16  = putPositive 1 . putPositive 4\nputJetBitArith One32  = putPositive 1 . putPositive 5\nputJetBitArith One64  = putPositive 1 . putPositive 6\nputJetBitArith FullAdd8   = putPositive 2 . putPositive 3\nputJetBitArith FullAdd16  = putPositive 2 . putPositive 4\nputJetBitArith FullAdd32  = putPositive 2 . putPositive 5\nputJetBitArith FullAdd64  = putPositive 2 . putPositive 6\nputJetBitArith Add8   = putPositive 3 . putPositive 3\nputJetBitArith Add16  = putPositive 3 . putPositive 4\nputJetBitArith Add32  = putPositive 3 . putPositive 5\nputJetBitArith Add64  = putPositive 3 . putPositive 6\nputJetBitArith FullIncrement8   = putPositive 4 . putPositive 3\nputJetBitArith FullIncrement16  = putPositive 4 . putPositive 4\nputJetBitArith FullIncrement32  = putPositive 4 . putPositive 5\nputJetBitArith FullIncrement64  = putPositive 4 . putPositive 6\nputJetBitArith Increment8   = putPositive 5 . putPositive 3\nputJetBitArith Increment16  = putPositive 5 . putPositive 4\nputJetBitArith Increment32  = putPositive 5 . putPositive 5\nputJetBitArith Increment64  = putPositive 5 . putPositive 6\nputJetBitArith FullSubtract8   = putPositive 7 . putPositive 3\nputJetBitArith FullSubtract16  = putPositive 7 . putPositive 4\nputJetBitArith FullSubtract32  = putPositive 7 . putPositive 5\nputJetBitArith FullSubtract64  = putPositive 7 . putPositive 6\nputJetBitArith Subtract8   = putPositive 8 . putPositive 3\nputJetBitArith Subtract16  = putPositive 8 . putPositive 4\nputJetBitArith Subtract32  = putPositive 8 . putPositive 5\nputJetBitArith Subtract64  = putPositive 8 . putPositive 6\nputJetBitArith Negate8   = putPositive 9 . putPositive 3\nputJetBitArith Negate16  = putPositive 9 . putPositive 4\nputJetBitArith Negate32  = putPositive 9 . putPositive 5\nputJetBitArith Negate64  = putPositive 9 . putPositive 6\nputJetBitArith FullDecrement8   = putPositive 10 . putPositive 3\nputJetBitArith FullDecrement16  = putPositive 10 . putPositive 4\nputJetBitArith FullDecrement32  = putPositive 10 . putPositive 5\nputJetBitArith FullDecrement64  = putPositive 10 . putPositive 6\nputJetBitArith Decrement8   = putPositive 11 . putPositive 3\nputJetBitArith Decrement16  = putPositive 11 . putPositive 4\nputJetBitArith Decrement32  = putPositive 11 . putPositive 5\nputJetBitArith Decrement64  = putPositive 11 . putPositive 6\nputJetBitArith FullMultiply8   = putPositive 12 . putPositive 3\nputJetBitArith FullMultiply16  = putPositive 12 . putPositive 4\nputJetBitArith FullMultiply32  = putPositive 12 . putPositive 5\nputJetBitArith FullMultiply64  = putPositive 12 . putPositive 6\nputJetBitArith Multiply8   = putPositive 13 . putPositive 3\nputJetBitArith Multiply16  = putPositive 13 . putPositive 4\nputJetBitArith Multiply32  = putPositive 13 . putPositive 5\nputJetBitArith Multiply64  = putPositive 13 . putPositive 6\nputJetBitArith IsZero8   = putPositive 14 . putPositive 3\nputJetBitArith IsZero16  = putPositive 14 . putPositive 4\nputJetBitArith IsZero32  = putPositive 14 . putPositive 5\nputJetBitArith IsZero64  = putPositive 14 . putPositive 6\nputJetBitArith IsOne8   = putPositive 15 . putPositive 3\nputJetBitArith IsOne16  = putPositive 15 . putPositive 4\nputJetBitArith IsOne32  = putPositive 15 . putPositive 5\nputJetBitArith IsOne64  = putPositive 15 . putPositive 6\nputJetBitArith Le8   = putPositive 16 . putPositive 3\nputJetBitArith Le16  = putPositive 16 . putPositive 4\nputJetBitArith Le32  = putPositive 16 . putPositive 5\nputJetBitArith Le64  = putPositive 16 . putPositive 6\nputJetBitArith Lt8   = putPositive 17 . putPositive 3\nputJetBitArith Lt16  = putPositive 17 . putPositive 4\nputJetBitArith Lt32  = putPositive 17 . putPositive 5\nputJetBitArith Lt64  = putPositive 17 . putPositive 6\nputJetBitArith Min8   = putPositive 18 . putPositive 3\nputJetBitArith Min16  = putPositive 18 . putPositive 4\nputJetBitArith Min32  = putPositive 18 . putPositive 5\nputJetBitArith Min64  = putPositive 18 . putPositive 6\nputJetBitArith Max8   = putPositive 19 . putPositive 3\nputJetBitArith Max16  = putPositive 19 . putPositive 4\nputJetBitArith Max32  = putPositive 19 . putPositive 5\nputJetBitArith Max64  = putPositive 19 . putPositive 6\nputJetBitArith Median8   = putPositive 20 . putPositive 3\nputJetBitArith Median16  = putPositive 20 . putPositive 4\nputJetBitArith Median32  = putPositive 20 . putPositive 5\nputJetBitArith Median64  = putPositive 20 . putPositive 6\nputJetBitArith DivMod128_64 = putPositive 21 . putPositive 6\nputJetBitArith DivMod8   = putPositive 22 . putPositive 3\nputJetBitArith DivMod16  = putPositive 22 . putPositive 4\nputJetBitArith DivMod32  = putPositive 22 . putPositive 5\nputJetBitArith DivMod64  = putPositive 22 . putPositive 6\nputJetBitArith Divide8   = putPositive 23 . putPositive 3\nputJetBitArith Divide16  = putPositive 23 . putPositive 4\nputJetBitArith Divide32  = putPositive 23 . putPositive 5\nputJetBitArith Divide64  = putPositive 23 . putPositive 6\nputJetBitArith Modulo8   = putPositive 24 . putPositive 3\nputJetBitArith Modulo16  = putPositive 24 . putPositive 4\nputJetBitArith Modulo32  = putPositive 24 . putPositive 5\nputJetBitArith Modulo64  = putPositive 24 . putPositive 6\nputJetBitArith Divides8   = putPositive 25 . putPositive 3\nputJetBitArith Divides16  = putPositive 25 . putPositive 4\nputJetBitArith Divides32  = putPositive 25 . putPositive 5\nputJetBitArith Divides64  = putPositive 25 . putPositive 6\n\nputJetBitHash :: HashJet a b -> DList Bool\nputJetBitHash Sha256Block = putPositive 1 . putPositive 1\nputJetBitHash Sha256Iv = putPositive 1 . putPositive 2\nputJetBitHash Sha256Ctx8Add1 = putPositive 1 . putPositive 3 . putPositive 1\nputJetBitHash Sha256Ctx8Add2 = putPositive 1 . putPositive 3 . putPositive 2\nputJetBitHash Sha256Ctx8Add4 = putPositive 1 . putPositive 3 . putPositive 3\nputJetBitHash Sha256Ctx8Add8 = putPositive 1 . putPositive 3 . putPositive 4\nputJetBitHash Sha256Ctx8Add16 = putPositive 1 . putPositive 3 . putPositive 5\nputJetBitHash Sha256Ctx8Add32 = putPositive 1 . putPositive 3 . putPositive 6\nputJetBitHash Sha256Ctx8Add64 = putPositive 1 . putPositive 3 . putPositive 7\nputJetBitHash Sha256Ctx8Add128 = putPositive 1 . putPositive 3 . putPositive 8\nputJetBitHash Sha256Ctx8Add256 = putPositive 1 . putPositive 3 . putPositive 9\nputJetBitHash Sha256Ctx8Add512 = putPositive 1 . putPositive 3 . putPositive 10\nputJetBitHash Sha256Ctx8AddBuffer511 = putPositive 1 . putPositive 4\nputJetBitHash Sha256Ctx8Finalize = putPositive 1 . putPositive 5\nputJetBitHash Sha256Ctx8Init = putPositive 1 . putPositive 6\n\nputJetBitSecp256k1 :: Secp256k1Jet a b -> DList Bool\nputJetBitSecp256k1 FeNormalize = putPositive 35\nputJetBitSecp256k1 FeNegate = putPositive 36\nputJetBitSecp256k1 FeAdd = putPositive 37\nputJetBitSecp256k1 FeSquare = putPositive 38\nputJetBitSecp256k1 FeMultiply = putPositive 39\nputJetBitSecp256k1 FeMultiplyBeta = putPositive 40\nputJetBitSecp256k1 FeInvert = putPositive 41\nputJetBitSecp256k1 FeSquareRoot = putPositive 42\nputJetBitSecp256k1 FeIsZero = putPositive 43\nputJetBitSecp256k1 FeIsOdd = putPositive 44\nputJetBitSecp256k1 ScalarNormalize = putPositive 23\nputJetBitSecp256k1 ScalarNegate = putPositive 24\nputJetBitSecp256k1 ScalarAdd = putPositive 25\nputJetBitSecp256k1 ScalarSquare = putPositive 26\nputJetBitSecp256k1 ScalarMultiply = putPositive 27\nputJetBitSecp256k1 ScalarMultiplyLambda = putPositive 28\nputJetBitSecp256k1 ScalarInvert = putPositive 29\nputJetBitSecp256k1 ScalarIsZero = putPositive 30\nputJetBitSecp256k1 GejInfinity = putPositive 7\nputJetBitSecp256k1 GejNormalize = putPositive 8\nputJetBitSecp256k1 GejNegate = putPositive 9\nputJetBitSecp256k1 GeNegate = putPositive 10\nputJetBitSecp256k1 GejDouble = putPositive 11\nputJetBitSecp256k1 GejAdd = putPositive 12\nputJetBitSecp256k1 GejGeAddEx = putPositive 13\nputJetBitSecp256k1 GejGeAdd = putPositive 14\nputJetBitSecp256k1 GejRescale = putPositive 15\nputJetBitSecp256k1 GejIsInfinity = putPositive 16\nputJetBitSecp256k1 GejEquiv = putPositive 17\nputJetBitSecp256k1 GejGeEquiv = putPositive 18\nputJetBitSecp256k1 GejXEquiv = putPositive 19\nputJetBitSecp256k1 GejYIsOdd = putPositive 20\nputJetBitSecp256k1 GejIsOnCurve = putPositive 21\nputJetBitSecp256k1 GeIsOnCurve = putPositive 22\nputJetBitSecp256k1 Generate = putPositive 6\nputJetBitSecp256k1 Scale = putPositive 5\nputJetBitSecp256k1 LinearCombination1 = putPositive 4 . putPositive 1\nputJetBitSecp256k1 LinearVerify1 = putPositive 3 . putPositive 1\nputJetBitSecp256k1 PointVerify1 = putPositive 1 . putPositive 1\nputJetBitSecp256k1 Decompress = putPositive 2\nputJetBitSecp256k1 HashToCurve = putPositive 46\nputJetBitSecp256k1 Swu = putPositive 47\n\nputJetBitSignature :: SignatureJet a b -> DList Bool\nputJetBitSignature CheckSigVerify = putPositive 1\nputJetBitSignature Bip0340Verify = putPositive 2\n\nputJetBitBitcoin :: BitcoinJet a b -> DList Bool\nputJetBitBitcoin ParseLock  = putPositive 1\nputJetBitBitcoin ParseSequence  = putPositive 2\nputJetBitBitcoin TapdataInit  = putPositive 3\n\n-- | A 'Map.Map' from the identity hashes of the \"core\" jet specification to their corresponding token.\n-- This can be used to help instantiate the 'Simplicity.JetType.matcher' method.\ncoreJetMap :: Map.Map Hash256 (SomeArrow CoreJet)\ncoreJetMap = Map.fromList . fmap mkAssoc $ toList coreCatalogue\n where\n  mkAssoc :: SomeArrow CoreJet -> (Hash256, (SomeArrow CoreJet))\n  mkAssoc wrapped@(SomeArrow jt) = (identityHash (specification jt), wrapped)\n\n-- | Performs a lookup from `coreJetMap` from an `IdentityRoot`.\n-- This operation preserves the Simplicity types.\ncoreJetLookup :: (TyC a, TyC b) => IdentityRoot a b -> Maybe (CoreJet a b)\ncoreJetLookup ir = do\n  SomeArrow jt <- Map.lookup (identityHash ir) coreJetMap\n  let (ira, irb) = reifyArrow ir\n  let (jta, jtb) = reifyArrow jt\n  case (equalTyReflect ira jta, equalTyReflect irb jtb) of\n    (Just Refl, Just Refl) -> return jt\n    otherwise -> error \"Simplicity.CoreJets.coreJetLookup: type match error\"\n\n-- | The contents of the serialized content of a constant word jet.\n-- It consists of a \"depth\" indicating what word type the word jet produces,\n-- and a numeric value that the jet outputs.\n-- This numeric value fits with the size of the word type.\ndata ConstWordContent b = ConstWordContent (Word b) Integer\ninstance Eq (ConstWordContent b) where\n  ConstWordContent _ x == ConstWordContent _ y = x == y\ninstance Show (ConstWordContent b) where\n  show (ConstWordContent w v) = show v ++ \": 2^\" ++ show (wordSize w)\n\n-- | @Exists b. (Ty b) *> ConstWordContent b@\ndata SomeConstWordContent = forall b. (TyC b) => SomeConstWordContent (ConstWordContent b)\ninstance Show SomeConstWordContent where\n  show (SomeConstWordContent cwc) = show cwc\n\n-- | Returns the specification of a constant word jet corresponding to the contents of a given 'ConstWordContent'.\nspecificationConstWord :: (Core term, TyC b) => ConstWordContent b -> term () b\nspecificationConstWord (ConstWordContent w v) = scribe (toWord w v)\n\n-- | Returns an implementation of a constant word jet corresponding to the contents of a given 'ConstWordContent'.\nimplementationConstWord :: ConstWordContent b -> () -> Maybe b\nimplementationConstWord (ConstWordContent w v) _ = Just (toWord w v)\n\n-- | Parses the depth and value of a constant word jet and returns 'SomeConstWordContent'.\ngetConstWordBit :: forall m. (Monad m) => m Void -> m Bool -> m SomeConstWordContent\ngetConstWordBit abort next = do\n  depth <- (\\x -> x - 1) <$> getPositive next\n  unDepth depth (fmap SomeConstWordContent . getValue)\n where\n  unDepth :: Integer -> (forall b. TyC b => Word b -> o) -> o\n  unDepth 0 k = k SingleV\n  unDepth n k = unDepth (n-1) (k . DoubleV)\n  getValue :: TyC b => Word b -> m (ConstWordContent b)\n  getValue w@SingleV = do\n   b <- next\n   return $ ConstWordContent w (if b then 1 else 0)\n  getValue ww@(DoubleV w) = do\n   (ConstWordContent _ v1) <- getValue w\n   (ConstWordContent _ v2) <- getValue w\n   return (ConstWordContent ww (shift v1 (wordSize w) + v2))\n\n-- | Given a 'ConstWordContent' of some type, output the serialization of that depth and value.\nputConstWordBit :: ConstWordContent b -> DList Bool\nputConstWordBit cwc@(ConstWordContent w v) = putPositive (1 + depth w) . (putConstWordValueBit cwc ++)\n where\n  depth :: Word b -> Integer\n  depth (SingleV) = 0\n  depth (DoubleV w) = 1 + depth w\n\n-- | Given a 'ConstWordContent' of some type, output the serialization of that value.\nputConstWordValueBit :: ConstWordContent b -> [Bool]\nputConstWordValueBit (ConstWordContent w v) | 0 <= v && v < 2^(wordSize w) =\n  List.reverse . List.take (wordSize w) $ List.unfoldr (\\i -> Just (odd i, i `div` 2)) v\n\n-- | An Assert instance for 'fastCoreEval'.\ndata FastCoreEval a b = FastCoreEval { fastCoreEvalSem :: Kleisli Maybe a b\n                                     , fastCoreEvalMatcher :: IdentityRoot a b\n                                     }\n\n-- | 'fastCoreEval' optimizes Simplicity with assertions evaluation using jets.\n--\n-- @\n-- 'fastCoreEval' t === 'sem' t\n-- @\nfastCoreEval = runKleisli . fastCoreEvalSem\n\nwithJets :: (TyC a, TyC b) => FastCoreEval a b -> FastCoreEval a b\nwithJets ~(FastCoreEval _ ir) | Just cj <- coreJetLookup ir =\n  FastCoreEval { fastCoreEvalSem = Kleisli $ implementation cj\n               , fastCoreEvalMatcher = ir\n               }\nwithJets fe | otherwise = fe\n\nmkLeaf sComb jmComb = withJets $\n  FastCoreEval { fastCoreEvalSem = sComb\n               , fastCoreEvalMatcher = jmComb\n               }\n\nmkUnary sComb jmComb t = withJets $\n  FastCoreEval { fastCoreEvalSem = sComb (fastCoreEvalSem t)\n               , fastCoreEvalMatcher = jmComb (fastCoreEvalMatcher t)\n               }\nmkBinary sComb jmComb s t = withJets $\n  FastCoreEval { fastCoreEvalSem = sComb (fastCoreEvalSem s) (fastCoreEvalSem t)\n               , fastCoreEvalMatcher = jmComb (fastCoreEvalMatcher s) (fastCoreEvalMatcher t)\n               }\n\ninstance Core FastCoreEval where\n  iden = mkLeaf iden iden\n  comp = mkBinary comp comp\n  unit = mkLeaf unit unit\n  injl = mkUnary injl injl\n  injr = mkUnary injr injr\n  match = mkBinary match match\n  pair = mkBinary pair pair\n  take = mkUnary take take\n  drop = mkUnary drop drop\n\ninstance Assert FastCoreEval where\n  assertl s h = mkUnary (flip assertl h) (flip assertl h) s\n  assertr h t = mkUnary (assertr h) (assertr h) t\n  fail b = mkLeaf (fail b) (fail b)\n\nmedian x y z = List.sort [x,y,z] !! 1\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Delegator/Impl.hs",
    "content": "-- | This internal module provides a Deleator instance that perform a semantic conversion of the 'disconnect' combinator.\n-- It should only be used for semantic operations, including BitMachine translation and static analysis.\nmodule Simplicity.Delegator.Impl\n ( Delegator(Delegator), runDelegator, delegatorRoot\n ) where\n\nimport Prelude hiding (drop, take, fail)\n\nimport Simplicity.Digest\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Generic\nimport Simplicity.Term.Core\nimport Simplicity.Ty.Word\n\n-- Note: 'Delegator' differs from 'Simplicity.Tensor.Product CommitmentRoot' due to a different 'Delegate' instance.\n-- | @'Delegator' p@ is a helper data type for creating a 'Delegate' instance.\n-- @p@ is typically at least an instance of 'Core'.\ndata Delegator p a b = Delegator { delegatorRoot :: CommitmentRoot a b\n                                 , runDelegator :: p a b -- ^ Extract the @p a b@ arrow from the 'Delegator'\n                                 }\n\ninstance Core p => Core (Delegator p) where\n  iden = Delegator iden iden\n  comp ~(Delegator rs fs) ~(Delegator rt ft) = Delegator (comp rs rt) (comp fs ft)\n  unit = Delegator unit unit\n  injl ~(Delegator rt ft) = Delegator (injl rt) (injl ft)\n  injr ~(Delegator rt ft) = Delegator (injr rt) (injr ft)\n  match ~(Delegator rs fs) ~(Delegator rt ft) = Delegator (match rs rt) (match fs ft)\n  pair ~(Delegator rs fs) ~(Delegator rt ft) = Delegator (pair rs rt) (pair fs ft)\n  take ~(Delegator rt ft) = Delegator (take rt) (take ft)\n  drop ~(Delegator rt ft) = Delegator (drop rt) (drop ft)\n\ninstance Assert p => Assert (Delegator p) where\n  assertl ~(Delegator rs fs) t = Delegator (assertl rs t) (assertl fs t)\n  assertr s ~(Delegator rt ft) = Delegator (assertr s rt) (assertr s ft)\n  fail b = Delegator (fail b) (fail b)\n\ninstance Witness p => Witness (Delegator p) where\n  witness b = Delegator (witness b) (witness b)\n\ninstance Core p => Delegate (Delegator p) where\n  disconnect ~(Delegator rs fs) ~(Delegator rt ft) = Delegator (disconnect rs rt) f\n   where\n    root256 = toWord256 . integerHash256 $ commitmentRoot rt\n    f = scribe root256 &&& iden >>> fs >>> take iden &&& drop ft\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Delegator.hs",
    "content": "-- | This module provides the functional semantics of Simplicity with 'Delegate'.\nmodule Simplicity.Delegator\n ( Delegator, runDelegatorCore, runDelegatorKleisli,\n   delegatorRoot\n ) where\n\nimport Control.Arrow (Kleisli, runKleisli)\nimport Simplicity.Delegator.Impl\n\n-- | @\n-- runDelegatorCore :: (forall term. (Core term, Delegate term, Witness term) => term a b) -> a -> b\n-- @\n--\n-- Returns the semantics of a Simplicity expression with 'Delegate'.\nrunDelegatorCore :: Delegator (->) a b -> a -> b\nrunDelegatorCore = runDelegator\n\n-- | @\n-- runDelegatorKleisli :: Fail.MonadFail m => (forall term. (Assert term, Delegate term, Witness term) => term a b) -> a -> m b\n-- runDelegatorKleisli :: Monad m => (forall term. (Core term, Delegate term, Witness term) => term a b) -> a -> m b\n-- @\n--\n-- Returns the semantics of a Simplicity expression with 'Delegate' and 'Assert'.\nrunDelegatorKleisli :: Delegator (Kleisli m) a b -> a -> m b\nrunDelegatorKleisli = runKleisli . runDelegator\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Digest/Pure/SHA.hs",
    "content": "{- This is a copy of Galoi's Data.Digets.Pure.SHA module.\n   We copy it here in order to export some internal functions.\n   This is needed to allow for \"free-start\" SHA-256, which violates normal SHA-256 encapsulation rules.\n   This file is subject to their licence below.\n-}\n{-\nCopyright (c) 2008, Galois, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in \n    the documentation and/or other materials provided with the \n    distribution.\n  * Neither the name of the Galois, Inc. nor the names of its\n    contributors may be used to endorse or promote products derived \n    from this software without specific prior written permission.  \n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-}\n{-# LANGUAGE BangPatterns, CPP, FlexibleInstances #-}\n-- |Pure implementations of the SHA suite of hash functions. The implementation\n-- is basically an unoptimized translation of FIPS 180-2 into Haskell. If you're\n-- looking for performance, you probably won't find it here.\nmodule Simplicity.Digest.Pure.SHA\n       ( -- * 'Digest' and related functions\n         Digest\n       , SHA1State, SHA256State, SHA512State\n       , showDigest\n       , integerDigest\n       , bytestringDigest\n         -- * Calculating hashes\n       , sha1\n       , sha224\n       , sha256\n       , sha384\n       , sha512\n       , sha1Incremental\n       , completeSha1Incremental\n       , sha224Incremental\n       , completeSha224Incremental\n       , sha256Incremental\n       , completeSha256Incremental\n       , sha384Incremental\n       , completeSha384Incremental\n       , sha512Incremental\n       , completeSha512Incremental\n         -- * Calculating message authentication codes (MACs)\n       , hmacSha1\n       , hmacSha224\n       , hmacSha256\n       , hmacSha384\n       , hmacSha512\n         -- * Internal routines included for testing\n       , toBigEndianSBS, fromBigEndianSBS\n       , calc_k\n       , padSHA1, padSHA512\n       , padSHA1Chunks, padSHA512Chunks\n         -- * Internal routines included for freestart\n       , runSHAIncremental, processSHA256Block\n       )\n where\n \nimport Data.Binary\nimport Data.Binary.Get\nimport Data.Binary.Put\nimport Data.Bits\nimport Data.ByteString.Lazy(ByteString)\nimport qualified Data.ByteString.Lazy as BS\nimport qualified Data.ByteString as SBS\nimport Data.Char (intToDigit)\nimport Data.List (foldl')\n\n-- | An abstract datatype for digests.\nnewtype Digest t = Digest ByteString deriving (Eq,Ord)\n\ninstance Show (Digest t) where\n  show = showDigest\n\ninstance Binary (Digest SHA1State) where\n  get = Digest `fmap` getLazyByteString 20\n  put (Digest bs) = putLazyByteString bs\n\ninstance Binary (Digest SHA256State) where\n  get = Digest `fmap` getLazyByteString 32\n  put (Digest bs) = putLazyByteString bs\n\ninstance Binary (Digest SHA512State) where\n  get = Digest `fmap` getLazyByteString 64\n  put (Digest bs) = putLazyByteString bs\n\n-- --------------------------------------------------------------------------\n--\n-- State Definitions and Initial States\n--\n-- --------------------------------------------------------------------------\n\ndata SHA1State = SHA1S !Word32 !Word32 !Word32 !Word32 !Word32\n\ninitialSHA1State :: SHA1State\ninitialSHA1State = SHA1S 0x67452301 0xefcdab89 0x98badcfe 0x10325476 0xc3d2e1f0\n\ndata SHA256State = SHA256S !Word32 !Word32 !Word32 !Word32\n                           !Word32 !Word32 !Word32 !Word32\n\ninitialSHA224State :: SHA256State\ninitialSHA224State = SHA256S 0xc1059ed8 0x367cd507 0x3070dd17 0xf70e5939\n                             0xffc00b31 0x68581511 0x64f98fa7 0xbefa4fa4\n\ninitialSHA256State :: SHA256State\ninitialSHA256State = SHA256S 0x6a09e667 0xbb67ae85 0x3c6ef372 0xa54ff53a\n                             0x510e527f 0x9b05688c 0x1f83d9ab 0x5be0cd19\n\ndata SHA512State = SHA512S !Word64 !Word64 !Word64 !Word64\n                           !Word64 !Word64 !Word64 !Word64\n\ninitialSHA384State :: SHA512State\ninitialSHA384State = SHA512S 0xcbbb9d5dc1059ed8 0x629a292a367cd507\n                             0x9159015a3070dd17 0x152fecd8f70e5939\n                             0x67332667ffc00b31 0x8eb44a8768581511\n                             0xdb0c2e0d64f98fa7 0x47b5481dbefa4fa4\n\ninitialSHA512State :: SHA512State\ninitialSHA512State = SHA512S 0x6a09e667f3bcc908 0xbb67ae8584caa73b\n                             0x3c6ef372fe94f82b 0xa54ff53a5f1d36f1\n                             0x510e527fade682d1 0x9b05688c2b3e6c1f\n                             0x1f83d9abfb41bd6b 0x5be0cd19137e2179\n\n-- --------------------------------------------------------------------------\n--\n-- Synthesize of states to and from ByteStrings\n--\n-- --------------------------------------------------------------------------\n\n\nsynthesizeSHA1 :: SHA1State -> Put\nsynthesizeSHA1 (SHA1S a b c d e) = do\n  putWord32be a\n  putWord32be b\n  putWord32be c\n  putWord32be d\n  putWord32be e\n\ngetSHA1 :: Get SHA1State\ngetSHA1 = do\n  a <- getWord32be\n  b <- getWord32be\n  c <- getWord32be\n  d <- getWord32be\n  e <- getWord32be\n  return $! SHA1S a b c d e\n\nsynthesizeSHA224 :: SHA256State -> Put\nsynthesizeSHA224 (SHA256S a b c d e f g _) = do\n  putWord32be a\n  putWord32be b\n  putWord32be c\n  putWord32be d\n  putWord32be e\n  putWord32be f\n  putWord32be g\n\nsynthesizeSHA256 :: SHA256State -> Put\nsynthesizeSHA256 (SHA256S a b c d e f g h) = do\n  putWord32be a\n  putWord32be b\n  putWord32be c\n  putWord32be d\n  putWord32be e\n  putWord32be f\n  putWord32be g\n  putWord32be h\n\ngetSHA256 :: Get SHA256State\ngetSHA256 = do\n  a <- getWord32be\n  b <- getWord32be\n  c <- getWord32be\n  d <- getWord32be\n  e <- getWord32be\n  f <- getWord32be\n  g <- getWord32be\n  h <- getWord32be\n  return $! SHA256S a b c d e f g h\n\nsynthesizeSHA384 :: SHA512State -> Put\nsynthesizeSHA384 (SHA512S a b c d e f _ _) = do\n  putWord64be a\n  putWord64be b\n  putWord64be c\n  putWord64be d\n  putWord64be e\n  putWord64be f\n\nsynthesizeSHA512 :: SHA512State -> Put\nsynthesizeSHA512 (SHA512S a b c d e f g h) = do\n  putWord64be a\n  putWord64be b\n  putWord64be c\n  putWord64be d\n  putWord64be e\n  putWord64be f\n  putWord64be g\n  putWord64be h\n\ngetSHA512 :: Get SHA512State\ngetSHA512 = do\n  a <- getWord64be\n  b <- getWord64be\n  c <- getWord64be\n  d <- getWord64be\n  e <- getWord64be\n  f <- getWord64be\n  g <- getWord64be\n  h <- getWord64be\n  return $! SHA512S a b c d e f g h\n\ninstance Binary SHA1State where\n  put = synthesizeSHA1\n  get = getSHA1\n\ninstance Binary SHA256State where\n  put = synthesizeSHA256\n  get = getSHA256\n\ninstance Binary SHA512State where\n  put = synthesizeSHA512\n  get = getSHA512\n\n\n-- --------------------------------------------------------------------------\n--\n-- Padding\n--\n-- --------------------------------------------------------------------------\n\npadSHA1 :: ByteString -> ByteString\npadSHA1 = generic_pad 448 512 64\n\npadSHA1Chunks :: Int -> [SBS.ByteString]\npadSHA1Chunks = generic_pad_chunks 448 512 64\n\npadSHA512 :: ByteString -> ByteString\npadSHA512 = generic_pad 896 1024 128\n\npadSHA512Chunks :: Int -> [SBS.ByteString]\npadSHA512Chunks = generic_pad_chunks 896 1024 128\n\ngeneric_pad :: Word64 -> Word64 -> Int -> ByteString -> ByteString\ngeneric_pad a b lSize bs =\n  BS.fromChunks $! go 0 chunks\n where\n  chunks = BS.toChunks bs\n\n  -- Generates the padded ByteString at the same time it computes the length\n  -- of input. If the length is computed before the computation of the hash, it\n  -- will break the lazy evaluation of the input and no longer run in constant\n  -- memory space.\n  go !len [] = generic_pad_chunks a b lSize len\n  go !len (c:cs) = c : go (len + SBS.length c) cs\n\ngeneric_pad_chunks :: Word64 -> Word64 -> Int -> Int -> [SBS.ByteString]\ngeneric_pad_chunks a b lSize len =\n  let lenBits = fromIntegral $ len * 8\n      k = calc_k a b lenBits\n      -- INVARIANT: k is necessarily > 0, and (k + 1) is a multiple of 8.\n      kBytes = (k + 1) `div` 8\n      nZeroBytes = fromIntegral $! kBytes - 1\n      padLength = toBigEndianSBS lSize lenBits\n  in [SBS.singleton 0x80, SBS.replicate nZeroBytes 0, padLength]\n\n-- Given a, b, and l, calculate the smallest k such that (l + 1 + k) mod b = a.\ncalc_k :: Word64 -> Word64 -> Word64 -> Word64\ncalc_k a b l =\n  if r <= -1\n    then fromIntegral r + b\n    else fromIntegral r\n where\n  r = toInteger a - toInteger l `mod` toInteger b - 1\n\ntoBigEndianSBS :: (Integral a, Bits a) => Int -> a -> SBS.ByteString\ntoBigEndianSBS s val = SBS.pack $ map getBits [s - 8, s - 16 .. 0]\n where\n   getBits x = fromIntegral $ (val `shiftR` x) .&. 0xFF\n\nfromBigEndianSBS :: (Integral a, Bits a) => SBS.ByteString -> a\nfromBigEndianSBS =\n  SBS.foldl (\\ acc x -> (acc `shiftL` 8) + fromIntegral x) 0\n\n-- --------------------------------------------------------------------------\n--\n-- SHA Functions\n--\n-- --------------------------------------------------------------------------\n\n{-# SPECIALIZE ch :: Word32 -> Word32 -> Word32 -> Word32 #-}\n{-# SPECIALIZE ch :: Word64 -> Word64 -> Word64 -> Word64 #-}\nch :: Bits a => a -> a -> a -> a\nch x y z = (x .&. y) `xor` (complement x .&. z)\n\n{-# SPECIALIZE maj :: Word32 -> Word32 -> Word32 -> Word32 #-}\n{-# SPECIALIZE maj :: Word64 -> Word64 -> Word64 -> Word64 #-}\nmaj :: Bits a => a -> a -> a -> a\nmaj x y z = (x .&. (y .|. z)) .|. (y .&. z)\n-- note:\n--   the original functions is (x & y) ^ (x & z) ^ (y & z)\n--   if you fire off truth tables, this is equivalent to \n--     (x & y) | (x & z) | (y & z)\n--   which you can the use distribution on:\n--     (x & (y | z)) | (y & z)\n--   which saves us one operation.\n\nbsig256_0 :: Word32 -> Word32\nbsig256_0 x = rotateR x 2 `xor` rotateR x 13 `xor` rotateR x 22\n\nbsig256_1 :: Word32 -> Word32\nbsig256_1 x = rotateR x 6 `xor` rotateR x 11 `xor` rotateR x 25\n\nlsig256_0 :: Word32 -> Word32\nlsig256_0 x = rotateR x 7 `xor` rotateR x 18 `xor` shiftR x 3\n\nlsig256_1 :: Word32 -> Word32\nlsig256_1 x = rotateR x 17 `xor` rotateR x 19 `xor` shiftR x 10\n\nbsig512_0 :: Word64 -> Word64\nbsig512_0 x = rotateR x 28 `xor` rotateR x 34 `xor` rotateR x 39\n\nbsig512_1 :: Word64 -> Word64\nbsig512_1 x = rotateR x 14 `xor` rotateR x 18 `xor` rotateR x 41\n\nlsig512_0 :: Word64 -> Word64\nlsig512_0 x = rotateR x 1 `xor` rotateR x 8 `xor` shiftR x 7\n\nlsig512_1 :: Word64 -> Word64\nlsig512_1 x = rotateR x 19 `xor` rotateR x 61 `xor` shiftR x 6\n\n-- --------------------------------------------------------------------------\n--\n-- Message Schedules\n--\n-- --------------------------------------------------------------------------\n\ndata SHA1Sched = SHA1Sched !Word32 !Word32 !Word32 !Word32 !Word32 --  0 -  4\n                           !Word32 !Word32 !Word32 !Word32 !Word32 --  5 -  9\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 10 - 14\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 15 - 19\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 20 - 24\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 25 - 29\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 30 - 34\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 35 - 39\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 40 - 44\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 45 - 49\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 50 - 54\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 55 - 59\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 60 - 64\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 65 - 69\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 70 - 74\n                           !Word32 !Word32 !Word32 !Word32 !Word32 -- 75 - 79\n\ngetSHA1Sched :: Get SHA1Sched\ngetSHA1Sched = do\n  w00 <- getWord32be\n  w01 <- getWord32be\n  w02 <- getWord32be\n  w03 <- getWord32be\n  w04 <- getWord32be\n  w05 <- getWord32be\n  w06 <- getWord32be\n  w07 <- getWord32be\n  w08 <- getWord32be\n  w09 <- getWord32be\n  w10 <- getWord32be\n  w11 <- getWord32be\n  w12 <- getWord32be\n  w13 <- getWord32be\n  w14 <- getWord32be\n  w15 <- getWord32be\n  let w16 = rotateL (w13 `xor` w08 `xor` w02 `xor` w00) 1\n      w17 = rotateL (w14 `xor` w09 `xor` w03 `xor` w01) 1\n      w18 = rotateL (w15 `xor` w10 `xor` w04 `xor` w02) 1\n      w19 = rotateL (w16 `xor` w11 `xor` w05 `xor` w03) 1\n      w20 = rotateL (w17 `xor` w12 `xor` w06 `xor` w04) 1\n      w21 = rotateL (w18 `xor` w13 `xor` w07 `xor` w05) 1\n      w22 = rotateL (w19 `xor` w14 `xor` w08 `xor` w06) 1\n      w23 = rotateL (w20 `xor` w15 `xor` w09 `xor` w07) 1\n      w24 = rotateL (w21 `xor` w16 `xor` w10 `xor` w08) 1\n      w25 = rotateL (w22 `xor` w17 `xor` w11 `xor` w09) 1\n      w26 = rotateL (w23 `xor` w18 `xor` w12 `xor` w10) 1\n      w27 = rotateL (w24 `xor` w19 `xor` w13 `xor` w11) 1\n      w28 = rotateL (w25 `xor` w20 `xor` w14 `xor` w12) 1\n      w29 = rotateL (w26 `xor` w21 `xor` w15 `xor` w13) 1\n      w30 = rotateL (w27 `xor` w22 `xor` w16 `xor` w14) 1\n      w31 = rotateL (w28 `xor` w23 `xor` w17 `xor` w15) 1\n      w32 = rotateL (w29 `xor` w24 `xor` w18 `xor` w16) 1\n      w33 = rotateL (w30 `xor` w25 `xor` w19 `xor` w17) 1\n      w34 = rotateL (w31 `xor` w26 `xor` w20 `xor` w18) 1\n      w35 = rotateL (w32 `xor` w27 `xor` w21 `xor` w19) 1\n      w36 = rotateL (w33 `xor` w28 `xor` w22 `xor` w20) 1\n      w37 = rotateL (w34 `xor` w29 `xor` w23 `xor` w21) 1\n      w38 = rotateL (w35 `xor` w30 `xor` w24 `xor` w22) 1\n      w39 = rotateL (w36 `xor` w31 `xor` w25 `xor` w23) 1\n      w40 = rotateL (w37 `xor` w32 `xor` w26 `xor` w24) 1\n      w41 = rotateL (w38 `xor` w33 `xor` w27 `xor` w25) 1\n      w42 = rotateL (w39 `xor` w34 `xor` w28 `xor` w26) 1\n      w43 = rotateL (w40 `xor` w35 `xor` w29 `xor` w27) 1\n      w44 = rotateL (w41 `xor` w36 `xor` w30 `xor` w28) 1\n      w45 = rotateL (w42 `xor` w37 `xor` w31 `xor` w29) 1\n      w46 = rotateL (w43 `xor` w38 `xor` w32 `xor` w30) 1\n      w47 = rotateL (w44 `xor` w39 `xor` w33 `xor` w31) 1\n      w48 = rotateL (w45 `xor` w40 `xor` w34 `xor` w32) 1\n      w49 = rotateL (w46 `xor` w41 `xor` w35 `xor` w33) 1\n      w50 = rotateL (w47 `xor` w42 `xor` w36 `xor` w34) 1\n      w51 = rotateL (w48 `xor` w43 `xor` w37 `xor` w35) 1\n      w52 = rotateL (w49 `xor` w44 `xor` w38 `xor` w36) 1\n      w53 = rotateL (w50 `xor` w45 `xor` w39 `xor` w37) 1\n      w54 = rotateL (w51 `xor` w46 `xor` w40 `xor` w38) 1\n      w55 = rotateL (w52 `xor` w47 `xor` w41 `xor` w39) 1\n      w56 = rotateL (w53 `xor` w48 `xor` w42 `xor` w40) 1\n      w57 = rotateL (w54 `xor` w49 `xor` w43 `xor` w41) 1\n      w58 = rotateL (w55 `xor` w50 `xor` w44 `xor` w42) 1\n      w59 = rotateL (w56 `xor` w51 `xor` w45 `xor` w43) 1\n      w60 = rotateL (w57 `xor` w52 `xor` w46 `xor` w44) 1\n      w61 = rotateL (w58 `xor` w53 `xor` w47 `xor` w45) 1\n      w62 = rotateL (w59 `xor` w54 `xor` w48 `xor` w46) 1\n      w63 = rotateL (w60 `xor` w55 `xor` w49 `xor` w47) 1\n      w64 = rotateL (w61 `xor` w56 `xor` w50 `xor` w48) 1\n      w65 = rotateL (w62 `xor` w57 `xor` w51 `xor` w49) 1\n      w66 = rotateL (w63 `xor` w58 `xor` w52 `xor` w50) 1\n      w67 = rotateL (w64 `xor` w59 `xor` w53 `xor` w51) 1\n      w68 = rotateL (w65 `xor` w60 `xor` w54 `xor` w52) 1\n      w69 = rotateL (w66 `xor` w61 `xor` w55 `xor` w53) 1\n      w70 = rotateL (w67 `xor` w62 `xor` w56 `xor` w54) 1\n      w71 = rotateL (w68 `xor` w63 `xor` w57 `xor` w55) 1\n      w72 = rotateL (w69 `xor` w64 `xor` w58 `xor` w56) 1\n      w73 = rotateL (w70 `xor` w65 `xor` w59 `xor` w57) 1\n      w74 = rotateL (w71 `xor` w66 `xor` w60 `xor` w58) 1\n      w75 = rotateL (w72 `xor` w67 `xor` w61 `xor` w59) 1\n      w76 = rotateL (w73 `xor` w68 `xor` w62 `xor` w60) 1\n      w77 = rotateL (w74 `xor` w69 `xor` w63 `xor` w61) 1\n      w78 = rotateL (w75 `xor` w70 `xor` w64 `xor` w62) 1\n      w79 = rotateL (w76 `xor` w71 `xor` w65 `xor` w63) 1\n  return $! SHA1Sched w00 w01 w02 w03 w04 w05 w06 w07 w08 w09\n                      w10 w11 w12 w13 w14 w15 w16 w17 w18 w19\n                      w20 w21 w22 w23 w24 w25 w26 w27 w28 w29\n                      w30 w31 w32 w33 w34 w35 w36 w37 w38 w39\n                      w40 w41 w42 w43 w44 w45 w46 w47 w48 w49\n                      w50 w51 w52 w53 w54 w55 w56 w57 w58 w59\n                      w60 w61 w62 w63 w64 w65 w66 w67 w68 w69\n                      w70 w71 w72 w73 w74 w75 w76 w77 w78 w79\n\ndata SHA256Sched = SHA256Sched !Word32 !Word32 !Word32 !Word32 !Word32 -- 00-04\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 05-09\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 10-04\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 15-09\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 20-04\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 25-09\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 30-04\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 35-09\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 40-04\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 45-09\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 50-04\n                               !Word32 !Word32 !Word32 !Word32 !Word32 -- 55-09\n                               !Word32 !Word32 !Word32 !Word32         -- 60-63\n\ngetSHA256Sched :: Get SHA256Sched\ngetSHA256Sched = do\n  w00 <- getWord32be\n  w01 <- getWord32be\n  w02 <- getWord32be\n  w03 <- getWord32be\n  w04 <- getWord32be\n  w05 <- getWord32be\n  w06 <- getWord32be\n  w07 <- getWord32be\n  w08 <- getWord32be\n  w09 <- getWord32be\n  w10 <- getWord32be\n  w11 <- getWord32be\n  w12 <- getWord32be\n  w13 <- getWord32be\n  w14 <- getWord32be\n  w15 <- getWord32be\n  let w16 = lsig256_1 w14 + w09 + lsig256_0 w01 + w00\n      w17 = lsig256_1 w15 + w10 + lsig256_0 w02 + w01\n      w18 = lsig256_1 w16 + w11 + lsig256_0 w03 + w02\n      w19 = lsig256_1 w17 + w12 + lsig256_0 w04 + w03\n      w20 = lsig256_1 w18 + w13 + lsig256_0 w05 + w04\n      w21 = lsig256_1 w19 + w14 + lsig256_0 w06 + w05\n      w22 = lsig256_1 w20 + w15 + lsig256_0 w07 + w06\n      w23 = lsig256_1 w21 + w16 + lsig256_0 w08 + w07\n      w24 = lsig256_1 w22 + w17 + lsig256_0 w09 + w08\n      w25 = lsig256_1 w23 + w18 + lsig256_0 w10 + w09\n      w26 = lsig256_1 w24 + w19 + lsig256_0 w11 + w10\n      w27 = lsig256_1 w25 + w20 + lsig256_0 w12 + w11\n      w28 = lsig256_1 w26 + w21 + lsig256_0 w13 + w12\n      w29 = lsig256_1 w27 + w22 + lsig256_0 w14 + w13\n      w30 = lsig256_1 w28 + w23 + lsig256_0 w15 + w14\n      w31 = lsig256_1 w29 + w24 + lsig256_0 w16 + w15\n      w32 = lsig256_1 w30 + w25 + lsig256_0 w17 + w16\n      w33 = lsig256_1 w31 + w26 + lsig256_0 w18 + w17\n      w34 = lsig256_1 w32 + w27 + lsig256_0 w19 + w18\n      w35 = lsig256_1 w33 + w28 + lsig256_0 w20 + w19\n      w36 = lsig256_1 w34 + w29 + lsig256_0 w21 + w20\n      w37 = lsig256_1 w35 + w30 + lsig256_0 w22 + w21\n      w38 = lsig256_1 w36 + w31 + lsig256_0 w23 + w22\n      w39 = lsig256_1 w37 + w32 + lsig256_0 w24 + w23\n      w40 = lsig256_1 w38 + w33 + lsig256_0 w25 + w24\n      w41 = lsig256_1 w39 + w34 + lsig256_0 w26 + w25\n      w42 = lsig256_1 w40 + w35 + lsig256_0 w27 + w26\n      w43 = lsig256_1 w41 + w36 + lsig256_0 w28 + w27\n      w44 = lsig256_1 w42 + w37 + lsig256_0 w29 + w28\n      w45 = lsig256_1 w43 + w38 + lsig256_0 w30 + w29\n      w46 = lsig256_1 w44 + w39 + lsig256_0 w31 + w30\n      w47 = lsig256_1 w45 + w40 + lsig256_0 w32 + w31\n      w48 = lsig256_1 w46 + w41 + lsig256_0 w33 + w32\n      w49 = lsig256_1 w47 + w42 + lsig256_0 w34 + w33\n      w50 = lsig256_1 w48 + w43 + lsig256_0 w35 + w34\n      w51 = lsig256_1 w49 + w44 + lsig256_0 w36 + w35\n      w52 = lsig256_1 w50 + w45 + lsig256_0 w37 + w36\n      w53 = lsig256_1 w51 + w46 + lsig256_0 w38 + w37\n      w54 = lsig256_1 w52 + w47 + lsig256_0 w39 + w38\n      w55 = lsig256_1 w53 + w48 + lsig256_0 w40 + w39\n      w56 = lsig256_1 w54 + w49 + lsig256_0 w41 + w40\n      w57 = lsig256_1 w55 + w50 + lsig256_0 w42 + w41\n      w58 = lsig256_1 w56 + w51 + lsig256_0 w43 + w42\n      w59 = lsig256_1 w57 + w52 + lsig256_0 w44 + w43\n      w60 = lsig256_1 w58 + w53 + lsig256_0 w45 + w44\n      w61 = lsig256_1 w59 + w54 + lsig256_0 w46 + w45\n      w62 = lsig256_1 w60 + w55 + lsig256_0 w47 + w46\n      w63 = lsig256_1 w61 + w56 + lsig256_0 w48 + w47\n  return $! SHA256Sched w00 w01 w02 w03 w04 w05 w06 w07 w08 w09\n                        w10 w11 w12 w13 w14 w15 w16 w17 w18 w19\n                        w20 w21 w22 w23 w24 w25 w26 w27 w28 w29\n                        w30 w31 w32 w33 w34 w35 w36 w37 w38 w39\n                        w40 w41 w42 w43 w44 w45 w46 w47 w48 w49\n                        w50 w51 w52 w53 w54 w55 w56 w57 w58 w59\n                        w60 w61 w62 w63\n\ndata SHA512Sched = SHA512Sched !Word64 !Word64 !Word64 !Word64 !Word64 --  0- 4\n                               !Word64 !Word64 !Word64 !Word64 !Word64 --  5- 9\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 10-14\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 15-19\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 20-24\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 25-29\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 30-34\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 35-39\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 40-44\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 45-49\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 50-54\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 55-59\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 60-64\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 65-69\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 70-74\n                               !Word64 !Word64 !Word64 !Word64 !Word64 -- 75-79\n\ngetSHA512Sched :: Get SHA512Sched\ngetSHA512Sched = do\n  w00 <- getWord64be\n  w01 <- getWord64be\n  w02 <- getWord64be\n  w03 <- getWord64be\n  w04 <- getWord64be\n  w05 <- getWord64be\n  w06 <- getWord64be\n  w07 <- getWord64be\n  w08 <- getWord64be\n  w09 <- getWord64be\n  w10 <- getWord64be\n  w11 <- getWord64be\n  w12 <- getWord64be\n  w13 <- getWord64be\n  w14 <- getWord64be\n  w15 <- getWord64be\n  let w16 = lsig512_1 w14 + w09 + lsig512_0 w01 + w00\n      w17 = lsig512_1 w15 + w10 + lsig512_0 w02 + w01\n      w18 = lsig512_1 w16 + w11 + lsig512_0 w03 + w02\n      w19 = lsig512_1 w17 + w12 + lsig512_0 w04 + w03\n      w20 = lsig512_1 w18 + w13 + lsig512_0 w05 + w04\n      w21 = lsig512_1 w19 + w14 + lsig512_0 w06 + w05\n      w22 = lsig512_1 w20 + w15 + lsig512_0 w07 + w06\n      w23 = lsig512_1 w21 + w16 + lsig512_0 w08 + w07\n      w24 = lsig512_1 w22 + w17 + lsig512_0 w09 + w08\n      w25 = lsig512_1 w23 + w18 + lsig512_0 w10 + w09\n      w26 = lsig512_1 w24 + w19 + lsig512_0 w11 + w10\n      w27 = lsig512_1 w25 + w20 + lsig512_0 w12 + w11\n      w28 = lsig512_1 w26 + w21 + lsig512_0 w13 + w12\n      w29 = lsig512_1 w27 + w22 + lsig512_0 w14 + w13\n      w30 = lsig512_1 w28 + w23 + lsig512_0 w15 + w14\n      w31 = lsig512_1 w29 + w24 + lsig512_0 w16 + w15\n      w32 = lsig512_1 w30 + w25 + lsig512_0 w17 + w16\n      w33 = lsig512_1 w31 + w26 + lsig512_0 w18 + w17\n      w34 = lsig512_1 w32 + w27 + lsig512_0 w19 + w18\n      w35 = lsig512_1 w33 + w28 + lsig512_0 w20 + w19\n      w36 = lsig512_1 w34 + w29 + lsig512_0 w21 + w20\n      w37 = lsig512_1 w35 + w30 + lsig512_0 w22 + w21\n      w38 = lsig512_1 w36 + w31 + lsig512_0 w23 + w22\n      w39 = lsig512_1 w37 + w32 + lsig512_0 w24 + w23\n      w40 = lsig512_1 w38 + w33 + lsig512_0 w25 + w24\n      w41 = lsig512_1 w39 + w34 + lsig512_0 w26 + w25\n      w42 = lsig512_1 w40 + w35 + lsig512_0 w27 + w26\n      w43 = lsig512_1 w41 + w36 + lsig512_0 w28 + w27\n      w44 = lsig512_1 w42 + w37 + lsig512_0 w29 + w28\n      w45 = lsig512_1 w43 + w38 + lsig512_0 w30 + w29\n      w46 = lsig512_1 w44 + w39 + lsig512_0 w31 + w30\n      w47 = lsig512_1 w45 + w40 + lsig512_0 w32 + w31\n      w48 = lsig512_1 w46 + w41 + lsig512_0 w33 + w32\n      w49 = lsig512_1 w47 + w42 + lsig512_0 w34 + w33\n      w50 = lsig512_1 w48 + w43 + lsig512_0 w35 + w34\n      w51 = lsig512_1 w49 + w44 + lsig512_0 w36 + w35\n      w52 = lsig512_1 w50 + w45 + lsig512_0 w37 + w36\n      w53 = lsig512_1 w51 + w46 + lsig512_0 w38 + w37\n      w54 = lsig512_1 w52 + w47 + lsig512_0 w39 + w38\n      w55 = lsig512_1 w53 + w48 + lsig512_0 w40 + w39\n      w56 = lsig512_1 w54 + w49 + lsig512_0 w41 + w40\n      w57 = lsig512_1 w55 + w50 + lsig512_0 w42 + w41\n      w58 = lsig512_1 w56 + w51 + lsig512_0 w43 + w42\n      w59 = lsig512_1 w57 + w52 + lsig512_0 w44 + w43\n      w60 = lsig512_1 w58 + w53 + lsig512_0 w45 + w44\n      w61 = lsig512_1 w59 + w54 + lsig512_0 w46 + w45\n      w62 = lsig512_1 w60 + w55 + lsig512_0 w47 + w46\n      w63 = lsig512_1 w61 + w56 + lsig512_0 w48 + w47\n      w64 = lsig512_1 w62 + w57 + lsig512_0 w49 + w48\n      w65 = lsig512_1 w63 + w58 + lsig512_0 w50 + w49\n      w66 = lsig512_1 w64 + w59 + lsig512_0 w51 + w50\n      w67 = lsig512_1 w65 + w60 + lsig512_0 w52 + w51\n      w68 = lsig512_1 w66 + w61 + lsig512_0 w53 + w52\n      w69 = lsig512_1 w67 + w62 + lsig512_0 w54 + w53\n      w70 = lsig512_1 w68 + w63 + lsig512_0 w55 + w54\n      w71 = lsig512_1 w69 + w64 + lsig512_0 w56 + w55\n      w72 = lsig512_1 w70 + w65 + lsig512_0 w57 + w56\n      w73 = lsig512_1 w71 + w66 + lsig512_0 w58 + w57\n      w74 = lsig512_1 w72 + w67 + lsig512_0 w59 + w58\n      w75 = lsig512_1 w73 + w68 + lsig512_0 w60 + w59\n      w76 = lsig512_1 w74 + w69 + lsig512_0 w61 + w60\n      w77 = lsig512_1 w75 + w70 + lsig512_0 w62 + w61\n      w78 = lsig512_1 w76 + w71 + lsig512_0 w63 + w62\n      w79 = lsig512_1 w77 + w72 + lsig512_0 w64 + w63\n  return $! SHA512Sched w00 w01 w02 w03 w04 w05 w06 w07 w08 w09\n                        w10 w11 w12 w13 w14 w15 w16 w17 w18 w19\n                        w20 w21 w22 w23 w24 w25 w26 w27 w28 w29\n                        w30 w31 w32 w33 w34 w35 w36 w37 w38 w39\n                        w40 w41 w42 w43 w44 w45 w46 w47 w48 w49\n                        w50 w51 w52 w53 w54 w55 w56 w57 w58 w59\n                        w60 w61 w62 w63 w64 w65 w66 w67 w68 w69\n                        w70 w71 w72 w73 w74 w75 w76 w77 w78 w79\n\n-- --------------------------------------------------------------------------\n--\n-- SHA Block Processors\n--\n-- --------------------------------------------------------------------------\n\nprocessSHA1Block :: SHA1State -> Get SHA1State\nprocessSHA1Block s00@(SHA1S a00 b00 c00 d00 e00) = do\n  (SHA1Sched w00 w01 w02 w03 w04 w05 w06 w07 w08 w09\n             w10 w11 w12 w13 w14 w15 w16 w17 w18 w19\n             w20 w21 w22 w23 w24 w25 w26 w27 w28 w29\n             w30 w31 w32 w33 w34 w35 w36 w37 w38 w39\n             w40 w41 w42 w43 w44 w45 w46 w47 w48 w49\n             w50 w51 w52 w53 w54 w55 w56 w57 w58 w59\n             w60 w61 w62 w63 w64 w65 w66 w67 w68 w69\n             w70 w71 w72 w73 w74 w75 w76 w77 w78 w79) <- getSHA1Sched\n  let s01 = step1_ch  s00 0x5a827999 w00\n      s02 = step1_ch  s01 0x5a827999 w01\n      s03 = step1_ch  s02 0x5a827999 w02\n      s04 = step1_ch  s03 0x5a827999 w03\n      s05 = step1_ch  s04 0x5a827999 w04\n      s06 = step1_ch  s05 0x5a827999 w05\n      s07 = step1_ch  s06 0x5a827999 w06\n      s08 = step1_ch  s07 0x5a827999 w07\n      s09 = step1_ch  s08 0x5a827999 w08\n      s10 = step1_ch  s09 0x5a827999 w09\n      s11 = step1_ch  s10 0x5a827999 w10\n      s12 = step1_ch  s11 0x5a827999 w11\n      s13 = step1_ch  s12 0x5a827999 w12\n      s14 = step1_ch  s13 0x5a827999 w13\n      s15 = step1_ch  s14 0x5a827999 w14\n      s16 = step1_ch  s15 0x5a827999 w15\n      s17 = step1_ch  s16 0x5a827999 w16\n      s18 = step1_ch  s17 0x5a827999 w17\n      s19 = step1_ch  s18 0x5a827999 w18\n      s20 = step1_ch  s19 0x5a827999 w19\n      s21 = step1_par s20 0x6ed9eba1 w20\n      s22 = step1_par s21 0x6ed9eba1 w21\n      s23 = step1_par s22 0x6ed9eba1 w22\n      s24 = step1_par s23 0x6ed9eba1 w23\n      s25 = step1_par s24 0x6ed9eba1 w24\n      s26 = step1_par s25 0x6ed9eba1 w25\n      s27 = step1_par s26 0x6ed9eba1 w26\n      s28 = step1_par s27 0x6ed9eba1 w27\n      s29 = step1_par s28 0x6ed9eba1 w28\n      s30 = step1_par s29 0x6ed9eba1 w29\n      s31 = step1_par s30 0x6ed9eba1 w30\n      s32 = step1_par s31 0x6ed9eba1 w31\n      s33 = step1_par s32 0x6ed9eba1 w32\n      s34 = step1_par s33 0x6ed9eba1 w33\n      s35 = step1_par s34 0x6ed9eba1 w34\n      s36 = step1_par s35 0x6ed9eba1 w35\n      s37 = step1_par s36 0x6ed9eba1 w36\n      s38 = step1_par s37 0x6ed9eba1 w37\n      s39 = step1_par s38 0x6ed9eba1 w38\n      s40 = step1_par s39 0x6ed9eba1 w39\n      s41 = step1_maj s40 0x8f1bbcdc w40\n      s42 = step1_maj s41 0x8f1bbcdc w41\n      s43 = step1_maj s42 0x8f1bbcdc w42\n      s44 = step1_maj s43 0x8f1bbcdc w43\n      s45 = step1_maj s44 0x8f1bbcdc w44\n      s46 = step1_maj s45 0x8f1bbcdc w45\n      s47 = step1_maj s46 0x8f1bbcdc w46\n      s48 = step1_maj s47 0x8f1bbcdc w47\n      s49 = step1_maj s48 0x8f1bbcdc w48\n      s50 = step1_maj s49 0x8f1bbcdc w49\n      s51 = step1_maj s50 0x8f1bbcdc w50\n      s52 = step1_maj s51 0x8f1bbcdc w51\n      s53 = step1_maj s52 0x8f1bbcdc w52\n      s54 = step1_maj s53 0x8f1bbcdc w53\n      s55 = step1_maj s54 0x8f1bbcdc w54\n      s56 = step1_maj s55 0x8f1bbcdc w55\n      s57 = step1_maj s56 0x8f1bbcdc w56\n      s58 = step1_maj s57 0x8f1bbcdc w57\n      s59 = step1_maj s58 0x8f1bbcdc w58\n      s60 = step1_maj s59 0x8f1bbcdc w59\n      s61 = step1_par s60 0xca62c1d6 w60\n      s62 = step1_par s61 0xca62c1d6 w61\n      s63 = step1_par s62 0xca62c1d6 w62\n      s64 = step1_par s63 0xca62c1d6 w63\n      s65 = step1_par s64 0xca62c1d6 w64\n      s66 = step1_par s65 0xca62c1d6 w65\n      s67 = step1_par s66 0xca62c1d6 w66\n      s68 = step1_par s67 0xca62c1d6 w67\n      s69 = step1_par s68 0xca62c1d6 w68\n      s70 = step1_par s69 0xca62c1d6 w69\n      s71 = step1_par s70 0xca62c1d6 w70\n      s72 = step1_par s71 0xca62c1d6 w71\n      s73 = step1_par s72 0xca62c1d6 w72\n      s74 = step1_par s73 0xca62c1d6 w73\n      s75 = step1_par s74 0xca62c1d6 w74\n      s76 = step1_par s75 0xca62c1d6 w75\n      s77 = step1_par s76 0xca62c1d6 w76\n      s78 = step1_par s77 0xca62c1d6 w77\n      s79 = step1_par s78 0xca62c1d6 w78\n      s80 = step1_par s79 0xca62c1d6 w79\n      SHA1S a80 b80 c80 d80 e80 = s80\n  return $! SHA1S (a00 + a80) (b00 + b80) (c00 + c80) (d00 + d80) (e00 + e80)\n\n{-# INLINE step1_ch #-}\nstep1_ch :: SHA1State -> Word32 -> Word32 -> SHA1State\nstep1_ch !(SHA1S a b c d e) k w = SHA1S a' b' c' d' e'\n where a' = rotateL a 5 + ((b .&. c) `xor` (complement b .&. d)) + e + k + w\n       b' = a\n       c' = rotateL b 30\n       d' = c\n       e' = d\n\n{-# INLINE step1_par #-}\nstep1_par :: SHA1State -> Word32 -> Word32 -> SHA1State\nstep1_par !(SHA1S a b c d e) k w = SHA1S a' b' c' d' e'\n where a' = rotateL a 5 + (b `xor` c `xor` d) + e + k + w\n       b' = a\n       c' = rotateL b 30\n       d' = c\n       e' = d\n\n{-# INLINE step1_maj #-}\nstep1_maj :: SHA1State -> Word32 -> Word32 -> SHA1State\nstep1_maj !(SHA1S a b c d e) k w = SHA1S a' b' c' d' e'\n where a' = rotateL a 5 + ((b .&. (c .|. d)) .|. (c .&. d)) + e + k + w\n       b' = a\n       c' = rotateL b 30\n       d' = c\n       e' = d\n-- See the note on maj, above\n\nprocessSHA256Block :: SHA256State -> Get SHA256State\nprocessSHA256Block !s00@(SHA256S a00 b00 c00 d00 e00 f00 g00 h00) = do\n  (SHA256Sched w00 w01 w02 w03 w04 w05 w06 w07 w08 w09\n               w10 w11 w12 w13 w14 w15 w16 w17 w18 w19\n               w20 w21 w22 w23 w24 w25 w26 w27 w28 w29\n               w30 w31 w32 w33 w34 w35 w36 w37 w38 w39\n               w40 w41 w42 w43 w44 w45 w46 w47 w48 w49\n               w50 w51 w52 w53 w54 w55 w56 w57 w58 w59\n               w60 w61 w62 w63) <- getSHA256Sched\n  let s01 = step256 s00 0x428a2f98 w00\n      s02 = step256 s01 0x71374491 w01\n      s03 = step256 s02 0xb5c0fbcf w02\n      s04 = step256 s03 0xe9b5dba5 w03\n      s05 = step256 s04 0x3956c25b w04\n      s06 = step256 s05 0x59f111f1 w05\n      s07 = step256 s06 0x923f82a4 w06\n      s08 = step256 s07 0xab1c5ed5 w07\n      s09 = step256 s08 0xd807aa98 w08\n      s10 = step256 s09 0x12835b01 w09\n      s11 = step256 s10 0x243185be w10\n      s12 = step256 s11 0x550c7dc3 w11\n      s13 = step256 s12 0x72be5d74 w12\n      s14 = step256 s13 0x80deb1fe w13\n      s15 = step256 s14 0x9bdc06a7 w14\n      s16 = step256 s15 0xc19bf174 w15\n      s17 = step256 s16 0xe49b69c1 w16\n      s18 = step256 s17 0xefbe4786 w17\n      s19 = step256 s18 0x0fc19dc6 w18\n      s20 = step256 s19 0x240ca1cc w19\n      s21 = step256 s20 0x2de92c6f w20\n      s22 = step256 s21 0x4a7484aa w21\n      s23 = step256 s22 0x5cb0a9dc w22\n      s24 = step256 s23 0x76f988da w23\n      s25 = step256 s24 0x983e5152 w24\n      s26 = step256 s25 0xa831c66d w25\n      s27 = step256 s26 0xb00327c8 w26\n      s28 = step256 s27 0xbf597fc7 w27\n      s29 = step256 s28 0xc6e00bf3 w28\n      s30 = step256 s29 0xd5a79147 w29\n      s31 = step256 s30 0x06ca6351 w30\n      s32 = step256 s31 0x14292967 w31\n      s33 = step256 s32 0x27b70a85 w32\n      s34 = step256 s33 0x2e1b2138 w33\n      s35 = step256 s34 0x4d2c6dfc w34\n      s36 = step256 s35 0x53380d13 w35\n      s37 = step256 s36 0x650a7354 w36\n      s38 = step256 s37 0x766a0abb w37\n      s39 = step256 s38 0x81c2c92e w38\n      s40 = step256 s39 0x92722c85 w39\n      s41 = step256 s40 0xa2bfe8a1 w40\n      s42 = step256 s41 0xa81a664b w41\n      s43 = step256 s42 0xc24b8b70 w42\n      s44 = step256 s43 0xc76c51a3 w43\n      s45 = step256 s44 0xd192e819 w44\n      s46 = step256 s45 0xd6990624 w45\n      s47 = step256 s46 0xf40e3585 w46\n      s48 = step256 s47 0x106aa070 w47\n      s49 = step256 s48 0x19a4c116 w48\n      s50 = step256 s49 0x1e376c08 w49\n      s51 = step256 s50 0x2748774c w50\n      s52 = step256 s51 0x34b0bcb5 w51\n      s53 = step256 s52 0x391c0cb3 w52\n      s54 = step256 s53 0x4ed8aa4a w53\n      s55 = step256 s54 0x5b9cca4f w54\n      s56 = step256 s55 0x682e6ff3 w55\n      s57 = step256 s56 0x748f82ee w56\n      s58 = step256 s57 0x78a5636f w57\n      s59 = step256 s58 0x84c87814 w58\n      s60 = step256 s59 0x8cc70208 w59\n      s61 = step256 s60 0x90befffa w60\n      s62 = step256 s61 0xa4506ceb w61\n      s63 = step256 s62 0xbef9a3f7 w62\n      s64 = step256 s63 0xc67178f2 w63\n      SHA256S a64 b64 c64 d64 e64 f64 g64 h64 = s64\n  return $! SHA256S (a00 + a64) (b00 + b64) (c00 + c64) (d00 + d64)\n                    (e00 + e64) (f00 + f64) (g00 + g64) (h00 + h64)\n\n{-# INLINE step256 #-}\nstep256 :: SHA256State -> Word32 -> Word32 -> SHA256State\nstep256 !(SHA256S a b c d e f g h) k w = SHA256S a' b' c' d' e' f' g' h'\n where\n  t1 = h + bsig256_1 e + ch e f g + k + w\n  t2 = bsig256_0 a + maj a b c\n  h' = g\n  g' = f\n  f' = e\n  e' = d + t1\n  d' = c\n  c' = b\n  b' = a\n  a' = t1 + t2\n\nprocessSHA512Block :: SHA512State -> Get SHA512State\nprocessSHA512Block !s00@(SHA512S a00 b00 c00 d00 e00 f00 g00 h00) = do\n  (SHA512Sched w00 w01 w02 w03 w04 w05 w06 w07 w08 w09\n               w10 w11 w12 w13 w14 w15 w16 w17 w18 w19\n               w20 w21 w22 w23 w24 w25 w26 w27 w28 w29\n               w30 w31 w32 w33 w34 w35 w36 w37 w38 w39\n               w40 w41 w42 w43 w44 w45 w46 w47 w48 w49\n               w50 w51 w52 w53 w54 w55 w56 w57 w58 w59\n               w60 w61 w62 w63 w64 w65 w66 w67 w68 w69\n               w70 w71 w72 w73 w74 w75 w76 w77 w78 w79) <- getSHA512Sched\n  let s01 = step512 s00 0x428a2f98d728ae22 w00\n      s02 = step512 s01 0x7137449123ef65cd w01\n      s03 = step512 s02 0xb5c0fbcfec4d3b2f w02\n      s04 = step512 s03 0xe9b5dba58189dbbc w03\n      s05 = step512 s04 0x3956c25bf348b538 w04\n      s06 = step512 s05 0x59f111f1b605d019 w05\n      s07 = step512 s06 0x923f82a4af194f9b w06\n      s08 = step512 s07 0xab1c5ed5da6d8118 w07\n      s09 = step512 s08 0xd807aa98a3030242 w08\n      s10 = step512 s09 0x12835b0145706fbe w09\n      s11 = step512 s10 0x243185be4ee4b28c w10\n      s12 = step512 s11 0x550c7dc3d5ffb4e2 w11\n      s13 = step512 s12 0x72be5d74f27b896f w12\n      s14 = step512 s13 0x80deb1fe3b1696b1 w13\n      s15 = step512 s14 0x9bdc06a725c71235 w14\n      s16 = step512 s15 0xc19bf174cf692694 w15\n      s17 = step512 s16 0xe49b69c19ef14ad2 w16\n      s18 = step512 s17 0xefbe4786384f25e3 w17\n      s19 = step512 s18 0x0fc19dc68b8cd5b5 w18\n      s20 = step512 s19 0x240ca1cc77ac9c65 w19\n      s21 = step512 s20 0x2de92c6f592b0275 w20\n      s22 = step512 s21 0x4a7484aa6ea6e483 w21\n      s23 = step512 s22 0x5cb0a9dcbd41fbd4 w22\n      s24 = step512 s23 0x76f988da831153b5 w23\n      s25 = step512 s24 0x983e5152ee66dfab w24\n      s26 = step512 s25 0xa831c66d2db43210 w25\n      s27 = step512 s26 0xb00327c898fb213f w26\n      s28 = step512 s27 0xbf597fc7beef0ee4 w27\n      s29 = step512 s28 0xc6e00bf33da88fc2 w28\n      s30 = step512 s29 0xd5a79147930aa725 w29\n      s31 = step512 s30 0x06ca6351e003826f w30\n      s32 = step512 s31 0x142929670a0e6e70 w31\n      s33 = step512 s32 0x27b70a8546d22ffc w32\n      s34 = step512 s33 0x2e1b21385c26c926 w33\n      s35 = step512 s34 0x4d2c6dfc5ac42aed w34\n      s36 = step512 s35 0x53380d139d95b3df w35\n      s37 = step512 s36 0x650a73548baf63de w36\n      s38 = step512 s37 0x766a0abb3c77b2a8 w37\n      s39 = step512 s38 0x81c2c92e47edaee6 w38\n      s40 = step512 s39 0x92722c851482353b w39\n      s41 = step512 s40 0xa2bfe8a14cf10364 w40\n      s42 = step512 s41 0xa81a664bbc423001 w41\n      s43 = step512 s42 0xc24b8b70d0f89791 w42\n      s44 = step512 s43 0xc76c51a30654be30 w43\n      s45 = step512 s44 0xd192e819d6ef5218 w44\n      s46 = step512 s45 0xd69906245565a910 w45\n      s47 = step512 s46 0xf40e35855771202a w46\n      s48 = step512 s47 0x106aa07032bbd1b8 w47\n      s49 = step512 s48 0x19a4c116b8d2d0c8 w48\n      s50 = step512 s49 0x1e376c085141ab53 w49\n      s51 = step512 s50 0x2748774cdf8eeb99 w50\n      s52 = step512 s51 0x34b0bcb5e19b48a8 w51\n      s53 = step512 s52 0x391c0cb3c5c95a63 w52\n      s54 = step512 s53 0x4ed8aa4ae3418acb w53\n      s55 = step512 s54 0x5b9cca4f7763e373 w54\n      s56 = step512 s55 0x682e6ff3d6b2b8a3 w55\n      s57 = step512 s56 0x748f82ee5defb2fc w56\n      s58 = step512 s57 0x78a5636f43172f60 w57\n      s59 = step512 s58 0x84c87814a1f0ab72 w58\n      s60 = step512 s59 0x8cc702081a6439ec w59\n      s61 = step512 s60 0x90befffa23631e28 w60\n      s62 = step512 s61 0xa4506cebde82bde9 w61\n      s63 = step512 s62 0xbef9a3f7b2c67915 w62\n      s64 = step512 s63 0xc67178f2e372532b w63\n      s65 = step512 s64 0xca273eceea26619c w64\n      s66 = step512 s65 0xd186b8c721c0c207 w65\n      s67 = step512 s66 0xeada7dd6cde0eb1e w66\n      s68 = step512 s67 0xf57d4f7fee6ed178 w67\n      s69 = step512 s68 0x06f067aa72176fba w68\n      s70 = step512 s69 0x0a637dc5a2c898a6 w69\n      s71 = step512 s70 0x113f9804bef90dae w70\n      s72 = step512 s71 0x1b710b35131c471b w71\n      s73 = step512 s72 0x28db77f523047d84 w72\n      s74 = step512 s73 0x32caab7b40c72493 w73\n      s75 = step512 s74 0x3c9ebe0a15c9bebc w74\n      s76 = step512 s75 0x431d67c49c100d4c w75\n      s77 = step512 s76 0x4cc5d4becb3e42b6 w76\n      s78 = step512 s77 0x597f299cfc657e2a w77\n      s79 = step512 s78 0x5fcb6fab3ad6faec w78\n      s80 = step512 s79 0x6c44198c4a475817 w79\n      SHA512S a80 b80 c80 d80 e80 f80 g80 h80 = s80\n  return $! SHA512S (a00 + a80) (b00 + b80) (c00 + c80) (d00 + d80)\n                    (e00 + e80) (f00 + f80) (g00 + g80) (h00 + h80)\n\n{-# INLINE step512 #-}\nstep512 :: SHA512State -> Word64 -> Word64 -> SHA512State\nstep512 !(SHA512S a b c d e f g h) k w = SHA512S a' b' c' d' e' f' g' h'\n where\n  t1 = h + bsig512_1 e + ch e f g + k + w\n  t2 = bsig512_0 a + maj a b c\n  h' = g\n  g' = f\n  f' = e\n  e' = d + t1\n  d' = c\n  c' = b\n  b' = a\n  a' = t1 + t2\n\n-- --------------------------------------------------------------------------\n--\n-- Run the routines\n--\n-- --------------------------------------------------------------------------\n\nrunSHA :: a -> (a -> Get a) -> ByteString -> a\nrunSHA s nextChunk input = runGet (getAll s) input\n where\n  getAll s_in = do\n    done <- isEmpty\n    if done\n      then return s_in\n      else nextChunk s_in >>= getAll\n\nrunSHAIncremental :: a -> (a -> Get a) -> Decoder a\nrunSHAIncremental s nextChunk = runGetIncremental (getAll s)\n where\n  getAll s_in = do\n    done <- isEmpty\n    if done\n      then return s_in\n      else nextChunk s_in >>= getAll\n\ngeneric_complete :: (t -> [SBS.ByteString]) -> (a -> Put) -> Decoder a -> t\n  -> Digest a\ngeneric_complete pad synthesize decoder len =\n  let decoder' = pushEndOfInput $ foldl' pushChunk decoder $ pad len\n  in case decoder' of\n       Fail _ _ _ -> error \"Decoder is in Fail state.\"\n       Partial _ -> error \"Decoder is in Partial state.\"\n       Done _ _ x -> Digest $ runPut $! synthesize x\n\n-- |Compute the SHA-1 hash of the given ByteString. The output is guaranteed\n-- to be exactly 160 bits, or 20 bytes, long. This is a good default for\n-- programs that need a good, but not necessarily hyper-secure, hash function.\nsha1 :: ByteString -> Digest SHA1State\nsha1 bs_in = Digest bs_out\n where\n  bs_pad = padSHA1 bs_in\n  fstate = runSHA initialSHA1State processSHA1Block bs_pad\n  bs_out = runPut $! synthesizeSHA1 fstate\n\n-- |Similar to `sha1` but use an incremental interface. When the decoder has\n-- been completely fed, `completeSha1Incremental` must be used so it can\n-- finish successfully.\nsha1Incremental :: Decoder SHA1State\nsha1Incremental = runSHAIncremental initialSHA1State processSHA1Block\n\ncompleteSha1Incremental :: Decoder SHA1State -> Int -> Digest SHA1State\ncompleteSha1Incremental = generic_complete padSHA1Chunks synthesizeSHA1\n\n-- |Compute the SHA-224 hash of the given ByteString. Note that SHA-224 and\n-- SHA-384 differ only slightly from SHA-256 and SHA-512, and use truncated\n-- versions of the resulting hashes. So using 224/384 may not, in fact, save\n-- you very much ...\nsha224 :: ByteString -> Digest SHA256State\nsha224 bs_in = Digest bs_out\n where\n  bs_pad = padSHA1 bs_in\n  fstate = runSHA initialSHA224State processSHA256Block bs_pad\n  bs_out = runPut $! synthesizeSHA224 fstate\n\n-- |Similar to `sha224` but use an incremental interface. When the decoder has\n-- been completely fed, `completeSha224Incremental` must be used so it can\n-- finish successfully.\nsha224Incremental :: Decoder SHA256State\nsha224Incremental = runSHAIncremental initialSHA224State processSHA256Block\n\ncompleteSha224Incremental :: Decoder SHA256State -> Int -> Digest SHA256State\ncompleteSha224Incremental = generic_complete padSHA1Chunks synthesizeSHA224\n\n-- |Compute the SHA-256 hash of the given ByteString. The output is guaranteed\n-- to be exactly 256 bits, or 32 bytes, long. If your security requirements\n-- are pretty serious, this is a good choice. For truly significant security\n-- concerns, however, you might try one of the bigger options.\nsha256 :: ByteString -> Digest SHA256State\nsha256 bs_in = Digest bs_out\n where\n  bs_pad = padSHA1 bs_in\n  fstate = runSHA initialSHA256State processSHA256Block bs_pad\n  bs_out = runPut $! synthesizeSHA256 fstate\n\n-- |Similar to `sha256` but use an incremental interface. When the decoder has\n-- been completely fed, `completeSha256Incremental` must be used so it can\n-- finish successfully.\nsha256Incremental :: Decoder SHA256State\nsha256Incremental = runSHAIncremental initialSHA256State processSHA256Block\n\ncompleteSha256Incremental :: Decoder SHA256State -> Int -> Digest SHA256State\ncompleteSha256Incremental = generic_complete padSHA1Chunks synthesizeSHA256\n\n-- |Compute the SHA-384 hash of the given ByteString. Yup, you guessed it,\n-- the output will be exactly 384 bits, or 48 bytes, long.\nsha384 :: ByteString -> Digest SHA512State\nsha384 bs_in = Digest bs_out\n where\n  bs_pad = padSHA512 bs_in\n  fstate = runSHA initialSHA384State processSHA512Block bs_pad\n  bs_out = runPut $! synthesizeSHA384 fstate\n\n-- |Similar to `sha384` but use an incremental interface. When the decoder has\n-- been completely fed, `completeSha384Incremental` must be used so it can\n-- finish successfully.\nsha384Incremental :: Decoder SHA512State\nsha384Incremental = runSHAIncremental initialSHA384State processSHA512Block\n\ncompleteSha384Incremental :: Decoder SHA512State -> Int -> Digest SHA512State\ncompleteSha384Incremental = generic_complete padSHA512Chunks synthesizeSHA384\n\n-- |For those for whom only the biggest hashes will do, this computes the\n-- SHA-512 hash of the given ByteString. The output will be 64 bytes, or\n-- 512 bits, long.\nsha512 :: ByteString -> Digest SHA512State\nsha512 bs_in = Digest bs_out\n where\n  bs_pad = padSHA512 bs_in\n  fstate = runSHA initialSHA512State processSHA512Block bs_pad\n  bs_out = runPut $! synthesizeSHA512 fstate\n\n-- |Similar to `sha512` but use an incremental interface. When the decoder has\n-- been completely fed, `completeSha512Incremental` must be used so it can\n-- finish successfully.\nsha512Incremental :: Decoder SHA512State\nsha512Incremental = runSHAIncremental initialSHA512State processSHA512Block\n\ncompleteSha512Incremental :: Decoder SHA512State -> Int -> Digest SHA512State\ncompleteSha512Incremental = generic_complete padSHA512Chunks synthesizeSHA512\n\n-- --------------------------------------------------------------------------\n\n-- | Compute an HMAC using SHA-1.\nhmacSha1\n  :: ByteString  -- ^ secret key\n  -> ByteString  -- ^ message\n  -> Digest SHA1State     -- ^ SHA-1 MAC\nhmacSha1 = hmac sha1 64\n\n-- | Compute an HMAC using SHA-224.\nhmacSha224\n  :: ByteString  -- ^ secret key\n  -> ByteString  -- ^ message\n  -> Digest SHA256State     -- ^ SHA-224 MAC\nhmacSha224 = hmac sha224 64\n\n-- | Compute an HMAC using SHA-256.\nhmacSha256\n  :: ByteString  -- ^ secret key\n  -> ByteString  -- ^ message\n  -> Digest SHA256State  -- ^ SHA-256 MAC\nhmacSha256 = hmac sha256 64\n\n-- | Compute an HMAC using SHA-384.\nhmacSha384\n  :: ByteString  -- ^ secret key\n  -> ByteString  -- ^ message\n  -> Digest SHA512State     -- ^ SHA-384 MAC\nhmacSha384 = hmac sha384 128\n\n-- | Compute an HMAC using SHA-512.\nhmacSha512\n  :: ByteString  -- ^ secret key\n  -> ByteString  -- ^ message\n  -> Digest SHA512State     -- ^ SHA-512 MAC\nhmacSha512 = hmac sha512 128\n\n-- --------------------------------------------------------------------------\n\nhmac :: (ByteString -> Digest t) -> Int -> ByteString -> ByteString -> Digest t\nhmac f bl k m = f (BS.append opad (bytestringDigest (f (BS.append ipad m))))\n where\n  opad = BS.map (xor ov) k'\n  ipad = BS.map (xor iv) k'\n  ov = 0x5c :: Word8\n  iv = 0x36 :: Word8\n\n  k' = BS.append kt pad\n   where\n    kt  = if kn > bn then bytestringDigest (f k) else k\n    pad = BS.replicate (bn - ktn) 0\n    kn  = fromIntegral (BS.length k)\n    ktn = fromIntegral (BS.length kt)\n    bn  = fromIntegral bl\n\n-- --------------------------------------------------------------------------\n--\n--                                OTHER\n--\n-- --------------------------------------------------------------------------\n\n\n-- | Convert a digest to a string.\n-- The digest is rendered as fixed with hexadecimal number.\nshowDigest :: Digest t -> String\nshowDigest (Digest bs) = showDigestBS bs\n\n-- |Prints out a bytestring in hexadecimal. Just for convenience.\nshowDigestBS :: ByteString -> String\nshowDigestBS bs = foldr paddedShowHex [] (BS.unpack bs)\n where\n   paddedShowHex x xs = intToDigit (fromIntegral (x `shiftR` 4))\n                      : intToDigit (fromIntegral (x .&. 0xf))\n                      : xs\n\n-- | Convert a digest to an Integer.\nintegerDigest :: Digest t -> Integer\nintegerDigest (Digest bs) = BS.foldl' addShift 0 bs\n where addShift n y = (n `shiftL` 8) .|. fromIntegral y\n\n-- | Convert a digest to a ByteString.\nbytestringDigest :: Digest t -> ByteString\nbytestringDigest (Digest bs) = bs\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Digest.hs",
    "content": "-- | This modules wraps Data.Digest.Pure.SHA in order to simulate direct access to the SHA-256 compression function by providing access to SHA-256 midstates.\n{-# LANGUAGE BangPatterns #-}\nmodule Simplicity.Digest\n  ( Hash256, be256, be256_, le256, le256_\n  , get256Bits, put256Bits\n  , integerHash256, hash0\n  , IV, noTagIv, tagIv, ivHash, bslHash, bsHash, bslDoubleHash, taggedHash, bitStringHash\n  , Block512, compress, compressHalf\n  , freeStart\n  , Ctx(..), ctxInit, ctxBuild, ctxAdd, ctxFinalize\n  ) where\n\nimport Control.Monad (replicateM)\nimport Control.Monad.Trans.State (evalState, state)\nimport Data.Binary.Get (Decoder(..), pushChunk, pushChunks, pushEndOfInput)\nimport qualified Data.Binary as Binary\nimport Data.Bits ((.|.), bit, shiftL, testBit, zeroBits)\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Char8 as BSC\nimport qualified Data.ByteString.Short as BSS\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.List (foldl')\nimport Data.Serialize (Serialize, encode, get, getShortByteString, put, putShortByteString)\nimport Lens.Family2 (Adapter', Lens', (^.), (^..), over, review, under)\nimport Lens.Family2.Stock (bend, bend_)\nimport Lens.Family2.Unchecked (adapter)\nimport Numeric (showHex)\nimport Simplicity.Digest.Pure.SHA\nimport Simplicity.Word\nimport Simplicity.Serialization\n\n-- | Represents a 256-bit hash value or midstate from SHA-256.\nnewtype Hash256 = Hash256 { hash256 :: BSS.ShortByteString } deriving (Eq, Ord)\n\ninstance Show Hash256 where\n  show h = \"0x\" ++ showHex256 (h^.be256_)\n\ninstance Serialize Hash256 where\n  get = Hash256 <$> getShortByteString 32\n  put (Hash256 bs) = putShortByteString bs\n\n-- | A 'Lens' accessing a 'Word256' from a 'Hash256' using a big endian interpretation.\nbe256_ :: Lens' Hash256 Word256\nbe256_ = under be256\n\n-- | An adaptor converting a 'Hash256' to a 'Word256' using a big endian interpretation.\nbe256 :: Adapter' Hash256 Word256\nbe256 = adapter to fro\n where\n  fro w = Hash256 $ BSS.toShort (encode w)\n  to h = foldl' go 0 . BSS.unpack $ hash256 h\n   where\n    go n w = (n `shiftL` 8) .|. fromIntegral w\n\n-- | A 'Lens' accessing a 'Word256' from a 'Hash256' using a little endian interpretation.\nle256_ :: Lens' Hash256 Word256\nle256_ = under le256\n\n-- | An adaptor converting a 'Hash256' to a 'Word256' using a little endian interpretation.\nle256 :: Adapter' Hash256 Word256\nle256 = adapter rev rev . be256\n where\n  rev = Hash256 . BSS.toShort . BS.reverse . BSS.fromShort . hash256\n\n-- | Deserializes a 256-bit hash value from a stream of 'Bool's.\n--\n-- Note that the type @forall m. Monad m => m Bool -> m a@ is isomorphic to the free monad over the @X²@ functor.\n-- In other words, 'get256Bits' has the type of a binary branching tree with leaves containing 'Hash256' values.\n--\n-- Due to the flat nature of 'Hash256' only the 'Applicative' interface happens to be used by 'get256Bits'.\n-- This is why the constraint is 'Applicative' instead of 'Monad'.\nget256Bits :: Applicative m => m Bool -> m Hash256\nget256Bits = review (be256.bend)\n\n-- | Serializes a 256-bit hash value to a stream of 'Bool's.\nput256Bits :: Hash256 -> DList Bool\nput256Bits h k = (h^..be256_.bend_) ++ k\n\n-- | Extracts the 256 hash value as an integer.\nintegerHash256 :: Hash256 -> Integer\nintegerHash256 h = toInteger $ h^.be256_\n\n-- | A hash value with all bits set to 0.\n--\n-- @ integerHash256 hash0 = 0 @\nhash0 :: Hash256\nhash0 = review (over be256) 0\n\n-- | Represents a SHA-256 midstate.  This is either the SHA-256 initial value,\n-- or some SHA-256 midstate created from applying the SHA-256 'compress'ion\n-- function.\nnewtype IV = IV (Decoder SHA256State)\n\n-- | The SHA-256 initial value.\nnoTagIv :: IV\nnoTagIv = IV sha256Incremental\n\n-- | Return the SHA-256 midstate after compression of a block of the SHA256 digest of the given tag name twice.\n-- This twice repeated SHA256 digest is the tagged hash format used by BIP-340 and BIP-341.\ntagIv :: String -> IV\ntagIv tag = compress noTagIv (tagDigest, tagDigest)\n where\n  tagDigest = bsHash . BSC.pack $ tag\n\n-- | Realize a initial value as a concrete Hash.\nivHash :: IV -> Hash256\nivHash (IV state) =  case pushEndOfInput state of\n  Done _ _ x -> Hash256 . BSS.toShort . BSL.toStrict . Binary.encode $ x\n  _          -> error \"getHash256 unexpected decoder state\"\n\n-- | Restore an IV from an given midstate.\n--\n-- WARNING: Use of 'freeStart' may violate the security assumptions about SHA-256.\nfreeStart :: Hash256 -> IV\nfreeStart midstate = IV $ runSHAIncremental midstateSHA256State processSHA256Block\n where\n  midstateSHA256State = Binary.decode . BSL.fromStrict . encode $ midstate\n\n-- | Computes a SHA-256 hash from a lazy 'BSL.ByteString'.\nbslHash :: BSL.ByteString -> Hash256\nbslHash = ivHash . IV . pushChunks sha256Incremental . padSHA1\n\n-- | Computes a SHA-256 hash from a 'BS.ByteString'.\nbsHash :: BS.ByteString -> Hash256\nbsHash = bslHash . BSL.fromStrict\n\n-- | Computes a Bitcoin-style double SHA-256 hash from a lazy 'BSL.ByteString'.\nbslDoubleHash :: BSL.ByteString -> Hash256\nbslDoubleHash = bsHash . encode . bslHash\n\n-- | Computes a SHA-256 tagged hash.\ntaggedHash :: String -- ^ tag\n           -> BS.ByteString -- ^ message\n           -> Hash256\ntaggedHash tag str = ivHash . IV . pushChunks state $ BSL.fromStrict str <> BSL.fromChunks (padSHA1Chunks (len + 64))\n where\n  IV state = tagIv tag\n  len = BS.length str\n\n-- Prepare a bit string for SHA-256 hashing by adding the padding and grouping bits into blocks.\npadSha256 :: [Bool] -> [Block512]\npadSha256 l = go 0 (l ++ [True])\n where\n  go :: Word64 -> [Bool] -> [Block512]\n  go !i l | 512 < lenPre + 64 = blockify pre : go (i + fromIntegral lenPre) post\n          | otherwise = [blockify (pre ++ replicate (512 - 64 - lenPre) False ++ map (testBit (i + fromIntegral lenPre - 1)) [63, 62 .. 0])]\n   where\n    (pre, post) = splitAt 512 l\n    lenPre = length pre\n    blockify = evalState (twice (get256Bits (state prog)))\n     where\n      prog [] = (False, [])\n      prog (b:bs) = (b, bs)\n      twice m = (,) <$> m <*> m\n\n-- | Compues a SHA-256 hash from a bit-string.\nbitStringHash :: [Bool] -> Hash256\nbitStringHash = ivHash . foldl' compress (IV sha256Incremental) . padSha256\n\n-- | A SHA-256 block is 512 bits.  For Simplicity's Merkle tree application, we\n-- will be building blocks containing hashes.\ntype Block512 = (Hash256, Hash256)\n\n-- | Given an initial value and a block of data consisting of a pair of hashes, apply the SHA-256 compression function.\ncompress :: IV -> Block512 -> IV\ncompress (IV state) (h1, h2) = IV $ state `pushChunk` BSS.fromShort (hash256 h1) `pushChunk` BSS.fromShort (hash256 h2)\n\n-- | Given an initial value and a block of data consisting of a one hash preceded by 256-bits of zeros, apply the SHA-256 compression function.\ncompressHalf :: IV -> Hash256 -> IV\ncompressHalf iv h = compress iv (hash0, h)\n\n-- | A SHA-256 context for bytes.\ndata Ctx = Ctx { ctxBuffer :: BS.ByteString\n               , ctxCounter :: Integer\n               , ctxIV :: IV\n               }\n\n-- | Initialize an empty 'Ctx'.\nctxInit :: Ctx\nctxInit = Ctx { ctxBuffer = mempty, ctxCounter = 0, ctxIV = noTagIv }\n\n-- | Normalize the context's buffer to less than 64 bytes.\n--\n-- This may fail if the SHA-256 counter overflows.\nctxNormalize :: Ctx -> Maybe Ctx\nctxNormalize ctx | 2^55 <= ctxCounter ctx = Nothing\n                 | BS.length (ctxBuffer ctx) < 64 = Just ctx\n                 | otherwise = ctxNormalize\n                             $ Ctx { ctxBuffer = BS.drop 64 (ctxBuffer ctx)\n                                   , ctxCounter = 1 + ctxCounter ctx\n                                   , ctxIV = let IV state = ctxIV ctx in IV (state `pushChunk` BS.take 64 (ctxBuffer ctx))\n                                   }\n\n-- | Append a bytestring to a context.\n--\n-- This may fail if the SHA-256 counter overflows.\nctxAdd :: Ctx -> BS.ByteString -> Maybe Ctx\nctxAdd ctx bs = ctxNormalize $ ctx { ctxBuffer = ctxBuffer ctx <> bs }\n\n-- | Freely construct a SHA-256 'Ctx' from its components.\n--\n-- This may fail if the SHA-256 counter overflows.\n--\n-- WARNING: Use of 'ctxBuild' may violate the security assumptions about SHA-256.\nctxBuild :: [Word8] -- ^ Buffer\n         -> Integer -- ^ Compression count\n         -> Hash256 -- ^ Midstate\n         -> Maybe Ctx\nctxBuild buffer counter midstate = ctxNormalize $ Ctx { ctxBuffer = BS.pack buffer\n                                                      , ctxCounter = counter\n                                                      , ctxIV = freeStart midstate\n                                                      }\n\n-- | Add the SHA-256 padding an produce the final hash output.\nctxFinalize :: Ctx -> Hash256\nctxFinalize ctx | 8*size < 2^64 = Hash256 . BSS.toShort . BSL.toStrict . Binary.encode\n                              $ completeSha256Incremental (state `pushChunk` ctxBuffer ctx) (fromInteger size)\n where\n  size = ctxCounter ctx * 64 + toInteger (BS.length (ctxBuffer ctx))\n  IV state = ctxIV ctx\n"
  },
  {
    "path": "Haskell/Core/Simplicity/FFI/Frame.hs",
    "content": "{-# LANGUAGE ForeignFunctionInterface, GADTs #-}\nmodule Simplicity.FFI.Frame\n ( unsafeCoreJet, unsafeLocalCoreJet\n , FrameItem\n ) where\n\nimport Control.Arrow (Kleisli(Kleisli))\nimport Data.Functor.Compose (Compose(..))\nimport Foreign.C.Types (CSize(..), CBool(..))\nimport Foreign.Ptr (Ptr, plusPtr)\nimport Foreign.Storable (Storable(..))\nimport Foreign.Marshal.Alloc (allocaBytes)\nimport Foreign.Marshal.Unsafe (unsafeLocalState)\nimport Foreign.Marshal.Utils (fillBytes)\nimport System.IO.Unsafe (unsafePerformIO)\n\nimport Simplicity.BitMachine.Ty (bitSizeR, padLR, padRR)\nimport Simplicity.Ty\n\n-- Abstract types representing the C data types used in frame.c\nnewtype UWORD = UWORD UWORD\nnewtype FrameItem = FrameItem FrameItem\n\nforeign import ccall unsafe \"&\" c_sizeof_UWORD :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_frameItem :: Ptr CSize\n\nforeign import ccall unsafe \"\" c_readBit :: Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_writeBit :: Ptr FrameItem -> CBool -> IO ()\nforeign import ccall unsafe \"\" c_forwardBits :: Ptr FrameItem -> CSize -> IO ()\nforeign import ccall unsafe \"\" c_skipBits :: Ptr FrameItem -> CSize -> IO ()\nforeign import ccall unsafe \"\" c_initReadFrame :: Ptr FrameItem -> CSize -> Ptr UWORD -> IO ()\nforeign import ccall unsafe \"\" c_initWriteFrame :: Ptr FrameItem -> CSize -> Ptr UWORD -> IO ()\n\nsizeof_UWORD :: Int\nsizeof_UWORD = fromIntegral . unsafeLocalState $ peek c_sizeof_UWORD\n\nsizeof_frameItem :: Int\nsizeof_frameItem = fromIntegral . unsafeLocalState $ peek c_sizeof_frameItem\n\nallocaFrameItem :: (Ptr FrameItem -> IO a) -> IO a\nallocaFrameItem = allocaBytes sizeof_frameItem\n\nreadFrameItem :: TyC a => Ptr FrameItem -> IO a\nreadFrameItem ptr = readFrameItemR reify ptr\n\nwriteFrameItem :: TyC a => a -> Ptr FrameItem -> IO ()\nwriteFrameItem ptr = writeFrameItemR reify ptr\n\nreadFrameItemR :: TyReflect a -> Ptr FrameItem -> IO a\nreadFrameItemR OneR _ = return ()\nreadFrameItemR (SumR a b) frame = do\n  bit <- c_readBit frame\n  if 0 /= bit then c_forwardBits frame (fromIntegral (padRR a b)) >> Right <$> readFrameItemR b frame\n              else c_forwardBits frame (fromIntegral (padLR a b)) >>  Left <$> readFrameItemR a frame\nreadFrameItemR (ProdR a b) frame = (,) <$> readFrameItemR a frame <*> readFrameItemR b frame\n\nwriteFrameItemR :: TyReflect a -> a -> Ptr FrameItem -> IO ()\nwriteFrameItemR OneR _ _ = return ()\nwriteFrameItemR (SumR a b) (Left v) frame = do\n  c_writeBit frame 0\n  c_skipBits frame (fromIntegral (padLR a b))\n  writeFrameItemR a v frame\nwriteFrameItemR (SumR a b) (Right v) frame = do\n  c_writeBit frame 1\n  c_skipBits frame (fromIntegral (padRR a b))\n  writeFrameItemR b v frame\nwriteFrameItemR (ProdR a b) (va, vb) frame = writeFrameItemR a va frame >> writeFrameItemR b vb frame\n\nwithReadFrame :: Int -> Ptr UWORD -> (Ptr FrameItem -> IO a) -> IO a\nwithReadFrame n from k = allocaFrameItem $ \\frame -> c_initReadFrame frame (fromIntegral n) from >> k frame\n\nwithWriteFrame :: Int -> Ptr UWORD -> (Ptr FrameItem -> IO a) -> IO a\nwithWriteFrame n from k = allocaFrameItem $ \\frame -> c_initWriteFrame frame (fromIntegral n) from >> k frame\n\nrunCoreJet :: (TyC a, TyC b) => (Ptr FrameItem -> Ptr FrameItem -> IO CBool) -> a -> IO (Maybe b)\nrunCoreJet jet = go\n where\n  (aR, bR) = reifyArrow . Kleisli $ Compose . go\n  roundUWord n = -((-n) `div` (8 * sizeof_UWORD))\n  aSize = roundUWord (bitSizeR aR) * sizeof_UWORD\n  bSize = roundUWord (bitSizeR bR) * sizeof_UWORD\n  arrSize = aSize + bSize\n  go a = allocaBytes arrSize $ \\arr -> do\n    fillBytes arr 0 arrSize\n    withWriteFrame (bitSizeR aR) (arr `plusPtr` aSize) $ writeFrameItem a\n    result <- withReadFrame (bitSizeR aR) arr $ \\readFrame ->\n              withWriteFrame (bitSizeR bR) (arr `plusPtr` arrSize) $ \\writeFrame ->\n              jet writeFrame readFrame\n    if 0 /= result\n      then Just <$> (withReadFrame (bitSizeR bR) (arr `plusPtr` aSize) $ readFrameItem)\n      else return Nothing\n\n-- | This cannot be used with jets that access global variables.\nunsafeLocalCoreJet :: (TyC a, TyC b) => (Ptr FrameItem -> Ptr FrameItem -> IO CBool) -> a -> Maybe b\nunsafeLocalCoreJet jet = unsafeLocalState . runCoreJet jet\n\nunsafeCoreJet :: (TyC a, TyC b) => (Ptr FrameItem -> Ptr FrameItem -> IO CBool) -> a -> Maybe b\nunsafeCoreJet jet = unsafePerformIO . runCoreJet jet\n"
  },
  {
    "path": "Haskell/Core/Simplicity/FFI/Jets.hs",
    "content": "-- | This module binds the C implementation of jets for Simplicity for assertions.\n{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.FFI.Jets\n ( verify\n , low_1, low_8, low_16, low_32, low_64\n , high_1, high_8, high_16, high_32, high_64\n , complement_1, complement_8, complement_16, complement_32, complement_64\n , and_1, and_8, and_16, and_32, and_64\n , or_1, or_8, or_16, or_32, or_64\n , xor_1, xor_8, xor_16, xor_32, xor_64\n , maj_1, maj_8, maj_16, maj_32, maj_64\n , xor_xor_1, xor_xor_8, xor_xor_16, xor_xor_32, xor_xor_64\n , ch_1, ch_8, ch_16, ch_32, ch_64\n , some_1, some_8, some_16, some_32, some_64\n , all_8, all_16, all_32, all_64\n , eq_1, eq_8, eq_16, eq_32, eq_64, eq_256\n , full_left_shift_8_1, full_left_shift_8_2, full_left_shift_8_4\n , full_left_shift_16_1, full_left_shift_16_2, full_left_shift_16_4, full_left_shift_16_8\n , full_left_shift_32_1, full_left_shift_32_2, full_left_shift_32_4, full_left_shift_32_8, full_left_shift_32_16\n , full_left_shift_64_1, full_left_shift_64_2, full_left_shift_64_4, full_left_shift_64_8, full_left_shift_64_16, full_left_shift_64_32\n , full_right_shift_8_1, full_right_shift_8_2, full_right_shift_8_4\n , full_right_shift_16_1, full_right_shift_16_2, full_right_shift_16_4, full_right_shift_16_8\n , full_right_shift_32_1, full_right_shift_32_2, full_right_shift_32_4, full_right_shift_32_8, full_right_shift_32_16\n , full_right_shift_64_1, full_right_shift_64_2, full_right_shift_64_4, full_right_shift_64_8, full_right_shift_64_16, full_right_shift_64_32\n , leftmost_8_1, leftmost_8_2, leftmost_8_4\n , leftmost_16_1, leftmost_16_2, leftmost_16_4, leftmost_16_8\n , leftmost_32_1, leftmost_32_2, leftmost_32_4, leftmost_32_8, leftmost_32_16\n , leftmost_64_1, leftmost_64_2, leftmost_64_4, leftmost_64_8, leftmost_64_16, leftmost_64_32\n , rightmost_8_1, rightmost_8_2, rightmost_8_4\n , rightmost_16_1, rightmost_16_2, rightmost_16_4, rightmost_16_8\n , rightmost_32_1, rightmost_32_2, rightmost_32_4, rightmost_32_8, rightmost_32_16\n , rightmost_64_1, rightmost_64_2, rightmost_64_4, rightmost_64_8, rightmost_64_16, rightmost_64_32\n , left_pad_low_1_8\n , left_pad_low_1_16, left_pad_low_8_16\n , left_pad_low_1_32, left_pad_low_8_32, left_pad_low_16_32\n , left_pad_low_1_64, left_pad_low_8_64, left_pad_low_16_64, left_pad_low_32_64\n , left_pad_high_1_8\n , left_pad_high_1_16, left_pad_high_8_16\n , left_pad_high_1_32, left_pad_high_8_32, left_pad_high_16_32\n , left_pad_high_1_64, left_pad_high_8_64, left_pad_high_16_64, left_pad_high_32_64\n , left_extend_1_8\n , left_extend_1_16, left_extend_8_16\n , left_extend_1_32, left_extend_8_32, left_extend_16_32\n , left_extend_1_64, left_extend_8_64, left_extend_16_64, left_extend_32_64\n , right_pad_low_1_8\n , right_pad_low_1_16, right_pad_low_8_16\n , right_pad_low_1_32, right_pad_low_8_32, right_pad_low_16_32\n , right_pad_low_1_64, right_pad_low_8_64, right_pad_low_16_64, right_pad_low_32_64\n , right_pad_high_1_8\n , right_pad_high_1_16, right_pad_high_8_16\n , right_pad_high_1_32, right_pad_high_8_32, right_pad_high_16_32\n , right_pad_high_1_64, right_pad_high_8_64, right_pad_high_16_64, right_pad_high_32_64\n , right_extend_8_16\n , right_extend_8_32, right_extend_16_32\n , right_extend_8_64, right_extend_16_64, right_extend_32_64\n , left_shift_with_8, left_shift_with_16, left_shift_with_32, left_shift_with_64\n , left_shift_8, left_shift_16, left_shift_32, left_shift_64\n , right_shift_with_8, right_shift_with_16, right_shift_with_32, right_shift_with_64\n , right_shift_8, right_shift_16, right_shift_32, right_shift_64\n , left_rotate_8, left_rotate_16, left_rotate_32, left_rotate_64\n , right_rotate_8, right_rotate_16, right_rotate_32, right_rotate_64\n , one_8, one_16, one_32, one_64\n , add_8, add_16, add_32, add_64\n , full_add_8, full_add_16, full_add_32, full_add_64\n , full_increment_8, full_increment_16, full_increment_32, full_increment_64\n , increment_8, increment_16, increment_32, increment_64\n , subtract_8, subtract_16, subtract_32, subtract_64\n , full_subtract_8, full_subtract_16, full_subtract_32, full_subtract_64\n , negate_8, negate_16, negate_32, negate_64\n , full_decrement_8, full_decrement_16, full_decrement_32, full_decrement_64\n , decrement_8, decrement_16, decrement_32, decrement_64\n , multiply_8, multiply_16, multiply_32, multiply_64\n , full_multiply_8, full_multiply_16, full_multiply_32, full_multiply_64\n , is_zero_8, is_zero_16, is_zero_32, is_zero_64\n , is_one_8, is_one_16, is_one_32, is_one_64\n , le_8, le_16, le_32, le_64\n , lt_8, lt_16, lt_32, lt_64\n , min_8, min_16, min_32, min_64\n , max_8, max_16, max_32, max_64\n , median_8, median_16, median_32, median_64\n , div_mod_8, div_mod_16, div_mod_32, div_mod_64\n , divide_8, divide_16, divide_32, divide_64\n , modulo_8, modulo_16, modulo_32, modulo_64\n , divides_8, divides_16, divides_32, divides_64\n , div_mod_128_64\n , sha_256_iv, sha_256_block\n , sha_256_ctx_8_init\n , sha_256_ctx_8_add_1\n , sha_256_ctx_8_add_2\n , sha_256_ctx_8_add_4\n , sha_256_ctx_8_add_8\n , sha_256_ctx_8_add_16\n , sha_256_ctx_8_add_32\n , sha_256_ctx_8_add_64\n , sha_256_ctx_8_add_128\n , sha_256_ctx_8_add_256\n , sha_256_ctx_8_add_512\n , sha_256_ctx_8_add_buffer_511\n , sha_256_ctx_8_finalize\n , fe_normalize, fe_negate, fe_add, fe_square, fe_multiply, fe_multiply_beta, fe_invert, fe_square_root, fe_is_zero, fe_is_odd\n , scalar_normalize, scalar_negate, scalar_add, scalar_square, scalar_multiply, scalar_multiply_lambda, scalar_invert, scalar_is_zero\n , gej_infinity, gej_rescale, gej_normalize, gej_negate, ge_negate, gej_double, gej_add, gej_ge_add_ex, gej_ge_add, gej_is_infinity, gej_equiv, gej_ge_equiv, gej_x_equiv, gej_y_is_odd, gej_is_on_curve, ge_is_on_curve\n , scale, off_curve_scale, generate, linear_combination_1, linear_verify_1, off_curve_linear_combination_1\n , decompress, point_verify_1\n , check_sig_verify\n , bip_0340_verify\n , swu, hash_to_curve\n , parse_lock, parse_sequence\n , tapdata_init\n ) where\n\nimport Foreign.Ptr (Ptr)\nimport Foreign.C.Types (CBool(..))\n\nimport Simplicity.FFI.Frame\nimport qualified Simplicity.Programs.Sha256.Lib as Sha256\nimport Simplicity.Programs.LibSecp256k1.Lib (FE, Scalar, GE, GEJ, Point, PubKey, Sig)\nimport qualified Simplicity.Programs.LibSecp256k1.Lib as LibSecp256k1\nimport Simplicity.Ty.Word\n\nforeign import ccall unsafe \"\" c_verify :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_low_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_low_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_low_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_low_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_low_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_high_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_high_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_high_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_high_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_high_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_complement_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_complement_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_complement_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_complement_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_complement_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_and_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_and_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_and_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_and_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_and_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_or_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_or_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_or_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_or_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_or_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_maj_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_maj_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_maj_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_maj_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_maj_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_xor_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_xor_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_xor_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_xor_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_xor_xor_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_ch_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_ch_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_ch_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_ch_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_ch_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_some_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_some_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_some_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_some_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_some_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_all_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_all_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_all_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_all_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_eq_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_eq_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_eq_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_eq_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_eq_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_eq_256 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_8_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_8_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_8_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_16_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_16_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_16_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_16_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_32_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_32_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_32_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_32_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_32_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_64_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_64_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_64_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_64_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_64_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_left_shift_64_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_8_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_8_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_8_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_16_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_16_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_16_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_16_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_32_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_32_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_32_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_32_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_32_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_64_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_64_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_64_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_64_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_64_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_right_shift_64_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_8_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_8_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_8_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_16_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_16_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_16_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_16_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_32_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_32_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_32_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_32_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_32_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_64_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_64_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_64_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_64_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_64_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_leftmost_64_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_8_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_8_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_8_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_16_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_16_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_16_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_16_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_32_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_32_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_32_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_32_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_32_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_64_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_64_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_64_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_64_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_64_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_rightmost_64_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_1_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_1_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_8_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_1_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_8_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_16_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_1_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_8_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_16_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_low_32_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_1_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_1_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_8_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_1_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_8_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_16_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_1_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_8_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_16_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_pad_high_32_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_1_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_1_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_8_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_1_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_8_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_16_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_1_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_8_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_16_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_extend_32_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_1_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_1_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_8_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_1_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_8_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_16_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_1_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_8_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_16_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_low_32_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_1_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_1_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_8_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_1_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_8_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_16_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_1_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_8_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_16_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_pad_high_32_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_extend_8_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_extend_8_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_extend_16_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_extend_8_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_extend_16_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_extend_32_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_with_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_with_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_with_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_with_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_shift_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_with_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_with_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_with_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_with_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_shift_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_rotate_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_rotate_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_rotate_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_left_rotate_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_rotate_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_rotate_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_rotate_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_right_rotate_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\n\nforeign import ccall unsafe \"\" c_one_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_one_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_one_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_one_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_add_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_add_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_add_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_add_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_add_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_add_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_add_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_add_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_increment_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_increment_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_increment_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_increment_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_increment_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_increment_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_increment_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_increment_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_subtract_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_subtract_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_subtract_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_subtract_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_subtract_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_subtract_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_subtract_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_subtract_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_negate_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_negate_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_negate_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_negate_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_decrement_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_decrement_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_decrement_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_decrement_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_decrement_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_decrement_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_decrement_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_decrement_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_multiply_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_multiply_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_multiply_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_multiply_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_multiply_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_multiply_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_multiply_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_full_multiply_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_zero_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_zero_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_zero_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_zero_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_one_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_one_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_one_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_is_one_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_le_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_le_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_le_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_le_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_lt_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_lt_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_lt_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_lt_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_min_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_min_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_min_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_min_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_max_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_max_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_max_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_max_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_median_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_median_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_median_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_median_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_div_mod_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_div_mod_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_div_mod_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_div_mod_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divide_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divide_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divide_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divide_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_modulo_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_modulo_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_modulo_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_modulo_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divides_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divides_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divides_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_divides_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_div_mod_128_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\n\nforeign import ccall unsafe \"\" c_sha_256_iv :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_block :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_init :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_2 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_4 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_8 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_16 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_32 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_64 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_128 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_256 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_512 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_add_buffer_511 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_sha_256_ctx_8_finalize :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\n\nforeign import ccall unsafe \"\" c_fe_normalize :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_negate :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_add :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_square :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_multiply :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_multiply_beta :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_invert :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_square_root :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_is_zero :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_fe_is_odd :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_normalize :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_negate :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_add :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_square :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_multiply :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_multiply_lambda :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_invert :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scalar_is_zero :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_infinity :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_rescale :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_normalize :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_negate :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_ge_negate :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_double :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_add :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_ge_add_ex :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_ge_add :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_is_infinity :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_equiv :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_ge_equiv :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_x_equiv :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_y_is_odd :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_gej_is_on_curve :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_ge_is_on_curve :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_scale :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_off_curve_scale :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_generate :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_linear_combination_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_off_curve_linear_combination_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_linear_verify_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_decompress :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_point_verify_1 :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_check_sig_verify :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_bip_0340_verify :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_swu :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_hash_to_curve :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_parse_lock :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_parse_sequence :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_tapdata_init :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\n\nverify :: Bit -> Maybe ()\nverify = unsafeLocalCoreJet c_verify\n\nlow_1 :: () -> Maybe Word1\nlow_1 = unsafeLocalCoreJet c_low_1\n\nlow_8 :: () -> Maybe Word8\nlow_8 = unsafeLocalCoreJet c_low_8\n\nlow_16 :: () -> Maybe Word16\nlow_16 = unsafeLocalCoreJet c_low_16\n\nlow_32 :: () -> Maybe Word32\nlow_32 = unsafeLocalCoreJet c_low_32\n\nlow_64 :: () -> Maybe Word64\nlow_64 = unsafeLocalCoreJet c_low_64\n\nhigh_1 :: () -> Maybe Word1\nhigh_1 = unsafeLocalCoreJet c_high_1\n\nhigh_8 :: () -> Maybe Word8\nhigh_8 = unsafeLocalCoreJet c_high_8\n\nhigh_16 :: () -> Maybe Word16\nhigh_16 = unsafeLocalCoreJet c_high_16\n\nhigh_32 :: () -> Maybe Word32\nhigh_32 = unsafeLocalCoreJet c_high_32\n\nhigh_64 :: () -> Maybe Word64\nhigh_64 = unsafeLocalCoreJet c_high_64\n\ncomplement_1 :: Word1 -> Maybe Word1\ncomplement_1 = unsafeLocalCoreJet c_complement_1\n\ncomplement_8 :: Word8 -> Maybe Word8\ncomplement_8 = unsafeLocalCoreJet c_complement_8\n\ncomplement_16 :: Word16 -> Maybe Word16\ncomplement_16 = unsafeLocalCoreJet c_complement_16\n\ncomplement_32 :: Word32 -> Maybe Word32\ncomplement_32 = unsafeLocalCoreJet c_complement_32\n\ncomplement_64 :: Word64 -> Maybe Word64\ncomplement_64 = unsafeLocalCoreJet c_complement_64\n\nand_1 :: (Word1, Word1) -> Maybe Word1\nand_1 = unsafeLocalCoreJet c_and_1\n\nand_8 :: (Word8, Word8) -> Maybe Word8\nand_8 = unsafeLocalCoreJet c_and_8\n\nand_16 :: (Word16, Word16) -> Maybe Word16\nand_16 = unsafeLocalCoreJet c_and_16\n\nand_32 :: (Word32, Word32) -> Maybe Word32\nand_32 = unsafeLocalCoreJet c_and_32\n\nand_64 :: (Word64, Word64) -> Maybe Word64\nand_64 = unsafeLocalCoreJet c_and_64\n\nor_1 :: (Word1, Word1) -> Maybe Word1\nor_1 = unsafeLocalCoreJet c_or_1\n\nor_8 :: (Word8, Word8) -> Maybe Word8\nor_8 = unsafeLocalCoreJet c_or_8\n\nor_16 :: (Word16, Word16) -> Maybe Word16\nor_16 = unsafeLocalCoreJet c_or_16\n\nor_32 :: (Word32, Word32) -> Maybe Word32\nor_32 = unsafeLocalCoreJet c_or_32\n\nor_64 :: (Word64, Word64) -> Maybe Word64\nor_64 = unsafeLocalCoreJet c_or_64\n\nxor_1 :: (Word1, Word1) -> Maybe Word1\nxor_1 = unsafeLocalCoreJet c_xor_1\n\nxor_8 :: (Word8, Word8) -> Maybe Word8\nxor_8 = unsafeLocalCoreJet c_xor_8\n\nxor_16 :: (Word16, Word16) -> Maybe Word16\nxor_16 = unsafeLocalCoreJet c_xor_16\n\nxor_32 :: (Word32, Word32) -> Maybe Word32\nxor_32 = unsafeLocalCoreJet c_xor_32\n\nxor_64 :: (Word64, Word64) -> Maybe Word64\nxor_64 = unsafeLocalCoreJet c_xor_64\n\nmaj_1 :: (Word1, (Word1, Word1)) -> Maybe Word1\nmaj_1 = unsafeLocalCoreJet c_maj_1\n\nmaj_8 :: (Word8, (Word8, Word8)) -> Maybe Word8\nmaj_8 = unsafeLocalCoreJet c_maj_8\n\nmaj_16 :: (Word16, (Word16, Word16)) -> Maybe Word16\nmaj_16 = unsafeLocalCoreJet c_maj_16\n\nmaj_32 :: (Word32, (Word32, Word32)) -> Maybe Word32\nmaj_32 = unsafeLocalCoreJet c_maj_32\n\nmaj_64 :: (Word64, (Word64, Word64)) -> Maybe Word64\nmaj_64 = unsafeLocalCoreJet c_maj_64\n\nxor_xor_1 :: (Word1, (Word1, Word1)) -> Maybe Word1\nxor_xor_1 = unsafeLocalCoreJet c_xor_xor_1\n\nxor_xor_8 :: (Word8, (Word8, Word8)) -> Maybe Word8\nxor_xor_8 = unsafeLocalCoreJet c_xor_xor_8\n\nxor_xor_16 :: (Word16, (Word16, Word16)) -> Maybe Word16\nxor_xor_16 = unsafeLocalCoreJet c_xor_xor_16\n\nxor_xor_32 :: (Word32, (Word32, Word32)) -> Maybe Word32\nxor_xor_32 = unsafeLocalCoreJet c_xor_xor_32\n\nxor_xor_64 :: (Word64, (Word64, Word64)) -> Maybe Word64\nxor_xor_64 = unsafeLocalCoreJet c_xor_xor_64\n\nch_1 :: (Word1, (Word1, Word1)) -> Maybe Word1\nch_1 = unsafeLocalCoreJet c_ch_1\n\nch_8 :: (Word8, (Word8, Word8)) -> Maybe Word8\nch_8 = unsafeLocalCoreJet c_ch_8\n\nch_16 :: (Word16, (Word16, Word16)) -> Maybe Word16\nch_16 = unsafeLocalCoreJet c_ch_16\n\nch_32 :: (Word32, (Word32, Word32)) -> Maybe Word32\nch_32 = unsafeLocalCoreJet c_ch_32\n\nch_64 :: (Word64, (Word64, Word64)) -> Maybe Word64\nch_64 = unsafeLocalCoreJet c_ch_64\n\nsome_1 :: Word1 -> Maybe Bit\nsome_1 = unsafeLocalCoreJet c_some_1\n\nsome_8 :: Word8 -> Maybe Bit\nsome_8 = unsafeLocalCoreJet c_some_8\n\nsome_16 :: Word16 -> Maybe Bit\nsome_16 = unsafeLocalCoreJet c_some_16\n\nsome_32 :: Word32 -> Maybe Bit\nsome_32 = unsafeLocalCoreJet c_some_32\n\nsome_64 :: Word64 -> Maybe Bit\nsome_64 = unsafeLocalCoreJet c_some_64\n\nall_8 :: Word8 -> Maybe Bit\nall_8 = unsafeLocalCoreJet c_all_8\n\nall_16 :: Word16 -> Maybe Bit\nall_16 = unsafeLocalCoreJet c_all_16\n\nall_32 :: Word32 -> Maybe Bit\nall_32 = unsafeLocalCoreJet c_all_32\n\nall_64 :: Word64 -> Maybe Bit\nall_64 = unsafeLocalCoreJet c_all_64\n\neq_1 :: (Word1, Word1) -> Maybe Bit\neq_1 = unsafeLocalCoreJet c_eq_1\n\neq_8 :: (Word8, Word8) -> Maybe Bit\neq_8 = unsafeLocalCoreJet c_eq_8\n\neq_16 :: (Word16, Word16) -> Maybe Bit\neq_16 = unsafeLocalCoreJet c_eq_16\n\neq_32 :: (Word32, Word32) -> Maybe Bit\neq_32 = unsafeLocalCoreJet c_eq_32\n\neq_64 :: (Word64, Word64) -> Maybe Bit\neq_64 = unsafeLocalCoreJet c_eq_64\n\neq_256 :: (Word256, Word256) -> Maybe Bit\neq_256 = unsafeLocalCoreJet c_eq_256\n\nfull_left_shift_8_1 :: (Word8, Word1) -> Maybe (Word1, Word8)\nfull_left_shift_8_1 = unsafeLocalCoreJet c_full_left_shift_8_1\n\nfull_left_shift_8_2 :: (Word8, Word2) -> Maybe (Word2, Word8)\nfull_left_shift_8_2 = unsafeLocalCoreJet c_full_left_shift_8_2\n\nfull_left_shift_8_4 :: (Word8, Word4) -> Maybe (Word4, Word8)\nfull_left_shift_8_4 = unsafeLocalCoreJet c_full_left_shift_8_4\n\nfull_left_shift_16_1 :: (Word16, Word1) -> Maybe (Word1, Word16)\nfull_left_shift_16_1 = unsafeLocalCoreJet c_full_left_shift_16_1\n\nfull_left_shift_16_2 :: (Word16, Word2) -> Maybe (Word2, Word16)\nfull_left_shift_16_2 = unsafeLocalCoreJet c_full_left_shift_16_2\n\nfull_left_shift_16_4 :: (Word16, Word4) -> Maybe (Word4, Word16)\nfull_left_shift_16_4 = unsafeLocalCoreJet c_full_left_shift_16_4\n\nfull_left_shift_16_8 :: (Word16, Word8) -> Maybe (Word8, Word16)\nfull_left_shift_16_8 = unsafeLocalCoreJet c_full_left_shift_16_8\n\nfull_left_shift_32_1 :: (Word32, Word1) -> Maybe (Word1, Word32)\nfull_left_shift_32_1 = unsafeLocalCoreJet c_full_left_shift_32_1\n\nfull_left_shift_32_2 :: (Word32, Word2) -> Maybe (Word2, Word32)\nfull_left_shift_32_2 = unsafeLocalCoreJet c_full_left_shift_32_2\n\nfull_left_shift_32_4 :: (Word32, Word4) -> Maybe (Word4, Word32)\nfull_left_shift_32_4 = unsafeLocalCoreJet c_full_left_shift_32_4\n\nfull_left_shift_32_8 :: (Word32, Word8) -> Maybe (Word8, Word32)\nfull_left_shift_32_8 = unsafeLocalCoreJet c_full_left_shift_32_8\n\nfull_left_shift_32_16 :: (Word32, Word16) -> Maybe (Word16, Word32)\nfull_left_shift_32_16 = unsafeLocalCoreJet c_full_left_shift_32_16\n\nfull_left_shift_64_1 :: (Word64, Word1) -> Maybe (Word1, Word64)\nfull_left_shift_64_1 = unsafeLocalCoreJet c_full_left_shift_64_1\n\nfull_left_shift_64_2 :: (Word64, Word2) -> Maybe (Word2, Word64)\nfull_left_shift_64_2 = unsafeLocalCoreJet c_full_left_shift_64_2\n\nfull_left_shift_64_4 :: (Word64, Word4) -> Maybe (Word4, Word64)\nfull_left_shift_64_4 = unsafeLocalCoreJet c_full_left_shift_64_4\n\nfull_left_shift_64_8 :: (Word64, Word8) -> Maybe (Word8, Word64)\nfull_left_shift_64_8 = unsafeLocalCoreJet c_full_left_shift_64_8\n\nfull_left_shift_64_16 :: (Word64, Word16) -> Maybe (Word16, Word64)\nfull_left_shift_64_16 = unsafeLocalCoreJet c_full_left_shift_64_16\n\nfull_left_shift_64_32 :: (Word64, Word32) -> Maybe (Word32, Word64)\nfull_left_shift_64_32 = unsafeLocalCoreJet c_full_left_shift_64_32\n\nfull_right_shift_8_1 :: (Word1, Word8) -> Maybe (Word8, Word1)\nfull_right_shift_8_1 = unsafeLocalCoreJet c_full_right_shift_8_1\n\nfull_right_shift_8_2 :: (Word2, Word8) -> Maybe (Word8, Word2)\nfull_right_shift_8_2 = unsafeLocalCoreJet c_full_right_shift_8_2\n\nfull_right_shift_8_4 :: (Word4, Word8) -> Maybe (Word8, Word4)\nfull_right_shift_8_4 = unsafeLocalCoreJet c_full_right_shift_8_4\n\nfull_right_shift_16_1 :: (Word1, Word16) -> Maybe (Word16, Word1)\nfull_right_shift_16_1 = unsafeLocalCoreJet c_full_right_shift_16_1\n\nfull_right_shift_16_2 :: (Word2, Word16) -> Maybe (Word16, Word2)\nfull_right_shift_16_2 = unsafeLocalCoreJet c_full_right_shift_16_2\n\nfull_right_shift_16_4 :: (Word4, Word16) -> Maybe (Word16, Word4)\nfull_right_shift_16_4 = unsafeLocalCoreJet c_full_right_shift_16_4\n\nfull_right_shift_16_8 :: (Word8, Word16) -> Maybe (Word16, Word8)\nfull_right_shift_16_8 = unsafeLocalCoreJet c_full_right_shift_16_8\n\nfull_right_shift_32_1 :: (Word1, Word32) -> Maybe (Word32, Word1)\nfull_right_shift_32_1 = unsafeLocalCoreJet c_full_right_shift_32_1\n\nfull_right_shift_32_2 :: (Word2, Word32) -> Maybe (Word32, Word2)\nfull_right_shift_32_2 = unsafeLocalCoreJet c_full_right_shift_32_2\n\nfull_right_shift_32_4 :: (Word4, Word32) -> Maybe (Word32, Word4)\nfull_right_shift_32_4 = unsafeLocalCoreJet c_full_right_shift_32_4\n\nfull_right_shift_32_8 :: (Word8, Word32) -> Maybe (Word32, Word8)\nfull_right_shift_32_8 = unsafeLocalCoreJet c_full_right_shift_32_8\n\nfull_right_shift_32_16 :: (Word16, Word32) -> Maybe (Word32, Word16)\nfull_right_shift_32_16 = unsafeLocalCoreJet c_full_right_shift_32_16\n\nfull_right_shift_64_1 :: (Word1, Word64) -> Maybe (Word64, Word1)\nfull_right_shift_64_1 = unsafeLocalCoreJet c_full_right_shift_64_1\n\nfull_right_shift_64_2 :: (Word2, Word64) -> Maybe (Word64, Word2)\nfull_right_shift_64_2 = unsafeLocalCoreJet c_full_right_shift_64_2\n\nfull_right_shift_64_4 :: (Word4, Word64) -> Maybe (Word64, Word4)\nfull_right_shift_64_4 = unsafeLocalCoreJet c_full_right_shift_64_4\n\nfull_right_shift_64_8 :: (Word8, Word64) -> Maybe (Word64, Word8)\nfull_right_shift_64_8 = unsafeLocalCoreJet c_full_right_shift_64_8\n\nfull_right_shift_64_16 :: (Word16, Word64) -> Maybe (Word64, Word16)\nfull_right_shift_64_16 = unsafeLocalCoreJet c_full_right_shift_64_16\n\nfull_right_shift_64_32 :: (Word32, Word64) -> Maybe (Word64, Word32)\nfull_right_shift_64_32 = unsafeLocalCoreJet c_full_right_shift_64_32\n\nleftmost_8_1 :: Word8 -> Maybe Word1\nleftmost_8_1 = unsafeLocalCoreJet c_leftmost_8_1\n\nleftmost_8_2 :: Word8 -> Maybe Word2\nleftmost_8_2 = unsafeLocalCoreJet c_leftmost_8_2\n\nleftmost_8_4 :: Word8 -> Maybe Word4\nleftmost_8_4 = unsafeLocalCoreJet c_leftmost_8_4\n\nleftmost_16_1 :: Word16 -> Maybe Word1\nleftmost_16_1 = unsafeLocalCoreJet c_leftmost_16_1\n\nleftmost_16_2 :: Word16 -> Maybe Word2\nleftmost_16_2 = unsafeLocalCoreJet c_leftmost_16_2\n\nleftmost_16_4 :: Word16 -> Maybe Word4\nleftmost_16_4 = unsafeLocalCoreJet c_leftmost_16_4\n\nleftmost_16_8 :: Word16 -> Maybe Word8\nleftmost_16_8 = unsafeLocalCoreJet c_leftmost_16_8\n\nleftmost_32_1 :: Word32 -> Maybe Word1\nleftmost_32_1 = unsafeLocalCoreJet c_leftmost_32_1\n\nleftmost_32_2 :: Word32 -> Maybe Word2\nleftmost_32_2 = unsafeLocalCoreJet c_leftmost_32_2\n\nleftmost_32_4 :: Word32 -> Maybe Word4\nleftmost_32_4 = unsafeLocalCoreJet c_leftmost_32_4\n\nleftmost_32_8 :: Word32 -> Maybe Word8\nleftmost_32_8 = unsafeLocalCoreJet c_leftmost_32_8\n\nleftmost_32_16 :: Word32 -> Maybe Word16\nleftmost_32_16 = unsafeLocalCoreJet c_leftmost_32_16\n\nleftmost_64_1 :: Word64 -> Maybe Word1\nleftmost_64_1 = unsafeLocalCoreJet c_leftmost_64_1\n\nleftmost_64_2 :: Word64 -> Maybe Word2\nleftmost_64_2 = unsafeLocalCoreJet c_leftmost_64_2\n\nleftmost_64_4 :: Word64 -> Maybe Word4\nleftmost_64_4 = unsafeLocalCoreJet c_leftmost_64_4\n\nleftmost_64_8 :: Word64 -> Maybe Word8\nleftmost_64_8 = unsafeLocalCoreJet c_leftmost_64_8\n\nleftmost_64_16 :: Word64 -> Maybe Word16\nleftmost_64_16 = unsafeLocalCoreJet c_leftmost_64_16\n\nleftmost_64_32 :: Word64 -> Maybe Word32\nleftmost_64_32 = unsafeLocalCoreJet c_leftmost_64_32\n\nrightmost_8_1 :: Word8 -> Maybe Word1\nrightmost_8_1 = unsafeLocalCoreJet c_rightmost_8_1\n\nrightmost_8_2 :: Word8 -> Maybe Word2\nrightmost_8_2 = unsafeLocalCoreJet c_rightmost_8_2\n\nrightmost_8_4 :: Word8 -> Maybe Word4\nrightmost_8_4 = unsafeLocalCoreJet c_rightmost_8_4\n\nrightmost_16_1 :: Word16 -> Maybe Word1\nrightmost_16_1 = unsafeLocalCoreJet c_rightmost_16_1\n\nrightmost_16_2 :: Word16 -> Maybe Word2\nrightmost_16_2 = unsafeLocalCoreJet c_rightmost_16_2\n\nrightmost_16_4 :: Word16 -> Maybe Word4\nrightmost_16_4 = unsafeLocalCoreJet c_rightmost_16_4\n\nrightmost_16_8 :: Word16 -> Maybe Word8\nrightmost_16_8 = unsafeLocalCoreJet c_rightmost_16_8\n\nrightmost_32_1 :: Word32 -> Maybe Word1\nrightmost_32_1 = unsafeLocalCoreJet c_rightmost_32_1\n\nrightmost_32_2 :: Word32 -> Maybe Word2\nrightmost_32_2 = unsafeLocalCoreJet c_rightmost_32_2\n\nrightmost_32_4 :: Word32 -> Maybe Word4\nrightmost_32_4 = unsafeLocalCoreJet c_rightmost_32_4\n\nrightmost_32_8 :: Word32 -> Maybe Word8\nrightmost_32_8 = unsafeLocalCoreJet c_rightmost_32_8\n\nrightmost_32_16 :: Word32 -> Maybe Word16\nrightmost_32_16 = unsafeLocalCoreJet c_rightmost_32_16\n\nrightmost_64_1 :: Word64 -> Maybe Word1\nrightmost_64_1 = unsafeLocalCoreJet c_rightmost_64_1\n\nrightmost_64_2 :: Word64 -> Maybe Word2\nrightmost_64_2 = unsafeLocalCoreJet c_rightmost_64_2\n\nrightmost_64_4 :: Word64 -> Maybe Word4\nrightmost_64_4 = unsafeLocalCoreJet c_rightmost_64_4\n\nrightmost_64_8 :: Word64 -> Maybe Word8\nrightmost_64_8 = unsafeLocalCoreJet c_rightmost_64_8\n\nrightmost_64_16 :: Word64 -> Maybe Word16\nrightmost_64_16 = unsafeLocalCoreJet c_rightmost_64_16\n\nrightmost_64_32 :: Word64 -> Maybe Word32\nrightmost_64_32 = unsafeLocalCoreJet c_rightmost_64_32\n\nleft_pad_low_1_8 :: Word1 -> Maybe Word8\nleft_pad_low_1_8 = unsafeLocalCoreJet c_left_pad_low_1_8\n\nleft_pad_low_1_16 :: Word1 -> Maybe Word16\nleft_pad_low_1_16 = unsafeLocalCoreJet c_left_pad_low_1_16\n\nleft_pad_low_8_16 :: Word8 -> Maybe Word16\nleft_pad_low_8_16 = unsafeLocalCoreJet c_left_pad_low_8_16\n\nleft_pad_low_1_32 :: Word1 -> Maybe Word32\nleft_pad_low_1_32 = unsafeLocalCoreJet c_left_pad_low_1_32\n\nleft_pad_low_8_32 :: Word8 -> Maybe Word32\nleft_pad_low_8_32 = unsafeLocalCoreJet c_left_pad_low_8_32\n\nleft_pad_low_16_32 :: Word16 -> Maybe Word32\nleft_pad_low_16_32 = unsafeLocalCoreJet c_left_pad_low_16_32\n\nleft_pad_low_1_64 :: Word1 -> Maybe Word64\nleft_pad_low_1_64 = unsafeLocalCoreJet c_left_pad_low_1_64\n\nleft_pad_low_8_64 :: Word8 -> Maybe Word64\nleft_pad_low_8_64 = unsafeLocalCoreJet c_left_pad_low_8_64\n\nleft_pad_low_16_64 :: Word16 -> Maybe Word64\nleft_pad_low_16_64 = unsafeLocalCoreJet c_left_pad_low_16_64\n\nleft_pad_low_32_64 :: Word32 -> Maybe Word64\nleft_pad_low_32_64 = unsafeLocalCoreJet c_left_pad_low_32_64\n\nleft_pad_high_1_8 :: Word1 -> Maybe Word8\nleft_pad_high_1_8 = unsafeLocalCoreJet c_left_pad_high_1_8\n\nleft_pad_high_1_16 :: Word1 -> Maybe Word16\nleft_pad_high_1_16 = unsafeLocalCoreJet c_left_pad_high_1_16\n\nleft_pad_high_8_16 :: Word8 -> Maybe Word16\nleft_pad_high_8_16 = unsafeLocalCoreJet c_left_pad_high_8_16\n\nleft_pad_high_1_32 :: Word1 -> Maybe Word32\nleft_pad_high_1_32 = unsafeLocalCoreJet c_left_pad_high_1_32\n\nleft_pad_high_8_32 :: Word8 -> Maybe Word32\nleft_pad_high_8_32 = unsafeLocalCoreJet c_left_pad_high_8_32\n\nleft_pad_high_16_32 :: Word16 -> Maybe Word32\nleft_pad_high_16_32 = unsafeLocalCoreJet c_left_pad_high_16_32\n\nleft_pad_high_1_64 :: Word1 -> Maybe Word64\nleft_pad_high_1_64 = unsafeLocalCoreJet c_left_pad_high_1_64\n\nleft_pad_high_8_64 :: Word8 -> Maybe Word64\nleft_pad_high_8_64 = unsafeLocalCoreJet c_left_pad_high_8_64\n\nleft_pad_high_16_64 :: Word16 -> Maybe Word64\nleft_pad_high_16_64 = unsafeLocalCoreJet c_left_pad_high_16_64\n\nleft_pad_high_32_64 :: Word32 -> Maybe Word64\nleft_pad_high_32_64 = unsafeLocalCoreJet c_left_pad_high_32_64\n\nleft_extend_1_8 :: Word1 -> Maybe Word8\nleft_extend_1_8 = unsafeLocalCoreJet c_left_extend_1_8\n\nleft_extend_1_16 :: Word1 -> Maybe Word16\nleft_extend_1_16 = unsafeLocalCoreJet c_left_extend_1_16\n\nleft_extend_8_16 :: Word8 -> Maybe Word16\nleft_extend_8_16 = unsafeLocalCoreJet c_left_extend_8_16\n\nleft_extend_1_32 :: Word1 -> Maybe Word32\nleft_extend_1_32 = unsafeLocalCoreJet c_left_extend_1_32\n\nleft_extend_8_32 :: Word8 -> Maybe Word32\nleft_extend_8_32 = unsafeLocalCoreJet c_left_extend_8_32\n\nleft_extend_16_32 :: Word16 -> Maybe Word32\nleft_extend_16_32 = unsafeLocalCoreJet c_left_extend_16_32\n\nleft_extend_1_64 :: Word1 -> Maybe Word64\nleft_extend_1_64 = unsafeLocalCoreJet c_left_extend_1_64\n\nleft_extend_8_64 :: Word8 -> Maybe Word64\nleft_extend_8_64 = unsafeLocalCoreJet c_left_extend_8_64\n\nleft_extend_16_64 :: Word16 -> Maybe Word64\nleft_extend_16_64 = unsafeLocalCoreJet c_left_extend_16_64\n\nleft_extend_32_64 :: Word32 -> Maybe Word64\nleft_extend_32_64 = unsafeLocalCoreJet c_left_extend_32_64\n\nright_pad_low_1_8 :: Word1 -> Maybe Word8\nright_pad_low_1_8 = unsafeLocalCoreJet c_right_pad_low_1_8\n\nright_pad_low_1_16 :: Word1 -> Maybe Word16\nright_pad_low_1_16 = unsafeLocalCoreJet c_right_pad_low_1_16\n\nright_pad_low_8_16 :: Word8 -> Maybe Word16\nright_pad_low_8_16 = unsafeLocalCoreJet c_right_pad_low_8_16\n\nright_pad_low_1_32 :: Word1 -> Maybe Word32\nright_pad_low_1_32 = unsafeLocalCoreJet c_right_pad_low_1_32\n\nright_pad_low_8_32 :: Word8 -> Maybe Word32\nright_pad_low_8_32 = unsafeLocalCoreJet c_right_pad_low_8_32\n\nright_pad_low_16_32 :: Word16 -> Maybe Word32\nright_pad_low_16_32 = unsafeLocalCoreJet c_right_pad_low_16_32\n\nright_pad_low_1_64 :: Word1 -> Maybe Word64\nright_pad_low_1_64 = unsafeLocalCoreJet c_right_pad_low_1_64\n\nright_pad_low_8_64 :: Word8 -> Maybe Word64\nright_pad_low_8_64 = unsafeLocalCoreJet c_right_pad_low_8_64\n\nright_pad_low_16_64 :: Word16 -> Maybe Word64\nright_pad_low_16_64 = unsafeLocalCoreJet c_right_pad_low_16_64\n\nright_pad_low_32_64 :: Word32 -> Maybe Word64\nright_pad_low_32_64 = unsafeLocalCoreJet c_right_pad_low_32_64\n\nright_pad_high_1_8 :: Word1 -> Maybe Word8\nright_pad_high_1_8 = unsafeLocalCoreJet c_right_pad_high_1_8\n\nright_pad_high_1_16 :: Word1 -> Maybe Word16\nright_pad_high_1_16 = unsafeLocalCoreJet c_right_pad_high_1_16\n\nright_pad_high_8_16 :: Word8 -> Maybe Word16\nright_pad_high_8_16 = unsafeLocalCoreJet c_right_pad_high_8_16\n\nright_pad_high_1_32 :: Word1 -> Maybe Word32\nright_pad_high_1_32 = unsafeLocalCoreJet c_right_pad_high_1_32\n\nright_pad_high_8_32 :: Word8 -> Maybe Word32\nright_pad_high_8_32 = unsafeLocalCoreJet c_right_pad_high_8_32\n\nright_pad_high_16_32 :: Word16 -> Maybe Word32\nright_pad_high_16_32 = unsafeLocalCoreJet c_right_pad_high_16_32\n\nright_pad_high_1_64 :: Word1 -> Maybe Word64\nright_pad_high_1_64 = unsafeLocalCoreJet c_right_pad_high_1_64\n\nright_pad_high_8_64 :: Word8 -> Maybe Word64\nright_pad_high_8_64 = unsafeLocalCoreJet c_right_pad_high_8_64\n\nright_pad_high_16_64 :: Word16 -> Maybe Word64\nright_pad_high_16_64 = unsafeLocalCoreJet c_right_pad_high_16_64\n\nright_pad_high_32_64 :: Word32 -> Maybe Word64\nright_pad_high_32_64 = unsafeLocalCoreJet c_right_pad_high_32_64\n\nright_extend_8_16 :: Word8 -> Maybe Word16\nright_extend_8_16 = unsafeLocalCoreJet c_right_extend_8_16\n\nright_extend_8_32 :: Word8 -> Maybe Word32\nright_extend_8_32 = unsafeLocalCoreJet c_right_extend_8_32\n\nright_extend_16_32 :: Word16 -> Maybe Word32\nright_extend_16_32 = unsafeLocalCoreJet c_right_extend_16_32\n\nright_extend_8_64 :: Word8 -> Maybe Word64\nright_extend_8_64 = unsafeLocalCoreJet c_right_extend_8_64\n\nright_extend_16_64 :: Word16 -> Maybe Word64\nright_extend_16_64 = unsafeLocalCoreJet c_right_extend_16_64\n\nright_extend_32_64 :: Word32 -> Maybe Word64\nright_extend_32_64 = unsafeLocalCoreJet c_right_extend_32_64\n\nleft_shift_with_8 :: (Bit, (Word4, Word8)) -> Maybe Word8\nleft_shift_with_8 = unsafeLocalCoreJet c_left_shift_with_8\n\nleft_shift_with_16 :: (Bit, (Word4, Word16)) -> Maybe Word16\nleft_shift_with_16 = unsafeLocalCoreJet c_left_shift_with_16\n\nleft_shift_with_32 :: (Bit, (Word8, Word32)) -> Maybe Word32\nleft_shift_with_32 = unsafeLocalCoreJet c_left_shift_with_32\n\nleft_shift_with_64 :: (Bit, (Word8, Word64)) -> Maybe Word64\nleft_shift_with_64 = unsafeLocalCoreJet c_left_shift_with_64\n\nleft_shift_8 :: (Word4, Word8) -> Maybe Word8\nleft_shift_8 = unsafeLocalCoreJet c_left_shift_8\n\nleft_shift_16 :: (Word4, Word16) -> Maybe Word16\nleft_shift_16 = unsafeLocalCoreJet c_left_shift_16\n\nleft_shift_32 :: (Word8, Word32) -> Maybe Word32\nleft_shift_32 = unsafeLocalCoreJet c_left_shift_32\n\nleft_shift_64 :: (Word8, Word64) -> Maybe Word64\nleft_shift_64 = unsafeLocalCoreJet c_left_shift_64\n\nright_shift_with_8 :: (Bit, (Word4, Word8)) -> Maybe Word8\nright_shift_with_8 = unsafeLocalCoreJet c_right_shift_with_8\n\nright_shift_with_16 :: (Bit, (Word4, Word16)) -> Maybe Word16\nright_shift_with_16 = unsafeLocalCoreJet c_right_shift_with_16\n\nright_shift_with_32 :: (Bit, (Word8, Word32)) -> Maybe Word32\nright_shift_with_32 = unsafeLocalCoreJet c_right_shift_with_32\n\nright_shift_with_64 :: (Bit, (Word8, Word64)) -> Maybe Word64\nright_shift_with_64 = unsafeLocalCoreJet c_right_shift_with_64\n\nright_shift_8 :: (Word4, Word8) -> Maybe Word8\nright_shift_8 = unsafeLocalCoreJet c_right_shift_8\n\nright_shift_16 :: (Word4, Word16) -> Maybe Word16\nright_shift_16 = unsafeLocalCoreJet c_right_shift_16\n\nright_shift_32 :: (Word8, Word32) -> Maybe Word32\nright_shift_32 = unsafeLocalCoreJet c_right_shift_32\n\nright_shift_64 :: (Word8, Word64) -> Maybe Word64\nright_shift_64 = unsafeLocalCoreJet c_right_shift_64\n\nleft_rotate_8 :: (Word4, Word8) -> Maybe Word8\nleft_rotate_8 = unsafeLocalCoreJet c_left_rotate_8\n\nleft_rotate_16 :: (Word4, Word16) -> Maybe Word16\nleft_rotate_16 = unsafeLocalCoreJet c_left_rotate_16\n\nleft_rotate_32 :: (Word8, Word32) -> Maybe Word32\nleft_rotate_32 = unsafeLocalCoreJet c_left_rotate_32\n\nleft_rotate_64 :: (Word8, Word64) -> Maybe Word64\nleft_rotate_64 = unsafeLocalCoreJet c_left_rotate_64\n\nright_rotate_8 :: (Word4, Word8) -> Maybe Word8\nright_rotate_8 = unsafeLocalCoreJet c_right_rotate_8\n\nright_rotate_16 :: (Word4, Word16) -> Maybe Word16\nright_rotate_16 = unsafeLocalCoreJet c_right_rotate_16\n\nright_rotate_32 :: (Word8, Word32) -> Maybe Word32\nright_rotate_32 = unsafeLocalCoreJet c_right_rotate_32\n\nright_rotate_64 :: (Word8, Word64) -> Maybe Word64\nright_rotate_64 = unsafeLocalCoreJet c_right_rotate_64\n\none_8 :: () -> Maybe Word8\none_8 = unsafeLocalCoreJet c_one_8\n\none_16 :: () -> Maybe Word16\none_16 = unsafeLocalCoreJet c_one_16\n\none_32 :: () -> Maybe Word32\none_32 = unsafeLocalCoreJet c_one_32\n\none_64 :: () -> Maybe Word64\none_64 = unsafeLocalCoreJet c_one_64\n\nadd_8 :: (Word8, Word8) -> Maybe (Bit, Word8)\nadd_8 = unsafeLocalCoreJet c_add_8\n\nadd_16 :: (Word16, Word16) -> Maybe (Bit, Word16)\nadd_16 = unsafeLocalCoreJet c_add_16\n\nadd_32 :: (Word32, Word32) -> Maybe (Bit, Word32)\nadd_32 = unsafeLocalCoreJet c_add_32\n\nadd_64 :: (Word64, Word64) -> Maybe (Bit, Word64)\nadd_64 = unsafeLocalCoreJet c_add_64\n\nfull_add_8 :: (Bit, (Word8, Word8)) -> Maybe (Bit, Word8)\nfull_add_8 = unsafeLocalCoreJet c_full_add_8\n\nfull_add_16 :: (Bit, (Word16, Word16)) -> Maybe (Bit, Word16)\nfull_add_16 = unsafeLocalCoreJet c_full_add_16\n\nfull_add_32 :: (Bit, (Word32, Word32)) -> Maybe (Bit, Word32)\nfull_add_32 = unsafeLocalCoreJet c_full_add_32\n\nfull_add_64 :: (Bit, (Word64, Word64)) -> Maybe (Bit, Word64)\nfull_add_64 = unsafeLocalCoreJet c_full_add_64\n\nfull_increment_8 :: (Bit, Word8) -> Maybe (Bit, Word8)\nfull_increment_8 = unsafeLocalCoreJet c_full_increment_8\n\nfull_increment_16 :: (Bit, Word16) -> Maybe (Bit, Word16)\nfull_increment_16 = unsafeLocalCoreJet c_full_increment_16\n\nfull_increment_32 :: (Bit, Word32) -> Maybe (Bit, Word32)\nfull_increment_32 = unsafeLocalCoreJet c_full_increment_32\n\nfull_increment_64 :: (Bit, Word64) -> Maybe (Bit, Word64)\nfull_increment_64 = unsafeLocalCoreJet c_full_increment_64\n\nincrement_8 :: Word8 -> Maybe (Bit, Word8)\nincrement_8 = unsafeLocalCoreJet c_increment_8\n\nincrement_16 :: Word16 -> Maybe (Bit, Word16)\nincrement_16 = unsafeLocalCoreJet c_increment_16\n\nincrement_32 :: Word32 -> Maybe (Bit, Word32)\nincrement_32 = unsafeLocalCoreJet c_increment_32\n\nincrement_64 :: Word64 -> Maybe (Bit, Word64)\nincrement_64 = unsafeLocalCoreJet c_increment_64\n\nsubtract_8 :: (Word8, Word8) -> Maybe (Bit, Word8)\nsubtract_8 = unsafeLocalCoreJet c_subtract_8\n\nsubtract_16 :: (Word16, Word16) -> Maybe (Bit, Word16)\nsubtract_16 = unsafeLocalCoreJet c_subtract_16\n\nsubtract_32 :: (Word32, Word32) -> Maybe (Bit, Word32)\nsubtract_32 = unsafeLocalCoreJet c_subtract_32\n\nsubtract_64 :: (Word64, Word64) -> Maybe (Bit, Word64)\nsubtract_64 = unsafeLocalCoreJet c_subtract_64\n\nfull_subtract_8 :: (Bit, (Word8, Word8)) -> Maybe (Bit, Word8)\nfull_subtract_8 = unsafeLocalCoreJet c_full_subtract_8\n\nfull_subtract_16 :: (Bit, (Word16, Word16)) -> Maybe (Bit, Word16)\nfull_subtract_16 = unsafeLocalCoreJet c_full_subtract_16\n\nfull_subtract_32 :: (Bit, (Word32, Word32)) -> Maybe (Bit, Word32)\nfull_subtract_32 = unsafeLocalCoreJet c_full_subtract_32\n\nfull_subtract_64 :: (Bit, (Word64, Word64)) -> Maybe (Bit, Word64)\nfull_subtract_64 = unsafeLocalCoreJet c_full_subtract_64\n\nnegate_8 :: Word8 -> Maybe (Bit, Word8)\nnegate_8 = unsafeLocalCoreJet c_negate_8\n\nnegate_16 :: Word16 -> Maybe (Bit, Word16)\nnegate_16 = unsafeLocalCoreJet c_negate_16\n\nnegate_32 :: Word32 -> Maybe (Bit, Word32)\nnegate_32 = unsafeLocalCoreJet c_negate_32\n\nnegate_64 :: Word64 -> Maybe (Bit, Word64)\nnegate_64 = unsafeLocalCoreJet c_negate_64\n\nfull_decrement_8 :: (Bit, Word8) -> Maybe (Bit, Word8)\nfull_decrement_8 = unsafeLocalCoreJet c_full_decrement_8\n\nfull_decrement_16 :: (Bit, Word16) -> Maybe (Bit, Word16)\nfull_decrement_16 = unsafeLocalCoreJet c_full_decrement_16\n\nfull_decrement_32 :: (Bit, Word32) -> Maybe (Bit, Word32)\nfull_decrement_32 = unsafeLocalCoreJet c_full_decrement_32\n\nfull_decrement_64 :: (Bit, Word64) -> Maybe (Bit, Word64)\nfull_decrement_64 = unsafeLocalCoreJet c_full_decrement_64\n\ndecrement_8 :: Word8 -> Maybe (Bit, Word8)\ndecrement_8 = unsafeLocalCoreJet c_decrement_8\n\ndecrement_16 :: Word16 -> Maybe (Bit, Word16)\ndecrement_16 = unsafeLocalCoreJet c_decrement_16\n\ndecrement_32 :: Word32 -> Maybe (Bit, Word32)\ndecrement_32 = unsafeLocalCoreJet c_decrement_32\n\ndecrement_64 :: Word64 -> Maybe (Bit, Word64)\ndecrement_64 = unsafeLocalCoreJet c_decrement_64\n\nmultiply_8 :: (Word8, Word8) -> Maybe Word16\nmultiply_8 = unsafeLocalCoreJet c_multiply_8\n\nmultiply_16 :: (Word16, Word16) -> Maybe Word32\nmultiply_16 = unsafeLocalCoreJet c_multiply_16\n\nmultiply_32 :: (Word32, Word32) -> Maybe Word64\nmultiply_32 = unsafeLocalCoreJet c_multiply_32\n\nmultiply_64 :: (Word64, Word64) -> Maybe Word128\nmultiply_64 = unsafeLocalCoreJet c_multiply_64\n\nfull_multiply_8 :: ((Word8, Word8), (Word8, Word8)) -> Maybe Word16\nfull_multiply_8 = unsafeLocalCoreJet c_full_multiply_8\n\nfull_multiply_16 :: ((Word16, Word16), (Word16, Word16)) -> Maybe Word32\nfull_multiply_16 = unsafeLocalCoreJet c_full_multiply_16\n\nfull_multiply_32 :: ((Word32, Word32), (Word32, Word32)) -> Maybe Word64\nfull_multiply_32 = unsafeLocalCoreJet c_full_multiply_32\n\nfull_multiply_64 :: ((Word64, Word64), (Word64, Word64)) -> Maybe Word128\nfull_multiply_64 = unsafeLocalCoreJet c_full_multiply_64\n\nis_zero_8 :: Word8 -> Maybe Bit\nis_zero_8 = unsafeLocalCoreJet c_is_zero_8\n\nis_zero_16 :: Word16 -> Maybe Bit\nis_zero_16 = unsafeLocalCoreJet c_is_zero_16\n\nis_zero_32 :: Word32 -> Maybe Bit\nis_zero_32 = unsafeLocalCoreJet c_is_zero_32\n\nis_zero_64 :: Word64 -> Maybe Bit\nis_zero_64 = unsafeLocalCoreJet c_is_zero_64\n\nis_one_8 :: Word8 -> Maybe Bit\nis_one_8 = unsafeLocalCoreJet c_is_one_8\n\nis_one_16 :: Word16 -> Maybe Bit\nis_one_16 = unsafeLocalCoreJet c_is_one_16\n\nis_one_32 :: Word32 -> Maybe Bit\nis_one_32 = unsafeLocalCoreJet c_is_one_32\n\nis_one_64 :: Word64 -> Maybe Bit\nis_one_64 = unsafeLocalCoreJet c_is_one_64\n\nle_8 :: (Word8, Word8) -> Maybe Bit\nle_8 = unsafeLocalCoreJet c_le_8\n\nle_16 :: (Word16, Word16) -> Maybe Bit\nle_16 = unsafeLocalCoreJet c_le_16\n\nle_32 :: (Word32, Word32) -> Maybe Bit\nle_32 = unsafeLocalCoreJet c_le_32\n\nle_64 :: (Word64, Word64) -> Maybe Bit\nle_64 = unsafeLocalCoreJet c_le_64\n\nlt_8 :: (Word8, Word8) -> Maybe Bit\nlt_8 = unsafeLocalCoreJet c_lt_8\n\nlt_16 :: (Word16, Word16) -> Maybe Bit\nlt_16 = unsafeLocalCoreJet c_lt_16\n\nlt_32 :: (Word32, Word32) -> Maybe Bit\nlt_32 = unsafeLocalCoreJet c_lt_32\n\nlt_64 :: (Word64, Word64) -> Maybe Bit\nlt_64 = unsafeLocalCoreJet c_lt_64\n\nmin_8 :: (Word8, Word8) -> Maybe Word8\nmin_8 = unsafeLocalCoreJet c_min_8\n\nmin_16 :: (Word16, Word16) -> Maybe Word16\nmin_16 = unsafeLocalCoreJet c_min_16\n\nmin_32 :: (Word32, Word32) -> Maybe Word32\nmin_32 = unsafeLocalCoreJet c_min_32\n\nmin_64 :: (Word64, Word64) -> Maybe Word64\nmin_64 = unsafeLocalCoreJet c_min_64\n\nmax_8 :: (Word8, Word8) -> Maybe Word8\nmax_8 = unsafeLocalCoreJet c_max_8\n\nmax_16 :: (Word16, Word16) -> Maybe Word16\nmax_16 = unsafeLocalCoreJet c_max_16\n\nmax_32 :: (Word32, Word32) -> Maybe Word32\nmax_32 = unsafeLocalCoreJet c_max_32\n\nmax_64 :: (Word64, Word64) -> Maybe Word64\nmax_64 = unsafeLocalCoreJet c_max_64\n\nmedian_8 :: (Word8, (Word8, Word8)) -> Maybe Word8\nmedian_8 = unsafeLocalCoreJet c_median_8\n\nmedian_16 :: (Word16, (Word16, Word16)) -> Maybe Word16\nmedian_16 = unsafeLocalCoreJet c_median_16\n\nmedian_32 :: (Word32, (Word32, Word32)) -> Maybe Word32\nmedian_32 = unsafeLocalCoreJet c_median_32\n\nmedian_64 :: (Word64, (Word64, Word64)) -> Maybe Word64\nmedian_64 = unsafeLocalCoreJet c_median_64\n\ndiv_mod_8 :: (Word8, Word8) -> Maybe (Word8, Word8)\ndiv_mod_8 = unsafeLocalCoreJet c_div_mod_8\n\ndiv_mod_16 :: (Word16, Word16) -> Maybe (Word16, Word16)\ndiv_mod_16 = unsafeLocalCoreJet c_div_mod_16\n\ndiv_mod_32 :: (Word32, Word32) -> Maybe (Word32, Word32)\ndiv_mod_32 = unsafeLocalCoreJet c_div_mod_32\n\ndiv_mod_64 :: (Word64, Word64) -> Maybe (Word64, Word64)\ndiv_mod_64 = unsafeLocalCoreJet c_div_mod_64\n\ndivide_8 :: (Word8, Word8) -> Maybe Word8\ndivide_8 = unsafeLocalCoreJet c_divide_8\n\ndivide_16 :: (Word16, Word16) -> Maybe Word16\ndivide_16 = unsafeLocalCoreJet c_divide_16\n\ndivide_32 :: (Word32, Word32) -> Maybe Word32\ndivide_32 = unsafeLocalCoreJet c_divide_32\n\ndivide_64 :: (Word64, Word64) -> Maybe Word64\ndivide_64 = unsafeLocalCoreJet c_divide_64\n\nmodulo_8 :: (Word8, Word8) -> Maybe Word8\nmodulo_8 = unsafeLocalCoreJet c_modulo_8\n\nmodulo_16 :: (Word16, Word16) -> Maybe Word16\nmodulo_16 = unsafeLocalCoreJet c_modulo_16\n\nmodulo_32 :: (Word32, Word32) -> Maybe Word32\nmodulo_32 = unsafeLocalCoreJet c_modulo_32\n\nmodulo_64 :: (Word64, Word64) -> Maybe Word64\nmodulo_64 = unsafeLocalCoreJet c_modulo_64\n\ndivides_8 :: (Word8, Word8) -> Maybe Bit\ndivides_8 = unsafeLocalCoreJet c_divides_8\n\ndivides_16 :: (Word16, Word16) -> Maybe Bit\ndivides_16 = unsafeLocalCoreJet c_divides_16\n\ndivides_32 :: (Word32, Word32) -> Maybe Bit\ndivides_32 = unsafeLocalCoreJet c_divides_32\n\ndivides_64 :: (Word64, Word64) -> Maybe Bit\ndivides_64 = unsafeLocalCoreJet c_divides_64\n\ndiv_mod_128_64 :: (Word128, Word64) -> Maybe (Word64, Word64)\ndiv_mod_128_64 = unsafeLocalCoreJet c_div_mod_128_64\n\nsha_256_iv :: () -> Maybe Sha256.Hash\nsha_256_iv = unsafeLocalCoreJet c_sha_256_iv\n\nsha_256_block :: (Sha256.Hash, Sha256.Block) -> Maybe Sha256.Hash\nsha_256_block = unsafeLocalCoreJet c_sha_256_block\n\nsha_256_ctx_8_init :: () -> Maybe Sha256.Ctx8\nsha_256_ctx_8_init = unsafeLocalCoreJet c_sha_256_ctx_8_init\n\nsha_256_ctx_8_add_1 :: (Sha256.Ctx8, Word8) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_1 = unsafeLocalCoreJet c_sha_256_ctx_8_add_1\n\nsha_256_ctx_8_add_2 :: (Sha256.Ctx8, Word16) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_2 = unsafeLocalCoreJet c_sha_256_ctx_8_add_2\n\nsha_256_ctx_8_add_4 :: (Sha256.Ctx8, Word32) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_4 = unsafeLocalCoreJet c_sha_256_ctx_8_add_4\n\nsha_256_ctx_8_add_8 :: (Sha256.Ctx8, Word64) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_8 = unsafeLocalCoreJet c_sha_256_ctx_8_add_8\n\nsha_256_ctx_8_add_16 :: (Sha256.Ctx8, Word128) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_16 = unsafeLocalCoreJet c_sha_256_ctx_8_add_16\n\nsha_256_ctx_8_add_32 :: (Sha256.Ctx8, Word256) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_32 = unsafeLocalCoreJet c_sha_256_ctx_8_add_32\n\nsha_256_ctx_8_add_64 :: (Sha256.Ctx8, Word512) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_64 = unsafeLocalCoreJet c_sha_256_ctx_8_add_64\n\nsha_256_ctx_8_add_128 :: (Sha256.Ctx8, Word1024) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_128 = unsafeLocalCoreJet c_sha_256_ctx_8_add_128\n\nsha_256_ctx_8_add_256 :: (Sha256.Ctx8, Word2048) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_256 = unsafeLocalCoreJet c_sha_256_ctx_8_add_256\n\nsha_256_ctx_8_add_512 :: (Sha256.Ctx8, Word4096) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_512 = unsafeLocalCoreJet c_sha_256_ctx_8_add_512\n\nsha_256_ctx_8_add_buffer_511 :: (Sha256.Ctx8, Buffer511 Word8) -> Maybe Sha256.Ctx8\nsha_256_ctx_8_add_buffer_511 = unsafeLocalCoreJet c_sha_256_ctx_8_add_buffer_511\n\nsha_256_ctx_8_finalize :: Sha256.Ctx8 -> Maybe Sha256.Hash\nsha_256_ctx_8_finalize = unsafeLocalCoreJet c_sha_256_ctx_8_finalize\n\nfe_normalize :: FE -> Maybe FE\nfe_normalize = unsafeLocalCoreJet c_fe_normalize\n\nfe_negate :: FE -> Maybe FE\nfe_negate = unsafeLocalCoreJet c_fe_negate\n\nfe_add :: (FE, FE) -> Maybe FE\nfe_add = unsafeLocalCoreJet c_fe_add\n\nfe_square :: FE -> Maybe FE\nfe_square = unsafeLocalCoreJet c_fe_square\n\nfe_multiply :: (FE, FE) -> Maybe FE\nfe_multiply = unsafeLocalCoreJet c_fe_multiply\n\nfe_multiply_beta :: FE -> Maybe FE\nfe_multiply_beta = unsafeLocalCoreJet c_fe_multiply_beta\n\nfe_invert :: FE -> Maybe FE\nfe_invert = unsafeLocalCoreJet c_fe_invert\n\nfe_square_root :: FE -> Maybe (Either () FE)\nfe_square_root = unsafeLocalCoreJet c_fe_square_root\n\nfe_is_zero :: FE -> Maybe Bit\nfe_is_zero = unsafeLocalCoreJet c_fe_is_zero\n\nfe_is_odd :: FE -> Maybe Bit\nfe_is_odd = unsafeLocalCoreJet c_fe_is_odd\n\nscalar_normalize :: Scalar -> Maybe Scalar\nscalar_normalize = unsafeLocalCoreJet c_scalar_normalize\n\nscalar_negate :: Scalar -> Maybe Scalar\nscalar_negate = unsafeLocalCoreJet c_scalar_negate\n\nscalar_add :: (Scalar, Scalar) -> Maybe Scalar\nscalar_add = unsafeLocalCoreJet c_scalar_add\n\nscalar_square :: Scalar -> Maybe Scalar\nscalar_square = unsafeLocalCoreJet c_scalar_square\n\nscalar_multiply :: (Scalar, Scalar) -> Maybe Scalar\nscalar_multiply = unsafeLocalCoreJet c_scalar_multiply\n\nscalar_multiply_lambda :: Scalar -> Maybe Scalar\nscalar_multiply_lambda = unsafeLocalCoreJet c_scalar_multiply_lambda\n\nscalar_invert :: Scalar -> Maybe Scalar\nscalar_invert = unsafeLocalCoreJet c_scalar_invert\n\nscalar_is_zero :: Scalar -> Maybe Bit\nscalar_is_zero = unsafeLocalCoreJet c_scalar_is_zero\n\ngej_infinity :: () -> Maybe GEJ\ngej_infinity = unsafeLocalCoreJet c_gej_infinity\n\ngej_rescale :: (GEJ, FE) -> Maybe GEJ\ngej_rescale = unsafeLocalCoreJet c_gej_rescale\n\ngej_normalize :: GEJ -> Maybe (Either () GE)\ngej_normalize = unsafeLocalCoreJet c_gej_normalize\n\ngej_negate :: GEJ -> Maybe GEJ\ngej_negate = unsafeLocalCoreJet c_gej_negate\n\nge_negate :: GE -> Maybe GE\nge_negate = unsafeLocalCoreJet c_ge_negate\n\ngej_double :: GEJ -> Maybe GEJ\ngej_double = unsafeLocalCoreJet c_gej_double\n\ngej_add :: (GEJ, GEJ) -> Maybe GEJ\ngej_add = unsafeLocalCoreJet c_gej_add\n\ngej_ge_add_ex :: (GEJ, GE) -> Maybe (FE, GEJ)\ngej_ge_add_ex = unsafeLocalCoreJet c_gej_ge_add_ex\n\ngej_ge_add :: (GEJ, GE) -> Maybe GEJ\ngej_ge_add = unsafeLocalCoreJet c_gej_ge_add\n\ngej_is_infinity :: GEJ -> Maybe Bit\ngej_is_infinity = unsafeLocalCoreJet c_gej_is_infinity\n\ngej_equiv :: (GEJ, GEJ) -> Maybe Bit\ngej_equiv = unsafeLocalCoreJet c_gej_equiv\n\ngej_ge_equiv :: (GEJ, GE) -> Maybe Bit\ngej_ge_equiv = unsafeLocalCoreJet c_gej_ge_equiv\n\ngej_x_equiv :: (FE, GEJ) -> Maybe Bit\ngej_x_equiv = unsafeLocalCoreJet c_gej_x_equiv\n\ngej_y_is_odd :: GEJ -> Maybe Bit\ngej_y_is_odd = unsafeLocalCoreJet c_gej_y_is_odd\n\ngej_is_on_curve :: GEJ -> Maybe Bit\ngej_is_on_curve = unsafeLocalCoreJet c_gej_is_on_curve\n\nge_is_on_curve :: GE -> Maybe Bit\nge_is_on_curve = unsafeLocalCoreJet c_ge_is_on_curve\n\nscale :: (Scalar, GEJ) -> Maybe GEJ\nscale = unsafeLocalCoreJet c_scale\n\noff_curve_scale :: (Scalar, GEJ) -> Maybe GEJ\noff_curve_scale = unsafeLocalCoreJet c_off_curve_scale\n\ngenerate :: Scalar -> Maybe GEJ\ngenerate = unsafeLocalCoreJet c_generate\n\nlinear_combination_1 :: ((Scalar, GEJ), Scalar) -> Maybe GEJ\nlinear_combination_1 = unsafeLocalCoreJet c_linear_combination_1\n\noff_curve_linear_combination_1 :: ((Scalar, GEJ), Scalar) -> Maybe GEJ\noff_curve_linear_combination_1 = unsafeLocalCoreJet c_off_curve_linear_combination_1\n\nlinear_verify_1 :: (((Scalar, GE), Scalar), GE) -> Maybe ()\nlinear_verify_1 = unsafeLocalCoreJet c_linear_verify_1\n\ndecompress :: Point -> Maybe (Either () GE)\ndecompress = unsafeLocalCoreJet c_decompress\n\npoint_verify_1 :: (((Scalar, Point), Scalar), Point) -> Maybe ()\npoint_verify_1 = unsafeLocalCoreJet c_point_verify_1\n\ncheck_sig_verify :: ((PubKey, Word512), Sig) -> Maybe ()\ncheck_sig_verify = unsafeLocalCoreJet c_check_sig_verify\n\nbip_0340_verify :: ((PubKey, Word256), Sig) -> Maybe ()\nbip_0340_verify = unsafeLocalCoreJet c_bip_0340_verify\n\nswu :: FE -> Maybe GE\nswu = unsafeLocalCoreJet c_swu\n\nhash_to_curve :: Word256 -> Maybe GE\nhash_to_curve = unsafeLocalCoreJet c_hash_to_curve\n\nparse_lock :: Word32 -> Maybe (Either Word32 Word32)\nparse_lock = unsafeLocalCoreJet c_parse_lock\n\nparse_sequence :: Word32 -> Maybe (Either () (Either Word16 Word16))\nparse_sequence = unsafeLocalCoreJet c_parse_sequence\n\ntapdata_init :: () -> Maybe Sha256.Ctx8\ntapdata_init = unsafeLocalCoreJet c_tapdata_init\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Functor.hs",
    "content": "{-# LANGUAGE RankNTypes #-}\n-- | This module provides a product for computing multiple interpretations of Simplicity simultaneously.\n-- Other tensors can be added when they are needed.\nmodule Simplicity.Functor\n  ( SimplicityFunctor(..)\n  ) where\n\nimport Simplicity.Ty\n\nclass SimplicityFunctor h where\n  sfmap :: (forall a b. (TyC a, TyC b) => f a b -> g a b) -> h f -> h g\n"
  },
  {
    "path": "Haskell/Core/Simplicity/LibSecp256k1/Schnorr.hs",
    "content": "-- | This module specifies the types to be used to interface with bindings to a real Schnorr signature module for Secp256k1.\n-- It largely acts as a placeholder at this point in time.\nmodule Simplicity.LibSecp256k1.Schnorr\n ( PubKey(..), Sig(..)\n ) where\n\nimport Data.Serialize (Serialize, get, put)\nimport Data.Serialize.Get (getWord8)\nimport Data.Serialize.Put (putWord8)\n\nimport Simplicity.Word\n\n-- | An (x-only) public key format to be used for Schnorr signatures.\ndata PubKey = PubKey Word256\n\ninstance Show PubKey where\n  showsPrec p (PubKey w) = showParen (p > 10) . showString $ \"PubKey 0x\" ++ showHex256 w\n\ninstance Serialize PubKey where\n  get = PubKey <$> get\n  put (PubKey x) = put x\n\n-- | A Schnorr signature format.\ndata Sig = Sig Word256 Word256\n\ninstance Serialize Sig where\n  get = Sig <$> get <*> get\n  put (Sig r s) = put r >> put s\n\ninstance Show Sig where\n  showsPrec p (Sig r s) = showParen (p > 10) . showString $ \"Sig 0x\" ++ showHex256 r ++ \" 0x\" ++ showHex256 s\n"
  },
  {
    "path": "Haskell/Core/Simplicity/LibSecp256k1/Spec.hs",
    "content": "module Simplicity.LibSecp256k1.Spec\n ( -- * Field operations.\n   FE, fe, fe_repr, fe_pack, fe_unpack\n , fe_zero, fe_one\n , fe_is_zero, fe_is_odd\n , fe_negate, fe_add, fe_halve, fe_multiply, fe_square, fe_invert, fe_square_root\n , (.+.), (.-.), (.*.), (.^.)\n   -- * Group operations.\n , GEJ(..), _gej, gej, _x, _y, _z, g\n , gej_equiv\n , gej_negate\n , gej_double, gej_add_ex\n , gej_x_equiv, gej_y_is_odd\n , gej_is_on_curve\n , GE(..)\n , ge_to_gej\n , gej_normalize, gej_rescale\n , gej_ge_add_ex, gej_ge_add_zinv\n , ge_negate, ge_scale_lambda\n , ge_is_on_curve\n , gej_ge_equiv\n , shallueVanDeWoestijne, hash_to_curve\n   -- * Scalar operations\n , Scalar, scalar, scalar_repr, scalar_pack\n , scalar_zero, scalar_negate, scalar_add, scalar_square, scalar_multiply, scalar_invert, scalar_split_lambda, scalar_split_128\n , wnaf, scale, off_curve_scale, off_curve_linear_combination, linear_combination_1, off_curve_linear_combination_1\n , linear_check, linear_check_1\n   -- * Point operations\n , Point(..), decompress, point_check\n   -- * Public key / Signature operations\n , PubKey(..), pubkey_unpack, pubkey_unpack_neg\n , Sig(..), signature_unpack\n , bip_0340_check\n -- * Some large integer constants for secp256k1.\n , fieldOrder, groupOrder, beta, lambda\n -- * points on other twists\n , ge_115792089237316195423570985008687907853508896131558604026424249738214906721757\n , ge_115792089237316195423570985008687907853031073199722524052490918277602762621571\n , ge_57896044618658097711785492504343953926299326406578432197819248705606044722122\n , ge_38597363079105398474523661669562635951234135017402074565436668291433169282997\n , ge_8270863516951156815969356072049136275281522608437447405948333614614684278506\n , ge_199, ge_169, ge_39, ge_14, ge_13, ge_7, ge_6, ge_3\n ) where\n\n\nimport Control.Applicative ((<|>))\nimport Control.Monad (guard)\nimport Control.Monad.Trans.RWS hiding (put)\nimport Control.Monad.Trans.State (state, evalState)\nimport Control.Monad.Trans.Tardis (Tardis, getFuture, getPast, getsPast, modifyBackwards, modifyForwards, runTardis, sendFuture)\nimport Data.Bits ((.&.), (.|.), finiteBitSize)\nimport Data.ByteString.Short (ShortByteString, pack)\nimport qualified Data.ByteString.Char8 as BSC\nimport Data.Ix (inRange)\nimport Data.List (foldl', mapAccumL, mapAccumR, unfoldr)\nimport Data.Maybe (isJust)\nimport Data.Serialize (encode, put)\nimport Data.Serialize.Put (putShortByteString, runPut)\nimport qualified Data.Vector as V\nimport Lens.Family2 ((^.), (^..), (&), (+~), (*~), (%~), allOf, over, review, under, zipWithOf)\nimport Lens.Family2.Stock (_1, _2, lend_, some_)\n\nimport Simplicity.Digest\nimport Simplicity.LibSecp256k1.Schnorr\nimport Simplicity.Word\n\ninfixl 6 .+., .-.\ninfixl 7 .*.\ninfixr 8 .^.\n\n-- | The secp256k1 field is @GF[p]@ where p is this prime number.\nfieldOrder :: Integer\nfieldOrder = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f\n\n-- | The secp256k1 group has order @n@ where @n@ is this prime number.\ngroupOrder :: Integer\ngroupOrder = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\n\n-- | The canonical primitive cube root of 1 in @GF[p]@.\n--\n-- @\n--    mod (beta ^ 2 + beta + 1) fieldOrder == 0\n-- @\n--\n-- Note that @mod (beta ^ 2) fieldOrder@ is the other, non-canonical, cube root of 1.\nbeta :: Integer\nbeta = 0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee\n\n-- | The canonical primitive cube root of 1 in the scalar field @GF[n]@.\n--\n-- @\n--    mod (lambda ^ 2 + lambda + 1) groupOrder == 0\n-- @\n--\n-- and\n--\n-- @\n--    'gej_normalize' ('scalar_mulitply' ('scalar' 'lambda') p) == 'GE' ('fe' 'beta' .*. x) y\n--      where (x, y) = 'gej_normalize' p\n-- @\n--\n-- Note that @mod (lambda ^ 2) groupOrder@ is the other, non-canonical, cube root of 1.\nlambda :: Integer\nlambda = 0x5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72\n\n-- | An element of secp256k1's field is represented as a normalized value.\ndata FE = FE { fe_pack :: Word256 -- ^ Return the normalized representative of a field element as a 'Word256'.\n             }\n  deriving (Eq, Show)\n\n-- | Return the normalized integer representative of a field element.\nfe_repr :: FE -> Integer\nfe_repr = toInteger . fe_pack\n\n-- | Construct a field element from an integer.\nfe :: Integer -> FE\nfe n = FE . fromInteger $ n `mod` fieldOrder\n\n-- | The zero value of the field.\nfe_zero :: FE\nfe_zero = fe 0\n\n-- | The one value of the field.\nfe_one :: FE\nfe_one = fe 1\n\n-- | @'fe' 7@\nfe_seven :: FE\nfe_seven = fe 7\n\n-- | @'fe' 'beta'@\nfe_beta :: FE\nfe_beta = fe beta\n\n-- | Decode a 256-bit word value as a field element, failing if the value is non-canonical.\nfe_unpack :: Word256 -> Maybe FE\nfe_unpack x0 = guard (x == fe_repr a) >> return a\n where\n  x = toInteger x0\n  a = fe x\n\n-- | Checks if the field element's representative is odd.\nfe_is_odd :: FE -> Bool\nfe_is_odd = odd . fe_repr\n\n-- | Checks if the field element is 0.\nfe_is_zero :: FE -> Bool\nfe_is_zero = (0 ==) . fe_repr\n\n-- | Negate a field element.\nfe_negate :: FE -> FE\nfe_negate = fe . negate . fe_repr\n\n-- | Add two field elements.\nfe_add :: FE -> FE -> FE\nfe_add a b = fe (fe_repr a + fe_repr b)\n\n-- | Multiply two field elements.\nfe_multiply :: FE -> FE -> FE\nfe_multiply a b = fe (fe_repr a * fe_repr b)\n\n-- | Square a field element.\nfe_square :: FE -> FE\nfe_square a = fe_multiply a a\n\n-- | Halve a field element.\nfe_halve :: FE -> FE\nfe_halve a = fe ((x + if odd x then fieldOrder else 0) `div` 2)\n where\n  x = fe_repr a\n\n-- | Multiply a field element by an integer.\n--\n-- @\n--    mulInt i a == fe i .*. a\n-- @\nmulInt :: Integer -> FE -> FE\nmulInt i a = fe_multiply (fe i) a\n\n-- | Add two field elements.\n(.+.) = fe_add\n\n-- | Multiply two field elements.\n(.*.) = fe_multiply\n\n-- | Difference of two field elements.\nx .-. y = fe_add x (fe_negate y)\n\n-- | A field element raised to a given power.\nx .^. n = go x (n `mod` (fieldOrder - 1))\n where\n  go x 0 = fe_zero\n  go x 1 = x\n  go x n | even n = go (fe_square x) (n `div` 2)\n         | odd n = fe_multiply x (go (fe_square x) (n `div` 2))\n\n-- | The modulular inverse of a field element, with 'fe_zero' mapping to 'fe_zero'.\nfe_invert :: FE -> FE\nfe_invert a = a .^. (fieldOrder - 2)\n\n-- | A modular square root of a field element if it exists.\n-- If it exists it returns a value that is itself a square.\nfe_square_root :: FE -> Maybe FE\nfe_square_root a | 0 == (fieldOrder + 1) `mod` 4 = do\n  let res = a .^. ((fieldOrder + 1) `div` 4)\n  guard $ fe_is_zero (fe_square res .-. a)\n  return res\n\n-- | Checks if a field element has a square root.\nisQuad :: FE -> Bool\nisQuad = isJust . fe_square_root\n\n-- | A \"compressed\" point on the secp256k1 curve.  Infinity not included.\ndata Point = Point Bool FE\n  deriving Show\n\n-- | A point in Jacobian coordinates.\n-- A '_z' component of 'fe_zero' represents a point at infinity.\n--\n-- A value @p :: 'GEJ'@ where @p^.'_z'@ is not 'fe_zero' represents a point with x-coordinate @p.^'_x' .*. ('fe_invert' p.^_z) .^. 2@\n-- and with y-coordinate @p.^'_y' .*. ('fe_invert' p.^_z) .^. 3@.\n--\n-- A canonical point has a z-component of 1, except for the point at infinity whose canonical value has all components 0.\ndata GEJ = GEJ !FE !FE !FE\n  deriving Show\n\n-- | A traversal of the 3 'GEJ' components.\n_gej :: Applicative f => (FE -> f FE) -> GEJ -> f GEJ\n_gej = under gej\n\n-- | A grid of the 3 'GEJ' components.\ngej :: (Functor g, Applicative f) => (g FE -> f FE) -> g GEJ -> f GEJ\ngej f a = GEJ <$> f ((^._x) <$> a)\n              <*> f ((^._y) <$> a)\n              <*> f ((^._z) <$> a)\n\n-- | A lens for the x-component of 'GEJ'.\n_x :: Functor f => (FE -> f FE) -> GEJ -> f GEJ\n_x f (GEJ x y z) = (\\x -> GEJ x y z) <$> f x\n\n-- | A lens for the y-component of 'GEJ'.\n_y :: Functor f => (FE -> f FE) -> GEJ -> f GEJ\n_y f (GEJ x y z) = (\\y -> GEJ x y z) <$> f y\n\n-- | A lens for the z-component of 'GEJ'.\n_z :: Functor f => (FE -> f FE) -> GEJ -> f GEJ\n_z f (GEJ x y z) = (\\z -> GEJ x y z) <$> f z\n\n-- | Checks if the point is a representation of infinity.\ngej_is_infinity :: GEJ -> Bool\ngej_is_infinity a = fe_is_zero (a^._z)\n\n-- | Returns an equivalent point with the z-coefficent multiplied by the given constant.\n-- This will return infinity if the constant is zero.\ngej_rescale :: GEJ -> FE -> GEJ\ngej_rescale (GEJ x y z) c = GEJ (x .*. c .^. 2) (y .*. c .^. 3) (z .*. c)\n\n-- | Negates a 'GEJ'.\ngej_negate :: GEJ -> GEJ\ngej_negate (GEJ x y z) = GEJ x (fe_negate y) z\n\n-- | Compute the point doubling formula for a 'GEJ'.\ngej_double :: GEJ -> GEJ\ngej_double a@(GEJ x y z) | gej_is_infinity a = mempty\n                         | otherwise = GEJ x' y' z'\n where\n  x' = fe_halve . fe_halve $ mulInt 9 (x .^. 4) .+. mulInt (-8) (x .*. y .^. 2)\n  y' = fe_halve . fe_halve . fe_halve $ mulInt 36 (x .^. 3 .*. y .^. 2) .+. mulInt (-27) (x .^. 6) .+. mulInt (-8) (y .^. 4)\n  z' = y .*. z\n\n-- | Compute the point addition formula for a 'GEJ'.\n-- This also returns the ratio between z-component of 'a' and z-component of the result.\n--\n-- @\n--    a^.'_z' .*. r = p^.'_z'\n-- @\n--\n-- where\n--\n-- @\n--    (r, p) = 'gej_add_ex' a b\n-- @\ngej_add_ex :: GEJ -> GEJ -> (FE, GEJ)\ngej_add_ex a@(GEJ ax ay az) b@(GEJ bx by bz) | gej_is_infinity a = (fe_zero, GEJ bx by bz)\n                                             | gej_is_infinity b = (fe_one, a)\n                                             | isZeroH && isZeroI = (ay, gej_double a)\n                                             | isZeroH = (fe_zero, mempty)\n                                             | otherwise = (bz .*. h, GEJ x y z)\n where\n  u1 = ax .*. bz .^. 2\n  u2 = bx .*. az .^. 2\n  s1 = ay .*. bz .^. 3\n  s2 = by .*. az .^. 3\n  h = u2 .-. u1\n  i = s1 .-. s2\n  isZeroH = fe_is_zero h\n  isZeroI = fe_is_zero i\n  z = az .*. bz .*. h\n  t = fe_negate $ u1 .*. h .^. 2\n  x = i .^. 2 .+. mulInt 2 t .-. h .^. 3\n  y = (t .+. x) .*. i .-. h .^. 3 .*. s1\n\ninstance Semigroup GEJ where\n  a <> b = snd $ gej_add_ex a b\n\ninstance Monoid GEJ where\n  mempty = GEJ fe_zero fe_zero fe_zero\n\n-- | Check if two points in jacobian coordinates are equivalent.\ngej_equiv :: GEJ -> GEJ -> Bool\ngej_equiv a b = gej_is_infinity $ gej_negate a <> b\n\n-- | Check if the x-coordinate of the point represented by a 'GEJ' has a given value.\ngej_x_equiv :: FE -> GEJ -> Bool\ngej_x_equiv x a | gej_is_infinity a = False\n                | otherwise = fe_is_zero $ (fe_square (a^._z) .*. x) .-. (a^._x)\n\n-- | Check if the y-coordinate of the point represented by a 'GEJ' is odd.\ngej_y_is_odd :: GEJ -> Bool\ngej_y_is_odd a@(GEJ _ y z) | gej_is_infinity a = False\n                           | otherwise = fe_is_odd $ y .*. invz .^. 3\n where\n  invz = fe_invert z\n\n-- | Validates the secp256k1 curve equation: Y^2 = X^3 + 7Z^6\ngej_is_on_curve :: GEJ -> Bool\ngej_is_on_curve (GEJ x y z) = fe_is_zero $ x.^.3 .+. fe_seven.*.z.^.6 .-. y.^.2\n\n-- | An uncompressed point.  Infinity not included\ndata GE = GE !FE !FE -- Infinity not included.\n        deriving Show\n\n-- | Convert an uncompressed point to Jacobian coordinates\nge_to_gej (GE x y) = GEJ x y fe_one\n\n-- | Compute the point addition formula for a 'GEJ' and a 'GE'.\n-- This also returns the ratio between z-component of 'a' and z-component of the result.\n--\n-- @\n--    a^.'_z' .*. r = p^.'_z'\n-- @\n--\n-- where\n--\n-- @\n--    (r, p) = 'gej_add_ex' a b\n-- @\ngej_ge_add_ex :: GEJ -> GE -> (FE, GEJ)\ngej_ge_add_ex a (GE bx by) = gej_add_ex a (GEJ bx by fe_one)\n\n-- | Compute a point addition formula for a 'GEJ' and another point with an inverted z coordinate.\n--\n-- @\n--    'gej_is_infinity' $ ('gej_ge_add_zinv' a (GE bx by) bzinv) <> ('gej_negate' (a <> ('GEJ' bx by ('fe_invert' bzinf))))\n-- @\n--\n-- where\n--\n-- @\n--    (r, p) = 'gej_add_ex' a b\n-- @\ngej_ge_add_zinv :: GEJ -> GE -> FE -> GEJ\ngej_ge_add_zinv a (GE bx by) bzinv = snd $ gej_ge_add_ex a (GE (bx .*. bzinv .^. 2) (by .*. bzinv .^. 3))\n\n-- | Convert a 'GEJ' to a 'GE'.\n-- If the input is infinity, returns Nothing.\ngej_normalize :: GEJ -> Maybe GE\ngej_normalize (GEJ x y z) | fe_is_zero z = Nothing\n                          | otherwise = Just $ GE (x .*. invz .^. 2) (y .*. invz .^. 3)\n where\n  invz = fe_invert z\n\n-- | Negates a 'GE'.\nge_negate :: GE -> GE\nge_negate (GE x y) = GE x (fe_negate y)\n\n-- | Scale a 'GE' by 'lambda'.\n--\n-- @\n--    'ge_scale_lambda' ('ge_normalze' p) == 'ge_normalize' ('scalar_multiply' 'scalar_lambda' p)\n-- @\nge_scale_lambda :: GE -> GE\nge_scale_lambda (GE x y) = GE (x .*. fe_beta) y\n\n-- | Validates the secp256k1 curve equation: y^2 = x^3 + 7\nge_is_on_curve :: GE -> Bool\nge_is_on_curve (GE x y) = gej_is_on_curve (GEJ x y fe_one)\n\n-- | Check if a point in jacobian coordinates is equivalent to one given in affine coordinates.\ngej_ge_equiv :: GEJ -> GE -> Bool\ngej_ge_equiv x y = gej_is_infinity . snd $ gej_ge_add_ex (gej_negate x) y\n\n-- | Algebraically distribute a field element to up to three candidate points on the secp256k1 curve.\n-- At least one point is guaranteed to be on curve.\n-- While the algebraic properties only hold for non-zero t, the code does return a valid point when t = 0.\nshallueVanDeWoestijne_internal :: FE -> (Maybe GE, Maybe GE, Maybe GE)\nshallueVanDeWoestijne_internal t =\n  (GE x1 <$> y1, GE x2 <$> y2, GE x3 <$> y3)\n where\n  Just c = fe_square_root (fe (-3))\n  d = fe_halve (c .-. fe_one)\n  wn = c .*. t\n  wd = (fe_one .+. fe_seven) .+. (t.^.2)\n  invwd = fe_invert wd\n  x1n = d .*. wd .-. t .*. wn\n  x1 = x1n .*. invwd\n  y1 = sign <$> fe_square_root (x1 .^. 3 .+. fe_seven)\n  x2n = fe_negate (x1n .+. wd)\n  x2 = x2n .*. invwd\n  y2 = sign <$> fe_square_root (x2 .^. 3 .+. fe_seven)\n  x3n = (wd.^.2) .+. c.^.2 .*. t.^.2\n  x3 = x3n .*. fe_invert (wn.^.2)\n  y3 = sign <$> fe_square_root (x3 .^. 3 .+. fe_seven)\n  sign | fe_is_odd t = fe_negate\n       | otherwise = id\n\n-- | Algebraically distribute a field element over the secp256k1 curve as defined in\n-- \"Indifferentiable Hashing to Barreto-Naehrig Curves\" by Pierre-Alain Fouque, Mehdi Tibouchi\n-- <https://inria.hal.science/hal-01094321/file/FT12.pdf>\n--\n-- While this by iteslf is not a cryptographic hash function, it can be used as a subrotuine\n-- in a 'hash_to_curve' function.  However the distribution only approaches uniform when it is called twice.\nshallueVanDeWoestijne :: FE -> GE\nshallueVanDeWoestijne t = result\n where\n  (p1, p2, p3) = shallueVanDeWoestijne_internal t\n  Just result = p1 <|> p2 <|> p3\n\n-- | An element of secp256k1's scalar field is represented as a normalized value.\nnewtype Scalar = Scalar { scalar_pack :: Word256 -- ^ Return the normalized representative of a scalar element as a 'Word256'.\n                        } deriving (Eq, Show)\n\ninstance Bounded Scalar where\n  minBound = scalar 0\n  maxBound = scalar $ groupOrder - 1\n\n-- | The zero value of the scalar field.\nscalar_zero :: Scalar\nscalar_zero = Scalar 0\n\n-- | @'scalar' 'lambda'@\nscalar_lambda :: Scalar\nscalar_lambda = scalar lambda\n\n-- | Construct a scalar element from an integer.\nscalar :: Integer -> Scalar\nscalar x = Scalar $ fromInteger (x `mod` groupOrder)\n\n-- | Return the normalized integer representative of a scalar element.\nscalar_repr :: Scalar -> Integer\nscalar_repr = toInteger . scalar_pack\n\n-- | Decode a 256-bit word value as a scalar element, failing if the value is non-canonical.\nscalar_unpack :: Word256 -> Maybe Scalar\nscalar_unpack x0 = guard (x == scalar_repr s) >> return s\n where\n  x = toInteger x0\n  s = scalar x\n\n-- | Checks if the scalar element is 0.\nscalar_is_zero :: Scalar -> Bool\nscalar_is_zero a = scalar_repr a == 0\n\n-- | Negate a scalar element.\nscalar_negate :: Scalar -> Scalar\nscalar_negate = scalar . negate . scalar_repr\n\n-- | Add two scalar elements.\nscalar_add :: Scalar -> Scalar -> Scalar\nscalar_add a b = scalar (scalar_repr a + scalar_repr b)\n\n-- | Multiply two scalar elements.\nscalar_multiply :: Scalar -> Scalar -> Scalar\nscalar_multiply a b = scalar (scalar_repr a * scalar_repr b)\n\n-- | Square a scalar element.\nscalar_square :: Scalar -> Scalar\nscalar_square a = scalar_multiply a a\n\n-- | The modulular inverse of a scalar element, with 'scalar_zero' mapping to 'scalar_zero'.\nscalar_invert :: Scalar -> Scalar\nscalar_invert a = a `scalar_power` (groupOrder - 2)\n where\n  scalar_power x n = go x (n `mod` (groupOrder - 1))\n   where\n    go x 0 = scalar_zero\n    go x 1 = x\n    go x n | even n = go (scalar_square x) (n `div` 2)\n           | odd n = scalar_multiply x (go (scalar_square x) (n `div` 2))\n\n-- | Scale a 'GEJ' by a scalar element.\noff_curve_scale :: Scalar -> GEJ -> GEJ\noff_curve_scale na a = off_curve_linear_combination_1 na a scalar_zero\n\n-- | Safe scale of a 'GEJ' by a scalar element.\n--\n-- Returns 'Nothing' when the point @a@ is not 'gej_is_on_curve'.\n-- Otherwise, returns 'Just' the result of 'scale'.\nscale :: Scalar -> GEJ -> Maybe GEJ\nscale na a = linear_combination_1 na a scalar_zero\n\n-- | Decompose a scalar value in short components.\n--\n-- @\n--    'scalar' (k1 + 'lambda' * k2) == a\n--    abs k1 < 2^128 && abs k2 < 2^128\n-- @\n--\n-- where\n--\n-- @\n--    (k1, k2) = 'scalar_split_lambda' a\n-- @\nscalar_split_lambda :: Scalar -> (Integer, Integer)\nscalar_split_lambda k0 = (k1, k2)\n where\n  n = groupOrder\n  n2 = n `div` 2\n  k = scalar_repr k0\n  g1 = 0x3086d221a7d46bcde86c90e49284eb153daa8a1471e8ca7fe893209a45dbb031\n  g2 = 0xe4437ed6010e88286f547fa90abfe4c4221208ac9df506c61571b4ae8ac47f71\n  b1 = -0xe4437ed6010e88286f547fa90abfe4c3\n  b2 =  0x3086d221a7d46bcde86c90e49284eb15\n  c1 = (k * g1 + 2^383) `div` (2^384)\n  c2 = (k * g2 + 2^383) `div` (2^384)\n  k2 = - c1*b1 - c2*b2\n  k1 = (k - k2 * lambda + n2) `mod` n - n2\n\n-- | Decompose a scalar value in short components.\n--\n-- @\n--    'scalar' (k1 + 2^128 * k2) == a\n--    0 <= k1 < 2^128 && 0 <= k2 < 2^128\n-- @\n--\n-- where\n--\n-- @\n--    (k1, k2) = 'scalar_split_128' a\n-- @\nscalar_split_128 :: Scalar -> (Integer, Integer)\nscalar_split_128 k0 = (k1, k2)\n where\n  k = scalar_repr k0\n  (k2, k1) = k `divMod` (2^128)\n\n-- | Fast computation of a linear combination of the secp256k1 curve generator and other points.\n--\n-- @\n--    'gej_is_infinity' $ 'off_curve_linear_combination' [] ng <> 'gej_negate' ('scalar_multiply' ng 'g')\n-- @\n--\n-- @\n--    'gej_is_infinity' $ 'off_curve_linear_combination' ((na, a):tl) ng <> 'gej_negate' ('scalar_multiply' ng 'g' <> 'linear_combination' tl ng)\n-- @\noff_curve_linear_combination :: [(Scalar, GEJ)] -> Scalar -> GEJ\noff_curve_linear_combination l ng = foldr f mempty zips & _z %~ (.*. globalZ)\n where\n  wa = 5\n  (l', globalZ) = runTableM . sequence $\n    [(,) <$> pure na <*> scalarTable wa s | (na, s) <- l, not (gej_is_infinity s) && not (scalar_is_zero na)]\n  (ng1, ng2) = scalar_split_128 ng\n  split_l = do\n    (na, table) <- l'\n    let (na1, na2) = scalar_split_lambda na\n    let table_lam = ge_scale_lambda <$> table\n    [(na1, table), (na2, table_lam)]\n  f (as, Nothing, Nothing) r0 = foldl' gej_ge_add (gej_double r0) as\n  f (as, Just g1, Nothing) r0\n                   = gej_ge_add_zinv (f (as, Nothing, Nothing) r0) (tableG ! g1) globalZ\n  f (as, g1, Just g2) r0\n                   = gej_ge_add_zinv (f (as, g1, Nothing) r0) (tableG128 ! g2) globalZ\n  gej_ge_add p q = snd $ gej_ge_add_ex p q\n  zip3Ex [] [] [] = []\n  zip3Ex [] bs cs = zip3Ex [[]] bs cs\n  zip3Ex as [] cs = zip3Ex as [Nothing] cs\n  zip3Ex as bs [] = zip3Ex as bs [Nothing]\n  zip3Ex (a:as) (b:bs) (c:cs) = (a,b,c) : zip3Ex as bs cs\n  zips = zip3Ex (transposeTables split_l) (wnaf wg ng1) (wnaf wg ng2)\n  transposeTables [] = []\n  transposeTables ((na, ts):rest) = merge (wnaf wa na) ts (transposeTables rest)\n   where\n    merge [] _ tbls = tbls\n    merge l t [] = [[t ! i | Just i <- [x]] | x <- l]\n    merge (Just i : tl) t (htbls : ttbls) = ((t ! i) : htbls) : merge tl t ttbls\n    merge (Nothing : tl) t (htbls : ttbls) = htbls : merge tl t ttbls\n\n-- | Fast computation of a linear combination of the secp256k1 curve generator and another point.\n--\n-- @\n--    'gej_is_infinity' $ 'off_curve_linear_combination_1' na a ng <> 'gej_negate' ('scalar_multiply' na 'a' <> 'scalar_multiply' ng 'g')\n-- @\noff_curve_linear_combination_1 :: Scalar -> GEJ -> Scalar -> GEJ\noff_curve_linear_combination_1 na a = off_curve_linear_combination [(na, a)]\n\n-- | Safe computation of a linear combination of the secp256k1 curve generator and another point.\n--\n-- Returns 'Nothing' when the point @a@ is not 'gej_is_on_curve'.\n-- Otherwise, returns 'Just' the result of 'off_curve_linear_combination_1'.\nlinear_combination_1 :: Scalar -> GEJ -> Scalar -> Maybe GEJ\nlinear_combination_1 na a ng = do\n  guard $ gej_is_on_curve a\n  return $ off_curve_linear_combination_1 na a ng\n\n-- | Decompose an integer in windowed non-adjacent form\nwnafInteger :: Int -> Integer -> [Int]\nwnafInteger w | 0 < w && w <= finiteBitSize w = unfoldr f\n where\n  f 0 = Nothing\n  f i = Just (fromInteger x, (i - x) `div` 2)\n   where\n    x | odd i = ((i + 2^(w-1)) `mod` 2^w) - 2^(w-1)\n      | otherwise = 0\n\n-- | Decompose an integer in windowed non-adjacent form.\n-- Odd values have their least significant bit dropped.\n-- Zero values are returned as Nothing.\nwnaf :: Int -> Integer -> [Maybe Int]\nwnaf w s = post <$> wnafInteger w s\n where\n  post 0 = Nothing\n  post i | odd i = Just $ i `div` 2\n         | otherwise = error \"Simplicity.LibSecp256k1.Spec: invalid result from wnafInteger\"\n\n-- | A monad used to help construct scalar tables with a common z-coordinate.\ntype TableM a = Tardis FE GEJ a\n\n-- | Execute a 'TableM' computation, also returning the combon z-coordinate value.\nrunTableM :: TableM a -> (a, FE)\nrunTableM tardis = (a, p^._z)\n where\n  (a,(_,p)) = runTardis tardis (fe_one, GEJ fe_zero fe_zero fe_one)\n\n-- | Get the current table point, scalining it by the future z-factor.\ngetTable :: TableM GE\ngetTable = do\n  a <- getPast\n  zf <- getFuture\n  return $ GE (a^._x .*. zf .^. 2) (a^._y .*. zf .^. 3)\n\n-- | Put a new table point into the 'TableM'.\n-- Requires the (true) z-ratio between the new point and the previous point.\nputTable :: FE -> GEJ -> TableM ()\nputTable zr a = do\n  modifyBackwards (.*. zr)\n  sendFuture a\n\n-- | Precompute small odd multiplies of a 'GEJ' and give them a common z-coordinate.\n-- The point must not be at infinity.\nscalarTable :: Int -> GEJ -> TableM (V.Vector GE)\nscalarTable w a = do\n  z0 <- getsPast (^._z)\n  let a' = gej_rescale a z0\n  let d = gej_double a'\n  let dz = d^._z\n  let a'' = GEJ (a'^._x .*. dz .^. 2) (a'^._y .*. dz .^. 3) (a'^._z)\n  putTable (a^._z .*. dz) a''\n  let tableNext = uncurry putTable =<< (gej_ge_add_ex <$> getPast <*> pure (GE (d^._x) (d^._y)))\n  result <- V.cons <$> getTable <*> V.replicateM (len - 1) (tableNext >> getTable)\n  modifyForwards $ _z %~ (.*. dz)\n  return result\n where\n  len = 2^(w-2)\n\n-- | The specified generator of the secp256k1 curve.\ng :: GEJ\ng = GEJ (fe 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798)\n        (fe 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)\n        fe_one\n\n-- | A representation of 2^128 * 'g'.\ng128 :: GEJ\ng128 = iterate gej_double g !! 128\n\n-- | The default window size for scalars multiplying by 'g'.\nwg = 15\n\n-- | A precomputate table of odd multiples of 'g'.\ntableG = table wg g\n\n-- | A precomputate table of odd multiples of 'g128'.\ntableG128 = table wg g128\n\n-- | Compute a table of odd multiple of a point and 'gej_normalize' all of them.\ntable w p = t & traverse %~ norm\n where\n  (t,z) = runTableM (scalarTable w p)\n  zinv = fe_invert z\n  norm (GE x y) = GE (x .*. zinv .^. 2) (y .*. zinv .^. 3)\n\n-- | An index into a precomputed odd multiple table of 'GE'.\n-- Negative indexes are accepted and automatically return the negation of the corresponding point.\n(!) :: V.Vector GE -> Int -> GE\nt ! i | i >= 0 = t V.! i\n      | otherwise = ge_negate (t V.! (-i-1))\n\n-- | Validates that all points are 'ge_is_on_curve' and that\n-- @'linear_check' l ng r@ implies\n--\n-- @\n--    'gej_is_infinity' $ 'linear_combination' l ng <> 'ge_negate' r\n-- @\nlinear_check :: [(Scalar, GE)] -> Scalar -> GE -> Bool\nlinear_check l ng r = isJust $ do\n  guard $ ge_is_on_curve r\n  guard $ allOf (traverse._2) ge_is_on_curve l\n  guard $ gej_is_infinity (off_curve_linear_combination l' ng <> negR)\n where\n  negR = toGEJ (ge_negate r)\n  l' = l & (traverse._2) %~ toGEJ\n  toGEJ (GE x y) = (GEJ x y fe_one)\n\n-- | Validates that all points are 'ge_is_on_curve' and that\n-- @'linear_check_1' na a ng r@ implies\n--\n-- @\n--    'gej_is_infinity' $ 'linear_combination_1' na a ng <> 'ge_negate' r\n-- @\nlinear_check_1 :: Scalar -> GE -> Scalar -> GE -> Bool\nlinear_check_1 na a = linear_check [(na, a)]\n\n-- | Convert a point from compressed coordinates to affine coordinates.\n-- Fails if the x-coordinate of the point is not on the secp256k1 curve.\ndecompress :: Point -> Maybe GE\ndecompress (Point yodd x) = do\n  y <- fe_square_root (x .^. 3 .+. fe_seven)\n  return (GE x (if fe_is_odd y == yodd then y else (fe_negate y)))\n\n-- | Given an (x-only) public key, check that the x-coordinate is normalized and returns a Point representing that pubkey.\n-- This does not check that the point is on-curve, which needed to be done by a subsequent call to `decompress`.\npubkey_unpack :: PubKey -> Maybe Point\npubkey_unpack (PubKey px) = Point False <$> fe_unpack px\n\n-- | Given an (x-only) public key, check that the x-coordinate is normalized and returns a Point representing the negation of that pubkey.\n-- This does not check that the point is on-curve, which needed to be done by a subsequent call to `decompress`.\npubkey_unpack_neg :: PubKey -> Maybe Point\npubkey_unpack_neg (PubKey px) = Point True <$> fe_unpack px\n\n-- | Given a bip0340 signature, unpack it r value as an 'FE', and its s value as a 'Scalar'.\n-- Fails if the signature components are out of range.\nsignature_unpack :: Sig -> Maybe (FE, Scalar)\nsignature_unpack (Sig r s) = (,) <$> fe_unpack r <*> scalar_unpack s\n\n-- | Validates that all points are 'decompress'able and that the 'linear_check' of the decompressed points is satisfied.\npoint_check :: [(Scalar, Point)] -> Scalar -> Point -> Bool\npoint_check l ng r = isJust $ do\n  l' <- l & (traverse._2) decompress\n  r' <- decompress r\n  guard $ linear_check l' ng r'\n\n-- | Verify a bip0340 signature for a given public key on a given message.\nbip_0340_check :: PubKey  -- ^ public key\n               -> Hash256 -- ^ message\n               -> Sig     -- ^ signature\n               -> Bool\nbip_0340_check pk m sg = isJust $ do\n  negp <- pubkey_unpack_neg pk\n  (rx, s) <- signature_unpack sg\n  let tag = bsHash (BSC.pack \"BIP0340/challenge\")\n  let h = bsHash . runPut $ put tag >> put tag >> put (fe_pack rx) >> put pk >> put m\n  let e = scalar . integerHash256 $ h\n  let r = Point False rx\n  guard $ point_check [(e, negp)] s r\n\n-- | A cryptograph hash function that results in a point on the secp256k1 curve.\n--\n-- It is cryptographically impossible for 'Nothing' to be returned.\nhash_to_curve :: Word256 -> Maybe GE\nhash_to_curve key = do\n  p1 <- swu_limit hash1\n  p2 <- swu_limit hash2\n  gej_normalize . snd $ gej_ge_add_ex (ge_to_gej p1) p2\n where\n  hash1 = integerHash256 $ bsHash (BSC.pack \"1st generation: \" <> encode key)\n  hash2 = integerHash256 $ bsHash (BSC.pack \"2nd generation: \" <> encode key)\n  swu_limit x = shallueVanDeWoestijne <$> fe_unpack (fromInteger x)\n\n-- | Point of order 3 * 199 * 18979 * 5128356331187950431517 * 1992751017769525324118900703535975744264170999967\nge_115792089237316195423570985008687907853508896131558604026424249738214906721757 :: GE\nge_115792089237316195423570985008687907853508896131558604026424249738214906721757 = GE fe_one (fe 47) \n\n-- | Point of order 109903 * 12977017 * 383229727 * 211853322379233867315890044223858703031485253961775684523\nge_115792089237316195423570985008687907853031073199722524052490918277602762621571 :: GE\nge_115792089237316195423570985008687907853031073199722524052490918277602762621571 = GE fe_one (fe 2) \n\n-- | Point of order 2 * 3 * 20412485227 * 83380711482738671590122559 * 5669387787833452836421905244327672652059\nge_57896044618658097711785492504343953926299326406578432197819248705606044722122 :: GE\nge_57896044618658097711785492504343953926299326406578432197819248705606044722122 = GE fe_one (fe 3) \n\n-- | Point of order 3 * 13^2 * 3319 * 22639 * 1013176677300131846900870239606035638738100997248092069256697437031\nge_38597363079105398474523661669562635951234135017402074565436668291433169282997 :: GE\nge_38597363079105398474523661669562635951234135017402074565436668291433169282997 = GE fe_one (fe 4) \n\n-- | Point of order 2 * 7 * 10903 * 5290657 * 10833080827 * 22921299619447 * 41245443549316649091297836755593555342121\nge_8270863516951156815969356072049136275281522608437447405948333614614684278506 :: GE\nge_8270863516951156815969356072049136275281522608437447405948333614614684278506 = GE fe_one (fe 9) \n\n-- | Point of order 199\nge_199 :: GE\nge_199 = GE (fe 70687250180557772597302152869007174094074882915196773732325669623429152815718) (fe 33705998260714715075689047715894246886612372461530560867300550015040889896278) \n\n-- | Point of order 13^2\nge_169 :: GE\nge_169 = GE (fe 76143429403124191739648005988712146536970826737586076805285435910939811650235) (fe 79206108477852635180125138589256689828047073885928765425620364817661860808444) \n\n-- | Point of order 3 * 13\nge_39 :: GE\nge_39 = GE (fe 106383153246165320275512998590184975158094311190930717121540544272958714969874) (fe 60732340993648917667778372165513456197562368078430634464262139756474636012620) \n\n-- | Point of order 2 * 7 \nge_14 :: GE\nge_14 = GE (fe 23022798600391872912114696699513327158948857432264427056250729177241370144563) (fe 42638903475844439756199347045463393577799965344626237613274902440780224637754) \n\n-- | Point of order 13\nge_13 :: GE\nge_13 = GE (fe 64527622301014718397267236002495618081577172385398418064146870396180094467254) (fe 64805533305984530191801092315596539809224403998577052480080063250771024326631) \n\n-- | Point of order 7\nge_7 :: GE\nge_7 = GE (fe 114109980193979926462125731765358310155031959372310767812063216697230157494741) (fe 101398216421584366967138431919489099535284823381455250476556676772183350055487) \n\n-- | Point of order 2 * 3 \nge_6 :: GE\nge_6 = GE (fe 106586213356003376052770626926523423124273824193112332847656463919061591657353) (fe 26101920679609057376888884124959740524626979187904654689991505285331895977061) \n\n-- | Point of order 3 \nge_3 :: GE\nge_3 = GE (fe 93163632785783131583621179645788501141364174486796116157579303931124646196327) (fe 67800883132571304345368516576619608502750474897195575578939869419018063089619) \n"
  },
  {
    "path": "Haskell/Core/Simplicity/MerkleRoot/Impl.hs",
    "content": "-- | This module provides functions for computing commitment, identity and annotated Merkle roots of Simplicity expressions and Merkle roots of Simplicity types.\n-- It also provides some other functions for other hashing schemes that will avoid collisions with the aforementioned Merkle roots.\n--\n-- This module is internal only.  \"Simplicity.MerkleRoot\" is the public facing module.\nmodule Simplicity.MerkleRoot.Impl\n  ( typeRoot, typeRootR\n  , CommitmentRoot, commitmentRoot\n  , IdentityRoot, identityHash\n  , AnnotatedRoot, annotatedRoot\n  , hiddenRoot\n  , signatureTag, sigHash\n  , cmrFail0\n  -- * Internal functions\n  -- | These functions are use internally to define commitment, identity, and annotated Merkle root instances for\n  -- Primitives and expressions that depend on Primitives.\n  , primitiveCommitmentImpl, jetCommitmentImpl\n  , primitiveIdentityImpl, jetIdentityImpl\n  , primitiveAnnotatedImpl, jetAnnotatedImpl\n  ) where\n\nimport Data.List (intercalate)\nimport Data.Proxy (Proxy(..))\nimport Data.Serialize (encode)\nimport Lens.Family2 (over, review)\n\nimport Simplicity.Digest\nimport Simplicity.Tags\nimport Simplicity.Term.Core\nimport Simplicity.Ty.Word\n\n-- | This function hashes a hash such that it will not collide with any 'typeRoot' or 'identityRoot'.\n--\n-- It is designed to be used as if it were a \"identity hash\" for hidden nodes.\nhiddenRoot :: Hash256 -> Hash256\nhiddenRoot = ivHash . compressHalf hiddenTag\n\n-- | Computes a hash committing to a Simplicity type.\n-- This function is memoized.\ntypeRoot :: Ty -> Hash256\ntypeRoot = memoCataTy typeRootF\n where\n  typeRootF :: TyF Hash256 -> Hash256\n  typeRootF One        = ivHash $ typeTag \"unit\"\n  typeRootF (Sum a b)  = ivHash $ compress (typeTag \"sum\") (a, b)\n  typeRootF (Prod a b) = ivHash $ compress (typeTag \"prod\") (a, b)\n\n-- | A variant of 'typeRoot' for @'TyReflect' a@ values.\n--\n-- @\n-- typeRootR = typeRoot . unreflect\n-- @\ntypeRootR :: TyReflect a -> Hash256\ntypeRootR = typeRoot . unreflect\n\nnewtype CommitmentRoot a b = CommitmentRoot {\n -- | A digest of a Simplicity expression that excludes 'witness' values and the 'disconnect'ed expressions.\n -- It also exclude typing information (with the exception of jets).\n    commitmentRoot :: Hash256\n  } deriving (Eq, Show)\n\ncommit = CommitmentRoot . ivHash\n\n-- | The commitment root of a @'fail' 'hash0' 'hash0'@ expression.\n--\n-- This hash value can be used as a default value for assertions, but at the cost of not hiding the fact that it isn't a pruned alternative branch.\ncmrFail0 :: Hash256\ncmrFail0 = commitmentRoot (fail0 :: CommitmentRoot () ())\n\ninstance Core CommitmentRoot where\n  iden                                        = commit $ commitmentTag \"iden\"\n  comp (CommitmentRoot s) (CommitmentRoot t)  = commit $ compress (commitmentTag \"comp\") (s, t)\n  unit                                        = commit $ commitmentTag \"unit\"\n  injl (CommitmentRoot t)                     = commit $ compressHalf (commitmentTag \"injl\") t\n  injr (CommitmentRoot t)                     = commit $ compressHalf (commitmentTag \"injr\") t\n  match (CommitmentRoot s) (CommitmentRoot t) = commit $ compress (commitmentTag \"case\") (s, t)\n  pair (CommitmentRoot s) (CommitmentRoot t)  = commit $ compress (commitmentTag \"pair\") (s, t)\n  take (CommitmentRoot t)                     = commit $ compressHalf (commitmentTag \"take\") t\n  drop (CommitmentRoot t)                     = commit $ compressHalf (commitmentTag \"drop\") t\n\ninstance Assert CommitmentRoot where\n  assertl (CommitmentRoot s) t = commit $ compress (commitmentTag \"case\") (s, t)\n  assertr s (CommitmentRoot t) = commit $ compress (commitmentTag \"case\") (s, t)\n  fail b = commit $ compress (commitmentTag \"fail\") b\n\ninstance Witness CommitmentRoot where\n  witness _ = commit $ commitmentTag \"witness\"\n\ninstance Delegate CommitmentRoot where\n  disconnect (CommitmentRoot s) _ = commit $ compressHalf (commitmentTag \"disconnect\") s\n\nnewtype IdentityRoot a b = IdentityRoot Hash256\n\n-- | A hash of the identity Merkle root, which includes 'witness' values and 'disconnect'ed expressions,\n-- along with the type Merkle roots of the input and output types.\nidentityHash :: (TyC a, TyC b) => IdentityRoot a b -> Hash256\nidentityHash ir@(IdentityRoot t) = ivHash $ compress (compressHalf identityHashTag t) (typeRootR ra, typeRootR rb)\n where\n  (ra, rb) = reifyArrow ir\n\nidentify = IdentityRoot . ivHash\n\ninstance Core IdentityRoot where\n  iden                                    = identify $ commitmentTag \"iden\"\n  comp (IdentityRoot s) (IdentityRoot t)  = identify $ compress (commitmentTag \"comp\") (s, t)\n  unit                                    = identify $ commitmentTag \"unit\"\n  injl (IdentityRoot t)                   = identify $ compressHalf (commitmentTag \"injl\") t\n  injr (IdentityRoot t)                   = identify $ compressHalf (commitmentTag \"injr\") t\n  match (IdentityRoot s) (IdentityRoot t) = identify $ compress (commitmentTag \"case\") (s, t)\n  pair (IdentityRoot s) (IdentityRoot t)  = identify $ compress (commitmentTag \"pair\") (s, t)\n  take (IdentityRoot t)                   = identify $ compressHalf (commitmentTag \"take\") t\n  drop (IdentityRoot t)                   = identify $ compressHalf (commitmentTag \"drop\") t\n\ninstance Assert IdentityRoot where\n  assertl (IdentityRoot s) t = identify $ compress (commitmentTag \"case\") (s, t)\n  assertr s (IdentityRoot t) = identify $ compress (commitmentTag \"case\") (s, t)\n  fail b = identify $ compress (commitmentTag \"fail\") b\n\ninstance Witness IdentityRoot where\n  witness v = result\n   where\n    result = identify $ compress (identityTag \"witness\") (bitStringHash (putValue v), typeRootR rb)\n    rb = reifyProxy result\n\ninstance Delegate IdentityRoot where\n  disconnect (IdentityRoot s) (IdentityRoot t) = identify $ compress (identityTag \"disconnect\") (s, t)\n\nnewtype AnnotatedRoot a b = AnnotatedRoot {\n -- | A digest of a Simplicity expression that also includes all typing annotations.\n    annotatedRoot :: Hash256\n  } deriving (Eq, Show)\n\nobserve = AnnotatedRoot . ivHash\n\ninstance Core AnnotatedRoot where\n  iden = result\n   where\n    result = observe $ compressHalf (annotatedTag \"iden\") (typeRootR (reifyProxy result))\n\n  comp ws@(AnnotatedRoot s) wt@(AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (compressHalf (annotatedTag \"comp\") (typeRootR (reifyProxy proxyA)))\n                                          (typeRootR (reifyProxy proxyB), (typeRootR (reifyProxy proxyC))))\n                                (s, t)\n    proxy :: proxy a b -> proxy b c -> (Proxy a, Proxy b, Proxy c)\n    proxy _ _ = (Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC) = proxy ws wt\n\n  unit = result\n   where\n    result = observe $ compressHalf (annotatedTag \"unit\") (typeRootR (fst (reifyArrow result)))\n\n  injl (AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (annotatedTag \"injl\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                (typeRootR (reifyProxy proxyC), t)\n    proxy :: proxy a (Either b c) -> (Proxy a, Proxy b, Proxy c)\n    proxy _ = (Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC) = proxy result\n\n  injr (AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (annotatedTag \"injr\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                (typeRootR (reifyProxy proxyC), t)\n    proxy :: proxy a (Either b c) -> (Proxy a, Proxy b, Proxy c)\n    proxy _ = (Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC) = proxy result\n\n  match (AnnotatedRoot s) (AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (compress (annotatedTag \"case\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                          (typeRootR (reifyProxy proxyC), typeRootR (reifyProxy proxyD)))\n                                (s, t)\n    proxy :: proxy ((Either a b), c) d -> (Proxy a, Proxy b, Proxy c, Proxy d)\n    proxy _ = (Proxy, Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC, proxyD) = proxy result\n\n  pair (AnnotatedRoot s) (AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (compressHalf (annotatedTag \"pair\") (typeRootR (reifyProxy proxyA)))\n                                          (typeRootR (reifyProxy proxyB), (typeRootR (reifyProxy proxyC))))\n                                (s, t)\n    proxy :: proxy a (b,c) -> (Proxy a, Proxy b, Proxy c)\n    proxy _ = (Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC) = proxy result\n  take (AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (annotatedTag \"take\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                (typeRootR (reifyProxy proxyC), t)\n    proxy :: proxy (a,b) c -> (Proxy a, Proxy b, Proxy c)\n    proxy _ = (Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC) = proxy result\n\n  drop (AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (annotatedTag \"drop\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                (typeRootR (reifyProxy proxyC), t)\n    proxy :: proxy (a,b) c -> (Proxy a, Proxy b, Proxy c)\n    proxy _ = (Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC) = proxy result\n\ninstance Assert AnnotatedRoot where\n  assertl (AnnotatedRoot s) t = result\n   where\n    result = observe $ compress (compress (compress (annotatedTag \"assertl\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                          (typeRootR (reifyProxy proxyC), typeRootR (reifyProxy proxyD)))\n                                (s, t)\n    proxy :: proxy ((Either a b), c) d -> (Proxy a, Proxy b, Proxy c, Proxy d)\n    proxy _ = (Proxy, Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC, proxyD) = proxy result\n\n  assertr s (AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (compress (annotatedTag \"assertr\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                          (typeRootR (reifyProxy proxyC), typeRootR (reifyProxy proxyD)))\n                                (s, t)\n    proxy :: proxy ((Either a b), c) d -> (Proxy a, Proxy b, Proxy c, Proxy d)\n    proxy _ = (Proxy, Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC, proxyD) = proxy result\n  -- This should never be called in practice, but we add it for completeness.\n  fail b = observe $ compress (annotatedTag \"fail\") b\n\ninstance Witness AnnotatedRoot where\n  witness v = result\n   where\n    result = observe $ compress (compressHalf (annotatedTag \"witness\") (typeRootR ra)) (typeRootR rb, bitStringHash (putValue v))\n    (ra, rb) = reifyArrow result\n\ninstance Delegate AnnotatedRoot where\n  disconnect ws@(AnnotatedRoot s) wt@(AnnotatedRoot t) = result\n   where\n    result = observe $ compress (compress (compress (annotatedTag \"disconnect\") (typeRootR (reifyProxy proxyA), typeRootR (reifyProxy proxyB)))\n                                          (typeRootR (reifyProxy proxyC), typeRootR (reifyProxy proxyD)))\n                                (s, t)\n    proxy :: proxy (w, a) (b, c) -> proxy c d -> (Proxy a, Proxy b, Proxy c, Proxy d)\n    proxy _ _ = (Proxy, Proxy, Proxy, Proxy)\n    (proxyA, proxyB, proxyC, proxyD) = proxy ws wt\n\nprimitiveCommitmentImpl primPrefix primName = commit . primTag primPrefix . primName\n\n-- Jets commit to their types, so we use 'identityHash' here.\njetCommitmentImpl ir milliweight = commit $ compress jetTag (review (over be256) milliweight, identityHash ir)\n\nprimitiveIdentityImpl primPrefix primName = identify . primTag primPrefix . primName\n\njetIdentityImpl ir milliweight = identify $ compress jetTag (review (over be256) milliweight, identityHash ir)\n\nprimitiveAnnotatedImpl primPrefix primName = observe . primTag primPrefix . primName\n\njetAnnotatedImpl ir milliweight = observe $ compress jetTag (review (over be256) milliweight, identityHash ir)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/MerkleRoot.hs",
    "content": "-- | This module provides functions for computing commitment, identity and annotated Merkle roots of Simplicity expressions and Merkle roots of Simplicity types.\n-- It also provides some other functions for other hashing schemes that will avoid collisions with the aforementioned Merkle roots.\nmodule Simplicity.MerkleRoot\n  ( typeRoot, typeRootR\n  , CommitmentRoot, commitmentRoot\n  , IdentityRoot, identityHash\n  , AnnotatedRoot, annotatedRoot\n  , hiddenRoot\n  , signatureTag, sigHash\n  , cmrFail0\n  ) where\n\nimport Simplicity.MerkleRoot.Impl\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Arith.hs",
    "content": "{-# LANGUAGE GADTs, ScopedTypeVariables, TypeOperators #-}\n-- | This module defines Simplicity expressions and combinators that operate on Words.\nmodule Simplicity.Programs.Arith\n  ( module Simplicity.Ty.Word\n  , zero\n  , one\n  , add, full_add, increment, full_increment\n  , subtract, full_subtract, negate, decrement, full_decrement\n  , multiply, full_multiply\n  , div2n1n, div_mod, divide, modulo, divides\n  , eea, bezout, cofactors, gcd, lcm\n  , is_zero, is_one\n  , le, lt\n  , min, max, median\n  , msb, lsb\n  , absolute_value, sign\n  ) where\n\nimport Prelude hiding ( Word, drop, take, not, and, or, last\n                      , subtract, negate, min, max, gcd, lcm\n                      )\nimport Data.Type.Equality ((:~:)(Refl))\n\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Word\nimport Simplicity.Term.Core hiding (one)\nimport Simplicity.Ty.Word\n\n-- | Simplicity expression for the constant function that returns the representation of 0.\n--\n-- @\n-- 'fromWord' w ('zero' w _) == 0\n-- @\nzero :: Core term => Word a -> term () a\nzero = low\n\n-- | Simplicity expression for the constant function that returns the representation of 1.\n--\n-- @\n-- 'fromWord' w ('one' w _) == 1\n-- @\none :: (Core term, TyC a) => Word a -> term () a\none w = true >>> left_pad_low word1 w\n\n-- | Simplicity expression for computing the sum of two words and a carry input bit, including the carry output bit.\n--\n-- @\n-- 'fromWord1' cout * 2 ^ 'wordSize' w + 'fromWord' w z == 'fromWord' w x + 'fromWord' w y + 'fromWord1' cin\n--  where\n--   (cout, z) = 'full_add' w (cin, (x, y))\n-- @\nfull_add :: Core term => Word a -> term (Bit, (a, a)) (Bit, a)\nfull_add SingleV = maj &&& xor_xor\nfull_add (DoubleV w) = drop (ooh &&& ioh) &&& (oh &&& drop (oih &&& iih) >>> rec)\n                   >>> iih &&& (ioh &&& oh >>> rec)\n                   >>> ioh &&& (iih &&& oh)\n where\n  rec = full_add w\n\n-- | Simplicity expression for computing the sum of two words, including the carry bit.\n--\n-- @\n-- 'fromWord1' c * 2 ^ 'wordSize' w + 'fromWord' w z == 'fromWord' w x + 'fromWord' w y\n--  where\n--   (c, z) = 'add' w (x, y)\n-- @\nadd :: (Core term, TyC a) => Word a -> term (a, a) (Bit, a)\nadd w = false &&& iden >>> full_add w\n\n-- | Simplicity expression for computing the sum a words and a bit, including the carry bit.\n--\n-- @\n-- 'fromWord1' c * 2 ^ 'wordSize' w + 'fromWord' w z == 'fromWord1' x + 'fromWord' w y\n--  where\n--   (c, z) = 'full_increment' w (x, y)\n-- @\nfull_increment :: (Core term, TyC a) => Word a -> term (Bit, a) (Bit, a)\nfull_increment w = oh &&& (ih &&& (unit >>> zero w)) >>> full_add w\n\n-- | Simplicity expression for incrementing a word, including the carry bit.\n--\n-- @\n-- 'fromWord1' c * 2 ^ 'wordSize' w + 'fromWord' w y == 1 + 'fromWord' w x\n--  where\n--   (c, y) = 'increment' w x\n-- @\nincrement :: (Core term, TyC a) => Word a -> term a (Bit, a)\nincrement w = true &&& iden >>> full_increment w\n\n-- | Simplicity expression for computing the difference of two words and a borrow input bit, also returning the borrow output bit.\n--\n-- @\n-- 'fromWord' w z == 'fromWord1' bout * 2 ^ 'wordSize' w + 'fromWord' w x - 'fromWord' w y - 'fromWord1' bin\n--  where\n--   (bout, z) = 'full_subtract' w (bin, (x, y))\n-- @\nfull_subtract :: (Core term, TyC a) => Word a -> term (Bit, (a, a)) (Bit, a)\nfull_subtract w = not oh &&& drop (oh &&& (ih >>> complement w))\n              >>> full_add w\n              >>> not oh &&& ih\n\n-- | Simplicity expression for computing the difference of two words, also returning the borrow bit.\n--\n-- @\n-- 'fromWord' w z == 'fromWord1' b * 2 ^ 'wordSize' w + 'fromWord' w x - 'fromWord' w y\n--  where\n--   (b, z) = 'subtract' w (x, y)\n-- @\nsubtract :: (Core term, TyC a) => Word a -> term (a, a) (Bit, a)\nsubtract w = false &&& iden >>> full_subtract w\n\n-- | Simplicity expression for negating a word, also returning the borrow bit.\n--\n-- @\n-- 'fromWord' w y == 'fromWord1' b * 2 ^ 'wordSize' w - 'fromWord' w x\n--  where\n--   (b, y) = 'negate' w x\n-- @\nnegate :: (Core term, TyC a) => Word a -> term a (Bit, a)\nnegate w = (unit >>> zero w) &&& iden >>> subtract w\n\n-- | Simplicity expression for subtracting a bit from a word, also returning the borrow bit.\n--\n-- @\n-- 'fromWord' w z == 'fromWord1' b * 2 ^ 'wordSize' w + 'fromWord' w y - 'fromWord1' x\n--  where\n--   (b, z) = 'full_decrement' w (x, y)\n-- @\nfull_decrement :: (Core term, TyC a) => Word a -> term (Bit, a) (Bit, a)\nfull_decrement w = oh &&& (ih &&& (unit >>> zero w)) >>> full_subtract w\n\n-- | Simplicity expression for decrementing a a word, also returning the borrow bit.\n--\n-- @\n-- 'fromWord' w y == 'fromWord1' b * 2 ^ 'wordSize' w + 'fromWord' w x - 1\n--  where\n--   (b, y) = 'decrement' w x\n-- @\ndecrement :: (Core term, TyC a) => Word a -> term a (Bit, a)\ndecrement w = true &&& iden >>> full_decrement w\n\n-- | A Simplicity expression that helps compute products of larger word sizes from smaller word sizes.\n--\n-- @\n-- 'fromWord' ('DoubleV' w) ('full_multiply' w ((a, b), (c, d))) == 'fromWord' w a * 'fromWord' w b  + 'fromWord' w c + 'fromWord' w d\n-- @\nfull_multiply :: (Core term, TyC a) => Word a -> term ((a, a), (a, a)) (a, a)\nfull_multiply SingleV = take (cond iden false) &&& ih\n                    >>> full_add SingleV\nfull_multiply (DoubleV w) = take (ooh &&& (ioh &&& oih))\n                        &&& ((take (ooh &&& iih) &&& drop (ooh &&& ioh) >>> rec)\n                        &&& (take (oih &&& iih) &&& drop (oih &&& iih) >>> rec))\n                        >>> take (oh &&& ioh)\n                        &&& (drop (ooh &&& iih) &&& (oih &&& drop (oih &&& ioh) >>> rec))\n                        >>> (oh &&& drop (ioh &&& ooh) >>> rec) &&& drop (iih &&& oih)\n where\n  rec = full_multiply w\n\n-- | Simplicity expression for computing the product of two words, returning a doubled size word.\n--\n-- @\n-- 'fromWord' ('DoubleV' w) ('multiply' w (x, y)) == 'fromWord' w x * 'fromWord' w y\n-- @\nmultiply :: (Core term, TyC a) => Word a -> term (a, a) (a, a)\nmultiply w = iden &&& (unit >>> zero (DoubleV w)) >>> full_multiply w\n\n-- | Test if a word is zero.\n--\n-- @\n-- 'fromBit' ('is_zero' w x) == ('fromWord' w x == 0)\n-- @\nis_zero :: (Core term, TyC a) => Word a -> term a Bit\nis_zero w = not (some w)\n\n-- | Test if a word is one.\n--\n-- @\n-- 'fromBit' ('is_one' w x) == ('fromWord' w x == 1)\n-- @\nis_one :: (Core term, TyC a) => Word a -> term a Bit\nis_one w = decrement w >>> drop (is_zero w)\n\n-- | Test if a word is less than another\n--\n-- @\n-- 'fromBit' ('lt' w (x, y)) == ('fromWord' w x < 'fromWord' w y)\n-- @\nlt :: (Core term, TyC a) => Word a -> term (a,a) Bit\nlt w = subtract w >>> oh\n\n-- | Test if a word is less than or equal to another\n--\n-- @\n-- 'fromBit' ('le' w (x, y)) == ('fromWord' w x <= 'fromWord' w y)\n-- @\nle :: (Core term, TyC a) => Word a -> term (a,a) Bit\nle w = not (ih &&& oh >>> lt w)\n\n-- | Compute the minimum of two words.\n--\n-- @\n-- 'fromWord' w ('min' w (x, y)) == 'Prelude.min' ('fromWord' w x) ('fromWord' w y)\n-- @\nmin :: (Core term, TyC a) => Word a -> term (a,a) a\nmin w = le w &&& iden >>> cond oh ih\n\n-- | Compute the maximum of two words.\n--\n-- @\n-- 'fromWord' w ('max' w (x, y)) == 'Prelude.max' ('fromWord' w x) ('fromWord' w y)\n-- @\nmax :: (Core term, TyC a) => Word a -> term (a,a) a\nmax w = le w &&& iden >>> cond ih oh\n\n-- | Compute the median of three words.\n--\n-- @\n-- 'fromWord' w ('median' w (x, (y, z))) == 'sort' ['fromWord' w x,  'fromWord' w y, 'fromWord' w z] !! 1\n-- @\nmedian :: (Core term, TyC a) => Word a -> term (a, (a, a)) a\nmedian w = ((oh &&& ioh >>> min w) &&& (oh &&& iih >>> min w) >>> max w)\n           &&& drop (min w) >>> max w\n\n-- | Return the most significant bit of a word.\n--\n-- @\n-- 'fromBit' ('msb' w x) == (2 ^ ('wordSize' w - 1) <= 'fromWord' w x)\n-- @\nmsb :: (Core term, TyC a) => Word a -> term a Bit\nmsb w = leftmost w\n\n-- | Return the least significant bit of a word.\n--\n-- @\n-- 'fromBit' ('lsb' w x) == odd ('fromWord' w x)\n-- @\nlsb :: (Core term, TyC a) => Word a -> term a Bit\nlsb w = rightmost w\n\n-- div3n2n (((a1,a2),a3), (b1,b2))\n-- precondition\n-- * [a1,a2,a3] < [b1,b2,0]\n-- * 1000... <= [b1,b2]\n-- postcondition:\n-- * div3n2n (((a1,a2),a3), (b1,b2)) = ([a1,a2,a3]/[b1,b2], [a1,a2,a3]%[b1,b2])\ndiv3n2n :: (Core term, TyC a) => Word a -> term (((a, a), a), (a, a)) (a, (a, a))\ndiv3n2n w = (ooh &&& ioh >>> approxDiv) &&& (oih &&& ih)\n        >>> body\n where\n  approxDiv = (ooh &&& ih >>> lt w) &&& iden >>> cond lt_case eq_case\n  lt_case = false &&& div2n1n w\n  eq_case = oih &&& ih >>> add w >>> oh &&& ((unit >>> high w) &&& ih)\n  body = ooh &&& (((oiih &&& ioh) &&& (oioh &&& iiih >>> multiply w) >>> subtract (DoubleV w)) &&& (oioh &&& iih))\n      >>> cond overflow loop0\n  overflow = ioh &&& oih\n  loop0 = ooh &&& (oih &&& ih) >>> cond loop1 (ioh &&& oh)\n  loop1 = (oh &&& iih >>> add2w) &&& drop ((take (dec >>> ih)) &&& ih)\n       >>> ooh &&& (oih &&& ih)\n       >>> cond (ioh &&& oh) loop2\n  loop2 = drop (take (dec >>> ih)) &&& (oh &&& iih >>> add2w >>> ih)\n  dec = decrement w\n  add2w = add (DoubleV w)\n\n-- | A Simplicity expression that helps compute the division of words.\n--\n-- @\n-- When 'fromWord' ('DoubleV' w) a < 2^'wordSize' w * 'fromWord' w b\n-- and 2^('wordSize' w - 1) <= 'fromWord' w b\n-- then 'fromWord' w (fst ('div2n1n' w (a, b))) == div ('fromWord' ('DoubleV' w) a) ('fromWord' w b)\n-- and 'fromWord' w (snd ('div2n1n' w (a, b))) == mod ('fromWord' ('DoubleV' w) a) ('fromWord' w b)\n-- otherwise\n-- 'div2n1n' w (a, b) == 'Simplicity.Programs.Word.high' ('DoubleV' w) ()\n-- @\ndiv2n1n :: (Core term, TyC a) => Word a -> term ((a, a), a) (a, a)\ndiv2n1n SingleV = oih &&& or ooh (not ih) >>> or oh ih &&& ih\ndiv2n1n (DoubleV w) = conditions &&& iden >>> cond body (unit >>> high (DoubleV (DoubleV w)))\n where\n  body = ((ooh &&& oioh) &&& ih >>> rec) &&& (oiih &&& ih)\n     >>> ooh &&& ((oih &&& ioh) &&& iih >>> rec)\n     >>> (oh &&& ioh) &&& iih\n  rec = div3n2n w\n  conditions = and (drop (msb (DoubleV w))) (ooh &&& ih >>> lt (DoubleV w))\n\n-- Given a two words x and y, with x twice as wide as y, perform a left shift of both words by equal amounts until the msb of y becomes set.\ndivPreShift :: (Core term, TyC a) => Word b -> Vector b a -> term ((a, a), a) ((a, a), a)\ndivPreShift SingleV _ = iden\ndivPreShift (DoubleV w) v = drop (leftmost v' >>> is_zero w) &&& iden >>> cond shift iden >>> divPreShift w v'\n where\n  v' = vectorComp vector2 v\n  shift = (oh &&& zv >>> full_shift (DoubleV (vectorComp w v')) w >>> ih)\n      &&& (ih &&& zv >>> full_shift (vectorComp w v') w >>> ih)\n  zv = unit >>> zero w\n\n-- Given a two words x and y, perform a right shift of the first word and a left shift of the second word by the same about until the msb of y becomes set.\ndivPostShift :: (Core term, TyC a) => Word b -> Vector b a -> term (a, a) (a, a)\ndivPostShift SingleV _ = iden\ndivPostShift (DoubleV w) v = drop (leftmost v' >>> is_zero w) &&& iden >>> cond shift iden >>> divPostShift w v'\n where\n  v' = vectorComp vector2 v\n  shift = (zv &&& oh >>> full_shift w (vectorComp w v') >>> oh)\n      &&& (ih &&& zv >>> full_shift (vectorComp w v') w >>> ih)\n  zv = unit >>> zero w\n\n-- | Divide two words, also returning the remainder.\n--\n-- @\n-- 'fromWord' w (fst ('div_mod' w (x, 'zero' w))) == 0\n--   && 'fromWord' w (snd ('div_mod' w (x, 'zero' w))) == 'fromWord' w x\n--\n-- 'fromWord' w (fst ('div_mod' w (x, y))) == div ('fromWord' w x) ('fromWord' w y)\n--   && 'fromWord' w (snd ('div_mod' w (x, y))) == mod ('fromWord' w x) ('fromWord' w y)\n--  when\n--   'fromWord' w y != 0\n-- @\ndiv_mod :: (Core term, TyC a) => Word a -> term (a, a) (a, a)\ndiv_mod w = (drop (is_zero w)) &&& iden\n        >>> cond zero_case div_case\n where\n  zero_case = ih &&& oh\n  div_case = (((unit >>> zero w) &&& oh) &&& ih >>> divPreShift w SingleV >>> div2n1n w) &&& ih\n         >>> ooh &&& (oih &&& ih >>> divPostShift w SingleV >>> oh)\n\n-- | Divide two words.\n--\n-- @\n-- 'fromWord' w ('divide' w (x, 'zero' w)) == 0\n--\n-- 'fromWord' w ('divide' w (x, y)) == div ('fromWord' w x) ('fromWord' w y)\n--  when\n--   'fromWord' w y != 0\n-- @\ndivide :: (Core term, TyC a) => Word a -> term (a, a) a\ndivide w = div_mod w >>> oh\n\n-- | Compute the remainder after dividing two words.\n--\n-- @\n-- 'fromWord' w ('modulo' w (x, 'zero' w)) == 'fromWord' w x\n--\n-- 'fromWord' w ('modulo' w (x, y)) == mod ('fromWord' w x) ('fromWord' w y)\n--  when\n--   'fromWord' w y != 0\n-- @\nmodulo :: (Core term, TyC a) => Word a -> term (a, a) a\nmodulo w = div_mod w >>> ih\n\n-- | Check if one word divides another\n--\n-- @\n-- 'fromBit' ('divides' w ('zero' w, y)) == True\n--\n-- 'fromBit' ('divides' w (x, y)) == (mod ('fromWord' w y) ('fromWord' w x) == 0)\n--  when\n--   'fromWord' w x != 0\n-- @\ndivides :: (Core term, TyC a) => Word a -> term (a, a) Bit\ndivides w = ih &&& oh >>> modulo w >>> is_zero w\n\n-- A single step of the extended Euclidean algorithm.\n-- Given a matrix\n--  [ a -b | c ]\n--  [ -d e | f ]\n-- Then subtract either the largest possible multiple of the second row from the first such that c remains positive\n-- or the largest possible multiple of the first row from the second such that f remains positive.\n-- If either c of f is zero then this results in no change.\neeaStep :: (Core term, TyC a) => Word a -> term (((a,a), a), ((a,a),a)) (((a,a), a), ((a,a),a))\neeaStep w = (iih &&& oih >>> lt w) &&& iden\n        >>> cond (step &&& ih) (oh &&& (ih &&& oh >>> step))\n where\n  step = (oih &&& iih >>> div_mod w) &&& (ooh &&& ioh)\n     >>> (((ooh &&& iioh) &&& (iooh &&& (unit >>> zero w)) >>> full_multiply w >>> ih)\n      &&& ((ooh &&& iiih) &&& (ioih &&& (unit >>> zero w)) >>> full_multiply w >>> ih))\n     &&& oih\n\n-- Repeat eeaStep 2^wordsize (v :: Word b) many times..\neeaStep_iterate :: forall term a b. (Core term, TyC a) => Word a -> Word b -> term (((a,a), a), ((a,a),a)) (((a,a), a), ((a,a),a))\neeaStep_iterate w = go\n where\n  go :: forall b. Word b -> term (((a,a), a), ((a,a),a)) (((a,a), a), ((a,a),a))\n  go SingleV = base >>> base\n   where\n    base = eeaStep w\n  go (DoubleV d) = rec >>> rec\n   where\n    rec = go d\n\n-- | Compute the results of the extended euclidan algorithm.\n--\n-- @\n-- 'eea' (x, y) == (('bezout' (x, y), 'cofactors' (x, y)), 'gcd' (x, y))\n-- @\neea :: (Core term, TyC a) => Word a -> term (a, a) ((Either (a, a) (a, a), (a, a)), a)\neea w = pre >>> eeaStep_iterate w w >>> post\n where\n  o = (unit >>> one w)\n  z = (unit >>> zero w)\n  pre = ((o &&& z) &&& oh) &&& ((z &&& o) &&& ih)\n  post = drop (drop (is_zero w)) &&& iden\n     >>> cond ((injl ooh &&& ioh) &&& oih)\n              ((injr ioh &&& ooh) &&& iih)\n\n-- | Compute minimal bezout coeffecients of two words.\n--\n-- @\n--  'fromWord' w cx * 'fromWord' w x - 'fromWord' w cy * 'fromWord' w y == Prelude.gcd ('fromWord' w x) ('fromWord' w y)\n--  when\n--   Left (cx, cy) = 'bezout' w (x, y)\n--\n--  'fromWord' w cy * 'fromWord' w y - 'fromWord' w cx * 'fromWord' w x == Prelude.gcd ('fromWord' w x) ('fromWord' w y)\n--  when\n--   Right (cx, cy) = 'bezout' w (x, y)\n-- @\nbezout :: (Core term, TyC a) => Word a -> term (a, a) (Either (a, a) (a, a))\nbezout w = eea w >>> ooh\n\n-- | Compute the cofactors of two words.\n--\n-- @\n-- 'fromWord' w cx * d == 'fromWord' w x\n--   && 'fromWord' w cy * d == 'fromWord' w y y\n--  where\n--   (cx, cy) = 'cofactors' w (x, y)\n--   d = Prelude.gcd ('fromWord' w x) ('fromWord' w y)\n-- @\ncofactors :: (Core term, TyC a) => Word a -> term (a, a) (a, a)\ncofactors w = eea w >>> take (drop (ih &&& oh))\n\n-- | Compute the greatest common divisor of two words.\n--\n-- @\n-- 'fromWord' w ('gcd' w (x, y)) == 'Prelude.gcd' ('fromWord' w x) ('fromWord' w y)\n-- @\ngcd :: (Core term, TyC a) => Word a -> term (a, a) a\ngcd w = eea w >>> ih\n\n-- | Compute the least common multiple of two words.\n--\n-- @\n-- 'fromWord' (DoubleV w) ('lcm' w (x, y)) == 'Prelude.lcm' ('fromWord' w x) ('fromWord' w y)\n-- @\nlcm :: (Core term, TyC a) => Word a -> term (a, a) (a,a)\nlcm w = (cofactors w >>> oh) &&& ih >>> multiply w\n\n-- | Compute the absolute value of a signed word.\n--\n-- @\n-- 'fromWord' w ('absolute_value' w x) == 'abs' ('fromInt' w x)\n-- @\nabsolute_value :: (Core term, TyC a) => Word a -> term a a\nabsolute_value w = msb w &&& iden\n               >>> cond (negate w >>> ih) iden\n\n-- | Compute the sign value of a signed word as a 2-bit value.\n--\n-- @\n-- 'fromInt2' ('sign' w x) == 'signum' ('fromInt' w x)\n-- @\nsign :: (Core term, TyC a) => Word a -> term a Word2\nsign w = msb w &&& some w\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Bit.hs",
    "content": "-- | This module defines Simplicity combinators and expressions that operate on bits.\nmodule Simplicity.Programs.Bit\n ( module Simplicity.Ty.Bit\n , false, true\n , cond, ch, assert, verify\n , not, and, or, xor\n , xor_xor, maj\n ) where\n\nimport Prelude hiding (drop, take, not, and, or)\n\nimport Simplicity.MerkleRoot\nimport Simplicity.Ty.Bit\nimport Simplicity.Term.Core\n\n-- | Simplicity expression always returns the zero bit.\n--\n-- @'false' = 'Simplicity.Programs.Generic.scribe' ('toBit' 'False')@\nfalse :: (Core term, TyC a) => term a Bit\nfalse = injl unit\n\n-- | Simplicity expression always returns the one bit.\n--\n-- @'true' = 'Simplicity.Programs.Generic.scribe' ('toBit' 'True')@\ntrue :: (Core term, TyC a) => term a Bit\ntrue = injr unit\n\n-- | Simplicity's if-then-else combinator.\n--\n-- @\n-- 'cond' t _ ('toBit' 'True', a) = t a\n--\n-- 'cond' _ e ('toBit' 'False', a) = e a\n-- @\ncond :: (Core term, TyC a, TyC b) => term a b -> term a b -> term (Bit, a) b\ncond thn els = match (drop els) (drop thn)\n\n-- | Simplicity expression that chooses from a pair of values.\n--\n-- @\n-- 'ch' ('toBit' 'True', (a, _)) = a\n--\n-- 'ch' ('toBit' 'False', (_, b)) = b\n-- @\nch :: (Core term, TyC a) => term (Bit, (a, a)) a\nch = cond oh ih\n\n-- | Requires the value produced by @t@ to not be 'false' and fails otherwise.\nassert :: (Assert term, TyC a, TyC b) => term a (Either () b) -> term a b\nassert t = t &&& unit >>> assertr cmrFail0 oh\n\n-- | Requires the 'Right' value an fails if instead the value is 'Left'.\n--\n-- When specialized, this asserts that the input bit is true and returns a unit value.\nverify :: (Assert term, TyC a) => term (Either () a) a\nverify = assert iden\n\n-- | Simplicity combinator that computes inverts the Bit result of an expression.\nnot :: (Core term, TyC a) => term a Bit -> term a Bit\nnot t = t &&& unit >>> cond false true\n\n-- | Simplicity combinator that computes the short-circut conjunction of the results of two expressions.\nand :: (Core term, TyC a) => term a Bit -> term a Bit -> term a Bit\nand s t = s &&& iden >>> cond t false\n\n-- | Simplicity combinator that computes the short-circut disjunction of the results of two expressions.\nor :: (Core term, TyC a) => term a Bit -> term a Bit -> term a Bit\nor s t = s &&& iden >>> cond true t\n\n-- | Simplicity expression that returns the three-way xor of three bits.\nxor :: (Core term, TyC a) => term a Bit -> term a Bit -> term a Bit\nxor s t = s &&& iden >>> cond (not t) t\n\n-- | Simplicity expression that returns the three-way xor of three bits.\nxor_xor :: Core term => term (Bit, (Bit, Bit)) Bit\nxor_xor = cond (cond iden (not iden)) (cond (not iden) iden)\n\n-- | Simplicity expression that returns the majority value of three bits.\nmaj :: Core term => term (Bit, (Bit, Bit)) Bit\nmaj = cond (cond true iden) (cond iden false)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Bitcoin/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Programs.Bitcoin.lib' library instance into individual functions.\n-- Users should prefer to use 'Simplicity.Programs.Bitcoin.mkLib' in order to share library dependencies.\n-- This module is provided mostly for testing purposes.\nmodule Simplicity.Programs.Bitcoin.Lib\n  ( buildTapleafSimplicity, buildTapbranch\n  , outpointHash, annexHash\n  , buildTaptweak\n  , Bitcoin.Hash, Bitcoin.Ctx8\n  ) where\n\nimport qualified Simplicity.Programs.Bitcoin as Bitcoin\n\n-- Maybe this ought to be Template Haskell.\nbuildTapleafSimplicity = Bitcoin.buildTapleafSimplicity Bitcoin.lib\nbuildTapbranch = Bitcoin.buildTapbranch Bitcoin.lib\noutpointHash = Bitcoin.outpointHash Bitcoin.libAssert\nannexHash = Bitcoin.annexHash Bitcoin.libAssert\nbuildTaptweak = Bitcoin.buildTaptweak Bitcoin.libAssert\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Bitcoin.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expressions that implement pure calculations used by Bitcoin.\nmodule Simplicity.Programs.Bitcoin\n  ( Lib(Lib), mkLib\n  , buildTapleafSimplicity, buildTapbranch\n  , LibAssert(LibAssert), mkLibAssert\n  , outpointHash, annexHash\n  , buildTaptweak\n  -- * Example instances\n  , lib, libAssert\n  -- * Reexports\n  , Hash, Ctx8\n  ) where\n\nimport Prelude hiding (Word, drop, not, subtract, take)\nimport Data.String (fromString)\nimport Lens.Family2 (over, review)\n\nimport Simplicity.Digest\nimport Simplicity.Functor\nimport Simplicity.LibSecp256k1.Spec (fieldOrder, groupOrder)\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Word\nimport Simplicity.Term.Core hiding (one)\nimport qualified Simplicity.Programs.LibSecp256k1 as LibSecp256k1\nimport Simplicity.Programs.LibSecp256k1 hiding (Lib(Lib), mkLib, lib)\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Programs.Sha256 hiding ( Lib(Lib), lib\n                                         , LibAssert(LibAssert), mkLibAssert, libAssert)\n\n-- | A collection of core Simplicity expressions for Bitcoin calculations.\n-- Use 'mkLib' to construct an instance of this library.\ndata Lib term =\n Lib\n  { buildTapleafSimplicity :: term Hash Hash\n\n    -- | Compute a tapbranch hash from two branches.\n  , buildTapbranch :: term (Hash, Hash) Hash\n  }\n\n-- | A collection of Simplicity with Assertions expressions for Bitcoin calculations.\n-- Use 'mkLibAssert' to construct an instance of this library.\ndata LibAssert term =\n LibAssert\n  { -- | A hash of an outpoint.\n    outpointHash :: term (Ctx8, (Word256, Word32)) Ctx8\n    -- | A hash of an optional hash.\n  , annexHash :: term (Ctx8, S Word256) Ctx8\n    -- | Compute a taptweak hash from a pubkey and a hash.\n  , buildTaptweak :: term (PubKey, Hash) PubKey\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    { buildTapleafSimplicity = m buildTapleafSimplicity\n    , buildTapbranch = m buildTapbranch\n    }\n\ninstance SimplicityFunctor LibAssert where\n  sfmap m LibAssert{..} =\n   LibAssert\n    { outpointHash = m outpointHash\n    , annexHash = m annexHash\n    , buildTaptweak = m buildTaptweak\n    }\n\n-- | Build the Bitcoin 'Lib' library from its dependencies.\nmkLib :: forall term. Core term => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                -> Lib term\nmkLib Sha256.Lib{..} = lib\n where\n  lib@Lib{..} = Lib {\n    buildTapleafSimplicity = (unit >>> tapleafPrefix)\n                         &&& ((unit >>> (simplicityVersion &&& scribe (toWord8 32))) &&& iden >>> full_shift word16 word256 >>>\n                              (oh &&& ((((ih &&& (unit >>> scribe (toWord16 0x8000))) &&& (unit >>> zero word32)) &&& (unit >>> zero word64)) &&& (unit >>> scribe (toWord128 (512+16+256))))))\n                         >>> hashBlock\n  , buildTapbranch = ((unit >>> tapbranchPrefix)\n                 &&& (lt word256 &&& iden >>> cond iden (ih &&& oh))\n                 >>> hashBlock)\n                 &&& (unit >>> scribe (toWord512 $ 2^511 + 1024)) >>> hashBlock\n  } where\n    tapleafPrefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ fromString \"TapLeaf\"\n    tapbranchPrefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ fromString \"TapBranch\"\n    simplicityVersion = scribe . toWord8 $ 0xbe\n\n-- | An instance of the Bitcoin 'Lib' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLib' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlib :: Core term => Lib term\nlib = mkLib Sha256.lib\n\n-- | Build the Bitcoin 'LibAssert' library.\nmkLibAssert :: forall term. Assert term => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                        -> Sha256.LibAssert term -- ^ \"Simplicity.Programs.Sha256\"\n                                        -> LibSecp256k1.Lib term -- ^ \"Simplicity.Programs.Libsecp256k1\"\n                                        -> LibAssert term\nmkLibAssert Sha256.Lib{..} Sha256.LibAssert{..} LibSecp256k1.Lib{..} = libAssert\n where\n  libAssert@LibAssert{..} = LibAssert {\n    outpointHash = (oh &&& ioh >>> ctx8Add32) &&& iih >>> ctx8Add4\n  , annexHash = ih &&& oh\n            >>> match (ih &&& take (zero word8) >>> ctx8Add1)\n                      ((ih &&& (unit >>> scribe (toWord8 0x01)) >>> ctx8Add1) &&& oh >>> ctx8Add32)\n  , buildTaptweak = assert (\n                  (((assert (oh &&& (unit >>> scribe (toWord256 fieldOrder)) >>> lt256) >>> taptweakPrefix) &&& iden >>> hashBlock)\n                &&& (unit >>> scribe (toWord512 $ 2^511 + 1024)) >>> hashBlock >>>\n                   (assert (iden &&& (unit >>> scribe (toWord256 groupOrder)) >>> lt256) &&& iden) >>> drop generate)\n                &&& assert ((unit >>> false) &&& oh >>> decompress)\n                >>> gej_ge_add >>> gej_normalize) >>> oh\n  } where\n    lt256 = lt word256\n    ctx8Add32 = ctx8Addn vector32\n    ctx8Add8 = ctx8Addn vector8\n    ctx8Add4 = ctx8Addn vector4\n    taptweakPrefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ fromString \"TapTweak\"\n\n-- | An instance of the Bitcoin 'LibAssert' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLibAssert' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlibAssert :: Assert term => LibAssert term\nlibAssert = mkLibAssert Sha256.lib Sha256.libAssert LibSecp256k1.lib\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/CheckSig/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module instantiates the \"Simplicity.Programs.CheckSig\" module functions.\n-- Users should prefer to use \"Simplicity.Programs.CheckSig\" module in order to share library dependencies.\nmodule Simplicity.Programs.CheckSig.Lib\n ( sigHash'\n , checkSigVerify , checkSigVerify'\n -- * Types\n , CheckSig.Hash\n ) where\n\nimport qualified Simplicity.Programs.CheckSig as CheckSig\nimport qualified Simplicity.Programs.LibSecp256k1 as LibSecp256k1\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Ty.Word\n\nsigHash' = CheckSig.sigHash' Sha256.lib\ncheckSigVerify = CheckSig.checkSigVerify Sha256.lib LibSecp256k1.lib\ncheckSigVerify' = CheckSig.checkSigVerify' Sha256.lib LibSecp256k1.lib\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/CheckSig.hs",
    "content": "{-# LANGUAGE RecordWildCards #-}\n-- | The module builds a Simplicity expression that mimics the behaviour of a @CHECKSIG@ operation for Bitcoin but with universal signature hash modes.\n-- This uses Schnorr signature verification specified in \"Simplicity.Programs.LibSecp256k1\".\nmodule Simplicity.Programs.CheckSig\n  ( sigHash'\n  , checkSigVerify, checkSigVerify'\n  -- * Types\n  , Hash\n  ) where\n\nimport Prelude hiding (drop, take)\n\nimport Simplicity.Digest\nimport Simplicity.Functor\nimport qualified Simplicity.LibSecp256k1.Schnorr as Schnorr\nimport Simplicity.MerkleRoot hiding (sigHash)\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Sha256 hiding (Lib(Lib), lib)\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Programs.LibSecp256k1 hiding (Lib(Lib), lib, mkLib)\nimport qualified Simplicity.Programs.LibSecp256k1 as LibSecp256k1\nimport Simplicity.Term.Core\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\n-- | A Simplicity expression that computes a \"standard\" Simplicity tagged signature hash from the CMR of a sighash algorithm, and the output of that sighash.\n--\n-- This expression should not be used directly.  Instead use 'sigHash'' to ensure that inputs are properly constructed.\nsigHash :: (Core term) => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                       -> term (Word256, Word256) Hash\nsigHash Sha256.Lib{..} = (scribe iv &&& iden >>> hb)\n  &&& scribe (toWord512 0x80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400)\n  >>> hb\n where\n  iv = toWord256 . integerHash256 . ivHash $ signatureTag\n  hb = hashBlock\n\n-- | Constructs a Simplicity expression for a \"standard\" Simplicity tagged signature hash using a given signature hash mode.\n--\n-- The sighash mode is `disconnected` and thus doesn't affect this expression's CMR.\nsigHash' :: (Core term, Delegate term) => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                       -> term () Hash -- ^ signature hash mode\n                                       -> term () Hash\nsigHash' sha256 hashMode = disconnect iden hashMode >>> sigHash sha256\n\n\n-- | A Simplicity expression that checks a \"standard\" Simplicity tagged signature hash given\n--\n-- * A pubkey\n-- * A message that is intended to be the CMR of a sighash algorithm, and the output of that sighash.\n-- * A signature\n--\n-- This expression should not be used directly.  Instead use 'checkSigVerify'' to ensure that inputs are properly constructed.\ncheckSigVerify :: (Assert term) => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                -> LibSecp256k1.Lib term -- ^ \"Simplicity.Programs.LibSecp256k1\"\n                                -> term ((Word256, (Word256, Word256)), Word512) () -- ^ signature hash mode\ncheckSigVerify sha256 libsecp256k1 =\n      take (oh &&& drop (sigHash sha256)) &&& ih >>> bip_0340_verify libsecp256k1\n\n-- | Constructs a Simplicity program that validates a signature on a \"standard\" Simplicity tagged signature hash using\n--\n-- * a given signature hash mode\n-- * a given public key\n-- * a given signature\n--\n-- The sighash mode is `disconnected` and the signature is embedded inside a witness node.\n-- Thus these two inputs do not affect this expression's CMR.\ncheckSigVerify' :: (Assert term, Delegate term, Witness term) => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                                              -> LibSecp256k1.Lib term -- ^ \"Simplicity.Programs.LibSecp256k1\"\n                                                              -> term () Hash -- ^ signature hash mode\n                                                              -> Schnorr.PubKey -> Schnorr.Sig -> term () ()\ncheckSigVerify' sha256 libsecp256k1 hashMode (Schnorr.PubKey x) ~(Schnorr.Sig r s) =\n      (scribe (toWord256 . toInteger $ x) &&& disconnect iden hashMode)\n  &&& (witness (toWord256 . toInteger $ r, toWord256 . toInteger $ s))\n  >>> checkSigVerify sha256 libsecp256k1\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Elements/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Programs.Elements.lib' library instance into individual functions.\n-- Users should prefer to use 'Simplicity.Programs.Elements.mkLib' in order to share library dependencies.\n-- This module is provided mostly for testing purposes.\nmodule Simplicity.Programs.Elements.Lib\n  ( Elements.Conf\n  , calculateIssuanceEntropy, calculateAsset, calculateExplicitToken, calculateConfidentialToken\n  , buildTapleafSimplicity, buildTapbranch\n  , lbtcAsset\n  , outpointHash, assetAmountHash, nonceHash, annexHash\n  , buildTaptweak\n  , Elements.Hash, Elements.Ctx8\n  ) where\n\nimport qualified Simplicity.Programs.Elements as Elements\n\n-- Maybe this ought to be Template Haskell.\ncalculateIssuanceEntropy = Elements.calculateIssuanceEntropy Elements.lib\ncalculateAsset = Elements.calculateAsset Elements.lib\ncalculateExplicitToken = Elements.calculateExplicitToken Elements.lib\ncalculateConfidentialToken = Elements.calculateConfidentialToken Elements.lib\nbuildTapleafSimplicity = Elements.buildTapleafSimplicity Elements.lib\nbuildTapbranch = Elements.buildTapbranch Elements.lib\nlbtcAsset = Elements.lbtcAsset Elements.lib\noutpointHash = Elements.outpointHash Elements.libAssert\nassetAmountHash = Elements.assetAmountHash Elements.libAssert\nnonceHash = Elements.nonceHash Elements.libAssert\nannexHash = Elements.annexHash Elements.libAssert\nbuildTaptweak = Elements.buildTaptweak Elements.libAssert\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Elements.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expressions that implement pure calculations used by Elements.\nmodule Simplicity.Programs.Elements\n  ( Lib(Lib), mkLib\n  , Conf\n  , calculateIssuanceEntropy, calculateAsset, calculateExplicitToken, calculateConfidentialToken\n  , buildTapleafSimplicity, buildTapbranch\n  , lbtcAsset\n  , LibAssert(LibAssert), mkLibAssert\n  , outpointHash, assetAmountHash, nonceHash, annexHash\n  , buildTaptweak\n  -- * Example instances\n  , lib, libAssert\n  -- * Reexports\n  , Hash, Ctx8\n  ) where\n\nimport Prelude hiding (Word, drop, not, subtract, take)\nimport Data.String (fromString)\nimport Lens.Family2 (over, review)\n\nimport Simplicity.Digest\nimport Simplicity.Functor\nimport Simplicity.LibSecp256k1.Spec (fieldOrder, groupOrder)\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Word\nimport Simplicity.Term.Core hiding (one)\nimport qualified Simplicity.Programs.LibSecp256k1 as LibSecp256k1\nimport Simplicity.Programs.LibSecp256k1 hiding (Lib(Lib), mkLib, lib)\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Programs.Sha256 hiding ( Lib(Lib), lib\n                                         , LibAssert(LibAssert), mkLibAssert, libAssert)\n\n-- | A Simplicity type constructor for Elements confidential values.\ntype Conf a = Either Point a\n\n-- | A collection of core Simplicity expressions for Elements calculations.\n-- Use 'mkLib' to construct an instance of this library.\ndata Lib term =\n Lib\n  { -- | An implementation of GenerateAssetEntropy from Element's @issuance.cpp@.\n    calculateIssuanceEntropy :: term ((Hash, Word32), Hash) Hash\n\n    -- | An implementation of CalculateAsset from Element's @issuance.cpp@.\n  , calculateAsset :: term Hash Hash\n\n    -- | An implementation of CalculateReissuanceToken for explicit values from Element's @issuance.cpp@.\n  , calculateExplicitToken :: term Hash Hash\n\n    -- | An implementation of CalculateReissuanceToken for confidential values from Element's @issuance.cpp@.\n  , calculateConfidentialToken :: term Hash Hash\n\n    -- | Compute a Simplicity tapleaf hash from a CMR.\n  , buildTapleafSimplicity :: term Hash Hash\n\n    -- | Compute a tapbranch hash from two branches.\n  , buildTapbranch :: term (Hash, Hash) Hash\n\n    -- | Return Liquid's (explicit) asset id for l-btc.\n  , lbtcAsset :: term () Hash\n  }\n\n-- | A collection of Simplicity with Assertions expressions for Elements calculations.\n-- Use 'mkLibAssert' to construct an instance of this library.\ndata LibAssert term =\n LibAssert\n  { -- | A hash of an optional parent genesis hash and an outpoint.\n    outpointHash :: term (Ctx8, (S Word256, (Word256, Word32))) Ctx8\n    -- | A hash of a confidential asset and amount.\n  , assetAmountHash :: term (Ctx8, (Conf Word256, Conf Word64)) Ctx8\n    -- | A hash of an optional nonce.\n  , nonceHash :: term (Ctx8, S (Conf Word256)) Ctx8\n    -- | A hash of an optional hash.\n  , annexHash :: term (Ctx8, S Word256) Ctx8\n    -- | Compute a taptweak hash from a pubkey and a hash.\n  , buildTaptweak :: term (PubKey, Hash) PubKey\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    { calculateIssuanceEntropy = m calculateIssuanceEntropy\n    , calculateAsset = m calculateAsset\n    , calculateExplicitToken = m calculateExplicitToken\n    , calculateConfidentialToken = m calculateConfidentialToken\n    , buildTapleafSimplicity = m buildTapleafSimplicity\n    , buildTapbranch = m buildTapbranch\n    , lbtcAsset = m lbtcAsset\n    }\n\ninstance SimplicityFunctor LibAssert where\n  sfmap m LibAssert{..} =\n   LibAssert\n    { outpointHash = m outpointHash\n    , assetAmountHash = m assetAmountHash\n    , nonceHash = m nonceHash\n    , annexHash = m annexHash\n    , buildTaptweak = m buildTaptweak\n    }\n\n-- | Build the Elements 'Lib' library from its dependencies.\nmkLib :: forall term. Core term => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                -> Lib term\nmkLib Sha256.Lib{..} = lib\n where\n  lib@Lib{..} = Lib {\n    calculateIssuanceEntropy = (unit >>> iv) &&& (take opHash &&& ih) >>> hashBlock\n\n  , calculateAsset = (unit >>> iv) &&& (iden &&& (unit >>> zero word256)) >>> hashBlock\n\n  , calculateExplicitToken = (unit >>> iv) &&& (iden &&& (unit >>> scribe (toWord256 (2^248)))) >>> hashBlock\n\n  , calculateConfidentialToken = (unit >>> iv) &&& (iden &&& (unit >>> scribe (toWord256 (2*2^248)))) >>> hashBlock\n  , buildTapleafSimplicity = (unit >>> tapleafPrefix)\n                         &&& ((unit >>> (simplicityVersion &&& scribe (toWord8 32))) &&& iden >>> full_shift word16 word256 >>>\n                              (oh &&& ((((ih &&& (unit >>> scribe (toWord16 0x8000))) &&& (unit >>> zero word32)) &&& (unit >>> zero word64)) &&& (unit >>> scribe (toWord128 (512+16+256))))))\n                         >>> hashBlock\n  , buildTapbranch = ((unit >>> tapbranchPrefix)\n                 &&& (lt word256 &&& iden >>> cond iden (ih &&& oh))\n                 >>> hashBlock)\n                 &&& (unit >>> scribe (toWord512 $ 2^511 + 1024)) >>> hashBlock\n  , lbtcAsset = scribe (toWord256 (integerHash256 (review (over le256) 0x6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d)))\n  } where\n    tapleafPrefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ fromString \"TapLeaf/elements\"\n    tapbranchPrefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ fromString \"TapBranch/elements\"\n    simplicityVersion = scribe . toWord8 $ 0xbe\n    opHash :: term (Hash, Word32) Hash\n    opHash = (unit >>> iv)\n         &&& (((unit >>> iv) &&& (oh &&& (((drop (drop (ih &&& oh) &&& take (ih &&& oh)) &&& scribe (toWord32 (2^31))) &&& (unit >>> zero word64)) &&& (unit >>> scribe (toWord128 (256+32))))) >>> hashBlock)\n          &&& (unit >>> scribe (toWord256 (2^255 + 256)))) >>> hashBlock\n\n-- | An instance of the Elements 'Lib' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLib' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlib :: Core term => Lib term\nlib = mkLib Sha256.lib\n\n-- | Build the Elements 'LibAssert' library.\nmkLibAssert :: forall term. Assert term => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                        -> Sha256.LibAssert term -- ^ \"Simplicity.Programs.Sha256\"\n                                        -> LibSecp256k1.Lib term -- ^ \"Simplicity.Programs.Libsecp256k1\"\n                                        -> LibAssert term\nmkLibAssert Sha256.Lib{..} Sha256.LibAssert{..} LibSecp256k1.Lib{..} = libAssert\n where\n  libAssert@LibAssert{..} = LibAssert {\n    outpointHash = ((oh &&& ioh >>> annexHash) &&& iioh >>> ctx8Add32) &&& iiih >>> ctx8Add4\n  , assetAmountHash = (oh &&& ioh >>> assetHash) &&& iih >>> amountHash\n  , nonceHash = ih &&& oh\n            >>> match (ih &&& take (zero word8) >>> ctx8Add1)\n                (ih &&& take (copair (take (copair (scribe (toWord8 0x02)) (scribe (toWord8 0x03))) &&& ih) ((unit >>> scribe (toWord8 0x01)) &&& iden))\n                 >>> (oh &&& ioh >>> ctx8Add1) &&& iih >>> ctx8Add32)\n  , annexHash = ih &&& oh\n            >>> match (ih &&& take (zero word8) >>> ctx8Add1)\n                      ((ih &&& (unit >>> scribe (toWord8 0x01)) >>> ctx8Add1) &&& oh >>> ctx8Add32)\n  , buildTaptweak = assert (\n                  (((assert (oh &&& (unit >>> scribe (toWord256 fieldOrder)) >>> lt256) >>> taptweakPrefix) &&& iden >>> hashBlock)\n                &&& (unit >>> scribe (toWord512 $ 2^511 + 1024)) >>> hashBlock >>>\n                   (assert (iden &&& (unit >>> scribe (toWord256 groupOrder)) >>> lt256) &&& iden) >>> drop generate)\n                &&& assert ((unit >>> false) &&& oh >>> decompress)\n                >>> gej_ge_add >>> gej_normalize) >>> oh\n  } where\n    lt256 = lt word256\n    ctx8Add32 = ctx8Addn vector32\n    ctx8Add8 = ctx8Addn vector8\n    ctx8Add4 = ctx8Addn vector4\n    assetHash = oh &&& drop (copair (take (copair (scribe (toWord8 0x0a)) (scribe (toWord8 0x0b))) &&& ih) ((unit >>> scribe (toWord8 0x01)) &&& iden))\n            >>> (oh &&& ioh >>> ctx8Add1) &&& iih >>> ctx8Add32\n    amountHash = ih &&& oh\n             >>> match ((ih &&& take (take (copair (scribe (toWord8 0x08)) (scribe (toWord8 0x09)))) >>> ctx8Add1) &&& oih >>> ctx8Add32)\n                       ((ih &&& (unit >>> scribe (toWord8 0x01)) >>> ctx8Add1) &&& oh >>> ctx8Add8)\n    taptweakPrefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ fromString \"TapTweak/elements\"\n\n-- | An instance of the Elements 'LibAssert' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLibAssert' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlibAssert :: Assert term => LibAssert term\nlibAssert = mkLibAssert Sha256.lib Sha256.libAssert LibSecp256k1.lib\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Generic.hs",
    "content": "{-# LANGUAGE GADTs #-}\n-- | This module is a collection of Simplicity expressions that are generic over a collection of Simplicity types.\n-- 'TyReflect'ion is used to analyse the Simplicity type of arguments and generate different Simplicity expressions based on the required types.\nmodule Simplicity.Programs.Generic\n  ( scribe\n  , eq\n  ) where\n\nimport Prelude hiding (drop, take)\n\nimport Simplicity.Programs.Bit\nimport Simplicity.Term.Core\n\n-- | For any Simplicity value, a Simplicity expression for a constant function returning that value.\n--\n-- @'scribe' v _ = v@\nscribe :: (Core term, TyC a, TyC b) => b -> term a b\nscribe = go reify\n where\n  go :: (Core term, TyC a, TyC b) => TyReflect b -> b -> term a b\n  go OneR          ()        = unit\n  go (SumR l _)    (Left v)  = injl (go l v)\n  go (SumR _ r)    (Right v) = injr (go r v)\n  go (ProdR b1 b2) (v1, v2)  = pair (go b1 v1) (go b2 v2)\n\n-- | Simplicity expression to compare a pair of inputs for equality.\neq :: (Core term, TyC a) => term (a, a) Bit\neq = go reify\n where\n  go :: (TyC a, Core term) => TyReflect a -> term (a, a) Bit\n  go OneR          = true\n  go (SumR l r)    = match (swapP >>> match (go l) false)\n                           (swapP >>> match false (go r))\n  go (ProdR a1 a2) = pair (pair (take (take iden)) (drop (take iden)) >>> (go a1))\n                          (pair (take (drop iden)) (drop (drop iden)))\n                     >>> cond (go a2) false\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/LibSecp256k1/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Programs.LibSecp256k1.lib' library instance into individual functions.\n-- Users should prefer to use 'Simplicity.Programs.LibSecp256k1.mkLib' in order to share library dependencies.\n-- This module is provided mostly for testing purposes.\nmodule Simplicity.Programs.LibSecp256k1.Lib\n  (\n  -- * Field operations\n    LibSecp256k1.FE, fe_zero, fe_one, fe_is_zero\n  , fe_normalize\n  , fe_add, fe_negate, fe_halve, fe_square, fe_multiply, fe_multiply_beta, fe_invert, fe_square_root\n  , fe_is_odd, fe_is_quad\n  -- * Point operations\n  , LibSecp256k1.Point, LibSecp256k1.GE, LibSecp256k1.GEJ, gej_is_on_curve\n  , gej_infinity, gej_is_infinity\n  , gej_rescale, gej_normalize, gej_negate, gej_scale_lambda\n  , gej_double, gej_add_ex, gej_add, gej_ge_add_ex, gej_ge_add\n  , ge_is_on_curve, ge_negate, ge_scale_lambda\n  , gej_equiv, gej_ge_equiv, gej_x_equiv, gej_y_is_odd\n  , decompress\n  -- * Scalar operations\n  , LibSecp256k1.Scalar, LibSecp256k1.Word129\n  , scalar_normalize, scalar_add, scalar_negate, scalar_square, scalar_multiply, scalar_multiply_lambda, scalar_invert\n  , scalar_split_lambda, scalar_split_128\n  , scalar_is_zero\n  -- * Elliptic curve multiplication related operations\n  , LibSecp256k1.Vector129\n  , wnaf5, wnaf15\n  , generate, scale\n  , linear_combination_1, linear_check_1, linear_verify_1\n  , point_check_1, point_verify_1\n  , off_curve_scale, off_curve_linear_combination_1\n  -- * Schnorr signature operations\n  , LibSecp256k1.PubKey, pubkey_unpack, pubkey_unpack_neg\n  , LibSecp256k1.Sig, signature_unpack\n  , bip_0340_check, bip_0340_verify\n  , swu, hash_to_curve\n  ) where\n\nimport qualified Simplicity.Programs.LibSecp256k1 as LibSecp256k1\n\n-- Maybe this ought to be Template Haskell.\nfe_zero = LibSecp256k1.fe_zero LibSecp256k1.lib\nfe_one = LibSecp256k1.fe_one LibSecp256k1.lib\nfe_is_zero = LibSecp256k1.fe_is_zero LibSecp256k1.lib\nfe_normalize = LibSecp256k1.fe_normalize LibSecp256k1.lib\nfe_add = LibSecp256k1.fe_add LibSecp256k1.lib\nfe_negate = LibSecp256k1.fe_negate LibSecp256k1.lib\nfe_halve = LibSecp256k1.fe_halve LibSecp256k1.lib\nfe_square = LibSecp256k1.fe_square LibSecp256k1.lib\nfe_multiply = LibSecp256k1.fe_multiply LibSecp256k1.lib\nfe_multiply_beta = LibSecp256k1.fe_multiply_beta LibSecp256k1.lib\nfe_invert = LibSecp256k1.fe_invert LibSecp256k1.lib\nfe_square_root = LibSecp256k1.fe_square_root LibSecp256k1.lib\nfe_is_odd = LibSecp256k1.fe_is_odd LibSecp256k1.lib\nfe_is_quad = LibSecp256k1.fe_is_quad LibSecp256k1.lib\ngej_is_on_curve = LibSecp256k1.gej_is_on_curve LibSecp256k1.lib\ngej_infinity = LibSecp256k1.gej_infinity LibSecp256k1.lib\ngej_is_infinity = LibSecp256k1.gej_is_infinity LibSecp256k1.lib\ngej_rescale = LibSecp256k1.gej_rescale LibSecp256k1.lib\ngej_normalize = LibSecp256k1.gej_normalize LibSecp256k1.lib\ngej_negate = LibSecp256k1.gej_negate LibSecp256k1.lib\ngej_scale_lambda = LibSecp256k1.gej_scale_lambda LibSecp256k1.lib\ngej_double = LibSecp256k1.gej_double LibSecp256k1.lib\ngej_add_ex = LibSecp256k1.gej_add_ex LibSecp256k1.lib\ngej_add = LibSecp256k1.gej_add LibSecp256k1.lib\ngej_ge_add_ex = LibSecp256k1.gej_ge_add_ex LibSecp256k1.lib\ngej_ge_add = LibSecp256k1.gej_ge_add LibSecp256k1.lib\nge_is_on_curve = LibSecp256k1.ge_is_on_curve LibSecp256k1.lib\nge_negate = LibSecp256k1.ge_negate LibSecp256k1.lib\nge_scale_lambda = LibSecp256k1.ge_scale_lambda LibSecp256k1.lib\ngej_equiv = LibSecp256k1.gej_equiv LibSecp256k1.lib\ngej_ge_equiv = LibSecp256k1.gej_ge_equiv LibSecp256k1.lib\ngej_x_equiv = LibSecp256k1.gej_x_equiv LibSecp256k1.lib\ngej_y_is_odd = LibSecp256k1.gej_y_is_odd LibSecp256k1.lib\nscalar_normalize = LibSecp256k1.scalar_normalize LibSecp256k1.lib\nscalar_add = LibSecp256k1.scalar_add LibSecp256k1.lib\nscalar_negate = LibSecp256k1.scalar_negate LibSecp256k1.lib\nscalar_square = LibSecp256k1.scalar_square LibSecp256k1.lib\nscalar_multiply = LibSecp256k1.scalar_multiply LibSecp256k1.lib\nscalar_multiply_lambda = LibSecp256k1.scalar_multiply_lambda LibSecp256k1.lib\nscalar_invert = LibSecp256k1.scalar_invert LibSecp256k1.lib\nscalar_split_lambda = LibSecp256k1.scalar_split_lambda LibSecp256k1.lib\nscalar_split_128 = LibSecp256k1.scalar_split_128 LibSecp256k1.lib\nscalar_is_zero = LibSecp256k1.scalar_is_zero LibSecp256k1.lib\nwnaf5 = LibSecp256k1.wnaf5 LibSecp256k1.lib\nwnaf15 = LibSecp256k1.wnaf15 LibSecp256k1.lib\ngenerate = LibSecp256k1.generate LibSecp256k1.lib\nscale = LibSecp256k1.scale LibSecp256k1.lib\noff_curve_scale = LibSecp256k1.off_curve_scale LibSecp256k1.lib\nlinear_combination_1 = LibSecp256k1.linear_combination_1 LibSecp256k1.lib\noff_curve_linear_combination_1 = LibSecp256k1.off_curve_linear_combination_1 LibSecp256k1.lib\nlinear_check_1 = LibSecp256k1.linear_check_1 LibSecp256k1.lib\nlinear_verify_1 = LibSecp256k1.linear_verify_1 LibSecp256k1.lib\ndecompress = LibSecp256k1.decompress LibSecp256k1.lib\npoint_check_1 = LibSecp256k1.point_check_1 LibSecp256k1.lib\npoint_verify_1 = LibSecp256k1.point_verify_1 LibSecp256k1.lib\npubkey_unpack = LibSecp256k1.pubkey_unpack LibSecp256k1.lib\npubkey_unpack_neg = LibSecp256k1.pubkey_unpack_neg LibSecp256k1.lib\nsignature_unpack = LibSecp256k1.signature_unpack LibSecp256k1.lib\nbip_0340_check = LibSecp256k1.bip_0340_check LibSecp256k1.lib\nbip_0340_verify = LibSecp256k1.bip_0340_verify LibSecp256k1.lib\nswu = LibSecp256k1.swu LibSecp256k1.lib\nhash_to_curve = LibSecp256k1.hash_to_curve LibSecp256k1.lib\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/LibSecp256k1.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines a library of Simplicity expressions that replicate the functional behaviour of (a specific version of) libsecp256k1's elliptic curve operations <https://github.com/bitcoin-core/secp256k1/tree/v0.3.0>.\n-- The functions defined here return precisely the same field and point representatives that the corresponding libsecp256k1's functions do, with a few exceptions with the way the point at infinity is handled.\n-- This makes these expressions suitable for being jetted by using libsecp256k1 functions.\nmodule Simplicity.Programs.LibSecp256k1\n  (\n    Lib(Lib), mkLib\n  -- * Field operations\n  , FE, fe_zero, fe_one, fe_is_zero\n  , fe_normalize\n  , fe_add, fe_negate, fe_halve, fe_square, fe_multiply, fe_multiply_beta, fe_invert, fe_square_root\n  , fe_is_odd, fe_is_quad\n  -- * Point operations\n  , Point, GE, GEJ, gej_is_on_curve\n  , gej_infinity, gej_is_infinity\n  , gej_rescale, gej_normalize, gej_negate, gej_scale_lambda\n  , gej_double, gej_add_ex, gej_add, gej_ge_add_ex, gej_ge_add\n  , ge_is_on_curve, ge_negate, ge_scale_lambda\n  , gej_equiv, gej_ge_equiv, gej_x_equiv, gej_y_is_odd\n  , decompress\n  -- * Scalar operations\n  , Scalar, Word129\n  , scalar_normalize, scalar_add, scalar_negate, scalar_square, scalar_multiply, scalar_multiply_lambda, scalar_invert\n  , scalar_split_lambda, scalar_split_128\n  , scalar_is_zero\n  -- * Elliptic curve multiplication related operations\n  , Vector129\n  , wnaf5, wnaf15\n  , generate, scale\n  , linear_combination_1, linear_check_1, linear_verify_1\n  , point_check_1, point_verify_1\n  , off_curve_scale, off_curve_linear_combination_1\n  -- * Schnorr signature operations\n  , PubKey, pubkey_unpack, pubkey_unpack_neg\n  , Sig, signature_unpack\n  , bip_0340_check, bip_0340_verify\n  -- * Hash to curve\n  , swu, hash_to_curve\n  -- * Example instances\n  , lib\n  ) where\n\nimport Prelude hiding (drop, take, and, or, not, Word)\nimport Data.List (foldl')\n\nimport Simplicity.Digest\nimport Simplicity.Functor\nimport qualified Simplicity.LibSecp256k1.Spec as LibSecp256k1\nimport Simplicity.MerkleRoot\nimport qualified Simplicity.Programs.Arith as Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Word\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Programs.Sha256 hiding (Lib(Lib), lib)\nimport Simplicity.Ty\nimport Simplicity.Ty.LibSecp256k1\nimport Simplicity.Term.Core\n\n-- | 129 entry vector of values.\ntype Vector129 x = (x, Vector128 x)\n\n-- | 129-bit signed word that is returned by 'scalar_split_lambda' and 'scalar_split_128'.\ntype Word129 = Vector129 Bit\n\n-- | A collection of core Simplicity expressions for LibSecp256k1.\n-- Use 'mkLib' to construct an instance of this library.\ndata Lib term =\n Lib\n  { -- | Reduce the representation of a field element to its canonical representative.\n    fe_normalize :: term Word256 FE\n\n    -- | The normalized reprsentative for the field element 0.\n  , fe_zero :: term () FE\n\n    -- | The normalized reprsentative for the field element 1.\n  , fe_one :: term () FE\n\n    -- | Tests if the input value is a representative of the field element 0.\n  , fe_is_zero :: term FE Bit\n\n    -- | Adds two field elements.\n  , fe_add :: term (FE, FE) FE\n\n    -- | Negates a field element.\n  , fe_negate :: term FE FE\n\n    -- | Halves a field element.\n  , fe_halve :: term FE FE\n\n    -- | Multiplies two field elements.\n  , fe_multiply :: term (FE, FE) FE\n\n    -- | Multiplies a field element by the canonical primitive cube root of unity.\n  , fe_multiply_beta :: term FE FE\n\n    -- | Squares a field element.\n  , fe_square :: term FE FE\n\n    -- | Computes the modular inverse of a field element.\n  , fe_invert :: term FE FE\n\n    -- | Computes the modular square root of a field element if it exists.\n  , fe_square_root :: term FE (Either () FE)\n\n    -- | Tests if the canonical representative of the field element is odd.\n  , fe_is_odd :: term FE Bit\n\n    -- | Tests if the field element is a quadratic residue.\n  , fe_is_quad :: term FE Bit\n\n    -- | Returns the canonical representative of the point at infinity.\n  , gej_infinity :: term () GEJ\n\n    -- | Computes the negation of a point.\n  , gej_negate :: term GEJ GEJ\n\n    -- | Tests if the point is a representative of infinity.\n  , gej_is_infinity :: term GEJ Bit\n\n    -- | Doubles a point.\n    -- If the result is the point at infinity, it is returned in canonical form.\n  , gej_double :: term GEJ GEJ\n\n    -- | Adds points 'a' and 'b'.\n    -- Also returns the ratio of 'a''s z-coordinate and the result's z-coordinate.\n    --\n    -- If the result is the point at infinity, it is returned in canonical form.\n  , gej_add_ex :: term (GEJ, GEJ) (FE, GEJ)\n\n    -- | Adds points 'a' and 'b'.\n  , gej_add :: term (GEJ, GEJ) GEJ\n\n    -- | Adds a point 'a' in Jacobian coordinates with a point 'b' in affine coordinates.\n    -- Also returns the ratio of 'a''s z-coordinate and the result's z-coordinate.\n    --\n    -- If the result is the point at infinity, it is returned in canonical form.\n  , gej_ge_add_ex :: term (GEJ, GE) (FE, GEJ)\n\n    -- | Adds a point in Jacobian coordinates with a point in affine coordinates.\n    --\n    -- If the result is the point at infinity, it is returned in canonical form.\n  , gej_ge_add :: term (GEJ, GE) GEJ\n\n    -- | Multiply a point by the canonical cube root of unity.\n  , gej_scale_lambda :: term GEJ GEJ\n\n    -- | Negates a point in affine coordinates.\n  , ge_negate :: term GE GE\n\n    -- | Multiply a point in affine coordinates by the canonical cube root of unity.\n  , ge_scale_lambda :: term GE GE\n\n    -- | Changes representative of a point in Jacobian coordinates by multiplying the z-coefficent by a given value.\n  , gej_rescale :: term (GEJ, FE) GEJ\n\n    -- | Converts a point in Jacobian coordinates to the same point in affine coordinates, and normalizes the field representatives.\n    -- Returns the point (0, 0) when given the point at infinity.\n  , gej_normalize :: term GEJ (Either () GE)\n\n    -- | Tests if two points in jacobian coordinates represent the same point.\n  , gej_equiv :: term (GEJ, GEJ) Bit\n\n    -- | Tests if a jacobian point and an affine point represent the same point.\n  , gej_ge_equiv :: term (GEJ, GE) Bit\n\n    -- | Given a field element and a point in Jacobian coordinates, test if the point represents one whose affine x-coordinate is equal to the given field element.\n  , gej_x_equiv :: term (FE, GEJ) Bit\n\n    -- | Given a point in Jacobian coordinates, test if the point represents one whose affine y-coordinate is odd.\n  , gej_y_is_odd :: term GEJ Bit\n\n    -- | Check if a given point in Jacobian coordinate satisfies the secp256k1 curve equation Y^2 = X^3 + 7Z^6.\n  , gej_is_on_curve :: term GEJ Bit\n\n    -- | Check if a given point in affine coordinate satisfies the secp256k1 curve equation Y^2 = X^3 + 7.\n  , ge_is_on_curve :: term GE Bit\n\n    -- | Reduce the representation of a scalar element to its canonical representative.\n  , scalar_normalize :: term Word256 Scalar\n\n    -- | Tests if the input value is a representative of the scalar element 0.\n  , scalar_is_zero :: term Scalar Bit\n\n    -- | Adds two scalar elements.\n  , scalar_add :: term (Scalar, Scalar) Scalar\n\n    -- | Negates a scalar element.\n  , scalar_negate :: term Scalar Scalar\n\n    -- | Multiplies two scalar elements.\n  , scalar_square :: term Scalar Scalar\n\n    -- | Multiplies two scalar elements.\n  , scalar_multiply :: term (Scalar, Scalar) Scalar\n\n    -- | Multiplies a scalar element by the canonical primitive cube root of unity.\n  , scalar_multiply_lambda :: term Scalar Scalar\n\n    -- | Computes the modular inverse of a scalar element.\n  , scalar_invert :: term Scalar Scalar\n\n    -- | Divide a scalar element into two short integers 'k1' and 'k2' such that @'k1' + 'k2' * 'Simplicity.LibSecp256k1.Spec.lambda'@ is the original scalar element.\n  , scalar_split_lambda :: term Scalar (Word129, Word129)\n\n    -- | Divide a scalar element into two short integers 'k1' and 'k2' such that @'k1' + 'k2' * 2^128@ is the original scalar element.\n  , scalar_split_128 :: term Scalar (Word129, Word129)\n\n    -- | Convert a scalar value to wnaf form, with a window of 5 bits.\n  , wnaf5 :: term Word129 (Vector129 (Either () Word4))\n\n    -- | Convert a scalar value to wnaf form, with a window of 15 bits.\n  , wnaf15 :: term Word129 (Vector129 (Either () Word16))\n\n    -- | Returns a multiple of the secp256k1's generator.\n  , generate :: term Scalar GEJ\n\n    -- | Multiply a point by a scalar element.\n  , off_curve_scale :: term (Scalar, GEJ) GEJ\n\n    -- | Given an elliptic curve point, @a@, and two scalar values @na@ and @ng@, return @na * a + ng * g@ where @g@ is secp256k1's generator.\n    -- If the result is the point at infinity, it is returned in canonical form.\n  , off_curve_linear_combination_1 :: term ((Scalar, GEJ), Scalar) GEJ\n\n    -- | Verifies that all points are on the secp256k1 curve and checks if @na * a + ng * g == r@ on the input @(((na, a), ng), r)@ where @g@ is secp256k1's generator.\n  , linear_check_1 :: term (((Scalar, GE), Scalar), GE) Bit\n\n    -- | Decompress a compressed point into affine coordinates.  Fails if the x-coordinate is no on the secp256k1, but it will succeed even if the x-coordinate is not normalized.\n  , decompress :: term Point (Either () GE)\n\n    -- | Decompresses and verifies that all points are on the secp256k1 curve as 'linear_check_1' does.\n    -- This will fail if either point decompression fails or if the 'linear_check_1' would fail.\n  , point_check_1 :: term (((Scalar, Point), Scalar), Point) Bit\n\n    -- | This function unpacks a 'PubKey' as a elliptic curve point in compressed coordinates.\n    --\n    -- If the x-coordinate isn't on the elliptice curve, the function returns @Left ()@.\n    -- This does not check that the x-coordinate in on-curve.  That would have to be performed by `decompress`.\n  , pubkey_unpack :: term PubKey (Either () Point)\n\n    -- | This function unpacks the negation of a 'PubKey' as a elliptic curve point in compressed coordinates.\n    --\n    -- If the x-coordinate isn't on the elliptice curve, the function returns @Left ()@.\n    -- This does not check that the x-coordinate in on-curve.  That would have to be performed by `decompress`.\n  , pubkey_unpack_neg :: term PubKey (Either () Point)\n\n    -- | This function unpackes a 'Sig' as a pair of a field element and a scalar value.\n    --\n    -- If the field element's value is greater than or equal to the field order, the function return @Left ()@.\n    -- If the scalar element's value is greater than or equal to secp256k1's curve order, the function returns @Left ()@.\n  , signature_unpack :: term Sig (Either () (FE, Scalar))\n\n    -- | This function is given a public key, a 256-bit message, and a signature, and checks if the signature is valid for the given message and public key.\n  , bip_0340_check :: term ((PubKey, Word256), Sig) Bit\n    -- | Algebraically distribute a field element over the secp256k1 curve as defined in\n    -- \"Indifferentiable Hashing to Barreto-Naehrig Curves\" by Pierre-Alain Fouque, Mehdi Tibouchi\n    -- <https://inria.hal.science/hal-01094321/file/FT12.pdf>\n    --\n    -- While this by iteslf is not a cryptographic hash function, it can be used as a subrotuine\n    -- in a 'hash_to_curve' function.  However the distribution only approaches uniform when it is called twice.\n  , swu :: term FE GE\n    -- | A cryptograph hash function that results in a point on the secp256k1 curve.\n    --\n    -- This matches the hash function used to map asset IDs to asset commitments.\n    --\n    -- This version explicitly fails the the cryptographically impossible cases where sha-256 produces a value larger than the field size.\n    -- See 'hash_to_curve' for the version that 'asserts' in this failure case.\n  , hash_to_curve_core :: term Word256 (Either () GE)\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    { fe_normalize = m fe_normalize\n    , fe_zero = m fe_zero\n    , fe_one = m fe_one\n    , fe_is_zero = m fe_is_zero\n    , fe_is_odd = m fe_is_odd\n    , fe_add = m fe_add\n    , fe_negate = m fe_negate\n    , fe_halve = m fe_halve\n    , fe_multiply = m fe_multiply\n    , fe_multiply_beta = m fe_multiply_beta\n    , fe_square = m fe_square\n    , fe_invert = m fe_invert\n    , fe_square_root = m fe_square_root\n    , fe_is_quad = m fe_is_quad\n    , gej_infinity = m gej_infinity\n    , gej_negate = m gej_negate\n    , gej_is_infinity = m gej_is_infinity\n    , gej_double = m gej_double\n    , gej_add_ex = m gej_add_ex\n    , gej_add = m gej_add\n    , gej_ge_add_ex = m gej_ge_add_ex\n    , gej_ge_add = m gej_ge_add\n    , gej_scale_lambda = m gej_scale_lambda\n    , ge_negate = m ge_negate\n    , ge_scale_lambda = m ge_scale_lambda\n    , gej_rescale = m gej_rescale\n    , gej_normalize = m gej_normalize\n    , gej_equiv = m gej_equiv\n    , gej_ge_equiv = m gej_ge_equiv\n    , gej_x_equiv = m gej_x_equiv\n    , gej_y_is_odd = m gej_y_is_odd\n    , gej_is_on_curve = m gej_is_on_curve\n    , ge_is_on_curve = m ge_is_on_curve\n    , scalar_normalize = m scalar_normalize\n    , scalar_is_zero = m scalar_is_zero\n    , scalar_add = m scalar_add\n    , scalar_negate = m scalar_negate\n    , scalar_square = m scalar_square\n    , scalar_multiply = m scalar_multiply\n    , scalar_multiply_lambda = m scalar_multiply_lambda\n    , scalar_invert = m scalar_invert\n    , scalar_split_lambda = m scalar_split_lambda\n    , scalar_split_128 = m scalar_split_128\n    , wnaf5 = m wnaf5\n    , wnaf15 = m wnaf15\n    , generate = m generate\n    , off_curve_scale = m off_curve_scale\n    , off_curve_linear_combination_1 = m off_curve_linear_combination_1\n    , linear_check_1 = m linear_check_1\n    , decompress = m decompress\n    , point_check_1 = m point_check_1\n    , pubkey_unpack = m pubkey_unpack\n    , pubkey_unpack_neg = m pubkey_unpack_neg\n    , signature_unpack = m signature_unpack\n    , bip_0340_check = m bip_0340_check\n    , swu = m swu\n    , hash_to_curve_core = m hash_to_curve_core\n    }\n\n-- | Build the LibSecp256k1 'Lib' library from its dependencies.\nmkLib :: forall term. Core term => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                -> Lib term\nmkLib Sha256.Lib{..} = lib\n where\n  -- A constant expression for a 64-bit value.\n  scribe64 :: TyC a => Integer -> term a Word64\n  scribe64 = scribe . toWord64\n\n  -- A constant expression for a 128-bit value.\n  scribe128 :: TyC a => Integer -> term a Word128\n  scribe128 = scribe . toWord128\n\n  -- A constant expression for a 256-bit value.\n  scribe256 :: TyC a => Integer -> term a Word256\n  scribe256 = scribe . toWord256\n\n  scribeFeOrder :: term () Word256\n  scribeFeOrder = scribe256 LibSecp256k1.fieldOrder\n\n  scribeFeHalf :: term () Word256\n  scribeFeHalf = scribe256 ((LibSecp256k1.fieldOrder + 1) `div` 2)\n\n  scribeGroupOrder :: term () Word256\n  scribeGroupOrder = scribe256 LibSecp256k1.groupOrder\n\n  scribeGroupOrder512 :: term () Word512\n  scribeGroupOrder512 = zero256 &&& scribeGroupOrder\n\n  fe_beta :: term () FE\n  fe_beta = scribe256 LibSecp256k1.beta\n\n  scalar_lambda :: term () Scalar\n  scalar_lambda = scribe256 LibSecp256k1.lambda\n\n  -- 256 bit addition.\n  add256 :: term (Word256, Word256) (Bit, Word256)\n  add256 = Arith.add word256\n\n  -- 256 bit subtraction.\n  sub256 :: term (Word256, Word256) (Bit, Word256)\n  sub256 = Arith.subtract word256\n\n  sub128 = Arith.subtract word128\n\n  -- Multiplication modulo 2^64.\n  mul64 :: term (Word64, Word64) Word128\n  mul64 = Arith.multiply word64\n\n  mul128 = Arith.multiply word128\n  mul256 = Arith.multiply word256\n\n  -- 256 bit less-than\n  lt256 = Arith.lt word256\n\n  -- 128 bit zero.\n  zero128 = Arith.zero word128\n\n  -- 256 bit zero.\n  zero256 = Arith.zero word256\n\n  -- 256 bit one.\n  one256 = Arith.one word256\n\n  msb256 = Arith.msb word256\n  msb128 = Arith.msb word128\n\n  lsb256 = Arith.lsb word256\n  lsb128 = Arith.lsb word128\n\n  mod512 = Arith.modulo word512\n\n  -- | computes a 512 bit number modulo the field order.\n  fe_normalize512 :: term Word512 FE\n  fe_normalize512 = iden &&& (unit >>> zero256 &&& scribeFeOrder) >>> mod512 >>> ih\n\n  -- | computes a 512 bit number modulo the group order.\n  scalar_normalize512 :: term Word512 FE\n  scalar_normalize512 = iden &&& (unit >>> zero256 &&& scribeGroupOrder) >>> mod512 >>> ih\n\n  signResize4 = left_extend word4 (DoubleV . DoubleV . DoubleV . DoubleV . DoubleV $ SingleV)\n  signResize16 = left_extend word16 (DoubleV . DoubleV . DoubleV $ SingleV)\n  fullShift128 = full_shift word1 word128 >>> oh\n  wnafsub128 :: term ((Bit, Word128), Word128) (Bit, Word128)\n  wnafsub128 = xor ooh (drop msb128) &&& (oih &&& ih >>> sub128) >>> xor oh ioh &&& iih\n\n  wnaf5step1 :: term (Bit, Word128) ((Bit, Word128), (Either () Word4))\n  wnaf5step1 = drop lsb128 &&& (oh &&& fullShift128)\n           >>> cond body (iden &&& injl unit)\n   where\n    body = iden &&& (drop . drop . drop $ iiih) >>> (oh &&& drop signResize4 >>> wnafsub128) &&& injr ih\n\n  wnaf15step1 :: term (Bit,Word128) ((Bit,Word128), (Either () Word16))\n  wnaf15step1 = drop lsb128 &&& iden\n            >>> cond body ((oh &&& fullShift128) &&& injl unit)\n   where\n    mask = take (take (take (ih &&& ih) &&& ih) &&& ih) &&& ih\n    body = iden &&& (drop iiih >>> mask)\n       >>> ((ooh &&& take fullShift128) &&& drop (signResize16 >>> msb128 &&& iden >>> fullShift128) >>> wnafsub128)\n       &&& injr ih\n\n  wnafstepD :: (TyC s, TyC v) => term s (s, v) -> term s (s, (v, v))\n  wnafstepD rec = rec >>> take rec &&& ih >>> ooh &&& (oih &&& ih)\n\n  wnaf5step16 = wnafstepD . wnafstepD . wnafstepD . wnafstepD $ wnaf5step1\n  wnaf5step128 = wnafstepD . wnafstepD . wnafstepD $ wnaf5step16\n  wnaf15step16 = wnafstepD . wnafstepD . wnafstepD . wnafstepD $ wnaf15step1\n  wnaf15step128 = wnafstepD . wnafstepD . wnafstepD $ wnaf15step16\n\n  wnafpre :: term Scalar Word256\n  wnafpre = msb256 &&& iden\n        >>> cond (iden &&& (unit >>> scribeGroupOrder) >>> sub256 >>> ih) iden\n\n  generate0 :: term () GE\n  generate0 = scribe g\n   where\n     g = (toWord256 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798, toWord256 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)\n\n  -- 2^128 * generate0\n  generate128 :: term () GE\n  generate128 = scribe g128\n   where\n     g128 = (toWord256 0x8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da, toWord256 0x662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82)\n\n  scaleConstant :: term () GE -> Word a -> term (a, GEJ) GEJ\n  scaleConstant base = go\n   where\n    go :: Word a -> term (a, GEJ) GEJ\n    go SingleV = cond (gej_double &&& (unit >>> base) >>> gej_ge_add) gej_double\n    go (DoubleV w) = oih &&& (ooh &&& ih >>> rec) >>> rec\n     where\n      rec = go w\n\n  lib@Lib{..} = Lib {\n    fe_normalize = (iden &&& (unit >>> scribeFeOrder) >>> sub256) &&& iden\n               >>> ooh &&& (oih &&& ih)\n               >>> cond ih oh\n\n  , fe_zero = zero256\n\n  , fe_one = one256\n\n  , fe_is_zero = or (Arith.is_zero word256)\n                  ((unit >>> scribeFeOrder) &&& iden >>> eq)\n\n  , fe_is_odd = fe_normalize >>> lsb256\n\n  , fe_add = add256 >>> cond ((unit >>> one256) &&& iden) ((unit >>> zero256) &&& iden) >>> fe_normalize512\n\n  , fe_negate = fe_multiplyInt (-1)\n\n  , fe_multiply = mul256 >>> fe_normalize512\n\n  , fe_multiply_beta = (unit >>> fe_beta) &&& iden >>> fe_multiply\n\n  , fe_square = iden &&& iden >>> fe_multiply\n\n  , fe_halve = (false &&& iden) >>> full_shift word1 word256 >>> ih &&& oh\n           >>> cond ((unit >>> scribeFeHalf) &&& iden >>> fe_add) iden\n\n  , fe_invert = (unit >>> scribeFeOrder) &&& iden >>> Arith.bezout word256 >>> copair (drop fe_negate) ih\n\n  , fe_square_root = iden &&& tower\n          >>> oh &&& drop ((oh &&& drop fe_square >>> fe_multiply) >>> fe_square >>> fe_square)\n          >>> (take fe_negate &&& drop fe_square >>> fe_add >>> fe_is_zero) &&& ih\n          >>> cond (injr iden) (injl unit)\n\n  , fe_is_quad = elimS fe_square_root false true\n\n  , gej_infinity =\n     let\n      zero = fe_zero\n     in\n      (zero &&& zero) &&& zero\n\n  , gej_negate = take ge_negate &&& drop fe_normalize\n\n  , gej_is_infinity = drop fe_is_zero\n\n  , gej_double =\n     let\n      body = (take (oh &&& (take fe_square >>> fe_multiplyInt 3 >>> fe_halve) &&& drop fe_square)                      -- (x, (3/2*x^2, y^2))\n          >>> ((iih &&& oh >>> fe_multiply >>> fe_negate) &&& ih)                                                      -- (-x*y^2, (3/2*x^2, y^2))\n          >>> (((take (fe_multiplyInt 2) &&& drop (take fe_square) >>> fe_add) &&& oh) &&& ih)                         -- ((9/4*x^4 - 2*x*y^2, x^2*y^4), (3/2*x^2, y^2))\n          >>> (ooh &&& ((ioh &&& (take fe_add) >>> fe_multiply) &&& drop (drop fe_square) >>> fe_add >>> fe_negate)))  -- (9/4*x^4 - 2*x*y^2, -(3/2*x^2*(9/4*x^4 - 3*x*y^2) + y^4))\n         &&& (oih &&& ih >>> fe_multiply)                                                                              -- y*z\n     in\n      gej_is_infinity &&& iden >>> cond (unit >>> gej_infinity) body\n\n  , gej_add_ex =\n     let\n      body = ((oooh &&& (iih >>> fe_square) >>> fe_multiply) &&& (drop (take (take fe_negate)) &&& (oih >>> fe_square) >>> fe_multiply) >>> fe_add &&& oh)\n         &&& ((ooih  &&& (iih >>> fe_cube) >>> fe_multiply)   &&& (drop (take (drop fe_negate)) &&& (oih >>> fe_cube) >>> fe_multiply) >>> fe_add &&& oh) &&&\n             (oh &&& drop (drop fe_negate))                                                                                                                                     -- ((-h,u1),((-i,s1),(a,-bz))))\n         >>> take (take fe_is_zero) &&& iden >>> cond (drop zeroH) nonZeroH\n      zeroH = take (take fe_is_zero) &&& ioh >>> cond (oih &&& gej_double) (unit >>> fe_zero &&& gej_infinity)\n      nonZeroH = (ooh &&& ((ooh &&& drop ioih >>> fe_multiply) &&& iiih)) &&& ((take (take fe_square) &&& oih >>> fe_multiply) &&& ioh)                                         -- ((-h,(-h*az,-bz)),(t,(i,s1)))\n             >>> ((ooh &&& oiih >>> fe_multiply) &&& take (drop fe_multiply)) &&& (((ooh >>> fe_cube) &&& ioh) &&& iih)                                            -- ((h*bz),z),((-h^3,t),(i,s1)))\n             >>> ooh &&& drop ((((take (oh &&& drop (fe_multiplyInt (-2)) >>> fe_add) &&& drop (take fe_square) >>> fe_add) &&& oih) &&& (ioh &&& (ooh &&& iih >>> fe_multiply)))  -- (h*bz,(((x,t),(i,(-h^3*s1))),z))\n                          >>> ooh &&& (iih &&& (ioh &&& take (oh &&& drop fe_negate >>> fe_add) >>> fe_multiply) >>> fe_add))                                                   -- ..,(x,y),...\n                     &&& oih\n     in\n      take gej_is_infinity &&& iden\n  >>> cond ((unit >>> fe_zero) &&& (drop (take (take fe_normalize &&& drop fe_normalize) &&& (drop fe_normalize))))\n           (drop gej_is_infinity &&& iden\n        >>> cond ((unit >>> fe_one) &&& (take (take (take fe_normalize &&& drop fe_normalize) &&& (drop fe_normalize)))) body)\n\n  , gej_add = gej_add_ex >>> ih\n\n  , gej_ge_add_ex = oh &&& (ih &&& (unit >>> fe_one)) >>> gej_add_ex\n\n  , gej_ge_add = gej_ge_add_ex >>> ih\n\n  , gej_scale_lambda = take ge_scale_lambda &&& drop fe_normalize\n\n  , ge_negate = take fe_normalize &&& drop fe_negate\n\n  , ge_scale_lambda = take fe_multiply_beta &&& drop fe_normalize\n\n  , gej_rescale = (ooh &&& ih >>> zinv) &&& (oih &&& ih >>> fe_multiply)\n\n  , gej_normalize = drop fe_is_zero &&& iden\n                >>> cond (injl unit) (injr gej_norm)\n\n  , gej_equiv = take (gej_negate) &&& ih >>> gej_add >>> gej_is_infinity\n\n  , gej_ge_equiv = take (gej_negate) &&& ih >>> gej_ge_add >>> gej_is_infinity\n\n  , gej_x_equiv = and (not (drop gej_is_infinity))\n                     (drop (take (take fe_negate)) &&& (drop (drop fe_square) &&& oh >>> fe_multiply)\n                  >>> fe_add >>> fe_is_zero)\n\n  , gej_y_is_odd = oih &&& (ih >>> fe_invert >>> fe_cube) >>> fe_multiply >>> fe_is_odd\n\n  , gej_is_on_curve = ((unit >>> scribe256 7) &&& (ih >>> fe_cube >>> fe_square) >>> fe_multiply)\n                  &&& (take (take fe_cube &&& (drop fe_square >>> fe_negate)) >>> fe_add) >>> fe_add\n                  >>> fe_is_zero\n\n  , ge_is_on_curve = iden &&& (unit >>> fe_one) >>> gej_is_on_curve\n\n  , scalar_normalize = (iden &&& (unit >>> scribeGroupOrder) >>> sub256) &&& iden\n                  >>> ooh &&& (oih &&& ih)\n                  >>> cond ih oh\n\n  , scalar_is_zero = or (Arith.is_zero word256)\n                  ((unit >>> scribeGroupOrder) &&& iden >>> eq)\n\n  , scalar_add = add256 >>> cond ((unit >>> one256) &&& iden) ((unit >>> zero256) &&& iden) >>> scalar_normalize512\n\n  , scalar_negate = (unit >>> scribe256 ((-1) `mod` LibSecp256k1.groupOrder)) &&& iden >>> scalar_multiply\n\n  , scalar_square = iden &&& iden >>> scalar_multiply\n\n  , scalar_multiply = mul256 >>> scalar_normalize512\n\n  , scalar_multiply_lambda = (unit >>> scalar_lambda) &&& iden >>> scalar_multiply\n\n  , scalar_invert = (unit >>> scribeGroupOrder) &&& iden >>> Arith.bezout word256 >>> copair (drop scalar_negate) ih\n\n  , scalar_split_lambda = let\n        g1 = scribe256 0x3086d221a7d46bcde86c90e49284eb153daa8a1471e8ca7fe893209a45dbb031\n        g2 = scribe256 0xe4437ed6010e88286f547fa90abfe4c4221208ac9df506c61571b4ae8ac47f71\n        negB1 = scribe128 0xe4437ed6010e88286f547fa90abfe4c3\n        b2 = scribe128 0x3086d221a7d46bcde86c90e49284eb15\n        roundDivTwo384 = take (drop (Arith.msb word128) &&& oh >>> Arith.full_increment word128) >>> ih\n        c1 = ((iden &&& (unit >>> g1) >>> mul256) >>> roundDivTwo384) &&& (unit >>> negB1) >>> mul128\n        c2 = ((iden &&& (unit >>> g2) >>> mul256) >>> roundDivTwo384) &&& (unit >>> b2) >>> mul128\n        k1 = oh &&& drop (cond (((unit >>> high word128) &&& iden) &&& (unit >>> scribeGroupOrder) >>> add256 >>> ih)\n                               ((unit >>> zero128) &&& iden)\n                          &&& (unit >>> scalar_lambda) >>> scalar_multiply >>> scalar_negate) >>> scalar_add\n         >>> msb256 &&& iden >>> cond (iden &&& (unit >>> scribeGroupOrder) >>> sub256 >>> injr unit &&& iih) (injl unit &&& ih)\n      in\n        scalar_normalize >>> iden &&& (c1 &&& c2 >>> sub256 >>> oh &&& iih) >>> k1 &&& ih\n\n  , scalar_split_128 = scalar_normalize >>> (false &&& ih) &&& (false &&& oh)\n\n  , wnaf5 = wnaf5step128 >>> (take wnaf5step1 >>> ih) &&& ih\n\n  , wnaf15 = wnaf15step128 >>> (take wnaf15step1 >>> ih) &&& ih\n\n  , generate =\n     let\n      step = iih &&& (ioh &&& take gej_double >>> match ih (ih &&& take generateSmall >>> gej_ge_add))\n         >>> match ih (ih &&& take generate128Small >>> gej_ge_add)\n      step2 = (oh &&& (iooh &&& iioh) >>> step) &&& (ioih &&& iiih) >>> step\n      step4 = (oh &&& (iooh &&& iioh) >>> step2) &&& (ioih &&& iiih) >>> step2\n      step8 = (oh &&& (iooh &&& iioh) >>> step4) &&& (ioih &&& iiih) >>> step4\n      step16 = (oh &&& (iooh &&& iioh) >>> step8) &&& (ioih &&& iiih) >>> step8\n      step32 = (oh &&& (iooh &&& iioh) >>> step16) &&& (ioih &&& iiih) >>> step16\n      step64 = (oh &&& (iooh &&& iioh) >>> step32) &&& (ioih &&& iiih) >>> step32\n      step128 = (oh &&& (iooh &&& iioh) >>> step64) &&& (ioih &&& iiih) >>> step64\n      step129 = (oh &&& (iooh &&& iioh) >>> step) &&& (ioih &&& iiih) >>> step128\n     in\n      (unit >>> gej_infinity) &&& split128 >>> step129\n\n  , off_curve_linear_combination_1 =\n     let\n      splitLambda = scalar_split_lambda >>> take wnaf5 &&& drop wnaf5\n      body = (unit >>> gej_infinity) &&& (oih >>> scalarTable5) &&& (ooh >>> splitLambda) &&& (ih >>> split128)\n         >>> iooh &&& step129\n         >>> ioh &&& (oh &&& iih >>> fe_multiply)\n      step = drop iiih\n        &&& (drop iioh\n         &&& (drop ioih\n          &&& (drop iooh &&& take gej_double &&& ioih\n                     >>> match ioh (ioh &&& (oh &&& iih >>> lookupTable5) >>> gej_ge_add))\n          &&& ioih\n          >>> match ioh (ioh &&& (oh &&& iih >>> lookupTable5 >>> ge_scale_lambda) >>> gej_ge_add))\n         &&& iooh\n         >>> match ioh (ioh &&& (take generateSmall &&& iih >>> zinv) >>> gej_ge_add))\n        &&& iooh\n        >>> match ioh (ioh &&& (take generate128Small &&& iih >>> zinv) >>> gej_ge_add)\n      step2 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step)\n                  &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step\n      step4 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step2)\n                  &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step2\n      step8 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step4)\n                  &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step4\n      step16 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step8)\n                   &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step8\n      step32 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step16)\n                   &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step16\n      step64 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step32)\n                   &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step32\n      step128 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step64)\n                    &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step64\n      step129 = (oh &&& drop (oh &&& drop ((oooh &&& oioh) &&& (iooh &&& iioh))) >>> step)\n                    &&& drop (oh &&& drop ((ooih &&& oiih) &&& (ioih &&& iiih))) >>> step128\n     in\n      -- In the case that the 'a' parameter is infinity or the 'na' parameter is 0, then scalarTable5 is not built.\n      -- In particular the globalZ is set to 1 instead of whatever would have been generated by the table.\n      or (take (drop gej_is_infinity)) (take (take scalar_is_zero)) &&& iden\n  >>> cond (drop generate) body\n\n  , linear_check_1 = and (drop ge_is_on_curve)\n                    (and (take (take (drop ge_is_on_curve)))\n                         ((take (take (oh &&& (ih &&& (unit >>> fe_one))) &&& ih >>> off_curve_linear_combination_1))\n                      &&& drop ge_negate >>> gej_ge_add >>> gej_is_infinity))\n\n  , off_curve_scale = iden &&& (unit >>> zero256) >>> off_curve_linear_combination_1\n\n  , decompress =\n     let\n      k = drop (drop fe_normalize) &&& (xor (take fe_is_odd) ioh &&& oh >>> cond fe_negate iden)\n     in\n      drop y_from_x &&& iden >>> match (injl unit) (injr k)\n\n  , point_check_1 =\n     let\n       k1 = drop (take (drop decompress)) &&& (drop (ooh &&& ih) &&& oh)\n        >>> match false k2\n       k2 = ((iooh &&& oh) &&& ioih) &&& iih >>> linear_check_1\n     in\n       drop decompress &&& oh >>> match false k1\n\n  , pubkey_unpack = pubkey_check >>> cond (injr ((unit >>> false) &&& iden)) (injl unit)\n\n  , pubkey_unpack_neg = pubkey_check >>> cond (injr ((unit >>> true) &&& iden)) (injl unit)\n\n  , signature_unpack =\n      and (oh &&& scribe (toWord256 LibSecp256k1.fieldOrder) >>> lt256)\n          (ih &&& scribe (toWord256 LibSecp256k1.groupOrder) >>> lt256)\n  &&& iden\n  >>> cond (injr iden) (injl unit)\n\n  , bip_0340_check =\n     let\n      k1 = iih &&& (ioh &&& oh)\n       >>> match false k2\n      k2 = (ih &&& oih) &&& ((unit >>> false) &&& ooh) >>> point_check_1\n      e = m >>> (iv &&& oh >>> hashBlock) &&& ih >>> hashBlock >>> scalar_normalize\n      iv = scribe $ toWord256 . integerHash256 . ivHash . tagIv $ \"BIP0340/challenge\"\n      m = (ioh &&& ooh) &&& (oih &&& (scribe (toWord256 0x8000000000000000000000000000000000000000000000000000000000000500)))\n     in\n      take (take pubkey_unpack_neg) &&& (e &&& drop signature_unpack) >>> match false k1\n\n   , swu =\n      let Just c = LibSecp256k1.fe_square_root (LibSecp256k1.fe (-3))\n          d = LibSecp256k1.fe_halve (c LibSecp256k1..-. LibSecp256k1.fe_one)\n      in\n      fe_is_odd &&&\n      (fe_square >>>\n       (iden &&& scribe256 (LibSecp256k1.fe_repr (LibSecp256k1.fe_negate c)) >>> fe_multiply) &&&\n       (iden &&& scribe256 8 >>> fe_add) &&& (iden &&& scribe256 3 >>> fe_multiply) >>>                             -- (-c*t^2, 8+t^2, -c^2*t^2)\n       (iden &&& (drop fe_multiply >>> fe_invert)) >>>                                                        -- ((-c*t^2, 8+t^2, -c^2*t^2), -1/j)\n       ((ooh &&& (oiih &&& ih >>> fe_multiply) >>> fe_multiply) &&& scribe256 (LibSecp256k1.fe_repr d) >>> fe_add) &&& -- x1\n       (((take (drop (take fe_cube))) &&& (drop fe_negate) >>> fe_multiply) &&& (unit >>> fe_one) >>> fe_add) >>>      -- x3\n       (take y_from_x &&& iden) >>>\n       flip match (ioh &&& oh)\n       (drop ((oh &&& (unit >>> fe_one) >>> fe_add >>> fe_negate) &&& ih) >>> -- (x2, x3)\n        (take y_from_x &&& iden) >>>\n        flip match (ioh &&& oh)\n        (drop (drop (y_from_x &&& iden) >>>\n         flip match (ih &&& oh) (unit >>> fe_zero &&& fe_zero)\n      )))) >>>\n      cond ge_negate iden\n   , hash_to_curve_core = let\n       lt256 = Arith.lt word256\n       prefix1 = asW256 \"1st generation: \"\n       prefix2 = asW256 \"2nd generation: \"\n       asW256 str | 16 == length str = toWord128 $ foldl' (\\n c -> n * 256 + toInteger (fromEnum c)) 0 str\n       postfix = scribe . toWord128 $ 2^127 + 128 + 256\n     in\n      ((unit >>> iv) &&& ((scribe prefix1 &&& oh) &&& (ih &&& postfix)) >>> hashBlock) &&&\n      ((unit >>> iv) &&& ((scribe prefix2 &&& oh) &&& (ih &&& postfix)) >>> hashBlock) >>>\n      (((oh &&& scribe (toWord256 LibSecp256k1.fieldOrder) >>> lt256) `and`\n        (ih &&& scribe (toWord256 LibSecp256k1.fieldOrder) >>> lt256))\n        &&& iden) >>>\n      cond ((take swu &&& (unit >>> fe_one)) &&& drop swu >>> gej_ge_add >>> gej_normalize)\n           (injl unit)\n  }\n   where\n    y_from_x = (unit >>> scribe256 7) &&& fe_cube >>> fe_add >>> fe_square_root\n    fe_cube = iden &&& fe_square >>> fe_multiply\n\n    fe_multiplyInt i = scribe256 (i `mod` LibSecp256k1.fieldOrder) &&& iden >>> fe_multiply\n\n    -- Common code shared between 'fe_invert' and 'fe_square_root'.\n    tower = iden &&& fe_cube\n        >>> ih &&& (oh &&& drop fe_square >>> fe_multiply)\n        >>> oh &&& ((ih &&& (oh &&& (drop (iden &&& (iden &&& (fe_square >>> fe_square >>> fe_square) >>> fe_multiply >>> fe_square >>> fe_square >>> fe_square) >>> fe_multiply) >>> fe_square >>> fe_square) >>> fe_multiply -- (x2,(x3,x11))\n                          >>> iden &&& foldr1 (>>>) (replicate 11 fe_square) >>> fe_multiply))                      -- (x2,(x3,x22))\n                 >>> ih &&& (oh &&& drop (iden &&& foldr1 (>>>) (replicate 22 fe_square) >>> fe_multiply            -- (x2,(x22,(x3,x44)))\n                                     >>> (iden &&& (iden &&& foldr1 (>>>) (replicate 44 fe_square) >>> fe_multiply  -- (x2,(x22,(x3,(x44,x88))))\n                                                 >>> iden &&& foldr1 (>>>) (replicate 88 fe_square) >>> fe_multiply -- (x2,(x22,(x3,(x44,x176))))\n                                           >>> foldr1 (>>>) (replicate 44 fe_square)) >>> fe_multiply)              -- (x2,(x22,(x3,x220)))\n                                    >>> fe_square >>> fe_square >>> fe_square) >>> fe_multiply                                  -- (x2,(x22,x223))\n                           >>> foldr1 (>>>) (replicate 23 fe_square)) >>> fe_multiply                               -- (x2,t1)\n                 >>> foldr1 (>>>) (replicate 5 fe_square))\n\n    zinv = (ooh &&& drop fe_square >>> fe_multiply) &&& (oih &&& drop fe_cube >>> fe_multiply)\n\n    gej_norm = oh &&& drop fe_invert >>> zinv\n\n    -- Compute odd-multiples of a point for small (5-bit) multiples.\n    -- The result is in Jacobian coordinates but the z-coordinate is identical for all outputs.\n    scalarTable5 :: term GEJ (FE, Vector8 GE)\n    scalarTable5 = iden &&& gej_double\n               >>> iih &&& (((ooh &&& iih >>> zinv) &&& oih) &&& ioh -- (dz, (a', (dx,dy)))\n                        >>> pass1_8)\n               >>> (oh &&& iih >>> fe_multiply) &&& drop (take pass2_8)\n     where\n      pass1_2 = iden &&& gej_ge_add_ex >>> (ioh &&& (oooh &&& iioh)) &&& (iih &&& oih)\n      pass1_4 = pass1_2 >>> oh &&& drop (gej_ge_add_ex &&& ih >>> ooh &&& (oih &&& ih >>> pass1_2)) >>> (ioh &&& (oh &&& iioh)) &&& iiih\n      pass1_8 = pass1_4 >>> oh &&& drop (gej_ge_add_ex &&& ih >>> ooh &&& (oih &&& ih >>> pass1_4)) >>> (ioh &&& (oh &&& iioh)) &&& drop (drop ioih)\n      pass2_1 = oh &&& ih >>> zinv\n      pass2_2 = (oioh &&& (ooh &&& ih >>> fe_multiply)) &&& (oiih &&& ih >>> pass2_1) >>> (take pass2_1 &&& ih) &&& oih\n      pass2_4 = (ooh &&& oioh) &&& (oiih &&& ih >>> pass2_2) >>> (oih &&& (ooh &&& iih >>> fe_multiply) >>> pass2_2) &&& ioh >>> (ooh &&& ih) &&& oih\n      pass2_8 = ( oh &&&  ioh) &&& ( iih &&& (unit >>> fe_one) >>> pass2_4) >>> (oih &&& (ooh &&& iih >>> fe_multiply) >>> pass2_4) &&& ioh >>> ooh &&& ih\n\n    -- Given an odd-multiples table of affinte points, extract the @i@th element of the table.\n    -- If the index is negative @i@, then return the point negation of the @i@th element of the table.\n    lookupTable5 :: term (Word4, Vector8 GE) GE\n    lookupTable5 = oooh &&& ooih &&& oih &&& ih\n               >>> cond neg pos\n     where\n      pos = ioih &&& (iooh &&& (oh &&& iih >>> cond ih oh) >>> cond ih oh) >>> cond ih oh\n      neg = ioih &&& (iooh &&& (oh &&& iih >>> cond oh ih) >>> cond oh ih) >>> cond (take ge_negate) (drop ge_negate)\n\n    split128 = scalar_split_128 >>> take wnaf15 &&& drop wnaf15\n\n    -- Returns a small, signed integer multiple of the secp256k1's generator as a normalized affine point.\n    generateSigned :: Word a -> term a GEJ\n    generateSigned SingleV = copair gej_infinity ((generate0 >>> ge_negate) &&& fe_one)\n    generateSigned (DoubleV w) = ih &&& take rec >>> scaleConstant generate0 w\n     where\n      rec = generateSigned w\n\n    generateSmall :: term Word16 GE\n    generateSmall = generateSigned word16 >>> gej_norm\n\n    generate128Signed :: Word a -> term a GEJ\n    generate128Signed SingleV = copair gej_infinity ((generate128 >>> ge_negate) &&& fe_one)\n    generate128Signed (DoubleV w) = ih &&& take rec >>> scaleConstant generate128 w\n     where\n      rec = generate128Signed w\n\n    generate128Small :: term Word16 GE\n    generate128Small = generate128Signed word16 >>> gej_norm\n\n    pubkey_check = (iden &&& scribe (toWord256 LibSecp256k1.fieldOrder) >>> lt256) &&& iden\n\n-- | Same as 'off_curve_linear_combination_1' except it fails when the given point is off-curve.\nlinear_combination_1 :: Assert term => Lib term -> term ((Scalar, GEJ), Scalar) GEJ\nlinear_combination_1 m = take (drop (gej_is_on_curve m)) &&& (off_curve_linear_combination_1 m) >>> assertr cmrFail0 ih\n\n-- | Same as 'off_curve_scale' except it fails when the given point is off-curve.\nscale :: Assert term => Lib term -> term (Scalar, GEJ) GEJ\nscale m = drop (gej_is_on_curve m) &&& (off_curve_scale m) >>> assertr cmrFail0 ih\n\nlinear_verify_1 :: Assert term => Lib term -> term (((Scalar, GE), Scalar), GE) ()\nlinear_verify_1 m = assert (linear_check_1 m)\n\npoint_verify_1 :: Assert term => Lib term -> term (((Scalar, Point), Scalar), Point) ()\npoint_verify_1 m = assert (point_check_1 m)\n\n-- | This function is given a public key, a 256-bit message, and a signature, and asserts that the signature is valid for the given message and public key.\nbip_0340_verify :: Assert term => Lib term -> term ((PubKey, Word256), Sig) ()\nbip_0340_verify m = assert (bip_0340_check m)\n\n-- | A cryptograph hash function that results in a point on the secp256k1 curve.\n--\n-- This matches the hash function used to map asset IDs to asset commitments.\nhash_to_curve :: Assert term => Lib term -> term Word256 GE\nhash_to_curve m = assert (hash_to_curve_core m)\n\n-- | An instance of the Sha256 'Lib' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLib' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlib :: Core term => Lib term\nlib = mkLib Sha256.lib\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Loop.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables #-}\n-- | This module is a stub for supporting looping behaviour in Simplicity via self-delegation.\n--\nmodule Simplicity.Programs.Loop\n  ( loop, loopDepth\n  ) where\n\nimport Prelude hiding (take)\n\nimport Simplicity.Digest\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Term.Core\nimport Simplicity.Tensor\nimport Simplicity.Ty.Word\n\nloopTail :: (Assert term, Delegate term, TyC a, TyC b) => term (a, Word256) b -> term (a, Word256) b\nloopTail k = disconnect (assert (iih &&& oh >>> eq) &&& ih) k >>> ih\n\nloopBody :: (Assert term, Delegate term, TyC a, TyC b) => term a (Either a b) -> term (a, Word256) b -> term (a, Word256) b\nloopBody t k = take t &&& ih >>> match (loopTail k) oh\n\nloopEnd :: forall term a b. (Assert term, TyC a, TyC b) => term a (Either a b) -> term (a, Word256) b\nloopEnd t = take t &&& ih >>> assertr (commitmentRoot cmrTail) oh\n where\n  cmrTail :: CommitmentRoot (a, Word256) b\n  cmrTail = loopTail undefined\n\n-- | Builds an unbounded loop via a self-delegation construction.\n-- While loopBody is recursive, generating an infinite term, we anticipate a pruner will evaluate the term as far as needed to replace the 'match' with an 'assertr'.\n-- Thanks to Haskell's laziness, this is feasible.\nloop :: (Assert term, Delegate term, TyC a, TyC b) => Product CommitmentRoot term a (Either a b) -> term a b\nloop t = sndProduct $ iden &&& scribe cmr >>> lb\n where\n  cmr = toWord256 . integerHash256 . commitmentRoot . fstProduct $ lb\n  lb = loopBody t lb\n\n-- | Builds an loop via a self-delegation construction up to a given maximum depth.\n-- At the @n@th iteration, an assertion is uses.\n-- This is variant of 'loop' that has been pre-pruned at the given depth.\n-- Both @'loop' t@ and @'loopDepth' n t@ share the same 'commitmentRoot'.\nloopDepth n t | 1 <= n = sndProduct $ iden &&& scribe cmr >>> lb\n where\n  cmr = toWord256 . integerHash256 . commitmentRoot . fstProduct $ lb\n  lb = loopBodyDepth n\n  loopBodyDepth 1 = loopEnd t\n  loopBodyDepth n = loopBody t (loopBodyDepth (n-1))\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Sha256/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Programs.Sha256.lib' library instance into individual functions.\n-- Users should prefer to use 'Simplicity.Programs.Sha256.lib' in order to share library dependencies.\n-- This module is provided mostly for testing purposes.\nmodule Simplicity.Programs.Sha256.Lib\n (\n -- * Operations\n   Sha256.Block, Sha256.Hash, Sha256.Ctx8\n , iv, hashBlock\n , ctx8Init\n , tapdataInit\n , ctx8Add1\n , ctx8Addn\n , ctx8AddBuffer\n , ctx8Add2\n , ctx8Add4\n , ctx8Add8\n , ctx8Add16\n , ctx8Add32\n , ctx8Add64\n , ctx8Add128\n , ctx8Add256\n , ctx8Add512\n , ctx8AddBuffer511\n , ctx8Finalize\n , hashLoop\n , ctx8InitTag\n ) where\n\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Ty.Word\n\niv = Sha256.iv Sha256.lib\nhashBlock = Sha256.hashBlock Sha256.lib\nctx8Init = Sha256.ctx8Init Sha256.lib\ntapdataInit = Sha256.tapdataInit Sha256.lib\nctx8Add1 = Sha256.ctx8Add1 Sha256.libAssert\nctx8Addn = Sha256.ctx8Addn Sha256.libAssert\nctx8AddBuffer = Sha256.ctx8AddBuffer Sha256.libAssert\nctx8Add2 = ctx8Addn vector2\nctx8Add4 = ctx8Addn vector4\nctx8Add8 = ctx8Addn vector8\nctx8Add16 = ctx8Addn vector16\nctx8Add32 = ctx8Addn vector32\nctx8Add64 = ctx8Addn vector64\nctx8Add128 = ctx8Addn vector128\nctx8Add256 = ctx8Addn vector256\nctx8Add512 = ctx8Addn vector512\nctx8AddBuffer511 = ctx8AddBuffer buffer511\nctx8Finalize = Sha256.ctx8Finalize Sha256.libAssert\nhashLoop = Sha256.hashLoop\nctx8InitTag = Sha256.ctx8InitTag\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Sha256.hs",
    "content": "{-# LANGUAGE GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expression and types that can be used for computing SHA-256 hashes.\n-- Be aware that SHA-256 padding isn't provided and messages should be manually padded.\nmodule Simplicity.Programs.Sha256\n ( Lib(Lib), lib\n , LibAssert(LibAssert), mkLibAssert\n -- * Operations\n , Block, Hash, Ctx8\n , iv, hashBlock\n , ctx8Init\n , ctx8Add1\n , ctx8Addn\n , ctx8AddBuffer\n , ctx8Finalize\n , hashLoop\n , ctx8InitTag\n , tapdataInit\n -- * Example instances\n , libAssert\n ) where\n\nimport Prelude hiding (Word, drop, not, take)\nimport Data.String (fromString)\n\nimport Simplicity.Digest\nimport Simplicity.Functor\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Word\nimport Simplicity.Term.Core hiding (one)\n\n-- | In SHA-256, each block of data passed to the compression function is a 512-bit 'Word'.\ntype Block = Word512\n\n-- | In SHA-256, the initial vector and hash value are 256-bit 'Word's.\ntype Hash = Word256\n\n-- | A SHA-256 context (for bytes) consists of a buffer of less than 94 bytes, a counter for the number of compression functions invoked, and a midstate.\n--\n-- It is invalid for a context's counter to be greater than or equal to 2^55.\ntype Ctx8 = (Buffer63 Word8, (Word64, Word256))\n\n-- | A collection of core Simplicity expressions for SHA-256.\n-- Use 'lib' to construct an instance of this library.\ndata Lib term =\n Lib\n  { -- | Simplicity expression for the constant function that returns the SHA-256 initial vector.\n    iv :: term () Hash\n    -- | Simplicity expression for the SHA-256 compression function which takes a midstate (or initial vector) and a message block and outputs a hash value (which is used as a midstate if there are further message blocks).\n  , hashBlock :: term (Hash, Block) Hash\n    -- | Initialize an empty 'Ctx8'.\n  , ctx8Init :: term () Ctx8\n    -- | Initialize a tapdata tagged sha256 context.\n  , tapdataInit :: term () Ctx8\n  }\n\ndata LibAssert term =\n LibAssert {\n    -- | Append one byte to a 'Ctx8'.\n    --\n    -- This operation fails if the input or output 'Ctx8' is or would be invalid.\n    ctx8Add1 :: term (Ctx8, Word8) Ctx8\n    -- | Append a vector of bytes to a 'Ctx8'.\n    --\n    -- This operation fails if the input or output 'Ctx8' is or would be invalid.\n  , ctx8Addn :: forall v. TyC v => Vector Word8 v -> term (Ctx8, v) Ctx8\n    -- | Append a buffer of bytes to a 'Ctx8'.\n    --\n    -- This operation fails if the input or output 'Ctx8' is or would be invalid.\n  , ctx8AddBuffer :: forall v b. TyC b => Buffer Word8 v b -> term (Ctx8, b) Ctx8\n    -- | Append Sha-256 padding and finalize the hash\n    --\n    -- This operation fails if the input 'Ctx8' is invalid.\n  , ctx8Finalize :: term Ctx8 Hash\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    { iv = m iv\n    , hashBlock = m hashBlock\n    , ctx8Init = m ctx8Init\n    , tapdataInit = m tapdataInit\n    }\n\ninstance SimplicityFunctor LibAssert where\n  sfmap m LibAssert{..} =\n   LibAssert\n    { ctx8Add1 = m ctx8Add1\n    , ctx8Addn = m . ctx8Addn\n    , ctx8AddBuffer = m . ctx8AddBuffer\n    , ctx8Finalize = m ctx8Finalize\n    }\n\n-- | Build the Sha256 'Lib' library.\nlib :: Core term => Lib term\nlib = l\n where\n  l@Lib{..} = Lib\n   { iv = scribe . toWord256 $ 0x6a09e667bb67ae853c6ef372a54ff53a510e527f9b05688c1f83d9ab5be0cd19\n   , hashBlock = oh &&& compression\n             >>> ((collate oooh &&& collate ooih)\n             &&&  (collate oioh &&& collate oiih))\n             &&& ((collate iooh &&& collate ioih)\n             &&&  (collate iioh &&& collate iiih))\n   , ctx8Init = buffer63Empty &&& (zero word64 &&& iv)\n   , tapdataInit = buffer63Empty &&& (one word64 &&& tapdataPrefix)\n   }\n   where\n    collate x = take x &&& drop x >>> add32\n    compression = scribe32 k0 &&& iden >>> foldr (\\k rec -> scribe32 k &&& step >>> rec) round ks\n    k0:ks = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5\n            ,0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174\n            ,0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da\n            ,0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967\n            ,0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85\n            ,0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070\n            ,0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3\n            ,0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]\n    step = round &&& (drop (drop schedule))\n    scribe32 x = scribe (toWord32 x)\n    round = part1 >>> part2\n     where\n      part1 = ((t1 &&& io oooh) &&& io odiag)\n          &&& io (bigDiag &&& idiag)\n      part2 = ((t12 &&& ooih) &&& oih)\n          &&& ((t1d &&& ioih) &&& iih)\n      t1 = (oh &&& iio oooh >>> add32) &&& io (drop (iih &&& ((ooh >>> bigSigma1) &&& (ooh &&& diag >>> chWord32) >>> add32)) >>> add32) >>> add32\n      t12 = take ((oih &&& ih >>> majWord32) &&& (take (oh &&& (ih >>> bigSigma0)) >>> add32)) >>> add32\n      t1d = oooh &&& iooh >>> add32\n      bigSigma0 = rotateW32 (-2) &&& rotateW32 (-13) &&& rotateW32 (-22) >>> xor_xorWord32\n      bigSigma1 = rotateW32 (-6) &&& rotateW32 (-11) &&& rotateW32 (-25) >>> xor_xorWord32\n      chWord32 = bitwise_ch word32\n      majWord32 = bitwise_maj word32\n    schedule = (take part1 &&& (take idiag &&& (take iiih &&& drop oooh)))\n           &&& (drop part1 &&& (drop idiag &&& (drop iiih &&& smallSigma)))\n     where\n      part1 = odiag &&& bigDiag\n      smallSigma = (take (oo (oh &&& (ih >>> smallSigma0))) >>> add32) &&& (drop (ooih &&& (iioh >>> smallSigma1)) >>> add32) >>> add32\n      smallSigma0 = rotateW32 (-7)  &&& rotateW32 (-18) &&& shiftW32 (-3)  >>> xor_xorWord32\n      smallSigma1 = rotateW32 (-17) &&& rotateW32 (-19) &&& shiftW32 (-10) >>> xor_xorWord32\n    oo x = take (take x)\n    io x = drop (take x)\n    iio x = drop (io x)\n    diag = oih &&& ioh\n    odiag = take diag\n    idiag = drop diag\n    bigDiag = oiih &&& iooh\n    add32 = add word32 >>> ih\n    xor_xorWord32 = bitwise_xor_xor word32\n    rotateW32 = rotate_const word32\n    shiftW32 = shift_const_by false word32\n    buffer63Empty = bufferEmpty buffer63\n    tapdataPrefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ fromString \"TapData\"\n\n-- | Given an \"array\", which is a term that maps an index @w@ to a vector of bytes @v@, returning nothing if the index is out of bounds,\n-- hash all the bytes of the \"array\" in seqeuenced until the end of the array (i.e. up to the first index where the \"array\" term returns nothing).\n--\n-- A context value of type \"c\" is available to be pass into the \"array\" term.\nhashLoop :: (Assert term, TyC c, TyC w, TyC v) => Vector Word8 v -> Word w -> term (c, w) (S v) -> term (c, Ctx8) Ctx8\nhashLoop v = \\w array ->\n  let body = take array &&& ih\n         >>> match (injl ih) (injr (ih &&& oh >>> ctx8Addv))\n  in forWhile w body >>> copair iden iden\n where\n  ctx8Addv = ctx8Addn libAssert v\n\nctx8InitTag :: Core term => String -> term () Ctx8\nctx8InitTag tag = buffer63Empty &&& (one word64 &&& prefix)\n where\n  prefix = scribe . toWord256 . integerHash256 . ivHash . tagIv $ tag\n  buffer63Empty = bufferEmpty buffer63\n\n-- | Build the Sha256 'LibAssert' library.\nmkLibAssert :: Assert term => Lib term -> LibAssert term\nmkLibAssert Lib{..}  = l\n where\n  l@LibAssert{..} = LibAssert\n   { ctx8Add1 = (ooh &&& ih >>> buffer63Snoc) &&& oih\n            >>> match ((unit >>> buffer63Empty) &&& ((drop (take (increment word64) >>> assertl ih cmrFail0)) &&& (iih &&& oh >>> hashBlock)))\n                      iden\n            >>> (verifyNumCompression &&& iden) >>> ih\n   , ctx8Addn = \\v -> case v of\n                  SingleV -> ctx8Add1\n                  (DoubleV v) -> let rec = ctx8Addn v in\n                                 (oh &&& ioh >>> rec) &&& iih >>> rec\n   , ctx8AddBuffer = \\b -> case b of\n                       SingleB -> ih &&& oh >>> match (drop (iden &&& verifyNumCompression >>> oh)) (ih &&& oh >>> ctx8Add1)\n                       (DoubleB b) -> (ioh &&& oh >>> match ih (ih &&& oh >>> ctx8Addn (bufferVector b))) &&& iih >>> ctx8AddBuffer b\n     -- We clear the context's counter (after verifying it) because the counter is allowed to \"overflow\" during padding.\n   , ctx8Finalize = ((oh &&& ((verifyNumCompression >>> zero word64) &&& iih)) &&& (unit >>> scribe (toWord64 (2^63))) >>> ctx8Add8 >>> (take pad063 &&& iih))\n                &&& ((take buffer63Size >>> left_pad_low word8 vector8) &&& drop (take (shift_const_by false word64 6)) >>> add64 >>> shift_const_by false word64 3)\n                >>> oih &&& (oooh &&& (take oioh &&& (take (take iioh) &&& ih))) >>> hashBlock\n   }\n   where\n    buffer63Empty = bufferEmpty buffer63\n    ctx8Add8 = ctx8Addn vector8\n    verifyNumCompression = assert (ioh &&& (unit >>> scribe (toWord64 (2^55))) >>> lt word64)\n    add64 = add word64 >>> ih\n    buffer63Snoc = bufferSnoc buffer63\n    buffer63Size = ((false &&& false) &&& (take (copair false true) &&& drop (take (copair false true))))\n               &&& drop (drop ((take (copair false true) &&& drop (take (copair false true))) &&& drop (drop (take (copair false true) &&& drop (copair false true)))))\n    pad063 = oh &&& drop pad031 >>> match (ih &&& take (zero word256)) iden\n    pad031 = oh &&& drop pad015 >>> match (ih &&& take (zero word128)) iden\n    pad015 = oh &&& drop pad07 >>> match (ih &&& take (zero word64)) iden\n    pad07 = oh &&& drop pad03 >>> match (ih &&& take (zero word32)) iden\n    pad03 = oh &&& drop pad01 >>> match (ih &&& take (zero word16)) iden\n    pad01 = copair (zero word16) (iden &&& (unit >>> zero word8))\n\n-- | An instance of the Sha256 'LibAssert' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLib' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlibAssert :: Assert term => LibAssert term\nlibAssert = mkLibAssert lib\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/TimeLock.hs",
    "content": "-- | This module defines Simplicity expressions that implement timelock functions from \"Simplicity.Bitcoin\".\nmodule Simplicity.Programs.TimeLock\n ( parseLock, parseSequence\n , Height, Time, Distance, Duration\n ) where\n\nimport Prelude hiding (Word, drop, not, subtract, take)\n\nimport Simplicity.Functor\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Word\nimport Simplicity.Term.Core\n\ntype Height = Word32\ntype Time = Word32\ntype Distance = Word16\ntype Duration = Word16\n\n-- | Implements 'Simplicity.Bitcoin.parseLock'.\nparseLock :: Core term => term Word32 (Either Height Time)\nparseLock = (iden &&& scribe (toWord32  500000000) >>> subtract word32 >>> oh) &&& iden\n        >>> cond (injl iden) (injr iden)\n\n-- | Implements 'Simplicity.Bitcoin.parseSequence'.\nparseSequence :: Core term => term Word32 (Either () (Either Distance Duration))\nparseSequence = bit31 &&& (bit22 &&& ih)\n            >>> cond (injl unit)\n                     (injr (cond (injr iden) (injl iden)))\n where\n  bit31  = take (take oooh)\n  bit22 = take (drop ooih)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Programs/Word.hs",
    "content": "{-# LANGUAGE RankNTypes, GADTs, ScopedTypeVariables, TypeOperators #-}\n-- | This module defines Simplicity expressions and combinators that operate on Words.\nmodule Simplicity.Programs.Word\n  ( fill, low, high\n  , complement\n  , bitwise_bin, bitwise_tri\n  , bitwise_and, bitwise_or, bitwise_xor\n  , bitwise_maj, bitwise_xor_xor, bitwise_ch\n  , some, all, eq\n  , leftmost, left_pad_low, left_pad_high, left_extend\n  , rightmost, right_pad_low, right_pad_high, right_extend\n  , full_shift, shift_const_by, rotate_const\n  , left_shift_with, left_shift\n  , right_shift_with, right_shift\n  , left_rotate, right_rotate\n  , mapZV, transpose\n  , bufferEmpty, bufferSnoc\n  , forWhile, firstFail\n  , ConstWord(..)\n  , module Simplicity.Ty.Word\n  ) where\n\nimport Prelude hiding (Word, drop, take, not, or, and, last, all)\n\nimport qualified Data.Bits as Bits\nimport Data.Type.Equality ((:~:)(Refl))\n\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Generic (eq)\nimport Simplicity.Programs.Bit\nimport Simplicity.Term.Core\nimport Simplicity.Ty.Word\n\n-- | 2^n-ary diagonal of a term.\nfill :: (Core term, TyC c) => term c a -> Vector a b -> term c b\nfill t SingleV = t\nfill t (DoubleV w) = rec &&& rec\n where\n  rec = fill t w\n\n-- | Set all bits of a word to @0@.\nlow :: Core term => Word a -> term () a\nlow = fill false\n\n-- | Set all bits of a word to @1@.\nhigh :: Core term => Word a -> term () a\nhigh = fill true\n\n-- | Bitwise complement of a word.\ncomplement :: Core term => Word a -> term a a\ncomplement SingleV = not iden\ncomplement (DoubleV w) = take rec &&& drop rec\n where\n  rec = complement w\n\n-- | Map a binary operation across a vecotor.\nbitwise_bin :: forall term a v. Core term => term (a, a) a -> Vector a v -> term (v, v) v\nbitwise_bin op = go\n where\n  go :: forall v. Vector a v -> term (v, v) v\n  go SingleV = op\n  go (DoubleV w) = (ooh &&& ioh >>> rec) &&& (oih &&& iih >>> rec)\n   where\n    rec = go w\n\n-- | Map a trinary operation across a vecotor.\nbitwise_tri :: forall term a v. Core term => term (a, (a, a)) a -> Vector a v -> term (v, (v, v)) v\nbitwise_tri op = go\n where\n  go :: forall v. Vector a v -> term (v, (v, v)) v\n  go SingleV = op\n  go (DoubleV w) = (ooh &&& (iooh &&& iioh) >>> rec) &&& (oih &&& (ioih &&& iiih) >>> rec)\n   where\n    rec = go w\n\n-- | Bitwise 'and' over a pair of words.\nbitwise_and :: Core term => Word a -> term (a, a) a\nbitwise_and = bitwise_bin (and oh ih)\n\n-- | Bitwise 'or' over a pair of words.\nbitwise_or :: Core term => Word a -> term (a, a) a\nbitwise_or = bitwise_bin (or oh ih)\n\n-- | Bitwise 'xor' over a pair of words.\nbitwise_xor :: Core term => Word a -> term (a, a) a\nbitwise_xor = bitwise_bin (xor oh ih)\n\n-- | Bitwise 'maj' over a triple of words.\nbitwise_maj :: Core term => Word a -> term (a, (a, a)) a\nbitwise_maj = bitwise_tri maj\n\n-- | Bitwise 'xor_xor' over a triple of words.\nbitwise_xor_xor :: Core term => Word a -> term (a, (a, a)) a\nbitwise_xor_xor = bitwise_tri xor_xor\n\n-- | Bitwise 'ch' over a triple of words.\nbitwise_ch :: Core term => Word a -> term (a, (a, a)) a\nbitwise_ch = bitwise_tri ch\n\n-- | Test if some bit of a word is non-zero.\nsome :: Core term => Word a -> term a Bit\nsome SingleV = iden\nsome (DoubleV w) = or (take rec) (drop rec)\n where\n  rec = some w\n\n-- | Test if all bits of a word are non-zero.\nall :: Core term => Word a -> term a Bit\nall SingleV = iden\nall (DoubleV w) = and (take rec) (drop rec)\n where\n  rec = all w\n\n-- | Return the leftmost (a.k.a first) value from a vector.\n--\n-- Will return the most significant bit, MSB, of a word.\nleftmost :: (Core term, TyC a, TyC b) => Vector a b -> term b a\nleftmost SingleV = iden\nleftmost (DoubleV v) = take (leftmost v)\n\n-- | Return the leftmost (a.k.a first) value from a vector.\n--\n-- Will return the least significant bit, LSB, of a word.\nrightmost :: (Core term, TyC a, TyC b) => Vector a b -> term b a\nrightmost SingleV = iden\nrightmost (DoubleV v) = drop (rightmost v)\n\n-- | Given the last element of a vector, pad the rest of the elements with a value (derived from the input).\nleft_pad_pad :: Core term => term a a -> Vector a b -> term a b\nleft_pad_pad _ SingleV = iden\nleft_pad_pad t (DoubleV v) = fill t v &&& left_pad_pad t v\n\n-- | Increase the size of a word by padding the left (MSB) bits with @0@s.\nleft_pad_low :: (Core term, TyC a) => Word a -> Vector a b -> term a b\nleft_pad_low w v = left_pad_pad (unit >>> low w) v\n\n-- | Increase the size of a word by padding the left (MSB) bits with @1@s.\nleft_pad_high :: (Core term, TyC a) => Word a -> Vector a b -> term a b\nleft_pad_high w v = left_pad_pad (unit >>> high w) v\n\n-- | Increase the size of a word by padding the left (MSB) bits with the MSB of the input.\nleft_extend :: (Core term, TyC a, TyC b) => Word a -> Vector a b -> term a b\nleft_extend w v = leftmost w &&& iden >>> cond (left_pad_high w v) (left_pad_low w v)\n\n-- | Given the first element of a vector, pad the rest of the elements with a value (derived from the input).\nright_pad_pad :: Core term => term a a -> Vector a b -> term a b\nright_pad_pad _ SingleV = iden\nright_pad_pad t (DoubleV v) = right_pad_pad t v &&& fill t v\n\n-- | Increase the size of a word by padding the right (LSB) bits with @0@s.\nright_pad_low :: (Core term, TyC a) => Word a -> Vector a b -> term a b\nright_pad_low w v = right_pad_pad (unit >>> low w) v\n\n-- | Increase the size of a word by padding the right (LSB) bits with @1@s.\nright_pad_high :: (Core term, TyC a) => Word a -> Vector a b -> term a b\nright_pad_high w v = right_pad_pad (unit >>> high w) v\n\n-- | Increase the size of a word by padding the right (LSB) bits with the LSB of the input.\nright_extend :: (Core term, TyC a, TyC b) => Word a -> Vector a b -> term a b\nright_extend w v = rightmost w &&& iden >>> cond (right_pad_high w v) (right_pad_low w v)\n\n-- | Left shift the values of a given vector, shifting in the provided value, and returning the value shifted out.\nfull_left_shift1 :: Core term => Vector a va -> term (va, a) (a, va)\nfull_left_shift1 SingleV = iden\nfull_left_shift1 (DoubleV v) = ooh &&& (oih &&& ih >>> rec) >>> (oh &&& ioh >>> rec) &&& iih >>> ooh &&& (oih &&& ih)\n where\n  rec = full_left_shift1 v\n\n-- | Right shift the values of a given vector, shifting in the provided value, and returning the value shifted out.\nfull_right_shift1 :: Core term => Vector a va -> term (a, va) (va, a)\nfull_right_shift1 SingleV = iden\nfull_right_shift1 (DoubleV v) = (oh &&& ioh >>> rec) &&& iih >>> ooh &&& (oih &&& ih >>> rec) >>> (oh &&& ioh) &&& iih\n where\n  rec = full_right_shift1 v\n\n-- | Given a pair of vectors, rebalance the tuple to return a pair of vectors with their sizes exchanged.\n--\n-- This can be seen as a left shift of the vector @a@, shifting in the vector @b@ and returning the values shifted out.\n-- This can also be seen as a right shift of the vector @b@, shifting in the vector @a@ and returning the values shifted out.\nfull_shift :: (Core term, TyC a, TyC b) => Vector x a -> Vector x b -> term (a, b) (b, a)\nfull_shift wa wb = go (compareVectorSize wb wa)\n where\n  go :: (Core term, TyC a, TyC b) => Either (Vector (a, a) b) (Either (b :~: a) (Vector (b, b) a)) -> term (a, b) (b, a)\n  go (Left v) = full_right_shift1 (vectorComp vector2 v)\n  go (Right (Left Refl)) = iden\n  go (Right (Right v)) = full_left_shift1 (vectorComp vector2 v)\n\n-- | Left shift a vector by a constant number of places, shifting in copies the provided value.\n-- Shifting by a negative number of places will perform a right shift instead.\nshift_const_by :: (Core term, TyC a, TyC b) => term () a -> Vector a b -> Int -> term b b\nshift_const_by t v n | vectorSize v <= n = unit >>> fill t v\n                     | n < 0 = right_shift_const_by t v (-n)\n                     | otherwise = compose (go t v n)\n where\n  compose [] = iden\n  compose l = foldr1 (>>>) l\n  go :: (Core term, TyC a, TyC b) => term () a -> Vector a b -> Int -> [term b b]\n  go t SingleV 0 = []\n  go t v@(DoubleV v') n | even n = rec (n `div` 2)\n                        | otherwise = left_shift1 : rec ((n-1) `div` 2)\n   where\n    left_shift1 = iden &&& (unit >>> t) >>> full_left_shift1 v >>> ih\n    rec = go (t &&& t) (vectorPromote v')\n\n-- | Right shift a vector by a constant number of places, shifting in copies the provided value.\n-- Shifting by a negative number of places will perform a left shift instead.\nright_shift_const_by :: (Core term, TyC a, TyC b) => term () a -> Vector a b -> Int -> term b b\nright_shift_const_by t v n | vectorSize v <= n = unit >>> fill t v\n                           | n < 0 = shift_const_by t v (-n)\n                           | otherwise = compose (go t v n)\n where\n  compose [] = iden\n  compose l = foldr1 (>>>) l\n  go :: (Core term, TyC a, TyC b) => term () a -> Vector a b -> Int -> [term b b]\n  go t SingleV 0 = []\n  go t v@(DoubleV v') n | even n = rec (n `div` 2)\n                        | otherwise = right_shift1 : rec ((n-1) `div` 2)\n   where\n    right_shift1 = (unit >>> t) &&& iden >>> full_right_shift1 v >>> oh\n    rec = go (t &&& t) (vectorPromote v')\n\n-- | Return a list of expressions that projects out each item in the vector from left to right.\nitemsOf :: (Core term) => Vector a b -> [term b a]\nitemsOf SingleV = [iden]\nitemsOf (DoubleV v) = (take <$> rec) ++ (drop <$> rec)\n where\n  rec = itemsOf v\n\n-- | Left shift a vector by a given amount, shifting in the value the value provided.\nleft_shift_with :: (Core term, TyC a, TyC b, TyC c) => Word c -> Vector a b -> term (a, (c,b)) b\nleft_shift_with c = go . reverse $ itemsOf c\n where\n  go :: (Core term, TyC a, TyC b, TyC c) => [term c Bit] -> Vector a b -> term (a,(c,b)) b\n  go [] v = iih\n  go (control:controlBits) v =\n    oh &&& (ioh &&& (drop (take control) &&& (iih &&& oh) >>> cond (full_left_shift1 v >>> ih) oh))\n    >>> case v of\n          SingleV -> go controlBits v\n          DoubleV v' -> (oh &&& oh) &&& ih >>> go controlBits (vectorPromote v')\n\n-- | Left shift a vector by a given amount, shifting in zero bits.\nleft_shift :: (Core term, TyC b, TyC c) => Word c -> Word b -> term (c,b) b\nleft_shift c b = false &&& iden >>> left_shift_with c b\n\n-- | Right shift a vector by a given amount, shifting in the value the value provided.\nright_shift_with :: (Core term, TyC a, TyC b, TyC c) => Word c -> Vector a b -> term (a, (c,b)) b\nright_shift_with c = go . reverse $ itemsOf c\n where\n  go :: (Core term, TyC a, TyC b, TyC c) => [term c Bit] -> Vector a b -> term (a,(c,b)) b\n  go [] v = iih\n  go (control:controlBits) v =\n    oh &&& (ioh &&& (drop (take control) &&& (oh &&& iih) >>> cond (full_right_shift1 v >>> oh) ih))\n    >>> case v of\n          SingleV -> go controlBits v\n          DoubleV v' -> (oh &&& oh) &&& ih >>> go controlBits (vectorPromote v')\n\n-- | Right shift a vector by a given amount, shifting in zero bits.\nright_shift :: (Core term, TyC b, TyC c) => Word c -> Word b -> term (c,b) b\nright_shift c b = false &&& iden >>> right_shift_with c b\n\n-- | Left shift a vector by shifting in the value that is shifted out.\nleft_rotate1 :: (Core term, TyC a, TyC b) => Vector a b -> term b b\nleft_rotate1 v = iden &&& leftmost v >>> full_left_shift1 v >>> ih\n\n-- | Right shift a vector by shifting in the value that is shifted out.\nright_rotate1 :: (Core term, TyC a, TyC b) => Vector a b -> term b b\nright_rotate1 v = rightmost v &&& iden >>> full_right_shift1 v >>> oh\n\n-- | Left rotate a vector by a constant number of places.\n-- Rotating by a negative number of places will perform a right rotate instead.\nrotate_const :: (Core term, TyC a, TyC b) => Vector a b -> Int -> term b b\nrotate_const v n = compose (go v n)\n where\n  compose [] = iden\n  compose l = foldr1 (>>>) l\n  go :: (Core term, TyC a, TyC b) => Vector a b -> Int -> [term b b]\n  go SingleV n = []\n  go v@(DoubleV v') n | even n = rec (n `div` 2)\n                      | 1 == n `mod` 4 = left_rotate1 v : rec ((n-1) `div` 2)\n                      | 3 == n `mod` 4 = right_rotate1 v : rec ((n+1) `div` 2)\n   where\n    rec = go (vectorPromote v')\n\n-- | Left rotate a vector by a given amount.\nleft_rotate :: (Core term, TyC a, TyC b, TyC c) => Word c -> Vector a b -> term (c,b) b\nleft_rotate c = go . reverse $ itemsOf c\n where\n  go :: (Core term, TyC a, TyC b, TyC c) => [term c Bit] -> Vector a b -> term (c,b) b\n  go [] v = ih\n  go (control:controlBits) v =\n    oh &&& (take control &&& ih >>> cond (left_rotate1 v) iden)\n    >>> case v of\n          SingleV -> ih\n          DoubleV v' -> go controlBits (vectorPromote v')\n\n-- | Right rotate a vector by a given amount.\nright_rotate :: (Core term, TyC a, TyC b, TyC c) => Word c -> Vector a b -> term (c,b) b\nright_rotate c = go . reverse $ itemsOf c\n where\n  go :: (Core term, TyC a, TyC b, TyC c) => [term c Bit] -> Vector a b -> term (c,b) b\n  go [] v = ih\n  go (control:controlBits) v =\n    oh &&& (take control &&& ih >>> cond (right_rotate1 v) iden)\n    >>> case v of\n          SingleV -> ih\n          DoubleV v' -> go controlBits (vectorPromote v')\n\n-- | Lift a provided term to map a vector of inputs to a vector of outputs of the same length.\nmapZV :: (Core term) => ZipVector x nx y ny -> term x y -> term nx ny\nmapZV SingleZV t = t\nmapZV (DoubleZV zv) t = take rec &&& drop rec\n where\n  rec = mapZV zv t\n\n-- Polymorphic helper type isomorphic to @term a b@ via Yoneda embedding.\ndata Yoneda term a b = Yoneda (forall d. TyC d => term b d -> term a d)\nrunYoneda :: (Core term, TyC b) => Yoneda term a b -> term a b\nrunYoneda (Yoneda k) = k iden\n\n-- An identity for the 'Yoneda' embedding.\nyId :: Yoneda term a a\nyId = Yoneda id\n\n-- Take the first value of a pair.  Using the 'Yoneda' embedding avoids the 'comp' combinator.\nyoh :: (Core term, TyC a, TyC b, TyC c) => Yoneda term c (a, b) -> Yoneda term c a\nyoh (Yoneda k) = Yoneda (\\t -> k (take t))\n\n-- Take the second value of a pair.  Using the 'Yoneda' embedding avoids the 'comp' combinator.\nyih :: (Core term, TyC a, TyC b, TyC c) => Yoneda term c (a, b) -> Yoneda term c b\nyih (Yoneda k) = Yoneda (\\t -> k (drop t))\n\n-- | Transpose a matrix (i.e a vector of vectors) of the specified dimensions.\ntranspose :: (Core term, TyC mx, TyC nmx) => ZipVector x mx nx mnx -> ZipVector mx nmx x nx -> term nmx mnx\ntranspose mzv nzv = go mzv nzv yId\n where\n  go :: (Core term, TyC nm, TyC m) => ZipVector x kx nx knx -> ZipVector m nm x nx -> Yoneda term m kx -> term nm knx\n  go SingleZV nzv t = mapZV nzv (runYoneda t)\n  go (DoubleZV zv) nzv t = go zv nzv (yoh t) &&& go zv nzv (yih t)\n\n-- | Given a 'Buffer' @b@, return the empty buffer.\nbufferEmpty :: (Core term, TyC e) => Buffer x v b -> term e b\nbufferEmpty SingleB = injl unit\nbufferEmpty (DoubleB b) = injl unit &&& bufferEmpty b\n\n-- | Given a 'Buffer' @b@, append an 'x' value to the buffer.\n--\n-- If the resulting buffer overflows, return a vector of all values from the input.\nbufferSnoc :: Core term => Buffer x v b -> term (b, x) (Either v b)\nbufferSnoc SingleB = match (injr (injr ih)) (injl iden)\nbufferSnoc (DoubleB b) = (oih &&& ih >>> bufferSnoc b) &&& ooh\n                     >>> match (ih &&& oh >>> match (injr (injr ih &&& bufferEmpty b)) (injl iden))\n                               (injr (ih &&& oh))\n\n-- | Given @body :: term ((c, w), a) (Either b a)@ where @c@ is a generic context type, @w@ is a counter value, and @a@ is a state value,\n-- then @loop body (c, a)@ repeatedly apply body with a fixed context @c@ and an initial state @a@ with an incrementing counter @w@ starting at zero\n-- with the state being updated by a result of @Right a@, until either @body@ returns @Left b@, in which case @Left b@ is immediately returned, or\n-- in case the counter reaches its maximum possible value, in which case @Right a@ is returned where @a@ is the final state value.\nforWhile :: (Core term, TyC c, TyC b, TyC a) => Word w -> term ((c, w), a) (Either b a) -> term (c, a) (Either b a)\nforWhile SingleV body = (((oh &&& false) &&& ih) >>> monobody) &&& oh\n                    >>> match (injl oh) (((ih &&& true) &&& oh) >>> monobody)\n where\n  monobody = body\nforWhile (DoubleV n) body = forWhile n (forWhile n ((oooh &&& (ooih &&& oih)) &&& ih >>> body))\n\n-- | Given op :: w |- a + b, find the first input where op returns Left.\n-- @'firstFail' w op@ will fail if op never returns Left.\nfirstFail :: (Assert term, TyC w, TyC a, TyC b) => Word w -> term w (Either a b) -> term () w\nfirstFail w op = (unit &&& unit) >>> forWhile w (take (drop (op &&& iden >>> match (injl ih) (injr unit))))\n         >>> iden &&& unit >>> assertl (take iden) cmrFail0\n\n-- | Used to match Simplicity expressions to see of they are of the form scribe(v) : term () (Word b).\ndata ConstWord a b where\n  NotConstWord :: ConstWord a b\n  EmptyConstWord :: ConstWord a ()\n  ConstWord :: Word b -> !Integer -> ConstWord () b\n\nconstBit :: (TyC a, TyC b) => Bool -> ConstWord a b\nconstBit bit = result\n where\n  result = case reifyArrow result of\n    (OneR, SumR OneR OneR) -> ConstWord word1 (if bit then 1 else 0)\n    _ -> NotConstWord\n\ninstance Core ConstWord where\n  iden = NotConstWord\n  comp _ t = NotConstWord\n  unit = EmptyConstWord\n  injl EmptyConstWord = constBit False\n  injl _ = NotConstWord\n  injr EmptyConstWord = constBit True\n  injr _ = NotConstWord\n  match _ _ = NotConstWord\n  pair (ConstWord ws vs) (ConstWord wt vt) = case compareVectorSize ws wt of\n    Right (Left Refl) -> ConstWord (DoubleV ws) (Bits.shift vs (wordSize ws) + vt)\n    _ -> NotConstWord\n  pair _ _ = NotConstWord\n  take _ = NotConstWord\n  drop _ = NotConstWord\n\ninstance Assert ConstWord where\n  assertl _ _ = NotConstWord\n  assertr _ _ = NotConstWord\n  fail _ = NotConstWord\n\ninstance Witness ConstWord where\n  witness _ = NotConstWord\n\ninstance Delegate ConstWord where\n  disconnect _ _ = NotConstWord\n\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Serialization.hs",
    "content": "-- | This modules provides functionality to aid serializiang and deserializing to and from bit streams using difference lists and Van Laarhoven free monad representations.\nmodule Simplicity.Serialization\n  ( DList, putBitString, putPositive\n  , getBitString, getPositive, getPositiveUpTo\n  , getItem\n  , getCatalogue\n  , evalStream, evalExactVector\n  , evalStreamWithError\n  , Error(..)\n  , getEvalBitStream, treeEvalBitStream\n  , putBitStream\n  ) where\n\nimport Prelude hiding (length)\n\nimport Control.Monad (forM_, guard)\nimport Control.Monad.Trans (lift)\nimport Control.Monad.Trans.Cont (Cont, cont, runCont)\nimport Control.Monad.Trans.State (StateT(..), evalStateT, get, put)\nimport Data.Bits (setBit, testBit)\nimport Data.List (foldl', genericLength, unfoldr)\nimport Data.List.Split (chunksOf)\nimport Data.Serialize.Get (Get, getWord8)\nimport Data.Serialize.Put (Putter, putWord8)\nimport Data.Vector.Unboxed (Vector, Unbox, indexM, length)\nimport Data.Void (Void, vacuous)\nimport Data.Word (Word8)\n\nimport Simplicity.Tree\n\n-- | A type for difference lists: an efficient type for appending to lists.\n--\n-- To convert a difference list, @l :: DList a@, to a list, apply it to the empty list, @l [] :: [a]@.\n-- To convert a list, @l :: [a]@, to a difference list, partially apply it to the append function, @(l++) :: DList a@.\ntype DList a = [a] -> [a]\n\n-- | A self-delimiting encoding of variable length list of bits returned as a difference list.\n--\n-- The empty list, @[]@, is encoded as the difference list representing @[False]@.\n-- A non-empty list, @l@, is encoded as the difference list representing @[True] ++ n ++ l@,\n-- where @n@ is the length of @l@ encoded by 'putPositive'.\nputBitString :: [Bool] -> DList Bool\nputBitString [] = (False :)\nputBitString l = (True :) . putPositive (genericLength l) . (l ++)\n\n-- | A self-delimiting encoding of arbitrary sized positive integers.\n--\n-- A positive number is encoded by writing it base-2, choping off the leading '1',\n-- and encoding the remaining digits as a list of Booleans in big-endian using 'putBitString'.\n-- e.g.\n--\n-- @putPositive 1 = putBitString []@\n--\n-- @putPositive 2 = putBitString [False]@\n--\n-- @putPositive 3 = putBitString [True]@\n--\n-- @putPositive 4 = putBitString [False,False]@\n--\n-- @putPositive 5 = putBitString [False,True]@\nputPositive :: Integer -> DList Bool\nputPositive x | x <= 0 = error \"Simplicity.Serialization.putPositive: non-positive value\"\n              | otherwise = putBitString . reverse $ unfoldr f x\n where\n  f i | i <= 1 = Nothing\n      | otherwise = Just (odd i, i `div` 2)\n\n-- | Decodes the self-delimiting encoding of a variable length list of bits.\n--\n-- Note that the type @forall m. Monad m => m Bool -> m a@ is isomorphic to the free monad over the @X²@ functor.\n-- In other words, 'getBitString' has the type of a binary branching tree with leaves containing '[Bool]' values.\n--\n-- @evalStream getBitString (putBitString l) == Just l@\ngetBitString :: Monad m => m Bool -> m [Bool]\ngetBitString next = next >>= f\n where\n  f False = return []\n  f True = getPositive next >>= loop\n  loop i | i <= 0 = return []\n         | otherwise = (:) <$> next <*> loop (i-1)\n\n-- | Decodes the self-delimiting encoding of a positive integer.\n--\n-- Note that the type @forall m. Monad m => m Bool -> m a@ is isomorphic to the free monad over the @X²@ functor.\n-- In other words, 'getPositive' has the type of a binary branching tree with leaves containing 'Integer' values.\n--\n-- @evalStream getPositive (putPositive n) == Just n@\ngetPositive :: Monad m => m Bool -> m Integer\ngetPositive = fmap (foldl' f 1) . getBitString\n where\n  f i False = 2*i\n  f i True  = 2*i + 1\n\n-- | Decodes the self-delimiting encoding of a positive integer that is less than or equal to a given bound.\n--\n-- If the encoded value exceeds the bound, then nothing is returned.\n--\n-- Note that the type @forall m. Monad m => m void -> m b -> m a@ is isomorphic to the free monad over the @X^b + 1@ functor at @a@.\n-- In other words, 'getPositiveUpTo' returns the type of a binary branching tree with leaves containing 'Integer' values or nothing.\ngetPositiveUpTo :: Monad m => Integer -> m Void -> m Bool -> m Integer\ngetPositiveUpTo bound abort | 0 < bound = getUpTo (putPositive bound []) (\\abort_ -> getPositive) abort\n                            | otherwise = \\next_ -> vacuous abort\n where\n  getUpTo :: Monad m => [Bool] -> (StateT [Bool] m Void -> StateT [Bool] m Bool -> StateT [Bool] m a) -> m Void -> m Bool -> m a\n  getUpTo bound prog abort next = evalStateT (prog (lift abort) (StateT boundNext)) bound\n   where\n    boundNext [] = vacuous abort\n    boundNext (hd:tl) = next >>= k\n     where\n      k b | b <= hd = return (b, if b == hd then tl else repeat True)\n          | otherwise = vacuous abort\n\n-- | Decodes the self-delimiting encoding of a positive integer that represents an item in a list.\n--\n-- If the encoded value exceeds the length of the list, then nothing is returned.\n--\n-- Note: Because only positive integers have an encoding, the indexing into the list is 1-based rather than the usual 0-based.\n--\n-- Note that the type @forall m. Monad m => m void -> m b -> m a@ is isomorphic to the free monad over the @X^b + 1@ functor at @a@.\n-- In other words, 'getItem' returns the type of a binary branching tree with leaves containing 'a' values or nothing.\ngetItem :: Monad m => [a] -> m Void -> m Bool -> m a\ngetItem items abort next = select <$> getPositiveUpTo (genericLength items) abort next\n where\n  select n = items !! fromInteger (n - 1)\n\n-- | Decodes the self-delimiting encoding of a sequence of positive integers that represents an item in a 'Catalogue'.\n-- Guided by the 'Catalogue' the 'getItem' decods a positive integer to select an item from a 'Shelf'.\n-- If that item is another 'Catalogue', then it recursively decodes another positive integer, otherwise it returns the 'Item' from the 'Shelf'.\n--\n-- If an encoded value exceeds the length of any shelf list, then nothing is returned.\n--\n-- If an encoded value references a 'Missing' item, then nothing is returned.\n--\n-- Note: Because only positive integers have an encoding, the indexing into a 'Shelf' is 1-based rather than the usual 0-based.\n--\n-- Note that the type @forall m. Monad m => m void -> m b -> m a@ is isomorphic to the free monad over the @X^b + 1@ functor at @a@.\n-- In other words, 'getCatalogue' returns the type of a binary branching tree with leaves containing 'a' values or nothing.\ngetCatalogue :: Monad m => Catalogue a -> m Void -> m Bool -> m a\ngetCatalogue Missing abort next = vacuous abort\ngetCatalogue (Item a) abort next = return a\ngetCatalogue (Shelf shelf) abort next = do\n  item <- getItem shelf abort next\n  getCatalogue item abort next\n\n-- | @evalStream :: (forall m. Monad m => m b -> m a) -> [b] -> Maybe a@\n--\n-- Interprets the free monad representation of a stream transformer as a function consuming lists.\n-- 'evalStream' returns 'Nothing' if the stream transforms consumes the entire input before returning a value.\n--\n-- Note that the type @forall m. Monad m => m b -> m a@ is isomorphic to the free monad over the @X^b@ functor at @a@.\n-- In other words, 'evalStream' transforms a type of @b@-branching trees with leaves containing @a@ values\n-- into a function consuming a list of @b@s and returning a @Maybe a@.\nevalStream :: (StateT [b] Maybe b -> StateT [b] Maybe a) -> [b] -> Maybe a\nevalStream prog = evalStateT (prog (get >>= f))\n where\n  f [] = fail \"Simplicity.Serialization.evalStream: End of Stream\"\n  f (hd:tl) = put tl >> return hd\n\n-- | @evalExactVector :: Unboxed b => (forall m. Monad m => m b -> m a) -> 'Vector' b -> Maybe a@\n--\n-- Interprets the free monad representation of a stream transformer as a function consuming unboxed 'Vector's.\n-- 'evalExactVector' returns 'Nothing' unless the input vector is entirely and exactly consumed.\n--\n-- Note that the type @forall m. Monad m => m b -> m a@ is isomorphic to the free monad over the @X^b@ functor at @a@.\n-- In other words, 'evalExactVector' transforms a type of @b@-branching trees with leaves containing @a@ values\n-- into a function consuming a 'Vector' of @b@s and returning a @Maybe a@.\nevalExactVector :: Unbox b => (StateT Int Maybe b -> StateT Int Maybe a) -> Vector b -> Maybe a\nevalExactVector prog bs = evalStateT (prog next >>= assertEnd) 0\n where\n  n = length bs\n  next = do\n   i <- get\n   guard (i < n)\n   put (i + 1)\n   indexM bs i\n  assertEnd result = do\n    i <- get\n    guard (i == n)\n    return result\n\n-- | The type of errors that can be produced by 'evalStreamWithError'.\ndata Error = EndOfInput\n           | ParseError\n           deriving (Eq, Show)\n\n-- | @evalStreamWithError :: (forall m. Monad m => m void -> m b -> m a) -> [b] -> 'Either' 'Error' a@\n--\n-- Interprets the free monad representation of a partial stream transformer as a function consuming lists.\n-- 'evalStreamWithError' returns @'Left' 'EndOfInput'@ if the stream transforms consumes the entire input before returning a value and\n-- @'Left' 'ParseError'@ if the stream transforms aborts.\n--\n-- Note that the type @forall m. Monad m => m void -> m b -> m a@ is isomorphic to the free monad over the @X^b + 1@ functor at @a@.\n-- In other words, 'evalStreamWithError' transforms a type of @b@-branching trees with leaves either containing @a@ values or no values\n-- into a function consuming a list of @b@s and returning an @'Either' 'Error' a@.\nevalStreamWithError :: (StateT [b] (Either Error) void ->\n                        StateT [b] (Either Error) b ->\n                        StateT [b] (Either Error) a)\n                    -> [b] -> Either Error a\nevalStreamWithError prog = evalStateT (prog abort (get >>= f))\n where\n  abort = lift (Left ParseError)\n  f [] = lift (Left EndOfInput)\n  f (hd:tl) = put tl >> return hd\n\n-- | @getEvalBitStream :: (forall m. Monad m => m void -> m Bool -> m a) -> Get a@\n--\n-- Interprets the free monad representation of a bit-stream transformer with failure in the 'Get' monad.\n-- This consumes bits from a 'ByteString' in big-endian order.\n-- Any unconsumed bits from the last byte processed are discarded.\n-- If the provided bit-stream transformer fails, then 'Control.Monad.fail' is called for the 'Get' monad.\n--\n-- Note that the type @forall m. Monad m => m void -> m b -> m a@ is isomorphic to the free monad over the @X^b + 1@ functor at @a@.\ngetEvalBitStream :: (StateT (Maybe (Word8, Int)) Get void -> StateT (Maybe (Word8, Int)) Get Bool -> StateT (Maybe (Word8, Int)) Get a) -> Get a\ngetEvalBitStream prog = evalStateT (prog (fail \"Simplicity.Serialization.getEvalBitStream: aborted\") (StateT next)) Nothing\n where\n  next Nothing = do\n   w <- getWord8\n   return (testBit w 7, Just (w, 6))\n  next (Just (w, i)) | i < 0     = next Nothing\n                     | otherwise = return (testBit w i, Just (w, i-1))\n\n-- Cont is a poor-man's Codensity Monad.\n-- | @treeEvalBitStream :: (forall m. Monad m => m void -> m Bool -> m a) -> BinTree a@\n--\n-- Reifies the free monad representation of a bit-stream transformer with failure as a 'BinTree'.\n--\n-- Note that the type @forall m. Monad m => m void -> m Bool -> m a@ is isomorphic to the free monad over the @X^b + 1@ functor at @a@,\n-- which is the 'BinTree a' type.\ntreeEvalBitStream :: (Cont (BinTree a) void -> Cont (BinTree a) Bool -> Cont (BinTree a) a) -> BinTree a\ntreeEvalBitStream prog = runCont (prog abort next) Leaf\n where\n   abort = cont $ const Dead\n   next = cont $ \\k -> branch (k False) (k True)\n\n-- | Packs and writes out a list of 'Bool's via the 'Data.Serialize.Put.Put' monad.\n-- It writes starting from MSB (most significant bit) to LSB (least significant bit) within a byte.\nputBitStream :: Putter [Bool]\nputBitStream l = forM_ (chunksOf 8 l) putChunk\n where\n  putChunk bs = putWord8 $ foldr (flip setBit) 0 [i|(b, i) <- zip bs [7,6..0], b]\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Tags.hs",
    "content": "module Simplicity.Tags\n  ( typeTag\n  , commitmentTag\n  , identityHashTag, identityTag\n  , annotatedTag\n  , primTag\n  , jetTag\n  , hiddenTag\n  , signatureTag, sigHash\n  ) where\n\nimport Data.List (intercalate)\nimport Data.Serialize (encode)\n\nimport Simplicity.Digest\n\ntag :: [String] -> IV\ntag = tagIv . intercalate \"\\US\"\n\nprefix = [\"Simplicity\"]\ntypePrefix = prefix ++ [\"Type\"]\ncommitmentPrefix = prefix ++ [\"Commitment\"]\nidentityPrefix = prefix ++ [\"Identity\"]\nannotatedPrefix = prefix ++ [\"Annotated\"]\nprimitivePrefix primPrefix = prefix ++ [\"Primitive\", primPrefix]\n\ntypeTag :: String -> IV\ntypeTag x = tag $ typePrefix ++ [x]\n\ncommitmentTag :: String -> IV\ncommitmentTag x = tag $ commitmentPrefix ++ [x]\n\nidentityHashTag :: IV\nidentityHashTag = tag identityPrefix\n\nidentityTag :: String -> IV\nidentityTag x = tag $ identityPrefix ++ [x]\n\nannotatedTag :: String -> IV\nannotatedTag x = tag $ annotatedPrefix ++ [x]\n\nprimTag :: String -> String -> IV\nprimTag primPrefix x = tag $ primitivePrefix primPrefix ++ [x]\n\njetTag :: IV\njetTag = tag $ prefix ++ [\"Jet\"]\n\nhiddenTag :: IV\nhiddenTag = tag $ prefix ++ [\"Hidden\"]\n\n-- | The midstate after the \"standard\" Simplicity signed message tag.\nsignatureTag :: IV\nsignatureTag = tag $ prefix ++ [\"Signature\"]\n\n-- | Create a \"standard\" Simplicity signed message from an 'CommitmentRoot' of a sighash expression, and that expression's output.\nsigHash :: Hash256 -- ^ @'CommitmentRoot' () Word256@\n        -> Hash256 -- ^ Output if sighash\n        -> Hash256\nsigHash h1 h2 = taggedHash tag $ encode h1 <> encode h2\n where\n  tag = intercalate \"\\US\" $ prefix ++ [\"Signature\"]\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Tensor.hs",
    "content": "-- | This module provides a product for computing multiple interpretations of Simplicity simultaneously.\n-- Other tensors can be added when they are needed.\nmodule Simplicity.Tensor\n  ( Product(..)\n  , Unit(..)\n  ) where\n\ndata Product p q a b = Product { fstProduct :: p a b\n                               , sndProduct :: q a b\n                               }\n                       deriving Show\n\ndata Unit a b = Unit deriving Show\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Term/Core.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module defines the term language for 'Core' Simplicity using\n-- tagless-final style, plus a few extensions: 'Assert', 'Witness' and 'Delegate'.\nmodule Simplicity.Term.Core\n ( module Simplicity.Ty\n , Core(..)\n , elimS, copair\n , swapP, swapS\n -- * Notation for 'Core' terms\n , (>>>), (&&&)\n -- | The following expressions are for short sequences of 'take' and 'drop', with 'iden' that is used to access components of Simplicity inputs.\n --\n -- * @o@ means 'take'\n -- * @i@ means 'drop'\n -- * @h@ means 'iden'\n --\n -- For example, @'oih' = 'take' ('drop' 'iden')@.\n --\n -- The string of @i@'s and @o@'s is meant to resemble a binary number that denotes an index to the leaves of a perfect binary tree.\n , oh, ih, ooh, oih, ioh, iih, oooh, ooih, oioh, oiih, iooh, ioih, iioh, iiih\n -- * Language extensions\n , Assert(..), fail0\n , Witness(..)\n , Delegate(..)\n ) where\n\nimport Prelude hiding (take, drop, fail)\n\nimport Control.Arrow (Kleisli(..))\nimport Control.Monad ((>=>))\nimport qualified Control.Monad.Fail as Fail\n\nimport Simplicity.Digest\nimport Simplicity.Tensor\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\n-- | Values of type @forall term. 'Core' term => term a b@ are well-typed terms of the core Simplicity language represented in tagless-final style.\n--\n-- Functions that consume terms in this style are defined by creating instances of the 'Core' class.\n-- These instances are called /Simplicity Algebras/.\nclass Core term where\n  iden :: TyC a => term a a\n  comp :: (TyC a, TyC b, TyC c) => term a b -> term b c -> term a c\n  unit :: TyC a => term a ()\n  injl :: (TyC a, TyC b, TyC c) => term a b -> term a (Either b c)\n  injr :: (TyC a, TyC b, TyC c) => term a c -> term a (Either b c)\n  -- | Because @case@ is a reserved word in Haskell, we will be calling Simplicity's @case@ combinator 'match' instead.\n  match :: (TyC a, TyC b, TyC c, TyC d) => term (a, c) d -> term (b, c) d -> term (Either a b, c) d\n  pair :: (TyC a, TyC b, TyC c) => term a b -> term a c -> term a (b, c)\n  take :: (TyC a, TyC b, TyC c) => term a c -> term (a, b) c\n  drop :: (TyC a, TyC b, TyC c) => term b c -> term (a, b) c\n\n-- | Natural deduction style elimination rule for Sums.\nelimS :: (Core term, TyC a, TyC b, TyC c, TyC d) => term a (Either b c) -> term b d -> term c d -> term a d\nelimS r s t = r &&& unit >>> match (take s) (take t)\n\n-- | Categorical dual of 'pair'\ncopair :: (Core term, TyC a, TyC b, TyC c) => term a c -> term b c -> term (Either a b) c\ncopair = elimS iden\n\n-- | Term for swapping positions in products (Commutativity of Multiplication): A * B |- B * A\nswapP :: (Core term, TyC a, TyC b) => term (a, b) (b, a)\nswapP = pair (drop iden) (take iden)\n\n-- | Term for swapping positions in sums (Commutativity of Addition): A + B |- B + A\nswapS :: (Core term, TyC a, TyC b) => term (Either a b) (Either b a)\nswapS = copair (injr iden) (injl iden)\n\n-- same precedence as in Control.Category.\ninfixr 1 >>>\n\n-- | @s '>>>' t = 'comp' s t@\n(>>>) :: (Core term, TyC a, TyC b, TyC c) => term a b -> term b c -> term a c\n(>>>) = comp\n\n-- same precedence as in Control.Arrow.\ninfixr 3 &&&\n\n-- | @s '&&&' t = 'pair' s t@\n(&&&) :: (Core term, TyC a, TyC b, TyC c) => term a b -> term a c -> term a (b, c)\n(&&&) = pair\n\noh :: (Core term, TyC x, TyC b) => term (x, b) x\noh = take iden\n\nih :: (Core term, TyC a, TyC x) => term (a, x) x\nih = drop iden\n\nooh :: (Core term, TyC x, TyC b, TyC c) => term ((x, b), c) x\nooh = take oh\n\noih :: (Core term, TyC a, TyC x, TyC c) => term ((a, x), c) x\noih = take ih\n\nioh :: (Core term, TyC a, TyC x, TyC c) => term (a, (x, c)) x\nioh = drop oh\n\niih :: (Core term, TyC a, TyC b, TyC x) => term (a, (b, x)) x\niih = drop ih\n\noooh :: (Core term, TyC x, TyC b, TyC c, TyC d) => term (((x, b), c), d) x\noooh = take ooh\n\nooih :: (Core term, TyC a, TyC x, TyC c, TyC d) => term (((a, x), c), d) x\nooih = take oih\n\noioh :: (Core term, TyC a, TyC x, TyC c, TyC d) => term ((a, (x, c)), d) x\noioh = take ioh\n\noiih :: (Core term, TyC a, TyC b, TyC x, TyC d) => term ((a, (b, x)), d) x\noiih = take iih\n\niooh :: (Core term, TyC a, TyC x, TyC c, TyC d) => term (a, ((x, c), d)) x\niooh = drop ooh\n\nioih :: (Core term, TyC a, TyC b, TyC x, TyC d) => term (a, ((b, x), d)) x\nioih = drop oih\n\niioh :: (Core term, TyC a, TyC b, TyC x, TyC d) => term (a, (b, (x, d))) x\niioh = drop ioh\n\niiih :: (Core term, TyC a, TyC b, TyC c, TyC x) => term (a, (b, (c, x))) x\niiih = drop iih\n\ninstance Core (->) where\n  iden = id\n  comp s t = t . s\n  unit = const ()\n  injl t a = Left (t a)\n  injr t a = Right (t a)\n  match s _ (Left a, c)  = s (a, c)\n  match _ t (Right b, c) = t (b, c)\n  pair s t a = (s a, t a)\n  take t (a, _) = t a\n  drop t (_, b) = t b\n\n-- | The Monad 'm' should be a commutative, idempotent monad.\ninstance Monad m => Core (Kleisli m) where\n  iden = Kleisli $ return\n  comp (Kleisli s) (Kleisli t) = Kleisli $ s >=> t\n  unit = Kleisli $ const (return ())\n  injl (Kleisli t) = Kleisli $ \\a -> Left <$> t a\n  injr (Kleisli t) = Kleisli $ \\a -> Right <$> t a\n  match (Kleisli s) (Kleisli t) = Kleisli $ go\n   where\n    go (Left a, c)  = s (a, c)\n    go (Right b, c) = t (b, c)\n  pair (Kleisli s) (Kleisli t) = Kleisli $ \\a -> (,) <$> s a <*> t a\n  take (Kleisli t) = Kleisli $ \\(a, _) -> t a\n  drop (Kleisli t) = Kleisli $ \\(_, b) -> t b\n\n-- | This class extends the 'Core' Simplicity language with two assertion expressions.\n-- These expressions are use for assertions and for pruning 'match' (case) expressions.\n-- This extension produces partial functions.\nclass Core term => Assert term where\n  assertl :: (TyC a, TyC b, TyC c, TyC d) => term (a, c) d -> Hash256 -> term (Either a b, c) d\n  assertr :: (TyC a, TyC b, TyC c, TyC d) => Hash256 -> term (b, c) d -> term (Either a b, c) d\n  fail :: (TyC a, TyC b) => Block512 -> term a b\n\n-- | A canonical version of the 'fail' combinator with the 'Block512' set to 0.\nfail0 :: (Assert term, TyC a, TyC b) => term a b\nfail0 = fail (hash0, hash0)\n\n-- | The Monad 'm' should be a commutative, idempotent monad with a zero that is both a left and right zero.\ninstance Fail.MonadFail m => Assert (Kleisli m) where\n  assertl (Kleisli s) _ = Kleisli $ go\n   where\n    go (Left a, c)  = s (a, c)\n    go (Right _, _) = Fail.fail \"Simplicity.Term.Core: assertl failed\"\n  assertr _ (Kleisli t) = Kleisli $ go\n   where\n    go (Left _, _)  = Fail.fail \"Simplicity.Term.Core: assertr failed\"\n    go (Right b, c) = t (b, c)\n  fail _ = Kleisli . const $ Fail.fail \"Simplicity.Term.Core: fail\"\n\n-- | This class adds 'witness' expressions to the Simplicity language.\nclass Witness term where\n  -- | The 'witness' expression denotes a constant function, however this value is not committed to the 'Simplicity.MerkleRoot.CommitmentRoot'.\n  -- Compare this to 'Simplicity.Programs.Generic.scribe' which does commit to its value.\n  --\n  -- @witness v _ = v@\n  witness :: (TyC a, TyC b) => b -> term a b\n\ninstance Witness (->) where\n  witness = const\n\ninstance Monad m => Witness (Kleisli m) where\n  witness = Kleisli . const . return\n\n-- | This class adds 'disconnect' expressions to the Simplicity language, which can be used for delegation.\nclass Delegate term where\n  disconnect :: (TyC a, TyC b, TyC c, TyC d) => term (Word256, a) (b, c) -> term c d -> term a (b, d)\n\ninstance (Core p, Core q) => Core (Product p q) where\n  iden = Product iden iden\n  comp ~(Product rs fs) ~(Product rt ft) = Product (comp rs rt) (comp fs ft)\n  unit = Product unit unit\n  injl ~(Product rt ft) = Product (injl rt) (injl ft)\n  injr ~(Product rt ft) = Product (injr rt) (injr ft)\n  match ~(Product rs fs) ~(Product rt ft) = Product (match rs rt) (match fs ft)\n  pair ~(Product rs fs) ~(Product rt ft) = Product (pair rs rt) (pair fs ft)\n  take ~(Product rt ft) = Product (take rt) (take ft)\n  drop ~(Product rt ft) = Product (drop rt) (drop ft)\n\ninstance (Assert p, Assert q) => Assert (Product p q) where\n  assertl ~(Product rs fs) t = Product (assertl rs t) (assertl fs t)\n  assertr s ~(Product rt ft) = Product (assertr s rt) (assertr s ft)\n  fail b = Product (fail b) (fail b)\n\ninstance (Witness p, Witness q) => Witness (Product p q) where\n  witness b = Product (witness b) (witness b)\n\ninstance (Delegate p, Delegate q) => Delegate (Product p q) where\n  disconnect ~(Product rs fs) ~(Product rt ft) = Product (disconnect rs rt) (disconnect fs ft)\n\ninstance Core Unit where\n  iden = Unit\n  comp _ _ = Unit\n  unit = Unit\n  injl _ = Unit\n  injr _ = Unit\n  match _ _ = Unit\n  pair _ _ = Unit\n  take _ = Unit\n  drop _ = Unit\n\ninstance Assert Unit where\n  assertl _ _ = Unit\n  assertr _ _ = Unit\n  fail _ = Unit\n\ninstance Witness Unit where\n  witness _ = Unit\n\ninstance Delegate Unit where\n  disconnect _ _ = Unit\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Tree.hs",
    "content": "-- | This modules provides custom binary trees ('BinTree') and rose trees ('Catalogue') for use in Simplicity.\nmodule Simplicity.Tree\n  ( BinTree(..), branch, traverseWithPath, foldMapWithPath\n  , Catalogue(..), book\n  ) where\n\nimport Data.Functor.Const (Const(Const), getConst)\nimport Data.Traversable (fmapDefault, foldMapDefault)\nimport Data.Void (Void, vacuous)\n\n-- | A rose tree type.  This type includes 'Missing' leaves that contain no value.\ndata Catalogue a = Missing | Item a | Shelf [Catalogue a]\n\ninstance Functor Catalogue where\n  fmap = fmapDefault\n\ninstance Foldable Catalogue where\n  foldMap = foldMapDefault\n\ninstance Traversable Catalogue where\n  traverse f Missing = pure Missing\n  traverse f (Item a) = Item <$> f a\n  traverse f (Shelf l) = Shelf <$> traverse (traverse f) l\n\ninstance Applicative Catalogue where\n  pure = Item\n  bf <*> bx = bf >>= \\f -> bx >>= \\x -> return (f x)\n\ninstance Monad Catalogue where\n  return = pure\n  Missing >>= f = Missing\n  (Item a) >>= f = f a\n  (Shelf l) >>= f = Shelf $ map (>>= f) l\n\n-- | Builds a depth 1 'Catalog' from a list.\nbook :: [a] -> Catalogue a\nbook = Shelf . fmap Item\n\n-- | A binary tree type.  This type includes 'Dead' leaves that contain no value.\ndata BinTree a = Dead | Leaf a | Branch (BinTree a) (BinTree a)\n\ninstance Functor BinTree where\n  fmap = fmapDefault\n\ninstance Foldable BinTree where\n  foldMap = foldMapDefault\n\ninstance Traversable BinTree where\n  traverse f Dead = pure Dead\n  traverse f (Leaf a) = Leaf <$> f a\n  traverse f (Branch l r) = Branch <$> traverse f l <*> traverse f r\n\ninstance Applicative BinTree where\n  pure = Leaf\n  bf <*> bx = bf >>= \\f -> bx >>= \\x -> return (f x)\n\ninstance Monad BinTree where\n  return = pure\n  Dead >>= f = Dead\n  (Leaf a) >>= f = f a\n  (Branch l r) >>= f = Branch (l >>= f) (r >>= f)\n\n-- | An optimized 'Branch' that collapses 'Dead' leaves into one.\nbranch :: BinTree a -> BinTree a -> BinTree a\nbranch Dead Dead = Dead\nbranch l r = Branch l r\n\n-- | Similar to 'traverse' but additionally provides the operation with the path from the root to the 'Leaf'.\ntraverseWithPath :: Applicative f => ([Bool] -> a -> f b) -> BinTree a -> f (BinTree b)\ntraverseWithPath f = go id\n where\n  go ctx (Branch l r) = Branch <$> go (ctx . (False:)) l <*> go (ctx . (True:)) r\n  go ctx (Leaf a) = Leaf <$> f (ctx []) a\n  go ctx Dead = pure Dead\n\n-- | Similar to 'foldMap' but additionally provides the operation with the path from the root to the 'Leaf'.\nfoldMapWithPath :: Monoid m => ([Bool] -> a -> m) -> BinTree a -> m\nfoldMapWithPath f = getConst . traverseWithPath (\\p -> Const . f p)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Ty/Bit.hs",
    "content": "-- | This module defines the 'Bit' type alais used in Simplicity.\nmodule Simplicity.Ty.Bit\n ( Bit, fromBit, toBit\n ) where\n\n-- | Simplicity types are composed from @()@, 'Either' and @(,)@.\n-- We cannot use Haskell's 'Bool' type directly in Simplicity.\n-- Instead we create use this isomorphic type in Simplicity to represent bits.\ntype Bit = Either () ()\n\n-- | Canonically convert a Simplicity 'Bit' type to the Haskell 'Bool' type.\nfromBit :: Bit -> Bool\nfromBit (Left ()) = False\nfromBit (Right ()) = True\n\n-- | Canonically convert a Hasekll 'Bool' type to the Simplicity 'Bit' type.\ntoBit :: Bool -> Bit\ntoBit False = Left ()\ntoBit True = Right ()\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Ty/LibSecp256k1.hs",
    "content": "module Simplicity.Ty.LibSecp256k1\n ( FE, GE, GEJ, Scalar, Point\n , PubKey, Sig\n , fromFE, toFE\n , fromGE, toGE\n , fromGEJ, toGEJ\n ) where\n\nimport qualified Simplicity.LibSecp256k1.Spec as Spec\nimport Simplicity.Ty.Word\n\n-- | Simplicity's representation of field elements.\ntype FE = Word256\n\n-- | A point in compressed coordinates.\n-- The point at infinity isn't representable.\ntype Point = (Bit, FE)\n\n-- | A point in affine coordinates.\n-- Usually expected to be on the elliptic curve.\n-- The point at infinity isn't representable.\ntype GE = (FE, FE)\n\n-- | A point in Jacobian coordinates.\n-- Usually expected to be on the elliptic curve.\n-- The point at infinity's representatives are of the form @((a^2, a^3), 0)@, with @((0, 0), 0)@ being the canonical representative.\ntype GEJ = (GE, FE)\n\n-- | Scalar values, those less than the order of secp256's elliptic curve, are represented by a 256-bit word type.\ntype Scalar = Word256\n\n-- | A format for (Schnorr) elliptic curve x-only public keys.\n-- The y-coordinate is implicitly the one on the curve that has an even y coordinate.\n-- The point at infinity isn't representable (nor is it a valid public key to begin with).\ntype PubKey = Word256\n\n-- | A format for Schnorr signatures.\ntype Sig = (Word256, Word256)\n\nfromFE :: FE -> Spec.FE\nfromFE = Spec.fe . fromWord256\n\ntoFE :: Spec.FE -> FE\ntoFE = toWord256 . toInteger . Spec.fe_pack\n\nfromGE :: GE -> Spec.GE\nfromGE (x,y) = Spec.GE (fromFE x) (fromFE y)\n\ntoGE :: Spec.GE -> GE\ntoGE (Spec.GE x y) = (toFE x, toFE y)\n\nfromGEJ :: GEJ -> Spec.GEJ\nfromGEJ ((x,y),z) = Spec.GEJ (fromFE x) (fromFE y) (fromFE z)\n\ntoGEJ :: Spec.GEJ -> GEJ\ntoGEJ (Spec.GEJ x y z) = ((toFE x, toFE y), toFE z)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Ty/Sha256.hs",
    "content": "-- | This modules provides some functions for mashalling data to and from Simplicity types that are used for some SHA-256 operations.\nmodule Simplicity.Ty.Sha256\n ( fromHash\n , fromCtx8, toCtx8\n , Ctx, Ctx8\n ) where\n\nimport qualified Data.ByteString as BS\nimport Lens.Family2 ((^..), over, review)\n\nimport Simplicity.Digest\nimport Simplicity.Programs.Sha256\nimport Simplicity.Ty.Word\n\nfromHash :: Hash -> Hash256\nfromHash = review (over be256) . fromIntegral . fromWord256\n\nfromCtx8 :: Ctx8 -> Maybe Ctx\nfromCtx8 (buffer, (count, midstate)) = ctxBuild (fromInteger . fromWord8 <$> buffer^..buffer_ buffer63)\n                                               (fromWord64 count)\n                                               (fromHash midstate)\ntoCtx8 :: Ctx -> Ctx8\ntoCtx8 ctx = (buffer, (count, midstate))\n where\n  buffer = fst $ bufferFill buffer63 (toWord8 . fromIntegral <$> BS.unpack (ctxBuffer ctx))\n  count = toWord64 . fromIntegral $ ctxCounter ctx\n  midstate = toWord256 . integerHash256 . ivHash $ ctxIV ctx\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Ty/Word.hs",
    "content": "{-# LANGUAGE GADTs, RankNTypes, TypeOperators #-}\n\n-- | This module defines 2^/n/ bit word Simplicity types.\nmodule Simplicity.Ty.Word\n  ( Vector(..), vectorComp, vectorPromote, compareVectorSize\n  , vectorSize, vector_\n  , Buffer(..), bufferFill, bufferVector, buffer_\n  , Word, wordSize, fromWord, toWord\n  -- * Type aliases\n  -- | Below are type aliases for Simplicity 'Word' types up to 4096-bit words.\n  -- Note: This does not limit word sizes; arbitrarily large word sizes are allowed by making further pairs.\n  , Word1, Word2, Word4, Word8, Word16, Word32, Word64, Word128, Word256, Word512, Word1024, Word2048, Word4096\n  , Vector1, Vector2, Vector4, Vector8, Vector16, Vector32, Vector64, Vector128, Vector256, Vector512, Vector1024, Vector2048, Vector4096\n  , vector1, vector2, vector4, vector8, vector16, vector32, vector64, vector128, vector256, vector512, vector1024, vector2048, vector4096\n  , Buffer1, Buffer3, Buffer7, Buffer15, Buffer31, Buffer63, Buffer127, Buffer255, Buffer511\n  , buffer1, buffer3, buffer7, buffer15, buffer31, buffer63, buffer127, buffer255, buffer511\n  -- * Specializations\n  -- | The following are useful instances of 'Word' and specializations of 'fromWord' and 'toWord' for commonly used word sizes.\n  -- Other word sizes can still be constructed using other 'Word' values.\n\n  -- ** Word1\n  , word1, fromWord1, fromInt1, toWord1\n  -- ** Word2\n  , word2, fromWord2, fromInt2, toWord2\n  -- ** Word4\n  , word4, fromWord4, fromInt4, toWord4\n  -- ** Word8\n  , word8, fromWord8, fromInt8, toWord8\n  -- ** Word16\n  , word16, fromWord16, fromInt16, toWord16\n  -- ** Word32\n  , word32, fromWord32, fromInt32, toWord32\n  -- ** Word64\n  , word64, fromWord64, fromInt64, toWord64\n  -- ** Word128\n  , word128, fromWord128, fromInt128, toWord128\n  -- ** Word256\n  , word256, fromWord256, fromInt256, toWord256\n  -- ** Word512\n  , word512, fromWord512, fromInt512, toWord512\n  -- ** Word1024\n  , word1024, fromWord1024, fromInt1024, toWord1024\n  -- ** Word2048\n  , word2048, fromWord2048, fromInt2048, toWord2048\n  -- ** Word4096\n  , word4096, fromWord4096, fromInt4096, toWord4096\n  -- * Zip Vector\n  , ZipVector(..)\n  -- ** Bit\n  , module Simplicity.Ty.Bit\n  ) where\n\nimport Prelude hiding (Word)\n\nimport Control.Monad.Trans.State (State, evalState, get, put)\nimport Data.Type.Equality ((:~:)(Refl))\nimport Lens.Family2.Stock (Traversal', rgt_)\n\nimport Simplicity.Ty\nimport Simplicity.Ty.Bit\n\nright_ f = rgt_ f\n\ntype Vector1 x = x\ntype Vector2 x = (x,x)\ntype Vector4 x = Vector2 (Vector2 x)\ntype Vector8 x = Vector2 (Vector4 x)\ntype Vector16 x = Vector2 (Vector8 x)\ntype Vector32 x = Vector2 (Vector16 x)\ntype Vector64 x = Vector2 (Vector32 x)\ntype Vector128 x = Vector2 (Vector64 x)\ntype Vector256 x = Vector2 (Vector128 x)\ntype Vector512 x = Vector2 (Vector256 x)\ntype Vector1024 x = Vector2 (Vector512 x)\ntype Vector2048 x = Vector2 (Vector1024 x)\ntype Vector4096 x = Vector2 (Vector2048 x)\n\nvector1 :: TyC x => Vector x (Vector1 x)\nvector1 = SingleV\n\nvector2 :: TyC x => Vector x (Vector2 x)\nvector2 = DoubleV vector1\n\nvector4 :: TyC x => Vector x (Vector4 x)\nvector4 = DoubleV vector2\n\nvector8 :: TyC x => Vector x (Vector8 x)\nvector8 = DoubleV vector4\n\nvector16 :: TyC x => Vector x (Vector16 x)\nvector16 = DoubleV vector8\n\nvector32 :: TyC x => Vector x (Vector32 x)\nvector32 = DoubleV vector16\n\nvector64 :: TyC x => Vector x (Vector64 x)\nvector64 = DoubleV vector32\n\nvector128 :: TyC x => Vector x (Vector128 x)\nvector128 = DoubleV vector64\n\nvector256 :: TyC x => Vector x (Vector256 x)\nvector256 = DoubleV vector128\n\nvector512 :: TyC x => Vector x (Vector512 x)\nvector512 = DoubleV vector256\n\nvector1024 :: TyC x => Vector x (Vector1024 x)\nvector1024 = DoubleV vector512\n\nvector2048 :: TyC x => Vector x (Vector2048 x)\nvector2048 = DoubleV vector1024\n\nvector4096 :: TyC x => Vector x (Vector4096 x)\nvector4096 = DoubleV vector2048\n\n-- | @'Vector' x a@ specifies types, @a@, which are nested pairs of ... pairs of @x@'s.\n--\n-- The type @a@ contain 2^/n/ @x@ values for some /n/.\ndata Vector x a where\n  SingleV :: TyC x => Vector x x\n  DoubleV :: (TyC x, TyC a) => Vector x a -> Vector x (Vector2 a)\n\n-- | A proof that a 'Vector' of 'Vector's is itself a 'Vector'.\nvectorComp :: TyC a => Vector a b -> Vector b c -> Vector a c\nvectorComp v SingleV = v\nvectorComp v (DoubleV w) = DoubleV (vectorComp v w)\n\n-- | A proof that if @y@ is a 'Vector' of @x@'s then @(y, y)@ is a vector of @(x, x)@'s\nvectorPromote :: Vector x y -> Vector (x, x) (y, y)\nvectorPromote SingleV = SingleV\nvectorPromote (DoubleV v) = DoubleV (vectorPromote v)\n\n-- | Given @a@ and @b@ which are both 'Vector's of @z@'s, then decide which of the two 'Vector's is longer or prove that they are equal.\ncompareVectorSize :: Vector z a -> Vector z b -> Either (Vector (b, b) a) (Either (a :~: b) (Vector (a, a) b))\ncompareVectorSize SingleV SingleV = Right (Left Refl)\ncompareVectorSize (DoubleV n) SingleV =\n  case compareVectorSize n SingleV of\n    Left v -> Left (DoubleV v)\n    Right (Left Refl) -> Left SingleV\ncompareVectorSize SingleV (DoubleV m) =\n  case compareVectorSize SingleV m of\n    Right (Left Refl) -> Right (Right SingleV)\n    Right (Right v) -> Right (Right (DoubleV v))\ncompareVectorSize (DoubleV n) (DoubleV m) =\n  case compareVectorSize n m of\n    Left v -> Left (vectorPromote v)\n    Right (Left Refl) -> Right (Left Refl)\n    Right (Right v) -> Right (Right (vectorPromote v))\n\n-- | Given a 'Vector', @a@, fill it with values from a list, returning any unused elements.\n--\n-- Fails if not enough elements are available.\nvectorFill :: Vector x a -> [x] -> Maybe (a, [x])\nvectorFill SingleV [] = Nothing\nvectorFill SingleV (x:xs) = Just (x, xs)\nvectorFill (DoubleV vec) l = do\n  (v1, l') <- vectorFill vec l\n  (v2, l'') <- vectorFill vec l'\n  return ((v1,v2),l'')\n\n-- | Computes the number of entries in a 'Vector'.\nvectorSize :: Vector x a -> Int\nvectorSize SingleV = 1\nvectorSize (DoubleV w) = 2*(vectorSize w)\n\n-- | A (monomorphic) traversal of a 'Vector'.\nvector_ :: Vector x a -> Traversal' a x\nvector_ SingleV = ($)\nvector_ (DoubleV v) = \\f (x,y) -> (,) <$> rec f x <*> rec f y\n where\n  rec = vector_ v\n\ntype Buffer1 x = S x\ntype Buffer3 x = (S (Vector2 x), Buffer1 x)\ntype Buffer7 x = (S (Vector4 x), Buffer3 x)\ntype Buffer15 x = (S (Vector8 x), Buffer7 x)\ntype Buffer31 x = (S (Vector16 x), Buffer15 x)\ntype Buffer63 x = (S (Vector32 x), Buffer31 x)\ntype Buffer127 x = (S (Vector64 x), Buffer63 x)\ntype Buffer255 x = (S (Vector128 x), Buffer127 x)\ntype Buffer511 x = (S (Vector256 x), Buffer255 x)\n\n-- | @'Buffer' x v b@ specifies a type @b@ which is of the form @('S' (x^(2^/n/)), ..., ('S' x^2, 'S' x)...)@\n-- where @x^(2^/n/)@ is a 'Vector' of @x@.\n--\n-- The type @b@ contains up to, but excluding, 2^/n/ @x@ values for some /n/.\n--\n-- The type @b@ is isomorphic to @1 + x + x^2 + ... + x^(2^/n/-1)@.\n--\n-- The type @v@ is a `Vector' of @x@'s which is used as a helper type (see 'bufferVector').\ndata Buffer x v b where\n SingleB :: TyC x => Buffer x (Vector2 x) (S x)\n DoubleB :: (TyC x, TyC v, TyC b) => Buffer x v b -> Buffer x (Vector2 v) (S v, b)\n\nbuffer1 :: TyC x => Buffer x (Vector2 x) (Buffer1 x)\nbuffer1 = SingleB\n\nbuffer3 :: TyC x => Buffer x (Vector4 x) (Buffer3 x)\nbuffer3 = DoubleB buffer1\n\nbuffer7 :: TyC x => Buffer x (Vector8 x) (Buffer7 x)\nbuffer7 = DoubleB buffer3\n\nbuffer15 :: TyC x => Buffer x (Vector16 x) (Buffer15 x)\nbuffer15 = DoubleB buffer7\n\nbuffer31 :: TyC x => Buffer x (Vector32 x) (Buffer31 x)\nbuffer31 = DoubleB buffer15\n\nbuffer63 :: TyC x => Buffer x (Vector64 x) (Buffer63 x)\nbuffer63 = DoubleB buffer31\n\nbuffer127 :: TyC x => Buffer x (Vector128 x) (Buffer127 x)\nbuffer127 = DoubleB buffer63\n\nbuffer255 :: TyC x => Buffer x (Vector256 x) (Buffer255 x)\nbuffer255 = DoubleB buffer127\n\nbuffer511 :: TyC x => Buffer x (Vector512 x) (Buffer511 x)\nbuffer511 = DoubleB buffer255\n\n-- | Given a 'Buffer', @b@, of up to 2^/n/ @x@'s, return a 'Vector' of 2^/n/ @x@'s.\nbufferVector  :: Buffer x v b -> Vector x v\nbufferVector SingleB = vector2\nbufferVector (DoubleB buf) = DoubleV (bufferVector buf)\n\n-- | Given a 'Buffer', @b@, return the empty buffer for it.\nbufferEmpty :: Buffer x v b -> b\nbufferEmpty SingleB = Left ()\nbufferEmpty (DoubleB buf) = (Left (), bufferEmpty buf)\n\n-- | Given a 'Buffer', @b@, fill it with values from a list, returning any unused elements.\nbufferFill :: Buffer x v b -> [x] -> (b,[x])\nbufferFill buf [] = (bufferEmpty buf, [])\nbufferFill SingleB (x:xs) = (Right x, xs)\nbufferFill (DoubleB buf) l = case vectorFill (bufferVector buf) l of\n  Nothing -> let (rec,l'') = bufferFill buf l in ((Left (), rec), l'')\n  Just (v, l') -> let (rec, l'') = bufferFill buf l' in ((Right v, rec), l'')\n\n-- | A (monomorphic) traversal of a 'Buffer'.\nbuffer_ :: Buffer x v b -> Traversal' b x\nbuffer_ SingleB = right_\nbuffer_ (DoubleB v) = \\f (x,y) -> (,) <$> (right_.vector_ (bufferVector v)) f x  <*> buffer_ v f y\n\ntype Word1 = Vector1 Bit\ntype Word2 = Vector2 Bit\ntype Word4 = Vector4 Bit\ntype Word8 = Vector8 Bit\ntype Word16 = Vector16 Bit\ntype Word32 = Vector32 Bit\ntype Word64 = Vector64 Bit\ntype Word128 = Vector128 Bit\ntype Word256 = Vector256 Bit\ntype Word512 = Vector512 Bit\ntype Word1024 = Vector1024 Bit\ntype Word2048 = Vector2048 Bit\ntype Word4096 = Vector4096 Bit\n\n-- | @'Word' a@ specifies the types, @a@, which correspond to Simplicity word types.\n--\n-- These are the types of 2^/n/ bit words and are made up of nested pairs of identically sized words down to the single-'Bit' type.\ntype Word = Vector Bit\n\nword1 :: Word Word1\nword1 = vector1\n\nword2 :: Word Word2\nword2 = vector2\n\nword4 :: Word Word4\nword4 = vector4\n\nword8 :: Word Word8\nword8 = vector8\n\nword16 :: Word Word16\nword16 = vector16\n\nword32 :: Word Word32\nword32 = vector32\n\nword64 :: Word Word64\nword64 = vector64\n\nword128 :: Word Word128\nword128 = vector128\n\nword256 :: Word Word256\nword256 = vector256\n\nword512 :: Word Word512\nword512 = vector512\n\nword1024 :: Word Word1024\nword1024 = vector1024\n\nword2048 :: Word Word2048\nword2048 = vector2048\n\nword4096 :: Word Word4096\nword4096 = vector4096\n\n-- | Computes the number of entries in a 'Word'.\n--\n-- @'wordSize' w = 'Simplicity.BitMachine.Ty.bitSizeR' ('reifyProxy' w)@\nwordSize :: Word a -> Int\nwordSize = vectorSize\n\n-- | Convert a value of a Simplicity word type as a unsigned Haskell integer.\n--\n-- @'toWord' w ('fromWord' w n) = n@\nfromWord :: Word a -> a -> Integer\nfromWord = fromWordRec 0\n\nfromWordRec :: Integer -> Word a -> a -> Integer\nfromWordRec i SingleV (Left ()) = 2 * i\nfromWordRec i SingleV (Right ()) = 2 * i + 1\nfromWordRec i (DoubleV w) (hi, lo) = fromWordRec (fromWordRec i w hi) w lo\n\n-- | Convert a value of a Simplicity word type as a signed Haskell integer.\n--\n-- @'toWord' w ('fromInt' w n) = n@\nfromInt :: Word a -> a -> Integer\nfromInt SingleV (Left ()) = 0\nfromInt SingleV (Right ()) = -1\nfromInt (DoubleV w) (hi, lo) = fromWordRec (fromInt w hi) w lo\n\n-- | Convert a standard Haskell integer into a Simplicity word type.\n-- The value is take modulo 2^@('wordSize' w)@ where @w :: 'Word' a@ is the first argument.\n--\n-- @'fromWord' w ('toWord' w n) = n \\`mod\\` 'wordSize' w@\ntoWord :: Word a -> Integer -> a\ntoWord w i = evalState (go w) i\n where\n  go :: Word a -> State Integer a\n  go SingleV = do\n   i <- get\n   put (i `div` 2)\n   return $ toBit (odd i)\n  go (DoubleV w) = do\n   b <- go w\n   a <- go w\n   return (a, b)\n\nfromWord1 :: Word1 -> Integer\nfromWord1 = fromWord word1\n\nfromWord2 :: Word2 -> Integer\nfromWord2 = fromWord word2\n\nfromWord4 :: Word4 -> Integer\nfromWord4 = fromWord word4\n\nfromWord8 :: Word8 -> Integer\nfromWord8 = fromWord word8\n\nfromWord16 :: Word16 -> Integer\nfromWord16 = fromWord word16\n\nfromWord32 :: Word32 -> Integer\nfromWord32 = fromWord word32\n\nfromWord64 :: Word64 -> Integer\nfromWord64 = fromWord word64\n\nfromWord128 :: Word128 -> Integer\nfromWord128 = fromWord word128\n\nfromWord256 :: Word256 -> Integer\nfromWord256 = fromWord word256\n\nfromWord512 :: Word512 -> Integer\nfromWord512 = fromWord word512\n\nfromWord1024 :: Word1024 -> Integer\nfromWord1024 = fromWord word1024\n\nfromWord2048 :: Word2048 -> Integer\nfromWord2048 = fromWord word2048\n\nfromWord4096 :: Word4096 -> Integer\nfromWord4096 = fromWord word4096\n\nfromInt1 :: Word1 -> Integer\nfromInt1 = fromInt word1\n\nfromInt2 :: Word2 -> Integer\nfromInt2 = fromInt word2\n\nfromInt4 :: Word4 -> Integer\nfromInt4 = fromInt word4\n\nfromInt8 :: Word8 -> Integer\nfromInt8 = fromInt word8\n\nfromInt16 :: Word16 -> Integer\nfromInt16 = fromInt word16\n\nfromInt32 :: Word32 -> Integer\nfromInt32 = fromInt word32\n\nfromInt64 :: Word64 -> Integer\nfromInt64 = fromInt word64\n\nfromInt128 :: Word128 -> Integer\nfromInt128 = fromInt word128\n\nfromInt256 :: Word256 -> Integer\nfromInt256 = fromInt word256\n\nfromInt512 :: Word512 -> Integer\nfromInt512 = fromInt word512\n\nfromInt1024 :: Word1024 -> Integer\nfromInt1024 = fromInt word1024\n\nfromInt2048 :: Word2048 -> Integer\nfromInt2048 = fromInt word2048\n\nfromInt4096 :: Word4096 -> Integer\nfromInt4096 = fromInt word4096\n\ntoWord1 :: Integer -> Word1\ntoWord1 = toWord word1\n\ntoWord2 :: Integer -> Word2\ntoWord2 = toWord word2\n\ntoWord4 :: Integer -> Word4\ntoWord4 = toWord word4\n\ntoWord8 :: Integer -> Word8\ntoWord8 = toWord word8\n\ntoWord16 :: Integer -> Word16\ntoWord16 = toWord word16\n\ntoWord32 :: Integer -> Word32\ntoWord32 = toWord word32\n\ntoWord64 :: Integer -> Word64\ntoWord64 = toWord word64\n\ntoWord128 :: Integer -> Word128\ntoWord128 = toWord word128\n\ntoWord256 :: Integer -> Word256\ntoWord256 = toWord word256\n\ntoWord512 :: Integer -> Word512\ntoWord512 = toWord word512\n\ntoWord1024 :: Integer -> Word1024\ntoWord1024 = toWord word1024\n\ntoWord2048 :: Integer -> Word2048\ntoWord2048 = toWord word2048\n\ntoWord4096 :: Integer -> Word4096\ntoWord4096 = toWord word4096\n\n-- | A pair of 'Vector's of the same length that have different contents.\ndata ZipVector x a y b where\n  SingleZV :: (TyC x, TyC y) => ZipVector x x y y\n  DoubleZV :: (TyC x, TyC a, TyC y, TyC b) => ZipVector x a y b -> ZipVector x (Vector2 a) y (Vector2 b)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Ty.hs",
    "content": "{-# LANGUAGE UndecidableInstances, QuantifiedConstraints, RankNTypes, ExistentialQuantification, GADTs, TypeOperators, TypeFamilies, DeriveTraversable #-}\n-- | This module provides representations of Simplicity types in Haskell.\n--\n-- The 'TyC' class captures those Haskell types that correspond to Simplicity types.\n-- The 'Ty' data type is a value-level representation of Simplicity types.\n-- The 'TyReflect' GADT links a value-level representation of Simplicity types with corresponding Haskell types.\nmodule Simplicity.Ty\n ( TyC\n , TyReflect(..)\n , reify, reifyProxy, reifyArrow\n , equalTyReflect\n , SomeArrow(..), someArrowR, someArrowMap\n , Ty, TyF(..)\n , one, sum, prod\n , unreflect\n , SomeTy(..), reflect\n , memoCataTy\n -- ** Serialization\n , putValue, putValueR, getValue, getValueR\n -- ** Untyped Simplicity Values\n , UntypedValue(..), untypedValue, untypedValueR, castUntypedValue, castUntypedValueR\n -- ** Synonyms\n , S\n ) where\n\nimport Prelude hiding (sum, prod)\n\nimport Control.Unification.Types (Unifiable, zipMatch)\nimport Data.Functor.Fixedpoint (Fix(..))\nimport Data.Maybe (fromMaybe)\nimport Data.MemoTrie (HasTrie(..), memo)\nimport Data.Type.Equality ((:~:)(Refl))\nimport Lens.Family2 ((&), (%~))\nimport Lens.Family2.Stock (mapped, _1)\n\n-- | 'TyC' is a type class for those Haskell types that correspond to Simplicity types;\n-- specifically those composed from @()@, @'Either' a b@, and @(a, b)@.\n-- The 'ClosedClass_' superclass isn't exported preventing further instances of 'TyC'.\nclass (ClosedClass_ a, Eq a, Ord a, Read a, Show a) => TyC a where\n\n-- This class isn't exported, so subclasses of it cannot be instantiated outside this module.\nclass ClosedClass_ a where\n  reify_ :: TyReflect a\n\ninstance TyC () where\ninstance ClosedClass_ () where\n  reify_ = OneR\n\ninstance (TyC a, TyC b) => TyC (Either a b) where\ninstance (TyC a, TyC b) => ClosedClass_ (Either a b) where\n  reify_ = SumR reify_ reify_\n\ninstance (TyC a, TyC b) => TyC (a, b) where\ninstance (TyC a, TyC b) => ClosedClass_ (a, b) where\n  reify_ = ProdR reify_ reify_\n\n-- | The 'TyReflect' GADT provides a link between Haskell types correspondng to Simplicity types (i.e. members of the 'TyC' class) and values that can be manipulated by Haskell programs.\n--\n-- There is a unique value of @'TyReflect' a@ for every @a@ that corresponds to a Simplicity type.\n-- This value can be decomposed by pattern matching to get the (unique) values of 'TyRefect' that correspond to the components of the Simplicity type.\n-- For example, the unique value of @'TyReflect' ('Either' () (), ())@ is @'ProdR' ('SumR' 'OneR' 'OneR') 'OneR'@.\ndata TyReflect a where\n  OneR :: TyReflect ()\n  SumR  :: (TyC a, TyC b) => TyReflect a -> TyReflect b -> TyReflect (Either a b)\n  ProdR :: (TyC a, TyC b) => TyReflect a -> TyReflect b -> TyReflect (a, b)\n\n-- | The unique 'TyReflect' value for any given 'TyC' type.\nreify :: TyC a => TyReflect a\nreify = reify_\n\n-- | A helper function that use a proxy argument to help control the type inferred for 'reify'.\nreifyProxy :: TyC a => proxy a -> TyReflect a\nreifyProxy _ = reify\n\n-- | A helper function that use a proxy argument to help control the types inferred for 'reify'.\nreifyArrow :: (TyC a, TyC b) => proxy a b -> (TyReflect a, TyReflect b)\nreifyArrow _ = (reify, reify)\n\n-- | Decide if two 'TyReflect' values are equal or not, and if they are equal then unify their type variables.\nequalTyReflect :: TyReflect a -> TyReflect b -> Maybe (a :~: b)\nequalTyReflect OneR OneR = return Refl\nequalTyReflect (SumR a1 b1) (SumR a2 b2) = do\n  Refl <- equalTyReflect a1 a2\n  Refl <- equalTyReflect b1 b2\n  return Refl\nequalTyReflect (ProdR a1 b1) (ProdR a2 b2) = do\n  Refl <- equalTyReflect a1 a2\n  Refl <- equalTyReflect b1 b2\n  return Refl\nequalTyReflect _ _ = Nothing\n\n-- | @putValue@ produces a compact serialization of values of Simplicity types.\n-- The serialization format is simply a list of the tags of the sum types in canonical order.\n-- The type isn't serialized with the value in this format;\n-- you will need to know the original type in order to deserialize the value.\nputValue :: TyC a => a -> [Bool]\nputValue = putValueR reify\n\n-- | @putValueR@ produces a compact serialization of values of Simplicity types.\n-- The serialization format is simply a list of the tags of the sum types in canonical order.\n-- The type isn't serialized with the value in this format;\n-- you will need to know the original type in order to deserialize the value.\n--\n-- @putValue = putValueR reify@\nputValueR :: TyReflect a -> a -> [Bool]\nputValueR a x = go a x []\n where\n  go :: TyReflect a -> a -> [Bool] -> [Bool]\n  go OneR () = id\n  go (SumR a b) (Left x) = (False:) . go a x\n  go (SumR a b) (Right y) = (True:) . go b y\n  go (ProdR a b) (x, y) = go a x . go b y\n\n-- | Deserializes a Simplicity value of a given type from a stream of Bits\n--\n-- Note that the type @forall m. Monad m => m Bool -> m a@ is isomorphic to the free monad over the @X²@ functor.\n-- In other words, 'getValue' has the type of a binary branching tree with leaves containing Simplicity values of a given .\ngetValue :: (TyC a, Monad m) => m Bool -> m a\ngetValue = getValueR reify\n\n-- | Deserializes a Simplicity value of a given type from a stream of Bits\n--\n-- Note that the type @forall m. Monad m => m Bool -> m a@ is isomorphic to the free monad over the @X²@ functor.\n-- In other words, 'getValue' has the type of a binary branching tree with leaves containing Simplicity values of a given .\n--\n-- @getValue = getValueR reify@\ngetValueR :: Monad m => TyReflect a -> m Bool -> m a\ngetValueR OneR next = return ()\ngetValueR (SumR a b) next = next >>= f\n where\n  f False = Left <$> getValueR a next\n  f True = Right <$> getValueR b next\ngetValueR (ProdR a b) next = (,) <$> getValueR a next <*> getValueR b next\n\n-- | @SomeArrow arr@ captures the existential type @exists a b. (Ty a, TyC b) *> arr a b@.\ndata SomeArrow arr = forall a b. (TyC a, TyC b) => SomeArrow (arr a b)\n\ninstance (forall a b. (TyC a, TyC b) => Eq (arr a b)) => Eq (SomeArrow arr) where\n  (SomeArrow p0) == (SomeArrow p1) = fromMaybe False $ do\n    Refl <- equalTyReflect ra0 ra1\n    Refl <- equalTyReflect rb0 rb1\n    return $ p0 == p1\n   where\n    (ra0, rb0) = reifyArrow p0\n    (ra1, rb1) = reifyArrow p1\n\ninstance (forall a b. (TyC a, TyC b) => Show (arr a b)) => Show (SomeArrow arr) where\n  showsPrec d (SomeArrow p) = showParen (d > 10) $ showString \"SomeArrow \" . showsPrec 11 p\n\n-- | A pseudo-constructor for 'SomeArrow' that provides proxy arguments to help specify the type parameters.\nsomeArrowR :: (TyC a, TyC b) => proxy a -> proxy b -> arr a b -> SomeArrow arr\nsomeArrowR _ _ x = SomeArrow x\n\n-- | The functor operation on 'SomeArrow'.\nsomeArrowMap :: (forall a b. (TyC a, TyC b) => arr0 a b -> arr1 a b) -> SomeArrow arr0 -> SomeArrow arr1\nsomeArrowMap f (SomeArrow x) = SomeArrow (f x)\n\n-- | A Haskell data type for representing Simplicity types.\n-- It uses an explicit 'Fix'edpoint of the 'TyF' functor.\ntype Ty = Fix TyF\n\n-- | The functor used to define 'Ty' type.\ndata TyF a = One\n           | Sum a a\n           | Prod a a\n           deriving (Eq, Functor, Foldable, Traversable, Show)\n\ninstance Unifiable TyF where\n  zipMatch One One = Just One\n  zipMatch (Sum a1 b1) (Sum a2 b2) = Just (Sum (Right (a1, a2)) (Right (b1, b2)))\n  zipMatch (Prod a1 b1) (Prod a2 b2) = Just (Prod (Right (a1, a2)) (Right (b1, b2)))\n  zipMatch _ _ = Nothing\n\n-- | Construct the unit 'Ty' of Simplicity.\none :: Ty\none = Fix One\n\n-- | Construct the sum 'Ty' of two 'Ty's.\nsum :: Ty -> Ty -> Ty\nsum a b = Fix $ Sum a b\n\n-- | Construct the product 'Ty' of two 'Ty's.\nprod :: Ty -> Ty -> Ty\nprod a b = Fix $ Prod a b\n\n-- | Convert a 'TyReflect' value the corresponding 'Ty' value.\nunreflect :: TyReflect a -> Ty\nunreflect OneR = one\nunreflect (SumR a b) = sum (unreflect a) (unreflect b)\nunreflect (ProdR a b) = prod (unreflect a) (unreflect b)\n\n-- | SomeTy is isomorphic to Ty.\ndata SomeTy = forall a. TyC a => SomeTy (TyReflect a)\n\n-- | Convert a Ty to SomeTy.\nreflect :: Ty -> SomeTy\nreflect (Fix One) = SomeTy OneR\nreflect (Fix (Sum a b)) = case (reflect a, reflect b) of\n                            (SomeTy ra, SomeTy rb) -> SomeTy $ SumR ra rb\nreflect (Fix (Prod a b)) = case (reflect a, reflect b) of\n                             (SomeTy ra, SomeTy rb) -> SomeTy $ ProdR ra rb\n\n-- | A union of all Simplicity values without type information.\n--\n-- A single 'UntypedValue' could be successfully interpreted at multiple different Simplicity types.\n-- For example, @'LeftV' 'OneV'@ could be successfully interpreted as @'Either' () b@ for any Simplicity type @b@.\ndata UntypedValue = OneV\n                  | LeftV UntypedValue\n                  | RightV UntypedValue\n                  | PairV UntypedValue UntypedValue\n                  deriving (Eq, Show)\n\n-- | Construct an 'UntypedValue' from a (typed) Simplicity value.\nuntypedValue :: TyC a => a -> UntypedValue\nuntypedValue = untypedValueR reify\n\n-- | Construct an 'UntypedValue' from a (typed) Simplicity value.\nuntypedValueR :: TyReflect a -> a -> UntypedValue\nuntypedValueR OneR _ = OneV\nuntypedValueR (SumR a b) (Left x) = LeftV $ untypedValueR a x\nuntypedValueR (SumR a b) (Right y) = RightV $ untypedValueR b y\nuntypedValueR (ProdR a b) (x, y) = PairV (untypedValueR a x) (untypedValueR b y)\n\n-- | Attempt to interpret an UntypedValue at a given Simplicity type.\n--\n-- Interpreting any 'UntypedValue' at the @()@ type is always successful, regardless of the UntypedValue.\ncastUntypedValue :: TyC a => UntypedValue -> Maybe a\ncastUntypedValue = castUntypedValueR reify\n\n-- | Attempt to interpret an UntypedValue at a given Simplicity type.\n--\n-- Interpreting any 'UntypedValue' at the @()@ type is always successful, regardless of the UntypedValue.\ncastUntypedValueR :: TyReflect a -> UntypedValue -> Maybe a\ncastUntypedValueR OneR _ = Just ()\ncastUntypedValueR (SumR a b) (LeftV x) = Left <$> castUntypedValueR a x\ncastUntypedValueR (SumR a b) (RightV y) = Right <$> castUntypedValueR b y\ncastUntypedValueR (ProdR a b) (PairV x y) = (,) <$> castUntypedValueR a x <*> castUntypedValueR b y\ncastUntypedValueR _ _ = Nothing\n\n-- memoTyF and dememoTyF hare non-exported helper functions for the\n-- HasTrie (TyF x) instance.\nmemoTyF :: Maybe (Bool, x, x) -> TyF x\nmemoTyF Nothing              = One\nmemoTyF (Just (False, a, b)) = Sum a b\nmemoTyF (Just (True, a, b))  = Prod a b\n\ndeMemoTyF :: TyF x -> Maybe (Bool, x, x)\ndeMemoTyF One        = Nothing\ndeMemoTyF (Sum a b)  = Just (False, a, b)\ndeMemoTyF (Prod a b) = Just (True, a, b)\n\ninstance HasTrie x => HasTrie (TyF x) where\n  newtype TyF x :->: a = TyFTrie (Maybe (Bool, x, x) :->: a)\n  trie f = TyFTrie (trie (f . memoTyF))\n  untrie (TyFTrie t) = untrie t . deMemoTyF\n  enumerate (TyFTrie t) = enumerate t & mapped._1 %~ memoTyF\n\n-- MemoTy, memoTy and dememoTy hare non-exported helper types and functions for\n-- defining memoCataTy\nnewtype MemoTy = MemoTy { unMemoTy :: Ty }\n\nmemoTy :: TyF MemoTy -> MemoTy\nmemoTy x = MemoTy (Fix (unMemoTy <$> x))\n\ndeMemoTy :: MemoTy -> TyF MemoTy\ndeMemoTy (MemoTy (Fix v)) = MemoTy <$> v\n\ninstance HasTrie MemoTy where\n  newtype MemoTy :->: a = TyTrie (TyF MemoTy :->: a)\n  trie f = TyTrie (trie (f . memoTy))\n  untrie (TyTrie t) = untrie t . deMemoTy\n  enumerate (TyTrie t) = enumerate t & mapped._1 %~ memoTy\n\n-- | An implementation of 'Data.Functor.Fixedpoint.cata' for 'TyF' that is\n-- transparently memoized.\n--\n-- @'memoCataTy' = 'Data.Functor.Fixedpoint.cata'@\nmemoCataTy :: (TyF a -> a) -> Ty -> a\nmemoCataTy alg = f . MemoTy\n where\n  f = memo (alg . fmap f . deMemoTy)\n\n-- | A 'Maybe' type for Simplicity\ntype S a = Either () a\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Weight.hs",
    "content": "module Simplicity.Weight\n ( Weight, milli, milliWeight\n ) where\n\nimport Data.Fixed (Milli)\n\n-- | Simplicity CPU cost is measured in 'Weight' units, the same units as Bitcoin transaction size.\n-- Simplicity expressions are weighed to 3 decimal places of accuracy.\ntype Weight = Milli\n\n-- | Construct a weight from a value in mulliWUs.\nmilli :: Real a => a -> Weight\nmilli n = realToFrac n / 1000\n\n-- | Return a 'Weight' value as an integer in milliWUs.\nmilliWeight :: Weight -> Integer\nmilliWeight = round . (1000*)\n"
  },
  {
    "path": "Haskell/Core/Simplicity/Word.hs",
    "content": "module Simplicity.Word\n  ( Word256, Word64, Word32, Word16, Word8\n  , showHex256\n  ) where\n\nimport Data.Bits\nimport Data.Ix\nimport Data.Serialize\nimport Data.Word (Word8, Word16, Word32, Word64)\nimport Numeric (showHex)\nimport Foreign.Ptr (castPtr)\nimport Foreign.Storable\nimport Lens.Family2 ((&), (%~))\nimport Lens.Family2.Stock (_1, both_, mapped)\n\n-- | 256-bit unsigned integer type\ndata Word256 = Word256 !Word64 !Word64 !Word64 !Word64 deriving (Bounded, Eq, Ord)\n\nliftUnary op x = fromInteger (op (toInteger x))\nliftBinary op x y = fromInteger (op (toInteger x) (toInteger y))\npointwiseUnary op (Word256 a3 a2 a1 a0) = Word256 (op a3) (op a2) (op a1) (op a0)\npointwiseBinary op (Word256 a3 a2 a1 a0) (Word256 b3 b2 b1 b0) = Word256 (op a3 b3) (op a2 b2) (op a1 b1) (op a0 b0)\n\ninstance Show Word256 where\n  showsPrec p a = showsPrec p (toInteger a)\n\ninstance Read Word256 where\n  readsPrec p s = readsPrec p s & mapped._1 %~ fromInteger\n\ninstance Num Word256 where\n  (+) = liftBinary (+)\n  (-) = liftBinary (-)\n  (*) = liftBinary (*)\n  negate = liftUnary negate\n  abs = id\n  signum = liftUnary signum\n  fromInteger i = Word256 (fromInteger a3) (fromInteger a2) (fromInteger a1) (fromInteger i)\n   where\n    a1 = i `div` (2^64)\n    a2 = a1 `div` (2^64)\n    a3 = a2 `div` (2^64)\n\ninstance Real Word256 where\n  toRational a = toRational (toInteger a)\n\ninstance Integral Word256 where\n  quot = liftBinary quot\n  rem = liftBinary rem\n  div = liftBinary div\n  mod = liftBinary mod\n  quotRem a b = quotRem (toInteger a) (toInteger b) & both_ %~ fromInteger\n  divMod a b = divMod (toInteger a) (toInteger b) & both_ %~ fromInteger\n  toInteger (Word256 a3 a2 a1 a0) = toInteger a0 + 2^64*(toInteger a1 + 2^64*(toInteger a2 + 2^64*toInteger a3))\n\ninstance Enum Word256 where\n  succ a | a == maxBound = error \"Enum.succ{Word256}: tried to take `succ' of maxBound\"\n         | otherwise = liftUnary succ a\n  pred a | a == minBound = error \"Enum.pred{Word256}: tried to take `pred' of minBound\"\n         | otherwise = liftUnary pred a\n  toEnum i = fromInteger (toEnum i)\n  fromEnum a = fromEnum (toInteger a)\n  enumFrom a = enumFromTo a maxBound\n  enumFromThen a b | a <= b = enumFromThenTo a b maxBound\n                   | otherwise = enumFromThenTo a b minBound\n  enumFromTo a b = fromInteger <$> enumFromTo (toInteger a) (toInteger b)\n  enumFromThenTo a b c = fromInteger <$> enumFromThenTo (toInteger a) (toInteger b) (toInteger c)\n\ninstance Ix Word256 where\n  range (a,b) = enumFromTo a b\n  index (a,b) c = index (toInteger a, toInteger b) (toInteger c)\n  inRange (a,b) c = a <= c && c <= b\n  rangeSize (a,b) = rangeSize (toInteger a, toInteger b)\n\ninstance Bits Word256 where\n  (.&.) = pointwiseBinary (.&.)\n  (.|.) = pointwiseBinary (.|.)\n  xor = pointwiseBinary xor\n  complement = pointwiseUnary complement\n  shift a i = liftUnary (flip shift i) a\n  rotate a i = shiftL a i' .|. shiftR a (256-i')\n   where\n    i' = i `mod` 256\n  zeroBits = fromInteger 0\n  bit = bitDefault\n  testBit a = testBit (toInteger a)\n  bitSizeMaybe = Just . finiteBitSize\n  bitSize = finiteBitSize\n  isSigned _ = False\n  popCount (Word256 a3 a2 a1 a0) = popCount a3 + popCount a2 + popCount a1 + popCount a0\n\ninstance FiniteBits Word256 where\n  finiteBitSize _ = 4*64\n  countLeadingZeros (Word256 0 0 0 a0) = 3*64 + countLeadingZeros a0\n  countLeadingZeros (Word256 0 0 a1 _) = 2*64 + countLeadingZeros a1\n  countLeadingZeros (Word256 0 a2 _ _) = 64 + countLeadingZeros a2\n  countLeadingZeros (Word256 a3 _ _ _) = countLeadingZeros a3\n  countTrailingZeros (Word256 a3 0 0 0) = 3*64 + countTrailingZeros a3\n  countTrailingZeros (Word256 _ a2 0 0) = 2*64 + countTrailingZeros a2\n  countTrailingZeros (Word256 _ _ a1 0) = 64 + countTrailingZeros a1\n  countTrailingZeros (Word256 _ _ _ a0) = countTrailingZeros a0\n\ninstance Serialize Word256 where\n  put (Word256 a3 a2 a1 a0) = put a3 >> put a2 >> put a1 >> put a0\n  get = Word256 <$> get <*> get <*> get <*> get\n\n-- | Show a Word256 value as a hex string padded with leading zeros.\nshowHex256 :: Word256 -> String\nshowHex256 w = replicate (64 - length hexStr) '0' ++ hexStr\n where\n  hexStr = showHex w \"\"\n"
  },
  {
    "path": "Haskell/Elements/Simplicity/Elements/DataTypes.hs",
    "content": "{-# LANGUAGE DeriveTraversable, TupleSections #-}\n-- | This module defines the data structures that make up the signed data in a Bitcoin transaction.\nmodule Simplicity.Elements.DataTypes\n  ( Point(..)\n  , Script\n  , TxNullDatumF(..), TxNullDatum, TxNullData, txNullData\n  , Lock, Value, Entropy\n  , Confidential(..), prf_\n  , AssetWith(..), AssetWithWitness, Asset, asset, clearAssetPrf, putAsset\n  , AmountWith(..), AmountWithWitness, Amount, amount, clearAmountPrf, putAmount\n  , TokenAmountWith, TokenAmountWithWitness, TokenAmount\n  , Nonce(..)\n  , putNonce, getNonce\n  , putIssuance\n  , NewIssuance(..)\n  , Reissuance(..)\n  , Issuance\n  , Outpoint(Outpoint), opHash, opIndex, putOutpointBE\n  , UTXO(UTXO), utxoAsset, utxoAmount, utxoScript\n  , SigTxInput(SigTxInput), sigTxiPegin, sigTxiPreviousOutpoint, sigTxiTxo, sigTxiSequence, sigTxiIssuance, sigTxiAnnex, sigTxiScriptSig\n  , sigTxiIssuanceEntropy, sigTxiIssuanceAsset, sigTxiIssuanceToken\n  , TxOutput(TxOutput), txoAsset, txoAmount, txoNonce, txoScript\n  , SigTx(SigTx), sigTxVersion, sigTxIn, sigTxOut, sigTxLock\n  , putNoWitnessTx, txid\n  , TapEnv(..)\n  , txIsFinal, txLockBrokenDistance, txLockBrokenDuration\n  , calculateIssuanceEntropy, calculateAsset, calculateToken\n  , outputAmountsHash, outputNoncesHash, outputScriptsHash\n  , outputRangeProofsHash, outputSurjectionProofsHash, outputsHash, outputHash\n  , inputOutpointsHash, inputAmountsHash, inputScriptsHash, inputUtxosHash, inputUtxoHash\n  , inputSequencesHash, inputAnnexesHash, inputScriptSigsHash, inputsHash, inputHash\n  , issuanceAssetAmountsHash, issuanceTokenAmountsHash, issuanceRangeProofsHash, issuancesHash, issuanceHash, issuanceBlindingEntropyHash\n  , txHash\n  , tapleafHash, tappathHash, tapEnvHash\n  , taptweak\n  , outputFee, totalFee\n  , lBtcAsset\n  , module Simplicity.Bitcoin\n  ) where\n\nimport Control.Monad (guard, mzero)\nimport Data.Bits ((.|.))\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.Foldable (toList)\nimport qualified Data.Map as Map\nimport Data.Maybe (catMaybes, isJust)\nimport Data.Semigroup (Max(Max,getMax))\nimport Data.Serialize ( Serialize, encode\n                      , Get, get, runGetLazy, lookAhead, getWord8, getWord16le, getWord32le, getLazyByteString, isEmpty\n                      , Putter, put, putWord8, putWord64be, putWord64le, putWord32be, putWord32le, putWord16le, putLazyByteString, runPutLazy\n                      )\nimport Data.String (fromString)\nimport Data.Vector (Vector)\nimport qualified Data.Vector as V\nimport Data.Word (Word64, Word32, Word16, Word8)\nimport Lens.Family2 ((&), (.~), (^.), over, review, to, under, view)\nimport Lens.Family2.Stock (some_)\nimport Lens.Family2.Unchecked (Adapter, adapter, Traversal)\n\nimport Simplicity.Bitcoin\nimport Simplicity.Digest\nimport Simplicity.LibSecp256k1.Spec\nimport Simplicity.LibSecp256k1.Schnorr\nimport Simplicity.Word\n\njust_ f = some_ f\n\n-- | Unparsed Bitcoin Script.\n-- Script in transactions outputs do not have to be parsable, so we encode this as a raw 'Data.ByteString.ByteString'.\ntype Script = BSL.ByteString\ntype SurjectionProof = BSL.ByteString\ntype RangeProof = BSL.ByteString\n\ndata TxNullDatumF a = Immediate a\n                    | PushData a\n                    | PushData2 a\n                    | PushData4 a\n                    | OP1Negate\n                    | OPReserved\n                    | OP1\n                    | OP2\n                    | OP3\n                    | OP4\n                    | OP5\n                    | OP6\n                    | OP7\n                    | OP8\n                    | OP9\n                    | OP10\n                    | OP11\n                    | OP12\n                    | OP13\n                    | OP14\n                    | OP15\n                    | OP16\n                    deriving (Functor, Foldable, Traversable, Show)\n\ntype TxNullDatum = TxNullDatumF BSL.ByteString\ntype TxNullData = [TxNullDatum]\n\ngetTxNullDatum :: Get TxNullDatum\ngetTxNullDatum = getWord8 >>= go\n where\n  go 0x60 = return OP16\n  go 0x5f = return OP15\n  go 0x5e = return OP14\n  go 0x5d = return OP13\n  go 0x5c = return OP12\n  go 0x5b = return OP11\n  go 0x5a = return OP10\n  go 0x59 = return OP9\n  go 0x58 = return OP8\n  go 0x57 = return OP7\n  go 0x56 = return OP6\n  go 0x55 = return OP5\n  go 0x54 = return OP4\n  go 0x53 = return OP3\n  go 0x52 = return OP2\n  go 0x51 = return OP1\n  go 0x50 = return OPReserved\n  go 0x4f = return OP1Negate\n  go 0x4e = do\n    n <- getWord32le\n    PushData4 <$> getLazyByteString (fromIntegral n)\n  go 0x4d = do\n    n <- getWord16le\n    PushData2 <$> getLazyByteString (fromIntegral n)\n  go 0x4c = do\n    n <- getWord8\n    PushData <$> getLazyByteString (fromIntegral n)\n  go op | op < 0x4c = Immediate <$> getLazyByteString (fromIntegral op)\n        | otherwise = fail $ \"Serialize.get{getTxNullDatum}: \" ++ show op ++ \"is not a push-data opcode.\"\n\ntxNullData :: Script -> Maybe TxNullData\ntxNullData = either (const Nothing) Just . runGetLazy prog\n where\n  prog = do\n    0x6a <- getWord8\n    go\n  go = do\n    emp <- isEmpty\n    if emp then return [] else ((:) <$> getTxNullDatum <*> go)\n\ngetFE :: Get FE\ngetFE = fmap fe_unpack get >>= maybe mzero return\n\nputFE :: Putter FE\nputFE = put . fe_pack\n\n-- | Transaction locktime.\n-- This represents either a block height or a block time.\n-- It is encoded as a 32-bit value.\ntype Lock = Word32\n\ntype Value = Word64\n\ntype Entropy = Hash256\n\ndata Confidential prf a = Explicit a\n                        | Confidential Point prf\n                        deriving Show\n\nprf_ :: Traversal (Confidential prfA a) (Confidential prfB a) prfA prfB\nprf_ f (Confidential pt prf) = Confidential pt <$> f prf\nprf_ f (Explicit x) = pure (Explicit x)\n\nnewtype AssetWith prf = Asset (Confidential prf Hash256) deriving Show\ntype Asset = AssetWith ()\ntype AssetWithWitness = AssetWith SurjectionProof\n\nasset :: Adapter (AssetWith prfA) (AssetWith prfB) (Confidential prfA Hash256) (Confidential prfB Hash256)\nasset = adapter to fro\n where\n  to (Asset x) = x\n  fro x = (Asset x)\n\nclearAssetPrf :: AssetWith prf -> Asset\nclearAssetPrf x = x & under asset . prf_ .~ ()\n\nputAsset :: Putter Asset\nputAsset (Asset (Explicit h)) = putWord8 0x01 >> put h\nputAsset (Asset (Confidential (Point by x) _)) = putWord8 (if by then 0x0b else 0x0a) >> putFE x\n\nnewtype AmountWith prf = Amount (Confidential prf Value) deriving Show\ntype Amount = AmountWith ()\ntype AmountWithWitness = AmountWith RangeProof\n\ntype TokenAmountWith prf = AmountWith prf\ntype TokenAmount = Amount\ntype TokenAmountWithWitness = AmountWithWitness\n\namount :: Adapter (AmountWith prfA) (AmountWith prfB) (Confidential prfA Value) (Confidential prfB Value)\namount = adapter to fro\n where\n  to (Amount x) = x\n  fro x = (Amount x)\n\nclearAmountPrf :: AmountWith prf -> Amount\nclearAmountPrf x = x & under amount . prf_ .~ ()\n\nputAmount :: Putter Amount\nputAmount (Amount (Explicit v)) = putWord8 0x01 >> putWord64be v\nputAmount (Amount (Confidential (Point by x) _)) = putWord8 (if by then 0x09 else 0x08) >> putFE x\n\nnewtype Nonce = Nonce { nonce :: Either (Bool, Word256) Hash256 } deriving Show\n\ninstance Serialize Nonce where\n  put (Nonce (Right h)) = putWord8 0x01 >> put h\n  put (Nonce (Left (by, x))) = putWord8 (if by then 0x03 else 0x02) >> put x\n  get = lookAhead getWord8 >>= go\n   where\n    go 0x01 = getWord8 *> (Nonce . Right <$> get)\n    go 0x02 = Nonce . Left . (False,) <$> get\n    go 0x03 = Nonce . Left . (True,) <$> get\n    go _ = fail \"Serialize.get{Simplicity.Primitive.Elements.DataTypes.Nonce}: bad prefix.\"\n\nputMaybeConfidential :: Putter a -> Putter (Maybe a)\nputMaybeConfidential _ Nothing = putWord8 0x00\nputMaybeConfidential p (Just a) = p a\n\ngetMaybeConfidential :: Get a -> Get (Maybe a)\ngetMaybeConfidential g = lookAhead getWord8 >>= go\n where\n  go 0x00 = getWord8 *> pure Nothing\n  go _ = Just <$> g\n\nputNonce :: Putter (Maybe Nonce)\nputNonce = putMaybeConfidential put\n\ngetNonce :: Get (Maybe Nonce)\ngetNonce = getMaybeConfidential get\n\ndata NewIssuance = NewIssuance { newIssuanceContractHash :: Hash256\n                               , newIssuanceAmount :: AmountWithWitness\n                               , newIssuanceTokenAmount :: TokenAmountWithWitness\n                               } deriving Show\n\ndata Reissuance = Reissuance { reissuanceBlindingNonce :: Hash256\n                             , reissuanceEntropy :: Entropy\n                             , reissuanceAmount :: AmountWithWitness\n                             } deriving Show\n\ntype Issuance = Either NewIssuance Reissuance\n\nputIssuance :: Putter (Maybe Issuance)\nputIssuance Nothing = putWord8 0x00 >> putWord8 0x00\nputIssuance (Just x) = go x\n where\n  maybeZero (Amount (Explicit 0)) = Nothing\n  maybeZero x = Just x\n  -- We serialize the range/surjection proofs separately.\n  go (Left new) = putMaybeConfidential putAmount (maybeZero . clearAmountPrf $ newIssuanceAmount new)\n               >> putMaybeConfidential putAmount (maybeZero . clearAmountPrf $ newIssuanceTokenAmount new)\n               >> put (0 :: Word256)\n               >> put (newIssuanceContractHash new)\n               >> put (bslHash (newIssuanceAmount new ^. (under amount.prf_)))\n               >> put (bslHash (newIssuanceTokenAmount new ^. (under amount.prf_)))\n  go (Right re) = putAmount (clearAmountPrf $ reissuanceAmount re)\n               >> putWord8 0x00\n               >> put (reissuanceBlindingNonce re)\n               >> put (reissuanceEntropy re)\n               >> put (bslHash (reissuanceAmount re ^. (under amount.prf_)))\n               >> put (bslHash mempty)\n\n-- | An outpoint is an index into the TXO set.\ndata Outpoint = Outpoint { opHash :: Hash256\n                         , opIndex :: Word32\n                         } deriving Show\n\ninstance Serialize Outpoint where\n  get = Outpoint <$> get <*> getWord32le\n  put (Outpoint h i) = put h >> putWord32le i\n\n-- | Big endian serialization of an 'Outpoint'\nputOutpointBE :: Putter Outpoint\nputOutpointBE op = put (opHash op)\n                >> putWord32be (opIndex op)\n\n-- | The data type for unspent transaction outputs.\ndata UTXO = UTXO { utxoAsset :: Asset\n                 , utxoAmount :: Amount\n                 , utxoScript :: Script -- length must be strictly less than 2^32.\n                 } deriving Show\n\n-- | The data type for signed transaction inputs, including a copy of the TXO being spent.\n-- For pegins, the TXO data in 'sigTxiTxo' is synthesized.\ndata SigTxInput = SigTxInput { sigTxiPegin :: Maybe Hash256\n                             , sigTxiPreviousOutpoint :: Outpoint\n                             , sigTxiTxo :: UTXO\n                             , sigTxiSequence :: Word32\n                             , sigTxiIssuance :: Maybe Issuance\n                             , sigTxiAnnex :: Maybe BSL.ByteString\n                             , sigTxiScriptSig :: Script -- length must be strictly less than 2^32.\n                             } deriving Show\n\n-- | The data type for transaction outputs.\n-- The signed transactin output format is identical to the serialized transaction output format.\ndata TxOutput = TxOutput { txoAsset :: AssetWithWitness\n                         , txoAmount :: AmountWithWitness\n                         , txoNonce :: Maybe Nonce\n                         , txoScript :: Script -- length must be strictly less than 2^32.\n                         } deriving Show\n\n-- | The data type for transactions in the context of signatures.\n-- The data signed in a BIP 143 directly covers input values.\ndata SigTx = SigTx { sigTxVersion :: Word32\n                   , sigTxIn :: Vector SigTxInput\n                   , sigTxOut :: Vector TxOutput\n                   , sigTxLock :: Lock\n                   } deriving Show\n\n-- | Taproot specific environment data about the input being spent.\ndata TapEnv = TapEnv { tapleafVersion :: Word8\n                     , tapInternalKey :: PubKey\n                     , tappath :: [Hash256]\n                     , tapScriptCMR :: Hash256\n                     } deriving Show\n\ntxIsFinal :: SigTx -> Bool\ntxIsFinal tx = all finalSequence (sigTxIn tx)\n where\n  finalSequence sigin = sigTxiSequence sigin == maxBound\n\n-- | This function is used in a specification of broken relative timelock jets and should not be used other than for previous consensus reasons.\ntxLockBrokenDistance :: SigTx -> Word16\ntxLockBrokenDistance tx | sigTxVersion tx < 2 = 0\n                  | otherwise = getMax . foldMap distance $ sigTxIn tx\n where\n  distance sigin = case parseSequence (sigTxiSequence sigin) of\n                     Just (Left x) -> Max x\n                     _ -> mempty\n\n-- | This function is used in a specification of broken relative timelock jets and should not be used other than for previous consensus reasons.\ntxLockBrokenDuration :: SigTx -> Word16\ntxLockBrokenDuration tx | sigTxVersion tx < 2 = 0\n                        | otherwise = getMax . foldMap duration $ sigTxIn tx\n where\n  duration sigin = case parseSequence (sigTxiSequence sigin) of\n                     Just (Right x) -> Max x\n                     _ -> mempty\n\n-- | An implementation of GenerateIssuanceEntropy from Element's 'issuance.cpp'.\ncalculateIssuanceEntropy :: Outpoint -> Hash256 -> Entropy\ncalculateIssuanceEntropy op contract = ivHash $ compress noTagIv (bsHash (encode (bsHash (encode op))), contract)\n\n-- | An implementation of CalculateAsset from Element's 'issuance.cpp'.\ncalculateAsset :: Entropy -> Hash256\ncalculateAsset entropy = ivHash $ compress noTagIv (entropy, review (over le256) 0)\n\n-- | An implementation of CalculateToken from Element's 'issuance.cpp'.\ncalculateToken :: AmountWith prf -> Entropy -> Hash256\ncalculateToken amt entropy = ivHash $ compress noTagIv (entropy, review (over le256) tag)\n where\n  tag | Amount (Explicit _) <- amt = 1\n      | Amount (Confidential _ _) <- amt = 2\n\n-- | The entropy value of an issuance there is one, either given by a reissuance, or derived from a new issuance.\nsigTxiIssuanceEntropy :: SigTxInput -> Maybe Entropy\nsigTxiIssuanceEntropy txi = either mkEntropy reissuanceEntropy <$> sigTxiIssuance txi\n where\n  mkEntropy = calculateIssuanceEntropy (sigTxiPreviousOutpoint txi) . newIssuanceContractHash\n\n-- | The issued asset ID if there is an issuance.\nsigTxiIssuanceAsset :: SigTxInput -> Maybe Hash256\nsigTxiIssuanceAsset = fmap calculateAsset . sigTxiIssuanceEntropy\n\n-- | The issued token ID if there is an issuance.\nsigTxiIssuanceToken :: SigTxInput -> Maybe Hash256\nsigTxiIssuanceToken txi = calculateToken <$> amount <*> entropy\n where\n  amount = either newIssuanceAmount reissuanceAmount <$> sigTxiIssuance txi\n  entropy = sigTxiIssuanceEntropy txi\n\n-- | A hash of all 'txoAsset's and 'txoAmount's.\noutputAmountsHash :: SigTx -> Hash256\noutputAmountsHash tx = bslHash . runPutLazy $ mapM_ go (sigTxOut tx)\n where\n  go txo = putAsset (clearAssetPrf $ txoAsset txo)\n        >> putAmount (clearAmountPrf $ txoAmount txo)\n\n-- | A hash of all 'txoNonce's.\noutputNoncesHash :: SigTx -> Hash256\noutputNoncesHash tx = bslHash . runPutLazy $ mapM_ (putNonce . txoNonce) (sigTxOut tx)\n\n-- | A hash of all 'txoScript' hashes.\noutputScriptsHash :: SigTx -> Hash256\noutputScriptsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . txoScript) (sigTxOut tx)\n\n-- | A hash of all output range proof hashes.\noutputRangeProofsHash :: SigTx -> Hash256\noutputRangeProofsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . view (to txoAmount.under amount.prf_)) (sigTxOut tx)\n\n-- | A hash of all output surjection proof hashes.\noutputSurjectionProofsHash :: SigTx -> Hash256\noutputSurjectionProofsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . view (to txoAsset.under asset.prf_)) (sigTxOut tx)\n\n-- | A hash of\n--\n-- * 'outputAmountsHash'\n-- * 'outputNoncesHash'\n-- * 'outputScriptsHash'\n-- * 'outputRangeProofsHash'\n--\n-- Note that 'outputSurjectionProofsHash' is excluded.\noutputsHash :: SigTx -> Hash256\noutputsHash tx = bslHash . runPutLazy $ do\n                   put $ outputAmountsHash tx\n                   put $ outputNoncesHash tx\n                   put $ outputScriptsHash tx\n                   put $ outputRangeProofsHash tx\n                   -- outputSurjectionProofsHash omitted\n\n-- | A hash of one output's\n--\n-- * asset and amount\n-- * nonce\n-- * hash of its script\n-- * hash of its rangeproof.\n--\n-- Note that surjection proof is excluded.\noutputHash :: TxOutput -> Hash256\noutputHash txo = bslHash . runPutLazy $ do\n                   putAsset . clearAssetPrf $ txoAsset txo\n                   putAmount . clearAmountPrf $ txoAmount txo\n                   putNonce $ txoNonce txo\n                   put . bslHash $ txoScript txo\n                   put . bslHash $ view (to txoAmount.under amount.prf_) txo\n                   -- outputSurjectionProof omitted\n\n-- | Serialize an input's previous output including whether the previous input is from an pegin or not, and which parent chain if it is a pegin.\nputOutpoint :: Putter SigTxInput\nputOutpoint txi = maybePut put (sigTxiPegin txi) >> putOutpointBE (sigTxiPreviousOutpoint txi)\n where\n  maybePut _ Nothing = putWord8 0x00\n  maybePut putter (Just x) = putWord8 0x01 >> putter x\n\n-- | A hash of all 'sigTxiPegin's and 'sigTxiPreviousOutpoint's.\ninputOutpointsHash :: SigTx -> Hash256\ninputOutpointsHash tx = bslHash . runPutLazy $ mapM_ putOutpoint (sigTxIn tx)\n\n-- | A hash of all 'utxoAsset's and 'utxoAmount's.\ninputAmountsHash :: SigTx -> Hash256\ninputAmountsHash tx = bslHash . runPutLazy $ mapM_ go (sigTxIn tx)\n where\n  go txi = putAsset (clearAssetPrf . utxoAsset $ sigTxiTxo txi)\n        >> putAmount (clearAmountPrf . utxoAmount $ sigTxiTxo txi)\n\n-- | A hash of all 'utxoScript' hashes.\ninputScriptsHash :: SigTx -> Hash256\ninputScriptsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . utxoScript . sigTxiTxo) (sigTxIn tx)\n\n-- | A hash of\n--\n-- * 'inputAmountsHash'\n-- * 'inputScriptsHash'\ninputUtxosHash :: SigTx -> Hash256\ninputUtxosHash tx = bslHash . runPutLazy $ do\n                      put $ inputAmountsHash tx\n                      put $ inputScriptsHash tx\n\n-- | A hash of one utxo's\n--\n-- * asset and amount\n-- * hash of its script\ninputUtxoHash :: UTXO -> Hash256\ninputUtxoHash utxo = bslHash . runPutLazy $ do\n                   putAsset . clearAssetPrf $ utxoAsset utxo\n                   putAmount . clearAmountPrf $ utxoAmount utxo\n                   put . bslHash $ utxoScript utxo\n\n-- | A hash of all 'sigTxiSequence's.\ninputSequencesHash :: SigTx -> Hash256\ninputSequencesHash tx = bslHash . runPutLazy $ mapM_ (putWord32be . sigTxiSequence) (sigTxIn tx)\n\nputAnnex :: Putter (Maybe BSL.ByteString)\nputAnnex Nothing = putWord8 0x00\nputAnnex (Just annex) = putWord8 0x01 >> put (bslHash annex)\n\n-- | A hash of all 'sigTxiAnnex' hashes.\ninputAnnexesHash :: SigTx -> Hash256\ninputAnnexesHash tx = bslHash . runPutLazy $ mapM_ (putAnnex . sigTxiAnnex) (sigTxIn tx)\n\n-- | A hash of all 'sigTxiScriptSig' hashes.\ninputScriptSigsHash :: SigTx -> Hash256\ninputScriptSigsHash tx = bslHash . runPutLazy $ mapM_ (put . bslHash . sigTxiScriptSig) (sigTxIn tx)\n\n-- | A hash of\n--\n-- * 'inputOutpointsHash'\n-- * 'inputSequencesHash'\n-- * 'inputAnnexesHash'\n--\n-- Note that 'inputScriptSigsHash' is excluded.\ninputsHash :: SigTx -> Hash256\ninputsHash tx = bslHash . runPutLazy $ do\n                  put $ inputOutpointsHash tx\n                  put $ inputSequencesHash tx\n                  put $ inputAnnexesHash tx\n\n-- | A hash of\n--\n-- * The inputs's outpoint (including if and where the pegin came from)\n-- * The inputs's sequence number\n-- * Whether or not the input has an annex and the hash of that annex.\ninputHash :: SigTxInput -> Hash256\ninputHash txi = bslHash . runPutLazy $ do\n                  putOutpoint txi\n                  putWord32be $ sigTxiSequence txi\n                  putAnnex $ sigTxiAnnex txi\n\nputIssuanceAssetAmount :: Putter SigTxInput\nputIssuanceAssetAmount txi = maybeConfPut putAsset (Asset . Explicit <$> sigTxiIssuanceAsset txi)\n                          >> maybeConfPut putAmount (clearAmountPrf . either newIssuanceAmount reissuanceAmount <$> sigTxiIssuance txi)\n where\n  maybeConfPut _ Nothing = putWord8 0x00\n  maybeConfPut putter (Just x) = putter x\n\n-- | A hash of 'sigTxiIssuanceAsset' and either 'newIssuanceAmount' or 'reissuanceAmount' pairs as an asset-amount hash.\n--\n-- Note that \"null\" amount is hashed as if it were an explicit zero.\n--\n-- When an input has no issuance, a pair of zero bytes, @0x00 0x00@ are hashed.\nissuanceAssetAmountsHash :: SigTx -> Hash256\nissuanceAssetAmountsHash tx = bslHash . runPutLazy $ mapM_ putIssuanceAssetAmount (sigTxIn tx)\n\n\nputIssuanceTokenAmount :: Putter SigTxInput\nputIssuanceTokenAmount txi = maybeConfPut putAsset (Asset . Explicit <$> sigTxiIssuanceToken txi)\n                          >> maybeConfPut putAmount (clearAmountPrf . either newIssuanceTokenAmount (const (Amount (Explicit 0))) <$> sigTxiIssuance txi)\n where\n  maybeConfPut _ Nothing = putWord8 0x00\n  maybeConfPut putter (Just x) = putter x\n\n-- | A hash of 'sigTxiIssuanceToken' and 'newIssuanceTokenAmount' pairs as an asset-amount hash.\n--\n-- Note that \"null\" amount is hashed as if it were an explicit zero.\n--\n-- When an input has no issuance, a pair of zero bytes, @0x00 0x00@ are hashed.\nissuanceTokenAmountsHash :: SigTx -> Hash256\nissuanceTokenAmountsHash tx = bslHash . runPutLazy $ mapM_ putIssuanceTokenAmount (sigTxIn tx)\n\nputIssuanceRangeProof :: Putter (Maybe Issuance)\nputIssuanceRangeProof issuance = put (bslHash . view (just_.under amount.prf_) $ either newIssuanceAmount reissuanceAmount <$> issuance)\n                             >> put (bslHash . view (just_.under amount.prf_) $ either newIssuanceTokenAmount (const (Amount (Explicit 0))) <$> issuance)\n\n-- | A hash of all issuance range proof hashes.\nissuanceRangeProofsHash :: SigTx -> Hash256\nissuanceRangeProofsHash tx = bslHash . runPutLazy $ mapM_ (putIssuanceRangeProof . sigTxiIssuance) (sigTxIn tx)\n\nputIssuanceBlindingEntropy :: Putter (Maybe Issuance)\nputIssuanceBlindingEntropy Nothing = putWord8 0x00\nputIssuanceBlindingEntropy (Just issuance) = do putWord8 0x01\n                                                put (either (const $ review (over be256) 0) reissuanceBlindingNonce $ issuance)\n                                                put (either newIssuanceContractHash reissuanceEntropy $ issuance)\n\n-- | A hash of all 'reissuanceBlindingNonce' and either 'newIssuanceContractHash' or 'reissuanceEntropy' values.\nissuanceBlindingEntropyHash :: SigTx -> Hash256\nissuanceBlindingEntropyHash tx = bslHash . runPutLazy $ mapM_ (putIssuanceBlindingEntropy . sigTxiIssuance) (sigTxIn tx)\n\n-- | A hash of\n--\n-- * 'issuanceAssetAmountsHash'\n-- * 'issuanceTokenAmountsHash'\n-- * 'issuanceRangeProofsHash'\n-- * 'issuanceBlindingEntropyHash'\nissuancesHash :: SigTx -> Hash256\nissuancesHash tx = bslHash . runPutLazy $ do\n                     put $ issuanceAssetAmountsHash tx\n                     put $ issuanceTokenAmountsHash tx\n                     put $ issuanceRangeProofsHash tx\n                     put $ issuanceBlindingEntropyHash tx\n\n-- | A hash of\n--\n-- * If there is an issuance, the issued asset id and amount\n-- * If there is an issuance, the issued token id and amount\n-- * A hash of each of the rangeproofs\n-- * If there is an issuance, the contract hash and blinding/entropy fields\nissuanceHash :: SigTxInput -> Hash256\nissuanceHash txi = bslHash . runPutLazy $ do\n                     putIssuanceAssetAmount txi\n                     putIssuanceTokenAmount txi\n                     putIssuanceRangeProof (sigTxiIssuance txi)\n                     putIssuanceBlindingEntropy (sigTxiIssuance txi)\n\n-- | A hash of\n--\n-- * 'sigTxVersion'\n-- * 'sigTxLock'\n-- * 'inputsHash'\n-- * 'outputsHash'\n-- * 'issuancesHash'\n-- * 'outputSurjectionProofsHash'\n-- * 'inputUtxosHash'\ntxHash :: SigTx -> Hash256\ntxHash tx = bslHash . runPutLazy $ do\n              putWord32be $ sigTxVersion tx\n              putWord32be $ sigTxLock tx\n              put $ inputsHash tx\n              put $ outputsHash tx\n              put $ issuancesHash tx\n              put $ outputSurjectionProofsHash tx\n              put $ inputUtxosHash tx\n\n-- | Serialize transaction data without witness data.\n-- Mainly suitable for computing a 'txid'.\nputNoWitnessTx :: Putter SigTx\nputNoWitnessTx tx = do\n  putWord32le $ sigTxVersion tx\n  putWord8 0\n  putVarInt (V.length (sigTxIn tx))\n  mapM_ putInput (sigTxIn tx)\n  putVarInt (V.length (sigTxOut tx))\n  mapM_ putOutput (sigTxOut tx)\n  putWord32le $ sigTxLock tx\n where\n  putVarInt x | x < 0 = error \"putVarInt: negative value\"\n              | x <= 0xFC = putWord8 (fromIntegral x)\n              | x <= 0xFFFF = putWord8 0xFD >> putWord16le (fromIntegral x)\n              | x <= 0xFFFFFFFF = putWord8 0xFE >> putWord32le (fromIntegral x)\n              | x <= 0xFFFFFFFFFFFFFFFF = putWord8 0xFF >> putWord64le (fromIntegral x)\n  putInput txi = do\n    put (opHash (sigTxiPreviousOutpoint txi))\n    putWord32le (flags .|. opIndex (sigTxiPreviousOutpoint txi))\n    putVarInt (BSL.length (sigTxiScriptSig txi))\n    putLazyByteString (sigTxiScriptSig txi)\n    putWord32le (sigTxiSequence txi)\n    putIssuance (sigTxiIssuance txi)\n   where\n    issuanceFlag | isJust (sigTxiIssuance txi) = 0x80000000\n                 | otherwise = 0\n    peginFlag | isJust (sigTxiPegin txi) = 0x40000000\n              | otherwise = 0\n    flags = issuanceFlag .|. peginFlag\n    putIssuance Nothing = return ()\n    putIssuance (Just (Left new)) = do\n      put (0 :: Word256)\n      put (newIssuanceContractHash new)\n      putIssuanceAmount (clearAmountPrf (newIssuanceAmount new))\n      putIssuanceAmount (clearAmountPrf (newIssuanceTokenAmount new))\n    putIssuance (Just (Right re)) = do\n      put (reissuanceBlindingNonce re)\n      put (reissuanceEntropy re)\n      putIssuanceAmount (clearAmountPrf (reissuanceAmount re))\n      putWord8 0\n    putIssuanceAmount (Amount (Explicit 0)) = putWord8 0\n    putIssuanceAmount amt = putAmount amt\n\n  putOutput txo = do\n    putAsset (clearAssetPrf (txoAsset txo))\n    putAmount (clearAmountPrf (txoAmount txo))\n    putNonce (txoNonce txo)\n    putVarInt (BSL.length (txoScript txo))\n    putLazyByteString (txoScript txo)\n\n-- | Return the txid of the transaction.\ntxid :: SigTx -> Hash256\ntxid = bslDoubleHash . runPutLazy . putNoWitnessTx\n\n-- | A hash of\n--\n-- * 'tapleafVersion'\n-- * 'tapScriptCMR'\ntapleafHash :: TapEnv -> Hash256\ntapleafHash tapEnv = bslHash . runPutLazy $ do\n  put tag\n  put tag\n  putWord8 $ tapleafVersion tapEnv\n  putWord8 32\n  put $ tapScriptCMR tapEnv\n where\n  tag = bsHash (fromString \"TapLeaf/elements\")\n\n-- | A hash of 'tappath's.\ntappathHash :: TapEnv -> Hash256\ntappathHash tapEnv = bslHash . runPutLazy $ mapM_ put (tappath tapEnv)\n\n-- | A hash of\n--\n-- * 'tapleafHash'\n-- * 'tappathHash'\n-- * 'tapInternalKey'\ntapEnvHash :: TapEnv -> Hash256\ntapEnvHash tapEnv = bslHash . runPutLazy $ do\n              put $ tapleafHash tapEnv\n              put $ tappathHash tapEnv\n              put $ tapInternalKey tapEnv\n\n-- | Implementation of BIP-0341's taptweak function.\ntaptweak :: PubKey -> Hash256 -> Maybe PubKey\ntaptweak (PubKey internalKey) h = do\n  guard $ toInteger internalKey < fieldOrder\n  guard $ h0 < groupOrder\n  a <- scale (scalar h0) g\n  b <- decompress (Point False xkey)\n  GE x y <- gej_normalize . snd $ gej_ge_add_ex a b\n  return $ PubKey (fe_pack x)\n where\n  xkey = fe (toInteger internalKey)\n  h0 = integerHash256 . bslHash . runPutLazy $ do\n    put tag\n    put tag\n    put (fe_pack xkey)\n    put h\n  tag = bsHash (fromString \"TapTweak/elements\")\n\n-- | Decides if an output is a fee output.\n-- If so, the (explicit) assetId and (explicit) value is returned.\noutputFee :: TxOutput -> Maybe (Hash256, Value)\noutputFee txo = do\n  guard $ BSL.null (txoScript txo)\n  Explicit assetId <- Just . view (under asset) $ txoAsset txo\n  Explicit value <- Just . view (under amount) $ txoAmount txo\n  return (assetId, value)\n\n-- | Adds up all 'outputFee's to build a map from (explicit) assetId to total value.\ntotalFee :: SigTx -> Map.Map Hash256 Value\ntotalFee tx = Map.fromListWith (+) . catMaybes . map outputFee . toList $ sigTxOut tx\n\n-- | The (explicit) asset ID for liquid BTC.\n-- Note that this asset is specific to the production liquid blockchain.\nlBtcAsset :: Hash256\nlBtcAsset | result == review (over le256) 0x6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d = result\n  where\n   result = calculateAsset $ calculateIssuanceEntropy (Outpoint commit 0) btcGenesisBlock\n   bits = 0x1d00ffff\n   extraNonce = 4\n   theTimes = fromString \"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks\"\n   pubkey = runPutLazy $ do\n          putWord8 4\n          put (review (over be256) 0x678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB6)\n          put (review (over be256) 0x49F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5F)\n   opChecksig = 0xac\n   scriptsig = runPutLazy $ do\n             putWord8 4 >> putWord32le bits\n             putWord8 1 >> putWord8 extraNonce\n             putWord8 (fromIntegral $ BSL.length theTimes) >> putLazyByteString theTimes\n   scriptpubkey = runPutLazy $ do\n                putWord8 (fromIntegral $ BSL.length pubkey) >> putLazyByteString pubkey\n                putWord8 (opChecksig)\n   genesisTxId = bslDoubleHash . runPutLazy $ do\n               putWord32le 1\n               putWord8 1\n               put hash0\n               putWord32le (fromInteger (-1))\n               putWord8 (fromIntegral $ BSL.length scriptsig)\n               putLazyByteString scriptsig\n               putWord32le (fromInteger (-1))\n               putWord8 1\n               putWord64le (50 * 100000000)\n               putWord8 (fromIntegral $ BSL.length scriptpubkey)\n               putLazyByteString scriptpubkey\n               putWord32le 0\n   btcGenesisBlock = bslDoubleHash . runPutLazy $ do\n                   putWord32le 1\n                   put hash0\n                   put genesisTxId\n                   putWord32le 0x495fab29\n                   putWord32le bits\n                   putWord32le 0x7c2bac1d\n   commit = bsHash $ networkId <> fedPegScript <> signBlockScript\n   networkId = fromString \"liquidv1\"\n   fedPegScript = fromString \"745c87635b21020e0338c96a8870479f2396c373cc7696ba124e8635d41b0ea581112b678172612102675333a4e4b8fb51d9d4e22fa5a8eaced3fdac8a8cbf9be8c030f75712e6af992102896807d54bc55c24981f24a453c60ad3e8993d693732288068a23df3d9f50d4821029e51a5ef5db3137051de8323b001749932f2ff0d34c82e96a2c2461de96ae56c2102a4e1a9638d46923272c266631d94d36bdb03a64ee0e14c7518e49d2f29bc40102102f8a00b269f8c5e59c67d36db3cdc11b11b21f64b4bffb2815e9100d9aa8daf072103079e252e85abffd3c401a69b087e590a9b86f33f574f08129ccbd3521ecf516b2103111cf405b627e22135b3b3733a4a34aa5723fb0f58379a16d32861bf576b0ec2210318f331b3e5d38156da6633b31929c5b220349859cc9ca3d33fb4e68aa08401742103230dae6b4ac93480aeab26d000841298e3b8f6157028e47b0897c1e025165de121035abff4281ff00660f99ab27bb53e6b33689c2cd8dcd364bc3c90ca5aea0d71a62103bd45cddfacf2083b14310ae4a84e25de61e451637346325222747b157446614c2103cc297026b06c71cbfa52089149157b5ff23de027ac5ab781800a578192d175462103d3bde5d63bdb3a6379b461be64dad45eabff42f758543a9645afd42f6d4248282103ed1e8d5109c9ed66f7941bc53cc71137baa76d50d274bda8d5e8ffbd6e61fe9a5f6702c00fb275522103aab896d53a8e7d6433137bbba940f9c521e085dd07e60994579b64a6d992cf79210291b7d0b1b692f8f524516ed950872e5da10fb1b808b5a526dedc6fed1cf29807210386aa9372fbab374593466bc5451dc59954e90787f08060964d95c87ef34ca5bb5368ae\"\n   signBlockScript = fromString \"5b21026a2a106ec32c8a1e8052e5d02a7b0a150423dbd9b116fc48d46630ff6e6a05b92102791646a8b49c2740352b4495c118d876347bf47d0551c01c4332fdc2df526f1a2102888bda53a424466b0451627df22090143bbf7c060e9eacb1e38426f6b07f2ae12102aee8967150dee220f613de3b239320355a498808084a93eaf39a34dcd62024852102d46e9259d0a0bb2bcbc461a3e68f34adca27b8d08fbe985853992b4b104e27412102e9944e35e5750ab621e098145b8e6cf373c273b7c04747d1aa020be0af40ccd62102f9a9d4b10a6d6c56d8c955c547330c589bb45e774551d46d415e51cd9ad5116321033b421566c124dfde4db9defe4084b7aa4e7f36744758d92806b8f72c2e943309210353dcc6b4cf6ad28aceb7f7b2db92a4bf07ac42d357adf756f3eca790664314b621037f55980af0455e4fb55aad9b85a55068bb6dc4740ea87276dc693f4598db45fa210384001daa88dabd23db878dbb1ce5b4c2a5fa72c3113e3514bf602325d0c37b8e21039056d089f2fe72dbc0a14780b4635b0dc8a1b40b7a59106325dd1bc45cc70493210397ab8ea7b0bf85bc7fc56bb27bf85e75502e94e76a6781c409f3f2ec3d1122192103b00e3b5b77884bf3cae204c4b4eac003601da75f96982ffcb3dcb29c5ee419b92103c1f3c0874cfe34b8131af34699589aacec4093399739ae352e8a46f80a6f68375fae\"\n"
  },
  {
    "path": "Haskell/Elements/Simplicity/Elements/Primitive.hs",
    "content": "{-# LANGUAGE GADTs, ScopedTypeVariables #-}\n-- | This module provides the Simplicity primitives specific for Elements sidechain applications.\nmodule Simplicity.Elements.Primitive\n  ( Prim(..), primPrefix, primName\n  , PrimEnv, primEnv, envTx, envIx, envTap, envGenesisBlock\n  , primEnvHash\n  , primSem\n  -- * Re-exported Types\n  , S, Conf, PubKey\n  ) where\n\nimport Control.Arrow ((***), (+++))\nimport Control.Monad ((<=<), guard)\nimport qualified Data.ByteString.Lazy as BSL\nimport qualified Data.List as List\nimport Data.Maybe (fromMaybe, listToMaybe)\nimport qualified Data.Monoid as Monoid\nimport Data.Serialize (Get, getWord8,\n                       Putter, put, putWord8, putWord32be, putWord32le, putWord64le, runPutLazy)\nimport qualified Data.Word\nimport Data.Vector as Vector ((!?), length)\nimport Lens.Family2 (to, view, under)\nimport Lens.Family2.Stock (some_)\n\nimport Simplicity.Digest\nimport Simplicity.Elements.DataTypes\nimport qualified Simplicity.LibSecp256k1.Schnorr as Schnorr\nimport qualified Simplicity.LibSecp256k1.Spec as Schnorr\nimport Simplicity.Programs.Elements\nimport Simplicity.Programs.LibSecp256k1\nimport Simplicity.Serialization\nimport Simplicity.Ty\nimport Simplicity.Ty.Bit\nimport Simplicity.Ty.Word\n\njust_ f = some_ f\n\ndata Prim a b where\n  Version :: Prim () Word32\n  LockTime :: Prim () Word32\n  InputPegin :: Prim Word32 (S (S Word256))\n  InputPrevOutpoint :: Prim Word32 (S (Word256,Word32))\n  InputAsset :: Prim Word32 (S (Conf Word256))\n  InputAmount :: Prim Word32 (S (Conf Word64))\n  InputScriptHash :: Prim Word32 (S Word256)\n  InputSequence :: Prim Word32 (S Word32)\n  InputAnnexHash :: Prim Word32 (S (S Word256))\n  InputScriptSigHash :: Prim Word32 (S Word256)\n  ReissuanceBlinding :: Prim Word32 (S (S Word256))\n  NewIssuanceContract :: Prim Word32 (S (S Word256))\n  ReissuanceEntropy :: Prim Word32 (S (S Word256))\n  IssuanceAssetAmount :: Prim Word32 (S (S (Conf Word64)))\n  IssuanceTokenAmount :: Prim Word32 (S (S (Conf Word64)))\n  IssuanceAssetProof :: Prim Word32 (S Word256)\n  IssuanceTokenProof :: Prim Word32 (S Word256)\n  CurrentIndex :: Prim () Word32\n  TapleafVersion :: Prim () Word8\n  Tappath :: Prim Word8 (S Word256)\n  InternalKey :: Prim () PubKey\n  OutputAsset :: Prim Word32 (S (Conf Word256))\n  OutputAmount :: Prim Word32 (S (Conf Word64))\n  OutputNonce :: Prim Word32 (S (S (Conf Word256)))\n  OutputScriptHash :: Prim Word32 (S Word256)\n  OutputNullDatum :: Prim (Word32, Word32) (S (S (Either (Word2, Word256) (Either Bit Word4))))\n  OutputSurjectionProof :: Prim Word32 (S Word256)\n  OutputRangeProof :: Prim Word32 (S Word256)\n  GenesisBlockHash :: Prim () Word256\n  ScriptCMR :: Prim () Word256\n  TransactionId :: Prim () Word256\n\ninstance Eq (Prim a b) where\n  Version == Version = True\n  LockTime == LockTime = True\n  InputPegin == InputPegin = True\n  InputPrevOutpoint == InputPrevOutpoint = True\n  InputAsset == InputAsset = True\n  InputAmount == InputAmount = True\n  InputScriptHash == InputScriptHash = True\n  InputSequence == InputSequence = True\n  InputAnnexHash == InputAnnexHash = True\n  InputScriptSigHash == InputScriptSigHash = True\n  ReissuanceBlinding == ReissuanceBlinding = True\n  NewIssuanceContract == NewIssuanceContract = True\n  ReissuanceEntropy == ReissuanceEntropy = True\n  IssuanceAssetAmount == IssuanceAssetAmount = True\n  IssuanceTokenAmount == IssuanceTokenAmount = True\n  IssuanceAssetProof == IssuanceAssetProof = True\n  IssuanceTokenProof == IssuanceTokenProof = True\n  CurrentIndex == CurrentIndex = True\n  TapleafVersion == TapleafVersion = True\n  Tappath == Tappath = True\n  InternalKey == InternalKey = True\n  OutputAsset == OutputAsset = True\n  OutputAmount == OutputAmount = True\n  OutputNonce == OutputNonce = True\n  OutputScriptHash == OutputScriptHash = True\n  OutputNullDatum == OutputNullDatum = True\n  OutputSurjectionProof == OutputSurjectionProof = True\n  OutputRangeProof == OutputRangeProof = True\n  GenesisBlockHash == GenesisBlockHash = True\n  ScriptCMR == ScriptCMR = True\n  TransactionId == TransactionId = True\n  _ == _ = False\n\nprimPrefix :: String\nprimPrefix = \"Elements\"\n\n-- Consider deriving Show instead?\nprimName :: Prim a b -> String\nprimName Version = \"version\"\nprimName LockTime = \"lockTime\"\nprimName InputPegin = \"inputPegin\"\nprimName InputPrevOutpoint = \"inputPrevOutpoint\"\nprimName InputAsset = \"inputAsset\"\nprimName InputAmount = \"inputAmount\"\nprimName InputScriptHash = \"inputScriptHash\"\nprimName InputSequence = \"inputSequence\"\nprimName InputAnnexHash = \"inputAnnexHash\"\nprimName InputScriptSigHash = \"inputScriptSigHash\"\nprimName ReissuanceBlinding = \"reissuanceBlinding\"\nprimName NewIssuanceContract = \"newIssuanceContract\"\nprimName ReissuanceEntropy = \"reissuanceEntropy\"\nprimName IssuanceAssetAmount = \"issuanceAssetAmount\"\nprimName IssuanceTokenAmount = \"issuanceTokenAmount\"\nprimName IssuanceAssetProof = \"issuanceAssetProof\"\nprimName IssuanceTokenProof = \"issuanceTokenProof\"\nprimName CurrentIndex = \"currentIndex\"\nprimName TapleafVersion = \"tapleafVersion\"\nprimName Tappath = \"tappath\"\nprimName InternalKey = \"internalKey\"\nprimName OutputAsset = \"outputAsset\"\nprimName OutputAmount = \"outputAmount\"\nprimName OutputNonce = \"outputNonce\"\nprimName OutputScriptHash = \"outputScriptHash\"\nprimName OutputNullDatum = \"outputNullDatum\"\nprimName OutputSurjectionProof = \"outputSurjectionProof\"\nprimName OutputRangeProof = \"outputRangeProof\"\nprimName GenesisBlockHash = \"genesisBlockHash\"\nprimName ScriptCMR = \"scriptCMR\"\nprimName TransactionId = \"transactionId\"\n\ndata PrimEnv = PrimEnv { envTx :: SigTx\n                       , envIx :: Data.Word.Word32\n                       , envTap :: TapEnv\n                       , envGenesisBlock :: Hash256\n                       }\n\ninstance Show PrimEnv where\n  showsPrec d env = showParen (d > 10)\n                  $ showString \"primEnv \"\n                  . showsPrec 11 (envTx env)\n                  . showString \" \"\n                  . showsPrec 11 (envIx env)\n                  . showString \" \"\n                  . showsPrec 11 (envTap env)\n\nprimEnv :: SigTx -> Data.Word.Word32 -> TapEnv -> Hash256 -> Maybe PrimEnv\nprimEnv tx ix tap gen | cond = Just $ PrimEnv { envTx = tx\n                                              , envIx = ix\n                                              , envTap = tap\n                                              , envGenesisBlock = gen\n                                              }\n                      | otherwise = Nothing\n where\n  cond = fromIntegral ix < Vector.length (sigTxIn tx)\n\n-- | A hash of\n--\n-- * 'envGenesisBlock' twice (this effictively makes a tagged hash).\n-- * 'txHash'\n-- * 'tapEnvHash'\n-- * 'envIx'\n--\n-- Note: this is the hash used for the \"sig-all\" hash.\nprimEnvHash :: PrimEnv -> Hash256\nprimEnvHash env = bslHash . runPutLazy $ do\n                    put $ envGenesisBlock env\n                    put $ envGenesisBlock env\n                    put $ txHash (envTx env)\n                    put $ tapEnvHash (envTap env)\n                    putWord32be $ envIx env\n\nprimSem :: Prim a b -> a -> PrimEnv -> Maybe b\nprimSem p a env = interpret p a\n where\n  tx = envTx env\n  ix = envIx env\n  lookupInput = (sigTxIn tx !?) . fromIntegral\n  lookupOutput = (sigTxOut tx !?) . fromIntegral\n  cast :: Maybe a -> Either () a\n  cast (Just x) = Right x\n  cast Nothing = Left ()\n  element :: a -> () -> a\n  element = const\n  atInput :: (SigTxInput -> a) -> Word32 -> Either () a\n  atInput f = cast . fmap f . lookupInput . fromInteger . fromWord32\n  atOutput :: (TxOutput -> a) -> Word32 -> Either () a\n  atOutput f = cast . fmap f . lookupOutput . fromInteger . fromWord32\n  encodeHash = toWord256 . integerHash256\n  encodeConfidential enc (Explicit a) = Right (enc a)\n  encodeConfidential enc (Confidential (Point by x) ()) = Left (toBit by, toWord256 . Schnorr.fe_repr $ x)\n  encodeAsset = encodeConfidential encodeHash . view (under asset)\n  encodeAmount = encodeConfidential (toWord64 . toInteger) . view (under amount)\n  encodeNonce = cast . fmap (((toBit *** (toWord256 . toInteger)) +++ encodeHash) . nonce)\n  encodeOutpoint op = (encodeHash $ opHash op, toWord32 . fromIntegral $ opIndex op)\n  encodeKey (Schnorr.PubKey x) = toWord256 . toInteger $ x\n  encodeNullDatum (Immediate h) = Left (toWord2 0, encodeHash h)\n  encodeNullDatum (PushData h) = Left (toWord2 1, encodeHash h)\n  encodeNullDatum (PushData2 h) = Left (toWord2 2, encodeHash h)\n  encodeNullDatum (PushData4 h) = Left (toWord2 3, encodeHash h)\n  encodeNullDatum OP1Negate = Right (Left (toBit False))\n  encodeNullDatum OPReserved = Right (Left (toBit True))\n  encodeNullDatum OP1  = Right (Right (toWord4 0x0))\n  encodeNullDatum OP2  = Right (Right (toWord4 0x1))\n  encodeNullDatum OP3  = Right (Right (toWord4 0x2))\n  encodeNullDatum OP4  = Right (Right (toWord4 0x3))\n  encodeNullDatum OP5  = Right (Right (toWord4 0x4))\n  encodeNullDatum OP6  = Right (Right (toWord4 0x5))\n  encodeNullDatum OP7  = Right (Right (toWord4 0x6))\n  encodeNullDatum OP8  = Right (Right (toWord4 0x7))\n  encodeNullDatum OP9  = Right (Right (toWord4 0x8))\n  encodeNullDatum OP10 = Right (Right (toWord4 0x9))\n  encodeNullDatum OP11 = Right (Right (toWord4 0xa))\n  encodeNullDatum OP12 = Right (Right (toWord4 0xb))\n  encodeNullDatum OP13 = Right (Right (toWord4 0xc))\n  encodeNullDatum OP14 = Right (Right (toWord4 0xd))\n  encodeNullDatum OP15 = Right (Right (toWord4 0xe))\n  encodeNullDatum OP16 = Right (Right (toWord4 0xf))\n  issuanceAmount = either newIssuanceAmount reissuanceAmount\n  issuanceTokenAmount = either newIssuanceTokenAmount (const (Amount (Explicit 0)))\n  interpret Version = element . return . toWord32 . toInteger $ sigTxVersion tx\n  interpret LockTime = element . return . toWord32 . toInteger $ sigTxLock tx\n  interpret InputPegin = return . (atInput $ cast . fmap encodeHash . sigTxiPegin)\n  interpret InputPrevOutpoint = return . (atInput $ encodeOutpoint . sigTxiPreviousOutpoint)\n  interpret InputAsset = return . (atInput $ encodeAsset . utxoAsset . sigTxiTxo)\n  interpret InputAmount = return . (atInput $ encodeAmount . utxoAmount . sigTxiTxo)\n  interpret InputScriptHash = return . (atInput $ encodeHash . bslHash . utxoScript . sigTxiTxo)\n  interpret InputSequence = return . (atInput $ toWord32 . toInteger . sigTxiSequence)\n  interpret InputAnnexHash = return . (atInput $ cast . fmap (encodeHash . bslHash) . sigTxiAnnex)\n  interpret InputScriptSigHash = return . (atInput $ encodeHash . bslHash . sigTxiScriptSig)\n  interpret ReissuanceBlinding = return . (atInput $\n      cast . fmap encodeHash . (either (const Nothing) (Just . reissuanceBlindingNonce) <=< sigTxiIssuance))\n  interpret NewIssuanceContract = return . (atInput $\n      cast . fmap encodeHash . (either (Just . newIssuanceContractHash) (const Nothing) <=< sigTxiIssuance))\n  interpret ReissuanceEntropy = return . (atInput $\n      cast . fmap encodeHash . (either (const Nothing) (Just . reissuanceEntropy) <=< sigTxiIssuance))\n  interpret IssuanceAssetAmount = return . (atInput $\n      cast . fmap (encodeAmount . clearAmountPrf . issuanceAmount) . sigTxiIssuance)\n  interpret IssuanceTokenAmount = return . (atInput $\n      cast . fmap (encodeAmount . clearAmountPrf . issuanceTokenAmount) . sigTxiIssuance)\n  interpret IssuanceAssetProof = return . (atInput $ encodeHash . bslHash . view (to sigTxiIssuance.just_.to issuanceAmount.under amount.prf_))\n  interpret IssuanceTokenProof = return . (atInput $ encodeHash . bslHash . view (to sigTxiIssuance.just_.to issuanceTokenAmount.under amount.prf_))\n  interpret CurrentIndex = element . return . toWord32 . toInteger $ ix\n  interpret TapleafVersion = element . return . toWord8 . toInteger . tapleafVersion $ envTap env\n  interpret Tappath = return . cast . fmap encodeHash . listToMaybe . flip drop (tappath (envTap env)) . fromInteger . fromWord8\n  interpret InternalKey = element . return . encodeKey . tapInternalKey $ envTap env\n  interpret OutputAsset = return . (atOutput $ encodeAsset . clearAssetPrf . txoAsset)\n  interpret OutputAmount = return . (atOutput $ encodeAmount . clearAmountPrf . txoAmount)\n  interpret OutputNonce = return . (atOutput $ encodeNonce . txoNonce)\n  interpret OutputScriptHash = return . (atOutput $ encodeHash . bslHash . txoScript)\n  interpret OutputNullDatum = \\(i, j) -> return . cast $ do\n    txo <- lookupOutput . fromInteger $ fromWord32 i\n    nullData <- txNullData $ txoScript txo\n    return . cast . fmap (encodeNullDatum . fmap bslHash) . listToMaybe $ List.drop (fromInteger (fromWord32 j)) nullData\n  interpret OutputSurjectionProof = return . (atOutput $ encodeHash . bslHash . view (to txoAsset.under asset.prf_))\n  interpret OutputRangeProof = return . (atOutput $ encodeHash . bslHash . view (to txoAmount.under amount.prf_))\n  interpret GenesisBlockHash = element . return . encodeHash $ envGenesisBlock env\n  interpret ScriptCMR = element . return . encodeHash . tapScriptCMR $ envTap env\n  interpret TransactionId = element . return . encodeHash . txid $ tx\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/Dag.hs",
    "content": "{-# LANGUAGE ConstraintKinds, GADTs, RankNTypes, ScopedTypeVariables #-}\n-- | This module provides the 'sortDag' function for converting a Simplicity expression into an topologically sorted, DAG representation.\nmodule Simplicity.Dag\n  ( jetDag, jetSubst\n  , JetDag, NoJetDag\n  , pruneSubst\n  -- * Type annotated, open recursive Simplicity terms\n  , TermF(..), SimplicityDag\n  -- * Wrapped Simplicity\n  , WrappedSimplicity, unwrap\n  ) where\n\nimport Prelude hiding (fail, drop, take)\n\nimport Control.Arrow ((+++))\nimport Control.Applicative (empty)\nimport Control.Monad.Trans.State (StateT(..), evalStateT)\nimport Control.Monad.Trans.Writer (Writer, execWriter, tell)\nimport Data.Either (isLeft)\nimport Data.Foldable (toList)\nimport Data.Map.Strict ((!))\nimport qualified Data.Map.Strict as Map\nimport qualified Data.Set as Set\nimport Data.Sequence (Seq)\nimport Lens.Family2 ((&), (%~), (.~))\nimport Lens.Family2.State (use)\nimport Lens.Family2.Stock (at, some_)\n\nimport Simplicity.Digest\nimport Simplicity.Delegator\nimport Simplicity.Inference\nimport Simplicity.JetType\nimport Simplicity.MerkleRoot\nimport Simplicity.Semantics\nimport Simplicity.Tensor\nimport Simplicity.Term\n\n-- A monad used in the implementation of linearizeDag.\ntype LinearM j w a = StateT (Map.Map Hash256 Integer) (Writer (SimplicityDag [] () j w)) a\n\nexecLinearM :: LinearM j w a -> SimplicityDag [] () j w\nexecLinearM m = execWriter (evalStateT m Map.empty)\n\n-- Emit a new node and add insert it into the state's map.\ntellNode :: Hash256 -> TermF () j w Integer -> LinearM j w Integer\ntellNode h iterm = StateT go\n where\n  go map = do\n    tell $ [f <$> iterm]\n    return (sz, Map.insert h sz map)\n   where\n    sz = toInteger (Map.size map)\n    f i = sz - i -- transform indexes to offsets\n\n-- MapSet is a commutative, idempotent monoid.\nnewtype MapSet a b = MapSet { getMapSet :: Map.Map a (Set.Set b) }\n\nsingleton :: a -> b -> MapSet a b\nsingleton a b = MapSet $ Map.singleton a (Set.singleton b)\n\ninstance (Ord a, Ord b) => Semigroup (MapSet a b) where\n  (MapSet ms1) <> (MapSet ms2) = MapSet $ Map.unionWith Set.union ms1 ms2\n\ninstance (Ord a, Ord b) => Monoid (MapSet a b) where\n  mempty = MapSet Map.empty\n\n-- | A 'Simplicity' instance used with 'jetDag'.\n-- This instance merges identical typed Simplicity sub-expressions to create a DAG (directed acyclic graph) structure that represents the expression.\n--\n-- A log of branches taken during evaluation is available to facilitate pruning.\n--\n-- @'JetDag' jt@ is used to create DAGs containing jets of @'JetType' jt@ by finding subexpressions that match the jet specifications of @jt@.\ndata JetDag jt a b = Dag { dagRoot :: IdentityRoot a b\n                         , dagMap :: Map.Map Hash256 (DagMapContents jt)\n                         -- During evaluation we log a map from the IMR of Case branches taken to the CMR of the untaken branch.\n                         -- A value of 'Right hash' is the CMR of the Right branch and it is logged when the Left branch is taken.\n                         -- A value of 'Left hash' is the CMR of the Left branch and it is logged when the Right branch is taken.\n                         , dagEval :: FastEvalLog (MapSet Hash256 (Either Hash256 Hash256)) jt a b\n                         }\n\n-- Each entry in the 'dagMap' contains an untyped term with references to the map index of its subexpressions, and the 'MatcherInfo' of some 'JetType'.\ndata DagMapContents jt = DMC { dmcTerm :: UntypedTermF (SomeArrow jt) UntypedValue Hash256, dmcMatcher :: Maybe (SomeArrow (MatcherInfo jt)) }\n\n-- | A 'JetDag' instance that matches 'NoJets'.\ntype NoJetDag a b = JetDag NoJets a b\n\ndmcTerm_ f dmc = (\\x -> dmc {dmcTerm = x}) <$> f (dmcTerm dmc)\n\nrightCase_ f (Case a b c d l r) = Case a b c d l <$> f r\nrightCase_ f x = pure x\n\nleftCase_ f (Case a b c d l r) = (\\x -> Case a b c d x r) <$> f l\nleftCase_ f x = pure x\n\njust_ f = some_ f\n\npruneMap :: JetDag jt a b -> PrimEnv -> a -> Maybe (Map.Map Hash256 (DagMapContents jt))\npruneMap t env a = Map.foldrWithKey f (dagMap t) . getMapSet <$> fastEvalLog (dagEval t) env a\n where\n   f key logs | Set.null rights = let [Left cmr] = Set.elems lefts\n                                      hRoot = hiddenRoot cmr\n                               in Map.insert hRoot (DMC (uHidden cmr) Nothing)\n                                . ((at key.just_.dmcTerm_.leftCase_).~hRoot)\n              | Set.null lefts  = let [Right cmr] = Set.elems rights\n                                      hRoot = hiddenRoot cmr\n                               in Map.insert hRoot (DMC (uHidden cmr) Nothing)\n                                . ((at key.just_.dmcTerm_.rightCase_).~hRoot)\n                   | otherwise  = id\n    where\n     (lefts, rights) = Set.partition isLeft logs\n\n-- Topologically sort the 'Dag' into a list.\n-- Any jets found are condensed into 'uJet' nodes.\nlinearizeDag :: (JetType jt, TyC a, TyC b) => IdentityRoot a b -> Map.Map Hash256 (DagMapContents jt) -> SimplicityDag [] () (SomeArrow jt) UntypedValue\nlinearizeDag dagRoot dagMap = execLinearM . go . identityHash $ dagRoot\n where\n  someArrowMatcher (SomeArrow jm) = SomeArrow <$> matcher jm\n  go h = do\n    mi <- use (at h)\n    case mi of\n     Just i -> return i\n     Nothing -> case someArrowMatcher =<< dmcMatcher contents of\n                  Just jt -> tellNode h (uJet jt)\n                  Nothing -> traverse go (dmcTerm contents) >>= tellNode h\n   where\n    contents = dagMap ! h\n\n-- | A type isomorphic to @forall term. Simplicity term => term a b@ accessed by 'unwap'.\n-- Because the type @forall term. Simplicity term => term a b@ is polymorphic, it is very difficult to memoize computations that produce such a type.\n-- Internally `WrappedTerm` implements a co-yoneda transformation to provide a concrete hook for memoizing values.\ntype WrappedSimplicity = WrappedTerm Simplicity\n\ndata WrappedTerm simplicity a b where\n  (:@:) :: (forall term. simplicity term => x -> term a b) -> x -> WrappedTerm simplicity a b\n\n-- | Transform a @WrappedTerm simplicity@ to a @forall term. simplicity term => term a b@.\nunwrap :: simplicity term => WrappedTerm simplicity a b -> term a b\nunwrap (f :@: x) = f x\n\n-- Not for export.\n-- Input DAG must be well typed.\nwrapWellTypedCheck :: (JetType jt, TyC a, TyC b) => SimplicityDag Seq Ty (SomeArrow jt) UntypedValue -> WrappedSimplicity a b\nwrapWellTypedCheck dag = k :@: dag\n where\n  k x = case typeCheck x of\n          Right pass -> pass\n          Left e -> error $ \"wrapWellTypedCheck: \" ++ e\n\n-- | Find all the expressions in a term that can be replaced with jets of type @jt@.\n-- Because discounted jets are not transparent, this replacement will change the CMR of the term.\n-- In particular the CMR values passed to 'disconnect' may be different, and thus the result of\n-- evaluation could change in the presence of 'disconnect'.\njetSubst :: forall k jt a b. (JetType jt, TyC a, TyC b) => JetDag jt a b -> WrappedSimplicity a b\njetSubst t = wrapWellTypedCheck pass1\n where\n  -- The patterns should never fail as we are running type inference on terms that are already known to be well typed.\n  -- A failure of a pattern match here suggests there is an error in the type inference engine.\n  -- The first pass matches jets and wraps them in a uJet combinator to ensure their types are not simplified by the type inference pass, which could possibly destroy the structure of the jets.\n  pass1 = case typeInference t (linearizeDag (dagRoot t) (dagMap t)) of\n            Right pass -> pass\n            Left e -> error $ \"jetSubst.pass1: \" ++ e\n\n-- | Performs 'jetSubst' and then evaluates the expression in the given environment and input to prune unused case branches,\n-- which transforms some case expressions into assertions.\n-- The resulting expression should always have the same CMR as the expression that 'jetSubst' would return.\npruneSubst :: forall jt a b. (JetType jt, TyC a, TyC b) => JetDag jt a b -> PrimEnv -> a -> Maybe (WrappedSimplicity a b)\npruneSubst t env a = wrapWellTypedCheck . pass2 <$> pruneMap pass1 env a\n where\n  -- The first pass substutes jets so we can execute them using fastEval.\n  pass1 :: JetDag jt a b\n  pass1 = unwrap (jetSubst t)\n  pass2 pMap = case typeInference t (linearizeDag (dagRoot pass1) pMap) of\n                         Right pass -> pass\n                         Left e -> error $ \"jetDag.pass2: \" ++ e\n\n-- | Given a Simplicity expression, return a type annotated 'SimplicityDag', with shared subexpressions and @'JetType' jt@ jets, that is suitable for serialization using \"Simplicity.Serialization.BitString\".\n--\n-- Any discounted jets marked in the original expression are discarded and replaced with their specification.\n-- After the discounted jets are replaced, the Simplicity expression is scanned for jets matching the 'JetType' @jt@, which will introduce a new set of jets.\n-- If a different set of jets are introduced, then the 'CommitmentRoot' of the result might also not match the 'CommitmentRoot' of the input.\n-- This function invokes type inference to ensure that the type annotations are principle types (with type variables instantiated at unit types)\n-- in order to ensure maximum sharing of expressions with identical 'identityHash's.\njetDag :: forall jt a b. (JetType jt, TyC a, TyC b) => JetDag jt a b -> SimplicityDag Seq Ty (SomeArrow jt) UntypedValue\njetDag t = case typeInference t (linearizeDag (dagRoot pass1) (dagMap pass1)) of\n             Right pass -> pass\n             Left e -> error $ \"jetDag.pass2: \" ++ e\n where\n  -- The first pass inferes principle types, so that witness values are properly truncated.\n  pass1 :: JetDag jt a b\n  pass1 = unwrap (jetSubst t)\n\n-- Add an entry mapping the identity root of a case combinator to the commitment root of either the left or right branch of that case expression.\nlogRoot :: (TyC x, TyC a, TyC b, TyC c, TyC d) => (IdentityRoot (Either a b, c) d) -> (Either (CommitmentRoot (a, c) d) (CommitmentRoot (b, c) d)) -> JetDag jt (x, c) d -> JetDag jt (x, c) d\nlogRoot ir cr ~(Dag dr dm de) = Dag dr dm (fastEvalTell (singleton (identityHash ir) (commitmentRoot +++ commitmentRoot $ cr)) de)\n\n-- These combinators are used in to assist making 'Dag' instances.\nmkLeaf idComb eComb uComb =\n   Dag { dagRoot = root\n       , dagMap = Map.singleton (identityHash root) (DMC uComb (SomeArrow <$> jm))\n       , dagEval = eval\n       }\n  where\n   root = idComb\n   eval = eComb\n   jm = fastEvalMatcher eval\n\nmkUnary idComb eComb uComb t =\n   Dag { dagRoot = root\n       , dagMap = Map.insert (identityHash root) (DMC (uComb (identityHash (dagRoot t))) (SomeArrow <$> jm))\n                $ dagMap t\n       , dagEval = eval\n       }\n  where\n   root = idComb (dagRoot t)\n   eval = eComb (dagEval t)\n   jm = fastEvalMatcher eval\n\nmkBinary idComb eComb uComb s t =\n   Dag { dagRoot = root\n       , dagMap = Map.insert (identityHash root) (DMC (uComb (identityHash (dagRoot s)) (identityHash (dagRoot t))) (SomeArrow <$> jm))\n                $ union\n       , dagEval = eval\n       }\n  where\n   root = idComb (dagRoot s) (dagRoot t)\n   eval = eComb (dagEval s) (dagEval t)\n   jm = fastEvalMatcher eval\n   union = Map.union (dagMap s) (dagMap t)\n\n-- 'Dag' instances for Simplicity expressions.\ninstance JetType jt => Core (JetDag jt) where\n  iden = mkLeaf iden iden uIden\n  comp = mkBinary comp comp uComp\n  unit = mkLeaf unit unit uUnit\n  injl = mkUnary injl injl uInjl\n  injr = mkUnary injr injr uInjr\n  -- Log the branches taken by case during evaluation for pruning purposes.\n  -- A value of 'Right hash' logs the CMR of the Right branch when the Left branch is taken.\n  -- A value of 'Left hash' logs the CMR of the Left branch when the Right branch is taken.\n  match s t = result\n   where\n    result = mkBinary match match uCase (logRoot (dagRoot result) (Right . delegatorRoot . fastEvalSem $ dagEval t) s)\n                                        (logRoot (dagRoot result) (Left  . delegatorRoot . fastEvalSem $ dagEval s) t)\n  pair = mkBinary pair pair uPair\n  take = mkUnary take take uTake\n  drop = mkUnary drop drop uDrop\n\ninstance JetType jt => Assert (JetDag jt) where\n  assertl s h = Dag { dagRoot = root\n                    , dagMap = Map.insert (identityHash root) (DMC (uCase (identityHash (dagRoot s)) hRoot) (SomeArrow <$> jm))\n                             . Map.insert hRoot (DMC (uHidden h) Nothing)\n                             $ dagMap s\n                    , dagEval = eval\n                    }\n   where\n    hRoot = hiddenRoot h\n    root = assertl (dagRoot s) h\n    eval = assertl (dagEval s) h\n    jm = fastEvalMatcher eval\n  assertr h t = Dag { dagRoot = root\n                    , dagMap = Map.insert (identityHash root) (DMC (uCase hRoot (identityHash (dagRoot t))) (SomeArrow <$> jm))\n                             . Map.insert hRoot (DMC (uHidden h) Nothing)\n                             $ dagMap t\n                    , dagEval = eval\n                    }\n   where\n    hRoot = hiddenRoot h\n    root = assertr h (dagRoot t)\n    eval = assertr h (dagEval t)\n    jm = fastEvalMatcher eval\n  fail b = mkLeaf (fail b) (fail b) (uFail b)\n\ninstance Witness (JetDag jt) where\n  witness v = mkLeaf (witness v) (witness v) (uWitness (untypedValue v))\n\ninstance JetType jt => Delegate (JetDag jt) where\n  disconnect = mkBinary disconnect disconnect uDisconnect\n\ninstance JetType jt => Primitive (JetDag jt)  where\n  primitive p = mkLeaf (primitive p) (primitive p) (error \"Primitives cannot be directly serialized.  They can only be part of jet specifications.\")\n\n-- Existing jets are discarded when converting to a dag.  They are reconstructed using a jet matcher.\ninstance JetType jt => Jet (JetDag jt) where\n  jet w t = Dag { dagRoot = root\n                -- We make this identityHash point to the same subexpression as the root of t.\n                -- This lets the jet matcher match on nodes marked as jets, but otherwise the JetDag ignores marked jets.\n                , dagMap = Map.insert (identityHash root) (DMC (dmcTerm (map ! identityHash (dagRoot dag))) (SomeArrow <$> jm))\n                         $ map\n                , dagEval = eval\n                }\n   where\n    dag = t\n    root = jet w t\n    eval = jet w t\n    jm = fastEvalMatcher eval\n    map = dagMap dag\n\ninstance JetType jt => Simplicity (JetDag jt) where\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/Inference.hs",
    "content": "{-# LANGUAGE DeriveTraversable, FlexibleInstances, GADTs, MultiParamTypeClasses, RankNTypes, ScopedTypeVariables #-}\n-- | This module defines a type for Simplicity DAGs (directed acyclic graph) as well as a type checking function to convert such a DAG into a well-typed Simplicity expression.\n-- The expected progression is to first run 'typeInference' on an untyped Simplicity DAG.\n-- Then use the inferred type annotations to transform witness data into 'UntypedValue' using 'witnessData'.\n-- Finally use 'typeCheck' to create a Simplicity expression.\nmodule Simplicity.Inference\n  (\n  -- * Type checking untyped Simplicity\n    typeInference\n  , typeCheck\n  -- * Simplicity with type annotations\n  , TermF(..)\n  , UntypedTermF\n  , SimplicityDag\n  -- *  optical (like) accessors for TermF data.\n  , tyAnnotation, witnessData, jetData\n  -- * Constructors for 'UntypedTermF'.\n  , uIden, uUnit, uInjl, uInjr\n  , uTake, uDrop, uComp, uCase, uPair, uDisconnect\n  , uHidden, uWitness, uJet, uFail\n  ) where\n\nimport Prelude hiding (fail, take, drop)\n\nimport Control.Arrow ((+++), left)\nimport Control.Monad (foldM)\nimport Control.Monad.Trans (lift)\nimport Control.Monad.Trans.Except (ExceptT, catchE, runExceptT, throwE)\nimport Control.Unification (Fallible(..), UTerm(..), (=:=), applyBindingsAll, freeVar, unfreeze)\nimport Control.Unification.STVar (STBinding, STVar, runSTBinding)\nimport Control.Unification.Types (UFailure)\nimport Data.Functor.Compose (Compose(..))\nimport Data.Functor.Fixedpoint (Fix(..))\nimport Data.Sequence (Seq, (|>), (!?), empty, index, mapWithIndex, ViewR(..), viewr)\nimport Data.Traversable (foldMapDefault, fmapDefault)\nimport Data.Type.Equality ((:~:)(Refl))\nimport qualified Data.Vector.Unboxed as UV\n\nimport Simplicity.Digest\nimport Simplicity.JetType\nimport Simplicity.MerkleRoot\nimport Simplicity.Primitive\nimport Simplicity.Term\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\n-- (UTy a) is the type of Simplicity types augmented with unification variables, a.\ntype UTy v = UTerm TyF v\n\n-- Convert a Simplicity type with unification variables into a regular Ty.\n-- Any remaining unification variables are turned into unit types, hence the name 'unital'.\nunital :: UTy v -> Ty\nunital (UVar _) = one\nunital (UTerm t) = Fix (unital <$> t)\n\n-- | An open recursive type for untyped Simplicity terms with type annotations.\n-- The 'ty' parameter holds the typing annotations, which can be, for example, 'Ty', or @()@ for untyped Simplicity terms without annotations.\n-- The 'j' parameter holds the data held by 'Jet' nodes.\n-- The 'w' parameter holds the data held by 'Witness' nodes.\n-- The 'a' parameter holds the (open) recursive subexpressions.\ndata TermF ty j w a = Iden ty\n                    | Unit ty\n                    | Injl ty ty ty a\n                    | Injr ty ty ty a\n                    | Take ty ty ty a\n                    | Drop ty ty ty a\n                    | Comp ty ty ty a a\n                    | Case ty ty ty ty a a\n                    | Pair ty ty ty a a\n                    | Disconnect ty ty ty ty a a\n                    | Hidden Hash256\n                    | Witness ty ty w\n                    | Jet j\n  deriving (Functor, Foldable, Traversable)\n\ninstance (Show ty, Show j, Show w, Show a) => Show (TermF ty j w a) where\n  showsPrec p (Iden a) = showParen (10 < p) $ showString \"Iden \" . showsPrec 11 a\n  showsPrec p (Unit a) = showParen (10 < p) $ showString \"Unit \" . showsPrec 11 a\n  showsPrec p (Injl a b c t) = showParen (10 < p)\n                             $ showString \"Injl \" . showsPrec 11 a\n                             . showString \" \" . showsPrec 11 b\n                             . showString \" \" . showsPrec 11 c\n                             . showString \" \" . showsPrec 11 t\n  showsPrec p (Injr a b c t) = showParen (10 < p)\n                             $ showString \"Injr \" . showsPrec 11 a\n                             . showString \" \" . showsPrec 11 b\n                             . showString \" \" . showsPrec 11 c\n                             . showString \" \" . showsPrec 11 t\n  showsPrec p (Take a b c t) = showParen (10 < p)\n                             $ showString \"Take \" . showsPrec 11 a\n                             . showString \" \" . showsPrec 11 b\n                             . showString \" \" . showsPrec 11 c\n                             . showString \" \" . showsPrec 11 t\n  showsPrec p (Drop a b c t) = showParen (10 < p)\n                             $ showString \"Drop \" . showsPrec 11 a\n                             . showString \" \" . showsPrec 11 b\n                             . showString \" \" . showsPrec 11 c\n                             . showString \" \" . showsPrec 11 t\n  showsPrec p (Comp a b c s t) = showParen (10 < p)\n                               $ showString \"Comp \" . showsPrec 11 a\n                               . showString \" \" . showsPrec 11 b\n                               . showString \" \" . showsPrec 11 c\n                               . showString \" \" . showsPrec 11 s\n                               . showString \" \" . showsPrec 11 t\n  showsPrec p (Case a b c d s t) = showParen (10 < p)\n                                 $ showString \"Case \" . showsPrec 11 a\n                                 . showString \" \" . showsPrec 11 b\n                                 . showString \" \" . showsPrec 11 c\n                                 . showString \" \" . showsPrec 11 d\n                                 . showString \" \" . showsPrec 11 s\n                                 . showString \" \" . showsPrec 11 t\n  showsPrec p (Pair a b c s t) = showParen (10 < p)\n                               $ showString \"Pair \" . showsPrec 11 a\n                               . showString \" \" . showsPrec 11 b\n                               . showString \" \" . showsPrec 11 c\n                               . showString \" \" . showsPrec 11 s\n                               . showString \" \" . showsPrec 11 t\n  showsPrec p (Disconnect a b c d s t) = showParen (10 < p)\n                                       $ showString \"Disconnect \" . showsPrec 11 a\n                                       . showString \" \" . showsPrec 11 b\n                                       . showString \" \" . showsPrec 11 c\n                                       . showString \" \" . showsPrec 11 d\n                                       . showString \" \" . showsPrec 11 s\n                                       . showString \" \" . showsPrec 11 t\n  showsPrec p (Hidden h) = showParen (10 < p)\n                         $ showString \"Hidden \" . showsPrec 11 h\n  showsPrec p (Witness a b w) = showParen (10 < p)\n                              $ showString \"Witness \" . showsPrec 11 a\n                              . showString \" \" . showsPrec 11 b\n                              . showString \" \" . showsPrec 11 w\n  showsPrec p (Jet j) = showParen (10 < p)\n                      $ showString \"Jet \" . showsPrec 11 j\n\n-- 'FocusTy j w a ty' is isomorphic to 'TermF ty j w a'.  Its purpose is to provide functor instances to 'TermF's ty parameter.\nnewtype FocusTy j w a ty = FocusTy { unFocusTy :: TermF ty j w a }\n\ninstance Functor (FocusTy j w a)  where\n  fmap = fmapDefault\n\ninstance Foldable (FocusTy j w a) where\n  foldMap = foldMapDefault\n\ninstance Traversable (FocusTy j w a)  where\n  traverse f (FocusTy (Iden a)) = FocusTy . Iden <$> f a\n  traverse f (FocusTy (Unit a)) = FocusTy . Unit <$> f a\n  traverse f (FocusTy (Injl a b c x)) = fmap FocusTy $ Injl <$> f a <*> f b <*> f c <*> pure x\n  traverse f (FocusTy (Injr a b c x)) = fmap FocusTy $ Injr <$> f a <*> f b <*> f c <*> pure x\n  traverse f (FocusTy (Take a b c x)) = fmap FocusTy $ Take <$> f a <*> f b <*> f c <*> pure x\n  traverse f (FocusTy (Drop a b c x)) = fmap FocusTy $ Drop <$> f a <*> f b <*> f c <*> pure x\n  traverse f (FocusTy (Comp a b c x y)) = fmap FocusTy $ Comp <$> f a <*> f b <*> f c <*> pure x <*> pure y\n  traverse f (FocusTy (Case a b c d x y)) = fmap FocusTy $ Case <$> f a <*> f b <*> f c <*> f d <*> pure x <*> pure y\n  traverse f (FocusTy (Pair a b c x y)) = fmap FocusTy $ Pair <$> f a <*> f b <*> f c <*> pure x <*> pure y\n  traverse f (FocusTy (Disconnect a b c d x y)) = fmap FocusTy $ Disconnect <$> f a <*> f b <*> f c <*> f d <*> pure x <*> pure y\n  traverse f (FocusTy (Hidden x)) = pure (FocusTy (Hidden x))\n  traverse f (FocusTy (Witness a b x)) = fmap FocusTy $ Witness <$> f a <*> f b <*> pure x\n  traverse f (FocusTy (Jet j)) = pure (FocusTy (Jet j))\n\n-- | A traversal of the type annotations of 'TermF'.\ntyAnnotation :: Applicative f => (ty0 -> f ty1) -> TermF ty0 j w a -> f (TermF ty1 j w a)\ntyAnnotation f = fmap unFocusTy . traverse f . FocusTy\n\n-- | A Traversal-like operation for 'TermF' that can be use to modify witness data in the context of witnesses type annotations.\n-- The 'witnessData' is to let you take @TermF Ty j (Vector Bool) a@ values and turn them into @TermF Ty j UntypedValue a@ values\n-- by parsing witness data stored as bit vector into Simplicity values after type inference.\n-- Alternatively, 'witnessData' can help build a @TermF Ty j () a -> m Bool -> m (TermF Ty j Untyped a)@ function that parses witness data\n-- after type inference from a 'Bool' stream accessible via a monadic effect.\nwitnessData :: Applicative m => (ty -> w0 -> m w1) -> TermF ty j w0 a -> m (TermF ty j w1 a)\nwitnessData f (Iden a) = pure $ Iden a\nwitnessData f (Unit a) = pure $ Unit a\nwitnessData f (Injl a b c x) = pure $ Injl a b c x\nwitnessData f (Injr a b c x) = pure $ Injr a b c x\nwitnessData f (Take a b c x) = pure $ Take a b c x\nwitnessData f (Drop a b c x) = pure $ Drop a b c x\nwitnessData f (Comp a b c x y) = pure $ Comp a b c x y\nwitnessData f (Case a b c d x y) = pure $ Case a b c d x y\nwitnessData f (Pair a b c x y) = pure $ Pair a b c x y\nwitnessData f (Disconnect a b c d x y) = pure $ Disconnect a b c d x y\nwitnessData f (Hidden x) = pure $ Hidden x\nwitnessData f (Witness a b x) = Witness a b <$> f b x\nwitnessData f (Jet p) = pure $ Jet p\n\n-- | An (affine) traversal for the 'Jet' values of a 'TermF'.\njetData :: Applicative f => (j0 -> f j1) -> TermF ty j0 w a -> f (TermF ty j1 w a)\njetData f (Iden a) = pure $ Iden a\njetData f (Unit a) = pure $ Unit a\njetData f (Injl a b c x) = pure $ Injl a b c x\njetData f (Injr a b c x) = pure $ Injr a b c x\njetData f (Take a b c x) = pure $ Take a b c x\njetData f (Drop a b c x) = pure $ Drop a b c x\njetData f (Comp a b c x y) = pure $ Comp a b c x y\njetData f (Case a b c d x y) = pure $ Case a b c d x y\njetData f (Pair a b c x y) = pure $ Pair a b c x y\njetData f (Disconnect a b c d x y) = pure $ Disconnect a b c d x y\njetData f (Hidden x) = pure $ Hidden x\njetData f (Witness a b x) = pure $ Witness a b x\njetData f (Jet j) = Jet <$> f j\n\n-- InferenceError holds the possible errors that can occur during the 'inference' step.\ndata InferenceError s = UnificationFailure (UFailure TyF (STVar s TyF))\n                      | IndexError Int Integer\n                      | HiddenError\n                      | Overflow\n                      deriving Show\n\ninstance Fallible TyF (STVar s TyF) (InferenceError s) where\n  occursFailure v t = UnificationFailure (occursFailure v t)\n  mismatchFailure t1 t2 = UnificationFailure (mismatchFailure t1 t2)\n\n-- | A type synonym for Simplicity terms without type annotations.\ntype UntypedTermF j w a = TermF () j w a\n\n-- Constructors for untyped 'TermF'.\nuIden :: UntypedTermF j w a\nuIden = Iden ()\n\nuUnit :: UntypedTermF j w a\nuUnit = Unit ()\n\nuInjl :: a -> UntypedTermF j w a\nuInjl = Injl () () ()\n\nuInjr :: a -> UntypedTermF j w a\nuInjr = Injr () () ()\n\nuTake :: a -> UntypedTermF j w a\nuTake = Take () () ()\n\nuDrop :: a -> UntypedTermF j w a\nuDrop = Drop () () ()\n\nuComp :: a -> a -> UntypedTermF j w a\nuComp = Comp () () ()\n\nuCase :: a -> a -> UntypedTermF j w a\nuCase = Case () () () ()\n\nuPair :: a -> a -> UntypedTermF j w a\nuPair = Pair () () ()\n\nuDisconnect :: a -> a -> UntypedTermF j w a\nuDisconnect = Disconnect () () () ()\n\nuHidden :: Hash256 -> UntypedTermF j w a\nuHidden = Hidden\n\nuWitness :: w -> UntypedTermF j w a\nuWitness = Witness () ()\n\nuJet :: j -> UntypedTermF j w a\nuJet = Jet\n\n-- | :TODO: NOT YET IMPLEMENTED\nuFail :: Block512 -> UntypedTermF j w a\nuFail = error \"uFail: :TODO: NOT YET IMPLEMENTED\"\n\n-- Given a @'UTy' v@ annotated Simplicity 'TermF', return the implied input and output types given the annotations.\ntermFArrow :: Monad m => TermF (UTy v) (SomeArrow j) w a -> ExceptT (InferenceError s) m (UTy v, UTy v)\ntermFArrow (Iden a) = return (a, a)\ntermFArrow (Unit a) = return (a, UTerm One)\ntermFArrow (Injl a b c _) = return (a, UTerm (Sum b c))\ntermFArrow (Injr a b c _) = return (a, UTerm (Sum b c))\ntermFArrow (Take a b c _) = return (UTerm (Prod a b), c)\ntermFArrow (Drop a b c _) = return (UTerm (Prod a b), c)\ntermFArrow (Comp a b c _ _) = return (a, c)\ntermFArrow (Case a b c d _ _) = return (UTerm (Prod (UTerm (Sum a b)) c), d)\ntermFArrow (Pair a b c _ _) = return (a, UTerm (Prod b c))\ntermFArrow (Disconnect a b c d _ _) = return (a, UTerm (Prod b d))\ntermFArrow (Hidden _) = throwE HiddenError\ntermFArrow (Witness a b _) = return (a, b)\ntermFArrow (Jet (SomeArrow j)) = return (unfreeze (unreflect ra), unfreeze (unreflect rb))\n where\n  (ra, rb) = reifyArrow j\n\n-- | Simplicity terms with explicit sharing of subexpressions to form a topologically sorted DAG (directed acyclic graph).\n--\n-- Every node in an Simplicity expression is an element of a finitary container with indices that reference the relative locations of their child subexpressions within that container.\n-- This reference is the difference in positions between referring node's position and the referred node's position.\n-- The number @1@ is a reference to the immediately preceding node. The number @0@ is not allowed as it would imply a node is referring to itself.\n--\n-- The last element of the vector is the root of the Simplicity expression DAG.\n--\n-- Invariant:\n--\n-- @\n--     0 \\<= /i/ && /i/ \\< 'Foldable.length' /v/ ==> 'Foldable.all' (\\\\x -> 0 < x && x <= /i/) ('Foldable.toList' /v/ '!!' /i/)\n-- @\ntype SimplicityDag f ty j w = f (TermF ty j w Integer)\n\n-- 'inference' takes a 'SimplicityDag' and adds suitiable type annotations to the nodes in the DAG as well as unification constraints.\n-- This can cause unification failures, however the occurs check isn't performed in this step.\n-- This function also checks that the provided DAG is sorted in topological order.\ninference :: Foldable f => SimplicityDag f x (SomeArrow j) w ->\n             ExceptT (InferenceError s) (STBinding s) (Seq (TermF (UTy (STVar s TyF)) (SomeArrow j) w Int))\ninference = foldM loop empty\n where\n  tyWord256 = unreflect (reify :: TyReflect Word256)\n  loop :: Seq (TermF (UTy (STVar s TyF)) (SomeArrow j) w Int)\n       -> TermF x (SomeArrow j) w Integer\n       -> ExceptT (InferenceError s) (STBinding s) (Seq (TermF (UTy (STVar s TyF)) (SomeArrow j) w Int))\n  loop output node = (output |>) <$> go node\n   where\n    fresh :: ExceptT (InferenceError s) (STBinding s) (UTy (STVar s TyF))\n    fresh = UVar <$> lift freeVar\n    lenOutput = length output\n    lookup i | i <= toInteger (maxBound :: Int) = maybe (throwE (IndexError lenOutput i)) return (output !? (lenOutput - fromInteger i))\n             | otherwise = throwE Overflow\n    go (Iden _) = Iden <$> fresh\n    go (Unit _) = Unit <$> fresh\n    go (Injl _ _ _ it) = do\n      (a,b) <- termFArrow =<< lookup it\n      c <- fresh\n      return (Injl a b c (fromInteger it))\n    go (Injr _ _ _ it) = do\n      (a,c) <- termFArrow =<< lookup it\n      b <- fresh\n      return (Injr a b c (fromInteger it))\n    go (Take _ _ _ it) = do\n      (a,c) <- termFArrow =<< lookup it\n      b <- fresh\n      return (Take a b c (fromInteger it))\n    go (Drop _ _ _ it) = do\n      (b,c) <- termFArrow =<< lookup it\n      a <- fresh\n      return (Drop a b c (fromInteger it))\n    go (Comp _ _ _ is it) = do\n      (a,b0) <- termFArrow =<< lookup is\n      (b1,c) <- termFArrow =<< lookup it\n      b <- b0 =:= b1\n      return (Comp a b c (fromInteger is) (fromInteger it))\n    go (Case _ _ _ _ is it) = do\n      a <- fresh\n      b <- fresh\n      c <- fresh\n      d <- fresh\n      ignoreHidden $ do\n        (ac,d0) <- termFArrow =<< lookup is\n        _ <- UTerm (Prod a c) =:= ac\n        _ <- d =:= d0\n        return ()\n      ignoreHidden $ do\n        (bc,d1) <- termFArrow =<< lookup it\n        _ <- UTerm (Prod b c) =:= bc\n        _ <- d =:= d1\n        return ()\n      return (Case a b c d (fromInteger is) (fromInteger it))\n     where\n      ignoreHidden m = catchE m handler\n       where\n        handler HiddenError = return ()\n        handler e = throwE e\n    go (Pair _ _ _ is it) = do\n      (a0,b) <- termFArrow =<< lookup is\n      (a1,c) <- termFArrow =<< lookup it\n      a <- a0 =:= a1\n      return (Pair a b c (fromInteger is) (fromInteger it))\n    go (Disconnect _ _ _ _ is it) = do\n      (aw,bc) <- termFArrow =<< lookup is\n      (c,d) <- termFArrow =<< lookup it\n      a <- fresh\n      b <- fresh\n      _ <- UTerm (Prod (unfreeze tyWord256) a) =:= aw\n      _ <- UTerm (Prod b c) =:= bc\n      return (Disconnect a b c d (fromInteger is) (fromInteger it))\n    go (Hidden h) = pure (Hidden h)\n    go (Witness _ _ w) = Witness <$> fresh <*> fresh <*> pure w\n    go (Jet j) = pure (Jet j)\n\n-- Given the output of 'inference', execute unification and return the container of type annotated Simplicity nodes.\n-- Any free type variables left over after unification are instantiated at the unit type.\n-- Errors, such as unification errors or occurs errors are returned as 'String's.\nrunUnification :: Traversable t => (forall s. ExceptT (InferenceError s) (STBinding s) (t (TermF (UTy (STVar s TyF)) j w i))) -> Either String (t (TermF Ty j w i))\nrunUnification mv = runSTBinding $ left show <$> runExceptT (bindV mv)\n where\n  bindV :: Traversable t => ExceptT (InferenceError s) (STBinding s) (t (TermF (UTy (STVar s TyF)) j w i)) -> ExceptT (InferenceError s) (STBinding s) (t (TermF Ty j w i))\n  bindV mv = do\n    v <- mv\n    bv <- applyBindingsAll (Compose (FocusTy <$> v))\n    return . fmap unFocusTy . getCompose $ unital <$> bv\n\n-- | Given a 'SimplicityDag', throw away the existing type annotations, if any, and run type inference to compute a new set of type annotations.\n-- The Simplicity types, @a@ and @b@, provides further constraints for the Simplicity expression for the 'SimplicityDag'.\n-- If type inference fails, such as a unification error or an occurs error, return an error message.\ntypeInference :: forall proxy a b f x j w. (Foldable f, TyC a, TyC b) => proxy a b -> SimplicityDag f x (SomeArrow j) w -> Either String (SimplicityDag Seq Ty (SomeArrow j) w)\ntypeInference p v = fmap (fmap toInteger) <$> runUnification inferenced\n where\n  inferenced :: forall s. ExceptT (InferenceError s) (STBinding s) (Seq (TermF (UTy (STVar s TyF)) (SomeArrow j) w Int))\n  inferenced = do\n    ev <- inference v\n    _ <- case viewr ev of\n        EmptyR -> return ()\n        _ :> end -> do\n          (a1, b1) <- termFArrow end\n          let (a0, b0) = reifyArrow p\n          _ <- a1 =:= unfreeze (unreflect a0)\n          _ <- b1 =:= unfreeze (unreflect b0)\n          return ()\n    return ev\n\n-- Note: we could make a variant of this function taking a @SimplicityDag Seq Ty (SomeArrow JetSpec) UntypedValue@ argument if that is needed, where\n--\n-- @\n--    newtype JetSpec a b = JetSpec (forall term. (Assert term, Primitive term) => term a b)\n-- @\n--\n-- | Transform a well-typed-annotated 'SimplicityDag' into a Simplicity expression of a specified type.\n--\n-- 'Jet' nodes must be contain @'SomeArrow' 'jt'@ value for a 'JetType'.\n-- 'Witness' nodes must contain 'UntypedValue's.\n--\n-- If type checking fails, return an error message.\n--\n-- Note: The one calling 'typeCheck' determines the input and output Simplicity types of the resulting Simplicity expression.\n-- They are __not__ inferered from the DAG input.\n-- Instead the types @a@ and @b@ are used as constraints during type inference.\ntypeCheck :: forall term jt a b. (Simplicity term, JetType jt, TyC a, TyC b) => SimplicityDag Seq Ty (SomeArrow jt) UntypedValue -> Either String (term a b)\ntypeCheck s = result\n where\n  resultProxy = let Right x = result in undefined `asTypeOf` x\n  result = case viewr typeCheckedDag of\n    _ :> Right (SomeArrow t) -> maybe (error \"Simplicity.Inference.typeCheck: unexpected mismatched type at end.\") return $ do\n                                 let (ra, rb) = reifyArrow t\n                                 let (a0, b0) = reifyArrow resultProxy\n                                 Refl <- equalTyReflect ra a0\n                                 Refl <- equalTyReflect rb b0\n                                 return t\n    _ :> Left s -> Left s\n    EmptyR -> Left \"Simplicity.Inference.typeCheck: empty vector input.\"\n   where\n    assertEqualTyReflect a b = maybe err Right (equalTyReflect a b)\n     where\n      err = Left \"Simplicity.Inference.typeCheck: unexpected mismatched type\"\n    typeCheckedDag = mapWithIndex (\\i -> left (++ \" at index \" ++ show i ++ \".\") . typeCheckTermIx i) s\n    typeCheckTermIx :: Int -> TermF Ty (SomeArrow jt) UntypedValue Integer -> Either String (SomeArrow term)\n    typeCheckTermIx i = typeCheckTerm . fmap fromInteger\n     where\n      lookup j = index typeCheckedDag (i - j)\n      typeCheckTerm (Iden a) = case reflect a of\n                                 SomeTy ra -> return (someArrowR ra ra iden)\n      typeCheckTerm (Unit a) = case reflect a of\n                                 SomeTy ra -> return (someArrowR ra OneR unit)\n      typeCheckTerm (Injl a b c it) = case (reflect a, reflect b, reflect c) of\n                                       (SomeTy ra, SomeTy rb, SomeTy rc) -> do\n                                         SomeArrow t <- lookup it\n                                         let (ra0, rb0) = reifyArrow t\n                                         Refl <- assertEqualTyReflect ra ra0\n                                         Refl <- assertEqualTyReflect rb rb0\n                                         return (someArrowR ra (SumR rb rc) (injl t))\n      typeCheckTerm (Injr a b c it) = case (reflect a, reflect b, reflect c) of\n                                       (SomeTy ra, SomeTy rb, SomeTy rc) -> do\n                                         SomeArrow t <- lookup it\n                                         let (ra0, rc0) = reifyArrow t\n                                         Refl <- assertEqualTyReflect ra ra0\n                                         Refl <- assertEqualTyReflect rc rc0\n                                         return (someArrowR ra (SumR rb rc) (injr t))\n      typeCheckTerm (Take a b c it) = case (reflect a, reflect b, reflect c) of\n                                       (SomeTy ra, SomeTy rb, SomeTy rc) -> do\n                                         SomeArrow t <- lookup it\n                                         let (ra0, rc0) = reifyArrow t\n                                         Refl <- assertEqualTyReflect ra ra0\n                                         Refl <- assertEqualTyReflect rc rc0\n                                         return (someArrowR (ProdR ra rb) rc (take t))\n      typeCheckTerm (Drop a b c it) = case (reflect a, reflect b, reflect c) of\n                                       (SomeTy ra, SomeTy rb, SomeTy rc) -> do\n                                         SomeArrow t <- lookup it\n                                         let (rb0, rc0) = reifyArrow t\n                                         Refl <- assertEqualTyReflect rb rb0\n                                         Refl <- assertEqualTyReflect rc rc0\n                                         return (someArrowR (ProdR ra rb) rc (drop t))\n      typeCheckTerm (Comp a b c is it) = case (reflect a, reflect b, reflect c) of\n                                          (SomeTy ra, SomeTy rb, SomeTy rc) -> do\n                                            SomeArrow s <- lookup is\n                                            SomeArrow t <- lookup it\n                                            let (ra0, rb0) = reifyArrow s\n                                            let (rb1, rc1) = reifyArrow t\n                                            Refl <- assertEqualTyReflect ra ra0\n                                            Refl <- assertEqualTyReflect rb rb0\n                                            Refl <- assertEqualTyReflect rb rb1\n                                            Refl <- assertEqualTyReflect rc rc1\n                                            return (someArrowR ra rc (comp s t))\n      typeCheckTerm (Case a b c d is it) | Hidden hs <- index s (i - is) =\n                                             case (reflect a, reflect b, reflect c, reflect d) of\n                                               (SomeTy ra, SomeTy rb, SomeTy rc, SomeTy rd) -> do\n                                                 SomeArrow t <- lookup it\n                                                 let (rbc0, rd0) = reifyArrow t\n                                                 case rbc0 of\n                                                   ProdR rb0 rc0 -> do\n                                                     Refl <- assertEqualTyReflect rb rb0\n                                                     Refl <- assertEqualTyReflect rc rc0\n                                                     Refl <- assertEqualTyReflect rd rd0\n                                                     return (someArrowR (ProdR (SumR ra rb) rc) rd (assertr hs t))\n                                         | Hidden ht <- index s (i - it) =\n                                             case (reflect a, reflect b, reflect c, reflect d) of\n                                               (SomeTy ra, SomeTy rb, SomeTy rc, SomeTy rd) -> do\n                                                 SomeArrow s <- lookup is\n                                                 let (rac0, rd0) = reifyArrow s\n                                                 case rac0 of\n                                                   ProdR ra0 rc0 -> do\n                                                     Refl <- assertEqualTyReflect ra ra0\n                                                     Refl <- assertEqualTyReflect rc rc0\n                                                     Refl <- assertEqualTyReflect rd rd0\n                                                     return (someArrowR (ProdR (SumR ra rb) rc) rd (assertl s ht))\n                                         | otherwise = case (reflect a, reflect b, reflect c, reflect d) of\n                                                        (SomeTy ra, SomeTy rb, SomeTy rc, SomeTy rd) -> do\n                                                          SomeArrow s <- lookup is\n                                                          SomeArrow t <- lookup it\n                                                          let (rac0, rd0) = reifyArrow s\n                                                          let (rbc1, rd1) = reifyArrow t\n                                                          case (rac0, rbc1) of\n                                                            (ProdR ra0 rc0, ProdR rb1 rc1) -> do\n                                                              Refl <- assertEqualTyReflect ra ra0\n                                                              Refl <- assertEqualTyReflect rb rb1\n                                                              Refl <- assertEqualTyReflect rc rc0\n                                                              Refl <- assertEqualTyReflect rc rc1\n                                                              Refl <- assertEqualTyReflect rd rd0\n                                                              Refl <- assertEqualTyReflect rd rd1\n                                                              return (someArrowR (ProdR (SumR ra rb) rc0) rd0 (match s t))\n      typeCheckTerm (Pair a b c is it) = case (reflect a, reflect b, reflect c) of\n                                          (SomeTy ra, SomeTy rb, SomeTy rc) -> do\n                                            SomeArrow s <- lookup is\n                                            SomeArrow t <- lookup it\n                                            let (ra0, rb0) = reifyArrow s\n                                            let (ra1, rc1) = reifyArrow t\n                                            Refl <- assertEqualTyReflect ra ra0\n                                            Refl <- assertEqualTyReflect ra ra1\n                                            Refl <- assertEqualTyReflect rb rb0\n                                            Refl <- assertEqualTyReflect rc rc1\n                                            return (someArrowR ra0 (ProdR rb rc) (pair s t))\n      typeCheckTerm (Disconnect a b c d is it) = case (reflect a, reflect b, reflect c, reflect d) of\n                                                  (SomeTy ra, SomeTy rb, SomeTy rc, SomeTy rd) -> do\n                                                    SomeArrow s <- lookup is\n                                                    SomeArrow t <- lookup it\n                                                    let (rc1, rd1) = reifyArrow t\n                                                    case reifyArrow s of\n                                                      ((ProdR rw0 ra0), (ProdR rb0 rc0)) -> do\n                                                        Refl <- assertEqualTyReflect (reify :: TyReflect Word256) rw0\n                                                        Refl <- assertEqualTyReflect ra ra0\n                                                        Refl <- assertEqualTyReflect rb rb0\n                                                        Refl <- assertEqualTyReflect rc rc0\n                                                        Refl <- assertEqualTyReflect rc rc1\n                                                        Refl <- assertEqualTyReflect rd rd1\n                                                        return (someArrowR ra (ProdR rb rd) (disconnect s t))\n      typeCheckTerm (Hidden _) = Left \"Simplicity.Inference.typeCheck: encountered illegal use of Hidden node\"\n      typeCheckTerm (Witness a b w) = case (reflect a, reflect b) of\n                                       (SomeTy ra, SomeTy rb) -> do\n                                        vb <- maybe err return $ castUntypedValue w\n                                        return (someArrowR ra rb (witness vb))\n       where\n        err = Left \"Simplicity.Inference.typeCheck: decode error in Witness value\"\n      typeCheckTerm (Jet (SomeArrow j)) = return . SomeArrow $ asJet j\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/JetType.hs",
    "content": "{-# LANGUAGE EmptyCase, EmptyDataDecls, EmptyDataDeriving, FlexibleContexts, TypeFamilies #-}\n-- | This modules defines the 'JetType' class, and provides the trivial empty instance of this class, 'NoJets'.\nmodule Simplicity.JetType\n  ( JetType(..)\n  , asJet\n  , NoJets(..)\n-- * Reexports\n  , Weight\n  ) where\n\nimport Control.Arrow (runKleisli)\nimport Control.Monad.Trans.Reader (runReaderT)\nimport Data.Kind (Type)\nimport Data.Void (Void, vacuous)\n\nimport Simplicity.Primitive\nimport Simplicity.Serialization\nimport Simplicity.Tensor\nimport Simplicity.Term\nimport Simplicity.Weight\n\n-- | A 'JetType' is a data structure that represents a set of known jets.\n-- Every known jet has a 'specification' which is defined by some Simplicity expression (see 'Jet').\n--\n-- Each 'JetType' has an associated 'MatcherInfo' type that interprets Simplicity with jet expressions to\n-- summarise a set of data needed to determine what jet, if any, a particular expression is.\n-- Typically the 'MatcherInfo' consists of a 'Simplicity.MerkleRoot.IdentityRoot' value.\n-- The 'matcher' function uses this interpretation to decide which known jet, a given Simplicity expression is, if any.\n--\n-- The 'implemenation' must match the 'specification' and is designed to be directly implemented using jets.\n--\n-- 'putJetBit' and 'getJetBit' provide canonical serialization and deserialization methods for the 'JetType'\n-- (see \"Simplicity.Serialization\").\n--\n-- We require that given an expression @e :: forall term. ('Assert' term, 'Primitive' term) => term a b@,\n--\n-- if\n--\n-- @\n--     'matcher' e === Just j\n-- @\n--\n-- then\n--\n-- @\n--     'Simplicity.Semantics.sem' ('specification' j) === 'Simplicity.Semantics.sem' e\n-- @\n--\n-- The jetted 'implementation' is required to match the specification.\n--\n-- @\n--     'implementation' j === 'Simplicity.Semantics.sem' ('specification' j)\n-- @\n--\n-- We also require that serialized values can be deserialized:\n--\n-- @\n--     'Simplicity.Serialization.evalStreamWithError' 'getJetBit' l === Right ('SomeArrow' j)\n-- @\n--\n-- if and only if\n--\n-- @\n--     'putJetBit' j === (l ++)\n-- @\nclass (Assert (MatcherInfo jt), Primitive (MatcherInfo jt)) => JetType jt where\n  type MatcherInfo jt :: Type -> Type -> Type\n  specification :: (TyC a, TyC b, Assert term, Primitive term) => jt a b -> term a b\n  implementation :: (TyC a, TyC b) => jt a b -> PrimEnv -> a -> Maybe b\n  implementation jt = flip $ runReaderT . runKleisli (specification jt)\n  matcher :: (TyC a, TyC b) => MatcherInfo jt a b -> Maybe (jt a b)\n  getJetBit :: Monad m => m Void -> m Bool -> m (SomeArrow jt)\n  putJetBit :: (TyC a, TyC b) => jt a b -> DList Bool\n  jetCost :: (TyC a, TyC b) => jt a b -> Weight\n\n-- | Generate a 'Jet' using the 'jetCost' and 'specification' of a 'JetType'.\nasJet :: (JetType jt, Jet term, TyC a, TyC b) => jt a b -> term a b\nasJet jt = jet (jetCost jt) (specification jt)\n\n-- | 'NoJets' is an empty type that is an instance of 'JetType'.\n-- It allows one not to match any jets at all.\ndata NoJets a b deriving (Eq, Show)\n\ninstance JetType NoJets where\n  type MatcherInfo NoJets = Unit\n  specification noJets = case noJets of {}\n  matcher _ = Nothing\n  getJetBit abort next = vacuous abort\n  putJetBit noJets = case noJets of {}\n  jetCost noJets = case noJets of {}\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/Primitive.hsig",
    "content": "signature Simplicity.Primitive where\n\nimport Data.Serialize (Get, Putter)\nimport Data.Word (Word8)\n\nimport Simplicity.Serialization (DList)\nimport Simplicity.Ty\n\ndata Prim a b\n\nprimPrefix :: String\nprimName :: Prim a b -> String\n\ndata PrimEnv\n\nprimSem :: Prim a b -> a -> PrimEnv -> Maybe b\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/Semantics.hs",
    "content": "-- | This module provides the functional semantics of the full 'Simplicity' language.\n-- The 'Semantics' arrow is an instance of the 'Simplicity' class and 'sem' evaluates terms of the full Simplicity language.\n-- The 'fastEval' implements the evaluation using the jets from the specified 'JetType'.\nmodule Simplicity.Semantics\n ( Semantics, sem\n , FastEval, fastEval\n , FastEvalLog(..), fastEvalLog, fastEvalTell\n , PrimEnv\n ) where\n\nimport Prelude hiding (drop, take, fail)\n\nimport Control.Arrow (Kleisli(..), first)\nimport Control.Monad.Reader (ReaderT(..))\nimport Control.Monad.Trans.Class (lift)\nimport Control.Monad.Trans.Writer (WriterT(..), tell)\n\nimport Simplicity.Delegator.Impl\nimport Simplicity.JetType\nimport Simplicity.Primitive\nimport Simplicity.Term\n\n-- | Adds logging to the 'Semantics' for Simplicity.\n--\n-- The @log@ ought to be a commutative and idempontent monoid.\n--\n-- Currently logging is used to implement pruning.\ntype SemanticsLog log a b = Delegator (Kleisli (WriterT log (ReaderT PrimEnv Maybe))) a b\n\n-- | Execute the functional semantics of the full Simplicity language with delegation.\n-- If successful, return the log in addition to the output value.\nsemLog :: SemanticsLog log a b -> PrimEnv -> a -> Maybe (b, log)\nsemLog = flip . ((runReaderT . runWriterT) .) . runKleisli . runDelegator\n\n-- | Add data to the 'SemanticsLog' of a Simplicity expression.\n--\n-- The @log@ ought to be a commutative and idempontent monoid.\nsemTell :: Monoid log => log -> SemanticsLog log a b -> SemanticsLog log a b\nsemTell msg ~(Delegator rs (Kleisli fs)) = Delegator rs (Kleisli $ \\a -> tell msg >> fs a)\n\n-- | The functional semantics of the full Simplicity language consists of\n--\n-- * Partial effect via the 'Maybe' effect.\n--\n-- * Environment effects via the 'Control.Monad.Reader.Reader' effect for primitives to access the 'PrimEnv'.\n--\n-- * Delegation via the 'Delegator' helper.\ntype Semantics a b = SemanticsLog () a b\n\n-- | @\n-- sem :: (forall term. Simplicity term => term a b) -> PrimEnv -> a -> Maybe b\n-- @\n--\n-- Execute the functional semantics of the full Simplicity language with delegation.\nsem :: SemanticsLog () a b -> PrimEnv -> a -> Maybe b\nsem = flip . ((runReaderT . fmap fst . runWriterT) .) . runKleisli . runDelegator\n\ninstance Primitive p => Primitive (Delegator p) where\n  primitive p = Delegator (primitive p) (primitive p)\n\ninstance Jet p => Jet (Delegator p) where\n  jet w t = Delegator (jet w t) (jet w t)\n\ninstance (Jet p, Witness p) => Simplicity (Delegator p) where\n\n-- | A Simplicity instance for 'fastEval'\ntype FastEval jt a b = FastEvalLog () jt a b\n\n-- | 'fastEval' optimizes Simplicity evaluation using jets.\n-- Unlike using 'Simplicity.Dag.jetSubst', 'fastEval' will not modify the commitment roots and therefore will always return the same\n-- result as 'sem' in the presence of 'disconnect'.\n--\n-- @\n-- 'fastEval' t === 'sem' t\n-- @\nfastEval :: FastEval jt a b -> PrimEnv -> a -> Maybe b\nfastEval = sem . fastEvalSem\n\n-- | A Simplicity instance for 'fastEval'\ndata FastEvalLog log jt a b = FastEvalLog { fastEvalSem :: SemanticsLog log a b\n                                          , fastEvalMatcher :: Maybe (MatcherInfo jt a b)\n                                          }\n\n-- | Add data to the 'FastEvalLog' of a Simplicity expression.\n--\n-- The @log@ ought to be a commutative and idempontent monoid.\nfastEvalTell :: (Monoid log) => log -> FastEvalLog log jt a b -> FastEvalLog log jt a b\nfastEvalTell msg (FastEvalLog fs fm) = FastEvalLog (semTell msg fs) fm\n\n-- | If evaluation is successful, return the total of all 'fastEvalTell' data that was logged.\nfastEvalLog :: FastEvalLog log jt a b -> PrimEnv -> a -> Maybe log\nfastEvalLog prog env a = snd <$> semLog (fastEvalSem prog) env a\n\nproxyImplementation :: (JetType jt, TyC a, TyC b) => proxy jt a b -> jt a b -> PrimEnv -> a -> Maybe b\nproxyImplementation _proxy = implementation\n\nwithJets :: (Monoid log, JetType jt, TyC a, TyC b) => FastEvalLog log jt a b -> FastEvalLog log jt a b\nwithJets ~fe@(FastEvalLog ~(Delegator rs (Kleisli fs)) jm) =\n  -- 'withJets' does not adjust the commitment root.\n  FastEvalLog { fastEvalSem = Delegator rs (Kleisli optfs)\n              , fastEvalMatcher = jm\n              }\n where\n  optfs a | Just jt <- matcher =<< jm = lift . ReaderT $ flip (proxyImplementation fe jt) a\n          | otherwise = fs a\n\nmkLeaf sComb jmComb = withJets $\n  FastEvalLog { fastEvalSem = sComb\n              , fastEvalMatcher = jmComb\n              }\n\nmkUnary sComb jmComb t = withJets $\n  FastEvalLog { fastEvalSem = sComb (fastEvalSem t)\n              , fastEvalMatcher = jmComb <*> fastEvalMatcher t\n              }\nmkBinary sComb jmComb s t = withJets $\n  FastEvalLog { fastEvalSem = sComb (fastEvalSem s) (fastEvalSem t)\n              , fastEvalMatcher = jmComb <*> fastEvalMatcher s <*> fastEvalMatcher t\n              }\n\ninstance (Monoid log, JetType jt) => Core (FastEvalLog log jt) where\n  iden = mkLeaf iden (pure iden)\n  comp = mkBinary comp (pure comp)\n  unit = mkLeaf unit (pure unit)\n  injl = mkUnary injl (pure injl)\n  injr = mkUnary injr (pure injr)\n  match = mkBinary match (pure match)\n  pair = mkBinary pair (pure pair)\n  take = mkUnary take (pure take)\n  drop = mkUnary drop (pure drop)\n\ninstance (Monoid log, JetType jt) => Assert (FastEvalLog log jt) where\n  assertl s h = mkUnary (flip assertl h) (pure (flip assertl h)) s\n  assertr h t = mkUnary (assertr h) (pure (assertr h)) t\n  fail b = mkLeaf (fail b) (pure (fail b))\n\ninstance Monoid log => Witness (FastEvalLog log jt) where\n  witness v =\n    FastEvalLog { fastEvalSem = witness v\n                , fastEvalMatcher = Nothing\n                }\n\ninstance (Monoid log, JetType jt) => Delegate (FastEvalLog log jt) where\n  disconnect = mkBinary disconnect Nothing\n\ninstance (Monoid log, JetType jt) => Primitive (FastEvalLog log jt)  where\n  primitive p = mkLeaf (primitive p) (pure (primitive p))\n\ninstance (Monoid log, JetType jt) => Jet (FastEvalLog log jt) where\n  jet w t = result\n   where\n    result = FastEvalLog { fastEvalSem = Delegator (jet w t) fs\n                         , fastEvalMatcher = jm\n                         }\n    FastEvalLog (Delegator _ fs) jm = t `asTypeOf` result\n\ninstance (Monoid log, JetType jt) => Simplicity (FastEvalLog log jt) where\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/Serialization/BitString.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables #-}\n-- | This modules provides a bit-stream serialization and deserialization functions for 'SimplicityDag's and Simplicity expressions for both stop-code and length-code based formats.\nmodule Simplicity.Serialization.BitString\n  ( getDagNoWitnessLengthCode\n  , getWitnessData\n  , getTermLengthCode\n  , putDagNoWitnessLengthCode\n  , putWitnessData\n  , putTermLengthCode\n  ) where\n\nimport qualified Data.Vector as V\nimport qualified Data.Vector.Unboxed as UV\nimport Data.Void (Void, vacuous)\nimport Lens.Family2 ((&), (%~))\n\nimport Simplicity.Dag\nimport Simplicity.Digest\nimport Simplicity.Inference\nimport Simplicity.JetType\nimport Simplicity.Primitive\nimport Simplicity.Serialization\nimport Simplicity.Term\nimport Simplicity.Ty\n\n-- Decodes a single node and references for a 'UntypedSimplicityDag'.\n-- @abort@ is invoked if an invalid code is encountered.\ngetNode :: (Monad m, JetType jt) => m Void -> m Bool -> m (TermF () (SomeArrow jt) () Integer)\ngetNode abort next = (getBody >>= traverse (\\_ -> getPositive next))\n                   & (Jet <$> getJetBit abort next)\n where\n  l & r = next >>= \\b -> if b then r else l\n  node = return\n  getBody =\n   (((node (uComp () ()) & node (uCase () ())) & (node (uPair () ()) & node (uDisconnect () ()))) &\n    ((node (uInjl ()) & node (uInjr ())) & (node (uTake ()) & node (uDrop ())))) &\n   (((node uIden & node uUnit) & vacuous abort) &\n    ((uHidden <$> get256Bits next) & (node (uWitness ()))))\n\n-- | Decodes a length-code based self-delimiting bit-stream encoding of 'SimplicityDag' without witness data.\n--\n-- @abort@ is invoked at the point an invalid prefix is encountered, meaning that the stream is not a valid code for a 'SimplicityDag'.\n--\n-- Type annotations are not part of the encoding.  After deserialization you will want to run type inference from \"Simplicity.Inference\".\n-- Type Inference needs to be completed before the witness data, which appears after the 'SimplicityDag' in the bit-stream, can be added to the DAG.\n--\n-- Note that the type @forall m. Monad m => m Void -> m Bool -> m a@ is isomorphic to the free monad over the @X² + 1@ functor at @a@.\n-- In other words, 'getDagNoWitnessLengthCode' has the type of a binary branching tree with leaves either containing 'SimplicityDag' values or no value.\n-- See \"Simplicity.Serialization\" for functions to execute this free monad.\ngetDagNoWitnessLengthCode :: (Monad m, JetType jt)\n                          => m Void -- ^ @abort@\n                          -> m Bool -- ^ @next@\n                          -> m (SimplicityDag V.Vector () (SomeArrow jt) ())\ngetDagNoWitnessLengthCode abort next = do\n  len <- getPositive next\n  V.replicateM (fromInteger len) $ do\n    getNode abort next\n\n-- | Given a type-annotated 'SimplicityDag', decode a bit-stream encoding of the DAG's witness data as 'UntypedValue's.\n--\n-- @abort@ is invoked if the encoded value of the witness length does not match the actual length of the witness data consumed by the DAG.\n--\n-- Note that the type @forall m. Monad m => m Void -> m Bool -> m a@ is isomorphic to the free monad over the @X² + 1@ functor at @a@.\n-- In other words, @'getWitnessData' dag@ has the type of a binary branching tree with leaves either containing 'SimplicityDag' values or no value.\n-- See \"Simplicity.Serialization\" for functions to execute this free monad.\ngetWitnessData :: (Traversable f, Monad m) => SimplicityDag f Ty jt w\n               -> m Bool -- ^ @next@\n               -> m (SimplicityDag f Ty jt UntypedValue)\ngetWitnessData dag next = do\n  traverse (witnessData (witnessDecoder next)) dag\n where\n  witnessDecoder next ty _ = case reflect ty of\n                              (SomeTy b) -> untypedValue <$> getValueR b next\n\n-- | Decodes a length-code based self-delimiting bit-stream encoding of a Simplicity expression.\n--\n-- This function combines, 'getDagNoWitnessLengthCode', 'typeInference', 'getWitnessData', and 'typeCheck' to decode a Simplicity DAG and witness data and runs type inference.\n--\n-- @abort@ is invoked if any decoding or type checking error occurs.\n--\n-- The @proxy ('SomeArrow' jt)@ argument is used to specify the 'JetType' used for decoding known jets.\n--\n-- Note: The one calling 'getTermLengthCode' determines the input and output Simplicity types of the resulting Simplicity expression.\n-- They are __not__ inferered from the DAG input.\n-- Instead the types @a@ and @b@ are used as constraints during type inference.\n--\n-- Note that the type @forall m. Monad m => m Void -> m Bool -> m a@ is isomorphic to the free monad over the @X² + 1@ functor at @a@.\n-- In other words, 'getTermLengthCode' has the type of a binary branching tree with leaves either containing 'term a b' values or no value.\n-- See \"Simplicity.Serialization\" for functions to execute this free monad.\ngetTermLengthCode :: forall proxy jt m term a b. (JetType jt, Monad m, Simplicity term, TyC a, TyC b)\n                  => proxy (SomeArrow jt)\n                  -> m Void -- ^ @abort@\n                  -> m Bool -- ^ @next@\n                  -> m (term a b)\ngetTermLengthCode _ abort next = do\n  dag <- getDagNoWitnessLengthCode abort next :: m (SimplicityDag V.Vector () (SomeArrow jt) ())\n  tyDag <- either (\\err -> vacuous abort) return $ typeInference proxy dag\n  wTyDag <- getWitnessData tyDag next\n  either (\\err -> vacuous abort) return $ typeCheck wTyDag\n where\n  proxy :: term a b\n  proxy = undefined\n\n-- Encodes a single node from as a self-delimiting bit-stream encoding as a difference list.\n-- Witness data is not encoded.\nputNode :: JetType jt => TermF Ty (SomeArrow jt) w Integer -> DList Bool\nputNode = go\n where\n  go (Comp _ _ _ x y)         = ([o,o,o,o,o]++) . putPositive x . putPositive y\n  go (Case _ _ _ _ x y)       = ([o,o,o,o,i]++) . putPositive x . putPositive y\n  go (Pair _ _ _ x y)         = ([o,o,o,i,o]++) . putPositive x . putPositive y\n  go (Disconnect _ _ _ _ x y) = ([o,o,o,i,i]++) . putPositive x . putPositive y\n  go (Injl _ _ _ x)           = ([o,o,i,o,o]++) . putPositive x\n  go (Injr _ _ _ x)           = ([o,o,i,o,i]++) . putPositive x\n  go (Take _ _ _ x)           = ([o,o,i,i,o]++) . putPositive x\n  go (Drop _ _ _ x)           = ([o,o,i,i,i]++) . putPositive x\n  go (Iden _)                 = ([o,i,o,o,o]++)\n  go (Unit _)                 = ([o,i,o,o,i]++)\n  go (Hidden h)               = ([o,i,i,o]++) . put256Bits h\n  go (Witness _ _ _)          = ([o,i,i,i]++)\n  go (Jet (SomeArrow j))      = ([i]++) . putJetBit j\n  (o,i) = (False,True)\n\n-- Caution: Maybe [Bool] is a type that might cause space leaks.  Investiagte alternatives.\n-- | Encodes an 'SimplicityDag' as a self-delimiting, length-code based bit-stream encoding, including witness data.\n--\n-- Encoding of witness data requires that its type annotation be the value's principle type.\n-- This function may return 'Nothing' if witness data cannot be encoded using the witnesses' type annotation.\nputDagNoWitnessLengthCode :: (Foldable f, JetType jt) => SimplicityDag f Ty (SomeArrow jt) UntypedValue -> [Bool]\nputDagNoWitnessLengthCode v = putPositive len $ foldr putNode [] v\n where\n  len = toInteger $ length v\n\nputWitnessData :: (Foldable f, JetType jt) => SimplicityDag f Ty (SomeArrow jt) UntypedValue -> Maybe [Bool]\nputWitnessData v = foldr (\\x y -> encodeWitnessDatum x <*> y) (Just []) v\n where\n  encodeWitnessDatum (Witness _ b w) = case reflect b of\n                                         SomeTy rb -> ((++) . putValueR rb) <$> castUntypedValue w\n  encodeWitnessDatum _ = Just id\n\n-- | Encodes a Simplicity expression as a self-delimiting, length-code based, bit-stream encoding.\n--\n-- Subexpressions matching @'JetType' jt@ are replaced and encoded as jets.\nputTermLengthCode :: (JetType jt, TyC a, TyC b) => JetDag jt a b -> ([Bool],[Bool])\nputTermLengthCode dag = (prog, witness)\n where\n  jd = jetDag dag\n  prog = putDagNoWitnessLengthCode jd\n  {- jetDag ought not to ever produce a value where putDag fails. -}\n  Just witness = putWitnessData jd\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/Serialization/ByteString.hs",
    "content": "-- | This modules provides serialization and deserialization functions for 'SimplicityDag's via cereal's \"Data.Serialize\" library.\nmodule Simplicity.Serialization.ByteString\n  ( getDag, putDag\n  ) where\n\nimport Control.Monad (unless)\nimport Control.Monad.Trans (lift)\nimport Control.Monad.Trans.State (StateT, runStateT)\nimport qualified Control.Monad.Trans.State as MS\nimport Data.Bits ((.|.), (.&.), testBit, setBit)\nimport Data.ByteString.Short (ShortByteString)\nimport Data.Foldable (toList)\nimport Data.Serialize (Get, get, Putter, Put, put)\nimport Data.Serialize.Get (getWord8, getWord16be, getShortByteString)\nimport Data.Serialize.Put (putWord8, putWord16be, putShortByteString)\nimport qualified Data.Vector as V\nimport qualified Data.Vector.Unboxed as UV\nimport qualified Data.Word as W\nimport Lens.Family2.Stock (_1)\n\nimport Simplicity.Digest\nimport Simplicity.Inference\nimport Simplicity.Primitive\nimport Simplicity.Serialization\nimport Simplicity.Ty\n\n-- Decodes a bit-string of given length from a byte-stream.\ngetBoolVector :: Int -> Get (UV.Vector Bool)\ngetBoolVector i = getEvalBitStream prog\n where\n  prog _abort next = UV.replicateM i next\n\nputBoolVector :: Putter (UV.Vector Bool)\nputBoolVector = putBitStream . UV.toList\n\n{- Consider replacing @UV.Vector Bool@ with @Vector Bit@ from https://github.com/mokus0/bitvec when issues are resolved.\n   see https://github.com/mokus0/bitvec/issues/3 & https://github.com/mokus0/bitvec/issues/4. -}\n-- Decodes a single node for a 'SimplicityDag'.\n-- The first byte is given as an argument, but if needed, more bytes may be consumed from the stream.\ndecodeNode :: W.Word8 -> Get (TermF () j (UV.Vector Bool) Bool)\ndecodeNode 0x20 = return uIden\ndecodeNode 0x21 = return uUnit\ndecodeNode 0x23 = uHidden <$> get\ndecodeNode 0xff = do\n  len <- fromIntegral <$> getWord16be\n  unless (127 <= len) (fail \"Simplicity.Serialization.ByteString.decodeNode: Badly coded long witness length.\")\n  uWitness <$> getBoolVector len\ndecodeNode w | w .&. 0xf7 == 0x10 = return (uInjl (testBit w 3))\n             | w .&. 0xf7 == 0x11 = return (uInjr (testBit w 3))\n             | w .&. 0xf7 == 0x12 = return (uTake (testBit w 3))\n             | w .&. 0xf7 == 0x13 = return (uDrop (testBit w 3))\n             | w .&. 0xf3 == 0x00 = return (uComp (testBit w 3) (testBit w 2))\n             | w .&. 0xf3 == 0x01 = return (uCase (testBit w 3) (testBit w 2))\n             | w .&. 0xf3 == 0x02 = return (uPair (testBit w 3) (testBit w 2))\n             | w .&. 0xf3 == 0x03 = return (uDisconnect (testBit w 3) (testBit w 2))\n             | w .&. 0x80 == 0x80 = uWitness <$> getBoolVector (fromIntegral (w .&. 0x7f))\n\n-- The 'DeserializeM' monad adds a counter to the 'Get' monad to count the number of nodes deserialized.\n-- This is used to compute the offsets of references.\ntype DeserializeM a = StateT Integer Get a\n\n-- Decodes a node references (a.k.a. indices) for a 'SimplicityDag'.\n-- The input flag set to 'False' means to return the last index, which is offset 1.\n-- The input flag set to 'True' means to parse the reference from the stream.\n-- In this case we add 2 to the decoded value to get the relative offset since a relative offset of 1 is handled by the input flag set to 'False'.\ngetIx :: Bool -> DeserializeM Integer\ngetIx False = return 1\ngetIx True = do\n  cnt <- MS.get\n  ix <- lift (getSizedInteger (cnt - 2))\n  unless (ix <= cnt) (fail \"getIx: index out of range\")\n  return (ix + 2)\n where\n  getSizedInteger bound | bound <= 0 = return 0\n                        | otherwise = do\n    hi <- getSizedInteger (bound `div` 256)\n    lo <- getWord8\n    return (hi * 256 + fromIntegral lo)\n\n-- Decodes a single node and references for a 'SimplicityDag'.\n-- 'Nothing' is returned when then end-of-stream code is encountered.\ngetNode :: DeserializeM (Maybe (TermF () j (UV.Vector Bool) Integer))\ngetNode = do\n  w <- lift getWord8\n  case w of\n   0x1f -> return Nothing\n   _    -> do\n     bNode <- lift (decodeNode w)\n     Just <$> traverse getIx bNode\n\n-- | Decodes a self-delimiting byte-stream encoding of 'SimplicityDag'.\n--\n-- Type annotations are not part of the encoding.  After deserialization you will want to run type inference from \"Simplicity.Inference\".\ngetDag :: Get (SimplicityDag V.Vector () j (UV.Vector Bool))\ngetDag = V.unfoldrM (fmap f . runStateT getNode) 0\n where\n  f (mnode, i) = do\n    node <- mnode\n    return (node, succ i)\n\nputIx bound i | bound <= 0 = return ()\n              | otherwise = putIx (bound `div` 256) (i `div` 256) >> putWord8 (fromIntegral i)\n\n-- Encode a Simplicity node that occurs at position 'bnd'.\n-- Caution: 'Maybe Put' might lead to space-leaks.  Invesigate alternative formulations of this function.\nputNode :: Int -> TermF Ty j UntypedValue Integer -> Maybe Put\nputNode bnd = go\n where\n  go (Comp _ _ _ x y)         = Just $ putBinary x y 0x00\n  go (Case _ _ _ _ x y)       = Just $ putBinary x y 0x01\n  go (Pair _ _ _ x y)         = Just $ putBinary x y 0x02\n  go (Disconnect _ _ _ _ x y) = Just $ putBinary x y 0x03\n  go (Injl _ _ _ x)           = Just $ putUnary x 0x10\n  go (Injr _ _ _ x)           = Just $ putUnary x 0x11\n  go (Take _ _ _ x)           = Just $ putUnary x 0x12\n  go (Drop _ _ _ x)           = Just $ putUnary x 0x13\n  go (Iden _)                 = Just $ putWord8 0x20\n  go (Unit _)                 = Just $ putWord8 0x21\n  go (Hidden h)               = Just $ putWord8 0x23 >> put h\n  go (Witness _ b w) = case reflect b of\n                        SomeTy rb -> putWitness . UV.fromList . putValueR rb <$> castUntypedValue w\n  go (Jet j)              = error \":TODO: Implement bytestring serialization of discounted jets\"\n  putUnary 1 z = putWord8 z\n  putUnary i z | 2 <= i = putWord8 (setBit z 3) >> putIx (bnd - 2) (i - 2)\n  putBinary x 1 z = putUnary x z\n  putBinary x i z | 2 <= i = putUnary x (setBit z 2) >> putIx (bnd - 2) (i - 2)\n  putWitness w | len < 127 = putWord8 (0x80 .|. fromIntegral len) >> putBoolVector w\n               | len <= fromIntegral (maxBound :: W.Word16) = putWord8 0xff\n                                                           >> putWord16be (fromIntegral len)\n                                                           >> putBoolVector w\n   where\n    len = UV.length w\n\n-- | Encodes a 'SimplicityDag' as a self-delimiting byte-stream code.\n--\n-- Encoding of witness values require that its type annotation be the value's principle type.\n-- 'putDag' requires a type annotated 'SimplicityDag' in order to persuade the user to run 'typeInference' first.\n-- This function may return 'Nothing' if witness values cannot be encoded using the witnesses' type annotation.\nputDag :: Foldable f => SimplicityDag f Ty j UntypedValue -> Maybe Put\nputDag v = fmap sequence_ . sequence $ zipWith putNode [0..] (toList v) ++ [Just (putWord8 0x1f)]\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/StaticAnalysis/Cost.hs",
    "content": "module Simplicity.StaticAnalysis.Cost\n  ( module Cost\n  ) where\n\nimport Simplicity.BitMachine.StaticAnalysis.Cost as Cost\nimport Simplicity.Term\n\ninstance Jet TermWeight where\n  jet w _t = TermWeight $ overhead + w\n\ninstance Simplicity TermWeight where\n"
  },
  {
    "path": "Haskell/Indef/Simplicity/Term.hs",
    "content": "{-# LANGUAGE FlexibleContexts, UndecidableInstances, RankNTypes #-}\n-- | This module extends \"Simplicity.Term.Core\" to the full Simplicity languages by defining the remaining language extensions: 'Primitive' and 'Jet'.\n-- The 'Simplicity' class combines all the features of the full Simplicity language under one constraint.\n--\n-- This is a separate module from \"Simplicity.Term.Core\" so that the core language need not depend on the \"Simplicity.Primitive\" module.\nmodule Simplicity.Term\n ( module Simplicity.Term.Core\n , Primitive(..)\n , Jet(..)\n , Simplicity(..)\n ) where\n\nimport Control.Arrow (Kleisli(..))\nimport Control.Monad.Reader.Class (MonadReader(..))\nimport qualified Control.Monad.Fail as Fail\n\nimport Simplicity.Digest\nimport Simplicity.MerkleRoot.Impl\nimport Simplicity.Primitive\nimport Simplicity.Term.Core\nimport Simplicity.Tensor\nimport Simplicity.Ty\nimport Simplicity.Programs.Word\nimport Simplicity.Weight\n\n-- | This class embeds Blockchain 'Prim'itives into the Simplicity language.\n-- The semantics for these primitives is mediated by the 'Simplicity.Primitive' module.\nclass Primitive term where\n  primitive :: (TyC a, TyC b) => Prim a b -> term a b\n\n-- | The Monad 'm' should be a commutative monad.\ninstance (MonadReader PrimEnv m, Fail.MonadFail m) => Primitive (Kleisli m) where\n  primitive p = Kleisli $ \\a -> do\n   env <- ask\n   let err = Fail.fail $ \"Simplicity.Term.primitive in Primitive (Kleisli m) instance: \" ++ primName p ++ \" failed.\"\n   maybe err return $ primSem p a env\n\n-- | This class creates expressions for discounted jets.\n-- A jet's specification is a Simplicity expression that isn't allowed to contain witness data, delegations or other jets.\nclass Assert term => Jet term where\n  jet :: (TyC a, TyC b) => Weight -> (forall term0. (Assert term0, Primitive term0) => term0 a b) -> term a b\n\n-- | The Monad 'm' should be a commutative monad.\ninstance (MonadReader PrimEnv m, Fail.MonadFail m) => Jet (Kleisli m) where\n  jet _w t = t\n\n-- | The class for the full Simplicity language with delegation.\n-- This includes 'Core', 'Assert', 'Primitive', 'Jet', 'Witness' and 'Delegate'.\nclass (Jet term, Witness term, Delegate term) => Simplicity term where\n\ninstance (Primitive p, Primitive q) => Primitive (Product p q) where\n  primitive p = Product (primitive p) (primitive p)\n\ninstance (Jet p, Jet q) => Jet (Product p q) where\n  jet w t = Product (jet w t) (jet w t)\n\ninstance (Simplicity p, Simplicity q) => Simplicity (Product p q) where\n\ninstance Primitive Unit where\n  primitive _ = Unit\n\ninstance Jet Unit where\n  jet _w _t = Unit\n\ninstance Simplicity Unit where\n\ninstance Primitive CommitmentRoot where\n  primitive = primitiveCommitmentImpl primPrefix primName\n\ninstance Jet CommitmentRoot where\n  jet w t = jetCommitmentImpl t (fromInteger $ milliWeight w)\n\ninstance Simplicity CommitmentRoot where\n\ninstance Primitive IdentityRoot where\n  primitive = primitiveIdentityImpl primPrefix primName\n\ninstance Jet IdentityRoot where\n  jet w t = jetIdentityImpl t (fromInteger $ milliWeight w)\n  -- Idea for alternative IdentityRoot instance:\n  --     jet t = t\n  -- Transparent jet identities would mean we could define the jet class as\n  --     jet :: (TyC a, TyC b) => (forall term0. (Assert term0, Primitive term0, Jet term0) => term0 a b) -> term a b\n  -- And then jets could contain jets such that their Semantics, IdentityRoots, and hence CommitmentRoots would all be transparent to jet sub-experssions.\n  -- Need to think carefully what this would mean for consensus, but I think it is okay.\n\ninstance Simplicity IdentityRoot where\n\ninstance Primitive AnnotatedRoot where\n  primitive = primitiveAnnotatedImpl primPrefix primName\n\ninstance Jet AnnotatedRoot where\n  jet w t = jetAnnotatedImpl t (fromInteger $ milliWeight w)\n\ninstance Simplicity AnnotatedRoot where\n\ninstance Primitive ConstWord where\n  primitive _ = NotConstWord\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/Benchmarks.hs",
    "content": "module Simplicity.Bitcoin.Benchmarks (cost) where\n\nimport Simplicity.BitMachine.StaticAnalysis.Cost\n\nrawBenchmark :: String -> Double\nrawBenchmark \"Add16\" = 44.136682646740034\nrawBenchmark \"Add32\" = 50.67335760329138\nrawBenchmark \"Add64\" = 58.13732004794472\nrawBenchmark \"Add8\" = 53.634532429883386\nrawBenchmark \"All16\" = 33.39218872838866\nrawBenchmark \"All32\" = 34.393968985341786\nrawBenchmark \"All64\" = 34.80040636278102\nrawBenchmark \"All8\" = 27.938330849119314\nrawBenchmark \"And1\" = 42.58469301684835\nrawBenchmark \"And16\" = 45.77680124552797\nrawBenchmark \"And32\" = 42.754027977427256\nrawBenchmark \"And64\" = 43.00176712484209\nrawBenchmark \"And8\" = 53.8866889956115\nrawBenchmark \"AnnexHash\" = 819.740625\nrawBenchmark \"Bip0340Verify\" = 54331.05426506661\nrawBenchmark \"BuildTapbranch\" = 1404.12\nrawBenchmark \"BuildTapleafSimplicity\" = 1059.2866666666662\nrawBenchmark \"BuildTaptweak\" = 42754.09\nrawBenchmark \"Ch1\" = 27.603813636571267\nrawBenchmark \"Ch16\" = 45.89850402102899\nrawBenchmark \"Ch32\" = 38.31275682173218\nrawBenchmark \"Ch64\" = 42.92425835586593\nrawBenchmark \"Ch8\" = 47.33640905261615\nrawBenchmark \"CheckLockDistance\" = 46.60555856358357\nrawBenchmark \"CheckLockDuration\" = 43.16876427082058\nrawBenchmark \"CheckLockHeight\" = 59.87833333333332\nrawBenchmark \"CheckLockTime\" = 67.80111111111111\nrawBenchmark \"CheckSigVerify\" = 54967.57662850159\nrawBenchmark \"Complement1\" = 28.435070805108868\nrawBenchmark \"Complement16\" = 47.500215918761754\nrawBenchmark \"Complement32\" = 31.98797255311243\nrawBenchmark \"Complement64\" = 35.28996457325325\nrawBenchmark \"Complement8\" = 34.14730925832478\nrawBenchmark \"CurrentAnnexHash\" = 40.81997764174008\nrawBenchmark \"CurrentIndex\" = 36.67501589120791\nrawBenchmark \"CurrentPrevOutpoint\" = 71.51737089421475\nrawBenchmark \"CurrentScriptHash\" = 70.05882767381516\nrawBenchmark \"CurrentScriptSigHash\" = 69.50572986703565\nrawBenchmark \"CurrentSequence\" = 36.50762527293563\nrawBenchmark \"CurrentValue\" = 47.03725600509109\nrawBenchmark \"Decompress\" = 5768.97008230397\nrawBenchmark \"Decrement16\" = 31.973438247351467\nrawBenchmark \"Decrement32\" = 31.827141390753358\nrawBenchmark \"Decrement64\" = 43.572228727724685\nrawBenchmark \"Decrement8\" = 42.51247141156928\nrawBenchmark \"DivMod128_64\" = 92.96107717827591\nrawBenchmark \"DivMod16\" = 51.01793240325478\nrawBenchmark \"DivMod32\" = 50.00632627123014\nrawBenchmark \"DivMod64\" = 45.14217373859996\nrawBenchmark \"DivMod8\" = 50.266833276757055\nrawBenchmark \"Divide16\" = 47.101053943087365\nrawBenchmark \"Divide32\" = 45.12027713560923\nrawBenchmark \"Divide64\" = 45.024481801774456\nrawBenchmark \"Divide8\" = 47.07658591767621\nrawBenchmark \"Divides16\" = 46.59263826828251\nrawBenchmark \"Divides32\" = 44.16401849008762\nrawBenchmark \"Divides64\" = 37.30234275293551\nrawBenchmark \"Divides8\" = 40.457774507513\nrawBenchmark \"Eq1\" = 34.643806635068856\nrawBenchmark \"Eq16\" = 37.772121907748854\nrawBenchmark \"Eq256\" = 103.6766885315375\nrawBenchmark \"Eq32\" = 41.04591615809853\nrawBenchmark \"Eq64\" = 45.60855709671084\nrawBenchmark \"Eq8\" = 41.792733559769715\nrawBenchmark \"FeAdd\" = 427.4328308520785\nrawBenchmark \"FeInvert\" = 1779.708904456149\nrawBenchmark \"FeIsOdd\" = 172.57588971871166\nrawBenchmark \"FeIsZero\" = 152.3799914138906\nrawBenchmark \"FeMultiply\" = 447.0881850688682\nrawBenchmark \"FeMultiplyBeta\" = 333.66342120570886\nrawBenchmark \"FeNegate\" = 297.89941926884467\nrawBenchmark \"FeNormalize\" = 360.7519695167116\nrawBenchmark \"FeSquare\" = 313.8525825651813\nrawBenchmark \"FeSquareRoot\" = 5586.354732640531\nrawBenchmark \"Fee\" = 36.133896616156626\nrawBenchmark \"FullAdd16\" = 58.729472246758526\nrawBenchmark \"FullAdd32\" = 52.99493622545529\nrawBenchmark \"FullAdd64\" = 51.13253677138998\nrawBenchmark \"FullAdd8\" = 72.23485492171291\nrawBenchmark \"FullDecrement16\" = 33.399900521956475\nrawBenchmark \"FullDecrement32\" = 39.38785925372043\nrawBenchmark \"FullDecrement64\" = 39.24945677947102\nrawBenchmark \"FullDecrement8\" = 37.412092786253986\nrawBenchmark \"FullIncrement16\" = 38.663856596153735\nrawBenchmark \"FullIncrement32\" = 31.725758992573404\nrawBenchmark \"FullIncrement64\" = 37.483004202661306\nrawBenchmark \"FullIncrement8\" = 40.55732395910691\nrawBenchmark \"FullLeftShift16_1\" = 42.054529131238006\nrawBenchmark \"FullLeftShift16_2\" = 32.54646043040402\nrawBenchmark \"FullLeftShift16_4\" = 37.57533508358536\nrawBenchmark \"FullLeftShift16_8\" = 37.79145569730148\nrawBenchmark \"FullLeftShift32_1\" = 32.089379606687615\nrawBenchmark \"FullLeftShift32_16\" = 28.970989034936068\nrawBenchmark \"FullLeftShift32_2\" = 40.28187645291576\nrawBenchmark \"FullLeftShift32_4\" = 32.64900173735215\nrawBenchmark \"FullLeftShift32_8\" = 33.2979641278353\nrawBenchmark \"FullLeftShift64_1\" = 41.05324657358461\nrawBenchmark \"FullLeftShift64_16\" = 38.18827279919049\nrawBenchmark \"FullLeftShift64_2\" = 38.69904617685279\nrawBenchmark \"FullLeftShift64_32\" = 40.206795616982305\nrawBenchmark \"FullLeftShift64_4\" = 36.78811321017009\nrawBenchmark \"FullLeftShift64_8\" = 37.83206326671019\nrawBenchmark \"FullLeftShift8_1\" = 33.379700908291646\nrawBenchmark \"FullLeftShift8_2\" = 35.64951681821717\nrawBenchmark \"FullLeftShift8_4\" = 39.86048429071267\nrawBenchmark \"FullMultiply16\" = 54.65862637714324\nrawBenchmark \"FullMultiply32\" = 48.11422276214214\nrawBenchmark \"FullMultiply64\" = 56.81191423066708\nrawBenchmark \"FullMultiply8\" = 52.4218660338924\nrawBenchmark \"FullRightShift16_1\" = 30.584441050887307\nrawBenchmark \"FullRightShift16_2\" = 33.21876447294352\nrawBenchmark \"FullRightShift16_4\" = 35.18370969327063\nrawBenchmark \"FullRightShift16_8\" = 30.47185669900153\nrawBenchmark \"FullRightShift32_1\" = 27.436660149075713\nrawBenchmark \"FullRightShift32_16\" = 26.724590023675788\nrawBenchmark \"FullRightShift32_2\" = 36.80213104058374\nrawBenchmark \"FullRightShift32_4\" = 27.259552789409202\nrawBenchmark \"FullRightShift32_8\" = 36.555094360956744\nrawBenchmark \"FullRightShift64_1\" = 32.98877822633898\nrawBenchmark \"FullRightShift64_16\" = 40.22696317634952\nrawBenchmark \"FullRightShift64_2\" = 42.2504406313922\nrawBenchmark \"FullRightShift64_32\" = 40.41141182230598\nrawBenchmark \"FullRightShift64_4\" = 31.140853356406083\nrawBenchmark \"FullRightShift64_8\" = 37.450653652486466\nrawBenchmark \"FullRightShift8_1\" = 32.65477545853995\nrawBenchmark \"FullRightShift8_2\" = 27.305918570286753\nrawBenchmark \"FullRightShift8_4\" = 28.155447838248687\nrawBenchmark \"FullSubtract16\" = 54.728904350750966\nrawBenchmark \"FullSubtract32\" = 50.81650554076461\nrawBenchmark \"FullSubtract64\" = 60.0317449293016\nrawBenchmark \"FullSubtract8\" = 58.633081183275415\nrawBenchmark \"GeIsOnCurve\" = 378.5419638083557\nrawBenchmark \"GeNegate\" = 589.106037318137\nrawBenchmark \"GejAdd\" = 1649.5102208129256\nrawBenchmark \"GejDouble\" = 1023.76443975304\nrawBenchmark \"GejEquiv\" = 1306.4752671692258\nrawBenchmark \"GejGeAdd\" = 1434.336203430953\nrawBenchmark \"GejGeAddEx\" = 1572.5375070989735\nrawBenchmark \"GejGeEquiv\" = 1002.1525067123277\nrawBenchmark \"GejInfinity\" = 420.6313287840956\nrawBenchmark \"GejIsInfinity\" = 385.48142222438554\nrawBenchmark \"GejIsOnCurve\" = 571.5188245928658\nrawBenchmark \"GejNegate\" = 851.9540386494368\nrawBenchmark \"GejNormalize\" = 2300.3299568675266\nrawBenchmark \"GejRescale\" = 1105.939152104785\nrawBenchmark \"GejXEquiv\" = 606.4526120785539\nrawBenchmark \"GejYIsOdd\" = 2035.2240203735464\nrawBenchmark \"Generate\" = 27402.027708000252\nrawBenchmark \"HashToCurve\" = 38391.68265634641\nrawBenchmark \"High1\" = 23.558953385170184\nrawBenchmark \"High16\" = 27.62768113336012\nrawBenchmark \"High32\" = 35.559286576856806\nrawBenchmark \"High64\" = 28.814148698982258\nrawBenchmark \"High8\" = 32.64377381019716\nrawBenchmark \"Increment16\" = 30.957709970314895\nrawBenchmark \"Increment32\" = 40.1796059898613\nrawBenchmark \"Increment64\" = 35.418163558431324\nrawBenchmark \"Increment8\" = 37.978203566684776\nrawBenchmark \"InputAnnexHash\" = 42.70182967858256\nrawBenchmark \"InputAnnexesHash\" = 68.35019717263717\nrawBenchmark \"InputHash\" = 457.52660680735187\nrawBenchmark \"InputOutpointsHash\" = 69.59081583677609\nrawBenchmark \"InputPrevOutpoint\" = 77.25913319341868\nrawBenchmark \"InputScriptHash\" = 78.91636262449325\nrawBenchmark \"InputScriptSigHash\" = 75.71250391155941\nrawBenchmark \"InputScriptSigsHash\" = 70.02210064106225\nrawBenchmark \"InputScriptsHash\" = 71.31520028923777\nrawBenchmark \"InputSequence\" = 43.377176188416094\nrawBenchmark \"InputSequencesHash\" = 69.13203178900284\nrawBenchmark \"InputUtxoHash\" = 453.33608745487885\nrawBenchmark \"InputUtxosHash\" = 67.48494069291833\nrawBenchmark \"InputValue\" = 44.687685815508615\nrawBenchmark \"InputValuesHash\" = 69.29576042209113\nrawBenchmark \"InputsHash\" = 67.35180070205234\nrawBenchmark \"InternalKey\" = 68.33962864439388\nrawBenchmark \"IsOne16\" = 35.465992740843575\nrawBenchmark \"IsOne32\" = 35.650420317234165\nrawBenchmark \"IsOne64\" = 36.53035640637033\nrawBenchmark \"IsOne8\" = 26.213412673887795\nrawBenchmark \"IsZero16\" = 28.906872512092153\nrawBenchmark \"IsZero32\" = 32.26173309028192\nrawBenchmark \"IsZero64\" = 37.66907585826825\nrawBenchmark \"IsZero8\" = 32.81533812531282\nrawBenchmark \"Le16\" = 45.648761967050916\nrawBenchmark \"Le32\" = 54.84357743553501\nrawBenchmark \"Le64\" = 43.787890397548175\nrawBenchmark \"Le8\" = 51.66512564613219\nrawBenchmark \"LeftExtend16_32\" = 40.12034744934846\nrawBenchmark \"LeftExtend16_64\" = 38.394732425189424\nrawBenchmark \"LeftExtend1_16\" = 27.525231328530527\nrawBenchmark \"LeftExtend1_32\" = 26.56931256736324\nrawBenchmark \"LeftExtend1_64\" = 27.097606190555393\nrawBenchmark \"LeftExtend1_8\" = 25.320232305606424\nrawBenchmark \"LeftExtend32_64\" = 38.18891728370718\nrawBenchmark \"LeftExtend8_16\" = 32.278220418994046\nrawBenchmark \"LeftExtend8_32\" = 47.58337299636622\nrawBenchmark \"LeftExtend8_64\" = 54.11604704818987\nrawBenchmark \"LeftPadHigh16_32\" = 39.50834765098096\nrawBenchmark \"LeftPadHigh16_64\" = 45.218281108823284\nrawBenchmark \"LeftPadHigh1_16\" = 58.27516690424025\nrawBenchmark \"LeftPadHigh1_32\" = 121.39949621939901\nrawBenchmark \"LeftPadHigh1_64\" = 166.27124660908493\nrawBenchmark \"LeftPadHigh1_8\" = 40.22978177021594\nrawBenchmark \"LeftPadHigh32_64\" = 38.02269928850963\nrawBenchmark \"LeftPadHigh8_16\" = 35.82613973639665\nrawBenchmark \"LeftPadHigh8_32\" = 58.0193548166602\nrawBenchmark \"LeftPadHigh8_64\" = 62.35337553262941\nrawBenchmark \"LeftPadLow16_32\" = 35.87033401657752\nrawBenchmark \"LeftPadLow16_64\" = 37.635044597552366\nrawBenchmark \"LeftPadLow1_16\" = 32.8600689080829\nrawBenchmark \"LeftPadLow1_32\" = 26.339685979228115\nrawBenchmark \"LeftPadLow1_64\" = 25.76808393390171\nrawBenchmark \"LeftPadLow1_8\" = 26.38731781820569\nrawBenchmark \"LeftPadLow32_64\" = 34.095306548305274\nrawBenchmark \"LeftPadLow8_16\" = 31.15262809934076\nrawBenchmark \"LeftPadLow8_32\" = 41.449761525764025\nrawBenchmark \"LeftPadLow8_64\" = 63.90696863776934\nrawBenchmark \"LeftRotate16\" = 48.43698053565599\nrawBenchmark \"LeftRotate32\" = 34.223382583074084\nrawBenchmark \"LeftRotate64\" = 37.863151911541166\nrawBenchmark \"LeftRotate8\" = 36.750835333961355\nrawBenchmark \"LeftShift16\" = 60.00168894665048\nrawBenchmark \"LeftShift32\" = 43.73101788984439\nrawBenchmark \"LeftShift64\" = 38.95747675143024\nrawBenchmark \"LeftShift8\" = 40.0794370358082\nrawBenchmark \"LeftShiftWith16\" = 39.84312352726623\nrawBenchmark \"LeftShiftWith32\" = 48.04430200866582\nrawBenchmark \"LeftShiftWith64\" = 53.492158105353546\nrawBenchmark \"LeftShiftWith8\" = 57.58363622714932\nrawBenchmark \"Leftmost16_1\" = 37.77996029994905\nrawBenchmark \"Leftmost16_2\" = 32.07916609455383\nrawBenchmark \"Leftmost16_4\" = 28.4904208330946\nrawBenchmark \"Leftmost16_8\" = 34.271283448670985\nrawBenchmark \"Leftmost32_1\" = 29.486816173861268\nrawBenchmark \"Leftmost32_16\" = 35.0822646168527\nrawBenchmark \"Leftmost32_2\" = 34.52857819040426\nrawBenchmark \"Leftmost32_4\" = 34.04650601552063\nrawBenchmark \"Leftmost32_8\" = 32.988290917801706\nrawBenchmark \"Leftmost64_1\" = 35.899766384371475\nrawBenchmark \"Leftmost64_16\" = 34.403331044052095\nrawBenchmark \"Leftmost64_2\" = 33.92175587795361\nrawBenchmark \"Leftmost64_32\" = 42.52310642557719\nrawBenchmark \"Leftmost64_4\" = 44.19447608789629\nrawBenchmark \"Leftmost64_8\" = 29.722452171944532\nrawBenchmark \"Leftmost8_1\" = 29.68986985055512\nrawBenchmark \"Leftmost8_2\" = 39.237095577098984\nrawBenchmark \"Leftmost8_4\" = 35.924259137346226\nrawBenchmark \"LinearCombination1\" = 47131.0603369374\nrawBenchmark \"LinearVerify1\" = 47908.70714207623\nrawBenchmark \"LockTime\" = 36.42503760383047\nrawBenchmark \"Low1\" = 22.448243650192513\nrawBenchmark \"Low16\" = 33.05884634647117\nrawBenchmark \"Low32\" = 28.916591781217406\nrawBenchmark \"Low64\" = 27.920588817108204\nrawBenchmark \"Low8\" = 25.243161658299815\nrawBenchmark \"Lt16\" = 45.781904249407944\nrawBenchmark \"Lt32\" = 49.087861252970754\nrawBenchmark \"Lt64\" = 39.062455921413196\nrawBenchmark \"Lt8\" = 47.74682254263336\nrawBenchmark \"Maj1\" = 29.826139878740626\nrawBenchmark \"Maj16\" = 47.265903230578495\nrawBenchmark \"Maj32\" = 40.55436366914694\nrawBenchmark \"Maj64\" = 43.55950823865922\nrawBenchmark \"Maj8\" = 35.657990855648016\nrawBenchmark \"Max16\" = 44.47726396878382\nrawBenchmark \"Max32\" = 38.950662288686694\nrawBenchmark \"Max64\" = 41.38460759466962\nrawBenchmark \"Max8\" = 43.57782075302293\nrawBenchmark \"Median16\" = 44.107538380770755\nrawBenchmark \"Median32\" = 42.45962357315993\nrawBenchmark \"Median64\" = 49.25513808527035\nrawBenchmark \"Median8\" = 42.484357807687246\nrawBenchmark \"Min16\" = 46.070458872385544\nrawBenchmark \"Min32\" = 53.2483761851601\nrawBenchmark \"Min64\" = 45.573833255629424\nrawBenchmark \"Min8\" = 43.41610607930553\nrawBenchmark \"Modulo16\" = 47.128433018913505\nrawBenchmark \"Modulo32\" = 45.02578963528636\nrawBenchmark \"Modulo64\" = 39.51720104382203\nrawBenchmark \"Modulo8\" = 47.0007907312594\nrawBenchmark \"Multiply16\" = 43.92524295420403\nrawBenchmark \"Multiply32\" = 43.28121274557034\nrawBenchmark \"Multiply64\" = 39.86790833030251\nrawBenchmark \"Multiply8\" = 43.645718125738156\nrawBenchmark \"Negate16\" = 37.93471863105077\nrawBenchmark \"Negate32\" = 30.974009687050092\nrawBenchmark \"Negate64\" = 30.89293706480842\nrawBenchmark \"Negate8\" = 38.193854929368385\nrawBenchmark \"NumInputs\" = 40.73551435872619\nrawBenchmark \"NumOutputs\" = 37.65318634370241\nrawBenchmark \"One16\" = 24.932927514322092\nrawBenchmark \"One32\" = 25.083366404018864\nrawBenchmark \"One64\" = 24.856045418712885\nrawBenchmark \"One8\" = 25.553521269415736\nrawBenchmark \"Or1\" = 31.11339355232734\nrawBenchmark \"Or16\" = 43.36559767625071\nrawBenchmark \"Or32\" = 44.21394816407116\nrawBenchmark \"Or64\" = 39.427267081807486\nrawBenchmark \"Or8\" = 45.02021849512168\nrawBenchmark \"OutpointHash\" = 983.317333333333\nrawBenchmark \"OutputHash\" = 452.2184636591961\nrawBenchmark \"OutputScriptHash\" = 74.41405907204627\nrawBenchmark \"OutputScriptsHash\" = 68.05834717103335\nrawBenchmark \"OutputValue\" = 45.60257162827426\nrawBenchmark \"OutputValuesHash\" = 65.61832741446521\nrawBenchmark \"OutputsHash\" = 64.64581382407765\nrawBenchmark \"ParseLock\" = 45.35290512126786\nrawBenchmark \"ParseSequence\" = 51.5230680067071\nrawBenchmark \"PointVerify1\" = 45507.347775541704\nrawBenchmark \"RightExtend16_32\" = 40.531291912436835\nrawBenchmark \"RightExtend16_64\" = 38.52752760088984\nrawBenchmark \"RightExtend32_64\" = 34.176187235896684\nrawBenchmark \"RightExtend8_16\" = 35.061762680224525\nrawBenchmark \"RightExtend8_32\" = 38.16726980102737\nrawBenchmark \"RightExtend8_64\" = 77.5702996502455\nrawBenchmark \"RightPadHigh16_32\" = 36.70784236730792\nrawBenchmark \"RightPadHigh16_64\" = 44.705064610540965\nrawBenchmark \"RightPadHigh1_16\" = 62.71840395843432\nrawBenchmark \"RightPadHigh1_32\" = 120.97260212426238\nrawBenchmark \"RightPadHigh1_64\" = 172.51836843296257\nrawBenchmark \"RightPadHigh1_8\" = 40.38834290051296\nrawBenchmark \"RightPadHigh32_64\" = 34.46051876907548\nrawBenchmark \"RightPadHigh8_16\" = 41.43332863189036\nrawBenchmark \"RightPadHigh8_32\" = 44.73635604381541\nrawBenchmark \"RightPadHigh8_64\" = 65.15296456502712\nrawBenchmark \"RightPadLow16_32\" = 34.40001143019563\nrawBenchmark \"RightPadLow16_64\" = 54.23529169177612\nrawBenchmark \"RightPadLow1_16\" = 33.503497630193564\nrawBenchmark \"RightPadLow1_32\" = 26.381301641780443\nrawBenchmark \"RightPadLow1_64\" = 31.65476539783318\nrawBenchmark \"RightPadLow1_8\" = 26.41470163017274\nrawBenchmark \"RightPadLow32_64\" = 40.71713700861584\nrawBenchmark \"RightPadLow8_16\" = 34.4483583262288\nrawBenchmark \"RightPadLow8_32\" = 38.27948995840353\nrawBenchmark \"RightPadLow8_64\" = 54.368092647345414\nrawBenchmark \"RightRotate16\" = 37.36033313598857\nrawBenchmark \"RightRotate32\" = 42.615652394650354\nrawBenchmark \"RightRotate64\" = 35.64158179151264\nrawBenchmark \"RightRotate8\" = 40.03753763691489\nrawBenchmark \"RightShift16\" = 33.35208821580021\nrawBenchmark \"RightShift32\" = 38.161119277692045\nrawBenchmark \"RightShift64\" = 37.614298057547266\nrawBenchmark \"RightShift8\" = 34.69327959933897\nrawBenchmark \"RightShiftWith16\" = 45.889906913538674\nrawBenchmark \"RightShiftWith32\" = 43.310537219684626\nrawBenchmark \"RightShiftWith64\" = 39.631329300288044\nrawBenchmark \"RightShiftWith8\" = 39.24676071674883\nrawBenchmark \"Rightmost16_1\" = 38.76071209405304\nrawBenchmark \"Rightmost16_2\" = 35.77383871313445\nrawBenchmark \"Rightmost16_4\" = 39.60458900221399\nrawBenchmark \"Rightmost16_8\" = 38.294973627235066\nrawBenchmark \"Rightmost32_1\" = 38.92331672791704\nrawBenchmark \"Rightmost32_16\" = 31.196766658320886\nrawBenchmark \"Rightmost32_2\" = 41.08958058573505\nrawBenchmark \"Rightmost32_4\" = 31.547705560004022\nrawBenchmark \"Rightmost32_8\" = 30.602950786324133\nrawBenchmark \"Rightmost64_1\" = 33.706285004586555\nrawBenchmark \"Rightmost64_16\" = 34.81784530720121\nrawBenchmark \"Rightmost64_2\" = 35.74058201022178\nrawBenchmark \"Rightmost64_32\" = 35.367078631048905\nrawBenchmark \"Rightmost64_4\" = 31.40082244656152\nrawBenchmark \"Rightmost64_8\" = 27.36940173406972\nrawBenchmark \"Rightmost8_1\" = 35.975919335811774\nrawBenchmark \"Rightmost8_2\" = 34.65406640633969\nrawBenchmark \"Rightmost8_4\" = 31.214789131830344\nrawBenchmark \"ScalarAdd\" = 428.04407963637175\nrawBenchmark \"ScalarInvert\" = 1747.042635449764\nrawBenchmark \"ScalarIsZero\" = 149.20494073681348\nrawBenchmark \"ScalarMultiply\" = 436.16643391350664\nrawBenchmark \"ScalarMultiplyLambda\" = 312.0130256538555\nrawBenchmark \"ScalarNegate\" = 283.8402319918574\nrawBenchmark \"ScalarNormalize\" = 275.12652301553385\nrawBenchmark \"ScalarSquare\" = 314.3814893191518\nrawBenchmark \"Scale\" = 40427.69365160943\nrawBenchmark \"ScriptCMR\" = 67.37701384651857\nrawBenchmark \"Sha256Block\" = 420.6376435133105\nrawBenchmark \"Sha256Ctx8Add1\" = 365.3591701367009\nrawBenchmark \"Sha256Ctx8Add128\" = 977.6641737286662\nrawBenchmark \"Sha256Ctx8Add16\" = 429.68814728608913\nrawBenchmark \"Sha256Ctx8Add2\" = 370.7077105998144\nrawBenchmark \"Sha256Ctx8Add256\" = 1590.7879307821297\nrawBenchmark \"Sha256Ctx8Add32\" = 510.60402668342346\nrawBenchmark \"Sha256Ctx8Add4\" = 360.95418411462\nrawBenchmark \"Sha256Ctx8Add512\" = 2836.901879638354\nrawBenchmark \"Sha256Ctx8Add64\" = 670.9649367075863\nrawBenchmark \"Sha256Ctx8Add8\" = 381.9619415429357\nrawBenchmark \"Sha256Ctx8AddBuffer511\" = 2824.1862108666896\nrawBenchmark \"Sha256Ctx8Finalize\" = 458.32459885061485\nrawBenchmark \"Sha256Ctx8Init\" = 67.65996850191188\nrawBenchmark \"Sha256Iv\" = 50.773287725834095\nrawBenchmark \"SigAllHash\" = 66.11014015654936\nrawBenchmark \"Some1\" = 33.07463363538328\nrawBenchmark \"Some16\" = 28.91761255504874\nrawBenchmark \"Some32\" = 27.049591600502875\nrawBenchmark \"Some64\" = 34.19889043017354\nrawBenchmark \"Some8\" = 31.407983723117024\nrawBenchmark \"Subtract16\" = 51.66400326625853\nrawBenchmark \"Subtract32\" = 48.21179847123583\nrawBenchmark \"Subtract64\" = 69.23821934331896\nrawBenchmark \"Subtract8\" = 52.95304343492633\nrawBenchmark \"Swu\" = 18018.779203014277\nrawBenchmark \"TapEnvHash\" = 66.0628594878007\nrawBenchmark \"TapdataInit\" = 678.2566336758583\nrawBenchmark \"TapleafHash\" = 64.18848496148071\nrawBenchmark \"TapleafVersion\" = 36.5603078638849\nrawBenchmark \"Tappath\" = 42.0390045311738\nrawBenchmark \"TappathHash\" = 68.10222446255801\nrawBenchmark \"TotalInputValue\" = 38.30265948379831\nrawBenchmark \"TotalOutputValue\" = 39.341843676388926\nrawBenchmark \"TransactionId\" = 67.41588797704385\nrawBenchmark \"TxHash\" = 65.62540497960407\nrawBenchmark \"TxIsFinal\" = 34.429668391912244\nrawBenchmark \"TxLockDistance\" = 39.928584556301345\nrawBenchmark \"TxLockDuration\" = 36.64653184689561\nrawBenchmark \"TxLockHeight\" = 39.83812764696879\nrawBenchmark \"TxLockTime\" = 40.08181000831813\nrawBenchmark \"Verify\" = 24.4492730405965\nrawBenchmark \"Version\" = 42.89777793306961\nrawBenchmark \"Xor1\" = 33.15518794471267\nrawBenchmark \"Xor16\" = 40.38906609022018\nrawBenchmark \"Xor32\" = 42.40576279637569\nrawBenchmark \"Xor64\" = 37.74657737058654\nrawBenchmark \"Xor8\" = 44.027331427414154\nrawBenchmark \"XorXor1\" = 27.746105883455872\nrawBenchmark \"XorXor16\" = 45.11335992539446\nrawBenchmark \"XorXor32\" = 45.174769386708675\nrawBenchmark \"XorXor64\" = 44.17301856415719\nrawBenchmark \"XorXor8\" = 47.53375204996623\n\n-- benchmark adjusts the raw benchmark by giving a discount to batch verifiable jets.\nbenchmark :: String -> Double\nbenchmark jetName = rawBenchmark jetName * adjustment\n where\n  batchable = [\"LinearVerify1\", \"PointVerify1\", \"CheckSigVerify\", \"Bip0340Verify\"]\n  adjustment | jetName `elem` batchable = 0.5\n             | otherwise = 1\n\n-- Normalized cost where cost \"CheckSigVerify\" = 50 Weight.\ncost :: String -> Weight\ncost jetName = realToFrac $ benchmark jetName * factor\n where\n  factor = 50 / benchmark \"CheckSigVerify\"\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/FFI/Env.hs",
    "content": "-- | This module binds the C implementation of jets for Simplicity for assertions.\n{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.Bitcoin.FFI.Env\n ( CTransaction, CTapEnv, CTxEnv\n , marshallTransaction, marshallTapEnv\n , withEnv, withPrimEnv\n ) where\n\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.Foldable (toList)\nimport Data.Serialize (Serialize, encode, runPut)\nimport Data.Vector (Vector)\nimport Data.Word (Word32)\nimport Foreign.C.Types (CSize(..), CChar(..), CUChar(..), CUInt(..), CULong(..))\nimport Foreign.ForeignPtr (ForeignPtr, newForeignPtr, withForeignPtr)\nimport Foreign.Marshal.Alloc (allocaBytes)\nimport Foreign.Marshal.Array (withArray, withArrayLen)\nimport Foreign.Marshal.Unsafe (unsafeLocalState)\nimport Foreign.Ptr (FunPtr, Ptr, nullPtr, plusPtr)\nimport Foreign.Storable (Storable(..))\nimport Lens.Family2 ((^.), under)\n\nimport Simplicity.Digest\nimport Simplicity.Bitcoin.DataTypes\nimport Simplicity.Bitcoin.Primitive\n\n-- Abstract representative for the C txEnv types.\nnewtype RawBuffer = RawBuffer RawBuffer\nnewtype RawOutput = RawOutput RawOutput\nnewtype RawInput = RawInput RawInput\nnewtype RawTransaction = RawTransaction RawTransaction\nnewtype RawTapEnv = RawTapEnv RawTapEnv\nnewtype CTransaction = CTransaction CTransaction\nnewtype CTapEnv = CTapEnv CTapEnv\nnewtype CTxEnv = CTxEnv CTxEnv\n\nforeign import ccall unsafe \"&\" c_sizeof_rawBitcoinBuffer :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawBitcoinOutput :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawBitcoinInput :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawBitcoinTransaction :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawBitcoinTapEnv :: Ptr CSize\nforeign import ccall unsafe \"&\" c_bitcoin_sizeof_txEnv :: Ptr CSize\n\nforeign import ccall unsafe \"\" c_set_rawBitcoinBuffer :: Ptr RawBuffer -> Ptr CChar -> CUInt -> IO ()\nforeign import ccall unsafe \"\" c_set_rawBitcoinOutput :: Ptr RawOutput -> CULong -> Ptr RawBuffer -> IO ()\nforeign import ccall unsafe \"\" c_set_rawBitcoinInput :: Ptr RawInput -> Ptr RawBuffer -> Ptr RawBuffer\n                                                              -> Ptr CChar -> CUInt\n                                                              -> CULong -> Ptr RawBuffer\n                                                              -> CUInt -> IO ()\nforeign import ccall unsafe \"\" c_set_rawBitcoinTransaction :: Ptr RawTransaction -> Ptr CChar -> CUInt\n                                                                          -> Ptr RawInput -> CUInt\n                                                                          -> Ptr RawOutput -> CUInt\n                                                                          -> CUInt -> IO ()\nforeign import ccall unsafe \"\" c_set_rawBitcoinTapEnv :: Ptr RawTapEnv -> Ptr CChar -> CUChar -> Ptr CChar -> IO ()\nforeign import ccall unsafe \"\" c_bitcoin_set_txEnv :: Ptr CTxEnv -> Ptr CTransaction -> Ptr CTapEnv -> CUInt -> IO ()\n\nforeign import ccall unsafe \"\" simplicity_bitcoin_mallocTransaction :: Ptr RawTransaction -> IO (Ptr CTransaction)\nforeign import ccall unsafe \"&\" simplicity_bitcoin_freeTransaction :: FunPtr (Ptr CTransaction -> IO ())\nforeign import ccall unsafe \"\" simplicity_bitcoin_mallocTapEnv :: Ptr RawTapEnv -> IO (Ptr CTapEnv)\nforeign import ccall unsafe \"&\" simplicity_bitcoin_freeTapEnv :: FunPtr (Ptr CTapEnv -> IO ())\n\nsizeof_rawBuffer :: Int\nsizeof_rawBuffer = fromIntegral . unsafeLocalState $ peek c_sizeof_rawBitcoinBuffer\n\nsizeof_rawOutput :: Int\nsizeof_rawOutput = fromIntegral . unsafeLocalState $ peek c_sizeof_rawBitcoinOutput\n\nsizeof_rawInput :: Int\nsizeof_rawInput = fromIntegral . unsafeLocalState $ peek c_sizeof_rawBitcoinInput\n\nsizeof_rawTransaction :: Int\nsizeof_rawTransaction = fromIntegral . unsafeLocalState $ peek c_sizeof_rawBitcoinTransaction\n\nsizeof_rawTapEnv :: Int\nsizeof_rawTapEnv = fromIntegral . unsafeLocalState $ peek c_sizeof_rawBitcoinTapEnv\n\nsizeof_txEnv :: Int\nsizeof_txEnv = fromIntegral . unsafeLocalState $ peek c_bitcoin_sizeof_txEnv\n\nwithRawBuffer :: BSL.ByteString -> (Ptr RawBuffer -> IO b) -> IO b\nwithRawBuffer str k =\n  allocaBytes sizeof_rawBuffer $ \\pRawBuffer ->\n  BS.useAsCStringLen (BSL.toStrict str) $ \\(pCharStr, len) -> do\n    c_set_rawBitcoinBuffer pRawBuffer pCharStr (fromIntegral len)\n    k pRawBuffer\n\nwithRawOutputs :: Vector TxOutput -> (Ptr RawOutput -> IO b) -> IO b\nwithRawOutputs txos k =\n  allocaBytes (len * sizeof_rawOutput) $ \\pRawOutput ->\n   foldr ($) (k pRawOutput) [pokeRawOutput txo (pRawOutput `plusPtr` (i*sizeof_rawOutput)) | (i, txo) <- zip [0..] (toList txos)]\n where\n  len = fromIntegral $ length txos\n  pokeRawOutput :: TxOutput -> Ptr RawOutput -> IO b -> IO b\n  pokeRawOutput txo pRawOutput k =\n    withRawBuffer (txoScript txo) $ \\pScript -> do\n      c_set_rawBitcoinOutput pRawOutput (fromIntegral $ txoValue txo) pScript\n      k\n\nwithRawInputs :: Vector SigTxInput -> (Ptr RawInput -> IO b) -> IO b\nwithRawInputs txis k =\n  allocaBytes (len * sizeof_rawInput) $ \\pRawInput -> do\n   foldr ($) (k pRawInput) [pokeRawInput txo (pRawInput `plusPtr` (i*sizeof_rawInput)) | (i, txo) <- zip [0..] (toList txis)]\n where\n  len = fromIntegral $ length txis\n  withMaybeRawBuffer Nothing = ($ nullPtr)\n  withMaybeRawBuffer (Just buf) = withRawBuffer buf\n  pokeRawInput :: SigTxInput -> Ptr RawInput -> IO b -> IO b\n  pokeRawInput txi pRawInput k =\n    withMaybeRawBuffer (sigTxiAnnex txi) $ \\pAnnex ->\n    withRawBuffer (sigTxiScriptSig txi) $ \\pScriptSig ->\n    BS.useAsCString (encode . opHash $ sigTxiPreviousOutpoint txi) $ \\pPrevTxid ->\n    withRawBuffer (txoScript $ sigTxiTxo txi) $ \\pScript -> do\n      c_set_rawBitcoinInput pRawInput pAnnex pScriptSig\n                               pPrevTxid (fromIntegral . opIndex . sigTxiPreviousOutpoint $ txi)\n                               (fromIntegral . txoValue $ sigTxiTxo txi) pScript\n                               (fromIntegral . sigTxiSequence $ txi)\n      k\n\nwithRawTransaction :: SigTx -> (Ptr RawTransaction -> IO b) -> IO b\nwithRawTransaction tx k =\n  allocaBytes sizeof_rawTransaction $ \\pRawTransaction ->\n  withRawInputs (sigTxIn tx) $ \\pInput ->\n  withRawOutputs (sigTxOut tx) $ \\pOutput -> do\n  BS.useAsCString (encode $ txid tx) $ \\pTxid -> do\n   c_set_rawBitcoinTransaction pRawTransaction pTxid version pInput numInputs pOutput numOutputs lockTime\n   k pRawTransaction\n where\n  version = fromIntegral (sigTxVersion tx)\n  numInputs = fromIntegral $ length (sigTxIn tx)\n  numOutputs = fromIntegral $ length (sigTxOut tx)\n  lockTime = fromIntegral (sigTxLock tx)\n\nwithRawTapEnv :: TapEnv -> (Ptr RawTapEnv -> IO b) -> IO b\nwithRawTapEnv tapEnv k | length (tappath tapEnv) <= 128 =\n  allocaBytes sizeof_rawTapEnv $ \\pRawTapEnv ->\n  BS.useAsCString encodePath $ \\pControlBlock -> do\n  BS.useAsCString (encode $ tapScriptCMR tapEnv) $ \\pCmr -> do\n   c_set_rawBitcoinTapEnv pRawTapEnv pControlBlock (fromIntegral . length $ tappath tapEnv) pCmr\n   k pRawTapEnv\n where\n  encodePath = BS.cons (tapleafVersion tapEnv) (BS.concat (encode (tapInternalKey tapEnv) : map encode (tappath tapEnv)))\n\nmarshallTransaction :: SigTx -> IO (ForeignPtr CTransaction)\nmarshallTransaction tx = withRawTransaction tx\n                       $ \\pRawTransaction -> simplicity_bitcoin_mallocTransaction pRawTransaction >>= newForeignPtr simplicity_bitcoin_freeTransaction\n\nmarshallTapEnv :: TapEnv -> IO (ForeignPtr CTapEnv)\nmarshallTapEnv env = withRawTapEnv env\n                   $ \\pRawTapEnv -> simplicity_bitcoin_mallocTapEnv pRawTapEnv >>= newForeignPtr simplicity_bitcoin_freeTapEnv\n\nwithEnv :: ForeignPtr CTransaction -> Word32 -> ForeignPtr CTapEnv -> (Ptr CTxEnv -> IO b) -> IO b\nwithEnv cTransaction ix cTapEnv k =\n  allocaBytes sizeof_txEnv $ \\pTxEnv ->\n  withForeignPtr cTransaction $ \\pTransaction ->\n  withForeignPtr cTapEnv $ \\pTapEnv -> do\n   c_bitcoin_set_txEnv pTxEnv pTransaction pTapEnv (fromIntegral ix)\n   k pTxEnv\n\nwithPrimEnv :: PrimEnv -> (Ptr CTxEnv -> IO b) -> IO b\nwithPrimEnv env k = do\n  cTransaction <- marshallTransaction (envTx env)\n  cTapEnv <- marshallTapEnv (envTap env)\n  withEnv cTransaction (envIx env) cTapEnv k\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/FFI/Jets.hs",
    "content": "-- | This module binds the C implementation of jets for Simplicity for assertions.\n{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.Bitcoin.FFI.Jets\n ( version\n , lock_time\n , input_prev_outpoint\n , input_value\n , input_script_hash\n , input_sequence\n , input_annex_hash\n , input_script_sig_hash\n , output_value\n , output_script_hash\n , script_cmr\n , transaction_id\n , current_index\n , current_prev_outpoint\n , current_value\n , current_script_hash\n , current_sequence\n , current_annex_hash\n , current_script_sig_hash\n , tapleaf_version\n , tappath\n , internal_key\n , num_inputs\n , num_outputs\n , tx_is_final\n , tx_lock_height\n , tx_lock_time\n , tx_lock_distance\n , tx_lock_duration\n , check_lock_height\n , check_lock_time\n , check_lock_distance\n , check_lock_duration\n , outpoint_hash\n , annex_hash\n , build_tapleaf_simplicity\n , build_tapbranch\n , build_taptweak\n , output_values_hash\n , output_scripts_hash\n , outputs_hash\n , output_hash\n , total_output_value\n , input_outpoints_hash\n , input_values_hash\n , input_scripts_hash\n , input_utxos_hash\n , input_utxo_hash\n , input_sequences_hash\n , input_annexes_hash\n , input_script_sigs_hash\n , inputs_hash\n , input_hash\n , total_input_value\n , fee\n , tx_hash\n , tapleaf_hash\n , tappath_hash\n , tap_env_hash\n , sig_all_hash\n ) where\n\nimport Foreign.Ptr (Ptr)\nimport Foreign.C.Types (CBool(..))\n\nimport Simplicity.Bitcoin.FFI.Env\nimport Simplicity.Bitcoin.Primitive\nimport Simplicity.FFI.Frame\nimport Simplicity.Programs.Elements\nimport Simplicity.Programs.LibSecp256k1\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\n-- | This cannot be used with jets that access global variables.\nunsafeLocalJet :: (TyC a, TyC b) => (Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool) -> PrimEnv -> a -> Maybe b\nunsafeLocalJet jet env = unsafeLocalCoreJet (\\dst src -> withPrimEnv env (jet dst src))\n\nforeign import ccall unsafe \"\" c_bitcoin_version :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_lock_time :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_prev_outpoint :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_value :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_script_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_sequence :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_annex_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_script_sig_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_output_value :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_output_script_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_script_cmr :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_transaction_id :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_current_index :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_current_prev_outpoint :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_current_value :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_current_script_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_current_sequence :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_current_annex_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_current_script_sig_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tapleaf_version :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tappath :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_internal_key :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_num_inputs :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_num_outputs :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tx_is_final :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tx_lock_height :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tx_lock_time :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tx_lock_distance :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tx_lock_duration :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_check_lock_height :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_check_lock_time :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_check_lock_distance :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_check_lock_duration :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_outpoint_hash :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_annex_hash :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_build_tapleaf_simplicity :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_build_tapbranch :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_build_taptweak :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_output_values_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_output_nonces_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_output_scripts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_outputs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_output_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_total_output_value :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_outpoints_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_values_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_scripts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_utxos_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_utxo_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_sequences_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_annexes_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_script_sigs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_inputs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_input_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_total_input_value :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_fee :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tx_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tapleaf_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tappath_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_tap_env_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_bitcoin_sig_all_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\n\nversion :: PrimEnv -> () -> Maybe Word32\nversion = unsafeLocalJet c_bitcoin_version\n\nlock_time :: PrimEnv -> () -> Maybe Word32\nlock_time = unsafeLocalJet c_bitcoin_lock_time\n\nnum_inputs :: PrimEnv -> () -> Maybe Word32\nnum_inputs = unsafeLocalJet c_bitcoin_num_inputs\n\ninput_prev_outpoint :: PrimEnv -> Word32 -> Maybe (S (Word256, Word32))\ninput_prev_outpoint = unsafeLocalJet c_bitcoin_input_prev_outpoint\n\ninput_value :: PrimEnv -> Word32 -> Maybe (S Word64)\ninput_value = unsafeLocalJet c_bitcoin_input_value\n\ninput_script_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_script_hash = unsafeLocalJet c_bitcoin_input_script_hash\n\ninput_sequence :: PrimEnv -> Word32 -> Maybe (S Word32)\ninput_sequence = unsafeLocalJet c_bitcoin_input_sequence\n\ninput_annex_hash :: PrimEnv -> Word32 -> Maybe (S (S Word256))\ninput_annex_hash = unsafeLocalJet c_bitcoin_input_annex_hash\n\ninput_script_sig_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_script_sig_hash = unsafeLocalJet c_bitcoin_input_script_sig_hash\n\ncurrent_index :: PrimEnv -> () -> Maybe Word32\ncurrent_index = unsafeLocalJet c_bitcoin_current_index\n\ncurrent_prev_outpoint :: PrimEnv -> () -> Maybe (Word256, Word32)\ncurrent_prev_outpoint = unsafeLocalJet c_bitcoin_current_prev_outpoint\n\ncurrent_value :: PrimEnv -> () -> Maybe Word64\ncurrent_value = unsafeLocalJet c_bitcoin_current_value\n\ncurrent_script_hash :: PrimEnv -> () -> Maybe Word256\ncurrent_script_hash = unsafeLocalJet c_bitcoin_current_script_hash\n\ncurrent_sequence :: PrimEnv -> () -> Maybe Word32\ncurrent_sequence = unsafeLocalJet c_bitcoin_current_sequence\n\ncurrent_annex_hash :: PrimEnv -> () -> Maybe (S Word256)\ncurrent_annex_hash = unsafeLocalJet c_bitcoin_current_annex_hash\n\ncurrent_script_sig_hash :: PrimEnv -> () -> Maybe Word256\ncurrent_script_sig_hash = unsafeLocalJet c_bitcoin_current_script_sig_hash\n\ntapleaf_version :: PrimEnv -> () -> Maybe Word8\ntapleaf_version = unsafeLocalJet c_bitcoin_tapleaf_version\n\ntappath :: PrimEnv -> Word8 -> Maybe (S Word256)\ntappath = unsafeLocalJet c_bitcoin_tappath\n\ninternal_key :: PrimEnv -> () -> Maybe PubKey\ninternal_key = unsafeLocalJet c_bitcoin_internal_key\n\nnum_outputs :: PrimEnv -> () -> Maybe Word32\nnum_outputs = unsafeLocalJet c_bitcoin_num_outputs\n\noutput_value :: PrimEnv -> Word32 -> Maybe (S Word64)\noutput_value = unsafeLocalJet c_bitcoin_output_value\n\noutput_script_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\noutput_script_hash = unsafeLocalJet c_bitcoin_output_script_hash\n\nscript_cmr :: PrimEnv -> () -> Maybe Word256\nscript_cmr = unsafeLocalJet c_bitcoin_script_cmr\n\ntransaction_id :: PrimEnv -> () -> Maybe Word256\ntransaction_id = unsafeLocalJet c_bitcoin_transaction_id\n\ntx_is_final :: PrimEnv -> () -> Maybe Bit\ntx_is_final = unsafeLocalJet c_bitcoin_tx_is_final\n\ntx_lock_height :: PrimEnv -> () -> Maybe Word32\ntx_lock_height = unsafeLocalJet c_bitcoin_tx_lock_height\n\ntx_lock_time :: PrimEnv -> () -> Maybe Word32\ntx_lock_time = unsafeLocalJet c_bitcoin_tx_lock_time\n\ntx_lock_distance :: PrimEnv -> () -> Maybe Word16\ntx_lock_distance  = unsafeLocalJet c_bitcoin_tx_lock_distance\n\ntx_lock_duration :: PrimEnv -> () -> Maybe Word16\ntx_lock_duration  = unsafeLocalJet c_bitcoin_tx_lock_duration\n\ncheck_lock_height :: PrimEnv -> Word32 -> Maybe ()\ncheck_lock_height = unsafeLocalJet c_bitcoin_check_lock_height\n\ncheck_lock_time :: PrimEnv -> Word32 -> Maybe ()\ncheck_lock_time = unsafeLocalJet c_bitcoin_check_lock_time\n\ncheck_lock_distance :: PrimEnv -> Word16 -> Maybe ()\ncheck_lock_distance  = unsafeLocalJet c_bitcoin_check_lock_distance\n\ncheck_lock_duration :: PrimEnv -> Word16 -> Maybe ()\ncheck_lock_duration  = unsafeLocalJet c_bitcoin_check_lock_duration\n\noutpoint_hash :: (Ctx8, (Word256, Word32)) -> Maybe Ctx8\noutpoint_hash = unsafeLocalCoreJet c_bitcoin_outpoint_hash\n\nannex_hash :: (Ctx8, S Word256) -> Maybe Ctx8\nannex_hash = unsafeLocalCoreJet c_bitcoin_annex_hash\n\nbuild_tapleaf_simplicity :: Word256 -> Maybe Word256\nbuild_tapleaf_simplicity = unsafeLocalCoreJet c_bitcoin_build_tapleaf_simplicity\n\nbuild_tapbranch :: (Word256, Word256) -> Maybe Word256\nbuild_tapbranch = unsafeLocalCoreJet c_bitcoin_build_tapbranch\n\nbuild_taptweak :: (Word256, Word256) -> Maybe Word256\nbuild_taptweak = unsafeLocalCoreJet c_bitcoin_build_taptweak\n\noutput_values_hash :: PrimEnv -> () -> Maybe Word256\noutput_values_hash = unsafeLocalJet c_bitcoin_output_values_hash\n\noutput_scripts_hash :: PrimEnv -> () -> Maybe Word256\noutput_scripts_hash = unsafeLocalJet c_bitcoin_output_scripts_hash\n\noutputs_hash :: PrimEnv -> () -> Maybe Word256\noutputs_hash = unsafeLocalJet c_bitcoin_outputs_hash\n\noutput_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\noutput_hash = unsafeLocalJet c_bitcoin_output_hash\n\ntotal_output_value :: PrimEnv -> () -> Maybe Word64\ntotal_output_value = unsafeLocalJet c_bitcoin_total_output_value\n\ninput_outpoints_hash :: PrimEnv -> () -> Maybe Word256\ninput_outpoints_hash = unsafeLocalJet c_bitcoin_input_outpoints_hash\n\ninput_values_hash :: PrimEnv -> () -> Maybe Word256\ninput_values_hash = unsafeLocalJet c_bitcoin_input_values_hash\n\ninput_scripts_hash :: PrimEnv -> () -> Maybe Word256\ninput_scripts_hash = unsafeLocalJet c_bitcoin_input_scripts_hash\n\ninput_utxos_hash :: PrimEnv -> () -> Maybe Word256\ninput_utxos_hash = unsafeLocalJet c_bitcoin_input_utxos_hash\n\ninput_utxo_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_utxo_hash = unsafeLocalJet c_bitcoin_input_utxo_hash\n\ninput_sequences_hash :: PrimEnv -> () -> Maybe Word256\ninput_sequences_hash = unsafeLocalJet c_bitcoin_input_sequences_hash\n\ninput_annexes_hash :: PrimEnv -> () -> Maybe Word256\ninput_annexes_hash = unsafeLocalJet c_bitcoin_input_annexes_hash\n\ninput_script_sigs_hash :: PrimEnv -> () -> Maybe Word256\ninput_script_sigs_hash = unsafeLocalJet c_bitcoin_input_script_sigs_hash\n\ninputs_hash :: PrimEnv -> () -> Maybe Word256\ninputs_hash = unsafeLocalJet c_bitcoin_inputs_hash\n\ninput_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_hash = unsafeLocalJet c_bitcoin_input_hash\n\ntotal_input_value :: PrimEnv -> () -> Maybe Word64\ntotal_input_value = unsafeLocalJet c_bitcoin_total_input_value\n\nfee :: PrimEnv -> () -> Maybe Word64\nfee = unsafeLocalJet c_bitcoin_fee\n\ntx_hash :: PrimEnv -> () -> Maybe Word256\ntx_hash = unsafeLocalJet c_bitcoin_tx_hash\n\ntapleaf_hash :: PrimEnv -> () -> Maybe Word256\ntapleaf_hash = unsafeLocalJet c_bitcoin_tapleaf_hash\n\ntappath_hash :: PrimEnv -> () -> Maybe Word256\ntappath_hash = unsafeLocalJet c_bitcoin_tappath_hash\n\ntap_env_hash :: PrimEnv -> () -> Maybe Word256\ntap_env_hash = unsafeLocalJet c_bitcoin_tap_env_hash\n\nsig_all_hash :: PrimEnv -> () -> Maybe Word256\nsig_all_hash = unsafeLocalJet c_bitcoin_sig_all_hash\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/Jets.hs",
    "content": "-- | This module provides a canonical set of known jets for Simplicity for Bitcoin. (At the moment this just consists of 'CoreJet's.)\n{-# LANGUAGE GADTs, StandaloneDeriving, TypeFamilies #-}\nmodule Simplicity.Bitcoin.Jets\n  ( JetType(..), BitcoinJet(..), SigHashJet(..), TimeLockJet(..), TransactionJet(..)\n  , bitcoinCatalogue\n  , asJet\n  , jetSubst, pruneSubst\n  , getTermLengthCode, putTermLengthCode\n  , fastEval\n  , jetMap\n  -- * Re-exports\n  , WrappedSimplicity, unwrap\n  , Simplicity.Bitcoin.JetType.specification, Simplicity.Bitcoin.JetType.implementation\n  , Simplicity.Bitcoin.JetType.getJetBit, Simplicity.Bitcoin.JetType.putJetBit\n  , Simplicity.Bitcoin.JetType.jetCost\n  , Semantics.FastEval\n  ) where\n\nimport Prelude hiding (fail, drop, take)\n\nimport Control.Applicative ((<|>))\nimport Control.Monad (guard)\nimport Data.Foldable (toList)\nimport qualified Data.Map as Map\nimport Data.Proxy (Proxy(Proxy))\nimport Data.Type.Equality ((:~:)(Refl))\nimport Data.Serialize (runPut, put, putWord8)\nimport Data.String (fromString)\nimport Data.Vector ((!?))\nimport Data.Void (Void, vacuous)\nimport Lens.Family2 ((^..), over, review)\n\nimport Simplicity.Digest\nimport Simplicity.CoreJets hiding (BitcoinJet)\nimport qualified Simplicity.CoreJets as CoreJets\nimport Simplicity.Bitcoin.Benchmarks\nimport Simplicity.Bitcoin.Dag hiding (jetSubst, pruneSubst)\nimport qualified Simplicity.Bitcoin.Dag as Dag\nimport Simplicity.Bitcoin.Term\nimport Simplicity.Bitcoin.DataTypes\nimport qualified Simplicity.Bitcoin.JetType\nimport Simplicity.Bitcoin.Primitive (PrimEnv, PubKey, primEnvHash, envTx, envIx, envTap)\nimport qualified Simplicity.Bitcoin.Primitive as Prim\nimport qualified Simplicity.Bitcoin.Serialization.BitString as BitString\nimport qualified Simplicity.Bitcoin.Semantics as Semantics\nimport qualified Simplicity.Bitcoin.Programs.SigHash.Lib as SigHash\nimport qualified Simplicity.Bitcoin.Programs.TimeLock as TimeLock\nimport qualified Simplicity.Bitcoin.Programs.Transaction.Lib as Prog\nimport qualified Simplicity.LibSecp256k1.Schnorr as Schnorr\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Sha256.Lib (Ctx8)\nimport qualified Simplicity.Programs.Bitcoin.Lib as Prog\nimport Simplicity.Programs.Word\nimport Simplicity.Serialization\nimport Simplicity.Tensor\nimport Simplicity.Tree\nimport Simplicity.Ty\nimport Simplicity.Ty.Bit\nimport Simplicity.Ty.Sha256\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as W\nimport Simplicity.Weight\n\n-- | A type of tokens for the canonical set of known jets for Simplicity for Bitcoin. (At the moment this just consists of 'CoreJet's.)\n--\n-- The tokens themselves are not exported.  You are expected to use 'Simplicity.Dag.jetDag' to substitute known jets found in Simplicity expressions.\ndata JetType a b where\n  ConstWordJet :: ConstWordContent b -> JetType () b\n  CoreJet :: CoreJet a b -> JetType a b\n  BitcoinJet :: BitcoinJet a b -> JetType a b\nderiving instance Eq (JetType a b)\nderiving instance Show (JetType a b)\n\ndata BitcoinJet a b where\n  SigHashJet :: SigHashJet a b -> BitcoinJet a b\n  TimeLockJet :: TimeLockJet a b -> BitcoinJet a b\n  TransactionJet :: TransactionJet a b -> BitcoinJet a b\nderiving instance Eq (BitcoinJet a b)\nderiving instance Show (BitcoinJet a b)\n\ndata SigHashJet a b where\n  SigAllHash :: SigHashJet () Word256\n  TxHash :: SigHashJet () Word256\n  TapEnvHash :: SigHashJet () Word256\n  OutputsHash :: SigHashJet () Word256\n  InputsHash :: SigHashJet () Word256\n  InputUtxosHash :: SigHashJet () Word256\n  OutputHash :: SigHashJet Word32 (S Word256)\n  OutputValuesHash :: SigHashJet () Word256\n  OutputScriptsHash :: SigHashJet () Word256\n  InputHash :: SigHashJet Word32 (S Word256)\n  InputOutpointsHash :: SigHashJet () Word256\n  InputSequencesHash :: SigHashJet () Word256\n  InputAnnexesHash :: SigHashJet () Word256\n  InputScriptSigsHash :: SigHashJet () Word256\n  InputUtxoHash :: SigHashJet Word32 (S Word256)\n  InputValuesHash :: SigHashJet () Word256\n  InputScriptsHash :: SigHashJet () Word256\n  TapleafHash :: SigHashJet () Word256\n  TappathHash :: SigHashJet () Word256\n  OutpointHash :: SigHashJet (Ctx8, (Word256, Word32)) Ctx8\n  AnnexHash :: SigHashJet (Ctx8, S Word256) Ctx8\n  BuildTapleafSimplicity :: SigHashJet Word256 Word256\n  BuildTapbranch :: SigHashJet (Word256, Word256) Word256\n  BuildTaptweak :: SigHashJet (PubKey, Word256) PubKey\nderiving instance Eq (SigHashJet a b)\nderiving instance Show (SigHashJet a b)\n\ndata TimeLockJet a b where\n  CheckLockHeight :: TimeLockJet TimeLock.Height ()\n  CheckLockTime :: TimeLockJet TimeLock.Time ()\n  CheckLockDistance :: TimeLockJet TimeLock.Distance ()\n  CheckLockDuration :: TimeLockJet TimeLock.Duration ()\n  TxLockHeight :: TimeLockJet () TimeLock.Height\n  TxLockTime :: TimeLockJet () TimeLock.Time\n  TxLockDistance :: TimeLockJet () TimeLock.Distance\n  TxLockDuration :: TimeLockJet () TimeLock.Duration\n  TxIsFinal :: TimeLockJet () TimeLock.Bit\nderiving instance Eq (TimeLockJet a b)\nderiving instance Show (TimeLockJet a b)\n\ndata TransactionJet a b where\n  ScriptCMR :: TransactionJet () Word256\n  InternalKey :: TransactionJet () PubKey\n  CurrentIndex :: TransactionJet () Word32\n  NumInputs :: TransactionJet () Word32\n  NumOutputs :: TransactionJet () Word32\n  LockTime :: TransactionJet () Word32\n  Fee :: TransactionJet () Word64\n  OutputValue :: TransactionJet Word32 (Either () Word64)\n  OutputScriptHash :: TransactionJet Word32 (Either () Word256)\n  TotalOutputValue :: TransactionJet () Word64\n  CurrentPrevOutpoint :: TransactionJet () (Word256,Word32)\n  CurrentValue :: TransactionJet () Word64\n  CurrentScriptHash :: TransactionJet () Word256\n  CurrentSequence :: TransactionJet () Word32\n  CurrentAnnexHash :: TransactionJet () (Either () Word256)\n  CurrentScriptSigHash :: TransactionJet () Word256\n  InputPrevOutpoint :: TransactionJet Word32 (Either () (Word256,Word32))\n  InputValue :: TransactionJet Word32 (Either () Word64)\n  InputScriptHash :: TransactionJet Word32 (S Word256)\n  InputSequence :: TransactionJet Word32 (Either () Word32)\n  InputAnnexHash :: TransactionJet Word32 (Either () (Either () Word256))\n  InputScriptSigHash :: TransactionJet Word32 (Either () Word256)\n  TotalInputValue :: TransactionJet () Word64\n  TapleafVersion :: TransactionJet () Word8\n  Tappath :: TransactionJet Word8 (Either () Word256)\n  Version :: TransactionJet () Word32\n  TransactionId :: TransactionJet () Word256\nderiving instance Eq (TransactionJet a b)\nderiving instance Show (TransactionJet a b)\n\nspecificationBitcoin :: (Assert term, Primitive term) => BitcoinJet a b -> term a b\nspecificationBitcoin (SigHashJet x) = specificationSigHash x\nspecificationBitcoin (TimeLockJet x) = specificationTimeLock x\nspecificationBitcoin (TransactionJet x) = specificationTransaction x\n\nspecificationSigHash :: (Assert term, Primitive term) => SigHashJet a b -> term a b\nspecificationSigHash SigAllHash = SigHash.sigAllHash\nspecificationSigHash TxHash = SigHash.txHash\nspecificationSigHash TapEnvHash = SigHash.tapEnvHash\nspecificationSigHash OutputsHash = SigHash.outputsHash\nspecificationSigHash InputsHash = SigHash.inputsHash\nspecificationSigHash InputUtxosHash = SigHash.inputUtxosHash\nspecificationSigHash OutputHash = SigHash.outputHash\nspecificationSigHash OutputValuesHash = SigHash.outputValuesHash\nspecificationSigHash OutputScriptsHash = SigHash.outputScriptsHash\nspecificationSigHash InputHash = SigHash.inputHash\nspecificationSigHash InputOutpointsHash = SigHash.inputOutpointsHash\nspecificationSigHash InputSequencesHash = SigHash.inputSequencesHash\nspecificationSigHash InputAnnexesHash = SigHash.inputAnnexesHash\nspecificationSigHash InputScriptSigsHash = SigHash.inputScriptSigsHash\nspecificationSigHash InputUtxoHash = SigHash.inputUtxoHash\nspecificationSigHash InputValuesHash = SigHash.inputValuesHash\nspecificationSigHash InputScriptsHash = SigHash.inputScriptsHash\nspecificationSigHash TapleafHash = SigHash.tapleafHash\nspecificationSigHash TappathHash = SigHash.tappathHash\nspecificationSigHash OutpointHash = Prog.outpointHash\nspecificationSigHash AnnexHash = Prog.annexHash\nspecificationSigHash BuildTapleafSimplicity = Prog.buildTapleafSimplicity\nspecificationSigHash BuildTapbranch = Prog.buildTapbranch\nspecificationSigHash BuildTaptweak = Prog.buildTaptweak\n\nspecificationTimeLock :: (Assert term, Primitive term) => TimeLockJet a b -> term a b\nspecificationTimeLock CheckLockHeight = TimeLock.checkLockHeight\nspecificationTimeLock CheckLockTime = TimeLock.checkLockTime\nspecificationTimeLock CheckLockDistance = TimeLock.checkLockDistance\nspecificationTimeLock CheckLockDuration = TimeLock.checkLockDuration\nspecificationTimeLock TxLockHeight = TimeLock.txLockHeight\nspecificationTimeLock TxLockTime = TimeLock.txLockTime\nspecificationTimeLock TxLockDistance = TimeLock.txLockDistance\nspecificationTimeLock TxLockDuration = TimeLock.txLockDuration\nspecificationTimeLock TxIsFinal = TimeLock.txIsFinal\n\nspecificationTransaction :: (Assert term, Primitive term) => TransactionJet a b -> term a b\nspecificationTransaction ScriptCMR = primitive Prim.ScriptCMR\nspecificationTransaction InternalKey = primitive Prim.InternalKey\nspecificationTransaction CurrentIndex = primitive Prim.CurrentIndex\nspecificationTransaction NumInputs = Prog.numInputs\nspecificationTransaction NumOutputs = Prog.numOutputs\nspecificationTransaction LockTime = primitive Prim.LockTime\nspecificationTransaction OutputValue = primitive Prim.OutputValue\nspecificationTransaction OutputScriptHash = primitive Prim.OutputScriptHash\nspecificationTransaction TotalOutputValue = Prog.totalOutputValue\nspecificationTransaction CurrentPrevOutpoint = Prog.currentPrevOutpoint\nspecificationTransaction CurrentValue = Prog.currentValue\nspecificationTransaction CurrentScriptHash = Prog.currentScriptHash\nspecificationTransaction CurrentSequence = Prog.currentSequence\nspecificationTransaction CurrentAnnexHash = Prog.currentAnnexHash\nspecificationTransaction CurrentScriptSigHash = Prog.currentScriptSigHash\nspecificationTransaction InputPrevOutpoint = primitive Prim.InputPrevOutpoint\nspecificationTransaction InputValue = primitive Prim.InputValue\nspecificationTransaction InputScriptHash = primitive Prim.InputScriptHash\nspecificationTransaction InputSequence = primitive Prim.InputSequence\nspecificationTransaction InputAnnexHash = primitive Prim.InputAnnexHash\nspecificationTransaction InputScriptSigHash = primitive Prim.InputScriptSigHash\nspecificationTransaction TotalInputValue = Prog.totalInputValue\nspecificationTransaction Fee = Prog.fee\nspecificationTransaction TapleafVersion = primitive Prim.TapleafVersion\nspecificationTransaction Tappath = primitive Prim.Tappath\nspecificationTransaction Version = primitive Prim.Version\nspecificationTransaction TransactionId = primitive Prim.TransactionId\n\nimplementationBitcoin :: BitcoinJet a b -> PrimEnv -> a -> Maybe b\nimplementationBitcoin (SigHashJet x) = implementationSigHash x\nimplementationBitcoin (TimeLockJet x) = implementationTimeLock x\nimplementationBitcoin (TransactionJet x) = implementationTransaction x\n\nimplementationSigHash :: SigHashJet a b -> PrimEnv -> a -> Maybe b\nimplementationSigHash SigAllHash env _ = Just . toWord256 . integerHash256 $ primEnvHash env\nimplementationSigHash TxHash env _ = Just . toWord256 . integerHash256 $ txHash (envTx env)\nimplementationSigHash TapEnvHash env _ = Just . toWord256 . integerHash256 $ tapEnvHash (envTap env)\nimplementationSigHash OutputsHash env _ = Just . toWord256 . integerHash256 $ outputsHash (envTx env)\nimplementationSigHash InputsHash env _ = Just . toWord256 . integerHash256 $ inputsHash (envTx env)\nimplementationSigHash InputUtxosHash env _ = Just . toWord256 . integerHash256 $ inputUtxosHash (envTx env)\nimplementationSigHash OutputHash env i = Just . fmap (toWord256 . integerHash256 . outputHash) . maybe (Left ()) Right\n                                       $ sigTxOut (envTx env) !? (fromIntegral $ fromWord32 i)\nimplementationSigHash OutputValuesHash env _ = Just . toWord256 . integerHash256 $ outputValuesHash (envTx env)\nimplementationSigHash OutputScriptsHash env _ = Just . toWord256 . integerHash256 $ outputScriptsHash (envTx env)\nimplementationSigHash InputHash env i = Just . fmap (toWord256 . integerHash256 . inputHash) . maybe (Left ()) Right\n                                      $ sigTxIn (envTx env) !? (fromIntegral $ fromWord32 i)\nimplementationSigHash InputOutpointsHash env _ = Just . toWord256 . integerHash256 $ inputOutpointsHash (envTx env)\nimplementationSigHash InputSequencesHash env _ = Just . toWord256 . integerHash256 $ inputSequencesHash (envTx env)\nimplementationSigHash InputAnnexesHash env _ = Just . toWord256 . integerHash256 $ inputAnnexesHash (envTx env)\nimplementationSigHash InputScriptSigsHash env _ = Just . toWord256 . integerHash256 $ inputScriptSigsHash (envTx env)\nimplementationSigHash InputUtxoHash env i = Just . fmap (toWord256 . integerHash256 . outputHash . sigTxiTxo) . maybe (Left ()) Right\n                                          $ sigTxIn (envTx env) !? (fromIntegral $ fromWord32 i)\nimplementationSigHash InputValuesHash env _ = Just . toWord256 . integerHash256 $ inputValuesHash (envTx env)\nimplementationSigHash InputScriptsHash env _ = Just . toWord256 . integerHash256 $ inputScriptsHash (envTx env)\nimplementationSigHash TapleafHash env _ = Just . toWord256 . integerHash256 $ tapleafHash (envTap env)\nimplementationSigHash TappathHash env _ = Just . toWord256 . integerHash256 $ tappathHash (envTap env)\nimplementationSigHash OutpointHash _env (ctx, op) = toCtx8 <$> (flip ctxAdd (runPut (putOutpointBE (cast op))) =<< fromCtx8 ctx)\n where\n  cast (h, i) = Outpoint (review (over be256) (fromW256 h)) (fromW32 i)\n  fromW256 = fromIntegral . fromWord256\n  fromW32 = fromIntegral . fromWord32\nimplementationSigHash AnnexHash _env (ctx, mw256) = toCtx8 <$> (flip ctxAdd (runPut . putMW256 $ mw256) =<< fromCtx8 ctx)\n where\n  putMW256 (Left _) = putWord8 0x00\n  putMW256 (Right w256) = putWord8 0x01 >> put (fromIntegral (fromWord256 w256) :: W.Word256)\nimplementationSigHash BuildTapleafSimplicity _env cmr = Just . toWord256 . integerHash256 . bsHash . runPut\n                                                      $ put tag >> put tag >> putWord8 tapleafSimplicityVersion >> putWord8 32 >> put (fromW256 cmr)\n where\n  tag = bsHash (fromString \"TapLeaf\")\n  tapleafSimplicityVersion = 0xbe\n  fromW256 :: Word256 -> W.Word256\n  fromW256 = fromIntegral . fromWord256\n\nimplementationSigHash BuildTapbranch _env (wa,wb) = Just . toWord256 . integerHash256 . bsHash . runPut\n                                                  $ put tag >> put tag >> put min >> put max\n where\n  a = fromW256 wa\n  b = fromW256 wb\n  min = if a < b then a else b\n  max = if a < b then b else a\n  tag = bsHash (fromString \"TapBranch\")\n  fromW256 :: Word256 -> W.Word256\n  fromW256 = fromIntegral . fromWord256\nimplementationSigHash BuildTaptweak _env (key,h) = cast <$> taptweak pk h0\n where\n  pk = Schnorr.PubKey (fromW256 key)\n  h0 = review (over be256) (fromW256 h)\n  cast (Schnorr.PubKey k) = toWord256 . toInteger $ k\n  fromW256 :: Word256 -> W.Word256\n  fromW256 = fromIntegral . fromWord256\n\nimplementationTimeLock :: TimeLockJet a b -> PrimEnv -> a -> Maybe b\nimplementationTimeLock CheckLockHeight env x | txIsFinal (envTx env) = guard $ fromWord32 x <= 0\n                                             | Left l <- parseLock lock = guard $ fromWord32 x <= fromIntegral l\n                                             | otherwise = guard $ fromWord32 x <= 0\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock CheckLockTime env x | txIsFinal (envTx env) = guard $ fromWord32 x <= 0\n                                           | Right l <- parseLock lock = guard $ fromWord32 x <= fromIntegral l\n                                           | otherwise = guard $ fromWord32 x <= 0\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock CheckLockDistance env x | sigTxVersion (envTx env) < 2 = guard $ fromWord16 x <= 0\n                                               | Just (Left l) <- parseSequence =<< sequence = guard $ fromWord16 x <= fromIntegral l\n                                               | otherwise = guard $ fromWord16 x <= 0\n where\n  sequence = sigTxiSequence <$> (sigTxIn (envTx env) !? (fromIntegral $ envIx env))\nimplementationTimeLock CheckLockDuration env x | sigTxVersion (envTx env) < 2 = guard $ fromWord16 x <= 0\n                                               | Just (Right l) <- parseSequence =<< sequence = guard $ fromWord16 x <= fromIntegral l\n                                               | otherwise = guard $ fromWord16 x <= 0\n where\n  sequence = sigTxiSequence <$> (sigTxIn (envTx env) !? (fromIntegral $ envIx env))\nimplementationTimeLock TxLockHeight env () | txIsFinal (envTx env) = Just (toWord32 0)\n                                           | Left l <- parseLock lock = Just . toWord32 $ fromIntegral l\n                                           | otherwise = Just (toWord32 0)\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock TxLockTime env () | txIsFinal (envTx env) = Just (toWord32 0)\n                                         | Right l <- parseLock lock = Just . toWord32 $ fromIntegral l\n                                         | otherwise = Just (toWord32 0)\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock TxLockDistance env () | sigTxVersion (envTx env) < 2 = Just (toWord16 0)\n                                             | Just (Left l) <- parseSequence =<< sequence = Just . toWord16 $ fromIntegral l\n                                             | otherwise = Just (toWord16 0)\n where\n  sequence = sigTxiSequence <$> (sigTxIn (envTx env) !? (fromIntegral $ envIx env))\nimplementationTimeLock TxLockDuration env () | sigTxVersion (envTx env) < 2 = Just (toWord16 0)\n                                             | Just (Right l) <- parseSequence =<< sequence = Just . toWord16 $ fromIntegral l\n                                             | otherwise = Just (toWord16 0)\n where\n  sequence = sigTxiSequence <$> (sigTxIn (envTx env) !? (fromIntegral $ envIx env))\nimplementationTimeLock TxIsFinal env () = Just $ toBit (txIsFinal (envTx env))\n\nimplementationTransaction :: TransactionJet a b -> PrimEnv -> a -> Maybe b\nimplementationTransaction TotalOutputValue env _ = Just . toWord64 . fromIntegral $ txTotalOutputValue (envTx env)\nimplementationTransaction TotalInputValue env _ = Just . toWord64 . fromIntegral $ txTotalInputValue (envTx env)\nimplementationTransaction Fee env _ = Just . toWord64 . fromIntegral $ txFee (envTx env)\nimplementationTransaction x env i = Semantics.sem (specificationTransaction x) env i\n\ngetJetBitBitcoin :: (Monad m) => m Void -> m Bool -> m (SomeArrow BitcoinJet)\ngetJetBitBitcoin = getCatalogue bitcoinCatalogue\n\nbitcoinCatalogue :: Catalogue (SomeArrow BitcoinJet)\nbitcoinCatalogue = Shelf\n [ someArrowMap SigHashJet <$> sigHashCatalogue\n , someArrowMap TimeLockJet <$> timeLockCatalogue\n , someArrowMap TransactionJet <$> transactionCatalogue\n ]\nsigHashCatalogue = book\n [ SomeArrow SigAllHash\n , SomeArrow TxHash\n , SomeArrow TapEnvHash\n , SomeArrow OutputsHash\n , SomeArrow InputsHash\n , SomeArrow InputUtxosHash\n , SomeArrow OutputHash\n , SomeArrow OutputValuesHash\n , SomeArrow OutputScriptsHash\n , SomeArrow InputHash\n , SomeArrow InputOutpointsHash\n , SomeArrow InputSequencesHash\n , SomeArrow InputAnnexesHash\n , SomeArrow InputScriptSigsHash\n , SomeArrow InputUtxoHash\n , SomeArrow InputValuesHash\n , SomeArrow InputScriptsHash\n , SomeArrow TapleafHash\n , SomeArrow TappathHash\n , SomeArrow OutpointHash\n , SomeArrow AnnexHash\n , SomeArrow BuildTapleafSimplicity\n , SomeArrow BuildTapbranch\n , SomeArrow BuildTaptweak\n ]\ntimeLockCatalogue = book\n [ SomeArrow CheckLockHeight\n , SomeArrow CheckLockTime\n , SomeArrow CheckLockDistance\n , SomeArrow CheckLockDuration\n , SomeArrow TxLockHeight\n , SomeArrow TxLockTime\n , SomeArrow TxLockDistance\n , SomeArrow TxLockDuration\n , SomeArrow TxIsFinal\n ]\ntransactionCatalogue = book\n [ SomeArrow ScriptCMR\n , SomeArrow InternalKey\n , SomeArrow CurrentIndex\n , SomeArrow NumInputs\n , SomeArrow NumOutputs\n , SomeArrow LockTime\n , SomeArrow Fee\n , SomeArrow OutputValue\n , SomeArrow OutputScriptHash\n , SomeArrow TotalOutputValue\n , SomeArrow CurrentPrevOutpoint\n , SomeArrow CurrentValue\n , SomeArrow CurrentScriptHash\n , SomeArrow CurrentSequence\n , SomeArrow CurrentAnnexHash\n , SomeArrow CurrentScriptSigHash\n , SomeArrow InputPrevOutpoint\n , SomeArrow InputValue\n , SomeArrow InputScriptHash\n , SomeArrow InputSequence\n , SomeArrow InputAnnexHash\n , SomeArrow InputScriptSigHash\n , SomeArrow TotalInputValue\n , SomeArrow TapleafVersion\n , SomeArrow Tappath\n , SomeArrow Version\n , SomeArrow TransactionId\n ]\n\nputJetBitBitcoin :: BitcoinJet a b -> DList Bool\nputJetBitBitcoin (SigHashJet x) = putPositive 1 . putJetBitSigHash x\nputJetBitBitcoin (TimeLockJet x) = putPositive 2 . putJetBitTimeLock x\nputJetBitBitcoin (TransactionJet x) = putPositive 3 . putJetBitTransaction x\n\nputJetBitSigHash :: SigHashJet a b -> DList Bool\nputJetBitSigHash SigAllHash             = putPositive 1\nputJetBitSigHash TxHash                 = putPositive 2\nputJetBitSigHash TapEnvHash             = putPositive 3\nputJetBitSigHash OutputsHash            = putPositive 4\nputJetBitSigHash InputsHash             = putPositive 5\nputJetBitSigHash InputUtxosHash         = putPositive 6\nputJetBitSigHash OutputHash             = putPositive 7\nputJetBitSigHash OutputValuesHash       = putPositive 8\nputJetBitSigHash OutputScriptsHash      = putPositive 9\nputJetBitSigHash InputHash              = putPositive 10\nputJetBitSigHash InputOutpointsHash     = putPositive 11\nputJetBitSigHash InputSequencesHash     = putPositive 12\nputJetBitSigHash InputAnnexesHash       = putPositive 13\nputJetBitSigHash InputScriptSigsHash    = putPositive 14\nputJetBitSigHash InputUtxoHash          = putPositive 15\nputJetBitSigHash InputValuesHash        = putPositive 16\nputJetBitSigHash InputScriptsHash       = putPositive 17\nputJetBitSigHash TapleafHash            = putPositive 18\nputJetBitSigHash TappathHash            = putPositive 19\nputJetBitSigHash OutpointHash           = putPositive 20\nputJetBitSigHash AnnexHash              = putPositive 21\nputJetBitSigHash BuildTapleafSimplicity = putPositive 22\nputJetBitSigHash BuildTapbranch         = putPositive 23\nputJetBitSigHash BuildTaptweak          = putPositive 24\n\nputJetBitTimeLock :: TimeLockJet a b -> DList Bool\nputJetBitTimeLock CheckLockHeight   = putPositive 1\nputJetBitTimeLock CheckLockTime     = putPositive 2\nputJetBitTimeLock CheckLockDistance = putPositive 3\nputJetBitTimeLock CheckLockDuration = putPositive 4\nputJetBitTimeLock TxLockHeight      = putPositive 5\nputJetBitTimeLock TxLockTime        = putPositive 6\nputJetBitTimeLock TxLockDistance    = putPositive 7\nputJetBitTimeLock TxLockDuration    = putPositive 8\nputJetBitTimeLock TxIsFinal         = putPositive 9\n\nputJetBitTransaction :: TransactionJet a b -> DList Bool\nputJetBitTransaction ScriptCMR            = putPositive 1\nputJetBitTransaction InternalKey          = putPositive 2\nputJetBitTransaction CurrentIndex         = putPositive 3\nputJetBitTransaction NumInputs            = putPositive 4\nputJetBitTransaction NumOutputs           = putPositive 5\nputJetBitTransaction LockTime             = putPositive 6\nputJetBitTransaction Fee                  = putPositive 7\nputJetBitTransaction OutputValue          = putPositive 8\nputJetBitTransaction OutputScriptHash     = putPositive 9\nputJetBitTransaction TotalOutputValue     = putPositive 10\nputJetBitTransaction CurrentPrevOutpoint  = putPositive 11\nputJetBitTransaction CurrentValue         = putPositive 12\nputJetBitTransaction CurrentScriptHash    = putPositive 13\nputJetBitTransaction CurrentSequence      = putPositive 14\nputJetBitTransaction CurrentAnnexHash     = putPositive 15\nputJetBitTransaction CurrentScriptSigHash = putPositive 16\nputJetBitTransaction InputPrevOutpoint    = putPositive 17\nputJetBitTransaction InputValue           = putPositive 18\nputJetBitTransaction InputScriptHash      = putPositive 19\nputJetBitTransaction InputSequence        = putPositive 20\nputJetBitTransaction InputAnnexHash       = putPositive 21\nputJetBitTransaction InputScriptSigHash   = putPositive 22\nputJetBitTransaction TotalInputValue      = putPositive 23\nputJetBitTransaction TapleafVersion       = putPositive 24\nputJetBitTransaction Tappath              = putPositive 25\nputJetBitTransaction Version              = putPositive 26\nputJetBitTransaction TransactionId        = putPositive 27\n\nbitcoinJetMap :: Map.Map Hash256 (SomeArrow BitcoinJet)\nbitcoinJetMap = Map.fromList . fmap mkAssoc $ toList bitcoinCatalogue\n where\n  mkAssoc :: SomeArrow BitcoinJet -> (Hash256, (SomeArrow BitcoinJet))\n  mkAssoc wrapped@(SomeArrow jt) = (identityHash (specificationBitcoin jt), wrapped)\n\ndata MatcherInfo a b = MatcherInfo (Product ConstWord IdentityRoot a b)\n\ninstance Simplicity.Bitcoin.JetType.JetType JetType where\n  type MatcherInfo JetType = MatcherInfo\n\n  specification (ConstWordJet cw) = CoreJets.specificationConstWord cw\n  specification (CoreJet jt) = CoreJets.specification jt\n  specification (BitcoinJet jt) = specificationBitcoin jt\n\n  implementation (ConstWordJet cw) _env = CoreJets.implementationConstWord cw\n  implementation (CoreJet jt) _env = CoreJets.implementation jt\n  implementation (BitcoinJet jt) env = implementationBitcoin jt env\n\n  matcher (MatcherInfo (Product cw ir)) = (do\n    SomeArrow jt <- Map.lookup (identityHash ir) jetMap\n    let (ira, irb) = reifyArrow ir\n    let (jta, jtb) = reifyArrow jt\n    -- If the error below is thrown it suggests there is some sort of type annotation mismatch in the map below\n    case (equalTyReflect ira jta, equalTyReflect irb jtb) of\n      (Just Refl, Just Refl) -> return jt\n      otherwise -> error \"mathcher{Simplicity.Bitcoin.Jets.JetType}: type match error\"\n    ) <|> case cw of\n      (ConstWord w v) -> return (ConstWordJet (ConstWordContent w v))\n      otherwise -> Nothing\n\n  getJetBit abort next = do\n    b <- next\n    if b then do\n               c <- next\n               if c then someArrowMap BitcoinJet <$> getJetBitBitcoin abort next\n                    else someArrowMap CoreJet <$> CoreJets.getJetBit abort next\n         else mkConstWordJet <$> CoreJets.getConstWordBit abort next\n   where\n     mkConstWordJet (SomeConstWordContent cw) = SomeArrow (ConstWordJet cw)\n\n  putJetBit = go\n   where\n    go (ConstWordJet cw) = ([o]++) . CoreJets.putConstWordBit cw\n    go (CoreJet jt) = ([i,o]++) . CoreJets.putJetBit jt\n    go (BitcoinJet jt) = ([i,i]++) . putJetBitBitcoin jt\n    (o,i) = (False,True)\n\n  jetCost (ConstWordJet cw) = jetCostConstWord cw\n  jetCost (CoreJet jt) = jetCostCore jt\n  jetCost (BitcoinJet jt) = jetCostBitcoin jt\n\n-- | Generate a 'Jet' using the 'Simplicity.Bitcoin.JetType.jetCost' and 'Simplicity.Bitcoin.JetType.specification' of a 'JetType'.\nasJet :: (Jet term, TyC a, TyC b) => JetType a b -> term a b\nasJet = Simplicity.Bitcoin.JetType.asJet\n\n-- This map is used in the 'matcher' method above.\n-- We have floated it out here to make sure the map is shared between invocations of the 'matcher' function.\njetMap :: Map.Map Hash256 (SomeArrow JetType)\njetMap = Map.union (someArrowMap CoreJet <$> coreJetMap) (someArrowMap BitcoinJet <$> bitcoinJetMap)\n\n-- | Find all the expressions in a term that can be replaced with Bitcoin jets.\n-- Because discounted jets are not transparent, this replacement will change the CMR of the term.\n-- In particular the CMR values passed to 'disconnect' may be different, and thus the result of\n-- evaluation could change in the presence of 'disconnect'.\njetSubst :: (TyC a, TyC b) => JetDag JetType a b -> WrappedSimplicity a b\njetSubst = Dag.jetSubst\n\n-- | Performs 'jetSubst' and then evaluates the program in the given environment to prune unused case branches,\n-- which transforms some case expressions into assertions.\n-- The resulting expression should always have the same CMR as the expression that 'jetSubst' would return.\npruneSubst :: JetDag JetType () () -> PrimEnv -> Maybe (WrappedSimplicity () ())\npruneSubst prog env = Dag.pruneSubst prog env ()\n\n-- | This is an instance of 'BitString.getTermLengthCode' that specifically decodes the canonical 'JetType' set of known jets.\ngetTermLengthCode :: (Monad m, Simplicity term, TyC a, TyC b) => m Void -> m Bool -> m (term a b)\ngetTermLengthCode = BitString.getTermLengthCode (Proxy :: Proxy (SomeArrow JetType))\n\n-- | This is an instance of 'BitString.putTermLengthCode' that specifically encodes the canonical 'JetType' set of known jets.\nputTermLengthCode :: (TyC a, TyC b) => JetDag JetType a b -> ([Bool],[Bool])\nputTermLengthCode = BitString.putTermLengthCode\n\n-- | 'fastEval' optimizes Simplicity evaluation using Bitcoin jets.\n-- Unlike using 'Simplicity.Dag.jetSubst', 'fastEval' will not modify the commitment roots and therefore will always return the same\n-- result as 'sem' in the presence of 'disconnect'.\n--\n-- @\n-- 'fastEval' t === 'sem' t\n-- @\nfastEval :: Semantics.FastEval JetType a b -> Semantics.PrimEnv -> a -> Maybe b\nfastEval = Semantics.fastEval\n\ninstance Core MatcherInfo where\n  iden = MatcherInfo iden\n  unit = MatcherInfo unit\n  injl (MatcherInfo ir) = MatcherInfo (injl ir)\n  injr (MatcherInfo ir) = MatcherInfo (injr ir)\n  drop (MatcherInfo ir) = MatcherInfo (drop ir)\n  take (MatcherInfo ir) = MatcherInfo (take ir)\n  pair (MatcherInfo irl) (MatcherInfo irr) = MatcherInfo (pair irl irr)\n  match (MatcherInfo irl) (MatcherInfo irr) = MatcherInfo (match irl irr)\n  comp (MatcherInfo irl) (MatcherInfo irr) = MatcherInfo (comp irl irr)\n\ninstance Assert MatcherInfo where\n  assertl (MatcherInfo ir) h = MatcherInfo (assertl ir h)\n  assertr h (MatcherInfo ir) = MatcherInfo (assertr h ir)\n  fail b = MatcherInfo (fail b)\n\ninstance Primitive MatcherInfo where\n  primitive p = MatcherInfo (primitive p)\n\n-- | Returns the cost of a constant word jet corresponding to the contents of a given 'ConstWordContent'.\njetCostConstWord :: ConstWordContent b -> Weight\njetCostConstWord (ConstWordContent w _) = milli (wordSize w)\n\n-- | The costs of \"core\" jets.  This can be used to help instantiate the 'Simplicity.JetType.jetCost' method.\njetCostCore :: CoreJet a b -> Weight\njetCostCore (WordJet x) = jetCostWord x\njetCostCore (ArithJet x) = jetCostArith x\njetCostCore (HashJet x) = jetCostHash x\njetCostCore (Secp256k1Jet x) = jetCostSecp256k1 x\njetCostCore (SignatureJet x) = jetCostSignature x\njetCostCore (CoreJets.BitcoinJet x) = jetCostCoreBitcoin x\n\njetCostWord :: WordJet a b -> Weight\njetCostWord Verify = cost \"Verify\"\njetCostWord Low1 = cost \"Low1\"\njetCostWord Low8 = cost \"Low8\"\njetCostWord Low16 = cost \"Low16\"\njetCostWord Low32 = cost \"Low32\"\njetCostWord Low64 = cost \"Low64\"\njetCostWord High1 = cost \"High1\"\njetCostWord High8 = cost \"High8\"\njetCostWord High16 = cost \"High16\"\njetCostWord High32 = cost \"High32\"\njetCostWord High64 = cost \"High64\"\njetCostWord Complement1 = cost \"Complement1\"\njetCostWord Complement8 = cost \"Complement8\"\njetCostWord Complement16 = cost \"Complement16\"\njetCostWord Complement32 = cost \"Complement32\"\njetCostWord Complement64 = cost \"Complement64\"\njetCostWord And1 = cost \"And1\"\njetCostWord And8 = cost \"And8\"\njetCostWord And16 = cost \"And16\"\njetCostWord And32 = cost \"And32\"\njetCostWord And64 = cost \"And64\"\njetCostWord Or1 = cost \"Or1\"\njetCostWord Or8 = cost \"Or8\"\njetCostWord Or16 = cost \"Or16\"\njetCostWord Or32 = cost \"Or32\"\njetCostWord Or64 = cost \"Or64\"\njetCostWord Xor1 = cost \"Xor1\"\njetCostWord Xor8 = cost \"Xor8\"\njetCostWord Xor16 = cost \"Xor16\"\njetCostWord Xor32 = cost \"Xor32\"\njetCostWord Xor64 = cost \"Xor64\"\njetCostWord Maj1 = cost \"Maj1\"\njetCostWord Maj8 = cost \"Maj8\"\njetCostWord Maj16 = cost \"Maj16\"\njetCostWord Maj32 = cost \"Maj32\"\njetCostWord Maj64 = cost \"Maj64\"\njetCostWord XorXor1 = cost \"XorXor1\"\njetCostWord XorXor8 = cost \"XorXor8\"\njetCostWord XorXor16 = cost \"XorXor16\"\njetCostWord XorXor32 = cost \"XorXor32\"\njetCostWord XorXor64 = cost \"XorXor64\"\njetCostWord Ch1 = cost \"Ch1\"\njetCostWord Ch8 = cost \"Ch8\"\njetCostWord Ch16 = cost \"Ch16\"\njetCostWord Ch32 = cost \"Ch32\"\njetCostWord Ch64 = cost \"Ch64\"\njetCostWord Some1 = cost \"Some1\"\njetCostWord Some8 = cost \"Some8\"\njetCostWord Some16 = cost \"Some16\"\njetCostWord Some32 = cost \"Some32\"\njetCostWord Some64 = cost \"Some64\"\njetCostWord All8 = cost \"All8\"\njetCostWord All16 = cost \"All16\"\njetCostWord All32 = cost \"All32\"\njetCostWord All64 = cost \"All64\"\njetCostWord Eq1 = cost \"Eq1\"\njetCostWord Eq8 = cost \"Eq8\"\njetCostWord Eq16 = cost \"Eq16\"\njetCostWord Eq32 = cost \"Eq32\"\njetCostWord Eq64 = cost \"Eq64\"\njetCostWord Eq256 = cost \"Eq256\"\njetCostWord FullLeftShift8_1 = cost \"FullLeftShift8_1\"\njetCostWord FullLeftShift8_2 = cost \"FullLeftShift8_2\"\njetCostWord FullLeftShift8_4 = cost \"FullLeftShift8_4\"\njetCostWord FullLeftShift16_1 = cost \"FullLeftShift16_1\"\njetCostWord FullLeftShift16_2 = cost \"FullLeftShift16_2\"\njetCostWord FullLeftShift16_4 = cost \"FullLeftShift16_4\"\njetCostWord FullLeftShift16_8 = cost \"FullLeftShift16_8\"\njetCostWord FullLeftShift32_1 = cost \"FullLeftShift32_1\"\njetCostWord FullLeftShift32_2 = cost \"FullLeftShift32_2\"\njetCostWord FullLeftShift32_4 = cost \"FullLeftShift32_4\"\njetCostWord FullLeftShift32_8 = cost \"FullLeftShift32_8\"\njetCostWord FullLeftShift32_16 = cost \"FullLeftShift32_16\"\njetCostWord FullLeftShift64_1 = cost \"FullLeftShift64_1\"\njetCostWord FullLeftShift64_2 = cost \"FullLeftShift64_2\"\njetCostWord FullLeftShift64_4 = cost \"FullLeftShift64_4\"\njetCostWord FullLeftShift64_8 = cost \"FullLeftShift64_8\"\njetCostWord FullLeftShift64_16 = cost \"FullLeftShift64_16\"\njetCostWord FullLeftShift64_32 = cost \"FullLeftShift64_32\"\njetCostWord FullRightShift8_1 = cost \"FullRightShift8_1\"\njetCostWord FullRightShift8_2 = cost \"FullRightShift8_2\"\njetCostWord FullRightShift8_4 = cost \"FullRightShift8_4\"\njetCostWord FullRightShift16_1 = cost \"FullRightShift16_1\"\njetCostWord FullRightShift16_2 = cost \"FullRightShift16_2\"\njetCostWord FullRightShift16_4 = cost \"FullRightShift16_4\"\njetCostWord FullRightShift16_8 = cost \"FullRightShift16_8\"\njetCostWord FullRightShift32_1 = cost \"FullRightShift32_1\"\njetCostWord FullRightShift32_2 = cost \"FullRightShift32_2\"\njetCostWord FullRightShift32_4 = cost \"FullRightShift32_4\"\njetCostWord FullRightShift32_8 = cost \"FullRightShift32_8\"\njetCostWord FullRightShift32_16 = cost \"FullRightShift32_16\"\njetCostWord FullRightShift64_1 = cost \"FullRightShift64_1\"\njetCostWord FullRightShift64_2 = cost \"FullRightShift64_2\"\njetCostWord FullRightShift64_4 = cost \"FullRightShift64_4\"\njetCostWord FullRightShift64_8 = cost \"FullRightShift64_8\"\njetCostWord FullRightShift64_16 = cost \"FullRightShift64_16\"\njetCostWord FullRightShift64_32 = cost \"FullRightShift64_32\"\njetCostWord Leftmost8_1 = cost \"Leftmost8_1\"\njetCostWord Leftmost8_2 = cost \"Leftmost8_2\"\njetCostWord Leftmost8_4 = cost \"Leftmost8_4\"\njetCostWord Leftmost16_1 = cost \"Leftmost16_1\"\njetCostWord Leftmost16_2 = cost \"Leftmost16_2\"\njetCostWord Leftmost16_4 = cost \"Leftmost16_4\"\njetCostWord Leftmost16_8 = cost \"Leftmost16_8\"\njetCostWord Leftmost32_1 = cost \"Leftmost32_1\"\njetCostWord Leftmost32_2 = cost \"Leftmost32_2\"\njetCostWord Leftmost32_4 = cost \"Leftmost32_4\"\njetCostWord Leftmost32_8 = cost \"Leftmost32_8\"\njetCostWord Leftmost32_16 = cost \"Leftmost32_16\"\njetCostWord Leftmost64_1 = cost \"Leftmost64_1\"\njetCostWord Leftmost64_2 = cost \"Leftmost64_2\"\njetCostWord Leftmost64_4 = cost \"Leftmost64_4\"\njetCostWord Leftmost64_8 = cost \"Leftmost64_8\"\njetCostWord Leftmost64_16 = cost \"Leftmost64_16\"\njetCostWord Leftmost64_32 = cost \"Leftmost64_32\"\njetCostWord Rightmost8_1 = cost \"Rightmost8_1\"\njetCostWord Rightmost8_2 = cost \"Rightmost8_2\"\njetCostWord Rightmost8_4 = cost \"Rightmost8_4\"\njetCostWord Rightmost16_1 = cost \"Rightmost16_1\"\njetCostWord Rightmost16_2 = cost \"Rightmost16_2\"\njetCostWord Rightmost16_4 = cost \"Rightmost16_4\"\njetCostWord Rightmost16_8 = cost \"Rightmost16_8\"\njetCostWord Rightmost32_1 = cost \"Rightmost32_1\"\njetCostWord Rightmost32_2 = cost \"Rightmost32_2\"\njetCostWord Rightmost32_4 = cost \"Rightmost32_4\"\njetCostWord Rightmost32_8 = cost \"Rightmost32_8\"\njetCostWord Rightmost32_16 = cost \"Rightmost32_16\"\njetCostWord Rightmost64_1 = cost \"Rightmost64_1\"\njetCostWord Rightmost64_2 = cost \"Rightmost64_2\"\njetCostWord Rightmost64_4 = cost \"Rightmost64_4\"\njetCostWord Rightmost64_8 = cost \"Rightmost64_8\"\njetCostWord Rightmost64_16 = cost \"Rightmost64_16\"\njetCostWord Rightmost64_32 = cost \"Rightmost64_32\"\njetCostWord LeftPadLow1_8 = cost \"LeftPadLow1_8\"\njetCostWord LeftPadLow1_16 = cost \"LeftPadLow1_16\"\njetCostWord LeftPadLow8_16 = cost \"LeftPadLow8_16\"\njetCostWord LeftPadLow1_32 = cost \"LeftPadLow1_32\"\njetCostWord LeftPadLow8_32 = cost \"LeftPadLow8_32\"\njetCostWord LeftPadLow16_32 = cost \"LeftPadLow16_32\"\njetCostWord LeftPadLow1_64 = cost \"LeftPadLow1_64\"\njetCostWord LeftPadLow8_64 = cost \"LeftPadLow8_64\"\njetCostWord LeftPadLow16_64 = cost \"LeftPadLow16_64\"\njetCostWord LeftPadLow32_64 = cost \"LeftPadLow32_64\"\njetCostWord LeftPadHigh1_8 = cost \"LeftPadHigh1_8\"\njetCostWord LeftPadHigh1_16 = cost \"LeftPadHigh1_16\"\njetCostWord LeftPadHigh8_16 = cost \"LeftPadHigh8_16\"\njetCostWord LeftPadHigh1_32 = cost \"LeftPadHigh1_32\"\njetCostWord LeftPadHigh8_32 = cost \"LeftPadHigh8_32\"\njetCostWord LeftPadHigh16_32 = cost \"LeftPadHigh16_32\"\njetCostWord LeftPadHigh1_64 = cost \"LeftPadHigh1_64\"\njetCostWord LeftPadHigh8_64 = cost \"LeftPadHigh8_64\"\njetCostWord LeftPadHigh16_64 = cost \"LeftPadHigh16_64\"\njetCostWord LeftPadHigh32_64 = cost \"LeftPadHigh32_64\"\njetCostWord LeftExtend1_8 = cost \"LeftExtend1_8\"\njetCostWord LeftExtend1_16 = cost \"LeftExtend1_16\"\njetCostWord LeftExtend8_16 = cost \"LeftExtend8_16\"\njetCostWord LeftExtend1_32 = cost \"LeftExtend1_32\"\njetCostWord LeftExtend8_32 = cost \"LeftExtend8_32\"\njetCostWord LeftExtend16_32 = cost \"LeftExtend16_32\"\njetCostWord LeftExtend1_64 = cost \"LeftExtend1_64\"\njetCostWord LeftExtend8_64 = cost \"LeftExtend8_64\"\njetCostWord LeftExtend16_64 = cost \"LeftExtend16_64\"\njetCostWord LeftExtend32_64 = cost \"LeftExtend32_64\"\njetCostWord RightPadLow1_8 = cost \"RightPadLow1_8\"\njetCostWord RightPadLow1_16 = cost \"RightPadLow1_16\"\njetCostWord RightPadLow8_16 = cost \"RightPadLow8_16\"\njetCostWord RightPadLow1_32 = cost \"RightPadLow1_32\"\njetCostWord RightPadLow8_32 = cost \"RightPadLow8_32\"\njetCostWord RightPadLow16_32 = cost \"RightPadLow16_32\"\njetCostWord RightPadLow1_64 = cost \"RightPadLow1_64\"\njetCostWord RightPadLow8_64 = cost \"RightPadLow8_64\"\njetCostWord RightPadLow16_64 = cost \"RightPadLow16_64\"\njetCostWord RightPadLow32_64 = cost \"RightPadLow32_64\"\njetCostWord RightPadHigh1_8 = cost \"RightPadHigh1_8\"\njetCostWord RightPadHigh1_16 = cost \"RightPadHigh1_16\"\njetCostWord RightPadHigh8_16 = cost \"RightPadHigh8_16\"\njetCostWord RightPadHigh1_32 = cost \"RightPadHigh1_32\"\njetCostWord RightPadHigh8_32 = cost \"RightPadHigh8_32\"\njetCostWord RightPadHigh16_32 = cost \"RightPadHigh16_32\"\njetCostWord RightPadHigh1_64 = cost \"RightPadHigh1_64\"\njetCostWord RightPadHigh8_64 = cost \"RightPadHigh8_64\"\njetCostWord RightPadHigh16_64 = cost \"RightPadHigh16_64\"\njetCostWord RightPadHigh32_64 = cost \"RightPadHigh32_64\"\njetCostWord RightExtend8_16 = cost \"RightExtend8_16\"\njetCostWord RightExtend8_32 = cost \"RightExtend8_32\"\njetCostWord RightExtend16_32 = cost \"RightExtend16_32\"\njetCostWord RightExtend8_64 = cost \"RightExtend8_64\"\njetCostWord RightExtend16_64 = cost \"RightExtend16_64\"\njetCostWord RightExtend32_64 = cost \"RightExtend32_64\"\njetCostWord LeftShiftWith8 = cost \"LeftShiftWith8\"\njetCostWord LeftShiftWith16 = cost \"LeftShiftWith16\"\njetCostWord LeftShiftWith32 = cost \"LeftShiftWith32\"\njetCostWord LeftShiftWith64 = cost \"LeftShiftWith64\"\njetCostWord LeftShift8 = cost \"LeftShift8\"\njetCostWord LeftShift16 = cost \"LeftShift16\"\njetCostWord LeftShift32 = cost \"LeftShift32\"\njetCostWord LeftShift64 = cost \"LeftShift64\"\njetCostWord RightShiftWith8 = cost \"RightShiftWith8\"\njetCostWord RightShiftWith16 = cost \"RightShiftWith16\"\njetCostWord RightShiftWith32 = cost \"RightShiftWith32\"\njetCostWord RightShiftWith64 = cost \"RightShiftWith64\"\njetCostWord RightShift8 = cost \"RightShift8\"\njetCostWord RightShift16 = cost \"RightShift16\"\njetCostWord RightShift32 = cost \"RightShift32\"\njetCostWord RightShift64 = cost \"RightShift64\"\njetCostWord LeftRotate8 = cost \"LeftRotate8\"\njetCostWord LeftRotate16 = cost \"LeftRotate16\"\njetCostWord LeftRotate32 = cost \"LeftRotate32\"\njetCostWord LeftRotate64 = cost \"LeftRotate64\"\njetCostWord RightRotate8 = cost \"RightRotate8\"\njetCostWord RightRotate16 = cost \"RightRotate16\"\njetCostWord RightRotate32 = cost \"RightRotate32\"\njetCostWord RightRotate64 = cost \"RightRotate64\"\n\njetCostArith :: ArithJet a b -> Weight\njetCostArith One8 = cost \"One8\"\njetCostArith One16 = cost \"One16\"\njetCostArith One32 = cost \"One32\"\njetCostArith One64 = cost \"One64\"\njetCostArith FullAdd8 = cost \"FullAdd8\"\njetCostArith FullAdd16 = cost \"FullAdd16\"\njetCostArith FullAdd32 = cost \"FullAdd32\"\njetCostArith FullAdd64 = cost \"FullAdd64\"\njetCostArith Add8 = cost \"Add8\"\njetCostArith Add16 = cost \"Add16\"\njetCostArith Add32 = cost \"Add32\"\njetCostArith Add64 = cost \"Add64\"\njetCostArith FullIncrement8 = cost \"FullIncrement8\"\njetCostArith FullIncrement16 = cost \"FullIncrement16\"\njetCostArith FullIncrement32 = cost \"FullIncrement32\"\njetCostArith FullIncrement64 = cost \"FullIncrement64\"\njetCostArith Increment8 = cost \"Increment8\"\njetCostArith Increment16 = cost \"Increment16\"\njetCostArith Increment32 = cost \"Increment32\"\njetCostArith Increment64 = cost \"Increment64\"\njetCostArith FullSubtract8 = cost \"FullSubtract8\"\njetCostArith FullSubtract16 = cost \"FullSubtract16\"\njetCostArith FullSubtract32 = cost \"FullSubtract32\"\njetCostArith FullSubtract64 = cost \"FullSubtract64\"\njetCostArith Subtract8 = cost \"Subtract8\"\njetCostArith Subtract16 = cost \"Subtract16\"\njetCostArith Subtract32 = cost \"Subtract32\"\njetCostArith Subtract64 = cost \"Subtract64\"\njetCostArith Negate8 = cost \"Negate8\"\njetCostArith Negate16 = cost \"Negate16\"\njetCostArith Negate32 = cost \"Negate32\"\njetCostArith Negate64 = cost \"Negate64\"\njetCostArith FullDecrement8 = cost \"FullDecrement8\"\njetCostArith FullDecrement16 = cost \"FullDecrement16\"\njetCostArith FullDecrement32 = cost \"FullDecrement32\"\njetCostArith FullDecrement64 = cost \"FullDecrement64\"\njetCostArith Decrement8 = cost \"Decrement8\"\njetCostArith Decrement16 = cost \"Decrement16\"\njetCostArith Decrement32 = cost \"Decrement32\"\njetCostArith Decrement64 = cost \"Decrement64\"\njetCostArith Multiply8 = cost \"Multiply8\"\njetCostArith Multiply16 = cost \"Multiply16\"\njetCostArith Multiply32 = cost \"Multiply32\"\njetCostArith Multiply64 = cost \"Multiply64\"\njetCostArith FullMultiply8 = cost \"FullMultiply8\"\njetCostArith FullMultiply16 = cost \"FullMultiply16\"\njetCostArith FullMultiply32 = cost \"FullMultiply32\"\njetCostArith FullMultiply64 = cost \"FullMultiply64\"\njetCostArith IsZero8 = cost \"IsZero8\"\njetCostArith IsZero16 = cost \"IsZero16\"\njetCostArith IsZero32 = cost \"IsZero32\"\njetCostArith IsZero64 = cost \"IsZero64\"\njetCostArith IsOne8 = cost \"IsOne8\"\njetCostArith IsOne16 = cost \"IsOne16\"\njetCostArith IsOne32 = cost \"IsOne32\"\njetCostArith IsOne64 = cost \"IsOne64\"\njetCostArith Le8 = cost \"Le8\"\njetCostArith Le16 = cost \"Le16\"\njetCostArith Le32 = cost \"Le32\"\njetCostArith Le64 = cost \"Le64\"\njetCostArith Lt8 = cost \"Lt8\"\njetCostArith Lt16 = cost \"Lt16\"\njetCostArith Lt32 = cost \"Lt32\"\njetCostArith Lt64 = cost \"Lt64\"\njetCostArith Min8 = cost \"Min8\"\njetCostArith Min16 = cost \"Min16\"\njetCostArith Min32 = cost \"Min32\"\njetCostArith Min64 = cost \"Min64\"\njetCostArith Max8 = cost \"Max8\"\njetCostArith Max16 = cost \"Max16\"\njetCostArith Max32 = cost \"Max32\"\njetCostArith Max64 = cost \"Max64\"\njetCostArith Median8 = cost \"Median8\"\njetCostArith Median16 = cost \"Median16\"\njetCostArith Median32 = cost \"Median32\"\njetCostArith Median64 = cost \"Median64\"\njetCostArith DivMod128_64 = cost \"DivMod128_64\"\njetCostArith DivMod8 = cost \"DivMod8\"\njetCostArith DivMod16 = cost \"DivMod16\"\njetCostArith DivMod32 = cost \"DivMod32\"\njetCostArith DivMod64 = cost \"DivMod64\"\njetCostArith Divide8 = cost \"Divide8\"\njetCostArith Divide16 = cost \"Divide16\"\njetCostArith Divide32 = cost \"Divide32\"\njetCostArith Divide64 = cost \"Divide64\"\njetCostArith Modulo8 = cost \"Modulo8\"\njetCostArith Modulo16 = cost \"Modulo16\"\njetCostArith Modulo32 = cost \"Modulo32\"\njetCostArith Modulo64 = cost \"Modulo64\"\njetCostArith Divides8 = cost \"Divides8\"\njetCostArith Divides16 = cost \"Divides16\"\njetCostArith Divides32 = cost \"Divides32\"\njetCostArith Divides64 = cost \"Divides64\"\n\njetCostHash :: HashJet a b -> Weight\njetCostHash Sha256Block = cost \"Sha256Block\"\njetCostHash Sha256Iv = cost \"Sha256Iv\"\njetCostHash Sha256Ctx8Add1 = cost \"Sha256Ctx8Add1\"\njetCostHash Sha256Ctx8Add2 = cost \"Sha256Ctx8Add2\"\njetCostHash Sha256Ctx8Add4 = cost \"Sha256Ctx8Add4\"\njetCostHash Sha256Ctx8Add8 = cost \"Sha256Ctx8Add8\"\njetCostHash Sha256Ctx8Add16 = cost \"Sha256Ctx8Add16\"\njetCostHash Sha256Ctx8Add32 = cost \"Sha256Ctx8Add32\"\njetCostHash Sha256Ctx8Add64 = cost \"Sha256Ctx8Add64\"\njetCostHash Sha256Ctx8Add128 = cost \"Sha256Ctx8Add128\"\njetCostHash Sha256Ctx8Add256 = cost \"Sha256Ctx8Add256\"\njetCostHash Sha256Ctx8Add512 = cost \"Sha256Ctx8Add512\"\njetCostHash Sha256Ctx8AddBuffer511 = cost \"Sha256Ctx8AddBuffer511\"\njetCostHash Sha256Ctx8Finalize = cost \"Sha256Ctx8Finalize\"\njetCostHash Sha256Ctx8Init = cost \"Sha256Ctx8Init\"\n\njetCostSecp256k1 :: Secp256k1Jet a b -> Weight\njetCostSecp256k1 FeNormalize = cost \"FeNormalize\"\njetCostSecp256k1 FeNegate = cost \"FeNegate\"\njetCostSecp256k1 FeAdd = cost \"FeAdd\"\njetCostSecp256k1 FeSquare = cost \"FeSquare\"\njetCostSecp256k1 FeMultiply = cost \"FeMultiply\"\njetCostSecp256k1 FeMultiplyBeta = cost \"FeMultiplyBeta\"\njetCostSecp256k1 FeInvert = cost \"FeInvert\"\njetCostSecp256k1 FeSquareRoot = cost \"FeSquareRoot\"\njetCostSecp256k1 FeIsZero = cost \"FeIsZero\"\njetCostSecp256k1 FeIsOdd = cost \"FeIsOdd\"\njetCostSecp256k1 ScalarNormalize = cost \"ScalarNormalize\"\njetCostSecp256k1 ScalarNegate = cost \"ScalarNegate\"\njetCostSecp256k1 ScalarAdd = cost \"ScalarAdd\"\njetCostSecp256k1 ScalarSquare = cost \"ScalarSquare\"\njetCostSecp256k1 ScalarMultiply = cost \"ScalarMultiply\"\njetCostSecp256k1 ScalarMultiplyLambda = cost \"ScalarMultiplyLambda\"\njetCostSecp256k1 ScalarInvert = cost \"ScalarInvert\"\njetCostSecp256k1 ScalarIsZero = cost \"ScalarIsZero\"\njetCostSecp256k1 GejInfinity = cost \"GejInfinity\"\njetCostSecp256k1 GejNormalize = cost \"GejNormalize\"\njetCostSecp256k1 GejNegate = cost \"GejNegate\"\njetCostSecp256k1 GeNegate = cost \"GeNegate\"\njetCostSecp256k1 GejDouble = cost \"GejDouble\"\njetCostSecp256k1 GejAdd = cost \"GejAdd\"\njetCostSecp256k1 GejGeAddEx = cost \"GejGeAddEx\"\njetCostSecp256k1 GejGeAdd = cost \"GejGeAdd\"\njetCostSecp256k1 GejRescale = cost \"GejRescale\"\njetCostSecp256k1 GejIsInfinity = cost \"GejIsInfinity\"\njetCostSecp256k1 GejEquiv = cost \"GejEquiv\"\njetCostSecp256k1 GejGeEquiv = cost \"GejGeEquiv\"\njetCostSecp256k1 GejXEquiv = cost \"GejXEquiv\"\njetCostSecp256k1 GejYIsOdd = cost \"GejYIsOdd\"\njetCostSecp256k1 GejIsOnCurve = cost \"GejIsOnCurve\"\njetCostSecp256k1 GeIsOnCurve = cost \"GeIsOnCurve\"\njetCostSecp256k1 Generate = cost \"Generate\"\njetCostSecp256k1 Scale = cost \"Scale\"\njetCostSecp256k1 LinearCombination1 = cost \"LinearCombination1\"\njetCostSecp256k1 LinearVerify1 = cost \"LinearVerify1\"\njetCostSecp256k1 PointVerify1 = cost \"PointVerify1\"\njetCostSecp256k1 Decompress = cost \"Decompress\"\njetCostSecp256k1 Swu = cost \"Swu\"\njetCostSecp256k1 HashToCurve = cost \"HashToCurve\"\n\njetCostSignature :: SignatureJet a b -> Weight\njetCostSignature CheckSigVerify = cost \"CheckSigVerify\"\njetCostSignature Bip0340Verify = cost \"Bip0340Verify\"\n\njetCostCoreBitcoin :: CoreJets.BitcoinJet a b -> Weight\njetCostCoreBitcoin ParseLock = cost \"ParseLock\"\njetCostCoreBitcoin ParseSequence = cost \"ParseSequence\"\njetCostCoreBitcoin TapdataInit = cost \"TapdataInit\"\n\njetCostBitcoin :: BitcoinJet a b -> Weight\njetCostBitcoin (SigHashJet x) = jetCostSigHash x\njetCostBitcoin (TimeLockJet x) = jetCostTimeLock x\njetCostBitcoin (TransactionJet x) = jetCostTransaction x\n\njetCostSigHash :: SigHashJet a b -> Weight\njetCostSigHash SigAllHash = cost \"SigAllHash\"\njetCostSigHash TxHash = cost \"TxHash\"\njetCostSigHash TapEnvHash = cost \"TapEnvHash\"\njetCostSigHash OutputsHash = cost \"OutputsHash\"\njetCostSigHash InputsHash = cost \"InputsHash\"\njetCostSigHash InputUtxosHash = cost \"InputUtxosHash\"\njetCostSigHash OutputHash = cost \"OutputHash\"\njetCostSigHash OutputValuesHash = cost \"OutputValuesHash\"\njetCostSigHash OutputScriptsHash = cost \"OutputScriptsHash\"\njetCostSigHash InputHash = cost \"InputHash\"\njetCostSigHash InputOutpointsHash = cost \"InputOutpointsHash\"\njetCostSigHash InputSequencesHash = cost \"InputSequencesHash\"\njetCostSigHash InputAnnexesHash = cost \"InputAnnexesHash\"\njetCostSigHash InputScriptSigsHash = cost \"InputScriptSigsHash\"\njetCostSigHash InputUtxoHash = cost \"InputUtxoHash\"\njetCostSigHash InputValuesHash = cost \"InputValuesHash\"\njetCostSigHash InputScriptsHash = cost \"InputScriptsHash\"\njetCostSigHash TapleafHash = cost \"TapleafHash\"\njetCostSigHash TappathHash = cost \"TappathHash\"\njetCostSigHash OutpointHash = cost \"OutpointHash\"\njetCostSigHash AnnexHash = cost \"AnnexHash\"\njetCostSigHash BuildTapleafSimplicity = cost \"BuildTapleafSimplicity\"\njetCostSigHash BuildTapbranch = cost \"BuildTapbranch\"\njetCostSigHash BuildTaptweak = cost \"BuildTaptweak\"\n\njetCostTimeLock :: TimeLockJet a b -> Weight\njetCostTimeLock CheckLockHeight = cost \"CheckLockHeight\"\njetCostTimeLock CheckLockTime = cost \"CheckLockTime\"\njetCostTimeLock CheckLockDistance = cost \"CheckLockDistance\"\njetCostTimeLock CheckLockDuration = cost \"CheckLockDuration\"\njetCostTimeLock TxLockHeight = cost \"TxLockHeight\"\njetCostTimeLock TxLockTime = cost \"TxLockTime\"\njetCostTimeLock TxLockDistance = cost \"TxLockDistance\"\njetCostTimeLock TxLockDuration = cost \"TxLockDuration\"\njetCostTimeLock TxIsFinal = cost \"TxIsFinal\"\n\njetCostTransaction :: TransactionJet a b -> Weight\njetCostTransaction ScriptCMR = cost \"ScriptCMR\"\njetCostTransaction InternalKey = cost \"InternalKey\"\njetCostTransaction CurrentIndex = cost \"CurrentIndex\"\njetCostTransaction NumInputs = cost \"NumInputs\"\njetCostTransaction NumOutputs = cost \"NumOutputs\"\njetCostTransaction LockTime = cost \"LockTime\"\njetCostTransaction Fee = cost \"Fee\"\njetCostTransaction OutputValue = cost \"OutputValue\"\njetCostTransaction OutputScriptHash = cost \"OutputScriptHash\"\njetCostTransaction TotalOutputValue = cost \"TotalOutputValue\"\njetCostTransaction CurrentPrevOutpoint = cost \"CurrentPrevOutpoint\"\njetCostTransaction CurrentValue = cost \"CurrentValue\"\njetCostTransaction CurrentScriptHash = cost \"CurrentScriptHash\"\njetCostTransaction CurrentSequence = cost \"CurrentSequence\"\njetCostTransaction CurrentAnnexHash = cost \"CurrentAnnexHash\"\njetCostTransaction CurrentScriptSigHash = cost \"CurrentScriptSigHash\"\njetCostTransaction InputPrevOutpoint = cost \"InputPrevOutpoint\"\njetCostTransaction InputValue = cost \"InputValue\"\njetCostTransaction InputScriptHash = cost \"InputScriptHash\"\njetCostTransaction InputSequence = cost \"InputSequence\"\njetCostTransaction InputAnnexHash = cost \"InputAnnexHash\"\njetCostTransaction InputScriptSigHash = cost \"InputScriptSigHash\"\njetCostTransaction TotalInputValue = cost \"TotalInputValue\"\njetCostTransaction TapleafVersion = cost \"TapleafVersion\"\njetCostTransaction Tappath = cost \"Tappath\"\njetCostTransaction Version = cost \"Version\"\njetCostTransaction TransactionId = cost \"TransactionId\"\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/Programs/SigHash/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Bitcoin.Programs.SigHash.lib' library instance into individual functions.\n-- Users should prefer to use 'Simplicity.Bitcoin.Programs.SigHash.mkLib' in order to share library dependencies.\n-- This module is provided mostly for testing purposes.\nmodule Simplicity.Bitcoin.Programs.SigHash.Lib\n ( outputValuesHash, outputScriptsHash\n , outputsHash, outputHash\n , inputValuesHash, inputScriptsHash, inputUtxosHash, inputUtxoHash\n , inputOutpointsHash, inputSequencesHash, inputAnnexesHash, inputScriptSigsHash, inputsHash, inputHash\n , txHash\n , tapleafHash, tappathHash, tapEnvHash\n , sigAllHash\n ) where\n\nimport qualified Simplicity.Bitcoin.Programs.SigHash as SigHash\n\noutputValuesHash = SigHash.outputValuesHash SigHash.lib\noutputScriptsHash = SigHash.outputScriptsHash SigHash.lib\noutputsHash = SigHash.outputsHash SigHash.lib\noutputHash = SigHash.outputHash SigHash.lib\ninputValuesHash = SigHash.inputValuesHash SigHash.lib\ninputScriptsHash = SigHash.inputScriptsHash SigHash.lib\ninputUtxosHash = SigHash.inputUtxosHash SigHash.lib\ninputUtxoHash = SigHash.inputUtxoHash SigHash.lib\ninputOutpointsHash = SigHash.inputOutpointsHash SigHash.lib\ninputSequencesHash = SigHash.inputSequencesHash SigHash.lib\ninputAnnexesHash = SigHash.inputAnnexesHash SigHash.lib\ninputsHash = SigHash.inputsHash SigHash.lib\ninputHash = SigHash.inputHash SigHash.lib\ninputScriptSigsHash = SigHash.inputScriptSigsHash SigHash.lib\ntxHash = SigHash.txHash SigHash.lib\ntapleafHash = SigHash.tapleafHash SigHash.lib\ntappathHash = SigHash.tappathHash SigHash.lib\ntapEnvHash = SigHash.tapEnvHash SigHash.lib\nsigAllHash = SigHash.sigAllHash SigHash.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/Programs/SigHash.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expressions that implement timelock functions from \"Simplicity.Bitcoin.DataTypes\".\nmodule Simplicity.Bitcoin.Programs.SigHash\n ( Lib(Lib), mkLib\n , outputValuesHash, outputScriptsHash\n , outputsHash, outputHash\n , inputValuesHash, inputScriptsHash, inputUtxosHash, inputUtxoHash\n , inputOutpointsHash, inputSequencesHash, inputAnnexesHash, inputScriptSigsHash, inputsHash, inputHash\n , txHash\n , tapleafHash, tappathHash, tapEnvHash\n , sigAllHash\n -- * Example instances\n , lib\n ) where\n\nimport Prelude hiding (Word, all, drop, max, not, take)\nimport Data.String (fromString)\n\nimport Simplicity.Digest\nimport Simplicity.Bitcoin.Primitive\nimport Simplicity.Bitcoin.Term hiding (one)\nimport Simplicity.Functor\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Word\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Programs.Sha256 (Ctx8)\nimport qualified Simplicity.Bitcoin.Programs.Transaction as Transaction\nimport Simplicity.Programs.Bitcoin.Lib\n\ndata Lib term =\n Lib\n  { -- | A hash of all 'Transaction.outputValue's.\n    outputValuesHash :: term () Word256\n    -- | A hash of all 'OutputScriptHash's.\n  , outputScriptsHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'outputValuesHash'\n    -- * 'outputScriptsHash'\n  , outputsHash :: term () Word256\n    -- | If the given output index exists, returns a hash of\n    --\n    -- * The serialization of the output's value fields.\n    -- * A hash of the output's scriptPubKey.\n  , outputHash :: term Word32 (S Word256)\n    -- | A hash of all 'Transaction.inputValue's.\n  , inputValuesHash :: term () Word256\n    -- | A hash of all 'InputScriptHash's.\n  , inputScriptsHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'inputValuesHash'\n    -- * 'inputScriptsHash'\n  , inputUtxosHash :: term () Word256\n    -- | If the given input index exists, returns a hash of\n    --\n    -- * The serialization of the input UTXO's value field.\n    -- * A hash of the input UTXO's scriptPubKey.\n  , inputUtxoHash :: term Word32 (S Word256)\n    -- | A hash of all 'InputPrevOutpoint's.\n  , inputOutpointsHash :: term () Word256\n    -- | A hash of all 'InputSequence's.\n  , inputSequencesHash :: term () Word256\n    -- | A hash of all 'InputAnnexHash's.\n  , inputAnnexesHash :: term () Word256\n    -- | A hash of all 'InputScriptSigHash's.\n  , inputScriptSigsHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'inputOutpointsHash'\n    -- * 'inputSequencesHash'\n    -- * 'inputAnnexesHash'\n    --\n    -- Note that 'InputScriptSigHash' is excluded.\n  , inputsHash :: term () Word256\n    -- | If the given input index exists, returns a hash of\n    --\n    -- * The input's serialized previous transaction id.\n    -- * The input's previous transaction index in big endian format.\n    -- * The input's sequence number in big endian format.\n    -- * If the input has no annex, or isn't a taproot spend, then the byte 0x00.\n    -- * If the input has an annex, then the byte 0x01 followed by a SHA256 hash of the annex.\n  , inputHash :: term Word32 (S Word256)\n    -- | A hash of\n    --\n    -- * 'Version'\n    -- * 'LockTime'\n    -- * 'inputsHash'\n    -- * 'outputsHash'\n    -- * 'inputUtxosHash'\n  , txHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'TapleafVersion'\n    -- * 'ScriptCMR'\n  , tapleafHash :: term () Word256\n    -- | A hash of all 'Tappath's.\n  , tappathHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'tapleafHash'\n    -- * 'tappathHash'\n    -- * 'InternalKey'\n  , tapEnvHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'txHash'\n    -- * 'tapEnvHash'\n    -- * 'CurrentIndex'\n  , sigAllHash :: term () Word256\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    { outputValuesHash = m outputValuesHash\n    , outputScriptsHash = m outputScriptsHash\n    , outputsHash = m outputsHash\n    , outputHash = m outputHash\n    , inputValuesHash = m inputValuesHash\n    , inputScriptsHash = m inputScriptsHash\n    , inputUtxosHash = m inputUtxosHash\n    , inputUtxoHash = m inputUtxoHash\n    , inputOutpointsHash = m inputOutpointsHash\n    , inputSequencesHash = m inputSequencesHash\n    , inputAnnexesHash = m inputAnnexesHash\n    , inputsHash = m inputsHash\n    , inputHash = m inputHash\n    , inputScriptSigsHash = m inputScriptSigsHash\n    , txHash = m txHash\n    , tapleafHash = m tapleafHash\n    , tappathHash = m tappathHash\n    , tapEnvHash = m tapEnvHash\n    , sigAllHash = m sigAllHash\n    }\n\nmkLib :: forall term. (Assert term, Primitive term) => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                                    -> Sha256.LibAssert term -- ^ \"Simplicity.Programs.Sha256\"\n                                                    -> Transaction.Lib term -- ^ \"Simplicity.Bitcoin.Programs.Transaction\"\n                                                    -> Lib term\nmkLib Sha256.Lib{..} Sha256.LibAssert{..} Transaction.Lib{..} = lib\n where\n  lib@Lib{..} = Lib {\n    outputValuesHash = hashWord64s (drop (primitive OutputValue))\n\n  , outputScriptsHash = hashWord256s32 (drop (primitive OutputScriptHash))\n\n  , outputsHash = ctx8Init &&& (outputValuesHash &&& outputScriptsHash) >>> ctx8Add64 >>> ctx8Finalize\n\n  , outputHash = (primitive OutputValue &&& primitive OutputScriptHash)\n             >>> match (injl unit)\n                       (injr (((unit >>> ctx8Init) &&& oh >>> ctx8Add8)\n                         &&& (drop . assert $ iden) >>> ctx8Add32 >>> ctx8Finalize))\n\n  , inputValuesHash = hashWord64s (drop (primitive InputValue))\n\n  , inputScriptsHash = hashWord256s32 (drop (primitive InputScriptHash))\n\n  , inputUtxosHash = ctx8Init &&& (inputValuesHash &&& inputScriptsHash) >>> ctx8Addn vector64 >>> ctx8Finalize\n\n  , inputUtxoHash = (primitive InputValue &&& primitive InputScriptHash)\n             >>> match (injl unit)\n                       (injr (((unit >>> ctx8Init) &&& oh >>> ctx8Add8)\n                         &&& (drop . assert $ iden) >>> ctx8Add32 >>> ctx8Finalize))\n\n  , inputOutpointsHash =\n     let\n      finalize = ctx8Finalize\n      body = (take (drop (primitive InputPrevOutpoint)) &&& ih)\n         >>> match (injl ih) (injr (ih &&& oh >>> outpointHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , inputSequencesHash = hashWord32s (drop (primitive InputSequence))\n\n  , inputAnnexesHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop (primitive InputAnnexHash)) &&& ih\n         >>> match (injl ih) (injr (ih &&& oh >>> annexHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , inputScriptSigsHash = hashWord256s32 (drop (primitive InputScriptSigHash))\n\n  , inputsHash = (ctx8Init &&& (inputOutpointsHash &&& inputSequencesHash) >>> ctx8Addn vector64)\n             &&& inputAnnexesHash >>> ctx8Addn vector32 >>> ctx8Finalize\n\n  , inputHash = (primitive InputPrevOutpoint &&& (primitive InputSequence &&& primitive InputAnnexHash))\n            >>> match (injl unit)\n                      (injr ((((unit >>> ctx8Init) &&& oh >>> outpointHash)\n                    &&& (drop . take . assert $ iden) >>> ctx8Add4)\n                    &&& (drop . drop . assert $ iden) >>> annexHash >>> ctx8Finalize))\n\n  , txHash = ((ctx8Init &&& (primitive Version &&& primitive LockTime) >>> ctx8Addn vector8)\n         &&& (inputsHash &&& outputsHash) >>> ctx8Addn vector64)\n         &&& inputUtxosHash >>> ctx8Addn vector32 >>> ctx8Finalize\n\n  , tapleafHash = ((Sha256.ctx8InitTag \"TapLeaf\")\n              &&& (primitive TapleafVersion &&& scribe (toWord8 32)) >>> ctx8Addn vector2)\n              &&& (primitive ScriptCMR) >>> ctx8Addn vector32 >>> ctx8Finalize\n\n  , tappathHash = hashWord256s8 (drop (primitive Tappath))\n\n  , tapEnvHash = (ctx8Init &&& tapleafHash >>> ctx8Addn vector32)\n             &&& (tappathHash &&& primitive InternalKey) >>> ctx8Addn vector64 >>> ctx8Finalize\n\n  , sigAllHash = (ctx8Init &&& (txHash &&& tapEnvHash) >>> ctx8Addn vector64)\n             &&& primitive CurrentIndex >>> ctx8Addn vector4 >>> ctx8Finalize\n  }\n  hashLoop256 :: (TyC w, TyC c) => Word w -> term (c, w) (S Word256) -> term (c, Ctx8) Ctx8\n  hashLoop256 = Sha256.hashLoop vector32\n  hashWord256s :: (TyC w, TyC c) => Word w -> term (c, w) (S Word256) -> term c Word256\n  hashWord256s w array = iden &&& (unit >>> ctx8Init) >>> hashLoop256 w array >>> ctx8Finalize\n  hashWord256s32 = hashWord256s word32\n  hashWord256s8 = hashWord256s word8\n  hashWord64s array = iden &&& (unit >>> ctx8Init) >>> Sha256.hashLoop vector8 word32 array >>> ctx8Finalize\n  hashWord32s array = iden &&& (unit >>> ctx8Init) >>> Sha256.hashLoop vector4 word32 array >>> ctx8Finalize\n  ctx8Add4 = ctx8Addn vector4\n  ctx8Add8 = ctx8Addn vector8\n  ctx8Add32 = ctx8Addn vector32\n  ctx8Add64 = ctx8Addn vector64\n\n-- | An instance of the SigHash 'Lib' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLib' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlib :: (Assert term, Primitive term) => Lib term\nlib = mkLib Sha256.lib Sha256.libAssert Transaction.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/Programs/TimeLock.hs",
    "content": "-- | This module defines Simplicity expressions that implement timelock functions from \"Simplicity.Bitcoin.DataTypes\".\nmodule Simplicity.Bitcoin.Programs.TimeLock\n ( txIsFinal\n , txLockHeight, txLockTime\n , txLockDistance, txLockDuration\n , checkLockHeight, checkLockTime\n , checkLockDistance, checkLockDuration\n , module Simplicity.Programs.TimeLock\n , Bit\n ) where\n\nimport Prelude hiding (Word, all, drop, max, not, take)\n\nimport Simplicity.Bitcoin.Primitive\nimport Simplicity.Bitcoin.Term\nimport Simplicity.Bitcoin.Programs.Transaction.Lib\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.TimeLock\nimport Simplicity.Programs.Word\n\n-- | Implements 'Simplicity.Bitcoin.DataTypes.txIsFinal'.\ntxIsFinal :: (Core term, Primitive term) => term () Bit\ntxIsFinal = (unit &&& unit) >>> forWhile word32 body >>> copair iden true\n where\n  body = take (drop (primitive InputSequence)) >>> copair (injl true) (all word32 >>> copair (injl false) (injr unit))\n\n-- | Returns the transaction's LockTime if it is a Height value, otherwise it returns 0.\ntxLockHeight :: (Core term, Primitive term) => term () Height\ntxLockHeight = txIsFinal &&& primitive LockTime\n           >>> cond z (parseLock >>> (copair iden z))\n where\n  z = unit >>> zero word32\n\n-- | Returns the transaction's LockTime if it is a Time value, otherwise it returns 0.\ntxLockTime :: (Core term, Primitive term) => term () Time\ntxLockTime = txIsFinal &&& primitive LockTime\n         >>> cond z (parseLock >>> (copair z iden))\n where\n  z = unit >>> zero word32\n\nbip68VersionCheck :: (Core term, Primitive term) => term () Bit\nbip68VersionCheck = scribe (toWord32 2) &&& primitive Version >>> le word32\n\n-- | Computes the relative height timelock or 0 if there is no such timelock.\ntxLockDistance :: (Assert term, Primitive term) => term () Distance\ntxLockDistance = bip68VersionCheck &&& (currentSequence >>> parseSequence)\n             >>> cond (copair (unit >>> z) (copair iden (unit >>> z))) (unit >>> z)\n where\n  z = zero word16\n\n-- | Computes the relative time timelock or 0 if there is no such timelock.\ntxLockDuration :: (Assert term, Primitive term) => term () Distance\ntxLockDuration = bip68VersionCheck &&& (currentSequence >>> parseSequence)\n             >>> cond (copair (unit >>> z) (copair (unit >>> z) iden)) (unit >>> z)\n where\n  z = zero word16\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockHeight'.\ncheckLockHeight :: (Assert term, Primitive term) => term Height ()\ncheckLockHeight = assert (iden &&& (unit >>> txLockHeight) >>> le word32)\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockTime'.\ncheckLockTime :: (Assert term, Primitive term) => term Time ()\ncheckLockTime = assert (iden &&& (unit >>> txLockTime) >>> le word32)\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockDistance'.\ncheckLockDistance :: (Assert term, Primitive term) => term Distance ()\ncheckLockDistance = assert (iden &&& (unit >>> txLockDistance) >>> le word16)\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockDuration'.\ncheckLockDuration :: (Assert term, Primitive term) => term Duration ()\ncheckLockDuration = assert (iden &&& (unit >>> txLockDuration) >>> le word16)\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/Programs/Transaction/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Bitcoin.Programs.Transaction.lib' library instance into individual functions.\nmodule Simplicity.Bitcoin.Programs.Transaction.Lib\n  ( numInputs\n  , numOutputs\n  , totalInputValue\n  , totalOutputValue\n  , fee\n  , currentPrevOutpoint\n  , currentValue\n  , currentScriptHash\n  , currentSequence\n  , currentAnnexHash\n  , currentScriptSigHash\n  ) where\n\nimport qualified Simplicity.Bitcoin.Programs.Transaction as Transaction\n\nnumInputs = Transaction.numInputs Transaction.lib\nnumOutputs = Transaction.numOutputs Transaction.lib\ntotalInputValue = Transaction.totalInputValue Transaction.lib\ntotalOutputValue = Transaction.totalOutputValue Transaction.lib\nfee = Transaction.fee Transaction.lib\ncurrentPrevOutpoint = Transaction.currentPrevOutpoint Transaction.lib\ncurrentValue = Transaction.currentValue Transaction.lib\ncurrentScriptHash = Transaction.currentScriptHash Transaction.lib\ncurrentSequence = Transaction.currentSequence Transaction.lib\ncurrentAnnexHash = Transaction.currentAnnexHash Transaction.lib\ncurrentScriptSigHash = Transaction.currentScriptSigHash Transaction.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Bitcoin/Programs/Transaction.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expressions that access transaction data.\nmodule Simplicity.Bitcoin.Programs.Transaction\n ( Lib(Lib), lib\n , numInputs\n , numOutputs\n , totalInputValue\n , totalOutputValue\n , fee\n , currentPrevOutpoint\n , currentValue\n , currentScriptHash\n , currentSequence\n , currentAnnexHash\n , currentScriptSigHash\n ) where\n\nimport Prelude hiding (take, drop, subtract)\n\nimport Simplicity.Digest\nimport Simplicity.Bitcoin.Primitive\nimport Simplicity.Bitcoin.Term hiding (one)\nimport Simplicity.Functor\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Word\nimport Simplicity.Ty.Word\n\ndata Lib term =\n Lib\n  {\n    -- | Returns the number of inputs the transaction has.\n    numInputs :: term () Word32\n    -- | Returns the number of outputs the transaction has.\n  , numOutputs :: term () Word32\n  , totalInputValue :: term () Word64\n  , totalOutputValue :: term () Word64\n  , fee :: term () Word64\n    -- | Returns the `InputPrevOutpoint` of the `CurrentIndex`.\n  , currentPrevOutpoint :: term () (Word256,Word32)\n    -- | Returns the `InputValue` of the `CurrentIndex`.\n  , currentValue :: term () Word64\n    -- | Returns the `InputScriptHash` of the `CurrentIndex`.\n  , currentScriptHash :: term () Word256\n    -- | Returns the `InputSequence` of the `CurrentIndex`.\n  , currentSequence :: term () Word32\n    -- | Returns the `InputAnnexHash` of the `CurrentIndex`.\n  , currentAnnexHash :: term () (S Word256)\n    -- | Returns the `InputScriptSigHash` of the `CurrentIndex`.\n  , currentScriptSigHash :: term () Word256\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    {\n      numInputs = m numInputs\n    , numOutputs = m numOutputs\n    , totalInputValue = m totalInputValue\n    , totalOutputValue = m totalOutputValue\n    , fee = m fee\n    , currentPrevOutpoint = m currentPrevOutpoint\n    , currentValue = m currentValue\n    , currentScriptHash = m currentScriptHash\n    , currentSequence = m currentSequence\n    , currentAnnexHash = m currentAnnexHash\n    , currentScriptSigHash = m currentScriptSigHash\n    }\n\n-- | Build the Transaction 'Lib' library.\nlib :: forall term. (Assert term, Primitive term) => Lib term\nlib = l\n where\n  l@Lib{..} = Lib {\n    numInputs = firstFail word32 (primitive InputValue)\n\n  , numOutputs = firstFail word32 (primitive OutputValue)\n\n  , totalInputValue = let\n      body = take (drop (primitive InputValue)) &&& ih >>> match (injl ih) (injr (add word64 >>> ih))\n     in (iden &&& zero word64) >>> forWhile word32 body >>> copair iden iden\n\n  , totalOutputValue = let\n      body = take (drop (primitive OutputValue)) &&& ih >>> match (injl ih) (injr (add word64 >>> ih))\n     in (iden &&& zero word64) >>> forWhile word32 body >>> copair iden iden\n\n  , fee = totalInputValue &&& totalOutputValue >>> subtract word64 >>> ih\n\n  , currentPrevOutpoint = primitive CurrentIndex >>> assert (primitive InputPrevOutpoint)\n\n  , currentValue = primitive CurrentIndex >>> assert (primitive InputValue)\n\n  , currentScriptHash = primitive CurrentIndex >>> assert (primitive InputScriptHash)\n\n  , currentSequence = primitive CurrentIndex >>> assert (primitive InputSequence)\n\n  , currentAnnexHash = primitive CurrentIndex >>> assert (primitive InputAnnexHash)\n\n  , currentScriptSigHash = primitive CurrentIndex >>> assert (primitive InputScriptSigHash)\n  }\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Benchmarks.hs",
    "content": "module Simplicity.Elements.Benchmarks (cost) where\n\nimport Simplicity.BitMachine.StaticAnalysis.Cost\n\nrawBenchmark :: String -> Double\nrawBenchmark \"Add16\" = 60.085041109205505\nrawBenchmark \"Add32\" = 65.00459118488351\nrawBenchmark \"Add64\" = 60.770501535336855\nrawBenchmark \"Add8\" = 62.62388142499319\nrawBenchmark \"All16\" = 34.58413668932453\nrawBenchmark \"All32\" = 36.12506541685401\nrawBenchmark \"All64\" = 43.94474405869988\nrawBenchmark \"All8\" = 42.298630039382395\nrawBenchmark \"And1\" = 44.41796508997593\nrawBenchmark \"And16\" = 49.190985826792\nrawBenchmark \"And32\" = 52.330825534594354\nrawBenchmark \"And64\" = 52.00679267933024\nrawBenchmark \"And8\" = 50.9336818377678\nrawBenchmark \"AnnexHash\" = 133.8975\nrawBenchmark \"AssetAmountHash\" = 171.26\nrawBenchmark \"Bip0340Verify\" = 54541.00304991227\nrawBenchmark \"BuildTapbranch\" = 1424.2525\nrawBenchmark \"BuildTapleafSimplicity\" = 1024.204285714286\nrawBenchmark \"BuildTaptweak\" = 51562.63\nrawBenchmark \"CalculateAsset\" = 448.8285714285716\nrawBenchmark \"CalculateConfidentialToken\" = 392.9185714285713\nrawBenchmark \"CalculateExplicitToken\" = 428.43571428571437\nrawBenchmark \"CalculateIssuanceEntropy\" = 1163.9275\nrawBenchmark \"Ch1\" = 43.38647329238317\nrawBenchmark \"Ch16\" = 52.27708434095646\nrawBenchmark \"Ch32\" = 50.75927210580458\nrawBenchmark \"Ch64\" = 50.64224884783096\nrawBenchmark \"Ch8\" = 43.247948521208684\nrawBenchmark \"CheckLockDistance\" = 58.753725206887374\nrawBenchmark \"CheckLockDuration\" = 57.030697303127475\nrawBenchmark \"CheckLockHeight\" = 42.78170096368622\nrawBenchmark \"CheckLockTime\" = 51.84407299762977\nrawBenchmark \"CheckSigVerify\" = 55555.079016059564\nrawBenchmark \"Complement1\" = 44.30963250954837\nrawBenchmark \"Complement16\" = 41.853819540512724\nrawBenchmark \"Complement32\" = 51.936600421665986\nrawBenchmark \"Complement64\" = 49.44074859372622\nrawBenchmark \"Complement8\" = 44.49004402013328\nrawBenchmark \"CurrentAmount\" = 125.233683871098\nrawBenchmark \"CurrentAnnexHash\" = 43.96303036926559\nrawBenchmark \"CurrentAsset\" = 95.55358469768584\nrawBenchmark \"CurrentIndex\" = 49.14822556250178\nrawBenchmark \"CurrentIssuanceAssetAmount\" = 91.68812641475432\nrawBenchmark \"CurrentIssuanceAssetProof\" = 78.32085006755332\nrawBenchmark \"CurrentIssuanceTokenAmount\" = 104.56443464343835\nrawBenchmark \"CurrentIssuanceTokenProof\" = 80.11480670010411\nrawBenchmark \"CurrentNewIssuanceContract\" = 80.93662026502236\nrawBenchmark \"CurrentPegin\" = 81.6814471387894\nrawBenchmark \"CurrentPrevOutpoint\" = 87.01737208854547\nrawBenchmark \"CurrentReissuanceBlinding\" = 52.34362964598284\nrawBenchmark \"CurrentReissuanceEntropy\" = 47.41824644363429\nrawBenchmark \"CurrentScriptHash\" = 74.54897385905238\nrawBenchmark \"CurrentScriptSigHash\" = 77.29143987908452\nrawBenchmark \"CurrentSequence\" = 49.55213254331629\nrawBenchmark \"Decompress\" = 6034.0242131124305\nrawBenchmark \"Decrement16\" = 47.619384690269044\nrawBenchmark \"Decrement32\" = 50.70470833162736\nrawBenchmark \"Decrement64\" = 49.91961044181172\nrawBenchmark \"Decrement8\" = 44.41452963683716\nrawBenchmark \"DivMod128_64\" = 115.77280158438838\nrawBenchmark \"DivMod16\" = 65.69925000385433\nrawBenchmark \"DivMod32\" = 64.04450140966351\nrawBenchmark \"DivMod64\" = 48.188851905873335\nrawBenchmark \"DivMod8\" = 71.3705571750924\nrawBenchmark \"Divide16\" = 54.81267262645548\nrawBenchmark \"Divide32\" = 55.81078135389193\nrawBenchmark \"Divide64\" = 56.43166191465282\nrawBenchmark \"Divide8\" = 60.07629081022806\nrawBenchmark \"Divides16\" = 51.9870240819556\nrawBenchmark \"Divides32\" = 48.77753656294132\nrawBenchmark \"Divides64\" = 50.6929784746092\nrawBenchmark \"Divides8\" = 54.766521462004285\nrawBenchmark \"Eq1\" = 41.19704900879444\nrawBenchmark \"Eq16\" = 46.96434429747661\nrawBenchmark \"Eq256\" = 125.24267688284475\nrawBenchmark \"Eq32\" = 49.127933441004416\nrawBenchmark \"Eq64\" = 56.10776637742226\nrawBenchmark \"Eq8\" = 53.09387335277708\nrawBenchmark \"FeAdd\" = 419.4421553609743\nrawBenchmark \"FeInvert\" = 1764.2095713900258\nrawBenchmark \"FeIsOdd\" = 161.4908040889559\nrawBenchmark \"FeIsZero\" = 148.9500015909772\nrawBenchmark \"FeMultiply\" = 449.33346943264536\nrawBenchmark \"FeMultiplyBeta\" = 321.936623495282\nrawBenchmark \"FeNegate\" = 295.2583854628667\nrawBenchmark \"FeNormalize\" = 289.8402224157142\nrawBenchmark \"FeSquare\" = 309.0320861847194\nrawBenchmark \"FeSquareRoot\" = 5708.658550943187\nrawBenchmark \"FullAdd16\" = 67.58987477677238\nrawBenchmark \"FullAdd32\" = 66.11773354771384\nrawBenchmark \"FullAdd64\" = 67.48909817913685\nrawBenchmark \"FullAdd8\" = 70.65903996899138\nrawBenchmark \"FullDecrement16\" = 51.39362224910755\nrawBenchmark \"FullDecrement32\" = 59.97907579303369\nrawBenchmark \"FullDecrement64\" = 45.49679194449331\nrawBenchmark \"FullDecrement8\" = 50.64117149094439\nrawBenchmark \"FullIncrement16\" = 49.66797298374831\nrawBenchmark \"FullIncrement32\" = 58.30643709946031\nrawBenchmark \"FullIncrement64\" = 55.24105841134342\nrawBenchmark \"FullIncrement8\" = 40.36810258706402\nrawBenchmark \"FullLeftShift16_1\" = 46.18858118129996\nrawBenchmark \"FullLeftShift16_2\" = 46.620891275146725\nrawBenchmark \"FullLeftShift16_4\" = 49.483816401261585\nrawBenchmark \"FullLeftShift16_8\" = 36.162357067674385\nrawBenchmark \"FullLeftShift32_1\" = 46.939178133248234\nrawBenchmark \"FullLeftShift32_16\" = 45.4571656643761\nrawBenchmark \"FullLeftShift32_2\" = 37.55784335894769\nrawBenchmark \"FullLeftShift32_4\" = 46.8616632714964\nrawBenchmark \"FullLeftShift32_8\" = 50.89997070924756\nrawBenchmark \"FullLeftShift64_1\" = 55.05773228244788\nrawBenchmark \"FullLeftShift64_16\" = 50.35375142144335\nrawBenchmark \"FullLeftShift64_2\" = 52.524422908169726\nrawBenchmark \"FullLeftShift64_32\" = 48.19968554848869\nrawBenchmark \"FullLeftShift64_4\" = 52.64511921564639\nrawBenchmark \"FullLeftShift64_8\" = 47.92651978022118\nrawBenchmark \"FullLeftShift8_1\" = 53.371611885499135\nrawBenchmark \"FullLeftShift8_2\" = 53.40012672044502\nrawBenchmark \"FullLeftShift8_4\" = 47.39442146733317\nrawBenchmark \"FullMultiply16\" = 62.764043288900055\nrawBenchmark \"FullMultiply32\" = 53.41609046991522\nrawBenchmark \"FullMultiply64\" = 70.99465378729637\nrawBenchmark \"FullMultiply8\" = 60.79100324703799\nrawBenchmark \"FullRightShift16_1\" = 44.463801274297026\nrawBenchmark \"FullRightShift16_2\" = 44.24484734954473\nrawBenchmark \"FullRightShift16_4\" = 49.377415322695924\nrawBenchmark \"FullRightShift16_8\" = 31.761769518909432\nrawBenchmark \"FullRightShift32_1\" = 41.12634362378231\nrawBenchmark \"FullRightShift32_16\" = 35.61914526793314\nrawBenchmark \"FullRightShift32_2\" = 35.367670218288545\nrawBenchmark \"FullRightShift32_4\" = 39.91820320167241\nrawBenchmark \"FullRightShift32_8\" = 46.755300941717685\nrawBenchmark \"FullRightShift64_1\" = 55.084156371380026\nrawBenchmark \"FullRightShift64_16\" = 48.15200506212657\nrawBenchmark \"FullRightShift64_2\" = 48.06952686812977\nrawBenchmark \"FullRightShift64_32\" = 41.03987641674198\nrawBenchmark \"FullRightShift64_4\" = 52.21526347861463\nrawBenchmark \"FullRightShift64_8\" = 55.476007550145084\nrawBenchmark \"FullRightShift8_1\" = 48.89242850292436\nrawBenchmark \"FullRightShift8_2\" = 47.923842296151605\nrawBenchmark \"FullRightShift8_4\" = 49.464558624033415\nrawBenchmark \"FullSubtract16\" = 67.38341429479223\nrawBenchmark \"FullSubtract32\" = 64.95233724051934\nrawBenchmark \"FullSubtract64\" = 54.67370881511828\nrawBenchmark \"FullSubtract8\" = 70.40320985209922\nrawBenchmark \"GeIsOnCurve\" = 357.15050069150345\nrawBenchmark \"GeNegate\" = 525.226102912438\nrawBenchmark \"GejAdd\" = 1609.7141943875479\nrawBenchmark \"GejDouble\" = 980.0399024548117\nrawBenchmark \"GejEquiv\" = 1233.877894994496\nrawBenchmark \"GejGeAdd\" = 1376.3073973202286\nrawBenchmark \"GejGeAddEx\" = 1510.6965337240808\nrawBenchmark \"GejGeEquiv\" = 980.6789399836443\nrawBenchmark \"GejInfinity\" = 398.03834524479885\nrawBenchmark \"GejIsInfinity\" = 370.3037942737992\nrawBenchmark \"GejIsOnCurve\" = 564.8607923748427\nrawBenchmark \"GejNegate\" = 767.335419690289\nrawBenchmark \"GejNormalize\" = 2277.254498988017\nrawBenchmark \"GejRescale\" = 1060.3680232144072\nrawBenchmark \"GejXEquiv\" = 581.9587646807994\nrawBenchmark \"GejYIsOdd\" = 2028.4000778806126\nrawBenchmark \"Generate\" = 27817.092507074034\nrawBenchmark \"GenesisBlockHash\" = 82.31162715271869\nrawBenchmark \"HashToCurve\" = 37829.83541169991\nrawBenchmark \"High1\" = 31.86779242260267\nrawBenchmark \"High16\" = 36.868090596516424\nrawBenchmark \"High32\" = 32.65996617035562\nrawBenchmark \"High64\" = 37.93536469075943\nrawBenchmark \"High8\" = 32.943473850377345\nrawBenchmark \"Increment16\" = 38.392451852783076\nrawBenchmark \"Increment32\" = 51.55474922519457\nrawBenchmark \"Increment64\" = 48.75851943327705\nrawBenchmark \"Increment8\" = 47.33246517826407\nrawBenchmark \"InputAmount\" = 158.40519188620513\nrawBenchmark \"InputAmountsHash\" = 78.18657902074679\nrawBenchmark \"InputAnnexHash\" = 50.39975862268921\nrawBenchmark \"InputAnnexesHash\" = 86.3866910419064\nrawBenchmark \"InputAsset\" = 90.4780872924351\nrawBenchmark \"InputHash\" = 536.5958475792895\nrawBenchmark \"InputOutpointsHash\" = 79.08911806240489\nrawBenchmark \"InputPegin\" = 83.98879360287582\nrawBenchmark \"InputPrevOutpoint\" = 89.3872112500479\nrawBenchmark \"InputScriptHash\" = 81.89252511817973\nrawBenchmark \"InputScriptSigHash\" = 85.18974271907717\nrawBenchmark \"InputScriptSigsHash\" = 76.77862968879907\nrawBenchmark \"InputScriptsHash\" = 76.14052574532384\nrawBenchmark \"InputSequence\" = 55.04705395962086\nrawBenchmark \"InputSequencesHash\" = 79.43302880722794\nrawBenchmark \"InputUtxoHash\" = 1109.0519630683661\nrawBenchmark \"InputUtxosHash\" = 77.9855360566019\nrawBenchmark \"InputsHash\" = 86.08549951543868\nrawBenchmark \"InternalKey\" = 84.89379535345726\nrawBenchmark \"IsOne16\" = 45.64683559591153\nrawBenchmark \"IsOne32\" = 36.58111091935885\nrawBenchmark \"IsOne64\" = 46.45643688595097\nrawBenchmark \"IsOne8\" = 50.62634232797921\nrawBenchmark \"IsZero16\" = 42.109412893391784\nrawBenchmark \"IsZero32\" = 47.422659579472345\nrawBenchmark \"IsZero64\" = 44.99474610179195\nrawBenchmark \"IsZero8\" = 43.2557200624648\nrawBenchmark \"Issuance\" = 50.74625704409637\nrawBenchmark \"IssuanceAsset\" = 83.923133996747\nrawBenchmark \"IssuanceAssetAmount\" = 90.39955141184957\nrawBenchmark \"IssuanceAssetAmountsHash\" = 77.23792759162177\nrawBenchmark \"IssuanceAssetProof\" = 83.58936713231286\nrawBenchmark \"IssuanceBlindingEntropyHash\" = 71.8325573717658\nrawBenchmark \"IssuanceEntropy\" = 85.07102143556246\nrawBenchmark \"IssuanceHash\" = 2076.7943990862123\nrawBenchmark \"IssuanceRangeProofsHash\" = 71.96306342619509\nrawBenchmark \"IssuanceToken\" = 83.0717304440206\nrawBenchmark \"IssuanceTokenAmount\" = 109.09867909211174\nrawBenchmark \"IssuanceTokenAmountsHash\" = 76.77352744178933\nrawBenchmark \"IssuanceTokenProof\" = 83.80024681603632\nrawBenchmark \"IssuancesHash\" = 78.75424725524539\nrawBenchmark \"LbtcAsset\" = 80.81176100612451\nrawBenchmark \"Le16\" = 62.59866562816164\nrawBenchmark \"Le32\" = 51.691597800360576\nrawBenchmark \"Le64\" = 51.98614962560549\nrawBenchmark \"Le8\" = 60.913133751779085\nrawBenchmark \"LeftExtend16_32\" = 48.321737975265485\nrawBenchmark \"LeftExtend16_64\" = 49.768255836158694\nrawBenchmark \"LeftExtend1_16\" = 37.33174442804743\nrawBenchmark \"LeftExtend1_32\" = 33.51980854843369\nrawBenchmark \"LeftExtend1_64\" = 42.74855194501722\nrawBenchmark \"LeftExtend1_8\" = 36.301294529908404\nrawBenchmark \"LeftExtend32_64\" = 35.00507852860337\nrawBenchmark \"LeftExtend8_16\" = 49.27356422938357\nrawBenchmark \"LeftExtend8_32\" = 50.49729967016896\nrawBenchmark \"LeftExtend8_64\" = 59.47812571540859\nrawBenchmark \"LeftPadHigh16_32\" = 50.98338161795605\nrawBenchmark \"LeftPadHigh16_64\" = 61.60346108788994\nrawBenchmark \"LeftPadHigh1_16\" = 78.50508931127487\nrawBenchmark \"LeftPadHigh1_32\" = 146.26121054697865\nrawBenchmark \"LeftPadHigh1_64\" = 234.97787849061334\nrawBenchmark \"LeftPadHigh1_8\" = 55.39324189082562\nrawBenchmark \"LeftPadHigh32_64\" = 52.17097219985573\nrawBenchmark \"LeftPadHigh8_16\" = 49.21564430401875\nrawBenchmark \"LeftPadHigh8_32\" = 57.68232149971271\nrawBenchmark \"LeftPadHigh8_64\" = 75.61993575310662\nrawBenchmark \"LeftPadLow16_32\" = 38.49926754604619\nrawBenchmark \"LeftPadLow16_64\" = 59.250342412456355\nrawBenchmark \"LeftPadLow1_16\" = 36.36920559197807\nrawBenchmark \"LeftPadLow1_32\" = 35.466251309723425\nrawBenchmark \"LeftPadLow1_64\" = 33.98849564613479\nrawBenchmark \"LeftPadLow1_8\" = 31.204669198216017\nrawBenchmark \"LeftPadLow32_64\" = 50.99335457473273\nrawBenchmark \"LeftPadLow8_16\" = 37.126983955984464\nrawBenchmark \"LeftPadLow8_32\" = 34.00684198357385\nrawBenchmark \"LeftPadLow8_64\" = 62.53255064489368\nrawBenchmark \"LeftRotate16\" = 43.001392195690684\nrawBenchmark \"LeftRotate32\" = 59.09903021360284\nrawBenchmark \"LeftRotate64\" = 54.856167630986604\nrawBenchmark \"LeftRotate8\" = 49.076586368944184\nrawBenchmark \"LeftShift16\" = 40.235919376592726\nrawBenchmark \"LeftShift32\" = 43.76932719716762\nrawBenchmark \"LeftShift64\" = 45.73742443386188\nrawBenchmark \"LeftShift8\" = 50.57937158222907\nrawBenchmark \"LeftShiftWith16\" = 46.61700433558814\nrawBenchmark \"LeftShiftWith32\" = 52.81674643546554\nrawBenchmark \"LeftShiftWith64\" = 57.28743045790752\nrawBenchmark \"LeftShiftWith8\" = 59.90532889097582\nrawBenchmark \"Leftmost16_1\" = 51.70552021960683\nrawBenchmark \"Leftmost16_2\" = 50.08994317254649\nrawBenchmark \"Leftmost16_4\" = 41.80688946896769\nrawBenchmark \"Leftmost16_8\" = 39.60132273936846\nrawBenchmark \"Leftmost32_1\" = 43.30897199282181\nrawBenchmark \"Leftmost32_16\" = 56.9016513351459\nrawBenchmark \"Leftmost32_2\" = 37.2079258996741\nrawBenchmark \"Leftmost32_4\" = 29.068274922258183\nrawBenchmark \"Leftmost32_8\" = 57.77525039357289\nrawBenchmark \"Leftmost64_1\" = 43.60916457293865\nrawBenchmark \"Leftmost64_16\" = 48.96468216997573\nrawBenchmark \"Leftmost64_2\" = 39.922903799137245\nrawBenchmark \"Leftmost64_32\" = 50.08880572463181\nrawBenchmark \"Leftmost64_4\" = 44.43246907916128\nrawBenchmark \"Leftmost64_8\" = 47.83372489702833\nrawBenchmark \"Leftmost8_1\" = 50.511534173537996\nrawBenchmark \"Leftmost8_2\" = 50.40905212515953\nrawBenchmark \"Leftmost8_4\" = 48.50341727771359\nrawBenchmark \"LinearCombination1\" = 47040.93376314034\nrawBenchmark \"LinearVerify1\" = 48182.42296619453\nrawBenchmark \"LockTime\" = 47.70317349257734\nrawBenchmark \"Low1\" = 21.364181571710727\nrawBenchmark \"Low16\" = 38.49685288168574\nrawBenchmark \"Low32\" = 34.91518106691244\nrawBenchmark \"Low64\" = 26.186652606444063\nrawBenchmark \"Low8\" = 26.29098053293153\nrawBenchmark \"Lt16\" = 68.8706112088274\nrawBenchmark \"Lt32\" = 59.53443050674163\nrawBenchmark \"Lt64\" = 42.364172739029975\nrawBenchmark \"Lt8\" = 59.93172194081304\nrawBenchmark \"Maj1\" = 34.96061898351924\nrawBenchmark \"Maj16\" = 44.94543138149138\nrawBenchmark \"Maj32\" = 53.683025295042526\nrawBenchmark \"Maj64\" = 51.72821494872019\nrawBenchmark \"Maj8\" = 52.36812937443448\nrawBenchmark \"Max16\" = 63.71134773209803\nrawBenchmark \"Max32\" = 51.18820119510864\nrawBenchmark \"Max64\" = 57.83190769189562\nrawBenchmark \"Max8\" = 53.8515645366078\nrawBenchmark \"Median16\" = 68.42782342281728\nrawBenchmark \"Median32\" = 56.38805745851612\nrawBenchmark \"Median64\" = 60.56301468794372\nrawBenchmark \"Median8\" = 67.89381197782626\nrawBenchmark \"Min16\" = 54.04518077046216\nrawBenchmark \"Min32\" = 62.97525599888933\nrawBenchmark \"Min64\" = 56.81753152966646\nrawBenchmark \"Min8\" = 55.00456012337589\nrawBenchmark \"Modulo16\" = 57.518560975532644\nrawBenchmark \"Modulo32\" = 57.08875049862416\nrawBenchmark \"Modulo64\" = 47.65027121643483\nrawBenchmark \"Modulo8\" = 56.70553878631508\nrawBenchmark \"Multiply16\" = 50.145505525636324\nrawBenchmark \"Multiply32\" = 50.46424112527131\nrawBenchmark \"Multiply64\" = 47.45018438748184\nrawBenchmark \"Multiply8\" = 52.03683827069245\nrawBenchmark \"Negate16\" = 38.90971489117882\nrawBenchmark \"Negate32\" = 47.61426946368856\nrawBenchmark \"Negate64\" = 52.41405985192276\nrawBenchmark \"Negate8\" = 50.833505778893596\nrawBenchmark \"NewIssuanceContract\" = 87.26032454930737\nrawBenchmark \"NonceHash\" = 176.1925\nrawBenchmark \"NumInputs\" = 48.16180127047511\nrawBenchmark \"NumOutputs\" = 44.087257539344634\nrawBenchmark \"One16\" = 33.60409513338236\nrawBenchmark \"One32\" = 33.222841959359855\nrawBenchmark \"One64\" = 33.2636748253045\nrawBenchmark \"One8\" = 34.88577796465835\nrawBenchmark \"Or1\" = 42.911584386668494\nrawBenchmark \"Or16\" = 52.44067390159183\nrawBenchmark \"Or32\" = 58.43280128473747\nrawBenchmark \"Or64\" = 55.4909110467771\nrawBenchmark \"Or8\" = 52.17171918086705\nrawBenchmark \"OutpointHash\" = 177.4066666666666\nrawBenchmark \"OutputAmount\" = 165.73152456360123\nrawBenchmark \"OutputAmountsHash\" = 77.96882406434946\nrawBenchmark \"OutputAsset\" = 94.686291527907\nrawBenchmark \"OutputHash\" = 1582.7809306692625\nrawBenchmark \"OutputIsFee\" = 51.60956472131248\nrawBenchmark \"OutputNonce\" = 109.35522600953867\nrawBenchmark \"OutputNoncesHash\" = 84.29265131406393\nrawBenchmark \"OutputNullDatum\" = 48.47393556700054\nrawBenchmark \"OutputRangeProof\" = 85.91729268925901\nrawBenchmark \"OutputRangeProofsHash\" = 76.01487688752357\nrawBenchmark \"OutputScriptHash\" = 84.3315823091484\nrawBenchmark \"OutputScriptsHash\" = 79.43957403869098\nrawBenchmark \"OutputSurjectionProof\" = 83.9027630832634\nrawBenchmark \"OutputSurjectionProofsHash\" = 76.73829814634762\nrawBenchmark \"OutputsHash\" = 75.43857791831756\nrawBenchmark \"ParseLock\" = 54.40929208819059\nrawBenchmark \"ParseSequence\" = 64.73080420529664\nrawBenchmark \"PointVerify1\" = 46104.55214160499\nrawBenchmark \"ReissuanceBlinding\" = 50.73337651212825\nrawBenchmark \"ReissuanceEntropy\" = 51.84338682545885\nrawBenchmark \"RightExtend16_32\" = 41.1152394906143\nrawBenchmark \"RightExtend16_64\" = 45.58796842580513\nrawBenchmark \"RightExtend32_64\" = 52.52115235015417\nrawBenchmark \"RightExtend8_16\" = 42.62436355994448\nrawBenchmark \"RightExtend8_32\" = 58.95339195029901\nrawBenchmark \"RightExtend8_64\" = 69.32207026801537\nrawBenchmark \"RightPadHigh16_32\" = 39.424436392837556\nrawBenchmark \"RightPadHigh16_64\" = 49.248174058995446\nrawBenchmark \"RightPadHigh1_16\" = 79.72621339569697\nrawBenchmark \"RightPadHigh1_32\" = 124.40833120289545\nrawBenchmark \"RightPadHigh1_64\" = 264.5187952944149\nrawBenchmark \"RightPadHigh1_8\" = 59.84994335191323\nrawBenchmark \"RightPadHigh32_64\" = 52.54942442499254\nrawBenchmark \"RightPadHigh8_16\" = 49.67776118222926\nrawBenchmark \"RightPadHigh8_32\" = 61.532852924980645\nrawBenchmark \"RightPadHigh8_64\" = 59.83710387705546\nrawBenchmark \"RightPadLow16_32\" = 39.87733699553977\nrawBenchmark \"RightPadLow16_64\" = 53.36064826952089\nrawBenchmark \"RightPadLow1_16\" = 45.07485014417921\nrawBenchmark \"RightPadLow1_32\" = 41.676208784085105\nrawBenchmark \"RightPadLow1_64\" = 41.090406238456374\nrawBenchmark \"RightPadLow1_8\" = 37.92725470993486\nrawBenchmark \"RightPadLow32_64\" = 44.8312134267434\nrawBenchmark \"RightPadLow8_16\" = 41.75506302525163\nrawBenchmark \"RightPadLow8_32\" = 43.22301100078246\nrawBenchmark \"RightPadLow8_64\" = 46.0905871657453\nrawBenchmark \"RightRotate16\" = 55.451707999091234\nrawBenchmark \"RightRotate32\" = 51.33869960974644\nrawBenchmark \"RightRotate64\" = 51.72067856450664\nrawBenchmark \"RightRotate8\" = 41.88436010698827\nrawBenchmark \"RightShift16\" = 47.19331997670199\nrawBenchmark \"RightShift32\" = 49.25458525218545\nrawBenchmark \"RightShift64\" = 50.88231418071366\nrawBenchmark \"RightShift8\" = 49.252427103572366\nrawBenchmark \"RightShiftWith16\" = 58.52512455955412\nrawBenchmark \"RightShiftWith32\" = 51.447551882228765\nrawBenchmark \"RightShiftWith64\" = 53.91540234901843\nrawBenchmark \"RightShiftWith8\" = 57.29707045629772\nrawBenchmark \"Rightmost16_1\" = 39.17928949934075\nrawBenchmark \"Rightmost16_2\" = 45.91367784810004\nrawBenchmark \"Rightmost16_4\" = 42.474022809253114\nrawBenchmark \"Rightmost16_8\" = 38.446904909381345\nrawBenchmark \"Rightmost32_1\" = 50.25654518416595\nrawBenchmark \"Rightmost32_16\" = 35.92965867433983\nrawBenchmark \"Rightmost32_2\" = 41.65904204963655\nrawBenchmark \"Rightmost32_4\" = 51.37905781489622\nrawBenchmark \"Rightmost32_8\" = 43.44904922808357\nrawBenchmark \"Rightmost64_1\" = 43.0289803608958\nrawBenchmark \"Rightmost64_16\" = 48.13330514376038\nrawBenchmark \"Rightmost64_2\" = 41.49489356566985\nrawBenchmark \"Rightmost64_32\" = 42.65585176023737\nrawBenchmark \"Rightmost64_4\" = 39.403601089532856\nrawBenchmark \"Rightmost64_8\" = 38.74161920301971\nrawBenchmark \"Rightmost8_1\" = 44.41905969704213\nrawBenchmark \"Rightmost8_2\" = 54.657570189798406\nrawBenchmark \"Rightmost8_4\" = 54.51548104019699\nrawBenchmark \"ScalarAdd\" = 410.7714457930927\nrawBenchmark \"ScalarInvert\" = 1774.301764466127\nrawBenchmark \"ScalarIsZero\" = 150.68813566357764\nrawBenchmark \"ScalarMultiply\" = 430.52312683792223\nrawBenchmark \"ScalarMultiplyLambda\" = 309.76081130635305\nrawBenchmark \"ScalarNegate\" = 272.4586280769547\nrawBenchmark \"ScalarNormalize\" = 262.222720853674\nrawBenchmark \"ScalarSquare\" = 319.63744130697734\nrawBenchmark \"Scale\" = 40374.728500765836\nrawBenchmark \"ScriptCMR\" = 76.06354466217492\nrawBenchmark \"Sha256Block\" = 428.73063753263835\nrawBenchmark \"Sha256Ctx8Add1\" = 357.1469939873504\nrawBenchmark \"Sha256Ctx8Add128\" = 988.6918403199944\nrawBenchmark \"Sha256Ctx8Add16\" = 415.4784277283797\nrawBenchmark \"Sha256Ctx8Add2\" = 367.61900312553604\nrawBenchmark \"Sha256Ctx8Add256\" = 1618.063444006473\nrawBenchmark \"Sha256Ctx8Add32\" = 498.1741652411793\nrawBenchmark \"Sha256Ctx8Add4\" = 358.73790652714655\nrawBenchmark \"Sha256Ctx8Add512\" = 2943.876504030598\nrawBenchmark \"Sha256Ctx8Add64\" = 659.6032113473665\nrawBenchmark \"Sha256Ctx8Add8\" = 374.68717127064343\nrawBenchmark \"Sha256Ctx8AddBuffer511\" = 2811.1712632387207\nrawBenchmark \"Sha256Ctx8Finalize\" = 464.13750087504866\nrawBenchmark \"Sha256Ctx8Init\" = 65.72256048302079\nrawBenchmark \"Sha256Iv\" = 51.86507201053729\nrawBenchmark \"SigAllHash\" = 74.01780898147763\nrawBenchmark \"Some1\" = 39.348504333222046\nrawBenchmark \"Some16\" = 35.44393063743075\nrawBenchmark \"Some32\" = 35.685777760954764\nrawBenchmark \"Some64\" = 52.01425312522673\nrawBenchmark \"Some8\" = 41.67994966835807\nrawBenchmark \"Subtract16\" = 63.19727385093392\nrawBenchmark \"Subtract32\" = 65.73711542469461\nrawBenchmark \"Subtract64\" = 63.92384623761226\nrawBenchmark \"Subtract8\" = 61.06034896812143\nrawBenchmark \"Swu\" = 17844.670780310975\nrawBenchmark \"TapEnvHash\" = 90.34785898924261\nrawBenchmark \"TapdataInit\" = 654.8088901361084\nrawBenchmark \"TapleafHash\" = 75.83151089538666\nrawBenchmark \"TapleafVersion\" = 58.57378301922501\nrawBenchmark \"Tappath\" = 46.60476841280421\nrawBenchmark \"TappathHash\" = 79.52144445412839\nrawBenchmark \"TotalFee\" = 128.3214285714286\nrawBenchmark \"TransactionId\" = 77.57004212352764\nrawBenchmark \"TxHash\" = 79.6895834815193\nrawBenchmark \"TxIsFinal\" = 39.91991497511649\nrawBenchmark \"TxLockDistance\" = 50.70260372831025\nrawBenchmark \"TxLockDuration\" = 46.90895581164496\nrawBenchmark \"TxLockHeight\" = 44.5346343811494\nrawBenchmark \"TxLockTime\" = 44.50131256493571\nrawBenchmark \"Verify\" = 32.09444427680617\nrawBenchmark \"Version\" = 51.946730072789\nrawBenchmark \"Xor1\" = 37.39423846227012\nrawBenchmark \"Xor16\" = 46.3143332902559\nrawBenchmark \"Xor32\" = 51.3678650882931\nrawBenchmark \"Xor64\" = 53.19079568520052\nrawBenchmark \"Xor8\" = 47.77399820413938\nrawBenchmark \"XorXor1\" = 40.36662737601213\nrawBenchmark \"XorXor16\" = 44.24820795601652\nrawBenchmark \"XorXor32\" = 53.43665625904725\nrawBenchmark \"XorXor64\" = 52.088775723655864\nrawBenchmark \"XorXor8\" = 54.87228218084948\n\n-- benchmark adjusts the raw benchmark by giving a discount to batch verifiable jets.\nbenchmark :: String -> Double\nbenchmark jetName = rawBenchmark jetName * adjustment\n where\n  batchable = [\"LinearVerify1\", \"PointVerify1\", \"CheckSigVerify\", \"Bip0340Verify\"]\n  adjustment | jetName `elem` batchable = 0.5\n             | otherwise = 1\n\n-- Normalized cost where cost \"CheckSigVerify\" = 50 Weight.\ncost :: String -> Weight\ncost jetName = realToFrac $ benchmark jetName * factor\n where\n  factor = 50 / benchmark \"CheckSigVerify\"\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/FFI/Env.hs",
    "content": "-- | This module binds the C implementation of jets for Simplicity for assertions.\n{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.Elements.FFI.Env\n ( CTransaction, CTapEnv, CTxEnv\n , marshallTransaction, marshallTapEnv\n , withEnv, withPrimEnv\n ) where\n\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.Foldable (toList)\nimport Data.Serialize (Serialize, encode, runPut)\nimport Data.Vector (Vector)\nimport Data.Word (Word32)\nimport Foreign.C.Types (CSize(..), CChar(..), CUChar(..), CUInt(..))\nimport Foreign.ForeignPtr (ForeignPtr, newForeignPtr, withForeignPtr)\nimport Foreign.Marshal.Alloc (allocaBytes)\nimport Foreign.Marshal.Array (withArray, withArrayLen)\nimport Foreign.Marshal.Unsafe (unsafeLocalState)\nimport Foreign.Ptr (FunPtr, Ptr, nullPtr, plusPtr)\nimport Foreign.Storable (Storable(..))\nimport Lens.Family2 ((^.), under)\n\nimport Simplicity.Digest\nimport Simplicity.Elements.DataTypes\nimport Simplicity.Elements.Primitive\n\n-- Abstract representative for the C txEnv types.\nnewtype RawBuffer = RawBuffer RawBuffer\nnewtype RawOutput = RawOutput RawOutput\nnewtype RawInput = RawInput RawInput\nnewtype RawTransaction = RawTransaction RawTransaction\nnewtype RawTapEnv = RawTapEnv RawTapEnv\nnewtype CTransaction = CTransaction CTransaction\nnewtype CTapEnv = CTapEnv CTapEnv\nnewtype CTxEnv = CTxEnv CTxEnv\n\nforeign import ccall unsafe \"&\" c_sizeof_rawElementsBuffer :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawElementsOutput :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawElementsInput :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawElementsTransaction :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_rawElementsTapEnv :: Ptr CSize\nforeign import ccall unsafe \"&\" c_sizeof_txEnv :: Ptr CSize\n\nforeign import ccall unsafe \"\" c_set_rawElementsBuffer :: Ptr RawBuffer -> Ptr CChar -> CUInt -> IO ()\nforeign import ccall unsafe \"\" c_set_rawElementsOutput :: Ptr RawOutput -> Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr RawBuffer -> Ptr RawBuffer -> Ptr RawBuffer -> IO ()\nforeign import ccall unsafe \"\" c_set_rawElementsInput :: Ptr RawInput -> Ptr RawBuffer -> Ptr CChar -> Ptr RawBuffer\n                                                              -> Ptr CChar -> CUInt\n                                                              -> Ptr CChar -> Ptr CChar -> Ptr RawBuffer\n                                                              -> CUInt\n                                                              -> Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CChar\n                                                              -> Ptr RawBuffer -> Ptr RawBuffer -> IO ()\nforeign import ccall unsafe \"\" c_set_rawElementsTransaction :: Ptr RawTransaction -> Ptr CChar -> CUInt\n                                                                          -> Ptr RawInput -> CUInt\n                                                                          -> Ptr RawOutput -> CUInt\n                                                                          -> CUInt -> IO ()\nforeign import ccall unsafe \"\" c_set_rawElementsTapEnv :: Ptr RawTapEnv -> Ptr CChar -> CUChar -> Ptr CChar -> IO ()\nforeign import ccall unsafe \"\" c_set_txEnv :: Ptr CTxEnv -> Ptr CTransaction -> Ptr CTapEnv -> Ptr CChar -> CUInt -> IO ()\n\nforeign import ccall unsafe \"\" simplicity_elements_mallocTransaction :: Ptr RawTransaction -> IO (Ptr CTransaction)\nforeign import ccall unsafe \"&\" simplicity_elements_freeTransaction :: FunPtr (Ptr CTransaction -> IO ())\nforeign import ccall unsafe \"\" simplicity_elements_mallocTapEnv :: Ptr RawTapEnv -> IO (Ptr CTapEnv)\nforeign import ccall unsafe \"&\" simplicity_elements_freeTapEnv :: FunPtr (Ptr CTapEnv -> IO ())\n\nsizeof_rawBuffer :: Int\nsizeof_rawBuffer = fromIntegral . unsafeLocalState $ peek c_sizeof_rawElementsBuffer\n\nsizeof_rawOutput :: Int\nsizeof_rawOutput = fromIntegral . unsafeLocalState $ peek c_sizeof_rawElementsOutput\n\nsizeof_rawInput :: Int\nsizeof_rawInput = fromIntegral . unsafeLocalState $ peek c_sizeof_rawElementsInput\n\nsizeof_rawTransaction :: Int\nsizeof_rawTransaction = fromIntegral . unsafeLocalState $ peek c_sizeof_rawElementsTransaction\n\nsizeof_rawTapEnv :: Int\nsizeof_rawTapEnv = fromIntegral . unsafeLocalState $ peek c_sizeof_rawElementsTapEnv\n\nsizeof_txEnv :: Int\nsizeof_txEnv = fromIntegral . unsafeLocalState $ peek c_sizeof_txEnv\n\nwithRawBuffer :: BSL.ByteString -> (Ptr RawBuffer -> IO b) -> IO b\nwithRawBuffer str k =\n  allocaBytes sizeof_rawBuffer $ \\pRawBuffer ->\n  BS.useAsCStringLen (BSL.toStrict str) $ \\(pCharStr, len) -> do\n    c_set_rawElementsBuffer pRawBuffer pCharStr (fromIntegral len)\n    k pRawBuffer\n\nwithIssuance :: Maybe Issuance -> (Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr RawBuffer -> Ptr RawBuffer -> IO b) -> IO b\nwithIssuance Nothing k =\n  withArray (replicate 32 0) $ \\pZero ->\n  withRawBuffer mempty $ \\pEmpty ->\n  k pZero pZero nullPtr nullPtr pEmpty pEmpty\nwithIssuance (Just (Left newIssue)) k =\n  withArray (replicate 32 0) $ \\pZero ->\n  BS.useAsCString (encode (newIssuanceContractHash newIssue)) $ \\pContract ->\n  maybeAmount issueAmount $ \\pAmount ->\n  maybeAmount tokenAmount $ \\pToken ->\n  withRawBuffer (issueAmount ^. (under amount.prf_)) $ \\pAmountRangeProof ->\n  withRawBuffer (tokenAmount ^. (under amount.prf_)) $ \\pTokenRangeProof ->\n  k pZero pContract pAmount pToken pAmountRangeProof pTokenRangeProof\n where\n  issueAmount = newIssuanceAmount newIssue\n  tokenAmount = newIssuanceTokenAmount newIssue\n  maybeAmount (Amount (Explicit 0)) k = k nullPtr\n  maybeAmount amt k = BS.useAsCString (runPut . putAmount $ clearAmountPrf amt) k\n\nwithIssuance (Just (Right reIssue)) k =\n  BS.useAsCString (encode (reissuanceBlindingNonce reIssue)) $ \\pBlinding ->\n  BS.useAsCString (encode (reissuanceEntropy reIssue)) $ \\pEntropy ->\n  BS.useAsCString (runPut . putAmount $ clearAmountPrf issueAmount) $ \\pAmount ->\n  withRawBuffer (issueAmount ^. (under amount.prf_)) $ \\pAmountRangeProof ->\n  withRawBuffer mempty $ \\pEmpty ->\n  k pBlinding pEntropy pAmount nullPtr pAmountRangeProof pEmpty\n where\n  issueAmount = reissuanceAmount reIssue\n\nwithRawOutputs :: Vector TxOutput -> (Ptr RawOutput -> IO b) -> IO b\nwithRawOutputs txos k =\n  allocaBytes (len * sizeof_rawOutput) $ \\pRawOutput ->\n   foldr ($) (k pRawOutput) [pokeRawOutput txo (pRawOutput `plusPtr` (i*sizeof_rawOutput)) | (i, txo) <- zip [0..] (toList txos)]\n where\n  len = fromIntegral $ length txos\n  pokeRawOutput :: TxOutput -> Ptr RawOutput -> IO b -> IO b\n  pokeRawOutput txo pRawOutput k =\n    BS.useAsCString (runPut . putAsset . clearAssetPrf $ txoAsset txo) $ \\pAsset ->\n    BS.useAsCString (runPut . putAmount . clearAmountPrf $ txoAmount txo) $ \\pAmount ->\n    withMaybe (txoNonce txo) $ \\pNonce ->\n    withRawBuffer (txoScript txo) $ \\pScript ->\n    withRawBuffer (txoAsset txo ^. (under asset.prf_)) $ \\pSurjectionProof ->\n    withRawBuffer (txoAmount txo ^. (under amount.prf_)) $ \\pRangeProof -> do\n      c_set_rawElementsOutput pRawOutput pAsset pAmount pNonce pScript pSurjectionProof pRangeProof\n      k\n  withMaybe Nothing = ($ nullPtr)\n  withMaybe (Just x) = BS.useAsCString (encode x)\n\nwithRawInputs :: Vector SigTxInput -> (Ptr RawInput -> IO b) -> IO b\nwithRawInputs txis k =\n  allocaBytes (len * sizeof_rawInput) $ \\pRawInput -> do\n   foldr ($) (k pRawInput) [pokeRawInput txo (pRawInput `plusPtr` (i*sizeof_rawInput)) | (i, txo) <- zip [0..] (toList txis)]\n where\n  len = fromIntegral $ length txis\n  withMaybe Nothing = ($ nullPtr)\n  withMaybe (Just x) = BS.useAsCString (encode x)\n  withMaybeRawBuffer Nothing = ($ nullPtr)\n  withMaybeRawBuffer (Just buf) = withRawBuffer buf\n  pokeRawInput :: SigTxInput -> Ptr RawInput -> IO b -> IO b\n  pokeRawInput txi pRawInput k =\n    withMaybeRawBuffer (sigTxiAnnex txi) $ \\pAnnex ->\n    withMaybe (sigTxiPegin txi) $ \\pPegin ->\n    withRawBuffer (sigTxiScriptSig txi) $ \\pScriptSig ->\n    BS.useAsCString (encode . opHash $ sigTxiPreviousOutpoint txi) $ \\pPrevTxid ->\n    BS.useAsCString (runPut . putAsset . utxoAsset $ sigTxiTxo txi) $ \\pAsset ->\n    BS.useAsCString (runPut . putAmount . utxoAmount $ sigTxiTxo txi) $ \\pValue ->\n    withRawBuffer (utxoScript $ sigTxiTxo txi) $ \\pScript ->\n    withIssuance (sigTxiIssuance txi) $ \\pBlindingNonce pAssetEntropy pAmount pInflationKeys pAmountRangeProof pInflationKeysRangeProof -> do\n      c_set_rawElementsInput pRawInput pAnnex pPegin pScriptSig\n                               pPrevTxid (fromIntegral . opIndex . sigTxiPreviousOutpoint $ txi)\n                               pAsset pValue pScript\n                               (fromIntegral . sigTxiSequence $ txi)\n                               pBlindingNonce pAssetEntropy pAmount pInflationKeys\n                               pAmountRangeProof pInflationKeysRangeProof\n      k\n\nwithRawTransaction :: SigTx -> (Ptr RawTransaction -> IO b) -> IO b\nwithRawTransaction tx k =\n  allocaBytes sizeof_rawTransaction $ \\pRawTransaction ->\n  withRawInputs (sigTxIn tx) $ \\pInput ->\n  withRawOutputs (sigTxOut tx) $ \\pOutput -> do\n  BS.useAsCString (encode $ txid tx) $ \\pTxid -> do\n   c_set_rawElementsTransaction pRawTransaction pTxid version pInput numInputs pOutput numOutputs lockTime\n   k pRawTransaction\n where\n  version = fromIntegral (sigTxVersion tx)\n  numInputs = fromIntegral $ length (sigTxIn tx)\n  numOutputs = fromIntegral $ length (sigTxOut tx)\n  lockTime = fromIntegral (sigTxLock tx)\n\nwithRawTapEnv :: TapEnv -> (Ptr RawTapEnv -> IO b) -> IO b\nwithRawTapEnv tapEnv k | length (tappath tapEnv) <= 128 =\n  allocaBytes sizeof_rawTapEnv $ \\pRawTapEnv ->\n  BS.useAsCString encodePath $ \\pControlBlock -> do\n  BS.useAsCString (encode $ tapScriptCMR tapEnv) $ \\pCmr -> do\n   c_set_rawElementsTapEnv pRawTapEnv pControlBlock (fromIntegral . length $ tappath tapEnv) pCmr\n   k pRawTapEnv\n where\n  encodePath = BS.cons (tapleafVersion tapEnv) (BS.concat (encode (tapInternalKey tapEnv) : map encode (tappath tapEnv)))\n\nmarshallTransaction :: SigTx -> IO (ForeignPtr CTransaction)\nmarshallTransaction tx = withRawTransaction tx\n                       $ \\pRawTransaction -> simplicity_elements_mallocTransaction pRawTransaction >>= newForeignPtr simplicity_elements_freeTransaction\n\nmarshallTapEnv :: TapEnv -> IO (ForeignPtr CTapEnv)\nmarshallTapEnv env = withRawTapEnv env\n                   $ \\pRawTapEnv -> simplicity_elements_mallocTapEnv pRawTapEnv >>= newForeignPtr simplicity_elements_freeTapEnv\n\nwithEnv :: ForeignPtr CTransaction -> Word32 -> ForeignPtr CTapEnv -> Hash256 -> (Ptr CTxEnv -> IO b) -> IO b\nwithEnv cTransaction ix cTapEnv genesisHash k =\n  allocaBytes sizeof_txEnv $ \\pTxEnv ->\n  withForeignPtr cTransaction $ \\pTransaction ->\n  withForeignPtr cTapEnv $ \\pTapEnv ->\n  BS.useAsCString (encode genesisHash) $ \\pGenesis -> do\n   c_set_txEnv pTxEnv pTransaction pTapEnv pGenesis (fromIntegral ix)\n   k pTxEnv\n\nwithPrimEnv :: PrimEnv -> (Ptr CTxEnv -> IO b) -> IO b\nwithPrimEnv env k = do\n  cTransaction <- marshallTransaction (envTx env)\n  cTapEnv <- marshallTapEnv (envTap env)\n  withEnv cTransaction (envIx env) cTapEnv (envGenesisBlock env) k\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/FFI/Jets.hs",
    "content": "-- | This module binds the C implementation of jets for Simplicity for assertions.\n{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.Elements.FFI.Jets\n ( version\n , lock_time\n , input_pegin\n , input_prev_outpoint\n , input_asset\n , input_amount\n , input_script_hash\n , input_sequence\n , input_annex_hash\n , input_script_sig_hash\n , reissuance_blinding\n , new_issuance_contract\n , reissuance_entropy\n , issuance_asset_amount\n , issuance_token_amount\n , issuance_asset_proof\n , issuance_token_proof\n , output_asset\n , output_amount\n , output_nonce\n , output_script_hash\n , output_null_datum\n , output_is_fee\n , output_surjection_proof\n , output_range_proof\n , total_fee\n , genesis_block_hash\n , script_cmr\n , transaction_id\n , current_index\n , current_pegin\n , current_prev_outpoint\n , current_asset\n , current_amount\n , current_script_hash\n , current_sequence\n , current_reissuance_blinding\n , current_new_issuance_contract\n , current_reissuance_entropy\n , current_issuance_asset_amount\n , current_issuance_token_amount\n , current_issuance_asset_proof\n , current_issuance_token_proof\n , current_annex_hash\n , current_script_sig_hash\n , tapleaf_version\n , tappath\n , internal_key\n , num_inputs\n , num_outputs\n , tx_is_final\n , tx_lock_height\n , tx_lock_time\n , broken_do_not_use_tx_lock_distance\n , broken_do_not_use_tx_lock_duration\n , check_lock_height\n , check_lock_time\n , broken_do_not_use_check_lock_distance\n , broken_do_not_use_check_lock_duration\n , calculate_issuance_entropy\n , calculate_asset\n , calculate_explicit_token\n , calculate_confidential_token\n , lbtc_asset\n , outpoint_hash\n , asset_amount_hash\n , nonce_hash\n , annex_hash\n , build_tapleaf_simplicity\n , build_tapbranch\n , build_taptweak\n , issuance\n , issuance_entropy\n , issuance_asset\n , issuance_token\n , output_amounts_hash\n , output_nonces_hash\n , output_scripts_hash\n , output_range_proofs_hash\n , output_surjection_proofs_hash\n , outputs_hash\n , output_hash\n , input_outpoints_hash\n , input_amounts_hash\n , input_scripts_hash\n , input_utxos_hash\n , input_utxo_hash\n , input_sequences_hash\n , input_annexes_hash\n , input_script_sigs_hash\n , inputs_hash\n , input_hash\n , issuance_asset_amounts_hash\n , issuance_token_amounts_hash\n , issuance_range_proofs_hash\n , issuance_blinding_entropy_hash\n , issuances_hash\n , issuance_hash\n , tx_hash\n , tapleaf_hash\n , tappath_hash\n , tap_env_hash\n , sig_all_hash\n ) where\n\nimport Foreign.Ptr (Ptr)\nimport Foreign.C.Types (CBool(..))\n\nimport Simplicity.Elements.FFI.Env\nimport Simplicity.Elements.Primitive\nimport Simplicity.FFI.Frame\nimport Simplicity.Programs.Elements\nimport Simplicity.Programs.LibSecp256k1\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\n-- | This cannot be used with jets that access global variables.\nunsafeLocalJet :: (TyC a, TyC b) => (Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool) -> PrimEnv -> a -> Maybe b\nunsafeLocalJet jet env = unsafeLocalCoreJet (\\dst src -> withPrimEnv env (jet dst src))\n\nforeign import ccall unsafe \"\" c_version :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_lock_time :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_pegin :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_prev_outpoint :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_asset :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_amount :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_script_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_sequence :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_annex_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_script_sig_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_reissuance_blinding :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_new_issuance_contract :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_reissuance_entropy :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_asset_amount :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_token_amount :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_asset_proof :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_token_proof :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_asset :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_amount :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_nonce :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_script_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_null_datum :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_is_fee :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_surjection_proof :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_range_proof :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_total_fee :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_genesis_block_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_script_cmr :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_transaction_id :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_index :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_pegin :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_prev_outpoint :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_asset :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_amount :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_script_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_sequence :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_reissuance_blinding :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_new_issuance_contract :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_reissuance_entropy :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_issuance_asset_amount :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_issuance_token_amount :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_issuance_asset_proof :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_issuance_token_proof :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_annex_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_current_script_sig_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tapleaf_version :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tappath :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_internal_key :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_num_inputs :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_num_outputs :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tx_is_final :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tx_lock_height :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tx_lock_time :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_broken_do_not_use_tx_lock_distance :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_broken_do_not_use_tx_lock_duration :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_check_lock_height :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_check_lock_time :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_broken_do_not_use_check_lock_distance :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_broken_do_not_use_check_lock_duration :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_calculate_issuance_entropy :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_calculate_asset :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_calculate_explicit_token :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_calculate_confidential_token :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_lbtc_asset :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_outpoint_hash :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_asset_amount_hash :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_nonce_hash :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_annex_hash :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_build_tapleaf_simplicity :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_build_tapbranch :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_build_taptweak :: Ptr FrameItem -> Ptr FrameItem -> IO CBool\nforeign import ccall unsafe \"\" c_issuance :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_entropy :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_asset :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_token :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_amounts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_nonces_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_scripts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_range_proofs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_surjection_proofs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_outputs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_output_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_outpoints_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_amounts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_scripts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_utxos_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_utxo_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_sequences_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_annexes_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_script_sigs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_inputs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_input_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_asset_amounts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_token_amounts_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_range_proofs_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_blinding_entropy_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuances_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_issuance_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tx_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tapleaf_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tappath_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_tap_env_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\nforeign import ccall unsafe \"\" c_sig_all_hash :: Ptr FrameItem -> Ptr FrameItem -> Ptr CTxEnv -> IO CBool\n\nversion :: PrimEnv -> () -> Maybe Word32\nversion = unsafeLocalJet c_version\n\nlock_time :: PrimEnv -> () -> Maybe Word32\nlock_time = unsafeLocalJet c_lock_time\n\nnum_inputs :: PrimEnv -> () -> Maybe Word32\nnum_inputs = unsafeLocalJet c_num_inputs\n\ninput_pegin :: PrimEnv -> Word32 -> Maybe (S (S Word256))\ninput_pegin = unsafeLocalJet c_input_pegin\n\ninput_prev_outpoint :: PrimEnv -> Word32 -> Maybe (S (Word256, Word32))\ninput_prev_outpoint = unsafeLocalJet c_input_prev_outpoint\n\ninput_asset :: PrimEnv -> Word32 -> Maybe (S (Conf Word256))\ninput_asset = unsafeLocalJet c_input_asset\n\ninput_amount :: PrimEnv -> Word32 -> Maybe (S (Conf Word256, Conf Word64))\ninput_amount = unsafeLocalJet c_input_amount\n\ninput_script_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_script_hash = unsafeLocalJet c_input_script_hash\n\ninput_sequence :: PrimEnv -> Word32 -> Maybe (S Word32)\ninput_sequence = unsafeLocalJet c_input_sequence\n\nreissuance_blinding :: PrimEnv -> Word32 -> Maybe (S (S Word256))\nreissuance_blinding = unsafeLocalJet c_reissuance_blinding\n\nnew_issuance_contract :: PrimEnv -> Word32 -> Maybe (S (S Word256))\nnew_issuance_contract = unsafeLocalJet c_new_issuance_contract\n\nreissuance_entropy :: PrimEnv -> Word32 -> Maybe (S (S Word256))\nreissuance_entropy = unsafeLocalJet c_reissuance_entropy\n\nissuance_asset_amount :: PrimEnv -> Word32 -> Maybe (S (S (Conf Word64)))\nissuance_asset_amount = unsafeLocalJet c_issuance_asset_amount\n\nissuance_token_amount :: PrimEnv -> Word32 -> Maybe (S (S (Conf Word64)))\nissuance_token_amount = unsafeLocalJet c_issuance_token_amount\n\nissuance_asset_proof :: PrimEnv -> Word32 -> Maybe (S Word256)\nissuance_asset_proof = unsafeLocalJet c_issuance_asset_proof\n\nissuance_token_proof :: PrimEnv -> Word32 -> Maybe (S Word256)\nissuance_token_proof = unsafeLocalJet c_issuance_token_proof\n\ninput_annex_hash :: PrimEnv -> Word32 -> Maybe (S (S Word256))\ninput_annex_hash = unsafeLocalJet c_input_annex_hash\n\ninput_script_sig_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_script_sig_hash = unsafeLocalJet c_input_script_sig_hash\n\ncurrent_index :: PrimEnv -> () -> Maybe Word32\ncurrent_index = unsafeLocalJet c_current_index\n\ncurrent_pegin :: PrimEnv -> () -> Maybe (S Word256)\ncurrent_pegin = unsafeLocalJet c_current_pegin\n\ncurrent_prev_outpoint :: PrimEnv -> () -> Maybe (Word256, Word32)\ncurrent_prev_outpoint = unsafeLocalJet c_current_prev_outpoint\n\ncurrent_asset :: PrimEnv -> () -> Maybe (Conf Word256)\ncurrent_asset = unsafeLocalJet c_current_asset\n\ncurrent_amount :: PrimEnv -> () -> Maybe (Conf Word256, Conf Word64)\ncurrent_amount = unsafeLocalJet c_current_amount\n\ncurrent_script_hash :: PrimEnv -> () -> Maybe Word256\ncurrent_script_hash = unsafeLocalJet c_current_script_hash\n\ncurrent_sequence :: PrimEnv -> () -> Maybe Word32\ncurrent_sequence = unsafeLocalJet c_current_sequence\n\ncurrent_reissuance_blinding :: PrimEnv -> () -> Maybe (S Word256)\ncurrent_reissuance_blinding = unsafeLocalJet c_current_reissuance_blinding\n\ncurrent_new_issuance_contract :: PrimEnv -> () -> Maybe (S Word256)\ncurrent_new_issuance_contract = unsafeLocalJet c_current_new_issuance_contract\n\ncurrent_reissuance_entropy :: PrimEnv -> () -> Maybe (S Word256)\ncurrent_reissuance_entropy = unsafeLocalJet c_current_reissuance_entropy\n\ncurrent_issuance_asset_amount :: PrimEnv -> () -> Maybe (S (Conf Word64))\ncurrent_issuance_asset_amount = unsafeLocalJet c_current_issuance_asset_amount\n\ncurrent_issuance_token_amount :: PrimEnv -> () -> Maybe (S (Conf Word64))\ncurrent_issuance_token_amount = unsafeLocalJet c_current_issuance_token_amount\n\ncurrent_issuance_asset_proof :: PrimEnv -> () -> Maybe Word256\ncurrent_issuance_asset_proof = unsafeLocalJet c_current_issuance_asset_proof\n\ncurrent_issuance_token_proof :: PrimEnv -> () -> Maybe Word256\ncurrent_issuance_token_proof = unsafeLocalJet c_current_issuance_token_proof\n\ncurrent_annex_hash :: PrimEnv -> () -> Maybe (S Word256)\ncurrent_annex_hash = unsafeLocalJet c_current_annex_hash\n\ncurrent_script_sig_hash :: PrimEnv -> () -> Maybe Word256\ncurrent_script_sig_hash = unsafeLocalJet c_current_script_sig_hash\n\ntapleaf_version :: PrimEnv -> () -> Maybe Word8\ntapleaf_version = unsafeLocalJet c_tapleaf_version\n\ntappath :: PrimEnv -> Word8 -> Maybe (S Word256)\ntappath = unsafeLocalJet c_tappath\n\ninternal_key :: PrimEnv -> () -> Maybe PubKey\ninternal_key = unsafeLocalJet c_internal_key\n\nnum_outputs :: PrimEnv -> () -> Maybe Word32\nnum_outputs = unsafeLocalJet c_num_outputs\n\noutput_asset :: PrimEnv -> Word32 -> Maybe (S (Conf Word256))\noutput_asset = unsafeLocalJet c_output_asset\n\noutput_amount :: PrimEnv -> Word32 -> Maybe (S (Conf Word256, Conf Word64))\noutput_amount = unsafeLocalJet c_output_amount\n\noutput_nonce :: PrimEnv -> Word32 -> Maybe (S (S (Conf Word256)))\noutput_nonce = unsafeLocalJet c_output_nonce\n\noutput_script_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\noutput_script_hash = unsafeLocalJet c_output_script_hash\n\noutput_null_datum :: PrimEnv -> (Word32,Word32) -> Maybe (S (S (Either (Word2, Word256) (Either Bit Word4))))\noutput_null_datum = unsafeLocalJet c_output_null_datum\n\noutput_is_fee :: PrimEnv -> Word32 -> Maybe (S Bit)\noutput_is_fee = unsafeLocalJet c_output_is_fee\n\noutput_surjection_proof :: PrimEnv -> Word32 -> Maybe (S Word256)\noutput_surjection_proof = unsafeLocalJet c_output_surjection_proof\n\noutput_range_proof :: PrimEnv -> Word32 -> Maybe (S Word256)\noutput_range_proof = unsafeLocalJet c_output_range_proof\n\ntotal_fee :: PrimEnv -> Word256 -> Maybe Word64\ntotal_fee = unsafeLocalJet c_total_fee\n\ngenesis_block_hash :: PrimEnv -> () -> Maybe Word256\ngenesis_block_hash = unsafeLocalJet c_genesis_block_hash\n\nscript_cmr :: PrimEnv -> () -> Maybe Word256\nscript_cmr = unsafeLocalJet c_script_cmr\n\ntransaction_id :: PrimEnv -> () -> Maybe Word256\ntransaction_id = unsafeLocalJet c_transaction_id\n\ntx_is_final :: PrimEnv -> () -> Maybe Bit\ntx_is_final = unsafeLocalJet c_tx_is_final\n\ntx_lock_height :: PrimEnv -> () -> Maybe Word32\ntx_lock_height = unsafeLocalJet c_tx_lock_height\n\ntx_lock_time :: PrimEnv -> () -> Maybe Word32\ntx_lock_time = unsafeLocalJet c_tx_lock_time\n\nbroken_do_not_use_tx_lock_distance :: PrimEnv -> () -> Maybe Word16\nbroken_do_not_use_tx_lock_distance  = unsafeLocalJet c_broken_do_not_use_tx_lock_distance\n\nbroken_do_not_use_tx_lock_duration :: PrimEnv -> () -> Maybe Word16\nbroken_do_not_use_tx_lock_duration  = unsafeLocalJet c_broken_do_not_use_tx_lock_duration\n\ncheck_lock_height :: PrimEnv -> Word32 -> Maybe ()\ncheck_lock_height = unsafeLocalJet c_check_lock_height\n\ncheck_lock_time :: PrimEnv -> Word32 -> Maybe ()\ncheck_lock_time = unsafeLocalJet c_check_lock_time\n\nbroken_do_not_use_check_lock_distance :: PrimEnv -> Word16 -> Maybe ()\nbroken_do_not_use_check_lock_distance  = unsafeLocalJet c_broken_do_not_use_check_lock_distance\n\nbroken_do_not_use_check_lock_duration :: PrimEnv -> Word16 -> Maybe ()\nbroken_do_not_use_check_lock_duration  = unsafeLocalJet c_broken_do_not_use_check_lock_duration\n\ncalculate_issuance_entropy :: ((Word256, Word32), Word256) -> Maybe Word256\ncalculate_issuance_entropy = unsafeLocalCoreJet c_calculate_issuance_entropy\n\ncalculate_asset :: Word256 -> Maybe Word256\ncalculate_asset = unsafeLocalCoreJet c_calculate_asset\n\ncalculate_explicit_token :: Word256 -> Maybe Word256\ncalculate_explicit_token = unsafeLocalCoreJet c_calculate_explicit_token\n\ncalculate_confidential_token :: Word256 -> Maybe Word256\ncalculate_confidential_token = unsafeLocalCoreJet c_calculate_confidential_token\n\nlbtc_asset :: () -> Maybe Word256\nlbtc_asset = unsafeLocalCoreJet c_lbtc_asset\n\noutpoint_hash :: (Ctx8, (S Word256, (Word256, Word32))) -> Maybe Ctx8\noutpoint_hash = unsafeLocalCoreJet c_outpoint_hash\n\nasset_amount_hash :: (Ctx8, (Conf Word256, Conf Word64)) -> Maybe Ctx8\nasset_amount_hash = unsafeLocalCoreJet c_asset_amount_hash\n\nnonce_hash :: (Ctx8, S (Conf Word256)) -> Maybe Ctx8\nnonce_hash = unsafeLocalCoreJet c_nonce_hash\n\nannex_hash :: (Ctx8, S Word256) -> Maybe Ctx8\nannex_hash = unsafeLocalCoreJet c_annex_hash\n\nbuild_tapleaf_simplicity :: Word256 -> Maybe Word256\nbuild_tapleaf_simplicity = unsafeLocalCoreJet c_build_tapleaf_simplicity\n\nbuild_tapbranch :: (Word256, Word256) -> Maybe Word256\nbuild_tapbranch = unsafeLocalCoreJet c_build_tapbranch\n\nbuild_taptweak :: (Word256, Word256) -> Maybe Word256\nbuild_taptweak = unsafeLocalCoreJet c_build_taptweak\n\nissuance :: PrimEnv -> Word32 -> Maybe (S (S Bit))\nissuance = unsafeLocalJet c_issuance\n\nissuance_entropy :: PrimEnv -> Word32 -> Maybe (S (S Word256))\nissuance_entropy = unsafeLocalJet c_issuance_entropy\n\nissuance_asset :: PrimEnv -> Word32 -> Maybe (S (S Word256))\nissuance_asset = unsafeLocalJet c_issuance_asset\n\nissuance_token :: PrimEnv -> Word32 -> Maybe (S (S Word256))\nissuance_token = unsafeLocalJet c_issuance_token\n\noutput_amounts_hash :: PrimEnv -> () -> Maybe Word256\noutput_amounts_hash = unsafeLocalJet c_output_amounts_hash\n\noutput_nonces_hash :: PrimEnv -> () -> Maybe Word256\noutput_nonces_hash = unsafeLocalJet c_output_nonces_hash\n\noutput_scripts_hash :: PrimEnv -> () -> Maybe Word256\noutput_scripts_hash = unsafeLocalJet c_output_scripts_hash\n\noutput_range_proofs_hash :: PrimEnv -> () -> Maybe Word256\noutput_range_proofs_hash = unsafeLocalJet c_output_range_proofs_hash\n\noutput_surjection_proofs_hash :: PrimEnv -> () -> Maybe Word256\noutput_surjection_proofs_hash = unsafeLocalJet c_output_surjection_proofs_hash\n\noutputs_hash :: PrimEnv -> () -> Maybe Word256\noutputs_hash = unsafeLocalJet c_outputs_hash\n\noutput_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\noutput_hash = unsafeLocalJet c_output_hash\n\ninput_outpoints_hash :: PrimEnv -> () -> Maybe Word256\ninput_outpoints_hash = unsafeLocalJet c_input_outpoints_hash\n\ninput_amounts_hash :: PrimEnv -> () -> Maybe Word256\ninput_amounts_hash = unsafeLocalJet c_input_amounts_hash\n\ninput_scripts_hash :: PrimEnv -> () -> Maybe Word256\ninput_scripts_hash = unsafeLocalJet c_input_scripts_hash\n\ninput_utxos_hash :: PrimEnv -> () -> Maybe Word256\ninput_utxos_hash = unsafeLocalJet c_input_utxos_hash\n\ninput_utxo_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_utxo_hash = unsafeLocalJet c_input_utxo_hash\n\ninput_sequences_hash :: PrimEnv -> () -> Maybe Word256\ninput_sequences_hash = unsafeLocalJet c_input_sequences_hash\n\ninput_annexes_hash :: PrimEnv -> () -> Maybe Word256\ninput_annexes_hash = unsafeLocalJet c_input_annexes_hash\n\ninput_script_sigs_hash :: PrimEnv -> () -> Maybe Word256\ninput_script_sigs_hash = unsafeLocalJet c_input_script_sigs_hash\n\ninputs_hash :: PrimEnv -> () -> Maybe Word256\ninputs_hash = unsafeLocalJet c_inputs_hash\n\ninput_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\ninput_hash = unsafeLocalJet c_input_hash\n\nissuance_asset_amounts_hash :: PrimEnv -> () -> Maybe Word256\nissuance_asset_amounts_hash = unsafeLocalJet c_issuance_asset_amounts_hash\n\nissuance_token_amounts_hash :: PrimEnv -> () -> Maybe Word256\nissuance_token_amounts_hash = unsafeLocalJet c_issuance_token_amounts_hash\n\nissuance_range_proofs_hash :: PrimEnv -> () -> Maybe Word256\nissuance_range_proofs_hash = unsafeLocalJet c_issuance_range_proofs_hash\n\nissuance_blinding_entropy_hash :: PrimEnv -> () -> Maybe Word256\nissuance_blinding_entropy_hash = unsafeLocalJet c_issuance_blinding_entropy_hash\n\nissuances_hash :: PrimEnv -> () -> Maybe Word256\nissuances_hash = unsafeLocalJet c_issuances_hash\n\nissuance_hash :: PrimEnv -> Word32 -> Maybe (S Word256)\nissuance_hash = unsafeLocalJet c_issuance_hash\n\ntx_hash :: PrimEnv -> () -> Maybe Word256\ntx_hash = unsafeLocalJet c_tx_hash\n\ntapleaf_hash :: PrimEnv -> () -> Maybe Word256\ntapleaf_hash = unsafeLocalJet c_tapleaf_hash\n\ntappath_hash :: PrimEnv -> () -> Maybe Word256\ntappath_hash = unsafeLocalJet c_tappath_hash\n\ntap_env_hash :: PrimEnv -> () -> Maybe Word256\ntap_env_hash = unsafeLocalJet c_tap_env_hash\n\nsig_all_hash :: PrimEnv -> () -> Maybe Word256\nsig_all_hash = unsafeLocalJet c_sig_all_hash\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Jets.hs",
    "content": "-- | This module provides a canonical set of known jets for Simplicity for Elements. (At the moment this just consists of 'CoreJet's.)\n{-# LANGUAGE GADTs, StandaloneDeriving, TypeFamilies #-}\nmodule Simplicity.Elements.Jets\n  ( JetType(..), ElementsJet(..), SigHashJet(..), TimeLockJet(..), IssuanceJet(..), TransactionJet(..)\n  , elementsCatalogue\n  , asJet\n  , jetSubst, pruneSubst\n  , getTermLengthCode, putTermLengthCode\n  , fastEval\n  , jetMap\n  -- * Re-exports\n  , WrappedSimplicity, unwrap\n  , Simplicity.Elements.JetType.specification, Simplicity.Elements.JetType.implementation\n  , Simplicity.Elements.JetType.getJetBit, Simplicity.Elements.JetType.putJetBit\n  , Simplicity.Elements.JetType.jetCost\n  , Semantics.FastEval\n  ) where\n\nimport Prelude hiding (fail, drop, take)\n\nimport Control.Applicative ((<|>))\nimport Control.Arrow ((***), (+++))\nimport Control.Monad (guard)\nimport Data.Either (isRight)\nimport Data.Foldable (toList)\nimport qualified Data.Map as Map\nimport Data.Maybe (isJust)\nimport Data.Proxy (Proxy(Proxy))\nimport Data.Serialize (runPut, put, putWord8)\nimport Data.String (fromString)\nimport Data.Type.Equality ((:~:)(Refl))\nimport Data.Vector ((!?))\nimport Data.Void (Void, vacuous)\nimport Lens.Family2 ((^..), over, review)\n\nimport Simplicity.Digest\nimport Simplicity.CoreJets\nimport qualified Simplicity.CoreJets as CoreJets\nimport Simplicity.Elements.Benchmarks\nimport Simplicity.Elements.Dag hiding (jetSubst, pruneSubst)\nimport qualified Simplicity.Elements.Dag as Dag\nimport Simplicity.Elements.Term\nimport Simplicity.Elements.DataTypes\nimport qualified Simplicity.Elements.JetType\nimport Simplicity.Elements.Primitive (PrimEnv, S, Conf, PubKey, primEnvHash, envTx, envTap)\nimport qualified Simplicity.Elements.Primitive as Prim\nimport qualified Simplicity.Elements.Serialization.BitString as BitString\nimport qualified Simplicity.Elements.Semantics as Semantics\nimport qualified Simplicity.Elements.Programs.SigHash.Lib as SigHash\nimport qualified Simplicity.Elements.Programs.Issuance.Lib as Issuance\nimport qualified Simplicity.Elements.Programs.TimeLock as TimeLock\nimport qualified Simplicity.Elements.Programs.Transaction.Lib as Prog\nimport Simplicity.LibSecp256k1.Spec (fe)\nimport qualified Simplicity.LibSecp256k1.Schnorr as Schnorr\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Sha256.Lib (Ctx8)\nimport qualified Simplicity.Programs.Elements.Lib as Prog\nimport Simplicity.Programs.Word\nimport Simplicity.Serialization\nimport Simplicity.Tensor\nimport Simplicity.Tree\nimport Simplicity.Ty\nimport Simplicity.Ty.Bit\nimport Simplicity.Ty.Sha256\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as W\nimport Simplicity.Weight\n\n-- | A type of tokens for the canonical set of known jets for Simplicity for Elements. (At the moment this just consists of 'CoreJet's.)\n--\n-- The tokens themselves are not exported.  You are expected to use 'Simplicity.Dag.jetDag' to substitute known jets found in Simplicity expressions.\ndata JetType a b where\n  ConstWordJet :: ConstWordContent b -> JetType () b\n  CoreJet :: CoreJet a b -> JetType a b\n  ElementsJet :: ElementsJet a b -> JetType a b\nderiving instance Eq (JetType a b)\nderiving instance Show (JetType a b)\n\ndata ElementsJet a b where\n  SigHashJet :: SigHashJet a b -> ElementsJet a b\n  TimeLockJet :: TimeLockJet a b -> ElementsJet a b\n  IssuanceJet :: IssuanceJet a b -> ElementsJet a b\n  TransactionJet :: TransactionJet a b -> ElementsJet a b\nderiving instance Eq (ElementsJet a b)\nderiving instance Show (ElementsJet a b)\n\ndata SigHashJet a b where\n  SigAllHash :: SigHashJet () Word256\n  TxHash :: SigHashJet () Word256\n  TapEnvHash :: SigHashJet () Word256\n  OutputsHash :: SigHashJet () Word256\n  InputsHash :: SigHashJet () Word256\n  IssuancesHash :: SigHashJet () Word256\n  InputUtxosHash :: SigHashJet () Word256\n  OutputHash :: SigHashJet Word32 (S Word256)\n  OutputAmountsHash :: SigHashJet () Word256\n  OutputScriptsHash :: SigHashJet () Word256\n  OutputNoncesHash :: SigHashJet () Word256\n  OutputRangeProofsHash :: SigHashJet () Word256\n  OutputSurjectionProofsHash :: SigHashJet () Word256\n  InputHash :: SigHashJet Word32 (S Word256)\n  InputOutpointsHash :: SigHashJet () Word256\n  InputSequencesHash :: SigHashJet () Word256\n  InputAnnexesHash :: SigHashJet () Word256\n  InputScriptSigsHash :: SigHashJet () Word256\n  IssuanceHash :: SigHashJet Word32 (S Word256)\n  IssuanceAssetAmountsHash :: SigHashJet () Word256\n  IssuanceTokenAmountsHash :: SigHashJet () Word256\n  IssuanceRangeProofsHash :: SigHashJet () Word256\n  IssuanceBlindingEntropyHash :: SigHashJet () Word256\n  InputUtxoHash :: SigHashJet Word32 (S Word256)\n  InputAmountsHash :: SigHashJet () Word256\n  InputScriptsHash :: SigHashJet () Word256\n  TapleafHash :: SigHashJet () Word256\n  TappathHash :: SigHashJet () Word256\n  OutpointHash :: SigHashJet (Ctx8, (S Word256, (Word256, Word32))) Ctx8\n  AssetAmountHash :: SigHashJet (Ctx8, (Conf Word256, Conf Word64)) Ctx8\n  NonceHash :: SigHashJet (Ctx8, S (Conf Word256)) Ctx8\n  AnnexHash :: SigHashJet (Ctx8, S Word256) Ctx8\n  BuildTapleafSimplicity :: SigHashJet Word256 Word256\n  BuildTapbranch :: SigHashJet (Word256, Word256) Word256\n  BuildTaptweak :: SigHashJet (PubKey, Word256) PubKey\nderiving instance Eq (SigHashJet a b)\nderiving instance Show (SigHashJet a b)\n\ndata TimeLockJet a b where\n  CheckLockHeight :: TimeLockJet TimeLock.Height ()\n  CheckLockTime :: TimeLockJet TimeLock.Time ()\n  BrokenDoNotUseCheckLockDistance :: TimeLockJet TimeLock.Distance ()\n  BrokenDoNotUseCheckLockDuration :: TimeLockJet TimeLock.Duration ()\n  TxLockHeight :: TimeLockJet () TimeLock.Height\n  TxLockTime :: TimeLockJet () TimeLock.Time\n  BrokenDoNotUseTxLockDistance :: TimeLockJet () TimeLock.Distance\n  BrokenDoNotUseTxLockDuration :: TimeLockJet () TimeLock.Duration\n  TxIsFinal :: TimeLockJet () TimeLock.Bit\nderiving instance Eq (TimeLockJet a b)\nderiving instance Show (TimeLockJet a b)\n\ndata IssuanceJet a b where\n  Issuance :: IssuanceJet Word32 (S (S Bit))\n  IssuanceAsset :: IssuanceJet Word32 (S (S Word256))\n  IssuanceToken :: IssuanceJet Word32 (S (S Word256))\n  IssuanceEntropy :: IssuanceJet Word32 (S (S Word256))\n  CalculateIssuanceEntropy :: IssuanceJet ((Word256, Word32), Word256) Word256\n  CalculateAsset :: IssuanceJet Word256 Word256\n  CalculateExplicitToken :: IssuanceJet Word256 Word256\n  CalculateConfidentialToken :: IssuanceJet Word256 Word256\n  LbtcAsset :: IssuanceJet () Word256\nderiving instance Eq (IssuanceJet a b)\nderiving instance Show (IssuanceJet a b)\n\ndata TransactionJet a b where\n  ScriptCMR :: TransactionJet () Word256\n  InternalKey :: TransactionJet () PubKey\n  CurrentIndex :: TransactionJet () Word32\n  NumInputs :: TransactionJet () Word32\n  NumOutputs :: TransactionJet () Word32\n  LockTime :: TransactionJet () Word32\n  OutputAsset :: TransactionJet Word32 (S (Conf Word256))\n  OutputAmount :: TransactionJet Word32 (S (Conf Word256, Conf Word64))\n  OutputNonce :: TransactionJet Word32 (S (S (Conf Word256)))\n  OutputScriptHash :: TransactionJet Word32 (S Word256)\n  OutputNullDatum :: TransactionJet (Word32, Word32) (S (S (Either (Word2, Word256) (Either Bit Word4))))\n  OutputIsFee :: TransactionJet Word32 (S Bit)\n  OutputSurjectionProof :: TransactionJet Word32 (S Word256)\n  OutputRangeProof :: TransactionJet Word32 (S Word256)\n  TotalFee :: TransactionJet Word256 Word64\n  CurrentPegin :: TransactionJet () (S Word256)\n  CurrentPrevOutpoint :: TransactionJet () (Word256,Word32)\n  CurrentAsset :: TransactionJet () (Conf Word256)\n  CurrentAmount :: TransactionJet () (Conf Word256, Conf Word64)\n  CurrentScriptHash :: TransactionJet () Word256\n  CurrentSequence :: TransactionJet () Word32\n  CurrentAnnexHash :: TransactionJet () (S Word256)\n  CurrentScriptSigHash :: TransactionJet () Word256\n  CurrentReissuanceBlinding :: TransactionJet () (S Word256)\n  CurrentNewIssuanceContract :: TransactionJet () (S Word256)\n  CurrentReissuanceEntropy :: TransactionJet () (S Word256)\n  CurrentIssuanceAssetAmount :: TransactionJet () (S (Conf Word64))\n  CurrentIssuanceTokenAmount :: TransactionJet () (S (Conf Word64))\n  CurrentIssuanceAssetProof :: TransactionJet () Word256\n  CurrentIssuanceTokenProof :: TransactionJet () Word256\n  InputPegin :: TransactionJet Word32 (S (S Word256))\n  InputPrevOutpoint :: TransactionJet Word32 (S (Word256,Word32))\n  InputAsset :: TransactionJet Word32 (S (Conf Word256))\n  InputAmount :: TransactionJet Word32 (S (Conf Word256, Conf Word64))\n  InputScriptHash :: TransactionJet Word32 (S Word256)\n  InputSequence :: TransactionJet Word32 (S Word32)\n  InputAnnexHash :: TransactionJet Word32 (S (S Word256))\n  InputScriptSigHash :: TransactionJet Word32 (S Word256)\n  ReissuanceBlinding :: TransactionJet Word32 (S (S Word256))\n  NewIssuanceContract :: TransactionJet Word32 (S (S Word256))\n  ReissuanceEntropy :: TransactionJet Word32 (S (S Word256))\n  IssuanceAssetAmount :: TransactionJet Word32 (S (S (Conf Word64)))\n  IssuanceTokenAmount :: TransactionJet Word32 (S (S (Conf Word64)))\n  IssuanceAssetProof :: TransactionJet Word32 (S Word256)\n  IssuanceTokenProof :: TransactionJet Word32 (S Word256)\n  TapleafVersion :: TransactionJet () Word8\n  Tappath :: TransactionJet Word8 (S Word256)\n  Version :: TransactionJet () Word32\n  GenesisBlockHash :: TransactionJet () Word256\n  TransactionId :: TransactionJet () Word256\nderiving instance Eq (TransactionJet a b)\nderiving instance Show (TransactionJet a b)\n\nspecificationElements :: (Assert term, Primitive term) => ElementsJet a b -> term a b\nspecificationElements (SigHashJet x) = specificationSigHash x\nspecificationElements (TimeLockJet x) = specificationTimeLock x\nspecificationElements (IssuanceJet x) = specificationIssuance x\nspecificationElements (TransactionJet x) = specificationTransaction x\n\nspecificationSigHash :: (Assert term, Primitive term) => SigHashJet a b -> term a b\nspecificationSigHash SigAllHash = SigHash.sigAllHash\nspecificationSigHash TxHash = SigHash.txHash\nspecificationSigHash TapEnvHash = SigHash.tapEnvHash\nspecificationSigHash OutputsHash = SigHash.outputsHash\nspecificationSigHash InputsHash = SigHash.inputsHash\nspecificationSigHash IssuancesHash = SigHash.issuancesHash\nspecificationSigHash InputUtxosHash = SigHash.inputUtxosHash\nspecificationSigHash OutputHash = SigHash.outputHash\nspecificationSigHash OutputAmountsHash = SigHash.outputAmountsHash\nspecificationSigHash OutputScriptsHash = SigHash.outputScriptsHash\nspecificationSigHash OutputNoncesHash = SigHash.outputNoncesHash\nspecificationSigHash OutputRangeProofsHash = SigHash.outputRangeProofsHash\nspecificationSigHash OutputSurjectionProofsHash = SigHash.outputSurjectionProofsHash\nspecificationSigHash InputHash = SigHash.inputHash\nspecificationSigHash InputOutpointsHash = SigHash.inputOutpointsHash\nspecificationSigHash InputSequencesHash = SigHash.inputSequencesHash\nspecificationSigHash InputAnnexesHash = SigHash.inputAnnexesHash\nspecificationSigHash InputScriptSigsHash = SigHash.inputScriptSigsHash\nspecificationSigHash IssuanceHash = SigHash.issuanceHash\nspecificationSigHash IssuanceAssetAmountsHash = SigHash.issuanceAssetAmountsHash\nspecificationSigHash IssuanceTokenAmountsHash = SigHash.issuanceTokenAmountsHash\nspecificationSigHash IssuanceRangeProofsHash = SigHash.issuanceRangeProofsHash\nspecificationSigHash IssuanceBlindingEntropyHash = SigHash.issuanceBlindingEntropyHash\nspecificationSigHash InputUtxoHash = SigHash.inputUtxoHash\nspecificationSigHash InputAmountsHash = SigHash.inputAmountsHash\nspecificationSigHash InputScriptsHash = SigHash.inputScriptsHash\nspecificationSigHash TapleafHash = SigHash.tapleafHash\nspecificationSigHash TappathHash = SigHash.tappathHash\nspecificationSigHash OutpointHash = Prog.outpointHash\nspecificationSigHash AssetAmountHash = Prog.assetAmountHash\nspecificationSigHash NonceHash = Prog.nonceHash\nspecificationSigHash AnnexHash = Prog.annexHash\nspecificationSigHash BuildTapleafSimplicity = Prog.buildTapleafSimplicity\nspecificationSigHash BuildTapbranch = Prog.buildTapbranch\nspecificationSigHash BuildTaptweak = Prog.buildTaptweak\n\nspecificationTimeLock :: (Assert term, Primitive term) => TimeLockJet a b -> term a b\nspecificationTimeLock CheckLockHeight = TimeLock.checkLockHeight\nspecificationTimeLock CheckLockTime = TimeLock.checkLockTime\nspecificationTimeLock BrokenDoNotUseCheckLockDistance = TimeLock.brokenCheckLockDistance\nspecificationTimeLock BrokenDoNotUseCheckLockDuration = TimeLock.brokenCheckLockDuration\nspecificationTimeLock TxLockHeight = TimeLock.txLockHeight\nspecificationTimeLock TxLockTime = TimeLock.txLockTime\nspecificationTimeLock BrokenDoNotUseTxLockDistance = TimeLock.brokenTxLockDistance\nspecificationTimeLock BrokenDoNotUseTxLockDuration = TimeLock.brokenTxLockDuration\nspecificationTimeLock TxIsFinal = TimeLock.txIsFinal\n\nspecificationIssuance :: (Assert term, Primitive term) => IssuanceJet a b -> term a b\nspecificationIssuance Issuance = Issuance.issuance\nspecificationIssuance IssuanceAsset = Issuance.issuanceAsset\nspecificationIssuance IssuanceToken = Issuance.issuanceToken\nspecificationIssuance IssuanceEntropy = Issuance.issuanceEntropy\nspecificationIssuance CalculateIssuanceEntropy = Prog.calculateIssuanceEntropy\nspecificationIssuance CalculateAsset = Prog.calculateAsset\nspecificationIssuance CalculateExplicitToken = Prog.calculateExplicitToken\nspecificationIssuance CalculateConfidentialToken = Prog.calculateConfidentialToken\nspecificationIssuance LbtcAsset = Prog.lbtcAsset\n\nspecificationTransaction :: (Assert term, Primitive term) => TransactionJet a b -> term a b\nspecificationTransaction ScriptCMR = primitive Prim.ScriptCMR\nspecificationTransaction InternalKey = primitive Prim.InternalKey\nspecificationTransaction CurrentIndex = primitive Prim.CurrentIndex\nspecificationTransaction NumInputs = Prog.numInputs\nspecificationTransaction NumOutputs = Prog.numOutputs\nspecificationTransaction LockTime = primitive Prim.LockTime\nspecificationTransaction OutputAsset = primitive Prim.OutputAsset\nspecificationTransaction OutputAmount = Prog.outputAmount\nspecificationTransaction OutputNonce = primitive Prim.OutputNonce\nspecificationTransaction OutputScriptHash = primitive Prim.OutputScriptHash\nspecificationTransaction OutputNullDatum = primitive Prim.OutputNullDatum\nspecificationTransaction OutputIsFee = Prog.outputIsFee\nspecificationTransaction OutputSurjectionProof = primitive Prim.OutputSurjectionProof\nspecificationTransaction OutputRangeProof = primitive Prim.OutputRangeProof\nspecificationTransaction TotalFee = Prog.totalFee\nspecificationTransaction CurrentPegin = Prog.currentPegin\nspecificationTransaction CurrentPrevOutpoint = Prog.currentPrevOutpoint\nspecificationTransaction CurrentAsset = Prog.currentAsset\nspecificationTransaction CurrentAmount = Prog.currentAmount\nspecificationTransaction CurrentScriptHash = Prog.currentScriptHash\nspecificationTransaction CurrentSequence = Prog.currentSequence\nspecificationTransaction CurrentAnnexHash = Prog.currentAnnexHash\nspecificationTransaction CurrentScriptSigHash = Prog.currentScriptSigHash\nspecificationTransaction CurrentReissuanceBlinding = Prog.currentReissuanceBlinding\nspecificationTransaction CurrentNewIssuanceContract = Prog.currentNewIssuanceContract\nspecificationTransaction CurrentReissuanceEntropy = Prog.currentReissuanceEntropy\nspecificationTransaction CurrentIssuanceAssetAmount = Prog.currentIssuanceAssetAmount\nspecificationTransaction CurrentIssuanceTokenAmount = Prog.currentIssuanceTokenAmount\nspecificationTransaction CurrentIssuanceAssetProof = Prog.currentIssuanceAssetProof\nspecificationTransaction CurrentIssuanceTokenProof = Prog.currentIssuanceTokenProof\nspecificationTransaction InputPegin = primitive Prim.InputPegin\nspecificationTransaction InputPrevOutpoint = primitive Prim.InputPrevOutpoint\nspecificationTransaction InputAsset = primitive Prim.InputAsset\nspecificationTransaction InputAmount = Prog.inputAmount\nspecificationTransaction InputScriptHash = primitive Prim.InputScriptHash\nspecificationTransaction InputSequence = primitive Prim.InputSequence\nspecificationTransaction InputAnnexHash = primitive Prim.InputAnnexHash\nspecificationTransaction InputScriptSigHash = primitive Prim.InputScriptSigHash\nspecificationTransaction ReissuanceBlinding = primitive Prim.ReissuanceBlinding\nspecificationTransaction NewIssuanceContract = primitive Prim.NewIssuanceContract\nspecificationTransaction ReissuanceEntropy = primitive Prim.ReissuanceEntropy\nspecificationTransaction IssuanceAssetAmount = primitive Prim.IssuanceAssetAmount\nspecificationTransaction IssuanceTokenAmount = primitive Prim.IssuanceTokenAmount\nspecificationTransaction IssuanceAssetProof = primitive Prim.IssuanceAssetProof\nspecificationTransaction IssuanceTokenProof = primitive Prim.IssuanceTokenProof\nspecificationTransaction TapleafVersion = primitive Prim.TapleafVersion\nspecificationTransaction Tappath = primitive Prim.Tappath\nspecificationTransaction Version = primitive Prim.Version\nspecificationTransaction GenesisBlockHash = primitive Prim.GenesisBlockHash\nspecificationTransaction TransactionId = primitive Prim.TransactionId\n\nimplementationElements :: ElementsJet a b -> PrimEnv -> a -> Maybe b\nimplementationElements (SigHashJet x) = implementationSigHash x\nimplementationElements (TimeLockJet x) = implementationTimeLock x\nimplementationElements (IssuanceJet x) = implementationIssuance x\nimplementationElements (TransactionJet x) = implementationTransaction x\n\nimplementationSigHash :: SigHashJet a b -> PrimEnv -> a -> Maybe b\nimplementationSigHash SigAllHash env _ = Just . toWord256 . integerHash256 $ primEnvHash env\nimplementationSigHash TxHash env _ = Just . toWord256 . integerHash256 $ txHash (envTx env)\nimplementationSigHash TapEnvHash env _ = Just . toWord256 . integerHash256 $ tapEnvHash (envTap env)\nimplementationSigHash OutputsHash env _ = Just . toWord256 . integerHash256 $ outputsHash (envTx env)\nimplementationSigHash InputsHash env _ = Just . toWord256 . integerHash256 $ inputsHash (envTx env)\nimplementationSigHash IssuancesHash env _ = Just . toWord256 . integerHash256 $ issuancesHash (envTx env)\nimplementationSigHash InputUtxosHash env _ = Just . toWord256 . integerHash256 $ inputUtxosHash (envTx env)\nimplementationSigHash OutputHash env i = Just . fmap (toWord256 . integerHash256 . outputHash) . maybe (Left ()) Right\n                                       $ sigTxOut (envTx env) !? (fromIntegral $ fromWord32 i)\nimplementationSigHash OutputAmountsHash env _ = Just . toWord256 . integerHash256 $ outputAmountsHash (envTx env)\nimplementationSigHash OutputScriptsHash env _ = Just . toWord256 . integerHash256 $ outputScriptsHash (envTx env)\nimplementationSigHash OutputNoncesHash env _ = Just . toWord256 . integerHash256 $ outputNoncesHash (envTx env)\nimplementationSigHash OutputRangeProofsHash env _ = Just . toWord256 . integerHash256 $ outputRangeProofsHash (envTx env)\nimplementationSigHash OutputSurjectionProofsHash env _ = Just . toWord256 . integerHash256 $ outputSurjectionProofsHash (envTx env)\nimplementationSigHash InputHash env i = Just . fmap (toWord256 . integerHash256 . inputHash) . maybe (Left ()) Right\n                                      $ sigTxIn (envTx env) !? (fromIntegral $ fromWord32 i)\nimplementationSigHash InputOutpointsHash env _ = Just . toWord256 . integerHash256 $ inputOutpointsHash (envTx env)\nimplementationSigHash InputSequencesHash env _ = Just . toWord256 . integerHash256 $ inputSequencesHash (envTx env)\nimplementationSigHash InputAnnexesHash env _ = Just . toWord256 . integerHash256 $ inputAnnexesHash (envTx env)\nimplementationSigHash InputScriptSigsHash env _ = Just . toWord256 . integerHash256 $ inputScriptSigsHash (envTx env)\nimplementationSigHash IssuanceHash env i = Just . fmap (toWord256 . integerHash256 . issuanceHash) . maybe (Left ()) Right\n                                         $ sigTxIn (envTx env) !? (fromIntegral $ fromWord32 i)\nimplementationSigHash IssuanceAssetAmountsHash env _ = Just . toWord256 . integerHash256 $ issuanceAssetAmountsHash (envTx env)\nimplementationSigHash IssuanceTokenAmountsHash env _ = Just . toWord256 . integerHash256 $ issuanceTokenAmountsHash (envTx env)\nimplementationSigHash IssuanceRangeProofsHash env _ = Just . toWord256 . integerHash256 $ issuanceRangeProofsHash (envTx env)\nimplementationSigHash IssuanceBlindingEntropyHash env _ = Just . toWord256 . integerHash256 $ issuanceBlindingEntropyHash (envTx env)\nimplementationSigHash InputUtxoHash env i = Just . fmap (toWord256 . integerHash256 . inputUtxoHash . sigTxiTxo) . maybe (Left ()) Right\n                                          $ sigTxIn (envTx env) !? (fromIntegral $ fromWord32 i)\nimplementationSigHash InputAmountsHash env _ = Just . toWord256 . integerHash256 $ inputAmountsHash (envTx env)\nimplementationSigHash InputScriptsHash env _ = Just . toWord256 . integerHash256 $ inputScriptsHash (envTx env)\nimplementationSigHash TapleafHash env _ = Just . toWord256 . integerHash256 $ tapleafHash (envTap env)\nimplementationSigHash TappathHash env _ = Just . toWord256 . integerHash256 $ tappathHash (envTap env)\nimplementationSigHash OutpointHash _env (ctx, (mw256, op)) = toCtx8 <$> (flip ctxAdd (runPut (putMW256 mw256 >> putOutpointBE (cast op))) =<< fromCtx8 ctx)\n where\n  putMW256 (Left _) = putWord8 0x00\n  putMW256 (Right w256) = putWord8 0x01 >> put (fromIntegral (fromWord256 w256) :: W.Word256)\n  cast (h, i) = Outpoint (review (over be256) (fromW256 h)) (fromW32 i)\n  fromW256 = fromIntegral . fromWord256\n  fromW32 = fromIntegral . fromWord32\nimplementationSigHash AssetAmountHash _env (ctx, (cw256, cw64)) = toCtx8 <$> (flip ctxAdd (runPut (put256 cw256 >> put64 cw64)) =<< fromCtx8 ctx)\n where\n  put256 (Left (by, x)) = putWord8 (if fromBit by then 0xb else 0x0a) >> put (fromW256 x)\n  put256 (Right w256) = putWord8 0x01 >> put (fromW256 w256)\n  put64 (Left (by, x)) = putWord8 (if fromBit by then 0x9 else 0x08) >> put (fromW256 x)\n  put64 (Right w64) = putWord8 0x01 >> put (fromW64 w64)\n  fromW256 :: Word256 -> W.Word256\n  fromW256 = fromIntegral . fromWord256\n  fromW64 :: Word64 -> W.Word64\n  fromW64 = fromIntegral . fromWord64\nimplementationSigHash NonceHash _env (ctx, mcw256) = toCtx8 <$> (flip ctxAdd (runPut . putNonce $ nonce) =<< fromCtx8 ctx)\n where\n  nonce = either (const Nothing) (Just . Nonce . ((fromBit *** (fromIntegral . fromWord256)) +++ fromHash)) mcw256\nimplementationSigHash AnnexHash _env (ctx, mw256) = toCtx8 <$> (flip ctxAdd (runPut . putMW256 $ mw256) =<< fromCtx8 ctx)\n where\n  putMW256 (Left _) = putWord8 0x00\n  putMW256 (Right w256) = putWord8 0x01 >> put (fromIntegral (fromWord256 w256) :: W.Word256)\nimplementationSigHash BuildTapleafSimplicity _env cmr = Just . toWord256 . integerHash256 . bsHash . runPut\n                                                      $ put tag >> put tag >> putWord8 tapleafSimplicityVersion >> putWord8 32 >> put (fromW256 cmr)\n where\n  tag = bsHash (fromString \"TapLeaf/elements\")\n  tapleafSimplicityVersion = 0xbe\n  fromW256 :: Word256 -> W.Word256\n  fromW256 = fromIntegral . fromWord256\n\nimplementationSigHash BuildTapbranch _env (wa,wb) = Just . toWord256 . integerHash256 . bsHash . runPut\n                                                  $ put tag >> put tag >> put min >> put max\n where\n  a = fromW256 wa\n  b = fromW256 wb\n  min = if a < b then a else b\n  max = if a < b then b else a\n  tag = bsHash (fromString \"TapBranch/elements\")\n  fromW256 :: Word256 -> W.Word256\n  fromW256 = fromIntegral . fromWord256\nimplementationSigHash BuildTaptweak _env (key,h) = cast <$> taptweak pk h0\n where\n  pk = Schnorr.PubKey (fromW256 key)\n  h0 = review (over be256) (fromW256 h)\n  cast (Schnorr.PubKey k) = toWord256 . toInteger $ k\n  fromW256 :: Word256 -> W.Word256\n  fromW256 = fromIntegral . fromWord256\n\nimplementationTimeLock :: TimeLockJet a b -> PrimEnv -> a -> Maybe b\nimplementationTimeLock CheckLockHeight env x | txIsFinal (envTx env) = guard $ fromWord32 x <= 0\n                                             | Left l <- parseLock lock = guard $ fromWord32 x <= fromIntegral l\n                                             | otherwise = guard $ fromWord32 x <= 0\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock CheckLockTime env x | txIsFinal (envTx env) = guard $ fromWord32 x <= 0\n                                           | Right l <- parseLock lock = guard $ fromWord32 x <= fromIntegral l\n                                           | otherwise = guard $ fromWord32 x <= 0\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock BrokenDoNotUseCheckLockDistance env x | fromWord16 x <= fromIntegral (txLockBrokenDistance (envTx env)) = Just ()\n                                                             | otherwise = Nothing\nimplementationTimeLock BrokenDoNotUseCheckLockDuration env x | fromWord16 x <= fromIntegral (txLockBrokenDuration (envTx env)) = Just ()\n                                                             | otherwise = Nothing\nimplementationTimeLock TxLockHeight env () | txIsFinal (envTx env) = Just (toWord32 0)\n                                           | Left l <- parseLock lock = Just . toWord32 $ fromIntegral l\n                                           | otherwise = Just (toWord32 0)\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock TxLockTime env () | txIsFinal (envTx env) = Just (toWord32 0)\n                                         | Right l <- parseLock lock = Just . toWord32 $ fromIntegral l\n                                         | otherwise = Just (toWord32 0)\n where\n  lock = fromIntegral . sigTxLock . envTx $ env\nimplementationTimeLock BrokenDoNotUseTxLockDistance env () = Just . toWord16 . fromIntegral $ txLockBrokenDistance (envTx env)\nimplementationTimeLock BrokenDoNotUseTxLockDuration env () = Just . toWord16 . fromIntegral $ txLockBrokenDuration (envTx env)\nimplementationTimeLock TxIsFinal env () = Just $ toBit (txIsFinal (envTx env))\n\nimplementationIssuance :: IssuanceJet a b -> PrimEnv -> a -> Maybe b\nimplementationIssuance Issuance env i = fmap (cast . fmap (cast . fmap toBit)) body\n where\n  cast = maybe (Left ()) Right\n  body = return $ fmap isRight . sigTxiIssuance <$> sigTxIn (envTx env) !? (fromIntegral (fromWord32 i))\n\nimplementationIssuance IssuanceEntropy env i = fmap (cast . fmap (cast . fmap fromHash)) body\n where\n  cast = maybe (Left ()) Right\n  fromHash = toWord256 . integerHash256\n  body = return $ sigTxiIssuanceEntropy <$> sigTxIn (envTx env) !? (fromIntegral (fromWord32 i))\n\nimplementationIssuance IssuanceAsset env i = fmap (cast . fmap (cast . fmap fromHash)) body\n where\n  cast = maybe (Left ()) Right\n  fromHash = toWord256 . integerHash256\n  body = return $ sigTxiIssuanceAsset <$> sigTxIn (envTx env) !? (fromIntegral (fromWord32 i))\n\nimplementationIssuance IssuanceToken env i = fmap (cast . fmap (cast . fmap fromHash)) body\n where\n  cast = maybe (Left ()) Right\n  fromHash = toWord256 . integerHash256\n  body = return $ sigTxiIssuanceToken <$> sigTxIn (envTx env) !? (fromIntegral (fromWord32 i))\n\nimplementationIssuance CalculateIssuanceEntropy _ ((x,y), z) = Just (fromHash (calculateIssuanceEntropy op contract))\n where\n  fromHash = toWord256 . integerHash256\n  fromW256 = fromIntegral . fromWord256\n  fromW32 = fromIntegral . fromWord32\n  op = Outpoint (review (over be256) (fromW256 x)) (fromW32 y)\n  contract = review (over be256) (fromW256 z)\n\nimplementationIssuance CalculateAsset _ x = Just (fromHash (calculateAsset entropy))\n where\n  fromW256 = fromIntegral . fromWord256\n  fromHash = toWord256 . integerHash256\n  entropy = review (over be256) (fromW256 x)\n\nimplementationIssuance CalculateExplicitToken _ x = Just (fromHash (calculateToken (Amount (Explicit undefined)) entropy))\n where\n  fromW256 = fromIntegral . fromWord256\n  fromHash = toWord256 . integerHash256\n  entropy = review (over be256) (fromW256 x)\n\nimplementationIssuance CalculateConfidentialToken _ x = Just (fromHash (calculateToken (Amount (Confidential undefined undefined)) entropy))\n where\n  fromW256 = fromIntegral . fromWord256\n  fromHash = toWord256 . integerHash256\n  entropy = review (over be256) (fromW256 x)\n\nimplementationIssuance LbtcAsset _ _ = Just (fromHash lBtcAsset)\n where\n  fromHash = toWord256 . integerHash256\n\nimplementationTransaction :: TransactionJet a b -> PrimEnv -> a -> Maybe b\nimplementationTransaction OutputIsFee env i = Just . cast $ toBit . isJust . outputFee <$> sigTxOut (envTx env) !? (fromIntegral (fromWord32 i))\n where\n  cast = maybe (Left ()) Right\nimplementationTransaction TotalFee env x = Just . fromValue . Map.findWithDefault 0 assetId $ totalFee (envTx env)\n where\n  fromValue = toWord64 . toInteger\n  fromW256 = fromIntegral . fromWord256\n  assetId = review (over be256) (fromW256 x)\nimplementationTransaction x env i = Semantics.sem (specificationTransaction x) env i\n\ngetJetBitElements :: (Monad m) => m Void -> m Bool -> m (SomeArrow ElementsJet)\ngetJetBitElements = getCatalogue elementsCatalogue\n\nelementsCatalogue :: Catalogue (SomeArrow ElementsJet)\nelementsCatalogue = Shelf\n [ someArrowMap SigHashJet <$> sigHashCatalogue\n , someArrowMap TimeLockJet <$> timeLockCatalogue\n , someArrowMap IssuanceJet <$> issuanceCatalogue\n , someArrowMap TransactionJet <$> transactionCatalogue\n ]\nsigHashCatalogue = book\n [ SomeArrow SigAllHash\n , SomeArrow TxHash\n , SomeArrow TapEnvHash\n , SomeArrow OutputsHash\n , SomeArrow InputsHash\n , SomeArrow IssuancesHash\n , SomeArrow InputUtxosHash\n , SomeArrow OutputHash\n , SomeArrow OutputAmountsHash\n , SomeArrow OutputScriptsHash\n , SomeArrow OutputNoncesHash\n , SomeArrow OutputRangeProofsHash\n , SomeArrow OutputSurjectionProofsHash\n , SomeArrow InputHash\n , SomeArrow InputOutpointsHash\n , SomeArrow InputSequencesHash\n , SomeArrow InputAnnexesHash\n , SomeArrow InputScriptSigsHash\n , SomeArrow IssuanceHash\n , SomeArrow IssuanceAssetAmountsHash\n , SomeArrow IssuanceTokenAmountsHash\n , SomeArrow IssuanceRangeProofsHash\n , SomeArrow IssuanceBlindingEntropyHash\n , SomeArrow InputUtxoHash\n , SomeArrow InputAmountsHash\n , SomeArrow InputScriptsHash\n , SomeArrow TapleafHash\n , SomeArrow TappathHash\n , SomeArrow OutpointHash\n , SomeArrow AssetAmountHash\n , SomeArrow NonceHash\n , SomeArrow AnnexHash\n , SomeArrow BuildTapleafSimplicity\n , SomeArrow BuildTapbranch\n , SomeArrow BuildTaptweak\n ]\ntimeLockCatalogue = book\n [ SomeArrow CheckLockHeight\n , SomeArrow CheckLockTime\n , SomeArrow BrokenDoNotUseCheckLockDistance\n , SomeArrow BrokenDoNotUseCheckLockDuration\n , SomeArrow TxLockHeight\n , SomeArrow TxLockTime\n , SomeArrow BrokenDoNotUseTxLockDistance\n , SomeArrow BrokenDoNotUseTxLockDuration\n , SomeArrow TxIsFinal\n ]\nissuanceCatalogue = book\n [ SomeArrow Issuance\n , SomeArrow IssuanceAsset\n , SomeArrow IssuanceToken\n , SomeArrow IssuanceEntropy\n , SomeArrow CalculateIssuanceEntropy\n , SomeArrow CalculateAsset\n , SomeArrow CalculateExplicitToken\n , SomeArrow CalculateConfidentialToken\n , SomeArrow LbtcAsset\n ]\ntransactionCatalogue = book\n [ SomeArrow ScriptCMR\n , SomeArrow InternalKey\n , SomeArrow CurrentIndex\n , SomeArrow NumInputs\n , SomeArrow NumOutputs\n , SomeArrow LockTime\n , SomeArrow OutputAsset\n , SomeArrow OutputAmount\n , SomeArrow OutputNonce\n , SomeArrow OutputScriptHash\n , SomeArrow OutputNullDatum\n , SomeArrow OutputIsFee\n , SomeArrow OutputSurjectionProof\n , SomeArrow OutputRangeProof\n , SomeArrow TotalFee\n , SomeArrow CurrentPegin\n , SomeArrow CurrentPrevOutpoint\n , SomeArrow CurrentAsset\n , SomeArrow CurrentAmount\n , SomeArrow CurrentScriptHash\n , SomeArrow CurrentSequence\n , SomeArrow CurrentAnnexHash\n , SomeArrow CurrentScriptSigHash\n , SomeArrow CurrentReissuanceBlinding\n , SomeArrow CurrentNewIssuanceContract\n , SomeArrow CurrentReissuanceEntropy\n , SomeArrow CurrentIssuanceAssetAmount\n , SomeArrow CurrentIssuanceTokenAmount\n , SomeArrow CurrentIssuanceAssetProof\n , SomeArrow CurrentIssuanceTokenProof\n , SomeArrow InputPegin\n , SomeArrow InputPrevOutpoint\n , SomeArrow InputAsset\n , SomeArrow InputAmount\n , SomeArrow InputScriptHash\n , SomeArrow InputSequence\n , SomeArrow InputAnnexHash\n , SomeArrow InputScriptSigHash\n , SomeArrow ReissuanceBlinding\n , SomeArrow NewIssuanceContract\n , SomeArrow ReissuanceEntropy\n , SomeArrow IssuanceAssetAmount\n , SomeArrow IssuanceTokenAmount\n , SomeArrow IssuanceAssetProof\n , SomeArrow IssuanceTokenProof\n , SomeArrow TapleafVersion\n , SomeArrow Tappath\n , SomeArrow Version\n , SomeArrow GenesisBlockHash\n , SomeArrow TransactionId\n ]\n\nputJetBitElements :: ElementsJet a b -> DList Bool\nputJetBitElements (SigHashJet x)     = putPositive 1 . putJetBitSigHash x\nputJetBitElements (TimeLockJet x)    = putPositive 2 . putJetBitTimeLock x\nputJetBitElements (IssuanceJet x)    = putPositive 3 . putJetBitIssuance x\nputJetBitElements (TransactionJet x) = putPositive 4 . putJetBitTransaction x\n\nputJetBitSigHash :: SigHashJet a b -> DList Bool\nputJetBitSigHash SigAllHash                  = putPositive 1\nputJetBitSigHash TxHash                      = putPositive 2\nputJetBitSigHash TapEnvHash                  = putPositive 3\nputJetBitSigHash OutputsHash                 = putPositive 4\nputJetBitSigHash InputsHash                  = putPositive 5\nputJetBitSigHash IssuancesHash               = putPositive 6\nputJetBitSigHash InputUtxosHash              = putPositive 7\nputJetBitSigHash OutputHash                  = putPositive 8\nputJetBitSigHash OutputAmountsHash           = putPositive 9\nputJetBitSigHash OutputScriptsHash           = putPositive 10\nputJetBitSigHash OutputNoncesHash            = putPositive 11\nputJetBitSigHash OutputRangeProofsHash       = putPositive 12\nputJetBitSigHash OutputSurjectionProofsHash  = putPositive 13\nputJetBitSigHash InputHash                   = putPositive 14\nputJetBitSigHash InputOutpointsHash          = putPositive 15\nputJetBitSigHash InputSequencesHash          = putPositive 16\nputJetBitSigHash InputAnnexesHash            = putPositive 17\nputJetBitSigHash InputScriptSigsHash         = putPositive 18\nputJetBitSigHash IssuanceHash                = putPositive 19\nputJetBitSigHash IssuanceAssetAmountsHash    = putPositive 20\nputJetBitSigHash IssuanceTokenAmountsHash    = putPositive 21\nputJetBitSigHash IssuanceRangeProofsHash     = putPositive 22\nputJetBitSigHash IssuanceBlindingEntropyHash = putPositive 23\nputJetBitSigHash InputUtxoHash               = putPositive 24\nputJetBitSigHash InputAmountsHash            = putPositive 25\nputJetBitSigHash InputScriptsHash            = putPositive 26\nputJetBitSigHash TapleafHash                 = putPositive 27\nputJetBitSigHash TappathHash                 = putPositive 28\nputJetBitSigHash OutpointHash                = putPositive 29\nputJetBitSigHash AssetAmountHash             = putPositive 30\nputJetBitSigHash NonceHash                   = putPositive 31\nputJetBitSigHash AnnexHash                   = putPositive 32\nputJetBitSigHash BuildTapleafSimplicity      = putPositive 33\nputJetBitSigHash BuildTapbranch              = putPositive 34\nputJetBitSigHash BuildTaptweak               = putPositive 35\n\nputJetBitTimeLock :: TimeLockJet a b -> DList Bool\nputJetBitTimeLock CheckLockHeight   = putPositive 1\nputJetBitTimeLock CheckLockTime     = putPositive 2\nputJetBitTimeLock BrokenDoNotUseCheckLockDistance = putPositive 3\nputJetBitTimeLock BrokenDoNotUseCheckLockDuration = putPositive 4\nputJetBitTimeLock TxLockHeight      = putPositive 5\nputJetBitTimeLock TxLockTime        = putPositive 6\nputJetBitTimeLock BrokenDoNotUseTxLockDistance    = putPositive 7\nputJetBitTimeLock BrokenDoNotUseTxLockDuration    = putPositive 8\nputJetBitTimeLock TxIsFinal         = putPositive 9\n\nputJetBitIssuance :: IssuanceJet a b -> DList Bool\nputJetBitIssuance Issuance                   = putPositive 1\nputJetBitIssuance IssuanceAsset              = putPositive 2\nputJetBitIssuance IssuanceToken              = putPositive 3\nputJetBitIssuance IssuanceEntropy            = putPositive 4\nputJetBitIssuance CalculateIssuanceEntropy   = putPositive 5\nputJetBitIssuance CalculateAsset             = putPositive 6\nputJetBitIssuance CalculateExplicitToken     = putPositive 7\nputJetBitIssuance CalculateConfidentialToken = putPositive 8\nputJetBitIssuance LbtcAsset                  = putPositive 9\n\nputJetBitTransaction :: TransactionJet a b -> DList Bool\nputJetBitTransaction ScriptCMR                  = putPositive 1\nputJetBitTransaction InternalKey                = putPositive 2\nputJetBitTransaction CurrentIndex               = putPositive 3\nputJetBitTransaction NumInputs                  = putPositive 4\nputJetBitTransaction NumOutputs                 = putPositive 5\nputJetBitTransaction LockTime                   = putPositive 6\nputJetBitTransaction OutputAsset                = putPositive 7\nputJetBitTransaction OutputAmount               = putPositive 8\nputJetBitTransaction OutputNonce                = putPositive 9\nputJetBitTransaction OutputScriptHash           = putPositive 10\nputJetBitTransaction OutputNullDatum            = putPositive 11\nputJetBitTransaction OutputIsFee                = putPositive 12\nputJetBitTransaction OutputSurjectionProof      = putPositive 13\nputJetBitTransaction OutputRangeProof           = putPositive 14\nputJetBitTransaction TotalFee                   = putPositive 15\nputJetBitTransaction CurrentPegin               = putPositive 16\nputJetBitTransaction CurrentPrevOutpoint        = putPositive 17\nputJetBitTransaction CurrentAsset               = putPositive 18\nputJetBitTransaction CurrentAmount              = putPositive 19\nputJetBitTransaction CurrentScriptHash          = putPositive 20\nputJetBitTransaction CurrentSequence            = putPositive 21\nputJetBitTransaction CurrentAnnexHash           = putPositive 22\nputJetBitTransaction CurrentScriptSigHash       = putPositive 23\nputJetBitTransaction CurrentReissuanceBlinding  = putPositive 24\nputJetBitTransaction CurrentNewIssuanceContract = putPositive 25\nputJetBitTransaction CurrentReissuanceEntropy   = putPositive 26\nputJetBitTransaction CurrentIssuanceAssetAmount = putPositive 27\nputJetBitTransaction CurrentIssuanceTokenAmount = putPositive 28\nputJetBitTransaction CurrentIssuanceAssetProof  = putPositive 29\nputJetBitTransaction CurrentIssuanceTokenProof  = putPositive 30\nputJetBitTransaction InputPegin                 = putPositive 31\nputJetBitTransaction InputPrevOutpoint          = putPositive 32\nputJetBitTransaction InputAsset                 = putPositive 33\nputJetBitTransaction InputAmount                = putPositive 34\nputJetBitTransaction InputScriptHash            = putPositive 35\nputJetBitTransaction InputSequence              = putPositive 36\nputJetBitTransaction InputAnnexHash             = putPositive 37\nputJetBitTransaction InputScriptSigHash         = putPositive 38\nputJetBitTransaction ReissuanceBlinding         = putPositive 39\nputJetBitTransaction NewIssuanceContract        = putPositive 40\nputJetBitTransaction ReissuanceEntropy          = putPositive 41\nputJetBitTransaction IssuanceAssetAmount        = putPositive 42\nputJetBitTransaction IssuanceTokenAmount        = putPositive 43\nputJetBitTransaction IssuanceAssetProof         = putPositive 44\nputJetBitTransaction IssuanceTokenProof         = putPositive 45\nputJetBitTransaction TapleafVersion             = putPositive 46\nputJetBitTransaction Tappath                    = putPositive 47\nputJetBitTransaction Version                    = putPositive 48\nputJetBitTransaction GenesisBlockHash           = putPositive 49\nputJetBitTransaction TransactionId              = putPositive 50\n\nelementsJetMap :: Map.Map Hash256 (SomeArrow ElementsJet)\nelementsJetMap = Map.fromList . fmap mkAssoc $ toList elementsCatalogue\n where\n  mkAssoc :: SomeArrow ElementsJet -> (Hash256, (SomeArrow ElementsJet))\n  mkAssoc wrapped@(SomeArrow jt) = (identityHash (specificationElements jt), wrapped)\n\ndata MatcherInfo a b = MatcherInfo (Product ConstWord IdentityRoot a b)\n\ninstance Simplicity.Elements.JetType.JetType JetType where\n  type MatcherInfo JetType = MatcherInfo\n\n  specification (ConstWordJet cw) = CoreJets.specificationConstWord cw\n  specification (CoreJet jt) = CoreJets.specification jt\n  specification (ElementsJet jt) = specificationElements jt\n\n  implementation (ConstWordJet cw) _env = CoreJets.implementationConstWord cw\n  implementation (CoreJet jt) _env = CoreJets.implementation jt\n  implementation (ElementsJet jt) env = implementationElements jt env\n\n  matcher (MatcherInfo (Product cw ir)) = (do\n    SomeArrow jt <- Map.lookup (identityHash ir) jetMap\n    let (ira, irb) = reifyArrow ir\n    let (jta, jtb) = reifyArrow jt\n    -- If the error below is thrown it suggests there is some sort of type annotation mismatch in the map below\n    case (equalTyReflect ira jta, equalTyReflect irb jtb) of\n      (Just Refl, Just Refl) -> return jt\n      otherwise -> error \"mathcher{Simplicity.Elements.Jets.JetType}: type match error\"\n    ) <|> case cw of\n      (ConstWord w v) -> return (ConstWordJet (ConstWordContent w v))\n      otherwise -> Nothing\n\n  getJetBit abort next = do\n    b <- next\n    if b then do\n               c <- next\n               if c then someArrowMap ElementsJet <$> getJetBitElements abort next\n                    else someArrowMap CoreJet <$> CoreJets.getJetBit abort next\n         else mkConstWordJet <$> CoreJets.getConstWordBit abort next\n   where\n    mkConstWordJet (SomeConstWordContent cw) = SomeArrow (ConstWordJet cw)\n\n  putJetBit = go\n   where\n    go (ConstWordJet cw) = ([o]++) . CoreJets.putConstWordBit cw\n    go (CoreJet jt) = ([i,o]++) . CoreJets.putJetBit jt\n    go (ElementsJet jt) = ([i,i]++) . putJetBitElements jt\n    (o,i) = (False,True)\n\n  jetCost (ConstWordJet cw) = jetCostConstWord cw\n  jetCost (CoreJet jt) = jetCostCore jt\n  jetCost (ElementsJet jt) = jetCostElements jt\n\n-- | Generate a 'Jet' using the 'Simplicity.Elements.JetType.jetCost' and 'Simplicity.Elements.JetType.specification' of a 'JetType'.\nasJet :: (Jet term, TyC a, TyC b) => JetType a b -> term a b\nasJet = Simplicity.Elements.JetType.asJet\n\n-- This map is used in the 'matcher' method above.\n-- We have floated it out here to make sure the map is shared between invocations of the 'matcher' function.\njetMap :: Map.Map Hash256 (SomeArrow JetType)\njetMap = Map.union (someArrowMap CoreJet <$> coreJetMap) (someArrowMap ElementsJet <$> elementsJetMap)\n\n-- | Find all the expressions in a term that can be replaced with Elements jets.\n-- Because discounted jets are not transparent, this replacement will change the CMR of the term.\n-- In particular the CMR values passed to 'disconnect' may be different, and thus the result of\n-- evaluation could change in the presence of 'disconnect'.\njetSubst :: (TyC a, TyC b) => JetDag JetType a b -> WrappedSimplicity a b\njetSubst = Dag.jetSubst\n\n-- | Performs 'jetSubst' and then evaluates the program in the given environment to prune unused case branches,\n-- which transforms some case expressions into assertions.\n-- The resulting expression should always have the same CMR as the expression that 'jetSubst' would return.\npruneSubst :: JetDag JetType () () -> PrimEnv -> Maybe (WrappedSimplicity () ())\npruneSubst prog env = Dag.pruneSubst prog env ()\n\n-- | This is an instance of 'BitString.getTermLengthCode' that specifically decodes the canonical 'JetType' set of known jets.\ngetTermLengthCode :: (Monad m, Simplicity term, TyC a, TyC b) => m Void -> m Bool -> m (term a b)\ngetTermLengthCode = BitString.getTermLengthCode (Proxy :: Proxy (SomeArrow JetType))\n\n-- | This is an instance of 'BitString.putTermLengthCode' that specifically encodes the canonical 'JetType' set of known jets.\nputTermLengthCode :: (TyC a, TyC b) => JetDag JetType a b -> ([Bool],[Bool])\nputTermLengthCode = BitString.putTermLengthCode\n\n-- | 'fastEval' optimizes Simplicity evaluation using Elements jets.\n-- Unlike using 'Simplicity.Dag.jetSubst', 'fastEval' will not modify the commitment roots and therefore will always return the same\n-- result as 'sem' in the presence of 'disconnect'.\n--\n-- @\n-- 'fastEval' t === 'sem' t\n-- @\nfastEval :: Semantics.FastEval JetType a b -> Semantics.PrimEnv -> a -> Maybe b\nfastEval = Semantics.fastEval\n\ninstance Core MatcherInfo where\n  iden = MatcherInfo iden\n  unit = MatcherInfo unit\n  injl (MatcherInfo ir) = MatcherInfo (injl ir)\n  injr (MatcherInfo ir) = MatcherInfo (injr ir)\n  drop (MatcherInfo ir) = MatcherInfo (drop ir)\n  take (MatcherInfo ir) = MatcherInfo (take ir)\n  pair (MatcherInfo irl) (MatcherInfo irr) = MatcherInfo (pair irl irr)\n  match (MatcherInfo irl) (MatcherInfo irr) = MatcherInfo (match irl irr)\n  comp (MatcherInfo irl) (MatcherInfo irr) = MatcherInfo (comp irl irr)\n\ninstance Assert MatcherInfo where\n  assertl (MatcherInfo ir) h = MatcherInfo (assertl ir h)\n  assertr h (MatcherInfo ir) = MatcherInfo (assertr h ir)\n  fail b = MatcherInfo (fail b)\n\ninstance Primitive MatcherInfo where\n  primitive p = MatcherInfo (primitive p)\n\nfromPoint (by, x) = Point (fromBit by) (fe (fromWord256 x))\n\n-- | Returns the cost of a constant word jet corresponding to the contents of a given 'ConstWordContent'.\njetCostConstWord :: ConstWordContent b -> Weight\njetCostConstWord (ConstWordContent w _) = milli (wordSize w)\n\n-- | The costs of \"core\" jets.  This can be used to help instantiate the 'Simplicity.JetType.jetCost' method.\njetCostCore :: CoreJet a b -> Weight\njetCostCore (WordJet x) = jetCostWord x\njetCostCore (ArithJet x) = jetCostArith x\njetCostCore (HashJet x) = jetCostHash x\njetCostCore (Secp256k1Jet x) = jetCostSecp256k1 x\njetCostCore (SignatureJet x) = jetCostSignature x\njetCostCore (BitcoinJet x) = jetCostBitcoin x\n\njetCostWord :: WordJet a b -> Weight\njetCostWord Verify = cost \"Verify\"\njetCostWord Low1 = cost \"Low1\"\njetCostWord Low8 = cost \"Low8\"\njetCostWord Low16 = cost \"Low16\"\njetCostWord Low32 = cost \"Low32\"\njetCostWord Low64 = cost \"Low64\"\njetCostWord High1 = cost \"High1\"\njetCostWord High8 = cost \"High8\"\njetCostWord High16 = cost \"High16\"\njetCostWord High32 = cost \"High32\"\njetCostWord High64 = cost \"High64\"\njetCostWord Complement1 = cost \"Complement1\"\njetCostWord Complement8 = cost \"Complement8\"\njetCostWord Complement16 = cost \"Complement16\"\njetCostWord Complement32 = cost \"Complement32\"\njetCostWord Complement64 = cost \"Complement64\"\njetCostWord And1 = cost \"And1\"\njetCostWord And8 = cost \"And8\"\njetCostWord And16 = cost \"And16\"\njetCostWord And32 = cost \"And32\"\njetCostWord And64 = cost \"And64\"\njetCostWord Or1 = cost \"Or1\"\njetCostWord Or8 = cost \"Or8\"\njetCostWord Or16 = cost \"Or16\"\njetCostWord Or32 = cost \"Or32\"\njetCostWord Or64 = cost \"Or64\"\njetCostWord Xor1 = cost \"Xor1\"\njetCostWord Xor8 = cost \"Xor8\"\njetCostWord Xor16 = cost \"Xor16\"\njetCostWord Xor32 = cost \"Xor32\"\njetCostWord Xor64 = cost \"Xor64\"\njetCostWord Maj1 = cost \"Maj1\"\njetCostWord Maj8 = cost \"Maj8\"\njetCostWord Maj16 = cost \"Maj16\"\njetCostWord Maj32 = cost \"Maj32\"\njetCostWord Maj64 = cost \"Maj64\"\njetCostWord XorXor1 = cost \"XorXor1\"\njetCostWord XorXor8 = cost \"XorXor8\"\njetCostWord XorXor16 = cost \"XorXor16\"\njetCostWord XorXor32 = cost \"XorXor32\"\njetCostWord XorXor64 = cost \"XorXor64\"\njetCostWord Ch1 = cost \"Ch1\"\njetCostWord Ch8 = cost \"Ch8\"\njetCostWord Ch16 = cost \"Ch16\"\njetCostWord Ch32 = cost \"Ch32\"\njetCostWord Ch64 = cost \"Ch64\"\njetCostWord Some1 = cost \"Some1\"\njetCostWord Some8 = cost \"Some8\"\njetCostWord Some16 = cost \"Some16\"\njetCostWord Some32 = cost \"Some32\"\njetCostWord Some64 = cost \"Some64\"\njetCostWord All8 = cost \"All8\"\njetCostWord All16 = cost \"All16\"\njetCostWord All32 = cost \"All32\"\njetCostWord All64 = cost \"All64\"\njetCostWord Eq1 = cost \"Eq1\"\njetCostWord Eq8 = cost \"Eq8\"\njetCostWord Eq16 = cost \"Eq16\"\njetCostWord Eq32 = cost \"Eq32\"\njetCostWord Eq64 = cost \"Eq64\"\njetCostWord Eq256 = cost \"Eq256\"\njetCostWord FullLeftShift8_1 = cost \"FullLeftShift8_1\"\njetCostWord FullLeftShift8_2 = cost \"FullLeftShift8_2\"\njetCostWord FullLeftShift8_4 = cost \"FullLeftShift8_4\"\njetCostWord FullLeftShift16_1 = cost \"FullLeftShift16_1\"\njetCostWord FullLeftShift16_2 = cost \"FullLeftShift16_2\"\njetCostWord FullLeftShift16_4 = cost \"FullLeftShift16_4\"\njetCostWord FullLeftShift16_8 = cost \"FullLeftShift16_8\"\njetCostWord FullLeftShift32_1 = cost \"FullLeftShift32_1\"\njetCostWord FullLeftShift32_2 = cost \"FullLeftShift32_2\"\njetCostWord FullLeftShift32_4 = cost \"FullLeftShift32_4\"\njetCostWord FullLeftShift32_8 = cost \"FullLeftShift32_8\"\njetCostWord FullLeftShift32_16 = cost \"FullLeftShift32_16\"\njetCostWord FullLeftShift64_1 = cost \"FullLeftShift64_1\"\njetCostWord FullLeftShift64_2 = cost \"FullLeftShift64_2\"\njetCostWord FullLeftShift64_4 = cost \"FullLeftShift64_4\"\njetCostWord FullLeftShift64_8 = cost \"FullLeftShift64_8\"\njetCostWord FullLeftShift64_16 = cost \"FullLeftShift64_16\"\njetCostWord FullLeftShift64_32 = cost \"FullLeftShift64_32\"\njetCostWord FullRightShift8_1 = cost \"FullRightShift8_1\"\njetCostWord FullRightShift8_2 = cost \"FullRightShift8_2\"\njetCostWord FullRightShift8_4 = cost \"FullRightShift8_4\"\njetCostWord FullRightShift16_1 = cost \"FullRightShift16_1\"\njetCostWord FullRightShift16_2 = cost \"FullRightShift16_2\"\njetCostWord FullRightShift16_4 = cost \"FullRightShift16_4\"\njetCostWord FullRightShift16_8 = cost \"FullRightShift16_8\"\njetCostWord FullRightShift32_1 = cost \"FullRightShift32_1\"\njetCostWord FullRightShift32_2 = cost \"FullRightShift32_2\"\njetCostWord FullRightShift32_4 = cost \"FullRightShift32_4\"\njetCostWord FullRightShift32_8 = cost \"FullRightShift32_8\"\njetCostWord FullRightShift32_16 = cost \"FullRightShift32_16\"\njetCostWord FullRightShift64_1 = cost \"FullRightShift64_1\"\njetCostWord FullRightShift64_2 = cost \"FullRightShift64_2\"\njetCostWord FullRightShift64_4 = cost \"FullRightShift64_4\"\njetCostWord FullRightShift64_8 = cost \"FullRightShift64_8\"\njetCostWord FullRightShift64_16 = cost \"FullRightShift64_16\"\njetCostWord FullRightShift64_32 = cost \"FullRightShift64_32\"\njetCostWord Leftmost8_1 = cost \"Leftmost8_1\"\njetCostWord Leftmost8_2 = cost \"Leftmost8_2\"\njetCostWord Leftmost8_4 = cost \"Leftmost8_4\"\njetCostWord Leftmost16_1 = cost \"Leftmost16_1\"\njetCostWord Leftmost16_2 = cost \"Leftmost16_2\"\njetCostWord Leftmost16_4 = cost \"Leftmost16_4\"\njetCostWord Leftmost16_8 = cost \"Leftmost16_8\"\njetCostWord Leftmost32_1 = cost \"Leftmost32_1\"\njetCostWord Leftmost32_2 = cost \"Leftmost32_2\"\njetCostWord Leftmost32_4 = cost \"Leftmost32_4\"\njetCostWord Leftmost32_8 = cost \"Leftmost32_8\"\njetCostWord Leftmost32_16 = cost \"Leftmost32_16\"\njetCostWord Leftmost64_1 = cost \"Leftmost64_1\"\njetCostWord Leftmost64_2 = cost \"Leftmost64_2\"\njetCostWord Leftmost64_4 = cost \"Leftmost64_4\"\njetCostWord Leftmost64_8 = cost \"Leftmost64_8\"\njetCostWord Leftmost64_16 = cost \"Leftmost64_16\"\njetCostWord Leftmost64_32 = cost \"Leftmost64_32\"\njetCostWord Rightmost8_1 = cost \"Rightmost8_1\"\njetCostWord Rightmost8_2 = cost \"Rightmost8_2\"\njetCostWord Rightmost8_4 = cost \"Rightmost8_4\"\njetCostWord Rightmost16_1 = cost \"Rightmost16_1\"\njetCostWord Rightmost16_2 = cost \"Rightmost16_2\"\njetCostWord Rightmost16_4 = cost \"Rightmost16_4\"\njetCostWord Rightmost16_8 = cost \"Rightmost16_8\"\njetCostWord Rightmost32_1 = cost \"Rightmost32_1\"\njetCostWord Rightmost32_2 = cost \"Rightmost32_2\"\njetCostWord Rightmost32_4 = cost \"Rightmost32_4\"\njetCostWord Rightmost32_8 = cost \"Rightmost32_8\"\njetCostWord Rightmost32_16 = cost \"Rightmost32_16\"\njetCostWord Rightmost64_1 = cost \"Rightmost64_1\"\njetCostWord Rightmost64_2 = cost \"Rightmost64_2\"\njetCostWord Rightmost64_4 = cost \"Rightmost64_4\"\njetCostWord Rightmost64_8 = cost \"Rightmost64_8\"\njetCostWord Rightmost64_16 = cost \"Rightmost64_16\"\njetCostWord Rightmost64_32 = cost \"Rightmost64_32\"\njetCostWord LeftPadLow1_8 = cost \"LeftPadLow1_8\"\njetCostWord LeftPadLow1_16 = cost \"LeftPadLow1_16\"\njetCostWord LeftPadLow8_16 = cost \"LeftPadLow8_16\"\njetCostWord LeftPadLow1_32 = cost \"LeftPadLow1_32\"\njetCostWord LeftPadLow8_32 = cost \"LeftPadLow8_32\"\njetCostWord LeftPadLow16_32 = cost \"LeftPadLow16_32\"\njetCostWord LeftPadLow1_64 = cost \"LeftPadLow1_64\"\njetCostWord LeftPadLow8_64 = cost \"LeftPadLow8_64\"\njetCostWord LeftPadLow16_64 = cost \"LeftPadLow16_64\"\njetCostWord LeftPadLow32_64 = cost \"LeftPadLow32_64\"\njetCostWord LeftPadHigh1_8 = cost \"LeftPadHigh1_8\"\njetCostWord LeftPadHigh1_16 = cost \"LeftPadHigh1_16\"\njetCostWord LeftPadHigh8_16 = cost \"LeftPadHigh8_16\"\njetCostWord LeftPadHigh1_32 = cost \"LeftPadHigh1_32\"\njetCostWord LeftPadHigh8_32 = cost \"LeftPadHigh8_32\"\njetCostWord LeftPadHigh16_32 = cost \"LeftPadHigh16_32\"\njetCostWord LeftPadHigh1_64 = cost \"LeftPadHigh1_64\"\njetCostWord LeftPadHigh8_64 = cost \"LeftPadHigh8_64\"\njetCostWord LeftPadHigh16_64 = cost \"LeftPadHigh16_64\"\njetCostWord LeftPadHigh32_64 = cost \"LeftPadHigh32_64\"\njetCostWord LeftExtend1_8 = cost \"LeftExtend1_8\"\njetCostWord LeftExtend1_16 = cost \"LeftExtend1_16\"\njetCostWord LeftExtend8_16 = cost \"LeftExtend8_16\"\njetCostWord LeftExtend1_32 = cost \"LeftExtend1_32\"\njetCostWord LeftExtend8_32 = cost \"LeftExtend8_32\"\njetCostWord LeftExtend16_32 = cost \"LeftExtend16_32\"\njetCostWord LeftExtend1_64 = cost \"LeftExtend1_64\"\njetCostWord LeftExtend8_64 = cost \"LeftExtend8_64\"\njetCostWord LeftExtend16_64 = cost \"LeftExtend16_64\"\njetCostWord LeftExtend32_64 = cost \"LeftExtend32_64\"\njetCostWord RightPadLow1_8 = cost \"RightPadLow1_8\"\njetCostWord RightPadLow1_16 = cost \"RightPadLow1_16\"\njetCostWord RightPadLow8_16 = cost \"RightPadLow8_16\"\njetCostWord RightPadLow1_32 = cost \"RightPadLow1_32\"\njetCostWord RightPadLow8_32 = cost \"RightPadLow8_32\"\njetCostWord RightPadLow16_32 = cost \"RightPadLow16_32\"\njetCostWord RightPadLow1_64 = cost \"RightPadLow1_64\"\njetCostWord RightPadLow8_64 = cost \"RightPadLow8_64\"\njetCostWord RightPadLow16_64 = cost \"RightPadLow16_64\"\njetCostWord RightPadLow32_64 = cost \"RightPadLow32_64\"\njetCostWord RightPadHigh1_8 = cost \"RightPadHigh1_8\"\njetCostWord RightPadHigh1_16 = cost \"RightPadHigh1_16\"\njetCostWord RightPadHigh8_16 = cost \"RightPadHigh8_16\"\njetCostWord RightPadHigh1_32 = cost \"RightPadHigh1_32\"\njetCostWord RightPadHigh8_32 = cost \"RightPadHigh8_32\"\njetCostWord RightPadHigh16_32 = cost \"RightPadHigh16_32\"\njetCostWord RightPadHigh1_64 = cost \"RightPadHigh1_64\"\njetCostWord RightPadHigh8_64 = cost \"RightPadHigh8_64\"\njetCostWord RightPadHigh16_64 = cost \"RightPadHigh16_64\"\njetCostWord RightPadHigh32_64 = cost \"RightPadHigh32_64\"\njetCostWord RightExtend8_16 = cost \"RightExtend8_16\"\njetCostWord RightExtend8_32 = cost \"RightExtend8_32\"\njetCostWord RightExtend16_32 = cost \"RightExtend16_32\"\njetCostWord RightExtend8_64 = cost \"RightExtend8_64\"\njetCostWord RightExtend16_64 = cost \"RightExtend16_64\"\njetCostWord RightExtend32_64 = cost \"RightExtend32_64\"\njetCostWord LeftShiftWith8 = cost \"LeftShiftWith8\"\njetCostWord LeftShiftWith16 = cost \"LeftShiftWith16\"\njetCostWord LeftShiftWith32 = cost \"LeftShiftWith32\"\njetCostWord LeftShiftWith64 = cost \"LeftShiftWith64\"\njetCostWord LeftShift8 = cost \"LeftShift8\"\njetCostWord LeftShift16 = cost \"LeftShift16\"\njetCostWord LeftShift32 = cost \"LeftShift32\"\njetCostWord LeftShift64 = cost \"LeftShift64\"\njetCostWord RightShiftWith8 = cost \"RightShiftWith8\"\njetCostWord RightShiftWith16 = cost \"RightShiftWith16\"\njetCostWord RightShiftWith32 = cost \"RightShiftWith32\"\njetCostWord RightShiftWith64 = cost \"RightShiftWith64\"\njetCostWord RightShift8 = cost \"RightShift8\"\njetCostWord RightShift16 = cost \"RightShift16\"\njetCostWord RightShift32 = cost \"RightShift32\"\njetCostWord RightShift64 = cost \"RightShift64\"\njetCostWord LeftRotate8 = cost \"LeftRotate8\"\njetCostWord LeftRotate16 = cost \"LeftRotate16\"\njetCostWord LeftRotate32 = cost \"LeftRotate32\"\njetCostWord LeftRotate64 = cost \"LeftRotate64\"\njetCostWord RightRotate8 = cost \"RightRotate8\"\njetCostWord RightRotate16 = cost \"RightRotate16\"\njetCostWord RightRotate32 = cost \"RightRotate32\"\njetCostWord RightRotate64 = cost \"RightRotate64\"\n\njetCostArith :: ArithJet a b -> Weight\njetCostArith One8 = cost \"One8\"\njetCostArith One16 = cost \"One16\"\njetCostArith One32 = cost \"One32\"\njetCostArith One64 = cost \"One64\"\njetCostArith FullAdd8 = cost \"FullAdd8\"\njetCostArith FullAdd16 = cost \"FullAdd16\"\njetCostArith FullAdd32 = cost \"FullAdd32\"\njetCostArith FullAdd64 = cost \"FullAdd64\"\njetCostArith Add8 = cost \"Add8\"\njetCostArith Add16 = cost \"Add16\"\njetCostArith Add32 = cost \"Add32\"\njetCostArith Add64 = cost \"Add64\"\njetCostArith FullIncrement8 = cost \"FullIncrement8\"\njetCostArith FullIncrement16 = cost \"FullIncrement16\"\njetCostArith FullIncrement32 = cost \"FullIncrement32\"\njetCostArith FullIncrement64 = cost \"FullIncrement64\"\njetCostArith Increment8 = cost \"Increment8\"\njetCostArith Increment16 = cost \"Increment16\"\njetCostArith Increment32 = cost \"Increment32\"\njetCostArith Increment64 = cost \"Increment64\"\njetCostArith FullSubtract8 = cost \"FullSubtract8\"\njetCostArith FullSubtract16 = cost \"FullSubtract16\"\njetCostArith FullSubtract32 = cost \"FullSubtract32\"\njetCostArith FullSubtract64 = cost \"FullSubtract64\"\njetCostArith Subtract8 = cost \"Subtract8\"\njetCostArith Subtract16 = cost \"Subtract16\"\njetCostArith Subtract32 = cost \"Subtract32\"\njetCostArith Subtract64 = cost \"Subtract64\"\njetCostArith Negate8 = cost \"Negate8\"\njetCostArith Negate16 = cost \"Negate16\"\njetCostArith Negate32 = cost \"Negate32\"\njetCostArith Negate64 = cost \"Negate64\"\njetCostArith FullDecrement8 = cost \"FullDecrement8\"\njetCostArith FullDecrement16 = cost \"FullDecrement16\"\njetCostArith FullDecrement32 = cost \"FullDecrement32\"\njetCostArith FullDecrement64 = cost \"FullDecrement64\"\njetCostArith Decrement8 = cost \"Decrement8\"\njetCostArith Decrement16 = cost \"Decrement16\"\njetCostArith Decrement32 = cost \"Decrement32\"\njetCostArith Decrement64 = cost \"Decrement64\"\njetCostArith Multiply8 = cost \"Multiply8\"\njetCostArith Multiply16 = cost \"Multiply16\"\njetCostArith Multiply32 = cost \"Multiply32\"\njetCostArith Multiply64 = cost \"Multiply64\"\njetCostArith FullMultiply8 = cost \"FullMultiply8\"\njetCostArith FullMultiply16 = cost \"FullMultiply16\"\njetCostArith FullMultiply32 = cost \"FullMultiply32\"\njetCostArith FullMultiply64 = cost \"FullMultiply64\"\njetCostArith IsZero8 = cost \"IsZero8\"\njetCostArith IsZero16 = cost \"IsZero16\"\njetCostArith IsZero32 = cost \"IsZero32\"\njetCostArith IsZero64 = cost \"IsZero64\"\njetCostArith IsOne8 = cost \"IsOne8\"\njetCostArith IsOne16 = cost \"IsOne16\"\njetCostArith IsOne32 = cost \"IsOne32\"\njetCostArith IsOne64 = cost \"IsOne64\"\njetCostArith Le8 = cost \"Le8\"\njetCostArith Le16 = cost \"Le16\"\njetCostArith Le32 = cost \"Le32\"\njetCostArith Le64 = cost \"Le64\"\njetCostArith Lt8 = cost \"Lt8\"\njetCostArith Lt16 = cost \"Lt16\"\njetCostArith Lt32 = cost \"Lt32\"\njetCostArith Lt64 = cost \"Lt64\"\njetCostArith Min8 = cost \"Min8\"\njetCostArith Min16 = cost \"Min16\"\njetCostArith Min32 = cost \"Min32\"\njetCostArith Min64 = cost \"Min64\"\njetCostArith Max8 = cost \"Max8\"\njetCostArith Max16 = cost \"Max16\"\njetCostArith Max32 = cost \"Max32\"\njetCostArith Max64 = cost \"Max64\"\njetCostArith Median8 = cost \"Median8\"\njetCostArith Median16 = cost \"Median16\"\njetCostArith Median32 = cost \"Median32\"\njetCostArith Median64 = cost \"Median64\"\njetCostArith DivMod128_64 = cost \"DivMod128_64\"\njetCostArith DivMod8 = cost \"DivMod8\"\njetCostArith DivMod16 = cost \"DivMod16\"\njetCostArith DivMod32 = cost \"DivMod32\"\njetCostArith DivMod64 = cost \"DivMod64\"\njetCostArith Divide8 = cost \"Divide8\"\njetCostArith Divide16 = cost \"Divide16\"\njetCostArith Divide32 = cost \"Divide32\"\njetCostArith Divide64 = cost \"Divide64\"\njetCostArith Modulo8 = cost \"Modulo8\"\njetCostArith Modulo16 = cost \"Modulo16\"\njetCostArith Modulo32 = cost \"Modulo32\"\njetCostArith Modulo64 = cost \"Modulo64\"\njetCostArith Divides8 = cost \"Divides8\"\njetCostArith Divides16 = cost \"Divides16\"\njetCostArith Divides32 = cost \"Divides32\"\njetCostArith Divides64 = cost \"Divides64\"\n\njetCostHash :: HashJet a b -> Weight\njetCostHash Sha256Block = cost \"Sha256Block\"\njetCostHash Sha256Iv = cost \"Sha256Iv\"\njetCostHash Sha256Ctx8Add1 = cost \"Sha256Ctx8Add1\"\njetCostHash Sha256Ctx8Add2 = cost \"Sha256Ctx8Add2\"\njetCostHash Sha256Ctx8Add4 = cost \"Sha256Ctx8Add4\"\njetCostHash Sha256Ctx8Add8 = cost \"Sha256Ctx8Add8\"\njetCostHash Sha256Ctx8Add16 = cost \"Sha256Ctx8Add16\"\njetCostHash Sha256Ctx8Add32 = cost \"Sha256Ctx8Add32\"\njetCostHash Sha256Ctx8Add64 = cost \"Sha256Ctx8Add64\"\njetCostHash Sha256Ctx8Add128 = cost \"Sha256Ctx8Add128\"\njetCostHash Sha256Ctx8Add256 = cost \"Sha256Ctx8Add256\"\njetCostHash Sha256Ctx8Add512 = cost \"Sha256Ctx8Add512\"\njetCostHash Sha256Ctx8AddBuffer511 = cost \"Sha256Ctx8AddBuffer511\"\njetCostHash Sha256Ctx8Finalize = cost \"Sha256Ctx8Finalize\"\njetCostHash Sha256Ctx8Init = cost \"Sha256Ctx8Init\"\n\njetCostSecp256k1 :: Secp256k1Jet a b -> Weight\njetCostSecp256k1 FeNormalize = cost \"FeNormalize\"\njetCostSecp256k1 FeNegate = cost \"FeNegate\"\njetCostSecp256k1 FeAdd = cost \"FeAdd\"\njetCostSecp256k1 FeSquare = cost \"FeSquare\"\njetCostSecp256k1 FeMultiply = cost \"FeMultiply\"\njetCostSecp256k1 FeMultiplyBeta = cost \"FeMultiplyBeta\"\njetCostSecp256k1 FeInvert = cost \"FeInvert\"\njetCostSecp256k1 FeSquareRoot = cost \"FeSquareRoot\"\njetCostSecp256k1 FeIsZero = cost \"FeIsZero\"\njetCostSecp256k1 FeIsOdd = cost \"FeIsOdd\"\njetCostSecp256k1 ScalarNormalize = cost \"ScalarNormalize\"\njetCostSecp256k1 ScalarNegate = cost \"ScalarNegate\"\njetCostSecp256k1 ScalarAdd = cost \"ScalarAdd\"\njetCostSecp256k1 ScalarSquare = cost \"ScalarSquare\"\njetCostSecp256k1 ScalarMultiply = cost \"ScalarMultiply\"\njetCostSecp256k1 ScalarMultiplyLambda = cost \"ScalarMultiplyLambda\"\njetCostSecp256k1 ScalarInvert = cost \"ScalarInvert\"\njetCostSecp256k1 ScalarIsZero = cost \"ScalarIsZero\"\njetCostSecp256k1 GejInfinity = cost \"GejInfinity\"\njetCostSecp256k1 GejNormalize = cost \"GejNormalize\"\njetCostSecp256k1 GejNegate = cost \"GejNegate\"\njetCostSecp256k1 GeNegate = cost \"GeNegate\"\njetCostSecp256k1 GejDouble = cost \"GejDouble\"\njetCostSecp256k1 GejAdd = cost \"GejAdd\"\njetCostSecp256k1 GejGeAddEx = cost \"GejGeAddEx\"\njetCostSecp256k1 GejGeAdd = cost \"GejGeAdd\"\njetCostSecp256k1 GejRescale = cost \"GejRescale\"\njetCostSecp256k1 GejIsInfinity = cost \"GejIsInfinity\"\njetCostSecp256k1 GejEquiv = cost \"GejEquiv\"\njetCostSecp256k1 GejGeEquiv = cost \"GejGeEquiv\"\njetCostSecp256k1 GejXEquiv = cost \"GejXEquiv\"\njetCostSecp256k1 GejYIsOdd = cost \"GejYIsOdd\"\njetCostSecp256k1 GejIsOnCurve = cost \"GejIsOnCurve\"\njetCostSecp256k1 GeIsOnCurve = cost \"GeIsOnCurve\"\njetCostSecp256k1 Generate = cost \"Generate\"\njetCostSecp256k1 Scale = cost \"Scale\"\njetCostSecp256k1 LinearCombination1 = cost \"LinearCombination1\"\njetCostSecp256k1 LinearVerify1 = cost \"LinearVerify1\"\njetCostSecp256k1 PointVerify1 = cost \"PointVerify1\"\njetCostSecp256k1 Decompress = cost \"Decompress\"\njetCostSecp256k1 Swu = cost \"Swu\"\njetCostSecp256k1 HashToCurve = cost \"HashToCurve\"\n\njetCostSignature :: SignatureJet a b -> Weight\njetCostSignature CheckSigVerify = cost \"CheckSigVerify\"\njetCostSignature Bip0340Verify = cost \"Bip0340Verify\"\n\njetCostBitcoin :: BitcoinJet a b -> Weight\njetCostBitcoin ParseLock = cost \"ParseLock\"\njetCostBitcoin ParseSequence = cost \"ParseSequence\"\njetCostBitcoin TapdataInit = cost \"TapdataInit\"\n\njetCostElements :: ElementsJet a b -> Weight\njetCostElements (SigHashJet x) = jetCostSigHash x\njetCostElements (TimeLockJet x) = jetCostTimeLock x\njetCostElements (IssuanceJet x) = jetCostIssuance x\njetCostElements (TransactionJet x) = jetCostTransaction x\n\njetCostSigHash :: SigHashJet a b -> Weight\njetCostSigHash SigAllHash = cost \"SigAllHash\"\njetCostSigHash TxHash = cost \"TxHash\"\njetCostSigHash TapEnvHash = cost \"TapEnvHash\"\njetCostSigHash OutputsHash = cost \"OutputsHash\"\njetCostSigHash InputsHash = cost \"InputsHash\"\njetCostSigHash IssuancesHash = cost \"IssuancesHash\"\njetCostSigHash InputUtxosHash = cost \"InputUtxosHash\"\njetCostSigHash OutputHash = cost \"OutputHash\"\njetCostSigHash OutputAmountsHash = cost \"OutputAmountsHash\"\njetCostSigHash OutputScriptsHash = cost \"OutputScriptsHash\"\njetCostSigHash OutputNoncesHash = cost \"OutputNoncesHash\"\njetCostSigHash OutputRangeProofsHash = cost \"OutputRangeProofsHash\"\njetCostSigHash OutputSurjectionProofsHash = cost \"OutputSurjectionProofsHash\"\njetCostSigHash InputHash = cost \"InputHash\"\njetCostSigHash InputOutpointsHash = cost \"InputOutpointsHash\"\njetCostSigHash InputSequencesHash = cost \"InputSequencesHash\"\njetCostSigHash InputAnnexesHash = cost \"InputAnnexesHash\"\njetCostSigHash InputScriptSigsHash = cost \"InputScriptSigsHash\"\njetCostSigHash IssuanceHash = cost \"IssuanceHash\"\njetCostSigHash IssuanceAssetAmountsHash = cost \"IssuanceAssetAmountsHash\"\njetCostSigHash IssuanceTokenAmountsHash = cost \"IssuanceTokenAmountsHash\"\njetCostSigHash IssuanceRangeProofsHash = cost \"IssuanceRangeProofsHash\"\njetCostSigHash IssuanceBlindingEntropyHash = cost \"IssuanceBlindingEntropyHash\"\njetCostSigHash InputUtxoHash = cost \"InputUtxoHash\"\njetCostSigHash InputAmountsHash = cost \"InputAmountsHash\"\njetCostSigHash InputScriptsHash = cost \"InputScriptsHash\"\njetCostSigHash TapleafHash = cost \"TapleafHash\"\njetCostSigHash TappathHash = cost \"TappathHash\"\njetCostSigHash OutpointHash = cost \"OutpointHash\"\njetCostSigHash AssetAmountHash = cost \"AssetAmountHash\"\njetCostSigHash NonceHash = cost \"NonceHash\"\njetCostSigHash AnnexHash = cost \"AnnexHash\"\njetCostSigHash BuildTapleafSimplicity = cost \"BuildTapleafSimplicity\"\njetCostSigHash BuildTapbranch = cost \"BuildTapbranch\"\njetCostSigHash BuildTaptweak = cost \"BuildTaptweak\"\n\njetCostTimeLock :: TimeLockJet a b -> Weight\njetCostTimeLock CheckLockHeight = cost \"CheckLockHeight\"\njetCostTimeLock CheckLockTime = cost \"CheckLockTime\"\njetCostTimeLock BrokenDoNotUseCheckLockDistance = cost \"CheckLockDistance\"\njetCostTimeLock BrokenDoNotUseCheckLockDuration = cost \"CheckLockDuration\"\njetCostTimeLock TxLockHeight = cost \"TxLockHeight\"\njetCostTimeLock TxLockTime = cost \"TxLockTime\"\njetCostTimeLock BrokenDoNotUseTxLockDistance = cost \"TxLockDistance\"\njetCostTimeLock BrokenDoNotUseTxLockDuration = cost \"TxLockDuration\"\njetCostTimeLock TxIsFinal = cost \"TxIsFinal\"\n\njetCostIssuance :: IssuanceJet a b -> Weight\njetCostIssuance Issuance = cost \"Issuance\"\njetCostIssuance IssuanceAsset = cost \"IssuanceAsset\"\njetCostIssuance IssuanceToken = cost \"IssuanceToken\"\njetCostIssuance IssuanceEntropy = cost \"IssuanceEntropy\"\njetCostIssuance CalculateIssuanceEntropy = cost \"CalculateIssuanceEntropy\"\njetCostIssuance CalculateAsset = cost \"CalculateAsset\"\njetCostIssuance CalculateExplicitToken = cost \"CalculateExplicitToken\"\njetCostIssuance CalculateConfidentialToken = cost \"CalculateConfidentialToken\"\njetCostIssuance LbtcAsset = cost \"LbtcAsset\"\n\njetCostTransaction :: TransactionJet a b -> Weight\njetCostTransaction ScriptCMR = cost \"ScriptCMR\"\njetCostTransaction InternalKey = cost \"InternalKey\"\njetCostTransaction CurrentIndex = cost \"CurrentIndex\"\njetCostTransaction NumInputs = cost \"NumInputs\"\njetCostTransaction NumOutputs = cost \"NumOutputs\"\njetCostTransaction LockTime = cost \"LockTime\"\njetCostTransaction OutputAsset = cost \"OutputAsset\"\njetCostTransaction OutputAmount = cost \"OutputAmount\"\njetCostTransaction OutputNonce = cost \"OutputNonce\"\njetCostTransaction OutputScriptHash = cost \"OutputScriptHash\"\njetCostTransaction OutputNullDatum = cost \"OutputNullDatum\"\njetCostTransaction OutputIsFee = cost \"OutputIsFee\"\njetCostTransaction OutputSurjectionProof = cost \"OutputSurjectionProof\"\njetCostTransaction OutputRangeProof = cost \"OutputRangeProof\"\njetCostTransaction TotalFee = cost \"TotalFee\"\njetCostTransaction CurrentPegin = cost \"CurrentPegin\"\njetCostTransaction CurrentPrevOutpoint = cost \"CurrentPrevOutpoint\"\njetCostTransaction CurrentAsset = cost \"CurrentAsset\"\njetCostTransaction CurrentAmount = cost \"CurrentAmount\"\njetCostTransaction CurrentScriptHash = cost \"CurrentScriptHash\"\njetCostTransaction CurrentSequence = cost \"CurrentSequence\"\njetCostTransaction CurrentAnnexHash = cost \"CurrentAnnexHash\"\njetCostTransaction CurrentScriptSigHash = cost \"CurrentScriptSigHash\"\njetCostTransaction CurrentReissuanceBlinding = cost \"CurrentReissuanceBlinding\"\njetCostTransaction CurrentNewIssuanceContract = cost \"CurrentNewIssuanceContract\"\njetCostTransaction CurrentReissuanceEntropy = cost \"CurrentReissuanceEntropy\"\njetCostTransaction CurrentIssuanceAssetAmount = cost \"CurrentIssuanceAssetAmount\"\njetCostTransaction CurrentIssuanceTokenAmount = cost \"CurrentIssuanceTokenAmount\"\njetCostTransaction CurrentIssuanceAssetProof = cost \"CurrentIssuanceAssetProof\"\njetCostTransaction CurrentIssuanceTokenProof = cost \"CurrentIssuanceTokenProof\"\njetCostTransaction InputPegin = cost \"InputPegin\"\njetCostTransaction InputPrevOutpoint = cost \"InputPrevOutpoint\"\njetCostTransaction InputAsset = cost \"InputAsset\"\njetCostTransaction InputAmount = cost \"InputAmount\"\njetCostTransaction InputScriptHash = cost \"InputScriptHash\"\njetCostTransaction InputSequence = cost \"InputSequence\"\njetCostTransaction InputAnnexHash = cost \"InputAnnexHash\"\njetCostTransaction InputScriptSigHash = cost \"InputScriptSigHash\"\njetCostTransaction ReissuanceBlinding = cost \"ReissuanceBlinding\"\njetCostTransaction NewIssuanceContract = cost \"NewIssuanceContract\"\njetCostTransaction ReissuanceEntropy = cost \"ReissuanceEntropy\"\njetCostTransaction IssuanceAssetAmount = cost \"IssuanceAssetAmount\"\njetCostTransaction IssuanceTokenAmount = cost \"IssuanceTokenAmount\"\njetCostTransaction IssuanceAssetProof = cost \"IssuanceAssetProof\"\njetCostTransaction IssuanceTokenProof = cost \"IssuanceTokenProof\"\njetCostTransaction TapleafVersion = cost \"TapleafVersion\"\njetCostTransaction Tappath = cost \"Tappath\"\njetCostTransaction Version = cost \"Version\"\njetCostTransaction GenesisBlockHash = cost \"GenesisBlockHash\"\njetCostTransaction TransactionId = cost \"TransactionId\"\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Programs/Issuance/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Programs.Elements.lib' library instance into individual functions.\n-- Users should prefer to use 'Simplicity.Programs.Elements.mkLib' in order to share library dependencies.\n-- This module is provided mostly for testing purposes.\nmodule Simplicity.Elements.Programs.Issuance.Lib\n  ( issuance, issuanceEntropy, issuanceAsset, issuanceToken\n  , Issuance.Bit, Issuance.Hash\n  ) where\n\nimport qualified Simplicity.Elements.Programs.Issuance as Issuance\n\nissuance = Issuance.issuance Issuance.lib\nissuanceEntropy = Issuance.issuanceEntropy Issuance.lib\nissuanceAsset = Issuance.issuanceAsset Issuance.lib\nissuanceToken = Issuance.issuanceToken Issuance.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Programs/Issuance.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expressions that implement Issuance functions from \"Simplicity.Elements.DataTypes\".\nmodule Simplicity.Elements.Programs.Issuance\n  ( Lib(Lib), mkLib\n  , issuance, issuanceEntropy, issuanceAsset, issuanceToken\n  -- * Example instances\n  , lib\n  -- * Reexports\n  , Bit, Hash\n  ) where\n\nimport Prelude hiding (Word, all, drop, max, not, take)\n\nimport Simplicity.Functor\nimport Simplicity.Elements.Primitive\nimport Simplicity.Elements.Term hiding (one)\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport qualified Simplicity.Programs.Elements as Elements\nimport Simplicity.Programs.Elements hiding (Lib(Lib), mkLib, lib)\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Word\n\n-- | A collection of Simplicity expressions for Issuances.\n-- Use 'mkLib' to construct an instance of this library.\ndata Lib term =\n Lib\n  { -- | Returns a False value if the inputs issuance is a new issuance.\n    -- Returns a True value if the input's issuance is a re-issuance.\n    -- Returns a 'Just Nothing' value if the input has no issuance.\n    -- Returns a Nothing value of the input index is out of range.\n    issuance :: term Word32 (S (S Bit))\n    -- | Computes the entropy of a new issuance or returns the entropy of a reissuance.\n    -- Returns a 'Just Nothing' value if the input has no issuance.\n    -- Returns a Nothing value of the input index is out of range.\n  , issuanceEntropy :: term Word32 (S (S Hash))\n    -- | Computes the asset ID of an issuance.\n    -- Returns a 'Just Nothing' value if the input has no issuance.\n    -- Returns a Nothing value of the input index is out of range.\n  , issuanceAsset :: term Word32 (S (S Hash))\n    -- | Computes the reissuance token ID of an issuance.\n    -- Returns a 'Just Nothing' value if the input has no issuance.\n    -- Returns a Nothing value of the input index is out of range.\n  , issuanceToken :: term Word32 (S (S Hash))\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    {\n      issuance = m issuance\n    , issuanceEntropy = m issuanceEntropy\n    , issuanceAsset = m issuanceAsset\n    , issuanceToken = m issuanceToken\n    }\n\n-- | Build the Issuance 'Lib' library from its dependencies.\nmkLib :: forall term. (Core term, Primitive term) => Elements.Lib term -- ^ \"Simplicity.Programs.Elements\"\n                                                  -> Lib term\nmkLib Elements.Lib{..} = lib\n where\n  lib@Lib{..} = Lib {\n    issuance = primitive ReissuanceEntropy &&& primitive NewIssuanceContract\n           >>> match (injl unit)\n                     (flip match (injr (injr true))\n                     (drop (copair (injl unit) (copair (injr (injl unit)) (injr (injr false))))))\n\n  , issuanceEntropy = primitive ReissuanceEntropy &&& (primitive NewIssuanceContract &&& primitive InputPrevOutpoint)\n                  >>> match (injl unit)\n                      (flip match (take (injr (injr iden)))\n                       (drop (match (injl unit) (match (injr (injl unit)) (ih &&& oh\n                      >>> match (injl unit) (injr (injr calculateIssuanceEntropy)))))))\n\n  , issuanceAsset = issuanceEntropy >>> copair (injl unit) (injr (copair (injl unit) (injr calculateAsset)))\n\n  , issuanceToken = issuanceEntropy &&& primitive IssuanceAssetAmount\n                >>> match (injl unit) (match (injr (injl unit)) (ih &&& oh\n                >>> match (injl unit) (match (injl unit) (injr (injr\n                      (match (drop calculateConfidentialToken) (drop calculateExplicitToken)))))))\n  }\n\n-- | An instance of the Issuance 'Lib' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLib' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlib :: (Core term, Primitive term) => Lib term\nlib = mkLib Elements.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Programs/SigHash/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Elements.Programs.SigHash.lib' library instance into individual functions.\n-- Users should prefer to use 'Simplicity.Elements.Programs.SigHash.mkLib' in order to share library dependencies.\n-- This module is provided mostly for testing purposes.\nmodule Simplicity.Elements.Programs.SigHash.Lib\n ( outputAmountsHash, outputNoncesHash, outputScriptsHash\n , outputRangeProofsHash, outputSurjectionProofsHash, outputsHash, outputHash\n , inputAmountsHash, inputScriptsHash, inputUtxosHash, inputUtxoHash\n , inputOutpointsHash, inputSequencesHash, inputAnnexesHash, inputScriptSigsHash, inputsHash, inputHash\n , issuanceAssetAmountsHash, issuanceTokenAmountsHash, issuanceRangeProofsHash, issuanceBlindingEntropyHash, issuancesHash, issuanceHash\n , txHash\n , tapleafHash, tappathHash, tapEnvHash\n , sigAllHash\n ) where\n\nimport qualified Simplicity.Elements.Programs.SigHash as SigHash\n\noutputAmountsHash = SigHash.outputAmountsHash SigHash.lib\noutputNoncesHash = SigHash.outputNoncesHash SigHash.lib\noutputScriptsHash = SigHash.outputScriptsHash SigHash.lib\noutputRangeProofsHash = SigHash.outputRangeProofsHash SigHash.lib\noutputSurjectionProofsHash = SigHash.outputSurjectionProofsHash SigHash.lib\noutputsHash = SigHash.outputsHash SigHash.lib\noutputHash = SigHash.outputHash SigHash.lib\ninputAmountsHash = SigHash.inputAmountsHash SigHash.lib\ninputScriptsHash = SigHash.inputScriptsHash SigHash.lib\ninputUtxosHash = SigHash.inputUtxosHash SigHash.lib\ninputUtxoHash = SigHash.inputUtxoHash SigHash.lib\ninputOutpointsHash = SigHash.inputOutpointsHash SigHash.lib\ninputSequencesHash = SigHash.inputSequencesHash SigHash.lib\ninputAnnexesHash = SigHash.inputAnnexesHash SigHash.lib\ninputsHash = SigHash.inputsHash SigHash.lib\ninputHash = SigHash.inputHash SigHash.lib\nissuanceAssetAmountsHash = SigHash.issuanceAssetAmountsHash SigHash.lib\nissuanceTokenAmountsHash = SigHash.issuanceTokenAmountsHash SigHash.lib\nissuanceRangeProofsHash = SigHash.issuanceRangeProofsHash SigHash.lib\nissuanceBlindingEntropyHash = SigHash.issuanceBlindingEntropyHash SigHash.lib\nissuancesHash = SigHash.issuancesHash SigHash.lib\nissuanceHash = SigHash.issuanceHash SigHash.lib\ninputScriptSigsHash = SigHash.inputScriptSigsHash SigHash.lib\ntxHash = SigHash.txHash SigHash.lib\ntapleafHash = SigHash.tapleafHash SigHash.lib\ntappathHash = SigHash.tappathHash SigHash.lib\ntapEnvHash = SigHash.tapEnvHash SigHash.lib\nsigAllHash = SigHash.sigAllHash SigHash.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Programs/SigHash.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expressions that implement timelock functions from \"Simplicity.Elements.DataTypes\".\nmodule Simplicity.Elements.Programs.SigHash\n ( Lib(Lib), mkLib\n , outputAmountsHash, outputNoncesHash, outputScriptsHash\n , outputRangeProofsHash, outputSurjectionProofsHash, outputsHash, outputHash\n , inputAmountsHash, inputScriptsHash, inputUtxosHash, inputUtxoHash\n , inputOutpointsHash, inputSequencesHash, inputAnnexesHash, inputScriptSigsHash, inputsHash, inputHash\n , issuanceAssetAmountsHash, issuanceTokenAmountsHash, issuanceRangeProofsHash, issuanceBlindingEntropyHash, issuancesHash, issuanceHash\n , txHash\n , tapleafHash, tappathHash, tapEnvHash\n , sigAllHash\n -- * Example instances\n , lib\n ) where\n\nimport Prelude hiding (Word, all, drop, max, not, take)\nimport Data.String (fromString)\n\nimport Simplicity.Digest\nimport Simplicity.Elements.Primitive\nimport Simplicity.Elements.Term hiding (one)\nimport Simplicity.Functor\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Word\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport Simplicity.Programs.Sha256 (Ctx8)\nimport Simplicity.Elements.Programs.Issuance.Lib\nimport qualified Simplicity.Elements.Programs.Transaction as Transaction\nimport Simplicity.Programs.Elements.Lib\n\ndata Lib term =\n Lib\n  { -- | A hash of all 'Transaction.outputAmount's.\n    outputAmountsHash :: term () Word256\n    -- | A hash of all 'OutputNonce's.\n  , outputNoncesHash :: term () Word256\n    -- | A hash of all 'OutputScriptHash's.\n  , outputScriptsHash :: term () Word256\n    -- | A hash of all 'OutputRangeProofHash's.\n  , outputRangeProofsHash :: term () Word256\n    -- | A hash of all 'OutputSurjectionProofHash's.\n  , outputSurjectionProofsHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'outputAmountsHash'\n    -- * 'outputNoncesHash'\n    -- * 'outputScriptsHash'\n    -- * 'outputRangeProofsHash'\n    --\n    -- Note that 'outputSurjectionProofsHash' is excluded.\n  , outputsHash :: term () Word256\n    -- | If the given output index exists, returns a hash of\n    --\n    -- * The serialization of the output's asset and amount fields.\n    -- * The serialization of the output's nonce field.\n    -- * A hash of the output's scriptPubKey.\n    -- * A hash of the output's range proof.\n    --\n    -- Note that output's surjection proof is excluded.\n  , outputHash :: term Word32 (S Word256)\n    -- | A hash of all 'Transaction.inputAmount's.\n  , inputAmountsHash :: term () Word256\n    -- | A hash of all 'InputScriptHash's.\n  , inputScriptsHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'inputAmountsHash'\n    -- * 'inputScriptsHash'\n  , inputUtxosHash :: term () Word256\n    -- | If the given input index exists, returns a hash of\n    --\n    -- * The serialization of the input UTXO's asset and amount fields.\n    -- * A hash of the input UTXO's scriptPubKey.\n  , inputUtxoHash :: term Word32 (S Word256)\n    -- | A hash of all 'InputPegin' and 'InputPrevOutpoint' pairs.\n  , inputOutpointsHash :: term () Word256\n    -- | A hash of all 'InputSequence's.\n  , inputSequencesHash :: term () Word256\n    -- | A hash of all 'InputAnnexHash's.\n  , inputAnnexesHash :: term () Word256\n    -- | A hash of all 'InputScriptSigHash's.\n  , inputScriptSigsHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'inputOutpointsHash'\n    -- * 'inputSequencesHash'\n    -- * 'inputAnnexesHash'\n    --\n    -- Note that 'InputScriptSigHash' is excluded.\n  , inputsHash :: term () Word256\n    -- | If the given input index exists, returns a hash of\n    --\n    -- * If the input is not a pegin, then the byte 0x00.\n    -- * If the input is a pegin, then the byte 0x01 followed by the parent chain's genesis hash.\n    -- * The input's serialized previous transaction id.\n    -- * The input's previous transaction index in big endian format.\n    -- * The input's sequence number in big endian format.\n    -- * If the input has no annex, or isn't a taproot spend, then the byte 0x00.\n    -- * If the input has an annex, then the byte 0x01 followed by a SHA256 hash of the annex.\n  , inputHash :: term Word32 (S Word256)\n    -- | A hash of 'issuanceAsset' and 'IssuanceAssetAmount' pairs as an asset-amount hash.\n    --\n    -- Note that \"null\" amount is hashed as if it were an explicit zero.\n    --\n    -- When an input has no issuance, a pair of zero bytes, @0x00 0x00@ are hashed.\n  , issuanceAssetAmountsHash :: term () Word256\n    -- | A hash of 'issuanceToken' and 'IssuanceAssetAmount' pairs as an asset-amount hash.\n    --\n    -- Note that \"null\" amount is hashed as if it were an explicit zero.\n    --\n    -- When an input has no issuance, a pair of zero bytes, @0x00 0x00@ are hashed.\n  , issuanceTokenAmountsHash :: term () Word256\n    -- | A hash of all 'IssuanceAssetProof' and 'IssuanceTokenProof' pairs.\n  , issuanceRangeProofsHash :: term () Word256\n    -- | A hash of all 'NewIssuanceContract', 'ReissuanceBlinding', 'ReissuanceBlinding' values.\n  , issuanceBlindingEntropyHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'issuanceAssetAmountsHash'\n    -- * 'issuanceTokenAmountsHash'\n    -- * 'issuanceRangeProofsHash'\n    -- * 'issuanceBlindingEntropyHash'\n  , issuancesHash :: term () Word256\n    -- | If the given input index exists, returns a hash of\n    --\n    -- 1. The asset issuance:\n    --\n    --     * If the input has no issuance then the two bytes 0x00 0x00.\n    --     * If the input has a new issuance then the byte 0x01 followed by a serialization of the calculated issued asset id,\n    --       followed by the serialization of the (possibly confidential) issued asset amount.\n    --     * If the input has a reissuance then the byte 0x01 followed by a serialization of the issued asset id,\n    --       followed by the serialization of the (possibly confidential) issued asset amount.\n    --\n    -- 2. The token issuance:\n    --\n    --     * If the input has no issuance then another two bytes 0x00 0x00.\n    --     * If the input has a new issuance then the byte 0x01 followed by a serialization of the calculated issued token id,\n    --       followed by the serialization of the (possibly confidential) issued token amount.\n    --     * If the input has a re-issuance then the byte 0x01 followed by a serialization of the issued token id,\n    --       followed by the serialization of the explicit 0 amount (i.e. 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 )\n    --\n    -- 3. The range proofs:\n    --\n    --     * A hash of the range proof of the input's issuance asset amount.\n    --     * A hash of the range proof of the input's issuance token amount.\n    --\n    --    (Note: in the case of no issuese these will both be a hash of the empty proof)\n    --\n    -- 4. The blinding entropy:\n    --\n    --     * If the input has no issuance then another 0x00 byte.\n    --     * If the input is a new issuance then the 0x01 byte followed by 32 0x00 bytes followed by the new issuance's contract hash field.\n    --     * If the input is a reissuance then the 0x01 byte followed by the reissuance's blinding nonce field followed by the reissuance's entropy field.\n  , issuanceHash :: term Word32 (S Word256)\n    -- | A hash of\n    --\n    -- * 'Version'\n    -- * 'LockTime'\n    -- * 'inputsHash'\n    -- * 'outputsHash'\n    -- * 'issuancesHash'\n    -- * 'outputSurjectionProofsHash'\n    -- * 'inputUtxosHash'\n  , txHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'TapleafVersion'\n    -- * 'ScriptCMR'\n  , tapleafHash :: term () Word256\n    -- | A hash of all 'Tappath's.\n  , tappathHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'tapleafHash'\n    -- * 'tappathHash'\n    -- * 'InternalKey'\n  , tapEnvHash :: term () Word256\n    -- | A hash of\n    --\n    -- * 'GenesisBlockHash' twice (This is effectively a tag.)\n    -- * 'txHash'\n    -- * 'tapEnvHash'\n    -- * 'CurrentIndex'\n  , sigAllHash :: term () Word256\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    { outputAmountsHash = m outputAmountsHash\n    , outputNoncesHash = m outputNoncesHash\n    , outputScriptsHash = m outputScriptsHash\n    , outputRangeProofsHash = m outputRangeProofsHash\n    , outputSurjectionProofsHash = m outputSurjectionProofsHash\n    , outputsHash = m outputsHash\n    , outputHash = m outputHash\n    , inputAmountsHash = m inputAmountsHash\n    , inputScriptsHash = m inputScriptsHash\n    , inputUtxosHash = m inputUtxosHash\n    , inputUtxoHash = m inputUtxoHash\n    , inputOutpointsHash = m inputOutpointsHash\n    , inputSequencesHash = m inputSequencesHash\n    , inputAnnexesHash = m inputAnnexesHash\n    , inputsHash = m inputsHash\n    , inputHash = m inputHash\n    , issuanceAssetAmountsHash = m issuanceAssetAmountsHash\n    , issuanceTokenAmountsHash = m issuanceTokenAmountsHash\n    , issuanceRangeProofsHash = m issuanceRangeProofsHash\n    , issuanceBlindingEntropyHash = m issuanceBlindingEntropyHash\n    , issuancesHash = m issuancesHash\n    , issuanceHash = m issuanceHash\n    , inputScriptSigsHash = m inputScriptSigsHash\n    , txHash = m txHash\n    , tapleafHash = m tapleafHash\n    , tappathHash = m tappathHash\n    , tapEnvHash = m tapEnvHash\n    , sigAllHash = m sigAllHash\n    }\n\nmkLib :: forall term. (Assert term, Primitive term) => Sha256.Lib term -- ^ \"Simplicity.Programs.Sha256\"\n                                                    -> Sha256.LibAssert term -- ^ \"Simplicity.Programs.Sha256\"\n                                                    -> Transaction.Lib term -- ^ \"Simplicity.Elements.Programs.Transaction\"\n                                                    -> Lib term\nmkLib Sha256.Lib{..} Sha256.LibAssert{..} Transaction.Lib{..} = lib\n where\n  lib@Lib{..} = Lib {\n    outputAmountsHash =\n     let\n       finalize = ctx8Finalize\n       body = take (drop outputAmount) &&& ih\n          >>> match (injl ih) (injr (ih &&& oh >>> assetAmountHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , outputNoncesHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop (primitive OutputNonce)) &&& ih\n         >>> match (injl ih) (injr (ih &&& oh >>> nonceHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , outputScriptsHash = hashWord256s32 (drop (primitive OutputScriptHash))\n\n  , outputRangeProofsHash = hashWord256s32 (drop (primitive OutputRangeProof))\n\n  , outputSurjectionProofsHash = hashWord256s32 (drop (primitive OutputSurjectionProof))\n\n  , outputsHash = ctx8Init &&& ((outputAmountsHash &&& outputNoncesHash) &&& (outputScriptsHash &&& outputRangeProofsHash))\n              >>> ctx8Addn vector128 >>> ctx8Finalize\n\n  , outputHash = (outputAmount &&& (primitive OutputNonce &&& primitive OutputScriptHash &&& primitive OutputRangeProof))\n             >>> match (injl unit)\n                       (injr (((((unit >>> ctx8Init) &&& oh >>> assetAmountHash)\n                     &&& (drop . take . assert $ iden) >>> nonceHash)\n                     &&& (drop . drop . take . assert $ iden) >>> ctx8Add32)\n                     &&& (drop . drop . drop . assert $ iden) >>> ctx8Add32 >>> ctx8Finalize))\n\n  , inputAmountsHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop inputAmount) &&& ih\n         >>> match (injl ih) (injr (ih &&& oh >>> assetAmountHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , inputScriptsHash = hashWord256s32 (drop (primitive InputScriptHash))\n\n  , inputUtxosHash = ctx8Init &&& (inputAmountsHash &&& inputScriptsHash) >>> ctx8Addn vector64 >>> ctx8Finalize\n\n  , inputUtxoHash = (inputAmount &&& primitive InputScriptHash)\n             >>> match (injl unit)\n                       (injr (((unit >>> ctx8Init) &&& oh >>> assetAmountHash)\n                         &&& (drop . assert $ iden) >>> ctx8Add32 >>> ctx8Finalize))\n\n  , inputOutpointsHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop (primitive InputPegin)) &&& (take (drop (primitive InputPrevOutpoint)) &&& ih)\n         >>> match (injl iih) (ioh &&& (oh &&& iih)\n         >>> match (injl iih) (injr (iih &&& (ioh &&& oh) >>> outpointHash)))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , inputSequencesHash = hashWord32s (drop (primitive InputSequence))\n\n  , inputAnnexesHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop (primitive InputAnnexHash)) &&& ih\n         >>> match (injl ih) (injr (ih &&& oh >>> annexHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , inputScriptSigsHash = hashWord256s32 (drop (primitive InputScriptSigHash))\n\n  , inputsHash = (ctx8Init &&& (inputOutpointsHash &&& inputSequencesHash) >>> ctx8Addn vector64)\n             &&& inputAnnexesHash >>> ctx8Addn vector32 >>> ctx8Finalize\n\n  , inputHash = (primitive InputPegin &&& (primitive InputPrevOutpoint &&& primitive InputSequence &&& primitive InputAnnexHash))\n            >>> match (injl unit)\n                      (injr ((((unit >>> ctx8Init)\n                    &&& (oh &&& (drop . take . assert $ iden)) >>> outpointHash)\n                    &&& (drop . drop . take . assert $ iden) >>> ctx8Add4)\n                    &&& (drop . drop . drop . assert $ iden) >>> annexHash >>> ctx8Finalize))\n    -- Note a \"null\" amount is serialized as an explicit value of 0.  The asset id is still serialized in this case.\n    -- Only when there is no issuance are two \"null\" values (i.e. 0x00 0x00) are serialized.\n  , issuanceAssetAmountsHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop issuanceAssetAmount) &&& ih >>> match (injl ih) (injr (ih &&& oh >>> issuanceAssetAmountHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , issuanceTokenAmountsHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop issuanceTokenAmount) &&& ih >>> match (injl ih) (injr (ih &&& oh >>> issuanceAssetAmountHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , issuanceRangeProofsHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop (primitive IssuanceAssetProof)) &&& (take (drop (primitive IssuanceTokenProof)) &&& ih)\n         >>> match (injl iih) (ioh &&& (oh &&& iih)\n         >>> match (injl iih) (injr (iih &&& (ioh &&& oh) >>> ctx8Addn vector64)))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , issuanceBlindingEntropyHash =\n     let\n      finalize = ctx8Finalize\n      body = take (drop issuanceBlindingEntropy) &&& ih\n         >>> match (injl ih) (injr (ih &&& oh >>> blindingEntropyHash))\n     in\n      unit &&& ctx8Init >>> forWhile word32 body >>> copair finalize finalize\n\n  , issuancesHash = (ctx8Init &&& ((issuanceAssetAmountsHash &&& issuanceTokenAmountsHash) &&& (issuanceRangeProofsHash &&& issuanceBlindingEntropyHash)) >>> ctx8Addn vector128) >>> ctx8Finalize\n\n  , issuanceHash = issuanceAssetAmount &&& issuanceTokenAmount &&& (primitive IssuanceAssetProof &&& primitive IssuanceTokenProof) &&& issuanceBlindingEntropy\n             >>> match (injl unit)\n                       (injr ((((((unit >>> ctx8Init) &&& oh >>> issuanceAssetAmountHash)\n                         &&& (drop . take . assert $ iden) >>> issuanceAssetAmountHash)\n                         &&& (drop . drop . take . take . assert $ iden) >>> ctx8Add32)\n                         &&& (drop . drop . take . drop . assert $ iden) >>> ctx8Add32)\n                         &&& (drop . drop . drop . assert $ iden) >>> blindingEntropyHash >>> ctx8Finalize))\n\n  , txHash = ((ctx8Init &&& (primitive Version &&& primitive LockTime) >>> ctx8Addn vector8)\n         &&& ((inputsHash &&& outputsHash) &&& (issuancesHash &&& outputSurjectionProofsHash)) >>> ctx8Addn vector128)\n         &&& inputUtxosHash >>> ctx8Addn vector32 >>> ctx8Finalize\n\n  , tapleafHash = ((Sha256.ctx8InitTag \"TapLeaf/elements\")\n              &&& (primitive TapleafVersion &&& scribe (toWord8 32)) >>> ctx8Addn vector2)\n              &&& (primitive ScriptCMR) >>> ctx8Addn vector32 >>> ctx8Finalize\n\n  , tappathHash = hashWord256s8 (drop (primitive Tappath))\n\n  , tapEnvHash = (ctx8Init &&& tapleafHash >>> ctx8Addn vector32)\n             &&& (tappathHash &&& primitive InternalKey) >>> ctx8Addn vector64 >>> ctx8Finalize\n\n  , sigAllHash = (ctx8Init &&& ((primitive GenesisBlockHash >>> iden &&& iden) &&& (txHash &&& tapEnvHash)) >>> ctx8Addn vector128)\n             &&& primitive CurrentIndex >>> ctx8Addn vector4 >>> ctx8Finalize\n  }\n  hashLoop256 :: (TyC w, TyC c) => Word w -> term (c, w) (S Word256) -> term (c, Ctx8) Ctx8\n  hashLoop256 = Sha256.hashLoop vector32\n  hashWord256s :: (TyC w, TyC c) => Word w -> term (c, w) (S Word256) -> term c Word256\n  hashWord256s w array = iden &&& (unit >>> ctx8Init) >>> hashLoop256 w array >>> ctx8Finalize\n  hashWord256s32 = hashWord256s word32\n  hashWord256s8 = hashWord256s word8\n  hashWord32s array = iden &&& (unit >>> ctx8Init) >>> Sha256.hashLoop vector4 word32 array >>> ctx8Finalize\n  ctx8Add4 = ctx8Addn vector4\n  ctx8Add32 = ctx8Addn vector32\n  ctx8Add64 = ctx8Addn vector64\n  issuanceAssetAmount = issuanceAsset &&& primitive IssuanceAssetAmount\n                    >>> match (injl unit) (match (injr (injl unit)) (ih &&& oh\n                    >>> match (injl unit) (match (injl unit) (injr (injr (ih &&& oh))))))\n  issuanceTokenAmount = issuanceToken &&& primitive IssuanceTokenAmount\n                    >>> match (injl unit) (match (injr (injl unit)) (ih &&& oh\n                    >>> match (injl unit) (match (injl unit) (injr (injr (ih &&& oh))))))\n  issuanceAssetAmountHash = ih &&& oh\n         >>> match (ih &&& (unit >>> zero word16) >>> ctx8Addn vector2)\n                   (ih &&& (injr ooh &&& oih) >>> assetAmountHash)\n  issuanceBlindingEntropy =\n    let issuanceEntropyBody = match (injl unit) (match (injr (injl unit)) ((ih &&& oh)\n                            >>> match (injl unit) (injr (match (injl unit) (injr (ih &&& oh))))))\n    in primitive NewIssuanceContract &&& primitive ReissuanceBlinding &&& primitive ReissuanceEntropy\n   >>> match (injl unit) (match (drop issuanceEntropyBody) (injr (injr ((unit >>> zero word256) &&& oh))))\n  blindingEntropyHash = ih &&& oh\n                    >>> match (drop (iden &&& (unit >>> zero word8) >>> ctx8Add1))\n                              (drop (iden &&& (unit >>> one word8) >>> ctx8Add1) &&& oh >>> ctx8Add64)\n\n-- | An instance of the SigHash 'Lib' library.\n-- This instance does not share its dependencies.\n-- Users should prefer to use 'mkLib' in order to share library dependencies.\n-- This instance is provided mostly for testing purposes.\nlib :: (Assert term, Primitive term) => Lib term\nlib = mkLib Sha256.lib Sha256.libAssert Transaction.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Programs/TimeLock.hs",
    "content": "-- | This module defines Simplicity expressions that implement timelock functions from \"Simplicity.Elements.DataTypes\".\nmodule Simplicity.Elements.Programs.TimeLock\n ( txIsFinal\n , txLockHeight, txLockTime\n , brokenTxLockDistance, brokenTxLockDuration\n , checkLockHeight, checkLockTime\n , brokenCheckLockDistance, brokenCheckLockDuration\n , module Simplicity.Programs.TimeLock\n , Bit\n ) where\n\nimport Prelude hiding (Word, all, drop, max, not, take)\n\nimport Simplicity.Elements.Primitive\nimport Simplicity.Elements.Term\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.TimeLock\nimport Simplicity.Programs.Word\n\n-- | Implements 'Simplicity.Elements.DataTypes.txIsFinal'.\ntxIsFinal :: (Core term, Primitive term) => term () Bit\ntxIsFinal = (unit &&& unit) >>> forWhile word32 body >>> copair iden true\n where\n  body = take (drop (primitive InputSequence)) >>> copair (injl true) (all word32 >>> copair (injl false) (injr unit))\n\n-- | Returns the transaction's LockTime if it is a Height value, otherwise it returns 0.\ntxLockHeight :: (Core term, Primitive term) => term () Height\ntxLockHeight = txIsFinal &&& primitive LockTime\n           >>> cond z (parseLock >>> (copair iden z))\n where\n  z = unit >>> zero word32\n\n-- | Returns the transaction's LockTime if it is a Time value, otherwise it returns 0.\ntxLockTime :: (Core term, Primitive term) => term () Time\ntxLockTime = txIsFinal &&& primitive LockTime\n         >>> cond z (parseLock >>> (copair z iden))\n where\n  z = unit >>> zero word32\n\nbip68VersionCheck :: (Core term, Primitive term) => term () Bit\nbip68VersionCheck = scribe (toWord32 2) &&& primitive Version >>> le word32\n\n-- | Implements 'Simplicity.Elements.DataTypes.txLockDistance'.\nbrokenTxLockDistance :: (Core term, Primitive term) => term () Distance\nbrokenTxLockDistance = bip68VersionCheck &&& zero word16\n             >>> match ih (forWhile word32 body >>> copair iden iden)\n where\n  body = take (drop (primitive InputSequence)) &&& ih\n     >>> match (injl ih) (injr (take parseSequence &&& ih >>> match ih (match (max word16) ih)))\n\n-- | Implements 'Simplicity.Elements.DataTypes.txLockDuration'.\nbrokenTxLockDuration :: (Core term, Primitive term) => term () Duration\nbrokenTxLockDuration = bip68VersionCheck &&& zero word16\n             >>> match ih (forWhile word32 body >>> copair iden iden)\n where\n  body = take (drop (primitive InputSequence)) &&& ih\n     >>> match (injl ih) (injr (take parseSequence &&& ih >>> match ih (match ih (max word16))))\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockHeight'.\ncheckLockHeight :: (Assert term, Primitive term) => term Height ()\ncheckLockHeight = assert (iden &&& (unit >>> txLockHeight) >>> le word32)\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockTime'.\ncheckLockTime :: (Assert term, Primitive term) => term Time ()\ncheckLockTime = assert (iden &&& (unit >>> txLockTime) >>> le word32)\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockDistance'.\nbrokenCheckLockDistance :: (Assert term, Primitive term) => term Distance ()\nbrokenCheckLockDistance = assert (iden &&& (unit >>> brokenTxLockDistance) >>> le word16)\n\n-- | Asserts that the input is less than or equal to the value returned by 'txLockDuration'.\nbrokenCheckLockDuration :: (Assert term, Primitive term) => term Duration ()\nbrokenCheckLockDuration = assert (iden &&& (unit >>> brokenTxLockDuration) >>> le word16)\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Programs/Transaction/Lib.hs",
    "content": "{-# LANGUAGE NoMonomorphismRestriction #-}\n-- | This module unpacks the 'Simplicity.Elements.Programs.Transaction.lib' library instance into individual functions.\nmodule Simplicity.Elements.Programs.Transaction.Lib\n  ( numInputs\n  , numOutputs\n  , outputAmount\n  , outputIsFee\n  , totalFee\n  , inputAmount\n  , currentPegin\n  , currentPrevOutpoint\n  , currentAsset\n  , currentAmount\n  , currentScriptHash\n  , currentSequence\n  , currentAnnexHash\n  , currentScriptSigHash\n  , currentReissuanceBlinding\n  , currentNewIssuanceContract\n  , currentReissuanceEntropy\n  , currentIssuanceAssetAmount\n  , currentIssuanceTokenAmount\n  , currentIssuanceAssetProof\n  , currentIssuanceTokenProof\n  ) where\n\nimport qualified Simplicity.Elements.Programs.Transaction as Transaction\n\nnumInputs = Transaction.numInputs Transaction.lib\nnumOutputs = Transaction.numOutputs Transaction.lib\noutputAmount = Transaction.outputAmount Transaction.lib\noutputIsFee = Transaction.outputIsFee Transaction.lib\ntotalFee = Transaction.totalFee Transaction.lib\ninputAmount = Transaction.inputAmount Transaction.lib\ncurrentPegin = Transaction.currentPegin Transaction.lib\ncurrentPrevOutpoint = Transaction.currentPrevOutpoint Transaction.lib\ncurrentAsset = Transaction.currentAsset Transaction.lib\ncurrentAmount = Transaction.currentAmount Transaction.lib\ncurrentScriptHash = Transaction.currentScriptHash Transaction.lib\ncurrentSequence = Transaction.currentSequence Transaction.lib\ncurrentAnnexHash = Transaction.currentAnnexHash Transaction.lib\ncurrentScriptSigHash = Transaction.currentScriptSigHash Transaction.lib\ncurrentReissuanceBlinding = Transaction.currentReissuanceBlinding Transaction.lib\ncurrentNewIssuanceContract = Transaction.currentNewIssuanceContract Transaction.lib\ncurrentReissuanceEntropy = Transaction.currentReissuanceEntropy Transaction.lib\ncurrentIssuanceAssetAmount = Transaction.currentIssuanceAssetAmount Transaction.lib\ncurrentIssuanceTokenAmount = Transaction.currentIssuanceTokenAmount Transaction.lib\ncurrentIssuanceAssetProof = Transaction.currentIssuanceAssetProof Transaction.lib\ncurrentIssuanceTokenProof = Transaction.currentIssuanceTokenProof Transaction.lib\n"
  },
  {
    "path": "Haskell/Simplicity/Elements/Programs/Transaction.hs",
    "content": "{-# LANGUAGE ScopedTypeVariables, GADTs, RankNTypes, RecordWildCards #-}\n-- | This module defines Simplicity expressions that access transaction data.\nmodule Simplicity.Elements.Programs.Transaction\n ( Lib(Lib), lib\n , numInputs\n , numOutputs\n , outputAmount\n , outputIsFee\n , totalFee\n , inputAmount\n , currentPegin\n , currentPrevOutpoint\n , currentAsset\n , currentAmount\n , currentScriptHash\n , currentSequence\n , currentAnnexHash\n , currentScriptSigHash\n , currentReissuanceBlinding\n , currentNewIssuanceContract\n , currentReissuanceEntropy\n , currentIssuanceAssetAmount\n , currentIssuanceTokenAmount\n , currentIssuanceAssetProof\n , currentIssuanceTokenProof\n ) where\n\nimport Prelude hiding (take, drop)\n\nimport Simplicity.Digest\nimport Simplicity.Elements.Primitive\nimport Simplicity.Elements.Term hiding (one)\nimport Simplicity.Functor\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Word\nimport Simplicity.Ty.Word\n\ndata Lib term =\n Lib\n  {\n    -- | Returns the number of inputs the transaction has.\n    numInputs :: term () Word32\n    -- | Returns the number of outputs the transaction has.\n  , numOutputs :: term () Word32\n    -- | Returns a pair of asset and amounts for the given output index.\n    -- Returns Nothing of the index is out of range.\n  , outputAmount :: term Word32 (S (Conf Word256, Conf Word64))\n    -- | An output is a fee when its script is empty and the asset and amounts are explicit.\n    -- Returns Nothing of the index is out of range.\n  , outputIsFee :: term Word32 (S Bit)\n    -- | Compute the total amount of fees paid to a given assetID.\n    -- Returns 0 for any asset without fees.\n  , totalFee :: term Word256 Word64\n    -- | Returns a pair of asset and amounts for the given input index.\n    -- Returns Nothing of the index is out of range.\n  , inputAmount :: term Word32 (S (Conf Word256, Conf Word64))\n    -- | Returns the `InputPegin` of the `CurrentIndex`.\n  , currentPegin :: term () (S Word256)\n    -- | Returns the `InputPrevOutpoint` of the `CurrentIndex`.\n  , currentPrevOutpoint :: term () (Word256,Word32)\n    -- | Returns the `InputAsset` of the `CurrentIndex`.\n  , currentAsset :: term () (Conf Word256)\n    -- | Returns the `inputAmount` of the `CurrentIndex`.\n  , currentAmount :: term () (Conf Word256, Conf Word64)\n    -- | Returns the `InputScriptHash` of the `CurrentIndex`.\n  , currentScriptHash :: term () Word256\n    -- | Returns the `InputSequence` of the `CurrentIndex`.\n  , currentSequence :: term () Word32\n    -- | Returns the `InputAnnexHash` of the `CurrentIndex`.\n  , currentAnnexHash :: term () (S Word256)\n    -- | Returns the `InputScriptSigHash` of the `CurrentIndex`.\n  , currentScriptSigHash :: term () Word256\n    -- | Returns the `ReissuanceBlinding` of the `CurrentIndex`.\n  , currentReissuanceBlinding :: term () (S Word256)\n    -- | Returns the `NewIssuanceContract` of the `CurrentIndex`.\n  , currentNewIssuanceContract :: term () (S Word256)\n    -- | Returns the `ReissuanceEntropy` of the `CurrentIndex`.\n  , currentReissuanceEntropy :: term () (S Word256)\n    -- | Returns the `IssuanceAssetAmount` of the `CurrentIndex`.\n  , currentIssuanceAssetAmount :: term () (S (Conf Word64))\n    -- | Returns the `IssuanceTokenAmount` of the `CurrentIndex`.\n  , currentIssuanceTokenAmount :: term () (S (Conf Word64))\n    -- | Returns the `IssuanceAssetProof` of the `CurrentIndex`.\n  , currentIssuanceAssetProof :: term () Word256\n    -- | Returns the `IssuanceTokenProof` of the `CurrentIndex`.\n  , currentIssuanceTokenProof :: term () Word256\n  }\n\ninstance SimplicityFunctor Lib where\n  sfmap m Lib{..} =\n   Lib\n    {\n      numInputs = m numInputs\n    , numOutputs = m numOutputs\n    , outputAmount = m outputAmount\n    , outputIsFee = m outputIsFee\n    , totalFee = m totalFee\n    , inputAmount = m inputAmount\n    , currentPegin = m currentPegin\n    , currentPrevOutpoint = m currentPrevOutpoint\n    , currentAsset = m currentAsset\n    , currentAmount = m currentAmount\n    , currentScriptHash = m currentScriptHash\n    , currentSequence = m currentSequence\n    , currentAnnexHash = m currentAnnexHash\n    , currentScriptSigHash = m currentScriptSigHash\n    , currentReissuanceBlinding = m currentReissuanceBlinding\n    , currentNewIssuanceContract = m currentNewIssuanceContract\n    , currentReissuanceEntropy = m currentReissuanceEntropy\n    , currentIssuanceAssetAmount = m currentIssuanceAssetAmount\n    , currentIssuanceTokenAmount = m currentIssuanceTokenAmount\n    , currentIssuanceAssetProof = m currentIssuanceAssetProof\n    , currentIssuanceTokenProof = m currentIssuanceTokenProof\n    }\n\n-- | Build the Transaction 'Lib' library.\nlib :: forall term. (Assert term, Primitive term) => Lib term\nlib = l\n where\n  l@Lib{..} = Lib {\n    numInputs = firstFail word32 (primitive InputScriptHash)\n\n  , numOutputs = firstFail word32 (primitive OutputScriptHash)\n\n  , outputAmount = primitive OutputAmount &&& primitive OutputAsset\n               >>> match (injl unit) (ih &&& oh >>> match (injl unit) (injr iden))\n\n  , outputIsFee = outputAmount &&& (primitive OutputScriptHash &&& scribe (Right emptyHash) >>> eq)\n              >>> match (injl unit) (injr (oih &&& (ooh &&& ih)\n               >>> match false (drop (match false ih))))\n  , totalFee = let\n      body = take (drop outputIsFee) &&& (take (drop outputAmount) &&& (ooh &&& ih))\n         >>> match (injl iiih) -- reached last output\n             (injr (match iiih -- not a fee.\n              (drop (match iih -- reached last output (technically not possible at this point)\n               ((ooh &&& (injr ioh) >>> eq) &&& (oih &&& iih)\n            >>> (match iih -- assetid does not match\n                 (drop (match ih -- value is confidential (technically not possible at this point)\n                              (add word64 >>> ih) -- drop the carry bit\n              ))))))))\n     in (iden &&& (unit >>> zero word64)) >>> forWhile word32 body >>> copair iden iden\n\n  , inputAmount = primitive InputAmount &&& primitive InputAsset\n              >>> match (injl unit) (ih &&& oh >>> match (injl unit) (injr iden))\n\n  , currentPegin = primitive CurrentIndex >>> assert (primitive InputPegin)\n\n  , currentPrevOutpoint = primitive CurrentIndex >>> assert (primitive InputPrevOutpoint)\n\n  , currentAsset = primitive CurrentIndex >>> assert (primitive InputAsset)\n\n  , currentAmount = primitive CurrentIndex >>> assert (inputAmount)\n\n  , currentScriptHash = primitive CurrentIndex >>> assert (primitive InputScriptHash)\n\n  , currentSequence = primitive CurrentIndex >>> assert (primitive InputSequence)\n\n  , currentAnnexHash = primitive CurrentIndex >>> assert (primitive InputAnnexHash)\n\n  , currentScriptSigHash = primitive CurrentIndex >>> assert (primitive InputScriptSigHash)\n\n  , currentReissuanceBlinding = primitive CurrentIndex >>> assert (primitive ReissuanceBlinding)\n\n  , currentNewIssuanceContract = primitive CurrentIndex >>> assert (primitive NewIssuanceContract)\n\n  , currentReissuanceEntropy = primitive CurrentIndex >>> assert (primitive ReissuanceEntropy)\n\n  , currentIssuanceAssetAmount = primitive CurrentIndex >>> assert (primitive IssuanceAssetAmount)\n\n  , currentIssuanceTokenAmount = primitive CurrentIndex >>> assert (primitive IssuanceTokenAmount)\n\n  , currentIssuanceAssetProof = primitive CurrentIndex >>> assert (primitive IssuanceAssetProof)\n\n  , currentIssuanceTokenProof = primitive CurrentIndex >>> assert (primitive IssuanceTokenProof)\n  }\n\n  emptyHash = toWord256 . integerHash256 $ bsHash mempty\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Arbitrary.hs",
    "content": "module Simplicity.Arbitrary\n ( genBoundaryCases,\n   genSignature\n ) where\n\nimport Data.Serialize (encode)\n\nimport Simplicity.CoreJets\nimport Simplicity.Digest\nimport Simplicity.LibSecp256k1.Schnorr\nimport Simplicity.LibSecp256k1.Spec\nimport Simplicity.Ty.Word\n\nimport Test.Tasty.QuickCheck (Arbitrary(..), Gen, chooseBoundedIntegral, chooseInteger, growingElements, oneof)\n\ngenBoundaryCases :: (Bounded w, Integral w) => w -> Gen w\ngenBoundaryCases 0 = oneof [return 0, chooseBoundedIntegral (1, maxBound)]\ngenBoundaryCases 1 = oneof [return 0, return 1, chooseBoundedIntegral (2, maxBound)]\ngenBoundaryCases boundary = oneof [return 0, chooseBoundedIntegral (1, boundary-1), return boundary, chooseBoundedIntegral (boundary + 1, maxBound)]\n\ngenSignature :: Hash256 -> Gen (PubKey, Sig)\ngenSignature msg = do\n  priv <- scalar <$> chooseInteger (1, scalar_repr maxBound)\n  k <- scalar <$> chooseInteger (1, scalar_repr maxBound)\n  let Just (GE px py) = gej_normalize $ off_curve_linear_combination [] priv\n  let Just (GE rx ry) = gej_normalize $ off_curve_linear_combination [] k\n  let pub = PubKey (fe_pack px)\n  let msgBody = encode (fe_pack rx) <> encode pub <> encode msg\n  let e = scalar . integerHash256 $ taggedHash \"BIP0340/challenge\" msgBody\n  let s = (if fe_is_odd ry then scalar_negate k else k) `scalar_add`\n          (scalar_multiply e (if fe_is_odd py then scalar_negate priv else priv))\n  return $ (pub, Sig (fe_pack rx) (scalar_pack s))\n\ninstance Arbitrary SomeConstWordContent where\n  arbitrary = do\n    n <- growingElements [0..10]\n    v <- chooseInteger (0, 2^n - 1)\n    return $ scwc v n\n   where\n    scwc v 0 = SomeConstWordContent (ConstWordContent SingleV v)\n    scwc v n | 0 < n = case scwc v (n - 1) of SomeConstWordContent (ConstWordContent w _) -> SomeConstWordContent (ConstWordContent (DoubleV w) v)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Bip0340.hs",
    "content": "module Simplicity.Bip0340 ( TestVector\n                          , bip0340TestPubKey, bip0340TestMessage, bip0340TestSig, bip0340TestResult\n                          , bip0340TestAsTy\n                          , bip0340Vectors ) where\n\nimport Prelude\n\nimport Simplicity.LibSecp256k1.Schnorr\nimport Simplicity.Ty.Word (toBit, toWord256)\nimport Simplicity.Word\n\ndata TestVector = TestVector PubKey Word256 Sig Bool\n\nbip0340TestPubKey  (TestVector p _ _ _) = p\nbip0340TestMessage (TestVector _ m _ _) = m\nbip0340TestSig     (TestVector _ _ s _) = s\nbip0340TestResult  (TestVector _ _ _ r) = r\nbip0340TestAsTy (TestVector (PubKey x) m (Sig r s) _) = ((conv x, conv m), (conv r, conv s))\n where\n  conv = toWord256 . fromIntegral\n\nbip0340Vectors = \n [ bip0340Vector0\n , bip0340Vector1\n , bip0340Vector2\n , bip0340Vector3\n , bip0340Vector4\n , bip0340Vector5\n , bip0340Vector6\n , bip0340Vector7\n , bip0340Vector8\n , bip0340Vector9\n , bip0340Vector10\n , bip0340Vector11\n , bip0340Vector12\n , bip0340Vector13\n , bip0340Vector14\n ]\n\nbip0340Vector0 = TestVector pk m sig True\n where\n  pk = PubKey 0xF9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9\n  m = 0\n  sig = Sig 0xE907831F80848D1069A5371B402410364BDF1C5F8307B0084C55F1CE2DCA8215 0x25F66A4A85EA8B71E482A74F382D2CE5EBEEE8FDB2172F477DF4900D310536C0\n\nbip0340Vector1 = TestVector pk m sig True\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89\n  sig = Sig 0x6896BD60EEAE296DB48A229FF71DFE071BDE413E6D43F917DC8DCF8C78DE3341 0x8906D11AC976ABCCB20B091292BFF4EA897EFCB639EA871CFA95F6DE339E4B0A\n\nbip0340Vector2 = TestVector pk m sig True\n where\n  pk = PubKey 0xDD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8\n  m = 0x7E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x5831AAEED7B44BB74E5EAB94BA9D4294C49BCF2A60728D8B4C200F50DD313C1B 0xAB745879A5AD954A72C45A91C3A51D3C7ADEA98D82F8481E0E1E03674A6F3FB7\n  \nbip0340Vector3 = TestVector pk m sig True\n where\n  pk = PubKey 0x25D1DFF95105F5253C4022F628A996AD3A0D95FBF21D468A1B33F8C160D8F517\n  m = -1\n  sig = Sig 0x7EB0509757E246F19449885651611CB965ECC1A187DD51B64FDA1EDC9637D5EC 0x97582B9CB13DB3933705B32BA982AF5AF25FD78881EBB32771FC5922EFC66EA3\n  \nbip0340Vector4 = TestVector pk m sig True\n where\n  pk = PubKey 0xD69C3509BB99E412E68B0FE8544E72837DFA30746D8BE2AA65975F29D22DC7B9\n  m = 0x4DF3C3F68FCC83B27E9D42C90431A72499F17875C81A599B566C9889B9696703\n  sig = Sig 0x00000000000000000000003B78CE563F89A0ED9414F5AA28AD0D96D6795F9C63 0x76AFB1548AF603B3EB45C9F8207DEE1060CB71C04E80F593060B07D28308D7F4\n\nbip0340Vector5 = TestVector pk m sig False\n where\n  pk = PubKey 0xEEFDEA4CDB677750A420FEE807EACF21EB9898AE79B9768766E4FAA04A2D4A34\n  m = 0x243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89\n  sig = Sig 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E177769 0x69E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n\nbip0340Vector6 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0xFFF97BD5755EEEA420453A14355235D382F6472F8568A18B2F057A1460297556 0x3CC27944640AC607CD107AE10923D9EF7A73C643E166BE5EBEAFA34B1AC553E2\n\nbip0340Vector7 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x1FA62E331EDBC21C394792D2AB1100A7B432B013DF3F6FF4F99FCB33E0E1515F 0x28890B3EDB6E7189B630448B515CE4F8622A954CFE545735AAEA5134FCCDB2BD\n  \nbip0340Vector8 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E177769 0x961764B3AA9B2FFCB6EF947B6887A226E8D7C93E00C5ED0C1834FF0D0C2E6DA6\n\nbip0340Vector9 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x0000000000000000000000000000000000000000000000000000000000000000 0x123DDA8328AF9C23A94C1FEECFD123BA4FB73476F0D594DCB65C6425BD186051\n\nbip0340Vector10 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x0000000000000000000000000000000000000000000000000000000000000001 0x7615FBAF5AE28864013C099742DEADB4DBA87F11AC6754F93780D5A1837CF197\n\nbip0340Vector11 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x4A298DACAE57395A15D0795DDBFD1DCB564DA82B0F269BC70A74F8220429BA1D 0x69E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n  \nbip0340Vector12 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F 0x69E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n\nbip0340Vector13 = TestVector pk m sig False\n where\n  pk = PubKey 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E177769 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\n\nbip0340Vector14 = TestVector pk m sig False\n where\n  pk = PubKey 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30\n  m = 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = Sig 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E177769 0x69E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n\n{-\n                , testCase \"vector 1\" (assertBool \"bip0340_check\" $\n                , testCase \"vector 2\" (assertBool \"bip0340_check\" $\n                , testCase \"vector 3\" (assertBool \"bip0340_check\" $\n                , testCase \"vector 4\" (assertBool \"bip0340_check\" $\n                , testCase \"vector 5\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 6\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 7\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 8\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 9\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 10\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 11\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 12\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 13\" (assertBool \"not bip0340_check\" . not $\n                , testCase \"vector 14\" (assertBool \"not bip0340_check\" . not $\n                ]\n\nbip0340_0 = TestVector pk m sig\n where\n  pk = PubKey 0xF9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9\n  m = 0\n  sig = Sig 0xE907831F80848D1069A5371B402410364BDF1C5F8307B0084C55F1CE2DCA821525F66A4A85EA8B71E482A74F382D2CE5EBEEE8FDB2172F477DF4900D310536C0\n\nbip0340_1 :: Bool\nbip0340_1 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 \n  sig = toWord512 0x6896BD60EEAE296DB48A229FF71DFE071BDE413E6D43F917DC8DCF8C78DE33418906D11AC976ABCCB20B091292BFF4EA897EFCB639EA871CFA95F6DE339E4B0A\n\nbip0340_2 :: Bool\nbip0340_2 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8\n  m = toWord256 0x7E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x5831AAEED7B44BB74E5EAB94BA9D4294C49BCF2A60728D8B4C200F50DD313C1BAB745879A5AD954A72C45A91C3A51D3C7ADEA98D82F8481E0E1E03674A6F3FB7\n\nbip0340_3 :: Bool\nbip0340_3 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0x25D1DFF95105F5253C4022F628A996AD3A0D95FBF21D468A1B33F8C160D8F517\n  m = toWord256 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n  sig = toWord512 0x7EB0509757E246F19449885651611CB965ECC1A187DD51B64FDA1EDC9637D5EC97582B9CB13DB3933705B32BA982AF5AF25FD78881EBB32771FC5922EFC66EA3\n\nbip0340_4 :: Bool\nbip0340_4 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xD69C3509BB99E412E68B0FE8544E72837DFA30746D8BE2AA65975F29D22DC7B9\n  m = toWord256 0x4DF3C3F68FCC83B27E9D42C90431A72499F17875C81A599B566C9889B9696703\n  sig = toWord512 0x00000000000000000000003B78CE563F89A0ED9414F5AA28AD0D96D6795F9C6376AFB1548AF603B3EB45C9F8207DEE1060CB71C04E80F593060B07D28308D7F4\n\nbip0340_5 :: Bool\nbip0340_5 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xEEFDEA4CDB677750A420FEE807EACF21EB9898AE79B9768766E4FAA04A2D4A34\n  m = toWord256 0x243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89\n  sig = toWord512 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E17776969E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n\nbip0340_6 :: Bool\nbip0340_6 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0xFFF97BD5755EEEA420453A14355235D382F6472F8568A18B2F057A14602975563CC27944640AC607CD107AE10923D9EF7A73C643E166BE5EBEAFA34B1AC553E2\n\nbip0340_7 :: Bool\nbip0340_7 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x1FA62E331EDBC21C394792D2AB1100A7B432B013DF3F6FF4F99FCB33E0E1515F28890B3EDB6E7189B630448B515CE4F8622A954CFE545735AAEA5134FCCDB2BD\n\nbip0340_8 :: Bool\nbip0340_8 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E177769961764B3AA9B2FFCB6EF947B6887A226E8D7C93E00C5ED0C1834FF0D0C2E6DA6\n\nbip0340_9 :: Bool\nbip0340_9 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x0000000000000000000000000000000000000000000000000000000000000000123DDA8328AF9C23A94C1FEECFD123BA4FB73476F0D594DCB65C6425BD186051\n\nbip0340_10 :: Bool\nbip0340_10 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x00000000000000000000000000000000000000000000000000000000000000017615FBAF5AE28864013C099742DEADB4DBA87F11AC6754F93780D5A1837CF197\n\nbip0340_11 :: Bool\nbip0340_11 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x4A298DACAE57395A15D0795DDBFD1DCB564DA82B0F269BC70A74F8220429BA1D69E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n\nbip0340_12 :: Bool\nbip0340_12 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F69E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n\nbip0340_13 :: Bool\nbip0340_13 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E177769FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\n\nbip0340_14 :: Bool\nbip0340_14 = fast_bip0340_check ((pk,m),sig)\n where\n  pk = toWord256 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30\n  m = toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C\n  sig = toWord512 0x6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E17776969E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B\n\nbip0340_tests :: Bool\nbip0340_tests = Prelude.and [bip0340_0, bip0340_1, bip0340_2, bip0340_3, bip0340_4]\n             && Prelude.not (Prelude.or [bip0340_5, bip0340_6, bip0340_7, bip0340_8, bip0340_9, bip0340_10, bip0340_11, bip0340_12, bip0340_13, bip0340_14])\n-}\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/BitMachine/StaticAnalysis/Tests.hs",
    "content": "{-# LANGUAGE RankNTypes #-}\n-- This module tests the static analysis of computation resources used by the Bit Machine by comparing it with the results of dynamic execution by running the Bit Machine on arbitrary inputs.\nmodule Simplicity.BitMachine.StaticAnalysis.Tests (tests) where\n\nimport Control.Monad.Trans.Maybe (runMaybeT)\nimport Control.Monad.Trans.Writer (execWriter)\nimport Data.List (foldl')\n\nimport Simplicity.BitMachine\nimport Simplicity.BitMachine.Authentic\nimport Simplicity.BitMachine.StaticAnalysis as Analysis\nimport Simplicity.BitMachine.StaticAnalysis.TCO as AnalysisTCO\nimport Simplicity.BitMachine.Translate as Translate\nimport Simplicity.BitMachine.Translate.TCO as TranslateTCO\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Example\nimport Simplicity.Programs.Sha256.Lib\nimport Simplicity.Term.Core\nimport qualified Simplicity.Word\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.QuickCheck ( Gen, Property, Testable\n                             , arbitrary, arbitraryBoundedIntegral\n                             , property, testProperty\n                             , withMaxSuccess\n                             )\nimport Test.Tasty.HUnit (testCase, assert)\n\n-- Run the static analysis tests on a small set of Simplicity expressions.\ntests :: TestTree\ntests = testGroup \"StaticAnalysis\"\n      [ testGroup \"memSize\"\n        [ testSquare \"full_add word8\" (full_add word8) (arbitrary <×> gen16)\n        , testSquare \"add word8\" (add word8) gen16\n        , testSquare \"full_multiply word8\" (full_multiply word8) gen32\n        , testSquare \"multiply word8\" (multiply word8) gen16\n        , testSquareAdj (withMaxSuccess 10) \"hashBlock\" hashBlock (gen256 <×> gen512)\n        , testSquareAdj (withMaxSuccess 10) \"fib\" fib (arbitrary <×> gen32)\n        ]\n      ]\n where\n  gen16 = (toWord16 . fromIntegral) <$> (arbitraryBoundedIntegral :: Gen Simplicity.Word.Word16)\n  gen32 = (toWord32 . fromIntegral) <$> (arbitraryBoundedIntegral :: Gen Simplicity.Word.Word32)\n  gen256 = (toWord256 . fromIntegral) <$> (arbitraryBoundedIntegral :: Gen Simplicity.Word.Word256)\n  gen512 =  gen256 <×> gen256\n  a <×> b = (,) <$> a <*> b\n\n-- For a given program we expect the static analysis of Cell use to bound the dynamic analysis of Cell use for both naive and TCO translation.\n-- We also expect TCO translation's static and dynamic analysis to be no greater than the same analysis of naive translation.\n-- Together these two pairs of tests for a square of comparisons that we expect to hold.\ntestSquareAdj :: (TyC a, TyC b) => (forall prop. Testable prop => prop -> Property) -> String -> (forall term. (Delegate term, Assert term) => term a b) -> Gen a -> TestTree\ntestSquareAdj adj name program gen = testProperty name (adj (assertion <$> gen))\n where\n  staticMem = Analysis.cellsBnd program\n  staticMemTCO = AnalysisTCO.cellsBnd program\n  dynamicMem i = fromIntegral . memSize . fold . execWriter . runMaybeT $ executeUsing (instrumentMachine . Translate.translate) program i\n  dynamicMemTCO i = fromIntegral . memSize . fold . execWriter . runMaybeT $ executeUsing (instrumentMachine . TranslateTCO.translate) program i\n  square a b c d = a <= b && a <= c && b <=d && c <= d\n  assertion i = square (dynamicMemTCO i) (dynamicMem i) staticMemTCO staticMem\n  fold l = foldl' mappend mempty l\n\ntestSquare :: (TyC a, TyC b) => String -> (forall term. (Delegate term, Assert term) => term a b) -> Gen a -> TestTree\ntestSquare = testSquareAdj property\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/BitMachine/Tests.hs",
    "content": "{-# LANGUAGE RankNTypes #-}\n-- This module tests the Bit Machine evaluation by comparing its results with Simplicity's denotational semantics.\nmodule Simplicity.BitMachine.Tests (tests) where\n\nimport Control.Arrow (runKleisli)\n\nimport Simplicity.BitMachine\nimport Simplicity.BitMachine.Authentic\nimport Simplicity.BitMachine.Translate as Translate\nimport Simplicity.BitMachine.Translate.TCO as TCO\nimport Simplicity.Delegator\nimport Simplicity.Programs.Sha256.Lib\nimport Simplicity.Term.Core\nimport Simplicity.Programs.Arith\nimport Simplicity.Programs.Example\nimport qualified Simplicity.Word\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.QuickCheck (Gen, arbitrary, arbitraryBoundedIntegral, testProperty)\n\n-- Run tests comparing Bit Machine execution with Simplicity's denotational semantics using both naive and TCO translation.\ntests :: TestTree\ntests = testGroup \"BitMachine\"\n      [ testCompiler \"Translate\" Translate.translate\n      , testCompiler \"TCO\" TCO.translate\n      ]\n\n-- Given a translator and a Simplicity expression, test that executing using the authentic Bit Machine is equivalent to denoational semantics of the Simplicity expression.\ntestUsing :: (Delegate trans, Assert trans, TyC a, TyC b) => (trans a b -> MachineCode) -> (forall term. (Delegate term, Assert term) => term a b) -> a -> Bool\ntestUsing translator program x = executeUsing (runMachine . translator) program x == (runDelegatorKleisli program x `asTypeOf` Nothing)\n\n-- Run the 'testUsing' test with a given translator on a small set of Simplicity expressions.\ntestCompiler :: (Delegate trans, Assert trans) => String -> (forall a b. (TyC a, TyC b) => trans a b -> MachineCode) -> TestTree\ntestCompiler name translator = testGroup name\n                  [ testProperty \"full_add word8\" (testUsing translator (full_add word8) <$> (arbitrary <×> gen16))\n                  , testProperty \"add word8\" (testUsing translator (add word8) <$> gen16)\n                  , testProperty \"full_multiply word8\" (testUsing translator (full_multiply word8) <$> gen32)\n                  , testProperty \"multiply word8\" (testUsing translator (multiply word8) <$> gen16)\n                  , testProperty \"hashBlock\" (testUsing translator hashBlock <$> (gen256 <×> gen512))\n                  , testProperty \"fib\" (testUsing translator fib <$> (arbitrary <×> gen32))\n                  ]\n where\n  gen16 = (toWord16 . fromIntegral) <$> (arbitraryBoundedIntegral :: Gen Simplicity.Word.Word16)\n  gen32 = (toWord32 . fromIntegral) <$> (arbitraryBoundedIntegral :: Gen Simplicity.Word.Word32)\n  gen256 = (toWord256 . fromIntegral) <$> (arbitraryBoundedIntegral :: Gen Simplicity.Word.Word256)\n  gen512 =  gen256 <×> gen256\n  a <×> b = (,) <$> a <*> b\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Bitcoin/Arbitrary.hs",
    "content": "-- This module tests the Simplicity programs on arbitrary inputs.\nmodule Simplicity.Bitcoin.Arbitrary\n ( arbitraryHash256, arbitraryLock\n , genPrimEnv, forallPrimEnv, forallInPrimEnv, forallOutPrimEnv\n ) where\n\nimport Data.Bits ((.&.))\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.Vector (fromList)\nimport Lens.Family2 (review, over)\n\nimport Simplicity.Arbitrary\nimport Simplicity.Digest\nimport Simplicity.Bitcoin.DataTypes\nimport Simplicity.Bitcoin.Primitive\nimport Simplicity.LibSecp256k1.Spec\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Word\n\nimport Test.Tasty.QuickCheck ( Arbitrary(..), Discard(Discard), Gen, Property, Testable\n                             , arbitraryBoundedIntegral, arbitrarySizedBoundedIntegral\n                             , choose, oneof, listOf, listOf1\n                             , forAll, property\n                             )\n\narbitraryVersion :: Gen Word32\narbitraryVersion = genBoundaryCases 2\n\narbitraryLock :: Gen Lock\narbitraryLock = genBoundaryCases 500000000\n\narbitraryHash256 :: Gen Hash256\narbitraryHash256 = review (over be256) <$> arbitraryBoundedIntegral\n\narbitraryPoint :: Gen Point\narbitraryPoint = pointAsSpec <$> arbitrary\n\narbitraryBS :: Gen BSL.ByteString\narbitraryBS = BSL.pack <$> listOf arbitrary\n\ninstance Arbitrary TxOutput where\n  arbitrary = TxOutput <$> arbitrarySizedBoundedIntegral <*> arbitraryBS\n\ninstance Arbitrary Outpoint where\n  arbitrary = Outpoint <$> arbitraryHash256 <*> arbitrarySizedBoundedIntegral\n\ninstance Arbitrary SigTxInput where\n  arbitrary = SigTxInput <$> arbitrary\n                         <*> arbitrary\n                         <*> oneof [return maxBound, arbitraryBoundedIntegral]\n                         <*> oneof [return Nothing, Just <$> arbitraryBS]\n                         <*> arbitraryBS\n\ninstance Arbitrary SigTx where\n  arbitrary = SigTx <$> arbitraryVersion\n                    <*> (fromList <$> listOf1 arbitrary)\n                    <*> (fromList <$> listOf1 arbitrary)\n                    <*> arbitraryLock\n\ninstance Arbitrary TapEnv where\n  arbitrary = TapEnv <$> ((0xfe .&.) <$> arbitraryBoundedIntegral)\n                     <*> (mkPubKey <$> arbitraryPoint)\n                     <*> listOf arbitraryHash256\n                     <*> arbitraryHash256\n   where\n    mkPubKey (Point _ x) = PubKey (fe_pack x)\n\ngenPrimEnv :: Gen (Maybe PrimEnv)\ngenPrimEnv = do\n   tx <- arbitrary\n   tapenv <- arbitrary\n   ix <- fromIntegral <$> choose (0, length (sigTxIn tx) - 1)\n   return $ primEnv tx ix tapenv\n\nforallPrimEnv :: Testable prop => (PrimEnv -> prop) -> Property\nforallPrimEnv p = forAll genPrimEnv go\n  where\n   go (Just env) = property $ p env\n   go Nothing = property Discard\n\nforallInPrimEnv :: Testable prop => (PrimEnv -> Word32 -> prop) -> Property\nforallInPrimEnv p = forAll genPrimEnv go\n  where\n   go Nothing = property Discard\n   go (Just env) = forAll genIx $ \\i -> property $ p env i\n    where\n     genIx = fromIntegral <$> genBoundaryCases (length (sigTxIn (envTx env))) -- Generate out of bounds cases too.\n\nforallOutPrimEnv :: Testable prop => (PrimEnv -> Word32 -> prop) -> Property\nforallOutPrimEnv p = forAll genPrimEnv go\n  where\n   go Nothing = property Discard\n   go (Just env) = forAll genIx $ \\i -> property $ p env i\n    where\n     genIx = fromIntegral <$> genBoundaryCases (length (sigTxOut (envTx env))) -- Generate out of bounds cases too.\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Bitcoin/FFI/Primitive.hs",
    "content": "{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.Bitcoin.FFI.Primitive\n  ( decodeJetCMR\n  , ErrorCode(..)\n  ) where\n\nimport Foreign.C.Types (CInt(..))\nimport Foreign.Ptr (Ptr)\nimport Foreign.Marshal.Unsafe (unsafeLocalState)\n\nimport Simplicity.Digest\nimport Simplicity.FFI.Bitstream\nimport Simplicity.FFI.Dag\n\ndata ErrorCode = BitstreamEof | DataOutOfRange deriving (Eq, Show)\n\ndecodeError :: CInt -> Either ErrorCode ()\ndecodeError 0 = Right ()\ndecodeError (-2) = Left DataOutOfRange\ndecodeError (-12) = Left BitstreamEof\ndecodeError err = error $ \"Simplicity.Bitcoin.FFI.Primitive.decodeError: Unexpected error code \" ++ show err\n\nforeign import ccall unsafe \"\" simplicity_bitcoin_decodeJet :: Ptr DagNode -> Ptr Bitstream -> IO CInt\n\ndecodeJetNode :: Ptr Bitstream -> (Either ErrorCode (Ptr DagNode) -> IO a) -> IO a\ndecodeJetNode pstream k =\n  withDagNode $ \\pnode -> do\n  error <- simplicity_bitcoin_decodeJet pnode pstream\n  k (decodeError error >> return pnode)\n\ndecodeJetCMR :: [Bool] -> Either ErrorCode Hash256\ndecodeJetCMR codeWord = unsafeLocalState $\n  initializeBitstream codeWord $ \\pstream ->\n  decodeJetNode pstream $ \\result ->\n  case result of\n    Left err -> return $ Left err\n    Right pnode -> Right <$> dagNodeGetCMR pnode\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Bitcoin/FFI/Tests.hs",
    "content": "module Simplicity.Bitcoin.FFI.Tests (tests) where\n\nimport Control.Arrow ((***), (+++))\nimport qualified Data.Map as Map\nimport Data.Maybe (fromMaybe, isJust)\nimport Data.Vector ((!?))\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit (Assertion, (@?=), testCase)\nimport Test.Tasty.QuickCheck (NonNegative(..), Property, classify, forAll, testProperty)\nimport Lens.Family2 (under, view)\n\nimport Simplicity.Arbitrary\nimport Simplicity.Digest\nimport Simplicity.Bitcoin.Arbitrary\nimport qualified Simplicity.Bitcoin.DataTypes as Prim\nimport Simplicity.Bitcoin.FFI.Jets\nimport Simplicity.Bitcoin.Jets\nimport qualified Simplicity.Bitcoin.Primitive as Prim\nimport Simplicity.Bitcoin.Semantics\nimport Simplicity.Bitcoin.TestEval\nimport Simplicity.FFI.Jets\nimport qualified Simplicity.Programs.Bitcoin.Lib as Prog\nimport Simplicity.TestCoreEval\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as Word\n\ntoW32 :: Word.Word32 -> Word32\ntoW32 = toWord32 . fromIntegral\n\ntoW8 :: Word.Word8 -> Word8\ntoW8 = toWord8 . fromIntegral\n\ntests :: TestTree\ntests = testGroup \"Bitcoin\"\n        [ testGroup \"Jets\"\n          [ testProperty \"tx_is_final\" prop_tx_is_final\n          , testProperty \"tx_lock_height\" prop_tx_lock_height\n          , testProperty \"tx_lock_time\" prop_tx_lock_time\n          , testProperty \"tx_lock_distance\" prop_tx_lock_distance\n          , testProperty \"tx_lock_duration\" prop_tx_lock_duration\n          , testProperty \"check_lock_height\" prop_check_lock_height\n          , testProperty \"check_lock_time\" prop_check_lock_time\n          , testProperty \"check_lock_distance\" prop_check_lock_distance\n          , testProperty \"check_lock_duration\" prop_check_lock_duration\n          , testProperty \"outpoint_hash\" prop_outpoint_hash\n          , testProperty \"annex_hash\" prop_annex_hash\n          , testProperty \"build_tapleaf_simplicity\" prop_build_tapleaf_simplicity\n          , testProperty \"build_tapbranch\" prop_build_tapbranch\n          , testProperty \"build_taptweak\" prop_build_taptweak\n          , testProperty \"output_values_hash\" prop_output_values_hash\n          , testProperty \"output_scripts_hash\" prop_output_scripts_hash\n          , testProperty \"outputs_hash\" prop_outputs_hash\n          , testProperty \"output_hash\" prop_output_hash\n          , testProperty \"input_outpoints_hash\" prop_input_outpoints_hash\n          , testProperty \"input_values_hash\" prop_input_values_hash\n          , testProperty \"input_scripts_hash\" prop_input_scripts_hash\n          , testProperty \"input_utxos_hash\" prop_input_utxos_hash\n          , testProperty \"input_utxo_hash\" prop_input_utxo_hash\n          , testProperty \"input_sequences_hash\" prop_input_sequences_hash\n          , testProperty \"input_annexes_hash\" prop_input_annexes_hash\n          , testProperty \"input_script_sigs_hash\" prop_input_script_sigs_hash\n          , testProperty \"inputs_hash\" prop_inputs_hash\n          , testProperty \"input_hash\" prop_input_hash\n          , testProperty \"tx_hash\" prop_tx_hash\n          , testProperty \"tapleaf_hash\" prop_tapleaf_hash\n          , testProperty \"tappath_hash\" prop_tappath_hash\n          , testProperty \"tap_env_hash\" prop_tap_env_hash\n          , testProperty \"sig_all_hash\" prop_sig_all_hash\n          ]\n        , testGroup \"Transaction\"\n          [ testProperty \"script_cmr\" prop_script_cmr\n          , testProperty \"internal_key\" prop_internal_key\n          , testProperty \"current_index\" prop_current_index\n          , testProperty \"num_inputs\" prop_num_inputs\n          , testProperty \"num_outputs\" prop_num_outputs\n          , testProperty \"lock_time\" prop_lock_time\n          , testProperty \"output_value\" prop_output_value\n          , testProperty \"output_script_hash\" prop_output_script_hash\n          , testProperty \"total_output_value\" prop_total_output_value\n          , testProperty \"current_prev_outpoint\" prop_current_prev_outpoint\n          , testProperty \"current_value\" prop_current_value\n          , testProperty \"current_script_hash\" prop_current_script_hash\n          , testProperty \"current_sequence\" prop_current_sequence\n          , testProperty \"current_annex_hash\" prop_current_annex_hash\n          , testProperty \"current_script_sig_hash\" prop_current_script_sig_hash\n          , testProperty \"input_prev_outpoint\" prop_input_prev_outpoint\n          , testProperty \"input_value\" prop_input_value\n          , testProperty \"input_script_hash\" prop_input_script_hash\n          , testProperty \"input_sequence\" prop_input_sequence\n          , testProperty \"input_annex_hash\" prop_input_annex_hash\n          , testProperty \"input_script_sig_hash\" prop_input_script_sig_hash\n          , testProperty \"total_input_value\" prop_total_input_value\n          , testProperty \"fee\" prop_fee\n          , testProperty \"tapleaf_version\" prop_tapleaf_version\n          , testProperty \"tappath\" prop_tappath\n          , testProperty \"version\" prop_version\n          , testProperty \"transaction_id\" prop_transaction_id\n          ]\n        ]\n\nprop_tx_is_final :: Property\nprop_tx_is_final = forallPrimEnv $ \\env -> fast_tx_is_final env () == tx_is_final env ()\n where\n  fast_tx_is_final = testEval (specification (BitcoinJet (TimeLockJet TxIsFinal)))\n\nprop_tx_lock_height :: Property\nprop_tx_lock_height = forallPrimEnv $ \\env -> fast_tx_lock_height env () == tx_lock_height env ()\n where\n  fast_tx_lock_height = testEval (specification (BitcoinJet (TimeLockJet TxLockHeight)))\n\nprop_tx_lock_time :: Property\nprop_tx_lock_time = forallPrimEnv $ \\env -> fast_tx_lock_time env () == tx_lock_time env ()\n where\n  fast_tx_lock_time = testEval (specification (BitcoinJet (TimeLockJet TxLockTime)))\n\nprop_tx_lock_distance :: Property\nprop_tx_lock_distance = forallPrimEnv $ \\env -> fast_tx_lock_distance env () == tx_lock_distance env ()\n where\n  fast_tx_lock_distance = testEval (specification (BitcoinJet (TimeLockJet TxLockDistance)))\n\nprop_tx_lock_duration :: Property\nprop_tx_lock_duration = forallPrimEnv $ \\env -> fast_tx_lock_duration env () == tx_lock_duration env ()\n where\n  fast_tx_lock_duration = testEval (specification (BitcoinJet (TimeLockJet TxLockDuration)))\n\nprop_check_lock_height :: Word32 -> Property\nprop_check_lock_height = \\w -> forallPrimEnv $ \\env -> fast_check_lock_height env w == check_lock_height env w\n where\n  fast_check_lock_height = testEval (specification (BitcoinJet (TimeLockJet CheckLockHeight)))\n\nprop_check_lock_time :: Word32 -> Property\nprop_check_lock_time = \\w -> forallPrimEnv $ \\env -> fast_check_lock_time env w == check_lock_time env w\n where\n  fast_check_lock_time = testEval (specification (BitcoinJet (TimeLockJet CheckLockTime)))\n\nprop_check_lock_distance :: Word16 -> Property\nprop_check_lock_distance = \\w -> forallPrimEnv $ \\env -> fast_check_lock_distance env w == check_lock_distance env w\n where\n  fast_check_lock_distance = testEval (specification (BitcoinJet (TimeLockJet CheckLockDistance)))\n\nprop_check_lock_duration :: Word16 -> Property\nprop_check_lock_duration = \\w -> forallPrimEnv $ \\env -> fast_check_lock_duration env w == check_lock_duration env w\n where\n  fast_check_lock_duration = testEval (specification (BitcoinJet (TimeLockJet CheckLockDuration)))\n\nprop_outpoint_hash :: Sha256CtxElement -> (Word256, Word32) -> Bool\nprop_outpoint_hash = \\ctx op ->\n  let input = (ctxAsTy ctx, op)\n  in outpoint_hash input == fast_outpoint_hash input\n where\n  fast_outpoint_hash = testCoreEval Prog.outpointHash\n\nprop_annex_hash :: Sha256CtxElement -> Maybe Word256 -> Bool\nprop_annex_hash = \\ctx mw256 ->\n  let input = (ctxAsTy ctx, cast mw256)\n  in annex_hash input == fast_annex_hash input\n where\n  fast_annex_hash = testCoreEval Prog.annexHash\n  cast = maybe (Left ()) Right\n\nprop_build_tapleaf_simplicity :: Word256 -> Bool\nprop_build_tapleaf_simplicity = \\w ->\n  build_tapleaf_simplicity w == fast_build_tapleaf_simplicity w\n where\n  fast_build_tapleaf_simplicity = testCoreEval Prog.buildTapleafSimplicity\n\nprop_build_tapbranch :: Word256 -> Word256 -> Bool\nprop_build_tapbranch = \\a b ->\n  build_tapbranch (a, b) == fast_build_tapbranch (a, b)\n where\n  fast_build_tapbranch = testCoreEval Prog.buildTapbranch\n\nprop_build_taptweak :: FieldElement -> Word256 -> Bool\nprop_build_taptweak = \\a b ->\n  let input = (feAsTy a, b) in\n  build_taptweak input == fast_build_taptweak input\n where\n  fast_build_taptweak = testCoreEval Prog.buildTaptweak\n\nprop_output_values_hash :: Property\nprop_output_values_hash = forallPrimEnv $ \\env -> fast_output_values_hash env () == output_values_hash env ()\n where\n  fast_output_values_hash = testEval (specification (BitcoinJet (SigHashJet OutputValuesHash)))\n\nprop_output_scripts_hash :: Property\nprop_output_scripts_hash = forallPrimEnv $ \\env -> fast_output_scripts_hash env () == output_scripts_hash env ()\n where\n  fast_output_scripts_hash = testEval (specification (BitcoinJet (SigHashJet OutputScriptsHash)))\n\nprop_outputs_hash :: Property\nprop_outputs_hash = forallPrimEnv $ \\env -> fast_outputs_hash env () == outputs_hash env ()\n where\n  fast_outputs_hash = testEval (specification (BitcoinJet (SigHashJet OutputsHash)))\n\nprop_output_hash :: Property\nprop_output_hash = forallOutPrimEnv $ \\env i -> fast_output_hash env (toW32 i) == output_hash env (toW32 i)\n where\n  fast_output_hash = testEval (specification (BitcoinJet (SigHashJet OutputHash)))\n\nprop_input_outpoints_hash :: Property\nprop_input_outpoints_hash = forallPrimEnv $ \\env -> fast_input_outpoints_hash env () == input_outpoints_hash env ()\n where\n  fast_input_outpoints_hash = testEval (specification (BitcoinJet (SigHashJet InputOutpointsHash)))\n\nprop_input_values_hash :: Property\nprop_input_values_hash = forallPrimEnv $ \\env -> fast_input_values_hash env () == input_values_hash env ()\n where\n  fast_input_values_hash = testEval (specification (BitcoinJet (SigHashJet InputValuesHash)))\n\nprop_input_scripts_hash :: Property\nprop_input_scripts_hash = forallPrimEnv $ \\env -> fast_input_scripts_hash env () == input_scripts_hash env ()\n where\n  fast_input_scripts_hash = testEval (specification (BitcoinJet (SigHashJet InputScriptsHash)))\n\nprop_input_utxos_hash :: Property\nprop_input_utxos_hash = forallPrimEnv $ \\env -> fast_input_utxos_hash env () == input_utxos_hash env ()\n where\n  fast_input_utxos_hash = testEval (specification (BitcoinJet (SigHashJet InputUtxosHash)))\n\nprop_input_utxo_hash :: Property\nprop_input_utxo_hash = forallInPrimEnv $ \\env i -> fast_input_utxo_hash env (toW32 i) == input_utxo_hash env (toW32 i)\n where\n  fast_input_utxo_hash = testEval (specification (BitcoinJet (SigHashJet InputUtxoHash)))\n\nprop_input_sequences_hash :: Property\nprop_input_sequences_hash = forallPrimEnv $ \\env -> fast_input_sequences_hash env () == input_sequences_hash env ()\n where\n  fast_input_sequences_hash = testEval (specification (BitcoinJet (SigHashJet InputSequencesHash)))\n\nprop_input_annexes_hash :: Property\nprop_input_annexes_hash = forallPrimEnv $ \\env -> fast_input_annexes_hash env () == input_annexes_hash env ()\n where\n  fast_input_annexes_hash = testEval (specification (BitcoinJet (SigHashJet InputAnnexesHash)))\n\nprop_input_script_sigs_hash :: Property\nprop_input_script_sigs_hash = forallPrimEnv $ \\env -> fast_input_script_sigs_hash env () == input_script_sigs_hash env ()\n where\n  fast_input_script_sigs_hash = testEval (specification (BitcoinJet (SigHashJet InputScriptSigsHash)))\n\nprop_inputs_hash :: Property\nprop_inputs_hash = forallPrimEnv $ \\env -> fast_inputs_hash env () == inputs_hash env ()\n where\n  fast_inputs_hash = testEval (specification (BitcoinJet (SigHashJet InputsHash)))\n\nprop_input_hash :: Property\nprop_input_hash = forallInPrimEnv $ \\env i -> fast_input_hash env (toW32 i) == input_hash env (toW32 i)\n where\n  fast_input_hash = testEval (specification (BitcoinJet (SigHashJet InputHash)))\n\nprop_tx_hash :: Property\nprop_tx_hash = forallPrimEnv $ \\env -> fast_tx_hash env () == tx_hash env ()\n where\n  fast_tx_hash = testEval (specification (BitcoinJet (SigHashJet TxHash)))\n\nprop_tapleaf_hash :: Property\nprop_tapleaf_hash = forallPrimEnv $ \\env -> fast_tapleaf_hash env () == tapleaf_hash env ()\n where\n  fast_tapleaf_hash = testEval (specification (BitcoinJet (SigHashJet TapleafHash)))\n\nprop_tappath_hash :: Property\nprop_tappath_hash = forallPrimEnv $ \\env -> fast_tappath_hash env () == tappath_hash env ()\n where\n  fast_tappath_hash = testEval (specification (BitcoinJet (SigHashJet TappathHash)))\n\nprop_tap_env_hash :: Property\nprop_tap_env_hash = forallPrimEnv $ \\env -> fast_tap_env_hash env () == tap_env_hash env ()\n where\n  fast_tap_env_hash = testEval (specification (BitcoinJet (SigHashJet TapEnvHash)))\n\nprop_sig_all_hash :: Property\nprop_sig_all_hash = forallPrimEnv $ \\env -> fast_sig_all_hash env () == sig_all_hash env ()\n where\n  fast_sig_all_hash = testEval (specification (BitcoinJet (SigHashJet SigAllHash)))\n\nprop_script_cmr :: Property\nprop_script_cmr = forallPrimEnv $ \\env -> fast_script_cmr env () == script_cmr env ()\n where\n  fast_script_cmr = testEval (specification (BitcoinJet (TransactionJet ScriptCMR)))\n\nprop_internal_key :: Property\nprop_internal_key = forallPrimEnv $ \\env -> fast_internal_key env () == internal_key env ()\n where\n  fast_internal_key = testEval (specification (BitcoinJet (TransactionJet InternalKey)))\n\nprop_current_index :: Property\nprop_current_index = forallPrimEnv $ \\env -> fast_current_index env () == current_index env ()\n where\n  fast_current_index = testEval (specification (BitcoinJet (TransactionJet CurrentIndex)))\n\nprop_num_inputs :: Property\nprop_num_inputs = forallPrimEnv $ \\env -> fast_num_inputs env () == num_inputs env ()\n where\n  fast_num_inputs = testEval (specification (BitcoinJet (TransactionJet NumInputs)))\n\nprop_num_outputs :: Property\nprop_num_outputs = forallPrimEnv $ \\env -> fast_num_outputs env () == num_outputs env ()\n where\n  fast_num_outputs = testEval (specification (BitcoinJet (TransactionJet NumOutputs)))\n\nprop_lock_time :: Property\nprop_lock_time = forallPrimEnv $ \\env -> fast_lock_time env () == lock_time env ()\n where\n  fast_lock_time = testEval (specification (BitcoinJet (TransactionJet LockTime)))\n\nprop_output_value :: Property\nprop_output_value = forallOutPrimEnv $ \\env i -> fast_output_value env (toW32 i) == output_value env (toW32 i)\n where\n  fast_output_value = testEval (specification (BitcoinJet (TransactionJet OutputValue)))\n\nprop_output_script_hash :: Property\nprop_output_script_hash = forallOutPrimEnv $ \\env i -> fast_output_script_hash env (toW32 i) == output_script_hash env (toW32 i)\n where\n  fast_output_script_hash = testEval (specification (BitcoinJet (TransactionJet OutputScriptHash)))\n\nprop_total_output_value :: Property\nprop_total_output_value = forallPrimEnv $ \\env -> fast_total_output_value env () == total_output_value env ()\n where\n  fast_total_output_value = testEval (specification (BitcoinJet (TransactionJet TotalOutputValue)))\n\nprop_current_prev_outpoint :: Property\nprop_current_prev_outpoint = forallPrimEnv $ \\env -> fast_current_prev_outpoint env () == current_prev_outpoint env ()\n where\n  fast_current_prev_outpoint = testEval (specification (BitcoinJet (TransactionJet CurrentPrevOutpoint)))\n\nprop_current_value :: Property\nprop_current_value = forallPrimEnv $ \\env -> fast_current_value env () == current_value env ()\n where\n  fast_current_value = testEval (specification (BitcoinJet (TransactionJet CurrentValue)))\n\nprop_current_script_hash :: Property\nprop_current_script_hash = forallPrimEnv $ \\env -> fast_current_script_hash env () == current_script_hash env ()\n where\n  fast_current_script_hash = testEval (specification (BitcoinJet (TransactionJet CurrentScriptHash)))\n\nprop_current_sequence :: Property\nprop_current_sequence = forallPrimEnv $ \\env -> fast_current_sequence env () == current_sequence env ()\n where\n  fast_current_sequence = testEval (specification (BitcoinJet (TransactionJet CurrentSequence)))\n\nprop_current_annex_hash :: Property\nprop_current_annex_hash = forallPrimEnv $ \\env -> fast_current_annex_hash env () == current_annex_hash env ()\n where\n  fast_current_annex_hash = testEval (specification (BitcoinJet (TransactionJet CurrentAnnexHash)))\n\nprop_current_script_sig_hash :: Property\nprop_current_script_sig_hash = forallPrimEnv $ \\env -> fast_current_script_sig_hash env () == current_script_sig_hash env ()\n where\n  fast_current_script_sig_hash = testEval (specification (BitcoinJet (TransactionJet CurrentScriptSigHash)))\n\nprop_input_prev_outpoint :: Property\nprop_input_prev_outpoint = forallInPrimEnv $ \\env i -> fast_input_prev_outpoint env (toW32 i) == input_prev_outpoint env (toW32 i)\n where\n  fast_input_prev_outpoint = testEval (specification (BitcoinJet (TransactionJet InputPrevOutpoint)))\n\nprop_input_value :: Property\nprop_input_value = forallInPrimEnv $ \\env i -> fast_input_value env (toW32 i) == input_value env (toW32 i)\n where\n  fast_input_value = testEval (specification (BitcoinJet (TransactionJet InputValue)))\n\nprop_input_script_hash :: Property\nprop_input_script_hash = forallInPrimEnv $ \\env i -> fast_input_script_hash env (toW32 i) == input_script_hash env (toW32 i)\n where\n  fast_input_script_hash = testEval (specification (BitcoinJet (TransactionJet InputScriptHash)))\n\nprop_input_sequence :: Property\nprop_input_sequence = forallInPrimEnv $ \\env i -> fast_input_sequence env (toW32 i) == input_sequence env (toW32 i)\n where\n  fast_input_sequence = testEval (specification (BitcoinJet (TransactionJet InputSequence)))\n\nprop_input_annex_hash :: Property\nprop_input_annex_hash = forallInPrimEnv $ \\env i -> fast_input_annex_hash env (toW32 i) == input_annex_hash env (toW32 i)\n where\n  fast_input_annex_hash = testEval (specification (BitcoinJet (TransactionJet InputAnnexHash)))\n\nprop_input_script_sig_hash :: Property\nprop_input_script_sig_hash = forallInPrimEnv $ \\env i -> fast_input_script_sig_hash env (toW32 i) == input_script_sig_hash env (toW32 i)\n where\n  fast_input_script_sig_hash = testEval (specification (BitcoinJet (TransactionJet InputScriptSigHash)))\n\nprop_total_input_value :: Property\nprop_total_input_value = forallPrimEnv $ \\env -> fast_total_input_value env () == total_input_value env ()\n where\n  fast_total_input_value = testEval (specification (BitcoinJet (TransactionJet TotalInputValue)))\n\nprop_fee :: Property\nprop_fee = forallPrimEnv $ \\env -> fast_fee env () == fee env ()\n where\n  fast_fee = testEval (specification (BitcoinJet (TransactionJet Fee)))\n\nprop_tapleaf_version :: Property\nprop_tapleaf_version = forallPrimEnv $ \\env -> fast_tapleaf_version env () == tapleaf_version env ()\n where\n  fast_tapleaf_version = testEval (specification (BitcoinJet (TransactionJet TapleafVersion)))\n\nprop_tappath :: Property\nprop_tappath = forallPrimEnv $ \\env -> forAll (genTappathIx env) $ \\i -> fast_tappath env (toW8 i) == tappath env (toW8 i)\n where\n  fast_tappath = testEval (specification (BitcoinJet (TransactionJet Tappath)))\n  genTappathIx = genBoundaryCases . fromIntegral . length . Prim.tappath . Prim.envTap\n\nprop_version :: Property\nprop_version = forallPrimEnv $ \\env -> fast_version env () == version env ()\n where\n  fast_version = testEval (specification (BitcoinJet (TransactionJet Version)))\n\nprop_transaction_id :: Property\nprop_transaction_id = forallPrimEnv $ \\env -> fast_transaction_id env () == transaction_id env ()\n where\n  fast_transaction_id = testEval (specification (BitcoinJet (TransactionJet TransactionId)))\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Bitcoin/Serialization/Tests.hs",
    "content": "-- This module tests some serialization functionality.\nmodule Simplicity.Bitcoin.Serialization.Tests (tests) where\n\nimport Control.Monad (mzero)\nimport Data.Foldable (toList)\nimport qualified Data.List as List\nimport qualified Data.Vector.Unboxed as V\n\nimport Simplicity.Arbitrary\nimport Simplicity.CoreJets\nimport Simplicity.Bitcoin.Jets as Bitcoin\nimport Simplicity.Bitcoin.FFI.Primitive as Bitcoin\nimport Simplicity.FFI.Dag\nimport Simplicity.MerkleRoot\nimport Simplicity.Serialization\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit ((@=?), testCase)\nimport Test.Tasty.QuickCheck (Property, arbitrary, forAll, chooseInt, testProperty, vectorOf)\n\n-- Run tests comparing Bit Machine execution with Simplicity's denotational semantics using both naive and TCO translation.\ntests :: TestTree\ntests = testGroup \"Bitcoin Serialization\"\n      [ testGroup \"Haskell\"\n        [ testDecodeBitcoinJet jt | SomeArrow jt@(Bitcoin.BitcoinJet _) <- toList Bitcoin.jetMap ]\n      , testGroup \"C\"\n      $ [ testDecodeBitcoinJetFFI jt | SomeArrow jt <- toList Bitcoin.jetMap ]\n      ++ [ testProperty \"prop_wordCMR\" prop_wordCMR ]\n      ]\n\ntestDecodeBitcoinJet :: (TyC a, TyC b) => Bitcoin.JetType a b -> TestTree\ntestDecodeBitcoinJet jt = testCase (show jt) (Just (SomeArrow jt) @=? decode)\n where\n  vector = V.fromList $ Bitcoin.putJetBit jt []\n  decode = evalExactVector (Bitcoin.getJetBit mzero) vector\n\ntestDecodeBitcoinJetFFI :: (TyC a, TyC b) => Bitcoin.JetType a b -> TestTree\ntestDecodeBitcoinJetFFI jt = testCase (show jt) (Right cmr @=? Bitcoin.decodeJetCMR bitstream)\n where\n  -- All jet encodings should begin with a 1 bit, which we consume.\n  True:bitstream = Bitcoin.putJetBit jt []\n  cmr = commitmentRoot (asJet jt)\n\nprop_wordCMR :: SomeConstWordContent -> Property\nprop_wordCMR (SomeConstWordContent cwc) = forAll prefix prop\n where\n  prefix = do\n    n <- chooseInt (0, 7)\n    vectorOf n arbitrary\n  prop l = wordCMR == computeWordCMR (length l) (l ++ stream)\n   where\n    wordCMR = commitmentRoot $ asJet (ConstWordJet cwc)\n    stream = putConstWordValueBit cwc\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Bitcoin/TestEval.hs",
    "content": "-- | This module builds a wrapper around 'Simplicity.Bitcoin.Semantics.fastEval' to define a 'testEval' variant.\nmodule Simplicity.Bitcoin.TestEval\n  ( testEval, TestEval\n  ) where\n\nimport Prelude hiding (drop, take, fail)\n\nimport Control.Arrow (Kleisli(..), first)\nimport Control.Monad.Reader (ReaderT(..))\n\nimport qualified Simplicity.Bitcoin.Jets as Jets\nimport Simplicity.Bitcoin.JetType\nimport Simplicity.Bitcoin.Primitive\nimport Simplicity.Bitcoin.Semantics\nimport Simplicity.Bitcoin.Term\n\n-- | An Assert instance for 'testCoreEval'.\ndata TestEval jt a b = TestEval { testEvalSem :: Kleisli (ReaderT PrimEnv Maybe) a b\n                                , testEvalFast :: FastEval jt a b\n                                }\n\n-- | 'testEval' optimizes Simplicity with assertions evaluation using jets, similar to 'fastEval',\n-- but excludes the expression itself from being substituted.\n-- This is used in for testing jets against their specifications under the assumption that jets for any subexpressions are correct.\n-- Delegation, witnesses, and jets are not supported since they are not allowed within jet definitions.\ntestEval :: TestEval Jets.JetType a b -> PrimEnv -> a -> Maybe b\ntestEval = flip . (runReaderT .) . runKleisli . testEvalSem\n\ntestFastKleisli = Kleisli . (ReaderT .) . flip . fastEval . testEvalFast\n\nmkLeaf sComb fComb = TestEval sComb fComb\n\nmkUnary sComb fComb t = TestEval (sComb (testFastKleisli t)) (fComb (testEvalFast t))\n\nmkBinary sComb fComb s t = TestEval (sComb (testFastKleisli s) (testFastKleisli t))\n                                    (fComb (testEvalFast s) (testEvalFast t))\n\ninstance JetType jt => Core (TestEval jt) where\n  iden = mkLeaf iden iden\n  comp = mkBinary comp comp\n  unit = mkLeaf unit unit\n  injl = mkUnary injl injl\n  injr = mkUnary injr injr\n  match = mkBinary match match\n  pair = mkBinary pair pair\n  take = mkUnary take take\n  drop = mkUnary drop drop\n\ninstance JetType jt => Assert (TestEval jt) where\n  assertl s h = mkUnary (flip assertl h) (flip assertl h) s\n  assertr h t = mkUnary (assertr h) (assertr h) t\n  fail b = mkLeaf (fail b) (fail b)\n\ninstance JetType jt => Primitive (TestEval jt)  where\n  primitive p = mkLeaf (primitive p) (primitive p)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Bitcoin/Tests.hs",
    "content": "module Simplicity.Bitcoin.Tests (tests) where\n\nimport Control.Arrow ((***), (+++))\nimport qualified Data.ByteString.Char8 as BSC\nimport qualified Data.ByteString.Lazy as BSL\nimport qualified Data.Map as Map\nimport Data.Maybe (fromMaybe, fromJust, isJust)\nimport Data.Serialize (encode, put, putWord8, putWord32be, runPutLazy)\nimport Data.Vector ((!), (!?), fromList)\nimport Lens.Family2 (review, over, under, view)\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit (Assertion, (@?=), assertBool, testCase)\nimport Test.Tasty.QuickCheck (Property, NonNegative(..), arbitrary, classify, forAll, testProperty)\n\nimport Simplicity.Arbitrary\nimport Simplicity.Digest\nimport Simplicity.Bitcoin.Arbitrary\nimport Simplicity.Bitcoin.DataTypes\nimport Simplicity.Bitcoin.Jets\nimport Simplicity.Bitcoin.Term\nimport Simplicity.Bitcoin.TestEval\nimport Simplicity.Bitcoin.Primitive (primEnv, primEnvHash, envTx, envTap)\nimport qualified Simplicity.Bitcoin.Programs.TimeLock as Prog\nimport Simplicity.Bitcoin.Semantics\nimport qualified Simplicity.LibSecp256k1.Spec as Schnorr\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.CheckSig.Lib\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport qualified Simplicity.Programs.Bitcoin.Lib as Prog\nimport qualified Simplicity.Bitcoin.Programs.SigHash.Lib as Prog\nimport Simplicity.TestCoreEval\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as Word\n\ntoW32 :: Word.Word32 -> Word32\ntoW32 = toWord32 . fromIntegral\n\ntoW16 :: Word.Word16 -> Word16\ntoW16 = toWord16 . fromIntegral\n\ntoW8 :: Word.Word8 -> Word8\ntoW8 = toWord8 . fromIntegral\n\ntests :: TestTree\ntests = testGroup \"Bitcoin\"\n        [ -- Regression.tests\n          testGroup \"TimeLock\"\n          [ testProperty \"tx_is_final\" prop_tx_is_final\n          , testProperty \"tx_lock_height\" prop_tx_lock_height\n          , testProperty \"tx_lock_time\" prop_tx_lock_time\n          , testProperty \"tx_lock_distance\" prop_tx_lock_distance\n          , testProperty \"tx_lock_duration\" prop_tx_lock_duration\n          , testProperty \"check_lock_height\" prop_check_lock_height\n          , testProperty \"check_lock_time\" prop_check_lock_time\n          , testProperty \"check_lock_distance\" prop_check_lock_distance\n          , testProperty \"check_lock_duration\" prop_check_lock_duration\n          ]\n        , testGroup \"Bitcoin Functions\"\n          [ testProperty \"outpoint_hash\" prop_outpoint_hash\n          , testProperty \"annex_hash\" prop_annex_hash\n          , testProperty \"build_tapleaf_simplicity\" prop_build_tapleaf_simplicity\n          , testProperty \"build_tapbranch\" prop_build_tapbranch\n          , testProperty \"build_taptweak\" prop_build_taptweak\n          , testProperty \"output_values_hash\" prop_output_values_hash\n          , testProperty \"output_scripts_hash\" prop_output_scripts_hash\n          , testProperty \"outputs_hash\" prop_outputs_hash\n          , testProperty \"output_hash\" prop_output_hash\n          , testProperty \"input_outpoints_hash\" prop_input_outpoints_hash\n          , testProperty \"input_values_hash\" prop_input_values_hash\n          , testProperty \"input_scripts_hash\" prop_input_scripts_hash\n          , testProperty \"input_utxos_hash\" prop_input_utxos_hash\n          , testProperty \"input_utxo_hash\" prop_input_utxo_hash\n          , testProperty \"input_sequences_hash\" prop_input_sequences_hash\n          , testProperty \"input_annexes_hash\" prop_input_annexes_hash\n          , testProperty \"input_script_sigs_hash\" prop_input_script_sigs_hash\n          , testProperty \"inputs_hash\" prop_inputs_hash\n          , testProperty \"input_hash\" prop_input_hash\n          , testProperty \"tx_hash\" prop_tx_hash\n          , testProperty \"tap_env_hash\" prop_tap_env_hash\n          , testProperty \"tappath_hash\" prop_tappath_hash\n          , testProperty \"tapleaf_hash\" prop_tapleaf_hash\n          , testProperty \"sig_all_hash\" prop_sig_all_hash\n          , testProperty \"script_cmr\" prop_script_cmr\n          , testProperty \"internal_key\" prop_internal_key\n          , testProperty \"current_index\" prop_current_index\n          , testProperty \"num_inputs\" prop_num_inputs\n          , testProperty \"num_outputs\" prop_num_outputs\n          , testProperty \"lock_time\" prop_lock_time\n          , testProperty \"output_value\" prop_output_value\n          , testProperty \"output_script_hash\" prop_output_script_hash\n          , testProperty \"total_output_value\" prop_total_output_value\n          , testProperty \"current_prev_outpoint\" prop_current_prev_outpoint\n          , testProperty \"current_value\" prop_current_value\n          , testProperty \"current_script_hash\" prop_current_script_hash\n          , testProperty \"current_sequence\" prop_current_sequence\n          , testProperty \"current_annex_hash\" prop_current_annex_hash\n          , testProperty \"current_script_sig_hash\" prop_current_script_sig_hash\n          , testProperty \"input_prev_outpoint\" prop_input_prev_outpoint\n          , testProperty \"input_value\" prop_input_value\n          , testProperty \"input_script_hash\" prop_input_script_hash\n          , testProperty \"input_sequence\" prop_input_sequence\n          , testProperty \"input_annex_hash\" prop_input_annex_hash\n          , testProperty \"input_script_sig_hash\" prop_input_script_sig_hash\n          , testProperty \"total_input_value\" prop_total_input_value\n          , testProperty \"fee\" prop_fee\n          , testProperty \"tapleaf_version\" prop_tapleaf_version\n          , testProperty \"tappath\" prop_tappath\n          , testProperty \"version\" prop_version\n          , testProperty \"transaction_id\" prop_transaction_id\n          ]\n        , testCase \"sigHashAll\" (assertBool \"sigHashAll_matches\" hunit_sigHashAll)\n        ]\n\n-- We use continuations here because we need to ensure that 'fastSpec' is memoized outside of any lambda expressions.\ncheckJet jet k = k (\\env a -> fastSpec env a == implementation jet env a)\n where\n  fastSpec = testEval (specification jet)\n\nprop_tx_is_final :: Property\nprop_tx_is_final = checkJet (BitcoinJet (TimeLockJet TxIsFinal))\n                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_height :: Property\nprop_tx_lock_height = checkJet (BitcoinJet (TimeLockJet TxLockHeight))\n                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_time :: Property\nprop_tx_lock_time = checkJet (BitcoinJet (TimeLockJet TxLockTime))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_distance :: Property\nprop_tx_lock_distance = checkJet (BitcoinJet (TimeLockJet TxLockDistance))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_duration :: Property\nprop_tx_lock_duration = checkJet (BitcoinJet (TimeLockJet TxLockDuration))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_check_lock_height :: Property\nprop_check_lock_height = checkJet (BitcoinJet (TimeLockJet CheckLockHeight))\n                       $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . sigTxLock $ envTx env)\n                                                 $ \\w -> check env (toW32 w)\n\nprop_check_lock_time :: Property\nprop_check_lock_time = checkJet (BitcoinJet (TimeLockJet CheckLockTime))\n                     $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . sigTxLock $ envTx env)\n                                               $ \\w -> check env (toW32 w)\n\nprop_check_lock_distance :: Property\nprop_check_lock_distance = checkJet (BitcoinJet (TimeLockJet CheckLockDistance))\n                         $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . txLockDistance $ env)\n                                                   $ \\w -> check env (toW16 w)\n where\n  txLockDistance env = fromIntegral . fromWord16 . fromJust $ implementation (BitcoinJet (TimeLockJet TxLockDistance)) env () :: Word.Word16\n\nprop_check_lock_duration :: Property\nprop_check_lock_duration = checkJet (BitcoinJet (TimeLockJet CheckLockDuration))\n                         $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . txLockDuration $ env)\n                                                   $ \\w -> check env (toW16 w)\n where\n  txLockDuration env = fromIntegral . fromWord16 . fromJust $ implementation (BitcoinJet (TimeLockJet TxLockDuration)) env () :: Word.Word16\n\nprop_build_tapleaf_simplicity :: HashElement -> Bool\nprop_build_tapleaf_simplicity = \\cmr ->\n  let input = heAsTy cmr in\n  fast_build_tapleaf_simplicity input ==\n    implementation (BitcoinJet (SigHashJet BuildTapleafSimplicity)) undefined input\n where\n  fast_build_tapleaf_simplicity = testCoreEval Prog.buildTapleafSimplicity\n\nprop_build_tapbranch :: HashElement -> HashElement -> Bool\nprop_build_tapbranch = \\a b ->\n  let input = (heAsTy a, heAsTy b) in\n  fast_build_tapbranch input ==\n    implementation (BitcoinJet (SigHashJet BuildTapbranch)) undefined input\n where\n  fast_build_tapbranch = testCoreEval Prog.buildTapbranch\n\nprop_build_taptweak :: FieldElement -> HashElement -> Bool\nprop_build_taptweak = \\a b ->\n  let input = (feAsTy a, heAsTy b) in\n  fast_build_taptweak input ==\n    implementation (BitcoinJet (SigHashJet BuildTaptweak)) undefined input\n where\n  fast_build_taptweak = testCoreEval Prog.buildTaptweak\n\nprop_outpoint_hash :: Sha256CtxElement -> (HashElement, Word.Word32) -> Bool\nprop_outpoint_hash = \\ctx op ->\n  let input = (ctxAsTy ctx, (heAsTy *** (toWord32 . fromIntegral) $ op))\n  in fast_outpoint_hash input == implementation (BitcoinJet (SigHashJet OutpointHash)) undefined input\n where\n  fast_outpoint_hash = testCoreEval Prog.outpointHash\n\nprop_annex_hash :: Sha256CtxElement -> Maybe Word256 -> Bool\nprop_annex_hash = \\ctx mw256 ->\n  let input = (ctxAsTy ctx, cast mw256)\n  in fast_annex_hash input == implementation (BitcoinJet (SigHashJet AnnexHash)) undefined input\n where\n  fast_annex_hash = testCoreEval Prog.annexHash\n  cast = maybe (Left ()) Right\n\nprop_output_values_hash :: Property\nprop_output_values_hash = checkJet (BitcoinJet (SigHashJet OutputValuesHash))\n                         $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_scripts_hash :: Property\nprop_output_scripts_hash = checkJet (BitcoinJet (SigHashJet OutputScriptsHash))\n                         $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_outputs_hash :: Property\nprop_outputs_hash = checkJet (BitcoinJet (SigHashJet OutputsHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_hash :: Property\nprop_output_hash = checkJet (BitcoinJet (SigHashJet OutputHash))\n                  $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_outpoints_hash :: Property\nprop_input_outpoints_hash = checkJet (BitcoinJet (SigHashJet InputOutpointsHash))\n                          $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_values_hash :: Property\nprop_input_values_hash = checkJet (BitcoinJet (SigHashJet InputValuesHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_scripts_hash :: Property\nprop_input_scripts_hash = checkJet (BitcoinJet (SigHashJet InputScriptsHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_utxos_hash :: Property\nprop_input_utxos_hash = checkJet (BitcoinJet (SigHashJet InputUtxosHash))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_utxo_hash :: Property\nprop_input_utxo_hash = checkJet (BitcoinJet (SigHashJet InputUtxoHash))\n                     $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_sequences_hash :: Property\nprop_input_sequences_hash = checkJet (BitcoinJet (SigHashJet InputSequencesHash))\n                          $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_annexes_hash :: Property\nprop_input_annexes_hash = checkJet (BitcoinJet (SigHashJet InputAnnexesHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_script_sigs_hash :: Property\nprop_input_script_sigs_hash = checkJet (BitcoinJet (SigHashJet InputScriptSigsHash))\n                            $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_inputs_hash :: Property\nprop_inputs_hash = checkJet (BitcoinJet (SigHashJet InputsHash))\n                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_hash :: Property\nprop_input_hash = checkJet (BitcoinJet (SigHashJet InputHash))\n                 $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_tx_hash :: Property\nprop_tx_hash = checkJet (BitcoinJet (SigHashJet TxHash))\n             $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tappath_hash :: Property\nprop_tappath_hash = checkJet (BitcoinJet (SigHashJet TappathHash))\n                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tapleaf_hash :: Property\nprop_tapleaf_hash = checkJet (BitcoinJet (SigHashJet TapleafHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tap_env_hash :: Property\nprop_tap_env_hash = checkJet (BitcoinJet (SigHashJet TapEnvHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_sig_all_hash :: Property\nprop_sig_all_hash = checkJet (BitcoinJet (SigHashJet SigAllHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_script_cmr :: Property\nprop_script_cmr = checkJet (BitcoinJet (TransactionJet ScriptCMR))\n                $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_internal_key :: Property\nprop_internal_key = checkJet (BitcoinJet (TransactionJet InternalKey))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_index :: Property\nprop_current_index = checkJet (BitcoinJet (TransactionJet CurrentIndex))\n                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_num_inputs :: Property\nprop_num_inputs = checkJet (BitcoinJet (TransactionJet NumInputs))\n                $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_num_outputs :: Property\nprop_num_outputs = checkJet (BitcoinJet (TransactionJet NumOutputs))\n                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_lock_time :: Property\nprop_lock_time = checkJet (BitcoinJet (TransactionJet LockTime))\n               $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_value :: Property\nprop_output_value = checkJet (BitcoinJet (TransactionJet OutputValue))\n                   $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_output_script_hash :: Property\nprop_output_script_hash = checkJet (BitcoinJet (TransactionJet OutputScriptHash))\n                        $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_total_output_value :: Property\nprop_total_output_value = checkJet (BitcoinJet (TransactionJet TotalOutputValue))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_prev_outpoint :: Property\nprop_current_prev_outpoint = checkJet (BitcoinJet (TransactionJet CurrentPrevOutpoint))\n                           $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_value :: Property\nprop_current_value = checkJet (BitcoinJet (TransactionJet CurrentValue))\n                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_script_hash :: Property\nprop_current_script_hash = checkJet (BitcoinJet (TransactionJet CurrentScriptHash))\n                         $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_sequence :: Property\nprop_current_sequence = checkJet (BitcoinJet (TransactionJet CurrentSequence))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_annex_hash :: Property\nprop_current_annex_hash = checkJet (BitcoinJet (TransactionJet CurrentAnnexHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_script_sig_hash :: Property\nprop_current_script_sig_hash = checkJet (BitcoinJet (TransactionJet CurrentScriptSigHash))\n                             $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_prev_outpoint :: Property\nprop_input_prev_outpoint = checkJet (BitcoinJet (TransactionJet InputPrevOutpoint))\n                         $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_value :: Property\nprop_input_value = checkJet (BitcoinJet (TransactionJet InputValue))\n                  $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_script_hash :: Property\nprop_input_script_hash = checkJet (BitcoinJet (TransactionJet InputScriptHash))\n                       $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_sequence :: Property\nprop_input_sequence = checkJet (BitcoinJet (TransactionJet InputSequence))\n                    $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_annex_hash :: Property\nprop_input_annex_hash = checkJet (BitcoinJet (TransactionJet InputAnnexHash))\n                      $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_script_sig_hash :: Property\nprop_input_script_sig_hash = checkJet (BitcoinJet (TransactionJet InputScriptSigHash))\n                           $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_total_input_value :: Property\nprop_total_input_value = checkJet (BitcoinJet (TransactionJet TotalInputValue))\n                       $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_fee :: Property\nprop_fee = checkJet (BitcoinJet (TransactionJet Fee))\n         $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tapleaf_version :: Property\nprop_tapleaf_version = checkJet (BitcoinJet (TransactionJet TapleafVersion))\n                     $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tappath :: Property\nprop_tappath = checkJet (BitcoinJet (TransactionJet Tappath))\n               $ \\check -> forallPrimEnv $ \\env -> forAll (genTappathIx env) $ \\i -> check env (toW8 i)\n where\n  genTappathIx = genBoundaryCases . fromIntegral . length . tappath . envTap\n\nprop_version :: Property\nprop_version = checkJet (BitcoinJet (TransactionJet Version))\n             $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_transaction_id :: Property\nprop_transaction_id = checkJet (BitcoinJet (TransactionJet TransactionId))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\ntapEnv :: TapEnv\ntapEnv = TapEnv\n         { tapleafVersion = 0xbe\n         , tapInternalKey = Schnorr.PubKey 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n         , tappath = []\n         , tapScriptCMR = review (over be256) 0x896b16e4692350cb43c4807c8f9f63637f70f84a17b678ca9467109ff1e50f61\n         }\n\ntx1 :: SigTx\ntx1 = SigTx\n      { sigTxVersion = 0x00000002\n      , sigTxIn = fromList [input0]\n      , sigTxOut = fromList [output0]\n      , sigTxLock = 0\n      }\n where\n  input0 = SigTxInput\n    { sigTxiPreviousOutpoint = Outpoint (review (over be256) 0xeb04b68e9a26d116046c76e8ff47332fb71dda90ff4bef5370f25226d3bc09fc) 0\n    , sigTxiTxo = TxOutput\n        { txoValue = 10000000000\n        , txoScript = BSL.empty\n        }\n    , sigTxiSequence = 0xfffffffe\n    , sigTxiAnnex = Nothing\n    , sigTxiScriptSig = BSL.empty\n    }\n  output0 = TxOutput\n    { txoValue = 9999996700\n    , txoScript = BSL.pack\n        [ 0x19, 0x76, 0xa9, 0x14, 0x48, 0x63, 0x3e, 0x2c, 0x0e, 0xe9, 0x49, 0x5d, 0xd3, 0xf9, 0xc4, 0x37\n        , 0x32, 0xc4, 0x7f, 0x47, 0x02, 0xa3, 0x62, 0xc8, 0x88, 0xac]\n    }\n\nhunit_sigHashAll :: Bool\nhunit_sigHashAll = Just (integerHash256 sigHashAll_spec) == (fromWord256 <$> (sem (sigHash' Prog.sigAllHash) txEnv ()))\n where\n  ix = 0\n  txo = sigTxiTxo (sigTxIn tx1 ! (fromIntegral ix))\n  Just txEnv = primEnv tx1 ix tapEnv\n  signatureTag = bsHash $ BSC.pack \"Simplicity\\USSignature\"\n  sigHashAll_spec = bslHash . runPutLazy\n                  $ put signatureTag >> put signatureTag\n                 >> put (commitmentRoot Prog.sigAllHash)\n                 >> put (primEnvHash txEnv)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Elements/Arbitrary.hs",
    "content": "-- This module tests the Simplicity programs on arbitrary inputs.\nmodule Simplicity.Elements.Arbitrary\n ( arbitraryHash256, arbitraryLock\n , genPrimEnv, forallPrimEnv, forallInPrimEnv, forallOutPrimEnv\n ) where\n\nimport Data.Bits ((.&.))\nimport qualified Data.ByteString.Char8 as BSC\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.Serialize.Put (runPutLazy, putWord8, putWord16le, putWord32le, putLazyByteString)\nimport Data.Vector (fromList)\nimport Lens.Family2 (review, over)\n\nimport Simplicity.Arbitrary\nimport Simplicity.Digest\nimport Simplicity.Elements.DataTypes\nimport Simplicity.Elements.Primitive\nimport Simplicity.LibSecp256k1.Schnorr\nimport Simplicity.LibSecp256k1.Spec\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Word\n\nimport Test.Tasty.QuickCheck ( Arbitrary(..), Discard(Discard), Gen, Property, Testable\n                             , arbitraryBoundedIntegral, arbitrarySizedBoundedIntegral\n                             , choose, elements, frequency, oneof, listOf, listOf1, suchThat\n                             , forAll, property\n                             )\n\nnonZeroAmount :: AmountWith prf -> Bool\nnonZeroAmount (Amount (Explicit 0)) = False\nnonZeroAmount _ = True\n\narbitraryVersion :: Gen Word32\narbitraryVersion = genBoundaryCases 2\n\narbitraryLock :: Gen Lock\narbitraryLock = genBoundaryCases 500000000\n\narbitraryHash256 :: Gen Hash256\narbitraryHash256 = review (over be256) <$> arbitraryBoundedIntegral\n\narbitraryPoint :: Gen Point\narbitraryPoint = pointAsSpec <$> arbitrary\n\narbitraryBS :: Gen BSL.ByteString\narbitraryBS = BSL.pack <$> listOf arbitrary\n\narbitraryNullData :: Gen BSL.ByteString\narbitraryNullData = BSL.cons op_return . BSL.concat <$> listOf arbitraryDatum\n where\n  op_return = 0x6a\n  arbitraryDatum = oneof $ [immediate, push1, push2, push4] ++ (return . BSL.singleton <$> [0x4f .. 0x60])\n  immediate = do\n   l <- listOf arbitraryBoundedIntegral `suchThat` ((<= 0x4b). length)\n   return . runPutLazy $ putWord8 (fromIntegral (length l)) >> putLazyByteString (BSL.pack l)\n  push1 = do\n   l <- listOf arbitraryBoundedIntegral `suchThat` ((<= 0xff). length)\n   return . runPutLazy $ putWord8 0x4c >> putWord8 (fromIntegral (length l)) >> putLazyByteString (BSL.pack l)\n  push2 = do\n   l <- listOf arbitraryBoundedIntegral `suchThat` ((<= 0xffff). length)\n   return . runPutLazy $ putWord8 0x4d >> putWord16le (fromIntegral (length l)) >> putLazyByteString (BSL.pack l)\n  push4 = do\n   l <- listOf arbitraryBoundedIntegral `suchThat` ((<= 0xffffffff). length)\n   return . runPutLazy $ putWord8 0x4e >> putWord32le (fromIntegral (length l)) >> putLazyByteString (BSL.pack l)\n\narbitraryNonNullData :: Gen BSL.ByteString\narbitraryNonNullData = do\n  nulldata <- arbitraryNullData\n  nondata <- arbitraryBS\n  return $ BSL.append nulldata nondata\n\narbitraryConfidential :: Gen prf -> Gen a -> Gen (Confidential prf a)\narbitraryConfidential genPrf genA = oneof [conf, nonConf]\n   where\n    conf = Confidential <$> arbitraryPoint <*> genPrf\n    nonConf = Explicit <$> genA\n\narbitraryAsset :: Gen Asset\narbitraryAsset = Asset <$> arbitraryConfidential (return ()) arbitraryHash256\n\narbitraryAssetWithWitness :: Gen AssetWithWitness\narbitraryAssetWithWitness = Asset <$> arbitraryConfidential arbitraryBS arbitraryHash256\n\narbitraryAmount :: Gen Amount\narbitraryAmount = Amount <$> arbitraryConfidential (return ()) arbitrarySizedBoundedIntegral\n\narbitraryAmountWithWitness :: Gen AmountWithWitness\narbitraryAmountWithWitness = Amount <$> arbitraryConfidential arbitraryBS arbitrarySizedBoundedIntegral\n\narbitraryFee :: Gen TxOutput\narbitraryFee = TxOutput <$> (Asset . Explicit <$> arbitraryExplicitAsset) <*> (Amount . Explicit <$> arbitrarySizedBoundedIntegral) <*> pure Nothing <*> pure BSL.empty\n where\n  arbitraryExplicitAsset = bsHash . BSC.pack <$> elements\n    [\"Simplicity.Elements.Arbitrary.arbitraryFee.test0\", \"Simplicity.Elements.Arbitrary.arbitraryFee.test1\"]\n\narbitraryGenericOutput :: Gen TxOutput\narbitraryGenericOutput = TxOutput <$> arbitraryAssetWithWitness <*> arbitraryAmountWithWitness <*> arbitrary <*> oneof [pure BSL.empty, arbitraryBS, arbitraryNullData, arbitraryNonNullData]\n\ninstance Arbitrary Nonce where\n  arbitrary = Nonce <$> oneof [Left <$> ((,) <$> arbitrary <*> (fromInteger <$> arbitrary)),  Right <$> arbitraryHash256]\n\ninstance Arbitrary TxOutput where\n  arbitrary = oneof [arbitraryFee, arbitraryGenericOutput]\n\ninstance Arbitrary UTXO where\n  arbitrary = UTXO <$> arbitraryAsset <*> arbitraryAmount <*> arbitraryBS\n\ninstance Arbitrary Outpoint where\n  arbitrary = Outpoint <$> arbitraryHash256 <*> arbitrarySizedBoundedIntegral\n\ninstance Arbitrary NewIssuance where\n  arbitrary = (NewIssuance <$> arbitraryHash256 <*> oneof [return (Amount (Explicit 0)), arbitraryAmountWithWitness]\n                                                <*> oneof [return (Amount (Explicit 0)), arbitraryAmountWithWitness]\n              ) `suchThat` nonZeroIssuance\n   where\n    nonZeroIssuance x = nonZeroAmount (newIssuanceAmount x) || nonZeroAmount (newIssuanceTokenAmount x)\n\ninstance Arbitrary Reissuance where\n  arbitrary = Reissuance <$> arbitraryHash256 <*> arbitraryHash256 <*> (arbitraryAmountWithWitness `suchThat` nonZeroAmount)\n\ninstance Arbitrary SigTxInput where\n  arbitrary = SigTxInput <$> oneof [return Nothing, Just <$> arbitraryHash256]\n                         <*> arbitrary\n                         <*> arbitrary\n                         <*> oneof [return maxBound, arbitraryBoundedIntegral]\n                         <*> arbitrary\n                         <*> oneof [return Nothing, Just <$> arbitraryBS]\n                         <*> arbitraryBS\n\ninstance Arbitrary SigTx where\n  arbitrary = SigTx <$> arbitraryVersion\n                    <*> (fromList <$> listOf1 arbitrary)\n                    <*> (fromList <$> listOf1 arbitrary)\n                    <*> arbitraryLock\n\ninstance Arbitrary TapEnv where\n  arbitrary = TapEnv <$> ((0xfe .&.) <$> arbitraryBoundedIntegral)\n                     <*> (mkPubKey <$> arbitraryPoint)\n                     <*> listOf arbitraryHash256\n                     <*> arbitraryHash256\n   where\n    mkPubKey (Point _ x) = PubKey (fe_pack x)\n\ngenPrimEnv :: Gen (Maybe PrimEnv)\ngenPrimEnv = do\n   tx <- arbitrary\n   tapenv <- arbitrary\n   gen <- arbitraryHash256\n   ix <- fromIntegral <$> choose (0, length (sigTxIn tx) - 1)\n   return $ primEnv tx ix tapenv gen\n\nforallPrimEnv :: Testable prop => (PrimEnv -> prop) -> Property\nforallPrimEnv p = forAll genPrimEnv go\n  where\n   go (Just env) = property $ p env\n   go Nothing = property Discard\n\nforallInPrimEnv :: Testable prop => (PrimEnv -> Word32 -> prop) -> Property\nforallInPrimEnv p = forAll genPrimEnv go\n  where\n   go Nothing = property Discard\n   go (Just env) = forAll genIx $ \\i -> property $ p env i\n    where\n     genIx = fromIntegral <$> genBoundaryCases (length (sigTxIn (envTx env))) -- Generate out of bounds cases too.\n\nforallOutPrimEnv :: Testable prop => (PrimEnv -> Word32 -> prop) -> Property\nforallOutPrimEnv p = forAll genPrimEnv go\n  where\n   go Nothing = property Discard\n   go (Just env) = forAll genIx $ \\i -> property $ p env i\n    where\n     genIx = fromIntegral <$> genBoundaryCases (length (sigTxOut (envTx env))) -- Generate out of bounds cases too.\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Elements/FFI/Primitive.hs",
    "content": "{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.Elements.FFI.Primitive\n  ( decodeJetCMR\n  , ErrorCode(..)\n  ) where\n\nimport Foreign.C.Types (CInt(..))\nimport Foreign.Ptr (Ptr)\nimport Foreign.Marshal.Unsafe (unsafeLocalState)\n\nimport Simplicity.Digest\nimport Simplicity.FFI.Bitstream\nimport Simplicity.FFI.Dag\n\ndata ErrorCode = BitstreamEof | DataOutOfRange deriving (Eq, Show)\n\ndecodeError :: CInt -> Either ErrorCode ()\ndecodeError 0 = Right ()\ndecodeError (-2) = Left DataOutOfRange\ndecodeError (-12) = Left BitstreamEof\ndecodeError err = error $ \"Simplicity.Elements.FFI.Primitive.decodeError: Unexpected error code \" ++ show err\n\nforeign import ccall unsafe \"\" simplicity_elements_decodeJet :: Ptr DagNode -> Ptr Bitstream -> IO CInt\n\ndecodeJetNode :: Ptr Bitstream -> (Either ErrorCode (Ptr DagNode) -> IO a) -> IO a\ndecodeJetNode pstream k =\n  withDagNode $ \\pnode -> do\n  error <- simplicity_elements_decodeJet pnode pstream\n  k (decodeError error >> return pnode)\n\ndecodeJetCMR :: [Bool] -> Either ErrorCode Hash256\ndecodeJetCMR codeWord = unsafeLocalState $\n  initializeBitstream codeWord $ \\pstream ->\n  decodeJetNode pstream $ \\result ->\n  case result of\n    Left err -> return $ Left err\n    Right pnode -> Right <$> dagNodeGetCMR pnode\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Elements/FFI/Tests.hs",
    "content": "module Simplicity.Elements.FFI.Tests (tests) where\n\nimport Control.Arrow ((***), (+++))\nimport qualified Data.Map as Map\nimport Data.Maybe (fromMaybe, isJust)\nimport Data.Vector ((!?))\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit (Assertion, (@?=), testCase)\nimport Test.Tasty.QuickCheck (NonNegative(..), Property, classify, forAll, testProperty)\nimport Lens.Family2 (under, view)\n\nimport Simplicity.Arbitrary\nimport Simplicity.Digest\nimport Simplicity.Elements.Arbitrary\nimport qualified Simplicity.Elements.DataTypes as Prim\nimport Simplicity.Elements.FFI.Jets\nimport Simplicity.Elements.Jets\nimport qualified Simplicity.Elements.Primitive as Prim\nimport Simplicity.Elements.Semantics\nimport Simplicity.Elements.TestEval\nimport Simplicity.FFI.Jets\nimport qualified Simplicity.Programs.Elements.Lib as Prog\nimport Simplicity.TestCoreEval\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as Word\n\ntoW32 :: Word.Word32 -> Word32\ntoW32 = toWord32 . fromIntegral\n\ntoW8 :: Word.Word8 -> Word8\ntoW8 = toWord8 . fromIntegral\n\ntests :: TestTree\ntests = testGroup \"Elements\"\n        [ testGroup \"Jets\"\n          [ testProperty \"tx_is_final\" prop_tx_is_final\n          , testProperty \"tx_lock_height\" prop_tx_lock_height\n          , testProperty \"tx_lock_time\" prop_tx_lock_time\n          , testProperty \"tx_lock_distance\" prop_tx_lock_distance\n          , testProperty \"tx_lock_duration\" prop_tx_lock_duration\n          , testProperty \"check_lock_height\" prop_check_lock_height\n          , testProperty \"check_lock_time\" prop_check_lock_time\n          , testProperty \"check_lock_distance\" prop_check_lock_distance\n          , testProperty \"check_lock_duration\" prop_check_lock_duration\n          , testProperty \"calculate_issuance_entropy\" prop_calculate_issuance_entropy\n          , testProperty \"calculate_asset\" prop_calculate_asset\n          , testProperty \"calculate_explicit_token\" prop_calculate_explicit_token\n          , testProperty \"calculate_confidential_token\" prop_calculate_confidential_token\n          , testProperty \"outpoint_hash\" prop_outpoint_hash\n          , testProperty \"asset_amount_hash\" prop_asset_amount_hash\n          , testProperty \"nonce_hash\" prop_nonce_hash\n          , testProperty \"annex_hash\" prop_annex_hash\n          , testProperty \"build_tapleaf_simplicity\" prop_build_tapleaf_simplicity\n          , testProperty \"build_tapbranch\" prop_build_tapbranch\n          , testProperty \"build_taptweak\" prop_build_taptweak\n          , testProperty \"issuance\" prop_issuance\n          , testProperty \"issuance_asset\" prop_issuance_asset\n          , testProperty \"issuance_token\" prop_issuance_token\n          , testProperty \"issuance_entropy\" prop_issuance_entropy\n          , testProperty \"output_amounts_hash\" prop_output_amounts_hash\n          , testProperty \"output_nonces_hash\" prop_output_nonces_hash\n          , testProperty \"output_scripts_hash\" prop_output_scripts_hash\n          , testProperty \"output_range_proofs_hash\" prop_output_range_proofs_hash\n          , testProperty \"output_surjection_proofs_hash\" prop_output_surjection_proofs_hash\n          , testProperty \"outputs_hash\" prop_outputs_hash\n          , testProperty \"output_hash\" prop_output_hash\n          , testProperty \"input_outpoints_hash\" prop_input_outpoints_hash\n          , testProperty \"input_amounts_hash\" prop_input_amounts_hash\n          , testProperty \"input_scripts_hash\" prop_input_scripts_hash\n          , testProperty \"input_utxos_hash\" prop_input_utxos_hash\n          , testProperty \"input_utxo_hash\" prop_input_utxo_hash\n          , testProperty \"input_sequences_hash\" prop_input_sequences_hash\n          , testProperty \"input_annexes_hash\" prop_input_annexes_hash\n          , testProperty \"input_script_sigs_hash\" prop_input_script_sigs_hash\n          , testProperty \"inputs_hash\" prop_inputs_hash\n          , testProperty \"input_hash\" prop_input_hash\n          , testProperty \"issuance_asset_amounts_hash\" prop_issuance_asset_amounts_hash\n          , testProperty \"issuance_token_amounts_hash\" prop_issuance_token_amounts_hash\n          , testProperty \"issuance_range_proofs_hash\" prop_issuance_range_proofs_hash\n          , testProperty \"issuance_blinding_entropy_hash\" prop_issuance_blinding_entropy_hash\n          , testProperty \"issuances_hash\" prop_issuances_hash\n          , testProperty \"issuance_hash\" prop_issuance_hash\n          , testProperty \"tx_hash\" prop_tx_hash\n          , testProperty \"tapleaf_hash\" prop_tapleaf_hash\n          , testProperty \"tappath_hash\" prop_tappath_hash\n          , testProperty \"tap_env_hash\" prop_tap_env_hash\n          , testProperty \"sig_all_hash\" prop_sig_all_hash\n          , testCase \"lbtc_asset\" assert_lbtc_asset\n          ]\n        , testGroup \"Transaction\"\n          [ testProperty \"script_cmr\" prop_script_cmr\n          , testProperty \"internal_key\" prop_internal_key\n          , testProperty \"current_index\" prop_current_index\n          , testProperty \"num_inputs\" prop_num_inputs\n          , testProperty \"num_outputs\" prop_num_outputs\n          , testProperty \"lock_time\" prop_lock_time\n          , testProperty \"output_asset\" prop_output_asset\n          , testProperty \"output_amount\" prop_output_amount\n          , testProperty \"output_nonce\" prop_output_nonce\n          , testProperty \"output_script_hash\" prop_output_script_hash\n          , testProperty \"output_null_datum\" prop_output_null_datum\n          , testProperty \"output_is_fee\" prop_output_is_fee\n          , testProperty \"output_surjection_proof\" prop_output_surjection_proof\n          , testProperty \"output_range_proof\" prop_output_range_proof\n          , testProperty \"total_fee\" prop_total_fee\n          , testProperty \"current_pegin\" prop_current_pegin\n          , testProperty \"current_prev_outpoint\" prop_current_prev_outpoint\n          , testProperty \"current_asset\" prop_current_asset\n          , testProperty \"current_amount\" prop_current_amount\n          , testProperty \"current_script_hash\" prop_current_script_hash\n          , testProperty \"current_sequence\" prop_current_sequence\n          , testProperty \"current_annex_hash\" prop_current_annex_hash\n          , testProperty \"current_script_sig_hash\" prop_current_script_sig_hash\n          , testProperty \"current_reissuance_blinding\" prop_current_reissuance_blinding\n          , testProperty \"current_new_issuance_contract\" prop_current_new_issuance_contract\n          , testProperty \"current_reissuance_entropy\" prop_current_reissuance_entropy\n          , testProperty \"current_issuance_asset_amount\" prop_current_issuance_asset_amount\n          , testProperty \"current_issuance_token_amount\" prop_current_issuance_token_amount\n          , testProperty \"current_issuance_asset_proof\" prop_current_issuance_asset_proof\n          , testProperty \"current_issuance_token_proof\" prop_current_issuance_token_proof\n          , testProperty \"input_pegin\" prop_input_pegin\n          , testProperty \"input_prev_outpoint\" prop_input_prev_outpoint\n          , testProperty \"input_asset\" prop_input_asset\n          , testProperty \"input_amount\" prop_input_amount\n          , testProperty \"input_script_hash\" prop_input_script_hash\n          , testProperty \"input_sequence\" prop_input_sequence\n          , testProperty \"input_annex_hash\" prop_input_annex_hash\n          , testProperty \"input_script_sig_hash\" prop_input_script_sig_hash\n          , testProperty \"reissuance_blinding\" prop_reissuance_blinding\n          , testProperty \"new_issuance_contract\" prop_new_issuance_contract\n          , testProperty \"reissuance_entropy\" prop_reissuance_entropy\n          , testProperty \"issuance_asset_amount\" prop_issuance_asset_amount\n          , testProperty \"issuance_token_amount\" prop_issuance_token_amount\n          , testProperty \"issuance_asset_proof\" prop_issuance_asset_proof\n          , testProperty \"issuance_token_proof\" prop_issuance_token_proof\n          , testProperty \"tapleaf_version\" prop_tapleaf_version\n          , testProperty \"tappath\" prop_tappath\n          , testProperty \"version\" prop_version\n          , testProperty \"genesis_block_hash\" prop_genesis_block_hash\n          , testProperty \"transaction_id\" prop_transaction_id\n          ]\n        ]\n\nprop_tx_is_final :: Property\nprop_tx_is_final = forallPrimEnv $ \\env -> fast_tx_is_final env () == tx_is_final env ()\n where\n  fast_tx_is_final = testEval (specification (ElementsJet (TimeLockJet TxIsFinal)))\n\nprop_tx_lock_height :: Property\nprop_tx_lock_height = forallPrimEnv $ \\env -> fast_tx_lock_height env () == tx_lock_height env ()\n where\n  fast_tx_lock_height = testEval (specification (ElementsJet (TimeLockJet TxLockHeight)))\n\nprop_tx_lock_time :: Property\nprop_tx_lock_time = forallPrimEnv $ \\env -> fast_tx_lock_time env () == tx_lock_time env ()\n where\n  fast_tx_lock_time = testEval (specification (ElementsJet (TimeLockJet TxLockTime)))\n\nprop_tx_lock_distance :: Property\nprop_tx_lock_distance = forallPrimEnv $ \\env -> fast_tx_lock_distance env () == broken_do_not_use_tx_lock_distance env ()\n where\n  fast_tx_lock_distance = testEval (specification (ElementsJet (TimeLockJet BrokenDoNotUseTxLockDistance)))\n\nprop_tx_lock_duration :: Property\nprop_tx_lock_duration = forallPrimEnv $ \\env -> fast_tx_lock_duration env () == broken_do_not_use_tx_lock_duration env ()\n where\n  fast_tx_lock_duration = testEval (specification (ElementsJet (TimeLockJet BrokenDoNotUseTxLockDuration)))\n\nprop_check_lock_height :: Word32 -> Property\nprop_check_lock_height = \\w -> forallPrimEnv $ \\env -> fast_check_lock_height env w == check_lock_height env w\n where\n  fast_check_lock_height = testEval (specification (ElementsJet (TimeLockJet CheckLockHeight)))\n\nprop_check_lock_time :: Word32 -> Property\nprop_check_lock_time = \\w -> forallPrimEnv $ \\env -> fast_check_lock_time env w == check_lock_time env w\n where\n  fast_check_lock_time = testEval (specification (ElementsJet (TimeLockJet CheckLockTime)))\n\nprop_check_lock_distance :: Word16 -> Property\nprop_check_lock_distance = \\w -> forallPrimEnv $ \\env -> fast_check_lock_distance env w == broken_do_not_use_check_lock_distance env w\n where\n  fast_check_lock_distance = testEval (specification (ElementsJet (TimeLockJet BrokenDoNotUseCheckLockDistance)))\n\nprop_check_lock_duration :: Word16 -> Property\nprop_check_lock_duration = \\w -> forallPrimEnv $ \\env -> fast_check_lock_duration env w == broken_do_not_use_check_lock_duration env w\n where\n  fast_check_lock_duration = testEval (specification (ElementsJet (TimeLockJet BrokenDoNotUseCheckLockDuration)))\n\nprop_calculate_issuance_entropy :: ((Word256, Word32), Word256) -> Bool\nprop_calculate_issuance_entropy = \\input ->\n  calculate_issuance_entropy input == fast_calculate_issuance_entropy input\n where\n  fast_calculate_issuance_entropy = testCoreEval Prog.calculateIssuanceEntropy\n\nprop_calculate_asset :: Word256 -> Bool\nprop_calculate_asset = \\input ->\n  calculate_asset input == fast_calculate_asset input\n where\n  fast_calculate_asset = testCoreEval Prog.calculateAsset\n\nprop_calculate_explicit_token :: Word256 -> Bool\nprop_calculate_explicit_token = \\input ->\n  calculate_explicit_token input == fast_calculate_explicit_token input\n where\n  fast_calculate_explicit_token = testCoreEval Prog.calculateExplicitToken\n\nprop_calculate_confidential_token :: Word256 -> Bool\nprop_calculate_confidential_token = \\input ->\n  calculate_confidential_token input == fast_calculate_confidential_token input\n where\n  fast_calculate_confidential_token = testCoreEval Prog.calculateConfidentialToken\n\nprop_outpoint_hash :: Sha256CtxElement -> (Either () Word256, (Word256, Word32)) -> Bool\nprop_outpoint_hash = \\ctx op ->\n  let input = (ctxAsTy ctx, op)\n  in outpoint_hash input == fast_outpoint_hash input\n where\n  fast_outpoint_hash = testCoreEval Prog.outpointHash\n\nprop_asset_amount_hash :: Sha256CtxElement -> Either PointElement Word256 -> Either PointElement Word64 -> Bool\nprop_asset_amount_hash = \\ctx cw256 cw64 ->\n  let input = (ctxAsTy ctx, (cast cw256, cast cw64))\n  in asset_amount_hash input == fast_asset_amount_hash input\n where\n  fast_asset_amount_hash = testCoreEval Prog.assetAmountHash\n  cast = either (Left . pointAsTy) Right\n\nprop_nonce_hash :: Sha256CtxElement -> Maybe Prim.Nonce -> Bool\nprop_nonce_hash = \\ctx mnonce ->\n  let input = (ctxAsTy ctx, cast mnonce)\n  in nonce_hash input == fast_nonce_hash input\n where\n  fast_nonce_hash = testCoreEval Prog.nonceHash\n  cast = maybe (Left ()) (Right . ((toBit *** (toWord256 . fromIntegral)) +++ (toWord256 . integerHash256)) . Prim.nonce)\n\nprop_annex_hash :: Sha256CtxElement -> Maybe Word256 -> Bool\nprop_annex_hash = \\ctx mw256 ->\n  let input = (ctxAsTy ctx, cast mw256)\n  in annex_hash input == fast_annex_hash input\n where\n  fast_annex_hash = testCoreEval Prog.annexHash\n  cast = maybe (Left ()) Right\n\nprop_build_tapleaf_simplicity :: Word256 -> Bool\nprop_build_tapleaf_simplicity = \\w ->\n  build_tapleaf_simplicity w == fast_build_tapleaf_simplicity w\n where\n  fast_build_tapleaf_simplicity = testCoreEval Prog.buildTapleafSimplicity\n\nprop_build_tapbranch :: Word256 -> Word256 -> Bool\nprop_build_tapbranch = \\a b ->\n  build_tapbranch (a, b) == fast_build_tapbranch (a, b)\n where\n  fast_build_tapbranch = testCoreEval Prog.buildTapbranch\n\nprop_build_taptweak :: FieldElement -> Word256 -> Bool\nprop_build_taptweak = \\a b ->\n  let input = (feAsTy a, b) in\n  build_taptweak input == fast_build_taptweak input\n where\n  fast_build_taptweak = testCoreEval Prog.buildTaptweak\n\nprop_issuance :: Property\nprop_issuance = forallInPrimEnv $ \\env i ->\n   fast_issuance env (toW32 i) == issuance env (toW32 i)\n where\n  fast_issuance = testEval (specification (ElementsJet (IssuanceJet Issuance)))\n\nprop_issuance_asset :: Property\nprop_issuance_asset = forallInPrimEnv $ \\env i ->\n   fast_issuance_asset env (toW32 i) == issuance_asset env (toW32 i)\n where\n  fast_issuance_asset = testEval (specification (ElementsJet (IssuanceJet IssuanceAsset)))\n\nprop_issuance_token :: Property\nprop_issuance_token = forallInPrimEnv $ \\env i ->\n   fast_issuance_token env (toW32 i) == issuance_token env (toW32 i)\n where\n  fast_issuance_token = testEval (specification (ElementsJet (IssuanceJet IssuanceToken)))\n\nprop_issuance_entropy :: Property\nprop_issuance_entropy = forallInPrimEnv $ \\env i ->\n   fast_issuance_entropy env (toW32 i) == issuance_entropy env (toW32 i)\n where\n  fast_issuance_entropy = testEval (specification (ElementsJet (IssuanceJet IssuanceEntropy)))\n\nprop_output_amounts_hash :: Property\nprop_output_amounts_hash = forallPrimEnv $ \\env -> fast_output_amounts_hash env () == output_amounts_hash env ()\n where\n  fast_output_amounts_hash = testEval (specification (ElementsJet (SigHashJet OutputAmountsHash)))\n\nprop_output_nonces_hash :: Property\nprop_output_nonces_hash = forallPrimEnv $ \\env -> fast_output_nonces_hash env () == output_nonces_hash env ()\n where\n  fast_output_nonces_hash = testEval (specification (ElementsJet (SigHashJet OutputNoncesHash)))\n\nprop_output_scripts_hash :: Property\nprop_output_scripts_hash = forallPrimEnv $ \\env -> fast_output_scripts_hash env () == output_scripts_hash env ()\n where\n  fast_output_scripts_hash = testEval (specification (ElementsJet (SigHashJet OutputScriptsHash)))\n\nprop_output_range_proofs_hash :: Property\nprop_output_range_proofs_hash = forallPrimEnv $ \\env -> fast_output_range_proofs_hash env () == output_range_proofs_hash env ()\n where\n  fast_output_range_proofs_hash = testEval (specification (ElementsJet (SigHashJet OutputRangeProofsHash)))\n\nprop_output_surjection_proofs_hash :: Property\nprop_output_surjection_proofs_hash = forallPrimEnv $ \\env -> fast_output_surjection_proofs_hash env () == output_surjection_proofs_hash env ()\n where\n  fast_output_surjection_proofs_hash = testEval (specification (ElementsJet (SigHashJet OutputSurjectionProofsHash)))\n\nprop_outputs_hash :: Property\nprop_outputs_hash = forallPrimEnv $ \\env -> fast_outputs_hash env () == outputs_hash env ()\n where\n  fast_outputs_hash = testEval (specification (ElementsJet (SigHashJet OutputsHash)))\n\nprop_output_hash :: Property\nprop_output_hash = forallOutPrimEnv $ \\env i -> fast_output_hash env (toW32 i) == output_hash env (toW32 i)\n where\n  fast_output_hash = testEval (specification (ElementsJet (SigHashJet OutputHash)))\n\nprop_input_outpoints_hash :: Property\nprop_input_outpoints_hash = forallPrimEnv $ \\env -> fast_input_outpoints_hash env () == input_outpoints_hash env ()\n where\n  fast_input_outpoints_hash = testEval (specification (ElementsJet (SigHashJet InputOutpointsHash)))\n\nprop_input_amounts_hash :: Property\nprop_input_amounts_hash = forallPrimEnv $ \\env -> fast_input_amounts_hash env () == input_amounts_hash env ()\n where\n  fast_input_amounts_hash = testEval (specification (ElementsJet (SigHashJet InputAmountsHash)))\n\nprop_input_scripts_hash :: Property\nprop_input_scripts_hash = forallPrimEnv $ \\env -> fast_input_scripts_hash env () == input_scripts_hash env ()\n where\n  fast_input_scripts_hash = testEval (specification (ElementsJet (SigHashJet InputScriptsHash)))\n\nprop_input_utxos_hash :: Property\nprop_input_utxos_hash = forallPrimEnv $ \\env -> fast_input_utxos_hash env () == input_utxos_hash env ()\n where\n  fast_input_utxos_hash = testEval (specification (ElementsJet (SigHashJet InputUtxosHash)))\n\nprop_input_utxo_hash :: Property\nprop_input_utxo_hash = forallInPrimEnv $ \\env i -> fast_input_utxo_hash env (toW32 i) == input_utxo_hash env (toW32 i)\n where\n  fast_input_utxo_hash = testEval (specification (ElementsJet (SigHashJet InputUtxoHash)))\n\nprop_input_sequences_hash :: Property\nprop_input_sequences_hash = forallPrimEnv $ \\env -> fast_input_sequences_hash env () == input_sequences_hash env ()\n where\n  fast_input_sequences_hash = testEval (specification (ElementsJet (SigHashJet InputSequencesHash)))\n\nprop_input_annexes_hash :: Property\nprop_input_annexes_hash = forallPrimEnv $ \\env -> fast_input_annexes_hash env () == input_annexes_hash env ()\n where\n  fast_input_annexes_hash = testEval (specification (ElementsJet (SigHashJet InputAnnexesHash)))\n\nprop_input_script_sigs_hash :: Property\nprop_input_script_sigs_hash = forallPrimEnv $ \\env -> fast_input_script_sigs_hash env () == input_script_sigs_hash env ()\n where\n  fast_input_script_sigs_hash = testEval (specification (ElementsJet (SigHashJet InputScriptSigsHash)))\n\nprop_inputs_hash :: Property\nprop_inputs_hash = forallPrimEnv $ \\env -> fast_inputs_hash env () == inputs_hash env ()\n where\n  fast_inputs_hash = testEval (specification (ElementsJet (SigHashJet InputsHash)))\n\nprop_input_hash :: Property\nprop_input_hash = forallInPrimEnv $ \\env i -> fast_input_hash env (toW32 i) == input_hash env (toW32 i)\n where\n  fast_input_hash = testEval (specification (ElementsJet (SigHashJet InputHash)))\n\nprop_issuance_asset_amounts_hash :: Property\nprop_issuance_asset_amounts_hash = forallPrimEnv $ \\env -> fast_issuance_asset_amounts_hash env () == issuance_asset_amounts_hash env ()\n where\n  fast_issuance_asset_amounts_hash = testEval (specification (ElementsJet (SigHashJet IssuanceAssetAmountsHash)))\n\nprop_issuance_token_amounts_hash :: Property\nprop_issuance_token_amounts_hash = forallPrimEnv $ \\env -> fast_issuance_token_amounts_hash env () == issuance_token_amounts_hash env ()\n where\n  fast_issuance_token_amounts_hash = testEval (specification (ElementsJet (SigHashJet IssuanceTokenAmountsHash)))\n\nprop_issuance_range_proofs_hash :: Property\nprop_issuance_range_proofs_hash = forallPrimEnv $ \\env -> fast_issuance_range_proofs_hash env () == issuance_range_proofs_hash env ()\n where\n  fast_issuance_range_proofs_hash = testEval (specification (ElementsJet (SigHashJet IssuanceRangeProofsHash)))\n\nprop_issuance_blinding_entropy_hash :: Property\nprop_issuance_blinding_entropy_hash = forallPrimEnv $ \\env -> fast_issuance_blinding_entropy_hash env () == issuance_blinding_entropy_hash env ()\n where\n  fast_issuance_blinding_entropy_hash = testEval (specification (ElementsJet (SigHashJet IssuanceBlindingEntropyHash)))\n\nprop_issuances_hash :: Property\nprop_issuances_hash = forallPrimEnv $ \\env -> fast_issuances_hash env () == issuances_hash env ()\n where\n  fast_issuances_hash = testEval (specification (ElementsJet (SigHashJet IssuancesHash)))\n\nprop_issuance_hash :: Property\nprop_issuance_hash = forallInPrimEnv $ \\env i -> fast_issuance_hash env (toW32 i) == issuance_hash env (toW32 i)\n where\n  fast_issuance_hash = testEval (specification (ElementsJet (SigHashJet IssuanceHash)))\n\nprop_tx_hash :: Property\nprop_tx_hash = forallPrimEnv $ \\env -> fast_tx_hash env () == tx_hash env ()\n where\n  fast_tx_hash = testEval (specification (ElementsJet (SigHashJet TxHash)))\n\nprop_tapleaf_hash :: Property\nprop_tapleaf_hash = forallPrimEnv $ \\env -> fast_tapleaf_hash env () == tapleaf_hash env ()\n where\n  fast_tapleaf_hash = testEval (specification (ElementsJet (SigHashJet TapleafHash)))\n\nprop_tappath_hash :: Property\nprop_tappath_hash = forallPrimEnv $ \\env -> fast_tappath_hash env () == tappath_hash env ()\n where\n  fast_tappath_hash = testEval (specification (ElementsJet (SigHashJet TappathHash)))\n\nprop_tap_env_hash :: Property\nprop_tap_env_hash = forallPrimEnv $ \\env -> fast_tap_env_hash env () == tap_env_hash env ()\n where\n  fast_tap_env_hash = testEval (specification (ElementsJet (SigHashJet TapEnvHash)))\n\nprop_sig_all_hash :: Property\nprop_sig_all_hash = forallPrimEnv $ \\env -> fast_sig_all_hash env () == sig_all_hash env ()\n where\n  fast_sig_all_hash = testEval (specification (ElementsJet (SigHashJet SigAllHash)))\n\nassert_lbtc_asset :: Assertion\nassert_lbtc_asset =\n  lbtc_asset () @?= fast_lbtc_asset ()\n where\n  fast_lbtc_asset = testCoreEval Prog.lbtcAsset\n\nprop_script_cmr :: Property\nprop_script_cmr = forallPrimEnv $ \\env -> fast_script_cmr env () == script_cmr env ()\n where\n  fast_script_cmr = testEval (specification (ElementsJet (TransactionJet ScriptCMR)))\n\nprop_internal_key :: Property\nprop_internal_key = forallPrimEnv $ \\env -> fast_internal_key env () == internal_key env ()\n where\n  fast_internal_key = testEval (specification (ElementsJet (TransactionJet InternalKey)))\n\nprop_current_index :: Property\nprop_current_index = forallPrimEnv $ \\env -> fast_current_index env () == current_index env ()\n where\n  fast_current_index = testEval (specification (ElementsJet (TransactionJet CurrentIndex)))\n\nprop_num_inputs :: Property\nprop_num_inputs = forallPrimEnv $ \\env -> fast_num_inputs env () == num_inputs env ()\n where\n  fast_num_inputs = testEval (specification (ElementsJet (TransactionJet NumInputs)))\n\nprop_num_outputs :: Property\nprop_num_outputs = forallPrimEnv $ \\env -> fast_num_outputs env () == num_outputs env ()\n where\n  fast_num_outputs = testEval (specification (ElementsJet (TransactionJet NumOutputs)))\n\nprop_lock_time :: Property\nprop_lock_time = forallPrimEnv $ \\env -> fast_lock_time env () == lock_time env ()\n where\n  fast_lock_time = testEval (specification (ElementsJet (TransactionJet LockTime)))\n\nprop_output_asset :: Property\nprop_output_asset = forallOutPrimEnv $ \\env i -> fast_output_asset env (toW32 i) == output_asset env (toW32 i)\n where\n  fast_output_asset = testEval (specification (ElementsJet (TransactionJet OutputAsset)))\n\nprop_output_amount :: Property\nprop_output_amount = forallOutPrimEnv $ \\env i -> fast_output_amount env (toW32 i) == output_amount env (toW32 i)\n where\n  fast_output_amount = testEval (specification (ElementsJet (TransactionJet OutputAmount)))\n\nprop_output_nonce :: Property\nprop_output_nonce = forallOutPrimEnv $ \\env i -> fast_output_nonce env (toW32 i) == output_nonce env (toW32 i)\n where\n  fast_output_nonce = testEval (specification (ElementsJet (TransactionJet OutputNonce)))\n\nprop_output_script_hash :: Property\nprop_output_script_hash = forallOutPrimEnv $ \\env i -> fast_output_script_hash env (toW32 i) == output_script_hash env (toW32 i)\n where\n  fast_output_script_hash = testEval (specification (ElementsJet (TransactionJet OutputScriptHash)))\n\nprop_output_null_datum :: NonNegative Integer -> Property\nprop_output_null_datum = \\(NonNegative j) -> forallOutPrimEnv $ \\env i -> fast_output_null_datum env (toW32 i, toWord32 j) == output_null_datum env (toW32 i, toWord32 j)\n where\n  fast_output_null_datum = testEval (specification (ElementsJet (TransactionJet OutputNullDatum)))\n\nprop_output_is_fee :: Property\nprop_output_is_fee = forallOutPrimEnv $ \\env i ->\n  classify (isJust $ Prim.sigTxOut (Prim.envTx env) !? (fromIntegral i) >>= Prim.outputFee) \"is_fee\"\n  $ fast_output_is_fee env (toW32 i) == output_is_fee env (toW32 i)\n where\n  fast_output_is_fee = testEval (specification (ElementsJet (TransactionJet OutputIsFee)))\n\nprop_output_surjection_proof :: Property\nprop_output_surjection_proof = forallOutPrimEnv $ \\env i -> fast_output_surjection_proof env (toW32 i) == output_surjection_proof env (toW32 i)\n where\n  fast_output_surjection_proof = testEval (specification (ElementsJet (TransactionJet OutputSurjectionProof)))\n\nprop_output_range_proof :: Property\nprop_output_range_proof = forallOutPrimEnv $ \\env i -> fast_output_range_proof env (toW32 i) == output_range_proof env (toW32 i)\n where\n  fast_output_range_proof = testEval (specification (ElementsJet (TransactionJet OutputRangeProof)))\n\nprop_total_fee :: Property\nprop_total_fee = forallOutPrimEnv $ \\env i -> forAll arbitraryHash256\n               $ \\hash -> let input = fromMaybe hash (getAssetId (Prim.sigTxOut (Prim.envTx env)) (fromIntegral i))\n                              fee = Map.findWithDefault 0 input (Prim.totalFee (Prim.envTx env))\n                          in classify (0 /= fee) \"non-zero fee\"\n               $ fast_total_fee env (fromHash input) == total_fee env (fromHash input)\n where\n  fast_total_fee = testEval (specification (ElementsJet (TransactionJet TotalFee)))\n  getAssetId outputs ix = (outputs !? ix) >>= explicitId . view (under Prim.asset) . Prim.txoAsset\n  explicitId (Prim.Explicit a) = Just a\n  explicitId (Prim.Confidential _ _) = Nothing\n  fromHash = toWord256 . integerHash256\n\nprop_current_pegin :: Property\nprop_current_pegin = forallPrimEnv $ \\env -> fast_current_pegin env () == current_pegin env ()\n where\n  fast_current_pegin = testEval (specification (ElementsJet (TransactionJet CurrentPegin)))\n\nprop_current_prev_outpoint :: Property\nprop_current_prev_outpoint = forallPrimEnv $ \\env -> fast_current_prev_outpoint env () == current_prev_outpoint env ()\n where\n  fast_current_prev_outpoint = testEval (specification (ElementsJet (TransactionJet CurrentPrevOutpoint)))\n\nprop_current_asset :: Property\nprop_current_asset = forallPrimEnv $ \\env -> fast_current_asset env () == current_asset env ()\n where\n  fast_current_asset = testEval (specification (ElementsJet (TransactionJet CurrentAsset)))\n\nprop_current_amount :: Property\nprop_current_amount = forallPrimEnv $ \\env -> fast_current_amount env () == current_amount env ()\n where\n  fast_current_amount = testEval (specification (ElementsJet (TransactionJet CurrentAmount)))\n\nprop_current_script_hash :: Property\nprop_current_script_hash = forallPrimEnv $ \\env -> fast_current_script_hash env () == current_script_hash env ()\n where\n  fast_current_script_hash = testEval (specification (ElementsJet (TransactionJet CurrentScriptHash)))\n\nprop_current_sequence :: Property\nprop_current_sequence = forallPrimEnv $ \\env -> fast_current_sequence env () == current_sequence env ()\n where\n  fast_current_sequence = testEval (specification (ElementsJet (TransactionJet CurrentSequence)))\n\nprop_current_annex_hash :: Property\nprop_current_annex_hash = forallPrimEnv $ \\env -> fast_current_annex_hash env () == current_annex_hash env ()\n where\n  fast_current_annex_hash = testEval (specification (ElementsJet (TransactionJet CurrentAnnexHash)))\n\nprop_current_script_sig_hash :: Property\nprop_current_script_sig_hash = forallPrimEnv $ \\env -> fast_current_script_sig_hash env () == current_script_sig_hash env ()\n where\n  fast_current_script_sig_hash = testEval (specification (ElementsJet (TransactionJet CurrentScriptSigHash)))\n\nprop_current_reissuance_blinding :: Property\nprop_current_reissuance_blinding = forallPrimEnv $ \\env -> fast_current_reissuance_blinding env () == current_reissuance_blinding env ()\n where\n  fast_current_reissuance_blinding = testEval (specification (ElementsJet (TransactionJet CurrentReissuanceBlinding)))\n\nprop_current_new_issuance_contract :: Property\nprop_current_new_issuance_contract = forallPrimEnv $ \\env -> fast_current_new_issuance_contract env () == current_new_issuance_contract env ()\n where\n  fast_current_new_issuance_contract = testEval (specification (ElementsJet (TransactionJet CurrentNewIssuanceContract)))\n\nprop_current_reissuance_entropy :: Property\nprop_current_reissuance_entropy = forallPrimEnv $ \\env -> fast_current_reissuance_entropy env () == current_reissuance_entropy env ()\n where\n  fast_current_reissuance_entropy = testEval (specification (ElementsJet (TransactionJet CurrentReissuanceEntropy)))\n\nprop_current_issuance_asset_amount :: Property\nprop_current_issuance_asset_amount = forallPrimEnv $ \\env -> fast_current_issuance_asset_amount env () == current_issuance_asset_amount env ()\n where\n  fast_current_issuance_asset_amount = testEval (specification (ElementsJet (TransactionJet CurrentIssuanceAssetAmount)))\n\nprop_current_issuance_token_amount :: Property\nprop_current_issuance_token_amount = forallPrimEnv $ \\env -> fast_current_issuance_token_amount env () == current_issuance_token_amount env ()\n where\n  fast_current_issuance_token_amount = testEval (specification (ElementsJet (TransactionJet CurrentIssuanceTokenAmount)))\n\nprop_current_issuance_asset_proof :: Property\nprop_current_issuance_asset_proof = forallPrimEnv $ \\env -> fast_current_issuance_asset_proof env () == current_issuance_asset_proof env ()\n where\n  fast_current_issuance_asset_proof = testEval (specification (ElementsJet (TransactionJet CurrentIssuanceAssetProof)))\n\nprop_current_issuance_token_proof :: Property\nprop_current_issuance_token_proof = forallPrimEnv $ \\env -> fast_current_issuance_token_proof env () == current_issuance_token_proof env ()\n where\n  fast_current_issuance_token_proof = testEval (specification (ElementsJet (TransactionJet CurrentIssuanceTokenProof)))\n\nprop_input_pegin :: Property\nprop_input_pegin = forallInPrimEnv $ \\env i -> fast_input_pegin env (toW32 i) == input_pegin env (toW32 i)\n where\n  fast_input_pegin = testEval (specification (ElementsJet (TransactionJet InputPegin)))\n\nprop_input_prev_outpoint :: Property\nprop_input_prev_outpoint = forallInPrimEnv $ \\env i -> fast_input_prev_outpoint env (toW32 i) == input_prev_outpoint env (toW32 i)\n where\n  fast_input_prev_outpoint = testEval (specification (ElementsJet (TransactionJet InputPrevOutpoint)))\n\nprop_input_asset :: Property\nprop_input_asset = forallInPrimEnv $ \\env i -> fast_input_asset env (toW32 i) == input_asset env (toW32 i)\n where\n  fast_input_asset = testEval (specification (ElementsJet (TransactionJet InputAsset)))\n\nprop_input_amount :: Property\nprop_input_amount = forallInPrimEnv $ \\env i -> fast_input_amount env (toW32 i) == input_amount env (toW32 i)\n where\n  fast_input_amount = testEval (specification (ElementsJet (TransactionJet InputAmount)))\n\nprop_input_script_hash :: Property\nprop_input_script_hash = forallInPrimEnv $ \\env i -> fast_input_script_hash env (toW32 i) == input_script_hash env (toW32 i)\n where\n  fast_input_script_hash = testEval (specification (ElementsJet (TransactionJet InputScriptHash)))\n\nprop_input_sequence :: Property\nprop_input_sequence = forallInPrimEnv $ \\env i -> fast_input_sequence env (toW32 i) == input_sequence env (toW32 i)\n where\n  fast_input_sequence = testEval (specification (ElementsJet (TransactionJet InputSequence)))\n\nprop_input_annex_hash :: Property\nprop_input_annex_hash = forallInPrimEnv $ \\env i -> fast_input_annex_hash env (toW32 i) == input_annex_hash env (toW32 i)\n where\n  fast_input_annex_hash = testEval (specification (ElementsJet (TransactionJet InputAnnexHash)))\n\nprop_input_script_sig_hash :: Property\nprop_input_script_sig_hash = forallInPrimEnv $ \\env i -> fast_input_script_sig_hash env (toW32 i) == input_script_sig_hash env (toW32 i)\n where\n  fast_input_script_sig_hash = testEval (specification (ElementsJet (TransactionJet InputScriptSigHash)))\n\nprop_reissuance_blinding :: Property\nprop_reissuance_blinding = forallInPrimEnv $ \\env i -> fast_reissuance_blinding env (toW32 i) == reissuance_blinding env (toW32 i)\n where\n  fast_reissuance_blinding = testEval (specification (ElementsJet (TransactionJet ReissuanceBlinding)))\n\nprop_new_issuance_contract :: Property\nprop_new_issuance_contract = forallInPrimEnv $ \\env i -> fast_new_issuance_contract env (toW32 i) == new_issuance_contract env (toW32 i)\n where\n  fast_new_issuance_contract = testEval (specification (ElementsJet (TransactionJet NewIssuanceContract)))\n\nprop_reissuance_entropy :: Property\nprop_reissuance_entropy = forallInPrimEnv $ \\env i -> fast_reissuance_entropy env (toW32 i) == reissuance_entropy env (toW32 i)\n where\n  fast_reissuance_entropy = testEval (specification (ElementsJet (TransactionJet ReissuanceEntropy)))\n\nprop_issuance_asset_amount :: Property\nprop_issuance_asset_amount = forallInPrimEnv $ \\env i -> fast_issuance_asset_amount env (toW32 i) == issuance_asset_amount env (toW32 i)\n where\n  fast_issuance_asset_amount = testEval (specification (ElementsJet (TransactionJet IssuanceAssetAmount)))\n\nprop_issuance_token_amount :: Property\nprop_issuance_token_amount = forallInPrimEnv $ \\env i -> fast_issuance_token_amount env (toW32 i) == issuance_token_amount env (toW32 i)\n where\n  fast_issuance_token_amount = testEval (specification (ElementsJet (TransactionJet IssuanceTokenAmount)))\n\nprop_issuance_asset_proof :: Property\nprop_issuance_asset_proof = forallInPrimEnv $ \\env i -> fast_issuance_asset_proof env (toW32 i) == issuance_asset_proof env (toW32 i)\n where\n  fast_issuance_asset_proof = testEval (specification (ElementsJet (TransactionJet IssuanceAssetProof)))\n\nprop_issuance_token_proof :: Property\nprop_issuance_token_proof = forallInPrimEnv $ \\env i -> fast_issuance_token_proof env (toW32 i) == issuance_token_proof env (toW32 i)\n where\n  fast_issuance_token_proof = testEval (specification (ElementsJet (TransactionJet IssuanceTokenProof)))\n\nprop_tapleaf_version :: Property\nprop_tapleaf_version = forallPrimEnv $ \\env -> fast_tapleaf_version env () == tapleaf_version env ()\n where\n  fast_tapleaf_version = testEval (specification (ElementsJet (TransactionJet TapleafVersion)))\n\nprop_tappath :: Property\nprop_tappath = forallPrimEnv $ \\env -> forAll (genTappathIx env) $ \\i -> fast_tappath env (toW8 i) == tappath env (toW8 i)\n where\n  fast_tappath = testEval (specification (ElementsJet (TransactionJet Tappath)))\n  genTappathIx = genBoundaryCases . fromIntegral . length . Prim.tappath . Prim.envTap\n\nprop_version :: Property\nprop_version = forallPrimEnv $ \\env -> fast_version env () == version env ()\n where\n  fast_version = testEval (specification (ElementsJet (TransactionJet Version)))\n\nprop_genesis_block_hash :: Property\nprop_genesis_block_hash = forallPrimEnv $ \\env -> fast_genesis_block_hash env () == genesis_block_hash env ()\n where\n  fast_genesis_block_hash = testEval (specification (ElementsJet (TransactionJet GenesisBlockHash)))\n\nprop_transaction_id :: Property\nprop_transaction_id = forallPrimEnv $ \\env -> fast_transaction_id env () == transaction_id env ()\n where\n  fast_transaction_id = testEval (specification (ElementsJet (TransactionJet TransactionId)))\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Elements/Regression.hs",
    "content": "{-# LANGUAGE GADTs, ScopedTypeVariables #-}\n-- | This module performs some regression testing to make sure that consensus critical items, just as jet CMR don't change.\nmodule Simplicity.Elements.Regression (tests) where\n\nimport Data.Foldable (length, toList)\nimport Lens.Family2 (review, over)\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit (Assertion, (@?=), assertBool, testCase)\n\nimport Simplicity.CoreJets\nimport Simplicity.Digest\nimport Simplicity.Elements.Jets as Elements\nimport Simplicity.MerkleRoot\nimport Simplicity.Serialization\nimport Simplicity.Tree\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as Word\n\ntests :: TestTree\ntests = testGroup \"Regression\"\n        [ testCase \"jet count\" assert_jet_count\n        , assert_jet_cmrs\n        ]\n\nwordJets :: BinTree (SomeArrow JetType)\nregularJets :: BinTree (SomeArrow JetType)\n(Branch wordJets regularJets) = treeEvalBitStream Elements.getJetBit\n\nassert_jet_count :: Assertion\nassert_jet_count = length regularJets @?= 471\n\nassert_jet_cmr :: (TyC a, TyC b) => JetType a b -> Assertion\nassert_jet_cmr jt = commitmentRoot (asJet jt) @?= review (over be256) (expected_cmr jt)\n\nassert_jet_cmrs :: TestTree\nassert_jet_cmrs = testGroup \"CMRs\" [testCase (show jt) (assert_jet_cmr jt) | SomeArrow jt <- someWordJets ++ (toList regularJets)]\n  where\n   someWordJets = take 6 (toList wordJets)\n\nexpected_cmr :: JetType a b -> Word.Word256\nexpected_cmr (CoreJet (WordJet Verify)) = 0x343e6dc16b3f52e83e3b4ccc99b8c6f96a074fe399327af364bc285e299745a2\nexpected_cmr (CoreJet (WordJet Low1)) = 0xf27b69bb091609f59e0033050d01a5bc77ff07d942707a79cf5ee410a998a043\nexpected_cmr (CoreJet (WordJet Low8)) = 0x217b5643956b4833aa5622f00f0688ba860d4adbf940cbdcd2b59f26d61593b1\nexpected_cmr (CoreJet (WordJet Low16)) = 0x977cbd1e7ffc05e716d9c1b49f7d517f853dbf3e98a4c748046eacf417f89c2f\nexpected_cmr (CoreJet (WordJet Low32)) = 0xbe4169828f076778b60d5456f7886ed7f30b101d6ccbd9ea0c4db142eac66b12\nexpected_cmr (CoreJet (WordJet Low64)) = 0x019a66bfba1751688be71389ed7bf371b3014dfb329562ac3b3e9dfe9206a5bc\nexpected_cmr (CoreJet (WordJet High1)) = 0xc32d877e670d6c037cb33533289e19a724c368aa7551daa6d2dacccd8c95f4d0\nexpected_cmr (CoreJet (WordJet High8)) = 0xcbd78d50af7799855adc4903dbbefc1345d51484f03d3c755caaa5caa97d4a14\nexpected_cmr (CoreJet (WordJet High16)) = 0x4164ab6e2ff8eef63c06c080f1dec6970b4c5c31c02305abccd8ed2c5e1c45ce\nexpected_cmr (CoreJet (WordJet High32)) = 0xd3a7ce9cd5d5fb679a98ef57b86322770cb66fb6f0616e1634cfa84c8f6809c6\nexpected_cmr (CoreJet (WordJet High64)) = 0x4af91faf8e39f4da7c28a8796594a9228213d7323eea2ca630752ce4c57f16e1\nexpected_cmr (CoreJet (WordJet Complement1)) = 0xed74eeb83a00c713cc14f33efe553383cd0411cc3020fd89279316675d910e66\nexpected_cmr (CoreJet (WordJet Complement8)) = 0x6916b28fb574d9c908a3f33f74bf06f7ed937254247f9efc2603d7171dd497be\nexpected_cmr (CoreJet (WordJet Complement16)) = 0x61fdd904a4aeb7eb7684af618e25aae907cd1db0f62d9703c5b854e1663cac9f\nexpected_cmr (CoreJet (WordJet Complement32)) = 0xfeb02cc36e195b462ae504a912dadfe66ad47f23a0cb3baea21d31aaa0ce101d\nexpected_cmr (CoreJet (WordJet Complement64)) = 0x45072d5aa0e5c37c9e521dcc92e8f39a5f75e7d928670acab79cd8c8b5b59e1a\nexpected_cmr (CoreJet (WordJet And1)) = 0xb773cefa418957fea7dfb49c6c43b3dbfa35fa3d80de8cfd4d70c08d945f5fba\nexpected_cmr (CoreJet (WordJet And8)) = 0xac828b724c5f5340b51e76e7b6e8b23aeab7533fd8c091ae2a515530ae7ab200\nexpected_cmr (CoreJet (WordJet And16)) = 0x57dd730b1c8ddff13cae2769562be0abc6ca3bc802da0abbb7fc138ca463da59\nexpected_cmr (CoreJet (WordJet And32)) = 0x753e332ddfa096f08399ffaa7ec4da4035bcbaa142e6e38d4cb607ce1f0b051d\nexpected_cmr (CoreJet (WordJet And64)) = 0xf1ad5e6c63ee5c890b0f2e711561b905316487ac4044dd230cf6a736f81bd4f3\nexpected_cmr (CoreJet (WordJet Or1)) = 0x9bf59174410a809d3da2b58c7e0d05c55cec38bdaa5fcac382a311770ee0eb38\nexpected_cmr (CoreJet (WordJet Or8)) = 0x84b53689f21d4e697d0fe8988ce736ab72c9c86f847589daa9ae6a784630e620\nexpected_cmr (CoreJet (WordJet Or16)) = 0xdd9a3193d619d959fa0b6d8b47af7854f7e0467ba35901ce43d800fcaf730ff9\nexpected_cmr (CoreJet (WordJet Or32)) = 0x9a019f07df4996b33e647f4de7e56c1d8f03269cbfa3c7582cfe808e909870b7\nexpected_cmr (CoreJet (WordJet Or64)) = 0xc24f358005f803772b1c3e439cf1b709bd9f4d42527591303a36f6b1c3cf29cc\nexpected_cmr (CoreJet (WordJet Xor1)) = 0x9dc9fe42f7eb34649f1c72d2e5dd167db21be5321372d5ca7f6a184f93e05ee3\nexpected_cmr (CoreJet (WordJet Xor8)) = 0xd8335f4890c1d8ed766c7135902e01a0094e3a9816f70c847cc3d7c000406efe\nexpected_cmr (CoreJet (WordJet Xor16)) = 0x1fcaf40bdedd72e797b09fe78753b0ab27872c0bd12b034955fbfac23812ef26\nexpected_cmr (CoreJet (WordJet Xor32)) = 0x1d49fc94f22b5d31b7f9efb5378e5f8a42626aed4e92799348d6b788dfe86b1c\nexpected_cmr (CoreJet (WordJet Xor64)) = 0x7a3f3f55204783653344311d1dc509d35b6639c0d8b967a207806cd87d31d6e6\nexpected_cmr (CoreJet (WordJet Maj1)) = 0xcb2d986d7f00107a3c25f6b2f14891d02e20ae16f0a1252c92d9b58ae73388aa\nexpected_cmr (CoreJet (WordJet Maj8)) = 0x8930d1d0991b0a581d0b1d85ad72147d6649a35993283fc97214431f0b6a7aa8\nexpected_cmr (CoreJet (WordJet Maj16)) = 0x0af6d0c171fe33a2159bf98800f0412c2597e99784d074fdfa33d7fde597ddfd\nexpected_cmr (CoreJet (WordJet Maj32)) = 0x3060838d48456f3392d5d69b5eec089276cd58bb67a12c642ec73aeb9adacbdd\nexpected_cmr (CoreJet (WordJet Maj64)) = 0x8ebcc17457ea2b14231b0e901ea7b1d47b9b78986372a4416fe73f6763feb24b\nexpected_cmr (CoreJet (WordJet XorXor1)) = 0x1e107b05ff941d31d7578b437328ba52f3ff20a068c0d2bdef08768093cc7c63\nexpected_cmr (CoreJet (WordJet XorXor8)) = 0xc2da6e9ca64d8a73c1772667b3d7a0938bcb8a6c43fd0473eec71b77494aad94\nexpected_cmr (CoreJet (WordJet XorXor16)) = 0xb776989da5095c4be94b1aef759466e11f639c1939471fa18e36e7e490c38961\nexpected_cmr (CoreJet (WordJet XorXor32)) = 0xd168fac1ac7fc48357be1b653375ec5e3f05823aae6ac985e9403eeab12bb9f8\nexpected_cmr (CoreJet (WordJet XorXor64)) = 0x361c57930ef97d49cbc679faef1e3bcffb787995b961e5537d2b1eebc9c9a6e8\nexpected_cmr (CoreJet (WordJet Ch1)) = 0xb841b857a4aa50eaca27a26f7442fcbfe954677ae6d455f605654989e35aeb13\nexpected_cmr (CoreJet (WordJet Ch8)) = 0x353f63b0f8cb54f5ae6575af8ca2242ceee9f27a84186eb80e620d5e2e8548ec\nexpected_cmr (CoreJet (WordJet Ch16)) = 0x9cff11a09b6041e5f2639ae4c065a18fc675db2fbd985408e28f027a99110e11\nexpected_cmr (CoreJet (WordJet Ch32)) = 0x071cef8039c79f7131cd6a5fe493dc268f9db58f7b20a85555e297bdd216cf40\nexpected_cmr (CoreJet (WordJet Ch64)) = 0xd555d21963b0192fc97214b63dc1c3af758b291158f0e1a3bcfdea679c666da6\nexpected_cmr (CoreJet (WordJet Some1)) = 0xfbdad6b022a0c78ff35604aafacd27cc10f51ee0698c41f1ada90397618d526f\nexpected_cmr (CoreJet (WordJet Some8)) = 0x2d8c8f71ee5e7582f0ed65f526c02605dcb93c0bddb9433aff3f25c228acda8a\nexpected_cmr (CoreJet (WordJet Some16)) = 0x7e2ccdbfc24dd8d8a904b017dd4f57e7c87496348aca7d0458c9d16b68bcda1c\nexpected_cmr (CoreJet (WordJet Some32)) = 0x4536aeb121c4273ffc2a48fed9eed0312ebd972dec5681f47ead0f62d954452a\nexpected_cmr (CoreJet (WordJet Some64)) = 0x7f0bbd9d6631c1309f901c2f0d7a0d284a34416cf750db1fe2b9f3d6ed709409\nexpected_cmr (CoreJet (WordJet All8)) = 0x1d3ec7fb6a07847c92b8a998e1f6b478319d050a387642f4032d2f7d2e027fcd\nexpected_cmr (CoreJet (WordJet All16)) = 0x16f0c9307eb8f4c1fdd1bafaef2879242958498e8f5b2e0d29f06553dc06a0bd\nexpected_cmr (CoreJet (WordJet All32)) = 0x0eb8b40d29021747eec451d4e663586a436c2db0932675daf2166123bfe452a6\nexpected_cmr (CoreJet (WordJet All64)) = 0xa65c82d53d382ee29aa88b7718a97fbbce6475ec32c4b4cd6908fde45d81b624\nexpected_cmr (CoreJet (WordJet Eq1)) = 0x607f6b8f5d25b80e05a2bf79d62e870799522cc3e39ce96257455293f9b2b2ed\nexpected_cmr (CoreJet (WordJet Eq8)) = 0x99787ba2672dd0eb4d7d2ea99449de8f798e7cb181a5e166e1a53f9802b62064\nexpected_cmr (CoreJet (WordJet Eq16)) = 0xc996e42b979abc530cc271636671e92054876a1ecaed1433fd619a25fe6d03ad\nexpected_cmr (CoreJet (WordJet Eq32)) = 0x66d38903e73b1a1320c68a4a3970d71f94ba9e2b1516839943fb15e44ebf57fb\nexpected_cmr (CoreJet (WordJet Eq64)) = 0xd6a666b4e0f9f575508dbf3b31ceea68393c7db2e98bc592fdd26fae837a0b87\nexpected_cmr (CoreJet (WordJet Eq256)) = 0x778d1506c735d2776b950facefc159b678dec03828cf0273eeea64a9da98c12c\nexpected_cmr (CoreJet (WordJet FullLeftShift8_1)) = 0x733fed0847a2ffac9aabf50a2feb50598984f16d8b732468b3d315c01ea4299b\nexpected_cmr (CoreJet (WordJet FullLeftShift16_1)) = 0x14dcc3466fa828a3f0740451b8037d7ad603eadc80aaeadc664434ac2ad7fd9c\nexpected_cmr (CoreJet (WordJet FullLeftShift32_1)) = 0xce33b5d0c58d2d0b9b5a9944d3dabda023cd44647be67cf4082830bb205f8fbb\nexpected_cmr (CoreJet (WordJet FullLeftShift64_1)) = 0xd463ccdc7fd14e5e894162b2ae714128a10dc92000b54c843b649ccb775626e5\nexpected_cmr (CoreJet (WordJet FullLeftShift8_2)) = 0xb4474d0ba1cf4fa2d64cd4fe67bdc92cb89efa70cb99af7791bf7ef6e909d2c7\nexpected_cmr (CoreJet (WordJet FullLeftShift16_2)) = 0xafb7e928b052c2287921662cd8ab122fe074efd251a5c9cfbcaa369d06337392\nexpected_cmr (CoreJet (WordJet FullLeftShift32_2)) = 0x3faea9b573fc069d8f430faca897b6871ea09573c715094b1f1be0818488a716\nexpected_cmr (CoreJet (WordJet FullLeftShift64_2)) = 0x48c89b191a51b6ab034c80eaff348238d93fb31c1e92e7f2ae49317e0e33f82d\nexpected_cmr (CoreJet (WordJet FullLeftShift8_4)) = 0x8eb522b9970474adbb7ab0de37c4e7a056a1cb212e4103e4a8cbbbb63d975606\nexpected_cmr (CoreJet (WordJet FullLeftShift16_4)) = 0x166f348c59e26f89a83a991f67e5dbf710cfae3d6d96938282bb44c1afa7109b\nexpected_cmr (CoreJet (WordJet FullLeftShift32_4)) = 0xcdbb0d23310590113c934fe66004d2a11da9cbf8873d00dee7f02296ff0a2f12\nexpected_cmr (CoreJet (WordJet FullLeftShift64_4)) = 0x293132eb15ddf41774b0005a3b5c50959fa8982b759e832827c74fa82850666c\nexpected_cmr (CoreJet (WordJet FullLeftShift16_8)) = 0xc0cd015de8ac4fccd8db89f4e5142fde279755b542a24f57a2a3c7c1f50d1db5\nexpected_cmr (CoreJet (WordJet FullLeftShift32_8)) = 0xccd924e1a61849420ff62ed8b245a3aa18c98c41f9c5a3c0b885863c449b7d14\nexpected_cmr (CoreJet (WordJet FullLeftShift64_8)) = 0xe6abded8be585eb0b6d46e0c5eb28a745f4e5c56fd6521f8f396cb21a758f74c\nexpected_cmr (CoreJet (WordJet FullLeftShift32_16)) = 0x1cb36e6f99308515d4b711909c574b2124c1ff422d8d7d9482e25d8788b3b957\nexpected_cmr (CoreJet (WordJet FullLeftShift64_16)) = 0x882dce212a0e61f8f94cb5e32e00a5287cf64f20c21fca84f1e3df7f4a6291cd\nexpected_cmr (CoreJet (WordJet FullLeftShift64_32)) = 0x3975907333e127306255b7f88939e2857f42ae1bf0c66240a8224c8da38bb1be\nexpected_cmr (CoreJet (WordJet FullRightShift8_1)) = 0xd9d4b16d37e4eb5cc5150426e3e86cf60abbdfa1d0ecb41582965e8000cbd291\nexpected_cmr (CoreJet (WordJet FullRightShift16_1)) = 0xb379e296e9a98fb3b5662b8ba04e3cc1a43c74429e931233fdd7fc8fe6b7a2e0\nexpected_cmr (CoreJet (WordJet FullRightShift32_1)) = 0xad0d5c75ea68437191770d7fdf804bbc9d573d5f10199823d809c9c46cd275ad\nexpected_cmr (CoreJet (WordJet FullRightShift64_1)) = 0x03afb547c30913f16f3e370d7f9ca0290b615b4285051bb93c3c1a9b72ee8de4\nexpected_cmr (CoreJet (WordJet FullRightShift8_2)) = 0x079aa16617198ad5df2c98a63af76c1b3e120fd2106b225f63fd06ac571d04a4\nexpected_cmr (CoreJet (WordJet FullRightShift16_2)) = 0xaeb8c60806a479207758e39083b4a9a7a14da4ee9bc1097fc5cb4b75540d7578\nexpected_cmr (CoreJet (WordJet FullRightShift32_2)) = 0x44384b1506d443d2f8a2882b4563d7931a7ebce64acf0d02ee59ec69d3065239\nexpected_cmr (CoreJet (WordJet FullRightShift64_2)) = 0x0673bff21e375e5dbcaf3804664825dd674844d2fdb784a4fefbc925cf6b27ad\nexpected_cmr (CoreJet (WordJet FullRightShift8_4)) = 0x9d9d3f638a846386a21e715f394616864a2ef7984a88cd95505566297be7e06c\nexpected_cmr (CoreJet (WordJet FullRightShift16_4)) = 0x60b7f08475cc0cce64dca12d9f6a919c30618110eda14065929c004e7fc1b0fb\nexpected_cmr (CoreJet (WordJet FullRightShift32_4)) = 0x2e9a8ab5a1817bd0b8a46626994917a0de1a745e99520ce6ebcc67d4636551b7\nexpected_cmr (CoreJet (WordJet FullRightShift64_4)) = 0x4c25f6011fd3d1ac18e11eb43061fad69f3ce39f7a99cede50cc85bf88bfba82\nexpected_cmr (CoreJet (WordJet FullRightShift16_8)) = 0xf79dba3e0af3d6a559a9e9dffea710af623fe6e6644b897995d71b8a4167ddb0\nexpected_cmr (CoreJet (WordJet FullRightShift32_8)) = 0xaf47d4f96e7d8026d44e6eca1b807f73344ce2eaf700b2c82b4bb00261a86f94\nexpected_cmr (CoreJet (WordJet FullRightShift64_8)) = 0xa51df9448602fa81001aa1b5b13be88d4b2f4d0f60740801cef991002fe37d6d\nexpected_cmr (CoreJet (WordJet FullRightShift32_16)) = 0x455299fd6f42ab49dbb709e65a3b5366250bdc545d6229e8e236056ddd1977fd\nexpected_cmr (CoreJet (WordJet FullRightShift64_16)) = 0x1fb056fcb690cee3cff72c7decda806d2146c492ae731a6b94b8bb4f1599b0cc\nexpected_cmr (CoreJet (WordJet FullRightShift64_32)) = 0x356f7dd46ba33f84b06672fde9a2972e80f3ea965ae8bc0bff67aa2f69f10b56\nexpected_cmr (CoreJet (WordJet Leftmost8_1)) = 0x5a730b58e3abcb2f4de22159803023102cd66421911920ca21a2a05c9b211ce8\nexpected_cmr (CoreJet (WordJet Leftmost16_1)) = 0xde6a4c98337e680d6e6ee2bf36d3a0817d2a9a98325f87e5eceb8a6f1168f5ca\nexpected_cmr (CoreJet (WordJet Leftmost32_1)) = 0x5fb8e6342ab74ee2c9225b872fa0c912046a69dbb719bcd6c8d79b7660c4ebca\nexpected_cmr (CoreJet (WordJet Leftmost64_1)) = 0xb924d33b5efefc8e2042081925917cff239b31c8bdbdf4acae6bb8d9cd217b4f\nexpected_cmr (CoreJet (WordJet Leftmost8_2)) = 0x25790856103dce6c7bbb3dd718b169109cae853799d12456c85d8349ec18dc53\nexpected_cmr (CoreJet (WordJet Leftmost16_2)) = 0x005809b8051a2a502833b22c2c17981eaf9dd1d3dbc8f8c894516c1d5f31146c\nexpected_cmr (CoreJet (WordJet Leftmost32_2)) = 0x123068554595427e3c1de243bab66f3348368aaa44617d6a02479fb704bcfd1e\nexpected_cmr (CoreJet (WordJet Leftmost64_2)) = 0xbcec97f43ba55cd40d85a1e76cbade7b0b1e9f139747793dcb3480bee1f751ca\nexpected_cmr (CoreJet (WordJet Leftmost8_4)) = 0x73d9f018157a14784ee70b219ceb4042fa621d0ee6d545a0fdbab9444346e331\nexpected_cmr (CoreJet (WordJet Leftmost16_4)) = 0x9c50ee2284d857c47c0544471354105e98dfe02754d2e42de11d3234ed10b642\nexpected_cmr (CoreJet (WordJet Leftmost32_4)) = 0x55a87b66c339e363e03d4daac62290eba93c1a3a7382cbf61f20b34a505124ad\nexpected_cmr (CoreJet (WordJet Leftmost64_4)) = 0xd2d6452092d6566f89a1f64e736596f9000e5e6f63e40017d0cb80f3f7adfd18\nexpected_cmr (CoreJet (WordJet Leftmost16_8)) = 0x5a1a72914e149c22b464c8f6a3d9cf41b07192bef0d8a1cc7cbe5704a9e8ea70\nexpected_cmr (CoreJet (WordJet Leftmost32_8)) = 0x9f345bee0b162d42a035718f8ca1adc8ac2f710dc40052a82566e6d807bef8b8\nexpected_cmr (CoreJet (WordJet Leftmost64_8)) = 0xf77b62bb01b90511b6d06ebf2e36c06565acb5aad1efc77c36a10a261de921da\nexpected_cmr (CoreJet (WordJet Leftmost32_16)) = 0x54ae50b46b5b2e68f536c01c39617b0cee42e1c49a2cd1d26af8ea8715ac4d11\nexpected_cmr (CoreJet (WordJet Leftmost64_16)) = 0x12aa85e05c1e9622279c4c2ddcf897c95ddcc0113997283b6b3e0949bc8113cb\nexpected_cmr (CoreJet (WordJet Leftmost64_32)) = 0x9c89693986e55733ab962a300b0579503d83de8ac19b179b417e1ca25385b38f\nexpected_cmr (CoreJet (WordJet Rightmost8_1)) = 0x999b686e60b3d1ecd6c6d77fbca82cb2abbd4182c8211267475fa0c1901d89f9\nexpected_cmr (CoreJet (WordJet Rightmost16_1)) = 0x3f3c4346871742265e87f001b46de7d198751b34faa18018de60c8468d9b98a4\nexpected_cmr (CoreJet (WordJet Rightmost32_1)) = 0xcb0db569a36186a25605a9d2e4e10a20c111d50c34f17246520bc454d8682836\nexpected_cmr (CoreJet (WordJet Rightmost64_1)) = 0x5e8fb49face034481dc653618e2a8b65eaf0993f28844cc9b130cacce45e82de\nexpected_cmr (CoreJet (WordJet Rightmost8_2)) = 0x5307ffbf516cd0eef3ff4387b9052c144a4dfa2329237c6b274992b2c8047b60\nexpected_cmr (CoreJet (WordJet Rightmost16_2)) = 0x78f171476a3b0ed1e3a5455a5fbbcc901981b3230fea1264204dacd081f94080\nexpected_cmr (CoreJet (WordJet Rightmost32_2)) = 0x00b8815ad7423dd58cb98be82cad26675c3bf54a0bedbade3464b4fe5a4e8ce6\nexpected_cmr (CoreJet (WordJet Rightmost64_2)) = 0x83d2da6f3420d779bcb8f60d0b696eed74c31db08addbebd1235a5df8f59c42f\nexpected_cmr (CoreJet (WordJet Rightmost8_4)) = 0x7f52e645bbbbd79269c43ef02db982f8c63633c179e4069173933604cc635bca\nexpected_cmr (CoreJet (WordJet Rightmost16_4)) = 0x75a1dfb6ae2c066b2d0e2093048adbc50d4650656fb2d3578b57d9de4c61c8b5\nexpected_cmr (CoreJet (WordJet Rightmost32_4)) = 0x3dfa7a20198e42d6a7948c8ed8e0d47ec7c0007b3d6866ca15e3da045b8563c7\nexpected_cmr (CoreJet (WordJet Rightmost64_4)) = 0x841bbd652742ddd3adeae43cfed6329f2fd62e6fecd0fd58e3c3fb8b5a0e4dd5\nexpected_cmr (CoreJet (WordJet Rightmost16_8)) = 0xee769c1cc8a3fdd1838fc9f0490ce70393fd91ba3cbd4abd08649fb9c44311bd\nexpected_cmr (CoreJet (WordJet Rightmost32_8)) = 0x17b58d6e304b1c7e5dbf0c4df6fcc803c008944c7995555b94e1289b2549be99\nexpected_cmr (CoreJet (WordJet Rightmost64_8)) = 0xa0a61c7658a18623bf1d011a9792d518fbd024142a904400ecdeea92457a0a81\nexpected_cmr (CoreJet (WordJet Rightmost32_16)) = 0x06faa3be678cd6fdd7f3112ebf2c48627afa7875f7068d26a9cc045b2c8f11bc\nexpected_cmr (CoreJet (WordJet Rightmost64_16)) = 0xc64ca9965536f237bc4d166e4aeca56eac2662e63accb98b6e542560f9e538da\nexpected_cmr (CoreJet (WordJet Rightmost64_32)) = 0x7d2dff6e3dd504bb0e5703a033586d27d96644c048ab34a45bf535129d501167\nexpected_cmr (CoreJet (WordJet LeftPadLow1_8)) = 0xdc5a47f8d77765c994cbe86aae44a9c5ff2ebc3810d79cd83bd2c4098c762bf5\nexpected_cmr (CoreJet (WordJet LeftPadLow1_16)) = 0x4aa40520faed72e6e9be3be6930f1e32b0b182c4327ada94a71f006d149015f9\nexpected_cmr (CoreJet (WordJet LeftPadLow1_32)) = 0xcfb4753bb9ba3621ba0937825fade643098e385ed68efb16ff58ecf365d7e5e2\nexpected_cmr (CoreJet (WordJet LeftPadLow1_64)) = 0xe6f1c09b5fe126d0ea86e7bfc0b28e849f8f7efd31064ea4fd1cca071b45db93\nexpected_cmr (CoreJet (WordJet LeftPadLow8_16)) = 0xac1a4c9783e4dbed2700eb2952e3062a5a72712f82159861b08e67ef4a71f5f2\nexpected_cmr (CoreJet (WordJet LeftPadLow8_32)) = 0x3da5f1a8c97819ae7e10b9364ff84996d0d73e698a49da691f69a273254201cd\nexpected_cmr (CoreJet (WordJet LeftPadLow8_64)) = 0x25bc18d49f934072277d3f613bf16c118df197bc92872d2affe417adeaaf1a85\nexpected_cmr (CoreJet (WordJet LeftPadLow16_32)) = 0x21537f7d8f97f2203cccb035ef1d46289ee8aa50f0236077d0d0b210700440a1\nexpected_cmr (CoreJet (WordJet LeftPadLow16_64)) = 0x6b2ea9630c5dde037aab2bf733219b99c7edc2ecedb9a03adfd169430b08bb9c\nexpected_cmr (CoreJet (WordJet LeftPadLow32_64)) = 0x2d88e4d01e0108c0d6880f3ce8482bb0951f2b3fc5df4b1adb184a1bfd1f6465\nexpected_cmr (CoreJet (WordJet LeftPadHigh1_8)) = 0x6c277c4cd053dd3502dbe0bbc14eb0b36a201abef3b174b0ebfe052018b67e67\nexpected_cmr (CoreJet (WordJet LeftPadHigh1_16)) = 0x93aed6f68750774b2dbf8314cadebe5a415243fbdf7c2eea8b223df3261e3bdb\nexpected_cmr (CoreJet (WordJet LeftPadHigh1_32)) = 0x008298f82fb6cf37e9dc703ea4f949565c2965a7c7f4fa22f55456423408a3ab\nexpected_cmr (CoreJet (WordJet LeftPadHigh1_64)) = 0x2b454ebd791ec7dacedcb86c69d026794a5dc3725261e7dc1650cc888117fc4f\nexpected_cmr (CoreJet (WordJet LeftPadHigh8_16)) = 0x2178dc76c04c79d91815d38c967f34213ffcc6c5f243c9562973f090ca5caefa\nexpected_cmr (CoreJet (WordJet LeftPadHigh8_32)) = 0xa4e86b53e5d00faf0b3e9d53202af7738dcb8887a18dfee5be34c497698ca6b7\nexpected_cmr (CoreJet (WordJet LeftPadHigh8_64)) = 0xc843a72c41170f403433c436a39b05cf193c27d8be3530f9b94e42d763003d54\nexpected_cmr (CoreJet (WordJet LeftPadHigh16_32)) = 0x888c7e0ab0031475c514f9b37c81f45a47314984e5027508ddc5eb8d8d10beb9\nexpected_cmr (CoreJet (WordJet LeftPadHigh16_64)) = 0x526b3505450136d681a50b4bde4fa612da9d69bd08170ea32d0a2651115072eb\nexpected_cmr (CoreJet (WordJet LeftPadHigh32_64)) = 0x5d41221cf6158297b06c1957112c0d12f3eb917a2f509a539d5c9b7910219b65\nexpected_cmr (CoreJet (WordJet LeftExtend1_8)) = 0x5a831ca99621517a2b354e5cac38bc3a30c4001f20d25d7797addcac5da86106\nexpected_cmr (CoreJet (WordJet LeftExtend1_16)) = 0x9a48a4778e7c3c285ab65329d1ccc4999d2d194e005bd7946949533d8cba806c\nexpected_cmr (CoreJet (WordJet LeftExtend1_32)) = 0xdab6a533cbcbe8362cf1d5a16ea37cbc7edc7fc8a9428571e171ec6ee44d0800\nexpected_cmr (CoreJet (WordJet LeftExtend1_64)) = 0x110e5c1ef0b469a7638570da944d232e0f28c46151a225357de3e90457a88ea2\nexpected_cmr (CoreJet (WordJet LeftExtend8_16)) = 0xfea1f25a82fdf6f8669cc40fbb8e54a92658bfab94eb082f717ba265b5d844b4\nexpected_cmr (CoreJet (WordJet LeftExtend8_32)) = 0x09d703ca46f75d051a93d0e8a2af0501a38e848683ef109c1fb4b5be20e6315d\nexpected_cmr (CoreJet (WordJet LeftExtend8_64)) = 0xd3dafcbdab69a2bb320f8d230cefd09c27a154c51e7e5cd5334eafed19e20df4\nexpected_cmr (CoreJet (WordJet LeftExtend16_32)) = 0xdcf42b6542f6d41cb7b50e7c772f3c7f6e432232f2ba2079b386a05d7b466add\nexpected_cmr (CoreJet (WordJet LeftExtend16_64)) = 0x2eee48a92237947c1a517df995f44f1dfef20ddb4e9b530b22d18a0a7fd628aa\nexpected_cmr (CoreJet (WordJet LeftExtend32_64)) = 0x84fcc69ba1db50dbd5363cf2777957601de2568adf07af4161debb1e5e37310a\nexpected_cmr (CoreJet (WordJet RightPadLow1_8)) = 0x59d72270ef0e8f770c8d11f31773f9b6e90a4aeceb5bfb3dfe968c4e9dac5fe8\nexpected_cmr (CoreJet (WordJet RightPadLow1_16)) = 0x7914c8f22247c2c34b9c84e92d1444aec2e17a0ef586bab2788ee6ef68840d98\nexpected_cmr (CoreJet (WordJet RightPadLow1_32)) = 0x31b6ce26e559f76cf366f4806985ecc299550f15d4c3a6729e29d70e39895652\nexpected_cmr (CoreJet (WordJet RightPadLow1_64)) = 0xc5524ae6548acd63082d94893e18f9edbb9231e76bb4e11bbff6a7bd16f4b029\nexpected_cmr (CoreJet (WordJet RightPadLow8_16)) = 0xaba47a536e1227e122baacf19cfd2823b9b78d79cc06d34c348b14a1a15abd64\nexpected_cmr (CoreJet (WordJet RightPadLow8_32)) = 0x8f80a6c274716b6722041134ea1c68aabf0213298f4e18f8f492dc53808a3174\nexpected_cmr (CoreJet (WordJet RightPadLow8_64)) = 0xd69c85e7b2d7e949436cb1295e4aa70557d75e7cbdec02cca85fbfb13308b210\nexpected_cmr (CoreJet (WordJet RightPadLow16_32)) = 0x7731d560d37592d1a31f7362967ab2e47592aca6e92ab858823792dae5d2db52\nexpected_cmr (CoreJet (WordJet RightPadLow16_64)) = 0x0fe1c0db9d4a2d63e2ba4a33117aadba64514a2b87a7a4e793faacfe6b363447\nexpected_cmr (CoreJet (WordJet RightPadLow32_64)) = 0xd4227d066f18b911d6f5d9bfb9d9f46e9aeadbbefa34d474432a1e789e4886ff\nexpected_cmr (CoreJet (WordJet RightPadHigh1_8)) = 0x7103c0fe00f522a2216c4a6be5f7e0eb4d703ca78f9c598f6b3dfde437d80c84\nexpected_cmr (CoreJet (WordJet RightPadHigh1_16)) = 0xff1297d878e26e1959bcc7e8aef97ac0b65adc39923ec6505e50f98305733b6c\nexpected_cmr (CoreJet (WordJet RightPadHigh1_32)) = 0x283f8afb41382d2be18f8a77c314ba1776cb80c8ec36ca12aa67b32bb64ed843\nexpected_cmr (CoreJet (WordJet RightPadHigh1_64)) = 0xa342352860a3350d79c3e9fc7a4ab3789b8b0297856fd169ca4d7de25f7d7cc4\nexpected_cmr (CoreJet (WordJet RightPadHigh8_16)) = 0xc0e2fd46f7883b1285a6f1a1db96d93c2548040fcd3f5c23fbb20b5e83037c96\nexpected_cmr (CoreJet (WordJet RightPadHigh8_32)) = 0x291e627708520c2ca6aece32a877b77849c4a7a213cb89e1bda7c5c5fe755f73\nexpected_cmr (CoreJet (WordJet RightPadHigh8_64)) = 0x6b6fa2372ed25e4a34d4ae172342adbb259be8987600db192ecb8da434b9d88f\nexpected_cmr (CoreJet (WordJet RightPadHigh16_32)) = 0x3e4e5e9e71e137a2686343e05ac56316acfc58991cb38db1b3234413f730a142\nexpected_cmr (CoreJet (WordJet RightPadHigh16_64)) = 0xde09df9d43ddad2d691204986cf0819d6b8045bca414d80af2162892a9257ead\nexpected_cmr (CoreJet (WordJet RightPadHigh32_64)) = 0x5dc9107d4534958ce4422767563a031a380f60d3837148ab3c8cc9c4c7d996a2\nexpected_cmr (CoreJet (WordJet RightExtend8_16)) = 0xbcb2683a8cb8b8c235faa896a9c069e1b55bb0558e739e70e28914211e3275c8\nexpected_cmr (CoreJet (WordJet RightExtend8_32)) = 0x6ddb5548fd583cd2d3586e6b8bf995246b61934f4976446777dd5740b319e462\nexpected_cmr (CoreJet (WordJet RightExtend8_64)) = 0xda4f9c21455126820758a2e4b53fceb4523e6e7a2923a1a161fc37892ac8da2a\nexpected_cmr (CoreJet (WordJet RightExtend16_32)) = 0x780716d3e8291a51e45ada50558efe411c475c085eec5a28ad9791c312fee2bc\nexpected_cmr (CoreJet (WordJet RightExtend16_64)) = 0xc770497e452308ebf52e51b0585e9151e0ffc35086ab772d7241532a1be15e07\nexpected_cmr (CoreJet (WordJet RightExtend32_64)) = 0x42b43adc74b5266c91d73df491dcae59738804eb440b23da327530487486b7e8\nexpected_cmr (CoreJet (WordJet LeftShiftWith8)) = 0xdd9cc1cea74909481ff58f876ff66e0f5d52bf89b0258fa95b320002c32a7915\nexpected_cmr (CoreJet (WordJet LeftShiftWith16)) = 0xe29107885550450eb727d0cf14e104ae12f83a24e2e2aca3cce433de2f35d7b3\nexpected_cmr (CoreJet (WordJet LeftShiftWith32)) = 0xf39250c45a1310cc638c788deec5c365b4d176d10efbf4c601cf5eebe0a573e9\nexpected_cmr (CoreJet (WordJet LeftShiftWith64)) = 0xad8794cfaef2b7f774fa68d309bbc98dfee58c40400b2eb578a212f438bd07ab\nexpected_cmr (CoreJet (WordJet RightShiftWith8)) = 0xfcb5be6507f0ca44be2be1cc3c3cfe3994404b8083bd7602b2102cb1fcfa2c61\nexpected_cmr (CoreJet (WordJet RightShiftWith16)) = 0xfd977030e3a25a32e775b8d5e87174a7a9e8731ec36cf1326420ad91502e6e98\nexpected_cmr (CoreJet (WordJet RightShiftWith32)) = 0x2829ba021f54077affb66ac6b6dfd3fef38bc41491845a41ce9dd370586c2d04\nexpected_cmr (CoreJet (WordJet RightShiftWith64)) = 0x006fa3c54579754786fc64dc32e19a225cc152c94deeb3c6ab2967ddbfc64653\nexpected_cmr (CoreJet (WordJet LeftShift8)) = 0xab9d3e9ac39038ad88b103f072254c0ec6e27475e275c245e88cce0d072e6446\nexpected_cmr (CoreJet (WordJet LeftShift16)) = 0xb05360184d0602b581405e32960b31c05219358de89efdf49464723dd625617a\nexpected_cmr (CoreJet (WordJet LeftShift32)) = 0x34bf54f594c2621007f8c78b30fad39672009bb366aace1e5e41ee4d9cc541a8\nexpected_cmr (CoreJet (WordJet LeftShift64)) = 0x5de953f04deaed9047567647a1eb7abe665feccbe7ed10cb7dbe691273c094b0\nexpected_cmr (CoreJet (WordJet RightShift8)) = 0xa4c3546ff27e56d64e918ab2fa6d00fc2704585b25bde0049d6d8f48d8cf1cd0\nexpected_cmr (CoreJet (WordJet RightShift16)) = 0x8b5e0feb958130f0508332159e54c2df98af83521acab3084fd4f7c3a2ccea77\nexpected_cmr (CoreJet (WordJet RightShift32)) = 0x4b1f2580e0850d38e2a1157338052f1c379f9d8157f62d33890af24fd9a7f73e\nexpected_cmr (CoreJet (WordJet RightShift64)) = 0x91a297d7b58a393bf59025947747c86dd487659cc56fb5a6f6439955129a9563\nexpected_cmr (CoreJet (WordJet LeftRotate8)) = 0x9e966e880c6b0c483c90beeed7c5737ca5f3facf85aab3d531ad34bd7b1a9b68\nexpected_cmr (CoreJet (WordJet LeftRotate16)) = 0x88c12337cd754f8380986d86fe3a89e262746653e1badd9cc9b47645fe57195a\nexpected_cmr (CoreJet (WordJet LeftRotate32)) = 0x39816ccd9e9cf1191f065d2eb7a7fb83828d91ec7d9977a1fc70be9b31a468b9\nexpected_cmr (CoreJet (WordJet LeftRotate64)) = 0x8b2355c31e3b614bd4b41c3ecf277424d026766b37bc6c105621f4f6a16f9bdf\nexpected_cmr (CoreJet (WordJet RightRotate8)) = 0x00c7c26d95a50b5af9349ffe47e1d43f3d761f17a7453c984791e87dc6a311c8\nexpected_cmr (CoreJet (WordJet RightRotate16)) = 0xe510708247f91b4f0a8a22a446b8137d0d42bee74c8c1edd6d446edb2013b598\nexpected_cmr (CoreJet (WordJet RightRotate32)) = 0x98915731412922dbc516a7373afc4de64809f83b264bcfca6ae74883dbe104d6\nexpected_cmr (CoreJet (WordJet RightRotate64)) = 0x9e2fb98adf1029339dbe45a22a54a390ca0986edcea32eacb82ebcc894a2711a\nexpected_cmr (CoreJet (ArithJet One8)) = 0xff594e22bfd75813c056e0a234ed12fa8287d1d5316f23902bf079dbcc4f4ea8\nexpected_cmr (CoreJet (ArithJet One16)) = 0x3f9f8dd14c46ee02471557929ac2bb6c1aca00521d8afaf0dcd9f2ca7f31e604\nexpected_cmr (CoreJet (ArithJet One32)) = 0x478dc39dc3995e2edb7ec674656cae798f52e572926174a668cc97bca448d1cc\nexpected_cmr (CoreJet (ArithJet One64)) = 0xa392cefc0da53c65aee612f5c6816ca892fc156d43714876b3a00568e1ba3eba\nexpected_cmr (CoreJet (ArithJet FullAdd8)) = 0xed3ba5b79ea45b187a2d43e8ed802de1ed4426596cbe32e757c8511915ffa5cf\nexpected_cmr (CoreJet (ArithJet FullAdd16)) = 0xfc9e5df83bfdb9028c87d139f8583903cb2a07042a73e53481deb52ff1f1f884\nexpected_cmr (CoreJet (ArithJet FullAdd32)) = 0xa7d98d50d045cb906b195e6511879495c851095949a9c01e6039a84b2a5ec909\nexpected_cmr (CoreJet (ArithJet FullAdd64)) = 0x7aecc8c9053bb2fb170c1c972fd4002564e152a06d9f458075e38c7a0698a7f4\nexpected_cmr (CoreJet (ArithJet Add8)) = 0xd7328c0914ee999efa0a6cb26eb40912c215c062e58a981ae6b2e4a80474a1da\nexpected_cmr (CoreJet (ArithJet Add16)) = 0x26ae0994ce8b771af7ad2851b83b49a5950536589f67bd855947046029751c0d\nexpected_cmr (CoreJet (ArithJet Add32)) = 0x3d7674466ed69e1dbedcd48057a9e6288c222532fbc5048049928cfb77f829d9\nexpected_cmr (CoreJet (ArithJet Add64)) = 0x9b56e61eefe2805ca87396bdfb03f5e1b1385f7ac4bff7684026a07cf97fb6f6\nexpected_cmr (CoreJet (ArithJet FullIncrement8)) = 0xd304ea28a95d496d14b4f2fb5c860372ecf247befde3ea3b2ad67bce99039dbc\nexpected_cmr (CoreJet (ArithJet FullIncrement16)) = 0x81380adaa3a547f1bc4bbb646bda9d9fb7bd4dc1b3a9f3dd220b56a47c2798fb\nexpected_cmr (CoreJet (ArithJet FullIncrement32)) = 0xa760a8449a2ab5dedb4ee51bf5c25a8f06af0666df7fc419b498b90976d698cb\nexpected_cmr (CoreJet (ArithJet FullIncrement64)) = 0xc6af30dd286d6e21c38860ed1e2f212a21b2fd1edeadb5e0fce2e3fd75b7f3c2\nexpected_cmr (CoreJet (ArithJet Increment8)) = 0x0c717e84df67823f5741b3d55dbeb4729c2bd62f5d1def3cabccdd6cb8dcb56c\nexpected_cmr (CoreJet (ArithJet Increment16)) = 0xdf274888ce4cebdd5708b38dc3dbb19cc2f0364b2463e99cf5aab4f8a23ea58a\nexpected_cmr (CoreJet (ArithJet Increment32)) = 0x54f757aea76bc7a39fc43d19b8dd563a6807df0277a56fcb501089ce7d06774c\nexpected_cmr (CoreJet (ArithJet Increment64)) = 0x79ed5f7799fb09da510429a20128bed091d8587647071285cdec3a0c95709e5b\nexpected_cmr (CoreJet (ArithJet FullSubtract8)) = 0x6885e141ae234c1e2a7e4f235298939036969c950f2cefd459b498ac3dd89220\nexpected_cmr (CoreJet (ArithJet FullSubtract16)) = 0x1fc88e2329f4aaf12b30513f7a21cf5d8de24b600a19a21741281b4d61aac633\nexpected_cmr (CoreJet (ArithJet FullSubtract32)) = 0x782705fb42e36a7ef831200c617738d31e13b1d0e7ceed693f13338835b30acb\nexpected_cmr (CoreJet (ArithJet FullSubtract64)) = 0xb2856a9180231bee3cb89230f75c292af3e75239dbeb396548441e6b5a27e813\nexpected_cmr (CoreJet (ArithJet Subtract8)) = 0x40950b86f6f1f99355dee11f77daf279a0cb6c6d156ae44b7d5d257164b267c5\nexpected_cmr (CoreJet (ArithJet Subtract16)) = 0x569e6c6b39e7d812659b67aac08ad15099eead798fd1d42da17ee3f0d4d4492a\nexpected_cmr (CoreJet (ArithJet Subtract32)) = 0x19d35e0af1e16514a6dfc29a914187133964c480f660e7eb924ee16dbaa249cb\nexpected_cmr (CoreJet (ArithJet Subtract64)) = 0x523e118628bf3ac1a6be5a72bdb1141b89e0e001e402adda8258790003f88ad8\nexpected_cmr (CoreJet (ArithJet Negate8)) = 0xd871c542473f4dd902d31fe3fc9ac0f3319e42e80cae2181ffc85e6c60fb0988\nexpected_cmr (CoreJet (ArithJet Negate16)) = 0xf642173b85ef21969d8d9048807e3d4facf3f5f9e59aa5cf0c60f87422ed7c8f\nexpected_cmr (CoreJet (ArithJet Negate32)) = 0x549b65ce97c6b334b8ae9456960e365bb284d76d4005e921f489bc3626171b06\nexpected_cmr (CoreJet (ArithJet Negate64)) = 0x35acca27ce658579ef1c55ad1abea0050d9366d12209ad13052549c3436491d0\nexpected_cmr (CoreJet (ArithJet FullDecrement8)) = 0x7c5e94a9980281821737b1ce73bfda4c79ef649b3d05cc1c00c4a8b64b949bbe\nexpected_cmr (CoreJet (ArithJet FullDecrement16)) = 0xd4c2edda872c05506f792cf546a89d4d7cffcb1e17f5da6103100e7e73a7737d\nexpected_cmr (CoreJet (ArithJet FullDecrement32)) = 0x7cc2304d174312102e9b736345c77f771d1f6a9c9e1d1cd8db8cb4613980c8c2\nexpected_cmr (CoreJet (ArithJet FullDecrement64)) = 0x15c163454bcd754430da5579bbcaad26e57e95c772224b7b83c705f7deb64aa6\nexpected_cmr (CoreJet (ArithJet Decrement8)) = 0x2892ceb3b6ec5325d0c1b9f520425e4b05c2e1f437e0b3f581f41b9d0f7dff4d\nexpected_cmr (CoreJet (ArithJet Decrement16)) = 0xe34db11879272b327a3bd034c0f61ef60a2be96fdfe0b2d57ffe39ce714c78fb\nexpected_cmr (CoreJet (ArithJet Decrement32)) = 0x019ead5a7305606dc950fb55476d09c17d66f570dab510b90d2a27e2266599cf\nexpected_cmr (CoreJet (ArithJet Decrement64)) = 0x34752cf4e1d0a431f017a68bebfab741bbc88affb57cc0b3025ccfdd67622f35\nexpected_cmr (CoreJet (ArithJet FullMultiply8)) = 0xd3d24554c466dd603754524736a71eb235def9b506965e32d56826e19fbad6c1\nexpected_cmr (CoreJet (ArithJet FullMultiply16)) = 0x88470cbf9b4dec37ea05d7b630f2f112547567d34f33d96e5f611bd9da97abb5\nexpected_cmr (CoreJet (ArithJet FullMultiply32)) = 0x28040600a66e1a0c52258520488b94c820c6cf86ca27ae39034dddcab904d1d5\nexpected_cmr (CoreJet (ArithJet FullMultiply64)) = 0x53014f35a8df2091af3ef9b8d16b38b9bc9661bfdbc957333fba2a948c1e8c25\nexpected_cmr (CoreJet (ArithJet Multiply8)) = 0x29da13374f7cb308405fe230f899485c500e6e9520c15e8a76e53a92e7ac64d6\nexpected_cmr (CoreJet (ArithJet Multiply16)) = 0x46e62abf8e30a7746de0e929f7beeddbde8b269bab08f76e9547108b1c360174\nexpected_cmr (CoreJet (ArithJet Multiply32)) = 0x2decdc5b0c6ff63d11f53852e0deed114481355bb6c6ce1546ae9f815bee7750\nexpected_cmr (CoreJet (ArithJet Multiply64)) = 0xbfa8626dbf10001de390d997f2ee7b190c24a78cfecb91f5d7c10c3f9ddbb1e6\nexpected_cmr (CoreJet (ArithJet IsZero8)) = 0xb4baa50938108426740d82cf1211e0ed126de3b76b8d259c50ad4b8fcab10ab6\nexpected_cmr (CoreJet (ArithJet IsZero16)) = 0xa25abd9cd2a4070c742ef8deb068292246032b96a517223b128cfc12d215c5ba\nexpected_cmr (CoreJet (ArithJet IsZero32)) = 0x612a480ced6a79da6119546e056b8df9fa95d1124b96d601e1d3ea918cc56069\nexpected_cmr (CoreJet (ArithJet IsZero64)) = 0x18e8e1776ba080ccd3e1d60cb753414536bf70df185f72c9e070796f4c63cc71\nexpected_cmr (CoreJet (ArithJet IsOne8)) = 0x0aba9e576e64d2804c8ac4682bbba5390ebc31a6e3e2650f9219235df4a6ecbb\nexpected_cmr (CoreJet (ArithJet IsOne16)) = 0x8435879ccb8644198dcb9a0cd73546d701fdd5a4c44323f563971599c37d16fb\nexpected_cmr (CoreJet (ArithJet IsOne32)) = 0xddfbd9f0a2e67c07dedb89e896b6c4f7d45c5147eed0614e4ce7d08769aff82d\nexpected_cmr (CoreJet (ArithJet IsOne64)) = 0x35c525548e48eea0f77b3bf97ab67a1ffe8fb094ede3325e4064b1659c6d0765\nexpected_cmr (CoreJet (ArithJet Le8)) = 0x0fb72d9f8ee2370aba55663a4899162e40ca5514713efb25e4a89e2a104b34db\nexpected_cmr (CoreJet (ArithJet Le16)) = 0x63da727ccb4c6a9d4e000964e763bff934eaafd044287e1268d07ecdfde207e1\nexpected_cmr (CoreJet (ArithJet Le32)) = 0xdee29a91656d7ae73df4956fd8a2c6b627aab51c1129f9fe7f6ed3e34792c762\nexpected_cmr (CoreJet (ArithJet Le64)) = 0x01c55df7d4465966659ddfc94b36d033242c2ec593cee1212244077566ed015f\nexpected_cmr (CoreJet (ArithJet Lt8)) = 0x73d0044655c0df45c271a1713ff9b9a43dde56e674d1754e76edb16f949c4fab\nexpected_cmr (CoreJet (ArithJet Lt16)) = 0x56a20d55edb44388180544c3ed404145a3b66fd2c4113842f64eaeafbad4bb06\nexpected_cmr (CoreJet (ArithJet Lt32)) = 0xcab0dc5b0ecbf6d24816fc2010fc31193663c306968d9cee3b004c0bc184b478\nexpected_cmr (CoreJet (ArithJet Lt64)) = 0x47d67e52b27ba78edd075aa270ded007a7a9a68499344f2862f5069049a0cefe\nexpected_cmr (CoreJet (ArithJet Min8)) = 0x6b012ca3185dc005e8942cfbc9f238dcedaf0c0043526447e3ec31cefa6e4064\nexpected_cmr (CoreJet (ArithJet Min16)) = 0xf158f40a860993b4107fb271fb4c8f955ba4542ad1821cd2f13c880ca4bee2e2\nexpected_cmr (CoreJet (ArithJet Min32)) = 0xe5e413dc5de5e22d66f32d8dbf50053ed278e175c0d4b344ebd461beb108e55e\nexpected_cmr (CoreJet (ArithJet Min64)) = 0x43d82f6c6128aa01a997bb17e5e7f501e7be7db9589e566de97a32eae7e7b339\nexpected_cmr (CoreJet (ArithJet Max8)) = 0x6bc10370f3e7a7b92acb1423bbdf0b3d7e3cd0d2dbc705a34d8dc99c910422fb\nexpected_cmr (CoreJet (ArithJet Max16)) = 0xe0114717691ac1a739288fc6ffa1c6507c43e6f1d4c18770ffa166ae839dd533\nexpected_cmr (CoreJet (ArithJet Max32)) = 0x1d723cb389942219ec103485317fa5d87ee15c24b2080f5046650d80308b189d\nexpected_cmr (CoreJet (ArithJet Max64)) = 0x0073ac3c6ea939dcc7eee4ea63dcfd752037355b484f6e7016b300e2d28c07c3\nexpected_cmr (CoreJet (ArithJet Median8)) = 0xa4a0b6310ff0ed4a4c3e03ebc7a91306ef660424bc95a0d3f2fdb71fb6afd8b7\nexpected_cmr (CoreJet (ArithJet Median16)) = 0x2414e3c439659d8aa9d087e1ade77266673d1c8bd4e7501b22ac46a3ff39975d\nexpected_cmr (CoreJet (ArithJet Median32)) = 0x0792356b610b57d0ec199e98535ea9bccce843a5df5dd2408c414886dfd6bd1e\nexpected_cmr (CoreJet (ArithJet Median64)) = 0x0766d89b430ffdf038691b18439cd6fc4929172ea884fdaf166936b38b15fd0c\nexpected_cmr (CoreJet (ArithJet DivMod128_64)) = 0x2296b70f600e8a214ad070b2194a677d3051bc1c490183975f2a1d3e0cade378\nexpected_cmr (CoreJet (ArithJet DivMod8)) = 0x48cd501bb2aa2acae014fe208bb9941d07a9bffe1ad6cd3d36fc6b0860f6eba7\nexpected_cmr (CoreJet (ArithJet DivMod16)) = 0x648fab864374846abf4f9d9defe275614d33f4829c36a47ecb53d7bfb605485f\nexpected_cmr (CoreJet (ArithJet DivMod32)) = 0xbd3d4d552d7b347bd8a44e3ee224c846be230ff6e2044ddb97f48e27d20c4225\nexpected_cmr (CoreJet (ArithJet DivMod64)) = 0xfa6bad6a95e2aba4305bfe91cc47acc3d99b92e675e69d3b37bb09133d390d0f\nexpected_cmr (CoreJet (ArithJet Divide8)) = 0x2ccfbc7c02bf4d530493bb22867a951d8ae913126687597284e9bbb3e1e7e349\nexpected_cmr (CoreJet (ArithJet Divide16)) = 0x470b01a57c4f9d8f997fcde006191611dda4c98ba2a5f1da134ae4c22d52e920\nexpected_cmr (CoreJet (ArithJet Divide32)) = 0xab03acd893610c3c6582e7f7fbe5e7562574a7b26646f1c2fdc6e76e445a77a1\nexpected_cmr (CoreJet (ArithJet Divide64)) = 0xebfc56fbb8a47e73ffabb7ea228ac78437be820eddfa47814ccebd261bd8cfff\nexpected_cmr (CoreJet (ArithJet Modulo8)) = 0x5c63c77a1608e2f6a3748c110fbb9a1c569fb4d540f3dd2e4f80e90dd5ea9982\nexpected_cmr (CoreJet (ArithJet Modulo16)) = 0x62c179ac84c5750b425f9a1b8f81edaa7f5cf22c19d86b0dcf96dea6bad99b3b\nexpected_cmr (CoreJet (ArithJet Modulo32)) = 0xa1f01c106fc36a764e99b23398e21e7c267f889fccebd1487d3de1cc67c32bd9\nexpected_cmr (CoreJet (ArithJet Modulo64)) = 0x50c82fd03109c98b7237e91674041964381e6c2ebbe25bf3e0d37a9f060f1502\nexpected_cmr (CoreJet (ArithJet Divides8)) = 0x0b5502ac4f21f230a09ccfaffaac77a7c41b2bf30b1468481e4dfb98b6187a0d\nexpected_cmr (CoreJet (ArithJet Divides16)) = 0x5fc3ac384d5f45404156971a768d93bc064bc17c15a37c27019ddeef17046dd4\nexpected_cmr (CoreJet (ArithJet Divides32)) = 0xcc45b405246438f765740b4fb0a34dc81b34780198863b0fb186446adfbb09de\nexpected_cmr (CoreJet (ArithJet Divides64)) = 0xdc473bfdec30ab98d48cd08884ef4fffef3d4b16ad5c37112a2035b99bb77458\nexpected_cmr (CoreJet (HashJet Sha256Block)) = 0x0c97a008ade87bb1e0ac06b7d0313023362858ef90ec14ec9cb95f0da964e008\nexpected_cmr (CoreJet (HashJet Sha256Iv)) = 0x7389f0025305dce828d4a1fe83743046a367c923f18abf365e391e5b04af1a47\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add1)) = 0x37066c67ad95249d4ba6e18144ca0a415d9c832aa6b60628e97c967eb1793383\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add2)) = 0x8bae3e7e1ed4dcba6e645aa14341bbae0dbb3ae21bb63dc030ca0e447a857ec2\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add4)) = 0xd7d745614b37a7e07dce22f64e7b1edfe23beda851f1e76f1a6b028fcc5e9fc0\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add8)) = 0x9c988330799a680bfe73d7caa3689fe4e483da4ee6d818587927c7f43392def7\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add16)) = 0x8299252040cb39e326a248d5c788f9516d15a2ff4145bb64ad6577ae1a3ef727\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add32)) = 0x39239a43a84bac6f2969bfa95bfe6a04fcba8092895939f12a1ce0e26321ec10\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add64)) = 0xfdc434ce83dbdce0782aa36d418def7f99af8293afb29e839fe4948f6234f77f\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add128)) = 0x2dcf484c257f67940ca375ba98e83ce0e2a71e16da5051d1bb19fb5f346f154f\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add256)) = 0x44b717e1970999b66b693d8c9d1d3b0605c2b7a6213e6ba56c69af8d7fae1686\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Add512)) = 0xbe368032d86ebcf213ca45ba6ecab54cb1f2661d403da05906300bc51137aab5\nexpected_cmr (CoreJet (HashJet Sha256Ctx8AddBuffer511)) = 0xc027e1062996ae94ac3971a2c4fae54997ebf09b9f7da575639be617167f02e3\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Finalize)) = 0xcbba1f1d8a97ab4d1fa9686e7aeef066fb5bf290716eae10e70b619996c59594\nexpected_cmr (CoreJet (HashJet Sha256Ctx8Init)) = 0xa53c7679e3ae0347d4d79126a7c7e49ac0dec90cdf935799cddb58da8f4496e4\nexpected_cmr (CoreJet (Secp256k1Jet PointVerify1)) = 0x90a3d669b00da795efb2bed8c370c9e3ea0f19c41c7cf23e492e33171a47f5ff\nexpected_cmr (CoreJet (Secp256k1Jet Decompress)) = 0x13973317d587418ef3063631a6edb0acfa1cbe4983d7574b1b305f9661c048cb\nexpected_cmr (CoreJet (Secp256k1Jet LinearVerify1)) = 0x278313d7ce4ad58911de24ee540d19ecebb62f4ab4a71e2aadd4512b2e4bc2e2\nexpected_cmr (CoreJet (Secp256k1Jet LinearCombination1)) = 0x6d9f4a870fbf740c220efff307b5ed91a58c5e51a8adfc3b159030f512d39941\nexpected_cmr (CoreJet (Secp256k1Jet Scale)) = 0xc04543dc85ef11374a930f4a948eb735a6500a1a7158d573123f07217175f318\nexpected_cmr (CoreJet (Secp256k1Jet Generate)) = 0xdf44e17d2a559dd0a7034954ab33377778b151f1cd1e4f9fd31b361d34a8d973\nexpected_cmr (CoreJet (Secp256k1Jet GejInfinity)) = 0x88a952db3816e94259a67537fa8fca1a35a907a86f51ede451fd32ec253d9c62\nexpected_cmr (CoreJet (Secp256k1Jet GejNormalize)) = 0x5de0976ae7f38b36f0022814966db2baed5c476714944d741a8979c4bcf8be25\nexpected_cmr (CoreJet (Secp256k1Jet GejNegate)) = 0xb32c74cab2c7500b73f8ec0560fe23fc4c21aa66596d7f2acf4967886b76d856\nexpected_cmr (CoreJet (Secp256k1Jet GeNegate)) = 0x1ed0ced8dd2558e3485f6fc32d69a2405ecaee312dc4dc65e0fd347773f5983d\nexpected_cmr (CoreJet (Secp256k1Jet GejDouble)) = 0x1edd0582e2fcad99b12d506d29b50a63017f676928be511369006e07cb80d982\nexpected_cmr (CoreJet (Secp256k1Jet GejAdd)) = 0x5a1c310349e8ff5c5a61ac3e10123f74e87faba14c78bc83f9e3413687ecf28b\nexpected_cmr (CoreJet (Secp256k1Jet GejGeAddEx)) = 0x78f0871b8173abde718711263b3ac1d922337ed5ed138d294962d65ce559bd92\nexpected_cmr (CoreJet (Secp256k1Jet GejGeAdd)) = 0x1ea710d56eafee325d2607ddb45ff0170adec2e0ee9bcc68e4b93e1de6ad3568\nexpected_cmr (CoreJet (Secp256k1Jet GejRescale)) = 0xdcfc72a768d5be770f8db278aeafd18e27704c64f8b40fa6fe54ca94727a076e\nexpected_cmr (CoreJet (Secp256k1Jet GejIsInfinity)) = 0x2980a735414e4321afeffefa8837edb0a3309a337d59b7bdea921c13056b0428\nexpected_cmr (CoreJet (Secp256k1Jet GejEquiv)) = 0x027471059487a12ca207f0940594d6cd87fc930a8b5b31434a16a2d67f1d8dd4\nexpected_cmr (CoreJet (Secp256k1Jet GejGeEquiv)) = 0xba899a006216d1c93bd5ecbe0080d9078a500a729bbd396a004af51d4ff7d93a\nexpected_cmr (CoreJet (Secp256k1Jet GejXEquiv)) = 0x52cc214709c0d9fca9db1d09cc807c75cf5a6313ca540a772d4ea9921f37e624\nexpected_cmr (CoreJet (Secp256k1Jet GejYIsOdd)) = 0xfe0106afb9d9e24fd4dbe54511fe272f4dcb307a0ea56d591ceb93ab4bf88745\nexpected_cmr (CoreJet (Secp256k1Jet GejIsOnCurve)) = 0x0187e1e5ef7634a5f016124d4feb5a93dde6aa78176cda48b165a9aa8e0449f2\nexpected_cmr (CoreJet (Secp256k1Jet GeIsOnCurve)) = 0x69f0e7a0c5fff87084ed6925f8db762e419e057b96834dce9699b0b009423059\nexpected_cmr (CoreJet (Secp256k1Jet ScalarNormalize)) = 0xa061e19d75c325a26d565aad7e3f9ae26b222f25e802174f6bacd511277aeaa5\nexpected_cmr (CoreJet (Secp256k1Jet ScalarNegate)) = 0x0705acdfb86640000e3d3bad509a14a78c171f61edc08423b042b94748439cf8\nexpected_cmr (CoreJet (Secp256k1Jet ScalarAdd)) = 0x34baa40b2e0aa8cb7e97c73e3ed3b365a15b7c3f7661fb19715ec605c1149d11\nexpected_cmr (CoreJet (Secp256k1Jet ScalarSquare)) = 0x49f734a2659ca0ab7c9e67fcfc3c0d72af0f917c9edcb9929d177a0f0de89d59\nexpected_cmr (CoreJet (Secp256k1Jet ScalarMultiply)) = 0xb2bcc390d637b9e03fbfc42fff71d22e7200f69329cef7169e68a8c71a7f0a4b\nexpected_cmr (CoreJet (Secp256k1Jet ScalarMultiplyLambda)) = 0x89d5855c5f85c0035d27b0c09e20330b001c684b5986abced8360cd39b08c4e1\nexpected_cmr (CoreJet (Secp256k1Jet ScalarInvert)) = 0x6231bdab73ca34ea7e837daad692ede5babfae09b5756d2ab36c5a36475a6589\nexpected_cmr (CoreJet (Secp256k1Jet ScalarIsZero)) = 0xf75eda06ce6af09fae37db4e6225e6a8ac86a23637627d626409190ff3b39d90\nexpected_cmr (CoreJet (Secp256k1Jet FeNormalize)) = 0xc51beffa215e9cde8e933bb94680bae012c4daab3d04b6cbf0733fd735733538\nexpected_cmr (CoreJet (Secp256k1Jet FeNegate)) = 0x3b0d7b5c2e6c3aeb5e00085b9d30585aff054e325a998361113bfd2328c008f6\nexpected_cmr (CoreJet (Secp256k1Jet FeAdd)) = 0xb0593e187ee7333c47a05467df66d5820a6f5bef914a4b76e5d163314b5ef20e\nexpected_cmr (CoreJet (Secp256k1Jet FeSquare)) = 0x5a6e7b2eac73f4e44dfa28fb86bb117b65606f2874d565c9799c63e0fe692b1a\nexpected_cmr (CoreJet (Secp256k1Jet FeMultiply)) = 0x5669929b5f31fa3d02c5839dd06354cd171635f3a0727f322abfc994ba6290de\nexpected_cmr (CoreJet (Secp256k1Jet FeMultiplyBeta)) = 0x7a7813450d82e935690f433e65df707a4dd17534a00ddd40dd85e3e3f78402c3\nexpected_cmr (CoreJet (Secp256k1Jet FeInvert)) = 0x343e9c90f128506056b548d2ed5e223c81f5b06a1ed86b7cd9354057aa595102\nexpected_cmr (CoreJet (Secp256k1Jet FeSquareRoot)) = 0xe00142ea03094a304ac82bc1e2d2dc71fb064ed082856735b14ff2c7faf036f0\nexpected_cmr (CoreJet (Secp256k1Jet FeIsZero)) = 0x28ff41699a881aafb7a976c0c576353f7fe54463b6aa754cf2c6329af2650e3b\nexpected_cmr (CoreJet (Secp256k1Jet FeIsOdd)) = 0xdcf0375d20818a99f723f8123cbd051a3878a42824b3740f6821a5fa123f14c7\nexpected_cmr (CoreJet (Secp256k1Jet HashToCurve)) = 0x76f7ca1db944ee315ed362fee0673c5894f8853b446070901b857901f9499d9b\nexpected_cmr (CoreJet (Secp256k1Jet Swu)) = 0xabf70be00b30f577f987cb50488996ba3596dbf9c1e844a8b1b8b710853b65eb\nexpected_cmr (CoreJet (SignatureJet CheckSigVerify)) = 0xb58015546d2852665dd21bf11266267020fa5e275001dd4618fa415625952e68\nexpected_cmr (CoreJet (SignatureJet Bip0340Verify)) = 0xc9c45a8aec8659143bfe2af6ead48d4e0542453acae84b9bbb97656b670bdfdd\nexpected_cmr (CoreJet (BitcoinJet ParseLock)) = 0x3d3836fd3085c1fbac6cd5fa0dbf4a3fb255459317a266d6d6f7382bb05f07ad\nexpected_cmr (CoreJet (BitcoinJet ParseSequence)) = 0x74f35c019ef514b70ab008bf2a126de7e00f6e3ccd285d51dbd3ac71bea9c88d\nexpected_cmr (CoreJet (BitcoinJet TapdataInit)) = 0x6c67e5c10735305ee7deb59a6c6ac2effcab4ff7bb479ea70081606e60484ca7\nexpected_cmr (ElementsJet (SigHashJet SigAllHash)) = 0x6ac53d3f93b8caf3ea8534ae612abd32325d2b0fec17de36af0f71aa978f7cde\nexpected_cmr (ElementsJet (SigHashJet TxHash)) = 0xc36102aeda8bcf62a85e714b18e4c50cd417ffbf86d73734e02cbfcb5313fccf\nexpected_cmr (ElementsJet (SigHashJet TapEnvHash)) = 0x7227077193ec17418ebf7877afdc7097bd5eed57e826df6605c648691d003403\nexpected_cmr (ElementsJet (SigHashJet OutputsHash)) = 0x95b3511aea00d043a4e028b25a171c742ec2ff7ad3a7df2f1f6edad08bad2b69\nexpected_cmr (ElementsJet (SigHashJet InputsHash)) = 0x523cd71c5789882f8375a5a54560def8463d1c51e56b7e112693e77b844f4740\nexpected_cmr (ElementsJet (SigHashJet IssuancesHash)) = 0x58659f3f7e0130c4fc916f49bc32eaa0883acb9022fcad5e7805839a99e50cf9\nexpected_cmr (ElementsJet (SigHashJet InputUtxosHash)) = 0x9c48ab31c050ed065aed516866c16c1b96c195ea8e18b024bfc0b8175849f04e\nexpected_cmr (ElementsJet (SigHashJet OutputHash)) = 0x7cb17f8fc7a1ae4efce30a1454e52f8585213cd0f367a127ac27bb9766ea9eee\nexpected_cmr (ElementsJet (SigHashJet OutputAmountsHash)) = 0x40236963e10ef8ad9cb6e0a7c79ac8660d2fc1a57feff88515a7852791b186cb\nexpected_cmr (ElementsJet (SigHashJet OutputScriptsHash)) = 0x21333ac958a4ebfd5eab7956db73ed03269426af8d7d2498de57eef68704fb0a\nexpected_cmr (ElementsJet (SigHashJet OutputNoncesHash)) = 0x50f18766de9828db0a8c41d7beb840f77bc6e121ff123d5496f1ea0d6a78b83a\nexpected_cmr (ElementsJet (SigHashJet OutputRangeProofsHash)) = 0x0d7d8ac97af9539abba64d8104d17e970854677c27461d25df21a7f6b662081e\nexpected_cmr (ElementsJet (SigHashJet OutputSurjectionProofsHash)) = 0x3630b5208302641bf19c4bf5ca047ac3eb7af54d5d3f5bf8f1d41312499d6384\nexpected_cmr (ElementsJet (SigHashJet InputHash)) = 0x3309bb46b3158d23124f8cedaaa1ed3b09a8aefe81212e11335523b6b207c544\nexpected_cmr (ElementsJet (SigHashJet InputOutpointsHash)) = 0x140a2baead083baac806128ab649e52bbd3c6456700cbcfc6dbb2959173a4df2\nexpected_cmr (ElementsJet (SigHashJet InputSequencesHash)) = 0xc888c873302b92b00f206852c9eaef000b40109a53dd686a53f11db5074d9937\nexpected_cmr (ElementsJet (SigHashJet InputAnnexesHash)) = 0xded1522efa5a2b376173e440de227ad0c92be2edce7c23b51480e50a77fc564b\nexpected_cmr (ElementsJet (SigHashJet InputScriptSigsHash)) = 0x6c7481420124b6645d32ff9b454a1c92c67186410e23cf609915df9072120fc6\nexpected_cmr (ElementsJet (SigHashJet IssuanceHash)) = 0x6e9f8ae8c45bfb7e4e0cf2d00f66832b479de7582cdbc851d0b3230fdfbbb78d\nexpected_cmr (ElementsJet (SigHashJet IssuanceAssetAmountsHash)) = 0x70f11c3b3b5d1657d3b7c7eeec850c30a32ea96aa36426fa30ebf5499851a880\nexpected_cmr (ElementsJet (SigHashJet IssuanceTokenAmountsHash)) = 0x94b5a4595b674dbfc49c4e8ea1a9abc93ed2f7707c4212a32b5b86ac1318c9de\nexpected_cmr (ElementsJet (SigHashJet IssuanceRangeProofsHash)) = 0x7e97f519534831c77acf73a20fd53cb31d1d156c9acbbf873d1492d60d1367d8\nexpected_cmr (ElementsJet (SigHashJet IssuanceBlindingEntropyHash)) = 0xbfb6a93444e2a0b3fb7c13d1589a787b66e84b69b6274cea20ad9999eb8ca67c\nexpected_cmr (ElementsJet (SigHashJet InputUtxoHash)) = 0x8503d0526ba95a8fba8ca1351c7991c2a386b72fa81431eadbab62cc1f5dc518\nexpected_cmr (ElementsJet (SigHashJet InputAmountsHash)) = 0x2b4df47e758ffe88e9cd5d396df3d7f9ec2fbd5a5395a6d8c1ab704400c64f70\nexpected_cmr (ElementsJet (SigHashJet InputScriptsHash)) = 0xdc13519e753e58753c70988541ad8a0bb5888d0846e35e4d4273f65685322ae9\nexpected_cmr (ElementsJet (SigHashJet TapleafHash)) = 0xd45a661fc9100e2ea9df789ca2346da842717ef6a8c824184f2da8c7fb016203\nexpected_cmr (ElementsJet (SigHashJet TappathHash)) = 0x9da906e3ec086065be144136b51620b66ddf4d713857354eba3b97c77585f443\nexpected_cmr (ElementsJet (SigHashJet OutpointHash)) = 0x8d2a5aa06e98c41b30fd0703e5e54c86b42bee33bc89cb6093cdb09405a72d9d\nexpected_cmr (ElementsJet (SigHashJet AssetAmountHash)) = 0xa864d1f1f83950b63196fe88baec2e4228953230be45c88c4e0b99178b338f07\nexpected_cmr (ElementsJet (SigHashJet NonceHash)) = 0xfb1e0344dcdaf9db91b987e8f96610679f05deb206b401057502a484aa87f8bf\nexpected_cmr (ElementsJet (SigHashJet AnnexHash)) = 0xeba1b7fb2ea8d57af3b6273e5182fb99db1708b2d0afb9c6ad0358cc3f647dc8\nexpected_cmr (ElementsJet (SigHashJet BuildTapleafSimplicity)) = 0x736e9fcefb5b873e09f2681e74e49f5a1056f90af52ab3ec5b197727d39834be\nexpected_cmr (ElementsJet (SigHashJet BuildTapbranch)) = 0xcbecf9bce172c50f585951dff0e0523db109e57025ec37de2c3a74d4a673f225\nexpected_cmr (ElementsJet (SigHashJet BuildTaptweak)) = 0x38741f80a2bf10f8f8723077c6741cbeae2dcac857901b813725806f21898ee3\nexpected_cmr (ElementsJet (TimeLockJet CheckLockHeight)) = 0x9e7898d037627134d2bd70c7fca9cba45eaf267d4d09ad50a9ef717a8f2749db\nexpected_cmr (ElementsJet (TimeLockJet CheckLockTime)) = 0x68673d12e2732faa1d39e2136b1406afa098a84c96e8d60502a2dd61c59570bb\nexpected_cmr (ElementsJet (TimeLockJet BrokenDoNotUseCheckLockDistance)) = 0x7f78c7a77a25ada223267d239a5922f764b8ac0c2fcef68eb93c0d92da4af515\nexpected_cmr (ElementsJet (TimeLockJet BrokenDoNotUseCheckLockDuration)) = 0x73dac8e25d87eaf382c2a77206ad38b9384361e7d0dc87c0fa7af7ea524597b7\nexpected_cmr (ElementsJet (TimeLockJet TxLockHeight)) = 0xc20257f8e76ecd0ae7ad634f5dfa68ae9a5eded0e2eebe4ee52cb47acfb0264c\nexpected_cmr (ElementsJet (TimeLockJet TxLockTime)) = 0x3ee1900542d01efd4e9a01d4efb1f9dd992ced35b7a752f83da593381538dea4\nexpected_cmr (ElementsJet (TimeLockJet BrokenDoNotUseTxLockDistance)) = 0x4c7773b818cb7ee5f54f925aad015677a043a72f316a187cc28c696cfcb90807\nexpected_cmr (ElementsJet (TimeLockJet BrokenDoNotUseTxLockDuration)) = 0xcc9c64c8b6eb4bf09694af5a35d957a405e66c1b35224ed675878918452440b2\nexpected_cmr (ElementsJet (TimeLockJet TxIsFinal)) = 0x8b3145722470a07de90a28ba89f3f8864261009654ce866cd8eaf76c5d8626eb\nexpected_cmr (ElementsJet (IssuanceJet Issuance)) = 0x5c646312c169c68027979e1bc326c5dc95e5c5168d00d98e9d504a7cde21d768\nexpected_cmr (ElementsJet (IssuanceJet IssuanceAsset)) = 0x690bf918e1527756cfbbf51c831362143756d52d04e1294f1264950c6267e5c9\nexpected_cmr (ElementsJet (IssuanceJet IssuanceToken)) = 0xbc2cb7e964b2a2aed79b75c5f4408fe84a6dc9b9e8cd2c694d57c5f9b61205b9\nexpected_cmr (ElementsJet (IssuanceJet IssuanceEntropy)) = 0x6ddf99f28c70198d65417a836074f1b9b610f21f5119fd550f60b6f8e995bbf3\nexpected_cmr (ElementsJet (IssuanceJet CalculateIssuanceEntropy)) = 0xa6e7c434aee5a7330c1fc246f71dcf051ce54bdee7b8e63957be18c2d751c653\nexpected_cmr (ElementsJet (IssuanceJet CalculateAsset)) = 0x676f988e547251e7a09eede1920a9c5d35e75759e6d8d49b580ceb3e146bcf7e\nexpected_cmr (ElementsJet (IssuanceJet CalculateExplicitToken)) = 0x875228020b456c998aad3ac5c4836f719445dcbe6bd274e8ca145d82797e1b92\nexpected_cmr (ElementsJet (IssuanceJet CalculateConfidentialToken)) = 0x8e4029056074339840c0e7009b66f382bb98d7dde719dd2c9f2fd3acd9325ac6\nexpected_cmr (ElementsJet (IssuanceJet LbtcAsset)) = 0x2af7f73ae3fbbfa2d23a8774e6e3ca093254da2fd2a9f397a6ae0a30bb48f0d7\nexpected_cmr (ElementsJet (TransactionJet ScriptCMR)) = 0xec15f59c524d941469811954654f635830ecd7de517662b25ca4e8d05c2cce89\nexpected_cmr (ElementsJet (TransactionJet InternalKey)) = 0x9b742e471b0e591a972b0d4421f9c9659397f5daba2c14dac62c4a339cc3e7ec\nexpected_cmr (ElementsJet (TransactionJet CurrentIndex)) = 0x15e1051ff23f851c19131f0de6edc4882376a25790dbd9102824aa22a889ae84\nexpected_cmr (ElementsJet (TransactionJet NumInputs)) = 0xb2288ebaadcbcfce1c631964c86b127d6f91dc657c59a7fb453e9111d87481f5\nexpected_cmr (ElementsJet (TransactionJet NumOutputs)) = 0x267d41654493903e0257751ae6d42d9ce1bb92246d0ef767c337b0c32b1972fd\nexpected_cmr (ElementsJet (TransactionJet LockTime)) = 0xa16897c5db4927c6cb07b165bd2cc38b36a602686c74a19034aa3787ac582a0b\nexpected_cmr (ElementsJet (TransactionJet OutputAsset)) = 0x575a49bab21ffee8e5bd00edce32406104a05ddef5fc31a1a645b129548c8f3e\nexpected_cmr (ElementsJet (TransactionJet OutputAmount)) = 0x55e413992169408e338e11a8d7be602b3ec9511e7eb691df32d9797a6395a1a1\nexpected_cmr (ElementsJet (TransactionJet OutputNonce)) = 0x7175fd99a2baa1c3afaaf7fabdaa67c2c827483bc8a0b97650cb7942ea295a18\nexpected_cmr (ElementsJet (TransactionJet OutputScriptHash)) = 0x2f5139266f143a33e1668e594f43e8d1394407e3a9b8b802b39a5e1edc54e851\nexpected_cmr (ElementsJet (TransactionJet OutputNullDatum)) = 0x38a5a7e861b3b36cce683a772db0c8628b7fd3b4cf8e7bce70758fa6f6f147bf\nexpected_cmr (ElementsJet (TransactionJet OutputIsFee)) = 0x9fbbe8aebdedd577ae466280a99b67b7343287ef340692534a00980315e51772\nexpected_cmr (ElementsJet (TransactionJet OutputSurjectionProof)) = 0x091660081d52c33f17a956bddac62aa2d2ed928f8cffef4cf8dbb697b153aa65\nexpected_cmr (ElementsJet (TransactionJet OutputRangeProof)) = 0x6ff9ef3dac504310dfbc60561d2addeb44932f777e7f13adf0774eb6b14df966\nexpected_cmr (ElementsJet (TransactionJet TotalFee)) = 0x4eba3f22bac0a465e4d08a9ac40518ef972c2e8612090a51e3203fcbd2f4edbe\nexpected_cmr (ElementsJet (TransactionJet CurrentPegin)) = 0x369ad5f6d760481cb353a9bacf900ff162b76040c07ad0a83e52fccef1295790\nexpected_cmr (ElementsJet (TransactionJet CurrentPrevOutpoint)) = 0xa1ec909c81e508e86e1361ba82e5fb47a2c76bffba7321a6fc13cb12af7f697c\nexpected_cmr (ElementsJet (TransactionJet CurrentAsset)) = 0x03c84459a5ecdfdb46e3d38ecb79ff22243fdcf70d80da1ba45699e7008eecfe\nexpected_cmr (ElementsJet (TransactionJet CurrentAmount)) = 0x9e7bc96d06c1f4a4d2bd4333d55643cba6863d3a338e31dc0d1795584156ea69\nexpected_cmr (ElementsJet (TransactionJet CurrentScriptHash)) = 0xbfaf858443cec8337e37839dc41135027184580c892157ce730418c08d5ed838\nexpected_cmr (ElementsJet (TransactionJet CurrentSequence)) = 0x0f4224f9aa8644f5c0f7910f1739041aec8e7af77b5f38cfdca0fdf48267a6c3\nexpected_cmr (ElementsJet (TransactionJet CurrentAnnexHash)) = 0x5f68bdafd417febb10dee16b1d47c21fa97efc919157c7f7bc54a61dc4f9f7d6\nexpected_cmr (ElementsJet (TransactionJet CurrentScriptSigHash)) = 0x8baa9df854fe33eeea66195c97ce18ed701e107eea7e02fb2603b2c121575066\nexpected_cmr (ElementsJet (TransactionJet CurrentReissuanceBlinding)) = 0xb71550c8f62e7aacff13e8d3c0ae054ef036409d76c06579c026ad68a1b561f8\nexpected_cmr (ElementsJet (TransactionJet CurrentNewIssuanceContract)) = 0x237815675e9e9cf4d8548560c761e3ba7f64dcf25c99521be9d857e4ea41d868\nexpected_cmr (ElementsJet (TransactionJet CurrentReissuanceEntropy)) = 0x8b2715327a0ac6b0d18a2e51fbda46c4b118ee0637d114ae3e58a23b45d67ff8\nexpected_cmr (ElementsJet (TransactionJet CurrentIssuanceAssetAmount)) = 0xdc410ec69946f08b9c4a40cf38819cbb014e98fce0a9b196514557477fe1c2a7\nexpected_cmr (ElementsJet (TransactionJet CurrentIssuanceTokenAmount)) = 0xe3ea9c6170955f27b01b120cd63a360850cc700f4725193bdff88e01dfb04ead\nexpected_cmr (ElementsJet (TransactionJet CurrentIssuanceAssetProof)) = 0xe5c1c6f7ea0296148e76f8b179d415198273dcc8e1fd891f83ef2bdfb0692936\nexpected_cmr (ElementsJet (TransactionJet CurrentIssuanceTokenProof)) = 0x92e7d9ddbf756e3e622a44d4d00e84236bcce42f16f3200e8b89c03c441e458a\nexpected_cmr (ElementsJet (TransactionJet InputPegin)) = 0xdb376f4ae84ec051a494d7668039727b53353be5ae045be76c4b04dabd5bbfbb\nexpected_cmr (ElementsJet (TransactionJet InputPrevOutpoint)) = 0x91f4d6ec484f60cae9297858cac47dad50db07dc1f937ac6144c9cb4a9ef79d2\nexpected_cmr (ElementsJet (TransactionJet InputAsset)) = 0x872b3653d65ae7f9166cbf70d4fd31404798884d611b647fb9f4a307c48011b8\nexpected_cmr (ElementsJet (TransactionJet InputAmount)) = 0xdd65ac32c87d996b407200feefc479a9119c1f28caa488b0aac3acf59378d6ba\nexpected_cmr (ElementsJet (TransactionJet InputScriptHash)) = 0xc316df21778e624105ca59904b9208e2d423228b3eb1cf68b8eca47bbc7b2ff3\nexpected_cmr (ElementsJet (TransactionJet InputSequence)) = 0x3c6e4a3c21ced524736c545c20e4e2def7678f084cd12bcd6506a5200b5c1738\nexpected_cmr (ElementsJet (TransactionJet InputAnnexHash)) = 0x0fd9e4c6316b37286e8854430e7d741821dc89544a3a59f03dfa40e532b8107f\nexpected_cmr (ElementsJet (TransactionJet InputScriptSigHash)) = 0x941f2b4f3b7f2097d6ea00e97c1e2ba01cb26487c5d2f4723738b37c732c05c4\nexpected_cmr (ElementsJet (TransactionJet ReissuanceBlinding)) = 0xeb6e581e20ba0babe904c8da71a81f7c88b9cf4f42d78b540c1b398c3f105ccc\nexpected_cmr (ElementsJet (TransactionJet NewIssuanceContract)) = 0xdb64808c3ff44880d72bc295d9ac0643e51404de5398ad9e931bd3d2adbca6c4\nexpected_cmr (ElementsJet (TransactionJet ReissuanceEntropy)) = 0xd1d22c497f129c6d6fdbe491364a3513bcd66e15618cbbe2e50739bd834db7f8\nexpected_cmr (ElementsJet (TransactionJet IssuanceAssetAmount)) = 0x83605146ff26a49ca16f1c4a6e0ce0b7c214df12c377f522523deb6d5d0ee44d\nexpected_cmr (ElementsJet (TransactionJet IssuanceTokenAmount)) = 0x7e106464a13b6764ce74d3fe6ba1cbd5f4aeb86bbbdf5888ddf9901dd8b619aa\nexpected_cmr (ElementsJet (TransactionJet IssuanceAssetProof)) = 0x0b061f9f670c05dc39f438313c1379d9bf63f44f9876b956693b41b7f94c6c9d\nexpected_cmr (ElementsJet (TransactionJet IssuanceTokenProof)) = 0x46ed5275f55ab341f57c3519ffedf4e37f3f59c97ce9b8e17fffae16c6cc1c0e\nexpected_cmr (ElementsJet (TransactionJet TapleafVersion)) = 0xddb0edd6ce1e07983d1a6226f00b125189af13bd5cd068123ad43f48201b006f\nexpected_cmr (ElementsJet (TransactionJet Tappath)) = 0x42c0c1f2ef0e28ae7defa15e84a06f35fbf6fc897b29f683fe1a24e30dc58baf\nexpected_cmr (ElementsJet (TransactionJet Version)) = 0x087fc95c41003348759fd840372c6f912d9be4e61eee3c6a7a40dc13c9c1bc70\nexpected_cmr (ElementsJet (TransactionJet GenesisBlockHash)) = 0x0060b60d02b1336072846acff44dd0f4346c74a35e7b56423f9519c442d15daf\nexpected_cmr (ElementsJet (TransactionJet TransactionId)) = 0x08b8eb3c2d2d958458e163e94334950c0bb914a0b9d214fc5e9de8f70a17a0d4\nexpected_cmr (ConstWordJet (ConstWordContent SingleV 0)) = 0xa51cfd799d0bc368f48208032fc3881953f35aa7fd2b985cb237cbad143e30d2\nexpected_cmr (ConstWordJet (ConstWordContent SingleV 1)) = 0xfd49252606a2febe2ad17de13b0a738b1b023bad8f7307e6bb7b65a8b83153cb\nexpected_cmr (ConstWordJet (ConstWordContent (DoubleV SingleV) 0)) = 0xe93b30864811cc800369118d7573ab400d872e2338e406b051de69fb76cd57d4\nexpected_cmr (ConstWordJet (ConstWordContent (DoubleV SingleV) 1)) = 0x31a87b65445c9893c575df925d5472858483a465c59d3ccbd74f609ca8a77d23\nexpected_cmr (ConstWordJet (ConstWordContent (DoubleV SingleV) 2)) = 0x7e83d146509bc020c64683fe5158c5826046a69050eb0336e743d173e05647f0\nexpected_cmr (ConstWordJet (ConstWordContent (DoubleV SingleV) 3)) = 0x0a4f2b4f2f4b0f5d83f565060f3634e35d1e0d0d4309363c58fb6c571d2d42b2\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Elements/Serialization/Tests.hs",
    "content": "-- This module tests some serialization functionality.\nmodule Simplicity.Elements.Serialization.Tests (tests) where\n\nimport Control.Monad (mzero)\nimport Data.Foldable (toList)\nimport qualified Data.List as List\nimport qualified Data.Vector.Unboxed as V\n\nimport Simplicity.Arbitrary\nimport Simplicity.CoreJets\nimport Simplicity.Elements.Jets as Elements\nimport Simplicity.Elements.FFI.Primitive as Elements\nimport Simplicity.FFI.Dag\nimport Simplicity.MerkleRoot\nimport Simplicity.Serialization\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit ((@=?), testCase)\nimport Test.Tasty.QuickCheck (Property, arbitrary, forAll, chooseInt, testProperty, vectorOf)\n\n-- Run tests comparing Bit Machine execution with Simplicity's denotational semantics using both naive and TCO translation.\ntests :: TestTree\ntests = testGroup \"Elements Serialization\"\n      [ testGroup \"Haskell\"\n        [ testDecodeElementsJet jt | SomeArrow jt@(ElementsJet _) <- toList Elements.jetMap ]\n      , testGroup \"C\"\n      $ [ testDecodeElementsJetFFI jt | SomeArrow jt <- toList Elements.jetMap ]\n      ++ [ testProperty \"prop_wordCMR\" prop_wordCMR ]\n      ]\n\ntestDecodeElementsJet :: (TyC a, TyC b) => Elements.JetType a b -> TestTree\ntestDecodeElementsJet jt = testCase (show jt) (Just (SomeArrow jt) @=? decode)\n where\n  vector = V.fromList $ Elements.putJetBit jt []\n  decode = evalExactVector (Elements.getJetBit mzero) vector\n\ntestDecodeElementsJetFFI :: (TyC a, TyC b) => Elements.JetType a b -> TestTree\ntestDecodeElementsJetFFI jt = testCase (show jt) (Right cmr @=? Elements.decodeJetCMR bitstream)\n where\n  -- All jet encodings should begin with a 1 bit, which we consume.\n  True:bitstream = Elements.putJetBit jt []\n  cmr = commitmentRoot (asJet jt)\n\nprop_wordCMR :: SomeConstWordContent -> Property\nprop_wordCMR (SomeConstWordContent cwc) = forAll prefix prop\n where\n  prefix = do\n    n <- chooseInt (0, 7)\n    vectorOf n arbitrary\n  prop l = wordCMR == computeWordCMR (length l) (l ++ stream)\n   where\n    wordCMR = commitmentRoot $ asJet (ConstWordJet cwc)\n    stream = putConstWordValueBit cwc\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Elements/TestEval.hs",
    "content": "-- | This module builds a wrapper around 'Simplicity.Elements.Semantics.fastEval' to define a 'testEval' variant.\nmodule Simplicity.Elements.TestEval\n  ( testEval, TestEval\n  ) where\n\nimport Prelude hiding (drop, take, fail)\n\nimport Control.Arrow (Kleisli(..), first)\nimport Control.Monad.Reader (ReaderT(..))\n\nimport qualified Simplicity.Elements.Jets as Jets\nimport Simplicity.Elements.JetType\nimport Simplicity.Elements.Primitive\nimport Simplicity.Elements.Semantics\nimport Simplicity.Elements.Term\n\n-- | An Assert instance for 'testCoreEval'.\ndata TestEval jt a b = TestEval { testEvalSem :: Kleisli (ReaderT PrimEnv Maybe) a b\n                                , testEvalFast :: FastEval jt a b\n                                }\n\n-- | 'testEval' optimizes Simplicity with assertions evaluation using jets, similar to 'fastEval',\n-- but excludes the expression itself from being substituted.\n-- This is used in for testing jets against their specifications under the assumption that jets for any subexpressions are correct.\n-- Delegation, witnesses, and jets are not supported since they are not allowed within jet definitions.\ntestEval :: TestEval Jets.JetType a b -> PrimEnv -> a -> Maybe b\ntestEval = flip . (runReaderT .) . runKleisli . testEvalSem\n\ntestFastKleisli = Kleisli . (ReaderT .) . flip . fastEval . testEvalFast\n\nmkLeaf sComb fComb = TestEval sComb fComb\n\nmkUnary sComb fComb t = TestEval (sComb (testFastKleisli t)) (fComb (testEvalFast t))\n\nmkBinary sComb fComb s t = TestEval (sComb (testFastKleisli s) (testFastKleisli t))\n                                    (fComb (testEvalFast s) (testEvalFast t))\n\ninstance JetType jt => Core (TestEval jt) where\n  iden = mkLeaf iden iden\n  comp = mkBinary comp comp\n  unit = mkLeaf unit unit\n  injl = mkUnary injl injl\n  injr = mkUnary injr injr\n  match = mkBinary match match\n  pair = mkBinary pair pair\n  take = mkUnary take take\n  drop = mkUnary drop drop\n\ninstance JetType jt => Assert (TestEval jt) where\n  assertl s h = mkUnary (flip assertl h) (flip assertl h) s\n  assertr h t = mkUnary (assertr h) (assertr h) t\n  fail b = mkLeaf (fail b) (fail b)\n\ninstance JetType jt => Primitive (TestEval jt)  where\n  primitive p = mkLeaf (primitive p) (primitive p)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Elements/Tests.hs",
    "content": "module Simplicity.Elements.Tests (tests) where\n\nimport Control.Arrow ((***), (+++))\nimport qualified Data.ByteString.Char8 as BSC\nimport qualified Data.ByteString.Lazy as BSL\nimport qualified Data.Map as Map\nimport Data.Maybe (fromMaybe, isJust)\nimport Data.Serialize (encode, put, putWord8, putWord32be, runPutLazy)\nimport Data.Vector ((!), (!?), fromList)\nimport Lens.Family2 (review, over, under, view)\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit (Assertion, (@?=), assertBool, testCase)\nimport Test.Tasty.QuickCheck (Property, NonNegative(..), arbitrary, classify, forAll, testProperty)\n\nimport Simplicity.Arbitrary\nimport Simplicity.Digest\nimport Simplicity.Elements.Arbitrary\nimport Simplicity.Elements.DataTypes\nimport Simplicity.Elements.Jets\nimport Simplicity.Elements.Term\nimport Simplicity.Elements.TestEval\nimport qualified Simplicity.Elements.Regression as Regression\nimport Simplicity.Elements.Primitive (primEnv, primEnvHash, envTx, envTap)\nimport qualified Simplicity.Elements.Programs.TimeLock as Prog\nimport Simplicity.Elements.Semantics\nimport qualified Simplicity.LibSecp256k1.Spec as Schnorr\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.CheckSig.Lib\nimport qualified Simplicity.Programs.Sha256 as Sha256\nimport qualified Simplicity.Programs.Elements.Lib as Prog\nimport qualified Simplicity.Elements.Programs.Issuance.Lib as Prog\nimport qualified Simplicity.Elements.Programs.SigHash.Lib as Prog\nimport Simplicity.TestCoreEval\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as Word\n\ntoW32 :: Word.Word32 -> Word32\ntoW32 = toWord32 . fromIntegral\n\ntoW16 :: Word.Word16 -> Word16\ntoW16 = toWord16 . fromIntegral\n\ntoW8 :: Word.Word8 -> Word8\ntoW8 = toWord8 . fromIntegral\n\ntests :: TestTree\ntests = testGroup \"Elements\"\n        [ Regression.tests\n        , testGroup \"TimeLock\"\n          [ testProperty \"tx_is_final\" prop_tx_is_final\n          , testProperty \"tx_lock_height\" prop_tx_lock_height\n          , testProperty \"tx_lock_time\" prop_tx_lock_time\n          , testProperty \"tx_lock_distance\" prop_tx_lock_distance\n          , testProperty \"tx_lock_duration\" prop_tx_lock_duration\n          , testProperty \"check_lock_height\" prop_check_lock_height\n          , testProperty \"check_lock_time\" prop_check_lock_time\n          , testProperty \"check_lock_distance\" prop_check_lock_distance\n          , testProperty \"check_lock_duration\" prop_check_lock_duration\n          ]\n        , testGroup \"Elements Functions\"\n          [ testProperty \"calculate_issuance_entropy\" prop_calculate_issuance_entropy\n          , testProperty \"calculate_asset\" prop_calculate_asset\n          , testProperty \"calculate_explicit_token\" prop_calculate_explicit_token\n          , testProperty \"calculate_confidential_token\" prop_calculate_confidential_token\n          , testProperty \"outpoint_hash\" prop_outpoint_hash\n          , testProperty \"asset_amount_hash\" prop_asset_amount_hash\n          , testProperty \"nonce_hash\" prop_nonce_hash\n          , testProperty \"annex_hash\" prop_annex_hash\n          , testProperty \"build_tapleaf_simplicity\" prop_build_tapleaf_simplicity\n          , testProperty \"build_tapbranch\" prop_build_tapbranch\n          , testProperty \"build_taptweak\" prop_build_taptweak\n          , testProperty \"input_issuance\" prop_input_issuance\n          , testProperty \"input_issuance_asset\" prop_input_issuance_asset\n          , testProperty \"input_issuance_token\" prop_input_issuance_token\n          , testProperty \"input_issuance_entropy\" prop_input_issuance_entropy\n          , testProperty \"output_amounts_hash\" prop_output_amounts_hash\n          , testProperty \"output_nonces_hash\" prop_output_nonces_hash\n          , testProperty \"output_scripts_hash\" prop_output_scripts_hash\n          , testProperty \"output_range_proofs_hash\" prop_output_range_proofs_hash\n          , testProperty \"output_surjection_proofs_hash\" prop_output_surjection_proofs_hash\n          , testProperty \"outputs_hash\" prop_outputs_hash\n          , testProperty \"output_hash\" prop_output_hash\n          , testProperty \"input_outpoints_hash\" prop_input_outpoints_hash\n          , testProperty \"input_amounts_hash\" prop_input_amounts_hash\n          , testProperty \"input_scripts_hash\" prop_input_scripts_hash\n          , testProperty \"input_utxos_hash\" prop_input_utxos_hash\n          , testProperty \"input_utxo_hash\" prop_input_utxo_hash\n          , testProperty \"input_sequences_hash\" prop_input_sequences_hash\n          , testProperty \"input_annexes_hash\" prop_input_annexes_hash\n          , testProperty \"input_script_sigs_hash\" prop_input_script_sigs_hash\n          , testProperty \"inputs_hash\" prop_inputs_hash\n          , testProperty \"input_hash\" prop_input_hash\n          , testProperty \"issuance_asset_amounts_hash\" prop_issuance_asset_amounts_hash\n          , testProperty \"issuance_token_amounts_hash\" prop_issuance_token_amounts_hash\n          , testProperty \"issuance_range_proofs_hash\" prop_issuance_range_proofs_hash\n          , testProperty \"issuance_blinding_entropy_hash\" prop_issuance_blinding_entropy_hash\n          , testProperty \"issuances_hash\" prop_issuances_hash\n          , testProperty \"issuance_hash\" prop_issuance_hash\n          , testProperty \"tx_hash\" prop_tx_hash\n          , testProperty \"tap_env_hash\" prop_tap_env_hash\n          , testProperty \"tappath_hash\" prop_tappath_hash\n          , testProperty \"tapleaf_hash\" prop_tapleaf_hash\n          , testProperty \"sig_all_hash\" prop_sig_all_hash\n          , testProperty \"script_cmr\" prop_script_cmr\n          , testProperty \"internal_key\" prop_internal_key\n          , testProperty \"current_index\" prop_current_index\n          , testProperty \"num_inputs\" prop_num_inputs\n          , testProperty \"num_outputs\" prop_num_outputs\n          , testProperty \"lock_time\" prop_lock_time\n          , testProperty \"output_asset\" prop_output_asset\n          , testProperty \"output_amount\" prop_output_amount\n          , testProperty \"output_nonce\" prop_output_nonce\n          , testProperty \"output_script_hash\" prop_output_script_hash\n          , testProperty \"output_null_datum\" prop_output_null_datum\n          , testProperty \"output_is_fee\" prop_output_is_fee\n          , testProperty \"output_surjection_proof\" prop_output_surjection_proof\n          , testProperty \"output_range_proof\" prop_output_range_proof\n          , testProperty \"total_fee\" prop_total_fee\n          , testProperty \"current_pegin\" prop_current_pegin\n          , testProperty \"current_prev_outpoint\" prop_current_prev_outpoint\n          , testProperty \"current_asset\" prop_current_asset\n          , testProperty \"current_amount\" prop_current_amount\n          , testProperty \"current_script_hash\" prop_current_script_hash\n          , testProperty \"current_sequence\" prop_current_sequence\n          , testProperty \"current_annex_hash\" prop_current_annex_hash\n          , testProperty \"current_script_sig_hash\" prop_current_script_sig_hash\n          , testProperty \"current_reissuance_blinding\" prop_current_reissuance_blinding\n          , testProperty \"current_new_issuance_contract\" prop_current_new_issuance_contract\n          , testProperty \"current_reissuance_entropy\" prop_current_reissuance_entropy\n          , testProperty \"current_issuance_asset_amount\" prop_current_issuance_asset_amount\n          , testProperty \"current_issuance_token_amount\" prop_current_issuance_token_amount\n          , testProperty \"current_issuance_asset_proof\" prop_current_issuance_asset_proof\n          , testProperty \"current_issuance_token_proof\" prop_current_issuance_token_proof\n          , testProperty \"input_pegin\" prop_input_pegin\n          , testProperty \"input_prev_outpoint\" prop_input_prev_outpoint\n          , testProperty \"input_asset\" prop_input_asset\n          , testProperty \"input_amount\" prop_input_amount\n          , testProperty \"input_script_hash\" prop_input_script_hash\n          , testProperty \"input_sequence\" prop_input_sequence\n          , testProperty \"input_annex_hash\" prop_input_annex_hash\n          , testProperty \"input_script_sig_hash\" prop_input_script_sig_hash\n          , testProperty \"reissuance_blinding\" prop_reissuance_blinding\n          , testProperty \"new_issuance_contract\" prop_new_issuance_contract\n          , testProperty \"reissuance_entropy\" prop_reissuance_entropy\n          , testProperty \"issuance_asset_amount\" prop_issuance_asset_amount\n          , testProperty \"issuance_token_amount\" prop_issuance_token_amount\n          , testProperty \"issuance_asset_proof\" prop_issuance_asset_proof\n          , testProperty \"issuance_token_proof\" prop_issuance_token_proof\n          , testProperty \"tapleaf_version\" prop_tapleaf_version\n          , testProperty \"tappath\" prop_tappath\n          , testProperty \"version\" prop_version\n          , testProperty \"genesis_block_hash\" prop_genesis_block_hash\n          , testProperty \"transaction_id\" prop_transaction_id\n          , testCase \"lbtc_asset\" assert_lbtc_asset\n          , testCase \"issuance_entropy_1\" assert_issuance_entropy_1\n          , testCase \"calculate_asset_1\" assert_calculate_asset_1\n          , testCase \"calculcate_token_1\" assert_calculcate_token_1\n          , testCase \"issuance_entropy_2\" assert_issuance_entropy_2\n          , testCase \"calculate_asset_2\" assert_calculate_asset_2\n          , testCase \"calculcate_token_2\" assert_calculcate_token_2\n          , testCase \"issuance_entropy_3\" assert_issuance_entropy_3\n          , testCase \"calculate_asset_3\" assert_calculate_asset_3\n          , testCase \"calculcate_token_3\" assert_calculcate_token_3\n          , testCase \"issuance_entropy_4\" assert_issuance_entropy_4\n          , testCase \"calculate_asset_4\" assert_calculate_asset_4\n          , testCase \"calculcate_token_4\" assert_calculcate_token_4\n          ]\n        , testCase \"sigHashAll\" (assertBool \"sigHashAll_matches\" hunit_sigHashAll)\n        ]\n\n-- We use continuations here because we need to ensure that 'fastSpec' is memoized outside of any lambda expressions.\ncheckJet jet k = k (\\env a -> fastSpec env a == implementation jet env a)\n where\n  fastSpec = testEval (specification jet)\n\nprop_tx_is_final :: Property\nprop_tx_is_final = checkJet (ElementsJet (TimeLockJet TxIsFinal))\n                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_height :: Property\nprop_tx_lock_height = checkJet (ElementsJet (TimeLockJet TxLockHeight))\n                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_time :: Property\nprop_tx_lock_time = checkJet (ElementsJet (TimeLockJet TxLockTime))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_distance :: Property\nprop_tx_lock_distance = checkJet (ElementsJet (TimeLockJet BrokenDoNotUseTxLockDistance))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tx_lock_duration :: Property\nprop_tx_lock_duration = checkJet (ElementsJet (TimeLockJet BrokenDoNotUseTxLockDuration))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_check_lock_height :: Property\nprop_check_lock_height = checkJet (ElementsJet (TimeLockJet CheckLockHeight))\n                       $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . sigTxLock $ envTx env)\n                                                 $ \\w -> check env (toW32 w)\n\nprop_check_lock_time :: Property\nprop_check_lock_time = checkJet (ElementsJet (TimeLockJet CheckLockTime))\n                     $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . sigTxLock $ envTx env)\n                                               $ \\w -> check env (toW32 w)\n\nprop_check_lock_distance :: Property\nprop_check_lock_distance = checkJet (ElementsJet (TimeLockJet BrokenDoNotUseCheckLockDistance))\n                         $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . txLockBrokenDistance $ envTx env)\n                                                   $ \\w -> check env (toW16 w)\n\nprop_check_lock_duration :: Property\nprop_check_lock_duration = checkJet (ElementsJet (TimeLockJet BrokenDoNotUseCheckLockDuration))\n                         $ \\check -> forallPrimEnv $ \\env -> forAll (genBoundaryCases . txLockBrokenDuration $ envTx env)\n                                                   $ \\w -> check env (toW16 w)\n\nprop_calculate_issuance_entropy :: Outpoint -> HashElement -> Bool\nprop_calculate_issuance_entropy = \\op contract ->\n  let input = ((fromHash (opHash op), fromIndex (opIndex op)), heAsTy contract) in\n  fast_calculate_issuance_entropy input ==\n    implementation (ElementsJet (IssuanceJet CalculateIssuanceEntropy)) undefined input\n where\n  fromHash = toWord256 . integerHash256\n  fromIndex = toWord32 . fromIntegral\n  fast_calculate_issuance_entropy = testCoreEval Prog.calculateIssuanceEntropy\n\nprop_calculate_asset :: HashElement -> Bool\nprop_calculate_asset = \\entropy ->\n  let input = heAsTy entropy in\n  fast_calculate_asset input ==\n    implementation (ElementsJet (IssuanceJet CalculateAsset)) undefined input\n where\n  fast_calculate_asset = testCoreEval Prog.calculateAsset\n\nprop_calculate_explicit_token :: HashElement -> Bool\nprop_calculate_explicit_token = \\entropy ->\n  let input = heAsTy entropy in\n  fast_calculate_explicit_token input ==\n    implementation (ElementsJet (IssuanceJet CalculateExplicitToken)) undefined input\n where\n  fast_calculate_explicit_token = testCoreEval Prog.calculateExplicitToken\n\nprop_calculate_confidential_token :: HashElement -> Bool\nprop_calculate_confidential_token = \\entropy ->\n  let input = heAsTy entropy in\n  fast_calculate_confidential_token input ==\n    implementation (ElementsJet (IssuanceJet CalculateConfidentialToken)) undefined input\n where\n  fast_calculate_confidential_token = testCoreEval Prog.calculateConfidentialToken\n\nprop_build_tapleaf_simplicity :: HashElement -> Bool\nprop_build_tapleaf_simplicity = \\cmr ->\n  let input = heAsTy cmr in\n  fast_build_tapleaf_simplicity input ==\n    implementation (ElementsJet (SigHashJet BuildTapleafSimplicity)) undefined input\n where\n  fast_build_tapleaf_simplicity = testCoreEval Prog.buildTapleafSimplicity\n\nprop_build_tapbranch :: HashElement -> HashElement -> Bool\nprop_build_tapbranch = \\a b ->\n  let input = (heAsTy a, heAsTy b) in\n  fast_build_tapbranch input ==\n    implementation (ElementsJet (SigHashJet BuildTapbranch)) undefined input\n where\n  fast_build_tapbranch = testCoreEval Prog.buildTapbranch\n\nprop_build_taptweak :: FieldElement -> HashElement -> Bool\nprop_build_taptweak = \\a b ->\n  let input = (feAsTy a, heAsTy b) in\n  fast_build_taptweak input ==\n    implementation (ElementsJet (SigHashJet BuildTaptweak)) undefined input\n where\n  fast_build_taptweak = testCoreEval Prog.buildTaptweak\n\nprop_outpoint_hash :: Sha256CtxElement -> Maybe HashElement -> (HashElement, Word.Word32) -> Bool\nprop_outpoint_hash = \\ctx pegin op ->\n  let input = (ctxAsTy ctx, (maybe (Left ()) (Right . heAsTy) pegin, (heAsTy *** (toWord32 . fromIntegral) $ op)))\n  in fast_outpoint_hash input == implementation (ElementsJet (SigHashJet OutpointHash)) undefined input\n where\n  fast_outpoint_hash = testCoreEval Prog.outpointHash\n\nprop_asset_amount_hash :: Sha256CtxElement -> Either PointElement Word256 -> Either PointElement Word64 -> Bool\nprop_asset_amount_hash = \\ctx cw256 cw64 ->\n  let input = (ctxAsTy ctx, (cast cw256, cast cw64))\n  in fast_asset_amount_hash input == implementation (ElementsJet (SigHashJet AssetAmountHash)) undefined input\n where\n  fast_asset_amount_hash = testCoreEval Prog.assetAmountHash\n  cast = either (Left . pointAsTy) Right\n\nprop_nonce_hash :: Sha256CtxElement -> Maybe Nonce -> Bool\nprop_nonce_hash = \\ctx mnonce ->\n  let input = (ctxAsTy ctx, cast mnonce)\n  in fast_nonce_hash input == implementation (ElementsJet (SigHashJet NonceHash)) undefined input\n where\n  fast_nonce_hash = testCoreEval Prog.nonceHash\n  cast = maybe (Left ()) (Right . ((toBit *** (toWord256 . fromIntegral)) +++ (toWord256 . integerHash256)) . nonce)\n\nprop_annex_hash :: Sha256CtxElement -> Maybe Word256 -> Bool\nprop_annex_hash = \\ctx mw256 ->\n  let input = (ctxAsTy ctx, cast mw256)\n  in fast_annex_hash input == implementation (ElementsJet (SigHashJet AnnexHash)) undefined input\n where\n  fast_annex_hash = testCoreEval Prog.annexHash\n  cast = maybe (Left ()) Right\n\nprop_input_issuance :: Property\nprop_input_issuance = checkJet (ElementsJet (IssuanceJet Issuance))\n                    $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_issuance_asset :: Property\nprop_input_issuance_asset = checkJet (ElementsJet (IssuanceJet IssuanceAsset))\n                          $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_issuance_token :: Property\nprop_input_issuance_token = checkJet (ElementsJet (IssuanceJet IssuanceToken))\n                          $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_issuance_entropy :: Property\nprop_input_issuance_entropy = checkJet (ElementsJet (IssuanceJet IssuanceEntropy))\n                            $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_output_amounts_hash :: Property\nprop_output_amounts_hash = checkJet (ElementsJet (SigHashJet OutputAmountsHash))\n                         $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_nonces_hash :: Property\nprop_output_nonces_hash = checkJet (ElementsJet (SigHashJet OutputNoncesHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_scripts_hash :: Property\nprop_output_scripts_hash = checkJet (ElementsJet (SigHashJet OutputScriptsHash))\n                         $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_range_proofs_hash :: Property\nprop_output_range_proofs_hash = checkJet (ElementsJet (SigHashJet OutputRangeProofsHash))\n                              $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_surjection_proofs_hash :: Property\nprop_output_surjection_proofs_hash = checkJet (ElementsJet (SigHashJet OutputSurjectionProofsHash))\n                                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_outputs_hash :: Property\nprop_outputs_hash = checkJet (ElementsJet (SigHashJet OutputsHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_hash :: Property\nprop_output_hash = checkJet (ElementsJet (SigHashJet OutputHash))\n                  $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_outpoints_hash :: Property\nprop_input_outpoints_hash = checkJet (ElementsJet (SigHashJet InputOutpointsHash))\n                          $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_amounts_hash :: Property\nprop_input_amounts_hash = checkJet (ElementsJet (SigHashJet InputAmountsHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_scripts_hash :: Property\nprop_input_scripts_hash = checkJet (ElementsJet (SigHashJet InputScriptsHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_utxos_hash :: Property\nprop_input_utxos_hash = checkJet (ElementsJet (SigHashJet InputUtxosHash))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_utxo_hash :: Property\nprop_input_utxo_hash = checkJet (ElementsJet (SigHashJet InputUtxoHash))\n                     $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_sequences_hash :: Property\nprop_input_sequences_hash = checkJet (ElementsJet (SigHashJet InputSequencesHash))\n                          $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_annexes_hash :: Property\nprop_input_annexes_hash = checkJet (ElementsJet (SigHashJet InputAnnexesHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_script_sigs_hash :: Property\nprop_input_script_sigs_hash = checkJet (ElementsJet (SigHashJet InputScriptSigsHash))\n                            $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_inputs_hash :: Property\nprop_inputs_hash = checkJet (ElementsJet (SigHashJet InputsHash))\n                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_hash :: Property\nprop_input_hash = checkJet (ElementsJet (SigHashJet InputHash))\n                 $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_issuance_asset_amounts_hash :: Property\nprop_issuance_asset_amounts_hash = checkJet (ElementsJet (SigHashJet IssuanceAssetAmountsHash))\n                                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_issuance_token_amounts_hash :: Property\nprop_issuance_token_amounts_hash = checkJet (ElementsJet (SigHashJet IssuanceTokenAmountsHash))\n                                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_issuance_range_proofs_hash :: Property\nprop_issuance_range_proofs_hash = checkJet (ElementsJet (SigHashJet IssuanceRangeProofsHash))\n                                $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_issuance_blinding_entropy_hash :: Property\nprop_issuance_blinding_entropy_hash = checkJet (ElementsJet (SigHashJet IssuanceBlindingEntropyHash))\n                                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_issuances_hash :: Property\nprop_issuances_hash = checkJet (ElementsJet (SigHashJet IssuancesHash))\n                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_issuance_hash :: Property\nprop_issuance_hash = checkJet (ElementsJet (SigHashJet IssuanceHash))\n                   $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_tx_hash :: Property\nprop_tx_hash = checkJet (ElementsJet (SigHashJet TxHash))\n             $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tappath_hash :: Property\nprop_tappath_hash = checkJet (ElementsJet (SigHashJet TappathHash))\n                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tapleaf_hash :: Property\nprop_tapleaf_hash = checkJet (ElementsJet (SigHashJet TapleafHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tap_env_hash :: Property\nprop_tap_env_hash = checkJet (ElementsJet (SigHashJet TapEnvHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_sig_all_hash :: Property\nprop_sig_all_hash = checkJet (ElementsJet (SigHashJet SigAllHash))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_script_cmr :: Property\nprop_script_cmr = checkJet (ElementsJet (TransactionJet ScriptCMR))\n                $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_internal_key :: Property\nprop_internal_key = checkJet (ElementsJet (TransactionJet InternalKey))\n                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_index :: Property\nprop_current_index = checkJet (ElementsJet (TransactionJet CurrentIndex))\n                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_num_inputs :: Property\nprop_num_inputs = checkJet (ElementsJet (TransactionJet NumInputs))\n                $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_num_outputs :: Property\nprop_num_outputs = checkJet (ElementsJet (TransactionJet NumOutputs))\n                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_lock_time :: Property\nprop_lock_time = checkJet (ElementsJet (TransactionJet LockTime))\n               $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_output_asset :: Property\nprop_output_asset = checkJet (ElementsJet (TransactionJet OutputAsset))\n                  $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_output_amount :: Property\nprop_output_amount = checkJet (ElementsJet (TransactionJet OutputAmount))\n                   $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_output_nonce :: Property\nprop_output_nonce = checkJet (ElementsJet (TransactionJet OutputNonce))\n                  $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_output_script_hash :: Property\nprop_output_script_hash = checkJet (ElementsJet (TransactionJet OutputScriptHash))\n                        $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_output_null_datum :: Property\nprop_output_null_datum = checkJet (ElementsJet (TransactionJet OutputNullDatum))\n                       $ \\check -> forallOutPrimEnv $ \\env i -> forAll arbitrary $ \\(NonNegative j) -> check env (toW32 i, toWord32 j)\n\nprop_output_is_fee :: Property\nprop_output_is_fee = checkJet (ElementsJet (TransactionJet OutputIsFee))\n                   $ \\check -> forallOutPrimEnv $ \\env i ->\n                     classify (isJust $ sigTxOut (envTx env) !? (fromIntegral i) >>= outputFee) \"is_fee\" (check env (toW32 i))\n\nprop_output_surjection_proof :: Property\nprop_output_surjection_proof = checkJet (ElementsJet (TransactionJet OutputSurjectionProof))\n                             $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_output_range_proof :: Property\nprop_output_range_proof = checkJet (ElementsJet (TransactionJet OutputRangeProof))\n                        $ \\check -> forallOutPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_total_fee :: Property\nprop_total_fee = checkJet (ElementsJet (TransactionJet TotalFee))\n               $ \\check -> forallOutPrimEnv $ \\env i -> forAll arbitraryHash256\n               $ \\hash -> let input = fromMaybe hash (getAssetId (sigTxOut (envTx env)) (fromIntegral i))\n                              fee = Map.findWithDefault 0 input (totalFee (envTx env))\n                          in classify (0 /= fee) \"non-zero fee\" $ check env (fromHash input)\n where\n  getAssetId outputs ix = (outputs !? ix) >>= explicitId . view (under asset) . txoAsset\n  explicitId (Explicit a) = Just a\n  explicitId (Confidential _ _) = Nothing\n  fromHash = toWord256 . integerHash256\n\nprop_current_pegin :: Property\nprop_current_pegin = checkJet (ElementsJet (TransactionJet CurrentPegin))\n                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_prev_outpoint :: Property\nprop_current_prev_outpoint = checkJet (ElementsJet (TransactionJet CurrentPrevOutpoint))\n                           $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_asset :: Property\nprop_current_asset = checkJet (ElementsJet (TransactionJet CurrentAsset))\n                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_amount :: Property\nprop_current_amount = checkJet (ElementsJet (TransactionJet CurrentAmount))\n                    $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_script_hash :: Property\nprop_current_script_hash = checkJet (ElementsJet (TransactionJet CurrentScriptHash))\n                         $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_sequence :: Property\nprop_current_sequence = checkJet (ElementsJet (TransactionJet CurrentSequence))\n                      $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_annex_hash :: Property\nprop_current_annex_hash = checkJet (ElementsJet (TransactionJet CurrentAnnexHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_script_sig_hash :: Property\nprop_current_script_sig_hash = checkJet (ElementsJet (TransactionJet CurrentScriptSigHash))\n                             $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_reissuance_blinding :: Property\nprop_current_reissuance_blinding = checkJet (ElementsJet (TransactionJet CurrentReissuanceBlinding))\n                                 $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_new_issuance_contract :: Property\nprop_current_new_issuance_contract = checkJet (ElementsJet (TransactionJet CurrentNewIssuanceContract))\n                                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_reissuance_entropy :: Property\nprop_current_reissuance_entropy = checkJet (ElementsJet (TransactionJet CurrentReissuanceEntropy))\n                                $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_issuance_asset_amount :: Property\nprop_current_issuance_asset_amount = checkJet (ElementsJet (TransactionJet CurrentIssuanceAssetAmount))\n                                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_issuance_token_amount :: Property\nprop_current_issuance_token_amount = checkJet (ElementsJet (TransactionJet CurrentIssuanceTokenAmount))\n                                   $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_issuance_asset_proof :: Property\nprop_current_issuance_asset_proof = checkJet (ElementsJet (TransactionJet CurrentIssuanceAssetProof))\n                                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_current_issuance_token_proof :: Property\nprop_current_issuance_token_proof = checkJet (ElementsJet (TransactionJet CurrentIssuanceTokenProof))\n                                  $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_input_pegin :: Property\nprop_input_pegin = checkJet (ElementsJet (TransactionJet InputPegin))\n                 $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_prev_outpoint :: Property\nprop_input_prev_outpoint = checkJet (ElementsJet (TransactionJet InputPrevOutpoint))\n                         $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_asset :: Property\nprop_input_asset = checkJet (ElementsJet (TransactionJet InputAsset))\n                 $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_amount :: Property\nprop_input_amount = checkJet (ElementsJet (TransactionJet InputAmount))\n                  $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_script_hash :: Property\nprop_input_script_hash = checkJet (ElementsJet (TransactionJet InputScriptHash))\n                       $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_sequence :: Property\nprop_input_sequence = checkJet (ElementsJet (TransactionJet InputSequence))\n                    $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_annex_hash :: Property\nprop_input_annex_hash = checkJet (ElementsJet (TransactionJet InputAnnexHash))\n                      $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_input_script_sig_hash :: Property\nprop_input_script_sig_hash = checkJet (ElementsJet (TransactionJet InputScriptSigHash))\n                           $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_reissuance_blinding :: Property\nprop_reissuance_blinding = checkJet (ElementsJet (TransactionJet ReissuanceBlinding))\n                         $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_new_issuance_contract :: Property\nprop_new_issuance_contract = checkJet (ElementsJet (TransactionJet NewIssuanceContract))\n                           $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_reissuance_entropy :: Property\nprop_reissuance_entropy = checkJet (ElementsJet (TransactionJet ReissuanceEntropy))\n                        $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_issuance_asset_amount :: Property\nprop_issuance_asset_amount = checkJet (ElementsJet (TransactionJet IssuanceAssetAmount))\n                           $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_issuance_token_amount :: Property\nprop_issuance_token_amount = checkJet (ElementsJet (TransactionJet IssuanceTokenAmount))\n                           $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_issuance_asset_proof :: Property\nprop_issuance_asset_proof = checkJet (ElementsJet (TransactionJet IssuanceAssetProof))\n                          $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_issuance_token_proof :: Property\nprop_issuance_token_proof = checkJet (ElementsJet (TransactionJet IssuanceTokenProof))\n                          $ \\check -> forallInPrimEnv $ \\env i -> check env (toW32 i)\n\nprop_tapleaf_version :: Property\nprop_tapleaf_version = checkJet (ElementsJet (TransactionJet TapleafVersion))\n                     $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_tappath :: Property\nprop_tappath = checkJet (ElementsJet (TransactionJet Tappath))\n               $ \\check -> forallPrimEnv $ \\env -> forAll (genTappathIx env) $ \\i -> check env (toW8 i)\n where\n  genTappathIx = genBoundaryCases . fromIntegral . length . tappath . envTap\n\nprop_version :: Property\nprop_version = checkJet (ElementsJet (TransactionJet Version))\n             $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_genesis_block_hash :: Property\nprop_genesis_block_hash = checkJet (ElementsJet (TransactionJet GenesisBlockHash))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nprop_transaction_id :: Property\nprop_transaction_id = checkJet (ElementsJet (TransactionJet TransactionId))\n                        $ \\check -> forallPrimEnv $ \\env -> check env ()\n\nassert_lbtc_asset :: Assertion\nassert_lbtc_asset = testEval (specification jet) env () @?= implementation jet env ()\n where\n  jet = ElementsJet (IssuanceJet LbtcAsset)\n  env = undefined\n\n-- example test data from Elements Core 0.17\n(assert_issuance_entropy_1, assert_calculate_asset_1, assert_calculcate_token_1) =\n  ( calculateIssuanceEntropy outpoint contractHash @?= entropy\n  , calculateAsset entropy @?= assetID\n  , calculateToken (Amount (Explicit undefined)) entropy @?= tokenID\n  )\n where\n  contractHash = review (over le256) 0\n  outpoint = Outpoint (review (over le256) 0x05a047c98e82a848dee94efcf32462b065198bebf2404d201ba2e06db30b28f4) 0\n  entropy = review (over le256) 0x746f447f691323502cad2ef646f932613d37a83aeaa2133185b316648df4b70a\n  assetID = review (over le256) 0xdcd60818d863b5c026c40b2bc3ba6fdaf5018bcc8606c18adf7db4da0bcd8533\n  tokenID = review (over le256) 0xc1adb114f4f87d33bf9ce90dd4f9ca523dd414d6cd010a7917903e2009689530\n\n-- example test data from Elements Core 0.21 with prevout vout = 1\n(assert_issuance_entropy_2, assert_calculate_asset_2, assert_calculcate_token_2) =\n  ( calculateIssuanceEntropy outpoint contractHash @?= entropy\n  , calculateAsset entropy @?= assetID\n  , calculateToken (Amount (Confidential undefined undefined)) entropy @?= tokenID\n  )\n where\n  contractHash = review (over le256) 0\n  outpoint = Outpoint (review (over le256) 0xc76664aa4be760056dcc39b59637eeea8f3c3c3b2aeefb9f23a7b99945a2931e) 1\n  entropy = review (over le256) 0xbc67a13736341d8ad19e558433483a38cae48a44a5a8b5598ca0b01b5f9f9f41\n  assetID = review (over le256) 0x2ec6c1a06e895b06fffb8dc36084255f890467fb906565b0c048d4c807b4a129\n  tokenID = review (over le256) 0xd09d205ff7c626ca98c91fed24787ff747fec62194ed1b7e6ef6cc775a1a1fdc\n\n-- example test data from Elements Core 0.21 with a given contract hash and non-blinded issuance\n(assert_issuance_entropy_3, assert_calculate_asset_3, assert_calculcate_token_3) =\n  ( calculateIssuanceEntropy outpoint contractHash @?= entropy\n  , calculateAsset entropy @?= assetID\n  , calculateToken (Amount (Explicit undefined)) entropy @?= tokenID\n  )\n where\n  contractHash = review (over le256) 0xe06e6d4933e76afd7b9cc6a013e0855aa60bbe6d2fca1c27ec6951ff5f1a20c9\n  outpoint = Outpoint (review (over le256) 0xee45365ddb62e8822182fbdd132fb156b4991e0b7411cff4aab576fd964f2edb) 0\n  entropy = review (over le256) 0x1922da340705eef526640b49d28b08928630d1ad52db0f945f3c389267e292c9\n  assetID = review (over le256) 0x8eebf6109bca0331fe559f0cbd1ef846a2bbb6812f3ae3d8b0b610170cc21a4e\n  tokenID = review (over le256) 0xeb02cbc591c9ede071625c129f0a1fab386202cb27a894a45be0d564e961d6bc\n\n-- example test data from Elements Core 0.21 with confidential re-issuance\n(assert_issuance_entropy_4, assert_calculate_asset_4, assert_calculcate_token_4) =\n  ( calculateIssuanceEntropy outpoint contractHash @?= entropy\n  , calculateAsset entropy @?= assetID\n  , calculateToken (Amount (Confidential undefined undefined)) entropy @?= tokenID\n  )\n where\n  contractHash = review (over le256) 0\n  outpoint = Outpoint (review (over le256) 0x8903ee739b52859877fbfedc58194c2d59d0f5a4ea3c2774dc3cba3031cec757) 0\n  entropy = review (over le256) 0xb9789de8589dc1b664e4f2bda4d04af9d4d2180394a8c47b1f889acfb5e0acc4\n  assetID = review (over le256) 0xbdab916e8cda17781bcdb84505452e44d0ab2f080e9e5dd7765ffd5ce0c07cd9\n  tokenID = review (over le256) 0xf144868169dfc7afc024c4d8f55607ac8dfe925e67688650a9cdc54c3cfa5b1c\n\ntapEnv :: TapEnv\ntapEnv = TapEnv\n         { tapleafVersion = 0xbe\n         , tapInternalKey = Schnorr.PubKey 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n         , tappath = []\n         , tapScriptCMR = review (over be256) 0x896b16e4692350cb43c4807c8f9f63637f70f84a17b678ca9467109ff1e50f61\n         }\n\ntx1 :: SigTx\ntx1 = SigTx\n      { sigTxVersion = 0x00000002\n      , sigTxIn = fromList [input0]\n      , sigTxOut = fromList [output0, output1]\n      , sigTxLock = 0\n      }\n where\n  assetId = Asset . Explicit $ review (over be256) 0x230f4f5d4b7c6fa845806ee4f67713459e1b69e8e60fcee2e4940c7a0d5de1b2\n  input0 = SigTxInput\n    { sigTxiPegin = Nothing\n    , sigTxiPreviousOutpoint = Outpoint (review (over be256) 0xeb04b68e9a26d116046c76e8ff47332fb71dda90ff4bef5370f25226d3bc09fc) 0\n    , sigTxiTxo = UTXO\n        { utxoAsset = assetId\n        , utxoAmount = Amount . Explicit $ 10000000000\n        , utxoScript = BSL.empty\n        }\n    , sigTxiSequence = 0xfffffffe\n    , sigTxiIssuance = Nothing\n    , sigTxiAnnex = Nothing\n    , sigTxiScriptSig = BSL.empty\n    }\n  output0 = TxOutput\n    { txoAsset = assetId\n    , txoAmount = Amount . Explicit $ 9999996700\n    , txoNonce = Nothing\n    , txoScript = BSL.pack\n        [ 0x19, 0x76, 0xa9, 0x14, 0x48, 0x63, 0x3e, 0x2c, 0x0e, 0xe9, 0x49, 0x5d, 0xd3, 0xf9, 0xc4, 0x37\n        , 0x32, 0xc4, 0x7f, 0x47, 0x02, 0xa3, 0x62, 0xc8, 0x88, 0xac]\n    }\n  output1 = TxOutput\n    { txoAsset = assetId\n    , txoAmount = Amount . Explicit $ 3300\n    , txoNonce = Nothing\n    , txoScript = BSL.empty\n    }\n\nhunit_sigHashAll :: Bool\nhunit_sigHashAll = Just (integerHash256 sigHashAll_spec) == (fromWord256 <$> (sem (sigHash' Prog.sigAllHash) txEnv ()))\n where\n  ix = 0\n  genesis = review (over be256) 0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206\n  txo = sigTxiTxo (sigTxIn tx1 ! (fromIntegral ix))\n  Just txEnv = primEnv tx1 ix tapEnv genesis\n  signatureTag = bsHash $ BSC.pack \"Simplicity\\USSignature\"\n  sigHashAll_spec = bslHash . runPutLazy\n                  $ put signatureTag >> put signatureTag\n                 >> put (commitmentRoot Prog.sigAllHash)\n                 >> put (primEnvHash txEnv)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/FFI/Bitstream.hs",
    "content": "{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.FFI.Bitstream\n  ( Bitstream\n  , initializeBitstream\n  ) where\n\nimport qualified Data.ByteString as BS\nimport Data.Serialize (decode)\nimport Data.Serialize.Put (runPut)\nimport Foreign.C.Types (CSize(..), CChar(..))\nimport Foreign.Ptr (Ptr)\nimport Foreign.Marshal.Alloc (allocaBytes)\nimport Foreign.Marshal.Unsafe (unsafeLocalState)\nimport Foreign.Storable (Storable(..))\n\nimport Simplicity.Serialization\n\n-- Abstract representative for our C structures.\nnewtype Bitstream = Bitstream Bitstream\n\nforeign import ccall unsafe \"&\" c_sizeof_bitstream :: Ptr CSize\n\nforeign import ccall unsafe \"\" c_initializeBitstream :: Ptr Bitstream -> Ptr CChar -> CSize -> IO ()\n\nsizeof_bitstream :: Int\nsizeof_bitstream = fromIntegral . unsafeLocalState $ peek c_sizeof_bitstream\n\ninitializeBitstream :: [Bool] -> (Ptr Bitstream -> IO a) -> IO a\ninitializeBitstream stream k =\n  allocaBytes sizeof_bitstream $ \\pstream ->\n  BS.useAsCString bs $ \\pbs -> do\n   c_initializeBitstream pstream pbs (fromIntegral len)\n   k pstream\n where\n  bs = runPut $ putBitStream stream\n  len = length stream\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/FFI/Dag.hs",
    "content": "{-# LANGUAGE ForeignFunctionInterface #-}\nmodule Simplicity.FFI.Dag\n  ( DagNode\n  , dagNodeGetCMR\n  , withDagNode\n  , computeWordCMR\n  ) where\n\nimport qualified Data.ByteString as BS\nimport Data.Serialize (decode)\nimport Data.Serialize.Put (runPut)\nimport Foreign.C.Types (CSize(..), CChar(..))\nimport Foreign.Ptr (Ptr)\nimport Foreign.Marshal.Alloc (allocaBytes)\nimport Foreign.Marshal.Array (allocaArray)\nimport Foreign.Marshal.Unsafe (unsafeLocalState)\nimport Foreign.Storable (Storable(..))\n\nimport Simplicity.Digest\nimport Simplicity.FFI.Bitstream\n\n-- Abstract representative for our C structures.\nnewtype DagNode = DagNode DagNode\n\nforeign import ccall unsafe \"&\" c_sizeof_dag_node :: Ptr CSize\n\nforeign import ccall unsafe \"\" c_dag_node_get_cmr :: Ptr CChar -> Ptr DagNode -> IO ()\nforeign import ccall unsafe \"\" c_compute_word_cmr :: Ptr CChar -> Ptr Bitstream -> CSize -> CSize -> IO ()\n\nsizeof_dag_node :: Int\nsizeof_dag_node = fromIntegral . unsafeLocalState $ peek c_sizeof_dag_node\n\nwithDagNode :: (Ptr DagNode -> IO a) -> IO a\nwithDagNode = allocaBytes sizeof_dag_node\n\ndagNodeGetCMR :: Ptr DagNode -> IO Hash256\ndagNodeGetCMR pnode =\n  allocaArray 32 $ \\buf -> do\n  c_dag_node_get_cmr buf pnode\n  Right hash <- decode <$> BS.packCStringLen (buf, 32)\n  return hash\n\ncomputeWordCMR :: Int -> [Bool] -> Hash256\ncomputeWordCMR offset stream = case log2Of (length stream - offset) of\n  Nothing -> error $ \"Simplicity.FFI.Dag.computeWordCMR: Bad stream length \" ++ show (length stream - offset)\n  Just n -> unsafeLocalState $\n    initializeBitstream stream $ \\pstream ->\n    allocaArray 32 $ \\buf -> do\n    c_compute_word_cmr buf pstream (fromIntegral offset) (fromIntegral n)\n    Right hash <- decode <$> BS.packCStringLen (buf, 32)\n    return hash\n\nlog2Of :: Int -> Maybe Int\nlog2Of 1 = Just 0\nlog2Of n | n <= 0 = Nothing\n         | odd n = Nothing\n         | otherwise = (+ 1) <$> log2Of (n `div` 2)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/FFI/Tests.hs",
    "content": "module Simplicity.FFI.Tests\n ( tests\n , main\n , prop_div_mod_128_64 \n ) where\n\nimport Control.Arrow ((***))\nimport Data.Bits ((.|.))\nimport Lens.Family2 ((^.), (^..), over, allOf, review, zipWithOf)\nimport Test.Tasty (TestTree, defaultMain, testGroup)\nimport Test.Tasty.QuickCheck ( Arbitrary(..), Gen, Property, arbitraryBoundedIntegral, arbitrarySizedBoundedIntegral, shrinkIntegral\n                             , choose, forAll, property, Discard(Discard), testProperty, vectorOf, withMaxSuccess\n                             , label\n                             )\nimport Test.Tasty.HUnit (Assertion, (@=?), assertBool, testCase)\n\nimport Simplicity.Arbitrary\nimport Simplicity.CoreJets\nimport Simplicity.Digest\nimport Simplicity.Elements.Arbitrary\nimport qualified Simplicity.FFI.Jets as C\nimport Simplicity.Programs.LibSecp256k1.Lib as Prog\nimport Simplicity.LibSecp256k1.Spec as Spec\nimport Simplicity.MerkleRoot\nimport Simplicity.TestCoreEval\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Ty.LibSecp256k1\nimport Simplicity.Ty.Word\nimport Simplicity.Bip0340\nimport Simplicity.Word as W\n\nmain = defaultMain tests\n\ntests :: TestTree\ntests = testGroup \"C / SPEC\"\n      [ testGroup \"word\" $\n        [ testCase     \"verify\" assert_verify\n        , testCase     \"low_1\" assert_low_1\n        , testCase     \"low_8\" assert_low_8\n        , testCase     \"low_16\" assert_low_16\n        , testCase     \"low_32\" assert_low_32\n        , testCase     \"low_64\" assert_low_64\n        , testCase     \"high_1\" assert_high_1\n        , testCase     \"high_8\" assert_high_8\n        , testCase     \"high_16\" assert_high_16\n        , testCase     \"high_32\" assert_high_32\n        , testCase     \"high_64\" assert_high_64\n        , testProperty \"complement_1\"  prop_complement_1\n        , testProperty \"complement_8\"  prop_complement_8\n        , testProperty \"complement_16\"  prop_complement_16\n        , testProperty \"complement_32\"  prop_complement_32\n        , testProperty \"complement_64\"  prop_complement_64\n        , testProperty \"and_1\"  prop_and_1\n        , testProperty \"and_8\"  prop_and_8\n        , testProperty \"and_16\"  prop_and_16\n        , testProperty \"and_32\"  prop_and_32\n        , testProperty \"and_64\"  prop_and_64\n        , testProperty \"or_1\"  prop_or_1\n        , testProperty \"or_8\"  prop_or_8\n        , testProperty \"or_16\"  prop_or_16\n        , testProperty \"or_32\"  prop_or_32\n        , testProperty \"or_64\"  prop_or_64\n        , testProperty \"xor_1\"  prop_xor_1\n        , testProperty \"xor_8\"  prop_xor_8\n        , testProperty \"xor_16\"  prop_xor_16\n        , testProperty \"xor_32\"  prop_xor_32\n        , testProperty \"xor_64\"  prop_xor_64\n        , testProperty \"maj_1\"  prop_maj_1\n        , testProperty \"maj_8\"  prop_maj_8\n        , testProperty \"maj_16\"  prop_maj_16\n        , testProperty \"maj_32\"  prop_maj_32\n        , testProperty \"maj_64\"  prop_maj_64\n        , testProperty \"xor_xor_1\"  prop_xor_xor_1\n        , testProperty \"xor_xor_8\"  prop_xor_xor_8\n        , testProperty \"xor_xor_16\"  prop_xor_xor_16\n        , testProperty \"xor_xor_32\"  prop_xor_xor_32\n        , testProperty \"xor_xor_64\"  prop_xor_xor_64\n        , testProperty \"ch_1\"  prop_ch_1\n        , testProperty \"ch_8\"  prop_ch_8\n        , testProperty \"ch_16\"  prop_ch_16\n        , testProperty \"ch_32\"  prop_ch_32\n        , testProperty \"ch_64\"  prop_ch_64\n        , testProperty \"some_1\"  prop_some_1\n        , testProperty \"some_8\"  prop_some_8\n        , testProperty \"some_16\"  prop_some_16\n        , testProperty \"some_32\"  prop_some_32\n        , testProperty \"some_64\"  prop_some_64\n        , testProperty \"all_8\"  prop_all_8\n        , testProperty \"all_16\"  prop_all_16\n        , testProperty \"all_32\"  prop_all_32\n        , testProperty \"all_64\"  prop_all_64\n        , testProperty \"eq_1\"  prop_eq_1\n        , testProperty \"eq_8\"  prop_eq_8\n        , testProperty \"eq_16\"  prop_eq_16\n        , testProperty \"eq_32\"  prop_eq_32\n        , testProperty \"eq_64\"  prop_eq_64\n        , testProperty \"eq_256\"  prop_eq_256\n        , testProperty \"eq_diag_8\"  prop_eq_diag_8\n        , testProperty \"eq_diag_16\"  prop_eq_diag_16\n        , testProperty \"eq_diag_32\"  prop_eq_diag_32\n        , testProperty \"eq_diag_64\"  prop_eq_diag_64\n        , testProperty \"eq_diag_256\"  prop_eq_diag_256\n        , testProperty \"full_left_shift_8_1\"  prop_full_left_shift_8_1\n        , testProperty \"full_left_shift_8_2\"  prop_full_left_shift_8_2\n        , testProperty \"full_left_shift_8_4\"  prop_full_left_shift_8_4\n        , testProperty \"full_left_shift_16_1\"  prop_full_left_shift_16_1\n        , testProperty \"full_left_shift_16_2\"  prop_full_left_shift_16_2\n        , testProperty \"full_left_shift_16_4\"  prop_full_left_shift_16_4\n        , testProperty \"full_left_shift_16_8\"  prop_full_left_shift_16_8\n        , testProperty \"full_left_shift_32_1\"  prop_full_left_shift_32_1\n        , testProperty \"full_left_shift_32_2\"  prop_full_left_shift_32_2\n        , testProperty \"full_left_shift_32_4\"  prop_full_left_shift_32_4\n        , testProperty \"full_left_shift_32_8\"  prop_full_left_shift_32_8\n        , testProperty \"full_left_shift_32_16\"  prop_full_left_shift_32_16\n        , testProperty \"full_left_shift_64_1\"  prop_full_left_shift_64_1\n        , testProperty \"full_left_shift_64_2\"  prop_full_left_shift_64_2\n        , testProperty \"full_left_shift_64_4\"  prop_full_left_shift_64_4\n        , testProperty \"full_left_shift_64_8\"  prop_full_left_shift_64_8\n        , testProperty \"full_left_shift_64_16\"  prop_full_left_shift_64_16\n        , testProperty \"full_left_shift_64_32\"  prop_full_left_shift_64_32\n        , testProperty \"full_right_shift_8_1\"  prop_full_right_shift_8_1\n        , testProperty \"full_right_shift_8_2\"  prop_full_right_shift_8_2\n        , testProperty \"full_right_shift_8_4\"  prop_full_right_shift_8_4\n        , testProperty \"full_right_shift_16_1\"  prop_full_right_shift_16_1\n        , testProperty \"full_right_shift_16_2\"  prop_full_right_shift_16_2\n        , testProperty \"full_right_shift_16_4\"  prop_full_right_shift_16_4\n        , testProperty \"full_right_shift_16_8\"  prop_full_right_shift_16_8\n        , testProperty \"full_right_shift_32_1\"  prop_full_right_shift_32_1\n        , testProperty \"full_right_shift_32_2\"  prop_full_right_shift_32_2\n        , testProperty \"full_right_shift_32_4\"  prop_full_right_shift_32_4\n        , testProperty \"full_right_shift_32_8\"  prop_full_right_shift_32_8\n        , testProperty \"full_right_shift_32_16\"  prop_full_right_shift_32_16\n        , testProperty \"full_right_shift_64_1\"  prop_full_right_shift_64_1\n        , testProperty \"full_right_shift_64_2\"  prop_full_right_shift_64_2\n        , testProperty \"full_right_shift_64_4\"  prop_full_right_shift_64_4\n        , testProperty \"full_right_shift_64_8\"  prop_full_right_shift_64_8\n        , testProperty \"full_right_shift_64_16\"  prop_full_right_shift_64_16\n        , testProperty \"full_right_shift_64_32\"  prop_full_right_shift_64_32\n        , testProperty \"leftmost_8_1\"  prop_leftmost_8_1\n        , testProperty \"leftmost_8_2\"  prop_leftmost_8_2\n        , testProperty \"leftmost_8_4\"  prop_leftmost_8_4\n        , testProperty \"leftmost_16_1\"  prop_leftmost_16_1\n        , testProperty \"leftmost_16_2\"  prop_leftmost_16_2\n        , testProperty \"leftmost_16_4\"  prop_leftmost_16_4\n        , testProperty \"leftmost_16_8\"  prop_leftmost_16_8\n        , testProperty \"leftmost_32_1\"  prop_leftmost_32_1\n        , testProperty \"leftmost_32_2\"  prop_leftmost_32_2\n        , testProperty \"leftmost_32_4\"  prop_leftmost_32_4\n        , testProperty \"leftmost_32_8\"  prop_leftmost_32_8\n        , testProperty \"leftmost_32_16\"  prop_leftmost_32_16\n        , testProperty \"leftmost_64_1\"  prop_leftmost_64_1\n        , testProperty \"leftmost_64_2\"  prop_leftmost_64_2\n        , testProperty \"leftmost_64_4\"  prop_leftmost_64_4\n        , testProperty \"leftmost_64_8\"  prop_leftmost_64_8\n        , testProperty \"leftmost_64_16\"  prop_leftmost_64_16\n        , testProperty \"leftmost_64_32\"  prop_leftmost_64_32\n        , testProperty \"rightmost_8_1\"  prop_rightmost_8_1\n        , testProperty \"rightmost_8_2\"  prop_rightmost_8_2\n        , testProperty \"rightmost_8_4\"  prop_rightmost_8_4\n        , testProperty \"rightmost_16_1\"  prop_rightmost_16_1\n        , testProperty \"rightmost_16_2\"  prop_rightmost_16_2\n        , testProperty \"rightmost_16_4\"  prop_rightmost_16_4\n        , testProperty \"rightmost_16_8\"  prop_rightmost_16_8\n        , testProperty \"rightmost_32_1\"  prop_rightmost_32_1\n        , testProperty \"rightmost_32_2\"  prop_rightmost_32_2\n        , testProperty \"rightmost_32_4\"  prop_rightmost_32_4\n        , testProperty \"rightmost_32_8\"  prop_rightmost_32_8\n        , testProperty \"rightmost_32_16\"  prop_rightmost_32_16\n        , testProperty \"rightmost_64_1\"  prop_rightmost_64_1\n        , testProperty \"rightmost_64_2\"  prop_rightmost_64_2\n        , testProperty \"rightmost_64_4\"  prop_rightmost_64_4\n        , testProperty \"rightmost_64_8\"  prop_rightmost_64_8\n        , testProperty \"rightmost_64_16\"  prop_rightmost_64_16\n        , testProperty \"rightmost_64_32\"  prop_rightmost_64_32\n        , testProperty \"left_pad_low_1_8\" prop_left_pad_low_1_8\n        , testProperty \"left_pad_low_1_16\" prop_left_pad_low_1_16\n        , testProperty \"left_pad_low_8_16\" prop_left_pad_low_8_16\n        , testProperty \"left_pad_low_1_32\" prop_left_pad_low_1_32\n        , testProperty \"left_pad_low_8_32\" prop_left_pad_low_8_32\n        , testProperty \"left_pad_low_16_32\" prop_left_pad_low_16_32\n        , testProperty \"left_pad_low_1_64\" prop_left_pad_low_1_64\n        , testProperty \"left_pad_low_8_64\" prop_left_pad_low_8_64\n        , testProperty \"left_pad_low_16_64\" prop_left_pad_low_16_64\n        , testProperty \"left_pad_low_32_64\" prop_left_pad_low_32_64\n        , testProperty \"left_pad_high_1_8\" prop_left_pad_high_1_8\n        , testProperty \"left_pad_high_1_16\" prop_left_pad_high_1_16\n        , testProperty \"left_pad_high_8_16\" prop_left_pad_high_8_16\n        , testProperty \"left_pad_high_1_32\" prop_left_pad_high_1_32\n        , testProperty \"left_pad_high_8_32\" prop_left_pad_high_8_32\n        , testProperty \"left_pad_high_16_32\" prop_left_pad_high_16_32\n        , testProperty \"left_pad_high_1_64\" prop_left_pad_high_1_64\n        , testProperty \"left_pad_high_8_64\" prop_left_pad_high_8_64\n        , testProperty \"left_pad_high_16_64\" prop_left_pad_high_16_64\n        , testProperty \"left_pad_high_32_64\" prop_left_pad_high_32_64\n        , testProperty \"left_extend_1_8\" prop_left_extend_1_8\n        , testProperty \"left_extend_1_16\" prop_left_extend_1_16\n        , testProperty \"left_extend_8_16\" prop_left_extend_8_16\n        , testProperty \"left_extend_1_32\" prop_left_extend_1_32\n        , testProperty \"left_extend_8_32\" prop_left_extend_8_32\n        , testProperty \"left_extend_16_32\" prop_left_extend_16_32\n        , testProperty \"left_extend_1_64\" prop_left_extend_1_64\n        , testProperty \"left_extend_8_64\" prop_left_extend_8_64\n        , testProperty \"left_extend_16_64\" prop_left_extend_16_64\n        , testProperty \"left_extend_32_64\" prop_left_extend_32_64\n        , testProperty \"right_pad_low_1_8\" prop_right_pad_low_1_8\n        , testProperty \"right_pad_low_1_16\" prop_right_pad_low_1_16\n        , testProperty \"right_pad_low_8_16\" prop_right_pad_low_8_16\n        , testProperty \"right_pad_low_1_32\" prop_right_pad_low_1_32\n        , testProperty \"right_pad_low_8_32\" prop_right_pad_low_8_32\n        , testProperty \"right_pad_low_16_32\" prop_right_pad_low_16_32\n        , testProperty \"right_pad_low_1_64\" prop_right_pad_low_1_64\n        , testProperty \"right_pad_low_8_64\" prop_right_pad_low_8_64\n        , testProperty \"right_pad_low_16_64\" prop_right_pad_low_16_64\n        , testProperty \"right_pad_low_32_64\" prop_right_pad_low_32_64\n        , testProperty \"right_pad_high_1_8\" prop_right_pad_high_1_8\n        , testProperty \"right_pad_high_1_16\" prop_right_pad_high_1_16\n        , testProperty \"right_pad_high_8_16\" prop_right_pad_high_8_16\n        , testProperty \"right_pad_high_1_32\" prop_right_pad_high_1_32\n        , testProperty \"right_pad_high_8_32\" prop_right_pad_high_8_32\n        , testProperty \"right_pad_high_16_32\" prop_right_pad_high_16_32\n        , testProperty \"right_pad_high_1_64\" prop_right_pad_high_1_64\n        , testProperty \"right_pad_high_8_64\" prop_right_pad_high_8_64\n        , testProperty \"right_pad_high_16_64\" prop_right_pad_high_16_64\n        , testProperty \"right_pad_high_32_64\" prop_right_pad_high_32_64\n        , testProperty \"right_extend_8_16\" prop_right_extend_8_16\n        , testProperty \"right_extend_8_32\" prop_right_extend_8_32\n        , testProperty \"right_extend_16_32\" prop_right_extend_16_32\n        , testProperty \"right_extend_8_64\" prop_right_extend_8_64\n        , testProperty \"right_extend_16_64\" prop_right_extend_16_64\n        , testProperty \"right_extend_32_64\" prop_right_extend_32_64\n        , testProperty \"left_shift_with_8\"  prop_left_shift_with_8\n        , testProperty \"left_shift_with_16\"  prop_left_shift_with_16\n        , testProperty \"left_shift_with_32\"  prop_left_shift_with_32\n        , testProperty \"left_shift_with_64\"  prop_left_shift_with_64\n        , testProperty \"left_shift_8\"  prop_left_shift_8\n        , testProperty \"left_shift_16\"  prop_left_shift_16\n        , testProperty \"left_shift_32\"  prop_left_shift_32\n        , testProperty \"left_shift_64\"  prop_left_shift_64\n        , testProperty \"right_shift_with_8\"  prop_right_shift_with_8\n        , testProperty \"right_shift_with_16\"  prop_right_shift_with_16\n        , testProperty \"right_shift_with_32\"  prop_right_shift_with_32\n        , testProperty \"right_shift_with_64\"  prop_right_shift_with_64\n        , testProperty \"right_shift_8\"  prop_right_shift_8\n        , testProperty \"right_shift_16\"  prop_right_shift_16\n        , testProperty \"right_shift_32\"  prop_right_shift_32\n        , testProperty \"right_shift_64\"  prop_right_shift_64\n        , testProperty \"left_rotate_8\"  prop_left_rotate_8\n        , testProperty \"left_rotate_16\"  prop_left_rotate_16\n        , testProperty \"left_rotate_32\"  prop_left_rotate_32\n        , testProperty \"left_rotate_64\"  prop_left_rotate_64\n        , testProperty \"right_rotate_8\"  prop_right_rotate_8\n        , testProperty \"right_rotate_16\"  prop_right_rotate_16\n        , testProperty \"right_rotate_32\"  prop_right_rotate_32\n        , testProperty \"right_rotate_64\"  prop_right_rotate_64\n        ]\n      , testGroup \"arith\" $\n        [ testCase     \"one_8\" assert_one_8\n        , testCase     \"one_16\" assert_one_16\n        , testCase     \"one_32\" assert_one_32\n        , testCase     \"one_64\" assert_one_64\n        , testProperty \"add_8\"  prop_add_8\n        , testProperty \"add_16\"  prop_add_16\n        , testProperty \"add_32\"  prop_add_32\n        , testProperty \"add_64\"  prop_add_64\n        , testProperty \"full_add_8\"  prop_full_add_8\n        , testProperty \"full_add_16\"  prop_full_add_16\n        , testProperty \"full_add_32\"  prop_full_add_32\n        , testProperty \"full_add_64\"  prop_full_add_64\n        , testProperty \"full_increment_8\"  prop_full_increment_8\n        , testProperty \"full_increment_16\"  prop_full_increment_16\n        , testProperty \"full_increment_32\"  prop_full_increment_32\n        , testProperty \"full_increment_64\"  prop_full_increment_64\n        , testCase     \"full_increment_max_8\" assert_full_increment_max_8\n        , testCase     \"full_increment_max_16\" assert_full_increment_max_16\n        , testCase     \"full_increment_max_32\" assert_full_increment_max_32\n        , testCase     \"full_increment_max_64\" assert_full_increment_max_64\n        , testProperty \"increment_8\"  prop_increment_8\n        , testProperty \"increment_16\"  prop_increment_16\n        , testProperty \"increment_32\"  prop_increment_32\n        , testProperty \"increment_64\"  prop_increment_64\n        , testCase     \"increment_max_8\" assert_increment_max_8\n        , testCase     \"increment_max_16\" assert_increment_max_16\n        , testCase     \"increment_max_32\" assert_increment_max_32\n        , testCase     \"increment_max_64\" assert_increment_max_64\n        , testProperty \"subtract_8\"  prop_subtract_8\n        , testProperty \"subtract_16\"  prop_subtract_16\n        , testProperty \"subtract_32\"  prop_subtract_32\n        , testProperty \"subtract_64\"  prop_subtract_64\n        , testProperty \"full_subtract_8\"  prop_full_subtract_8\n        , testProperty \"full_subtract_16\"  prop_full_subtract_16\n        , testProperty \"full_subtract_32\"  prop_full_subtract_32\n        , testProperty \"full_subtract_64\"  prop_full_subtract_64\n        , testProperty \"negate_8\"  prop_negate_8\n        , testProperty \"negate_16\"  prop_negate_16\n        , testProperty \"negate_32\"  prop_negate_32\n        , testProperty \"negate_64\"  prop_negate_64\n        , testProperty \"full_decrement_8\"  prop_full_decrement_8\n        , testProperty \"full_decrement_16\"  prop_full_decrement_16\n        , testProperty \"full_decrement_32\"  prop_full_decrement_32\n        , testProperty \"full_decrement_64\"  prop_full_decrement_64\n        , testCase     \"full_decrement_zero_8\" assert_full_decrement_zero_8\n        , testCase     \"full_decrement_zero_16\" assert_full_decrement_zero_16\n        , testCase     \"full_decrement_zero_32\" assert_full_decrement_zero_32\n        , testCase     \"full_decrement_zero_64\" assert_full_decrement_zero_64\n        , testProperty \"decrement_8\"  prop_decrement_8\n        , testProperty \"decrement_16\"  prop_decrement_16\n        , testProperty \"decrement_32\"  prop_decrement_32\n        , testProperty \"decrement_64\"  prop_decrement_64\n        , testCase     \"decrement_zero_8\" assert_decrement_zero_8\n        , testCase     \"decrement_zero_16\" assert_decrement_zero_16\n        , testCase     \"decrement_zero_32\" assert_decrement_zero_32\n        , testCase     \"decrement_zero_64\" assert_decrement_zero_64\n        , testProperty \"multiply_8\"  prop_multiply_8\n        , testProperty \"multiply_16\"  prop_multiply_16\n        , testProperty \"multiply_32\"  prop_multiply_32\n        , testProperty \"multiply_64\"  prop_multiply_64\n        , testProperty \"full_multiply_8\"  prop_full_multiply_8\n        , testProperty \"full_multiply_16\"  prop_full_multiply_16\n        , testProperty \"full_multiply_32\"  prop_full_multiply_32\n        , testProperty \"full_multiply_64\"  prop_full_multiply_64\n        , testProperty \"is_zero_8\"  prop_is_zero_8\n        , testProperty \"is_zero_16\"  prop_is_zero_16\n        , testProperty \"is_zero_32\"  prop_is_zero_32\n        , testProperty \"is_zero_64\"  prop_is_zero_64\n        , testCase     \"zero_is_zero_8\" assert_zero_is_zero_8\n        , testCase     \"zero_is_zero_16\" assert_zero_is_zero_16\n        , testCase     \"zero_is_zero_32\" assert_zero_is_zero_32\n        , testCase     \"zero_is_zero_64\" assert_zero_is_zero_64\n        , testProperty \"is_one_8\"  prop_is_one_8\n        , testProperty \"is_one_16\"  prop_is_one_16\n        , testProperty \"is_one_32\"  prop_is_one_32\n        , testProperty \"is_one_64\"  prop_is_one_64\n        , testCase     \"one_is_one_8\" assert_one_is_one_8\n        , testCase     \"one_is_one_16\" assert_one_is_one_16\n        , testCase     \"one_is_one_32\" assert_one_is_one_32\n        , testCase     \"one_is_one_64\" assert_one_is_one_64\n        , testProperty \"le_8\"  prop_le_8\n        , testProperty \"le_16\"  prop_le_16\n        , testProperty \"le_32\"  prop_le_32\n        , testProperty \"le_64\"  prop_le_64\n        , testProperty \"le_diag_8\"  prop_le_diag_8\n        , testProperty \"le_diag_16\"  prop_le_diag_16\n        , testProperty \"le_diag_32\"  prop_le_diag_32\n        , testProperty \"le_diag_64\"  prop_le_diag_64\n        , testProperty \"lt_8\"  prop_lt_8\n        , testProperty \"lt_16\"  prop_lt_16\n        , testProperty \"lt_32\"  prop_lt_32\n        , testProperty \"lt_64\"  prop_lt_64\n        , testProperty \"lt_diag_8\"  prop_lt_diag_8\n        , testProperty \"lt_diag_16\"  prop_lt_diag_16\n        , testProperty \"lt_diag_32\"  prop_lt_diag_32\n        , testProperty \"lt_diag_64\"  prop_lt_diag_64\n        , testProperty \"min_8\"  prop_min_8\n        , testProperty \"min_16\"  prop_min_16\n        , testProperty \"min_32\"  prop_min_32\n        , testProperty \"min_64\"  prop_min_64\n        , testProperty \"max_8\"  prop_max_8\n        , testProperty \"max_16\"  prop_max_16\n        , testProperty \"max_32\"  prop_max_32\n        , testProperty \"max_64\"  prop_max_64\n        , testProperty \"median_8\"  prop_median_8\n        , testProperty \"median_16\"  prop_median_16\n        , testProperty \"median_32\"  prop_median_32\n        , testProperty \"median_64\"  prop_median_64\n        , testProperty \"div_mod_8\"  prop_div_mod_8\n        , testProperty \"div_mod_16\"  prop_div_mod_16\n        , testProperty \"div_mod_32\"  prop_div_mod_32\n        , testProperty \"div_mod_64\"  prop_div_mod_64\n        , testProperty \"divide_8\"  prop_divide_8\n        , testProperty \"divide_16\"  prop_divide_16\n        , testProperty \"divide_32\"  prop_divide_32\n        , testProperty \"divide_64\"  prop_divide_64\n        , testProperty \"modulo_8\"  prop_modulo_8\n        , testProperty \"modulo_16\"  prop_modulo_16\n        , testProperty \"modulo_32\"  prop_modulo_32\n        , testProperty \"modulo_64\"  prop_modulo_64\n        , testProperty \"divides_8\"  prop_divides_8\n        , testProperty \"divides_16\"  prop_divides_16\n        , testProperty \"divides_32\"  prop_divides_32\n        , testProperty \"divides_64\"  prop_divides_64\n        , testProperty \"div_mod_zero_8\"  prop_div_mod_zero_8\n        , testProperty \"div_mod_zero_16\"  prop_div_mod_zero_16\n        , testProperty \"div_mod_zero_32\"  prop_div_mod_zero_32\n        , testProperty \"div_mod_zero_64\"  prop_div_mod_zero_64\n        , testProperty \"divide_zero_8\"  prop_divide_zero_8\n        , testProperty \"divide_zero_16\"  prop_divide_zero_16\n        , testProperty \"divide_zero_32\"  prop_divide_zero_32\n        , testProperty \"divide_zero_64\"  prop_divide_zero_64\n        , testProperty \"modulo_zero_8\"  prop_modulo_zero_8\n        , testProperty \"modulo_zero_16\"  prop_modulo_zero_16\n        , testProperty \"modulo_zero_32\"  prop_modulo_zero_32\n        , testProperty \"modulo_zero_64\"  prop_modulo_zero_64\n        , testProperty \"divides_zero_8\"  prop_divides_zero_8\n        , testProperty \"divides_zero_16\"  prop_divides_zero_16\n        , testProperty \"divides_zero_32\"  prop_divides_zero_32\n        , testProperty \"divides_zero_64\"  prop_divides_zero_64\n        , testProperty \"div_mod_128_64\"   prop_div_mod_128_64\n        , testProperty \"div_mod_128_64_low_y\"   prop_div_mod_128_64_low_y\n        , testProperty \"div_mod_128_64_high_x\"   prop_div_mod_128_64_high_x\n        ]\n      , testGroup \"sha256\" $\n        [ testCase     \"sha_256_iv\"                   assert_sha_256_iv\n        , testProperty \"sha_256_block\"                prop_sha_256_block\n        , testCase     \"sha_256_ctx_8_init\"           assert_sha_256_ctx_8_init\n        , testProperty \"sha_256_ctx_8_add_1\"          prop_sha_256_ctx_8_add_1\n        , testProperty \"sha_256_ctx_8_add_2\"          prop_sha_256_ctx_8_add_2\n        , testProperty \"sha_256_ctx_8_add_4\"          prop_sha_256_ctx_8_add_4\n        , testProperty \"sha_256_ctx_8_add_8\"          prop_sha_256_ctx_8_add_8\n        , testProperty \"sha_256_ctx_8_add_16\"         prop_sha_256_ctx_8_add_16\n        , testProperty \"sha_256_ctx_8_add_32\"         prop_sha_256_ctx_8_add_32\n        , testProperty \"sha_256_ctx_8_add_64\"         prop_sha_256_ctx_8_add_64\n        , testProperty \"sha_256_ctx_8_add_128\"        prop_sha_256_ctx_8_add_128\n        , testProperty \"sha_256_ctx_8_add_256\"        prop_sha_256_ctx_8_add_256\n        , testProperty \"sha_256_ctx_8_add_512\"        prop_sha_256_ctx_8_add_512\n        , testProperty \"sha_256_ctx_8_add_buffer_511\" prop_sha_256_ctx_8_add_buffer_511\n        , testProperty \"sha_256_ctx_8_finalize\"       prop_sha_256_ctx_8_finalize\n        ]\n      , testGroup \"bitcoin\" $\n        [ testProperty \"parse_lock\"     prop_parse_lock\n        , testProperty \"parse_sequence\" prop_parse_sequence\n        , testCase     \"tapdata_init\"   assert_tapdata_init\n        ]\n      , testGroup \"field\"\n        [ testProperty \"fe_normlaize\"     prop_fe_normalize\n        , testProperty \"fe_negate\"        prop_fe_negate\n        , testProperty \"fe_add\"           prop_fe_add\n        , testProperty \"fe_square\"        prop_fe_square\n        , testProperty \"fe_multiply\"      prop_fe_multiply\n        , testProperty \"fe_multiply_beta\" prop_fe_multiply_beta\n        , testProperty \"fe_invert\"        (withMaxSuccess 10 prop_fe_invert)\n        , testProperty \"fe_square_root\"   prop_fe_square_root\n        , testProperty \"fe_is_zero\"       prop_fe_is_zero\n        , testProperty \"fe_is_odd\"        prop_fe_is_odd\n        ]\n      , testGroup \"scalar\"\n        [ testProperty \"scalar_normalize\"       prop_scalar_normalize\n        , testProperty \"scalar_negate\"          prop_scalar_negate\n        , testProperty \"scalar_add\"             prop_scalar_add\n        , testProperty \"scalar_square\"          prop_scalar_square\n        , testProperty \"scalar_multiply\"        prop_scalar_multiply\n        , testProperty \"scalar_multiply_lambda\" prop_scalar_multiply_lambda\n        , testProperty \"scalar_invert\"          (withMaxSuccess 10 prop_scalar_invert)\n        , testProperty \"scalar_is_zero\"         prop_scalar_is_zero\n        ]\n      , testGroup \"group\"\n        [ testCase     \"gej_infinity\"             assert_gej_infinity\n        , testProperty \"gej_rescale\"              prop_gej_rescale\n        , testProperty \"gej_rescale_inf\"          prop_gej_rescale_inf\n        , testProperty \"gej_normalize\"            prop_gej_normalize\n        , testProperty \"gej_normalize_inf\"        prop_gej_normalize_inf\n        , testProperty \"gej_negate\"               prop_gej_negate\n        , testProperty \"gej_negate_inf\"           prop_gej_negate_inf\n        , testProperty \"ge_negate\"                prop_ge_negate\n        , testProperty \"gej_double\"               prop_gej_double\n        , testProperty \"gej_double_inf\"           prop_gej_double_inf\n        , testProperty \"gej_double_zero\"          prop_gej_double_zero\n        , testProperty \"gej_add\"                  prop_gej_add\n        , testProperty \"gej_add_double\"           prop_gej_add_double\n        , testProperty \"gej_add_opp\"              prop_gej_add_opp\n        , testProperty \"gej_add_infl\"             prop_gej_add_infl\n        , testProperty \"gej_add_infr\"             prop_gej_add_infr\n        , testProperty \"gej_ge_add_ex_double\"     prop_gej_ge_add_ex_double\n        , testProperty \"gej_ge_add_ex_opp\"        prop_gej_ge_add_ex_opp\n        , testProperty \"gej_ge_add_ex_inf\"        prop_gej_ge_add_ex_inf\n        , testProperty \"gej_ge_add\"               prop_gej_ge_add\n        , testProperty \"gej_is_infinity\"          prop_gej_is_infinity\n        , testProperty \"gej_equiv\"                prop_gej_equiv\n        , testProperty \"gej_equiv_infl\"           prop_gej_equiv_infl\n        , testProperty \"gej_equiv_infr\"           prop_gej_equiv_infr\n        , testProperty \"gej_equiv_inf\"            prop_gej_equiv_inf\n        , testProperty \"gej_equiv_true\"           prop_gej_equiv_true\n        , testProperty \"gej_ge_equiv\"             prop_gej_ge_equiv\n        , testProperty \"gej_ge_equiv_inf\"         prop_gej_ge_equiv_inf\n        , testProperty \"gej_ge_equiv_true\"        prop_gej_ge_equiv_true\n        , testProperty \"gej_x_equiv\"              prop_gej_x_equiv\n        , testProperty \"gej_x_equiv_inf\"          prop_gej_x_equiv_inf\n        , testProperty \"gej_x_equiv_true\"         prop_gej_x_equiv_true\n        , testProperty \"gej_x_equiv_inf_zero\"     prop_gej_x_equiv_inf_zero\n        , testProperty \"gej_y_is_odd\"             prop_gej_y_is_odd\n        , testProperty \"gej_is_on_curve\"          prop_gej_is_on_curve\n        , testProperty \"gej_is_on_curve_inf\"      prop_gej_is_on_curve_inf\n        , testProperty \"gej_is_on_curve_half\"     prop_gej_is_on_curve_half\n        , testProperty \"gej_is_on_curve_inf_half\" prop_gej_is_on_curve_inf_half\n        , testProperty \"ge_is_on_curve\"           prop_ge_is_on_curve\n        , testProperty \"ge_is_on_curve_half\"      prop_ge_is_on_curve_half\n        ]\n      , testGroup \"ecMult\"\n        [ testCase      \"off_curve_linear_combination_1_order_6\"  assert_off_curve_linear_combination_1_order_6\n        , testProperty  \"off_curve_linear_combination_1_inf\"      prop_off_curve_linear_combination_1_inf\n        , testProperty  \"off_curve_linear_combination_1_0\"        prop_off_curve_linear_combination_1_0\n        , testProperty  \"off_curve_linear_combination_1\"          prop_off_curve_linear_combination_1\n        , testProperty  \"linear_combination_1_half\"               prop_linear_combination_1_half\n        , testProperty  \"linear_combination_1_half_inf\"           prop_linear_combination_1_half_inf\n        , testProperty  \"linear_combination_1_half_0\"             prop_linear_combination_1_half_0\n        , testProperty  \"linear_combination_1_inf\"                prop_linear_combination_1_inf\n        , testProperty  \"linear_combination_1_0\"                  prop_linear_combination_1_0\n        , testProperty  \"linear_combination_1\"                    prop_linear_combination_1\n        , testProperty  \"generate\"                                prop_generate\n        , testProperty  \"off_curve_scale\"                         prop_off_curve_scale\n        , testProperty  \"off_curve_scale_0\"                       prop_off_curve_scale_0\n        , testProperty  \"off_curve_scale_inf\"                     prop_off_curve_scale_inf\n        , testProperty  \"scale_half\"                              prop_scale_half\n        , testProperty  \"scale_half_inf\"                          prop_scale_half_inf\n        , testProperty  \"scale_half_0\"                            prop_scale_half_0\n        , testProperty  \"scale_inf\"                               prop_scale_inf\n        , testProperty  \"scale_0\"                                 prop_scale_0\n        , testProperty  \"scale\"                                   prop_scale\n        , testProperty  \"linear_verify_1_true_half\"               prop_linear_verify_1_true_half\n        , testProperty  \"linear_verify_1_0\"                       prop_linear_verify_1_0\n        , testProperty  \"linear_verify_1\"                         prop_linear_verify_1\n        ]\n      , testGroup \"point\"\n        [ testProperty \"point_verify_1\"      prop_point_verify_1\n        , testProperty \"point_verify_1_true\" prop_point_verify_1\n        , testProperty \"decompress\"          prop_decompress\n        ]\n      , testGroup \"bip0340\" $\n        [ testProperty \"bip_0340_verify\"   prop_bip_0340_verify\n        ]\n        ++ zipWith case_bip_0340_verify_vector [0..] bip0340Vectors ++\n        [ testProperty \"check_sig_verify\" prop_check_sig_verify\n        , testProperty \"check_sig_verify_true\" prop_check_sig_verify_true\n        ]\n      , testGroup \"generator\"\n        [ testProperty \"swu\" prop_swu\n        , testProperty \"hash_to_curve\" prop_hash_to_curve\n        ]\n      ]\nassert_verify :: Assertion\nassert_verify =\n  (fastF (toBit False), fastF (toBit True))\n    @=?\n  (C.verify (toBit False), C.verify (toBit True))\n where\n  fastF = testCoreEval (specification (WordJet Verify))\n\nassert_low_1 :: Assertion\nassert_low_1 = fastF () @=? C.low_1 ()\n where\n  fastF = testCoreEval (specification (WordJet Low1))\n\nassert_low_8 :: Assertion\nassert_low_8 = fastF () @=? C.low_8 ()\n where\n  fastF = testCoreEval (specification (WordJet Low8))\n\nassert_low_16 :: Assertion\nassert_low_16 = fastF () @=? C.low_16 ()\n where\n  fastF = testCoreEval (specification (WordJet Low16))\n\nassert_low_32 :: Assertion\nassert_low_32 = fastF () @=? C.low_32 ()\n where\n  fastF = testCoreEval (specification (WordJet Low32))\n\nassert_low_64 :: Assertion\nassert_low_64 = fastF () @=? C.low_64 ()\n where\n  fastF = testCoreEval (specification (WordJet Low64))\n\nassert_high_1 :: Assertion\nassert_high_1 = fastF () @=? C.high_1 ()\n where\n  fastF = testCoreEval (specification (WordJet High1))\n\nassert_high_8 :: Assertion\nassert_high_8 = fastF () @=? C.high_8 ()\n where\n  fastF = testCoreEval (specification (WordJet High8))\n\nassert_high_16 :: Assertion\nassert_high_16 = fastF () @=? C.high_16 ()\n where\n  fastF = testCoreEval (specification (WordJet High16))\n\nassert_high_32 :: Assertion\nassert_high_32 = fastF () @=? C.high_32 ()\n where\n  fastF = testCoreEval (specification (WordJet High32))\n\nassert_high_64 :: Assertion\nassert_high_64 = fastF () @=? C.high_64 ()\n where\n  fastF = testCoreEval (specification (WordJet High64))\n\nprop_complement_1 :: Bool -> Bool\nprop_complement_1 = \\x -> let input = toBit x\n                       in fastF input == C.complement_1 input\n where\n  fastF = testCoreEval (specification (WordJet Complement1))\n\nprop_complement_8 :: W.Word8 -> Bool\nprop_complement_8 = \\x -> let input = toW8 x\n                       in fastF input == C.complement_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement8))\n\nprop_complement_16 :: W.Word16 -> Bool\nprop_complement_16 = \\x -> let input = toW16 x\n                        in fastF input == C.complement_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement16))\n\nprop_complement_32 :: W.Word32 -> Bool\nprop_complement_32 = \\x -> let input = toW32 x\n                        in fastF input == C.complement_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement32))\n\nprop_complement_64 :: W.Word64 -> Bool\nprop_complement_64 = \\x -> let input = toW64 x\n                        in fastF input == C.complement_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement64))\n\nprop_and_1 :: Bool -> Bool -> Bool\nprop_and_1 = \\x y -> let input = (toBit x, toBit y)\n                     in fastF input == C.and_1 input\n where\n  fastF = testCoreEval (specification (WordJet And1))\n\nprop_and_8 :: W.Word8 -> W.Word8 -> Bool\nprop_and_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.and_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And8))\n\nprop_and_16 :: W.Word16 -> W.Word16 -> Bool\nprop_and_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.and_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And16))\n\nprop_and_32 :: W.Word32 -> W.Word32 -> Bool\nprop_and_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.and_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And32))\n\nprop_and_64 :: W.Word64 -> W.Word64 -> Bool\nprop_and_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.and_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And64))\n\nprop_or_1 :: Bool -> Bool -> Bool\nprop_or_1 = \\x y -> let input = (toBit x, toBit y)\n                     in fastF input == C.or_1 input\n where\n  fastF = testCoreEval (specification (WordJet Or1))\n\nprop_or_8 :: W.Word8 -> W.Word8 -> Bool\nprop_or_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.or_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or8))\n\nprop_or_16 :: W.Word16 -> W.Word16 -> Bool\nprop_or_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.or_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or16))\n\nprop_or_32 :: W.Word32 -> W.Word32 -> Bool\nprop_or_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.or_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or32))\n\nprop_or_64 :: W.Word64 -> W.Word64 -> Bool\nprop_or_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.or_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or64))\n\nprop_xor_1 :: Bool -> Bool -> Bool\nprop_xor_1 = \\x y -> let input = (toBit x, toBit y)\n                     in fastF input == C.xor_1 input\n where\n  fastF = testCoreEval (specification (WordJet Xor1))\n\nprop_xor_8 :: W.Word8 -> W.Word8 -> Bool\nprop_xor_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.xor_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor8))\n\nprop_xor_16 :: W.Word16 -> W.Word16 -> Bool\nprop_xor_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.xor_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor16))\n\nprop_xor_32 :: W.Word32 -> W.Word32 -> Bool\nprop_xor_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.xor_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor32))\n\nprop_xor_64 :: W.Word64 -> W.Word64 -> Bool\nprop_xor_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.xor_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor64))\n\nprop_maj_1 :: Bool -> Bool -> Bool -> Bool\nprop_maj_1 = \\x y z -> let input = (toBit x, (toBit y, toBit z))\n                     in fastF input == C.maj_1 input\n where\n  fastF = testCoreEval (specification (WordJet Maj1))\n\nprop_maj_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_maj_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == C.maj_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj8))\n\nprop_maj_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_maj_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == C.maj_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj16))\n\nprop_maj_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_maj_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == C.maj_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj32))\n\nprop_maj_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_maj_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == C.maj_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj64))\n\nprop_xor_xor_1 :: Bool -> Bool -> Bool -> Bool\nprop_xor_xor_1 = \\x y z -> let input = (toBit x, (toBit y, toBit z))\n                     in fastF input == C.xor_xor_1 input\n where\n  fastF = testCoreEval (specification (WordJet XorXor1))\n\nprop_xor_xor_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_xor_xor_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == C.xor_xor_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor8))\n\nprop_xor_xor_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_xor_xor_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == C.xor_xor_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor16))\n\nprop_xor_xor_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_xor_xor_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == C.xor_xor_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor32))\n\nprop_xor_xor_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_xor_xor_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == C.xor_xor_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor64))\n\nprop_ch_1 :: Bool -> Bool -> Bool -> Bool\nprop_ch_1 = \\x y z -> let input = (toBit x, (toBit y, toBit z))\n                     in fastF input == C.ch_1 input\n where\n  fastF = testCoreEval (specification (WordJet Ch1))\n\nprop_ch_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_ch_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == C.ch_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch8))\n\nprop_ch_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_ch_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == C.ch_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch16))\n\nprop_ch_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_ch_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == C.ch_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch32))\n\nprop_ch_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_ch_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == C.ch_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch64))\n\nprop_some_1 :: Bool -> Bool\nprop_some_1 = \\x -> let input = toBit x\n                       in fastF input == C.some_1 input\n where\n  fastF = testCoreEval (specification (WordJet Some1))\n\nprop_some_8 :: W.Word8 -> Bool\nprop_some_8 = \\x -> let input = toW8 x\n                       in fastF input == C.some_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some8))\n\nprop_some_16 :: W.Word16 -> Bool\nprop_some_16 = \\x -> let input = toW16 x\n                        in fastF input == C.some_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some16))\n\nprop_some_32 :: W.Word32 -> Bool\nprop_some_32 = \\x -> let input = toW32 x\n                        in fastF input == C.some_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some32))\n\nprop_some_64 :: W.Word64 -> Bool\nprop_some_64 = \\x -> let input = toW64 x\n                        in fastF input == C.some_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some64))\n\nprop_all_8 :: W.Word8 -> Bool\nprop_all_8 = \\x -> let input = toW8 x\n                       in fastF input == C.all_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All8))\n\nprop_all_16 :: W.Word16 -> Bool\nprop_all_16 = \\x -> let input = toW16 x\n                        in fastF input == C.all_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All16))\n\nprop_all_32 :: W.Word32 -> Bool\nprop_all_32 = \\x -> let input = toW32 x\n                        in fastF input == C.all_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All32))\n\nprop_all_64 :: W.Word64 -> Bool\nprop_all_64 = \\x -> let input = toW64 x\n                        in fastF input == C.all_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All64))\n\nprop_eq_1 :: Bool -> Bool -> Bool\nprop_eq_1 = \\x y -> let input = (toBit x, toBit y)\n                     in fastF input == C.eq_1 input\n where\n  fastF = testCoreEval (specification (WordJet Eq1))\n\nprop_eq_8 :: W.Word8 -> W.Word8 -> Bool\nprop_eq_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.eq_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq8))\n\nprop_eq_16 :: W.Word16 -> W.Word16 -> Bool\nprop_eq_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.eq_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq16))\n\nprop_eq_32 :: W.Word32 -> W.Word32 -> Bool\nprop_eq_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.eq_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq32))\n\nprop_eq_64 :: W.Word64 -> W.Word64 -> Bool\nprop_eq_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.eq_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq64))\n\nprop_eq_256 :: W.Word256 -> W.Word256 -> Bool\nprop_eq_256 = \\x y -> let input = (toW256 x, toW256 y)\n                       in fastF input == C.eq_256 input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq256))\n\nprop_eq_diag_8 :: W.Word8 -> Bool\nprop_eq_diag_8 = \\x -> let input = (toW8 x, toW8 x)\n                         in fastF input == C.eq_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq8))\n\nprop_eq_diag_16 :: W.Word16 -> Bool\nprop_eq_diag_16 = \\x -> let input = (toW16 x, toW16 x)\n                         in fastF input == C.eq_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq16))\n\nprop_eq_diag_32 :: W.Word32 -> Bool\nprop_eq_diag_32 = \\x -> let input = (toW32 x, toW32 x)\n                         in fastF input == C.eq_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq32))\n\nprop_eq_diag_64 :: W.Word64 -> Bool\nprop_eq_diag_64 = \\x -> let input = (toW64 x, toW64 x)\n                         in fastF input == C.eq_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq64))\n\nprop_eq_diag_256 :: W.Word256 -> Bool\nprop_eq_diag_256 = \\x -> let input = (toW256 x, toW256 x)\n                         in fastF input == C.eq_256 input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq256))\n\nprop_full_left_shift_8_1 :: W.Word8 -> Bool -> Bool\nprop_full_left_shift_8_1 = \\x y -> let input = (toW8 x, toBit y)\n                                   in fastF input == C.full_left_shift_8_1 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift8_1))\n\nprop_full_left_shift_8_2 :: W.Word8 -> W.Word8 -> Bool\nprop_full_left_shift_8_2 = \\x y -> let input = (toW8 x, toW2 y)\n                                   in fastF input == C.full_left_shift_8_2 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift8_2))\n\nprop_full_left_shift_8_4 :: W.Word8 -> W.Word8 -> Bool\nprop_full_left_shift_8_4 = \\x y -> let input = (toW8 x, toW4 y)\n                                   in fastF input == C.full_left_shift_8_4 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift8_4))\n\nprop_full_left_shift_16_1 :: W.Word16 -> Bool -> Bool\nprop_full_left_shift_16_1 = \\x y -> let input = (toW16 x, toBit y)\n                                   in fastF input == C.full_left_shift_16_1 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_1))\n\nprop_full_left_shift_16_2 :: W.Word16 -> W.Word8 -> Bool\nprop_full_left_shift_16_2 = \\x y -> let input = (toW16 x, toW2 y)\n                                   in fastF input == C.full_left_shift_16_2 input\n where\n  toW16 = toWord16 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_2))\n\nprop_full_left_shift_16_4 :: W.Word16 -> W.Word8 -> Bool\nprop_full_left_shift_16_4 = \\x y -> let input = (toW16 x, toW4 y)\n                                   in fastF input == C.full_left_shift_16_4 input\n where\n  toW16 = toWord16 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_4))\n\nprop_full_left_shift_16_8 :: W.Word16 -> W.Word8 -> Bool\nprop_full_left_shift_16_8 = \\x y -> let input = (toW16 x, toW8 y)\n                                   in fastF input == C.full_left_shift_16_8 input\n where\n  toW16 = toWord16 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_8))\n\nprop_full_left_shift_32_1 :: W.Word32 -> Bool -> Bool\nprop_full_left_shift_32_1 = \\x y -> let input = (toW32 x, toBit y)\n                                   in fastF input == C.full_left_shift_32_1 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_1))\n\nprop_full_left_shift_32_2 :: W.Word32 -> W.Word8 -> Bool\nprop_full_left_shift_32_2 = \\x y -> let input = (toW32 x, toW2 y)\n                                   in fastF input == C.full_left_shift_32_2 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_2))\n\nprop_full_left_shift_32_4 :: W.Word32 -> W.Word8 -> Bool\nprop_full_left_shift_32_4 = \\x y -> let input = (toW32 x, toW4 y)\n                                   in fastF input == C.full_left_shift_32_4 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_4))\n\nprop_full_left_shift_32_8 :: W.Word32 -> W.Word8 -> Bool\nprop_full_left_shift_32_8 = \\x y -> let input = (toW32 x, toW8 y)\n                                   in fastF input == C.full_left_shift_32_8 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_8))\n\nprop_full_left_shift_32_16 :: W.Word32 -> W.Word16 -> Bool\nprop_full_left_shift_32_16 = \\x y -> let input = (toW32 x, toW16 y)\n                                   in fastF input == C.full_left_shift_32_16 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_16))\n\nprop_full_left_shift_64_1 :: W.Word64 -> Bool -> Bool\nprop_full_left_shift_64_1 = \\x y -> let input = (toW64 x, toBit y)\n                                   in fastF input == C.full_left_shift_64_1 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_1))\n\nprop_full_left_shift_64_2 :: W.Word64 -> W.Word8 -> Bool\nprop_full_left_shift_64_2 = \\x y -> let input = (toW64 x, toW2 y)\n                                   in fastF input == C.full_left_shift_64_2 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_2))\n\nprop_full_left_shift_64_4 :: W.Word64 -> W.Word8 -> Bool\nprop_full_left_shift_64_4 = \\x y -> let input = (toW64 x, toW4 y)\n                                   in fastF input == C.full_left_shift_64_4 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_4))\n\nprop_full_left_shift_64_8 :: W.Word64 -> W.Word8 -> Bool\nprop_full_left_shift_64_8 = \\x y -> let input = (toW64 x, toW8 y)\n                                   in fastF input == C.full_left_shift_64_8 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_8))\n\nprop_full_left_shift_64_16 :: W.Word64 -> W.Word16 -> Bool\nprop_full_left_shift_64_16 = \\x y -> let input = (toW64 x, toW16 y)\n                                   in fastF input == C.full_left_shift_64_16 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_16))\n\nprop_full_left_shift_64_32 :: W.Word64 -> W.Word32 -> Bool\nprop_full_left_shift_64_32 = \\x y -> let input = (toW64 x, toW32 y)\n                                   in fastF input == C.full_left_shift_64_32 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_32))\n\nprop_full_right_shift_8_1 :: W.Word8 -> Bool -> Bool\nprop_full_right_shift_8_1 = \\x y -> let input = (toBit y, toW8 x)\n                                   in fastF input == C.full_right_shift_8_1 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift8_1))\n\nprop_full_right_shift_8_2 :: W.Word8 -> W.Word8 -> Bool\nprop_full_right_shift_8_2 = \\x y -> let input = (toW2 y, toW8 x)\n                                   in fastF input == C.full_right_shift_8_2 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift8_2))\n\nprop_full_right_shift_8_4 :: W.Word8 -> W.Word8 -> Bool\nprop_full_right_shift_8_4 = \\x y -> let input = (toW4 y, toW8 x)\n                                   in fastF input == C.full_right_shift_8_4 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift8_4))\n\nprop_full_right_shift_16_1 :: W.Word16 -> Bool -> Bool\nprop_full_right_shift_16_1 = \\x y -> let input = (toBit y, toW16 x)\n                                   in fastF input == C.full_right_shift_16_1 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_1))\n\nprop_full_right_shift_16_2 :: W.Word16 -> W.Word8 -> Bool\nprop_full_right_shift_16_2 = \\x y -> let input = (toW2 y, toW16 x)\n                                   in fastF input == C.full_right_shift_16_2 input\n where\n  toW16 = toWord16 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_2))\n\nprop_full_right_shift_16_4 :: W.Word16 -> W.Word8 -> Bool\nprop_full_right_shift_16_4 = \\x y -> let input = (toW4 y, toW16 x)\n                                   in fastF input == C.full_right_shift_16_4 input\n where\n  toW16 = toWord16 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_4))\n\nprop_full_right_shift_16_8 :: W.Word16 -> W.Word8 -> Bool\nprop_full_right_shift_16_8 = \\x y -> let input = (toW8 y, toW16 x)\n                                   in fastF input == C.full_right_shift_16_8 input\n where\n  toW16 = toWord16 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_8))\n\nprop_full_right_shift_32_1 :: W.Word32 -> Bool -> Bool\nprop_full_right_shift_32_1 = \\x y -> let input = (toBit y, toW32 x)\n                                   in fastF input == C.full_right_shift_32_1 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_1))\n\nprop_full_right_shift_32_2 :: W.Word32 -> W.Word8 -> Bool\nprop_full_right_shift_32_2 = \\x y -> let input = (toW2 y, toW32 x)\n                                   in fastF input == C.full_right_shift_32_2 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_2))\n\nprop_full_right_shift_32_4 :: W.Word32 -> W.Word8 -> Bool\nprop_full_right_shift_32_4 = \\x y -> let input = (toW4 y, toW32 x)\n                                   in fastF input == C.full_right_shift_32_4 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_4))\n\nprop_full_right_shift_32_8 :: W.Word32 -> W.Word8 -> Bool\nprop_full_right_shift_32_8 = \\x y -> let input = (toW8 y, toW32 x)\n                                   in fastF input == C.full_right_shift_32_8 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_8))\n\nprop_full_right_shift_32_16 :: W.Word32 -> W.Word16 -> Bool\nprop_full_right_shift_32_16 = \\x y -> let input = (toW16 y, toW32 x)\n                                   in fastF input == C.full_right_shift_32_16 input\n where\n  toW32 = toWord32 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_16))\n\nprop_full_right_shift_64_1 :: W.Word64 -> Bool -> Bool\nprop_full_right_shift_64_1 = \\x y -> let input = (toBit y, toW64 x)\n                                   in fastF input == C.full_right_shift_64_1 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_1))\n\nprop_full_right_shift_64_2 :: W.Word64 -> W.Word8 -> Bool\nprop_full_right_shift_64_2 = \\x y -> let input = (toW2 y, toW64 x)\n                                   in fastF input == C.full_right_shift_64_2 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_2))\n\nprop_full_right_shift_64_4 :: W.Word64 -> W.Word8 -> Bool\nprop_full_right_shift_64_4 = \\x y -> let input = (toW4 y, toW64 x)\n                                   in fastF input == C.full_right_shift_64_4 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_4))\n\nprop_full_right_shift_64_8 :: W.Word64 -> W.Word8 -> Bool\nprop_full_right_shift_64_8 = \\x y -> let input = (toW8 y, toW64 x)\n                                   in fastF input == C.full_right_shift_64_8 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_8))\n\nprop_full_right_shift_64_16 :: W.Word64 -> W.Word16 -> Bool\nprop_full_right_shift_64_16 = \\x y -> let input = (toW16 y, toW64 x)\n                                   in fastF input == C.full_right_shift_64_16 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_16))\n\nprop_full_right_shift_64_32 :: W.Word64 -> W.Word32 -> Bool\nprop_full_right_shift_64_32 = \\x y -> let input = (toW32 y, toW64 x)\n                                   in fastF input == C.full_right_shift_64_32 input\n where\n  toW64 = toWord64 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_32))\n\nprop_leftmost_8_1 :: W.Word8 -> Bool\nprop_leftmost_8_1 = \\x -> let input = toW8 x\n                            in fastF input == C.leftmost_8_1 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost8_1))\n\nprop_leftmost_8_2 :: W.Word8 -> Bool\nprop_leftmost_8_2 = \\x -> let input = toW8 x\n                            in fastF input == C.leftmost_8_2 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost8_2))\n\nprop_leftmost_8_4 :: W.Word8 -> Bool\nprop_leftmost_8_4 = \\x -> let input = toW8 x\n                            in fastF input == C.leftmost_8_4 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost8_4))\n\nprop_leftmost_16_1 :: W.Word16 -> Bool\nprop_leftmost_16_1 = \\x -> let input = toW16 x\n                            in fastF input == C.leftmost_16_1 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_1))\n\nprop_leftmost_16_2 :: W.Word16 -> Bool\nprop_leftmost_16_2 = \\x -> let input = toW16 x\n                            in fastF input == C.leftmost_16_2 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_2))\n\nprop_leftmost_16_4 :: W.Word16 -> Bool\nprop_leftmost_16_4 = \\x -> let input = toW16 x\n                            in fastF input == C.leftmost_16_4 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_4))\n\nprop_leftmost_16_8 :: W.Word16 -> Bool\nprop_leftmost_16_8 = \\x -> let input = toW16 x\n                            in fastF input == C.leftmost_16_8 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_8))\n\nprop_leftmost_32_1 :: W.Word32 -> Bool\nprop_leftmost_32_1 = \\x -> let input = toW32 x\n                            in fastF input == C.leftmost_32_1 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_1))\n\nprop_leftmost_32_2 :: W.Word32 -> Bool\nprop_leftmost_32_2 = \\x -> let input = toW32 x\n                            in fastF input == C.leftmost_32_2 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_2))\n\nprop_leftmost_32_4 :: W.Word32 -> Bool\nprop_leftmost_32_4 = \\x -> let input = toW32 x\n                            in fastF input == C.leftmost_32_4 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_4))\n\nprop_leftmost_32_8 :: W.Word32 -> Bool\nprop_leftmost_32_8 = \\x -> let input = toW32 x\n                            in fastF input == C.leftmost_32_8 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_8))\n\nprop_leftmost_32_16 :: W.Word32 -> Bool\nprop_leftmost_32_16 = \\x -> let input = toW32 x\n                            in fastF input == C.leftmost_32_16 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_16))\n\nprop_leftmost_64_1 :: W.Word64 -> Bool\nprop_leftmost_64_1 = \\x -> let input = toW64 x\n                            in fastF input == C.leftmost_64_1 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_1))\n\nprop_leftmost_64_2 :: W.Word64 -> Bool\nprop_leftmost_64_2 = \\x -> let input = toW64 x\n                            in fastF input == C.leftmost_64_2 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_2))\n\nprop_leftmost_64_4 :: W.Word64 -> Bool\nprop_leftmost_64_4 = \\x -> let input = toW64 x\n                            in fastF input == C.leftmost_64_4 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_4))\n\nprop_leftmost_64_8 :: W.Word64 -> Bool\nprop_leftmost_64_8 = \\x -> let input = toW64 x\n                            in fastF input == C.leftmost_64_8 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_8))\n\nprop_leftmost_64_16 :: W.Word64 -> Bool\nprop_leftmost_64_16 = \\x -> let input = toW64 x\n                            in fastF input == C.leftmost_64_16 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_16))\n\nprop_leftmost_64_32 :: W.Word64 -> Bool\nprop_leftmost_64_32 = \\x -> let input = toW64 x\n                            in fastF input == C.leftmost_64_32 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_32))\n\nprop_rightmost_8_1 :: W.Word8 -> Bool\nprop_rightmost_8_1 = \\x -> let input = toW8 x\n                            in fastF input == C.rightmost_8_1 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost8_1))\n\nprop_rightmost_8_2 :: W.Word8 -> Bool\nprop_rightmost_8_2 = \\x -> let input = toW8 x\n                            in fastF input == C.rightmost_8_2 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost8_2))\n\nprop_rightmost_8_4 :: W.Word8 -> Bool\nprop_rightmost_8_4 = \\x -> let input = toW8 x\n                            in fastF input == C.rightmost_8_4 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost8_4))\n\nprop_rightmost_16_1 :: W.Word16 -> Bool\nprop_rightmost_16_1 = \\x -> let input = toW16 x\n                            in fastF input == C.rightmost_16_1 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_1))\n\nprop_rightmost_16_2 :: W.Word16 -> Bool\nprop_rightmost_16_2 = \\x -> let input = toW16 x\n                            in fastF input == C.rightmost_16_2 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_2))\n\nprop_rightmost_16_4 :: W.Word16 -> Bool\nprop_rightmost_16_4 = \\x -> let input = toW16 x\n                            in fastF input == C.rightmost_16_4 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_4))\n\nprop_rightmost_16_8 :: W.Word16 -> Bool\nprop_rightmost_16_8 = \\x -> let input = toW16 x\n                            in fastF input == C.rightmost_16_8 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_8))\n\nprop_rightmost_32_1 :: W.Word32 -> Bool\nprop_rightmost_32_1 = \\x -> let input = toW32 x\n                            in fastF input == C.rightmost_32_1 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_1))\n\nprop_rightmost_32_2 :: W.Word32 -> Bool\nprop_rightmost_32_2 = \\x -> let input = toW32 x\n                            in fastF input == C.rightmost_32_2 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_2))\n\nprop_rightmost_32_4 :: W.Word32 -> Bool\nprop_rightmost_32_4 = \\x -> let input = toW32 x\n                            in fastF input == C.rightmost_32_4 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_4))\n\nprop_rightmost_32_8 :: W.Word32 -> Bool\nprop_rightmost_32_8 = \\x -> let input = toW32 x\n                            in fastF input == C.rightmost_32_8 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_8))\n\nprop_rightmost_32_16 :: W.Word32 -> Bool\nprop_rightmost_32_16 = \\x -> let input = toW32 x\n                            in fastF input == C.rightmost_32_16 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_16))\n\nprop_rightmost_64_1 :: W.Word64 -> Bool\nprop_rightmost_64_1 = \\x -> let input = toW64 x\n                            in fastF input == C.rightmost_64_1 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_1))\n\nprop_rightmost_64_2 :: W.Word64 -> Bool\nprop_rightmost_64_2 = \\x -> let input = toW64 x\n                            in fastF input == C.rightmost_64_2 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_2))\n\nprop_rightmost_64_4 :: W.Word64 -> Bool\nprop_rightmost_64_4 = \\x -> let input = toW64 x\n                            in fastF input == C.rightmost_64_4 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_4))\n\nprop_rightmost_64_8 :: W.Word64 -> Bool\nprop_rightmost_64_8 = \\x -> let input = toW64 x\n                            in fastF input == C.rightmost_64_8 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_8))\n\nprop_rightmost_64_16 :: W.Word64 -> Bool\nprop_rightmost_64_16 = \\x -> let input = toW64 x\n                            in fastF input == C.rightmost_64_16 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_16))\n\nprop_rightmost_64_32 :: W.Word64 -> Bool\nprop_rightmost_64_32 = \\x -> let input = toW64 x\n                            in fastF input == C.rightmost_64_32 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_32))\n\nprop_left_pad_low_1_8 :: Bool -> Bool\nprop_left_pad_low_1_8 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_low_1_8 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_8))\n\nprop_left_pad_low_1_16 :: Bool -> Bool\nprop_left_pad_low_1_16 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_low_1_16 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_16))\n\nprop_left_pad_low_8_16 :: W.Word8 -> Bool\nprop_left_pad_low_8_16 = \\x -> let input = toW8 x\n                                in fastF input == C.left_pad_low_8_16 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow8_16))\n\nprop_left_pad_low_1_32 :: Bool -> Bool\nprop_left_pad_low_1_32 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_low_1_32 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_32))\n\nprop_left_pad_low_8_32 :: W.Word8 -> Bool\nprop_left_pad_low_8_32 = \\x -> let input = toW8 x\n                                in fastF input == C.left_pad_low_8_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow8_32))\n\nprop_left_pad_low_16_32 :: W.Word16 -> Bool\nprop_left_pad_low_16_32 = \\x -> let input = toW16 x\n                                in fastF input == C.left_pad_low_16_32 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow16_32))\n\nprop_left_pad_low_1_64 :: Bool -> Bool\nprop_left_pad_low_1_64 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_low_1_64 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_64))\n\nprop_left_pad_low_8_64 :: W.Word8 -> Bool\nprop_left_pad_low_8_64 = \\x -> let input = toW8 x\n                                in fastF input == C.left_pad_low_8_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow8_64))\n\nprop_left_pad_low_16_64 :: W.Word16 -> Bool\nprop_left_pad_low_16_64 = \\x -> let input = toW16 x\n                                in fastF input == C.left_pad_low_16_64 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow16_64))\n\nprop_left_pad_low_32_64 :: W.Word32 -> Bool\nprop_left_pad_low_32_64 = \\x -> let input = toW32 x\n                                in fastF input == C.left_pad_low_32_64 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow32_64))\n\nprop_left_pad_high_1_8 :: Bool -> Bool\nprop_left_pad_high_1_8 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_high_1_8 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_8))\n\nprop_left_pad_high_1_16 :: Bool -> Bool\nprop_left_pad_high_1_16 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_high_1_16 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_16))\n\nprop_left_pad_high_8_16 :: W.Word8 -> Bool\nprop_left_pad_high_8_16 = \\x -> let input = toW8 x\n                                in fastF input == C.left_pad_high_8_16 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh8_16))\n\nprop_left_pad_high_1_32 :: Bool -> Bool\nprop_left_pad_high_1_32 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_high_1_32 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_32))\n\nprop_left_pad_high_8_32 :: W.Word8 -> Bool\nprop_left_pad_high_8_32 = \\x -> let input = toW8 x\n                                in fastF input == C.left_pad_high_8_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh8_32))\n\nprop_left_pad_high_16_32 :: W.Word16 -> Bool\nprop_left_pad_high_16_32 = \\x -> let input = toW16 x\n                                in fastF input == C.left_pad_high_16_32 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh16_32))\n\nprop_left_pad_high_1_64 :: Bool -> Bool\nprop_left_pad_high_1_64 = \\x -> let input = toBit x\n                                in fastF input == C.left_pad_high_1_64 input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_64))\n\nprop_left_pad_high_8_64 :: W.Word8 -> Bool\nprop_left_pad_high_8_64 = \\x -> let input = toW8 x\n                                in fastF input == C.left_pad_high_8_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh8_64))\n\nprop_left_pad_high_16_64 :: W.Word16 -> Bool\nprop_left_pad_high_16_64 = \\x -> let input = toW16 x\n                                in fastF input == C.left_pad_high_16_64 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh16_64))\n\nprop_left_pad_high_32_64 :: W.Word32 -> Bool\nprop_left_pad_high_32_64 = \\x -> let input = toW32 x\n                                in fastF input == C.left_pad_high_32_64 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh32_64))\n\nprop_left_extend_1_8 :: Bool -> Bool\nprop_left_extend_1_8 = \\x -> let input = toBit x\n                                in fastF input == C.left_extend_1_8 input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_8))\n\nprop_left_extend_1_16 :: Bool -> Bool\nprop_left_extend_1_16 = \\x -> let input = toBit x\n                                in fastF input == C.left_extend_1_16 input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_16))\n\nprop_left_extend_8_16 :: W.Word8 -> Bool\nprop_left_extend_8_16 = \\x -> let input = toW8 x\n                                in fastF input == C.left_extend_8_16 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend8_16))\n\nprop_left_extend_1_32 :: Bool -> Bool\nprop_left_extend_1_32 = \\x -> let input = toBit x\n                                in fastF input == C.left_extend_1_32 input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_32))\n\nprop_left_extend_8_32 :: W.Word8 -> Bool\nprop_left_extend_8_32 = \\x -> let input = toW8 x\n                                in fastF input == C.left_extend_8_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend8_32))\n\nprop_left_extend_16_32 :: W.Word16 -> Bool\nprop_left_extend_16_32 = \\x -> let input = toW16 x\n                                in fastF input == C.left_extend_16_32 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend16_32))\n\nprop_left_extend_1_64 :: Bool -> Bool\nprop_left_extend_1_64 = \\x -> let input = toBit x\n                                in fastF input == C.left_extend_1_64 input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_64))\n\nprop_left_extend_8_64 :: W.Word8 -> Bool\nprop_left_extend_8_64 = \\x -> let input = toW8 x\n                                in fastF input == C.left_extend_8_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend8_64))\n\nprop_left_extend_16_64 :: W.Word16 -> Bool\nprop_left_extend_16_64 = \\x -> let input = toW16 x\n                                in fastF input == C.left_extend_16_64 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend16_64))\n\nprop_left_extend_32_64 :: W.Word32 -> Bool\nprop_left_extend_32_64 = \\x -> let input = toW32 x\n                                in fastF input == C.left_extend_32_64 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend32_64))\n\nprop_right_pad_low_1_8 :: Bool -> Bool\nprop_right_pad_low_1_8 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_low_1_8 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_8))\n\nprop_right_pad_low_1_16 :: Bool -> Bool\nprop_right_pad_low_1_16 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_low_1_16 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_16))\n\nprop_right_pad_low_8_16 :: W.Word8 -> Bool\nprop_right_pad_low_8_16 = \\x -> let input = toW8 x\n                                in fastF input == C.right_pad_low_8_16 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow8_16))\n\nprop_right_pad_low_1_32 :: Bool -> Bool\nprop_right_pad_low_1_32 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_low_1_32 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_32))\n\nprop_right_pad_low_8_32 :: W.Word8 -> Bool\nprop_right_pad_low_8_32 = \\x -> let input = toW8 x\n                                in fastF input == C.right_pad_low_8_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow8_32))\n\nprop_right_pad_low_16_32 :: W.Word16 -> Bool\nprop_right_pad_low_16_32 = \\x -> let input = toW16 x\n                                in fastF input == C.right_pad_low_16_32 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow16_32))\n\nprop_right_pad_low_1_64 :: Bool -> Bool\nprop_right_pad_low_1_64 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_low_1_64 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_64))\n\nprop_right_pad_low_8_64 :: W.Word8 -> Bool\nprop_right_pad_low_8_64 = \\x -> let input = toW8 x\n                                in fastF input == C.right_pad_low_8_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow8_64))\n\nprop_right_pad_low_16_64 :: W.Word16 -> Bool\nprop_right_pad_low_16_64 = \\x -> let input = toW16 x\n                                in fastF input == C.right_pad_low_16_64 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow16_64))\n\nprop_right_pad_low_32_64 :: W.Word32 -> Bool\nprop_right_pad_low_32_64 = \\x -> let input = toW32 x\n                                in fastF input == C.right_pad_low_32_64 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow32_64))\n\nprop_right_pad_high_1_8 :: Bool -> Bool\nprop_right_pad_high_1_8 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_high_1_8 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_8))\n\nprop_right_pad_high_1_16 :: Bool -> Bool\nprop_right_pad_high_1_16 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_high_1_16 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_16))\n\nprop_right_pad_high_8_16 :: W.Word8 -> Bool\nprop_right_pad_high_8_16 = \\x -> let input = toW8 x\n                                in fastF input == C.right_pad_high_8_16 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh8_16))\n\nprop_right_pad_high_1_32 :: Bool -> Bool\nprop_right_pad_high_1_32 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_high_1_32 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_32))\n\nprop_right_pad_high_8_32 :: W.Word8 -> Bool\nprop_right_pad_high_8_32 = \\x -> let input = toW8 x\n                                in fastF input == C.right_pad_high_8_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh8_32))\n\nprop_right_pad_high_16_32 :: W.Word16 -> Bool\nprop_right_pad_high_16_32 = \\x -> let input = toW16 x\n                                in fastF input == C.right_pad_high_16_32 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh16_32))\n\nprop_right_pad_high_1_64 :: Bool -> Bool\nprop_right_pad_high_1_64 = \\x -> let input = toBit x\n                                in fastF input == C.right_pad_high_1_64 input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_64))\n\nprop_right_pad_high_8_64 :: W.Word8 -> Bool\nprop_right_pad_high_8_64 = \\x -> let input = toW8 x\n                                in fastF input == C.right_pad_high_8_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh8_64))\n\nprop_right_pad_high_16_64 :: W.Word16 -> Bool\nprop_right_pad_high_16_64 = \\x -> let input = toW16 x\n                                in fastF input == C.right_pad_high_16_64 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh16_64))\n\nprop_right_pad_high_32_64 :: W.Word32 -> Bool\nprop_right_pad_high_32_64 = \\x -> let input = toW32 x\n                                in fastF input == C.right_pad_high_32_64 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh32_64))\n\nprop_right_extend_8_16 :: W.Word8 -> Bool\nprop_right_extend_8_16 = \\x -> let input = toW8 x\n                                in fastF input == C.right_extend_8_16 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend8_16))\n\nprop_right_extend_8_32 :: W.Word8 -> Bool\nprop_right_extend_8_32 = \\x -> let input = toW8 x\n                                in fastF input == C.right_extend_8_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend8_32))\n\nprop_right_extend_16_32 :: W.Word16 -> Bool\nprop_right_extend_16_32 = \\x -> let input = toW16 x\n                                in fastF input == C.right_extend_16_32 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend16_32))\n\nprop_right_extend_8_64 :: W.Word8 -> Bool\nprop_right_extend_8_64 = \\x -> let input = toW8 x\n                                in fastF input == C.right_extend_8_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend8_64))\n\nprop_right_extend_16_64 :: W.Word16 -> Bool\nprop_right_extend_16_64 = \\x -> let input = toW16 x\n                                in fastF input == C.right_extend_16_64 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend16_64))\n\nprop_right_extend_32_64 :: W.Word32 -> Bool\nprop_right_extend_32_64 = \\x -> let input = toW32 x\n                                in fastF input == C.right_extend_32_64 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend32_64))\n\nprop_left_shift_with_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_left_shift_with_8 = \\w x y -> let input = (toBit w, (toW4 x, toW8 y))\n                                  in fastF input == C.left_shift_with_8 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith8))\n\nprop_left_shift_with_16 :: Bool -> W.Word8 -> W.Word16 -> Bool\nprop_left_shift_with_16 = \\w x y -> let input = (toBit w, (toW4 x, toW16 y))\n                                  in fastF input == C.left_shift_with_16 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith16))\n\nprop_left_shift_with_32 :: Bool -> W.Word8 -> W.Word32 -> Bool\nprop_left_shift_with_32 = \\w x y -> let input = (toBit w, (toW8 x, toW32 y))\n                                  in fastF input == C.left_shift_with_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith32))\n\nprop_left_shift_with_64 :: Bool -> W.Word8 -> W.Word64 -> Bool\nprop_left_shift_with_64 = \\w x y -> let input = (toBit w, (toW8 x, toW64 y))\n                                  in fastF input == C.left_shift_with_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith64))\n\nprop_left_shift_8 :: W.Word8 -> W.Word8 -> Bool\nprop_left_shift_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == C.left_shift_8 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift8))\n\nprop_left_shift_16 :: W.Word8 -> W.Word16 -> Bool\nprop_left_shift_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == C.left_shift_16 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift16))\n\nprop_left_shift_32 :: W.Word8 -> W.Word32 -> Bool\nprop_left_shift_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == C.left_shift_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift32))\n\nprop_left_shift_64 :: W.Word8 -> W.Word64 -> Bool\nprop_left_shift_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == C.left_shift_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift64))\n\nprop_right_shift_with_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_right_shift_with_8 = \\w x y -> let input = (toBit w, (toW4 x, toW8 y))\n                                  in fastF input == C.right_shift_with_8 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith8))\n\nprop_right_shift_with_16 :: Bool -> W.Word8 -> W.Word16 -> Bool\nprop_right_shift_with_16 = \\w x y -> let input = (toBit w, (toW4 x, toW16 y))\n                                  in fastF input == C.right_shift_with_16 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith16))\n\nprop_right_shift_with_32 :: Bool -> W.Word8 -> W.Word32 -> Bool\nprop_right_shift_with_32 = \\w x y -> let input = (toBit w, (toW8 x, toW32 y))\n                                  in fastF input == C.right_shift_with_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith32))\n\nprop_right_shift_with_64 :: Bool -> W.Word8 -> W.Word64 -> Bool\nprop_right_shift_with_64 = \\w x y -> let input = (toBit w, (toW8 x, toW64 y))\n                                  in fastF input == C.right_shift_with_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith64))\n\nprop_right_shift_8 :: W.Word8 -> W.Word8 -> Bool\nprop_right_shift_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == C.right_shift_8 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift8))\n\nprop_right_shift_16 :: W.Word8 -> W.Word16 -> Bool\nprop_right_shift_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == C.right_shift_16 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift16))\n\nprop_right_shift_32 :: W.Word8 -> W.Word32 -> Bool\nprop_right_shift_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == C.right_shift_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift32))\n\nprop_right_shift_64 :: W.Word8 -> W.Word64 -> Bool\nprop_right_shift_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == C.right_shift_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift64))\n\nprop_left_rotate_8 :: W.Word8 -> W.Word8 -> Bool\nprop_left_rotate_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == C.left_rotate_8 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate8))\n\nprop_left_rotate_16 :: W.Word8 -> W.Word16 -> Bool\nprop_left_rotate_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == C.left_rotate_16 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate16))\n\nprop_left_rotate_32 :: W.Word8 -> W.Word32 -> Bool\nprop_left_rotate_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == C.left_rotate_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate32))\n\nprop_left_rotate_64 :: W.Word8 -> W.Word64 -> Bool\nprop_left_rotate_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == C.left_rotate_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate64))\n\nprop_right_rotate_8 :: W.Word8 -> W.Word8 -> Bool\nprop_right_rotate_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == C.right_rotate_8 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate8))\n\nprop_right_rotate_16 :: W.Word8 -> W.Word16 -> Bool\nprop_right_rotate_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == C.right_rotate_16 input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate16))\n\nprop_right_rotate_32 :: W.Word8 -> W.Word32 -> Bool\nprop_right_rotate_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == C.right_rotate_32 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate32))\n\nprop_right_rotate_64 :: W.Word8 -> W.Word64 -> Bool\nprop_right_rotate_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == C.right_rotate_64 input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate64))\n\nassert_one_8 :: Assertion\nassert_one_8 = fastF () @=? C.one_8 ()\n where\n  fastF = testCoreEval (specification (ArithJet One8))\n\nassert_one_16 :: Assertion\nassert_one_16 = fastF () @=? C.one_16 ()\n where\n  fastF = testCoreEval (specification (ArithJet One16))\n\nassert_one_32 :: Assertion\nassert_one_32 = fastF () @=? C.one_32 ()\n where\n  fastF = testCoreEval (specification (ArithJet One32))\n\nassert_one_64 :: Assertion\nassert_one_64 = fastF () @=? C.one_64 ()\n where\n  fastF = testCoreEval (specification (ArithJet One64))\n\nprop_add_8 :: W.Word8 -> W.Word8 -> Bool\nprop_add_8 = \\x y -> let input = (toW8 x, toW8 y)\n                      in fastF input == C.add_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add8))\n\nprop_add_16 :: W.Word16 -> W.Word16 -> Bool\nprop_add_16 = \\x y -> let input = (toW16 x, toW16 y)\n                       in fastF input == C.add_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add16))\n\nprop_add_32 :: W.Word32 -> W.Word32 -> Bool\nprop_add_32 = \\x y -> let input = (toW32 x, toW32 y)\n                       in fastF input == C.add_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add32))\n\nprop_add_64 :: W.Word64 -> W.Word64 -> Bool\nprop_add_64 = \\x y -> let input = (toW64 x, toW64 y)\n                       in fastF input == C.add_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add64))\n\nprop_full_add_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_full_add_8 = \\c x y -> let input = (toBit c, (toW8 x, toW8 y))\n                             in fastF input == C.full_add_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd8))\n\nprop_full_add_16 :: Bool -> W.Word16 -> W.Word16 -> Bool\nprop_full_add_16 = \\c x y -> let input = (toBit c, (toW16 x, toW16 y))\n                              in fastF input == C.full_add_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd16))\n\nprop_full_add_32 :: Bool -> W.Word32 -> W.Word32 -> Bool\nprop_full_add_32 = \\c x y -> let input = (toBit c, (toW32 x, toW32 y))\n                              in fastF input == C.full_add_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd32))\n\nprop_full_add_64 :: Bool -> W.Word64 -> W.Word64 -> Bool\nprop_full_add_64 = \\c x y -> let input = (toBit c, (toW64 x, toW64 y))\n                              in fastF input == C.full_add_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd64))\n\nprop_full_increment_8 :: Bool -> W.Word8 -> Bool\nprop_full_increment_8 = \\b x -> let input = (toBit b, toW8 x)\n                                in fastF input == C.full_increment_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement8))\n\nprop_full_increment_16 :: Bool -> W.Word16 -> Bool\nprop_full_increment_16 = \\b x -> let input = (toBit b, toW16 x)\n                                 in fastF input == C.full_increment_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement16))\n\nprop_full_increment_32 :: Bool -> W.Word32 -> Bool\nprop_full_increment_32 = \\b x -> let input = (toBit b, toW32 x)\n                                 in fastF input == C.full_increment_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement32))\n\nprop_full_increment_64 :: Bool -> W.Word64 -> Bool\nprop_full_increment_64 = \\b x -> let input = (toBit b, toW64 x)\n                                 in fastF input == C.full_increment_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement64))\n\nassert_full_increment_max_8 :: Assertion\nassert_full_increment_max_8 = fastF input @=? C.full_increment_8 input\n where\n  input = (toBit True, toWord8 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement8))\n\nassert_full_increment_max_16 :: Assertion\nassert_full_increment_max_16 = fastF input @=? C.full_increment_16 input\n where\n  input = (toBit True, toWord16 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement16))\n\nassert_full_increment_max_32 :: Assertion\nassert_full_increment_max_32 = fastF input @=? C.full_increment_32 input\n where\n  input = (toBit True, toWord32 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement32))\n\nassert_full_increment_max_64 :: Assertion\nassert_full_increment_max_64 = fastF input @=? C.full_increment_64 input\n where\n  input = (toBit True, toWord64 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement64))\n\nprop_increment_8 :: W.Word8 -> Bool\nprop_increment_8 = \\x -> let input = toW8 x\n                       in fastF input == C.increment_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment8))\n\nprop_increment_16 :: W.Word16 -> Bool\nprop_increment_16 = \\x -> let input = toW16 x\n                        in fastF input == C.increment_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment16))\n\nprop_increment_32 :: W.Word32 -> Bool\nprop_increment_32 = \\x -> let input = toW32 x\n                        in fastF input == C.increment_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment32))\n\nprop_increment_64 :: W.Word64 -> Bool\nprop_increment_64 = \\x -> let input = toW64 x\n                        in fastF input == C.increment_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment64))\n\nassert_increment_max_8 :: Assertion\nassert_increment_max_8 = fastF input @=? C.increment_8 input\n where\n  input = toWord8 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment8))\n\nassert_increment_max_16 :: Assertion\nassert_increment_max_16 = fastF input @=? C.increment_16 input\n where\n  input = toWord16 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment16))\n\nassert_increment_max_32 :: Assertion\nassert_increment_max_32 = fastF input @=? C.increment_32 input\n where\n  input = toWord32 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment32))\n\nassert_increment_max_64 :: Assertion\nassert_increment_max_64 = fastF input @=? C.increment_64 input\n where\n  input = toWord64 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment64))\n\nprop_subtract_8 :: W.Word8 -> W.Word8 -> Bool\nprop_subtract_8 = \\x y -> let input = (toW8 x, toW8 y)\n                           in fastF input == C.subtract_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract8))\n\nprop_subtract_16 :: W.Word16 -> W.Word16 -> Bool\nprop_subtract_16 = \\x y -> let input = (toW16 x, toW16 y)\n                            in fastF input == C.subtract_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract16))\n\nprop_subtract_32 :: W.Word32 -> W.Word32 -> Bool\nprop_subtract_32 = \\x y -> let input = (toW32 x, toW32 y)\n                            in fastF input == C.subtract_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract32))\n\nprop_subtract_64 :: W.Word64 -> W.Word64 -> Bool\nprop_subtract_64 = \\x y -> let input = (toW64 x, toW64 y)\n                            in fastF input == C.subtract_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract64))\n\nprop_full_subtract_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_full_subtract_8 = \\c x y -> let input = (toBit c, (toW8 x, toW8 y))\n                                  in fastF input == C.full_subtract_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract8))\n\nprop_full_subtract_16 :: Bool -> W.Word16 -> W.Word16 -> Bool\nprop_full_subtract_16 = \\c x y -> let input = (toBit c, (toW16 x, toW16 y))\n                                   in fastF input == C.full_subtract_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract16))\n\nprop_full_subtract_32 :: Bool -> W.Word32 -> W.Word32 -> Bool\nprop_full_subtract_32 = \\c x y -> let input = (toBit c, (toW32 x, toW32 y))\n                                   in fastF input == C.full_subtract_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract32))\n\nprop_full_subtract_64 :: Bool -> W.Word64 -> W.Word64 -> Bool\nprop_full_subtract_64 = \\c x y -> let input = (toBit c, (toW64 x, toW64 y))\n                                   in fastF input == C.full_subtract_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract64))\n\nprop_full_decrement_8 :: Bool -> W.Word8 -> Bool\nprop_full_decrement_8 = \\b x -> let input = (toBit b, toW8 x)\n                                in fastF input == C.full_decrement_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement8))\n\nprop_full_decrement_16 :: Bool -> W.Word16 -> Bool\nprop_full_decrement_16 = \\b x -> let input = (toBit b, toW16 x)\n                                 in fastF input == C.full_decrement_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement16))\n\nprop_full_decrement_32 :: Bool -> W.Word32 -> Bool\nprop_full_decrement_32 = \\b x -> let input = (toBit b, toW32 x)\n                                 in fastF input == C.full_decrement_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement32))\n\nprop_full_decrement_64 :: Bool -> W.Word64 -> Bool\nprop_full_decrement_64 = \\b x -> let input = (toBit b, toW64 x)\n                                 in fastF input == C.full_decrement_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement64))\n\nassert_full_decrement_zero_8 :: Assertion\nassert_full_decrement_zero_8 = fastF input @=? C.full_decrement_8 input\n where\n  input = (toBit True, toWord8 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement8))\n\nassert_full_decrement_zero_16 :: Assertion\nassert_full_decrement_zero_16 = fastF input @=? C.full_decrement_16 input\n where\n  input = (toBit True, toWord16 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement16))\n\nassert_full_decrement_zero_32 :: Assertion\nassert_full_decrement_zero_32 = fastF input @=? C.full_decrement_32 input\n where\n  input = (toBit True, toWord32 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement32))\n\nassert_full_decrement_zero_64 :: Assertion\nassert_full_decrement_zero_64 = fastF input @=? C.full_decrement_64 input\n where\n  input = (toBit True, toWord64 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement64))\n\nprop_decrement_8 :: W.Word8 -> Bool\nprop_decrement_8 = \\x -> let input = toW8 x\n                       in fastF input == C.decrement_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement8))\n\nprop_decrement_16 :: W.Word16 -> Bool\nprop_decrement_16 = \\x -> let input = toW16 x\n                        in fastF input == C.decrement_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement16))\n\nprop_decrement_32 :: W.Word32 -> Bool\nprop_decrement_32 = \\x -> let input = toW32 x\n                        in fastF input == C.decrement_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement32))\n\nprop_decrement_64 :: W.Word64 -> Bool\nprop_decrement_64 = \\x -> let input = toW64 x\n                        in fastF input == C.decrement_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement64))\n\nassert_decrement_zero_8 :: Assertion\nassert_decrement_zero_8 = fastF input @=? C.decrement_8 input\n where\n  input = toWord8 0\n  fastF = testCoreEval (specification (ArithJet Decrement8))\n\nassert_decrement_zero_16 :: Assertion\nassert_decrement_zero_16 = fastF input @=? C.decrement_16 input\n where\n  input = toWord16 0\n  fastF = testCoreEval (specification (ArithJet Decrement16))\n\nassert_decrement_zero_32 :: Assertion\nassert_decrement_zero_32 = fastF input @=? C.decrement_32 input\n where\n  input = toWord32 0\n  fastF = testCoreEval (specification (ArithJet Decrement32))\n\nassert_decrement_zero_64 :: Assertion\nassert_decrement_zero_64 = fastF input @=? C.decrement_64 input\n where\n  input = toWord64 0\n  fastF = testCoreEval (specification (ArithJet Decrement64))\n\nprop_negate_8 :: W.Word8 -> Bool\nprop_negate_8 = \\x -> let input = toW8 x\n                       in fastF input == C.negate_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate8))\n\nprop_negate_16 :: W.Word16 -> Bool\nprop_negate_16 = \\x -> let input = toW16 x\n                        in fastF input == C.negate_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate16))\n\nprop_negate_32 :: W.Word32 -> Bool\nprop_negate_32 = \\x -> let input = toW32 x\n                        in fastF input == C.negate_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate32))\n\nprop_negate_64 :: W.Word64 -> Bool\nprop_negate_64 = \\x -> let input = toW64 x\n                        in fastF input == C.negate_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate64))\n\nprop_multiply_8 :: W.Word8 -> W.Word8 -> Bool\nprop_multiply_8 = \\x y -> let input = (toW8 x, toW8 y)\n                           in fastF input == C.multiply_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply8))\n\nprop_multiply_16 :: W.Word16 -> W.Word16 -> Bool\nprop_multiply_16 = \\x y -> let input = (toW16 x, toW16 y)\n                            in fastF input == C.multiply_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply16))\n\nprop_multiply_32 :: W.Word32 -> W.Word32 -> Bool\nprop_multiply_32 = \\x y -> let input = (toW32 x, toW32 y)\n                            in fastF input == C.multiply_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply32))\n\nprop_multiply_64 :: W.Word64 -> W.Word64 -> Bool\nprop_multiply_64 = \\x y -> let input = (toW64 x, toW64 y)\n                            in fastF input == C.multiply_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply64))\n\nprop_full_multiply_8 :: W.Word8 -> W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_full_multiply_8 = \\x y z w -> let input = ((toW8 x, toW8 y), (toW8 z, toW8 w))\n                                    in fastF input == C.full_multiply_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply8))\n\nprop_full_multiply_16 :: W.Word16 -> W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_full_multiply_16 = \\x y z w -> let input = ((toW16 x, toW16 y), (toW16 z, toW16 w))\n                                     in fastF input == C.full_multiply_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply16))\n\nprop_full_multiply_32 :: W.Word32 -> W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_full_multiply_32 = \\x y z w -> let input = ((toW32 x, toW32 y), (toW32 z, toW32 w))\n                                     in fastF input == C.full_multiply_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply32))\n\nprop_full_multiply_64 :: W.Word64 -> W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_full_multiply_64 = \\x y z w -> let input = ((toW64 x, toW64 y), (toW64 z, toW64 w))\n                                     in fastF input == C.full_multiply_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply64))\n\nprop_is_zero_8 :: W.Word8 -> Bool\nprop_is_zero_8 = \\x -> let input = toW8 x\n                       in fastF input == C.is_zero_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero8))\n\nprop_is_zero_16 :: W.Word16 -> Bool\nprop_is_zero_16 = \\x -> let input = toW16 x\n                        in fastF input == C.is_zero_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero16))\n\nprop_is_zero_32 :: W.Word32 -> Bool\nprop_is_zero_32 = \\x -> let input = toW32 x\n                        in fastF input == C.is_zero_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero32))\n\nprop_is_zero_64 :: W.Word64 -> Bool\nprop_is_zero_64 = \\x -> let input = toW64 x\n                        in fastF input == C.is_zero_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero64))\n\nassert_zero_is_zero_8 :: Assertion\nassert_zero_is_zero_8 = fastF input @=? C.is_zero_8 input\n where\n  input = toWord8 0\n  fastF = testCoreEval (specification (ArithJet IsZero8))\n\nassert_zero_is_zero_16 :: Assertion\nassert_zero_is_zero_16 = fastF input @=? C.is_zero_16 input\n where\n  input = toWord16 0\n  fastF = testCoreEval (specification (ArithJet IsZero16))\n\nassert_zero_is_zero_32 :: Assertion\nassert_zero_is_zero_32 = fastF input @=? C.is_zero_32 input\n where\n  input = toWord32 0\n  fastF = testCoreEval (specification (ArithJet IsZero32))\n\nassert_zero_is_zero_64 :: Assertion\nassert_zero_is_zero_64 = fastF input @=? C.is_zero_64 input\n where\n  input = toWord64 0\n  fastF = testCoreEval (specification (ArithJet IsZero64))\n\nprop_is_one_8 :: W.Word8 -> Bool\nprop_is_one_8 = \\x -> let input = toW8 x\n                       in fastF input == C.is_one_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne8))\n\nprop_is_one_16 :: W.Word16 -> Bool\nprop_is_one_16 = \\x -> let input = toW16 x\n                        in fastF input == C.is_one_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne16))\n\nprop_is_one_32 :: W.Word32 -> Bool\nprop_is_one_32 = \\x -> let input = toW32 x\n                        in fastF input == C.is_one_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne32))\n\nprop_is_one_64 :: W.Word64 -> Bool\nprop_is_one_64 = \\x -> let input = toW64 x\n                        in fastF input == C.is_one_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne64))\n\nassert_one_is_one_8 :: Assertion\nassert_one_is_one_8 = fastF input @=? C.is_one_8 input\n where\n  input = toWord8 1\n  fastF = testCoreEval (specification (ArithJet IsOne8))\n\nassert_one_is_one_16 :: Assertion\nassert_one_is_one_16 = fastF input @=? C.is_one_16 input\n where\n  input = toWord16 1\n  fastF = testCoreEval (specification (ArithJet IsOne16))\n\nassert_one_is_one_32 :: Assertion\nassert_one_is_one_32 = fastF input @=? C.is_one_32 input\n where\n  input = toWord32 1\n  fastF = testCoreEval (specification (ArithJet IsOne32))\n\nassert_one_is_one_64 :: Assertion\nassert_one_is_one_64 = fastF input @=? C.is_one_64 input\n where\n  input = toWord64 1\n  fastF = testCoreEval (specification (ArithJet IsOne64))\n\nprop_le_8 :: W.Word8 -> W.Word8 -> Bool\nprop_le_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.le_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le8))\n\nprop_le_16 :: W.Word16 -> W.Word16 -> Bool\nprop_le_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.le_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le16))\n\nprop_le_32 :: W.Word32 -> W.Word32 -> Bool\nprop_le_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.le_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le32))\n\nprop_le_64 :: W.Word64 -> W.Word64 -> Bool\nprop_le_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.le_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le64))\n\nprop_le_diag_8 :: W.Word8 -> Bool\nprop_le_diag_8 = \\x -> let input = (toW8 x, toW8 x)\n                         in fastF input == C.le_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le8))\n\nprop_le_diag_16 :: W.Word16 -> Bool\nprop_le_diag_16 = \\x -> let input = (toW16 x, toW16 x)\n                         in fastF input == C.le_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le16))\n\nprop_le_diag_32 :: W.Word32 -> Bool\nprop_le_diag_32 = \\x -> let input = (toW32 x, toW32 x)\n                         in fastF input == C.le_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le32))\n\nprop_le_diag_64 :: W.Word64 -> Bool\nprop_le_diag_64 = \\x -> let input = (toW64 x, toW64 x)\n                         in fastF input == C.le_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le64))\n\nprop_lt_8 :: W.Word8 -> W.Word8 -> Bool\nprop_lt_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.lt_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt8))\n\nprop_lt_16 :: W.Word16 -> W.Word16 -> Bool\nprop_lt_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.lt_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt16))\n\nprop_lt_32 :: W.Word32 -> W.Word32 -> Bool\nprop_lt_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.lt_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt32))\n\nprop_lt_64 :: W.Word64 -> W.Word64 -> Bool\nprop_lt_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.lt_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt64))\n\nprop_lt_diag_8 :: W.Word8 -> Bool\nprop_lt_diag_8 = \\x -> let input = (toW8 x, toW8 x)\n                         in fastF input == C.lt_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt8))\n\nprop_lt_diag_16 :: W.Word16 -> Bool\nprop_lt_diag_16 = \\x -> let input = (toW16 x, toW16 x)\n                         in fastF input == C.lt_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt16))\n\nprop_lt_diag_32 :: W.Word32 -> Bool\nprop_lt_diag_32 = \\x -> let input = (toW32 x, toW32 x)\n                         in fastF input == C.lt_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt32))\n\nprop_lt_diag_64 :: W.Word64 -> Bool\nprop_lt_diag_64 = \\x -> let input = (toW64 x, toW64 x)\n                         in fastF input == C.lt_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt64))\n\nprop_min_8 :: W.Word8 -> W.Word8 -> Bool\nprop_min_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.min_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min8))\n\nprop_min_16 :: W.Word16 -> W.Word16 -> Bool\nprop_min_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.min_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min16))\n\nprop_min_32 :: W.Word32 -> W.Word32 -> Bool\nprop_min_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.min_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min32))\n\nprop_min_64 :: W.Word64 -> W.Word64 -> Bool\nprop_min_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.min_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min64))\n\nprop_max_8 :: W.Word8 -> W.Word8 -> Bool\nprop_max_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.max_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max8))\n\nprop_max_16 :: W.Word16 -> W.Word16 -> Bool\nprop_max_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.max_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max16))\n\nprop_max_32 :: W.Word32 -> W.Word32 -> Bool\nprop_max_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.max_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max32))\n\nprop_max_64 :: W.Word64 -> W.Word64 -> Bool\nprop_max_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.max_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max64))\n\nprop_median_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_median_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == C.median_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median8))\n\nprop_median_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_median_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == C.median_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median16))\n\nprop_median_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_median_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == C.median_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median32))\n\nprop_median_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_median_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == C.median_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median64))\n\nprop_div_mod_8 :: W.Word8 -> W.Word8 -> Bool\nprop_div_mod_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.div_mod_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod8))\n\nprop_div_mod_16 :: W.Word16 -> W.Word16 -> Bool\nprop_div_mod_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.div_mod_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod16))\n\nprop_div_mod_32 :: W.Word32 -> W.Word32 -> Bool\nprop_div_mod_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.div_mod_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod32))\n\nprop_div_mod_64 :: W.Word64 -> W.Word64 -> Bool\nprop_div_mod_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.div_mod_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod64))\n\nprop_divide_8 :: W.Word8 -> W.Word8 -> Bool\nprop_divide_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.divide_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide8))\n\nprop_divide_16 :: W.Word16 -> W.Word16 -> Bool\nprop_divide_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.divide_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide16))\n\nprop_divide_32 :: W.Word32 -> W.Word32 -> Bool\nprop_divide_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.divide_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide32))\n\nprop_divide_64 :: W.Word64 -> W.Word64 -> Bool\nprop_divide_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.divide_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide64))\n\nprop_modulo_8 :: W.Word8 -> W.Word8 -> Bool\nprop_modulo_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.modulo_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo8))\n\nprop_modulo_16 :: W.Word16 -> W.Word16 -> Bool\nprop_modulo_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.modulo_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo16))\n\nprop_modulo_32 :: W.Word32 -> W.Word32 -> Bool\nprop_modulo_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.modulo_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo32))\n\nprop_modulo_64 :: W.Word64 -> W.Word64 -> Bool\nprop_modulo_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.modulo_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo64))\n\nprop_divides_8 :: W.Word8 -> W.Word8 -> Bool\nprop_divides_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == C.divides_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides8))\n\nprop_divides_16 :: W.Word16 -> W.Word16 -> Bool\nprop_divides_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == C.divides_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides16))\n\nprop_divides_32 :: W.Word32 -> W.Word32 -> Bool\nprop_divides_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == C.divides_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides32))\n\nprop_divides_64 :: W.Word64 -> W.Word64 -> Bool\nprop_divides_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == C.divides_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides64))\n\nprop_div_mod_zero_8 :: W.Word8 -> Bool\nprop_div_mod_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == C.div_mod_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod8))\n\nprop_div_mod_zero_16 :: W.Word16 -> Bool\nprop_div_mod_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == C.div_mod_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod16))\n\nprop_div_mod_zero_32 :: W.Word32 -> Bool\nprop_div_mod_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == C.div_mod_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod32))\n\nprop_div_mod_zero_64 :: W.Word64 -> Bool\nprop_div_mod_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == C.div_mod_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod64))\n\nprop_divide_zero_8 :: W.Word8 -> Bool\nprop_divide_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == C.divide_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide8))\n\nprop_divide_zero_16 :: W.Word16 -> Bool\nprop_divide_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == C.divide_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide16))\n\nprop_divide_zero_32 :: W.Word32 -> Bool\nprop_divide_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == C.divide_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide32))\n\nprop_divide_zero_64 :: W.Word64 -> Bool\nprop_divide_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == C.divide_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide64))\n\nprop_modulo_zero_8 :: W.Word8 -> Bool\nprop_modulo_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == C.modulo_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo8))\n\nprop_modulo_zero_16 :: W.Word16 -> Bool\nprop_modulo_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == C.modulo_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo16))\n\nprop_modulo_zero_32 :: W.Word32 -> Bool\nprop_modulo_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == C.modulo_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo32))\n\nprop_modulo_zero_64 :: W.Word64 -> Bool\nprop_modulo_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == C.modulo_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo64))\n\nprop_divides_zero_8 :: W.Word8 -> Bool\nprop_divides_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == C.divides_8 input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides8))\n\nprop_divides_zero_16 :: W.Word16 -> Bool\nprop_divides_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == C.divides_16 input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides16))\n\nprop_divides_zero_32 :: W.Word32 -> Bool\nprop_divides_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == C.divides_32 input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides32))\n\nprop_divides_zero_64 :: W.Word64 -> Bool\nprop_divides_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == C.divides_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides64))\n\nprop_div_mod_128_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Property\nprop_div_mod_128_64 = \\xh0 xl0 y0 ->\n  let y = y0 .|. 2^63\n      xh = y - 1 - xh0 `mod` y\n      xl = - xl0\n      input = ((toW64 xh, toW64 xl), toW64 y)\n      x = toInteger xh * 2^64 + toInteger xl\n      qh = (x `div` 2^32) `div` toInteger y\n      approxQh = toInteger xh `div` (toInteger y `div` 2^32)\n      annotate | 2^32 <= approxQh = label \"high approxQh\"\n               | otherwise = label (\"deltaQh: \" ++ show (approxQh -qh))\n   in annotate $ fastF input == C.div_mod_128_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod128_64))\n\nprop_div_mod_128_64_low_y :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_div_mod_128_64_low_y = \\xh0 xl0 y0 ->\n  let y = y0 `mod` 2^63\n      xh = y - xh0 `mod` (y + 1)\n      xl = - xl0\n      input = ((toW64 xh, toW64 xl), toW64 y)\n   in fastF input == C.div_mod_128_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod128_64))\n\nprop_div_mod_128_64_high_x :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_div_mod_128_64_high_x = \\xh0 xl0 y0 ->\n  let y = y0\n      xh = - xh0\n      xl = - xl0\n      input = ((toW64 xh, toW64 xl), toW64 y)\n   in fastF input == C.div_mod_128_64 input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod128_64))\n\nassert_sha_256_iv :: Assertion\nassert_sha_256_iv = fastF () @=? C.sha_256_iv ()\n where\n  fastF = testCoreEval (specification (HashJet Sha256Iv))\n\nprop_sha_256_block :: HashElement -> HashElement -> HashElement -> Bool\nprop_sha_256_block = \\h b1 b2 -> fastF (heAsTy h, (heAsTy b1, heAsTy b2)) == C.sha_256_block (heAsTy h, (heAsTy b1, heAsTy b2))\n where\n  fastF = testCoreEval (specification (HashJet Sha256Block))\n\nassert_sha_256_ctx_8_init :: Assertion\nassert_sha_256_ctx_8_init = fastF () @=? C.sha_256_ctx_8_init ()\n where\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Init))\n\nprop_sha_256_ctx_8_add_1 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_1 = \\ctx ->\n                           forAll arbitraryW8 $ \\w8 ->\n                           let input = (ctxAsTy ctx, toW8 w8)\n                           in fastF input == C.sha_256_ctx_8_add_1 input\n where\n  arbitraryW8 :: Gen W.Word8\n  arbitraryW8 = arbitraryBoundedIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add1))\n\nprop_sha_256_ctx_8_add_2 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_2 = \\ctx ->\n                           forAll arbitraryW16 $ \\w16 ->\n                           let input = (ctxAsTy ctx, toW16 w16)\n                           in fastF input == C.sha_256_ctx_8_add_2 input\n where\n  arbitraryW16 :: Gen W.Word16\n  arbitraryW16 = arbitraryBoundedIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add2))\n\nprop_sha_256_ctx_8_add_4 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_4 = \\ctx ->\n                           forAll arbitraryW32 $ \\w32 ->\n                           let input = (ctxAsTy ctx, toW32 w32)\n                           in fastF input == C.sha_256_ctx_8_add_4 input\n where\n  arbitraryW32 :: Gen W.Word32\n  arbitraryW32 = arbitraryBoundedIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add4))\n\nprop_sha_256_ctx_8_add_8 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_8 = \\ctx ->\n                           forAll arbitraryW64 $ \\w64 ->\n                           let input = (ctxAsTy ctx, toW64 w64)\n                           in fastF input == C.sha_256_ctx_8_add_8 input\n where\n  arbitraryW64 :: Gen W.Word64\n  arbitraryW64 = arbitraryBoundedIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add8))\n\nprop_sha_256_ctx_8_add_16 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_16 = \\ctx ->\n                           forAll arbitraryW64 $ \\w64a ->\n                           forAll arbitraryW64 $ \\w64b ->\n                           let input = (ctxAsTy ctx, (toW64 w64a, toW64 w64b))\n                           in fastF input == C.sha_256_ctx_8_add_16 input\n where\n  arbitraryW64 :: Gen W.Word64\n  arbitraryW64 = arbitraryBoundedIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add16))\n\nprop_sha_256_ctx_8_add_32 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_32 = \\ctx ->\n                           forAll arbitraryW256 $ \\w256 ->\n                           let input = (ctxAsTy ctx, toW256 w256)\n                           in fastF input == C.sha_256_ctx_8_add_32 input\n where\n  arbitraryW256 :: Gen W.Word256\n  arbitraryW256 = arbitraryBoundedIntegral\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add32))\n\nprop_sha_256_ctx_8_add_64 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_64 = \\ctx ->\n                           forAll arbitraryW256 $ \\w256a ->\n                           forAll arbitraryW256 $ \\w256b ->\n                           let input = (ctxAsTy ctx, (toW256 w256a, toW256 w256b))\n                           in fastF input == C.sha_256_ctx_8_add_64 input\n where\n  arbitraryW256 :: Gen W.Word256\n  arbitraryW256 = arbitraryBoundedIntegral\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add64))\n\nprop_sha_256_ctx_8_add_128 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_128 = \\ctx ->\n                           forAll arbitraryW256 $ \\w256a ->\n                           forAll arbitraryW256 $ \\w256b ->\n                           forAll arbitraryW256 $ \\w256c ->\n                           forAll arbitraryW256 $ \\w256d ->\n                           let input = (ctxAsTy ctx, ((toW256 w256a, toW256 w256b), (toW256 w256c, toW256 w256d)))\n                           in fastF input == C.sha_256_ctx_8_add_128 input\n where\n  arbitraryW256 :: Gen W.Word256\n  arbitraryW256 = arbitraryBoundedIntegral\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add128))\n\nprop_sha_256_ctx_8_add_256 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_256 = \\ctx ->\n                           forAll arbitraryW256 $ \\w256a ->\n                           forAll arbitraryW256 $ \\w256b ->\n                           forAll arbitraryW256 $ \\w256c ->\n                           forAll arbitraryW256 $ \\w256d ->\n                           forAll arbitraryW256 $ \\w256e ->\n                           forAll arbitraryW256 $ \\w256f ->\n                           forAll arbitraryW256 $ \\w256g ->\n                           forAll arbitraryW256 $ \\w256h ->\n                           let input = (ctxAsTy ctx, (((toW256 w256a, toW256 w256b), (toW256 w256c, toW256 w256d)),\n                                                      ((toW256 w256e, toW256 w256f), (toW256 w256g, toW256 w256h))))\n                           in fastF input == C.sha_256_ctx_8_add_256 input\n where\n  arbitraryW256 :: Gen W.Word256\n  arbitraryW256 = arbitraryBoundedIntegral\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add256))\n\nprop_sha_256_ctx_8_add_512 :: Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_512 = \\ctx ->\n                           forAll arbitraryW256 $ \\w256a ->\n                           forAll arbitraryW256 $ \\w256b ->\n                           forAll arbitraryW256 $ \\w256c ->\n                           forAll arbitraryW256 $ \\w256d ->\n                           forAll arbitraryW256 $ \\w256e ->\n                           forAll arbitraryW256 $ \\w256f ->\n                           forAll arbitraryW256 $ \\w256g ->\n                           forAll arbitraryW256 $ \\w256h ->\n                           forAll arbitraryW256 $ \\w256i ->\n                           forAll arbitraryW256 $ \\w256j ->\n                           forAll arbitraryW256 $ \\w256k ->\n                           forAll arbitraryW256 $ \\w256l ->\n                           forAll arbitraryW256 $ \\w256m ->\n                           forAll arbitraryW256 $ \\w256n ->\n                           forAll arbitraryW256 $ \\w256o ->\n                           forAll arbitraryW256 $ \\w256p ->\n                           let input = (ctxAsTy ctx, ((((toW256 w256a, toW256 w256b), (toW256 w256c, toW256 w256d)),\n                                                       ((toW256 w256e, toW256 w256f), (toW256 w256g, toW256 w256h))),\n                                                      (((toW256 w256i, toW256 w256j), (toW256 w256k, toW256 w256l)),\n                                                       ((toW256 w256m, toW256 w256n), (toW256 w256o, toW256 w256p)))))\n                           in fastF input == C.sha_256_ctx_8_add_512 input\n where\n  arbitraryW256 :: Gen W.Word256\n  arbitraryW256 = arbitraryBoundedIntegral\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add512))\n\nprop_sha_256_ctx_8_add_buffer_511 :: Sha256CtxElement -> Int -> Property\nprop_sha_256_ctx_8_add_buffer_511 = \\ctx preLen ->\n                           forAll (vectorOf (preLen `mod` 512) arbitraryW8) $ \\w8s ->\n                           let input = (ctxAsTy ctx, fst $ bufferFill buffer511 (toW8 <$> w8s))\n                           in fastF input == C.sha_256_ctx_8_add_buffer_511 input\n where\n  arbitraryW8 :: Gen W.Word8\n  arbitraryW8 = arbitraryBoundedIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8AddBuffer511))\n\nprop_sha_256_ctx_8_finalize :: Sha256CtxElement -> Bool\nprop_sha_256_ctx_8_finalize = \\ctx -> fastF (ctxAsTy ctx) == C.sha_256_ctx_8_finalize (ctxAsTy ctx)\n where\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Finalize))\n\nprop_parse_lock = forAll arbitraryLock $ \\a -> fastF (toWord32 (fromIntegral a)) == C.parse_lock (toWord32 (fromIntegral a))\n where\n  fastF = testCoreEval (specification (BitcoinJet ParseLock))\n\nprop_parse_sequence = forAll arbitraryLock $ \\a -> fastF (toWord32 (fromIntegral a)) == C.parse_sequence (toWord32 (fromIntegral a))\n where\n  fastF = testCoreEval (specification (BitcoinJet ParseSequence))\n\nassert_tapdata_init :: Assertion\nassert_tapdata_init = fastF () @=? C.tapdata_init ()\n where\n  fastF = testCoreEval (specification (BitcoinJet TapdataInit))\n\nfe_unary_prop f g = \\a -> fastF (feAsTy a) == g (feAsTy a)\n where\n  fastF = testCoreEval f\n\nfe_binary_prop f g = \\a b -> fastF (feAsTy a, feAsTy b) == g (feAsTy a, feAsTy b)\n where\n  fastF = testCoreEval f\n\nprop_fe_normalize :: FieldElement -> Bool\nprop_fe_normalize = fe_unary_prop Prog.fe_normalize C.fe_normalize\n\nprop_fe_negate :: FieldElement -> Bool\nprop_fe_negate = fe_unary_prop Prog.fe_negate C.fe_negate\n\nprop_fe_add :: FieldElement -> FieldElement -> Bool\nprop_fe_add = fe_binary_prop Prog.fe_add C.fe_add\n\nprop_fe_square :: FieldElement -> Bool\nprop_fe_square = fe_unary_prop Prog.fe_square C.fe_square\n\nprop_fe_multiply :: FieldElement -> FieldElement -> Bool\nprop_fe_multiply = fe_binary_prop Prog.fe_multiply C.fe_multiply\n\nprop_fe_multiply_beta :: FieldElement -> Bool\nprop_fe_multiply_beta = fe_unary_prop Prog.fe_multiply_beta C.fe_multiply_beta\n\nprop_fe_invert :: FieldElement -> Bool\nprop_fe_invert = fe_unary_prop Prog.fe_invert C.fe_invert\n\nprop_fe_square_root :: FieldElement -> Bool\nprop_fe_square_root = fe_unary_prop Prog.fe_square_root C.fe_square_root\n\nprop_fe_is_zero :: FieldElement -> Bool\nprop_fe_is_zero = fe_unary_prop Prog.fe_is_zero C.fe_is_zero\n\nprop_fe_is_odd :: FieldElement -> Bool\nprop_fe_is_odd = fe_unary_prop Prog.fe_is_odd C.fe_is_odd\n\nscalar_unary_prop f g = \\a -> fastF (scalarAsTy a) == g (scalarAsTy a)\n where\n  fastF = testCoreEval f\n\nscalar_binary_prop f g = \\a b -> fastF (scalarAsTy a, scalarAsTy b) == g (scalarAsTy a, scalarAsTy b)\n where\n  fastF = testCoreEval f\n\nprop_scalar_normalize :: ScalarElement -> Bool\nprop_scalar_normalize = scalar_unary_prop Prog.scalar_normalize C.scalar_normalize\n\nprop_scalar_negate :: ScalarElement -> Bool\nprop_scalar_negate = scalar_unary_prop Prog.scalar_negate C.scalar_negate\n\nprop_scalar_add :: ScalarElement -> ScalarElement -> Bool\nprop_scalar_add = scalar_binary_prop Prog.scalar_add C.scalar_add\n\nprop_scalar_square :: ScalarElement -> Bool\nprop_scalar_square = scalar_unary_prop Prog.scalar_square C.scalar_square\n\nprop_scalar_multiply :: ScalarElement -> ScalarElement -> Bool\nprop_scalar_multiply = scalar_binary_prop Prog.scalar_multiply C.scalar_multiply\n\nprop_scalar_multiply_lambda :: ScalarElement -> Bool\nprop_scalar_multiply_lambda = scalar_unary_prop Prog.scalar_multiply_lambda C.scalar_multiply_lambda\n\nprop_scalar_invert :: ScalarElement -> Bool\nprop_scalar_invert = scalar_unary_prop Prog.scalar_invert C.scalar_invert\n\nprop_scalar_is_zero :: ScalarElement -> Bool\nprop_scalar_is_zero = scalar_unary_prop Prog.scalar_is_zero C.scalar_is_zero\n\nassert_gej_infinity :: Assertion\nassert_gej_infinity =  fast_gej_infinity () @=? C.gej_infinity ()\n where\n  fast_gej_infinity = testCoreEval Prog.gej_infinity\n\nprop_gej_rescale :: GroupElementJacobian -> FieldElement -> Bool\nprop_gej_rescale = \\a c -> fast_gej_rescale (gejAsTy a, feAsTy c) == C.gej_rescale (gejAsTy a, feAsTy c)\n where\n  fast_gej_rescale = testCoreEval Prog.gej_rescale\n\nprop_gej_rescale_inf :: FieldElement -> Property\nprop_gej_rescale_inf c = forAll gen_inf $ flip prop_gej_rescale c\n\nprop_gej_normalize :: GroupElementJacobian -> Bool\nprop_gej_normalize = \\a -> fast_gej_normalize (gejAsTy a) == C.gej_normalize (gejAsTy a)\n where\n  fast_gej_normalize = testCoreEval Prog.gej_normalize\n\nprop_gej_normalize_inf :: Property\nprop_gej_normalize_inf = forAll gen_inf $ prop_gej_normalize\n\nprop_gej_negate :: GroupElementJacobian -> Bool\nprop_gej_negate = \\a -> fast_gej_negate (gejAsTy a) == C.gej_negate (gejAsTy a)\n where\n  fast_gej_negate = testCoreEval Prog.gej_negate\n\nprop_gej_negate_inf :: Property\nprop_gej_negate_inf = forAll gen_inf $ prop_gej_negate\n\nprop_ge_negate :: GroupElement -> Bool\nprop_ge_negate = \\a -> fast_ge_negate (geAsTy a) == C.ge_negate (geAsTy a)\n where\n  fast_ge_negate = testCoreEval Prog.ge_negate\n\nprop_gej_double :: GroupElementJacobian -> Bool\nprop_gej_double = \\a -> fast_gej_double (gejAsTy a) == C.gej_double (gejAsTy a)\n where\n  fast_gej_double = testCoreEval Prog.gej_double\n\nprop_gej_double_inf :: Property\nprop_gej_double_inf = forAll gen_inf $ prop_gej_double\n\nprop_gej_double_zero :: FieldElement -> FieldElement -> Bool\nprop_gej_double_zero x z = prop_gej_double a\n where\n  x' = feAsSpec x\n  z' = feAsSpec z\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ x')\n                           (FieldElement . Spec.fe_pack $ Spec.fe_zero)\n                           (FieldElement . Spec.fe_pack $ z')\n\nprop_gej_add :: GroupElementJacobian -> GroupElementJacobian -> Bool\nprop_gej_add = \\a b -> fast_gej_add (gejAsTy a, gejAsTy b) == C.gej_add (gejAsTy a, gejAsTy b)\n where\n  fast_gej_add = testCoreEval Prog.gej_add\n\nprop_gej_add_double :: FieldElement -> GroupElementJacobian -> Bool\nprop_gej_add_double z b@(GroupElementJacobian bx by bz) = prop_gej_add a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  bz' = feAsSpec bz\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack $ by' .*. z' .^. 3)\n                           (FieldElement . Spec.fe_pack $ bz' .*. z')\n\nprop_gej_add_opp :: FieldElement -> GroupElementJacobian -> Bool\nprop_gej_add_opp z b@(GroupElementJacobian bx by bz) = prop_gej_add a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  bz' = feAsSpec bz\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack . Spec.fe_negate $ by' .*. z' .^. 3)\n                           (FieldElement . Spec.fe_pack $ bz' .*. z')\n\nprop_gej_add_infl b = forAll gen_inf $ \\a -> prop_gej_add a b\nprop_gej_add_infr a = forAll gen_inf $ \\b -> prop_gej_add a b\n\nprop_gej_ge_add_ex :: GroupElementJacobian -> GroupElement -> Bool\nprop_gej_ge_add_ex = \\a b -> fast_gej_ge_add_ex (gejAsTy a, geAsTy b) == C.gej_ge_add_ex (gejAsTy a, geAsTy b)\n where\n  fast_gej_ge_add_ex = testCoreEval Prog.gej_ge_add_ex\n\nprop_gej_ge_add_ex_double z b@(GroupElement bx by) = prop_gej_ge_add_ex a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack $ by' .*. z' .^. 3)\n                           z\nprop_gej_ge_add_ex_opp z b@(GroupElement bx by) = prop_gej_ge_add_ex a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack . Spec.fe_negate $ by' .*. z' .^. 3)\n                           z\nprop_gej_ge_add_ex_inf b = forAll gen_inf $ \\a -> prop_gej_ge_add_ex a b\n\nprop_gej_ge_add :: GroupElementJacobian -> GroupElement -> Bool\nprop_gej_ge_add = \\a b -> fast_gej_ge_add (gejAsTy a, geAsTy b) == C.gej_ge_add (gejAsTy a, geAsTy b)\n where\n  fast_gej_ge_add = testCoreEval Prog.gej_ge_add\n\nprop_gej_is_infinity :: GroupElementJacobian -> Bool\nprop_gej_is_infinity = \\a -> fast_gej_is_infinity (gejAsTy a) == C.gej_is_infinity (gejAsTy a)\n where\n  fast_gej_is_infinity = testCoreEval Prog.gej_is_infinity\n\nprop_gej_equiv :: GroupElementJacobian -> GroupElementJacobian -> Bool\nprop_gej_equiv = \\a b -> fast_gej_equiv (gejAsTy a, gejAsTy b) == C.gej_equiv (gejAsTy a, gejAsTy b)\n where\n  fast_gej_equiv = testCoreEval Prog.gej_equiv\n\nprop_gej_equiv_infl b = forAll gen_inf $ \\a -> prop_gej_equiv a b\nprop_gej_equiv_infr a = forAll gen_inf $ \\b -> prop_gej_equiv a b\nprop_gej_equiv_inf = forAll gen_inf $ \\a -> forAll gen_inf $ \\b -> prop_gej_equiv a b\nprop_gej_equiv_true = \\a c ->\n   let b = toGEJ $ Spec.gej_rescale (gejAsSpec a) (feAsSpec c)\n   in fast_gej_equiv (gejAsTy a, b) == C.gej_equiv (gejAsTy a, b)\n where\n  fast_gej_equiv = testCoreEval Prog.gej_equiv\n\nprop_gej_ge_equiv :: GroupElementJacobian -> GroupElement -> Bool\nprop_gej_ge_equiv = \\a b -> fast_gej_ge_equiv (gejAsTy a, geAsTy b) == C.gej_ge_equiv (gejAsTy a, geAsTy b)\n where\n  fast_gej_ge_equiv = testCoreEval Prog.gej_ge_equiv\n\nprop_gej_ge_equiv_inf b = forAll gen_inf $ \\a -> prop_gej_ge_equiv a b\nprop_gej_ge_equiv_true = \\a ->\n   maybe (property Discard)\n   (\\b -> property $ fast_gej_ge_equiv (gejAsTy a, b) == C.gej_ge_equiv (gejAsTy a, b))\n   (toGE <$> Spec.gej_normalize (gejAsSpec a))\n where\n  fast_gej_ge_equiv = testCoreEval Prog.gej_ge_equiv\n\nprop_gej_x_equiv :: FieldElement -> GroupElementJacobian -> Bool\nprop_gej_x_equiv = \\a b -> fast_gej_x_equiv (feAsTy a, gejAsTy b) == C.gej_x_equiv (feAsTy a, gejAsTy b)\n where\n  fast_gej_x_equiv = testCoreEval Prog.gej_x_equiv\n\nprop_gej_x_equiv_inf x0 = forAll gen_inf $ prop_gej_x_equiv x0\nprop_gej_x_equiv_true y z x0 = prop_gej_x_equiv x0 a\n  where\n   z' = feAsSpec z\n   x0' = feAsSpec x0\n   a = GroupElementJacobian (FieldElement . Spec.fe_pack $ x0' .*. z' .^. 2) y z\n\nprop_gej_x_equiv_inf_zero = prop_gej_x_equiv_inf (FieldElement 0)\n\nprop_gej_y_is_odd :: GroupElementJacobian -> Bool\nprop_gej_y_is_odd = \\a -> fast_gej_y_is_odd (gejAsTy a) == C.gej_y_is_odd (gejAsTy a)\n where\n  fast_gej_y_is_odd = testCoreEval Prog.gej_y_is_odd\n\nprop_gej_is_on_curve :: GroupElementJacobian -> Bool\nprop_gej_is_on_curve = \\a -> fast_gej_is_on_curve (gejAsTy a) == C.gej_is_on_curve (gejAsTy a)\n where\n  fast_gej_is_on_curve = testCoreEval Prog.gej_is_on_curve\n\nprop_ge_is_on_curve :: GroupElement -> Bool\n\nprop_gej_is_on_curve_inf = forAll gen_inf prop_gej_is_on_curve\nprop_gej_is_on_curve_inf_half = forAll gen_half_curve_inf prop_gej_is_on_curve\nprop_gej_is_on_curve_half = forAll gen_half_curve_jacobian prop_gej_is_on_curve\n\nprop_ge_is_on_curve = \\a -> fast_ge_is_on_curve (geAsTy a) == C.ge_is_on_curve (geAsTy a)\n where\n  fast_ge_is_on_curve = testCoreEval Prog.ge_is_on_curve\n\nprop_ge_is_on_curve_half = forAll gen_half_curve prop_ge_is_on_curve\n\nprop_generate = \\ng -> fast_generate (scalarAsTy ng)\n                    == C.generate (scalarAsTy ng)\n where\n  fast_generate = testCoreEval Prog.generate\n\nprop_off_curve_scale = \\na a -> fast_off_curve_scale (scalarAsTy na, gejAsTy a)\n                   == C.off_curve_scale (scalarAsTy na, gejAsTy a)\n where\n  fast_off_curve_scale = testCoreEval Prog.off_curve_scale\nprop_off_curve_scale_0 a = prop_off_curve_scale na a\n where\n  na = ScalarElement 0\nprop_off_curve_scale_inf na = forAll gen_inf $ \\a -> prop_off_curve_scale na a\n\nprop_scale :: ScalarElement -> GroupElementJacobian -> Bool\nprop_scale = \\na a -> safe_fast_scale (scalarAsTy na, gejAsTy a)\n                        == C.scale (scalarAsTy na, gejAsTy a)\n where\n  safe_fast_scale = testCoreEval Prog.scale\nprop_scale_0 a = prop_scale na a\n where\n  na = ScalarElement 0\n\nprop_scale_inf na = forAll gen_inf $ \\a -> prop_scale na a\n\nprop_scale_half na = forAll gen_half_curve_jacobian $ \\a -> prop_scale na a\n\nprop_scale_half_inf na = forAll gen_half_curve_inf $ \\a -> prop_scale na a\n\nprop_scale_half_0 = forAll gen_half_curve_inf $ \\a -> prop_scale na a\n where\n  na = ScalarElement 0\n\nprop_off_curve_linear_combination_1 :: ScalarElement -> GroupElementJacobian -> ScalarElement -> Bool\nprop_off_curve_linear_combination_1 = \\na a ng -> fast_off_curve_linear_combination_1 ((scalarAsTy na, gejAsTy a), scalarAsTy ng)\n                                     == C.off_curve_linear_combination_1 ((scalarAsTy na, gejAsTy a), scalarAsTy ng)\n where\n  fast_off_curve_linear_combination_1 = testCoreEval Prog.off_curve_linear_combination_1\nprop_off_curve_linear_combination_1_0 a ng = prop_off_curve_linear_combination_1 na a ng\n where\n  na = ScalarElement 0\n\nprop_off_curve_linear_combination_1_inf na ng = forAll gen_inf $ \\a -> prop_off_curve_linear_combination_1 na a ng\n\n-- :TODO: expand test coverage on low-order (off-curve) points.\n-- This particular test case will fail if the gej_double_var function in the C implementation isn't \"fixed\" to handle\n-- setting the infinity flag for off-curve points of order 2.\nassert_off_curve_linear_combination_1_order_6 :: Assertion\nassert_off_curve_linear_combination_1_order_6 = True @=? prop_off_curve_linear_combination_1 na a ng\n where\n  na = ScalarElement 6\n  a = GroupElementJacobian (FieldElement 106586213356003376052770626926523423124273824193112332847656463919061591657353)\n                           (FieldElement 26101920679609057376888884124959740524626979187904654689991505285331895977061)\n                           (FieldElement 1)\n  ng = ScalarElement 1\n\nprop_linear_combination_1 :: ScalarElement -> GroupElementJacobian -> ScalarElement -> Bool\nprop_linear_combination_1 = \\na a ng -> safe_fast_linear_combination_1 ((scalarAsTy na, gejAsTy a), scalarAsTy ng)\n                                     == C.linear_combination_1 ((scalarAsTy na, gejAsTy a), scalarAsTy ng)\n where\n  safe_fast_linear_combination_1 = testCoreEval Prog.linear_combination_1\nprop_linear_combination_1_0 a ng = prop_linear_combination_1 na a ng\n where\n  na = ScalarElement 0\n\nprop_linear_combination_1_inf na ng = forAll gen_inf $ \\a -> prop_linear_combination_1 na a ng\n\nprop_linear_combination_1_half na ng = forAll gen_half_curve_jacobian $ \\a -> prop_linear_combination_1 na a ng\n\nprop_linear_combination_1_half_inf na ng = forAll gen_half_curve_inf $ \\a -> prop_linear_combination_1 na a ng\n\nprop_linear_combination_1_half_0 ng = forAll gen_half_curve_inf $ \\a -> prop_linear_combination_1 na a ng\n where\n  na = ScalarElement 0\n\nprop_linear_verify_1 = \\na a ng r -> fast_linear_verify_1 (((scalarAsTy na, geAsTy a), scalarAsTy ng), geAsTy r)\n                                 == C.linear_verify_1 (((scalarAsTy na, geAsTy a), scalarAsTy ng), geAsTy r)\n where\n  fast_linear_verify_1 = testCoreEval Prog.linear_verify_1\n\nprop_linear_verify_1_0 a ng = prop_linear_verify_1 na a ng\n where\n  na = ScalarElement 0\n\nprop_linear_verify_1_true_half na ng = forAll gen_half_curve $ \\a -> prop_linear_verify_1_true na a ng\n where\n  prop_linear_verify_1_true na a ng | Just (GE rx' ry') <- r' = property $ prop_linear_verify_1 na a ng (mkGE rx' ry')\n                                    | otherwise = property Discard\n   where\n    na' = scalarAsSpec na\n    a' = geAsSpec a\n    ng' = scalarAsSpec ng\n    toGEJ (GE x y) = (GEJ x y Spec.fe_one)\n    r' = Spec.gej_normalize $ Spec.off_curve_linear_combination [(na', toGEJ a')] ng'\n    mkGE rx' ry' = GroupElement (FieldElement (Spec.fe_pack rx')) (FieldElement (Spec.fe_pack ry'))\n\nprop_point_verify_1 = \\na a ng r -> fast_point_verify_1 (((scalarAsTy na, pointAsTy a), scalarAsTy ng), pointAsTy r)\n                                 == C.point_verify_1 (((scalarAsTy na, pointAsTy a), scalarAsTy ng), pointAsTy r)\n where\n  fast_point_verify_1 = testCoreEval Prog.point_verify_1\n\nprop_point_verify_1_true na p ng | Just a' <- Spec.decompress p' = property $ prop a'\n                                 | otherwise = property Discard\n where\n  na' = scalarAsSpec na\n  ng' = scalarAsSpec ng\n  p' = pointAsSpec p\n  prop a' = prop_point_verify_1 na p ng r\n   where\n    toGEJ (GE x y) = (GEJ x y Spec.fe_one)\n    Just (GE rx' ry') = Spec.gej_normalize $ Spec.off_curve_linear_combination [(na', toGEJ a')] ng'\n    r = PointElement (Spec.fe_is_odd ry') (FieldElement (Spec.fe_pack rx'))\n\nprop_decompress = \\a -> fast_decompress (pointAsTy a)\n                     == C.decompress (pointAsTy a)\n where\n  fast_decompress = testCoreEval Prog.decompress\n\nprop_bip_0340_verify = \\pk m sig -> fast_bip_0340_verify ((pk, m), sig)\n                                 == C.bip_0340_verify ((pk, m), sig)\n where\n  fast_bip_0340_verify = testCoreEval Prog.bip_0340_verify\n\nassert_bip_0340_verify_vector tv = True @=? prop_bip_0340_verify pk m sig\n where\n  ((pk, m), sig) = (bip0340TestAsTy tv)\n\ncase_bip_0340_verify_vector n tv = testCase name (assert_bip_0340_verify_vector tv)\n where\n  name = \"bip_0340_vector_\" ++ show n\n\nprop_check_sig_verify :: FieldElement -> HashElement -> HashElement -> FieldElement -> ScalarElement -> Bool\nprop_check_sig_verify = \\pk m1 m2 r s ->\n   let input = ((feAsTy pk, (heAsTy m1, heAsTy m2)), (feAsTy r, scalarAsTy s))\n   in fast_check_sig_verify input == C.check_sig_verify input\n where\n  fast_check_sig_verify = testCoreEval (specification (SignatureJet CheckSigVerify))\n\nprop_check_sig_verify_true :: HashElement -> HashElement -> Property\nprop_check_sig_verify_true = \\m1 m2 ->\n   let msg = sigHash (heAsSpec m1) (heAsSpec m2)\n   in forAll (genSignature msg) $ \\(PubKey pk, Sig r s) ->\n     let input = ((toW256 pk, (heAsTy m1, heAsTy m2)), (toW256 r, toW256 s))\n     in Just () == C.check_sig_verify input\n     && Just () == fast_check_sig_verify input\n where\n  toW256 = toWord256 . fromIntegral\n  fast_check_sig_verify = testCoreEval (specification (SignatureJet CheckSigVerify))\n\nprop_swu :: FieldElement -> Bool\nprop_swu = \\a -> let input = feAsTy a in fastF input == C.swu input\n where\n  fastF = testCoreEval (specification (Secp256k1Jet Swu))\n\nprop_hash_to_curve :: HashElement -> Bool\nprop_hash_to_curve = \\a -> let input = heAsTy a in fastF input == C.hash_to_curve input\n where\n  fastF = testCoreEval (specification (Secp256k1Jet HashToCurve))\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Programs/Example.hs",
    "content": "-- A set of example Simplicity programs that can be used for tests, but otherwise are not expected to be useful.\nmodule Simplicity.Programs.Example\n  ( fib\n  ) where\n\nimport Prelude hiding (drop)\nimport Simplicity.Programs.Arith as Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.Generic\nimport Simplicity.Programs.Loop\nimport Simplicity.Term.Core\n\n-- | An example program that uses disconnect via the 'loop' construction.\n-- @'fib' (3,(1,0))@ will compute the 2^4, or 16th Fibonacci number\nfib :: (Delegate term, Assert term) => term (Word2, (Word16, Word16)) Word16\nfib = loopDepth 4 (((unit >>> Arith.zero word2) &&& oh >>> eq) &&& ((oh &&& (unit >>> Arith.one word2) >>> Arith.subtract word2 >>> ih) &&& drop (iden &&& iden >>> step)) >>> cond (injr ioh) (injl iden))\n where\n  add = Arith.add word16 >>> ih;\n  mul = Arith.multiply word16 >>> ih;\n  step = ((ooh &&& ioh >>> mul) &&& (ooh &&& iih >>> mul)) &&& ((oih &&& ioh >>> mul) &&& (oih &&& iih >>> mul)) >>> (ooh &&& (ioh &&& oih >>> add) >>> add) &&& (ooh &&& iih >>> add)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Programs/Tests.hs",
    "content": "-- This module tests the Simplicity programs on arbitrary inputs.\nmodule Simplicity.Programs.Tests (tests) where\n\nimport Prelude hiding (sqrt, all)\nimport Control.Arrow ((***), right)\nimport Data.Bits ((.|.))\nimport qualified Data.Bits as W\nimport Data.ByteString (pack)\nimport Data.ByteString.Short (toShort)\nimport qualified Data.List as L\nimport Lens.Family2 ((^..), allOf, over, zipWithOf)\nimport Lens.Family2.Stock (backwards, both_)\n\nimport Simplicity.Arbitrary\nimport Simplicity.Bip0340\nimport Simplicity.CoreJets\nimport Simplicity.Digest\nimport Simplicity.Elements.Arbitrary (arbitraryLock)\nimport Simplicity.LibSecp256k1.Schnorr\nimport Simplicity.LibSecp256k1.Spec ((.+.), (.*.), (.^.))\nimport qualified Simplicity.LibSecp256k1.Spec as Spec\nimport Simplicity.MerkleRoot\nimport qualified Simplicity.Programs.Arith as Arith\nimport Simplicity.Programs.Bit\nimport Simplicity.Programs.LibSecp256k1.Lib\nimport Simplicity.Programs.Sha256.Lib\nimport Simplicity.Programs.Word\nimport Simplicity.Term.Core\nimport Simplicity.TestCoreEval\nimport Simplicity.Ty.Arbitrary\nimport Simplicity.Ty.Word as Ty\nimport qualified Simplicity.Word as W\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit ((@=?), Assertion, testCase)\nimport Test.Tasty.QuickCheck (Arbitrary(..), Discard(Discard), Gen, Property\n                             , arbitraryBoundedIntegral, choose, elements, forAll, resize, sized, vectorOf\n                             , property\n                             , testProperty, withMaxSuccess\n                             , label\n                             )\n\ntoW256 :: W.Word256 -> Word256\ntoW256 = toWord256 . fromIntegral\n\ntoW32 :: W.Word32 -> Word32\ntoW32 = toWord32 . fromIntegral\n\ntoW16 :: W.Word16 -> Word16\ntoW16 = toWord16 . fromIntegral\n\n-- This collects the tests for the various Simplicity programs.\ntests :: TestTree\ntests = testGroup \"Programs\"\n      [ testGroup \"Word\"\n        [ testCase \"verify\" assert_verify\n        , testCase     \"low_1\" assert_low_1\n        , testCase     \"low_8\" assert_low_8\n        , testCase     \"low_16\" assert_low_16\n        , testCase     \"low_32\" assert_low_32\n        , testCase     \"low_64\" assert_low_64\n        , testCase     \"high_1\" assert_high_1\n        , testCase     \"high_8\" assert_high_8\n        , testCase     \"high_16\" assert_high_16\n        , testCase     \"high_32\" assert_high_32\n        , testCase     \"high_64\" assert_high_64\n        , testProperty \"complement_1\"  prop_complement_1\n        , testProperty \"complement_8\"  prop_complement_8\n        , testProperty \"complement_16\"  prop_complement_16\n        , testProperty \"complement_32\"  prop_complement_32\n        , testProperty \"complement_64\"  prop_complement_64\n        , testProperty \"and_1\"  prop_and_1\n        , testProperty \"and_8\"  prop_and_8\n        , testProperty \"and_16\"  prop_and_16\n        , testProperty \"and_32\"  prop_and_32\n        , testProperty \"and_64\"  prop_and_64\n        , testProperty \"or_1\"  prop_or_1\n        , testProperty \"or_8\"  prop_or_8\n        , testProperty \"or_16\"  prop_or_16\n        , testProperty \"or_32\"  prop_or_32\n        , testProperty \"or_64\"  prop_or_64\n        , testProperty \"xor_1\"  prop_xor_1\n        , testProperty \"xor_8\"  prop_xor_8\n        , testProperty \"xor_16\"  prop_xor_16\n        , testProperty \"xor_32\"  prop_xor_32\n        , testProperty \"xor_64\"  prop_xor_64\n        , testProperty \"maj_1\"  prop_maj_1\n        , testProperty \"maj_8\"  prop_maj_8\n        , testProperty \"maj_16\"  prop_maj_16\n        , testProperty \"maj_32\"  prop_maj_32\n        , testProperty \"maj_64\"  prop_maj_64\n        , testProperty \"xor_xor_1\"  prop_xor_xor_1\n        , testProperty \"xor_xor_8\"  prop_xor_xor_8\n        , testProperty \"xor_xor_16\"  prop_xor_xor_16\n        , testProperty \"xor_xor_32\"  prop_xor_xor_32\n        , testProperty \"xor_xor_64\"  prop_xor_xor_64\n        , testProperty \"ch_1\"  prop_ch_1\n        , testProperty \"ch_8\"  prop_ch_8\n        , testProperty \"ch_16\"  prop_ch_16\n        , testProperty \"ch_32\"  prop_ch_32\n        , testProperty \"ch_64\"  prop_ch_64\n        , testProperty \"some_1\"  prop_some_1\n        , testProperty \"some_8\"  prop_some_8\n        , testProperty \"some_16\"  prop_some_16\n        , testProperty \"some_32\"  prop_some_32\n        , testProperty \"some_64\"  prop_some_64\n        , testProperty \"all_8\"  prop_all_8\n        , testProperty \"all_16\"  prop_all_16\n        , testProperty \"all_32\"  prop_all_32\n        , testProperty \"all_64\"  prop_all_64\n        , testProperty \"eq_8\"  prop_eq_8\n        , testProperty \"eq_16\"  prop_eq_16\n        , testProperty \"eq_32\"  prop_eq_32\n        , testProperty \"eq_64\"  prop_eq_64\n        , testProperty \"eq_256\"  prop_eq_256\n        , testProperty \"eq_diag_8\"  prop_eq_diag_8\n        , testProperty \"eq_diag_16\"  prop_eq_diag_16\n        , testProperty \"eq_diag_32\"  prop_eq_diag_32\n        , testProperty \"eq_diag_64\"  prop_eq_diag_64\n        , testProperty \"eq_diag_256\"  prop_eq_diag_256\n        , testProperty \"full_left_shift_8_1\"  prop_full_left_shift_8_1\n        , testProperty \"full_left_shift_8_2\"  prop_full_left_shift_8_2\n        , testProperty \"full_left_shift_8_4\"  prop_full_left_shift_8_4\n        , testProperty \"full_left_shift_16_1\"  prop_full_left_shift_16_1\n        , testProperty \"full_left_shift_16_2\"  prop_full_left_shift_16_2\n        , testProperty \"full_left_shift_16_4\"  prop_full_left_shift_16_4\n        , testProperty \"full_left_shift_16_8\"  prop_full_left_shift_16_8\n        , testProperty \"full_left_shift_32_1\"  prop_full_left_shift_32_1\n        , testProperty \"full_left_shift_32_2\"  prop_full_left_shift_32_2\n        , testProperty \"full_left_shift_32_4\"  prop_full_left_shift_32_4\n        , testProperty \"full_left_shift_32_8\"  prop_full_left_shift_32_8\n        , testProperty \"full_left_shift_32_16\"  prop_full_left_shift_32_16\n        , testProperty \"full_left_shift_64_1\"  prop_full_left_shift_64_1\n        , testProperty \"full_left_shift_64_2\"  prop_full_left_shift_64_2\n        , testProperty \"full_left_shift_64_4\"  prop_full_left_shift_64_4\n        , testProperty \"full_left_shift_64_8\"  prop_full_left_shift_64_8\n        , testProperty \"full_left_shift_64_16\"  prop_full_left_shift_64_16\n        , testProperty \"full_left_shift_64_32\"  prop_full_left_shift_64_32\n        , testProperty \"full_right_shift_8_1\"  prop_full_right_shift_8_1\n        , testProperty \"full_right_shift_8_2\"  prop_full_right_shift_8_2\n        , testProperty \"full_right_shift_8_4\"  prop_full_right_shift_8_4\n        , testProperty \"full_right_shift_16_1\"  prop_full_right_shift_16_1\n        , testProperty \"full_right_shift_16_2\"  prop_full_right_shift_16_2\n        , testProperty \"full_right_shift_16_4\"  prop_full_right_shift_16_4\n        , testProperty \"full_right_shift_16_8\"  prop_full_right_shift_16_8\n        , testProperty \"full_right_shift_32_1\"  prop_full_right_shift_32_1\n        , testProperty \"full_right_shift_32_2\"  prop_full_right_shift_32_2\n        , testProperty \"full_right_shift_32_4\"  prop_full_right_shift_32_4\n        , testProperty \"full_right_shift_32_8\"  prop_full_right_shift_32_8\n        , testProperty \"full_right_shift_32_16\"  prop_full_right_shift_32_16\n        , testProperty \"full_right_shift_64_1\"  prop_full_right_shift_64_1\n        , testProperty \"full_right_shift_64_2\"  prop_full_right_shift_64_2\n        , testProperty \"full_right_shift_64_4\"  prop_full_right_shift_64_4\n        , testProperty \"full_right_shift_64_8\"  prop_full_right_shift_64_8\n        , testProperty \"full_right_shift_64_16\"  prop_full_right_shift_64_16\n        , testProperty \"full_right_shift_64_32\"  prop_full_right_shift_64_32\n        , testProperty \"leftmost_8_1\"  prop_leftmost_8_1\n        , testProperty \"leftmost_8_2\"  prop_leftmost_8_2\n        , testProperty \"leftmost_8_4\"  prop_leftmost_8_4\n        , testProperty \"leftmost_16_1\"  prop_leftmost_16_1\n        , testProperty \"leftmost_16_2\"  prop_leftmost_16_2\n        , testProperty \"leftmost_16_4\"  prop_leftmost_16_4\n        , testProperty \"leftmost_16_8\"  prop_leftmost_16_8\n        , testProperty \"leftmost_32_1\"  prop_leftmost_32_1\n        , testProperty \"leftmost_32_2\"  prop_leftmost_32_2\n        , testProperty \"leftmost_32_4\"  prop_leftmost_32_4\n        , testProperty \"leftmost_32_8\"  prop_leftmost_32_8\n        , testProperty \"leftmost_32_16\"  prop_leftmost_32_16\n        , testProperty \"leftmost_64_1\"  prop_leftmost_64_1\n        , testProperty \"leftmost_64_2\"  prop_leftmost_64_2\n        , testProperty \"leftmost_64_4\"  prop_leftmost_64_4\n        , testProperty \"leftmost_64_8\"  prop_leftmost_64_8\n        , testProperty \"leftmost_64_16\"  prop_leftmost_64_16\n        , testProperty \"leftmost_64_32\"  prop_leftmost_64_32\n        , testProperty \"rightmost_8_1\"  prop_rightmost_8_1\n        , testProperty \"rightmost_8_2\"  prop_rightmost_8_2\n        , testProperty \"rightmost_8_4\"  prop_rightmost_8_4\n        , testProperty \"rightmost_16_1\"  prop_rightmost_16_1\n        , testProperty \"rightmost_16_2\"  prop_rightmost_16_2\n        , testProperty \"rightmost_16_4\"  prop_rightmost_16_4\n        , testProperty \"rightmost_16_8\"  prop_rightmost_16_8\n        , testProperty \"rightmost_32_1\"  prop_rightmost_32_1\n        , testProperty \"rightmost_32_2\"  prop_rightmost_32_2\n        , testProperty \"rightmost_32_4\"  prop_rightmost_32_4\n        , testProperty \"rightmost_32_8\"  prop_rightmost_32_8\n        , testProperty \"rightmost_32_16\"  prop_rightmost_32_16\n        , testProperty \"rightmost_64_1\"  prop_rightmost_64_1\n        , testProperty \"rightmost_64_2\"  prop_rightmost_64_2\n        , testProperty \"rightmost_64_4\"  prop_rightmost_64_4\n        , testProperty \"rightmost_64_8\"  prop_rightmost_64_8\n        , testProperty \"rightmost_64_16\"  prop_rightmost_64_16\n        , testProperty \"rightmost_64_32\"  prop_rightmost_64_32\n        , testProperty \"left_pad_low_1_8\" prop_left_pad_low_1_8\n        , testProperty \"left_pad_low_1_16\" prop_left_pad_low_1_16\n        , testProperty \"left_pad_low_8_16\" prop_left_pad_low_8_16\n        , testProperty \"left_pad_low_1_32\" prop_left_pad_low_1_32\n        , testProperty \"left_pad_low_8_32\" prop_left_pad_low_8_32\n        , testProperty \"left_pad_low_16_32\" prop_left_pad_low_16_32\n        , testProperty \"left_pad_low_1_64\" prop_left_pad_low_1_64\n        , testProperty \"left_pad_low_8_64\" prop_left_pad_low_8_64\n        , testProperty \"left_pad_low_16_64\" prop_left_pad_low_16_64\n        , testProperty \"left_pad_low_32_64\" prop_left_pad_low_32_64\n        , testProperty \"left_pad_high_1_8\" prop_left_pad_high_1_8\n        , testProperty \"left_pad_high_1_16\" prop_left_pad_high_1_16\n        , testProperty \"left_pad_high_8_16\" prop_left_pad_high_8_16\n        , testProperty \"left_pad_high_1_32\" prop_left_pad_high_1_32\n        , testProperty \"left_pad_high_8_32\" prop_left_pad_high_8_32\n        , testProperty \"left_pad_high_16_32\" prop_left_pad_high_16_32\n        , testProperty \"left_pad_high_1_64\" prop_left_pad_high_1_64\n        , testProperty \"left_pad_high_8_64\" prop_left_pad_high_8_64\n        , testProperty \"left_pad_high_16_64\" prop_left_pad_high_16_64\n        , testProperty \"left_pad_high_32_64\" prop_left_pad_high_32_64\n        , testProperty \"left_extend_1_8\" prop_left_extend_1_8\n        , testProperty \"left_extend_1_16\" prop_left_extend_1_16\n        , testProperty \"left_extend_8_16\" prop_left_extend_8_16\n        , testProperty \"left_extend_1_32\" prop_left_extend_1_32\n        , testProperty \"left_extend_8_32\" prop_left_extend_8_32\n        , testProperty \"left_extend_16_32\" prop_left_extend_16_32\n        , testProperty \"left_extend_1_64\" prop_left_extend_1_64\n        , testProperty \"left_extend_8_64\" prop_left_extend_8_64\n        , testProperty \"left_extend_16_64\" prop_left_extend_16_64\n        , testProperty \"left_extend_32_64\" prop_left_extend_32_64\n        , testProperty \"right_pad_low_1_8\" prop_right_pad_low_1_8\n        , testProperty \"right_pad_low_1_16\" prop_right_pad_low_1_16\n        , testProperty \"right_pad_low_8_16\" prop_right_pad_low_8_16\n        , testProperty \"right_pad_low_1_32\" prop_right_pad_low_1_32\n        , testProperty \"right_pad_low_8_32\" prop_right_pad_low_8_32\n        , testProperty \"right_pad_low_16_32\" prop_right_pad_low_16_32\n        , testProperty \"right_pad_low_1_64\" prop_right_pad_low_1_64\n        , testProperty \"right_pad_low_8_64\" prop_right_pad_low_8_64\n        , testProperty \"right_pad_low_16_64\" prop_right_pad_low_16_64\n        , testProperty \"right_pad_low_32_64\" prop_right_pad_low_32_64\n        , testProperty \"right_pad_high_1_8\" prop_right_pad_high_1_8\n        , testProperty \"right_pad_high_1_16\" prop_right_pad_high_1_16\n        , testProperty \"right_pad_high_8_16\" prop_right_pad_high_8_16\n        , testProperty \"right_pad_high_1_32\" prop_right_pad_high_1_32\n        , testProperty \"right_pad_high_8_32\" prop_right_pad_high_8_32\n        , testProperty \"right_pad_high_16_32\" prop_right_pad_high_16_32\n        , testProperty \"right_pad_high_1_64\" prop_right_pad_high_1_64\n        , testProperty \"right_pad_high_8_64\" prop_right_pad_high_8_64\n        , testProperty \"right_pad_high_16_64\" prop_right_pad_high_16_64\n        , testProperty \"right_pad_high_32_64\" prop_right_pad_high_32_64\n        , testProperty \"right_extend_8_16\" prop_right_extend_8_16\n        , testProperty \"right_extend_8_32\" prop_right_extend_8_32\n        , testProperty \"right_extend_16_32\" prop_right_extend_16_32\n        , testProperty \"right_extend_8_64\" prop_right_extend_8_64\n        , testProperty \"right_extend_16_64\" prop_right_extend_16_64\n        , testProperty \"right_extend_32_64\" prop_right_extend_32_64\n        , testProperty \"left_shift_with_8\"  prop_left_shift_with_8\n        , testProperty \"left_shift_with_16\"  prop_left_shift_with_16\n        , testProperty \"left_shift_with_32\"  prop_left_shift_with_32\n        , testProperty \"left_shift_with_64\"  prop_left_shift_with_64\n        , testProperty \"left_shift_8\"  prop_left_shift_8\n        , testProperty \"left_shift_16\"  prop_left_shift_16\n        , testProperty \"left_shift_32\"  prop_left_shift_32\n        , testProperty \"left_shift_64\"  prop_left_shift_64\n        , testProperty \"right_shift_with_8\"  prop_right_shift_with_8\n        , testProperty \"right_shift_with_16\"  prop_right_shift_with_16\n        , testProperty \"right_shift_with_32\"  prop_right_shift_with_32\n        , testProperty \"right_shift_with_64\"  prop_right_shift_with_64\n        , testProperty \"right_shift_8\"  prop_right_shift_8\n        , testProperty \"right_shift_16\"  prop_right_shift_16\n        , testProperty \"right_shift_32\"  prop_right_shift_32\n        , testProperty \"right_shift_64\"  prop_right_shift_64\n        , testProperty \"left_rotate_8\"  prop_left_rotate_8\n        , testProperty \"left_rotate_16\"  prop_left_rotate_16\n        , testProperty \"left_rotate_32\"  prop_left_rotate_32\n        , testProperty \"left_rotate_64\"  prop_left_rotate_64\n        , testProperty \"right_rotate_8\"  prop_right_rotate_8\n        , testProperty \"right_rotate_16\"  prop_right_rotate_16\n        , testProperty \"right_rotate_32\"  prop_right_rotate_32\n        , testProperty \"right_rotate_64\"  prop_right_rotate_64\n        , testProperty \"shift_const_by false word8\" prop_shift_const_by_false8\n        , testProperty \"rotate_const word8\" prop_rotate_const8\n        , testProperty \"transpose zv2 zv8\" prop_transpose_2x8\n        , testProperty \"transpose zv8 zv8\" prop_transpose_8x8\n        ]\n      , testGroup \"Arith\"\n        [ testProperty \"lsb word8\" prop_lsb8\n        , testProperty \"msb word8\" prop_msb8\n        , testProperty \"bezout word8\" prop_bezout8\n        , testProperty \"cofactors word8\" prop_cofactors8\n        , testProperty \"gcd word8\" prop_gcd8\n        , testProperty \"lcm word8\" prop_lcm8\n        , testProperty \"absolute_value word4\" prop_absolute_value4\n        , testProperty \"sign word4\" prop_sign4\n        , testCase     \"one_8\" assert_one_8\n        , testCase     \"one_16\" assert_one_16\n        , testCase     \"one_32\" assert_one_32\n        , testCase     \"one_64\" assert_one_64\n        , testProperty \"add_8\"  prop_add_8\n        , testProperty \"add_16\"  prop_add_16\n        , testProperty \"add_32\"  prop_add_32\n        , testProperty \"add_64\"  prop_add_64\n        , testProperty \"full_add_8\"  prop_full_add_8\n        , testProperty \"full_add_16\"  prop_full_add_16\n        , testProperty \"full_add_32\"  prop_full_add_32\n        , testProperty \"full_add_64\"  prop_full_add_64\n        , testProperty \"full_increment_8\"  prop_full_increment_8\n        , testProperty \"full_increment_16\"  prop_full_increment_16\n        , testProperty \"full_increment_32\"  prop_full_increment_32\n        , testProperty \"full_increment_64\"  prop_full_increment_64\n        , testCase     \"full_increment_max_8\" assert_full_increment_max_8\n        , testCase     \"full_increment_max_16\" assert_full_increment_max_16\n        , testCase     \"full_increment_max_32\" assert_full_increment_max_32\n        , testCase     \"full_increment_max_64\" assert_full_increment_max_64\n        , testProperty \"increment_8\"  prop_increment_8\n        , testProperty \"increment_16\"  prop_increment_16\n        , testProperty \"increment_32\"  prop_increment_32\n        , testProperty \"increment_64\"  prop_increment_64\n        , testCase     \"increment_max_8\" assert_increment_max_8\n        , testCase     \"increment_max_16\" assert_increment_max_16\n        , testCase     \"increment_max_32\" assert_increment_max_32\n        , testCase     \"increment_max_64\" assert_increment_max_64\n        , testProperty \"subtract_8\"  prop_subtract_8\n        , testProperty \"subtract_16\"  prop_subtract_16\n        , testProperty \"subtract_32\"  prop_subtract_32\n        , testProperty \"subtract_64\"  prop_subtract_64\n        , testProperty \"full_subtract_8\"  prop_full_subtract_8\n        , testProperty \"full_subtract_16\"  prop_full_subtract_16\n        , testProperty \"full_subtract_32\"  prop_full_subtract_32\n        , testProperty \"full_subtract_64\"  prop_full_subtract_64\n        , testProperty \"negate_8\"  prop_negate_8\n        , testProperty \"negate_16\"  prop_negate_16\n        , testProperty \"negate_32\"  prop_negate_32\n        , testProperty \"negate_64\"  prop_negate_64\n        , testProperty \"full_decrement_8\"  prop_full_decrement_8\n        , testProperty \"full_decrement_16\"  prop_full_decrement_16\n        , testProperty \"full_decrement_32\"  prop_full_decrement_32\n        , testProperty \"full_decrement_64\"  prop_full_decrement_64\n        , testCase     \"full_decrement_zero_8\" assert_full_decrement_zero_8\n        , testCase     \"full_decrement_zero_16\" assert_full_decrement_zero_16\n        , testCase     \"full_decrement_zero_32\" assert_full_decrement_zero_32\n        , testCase     \"full_decrement_zero_64\" assert_full_decrement_zero_64\n        , testProperty \"decrement_8\"  prop_decrement_8\n        , testProperty \"decrement_16\"  prop_decrement_16\n        , testProperty \"decrement_32\"  prop_decrement_32\n        , testProperty \"decrement_64\"  prop_decrement_64\n        , testCase     \"decrement_zero_8\" assert_decrement_zero_8\n        , testCase     \"decrement_zero_16\" assert_decrement_zero_16\n        , testCase     \"decrement_zero_32\" assert_decrement_zero_32\n        , testCase     \"decrement_zero_64\" assert_decrement_zero_64\n        , testProperty \"multiply_8\"  prop_multiply_8\n        , testProperty \"multiply_16\"  prop_multiply_16\n        , testProperty \"multiply_32\"  prop_multiply_32\n        , testProperty \"multiply_64\"  prop_multiply_64\n        , testProperty \"full_multiply_8\"  prop_full_multiply_8\n        , testProperty \"full_multiply_16\"  prop_full_multiply_16\n        , testProperty \"full_multiply_32\"  prop_full_multiply_32\n        , testProperty \"full_multiply_64\"  prop_full_multiply_64\n        , testProperty \"is_zero_8\"  prop_is_zero_8\n        , testProperty \"is_zero_16\"  prop_is_zero_16\n        , testProperty \"is_zero_32\"  prop_is_zero_32\n        , testProperty \"is_zero_64\"  prop_is_zero_64\n        , testCase     \"zero_is_zero_8\" assert_zero_is_zero_8\n        , testCase     \"zero_is_zero_16\" assert_zero_is_zero_16\n        , testCase     \"zero_is_zero_32\" assert_zero_is_zero_32\n        , testCase     \"zero_is_zero_64\" assert_zero_is_zero_64\n        , testProperty \"is_one_8\"  prop_is_one_8\n        , testProperty \"is_one_16\"  prop_is_one_16\n        , testProperty \"is_one_32\"  prop_is_one_32\n        , testProperty \"is_one_64\"  prop_is_one_64\n        , testCase     \"one_is_one_8\" assert_one_is_one_8\n        , testCase     \"one_is_one_16\" assert_one_is_one_16\n        , testCase     \"one_is_one_32\" assert_one_is_one_32\n        , testCase     \"one_is_one_64\" assert_one_is_one_64\n        , testProperty \"le_8\"  prop_le_8\n        , testProperty \"le_16\"  prop_le_16\n        , testProperty \"le_32\"  prop_le_32\n        , testProperty \"le_64\"  prop_le_64\n        , testProperty \"le_diag_8\"  prop_le_diag_8\n        , testProperty \"le_diag_16\"  prop_le_diag_16\n        , testProperty \"le_diag_32\"  prop_le_diag_32\n        , testProperty \"le_diag_64\"  prop_le_diag_64\n        , testProperty \"lt_8\"  prop_lt_8\n        , testProperty \"lt_16\"  prop_lt_16\n        , testProperty \"lt_32\"  prop_lt_32\n        , testProperty \"lt_64\"  prop_lt_64\n        , testProperty \"lt_diag_8\"  prop_lt_diag_8\n        , testProperty \"lt_diag_16\"  prop_lt_diag_16\n        , testProperty \"lt_diag_32\"  prop_lt_diag_32\n        , testProperty \"lt_diag_64\"  prop_lt_diag_64\n        , testProperty \"min_8\"  prop_min_8\n        , testProperty \"min_16\"  prop_min_16\n        , testProperty \"min_32\"  prop_min_32\n        , testProperty \"min_64\"  prop_min_64\n        , testProperty \"max_8\"  prop_max_8\n        , testProperty \"max_16\"  prop_max_16\n        , testProperty \"max_32\"  prop_max_32\n        , testProperty \"max_64\"  prop_max_64\n        , testProperty \"median_8\"  prop_median_8\n        , testProperty \"median_16\"  prop_median_16\n        , testProperty \"median_32\"  prop_median_32\n        , testProperty \"median_64\"  prop_median_64\n        , testProperty \"div_mod_8\"  prop_div_mod_8\n        , testProperty \"div_mod_16\"  prop_div_mod_16\n        , testProperty \"div_mod_32\"  prop_div_mod_32\n        , testProperty \"div_mod_64\"  prop_div_mod_64\n        , testProperty \"divide_8\"  prop_divide_8\n        , testProperty \"divide_16\"  prop_divide_16\n        , testProperty \"divide_32\"  prop_divide_32\n        , testProperty \"divide_64\"  prop_divide_64\n        , testProperty \"modulo_8\"  prop_modulo_8\n        , testProperty \"modulo_16\"  prop_modulo_16\n        , testProperty \"modulo_32\"  prop_modulo_32\n        , testProperty \"modulo_64\"  prop_modulo_64\n        , testProperty \"divides_8\"  prop_divides_8\n        , testProperty \"divides_16\"  prop_divides_16\n        , testProperty \"divides_32\"  prop_divides_32\n        , testProperty \"divides_64\"  prop_divides_64\n        , testProperty \"div_mod_zero_8\"  prop_div_mod_zero_8\n        , testProperty \"div_mod_zero_16\"  prop_div_mod_zero_16\n        , testProperty \"div_mod_zero_32\"  prop_div_mod_zero_32\n        , testProperty \"div_mod_zero_64\"  prop_div_mod_zero_64\n        , testProperty \"divide_zero_8\"  prop_divide_zero_8\n        , testProperty \"divide_zero_16\"  prop_divide_zero_16\n        , testProperty \"divide_zero_32\"  prop_divide_zero_32\n        , testProperty \"divide_zero_64\"  prop_divide_zero_64\n        , testProperty \"modulo_zero_8\"  prop_modulo_zero_8\n        , testProperty \"modulo_zero_16\"  prop_modulo_zero_16\n        , testProperty \"modulo_zero_32\"  prop_modulo_zero_32\n        , testProperty \"modulo_zero_64\"  prop_modulo_zero_64\n        , testProperty \"divides_zero_8\"  prop_divides_zero_8\n        , testProperty \"divides_zero_16\"  prop_divides_zero_16\n        , testProperty \"divides_zero_32\"  prop_divides_zero_32\n        , testProperty \"divides_zero_64\"  prop_divides_zero_64\n        , testProperty \"div_mod_128_64\"   prop_div_mod_128_64\n        , testProperty \"div_mod_128_64_low_y\"   prop_div_mod_128_64_low_y\n        , testProperty \"div_mod_128_64_high_x\"   prop_div_mod_128_64_high_x\n        ]\n      , testGroup \"Hash\"\n        [ testCase \"sha_256_iv\" assert_sha_256_iv\n        , testProperty \"sha_256_block\" prop_sha_256_block\n        , testCase \"sha_256_ctx_8_init\" assert_sha_256_ctx_8_init\n        , testProperty \"sha_256_ctx_8_add_1\" prop_sha_256_ctx_8_add_1\n        , testProperty \"sha_256_ctx_8_add_2\" prop_sha_256_ctx_8_add_2\n        , testProperty \"sha_256_ctx_8_add_4\" prop_sha_256_ctx_8_add_4\n        , testProperty \"sha_256_ctx_8_add_8\" prop_sha_256_ctx_8_add_8\n        , testProperty \"sha_256_ctx_8_add_16\" prop_sha_256_ctx_8_add_16\n        , testProperty \"sha_256_ctx_8_add_32\" prop_sha_256_ctx_8_add_32\n        , testProperty \"sha_256_ctx_8_add_64\" prop_sha_256_ctx_8_add_64\n        , testProperty \"sha_256_ctx_8_add_128\" prop_sha_256_ctx_8_add_128\n        , testProperty \"sha_256_ctx_8_add_256\" prop_sha_256_ctx_8_add_256\n        , testProperty \"sha_256_ctx_8_add_512\" prop_sha_256_ctx_8_add_512\n        , testProperty \"sha_256_ctx_8_add_buffer_511\" prop_sha_256_ctx_8_add_buffer_511\n        , testProperty \"sha_256_ctx_8_finalize\" prop_sha_256_ctx_8_finalize\n        ]\n      , testGroup \"ellipticCurve\"\n        [ testProperty \"fe_normalize\" prop_fe_normalize\n        , testProperty \"fe_add\" prop_fe_add\n        , testProperty \"fe_multiply\" prop_fe_multiply\n        , testProperty \"fe_square\" prop_fe_square\n        , testProperty \"fe_negate\" prop_fe_negate\n        , testProperty \"fe_halve\" prop_fe_halve\n        , testProperty \"fe_invert\" (withMaxSuccess 10 prop_fe_invert)\n        , testProperty \"fe_square_root\" (withMaxSuccess 10 prop_fe_square_root)\n        , testProperty \"gej_rescale\" prop_gej_rescale\n        , testProperty \"gej_rescale_inf\" prop_gej_rescale_inf\n        , testProperty \"gej_double\" prop_gej_double\n        , testProperty \"gej_double_inf\" prop_gej_double_inf\n        , testProperty \"gej_add_ex\" prop_gej_add_ex\n        , testProperty \"gej_add_ex_double\" prop_gej_add_ex_double\n        , testProperty \"gej_add_ex_opp\" prop_gej_add_ex_opp\n        , testProperty \"gej_add_ex_infl\" prop_gej_add_ex_infl\n        , testProperty \"gej_add_ex_infr\" prop_gej_add_ex_infr\n        , testProperty \"gej_add\" prop_gej_add\n        , testProperty \"gej_add_double\" prop_gej_add_double\n        , testProperty \"gej_add_opp\" prop_gej_add_opp\n        , testProperty \"gej_add_infl\" prop_gej_add_infl\n        , testProperty \"gej_add_infr\" prop_gej_add_infr\n        , testProperty \"gej_ge_add_ex\" prop_gej_ge_add_ex\n        , testProperty \"gej_ge_add_ex_double\" prop_gej_ge_add_ex_double\n        , testProperty \"gej_ge_add_ex_opp\" prop_gej_ge_add_ex_opp\n        , testProperty \"gej_ge_add_ex_inf\" prop_gej_ge_add_ex_inf\n        , testProperty \"gej_equiv\" prop_gej_equiv\n        , testProperty \"gej_equiv_infl\" prop_gej_equiv_infl\n        , testProperty \"gej_equiv_infr\" prop_gej_equiv_infr\n        , testProperty \"gej_equiv_inf\" prop_gej_equiv_inf\n        , testProperty \"gej_equiv_true\" prop_gej_equiv_true\n        , testProperty \"gej_ge_equiv\" prop_gej_ge_equiv\n        , testProperty \"gej_ge_equiv_inf\" prop_gej_ge_equiv_inf\n        , testProperty \"gej_ge_equiv_true\" prop_gej_ge_equiv_true\n        , testProperty \"gej_x_equiv\" prop_gej_x_equiv\n        , testProperty \"gej_x_equiv_inf\" prop_gej_x_equiv_inf\n        , testProperty \"gej_x_equiv_true\" prop_gej_x_equiv_true\n        , testProperty \"gej_x_equiv_inf_zero\" prop_gej_x_equiv_inf_zero\n        , testProperty \"gej_is_on_curve\" prop_gej_is_on_curve\n        , testProperty \"gej_is_on_curve_half\" prop_gej_is_on_curve_half\n        , testProperty \"gej_is_on_curve_inf\" prop_gej_is_on_curve_inf\n        , testProperty \"gej_is_on_curve_inf_half\" prop_gej_is_on_curve_inf_half\n        , testProperty \"ge_is_on_curve\" prop_ge_is_on_curve\n        , testProperty \"ge_is_on_curve_half\" prop_ge_is_on_curve_half\n        , testProperty \"scalar_normalize\" prop_scalar_normalize\n        , testProperty \"scalar_add\" prop_scalar_add\n        , testProperty \"scalar_square\" prop_scalar_square\n        , testProperty \"scalar_multiply\" prop_scalar_multiply\n        , testProperty \"scalar_negate\" prop_scalar_negate\n        , testProperty \"scalar_invert\" (withMaxSuccess 10 prop_scalar_invert)\n        , testProperty \"scalar_split_lambda\" prop_scalar_split_lambda\n        , testProperty \"wnaf5\" prop_wnaf5\n        , testProperty \"wnaf15\" prop_wnaf15\n        , testProperty \"decompress\" prop_decompress\n        , testProperty \"off_curve_scale\" prop_off_curve_scale\n        , testProperty \"off_curve_scale_0\" prop_off_curve_scale_0\n        , testProperty \"off_curve_scale_inf\" prop_off_curve_scale_inf\n        , testProperty \"scale\" prop_scale\n        , testProperty \"scale_0\" prop_scale_0\n        , testProperty \"scale_inf\" prop_scale_inf\n        , testProperty \"scale_half\" prop_scale_half\n        , testProperty \"scale_half_0\" prop_scale_half_0\n        , testProperty \"scale_half_inf\" prop_scale_half_inf\n        , testProperty \"off_curve_linear_combination_1\" prop_off_curve_linear_combination_1\n        , testProperty \"off_curve_linear_combination_1_0\" prop_off_curve_linear_combination_1_0\n        , testProperty \"off_curve_linear_combination_1_inf\" prop_off_curve_linear_combination_1_inf\n        , testProperty \"linear_combination_1\" prop_linear_combination_1\n        , testProperty \"linear_combination_1_0\" prop_linear_combination_1_0\n        , testProperty \"linear_combination_1_inf\" prop_linear_combination_1_inf\n        , testProperty \"linear_combination_1_half\" prop_linear_combination_1_half\n        , testProperty \"linear_combination_1_half_0\" prop_linear_combination_1_half_0\n        , testProperty \"linear_combination_1_half_inf\" prop_linear_combination_1_half_inf\n        , testProperty \"linear_check_1\" prop_linear_check_1\n        , testProperty \"point_check_1\" prop_point_check_1\n        , testProperty \"swu\" prop_swu\n        , testProperty \"hash_to_curve\" prop_hash_to_curve\n        ]\n      , testGroup \"bip0340\"\n        [ testProperty \"pubkey_unpack\" prop_pubkey_unpack\n        , testProperty \"pubkey_unpack_neg\" prop_pubkey_unpack_neg\n        , testProperty \"signature_unpack\" prop_signature_unpack\n        , testProperty \"check_sig_verify\" prop_check_sig_verify\n        , testProperty \"check_sig_verify_true\" prop_check_sig_verify_true\n        ]\n      , group_bip_0340_check\n      , testGroup \"bitcoin\"\n        [ testProperty \"parse_lock\" prop_parse_lock\n        , testProperty \"parse_sequence\" prop_parse_sequence\n        , testCase \"tapdata_init\" assert_tapdata_init\n        ]\n      ]\n\nassert_verify :: Assertion\nassert_verify =\n  (fastF (toBit False), fastF (toBit True))\n    @=?\n  (implF (toBit False), implF (toBit True))\n where\n  fastF = testCoreEval (specification (WordJet Verify))\n  implF = implementation (WordJet Verify)\n\nprop_shift_const_by_false8 :: Word8 -> Property\nprop_shift_const_by_false8 x = forAll (choose (-8,16)) $ \\c ->\n                               W.shift (conv x) c == conv (shift_const_by false word8 c x)\n where\n  conv :: Word8 -> W.Word8\n  conv = fromInteger . fromWord8\n\nprop_rotate_const8 :: Word8 -> Property\nprop_rotate_const8 x = forAll (choose (-8,16)) $ \\c ->\n                       W.rotate (conv x) c == conv (rotate_const word8 c x)\n where\n  conv :: Word8 -> W.Word8\n  conv = fromInteger . fromWord8\n\nprop_transpose_2x8 :: Word16 -> Bool\nprop_transpose_2x8 x = L.transpose (map (^..both_) (x^..both_.both_.both_))\n                    == map (^..both_.both_.both_) (transpose zv2 zv8 x^..both_)\n where\n  zv2 = DoubleZV SingleZV\n  zv8 = DoubleZV . DoubleZV . DoubleZV $ SingleZV\n\nprop_transpose_8x8 :: Word64 -> Bool\nprop_transpose_8x8 x = L.transpose (map (^..both_.both_.both_) (x^..both_.both_.both_))\n                    == map (^..both_.both_.both_) (transpose zv8 zv8' x^..both_.both_.both_)\n where\n  zv8 = DoubleZV . DoubleZV . DoubleZV $ SingleZV\n  zv8' = DoubleZV . DoubleZV . DoubleZV $ SingleZV -- monomorhpism restriction\n\nprop_lsb8 :: Word8 -> Bool\nprop_lsb8 x = W.testBit (fromWord8 x) 0 == fromBit (Arith.lsb word8 x)\n\nprop_msb8 :: Word8 -> Bool\nprop_msb8 x = W.testBit (fromWord8 x) 7 == fromBit (Arith.msb word8 x)\n\nprop_bezout8 :: Word8 -> Word8 -> Bool\nprop_bezout8 x y = a * x' + b * y' == d\n                && if x' == y' then (a == 1 && b == 0)\n                   else if y' == 0 then (a == 1 && b == 0)\n                   else if x' == 0 then (a == 0 && b == 1)\n                   else (if d == y' then a == 0 else abs a * 2 * d <= y')\n                     && (if d == x' then b == 0 else abs b * 2 * d <= x')\n where\n  x' = fromWord8 x\n  y' = fromWord8 y\n  d = x' `gcd` y'\n  (a, b) = either f g $ Arith.bezout word8 (x, y)\n  f (a, b) = (fromWord8 a, - fromWord8 b)\n  g (a, b) = (- fromWord8 a, fromWord8 b)\n\nprop_cofactors8 :: Word8 -> Word8 -> Bool\nprop_cofactors8 x y = fromWord8 x == d * fromWord8 a\n                   && fromWord8 y == d * fromWord8 b\n where\n  d = fromWord8 x `gcd` fromWord8 y\n  (a, b) = Arith.cofactors word8 (x, y)\n\nprop_gcd8 :: Word8 -> Word8 -> Bool\nprop_gcd8 x y = (fromWord8 x `gcd` fromWord8 y) == fromWord8 (Arith.gcd word8 (x,y))\n\nprop_lcm8 :: Word8 -> Word8 -> Bool\nprop_lcm8 x y = (fromWord8 x `lcm` fromWord8 y) == fromWord16 (Arith.lcm word8 (x,y))\n\nprop_absolute_value4 :: Word4 -> Bool\nprop_absolute_value4 x = abs (fromInt4 x) == fromWord4 (Arith.absolute_value word4 x)\n where\n  fromInt4 x = if 2^3 <= w4 then w4 - 2^4 else w4\n   where\n    w4 = fromWord4 x\n\nprop_sign4 :: Word4 -> Bool\nprop_sign4 x = signum (fromInt4 x) == fromInt2 (Arith.sign word4 x)\n where\n  fromInt4 x = if 2^3 <= w4 then w4 - 2^4 else w4\n   where\n    w4 = fromWord4 x\n  fromInt2 x = if 2^1 <= w2 then w2 - 2^2 else w2\n   where\n    w2 = fromWord2 x\n\nassert_low_1 :: Assertion\nassert_low_1 = fastF () @=? implementation (WordJet Low1) ()\n where\n  fastF = testCoreEval (specification (WordJet Low1))\n\nassert_low_8 :: Assertion\nassert_low_8 = fastF () @=? implementation (WordJet Low8) ()\n where\n  fastF = testCoreEval (specification (WordJet Low8))\n\nassert_low_16 :: Assertion\nassert_low_16 = fastF () @=? implementation (WordJet Low16) ()\n where\n  fastF = testCoreEval (specification (WordJet Low16))\n\nassert_low_32 :: Assertion\nassert_low_32 = fastF () @=? implementation (WordJet Low32) ()\n where\n  fastF = testCoreEval (specification (WordJet Low32))\n\nassert_low_64 :: Assertion\nassert_low_64 = fastF () @=? implementation (WordJet Low64) ()\n where\n  fastF = testCoreEval (specification (WordJet Low64))\n\nassert_high_1 :: Assertion\nassert_high_1 = fastF () @=? implementation (WordJet High1) ()\n where\n  fastF = testCoreEval (specification (WordJet High1))\n\nassert_high_8 :: Assertion\nassert_high_8 = fastF () @=? implementation (WordJet High8) ()\n where\n  fastF = testCoreEval (specification (WordJet High8))\n\nassert_high_16 :: Assertion\nassert_high_16 = fastF () @=? implementation (WordJet High16) ()\n where\n  fastF = testCoreEval (specification (WordJet High16))\n\nassert_high_32 :: Assertion\nassert_high_32 = fastF () @=? implementation (WordJet High32) ()\n where\n  fastF = testCoreEval (specification (WordJet High32))\n\nassert_high_64 :: Assertion\nassert_high_64 = fastF () @=? implementation (WordJet High64) ()\n where\n  fastF = testCoreEval (specification (WordJet High64))\n\nprop_complement_1 :: Bool -> Bool\nprop_complement_1 = \\x -> let input = toBit x\n                       in fastF input == implementation (WordJet Complement1) input\n where\n  fastF = testCoreEval (specification (WordJet Complement1))\n\nprop_complement_8 :: W.Word8 -> Bool\nprop_complement_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (WordJet Complement8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement8))\n\nprop_complement_16 :: W.Word16 -> Bool\nprop_complement_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (WordJet Complement16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement16))\n\nprop_complement_32 :: W.Word32 -> Bool\nprop_complement_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (WordJet Complement32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement32))\n\nprop_complement_64 :: W.Word64 -> Bool\nprop_complement_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (WordJet Complement64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Complement64))\n\nprop_and_1 :: Bool -> Bool -> Bool\nprop_and_1 = \\x y -> let input = (toBit x, toBit y)\n                     in fastF input == implementation (WordJet And1) input\n where\n  fastF = testCoreEval (specification (WordJet And1))\n\nprop_and_8 :: W.Word8 -> W.Word8 -> Bool\nprop_and_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (WordJet And8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And8))\n\nprop_and_16 :: W.Word16 -> W.Word16 -> Bool\nprop_and_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (WordJet And16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And16))\n\nprop_and_32 :: W.Word32 -> W.Word32 -> Bool\nprop_and_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (WordJet And32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And32))\n\nprop_and_64 :: W.Word64 -> W.Word64 -> Bool\nprop_and_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (WordJet And64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet And64))\n\nprop_or_1 :: Bool -> Bool -> Bool\nprop_or_1 = \\x y -> let input = (toBit x, toBit y)\n                     in fastF input == implementation (WordJet Or1) input\n where\n  fastF = testCoreEval (specification (WordJet Or1))\n\nprop_or_8 :: W.Word8 -> W.Word8 -> Bool\nprop_or_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (WordJet Or8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or8))\n\nprop_or_16 :: W.Word16 -> W.Word16 -> Bool\nprop_or_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (WordJet Or16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or16))\n\nprop_or_32 :: W.Word32 -> W.Word32 -> Bool\nprop_or_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (WordJet Or32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or32))\n\nprop_or_64 :: W.Word64 -> W.Word64 -> Bool\nprop_or_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (WordJet Or64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Or64))\n\nprop_xor_1 :: Bool -> Bool -> Bool\nprop_xor_1 = \\x y -> let input = (toBit x, toBit y)\n                     in fastF input == implementation (WordJet Xor1) input\n where\n  fastF = testCoreEval (specification (WordJet Xor1))\n\nprop_xor_8 :: W.Word8 -> W.Word8 -> Bool\nprop_xor_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (WordJet Xor8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor8))\n\nprop_xor_16 :: W.Word16 -> W.Word16 -> Bool\nprop_xor_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (WordJet Xor16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor16))\n\nprop_xor_32 :: W.Word32 -> W.Word32 -> Bool\nprop_xor_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (WordJet Xor32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor32))\n\nprop_xor_64 :: W.Word64 -> W.Word64 -> Bool\nprop_xor_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (WordJet Xor64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Xor64))\n\nprop_maj_1 :: Bool -> Bool -> Bool -> Bool\nprop_maj_1 = \\x y z -> let input = (toBit x, (toBit y, toBit z))\n                     in fastF input == implementation (WordJet Maj1) input\n where\n  fastF = testCoreEval (specification (WordJet Maj1))\n\nprop_maj_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_maj_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == implementation (WordJet Maj8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj8))\n\nprop_maj_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_maj_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == implementation (WordJet Maj16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj16))\n\nprop_maj_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_maj_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == implementation (WordJet Maj32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj32))\n\nprop_maj_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_maj_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == implementation (WordJet Maj64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Maj64))\n\nprop_xor_xor_1 :: Bool -> Bool -> Bool -> Bool\nprop_xor_xor_1 = \\x y z -> let input = (toBit x, (toBit y, toBit z))\n                     in fastF input == implementation (WordJet XorXor1) input\n where\n  fastF = testCoreEval (specification (WordJet XorXor1))\n\nprop_xor_xor_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_xor_xor_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == implementation (WordJet XorXor8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor8))\n\nprop_xor_xor_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_xor_xor_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == implementation (WordJet XorXor16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor16))\n\nprop_xor_xor_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_xor_xor_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == implementation (WordJet XorXor32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor32))\n\nprop_xor_xor_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_xor_xor_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == implementation (WordJet XorXor64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet XorXor64))\n\nprop_ch_1 :: Bool -> Bool -> Bool -> Bool\nprop_ch_1 = \\x y z -> let input = (toBit x, (toBit y, toBit z))\n                     in fastF input == implementation (WordJet Ch1) input\n where\n  fastF = testCoreEval (specification (WordJet Ch1))\n\nprop_ch_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_ch_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == implementation (WordJet Ch8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch8))\n\nprop_ch_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_ch_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == implementation (WordJet Ch16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch16))\n\nprop_ch_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_ch_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == implementation (WordJet Ch32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch32))\n\nprop_ch_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_ch_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == implementation (WordJet Ch64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Ch64))\n\nprop_some_1 :: Bool -> Bool\nprop_some_1 = \\x -> let input = toBit x\n                       in fastF input == implementation (WordJet Some1) input\n where\n  fastF = testCoreEval (specification (WordJet Some1))\n\nprop_some_8 :: W.Word8 -> Bool\nprop_some_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (WordJet Some8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some8))\n\nprop_some_16 :: W.Word16 -> Bool\nprop_some_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (WordJet Some16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some16))\n\nprop_some_32 :: W.Word32 -> Bool\nprop_some_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (WordJet Some32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some32))\n\nprop_some_64 :: W.Word64 -> Bool\nprop_some_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (WordJet Some64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Some64))\n\nprop_all_8 :: W.Word8 -> Bool\nprop_all_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (WordJet All8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All8))\n\nprop_all_16 :: W.Word16 -> Bool\nprop_all_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (WordJet All16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All16))\n\nprop_all_32 :: W.Word32 -> Bool\nprop_all_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (WordJet All32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All32))\n\nprop_all_64 :: W.Word64 -> Bool\nprop_all_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (WordJet All64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet All64))\n\nprop_eq_8 :: W.Word8 -> W.Word8 -> Bool\nprop_eq_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (WordJet Eq8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq8))\n\nprop_eq_16 :: W.Word16 -> W.Word16 -> Bool\nprop_eq_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (WordJet Eq16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq16))\n\nprop_eq_32 :: W.Word32 -> W.Word32 -> Bool\nprop_eq_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (WordJet Eq32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq32))\n\nprop_eq_64 :: W.Word64 -> W.Word64 -> Bool\nprop_eq_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (WordJet Eq64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq64))\n\nprop_eq_256 :: W.Word256 -> W.Word256 -> Bool\nprop_eq_256 = \\x y -> let input = (toW256 x, toW256 y)\n                       in fastF input == implementation (WordJet Eq256) input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq256))\n\nprop_eq_diag_8 :: W.Word8 -> Bool\nprop_eq_diag_8 = \\x -> let input = (toW8 x, toW8 x)\n                         in fastF input == implementation (WordJet Eq8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq8))\n\nprop_eq_diag_16 :: W.Word16 -> Bool\nprop_eq_diag_16 = \\x -> let input = (toW16 x, toW16 x)\n                         in fastF input == implementation (WordJet Eq16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq16))\n\nprop_eq_diag_32 :: W.Word32 -> Bool\nprop_eq_diag_32 = \\x -> let input = (toW32 x, toW32 x)\n                         in fastF input == implementation (WordJet Eq32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq32))\n\nprop_eq_diag_64 :: W.Word64 -> Bool\nprop_eq_diag_64 = \\x -> let input = (toW64 x, toW64 x)\n                         in fastF input == implementation (WordJet Eq64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq64))\n\nprop_eq_diag_256 :: W.Word256 -> Bool\nprop_eq_diag_256 = \\x -> let input = (toW256 x, toW256 x)\n                         in fastF input == implementation (WordJet Eq256) input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Eq256))\n\nprop_full_left_shift_8_1 :: W.Word8 -> Bool -> Bool\nprop_full_left_shift_8_1 = \\x y -> let input = (toW8 x, toBit y)\n                                   in fastF input == implementation (WordJet FullLeftShift8_1) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift8_1))\n\nprop_full_left_shift_8_2 :: W.Word8 -> W.Word8 -> Bool\nprop_full_left_shift_8_2 = \\x y -> let input = (toW8 x, toW2 y)\n                                   in fastF input == implementation (WordJet FullLeftShift8_2) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift8_2))\n\nprop_full_left_shift_8_4 :: W.Word8 -> W.Word8 -> Bool\nprop_full_left_shift_8_4 = \\x y -> let input = (toW8 x, toW4 y)\n                                   in fastF input == implementation (WordJet FullLeftShift8_4) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift8_4))\n\nprop_full_left_shift_16_1 :: W.Word16 -> Bool -> Bool\nprop_full_left_shift_16_1 = \\x y -> let input = (toW16 x, toBit y)\n                                   in fastF input == implementation (WordJet FullLeftShift16_1) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_1))\n\nprop_full_left_shift_16_2 :: W.Word16 -> W.Word8 -> Bool\nprop_full_left_shift_16_2 = \\x y -> let input = (toW16 x, toW2 y)\n                                   in fastF input == implementation (WordJet FullLeftShift16_2) input\n where\n  toW16 = toWord16 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_2))\n\nprop_full_left_shift_16_4 :: W.Word16 -> W.Word8 -> Bool\nprop_full_left_shift_16_4 = \\x y -> let input = (toW16 x, toW4 y)\n                                   in fastF input == implementation (WordJet FullLeftShift16_4) input\n where\n  toW16 = toWord16 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_4))\n\nprop_full_left_shift_16_8 :: W.Word16 -> W.Word8 -> Bool\nprop_full_left_shift_16_8 = \\x y -> let input = (toW16 x, toW8 y)\n                                   in fastF input == implementation (WordJet FullLeftShift16_8) input\n where\n  toW16 = toWord16 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift16_8))\n\nprop_full_left_shift_32_1 :: W.Word32 -> Bool -> Bool\nprop_full_left_shift_32_1 = \\x y -> let input = (toW32 x, toBit y)\n                                   in fastF input == implementation (WordJet FullLeftShift32_1) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_1))\n\nprop_full_left_shift_32_2 :: W.Word32 -> W.Word8 -> Bool\nprop_full_left_shift_32_2 = \\x y -> let input = (toW32 x, toW2 y)\n                                   in fastF input == implementation (WordJet FullLeftShift32_2) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_2))\n\nprop_full_left_shift_32_4 :: W.Word32 -> W.Word8 -> Bool\nprop_full_left_shift_32_4 = \\x y -> let input = (toW32 x, toW4 y)\n                                   in fastF input == implementation (WordJet FullLeftShift32_4) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_4))\n\nprop_full_left_shift_32_8 :: W.Word32 -> W.Word8 -> Bool\nprop_full_left_shift_32_8 = \\x y -> let input = (toW32 x, toW8 y)\n                                   in fastF input == implementation (WordJet FullLeftShift32_8) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_8))\n\nprop_full_left_shift_32_16 :: W.Word32 -> W.Word16 -> Bool\nprop_full_left_shift_32_16 = \\x y -> let input = (toW32 x, toW16 y)\n                                   in fastF input == implementation (WordJet FullLeftShift32_16) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift32_16))\n\nprop_full_left_shift_64_1 :: W.Word64 -> Bool -> Bool\nprop_full_left_shift_64_1 = \\x y -> let input = (toW64 x, toBit y)\n                                   in fastF input == implementation (WordJet FullLeftShift64_1) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_1))\n\nprop_full_left_shift_64_2 :: W.Word64 -> W.Word8 -> Bool\nprop_full_left_shift_64_2 = \\x y -> let input = (toW64 x, toW2 y)\n                                   in fastF input == implementation (WordJet FullLeftShift64_2) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_2))\n\nprop_full_left_shift_64_4 :: W.Word64 -> W.Word8 -> Bool\nprop_full_left_shift_64_4 = \\x y -> let input = (toW64 x, toW4 y)\n                                   in fastF input == implementation (WordJet FullLeftShift64_4) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_4))\n\nprop_full_left_shift_64_8 :: W.Word64 -> W.Word8 -> Bool\nprop_full_left_shift_64_8 = \\x y -> let input = (toW64 x, toW8 y)\n                                   in fastF input == implementation (WordJet FullLeftShift64_8) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_8))\n\nprop_full_left_shift_64_16 :: W.Word64 -> W.Word16 -> Bool\nprop_full_left_shift_64_16 = \\x y -> let input = (toW64 x, toW16 y)\n                                   in fastF input == implementation (WordJet FullLeftShift64_16) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_16))\n\nprop_full_left_shift_64_32 :: W.Word64 -> W.Word32 -> Bool\nprop_full_left_shift_64_32 = \\x y -> let input = (toW64 x, toW32 y)\n                                   in fastF input == implementation (WordJet FullLeftShift64_32) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullLeftShift64_32))\n\nprop_full_right_shift_8_1 :: W.Word8 -> Bool -> Bool\nprop_full_right_shift_8_1 = \\x y -> let input = (toBit y, toW8 x)\n                                   in fastF input == implementation (WordJet FullRightShift8_1) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift8_1))\n\nprop_full_right_shift_8_2 :: W.Word8 -> W.Word8 -> Bool\nprop_full_right_shift_8_2 = \\x y -> let input = (toW2 y, toW8 x)\n                                   in fastF input == implementation (WordJet FullRightShift8_2) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift8_2))\n\nprop_full_right_shift_8_4 :: W.Word8 -> W.Word8 -> Bool\nprop_full_right_shift_8_4 = \\x y -> let input = (toW4 y, toW8 x)\n                                   in fastF input == implementation (WordJet FullRightShift8_4) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift8_4))\n\nprop_full_right_shift_16_1 :: W.Word16 -> Bool -> Bool\nprop_full_right_shift_16_1 = \\x y -> let input = (toBit y, toW16 x)\n                                   in fastF input == implementation (WordJet FullRightShift16_1) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_1))\n\nprop_full_right_shift_16_2 :: W.Word16 -> W.Word8 -> Bool\nprop_full_right_shift_16_2 = \\x y -> let input = (toW2 y, toW16 x)\n                                   in fastF input == implementation (WordJet FullRightShift16_2) input\n where\n  toW16 = toWord16 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_2))\n\nprop_full_right_shift_16_4 :: W.Word16 -> W.Word8 -> Bool\nprop_full_right_shift_16_4 = \\x y -> let input = (toW4 y, toW16 x)\n                                   in fastF input == implementation (WordJet FullRightShift16_4) input\n where\n  toW16 = toWord16 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_4))\n\nprop_full_right_shift_16_8 :: W.Word16 -> W.Word8 -> Bool\nprop_full_right_shift_16_8 = \\x y -> let input = (toW8 y, toW16 x)\n                                   in fastF input == implementation (WordJet FullRightShift16_8) input\n where\n  toW16 = toWord16 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift16_8))\n\nprop_full_right_shift_32_1 :: W.Word32 -> Bool -> Bool\nprop_full_right_shift_32_1 = \\x y -> let input = (toBit y, toW32 x)\n                                   in fastF input == implementation (WordJet FullRightShift32_1) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_1))\n\nprop_full_right_shift_32_2 :: W.Word32 -> W.Word8 -> Bool\nprop_full_right_shift_32_2 = \\x y -> let input = (toW2 y, toW32 x)\n                                   in fastF input == implementation (WordJet FullRightShift32_2) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_2))\n\nprop_full_right_shift_32_4 :: W.Word32 -> W.Word8 -> Bool\nprop_full_right_shift_32_4 = \\x y -> let input = (toW4 y, toW32 x)\n                                   in fastF input == implementation (WordJet FullRightShift32_4) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_4))\n\nprop_full_right_shift_32_8 :: W.Word32 -> W.Word8 -> Bool\nprop_full_right_shift_32_8 = \\x y -> let input = (toW8 y, toW32 x)\n                                   in fastF input == implementation (WordJet FullRightShift32_8) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_8))\n\nprop_full_right_shift_32_16 :: W.Word32 -> W.Word16 -> Bool\nprop_full_right_shift_32_16 = \\x y -> let input = (toW16 y, toW32 x)\n                                   in fastF input == implementation (WordJet FullRightShift32_16) input\n where\n  toW32 = toWord32 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift32_16))\n\nprop_full_right_shift_64_1 :: W.Word64 -> Bool -> Bool\nprop_full_right_shift_64_1 = \\x y -> let input = (toBit y, toW64 x)\n                                   in fastF input == implementation (WordJet FullRightShift64_1) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_1))\n\nprop_full_right_shift_64_2 :: W.Word64 -> W.Word8 -> Bool\nprop_full_right_shift_64_2 = \\x y -> let input = (toW2 y, toW64 x)\n                                   in fastF input == implementation (WordJet FullRightShift64_2) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW2 = toWord2 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_2))\n\nprop_full_right_shift_64_4 :: W.Word64 -> W.Word8 -> Bool\nprop_full_right_shift_64_4 = \\x y -> let input = (toW4 y, toW64 x)\n                                   in fastF input == implementation (WordJet FullRightShift64_4) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW4 = toWord4 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_4))\n\nprop_full_right_shift_64_8 :: W.Word64 -> W.Word8 -> Bool\nprop_full_right_shift_64_8 = \\x y -> let input = (toW8 y, toW64 x)\n                                   in fastF input == implementation (WordJet FullRightShift64_8) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_8))\n\nprop_full_right_shift_64_16 :: W.Word64 -> W.Word16 -> Bool\nprop_full_right_shift_64_16 = \\x y -> let input = (toW16 y, toW64 x)\n                                   in fastF input == implementation (WordJet FullRightShift64_16) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_16))\n\nprop_full_right_shift_64_32 :: W.Word64 -> W.Word32 -> Bool\nprop_full_right_shift_64_32 = \\x y -> let input = (toW32 y, toW64 x)\n                                   in fastF input == implementation (WordJet FullRightShift64_32) input\n where\n  toW64 = toWord64 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet FullRightShift64_32))\n\nprop_leftmost_8_1 :: W.Word8 -> Bool\nprop_leftmost_8_1 = \\x -> let input = toW8 x\n                            in fastF input == implementation (WordJet Leftmost8_1) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost8_1))\n\nprop_leftmost_8_2 :: W.Word8 -> Bool\nprop_leftmost_8_2 = \\x -> let input = toW8 x\n                            in fastF input == implementation (WordJet Leftmost8_2) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost8_2))\n\nprop_leftmost_8_4 :: W.Word8 -> Bool\nprop_leftmost_8_4 = \\x -> let input = toW8 x\n                            in fastF input == implementation (WordJet Leftmost8_4) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost8_4))\n\nprop_leftmost_16_1 :: W.Word16 -> Bool\nprop_leftmost_16_1 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Leftmost16_1) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_1))\n\nprop_leftmost_16_2 :: W.Word16 -> Bool\nprop_leftmost_16_2 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Leftmost16_2) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_2))\n\nprop_leftmost_16_4 :: W.Word16 -> Bool\nprop_leftmost_16_4 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Leftmost16_4) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_4))\n\nprop_leftmost_16_8 :: W.Word16 -> Bool\nprop_leftmost_16_8 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Leftmost16_8) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost16_8))\n\nprop_leftmost_32_1 :: W.Word32 -> Bool\nprop_leftmost_32_1 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Leftmost32_1) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_1))\n\nprop_leftmost_32_2 :: W.Word32 -> Bool\nprop_leftmost_32_2 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Leftmost32_2) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_2))\n\nprop_leftmost_32_4 :: W.Word32 -> Bool\nprop_leftmost_32_4 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Leftmost32_4) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_4))\n\nprop_leftmost_32_8 :: W.Word32 -> Bool\nprop_leftmost_32_8 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Leftmost32_8) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_8))\n\nprop_leftmost_32_16 :: W.Word32 -> Bool\nprop_leftmost_32_16 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Leftmost32_16) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost32_16))\n\nprop_leftmost_64_1 :: W.Word64 -> Bool\nprop_leftmost_64_1 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Leftmost64_1) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_1))\n\nprop_leftmost_64_2 :: W.Word64 -> Bool\nprop_leftmost_64_2 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Leftmost64_2) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_2))\n\nprop_leftmost_64_4 :: W.Word64 -> Bool\nprop_leftmost_64_4 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Leftmost64_4) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_4))\n\nprop_leftmost_64_8 :: W.Word64 -> Bool\nprop_leftmost_64_8 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Leftmost64_8) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_8))\n\nprop_leftmost_64_16 :: W.Word64 -> Bool\nprop_leftmost_64_16 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Leftmost64_16) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_16))\n\nprop_leftmost_64_32 :: W.Word64 -> Bool\nprop_leftmost_64_32 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Leftmost64_32) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Leftmost64_32))\n\nprop_rightmost_8_1 :: W.Word8 -> Bool\nprop_rightmost_8_1 = \\x -> let input = toW8 x\n                            in fastF input == implementation (WordJet Rightmost8_1) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost8_1))\n\nprop_rightmost_8_2 :: W.Word8 -> Bool\nprop_rightmost_8_2 = \\x -> let input = toW8 x\n                            in fastF input == implementation (WordJet Rightmost8_2) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost8_2))\n\nprop_rightmost_8_4 :: W.Word8 -> Bool\nprop_rightmost_8_4 = \\x -> let input = toW8 x\n                            in fastF input == implementation (WordJet Rightmost8_4) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost8_4))\n\nprop_rightmost_16_1 :: W.Word16 -> Bool\nprop_rightmost_16_1 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Rightmost16_1) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_1))\n\nprop_rightmost_16_2 :: W.Word16 -> Bool\nprop_rightmost_16_2 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Rightmost16_2) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_2))\n\nprop_rightmost_16_4 :: W.Word16 -> Bool\nprop_rightmost_16_4 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Rightmost16_4) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_4))\n\nprop_rightmost_16_8 :: W.Word16 -> Bool\nprop_rightmost_16_8 = \\x -> let input = toW16 x\n                            in fastF input == implementation (WordJet Rightmost16_8) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost16_8))\n\nprop_rightmost_32_1 :: W.Word32 -> Bool\nprop_rightmost_32_1 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Rightmost32_1) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_1))\n\nprop_rightmost_32_2 :: W.Word32 -> Bool\nprop_rightmost_32_2 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Rightmost32_2) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_2))\n\nprop_rightmost_32_4 :: W.Word32 -> Bool\nprop_rightmost_32_4 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Rightmost32_4) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_4))\n\nprop_rightmost_32_8 :: W.Word32 -> Bool\nprop_rightmost_32_8 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Rightmost32_8) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_8))\n\nprop_rightmost_32_16 :: W.Word32 -> Bool\nprop_rightmost_32_16 = \\x -> let input = toW32 x\n                            in fastF input == implementation (WordJet Rightmost32_16) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost32_16))\n\nprop_rightmost_64_1 :: W.Word64 -> Bool\nprop_rightmost_64_1 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Rightmost64_1) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_1))\n\nprop_rightmost_64_2 :: W.Word64 -> Bool\nprop_rightmost_64_2 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Rightmost64_2) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_2))\n\nprop_rightmost_64_4 :: W.Word64 -> Bool\nprop_rightmost_64_4 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Rightmost64_4) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_4))\n\nprop_rightmost_64_8 :: W.Word64 -> Bool\nprop_rightmost_64_8 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Rightmost64_8) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_8))\n\nprop_rightmost_64_16 :: W.Word64 -> Bool\nprop_rightmost_64_16 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Rightmost64_16) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_16))\n\nprop_rightmost_64_32 :: W.Word64 -> Bool\nprop_rightmost_64_32 = \\x -> let input = toW64 x\n                            in fastF input == implementation (WordJet Rightmost64_32) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet Rightmost64_32))\n\nprop_left_pad_low_1_8 :: Bool -> Bool\nprop_left_pad_low_1_8 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadLow1_8) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_8))\n\nprop_left_pad_low_1_16 :: Bool -> Bool\nprop_left_pad_low_1_16 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadLow1_16) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_16))\n\nprop_left_pad_low_8_16 :: W.Word8 -> Bool\nprop_left_pad_low_8_16 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftPadLow8_16) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow8_16))\n\nprop_left_pad_low_1_32 :: Bool -> Bool\nprop_left_pad_low_1_32 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadLow1_32) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_32))\n\nprop_left_pad_low_8_32 :: W.Word8 -> Bool\nprop_left_pad_low_8_32 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftPadLow8_32) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow8_32))\n\nprop_left_pad_low_16_32 :: W.Word16 -> Bool\nprop_left_pad_low_16_32 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet LeftPadLow16_32) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow16_32))\n\nprop_left_pad_low_1_64 :: Bool -> Bool\nprop_left_pad_low_1_64 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadLow1_64) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadLow1_64))\n\nprop_left_pad_low_8_64 :: W.Word8 -> Bool\nprop_left_pad_low_8_64 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftPadLow8_64) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow8_64))\n\nprop_left_pad_low_16_64 :: W.Word16 -> Bool\nprop_left_pad_low_16_64 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet LeftPadLow16_64) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow16_64))\n\nprop_left_pad_low_32_64 :: W.Word32 -> Bool\nprop_left_pad_low_32_64 = \\x -> let input = toW32 x\n                                in fastF input == implementation (WordJet LeftPadLow32_64) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadLow32_64))\n\nprop_left_pad_high_1_8 :: Bool -> Bool\nprop_left_pad_high_1_8 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadHigh1_8) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_8))\n\nprop_left_pad_high_1_16 :: Bool -> Bool\nprop_left_pad_high_1_16 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadHigh1_16) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_16))\n\nprop_left_pad_high_8_16 :: W.Word8 -> Bool\nprop_left_pad_high_8_16 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftPadHigh8_16) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh8_16))\n\nprop_left_pad_high_1_32 :: Bool -> Bool\nprop_left_pad_high_1_32 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadHigh1_32) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_32))\n\nprop_left_pad_high_8_32 :: W.Word8 -> Bool\nprop_left_pad_high_8_32 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftPadHigh8_32) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh8_32))\n\nprop_left_pad_high_16_32 :: W.Word16 -> Bool\nprop_left_pad_high_16_32 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet LeftPadHigh16_32) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh16_32))\n\nprop_left_pad_high_1_64 :: Bool -> Bool\nprop_left_pad_high_1_64 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftPadHigh1_64) input\n where\n  fastF = testCoreEval (specification (WordJet LeftPadHigh1_64))\n\nprop_left_pad_high_8_64 :: W.Word8 -> Bool\nprop_left_pad_high_8_64 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftPadHigh8_64) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh8_64))\n\nprop_left_pad_high_16_64 :: W.Word16 -> Bool\nprop_left_pad_high_16_64 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet LeftPadHigh16_64) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh16_64))\n\nprop_left_pad_high_32_64 :: W.Word32 -> Bool\nprop_left_pad_high_32_64 = \\x -> let input = toW32 x\n                                in fastF input == implementation (WordJet LeftPadHigh32_64) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftPadHigh32_64))\n\nprop_left_extend_1_8 :: Bool -> Bool\nprop_left_extend_1_8 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftExtend1_8) input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_8))\n\nprop_left_extend_1_16 :: Bool -> Bool\nprop_left_extend_1_16 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftExtend1_16) input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_16))\n\nprop_left_extend_8_16 :: W.Word8 -> Bool\nprop_left_extend_8_16 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftExtend8_16) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend8_16))\n\nprop_left_extend_1_32 :: Bool -> Bool\nprop_left_extend_1_32 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftExtend1_32) input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_32))\n\nprop_left_extend_8_32 :: W.Word8 -> Bool\nprop_left_extend_8_32 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftExtend8_32) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend8_32))\n\nprop_left_extend_16_32 :: W.Word16 -> Bool\nprop_left_extend_16_32 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet LeftExtend16_32) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend16_32))\n\nprop_left_extend_1_64 :: Bool -> Bool\nprop_left_extend_1_64 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet LeftExtend1_64) input\n where\n  fastF = testCoreEval (specification (WordJet LeftExtend1_64))\n\nprop_left_extend_8_64 :: W.Word8 -> Bool\nprop_left_extend_8_64 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet LeftExtend8_64) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend8_64))\n\nprop_left_extend_16_64 :: W.Word16 -> Bool\nprop_left_extend_16_64 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet LeftExtend16_64) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend16_64))\n\nprop_left_extend_32_64 :: W.Word32 -> Bool\nprop_left_extend_32_64 = \\x -> let input = toW32 x\n                                in fastF input == implementation (WordJet LeftExtend32_64) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftExtend32_64))\n\nprop_right_pad_low_1_8 :: Bool -> Bool\nprop_right_pad_low_1_8 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadLow1_8) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_8))\n\nprop_right_pad_low_1_16 :: Bool -> Bool\nprop_right_pad_low_1_16 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadLow1_16) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_16))\n\nprop_right_pad_low_8_16 :: W.Word8 -> Bool\nprop_right_pad_low_8_16 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightPadLow8_16) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow8_16))\n\nprop_right_pad_low_1_32 :: Bool -> Bool\nprop_right_pad_low_1_32 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadLow1_32) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_32))\n\nprop_right_pad_low_8_32 :: W.Word8 -> Bool\nprop_right_pad_low_8_32 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightPadLow8_32) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow8_32))\n\nprop_right_pad_low_16_32 :: W.Word16 -> Bool\nprop_right_pad_low_16_32 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet RightPadLow16_32) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow16_32))\n\nprop_right_pad_low_1_64 :: Bool -> Bool\nprop_right_pad_low_1_64 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadLow1_64) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadLow1_64))\n\nprop_right_pad_low_8_64 :: W.Word8 -> Bool\nprop_right_pad_low_8_64 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightPadLow8_64) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow8_64))\n\nprop_right_pad_low_16_64 :: W.Word16 -> Bool\nprop_right_pad_low_16_64 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet RightPadLow16_64) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow16_64))\n\nprop_right_pad_low_32_64 :: W.Word32 -> Bool\nprop_right_pad_low_32_64 = \\x -> let input = toW32 x\n                                in fastF input == implementation (WordJet RightPadLow32_64) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadLow32_64))\n\nprop_right_pad_high_1_8 :: Bool -> Bool\nprop_right_pad_high_1_8 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadHigh1_8) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_8))\n\nprop_right_pad_high_1_16 :: Bool -> Bool\nprop_right_pad_high_1_16 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadHigh1_16) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_16))\n\nprop_right_pad_high_8_16 :: W.Word8 -> Bool\nprop_right_pad_high_8_16 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightPadHigh8_16) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh8_16))\n\nprop_right_pad_high_1_32 :: Bool -> Bool\nprop_right_pad_high_1_32 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadHigh1_32) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_32))\n\nprop_right_pad_high_8_32 :: W.Word8 -> Bool\nprop_right_pad_high_8_32 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightPadHigh8_32) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh8_32))\n\nprop_right_pad_high_16_32 :: W.Word16 -> Bool\nprop_right_pad_high_16_32 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet RightPadHigh16_32) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh16_32))\n\nprop_right_pad_high_1_64 :: Bool -> Bool\nprop_right_pad_high_1_64 = \\x -> let input = toBit x\n                                in fastF input == implementation (WordJet RightPadHigh1_64) input\n where\n  fastF = testCoreEval (specification (WordJet RightPadHigh1_64))\n\nprop_right_pad_high_8_64 :: W.Word8 -> Bool\nprop_right_pad_high_8_64 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightPadHigh8_64) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh8_64))\n\nprop_right_pad_high_16_64 :: W.Word16 -> Bool\nprop_right_pad_high_16_64 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet RightPadHigh16_64) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh16_64))\n\nprop_right_pad_high_32_64 :: W.Word32 -> Bool\nprop_right_pad_high_32_64 = \\x -> let input = toW32 x\n                                in fastF input == implementation (WordJet RightPadHigh32_64) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightPadHigh32_64))\n\nprop_right_extend_8_16 :: W.Word8 -> Bool\nprop_right_extend_8_16 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightExtend8_16) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend8_16))\n\nprop_right_extend_8_32 :: W.Word8 -> Bool\nprop_right_extend_8_32 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightExtend8_32) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend8_32))\n\nprop_right_extend_16_32 :: W.Word16 -> Bool\nprop_right_extend_16_32 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet RightExtend16_32) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend16_32))\n\nprop_right_extend_8_64 :: W.Word8 -> Bool\nprop_right_extend_8_64 = \\x -> let input = toW8 x\n                                in fastF input == implementation (WordJet RightExtend8_64) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend8_64))\n\nprop_right_extend_16_64 :: W.Word16 -> Bool\nprop_right_extend_16_64 = \\x -> let input = toW16 x\n                                in fastF input == implementation (WordJet RightExtend16_64) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend16_64))\n\nprop_right_extend_32_64 :: W.Word32 -> Bool\nprop_right_extend_32_64 = \\x -> let input = toW32 x\n                                in fastF input == implementation (WordJet RightExtend32_64) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightExtend32_64))\n\nprop_left_shift_with_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_left_shift_with_8 = \\w x y -> let input = (toBit w, (toW4 x, toW8 y))\n                                  in fastF input == implementation (WordJet LeftShiftWith8) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith8))\n\nprop_left_shift_with_16 :: Bool -> W.Word8 -> W.Word16 -> Bool\nprop_left_shift_with_16 = \\w x y -> let input = (toBit w, (toW4 x, toW16 y))\n                                  in fastF input == implementation (WordJet LeftShiftWith16) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith16))\n\nprop_left_shift_with_32 :: Bool -> W.Word8 -> W.Word32 -> Bool\nprop_left_shift_with_32 = \\w x y -> let input = (toBit w, (toW8 x, toW32 y))\n                                  in fastF input == implementation (WordJet LeftShiftWith32) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith32))\n\nprop_left_shift_with_64 :: Bool -> W.Word8 -> W.Word64 -> Bool\nprop_left_shift_with_64 = \\w x y -> let input = (toBit w, (toW8 x, toW64 y))\n                                  in fastF input == implementation (WordJet LeftShiftWith64) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShiftWith64))\n\nprop_left_shift_8 :: W.Word8 -> W.Word8 -> Bool\nprop_left_shift_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == implementation (WordJet LeftShift8) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift8))\n\nprop_left_shift_16 :: W.Word8 -> W.Word16 -> Bool\nprop_left_shift_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == implementation (WordJet LeftShift16) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift16))\n\nprop_left_shift_32 :: W.Word8 -> W.Word32 -> Bool\nprop_left_shift_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == implementation (WordJet LeftShift32) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift32))\n\nprop_left_shift_64 :: W.Word8 -> W.Word64 -> Bool\nprop_left_shift_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == implementation (WordJet LeftShift64) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftShift64))\n\nprop_right_shift_with_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_right_shift_with_8 = \\w x y -> let input = (toBit w, (toW4 x, toW8 y))\n                                  in fastF input == implementation (WordJet RightShiftWith8) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith8))\n\nprop_right_shift_with_16 :: Bool -> W.Word8 -> W.Word16 -> Bool\nprop_right_shift_with_16 = \\w x y -> let input = (toBit w, (toW4 x, toW16 y))\n                                  in fastF input == implementation (WordJet RightShiftWith16) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith16))\n\nprop_right_shift_with_32 :: Bool -> W.Word8 -> W.Word32 -> Bool\nprop_right_shift_with_32 = \\w x y -> let input = (toBit w, (toW8 x, toW32 y))\n                                  in fastF input == implementation (WordJet RightShiftWith32) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith32))\n\nprop_right_shift_with_64 :: Bool -> W.Word8 -> W.Word64 -> Bool\nprop_right_shift_with_64 = \\w x y -> let input = (toBit w, (toW8 x, toW64 y))\n                                  in fastF input == implementation (WordJet RightShiftWith64) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShiftWith64))\n\nprop_right_shift_8 :: W.Word8 -> W.Word8 -> Bool\nprop_right_shift_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == implementation (WordJet RightShift8) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift8))\n\nprop_right_shift_16 :: W.Word8 -> W.Word16 -> Bool\nprop_right_shift_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == implementation (WordJet RightShift16) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift16))\n\nprop_right_shift_32 :: W.Word8 -> W.Word32 -> Bool\nprop_right_shift_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == implementation (WordJet RightShift32) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift32))\n\nprop_right_shift_64 :: W.Word8 -> W.Word64 -> Bool\nprop_right_shift_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == implementation (WordJet RightShift64) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightShift64))\n\nprop_left_rotate_8 :: W.Word8 -> W.Word8 -> Bool\nprop_left_rotate_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == implementation (WordJet LeftRotate8) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate8))\n\nprop_left_rotate_16 :: W.Word8 -> W.Word16 -> Bool\nprop_left_rotate_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == implementation (WordJet LeftRotate16) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate16))\n\nprop_left_rotate_32 :: W.Word8 -> W.Word32 -> Bool\nprop_left_rotate_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == implementation (WordJet LeftRotate32) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate32))\n\nprop_left_rotate_64 :: W.Word8 -> W.Word64 -> Bool\nprop_left_rotate_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == implementation (WordJet LeftRotate64) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet LeftRotate64))\n\nprop_right_rotate_8 :: W.Word8 -> W.Word8 -> Bool\nprop_right_rotate_8 = \\x y -> let input = (toW4 x, toW8 y)\n                             in fastF input == implementation (WordJet RightRotate8) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate8))\n\nprop_right_rotate_16 :: W.Word8 -> W.Word16 -> Bool\nprop_right_rotate_16 = \\x y -> let input = (toW4 x, toW16 y)\n                              in fastF input == implementation (WordJet RightRotate16) input\n where\n  toW4 = toWord4 . fromIntegral\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate16))\n\nprop_right_rotate_32 :: W.Word8 -> W.Word32 -> Bool\nprop_right_rotate_32 = \\x y -> let input = (toW8 x, toW32 y)\n                              in fastF input == implementation (WordJet RightRotate32) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate32))\n\nprop_right_rotate_64 :: W.Word8 -> W.Word64 -> Bool\nprop_right_rotate_64 = \\x y -> let input = (toW8 x, toW64 y)\n                              in fastF input == implementation (WordJet RightRotate64) input\n where\n  toW8 = toWord8 . fromIntegral\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (WordJet RightRotate64))\n\nassert_one_8 :: Assertion\nassert_one_8 = fastF () @=? implementation (ArithJet One8) ()\n where\n  fastF = testCoreEval (specification (ArithJet One8))\n\nassert_one_16 :: Assertion\nassert_one_16 = fastF () @=? implementation (ArithJet One16) ()\n where\n  fastF = testCoreEval (specification (ArithJet One16))\n\nassert_one_32 :: Assertion\nassert_one_32 = fastF () @=? implementation (ArithJet One32) ()\n where\n  fastF = testCoreEval (specification (ArithJet One32))\n\nassert_one_64 :: Assertion\nassert_one_64 = fastF () @=? implementation (ArithJet One64) ()\n where\n  fastF = testCoreEval (specification (ArithJet One64))\n\nprop_add_8 :: W.Word8 -> W.Word8 -> Bool\nprop_add_8 = \\x y -> let input = (toW8 x, toW8 y)\n                      in fastF input == implementation (ArithJet Add8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add8))\n\nprop_add_16 :: W.Word16 -> W.Word16 -> Bool\nprop_add_16 = \\x y -> let input = (toW16 x, toW16 y)\n                       in fastF input == implementation (ArithJet Add16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add16))\n\nprop_add_32 :: W.Word32 -> W.Word32 -> Bool\nprop_add_32 = \\x y -> let input = (toW32 x, toW32 y)\n                       in fastF input == implementation (ArithJet Add32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add32))\n\nprop_add_64 :: W.Word64 -> W.Word64 -> Bool\nprop_add_64 = \\x y -> let input = (toW64 x, toW64 y)\n                       in fastF input == implementation (ArithJet Add64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Add64))\n\nprop_full_add_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_full_add_8 = \\c x y -> let input = (toBit c, (toW8 x, toW8 y))\n                             in fastF input == implementation (ArithJet FullAdd8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd8))\n\nprop_full_add_16 :: Bool -> W.Word16 -> W.Word16 -> Bool\nprop_full_add_16 = \\c x y -> let input = (toBit c, (toW16 x, toW16 y))\n                              in fastF input == implementation (ArithJet FullAdd16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd16))\n\nprop_full_add_32 :: Bool -> W.Word32 -> W.Word32 -> Bool\nprop_full_add_32 = \\c x y -> let input = (toBit c, (toW32 x, toW32 y))\n                              in fastF input == implementation (ArithJet FullAdd32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd32))\n\nprop_full_add_64 :: Bool -> W.Word64 -> W.Word64 -> Bool\nprop_full_add_64 = \\c x y -> let input = (toBit c, (toW64 x, toW64 y))\n                              in fastF input == implementation (ArithJet FullAdd64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullAdd64))\n\nprop_full_increment_8 :: Bool -> W.Word8 -> Bool\nprop_full_increment_8 = \\b x -> let input = (toBit b, toW8 x)\n                                in fastF input == implementation (ArithJet FullIncrement8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement8))\n\nprop_full_increment_16 :: Bool -> W.Word16 -> Bool\nprop_full_increment_16 = \\b x -> let input = (toBit b, toW16 x)\n                                 in fastF input == implementation (ArithJet FullIncrement16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement16))\n\nprop_full_increment_32 :: Bool -> W.Word32 -> Bool\nprop_full_increment_32 = \\b x -> let input = (toBit b, toW32 x)\n                                 in fastF input == implementation (ArithJet FullIncrement32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement32))\n\nprop_full_increment_64 :: Bool -> W.Word64 -> Bool\nprop_full_increment_64 = \\b x -> let input = (toBit b, toW64 x)\n                                 in fastF input == implementation (ArithJet FullIncrement64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullIncrement64))\n\nassert_full_increment_max_8 :: Assertion\nassert_full_increment_max_8 = fastF input @=? implementation (ArithJet FullIncrement8) input\n where\n  input = (toBit True, toWord8 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement8))\n\nassert_full_increment_max_16 :: Assertion\nassert_full_increment_max_16 = fastF input @=? implementation (ArithJet FullIncrement16) input\n where\n  input = (toBit True, toWord16 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement16))\n\nassert_full_increment_max_32 :: Assertion\nassert_full_increment_max_32 = fastF input @=? implementation (ArithJet FullIncrement32) input\n where\n  input = (toBit True, toWord32 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement32))\n\nassert_full_increment_max_64 :: Assertion\nassert_full_increment_max_64 = fastF input @=? implementation (ArithJet FullIncrement64) input\n where\n  input = (toBit True, toWord64 (-1))\n  fastF = testCoreEval (specification (ArithJet FullIncrement64))\n\nprop_increment_8 :: W.Word8 -> Bool\nprop_increment_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (ArithJet Increment8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment8))\n\nprop_increment_16 :: W.Word16 -> Bool\nprop_increment_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (ArithJet Increment16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment16))\n\nprop_increment_32 :: W.Word32 -> Bool\nprop_increment_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (ArithJet Increment32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment32))\n\nprop_increment_64 :: W.Word64 -> Bool\nprop_increment_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (ArithJet Increment64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Increment64))\n\nassert_increment_max_8 :: Assertion\nassert_increment_max_8 = fastF input @=? implementation (ArithJet Increment8) input\n where\n  input = toWord8 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment8))\n\nassert_increment_max_16 :: Assertion\nassert_increment_max_16 = fastF input @=? implementation (ArithJet Increment16) input\n where\n  input = toWord16 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment16))\n\nassert_increment_max_32 :: Assertion\nassert_increment_max_32 = fastF input @=? implementation (ArithJet Increment32) input\n where\n  input = toWord32 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment32))\n\nassert_increment_max_64 :: Assertion\nassert_increment_max_64 = fastF input @=? implementation (ArithJet Increment64) input\n where\n  input = toWord64 (-1)\n  fastF = testCoreEval (specification (ArithJet Increment64))\n\nprop_subtract_8 :: W.Word8 -> W.Word8 -> Bool\nprop_subtract_8 = \\x y -> let input = (toW8 x, toW8 y)\n                           in fastF input == implementation (ArithJet Subtract8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract8))\n\nprop_subtract_16 :: W.Word16 -> W.Word16 -> Bool\nprop_subtract_16 = \\x y -> let input = (toW16 x, toW16 y)\n                            in fastF input == implementation (ArithJet Subtract16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract16))\n\nprop_subtract_32 :: W.Word32 -> W.Word32 -> Bool\nprop_subtract_32 = \\x y -> let input = (toW32 x, toW32 y)\n                            in fastF input == implementation (ArithJet Subtract32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract32))\n\nprop_subtract_64 :: W.Word64 -> W.Word64 -> Bool\nprop_subtract_64 = \\x y -> let input = (toW64 x, toW64 y)\n                            in fastF input == implementation (ArithJet Subtract64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Subtract64))\n\nprop_full_subtract_8 :: Bool -> W.Word8 -> W.Word8 -> Bool\nprop_full_subtract_8 = \\c x y -> let input = (toBit c, (toW8 x, toW8 y))\n                                  in fastF input == implementation (ArithJet FullSubtract8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract8))\n\nprop_full_subtract_16 :: Bool -> W.Word16 -> W.Word16 -> Bool\nprop_full_subtract_16 = \\c x y -> let input = (toBit c, (toW16 x, toW16 y))\n                                   in fastF input == implementation (ArithJet FullSubtract16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract16))\n\nprop_full_subtract_32 :: Bool -> W.Word32 -> W.Word32 -> Bool\nprop_full_subtract_32 = \\c x y -> let input = (toBit c, (toW32 x, toW32 y))\n                                   in fastF input == implementation (ArithJet FullSubtract32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract32))\n\nprop_full_subtract_64 :: Bool -> W.Word64 -> W.Word64 -> Bool\nprop_full_subtract_64 = \\c x y -> let input = (toBit c, (toW64 x, toW64 y))\n                                   in fastF input == implementation (ArithJet FullSubtract64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullSubtract64))\n\nprop_full_decrement_8 :: Bool -> W.Word8 -> Bool\nprop_full_decrement_8 = \\b x -> let input = (toBit b, toW8 x)\n                                in fastF input == implementation (ArithJet FullDecrement8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement8))\n\nprop_full_decrement_16 :: Bool -> W.Word16 -> Bool\nprop_full_decrement_16 = \\b x -> let input = (toBit b, toW16 x)\n                                 in fastF input == implementation (ArithJet FullDecrement16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement16))\n\nprop_full_decrement_32 :: Bool -> W.Word32 -> Bool\nprop_full_decrement_32 = \\b x -> let input = (toBit b, toW32 x)\n                                 in fastF input == implementation (ArithJet FullDecrement32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement32))\n\nprop_full_decrement_64 :: Bool -> W.Word64 -> Bool\nprop_full_decrement_64 = \\b x -> let input = (toBit b, toW64 x)\n                                 in fastF input == implementation (ArithJet FullDecrement64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullDecrement64))\n\nassert_full_decrement_zero_8 :: Assertion\nassert_full_decrement_zero_8 = fastF input @=? implementation (ArithJet FullDecrement8) input\n where\n  input = (toBit True, toWord8 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement8))\n\nassert_full_decrement_zero_16 :: Assertion\nassert_full_decrement_zero_16 = fastF input @=? implementation (ArithJet FullDecrement16) input\n where\n  input = (toBit True, toWord16 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement16))\n\nassert_full_decrement_zero_32 :: Assertion\nassert_full_decrement_zero_32 = fastF input @=? implementation (ArithJet FullDecrement32) input\n where\n  input = (toBit True, toWord32 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement32))\n\nassert_full_decrement_zero_64 :: Assertion\nassert_full_decrement_zero_64 = fastF input @=? implementation (ArithJet FullDecrement64) input\n where\n  input = (toBit True, toWord64 0)\n  fastF = testCoreEval (specification (ArithJet FullDecrement64))\n\nprop_decrement_8 :: W.Word8 -> Bool\nprop_decrement_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (ArithJet Decrement8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement8))\n\nprop_decrement_16 :: W.Word16 -> Bool\nprop_decrement_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (ArithJet Decrement16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement16))\n\nprop_decrement_32 :: W.Word32 -> Bool\nprop_decrement_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (ArithJet Decrement32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement32))\n\nprop_decrement_64 :: W.Word64 -> Bool\nprop_decrement_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (ArithJet Decrement64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Decrement64))\n\nassert_decrement_zero_8 :: Assertion\nassert_decrement_zero_8 = fastF input @=? implementation (ArithJet Decrement8) input\n where\n  input = toWord8 0\n  fastF = testCoreEval (specification (ArithJet Decrement8))\n\nassert_decrement_zero_16 :: Assertion\nassert_decrement_zero_16 = fastF input @=? implementation (ArithJet Decrement16) input\n where\n  input = toWord16 0\n  fastF = testCoreEval (specification (ArithJet Decrement16))\n\nassert_decrement_zero_32 :: Assertion\nassert_decrement_zero_32 = fastF input @=? implementation (ArithJet Decrement32) input\n where\n  input = toWord32 0\n  fastF = testCoreEval (specification (ArithJet Decrement32))\n\nassert_decrement_zero_64 :: Assertion\nassert_decrement_zero_64 = fastF input @=? implementation (ArithJet Decrement64) input\n where\n  input = toWord64 0\n  fastF = testCoreEval (specification (ArithJet Decrement64))\n\nprop_negate_8 :: W.Word8 -> Bool\nprop_negate_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (ArithJet Negate8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate8))\n\nprop_negate_16 :: W.Word16 -> Bool\nprop_negate_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (ArithJet Negate16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate16))\n\nprop_negate_32 :: W.Word32 -> Bool\nprop_negate_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (ArithJet Negate32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate32))\n\nprop_negate_64 :: W.Word64 -> Bool\nprop_negate_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (ArithJet Negate64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Negate64))\n\nprop_multiply_8 :: W.Word8 -> W.Word8 -> Bool\nprop_multiply_8 = \\x y -> let input = (toW8 x, toW8 y)\n                           in fastF input == implementation (ArithJet Multiply8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply8))\n\nprop_multiply_16 :: W.Word16 -> W.Word16 -> Bool\nprop_multiply_16 = \\x y -> let input = (toW16 x, toW16 y)\n                            in fastF input == implementation (ArithJet Multiply16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply16))\n\nprop_multiply_32 :: W.Word32 -> W.Word32 -> Bool\nprop_multiply_32 = \\x y -> let input = (toW32 x, toW32 y)\n                            in fastF input == implementation (ArithJet Multiply32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply32))\n\nprop_multiply_64 :: W.Word64 -> W.Word64 -> Bool\nprop_multiply_64 = \\x y -> let input = (toW64 x, toW64 y)\n                            in fastF input == implementation (ArithJet Multiply64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Multiply64))\n\nprop_full_multiply_8 :: W.Word8 -> W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_full_multiply_8 = \\x y z w -> let input = ((toW8 x, toW8 y), (toW8 z, toW8 w))\n                                    in fastF input == implementation (ArithJet FullMultiply8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply8))\n\nprop_full_multiply_16 :: W.Word16 -> W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_full_multiply_16 = \\x y z w -> let input = ((toW16 x, toW16 y), (toW16 z, toW16 w))\n                                     in fastF input == implementation (ArithJet FullMultiply16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply16))\n\nprop_full_multiply_32 :: W.Word32 -> W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_full_multiply_32 = \\x y z w -> let input = ((toW32 x, toW32 y), (toW32 z, toW32 w))\n                                     in fastF input == implementation (ArithJet FullMultiply32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply32))\n\nprop_full_multiply_64 :: W.Word64 -> W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_full_multiply_64 = \\x y z w -> let input = ((toW64 x, toW64 y), (toW64 z, toW64 w))\n                                     in fastF input == implementation (ArithJet FullMultiply64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet FullMultiply64))\n\nprop_is_zero_8 :: W.Word8 -> Bool\nprop_is_zero_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (ArithJet IsZero8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero8))\n\nprop_is_zero_16 :: W.Word16 -> Bool\nprop_is_zero_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (ArithJet IsZero16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero16))\n\nprop_is_zero_32 :: W.Word32 -> Bool\nprop_is_zero_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (ArithJet IsZero32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero32))\n\nprop_is_zero_64 :: W.Word64 -> Bool\nprop_is_zero_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (ArithJet IsZero64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsZero64))\n\nassert_zero_is_zero_8 :: Assertion\nassert_zero_is_zero_8 = fastF input @=? implementation (ArithJet IsZero8) input\n where\n  input = toWord8 0\n  fastF = testCoreEval (specification (ArithJet IsZero8))\n\nassert_zero_is_zero_16 :: Assertion\nassert_zero_is_zero_16 = fastF input @=? implementation (ArithJet IsZero16) input\n where\n  input = toWord16 0\n  fastF = testCoreEval (specification (ArithJet IsZero16))\n\nassert_zero_is_zero_32 :: Assertion\nassert_zero_is_zero_32 = fastF input @=? implementation (ArithJet IsZero32) input\n where\n  input = toWord32 0\n  fastF = testCoreEval (specification (ArithJet IsZero32))\n\nassert_zero_is_zero_64 :: Assertion\nassert_zero_is_zero_64 = fastF input @=? implementation (ArithJet IsZero64) input\n where\n  input = toWord64 0\n  fastF = testCoreEval (specification (ArithJet IsZero64))\n\nprop_is_one_8 :: W.Word8 -> Bool\nprop_is_one_8 = \\x -> let input = toW8 x\n                       in fastF input == implementation (ArithJet IsOne8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne8))\n\nprop_is_one_16 :: W.Word16 -> Bool\nprop_is_one_16 = \\x -> let input = toW16 x\n                        in fastF input == implementation (ArithJet IsOne16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne16))\n\nprop_is_one_32 :: W.Word32 -> Bool\nprop_is_one_32 = \\x -> let input = toW32 x\n                        in fastF input == implementation (ArithJet IsOne32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne32))\n\nprop_is_one_64 :: W.Word64 -> Bool\nprop_is_one_64 = \\x -> let input = toW64 x\n                        in fastF input == implementation (ArithJet IsOne64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet IsOne64))\n\nassert_one_is_one_8 :: Assertion\nassert_one_is_one_8 = fastF input @=? implementation (ArithJet IsOne8) input\n where\n  input = toWord8 1\n  fastF = testCoreEval (specification (ArithJet IsOne8))\n\nassert_one_is_one_16 :: Assertion\nassert_one_is_one_16 = fastF input @=? implementation (ArithJet IsOne16) input\n where\n  input = toWord16 1\n  fastF = testCoreEval (specification (ArithJet IsOne16))\n\nassert_one_is_one_32 :: Assertion\nassert_one_is_one_32 = fastF input @=? implementation (ArithJet IsOne32) input\n where\n  input = toWord32 1\n  fastF = testCoreEval (specification (ArithJet IsOne32))\n\nassert_one_is_one_64 :: Assertion\nassert_one_is_one_64 = fastF input @=? implementation (ArithJet IsOne64) input\n where\n  input = toWord64 1\n  fastF = testCoreEval (specification (ArithJet IsOne64))\n\nprop_le_8 :: W.Word8 -> W.Word8 -> Bool\nprop_le_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet Le8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le8))\n\nprop_le_16 :: W.Word16 -> W.Word16 -> Bool\nprop_le_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet Le16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le16))\n\nprop_le_32 :: W.Word32 -> W.Word32 -> Bool\nprop_le_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet Le32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le32))\n\nprop_le_64 :: W.Word64 -> W.Word64 -> Bool\nprop_le_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet Le64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le64))\n\nprop_le_diag_8 :: W.Word8 -> Bool\nprop_le_diag_8 = \\x -> let input = (toW8 x, toW8 x)\n                         in fastF input == implementation (ArithJet Le8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le8))\n\nprop_le_diag_16 :: W.Word16 -> Bool\nprop_le_diag_16 = \\x -> let input = (toW16 x, toW16 x)\n                         in fastF input == implementation (ArithJet Le16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le16))\n\nprop_le_diag_32 :: W.Word32 -> Bool\nprop_le_diag_32 = \\x -> let input = (toW32 x, toW32 x)\n                         in fastF input == implementation (ArithJet Le32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le32))\n\nprop_le_diag_64 :: W.Word64 -> Bool\nprop_le_diag_64 = \\x -> let input = (toW64 x, toW64 x)\n                         in fastF input == implementation (ArithJet Le64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Le64))\n\nprop_lt_8 :: W.Word8 -> W.Word8 -> Bool\nprop_lt_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet Lt8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt8))\n\nprop_lt_16 :: W.Word16 -> W.Word16 -> Bool\nprop_lt_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet Lt16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt16))\n\nprop_lt_32 :: W.Word32 -> W.Word32 -> Bool\nprop_lt_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet Lt32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt32))\n\nprop_lt_64 :: W.Word64 -> W.Word64 -> Bool\nprop_lt_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet Lt64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt64))\n\nprop_lt_diag_8 :: W.Word8 -> Bool\nprop_lt_diag_8 = \\x -> let input = (toW8 x, toW8 x)\n                         in fastF input == implementation (ArithJet Lt8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt8))\n\nprop_lt_diag_16 :: W.Word16 -> Bool\nprop_lt_diag_16 = \\x -> let input = (toW16 x, toW16 x)\n                         in fastF input == implementation (ArithJet Lt16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt16))\n\nprop_lt_diag_32 :: W.Word32 -> Bool\nprop_lt_diag_32 = \\x -> let input = (toW32 x, toW32 x)\n                         in fastF input == implementation (ArithJet Lt32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt32))\n\nprop_lt_diag_64 :: W.Word64 -> Bool\nprop_lt_diag_64 = \\x -> let input = (toW64 x, toW64 x)\n                         in fastF input == implementation (ArithJet Lt64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Lt64))\n\nprop_min_8 :: W.Word8 -> W.Word8 -> Bool\nprop_min_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet Min8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min8))\n\nprop_min_16 :: W.Word16 -> W.Word16 -> Bool\nprop_min_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet Min16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min16))\n\nprop_min_32 :: W.Word32 -> W.Word32 -> Bool\nprop_min_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet Min32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min32))\n\nprop_min_64 :: W.Word64 -> W.Word64 -> Bool\nprop_min_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet Min64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Min64))\n\nprop_max_8 :: W.Word8 -> W.Word8 -> Bool\nprop_max_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet Max8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max8))\n\nprop_max_16 :: W.Word16 -> W.Word16 -> Bool\nprop_max_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet Max16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max16))\n\nprop_max_32 :: W.Word32 -> W.Word32 -> Bool\nprop_max_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet Max32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max32))\n\nprop_max_64 :: W.Word64 -> W.Word64 -> Bool\nprop_max_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet Max64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Max64))\n\nprop_median_8 :: W.Word8 -> W.Word8 -> W.Word8 -> Bool\nprop_median_8 = \\x y z -> let input = (toW8 x, (toW8 y, toW8 z))\n                     in fastF input == implementation (ArithJet Median8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median8))\n\nprop_median_16 :: W.Word16 -> W.Word16 -> W.Word16 -> Bool\nprop_median_16 = \\x y z -> let input = (toW16 x, (toW16 y, toW16 z))\n                      in fastF input == implementation (ArithJet Median16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median16))\n\nprop_median_32 :: W.Word32 -> W.Word32 -> W.Word32 -> Bool\nprop_median_32 = \\x y z -> let input = (toW32 x, (toW32 y, toW32 z))\n                      in fastF input == implementation (ArithJet Median32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median32))\n\nprop_median_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_median_64 = \\x y z -> let input = (toW64 x, (toW64 y, toW64 z))\n                      in fastF input == implementation (ArithJet Median64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Median64))\n\nprop_div_mod_8 :: W.Word8 -> W.Word8 -> Bool\nprop_div_mod_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet DivMod8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod8))\n\nprop_div_mod_16 :: W.Word16 -> W.Word16 -> Bool\nprop_div_mod_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet DivMod16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod16))\n\nprop_div_mod_32 :: W.Word32 -> W.Word32 -> Bool\nprop_div_mod_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet DivMod32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod32))\n\nprop_div_mod_64 :: W.Word64 -> W.Word64 -> Bool\nprop_div_mod_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet DivMod64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod64))\n\nprop_divide_8 :: W.Word8 -> W.Word8 -> Bool\nprop_divide_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet Divide8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide8))\n\nprop_divide_16 :: W.Word16 -> W.Word16 -> Bool\nprop_divide_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet Divide16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide16))\n\nprop_divide_32 :: W.Word32 -> W.Word32 -> Bool\nprop_divide_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet Divide32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide32))\n\nprop_divide_64 :: W.Word64 -> W.Word64 -> Bool\nprop_divide_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet Divide64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide64))\n\nprop_modulo_8 :: W.Word8 -> W.Word8 -> Bool\nprop_modulo_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet Modulo8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo8))\n\nprop_modulo_16 :: W.Word16 -> W.Word16 -> Bool\nprop_modulo_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet Modulo16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo16))\n\nprop_modulo_32 :: W.Word32 -> W.Word32 -> Bool\nprop_modulo_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet Modulo32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo32))\n\nprop_modulo_64 :: W.Word64 -> W.Word64 -> Bool\nprop_modulo_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet Modulo64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo64))\n\nprop_divides_8 :: W.Word8 -> W.Word8 -> Bool\nprop_divides_8 = \\x y -> let input = (toW8 x, toW8 y)\n                     in fastF input == implementation (ArithJet Divides8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides8))\n\nprop_divides_16 :: W.Word16 -> W.Word16 -> Bool\nprop_divides_16 = \\x y -> let input = (toW16 x, toW16 y)\n                      in fastF input == implementation (ArithJet Divides16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides16))\n\nprop_divides_32 :: W.Word32 -> W.Word32 -> Bool\nprop_divides_32 = \\x y -> let input = (toW32 x, toW32 y)\n                      in fastF input == implementation (ArithJet Divides32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides32))\n\nprop_divides_64 :: W.Word64 -> W.Word64 -> Bool\nprop_divides_64 = \\x y -> let input = (toW64 x, toW64 y)\n                      in fastF input == implementation (ArithJet Divides64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides64))\n\nprop_div_mod_zero_8 :: W.Word8 -> Bool\nprop_div_mod_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == implementation (ArithJet DivMod8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod8))\n\nprop_div_mod_zero_16 :: W.Word16 -> Bool\nprop_div_mod_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == implementation (ArithJet DivMod16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod16))\n\nprop_div_mod_zero_32 :: W.Word32 -> Bool\nprop_div_mod_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == implementation (ArithJet DivMod32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod32))\n\nprop_div_mod_zero_64 :: W.Word64 -> Bool\nprop_div_mod_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == implementation (ArithJet DivMod64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod64))\n\nprop_divide_zero_8 :: W.Word8 -> Bool\nprop_divide_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == implementation (ArithJet Divide8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide8))\n\nprop_divide_zero_16 :: W.Word16 -> Bool\nprop_divide_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == implementation (ArithJet Divide16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide16))\n\nprop_divide_zero_32 :: W.Word32 -> Bool\nprop_divide_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == implementation (ArithJet Divide32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide32))\n\nprop_divide_zero_64 :: W.Word64 -> Bool\nprop_divide_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == implementation (ArithJet Divide64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divide64))\n\nprop_modulo_zero_8 :: W.Word8 -> Bool\nprop_modulo_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == implementation (ArithJet Modulo8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo8))\n\nprop_modulo_zero_16 :: W.Word16 -> Bool\nprop_modulo_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == implementation (ArithJet Modulo16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo16))\n\nprop_modulo_zero_32 :: W.Word32 -> Bool\nprop_modulo_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == implementation (ArithJet Modulo32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo32))\n\nprop_modulo_zero_64 :: W.Word64 -> Bool\nprop_modulo_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == implementation (ArithJet Modulo64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Modulo64))\n\nprop_divides_zero_8 :: W.Word8 -> Bool\nprop_divides_zero_8 = \\x -> let input = (toW8 x, toW8 0)\n                     in fastF input == implementation (ArithJet Divides8) input\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides8))\n\nprop_divides_zero_16 :: W.Word16 -> Bool\nprop_divides_zero_16 = \\x -> let input = (toW16 x, toW16 0)\n                      in fastF input == implementation (ArithJet Divides16) input\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides16))\n\nprop_divides_zero_32 :: W.Word32 -> Bool\nprop_divides_zero_32 = \\x -> let input = (toW32 x, toW32 0)\n                      in fastF input == implementation (ArithJet Divides32) input\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides32))\n\nprop_divides_zero_64 :: W.Word64 -> Bool\nprop_divides_zero_64 = \\x -> let input = (toW64 x, toW64 0)\n                      in fastF input == implementation (ArithJet Divides64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet Divides64))\n\nprop_div_mod_128_64 :: W.Word64 -> W.Word64 -> W.Word64 -> Property\nprop_div_mod_128_64 = \\xh0 xl0 y0 ->\n  let y = y0 .|. 2^63\n      xh = y - 1 - xh0 `mod` y\n      xl = - xl0\n      input = ((toW64 xh, toW64 xl), toW64 y)\n      x = toInteger xh * 2^64 + toInteger xl\n      qh = (x `div` 2^32) `div` toInteger y\n      approxQh = toInteger xh `div` (toInteger y `div` 2^32)\n      annotate | 2^32 <= approxQh = label \"high approxQh\"\n               | otherwise = label (\"deltaQh: \" ++ show (approxQh -qh))\n   in annotate $ fastF input == implementation (ArithJet DivMod128_64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod128_64))\n\nprop_div_mod_128_64_low_y :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_div_mod_128_64_low_y = \\xh0 xl0 y0 ->\n  let y = y0 `mod` 2^63\n      xh = y - xh0 `mod` (y + 1)\n      xl = - xl0\n      input = ((toW64 xh, toW64 xl), toW64 y)\n   in fastF input == implementation (ArithJet DivMod128_64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod128_64))\n\nprop_div_mod_128_64_high_x :: W.Word64 -> W.Word64 -> W.Word64 -> Bool\nprop_div_mod_128_64_high_x = \\xh0 xl0 y0 ->\n  let y = y0\n      xh = - xh0\n      xl = - xl0\n      input = ((toW64 xh, toW64 xl), toW64 y)\n   in fastF input == implementation (ArithJet DivMod128_64) input\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (ArithJet DivMod128_64))\n\nassert_sha_256_iv :: Assertion\nassert_sha_256_iv = fastF () @=? implementation (HashJet Sha256Iv) ()\n where\n  fastF = testCoreEval (specification (HashJet Sha256Iv))\n\nprop_sha_256_block :: HashElement -> HashElement -> HashElement -> Bool\nprop_sha_256_block = \\h b1 b2 ->\n  let input = (heAsTy h, (heAsTy b1, heAsTy b2))\n  in implementation (HashJet Sha256Block) input == fastF input\n where\n  fastF = testCoreEval (specification (HashJet Sha256Block))\n\nassert_sha_256_ctx_8_init :: Assertion\nassert_sha_256_ctx_8_init = fastF () @=? implementation (HashJet Sha256Ctx8Init) ()\n where\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Init))\n\nprop_sha_256_ctx_8_add_1 :: Sha256CtxElement -> W.Word8 -> Bool\nprop_sha_256_ctx_8_add_1 = \\ce w -> fastF (ctxAsTy ce, toW8 w) == implementation (HashJet Sha256Ctx8Add1) (ctxAsTy ce, toW8 w)\n where\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add1))\n\nprop_sha_256_ctx_8_add_2 :: Sha256CtxElement -> W.Word16 -> Bool\nprop_sha_256_ctx_8_add_2 = \\ce w -> fastF (ctxAsTy ce, toW16 w) == implementation (HashJet Sha256Ctx8Add2) (ctxAsTy ce, toW16 w)\n where\n  toW16 = toWord16 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add2))\n\nprop_sha_256_ctx_8_add_4 :: Sha256CtxElement -> W.Word32 -> Bool\nprop_sha_256_ctx_8_add_4 = \\ce w -> fastF (ctxAsTy ce, toW32 w) == implementation (HashJet Sha256Ctx8Add4) (ctxAsTy ce, toW32 w)\n where\n  toW32 = toWord32 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add4))\n\nprop_sha_256_ctx_8_add_8 :: Sha256CtxElement -> W.Word64 -> Bool\nprop_sha_256_ctx_8_add_8 = \\ce w -> fastF (ctxAsTy ce, toW64 w) == implementation (HashJet Sha256Ctx8Add8) (ctxAsTy ce, toW64 w)\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add8))\n\nprop_sha_256_ctx_8_add_16 :: Sha256CtxElement -> (W.Word64, W.Word64) -> Bool\nprop_sha_256_ctx_8_add_16 = \\ce (w1, w2) -> fastF (ctxAsTy ce, (toW64 w1, toW64 w2)) == implementation (HashJet Sha256Ctx8Add16) (ctxAsTy ce, (toW64 w1, toW64 w2))\n where\n  toW64 = toWord64 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add16))\n\nprop_sha_256_ctx_8_add_32 :: Sha256CtxElement -> W.Word256 -> Bool\nprop_sha_256_ctx_8_add_32 = \\ce w -> fastF (ctxAsTy ce, toW256 w) == implementation (HashJet Sha256Ctx8Add32) (ctxAsTy ce, toW256 w)\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add32))\n\nprop_sha_256_ctx_8_add_64 :: Sha256CtxElement -> (W.Word256, W.Word256) -> Bool\nprop_sha_256_ctx_8_add_64 = \\ce (w1, w2) -> fastF (ctxAsTy ce, (toW256 w1, toW256 w2)) == implementation (HashJet Sha256Ctx8Add64) (ctxAsTy ce, (toW256 w1, toW256 w2))\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add64))\n\nprop_sha_256_ctx_8_add_128 :: Sha256CtxElement -> ((W.Word256, W.Word256), (W.Word256, W.Word256)) -> Bool\nprop_sha_256_ctx_8_add_128 = \\ce ws ->\n   let input = (ctxAsTy ce, over (both_.both_) toW256 ws)\n   in fastF input == implementation (HashJet Sha256Ctx8Add128) input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add128))\n\nprop_sha_256_ctx_8_add_256 :: Sha256CtxElement -> (((W.Word256, W.Word256), (W.Word256, W.Word256)), ((W.Word256, W.Word256), (W.Word256, W.Word256))) -> Bool\nprop_sha_256_ctx_8_add_256 = \\ce ws ->\n   let input = (ctxAsTy ce, over (both_.both_.both_) toW256 ws)\n   in fastF input == implementation (HashJet Sha256Ctx8Add256) input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add256))\n\nprop_sha_256_ctx_8_add_512 :: Sha256CtxElement -> ((((W.Word256, W.Word256), (W.Word256, W.Word256)), ((W.Word256, W.Word256), (W.Word256, W.Word256))),\n                                                   (((W.Word256, W.Word256), (W.Word256, W.Word256)), ((W.Word256, W.Word256), (W.Word256, W.Word256)))) -> Bool\nprop_sha_256_ctx_8_add_512 = \\ce ws ->\n   let input = (ctxAsTy ce, over (both_.both_.both_.both_) toW256 ws)\n   in fastF input == implementation (HashJet Sha256Ctx8Add512) input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Add512))\n\nprop_sha_256_ctx_8_add_buffer_511 :: Int -> Sha256CtxElement -> Property\nprop_sha_256_ctx_8_add_buffer_511 = \\preLen ce -> forAll (vectorOf (preLen `mod` 512) arbitraryBoundedIntegral)\n                                  $ \\ws -> let input = (ctxAsTy ce, fst $ bufferFill buffer511 (toW8 <$> ws))\n                                           in fastF input == implementation (HashJet Sha256Ctx8AddBuffer511) input\n where\n  toW8 :: W.Word8 -> Word8\n  toW8 = toWord8 . fromIntegral\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8AddBuffer511))\n\nprop_sha_256_ctx_8_finalize :: Sha256CtxElement -> Bool\nprop_sha_256_ctx_8_finalize = \\ce -> fastF (ctxAsTy ce) == implementation (HashJet Sha256Ctx8Finalize) (ctxAsTy ce)\n where\n  fastF = testCoreEval (specification (HashJet Sha256Ctx8Finalize))\n\nprop_fe_normalize :: FieldElement -> Bool\nprop_fe_normalize a = fe_normalize (feAsTy a) == toFE (feAsSpec a)\n\nfe_unary_prop f g = \\a -> fastF (feAsTy a) == Just (toFE (g (feAsSpec a)))\n where\n  fastF = testCoreEval f\n\nfe_binary_prop f g = \\a b -> fastF (feAsTy a, feAsTy b) == Just (toFE (g (feAsSpec a) (feAsSpec b)))\n where\n  fastF = testCoreEval f\n\nprop_fe_add :: FieldElement -> FieldElement -> Bool\nprop_fe_add = fe_binary_prop fe_add Spec.fe_add\n\nprop_fe_multiply :: FieldElement -> FieldElement -> Bool\nprop_fe_multiply = fe_binary_prop fe_multiply Spec.fe_multiply\n\nprop_fe_square :: FieldElement -> Bool\nprop_fe_square = fe_unary_prop fe_square Spec.fe_square\n\nprop_fe_negate :: FieldElement -> Bool\nprop_fe_negate = fe_unary_prop fe_negate Spec.fe_negate\n\nprop_fe_halve :: FieldElement -> Bool\nprop_fe_halve = fe_unary_prop fe_halve Spec.fe_halve\n\nprop_fe_invert :: FieldElement -> Bool\nprop_fe_invert = fe_unary_prop fe_invert Spec.fe_invert\n\nprop_fe_square_root :: FieldElement -> Bool\nprop_fe_square_root = \\a -> fastSqrt (feAsTy a) == Just ((fmap toFE . maybeToTy) (Spec.fe_square_root (feAsSpec a)))\n where\n  fastSqrt = testCoreEval fe_square_root\n\nprop_gej_rescale :: GroupElementJacobian -> FieldElement -> Bool\nprop_gej_rescale = \\a c -> fast_gej_rescale (gejAsTy a, feAsTy c) == Just (toGEJ (Spec.gej_rescale (gejAsSpec a) (feAsSpec c)))\n where\n  fast_gej_rescale = testCoreEval gej_rescale\n\nprop_gej_rescale_inf :: FieldElement -> Property\nprop_gej_rescale_inf c = forAll gen_inf $ flip prop_gej_rescale c\n\nprop_gej_double :: GroupElementJacobian -> Bool\nprop_gej_double = \\a -> fast_gej_double (gejAsTy a) == Just (toGEJ (Spec.gej_double (gejAsSpec a)))\n where\n  fast_gej_double = testCoreEval gej_double\n\nprop_gej_double_inf :: Property\nprop_gej_double_inf = forAll gen_inf $ prop_gej_double\n\nprop_gej_add_ex :: GroupElementJacobian -> GroupElementJacobian -> Bool\nprop_gej_add_ex = \\a b ->\n  let rzc = fast_gej_add_ex (gejAsTy a, gejAsTy b)\n      (rz', c') = Spec.gej_add_ex (gejAsSpec a) (gejAsSpec b)\n  in (fst <$> rzc) == Just (toFE rz') && (snd <$> rzc) == Just (toGEJ c')\n where\n  fast_gej_add_ex = testCoreEval gej_add_ex\n\nprop_gej_add_ex_double :: FieldElement -> GroupElementJacobian -> Bool\nprop_gej_add_ex_double z b@(GroupElementJacobian bx by bz) = prop_gej_add_ex a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  bz' = feAsSpec bz\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack $ by' .*. z' .^. 3)\n                           (FieldElement . Spec.fe_pack $ bz' .*. z')\n\nprop_gej_add_ex_opp :: FieldElement -> GroupElementJacobian -> Bool\nprop_gej_add_ex_opp z b@(GroupElementJacobian bx by bz) = prop_gej_add_ex a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  bz' = feAsSpec bz\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack . Spec.fe_negate $ by' .*. z' .^. 3)\n                           (FieldElement . Spec.fe_pack $ bz' .*. z')\n\nprop_gej_add_ex_infl b = forAll gen_inf $ \\a -> prop_gej_add_ex a b\nprop_gej_add_ex_infr a = forAll gen_inf $ \\b -> prop_gej_add_ex a b\n\nprop_gej_add :: GroupElementJacobian -> GroupElementJacobian -> Bool\nprop_gej_add = \\a b -> fast_gej_add (gejAsTy a, gejAsTy b) == Just (toGEJ (gejAsSpec a <> gejAsSpec b))\n where\n  fast_gej_add = testCoreEval gej_add\n\nprop_gej_add_double :: FieldElement -> GroupElementJacobian -> Bool\nprop_gej_add_double z b@(GroupElementJacobian bx by bz) = prop_gej_add a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  bz' = feAsSpec bz\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack $ by' .*. z' .^. 3)\n                           (FieldElement . Spec.fe_pack $ bz' .*. z')\n\nprop_gej_add_opp :: FieldElement -> GroupElementJacobian -> Bool\nprop_gej_add_opp z b@(GroupElementJacobian bx by bz) = prop_gej_add a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  bz' = feAsSpec bz\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack . Spec.fe_negate $ by' .*. z' .^. 3)\n                           (FieldElement . Spec.fe_pack $ bz' .*. z')\n\nprop_gej_add_infl b = forAll gen_inf $ \\a -> prop_gej_add a b\nprop_gej_add_infr a = forAll gen_inf $ \\b -> prop_gej_add a b\n\nprop_gej_ge_add_ex :: GroupElementJacobian -> GroupElement -> Bool\nprop_gej_ge_add_ex = \\a b ->\n  let rzc = fast_gej_ge_add_ex (gejAsTy a, geAsTy b)\n      (rz', c') = Spec.gej_ge_add_ex (gejAsSpec a) (geAsSpec b)\n  in (fst <$> rzc) == Just (toFE rz') && (snd <$> rzc) == Just (toGEJ c')\n where\n  fast_gej_ge_add_ex = testCoreEval gej_ge_add_ex\n\nprop_gej_ge_add_ex_double :: FieldElement -> GroupElement -> Bool\nprop_gej_ge_add_ex_double z b@(GroupElement bx by) = prop_gej_ge_add_ex a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack $ by' .*. z' .^. 3)\n                           z\n\nprop_gej_ge_add_ex_opp :: FieldElement -> GroupElement -> Bool\nprop_gej_ge_add_ex_opp z b@(GroupElement bx by) = prop_gej_ge_add_ex a b\n where\n  z' = feAsSpec z\n  bx' = feAsSpec bx\n  by' = feAsSpec by\n  a = GroupElementJacobian (FieldElement . Spec.fe_pack $ bx' .*. z' .^. 2)\n                           (FieldElement . Spec.fe_pack . Spec.fe_negate $ by' .*. z' .^. 3)\n                           z\n\nprop_gej_ge_add_ex_inf b = forAll gen_inf $ \\a -> prop_gej_ge_add_ex a b\n\nprop_gej_equiv :: GroupElementJacobian -> GroupElementJacobian -> Bool\nprop_gej_equiv = \\a b -> fast_gej_equiv (gejAsTy a, gejAsTy b) == Just (toBit (Spec.gej_equiv (gejAsSpec a) (gejAsSpec b)))\n where\n  fast_gej_equiv = testCoreEval gej_equiv\n\nprop_gej_equiv_infl b = forAll gen_inf $ \\a -> prop_gej_equiv a b\nprop_gej_equiv_infr a = forAll gen_inf $ \\b -> prop_gej_equiv a b\nprop_gej_equiv_inf = forAll gen_inf $ \\a -> forAll gen_inf $ \\b -> prop_gej_equiv a b\nprop_gej_equiv_true = \\a c ->\n   let b = Spec.gej_rescale (gejAsSpec a) (feAsSpec c)\n   in fast_gej_equiv (gejAsTy a, toGEJ b) == Just (toBit (Spec.gej_equiv (gejAsSpec a) b))\n where\n  fast_gej_equiv = testCoreEval gej_equiv\n\nprop_gej_ge_equiv :: GroupElementJacobian -> GroupElement -> Bool\nprop_gej_ge_equiv = \\a b -> fast_gej_ge_equiv (gejAsTy a, geAsTy b) == Just (toBit (Spec.gej_ge_equiv (gejAsSpec a) (geAsSpec b)))\n where\n  fast_gej_ge_equiv = testCoreEval gej_ge_equiv\n\nprop_gej_x_equiv :: FieldElement -> GroupElementJacobian -> Bool -- gej_x_equiv will essentially always be false on random inputs.\nprop_gej_x_equiv = \\x0 a -> fast_gej_x_equiv (feAsTy x0, gejAsTy a) == Just (toBit (Spec.gej_x_equiv (feAsSpec x0) (gejAsSpec a) ))\n where\n  fast_gej_x_equiv = testCoreEval gej_x_equiv\n\nprop_gej_x_equiv_inf x0 = forAll gen_inf $ prop_gej_x_equiv x0\nprop_gej_x_equiv_true y z x0 = prop_gej_x_equiv x0 a\n  where\n   z' = feAsSpec z\n   x0' = feAsSpec x0\n   a = GroupElementJacobian (FieldElement . Spec.fe_pack $ x0' .*. z' .^. 2) y z\n\nprop_gej_ge_equiv_inf b = forAll gen_inf $ \\a -> prop_gej_ge_equiv a b\nprop_gej_ge_equiv_true = \\a ->\n   maybe (property Discard)\n   (\\b -> property $ fast_gej_ge_equiv (gejAsTy a, toGE b) == Just (toBit (Spec.gej_ge_equiv (gejAsSpec a) b)))\n   (Spec.gej_normalize (gejAsSpec a))\n where\n  fast_gej_ge_equiv = testCoreEval gej_ge_equiv\n\nprop_gej_x_equiv_inf_zero = prop_gej_x_equiv_inf (FieldElement 0)\n\nprop_ge_is_on_curve :: GroupElement -> Bool\nprop_ge_is_on_curve = \\a -> fast_ge_is_on_curve (geAsTy a) == Just (toBit (Spec.ge_is_on_curve (geAsSpec a)))\n where\n  fast_ge_is_on_curve = testCoreEval ge_is_on_curve\n\nprop_ge_is_on_curve_half = forAll gen_half_curve prop_ge_is_on_curve\n\nprop_gej_is_on_curve :: GroupElementJacobian -> Bool\nprop_gej_is_on_curve = \\a -> fast_gej_is_on_curve (gejAsTy a) == Just (toBit (Spec.gej_is_on_curve (gejAsSpec a)))\n where\n  fast_gej_is_on_curve = testCoreEval gej_is_on_curve\n\nprop_gej_is_on_curve_inf = forAll gen_inf prop_gej_is_on_curve\nprop_gej_is_on_curve_inf_half = forAll gen_half_curve_inf prop_gej_is_on_curve\nprop_gej_is_on_curve_half = forAll gen_half_curve_jacobian prop_gej_is_on_curve\n\nscalar_unary_prop f g = \\a -> fastF (scalarAsTy a) == Just (toScalar (g (scalarAsSpec a)))\n where\n  fastF = testCoreEval f\n\nscalar_binary_prop f g = \\a b -> fastF (scalarAsTy a, scalarAsTy b) == Just (toScalar (g (scalarAsSpec a) (scalarAsSpec b)))\n where\n  fastF = testCoreEval f\n\nprop_scalar_normalize :: ScalarElement -> Bool\nprop_scalar_normalize a@(ScalarElement w) = scalar_normalize (scalarAsTy a) == toScalar (Spec.scalar (toInteger w))\n\nprop_scalar_add :: ScalarElement -> ScalarElement -> Bool\nprop_scalar_add = scalar_binary_prop scalar_add Spec.scalar_add\n\nprop_scalar_square :: ScalarElement -> Bool\nprop_scalar_square = scalar_unary_prop scalar_square Spec.scalar_square\n\nprop_scalar_multiply :: ScalarElement -> ScalarElement -> Bool\nprop_scalar_multiply = scalar_binary_prop scalar_multiply Spec.scalar_multiply\n\nprop_scalar_negate :: ScalarElement -> Bool\nprop_scalar_negate = scalar_unary_prop scalar_negate Spec.scalar_negate\n\nprop_scalar_invert :: ScalarElement -> Bool\nprop_scalar_invert = scalar_unary_prop scalar_invert Spec.scalar_invert\n\nprop_scalar_split_lambda :: ScalarElement -> Bool\nprop_scalar_split_lambda = \\a -> ((interp *** interp) <$> fast_scalar_split_lambda (scalarAsTy a))\n                            == Just (Spec.scalar_split_lambda (scalarAsSpec a))\n where\n  interp (b,x) = fromWord128 x - if fromBit b then 2^128 else 0\n  fast_scalar_split_lambda = testCoreEval scalar_split_lambda\n\nprop_wnaf5 :: WnafElement -> Bool\nprop_wnaf5 n = L.and $ zipWith (==) lhs (fmap (maybeToTy . fmap (unsign . toInteger)) (Spec.wnaf 5 (wnafAsSpec n) ++ repeat Nothing))\n where\n  lhs = fmap fromWord4 <$> wnaf5 (wnafAsTy n)^..(backwards traverseWnaf)\n  unsign x | x < 0 = 2^4 + x\n           | otherwise = x\n\nprop_wnaf15 :: WnafElement -> Bool\nprop_wnaf15 n = L.and $ zipWith (==) lhs (fmap (maybeToTy . fmap (unsign . toInteger)) (Spec.wnaf 15 (wnafAsSpec n) ++ repeat Nothing))\n where\n  lhs = fmap (fromWord16) <$> wnaf15 (wnafAsTy n)^..(backwards traverseWnaf)\n  unsign x | x < 0 = 2^16 + 2*x+1\n           | otherwise = 2*x+1\n\nprop_off_curve_scale :: ScalarElement -> GroupElementJacobian -> Bool\nprop_off_curve_scale = \\na a -> fast_off_curve_scale (scalarAsTy na, gejAsTy a)\n             == Just (toGEJ (Spec.off_curve_scale (scalarAsSpec na) (gejAsSpec a)))\n where\n  fast_off_curve_scale = testCoreEval off_curve_scale\n\nprop_off_curve_scale_0 :: GroupElementJacobian -> Bool\nprop_off_curve_scale_0 a = prop_off_curve_scale na a\n where\n  na = ScalarElement 0\n\nprop_off_curve_scale_inf :: ScalarElement -> Property\nprop_off_curve_scale_inf na = forAll gen_inf $ \\a -> prop_off_curve_scale na a\n\nprop_scale :: ScalarElement -> GroupElementJacobian -> Bool\nprop_scale = \\na a -> fast_scale (scalarAsTy na, gejAsTy a)\n             == (toGEJ <$> Spec.scale (scalarAsSpec na) (gejAsSpec a))\n where\n  fast_scale = testCoreEval scale\n\nprop_scale_0 :: GroupElementJacobian -> Bool\nprop_scale_0 a = prop_scale na a\n where\n  na = ScalarElement 0\n\nprop_scale_inf :: ScalarElement -> Property\nprop_scale_inf na = forAll gen_inf $ \\a -> prop_scale na a\n\nprop_scale_half :: ScalarElement -> Property\nprop_scale_half na = forAll gen_half_curve_jacobian $ \\a -> prop_scale na a\n\nprop_scale_half_inf :: ScalarElement -> Property\nprop_scale_half_inf na = forAll gen_half_curve_inf $ \\a -> prop_scale na a\n\nprop_scale_half_0 :: Property\nprop_scale_half_0 = forAll gen_half_curve_inf $ \\a -> prop_scale na a\n where\n  na = ScalarElement 0\n\nprop_off_curve_linear_combination_1 :: ScalarElement -> GroupElementJacobian -> ScalarElement -> Bool\nprop_off_curve_linear_combination_1 = \\na a ng -> fast_off_curve_linear_combination_1 ((scalarAsTy na, gejAsTy a), scalarAsTy ng)\n             == Just (toGEJ (Spec.off_curve_linear_combination_1 (scalarAsSpec na) (gejAsSpec a) (scalarAsSpec ng)))\n where\n  fast_off_curve_linear_combination_1 = testCoreEval off_curve_linear_combination_1\n\nprop_off_curve_linear_combination_1_0 :: GroupElementJacobian -> ScalarElement -> Bool\nprop_off_curve_linear_combination_1_0 a ng = prop_off_curve_linear_combination_1 na a ng\n where\n  na = ScalarElement 0\n\nprop_off_curve_linear_combination_1_inf :: ScalarElement -> ScalarElement -> Property\nprop_off_curve_linear_combination_1_inf na ng = forAll gen_inf $ \\a -> prop_off_curve_linear_combination_1 na a ng\n\nprop_linear_combination_1 :: ScalarElement -> GroupElementJacobian -> ScalarElement -> Bool\nprop_linear_combination_1 = \\na a ng -> fast_linear_combination_1 ((scalarAsTy na, gejAsTy a), scalarAsTy ng)\n             == (toGEJ <$> Spec.linear_combination_1 (scalarAsSpec na) (gejAsSpec a) (scalarAsSpec ng))\n where\n  fast_linear_combination_1 = testCoreEval linear_combination_1\n\nprop_linear_combination_1_0 :: GroupElementJacobian -> ScalarElement -> Bool\nprop_linear_combination_1_0 a ng = prop_linear_combination_1 na a ng\n where\n  na = ScalarElement 0\n\nprop_linear_combination_1_inf :: ScalarElement -> ScalarElement -> Property\nprop_linear_combination_1_inf na ng = forAll gen_inf $ \\a -> prop_linear_combination_1 na a ng\n\nprop_linear_combination_1_half :: ScalarElement -> ScalarElement -> Property\nprop_linear_combination_1_half na ng = forAll gen_half_curve_jacobian $ \\a -> prop_linear_combination_1 na a ng\n\nprop_linear_combination_1_half_inf :: ScalarElement -> ScalarElement -> Property\nprop_linear_combination_1_half_inf na ng = forAll gen_half_curve_inf $ \\a -> prop_linear_combination_1 na a ng\n\nprop_linear_combination_1_half_0 :: ScalarElement -> Property\nprop_linear_combination_1_half_0 ng = forAll gen_half_curve_inf $ \\a -> prop_linear_combination_1 na a ng\n where\n  na = ScalarElement 0\n\nprop_linear_check_1 :: ScalarElement -> GroupElement -> ScalarElement -> GroupElement -> Bool\nprop_linear_check_1 = \\na a ng r -> fast_linear_check_1 (((scalarAsTy na, geAsTy a), scalarAsTy ng), geAsTy r)\n             == Just (toBit (Spec.linear_check [(scalarAsSpec na, geAsSpec a)] (scalarAsSpec ng) (geAsSpec r)))\n where\n  fast_linear_check_1 = testCoreEval linear_check_1\n\nprop_decompress :: PointElement -> Bool\nprop_decompress = \\a -> fast_decompress (pointAsTy a)\n             == Just ((fmap toGE . maybeToTy) (Spec.decompress (pointAsSpec a)))\n where\n  fast_decompress = testCoreEval decompress\n\nprop_point_check_1 :: ScalarElement -> PointElement -> ScalarElement -> PointElement -> Bool\nprop_point_check_1 = \\na a ng r -> fast_point_check_1 (((scalarAsTy na, pointAsTy a), scalarAsTy ng), pointAsTy r)\n             == Just (toBit (Spec.point_check [(scalarAsSpec na, pointAsSpec a)] (scalarAsSpec ng) (pointAsSpec r)))\n where\n  fast_point_check_1 = testCoreEval point_check_1\n\nprop_swu :: FieldElement -> Bool\nprop_swu = \\a -> let input = feAsTy a in fastF input == implementation (Secp256k1Jet Swu) input\n where\n  fastF = testCoreEval (specification (Secp256k1Jet Swu))\n\nprop_hash_to_curve :: W.Word256 -> Bool\nprop_hash_to_curve = \\a -> let input = toW256 a in fastF input == implementation (Secp256k1Jet HashToCurve) input\n where\n  toW256 = toWord256 . fromIntegral\n  fastF = testCoreEval (specification (Secp256k1Jet HashToCurve))\n\nprop_pubkey_unpack :: FieldElement -> Bool\nprop_pubkey_unpack a@(FieldElement w) = fast_pubkey_unpack (feAsTy a)\n                                     == Just ((fmap toPoint . maybeToTy) (Spec.pubkey_unpack (Spec.PubKey w)))\n where\n  fast_pubkey_unpack = testCoreEval pubkey_unpack\n\nprop_pubkey_unpack_neg :: FieldElement -> Bool\nprop_pubkey_unpack_neg a@(FieldElement w) = fast_pubkey_unpack_neg (feAsTy a)\n                                         == Just ((fmap toPoint . maybeToTy) (Spec.pubkey_unpack_neg (Spec.PubKey w)))\n where\n  fast_pubkey_unpack_neg = testCoreEval pubkey_unpack_neg\n\nprop_signature_unpack :: FieldElement -> ScalarElement -> Bool\nprop_signature_unpack r@(FieldElement wr) s@(ScalarElement ws) =\n  fast_signature_unpack (feAsTy r, scalarAsTy s) ==\n  Just ((fmap (toFE *** toScalar) . maybeToTy) (Spec.signature_unpack (Spec.Sig wr ws)))\n where\n  fast_signature_unpack = testCoreEval signature_unpack\n\nfast_bip_0340_check = fromJust . testCoreEval bip_0340_check\n where\n  fromJust (Just a) = fromBit a\n  fromJust Nothing = False\n\ngroup_bip_0340_check = testGroup \"bip_0340_check\" (zipWith case_bip_0340_check_vector [0..] bip0340Vectors)\n where\n  assert_bip_0340_check_vector tv = bip0340TestResult tv @=? fast_bip_0340_check (bip0340TestAsTy tv)\n  case_bip_0340_check_vector n tv = testCase name (assert_bip_0340_check_vector tv)\n   where\n    name = \"bip_0340_vector_\" ++ show n\n\nprop_check_sig_verify :: FieldElement -> HashElement -> HashElement -> FieldElement -> ScalarElement -> Bool\nprop_check_sig_verify = \\pk m1 m2 r s ->\n   let input = ((feAsTy pk, (heAsTy m1, heAsTy m2)), (feAsTy r, scalarAsTy s))\n   in fast_check_sig_verify input == implementation (SignatureJet CheckSigVerify) input\n where\n  fast_check_sig_verify = testCoreEval (specification (SignatureJet CheckSigVerify))\n\nprop_check_sig_verify_true :: HashElement -> HashElement -> Property\nprop_check_sig_verify_true = \\m1 m2 ->\n   let msg = sigHash (heAsSpec m1) (heAsSpec m2)\n   in forAll (genSignature msg) $ \\(PubKey pk, Sig r s) ->\n     let input = ((toW256 pk, (heAsTy m1, heAsTy m2)), (toW256 r, toW256 s))\n     in Just () == implementation (SignatureJet CheckSigVerify) input\n     && Just () == fast_check_sig_verify input\n where\n  toW256 = toWord256 . fromIntegral\n  fast_check_sig_verify = testCoreEval (specification (SignatureJet CheckSigVerify))\n\nprop_parse_lock = forAll arbitraryLock\n                $ \\a -> fastF (toW32 a) == implementation (BitcoinJet ParseLock) (toW32 a)\n where\n  fastF = testCoreEval (specification (BitcoinJet ParseLock))\n\nprop_parse_sequence a = fastF (toW32 a) == implementation (BitcoinJet ParseSequence) (toW32 a)\n where\n  fastF = testCoreEval (specification (BitcoinJet ParseSequence))\n\nassert_tapdata_init :: Assertion\nassert_tapdata_init = fastF () @=? implementation (BitcoinJet TapdataInit) ()\n where\n  fastF = testCoreEval (specification (BitcoinJet TapdataInit))\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Serialization/Tests.hs",
    "content": "{-# LANGUAGE RankNTypes, ScopedTypeVariables #-}\n-- This module tests some serialization functionality.\nmodule Simplicity.Serialization.Tests (tests) where\n\nimport Control.Arrow ((|||))\nimport Control.Monad (mzero)\nimport Data.Either (lefts)\nimport Data.Foldable (toList)\nimport Data.Maybe (fromMaybe)\nimport Data.Serialize (Get, Putter, runGetState, runPut)\nimport qualified Data.Vector as V\nimport qualified Data.Vector.Unboxed as UV\nimport Lens.Family2 (Traversal, (&), (.~))\n\nimport Simplicity.Bitcoin.Dag\nimport Simplicity.Bitcoin.Inference\nimport Simplicity.MerkleRoot\nimport Simplicity.Bitcoin.Primitive\nimport Simplicity.Bitcoin.JetType\nimport Simplicity.Bitcoin.Serialization.BitString as BitString\nimport Simplicity.Bitcoin.Serialization.ByteString as ByteString\nimport Simplicity.Bitcoin.Term\nimport Simplicity.CoreJets as Core\nimport Simplicity.Digest\nimport qualified Simplicity.Programs.Arith as Arith\nimport Simplicity.Programs.Sha256.Lib\nimport Simplicity.Serialization\nimport Simplicity.Ty.Tests hiding (tests)\nimport Simplicity.Ty.Word\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.HUnit ((@=?), testCase)\nimport Test.Tasty.QuickCheck ( Testable, testProperty, Positive(Positive)\n                             , Gen, Property, arbitrary, choose, elements, forAll, listOf1, oneof)\nimport Test.QuickCheck.Property (Result, failed, succeeded, reason)\n\n-- This collects the tests for the various serialization/deserialization pairs.\ntests :: TestTree\ntests = testGroup \"Serialization\"\n        [ testProperty \"get-put bit-string\" prop_getPutBitString\n        , testProperty \"get-put positive\" prop_getPutPositive\n        , testProperty \"get-put BitString DAG\" prop_getPutBitStringDag\n        , testProperty \"get-put ByteString DAG\" prop_getPutByteStringDag\n        -- This collection tests type inference on a few sample programs.\n        , testGroup \"Inference\"\n          [ testInference \"full_add word8\" (Arith.full_add word8)\n          , testInference \"add word8\" (Arith.add word8)\n          , testInference \"full_multiply word8\" (Arith.full_multiply word8)\n          , testInference \"multiply word8\" (Arith.multiply word8)\n          , testInference \"hashBlock\" hashBlock\n        ]\n        , testGroup \"Hasekll Core Jets\" (testDecodeCoreJet <$> toList coreJetMap)\n        ]\n\n-- Check that deserialization of serialization of bit-strings returns the original input.\nprop_getPutBitString :: [Bool] -> Bool\nprop_getPutBitString l = evalExactVector getBitString (UV.fromList (putBitString l [])) == Just l\n\n-- Check that deserialization of serialization of positive numbers returns the original input.\nprop_getPutPositive :: Positive Integer -> Bool\nprop_getPutPositive (Positive n) = evalExactVector getPositive (UV.fromList (putPositive n [])) == Just n\n\n-- Test a 'SimplicityDag' predicate over suitable Arbitrary inputs.\nforallSimplicityDag :: Testable prop => (SimplicityDag [] Ty (SomeArrow NoJets) UntypedValue -> prop) -> Property\nforallSimplicityDag = forAll gen_UntypedTermF_list\n where\n  gen_UntypedTermF_list = do\n    l <- traverse f =<< (zip [1..] <$> listOf1 gen_UntypedTermF)\n    case l of\n     [] -> return []\n     nl -> (:nl) <$> elements [Iden one, Unit one]\n   where\n    f (i, term) = traverse (const (choose (1,i))) term\n  -- We are subverting putDag's type annotation requirement.  It is for purpose of testing the 'putDag' function, so maybe it is okay to do.\n  -- :TODO: replace this with a proper generator for well-typed Simplicity terms.\n  gen_UntypedTermF :: Gen (TermF Ty j UntypedValue ())\n  gen_UntypedTermF = oneof\n    [ pure $ Iden one\n    , pure $ Unit one\n    , pure $ Injl one one one ()\n    , pure $ Injr one one one ()\n    , pure $ Take one one one ()\n    , pure $ Drop one one one ()\n    , pure $ Comp one one one () ()\n    , pure $ Case one one one one () ()\n    , pure $ Pair one one one () ()\n    , pure $ Disconnect one one one one () ()\n    , Hidden <$> get256Bits arbitrary\n    , wit\n    ]\n   where\n    -- Here we are careful to place a correct type annotation for witness values.\n    wit = do\n      b <- arbTy\n      v <- case reflect b of SomeTy rb -> untypedValue <$> arbValueR rb\n      return (Witness one b v)\n\n-- Compare 'SimplicityDag' disregarding most type annotations.\n-- Witness nodes are compared using the 'compareWitness' function which may or may not consider type annotations.\ncompareDag :: (Eq a, Eq j) => (ty0 -> w0 -> ty1 -> w1 -> Bool) -> [TermF ty0 j w0 a] -> [TermF ty1 j w1 a] -> Bool\ncompareDag compareWitness v1 v2 = (and $ zipWith compareNode v1 v2) && (length v1 == length v2)\n where\n  compareNode (Iden _) (Iden _) = True\n  compareNode (Unit _) (Unit _) = True\n  compareNode (Injl _ _ _ x0) (Injl _ _ _ x1) = x0 == x1\n  compareNode (Injr _ _ _ x0) (Injr _ _ _ x1) = x0 == x1\n  compareNode (Take _ _ _ x0) (Take _ _ _ x1) = x0 == x1\n  compareNode (Drop _ _ _ x0) (Drop _ _ _ x1) = x0 == x1\n  compareNode (Comp _ _ _ x0 y0) (Comp _ _ _ x1 y1) = [x0,y0] == [x1,y1]\n  compareNode (Case _ _ _ _ x0 y0) (Case _ _ _ _ x1 y1) = [x0,y0] == [x1,y1]\n  compareNode (Pair _ _ _ x0 y0) (Pair _ _ _ x1 y1) = [x0,y0] == [x1,y1]\n  compareNode (Disconnect _ _ _ _ x0 y0) (Disconnect _ _ _ _ x1 y1) = [x0,y0] == [x1,y1]\n  compareNode (Hidden h0) (Hidden h1) = h0 == h1\n  compareNode (Witness _ b0 w0) (Witness _ b1 w1) = compareWitness b0 w0 b1 w1\n  compareNode (Jet j0) (Jet j1) = j0 == j1\n  compareNode _ _ = False\n\n-- Check that 'BitString.putDag's serialization of 'SimplicityDag's works can be deserialized by a combination of 'BitString.getDagNoWitness' and 'BitString.getWitnessData'.\n-- Note: Because we do not yet have a generator for arbitrary well-typed Simplicity expressions we cannot easily test 'BitString.putTerm' with 'BitString.getTerm'.\n-- Instead we perform an awkward combinator of 'BitString.getDagNoWitness' and 'BitString.getWitnessData' on mostly untyped Simplicity DAGs for now.\nprop_getPutBitStringDag :: Property\nprop_getPutBitStringDag = forallSimplicityDag prop\n where\n  compareWitness _ w0 _ w1 = w0 == w1\n  prop :: SimplicityDag [] Ty (SomeArrow NoJets) UntypedValue -> Result\n  prop v = case eval of\n    Left msg -> failed { reason = show msg }\n    Right (pdag, wdag) | not (compareDag (\\_ _ _ _ -> True) v (toList pdag)) -> failed { reason = \"Bitstring.getDagNoWiness returned bad value\" }\n                       | not (compareDag compareWitness v (toList wdag)) -> failed { reason = \"Bitstring.getWitnessData returned bad value\" }\n                       | otherwise -> succeeded\n   where\n    pbs = BitString.putDagNoWitnessLengthCode v\n    Just wbs = BitString.putWitnessData v -- generation is designed to create terms that always succeed at serializaiton.\n    evalPDag = flip evalStreamWithError pbs $ \\abort next -> do\n     BitString.getDagNoWitnessLengthCode abort next\n    evalWDag = flip evalStreamWithError wbs $ \\abort next -> do\n     BitString.getWitnessData vStripped next\n    eval = (,) <$> evalPDag <*> evalWDag\n    vStripped = v & traverse . witness_ .~ ()\n     where\n      witness_ :: Traversal (TermF ty j w0 a) (TermF ty j w1 a) w0 w1\n      witness_ = witnessData . const\n\n-- Check that deserialization of serialization of 'SimplicityDag's works for the byte-string serialization.\nprop_getPutByteStringDag :: Property\nprop_getPutByteStringDag = forallSimplicityDag prop\n where\n  compareWitness b w0 _ w1 = case reflect b of\n                               SomeTy rb -> fromMaybe False $ (==) <$> castUntypedValueR rb w0 <*> evalExactVector (getValueR rb) w1\n  prop v = case runGetState (toList <$> ByteString.getDag) bs 0 of\n            Left _ -> False\n            Right (v', rest) -> rest == mempty && compareDag compareWitness v (v' :: SimplicityDag [] () (SomeArrow NoJets) (UV.Vector Bool))\n   where\n    Just bs = runPut <$> ByteString.putDag v -- generation is designed to create terms that always succeed at serializaiton.\n\n-- Check that type inference on Simplicity expressions produce correct terms by testing their Merkle roots.\ntestInference :: forall a b. (TyC a, TyC b) => String -> (forall term. (Core term) => term a b) -> TestTree\ntestInference name program = testGroup name [testProperty \"CommitmentRoot\" assertion1, testProperty \"AnnotatedRoot\" assertion2]\n where\n  dag :: NoJetDag a b\n  dag = program\n  -- type inference on first pass is not necessarily equal to the original program because the Haskell type of internal nodes in the original program might not have the term's principle type.\n  pass1 :: forall term. Simplicity term => Either String (term a b)\n  pass1 = typeCheck =<< typeInference dag (jetDag dag)\n  -- Type inference on the second pass ought to always be equal to the first pass.\n  pass2 :: forall term. Simplicity term => Either String (term a b)\n  pass2 = typeCheck =<< (typeInference dag . jetDag) =<< (pass1 :: Either String (NoJetDag a b))\n  assertion1 = pass1 == Right (program :: CommitmentRoot a b)\n  assertion2 = pass2 == (pass1 :: Either String (AnnotatedRoot a b))\n\ntestDecodeCoreJet :: SomeArrow CoreJet -> TestTree\ntestDecodeCoreJet (SomeArrow jt) = testCase (show jt) (Just (SomeArrow jt) @=? decode)\n where\n  vector = UV.fromList $ Core.putJetBit jt []\n  decode = evalExactVector (Core.getJetBit mzero) vector\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/TestCoreEval.hs",
    "content": "-- | This module builds a wrapper around 'Simplicity.CoreJets.fastCoreEval' to define a 'testCoreEval' variant.\nmodule Simplicity.TestCoreEval\n ( TestCoreEval, testCoreEval\n ) where\n\nimport Prelude hiding (drop, fail, take)\n\nimport Control.Arrow (Kleisli(Kleisli), runKleisli)\n\nimport Simplicity.CoreJets\nimport Simplicity.Digest\nimport Simplicity.MerkleRoot\nimport Simplicity.Term.Core\n\n-- | An Assert instance for 'testCoreEval'.\ndata TestCoreEval a b = TestCoreEval { testCoreEvalSem :: Kleisli Maybe a b\n                                     , testCoreEvalFast :: FastCoreEval a b\n                                     }\n\n-- | 'testCoreEval' optimizes Simplicity with assertions evaluation using jets, similar to 'fastCoreEval',\n-- but excludes the expression itself from being substituted.\n-- This is used in for testing jets against their specifications under the assumption that jets for any subexpressions are correct.\ntestCoreEval = runKleisli . testCoreEvalSem\n\ntestFastKleisli = Kleisli . fastCoreEval . testCoreEvalFast\n\nmkLeaf sComb fComb = TestCoreEval sComb fComb\n\nmkUnary sComb fComb t = TestCoreEval (sComb (testFastKleisli t)) (fComb (testCoreEvalFast t))\n\nmkBinary sComb fComb s t = TestCoreEval (sComb (testFastKleisli s) (testFastKleisli t))\n                                        (fComb (testCoreEvalFast s) (testCoreEvalFast t))\n\ninstance Core TestCoreEval where\n  iden = mkLeaf iden iden\n  comp = mkBinary comp comp\n  unit = mkLeaf unit unit\n  injl = mkUnary injl injl\n  injr = mkUnary injr injr\n  match = mkBinary match match\n  pair = mkBinary pair pair\n  take = mkUnary take take\n  drop = mkUnary drop drop\n\ninstance Assert TestCoreEval where\n  assertl s h = mkUnary (flip assertl h) (flip assertl h) s\n  assertr h t = mkUnary (assertr h) (assertr h) t\n  fail b = mkLeaf (fail b) (fail b)\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Ty/Arbitrary.hs",
    "content": "-- This module tests the Simplicity programs on arbitrary inputs.\nmodule Simplicity.Ty.Arbitrary ( maybeToTy\n                               , HashElement(..), heAsTy, heAsSpec, toHE\n                               , FieldElement(..), feAsTy, feAsSpec, toFE\n                               , GroupElement(..), geAsTy, geAsSpec, toGE\n                               , PointElement(..), pointAsTy, pointAsSpec, toPoint\n                               , GroupElementJacobian(..), gejAsTy, gejAsSpec, toGEJ\n                               , gen_inf, gen_half_curve, gen_half_curve_jacobian, gen_half_curve_inf\n                               , ScalarElement(..), scalarAsTy, scalarAsSpec, toScalar\n                               , WnafElement(..), wnafAsTy, traverseWnaf\n                               , Sha256CtxElement(..), ctxAsTy, ctxAsSpec, toCtx\n                               ) where\n\nimport qualified Data.ByteString as BS\nimport Lens.Family2 (review, over)\nimport Lens.Family2.Stock (both_)\n\nimport Simplicity.Digest\nimport Simplicity.LibSecp256k1.Spec ((.+.), (.*.), (.^.))\nimport qualified Simplicity.LibSecp256k1.Spec as Spec\nimport Simplicity.Programs.LibSecp256k1.Lib\nimport Simplicity.Ty.LibSecp256k1\nimport Simplicity.Ty.Word\nimport qualified Simplicity.Word as W\n\nimport Test.Tasty.QuickCheck (Arbitrary(..), Gen\n                             , arbitraryBoundedIntegral, arbitrarySizedBoundedIntegral\n                             , choose, elements, frequency, resize, sized, oneof, vectorOf\n                             , shrinkIntegral\n                             )\n\nmaybeToTy :: Maybe a -> Either () a\nmaybeToTy Nothing = Left ()\nmaybeToTy (Just x) = Right x\n\ntoW8 :: W.Word8 -> Word8\ntoW8 = toWord8 . fromIntegral\n\ntoW64 :: W.Word64 -> Word64\ntoW64 = toWord64 . fromIntegral\n\ninstance Arbitrary W.Word256 where\n  arbitrary = arbitrarySizedBoundedIntegral\n  shrink = shrinkIntegral\n\ndata HashElement = HashElement W.Word256 deriving Show\n\ninstance Arbitrary HashElement where\n  arbitrary = do\n    b <- arbitrary\n    i <- arbitrarySizedBoundedIntegral\n    return . HashElement $ if b then i else -i\n  shrink (HashElement h) = HashElement <$> takeWhile (<h) [0, 1, 2^248, 2^255, 2^256-1]\n\nheAsTy (HashElement h) = toWord256 (toInteger h)\nheAsSpec (HashElement h) = review (over be256) h\n\ntoHE :: Hash256 -> Word256\ntoHE = toWord256 .integerHash256\n\ngenModularWord256 :: W.Word256 -> Gen W.Word256\ngenModularWord256 w = do\n  b <- arbitrary\n  i <- arbitrary\n  return $ fromInteger i + if b then w else 0\n\ndata FieldElement = FieldElement W.Word256 deriving Show\n\ninstance Arbitrary FieldElement where\n  arbitrary = FieldElement <$> genModularWord256 (fromInteger Spec.fieldOrder)\n  shrink (FieldElement fe) = FieldElement <$> takeWhile (<fe) [0, 1, order - 1, order, order + 1]\n   where\n    order = fromInteger Spec.fieldOrder\n\nfeAsTy (FieldElement w) = toWord256 (toInteger w)\nfeAsSpec (FieldElement w) = Spec.fe (toInteger w)\n\ndata GroupElement = GroupElement FieldElement FieldElement deriving Show\n\nlowOrderGE :: Gen GroupElement\nlowOrderGE = elements (mkGE <$> [Spec.ge_3, Spec.ge_6, Spec.ge_7, Spec.ge_13, Spec.ge_14])\n where\n  mkGE (Spec.GE x y) = GroupElement (FieldElement (Spec.fe_pack x)) (FieldElement (Spec.fe_pack y))\n\ninstance Arbitrary GroupElement where\n  arbitrary = sized $ \\n -> frequency [(1, lowOrderGE), (n `div` 10, GroupElement <$> arbitrary <*> arbitrary)]\n  shrink (GroupElement x y) = [GroupElement x' y' | (x', y') <- shrink (x, y)]\n\ngeAsTy (GroupElement x y) = (feAsTy x, feAsTy y)\ngeAsSpec (GroupElement x y) = Spec.GE (feAsSpec x) (feAsSpec y)\n\ndata PointElement = PointElement Bool FieldElement deriving Show\n\ninstance Arbitrary PointElement where\n  arbitrary = PointElement <$> arbitrary <*> arbitrary\n  shrink (PointElement x y) = [PointElement x' y' | (x', y') <- shrink (x, y)]\n\npointAsTy (PointElement x y) = (toBit x, feAsTy y)\npointAsSpec (PointElement x y) = Spec.Point x (feAsSpec y)\n\ntoPoint :: Spec.Point -> Point\ntoPoint (Spec.Point b x) = (toBit b, toFE x)\n\ndata GroupElementJacobian = GroupElementJacobian FieldElement FieldElement FieldElement deriving Show\n\nlowOrderGEJ :: Gen GroupElementJacobian\nlowOrderGEJ = do\n  Spec.GE x y <- geAsSpec <$> lowOrderGE\n  z <- arbitrary\n  let Spec.GEJ x' y' z' = Spec.gej_rescale (Spec.GEJ x y Spec.fe_one) (feAsSpec z)\n  return $ GroupElementJacobian (FieldElement (Spec.fe_pack x')) (FieldElement (Spec.fe_pack y')) (FieldElement (Spec.fe_pack z'))\n\ninstance Arbitrary GroupElementJacobian where\n  arbitrary = sized $ \\n -> frequency [(1, lowOrderGEJ), (n `div` 10, GroupElementJacobian <$> arbitrary <*> arbitrary <*> arbitrary)]\n  shrink (GroupElementJacobian x y z) = [GroupElementJacobian x' y' z' | (x', y', z') <- shrink (x, y, z)]\n\ngejAsTy (GroupElementJacobian x y z) = ((feAsTy x, feAsTy y), feAsTy z)\ngejAsSpec (GroupElementJacobian x y z) = Spec.GEJ (feAsSpec x) (feAsSpec y) (feAsSpec z)\n\ngen_inf :: Gen GroupElementJacobian\ngen_inf = GroupElementJacobian <$> arbitrary <*> arbitrary <*> pure (FieldElement 0)\n\ngen_half_curve :: Gen GroupElement\ngen_half_curve = half_curve <$> arbitrary\n where\n  half_curve x = GroupElement x (FieldElement . Spec.fe_pack $ y')\n   where\n    x' = feAsSpec x\n    y' = (x' .^. 3 .+. (Spec.fe 7)) .^. ((Spec.fieldOrder + 1) `div` 4)\n\ngen_half_curve_jacobian :: Gen GroupElementJacobian\ngen_half_curve_jacobian = half_curve_jacobian <$> gen_half_curve <*> arbitrary\n where\n  half_curve_jacobian (GroupElement x y) z = GroupElementJacobian (FieldElement . Spec.fe_pack $ x' .*. z' .^. 2)\n                                                                  (FieldElement . Spec.fe_pack $ y' .*. z' .^. 3)\n                                                                  z\n   where\n    x' = feAsSpec x\n    y' = feAsSpec y\n    z' = feAsSpec z\n\ngen_half_curve_inf :: Gen GroupElementJacobian\ngen_half_curve_inf = half_curve_inf <$> arbitrary\n where\n  half_curve_inf :: FieldElement -> GroupElementJacobian\n  half_curve_inf x = GroupElementJacobian x (FieldElement . Spec.fe_pack $ y') (FieldElement 0)\n   where\n    x' = feAsSpec x\n    y' = x' .^. (3 * ((Spec.fieldOrder + 1) `div` 4))\n\ndata ScalarElement = ScalarElement W.Word256 deriving Show\n\ninstance Arbitrary ScalarElement where\n  arbitrary = sized $ \\n -> if n == 0 then return case1 else resize (n-1) $ do\n    i <- arbitrary\n    j <- arbitrary\n    e <- elements [0, 2^255, Spec.groupOrder, halforder]\n    return . ScalarElement . fromInteger $ i + (j * Spec.lambda `mod` Spec.groupOrder) + e\n   where\n    -- This denormailzed scalar would produce a different result on split-lambda than the canonical scalar due to\n    -- the approximate division used in the implementation.\n    case1 = ScalarElement $ fromInteger Spec.groupOrder + c\n     where\n      c = 0x8f8da4d57dc094c4ecdd5448564d85f6 -- 2^383 `div` g2 + 1\n    halforder = Spec.groupOrder `div` 2\n  shrink (ScalarElement se) = ScalarElement <$> filter (<se) [0, 1, 2^256-1, 2^255-1, 2^255, 2^255+1, order - 1, order, order + 1, halforder -1, halforder, halforder + 1, halforder + 2]\n   where\n    order = fromInteger Spec.groupOrder\n    halforder = order `div` 2\n\nscalarAsTy (ScalarElement w) = toWord256 (toInteger w)\nscalarAsSpec (ScalarElement w) = Spec.scalar (toInteger w)\n\ntoScalar :: Spec.Scalar -> Scalar\ntoScalar = toWord256 . Spec.scalar_repr\n\ndata WnafElement = WnafElement { wnafAsSpec :: Integer } deriving Show\n\ninstance Arbitrary WnafElement where\n  arbitrary = WnafElement <$> choose (-2^128, 2^128-1)\n  shrink (WnafElement we) = WnafElement <$> shrink we\n\nwnafAsTy :: WnafElement -> (Bit, Word128)\nwnafAsTy (WnafElement we) = (toBit (we < 0), toWord128 we)\n\ntraverseWnaf f (x,y) = (,) <$> f x <*> (both_.both_.both_.both_.both_.both_.both_) f y\n\n\ndata Sha256CtxElement = Sha256CtxElement [W.Word8] W.Word64 HashElement deriving Show\n\ninstance Arbitrary Sha256CtxElement where\n  arbitrary = do\n    preLen <- arbitrary\n    count <- oneof [pure id, pure (2^55 +)] <*> ((`div` 256) <$> arbitrary)\n    Sha256CtxElement <$> (vectorOf (preLen `mod` 64) arbitraryBoundedIntegral) <*> pure (fromInteger count) <*> arbitrary\n  shrink (Sha256CtxElement l w h) = [Sha256CtxElement l w h | (l,w,h) <- shrink (l, w, h)]\n\nctxAsTy (Sha256CtxElement l w h) = (fst (bufferFill buffer63 (toW8 <$> l)), (toW64 w, heAsTy h))\nctxAsSpec (Sha256CtxElement l w h) = ctxBuild l (fromIntegral w) (heAsSpec h)\ntoCtx ctx = (buffer, (count, midstate))\n where\n  buffer = fst $ bufferFill buffer63 (toWord8 . fromIntegral <$> BS.unpack (ctxBuffer ctx))\n  count = toWord64 . fromIntegral $ ctxCounter ctx\n  midstate = toHE . ivHash $ ctxIV ctx\n"
  },
  {
    "path": "Haskell/Tests/Simplicity/Ty/Tests.hs",
    "content": "{-# LANGUAGE GADTs #-}\n-- This modules tests for some operations for Simplicity types.\nmodule Simplicity.Ty.Tests (arbTy, arbValue, arbValueR, tests) where\n\nimport Prelude hiding (sum, prod)\nimport Data.Functor.Compose (Compose(..))\nimport Data.Vector.Unboxed (fromList)\n\nimport Simplicity.Serialization\nimport Simplicity.Ty\n\nimport Test.Tasty (TestTree, testGroup)\nimport Test.Tasty.QuickCheck (Arbitrary(..), Gen, Property, forAll, choose, elements, oneof, sized, testProperty)\n\n-- Choose an arbitrary Simplicity type of a given size.\narbSizeTy :: Int -> Gen Ty\narbSizeTy 0 = return one\narbSizeTy n = do\n  i <- choose (0, n-1)\n  elements [sum, prod] <*> arbSizeTy i <*> arbSizeTy (n-1-i)\n\narbTy :: Gen Ty\narbTy = sized arbSizeTy\n\n-- Choose an arbitrary value of a given Simplicity type.\narbValueR :: TyReflect a -> Gen a\narbValueR ra = case ra of\n  OneR -> arbitrary\n  SumR rl rr -> oneof [Left <$> arbValueR rl, Right <$> arbValueR rr]\n  ProdR r1 r2 -> (,) <$> arbValueR r1 <*> arbValueR r2\n\narbValue :: TyC a => Gen a\narbValue = arbValueR reify\n\ntests :: TestTree\ntests = testGroup \"Ty\"\n        [ testProperty \"get-put value of Simplicity type\" prop_getPutValue\n        ]\n\n-- Verify that the serialization of arbitrary values of arbitrary Simplicity types can be deserialized.\nprop_getPutValue :: Property\nprop_getPutValue = forAll arbTy go\n  where\n   go a = case reflect a of\n            SomeTy ra -> forAll (arbValueR ra) (\\v -> evalExactVector (getValueR ra) (fromList (putValueR ra v)) == Just v)\n"
  },
  {
    "path": "Haskell/Tests/Tests.hs",
    "content": "-- The main test module that gathers and runs the tests in the Simplicity Haskell project.\nmodule Main (main) where\n\nimport Test.Tasty\n\nimport qualified Simplicity.BitMachine.Tests as BitMachine\nimport qualified Simplicity.BitMachine.StaticAnalysis.Tests as StaticAnalysis\nimport qualified Simplicity.FFI.Tests as FFI\nimport qualified Simplicity.Programs.Tests as Programs\nimport qualified Simplicity.Bitcoin.Tests as Bitcoin\nimport qualified Simplicity.Bitcoin.FFI.Tests as BitcoinFFI\nimport qualified Simplicity.Bitcoin.Serialization.Tests as BitcoinSerialization\nimport qualified Simplicity.Elements.Tests as Elements\nimport qualified Simplicity.Elements.FFI.Tests as ElementsFFI\nimport qualified Simplicity.Elements.Serialization.Tests as ElementsSerialization\nimport qualified Simplicity.Serialization.Tests as Serialization\nimport qualified Simplicity.Ty.Tests as Ty\n\nmain :: IO ()\nmain = defaultMain tests\n\ntests :: TestTree\ntests = testGroup \"Tests\"\n      [ Programs.tests\n      , FFI.tests\n      , BitMachine.tests\n      , StaticAnalysis.tests\n      , Bitcoin.tests\n      , BitcoinFFI.tests\n      , BitcoinSerialization.tests\n      , Ty.tests\n      , Elements.tests\n      , ElementsFFI.tests\n      , ElementsSerialization.tests\n      , Serialization.tests\n      ]\n"
  },
  {
    "path": "Haskell/cbits/bitcoin/env.c",
    "content": "#include \"simplicity_alloc.h\"\n#include \"simplicity/bitcoin/env.h\"\n#include \"bitcoin/txEnv.h\"\n\nconst size_t c_sizeof_rawBitcoinBuffer = sizeof(rawBitcoinBuffer);\nconst size_t c_sizeof_rawBitcoinOutput = sizeof(rawBitcoinOutput);\nconst size_t c_sizeof_rawBitcoinInput = sizeof(rawBitcoinInput);\nconst size_t c_sizeof_rawBitcoinTransaction = sizeof(rawBitcoinTransaction);\nconst size_t c_sizeof_rawBitcoinTapEnv = sizeof(rawBitcoinTapEnv);\nconst size_t c_bitcoin_sizeof_txEnv = sizeof(txEnv);\n\nvoid c_set_rawBitcoinBuffer(rawBitcoinBuffer* result, const char* buf, unsigned int len) {\n  *result = (rawBitcoinBuffer){ .buf = buf, .len = len };\n}\n\nvoid c_set_rawBitcoinOutput(rawBitcoinOutput* result, unsigned long value, const rawBitcoinBuffer* scriptPubKey) {\n  *result = (rawBitcoinOutput){ .value = value\n                              , .scriptPubKey = *scriptPubKey\n                              };\n}\n\nvoid c_set_rawBitcoinInput(rawBitcoinInput* result, const rawBitcoinBuffer* annex, const rawBitcoinBuffer* scriptSig,\n                                   const char* prevTxid, unsigned int prevIx,\n                                   unsigned long value, const rawBitcoinBuffer* scriptPubKey,\n                                   unsigned int sequence) {\n  *result = (rawBitcoinInput){ .annex = annex\n                             , .scriptSig = *scriptSig\n                             , .prevTxid = prevTxid\n                             , .txo = {.value = value, .scriptPubKey = *scriptPubKey}\n                             , .prevIx = prevIx\n                             , .sequence = sequence\n                             };\n}\n\nvoid c_set_rawBitcoinTransaction(rawBitcoinTransaction* result, const unsigned char* txid, unsigned int version,\n                                         const rawBitcoinInput* input, unsigned int numInputs,\n                                         const rawBitcoinOutput* output, unsigned int numOutputs,\n                                         unsigned int lockTime) {\n  *result = (rawBitcoinTransaction){ .txid = txid\n                                   , .version = version\n                                   , .input = input, .numInputs = numInputs\n                                   , .output = output, .numOutputs = numOutputs\n                                   , .lockTime = lockTime,\n                                   };\n}\n\nvoid c_set_rawBitcoinTapEnv(rawBitcoinTapEnv* result, const char* controlBlock, unsigned char pathLen, const char* scriptCMR) {\n  *result = (rawBitcoinTapEnv){ .controlBlock = controlBlock, .pathLen = pathLen, .scriptCMR = scriptCMR };\n}\n\nvoid c_bitcoin_set_txEnv(txEnv* result, const bitcoinTransaction* tx, const bitcoinTapEnv* taproot, unsigned int ix) {\n  *result = simplicity_bitcoin_build_txEnv(tx, taproot, ix);\n}\n"
  },
  {
    "path": "Haskell/cbits/bitcoin/jets.c",
    "content": "#include \"bitcoin/bitcoinJets.h\"\n#include \"../wrappers.h\"\n\nWRAP_(bitcoin_version)\nWRAP_(bitcoin_lock_time)\nWRAP_(bitcoin_input_prev_outpoint)\nWRAP_(bitcoin_input_value)\nWRAP_(bitcoin_input_script_hash)\nWRAP_(bitcoin_input_sequence)\nWRAP_(bitcoin_input_annex_hash)\nWRAP_(bitcoin_input_script_sig_hash)\nWRAP_(bitcoin_output_value)\nWRAP_(bitcoin_output_script_hash)\nWRAP_(bitcoin_fee)\nWRAP_(bitcoin_total_input_value)\nWRAP_(bitcoin_total_output_value)\nWRAP_(bitcoin_script_cmr)\nWRAP_(bitcoin_transaction_id)\nWRAP_(bitcoin_current_index)\nWRAP_(bitcoin_current_prev_outpoint)\nWRAP_(bitcoin_current_value)\nWRAP_(bitcoin_current_script_hash)\nWRAP_(bitcoin_current_sequence)\nWRAP_(bitcoin_current_annex_hash)\nWRAP_(bitcoin_current_script_sig_hash)\nWRAP_(bitcoin_tapleaf_version)\nWRAP_(bitcoin_tappath)\nWRAP_(bitcoin_internal_key)\nWRAP_(bitcoin_num_inputs)\nWRAP_(bitcoin_num_outputs)\nWRAP_(bitcoin_tx_is_final)\nWRAP_(bitcoin_tx_lock_height)\nWRAP_(bitcoin_tx_lock_time)\nWRAP_(bitcoin_tx_lock_distance)\nWRAP_(bitcoin_tx_lock_duration)\nWRAP_(bitcoin_check_lock_height)\nWRAP_(bitcoin_check_lock_time)\nWRAP_(bitcoin_check_lock_distance)\nWRAP_(bitcoin_check_lock_duration)\nCOREWRAP_(bitcoin_outpoint_hash)\nCOREWRAP_(bitcoin_annex_hash)\nCOREWRAP_(bitcoin_build_tapleaf_simplicity)\nCOREWRAP_(bitcoin_build_tapbranch)\nCOREWRAP_(bitcoin_build_taptweak)\nWRAP_(bitcoin_output_values_hash)\nWRAP_(bitcoin_output_scripts_hash)\nWRAP_(bitcoin_outputs_hash)\nWRAP_(bitcoin_output_hash)\nWRAP_(bitcoin_input_outpoints_hash)\nWRAP_(bitcoin_input_values_hash)\nWRAP_(bitcoin_input_scripts_hash)\nWRAP_(bitcoin_input_utxos_hash)\nWRAP_(bitcoin_input_utxo_hash)\nWRAP_(bitcoin_input_sequences_hash)\nWRAP_(bitcoin_input_annexes_hash)\nWRAP_(bitcoin_input_script_sigs_hash)\nWRAP_(bitcoin_inputs_hash)\nWRAP_(bitcoin_input_hash)\nWRAP_(bitcoin_tx_hash)\nWRAP_(bitcoin_tapleaf_hash)\nWRAP_(bitcoin_tappath_hash)\nWRAP_(bitcoin_tap_env_hash)\nWRAP_(bitcoin_sig_all_hash)\n"
  },
  {
    "path": "Haskell/cbits/bitstream.c",
    "content": "#include \"bitstream.h\"\n\nconst size_t c_sizeof_bitstream = sizeof(bitstream);\n\nvoid c_initializeBitstream(bitstream *result, const unsigned char* arr, size_t len) {\n  *result = initializeBitstream(arr, len);\n}\n"
  },
  {
    "path": "Haskell/cbits/coreJets.c",
    "content": "#include \"jets.h\"\n#include \"wrappers.h\"\n\nCOREWRAP_(verify)\nCOREWRAP_(low_1)\nCOREWRAP_(low_8)\nCOREWRAP_(low_16)\nCOREWRAP_(low_32)\nCOREWRAP_(low_64)\nCOREWRAP_(high_1)\nCOREWRAP_(high_8)\nCOREWRAP_(high_16)\nCOREWRAP_(high_32)\nCOREWRAP_(high_64)\nCOREWRAP_(complement_1)\nCOREWRAP_(complement_8)\nCOREWRAP_(complement_16)\nCOREWRAP_(complement_32)\nCOREWRAP_(complement_64)\nCOREWRAP_(and_1)\nCOREWRAP_(and_8)\nCOREWRAP_(and_16)\nCOREWRAP_(and_32)\nCOREWRAP_(and_64)\nCOREWRAP_(or_1)\nCOREWRAP_(or_8)\nCOREWRAP_(or_16)\nCOREWRAP_(or_32)\nCOREWRAP_(or_64)\nCOREWRAP_(xor_1)\nCOREWRAP_(xor_8)\nCOREWRAP_(xor_16)\nCOREWRAP_(xor_32)\nCOREWRAP_(xor_64)\nCOREWRAP_(maj_1)\nCOREWRAP_(maj_8)\nCOREWRAP_(maj_16)\nCOREWRAP_(maj_32)\nCOREWRAP_(maj_64)\nCOREWRAP_(xor_xor_1)\nCOREWRAP_(xor_xor_8)\nCOREWRAP_(xor_xor_16)\nCOREWRAP_(xor_xor_32)\nCOREWRAP_(xor_xor_64)\nCOREWRAP_(ch_1)\nCOREWRAP_(ch_8)\nCOREWRAP_(ch_16)\nCOREWRAP_(ch_32)\nCOREWRAP_(ch_64)\nCOREWRAP_(some_1)\nCOREWRAP_(some_8)\nCOREWRAP_(some_16)\nCOREWRAP_(some_32)\nCOREWRAP_(some_64)\nCOREWRAP_(all_8)\nCOREWRAP_(all_16)\nCOREWRAP_(all_32)\nCOREWRAP_(all_64)\nCOREWRAP_(eq_1)\nCOREWRAP_(eq_8)\nCOREWRAP_(eq_16)\nCOREWRAP_(eq_32)\nCOREWRAP_(eq_64)\nCOREWRAP_(eq_256)\nCOREWRAP_(full_left_shift_8_1)\nCOREWRAP_(full_left_shift_8_2)\nCOREWRAP_(full_left_shift_8_4)\nCOREWRAP_(full_left_shift_16_1)\nCOREWRAP_(full_left_shift_16_2)\nCOREWRAP_(full_left_shift_16_4)\nCOREWRAP_(full_left_shift_16_8)\nCOREWRAP_(full_left_shift_32_1)\nCOREWRAP_(full_left_shift_32_2)\nCOREWRAP_(full_left_shift_32_4)\nCOREWRAP_(full_left_shift_32_8)\nCOREWRAP_(full_left_shift_32_16)\nCOREWRAP_(full_left_shift_64_1)\nCOREWRAP_(full_left_shift_64_2)\nCOREWRAP_(full_left_shift_64_4)\nCOREWRAP_(full_left_shift_64_8)\nCOREWRAP_(full_left_shift_64_16)\nCOREWRAP_(full_left_shift_64_32)\nCOREWRAP_(full_right_shift_8_1)\nCOREWRAP_(full_right_shift_8_2)\nCOREWRAP_(full_right_shift_8_4)\nCOREWRAP_(full_right_shift_16_1)\nCOREWRAP_(full_right_shift_16_2)\nCOREWRAP_(full_right_shift_16_4)\nCOREWRAP_(full_right_shift_16_8)\nCOREWRAP_(full_right_shift_32_1)\nCOREWRAP_(full_right_shift_32_2)\nCOREWRAP_(full_right_shift_32_4)\nCOREWRAP_(full_right_shift_32_8)\nCOREWRAP_(full_right_shift_32_16)\nCOREWRAP_(full_right_shift_64_1)\nCOREWRAP_(full_right_shift_64_2)\nCOREWRAP_(full_right_shift_64_4)\nCOREWRAP_(full_right_shift_64_8)\nCOREWRAP_(full_right_shift_64_16)\nCOREWRAP_(full_right_shift_64_32)\nCOREWRAP_(leftmost_8_1)\nCOREWRAP_(leftmost_8_2)\nCOREWRAP_(leftmost_8_4)\nCOREWRAP_(leftmost_16_1)\nCOREWRAP_(leftmost_16_2)\nCOREWRAP_(leftmost_16_4)\nCOREWRAP_(leftmost_16_8)\nCOREWRAP_(leftmost_32_1)\nCOREWRAP_(leftmost_32_2)\nCOREWRAP_(leftmost_32_4)\nCOREWRAP_(leftmost_32_8)\nCOREWRAP_(leftmost_32_16)\nCOREWRAP_(leftmost_64_1)\nCOREWRAP_(leftmost_64_2)\nCOREWRAP_(leftmost_64_4)\nCOREWRAP_(leftmost_64_8)\nCOREWRAP_(leftmost_64_16)\nCOREWRAP_(leftmost_64_32)\nCOREWRAP_(rightmost_8_1)\nCOREWRAP_(rightmost_8_2)\nCOREWRAP_(rightmost_8_4)\nCOREWRAP_(rightmost_16_1)\nCOREWRAP_(rightmost_16_2)\nCOREWRAP_(rightmost_16_4)\nCOREWRAP_(rightmost_16_8)\nCOREWRAP_(rightmost_32_1)\nCOREWRAP_(rightmost_32_2)\nCOREWRAP_(rightmost_32_4)\nCOREWRAP_(rightmost_32_8)\nCOREWRAP_(rightmost_32_16)\nCOREWRAP_(rightmost_64_1)\nCOREWRAP_(rightmost_64_2)\nCOREWRAP_(rightmost_64_4)\nCOREWRAP_(rightmost_64_8)\nCOREWRAP_(rightmost_64_16)\nCOREWRAP_(rightmost_64_32)\nCOREWRAP_(left_pad_low_1_8)\nCOREWRAP_(left_pad_low_1_16)\nCOREWRAP_(left_pad_low_8_16)\nCOREWRAP_(left_pad_low_1_32)\nCOREWRAP_(left_pad_low_8_32)\nCOREWRAP_(left_pad_low_16_32)\nCOREWRAP_(left_pad_low_1_64)\nCOREWRAP_(left_pad_low_8_64)\nCOREWRAP_(left_pad_low_16_64)\nCOREWRAP_(left_pad_low_32_64)\nCOREWRAP_(left_pad_high_1_8)\nCOREWRAP_(left_pad_high_1_16)\nCOREWRAP_(left_pad_high_8_16)\nCOREWRAP_(left_pad_high_1_32)\nCOREWRAP_(left_pad_high_8_32)\nCOREWRAP_(left_pad_high_16_32)\nCOREWRAP_(left_pad_high_1_64)\nCOREWRAP_(left_pad_high_8_64)\nCOREWRAP_(left_pad_high_16_64)\nCOREWRAP_(left_pad_high_32_64)\nCOREWRAP_(left_extend_1_8)\nCOREWRAP_(left_extend_1_16)\nCOREWRAP_(left_extend_8_16)\nCOREWRAP_(left_extend_1_32)\nCOREWRAP_(left_extend_8_32)\nCOREWRAP_(left_extend_16_32)\nCOREWRAP_(left_extend_1_64)\nCOREWRAP_(left_extend_8_64)\nCOREWRAP_(left_extend_16_64)\nCOREWRAP_(left_extend_32_64)\nCOREWRAP_(right_pad_low_1_8)\nCOREWRAP_(right_pad_low_1_16)\nCOREWRAP_(right_pad_low_8_16)\nCOREWRAP_(right_pad_low_1_32)\nCOREWRAP_(right_pad_low_8_32)\nCOREWRAP_(right_pad_low_16_32)\nCOREWRAP_(right_pad_low_1_64)\nCOREWRAP_(right_pad_low_8_64)\nCOREWRAP_(right_pad_low_16_64)\nCOREWRAP_(right_pad_low_32_64)\nCOREWRAP_(right_pad_high_1_8)\nCOREWRAP_(right_pad_high_1_16)\nCOREWRAP_(right_pad_high_8_16)\nCOREWRAP_(right_pad_high_1_32)\nCOREWRAP_(right_pad_high_8_32)\nCOREWRAP_(right_pad_high_16_32)\nCOREWRAP_(right_pad_high_1_64)\nCOREWRAP_(right_pad_high_8_64)\nCOREWRAP_(right_pad_high_16_64)\nCOREWRAP_(right_pad_high_32_64)\nCOREWRAP_(right_extend_8_16)\nCOREWRAP_(right_extend_8_32)\nCOREWRAP_(right_extend_16_32)\nCOREWRAP_(right_extend_8_64)\nCOREWRAP_(right_extend_16_64)\nCOREWRAP_(right_extend_32_64)\nCOREWRAP_(left_shift_with_8)\nCOREWRAP_(left_shift_with_16)\nCOREWRAP_(left_shift_with_32)\nCOREWRAP_(left_shift_with_64)\nCOREWRAP_(left_shift_8)\nCOREWRAP_(left_shift_16)\nCOREWRAP_(left_shift_32)\nCOREWRAP_(left_shift_64)\nCOREWRAP_(right_shift_with_8)\nCOREWRAP_(right_shift_with_16)\nCOREWRAP_(right_shift_with_32)\nCOREWRAP_(right_shift_with_64)\nCOREWRAP_(right_shift_8)\nCOREWRAP_(right_shift_16)\nCOREWRAP_(right_shift_32)\nCOREWRAP_(right_shift_64)\nCOREWRAP_(left_rotate_8)\nCOREWRAP_(left_rotate_16)\nCOREWRAP_(left_rotate_32)\nCOREWRAP_(left_rotate_64)\nCOREWRAP_(right_rotate_8)\nCOREWRAP_(right_rotate_16)\nCOREWRAP_(right_rotate_32)\nCOREWRAP_(right_rotate_64)\n\nCOREWRAP_(one_8)\nCOREWRAP_(one_16)\nCOREWRAP_(one_32)\nCOREWRAP_(one_64)\nCOREWRAP_(add_8)\nCOREWRAP_(add_16)\nCOREWRAP_(add_32)\nCOREWRAP_(add_64)\nCOREWRAP_(full_add_8)\nCOREWRAP_(full_add_16)\nCOREWRAP_(full_add_32)\nCOREWRAP_(full_add_64)\nCOREWRAP_(full_increment_8)\nCOREWRAP_(full_increment_16)\nCOREWRAP_(full_increment_32)\nCOREWRAP_(full_increment_64)\nCOREWRAP_(increment_8)\nCOREWRAP_(increment_16)\nCOREWRAP_(increment_32)\nCOREWRAP_(increment_64)\nCOREWRAP_(subtract_8)\nCOREWRAP_(subtract_16)\nCOREWRAP_(subtract_32)\nCOREWRAP_(subtract_64)\nCOREWRAP_(full_decrement_8)\nCOREWRAP_(full_decrement_16)\nCOREWRAP_(full_decrement_32)\nCOREWRAP_(full_decrement_64)\nCOREWRAP_(decrement_8)\nCOREWRAP_(decrement_16)\nCOREWRAP_(decrement_32)\nCOREWRAP_(decrement_64)\nCOREWRAP_(negate_8)\nCOREWRAP_(negate_16)\nCOREWRAP_(negate_32)\nCOREWRAP_(negate_64)\nCOREWRAP_(full_subtract_8)\nCOREWRAP_(full_subtract_16)\nCOREWRAP_(full_subtract_32)\nCOREWRAP_(full_subtract_64)\nCOREWRAP_(multiply_8)\nCOREWRAP_(multiply_16)\nCOREWRAP_(multiply_32)\nCOREWRAP_(multiply_64)\nCOREWRAP_(full_multiply_8)\nCOREWRAP_(full_multiply_16)\nCOREWRAP_(full_multiply_32)\nCOREWRAP_(full_multiply_64)\nCOREWRAP_(is_zero_8)\nCOREWRAP_(is_zero_16)\nCOREWRAP_(is_zero_32)\nCOREWRAP_(is_zero_64)\nCOREWRAP_(is_one_8)\nCOREWRAP_(is_one_16)\nCOREWRAP_(is_one_32)\nCOREWRAP_(is_one_64)\nCOREWRAP_(le_8)\nCOREWRAP_(le_16)\nCOREWRAP_(le_32)\nCOREWRAP_(le_64)\nCOREWRAP_(lt_8)\nCOREWRAP_(lt_16)\nCOREWRAP_(lt_32)\nCOREWRAP_(lt_64)\nCOREWRAP_(min_8)\nCOREWRAP_(min_16)\nCOREWRAP_(min_32)\nCOREWRAP_(min_64)\nCOREWRAP_(max_8)\nCOREWRAP_(max_16)\nCOREWRAP_(max_32)\nCOREWRAP_(max_64)\nCOREWRAP_(median_8)\nCOREWRAP_(median_16)\nCOREWRAP_(median_32)\nCOREWRAP_(median_64)\nCOREWRAP_(div_mod_8)\nCOREWRAP_(div_mod_16)\nCOREWRAP_(div_mod_32)\nCOREWRAP_(div_mod_64)\nCOREWRAP_(divide_8)\nCOREWRAP_(divide_16)\nCOREWRAP_(divide_32)\nCOREWRAP_(divide_64)\nCOREWRAP_(modulo_8)\nCOREWRAP_(modulo_16)\nCOREWRAP_(modulo_32)\nCOREWRAP_(modulo_64)\nCOREWRAP_(divides_8)\nCOREWRAP_(divides_16)\nCOREWRAP_(divides_32)\nCOREWRAP_(divides_64)\nCOREWRAP_(div_mod_128_64)\n\nCOREWRAP_(sha_256_iv)\nCOREWRAP_(sha_256_block)\nCOREWRAP_(sha_256_ctx_8_init)\nCOREWRAP_(sha_256_ctx_8_add_1)\nCOREWRAP_(sha_256_ctx_8_add_2)\nCOREWRAP_(sha_256_ctx_8_add_4)\nCOREWRAP_(sha_256_ctx_8_add_8)\nCOREWRAP_(sha_256_ctx_8_add_16)\nCOREWRAP_(sha_256_ctx_8_add_32)\nCOREWRAP_(sha_256_ctx_8_add_64)\nCOREWRAP_(sha_256_ctx_8_add_128)\nCOREWRAP_(sha_256_ctx_8_add_256)\nCOREWRAP_(sha_256_ctx_8_add_512)\nCOREWRAP_(sha_256_ctx_8_add_buffer_511)\nCOREWRAP_(sha_256_ctx_8_finalize)\n\nCOREWRAP_(fe_normalize)\nCOREWRAP_(fe_negate)\nCOREWRAP_(fe_add)\nCOREWRAP_(fe_square)\nCOREWRAP_(fe_multiply)\nCOREWRAP_(fe_multiply_beta)\nCOREWRAP_(fe_invert)\nCOREWRAP_(fe_square_root)\nCOREWRAP_(fe_is_zero)\nCOREWRAP_(fe_is_odd)\nCOREWRAP_(scalar_normalize)\nCOREWRAP_(scalar_negate)\nCOREWRAP_(scalar_add)\nCOREWRAP_(scalar_square)\nCOREWRAP_(scalar_multiply)\nCOREWRAP_(scalar_multiply_lambda)\nCOREWRAP_(scalar_invert)\nCOREWRAP_(scalar_is_zero)\nCOREWRAP_(gej_infinity)\nCOREWRAP_(gej_rescale)\nCOREWRAP_(gej_normalize)\nCOREWRAP_(gej_negate)\nCOREWRAP_(ge_negate)\nCOREWRAP_(gej_double)\nCOREWRAP_(gej_add)\nCOREWRAP_(gej_ge_add_ex)\nCOREWRAP_(gej_ge_add)\nCOREWRAP_(gej_is_infinity)\nCOREWRAP_(gej_equiv)\nCOREWRAP_(gej_ge_equiv)\nCOREWRAP_(gej_x_equiv)\nCOREWRAP_(gej_y_is_odd)\nCOREWRAP_(gej_is_on_curve)\nCOREWRAP_(ge_is_on_curve)\nCOREWRAP_(scale)\nCOREWRAP_(off_curve_scale)\nCOREWRAP_(generate)\nCOREWRAP_(linear_combination_1)\nCOREWRAP_(off_curve_linear_combination_1)\nCOREWRAP_(linear_verify_1)\nCOREWRAP_(decompress)\nCOREWRAP_(point_verify_1)\nCOREWRAP_(check_sig_verify)\nCOREWRAP_(bip_0340_verify)\nCOREWRAP_(swu)\nCOREWRAP_(hash_to_curve)\nCOREWRAP_(parse_lock)\nCOREWRAP_(parse_sequence)\nCOREWRAP_(tapdata_init)\n"
  },
  {
    "path": "Haskell/cbits/dag.c",
    "content": "#include \"dag.h\"\n#include \"bitstream.h\"\n#include \"bitstring.h\"\n\nconst size_t c_sizeof_dag_node = sizeof(dag_node);\n\nvoid c_compute_word_cmr(unsigned char *cmr, bitstream* stream, size_t offset, size_t n) {\n  sha256_midstate result;\n  bitstring value;\n  simplicity_readBitstring(&value, offset, stream); /* skip offset many bits. */\n  simplicity_readBitstring(&value, (size_t)1 << n, stream);\n  result = simplicity_computeWordCMR(&value, n);\n  sha256_fromMidstate(cmr, result.s);\n}\n\nvoid c_dag_node_get_cmr(unsigned char *cmr, const dag_node* node) {\n  sha256_fromMidstate(cmr, node->cmr.s);\n}\n"
  },
  {
    "path": "Haskell/cbits/elements/env.c",
    "content": "#include \"simplicity_alloc.h\"\n#include \"simplicity/elements/env.h\"\n#include \"elements/txEnv.h\"\n\nconst size_t c_sizeof_rawElementsBuffer = sizeof(rawElementsBuffer);\nconst size_t c_sizeof_rawElementsOutput = sizeof(rawElementsOutput);\nconst size_t c_sizeof_rawElementsInput = sizeof(rawElementsInput);\nconst size_t c_sizeof_rawElementsTransaction = sizeof(rawElementsTransaction);\nconst size_t c_sizeof_rawElementsTapEnv = sizeof(rawElementsTapEnv);\nconst size_t c_sizeof_txEnv = sizeof(txEnv);\n\nvoid c_set_rawElementsBuffer(rawElementsBuffer* result, const char* buf, unsigned int len) {\n  *result = (rawElementsBuffer){ .buf = buf, .len = len };\n}\n\nvoid c_set_rawElementsOutput(rawElementsOutput* result, const char* asset, const char* value, const char* nonce, const rawElementsBuffer* scriptPubKey,\n                                        const rawElementsBuffer* surjectionProof, const rawElementsBuffer* rangeProof) {\n  *result = (rawElementsOutput){ .asset = asset\n                       , .value = value\n                       , .nonce = nonce\n                       , .scriptPubKey = *scriptPubKey\n                       , .surjectionProof = *surjectionProof\n                       , .rangeProof = *rangeProof };\n}\n\nvoid c_set_rawElementsInput(rawElementsInput* result, const rawElementsBuffer* annex, const char* pegin, const rawElementsBuffer* scriptSig,\n                                      const char* prevTxid, unsigned int prevIx,\n                                      const char* asset, const char* value, const rawElementsBuffer* scriptPubKey,\n                                      unsigned int sequence,\n                                      const char* blindingNonce, const char* assetEntropy, const char* amount, const char* inflationKeys,\n                                      const rawElementsBuffer* amountRangePrf, const rawElementsBuffer* inflationKeysRangePrf) {\n  *result = (rawElementsInput){ .annex = annex\n                      , .scriptSig = *scriptSig\n                      , .prevTxid = prevTxid\n                      , .pegin = pegin\n                      , .issuance = { .blindingNonce = blindingNonce\n                                    , .assetEntropy = assetEntropy\n                                    , .amount = amount\n                                    , .inflationKeys = inflationKeys\n                                    , .amountRangePrf = *amountRangePrf\n                                    , .inflationKeysRangePrf = *inflationKeysRangePrf\n                                    }\n                      , .txo = {.asset = asset, .value = value, .scriptPubKey = *scriptPubKey}\n                      , .prevIx = prevIx\n                      , .sequence = sequence\n                      };\n}\n\nvoid c_set_rawElementsTransaction(rawElementsTransaction* result, const unsigned char* txid, unsigned int version,\n                                                  const rawElementsInput* input, unsigned int numInputs,\n                                                  const rawElementsOutput* output, unsigned int numOutputs,\n                                                  unsigned int lockTime) {\n  *result = (rawElementsTransaction){ .txid = txid\n                            , .version = version\n                            , .input = input, .numInputs = numInputs\n                            , .output = output, .numOutputs = numOutputs\n                            , .lockTime = lockTime,\n                            };\n}\n\nvoid c_set_rawElementsTapEnv(rawElementsTapEnv* result, const char* controlBlock, unsigned char pathLen, const char* scriptCMR) {\n  *result = (rawElementsTapEnv){ .controlBlock = controlBlock, .pathLen = pathLen, .scriptCMR = scriptCMR };\n}\n\nvoid c_set_txEnv(txEnv* result, const elementsTransaction* tx, const elementsTapEnv* taproot, const char* genesisHash, unsigned int ix) {\n  sha256_midstate genesis;\n  sha256_toMidstate(genesis.s, genesisHash);\n  *result = simplicity_elements_build_txEnv(tx, taproot, &genesis, ix);\n}\n"
  },
  {
    "path": "Haskell/cbits/elements/jets.c",
    "content": "#include \"elements/elementsJets.h\"\n#include \"../wrappers.h\"\n\nWRAP_(version)\nWRAP_(lock_time)\nWRAP_(input_pegin)\nWRAP_(input_prev_outpoint)\nWRAP_(input_asset)\nWRAP_(input_amount)\nWRAP_(input_script_hash)\nWRAP_(input_sequence)\nWRAP_(input_annex_hash)\nWRAP_(input_script_sig_hash)\nWRAP_(reissuance_blinding)\nWRAP_(new_issuance_contract)\nWRAP_(reissuance_entropy)\nWRAP_(issuance_asset_amount)\nWRAP_(issuance_token_amount)\nWRAP_(issuance_asset_proof)\nWRAP_(issuance_token_proof)\nWRAP_(output_asset)\nWRAP_(output_amount)\nWRAP_(output_nonce)\nWRAP_(output_script_hash)\nWRAP_(output_null_datum)\nWRAP_(output_is_fee)\nWRAP_(output_surjection_proof)\nWRAP_(output_range_proof)\nWRAP_(total_fee)\nWRAP_(genesis_block_hash)\nWRAP_(script_cmr)\nWRAP_(transaction_id)\nWRAP_(current_index)\nWRAP_(current_pegin)\nWRAP_(current_prev_outpoint)\nWRAP_(current_asset)\nWRAP_(current_amount)\nWRAP_(current_script_hash)\nWRAP_(current_sequence)\nWRAP_(current_reissuance_blinding)\nWRAP_(current_new_issuance_contract)\nWRAP_(current_reissuance_entropy)\nWRAP_(current_issuance_asset_amount)\nWRAP_(current_issuance_token_amount)\nWRAP_(current_issuance_asset_proof)\nWRAP_(current_issuance_token_proof)\nWRAP_(current_annex_hash)\nWRAP_(current_script_sig_hash)\nWRAP_(tapleaf_version)\nWRAP_(tappath)\nWRAP_(internal_key)\nWRAP_(num_inputs)\nWRAP_(num_outputs)\nWRAP_(tx_is_final)\nWRAP_(tx_lock_height)\nWRAP_(tx_lock_time)\nWRAP_(broken_do_not_use_tx_lock_distance)\nWRAP_(broken_do_not_use_tx_lock_duration)\nWRAP_(check_lock_height)\nWRAP_(check_lock_time)\nWRAP_(broken_do_not_use_check_lock_distance)\nWRAP_(broken_do_not_use_check_lock_duration)\nCOREWRAP_(calculate_issuance_entropy)\nCOREWRAP_(calculate_asset)\nCOREWRAP_(calculate_explicit_token)\nCOREWRAP_(calculate_confidential_token)\nCOREWRAP_(lbtc_asset)\nCOREWRAP_(outpoint_hash)\nCOREWRAP_(asset_amount_hash)\nCOREWRAP_(nonce_hash)\nCOREWRAP_(annex_hash)\nCOREWRAP_(build_tapleaf_simplicity)\nCOREWRAP_(build_tapbranch)\nCOREWRAP_(build_taptweak)\nWRAP_(issuance)\nWRAP_(issuance_entropy)\nWRAP_(issuance_asset)\nWRAP_(issuance_token)\nWRAP_(output_amounts_hash)\nWRAP_(output_nonces_hash)\nWRAP_(output_scripts_hash)\nWRAP_(output_range_proofs_hash)\nWRAP_(output_surjection_proofs_hash)\nWRAP_(outputs_hash)\nWRAP_(output_hash)\nWRAP_(input_outpoints_hash)\nWRAP_(input_amounts_hash)\nWRAP_(input_scripts_hash)\nWRAP_(input_utxos_hash)\nWRAP_(input_utxo_hash)\nWRAP_(input_sequences_hash)\nWRAP_(input_annexes_hash)\nWRAP_(input_script_sigs_hash)\nWRAP_(inputs_hash)\nWRAP_(input_hash)\nWRAP_(issuance_asset_amounts_hash)\nWRAP_(issuance_token_amounts_hash)\nWRAP_(issuance_range_proofs_hash)\nWRAP_(issuance_blinding_entropy_hash)\nWRAP_(issuances_hash)\nWRAP_(issuance_hash)\nWRAP_(tx_hash)\nWRAP_(tapleaf_hash)\nWRAP_(tappath_hash)\nWRAP_(tap_env_hash)\nWRAP_(sig_all_hash)\n"
  },
  {
    "path": "Haskell/cbits/frame.c",
    "content": "#include \"frame.h\"\n\nconst size_t c_sizeof_UWORD = sizeof(UWORD);\nconst size_t c_sizeof_frameItem = sizeof(frameItem);\n\nvoid c_initReadFrame(frameItem* frame, size_t n, UWORD* from) {\n  *frame = initReadFrame(n, from);\n}\n\nvoid c_initWriteFrame(frameItem* frame, size_t n, UWORD* from) {\n  *frame = initWriteFrame(n, from);\n}\n\nbool c_readBit(frameItem* frame) {\n  return readBit(frame);\n}\n\nvoid c_writeBit(frameItem* frame, bool bit) {\n  writeBit(frame, bit);\n}\n\nvoid c_forwardBits(frameItem* frame, size_t n) {\n  forwardBits(frame, n);\n}\n\nvoid c_skipBits(frameItem* frame, size_t n) {\n  skipBits(frame, n);\n}\n"
  },
  {
    "path": "Haskell/cbits/wrappers.h",
    "content": "#ifndef WRAPPERS_H\n#define WRAPPERS_H\n\n#define COREWRAP_(jet)                                                                                                        \\\nbool c_##jet(frameItem* dst, const frameItem* src) {                                                                          \\\n  bool result = simplicity_##jet(dst, *src, NULL);                                                                            \\\n  assert (!result || 0 == dst->offset);                                                                                       \\\n  return result;                                                                                                              \\\n}\n\n#define WRAP_(jet)                                                                                                            \\\nbool c_##jet(frameItem* dst, const frameItem* src, const txEnv* env) {                                                        \\\n  bool result = simplicity_##jet(dst, *src, env);                                                                             \\\n  assert (!result || 0 == dst->offset);                                                                                       \\\n  return result;                                                                                                              \\\n}\n\n#endif\n"
  },
  {
    "path": "Haskell-Examples/TestnetTransaction.hs",
    "content": "-- | A little program that can be used to make a test network transactions on liquid testnet or other regtest networks.\n-- See <https://asciinema.org/a/684459> for a walkthrogh on how to use it.\nmodule TestnetTransaction where\n\nimport Control.Monad (guard)\nimport qualified Data.Array as Arr\nimport Data.Bits (Bits, testBit, unsafeShiftL, unsafeShiftR, xor, (.&.), (.|.))\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Lazy as BSL\nimport qualified Data.ByteString.Char8 as BSC\nimport Data.Char (toLower, toUpper)\nimport Data.Foldable (foldl')\nimport Data.Functor.Identity (Identity, runIdentity)\nimport Data.Ix (Ix (..))\nimport Data.Word (Word8)\n\nimport Data.List (intercalate)\nimport Data.String (fromString)\nimport Data.Serialize (decode, encode, runPut)\nimport Data.Vector (fromList)\nimport Numeric (readHex, showHex)\nimport Lens.Family2 ((^.), review, over)\nimport System.IO (BufferMode(NoBuffering), hSetBuffering, stdin, stdout)\nimport System.Entropy (getEntropy)\nimport Simplicity.Digest (Hash256, le256, be256, bsHash, integerHash256)\nimport Simplicity.LibSecp256k1.Spec ( PubKey(PubKey), GE(GE), Point(Point), Sig(Sig)\n                                    , g, gej_normalize, gej_ge_add_ex, scale, scalar\n                                    , pubkey_unpack, decompress, groupOrder, fe_pack, fe_is_odd\n                                    , linear_combination_1, ge_to_gej\n                                    )\nimport Simplicity.Word (Word256)\nimport Simplicity.MerkleRoot (CommitmentRoot, commitmentRoot)\nimport Simplicity.Programs.Generic (scribe)\nimport Simplicity.Programs.CheckSig.Lib (checkSigVerify')\nimport Simplicity.Serialization (putBitStream)\nimport Simplicity.Elements.Jets (jetSubst, pruneSubst, fastEval, unwrap, putTermLengthCode)\nimport Simplicity.Elements.Programs.SigHash.Lib (sigAllHash)\nimport Simplicity.Elements.DataTypes ( Asset, asset, Amount, amount, clearAssetPrf\n                                     , Nonce(Nonce), Confidential(Explicit), Outpoint(Outpoint)\n                                     , UTXO(..), SigTxInput(..), TxOutput(..), SigTx(..)\n                                     , TapEnv(..)\n                                     )\nimport Simplicity.Elements.Primitive (primEnv)\nimport qualified Simplicity.Ty.Word\n\nimport Data.List (sort)\n\n-- # Bech 32\n-- Adapted from https://github.com/sipa/bech32/blob/842b49701067c585762a7b6550439d2d5f4918ad/ref/haskell/src/Codec/Binary/Bech32.hs\n-- Copyright (c) 2017 Marko Bencun\n--\n-- Permission is hereby granted, free of charge, to any person obtaining a copy\n-- of this software and associated documentation files (the \"Software\"), to deal\n-- in the Software without restriction, including without limitation the rights\n-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n-- copies of the Software, and to permit persons to whom the Software is\n-- furnished to do so, subject to the following conditions:\n--\n-- The above copyright notice and this permission notice shall be included in\n-- all copies or substantial portions of the Software.\n--\n-- THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n-- THE SOFTWARE.\n\ntype HRP = BS.ByteString\ntype Data = [Word8]\n\n(.>>.), (.<<.) :: Bits a => a -> Int -> a\n(.>>.) = unsafeShiftR\n(.<<.) = unsafeShiftL\n\nnewtype Word5 = UnsafeWord5 Word8\n              deriving (Eq, Ord, Show)\n\ninstance Ix Word5 where\n  range (UnsafeWord5 m, UnsafeWord5 n) = map UnsafeWord5 $ range (m, n)\n  index (UnsafeWord5 m, UnsafeWord5 n) (UnsafeWord5 i) = index (m, n) i\n  inRange (m,n) i = m <= i && i <= n\n\nword5 :: Integral a => a -> Word5\nword5 x = UnsafeWord5 ((fromIntegral x) .&. 31)\n{-# INLINE word5 #-}\n{-# SPECIALIZE INLINE word5 :: Word8 -> Word5 #-}\n\nfromWord5 :: Num a => Word5 -> a\nfromWord5 (UnsafeWord5 x) = fromIntegral x\n{-# INLINE fromWord5 #-}\n{-# SPECIALIZE INLINE fromWord5 :: Word5 -> Word8 #-}\n\ncharset :: Arr.Array Word5 Char\ncharset = Arr.listArray (UnsafeWord5 0, UnsafeWord5 31) \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\"\n\ncharsetMap :: Char -> Maybe Word5\ncharsetMap c | inRange (Arr.bounds inv) upperC = inv Arr.! upperC\n             | otherwise = Nothing\n  where\n    upperC = toUpper c\n    inv = Arr.listArray ('0', 'Z') (repeat Nothing) Arr.// (map swap (Arr.assocs charset))\n    swap (a, b) = (toUpper b, Just a)\n\nbech32Polymod :: [Word5] -> Word\nbech32Polymod values = foldl' go 1 values .&. 0x3fffffff\n  where\n    go chk value = foldl' xor chk' [g | (g, i) <- zip generator [25..], testBit chk i]\n      where\n        generator = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]\n        chk' = chk .<<. 5 `xor` (fromWord5 value)\n\nbech32HRPExpand :: HRP -> [Word5]\nbech32HRPExpand hrp = map (UnsafeWord5 . (.>>. 5)) (BS.unpack hrp) ++ [UnsafeWord5 0] ++ map word5 (BS.unpack hrp)\n\nbech32CreateChecksum :: Word -> HRP -> [Word5] -> [Word5]\nbech32CreateChecksum spec hrp dat = [word5 (polymod .>>. i) | i <- [25,20..0]]\n  where\n    values = bech32HRPExpand hrp ++ dat\n    polymod = bech32Polymod (values ++ map UnsafeWord5 [0, 0, 0, 0, 0, 0]) `xor` spec\n\nbech32VerifyChecksum :: HRP -> [Word5] -> Word\nbech32VerifyChecksum hrp dat = bech32Polymod (bech32HRPExpand hrp ++ dat)\n\ndata EncodeError =\n      ResultStringLengthExceeded\n    | InvalidHumanReadablePart\n    deriving (Show, Eq)\n\nbech32Encode :: Word -> HRP -> [Word5] -> Either EncodeError BS.ByteString\nbech32Encode spec hrp dat = do\n    verify InvalidHumanReadablePart $ validHRP hrp\n    let dat' = dat ++ bech32CreateChecksum spec hrp dat\n        rest = map (charset Arr.!) dat'\n        result = BSC.concat [BSC.map toLower hrp, BSC.pack \"1\", BSC.pack rest]\n    verify ResultStringLengthExceeded $ BS.length result <= 90\n    return result\n\nvalidHRP :: BS.ByteString -> Bool\nvalidHRP hrp = not (BS.null hrp) && BS.all (\\char -> char >= 33 && char <= 126) hrp\n\ndata DecodeError =\n    Bech32StringLengthExceeded\n  | CaseInconsistency\n  | TooShortDataPart\n  | InvalidHRP\n  | ChecksumVerificationFail\n  | InvalidCharsetMap\n  deriving (Show, Eq)\n\nbech32Decode :: BS.ByteString -> Either DecodeError (Word, HRP, [Word5])\nbech32Decode bech32 = do\n    verify Bech32StringLengthExceeded $ BS.length bech32 <= 90\n    verify CaseInconsistency $ validCase bech32\n    let (hrp, dat) = BSC.breakEnd (== '1') $ BSC.map toLower bech32\n    verify TooShortDataPart $ BS.length dat >= 6\n    hrp' <- maybeToRight InvalidHRP $ BSC.stripSuffix (BSC.pack \"1\") hrp\n    verify InvalidHRP $ validHRP hrp'\n    dat' <- maybeToRight InvalidCharsetMap . mapM charsetMap $ BSC.unpack dat\n    let spec = bech32VerifyChecksum hrp' dat'\n    return (spec, hrp', take (BS.length dat - 6) dat')\n      where\n        validCase :: BS.ByteString -> Bool\n        validCase b32 = BSC.map toUpper b32 == b32 || BSC.map toLower b32 == b32\n\ntype Pad f = Int -> Int -> Word -> [[Word]] -> f [[Word]]\n\nyesPadding :: Pad Identity\nyesPadding _ 0 _ result        = return result\nyesPadding _ _ padValue result = return $ [padValue] : result\n{-# INLINE yesPadding #-}\n\nnoPadding :: Pad Maybe\nnoPadding frombits bits padValue result = do\n    guard $ bits < frombits && padValue == 0\n    return result\n{-# INLINE noPadding #-}\n\n-- Big endian conversion of a bytestring from base 2^frombits to base 2^tobits.\n-- frombits and twobits must be positive and 2^frombits and 2^tobits must be smaller than the size of Word.\n-- Every value in dat must be strictly smaller than 2^frombits.\nconvertBits :: Functor f => [Word] -> Int -> Int -> Pad f -> f [Word]\nconvertBits dat frombits tobits pad = fmap (concat . reverse) $ go dat 0 0 []\n  where\n    go [] acc bits result =\n        let padValue = (acc .<<. (tobits - bits)) .&. maxv\n        in pad frombits bits padValue result\n    go (value:dat') acc bits result = go dat' acc' (bits' `rem` tobits) (result':result)\n      where\n        acc' = (acc .<<. frombits) .|. fromIntegral value\n        bits' = bits + frombits\n        result' = [(acc' .>>. b) .&. maxv | b <- [bits'-tobits,bits'-2*tobits..0]]\n    maxv = (1 .<<. tobits) - 1\n{-# INLINE convertBits #-}\n\ntoBase32 :: [Word8] -> [Word5]\ntoBase32 dat = map word5 $ runIdentity $ convertBits (map fromIntegral dat) 8 5 yesPadding\n\ntoBase256 :: [Word5] -> Maybe [Word8]\ntoBase256 dat = fmap (map fromIntegral) $ convertBits (map fromWord5 dat) 5 8 noPadding\n\nsegwitCheck :: Word8 -> Data -> Maybe Word\nsegwitCheck witver witprog = do\n    guard $ witver <= 16\n    if witver == 0\n    then guard (length witprog == 20 || length witprog == 32) >> return 1\n    else guard (length witprog >= 2 && length witprog <= 40) >> return bech32mConst\n where\n  bech32mConst = 0x2bc830a3\n\nsegwitDecode :: HRP -> BS.ByteString -> Maybe (Word8, Data)\nsegwitDecode hrp addr = do\n    (spec', hrp', dat) <- rightToMaybe $ bech32Decode addr\n    guard $ (hrp == hrp') && not (null dat)\n    let (UnsafeWord5 witver : datBase32) = dat\n    decoded <- toBase256 datBase32\n    spec <- segwitCheck witver decoded\n    guard $ spec == spec'\n    return (witver, decoded)\n\nsegwitEncode :: HRP -> Word8 -> Data -> Maybe BS.ByteString\nsegwitEncode hrp witver witprog = do\n    spec <- segwitCheck witver witprog\n    rightToMaybe $ bech32Encode spec hrp $ UnsafeWord5 witver : toBase32 witprog\n\nrightToMaybe :: Either l r -> Maybe r\nrightToMaybe = either (const Nothing) Just\n\nmaybeToRight :: l -> Maybe r -> Either l r\nmaybeToRight l = maybe (Left l) Right\n\nverify :: a -> Bool -> Either a ()\nverify _ True  = Right ()\nverify v False = Left v\n\n-- Construct an Elements regtest non-blinded address for a segwit program\ntexScriptPubKey :: Word8 -> Data -> BSL.ByteString\ntexScriptPubKey segver prog | 2 <= len && len <= 40 = BSL.singleton encver <> BSL.singleton len <> (BSL.pack prog)\n where\n  len = fromIntegral (length prog)\n  encver | segver == 0 = 0\n         | segver <= 16 = 80 + segver\n\n-- # Taproot constructions\n\n-- Construct a tapleaf hash for a given \"script\" for a given leaf version.\ntapleafHash :: Word8 -> BS.ByteString -> Hash256\ntapleafHash leafver script | even leafver = bsHash\n                                         $ encode tag <> encode tag\n                                        <> BS.singleton leafver <> compactSize script <> script\n where\n  tag = bsHash (fromString \"TapLeaf/elements\")\n  compactSize str | size < 0xfd = BS.singleton (fromIntegral size)\n   where\n    size = BS.length str\n\n-- TapPath contains the data relevant for a taproot address supporting a single tapleaf program.\n-- It contains the taproot output key, the control block connecting to the leaf, and the script at that leaf\ndata TapPath = TapPath { outputKey :: PubKey\n                       , controlBlock :: BS.ByteString\n                       , script :: BS.ByteString\n                       }\n\n-- Create a TapPath for a taproot program.\ntapPath ::  Word8 -> BS.ByteString -> [Hash256] -> PubKey -> Maybe TapPath\ntapPath leafver script path internalKey | even leafver = do\n  pt <- pubkey_unpack internalKey\n  p <- decompress pt\n  guard (tweak < groupOrder)\n  let Just ge = (do s <- scale (scalar tweak) g\n                    gej_normalize (snd (gej_ge_add_ex s p)))\n  let Point b x = compress ge\n  let cb = BS.singleton (leafver .|. if b then 1 else 0) <> encode internalKey <> foldMap encode path\n  return $ TapPath { outputKey = PubKey (fe_pack x), controlBlock = cb, script = script }\n where\n  leafHash = tapleafHash leafver script\n  branch h1 h2 = bsHash $ encode branchtag <> encode branchtag <> encode a <> encode b\n   where\n    branchtag = bsHash (fromString \"TapBranch/elements\")\n    [a,b] = sort [h1, h2]\n  rootHash = foldl branch leafHash path\n  tag = bsHash (fromString \"TapTweak/elements\")\n  tweak = integerHash256 . bsHash $ encode tag <> encode tag <> encode internalKey <> encode rootHash\n  compress (GE x y) = Point (fe_is_odd y) x\n\n-- # Misc.\n\nhexString :: BS.ByteString -> String\nhexString str = (\\s -> replicate (2-length s) '0' ++ s) . flip showHex \"\" =<< BS.unpack str\n\ngetHexLine :: (Show a, Integral a) => String -> Int -> Maybe a -> IO a\ngetHexLine prompt digits mdef = do\n  putStr (showString prompt . maybe id (\\def -> showString \" \" . showParen True (showHex def)) mdef $ \"? \")\n  str <- getLine\n  case (str, mdef) of\n    (\"\", Just x) -> return x\n    otherwise -> do\n      guard $ digits == length str\n      let [(x,\"\")] = readHex str\n      return x\n\ngetIntLine :: (Read a, Integral a) => String -> IO a\ngetIntLine prompt = do\n  putStr $ prompt ++ \"? \"\n  readLn\n\ngetStrLine :: String -> String -> IO String\ngetStrLine prompt def = do\n  putStr $ prompt ++ \" (\" ++ def ++ \")? \"\n  str <- getLine\n  return $ if null str then def else str\n\n-- This is an standard unspendable public key with no known private key as defined in BIP-0341.\nunspendablePubKey tweak = PubKey (fe_pack x)\n where\n  Just unspendable = pubkey_unpack (PubKey 0x50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0) >>= decompress\n  Just (GE x _) = linear_combination_1 (scalar 1) (ge_to_gej unspendable) tweak >>= gej_normalize\n\n-- This is an example Pubkey.  It has a well know private key.  DO NOT USE for anything but testing.\ninsecurePubKey = PubKey 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n\n-- DO NOT USE!\n-- This is for testing purposes only.\n-- Do not even copy this function and try to \"fix it\" to make it work.\n-- It is insecure.  It uses an insecure nonce; it signs only for insecurePubKey.\n-- DO NOT USE!\n-- For production purposes you need to use proper bindings to <https://github.com/bitcoin-core/secp256k1>.\ninsecureSign :: Hash256 -> Sig\ninsecureSign msg = Sig 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n                       (fromInteger ((k * (1 + e)) `mod` order))\n where\n  order = groupOrder\n  k = 1 + fromInteger order `div` 2\n  tag = encode . Simplicity.Digest.bsHash $ Data.String.fromString \"BIP0340/challenge\"\n  e = integerHash256 . bsHash $ tag <> tag <> encode insecurePubKey <> encode insecurePubKey <> encode msg\n\nmain :: IO ()\nmain = do\n  hSetBuffering stdin NoBuffering\n  hSetBuffering stdout NoBuffering\n\n  -- Randomize the taproot internal key for privacy.\n  Right randomTweak <- decode <$> getEntropy 32\n  tweak <- scalar <$> getHexLine \"Random privacy tweak\" 64 (Just (toInteger (randomTweak :: Word256)))\n  let internalKey = unspendablePubKey tweak\n  putStr \"Internal \" >> print internalKey\n\n  -- A generic checksig program written in Simplicity, optimized with jets.\n  -- Works on an arbitrary sighash function.  Requires a public key and a signature.\n  -- This program is the standard single key Simpliciy program.\n  let optCheckSig sighash sig pubkey = jetSubst $ checkSigVerify' sighash pubkey sig\n\n  -- Compute the commitment Merkle root (CMR) of this standard program.\n  -- We need to fill in a dummy sighash an a dummy signature,\n  -- but the CMR only depends on the pubkey.\n  let standardCMR pubkey = let { dummySig = Sig 0 0\n                               ; dummySigHash = scribe (Simplicity.Ty.Word.toWord256 0)\n                               }\n                            in commitmentRoot . unwrap $ optCheckSig dummySigHash dummySig pubkey\n  let path = review (over be256) <$> [{-path goes here-}]\n  -- Compute a taproot for this standard program.\n  -- 0xbe is the tapleaf version we have chosen for Simplicity.\n  let standardTR pubkey = tapPath 0xbe (encode (standardCMR pubkey)) path internalKey\n\n  -- In our example we will be using \"insecurePubKey\" as our public key.\n  let p = insecurePubKey\n\n  putStr \"Simplicity \" >> print p\n\n  -- Compute the CMR of the standard program for our chosen key.\n  let cmrP = standardCMR p\n\n  -- Compute the taproot for the standard program for our chosen key.\n  let Just trP = standardTR p\n\n  -- compute the address for our standard program for our chosen key.\n  let Just simplicityAddress = segwitEncode (fromString \"tex\") 0x01 (BS.unpack . encode $ outputKey trP)\n\n  putStr \"Example simplicity address: \" >> BSC.putStrLn simplicityAddress\n  putStrLn \"Press ⏎ to continue.\"\n  getLine\n\n  -- When funds are send to this address we will want to spend this.\n  -- In this spending example the entire funds in a UTXO are send to another address, less fees.\n  -- We could sign with the taproot key path; that does not require the use of Simplicity.\n  -- However, in this example we will show how to use the Simplicity spending path to redeem funds.\n\n  -- To spend funds we need to choose a sighash algorithm.\n  -- Unlike Bitcoin script there is no fixed choice; we can program any sighash function we want.\n  -- In this example we will be using Simplicity's version similar to sigAllHash.\n  -- Optimize the sigAllHash program with jets.\n  let optSigAllHash = jetSubst sigAllHash\n\n  -- By default use Liquid testnet's genesis hash\n  genesisHash <- review (over le256) <$> getHexLine \"Chain's Genesis Hash\" 64 (Just 0xa771da8e52ee6ad581ed1e9a99825e5b3b7992225534eaa2ae23244fe26ab1c1)\n  -- To spend funds we need the UTXO data, including the txid, vout, asset id and amount.\n  inputTxid <- getHexLine \"Input's TXID\" 64 Nothing\n  inputVout <- getIntLine \"Input's vout\"\n  -- By default use Liquid testnet's tl-btc asset\n  assetId <- review (over asset) . Explicit . review (over le256) <$> getHexLine \"Input's asset ID\" 64 (Just 0x144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49)\n  inputAmount <- getIntLine \"Input's value in sats\"\n  let inputUtxo = UTXO { utxoAsset = clearAssetPrf assetId\n                       , utxoAmount = review (over amount) . Explicit $ inputAmount\n                       , utxoScript = texScriptPubKey 1 (BS.unpack . encode $ outputKey trP)\n                       }\n\n  -- By default use Liquid testnet's faucet as the (unblinded) output address\n  outputAddress <- getStrLine \"Output's address\" \"tex1qyh6tyhspd9w8jhqee8a2uzvyk9lnwp2n8ssur0\"\n  let Just outputScript = uncurry texScriptPubKey <$> segwitDecode (fromString \"tex\") (fromString outputAddress)\n  fee <- getIntLine \"fee in sats\"\n  let outputAmount = inputAmount-fee\n  guard (0 < outputAmount)\n  -- Construct the output script from the given address.\n\n  -- Construct the transaction data, including inputs and outputs, including the explicit fee required by Elements.\n  -- We assume a standard sequence number.\n  let inputSequence = 0xfffffffe\n  let input0 = SigTxInput { sigTxiAnnex = Nothing\n                          , sigTxiPegin = Nothing\n                          , sigTxiPreviousOutpoint = Outpoint (review (over le256) inputTxid) inputVout\n                          , sigTxiTxo = inputUtxo\n                          , sigTxiSequence = inputSequence\n                          , sigTxiIssuance = Nothing\n                          , sigTxiScriptSig = mempty\n                          }\n  let output0 = TxOutput { txoAsset = assetId\n                         , txoAmount = review (over amount) . Explicit $ outputAmount\n                         , txoNonce = Nothing\n                         , txoScript = outputScript\n                         }\n  let output1 = TxOutput { txoAsset = assetId\n                         , txoAmount = review (over amount) . Explicit $ fee\n                         , txoNonce = Nothing\n                         , txoScript = mempty\n                         }\n  let tx = SigTx { sigTxVersion = 0x00000002\n                 , sigTxIn = fromList [input0]\n                 , sigTxOut = fromList [output0, output1]\n                 , sigTxLock = 0\n                 }\n\n  -- Define our taproot environment.\n  let tapEnv = TapEnv\n         { tapleafVersion = 0xbe\n         , tapInternalKey = internalKey\n         , tappath = path\n         , tapScriptCMR = cmrP\n         }\n\n  -- The signing environment includes the transaction data and which input we are signing for.\n  let ix = 0\n  let Just env = primEnv tx ix tapEnv genesisHash\n\n  -- Run our optimized sigAllHash function in this environment to compute the transaction hash we are going to be signing.\n  let Just txSigAllHash = fromInteger . Simplicity.Ty.Word.fromWord256 <$> fastEval (unwrap optSigAllHash) env () :: Maybe Word256\n\n  -- Our message is a tagged hash that covers both the CMR of our chosen sighash algorithm, and the output of that algorithm.\n  let msg = let tag = bsHash (fromString \"Simplicity\\USSignature\")\n             in bsHash $ encode tag <> encode tag\n                      <> encode (commitmentRoot . unwrap $ optSigAllHash)\n                      <> encode (txSigAllHash :: Word256)\n\n  -- Create a BIP-0340 signature for our insecure pubkey using an insecure signing algorithm.\n  -- This is for demonstration purposes only.  DO NOT USE!\n  let sig = insecureSign msg\n\n  -- Create our optimized checkSig simplicity program with our chosen hash algorithm and the signature we computed.\n  -- Encode this program in Simplicity's binary format.\n  let Just (bin,wit) = putTermLengthCode . unwrap <$> pruneSubst (checkSigVerify' (unwrap optSigAllHash) p sig) env\n  let binary = runPut . putBitStream $ bin\n  let witness = runPut . putBitStream $ wit\n\n  -- The witness stack consists of (1) the binary program (2) the CMR of our program, and (3) the taproot control block.\n  putStrLn $ \"--final-script-witness \" ++ intercalate \",\" (hexString <$> [witness, binary, script trP, controlBlock trP])\n"
  },
  {
    "path": "Haskell-Generate/GenDecodeJet.hs",
    "content": "{-# LANGUAGE OverloadedStrings, QuantifiedConstraints, RankNTypes, ScopedTypeVariables #-}\nmodule GenDecodeJet where\n\nimport Data.Maybe (catMaybes)\nimport Prettyprinter ( Doc, (<+>), braces, colon, line, nest, pretty, semi, vsep\n                     , SimpleDocStream, LayoutOptions(..), PageWidth(..), defaultLayoutOptions, layoutPretty\n                     )\nimport Prettyprinter.Render.Text (renderIO)\nimport System.IO (IOMode(WriteMode), withFile)\n\nimport NameWrangler\nimport Simplicity.Bitcoin.Jets (bitcoinCatalogue)\nimport Simplicity.CoreJets (coreCatalogue)\nimport Simplicity.Elements.Jets (elementsCatalogue)\nimport Simplicity.Ty\nimport Simplicity.Tree\n\nx <-> y = x <> line <> y\n\nnestBraces x = braces (nest 2 (line <> x) <> line)\n\nlabelCase ix = \"case\" <+> pretty ix <> colon\n\ndecodeCatalogue :: Catalogue String -> Doc a\ndecodeCatalogue Missing = mempty\ndecodeCatalogue (Item name) =\n  \"*result =\" <+> pretty (upperSnakeCase name) <> semi <+>\n  \"return SIMPLICITY_NO_ERROR\" <> semi\ndecodeCatalogue (Shelf l) = vsep\n  [ \"code = simplicity_decodeUptoMaxInt(stream)\" <> semi\n  , \"if (code < 0) return (simplicity_err)code\" <> semi\n  , \"switch (code)\" <+> nestBraces (vsep cases)\n  ]\n where\n   cases = catMaybes $ zipWith f [(1::Int)..] l\n   f _ Missing = Nothing\n   f ix cat@(Item _) = Just . nest 2 $ labelCase ix <+> decodeCatalogue cat\n   f ix cat@(Shelf _) = Just . nest 2 $ labelCase ix <-> decodeCatalogue cat <-> \"break\" <> semi\n\nrenderFile name doc = withFile name WriteMode (\\h -> renderIO h (layoutPretty layoutOptions (header <-> doc)))\n where\n  header = \"/* This file has been automatically generated. */\\n\"\n\nmain = do\n  renderFile \"decodeCoreJets.inc\" (wrap (decodeCatalogue (mkName <$> coreCatalogue)))\n  renderFile \"decodeElementsJets.inc\" (wrap (decodeCatalogue (mkName <$> elementsCatalogue)))\n  renderFile \"decodeBitcoinJets.inc\" (wrap (decodeCatalogue (mkName <$> bitcoinCatalogue)))\n where\n  wrap doc = nestBraces (\"int32_t code;\" <-> doc)\n\nlayoutOptions = LayoutOptions { layoutPageWidth = AvailablePerLine 100 1 }\n"
  },
  {
    "path": "Haskell-Generate/GenPrecomputed.hs",
    "content": "{-# LANGUAGE OverloadedStrings #-}\nmodule GenPrecomputed where\n\nimport Prelude hiding (sum)\n\nimport Data.List.Split (chunksOf)\nimport Numeric (showHex)\nimport Prettyprinter ( Doc, (<+>), encloseSep, flatAlt, fillSep, group, line, nest, pretty, vsep\n                     , SimpleDocStream, LayoutOptions(..), PageWidth(..), defaultLayoutOptions, layoutPretty\n                     , lbrace, rbrace, semi\n                     )\nimport Prettyprinter.Render.Text (renderIO)\nimport System.IO (IOMode(WriteMode), withFile)\n\nimport Simplicity.Digest\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Generic\nimport Simplicity.Tags\nimport Simplicity.Ty\nimport Simplicity.Ty.Word\n\nx <-> y = x <> line <> y\n\nclass Enumerable a where\n  allValues :: [a]\n\ninstance Enumerable () where\n  allValues = [()]\n\ninstance (Enumerable a, Enumerable b) => Enumerable (Either a b) where\n  allValues = (Left <$> allValues) ++ (Right <$> allValues)\n\ninstance (Enumerable a, Enumerable b) => Enumerable (a, b) where\n  allValues = pair <$> allValues <*> allValues\n   where\n    pair x y = (x, y)\n\nsingle = (:[])\nbracket = group . encloseSep (flatAlt \"{ \" \"{\") (flatAlt \" }\" \"}\") \", \"\n\nprettyCHash :: Hash256 -> Doc a\nprettyCHash h = bracket (format <$> chunksOf 8 str_h)\n where\n  format x = \"0x\" <> pretty x <> \"u\"\n  str_h = padding ++ text\n   where\n    padding = replicate (64 - length text) '0'\n    text = showHex (integerHash256 h) \"\"\n\ndeclIV :: String -> IV -> Doc a\ndeclIV name iv = nest 2 $ (pretty $ \"static const sha256_midstate \"++name++\"IV =\") <-> (bracket . single . prettyCHash $ ivHash iv) <> semi\n\ndeclareSignatureIV :: Doc a\ndeclareSignatureIV = vsep\n                   [ \"/* Initial values for Simplicity's standard tagged message digest. */\"\n                   , declIV \"signature\" signatureTag\n                   ]\n\ndeclareTyIVs :: Doc a\ndeclareTyIVs = vsep $ \"/* Initial values for all the 'typeName's. */\":(declTy <$> [\"unit\", \"sum\", \"prod\"])\n where\n  declTy name = declIV name (typeTag name)\n\ndeclareMRIVs :: Doc a\ndeclareMRIVs = vsep $ [\"/* Initial values for all the tags for 'CMR's, 'AMR's and 'IMR's. */\"]\n            ++ (declCMR <$> names)\n            ++ (declAMR <$> [\"assertl\", \"assertr\"] ++ names)\n            ++ (declIMR <$> [\"disconnect\", \"witness\"])\n            ++ [declIV \"identity\" identityHashTag, declIV \"hidden\" hiddenTag, declIV \"jet\" jetTag]\n where\n  declCMR name = declIV (\"cmr_\" ++ name) (commitmentTag name)\n  declAMR name = declIV (\"amr_\" ++ name) (annotatedTag name)\n  declIMR name = declIV (\"imr_\" ++ name) (identityTag name)\n  names = [\"comp\", \"case\", \"pair\", \"disconnect\", \"injl\", \"injr\", \"take\", \"drop\", \"iden\", \"unit\", \"witness\"]\n\ndeclareWordCMRs :: Doc a\ndeclareWordCMRs = vsep\n                [ \"/* This array contains the cmr of all canonical expressions of type X |- TWO through X |- TWO^8 that output distinct values.\"\n                , \" * word_cmr[0..1] contain the cmrs for scribe(0) .. scribe(1) : X | - TWO\"\n                , \" * word_cmr[2..5] contain the cmrs for scribe(0) .. scribe(3) : X | - TWO^2\"\n                , \" * word_cmr[6..21] contain the cmrs for scribe(0) .. scribe(15) : X | - TWO^4\"\n                , \" * word_cmr[22..277] contain the cmrs for scribe(0) .. scribe(255) : X | - TWO^8\"\n                , \" */\"\n                ] <> line <> nest 2 (vsep\n                [ \"static const sha256_midstate word_cmr[] =\"\n                , bracket (concat [word1s, word2s, word4s, word8s])  <> semi\n                ])\n where\n  word1s = [bracket . single . prettyCHash . commitmentRoot $ (scribe x :: CommitmentRoot () Word1) | x <- allValues]\n  word2s = [bracket . single . prettyCHash . commitmentRoot $ (scribe x :: CommitmentRoot () Word2) | x <- allValues]\n  word4s = [bracket . single . prettyCHash . commitmentRoot $ (scribe x :: CommitmentRoot () Word4) | x <- allValues]\n  word8s = [bracket . single . prettyCHash . commitmentRoot $ (scribe x :: CommitmentRoot () Word8) | x <- allValues]\n\nallWordRoots :: [Hash256]\nallWordRoots = typeRoot one : iterate diag bit\n where\n  bit = typeRoot (sum one one)\n  diag x = ivHash $ compress (typeTag \"prod\") (x,x)\n\ndeclareWordTypeRoots :: Doc a\ndeclareWordTypeRoots = vsep\n                [ \"/* word_type_root[0] contains the type root of the ONE type.\"\n                , \" * word_type_root[1] contains the type root of the TWO type.\"\n                , \" * word_type_root[2] contains the type root of the TWO^2 type.\"\n                , \" * word_type_root[3] contains the type root of the TWO^4 type.\"\n                , \" * ...\"\n                , \" * word_type_root[32] contains the type root of the TWO^(2^31) type.\"\n                , \" */\"\n                ] <> line <> nest 2 (vsep\n                [ \"static const sha256_midstate word_type_root[] =\"\n                , bracket [bracket . single . prettyCHash $ x | x <- take 33 allWordRoots] <> semi\n                ])\n\nheader = vsep $\n  [ \"/* This file has been automatically generated by GenPecomputed.hs */\"\n  , \"#ifndef SIMPLICITY_PRECOMPUTED_H\"\n  , \"#define SIMPLICITY_PRECOMPUTED_H\"\n  , \"\"\n  , \"#include \\\"sha256.h\\\"\"\n  ]\n\nfooter = vsep $\n  [ \"#endif\"\n  ]\n\nprecomputed_h :: SimpleDocStream a\nprecomputed_h = layoutPretty layoutOptions $ vsep (map (<> line)\n  [ header\n  , declareSignatureIV\n  , declareTyIVs\n  , declareMRIVs\n  , declareWordCMRs\n  , declareWordTypeRoots\n  , footer\n  ])\n where\n  layoutOptions = LayoutOptions { layoutPageWidth = AvailablePerLine 132 1 }\n\nrenderFile name doc = withFile name WriteMode (\\h -> renderIO h doc)\n\nmain = do\n  renderFile \"precomputed.h\" precomputed_h\n"
  },
  {
    "path": "Haskell-Generate/GenPrimitive.hs",
    "content": "module GenPrimitives where\n\nimport Prelude hiding (sum)\n\nimport Control.Monad.Cont (Cont, cont, runCont)\nimport Data.Function (on)\nimport Data.Functor.Fixedpoint (Fix(..), cata)\nimport Data.List (intercalate, sortBy)\nimport Data.List.Split (chunksOf)\nimport Data.Maybe (isJust)\nimport qualified Data.Map as Map\nimport Numeric (showHex)\nimport System.Environment (getArgs)\nimport System.Exit (exitFailure)\n\nimport NameWrangler\nimport Simplicity.Digest\nimport qualified Simplicity.Bitcoin.Jets as Bitcoin\nimport qualified Simplicity.Elements.Jets as Elements\nimport Simplicity.MerkleRoot\nimport Simplicity.Serialization\nimport Simplicity.Ty\nimport Simplicity.Weight\n\ndata JetInfo = JetInfo { name :: String\n                       , cmr :: Hash256\n                       , mw :: Integer\n                       , sourceType :: Ty\n                       , targetType :: Ty\n                       , moduleName :: String\n                       }\n\ndata CompactTy = CTyOne\n               | CTyWord Int\n               | CTyMaybe CompactTy\n               | CTySum CompactTy CompactTy\n               | CTyProd CompactTy CompactTy\n     deriving (Eq, Ord)\n\nshowCHash h = intercalate \", \" (format <$> chunksOf 8 str_h)\n where\n  format x = \"0x\" ++ x ++ \"u\"\n  str_h = padding ++ text\n   where\n    padding = replicate (64 - length text) '0'\n    text = showHex (integerHash256 h) \"\"\n\ncompactTy :: Ty -> CompactTy\ncompactTy = cata go -- memoCataTy go\n where\n  go One = CTyOne\n  go (Sum CTyOne CTyOne) = CTyWord 1\n  go (Sum CTyOne y) = CTyMaybe y\n  go (Sum x y) = CTySum x y\n  go (Prod (CTyWord wx) (CTyWord wy)) | wx == wy = CTyWord (wx + wy)\n  go (Prod x y) = CTyProd x y\n\ncompactCName :: CompactTy -> ShowS\ncompactCName s = showString \"ty_\" . go s\n where\n  go CTyOne = showString \"u\"\n  go (CTyWord 1) = showString \"b\"\n  go (CTyWord n) | n < 2^10 = showString \"w\" . shows n\n                 | n < 2^20 = showString \"w\" . shows (n `div` (2^10)) . showString \"Ki\"\n                 | n < 2^30 = showString \"w\" . shows (n `div` (2^20)) . showString \"Mi\"\n                 | otherwise = showString \"w\" . shows (n `div` (2^30)) . showString \"Gi\"\n  go (CTyMaybe x) = showString \"m\" . go x\n  go (CTySum x y) = showString \"s\" . go x . go y\n  go (CTyProd x y) = showString \"p\" . go x . go y\n\ncInitializeTy :: CompactTy -> String\ncInitializeTy ty = showString \"(*bound_var)[\" . compactCName ty\n                 . showString \"] = (unification_var){ .isBound = true, .bound = \" . cBoundTy ty\n                 . showString \"};\"\n                 $ \"\"\n where\n  cBoundTy CTyOne = showString \"{ .kind = ONE }\"\n  cBoundTy (CTyWord 1) = cBoundTy (CTySum CTyOne CTyOne)\n  cBoundTy (CTyWord n) = cBoundTy (CTyProd rec rec)\n   where\n    rec = CTyWord (n `div` 2)\n  cBoundTy (CTyMaybe x) = cBoundTy (CTySum CTyOne x)\n  cBoundTy (CTySum x y) = showString \"{ .kind = SUM, .arg = { &(*bound_var)[\" . compactCName x\n                        . showString \"], &(*bound_var)[\" . compactCName y\n                        . showString \"] } }\"\n  cBoundTy (CTyProd x y) = showString \"{ .kind = PRODUCT, .arg = { &(*bound_var)[\" . compactCName x\n                         . showString \"], &(*bound_var)[\" . compactCName y\n                         . showString \"] } }\"\n\ncJetNode :: JetInfo -> String\ncJetNode ji = unlines\n  [ \"[\" ++ upperSnakeCase (name ji) ++ \"] =\"\n  , \"{ .tag = JET\"\n  , \", .jet = simplicity_\" ++ moduleName ji ++ lowerSnakeCase (name ji)\n  , \", .cmr = {{\" ++ showCHash (cmr ji) ++ \"}}\"\n  , \", .sourceIx = \" ++ compactCName (compactTy (sourceType ji)) \"\"\n  , \", .targetIx = \" ++ compactCName (compactTy (targetType ji)) \"\"\n  , \", .cost = \" ++ show (mw ji) ++ \" /* milli weight units */\"\n  , \"}\"\n  ]\n\nmkTyList :: [JetInfo] -> [CompactTy]\nmkTyList jetList = Map.keys . foldr combine wordMap $ (tys =<< jetList)\n where\n  wordMap = Map.fromList [(CTyWord n, ty) | (n, ty) <- Prelude.take 32 words]\n   where\n    words = (1, sum one one) : [(2*n, prod ty ty) | (n, ty) <- words]\n  tys ji = [sourceType ji, targetType ji]\n  combine ty map | isJust (Map.lookup cTy map) = map\n                 | otherwise = Map.insert cTy ty (foldr combine map (children ty))\n   where\n    cTy = compactTy ty\n    children (Fix One) = []\n    children (Fix (Sum x y)) = [x,y]\n    children (Fix (Prod x y)) = [x,y]\n\ncEnumTyFile :: [CompactTy] -> String\ncEnumTyFile tyList = unlines . fmap item $ tyList\n where\n  item ty@CTyOne = compactCName ty \" = 0,\"\n  item ty@(CTyWord n) = compactCName ty \" = \" ++ show (1 + ln n) ++ \",\"\n  item ty = compactCName ty \",\"\n  ln n = length . Prelude.drop 1 . takeWhile (0 <) $ iterate (`div` 2) n\n\ncInitializeTyFile :: [CompactTy] -> String\ncInitializeTyFile tyList = unlines $ cInitializeTy <$> tyList\n\ncEnumJetFile :: [JetInfo] -> String\ncEnumJetFile jetList = unlines $ map f jetList\n where\n  f ji = (upperSnakeCase (name ji)) ++ \",\"\n\ncJetNodeFile :: [JetInfo] -> String\ncJetNodeFile jetList = intercalate \",\" $ map cJetNode jetList\n\nwriteIncludeFile :: FilePath -> String -> IO ()\nwriteIncludeFile name content = writeFile name (header ++ content)\n where\n  header = \"/* This file has been automatically generated. */\\n\"\n\nmkJetList :: (a -> JetInfo) -> [a] -> [JetInfo]\nmkJetList f l = sortBy (compare `on` name) . map f $ l\n\nwriteFiles list = do\n  writeIncludeFile (\"primitiveEnumTy.inc\") (cEnumTyFile tyList)\n  writeIncludeFile (\"primitiveInitTy.inc\") (cInitializeTyFile tyList)\n  writeIncludeFile (\"primitiveEnumJet.inc\") (cEnumJetFile list)\n  writeIncludeFile (\"primitiveJetNode.inc\") (cJetNodeFile list)\n where\n  tyList = mkTyList list\n\ndata Option = OptElements | OptBitcoin\n\nparseOptions :: [String] -> Maybe Option\nparseOptions [] = Just OptElements\nparseOptions [\"--elements\"] = Just OptElements\nparseOptions [\"--bitcoin\"] = Just OptBitcoin\nparseOptions _ = Nothing\n\nmain = do\n  mopt <- parseOptions <$> getArgs\n  case mopt of\n    Nothing -> putStrLn \"Invalid Arguments\" >> exitFailure\n    Just OptElements -> writeFiles elementsJetList\n    Just OptBitcoin -> writeFiles bitcoinJetList\n where\n  elementsJetList = mkJetList fromElements $ Map.elems Elements.jetMap\n  fromElements :: SomeArrow Elements.JetType -> JetInfo\n  fromElements (SomeArrow jt) = JetInfo { name = mkName jt\n                                        , cmr = commitmentRoot (Elements.asJet jt)\n                                        , mw = milliWeight (Elements.jetCost jt)\n                                        , sourceType = unreflect tyx\n                                        , targetType = unreflect tyy\n                                        , moduleName = \"\"\n                                        }\n   where\n    (tyx, tyy) = reifyArrow jt\n  bitcoinJetList = mkJetList fromBitcoin $ Map.elems Bitcoin.jetMap\n  fromBitcoin :: SomeArrow Bitcoin.JetType -> JetInfo\n  fromBitcoin (SomeArrow jt) = JetInfo { name = mkName jt\n                                        , cmr = commitmentRoot (Bitcoin.asJet jt)\n                                        , mw = milliWeight (Bitcoin.jetCost jt)\n                                        , sourceType = unreflect tyx\n                                        , targetType = unreflect tyy\n                                        , moduleName = jetModule\n                                       }\n   where\n    jetModule | Bitcoin.CoreJet _ <- jt = \"\"\n              | otherwise = \"bitcoin_\"\n    (tyx, tyy) = reifyArrow jt\n"
  },
  {
    "path": "Haskell-Generate/GenRustJets.hs",
    "content": "{-# LANGUAGE OverloadedStrings #-}\nmodule GenRustJets where\n\nimport Data.Char (toLower)\nimport Data.Foldable (toList)\nimport Data.Function (on)\nimport Data.Functor.Fixedpoint (Fix(..))\nimport Data.List (sortBy)\nimport Data.List.Split (chunksOf)\nimport Data.Maybe (fromMaybe)\nimport qualified Data.Map as Map\nimport Numeric (showHex)\nimport Prettyprinter ( Doc, (<+>), braces, comma, dquotes, fillSep, line, nest, parens, pretty, punctuate, semi, tupled, vsep\n                     , SimpleDocStream, LayoutOptions(..), PageWidth(..), defaultLayoutOptions, layoutPretty\n                     )\nimport Prettyprinter.Render.Text (renderIO)\nimport System.IO (IOMode(WriteMode), withFile)\n\nimport NameWrangler\nimport qualified Simplicity.Bitcoin.Jets as Bitcoin\nimport qualified Simplicity.Bitcoin.Term as Bitcoin\nimport qualified Simplicity.CoreJets as Core\nimport Simplicity.CoreJets (CoreJet)\nimport Simplicity.Digest\nimport qualified Simplicity.Elements.Jets as Elements\nimport qualified Simplicity.Elements.Term as Elements\nimport Simplicity.MerkleRoot\nimport Simplicity.Serialization\nimport Simplicity.Tree\nimport Simplicity.Ty\nimport Simplicity.Weight\n\nx <-> y = x <> line <> y\n\nnestBraces x = braces (nest 4 (line <> x) <> line)\n\ndata JetModule = CoreModule | BitcoinModule | ElementsModule\n  deriving Eq\n\ndata JetData x y = JetData { jetName :: String\n                           , jetCMR :: CommitmentRoot x y\n                           , jetModule :: JetModule\n                           , jetCost :: Weight\n                           }\n\nsortJetName = sortBy (compare `on` name)\n where\n  name (SomeArrow j) = jetName j\n\ncJetName = lowerSnakeCase . jetName\n\ncoreJetData :: (TyC x, TyC y) => CoreJet x y -> JetData x y\ncoreJetData jet = JetData { jetName = mkName jet\n                          , jetCMR = cmr\n                          , jetModule = CoreModule\n                          , jetCost = cost\n                          }\n  where\n    cmr = Bitcoin.asJet (Bitcoin.CoreJet jet)\n    cost = Bitcoin.jetCost (Bitcoin.CoreJet jet)\n\nelementsJetData :: (TyC x, TyC y) => Elements.JetType x y -> JetData x y\nelementsJetData jet = JetData { jetName = mkName jet\n                              , jetCMR = Elements.asJet jet\n                              , jetModule = jetModule\n                              , jetCost = Elements.jetCost jet\n                              }\n where\n  jetModule | Elements.CoreJet _ <- jet = CoreModule\n            | otherwise = ElementsModule\n\nbitcoinJetData :: (TyC x, TyC y) => Bitcoin.JetType x y -> JetData x y\nbitcoinJetData jet = JetData { jetName = mkName jet\n                             , jetCMR = Bitcoin.asJet jet\n                             , jetModule = jetModule\n                             , jetCost = Bitcoin.jetCost jet\n                             }\n where\n  jetModule | Bitcoin.CoreJet _ <- jet = CoreModule\n            | otherwise = BitcoinModule\n\ndata Module = Module { moduleName :: Maybe String\n                     , moduleCodes :: BinTree (SomeArrow JetData)\n                     }\nmoduleJets :: Module -> [SomeArrow JetData]\nmoduleJets = sortJetName . toList . moduleCodes\n\nrustModuleName = fromMaybe \"Core\" . moduleName\nlowerRustModuleName = map toLower . rustModuleName\n\ncoreModule :: Module\ncoreModule = Module Nothing (someArrowMap coreJetData <$> (treeEvalBitStream Core.getJetBit))\n\n-- Take Right is used to drop the (infinite) branch of constant word jets.\ntakeRight (Branch _ r) = r\n\nelementsModule :: Module\nelementsModule = Module (Just \"Elements\") (someArrowMap elementsJetData <$> takeRight (treeEvalBitStream Elements.getJetBit))\n\nbitcoinModule :: Module\nbitcoinModule = Module (Just \"Bitcoin\") (someArrowMap bitcoinJetData <$> takeRight (treeEvalBitStream Bitcoin.getJetBit))\n\ndata CompactTy = CTyOne\n               | CTyWord Int\n               | CTyMaybe CompactTy\n               | CTySum CompactTy CompactTy\n               | CTyProd CompactTy CompactTy\n     deriving (Eq, Ord)\n\ncompactTy :: Ty -> CompactTy\ncompactTy = memoCataTy go\n where\n  go One = CTyOne\n  go (Sum CTyOne CTyOne) = CTyWord 1\n  go (Sum CTyOne y) = CTyMaybe y\n  go (Sum x y) = CTySum x y\n  go (Prod (CTyWord wx) (CTyWord wy)) | wx == wy = CTyWord (wx + wy)\n  go (Prod x y) = CTyProd x y\n\ncompactRustName :: CompactTy -> ShowS\ncompactRustName s = showString \"b\\\"\" . go s . showString \"\\\"\"\n where\n  go CTyOne = showString \"1\"\n  go (CTyWord 1) = showString \"2\"\n  go (CTyWord 32) = showString \"i\"\n  go (CTyWord 64) = showString \"l\"\n  go (CTyWord 256) = showString \"h\"\n  go (CTyWord n) | even n = let rec = go (CTyWord (n `div` 2)) in showString \"*\" . rec . rec\n  go (CTyMaybe x) = showString \"+1\" . go x\n  go (CTySum x y) = showString \"+\" . go x . go y\n  go (CTyProd x y) = showString \"*\" . go x . go y\n\nshowRustHash :: Hash256 -> Doc a\nshowRustHash h = fillSep $ ((<> comma) . format <$> chunksOf 2 str_h)\n where\n  format x = pretty $ \"0x\" ++ x\n  str_h = padding ++ text\n   where\n    padding = replicate (64 - length text) '0'\n    text = showHex (integerHash256 h) \"\"\n\nrustJetCmr :: Module -> Doc a\nrustJetCmr mod = vsep $\n  [ nest 4 (vsep (\"fn cmr(&self) -> Cmr {\" :\n-- Temporary if statement until Bitcoin Jets have weight costs assigned to them\n-- See Haskell/Simplicity/Bitcoin/Jets.hs:  jetCost (BitcoinJet jt) = error \"Simplicity.Bitcoin.Jets.jetCost: :TODO: Implement jets for Bitcoin and benchmark them.\"\n   if Just \"Bitcoin\" == moduleName mod\n   then [\"unimplemented!(\\\"Bitcoin jet CMRs weights have not yet been implemented.\\\")\"]\n   else\n    [ nest 4 (vsep (\"let bytes = match self {\" :\n        map (<>comma)\n        [ nest 4 (vsep\n          [ pretty modname <> \"::\" <> pretty (jetName jet) <+> \"=> [\"\n          , showRustHash (commitmentRoot (jetCMR jet))\n          ]) <-> \"]\"\n        | (SomeArrow jet) <- moduleJets mod\n        ]))\n    , \"};\"\n    , mempty\n    , \"Cmr(Midstate(bytes))\"\n    ]))\n  , \"}\"\n  ]\n where\n  modname = rustModuleName mod\n\nrustJetTy fname getTy mod = vsep $\n  [ nest 4 (vsep (pretty (\"fn \"++fname++\"(&self) -> TypeName {\") :\n    [ nest 4 (vsep (\"let name: &'static [u8] = match self {\" :\n        map (<>comma)\n        [ pretty modname <> \"::\" <> pretty (jetName jet) <+> \"=>\" <+>\n          pretty (compactRustName (compactTy (getTy j)) \"\")\n        | j@(SomeArrow jet) <- moduleJets mod\n        ]))\n    , \"};\"\n    , mempty\n    , \"TypeName(name)\"\n    ]))\n  , \"}\"\n  ]\n where\n  modname = rustModuleName mod\n\nrustJetSourceTy :: Module -> Doc a\nrustJetSourceTy = rustJetTy \"source_ty\" (\\(SomeArrow jet) -> unreflect (fst (reifyArrow jet)))\n\nrustJetTargetTy :: Module -> Doc a\nrustJetTargetTy = rustJetTy \"target_ty\" (\\(SomeArrow jet) -> unreflect (snd (reifyArrow jet)))\n\nrustJetCJetPtr :: Module -> Doc a\nrustJetCJetPtr mod = vsep $\n  [ nest 4 (vsep\n    [ pretty (\"pub(crate) fn c_jet_ptr(jet: &\" ++ modname ++ \") -> fn(&mut CFrameItem, CFrameItem, &\" ++ cJetEnvType ++ \") -> bool {\")\n    , if modname == \"Bitcoin\"\n      then \"    unimplemented!(\\\"Bitcoin jets have not yet been implemented.\\\")\"\n      else vsep\n        [ nest 4 (vsep (\"match jet {\" :\n            map (<>comma)\n            [ pretty modname <> \"::\" <> pretty (jetName jet) <+> \"=>\" <+>\n              pretty (\"simplicity_sys::c_jets::jets_wrapper::\"++cJetName jet)\n            | SomeArrow jet <- moduleJets mod\n            ]))\n        , \"}\"\n        ]\n    ])\n  , \"}\"\n  ]\n where\n  modname = rustModuleName mod\n  cJetEnvType | Just \"Elements\" == moduleName mod = \"CElementsTxEnv\" :: String\n              | otherwise = \"()\"\n\nrustJetEncode :: Module -> Doc a\nrustJetEncode mod =\n  \"fn encode(&self, w: &mut BitWriter<&mut dyn Write>) -> std::io::Result<usize>\" <+>\n  nestBraces (\"let (n, len) = match self\" <+>\n    nestBraces (vsep (foldMapWithPath item (moduleCodes mod))) <> semi <-> line <> \"w.write_bits_be(n, len)\")\n where\n  item path (SomeArrow jet) = [pretty (rustModuleName mod ++ \"::\" ++ jetName jet) <+> \"=>\"\n                          <+> tupled [pretty (code path 0 :: Int), pretty (length path)] <> comma]\n  code [] n = n\n  code (b : l) n = code l (2*n + if b then 1 else 0)\n\nrustJetDecode :: Module -> Doc a\nrustJetDecode mod =\n  \"fn decode<I: Iterator<Item = u8>>(bits: &mut BitIter<I>) -> Result<Self, decode::Error> where Self: Sized\" <+>\n  nestBraces (\"decode_bits!(bits,\" <+> braces (docTree (moduleCodes mod)) <> \")\")\n where\n  docTree Dead = mempty\n  docTree (Leaf (SomeArrow jet)) = pretty (rustModuleName mod ++ \"::\" ++ jetName jet)\n  docTree (Branch l r) = nest 4\n                       ( line <> (\"0\" <+> \"=>\" <+> braces (docTree l)) <> comma\n                     <-> (\"1\" <+> \"=>\" <+> braces (docTree r))\n                       ) <> line\n\nrustJetCost :: Module -> Doc a\nrustJetCost mod = vsep $\n  [ nest 4 (vsep (\"fn cost(&self) -> Cost {\" :\n    if modname == \"Bitcoin\"\n    then [\"unimplemented!(\\\"Unspecified cost of Bitcoin jets\\\")\"]\n    else [ nest 4 (vsep (\"match self {\" :\n        map (<>comma)\n        [ pretty modname <> \"::\" <> pretty (jetName jet) <+> \"=>\" <+>\n          \"Cost::from_milliweight(\" <> (pretty . milliWeight $ jetCost jet) <> \")\"\n        | SomeArrow jet <- moduleJets mod\n        ]))\n    , \"}\"\n    ]))\n  , \"}\"\n  ]\n where\n  modname = rustModuleName mod\n\nrustJetParse :: Doc a\nrustJetParse =\n  \"fn parse(s: &str) -> Result<Self, crate::Error> where Self: Sized\" <+>\n  nestBraces \"str::FromStr::from_str(s)\"\n\nrustJetImpl :: Module -> Doc a\nrustJetImpl mod = vsep $\n  [ nest 4 (vsep $ punctuate line\n    [\"impl Jet for\" <+> pretty modname <+> \"{\"\n    , rustJetCmr mod\n    , rustJetSourceTy mod\n    , rustJetTargetTy mod\n    , rustJetEncode mod\n    , rustJetDecode mod\n    , rustJetCost mod\n    , rustJetParse\n    ])\n  , \"}\"\n  ]\n where\n  modname = rustModuleName mod\n\nrustJetEnum :: Module -> Doc a\nrustJetEnum mod = vsep\n [ \"/// The\" <+> pretty (rustModuleName mod) <+> \"jet family.\"\n , \"#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]\"\n , nest 4 $ vsep $\n   (\"pub enum\" <+> pretty (rustModuleName mod) <+> \"{\") :\n   [ pretty (jetName jet) <> comma | (SomeArrow jet) <- moduleJets mod ]\n , \"}\"\n , \"\"\n , nest 4 $ vsep $\n   (\"impl\" <+> pretty (rustModuleName mod) <+> \"{\") :\n   (\"/// Array of all\" <+> pretty (rustModuleName mod) <+> \"jets.\") :\n   [ nest 4 $ vsep $\n       (\"pub const ALL: [Self;\" <+> pretty (length $ moduleJets mod) <> \"] = [\") :\n       [ \"Self::\" <> (pretty $ jetName jet) <> comma | (SomeArrow jet) <- moduleJets mod ]\n     , \"];\"\n   ]\n , \"}\"\n ]\n\nrustJetDisplay :: Module -> Doc a\nrustJetDisplay mod =\n  \"impl fmt::Display for\" <+> pretty modname <+>\n    nestBraces (\"fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result\" <+>\n      nestBraces (\"match self\" <+>\n        nestBraces (vsep (\n          map (<>comma)\n            [ pretty modname <> \"::\" <> pretty (jetName jet) <+> \"=> f.write_str\" <> (parens . dquotes . pretty $ cJetName jet)\n            | SomeArrow jet <- moduleJets mod\n            ]))\n      )\n    )\n where\n  modname = rustModuleName mod\n\nrustJetFromStr :: Module -> Doc a\nrustJetFromStr mod =\n  \"impl str::FromStr for\" <+> pretty modname <+>\n    nestBraces (vsep\n    [ \"type Err = crate::Error;\"\n    , mempty\n    , (\"fn from_str(s: &str) -> Result<Self, Self::Err>\" <+>\n        nestBraces (\"match s\" <+>\n          nestBraces (vsep (\n            map (<> comma)\n              ([ dquotes (pretty (cJetName jet)) <+> \"=> Ok\" <> parens (pretty modname <> \"::\" <> pretty (jetName jet))\n               | SomeArrow jet <- moduleJets mod\n               ] ++ [ \"x => Err(crate::Error::InvalidJetName(x.to_owned()))\" ]\n              )))\n      ))\n    ])\n where\n  modname = rustModuleName mod\n\nrustHeader :: Doc a\nrustHeader = \"/* This file has been automatically generated. */\"\n\nrustImports :: Module -> Doc a\nrustImports mod = vsep (map (<> semi)\n  ([ \"use crate::jet::type_name::TypeName\"\n  , \"use crate::jet::Jet\"\n  , \"use crate::merkle::cmr::Cmr\"\n  , \"use crate::decode_bits\"\n  , \"use crate::{decode, BitIter, BitWriter}\"\n  , \"use crate::analysis::Cost\"\n  , \"use hashes::sha256::Midstate\"\n  , \"use simplicity_sys::CFrameItem\"\n  , \"use std::io::Write\"\n  , \"use std::{fmt, str}\"\n  ] ++ envImports))\n where\n  envImports | Just \"Elements\" == moduleName mod = [\"use simplicity_sys::CElementsTxEnv\"]\n             | otherwise = []\n\nrustJetDoc :: Module -> SimpleDocStream a\nrustJetDoc mod = layoutPretty layoutOptions $ vsep (map (<> line)\n  [ rustHeader\n  , rustImports mod\n  , rustJetEnum mod\n  , rustJetImpl mod\n  , rustJetDisplay mod\n  , rustJetFromStr mod\n  , rustJetCJetPtr mod\n  ])\n\nrustFFIImports :: Doc a\nrustFFIImports = vsep (map (<> semi)\n  [ \"use crate::ffi::c_void\"\n  , \"use crate::{CElementsTxEnv, CFrameItem}\"\n  ])\n\nrustFFISigs :: Module -> Doc a\nrustFFISigs mod = vsep\n  [ nest 4 $ vsep $\n    \"extern \\\"C\\\" {\" :\n    (declaration <$> moduleJets mod)\n  , \"}\"\n  ]\n where\n  declaration (SomeArrow jet) = (<> semi) . vsep $ pretty <$>\n    [ linkName\n    , signature\n    ]\n   where\n    linkName = \"#[link_name = \\\"c_\"++cJetName jet++\"\\\"]\"\n    signature = \"pub fn \"++cJetName jet++\"(dst: *mut CFrameItem, src: *const CFrameItem, env: *const \"++envType++\") -> bool\"\n    envType | CoreModule <- jetModule jet = \"c_void\"\n            | ElementsModule <- jetModule jet = \"CElementsTxEnv\"\n\nrustFFIDoc :: Module -> SimpleDocStream a\nrustFFIDoc mod = layoutPretty layoutOptions $ vsep (map (<> line)\n  [ rustHeader\n  , rustFFIImports\n  , rustFFISigs mod\n  ])\n\nrustWrapperImports :: Doc a\nrustWrapperImports = vsep (map (<> semi)\n  [ \"use crate::{CElementsTxEnv, CFrameItem}\"\n  , \"use super::elements_ffi\"\n  ])\n\nrustWrappers :: Module -> Doc a\nrustWrappers mod = vsep ((<> line) . wrapper <$> moduleJets mod)\n where\n  wrapper (SomeArrow jet) = vsep\n   [ nest 4 $ vsep\n     [ pretty $ \"pub fn \"++cJetName jet++templateParam++\"(dst: &mut CFrameItem, src: CFrameItem, \"++envParam++\") -> bool {\"\n     , pretty $ \"unsafe { \"++lowerRustModuleName mod++\"_ffi::\"++cJetName jet++\"(dst, &src, \"++envArg++\") }\"\n     ]\n   , \"}\"\n   ]\n   where\n    templateParam | CoreModule <- jetModule jet = \"<T>\"\n                  | otherwise = \"\"\n    envParam | CoreModule <- jetModule jet = \"_env: &T\"\n             | ElementsModule <- jetModule jet = \"env: &CElementsTxEnv\"\n    envArg | CoreModule <- jetModule jet = \"std::ptr::null()\"\n           | ElementsModule <- jetModule jet = \"env\"\n\nrustWrapperDoc :: Module -> SimpleDocStream a\nrustWrapperDoc mod = layoutPretty layoutOptions $ vsep (map (<> line)\n  [ rustHeader\n  , rustWrapperImports\n  , rustWrappers mod\n  ])\n\ncWrapperImports :: Doc a\ncWrapperImports = vsep\n  [ \"#include \\\"simplicity/elements/elementsJets.h\\\"\"\n  , \"#include \\\"simplicity/simplicity_assert.h\\\"\"\n  , \"#include \\\"wrapper.h\\\"\"\n  ]\n\ncWrappers :: Module -> Doc a\ncWrappers mod = vsep (map wrapper $ moduleJets mod)\n where\n  wrapper (SomeArrow jet) = pretty $ \"WRAP_(\"++cJetName jet++\")\"\n\ncWrapperDoc :: Module -> SimpleDocStream a\ncWrapperDoc mod = layoutPretty layoutOptions $ vsep (map (<> line)\n  [ rustHeader -- also works for C\n  , cWrapperImports\n  , cWrappers mod\n  ])\n\nrenderFile name doc = withFile name WriteMode (\\h -> renderIO h doc)\n\nmain = do\n  renderFile \"core.rs\" (rustJetDoc coreModule)\n  renderFile \"elements.rs\" (rustJetDoc elementsModule)\n  renderFile \"bitcoin.rs\" (rustJetDoc bitcoinModule)\n  renderFile \"jets_ffi.rs\" (rustFFIDoc elementsModule)\n  renderFile \"jets_wrapper.rs\" (rustWrapperDoc elementsModule)\n  renderFile \"jets_wrapper.c\" (cWrapperDoc elementsModule)\n\nlayoutOptions = LayoutOptions { layoutPageWidth = AvailablePerLine 100 1 }\n"
  },
  {
    "path": "Haskell-Generate/GenTests.hs",
    "content": "{-# LANGUAGE KindSignatures, ScopedTypeVariables #-}\nmodule GenTests where\n\nimport Prelude hiding (drop, take)\n\nimport qualified Data.ByteString as BS\nimport qualified Data.ByteString.Char8 as BSC\nimport qualified Data.ByteString.Lazy as BSL\nimport Data.Char (toUpper)\nimport Data.Functor.Identity (runIdentity)\nimport Data.Maybe (fromJust)\nimport Data.Kind (Type)\nimport Data.List (intercalate)\nimport Data.List.Split (chunksOf)\nimport Data.Serialize (encode, runPut)\nimport Data.Vector (fromList)\nimport Numeric (showHex)\nimport System.IO (hPutStrLn, stderr)\nimport Lens.Family2 ((^.), (&), (.~), over, review, to, Getter')\nimport Lens.Family2.Stock (mapped)\n\nimport Simplicity.Digest\nimport qualified Simplicity.Elements.JetType\nimport qualified Simplicity.Elements.Dag\nimport Simplicity.Elements.DataTypes\nimport Simplicity.Elements.Dag (SimplicityDag)\nimport Simplicity.Elements.Inference\nimport Simplicity.Elements.Primitive\nimport Simplicity.Elements.Jets (JetType, WrappedSimplicity, fastEval, jetSubst, pruneSubst, unwrap)\nimport Simplicity.Elements.Serialization.BitString\nimport Simplicity.Elements.StaticAnalysis.Cost\nimport qualified Simplicity.Elements.Programs.SigHash.Lib\nimport Simplicity.Elements.Term\nimport qualified Simplicity.LibSecp256k1.Spec\nimport Simplicity.MerkleRoot\nimport Simplicity.Programs.Generic\nimport qualified Simplicity.Programs.Arith as Arith\nimport Simplicity.Programs.Bit\nimport qualified Simplicity.Programs.Sha256\nimport Simplicity.Programs.Sha256.Lib\nimport qualified Simplicity.Programs.LibSecp256k1.Lib\nimport qualified Simplicity.Programs.CheckSig.Lib\nimport Simplicity.Serialization\nimport Simplicity.Ty\nimport Simplicity.Word\n\ndata Example (jt :: Type -> Type -> Type)\n             a b = Example { _name :: String\n                           , _path :: [String]\n                           , _text :: [String]\n                           , _withJets :: Bool\n                           , _prog :: WrappedSimplicity a b\n                           }\ntype ExampleNoJets a b = Example Simplicity.Elements.JetType.NoJets a b\ntype ExampleProg = Example JetType () ()\n\nname f (Example n pa t wj pr) = (\\n -> Example n pa t wj pr) <$> f n\npath f (Example n pa t wj pr) = (\\pa -> Example n pa t wj pr) <$> f pa\ntext f (Example n pa t wj pr) = (\\t -> Example n pa t wj pr) <$> f t\nwithJets f (Example n pa t wj pr) = (\\wj -> Example n pa t wj pr) <$> f wj\nprog f (Example n pa t wj pr) = (\\pr -> Example n pa t wj pr) <$> f pr\n\nfullname = to proj\n where\n  proj x | null (x^.path) = x^.name\n         | otherwise = last (x^.path) ++ capital (x^.name)\n  capital [] = []\n  capital (a:b) = toUpper a : b\n\nshowComment wj txt = unlines $ [\"/* A length-prefixed encoding of the following Simplicity program:\"]\n                  ++ body\n                  ++ [\" * with jets.\" | wj]\n                  ++ [\" */\"]\n where\n  body = map (\" *     \"++) $ txt\n\nshowBinary name bin = unlines $ start ++ [intercalate \",\\n\" chunks] ++ finish\n where\n  start = [\"const unsigned char \"++name++\"[] = \" ++ open]\n  open | null bin = \"\\\"\\\";\"\n       | otherwise = \"{\"\n  finish = close ++ [\"\", \"const size_t sizeof_\"++name++\" = \"++sizeof++\";\"]\n  close | null bin = []\n        | otherwise = [\"};\"]\n  sizeof | null bin = \"0\"\n         | otherwise = \"sizeof(\"++name++\")\"\n  chunks = (\"  \"++) . intercalate \", \" <$> chunksOf 20 (showByte <$> bin)\n  showByte b = \"0x\" ++ padding ++ t\n   where\n    padding = replicate (2 - length t) '0'\n    t = showHex b \"\"\n\nshowHash name h = unlines $ [\"const uint32_t \"++name++\"[] = {\", body, \"};\"]\n where\n  str_h = padding ++ text\n   where\n    padding = replicate (64 - length text) '0'\n    text = Numeric.showHex (integerHash256 h) \"\"\n  body = \"  \" ++ intercalate \", \" (format <$> chunksOf 8 str_h)\n   where\n    format x = \"0x\" ++ x ++ \"u\"\n\nfileC :: forall jt a b. (Simplicity.Elements.JetType.JetType jt, TyC a, TyC b) => Example jt a b -> String\nfileC example = \"#include \\\"\"++example^.name++\".h\\\"\\n\"\n        ++ \"\\n\"\n        ++ showComment (example^.withJets) (example^.text)\n        ++ showBinary (example^.fullname) binP\n        ++ showBinary (example^.fullname++\"_witness\") binW\n        ++ \"\\n\"\n        ++ \"/* The commitment Merkle root of the above \"++example^.fullname++\" Simplicity expression. */\\n\"\n        ++ showHash (example^.fullname++\"_cmr\") cmr\n        ++ \"\\n\"\n        ++ \"/* The identity hash of the root of the above \"++example^.fullname++\" Simplicity expression. */\\n\"\n        ++ showHash (example^.fullname++\"_ihr\") ihr\n        ++ \"\\n\"\n        ++ \"/* The annotated Merkle root of the above \"++example^.fullname++\" Simplicity expression. */\\n\"\n        ++ showHash (example^.fullname++\"_amr\") amr\n        ++ \"\\n\"\n        ++ \"/* The cost of the above \"++example^.fullname++\" Simplicity expression in milli weight units. */\\n\"\n        ++ \"const ubounded \"++example^.fullname++\"_cost = \"++ (if cost < 2^32 then show cost else \"UBOUNDED_MAX\") ++\";\\n\"\n where\n  (program,witness) = putTermLengthCode (unwrap (example^.prog) :: Simplicity.Elements.Dag.JetDag jt a b)\n  binP = BS.unpack . runPut $ putBitStream program\n  binW = BS.unpack . runPut $ putBitStream witness\n  cmr = commitmentRoot . unwrap $ example^.prog\n  ihr = identityHash . unwrap $ example^.prog\n  amr = annotatedRoot . unwrap $ example^.prog\n  cost = milliWeigh . unwrap $ example^.prog\n\nfileH example = \"#ifndef \"++headerDef++\"\\n\"\n             ++ \"#define \"++headerDef++\"\\n\"\n             ++ \"\\n\"\n             ++ \"#include <stddef.h>\\n\"\n             ++ \"#include <stdint.h>\\n\"\n             ++ \"#include \\\"\"++concat (replicate (length (example^.path)) \"../\")++\"bounded.h\\\"\\n\"\n             ++ \"\\n\"\n             ++ showComment (example^.withJets) (example^.text)\n             ++ \"extern const unsigned char \"++example^.fullname++\"[];\\n\"\n             ++ \"extern const size_t sizeof_\"++example^.fullname++\";\\n\"\n             ++ \"extern const unsigned char \"++example^.fullname++\"_witness[];\\n\"\n             ++ \"extern const size_t sizeof_\"++example^.fullname++\"_witness;\\n\"\n             ++ \"\\n\"\n             ++ \"/* The commitment Merkle root of the above \"++example^.fullname++\" Simplicity expression. */\\n\"\n             ++ \"extern const uint32_t \"++example^.fullname++\"_cmr[];\\n\"\n             ++ \"\\n\"\n             ++ \"/* The identity hash of the root of the above \"++example^.fullname++\" Simplicity expression. */\\n\"\n             ++ \"extern const uint32_t \"++example^.fullname++\"_ihr[];\\n\"\n             ++ \"\\n\"\n             ++ \"/* The annotated Merkle root of the above \"++example^.fullname++\" Simplicity expression. */\\n\"\n             ++ \"extern const uint32_t \"++example^.fullname++\"_amr[];\\n\"\n             ++ \"\\n\"\n             ++ \"/* The cost of the above \"++example^.fullname++\" Simplicity expression in milli weight units. */\\n\"\n             ++ \"extern const ubounded \"++example^.fullname++\"_cost;\\n\"\n             ++ \"\\n\"\n             ++ \"#endif\\n\"\n where\n  headerDef = \"SIMPLICITY_\" ++ (toUpper <$> intercalate \"_\" (example^.path ++ [example^.name])) ++ \"_H\"\n\nwriteFiles example = do\n hPutStrLn stderr $ \"Writing \"++example^.name\n writeFile (example^.name++\".h\") (fileH example)\n writeFile (example^.name++\".c\") (fileC example)\n\nmain = do\n  writeFiles example_hashBlock\n  writeFiles ctx8Unpruned\n  writeFiles ctx8Pruned\n  writeFiles schnorr0\n  writeFiles schnorr6\n  writeFiles checkSigHashAllTx1\n  writeRegression4\n  writeFiles typeSkipTest\n\nnoJetSubst :: (TyC a, TyC b) => Simplicity.Elements.Dag.NoJetDag a b -> WrappedSimplicity a b\nnoJetSubst = Simplicity.Elements.Dag.jetSubst\n\nnoJetPrune :: (TyC a, TyC b) => PrimEnv -> a -> Simplicity.Elements.Dag.NoJetDag a b -> Maybe (WrappedSimplicity a b)\nnoJetPrune env a prog = Simplicity.Elements.Dag.pruneSubst prog env a\n\nexample_hashBlock :: ExampleNoJets (Hash, Block) Hash\nexample_hashBlock = Example\n  { _name = \"hashBlock\"\n  , _path = []\n  , _text = [ \"hashBlock\"\n            ]\n  , _withJets = False\n  , _prog = noJetSubst hashBlock\n  }\n\nctx8Unpruned :: ExampleNoJets () ()\nctx8Unpruned = Example\n  { _name = \"ctx8Unpruned\"\n  , _path = []\n  , _text = [ \"(scribe (toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\"\n            , \" (ctx8Init &&& scribe (toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn vector16 >>> ctx8Finalize) >>>\"\n            , \"eq >>> verify\"\n            ]\n  , _withJets = False\n  , _prog = noJetSubst\n          $ (scribe (Arith.toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\n              ((ctx8Init &&& scribe (Arith.toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn Arith.vector16 >>> ctx8Finalize)) >>>\n            eq >>> verify\n  }\n\nctx8Pruned :: ExampleNoJets () ()\nctx8Pruned = Example\n  { _name = \"ctx8Pruned\"\n  , _path = []\n  , _text = [ \"(scribe (toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\"\n            , \" (ctx8Init &&& scribe (toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn vector16 >>> ctx8Finalize) >>>\"\n            , \"eq >>> verify\"\n            ]\n  , _withJets = False\n  , _prog = prog\n  }\n where\n  Just prog = noJetPrune undefined ()\n            $ (scribe (Arith.toWord256 0x067C531269735CA7F541FDACA8F0DC76305D3CADA140F89372A410FE5EFF6E4D) &&&\n                ((ctx8Init &&& scribe (Arith.toWord128 0xDE188941A3375D3A8A061E67576E926D)) >>> ctx8Addn Arith.vector16 >>> ctx8Finalize)) >>>\n              eq >>> verify\n\nschnorr0 :: ExampleProg\nschnorr0 = Example\n  { _name = \"schnorr0\"\n  , _path = []\n  , _text = [ \"(scribe (toWord256 0xF9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9) &&&\"\n            , \" zero word256) &&&\"\n            , \" witness (toWord512 0xE907831F80848D1069A5371B402410364BDF1C5F8307B0084C55F1CE2DCA821525F66A4A85EA8B71E482A74F382D2CE5EBEEE8FDB2172F477DF4900D310536C0) >>>\"\n            , \"Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\"\n            ]\n  , _withJets = True\n  , _prog = jetSubst\n          $ (scribe (Arith.toWord256 0xF9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9) &&&\n             Arith.zero Arith.word256) &&&\n             witness (Arith.toWord512 0xE907831F80848D1069A5371B402410364BDF1C5F8307B0084C55F1CE2DCA821525F66A4A85EA8B71E482A74F382D2CE5EBEEE8FDB2172F477DF4900D310536C0) >>>\n            Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\n   }\n\nschnorr6 :: ExampleProg\nschnorr6 = Example\n  { _name = \"schnorr6\"\n  , _path = []\n  , _text = [ \"(scribe (toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659) &&&\"\n            , \" scribe (toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C)) &&&\"\n            , \" witness (toWord512 0xFFF97BD5755EEEA420453A14355235D382F6472F8568A18B2F057A14602975563CC27944640AC607CD107AE10923D9EF7A73C643E166BE5EBEAFA34B1AC553E2) >>>\"\n            , \"Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\"\n            ]\n  , _withJets = True\n  , _prog = jetSubst\n          $ (scribe (Arith.toWord256 0xDFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659) &&&\n             scribe (Arith.toWord256 0x5E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C)) &&&\n             witness (Arith.toWord512 0xFFF97BD5755EEEA420453A14355235D382F6472F8568A18B2F057A14602975563CC27944640AC607CD107AE10923D9EF7A73C643E166BE5EBEAFA34B1AC553E2) >>>\n            Simplicity.Programs.LibSecp256k1.Lib.bip_0340_verify\n   }\n\ncheckSigHashAllTx1 :: ExampleProg\ncheckSigHashAllTx1 = Example\n  { _name = \"checkSigHashAllTx1\"\n  , _path = [\"elements\"]\n  , _text = [ \"Simplicity.Programs.CheckSig.Lib.checkSigVerify' Simplicity.Elements.Programs.SigHash.Lib.sigAllHash\"\n            , \"(Simplicity.LibSecp256k1.Spec.PubKey 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63)\"\n            , \"(Simplicity.LibSecp256k1.Spec.Sig 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\"\n            , \"                                  0x\" ++ sh s ++ \")\"\n            ]\n  , _withJets = True\n  , _prog = prunedProg\n          $ (Simplicity.LibSecp256k1.Spec.Sig 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n                                              s)\n   }\n where\n  pk = Simplicity.LibSecp256k1.Spec.PubKey 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n  program sig = jetSubst $ Simplicity.Programs.CheckSig.Lib.checkSigVerify' (unwrap hashMode) pk sig\n  prunedProg sig = fromJust $ pruneSubst (Simplicity.Programs.CheckSig.Lib.checkSigVerify' (unwrap hashMode) pk sig) env\n  sh v = replicate (64 - length s) '0' ++ s\n   where\n    s = Numeric.showHex v \"\"\n  s = insecureSig . fromIntegral . Arith.fromWord256 $ msg\n  Just msg = fastEval (Simplicity.Programs.CheckSig.Lib.sigHash' (unwrap hashMode)) env ()\n  hashMode = jetSubst $ Simplicity.Elements.Programs.SigHash.Lib.sigAllHash\n  genesis = review (over be256) 0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206\n  Just env = primEnv tx1 0 tapEnv genesis\n  cmr = commitmentRoot . unwrap $ program (Simplicity.LibSecp256k1.Spec.Sig 0 0)\n  tapEnv = TapEnv { tapleafVersion = 0xbe\n                  , tapInternalKey = pk\n                  , tappath = []\n                  , tapScriptCMR = cmr\n                  }\n  tx1 = SigTx\n        { sigTxVersion = 0x00000002\n        , sigTxIn = fromList [input0]\n        , sigTxOut = fromList [output0, output1]\n        , sigTxLock = 0\n        }\n   where\n    assetId = Asset . Explicit $ review (over be256) 0x230f4f5d4b7c6fa845806ee4f67713459e1b69e8e60fcee2e4940c7a0d5de1b2\n    input0 = SigTxInput\n      { sigTxiPegin = Nothing\n      , sigTxiPreviousOutpoint = Outpoint (review (over be256) 0xeb04b68e9a26d116046c76e8ff47332fb71dda90ff4bef5370f25226d3bc09fc) 0\n      , sigTxiTxo = UTXO\n          { utxoAsset = assetId\n          , utxoAmount = Amount . Explicit $ 10000000000\n          , utxoScript = BSL.empty\n          }\n      , sigTxiSequence = 0xfffffffe\n      , sigTxiIssuance = Nothing\n      , sigTxiAnnex = Nothing\n      , sigTxiScriptSig = BSL.empty\n      }\n    output0 = TxOutput\n      { txoAsset = assetId\n      , txoAmount = Amount . Explicit $ 9999996700\n      , txoNonce = Nothing\n      , txoScript = BSL.pack\n          [ 0x19, 0x76, 0xa9, 0x14, 0x48, 0x63, 0x3e, 0x2c, 0x0e, 0xe9, 0x49, 0x5d, 0xd3, 0xf9, 0xc4, 0x37\n          , 0x32, 0xc4, 0x7f, 0x47, 0x02, 0xa3, 0x62, 0xc8, 0x88, 0xac]\n      }\n    output1 = TxOutput\n      { txoAsset = assetId\n      , txoAmount = Amount . Explicit $ 3300\n      , txoNonce = Nothing\n      , txoScript = BSL.empty\n      }\n\ninsecureSig :: Word256 -> Word256\ninsecureSig msg = fromInteger ((toInteger k * (1 + e)) `mod` order)\n where\n  order = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\n  k :: Word256\n  k = 1 + fromInteger order `div` 2\n  px :: Word256\n  px = 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63\n  e = integerHash256 . bsHash $ schnorrTag <> schnorrTag <> encode px <> encode px <> encode msg\n  schnorrTag = encode . bsHash $ BSC.pack \"BIP0340/challenge\"\n\nwriteRegression4 = do\n  hPutStrLn stderr $ \"Writing regression4\"\n  writeFile \"regression4.h\" regression4H\n  writeFile \"regression4.c\" regression4C\n where\n  regression4Bin = BS.unpack . runPut . Simplicity.Serialization.putBitStream . putDagNoWitnessLengthCode $ code\n   where\n    -- We bypass the requirement for type annotations since they are expensive to compute and are not actually need for serialization.\n    -- I promise the term we are generating is in fact well typed (with very large types that GHC doesn't particularly like to process).\n    code :: SimplicityDag [] Ty (SomeArrow Simplicity.Elements.JetType.NoJets) UntypedValue\n    code = (uWitness OneV : f 15 ++ [uComp (3*2^16) 1]) & (mapped.tyAnnotation) .~ bypassTyping\n     where\n      f 0 = [uIden, uTake 1, uIden, uDrop 1, uComp 3 1]\n      f n = rec ++ rec ++ [uComp (3*2^n) 1]\n       where\n        rec = f (n-1)\n    bypassTyping = undefined\n  regression4Src = [\n   \"uWitness OneV : f 15 ++ [uComp (3*2^16) 1]\",\n   \" where\",\n   \"  f 0 = [uIden, uTake 1, uIden, uDrop 1, uComp 3 1]\",\n   \"  f n = rec ++ rec ++ [uComp (3*2^n) 1]\",\n   \"   where\",\n   \"    rec = f (n-1)\"]\n  regression4C =\n           \"#include \\\"regression4.h\\\"\\n\"\n        ++ \"\\n\"\n        ++ showComment False regression4Src\n        ++ showBinary \"regression4\" regression4Bin\n  regression4H = \"#ifndef \"++headerDef++\"\\n\"\n              ++ \"#define \"++headerDef++\"\\n\"\n              ++ \"\\n\"\n              ++ \"#include <stddef.h>\\n\"\n              ++ \"#include <stdint.h>\\n\"\n              ++ \"#include \\\"bounded.h\\\"\\n\"\n              ++ \"\\n\"\n              ++ showComment False regression4Src\n              ++ \"extern const unsigned char \"++\"regression4\"++\"[];\\n\"\n              ++ \"extern const size_t sizeof_\"++\"regression4\"++\";\\n\"\n              ++ \"\\n\"\n              ++ \"#endif\\n\"\n    where\n     headerDef = \"SIMPLICITY_\" ++ (toUpper <$> \"regression4\") ++ \"_H\"\n\ntypeSkipTest :: ExampleNoJets () ()\ntypeSkipTest = Example\n  { _name = \"typeSkipTest\"\n  , _path = []\n  , _text = [ \"witness (runIdentity (getValue (return True))) >>> mn >>> unit\"\n            , \" where\"\n            , \"  l1 = take l0 &&& drop l0\"\n            , \"  l2 = take l1 &&& drop l1\"\n            , \"  l3 = take l2 &&& drop l2\"\n            , \"  ltop = l3\"\n            , \"  m1 = copair l3 l3\"\n            , \"  m2 = take l1 &&& drop m1\"\n            , \"  m3 = take m2 &&& drop l2\"\n            , \"  m4 = take l3 &&& drop m3\"\n            , \"  m5 = copair (injl m4) (injr ltop)\"\n            , \"  m6 = take l1 &&& drop m5\"\n            , \"  m7 = take m6 &&& drop l2\"\n            , \"  m8 = take l3 &&& drop m7\"\n            , \"  n1 = copair l3 l3\"\n            , \"  n2 = take n1 &&& drop l1\"\n            , \"  n3 = take l2 &&& drop n2\"\n            , \"  n4 = take n3 &&& drop l3\"\n            , \"  n5 = copair (injl ltop) (injr n4)\"\n            , \"  n6 = take n5 &&& drop l0\"\n            , \"  n7 = take l1 &&& drop n6\"\n            , \"  n8 = take n7 &&& drop l2\"\n            , \"  mn = copair (injl m8) (injr n8)\"\n            ]\n  , _withJets = False\n  , _prog = prog\n  }\n where\n  l0 = iden :: (Core term) => term () ()\n  l1 = take l0 &&& drop l0\n  l2 = take l1 &&& drop l1\n  l3 = take l2 &&& drop l2\n  ltop = l3\n  m1 = copair l3 l3\n  m2 = take l1 &&& drop m1\n  m3 = take m2 &&& drop l2\n  m4 = take l3 &&& drop m3\n  m5 = copair (injl m4) (injr ltop)\n  m6 = take m5 &&& drop l0\n  m7 = take l1 &&& drop m6\n  m8 = take m7 &&& drop l2\n  n1 = copair l3 l3\n  n2 = take n1 &&& drop l1\n  n3 = take l2 &&& drop n2\n  n4 = take n3 &&& drop l3\n  n5 = copair (injl ltop) (injr n4)\n  n6 = take l0 &&& drop n5\n  n7 = take n6 &&& drop l1\n  n8 = take l2 &&& drop n7\n  mn = copair (injl m8) (injr n8)\n  Just prog = noJetPrune undefined ()\n            $ witness (runIdentity (getValue (return True))) >>> mn >>> unit\n"
  },
  {
    "path": "Haskell-Generate/NameWrangler.hs",
    "content": "module NameWrangler\n  ( upperSnakeCase\n  , lowerSnakeCase\n  , mkName\n  ) where\n\nimport Data.Char (isAlpha, isDigit, isUpper, toLower, toUpper)\nimport Data.List (groupBy, intercalate)\nimport Data.List.Split (condense, dropInitBlank, keepDelimsL, split, splitOn, whenElt)\n\nsnakeCase :: String -> String\nsnakeCase str = intercalate \"_\" . groupSingles $ (split . keepDelimsL . dropInitBlank . whenElt) isUpper =<< splitDigit =<< splitOn \"_\" str\n where\n  splitDigit = (split . condense . whenElt) isDigit\n  groupSingles = map concat . groupBy singles\n   where\n    singles [x] [y] = isAlpha x && isAlpha y\n    singles _ _ = False\n\nupperSnakeCase :: String -> String\nupperSnakeCase = map toUpper . snakeCase\n\nlowerSnakeCase :: String -> String\nlowerSnakeCase = map toLower . snakeCase\n\nmkName :: Show a => a -> String\nmkName = filter (`notElem` \"()\") . last . words . show\n\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Blockstream\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Simplicity\n\nSimplicity is a blockchain programming language designed as an alternative to Bitcoin script.\n\nThe language and implementation is still under development.\n\n## Contents\n\nThis project contains\n\n* A C implementation of a minimal, consensus-critical Simplicity runtime for full nodes.\n* A Haskell implementation of Simplicity's language semantics, type inference engine, serialization functions, and some example Simplicity code.\n* A Haskell code generator that exports Simplicity constants to C and Rust.\n* A Coq implementation of Simplicity's formal denotational and operational semantics.\n\n## Build\n\nUse [Nix](https://nixos.org) for the easiest build. Alternatively, use GNU Autotools.\n\n### C project\n\n#### Nix\n\nChange into the root directory of this repository.\n\nBuild the nix package.\n\n```bash\nnix-build -A c\n```\n\nEnter a nix shell to develop the project manually (see below).\n\n```bash\nnix-shell --arg coq false --arg haskell false\n```\n\nUse arguments to enable / disable the other projects.\n\n#### Manual\n\nChange into the C directory of this repository.\n\nBuild the project using make.\n\n```bash\nmake -j$(nproc)\n```\n\nTo install the project, run make.\n\n```\nmake install # use \"out=/path/to/dir\" for local install\n```\n\nTo run the tests, run make.\n\n```bash\nmake check\n```\n\n### Haskell project\n\n#### Nix\n\nChange into the root directory of this repository.\n\nBuild the nix package.\n\n```bash\nnix-build -A haskell\n```\n\nEnter a nix shell to develop the project manually (see below).\n\n```bash\nnix-shell --arg c false --arg coq false\n```\n\nUse arguments to enable / disable the other projects.\n\n#### Manual\n\nInstall the [Glasgow Haskell Compiler](https://www.haskell.org/ghc/) and [Cabal](https://www.haskell.org/cabal/).\n\nChange into the root directory of this repository.\n\nBuild the project using cabal.\n\n```bash\ncabal build\n```\n\nTo run tests, run cabal.\n\n```bash\ncabal test # use --test-options=\"+RTS -N -RTS\" for parallel jobs\n```\n\nTo enter an interactive GHCi prompt with the project loaded, run cabal.\n\n```bash\ncabal repl Simplicity\n```\n\n### Coq project\n\n#### Nix\n\nChange into the root directory of this repository.\n\nBuild the nix package.\n\n```bash\nnix-build -A coq\n```\n\nEnter a nix shell to develop the project manually (see below).\n\nThe shell provides Coq, CompCert and VST.\n\n```bash\nnix-shell --arg c false --arg haskell false\n```\n\nUse arguments to enable / disable the other projects.\n\n#### Manual\n\nInstall the [opam package manager](https://opam.ocaml.org/).\n\nEnter the opam environment in your shell.\n\n```bash\nopam init\neval $(opam env)\n```\n\nInstall the [Coq theorem prover](https://coq.inria.fr/).\n\n```bash\nopam pin -j$(nproc) add coq 8.17.1\n```\n\nInstall the [CompCert certified C compiler](https://compcert.org/).\n\n```bash\nopam repo add coq-released https://coq.inria.fr/opam/released\nopam install -j$(nproc) coq-compcert.3.13.1\n```\n\nInstall a custom version of the [Verified Software Toolchain](https://vst.cs.princeton.edu/).\n\n**You cannot use opam for this step!**\n\n```\nwget -O - https://github.com/PrincetonUniversity/VST/archive/v2.13.tar.gz | tar -xvzf -\ncd VST-2.13\nmake -j$(nproc) default_target sha\nmake install\ninstall -d $(coqc -where)/user-contrib/sha\ninstall -m 0644 -t $(coqc -where)/user-contrib/sha sha/*.v sha/*.vo\n```\n\nEnter the Coq directory of this repository.\n\nBuild the project using make.\n\n```bash\ncoq_makefile -f _CoqProject -o CoqMakefile\nmake -f CoqMakefile -j$(nproc)\n```\n\nTo install the project, run make.\n\n```bash\nmake -f CoqMakefile install\n```\n\n## Documentation\n\nDetailed documentation can be found in the `Simplicity-TR.tm` TeXmacs file.\nA recent PDF version can be found in the [pdf](https://github.com/ElementsProject/simplicity/blob/pdf/Simplicity-TR.pdf) branch.\n\n## Further Resources\n\n* Our [paper that originally introduced Simplicity](https://arxiv.org/abs/1711.03028).  Some of the finer details are out of date, but it is still a good introduction.\n* [BPASE 2018 presentation](https://youtu.be/VOeUq3oR2fk) of the above paper.\n* [Scale by the Bay 2018 presentation](https://youtu.be/M4XnDrRIKx8) that illustrates formal verification of Simplicity in Agda ([slides](https://lists.ozlabs.org/pipermail/simplicity/2018/000011.html)).\n* Our library [rust-simplicity](https://github.com/BlockstreamResearch/rust-simplicity) that implements Simplicity in Rust.\n\n## Contact\n\nInterested parties are welcome to join the [Simplicity mailing list](https://lists.ozlabs.org/listinfo/simplicity).\nIssues and pull-requests can be made through GitHub's interface.\n"
  },
  {
    "path": "Setup.hs",
    "content": "import Distribution.Simple\nmain = defaultMain\n"
  },
  {
    "path": "Simplicity-Primitive.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /><title>Simplicity.Primitive (signature)</title><link href=\"ocean.css\" rel=\"stylesheet\" type=\"text/css\" title=\"Ocean\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"quick-jump.css\" /><script src=\"haddock-bundle.min.js\" async=\"async\" type=\"text/javascript\"></script><script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML\" type=\"text/javascript\"></script></head><body><div id=\"package-header\"><ul class=\"links\" id=\"page-menu\"><li><a href=\"index.html\">Contents</a></li><li><a href=\"doc-index.html\">Index</a></li></ul><p class=\"caption\">Simplicity-0.0.0</p></div><div id=\"content\"><div id=\"module-header\"><table class=\"info\"><tr><th>Safe Haskell</th><td>Safe</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class=\"caption\">Simplicity.Primitive (signature<sup>[<a href=\"https://wiki.haskell.org/Module_signature\">?</a>]</sup>)</p></div><div id=\"interface\"><h1>Documentation</h1><div class=\"top\"><p class=\"src\"><span class=\"keyword\">data</span> <a id=\"t:Prim\" class=\"def\">Prim</a> a b <a href=\"#t:Prim\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><a id=\"v:primPrefix\" class=\"def\">primPrefix</a> :: <a href=\"file:///nix/store/2pr4j9wbwqvrm0fzdssqvvchqc6xbm22-ghc-8.6.4-doc/share/doc/ghc/html/libraries/base-4.12.0.0/Data-String.html#t:String\" title=\"Data.String\">String</a> <a href=\"#v:primPrefix\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><a id=\"v:primName\" class=\"def\">primName</a> :: <a href=\"Simplicity-Primitive.html#t:Prim\" title=\"Simplicity.Primitive\">Prim</a> a b -&gt; <a href=\"file:///nix/store/2pr4j9wbwqvrm0fzdssqvvchqc6xbm22-ghc-8.6.4-doc/share/doc/ghc/html/libraries/base-4.12.0.0/Data-String.html#t:String\" title=\"Data.String\">String</a> <a href=\"#v:primName\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><a id=\"v:getPrimBit\" class=\"def\">getPrimBit</a> :: <a href=\"file:///nix/store/2pr4j9wbwqvrm0fzdssqvvchqc6xbm22-ghc-8.6.4-doc/share/doc/ghc/html/libraries/base-4.12.0.0/Control-Monad.html#t:Monad\" title=\"Control.Monad\">Monad</a> m =&gt; m <a href=\"file:///nix/store/2pr4j9wbwqvrm0fzdssqvvchqc6xbm22-ghc-8.6.4-doc/share/doc/ghc/html/libraries/base-4.12.0.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a> -&gt; m (<a href=\"file:///home/roconnor/Simplicity/dist/doc/html/Simplicity/Simplicity-Ty.html#t:SomeArrow\" title=\"Simplicity.Ty\">SomeArrow</a> <a href=\"Simplicity-Primitive.html#t:Prim\" title=\"Simplicity.Primitive\">Prim</a>) <a href=\"#v:getPrimBit\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><a id=\"v:getPrimByte\" class=\"def\">getPrimByte</a> :: <a href=\"file:///home/roconnor/Simplicity/dist/doc/html/Simplicity/Simplicity-Word.html#t:Word8\" title=\"Simplicity.Word\">Word8</a> -&gt; <a href=\"file:///nix/store/8b9py0njpkdysaykq32sq296wkgbc1hw-cereal-0.5.8.0-doc/share/doc/cereal-0.5.8.0/html/Data-Serialize-Get.html#t:Get\" title=\"Data.Serialize.Get\">Get</a> (<a href=\"file:///nix/store/2pr4j9wbwqvrm0fzdssqvvchqc6xbm22-ghc-8.6.4-doc/share/doc/ghc/html/libraries/base-4.12.0.0/GHC-Maybe.html#t:Maybe\" title=\"GHC.Maybe\">Maybe</a> (<a href=\"file:///home/roconnor/Simplicity/dist/doc/html/Simplicity/Simplicity-Ty.html#t:SomeArrow\" title=\"Simplicity.Ty\">SomeArrow</a> <a href=\"Simplicity-Primitive.html#t:Prim\" title=\"Simplicity.Primitive\">Prim</a>)) <a href=\"#v:getPrimByte\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><a id=\"v:putPrimBit\" class=\"def\">putPrimBit</a> :: <a href=\"Simplicity-Primitive.html#t:Prim\" title=\"Simplicity.Primitive\">Prim</a> a b -&gt; <a href=\"file:///home/roconnor/Simplicity/dist/doc/html/Simplicity/Simplicity-Serialization.html#t:DList\" title=\"Simplicity.Serialization\">DList</a> <a href=\"file:///nix/store/2pr4j9wbwqvrm0fzdssqvvchqc6xbm22-ghc-8.6.4-doc/share/doc/ghc/html/libraries/base-4.12.0.0/Data-Bool.html#t:Bool\" title=\"Data.Bool\">Bool</a> <a href=\"#v:putPrimBit\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><a id=\"v:putPrimByte\" class=\"def\">putPrimByte</a> :: <a href=\"file:///nix/store/8b9py0njpkdysaykq32sq296wkgbc1hw-cereal-0.5.8.0-doc/share/doc/cereal-0.5.8.0/html/Data-Serialize-Put.html#t:Putter\" title=\"Data.Serialize.Put\">Putter</a> (<a href=\"Simplicity-Primitive.html#t:Prim\" title=\"Simplicity.Primitive\">Prim</a> a b) <a href=\"#v:putPrimByte\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><span class=\"keyword\">data</span> <a id=\"t:PrimEnv\" class=\"def\">PrimEnv</a> <a href=\"#t:PrimEnv\" class=\"selflink\">#</a></p></div><div class=\"top\"><p class=\"src\"><a id=\"v:primSem\" class=\"def\">primSem</a> :: <a href=\"Simplicity-Primitive.html#t:Prim\" title=\"Simplicity.Primitive\">Prim</a> a b -&gt; a -&gt; <a href=\"Simplicity-Primitive.html#t:PrimEnv\" title=\"Simplicity.Primitive\">PrimEnv</a> -&gt; <a href=\"file:///nix/store/2pr4j9wbwqvrm0fzdssqvvchqc6xbm22-ghc-8.6.4-doc/share/doc/ghc/html/libraries/base-4.12.0.0/GHC-Maybe.html#t:Maybe\" title=\"GHC.Maybe\">Maybe</a> b <a href=\"#v:primSem\" class=\"selflink\">#</a></p></div></div></div><div id=\"footer\"><p>Produced by <a href=\"http://www.haskell.org/haddock/\">Haddock</a> version 2.22.0</p></div></body></html>"
  },
  {
    "path": "Simplicity-TR.tm",
    "content": "<TeXmacs|2.1>\n\n<style|<tuple|book|old-spacing|old-dots|old-lengths>>\n\n<\\body>\n  <\\doc-data|<\\doc-title>\n    Simplicity\n  </doc-title>|<doc-author|<author-data|<author-name|Russell\n  O'Connor>|<\\author-affiliation>\n    Blockstream\n  </author-affiliation>|<author-email|roconnor@blockstream.com>>>|<doc-misc|DRAFT>|<doc-date|<date>>>\n    \\;\n  </doc-data>\n\n  <\\table-of-contents|toc>\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|1<space|2spc>Introduction>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-1><vspace|0.5fn>\n\n    1.1<space|2spc>Bitcoin Script <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-2>\n\n    1.2<space|2spc>Simplicity's Design Goals\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-3>\n\n    <with|par-left|1tab|1.2.1<space|2spc>Static Analysis\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-4>>\n\n    <with|par-left|1tab|1.2.2<space|2spc>Pruning and Sharing\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-5>>\n\n    <with|par-left|1tab|1.2.3<space|2spc>Formal Semantics\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-6>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|2<space|2spc>Type\n    Theory Preliminaries> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-7><vspace|0.5fn>\n\n    2.1<space|2spc>Algebraic Types <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-8>\n\n    <with|par-left|1tab|2.1.1<space|2spc>Records\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-9>>\n\n    2.2<space|2spc>Functors <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-10>\n\n    <with|par-left|1tab|2.2.1<space|2spc>Option Functor\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-11>>\n\n    <with|par-left|1tab|2.2.2<space|2spc>List Functors\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-12>>\n\n    <with|par-left|1tab|2.2.3<space|2spc>Buffers\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-13>>\n\n    2.3<space|2spc>Monads <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-14>\n\n    <with|par-left|1tab|2.3.1<space|2spc>Kleisli Morphisms\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-15>>\n\n    <with|par-left|1tab|2.3.2<space|2spc>Cartesian Strength\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-16>>\n\n    <with|par-left|1tab|2.3.3<space|2spc>Identity Monad\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-17>>\n\n    <with|par-left|1tab|2.3.4<space|2spc>Monad Zero\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-18>>\n\n    <with|par-left|2tab|2.3.4.1<space|2spc>Option Monad\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-19>>\n\n    2.4<space|2spc>Multi-bit Words <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-20>\n\n    <with|par-left|1tab|2.4.1<space|2spc>Byte Strings\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-21>>\n\n    <with|par-left|1tab|2.4.2<space|2spc>Bit Strings\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-22>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|3<space|2spc>Core\n    Simplicity> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-23><vspace|0.5fn>\n\n    3.1<space|2spc>Types <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-24>\n\n    <with|par-left|1tab|3.1.1<space|2spc>Abstract Syntax\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-25>>\n\n    <with|par-left|1tab|3.1.2<space|2spc>Formal Syntax\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-26>>\n\n    <with|par-left|1tab|3.1.3<space|2spc>Formal Semantics\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-27>>\n\n    3.2<space|2spc>Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-28>\n\n    <with|par-left|1tab|3.2.1<space|2spc>Identity\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-29>>\n\n    <with|par-left|1tab|3.2.2<space|2spc>Composition\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-30>>\n\n    <with|par-left|1tab|3.2.3<space|2spc>Constant Unit\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-31>>\n\n    <with|par-left|1tab|3.2.4<space|2spc>Left Injection\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-32>>\n\n    <with|par-left|1tab|3.2.5<space|2spc>Right Injection\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-33>>\n\n    <with|par-left|1tab|3.2.6<space|2spc>Case\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-34>>\n\n    <with|par-left|1tab|3.2.7<space|2spc>Pair\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-35>>\n\n    <with|par-left|1tab|3.2.8<space|2spc>Take\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-36>>\n\n    <with|par-left|1tab|3.2.9<space|2spc>Drop\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-37>>\n\n    <with|par-left|1tab|3.2.10<space|2spc>Formal Syntax\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-38>>\n\n    <with|par-left|1tab|3.2.11<space|2spc>Formal Semantics\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-39>>\n\n    3.3<space|2spc>Example Simplicity <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-40>\n\n    <with|par-left|1tab|3.3.1<space|2spc>Bit Operations\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-41>>\n\n    <with|par-left|1tab|3.3.2<space|2spc>Simplicity Notation\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-42>>\n\n    <with|par-left|1tab|3.3.3<space|2spc>Generic Equality\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-43>>\n\n    <with|par-left|1tab|3.3.4<space|2spc>Arithmetic\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-44>>\n\n    <with|par-left|1tab|3.3.5<space|2spc>Bitwise Operations\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-45>>\n\n    <with|par-left|1tab|3.3.6<space|2spc>SHA-256\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-46>>\n\n    <with|par-left|2tab|3.3.6.1<space|2spc>Tagged Hashes\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-47>>\n\n    <with|par-left|1tab|3.3.7<space|2spc>Elliptic Curve Operations on\n    secp256k1 <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-48>>\n\n    <with|par-left|2tab|3.3.7.1<space|2spc>libsecp256k1\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-49>>\n\n    <with|par-left|2tab|3.3.7.2<space|2spc>libsecp256k1 in Simplicity\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-50>>\n\n    <with|par-left|2tab|3.3.7.3<space|2spc>Schnorr Signature Validation\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-51>>\n\n    3.4<space|2spc>Completeness Theorem <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-52>\n\n    3.5<space|2spc>Operational Semantics <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-53>\n\n    <with|par-left|1tab|3.5.1<space|2spc>Representing Values as Cell Arrays\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-54>>\n\n    <with|par-left|1tab|3.5.2<space|2spc>Bit Machine\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-55>>\n\n    <with|par-left|2tab|3.5.2.1<space|2spc>Frame Instructions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-57>>\n\n    <with|par-left|2tab|3.5.2.2<space|2spc>Active Write Frame Instructions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-58>>\n\n    <with|par-left|2tab|3.5.2.3<space|2spc>Active Read Frame Instructions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-59>>\n\n    <with|par-left|2tab|3.5.2.4<space|2spc>Abort Instruction\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-60>>\n\n    <with|par-left|2tab|3.5.2.5<space|2spc>Bit Machine Programs\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-61>>\n\n    <with|par-left|2tab|3.5.2.6<space|2spc>Crashing the Bit Machine\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-62>>\n\n    <with|par-left|1tab|3.5.3<space|2spc>Executing Simplicity\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-63>>\n\n    <with|par-left|2tab|3.5.3.1<space|2spc>Tail Composition Optimisation\n    (TCO) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-64>>\n\n    3.6<space|2spc>Static Analysis <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-65>\n\n    <with|par-left|1tab|3.6.1<space|2spc>Space Resources\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-66>>\n\n    <with|par-left|2tab|3.6.1.1<space|2spc>Maximum Cell Count Bound\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-67>>\n\n    <with|par-left|2tab|3.6.1.2<space|2spc>Maximum Frame Count Bound\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-68>>\n\n    <with|par-left|1tab|3.6.2<space|2spc>Time Resources\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-69>>\n\n    3.7<space|2spc>Commitment Merkle Root\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-70>\n\n    3.8<space|2spc>Type Merkle Root <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-71>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|4<space|2spc>Simplicity\n    Extensions> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-72><vspace|0.5fn>\n\n    4.1<space|2spc>Monadic Semantics <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-73>\n\n    4.2<space|2spc>Witness <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-74>\n\n    <with|par-left|1tab|4.2.1<space|2spc>Elided Computation\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-75>>\n\n    <with|par-left|1tab|4.2.2<space|2spc>Type Inference with Witness\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-76>>\n\n    4.3<space|2spc>Assertions and Failure\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-77>\n\n    <with|par-left|1tab|4.3.1<space|2spc>Denotational Semantics\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-78>>\n\n    <with|par-left|1tab|4.3.2<space|2spc>Merkle Roots\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-79>>\n\n    <with|par-left|2tab|4.3.2.1<space|2spc>Pruning Unused\n    <with|font-family|ss|case> Branches <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-80>>\n\n    <with|par-left|2tab|4.3.2.2<space|2spc>Salted Expressions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-81>>\n\n    4.4<space|2spc>Blockchain Primitives <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-82>\n\n    <with|par-left|1tab|4.4.1<space|2spc>Bitcoin Transactions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-83>>\n\n    <with|par-left|2tab|4.4.1.1<space|2spc>Denotational Semantics\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-84>>\n\n    <with|par-left|2tab|4.4.1.2<space|2spc>Merkle Roots\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-85>>\n\n    4.5<space|2spc>Simplicity Programs <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-86>\n\n    <with|par-left|1tab|4.5.1<space|2spc>Example:\n    <rigid|<with|mode|text|<with|font-family|ss|font-shape|right|checkSigHashAll>>>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-87>>\n\n    4.6<space|2spc>Schnorr Signature Aggregation\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-88>\n\n    4.7<space|2spc>Malleability <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-89>\n\n    <with|par-left|1tab|4.7.1<space|2spc>Transaction Weight\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-90>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|5<space|2spc>Jets>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-91><vspace|0.5fn>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|6<space|2spc>Delegation>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-92><vspace|0.5fn>\n\n    6.1<space|2spc>Implementing <with|font-family|ss|disconnect> on the Bit\n    Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-93>\n\n    <with|par-left|1tab|6.1.1<space|2spc>Static Analysis of\n    <with|font-family|ss|disconnect> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-94>>\n\n    <with|par-left|2tab|6.1.1.1<space|2spc>Space Resources\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-95>>\n\n    6.2<space|2spc>Unbounded Loops <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-96>\n\n    <with|par-left|1tab|6.2.1<space|2spc>Adding a <with|font-family|ss|loop>\n    primitive to Simplicity? <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-97>>\n\n    6.3<space|2spc>Universal Signature Hash Modes\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-98>\n\n    <with|par-left|1tab|6.3.1<space|2spc>Side-Effects and Delegation\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-99>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|7<space|2spc>Type\n    Inference and Serialization> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-100><vspace|0.5fn>\n\n    7.1<space|2spc>Explicit Simplicity DAGs\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-101>\n\n    <with|par-left|1tab|7.1.1<space|2spc>Type Inference\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-102>>\n\n    <with|par-left|1tab|7.1.2<space|2spc>Reconstructing Simplicity\n    Expressions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-103>>\n\n    <with|par-left|2tab|7.1.2.1<space|2spc>syncase\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-104>>\n\n    <with|par-left|2tab|7.1.2.2<space|2spc>inflate\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-105>>\n\n    7.2<space|2spc>Serialization <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-106>\n\n    <with|par-left|1tab|7.2.1<space|2spc>Serialization of Bit Strings and\n    Positive Numbers <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-107>>\n\n    <with|par-left|1tab|7.2.2<space|2spc>Serialization of Simplicity\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-108>>\n\n    <with|par-left|2tab|7.2.2.1<space|2spc>Serialization of Word Jets\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-109>>\n\n    <with|par-left|1tab|7.2.3<space|2spc>Identity Merkle Root\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-110>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|8<space|2spc>Coq\n    Library Guide> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-111><vspace|0.5fn>\n\n    8.1<space|2spc>Simplicity Types <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-112>\n\n    8.2<space|2spc>Simplicity Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-113>\n\n    <with|par-left|1tab|8.2.1<space|2spc>The \\PInitial\\Q Representation of\n    Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-114>>\n\n    <with|par-left|1tab|8.2.2<space|2spc>The \\PFinal\\Q Representation of\n    Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-115>>\n\n    <with|par-left|2tab|8.2.2.1<space|2spc>Simplicity Algebras\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-116>>\n\n    <with|par-left|2tab|8.2.2.2<space|2spc>The \\PFinal\\Q Representation\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-117>>\n\n    <with|par-left|2tab|8.2.2.3<space|2spc>Constructing \\PFinal\\Q Terms\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-118>>\n\n    <with|par-left|1tab|8.2.3<space|2spc>Why two representations of Terms?\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-119>>\n\n    8.3<space|2spc>Example Simplicity Expressions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-120>\n\n    <with|par-left|1tab|8.3.1<space|2spc>Bits\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-121>>\n\n    <with|par-left|1tab|8.3.2<space|2spc>Arithmetic\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-122>>\n\n    <with|par-left|1tab|8.3.3<space|2spc>SHA256\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-123>>\n\n    8.4<space|2spc>The Hierarchy of Simplicity Language Extensions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-124>\n\n    <with|par-left|1tab|8.4.1<space|2spc>Witness\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-126>>\n\n    <with|par-left|1tab|8.4.2<space|2spc>Assertion\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-127>>\n\n    <with|par-left|1tab|8.4.3<space|2spc>Delegation\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-128>>\n\n    <with|par-left|1tab|8.4.4<space|2spc>Primitives\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-129>>\n\n    <with|par-left|2tab|8.4.4.1<space|2spc>Bitcoin\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-130>>\n\n    <with|par-left|1tab|8.4.5<space|2spc>Jets\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-131>>\n\n    <with|par-left|1tab|8.4.6<space|2spc>Full Simplicity\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-132>>\n\n    8.5<space|2spc>Merkle Roots <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-133>\n\n    8.6<space|2spc>The Bit Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-134>\n\n    <with|par-left|1tab|8.6.1<space|2spc>Bit Machine Code\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-135>>\n\n    <with|par-left|2tab|8.6.1.1<space|2spc>Bit Machine Programs\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-136>>\n\n    <with|par-left|1tab|8.6.2<space|2spc>Translating Simplicity to the Bit\n    Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-137>>\n\n    <with|par-left|1tab|8.6.3<space|2spc>Static Analysis\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-138>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|9<space|2spc>Haskell\n    Library Guide> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-139><vspace|0.5fn>\n\n    9.1<space|2spc><with|font-family|tt|language|verbatim|Simplicity-Core>\n    library <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-140>\n\n    <with|par-left|1tab|9.1.1<space|2spc>Simplicity Types\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-141>>\n\n    <with|par-left|1tab|9.1.2<space|2spc>Simplicity Terms\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-142>>\n\n    <with|par-left|1tab|9.1.3<space|2spc>Merkle Roots\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-143>>\n\n    <with|par-left|1tab|9.1.4<space|2spc>Tensors\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-144>>\n\n    <with|par-left|1tab|9.1.5<space|2spc>Example Simplicity Expressions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-145>>\n\n    <with|par-left|2tab|9.1.5.1<space|2spc>Generic\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-146>>\n\n    <with|par-left|2tab|9.1.5.2<space|2spc>Bits\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-147>>\n\n    <with|par-left|2tab|9.1.5.3<space|2spc>Multi-bit Words\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-148>>\n\n    <with|par-left|2tab|9.1.5.4<space|2spc>Arithmetic\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-149>>\n\n    <with|par-left|2tab|9.1.5.5<space|2spc>Loop\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-150>>\n\n    <with|par-left|1tab|9.1.6<space|2spc>Libraries of Simplicity Expressions\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-151>>\n\n    <with|par-left|2tab|9.1.6.1<space|2spc>SHA-256\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-152>>\n\n    <with|par-left|2tab|9.1.6.2<space|2spc>LibSecp256k1\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-153>>\n\n    <with|par-left|2tab|9.1.6.3<space|2spc>CheckSigHash\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-154>>\n\n    <with|par-left|1tab|9.1.7<space|2spc>The Bit Machine\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-155>>\n\n    <with|par-left|2tab|9.1.7.1<space|2spc>Translating Simplicity to the Bit\n    Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-156>>\n\n    <with|par-left|2tab|9.1.7.2<space|2spc>Static Analysis\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-157>>\n\n    <with|par-left|2tab|9.1.7.3<space|2spc>Fast Evaluation with FFI\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-158>>\n\n    9.2<space|2spc><with|font-family|tt|language|verbatim|Simplicity-Indef>\n    library <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-159>\n\n    <with|par-left|1tab|9.2.1<space|2spc>Primitive Signature\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-160>>\n\n    <with|par-left|1tab|9.2.2<space|2spc>Primitive Terms\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-161>>\n\n    <with|par-left|1tab|9.2.3<space|2spc><with|font-family|tt|language|verbatim|JetType>\n    class <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-162>>\n\n    <with|par-left|1tab|9.2.4<space|2spc>Denotational Semantics of Full\n    Simplicity <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-163>>\n\n    <with|par-left|1tab|9.2.5<space|2spc>Type Inference\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-164>>\n\n    <with|par-left|1tab|9.2.6<space|2spc>Serialization\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-165>>\n\n    <with|par-left|2tab|9.2.6.1<space|2spc>Free Monadic Deserializaiton\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-166>>\n\n    <with|par-left|2tab|9.2.6.2<space|2spc>Serialization of Simplicity DAGs\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-167>>\n\n    <with|par-left|1tab|9.2.7<space|2spc>Jet Substitution\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-168>>\n\n    9.3<space|2spc><with|font-family|tt|language|verbatim|Simplicity-Bitcoin>\n    Library <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-169>\n\n    9.4<space|2spc><with|font-family|tt|language|verbatim|Simplicity> Library\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-170>\n\n    <with|par-left|1tab|9.4.1<space|2spc>CheckSigHashAll\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-171>>\n\n    <with|par-left|1tab|9.4.2<space|2spc>Known Discounted Jets\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-172>>\n\n    9.5<space|2spc>Simplicity <with|font-family|tt|language|verbatim|testsuite>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-173>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|10<space|2spc>C\n    Library Guide> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-174><vspace|0.5fn>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|Appendix\n    A<space|2spc>Elements Application> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-175><vspace|0.5fn>\n\n    A.1<space|2spc>Denotational Semantics\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-176>\n\n    <with|par-left|1tab|A.1.1<space|2spc>Null Data\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-177>>\n\n    <with|par-left|1tab|A.1.2<space|2spc>Merkle Roots\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-178>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|Appendix\n    B<space|2spc>Catelogue of Jets> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-179><vspace|0.5fn>\n\n    B.1<space|2spc><with|font-family|tt|language|verbatim|110...: >Core Jets\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-180>\n\n    <with|par-left|1tab|B.1.1<space|2spc><with|font-family|tt|language|verbatim|1100...:\n    >Jets for multi-bit logic <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-181>>\n\n    <with|par-left|2tab|B.1.1.1<space|2spc>verify\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-182>>\n\n    <with|par-left|2tab|B.1.1.2<space|2spc><with|font-family|ss|low>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-183>>\n\n    <with|par-left|2tab|B.1.1.3<space|2spc><with|font-family|ss|high>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-184>>\n\n    <with|par-left|2tab|B.1.1.4<space|2spc><with|font-family|ss|complement>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-185>>\n\n    <with|par-left|2tab|B.1.1.5<space|2spc><with|font-family|ss|and>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-186>>\n\n    <with|par-left|2tab|B.1.1.6<space|2spc><with|font-family|ss|or>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-187>>\n\n    <with|par-left|2tab|B.1.1.7<space|2spc><with|font-family|ss|xor>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-188>>\n\n    <with|par-left|2tab|B.1.1.8<space|2spc><with|font-family|ss|maj>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-189>>\n\n    <with|par-left|2tab|B.1.1.9<space|2spc><with|font-family|ss|xor-xor>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-190>>\n\n    <with|par-left|2tab|B.1.1.10<space|2spc><with|font-family|ss|ch>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-191>>\n\n    <with|par-left|2tab|B.1.1.11<space|2spc><with|font-family|ss|some>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-192>>\n\n    <with|par-left|2tab|B.1.1.12<space|2spc><with|font-family|ss|all>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-193>>\n\n    <with|par-left|2tab|B.1.1.13<space|2spc><with|font-family|ss|eq>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-194>>\n\n    <with|par-left|2tab|B.1.1.14<space|2spc><with|font-family|ss|full-left-shift>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-195>>\n\n    <with|par-left|2tab|B.1.1.15<space|2spc><with|font-family|ss|full-right-shift>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-196>>\n\n    <with|par-left|2tab|B.1.1.16<space|2spc><with|font-family|ss|leftmost>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-197>>\n\n    <with|par-left|2tab|B.1.1.17<space|2spc><with|font-family|ss|rightmost>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-198>>\n\n    <with|par-left|2tab|B.1.1.18<space|2spc><with|font-family|ss|left-pad-low>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-199>>\n\n    <with|par-left|2tab|B.1.1.19<space|2spc><with|font-family|ss|left-pad-high>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-200>>\n\n    <with|par-left|2tab|B.1.1.20<space|2spc><with|font-family|ss|left-extend>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-201>>\n\n    <with|par-left|2tab|B.1.1.21<space|2spc><with|font-family|ss|right-pad-low>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-202>>\n\n    <with|par-left|2tab|B.1.1.22<space|2spc><with|font-family|ss|right-pad-high>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-203>>\n\n    <with|par-left|2tab|B.1.1.23<space|2spc><with|font-family|ss|right-extend>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-204>>\n\n    <with|par-left|2tab|B.1.1.24<space|2spc><with|font-family|ss|left-shift-with>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-205>>\n\n    <with|par-left|2tab|B.1.1.25<space|2spc><with|font-family|ss|right-shift-with>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-207>>\n\n    <with|par-left|2tab|B.1.1.26<space|2spc><with|font-family|ss|left-shift>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-208>>\n\n    <with|par-left|2tab|B.1.1.27<space|2spc><with|font-family|ss|right-shift>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-209>>\n\n    <with|par-left|2tab|B.1.1.28<space|2spc><with|font-family|ss|left-rotate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-210>>\n\n    <with|par-left|2tab|B.1.1.29<space|2spc><with|font-family|ss|right-rotate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-211>>\n\n    <with|par-left|2tab|B.1.1.30<space|2spc><with|font-family|ss|transpose>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-212>>\n\n    <with|par-left|2tab|B.1.1.31<space|2spc><with|font-family|ss|find-first-high>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-213>>\n\n    <with|par-left|2tab|B.1.1.32<space|2spc><with|font-family|ss|find-last-high>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-214>>\n\n    <with|par-left|2tab|B.1.1.33<space|2spc><with|font-family|ss|bit>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-215>>\n\n    <with|par-left|1tab|B.1.2<space|2spc><with|font-family|tt|language|verbatim|110100...:\n    >Jets for arithmetic <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-216>>\n\n    <with|par-left|2tab|B.1.2.1<space|2spc><with|font-family|ss|one>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-217>>\n\n    <with|par-left|2tab|B.1.2.2<space|2spc><with|font-family|ss|full-add>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-218>>\n\n    <with|par-left|2tab|B.1.2.3<space|2spc><with|font-family|ss|add>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-219>>\n\n    <with|par-left|2tab|B.1.2.4<space|2spc><with|font-family|ss|full-increment>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-220>>\n\n    <with|par-left|2tab|B.1.2.5<space|2spc><with|font-family|ss|increment>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-221>>\n\n    <with|par-left|2tab|B.1.2.6<space|2spc><with|font-family|ss|popcount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-222>>\n\n    <with|par-left|2tab|B.1.2.7<space|2spc><with|font-family|ss|full-subtract>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-224>>\n\n    <with|par-left|2tab|B.1.2.8<space|2spc><with|font-family|ss|subtract>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-225>>\n\n    <with|par-left|2tab|B.1.2.9<space|2spc><with|font-family|ss|negate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-226>>\n\n    <with|par-left|2tab|B.1.2.10<space|2spc><with|font-family|ss|full-decrement>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-227>>\n\n    <with|par-left|2tab|B.1.2.11<space|2spc><with|font-family|ss|decrement>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-228>>\n\n    <with|par-left|2tab|B.1.2.12<space|2spc><with|font-family|ss|full-multiply>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-229>>\n\n    <with|par-left|2tab|B.1.2.13<space|2spc><with|font-family|ss|multiply>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-230>>\n\n    <with|par-left|2tab|B.1.2.14<space|2spc><with|font-family|tt|language|verbatim|><with|font-family|ss|is-zero>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-231>>\n\n    <with|par-left|2tab|B.1.2.15<space|2spc><with|font-family|tt|language|verbatim|><with|font-family|ss|is-one>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-232>>\n\n    <with|par-left|2tab|B.1.2.16<space|2spc><with|font-family|ss|le>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-233>>\n\n    <with|par-left|2tab|B.1.2.17<space|2spc><with|font-family|ss|lt>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-234>>\n\n    <with|par-left|2tab|B.1.2.18<space|2spc><with|font-family|ss|min>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-235>>\n\n    <with|par-left|2tab|B.1.2.19<space|2spc><with|font-family|ss|max>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-236>>\n\n    <with|par-left|2tab|B.1.2.20<space|2spc><with|font-family|ss|median>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-237>>\n\n    <with|par-left|2tab|B.1.2.21<space|2spc><with|font-family|ss|div2n1n>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-238>>\n\n    <with|par-left|2tab|B.1.2.22<space|2spc><with|font-family|ss|div-mod>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-239>>\n\n    <with|par-left|2tab|B.1.2.23<space|2spc><with|font-family|ss|divide>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-240>>\n\n    <with|par-left|2tab|B.1.2.24<space|2spc><with|font-family|ss|modulo>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-241>>\n\n    <with|par-left|2tab|B.1.2.25<space|2spc><with|font-family|ss|divides>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-242>>\n\n    <with|par-left|2tab|B.1.2.26<space|2spc><with|font-family|ss|eea>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-243>>\n\n    <with|par-left|2tab|B.1.2.27<space|2spc><with|font-family|ss|bezout>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-244>>\n\n    <with|par-left|2tab|B.1.2.28<space|2spc><with|font-family|ss|gcd>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-245>>\n\n    <with|par-left|2tab|B.1.2.29<space|2spc><with|font-family|ss|cofactors>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-246>>\n\n    <with|par-left|2tab|B.1.2.30<space|2spc><with|font-family|ss|lcm>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-247>>\n\n    <with|par-left|2tab|B.1.2.31<space|2spc><with|font-family|ss|jacobi>\n    (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-248>>\n\n    <with|par-left|2tab|B.1.2.32<space|2spc><with|font-family|ss|absolute-value>\n    (signed input/unsigned output) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-249>>\n\n    <with|par-left|2tab|B.1.2.33<space|2spc><with|font-family|tt|language|verbatim|><with|font-family|ss|sign>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-250>>\n\n    <with|par-left|2tab|B.1.2.34<space|2spc><with|font-family|ss|signed-le>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-251>>\n\n    <with|par-left|2tab|B.1.2.35<space|2spc><with|font-family|ss|signed-lt>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-252>>\n\n    <with|par-left|2tab|B.1.2.36<space|2spc><with|font-family|ss|signed-min>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-253>>\n\n    <with|par-left|2tab|B.1.2.37<space|2spc><with|font-family|ss|signed-max>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-254>>\n\n    <with|par-left|2tab|B.1.2.38<space|2spc><with|font-family|ss|signed-median>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-255>>\n\n    <with|par-left|2tab|B.1.2.39<space|2spc><with|font-family|ss|signed-right-shift>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-256>>\n\n    <with|par-left|2tab|B.1.2.40<space|2spc><with|font-family|ss|signed-divmod>\n    (unsigned denominator) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-257>>\n\n    <with|par-left|2tab|B.1.2.41<space|2spc><with|font-family|ss|signed-div>\n    (unsigned denominator) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-258>>\n\n    <with|par-left|2tab|B.1.2.42<space|2spc><with|font-family|ss|signed-signed-divmod>\n    (signed denominator) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-259>>\n\n    <with|par-left|2tab|B.1.2.43<space|2spc><with|font-family|ss|signed-signed-div>\n    (signed denominator) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-260>>\n\n    <with|par-left|1tab|B.1.3<space|2spc><with|font-family|tt|language|verbatim|110101...:\n    >Jets for hash functions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-261>>\n\n    <with|par-left|2tab|B.1.3.1<space|2spc><with|font-family|tt|language|verbatim|1101010...:\n    >Jets for SHA-2 <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-262>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha-256-block>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-263><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha-256-iv>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-264><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha-256-ctx-8-add>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-265><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha-256-ctx-8-add-buffer-511>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-266><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha-256-ctx-8-finalize>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-267><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha-256-ctx-8-init>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-268><vspace|0.15fn>>\n\n    <with|par-left|2tab|B.1.3.2<space|2spc><with|font-family|tt|language|verbatim|110101100...:\n    >Jets for SHA-3 <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-269>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha3-zero>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-270><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha3-absorb>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-271><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha3-xor>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-272><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha3-permute>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-273><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha3-squeeze-256>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-274><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sha3-squeeze-512>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-275><vspace|0.15fn>>\n\n    <with|par-left|2tab|B.1.3.3<space|2spc><with|font-family|tt|language|verbatim|110101101...:\n    >Jets for RIPEMD <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-276>>\n\n    <with|par-left|2tab|B.1.3.4<space|2spc><with|font-family|tt|language|verbatim|110101110000...:\n    >Jets for SHA-1 (RESERVED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-277>>\n\n    <with|par-left|1tab|B.1.4<space|2spc><with|font-family|tt|language|verbatim|110110000...:\n    >Jets for elliptic curve functions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-278>>\n\n    <with|par-left|2tab|B.1.4.1<space|2spc><with|font-family|tt|language|verbatim|1101100000...:\n    >Jets for secp256k1 <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-279>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-point-verify>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-280><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-decompress>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-281><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-linear-verify>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-282><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-linear-combination>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-283><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scale>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-284><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-generate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-285><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-infinity>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-286><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-normalize>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-287><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-negate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-288><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-ge-negate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-289><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-double>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-290><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-add>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-291><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-ge-add-ex>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-292><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-ge-add>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-293><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-rescale>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-294><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-is-infinity>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-295><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-equiv>\n    <with|color|red|Does not exist in libsecp256k1>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-296><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-ge-equiv>\n    <with|color|red|Does not exist in libsecp256k1>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-297><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-x-equiv>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-298><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-y-is-odd>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-299><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-is-on-curve>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-300><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-ge-is-on-curve>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-301><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-normalize>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-302><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-negate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-303><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-add>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-304><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-square>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-305><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-multiply>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-306><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-multiply-lambda>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-307><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-invert>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-308><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-is-zero>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-309><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-ge-scale-lambda>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-310><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-gej-scale-lambda>\n    <with|color|red|Consider removing> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-311><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-scalar-split-lambda>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-312><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-short-scalar>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-313><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-normalize>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-314><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-negate>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-315><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-add>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-316><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-square>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-317><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-multiply>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-318><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-multiply-beta>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-319><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-invert>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-320><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-square-root>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-321><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-is-zero>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-322><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-is-odd>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-323><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-fe-is-quad>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-324><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-hash-to-curve>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-325><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-swu>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-326><vspace|0.15fn>>\n\n    <with|par-left|1tab|B.1.5<space|2spc><with|font-family|tt|language|verbatim|110110001...:\n    >Jets for digital signatures <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-327>>\n\n    <with|par-left|2tab|B.1.5.1<space|2spc><with|font-family|tt|language|verbatim|1101100010...:\n    >Jets for secp256k1 based digital signatures\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-328>>\n\n    <with|par-left|4tab|<with|font-family|ss|check-sig-verify>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-329><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|bip-0340-verify>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-330><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|bip-0340-challenge-iv>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-331><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-signature-unpack>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-332><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-pubkey-unpack>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-333><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-pubkey-unpack-neg>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-334><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|secp256k1-ecdsa>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-335><vspace|0.15fn>>\n\n    <with|par-left|1tab|B.1.6<space|2spc><with|font-family|tt|language|verbatim|110110010...:\n    >Jets for Simplicity <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-336>>\n\n    <with|par-left|2tab|B.1.6.1<space|2spc><with|font-family|tt|language|verbatim|11011000100...:\n    >Jets for tagged hash IVs <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-337>>\n\n    <with|par-left|4tab|<with|font-family|ss|iden-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-338><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|comp-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-339><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|unit-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-340><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|injl-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-341><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|injr-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-342><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|case-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-343><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|pair-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-344><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|take-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-345><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|drop-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-346><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|witness-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-347><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|disconnect-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-348><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|fail-commitment-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-349><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|signtaure-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-350><vspace|0.15fn>>\n\n    <with|par-left|4tab|<with|font-family|ss|sighash-tag>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-351><vspace|0.15fn>>\n\n    <with|par-left|1tab|B.1.7<space|2spc><with|font-family|tt|language|verbatim|110110011...:\n    >Jets for Bitcoin (without primitives)\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-352>>\n\n    <with|par-left|2tab|B.1.7.1<space|2spc><with|font-family|ss|parse-lock>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-353>>\n\n    <with|par-left|2tab|B.1.7.2<space|2spc><with|font-family|ss|parse-sequence>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-354>>\n\n    B.2<space|2spc><with|font-family|tt|language|verbatim|111...: >Bitcoin\n    Jets <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-355>\n\n    <with|par-left|1tab|B.2.1<space|2spc>Signature Hash Modes\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-356>>\n\n    <with|par-left|1tab|B.2.2<space|2spc>Time Locks\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-357>>\n\n    <with|par-left|2tab|B.2.2.1<space|2spc><with|font-family|ss|check-lock-height>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-358>>\n\n    <with|par-left|2tab|B.2.2.2<space|2spc><with|font-family|ss|check-lock-time>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-359>>\n\n    <with|par-left|2tab|B.2.2.3<space|2spc><with|font-family|ss|check-lock-distance>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-360>>\n\n    <with|par-left|2tab|B.2.2.4<space|2spc><with|font-family|ss|check-lock-duration>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-361>>\n\n    <with|par-left|2tab|B.2.2.5<space|2spc><with|font-family|ss|tx-height-lock>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-362>>\n\n    <with|par-left|2tab|B.2.2.6<space|2spc><with|font-family|ss|tx-time-lock>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-363>>\n\n    <with|par-left|2tab|B.2.2.7<space|2spc><with|font-family|ss|tx-distance-lock>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-364>>\n\n    <with|par-left|2tab|B.2.2.8<space|2spc><with|font-family|ss|tx-duration-lock>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-365>>\n\n    <with|par-left|2tab|B.2.2.9<space|2spc><with|font-family|ss|is-final>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-366>>\n\n    <with|par-left|1tab|B.2.3<space|2spc>Transaction\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-367>>\n\n    <with|par-left|2tab|B.2.3.1<space|2spc><with|font-family|ss|script-cmr>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-368>>\n\n    <with|par-left|2tab|B.2.3.2<space|2spc><with|font-family|ss|internal-key>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-369>>\n\n    <with|par-left|2tab|B.2.3.3<space|2spc><with|font-family|ss|current-index>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-370>>\n\n    <with|par-left|2tab|B.2.3.4<space|2spc><with|font-family|ss|num-inputs>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-371>>\n\n    <with|par-left|2tab|B.2.3.5<space|2spc><with|font-family|ss|num-outputs>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-372>>\n\n    <with|par-left|2tab|B.2.3.6<space|2spc><with|font-family|ss|lock-time>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-373>>\n\n    <with|par-left|2tab|B.2.3.7<space|2spc><with|font-family|ss|fee>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-374>>\n\n    <with|par-left|2tab|B.2.3.8<space|2spc><with|font-family|ss|output-value>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-375>>\n\n    <with|par-left|2tab|B.2.3.9<space|2spc><with|font-family|ss|output-script-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-376>>\n\n    <with|par-left|2tab|B.2.3.10<space|2spc><with|font-family|ss|total-output-value>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-377>>\n\n    <with|par-left|2tab|B.2.3.11<space|2spc><with|font-family|ss|current-prev-outpoint>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-378>>\n\n    <with|par-left|2tab|B.2.3.12<space|2spc><with|font-family|ss|current-value>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-379>>\n\n    <with|par-left|2tab|B.2.3.13<space|2spc><with|font-family|ss|current-script-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-380>>\n\n    <with|par-left|2tab|B.2.3.14<space|2spc><with|font-family|ss|current-sequence>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-381>>\n\n    <with|par-left|2tab|B.2.3.15<space|2spc><with|font-family|ss|current-annex-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-382>>\n\n    <with|par-left|2tab|B.2.3.16<space|2spc><with|font-family|ss|current-script-sig-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-383>>\n\n    <with|par-left|2tab|B.2.3.17<space|2spc><with|font-family|ss|input-prev-outpoint>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-384>>\n\n    <with|par-left|2tab|B.2.3.18<space|2spc><with|font-family|ss|input-value>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-385>>\n\n    <with|par-left|2tab|B.2.3.19<space|2spc><with|font-family|ss|input-script-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-386>>\n\n    <with|par-left|2tab|B.2.3.20<space|2spc><with|font-family|ss|input-sequence>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-387>>\n\n    <with|par-left|2tab|B.2.3.21<space|2spc><with|font-family|ss|input-annex-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-388>>\n\n    <with|par-left|2tab|B.2.3.22<space|2spc><with|font-family|ss|input-script-sig-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-389>>\n\n    <with|par-left|2tab|B.2.3.23<space|2spc><with|font-family|ss|total-input-value>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-390>>\n\n    <with|par-left|2tab|B.2.3.24<space|2spc><with|font-family|ss|tapleaf-version>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-391>>\n\n    <with|par-left|2tab|B.2.3.25<space|2spc><with|font-family|ss|tappath>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-392>>\n\n    <with|par-left|2tab|B.2.3.26<space|2spc><with|font-family|ss|version>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-393>>\n\n    B.3<space|2spc><with|font-family|tt|language|verbatim|111...: >Elements\n    Jets <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-394>\n\n    <with|par-left|1tab|B.3.1<space|2spc>Signature Hash Modes\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-395>>\n\n    <with|par-left|2tab|B.3.1.1<space|2spc><with|font-family|ss|sig-all-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-399>>\n\n    <with|par-left|2tab|B.3.1.2<space|2spc><with|font-family|ss|tx-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-400>>\n\n    <with|par-left|2tab|B.3.1.3<space|2spc><with|font-family|ss|tap-env-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-401>>\n\n    <with|par-left|2tab|B.3.1.4<space|2spc><with|font-family|ss|outputs-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-402>>\n\n    <with|par-left|2tab|B.3.1.5<space|2spc><with|font-family|ss|inputs-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-403>>\n\n    <with|par-left|2tab|B.3.1.6<space|2spc><with|font-family|ss|issuances-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-404>>\n\n    <with|par-left|2tab|B.3.1.7<space|2spc><with|font-family|ss|input-utxos-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-405>>\n\n    <with|par-left|2tab|B.3.1.8<space|2spc><with|font-family|ss|output-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-406>>\n\n    <with|par-left|2tab|B.3.1.9<space|2spc><with|font-family|ss|output-amounts-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-407>>\n\n    <with|par-left|2tab|B.3.1.10<space|2spc><with|font-family|ss|output-scripts-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-408>>\n\n    <with|par-left|2tab|B.3.1.11<space|2spc><with|font-family|ss|output-nonces-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-409>>\n\n    <with|par-left|2tab|B.3.1.12<space|2spc><with|font-family|ss|output-range-proofs-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-410>>\n\n    <with|par-left|2tab|B.3.1.13<space|2spc><with|font-family|ss|output-surjection-proofs-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-411>>\n\n    <with|par-left|2tab|B.3.1.14<space|2spc><with|font-family|ss|input-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-412>>\n\n    <with|par-left|2tab|B.3.1.15<space|2spc><with|font-family|ss|input-outpoints-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-413>>\n\n    <with|par-left|2tab|B.3.1.16<space|2spc><with|font-family|ss|input-sequences-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-414>>\n\n    <with|par-left|2tab|B.3.1.17<space|2spc><with|font-family|ss|input-annexes-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-415>>\n\n    <with|par-left|2tab|B.3.1.18<space|2spc><with|font-family|ss|input-script-sigs-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-416>>\n\n    <with|par-left|2tab|B.3.1.19<space|2spc><with|font-family|ss|issuance-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-417>>\n\n    <with|par-left|2tab|B.3.1.20<space|2spc><with|font-family|ss|issuance-asset-amounts-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-418>>\n\n    <with|par-left|2tab|B.3.1.21<space|2spc><with|font-family|ss|issuance-token-amounts-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-419>>\n\n    <with|par-left|2tab|B.3.1.22<space|2spc><with|font-family|ss|issuance-range-proofs-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-420>>\n\n    <with|par-left|2tab|B.3.1.23<space|2spc><with|font-family|ss|issuance-blinding-entropy-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-421>>\n\n    <with|par-left|2tab|B.3.1.24<space|2spc><with|font-family|ss|input-utxo-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-422>>\n\n    <with|par-left|2tab|B.3.1.25<space|2spc><with|font-family|ss|input-amounts-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-423>>\n\n    <with|par-left|2tab|B.3.1.26<space|2spc><with|font-family|ss|input-scripts-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-424>>\n\n    <with|par-left|2tab|B.3.1.27<space|2spc><with|font-family|ss|tap-leaf-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-425>>\n\n    <with|par-left|2tab|B.3.1.28<space|2spc><with|font-family|ss|tappath-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-426>>\n\n    <with|par-left|2tab|B.3.1.29<space|2spc><with|font-family|ss|outpoint-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-427>>\n\n    <with|par-left|2tab|B.3.1.30<space|2spc><with|font-family|ss|asset-amount-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-428>>\n\n    <with|par-left|2tab|B.3.1.31<space|2spc><with|font-family|ss|nonce-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-429>>\n\n    <with|par-left|2tab|B.3.1.32<space|2spc><with|font-family|ss|annex-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-430>>\n\n    <with|par-left|2tab|B.3.1.33<space|2spc><with|font-family|ss|build-tapleaf-simplicity>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-431>>\n\n    <with|par-left|2tab|B.3.1.34<space|2spc><with|font-family|ss|build-tapbranch>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-432>>\n\n    <with|par-left|1tab|B.3.2<space|2spc>Time Locks\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-433>>\n\n    <with|par-left|2tab|B.3.2.1<space|2spc><with|font-family|ss|check-lock-height>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-434>>\n\n    <with|par-left|2tab|B.3.2.2<space|2spc><with|font-family|ss|check-lock-time>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-435>>\n\n    <with|par-left|2tab|B.3.2.3<space|2spc><with|font-family|ss|check-lock-distance>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-436>>\n\n    <with|par-left|2tab|B.3.2.4<space|2spc><with|font-family|ss|check-lock-duration>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-437>>\n\n    <with|par-left|2tab|B.3.2.5<space|2spc><with|font-family|ss|tx-lock-height>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-438>>\n\n    <with|par-left|2tab|B.3.2.6<space|2spc><with|font-family|ss|tx-lock-time>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-439>>\n\n    <with|par-left|2tab|B.3.2.7<space|2spc><with|font-family|ss|tx-lock-distance>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-440>>\n\n    <with|par-left|2tab|B.3.2.8<space|2spc><with|font-family|ss|tx-lock-duration>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-441>>\n\n    <with|par-left|2tab|B.3.2.9<space|2spc><with|font-family|ss|tx-is-final>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-442>>\n\n    <with|par-left|1tab|B.3.3<space|2spc>Issuance\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-443>>\n\n    <with|par-left|2tab|B.3.3.1<space|2spc><with|font-family|ss|issuance>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-444>>\n\n    <with|par-left|2tab|B.3.3.2<space|2spc><with|font-family|ss|issuance-asset>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-445>>\n\n    <with|par-left|2tab|B.3.3.3<space|2spc><with|font-family|ss|issuance-token>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-446>>\n\n    <with|par-left|2tab|B.3.3.4<space|2spc><with|font-family|ss|issuance-entropy>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-447>>\n\n    <with|par-left|2tab|B.3.3.5<space|2spc><with|font-family|ss|calculate-issuance-entropy>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-448>>\n\n    <with|par-left|2tab|B.3.3.6<space|2spc><with|font-family|ss|calculate-asset>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-449>>\n\n    <with|par-left|2tab|B.3.3.7<space|2spc><with|font-family|ss|calculate-explicit-token>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-450>>\n\n    <with|par-left|2tab|B.3.3.8<space|2spc><with|font-family|ss|calculate-confidential-token>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-451>>\n\n    <with|par-left|1tab|B.3.4<space|2spc>Transaction\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-452>>\n\n    <with|par-left|2tab|B.3.4.1<space|2spc><with|font-family|ss|script-cmr>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-453>>\n\n    <with|par-left|2tab|B.3.4.2<space|2spc><with|font-family|ss|internal-key>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-454>>\n\n    <with|par-left|2tab|B.3.4.3<space|2spc><with|font-family|ss|current-index>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-455>>\n\n    <with|par-left|2tab|B.3.4.4<space|2spc><with|font-family|ss|num-inputs>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-456>>\n\n    <with|par-left|2tab|B.3.4.5<space|2spc><with|font-family|ss|num-outputs>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-457>>\n\n    <with|par-left|2tab|B.3.4.6<space|2spc><with|font-family|ss|lock-time>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-458>>\n\n    <with|par-left|2tab|B.3.4.7<space|2spc><with|font-family|ss|output-asset>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-459>>\n\n    <with|par-left|2tab|B.3.4.8<space|2spc><with|font-family|ss|output-amount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-460>>\n\n    <with|par-left|2tab|B.3.4.9<space|2spc><with|font-family|ss|output-nonce>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-461>>\n\n    <with|par-left|2tab|B.3.4.10<space|2spc><with|font-family|ss|output-script-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-462>>\n\n    <with|par-left|2tab|B.3.4.11<space|2spc><with|font-family|ss|output-null-datum>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-463>>\n\n    <with|par-left|2tab|B.3.4.12<space|2spc><with|font-family|ss|output-is-fee>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-464>>\n\n    <with|par-left|2tab|B.3.4.13<space|2spc><with|font-family|ss|output-surjection-proof>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-465>>\n\n    <with|par-left|2tab|B.3.4.14<space|2spc><with|font-family|ss|output-range-proof>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-466>>\n\n    <with|par-left|2tab|B.3.4.15<space|2spc><with|font-family|ss|total-fee>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-467>>\n\n    <with|par-left|2tab|B.3.4.16<space|2spc><with|font-family|ss|current-pegin>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-468>>\n\n    <with|par-left|2tab|B.3.4.17<space|2spc><with|font-family|ss|current-prev-outpoint>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-469>>\n\n    <with|par-left|2tab|B.3.4.18<space|2spc><with|font-family|ss|current-asset>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-470>>\n\n    <with|par-left|2tab|B.3.4.19<space|2spc><with|font-family|ss|current-amount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-471>>\n\n    <with|par-left|2tab|B.3.4.20<space|2spc><with|font-family|ss|current-script-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-472>>\n\n    <with|par-left|2tab|B.3.4.21<space|2spc><with|font-family|ss|current-sequence>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-473>>\n\n    <with|par-left|2tab|B.3.4.22<space|2spc><with|font-family|ss|current-annex-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-474>>\n\n    <with|par-left|2tab|B.3.4.23<space|2spc><with|font-family|ss|current-script-sig-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-475>>\n\n    <with|par-left|2tab|B.3.4.24<space|2spc><with|font-family|ss|current-reissuance-blinding>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-476>>\n\n    <with|par-left|2tab|B.3.4.25<space|2spc><with|font-family|ss|current-new-issuance-contract>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-477>>\n\n    <with|par-left|2tab|B.3.4.26<space|2spc><with|font-family|ss|current-reissuance-entropy>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-478>>\n\n    <with|par-left|2tab|B.3.4.27<space|2spc><with|font-family|ss|current-issuance-asset-amount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-479>>\n\n    <with|par-left|2tab|B.3.4.28<space|2spc><with|font-family|ss|current-issuance-token-amount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-480>>\n\n    <with|par-left|2tab|B.3.4.29<space|2spc><with|font-family|ss|current-issuance-asset-proof>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-481>>\n\n    <with|par-left|2tab|B.3.4.30<space|2spc><with|font-family|ss|current-issuance-token-proof>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-482>>\n\n    <with|par-left|2tab|B.3.4.31<space|2spc><with|font-family|ss|input-pegin>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-483>>\n\n    <with|par-left|2tab|B.3.4.32<space|2spc><with|font-family|ss|input-prev-outpoint>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-484>>\n\n    <with|par-left|2tab|B.3.4.33<space|2spc><with|font-family|ss|input-asset>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-485>>\n\n    <with|par-left|2tab|B.3.4.34<space|2spc><with|font-family|ss|input-amount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-486>>\n\n    <with|par-left|2tab|B.3.4.35<space|2spc><with|font-family|ss|input-script-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-487>>\n\n    <with|par-left|2tab|B.3.4.36<space|2spc><with|font-family|ss|input-sequence>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-488>>\n\n    <with|par-left|2tab|B.3.4.37<space|2spc><with|font-family|ss|input-annex-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-489>>\n\n    <with|par-left|2tab|B.3.4.38<space|2spc><with|font-family|ss|input-script-sig-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-490>>\n\n    <with|par-left|2tab|B.3.4.39<space|2spc><with|font-family|ss|reissuance-blinding>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-491>>\n\n    <with|par-left|2tab|B.3.4.40<space|2spc><with|font-family|ss|new-issuance-contract>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-492>>\n\n    <with|par-left|2tab|B.3.4.41<space|2spc><with|font-family|ss|reissuance-entropy>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-493>>\n\n    <with|par-left|2tab|B.3.4.42<space|2spc><with|font-family|ss|issuance-asset-amount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-494>>\n\n    <with|par-left|2tab|B.3.4.43<space|2spc><with|font-family|ss|issuance-token-amount>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-495>>\n\n    <with|par-left|2tab|B.3.4.44<space|2spc><with|font-family|ss|issuance-asset-proof>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-493>>\n\n    <with|par-left|2tab|B.3.4.45<space|2spc><with|font-family|ss|issuance-token-proof>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-494>>\n\n    <with|par-left|2tab|B.3.4.46<space|2spc><with|font-family|ss|tapleaf-version>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-495>>\n\n    <with|par-left|2tab|B.3.4.47<space|2spc><with|font-family|ss|tappath>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-496>>\n\n    <with|par-left|2tab|B.3.4.48<space|2spc><with|font-family|ss|version>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-497>>\n\n    <with|par-left|2tab|B.3.4.49<space|2spc><with|font-family|ss|genesis-block-hash>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-498>>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|Appendix\n    C<space|2spc>Alternative Serialization of Simplicity DAGs>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-499><vspace|0.5fn>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|Glossary>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-500><vspace|0.5fn>\n\n    <vspace*|1fn><with|font-series|bold|math-font-series|bold|Bibliography>\n    <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n    <no-break><pageref|auto-501><vspace|0.5fn>\n  </table-of-contents>\n\n  <chapter|Introduction>\n\n  <section|Bitcoin Script>\n\n  Bitcoin<cite|bitcoin> was the first protocol that used a blockchain to\n  build a distributed ledger that allows anyone to transact a cryptographic\n  currency with minimal risk of their transaction being reversed or undone,\n  and without relying on a trusted third party or central authority.\n  Typically access to funds are controlled by a cryptographic private key.\n  References to one or more of these funds, which may or may not have the\n  same private keys, are assembled into a data structure, called a\n  <dfn|transaction>, along with a set of one or more outputs which specify\n  which cryptographic public keys that will control each output. This\n  transaction data is signed with each private key for each input and added\n  to the transaction as <dfn|witness data>.\n\n  More precisely, the outputs are not necessarily controlled by a simple\n  single cryptographic key, rather each output is controlled by a small\n  program written in a language called <dfn|Bitcoin\n  Script><cite|satoshiScript|script>. Bitcoin Script is a stack-based\n  language with conditionals operations for control flow and no loops.\n  Bitcoin has stack manipulation operations, Boolean logic operations, and\n  very simple arithmetic operations (without even multiplication). It also\n  has some cryptographic operations that include cryptographic hash\n  functions, and digital signature verification operations. The\n  <verbatim|CHECKSIG> operation does an ECDSA digital signature verification\n  of transaction data.\n\n  A basic example of a Bitcoin Script program pushes an ECDSA public key onto\n  the stack, followed by a <verbatim|CHECKSIG> operation. This Script is part\n  of the output data within a transaction. In order to spend the funds held\n  by such an output, one builds a transaction with an input referencing this\n  output and adds a ECDSA signature to the transaction's witness data for the\n  input (called a ScriptSig). The witness data describes which part of the\n  transaction data is being signed (typically everything other than the\n  witness data itself) and has the signature.\n\n  To validate an input, the witness data is pushed onto the stack, and the\n  the program in the referenced output is executed. In our example above, the\n  program pushes a specific ECDSA public key onto the stack and then executes\n  <verbatim|CHECKSIG>. The <verbatim|CHECKSIG> operation pops the public key\n  and the signature data off the stack. Then it cryptographically hashes the\n  transaction data as specified by the signature data, including which input\n  is being signed, and verifies that the digital signature for that public\n  key is valid for that hashed data. Only if successful is the value\n  <verbatim|1> pushed back onto the stack. In order for a transaction to be\n  valid, all inputs are checked in this fashion, by pushing its associated\n  witness data onto the stack and then executing the program found in the\n  referenced output and requiring a non-zero value be left on the stack.\n\n  From this example, we see that there are three parts that go into checking\n  if a transaction's input is authorized to be spent:\n\n  <\\itemize-dot>\n    <item>A Bitcoin Script, which is contained in a transaction output.\n\n    <item>Witness data, for each transactions input.\n\n    <item>The rest of the transaction data, which includes things like output\n    amounts, version numbers, etc.\n  </itemize-dot>\n\n  All the data needed to validate a transaction is part of (or\n  cryptographically committed within) the transaction data. This means the\n  inputs can be validated independently of the state of the rest of the\n  blockchain, as far as Bitcoin Script is concerned.\n\n  In the above example, the Bitcoin Script is included into a transaction's\n  output, at what I call <dfn|commitment time>. The signature and transaction\n  data is specified later at what I call <dfn|redemption time>. That said,\n  the Bitcoin Script does not have to be entirely presented at commitment\n  time; it is acceptable to just commit to the Bitcoin Script's cryptographic\n  hash. Then, at redemption time, the script is revealed together with the\n  witness data and the rest of the transaction. In this case the program's\n  hash is verified to be equal to the hash committed in the output, and then\n  the witness data, and revealed Bitcoin Script are validated as before.\n  Bitcoin's <dfn|pay to script hash> (a.k.a. <dfn|P2SH>) follows this\n  modified procedure which makes it easy for users to specify complex Bitcoin\n  Scripts with to control funds while only needing to provide a single hash\n  value to their counterparty when they are first receiving their funds.\n\n  More complex scripts can be devised to do multi-signature, escrow,\n  hashed-timelock contracts, etc. However, because of the the limited\n  expressiveness of Bitcoin Script (e.g. no multiplication operation), only\n  so much can be programmed. Therefore, we want to design an alternative to\n  Bitcoin Script that will be more expressive, without sacrificing the good\n  properties of Bitcoin Script. We call this new language <dfn|Simplicity>.\n\n  <section|Simplicity's Design Goals>\n\n  Our goals for Simplicity include the following:\n\n  <\\itemize-dot>\n    <item>Create an expressive language that lets users build novel programs\n    and smart contracts.\n\n    <item>Enable useful static analysis to bound computational resource usage\n    of programs.\n\n    <item>Minimize bandwidth and storage requirements by allowing sharing of\n    expressions and pruning of unused expressions.\n\n    <item>Capture the computational environment entirely within a unit of\n    transaction.\n\n    <item>Provide formal semantics for reasoning with off-the-shelf\n    proof-assistant software.\n  </itemize-dot>\n\n  <subsection|Static Analysis>\n\n  In Bitcoin Script, static analysis lets us count how many operations there\n  are and, in particular, bound the maximum number of expensive operations,\n  such as signature validation, that could be performed. We can do this\n  because Bitcoin Script has no looping operations. In a transaction, if\n  Bitcoin Script is deemed to be potentially too expensive from this\n  analysis, the program is rejected at redemption time.\n\n  We want to support this same sort of static analysis in Simplicity. It lets\n  users determine, at commitment time, the worst case cost for redeeming the\n  program, for any possible witness inputs. At redemption time it allows, as\n  part of the consensus rules, to bound the cost of running programs prior to\n  execution. This serves as one method of avoiding denial of service attacks\n  in a blockchain protocol like Bitcoin.\n\n  <subsection|Pruning and Sharing>\n\n  As we saw before at commitment time we only need to specify a cryptographic\n  commitment to the program, and the program can be revealed at redemption\n  time. For more complex programs with multiple alternative branches, only\n  those branches that are actually going to be executed need to be revealed,\n  and the remainder of the program that is not executed for this particular\n  transaction can be excluded.\n\n  Using a technique called <dfn|Merkelized Abstract Syntax Trees> a.k.a.\n  <dfn|MAST>, we can commit to a Merkle root of a program's abstract syntax\n  tree. At redemption time, we can prune unused sub-expressions. Instead only\n  the Merkle root of the pruned branches need to be revealed in order to\n  verify that the program's Merkle root matches the root specified at\n  commitment time.\n\n  Because two identical subexpressions necessarily have the same Merkle root,\n  this procedure also lets us reduce program size by sharing these identical\n  subexpressions. In principle, this sharing could extend as wide as between\n  different program in different transactions.\n\n  <subsection|Formal Semantics>\n\n  Once a program has been committed to, it cannot be changed or updated\n  later. If a program has errors or security vulnerabilities, it can no\n  longer be fixed. Therefore, it is essential to get these program correct.\n  Fortunately these programs tend to be relatively small, and hence amenable\n  to formal analysis. We use the Coq proof assistant<nbsp><cite|Coq:manual>\n  to specify formal semantics of Simplicity. This allows us to both reason\n  about programs written in Simplicity, and also lets us reason about our\n  static analysis and Simplicity interpreters and prove that they are\n  correct.\n\n  While we specifically use the Coq proof assistant, the formal semantics of\n  Simplicity is designed to be easy enough to define in any proof assistant,\n  especially others based on dependent type theory.\n\n  <chapter|Type Theory Preliminaries><label|chapter:preliminaries>\n\n  <assign|maybe|<math|<math-up|S>>><assign|injl-long|<macro|A|B|x|<math|\\<sigma\\><rsup|\\<b-up-L\\>><rsub|<arg|A>,<arg|B>><arg|x>>>><assign|2|<with|font|Bbb*|2>><assign|injr-long|<macro|A|B|x|<math|\\<sigma\\><rsup|\\<b-up-R\\>><rsub|<arg|A>,<arg|B>><arg|x>>>><assign|1|<math|<with|font|Bbb*|1>>><assign|pair-long|<macro|x|y|A|B|<math|<around*|\\<langle\\>|<arg|x>,<arg|y>|\\<rangle\\>><rsub|<arg|A>,<arg|B>>>>><assign|injl|<macro|x|<math|\\<sigma\\><rsup|\\<b-up-L\\>><arg|x>>>><assign|injr|<macro|x|<math|\\<sigma\\><rsup|\\<b-up-R\\>><arg|x>>>>In\n  this document we endeavour to be precise about the semantics surrounding\n  the definition of the Simplicity language. To this end we use formal\n  language composed from a mix of mathematics, category theory, simple type\n  theory, and functional programming. While most all our notation is standard\n  in some community, readers may not be familiar with all of it. To that end,\n  and to ensure completeness of our semantics, we give detailed definitions\n  below of the common notation used throughout this document.\n\n  Our formal language is phrased in terms of simple type theory and readers\n  familiar with mathematics should not have too much trouble following it\n  since mathematics notation already borrows heavily from simple type theory.\n\n  To begin with we will assume that we have a notation of a type of natural\n  numbers, <math|\\<bbb-N\\>>, with <math|0\\<of\\>\\<bbb-N\\>>,\n  <math|1\\<of\\>\\<bbb-N\\>>, and so forth for all other numbers. Given natural\n  numbers <math|n\\<of\\>\\<bbb-N\\>> and <math|m\\<of\\>\\<bbb-N\\>>, we take it for\n  granted that we have\n\n  <\\itemize>\n    <item>notions of arithmetic including <math|n+m>, <math|n*m>, and\n    <math|n<rsup|m>>;\n\n    <item>comparison operations including <math|n\\<less\\>m>,\n    <math|n\\<leq\\>m>, <math|n\\<geq\\>m>, and <math|n\\<gtr\\>m>;\n\n    <item>when <math|n\\<geq\\>m> then the difference <math|n-m> is a natural\n    number.\n  </itemize>\n\n  We will partake in several notational conveniences. We will generally elide\n  parentheses when the value they surround already has has its own brackets.\n  For example,\n\n  <\\itemize>\n    <item>we will write <math|f<around*|\\<langle\\>|x,y|\\<rangle\\>>> instead\n    of <math|f<around*|(|<around*|\\<langle\\>|x,y|\\<rangle\\>>|)>>;\n\n    <item>we will write <math|f<math-tt|[cafe]>> instead of\n    <math|f<around*|(|<math-tt|[cafe]>|)>>;\n\n    <item>we will write <math|l<around*|\\<lceil\\>|n|\\<rceil\\>>> instead of\n    <math|l<around*|[|<around*|\\<lceil\\>|n|\\<rceil\\>>|]>>.\n  </itemize>\n\n  As you will see, we have a lot of notation with type annotations that are\n  used to fully disambiguate them. Often these type annotations can be\n  completely inferred from the surrounding context and accordingly we will\n  usually omit these annotations to reduce notational clutter and reserve the\n  annotated versions for cases where the annotations are ambiguous or where\n  we want to draw specific attention to them.\n\n  <section|Algebraic Types>\n\n  We write the primitive unit type as <math|<value|1>>. The unique value of\n  the unit type is <math|<around*|\\<langle\\>||\\<rangle\\>>\\<of\\><value|1>>.\n\n  Given types <math|A> and <math|B>, then <math|A+B>, <math|A\\<times\\>B>, and\n  <math|A\\<rightarrow\\>B> are the sum type (also known as disjoint union\n  type), the (Cartesian) product type, and the function type respectively.\n  Given <math|a\\<of\\>A> and <math|b\\<of\\>B> we denote values of the sum and\n  product types as\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<injl-long|A|B|<around*|(|a|)>>>|<cell|:>|A+B>|<row|<cell|<injr-long|A|B|<around*|(|b|)>>>|<cell|:>|<cell|A+B>>|<row|<cell|<around*|\\<langle\\>|a,b|\\<rangle\\>><rsub|A,B>>|<cell|:>|<cell|A\\<times\\>B>>>>\n  </eqnarray*>\n\n  We will usually omit the annotations, writing\n  <math|<injl|<around*|(|a|)>>>, <math|<injr|<around*|(|b|)>>>, and\n  <math|<around*|\\<langle\\>|a,b|\\<rangle\\>>>.\n\n  We write an expression of type <math|A\\<rightarrow\\>B> using lambda\n  notation:\n\n  <\\equation*>\n    \\<lambda\\>x:A\\<point\\>e\\<of\\>A\\<rightarrow\\>B\n  </equation*>\n\n  where <math|e> is an expression with <math|x\\<of\\>A> as a bound variable\n  (that may occur or zero or more times in <math|e>). Given\n  <math|f\\<of\\>A\\<rightarrow\\>B> and <math|a\\<of\\>A>, then ordinary function\n  application retrieves a value of type <math|B>:\n\n  <\\equation*>\n    f<around*|(|a|)>\\<of\\>B\n  </equation*>\n\n  The type operator <math|\\<rightarrow\\>> is right associative:\n\n  <\\equation*>\n    A\\<rightarrow\\>B\\<rightarrow\\>C=A\\<rightarrow\\><around*|(|B\\<rightarrow\\>C|)>\n  </equation*>\n\n  \\;\n\n  We define the identity function <math|id<rsub|A>\\<of\\>A\\<rightarrow\\>A> as\n\n  <\\equation*>\n    id<rsub|A>\\<assign\\>\\<lambda\\>a:A\\<point\\>a\n  </equation*>\n\n  and given <math|f\\<of\\>A\\<rightarrow\\>B> and <math|g\\<of\\>B\\<rightarrow\\>C>\n  we define their composition <math|g\\<circ\\>f\\<of\\>A\\<rightarrow\\>C> as\n\n  <\\equation*>\n    g\\<circ\\>f\\<assign\\>\\<lambda\\>a:A\\<point\\>g<around*|(|f<around*|(|a|)>|)><text|.>\n  </equation*>\n\n  \\;\n\n  We may also write function definitions in \\Papplication\\Q style where we\n  implicitly define a function in terms of function application. In this\n  style we would write the above definitions of the identity function and\n  function composition as\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|id<rsub|A><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|a>>|<row|<cell|<around*|(|g\\<circ\\>f|)><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|g<around*|(|f<around*|(|a|)>|)><text|.>>>>>\n  </eqnarray*>\n\n  To access components of sum and product types we define functions using\n  pattern matching in application style. For example given <math|a\\<of\\>A>\n  and <math|b\\<of\\>B>, we define the first and second projection functions as\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<pi\\><rsup|A,B><rsub|1><around*|\\<langle\\>|a,b|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|a>>|<row|<cell|\\<pi\\><rsup|A,B><rsub|2><around*|\\<langle\\>|a,b|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|b>>>>\n  </eqnarray*>\n\n  and given <math|f\\<of\\>A\\<rightarrow\\>C> and\n  <math|g\\<of\\>B\\<rightarrow\\>C>, we define their copair\n  <math|<around*|[|f,g|]>\\<of\\>A+B\\<rightarrow\\>C> by the pair of equations\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|[|f,g|]><around*|(|<injl|<around*|(|a|)>>|)>>|<cell|\\<assign\\>>|<cell|f<around*|(|a|)>>>|<row|<cell|<around*|[|f,g|]><around*|(|<injr|<around*|(|b|)>>|)>>|<cell|\\<assign\\>>|<cell|g<around*|(|b|)><text|.>>>>>\n  </eqnarray*>\n\n  \\;\n\n  When we take a product type with itself, we form a square and denote it by\n  exponential notation accordingly:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|A<rsup|2>>|<cell|\\<assign\\>>|<cell|A\\<times\\>A>>>>\n  </eqnarray*>\n\n  When we take repeated squares, we denote this by exponential notation with\n  successively larger powers of two:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|A<rsup|1>>|<cell|\\<assign\\>>|<cell|A>>|<row|<cell|A<rsup|2>>|<cell|\\<assign\\>>|<cell|A<rsup|1>\\<times\\>A<rsup|1>>>|<row|<cell|A<rsup|4>>|<cell|\\<assign\\>>|<cell|A<rsup|2>\\<times\\>A<rsup|2>>>|<row|<cell|>|<cell|\\<vdots\\>>|<cell|>>|<row|<cell|A<rsup|2<rsup|1+n>>>|<cell|\\<assign\\>>|<cell|A<rsup|2<rsup|n>>\\<times\\>A<rsup|2<rsup|n>>>>|<row|<cell|>|<cell|\\<vdots\\>>|<cell|>>>>\n  </eqnarray*>\n\n  We define the diagonal function returning a square type,\n  <math|\\<Delta\\><rsub|A>\\<of\\>A\\<rightarrow\\>A<rsup|2>>:\n\n  <\\equation*>\n    \\<Delta\\><rsub|A><around*|(|a|)>\\<assign\\><around*|\\<langle\\>|a,a|\\<rangle\\>>\n  </equation*>\n\n  We define <2> as the Boolean type (or Bit type):\n\n  <\\equation*>\n    <2>\\<assign\\><1>+<1>\n  </equation*>\n\n  We name the two values of this type, <math|<math-tt|0><rsub|<2>>\\<of\\><2>>\n  and <math|<math-tt|1><rsub|<2>>\\<of\\><2>>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<math-tt|0><rsub|<2>>>|<cell|\\<assign\\>>|<cell|<injl-long|<value|1>|<value|1>|<around*|\\<langle\\>||\\<rangle\\>>>>>|<row|<cell|<math-tt|1><rsub|<2>>>|<cell|\\<assign\\>>|<cell|<injr-long|<value|1>|<value|1>|<around*|\\<langle\\>||\\<rangle\\>>>>>>>\n  </eqnarray*>\n\n  <subsection|Records>\n\n  Record types are essentially the same as product types, but with fancy\n  syntax. We write a record type enclosed by curly braces.\n\n  <\\equation*>\n    <around*|{|<tabular|<tformat|<cwith|3|3|1|1|cell-halign|c>|<table|<row|<cell|field<rsub|1>\\<of\\>A<rsub|1>>>|<row|<cell|field<rsub|2>\\<of\\>A<rsub|2>>>|<row|<cell|\\<vdots\\>>>|<row|<cell|field<rsub|n>\\<of\\>A<rsub|n>>>>>>|}>\n  </equation*>\n\n  If <math|R> is the above record type and <math|r\\<of\\>R>, then we denote\n  access the component of the record as follows.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|>|<cell|r<around*|[|field<rsub|1>|]>\\<of\\>A<rsub|1>>|<cell|>>|<row|<cell|>|<cell|r<around*|[|field<rsub|2>|]>\\<of\\>A<rsub|2>>|<cell|>>|<row|<cell|>|<cell|\\<vdots\\>>|<cell|>>|<row|<cell|>|<cell|r<around*|[|field<rsub|n>|]>\\<of\\>A<rsub|n>>|<cell|>>>>\n  </eqnarray*>\n\n  To construct a record value given values\n  <math|a<rsub|1>\\<of\\>A<rsub|1>,\\<ldots\\>,a<rsub|n>\\<of\\>A<rsub|n>>, we\n  again use a curly brace notation.\n\n  <\\equation*>\n    <around*|{|<tabular|<tformat|<cwith|3|3|1|1|cell-halign|c>|<table|<row|<cell|field<rsub|1>\\<assign\\>a<rsub|1>>>|<row|<cell|field<rsub|2>\\<assign\\>a<rsub|2>>>|<row|<cell|\\<vdots\\>>>|<row|<cell|field<rsub|n>\\<assign\\>a<rsub|n>>>>>>|}>:<around*|{|<tabular|<tformat|<cwith|3|3|1|1|cell-halign|c>|<table|<row|<cell|field<rsub|1>\\<of\\>A<rsub|1>>>|<row|<cell|field<rsub|2>\\<of\\>A<rsub|2>>>|<row|<cell|\\<vdots\\>>>|<row|<cell|field<rsub|n>\\<of\\>A<rsub|n>>>>>>|}>\n  </equation*>\n\n  <section|Functors>\n\n  A functor <math|\\<cal-F\\>> is a type parameterized by a free type variable,\n  such that whenever <math|A> is a type then <math|\\<cal-F\\><around*|(|A|)>>\n  is a type. Given a function <math|f\\<of\\>A\\<rightarrow\\>B>, is it often\n  possible to define a new function <math|\\<cal-F\\>f\\<of\\>\\<cal-F\\>A\\<rightarrow\\>\\<cal-F\\>B>\n  such that for all <math|f\\<of\\>A\\<rightarrow\\>B> and\n  <math|g\\<of\\>B\\<rightarrow\\>C> we have\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<cal-F\\>id<rsub|A>>|<cell|=>|<cell|id<rsub|\\<cal-F\\>A>>>|<row|<cell|\\<cal-F\\><around*|(|f\\<circ\\>g|)>>|<cell|=>|<cell|\\<cal-F\\>f\\<circ\\>\\<cal-F\\>g>>>>\n  </eqnarray*>\n\n  When this happens we call such a functor a <dfn|covariant functor>. In this\n  document all our functors will be covariant functors, and we will simply\n  call them <dfn|functor>s.\n\n  <subsection|Option Functor>\n\n  By way of a useful example, we define <maybe> to be the option functor,\n  also known as the maybe functor,\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<maybe>A>|<cell|\\<assign\\>>|<cell|<value|1>+A>>|<row|<cell|<maybe>f<around*|(|<injl-long|<value|1>|A|<around*|\\<langle\\>||\\<rangle\\>>>|)>>|<cell|\\<assign\\>>|<cell|<injl-long|<value|1>|B|<around*|\\<langle\\>||\\<rangle\\>>>>>|<row|<cell|<maybe>f<around*|(|<injr-long|<value|1>|A|<around*|(|a|)>>|)>>|<cell|\\<assign\\>>|<cell|<injr-long|<value|1>|B|<around*|(|f<around*|(|a|)>|)>>>>>>\n  </eqnarray*>\n\n  where <math|f\\<of\\>A\\<rightarrow\\>B>.\n\n  We define special notation for values of \\Poptional\\Q types\n  <math|<maybe>A>,\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<emptyset\\><rsub|A><rsup|<maybe>>>|<cell|\\<assign\\>>|<cell|<injl-long|<value|1>|A|<around*|\\<langle\\>||\\<rangle\\>>>\\<of\\><maybe>A>>|<row|<cell|\\<eta\\><rsup|S><rsub|A><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|<injr-long|<value|1>|A|<around*|(|a|)>>\\<of\\><maybe>A>>>>\n  </eqnarray*>\n\n  where <math|a\\<of\\>A>.\n\n  This notation is designed to coincide with the monadic notation that we\n  will define in Section<nbsp><reference|ss:MonadZero>.\n\n  <subsection|List Functors><label|ss:ListFunctors>\n\n  Given a type <math|A>, we recursively define the list functor\n  <math|A<rsup|\\<ast\\>>> and the non-empty list functor <math|A<rsup|+>>,\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|A<rsup|\\<ast\\>>>|<cell|\\<assign\\>>|<cell|<maybe>A<rsup|+>>>|<row|<cell|A<rsup|+>>|<cell|\\<assign\\>>|<cell|A\\<times\\>A<rsup|\\<ast\\>>>>|<row|<cell|f<rsup|\\<ast\\>><around*|(|\\<emptyset\\><rsup|<maybe>><rsub|A<rsup|+>>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><rsub|B<rsup|+>>>>|<row|<cell|f<rsup|\\<ast\\>><around*|(|\\<eta\\><rsup|<maybe>><rsub|A<rsup|+>><around*|(|l|)>|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|<maybe>><rsub|B<rsup|+>><around*|(|f<rsup|+><around*|(|l|)>|)>>>|<row|<cell|f<rsup|+><around*|\\<langle\\>|a,l|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|f<around*|(|a|)>,f<rsup|\\<ast\\>><around*|(|l|)>|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  where <math|f\\<of\\>A\\<rightarrow\\>B>.\n\n  We leave implicit the fact that these are inductive types and recursive\n  definitions over them need to be checked that they are well-founded.\n  Suffice to say that the definitions in this section are all well-defined.\n\n  Given a list <math|l\\<of\\>A<rsup|\\<ast\\>>> or a non-empty list\n  <math|l\\<of\\>A<rsup|+>>, we define <math|<around*|\\||l|\\|>\\<of\\>\\<bbb-N\\>>\n  to be its length.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\||\\<emptyset\\><rsup|<maybe>><rsub|A<rsup|+>>|\\|>>|<cell|\\<assign\\>>|<cell|0>>|<row|<cell|<around*|\\||\\<eta\\><rsup|<maybe>><rsub|A<rsup|+>><around*|(|l|)>|\\|>>|<cell|\\<assign\\>>|<cell|<around*|\\||l|\\|>>>|<row|<cell|<around*|\\||<around*|\\<langle\\>|a,l|\\<rangle\\>>|\\|>>|<cell|\\<assign\\>>|<cell|1+<around*|\\||l|\\|>>>>>\n  </eqnarray*>\n\n  \\;\n\n  To retrieve an element we define lookup functions for lists and non-empty\n  lists. Given a natural number <math|n\\<of\\>\\<bbb-N\\>> and either list\n  <math|l\\<of\\>A<rsup|\\<ast\\>>> or a non-empty list <math|l\\<of\\>A<rsup|+>>,\n  in both cases we define <math|l<around*|[|n|]>\\<of\\><maybe>A> to lookup the\n  <math|n>th value in <math|l>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|(|\\<emptyset\\><rsup|<maybe>><rsub|A<rsup|+>>|)><around*|[|n|]>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><rsub|A>>>|<row|<cell|<around*|(|\\<eta\\><rsup|<maybe>><rsub|A<rsup|+>><around*|(|l|)>|)><around*|[|n|]>>|<cell|\\<assign\\>>|<cell|l<around*|[|n|]>>>|<row|<cell|<around*|\\<langle\\>|a,l|\\<rangle\\>><around*|[|0|]>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|<maybe>><rsub|A><around*|(|a|)>>>|<row|<cell|<around*|\\<langle\\>|a,l|\\<rangle\\>><around*|[|1+n|]>>|<cell|\\<assign\\>>|<cell|l<around*|[|n|]>>>>>\n  </eqnarray*>\n\n  Naturally, the lookup returns <math|\\<emptyset\\>> when the index goes\n  beyond the end of the list.\n\n  <\\lemma>\n    For all <math|n\\<of\\>\\<bbb-N\\>> and <math|l\\<of\\>A<rsup|\\<ast\\>>> or\n    <math|l\\<of\\>A<rsup|+>>, <math|l<around*|[|n|]>=\\<emptyset\\>> if and only\n    if <math|<around*|\\||l|\\|>\\<leq\\>n>.\n  </lemma>\n\n  Given a list <math|l\\<of\\>A<rsup|\\<ast\\>>> (or a non-empty list\n  <math|l\\<of\\>A<rsup|+>>), we define <math|indexed<around*|(|l|)>\\<of\\><around*|(|\\<bbb-N\\>\\<times\\>A|)><rsup|*\\<ast\\>>>\n  (and <math|indexed<around*|(|l|)>\\<of\\><around*|(|\\<bbb-N\\>\\<times\\>A|)><rsup|*+>>\n  respectively) as a list of elements paired with its index,\n\n  <\\equation*>\n    indexed<around*|(|l|)>\\<assign\\>indexedRec<around*|(|0,l|)>\n  </equation*>\n\n  where\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|indexedRec<around*|(|i,\\<emptyset\\><rsup|<maybe>><rsub|A<rsup|+>>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><rsub|<around*|(|\\<bbb-N\\>\\<times\\>A|)><rsup|+>>>>|<row|<cell|indexedRec<around*|(|i,\\<eta\\><rsup|<maybe>><rsub|A<rsup|+>><around*|(|l|)>|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|<maybe>><rsub|<around*|(|\\<bbb-N\\>\\<times\\>A|)><rsup|+>><around*|(|indexedRec<around*|(|i,l|)>|)>>>|<row|<cell|indexedRec<around*|(|i,<around*|\\<langle\\>|a,l|\\<rangle\\>>|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|<around*|\\<langle\\>|i,a|\\<rangle\\>>,indexedRec<around*|(|1+i,l|)>|\\<rangle\\>><text|.>>>>>\n  </eqnarray*>\n\n  <\\lemma>\n    For all <math|i\\<of\\>\\<bbb-N\\>> and <math|l\\<of\\>A<rsup|\\<ast\\>>> or\n    <math|l\\<of\\>A<rsup|\\<upl\\>>>, <math|indexed<around*|(|l|)><around*|[|i|]>=<maybe><around*|(|\\<lambda\\>a.<around*|\\<langle\\>|i,a|\\<rangle\\>>|)><around*|(|l<around*|[|i|]>|)>>.\n  </lemma>\n\n  The fold operation on a list is a most general way of consuming a list.\n  Given a type <math|A> with a monoid <math|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>>\n  over that type, we define <math|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|l|)>>\n  for both lists <math|l\\<of\\>A<rsup|\\<ast\\>>> and non-empty lists\n  <math|l\\<of\\>A<rsup|+>>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|\\<emptyset\\><rsup|<maybe>><rsub|A<rsup|+>>|)>>|<cell|\\<assign\\>>|<cell|e>>|<row|<cell|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|\\<eta\\><rsup|<maybe>><rsub|A<rsup|+>><around*|(|l|)>|)>>|<cell|\\<assign\\>>|<cell|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|l|)>>>|<row|<cell|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|\\<langle\\>|a,l|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|a\\<odot\\>fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|l|)>>>>>\n  </eqnarray*>\n\n  Often we will write <math|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|l|)>>\n  as simply <math|fold<rsup|\\<odot\\>><around*|(|l|)>> since usually both the\n  type and the unit for a monoid is can be inferred from just its binary\n  operation.\n\n  For lists, we provide special notations for its two effective constructors\n  called <dfn|nil>, <math|\\<epsilon\\><rsub|A>\\<of\\>A<rsup|\\<ast\\>>>, and\n  <dfn|cons>, <math|a\\<blacktriangleleft\\>l\\<of\\>A<rsup|\\<ast\\>>>\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<epsilon\\><rsub|A>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><rsub|A<rsup|+>>>>|<row|<cell|a\\<blacktriangleleft\\>l>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|<maybe>><rsub|A<rsup|+>><around*|\\<langle\\>|a,l|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  where <math|a\\<of\\>A> and <math|l\\<of\\>A<rsup|\\<ast\\>>>. As a consequence\n  the following equations hold.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|\\<epsilon\\><rsub|A>|)>>|<cell|=>|<cell|e>>|<row|<cell|fold<rsup|<around*|\\<langle\\>|\\<odot\\>,e|\\<rangle\\>>><rsub|A><around*|(|a<rsub|0>\\<blacktriangleleft\\>a<rsub|1>\\<blacktriangleleft\\>\\<ldots\\>\\<blacktriangleleft\\>a<rsub|n>\\<blacktriangleleft\\>\\<epsilon\\><rsub|A>|)>>|<cell|=>|<cell|a<rsub|0>\\<odot\\>a<rsub|1>\\<odot\\>\\<ldots\\>\\<odot\\>a<rsub|n>>>>>\n  </eqnarray*>\n\n  For example, given two lists <math|l<rsub|1>,l<rsub|2>\\<of\\>A<rsup|\\<ast\\>>>,\n  we define the append operation <math|l<rsub|1>\\<cdummy\\>l<rsub|2>:A<rsup|\\<ast\\>>>\n  using nil and cons\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<epsilon\\>\\<cdummy\\>l>|<cell|\\<assign\\>>|<cell|l>>|<row|<around*|(|a\\<blacktriangleleft\\>l<rsub|1>|)>\\<cdummy\\>l<rsub|2>|<cell|\\<assign\\>>|<cell|a\\<blacktriangleleft\\><around*|(|l<rsub|1>\\<cdummy\\>l<rsub|2>|)>>>>>\n  </eqnarray*>\n\n  The append operation together with nil,\n  <math|<around*|\\<langle\\>|\\<cdummy\\>,\\<epsilon\\>|\\<rangle\\>>>, forms a\n  monoid over <math|A<rsup|\\<ast\\>>>. This allows us to define the\n  concatenation function <math|\\<mu\\><rsup|\\<ast\\>><rsub|A>\\<of\\>A<rsup|\\<ast\\>\\<ast\\>>\\<rightarrow\\>A<rsup|\\<ast\\>>>\n\n  <\\equation*>\n    \\<mu\\><rsup|\\<ast\\>><rsub|A><around*|(|l|)>\\<assign\\>fold<rsub|A<rsup|\\<ast\\>>><rsup|<around*|\\<langle\\>|\\<cdummy\\>,\\<epsilon\\>|\\<rangle\\>>><around*|(|l|)>\n  </equation*>\n\n  Now it is only natural to define a function that generates a list with one\n  element, <math|\\<eta\\><rsup|\\<ast\\>><rsub|A>\\<of\\>A\\<rightarrow\\>A<rsup|\\<ast\\>>>.\n\n  <\\equation*>\n    \\<eta\\><rsup|\\<ast\\>><rsub|A><around*|(|a|)>\\<assign\\>a\\<blacktriangleleft\\>\\<epsilon\\>\n  </equation*>\n\n  We write replication of a list, <math|l\\<of\\>A<rsup|\\<ast\\>>> as\n  exponentiation:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|l<rsup|0>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|l<rsup|1+n>>|<cell|\\<assign\\>>|<cell|l\\<cdummy\\>l<rsup|n>>>>>\n  </eqnarray*>\n\n  We also define quantifier notation for elements of lists. Given a list\n  <math|l\\<of\\>A<rsup|\\<ast\\>>>, and a predicate <math|P> over <math|A>, we\n  define\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<forall\\>a\\<in\\>l\\<point\\>P<around*|(|a|)>>|<cell|\\<assign\\>>|<cell|fold<rsup|\\<wedge\\>><around*|(|P<rsup|\\<ast\\>><around*|(|l|)>|)>>>|<row|<cell|\\<exists\\>a\\<in\\>l\\<point\\>P<around*|(|a|)>>|<cell|\\<assign\\>>|<cell|fold<rsup|\\<vee\\>><around*|(|P<rsup|\\<ast\\>><around*|(|l|)>|)>>>>>\n  </eqnarray*>\n\n  and similarly for a non-empty list <math|l\\<of\\>A<rsup|+>>:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<forall\\>a\\<in\\>l\\<point\\>P<around*|(|a|)>>|<cell|\\<assign\\>>|<cell|fold<rsup|\\<wedge\\>><around*|(|P<rsup|+><around*|(|l|)>|)>>>|<row|<cell|\\<exists\\>a\\<in\\>l\\<point\\>P<around*|(|a|)>>|<cell|\\<assign\\>>|<cell|fold<rsup|\\<vee\\>><around*|(|P<rsup|+><around*|(|l|)>|)>>>>>\n  </eqnarray*>\n\n  <subsection|Buffers>\n\n  A buffer is defined as a bounded list. \\ We recursively define a buffer up\n  to (but excluding) <math|2<rsup|n>> as\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|A<rsup|\\<less\\>2>>|<cell|\\<assign\\>>|<cell|<maybe>A>>|<row|<cell|A<rsup|\\<less\\>4>>|<cell|\\<assign\\>>|<cell|<maybe><around*|(|A<rsup|2>|)>\\<times\\>A<rsup|\\<less\\>2>>>|<row|<cell|>|<cell|\\<vdots\\>>|<cell|>>|<row|<cell|A<rsup|\\<less\\>2<rsup|1+n>>>|<cell|\\<assign\\>>|<cell|<maybe><around*|(|A<rsup|2<rsup|n>>|)>\\<times\\>A<rsup|\\<less\\>2<rsup|n>>>>|<row|<cell|>|<cell|\\<vdots\\>>|<cell|>>>>\n  </eqnarray*>\n\n  Notice that the type for buffers is isomorphic to a finite geometric series\n  of tuples:\n\n  <\\equation*>\n    <tabular|<tformat|<cwith|2|2|2|2|cell-hyphen|n>|<cwith|2|2|2|2|cell-halign|c>|<table|<row|<cell|A<rsup|\\<less\\>2<rsup|n>>\\<asymp\\>1+A+<around*|(|A\\<times\\>A|)>+<around*|(|A\\<times\\>A\\<times\\>A|)>+\\<ldots\\>+>|<cell|<wide*|<around*|(|A\\<times\\>\\<ldots\\>*\\<times\\>A|)>|\\<wide-underbrace\\>>>>|<row|<cell|>|<cell|2<rsup|n>-1\n    times>>>>>\\<noplus\\>\n  </equation*>\n\n  <section|Monads>\n\n  A monad, <math|\\<cal-M\\>>, is a functor that comes with two functions\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<eta\\><rsup|\\<cal-M\\>><rsub|A>>|<cell|:>|<cell|A\\<rightarrow\\>\\<cal-M\\>*A>>|<row|<cell|\\<mu\\><rsup|\\<cal-M\\>><rsub|A>>|<cell|:>|<cell|\\<cal-M\\>*\\<cal-M\\>*A\\<rightarrow\\>\\<cal-M\\>*A>>>>\n  </eqnarray*>\n\n  that are both natural transformations, meaning for all\n  <math|f\\<of\\>A\\<rightarrow\\>B>,\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<cal-M\\>*f\\<circ\\>\\<eta\\><rsup|\\<cal-M\\>><rsub|A>>|<cell|=>|<cell|\\<eta\\><rsup|\\<cal-M\\>><rsub|B>\\<circ\\>f>>|<row|<cell|\\<cal-M\\>*f\\<circ\\>\\<mu\\><rsup|\\<cal-M\\>><rsub|A>>|<cell|=>|<cell|\\<mu\\><rsup|\\<cal-M\\>><rsub|B>\\<circ\\>\\<cal-M\\>*\\<cal-M\\>*f>>>>\n  </eqnarray*>\n\n  The <math|\\<eta\\><rsup|\\<cal-M\\>><rsub|A>> and\n  <math|\\<mu\\><rsup|\\<cal-M\\>><rsub|A>> functions are required to satisfy\n  certain coherence laws. These monad laws are best presented using Kleisli\n  composition.\n\n  <subsection|Kleisli Morphisms>\n\n  Functions from <math|A> to <math|B> that produce side-effects can often be\n  represented by Kleisli morphisms, which are (pure) functions\n  <math|A\\<rightarrow\\>\\<cal-M\\>*B>, where <math|\\<cal-M\\>> is a monad that\n  captures the particular side-effects of the function in the result. A\n  function <math|f\\<of\\>A\\<rightarrow\\>\\<cal-M\\>*B> is called a <dfn|Kleisli\n  morphism> from <math|A> to <math|B>. For Kleisli morphisms\n  <math|f\\<of\\>A\\<rightarrow\\>\\<cal-M\\>*B> and\n  <math|g\\<of\\>B\\<rightarrow\\>\\<cal-M\\>*C> we define the <dfn|Kleisli\n  composition> of them as <math|g<above|\\<leftarrowtail\\>|<very-small|\\<cal-M\\>>>f\\<of\\>A\\<rightarrow\\>\\<cal-M\\>*C>\n  where\n\n  <\\equation*>\n    g<above|\\<leftarrowtail\\>|<very-small|\\<cal-M\\>>>f\\<assign\\>\\<mu\\><rsup|\\<cal-M\\>>\\<circ\\>\\<cal-M\\>*g\\<circ\\>f\n  </equation*>\n\n  We will usually omit the annotation.\n\n  The monad laws can be presented in terms of Kleisli composition. For all\n  <math|f\\<of\\>A\\<rightarrow\\>\\<cal-M\\>*B>,\n  <math|g\\<of\\>B\\<rightarrow\\>\\<cal-M\\>*C>, and\n  <math|h\\<of\\>C\\<rightarrow\\>\\<cal-M\\>*D>, we require that Kleisli\n  composition satisfy the laws of composition with\n  <math|\\<eta\\><rsup|\\<cal-M\\>>> as its identity:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|f\\<leftarrowtail\\>\\<eta\\><rsup|\\<cal-M\\>><rsub|A>>|<cell|=>|<cell|f>>|<row|<cell|\\<eta\\><rsup|\\<cal-M\\>><rsub|B>\\<leftarrowtail\\>f>|<cell|=>|<cell|f>>|<row|<cell|<around*|(|h\\<leftarrowtail\\>g|)>\\<leftarrowtail\\>f>|<cell|=>|<cell|h\\<leftarrowtail\\><around*|(|g\\<leftarrowtail\\>f|)>>>>>\n  </eqnarray*>\n\n  <subsection|Cartesian Strength>\n\n  In addition to Kleisli composition we define a series of helper functions\n  for manipulating products.\n\n  \\;\n\n  <center|<tabular|<tformat|<cwith|1|-1|1|1|cell-halign|r>|<cwith|1|-1|2|2|cell-hyphen|n>|<cwith|1|-1|2|2|cell-lsep|0>|<cwith|1|-1|1|1|cell-rsep|0>|<table|<row|<cell|<math|\\<beta\\><rsup|\\<cal-M\\>><rsub|A,B>>>|<cell|<math|:A\\<times\\>\\<cal-M\\>*B\\<rightarrow\\>\\<cal-M\\><around*|(|A\\<times\\>B|)>>>>|<row|<cell|<math|\\<beta\\><rsup|\\<cal-M\\>><around*|\\<langle\\>|a,b|\\<rangle\\>>>>|<cell|<math|\\<assign\\>\\<cal-M\\><around*|(|\\<lambda\\>x\\<point\\><around*|\\<langle\\>|a,x|\\<rangle\\>>|)><around*|(|b|)>>>>>>>>\n\n  \\;\n\n  \\;\n\n  <center|<tabular|<tformat|<cwith|1|-1|1|1|cell-halign|r>|<cwith|1|-1|2|2|cell-hyphen|n>|<cwith|1|-1|2|2|cell-lsep|0>|<cwith|1|-1|1|1|cell-rsep|0>|<table|<row|<cell|<math|<wide|\\<beta\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,B>>>|<cell|<math|:\\<cal-M\\>*A\\<times\\>B\\<rightarrow\\>\\<cal-M\\><around*|(|A\\<times\\>B|)>>>>|<row|<cell|<math|<wide|\\<beta\\>|\\<bar\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a,b|\\<rangle\\>>>>|<cell|<math|\\<assign\\>\\<cal-M\\><around*|(|\\<lambda\\>x\\<point\\><around*|\\<langle\\>|x,b|\\<rangle\\>>|)><around*|(|a|)>>>>>>>>\n\n  \\;\n\n  \\;\n\n  <center|<tabular|<tformat|<cwith|1|-1|1|1|cell-halign|r>|<cwith|1|-1|2|2|cell-hyphen|n>|<cwith|1|-1|2|2|cell-lsep|0>|<cwith|1|-1|1|1|cell-rsep|0>|<table|<row|<cell|<math|\\<phi\\><rsup|\\<cal-M\\>><rsub|A,B>>>|<cell|<math|:\\<cal-M\\>*A\\<times\\>\\<cal-M\\>*B\\<rightarrow\\>\\<cal-M\\><around*|(|A\\<times\\>B|)>>>>|<row|<cell|<math|\\<phi\\><rsup|\\<cal-M\\>>>>|<cell|<math|\\<assign\\>\\<beta\\><rsup|\\<cal-M\\>>\\<leftarrowtail\\><wide|\\<beta\\>|\\<bar\\>><rsup|\\<cal-M\\>>>>>>>>>\n\n  \\;\n\n  \\;\n\n  <center|<tabular|<tformat|<cwith|1|-1|1|1|cell-halign|r>|<cwith|1|-1|2|2|cell-hyphen|n>|<cwith|1|-1|2|2|cell-lsep|0>|<cwith|1|-1|1|1|cell-rsep|0>|<table|<row|<cell|<math|<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,B>>>|<cell|<math|:\\<cal-M\\>*A\\<times\\>\\<cal-M\\>*B\\<rightarrow\\>\\<cal-M\\><around*|(|A\\<times\\>B|)>>>>|<row|<cell|<math|<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>>>>|<cell|<math|\\<assign\\><wide|\\<beta\\>|\\<bar\\>><rsup|\\<cal-M\\>>\\<leftarrowtail\\>\\<beta\\><rsup|\\<cal-M\\>>>>>>>>>\n\n  \\;\n\n  The operations <math|\\<phi\\><rsup|\\<cal-M\\>><rsub|A,B>> and\n  <math|<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,B>> are similar, but\n  differ in the order that effects are applied in. Roughly speaking,\n  <math|\\<phi\\><rsup|\\<cal-M\\>><rsub|A,B>> applies the effects of the first\n  component first, while <math|<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,B>>\n  applies the effects of the second component first. For some monads, the\n  order of the effects is immaterial and <math|\\<phi\\><rsup|\\<cal-M\\>><rsub|A,B>=<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,B>>.\n  We call such monads <dfn|commutative monads>.\n\n  It is always the case that\n\n  <\\equation*>\n    \\<phi\\><rsup|\\<cal-M\\>><rsub|A,A>\\<circ\\>\\<Delta\\><rsub|\\<cal-M\\>*A>=<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,A>\\<circ\\>\\<Delta\\><rsub|\\<cal-M\\>*A>\\<of\\>\\<cal-M\\>*A\\<rightarrow\\>\\<cal-M\\><around*|(|A<rsup|2>|)>\n  </equation*>\n\n  holds, even for non-commutative monads. In this case, the effect specified\n  by the input is duplicated. Compare this with\n  <math|\\<cal-M\\>*\\<Delta\\><rsub|A>\\<of\\>\\<cal-M\\>*A\\<rightarrow\\>\\<cal-M\\><around*|(|A<rsup|2>|)>>\n  where the contents of type <math|A> are duplicated, but not the effect\n  itself. When we have <math|\\<cal-M\\>*\\<Delta\\><rsub|A>=\\<phi\\><rsup|\\<cal-M\\>><rsub|A,A>\\<circ\\>\\<Delta\\><rsub|\\<cal-M\\>*A>>\n  <around*|(|equiv. <math|\\<cal-M\\>*\\<Delta\\><rsub|A>=<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,A>\\<circ\\>\\<Delta\\><rsub|\\<cal-M\\>*A>>|)>,\n  we say that <math|\\<cal-M\\>> is an <dfn|idempotent monad>.<\\footnote>\n    Beware that we are using the definition of idempotent monad from King and\n    Wadler<nbsp><cite|King1993>, as opposed to the traditional categorical\n    definition of an idempotent monad.\n  </footnote> For idempotent monads, the same effect is occurring two or more\n  times in a row is equivalent to it occurring once.\n\n  <subsection|Identity Monad>\n\n  The most trivial monad is the identity monad, <math|Id>, where\n  <math|Id\\<space\\>A\\<assign\\>A> and <math|Id\\<space\\>f\\<assign\\>f>. The\n  natural transformations <math|\\<eta\\><rsup|Id><rsub|A>> and\n  <math|\\<mu\\><rsup|Id><rsub|A>> are both the identity function. The identity\n  monad captures no side-effects and it is commutative and idempotent.\n\n  <subsection|Monad Zero><label|ss:MonadZero>\n\n  Some monads have a universal <dfn|zero> value\n\n  <\\equation*>\n    \\<emptyset\\><rsup|\\<cal-M\\>><rsub|A>\\<of\\>\\<cal-M\\>*A\n  </equation*>\n\n  where for all <math|f\\<of\\>A\\<rightarrow\\>B>,\n\n  <\\equation*>\n    \\<cal-M\\>f<around*|(|\\<emptyset\\><rsup|\\<cal-M\\>><rsub|A>|)>=\\<emptyset\\><rsup|\\<cal-M\\>><rsub|B>\n  </equation*>\n\n  This zero value denotes a side-effect that captures the notion of a failed\n  or aborted computation or some kind of empty result.\n\n  The laws for these monads with zero are, again, best expressed using\n  Kleisli morphisms. At the risk of some notational confusion, we define\n  <math|\\<varnothing\\><rsup|\\<cal-M\\>><rsub|A,B>\\<of\\>A\\<rightarrow\\>\\<cal-M\\>*B>\n  as a <dfn|zero morphism>.\n\n  <\\equation*>\n    \\<varnothing\\><rsup|\\<cal-M\\>><rsub|A,B><around*|(|a|)>\\<assign\\>\\<emptyset\\><rsup|\\<cal-M\\>><rsub|B>\n  </equation*>\n\n  Zero morphisms are required to be an absorbing element for Kleisli\n  composition. For all <math|f\\<of\\>A\\<rightarrow\\>\\<cal-M\\>*B> and\n  <math|g\\<of\\>B\\<rightarrow\\>\\<cal-M\\>*C> we require that\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|g<op|\\<leftarrowtail\\>>\\<varnothing\\><rsup|\\<cal-M\\>><rsub|A,B>>|<cell|=>|<cell|\\<varnothing\\><rsup|\\<cal-M\\>><rsub|A,C>>>|<row|<cell|\\<varnothing\\><rsup|\\<cal-M\\>><rsub|B,C><op|\\<leftarrowtail\\>>f>|<cell|=>|<cell|\\<varnothing\\><rsup|\\<cal-M\\>><rsub|A,C>>>>>\n  </eqnarray*>\n\n  (Note: In Haskell, the <verbatim|mzero> value typically is only required to\n  satisfy the first equation; however, we require monads with zero to satisfy\n  both laws.)\n\n  <subsubsection|Option Monad><label|ss:optionMonad>\n\n  The functor <math|<value|maybe>> forms a monad with the following\n  operations:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<eta\\><rsup|<maybe>><rsub|A><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|<injr|<around*|(|a|)>>>>|<row|<cell|\\<mu\\><rsup|S><rsub|A><around*|(|<injl|<around*|\\<langle\\>||\\<rangle\\>>>|)>>|<cell|\\<assign\\>>|<cell|<injl|<around*|\\<langle\\>||\\<rangle\\>>>>>|<row|<cell|\\<mu\\><rsup|S><rsub|A><around*|(|<injr|<around*|(|x|)>>|)>>|<cell|\\<assign\\>>|<cell|x>>>>\n  </eqnarray*>\n\n  The option monad is commutative and idempotent. The option monad has a\n  zero:\n\n  <\\equation*>\n    \\<emptyset\\><rsup|<maybe>><rsub|A>\\<assign\\><injl|<around*|\\<langle\\>||\\<rangle\\>>>\n  </equation*>\n\n  There is a natural transformation from the option monad into any monad with\n  zero, <math|\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,A>\\<of\\><maybe>A\\<rightarrow\\>\\<cal-M\\>*A>:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,A><around*|(|\\<emptyset\\><rsup|<maybe>><rsub|A>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|\\<cal-M\\>><rsub|A>>>|<row|<cell|\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,A><around*|(|\\<eta\\><rsup|<maybe>><rsub|A><around*|(|a|)>|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|\\<cal-M\\>><rsub|A><around*|(|a|)>>>>>\n  </eqnarray*>\n\n  <\\lemma>\n    For all <math|f:A\\<rightarrow\\>B>,\n\n    \\;\n\n    <\\equation*>\n      \\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,B>\\<circ\\><maybe>f=\\<cal-M\\>*f\\<circ\\>\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,A>\n    </equation*>\n\n    Also\n\n    <\\equation*>\n      \\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,A>\\<circ\\>\\<mu\\><rsup|<maybe>><rsub|A>=\\<mu\\><rsup|\\<cal-M\\>><rsub|A>\\<circ\\>\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,\\<cal-M\\>*A>\\<circ\\><maybe>\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,A>\n      <around*|(|=\\<mu\\><rsup|\\<cal-M\\>><rsub|A>\\<circ\\>\\<cal-M\\>*\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,A>\\<circ\\>\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,<maybe>A>|)>\n    </equation*>\n  </lemma>\n\n  <section|Multi-bit Words>\n\n  By repeatedly taking products of the bit type we can build the types\n  <math|<2><rsup|2<rsup|n>>> which denote <math|2<rsup|n>>-bit words. We\n  choose to represent values in big endian format, meaning that given a pair\n  representing the low and high bits of a value, the most significant bits\n  are stored in the first half. Given a value <math|a\\<of\\><2><rsup|n>>,\n  where <math|n> is a power of two, we recursively define\n  <math|<around*|\\<lceil\\>|a|\\<rceil\\>><rsub|n>\\<of\\>\\<bbb-N\\>> to be the\n  number that <math|a> represents:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<math-tt|0><rsub|<2>>|\\<rceil\\>><rsub|1>>|<cell|\\<assign\\>>|<cell|0>>|<row|<cell|<around*|\\<lceil\\>|<math-tt|1><rsub|<2>>|\\<rceil\\>><rsub|1>>|<cell|\\<assign\\>>|<cell|1>>|<row|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|a,b|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>>|<cell|\\<assign\\>>|<cell|<around*|\\<lceil\\>|a|\\<rceil\\>><rsub|n>*2<rsup|n>+<around*|\\<lceil\\>|b|\\<rceil\\>><rsub|n>>>>>\n  </eqnarray*>\n\n  We also make use of the following variation of this value interpretation\n  function.\n\n  <\\equation*>\n    <around*|\\<lceil\\>|<around*|\\<langle\\>|a,b|\\<rangle\\>>|\\<rceil\\>><rsub|n,m>\\<assign\\><around*|\\<lceil\\>|a|\\<rceil\\>><rsub|n>*2<rsup|m>+<around*|\\<lceil\\>|b|\\<rceil\\>><rsub|m>\n  </equation*>\n\n  These value interpretation functions are all injective (one-to-one) and we\n  can choose a left inverse. Given <math|m\\<of\\>\\<bbb-N\\>>, we implicitly\n  define <math|<around*|\\<lfloor\\>|m|\\<rfloor\\>><rsub|n>\\<of\\><2><rsup|n>>\n  such that <math|<around*|\\<lceil\\>|<around*|\\<lfloor\\>|m|\\<rfloor\\>><rsub|n>|\\<rceil\\>><rsub|n>\\<equiv\\>m\n  <around*|(|mod 2<rsup|n>|)>>. We have chosen\n  <math|<around*|\\<lfloor\\>|m|\\<rfloor\\>><rsub|n>> so that it represents\n  <math|m> modulo <math|2<rsup|n>>.\n\n  We can equip the type <math|<2><rsup|n>> with addition and multiplication\n  operations, so that <math|<around*|\\<lfloor\\>|\\<cdummy\\>|\\<rfloor\\>><rsub|n>>\n  becomes a semiring homomorphism. Given <math|a\\<of\\><2><rsup|n>> and\n  <math|b\\<of\\><2><rsup|n>>, we define <math|a<around*|\\<lfloor\\>|+|\\<rfloor\\>><rsub|n>b\\<of\\><2><rsup|n>>\n  and <math|a*<around*|\\<lfloor\\>|\\<times\\>|\\<rfloor\\>><rsub|n>b\\<of\\><2><rsup|n>>\n  such that\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lfloor\\>|m<rsub|1>|\\<rfloor\\>><rsub|n><around*|\\<lfloor\\>|+|\\<rfloor\\>><rsub|n><around*|\\<lfloor\\>|m<rsub|2>|\\<rfloor\\>><rsub|n>>|<cell|=>|<cell|<around*|\\<lfloor\\>|m<rsub|1>+m<rsub|2>|\\<rfloor\\>><rsub|n>>>|<row|<cell|<around*|\\<lfloor\\>|m<rsub|1>|\\<rfloor\\>><rsub|n><around*|\\<lfloor\\>|\\<times\\>|\\<rfloor\\>><rsub|n><around*|\\<lfloor\\>|m<rsub|2>|\\<rfloor\\>><rsub|n>>|<cell|=>|<cell|<around*|\\<lfloor\\>|m<rsub|1>*m<rsub|2>|\\<rfloor\\>><rsub|n>>>>>\n  </eqnarray*>\n\n  \\;\n\n  We write <math|<math-tt|0><rsub|<2><rsup|4>>,<math-tt|1><rsub|<2><rsup|4>>,\\<ldots\\>,<math-tt|f><rsub|<2><rsup|4>>>\n  to denote the 16 values of <math|<2><rsup|4>> that represent their\n  respective hexadecimal values. Similarly, we write\n  <math|<math-tt|00><rsub|<2><rsup|8>>,<math-tt|01><rsub|<2><rsup|8>>,\\<ldots\\>,<math-tt|ff><rsub|<2><rsup|8>>>\n  to denote the 256 values of <math|<2><rsup|8>>, and so forth. It is worth\n  observing that for hexadecimal digits <math|<math-tt|<var|x>>> and\n  <math|<math-tt|<var|y>>>, we have <math|<math-tt|<var|xy>><rsub|<2><rsup|8>>=<around*|\\<langle\\>|<math-tt|<var|x>><rsub|<2><rsup|4>>,<math-tt|<var|y>><rsub|<2><rsup|4>>|\\<rangle\\>>>.\n\n  <subsection|Byte Strings>\n\n  The type <math|<around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>> is known as byte\n  strings. We will write byte string values as sequences of hexadecimal\n  digits surrounded by square brackets, e.g.\n  <math|<math-tt|[cafe]><rsub|<2><rsup|8>>> denotes\n  <math|<math-tt|ca><rsub|<2><rsup|8>>\\<blacktriangleleft\\><math-tt|fe><rsub|<2><rsup|8>>\\<blacktriangleleft\\>\\<epsilon\\><rsub|<2><rsup|8>>>\n  (whereas <math|<math-tt|cafe><rsub|<2><rsup|16>>> denotes\n  <math|<around*|\\<langle\\>|<math-tt|ca><rsub|<2><rsup|8>>,<math-tt|fe><rsub|<2><rsup|8>>|\\<rangle\\>>>).\n  For all these values, we may omit the subscript when the interpretation is\n  clear from the context.\n\n  Words larger than a byte are commonly encoded as byte strings in either big\n  endian or little endian order. We define\n  <math|BE<rsub|n>\\<of\\><2><rsup|n>\\<rightarrow\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>\n  and <math|LE<rsub|n>\\<of\\><2><rsup|n>\\<rightarrow\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>\n  as big endian and little endian encodings of words respectively for\n  <math|n\\<geq\\>8>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|LE<rsub|8><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|\\<ast\\>><around*|(|a|)>>>|<row|<cell|LE<rsub|2*n><around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|LE<rsub|n><around*|(|a<rsub|2>|)>\\<cdummy\\>LE<rsub|n><around*|(|a<rsub|1>|)><text|<htab|5mm>(when\n    <math|8\\<leq\\>n>)>>>|<row|<cell|BE<rsub|8><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|\\<ast\\>><around*|(|a|)>>>|<row|<cell|BE<rsub|2*n><around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|BE<rsub|n><around*|(|a<rsub|1>|)>\\<cdummy\\>BE<rsub|n><around*|(|a<rsub|2>|)><text|<htab|5mm>(when\n    <math|8\\<leq\\>n>)>>>>>\n  </eqnarray*>\n\n  <subsection|Bit Strings>\n\n  The type <math|<2><rsup|\\<ast\\>>> is known as bit strings. We will write\n  bit string values as sequences of binary digits surrounded by square\n  brackets, e.g. <math|<math-tt|[0110]><rsub|<2>>> denotes\n  <math|<math-tt|0><rsub|<2>>\\<blacktriangleleft\\><math-tt|1><rsub|<2>>\\<blacktriangleleft\\><math-tt|1><rsub|<2>>\\<blacktriangleleft\\><math-tt|0><rsub|<2>>\\<blacktriangleleft\\>\\<epsilon\\><rsub|<2>>>.\n  Again, we may omit the subscript when the interpretation is clear from\n  context.\n\n  <chapter|Core Simplicity>\n\n  Simplicity is a typed functional programming language based on Gentzen's\n  sequent calculus<nbsp><cite|gentzen>. The core language consists of nine\n  combinators for forming expressions. These nine combinators capture the\n  computational power of Simplicity. In later chapters other combinators will\n  extend this core language and provide other effects to handle input and\n  access the transaction that provides context for the Simplicity program.\n\n  <section|Types>\n\n  This section introduces the abstract syntax and semantics types available\n  in Simplicity. Simplicity uses a particular subset of the simple type\n  theory we developed in Chapter<nbsp><reference|chapter:preliminaries>.\n\n  <subsection|Abstract Syntax>\n\n  Simplicity has only three kinds of types:\n\n  <\\itemize-minus>\n    <item>The unit type, <value|1>.\n\n    <item>The sum of two Simplicity types, <math|A+B>.\n\n    <item>The product of two Simplicity types, <math|A\\<times\\>B>.\n  </itemize-minus>\n\n  \\;\n\n  Simplicity has neither function types nor recursive types. Every type in\n  Simplicity can only contain a finite number of values. For example, the\n  type <2>, which is <math|<value|1>+<value|1>>, has exactly two values,\n  namely <injl-long|<value|1>|<value|1>|<around*|\\<langle\\>||\\<rangle\\>>> and\n  <injr-long|<value|1>|<value|1>|<around*|\\<langle\\>||\\<rangle\\>>>. The type\n  <math|<around*|(|<value|1>+<value|1>|)>\\<times\\><around*|(|<value|1>+<value|1>|)>>\n  has exactly four values. As you can see, the number of values that a type\n  contains can be easily calculated by interpreting the type as an arithmetic\n  expression. Be aware that types are not arithmetic expressions. For\n  example, the types <math|<around*|(|<value|1>+<value|1>|)>+<around*|(|<value|1>+<value|1>|)>>\n  and <math|<around*|(|<value|1>+<value|1>|)>\\<times\\><around*|(|<value|1>+<value|1>|)>>\n  are distinct and not interchangeable.\n\n  <subsection|Formal Syntax>\n\n  Formally we define the abstract syntax of types as an inductive type in\n  Coq:\n\n  <\\render-code>\n    <\\verbatim>\n      <strong|Inductive> Ty : Set :=\n\n      \\| Unit : Ty\n\n      \\| Sum \\ : Ty -\\<gtr\\> Ty -\\<gtr\\> Ty\n\n      \\| Prod : Ty -\\<gtr\\> Ty -\\<gtr\\> Ty.\n    </verbatim>\n  </render-code>\n\n  <subsection|Formal Semantics>\n\n  Formally we define the denotational semantics of Simplicity types as a\n  function from syntax to Coq types:\n\n  \\;\n\n  <\\verbatim>\n    Fixpoint tySem (X : Ty) : Set :=\n\n    match X with\n\n    \\| Unit =\\<gtr\\> Datatypes.unit\n\n    \\| Sum A B =\\<gtr\\> tySem A + tySem B\n\n    \\| Prod A B =\\<gtr\\> tySem A * tySem B\n\n    end.\n  </verbatim>\n\n  <section|Terms>\n\n  Simplicity programs are composed of terms that denote functions between\n  types. Every Simplicity term is associated with an input type and an output\n  type and we write a type annotated term as <math|t\\<of\\>A\\<vdash\\>B> where\n  <math|t> is the term, <math|A> is the input type and <math|B> is the output\n  type. We write <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>>\\<of\\>A\\<rightarrow\\>B>\n  for the function that the term <math|t> denotes.\n\n  Core Simplicity has nine combinators for forming well-typed terms.\n\n  <subsection|Identity>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|iden><rsub|A>\\<of\\>A\\<vdash\\>A>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<samp|iden><rsub|A>|\\<rrbracket\\>>\\<assign\\>\\<lambda\\>a\\<point\\>a\n  </equation*>\n\n  For every Simplicity type <math|A>, we have an identity term that denotes\n  the identity function for that type.\n\n  We can also write the semantics in application style as\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<samp|iden><rsub|A>|\\<rrbracket\\>><around*|(|a|)>\\<assign\\>a\n  </equation*>\n\n  which is just a different way of writing the same definition. However,\n  please note that the <math|a> argument is an argument of the function\n  denoted by <math|<samp|iden><rsub|A>> and is not an argument to the\n  Simplicity term itself.\n\n  <subsection|Composition>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\>A\\<vdash\\>B>>|<cell|<math|t\\<of\\>B\\<vdash\\>C>>>>>>>>|<row|<cell|<math|<math-ss|comp><rsub|A,B,C>\n    s t\\<of\\>A\\<vdash\\>C>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|comp><rsub|A,B,C> s\n    t|\\<rrbracket\\>>\\<assign\\><around*|\\<llbracket\\>|t|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|s|\\<rrbracket\\>>\n  </equation*>\n\n  The composition combinator functionally composes its two arguments,\n  <math|s> and <math|t>, when the output type of <math|s> matches the input\n  type of <math|t>.\n\n  <subsection|Constant Unit>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<math-ss|unit><rsub|A>\\<of\\>A\\<vdash\\><value|1>>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|unit><rsub|A>|\\<rrbracket\\>>\\<assign\\>\\<lambda\\>a\\<point\\><around*|\\<langle\\>||\\<rangle\\>>\n  </equation*>\n\n  The unit term denotes the constant function that always returns\n  <math|<around*|\\<langle\\>||\\<rangle\\>>>, the unique value of the unit type.\n  The function's argument is ignored and we have a constant unit term for\n  every type of input.\n\n  We can also write semantics in application style as\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<samp|unit><rsub|A>|\\<rrbracket\\>><around*|(|a|)>\\<assign\\><around*|\\<langle\\>||\\<rangle\\>><text|.>\n  </equation*>\n\n  We will use application style when writing the definition of the remaining\n  combinators, trusting that the reader will be mindful of the distinction\n  between arguments of the combinators versus the argument of the function\n  that the Simplicity term denotes.\n\n  <subsection|Left Injection>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<math|t\\<of\\>A\\<vdash\\>B>>>|<row|<cell|<math|<math-ss|injl><rsub|A,B,C>\n    t\\<of\\>A\\<vdash\\>B+C>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|injl><rsub|A,B,C>\n    t|\\<rrbracket\\>><around*|(|a|)>\\<assign\\><injl|<around*|(|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|)>>\n  </equation*>\n\n  The left injection combinator composes a left-tag with its argument\n  <math|t>.\n\n  <subsection|Right Injection>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<math|t\\<of\\>A\\<vdash\\>C>>>|<row|<cell|<math|<math-ss|injr><rsub|A,B,C>\n    t\\<of\\>A\\<vdash\\>B+C>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|injr><rsub|A,B,C>\n    t|\\<rrbracket\\>><around*|(|a|)>\\<assign\\><injr|<around*|(|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|)>>\n  </equation*>\n\n  The right injection combinator composes a right-tag with its argument\n  <math|t>.\n\n  <subsection|Case>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\>A\\<times\\>C\\<vdash\\>D>>|<cell|<math|t\\<of\\>B\\<times\\>C\\<vdash\\>D>>>>>>>>|<row|<cell|<math|<math-ss|case><rsub|A,B,C,D>\n    s t\\<of\\><around*|(|A+B|)>\\<times\\>C\\<vdash\\>D>>>>>>\n  </with>\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|case><rsub|A,B,C,D>\n    s t|\\<rrbracket\\>><around*|\\<langle\\>|<injl|<around*|(|a|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|s|\\<rrbracket\\>><around*|\\<langle\\>|a,c|\\<rangle\\>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|case><rsub|A,B,C,D>\n    s t|\\<rrbracket\\>><around*|\\<langle\\>|<injr|<around*|(|b|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|\\<langle\\>|b,c|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  The case combinator is Simplicity's only branching operation. Given a pair\n  of values with the first component being a sum type, this combinator\n  evaluates either its <math|s> or <math|t> argument, depending on which tag\n  the first component has, on the pair of inputs.\n\n  <subsection|Pair>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\>A\\<vdash\\>B>>|<cell|<math|t\\<of\\>A\\<vdash\\>C>>>>>>>>|<row|<cell|<math|<math-ss|pair><rsub|A,B,C>\n    s t\\<of\\>A\\<vdash\\>B\\<times\\>C>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|pair><rsub|A,B,C> s\n    t|\\<rrbracket\\>><around*|(|a|)>\\<assign\\><around*|\\<langle\\>|<around*|\\<llbracket\\>|s|\\<rrbracket\\>><around*|(|a|)>,<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|\\<rangle\\>>\n  </equation*>\n\n  The pair combinator evaluates both its arguments, <math|s> and <math|t>, on\n  the same input and returns the pair of the two results.\n\n  <subsection|Take>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<math|t\\<of\\>A\\<vdash\\>C>>>|<row|<cell|<math|<math-ss|take><rsub|A,B,C>\n    t\\<of\\>A\\<times\\>B\\<vdash\\>C>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|take><rsub|A,B,C>\n    t|\\<rrbracket\\>><around*|\\<langle\\>|a,b|\\<rangle\\>>\\<assign\\><around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>\n  </equation*>\n\n  The take combinator denotes a function on pairs that passes its first\n  component to <math|t> and ignores its second component.\n\n  <subsection|Drop>\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<math|t\\<of\\>B\\<vdash\\>C>>>|<row|<cell|<math|<math-ss|drop><rsub|A,B,C>\n    t\\<of\\>A\\<times\\>B\\<vdash\\>C>>>>>>\n  </with>\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|drop><rsub|A,B,C>\n    t|\\<rrbracket\\>><around*|\\<langle\\>|a,b|\\<rangle\\>>\\<assign\\><around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|b|)>\n  </equation*>\n\n  The drop combinator denotes a function on pairs that passes its second\n  component to <math|t> and ignores its first component.\n\n  <subsection|Formal Syntax>\n\n  We define the formal syntax of well-typed core Simplicity terms as an\n  inductive family in Coq:\n\n  <\\render-code>\n    <\\verbatim>\n      <strong|Inductive> Term : Ty -\\<gtr\\> Ty -\\<gtr\\> Set :=\n\n      \\| iden : forall {A}, Term A A\n\n      \\| comp : forall {A B C}, Term A B -\\<gtr\\> Term B C -\\<gtr\\> Term A C\n\n      \\| unit : forall {A}, Term A Unit\n\n      \\| injl : forall {A B C}, Term A B -\\<gtr\\> Term A (Sum B C)\n\n      \\| injr : forall {A B C}, Term A C -\\<gtr\\> Term A (Sum B C)\n\n      \\| case : forall {A B C D},\n\n      \\ \\ \\ \\ Term (Prod A C) D -\\<gtr\\> Term (Prod B C) D -\\<gtr\\> Term\n      (Prod (Sum A B) C) D\n\n      \\| pair : forall {A B C}, Term A B -\\<gtr\\> Term A C -\\<gtr\\> Term A\n      (Prod B C)\n\n      \\| take : forall {A B C}, Term A C -\\<gtr\\> Term (Prod A B) C\n\n      \\| drop : forall {A B C}, Term B C -\\<gtr\\> Term (Prod A B) C.\n    </verbatim>\n  </render-code>\n\n  <subsection|Formal Semantics>\n\n  The formal semantics for core Simplicity in Coq recursively interprets each\n  term as a function between the formal semantics of its associated types:\n\n  \\;\n\n  <\\verbatim>\n    Fixpoint eval {A B} (x : Term A B) : tySem A -\\<gtr\\> tySem B :=\n\n    match x in Term A B return tySem A -\\<gtr\\> tySem B with\n\n    \\| iden =\\<gtr\\> fun a =\\<gtr\\> a\n\n    \\| comp s t =\\<gtr\\> fun a =\\<gtr\\> eval t (eval s a)\n\n    \\| unit =\\<gtr\\> fun _ =\\<gtr\\> tt\n\n    \\| injl t =\\<gtr\\> fun a =\\<gtr\\> inl (eval t a)\n\n    \\| injr t =\\<gtr\\> fun a =\\<gtr\\> inr (eval t a)\n\n    \\| case s t =\\<gtr\\> fun p =\\<gtr\\> let (ab, c) := p in\n\n    \\ \\ \\ \\ match ab with\n\n    \\ \\ \\ \\ \\| inl a =\\<gtr\\> eval s (a, c)\n\n    \\ \\ \\ \\ \\| inr b =\\<gtr\\> eval t (b, c)\n\n    \\ \\ \\ \\ end\n\n    \\| pair s t =\\<gtr\\> fun a =\\<gtr\\> (eval s a, eval t a)\n\n    \\| take t =\\<gtr\\> fun ab =\\<gtr\\> eval t (fst ab)\n\n    \\| drop t =\\<gtr\\> fun ab =\\<gtr\\> eval t (snd ab)\n\n    end.\n  </verbatim>\n\n  <section|Example Simplicity>\n\n  Simplicity is not meant to be a language to directly write programs in. It\n  is intended to be a backend language that some other language (or\n  languages) is complied or translated to. However, one can program directly\n  in Simplicity just as one can write programs directly in an assembly\n  language.\n\n  Because the core Simplicity language may seem meager, it is worthwhile to\n  see how one can build up sophisticated functions in it.\n\n  <subsection|Bit Operations><label|ss:bitOps>\n\n  For the bit type, <2>, we can define core Simplicity terms that represent\n  the two constant functions that return this type:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<math-ss|false><rsub|A>>|<cell|\\<assign\\>>|<cell|<math-ss|injl><rsub|A,<value|1>,<value|1>>\n    <math-ss|unit>\\<of\\>A\\<vdash\\><2>>>|<row|<cell|<math-ss|true><rsub|A>>|<cell|\\<assign\\>>|<cell|<math-ss|injr><rsub|A,<value|1>,<value|1>>\n    <math-ss|unit>\\<of\\>A\\<vdash\\><2>>>>>\n  </eqnarray*>\n\n  From these definitions, we can prove that <math|<math-ss|false>> and\n  <math|<math-ss|true>> have the following semantics.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|false>|\\<rrbracket\\>><around*|(|a|)>>|<cell|=>|<cell|<math-tt|0><rsub|<2>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|true>|\\<rrbracket\\>><around*|(|a|)>>|<cell|=>|<cell|<math-tt|1><rsub|<2>>>>>>\n  </eqnarray*>\n\n  Next, we define a condition combinator to branch based on the value of a\n  bit using <math|<math-ss|case>> and <samp|drop>. The first argument is the\n  \\Pthen\\Q clause and the second argument is the \\Pelse\\Q clause.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\>A\\<vdash\\>B>>|<cell|<math|t\\<of\\>A\\<vdash\\>B>>>>>>>>|<row|<cell|<math|<math-ss|cond><rsub|A,B>\n    s t\\<assign\\><math-ss|case><rsub|<value|1>,<value|1>,A,B>\n    <around*|(|<math-ss|drop> t|)> <around*|(|<math-ss|drop>\n    s|)>\\<of\\><2>\\<times\\>A\\<vdash\\>B>>>>>>\n  </with>\n\n  \\;\n\n  We can prove that <math|<math-ss|cond>> has the following semantics.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|cond> s\n    t|\\<rrbracket\\>><around*|\\<langle\\>|<math-tt|1><rsub|<2>>,a|\\<rangle\\>>>|<cell|=>|<cell|<around*|\\<llbracket\\>|s|\\<rrbracket\\>><around*|(|a|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|cond>\n    s t|\\<rrbracket\\>><around*|\\<langle\\>|<math-tt|0><rsub|<2>>,a|\\<rangle\\>>>|<cell|=>|<cell|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>>>>>\n  </eqnarray*>\n\n  With these fundamental operations for bits in hand, we can define standard\n  Boolean connectives:\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|t\\<of\\>A\\<vdash\\><2>>>>>>>>>|<row|<cell|<math|<math-ss|not><rsub|A>\n    t\\<assign\\><math-ss|comp><rsub|A,<2>\\<times\\><value|1>,<2>>\n    <around*|(|<math-ss|pair> t <math-ss|unit>|)> <around*|(|<math-ss|cond>\n    <math-ss|false> <math-ss|true>|)>\\<of\\>A\\<vdash\\><2>>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\>A\\<vdash\\><2>>>|<cell|<math|t\\<of\\>A\\<vdash\\><2>>>>>>>>>|<row|<cell|<math|<math-ss|and><rsub|A>\n    s t\\<assign\\><math-ss|comp><rsub|A,<2>\\<times\\>A,<2>>\n    <around*|(|<math-ss|pair> s <math-ss|iden>|)> <around*|(|<math-ss|cond> t\n    <math-ss|false>|)>\\<of\\>A\\<vdash\\><2>>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\>A\\<vdash\\><2>>>|<cell|<math|t:A\\<vdash\\><2>>>>>>>>>|<row|<cell|<math|<math-ss|or><rsub|A>\n    s t\\<assign\\><math-ss|comp><rsub|A,<2>\\<times\\>A,<2>>\n    <around*|(|<math-ss|pair> s <math-ss|iden>|)> <around*|(|<math-ss|cond>\n    <math-ss|true> t|)>\\<of\\>A\\<vdash\\><2>>>>>>>\n  </with>\n\n  \\;\n\n  We use combinators to define <samp|and> and <samp|or> in order to give them\n  short-circuit evaluation behaviour. Short-circuit evaluation useful because\n  if we know the second branch does not need to be evaluated, the source code\n  for it can be pruned at redemption time (see\n  Section<nbsp><reference|ss:pruning>). If instead we directly defined the\n  Boolean functions with types <math|<math-ss|and-func>:<2>\\<times\\><2>\\<vdash\\><2>>\n  and <math|<math-ss|or-func>:<2>\\<times\\><2>\\<vdash\\><2>>, then the two\n  arguments to <samp|and-func> and <samp|or-func> would both be fully\n  evaluated under strict semantics (see Section<nbsp><reference|ss:monadicSemantics>).\n  For the <samp|not> combinator, this is less of an issue, but we define it\n  in combinator form to be consistent.\n\n  <subsection|Simplicity Notation>\n\n  In the previous section, we were relatively detailed with the annotations\n  given to the definitions. Going forward we will be a bit more lax in the\n  presentation. We will also begin using some notation to abbreviate terms.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|s \\<vartriangle\\>\n    t>|<cell|\\<assign\\>>|<cell|<math-ss|pair> s\n    t>>|<row|<cell|s;t>|<cell|\\<assign\\>>|<cell|<math-ss|comp> s t>>>>\n  </eqnarray*>\n\n  with the <math|\\<vartriangle\\>> operator having higher precedence than the\n  ; operator.\n\n  Composition of sequences of <samp|drop> and <samp|take> with <samp|iden> is\n  a very common way of picking data from a nested tuple input. To make this\n  more concise we will use the following notation.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<math-ss|H>>|<cell|\\<assign\\>>|<cell|<math-ss|iden>>>|<row|<cell|<math-ss|O>s<math-ss|>>|<cell|\\<assign\\>>|<cell|<math-ss|take>\n    s>>|<row|<cell|<math-ss|I>s<math-ss|>>|<cell|\\<assign\\>>|<cell|<math-ss|drop>\n    s>>>>\n  </eqnarray*>\n\n  where <math|s> is a string of <samp|I>'s and <samp|O>'s that ends with\n  <samp|H>.\n\n  <subsection|Generic Equality>\n\n  With our notion of a bit in hand, we can build Simplicity predicates of\n  type <math|A\\<vdash\\><2>>. For example, for any Simplicity type <math|A> we\n  can build a Simplicity predicate <math|<math-ss|eq><rsub|A>\\<of\\>A\\<times\\>A\\<vdash\\><2>>,\n  that decides if two values of the same type are equal or not.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<math-ss|eq><rsub|<1>>>|<cell|\\<assign\\>>|<cell|<math-ss|true>>>|<row|<cell|<math-ss|eq><rsub|A+B>>|<cell|\\<assign\\>>|<cell|<math-ss|case>\n    <around*|(|<math-ss|IH> \\<vartriangle\\> <math-ss|OH>;<math-ss|case>\n    <math-ss|eq><rsub|A> <math-ss|false>|)> <around*|(|<math-ss|IH>\n    \\<vartriangle\\> <math-ss|OH>;<math-ss|case> <math-ss|false>\n    <math-ss|eq><rsub|B>|)>>>|<row|<cell|<math-ss|eq><rsub|A*\\<times\\>B>>|<cell|\\<assign\\>>|<cell|<around*|(|<math-ss|OOH>\n    \\<vartriangle\\> <math-ss|IOH>;<math-ss|eq><rsub|A>|)> \\<vartriangle\\>\n    <around*|(|<math-ss|OIH> \\<vartriangle\\> <math-ss|IIH>|)>; <math-ss|cond>\n    <math-ss|eq><rsub|B> <math-ss|false>>>>>\n  </eqnarray*>\n\n  <\\theorem>\n    Given any Simplicity type A, for values\n    <math|a<rsub|0>,a<rsub|1>\\<of\\>A>,\n\n    <\\equation*>\n      <around*|\\<llbracket\\>|<math-ss|eq><rsub|A>|\\<rrbracket\\>><around*|\\<langle\\>|a<rsub|0>,a<rsub|1>|\\<rangle\\>>=<math-tt|1><rsub|<2>><text|\n      if and only if >a<rsub|0>=a<rsub|1>.\n    </equation*>\n  </theorem>\n\n  <subsection|Arithmetic>\n\n  Using techniques familiar from digital logic, we can build an adders and\n  full adders from our Boolean operations defined in\n  Section<nbsp><reference|ss:bitOps>. We begin with definitions of the single\n  bit full adder.\n\n  \\;\n\n  <\\render-code>\n    <math|<math-ss|full-add><rsub|1>\\<of\\><2>\\<times\\><around*|(|<2>\\<times\\><2>|)>\\<vdash\\><2><rsup|2>>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|full-add><rsub|1>>>|<cell|:=>|<cell|<math|<math-ss|maj><rsub|1>\n    \\<vartriangle\\> <math|<math-ss|xor3><rsub|1>>>>>>>>>>>>>\n  </render-code>\n\n  where\n\n  <\\render-code>\n    <math|<math-ss|maj><rsub|1>\\<of\\><2>\\<times\\><around*|(|<2>\\<times\\><2>|)>\\<vdash\\><2>>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|maj><rsub|1>>>|<cell|:=>|<cell|<math|<math-ss|cond>\n    <around*|(|<math-ss|cond> <math-ss|true> <math-ss|iden>|)>\n    <around*|(|<math-ss|cond> <math-ss|iden> <math-ss|false>|)>>>>>>>>>>>>\n  </render-code>\n\n  and\n\n  <\\render-code>\n    <math|<math-ss|xor3><rsub|1>\\<of\\><2>\\<times\\><around*|(|<2>\\<times\\><2>|)>\\<vdash\\><2>>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|xor3><rsub|1>>>|<cell|:=>|<cell|<math|<math-ss|cond>\n    <around*|(|<math-ss|cond> <math-ss|iden> <around*|(|<math-ss|not>\n    <math-ss|iden>|)>|)> <around*|(|<math-ss|cond> <around*|(|<math-ss|not>\n    <math-ss|iden>|)> <math-ss|iden>|)>>>>>>>>>>>>\n  </render-code>\n\n  The full adder meets the following specification.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|1>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|a,b|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>|<cell|=>|<cell|<around*|\\<lceil\\>|a|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|b|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>>>>\n  </eqnarray*>\n\n  It is easy to exhaustively check the above equations because there are only\n  eight inputs to consider. We will illustrate this for a single case where\n  <math|a=<math-tt|1><rsub|<2>>>, <math|b=<math-tt|0><rsub|<2>>>, and\n  <math|c=<math-tt|1><rsub|<2>>>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|1>|\\<rrbracket\\>><around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|maj><rsub|1>\n    \\<vartriangle\\> <math|<math-ss|xor3><rsub|1>>|\\<rrbracket\\>><around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<llbracket\\>|<math-ss|<math|<math-ss|maj><rsub|1>>>|\\<rrbracket\\>><around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>,<around*|\\<llbracket\\>|<math|<math-ss|xor3><rsub|1>>|\\<rrbracket\\>><math|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<llbracket\\>|<math|<math-ss|cond>\n    <around*|(|<math-ss|cond> <math-ss|true> <math-ss|iden>|)>\n    <around*|(|<math-ss|cond> <math-ss|iden>\n    <math-ss|false>|)>>|\\<rrbracket\\>><around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>,<around*|\\<llbracket\\>|<math|<math-ss|xor3><rsub|1>>|\\<rrbracket\\>><math|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<llbracket\\>|<math|<math|<math-ss|cond>\n    <math-ss|true> <math-ss|iden>>>|\\<rrbracket\\>><around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>,<around*|\\<llbracket\\>|<math|<math-ss|xor3><rsub|1>>|\\<rrbracket\\>><math|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<llbracket\\>|<math|<math|<math-ss|true>>>|\\<rrbracket\\>><around*|(|<math-tt|0><rsub|<2>>|)>,<around*|\\<llbracket\\>|<math|<math-ss|xor3><rsub|1>>|\\<rrbracket\\>><math|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<llbracket\\>|<math|<math-ss|xor3><rsub|1>>|\\<rrbracket\\>><math|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<llbracket\\>|<math|<math|<math-ss|cond>\n    <around*|(|<math-ss|cond> <math-ss|iden> <around*|(|<math-ss|not>\n    <math-ss|iden>|)>|)> <around*|(|<math-ss|cond> <around*|(|<math-ss|not>\n    <math-ss|iden>|)> <math-ss|iden>|)>>>|\\<rrbracket\\>><math|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>|\\<rangle\\>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<llbracket\\>|<math|<math|<math-ss|cond>\n    <math-ss|iden> <around*|(|<math-ss|not>\n    <math-ss|iden>|)>>>|\\<rrbracket\\>><math|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math-tt|0><rsub|<2>>|\\<rangle\\>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<around*|\\<llbracket\\>|<math|<math|<math-ss|iden>>>|\\<rrbracket\\>><math|<around*|(|<math-tt|0><rsub|<2>>|)>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,<math|<math-tt|0><rsub|<2>>>|\\<rangle\\>>|\\<rceil\\>><rsub|2>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<math-tt|1><rsub|<2>>|\\<rceil\\>><rsub|1>\\<cdot\\>2<rsup|1>+<around*|\\<lceil\\>|<math-tt|0><rsub|<2>>|\\<rceil\\>><rsub|1>>>|<row|<cell|>|<cell|=>|<cell|1\\<cdot\\>2+0>>|<row|<cell|>|<cell|=>|<cell|2>>|<row|<cell|>|<cell|=>|<cell|1+0+1>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|<math-tt|1><rsub|<2>>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|<math-tt|0><rsub|<2>>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|<math-tt|1><rsub|<2>>|\\<rceil\\>><rsub|1>>>>>\n  </eqnarray*>\n\n  The calculations for the other cases are similar.\n\n  Next, we recursively build full adders for any word size.\n\n  <\\render-code>\n    <math|<math-ss|full-add><rsub|2*n>\\<of\\><2>\\<times\\><around*|(|<2><rsup|2*n>\\<times\\><2><rsup|2*n>|)>\\<vdash\\><2>\\<times\\><2><rsup|2*n>>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|full-add><rsub|2*n>>>|<cell|:=>|<cell|<math|<math-ss|drop>\n    <around*|(|<math-ss|OOH> \\<vartriangle\\> <math-ss|IOH>|)> \\<vartriangle\\>\n    <around*|(|<math-ss|OH>\\<vartriangle\\> <math-ss|drop>\n    <around*|(|<math-ss|OIH> \\<vartriangle\\> <math-ss|IIH>|)>\n    ;<math-ss|full-add><rsub|n>|)>>>>|<row|<cell|>|<cell|;>|<cell|<math|<math-ss|IIH>\n    \\<vartriangle\\> <around*|(|<math-ss|IOH>\\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|full-add><rsub|n>|)>>>>|<row|<cell|>|<cell|;>|<cell|<math|<math-ss|IOH>\n    \\<vartriangle\\> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n    <math-ss|OH>|)>>>>>>>>>>>>\n  </render-code>\n\n  We generalize the specification of the single bit full adder to the\n  multi-bit full adders.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|a,b|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>>|<cell|=>|<cell|<around*|\\<lceil\\>|a|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>>>>\n  </eqnarray*>\n\n  <\\theorem>\n    For all <math|n> which is a power of 2, and for all <math|a:<2><rsup|n>>,\n    <math|b:<2><rsup|n>>, and <math|c:<2>>, we have that\n    <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|a,b|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>=<around*|\\<lceil\\>|a|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>.\n  </theorem>\n\n  <\\proof>\n    We prove <math|<math-ss|full-add><rsub|n>> meets its specification by\n    induction on <math|n>. As mentioned before, the\n    <math|<math-ss|full-add><rsub|1>> case is easily checked by verifying all\n    eight possible inputs. Next, we prove that\n    <math|<math-ss|full-add><rsub|2*n>> meets its specification under the\n    assumption that <math|<math-ss|full-add><rsub|n>> does. Specifically we\n    need to show that\n\n    <\\equation>\n      <around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|2*n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,2*n>=<around*|\\<lceil\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1><label|full-adder-spec>\n    </equation>\n\n    Let us first consider the right hand side of equation\n    <reference|full-adder-spec>. By the definition of our value function we\n    have that\n\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>|<cell|=>|<cell|<around*|\\<lceil\\>|a<rsub|1>|\\<rceil\\>><rsub|n>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|a<rsub|2>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|1>|\\<rceil\\>><rsub|n>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|b<rsub|2>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<lceil\\>|a<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|1>|\\<rceil\\>><rsub|n>|)>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|a<rsub|2>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|2>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>>>>\n    </eqnarray*>\n\n    By our inductive hypothesis, we have that\n\n    <\\equation*>\n      <around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|a<rsub|2>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>=<around*|\\<lceil\\>|a<rsub|2>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|2>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>\n    </equation*>\n\n    so we know that\n\n    <\\equation*>\n      <around*|\\<lceil\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>=<around*|(|<around*|\\<lceil\\>|a<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|1>|\\<rceil\\>><rsub|n>|)>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|a<rsub|2>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>\n    </equation*>\n\n    Let us define <math|c<rsub|0>> and <math|r<rsub|0>> such that\n    <math|<around*|\\<langle\\>|c<rsub|0>,r<rsub|0>|\\<rangle\\>>\\<assign\\><around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|a<rsub|2>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>>.\n    Thus we have that\n\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>|<cell|=>|<cell|<around*|(|<around*|\\<lceil\\>|a<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|1>|\\<rceil\\>><rsub|n>|)>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|c<rsub|0>,r<rsub|0>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<lceil\\>|a<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|1>|\\<rceil\\>><rsub|n>|)>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|c<rsub|0>|\\<rceil\\>><rsub|1>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|0>|\\<rceil\\>><rsub|n>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<lceil\\>|a<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c<rsub|0>|\\<rceil\\>><rsub|1>|)>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|0>|\\<rceil\\>><rsub|n>>>>>\n    </eqnarray*>\n\n    Again, by our inductive hypothesis, we have that\n\n    <\\equation*>\n      <around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c<rsub|0>,<around*|\\<langle\\>|a<rsub|1>,b<rsub|1>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>=<around*|\\<lceil\\>|a<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|b<rsub|1>|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c<rsub|0>|\\<rceil\\>><rsub|1>\n    </equation*>\n\n    therefore we have that\n\n    <\\equation*>\n      <around*|\\<lceil\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>=<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c<rsub|0>,<around*|\\<langle\\>|a<rsub|1>,b<rsub|1>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|2>|\\<rceil\\>><rsub|n>\n    </equation*>\n\n    Let us define <math|c<rsub|1>> and <math|r<rsub|1>> such that\n    <math|<around*|\\<langle\\>|c<rsub|1>,r<rsub|1>|\\<rangle\\>>\\<assign\\><around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,b<rsub|1>|\\<rangle\\>>,c<rsub|0>|\\<rangle\\>>>.\n    Thus we have that\n\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|1>>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|c<rsub|1>,r<rsub|1>|\\<rangle\\>>|\\<rceil\\>><rsub|1,n>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|0>|\\<rceil\\>><rsub|n>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|1>|\\<rceil\\>><rsub|n>|)>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|0>|\\<rceil\\>><rsub|n>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1>\\<cdot\\>2<rsup|2*n>+<around*|\\<lceil\\>|r<rsub|1>|\\<rceil\\>><rsub|n>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|0>|\\<rceil\\>><rsub|n><eq-number><label|full-adder-RHS>>>>>\n    </eqnarray*>\n\n    Now let us consider the left hand side of equation\n    <reference|full-adder-spec>. By the definition and semantics of\n    <math|<math-ss|full-adder><rsub|2*n>> we have that\n\n    <\\eqnarray*>\n      <tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|2*n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>>|<cell|=>|<cell|<around*|\\<llbracket\\>|<math-ss|IOH>\n      \\<vartriangle\\> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n      <math-ss|OH>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|\\<circ\\>>|<cell|<around*|\\<llbracket\\>|<math-ss|IIH>\n      \\<vartriangle\\> <around*|(|<math-ss|IOH> \\<vartriangle\\>\n      <math-ss|OH>;<math-ss|full-add><rsub|n>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|\\<circ\\>>|<cell|<around*|\\<llbracket\\>|<math-ss|drop>\n      <around*|(|<math-ss|OOH> \\<vartriangle\\> <math-ss|IOH>|)>\n      \\<vartriangle\\> <around*|(|<math-ss|OH> \\<vartriangle\\> <math-ss|drop>\n      <around*|(|<math-ss|OIH> \\<vartriangle\\>\n      <math-ss|IIH>|)>;<math-ss|full-add><rsub|n>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|>|<cell|<around*|\\<langle\\>|c,<around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<llbracket\\>|<math-ss|IOH>\n      \\<vartriangle\\> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n      <math-ss|OH>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|\\<circ\\>>|<cell|<around*|\\<llbracket\\>|<math-ss|IIH>\n      \\<vartriangle\\> <around*|(|<math-ss|IOH> \\<vartriangle\\>\n      <math-ss|OH>;<math-ss|full-add><rsub|n>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|>|<cell|<around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,b<rsub|1>|\\<rangle\\>>,<around*|\\<llbracket\\>|<math-ss|full-add><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|a<rsub|2>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<llbracket\\>|<math-ss|IOH>\n      \\<vartriangle\\> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n      <math-ss|OH>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|\\<circ\\>>|<cell|<around*|\\<llbracket\\>|<math-ss|IIH>\n      \\<vartriangle\\> <around*|(|<math-ss|IOH> \\<vartriangle\\>\n      <math-ss|OH>;<math-ss|full-add><rsub|n>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|>|<cell|<around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,b<rsub|1>|\\<rangle\\>>,<around*|\\<langle\\>|c<rsub|0>,r<rsub|0>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<llbracket\\>|<math-ss|IOH>\n      \\<vartriangle\\> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n      <math-ss|OH>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|>|<cell|<around*|\\<langle\\>|r<rsub|0>,<around*|\\<llbracket\\>|<math-ss|full-adder><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|c<rsub|0>,<around*|\\<langle\\>|a<rsub|1>,b<rsub|1>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<llbracket\\>|<math-ss|IOH>\n      \\<vartriangle\\> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n      <math-ss|OH>|)>|\\<rrbracket\\>>>>|<row|<cell|>|<cell|>|<cell|<around*|\\<langle\\>|r<rsub|0>,<around*|\\<langle\\>|c<rsub|1>,r<rsub|1>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<langle\\>|c<rsub|1>,<around*|\\<langle\\>|r<rsub|1>,r<rsub|0>|\\<rangle\\>>|\\<rangle\\>>>>>>\n    </eqnarray*>\n\n    Therefore we have that\n\n    <\\eqnarray*>\n      <tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-add><rsub|2*n>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,a<rsub|2>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|1>,b<rsub|2>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,2*n>>|<cell|=>|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|c<rsub|1>,<around*|\\<langle\\>|r<rsub|1>,r<rsub|0>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,2*n>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1>\\<cdot\\>2<rsup|2*n>+<around*|\\<lceil\\>|<around*|\\<langle\\>|r<rsub|1>,r<rsub|0>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1>\\<cdot\\>2<rsup|2*n>+<around*|\\<lceil\\>|r<rsub|1>|\\<rceil\\>><rsub|n>\\<cdot\\>2<rsup|n>+<around*|\\<lceil\\>|r<rsub|0>|\\<rceil\\>><rsub|n><eq-number><label|full-adder-LHS>>>>>\n    </eqnarray*>\n\n    Together equations <reference|full-adder-RHS> and\n    <reference|full-adder-LHS> show that the right hand side and left hand\n    side of equation <reference|full-adder-spec> are equal, as required.\n  </proof>\n\n  Computer verified versions of these proofs can be found in the Coq library\n  (see Section<nbsp><reference|ss:coqArith>).\n\n  With a full adder we can recursively build full multipliers.\n\n  <\\render-code>\n    <math|<math-ss|full-multiply><rsub|1>\\<of\\><around*|(|<2>\\<times\\><2>|)>\\<times\\><around*|(|<2>\\<times\\><2>|)>\\<vdash\\><2><rsup|2>>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|full-multiply><rsub|1>>>|<cell|:=>|<cell|<math|<math-ss|take>\n    <around*|(|<math-ss|cond> <math-ss|iden> <math-ss|false>|)>\n    \\<vartriangle\\> <math-ss|IH>;<math-ss|full-add><rsub|1>>>>>>>>>>>>\n  </render-code>\n\n  <\\render-code>\n    <math|<math-ss|full-multiply><rsub|2*n>\\<of\\><around*|(|<2><rsup|2*n>\\<times\\><2><rsup|2*n>|)>\\<times\\><around*|(|<2><rsup|2*n>\\<times\\><2><rsup|2*n>|)>\\<vdash\\><2><rsup|4*n>>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|full-multiply><rsub|2*n>>>|<cell|:=>|<cell|<math|<math-ss|take>\n    <around*|(|<math-ss|OOH> \\<vartriangle\\> <around*|(|<math-ss|IOH>\n    \\<vartriangle\\> <math-ss|OIH>|)>|)>>>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|(<math|<around*|(|<math-ss|take>\n    <around*|(|<math-ss|OOH> \\<vartriangle\\> <math-ss|IIH>|)> \\<vartriangle\\>\n    <math-ss|drop> <around*|(|<math-ss|OOH> \\<vartriangle\\>\n    <math-ss|IOH>|)>;<math-ss|full-multiply><rsub|n>|)>>>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|<math|<around*|(|<math-ss|take>\n    <around*|(|<math-ss|OIH> \\<vartriangle\\> <math-ss|IIH>|)> \\<vartriangle\\>\n    <math-ss|drop> <around*|(|<math-ss|OIH> \\<vartriangle\\>\n    <math-ss|IOH>|)>;<math-ss|full-multiply><rsub|n>|)>>)>>|<row|<cell|>|<cell|;>|<cell|<math|<math-ss|take>\n    <around*|(|<math-ss|OH> \\<vartriangle\\>\n    <math-ss|IOH>|)>>>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|<math|<around*|(|<math-ss|drop>\n    <around*|(|<math-ss|OOH> \\<vartriangle\\> <math-ss|IIH>|)> \\<vartriangle\\>\n    <around*|(|<math-ss|OIH> \\<vartriangle\\> <math-ss|drop>\n    <around*|(|<math-ss|OIH> \\<vartriangle\\>\n    <math-ss|IOH>|)>;<math-ss|full-multiply><rsub|n>|)>|)>>>>|<row|<cell|>|<cell|;>|<cell|<math|<around*|(|<math-ss|OH>\n    \\<vartriangle\\> <math-ss|drop> <around*|(|<math-ss|IOH> \\<vartriangle\\>\n    <math-ss|OOH>|)>;<math-ss|full-multiply><rsub|n>|)> \\<vartriangle\\>\n    <math-ss|drop> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n    <math-ss|OIH>|)>>>>>>>>>>>>\n  </render-code>\n\n  \\;\n\n  We can prove that the full multipliers meet the following specifications.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<math-ss|full-multiply><rsub|n>|\\<rrbracket\\>><around*|\\<langle\\>|<around*|\\<langle\\>|a,b|\\<rangle\\>>,<around*|\\<langle\\>|c,d|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|2*n>>|<cell|=>|<cell|<around*|\\<lceil\\>|a|\\<rceil\\>><rsub|n>\\<cdot\\><around*|\\<lceil\\>|b|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|c|\\<rceil\\>><rsub|n>+<around*|\\<lceil\\>|d|\\<rceil\\>><rsub|n>>>>>\n  </eqnarray*>\n\n  \\;\n\n  <with|color|red|TODO: Notes on trade-offs between efficiency and\n  simplicity.>\n\n  <subsection|Bitwise Operations>\n\n  <subsection|SHA-256>\n\n  The official standard for the SHA-2 family, which includes SHA-256, can be\n  found in the <hlink|FIPS PUB 180-4: Secure Hash Standard\n  (SHS)|http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf><nbsp><cite|sha>.\n  We define the SHA-256 function, <math|SHA256<rsub|<2>>\\<of\\><2><rsup|\\<ast\\>>\\<rightarrow\\><2><rsup|256>>,\n  as a function from bit strings to a 256-bit word. Technically, SHA-256 is\n  restricted to inputs <math|l\\<of\\><2><rsup|\\<ast\\>>> where\n  <math|<around*|\\||l|\\|>\\<less\\>2<rsup|64>>.\n\n  The SHA-256 hash function is composed from two components, a padding\n  function <math|SHA256<rsub|Pad>\\<of\\><2><rsup|\\<ast\\>>\\<rightarrow\\><around*|(|<2><rsup|512>|)><rsup|+>>,\n  which appends padding and length data to produce a (non-empty) sequence of\n  blocks of 512 bits, and the Merkle\\UDamgrd construction\n  <math|SHA256<rsub|MD>\\<of\\><2><rsup|256>\\<times\\><around*|(|<2><rsup|512>|)><rsup|\\<ast\\>>\\<rightarrow\\><2><rsup|256>>.\n\n  <\\equation*>\n    SHA256<rsub|<2>><around*|(|l|)>=SHA256<rsub|MD><around*|\\<langle\\>|SHA256<rsub|IV>,\\<eta\\><rsup|S><around*|(|SHA256<rsub|Pad><around*|(|l|)>|)>|\\<rangle\\>>\n  </equation*>\n\n  where <math|SHA256<rsub|IV>\\<of\\><2><rsup|256>> is the SHA-256 initial\n  value and <math|\\<eta\\><rsup|S><rsub|A<rsup|+>>\\<of\\>A<rsup|+>\\<rightarrow\\>A<rsup|\\<ast\\>>>\n  formally converts a non-empty list to a regular list.\n\n  The <math|SHA256<rsub|MD>> function is a left fold using the SHA-256 block\n  compression function <math|SHA256<rsub|Block>\\<of\\><2><rsup|256>\\<times\\><2><rsup|512>\\<rightarrow\\><2><rsup|256>>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|SHA256<rsub|MD><around*|\\<langle\\>|h,\\<epsilon\\>|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|h>>|<row|<cell|SHA256<rsub|MD><around*|\\<langle\\>|h,b\\<blacktriangleleft\\>l|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|MD><around*|\\<langle\\>|SHA256<rsub|Block><around*|\\<langle\\>|h,b|\\<rangle\\>>,l|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  The block compression function <math|SHA256<rsub|Block>\\<of\\><2><rsup|256>\\<times\\><2><rsup|512>\\<rightarrow\\><2><rsup|256>>\n  is a function whose type fits in Simplicity's framework. We can create a\n  core Simplicity term <math|<math-ss|sha256-block>\\<of\\><2><rsup|256>\\<times\\><2><rsup|512>\\<vdash\\><2><rsup|256>>\n  that implements this function\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|sha256-block>|\\<rrbracket\\>>=SHA256<rsub|Block>\n  </equation*>\n\n  We can also define SHA-256's initial value\n  <math|<math-ss|sha256-iv>\\<of\\><value|1>\\<vdash\\><2><rsup|256>>.\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|sha256-iv>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>=SHA256<rsub|IV>\n  </equation*>\n\n  Beyond defining the block compression function in the Simplicity language,\n  we will also be using the SHA-256 hash function elsewhere in this\n  specification. In practice, SHA-256 is applied to byte strings rather than\n  bit strings. To this end, we define the variant\n  <math|SHA256<rsub|<2><rsup|8>>\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>\\<rightarrow\\><2><rsup|256>>.\n\n  <\\equation*>\n    SHA256<rsub|<2><rsup|8>>\\<assign\\>SHA256<rsub|<2>>\\<circ\\>\\<mu\\><rsup|\\<ast\\>>\\<circ\\><around*|(|\\<iota\\><rsup|<2><rsup|8>><rsub|<2><rsup|\\<ast\\>>>|)><rsup|\\<ast\\>>\n  </equation*>\n\n  where <math|\\<iota\\><rsup|<2><rsup|8>><rsub|<2><rsup|\\<ast\\>>>\\<of\\><2><rsup|8>\\<rightarrow\\><2><rsup|\\<ast\\>>>\n  formally converts a byte to a bit string (in big endian format).\n\n  <\\equation*>\n    \\<iota\\><rsup|<2><rsup|8>><rsub|<2><rsup|\\<ast\\>>><around*|\\<langle\\>|<around*|\\<langle\\>|<around*|\\<langle\\>|b<rsub|0>,b<rsub|1>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|2>,b<rsub|3>|\\<rangle\\>>|\\<rangle\\>>,<around*|\\<langle\\>|<around*|\\<langle\\>|b<rsub|4>,b<rsub|5>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|6>,b<rsub|7>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>\\<assign\\>b<rsub|0>\\<blacktriangleleft\\>b<rsub|1>\\<blacktriangleleft\\>b<rsub|2>\\<blacktriangleleft\\>b<rsub|3>\\<blacktriangleleft\\>b<rsub|4>\\<blacktriangleleft\\>b<rsub|5>\\<blacktriangleleft\\>b<rsub|6>\\<blacktriangleleft\\>b<rsub|7>\\<blacktriangleleft\\>\\<epsilon\\>\n  </equation*>\n\n  Since the <math|SHA256<rsub|<2><rsup|8>>> variant is so commonly used, we\n  will write it unadorned as simply <math|SHA256>.\n\n  <subsubsection|Tagged Hashes>\n\n  BIP-340, BIP-341 used a \\Ptagged-hash\\Q format to help avoid message\n  collisions between different message variants. We adopt the same format\n  here to avoid message collisions within a Simplicity application and we\n  hope to avoid message collision across various applications.\n\n  The tagged hash format begins every message with one block prefix which\n  indicate the variant, or type of digest data being hashed. This first block\n  consists of the SHA-256 digest of a string repeated twice. \\ Given a byte\n  string <math|t\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>, we can\n  defined the tagged hash of bit strings,\n  <math|SHA256<rsup|t><rsub|<2>>\\<of\\><2><rsup|\\<ast\\>>\\<rightarrow\\><2><rsup|256>>,\n  and byte strings, \\ <math|SHA256<rsup|t><rsub|<2><rsup|8>>\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>\\<rightarrow\\><2><rsup|256>>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|SHA256<rsup|t><rsub|<2>><around*|(|x|)>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|<2>><around*|(|\\<mu\\><rsup|\\<ast\\>><around*|(|<around*|(|\\<iota\\><rsup|<2><rsup|8>><rsub|<2><rsup|\\<ast\\>>>|)><rsup|\\<ast\\>><around*|(|p\\<cdummy\\>p|)>|)>\\<cdummy\\>x|)>>>|<row|<cell|SHA256<rsup|t><rsub|<2><rsup|8>><around*|(|x|)>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|<2><rsup|8>><around*|(|p\\<cdummy\\>p\\<cdummy\\>x|)>>>|<row|<cell|>|<cell|where>|<cell|p\\<assign\\>BE<rsub|256><around*|(|SHA256<rsub|<2><rsup|8>><around*|(|t|)>|)>>>>>\n  </eqnarray*>\n\n  \\ We can compute the SHA-256 midstate after compressing this first block\n  containing the prefix tag.\n\n  <\\equation*>\n    SHA256<rsup|t><rsub|IV>\\<assign\\>SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsub|IV>,\\<Delta\\><around*|(|SHA256<rsub|<2><rsup|8>><around*|(|t|)>|)>|\\<rangle\\>>\n  </equation*>\n\n  \\;\n\n  <subsection|Elliptic Curve Operations on secp256k1>\n\n  The Standards for Efficient Cryptography (SEC) documents have recommend\n  modular elliptic curve parameters including the secp256k1\n  curve<nbsp><cite|sec2>, which is used by Bitcoin's EC-DSA signature scheme\n  and the proposed EC-Schnorr scheme.\n\n  Most points on an elliptic curve, such as secp256k1, consist of a pair of\n  coordinates from a specified finite field. In the case of secp256k1, the\n  finite field is the prime field <math|\\<bbb-F\\><rsub|p><rsub|>> where\n  <math|p\\<assign\\>2<rsup|256>-4294968273>. The elliptic curve for secp256k1\n  consists of the points <math|<around*|\\<langle\\>|x,y|\\<rangle\\>>>\n  satisfying the equation <math|y<rsup|2>\\<equiv\\>x<rsup|3>+7 <around*|(|mod\n  p|)>>, plus an additional \\Ppoint at infinity\\Q, which we will write as\n  <math|\\<cal-O\\>>. It turns out that elliptic curves can be given a group\n  structure via \\Pgeometry\\Q, where any three points on the curve that are\n  co-linear sum to 0 under this group structure, and where <math|\\<cal-O\\>>\n  is the group's identity element. We have to be careful to count lines\n  \\Ptangent\\Q to the curve as passing through the same point twice, and count\n  vertical lines as passing through <math|\\<cal-O\\>>. This group structure is\n  Abelian, and therefore can also be viewed as a\n  <math|\\<bbb-Z\\><rsub|n>>-module<\\footnote>\n    Mathematically, we actually have a 1-dimensional vector space; however\n    determining the linear dependence between two vectors is presumed to be\n    infeasible. Indeed, the security properties of the elliptic curve depends\n    on this being infeasible. For this reason, it is more useful to think of\n    this structure as a module rather than as a vector space.\n  </footnote> where <math|n \\<assign\\> 2<rsup|256>-432420386565659656852420866394968145599>\n  is the order of this elliptic curve. This <math|\\<bbb-Z\\><rsub|n>>-module\n  structure allows us to talk about \\Padding\\Q two points of the elliptic\n  curve, and scaling a point by a factor from <math|\\<bbb-Z\\><rsub|n>>.\n\n  Because the order of the elliptic curve, <math|n>, is a prime number, every\n  non-<math|\\<cal-O\\>> element generates the entire curve (through scalar\n  multiplication). The specification for secp256k1 comes with a reference\n  generator, <math|\\<cal-G\\>>, which is defined as the following point.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<cal-G\\>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|55066263022277343669578718895168534326250603453777594175500187360389116729240<next-line>,32670510020758816978083085130507043184471273380659243275938904335757337482424|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  <subsubsection|libsecp256k1>\n\n  The libsecp256k1 library<nbsp><cite|libsecp256k1> is a C implementation of\n  optimized functions on this elliptic curve. This library has two variants\n  for the representation of elliptic curve point values. The affine\n  coordinate representation consists of a pair of field elements, and a flag\n  to indicate the value <math|\\<cal-O\\>> (in which case the coordinate values\n  are ignored). The Jacobian coordinate representation consists of a triple\n  of field elements, and a flag to indicate the value <math|\\<cal-O\\>> (in\n  which case the coordinates are ignored).\n\n  A point in Jacobian coordinates, <math|<around*|\\<langle\\>|x,y,z|\\<rangle\\>>>\n  is defined to be on the elliptic curve when\n\n  <\\equation*>\n    y<rsup|2>\\<equiv\\>x<rsup|3>+7z<rsup|6> <around*|(|mod p|)>\n  </equation*>\n\n  and two points in Jacobian coordinates are equivalent,\n  <math|<around*|\\<langle\\>|x<rsub|0>,y<rsub|0>,z<rsub|0>|\\<rangle\\>>\\<asymp\\><around*|\\<langle\\>|x<rsub|1>,y<rsub|1>,z<rsub|1>|\\<rangle\\>>>,\n  when\n\n  <\\equation*>\n    x<rsub|0>*z<rsub|1><rsup|2>\\<equiv\\>x<rsub|1>*z<rsub|0><rsup|2>\n    <around*|(|mod p|)><text| and >y<rsub|0>*z<rsub|1><rsup|3>\\<equiv\\>y<rsub|1>*z<rsub|0><rsup|3>\n    <around*|(|mod p|)><text|.>\n  </equation*>\n\n  A point in Jacobian coordinates, <math|<around*|\\<langle\\>|x,y,z|\\<rangle\\>>>\n  represents the curve point <math|<around*|\\<langle\\>|x*z<rsup|-2>,y*z<rsup|-3>|\\<rangle\\>>>\n  in affine coordinates when <math|z\\<neq\\>0>. In particular, the point\n  <math|<around*|\\<langle\\>|x,y,1|\\<rangle\\>>> in Jacobian coordinates\n  represents the point <math|<around*|\\<langle\\>|x,y|\\<rangle\\>>> in affine\n  coordinates. The same point has multiple representations in Jacobian\n  coordinates, however, even the affine coordinate representation is\n  redundant because the underlying field representation is itself redundant.\n\n  Normally the point at infinity would be represented by\n  <math|<around*|\\<langle\\>|a<rsup|2>,a<rsup|3>,0|\\<rangle\\>>> in Jacobian\n  coordinates for any <math|a\\<in\\>\\<bbb-F\\><rsub|p>>; however this is not\n  done in libsecp256k1. Instead a flag is used to represent the point at\n  infinity (and the coordinates are ignored when this flag is set). Testing\n  if a field element is equivalent to 0 is a non-trivial operation, so using\n  a flag like this may be sensible.\n\n  The various group and <math|\\<bbb-Z\\><rsub|n>>-module operations are\n  implemented efficiently, again subject to various specific preconditions on\n  their inputs. In particular, the operation for forming linear combinations\n  of the form\n\n  <\\equation*>\n    <big|sum><rsub|i=0><rsup|k>n<rsub|\\<cal-A\\><rsub|i>>*\\<cal-A\\><rsub|i>+n<rsub|\\<cal-G\\>>*\\<cal-G\\>\n  </equation*>\n\n  is supported using an algorithm known as Shamir's trick, where\n  <math|n<rsub|\\<cal-A\\><rsub|i>>\\<of\\>\\<bbb-Z\\><rsub|n>>,\n  <math|n<rsub|\\<cal-G\\>>\\<of\\>\\<bbb-Z\\><rsub|n>>, and\n  <math|\\<cal-A\\><rsub|i>> are points on the elliptic curve.\n\n  <subsubsection|libsecp256k1 in Simplicity>\n\n  The primary application for Simplicity is to implement computation for\n  public validation. In implementing cryptographic operations in Simplicity,\n  we have no need to worry about constant-time implementations, nor securing\n  private key material because Simplicity's application only processes public\n  data.\n\n  When it comes to implementing elliptic curve operations in Simplicity, we\n  do face one problem. In order for elliptic curve operations to be fast, we\n  need a representation of field elements and curve points that have\n  redundant representations, but then the choice of which specific\n  representative returned by Simplicity expressions becomes consensus\n  critical.\n\n  We see three possible ways of addressing this problem:\n\n  <\\enumerate-numeric>\n    <item>We can define minimal Simplicity types that can represent field\n    elements and elliptic curve points and return values in normal form after\n    every elliptic curve operation.\n\n    <item>We can define Simplicity types that can represent field elements\n    and elliptic curve points with redundant representations and specify\n    precisely which representative is the result of each elliptic curve\n    operation.\n\n    <item>We can extend Simplicity with abstract data types for field\n    elements and elliptic curve points and enforce data abstraction in the\n    elliptic curve operations.\n  </enumerate-numeric>\n\n  Option 1 would make it easy for developers to implement elliptic curve jets\n  (see Section<nbsp><inactive|<reference|<with|color|red|TODO>>>) that\n  short-cut the interpretation of Simplicity's elliptic curve operations by\n  running native code instead. The native code for these jets can be\n  implemented by any reasonable algorithm, and the results normalized. The\n  problem with this option is that computing the normal form of elliptic\n  curve points is an expensive operation. In particular, normalizing a point\n  in Jacobian coordinates requires computing a modular inverse, which is a\n  very expensive operation compared to the other field operations.\n\n  Option 2 means we must ensure that the native code for jets returns exactly\n  the same representative that the Simplicity expression it replaces would\n  have produced. Even libsecp256k1 does not guarantee that different versions\n  of the library will return the same representatives for its basic elliptic\n  curve operations, so Simplicity jets would not be able to keep up with\n  libsecp256k1 updates.\n\n  Option 3 would let us change the underlying representations of elliptic\n  curve values, allowing us to use any version of any secp256k1 library.\n  However, it would extend the scope of Simplicity beyond what we are willing\n  to do.\n\n  We have chosen to go with option 2. We have reimplemented the exact same\n  algorithms for field and elliptic curve operations that the most recent\n  release of libsecp256k1 uses as of the time of this writing, including\n  computing of linear combinations of the form\n\n  <\\equation*>\n    n<rsub|\\<cal-A\\><rsub|>>*\\<cal-A\\>+n<rsub|\\<cal-G\\>>*\\<cal-G\\>\n  </equation*>\n\n  which is used for Schnorr signature validation. Our jets will be tied to\n  this specific version of libsecp256k1, and the commitment Merkle root (see\n  Section<nbsp><reference|ss:cmr>) captures the formal specification of the\n  functional behaviour of our jets. The libsecp256k1 is already reasonably\n  mature, so we are not expecting to lose out too much by missing future\n  advances. When there are major improvements, new versions of Simplicity\n  jets could be substituted in by using a versioning mechanism for\n  Simplicity.\n\n  In Simplicity, we represent a field element by the type\n\n  <\\equation*>\n    FE\\<assign\\><2><rsup|256>\n  </equation*>\n\n  and a value <math|a\\<of\\>FE> represents the field element\n\n  <\\equation*>\n    <around*|\\<lceil\\>|a|\\<rceil\\>><rsub|FE>\\<assign\\><around*|\\<lceil\\>|a|\\<rceil\\>><rsub|256>\n    <around*|(|mod p|)><text|.>\n  </equation*>\n\n  We represent non-<math|\\<cal-O\\>> points on the secp256k1 elliptic curve in\n  affine coordinates by the type\n\n  <\\equation*>\n    GE\\<assign\\>FE\\<times\\>FE\n  </equation*>\n\n  and a value <math|<around*|\\<langle\\>|x,y|\\<rangle\\>>\\<of\\>GE> represents\n  the point\n\n  <\\equation*>\n    <around*|\\<lceil\\>|<around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|GE>\\<assign\\><around*|\\<langle\\>|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|FE>,<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|FE>|\\<rangle\\>><text|.>\n  </equation*>\n\n  We also represent points on the secp256k1 elliptic curve in Jacobian\n  coordinates by the type\n\n  <\\equation*>\n    GEJ\\<assign\\>GE\\<times\\>FE\n  </equation*>\n\n  and a value <math|<around*|\\<langle\\>|<around*|\\<langle\\>|x,y|\\<rangle\\>>,z|\\<rangle\\>>>\n  represents the point\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<langle\\>|x,y|\\<rangle\\>>,z|\\<rangle\\>>|\\<rceil\\>><rsub|GEJ>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|FE>\\<cdot\\><around*|\\<lceil\\>|z|\\<rceil\\>><rsub|FE><rsup|-2>\n    <around*|(|mod p|)>,<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|FE>\\<cdot\\><around*|\\<lceil\\>|z|\\<rceil\\>><rsub|FE><rsup|-3>\n    <around*|(|mod p|)>|\\<rangle\\>><htab|5mm><text|when\n    <math|<around*|\\<lceil\\>|z|\\<rceil\\>><rsub|FE> \\<nequiv\\>0 <around*|(|mod\n    p|)>>>>>|<row|<cell|<around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<langle\\>|x,y|\\<rangle\\>>,z|\\<rangle\\>>|\\<rceil\\>><rsub|GEJ>>|<cell|\\<assign\\>>|<cell|\\<cal-O\\><htab|5mm><text|when\n    <math|<around*|\\<lceil\\>|z|\\<rceil\\>><rsub|FE>\\<equiv\\>0 <around*|(|mod\n    p|)>> and ><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|FE><rsup|2>\\<equiv\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|FE><rsup|3>\n    <around*|(|mod p|)><text|.>>>>>\n  </eqnarray*>\n\n  The translation between libsecp256k1's affine coordinate representation of\n  elliptic curve points and Simplicity's <math|GE> is straightforward except\n  that Simplicity's <math|GE> type has no flag and cannot represent the\n  <math|\\<cal-O\\>> point. The translation between libsecp256k1's Jacobian\n  coordinate representation of elliptic curve points and Simplicity's\n  <math|GEJ> type is mostly straight forward, however the <math|GEJ> type\n  represents the <math|\\<cal-O\\>> point using a z-coordinate representing 0,\n  while libsecp256k1 uses a flag to represent the <math|\\<cal-O\\>> point.\n\n  The Simplicity implementation of libsecp256k1 is designed so that\n  libsecp256k1 can be used as jets for these Simplicity expressions. As such,\n  the Simplicity expressions are designed to mimic the exact behaviour of a\n  specific version of libsecp256k1's elliptic curve functions. For inputs of\n  particular representations of point in Jacobian coordinates, the Simplicity\n  expression returns the exact same representative for its result as\n  libsecp256k1. If an off-curve point is passed to a libsecp256k1 function,\n  the Simplicity code again computes the same result that the libsecp256k1\n  function does.\n\n  The only subtle point with using libsecp256k1 for jets lies in the\n  different representation of <math|\\<cal-O\\>>. The inputs and outputs of\n  operations need to be suitable translated between the two representations.\n  However, this can be done as part of the marshalling code for the jets, and\n  the Simplicity expressions are written with this in mind.\n\n  <subsubsection|Schnorr Signature Validation>\n\n  With elliptic curve operations defined, we are able to implement Schnorr\n  signature validation in accordance with the BIP-0340\n  specification<nbsp><cite|bip-0340>. We define Simplicity types for the\n  formats of x-only public keys, <math|PubKey>; messages, <math|Msg>; and\n  Schnorr signatures, <math|Sig>, below.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|PubKey>|<cell|\\<assign\\>>|<cell|<2><rsup|256>>>|<row|<cell|Msg>|<cell|\\<assign\\>>|<cell|<2><rsup|256>>>|<row|<cell|Sig>|<cell|\\<assign\\>>|<cell|<2><rsup|512>>>>>\n  </eqnarray*>\n\n  The <math|PubKey> type is an x-coordinate of a point whose y-coordinate's\n  least significant bit is even. A <math|Msg> value <math|m> represents the\n  byte-string <math|BE<rsub|256><around*|(|m|)>> for a Schnorr signature's\n  message, and a <math|Sig> value <math|a> represents the byte-string\n  <math|BE<rsub|512><around*|(|a|)>> for a Schnorr signature.\n\n  We have implemented a core Simplicity expression to check a Schnorr\n  signature for a public key on a given message:\n\n  <\\equation*>\n    <math-ss|bip-0340-check>\\<of\\><around*|(|PubKey\\<times\\>Msg|)>\\<times\\>Sig\\<vdash\\><2>\n  </equation*>\n\n  The semantics are such that <math|<around*|\\<llbracket\\>|<math-ss|bip-0340-check>|\\<rrbracket\\>><around*|\\<langle\\>|<around*|\\<langle\\>|p,m|\\<rangle\\>>,s|\\<rangle\\>>=<math-tt|1><rsub|<2>>>\n  only when the values that the inputs represents satisfy the verification\n  conditions of the BIP-0340 specification.\n\n  <section|Completeness Theorem>\n\n  General purpose programming languages are famously incomplete because there\n  are functions that are uncomputable, the halting problem being the most\n  famous of these. Core Simplicity is even more limited that these general\n  purpose programming languages because its denotational semantics are\n  limited to functions from finite types to finite types.\n\n  However, we can ask the question, is every function from a finite type to a\n  finite type expressible in core Simplicity? This question is answered by\n  the following completeness theorem.\n\n  <\\theorem>\n    <label|thm:CSCT>Core Simplicity Completeness Theorem. For any Simplicity\n    types <math|A> and <math|B> and any function <math|f:A\\<rightarrow\\>B>,\n    there exists some core Simplicity term <math|t> such that for all\n    <math|a:A>,\n\n    <\\equation*>\n      <around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>=f<around*|(|a|)>\n    </equation*>\n  </theorem>\n\n  This result is possible because these functions are all finitary and can\n  be, in principle, expressed as a large lookup table. It is possible to\n  encode these lookup tables with Simplicity expressions. The formal proof of\n  this theorem can be found in the Coq library (see\n  Section<nbsp><reference|ss:coqInitial>).\n\n  It is worth emphasizing that this result is a purely theoretical result\n  that shows that core Simplicity is fully expressive for its domain; it is\n  completely impractical to generate Simplicity expressions this way as many\n  expressions would be astronomical in size. Thus we can view Simplicity\n  programming as an exercise in compression: how can we take advantage of the\n  structure within computations to express our functions succinctly.\n\n  One practical variant of the core Simplicity completeness theorem is that\n  for any value of a Simplicity type <math|b\\<of\\>B>, the constant function\n  <math|\\<lambda\\>_\\<point\\>b\\<of\\>A\\<rightarrow\\>B> can be realized by a\n  Simplicity expression. We call the function that constructs this term,\n  <math|<math-ss|scribe><rsub|A,B><around*|(|b|)>\\<of\\>A\\<vdash\\>B>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<math-ss|scribe><rsub|A,<1>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<math-ss|unit>>>|<row|<cell|<math-ss|scribe><rsub|A,B+C><around*|(|<injl-long|B|C|<around*|(|b|)>>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|injl>\n    <around*|(|<math-ss|scribe><rsub|A,B><around*|(|b|)>|)>>>|<row|<cell|<math-ss|scribe><rsub|A,B+C><around*|(|<injr-long|B|C|<around*|(|c|)>>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|injr>\n    <around*|(|<math-ss|scribe><rsub|A,C><around*|(|c|)>|)>>>|<row|<cell|<math-ss|scribe><rsub|A,B\\<times\\>C><around*|\\<langle\\>|b,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<math-ss|scribe><rsub|A,B><around*|(|b|)>\n    \\<vartriangle\\> <math-ss|scribe><rsub|A,C><around*|(|c|)>>>>>\n  </eqnarray*>\n\n  <\\theorem>\n    For all Simplicity types <math|A> and <math|B>, and for all values\n    <math|a\\<of\\>A> and <math|b\\<of\\>B>, <\\equation*>\n      <around*|\\<llbracket\\>|<math-ss|scribe><rsub|A,B><around*|(|b|)>|\\<rrbracket\\>><around*|(|a|)>=b<text|.>\n    </equation*>\n  </theorem>\n\n  <section|Operational Semantics>\n\n  The denotational semantics of Simplicity determine the functional behaviour\n  of expressions. However, they are not suitable for determining the\n  computation resources needed to evaluate expressions. For this reason we\n  define an operational semantics for Simplicity via an abstract machine we\n  call the <dfn|Bit Machine>.\n\n  <subsection|Representing Values as Cell\n  Arrays><label|ss:RepresentingValuesAsCellArrays>\n\n  <assign|carr|<macro|x|<verbatim|[<arg|x>]>>><assign|cearr|<macro|x|<verbatim|[<arg|x><underline|]>>>><assign|rep|<macro|x|y|<math|\\<ulcorner\\><arg|x>\\<urcorner\\><rsub|<arg|y>>>>>Values\n  in the Bit Machine are represented by arrays of cells where each cell\n  contains one of three values: a <verbatim|0> value, a <verbatim|1> value,\n  or a <verbatim|?> value which we call an undefined value. We write an array\n  of cells by enclosing a sequence of cells with square brackets (e.g.\n  <carr|1?0>). We denote the length of an array using\n  <math|<around*|\\||\\<cdummy\\>|\\|>>. For example,\n  <math|<around*|\\||<carr|1?0>|\\|>=3>. The concatenation of two arrays,\n  <math|a> and <math|b> is denoted by <math|a\\<cdot\\>b>, and replication of\n  an array <math|n> times is denoted by exponentiation, <math|a<rsup|n>>.\n  Sometimes we will omit the dot when performing concatenation.\n\n  For any given type, we define the number of cells needed to hold values of\n  that type using the following <math|bitSize> function.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|bitSize<around*|(|<value|1>|)>>|<cell|\\<assign\\>>|<cell|0>>|<row|<cell|bitSize<around*|(|A+B|)>>|<cell|\\<assign\\>>|<cell|1+max<around*|(|bitSize<around*|(|A|)>,bitSize<around*|(|B|)>|)>>>|<row|<cell|bitSize<around*|(|A\\<times\\>B|)>>|<cell|\\<assign\\>>|<cell|bitSize<around*|(|A|)>+bitSize<around*|(|B|)>>>>>\n  </eqnarray*>\n\n  We define a representation of values of Simplicity types as arrays of cells\n  as follows.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<rep|<around*|\\<langle\\>||\\<rangle\\>>|<value|1>>>|<cell|\\<assign\\>>|<cell|<carr|>>>|<row|<cell|<rep|<injl-long|A|B|<around*|(|a|)>>|A+B>>|<cell|\\<assign\\>>|<cell|<carr|0>\\<cdot\\><carr|?><rsup|padL<around*|(|A,B|)>>\\<cdot\\><rep|a|A>>>|<row|<cell|<rep|<injr-long|A|B|<around*|(|b|)>>|A+B>>|<cell|\\<assign\\>>|<cell|<carr|1>\\<cdot\\><carr|?><rsup|padR<around*|(|A,B|)>>\\<cdot\\><rep|b|B>>>|<row|<cell|<rep|<around*|\\<langle\\>|a,b|\\<rangle\\>>|A\\<times\\>B>>|<cell|\\<assign\\>>|<cell|<rep|a|A>\\<cdot\\><rep|b|B>>>>>\n  </eqnarray*>\n\n  The representation of values of a sum type are padded with undefined cells\n  so that the representation has the proper length.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|padL<around*|(|A,B|)>>|<cell|\\<assign\\>>|<cell|max<around*|(|bitSize<around*|(|A|)>,bitSize<around*|(|B|)>|)>-bitSize<around*|(|A|)>>>|<row|<cell|padR<around*|(|A,B|)>>|<cell|\\<assign\\>>|<cell|max<around*|(|bitSize<around*|(|A|)>,bitSize<around*|(|B|)>|)>-bitSize<around*|(|B|)>>>>>\n  </eqnarray*>\n\n  <\\theorem>\n    Given any value of some Simplicity type, <math|a\\<of\\>A>, we have\n    <math|<around*|\\||<rep|a|A>|\\|>=bitSize<around*|(|A|)>>.\n  </theorem>\n\n  <subsection|Bit Machine>\n\n  A frame is a, possibly empty, cell array with a cursor referencing a cell\n  in the array, which we denote using an underscore.\n\n  <\\equation*>\n    <carr|0<underline|1>?10>\n  </equation*>\n\n  The cursor may also reference the end of the array, which we denote by\n  marking the end of the array with an underscore.\n\n  <\\equation*>\n    <cearr|01?10>\n  </equation*>\n\n  Frames can be concatenated with cell arrays either on the left or on the\n  right without moving the cursor. Note that when concatenating a non-empty\n  cell array onto the right hand side of a frame whose cursor is at the end\n  of the frame, the cursor ends up pointing to the first cell of the added\n  cell array.\n\n  <\\equation*>\n    <cearr|01?10><carr|111??>=<carr|01?10<wide*|1|\\<bar\\>>11??>\n  </equation*>\n\n  <assign|emptyFrame|<math|<tiny|\\<wedge\\>>>>We will sometimes denote the\n  empty frame, <math|<cearr|>>, with a small cursor, <value|emptyFrame>.\n\n  The state of the Bit Machine consists of two non-empty stacks of frames: a\n  read-frame stack and a write-frame stack. The top elements of the two\n  stacks are called the <dfn|active read frame> and the <dfn|active write\n  frame> respectively. The other frames are called inactive read-frames and\n  inactive write-frames.\n\n  <big-figure|<tabular|<tformat|<cwith|1|1|1|-1|cell-tborder|2px>|<cwith|5|5|1|-1|cell-bborder|2px>|<cwith|1|1|1|-1|cell-bborder|1px>|<table|<row|<cell|read\n  frame stack>|<cell|write frame stack>>|<row|<cell|<carr|100<underline|1>1??110101000>>|<cell|<cearr|11??1101>>>|<row|<cell|<carr|<underline|0>000>>|<cell|<carr|111<underline|?>?>>>|<row|<cell|<cearr|>>|<cell|>>|<row|<cell|<carr|<underline|1>0>>|<cell|>>>>>|Example\n  state of the Bit Machine.>\n\n  <assign|halted|<math|<op|\\<boxtimes\\>>>>Notationally we will write a stack\n  of read frames as <math|r<rsub|n>\\<vartriangleright\\>\\<ldots\\>\\<vartriangleright\\>r<rsub|1>\\<vartriangleright\\>r<rsub|0>>,\n  with <math|r<rsub|0>> as the active read frame. We will write a stack of\n  write frames in the opposite order, as <math|w<rsub|0>\\<vartriangleleft\\>w<rsub|1>\\<vartriangleleft\\>\\<ldots\\>\\<vartriangleleft\\>w<rsub|m>>\n  with <math|w<rsub|0>> as the active write frame. We write a state of the\n  Bit Machine as <math|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>>\n  where <math|\\<Theta\\>> is the (possibly empty) inactive read frame stack,\n  <math|\\<Xi\\>> is the (possibly empty) inactive write frame stack,\n  <math|r<rsub|0>> is the active read frame, and <math|w<rsub|0>> is the\n  active write frame.<\\footnote>\n    The notation for the Bit Machine's state is intended to mimic the gap\n    buffer used in our C implementation of the Bit Machine (see\n    <with|color|red|TODO: C implementation>).\n  </footnote> There is one additional state of the Bit Machine called the\n  <dfn|halted> state, which we denote by <value|halted>.\n\n  The Bit Machine has nine basic instructions that, when executed, transform\n  the Bit Machine's state. We denote these basic instructions as\n  <math|i\\<of\\>S<rsub|0>\\<rightsquigarrow\\>S<rsub|1>>, where <math|i> is the\n  instructions's name, <math|S<rsub|0>> is a state of the Bit Machine before\n  executing the instruction, and <math|S<rsub|1>> is the state of the machine\n  after the successful execution of the instructions.\n\n  <subsubsection|Frame Instructions>\n\n  Our first three basic instructions, create, move, and delete active frames.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|newFrame<around*|(|n|)>>|<cell|:>|<cell|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|<emptyFrame><carr|?><rsup|n>\\<vartriangleleft\\>w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>>>|<row|<cell|moveFrame>|<cell|:>|<cell|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|<cearr|c<rsub|1>*\\<cdots\\>*c<rsub|n>>\\<vartriangleleft\\>w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<vartriangleright\\><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>*c<rsub|n>>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>>>|<row|<cell|dropFrame>|<cell|:>|<cell|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|1>\\<vartriangleright\\>r<rsub|0>\\|\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|1>\\|\\<Xi\\>|]>>>>>\n  </eqnarray*>\n\n  Executing a <math|newFrame<around*|(|n|)>> instruction pushes a new frame\n  of length <math|n> onto the write frame stack. This new frame has its\n  cursor at the beginning of the frame and the entire frame is filled with\n  undefined values. It is legal for the new frame to have length 0.\n\n  Executing the <math|moveFrame> instruction moves the top frame of the write\n  frame stack to the read frame stack. This instruction is only legal to\n  execute when the cursor of the active write frame is at the end of the\n  frame. The cursor is reset to the beginning of the frame when it is placed\n  onto the read frame stack.\n\n  Executing the <math|dropFrame> instruction removes the top frame of the\n  read frame stack.\n\n  <subsubsection|Active Write Frame Instructions>\n\n  Our next three instructions operate on the active write frame.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|write<around*|(|0|)>>|<cell|:>|<cell|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<cdummy\\><carr|<wide*|?|\\<bar\\>>><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<cdummy\\><cearr|0><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>>|<row|<cell|write<around*|(|1|)>>|<cell|:>|<cell|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<cdummy\\><carr|<wide*|?|\\<bar\\>>><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<cdummy\\><cearr|1><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>>|<row|<cell|skip<around*|(|n|)>>|<cell|:>|<cell|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0><emptyFrame><carr|?><rsup|n+m>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<cdummy\\><carr|?><rsup|n><emptyFrame><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>>|<row|<cell|copy<around*|(|n|)>>|<cell|:>|<cell|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>*c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><emptyFrame><carr|?><rsup|n+m>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>*c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<cdummy\\><cearr|c<rsub|1>*\\<cdots\\>*c<rsub|n>><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>>>>\n  </eqnarray*>\n\n  Executing a <math|write<around*|(|b|)>> instruction writes a 0 or 1 to the\n  active write frame and advances its cursor. Writing an undefined value\n  using this instruction is not allowed. The cursor cannot be at the end of\n  the frame.\n\n  Executing a <math|skip<around*|(|n|)>> instruction advances the active\n  write frame's cursor without writing any data. There must be sufficient\n  number of cells after the cursor. The trivial instruction\n  <math|skip<around*|(|0|)>> is legal and executing it is effectively a\n  no-op.\n\n  Executing a <math|copy<around*|(|n|)>> instruction copies the values of the\n  <math|n> cells after the active read frame's cursor into the active write\n  frame, advancing the write frame's cursor. The must be a sufficient number\n  of cells after both the active read frame and active write frame's cursors.\n  Note that undefined cell values are legal to copy. The trivial instruction\n  <math|copy<around*|(|0|)>> is legal and executing it is effectively a\n  no-op.\n\n  <subsubsection|Active Read Frame Instructions>\n\n  The next two instructions are used to manipulate the active read frame's\n  cursor.\n\n  <\\equation*>\n    fwd<around*|(|n|)>\\<of\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>*c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><cearr|c<rsub|1>*\\<cdots\\>*c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>\n  </equation*>\n\n  <\\equation*>\n    bwd<around*|(|n|)>\\<of\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><cearr|c<rsub|1>*\\<cdots\\>*c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>*c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>\n  </equation*>\n\n  Executing a <math|fwd<around*|(|n|)>> instructions moves the cursor on the\n  active read frame forward, and executing a <math|bwd<around*|(|n|)>>\n  instruction moves the cursor backwards. In both cases there must be\n  sufficient number of cells before or after the cursor. The trivial\n  instructions <math|fwd<around*|(|0|)>> and <math|bwd<around*|(|0|)>> are\n  legal and executing them are effectively no-ops.\n\n  <subsubsection|Abort Instruction>\n\n  The final instruction of for the Bit Machine moves from any non-halted\n  state into the halted state.\n\n  <\\equation*>\n    abort\\<of\\><around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>\\<rightsquigarrow\\><halted>\n  </equation*>\n\n  This is the only way to enter the halted state, and once in the halted\n  state no further instructions can be executed.\n\n  <subsubsection|Bit Machine Programs>\n\n  <assign|prog|<macro|x|p|y|<math|<arg|x><math-relation|\\<#291C\\>><arg|p>\\<twoheadrightarrow\\><arg|y>>>>The\n  basic instructions of the Bit Machine are combined to produce programs that\n  take the Bit Machine through a sequence of states. We write\n  <prog|S<rsub|0>|k|S<rsub|1>> for a program, <math|k>, that, when executed,\n  successfully transforms an initial state <math|S<rsub|0>> to the final\n  state <math|S<rsub|1>>.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<cwith|1|1|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-col-span|2>|<table|<row|<cell|<prog|S|nop|S>>>>>>\n  </with>\n\n  We write <math|nop> for the trivial program with no instructions. The\n  initial and final states are identical in this case.\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<math|i:S<rsub|0>\\<rightsquigarrow\\>S<rsub|1>>>>|<row|<cell|<prog|S<rsub|0>|i|S<rsub|1>>>>>>>\n  </with>\n\n  For every basic instruction there is a single instruction program whose\n  initial and final states match those of the basic instruction.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<prog|S<rsub|0>|k<rsub|0>|S<rsub|1>>>|<cell|<prog|S<rsub|1>|k<rsub|1>|S<rsub|2>>>>>>>>>|<row|<cell|<prog|S<rsub|0>|k<rsub|0>;k<rsub|1>|S<rsub|2>>>>>>>\n  </with>\n\n  \\;\n\n  We write <math|k<rsub|0>;k<rsub|1>> for a sequence of two programs,\n  <math|k<rsub|0>> and <math|k<rsub|1>>. The Bit Machine executes the two\n  programs in turn, concatenating the sequence of states of the two programs.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|0|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|0>|S<rsub|>>>>|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|0|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|0>\\|\\|k<rsub|1>|S>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|1|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|1>|S>>>|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|1|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|0>\\|\\|k<rsub|1>|S>>>>>>\n  </with>\n\n  We define <math|k<rsub|0>\\|\\|k<rsub|1>> as a deterministic choice between\n  two programs, <math|k<rsub|0>> and <math|k<rsub|1>>. When executing a\n  deterministic choice, the value under the active read frame's cursor\n  decides which one of the two programs are executed. When encountering a\n  deterministic choice, the active read frame's cursor must not be at the end\n  of its array and the cell under the cursor must not be an undefined value.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<cwith|1|1|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-col-span|2>|<table|<row|<cell|<prog|<halted>|k|<halted>>>>>>>\n  </with>\n\n  Lastly, we stipulate that every program when executed from the halted state\n  ignores all instructions and perform a no-op instead.\n\n  Take care to note this difference between instructions and programs\n  containing one instruction. A single instruction cannot be executed\n  starting from the halted state, while a program that consists of a single\n  instruction can be run starting from the halted state (however, it does\n  nothing from this state).\n\n  <\\equation*>\n    n\\<star\\>k\\<assign\\>fwd<around*|(|n|)>;k;bwd<around*|(|n|)>\n  </equation*>\n\n  The <math|n\\<star\\>k> notation (called \\Pbump\\Q) is for a program that\n  temporarily advances the active read frame's cursor when executing\n  <math|k>.\n\n  <\\theorem>\n    \\;\n\n    <\\with|par-mode|center>\n      <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><cearr|c<rsub|1>\\<cdots\\>c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><cearr|c<rsub|1>\\<cdots\\>c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>>>>|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|n\\<star\\>k|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>c<rsub|n>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>>>>>>>\n    </with>\n\n    \\;\n  </theorem>\n\n  <subsubsection|Crashing the Bit Machine>\n\n  Bit Machine programs are deterministic. Given a program <math|k> and an\n  initial state <math|S<rsub|0>> there exists at most one state\n  <math|S<rsub|1>> such that <prog|S<rsub|0>|k|S<rsub|1>>. However it is\n  possible that there is no state <math|S<rsub|1>> such that\n  <prog|S<rsub|0>|k|S<rsub|1>> given an initial state for a program. This\n  happens when the Bit Machine is trying to execute a single instruction\n  program, <math|i>, from a non-halted state where that instruction cannot\n  legally execute from. This can also happen when a deterministic choice\n  operation is encountered starting from a state where the active read\n  frame's cursor is at the end of the frame, or is referencing and undefined\n  value.\n\n  When a program cannot execute to completion from a given initial state, we\n  say that the Bit Machine crashes, or we say that the program crashes the\n  Bit Machine. Crashing is distinct from halting. We will have a number of\n  theorems that prove that a Bit Machine interpreting a Simplicity expression\n  from a suitable initial state never crashes the Bit Machine; however in\n  some of these cases the program may cause the Bit Machine to legitimately\n  enter the halted state.\n\n  <subsection|Executing Simplicity>\n\n  We recursively translate a core Simplicity program,\n  <math|t\\<of\\>A\\<vdash\\>B>, into a program for the Bit Machine,\n  <math|<around*|\\<llangle\\>|t|\\<rrangle\\>>>, called the naive translation:\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<around*|\\<llangle\\>|<math-ss|iden><rsub|A>|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|copy<around*|(|bitSize<around*|(|A|)>|)>>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|comp><rsub|A,B,C>\n    s t|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|newFrame<around*|(|bitSize<around*|(|B|)>|)>>>|<row|<cell|>|<cell|;>|<cell|<around*|\\<llangle\\>|s|\\<rrangle\\>>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|<around*|\\<llangle\\>|t|\\<rrangle\\>>>>|<row|<cell|>|<cell|;>|<cell|dropFrame>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|unit><rsub|A>|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|nop>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|injl><rsub|A,B,C>\n    t|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|write<around*|(|0|)>;skip<around*|(|padL<around*|(|B,C|)>|)>;<around*|\\<llangle\\>|t|\\<rrangle\\>>>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|injr><rsub|A,B,C>\n    t|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|write<around*|(|1|)>;skip<around*|(|padR<around*|(|B,C|)>|)>;<around*|\\<llangle\\>|t|\\<rrangle\\>>>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|case><rsub|A,B,C,D>\n    s t|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|(|1+padL<around*|(|A,B|)>|)>\\<star\\><around*|\\<llangle\\>|s|\\<rrangle\\>>>>|<row|<cell|>|<cell|\\|\\|>|<cell|<around*|(|1+padR<around*|(|A,B|)>|)>\\<star\\><around*|\\<llangle\\>|t|\\<rrangle\\>>>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|pair><rsub|A,B,C>\n    s t|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llangle\\>|s|\\<rrangle\\>>;<around*|\\<llangle\\>|t|\\<rrangle\\>>>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|take><rsub|A,B,C>\n    t|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llangle\\>|t|\\<rrangle\\>>>>|<row|<cell|<around*|\\<llangle\\>|<math-ss|drop><rsub|A,B,C>\n    t|\\<rrangle\\>>>|<cell|\\<assign\\>>|<cell|bitSize<around*|(|A|)>\\<star\\><around*|\\<llangle\\>|t|\\<rrangle\\>>>>>>\n  </eqnarray*>\n\n  <\\theorem>\n    Given a well-typed core Simplicity program <math|t:A\\<vdash\\>B> and an\n    input <math|a:A>, then\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>+m>\\<vartriangleleft\\>\\<Xi\\>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<cdummy\\><rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>\n    </equation*>\n\n    for any cell arrays <math|r<rsub|0>>, <math|r<rsub|0><rprime|'>>,\n    <math|w<rsub|0>>, any stacks <math|\\<Theta\\>>, <math|\\<Xi\\>>, and any\n    natural number <math|m>.\n  </theorem>\n\n  In particular, for a well-typed core Simplicity program\n  <math|t:A\\<vdash\\>B>, we have\n\n  <\\equation*>\n    <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n  </equation*>\n\n  which means we if we start the Bit Machine with only the input represented\n  on the read stack, and enough space for the output on the write stack, the\n  Bit Machine will compute the representation of the value\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>> without\n  crashing.\n\n  <subsubsection|Tail Composition Optimisation (TCO)>\n\n  <assign|TCOon|<macro|x|<math|<around*|\\<llangle\\>|<arg|x>|\\<rrangle\\>><rsup|TCO><rsub|on>>>><assign|TCOoff|<macro|x|<math|<around*|\\<llangle\\>|<arg|x>|\\<rrangle\\>><rsup|TCO><rsub|off>>>>Traditional\n  imperative language implementations often make use of tail call\n  optimization that occurs when the last command of a procedure is a call to\n  a second procedure. Normally the first procedure's stack frame would be\n  free after the second procedure returns. The tail call optimization instead\n  frees the first procedure's stack frame prior to the call to the second\n  procedure instead. This can reduce the overall memory use of the program.\n\n  The composition combinator, <math|<math-ss|comp>>, in Simplicity plays a\n  role similar to a procedure call. We can perform a tail composition\n  optimization that moves the <math|dropFrame> instruction earlier to reduce\n  the overall memory requirements needed to evaluate Simplicity programs. We\n  define an alternate translation of Simplicity programs to Bit Machine\n  programs via two mutually recursively defined functions,\n  <math|<TCOoff|\\<cdummy\\>>> and <TCOon|\\<cdummy\\>>:\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|15|28|2|2|cell-halign|r>|<table|<row|<cell|<TCOoff|<math-ss|iden><rsub|A>>>|<cell|\\<assign\\>>|<cell|copy<around*|(|bitSize<around*|(|A|)>|)>>>|<row|<cell|<TCOoff|<math-ss|comp><rsub|A,B,C>\n    s t>>|<cell|\\<assign\\>>|<cell|newFrame<around*|(|bitSize<around*|(|B|)>|)>>>|<row|<cell|>|<cell|;>|<cell|<TCOoff|s>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|<TCOon|t>>>|<row|<cell|<TCOoff|<math-ss|unit><rsub|A>>>|<cell|\\<assign\\>>|<cell|nop>>|<row|<cell|<TCOoff|<math-ss|injl><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|write<around*|(|0|)>;skip<around*|(|padL<around*|(|B,C|)>|)>;<TCOoff|t>>>|<row|<cell|<TCOoff|<math-ss|injr><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|write<around*|(|1|)>;skip<around*|(|padR<around*|(|B,C|)>|)>;<TCOoff|t>>>|<row|<cell|<TCOoff|<math-ss|case><rsub|A,B,C,D>\n    s t>>|<cell|\\<assign\\>>|<cell|<around*|(|1+padL<around*|(|A,B|)>|)>\\<star\\><TCOoff|s>>>|<row|<cell|>|<cell|\\|\\|>|<cell|<around*|(|1+padR<around*|(|A,B|)>|)>\\<star\\><TCOoff|t>>>|<row|<cell|<TCOoff|<math-ss|pair><rsub|A,B,C>\n    s t>>|<cell|\\<assign\\>>|<cell|<TCOoff|s>;<TCOoff|t>>>|<row|<cell|<TCOoff|<math-ss|take><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|<TCOoff|t>>>|<row|<cell|<TCOoff|<math-ss|drop><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|bitSize<around*|(|A|)>\\<star\\><TCOoff|t>>>|<row|<cell|>|<cell|>|<cell|>>|<row|<cell|<TCOon|<math-ss|iden><rsub|A>>>|<cell|\\<assign\\>>|<cell|copy<around*|(|bitSize<around*|(|A|)>|)>>>|<row|<cell|>|<cell|;>|<cell|dropFrame>>|<row|<cell|<TCOon|<math-ss|comp><rsub|A,B,C>\n    s t>>|<cell|\\<assign\\>>|<cell|newFrame<around*|(|bitSize<around*|(|B|)>|)>>>|<row|<cell|>|<cell|;>|<cell|<TCOon|s>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|<TCOon|t>>>|<row|<cell|<TCOon|<math-ss|unit><rsub|A>>>|<cell|\\<assign\\>>|<cell|dropFrame>>|<row|<cell|<TCOon|<math-ss|injl><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|write<around*|(|0|)>;skip<around*|(|padL<around*|(|B,C|)>|)>;<TCOon|t>>>|<row|<cell|<TCOon|<math-ss|injr><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|write<around*|(|1|)>;skip<around*|(|padR<around*|(|B,C|)>|)>;<TCOon|t>>>|<row|<cell|<TCOon|<math-ss|case><rsub|A,B,C,D>\n    s t>>|<cell|\\<assign\\>>|<cell|fwd<around*|(|1+padL<around*|(|A,B|)>|)>;<TCOon|s>>>|<row|<cell|>|<cell|\\|\\|>|<cell|fwd<around*|(|1+padR<around*|(|A,B|)>|)>;<TCOon|t>>>|<row|<cell|<TCOon|<math-ss|pair><rsub|A,B,C>\n    s t>>|<cell|\\<assign\\>>|<cell|<TCOoff|s>;<TCOon|t>>>|<row|<cell|<TCOon|<math-ss|take><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|<TCOon|t>>>|<row|<cell|<TCOon|<math-ss|drop><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|fwd<around*|(|bitSize<around*|(|A|)>|)>;<TCOon|t>>>>>\n  </eqnarray*>\n\n  The definition of the <math|<TCOoff|\\<cdummy\\>>> translation is very\n  similar to the naive one, except the <math|dropFrame> instruction at the\n  end of the translation of the composition combinator is replaced by having\n  a recursive call to <math|<TCOon|\\<cdummy\\>>> instead. The definition of\n  <math|<TCOon|\\<cdummy\\>>> puts the <math|dropFrame> instruction in the\n  translations of <math|<math-ss|iden>> and <math|<math-ss|unit>>. The\n  <math|bwd> instructions are removed from the translations of\n  <math|<math-ss|case>> and <math|<math-ss|drop>>. Lastly notice that the\n  first recursive call in the translation of <math|<math-ss|pair>> is to\n  <TCOoff|\\<cdummy\\>>.\n\n  <\\theorem>\n    Given a well-typed core Simplicity program <math|t:A\\<vdash\\>B> and an\n    input <math|a:A>, then\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>+m>\\<vartriangleleft\\>\\<Xi\\>|]>|<TCOoff|t>|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<cdummy\\><rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>\n    </equation*>\n\n    and\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|1>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>+m>\\<vartriangleleft\\>\\<Xi\\>|]>|<TCOon|t>|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|1>\\|w<rsub|0>\\<cdummy\\><rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>\n    </equation*>\n\n    for any cell arrays <math|r<rsub|0>>, <math|r<rsub|0><rprime|'>>,\n    <math|w<rsub|0>>, any frame <math|r<rsub|1>>, any stacks\n    <math|\\<Theta\\>>, <math|\\<Xi\\>>, and any natural number <math|m>.\n  </theorem>\n\n  In particular, for a well-typed core Simplicity program\n  <math|t:A\\<vdash\\>B>, we have\n\n  <\\equation*>\n    <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n  </equation*>\n\n  <section|Static Analysis>\n\n  Static analysis lets us quickly compute properties of expressions, without\n  the need for exhaustively executing expressions on all possible inputs. We\n  use static analysis in Simplicity to bound the computation costs in terms\n  of time and space of Simplicity expressions for all their inputs. The\n  analysis we do are linear in the size of the DAG representing the\n  Simplicity expression, and typically the analysis runs much faster than the\n  cost of evaluating an expression on a single input. We can do this because\n  the intermediate results of static analysis can be shared where there are\n  shared sub-expressions.\n\n  <subsection|Space Resources>\n\n  The primary source of memory resources used by the Bit Machine is the cells\n  used by all the frames that make of the state of Bit Machine. A secondary\n  source of memory resources used comes from the overhead of the frames\n  themselves, which need to store their boundaries or sizes, and the position\n  of their cursors. In our analysis we will make a simplifying assumption\n  that these boundaries / sizes / positions values are all of constant size.\n  This assumption holds when the Bit Machine is implemented on real hardware\n  which has an upper bound on its addressable memory and there is a limit on\n  the number of Cells that can be held anyways.\n\n  To bound these resources we perform a static analysis to compute an upper\n  bound on the maximum number of cells needed when executing a Simplicity\n  program on the Bit Machine for any input, and we compute an upper bound on\n  the maximum number of frames needed as well.\n\n  <subsubsection|Maximum Cell Count Bound>\n\n  We define the cell count of a frame to be the length of its underlying cell\n  array and the cell count of a Bit Machine state to be the sum of the cell\n  counts of all its frames.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|cellCount<around*|(|<carr|c<rsub|1>*\\<cdots\\><wide*|c<rsub|i>|\\<bar\\>>\\<cdots\\>*c<rsub|n>>|)>>|<cell|\\<assign\\>>|<cell|n>>|<row|<cell|cellCount<around*|(|<around*|[|r<rsub|n>\\<vartriangleright\\>\\<ldots\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<ldots\\>\\<vartriangleleft\\>w<rsub|m>|]>|)>>|<cell|\\<assign\\>>|<cell|<big|sum><rsup|n><rsub|i=0>cellCount<around*|(|r<rsub|i>|)>+<big|sum><rsup|m><rsub|j=0>cellCount<around*|(|w<rsub|j>|)>>>|<row|<cell|cellCount<around*|(|<halted>|)>>|<cell|\\<assign\\>>|<cell|0>>>>\n  </eqnarray*>\n\n  We define the cells required by a program <prog|S<rsub|0>|p|S<rsub|1>> as\n  the maximum cell count over every intermediate state.\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<cwith|1|1|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-col-span|2>|<table|<row|<cell|<math|cellsReq<around*|(|<prog|S|nop|S>|)>\\<assign\\>cellCount<around*|(|S|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<math|i:S<rsub|0>\\<rightsquigarrow\\>S<rsub|1>>>>|<row|<cell|<math|cellsReq<around*|(|<prog|S<rsub|0>|i|S<rsub|1>>|)>\\<assign\\>max<around*|(|cellCount<around*|(|S<rsub|0>|)>,cellCount<around*|(|S<rsub|1>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<prog|S<rsub|0>|k<rsub|0>|S<rsub|1>>>|<cell|<prog|S<rsub|1>|k<rsub|1>|S<rsub|2>>>>>>>>>|<row|<cell|<math|cellsReq<around*|(|<prog|S<rsub|0>|k<rsub|0>;k<rsub|1>|S<rsub|2>>|)>\\<assign\\>max<around*|(|cellsReq<around*|(|<prog|S<rsub|0>|k<rsub|0>|S<rsub|1>>|)>,cellsReq<around*|(|<prog|S<rsub|1>|k<rsub|1>|S<rsub|2>>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|0|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|0>|S>>>|<row|<cell|<math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|0|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|0><around*|\\|||\\|>*k<rsub|1>|S>|)>\\<assign\\>cellsReq<around*|(|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|0|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|0>|S>|)>>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|2|2|1|1|cell-col-span|2>|<table|<row|<cell|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><rsub|><carr|<wide*|1|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|1>|S>>>|<row|<cell|<math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|1|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|0><around*|\\|||\\|>*k<rsub|1>|S>|)>\\<assign\\>cellsReq<around*|(|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|1|\\<bar\\>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|k<rsub|1>|S>|)>>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<cwith|1|1|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-col-span|2>|<table|<row|<cell|<math|cellsReq<around*|(|<prog|<halted>|k|<halted>>|)>\\<assign\\>0>>>>>>\n  </with>\n\n  \\;\n\n  Note that when executing a Simplicity expression on the Bit Machine, the\n  size of the state prior and after execution is identical. For naive\n  translation of Simplicity to the Bit Machine, we can write a simple\n  recursive function that bounds the number of additional Cells needed to\n  evaluate a Simplicity expression beyond the size of the initial and final\n  state.\n\n  <\\eqnarray*>\n    <tformat|<cwith|2|10|2|2|cell-halign|r>|<cwith|2|10|2|2|cell-halign|r>|<table|<row|<cell|extraCellsBound<around*|(|<math-ss|iden><rsub|A>|)>>|<cell|\\<assign\\>>|<cell|0>>|<row|<cell|extraCellsBound<around*|(|<math-ss|comp><rsub|A,B,C>\n    s t|)>>|<cell|\\<assign\\>>|<cell|bitSize<around*|(|B|)>+max<around*|(|extraCellsBound<around*|(|s|)>,extraCellsBound<around*|(|t|)>|)>>>|<row|<cell|extraCellsBound<around*|(|<math-ss|unit><rsub|A>|)>>|<cell|\\<assign\\>>|<cell|0>>|<row|<cell|extraCellsBound<around*|(|<math-ss|injl><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<around*|(|t|)>>>|<row|<cell|extraCellsBound<around*|(|<math-ss|injr><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<around*|(|t|)>>>|<row|<cell|extraCellsBound<around*|(|<math-ss|case><rsub|A,B,C,D>\n    s t|)>>|<cell|\\<assign\\>>|<cell|max<around*|(|extraCellsBound<around*|(|s|)>,extraCellsBound<around*|(|t|)>|)>>>|<row|<cell|extraCellsBound<around*|(|<math-ss|pair><rsub|A,B,C>\n    s t|)>>|<cell|\\<assign\\>>|<cell|max<around*|(|extraCellsBound<around*|(|s|)>,extraCellsBound<around*|(|t|)>|)>>>|<row|<cell|extraCellsBound<around*|(|<math-ss|take><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<around*|(|t|)>>>|<row|<cell|extraCellsBound<around*|(|<math-ss|drop><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<around*|(|t|)>>>>>\n  </eqnarray*>\n\n  <\\lemma>\n    For any core Simplicity expression <math|t:A\\<vdash\\>B>, such that\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|\\<Theta\\><rprime|'>\\<vartriangleright\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>>\n    </equation*>\n\n    we have that\n\n    <\\enumerate>\n      <item><math|cellCount<around*|(|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|)>=cellCount<around*|(|<around*|[|\\<Theta\\><rprime|'>\\<vartriangleright\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>|)>>\n\n      <item><math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|\\<Theta\\><rprime|'>\\<vartriangleright\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>>|)>\\<leq\\><next-line><htab|5mm>cellCount<around*|(|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|)>+extraCellsBound<around*|(|t|)>>.\n    </enumerate>\n\n    In particular for <math|a:A> and\n\n    <\\equation*>\n      <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|><around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>\n    </equation*>\n\n    we have that\n\n    <math|cellsReq<around*|(|<prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|><around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>|)>\\<leq\\><next-line><htab|5mm>bitSize<around*|(|A|)>+bitSize<around*|(|B|)>+extraCellsBound<around*|(|t|)>>.\n  </lemma>\n\n  We can compute a tighter bound for TCO translation, but the calculation is\n  a bit more complicated. The number of extra cells needed depends on whether\n  TCO is in the \\Pon\\Q state, and what the size of the active read frame is.\n\n  <\\eqnarray*>\n    <tformat|<cwith|2|10|2|2|cell-halign|r>|<cwith|2|10|2|2|cell-halign|r>|<table|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|iden><rsub|A>|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|0>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|comp><rsub|A,B,C>\n    s t|)>*<around*|(|r|)>>|<cell|\\<assign\\>>|<cell|bitSize<around*|(|B|)>+max<around*|(|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|s|)><around*|(|r|)>,<next-line>extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|bitSize<around*|(|B|)>|)>-r|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|unit><rsub|A>|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|0>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|injl><rsub|A,B,C>\n    t|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|injr><rsub|A,B,C>\n    t|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|case><rsub|A,B,C,D>\n    s t|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|max<around*|(|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|s|)><around*|(|r|)>,<next-line>extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|r|)>|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|pair><rsub|A,B,C>\n    s t|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|max<around*|(|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|s|)><rsup|\\<nosymbol\\>><around*|(|0|)>,<next-line>extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|r|)>|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|take><rsub|A,B,C>\n    t|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|drop><rsub|A,B,C>\n    t|)><around*|(|r|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)>>>>>\n  </eqnarray*>\n\n  <\\lemma>\n    For any core Simplicity expression <math|t:A\\<vdash\\>B>, such that\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|<TCOon|t>|<around*|[|\\<Theta\\><rsub|on><rprime|'>\\<vartriangleright\\>r<rsub|on,0><rprime|'>\\|w<rsub|on,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|on><rprime|'>|]>><rsup|\\<nosymbol\\>>\n    </equation*>\n\n    and\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|<TCOoff|t><rsup|\\<nosymbol\\>>|<around*|[|\\<Theta\\><rsub|off><rprime|'>\\<vartriangleright\\>r<rsub|off,0><rprime|'>\\|w<rsub|off,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|off><rprime|'>|]>>\n    </equation*>\n\n    we have that\n\n    <\\enumerate>\n      <item><math|cellCount<around*|(|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|)>=cellCount<around*|(|r<rsub|on,0>|)>+cellCount<around*|(|<around*|[|\\<Theta\\><rsub|on><rprime|'>\\<vartriangleright\\>r<rsub|on,0><rprime|'>\\|w<rsub|on,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|on><rprime|'>|]>|)>>\n      and<next-line><math|cellCount<around*|(|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|)>=cellCount<around*|(|<around*|[|\\<Theta\\><rsub|off><rprime|'>\\<vartriangleright\\>r<rsub|off,0><rprime|'>\\|w<rsub|off,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|off><rprime|'>|]>|)>>\n\n      <item><math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|<TCOon|t>|<around*|[|\\<Theta\\><rsub|on><rprime|'>\\<vartriangleright\\>r<rsub|on,0><rprime|'>\\|w<rsub|on,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|on><rprime|'>|]>>|)>\\<leq\\><next-line><htab|5mm>cellCount<around*|(|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|)>+extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|cellCount<around*|(|r<rsub|on,0>|)>|)>>\n      and<next-line><math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|<TCOoff|t><rsup|\\<nosymbol\\>>|<around*|[|\\<Theta\\><rsub|off><rprime|'>\\<vartriangleright\\>r<rsub|off,0><rprime|'>\\|w<rsub|off,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|off><rprime|'>|]>>|)>\\<leq\\><next-line><htab|5mm>cellCount<around*|(|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|)>+extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|0|)>>.\n    </enumerate>\n\n    In particular for <math|a:A> and\n\n    <\\equation*>\n      <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n    </equation*>\n\n    we have that\n\n    <math|cellsReq<around*|(|<prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>|)>\\<leq\\><next-line><htab|5mm>bitSize<around*|(|A|)>+bitSize<around*|(|B|)>+extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|0|)>>.\n  </lemma>\n\n  The problem with <math|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)>>\n  is that it is effectively a dynamic analysis because its result is a\n  function. We cannot directly use this definition to perform a static\n  analysis because we cannot cache and reuse results on shared\n  sub-expressions. Fortunately, we can characterize the set of possible\n  functions returned by <math|extraCellsBound<rsup|TCO><rsub|dyn>> by a pair\n  of parameters.\n\n  <\\equation*>\n    interp<rsup|TCO><around*|\\<langle\\>|n,m|\\<rangle\\>><around*|(|r|)>\\<assign\\>max<around*|(|n-r,m|)>\n  </equation*>\n\n  We can write a static analysis to compute the pair of parameters that\n  characterize the results of <math|extraCellsBound<rsup|TCO><rsub|dyn>>.\n\n  <\\eqnarray*>\n    <tformat|<cwith|2|17|2|2|cell-halign|r>|<cwith|2|17|2|2|cell-halign|r>|<cwith|1|-1|2|2|cell-halign|c>|<cwith|10|10|2|2|cell-halign|r>|<cwith|11|11|2|2|cell-halign|r>|<cwith|13|14|2|2|cell-halign|r>|<cwith|13|14|2|2|cell-halign|r>|<cwith|13|14|2|2|cell-halign|c>|<cwith|13|13|2|2|cell-halign|r>|<cwith|14|14|2|2|cell-halign|r>|<cwith|3|4|2|2|cell-halign|r>|<cwith|3|4|2|2|cell-halign|r>|<cwith|3|4|2|2|cell-halign|c>|<cwith|3|4|2|2|cell-halign|r>|<cwith|3|4|2|2|cell-halign|r>|<cwith|3|4|2|2|cell-halign|c>|<cwith|3|3|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<cwith|5|5|2|2|cell-halign|r>|<table|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|iden><rsub|A>|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|0,0|\\<rangle\\>>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|comp><rsub|A,B,C>\n    s t|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|max<around*|(|r<rsub|b>+n<rsub|s>,n<rsub|t>,r<rsub|b>+m<rsub|t>|)>,r<rsub|b>+m<rsub|s>|\\<rangle\\>>>>|<row|<cell|>|<cell|where>|<cell|<around*|\\<langle\\>|n<rsub|s>,m<rsub|s>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|s|)>>>|<row|<cell|>|<cell|and>|<cell|<around*|\\<langle\\>|n<rsub|t>,m<rsub|t>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>|<row|<cell|>|<cell|and>|<cell|r<rsub|b>\\<assign\\>bitSize<around*|(|B|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|unit><rsub|A>|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|0,0|\\<rangle\\>>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|injl><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|injr><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|case><rsub|A,B,C,D>\n    s t|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|max<around*|(|n<rsub|s>,n<rsub|t>|)>,max<around*|(|m<rsub|s>,m<rsub|t>|)>|\\<rangle\\>>>>|<row|<cell|>|<cell|where>|<cell|<around*|\\<langle\\>|n<rsub|s>,m<rsub|s>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|s|)>>>|<row|<cell|>|<cell|and>|<cell|<around*|\\<langle\\>|n<rsub|t>,m<rsub|t>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|pair><rsub|A,B,C>\n    s t|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|n<rsub|t>,max<around*|(|n<rsub|s>,m<rsub|s>,m<rsub|t>|)>|\\<rangle\\>>>>|<row|<cell|>|<cell|where>|<cell|<around*|\\<langle\\>|n<rsub|s>,m<rsub|s>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|s|)>>>|<row|<cell|>|<cell|and>|<cell|<around*|\\<langle\\>|n<rsub|t>,m<rsub|t>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|take><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|drop><rsub|A,B,C>\n    t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>>>\n  </eqnarray*>\n\n  When computing <math|extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>\n  resulting values for shared sub-expressions can be shared, making\n  <math|extraCellsBound<rsup|TCO><rsub|static>> a static analysis. We can use\n  <math|interp<rsup|TCO>> and <math|extraCellsBound<rsup|TCO><rsub|static>>\n  to compute <math|extraCellsBound<rsup|TCO><rsub|dyn>> for our bound on cell\n  count.\n\n  <\\lemma>\n    <math|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)>=interp<rsup|TCO><around*|(|extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>|)>>.\n  </lemma>\n\n  <\\corollary>\n    For any core Simplicity expression <math|t:A\\<vdash\\>B> and <math|a:A>\n    such that\n\n    <\\equation*>\n      <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n    </equation*>\n\n    we have that\n\n    <math|cellsReq<around*|(|<prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>|)>\\<leq\\>bitSize<around*|(|A|)>+bitSize<around*|(|B|)>+max<around*|(|n,m|)>>\n\n    <no-indent>where <math|<around*|\\<langle\\>|n,m|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>.\n  </corollary>\n\n  <subsubsection|Maximum Frame Count Bound>\n\n  <subsection|Time Resources>\n\n  <section|Commitment Merkle Root><label|ss:cmr>\n\n  <assign|SimplicityPrefix|53696d706c6963697479>In modern Bitcoin, users who\n  use P2SH (pay to script hash) do not commit funds directly to Bitcoin\n  Script, rather they commit to a hash of their Bitcoin Script. Only when\n  they wish to redeem their funds do they reveal their Bitcoin Script for\n  execution. Bitcoin's consensus protocol enforces that the Bitcoin Script\n  presented during redemption has a hash that matches the committed hash.\n\n  <assign|cmr|<macro|x|<math|#<rsup|c><around*|(|<arg|x>|)>>>><assign|imr0|<macro|x|<math|#<rsup|i><around*|(|<arg|x>|)>>>><assign|mr|<macro|x|y|<math|#<rsup|><rsup|<arg|x>><around*|(|<arg|y>|)>>>>Simplicity\n  is designed to work in the same way. However, instead of a linear hash of a\n  serialized Simplicity program (Section<nbsp><reference|ss:Serialization>)\n  we follow the tree structure of a Simplicity expression and compute a\n  commitment Merkle root of its syntax tree. Below we define both the\n  commitment Merkle root of a Simplicity expression <math|t\\<of\\>A\\<vdash\\>B>\n  as <math|<cmr|t>\\<of\\><2><rsup|256>> as well as a value\n  <math|<imr0|t>\\<of\\><2><rsup|256>> that will later be used to define a\n  varianted for identity Merkle Roots (Section<nbsp><reference|ss:IMR>).\n  \\ Below <math|\\<alpha\\>\\<in\\><around*|{|c,i|}>> and hence for core\n  Simplicity expression <math|t>, <math|<cmr|t>=<imr0|t>>, but they will no\n  longer be equal when we consider some extensions to core Simplicity.\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<mr|\\<alpha\\>|<math-ss|iden><rsub|A>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|tag<rsup|c><rsub|<math-ss|iden>>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|comp><rsub|A,B,C>\n    s t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|<math|tag<rsup|c><rsub|<math-ss|comp>>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<mr|\\<alpha\\>|s>,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|unit><rsub|A>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|tag<rsup|c><rsub|<math-ss|unit>>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|injl><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|injl>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|injr><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|injr>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|case><rsub|A,B,C,D>\n    s t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|case>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<mr|\\<alpha\\>|s>,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|pair><rsub|A,B,C>\n    s t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|pair>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<mr|\\<alpha\\>|s>,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|take><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|take>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|drop><rsub|A,B,C>\n    t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|drop>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  Here we are directly using SHA-256's compression function,\n  <math|SHA256*<rsub|Block><around*|\\<langle\\>|i,b|\\<rangle\\>>>, which takes\n  two arguments. The first argument, <math|i>, is a 256-bit tagged initial\n  value. The second value, <math|b>, is a 512-bit block of data. Above we\n  divide a block into two 256-bit values,\n  <math|<around*|\\<langle\\>|b<rsub|0>,b<rsub|1>|\\<rangle\\>>>, and recursively\n  pass Merkle roots into the compression function.\n\n  Like static analysis, the time needed to computing the commitment Merkle\n  root is linear in the size of the DAG representing the term because the\n  intermediate results on sub-expressions can be shared.\n\n  We define unique tags <math|tag<rsup|c><rsub|x>> for every combinator.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|tag<rsup|c><rsub|<math-ss|iden>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f6964656e]><rsub|2<rsup|8>>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|comp>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f636f6d70]><rsub|2<rsup|8>>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|unit>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f756e6974]><rsub|2<rsup|8>>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|injl>>>|<cell|\\<assign\\>>|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f696e6a6c]><rsub|2<rsup|8>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|injr>>>|<cell|\\<assign\\>>|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f696e6a72]><rsub|2<rsup|8>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|case>>>|<cell|\\<assign\\>>|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f63617365]><rsub|2<rsup|8>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|pair>>>|<cell|\\<assign\\>>|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f70616972]><rsub|2<rsup|8>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|take>>>|<cell|\\<assign\\>>|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f74616b65]><rsub|2<rsup|8>>>|<row|<cell|tag<rsup|c><rsub|<math-ss|drop>>>|<cell|\\<assign\\>>|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f64726f70]><rsub|2<rsup|8>>>>>\n  </eqnarray*>\n\n  Notice that the type annotations for expressions are not included in the\n  commitment Merkle root. We will rely on type inference to derive principle\n  type annotations (see Section<nbsp><with|color|red|<reference|ss:typeInference>>).\n  Later, we will make use of this flexibility when pruning unused branches\n  from <samp|case> expressions (see Section<nbsp><reference|ss:pruning>).\n\n  <section|Type Merkle Root>\n\n  <assign|tmr|<macro|x|<math|#<rsup|ty><around*|(|<arg|x>|)>>>>We also define\n  a Merkle root that follows the tree structure of types in the same way that\n  we defined the commitment Merkle Root.\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<tmr|<1>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|tag<rsup|ty><rsub|<math-ss|one>>><rsub|IV>>>|<row|<cell|<tmr|A+B>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|<math|tag<rsup|ty><rsub|<math-ss|sum>>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<tmr|A>,<tmr|B>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<tmr|A\\<times\\>B>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|<math|tag<rsup|ty><rsub|<math-ss|prod>>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<tmr|A>,<tmr|B>|\\<rangle\\>>|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  We define unique tags <math|tag<rsup|ty><rsub|x>> for every sort of type.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|tag<rsup|ty><rsub|<math-ss|one>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f547970651f756e6974]><rsub|2<rsup|8>>>>|<row|<cell|tag<rsup|ty><rsub|<math-ss|sum>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f547970651f73756d]><rsub|2<rsup|8>>>>|<row|<cell|tag<rsup|ty><rsub|<math-ss|prod>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f547970651f70726f64]><rsub|2<rsup|8>>>>>>\n  </eqnarray*>\n\n  <chapter|Simplicity Extensions>\n\n  The core Simplicity completeness theorem\n  (Theorem<nbsp><reference|thm:CSCT>) proves that the core Simplicity\n  language is already computationally complete for Simplicity types. Our\n  primary method of extending Simplicity is by adding expressions with\n  side-effects. We will use monads to formally specify these new effects.\n\n  <section|Monadic Semantics><label|ss:monadicSemantics>\n\n  \\;\n\n  We define a new interpretation of Simplicity expressions,\n  <math|t\\<of\\>A\\<vdash\\>B>, whose denotations are Kleisli morphisms,\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<of\\>A\\<rightarrow\\>\\<cal-M\\>*B>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|iden><rsub|A>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|\\<cal-M\\>><around*|(|a|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|comp><rsub|A,B,C>\n    s t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|<around*|(|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><op|\\<leftarrowtail\\>><around*|\\<llbracket\\>|s|\\<rrbracket\\>><rsup|\\<cal-M\\>>|)><around*|(|a|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|unit><rsub|A>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|\\<cal-M\\>><around*|\\<langle\\>||\\<rangle\\>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|injl><rsub|A,B,C>\n    t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<cal-M\\><injl|<around*|(|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>|)>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|injr><rsub|A,B,C>\n    t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<cal-M\\><injr|<around*|(|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>|)>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|case><rsub|A,B,C,D>\n    s t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injl|<around*|(|a|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|s|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a,c|\\<rangle\\>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|case><rsub|A,B,C,D>\n    s t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injr|<around*|(|b|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|b,c|\\<rangle\\>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|pair><rsub|A,B,C>\n    s t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<phi\\><rsup|\\<cal-M\\>><around*|\\<langle\\>|<around*|\\<llbracket\\>|s|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>,<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>|\\<rangle\\>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|take><rsub|A,B,C>\n    t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a,b|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|drop><rsub|A,B,C>\n    t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a,b|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|b|)>>>>>\n  </eqnarray*>\n\n  The above interpretation for Kleisli morphisms is nearly uniquely defined\n  (under the requirement of parametericity). Many well-typed variations of\n  the definition above end up being equivalent due to the monad laws. The\n  main choice we have is between using <math|\\<phi\\><rsup|\\<cal-M\\>><rsub|A,B>>\n  or <math|<wide|\\<phi\\>|\\<bar\\>><rsup|\\<cal-M\\>><rsub|A,B>> in the\n  definition of <math|<around*|\\<llbracket\\>|<math-ss|pair> s\n  t|\\<rrbracket\\>><rsup|\\<cal-M\\>>>. The only other definitions amount to\n  duplicating the effects of sub-expressions.\n\n  To ensure that all these possible choices are immaterial, we demand that\n  <math|\\<cal-M\\>> be a commutative, idempotent monad when interpreting\n  Simplicity expressions. This lets us ignore the order of effects, and\n  duplication of effects, which simplifies reasoning about Simplicity\n  programs. It also provides an opportunity for a Simplicity optimizer to,\n  for example, reorder pairs without worrying about changing the denotational\n  semantics.\n\n  <\\theorem>\n    For any core Simplicity expression, <math|t\\<of\\>A\\<vdash\\>B>, we have\n    <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<assign\\>\\<eta\\><rsup|\\<cal-M\\>><rsub|B>\\<circ\\><around*|\\<llbracket\\>|t|\\<rrbracket\\>>>.\n  </theorem>\n\n  <\\corollary>\n    For any core Simplicity expression, <math|t\\<of\\>A\\<vdash\\>B>, we have\n    <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|Id>\\<assign\\><around*|\\<llbracket\\>|t|\\<rrbracket\\>>>.\n  </corollary>\n\n  Notice that our monadic semantics are strict in their side-effects in the\n  sense that the definition of <math|<around*|\\<llbracket\\>|<math-ss|pair> s\n  t|\\<rrbracket\\>><rsup|\\<cal-M\\>>> implies that the side-effects of\n  <math|<around*|\\<llbracket\\>|s|\\<rrbracket\\>><rsup|\\<cal-M\\>>> and\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>>> are both\n  realized even if it ends up that one (or both) of the values returned by\n  <math|s> and <math|t> end up never used.\n\n  <section|Witness>\n\n  Our first extension to core Simplicity is the witness expression. The\n  language that uses this extension is called <dfn|Simplicity with\n  witnesses>.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|b\\<of\\>B>>>|<row|<cell|<math|<math-ss|witness><rsub|A,B>\n    b\\<of\\>A\\<vdash\\>B>>>>>>\n  </with>\n\n  \\;\n\n  The denotational semantics of the witness expression is simply a constant\n  function that returns its parameter.\n\n  \\;\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|witness><rsub|A,B>\n    b|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>\\<assign\\>\\<eta\\><rsup|\\<cal-M\\>><rsub|B><around*|(|b|)>\n  </equation*>\n\n  As far as semantics goes, this extension does not provide any new\n  expressivity. A constant function for any value <math|b> can already be\n  expressed in core Simplicity using <math|<samp|scribe><rsub|A,B><around*|(|b|)>>.\n  The difference between <samp|scribe> and <samp|witness> expressions lies in\n  their commitment Merkle root.\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|1|2|2|cell-halign|r>|<table|<row|<cell|<cmr|<math-ss|witness><rsub|A,B>\n    b>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|tag<rsup|c><rsub|<math-ss|witness>>><rsub|IV>>>>>\n  </eqnarray*>\n\n  where <math|tag<rsup|c><rsub|<math-ss|witness>>> value is a unique value.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|tag<rsup|c><rsub|<math-ss|witness>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f7769746e657373]><rsub|<2><rsup|8>>>>>>\n  </eqnarray*>\n\n  Notice that a <math|<samp|witness> b> expression does not commit to its\n  parameter in the commitment root. This means that at redemption time a\n  <samp|witness> expression's parameter, called a <dfn|witness value>, could\n  be set to any value. This differs from the identity root\n  (Section<nbsp><reference|ss:IMR>) which will include a commitment to its\n  parameter.\n\n  Witness values play the same role as Bitcoin Script's input stack in its\n  <verbatim|sigScript> or Segwit's <verbatim|witness>. They act as inputs to\n  Simplicity programs. Rather than accepting arguments as inputs and passing\n  them down to where they are needed, <samp|witness> expressions lets input\n  data appear right where it is needed.\n\n  <subsection|Elided Computation>\n\n  <subsection|Type Inference with Witness>\n\n  Like other expressions, a <samp|witness> expression does not commit to its\n  type in its commitment Merkle root. Type inference is used to compute the\n  minimal type needed for each witness expression (see\n  Section<nbsp><reference|ss:typeInference>) This helps ensures that third\n  parties cannot perform witness malleation to add unused data on\n  transactions during transit.\n\n  <section|Assertions and Failure>\n\n  Our first side-effect will be aborting a computation. New assertion and\n  <samp|fail> expressions make use of this effect. The language that uses\n  this extension is called <dfn|Simplicity with assertions>.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\>A\\<times\\>C\\<vdash\\>D>>|<cell|<math|h\\<of\\><2><rsup|256>>>>>>>>>|<row|<cell|<math|<math-ss|assertl><rsub|A,B,C,D>\n    s h\\<of\\><around*|(|A+B|)>\\<times\\>C\\<vdash\\>D>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|h\\<of\\><2><rsup|256>>>|<cell|<math|t\\<of\\>B\\<times\\>C\\<vdash\\>D>>>>>>>>|<row|<cell|<math|<math-ss|assertr><rsub|A,B,C,D>\n    h t\\<of\\><around*|(|A+B|)>\\<times\\>C\\<vdash\\>D>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|h\\<of\\><2><rsup|512>>>>|<row|<cell|<math|<math-ss|fail><rsub|A,B>\n    h\\<of\\>A\\<vdash\\>B>>>>>>\n  </with>\n\n  \\;\n\n  Assertions serve a dual purpose. One purpose is to replicate the behaviour\n  of Bitcoin Script's <verbatim|OP_VERIFY> and similar operations that are\n  used to validate checks on programmable conditions, such as verifying that\n  a digital signature verification passes or causing the program to abort\n  otherwise.\n\n  The second purpose is to support pruning of unused <samp|case> branches\n  during redemption. The 256-bit value is used in the commitment Merkle root\n  computation to hold Merkle root of the pruned branches. This will be\n  covered in Section<nbsp><reference|ss:pruning>.\n\n  Because we are extending Simplicity's semantics to support an abort effect,\n  there is no harm in adding a generic <samp|fail> expression. The parameter\n  to the <samp|fail> expression is used to support salted expressions (see\n  Section<nbsp><reference|ss:salted>). We will see that <samp|fail>\n  expressions never manifest themselves within a blockchain's consensus\n  protocol.\n\n  <subsection|Denotational Semantics>\n\n  Given an commutative, idempotent monad with zero, <math|\\<cal-M\\>>, we\n  extend the monadic semantics for Simplicity expressions,\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>>>, to include\n  assertion expressions:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|assertl><rsub|A,B,C,D>\n    s h|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injl|<around*|(|a|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|s|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a,c|\\<rangle\\>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|assertl><rsub|A,B,C,D>\n    s h|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injr|<around*|(|b|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|\\<cal-M\\>><rsub|D>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|assertr><rsub|A,B,C,D>\n    h t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injl|<around*|(|a|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|\\<cal-M\\>><rsub|D>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|assertr><rsub|A,B,C,D>\n    h t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injr|<around*|(|b|)>>,c|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|b,c|\\<rangle\\>>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|fail><rsub|A,B>\n    h|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|\\<cal-M\\>><rsub|B>>>>>\n  </eqnarray*>\n\n  Notice that the <math|h> parameters are ignored in the semantics. They will\n  be used instead for the Merkle root definitions in\n  Section<nbsp><reference|ss:AssertMerkleRoot>.\n\n  A term in the language of core Simplicity extended with witnesses and\n  assertions, <math|t\\<of\\>A\\<vdash\\>B>, can be interpreted as a function\n  returning an optional result: <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|<maybe>>\\<of\\>A\\<rightarrow\\><maybe>B>,\n  using the option monad (see Section<nbsp><reference|ss:optionMonad>).\n\n  <\\theorem>\n    For any core Simplicity expression with assertions,\n    <math|t\\<of\\>A\\<vdash\\>B>, and any commutative idempotent monad with zero\n    <math|\\<cal-M\\>>, we have <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<assign\\>\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>,B>\\<circ\\><around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|<maybe>>>.\n  </theorem>\n\n  <subsection|Merkle Roots><label|ss:AssertMerkleRoot>\n\n  We extend the definition of commitment Merkle root and identity Merkle root\n  to support the new assertion and <samp|fail> expressions\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|1|2|2|cell-halign|r>|<table|<row|<cell|<mr|\\<alpha\\>|<math-ss|assertl><rsub|A,B,C,D>\n    s h>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|case>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<mr|\\<alpha\\>|s>,h|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|assertr><rsub|A,B,C,D>\n    h t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|case>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|h,<mr|\\<alpha\\>|t>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|fail><rsub|A,B>\n    h>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|fail>>><rsub|IV>,h|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  where <math|tag<rsup|c><rsub|<math-ss|fail>>> value is a unique value.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|tag<rsup|c><rsub|<math-ss|fail>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f6661696c]><rsub|<2><rsup|8>>>>>>\n  </eqnarray*>\n\n  It is important to notice that we are reusing\n  <math|tag<rsup|c><rsub|<math-ss|case>>> when tagging assertions in their\n  commitment Merkle root. Also notice that the <math|h> value, which was\n  ignored in the semantics, is used in the commitment Merkle root. Together\n  this allows an assertion expression to substitute for a case expression at\n  redemption time while maintaining the same commitment Merkle root. This\n  enables a feature of Simplicity called pruning.\n\n  \\;\n\n  <subsubsection|Pruning Unused <samp|case> Branches><label|ss:pruning>\n\n  The commitment Merkle roots of the assertion expression reuses\n  <math|tag<rsup|c><rsub|<math-ss|case>>> in the compression function. This\n  means that the following identities hold.\n\n  <\\equation*>\n    <cmr|<math-ss|assertl><rsub|A,B,C,D> s\n    <cmr|t>>=<cmr|<math-ss|case><rsub|A,B,C,D> s\n    t>=<cmr|<math-ss|assertr><rsub|A,B,C,D> <cmr|s> t>\n  </equation*>\n\n  In particular, it means that when a <math|<math-ss|case>> expression is\n  used at commitment time, it can be replaced by an assertion expression. If\n  we substitute a <samp|case> with an assertion expression and that assertion\n  fails during evaluation, then the whole transaction will be deemed invalid\n  and rejected. On the other hand if the assertion does not fail, then we are\n  guaranteed to end up with the same result as before (which ultimately could\n  still be failure due to a later assertion failure). Therefore, assuming the\n  transaction is valid, a substitution of assertions will not change the\n  semantics.\n\n  We can take advantage of this by performing this substitution at redemption\n  time. We can effectively replace any unused branch in a case expression\n  with its commitment Merkle root. In fact, we will require this replacement\n  to occur during redemption (see Section<nbsp><inactive|<reference|<with|color|red|TODO>>>).\n\n  For those cases where we want to use an assertion at commitment time, for\n  example when performing something similar to Bitcoin Script's\n  <verbatim|OP_VERIFY>, we use the following derived <math-ss|assert>\n  combinator,\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|t\\<of\\>A\\<vdash\\><2>>>>>>>>>|<row|<cell|<math|<math-ss|assert><rsub|A>\n    t\\<assign\\>t \\<vartriangle\\> <math-ss|unit>;<math-ss|assertr>\n    <cmr|<math-ss|fail> <around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|512>>\n    <math-ss|unit>\\<of\\>A\\<vdash\\><1>>>>>>>\n  </with>\n\n  \\;\n\n  <no-indent>where <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|512>> is used\n  as a canonical parameter for <samp|fail>. Naturally, the\n  <around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|512> parameter can be replaced with\n  any value. This can be used as a method of salting expression, which is the\n  subject of the next section.\n\n  <\\theorem>\n    For any core Simplicity expression <math|t\\<of\\>A\\<vdash\\><2>>,\n\n    <\\equation*>\n      <around*|\\<llbracket\\>|<math-ss|assert><rsub|A>\n      t|\\<rrbracket\\>><rsup|S>=<around*|\\<llbracket\\>|t|\\<rrbracket\\>><text|.>\n    </equation*>\n  </theorem>\n\n  <subsubsection|Salted Expressions><label|ss:salted>\n\n  During pruning, unused branches are replaced by its commitment Merkle root.\n  Since hashes are one way functions, one might believe that third parties\n  will be unable to recover the pruned branch from just its commitment Merkle\n  root. However, this argument is not so straightforward. Whether or not the\n  expression can be recovered from just its commitment Merkle root depends on\n  how much entropy the pruned expression contains. Third parties can grind,\n  testing many different expressions, until they find one whose commitment\n  Merkle root matches the one occurring in the assertion. If the entropy of\n  the pruned expression is low, then this grinding is feasible.\n\n  Some expressions naturally have high entropy. For example, any branch that\n  contains a commitment to a public key will have at least the entropy of the\n  public key space. However, this only holds so long as that public key is\n  not reused nor will ever be reused elsewhere.\n\n  For expressions that reuse public keys, or otherwise naturally having low\n  entropy, one can add salt, which is random data, to increase its entropy.\n  There are several possible ways to incorporate random data into a\n  Simplicity expression without altering the program's semantics. One way is\n  to incorporate the <samp|fail> expression which lets us directly\n  incorporate random into is commitment Merkle root.\n\n  Given a block of random data, <math|h:<2><rsup|512>>, and a Simplicity\n  expression <math|t\\<of\\>A\\<vdash\\>B>, we can define two salted variants of\n  <math|t>:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<math-ss|salted><rsup|0> h\n    t>|<cell|\\<assign\\>>|<cell|<math-ss|witness>\n    <math-tt|0><rsub|<2>><math-ss|> \\<vartriangle\\>\n    <math-ss|iden>;<math-ss|assertl> <around*|(|<math-ss|drop> t|)>\n    <cmr|<math-ss|fail> h>:A\\<vdash\\>B>>|<row|<cell|<math-ss|salted><rsup|1>\n    h t>|<cell|\\<assign\\>>|<cell|<math-ss|witness>\n    <math|<math-tt|1><rsub|<2>>> \\<vartriangle\\>\n    <math-ss|iden>;<math-ss|assertr> <cmr|<math-ss|fail> h>\n    <around*|(|<math-ss|drop> t|)>:A\\<vdash\\>B>>>>\n  </eqnarray*>\n\n  The <math|<math-ss|salted><rsup|b> h t> expression will have high entropy\n  so long as the random data <math|h> has high entropy. By randomly choosing\n  between these two variants, this method of salting obscures the fact that\n  the expression is salted at all. Without knowing <math|h>, it is\n  impractical to determine if <math|#<rsup|c><around*|(|<math-ss|fail> h|)>>\n  is the commitment Merkle root of a <samp|fail> expression, or if it is a\n  some other, high-entropy, alternate expression that the redeemer has simply\n  chosen not to execute.\n\n  By explicitly using the <samp|fail> expression here, one has the option\n  prove that these alternative branches are unexecutable by revealing the\n  value <math|h>. If the Simplicity expression is part of a multi-party smart\n  contract, it maybe required to reveal <math|h> (or prove in a deniable way\n  that such an <math|h> exists) to all party members so everyone can vet the\n  security properties of the overall smart contract.\n\n  Of course, lots of variations of this <samp|salted> expression are\n  possible.\n\n  <section|Blockchain Primitives>\n\n  We extend Simplicity with primitive expressions that provide blockchain\n  specific features. Naturally the specifics of these primitive expressions\n  depends on the specific blockchain application, but generally speaking the\n  primitives allow reading data from the context that a Simplicity program is\n  being executed within. This is usually the data of the encompassing\n  transaction including details about the inputs and outputs of the\n  transaction, and which specific input is being evaluated.\n\n  A blockchain application needs to provide a set of typed primitive\n  expressions and a monad to capture the side-effects for these primitives.\n  This monad should be a commutative, idempotent monad with zero in order to\n  interpret Simplicity and its extensions. All primitive expressions must be\n  monomorphic and have no parameters (i.e. they are not themselves\n  combinators).\n\n  In the next section we will be detailing the primitives used for Bitcoin,\n  or a Bitcoin-like application. In Appendix<nbsp><reference|app:ElementsTransactions>\n  we describe the primitives used for the Elements sidechain.\n\n  <subsection|Bitcoin Transactions><label|ss:BitcoinTransactions>\n\n  For the Bitcoin application, Simplicity's primitives will be primarily\n  focuses on accessing the <dfn|signed transaction data>, which is the data\n  that is hashed and signed in Bitcoin.\n\n  We define a record type that captures this environment, called\n  <math|BCEnv>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|Lock>|<cell|\\<assign\\>>|<cell|<2><rsup|32>>>|<row|<cell|Value>|<cell|\\<assign\\>>|<cell|<2><rsup|64>>>|<row|<cell|Outpoint>|<cell|\\<assign\\>>|<cell|<2><rsup|256>\\<times\\><2><rsup|32>>>|<row|<cell|SigInput>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|prevOutpoint\\<of\\>Outpoint>>|<row|<cell|value\\<of\\>Value<with|color|red|<text|make\n    this SigOutput? just add the segwitVerison/outputKey?>>>>|<row|<cell|sequence\\<of\\><2><rsup|32>>>|<row|<cell|annex\\<of\\><maybe><around*|(|<around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>|)>\n    <text|<around*|(|excludes the <math|<math-tt|50><rsub|<2><rsup|8>>>\n    prefix|)>>>>|<row|<cell|scriptSig\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>>>>>|}>>>|<row|<cell|SigOutput>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|value\\<of\\>Value>>|<row|<cell|scriptPubKey\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>>>>>|}>>>|<row|<cell|SigTx>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|version\\<of\\><2><rsup|32>>>|<row|<cell|inputs\\<of\\>SigInput<rsup|+>>>|<row|<cell|outputs\\<of\\>SigOutput<rsup|+>>>|<row|<cell|lockTime\\<of\\>Lock>>>>>|}>>>|<row|<cell|TapEnv>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|leafVersion\\<of\\><2><rsup|8>>>|<row|<cell|internalKey\\<of\\>PubKey>>|<row|<cell|branch\\<of\\><around*|(|<2><rsup|256>|)><rsup|\\<ast\\>>>>>>>|}>>>|<row|<cell|BCEnv>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|tx\\<of\\>SigTx>>|<row|<cell|ix\\<of\\><2><rsup|32>>>|<row|<cell|tapEnv\\<of\\>TapEnv>>|<row|<cell|scriptCMR\\<of\\><2><rsup|256>>>>>>|}>>>>>\n  </eqnarray*>\n\n  The type <math|SigTx> contains the signed transaction data. Following a\n  design similar to BIP 143, this signed transaction data excludes\n  transaction inputs' ScriptSigs and includes inputs' Bitcoin values. The\n  <math|ix> field is input index whose redemption is being processed by this\n  Simplicity program. The <math|scriptCMR> field holds the commitment Merkle\n  root of the Simplicity program being executed.\n\n  The <math|SigTx> type given above allows for an unbounded number of inputs\n  and outputs. However, there are limits imposed by the Bitcoin protocol. The\n  number of inputs and outputs are limited to less than or equal to\n  <math|2<rsup|25>> by Bitcoin's deserialization implementation. Similarly,\n  the length of <math|SigOutput>'s <math|pubScript> is limited to less than\n  or equal to <math|2<rsup|25>> bytes. We assume all transactions to adhere\n  to these limits when reasoning about Bitcoin transactions.\n\n  Furthermore, we assume that for every <math|e\\<of\\>BCEnv> that\n  <math|<around*|\\<lceil\\>|e<around*|[|ix|]>|\\<rceil\\>>\\<less\\><around*|\\||e<around*|[|tx|]><around*|[|inputs|]>|\\|>>\n  so that \\Pcurrent\\Q index being validated is, in fact, an input of the\n  transaction. \\ We also assume that the annex length, when it exists, is\n  strictly less than <math|2<rsup|25>> (because it excludes the 0x50 prefix),\n  <math|<around*|\\<lceil\\>|e<around*|[|tapEnv|]><around*|[|leafVersion|]>|\\<rceil\\>>>\n  is even, and <math|<around*|\\||e<around*|[|tapEnv|]><around*|[|branch|]>|\\|>\\<leq\\>128>\n  in accordance with Taproot limitations.\n\n  Bitcoin's money supply is capped below <math|21<nbsp>000<nbsp>000\\<times\\>10<rsup|8>>\n  satoshi, therefore it is safe to assume that all monetary values are within\n  this bound. In particular, we assume that for every <math|e\\<of\\>BCEnv>\n  that the following inequalities hold.\n\n  <\\equation*>\n    0\\<leq\\>fold<rsup|<around*|\\<langle\\>|+,0|\\<rangle\\>>><rsub|\\<bbb-N\\>><around*|(|<around*|(|\\<lambda\\>o\\<point\\><around*|\\<lceil\\>|o<around*|[|value|]>|\\<rceil\\>><rsub|64>|)><rsup|+><around*|(|e<around*|[|tx|]><around*|[|outputs|]>|)>|)>\\<leq\\>fold<rsup|<around*|\\<langle\\>|+,0|\\<rangle\\>>><rsub|\\<bbb-N\\>><around*|(|<around*|(|\\<lambda\\>i\\<point\\><around*|\\<lceil\\>|i<around*|[|value|]>|\\<rceil\\>><rsub|64>|)><rsup|+><around*|(|e<around*|[|tx|]><around*|[|inputs|]>|)>|)>\\<leq\\>21<nbsp>000<nbsp>000\\<times\\>10<rsup|8>\n  </equation*>\n\n  \\;\n\n  <assign|BC|<math|BC>>The monad we use for the Bitcoin application provides\n  an environment effect (also known as a reader effect) that allows\n  read-access to the <math|BCEnv> value defining the Simplicity program's\n  evaluation context. We call this monad <math|BC>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<BC>A>|<cell|\\<assign\\>>|<cell|BCEnv\\<rightarrow\\><maybe>A>>|<row|<cell|<BC>f<around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\><maybe>f<around*|(|a<around*|(|e|)>|)>>>>>\n  </eqnarray*>\n\n  \\;\n\n  <BC> is a commutative, idempotent monad with zero:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<eta\\><rsup|<BC>><rsub|A><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><rsub|A><around*|(|a|)>>>|<row|<cell|\\<mu\\><rsup|<BC>><rsub|A><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<mu\\><rsup|<maybe>><rsub|A><around*|(|<maybe><around*|(|\\<lambda\\>f\\<point\\>f<around*|(|e|)>|)><around*|(|a<around*|(|e|)>|)>|)>>>|<row|<cell|\\<emptyset\\><rsup|<BC>><rsub|A>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<emptyset\\><rsup|<maybe>><rsub|A>>>>>\n  </eqnarray*>\n\n  \\;\n\n  We define several new primitive expressions for reading data from a\n  <math|BCEnv> value. The language that uses this extension is called\n  <dfn|Simplicity with Bitcoin>.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|version>\\<of\\><value|1>\\<vdash\\><2><rsup|32>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|lockTime>\\<of\\><value|1>\\<vdash\\>Lock>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|totalInputValue>\\<of\\><value|1>\\<vdash\\>Value>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|currentIndex>\\<of\\><value|1>\\<vdash\\><2><rsup|32>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputPrevOutpoint>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Outpoint|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputValue>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Value|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputSequence>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|32>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputAnnexHash>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputScriptSigHash>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|totalOutputValue>\\<of\\><value|1>\\<vdash\\>Value>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputValue>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Value|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputScriptHash>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|tapleafVersion>\\<of\\><value|1>\\<vdash\\><2><rsup|8>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|tapbranch>\\<of\\><2><rsup|8>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|internalKey>\\<of\\><value|1>\\<vdash\\>PubKey>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|scriptCMR>\\<of\\><value|1>\\<vdash\\><2><rsup|256>>>>>>>\n  </with>\n\n  <subsubsection|Denotational Semantics><label|ss:BTDenotationalSemantics>\n\n  We extend the formal semantics of these new expressions as follows.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|version>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tx|]><around*|[|version|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|lockTime>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tx|]><around*|[|lockTime|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|totalInputValue>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|fold<rsup|<around*|\\<lfloor\\>|+|\\<rfloor\\>><rsub|64>><around*|(|<around*|(|\\<lambda\\>l\\<point\\>l<around*|[|value|]>|)><rsup|+><around*|(|e<around*|[|tx|]><around*|[|inputs|]>|)>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|currentIndex>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|ix|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputPrevOutpoint>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|prevOutpoint|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputValue>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|value|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputSequence>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|sequence|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputAnnexHash>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\><maybe><around*|(|SHA256|)><around*|(|l<around*|[|annex|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputScriptSigHash>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>SHA256<around*|(|l<around*|[|scriptSig|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|totalOutputValue>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|fold<rsup|<around*|\\<lfloor\\>|+|\\<rfloor\\>><rsub|64>><around*|(|<around*|(|\\<lambda\\>l\\<point\\>l<around*|[|value|]>|)><rsup|+><around*|(|e<around*|[|tx|]><around*|[|outputs|]>|)>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|outputValue>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|value|]>|)><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|outputScriptHash>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>SHA256<around*|(|l<around*|[|scriptPubKey|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|tapleafVersion>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tapEnv|]><around*|[|leafVersion|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|tapbranch>>|\\<rrbracket\\>><rsup|<BC>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tapEnv|]><around*|[|branch|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|internalKey>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tapEnv|]><around*|[|internalKey|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|scriptCMR>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>BCEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|scriptCMR|]>|)>>>>>\n  </eqnarray*>\n\n  \\;\n\n  The sums computed for <math|<around*|\\<llbracket\\>|<math-ss|<math|totalInputValue>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>\n  and <math|<around*|\\<llbracket\\>|<math-ss|<math|totalOutputValue>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>\n  never \\Poverflow\\Q their 64-bit values due to our assumptions about\n  Bitcoin's money supply.\n\n  <subsubsection|Merkle Roots><label|ss:BTMerkleRoots>\n\n  We extend the definition of the commitment Merkle root and identity Merkle\n  root to support the new expressions by using the initial value of with tags\n  of new unique byte strings.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<mr|\\<alpha\\>|<math-ss|version>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[76657273696f6e]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|lockTime>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[6c6f636b54696d65]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|totalInputValue>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[746f74616c496e70757456616c7565]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|currentIndex>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[63757272656e74496e646578]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|inputPrevOutpoint>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[696e707574507265764f7574706f696e74]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|inputValue>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[696e70757456616c7565]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|inputSequence>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[696e70757453657175656e6365]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|inputAnnexHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[696e707574416e6e657848617368]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|inputScriptSigHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[696e70757453637269707453696748617368<next-line>]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|totalOutputValue>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[746f74616c4f757470757456616c7565]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|outputValue>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[6f757470757456616c7565]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|outputScriptHash>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[6f757470757453637269707448617368]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|tapleafVersion>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[7461706c65616656657273696f6e]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|tapbranch>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[7461706272616e6368]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|internalKey>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[696e7465726e616c4b6579]>><rsub|IV>>>|<row|<cell|<mr|\\<alpha\\>|<math-ss|<math|scriptCMR>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|BCprefix\\<cdummy\\><math-tt|[736372697074434d52]>><rsub|IV>>>>>\n  </eqnarray*>\n\n  where\n\n  <\\equation*>\n    BCprefix\\<assign\\><math-tt|[<SimplicityPrefix>1f5072696d69746976651f426974636f696e1f]>\n  </equation*>\n\n  <section|Simplicity Programs>\n\n  Ultimately, we only are interested in the side-effects of Simplicity\n  expressions; we only care that a particular expression does not fail when\n  executed within the context of a given transaction. We do not care about\n  the output value of a Simplicity expression, nor do we provide explicit\n  inputs to Simplicity expressions, which are handled by <samp|witness>\n  expressions instead.\n\n  To this end, we define a <dfn|Simplicity program> to be a Simplicity\n  expression of type <math|<1>\\<vdash\\><1>>. A core Simplicity expression of\n  this type is useless. However, a Simplicity program with witnesses,\n  assertions, and Bitcoin, <math|t\\<of\\><1>\\<vdash\\><1>>, has semantics of\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>\\<of\\>BCEnv\n  \\<rightarrow\\> <2>>, which is the type of predicates over <math|BCEnv>.\n  This is exactly what we want to use a Blockchain program for: to decide if\n  a given set of witness data authorizes the redemption of funds for a\n  specific input of a specific transaction. A particular input authorizes the\n  transaction in the context <math|e\\<of\\>BCEnv> only when\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>><around*|(|e|)>=<math-tt|1><rsub|<2>>>,\n  and all inputs must authorize the transaction for the transaction to be\n  valid.\n\n  Let us look at a basic example of a Simplicity program that requires a\n  single Schnorr signature.\n\n  <subsection|Example: <math-ss|checkSigHashAll>><label|ss:checkSigHashAll>\n\n  Using Simplicity with witnesses, assertions and Bitcoin, we are able to\n  build an expression that use Schnorr signatures to authorize spending of\n  funds. Using the assertion extension we are able to define a variant of\n  <math|<math-ss|bip-0340-check>> called <math|<math-ss|bip-0340-verify>>:\n\n  <\\equation*>\n    <math-ss|bip-0340-verify>\\<assign\\> <math-ss|assert>\n    <math-ss|bip-0340-check>\\<of\\><around*|(|PubKey\\<times\\>Msg|)>\\<times\\>Sig\\<vdash\\><1>\n  </equation*>\n\n  such that\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|bip-0340-verify>|\\<rrbracket\\>><rsup|<maybe>><around*|\\<langle\\>|<around*|\\<langle\\>|p,m|\\<rangle\\>>,s|\\<rangle\\>>=\\<eta\\><rsup|<maybe>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<Leftrightarrow\\>>|<cell|<around*|\\<llbracket\\>|<math-ss|bip-0340-check>|\\<rrbracket\\>><around*|\\<langle\\>|<around*|\\<langle\\>|p,m|\\<rangle\\>>,s|\\<rangle\\>>=<math-tt|1><rsub|<2>><text|.>>>>>\n  </eqnarray*>\n\n  Next, we use the Bitcoin transaction extension to build a\n  <math|<math-ss|hashAll>> expression that computes a SHA-256 hash that\n  commits to all of the current transaction data from the environment and\n  which input is being signed for.\n\n  <\\render-code>\n    <math|<math-ss|hashAll>\\<of\\><1>\\<vdash\\><2><rsup|256>>\n\n    <math|<tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|5|5|2|2|cell-halign|r>|<cwith|6|6|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|hashAll>>>|<cell|:=>|<cell|(<math|<math-ss|scribe><around*|(|SHA256<rsub|IV><rsup|<math-tt|[<SimplicityPrefix>1f53696748617368]>>|)>>>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|<around*|(|<math|<math-ss|<math|inputsHash>>\n    \\<vartriangle\\> <math-ss|<math|outputsHash>>>|)>>>|<row|<cell|>|<cell|;>|<cell|<math-ss|sha256-block>)>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|<math|<around*|(|<around*|(|<around*|(|<samp|currentValue>\n    \\<vartriangle\\> <around*|(|<samp|currentIndex> \\<vartriangle\\>\n    <math-ss|lockTime>|)>|)> |\\<nobracket\\>>|\\<nobracket\\>>>>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|<math|<around*|\\<nobracket\\>|\n    <around*|\\<nobracket\\>| <around*|(|<around*|(|<math-ss|version>\n    \\<vartriangle\\> <math-ss|scribe><around*|(|<around*|\\<lfloor\\>|2<rsup|31>|\\<rfloor\\>><rsub|32>|)>|)>\n    \\<vartriangle\\> <math-ss|scribe><around*|(|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|64>|)>|)>|)>\n    \\<vartriangle\\> <math-ss|scribe><around*|(|<around*|\\<lfloor\\>|1184|\\<rfloor\\>><rsub|256>|)>|)>>>>|<row|<cell|>|<cell|;>|<cell|<math-ss|sha256-block>>>>>>>>>>>>\n  </render-code>\n\n  The <math-ss|hashAll> expression derives a total of 672 bits of data from\n  the environment. The initial <math|SHA256> adds one 512-bit block constant\n  prefix to this, which totals 1184 bits of data. While it is not strictly\n  necessary, we choose to explicitly append the SHA-256 padding for this\n  length of data.\n\n  Next we pair the commitment Merkle root of <samp|hashAll> with its output.\n  This commitment Merkle root plays the role of the signature hash flag that\n  is covered by the signature in Bitcoin script. It is a specification of\n  which parts of the transaction data is being signed, and exactly how those\n  parts are combined to form the digest being signed.\n\n  <\\render-code>\n    <math|<math-ss|sigHashAll>\\<of\\><1>\\<vdash\\><2><rsup|256>>\n\n    <math|<tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<table|<row|<cell|<math-ss|sigHashAll>>|<cell|:=>|<cell|<math-ss|scribe><around*|(|SHA256<rsub|IV><rsup|<math-tt|[<SimplicityPrefix>1f5369676e6174757265]>>|)>>|<cell|>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|<around*|(|<samp|scribe><around*|(|<math|<cmr|<math-ss|hashAll>>>|)><math|\\<vartriangle\\>><samp|hashAll>|)>>|<cell|>>|<row|<cell|>|<cell|;>|<cell|<math-ss|sha256-block>)<math|\\<vartriangle\\>><math-ss|scribe><around*|(|<around*|\\<lfloor\\>|2<rsup|511>+1024|\\<rfloor\\>><rsub|512>|)>>|<cell|>>|<row|<cell|>|<cell|;>|<cell|<math-ss|sha256-block>>|<cell|>>>>>>>>>>>\n  </render-code>\n\n  The pair of the commitment Merkle root and the digest itself is 512 bits.\n  \\ The initial <math|SHA256> adds one 512-bit block constant prefix to this,\n  which totals 1024 bits of data. While it is not strictly necessary, we\n  choose to explicitly append the SHA-256 padding for this length of data.\n\n  Finally, given a Schnorr public key <math|p\\<of\\>PubKey> and a Schnorr\n  signature <math|s\\<of\\>Sig> we can create a Simplicity program that checks\n  the signature against the public key and above message digest.\n\n  <\\render-code>\n    <math|<math-ss|checkSigHashAll><around*|\\<langle\\>|p,s|\\<rangle\\>>\\<of\\><1>\\<vdash\\><1>>\n\n    <math|<tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math-ss|checkSigHashAll><around*|\\<langle\\>|p,s|\\<rangle\\>>>|<cell|:=>|<cell|<around*|(|<math-ss|scribe><rsub|PubKey><around*|(|p|)><math-ss|<math|<math|>\\<vartriangle\\>><math|<math-ss|sigHashAll>>>|)>\n    \\<vartriangle\\> <math-ss|witness><rsub|Sig><around*|(|s|)>>>|<row|<cell|>|<cell|;>|<cell|<math-ss|bip-0340-verify>>>>>>>>>>>>\n  </render-code>\n\n  The <math-ss|witness> combinator ensures that the program's commitment\n  Merkle root <math|<cmr|<math-ss|checkSigHashAll><around*|\\<langle\\>|p,s|\\<rangle\\>>>>\n  is independent of the value of the signature <math|s>. This allows us to\n  commit to this program without committing to the signature, and only\n  providing the signature at redemption time. As with normal Bitcoin\n  transactions, the signature is only valid in the context,\n  <math|e\\<of\\>BCEnv>, of a particular input on a particular transaction\n  during redemption because our program only executes successfully, i.e.\n  <math|<around*|\\<llbracket\\>|<math-ss|checkSigHashAll><around*|\\<langle\\>|p,s|\\<rangle\\>>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>><around*|(|e|)>=\\<eta\\><rsup|<maybe>><around*|\\<langle\\>||\\<rangle\\>>>,\n  when provided a witness that is a valid signature on the transaction data\n  and index number.\n\n  <section|Schnorr Signature Aggregation>\n\n  <section|Malleability>\n\n  <subsection|Transaction Weight>\n\n  <chapter|Jets>\n\n  <with|color|red|Reminder: build jets for parsing\n  <math-ss|lockTime>s.><chapter|Delegation>\n\n  Our last Simplicity extension is the <samp|disconnect> combinator. This\n  extension allows for delegation but using it loses some nice properties of\n  Simplicity. The language that uses this extension is called <dfn|Simplicity\n  with delegation>. The language that uses this and all other extensions is\n  called <dfn|full Simplicity with delegation>.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|s\\<of\\><2><rsup|256>\\<times\\>A\\<vdash\\>B\\<times\\>C>>|<cell|<math|t\\<of\\>C\\<vdash\\>D>>>>>>>>|<row|<cell|<math|<math-ss|disconnect><rsub|A,B,C,D>\n    s t\\<of\\>A\\<vdash\\>B\\<times\\>D>>>>>>\n  </with>\n\n  \\;\n\n  Semantically, the <samp|disconnect> combinator behaves similar to the\n  composition combinator, but where the commitment Merkle root of the\n  expression <math|t> is passed as an argument to the expression <math|s>. We\n  extend our formal semantics to the <samp|disconnect> combinator by defining\n  it in terms of core Simplicity as follows.\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|disconnect><rsub|A,B,C,D> s\n    t|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<assign\\><around*|\\<llbracket\\>|<math-ss|scribe><rsub|A,<2><rsup|256>><around*|(|<cmr|t>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;s;<math-ss|take> <math-ss|iden> \\<vartriangle\\>\n    <math-ss|drop> t|\\<rrbracket\\>><rsup|\\<cal-M\\>>\n  </equation*>\n\n  We can simplify the semantics as follows.\n\n  <\\equation*>\n    <math|<around*|\\<llbracket\\>|<math-ss|disconnect><rsub|A,B,C,D> s\n    t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a|)>=<around*|(|<math|<around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    t|\\<rrbracket\\>><rsup|\\<cal-M\\>>>\\<leftarrowtail\\><around*|\\<llbracket\\>|s|\\<rrbracket\\>><rsup|\\<cal-M\\>>|)><around*|\\<langle\\>|<cmr|t>,a|\\<rangle\\>>>\n  </equation*>\n\n  Like a <samp|witness> expression, the real significance comes from the form\n  of its commitment Merkle root. We extend the definition of the commitment\n  Merkle root as follows.\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|1|2|2|cell-halign|r>|<table|<row|<cell|<cmr|<math-ss|disconnect><rsub|A,B,C,D>\n    s t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|disconnect>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>,<cmr|s>|\\<rangle\\>>|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  where the <math|tag<rsup|c><rsub|<math-ss|disconnect>>> value is a unique\n  value.\n\n  <\\small>\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|tag<rsup|c><rsub|<math-ss|disconnect>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f436f6d6d69746d656e741f646973636f6e6e656374]><rsub|<2><rsup|8>>>>>>\n    </eqnarray*>\n  </small>\n\n  The commitment Merkle root only commits to the first argument, <math|s>, of\n  a <math|<samp|disconnect> s t> expression. During redemption the second\n  argument, <math|t>, can be freely set to any Simplicity expression. This\n  differs from the identity root (Section<nbsp><reference|ss:IMR>) which will\n  include a commitment to both arguments. In order to place restrictions on\n  what <math|t> is allowed, the commitment Merkle root of <math|t> is passed\n  to <math|s> as an input. This way <math|s> is allowed to dynamically decide\n  if <math|t> is an acceptable expression to be used here.\n\n  The primary purpose of <samp|disconnect> is for delegation. In this\n  scenario, <math|s>, validates that the commitment Merkle root\n  <math|<cmr|t>> is signed by a fixed public key. This lets a user postpone\n  defining <math|t> until redemption time, while still maintaining full\n  control, because any redemption requires their signature on <cmr|t>. For\n  example, a user can require that <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>>>\n  returns a public key. After commitment, but before redemption, the user can\n  delegate authorization to redeem these funds to a third party by signing\n  the that party's key in this fashion.\n\n  The <samp|disconnect> combinator comes with some significant caveats.\n  Because the whole program is not committed to at commitment time, it is no\n  longer possible to statically analyze the maximum resource costs for\n  redemption before commitment. During redemption\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>>> could, a\n  priori, perform arbitrary amounts computation. Indeed we can use\n  <samp|disconnect> to commit to what are effectively unbounded loops in\n  Simplicity (see Section<nbsp><reference|ss:unboundedLoop>). Contrast this\n  with the <samp|witness> expression, where type inference limits the size of\n  the witness data, so bounds are still possible to compute.\n\n  Of course, depending on the specifics of the policy enforced by <math|s>,\n  it may be possible to bound the maximum resource costs for redemption in\n  specific cases. However, that depends on the details of <math|s> and there\n  is no practical, universal algorithm that will work for any Simplicity\n  expression. Using <samp|disconnect> risks creating program that ends up\n  impractical to redeem due to costs. This danger is why <samp|disconnect> is\n  not part of full Simplicity and it is instead considered an extension to be\n  used with caution.\n\n  However, it is also important to note that static analysis can be performed\n  at redemption time. At that point time the <math|t> expression has been\n  provided and usual static analysis can proceed. Static analysis can still\n  be part of the consensus protocol, even when the <samp|disconnect>\n  expression is used.\n\n  <section|Implementing <samp|disconnect> on the Bit Machine>\n\n  The semantics of the <samp|disconnect> combinator can tell us how to\n  implement it on the Bit Machine. \\ We simply define the translation of the\n  <samp|disconnect> combinator to be the translation of its semantics.\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<table|<row|<cell|<math|<around*|\\<llangle\\>|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|\\<rrangle\\>>>>|<cell|\\<assign\\>>|<cell|<around*|\\<llangle\\>|<math-ss|scribe><rsub|A,<2><rsup|256>><around*|(|<cmr|t>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;<around*|(|s;<math-ss|take> <math-ss|iden>\n    \\<vartriangle\\> <math-ss|drop> t|)>|\\<rrangle\\>>>>|<row|<cell|<TCOoff|<math|<math-ss|disconnect><rsub|A,B,C,D>\n    s t>>>|<cell|\\<assign\\>>|<cell|<TCOoff|<math-ss|scribe><rsub|A,<2><rsup|256>><around*|(|<cmr|t>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;<around*|(|s;<math-ss|take> <math-ss|iden>\n    \\<vartriangle\\> <math-ss|drop> t|)>>>>|<row|<cell|<TCOon|<math|<math-ss|disconnect><rsub|A,B,C,D>\n    s t>>>|<cell|\\<assign\\>>|<cell|<TCOon|<math-ss|scribe><rsub|A,<2><rsup|256>><around*|(|<cmr|t>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;<around*|(|s;<math-ss|take> <math-ss|iden>\n    \\<vartriangle\\> <math-ss|drop> t|)>>>>>>\n  </eqnarray*>\n\n  We can expand out each of these definitions in turn to see their definition\n  in terms of Bit Machine operations:\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|7|7|2|2|cell-halign|r>|<cwith|8|8|2|2|cell-halign|r>|<cwith|1|5|2|2|cell-halign|r>|<cwith|4|8|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<cwith|9|9|2|2|cell-halign|r>|<cwith|9|9|2|2|cell-halign|r>|<cwith|9|9|2|2|cell-halign|r>|<table|<row|<cell|<around*|\\<llangle\\>|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|\\<rrangle\\>>>|<cell|=>|<cell|newFrame<around*|(|256+bitSize<around*|(|A|)>|)>>>|<row|<cell|>|<cell|;>|<cell|write<rsub|<2><rsup|256>><around*|(|<cmr|t>|)>;copy<around*|(|bitSize<around*|(|A|)>|)>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|newFrame<around*|(|bitSize<around*|(|B|)>+bitSize<around*|(|C|)>|)>>>|<row|<cell|>|<cell|;>|<cell|<around*|\\<llangle\\>|s|\\<rrangle\\>>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|copy<around*|(|bitSize<around*|(|B|)>|)>;bitSize<around*|(|B|)>\\<star\\><around*|\\<llangle\\>|t|\\<rrangle\\>>>>|<row|<cell|>|<cell|;>|<cell|dropFrame>>|<row|<cell|>|<cell|;>|<cell|dropFrame>>>>\n  </eqnarray*>\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|7|7|2|2|cell-halign|r>|<cwith|1|5|2|2|cell-halign|r>|<cwith|4|8|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<table|<row|<cell|<TCOoff|<math|<math-ss|disconnect><rsub|A,B,C,D>\n    s t>>>|<cell|=>|<cell|newFrame<around*|(|256+bitSize<around*|(|A|)>|)>>>|<row|<cell|>|<cell|;>|<cell|write<rsub|<2><rsup|256>><around*|(|<cmr|t>|)>;copy<around*|(|bitSize<around*|(|A|)>|)>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|newFrame<around*|(|bitSize<around*|(|B|)>+bitSize<around*|(|C|)>|)>>>|<row|<cell|>|<cell|;>|<cell|<TCOon|s>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|copy<around*|(|bitSize<around*|(|B|)>|)>;fwd<around*|(|bitSize<around*|(|B|)>|)>;<TCOon|t>>>>>\n  </eqnarray*>\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|8|8|2|2|cell-halign|r>|<cwith|1|6|2|2|cell-halign|r>|<cwith|5|9|2|2|cell-halign|r>|<cwith|5|5|2|2|cell-halign|r>|<cwith|5|5|2|2|cell-halign|r>|<table|<row|<cell|<TCOon|<math|<math-ss|disconnect><rsub|A,B,C,D>\n    s t>>>|<cell|=>|<cell|newFrame<around*|(|256+bitSize<around*|(|A|)>|)>>>|<row|<cell|>|<cell|;>|<cell|write<rsub|<2><rsup|256>><around*|(|<cmr|t>|)>;copy<around*|(|bitSize<around*|(|A|)>|)>>>|<row|<cell|>|<cell|;>|<cell|dropFrame>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|newFrame<around*|(|bitSize<around*|(|B|)>+bitSize<around*|(|C|)>|)>>>|<row|<cell|>|<cell|;>|<cell|<TCOon|s>>>|<row|<cell|>|<cell|;>|<cell|moveFrame>>|<row|<cell|>|<cell|;>|<cell|copy<around*|(|bitSize<around*|(|B|)>|)>;fwd<around*|(|bitSize<around*|(|B|)>|)>;<TCOon|t>>>>>\n  </eqnarray*>\n\n  where\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|4|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<table|<row|<cell|write<rsub|<2><rsup|1>><around*|(|<math-tt|0><rsub|<2>>|)>>|<cell|\\<assign\\>>|<cell|write<around*|(|0|)>;skip<around*|(|0|)>;nop>>|<row|<cell|write<rsub|<2><rsup|1>><around*|(|<math-tt|1><rsub|<2>>|)>>|<cell|\\<assign\\>>|<cell|write<around*|(|1|)>;skip<around*|(|0|)>;nop>>|<row|<cell|write<rsub|<2><rsup|2n>><around*|(|<around*|\\<langle\\>|a,b|\\<rangle\\>>|)>>|<cell|\\<assign\\>>|<cell|write<rsub|<2><rsup|n>><around*|(|a|)>;write<rsub|<2><rsup|n>><around*|(|b|)>>>>>\n  </eqnarray*>\n\n  Of course, in an optimized implementation of <samp|disconnect> we would\n  discard the <math|skip<around*|(|0|)>> and <math|nop> operations from the\n  definition of <math|write<rsub|<2><rsup|256>>>. <with|color|red|TODO:\n  before doing Time Resource static analysis we may need to formally define\n  this optimized implementation of <samp|disconnect>.>\n\n  Because the Bit Machine instructions are directly derived from the\n  semantics of <samp|disconnect> the correctness theorems for the Bit Machine\n  still hold.\n\n  <\\theorem>\n    Given a well-typed Simplicity program with delegation\n    <math|t:A\\<vdash\\>B> and an input <math|a:A>, then\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>+m>\\<vartriangleleft\\>\\<Xi\\>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<cdummy\\><rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>\n    </equation*>\n\n    for any cell arrays <math|r<rsub|0>>, <math|r<rsub|0><rprime|'>>,\n    <math|w<rsub|0>>, any stacks <math|\\<Theta\\>>, <math|\\<Xi\\>>, and any\n    natural number <math|m>.\n  </theorem>\n\n  In particular, for a well-typed Simplicity program with delegation\n  <math|t:A\\<vdash\\>B>, we have\n\n  <\\equation*>\n    <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n  </equation*>\n\n  <\\theorem>\n    Given a well-typed Simplicity program with delegation\n    <math|t:A\\<vdash\\>B> and an input <math|a:A>, then\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>+m>\\<vartriangleleft\\>\\<Xi\\>|]>|<TCOoff|t>|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<cdummy\\><rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>\n    </equation*>\n\n    and\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|1>\\<vartriangleright\\>r<rsub|0><emptyFrame><rep|a|>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0><emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>+m>\\<vartriangleleft\\>\\<Xi\\>|]>|<TCOon|t>|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|1>\\|w<rsub|0>\\<cdummy\\><rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>\n    </equation*>\n\n    for any cell arrays <math|r<rsub|0>>, <math|r<rsub|0><rprime|'>>,\n    <math|w<rsub|0>>, any frame <math|r<rsub|1>>, any stacks\n    <math|\\<Theta\\>>, <math|\\<Xi\\>>, and any natural number <math|m>.\n  </theorem>\n\n  In particular, for a well-typed Simplicity program with delegation\n  <math|t:A\\<vdash\\>B>, we have\n\n  <\\equation*>\n    <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n  </equation*>\n\n  <subsection|Static Analysis of <samp|disconnect>>\n\n  <subsubsection|Space Resources>\n\n  Because the Bit Machine implementation of the <samp|disconnect> combinator\n  is derived from its semantics in core Simplicity, we can derive the static\n  analysis of the space resources used by the Bit Machine implementation of\n  the <samp|disconnect> combintor from its defining Simplicity expression.\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<table|<row|<cell|extraCellsBound<around*|(|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|)><math|>>|<cell|\\<assign\\>>|<cell|extraCellsBound<next-line><htab|5mm><around*|(|<math-ss|scribe><rsub|A,<2><rsup|256>><around*|(|<cmr|t>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;<around*|(|s;<math-ss|take> <math-ss|iden>\n    \\<vartriangle\\> <math-ss|drop> t|)>|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|dyn><next-line><htab|5mm><around*|(|<math-ss|scribe><rsub|A,<2><rsup|256>><around*|(|<cmr|t>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;<around*|(|s;<math-ss|take> <math-ss|iden>\n    \\<vartriangle\\> <math-ss|drop> t|)>|)>>>|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|)>>|<cell|\\<assign\\>>|<cell|extraCellsBound<rsup|TCO><rsub|static><next-line><htab|5mm><around*|(|<math-ss|scribe><rsub|A,<2><rsup|256>><around*|(|<cmr|t>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;<around*|(|s;<math-ss|take> <math-ss|iden>\n    \\<vartriangle\\> <math-ss|drop> t|)>|)>>>>>\n  </eqnarray*>\n\n  We can expand out each of these definitions in turn:\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|3|2|2|cell-halign|r>|<cwith|2|4|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<table|<row|<cell|extraCellsBound<around*|(|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|)><math|>>|<cell|=>|<cell|256+bitSize<around*|(|A|)>>>|<row|<cell|>|<cell|+>|<cell|bitSize<around*|(|B|)>+bitSize<around*|(|C|)>>>|<row|<cell|>|<cell|+>|<cell|max<around*|(|extraCellsBound<around*|(|s|)>,extraCellsBound<around*|(|t|)>|)>>>>>\n  </eqnarray*>\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|2|2|2|cell-halign|r>|<cwith|2|4|2|2|cell-halign|r>|<cwith|1|3|2|2|cell-halign|r>|<cwith|1|2|2|2|cell-halign|r>|<cwith|2|3|2|2|cell-halign|r>|<cwith|1|1|2|2|cell-halign|c>|<cwith|2|2|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|c>|<cwith|2|2|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|c>|<cwith|3|3|2|2|cell-halign|r>|<table|<row|<cell|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|)><around*|(|r|)>>|<cell|=>|<cell|max<around*|(|r<rsub|a>,\n    max<around*|(|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|s|)><around*|(|r<rsub|a>|)>+r<rsub|a>,<next-line><htab|5mm>extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|r<rsub|b>|)>|)>+r<rsub|b>-r|)>>>|<row|<cell|>|<cell|where>|<cell|r<rsub|a>\\<assign\\>256+bitSize<around*|(|A|)>>>|<row|<cell|>|<cell|and>|<cell|r<rsub|b>\\<assign\\>bitSize<around*|(|B|)>+bitSize<around*|(|C|)>>>>>\n  </eqnarray*>\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|3|2|2|cell-halign|r>|<cwith|2|6|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|2|2|2|2|cell-halign|r>|<cwith|2|3|2|2|cell-halign|r>|<cwith|2|3|2|2|cell-halign|r>|<cwith|2|3|2|2|cell-halign|c>|<cwith|2|2|2|2|cell-halign|r>|<cwith|3|3|2|2|cell-halign|r>|<cwith|1|1|2|2|cell-halign|c>|<cwith|4|4|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|c>|<cwith|4|4|2|2|cell-halign|r>|<cwith|5|5|2|2|cell-halign|r>|<cwith|5|5|2|2|cell-halign|r>|<cwith|5|5|2|2|cell-halign|c>|<cwith|5|5|2|2|cell-halign|r>|<table|<row|<cell|extraCellsBound<rsup|TCO><rsub|static><around*|(|<math-ss|disconnect><rsub|A,B,C,D>\n    s t|)><math|>>|<cell|=>|<cell|<around*|\\<langle\\>|max<around*|(|n<rsub|t>,r<rsub|b>+max<around*|(|n<rsub|s>,m<rsub|t>,r<rsub|a>+m<rsub|s>|)>|)>,r<rsub|a>|\\<rangle\\>>>>|<row|<cell|>|<cell|where>|<cell|<around*|\\<langle\\>|n<rsub|s>,m<rsub|s>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|s|)>>>|<row|<cell|>|<cell|and>|<cell|<around*|\\<langle\\>|n<rsub|t>,m<rsub|t>|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>>|<row|<cell|>|<cell|and>|<cell|r<rsub|a>\\<assign\\>256+bitSize<around*|(|A|)>>>|<row|<cell|>|<cell|and>|<cell|r<rsub|b>\\<assign\\>bitSize<around*|(|B|)>+bitSize<around*|(|C|)>>>>>\n  </eqnarray*>\n\n  The correctness theorems about these analyses still holds:\n\n  <\\lemma>\n    For any Simplicity expression with delegation <math|t:A\\<vdash\\>B>, such\n    that\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|\\<Theta\\><rprime|'>\\<vartriangleright\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>>\n    </equation*>\n\n    we have that\n\n    <\\enumerate>\n      <item><math|cellCount<around*|(|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|)>=cellCount<around*|(|<around*|[|\\<Theta\\><rprime|'>\\<vartriangleright\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>|)>>\n\n      <item><math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|<around*|[|\\<Theta\\><rprime|'>\\<vartriangleright\\>r<rsub|0><rprime|'>\\|w<rsub|0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rprime|'>|]>>|)>\\<leq\\><next-line><htab|5mm>cellCount<around*|(|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\|w<rsub|0>\\<vartriangleleft\\>\\<Xi\\>|]>|)>+extraCellsBound<around*|(|t|)>>.\n    </enumerate>\n\n    In particular for <math|a:A> and\n\n    <\\equation*>\n      <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|><around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>\n    </equation*>\n\n    we have that\n\n    <math|cellsReq<around*|(|<prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<around*|\\<llangle\\>|t|\\<rrangle\\>>|><around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>|)>\\<leq\\><next-line><htab|5mm>bitSize<around*|(|A|)>+bitSize<around*|(|B|)>+extraCellsBound<around*|(|t|)>>.\n  </lemma>\n\n  <\\lemma>\n    For any Simplicity expression with delegation <math|t:A\\<vdash\\>B>, such\n    that\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|<TCOon|t>|<around*|[|\\<Theta\\><rsub|on><rprime|'>\\<vartriangleright\\>r<rsub|on,0><rprime|'>\\|w<rsub|on,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|on><rprime|'>|]>><rsup|\\<nosymbol\\>>\n    </equation*>\n\n    and\n\n    <\\equation*>\n      <prog|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|<TCOoff|t><rsup|\\<nosymbol\\>>|<around*|[|\\<Theta\\><rsub|off><rprime|'>\\<vartriangleright\\>r<rsub|off,0><rprime|'>\\|w<rsub|off,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|off><rprime|'>|]>>\n    </equation*>\n\n    we have that\n\n    <\\enumerate>\n      <item><math|cellCount<around*|(|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|)>=cellCount<around*|(|r<rsub|on,0>|)>+cellCount<around*|(|<around*|[|\\<Theta\\><rsub|on><rprime|'>\\<vartriangleright\\>r<rsub|on,0><rprime|'>\\|w<rsub|on,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|on><rprime|'>|]>|)>>\n      and<next-line><math|cellCount<around*|(|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|)>=cellCount<around*|(|<around*|[|\\<Theta\\><rsub|off><rprime|'>\\<vartriangleright\\>r<rsub|off,0><rprime|'>\\|w<rsub|off,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|off><rprime|'>|]>|)>>\n\n      <item><math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|<TCOon|t>|<around*|[|\\<Theta\\><rsub|on><rprime|'>\\<vartriangleright\\>r<rsub|on,0><rprime|'>\\|w<rsub|on,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|on><rprime|'>|]>>|)>\\<leq\\><next-line><htab|5mm>cellCount<around*|(|<around*|[|\\<Theta\\><rsub|on>\\<vartriangleright\\>r<rsub|on,0>\\|w<rsub|on,0>\\<vartriangleleft\\>\\<Xi\\><rsub|on>|]>|)>+extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|cellCount<around*|(|r<rsub|on,0>|)>|)>>\n      and<next-line><math|cellsReq<around*|(|<prog|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|<TCOoff|t><rsup|\\<nosymbol\\>>|<around*|[|\\<Theta\\><rsub|off><rprime|'>\\<vartriangleright\\>r<rsub|off,0><rprime|'>\\|w<rsub|off,0><rprime|'>\\<vartriangleleft\\>\\<Xi\\><rsub|off><rprime|'>|]>>|)>\\<leq\\><next-line><htab|5mm>cellCount<around*|(|<around*|[|\\<Theta\\><rsub|off>\\<vartriangleright\\>r<rsub|off,0>\\|w<rsub|off,0>\\<vartriangleleft\\>\\<Xi\\><rsub|off>|]>|)>+extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|0|)>>.\n    </enumerate>\n\n    In particular for <math|a:A> and\n\n    <\\equation*>\n      <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n    </equation*>\n\n    we have that\n\n    <math|cellsReq<around*|(|<prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>|)>\\<leq\\><next-line><htab|5mm>bitSize<around*|(|A|)>+bitSize<around*|(|B|)>+extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)><around*|(|0|)>>.\n  </lemma>\n\n  <\\lemma>\n    For any Simplicity expression with delegation <math|t:A\\<vdash\\>B>,\n\n    <\\equation*>\n      <math|extraCellsBound<rsup|TCO><rsub|dyn><around*|(|t|)>=interp<rsup|TCO><around*|(|extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>|)>><text|.>\n    </equation*>\n  </lemma>\n\n  <\\corollary>\n    For any Simplicity expression with delegation <math|t:A\\<vdash\\>B> and\n    <math|a:A> such that\n\n    <\\equation*>\n      <prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>\n    </equation*>\n\n    we have that\n\n    <math|cellsReq<around*|(|<prog|<around*|[|<emptyFrame><rep|a|>\\|<emptyFrame><carr|?><rsup|bitSize<around*|(|B|)>>|]>|<TCOoff|t>|<around*|[|<emptyFrame><rep|a|>\\|<rep|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><around*|(|a|)>|><emptyFrame>|]>>|)>\\<leq\\>bitSize<around*|(|A|)>+bitSize<around*|(|B|)>+max<around*|(|n,m|)>>\n\n    <no-indent>where <math|<around*|\\<langle\\>|n,m|\\<rangle\\>>\\<assign\\>extraCellsBound<rsup|TCO><rsub|static><around*|(|t|)>>.\n  </corollary>\n\n  <section|Unbounded Loops><label|ss:unboundedLoop>\n\n  While the primary purpose of <samp|disconnect> is for delegation, the\n  construct can be used to create what is effectively an unbounded loop in\n  Simplicity. Given a Simplicity expression, <math|t\\<of\\>A\\<vdash\\>A+B>, we\n  can build a commitment Merkle root to an expression that will repeatedly\n  recursively evaluate <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>>:A\n  \\<rightarrow\\>A+B> on an input <math|A> until a <math|B> value is returned.\n\n  Consider a Simplicity expression <math|t\\<of\\>A\\<vdash\\>A+B>, and a\n  continuation <math|k\\<of\\>A\\<times\\><2><rsup|256>\\<vdash\\>B>. We define\n  <math|<samp|loopBody> t k>:\n\n  <\\render-code>\n    <math|<math-ss|loopBody> t k\\<of\\>A\\<times\\><2><rsup|256>\\<vdash\\>B>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|loopBody>\n    t k>>|<cell|:=>|<cell|<math|<math-ss|take> t \\<vartriangle\\>\n    <math-ss|IH>>>>|<row|<cell|>|<cell|;>|<cell|<samp|case>\n    <math|<around*|(|<math-ss|disconnect> <around*|(|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\> <math-ss|IH>|)> k;\n    <math|<math-ss|IH>>|)>> <math|<math-ss|OH>>>>>>>>>>>>\n  </render-code>\n\n  \\;\n\n  Let us consider the semantics <math|<around*|\\<llbracket\\>|<math-ss|loopBody>\n  t k|\\<rrbracket\\>><rsup|\\<cal-M\\>>>. Given inputs <math|a<rsub|0>\\<of\\>A>\n  and <math|h\\<of\\><2><rsup|256>>, then in the first clause in the definition\n  of <samp|loopBody> we have\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|take> t \\<vartriangle\\>\n    <math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|0>,h|\\<rangle\\>>=\\<phi\\><rsup|\\<cal-M\\>><around*|\\<langle\\>|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|0>|)>,\\<eta\\><rsup|\\<cal-M\\>><around*|(|h|)>|\\<rangle\\>>\\<of\\>\\<cal-M\\><around*|(|<around*|(|A+B|)>\\<times\\><2><rsup|256>|)><text|.>\n  </equation*>\n\n  It evaluates <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|0>|)>>\n  and pairs that with <math|h>. For those contexts in which\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|0>|)>>\n  doesn't fail, it results in either an <injl|<around*|(|a<rsub|1>|)>\\<of\\>A+B>\n  for some <math|a<rsub|1>\\<of\\>A>, or <injr|<around*|(|b|)>\\<of\\>A+B> from\n  some <math|b\\<of\\>B>. Let us consider the easy case,\n  <math|<injr|<around*|(|b|)>>>, first. The remainder of <samp|loopBody>\n  continues as follows.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|>|<cell|>|<cell|<around*|\\<llbracket\\>|<samp|case>\n    <math|<around*|(|<math-ss|disconnect> <around*|(|<math-ss|assert>\n    <around*|(|<math-ss|OIH> \\<vartriangle\\> <math-ss|IH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\> <math-ss|OH>|)> k;\n    <math|<math-ss|IH>>|)>> <math|<math-ss|OH>>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injr|<around*|(|b|)>>,h|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<llbracket\\>|<math|<math-ss|OH>>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|b,h|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|\\<eta\\><rsup|\\<cal-M\\>><around*|(|b|)>>>>>\n  </eqnarray*>\n\n  Whenever <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|0>|)>>,\n  \\Preturns\\Q a <injr|<around*|(|b|)>> value, that <math|b> value is the\n  \\Presult\\Q of <math|<around*|\\<llbracket\\>|<math-ss|loopBody> t\n  k|\\<rrbracket\\>>>, and <math|k> is ignored.\n\n  Now let us consider the case when <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|0>|)>>\n  results in an <injl|<around*|(|a<rsub|1>|)>> value. In this case the\n  remainder of <samp|loopBody> continues as follows.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|>|<cell|>|<cell|<around*|\\<llbracket\\>|<samp|case>\n    <math|<around*|(|<math-ss|disconnect> <around*|(|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\> <math-ss|IH>|)> k;\n    <math|<math-ss|IH>>|)>> <math|<math-ss|OH>>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injl|<around*|(|a<rsub|1>|)>>,h|\\<rangle\\>>>>|<row||<cell|=>|<cell|<around*|\\<llbracket\\>|<math|<math-ss|disconnect>\n    <around*|(|<math-ss|assert> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n    <math-ss|OH> ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|)> k; <math|<math-ss|IH>>>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math|<math-ss|IH>>|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<leftarrowtail\\><around*|\\<llbracket\\>|<math|<math-ss|disconnect>\n    <around*|(|<math-ss|assert> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n    <math-ss|OH> ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|)> k>|\\<rrbracket\\>><rsup|\\<cal-M\\>>|)><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math|<math-ss|IH>>|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<leftarrowtail\\><around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    k|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<leftarrowtail\\><around*|\\<llbracket\\>|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>>|)><around*|\\<langle\\>|<cmr|k>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    k;<math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<leftarrowtail\\><around*|\\<llbracket\\>|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>>|)><around*|\\<langle\\>|<cmr|k>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math-ss|drop>\n    k|\\<rrbracket\\>><rsup|\\<cal-M\\>>\\<leftarrowtail\\><around*|\\<llbracket\\>|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>>|)><around*|\\<langle\\>|<cmr|k>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  For the first part we have\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|>|<cell|>|<cell|<around*|\\<llbracket\\>|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<cmr|k>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>><around*|(|<around*|\\<llbracket\\>|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|\\<rrbracket\\>><rsup|<maybe>><around*|\\<langle\\>|<cmr|k>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>|)>>>|<row|<cell|>|<cell|=>|<cell|\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>><around*|(|\\<phi\\><rsup|<maybe>><around*|\\<langle\\>|<around*|\\<llbracket\\>|<math-ss|assert>\n    <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n    ;<math-ss|eq><rsub|<2><rsup|256>>|)>|\\<rrbracket\\>><rsup|<maybe>><around*|\\<langle\\>|<cmr|k>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>,\\<eta\\><rsup|S><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>|)>>>|<row|<cell|>|<cell|=>|<cell|\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>><around*|(|\\<phi\\><rsup|<maybe>><around*|\\<langle\\>|<around*|\\<llbracket\\>|<math-ss|IIH>\n    \\<vartriangle\\> <math-ss|OH> ;<math-ss|eq><rsub|<2><rsup|256>>|\\<rrbracket\\>><around*|\\<langle\\>|<cmr|k>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>,\\<eta\\><rsup|S><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>|)>>>|<row|<cell|>|<cell|=>|<cell|\\<iota\\><rsup|\\<cal-M\\>><rsub|<maybe>><around*|(|\\<phi\\><rsup|<maybe>><around*|\\<langle\\>|<around*|\\<llbracket\\>|<math-ss|eq><rsub|<2><rsup|256>>|\\<rrbracket\\>><around*|\\<langle\\>|h,<cmr|k>|\\<rangle\\>>,\\<eta\\><rsup|S><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>|)>>>>>\n  </eqnarray*>\n\n  We know that <math|<around*|\\<llbracket\\>|<math-ss|eq><rsub|<2><rsup|256>>|\\<rrbracket\\>><around*|\\<langle\\>|h,<cmr|k>|\\<rangle\\>>=<math-tt|1><rsub|<2>>=\\<eta\\><rsup|S><around*|\\<langle\\>||\\<rangle\\>>>\n  if and only if <math|h=<cmr|k>> and that\n  <math|<around*|\\<llbracket\\>|<math-ss|eq><rsub|<2><rsup|256>>|\\<rrbracket\\>><around*|\\<langle\\>|h,<cmr|k>|\\<rangle\\>>=<math-tt|0><rsub|<2>>=\\<emptyset\\><rsup|S>>\n  if and only if <math|h\\<neq\\><cmr|k>>. When <math|h\\<neq\\><cmr|k>>, then\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|assert> <around*|(|<math-ss|IIH>\n    \\<vartriangle\\> <math-ss|OH> ;<math-ss|eq><rsub|<2><rsup|256>>|)>\n    \\<vartriangle\\> <math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>,<cmr|k>|\\<rangle\\>>=\\<emptyset\\><rsup|\\<cal-M\\>>\n  </equation*>\n\n  and the whole <samp|loopBody> expression fails with a\n  <math|\\<emptyset\\><rsup|\\<cal-M\\>><rsub|B>> result. However, when\n  <math|h=<cmr|k>> we have that\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<math-ss|assert> <around*|(|<math-ss|IIH>\n    \\<vartriangle\\> <math-ss|OH> ;<math-ss|eq><rsub|<2><rsup|256>>|)>\n    \\<vartriangle\\> <math-ss|IH>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>,<cmr|k>|\\<rangle\\>>=\\<eta\\><rsup|\\<cal-M\\>><around*|\\<langle\\>|<around*|\\<langle\\>||\\<rangle\\>>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>\n  </equation*>\n\n  and we can continue with\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|drop>\n    k|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<around*|\\<langle\\>||\\<rangle\\>>,<around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>|\\<rangle\\>>>|<cell|=>|<cell|<around*|\\<llbracket\\>|k|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  and the result is that\n\n  <\\equation*>\n    <around*|\\<llbracket\\>|<samp|case> <math|<around*|(|<math-ss|disconnect>\n    <around*|(|<math-ss|assert> <around*|(|<math-ss|IIH> \\<vartriangle\\>\n    <math-ss|OH> ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n    <math-ss|IH>|)> k; <math|<math-ss|IH>>|)>>\n    <math|<math-ss|OH>>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|<injl|<around*|(|a<rsub|1>|)>>,h|\\<rangle\\>>=<around*|\\<llbracket\\>|k|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>><text|.>\n  </equation*>\n\n  \\;\n\n  Recapping, when <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|0>|)>>\n  results in an <injl|<around*|(|a<rsub|1>|)>>, then\n  <math|<around*|\\<llbracket\\>|<math-ss|loopBody> t\n  k|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|0>,h|\\<rangle\\>>>\n  evaluates the continuation <math|<around*|\\<llbracket\\>|k|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>>\n  under the condition that the <math|h> value matches the commitment Merkle\n  root of <math|k>, i.e. <math|h=<cmr|k>>, and fails when\n  <math|h\\<neq\\><cmr|k>>.\n\n  Now let us consider <samp|loopBody>'s commitment Merkle root,\n  <math|<cmr|<math-ss|loopBody> t k>>. Because of the use of\n  <samp|disconnect>, this commitment Merkle root is independent of the\n  expression <math|k>.\n\n  <\\lemma>\n    For all <math|t\\<of\\>A\\<vdash\\>A+B> and\n    <math|k\\<of\\>A\\<times\\><2><rsup|256>\\<vdash\\>B>,\n    <math|<cmr|<math-ss|loopBody> t k>=loopBodyCMR<around*|(|t|)>> where\n\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|loopBodyCMR<around*|(|t|)>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|comp>>><rsub|IV>\\<comma\\>\n      <around*|\\<langle\\>|<cmr|<math-ss|take> t \\<vartriangle\\>\n      <math-ss|IH>>,<next-line>SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|case>>><rsub|IV>\\<comma\\>\n      <around*|\\<langle\\>|loopTail,<cmr|<math-ss|OH>>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>>>>>\n    </eqnarray*>\n\n    and\n\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|loopTail>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|comp>>><rsub|IV>\\<comma\\>\n      <around*|\\<langle\\>|<next-line>SHA256<rsub|Block><around*|\\<langle\\>|<math|SHA256<rsup|tag<rsup|c><rsub|<math-ss|disconnect>>><rsub|IV>>\\<comma\\>\n      <around*|\\<langle\\>|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>,<cmr|<math-ss|assert>\n      <around*|(|<math-ss|IIH> \\<vartriangle\\> <math-ss|OH>\n      ;<math-ss|eq><rsub|<2><rsup|256>>|)> \\<vartriangle\\>\n      <math-ss|IH>>|\\<rangle\\>>|\\<rangle\\>>,<cmr|<math-ss|IH>>|\\<rangle\\>>|\\<rangle\\>><text|.>>>>>\n    </eqnarray*>\n  </lemma>\n\n  While the commitment Merkle root of <math|<samp|loopBody> t k> does not\n  restrict what the continuation <math|k> is, the second component of the\n  input to the expression does, since <math|h=<cmr|k>> is required for\n  evaluation to be successful. We can build a new expression that forces the\n  continuation <math|k> to be <math|<math-ss|loopBody> t k> itself:\n\n  <\\render-code>\n    <math|<math-ss|loop> t k\\<of\\>A\\<vdash\\>B>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|loop>\n    t k>>|<cell|:=>|<cell|<math|<math-ss|iden> \\<vartriangle\\>\n    scribe<around*|(|loopBodyCMR<around*|(|t|)>|)>; <math-ss|loopBody> t\n    k>>>>>>>>>>>\n  </render-code>\n\n  Again, <samp|loop>'s commitment Merkle root is independent of the\n  continuation <math|k>:\n\n  <\\lemma>\n    For all <math|t\\<of\\>A\\<vdash\\>A+B> and\n    <math|k\\<of\\>A\\<times\\><2><rsup|256>\\<vdash\\>B>,\n    <math|<cmr|<math-ss|loop> t k>=loopCMR<around*|(|t|)>> where\n\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|loopCMR<around*|(|t|)>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|c><rsub|<math-ss|comp>>><rsub|IV>\\<comma\\>\n      <around*|\\<langle\\>|<cmr|<math-ss|iden> \\<vartriangle\\>\n      scribe<around*|(|loopBodyCMR<around*|(|t|)>|)>>,loopBodyCMR<around*|(|t|)>|\\<rangle\\>>|\\<rangle\\>><text|.>>>>>\n    </eqnarray*>\n  </lemma>\n\n  By design, <math|<around*|\\<llbracket\\>|<math-ss|loop> t\n  k|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|0>|)>> passes\n  <math|loopBodyCMR<around*|(|t|)>> as the <math|h> value to\n  <math|<math-ss|loopBody> t k>, and the result can only be successful when\n  <math|<cmr|k>=loopBodyCMR<around*|(|t|)>=<cmr|<math-ss|loopBody> t\n  k<rprime|'>>> for some further continuation\n  <math|k<rprime|'>\\<of\\>A\\<times\\><2><rsup|256>\\<vdash\\>B>. Furthermore, the\n  same <math|h> value, is passed again into\n  <math|><math|<around*|\\<llbracket\\>|k|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>=<around*|\\<llbracket\\>|<math-ss|loopBody>\n  t k<rprime|'>|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|\\<langle\\>|a<rsub|1>,h|\\<rangle\\>>>,\n  and that result can only be successful when\n  <math|<cmr|k<rprime|'>>=<cmr|<math-ss|loopBody> t k<rprime|''>>> for some\n  yet further continuation <math|k<rprime|''>\\<of\\>A\\<times\\><2><rsup|256>\\<vdash\\>B>.\n\n  This process looks endless, making it impossible to redeem any\n  loopCMR<around*|(|t|)> commitment. However we can end this chain by using\n\n  <\\render-code>\n    <math|<math-ss|loopEnd> t\\<of\\>A\\<times\\><2><rsup|256>\\<vdash\\>B>\n\n    <tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<math-ss|loopEnd>\n    t>>|<cell|:=>|<cell|<math|<math-ss|take> t \\<vartriangle\\>\n    <math-ss|IH>>>>|<row|<cell|>|<cell|;>|<cell|<samp|assertr>\n    <math|loopTail> <math|<math-ss|OH>>>>>>>>>>>>\n  </render-code>\n\n  The <math|<samp|loopEnd> t> expression replaces the <samp|case> combinator\n  in <math|<samp|loopBody> t> with an assertion that\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|n>|)>>\n  results in a <math|<injr|<around*|(|b|)>>>. By construction\n  <math|<cmr|<math-ss|loopEnd> t>=loopBodyCMR<around*|(|t|)>>, so that it can\n  be used as a final continuation to terminate our chain of expressions in\n  <math|<math-ss|loop> t k>.\n\n  Tying everything together, we have a commitment Merkle root,\n  <math|loopCMR<around*|(|t|)>>, that makes a commitment to a subexpression\n  that can be redeemed by a subexpression of the form\n\n  <\\equation*>\n    <math-ss|loop> t <around*|(|<math-ss|loopBody> t\n    <around*|(|<math-ss|loopBody> t <around*|(|\\<ldots\\><around*|(|<math-ss|loopBody>\n    t <around*|(|<math-ss|loopEnd> t|)>|)>|)>|)>|)>\n  </equation*>\n\n  where <samp|loopBody> is repeated the number of times necessary for\n  <math|<around*|\\<llbracket\\>|t|\\<rrbracket\\>><rsup|\\<cal-M\\>><around*|(|a<rsub|n>|)>>\n  to result in a <math|<injr|<around*|(|b|)>>> value in the particular\n  redemption context. Note that while it appears that <math|t> is duplicated\n  <math|n> times, the subexpression <math|t> will be shared in a DAG\n  representation of this expression, avoiding a large of a blow up in program\n  size.\n\n  We have repeated the same expression <math|t> in during redemption in the\n  above example; however, if the <math|t> expression contains <samp|witness>\n  subexpressions, those witness values could be different for each instance\n  of <math|t> shown above. Thus, more generally, the commitment can be\n  redeemed by\n\n  <\\equation*>\n    <math-ss|loop> t<rsub|0> <around*|(|<math-ss|loopBody> t<rsub|1>\n    <around*|(|<math-ss|loopBody> t<rsub|2>\n    <around*|(|\\<ldots\\><around*|(|<math-ss|loopBody> t<rsub|n-1>\n    <around*|(|<math-ss|loopEnd> t<rsub|n>|)>|)>|)>|)>|)>\n  </equation*>\n\n  when <math|<cmr|t<rsub|i>>=<cmr|t>> for all <math|i>. For example, this\n  construction would let you build a Simplicity expression that takes an\n  arbitrarily long stream of SHA-256's 512 bit data blocks and computes the\n  SHA-256 compression function composed over this stream of blocks by putting\n  each data block into a <samp|witness> expression within the different\n  <math|t<rsub|i>>'s.\n\n  <subsection|Adding a <samp|loop> primitive to Simplicity?>\n\n  The purpose of the above derivation of the <samp|loop> construction is to\n  understand the theoretical expressiveness that Simplicity's delegation\n  extension adds to the language. The <samp|loop> construction proves that\n  the delegation extension brings Simplicity's expressiveness beyond what is\n  possible with full Simplicity without delegation.\n\n  While it is, in principle, possible to use the <samp|loop> construction in\n  Simplicity applications (that support the delegation extension), the\n  <samp|loop> construction is subject to all the same problems that using\n  delegation entails: One cannot bound the computation costs of redemption at\n  commitment time using general purpose static analysis. One might be able to\n  perform an ad-hoc analysis on a particular program in order to bound the\n  computation costs, but there are programs you can write in Simplicity with\n  delegation where no upper bound on redemption costs exists. As with\n  <samp|disconnect>, using <samp|loop> risks creating program that ends up\n  impractical to redeem due to costs. Therefore we strongly recommend against\n  using <samp|loop> in practice.\n\n  If, contrary to our expectations, the <samp|loop> construction ends up very\n  popular, we could amend the specification of Simplicity to add native\n  <math|<samp|loop> t k> and <math|<math-ss|loopEnd> t> combinators to\n  Simplicity such that their commitment Merkle roots that depends only on\n  <math|t>, and with rules that require the continuation <math|k> be one of\n  the two <samp|loop> constructors (with the same <math|t> parameter). This\n  would somewhat reduce the overhead of using unbounded loops.\n\n  <section|Universal Signature Hash Modes><label|ss:UniversalSignatureHashModes>\n\n  In Section<nbsp><reference|ss:checkSigHashAll> we defined a Simplicity\n  Program for a single signature check with over fixed <samp|hashAll>\n  transaction digest message. However, in Bitcoin Script, the user can select\n  among a set of multiple different signature hash modes. Moreover, this\n  choice is made at redeption time rather than at commitment time. We could\n  replicate this behaviour by writing a Simplicity program that, given a\n  signature hash flag value defined by a <samp|witness> node, selects amongst\n  a small variety of transaction digest expressions to use. However by using\n  <samp|disconnect>, we can provide the user with an unlimited choice of\n  signature hash modes.\n\n  Below we define <math|<samp|sigHash> t> where\n  <math|t\\<of\\><1>\\<vdash\\><2><rsup|256>> is a Simplicity expression that\n  defines some signature hash mode.\n\n  <\\render-code>\n    <math|<math-ss|sigHash> t\\<of\\><1>\\<vdash\\><2><rsup|256>>\n\n    <math|<tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|4|2|2|cell-halign|r>|<cwith|4|4|2|2|cell-halign|r>|<table|<row|<cell|<math-ss|sigHash>\n    t>|<cell|:=>|<cell|<math-ss|scribe><around*|(|SHA256<rsub|IV><rsup|<math-tt|[<SimplicityPrefix>1f5369676e6174757265]>>|)>>>|<row|<cell|>|<cell|<math|\\<vartriangle\\>>>|<cell|<samp|disconnect>\n    <math-ss|iden> t>>|<row|<cell|>|<cell|;>|<cell|<math-ss|sha256-block>)<math|\\<vartriangle\\>><math-ss|scribe><around*|(|<around*|\\<lfloor\\>|2<rsup|511>+1024|\\<rfloor\\>><rsub|512>|)>>>|<row|<cell|>|<cell|;>|<cell|<math-ss|sha256-block>>>>>>>>>>>>\n  </render-code>\n\n  This expression can be composed with pubkey key and signature values to\n  form a Simplicity program that supports universal signature hash modes.\n\n  <\\render-code>\n    <math|<around*|(|<math-ss|checkSigHash>\n    t|)><around*|\\<langle\\>|p,s|\\<rangle\\>>\\<of\\><1>\\<vdash\\><1>>\n\n    <math|<tabular|<tformat|<table|<row|<cell|<subtable|<tformat|<cwith|1|-1|2|2|cell-halign|r>|<table|<row|<cell|<math|<around*|(|<math-ss|checkSigHash>\n    t|)>><around*|\\<langle\\>|p,s|\\<rangle\\>>>|<cell|:=>|<cell|<around*|(|<math-ss|scribe><rsub|PubKey><around*|(|p|)><math|<math|>\\<vartriangle\\>><math-ss|sigHash>\n    t|)> \\<vartriangle\\> <math-ss|witness><rsub|Sig><around*|(|s|)>>>|<row|<cell|>|<cell|;>|<cell|<math-ss|bip-0340-verify>>>>>>>>>>>>\n  </render-code>\n\n  The <math|<math-ss|sigHash> t> expression is similar to the definition of\n  <samp|sigHashAll> from Section<nbsp><reference|ss:checkSigHashAll>. \\ The\n  difference is that we have replaced the\n  <math|<around*|(|<samp|scribe><around*|(|<math|<cmr|<math-ss|hashAll>>>|)><math|\\<vartriangle\\>><samp|hashAll>|)>>\n  subexpression with <math|<samp|disconnect> <math-ss|iden> t>. \\ When\n  <math|t> is <samp|hashAll>, these two expressions have identical semantics:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|>|<cell|>|<cell|<around*|\\<llbracket\\>|<samp|disconnect>\n    <math-ss|iden> <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>;<math-ss|iden>;<math-ss|take> <math-ss|iden>\n    \\<vartriangle\\> <math-ss|drop> <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>>|)><around*|\\<langle\\>||\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>>\\<leftarrowtail\\>\\<eta\\><rsup|BC>\\<leftarrowtail\\><around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>|\\<rrbracket\\>><rsup|<BC>>|)><around*|\\<langle\\>||\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>>\\<leftarrowtail\\><around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>|\\<rrbracket\\>><rsup|<BC>>|)><around*|\\<langle\\>||\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>>\\<leftarrowtail\\>\\<eta\\><rsup|BC>\\<circ\\><around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>|\\<rrbracket\\>>|)><around*|\\<langle\\>||\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|(|<around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>>\\<circ\\><around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>\\<vartriangle\\>\n    <math|<math-ss|iden>>|\\<rrbracket\\>>|)><around*|\\<langle\\>||\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|<around*|\\<llbracket\\>|<math-ss|take>\n    <math-ss|iden> \\<vartriangle\\> <math-ss|drop>\n    <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>|<around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>,<around*|\\<langle\\>||\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|\\<phi\\><around*|\\<langle\\>|<around*|(|\\<eta\\><rsup|BC>\\<circ\\><around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>|\\<rrbracket\\>>|)><around*|\\<langle\\>||\\<rangle\\>>,<around*|\\<llbracket\\>|\n    <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|<cell|=>|<cell|\\<phi\\><around*|\\<langle\\>|<around*|\\<llbracket\\>|<math-ss|scribe><around*|(|<cmr|<math-ss|hashAll>>|)>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>,<around*|\\<llbracket\\>|\n    <math-ss|hashAll>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|>|=|<cell|<around*|\\<llbracket\\>|<samp|scribe><around*|(|<cmr|<math-ss|hashAll>>|)><math|\\<vartriangle\\>><samp|hashAll>|\\<rrbracket\\>><rsup|<BC>><around*|\\<langle\\>||\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  The difference between the two expressions is that the subexpression\n  <math|<samp|disconnect> <math-ss|iden> <math-ss|hashAll>> does not commit\n  to using the <math|<math-ss|hashAll>> transaction digest. \\ During\n  redemption any alternative expression \\ <math|t\\<of\\><1>\\<vdash\\><2><rsup|256>>\n  for creating a digest can be used instead. \\ Because <math|<cmr|t>> is\n  covered by the digital signature proveded to <math|<samp|checkSigHash> t>,\n  the signature fixes the digest expression and it cannot be altered by a\n  third party while still satisfying the <math|<math-ss|bip-0340-verify>>,\n  with the exception of any <samp|witness> values or <samp|disconnect>ed\n  expressions within <math|t>. This allows users not only to simulate any of\n  Script's signature hash flags, but to create and use any novel signtature\n  hash mode that they desire.\n\n  <subsection|Side-Effects and Delegation>\n\n  While the primary purpose of the <math|t\\<of\\><1>\\<vdash\\><2><rsup|256>>\n  parameter in <math|<math-ss|checkSigHash> t> is to use the Bitcoin\n  primitives (or more generally the primitives for the specific blockchain\n  application being used) to construct a cryptographic digest, the <math|t>\n  parameter can additionally include assertion side-effects. \\ For example,\n  one could include a condition that an absolute or relative timelock meets\n  some specific threshold, without the signature covering any specific\n  timelock value in the digest.\n\n  Another possibility is to have the expression return a trivial value (e.g.\n  <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>>) and have <math|t>\n  itself contain its own <math|<around*|(|<samp|checkSigHash>\n  t<rprime|'>|)><around*|\\<langle\\>|p<rprime|'>,s<rprime|'>|\\<rangle\\>>>\n  program for a different public key and its own digest expression\n  <math|t<rprime|'>>. \\ The side-effect of the <math|<math-ss|schnorrAssert>>\n  within this inner <samp|checkSigHash> expression essures that the whole\n  Simplicity expression is only successful if the signature\n  <math|s<rprime|'>> is valid for the public key <math|p<rprime|'>> and for\n  the transaction digest <math|t<rprime|'>>. This process lets you delegate\n  control to another public key by creating a signature with the original\n  public key that covers such a delegaton mode for a specific public key,\n  <math|p<rprime|'>>. \\ Further conditions can be added as to such a\n  delegation such as checks to limit the amount of funds being spent while\n  ensuring the change is send back to a fixed address. \\ Such delegation can\n  be recursively applied, but could also be restricted by delegating to\n  <math|<around*|(|<samp|checkSigHashAll>|)><around*|\\<langle\\>|p<rprime|'>,s<rprime|'>|\\<rangle\\>>>\n  or to some other fixed set of signature hash modes instead.\n\n  Using <math|<around*|(|<samp|checkSigHash>\n  t|)><around*|\\<langle\\>|p,s|\\<rangle\\>>> as a standard Simplicity\n  expression gives users maximal control over how they are able to later\n  redeem their funds.<chapter|Type Inference and Serialization>\n\n  In this chapter we will define a representation of Simplicity expressions\n  as an untyped Simplicity DAG where subexpressions have explicit sharing. We\n  will define how to perform type inference and reconstruct a Simplicity\n  expression from this Simplicity DAG and we will define a binary\n  serialization format for these Simplicity DAGs.\n\n  <section|Explicit Simplicity DAGs><label|ss:DAGs>\n\n  In this section, we will introduce an DAG representation for (untyped)\n  Simplicity expressions with explicit sharing of subexpressions. A\n  Simplicity DAG is a topologically sorted list of Simplicity nodes. Each\n  Simplicity node is a combinator name with a payload of references to\n  earlier nodes in the list, or a payload of witness data, etc.\n\n  First we enumerate the possible values for Simplicity nodes.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<cwith|1|1|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-col-span|1>|<table|<row|<cell|<math|<math-ss|`iden'>\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<cwith|1|1|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-col-span|1>|<table|<row|<cell|<math|<math-ss|`unit'>\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`injl'>\n    i\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`injr'>\n    i\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`take'>\n    i\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`drop'>\n    i\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>|<cell|<math|j\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`comp'>\n    i j\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>|<cell|<math|j\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`case'>\n    i j\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>|<cell|<math|j\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`pair'>\n    i j\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|i\\<of\\>\\<bbb-N\\>>>|<cell|<math|j\\<of\\>\\<bbb-N\\>>>>>>>>>|<row|<cell|<math|<math-ss|`disconnect'>\n    i j\\<of\\>Node>>>>>>\n\n    \\;\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|v\\<of\\><2><rsup|\\<ast\\>>>>>>>>>>|<row|<cell|<math|<math-ss|`witness'>\n    v\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|b\\<of\\><2><rsup|512>>>>>>>>>|<row|<cell|<math|<math-ss|`fail'>\n    b\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|1|1|cell-halign|c>|<table|<row|<cell|<math|h\\<of\\><2><rsup|256>>>>>>>>>|<row|<cell|<math|<math-ss|`hidden'>\n    h\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  In addition to the above, every primitive name is a Node. This set of\n  primitives is application specific. For Simplicity with Bitcoin, we have\n  <math|<math-ss|`version'>\\<of\\>Node>, <math|<math-ss|`lockTime'>\\<of\\>Node>,\n  etc.\n\n  The single quotes around the Node names is there to distinguish them from\n  their corresponding Simplicity combinator. Notice that there is not a\n  perfect 1-to-1 relationship between Node names and Simplicity combinators.\n  In particular, there are no Node names for the <samp|assertl> and\n  <samp|assertr> combinators. Instead we have one <samp|`hidden'> Node name\n  that will be used in conjunction with <samp|`case'> to represent\n  assertions.\n\n  A Simplicity DAG is represented as a topologically sorted, (non-empty) list\n  of Nodes. (You may wish to review Section<nbsp><reference|ss:ListFunctors>\n  to recall our notation for list related operators.)\n\n  <\\equation*>\n    DAG\\<assign\\>Node<rsup|+>\n  </equation*>\n\n  Each node has between 0 and 2 references to nodes found earlier in the list\n  represented by a relative offset.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|ref<around*|(|<math-ss|`iden'>|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`unit'>|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`injl'>\n    i|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`injr'>\n    i|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`take'>\n    i|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`drop'>\n    i|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`comp'>\n    i j|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>j\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`case'>\n    i j|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>j\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`pair'>\n    i j|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>j\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`disconnect'>\n    i j|)>>|<cell|\\<assign\\>>|<cell|i\\<blacktriangleleft\\>j\\<blacktriangleleft\\>\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`witness'>\n    v|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`fail'>\n    b|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`hidden'>\n    h|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`version'>|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|ref<around*|(|<math-ss|`lockTime'>|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|\\<vdots\\>>|<cell|>|<cell|\\<vdots\\>>>>>\n  </eqnarray*>\n\n  In order for a list <math|l:DAG> to be well-formed, it must satisfy two\n  conditions. Firstly, we require that references only have offsets that\n  refer to nodes occurring strictly earlier in the list:\n\n  <\\equation*>\n    \\<forall\\><around*|\\<langle\\>|k,a|\\<rangle\\>>\\<in\\>indexed<around*|(|l|)>\\<point\\>\\<forall\\>i\\<in\\>ref<around*|(|a|)>\\<point\\>0\\<less\\>i\\<leq\\>k\n  </equation*>\n\n  Secondly, when <math|<math-ss|`hidden'>> a node is a child, the parent must\n  be a <math|<math-ss|`case'>> node, which in turn can only have at most one\n  <math|<math-ss|`hidden'>> child node.\n\n  <\\equation*>\n    \\<forall\\><around*|\\<langle\\>|k,a|\\<rangle\\>>\\<in\\>indexed<around*|(|l|)>\\<point\\>\\<forall\\>i\\<in\\>ref<around*|(|a|)>\\<point\\>\n    \\<forall\\>h.l<around*|[|k-i|]>=\\<eta\\><rsup|S><around*|(|<math-ss|`hidden'>\n    h|)>\\<Rightarrow\\> \\<exists\\> j<rsub|1> j<rsub|2>. a=<math-ss|`case'>\n    j<rsub|1> j<rsub|2>\n  </equation*>\n\n  and\n\n  <\\equation*>\n    \\<forall\\><around*|\\<langle\\>|k,<math-ss|`case'> i<rsub|>\n    j|\\<rangle\\>>\\<in\\>indexed<around*|(|l|)>\\<point\\>\\<forall\\>h<rsub|1>h<rsub|2>.l<around*|[|k-i|]>\\<neq\\>\\<eta\\><rsup|S><around*|(|<math-ss|`hidden'>\n    h<rsub|1>|)>\\<vee\\>l<around*|[|k-j|]>\\<neq\\>\\<eta\\><rsup|S><around*|(|<math-ss|`hidden'>\n    h<rsub|2>|)>\n  </equation*>\n\n  <\\theorem>\n    If a list <math|l:DAG> is well-formed, and <math|l<rsub|0>:DAG> is a\n    prefix of <math|l> (i.e. there exists an <math|l<rsub|1>> such that\n    <math|\\<eta\\><rsup|S><around*|(|l<rsub|0>|)>\\<cdummy\\>l<rsub|1>=\\<eta\\><rsup|S><around*|(|l|)>>)\n    then <math|l<rsub|0>> is also well-formed.\n  </theorem>\n\n  Note that technically the root of a well-formed DAG,\n  <math|l<around*|[|<around*|\\||l|\\|>-1|]>>, can be a\n  <math|<math-ss|`hidden'>> node.\n\n  <subsection|Type Inference><label|ss:typeInference>\n\n  Simplicity DAGs, as described above, do not have type information\n  associated with them. Before we can interpret a Simplicity DAG as a\n  Simplicity expression we must first perform type inference. Type inference\n  can be done by solving unification equations of typing constraints to\n  compute a most general unifier.\n\n  A unification equation is written as <math|S\\<doteq\\>T> were <math|S> and\n  <math|T> are Simplicity type expressions with unification variables, where\n  unification variables are denoted by Greek letters <math|\\<alpha\\>>,\n  <math|\\<beta\\>>, <math|\\<gamma\\>>, etc.\n\n  Given a well-formed <math|l:DAG>, we associate with each index in the list,\n  <math|0\\<leq\\>k\\<less\\><around*|\\||l|\\|>>, a pair of fresh unification\n  variables <math|\\<alpha\\><rsub|k>,\\<beta\\><rsub|k>> that are to be\n  instantiated at the inferred source and target types of the expression for\n  the node at index <math|k>. Each different node occurring at an index\n  <math|k> in the DAG <math|l> implies a set of unification equations over\n  these type variables, possibly requiring further fresh unification\n  variables.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`iden'>|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k>|}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`unit'>|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<beta\\><rsub|k>\\<doteq\\><1>|}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`injl'>\n    i|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\>\\<alpha\\><rsub|k-i>,\\<beta\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k-i>+\\<gamma\\>|}>*<htab|5mm>where\n    \\<gamma\\> is fresh>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`injr'>\n    i|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\>\\<alpha\\><rsub|k-i>,\\<beta\\><rsub|k>\\<doteq\\>\\<gamma\\>+\\<beta\\><rsub|k-i>|}>*<htab|5mm>where\n    \\<gamma\\> is fresh>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|<math|>`take'>\n    i|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\>\\<alpha\\><rsub|k-i>\\<times\\>\\<gamma\\>,\\<beta\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k-i>|}>*<htab|5mm>where\n    \\<gamma\\> is fresh>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`drop'>\n    i|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\>\\<gamma\\>\\<times\\>\\<alpha\\><rsub|k-i>,\\<beta\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k-i>|}>*<htab|5mm>where\n    \\<gamma\\> is fresh>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`comp'>\n    i j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\>\\<alpha\\><rsub|k-i>,\\<beta\\><rsub|k-i>\\<doteq\\>\\<alpha\\><rsub|k-j>,\\<beta\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k-j>|}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`case'>\n    i j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\><around*|(|\\<gamma\\><rsub|1>+\\<gamma\\><rsub|2>|)>\\<times\\>\\<gamma\\><rsub|3>|}><next-line>\\<cup\\><around*|{|\\<alpha\\><rsub|k-i>\\<doteq\\>\\<gamma\\><rsub|1>\\<times\\>\\<gamma\\><rsub|3>,\\<beta\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k-i>\\|\\<forall\\>h.l<around*|[|k-i|]>\\<neq\\>\\<eta\\><rsup|S><around*|(|<math-ss|`hidden'>\n    h|)>|}><htab|5mm><next-line>\\<cup\\><around*|{|a<rsub|k-j>\\<doteq\\>\\<gamma\\><rsub|2>\\<times\\>\\<gamma\\><rsub|3>,\\<beta\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k-j>\\|\\<forall\\>h.l<around*|[|k-j|]>\\<neq\\>\\<eta\\><rsup|S><around*|(|<math-ss|`hidden'>\n    h|)>|}><next-line><htab|5mm>where \\<gamma\\><rsub|1>,\\<gamma\\><rsub|2>,\\<gamma\\><rsub|3>\n    are fresh>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`pair'>\n    i j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\>\\<alpha\\><rsub|k-i>\\<doteq\\>\\<alpha\\><rsub|k-j>,\\<beta\\><rsub|k>\\<doteq\\>\\<beta\\><rsub|k-i>\\<times\\>\\<beta\\><rsub|k-j>|}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`disconnect'>\n    i j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k-i>\\<doteq\\>\\<alpha\\><rsub|k>\\<times\\><2><rsup|256>,\\<beta\\><rsub|k-i>\\<doteq\\>\\<gamma\\>\\<times\\>\\<alpha\\><rsub|k-j>,\\<beta\\><rsub|k>\\<doteq\\>\\<gamma\\>\\<times\\>\\<beta\\><rsub|k-j>|}>*<htab|5mm>where\n    \\<gamma\\> is fresh>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`witness'>\n    v|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{||}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`fail'>\n    b|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{||}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`hidden'>\n    h|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{||}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`version'>|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\><1>,\\<beta\\><rsub|k>\\<doteq\\><2><rsup|32>|}>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`lockTime'>|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\><1>,\\<beta\\><rsub|k>\\<doteq\\>Lock|}>>>|<row|<cell|\\<vdots\\>>|<cell|>|<cell|\\<vdots\\>>>>>\n  </eqnarray*>\n\n  The rest of the constraints for the other Bitcoin primitive names follows\n  the same pattern of adding constraints for the <math|\\<alpha\\><rsub|k>> and\n  <math|\\<beta\\><rsub|k>> variables to be equal to the input and output types\n  of the corresponding primitives, all of which are required to be concrete\n  types.\n\n  Notice that the unification variables for <samp|`hidden'> nodes are unused.\n  When <samp|`hidden'> nodes occur as children, their parent must be a\n  <samp|`case'> node and the constraints for <samp|`case'> nodes specifically\n  excludes references to their <samp|`hidden'> children's unification\n  variables. Thus when a <samp|`case'> node represents an assertion, the only\n  type constraints needed for an assertion are added.\n\n  Using the <math|con<rsub|l>> function, we can collect all the constraints\n  that need to be solved for a well-formed (untyped) Simplicity DAG,\n  <math|l:DAG>, to be well-typed:\n\n  <\\equation*>\n    con<around*|(|l|)>\\<assign\\>fold<rsup|<op|\\<cup\\>>><around*|(|con<rsub|l><rsup|+><around*|(|indexed<around*|(|l|)>|)>|)>\n  </equation*>\n\n  Depending on the application there may be further constraints imposed on\n  the root of the DAG. For example, if the DAG is supposed to represent a\n  Simplicity program, which has type <math|<1>\\<vdash\\><1>>, we would also\n  add the constraints <math|<around*|{|\\<alpha\\><rsub|<around*|\\||l|\\|>-1>\\<doteq\\><1>,\\<beta\\><rsub|<around*|\\||l|\\|>-1>\\<doteq\\><1>|}>>.\n\n  A <dfn|substitution> <math|\\<varsigma\\>> is a function from unification\n  variables to Simplicity type expressions with unification variables. A\n  substitution, <math|\\<varsigma\\>>, is a <dfn|ground substitution> if for\n  every unification variable <math|\\<alpha\\>>, the Simplicity type\n  <math|\\<varsigma\\><around*|(|\\<alpha\\>|)>> has no unification variables. A\n  substitution, <math|\\<varsigma\\>>, applied to Simplicity type expression\n  <math|S>, is a new Simplicity type expression <math|S\\|<rsub|\\<varsigma\\>>>\n  with each unification variable <math|\\<alpha\\>> replaced by\n  <math|\\<varsigma\\><around*|(|\\<alpha\\>|)>>:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<alpha\\>\\|<rsub|\\<varsigma\\>>>|<cell|\\<assign\\>>|<cell|\\<varsigma\\><around*|(|\\<alpha\\>|)>>>|<row|<cell|<1>\\|<rsub|\\<varsigma\\>>>|<cell|\\<assign\\>>|<cell|<1>>>|<row|<cell|<around*|(|S+T|)>\\|<rsub|\\<varsigma\\>>>|<cell|\\<assign\\>>|<cell|S<mid|\\|><rsub|\\<varsigma\\>>+T<mid|\\|><rsub|\\<varsigma\\>>>>|<row|<cell|<around*|(|S\\<times\\>T|)>\\|<rsub|\\<varsigma\\>>>|<cell|\\<assign\\>>|<cell|S<mid|\\|><rsub|\\<varsigma\\>>\\<times\\>T<mid|\\|><rsub|\\<varsigma\\>>>>>>\n  </eqnarray*>\n\n  A substitution <math|\\<tau\\>> can also be applied to other substitutions\n  yielding a composite substitution:\n\n  <\\equation*>\n    \\<varsigma\\>\\|<rsub|\\<tau\\>><around*|(|\\<alpha\\>|)>\\<assign\\>\\<varsigma\\><around*|(|\\<alpha\\>|)>\\|<rsub|\\<tau\\>>\n  </equation*>\n\n  A substitution <math|\\<varsigma\\><rsub|1>> is an instance of another\n  substitution <math|\\<varsigma\\><rsub|2>> whenever there exists a\n  substitution <math|\\<tau\\>> such that <math|\\<varsigma\\><rsub|1>=\\<varsigma\\><rsub|2>\\|<rsub|\\<tau\\>>>.\n  If <math|\\<varsigma\\><rsub|1>> and <math|\\<varsigma\\><rsub|2>> are both\n  instances of each other then they are <math|\\<alpha\\>>-equivalent.\n\n  A unifier for a set of constraints <math|C> is a substitution\n  <math|\\<varsigma\\>> such that for every constraint\n  <math|<around*|(|S\\<doteq\\>T|)>\\<in\\>C> we have\n  <math|S<around|\\||<rsub|\\<varsigma\\>>= T|\\|><rsub|\\<varsigma\\>>>. The most\n  general unifier for a set of constraints is a unifier <math|\\<varsigma\\>>\n  for those constraints such that every other unifier\n  <math|\\<varsigma\\><rprime|'>> for those constraints is an instance of\n  <math|\\<varsigma\\>>. The most general unifier is unique up to\n  <math|\\<alpha\\>>-equivalence.\n\n  Once all the constraints have be gathered we can perform first-order\n  unification to solve for the most general unifier <math|\\<varsigma\\>>. The\n  most general unifier, <math|\\<varsigma\\>>, may still contain free\n  variables. To eliminate these free variables, we define an instance of\n  <math|\\<varsigma\\>> that sets all remaining free variable to the unit type\n  <1>. We call the resulting ground substitution\n  <math|\\<varsigma\\><rsub|<1>>>:\n\n  <\\equation*>\n    \\<varsigma\\><rsub|<1>>\\<assign\\>\\<varsigma\\>\\|<rsub|\\<lambda\\>\\<gamma\\>.<1>>\n  </equation*>\n\n  Notice that if <math|\\<varsigma\\>> and <math|\\<tau\\>> are\n  <math|\\<alpha\\>>-equivalent then <math|\\<varsigma\\><rsub|<1>>=\\<tau\\><rsub|<1>>>.\n  In particular, this means that the ground substitution\n  <math|\\<varsigma\\><rsub|<1>>> is independent of which choice of\n  <math|\\<varsigma\\>> we compute as the most general unifier.\n\n  It is possible that there is no unifier for the given collection of\n  constraints. In such a case the Simplicity DAG is ill-typed, (or does not\n  meet the type constraints imposed by the application) and does not\n  represent a well-typed Simplicity expression.\n\n  First-order unification can be performed time linear in the size of the\n  constraints<nbsp><cite|unification>, although in practice quasi-linear time\n  algorithms using the union-find algorithm are simpler and may perform\n  better on the size of problems one is likely to encounter. Our set of\n  constraints is linear in the size of the DAG thus we can compute the most\n  general unifier in linear (or quasi-linear) time.\n\n  It is important to note that these (quasi-)linear time computations rely on\n  having sharing of (type) subexpressions in the representation of the\n  substitution. If you flatten out the representation of the substitution,\n  for example by printing out all the types, the result can be exponential in\n  the size of the input DAG. Fortunately, all of the computation required for\n  Simplicity's consensus operations, can operate without flattening the\n  representation of the inferred types.\n\n  Also notice that our set of constraints imply we are doing monomorphic type\n  inference, meaning that any shared subexpressions are assigned the same\n  type. Sometimes we will require multiple instances of the same sub-DAG\n  within a DAG so that different types can be inferred for the subexpressions\n  corresponding to those sub-DAG. As a trivial example, a DAG will often have\n  multiple <samp|`iden'> nodes, one for each type that the <samp|iden>\n  combinator is be used for. A DAG should never have sub-DAGs that end up\n  with the same pair of inferred types and will be disallowed by\n  anti-malleability rules (see Section<nbsp><inactive|<reference|<with|color|red|TODO>>>).\n\n  \\ We could remove duplicate sub-DAGs entirely by using polymorphic type\n  inference instead. Polymorphic type inference is\n  DEXPTIME-complete<nbsp><cite|Mairson:1989>. However, because removing\n  duplicated sub-DAGs can produce exponentially smaller terms it might be the\n  case that polymorphic type inference is linear in the size of the DAG with\n  duplicated sub-DAGs that are needed for monomorphic type inference. If this\n  is the case, we could switch to polymorphic type inference without opening\n  up DoS attacks. Whether this is possible or not is currently open question\n  for me.\n\n  <subsection|Reconstructing Simplicity Expressions>\n\n  Given a well-formed Simplicity DAG, <math|l:DAG>, that does have a\n  substitution <math|\\<varsigma\\>> yielding the most general unifier for\n  <math|con<around*|(|l|)>>, we can attempt to synthesize the Simplicity\n  expression that the DAG represents by recursively interpreting the DAG as\n  <math|syn<around*|(|l|)>\\<of\\>\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|<around*|\\||l|\\|>-1>|)>\\<vdash\\>\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|<around*|\\||l|\\|>-1>|)>>\n  where\n\n  <\\equation*>\n    syn<around*|(|l|)>\\<assign\\>syn<around*|(|l,<around*|\\||l|\\|>-1,l<around*|[|<around*|\\||l|\\|>-1|]>|)>\n  </equation*>\n\n  and where\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|syn<around*|(|l,k,\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|\\<bot\\>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`iden'>|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|iden><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`unit'>|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|unit><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`injl'>\n    i|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|injl><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>,B,C>\n    syn<around*|(|l,k-i,l<around*|[|k-i|]>|)>*<htab|5mm>where\n    B+C=\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`injr'>\n    i|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|injr><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>,B,C>\n    syn<around*|(|l,k-i,l<around*|[|k-i|]>|)>*<htab|5mm>where\n    B+C=\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`take'>\n    i|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|take><rsub|A,B,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>\n    syn<around*|(|l,k-i,l<around*|[|k-i|]>|)>*<htab|5mm>where\n    A\\<times\\>B=\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`drop'>\n    i|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|drop><rsub|A,B,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>\n    syn<around*|(|l,k-i,l<around*|[|k-i|]>|)>*<htab|5mm>where\n    A\\<times\\>B=\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`comp'>\n    i j|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|comp><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k-i>|)>,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>\n    syn<around*|(|l,k-i,l<around*|[|k-i|]>|)>\n    syn<around*|(|l,k-j,l<around*|[|k-j|]>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`case'>\n    i j|)>|)>>|<cell|\\<assign\\>>|<cell|syncase<around*|(|l,k,k-i,l<around*|[|k-i|]>,k-j,l<around*|[|k-j|]>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`pair'>\n    i j|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|pair><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k-i>|)>,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k-j>|)>>\n    syn<around*|(|l,k-i,l<around*|[|k-i|]>|)>\n    syn<around*|(|l,k-j,l<around*|[|k-j|]>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`disconnect'>\n    i j|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|disconnect><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>,B,C,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k-j>|)>>\n    syn<around*|(|l,k-i,l<around*|[|k-i|]>|)>\n    syn<around*|(|l,k-j,l<around*|[|k-j|]>|)><next-line><htab|5mm>where\n    B\\<times\\>C=\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k-i>|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`witness'>\n    v|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|witness><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>\n    inflate<around*|(|\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>,v|)>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`fail'>\n    b|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|fail><rsub|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k>|)>,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>\n    b>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h|)>|)>>|<cell|\\<assign\\>>|<cell|\\<bot\\>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`version'>|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|version>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`lockTime'>|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|lockTime>>>|<row|<cell|\\<vdots\\>>|<cell|>|<cell|\\<vdots\\>>>>>\n  </eqnarray*>\n\n  The <samp|case> and <samp|witness> clauses require special consideration\n  which we define below. The syn function never encounters a\n  <math|<math-ss|`hidden'>> node when <math|l> is well-formed except when\n  <math|\\<exists\\>h.l<around*|[|<around*|\\||l|\\|>-1|]>=\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n  h|)>>, in which case the entire expression itself is hidden. These\n  <math|<math-ss|`hidden'>> nodes are only used by the syncase function.\n\n  <subsubsection|syncase>\n\n  The syncase function constructs <samp|case> expressions as well as\n  <samp|assertl> and <samp|assertr> expressions. Assertion expressions are\n  produced when hidden nodes are passed as parameters. However both branches\n  of a case expression cannot be hidden when <math|l> is well-formed.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|syncase<around*|(|l,k<rsub|0>,k<rsub|1>,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|1>|)>,k<rsub|2>,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|2>|)>|)>>|<cell|\\<assign\\>>|<cell|\\<bot\\>>>|<row|<cell|syncase<around*|(|l,k<rsub|0>,k<rsub|1>,n<rsub|1>,k<rsub|2>,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|2>|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|assertl><rsub|A,B,C,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k<rsub|0>>|)>>\n    syn<around*|(|l,k<rsub|1>,n<rsub|1>|)>\n    h<rsub|2><next-line><htab|5mm>where \\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k<rsub|0>>|)>=<around*|(|A+B|)>\\<times\\>C\n    <next-line> <htab|5mm>and when \\<forall\\>h<rsub|1>\\<point\\>n<rsub|1>\\<neq\\>\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|1>|)>>>|<row|<cell|syncase<around*|(|l,k<rsub|0>,k<rsub|1>,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|1>|)>,k<rsub|2>,n<rsub|2>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|assertr><rsub|A,B,C,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k<rsub|0>>|)>>\n    h<rsub|1> syn<around*|(|l,k<rsub|2>,n<rsub|2>|)><next-line><htab|5mm>where\n    \\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k<rsub|0>>|)>=<around*|(|A+B|)>\\<times\\>C\n    <next-line> <htab|5mm>and when \\<forall\\>h<rsub|2>\\<point\\>n<rsub|2>\\<neq\\>\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|2>|)>>>|<row|<cell|syncase<around*|(|l,k<rsub|0>,k<rsub|1>,n<rsub|1>,k<rsub|2>,n<rsub|2>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|case><rsub|A,B,C,\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k<rsub|0>>|)>>\n    syn<around*|(|l,k<rsub|1>,n<rsub|1>|)>\n    syn<around*|(|l,k<rsub|2>,n<rsub|2>|)><next-line><htab|5mm>where\n    \\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k<rsub|0>>|)>=<around*|(|A+B|)>\\<times\\>C\n    <next-line> <htab|5mm>and when \\<forall\\>h<rsub|1>,h<rsub|2>\\<point\\>n<rsub|1>\\<neq\\>\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|1>|)><next-line><htab|5mm>\\<wedge\\>n<rsub|2>\\<neq\\>\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n    h<rsub|2>|)>>>>>\n  </eqnarray*>\n\n  <subsubsection|inflate><label|ss:inflate>\n\n  A <samp|`witness'> node does not hold a Simplicity value, like the\n  <samp|witness> combinator requires. Instead it has a bit string that\n  encodes a Simplicity value. The inflate function performs a type-directed\n  decoding of this bit string to reconstruct the witness value. The inflate\n  function is defined recursively via the inflation function. These two\n  functions are defined below.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|inflation<around*|(|<1>,v|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|<around*|\\<langle\\>||\\<rangle\\>>,v|\\<rangle\\>>>>|<row|<cell|inflation<around*|(|A+B,0<rsub|<2>>\\<blacktriangleleft\\>v|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|<injl-long|A|B|a>,v<rprime|'>|\\<rangle\\>>*<htab|5mm>where\n    <around*|\\<langle\\>|a,v<rprime|'>|\\<rangle\\>>=inflation<around*|(|A,v|)>>>|<row|<cell|inflation<around*|(|A+B,1<rsub|<2>>\\<blacktriangleleft\\>v|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|<injr-long|A|B|b>,v<rprime|'>|\\<rangle\\>>*<htab|5mm>where\n    <around*|\\<langle\\>|b,v<rprime|'>|\\<rangle\\>>=inflation<around*|(|B,v|)>>>|<row|<cell|inflation<around*|(|A+B,\\<epsilon\\>|)>>|<cell|\\<assign\\>>|<cell|\\<bot\\>>>|<row|<cell|inflation<around*|(|A\\<times\\>B,v|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|<around*|\\<langle\\>|a,b|\\<rangle\\>>,v<rprime|''>|\\<rangle\\>>*<htab|5mm>where\n    <around*|\\<langle\\>|a,v<rprime|'>|\\<rangle\\>>=inflation<around*|(|A,v|)><next-line><htab|5mm>and\n    <around*|\\<langle\\>|b,v<rprime|''>|\\<rangle\\>>=inflation<around*|(|B,v<rprime|'>|)>>>>>\n  </eqnarray*>\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|inflate<around*|(|A,v|)>>|<cell|\\<assign\\>>|<cell|a*<htab|5mm>when\n    <around*|\\<langle\\>|a,\\<epsilon\\>|\\<rangle\\>>=inflation<around*|(|A,v|)>>>|<row|<cell|inflate<around*|(|A,v|)>>|<cell|\\<assign\\>>|<cell|\\<bot\\><htab|5mm>otherwise>>>>\n  </eqnarray*>\n\n  As part of DoS protections and malleability protection, we want to prevent\n  witness data from being inflated with unused bits. Notice that that in the\n  definition of <math|syn<around*|(|k,<math-ss|`witness'> v|)>>, the inflate\n  function is passed the inferred type <math|\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k>|)>>.\n  Using the inferred type ensures that the witness data only contains data\n  that is nominally useful by the surrounding Simplicity program.\n  Furthermore, the inflate function fails unless it consumes exactly all of\n  its bit string argument. This prevents <samp|`witness'> data from being\n  padded with extra, unused bits.\n\n  <section|Serialization><label|ss:Serialization>\n\n  In this section, we define a binary prefix code for serializing Simplicity\n  DAGs. Because prefix codes are self-delimiting, they provide a convenient\n  framework for creating serialization formats. Compound structures can be\n  serialized by concatenation of prefix codes of its substructures.\n\n  Our serialization of Simplicity DAGs can be used as part of a network\n  protocol or for writing data to a file. The program size metric (see\n  Section<nbsp><inactive|<reference|<with|color|red|TODO>>>) computed for\n  terms can be used to bound to the length of this binary encoding. However,\n  specific binary encodings, such of this one, do not form a consensus\n  critical aspect of Simplicity's design and can be substituted with other\n  encodings that have similar suitable bounds.\n  Appendix<nbsp><reference|app:AltSerialization> describes an alternative,\n  byte-based, binary encoding.\n\n  <subsection|Serialization of Bit Strings and Positive Numbers>\n\n  In this section we present a recursive Elias prefix code for bit strings\n  and positive natural numbers. Our code for positive natural numbers it has\n  properties similar to the Elias omega coding, but is a has a simple\n  recursive functional definition and some other nice properties.\n\n  First, for any <math|n:\\<bbb-N\\>> with <math|0\\<less\\>n>, we define\n  <math|<around*|\\<lfloor\\>|n|\\<rfloor\\>><rsub|<2><rsup|\\<ast\\>>>> to be a\n  bit string for <math|n>, written in binary, with the leading\n  <math|1<rsub|<2>>> chopped off.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lfloor\\>|1|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[||]>><rsub|<2>>>>|<row|<cell|<around*|\\<lfloor\\>|2*n|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|\\<assign\\>>|<cell|<around*|\\<lfloor\\>|n|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>\\<cdummy\\><verbatim|<around*|[|0|]>><rsub|<2>>>>|<row|<cell|<around*|\\<lfloor\\>|2*n+1|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|\\<assign\\>>|<cell|<around*|\\<lfloor\\>|n|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>\\<cdummy\\><verbatim|<around*|[|1|]>><rsub|<2>>>>>>\n  </eqnarray*>\n\n  For example,\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<lfloor\\>|1|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|=>|<cell|<verbatim|<around*|[||]>><rsub|<2>>>>|<row|<cell|<around*|\\<lfloor\\>|2|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|=>|<cell|<verbatim|<around*|[|0|]>><rsub|<2>>>>|<row|<cell|<around*|\\<lfloor\\>|3|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|=>|<cell|<verbatim|<around*|[|1|]>><rsub|<2>>>>|<row|<cell|<around*|\\<lfloor\\>|4|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|=>|<cell|<verbatim|<around*|[|00|]>><rsub|<2>>>>|<row|<cell|\\<vdots\\>>|<cell|>|<cell|\\<vdots\\>>>|<row|<cell|<around*|\\<lfloor\\>|7|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>>|<cell|=>|<cell|<verbatim|<around*|[|11|]>><rsub|<2>>>>|<row|<cell|\\<vdots\\>>|<cell|>|<cell|\\<vdots\\>>>>>\n  </eqnarray*>\n\n  This binary code is not a prefix code. To make a prefix code we define\n  mutually recursive function on bit strings and positive numbers. This\n  encodes a bit string by prefixing it with a tag indicating if the bit\n  string is null followed by the bit string's length when it is not null. It\n  encodes a positive number, <math|n>, by encoding its associated bit string\n  <math|<around*|\\<lfloor\\>|n|\\<rfloor\\>><rsub|<2><rsup|\\<ast\\>>>>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<rep|\\<emptyset\\><rsup|<maybe>><rsub|<2><rsup|+>>|>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|0|]>><rsub|<2>>>>|<row|<cell|<rep|\\<eta\\><rsup|<maybe>><rsub|<2><rsup|+>><around*|(|l|)>|>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|1|]>><rsub|<2>>\\<cdummy\\><rep|<around*|\\||l|\\|>|>\\<cdummy\\>l>>|<row|<cell|<rep|n|>>|<cell|\\<assign\\>>|<cell|<rep|<around*|\\<lfloor\\>|n|\\<rfloor\\>><rsub|<2><rsup|*\\<ast\\>>>|>>>>>\n  </eqnarray*>\n\n  The table below illustrates this prefix code on a few inputs.\n\n  \\;\n\n  <center|<tabular|<tformat|<cwith|1|-1|2|2|cell-halign|c>|<cwith|1|-1|4|4|cell-halign|c>|<cwith|9|9|1|-1|cell-halign|c>|<cwith|12|12|2|2|cell-halign|c>|<cwith|12|12|4|4|cell-halign|c>|<cwith|12|12|1|5|cell-halign|c>|<cwith|10|10|2|2|cell-halign|c>|<cwith|10|10|4|4|cell-halign|c>|<cwith|13|14|2|2|cell-halign|c>|<cwith|13|14|4|4|cell-halign|c>|<cwith|13|13|2|2|cell-halign|c>|<cwith|13|13|4|4|cell-halign|c>|<cwith|1|-1|1|1|cell-halign|r>|<cwith|15|15|2|2|cell-halign|c>|<cwith|15|15|4|4|cell-halign|c>|<cwith|15|15|2|2|cell-halign|c>|<cwith|15|15|4|4|cell-halign|c>|<cwith|15|15|1|5|cell-halign|c>|<cwith|15|15|1|1|cell-halign|r>|<cwith|14|14|4|4|cell-halign|c>|<cwith|14|14|4|4|cell-halign|c>|<cwith|2|2|4|4|cell-halign|c>|<cwith|3|4|4|4|cell-halign|c>|<cwith|4|4|4|4|cell-halign|c>|<cwith|5|8|4|4|cell-halign|c>|<cwith|6|6|4|4|cell-halign|c>|<cwith|7|8|4|4|cell-halign|c>|<cwith|8|8|4|4|cell-halign|c>|<cwith|10|11|4|4|cell-halign|c>|<cwith|10|11|4|4|cell-halign|c>|<cwith|10|11|4|4|cell-halign|c>|<cwith|11|11|4|4|cell-halign|c>|<cwith|13|14|4|4|cell-halign|c>|<cwith|13|14|4|4|cell-halign|c>|<cwith|13|14|4|4|cell-halign|c>|<cwith|14|14|4|4|cell-halign|c>|<cwith|13|14|2|2|cell-halign|c>|<cwith|13|14|2|2|cell-halign|c>|<cwith|13|14|2|2|cell-halign|c>|<cwith|14|14|2|2|cell-halign|c>|<cwith|7|8|2|2|cell-halign|c>|<cwith|7|8|2|2|cell-halign|c>|<cwith|7|8|2|2|cell-halign|c>|<cwith|8|8|2|2|cell-halign|c>|<cwith|5|6|2|2|cell-halign|c>|<cwith|5|6|2|2|cell-halign|c>|<cwith|5|6|2|2|cell-halign|c>|<cwith|6|6|2|2|cell-halign|c>|<cwith|3|4|2|2|cell-halign|c>|<cwith|3|4|2|2|cell-halign|c>|<cwith|3|4|2|2|cell-halign|c>|<cwith|4|4|2|2|cell-halign|c>|<cwith|1|2|2|2|cell-halign|c>|<cwith|1|2|2|2|cell-halign|c>|<cwith|1|2|2|2|cell-halign|c>|<cwith|2|2|2|2|cell-halign|c>|<cwith|10|11|2|2|cell-halign|c>|<cwith|10|11|2|2|cell-halign|c>|<cwith|10|10|2|2|cell-halign|c>|<cwith|10|11|2|2|cell-halign|c>|<cwith|10|11|2|2|cell-halign|c>|<cwith|10|11|2|2|cell-halign|c>|<cwith|11|11|2|2|cell-halign|c>|<cwith|1|-1|3|3|cell-halign|c>|<cwith|1|-1|5|5|cell-halign|l>|<table|<row|<cell|<rep|1|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[0]><rsub|<2>>>>>|<row|<cell|<rep|2|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[0]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[100]><rsub|<2>>>>>|<row|<cell|<rep|3|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[1]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[101]><rsub|<2>>>>>|<row|<cell|<rep|4|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[00]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[110000]><rsub|<2>>>>>|<row|<cell|<rep|5|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[01]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[110001]><rsub|<2>>>>>|<row|<cell|<rep|6|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[10]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[110010]><rsub|<2>>>>>|<row|<cell|<rep|7|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[11]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[110011]><rsub|<2>>>>>|<row|<cell|<rep|8|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[000]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[1101000]><rsub|<2>>>>>|<row|<cell|<math|\\<vdots\\>>>|<cell|>|<cell|<math|\\<vdots\\>>>|<cell|>|<cell|<math|\\<vdots\\>>>>|<row|<cell|<rep|15|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[111]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[1101111]><rsub|<2>>>>>|<row|<cell|<rep|16|>>|<cell|<math|=>>|<cell|<rep|<verbatim|[0000]><rsub|<2>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|[11100000000]><rsub|<2>>>>>|<row|<cell|<math|\\<vdots\\>>>|<cell|>|<cell|<math|\\<vdots\\>>>|<cell|>|<cell|<math|\\<vdots\\>>>>|<row|<cell|<rep|<math|2<rsup|16>-1>|>>|<cell|<math|=>>|<cell|<rep|<math|<verbatim|<around|[|1|]>><rsub|<2>><rsup|15>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|<around|[|11101111|]>><rsub|<2>>\\<cdummy\\><verbatim|<around|[|1|]>><rsub|<2>><rsup|15>>>>|<row|<rep|<math|2<rsup|16>>|>|<cell|<math|=>>|<cell|<rep|<math|<verbatim|<around|[|0|]>><rsub|<2>><rsup|16>>|>>|<cell|<math|=>>|<cell|<math|<verbatim|<around|[|111100000000|]>><rsub|<2>>\\<cdummy\\><verbatim|<around|[|0|]>><rsub|<2>><rsup|16>>>>|<row|<cell|<math|\\<vdots\\>>>|<cell|>|<cell|<math|\\<vdots\\>>>|<cell|>|<cell|<math|\\<vdots\\>>>>>>>>\n\n  \\;\n\n  Notice that this prefix code preserves numeric ordering as lexicographical\n  ordering. If <math|n> and <math|m> are positive numbers then\n  <math|n\\<leq\\>m\\<Leftrightarrow\\><rep|n|>\\<preceq\\><rep|m|>> where\n  <math|\\<preceq\\>> is the lexicographical ordering on bit strings. When you\n  are parsing a code for a positive number that you know from context is not\n  allowed to exceed some bound <math|b>. Then during parsing you can abort as\n  soon as the string being parsed lexicographically exceeds <math|<rep|b|>>.\n  In some cases you can abort parsing after only a few bits. For example, if\n  from context you know that a the positive number must fit in a 64-bit\n  integer (i.e. it is not allowed to exceed <math|2<rsup|64>-1>), then you\n  can abort parsing as soon as the bit string being parsed lexicographically\n  meets or exceeds the prefix <verbatim|[1111001]>.\n\n  <subsection|Serialization of Simplicity>\n\n  In this section we describe a fairly direct serialization for Simplicity\n  DAGs. First, we provide a prefix code for <math|Node> values stripped of\n  witness data:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<rep|<text|<samp|`comp'>> i\n    j|>>|<cell|=>|<cell|<verbatim|<around*|[|00000|]>><rsub|<2>>\\<cdummy\\><rep|i|>\\<cdummy\\><rep|j|>>>|<row|<cell|<rep|<text|<samp|`case'>>\n    i j|>>|<cell|=>|<cell|<verbatim|<around*|[|00001|]>><rsub|<2>>\\<cdummy\\><rep|i|>\\<cdummy\\><rep|j|>>>|<row|<cell|<rep|<text|<samp|`pair'>>\n    i j|>>|<cell|=>|<cell|<verbatim|<around*|[|00010|]>><rsub|<2>>\\<cdummy\\><rep|i|>\\<cdummy\\><rep|j|>>>|<row|<cell|<rep|<text|<samp|`disconnect'>>\n    i j|>>|<cell|=>|<cell|<verbatim|<around*|[|00011|]>><rsub|<2>>\\<cdummy\\><rep|i|>\\<cdummy\\><rep|j|>>>|<row|<cell|<rep|<text|<samp|`injl'>>\n    i|>>|<cell|=>|<cell|<verbatim|<around*|[|00100|]>><rsub|<2>>\\<cdummy\\><rep|i|>>>|<row|<cell|<rep|<text|<samp|`injr'>>\n    i|>>|<cell|=>|<cell|<verbatim|<around*|[|00101|]>><rsub|<2>>\\<cdummy\\><rep|i|>>>|<row|<cell|<rep|<text|<samp|`take'>>\n    i|>>|<cell|=>|<cell|<verbatim|<around*|[|00110|]>><rsub|<2>>\\<cdummy\\><rep|i|>>>|<row|<cell|<rep|<text|<samp|`drop'>>\n    i|>>|<cell|=>|<cell|<verbatim|<around*|[|00111|]>><rsub|<2>>\\<cdummy\\><rep|i|>>>|<row|<cell|<rep|<text|<samp|`iden'>>|>>|<cell|=>|<cell|<verbatim|<around*|[|01000|]>><rsub|<2>>>>|<row|<cell|<rep|<text|<samp|`unit'>>|>>|<cell|=>|<cell|<verbatim|<around*|[|01001|]>><rsub|<2>>>>|<row|<cell|<rep|<text|<samp|`fail'>>\n    b|>>|<cell|=>|<cell|<verbatim|<around*|[|01010|]>><rsub|<2>>\\<cdummy\\><around*|(|\\<mu\\><rsup|\\<ast\\>>\\<circ\\><around*|(|\\<iota\\><rsup|<2><rsup|8>><rsub|<2><rsup|\\<ast\\>>>|)><rsup|\\<ast\\>><rsup|>\\<circ\\>BE|)><rsup|><around*|(|b|)>>>|<row|<cell|<rep|<text|<samp|`hidden'>>\n    h|>>|<cell|=>|<cell|<verbatim|<around*|[|0110|]>><rsub|<2>>\\<cdummy\\><around*|(|\\<mu\\><rsup|\\<ast\\>>\\<circ\\><around*|(|\\<iota\\><rsup|<2><rsup|8>><rsub|<2><rsup|\\<ast\\>>>|)><rsup|\\<ast\\>><rsup|>\\<circ\\>BE|)><rsup|><around*|(|h|)>>>|<row|<cell|<rep|<text|<samp|`witness'>>v|>>|<cell|=>|<cell|<verbatim|<around*|[|0111|]>><rsub|<2>>>>>>\n  </eqnarray*>\n\n  We define a <math|witnessData<around*|(|l|)> : <2><rsup|\\<ast\\>>> function\n  for DAGs <math|l\\<of\\>DAG> that serializes the values held by the witness\n  data:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|witnessDatum<around*|(|<text|<samp|`witness'>>v|)>>|<cell|\\<assign\\>>|<cell|v>>|<row|<cell|witnessDatum<around*|(|n|)>>|<cell|\\<assign\\>>|<cell|\\<varepsilon\\><htab|5mm><text|when>\n    \\<forall\\>v.n\\<neq\\><text|<samp|`witness'>>v>>>>\n  </eqnarray*>\n\n  <\\equation*>\n    witnessData<around*|(|l|)>\\<assign\\> \\<mu\\><rsup|\\<ast\\>><around*|(|witnessDatum<rsup|*\\<ast\\>><around*|(|\\<eta\\><rsup|S><around*|(|l|)>|)>|)>\n  </equation*>\n\n  The code <math|<verbatim|<around*|[|01011|]>><rsub|<2>>>, is a reserved\n  code for wallet use where it represents a \\Punary\n  <math|<text|<samp|`disconnect'>>>\\Q node for representing commitment time\n  Simplicity program where, of course, the disconnected Simplicity expression\n  wouldn't be available. The code is not used for consensus purposes, and\n  like <math|<text|<samp|`fail'>>>, it cannot legally appear on chain\n\n  For serialization of DAGs, <math|l:DAG>, which is a non-empty list of\n  Nodes, we have the following serialization format\n\n  <\\equation*>\n    lengthCode<around*|(|l|)>\\<assign\\><rep|<around*|\\||l|\\|>|>\\<cdummy\\>\\<mu\\><rsup|\\<ast\\>><around*|(|<around*|(|\\<lambda\\>x.<rep|x|>|)><rsup|\\<ast\\>><around*|(|\\<eta\\><rsup|S><around*|(|l|)>|)>|)>\n  </equation*>\n\n  The <math|lengthCode> above prefixes the serialization of DAG with the\n  number of nodes, followed by the list of nodes serialized with the prefix\n  code for nodes. Again, <math|lengthCode> is a prefix codes.\n\n  Notice that the <math|witnessDatum> does not use a prefix code, and the\n  witnessData simply concatenates values without separating them with\n  deliminators. This works because during deserialization, type inference\n  does not depend on witness data, and once type inference is complete, we\n  can use the inference types of witness nodes to decode the witness values\n  in sequence.\n\n  <subsubsection|Serialization of Word Jets>\n\n  A prefix of <verbatim|[11]> is reserved for computational jets which are\n  given in Appendix<nbsp><reference|app:cat-jets>. \\ A previx of\n  <verbatim|[10]> is used with a special enoding for jetting\n  <math|<math-ss|scribe><rsub|<1>,<2><rsup|2<rsup|n>>><around*|(|v|)>>\n  expressions, which we call word jets.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|2|2|1|1|cell-tborder|1pt>|<cwith|2|2|1|1|cell-hyphen|n>|<cwith|1|1|1|1|cell-width|>|<cwith|1|1|1|1|cell-hmode|auto>|<cwith|2|2|1|1|cell-col-span|1>|<table|<row|<cell|<subtable|<tformat|<cwith|1|1|2|2|cell-halign|c>|<table|<row|<cell|<math|n:\\<bbb-N\\>>>|<cell|<math|v\\<of\\><2><rsup|2<rsup|n>>>>>>>>>>|<row|<cell|<math|<math-ss|`word'>\n    n v\\<of\\>Node>>>>>>\n  </with>\n\n  \\;\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|ref<around*|(|<math|<math-ss|`word'> n\n    v>|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\>>>|<row|<cell|con<rsub|l><around*|\\<langle\\>|k,<math-ss|`word'>\n    n v|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|{|\\<alpha\\><rsub|k>\\<doteq\\><1>,\\<beta\\><rsub|k>\\<doteq\\><2><rsup|2<rsup|n>>|}>>>|<row|<cell|syn<around*|(|l,k,\\<eta\\><rsup|<maybe>><around*|(|<math-ss|<math|<math-ss|`word'>\n    n v>>|)>|)>>|<cell|\\<assign\\>>|<cell|<math-ss|jet><around*|\\<langle\\>|<math-ss|scribe><rsub|<1>,<2><rsup|2<rsup|n>>><around*|(|v|)>|\\<rangle\\>>>>|<row|<cell|<rep|<text|<samp|`word'>>n\n    v|>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|10|]>><rsub|<2>>\\<cdummy\\><rep|n+1|>\\<cdummy\\>\\<iota\\><rsup|<2><rsup|2<rsup|n>>><rsub|<2><rsup|\\<ast\\>>><around*|(|v|)>>>>>\n  </eqnarray*>\n\n  where <math|<verbatim|>\\<iota\\><rsup|<2><rsup|2<rsup|n>>><rsub|<2><rsup|\\<ast\\>>><around*|(|v|)>>\n  formally converts a word value <math|v:<2><rsup|2<rsup|n>>> to a bistring:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<iota\\><rsup|<2><rsup|>><rsub|<2><rsup|\\<ast\\>>><around*|(|b|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|\\<ast\\>><rsub|<2>><around*|(|b|)>>>|<row|<cell|\\<iota\\><rsup|<2><rsup|2<rsup|n+1>>><rsub|<2><rsup|\\<ast\\>>><around*|\\<langle\\>|x,y|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<iota\\><rsup|<2><rsup|2<rsup|n>>><rsub|<2><rsup|\\<ast\\>>><around*|(|x|)>\\<cdummy\\>\\<iota\\><rsup|<2><rsup|2<rsup|n>>><rsub|<2><rsup|\\<ast\\>>><around*|(|y|)>>>>>\n  </eqnarray*>\n\n  <subsection|Identity Merkle Root><label|ss:IMR>\n\n  The DAG encoding for Simplicity expressions allows for sharing of\n  subexpressions, however nothing in the previous section mandates sharing of\n  subexpressions. \\ Without mandatory sharing would have a malleability\n  vector where a third party could unshare every subexprssion, vastly\n  inflating the weight of a transaction. \\ To enforce mandatory sharing we\n  will introduce the notion of an identity Merkle root and require that every\n  sub-DAG have a unique such identity.\n\n  The identity Merkle root of a Simplicity expression <math|t> is defined by\n  <math|<imr0|t>>. \\ This value is the same as <cmr|t> except in the presence\n  of <samp|witness> and <samp|disconnect> combinators which are defined as\n  follows:\n\n  <\\eqnarray*>\n    <tformat|<cwith|1|-1|2|2|cell-halign|r>|<cwith|1|1|2|2|cell-halign|r>|<table|<row|<cell|<imr0|<math-ss|witness><rsub|A,B>\n    b>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|i><rsub|<math-ss|witness>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|SHA256<rsub|<2>><around*|(|deflate<rsub|B><around*|(|b|)>|)>,<tmr|B>|\\<rangle\\>>|\\<rangle\\>>>>|<row|<cell|<imr0|<math-ss|disconnect><rsub|A,B,C,D>\n    s t>>|<cell|\\<assign\\>>|<cell|SHA256<rsub|Block><around*|\\<langle\\>|SHA256<rsup|tag<rsup|i><rsub|<math-ss|disconnect>>><rsub|IV>\\<comma\\>\n    <around*|\\<langle\\>|<imr0|s>,<imr0|t>|\\<rangle\\>>|\\<rangle\\>>>>>>\n  </eqnarray*>\n\n  The unique tags used are\n\n  <\\small>\n    <\\eqnarray*>\n      <tformat|<table|<row|<cell|tag<rsup|i><rsub|<math-ss|witness>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f4964656e746974791f7769746e657373]><rsub|2<rsup|8>>>>|<row|<cell|tag<rsup|i><rsub|<math-ss|disconnect>>>|<cell|\\<assign\\>>|<cell|<math-tt|[<SimplicityPrefix>1f4964656e746974791f646973636f6e6e656374]><rsub|<2><rsup|8>>>>>>\n    </eqnarray*>\n  </small>\n\n  and <math|deflate<rsub|A>\\<of\\>A\\<rightarrow\\><2><rsup|\\<ast\\>>> is the\n  inverse of <math|inflate>:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|deflate<rsub|<1>><around*|(|<around*|\\<langle\\>||\\<rangle\\>>|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\><rsub|<2>>>>|<row|<cell|deflate<rsub|A+B><around*|(|<injl-long|A|B|<around*|(|a|)>>|)>>|<cell|\\<assign\\>>|<cell|0<rsub|<2>>\\<blacktriangleleft\\>deflate<rsub|A><around*|(|a|)>>>|<row|<cell|deflate<rsub|A+B><around*|(|<injr-long|A|B|<around*|(|b|)>>|)>>|<cell|\\<assign\\>>|<cell|1<rsub|<2>>\\<blacktriangleleft\\>deflate<rsub|B><around*|(|b|)>>>|<row|<cell|deflate<rsub|A\\<times\\>B><around*|(|<around*|\\<langle\\>|a,b|\\<rangle\\>>|)>>|<cell|\\<assign\\>>|<cell|deflate<rsub|A><around*|(|a|)>\\<cdummy\\>deflate<rsub|B><around*|(|b|)>>>>>\n  </eqnarray*>\n\n  <\\lemma>\n    For all <math|a\\<of\\>A>, <math|inflate<around*|(|A,deflate<rsub|A><around*|(|a|)>|)>=a>.\n  </lemma>\n\n  One of our anti-malleability requirements is that non-hidden nodes in a DAG\n  synethesis are terms with unique identity Merkle root, input, output type\n  triples. \\ We also require that hidden nodes are unique.\n\n  <\\definition>\n    We say a well-formed Simplicity DAG <math|l\\<of\\>DAG>, that has a\n    substitution <math|\\<varsigma\\>> yielding the most general unifier for\n    <math|con<around*|(|l|)>>, has maximized sharing when\n\n    <\\enumerate-numeric>\n      <item>for all <math|k<rsub|1>> and <math|k<rsub|2>> such that\n\n      <\\enumerate-alpha>\n        <item><math|k<rsub|1>, k<rsub|2>\\<less\\><around*|\\||l|\\|>> and\n\n        <item><math|l<around*|[|k<rsub|1>|]>\\<neq\\>\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n        h<rsub|1>|)> > and <math|l<around*|[|k<rsub|2>|]>\\<neq\\>\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n        h<rsub|2>|)> >for any <math|h<rsub|1>> and <math|h<rsub|2>>, and\n\n        <item><math|\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k<rsub|1>>|)>=\\<varsigma\\><rsub|<1>><around*|(|\\<alpha\\><rsub|k<rsub|2>>|)>>\n        and <math|\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k<rsub|1>>|)>=\\<varsigma\\><rsub|<1>><around*|(|\\<beta\\><rsub|k<rsub|2>>|)>>,\n        and\n\n        <item><math|<imr0|syn<around*|(|l,k<rsub|1>,l<around*|[|k<rsub|1>|]>|)>>=<imr0|syn<around*|(|l,k<rsub|2>,l<around*|[|k<rsub|2>|]>|)>>>\n      </enumerate-alpha>\n\n      then <math|k<rsub|1>=k<rsub|2>>, and\n\n      <item>for all <math|k<rsub|1>> and <math|k<rsub|2>> such that\n\n      <\\enumerate-alpha>\n        <item><math|k<rsub|1>, k<rsub|2>\\<less\\><around*|\\||l|\\|>> and\n\n        <item><math|l<around*|[|k<rsub|1>|]>=\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n        h<rsub|>|)> > and <math|l<around*|[|k<rsub|2>|]>=\\<eta\\><rsup|<maybe>><around*|(|<math-ss|`hidden'>\n        h|)> >for some <math|h>\n      </enumerate-alpha>\n\n      then <math|k<rsub|1>=k<rsub|2>>.\n    </enumerate-numeric>\n  </definition>\n\n  <chapter|Coq Library Guide>\n\n  The Coq development for Simplicity is found in the <verbatim|Coq/>\n  directory. There are two subdirectories: <verbatim|Simplicity/> contains\n  modules related to Simplicity, and the <verbatim|Util/> directory has a few\n  modules dedicated to other structures that are not by themselves specific\n  to Simplicity, including a short hierarchy for commutative and idempotent\n  monads. We will focus on the contents of the <verbatim|Simplicity/>\n  directory.\n\n  <section|Simplicity Types>\n\n  The Coq development for Simplicity begins with the\n  <verbatim|Simplicity/Ty.v> file. This contain the inductive definition of\n  <verbatim|Ty> which defines Simplicity's type expressions. The\n  <verbatim|tySem> function interprets Simplicity types as Coq types, and it\n  is declared as coercion. The module also provides standard arithmetic\n  notation for Simplicity's sum and product types.\n\n  The <verbatim|tyAlg> is a record collecting the operations needed to define\n  structurally recursive functions for <verbatim|Ty>. These are known as\n  <hlink|F-algebras|https://en.wikipedia.org/wiki/F-algebra><nbsp><cite|f-algebra>,\n  and it is one of the inputs to <verbatim|tyCata> that defines catamorphisms\n  from <verbatim|Ty> to another type.\n\n  <section|Simplicity Terms>\n\n  There are two different ways of representing of Simplicity terms defined in\n  Coq. One representation is an \\Pinitial\\Q representation, as an inductive\n  type. The other representation is a \\Pfinal\\Q representation, based on\n  algebras.\n\n  Generally speaking the \\Pinitial\\Q representation works well when reasoning\n  about Simplicity term using induction to prove properties about them, while\n  the \\Pfinal\\Q representation is useful for implicitly capturing shared\n  sub-expressions when defining Simplicity programs.\n\n  We begin with the \\Pinitial\\Q representation, which will most readers will\n  find more familiar.\n\n  <subsection|The \\PInitial\\Q Representation of Terms><label|ss:coqInitial>\n\n  The <verbatim|Simplicity/Core.v> module defines an inductive family,\n  <verbatim|Term A B>, for the well-typed core Simplicity language. The core\n  language is the pure fragment of Simplicity that has no effects such as\n  failure or read access to the transaction environment. The <verbatim|eval>\n  function provides denotational semantics and interprets terms as Coq\n  functions over the corresponding Coq types.\n\n  This module also establishes the core Simplicity completeness theorem\n  (Theorem<nbsp><reference|thm:CSCT>) as the\n  <verbatim|Simplicity_Completeness> theorem. The proof is built from\n  <verbatim|scribe>, a function to produce Simplicity terms representing\n  constant functions, and <verbatim|reify> which transforms Coq functions\n  over Simplicity types into Simplicity terms representing those functions.\n\n  <subsection|The \\PFinal\\Q Representation of Terms>\n\n  To explain the \\Pfinal\\Q representation of terms it is first necessary to\n  understand what an algebra for Simplicity is. We can understand this by way\n  of a mathematical analogy with ring theory. A ring is a mathematical\n  structure consisting of a domain along with constants from that domain that\n  correspond to 0 and 1, and binary functions over that domain that\n  correspond to <math|\\<noplus\\>+> and <math|\\<times\\>> operations that\n  satisfy certain ring laws. A term from the language of rings is an\n  expression made out of <math|0>, <math|1>, <math|+>, and <math|\\<times\\>>.\n  Given a ring and a term from the language of rings, we can interpret that\n  term in the given ring and compute an element of the domain that the term\n  represents. There are many different rings structures, such as the ring of\n  integers, and the ring of integers modulo <math|n> for any positive number\n  <math|n>. A given term can be interpreted as some value for any ring. An\n  alternative way to represent terms is as a function that, given any ring,\n  returns a value from its domain and does so in a \\Puniform\\Q way. This\n  would be the \\Pfinal\\Q representation for terms in the language of rings.\n\n  <subsubsection|Simplicity Algebras>\n\n  An algebra for Simplicity is an analogous structure to a ring. An algebra\n  for Simplicity consists of a domain, along with constants from that domain\n  that correspond to <math|<math-ss|iden>> and <math|<math-ss|unit>> and\n  functions over that domain that correspond the other combinators from\n  Simplicity. Unlike the case for rings, the domain of a Simplicity algebra\n  is indexed by a pair of Simplicity types, and naturally the constants and\n  functions that interpret Simplicity combinators must respect these types\n  (and unlike rings, we are not going to impose any extra laws).\n\n  Core Simplicity algebras are formalized in the <verbatim|Simplicity/Alg.v>\n  file. The <verbatim|Core.Class.class> record captures the interpretation of\n  constants and combinators for core Simplicity over a given domain. The\n  <verbatim|Core.Algebra> structure is the type of Simplicity algebras,\n  containing a type family for the domain, and an instance of the\n  <verbatim|Core.Class.class> record for interpretations.\n\n  Given any Simplicity algebra and a well-typed term (from the \\Pinitial\\Q\n  representation) we can interpret that term in the algebra to get out a\n  value from the domain (that has a type corresponding to the type of the\n  term). The <verbatim|Core.eval> function performs this interpretation by\n  recursively evaluating the interpretation of the core Simplicity\n  combinators from the algebra.\n\n  What sort of Simplicity algebras are there? The most obvious one is the\n  functional semantics of Simplicity. The domain of this algebra is the\n  functions between Simplicity types. This domain is indexed by the input and\n  output Simplicity types. The interpretation of the <math|<math-ss|iden>>\n  and <math|<math-ss|unit>> constants are the identity and constant-unit\n  functions respectively and the interpretation of the other core Simplicity\n  combinators is also in accordance with Simplicity's denotational semantics.\n  This algebra is defined in the <verbatim|CoreSem> structure and the\n  <verbatim|CorSem_correct> lemma proves that the interpretation of terms in\n  the \\Pinitial\\Q representation into this algebra results in the same\n  function that the <verbatim|eval> function from\n  <verbatim|Simplicity/Core.v> produces. The <verbatim|\\|[x]\\|> notation\n  denotes this denotation semantics using the <verbatim|CoreSem> domain.\n\n  Another example of a Simplicity algebra is the \\Pinitial\\Q representation\n  of terms themselves, which form a trivial algebra. This domain of\n  Simplicity terms is also indexed by input and output Simplicity types and\n  the constants and combinators are interpreted as themselves. This algebra\n  is defined in the <verbatim|Core.Term> structure and the\n  <verbatim|Core.eval_Term> lemma proves that the interpretation of any term\n  in this algebra returns the original term back.\n\n  There are several other Simplicity algebras. Programs for the Bit Machine\n  form a Simplicity algebra with the translation from Simplicity to Bit\n  Machine code defining the interpretation of core Simplicity combinators.\n  Also 256-bit hashes form a Simplicity algebra with the commitment Merkle\n  root computation defining the interpretation of core Simplicity\n  combinators. Static analysis of resource usage for Simplicity expressions\n  forms yet another set of Simplicity algebras.\n\n  Instances of Simplicity algebras are declared as <verbatim|Canonical\n  Structures>. This allows Coq's type inference engine to infer the\n  interpretation of Simplicity terms when they are used in the typing\n  contexts of domain of one of these Simplicity algebras.\n\n  <subsubsection|The \\PFinal\\Q Representation>\n\n  The \\Pfinal\\Q representation of a Simplicity term is as a function that\n  selects a value out of any Simplicity algebra and does so in a \\Puniform\\Q\n  manner. A \\Puniform\\Q manner means a function that satisfies the\n  <verbatim|Core.Parametric> property which effectively says that that the\n  values chosen by the function from two domains must each be constructed\n  from a composition of the interpretation of combinators in the two domains\n  in the same way. In other words, the function must act the the\n  interpretation of some \\Pinitial\\Q represented term under\n  <verbatim|Core.eval> for any domain.\n\n  Terms in the \\Pinitial\\Q representation can be converted to the \\Pfinal\\Q\n  representation by partial application of <verbatim|Core.eval>. The\n  <verbatim|Core.eval_Parametric> lemma proves that the resulting \\Pfinal\\Q\n  representation resulting from <verbatim|Core.eval> satisfies the\n  <verbatim|Core.Parametric> property.\n\n  Terms in the \\Pfinal\\Q representation can be converted into the \\Pinitial\\Q\n  representation by applying the function to the <verbatim|Core.Term>\n  Simplicity algebra. The <verbatim|Core.eval_Term> lemma shows that\n  converting from the \\Pinitial\\Q representation to the \\Pfinal\\Q\n  representation and back to the \\Pinitial\\Q representation returns the\n  original value. The <verbatim|Core.term_eval> lemma shows that starting\n  from any term in the \\Pfinal\\Q representation that satisfies the\n  <verbatim|Core.Parametric> property and converting it to the \\Pinitial\\Q\n  representation and back to the \\Pfinal\\Q representation results in an\n  equivalent term. This completes the proof at the two representations are\n  isomorphic.\n\n  <subsubsection|Constructing \\PFinal\\Q Terms>\n\n  To facilitate the construction of expression in the \\Pfinal\\Q\n  representation, the nine core combinators are defined as functions\n  parameterized over all Simplicity algebras, and each combinator is proven\n  to be parametric or to preserve parametericity. For the most part, these\n  combinators can be used to write Simplicity expressions in the \\Pfinal\\Q\n  representation in the same way one would use constructors to write\n  Simplicity expressions in the \\Pinitial\\Q representation. On top of this,\n  notation <verbatim|s &&& t> is defined for the pair combinator, and\n  <verbatim|s \\<gtr\\>\\<gtr\\>\\<gtr\\> t> is defined for the composition\n  combinator. Also we define the <verbatim|'H'>, <verbatim|'O'>, and\n  <verbatim|'I'> notations for sequences of takes and drops over the identity\n  combinator.\n\n  For every expression built in the \\Pfinal\\Q representation, it is necessary\n  to prove that the result satisfies the parametericity property. A\n  <verbatim|parametricity> hint database is provided to facilitate automatic\n  proofs of these results. Users should add their own parametricity lemmas to\n  the hint database as they create new Simplicity expressions. Some examples\n  of this can be found in the <verbatim|Simplicity/Arith.v> module.\n\n  <subsection|Why two representations of Terms?>\n\n  The \\Pinitial\\Q inductive representation is the traditional definition one\n  expects for terms and is easy to reason inductively about. The problem with\n  this representation is that, due to lack of sharing between\n  sub-expressions, it is expensive to evaluate with these terms inside Coq\n  itself. For example, one cannot compute Merkle roots of anything but the\n  most trivial of expressions.\n\n  The \\Pfinal\\Q algebra representation solves this problem by allowing\n  transparent sharing of expressions. In the \\Pfinal\\Q representation, terms\n  are really values of a Simplicity algebra. When these values are shared\n  using in Coq's let expressions, or shared via some function argument in\n  Coq, those values of the algebra are shared during computation within Coq.\n  This representation makes it feasible to actually compute Merkle roots for\n  Simplicity expressions directly inside Coq.\n\n  Both representations are used throughout the Simplicity Coq library. The\n  isomorphism between the two representations is used to transport theorems\n  between them.\n\n  I typically use <verbatim|term : Core.Algebra> as the variable name for an\n  abstract Simplicity algebra. I use this variable name because\n  <verbatim|Core.Term> are the most generic type of Simplicity algebra\n  (formally known as an initial algebra) so it makes sense to think of\n  generic Simplicity algebras as if they are term algebras.\n\n  <section|Example Simplicity Expressions>\n\n  <subsection|Bits>\n\n  The <verbatim|Simplicity/Bit.v> file defines notation for the Simplicity\n  type for bits, and notation for their two values <verbatim|'Bit.zero'> and\n  <verbatim|'Bit.one'>. The Simplicity expressions <verbatim|false> and\n  <verbatim|true> are defined to be the constant functions that return the\n  zero and one bit respectively. A few logical combinators are defined for\n  bits, including the <verbatim|cond <em|thn> <em|els>> combinator which does\n  case analysis on one bit of input, and executes <verbatim|<em|thn>> or\n  <verbatim|<em|els>> expressions according to whether the bit represented\n  true or false.\n\n  All the combinators and Simplicity expressions are given in the \\Pfinal\\Q\n  representation and parametricity lemmas are provided.\n\n  <subsection|Arithmetic><label|ss:coqArith>\n\n  The <verbatim|Simplicity/Arith.v> file defines types for multi-bit words\n  and defines Simplicity expressions for addition and multiplication on those\n  words. <verbatim|Word <em|n>> is a Simplicity type of a\n  <math|2<rsup|n>>-bit word. The <verbatim|ToZ> module defines a class of\n  types of finite words. The class provides <verbatim|toZ> and\n  <verbatim|fromZ> operations that convert between standard Coq integers and\n  these types of finite words along with proofs that the conversion functions\n  are inverses modulo the word size. <verbatim|Canonical Structure>\n  declarations provide implementations for the <verbatim|Bit> and\n  <verbatim|Word <em|n>> types and for pairs of of such types.\n\n  The <verbatim|Simplicity/Arith.v> file also defines the following\n  Simplicity expressions:\n\n  <\\itemize-dot>\n    <item><verbatim|adder : forall n term, term (Word n * Word n) (Bit * Word\n    n)>\n\n    <item><verbatim|fullAdder : forall n term, term ((Word n * Word n) * Bit)\n    (Bit * Word n)>\n\n    <item><verbatim|multiplier : forall n term, term (Word n * Word n) (Word\n    (S n))>\n\n    <item><verbatim|fullMultiplier : forall n term,<next-line>term ((Word n *\n    Word n) * (Word n * Word n)) (Word (S n))>\n  </itemize-dot>\n\n  The <verbatim|adder> expression defines the sum of two <math|2<rsup|n>>-bit\n  word, returning a carry bit and a <math|2<rsup|n>>-bit word result. The\n  <verbatim|fullAdder> expression defines the sum of two <math|2<rsup|n>>-bit\n  word and one (carry input) bit, returning a carry bit and a\n  <math|2<rsup|n>>-bit word result. The <verbatim|multiplier> expression\n  defines the product of two <math|2<rsup|n>>-bit word and returns a\n  <math|2<rsup|n+1>>-bit word. The <verbatim|fullMultiplier> expression takes\n  a quadruple, <math|<around*|\\<langle\\>|<around*|\\<langle\\>|a,b|\\<rangle\\>>,<around*|\\<langle\\>|c,d|\\<rangle\\>>|\\<rangle\\>>>\n  of <math|2<rsup|n>>-bit words and returns <math|a\\<cdot\\>b+c+d> as a\n  <math|2<rsup|n+1>>-bit word.\n\n  Each of these expressions has an associated correctness lemma. These\n  expressions are all defined in the \\Pfinal\\Q representation and there are\n  parametricity lemmas for each expression.\n\n  <subsection|SHA256>\n\n  <section|The Hierarchy of Simplicity Language Extensions>\n\n  <big-figure|<image|inheritance.Coq.eps||8cm||>|The inheritance hierarchy of\n  algebras for Simplicity's partial extensions in\n  Coq.<label|fig:inheritance>>\n\n  So far we have only covered the algebra for the core Simplicity language in\n  Coq. The various extensions to this core Simplicity language are captured\n  by extensions to the record type for the core Simplicity algebra.\n  Figure<nbsp><reference|fig:inheritance> illustrates the names of the\n  algebras extending the <verbatim|Core> language algebra and their\n  inheritance relationship. We use the \\Ppacked-classes\\Q method for\n  formalizing the inheritance relation of these extensions in Coq. Readers\n  unfamiliar with this style should first read \\P<hlink|Canonical Structures\n  for the working Coq user|https://hal.inria.fr/hal-00816703v1/document>\\Q<nbsp><cite|Mahboubi:2013>\n  and \\P<hlink|Packaging Mathematical Structures|https://hal.inria.fr/inria-00368403v1/document>\\Q<nbsp><cite|garillot:2009>.\n\n  Roughly speaking, there are two dimensions to the inheritance structure. In\n  one direction, the <verbatim|Core>, <verbatim|Witness>, and\n  <verbatim|Delegation> algebras all have semantics that can be interpreted\n  as pure functions. That is, the function semantics of terms from these\n  languages can be evaluated as functions that have no side-effects and can\n  return values within any monad, including the identity monad.\n\n  The next layer in this direction, <verbatim|Assertion>,\n  <verbatim|AssertionWitness>, and <verbatim|AssertionDelegation>, extend the\n  previous layer with assertion and failure expressions. These expressions\n  introduce the failure effect and the functional semantics of terms from\n  these languages return values within a <verbatim|MonadZero>, which includes\n  the <verbatim|option> monad.\n\n  The last layer in this direction, <verbatim|Primitive>, <verbatim|Jet>,\n  <verbatim|FullSimplicity>, and <verbatim|FullSimplicityWithDelegation>,\n  include primitive terms that are particular to the specific blockchain\n  application. The functional semantics of terms from these language return\n  values within a monad that captures the particular effects of the\n  blockchain application. In the case of Bitcoin, the effects are captured by\n  an environment (a.k.a reader) monad that provides read-only access to the\n  signed transaction data.\n\n  We break up the language of Simplicity into these layers because it helps\n  us isolate the side-effects of the various language extensions when\n  reasoning about Simplicity programs. When dealing with a sub-expression\n  from the first layer, one can safely ignore the environment and failure\n  effects and reason only about pure functions. Afterwards, various lemmas,\n  such as <code|<code*|Simplicity.Alg.CoreSem_initial>> or\n  <verbatim|Simplicity.Alg.AssertionSem_initial>, can be used to lift results\n  into the monads use by the other layers when combining the pure\n  sub-expression with other sub-expressions that do have effects.\n\n  The other dimension of the inheritance structure breaks the language into\n  feature sets. The <verbatim|Core>, <verbatim|Assertion>, and\n  <verbatim|Primitive> algebras exclude witness and delegation features and\n  encompass the set of language features that <verbatim|Jet>s are restricted\n  to using. The next layer, <verbatim|Witness>, <verbatim|AssertionWitness,>\n  and <verbatim|FullSimplicity>, add witness features culminating in the\n  <verbatim|FullSimplcity> algebra defining the Full Simplicity language. The\n  last layer, <verbatim|Delegation>, <verbatim|AssertionDelegation>, and\n  <verbatim|FullSimplicityWithDelgation> provides the powerful and dangerous\n  delegation extension, which should only be used with caution.\n\n  We cover these language extensions in more detail below.\n\n  <subsection|Witness>\n\n  The <verbatim|Witness> algebra, found in <verbatim|Simplicity/Alg.v>,\n  extends the <verbatim|Core> algebra with the <verbatim|witness> combinator.\n  The <verbatim|WitnessFunSem> and <verbatim|WitnessSem> canonical structures\n  define the function semantics by interpreting the terms as pure functions\n  and as Kleisli morphisms for any monad, respectively. The\n  <verbatim|Witness_initial> lemma relates these two interpretations.\n\n  <subsection|Assertion>\n\n  The <verbatim|Assertion> algebra, found in <verbatim|Simplicity/Alg.v>,\n  extends the <verbatim|Core> algebra with the <verbatim|assertl>,\n  <verbatim|assertr>, and <verbatim|fail> combinators. The\n  <verbatim|AssertionSem> canonical structure defines the functional\n  semantics of Simplicity with assertions by interpreting terms as Kleisli\n  morphisms for a monad with zero. The <verbatim|AssertionSem_initial> lemma\n  shows that when reasoning about the functional semantics of Simplicity with\n  assertions, it suffices to reason within the <verbatim|option> monad and\n  translate the result to any other monad with zero via the\n  <verbatim|optionZero> homomorphism.\n\n  The <verbatim|AssertionWitness> algebra is simply the meet of the\n  <verbatim|Assertion> and <verbatim|Witness> algebras without adding any new\n  combinators.\n\n  <subsection|Delegation>\n\n  The <verbatim|Delegation> algebra, found in\n  <verbatim|Simplicity/Delegation.v>, extends the <verbatim|Witness> algebra\n  with the <verbatim|disconnect> combinator. The\n  <verbatim|AssertionDelegation> algebra is simply the meet of the\n  <verbatim|Assertion> and <verbatim|Delegation> algebras (equiv. the meet of\n  the <verbatim|AssertionWitness> and <verbatim|Delegation> algebras) without\n  adding any new combinators.\n\n  \\ Building the functional semantics of Simplicity with delegation involves\n  a simultaneous computation of commitment Merkle roots (see\n  Section<nbsp><reference|SS:Coq:MerkleRoots>) and the functional semantics.\n  To support this the <verbatim|Delegator arr A B> type is the product of the\n  <verbatim|arr A B> and the <verbatim|CommitmentRoot A B> types. Whenever\n  <verbatim|arr> forms an algebra from any of the previous Simplicity\n  language algebras, then <verbatim|Delegator arr> is also a member of the\n  same algebra. Furthermore whenever <verbatim|arr> is a Simplicity with\n  witnesses algebra, then <verbatim|Delegator arr> is a Simplicity with\n  witnesses and delegation algebra. Similarly whenever <verbatim|arr> is a\n  Simplicity with assertions and witnesses algebra, then <verbatim|Delegator\n  arr> is a Simplicity with assertions, witnesses and delegation algebra.\n\n  The <verbatim|runDelegator> projection extracts <verbatim|arr A B>, from\n  <verbatim|Delegator arr A B>. For example, <verbatim|Arrow A B> is a\n  functional semantics for Simplicity with witnesses. Then, when\n  <verbatim|<em|t>> is a term for Simplicity with witnesses and delegation,\n  <verbatim|runDelegator t : Arrow A B> is the functional semantics of\n  <verbatim|<em|t>>.\n\n  The <verbatim|runDelegator_correctness> lemma shows that for Simplicity\n  terms that don't have delegation, then <verbatim|runDelegator> returns the\n  original semantics.\n\n  <subsection|Primitives>\n\n  The Simplicity language is parameterized by the choice of\n  blockchain-specific primitives. Currently we use Coq's module system to\n  capture this parameterization. A <verbatim|Module Type PrimitiveSig> found\n  in <verbatim|Simplicity/Primitive.v> defines the parameters that define\n  these blockchain-specific applications of simplicity:\n\n  <\\itemize>\n    <item>A type family <verbatim|t : Ty -\\<gtr\\> Ty -\\<gtr\\> Set> of the\n    primitive expression's syntax.\n\n    <item>A function <verbatim|tag : forall A B, t A B -\\<gtr\\> hash256> that\n    defines the Merkle roots for the primitives.\n\n    <item>A type <verbatim|env : Set> that captures the relevant read-only\n    context used to interpret the primitives.\n\n    <item>A function <verbatim|sem : forall A B, t A B -\\<gtr\\> A -\\<gtr\\>\n    env -\\<gtr\\> option B> that defines the functional semantics of the\n    primitives.\n  </itemize>\n\n  At the moment, this frameworks only supports primitives that use the\n  environment (and failure) side-effect; however this framework could be\n  extended to allow primitives that require other effects that can be\n  captured by commutative and idempotent monads (for example, the writer\n  effect to a commutative and idempotent monoid).\n\n  Given an instance of the <verbatim|PrimitiveSig>'s parameters, the\n  <verbatim|PrimitiveModule> defines the algebras for the parts of the\n  Simplicity language that depends on the primitives. This includes the\n  <verbatim|Primitive>, <verbatim|Jet>, <verbatim|FullSimplicity> and\n  <verbatim|FullSimplicityWithDelegation> algebras.\n\n  The <verbatim|Primitive> algebra extends the <verbatim|Assertion> algebra\n  with the primitives given by the <verbatim|PrimitiveSig>'s type family\n  <verbatim|t> through the <verbatim|prim> combinator. The <verbatim|primSem\n  M> arrow is the Kleisli arrow for the monad generated by adding an\n  environment effect for the <verbatim|PrimitiveSig>'s <verbatim|env> to the\n  monad <verbatim|M>. The <verbatim|PrimitivePrimSem> canonical structure\n  provides the functional semantics for Simplicity with primitives by\n  interpreting terms as <verbatim|primSem M> whenever <verbatim|M> is a monad\n  zero.\n\n  <subsubsection|Bitcoin>\n\n  The <verbatim|Bitcoin> module found in <verbatim|Simplicity/Primitive/Bitcoin.v>\n  provides these an instance of the <verbatim|PrimitiveSig> parameters used\n  for a Bitcoin or Bitcoin-like application of Simplicity. The structures\n  defining the signed transaction data are specified culminating in the\n  <verbatim|sigTx> data type.\n\n  The <verbatim|Bitcoin.prim> type lists the typed primitive expressions\n  defined in Section<nbsp><reference|ss:BitcoinTransactions>. The\n  <verbatim|environment> type captures the read-only context for interpreting\n  these primitives and it includes a <verbatim|sigTx>, the index within this\n  transaction that is under consideration, and the commitment Merkle root of\n  the script being evaluated.\n\n  Lastly, the <verbatim|sem> function defines the functional semantics of the\n  primitives in accordance with Section<nbsp><reference|ss:BTDenotationalSemantics>\n  and the <verbatim|tag> function defines the Merkle roots for the primitives\n  in accordance with Section<nbsp><reference|ss:BTMerkleRoots>. We use\n  <verbatim|vm_compute> in the definition of <verbatim|tag> to pre-evaluate\n  the definitions of the Merkle roots as an optimization.\n\n  <subsection|Jets>\n\n  The <verbatim|Jet> algebra, found in the <verbatim|PrimitiveModule> in\n  <verbatim|Simplicity/Primitive.v>, extends the <verbatim|Primitive> algebra\n  with generic support for jets. The <verbatim|jet> combinator takes a term\n  <verbatim|<em|t>> from the <verbatim|Primitive> algebra and the\n  <verbatim|JetPrimSem> canonical structures defines the functional semantics\n  of a jet to be the functional semantics of <verbatim|<em|t>>.\n  Operationally, we expect implementations of specific jets to be natively\n  implemented, but this detail goes beyond the scope of the specification of\n  Simplicity within Coq.\n\n  Because <verbatim|<em|t>> is restricted to being a term from the\n  <verbatim|Primitive> algebra, jets cannot contain <verbatim|witness> or\n  <verbatim|disconnect> sub-expressions. While our generic definition of\n  <verbatim|jets> allows any term from the <verbatim|Primitive> algebra to be\n  a jet, we expect specific applications of Simplicity to limit themselves to\n  a finite collection of jets through its serialization format.\n\n  <subsection|Full Simplicity>\n\n  The <verbatim|FullSimplicity> algebra, found in the\n  <verbatim|PrimitiveModule> in <verbatim|Simplicity/Primitive.v>, is the\n  meet of the <verbatim|Jet> and the <verbatim|Witness> algebras (equiv. the\n  meet of the <verbatim|Jet> and <verbatim|AssertionWitness> algebras) with\n  no additional combinators. It defines the full Simplicity language. The\n  <verbatim|SimplicityPrimSem> canonical structure provides the functional\n  semantics of the full Simplicity language as the <verbatim|primSem M> type\n  family when <verbatim|M> is a monad zero.\n\n  The <verbatim|FullSimplicityWithDelegation> algebra is the the meet of the\n  <verbatim|Jet> and the <verbatim|Delegation> algebras (equiv. the meet of\n  the <verbatim|FullSimplicity> and <verbatim|Delegation> algebras, or the\n  meet of the <verbatim|FullSimplicity> and <verbatim|AssertionDelegation>\n  algebras, etc.) defines the full Simplicity with delegation language. The\n  functional semantics are defined via the\n  <verbatim|SimplicityDelegationDelegator> canonical structure whose domain\n  includes <verbatim|Delegator (primSem M)> when <verbatim|M> is a monad\n  zero. Using <verbatim|runDelegator>, one can extract a <verbatim|primSem M>\n  value as the functional semantics.\n\n  <section|Merkle Roots><label|SS:Coq:MerkleRoots>\n\n  The <verbatim|Simplicity/MerkleRoot.v> file defines a Merkle root of types,\n  and the commitment Merkle root and annotated Merkle roots for part of the\n  Simplicity language. The Merkle root of types is specified by\n  <code|<code*|typeRootAlg>> and defined by <verbatim|typeRoot>. The in the\n  <verbatim|CommitmentRoot A B> family the parameters are phantom parameters,\n  and the value is always a <verbatim|hash256> type. Canonical Structures\n  provide instances of <verbatim|CommitmentRoot> for core Simplicity, and\n  Simplicity with assertions and witnesses. The <verbatim|CommitmentRoot> for\n  delegation is found in <verbatim|Simplicity/Delegation.v> and the\n  <verbatim|CommitmentRoot> for primitives, jets, Full Simplicity and Full\n  Simplicity with delegation is found in <verbatim|Simplicity/Primitive.v>.\n\n  These Merkle roots are computed using the SHA-256 compression function with\n  unique tags providing the initial value for each language construct. These\n  tags are in turn the SHA-256 hash of short (less than 56 character) ASCII\n  strings. The Coq definition of SHA-256 is taken from the VST (Verified\n  Software Toolchain) project<cite|Appel:2015> and the\n  <verbatim|Simplicity/Digest.v> module provides an interface to that\n  project.\n\n  The VST implementation of SHA-256 is efficient enough that it is practical\n  to compute some commitment Merkle roots of functions inside Coq itself\n  using <verbatim|vm_compute>. See <verbatim|Fact Hash256_hashBlock> at the\n  end of <verbatim|Simplicity/SHA256.v> for an example of computing the\n  commitment Merkle root of a Simplicity function that computes the SHA-256\n  compression function.\n\n  <section|The Bit Machine>\n\n  The <verbatim|Simplicity/BitMachine.v> file provides the primary definition\n  of the abstract Bit Machine. This definition, and hence this file, is\n  independent of the rest of the Simplicity language.\n\n  The <verbatim|Cell> type explicitly tracks cell values in the bit machine\n  as being one of <verbatim|0>, <verbatim|1>, and undefined. <verbatim|None>\n  represents the undefined value and <verbatim|Some false> and <verbatim|Some\n  true> represent <verbatim|0> and <verbatim|1> respectively.\n\n  The <verbatim|ReadFrame> record represents read frames. It uses a zipper\n  representation of a list with a cursor: The elements of the list in front\n  of the cursor are in the <verbatim|nextData> field and the elements of the\n  list behind the cursor are in the <verbatim|prevData> field stored in\n  <em|reverse order>. The <verbatim|setFrame> function builds a read frame\n  from a list with the cursor set to the beginning of the frame.\n\n  The <verbatim|WriteFrame> record represents write frames. It uses a similar\n  zipper representation where the <verbatim|writeData> field holds the\n  elements behind the cursor in <em|reverse order>. Because write frames are\n  append only, every cell in front of the cursor must be an undefined value.\n  For this reason we only store the number of cells in front of the cursor in\n  the <verbatim|writeEmpty> field. The <verbatim|newWriteFrame> function\n  builds an empty write frame of a given size and the\n  <verbatim|fullWriteFrame> function builds an filled write frame from a\n  list.\n\n  The <verbatim|RunState> record represents the non-halted states of the Bit\n  Machine. It consists of\n\n  <\\itemize-dot>\n    <item><verbatim|inactiveReadFrames>: a list of inactive read frames, with\n    the bottom of the stack at the end of the list.\n\n    <item><verbatim|activeReadFrame>: the active read frame, which is the top\n    value of the non-empty stack of read frames.\n\n    <item><verbatim|activeWriteFrame>: the active write frame, which is the\n    top value of the non-empty stack of write frames.\n\n    <item><verbatim|inactiveWriteFrames>: a list of inactive write frames,\n    with the bottom of the stack at the end of the list.\n  </itemize-dot>\n\n  The <verbatim|State> variant is either a <verbatim|RunState> or the\n  <verbatim|Halted> state and represents the possible states of the Bit\n  Machine. We make the injection of <verbatim|RunState> into <verbatim|State>\n  a coercion.\n\n  It is sometimes useful to decompose the Bit Machine's state as\n\n  <\\equation*>\n    <around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\><carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>*c<rsub|n<rsub|0>>>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<cdummy\\><cearr|c<rsub|1>*\\<cdots\\>*c<rsub|n<rsub|1>>><carr|?><rsup|n<rsub|2>><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>\n  </equation*>\n\n  where we are locally interested in what is immediately in front of the\n  active read frame's cursor, <math|<carr|<wide*|c<rsub|1>|\\<bar\\>>\\<cdots\\>*c<rsub|n<rsub|0>>>>,\n  and what is immediately surrounding the active write frame's cursor,\n  <math|<cearr|c<rsub|1>*\\<cdots\\>*c<rsub|n<rsub|1>>><carr|?><rsup|n<rsub|2>>>.\n  This is captured by the <verbatim|LocalState> type, noting that the data\n  immediately surrounding the active write frame's cursor is captured by the\n  <verbatim|WriteFrame> type. The remainder of the state, consisting of\n  <math|<around*|[|\\<Theta\\>\\<vartriangleright\\>r<rsub|0>\\<cdummy\\>\\<bullet\\>\\<cdummy\\>r<rsub|0><rprime|'>\\|w<rsub|0>\\<cdummy\\>\\<bullet\\>\\<cdummy\\><carr|?><rsup|m>\\<vartriangleleft\\>\\<Xi\\>|]>>\n  is captured by the <verbatim|Context> type, which happens to be isomorphic\n  to the <verbatim|RunState> type. The <verbatim|fillContext> function\n  combines a <verbatim|Context> value and a <verbatim|LocalState> value to\n  build a complete <verbatim|RunState> value.\n\n  Sometimes we are interested in of some <verbatim|LocalState> within another\n  <verbatim|LocalState>. The context of such a decomposition is isomorphic to\n  <verbatim|LocalState> and we don't even both giving a type alias to this.\n  The <verbatim|appendLocalState> function combines a context,\n  <verbatim|ls1>, with a <verbatim|LocalState>, <verbatim|ls2>, to build a\n  combined <verbatim|LocalState>. <verbatim|appendLocalState> makes\n  <verbatim|LocalState> into a monoid and <verbatim|fillContext> becomes a\n  monoid action on <verbatim|Context>s with respect to this monoid. This\n  theory is not fully developed in Coq, but will be if it is needed. The\n  <verbatim|context_action> lemma proves the monoid action property, which is\n  the only theorem developed so far.\n\n  The <verbatim|StateShape> type is constructed using similar fields as the\n  <verbatim|State> type and contains a sequence of numbers. This is used for\n  counting the number of cells in the various components of the Bit Machine's\n  <verbatim|State>. The <verbatim|stateShapeSize> function tallies up the\n  totals and is used later in the <verbatim|maximumMemoryResidence> function.\n\n  <subsection|Bit Machine Code>\n\n  The <verbatim|MachineCode.T <em|S1> <em|S2>> type enumerates the nine basic\n  instructions of the Bit Machine. The type of these instructions are\n  parameterized by the legal states that the instructions can successfully\n  operate in, <verbatim|<em|S1>>, and the resulting state after execution of\n  the instruction, <verbatim|<em|S2>>. In this way, the\n  <verbatim|MachineCode.T> type family represents a precategory (also known\n  as a directed multi-graph) that captures the machine instructions and their\n  semantics. There is an object (a.k.a. node) for every possible state of the\n  Bit Machine. There is an arrow (a.k.a. directed edge) between two states if\n  there is an instruction of the Bit Machine that successfully transitions\n  from the source state to the target state, and that arrow (a.k.a. directed\n  edge) is labeled with the name of the instruction. The <verbatim|Abort>\n  instruction is the only instruction whose final state is the\n  <verbatim|Halted> state. No instruction begins from the <verbatim|Halted>\n  state. The specific type <verbatim|MachineCode.T <em|S1> <em|S2>> is the\n  type of all instructions that transition from state <verbatim|<em|S1>> to\n  state <verbatim|<em|S2>>.\n\n  A <dfn|thrist> of <verbatim|MachineCode.T> is the free category generated\n  from the precategory <verbatim|MachineCode.T>. This free category can also\n  be understood as a collection of all paths through the directed graph of\n  all machine instructions and their associated state transitions. The\n  specific type <verbatim|Thrst MachineCode.T <em|S1> <em|S2>> is the type of\n  all sequences of instructions that transition from state <verbatim|<em|S1>>\n  to state <verbatim|<em|S2>>. This type captures the semantics of sequences\n  of machine instructions.\n\n  The notation <verbatim|<em|S1> ~~\\<gtr\\> <em|S2>> denotes the\n  <verbatim|MachineCode.T <em|S1> <em|S2>> type of single step transitions,\n  which corresponds to <math|S<rsub|1>\\<rightsquigarrow\\>S<rsub|2>>. The\n  notation <verbatim|<em|S1> -\\<gtr\\>\\<gtr\\> <em|S2>> denotes the\n  <verbatim|Thrst MachineCode.T <em|S1> <em|S2>> type of multi-step\n  (including 0 steps) transitions between states <verbatim|<em|S1>> and\n  <verbatim|S2> and the trace of the instructions used. The\n  <verbatim|runHalt> lemma proves that the only trace that begins from the\n  <verbatim|Halted> state is the empty trace.\n\n  <subsubsection|Bit Machine Programs>\n\n  We interpret a Bit Machine <verbatim|Program> as a function taking an\n  initial machine state and, if successful, returning a final machine state\n  along with a thrist of machine instructions that connect the initial state\n  to the final state. The notation <verbatim|S1 \\<gtr\\>\\<gtr\\>- k\n  -\\<gtr\\>\\<gtr\\> S2> corresponds to <prog|S<rsub|1>|k|S<rsub|2>> and denotes\n  that the program <verbatim|k> when started in state <verbatim|S1>\n  successfully executes and ends in state <verbatim|S2>. The <verbatim|trace>\n  function extracts a <verbatim|S1 -\\<gtr\\>\\<gtr\\> S2> trace from a program\n  <verbatim|k> when <verbatim|S1 \\<gtr\\>\\<gtr\\>- k -\\<gtr\\>\\<gtr\\> S2> holds.\n\n  For each machine instruction we use <verbatim|makeProgram> to define a\n  single instruction <verbatim|Program> that tries to execute that single\n  instruction once and returns that state transition. If the initial\n  non-halted state given to these single instruction programs is not valid\n  for their instruction, the program fails by returning <verbatim|None>.\n  However, when the initial state is the <verbatim|Halted> state, the program\n  succeeds but ignores its instruction and remains in the <verbatim|Halted>\n  state. This corresponds to the <prog|<halted>|i|<halted>> deduction. These\n  single instruction programs have an associated correctness lemma that\n  proves they run successfully when run from an initial state valid for their\n  instruction and a completeness lemma that proves that they were run from\n  either a valid initial state or the <verbatim|Halted> state. We also define\n  the trivial <verbatim|nop> program that contains no instructions and always\n  succeeds.\n\n  These single instruction (and <verbatim|nop>) programs can be combined into\n  more complex programs using the <verbatim|seq> and <verbatim|choice>\n  combinators. The <verbatim|seq> combinator sequences two programs, running\n  the second program starting from the final state of the first program and\n  combines their thrists. The sequence fails if either program fails. The\n  <verbatim|choice> combinator picks between running two programs by peeking\n  at the cell under the active read frame's cursor from the initial state and\n  running either the first or second program depending on whether the cell\n  holds a <verbatim|0> or <verbatim|1> value. When starting from a non-halted\n  state, if the cell holds an undefined value, or if the active read frame's\n  cursor is at the end of the frame, the <verbatim|choice> combinator fails.\n  When started from the <verbatim|Halted> state, the <verbatim|choice>\n  program succeeds but remains in the <verbatim|Halted> state.\n\n  The notations <verbatim|<em|k0> ;;; <em|k1>> and <verbatim|<em|k0> \\|\\|\\|\n  <em|k1>> denote the sequence and choice combinations respectively of two\n  programs and correspond to <math|k<rsub|0>;k<rsub|1>> and\n  <math|k<rsub|0><around*|\\|||\\|>k<rsub|1>>. We also define the combinator\n  <verbatim|bump <em|n> <em|k>> which corresponds to <math|n\\<star\\>k>.\n\n  The <verbatim|runMachine> function takes a <verbatim|Program> and an\n  initial <verbatim|State> and extracts the resulting final <verbatim|State>\n  and the trace to get there, if the program is successful. For denotational\n  semantics we only care about the resulting final state. For operational\n  semantics we will care how we got there. A few lemmas are provided to help\n  reason about the behaviour of <verbatim|runMachine> when running the\n  program combinators.\n\n  The <verbatim|maximumMemoryResidence> function computes the maximum number\n  of cells used by any intermediate state from the trace of execution of a\n  Bit Machine program. A few lemmas are provided to help reason about the\n  behaviour of <verbatim|maximumMemoryResidence> when running the program\n  combinators.\n\n  <subsection|Translating Simplicity to the Bit Machine>\n\n  The <verbatim|Simplicity/Translate.v> file defines how to transform\n  Simplicity programs into Bit Machine programs that perform the same\n  computation. The <verbatim|bitSize> and <verbatim|encode> functions\n  implement <math|bitSize<around*|(|A|)>> and <math|<rep|a|A>> respectively.\n\n  The <verbatim|Naive.translate> structure provides a Simplicity algebra for\n  Bit Machine <verbatim|Program>s that interprets Simplicity terms according\n  to the naive translation. The <verbatim|Naive.translate_correct> theorem\n  proves that the <verbatim|Program> generated by <verbatim|Naive.translate>\n  when started from a state that contains an encoding of Simplicity\n  function's input successfully ends up in a final machine state that\n  contains an encoding of Simplicity function's output (and input).\n\n  <subsection|Static Analysis>\n\n  The <verbatim|Simplicity/StaticAnalysis.v> files defines the static\n  analyses of Simplicity program that compute bounds on the various\n  computational resources used by the Bit Machine when executing translated\n  Simplicity. The file also proves the correctness of these upper bounds.\n\n  The <verbatim|MaximumMemory> module defines the\n  <verbatim|MaximumMemory.extraMemoryBound> algebra which is used to compute\n  an upper bound on additional memory that will be used when Simplicity\n  sub-expressions are naively translated to the Bit Machine and executed. The\n  <verbatim|MaximumMemory.Core_spec> lemma proves that for naively translated\n  core Simplicity expressions, the maximum memory used by the Bit Machine is\n  the memory needed by the size of the initial state, plus the results of\n  <verbatim|MaximumMemory.extraMemoryBound>. This bound holds no matter what\n  the starting state is, even if it is not a valid state for holding the\n  input for the Simplicity expression.\n\n  The <verbatim|MaximumMemory.CellBound> function computes the memory used by\n  the Bit Machine for evaluating Simplicity expressions starting from a\n  standard initial state and <verbatim|MaximumMemory.CellBound_correct>\n  proves that this upper bound is correct.\n\n  <chapter|Haskell Library Guide>\n\n  WARNING: None of the Haskell library development is normative. There is no\n  formalized connection between any of the Haskell library and Simplicity's\n  formal semantics and development in Coq. There could be errors in the\n  Haskell library that cause it to disagree with the formal development\n  defined in Coq. The Haskell library is intended to be used for\n  experimental, exploratory and rapid development of Simplicity related work,\n  but should not be relied upon for production development. For production\n  development, formal developments in Coq should be created.\n\n  The Haskell Simplicity project is split up into multiple libraries in order\n  so that multiple different applications of Simplicity to different\n  Blockchains can be developed and used without conflicting with each other.\n  We use the Backpack feature of the Glasgow Haskell Compiler to parameterize\n  and reexport common functionally for different Simplicity applications.\n\n  <section|<verbatim|Simplicity-Core> library>\n\n  The first library, <verbatim|Simplicity-Core>, is found in the\n  <verbatim|Haskell/Core> directory. It defines the aspects of Simplicity\n  that are independent of any particular Blockchain application. This include\n  Simplicity's type system, Simplicity's core expression language and the\n  assertions, witness, and delegation extensions, and a few other components.\n\n  <subsection|Simplicity Types>\n\n  The <verbatim|Core/Simplicity/Ty.hs> file contains the development of\n  Simplicity types. There are three different ways that Simplicity types are\n  captured in Haskell.\n\n  The primary way Simplicity types are captured is by the <verbatim|TyC>\n  class which only has instances for the Haskell types that correspond to the\n  Simplicity types:\n\n  <\\itemize-dot>\n    <item><verbatim|instance TyC ()>\n\n    <item><verbatim|instance (TyC a, TyC b) =\\<gtr\\> TyC (Either a b)>\n\n    <item><verbatim|instance (TyC a, TyC b) =\\<gtr\\> TyC (a, b)>\n  </itemize-dot>\n\n  The <verbatim|TyC> class is crafted so that its methods are not exported.\n  This prevents anyone from adding further instances to the <verbatim|TyC>\n  class.\n\n  The second way Simplicity types are captured is by the <verbatim|TyReflect>\n  GADT:\n\n  <\\code>\n    data TyReflect a where\n\n    \\ \\ OneR \\ :: TyReflect ()\n\n    \\ \\ SumR \\ :: (TyC a, TyC b) =\\<gtr\\> TyReflect a -\\<gtr\\> TyReflect b\n    -\\<gtr\\> TyReflect (Either a b)\n\n    \\ \\ ProdR :: (TyC a, TyC b) =\\<gtr\\> TyReflect a -\\<gtr\\> TyReflect b\n    -\\<gtr\\> TyReflect (a, b)\n  </code>\n\n  This data type provides a concrete, value-level representation of\n  Simplicity types that is tied to the type-level representation of\n  Simplicity types. For each Haskell type corresponding to a Simplicity type,\n  <verbatim|a>, the <verbatim|TyReflect a> type has exactly one value that is\n  built up out of other values of type <verbatim|TyReflect> corresponding to\n  the Simplicity type sub-expression. For example the value of type\n  <verbatim|TyReflect (Either () ())> is <verbatim|SumR OneR OneR>.\n\n  The <verbatim|reify :: TyC a =\\<gtr\\> TyReflect a> produces the value of\n  the <verbatim|TyReflect> GADT that corresponds to the type constrained by\n  the <verbatim|TyC> constraint. When users have a Haskell type constrained\n  by <verbatim|TyC> they can use <verbatim|reify> to get the corresponding\n  concrete value of the <verbatim|TyReflect> GADT which can then be further\n  processed. The <verbatim|reifyProxy> and <verbatim|reifyArrow> functions\n  are helper functions for <verbatim|refiy> that let you pass types via a\n  proxy.\n\n  The third way Simplicity types are captured is by the <verbatim|Ty> type\n  alias, which is the fixed point of the <verbatim|TyF> functor. This is a\n  representation of Simplicity types as a data type. The <verbatim|one>,\n  <verbatim|sum>, and <verbatim|prod> functions provide smart-constructors\n  that handle the explicit fixed-point constructor. The <verbatim|memoCataTy>\n  helps one build memoized functions that consume <verbatim|Ty> values.\n\n  Generally speaking, we use <verbatim|TyC> to constrain Haskell types to\n  Simplicity types when creating Simplicity expressions. This way Simplicity\n  type errors are Haskell type errors and can be caught by the Haskell\n  compiler. We use the <verbatim|Ty> type when doing computations such as\n  deserializing Simplicity expressions and performing unification for\n  Simplicity's type inference. The <verbatim|TyReflect> GADT links these two\n  representations. For example, the <verbatim|equalTyReflect> function can\n  test if two Simplicity types are equal or not, and if they are equal then\n  it can unify the Haskell type variables that represent the two Simplicity\n  types. The <verbatim|unreflect> function turns a <verbatim|TyReflect> value\n  into a <verbatim|Ty> value by forgetting about the type parameter.\n\n  The <verbatim|Simplicity/Ty.hs> file also defines the\n  <verbatim|UntypedValue> that represents data values of Simplicity's typed,\n  but in an untyped manner. This is mostly used for <samp|witness> nodes.\n  There are functions to convert to and from typed and\n  <verbatim|UntypedValue>s.\n\n  Within the <verbatim|Simplicity/Ty> directory, there are modules providing\n  data types that are built from Simplicity types. The\n  <verbatim|Simplicity/Ty/Bit.hs> module provides a <verbatim|Bit> type,\n  corresponding to <math|<2>>, and the canonical isomorphism between\n  Haskell's <verbatim|Bool> type and <verbatim|Bit>.\n\n  The <verbatim|Simplicity/Ty/Word.hs> module provides the <verbatim|Word a>\n  type that describes Simplicity types for multi-bit words. Its type\n  parameter is restricted to either be a single <verbatim|Bit> word type or a\n  product that doubles the size of a another word type via the\n  <verbatim|Vector> GADT. The <verbatim|wordSize> returns the number of bits\n  a word has, or more generally the number of elements a vector has. The\n  <verbatim|fromWord> and <verbatim|toWord> functions convert values of\n  Simplicity words types to and from Haskell <verbatim|Integer>s (modulo the\n  size of the word). The file also provides specializations of these various\n  functions for word sizes between 1 and 512 bits.\n\n  <subsection|Simplicity Terms>\n\n  Terms are represented in tagless-final style<nbsp><cite|Carette:2009>. This\n  style is analogous to the \\Pfinal\\Q representation of terms that is defined\n  in the Coq library.\n\n  The <verbatim|Core/Simplicity/Term/Core.hs> file develops the core\n  Simplicity term language plus a few extensions. The <verbatim|Core> type\n  class captures Simplicity algebras for core Simplicity expressions. Core\n  Simplicity expressions are represented in Haskell by expressions of type\n  <verbatim|forall a b. Core term =\\<gtr\\> term a b> which are expressions\n  that hold for all Simplicity algebras.\n\n  This module provides infix operators, <verbatim|(\\<gtr\\>\\<gtr\\>\\<gtr\\>)>\n  and <verbatim|(&&&)>, for the <verbatim|comp> and <verbatim|pair>\n  Simplicity combinators respectively. It also provides notation for short\n  sequences of string of <samp|I>'s, <samp|O>'s and <samp|H>'s. Note that\n  because <verbatim|case> is a reserved word in Haskell we use\n  <verbatim|match> for Simplicity's <samp|case> combinator. Examples of\n  building Simplicity expressions can be found in the next section.\n\n  This module also provides <verbatim|Assert>, <verbatim|Witness>, and\n  <verbatim|Delegate> classes for the failure, witness, and delegation\n  language extensions respectively. Terms that make use of these extension\n  will have these class constraints added to their type signatures. For\n  example, a value of type <verbatim|forall a b. (Core term, Witness term)\n  =\\<gtr\\> term a b> is a term in the language of Simplicity with witnesses.\n\n  This module provides <verbatim|(-\\<gtr\\>)> and <verbatim|Kleisli m>\n  instances of these classes that provide denotational semantics of core\n  Simplicity and some extensions. For example, one can take core Simplicity\n  terms and directly use them as functions. The semantics of\n  <verbatim|Delegate> depends on the commitment Merkle root; you can find\n  semantics for that extension in <verbatim|Indef/Simplicity/Semantics.hs>\n  and it is discussed in Section<nbsp><reference|ss:DenotationalSemanticsOfFullSimplicity>.\n\n  The primary purpose of using tagless-final style is to support transparent\n  sharing of subexpressions in Simplicity. While subexpressions can be shared\n  if we used a GADT to represent Simplicity terms, any recursive function\n  that consumes such a GADT cannot take advantage of that sharing. Sharing\n  results of static analysis between shared sub-expressions is critical to\n  making static analysis practical. Adding explicit sharing to the Simplicity\n  language would make the language more complex and would risk incorrectly\n  implementing the sharing combinator. Explicitly building memoization tables\n  could work, but will have overhead. For instance, we do this when computing\n  Merkle roots of Simplicity types. However, the solution of using\n  tagless-final style lets us write terms in a natural manner and we get\n  sharing for Simplicity expressions at exactly the points where we have\n  sharing in the Haskell representation of the term.\n\n  <subsection|Merkle Roots>\n\n  The <verbatim|Core/Simplicity/MerkleRoot.hs> module reexports functionality\n  defined in <verbatim|Core/Simplicity/MerkleRoot/Impl.hs>, which provides\n  instances of Simplicity terms that compute the commitment, identity and\n  annotated Merkle roots. The <verbatim|commitmentRoot> and\n  <verbatim|annotatedRoot> return these Merkle root values. The\n  <verbatim|Simplicity/MerkleRoot.hs> module also provides a memoized\n  computation of the Merkle roots for Simplicity types.\n\n  The SHA-256 implementation is provided through an abstract interface found\n  in <verbatim|Core/Simplicity/Digest.hs>, which in turn references an\n  implementation of a 256-bit word type defined in\n  <verbatim|Core/Simplicity/Word.hs>.\n\n  The <verbatim|identityHash> computation differs from <math|<imr0|t>> in\n  that it additionally hashes in the input and output types of an expression\n  <math|t>. This is done so that ensuring the uniqueness of the\n  <math|<imr0|t>> and the input and outputs type triples can be effectively\n  done by just comparing the single <verbatim|identityHash> value.\n\n  <subsection|Tensors>\n\n  The <verbatim|Simplicity/Tensor.hs> module provides a typed\n  <verbatim|Product> tensor which allows you to apply multiple\n  interpretations of a Simplicity expression simultaneously. For example,\n  this <verbatim|Product> is used in the <verbatim|loop> construct (see\n  Section<nbsp><reference|ss:haskellLoop>) to simultaneously compute a\n  commitment Merkle root alongside another interpretation.\n\n  <subsection|Example Simplicity Expressions>\n\n  The <verbatim|Core/Simplicity/Programs> directory contains various\n  developments of Simplicity expressions in Haskell that are independent of\n  any particular blockchain application.\n\n  <subsubsection|Generic>\n\n  The <verbatim|Core/Simplicity/Programs/Generic.hs> file provides some\n  Simplicity expressions that can apply to any Simplicity type.\n\n  The <verbatim|scribe> function produces a Simplicity expression denoting a\n  constant function for any value for any Simplicity type. The <verbatim|eq>\n  Simplicity expression compares any two values of the same Simplicity type\n  and decides if they are equal or not.\n\n  <subsubsection|Bits>\n\n  The <verbatim|Core/Simplicity/Programs/Bit.hs> file has Simplicity\n  expressions for bit manipulation. <verbatim|false> and <verbatim|true> are\n  Simplicity expressions for the constant functions of those types and\n  <verbatim|cond> provides case analysis combinator for a single bit. There\n  are combinators for various logical operators. These logical operators are\n  short-circuited where possible. There are also a few trinary Boolean\n  Simplicity expressions that are used in hash functions such as SHA-256.\n\n  <subsubsection|Multi-bit Words>\n\n  The <verbatim|Core/Simplicity/Programs/Word.hs> file provides support for\n  vector an multi-bit word expressions that operate on Simplicity's vector\n  and word types. It provides the implementations of logical bit-vector,\n  padding, truncating, shifting and rotating Simplicity expressions.\n\n  The <verbatim|full_shift> function provides a generic shift operation that\n  allows shifting in and shifting out an arbitrary word size of bits. The\n  <verbatim|shift_const_by> function can perform either left or right shifts,\n  filling in new elements or bits with a provided value. The\n  <verbatim|rotate_const> function can perform either left or right rotates\n  by a constant amount.\n\n  The <verbatim|bitwise_bin> combinator takes a Simplicity expression for a\n  binary bit operation and lifts it to a Simplicity expression for a binary\n  operation on arbitrary sized words that performs the bit operation\n  bit-wise. There is also a variant, called <verbatim|bitwise_tri> the does\n  the same thing for trinary bit operations.\n\n  <subsubsection|Arithmetic>\n\n  The <verbatim|Core/Simplicity/Programs/Arith.hs> file provides support for\n  arithmetic and number based expressions that operate on Simplicity's word\n  types interpreted as unsigned integers. It provides implementations of the\n  <verbatim|zero>, <verbatim|one>, <verbatim|add>, <verbatim|subtract>,\n  <verbatim|multiply>, <verbatim|divide>, and <verbatim|modulo> Simplicity\n  expressions. It also provides implementations of <verbatim|lt>,\n  <verbatim|le>, <verbatim|min>, <verbatim|max>, and <verbatim|median>.\n\n  The <verbatim|eea> expression implements the extended euclidean algorithm,\n  which in turn defines <verbatim|bezout>, <verbatim|cofactors>, and\n  <verbatim|gcd> expressions.\n\n  The <verbatim|absolute_value> and <verbatim|sign> expression operate on an\n  interpretation of Simplicity words as signed integers (with\n  <verbatim|absolute_value> returning an unsigned value).\n\n  <subsubsection|Loop><label|ss:haskellLoop>\n\n  The <verbatim|Core/Simplicity/Programs/Loop.hs> files is a stub module for\n  holding operations for building unbounded loops via the self-delegation\n  method described in Section<nbsp><reference|ss:unboundedLoop>. At the\n  moment it can be used to build the <verbatim|CommitmentRoot> of an\n  unbounded loop, but the code needed to redeem such a commitment has not\n  been developed yet.\n\n  <subsection|Libraries of Simplicity Expressions>\n\n  The tagless-final style used for Simplicity expressions is designed to\n  perform efficiently for some interpretations of Simplicity when\n  subexpressions are shared. In particular the computation of Merkle roots\n  and serialization (see <reference|ss:Haskell-DAG>) are much faster to\n  compute when subexpressions are shared. However the polymorphism in the\n  tagless-final type used for expression is at odds with subexpression\n  sharing in a naive implementation of Simplicity expressions.\n\n  In order to realize subexpression sharing between Simplicity expressions,\n  we build libraries of Simplicity expressions as a record type. We use the\n  <verbatim|RecordWildcards> language extension to bring all function of a\n  library in scope with a single <verbatim|Lib{..}> pattern. This approach is\n  similar to \\P<hlink|First-class modules without\n  defaults|http://www.haskellforall.com/2012/07/first-class-modules-without-defaults.html>\\Q\n  by <hlink|Gabriel Gonzalez|https://www.blogger.com/profile/01917800488530923694>.\n  Generating several Simplicity expressions together allows us to share\n  common subexpressions between the different library functions all within a\n  single interpretation.\n\n  Libraries typically come with some kind of <verbatim|mkLib> function that\n  given a set library dependencies, constructs an instance of the library of\n  functions. Building a library from a set of dependencies allows us to share\n  dependencies between different libraries when we want to use multiple\n  different libraries.\n\n  The general approach to using the libraries for your own expressions is to\n  create a <verbatim|where> clause containing the <verbatim|mkLib> expression\n  for all the libraries that you want to use and their dependencies that are\n  bound to <verbatim|name@Lib{..}> patterns to bring all the library function\n  into scope. Then you can build your expression using any of the library\n  functions.\n\n  <subsubsection|SHA-256>\n\n  The <verbatim|Core/Simplicity/Programs/Sha256.hs> file provides a library\n  of Simplicity expressions to help compute SHA-256 hashes. The <verbatim|iv>\n  expression is a constant function the returns the initial value to begin a\n  SHA-256 computation. The <verbatim|hashBlock> expression computes the\n  SHA-256 compression function on a single block of data. To compress\n  multiple blocks, multiple calls to the <verbatim|hashBlock> function can be\n  chained together.\n\n  This library has no dependencies and you can use the <verbatim|lib> library\n  value directly.\n\n  The <verbatim|Core/Simplicity/Programs/Sha256/Lib.hs> file provides an\n  unpacked module version of the library. However use of this module will\n  lose the subexpression sharing. Therefore this should only be used for\n  testing purposes.\n\n  <subsubsection|LibSecp256k1>\n\n  The <verbatim|Core/Simplicity/Programs/LibSecp256k1.hs> file provides a\n  library of Simplicity expressions that mimic the functional behaviour of\n  the the libsecp256k1 elliptic curve library<nbsp><cite|libsecp256k1>. This\n  includes Simplicity types for, and operations on secp256k1's underlying\n  finite field, elliptic curve point operations in affine and Jacobian\n  coordinates, and linear combinations of points.\n\n  This module also include the <verbatim|bip0340_check> and\n  <verbatim|bip0340_verify> expressions that implement Schnorr signatures as\n  specified in BIP-0340<nbsp><cite|bip-0340>.\n\n  The <verbatim|mkLib> function builds the library from the its dependency,\n  the SHA-256 library. The <verbatim|lib> value illustrates how to build the\n  library, but using the <verbatim|lib> value will not allow you to share the\n  dependency, so it should only be used for testing purposed.\n\n  The <verbatim|Core/Simplicity/Programs/LibSecp256k1/Lib.hs> file provides\n  an unpacked module version of the library. However use of this module will\n  lose the subexpression sharing. Therefore this should only be used for\n  testing purposes.\n\n  <subsubsection|CheckSigHash><label|ss:Haskell-CheckSigHash>\n\n  The <verbatim|Core/Simplicity/Programs/CheckSigHash.hs>, while not\n  technically a library, provides a <verbatim|checkSigHash> Simplicity\n  program that is similar to the <samp|CHECKSIG> operation of Bitcoin script\n  except with \\PUniversal signature hash modes\\Q (see\n  Section<nbsp><reference|ss:UniversalSignatureHashModes>). \\ The\n  <verbatim|sigHash> combinator uses <samp|disconnect> to pair the commitment\n  root of a given hash mode with its output and produces the message that\n  <verbatim|checkSigHash> checks its signature against.\n\n  <subsection|The Bit Machine>\n\n  The <verbatim|Core/Simplicity/BitMachine/> directory has modules related to\n  the Bit Machine and evaluation of Simplicity via the Bit Machine.\n\n  The <verbatim|Core/Simplicity/BitMachine/Ty.hs> file defines\n  <verbatim|bitSize>, <verbatim|padL>, and <verbatim|padR>, which define the\n  <math|bitSize>, <math|padR> and <math|padL> functions from\n  Section<nbsp><reference|ss:RepresentingValuesAsCellArrays>. They operate on\n  the <verbatim|Ty> type. The file also defines variants of these three\n  function that operate on the <verbatim|TyReflect> GADT instead.\n\n  The <verbatim|Core/Simplicity/BitMachine.hs> file (technically not in the\n  <verbatim|Core/Simplicity/BitMachine/> directory) defines the canonical\n  type of a <verbatim|Cell> to be a <verbatim|Maybe Bool>, with the\n  <verbatim|Nothing> value representing undefined cell values. The\n  <verbatim|encode> and <verbatim|decode> functions transform a value of a\n  Simplicity type to and from a list of <verbatim|Cell>s that represent the\n  value. The <verbatim|executeUsing> combinator captures a common pattern of\n  running a Simplicity program through an implementation of the Bit Machine\n  by encoding program inputs and decoding the results. Since there is more\n  than one way to compile and run Simplicity program on the Bit Machine (for\n  example, see naive translation versus TCO translation), this abstraction is\n  used is multiple places.\n\n  The <verbatim|MachineCode> type alias captures canonical forms of programs\n  for the Bit Machine, which is the explicit fixed point of the\n  <verbatim|MachineCodeF> functor. Usually programs are built in continuation\n  passing style (analogous to using difference lists to build lists), making\n  use of the <verbatim|MachineCodeK> type alias. There are smart-constructors\n  for each machine code that make single instruction <verbatim|MachineCodeK>\n  programs. Programs are composed sequentially using ordinary function\n  composition, <verbatim|(.)>. Deterministic choice between two programs is\n  provided by the <verbatim|(\\|\\|\\|)> operator. The <verbatim|nop> program is\n  an alias for the identity function.\n\n  The <verbatim|Core/Simplicity/BitMachine/Authentic.hs> file is an\n  implementation of the Bit Machine that follows the formal definition of the\n  Bit Machine and fully tracks undefined values. The <verbatim|Frame> type is\n  used for both read frames and write frames. The <verbatim|Active> type is\n  captures the pair of active read and write frames, and the <verbatim|State>\n  type captures the entire state of the Bit Machine. Lenses are used to\n  access the components of the State.\n\n  The <verbatim|runMachine> function interprets <verbatim|MachineCode> in\n  accordance with the semantics of the Bit Machine, and transforms an initial\n  state into a final state (possibly crashing during execution). It is meant\n  to be used, in conjunction with a Simplicity translator, with\n  <verbatim|executeUsing>. The <verbatim|instrumentMachine> function is a\n  variant of <verbatim|runMachine> that logs statistics about memory usage\n  during the execution. It is used as part of the testing for static\n  analysis.\n\n  <subsubsection|Translating Simplicity to the Bit Machine>\n\n  The <verbatim|Core/Simplicity/BitMachine/Translate.hs> file defines the\n  naive translation from Simplicity to the Bit Machine. The\n  <verbatim|Translation> type wraps the <verbatim|MachineCodeK> type with\n  phantom type parameters in order to make an instance suitable to be a\n  Simplicity algebra. The <verbatim|translate> function translates Simplicity\n  terms to <verbatim|MachineCode> via the <verbatim|Translation> algebra\n  (recall that a Simplicity term in tagless final form is a polymorphic value\n  that can become any Simplicity algebra). The\n  <verbatim|Simplicity/BitMachine/Translate/TCO.hs> file provides a similar\n  <verbatim|Translation> Simplicity algebra and <verbatim|translate>\n  functions, but this translating using tail composition optimization.\n\n  \\;\n\n  <subsubsection|Static Analysis>\n\n  The <verbatim|Core/Simplicity/BitMachine/StaticAnalysis.hs> file has\n  instances to perform static analysis for bounding the maximum number of\n  cells used by the Bit Machine when executing the naive translation of\n  Simplicity expressions. The <verbatim|ExtraCellsBnd> type wraps the data\n  needed for the static analysis with phantom type parameters in order to\n  make an instance suitable for a Simplicity Algebra. The <verbatim|cellsBnd>\n  function computes the bound on cell use from Simplicity terms via the\n  <verbatim|ExtraCellsBnd> Algebra. The <verbatim|Core/Simplicity/BitMachine/StaticAnalysis/TCO.hs>\n  file provides a similar static analysis that bounds the maximum number of\n  cells used by the Bit Machine when executing the TCO translation of\n  Simplicity expressions.\n\n  The <verbatim|Core/Simplicity/BitMachine/StaticAnalysis/Tests.hs> runs a\n  few of the example Simplicity expressions through the static analysis and\n  compares the result with the maximum cell count of executing the Bit\n  Machine on various inputs. In this file you can see an example of how\n  <verbatim|executeUsing (instrumentMachine . translate) program> is used.\n\n  <subsubsection|Fast Evaluation with FFI>\n\n  While Simplicity with assertions expressions can be evaluated directly with\n  the <verbatim|Kleisli> instance, evaluation of sophisticated expressions,\n  such as Schnorr signature verification, can be extremely time and memory\n  consuming. To address this the <verbatim|Core/Simplicity/FFI/Frame.hs> and\n  <verbatim|Core/Simplicity/FFI/Jets.hs> files create bindings via\n  <verbatim|cbits/frame.c> and <verbatim|cbits/jets.c> to the C\n  implementation of jets for Simplicity with assertion expressions. The\n  <verbatim|Core/Simplicity/CoreJets.hs> modules provides a\n  <verbatim|fastCoreEval> that replaces evaluation of subexpressions of\n  Simplicity with assertion expressions that match these jets with optimized\n  implementations.\n\n  <section|<verbatim|Simplicity-Indef> library>\n\n  To keep the Haskell library of Simplicity modular over different blockchain\n  applications we use the Glasgow Haskell Compiler's Backpack mechanism. The\n  next library, <verbatim|Simplicity-Indef>, is found in the\n  <verbatim|Haskell/Indef> directory. The\n  <verbatim|Indef/Simplicity/Primitive.hsig> file is a module signature that\n  defines the data types and functions that make up the interface that a\n  blockchain application needs to provide. The remained of the\n  <verbatim|Simplicity-Indef> library defines the aspects of Simplicity that\n  are generic over all different Blockchain application through this\n  <verbatim|Simplicity.Primitive> module signature. This includes the full\n  Simplicity language, including primitives and jets, the semantics of full\n  Simplicity, type inference for full Simplicity expressions, and generic\n  serialization and deserialization of Simplicity expressions.\n\n  Each different blockchain application needs to provide a module satisfying\n  the <verbatim|Simplicity.Primitive> signature. At the moment only the\n  Bitcoin blockchain application is provided (see\n  Section<nbsp><reference|ss:BitcoinPrimitives>).\n\n  <subsection|Primitive Signature>\n\n  The <verbatim|Indef/Simplicity/Primitive.hsig> signature provides an\n  interface to the different possible primitives provided by different\n  blockchain applications. This signature requires\n\n  <\\itemize>\n    <item><verbatim|Prim a b>, a GADT for primitives,\n\n    <item><verbatim|primPrefix> and <verbatim|primName> which are used to\n    generate unique names for the Merkle roots of primitive expressions,\n\n    <item><verbatim|getPrimBit>, <verbatim|putPrimBit>,\n    <verbatim|getPrimByte>, <verbatim|putPrimByte>, are provide for primitive\n    specific serialization and deserialization operations.\n\n    <item><verbatim|PrimEnv> and <verbatim|primSem>, which provides the type\n    of the context and the denotational semantics for evaluating primitive\n    expressions.\n  </itemize>\n\n  <subsection|Primitive Terms>\n\n  The <verbatim|Indef/Simplicity/Term.hs> module provides expressions for the\n  blockchain primitives and jet extensions, in addition to re-exporting the\n  <verbatim|Simplicity.Term.Core> module.\n\n  Discounted jets are characterized by their specification, which consists of\n  a Simplicity expression with assertions and primitives, but not witness nor\n  delegation. <with|color|red|Later a discounted cost will be added as a\n  parameter.> Be aware that universal quantifier in the <verbatim|jet>\n  argument means that subexpressions within this specification cannot be\n  shared outside of the specification itself.\n\n  All the Simplicity extensions are gathered together in the\n  <verbatim|Simplicity> class, whose associated values of type\n  <verbatim|Simplicity term =\\<gtr\\> term a b> are terms in the full\n  Simplicity language with delegation. The semantics of full Simplicity is\n  discussed in Section<nbsp><reference|ss:DenotationalSemanticsOfFullSimplicity>.\n\n  <subsection|<verbatim|JetType> class>\n\n  While the <verbatim|Jet> class allows any expression to be a jet, in\n  reality there we will have a specific set of known jets that we have\n  accelerated implements of. The <verbatim|Indef/Simplicity/JetType.hs>\n  defines the <verbatim|JetType> class whose instances are types which\n  represent sets of known discounted jets. The <verbatim|specification>\n  method define the specification of discounted jets and the\n  <verbatim|matcher> method decides if a given Simplicity expression is known\n  to be substitutable by a some discounted jet. The <verbatim|implementation>\n  gives an optional optimized implementation of the jet, which otherwise\n  defaults to that of the <verbatim|specification>. There are also\n  <verbatim|putJetBit> and <verbatim|getJetBit> used for Serialization (see\n  Section<nbsp><reference|ss:Haskell-Serialization>)\n\n  Because the set of discounted jets in use could vary over time, the\n  <verbatim|JetType> class allows for different types to represent different\n  sets of discounted jets. You can have a different <verbatim|JetType>\n  instance for each version of the set of discounted jets.\n\n  <subsection|Denotational Semantics of Full\n  Simplicity><label|ss:DenotationalSemanticsOfFullSimplicity>\n\n  The <verbatim|Indef/Simplicity/Term.hs> module provides an\n  <verbatim|Kleisli m> instance which provides semantics for full Simplicity\n  (excluding delegation), where <verbatim|m> is both a reader monad over\n  <verbatim|PrimEnv> and <verbatim|MonadFail>. Semantics for the full\n  Simplicity language with delegation, which depends on computing commitment\n  Merkle roots, is found in the <verbatim|Indef/Simplicity/Semantics.hs>\n  module.\n\n  The <verbatim|Delegator p a b> helper type bundles a commitment Merkle root\n  computation with the Simplicity semantics of <verbatim|disconnect>,\n  allowing commitment Merkle roots and semantics to be evaluated\n  concurrently. This allows us to create <verbatim|Delegate> and\n  <verbatim|Simplicity> instances using <verbatim|Delegator>.\n\n  The <verbatim|Semantics a b> is a of <verbatim|Delegator> for the Kleisli\n  semantics that support the Blockchain primitives, and thus is an instance\n  the <verbatim|Simplicity> class for expressions of full Simplicity with\n  delegation. The <verbatim|sem> function defines the semantics of full\n  Simplicity with delegation by returning a concrete function from\n  <verbatim|PrimEnv> and <verbatim|a> to <verbatim|Maybe b>.\n\n  The <verbatim|Indef/Simplicity/Semantics.hs> module also provides a\n  <verbatim|fastEval> function that uses a <verbatim|JetType>'s optimized\n  <verbatim|implementation> to evaluate subexpressions with known jets.\n\n  <subsection|Type Inference>\n\n  The file <verbatim|Indef/Simplicity/Inference.hs> defines a concrete term\n  data type for Simplicity expressions in open recursive style via the\n  <verbatim|TermF ty j w> functor. The <verbatim|ty> parameter allows for\n  these terms to be decorated with type annotations, though nothing in the\n  data type itself enforces that the annotations are well-typed. The\n  <verbatim|tyAnnotation> traversal provides access to the type annotations.\n  When type annotations are unused, this <verbatim|ty> parameter is set to\n  <verbatim|()>, as is the case for the <verbatim|UntypedTermF> functor\n  synonym.\n\n  The <verbatim|j> parameter determines the type of data held by\n  <verbatim|Jet> nodes. This is usually of the form <verbatim|SomeArrow arr>\n  for some type annotated data structure <verbatim|arr> that represents a\n  type for known jets. The <verbatim|jetData> traversal provides access to\n  the jet data.\n\n  The <verbatim|w> parameter determines the type of data held by\n  <verbatim|Witness> nodes. This is often <verbatim|UntypedValue>, but is\n  sometimes a vector or list of <verbatim|Bool>s, which may be used in\n  intermediate computations when deserializing Simplicity expressions. The\n  <verbatim|witnessData> combinator is a traversal indexed by type\n  annotations for accessing this <verbatim|Witness> data.\n\n  While the fixed point of this <verbatim|TermF ty j w> functor would yield a\n  type for untyped, full Simplicity terms, instead we usually use a list or\n  vector of <verbatim|TermF ty j w Integer> values to build a DAG structure,\n  where the <verbatim|Integer> values are references to other subexpressions\n  within a list or vector. This provides a structure with explicit sharing of\n  subexpressions. This structure is captured by the <verbatim|SimplicityDag>\n  type synonym.\n\n  The main functions of this module are the <verbatim|typeInference> and\n  <verbatim|typeCheck> functions. The normal progression here is to first use\n  the <verbatim|typeInference> function which discards the type annotations\n  of the input Simplicity DAG (if any) and performs first-order unification\n  to infer new, principle type annotations, with any remaining type variables\n  instantiated at the <verbatim|()> type. It also adds unification\n  constraints given the input and output types of the intended Simplicity\n  expression provided through the <verbatim|proxy a b> argument.\n\n  Next one would use <verbatim|traverse . witnessData> to use the inferred\n  type information to decode the witness data into an\n  <verbatim|UntypedValue>.\n\n  Lastly, one would uses the <verbatim|typeCheck> function to type check the\n  inferred type annotations and, if everything is successful, a proper\n  well-typed Simplicity expression of is returned. Note that the one calling\n  <verbatim|typeCheck> specifies the type of the resulting Simplicity\n  expression; it is not inferred from the <verbatim|SimplicityDag>. The\n  <verbatim|typeCheck> function should never fail after\n  <verbatim|typeInference> provided the same type constraints in its proxy\n  argument and the witness data has been decoded to an\n  <verbatim|UntypedValue> that matches the inferred witness type.\n\n  There are deserialization functions (see\n  <reference|ss:Haskell-Serialization>) that go through this progression of\n  type inference and type checking for you.\n\n  <subsection|Serialization><label|ss:Haskell-Serialization>\n\n  There are two main methods of serialization found in this Simplicity\n  library. The primary method is serialization via a difference list of\n  <verbatim|Bool>s and deserialization via a free monad representation of a\n  binary branching tree. A difference list, represented within the type\n  <verbatim|[Bool] -\\<gtr\\> [Bool]> should be familiar to most Haskell\n  programmers. The same technique is used in the <verbatim|shows> function\n  using the <verbatim|ShowS> type synonym and is used to avoid quadratic time\n  complexity in some cases of nested appending of lists. A <verbatim|DList>\n  type synonym is defined in <verbatim|Core/Simplicity/Serialization.hs>. Our\n  free monad representation of binary trees is perhaps less familiar. See\n  Section<nbsp><reference|ss:FreeMonadicDeserialization> for details.\n\n  An alternative serialization method is via the <verbatim|Get> and\n  <verbatim|PutM> monads from the <verbatim|cereal> package. These are used\n  for serializations to and from <verbatim|ByteStrings>. The alternative\n  method is deprecated and will probably be removed.\n\n  <subsubsection|Free Monadic Deserializaiton><label|ss:FreeMonadicDeserialization>\n\n  Our free monad representation of binary trees is perhaps less familiar. A\n  binary branching tree with leaves holding values of type <verbatim|a> can\n  be represented by the free monad over the functor\n  <math|X\\<mapsto\\>X<rsup|2>>, which in Haskell could be written as\n  <verbatim|Free ((-\\<gtr\\>) Bool) a> where <verbatim|Free> is from the\n  <verbatim|Control.Monad.Free> in the <verbatim|free> package.\n\n  \\;\n\n  <verbatim|type BinaryTree a = <verbatim|Free ((-\\<gtr\\>) Bool) a>>\n\n  \\;\n\n  \\ In the free monad representation the <verbatim|Pure> constructor creates\n  a leaf holding an <verbatim|a> value while the <verbatim|Free> constructor\n  builds a branch represented as a function <verbatim|Bool -\\<gtr\\>\n  BinaryTree a>, which is isomorphic to a pair of binary trees.\n\n  Given a binary tree (represented as a free monad) we can \\Pexecute\\Q this\n  monad to produce a value <verbatim|a> by providing an executable\n  interpretation of each branch. Our interpretation of a branch is to read a\n  bit from a stream of bits and recursively execute either the left branch or\n  the right branch depending on whether we encounter a 0 bit or a 1 bit. This\n  process repeats until we encounter a leaf, after which we halt, returning\n  the value of type <verbatim|a> held by that leaf. This interpretation\n  captures precisely what it means to use a prefix code to parse a stream of\n  bits. Given a stream of bits we follow branches in a binary tree, left or\n  right, in accordance to the bits that we encounter within the stream until\n  we encounter a leaf, in which case parsing is complete and we have our\n  result, plus a possible remainder of unparsed bits.\n\n  Where does the stream of bits come from? Well, if we were to interpret this\n  in the state monad, the state would hold a stream of bits. If we were to\n  interpret this the <verbatim|IO> monad, we could grab a stream bits from\n  <verbatim|stdin> or from a file handle. In general, we can interpret our\n  free monad in any monad that offers a callback to generate bits for us to\n  consume.\n\n  \\;\n\n  <\\verbatim>\n    runBinaryTree : Monad m =\\<gtr\\> m Bool -\\<gtr\\> BinaryTree a -\\<gtr\\> m\n    a\n\n    runBinaryTree next = foldFree (\\<less\\>$\\<gtr\\> next)\n  </verbatim>\n\n  \\;\n\n  This ability to interpret a free monad within any other monad is\n  essentially what it means to be a free monad in the first place.\n\n  This free monad approach to parsing can be extended. For example, suppose\n  when parsing we encounter a prefix that is not a code of any value. We can\n  extend our functor to given a variant to return failure in this case. Thus\n  we build a free monad over the functor <math|X\\<mapsto\\>1+X<rsup|2>>. In\n  Haskell we could use the type <verbatim|Free (Sum (Const ()) ((-\\<gtr\\>)\n  Bool))> for this monad or equivalently\n\n  \\;\n\n  <\\verbatim>\n    type BitDecoder a = Free (Sum (Const ()) ((-\\<gtr\\>) Bool)) a\n\n    \\;\n\n    runBitDecoder : Monad m =\\<gtr\\> m Void -\\<gtr\\> m Bool -\\<gtr\\>\n    BitDecoder a -\\<gtr\\> m a\n\n    runBitDecoder abort next = foldFree eta\n\n    \\ where\n\n    \\ \\ eta (Inl (Const ())) = vacuous abort\n\n    \\ \\ eta (Inr f) = f \\<less\\>$\\<gtr\\> next\n  </verbatim>\n\n  \\;\n\n  Our free monad interpreter now requires two callbacks. The <verbatim|next>\n  callback is as before; it generates bits to be parsed. The <verbatim|abort>\n  callback handles a failure case when the a sequence of bits do not\n  correspond to any coded value. This callback can throw an exception or call\n  <verbatim|fail>, or do whatever is appropriate in case of failure.\n\n  This implementation of free monads suffers from a similar quadratic\n  complexity issue that lists have. In some cases, nested calls to the free\n  monad's bind operation can have quadratic time complexity. To mitigate this\n  we choose a to use a different representation of free monads.\n\n  The above interpreters completely characterize their corresponding free\n  monads. Instead of using the <verbatim|BinaryTree a> type we can directly\n  use the type <verbatim|forall m. Monad m =\\<gtr\\> m Bool -\\<gtr\\> m a>.\n  Similarly we can directly use the type <verbatim|forall m. Monad m =\\<gtr\\>\n  m Void -\\<gtr\\> m Bool -\\<gtr\\> m a> in place of the <verbatim|BitParser a>\n  type <with|color|red|TODO: consider replacing <verbatim|m Void> with a\n  <verbatim|MonadFail> constraint instead>. This is known as the Van\n  Laarhoven free monad representation<nbsp><cite|oconnor2014> and it is what\n  we use in this library.\n\n  For example, <verbatim|getBitString> and <verbatim|getPositive> from the\n  <verbatim|Simplicity.Serialization> module are decoders a list of bits and\n  positive numbers respectively that use this Van Laarhoven representation of\n  binary trees. Similarly <verbatim|get256Bits> from\n  <verbatim|Simplicity.Digest> is a decoder for a 256-bit hash value.\n\n  In <verbatim|Core/Simplicity/Serialization.hs> there are several adapter\n  functions for executing these Van Laarhoven free monads within particular\n  monads.\n\n  <\\itemize-dot>\n    <item><verbatim|evalStream> evaluates a Van Laarhoven binary tree using a\n    list of bits and returns <verbatim|Nothing> if all the bits are consumed\n    before decoding is successful.\n\n    <item><verbatim|evalExactVector> evaluates a Van Laarhoven binary tree\n    using a vector of bits and will return <verbatim|Nothing> unless the\n    vector is exactly entirely consumed.\n\n    <item><verbatim|evalStreamWithError> evaluates a Van Laarhoven bit\n    decoder using a list of bits and returns an <verbatim|Error> if the\n    decoder aborts or the list runs out of bits.\n\n    <item><verbatim|getEvalBitStream> evaluates a Van Laarhoven bit decoder\n    within cereal's <verbatim|Get> monad while internally tracking partially\n    consumed bytes.\n  </itemize-dot>\n\n  <subsubsection|Serialization of Simplicity DAGs><label|ss:Haskell-DAG>\n\n  <with|font-series|bold|>The file <verbatim|Indef/Simplicity/Dag.hs>\n  provides a <verbatim|jetDag> that converts Simplicity expressions into a\n  topologically sorted DAG structure with explicit sharing that is suitable\n  for encoding. This conversion\n\n  <\\itemize-dot>\n    <item>finds and shares identical well-typed subexpressions,\n\n    <item>runs type inference to determine the principle type annotations\n    needed to optimal sharing and pruning of unused witness data,\n\n    <item>finds subexpressions that matches known jets and replaces them with\n    <verbatim|Jet> nodes.\n  </itemize-dot>\n\n  \\;\n\n  The file <verbatim|Indef/Simplicity/Serialization/BitString.hs> provides\n  <verbatim|getTermLengthCode> and <verbatim|putTermLengthCode> functions\n  that decode and encode a Simplicity expression. The\n  <verbatim|putTermLengthCode> function executes <verbatim|jetDag> to perform\n  sharing and substitution of jets, and the <verbatim|getTermLengthCode>\n  executes deserialization, type inference and type checking all together.\n  The module also provides, <verbatim|getDagNoWitness>,\n  <verbatim|getWitnessData> and <verbatim|putDag>, that are used by the\n  <verbatim|getTerm*> and <verbatim|putTerm*> functions to convert between\n  Simplicity DAGs and their serialized representation.\n\n  The file <verbatim|Indef/Simplicity/Serialization/ByteString.hs> provides\n  similar <verbatim|getDag> and <verbatim|putDag> functions for the\n  alternative <verbatim|ByteString> encoding described in\n  Appendix<nbsp><reference|app:AltSerialization>.\n\n  <subsection|Jet Substitution>\n\n  The <verbatim|Indef/Simplicity/Dag.hs> provides also provides a\n  <verbatim|jetSubst> function uses the same substitution mechanism in found\n  in Section <math|<reference|ss:Haskell-DAG>> to return a new Simplicity\n  expression that replaces found jets with explicit jets. This substitution\n  can change the commitment root of the overall expression and of\n  subexpressions. Because the commitment root is used in the semantics of\n  <verbatim|disconnect>, it is even possible for this substitution to change\n  the result of evaluation of expressions.\n\n  In order to support partial evaluation, the <verbatim|jetSubt> function\n  returns a <verbatim|WrappedSimplicity> expression. This result can be\n  unwrapped by the <verbatim|unwrap> function. The use of\n  <verbatim|WrappedSimplicity> lets us share much of the work of substitution\n  in case we want to evaluate the resulting expression with multiple\n  different interpretations. Without <verbatim|WrappedSimplicity> we would\n  end up needing to redo the entire substitution for each different\n  interpretation of the resulting expression.\n\n  <section|<verbatim|Simplicity-Bitcoin> Library><label|ss:BitcoinPrimitives>\n\n  To instantiate the <verbatim|Simplicity-Indef> library, we need to provide\n  a blockchain specific implementation of the <verbatim|Simplicity.Primitive>\n  signature. The <verbatim|Simplicity-Bitcoin> library provides primitives\n  used for Bitcoin applications. The <verbatim|Bitcoin/Simplicity/Bitcoin/Primitive.hs>\n  module implements the <verbatim|Simplicity.Primitive> signature by\n  providing the primitive expressions and their semantics for Simplicity's\n  Bitcoin application. The <verbatim|Prim a b> GADT enumerates the list of\n  primitive Simplicity expressions for Bitcoin. The <verbatim|PrimEnv>\n  provides the context that a Simplicity expression is evaluated within,\n  providing the signed transaction data, the index of the input being\n  considered for redemption, and the commitment Merkle root of the Simplicity\n  program itself. The <verbatim|primSem> function is an interpreter for these\n  primitive expressions for the Bitcoin.\n\n  The <verbatim|Bitcoin/Simplicity/Bitcoin/DataTypes.hs> module provides the\n  data structures that make up the signed transaction data for Bitcoin.\n\n  <section|<verbatim|Simplicity> Library>\n\n  The <verbatim|Simplicity> library assembles all of the previous libraries\n  together. The <verbatim|Simplicity-Indef> library is instantiated at all\n  available implementations of the <verbatim|Simplicity.Primitive> signature,\n  which at the moment is only the <verbatim|Simplicity.Bitcoin.Primitive>\n  module. This Bitcoin instance of the <verbatim|Simplicity-Indef> library\n  has its modules reexported under the <verbatim|Simplicity.Bitcoin> prefix.\n  Specifically the following modules are reexported:\n\n  <\\itemize-dot>\n    <item><verbatim|Simplicity.Term> as <verbatim|Simplicity.Bitcoin.Term>\n\n    <item><verbatim|Simplicity.Semantics> as\n    <verbatim|Simplicity.Bitcoin.Semantics>\n\n    <item><verbatim|Simplicity.Dag> as <verbatim|Simplicity.Bitcoin.Dag<samp|>>\n\n    <item><verbatim|Simplicity.Inference> as\n    <verbatim|Simplicity.Bitcoin.Inference>\n\n    <item><verbatim|Simplicity.Serialization.BitString> as\n    <verbatim|Simplicity.Bitcoin.Serialization.BitString>\n\n    <item><verbatim|Simplicity.Serialization.ByteString> as\n    <verbatim|Simplicity.Bitcoin.Serialization.ByteString>\n  </itemize-dot>\n\n  <subsection|CheckSigHashAll>\n\n  Some modules build on specific Simplicity blockchain applications. The\n  <verbatim|Simplicity/Bitcoin/Programs/CheckSigHashAll.hs> file provides a\n  library for a <verbatim|hashAll> signature hash mode for creating a Bitcoin\n  specific transaction digest and a <verbatim|checkSigHashAll> Simplicity\n  program that verifies Schnorr signature over that digest for a given public\n  key. The <verbatim|sigHashAll> function hashes the pair of the commitment\n  root of <verbatim|hashAll> with the output of <verbatim|hashAll> producing\n  the message that needs to be signed. \\ This signature is compatible with\n  using the <verbatim|hashAll> mode with the <verbatim|checkSigHash> program\n  from Section<nbsp><reference|ss:Haskell-CheckSigHash>.\n\n  The <verbatim|Simplicity/Bitcoin/Programs/CheckSigHashAll/Lib.hs> file\n  provides an unpacked module version of the library. However use of this\n  module will lose the subexpression sharing. Therefore this should only be\n  used for testing purposes.\n\n  The <verbatim|Simplicity/Elements/Programs/CheckSigHashAll.hs> file\n  provides similar functionality for the Elements blockchain application.\n\n  <subsection|Known Discounted Jets>\n\n  The <verbatim|Simplicity.Bitcoin.Jets> and\n  <verbatim|Simplicity.Elements.Jets> provide a canonical <verbatim|JetType>\n  of known jets. <with|color|red|Currently this only consists of\n  <verbatim|CoreJets>.> These modules also provide <verbatim|getTerm*> and\n  <verbatim|putTerm*> function that specifically encode and decode this set\n  of jets.\n\n  Both sets of jets draw upon the <verbatim|Simplicity.CoreJets> module which\n  provides \\Pcore\\Q jets that are jets that do not depend on any primitives.\n  \\ These \\Pcore\\Q jets include\n\n  <\\itemize>\n    <item>Jets for arithmetic, including 32-bit addition, subtraction and\n    multiplication\n\n    <item>Jets for hash functions, including the SHA-256 compression\n    function.\n  </itemize>\n\n  These modules also reexport specialized instances of <verbatim|jetSubst>\n  and <verbatim|fastEval> for their specific <verbatim|JetType>s.\n\n  <section|Simplicity <verbatim|testsuite>>\n\n  The <verbatim|Tests> directory has a collection of tests for a Simplicity\n  <verbatim|testsuite>. The <verbatim|Tests/Tests.hs> file imports the\n  various test modules to build a testing executable to run them all.\n\n  The <verbatim|Tests/Simplicity/Programs/Tests.hs> has some QuickCheck\n  properties that provide randomized testing for some of the Simplicity\n  expressions developed.\n\n  The <verbatim|Tests/Simplicity/BitMachine/Tests.hs> runs a few of the\n  Simplicity expressions through the Bit Machine implementation to test that\n  the value computed by the Bit Machine matches that direct interpretation of\n  the same Simplicity expressions. In this file you can see an example of how\n  <verbatim|executeUsing (runMachine . translate) program> is used.<chapter|C\n  Library Guide>\n\n  <appendix|Elements Application><label|app:ElementsTransactions>\n\n  The Elements application of Simplicity is based on the Bitcoin application\n  described in Section<nbsp><reference|ss:BitcoinTransactions>. The signed\n  transaction data for Elements is similar to Bitcoin's but with added\n  confidential amounts and assets, pegins, and asset issuances. Below we\n  define the record type <math|ELEnv> defining the environment in which\n  Simplicity expressions are evaluated within for the Elements application.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|Lock>|<cell|\\<assign\\>>|<cell|<2><rsup|32>>>|<row|<cell|Outpoint>|<cell|\\<assign\\>>|<cell|<2><rsup|256>\\<times\\><2><rsup|32>>>|<row|<cell|Confidential<around*|(|X|)>>|<cell|\\<assign\\>\n    >|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|pt\\<of\\>Point>>|<row|<cell|prf\\<of\\>\n    X>>>>>|}>>>|<row|<cell|ExplicitAsset>|<cell|\\<assign\\>>|<cell|<2><rsup|256>>>|<row|<cell|Asset>|<cell|\\<assign\\>>|<cell|Point+ExplicitAsset>>|<row|<cell|AssetWith<around*|(|X|)>>|<cell|\\<assign\\>>|<cell|Confidential<around*|(|X|)>+ExplicitAsset>>|<row|<cell|ExplicitAmount>|<cell|\\<assign\\>>|<cell|<2><rsup|64>>>|<row|<cell|Amount>|<cell|\\<assign\\>>|<cell|Point+\n    ExplicitAmount>>|<row|<cell|AmountWith<around*|(|X|)>>|<cell|\\<assign\\>>|<cell|Confidential\n    <around*|(|X|)>+ ExplicitAmount>>|<row|<cell|ExplicitNonce>|<cell|\\<assign\\>>|<cell|<2><rsup|256>>>|<row|<cell|Nonce>|<cell|\\<assign\\>>|<cell|Point+\n    ExplicitNonce>>|<row|<cell|RangeProof>|<cell|\\<assign\\>>|<cell|<around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>>|<row|<cell|SurjectionProof>|<cell|\\<assign\\>>|<cell|<around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>>|<row|<cell|NewIssuance>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|contractHash\\<of\\><2><rsup|256>>>|<row|<cell|amount\\<of\\>\n    AmountWith<around*|(|RangeProof|)>>>|<row|<cell|tokenAmount:\n    AmountWith<around*|(|RangeRpoof|)>>>>>>|}>>>|<row|<cell|Reissuance>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|blindingNonce\\<of\\>ExplicitNonce>>|<row|<cell|entropy\\<of\\><2><rsup|256>>>|<row|<cell|amount\\<of\\>\n    ConfidentialAmount<around*|(|RangeProof|)>>>>>>|}>>>|<row|<cell|Issuance>|<cell|\\<assign\\>>|<cell|NewIssuance+Reissuance>>|<row|<cell|ElementsSigOutput>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|asset\\<of\\>AssetWith<around*|(|SurjectionProof|)>>>|<row|<cell|amount\\<of\\>AmountWith<around*|(|RangeProof|)>>>|<row|<cell|scriptPubKey\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>>|<row|<cell|nonce\\<of\\><maybe><around*|(|Nonce|)>>>>>>|}>>>|<row|<cell|ElementsUTXO>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|asset\\<of\\>Asset>>|<row|<cell|amount\\<of\\>Amount>>|<row|<cell|scriptPubKey\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>>>>>|}>>>|<row|<cell|ElementsSigInput>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|peginChain\\<of\\><maybe><around*|(|<2><rsup|256>|)>>>|<row|<cell|prevOutpoint\\<of\\>Outpoint>>|<row|<cell|txo\\<of\\>ElementsUTXO\n    <with|color|red|scriptPubKey is claim_script when\n    isPegin>>>|<row|<cell|sequence\\<of\\><2><rsup|32>>>|<row|<cell|issuance:<maybe><around*|(|Issuance|)>>>|<row|<cell|annex\\<of\\><maybe><around*|(|<around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>|)>\n    <text|<around*|(|excludes the <math|<math-tt|50><rsub|<2><rsup|8>>>\n    prefix|)>>>>|<row|<cell|scriptSig\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>>>>>|}>>>|<row|<cell|ElementsSigTx>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|version\\<of\\><2><rsup|32>>>|<row|<cell|inputs\\<of\\>ElementsSigInput<rsup|+>>>|<row|<cell|outputs\\<of\\>ElementsSigOutput<rsup|+>>>|<row|<cell|lockTime\\<of\\>Lock>>>>>|}>>>|<row|<cell|ELEnv>|<cell|\\<assign\\>>|<cell|<around*|{|<tabular|<tformat|<table|<row|<cell|tx\\<of\\>ElementsSigTx>>|<row|<cell|ix\\<of\\><2><rsup|32>>>|<row|<cell|tapEnv\\<of\\>TapEnv>>|<row|<cell|genesisBlockHash\\<of\\><2><rsup|256>>>|<row|<cell|scriptCMR\\<of\\><2><rsup|256>>>>>>|}>>>>>\n  </eqnarray*>\n\n  \\;\n\n  The Elements protocol imposes limits and other constraints similar to\n  Bitcoin's for transactions to be valid. We will assume that for all\n  transactions the length of the <math|inputs> and <math|outputs> arrays are\n  less than or equal to <math|2<rsup|25>>, and the the length of the\n  scriptPubKeys lengths are also less than or equal to <math|2<rsup|25>>.\n  Also we will assume that for every <math|e\\<of\\>ELEnv> that\n  <math|<around*|\\<lceil\\>|e<around*|[|ix|]>|\\<rceil\\>>\\<less\\><around*|\\||e<around*|[|tx|]><around*|[|inputs|]>|\\|>>\n  so that \\Pcurrent\\Q index being validated is, in fact, an input of the\n  transaction.\n\n  <assign|EL|<math|EL>>The monad we use for the Elements application provides\n  an environment effect (also known as a reader effect) that allows\n  read-access to the <math|ELEnv> value defining the Simplicity program's\n  evaluation context. We call this monad <value|EL>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<EL>A>|<cell|\\<assign\\>>|<cell|ELEnv\\<rightarrow\\><maybe>A>>|<row|<cell|<EL>f<around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\><maybe>f<around*|(|a<around*|(|e|)>|)>>>>>\n  </eqnarray*>\n\n  \\;\n\n  <EL> is a commutative, idempotent monad with zero:\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|\\<eta\\><rsup|<EL>><rsub|A><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><rsub|A><around*|(|a|)>>>|<row|<cell|\\<mu\\><rsup|<EL>><rsub|A><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<mu\\><rsup|<maybe>><rsub|A><around*|(|<maybe><around*|(|\\<lambda\\>f\\<point\\>f<around*|(|e|)>|)><around*|(|a<around*|(|e|)>|)>|)>>>|<row|<cell|\\<emptyset\\><rsup|<EL>><rsub|A>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<emptyset\\><rsup|<maybe>><rsub|A>>>>>\n  </eqnarray*>\n\n  \\;\n\n  We define several new primitive expressions for reading data from a\n  <math|ELEnv> value. The language that uses this extension is called\n  <dfn|Simplicity with Elements>.\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|version>\\<of\\><value|1>\\<vdash\\><2><rsup|32>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|lockTime>\\<of\\><value|1>\\<vdash\\>Lock>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputPegin>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputPrevOutpoint>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Outpoint|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputAsset>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Asset|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputAmount>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Amount|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputScriptHash>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputSequence>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|32>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputAnnexHash>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|inputScriptSigHash>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|reissuanceBlinding>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|ExplicitNonce|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|newIssuanceContract>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|reissuanceEntropy>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|issuanceAssetAmount>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|Amount|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|issuanceTokenAmount>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|TokenAmount|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|issuanceAssetProof>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|issuanceTokenProof>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|currentIndex>\\<of\\><value|1>\\<vdash\\><2><rsup|32>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputAsset>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Asset|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputAmount>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|Amount|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputNonce>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|Nonce|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputScriptHash>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputNullDatum>\\<of\\><2><rsup|32>\\<times\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|2>\\<times\\><2><rsup|256>+<around*|(|<2>+<2><rsup|4>|)>|)>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputSurjectionProof>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|outputRangeProof>\\<of\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|tapleafVersion>\\<of\\><value|1>\\<vdash\\><2><rsup|8>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|tapbranch>\\<of\\><2><rsup|8>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|internalKey>\\<of\\><value|1>\\<vdash\\>PubKey>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|genesisBlockHash>\\<of\\><value|1>\\<vdash\\><2><rsup|256>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|scriptCMR>\\<of\\><value|1>\\<vdash\\><2><rsup|256>>>>>>>\n  </with>\n\n  \\;\n\n  <\\with|par-mode|center>\n    <tabular*|<tformat|<cwith|1|1|1|1|cell-tborder|1pt>|<table|<row|<cell|<math|<samp|transactionId>\\<of\\><value|1>\\<vdash\\><2><rsup|256>>>>>>>\n  </with>\n\n  <section|Denotational Semantics><label|ss:ELDenotationalSemantics>\n\n  We extend the formal semantics of these new expressions as follows.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<around*|\\<llbracket\\>|<math-ss|version>|\\<rrbracket\\>><rsup|<EL>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tx|]><around*|[|version|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|lockTime>|\\<rrbracket\\>><rsup|<EL>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tx|]><around*|[|lockTime|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputPegin>>|\\<rrbracket\\>><rsup|<EL>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|peginChain|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputPrevOutpoint>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|prevOutpoint|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputAsset>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|txo|]><around*|[|asset|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputAmount>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|txo|]><around*|[|amount|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputScriptHash>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>SHA256<around*|(|l<around*|[|txo|]><around*|[|scriptPubKey|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputSequence>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>l<around*|[|sequence|]>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputAnnexHash>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\><maybe><around*|(|SHA256|)><around*|(|l<around*|[|annex|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|inputScriptSigHash>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>SHA256<around*|(|l<around*|[|scriptSig|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|reissuanceBlinding>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\><maybe><around*|(|blindingNonce|)><around*|(|reissuance<around*|(|l|)>|)>|)><next-line><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|newIssuanceContract>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\><maybe><around*|(|contractHash|)><around*|(|newIssuance<around*|(|l|)>|)>|)><next-line><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|reissuanceEntropy>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\><maybe><around*|(|entropy|)><around*|(|reissuance<around*|(|l|)>|)>|)><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|issuanceAssetAmount>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|<maybe><around*|(|ClearAmout|)>\\<circ\\>issuanceAssetAmt|)><next-line><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|issuanceTokenAmount>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|<maybe><around*|(|ClearAmout|)>\\<circ\\>issuanceTokenAmt|)><next-line><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|issuanceAssetProof>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|OptionPrfHash\\<circ\\>issuanceAssetAmt|)><next-line><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|<samp|issuanceTokenProof>>>|\\<rrbracket\\>><rsup|<EL>><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|OptionPrfHash\\<circ\\>issuanceTokenAmt|)><next-line><around*|(|e<around*|[|tx|]><around*|[|inputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|currentIndex>>|\\<rrbracket\\>><rsup|<EL>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|ix|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|outputAsset>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>ClearAsset<around*|(|l<around*|[|asset|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|outputAmount>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>ClearAmount<around*|(|l<around*|[|amount|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|outputScriptHash>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>SHA256<around*|(|l<around*|[|scriptPubKey|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|outputNullDatum>>|\\<rrbracket\\>><rsup|EL><around*|\\<langle\\>|i,j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>nullDatum<around*|\\<langle\\>|l<around*|[|scriptPubKey|]>,<around*|\\<lceil\\>|j|\\<rceil\\>>|\\<rangle\\>>|)>|)><next-line><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<samp|outputSurjectionProof>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>PrfHash<around*|(|l<around*|[|asset|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<samp|outputRangeProof>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>l\\<point\\>PrfHash<around*|(|l<around*|[|amount|]>|)>|)><around*|(|e<around*|[|tx|]><around*|[|outputs|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|totalFee>>|\\<rrbracket\\>><rsup|<EL>><around*|(|a|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|fee<around*|\\<langle\\>|e<around*|[|tx|]><around*|[|outputs|]>,a|\\<rangle\\>>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|tapleafVersion>>|\\<rrbracket\\>><rsup|EL><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tapEnv|]><around*|[|leafVersion|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|tapbranch>>|\\<rrbracket\\>><rsup|EL><around*|(|i|)>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tapEnv|]><around*|[|branch|]><around*|\\<lceil\\>|i|\\<rceil\\>>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|internalKey>>|\\<rrbracket\\>><rsup|EL><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|tapEnv|]><around*|[|internalKey|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|genesisBlockHash>>|\\<rrbracket\\>><rsup|<EL>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|genesisBlockHash|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|<math|scriptCMR>>|\\<rrbracket\\>><rsup|<EL>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|e<around*|[|scriptCMR|]>|)>>>|<row|<cell|<around*|\\<llbracket\\>|<math-ss|transactionId>|\\<rrbracket\\>><rsup|<EL>><around*|\\<langle\\>||\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<lambda\\>e\\<of\\>ELEnv\\<point\\>\\<eta\\><rsup|<maybe>><around*|(|txId<around*|(|e<around*|[|tx|]>|)>|)>>>>>\n  </eqnarray*>\n\n  where\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|PrfHash<around*|(|<injl|<around*|(|a|)>>|)>>|<cell|\\<assign\\>>|<cell|SHA256<around*|(|a<around*|[|prf|]>|)>>>|<row|<cell|PrfHash<around*|(|<injr|<around*|(|b|)>>|)>>|<cell|\\<assign\\>>|SHA256<around*|(|\\<epsilon\\>|)>>|<row|<cell|OptionPrfHash<around*|(|\\<eta\\><rsup|S><around*|(|a|)>|)>>|<cell|\\<assign\\>>|<cell|PrfHash<around*|(|a|)>>>|<row|<cell|OptionPrfHash<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|SHA256<around*|(|\\<epsilon\\>|)>>>|<row|<cell|ClearAsset<around*|(|<injl|<around*|(|a|)>>|)>>|<cell|\\<assign\\>>|<cell|<injl|<around*|(|a<around*|[|pt|]>|)>>>>|<row|<cell|ClearAsset<around*|(|<injr|<around*|(|b|)>>|)>>|<cell|\\<assign\\>>|<cell|<injr|<around*|(|b|)>>>>|<row|<cell|ClearAmount<around*|(|<injl|<around*|(|a|)>>|)>>|<cell|\\<assign\\>>|<cell|<injl|<around*|(|a<around*|[|pt|]>|)>>>>|<row|<cell|ClearAmount<around*|(|<injr|<around*|(|b|)>>|)>>|<cell|\\<assign\\>>|<cell|<injr|<around*|(|b|)>>>>|<row|<cell|isNewIssuance<around*|(|\\<eta\\><rsup|S><around*|(|<injl|<around*|(|l|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|S><around*|(|l|)>>>|<row|<cell|isNewIssuance<around*|(|\\<eta\\><rsup|S><around*|(|<injr|<around*|(|r|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>>>>|<row|<cell|isNewIssuance<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>>>>|<row|<cell|isReissuance<around*|(|\\<eta\\><rsup|S><around*|(|<injl|<around*|(|l|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>>>>|<row|<cell|isReissuance<around*|(|\\<eta\\><rsup|S><around*|(|<injr|<around*|(|r|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|S><around*|(|r|)>>>|<row|<cell|isReissuance<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>>>>|<row|<cell|newIssuance<around*|(|l|)>>|<cell|\\<assign\\>>|<cell|isNewIssuance<around*|(|l<around*|[|issuance|]>|)>>>|<row|<cell|reissuance<around*|(|l|)>>|<cell|\\<assign\\>>|<cell|isReissuance<around*|(|l<around*|[|issuance|]>|)>>>|<row|<cell|getIssuanceAssetAmt<around*|(|<injl|<around*|(|l|)>>|)>>|<cell|\\<assign\\>>|<cell|l<around*|[|amount|]>>>|<row|<cell|getIssuanceAssetAmt<around*|(|<injr|<around*|(|r|)>>|)>>|<cell|\\<assign\\>>|<cell|r<around*|[|amount|]>>>|<row|<cell|getIssuanceTokenAmt<around*|(|<injl|<around*|(|l|)>>|)>>|<cell|\\<assign\\>>|<cell|l<around*|[|tokenAmount|]>>>|<row|<cell|getIssuanceTokenAmt<around*|(|<injr|<around*|(|r|)>>|)>>|<cell|\\<assign\\>>|<cell|<injr|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|64>>>>|<row|<cell|issuanceAssetAmt<around*|(|l|)>>|<cell|\\<assign\\>>|<cell|<maybe><around*|(|getIssuanceAssetAmt|)><around*|(|l<around*|[|issuance|]>|)>>>|<row|<cell|issuanceTokenAmt<around*|(|l|)>>|<cell|\\<assign\\>>|<cell|<maybe><around*|(|getIssuanceTokenAmt|)><around*|(|l<around*|[|issuance|]>|)>>>|<row|<cell|fee<around*|\\<langle\\>|\\<epsilon\\>,a|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|64>>>|<row|<cell|fee<around*|\\<langle\\>|o\\<blacktriangleleft\\>l,a|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|fee<around*|\\<langle\\>|l,a|\\<rangle\\>><op|<around*|\\<lfloor\\>|+|\\<rfloor\\>><rsub|64>>\n    v<htab|5mm>when o<around*|[|asset|]>=<injr|<around*|(|a|)>><next-line><htab|5mm>and\n    o<around*|[|value|]>=<injr|<around*|(|v|)>><next-line><htab|5mm>and\n    o<around*|[|scriptPubKey|]>=\\<epsilon\\>>>|<row|<cell|fee<around*|\\<langle\\>|o\\<blacktriangleleft\\>l,a|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|fee<around*|\\<langle\\>|l,a|\\<rangle\\>><htab|5mm>when\n    o<around*|[|asset|]>\\<neq\\><injr|<around*|(|a|)>><next-line><htab|5mm>or\n    \\<forall\\>v\\<point\\>o<around*|[|value|]>\\<neq\\><injr|<around*|(|v|)>><next-line><htab|5mm>or\n    o<around*|[|scriptPubKey|]>\\<neq\\>\\<epsilon\\>>>|<row|<cell|encAsset<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|00>|]>><rsub|<2><rsup|8>>>>|<row|<cell|encAsset<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injr|<around*|(|a|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|01>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|a|)>>>|<row|<cell|encAsset<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injl|<around*|\\<langle\\>|<math-tt|0><rsub|<2>>,x|\\<rangle\\>>>|)>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|0a>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|x<around*|[|pt|]>|)>>>|<row|<cell|encAsset<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injl|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,x|\\<rangle\\>>>|)>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|0b>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|x<around*|[|pt|]>|)>>>|<row|<cell|encAmt<around*|(|<injr|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|64>>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|00>|]>><rsub|<2><rsup|8>>>>|<row|<cell|encAmt<around*|(|<injr|<around*|(|v|)>>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|01>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|64><around*|(|v|)><htab|5mm>when\n    v\\<neq\\><around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|64>>>|<row|<cell|encAmt<around*|(|<injl|<around*|\\<langle\\>|<math-tt|0><rsub|<2>>,x|\\<rangle\\>>>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|08>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|x<around*|[|pt|]>|)>>>|<row|<cell|encAmt<around*|(|<injl|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,x|\\<rangle\\>>>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|09>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|x<around*|[|pt|]>|)>>>|<row|<cell|encNonce<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|00>|]>><rsub|<2><rsup|8>>>>|<row|<cell|encNonce<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injr|<around*|(|a|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|01>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|a|)>>>|<row|<cell|encNonce<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injl|<around*|\\<langle\\>|<math-tt|0><rsub|<2>>,x|\\<rangle\\>>>|)>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|02>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|x<around*|[|pt|]>|)>>>|<row|<cell|encNonce<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injl|<around*|\\<langle\\>|<math-tt|1><rsub|<2>>,x|\\<rangle\\>>>|)>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|03>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsub|256><around*|(|x<around*|[|pt|]>|)>>>|<row|<cell|encProof<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|BE<rsub|256><around*|(|SHA256<around*|(|\\<epsilon\\>|)>|)>>>|<row|<cell|encProof<around*|(|\\<eta\\><rsup|<maybe>><around*|(|h|)>|)>>|<cell|\\<assign\\>>|<cell|BE<rsub|256><around*|(|h|)>>>|<row|<cell|encIssuance<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>|<cell|\\<assign\\>>|<cell|<verbatim|<around*|[|<math-tt|00>|]>><rsub|<2><rsup|8>>\\<cdummy\\><verbatim|<around*|[|<math-tt|00>|]>><rsub|<2><rsup|8>>>>|<row|<cell|encIssuance<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injl|<around*|(|x|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|encAmt<around*|(|x<around*|[|amount|]>|)>\\<cdummy\\><next-line>encAmt<around*|(|x<around*|[|tokenAmount|]>|)>\\<cdummy\\><next-line>BE<rsub|256><around*|(|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|256>|)>\\<cdummy\\><next-line>BE<rsub|256><around*|(|x<around*|[|contractHash|]>|)>\\<cdummy\\><next-line>encProof<around*|(|AmountPrfHash<around*|(|x<around*|[|amount|]>|)>|)>\\<cdummy\\><next-line>encProof<around*|(|AmountPrfHash<around*|(|x<around*|[|tokenAmount|]>|)>|)>>>|<row|<cell|encIssuance<around*|(|\\<eta\\><rsup|<maybe>><around*|(|<injr|<around*|(|x|)>>|)>|)>>|<cell|\\<assign\\>>|<cell|encAmt<around*|(|x<around*|[|amount|]>|)>\\<cdummy\\><next-line><verbatim|<around*|[|<math-tt|00>|]>><rsub|<2><rsup|8>>\\<cdummy\\><next-line>BE<rsub|256><around*|(|x<around*|[|blindingNonce|]>|)>\\<cdummy\\><next-line>BE<rsub|256><around*|(|x<around*|[|entropy|]>|)>\\<cdummy\\><next-line>encProof<around*|(|AmountPrfHash<around*|(|x<around*|[|amount|]>|)>|)>\\<cdummy\\><next-line>encProof<around*|(|\\<emptyset\\><rsup|<maybe>>|)>>>>>\n  </eqnarray*>\n\n  where <math|nullDatum> is defined in the next section and where\n  <math|txId\\<of\\>ElementsSigTx\\<rightarrow\\><2><rsup|256>> follows Element's\n  definition of the transaction ID.\n\n  <subsection|Null Data>\n\n  An output's scriptPubKey is call a <verbatim|TX_NULL_DATA> script if it\n  consists of an <verbatim|OP_RETURN> opcode\n  (<math|<around*|\\<lceil\\>|<math-tt|6a><rsub|<2><rsup|8>>|\\<rceil\\>>>)\n  followed by \\P<verbatim|PushOnly>\\Q, operations, which are operations whose\n  opcode is <verbatim|OP_16> (96) or less (including <verbatim|OP_RESERVED>\n  (80)).\n\n  In Elements, pegouts have an instance of a <verbatim|TX_NULL_DATA>\n  scriptPubKey. For that reason we offer primitives for detecting and parsing\n  <verbatim|TX_NULL_DATA> scriptPubKeys. Below we define the function\n\n  <\\equation*>\n    nullData\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>\\<rightarrow\\><maybe><around*|(|<around*|(|<2><rsup|2>\\<times\\><2><rsup|256>+<around*|(|<2>+<2><rsup|4>|)>|)><rsup|*\\<ast\\>>|)>\n  </equation*>\n\n  which,\n\n  <\\enumerate-numeric>\n    <item>decides if a script is ``<verbatim|PushOnly>'', and\n\n    <item>if it is push only, returns a list of parsed opcodes in which the\n    pushed data is hashed.\n  </enumerate-numeric>\n\n  We also define\n\n  <\\equation*>\n    nullData\\<of\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>\\<times\\>\\<bbb-N\\>\\<rightarrow\\><maybe><around*|(|<maybe><around*|(|<2><rsup|2>\\<times\\><2><rsup|256>+<around*|(|<2>+<2><rsup|4>|)>|)><rsup|>|)>\n  </equation*>\n\n  which decides if a script is <verbatim|TX_NULL_DATA> and returns the parsed\n  element at the given index for the parsed data, if length of the parsed\n  script is long enough. This is used to define the semantics of\n  <samp|outputNullDatum> above.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|nullData<around*|(|\\<epsilon\\><rsub|<2><rsup|8>>|)>>|<cell|\\<assign\\>>|<cell|\\<eta\\><rsup|<maybe>><around*|(|\\<epsilon\\><rsub|<2><rsup|2>\\<times\\><2><rsup|256>+<around*|(|<2>+<2><rsup|4>|)>>|)>>>|<row|<cell|nullData<around*|(|n\\<blacktriangleleft\\>d\\<cdummy\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>r.<injl|<around*|\\<langle\\>|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|2>,SHA256<around*|(|d|)>|\\<rangle\\>>>\\<blacktriangleleft\\>r|)><around*|(|nullData<around*|(|l|)>|)>|)><next-line><htab|5mm>when\n    <around*|\\||d|\\|>=<around*|\\<lceil\\>|n|\\<rceil\\>><rsub|8>\\<less\\>76>>|<row|<cell|nullData<around*|(|n\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm>when\n    <around*|\\||l|\\|>\\<less\\><around*|\\<lceil\\>|n|\\<rceil\\>><rsub|8>\\<less\\>76>>|<row|<cell|nullData<around*|(|<math|<around*|\\<lfloor\\>|76|\\<rfloor\\>><rsub|8>>\\<blacktriangleleft\\>n\\<blacktriangleleft\\>d\\<cdummy\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>r.<injl|<around*|\\<langle\\>|<around*|\\<lfloor\\>|1|\\<rfloor\\>><rsub|2>,SHA256<around*|(|d|)>|\\<rangle\\>>>\\<blacktriangleleft\\>r|)><around*|(|nullData<around*|(|l|)>|)>|)><next-line><htab|5mm>when\n    <around*|\\||d|\\|>=<around*|\\<lceil\\>|n|\\<rceil\\>><rsub|8>>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|76|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>n\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm>when\n    <around*|\\||l|\\|>\\<less\\><around*|\\<lceil\\>|n|\\<rceil\\>><rsub|8>>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|76|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>\\<varepsilon\\>|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>>>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|77|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>n<rsub|1>\\<blacktriangleleft\\>n<rsub|0>\\<blacktriangleleft\\>d\\<cdummy\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>r.<injl|<around*|\\<langle\\>|<around*|\\<lfloor\\>|2|\\<rfloor\\>><rsub|2>,SHA256<around*|(|d|)>|\\<rangle\\>>>\\<blacktriangleleft\\>r|)><around*|(|nullData<around*|(|l|)>|)>|)><next-line><htab|5mm>when\n    <around*|\\||d|\\|>=<around*|\\<lceil\\>|<around*|\\<langle\\>|n<rsub|0>,n<rsub|1>|\\<rangle\\>>|\\<rceil\\>><rsub|16>>>|<row|<cell|nullData<math|<around*|(|<around*|\\<lfloor\\>|77|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>n<rsub|1>\\<blacktriangleleft\\>n<rsub|0>\\<blacktriangleleft\\>l|)>>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm>when\n    <around*|\\||l|\\|>\\<less\\><around*|\\<lceil\\>|<around*|\\<langle\\>|n<rsub|0>,n<rsub|1>|\\<rangle\\>>|\\<rceil\\>><rsub|16>>>|<row|<cell|nullData<around*|(|<math|<around*|\\<lfloor\\>|77|\\<rfloor\\>><rsub|8>>\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm>when\n    <around*|\\||l|\\|>\\<less\\>2>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|78|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>n<rsub|3>\\<blacktriangleleft\\>n<rsub|2>\\<blacktriangleleft\\>n<rsub|1>\\<blacktriangleleft\\>n<rsub|0>\\<blacktriangleleft\\>d\\<cdummy\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>r.<injl|<around*|\\<langle\\>|<around*|\\<lfloor\\>|3|\\<rfloor\\>><rsub|2>,SHA256<around*|(|d|)>|\\<rangle\\>>>\\<blacktriangleleft\\>r|)><around*|(|nullData<around*|(|l|)>|)>|)><next-line><htab|5mm>when\n    <around*|\\||d|\\|>=<around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<langle\\>|n<rsub|0>,n<rsub|1>|\\<rangle\\>>,<around*|\\<langle\\>|n<rsub|2>,n<rsub|3>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|32>>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|78|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>n<rsub|3>\\<blacktriangleleft\\>n<rsub|2>\\<blacktriangleleft\\>n<rsub|1>\\<blacktriangleleft\\>n<rsub|0>\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm>when\n    <around*|\\||l|\\|>\\<less\\><around*|\\<lceil\\>|<around*|\\<langle\\>|<around*|\\<langle\\>|n<rsub|0>,n<rsub|1>|\\<rangle\\>>,<around*|\\<langle\\>|n<rsub|2>,n<rsub|3>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|32>>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|78|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm>when\n    <around*|\\||l|\\|>\\<less\\>4>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|79|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>r.<injr|<around*|(|<injl|<around*|(|<math-tt|0><rsub|<2>>|)>>|)>>\\<blacktriangleleft\\>r|)><around*|(|nullData<around*|(|l|)>|)>|)>>>|<row|<cell|nullData<around*|(|<around*|\\<lfloor\\>|80|\\<rfloor\\>><rsub|8>\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>r.<injr|<around*|(|<injl|<around*|(|<math-tt|1><rsub|<2>>|)>>|)>>\\<blacktriangleleft\\>r|)><around*|(|nullData<around*|(|l|)>|)>|)>>>|<row|<cell|nullData<around*|(|x\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<mu\\><rsup|<maybe>><around*|(|<maybe><around*|(|\\<lambda\\>r.<injr|<around*|(|<injr|<around*|\\<lfloor\\>|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|8>-81|\\<rfloor\\>><rsub|4>>|)>>\\<blacktriangleleft\\>r|)><around*|(|nullData<around*|(|l|)>|)>|)><next-line><htab|5mm>when\n    81\\<leq\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|8>\\<less\\>97>>|<row|<cell|nullData<around*|(|x\\<blacktriangleleft\\>l|)>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm>when\n    97\\<leq\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|8>>>|<row|<cell|nullDatum<around*|\\<langle\\>|<math-tt|6a><rsub|<2><rsup|8>>\\<blacktriangleleft\\>s,j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|<maybe><around*|(|\\<lambda\\>l.l<around*|[|j|]>|)><around*|(|nullData<around*|(|s|)>|)>>>|<row|<cell|nullDatum<around*|\\<langle\\>|x\\<blacktriangleleft\\>s,j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>><htab|5mm><text|when\n    <math|x\\<neq\\>><math|<math-tt|6a><rsub|<2><rsup|8>>>>>>|<row|<cell|nullDatum<around*|\\<langle\\>|\\<epsilon\\>,j|\\<rangle\\>>>|<cell|\\<assign\\>>|<cell|\\<emptyset\\><rsup|<maybe>>>>>>\n  </eqnarray*>\n\n  <subsection|Merkle Roots>\n\n  We extend the definition of the commitment Merkle root to support the new\n  expressions by hashing new unique byte strings.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|<cmr|<math-ss|version>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[76657273696f6e]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|lockTime>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6c6f636b54696d65]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputsHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[696e7075747348617368]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|outputsHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f75747075747348617368]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputPegin>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[696e707574506567696e]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputPrevOutpoint>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[696e707574507265764f7574706f696e74]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputAsset>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[696e7075744173736574]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputAmount>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[696e707574416d6f756e74]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputScriptHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[696e70757453637269707448617368]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputSequence>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[696e70757453657175656e6365]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputAnnexHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[696e707574416e6e657848617368]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|inputScriptSigHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[696e70757453637269707453696748617368]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|reissuanceBlinding>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[726569737375616e6365426c696e64696e67]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|newIssuanceContract>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6e657749737375616e6365436f6e7472616374]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|reissuanceEntropy>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[726569737375616e6365456e74726f7079]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|issuanceAssetAmount>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[69737375616e63654173736574416d6f756e74]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|issuanceTokenAmount>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[69737375616e6365546f6b656e416d6f756e74]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|issuanceAssetProof>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[69737375616e6365417373657450726f6f66]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|<samp|issuanceTokenProof>>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[69737375616e6365546f6b656e50726f6f66]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|currentIndex>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[63757272656e74496e646578]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|outputAsset>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f75747075744173736574]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|outputAmount>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f7574707574416d6f756e74]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|outputNonce>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f75747075744e6f6e6365]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|outputScriptHash>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f757470757453637269707448617368]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|outputNullDatum>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f75747075744e756c6c446174756d]>>><rsub|IV>>>|<row|<cell|<cmr|<samp|outputSurjectionProof>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f75747075745375726a656374696f6e50726f6f66]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<samp|outputRangeProof>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[6f757470757452616e676550726f6f66]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|fee>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|<math|ELprefix\\<cdummy\\><math-tt|[666565]>>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|tapleafVersion>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[7461706c65616656657273696f6e]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math-ss|<math|tapbranch>>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[7461706272616e6368]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|internalKey>>><math-ss|>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[696e7465726e616c4b6579]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|genesisBlockHash>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[67656e65736973426c6f636b48617368]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|scriptCMR>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[736372697074434d52]>><rsub|IV>>>|<row|<cell|<cmr|<math-ss|<math|transactionId>>>>|<cell|\\<assign\\>>|<cell|SHA256<rsup|ELprefix\\<cdummy\\><math-tt|[7472616e73616374696f6e4964]>><rsub|IV>>>>>\n  </eqnarray*>\n\n  \\;\n\n  where\n\n  <\\equation*>\n    ELprefix\\<assign\\><math-tt|[<SimplicityPrefix>1f5072696d69746976651f456c656d6e74731f]>\n  </equation*>\n\n  <appendix|Catelogue of Jets><label|app:cat-jets>\n\n  <assign|paragraph-title|<macro|name|<sectional-normal-bold|<the-paragraph><hspace|0.75em><arg|name>>>><with|color|red|UNDER\n  DEVELOPMENT AND SUBJECT TO CHANGE>\n\n  \\;\n\n  We develop a recommended set of jets and provide an interim encoding. \\ An\n  encoding ought to be based on how frequenly jets are used, however we do\n  not currently have good estimates of that. \\ As an interim measure we\n  develop a hierarchical encoding of jets by category.\n\n  The properties for jets listed below may not fully define the jet's\n  semantics. All jets will be formally specified by a Simplicity program that\n  implements their complete semantics. \\ Those formal specifications will be\n  found in the Coq library. Implementations MUST implement the COMPLETE\n  specifications as defined in the Coq library.\n\n  <section|<verbatim|110...: >Core Jets>\n\n  \\;\n\n  The following jets are specified in core Simplicity or Simplicity with\n  assertions, and therefore are applicable to any Simplicity application.\n\n  <subsection|<verbatim|1100...: >Jets for multi-bit logic>\n\n  It is recommended that jets be supported for multi-bit words up to\n  <math|<2><rsup|256>> in size.\n\n  <with|color|red|TODO: define <math|bit<rsub|n,m> :\n  <2><rsup|n>\\<rightarrow\\><2>>>\n\n  <subsubsection|verify>\n\n  \\;\n\n  <math|<rep|<text|<samp|'verify'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|verify>>\\<of\\><2>\\<vdash\\><1>>\n\n  <subsubsection|<samp|low>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'low'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|low>><rsub|2<rsup|n>>\\<of\\><1>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|low>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>=0>\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|low>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>=0>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|zero>>><rsub|2<rsup|n>> \\<assign\\>\n  <text|<samp|low>><rsub|2<rsup|n>>\\<of\\><1>\\<vdash\\><2><rsup|2<rsup|n>>>\n\n  <subsubsection|<samp|high>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'high'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|high>><rsub|2<rsup|n>>\\<of\\><1>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|high>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>=1>\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|high>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>=2<rsup|n>-1>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|one>><rsub|1>> \\<assign\\>\n  <text|<samp|high>><rsub|1>\\<of\\><1>\\<vdash\\><2>>\n\n  <subsubsection|<samp|complement>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'complement'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|complement>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>> for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|complement>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=1-<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>>\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|complement>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|2<rsup|n>>=2<rsup|n>-1-<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>>\n\n  <subsubsection|<samp|and>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'and'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|and>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|and>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>=1\\<wedge\\><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|y|)>|\\<rceil\\>><rsub|1>=1|)>>\n\n  <subsubsection|<samp|or>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'or'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|or>><rsub|2<rsup|n>> :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|or>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>=1\\<vee\\><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|y|)>|\\<rceil\\>><rsub|1>=1|)>>\n\n  <subsubsection|<samp|xor>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'xor'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|xor>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|xor>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>\\<equiv\\><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|y|)>|\\<rceil\\>><rsub|1><around*|(|mod\n  2|)>>\n\n  <subsubsection|<samp|maj>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'maj'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|maj>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|maj>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,<around*|\\<langle\\>|y,z|\\<rangle\\>>|\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|2\\<leq\\><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|y|)>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|z|)>|\\<rceil\\>><rsub|1>|)>>\n\n  <subsubsection|<samp|xor-xor>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'xor-xor'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|xor-xor>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|xor-xor>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,<around*|\\<langle\\>|y,z|\\<rangle\\>>|\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>\\<equiv\\><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|y|)>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|z|)>|\\<rceil\\>><rsub|1><around*|(|mod\n  2|)>>\n\n  <subsubsection|<samp|ch>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'ch'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|ch>><rsub|2<rsup|n>> :<2><rsup|2<rsup|n>>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|ch>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,<around*|\\<langle\\>|y,z|\\<rangle\\>>|\\<rangle\\>>|)>|\\<rceil\\>><rsub|1>=<around*|(|1-<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>|)>\\<cdot\\><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|y|)>|\\<rceil\\>><rsub|1>+<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>\\<cdot\\><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|z|)>|\\<rceil\\>><rsub|1>>\n\n  <subsubsection|<samp|some>>\n\n  (CAUTION: Not defined when <math|n=0>.)\n\n  <math|<rep|<text|<samp|'some'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|some>><rsub|2<rsup|n>> :<2><rsup|2<rsup|n>>\\<vdash\\><2>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|some>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\\<neq\\>0|)>>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|some>><rsub|1>> \\<assign\\> <text|<samp|iden>>\n  \\<of\\> <2>\\<vdash\\><2>>\n\n  <subsubsection|<samp|all>>\n\n  (CAUTION: Not defined when <math|n=0>.)\n\n  <math|<rep|<text|<samp|'all'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|all>><rsub|2<rsup|n>> :<2><rsup|2<rsup|n>>\\<vdash\\><2>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|all>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>=2<rsup|n>-1|)>>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|all>><rsub|1>> \\<assign\\> <text|<samp|iden>> \\<of\\>\n  <2>\\<vdash\\><2>>\n\n  <subsubsection|<samp|eq>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'eq'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|eq>><rsub|2<rsup|n>> :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<llbracket\\>|<text|<samp|eq>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>=\\<chi\\><around*|(|x=y|)>>\n\n  <subsubsection|<samp|full-left-shift>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'full-left-shift'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|m+1|>\\<cdummy\\><rep|n-m|>\n  </math>\n\n  <math|<text|<samp|full-left-shift>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|m>>\\<vdash\\><2><rsup|2<rsup|m>>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>m\\<less\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|\\<pi\\><rsub|1><around*|(|<around*|\\<llbracket\\>|<text|<samp|full-left-shift>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n  for <math|0\\<leq\\>i\\<less\\>2<rsup|m>>\n\n  <math|bit<rsub|2<rsup|n>,i><around*|(|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|full-left-shift>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|)>=bit<rsub|2<rsup|n>,2<rsup|m>+i><around*|(|x|)>>\n  for <math|0\\<leq\\>i\\<less\\>2<rsup|n>-2<rsup|m>>\n\n  <math|bit<rsub|2<rsup|n>,2<rsup|n>-2<rsup|m>+i><around*|(|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|full-left-shift>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|)>=bit<rsub|2<rsup|m>,i><around*|(|y|)>>\n  for <math|0\\<leq\\>i\\<less\\>2<rsup|m>>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|full-left-shift>><rsub|2<rsup|n>,2<rsup|n>> \\<assign\\>\n  <text|<samp|iden>> :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>>\n\n  <math|<text|<samp|full-left-shift>><rsub|2<rsup|n>,2<rsup|m>>\n  \\<assign\\><text|<samp|full-right-shift>><rsub|2<rsup|m>,2<rsup|n>>:<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|m>>\\<vdash\\><2><rsup|2<rsup|m>>\\<times\\><2><rsup|2<rsup|n>>>\n  when <math|0\\<leq\\>n\\<less\\>m>\n\n  <math|<text|<samp|full-right-shift>><rsub|2<rsup|n>,2<rsup|m>>\n  \\<assign\\><text|<samp|full-left-shift>><rsub|2<rsup|m>,2<rsup|n>>\n  :<2><rsup|2<rsup|m>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|m>>>\n  when <math|0\\<leq\\>n\\<less\\>m>\n\n  <subsubsection|<samp|full-right-shift>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'full-right-shift'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|m+1|>\\<cdummy\\><rep|n-m|>\n  </math>\n\n  <math|<text|<samp|full-right-shift>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|m>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|m>>>\n  for <math|0\\<leq\\>m\\<less\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|bit<rsub|2<rsup|n>,i><around*|(|\\<pi\\><rsub|1><around*|(|<around*|\\<llbracket\\>|<text|<samp|full-right-shift>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|)>=bit<rsub|k><around*|(|x|)>>\n  for <math|0\\<leq\\>i\\<less\\>2<rsup|m>>\n\n  <math|bit<rsub|2<rsup|n>,2<rsup|m>+i><around*|(|\\<pi\\><rsub|1><around*|(|<around*|\\<llbracket\\>|<text|<samp|full-right-shift>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|y|)>>\n  for <math|0\\<leq\\>i\\<less\\>2<rsup|n>-2<rsup|m>>\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|full-right-shift>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|)>=bit<rsub|2<rsup|n>,2<rsup|n>-2<rsup|m>+i><around*|(|y|)>>\n  for <math|0\\<leq\\>i\\<less\\>2<rsup|m>>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|full-right-shift>><rsub|2<rsup|n>,2<rsup|n>> \\<assign\\>\n  <text|<samp|iden>> :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>>\n\n  <math|<text|<samp|full-right-shift>><rsub|2<rsup|n>,2<rsup|m>>\n  \\<assign\\><text|<samp|full-left-shift>><rsub|2<rsup|m>,2<rsup|n>>\n  :<2><rsup|2<rsup|m>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|m>>>\n  when <math|0\\<leq\\>n\\<less\\>m>\n\n  <math|<text|<samp|full-left-shift>><rsub|2<rsup|n>,2<rsup|m>>\n  \\<assign\\><text|<samp|full-right-shift>><rsub|2<rsup|m>,2<rsup|n>>:<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|m>>\\<vdash\\><2><rsup|2<rsup|m>>\\<times\\><2><rsup|2<rsup|n>>>\n  when <math|0\\<leq\\>n\\<less\\>m>\n\n  <subsubsection|<samp|leftmost>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'leftmost'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdot\\><rep|m+1|>\\<cdummy\\><rep|n-m|>\n  </math>\n\n  <math|<text|<samp|leftmost>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|0\\<leq\\>m\\<less\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|leftmost>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|leftmost>><rsub|2<rsup|n>,2<rsup|n>> \\<assign\\>\n  <text|<samp|iden>> :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n\n  <subsubsection|<samp|rightmost>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'rightmost'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdot\\><rep|m+1|>\\<cdummy\\><rep|n-m|>\n  </math>\n\n  <math|<text|<samp|rightmost>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|0\\<leq\\>m\\<less\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|rightmost>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,2<rsup|n>-2<rsup|m>+i><around*|(|x|)>>\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|rightmost>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|2<rsup|m>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\n  <around*|(|mod 2<rsup|m>|)>>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|rightmost>><rsub|2<rsup|n>,2<rsup|n>> \\<assign\\>\n  <text|<samp|iden>> :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n\n  <subsubsection|<samp|left-pad-low>>\n\n  (Note: derived from <samp|full-left-shift>.)\n\n  <\\math>\n    <rep|<text|<samp|'left-pad-low'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\\<cdummy\\><rep|m-n|>\n  </math>\n\n  <math|<text|<samp|left-pad-low>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|0\\<leq\\>n\\<less\\>m>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|left-pad-low>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=0>\n  when <math|i\\<less\\>2<rsup|m>-2<rsup|n>>\n\n  <math|bit<rsub|2<rsup|m>,2<rsup|m>-2<rsup|n>+i><around*|(|<around*|\\<llbracket\\>|<text|<samp|left-pad-low>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n  when <math|i\\<less\\>2<rsup|n>>\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|left-pad-low>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|2<rsup|m>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>>\n\n  <subsubsection|<samp|left-pad-high>>\n\n  (Note: derived from <samp|full-left-shift>.)\n\n  <\\math>\n    <rep|<text|<samp|'left-pad-high'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\\<cdummy\\><rep|m-n|>\n  </math>\n\n  <math|<text|<samp|left-pad-high>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|0\\<leq\\>n\\<less\\>m>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|left-pad-high>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=1>\n  when <math|i\\<less\\>2<rsup|m>-2<rsup|n>>\n\n  <math|bit<rsub|2<rsup|m>,2<rsup|m>-2<rsup|n>+i><around*|(|<around*|\\<llbracket\\>|<text|<samp|left-pad-high>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n  when <math|i\\<less\\>2<rsup|n>>\n\n  <subsubsection|<samp|left-extend>>\n\n  (Note: derived from <samp|leftmost>, <samp|left-pad-low> and\n  <samp|left-pad-high>.)\n\n  <\\math>\n    <rep|<text|<samp|'left-extend'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\\<cdummy\\><rep|m-n|>\n  </math>\n\n  <math|<text|<samp|left-extend>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|0\\<leq\\>n\\<less\\>m>\n\n  \\;\n\n  Properties:\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|left-extend>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,0><around*|(|x|)>>\n  when <math|i\\<less\\>2<rsup|n>-2<rsup|>>\n\n  <math|bit<rsub|2<rsup|m>,2<rsup|m>-2<rsup|n>+i><around*|(|<around*|\\<llbracket\\>|<text|<samp|left-extend>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n  when <math|i\\<less\\>2<rsup|n>>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|right-extend>><rsub|1,2<rsup|m>>\\<assign\\><text|<samp|left-extend>><rsub|1,2<rsup|m>>\n  :<2><rsup|>\\<vdash\\><2><rsup|2<rsup|m>>> for <math|0\\<leq\\>n\\<less\\>m>\n\n  <subsubsection|<samp|right-pad-low>>\n\n  (Note: derived from <samp|full-right-shift>.)\n\n  <\\math>\n    <rep|<text|<samp|'right-pad-low'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\\<cdummy\\><rep|m-n|>\n  </math>\n\n  <math|<text|<samp|right-pad-low>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|0\\<leq\\>n\\<less\\>m>\n\n  \\;\n\n  Properties:\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|right-pad-low>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n  when <math|i\\<less\\>2<rsup|n>>\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|right-pad-low>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=0>\n  when <math|2<rsup|n>\\<leq\\>i\\<less\\>2<rsup|m>>\n\n  <subsubsection|<samp|right-pad-high>>\n\n  (Note: derived from <samp|full-right-shift>.)\n\n  <\\math>\n    <rep|<text|<samp|'right-pad-high'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\\<cdummy\\><rep|m-n|>\n  </math>\n\n  <math|<text|<samp|right-pad-high>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|0\\<leq\\>n\\<less\\>m>\n\n  \\;\n\n  Properties:\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|right-pad-high>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n  when <math|i\\<less\\>2<rsup|n>>\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|right-pad-high>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=1>\n  when <math|2<rsup|n>\\<leq\\>i\\<less\\>2<rsup|m>>\n\n  <subsubsection|<samp|right-extend>>\n\n  (Note: derived from <samp|rightmost>, <samp|right-pad-low>, and\n  <samp|right-pad-high>.)\n\n  (CAUTION: Not defined when <math|n=0>.)\n\n  <\\math>\n    <rep|<text|<samp|'right-extend'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>\\<cdummy\\><rep|m-n|>\n  </math>\n\n  <math|<text|<samp|right-extend>><rsub|2<rsup|n>,2<rsup|m>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|m>>> for\n  <math|1\\<leq\\>n\\<less\\>m>\\ \n\n  Properties:\n\n  <math|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|right-extend>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>=bit<rsub|2<rsup|n>,i><around*|(|x|)>>\n  when <math|i\\<less\\>2<rsup|n>>\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|m>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|right-extend>><rsub|2<rsup|n>,2<rsup|m>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=bit<rsub|2<rsup|n>,2<rsup|n>-1><around*|(|x|)>>\n  when <math|2<rsup|n>\\<leq\\>i\\<less\\>2<rsup|m>>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|right-extend>><rsub|1,2<rsup|m>>\\<assign\\><text|<samp|left-extend>><rsub|1,2<rsup|m>>\n  :<2><rsup|>\\<vdash\\><2><rsup|2<rsup|m>>> for <math|0\\<leq\\>n\\<less\\>m>\n\n  <subsubsection|<samp|left-shift-with>>\n\n  Left shift by a given amount. Bits are filled with the provided\n  value.<glossary-explain|lb|The ISO 31-11 notation for the base 2\n  logarithm.>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'left-shift-with'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|left-shift-with>><rsub|2<rsup|n>>\n  :<2>\\<times\\><around*|(|<2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n|)>|\\<rceil\\>>>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  <subsubsection|<samp|right-shift-with>>\n\n  Right shift by a given amount. Bits are filled with the provided value.\n\n  <\\math>\n    <rep|<text|<samp|'right-shift-with'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|right-shift-with>><rsub|2<rsup|n>>\n  :<2>\\<times\\><around*|(|<2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n|)>|\\<rceil\\>>>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  <subsubsection|<samp|left-shift>>\n\n  Left shift by a given amount. Bits are filled with 0 bits.\n\n  <\\math>\n    <rep|<text|<samp|'left-shift'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|left-shift>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n|)>|\\<rceil\\>>>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  <subsubsection|<samp|right-shift>>\n\n  Right shift by a given amount. Bits are filled with 0 bits.\n\n  <\\math>\n    <rep|<text|<samp|'right-shift'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|right-shift>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n|)>|\\<rceil\\>>>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  <subsubsection|<samp|left-rotate>>\n\n  Right rotate by an amount.\n\n  <\\math>\n    <rep|<text|<samp|'left-rotate'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>\n  </math>\n\n  <math|<text|<samp|left-rotate>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n|)>|\\<rceil\\>>>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|left-rotate>><rsub|1>> \\<assign\\>\n  <text|<samp|drop>> \\<of\\> <1>\\<times\\><2>\\<vdash\\><2>>\n\n  <subsubsection|<samp|right-rotate>>\n\n  Right rotate by an amount.\n\n  <\\math>\n    <rep|<text|<samp|'right-rotate'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>\n  </math>\n\n  <math|<text|<samp|right-rotate>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n|)>|\\<rceil\\>>>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|right-rotate>><rsub|1>> \\<assign\\>\n  <text|<samp|drop>> \\<of\\> <1>\\<times\\><2>\\<vdash\\><2>>\n\n  <\\with|color|red>\n    <subsubsection|<samp|transpose> (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n=0> or <math|m=0>.)\n\n    (Note: Support only recommended up to\n    <math|2<rsup|n>\\<cdot\\>2<rsup|m>\\<leq\\>256>.)\n\n    <\\math>\n      <rep|<text|<samp|'transpose'>><rsub|2<rsup|n>,2<rsup|m>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>\\<cdummy\\><rep|m|>\n    </math>\n\n    <math|<text|<samp|transpose>><rsub|2<rsup|n>,2<rsup|m>>\n    :<2><rsup|2<rsup|n>\\<cdummy\\>2<rsup|m>>\\<vdash\\><2><rsup|2<rsup|m>\\<cdummy\\>2<rsup|n>>>\n    for <math|1\\<leq\\>n> and <math|1\\<leq\\>m>\n\n    \\;\n\n    Aliases:\n\n    <math|<text|<samp|transpose>><rsub|1,2<rsup|n>> \\<assign\\>\n    <text|<samp|iden>> :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n\n    <math|<text|<samp|transpose>><rsub|2<rsup|n>,1> \\<assign\\>\n    <text|<samp|iden>> :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n\n    <subsubsection|<samp|find-first-high> (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n=0>.)\n\n    <\\math>\n      <rep|<text|<samp|'find-first-high'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>\n    </math>\n\n    <math|<text|<samp|find-first-high>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n+1|)>|\\<rceil\\>>>>>\n    for <math|1\\<leq\\>n>\n\n    <subsubsection|<samp|find-last-high> (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n=0>.)\n\n    <\\math>\n      <rep|<text|<samp|'find-last-high'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>\n    </math>\n\n    <math|<text|<samp|find-last-high>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n+1|)>|\\<rceil\\>>>>>\n    for <math|1\\<leq\\>n>\n\n    <subsubsection|<samp|bit> (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n\\<leq\\>1>.)\n\n    <\\math>\n      <rep|<text|<samp|'bit'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n-1|>\n    </math>\n\n    <math|<text|<samp|bit>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n|)>|\\<rceil\\>>>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>>\n    for <math|2\\<leq\\>n>\n\n    \\;\n\n    Aliases:\n\n    <math|<math|<text|<samp|bit>><rsub|1>> \\<assign\\> <text|<samp|drop>>\n    \\<of\\> <1>\\<times\\><2>\\<vdash\\><2>>\n\n    <math|<math|<text|<samp|bit>><rsub|2>> \\<assign\\>\n    <text|<samp|ch>><rsub|1> \\<of\\> <2>\\<times\\><2><rsup|2>\\<vdash\\><2>>\n  </with>\n\n  <subsection|<verbatim|110100...: >Jets for arithmetic>\n\n  <subsubsection|<samp|one>>\n\n  (CAUTION: Not defined when <math|n=0>. See Aliases.)\n\n  <math|<rep|<text|<samp|'one'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|one>><rsub|2<rsup|n>>\\<of\\><1>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|one>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=0>\n  when <math|0\\<leq\\>i\\<less\\>2<rsup|n>-1>\n\n  <math|<around*|\\<lceil\\>|bit<rsub|2<rsup|n>,2<rsup|n>-1><around*|(|<around*|\\<llbracket\\>|<text|<samp|one>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|1>=1>\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|one>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>=1>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|one>><rsub|1>> \\<assign\\>\n  <text|<samp|high>><rsub|1>\\<of\\><1>\\<vdash\\><2>>\n\n  <subsubsection|<samp|full-add>>\n\n  (Note: <math|<text|<samp|'full-add'>><rsub|1>> is composed from\n  <samp|`maj`> and <samp|`tri-xor`>.)\n\n  <math|<rep|<text|<samp|'full-add'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|full-add>><rsub|2<rsup|n>>\n  :<2>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|full-add>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,2<rsup|n>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>+<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>+<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1>>\n\n  <subsubsection|<samp|add>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'add'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|add>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|add>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|1,2<rsup|n>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>+<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>>\n\n  \\;\n\n  Aliases:\n\n  <math|<math|<text|<samp|popcount>><rsub|2>> \\<assign\\>\n  <text|<samp|add>><rsub|1> :<2><rsup|2>\\<vdash\\><2><rsup|2>>\n\n  <subsubsection|<samp|full-increment>>\n\n  (CAUTION: Not defined when <math|n=0>. See Aliases.)\n\n  <math|<rep|<text|<samp|'full-increment'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|full-increment>><rsub|2<rsup|n>>\n  :<2>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|full-increment>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|c,x|\\<rangle\\>>|\\<rceil\\>><rsub|1,2<rsup|n>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>+<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1>>\n\n  <subsubsection|<samp|increment>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'increment'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|increment>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>> for\n  <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|increment>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|1,2<rsup|n>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>+1>\n\n  <\\with|color|red>\n    <subsubsection|<samp|popcount> (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n\\<leq\\>1>.)<glossary-dup|lb>\n\n    <\\math>\n      <rep|<text|<samp|'popcount'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n-1|>\n    </math>\n\n    <math|<text|<samp|popcount>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n+1|)>|\\<rceil\\>>>>>\n    for <math|1\\<leq\\>n>\n\n    \\;\n\n    Properties:\n\n    <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|popcount>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|2<rsup|<around*|\\<lceil\\>|lb<around*|(|n+1|)>|\\<rceil\\>>>>=<big|sum><rsub|i=0><rsup|2<rsup|n>-1><around*|\\<lceil\\>|bit<rsub|2<rsup|n>,i><around*|(|x|)>|\\<rceil\\>><rsub|1>>\n\n    \\;\n\n    Aliases:\n\n    <math|<text|<samp|popcount>><rsub|1> \\<assign\\> <text|<samp|iden>>\n    :<2>\\<vdash\\><2>>\n\n    <math|<math|<text|<samp|popcount>><rsub|2>> \\<assign\\>\n    <text|<samp|add>><rsub|1> :<2><rsup|2>\\<vdash\\><2><rsup|2>>\n  </with>\n\n  <subsubsection|<samp|full-subtract>>\n\n  (Note: composition of <samp|full-add> with <samp|complement> applied to 1st\n  and 3rd arguments).\n\n  <math|<rep|<text|<samp|'full-subtract'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|full-subtract>><rsub|2<rsup|n>>\n  :<2>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|full-subtract>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|c,<around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|1,2<rsup|n>>\\<equiv\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>-<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1><around*|(|mod\n  2<rsup|2<rsup|n>+1>|)>>\n\n  <subsubsection|<samp|subtract>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'subtract'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|subtract>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|full-subtract>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|1,2<rsup|n>>\\<equiv\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>><around*|(|mod\n  2<rsup|2<rsup|n>+1>|)>>\n\n  <subsubsection|<samp|negate>>\n\n  (CAUTION: Not defined when <math|n=0>.)\n\n  <math|<rep|<text|<samp|'negate'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|negate>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>> for\n  <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|negate>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|1,2<rsup|n>>\\<equiv\\>-<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\n  <around*|(|mod 2<rsup|2<rsup|n>+1>|)>>\n\n  <subsubsection|<samp|full-decrement>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'full-decrement'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|full-decrement>><rsub|2<rsup|n>>\n  :<2>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|full-decrement>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|c,x|\\<rangle\\>>|\\<rceil\\>><rsub|1,2<rsup|n>>\\<equiv\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|1><around*|(|mod\n  2<rsup|2<rsup|n>+1>|)>>\n\n  <subsubsection|<samp|decrement>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'decrement'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|decrement>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<vdash\\><2>\\<times\\><2><rsup|2<rsup|n>>> for\n  <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|decrement>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|1,2<rsup|n>>\\<equiv\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-1<around*|(|mod\n  2<rsup|2<rsup|n>+1>|)>>\n\n  <subsubsection|<samp|full-multiply>>\n\n  (Note: <math|<text|<samp|'full-multiply'>><rsub|1>> is composed from\n  <math|<text|<samp|'full-add'>><rsub|1>> and <samp|`and`>.)\n\n  <math|<rep|<text|<samp|'full-multiply'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|full-multiply>><rsub|2<rsup|n>>\n  :<around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2><rsup|2<rsup|n+1>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|full-multiplier>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|<around*|\\<langle\\>|c<rsub|1>,c<rsub|2>|\\<rangle\\>>,<around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n+1>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\\<cdot\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>+<around*|\\<lceil\\>|c<rsub|1>|\\<rceil\\>><rsub|2<rsup|n>>+<around*|\\<lceil\\>|c<rsub|2>|\\<rceil\\>><rsub|2<rsup|n>>>\n\n  <subsubsection|<samp|multiply>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'multiply'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|multiply>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n+1>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|multiply>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n+1>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\\<cdot\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>>\n\n  <subsubsection|<verbatim|><samp|is-zero>>\n\n  (CAUTION: Not defined when <math|n=0>. See Aliases.)\n\n  (Note: <samp|complement> of <samp|some>).\n\n  <math|<rep|<text|<samp|'is-zero'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|is-zero>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>=0|)>>\n\n  <subsubsection|<verbatim|><samp|is-one>>\n\n  (CAUTION: Not defined when <math|n=0>. See Aliases.)\n\n  <math|<rep|<text|<samp|'is-one'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|is-one>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>=1|)>>\n\n  <subsubsection|<samp|le> (unsigned)>\n\n  (Note: borrow bit from <samp|subtractor>)\n\n  <math|<rep|<text|<samp|'le'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|le>><rsub|2<rsup|n>> :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|le>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\\<leq\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>|)>>\n\n  <subsubsection|<samp|lt> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'lt'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|lt>><rsub|2<rsup|n>> :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|lt>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\\<less\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>|)>>\n\n  <subsubsection|<samp|min> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'min'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|min>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|z\\<leq\\><around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|'min'>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>>\n  if and only if <math|z\\<leq\\><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>>\n  and <math|z\\<leq\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|min>><rsub|1> \\<assign\\> <text|<samp|and>><rsub|1>\n  :<2>\\<times\\><2>\\<vdash\\><2>>\n\n  <subsubsection|<samp|max> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'max'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|max>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|max>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>\\<leq\\>z>\n  if and only if <math|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\\<leq\\>z>\n  and <math|<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>\\<leq\\>z>\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|max>><rsub|1> \\<assign\\> <text|<samp|or>><rsub|1>\n  :<2>\\<times\\><2>\\<vdash\\><2>>\n\n  <subsubsection|<samp|median> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'median'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n  <math|<text|<samp|median>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|1\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|min>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x<rsub|i>,x<rsub|j>|\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>\\<leq\\><around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|median>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x<rsub|1>,<around*|\\<langle\\>|x<rsub|2>,x<rsub|3>|\\<rangle\\>>|\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>\\<leq\\><around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|max>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x<rsub|i>,x<rsub|j>|\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|n>>>\n  for all <math|1\\<leq\\>i\\<less\\>j\\<leq\\>3>.\n\n  \\;\n\n  Aliases:\n\n  <math|<text|<samp|median>><rsub|1> \\<assign\\> <text|<samp|maj>><rsub|1>\n  :<2>\\<times\\><around*|(|<2>\\<times\\><2>|)>\\<vdash\\><2>>\n\n  \\;\n\n  <subsubsection|<samp|div2n1n>>\n\n  (Note: helper function for <samp|divmod>. See <hlink|Fast recursive\n  division|http://cr.yp.to/bib/1998/burnikel.ps> by Bunikel and Ziegler\n  (1998).)\n\n  <math|<rep|<text|<samp|'div2n1n'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|div2n1n>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n+1>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  When <math|2<rsup|n-1>\\<leq\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>\n  >and<math|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n+1>>\\<less\\>2<rsup|n>\\<cdot\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>>,\n\n  <\\enumerate-alpha>\n    <item><math|<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>\\<cdot\\><around*|\\<lceil\\>|\\<pi\\><rsub|1><around*|(|<around*|\\<llbracket\\>|<text|<samp|div2n1n>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|2<rsup|n>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n+1>>-<around*|\\<lceil\\>|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|div2n1n>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|2<rsup|n>>>,\n    and\n\n    <item><math|<around*|\\<lceil\\>|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|div2n1n>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|2<rsup|n>>\\<less\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>>.\n  </enumerate-alpha>\n\n  \\;\n\n  When <math|2<rsup|n-1>\\<gtr\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>\n  >or<math|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n+1>>\\<geqslant\\>2<rsup|n>\\<cdot\\><around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>>,\n  then <math|bit<rsub|2<rsup|2n>,i><around*|(|<around*|\\<llbracket\\>|<text|<samp|div2n1n>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>=1>.\n\n  \\;\n\n  <subsubsection|<samp|div-mod> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'div-mod'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|div-mod>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>\\<cdot\\><around*|\\<lceil\\>|\\<pi\\><rsub|1><around*|(|<around*|\\<llbracket\\>|<text|<samp|div-mod>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|2<rsup|n>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-<around*|\\<lceil\\>|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|div-mod>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|2<rsup|n>>>\n\n  \\;\n\n  For all <math|r\\<in\\>\\<bbb-N\\>> such that\n  <math|<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>\\|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-r>\n  we have<math|<around*|\\<lceil\\>|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|div-mod>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|)>|\\<rceil\\>><rsub|2<rsup|n>>\\<leq\\>r>.\n\n  <subsubsection|<samp|divide> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'divide'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|divide>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  <subsubsection|<samp|modulo> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'modulo'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|modulo>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n  for <math|0\\<leq\\>n>\n\n  <subsubsection|<samp|divides> (unsigned)>\n\n  \\;\n\n  <math|<rep|<text|<samp|'divides'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n  <math|<text|<samp|divides>><rsub|2<rsup|n>>\n  :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>> for\n  <math|0\\<leq\\>n>\n\n  \\;\n\n  Properties:\n\n  <math|<around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|divides>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>|\\<rceil\\>><rsub|1>=\\<chi\\><around*|(|<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>\\|<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>|)>>\n\n  <\\with|color|red>\n    <subsubsection|<samp|eea> (unsigned) (NOT IMPLEMENTED)>\n\n    \\;\n\n    <math|<rep|<text|<samp|'eea'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n    <math|<text|<samp|eea>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><around*|(|<around*|(|<around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>+<around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>|)>\\<times\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>|)>\\<times\\><2><rsup|2<rsup|n>>>\n    for <math|0\\<leq\\>n>\n\n    \\;\n\n    Properties:\n\n    Let <math|<around*|\\<langle\\>|<around*|\\<langle\\>|b,<around*|\\<langle\\>|c<rsub|y>,c<rsub|x>|\\<rangle\\>>|\\<rangle\\>>,d|\\<rangle\\>>\\<assign\\><around*|\\<llbracket\\>|<text|<samp|eea>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|x,y|\\<rangle\\>>>\n\n    \\;\n\n    <math|<around*|\\<lceil\\>|c<rsub|x>|\\<rceil\\>><rsub|2<rsup|n>>*<around*|\\<lceil\\>|d|\\<rceil\\>><rsub|2<rsup|n>>=<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>>\n\n    <math|<around*|\\<lceil\\>|c<rsub|y>|\\<rceil\\>><rsub|2<rsup|n>>*<around*|\\<lceil\\>|d|\\<rceil\\>><rsub|2<rsup|n>>=<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>>\n\n    \\;\n\n    If <math|<injl|<around*|\\<langle\\>|s,t|\\<rangle\\>>>=b> then\n    <math|<around*|\\<lceil\\>|s|\\<rceil\\>><rsub|2<rsup|n>>*<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-<around*|\\<lceil\\>|t|\\<rceil\\>><rsub|2<rsup|n>>*<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>=<around*|\\<lceil\\>|d|\\<rceil\\>><rsub|2<rsup|n>>>\n    and either <math|<around*|\\<lceil\\>|s|\\<rceil\\>><rsub|2<rsup|n>>*\\<less\\><frac|<around*|\\<lceil\\>|c<rsub|y>|\\<rceil\\>><rsub|2<rsup|n>>|2>>\n    or <math|<around*|\\<lceil\\>|t|\\<rceil\\>><rsub|2<rsup|n>>*\\<less\\><frac|<around*|\\<lceil\\>|c<rsub|x>|\\<rceil\\>><rsub|2<rsup|n>>|2>>.\n\n    If <math|<injr|<around*|\\<langle\\>|s,t|\\<rangle\\>>>=b> then\n    <math|<around*|\\<lceil\\>|s|\\<rceil\\>><rsub|2<rsup|n>>*<around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|n>>-<around*|\\<lceil\\>|t|\\<rceil\\>><rsub|2<rsup|n>>*<around*|\\<lceil\\>|y|\\<rceil\\>><rsub|2<rsup|n>>=-<around*|\\<lceil\\>|d|\\<rceil\\>><rsub|2<rsup|n>>>\n    and either <math|<around*|\\<lceil\\>|s|\\<rceil\\>><rsub|2<rsup|n>>*\\<less\\><frac|<around*|\\<lceil\\>|c<rsub|y>|\\<rceil\\>><rsub|2<rsup|n>>|2>>\n    or <math|<around*|\\<lceil\\>|t|\\<rceil\\>><rsub|2<rsup|n>>*\\<less\\><frac|<around*|\\<lceil\\>|c<rsub|x>|\\<rceil\\>><rsub|2<rsup|n>>|2>.>\n\n    \\;\n\n    <math|<around*|\\<llbracket\\>|<text|<samp|eea>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|\\<langle\\>|<around*|\\<lfloor\\>|x|\\<rfloor\\>>,<around*|\\<lfloor\\>|x|\\<rfloor\\>>|\\<rangle\\>>=<around*|\\<langle\\>|<around*|\\<langle\\>|<injl|<around*|\\<langle\\>|<around*|\\<lfloor\\>|1|\\<rfloor\\>>,<around*|\\<lfloor\\>|0|\\<rfloor\\>>|\\<rangle\\>>>,<around*|\\<langle\\>|<around*|\\<lfloor\\>|1|\\<rfloor\\>>,<around*|\\<lfloor\\>|1|\\<rfloor\\>>|\\<rangle\\>>|\\<rangle\\>>,<around*|\\<lfloor\\>|x|\\<rfloor\\>>|\\<rangle\\>>>.\n\n    <subsubsection|<samp|bezout> (unsigned) (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n\\<leq\\>1>.)\n\n    <math|<rep|<text|<samp|'bezout'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n    <math|<text|<samp|bezout>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>+<around*|(|<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>|)>>\n    for <math|1\\<leq\\>n>\n\n    <subsubsection|<samp|gcd> (unsigned) (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n\\<leq\\>1>.)\n\n    <math|<rep|<text|<samp|'gcd'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n    <math|<text|<samp|gcd>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>>\n    for <math|1\\<leq\\>n>\n\n    <subsubsection|<samp|cofactors> (unsigned)<space|0.2spc>(NOT\n    IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n\\<leq\\>1>.)\n\n    <math|<rep|<text|<samp|'cofactors'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n    <math|<text|<samp|cofactors>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>>\n    for <math|1\\<leq\\>n>\n\n    <subsubsection|<samp|lcm> (unsigned) (NOT IMPLEMENTED)>\n\n    \\;\n\n    <math|<rep|<text|<samp|'lcm'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n    <math|<text|<samp|lcm>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n+1>>>\n    for <math|0\\<leq\\>n>\n\n    <subsubsection|<samp|jacobi> (unsigned) (NOT IMPLEMENTED)>\n\n    \\;\n\n    <math|<rep|<text|<samp|'jacobi'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n    <math|<text|<samp|jacobi>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2>> for\n    <math|0\\<leq\\>n>\n\n    <subsubsection|<samp|absolute-value> (signed input/unsigned output) (NOT\n    IMPLEMENTED)>\n\n    \\;\n\n    <math|<rep|<text|<samp|'absolute-value'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>>\n\n    <math|<text|<samp|absolute-value>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2<rsup|n>>> for <math|0\\<leq\\>n>\n\n    <subsubsection|<verbatim|><samp|sign> (NOT IMPLEMENTED)>\n\n    (CAUTION: Not defined when <math|n=0>. See Aliases.)\n\n    <\\math>\n      <rep|<text|<samp|'sign'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n|>\n    </math>\n\n    <math|<text|<samp|sign>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<vdash\\><2><rsup|2>> for <math|1\\<leq\\>n>\n\n    \\;\n\n    Properties:\n\n    <math|<around*|\\<llbracket\\>|<text|<samp|sign>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>=<around*|\\<langle\\>|<around*|\\<llbracket\\>|<text|<samp|leftmost>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>,<around*|\\<llbracket\\>|<text|<samp|some>><rsub|2<rsup|n>>|\\<rrbracket\\>><around*|(|x|)>|\\<rangle\\>>>\n\n    <subsubsection|<samp|signed-le> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <math|<rep|<text|<samp|'signed-le'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n    <math|<text|<samp|signed-le>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>> for\n    <math|0\\<leq\\>n>\n\n    <subsubsection|<samp|signed-lt> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <math|<rep|<text|<samp|'signed-lt'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|n+1|>>\n\n    <math|<text|<samp|signed-lt>><rsub|2<rsup|n>>\n    :<2><rsup|2<rsup|n>>\\<times\\><2><rsup|2<rsup|n>>\\<vdash\\><2>> for\n    <math|0\\<leq\\>n>\n\n    <subsubsection|<samp|signed-min> (NOT IMPLEMENTED)>\n\n    <subsubsection|<samp|signed-max> (NOT IMPLEMENTED)>\n\n    <subsubsection|<samp|signed-median> (NOT IMPLEMENTED)>\n\n    <subsubsection|<samp|signed-right-shift> (NOT IMPLEMENTED)>\n\n    Right shift by a signed amount with sign extension. Negative values are a\n    left shift.\n\n    <subsubsection|<samp|signed-divmod> (unsigned denominator) (NOT\n    IMPLEMENTED)>\n\n    <subsubsection|<samp|signed-div> (unsigned denominator) (NOT\n    IMPLEMENTED)>\n\n    <subsubsection|<samp|signed-signed-divmod> (signed denominator) (NOT\n    IMPLEMENTED)>\n\n    <subsubsection|<samp|signed-signed-div> (signed denominator) (NOT\n    IMPLEMENTED)>\n  </with>\n\n  \\;\n\n  <subsection|<verbatim|110101...: >Jets for hash functions>\n\n  <subsubsection|<verbatim|1101010...: >Jets for SHA-2>\n\n  In this section we define <math|Ctx8\\<assign\\><around*|(|<2><rsup|8>|)><rsup|\\<less\\>64>\\<times\\><around*|(|<2><rsup|64>\\<times\\><2><rsup|256>|)>>.\n  This represent a type of SHA-256 contexts for hashing variable length byte\n  strings. The first component is a buffer of bytes representing a partial\n  block. \\ The second component is the number of times the compression\n  function has been invoked. \\ The third component is the SHA-256 midstate of\n  compressed data so for (excluding the data in the partial block).\n\n  Note that SHA-256 only allows the compression counter to be less than\n  <math|2<rsup|55>>. \\ The jets below will fail if the compression counter is\n  <math|2<rsup|55>> or larger, or if executing the function would cause the\n  counter to become <math|2<rsup|55>> or larger.\n\n  \\;\n\n  <paragraph|<samp|sha-256-block>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'sha-256-block'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>>\n\n  <math|<text|<samp|sha-256-block>> :<2><rsup|256>\\<times\\><2><rsup|512>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  <paragraph|<samp|sha-256-iv>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'sha-256-iv'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>>\n\n  <\\math>\n    <text|<samp|sha-256-iv>> :<1>\\<vdash\\><2><rsup|256>\n  </math>\n\n  \\;\n\n  <paragraph|<samp|sha-256-ctx-8-add>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'sha-256-ctx-8-add'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>><math|\\<cdummy\\><rep|n+1|>>\n\n  <\\math>\n    <text|<samp|sha-256-ctx-8-add>><rsub|2<rsup|n>>\n    :Ctx8\\<times\\><around*|(|<2><rsup|8>|)><rsup|2<rsup|n>>\\<vdash\\>Ctx8\n  </math>\n\n  \\;\n\n  <paragraph|<samp|sha-256-ctx-8-add-buffer-511>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'sha-256-ctx-8-add-buffer'>><rsub|511>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>>\n\n  <\\math>\n    <text|<samp|sha-256-ctx-8-add-buffer>><rsub|511>\n    :Ctx8\\<times\\><around*|(|<2><rsup|8>|)><rsup|\\<less\\>512>\\<vdash\\>Ctx8\n  </math>\n\n  \\;\n\n  <paragraph|<samp|sha-256-ctx-8-finalize>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'sha-256-ctx-8-finalize'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>>\n\n  <\\math>\n    <text|<samp|sha-256-ctx-8-finalize>> :Ctx8\\<vdash\\><2><rsup|256>\n  </math>\n\n  \\;\n\n  <paragraph|<samp|sha-256-ctx-8-init>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'sha-256-ctx-8-init'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>>\n\n  <\\math>\n    <text|<samp|sha-256-ctx-8-init>> :<1>\\<vdash\\>Ctx8\n  </math>\n\n  <\\with|color|red>\n    <subsubsection|<verbatim|110101100...: >Jets for SHA-3 (NOT IMPLEMENTED)>\n\n    In this section we define <math|X<rsup|5>\\<assign\\>X\\<times\\>X<rsup|4>>\n    and <math|X<rsup|1600>\\<assign\\><around*|(|<around*|(|X<rsup|64>|)><rsup|5>|)><rsup|5>>.\n\n    \\;\n\n    <paragraph|<samp|sha3-zero>>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'sha3-zero'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|sha3-zero>> :<1>\\<vdash\\><2><rsup|1600>>\n\n    \\;\n\n    <paragraph|<samp|sha3-absorb>>\n\n    (Note: we should probably byte-stwap the input before xoring it into\n    place\n\n    <\\math>\n      <rep|<text|<samp|'sha3-absorb'>><rsub|n,m>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\\<cdummy\\><rep|n|>\\<cdummy\\><rep|m|>\n    </math>\n\n    <math|<text|<samp|sha3-absorb>><rsub|n,m>:<2><rsup|64>\\<times\\><2><rsup|1600>\\<vdash\\><2><rsup|1600>>\n    for <math|1\\<leq\\>n,m\\<leq\\>5>\n\n    \\;\n\n    <paragraph|<samp|sha3-xor>>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'sha3-xor'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|sha3-xor>> :<2><rsup|1600>\\<times\\><2><rsup|1600>\\<vdash\\><2><rsup|1600>>\n\n    \\;\n\n    <paragraph|<samp|sha3-permute>>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'sha3-permute'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|sha3-permute>>:<2><rsup|1600>\\<vdash\\><2><rsup|1600>>\n\n    \\;\n\n    <paragraph|<samp|sha3-squeeze-256>>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'sha3-squeeze-256'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|sha3-squeeze-256>>:<2><rsup|1600>\\<vdash\\><2><rsup|256>>\n\n    \\;\n\n    <paragraph|<samp|sha3-squeeze-512>>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'sha3-squeeze-512'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|sha3-squeeze-512>>:<2><rsup|1600>\\<vdash\\><2><rsup|512>>\n\n    <subsubsection|<verbatim|110101101...: >Jets for RIPEMD (NOT\n    IMPLEMENTED)>\n\n    <subsubsection|<verbatim|110101110000...: >Jets for SHA-1 (RESERVED) (NOT\n    IMPLEMENTED)>\n  </with>\n\n  <subsection|<verbatim|110110000...: >Jets for elliptic curve functions>\n\n  <subsubsection|<verbatim|1101100000...: >Jets for secp256k1>\n\n  In this section we define <math|Scalar\\<assign\\><2><rsup|256>>,\n  <math|<2><rsup|129>\\<assign\\><2>\\<times\\><2><rsup|128>>,\n  <math|FE\\<assign\\><2><rsup|256>>, <math|GE\\<assign\\>FE\\<times\\>FE>, and\n  <math|GEJ\\<assign\\>GE\\<times\\>FE>, <math|Point\\<assign\\><2>\\<times\\>FE>.\n\n  (Note: To convert GE to GEJ pair with <samp|one>).\n\n  <with|color|red|TODO: Verify that all <em|equivalent> FE and Scalar inputs\n  yield <em|equal> outputs.>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-point-verify>>\n\n  (Note: Support only recommended up to <math|2<rsup|n>\\<leq\\><with|color|red|TODO\n  8?>>.)\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-point-verify'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|secp256k1-point-verify>><rsub|2<rsup|n>>:<around*|(|<around*|(|Scalar\\<times\\>Point|)><rsup|2<rsup|n>>\\<times\\>Scalar|)>\\<times\\>Point\\<vdash\\><1>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-decompress>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-decompress'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|secp256k1-decompress>>:Point\\<vdash\\><maybe><around*|(|GE|)>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-linear-verify>>\n\n  (Note: Support only recommended up to <math|2<rsup|n>\\<leq\\><with|color|red|TODO\n  8?>>.)\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-linear-verify'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|secp256k1-linear-verify>><rsub|2<rsup|n>>:<around*|(|<around*|(|Scalar\\<times\\>GE|)><rsup|2<rsup|n>>\\<times\\>Scalar|)>\\<times\\>GE\\<vdash\\><1>>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-linear-combination>>\n\n  (Note: Support only recommended up to <math|2<rsup|n>\\<leq\\><with|color|red|TODO\n  8?>>.)\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-linear-combination'>><rsub|2<rsup|n>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\\<cdummy\\><rep|n+1|>\n  </math>\n\n  <math|<text|<samp|secp256k1-linear-combination>><rsub|2<rsup|n>>:<around*|(|Scalar\\<times\\>GEJ|)><rsup|2<rsup|n>>\\<times\\>Scalar\\<vdash\\>GEJ>\n  for <math|0\\<leq\\>n>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scale>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scale'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scale>>:Scalar\\<times\\>GEJ\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-generate>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-generate'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-generate>>:Scalar\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-infinity>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-infinity'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-infinity>>:<1>\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-normalize>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-normalize'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-normalize>>:GEJ\\<vdash\\><maybe><around*|(|GE|)>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-negate>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-negate'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-negate>>:GEJ\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-ge-negate>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-ge-negate'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-ge-negate>>:GE\\<vdash\\>GE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-double>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-double'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-double>>:GEJ\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-add>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-add'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-add>>:GEJ\\<times\\>GEJ\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-ge-add-ex>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-ge-add-ex'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-ge-add-ex>>:GEJ\\<times\\>GE\\<vdash\\>FE\\<times\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-ge-add>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-ge-add'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-ge-add>>:GEJ\\<times\\>GE\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-rescale>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-rescale'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-rescale>>:GEJ\\<times\\>FE\\<vdash\\>GEJ>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-is-infinity>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-is-infinity'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-is-infinity>>:GEJ\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-equiv> <with|color|red|Does not exist in\n  libsecp256k1>>\n\n  <with|color|red|Warning: this can be implemented by comparing coordinates\n  (by cross multiplication) or by adding points and testing for infinity.\n  \\ However these two implementations yields different results for off curve\n  points.>\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-equiv'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-equiv>>:GEJ\\<times\\>GEJ\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-ge-equiv> <with|color|red|Does not exist in\n  libsecp256k1>>\n\n  <with|color|red|Warning: this can be implemented by comparing coordinates\n  (by cross multiplication) or by adding points and testing for infinity.\n  \\ However these two implementations yields different results for off curve\n  points.>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-ge-equiv'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-ge-equiv>>:GEJ\\<times\\>GE\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-x-equiv>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-x-equiv'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-x-equiv>>:FE\\<times\\>GEJ\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-y-is-odd>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-y-is-odd'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-y-is-odd>>:GEJ\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-gej-is-on-curve>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-gej-is-on-curve'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-gej-is-on-curve>>:GEJ\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-ge-is-on-curve>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-ge-is-on-curve'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-ge-is-on-curve>>:GE\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-normalize>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-normalize'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scalar-normalize>>:Scalar\\<vdash\\>Scalar>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-negate>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-negate'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|'secp256k1-scalar-negate'>>:Scalar\\<vdash\\>Scalar>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-add>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-add'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scalar-add>>:Scalar\\<times\\>Scalar\\<vdash\\>Scalar>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-square>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-square'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scalar-square>>:Scalar\\<vdash\\>Scalar>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-multiply>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-multiply'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scalar-multiply>>:Scalar\\<times\\>Scalar\\<vdash\\>Scalar>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-multiply-lambda>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-multiply-lambda'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scalar-multiply-lambda>>:Scalar\\<vdash\\>Scalar>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-invert>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-invert'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scalar-invert>>:Scalar\\<vdash\\>Scalar>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-scalar-is-zero>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-scalar-is-zero'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-scalar-is-zero>>:Scalar\\<vdash\\><2>>\n\n  \\;\n\n  <\\with|color|red>\n    <paragraph|<samp|secp256k1-ge-scale-lambda> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-ge-scale-lambda'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-ge-scale-lambda>>:GE\\<vdash\\>GE>\n\n    \\;\n\n    <paragraph|<samp|secp256k1-gej-scale-lambda> <with|color|red|Consider\n    removing> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-gej-scale-lambda'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-gej-scale-lambda>>:GEJ\\<vdash\\>GEJ>\n\n    \\;\n\n    <paragraph|<samp|secp256k1-scalar-split-lambda> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-scalar-split-lambda'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-scalar-split-lambda>>:Scalar\\<vdash\\><2><rsup|129>\\<times\\><2><rsup|129>>\n\n    \\;\n\n    TODO Properties:\n\n    <math|\\<lambda\\>\\<cdot\\><around*|\\<lceil\\>|\\<pi\\><rsub|1><around*|(|<around*|\\<llbracket\\>|<text|<samp|'secp256k1-scalar-split'>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|2<rsup|128>>+<around*|\\<lceil\\>|\\<pi\\><rsub|2><around*|(|<around*|\\<llbracket\\>|<text|<samp|'secp256k1-scalar-split'>>|\\<rrbracket\\>><around*|(|x|)>|)>|\\<rceil\\>><rsub|2<rsup|128>>\\<equiv\\><rsub|Scalar><around*|\\<lceil\\>|x|\\<rceil\\>><rsub|2<rsup|256>>>\n\n    \\;\n\n    <paragraph|<samp|secp256k1-short-scalar> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-short-scalar'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-short-scalar>>:<2><rsup|129>\\<vdash\\>Scalar>\n  </with>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-normalize>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-normalize'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-normalize>>:FE\\<vdash\\>FE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-negate>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-negate'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-negate>>:FE\\<vdash\\>FE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-add>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-negate'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-negate>>:FE\\<times\\>FE\\<vdash\\>FE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-square>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-square'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-square>>:FE\\<vdash\\>FE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-multiply>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-multiply'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-multiply>>:FE\\<times\\>FE\\<vdash\\>FE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-multiply-beta>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-multiply-beta'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-multiply-beta>>:FE\\<vdash\\>FE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-invert>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-invert'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  gi<math|<text|<samp|secp256k1-fe-invert>>:FE\\<vdash\\>FE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-square-root>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-square-root'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-square-root>>:FE\\<vdash\\><maybe><around*|(|FE|)>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-is-zero>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-is-zero'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-is-zero>>:FE\\<vdash\\><2>>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-fe-is-odd>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-fe-is-odd'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-fe-is-odd>>:FE\\<vdash\\><2>>\n\n  \\;\n\n  <\\with|color|red>\n    <paragraph|<samp|secp256k1-fe-is-quad> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-fe-is-quad'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-fe-is-quad>>:FE\\<vdash\\><2>>\n  </with>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-hash-to-curve>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-hash-to-curve'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-hash-to-curve>>:<2><rsup|256>\\<vdash\\>GE>\n\n  \\;\n\n  <paragraph|<samp|secp256k1-swu>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'secp256k1-swu'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|secp256k1-swu>>:FE\\<vdash\\>GE>\n\n  \\;\n\n  <subsection|<verbatim|110110001...: >Jets for digital signatures>\n\n  <subsubsection|<verbatim|1101100010...: >Jets for secp256k1 based digital\n  signatures>\n\n  In this section we define <math|Pubkey\\<assign\\><2><rsup|256>>,\n  <math|Signature\\<assign\\><2><rsup|512>>.\n\n  \\;\n\n  <paragraph|<samp|check-sig-verify>>\n\n  (Note: this jet can fail.)\n\n  <\\math>\n    <rep|<text|<samp|'check-sig-verify'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|check-sig-verify>>:<around*|(|Pubkey\\<times\\><2><rsup|512>|)>\\<times\\>Signature\\<vdash\\><1>>\n\n  \\;\n\n  <paragraph|<samp|bip-0340-verify>>\n\n  (Note: this jet can fail.)\n\n  <\\math>\n    <rep|<text|<samp|'bip-0340-verify'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n  </math>\n\n  <math|<text|<samp|bip-0340-verify>>:<around*|(|Pubkey\\<times\\><2><rsup|256>|)>\\<times\\>Signature\\<vdash\\><1>>\n\n  \\;\n\n  <\\with|color|red>\n    <paragraph|<samp|bip-0340-challenge-iv> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'bip-0340-challenge-iv'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|bip-0340-challenge-iv>>:<1>\\<vdash\\><2><rsup|256>>\n\n    \\;\n\n    <paragraph|<samp|bip-0340-challenge-midstate> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'bip-0340-challenge-midstate'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <\\math>\n      <text|<samp|bip-0340-challenge-midstate>>:FE\\<times\\>Pubkey\\<vdash\\><2><rsup|256>\n    </math>\n\n    \\;\n\n    <paragraph|<samp|secp256k1-signature-unpack> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-signtaure-unpack'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-signature-unpack>>:Signature\\<vdash\\><maybe><around*|(|FE\\<times\\>Scalar|)>>\n\n    \\;\n\n    <paragraph|<samp|secp256k1-pubkey-unpack> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-pubkey-unpack'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-pubkey-unpack>>:Pubkey\\<vdash\\><maybe><around*|(|GE|)>>\n\n    \\;\n\n    <paragraph|<samp|secp256k1-pubkey-unpack-neg> (NOT IMPLEMENTED)>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'secp256k1-pubkey-unpack-neg'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|secp256k1-pubkey-unpack-neg>>:Pubkey\\<vdash\\><maybe><around*|(|GE|)>>\n\n    \\;\n\n    <paragraph|<samp|secp256k1-ecdsa> (NOT IMPLEMENTED)>\n\n    \\;\n  </with>\n\n  <\\with|color|red>\n    <subsection|<verbatim|110110010...: >Jets for Simplicity (NOT\n    IMPLEMENTED)>\n\n    Tagged hash IVs for basic simplicity combinators, signature hashes, etc.\n    The CMR of various expressions for constants.\n\n    \\;\n\n    These would be use for Simplicity covenants.\n\n    <subsubsection|<verbatim|11011000100...: >Jets for tagged hash IVs>\n\n    <paragraph|<samp|iden-commitment-tag>>\n\n    <paragraph|<samp|comp-commitment-tag>>\n\n    <paragraph|<samp|unit-commitment-tag>>\n\n    <paragraph|<samp|injl-commitment-tag>>\n\n    <paragraph|<samp|injr-commitment-tag>>\n\n    <paragraph|<samp|case-commitment-tag>>\n\n    <paragraph|<samp|pair-commitment-tag>>\n\n    <paragraph|<samp|take-commitment-tag>>\n\n    <paragraph|<samp|drop-commitment-tag>>\n\n    <paragraph|<samp|witness-commitment-tag>>\n\n    <paragraph|<samp|disconnect-commitment-tag>>\n\n    <paragraph|<samp|fail-commitment-tag>>\n\n    <paragraph|<samp|signtaure-tag>>\n\n    \\;\n\n    <\\math>\n      <rep|<text|<samp|'signature-tag'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\\<cdummy\\><rep|<value|paragraph-nr>|>\n    </math>\n\n    <math|<text|<samp|signature-tag>>:<1>\\<vdash\\><2><rsup|256>>\n\n    \\;\n\n    <paragraph|<samp|sighash-tag>>\n  </with>\n\n  <subsection|<verbatim|110110011...: >Jets for Bitcoin (without primitives)>\n\n  This section is not recommended for non-Bitcoin(-like) applications.\n\n  <subsubsection|<samp|parse-lock>>\n\n  (Note: <math|<around*|\\<llbracket\\>|<text|<samp|'parse-lock'>>|\\<rrbracket\\>><around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|32>\\<assign\\><injl|<around*|(|0|)>>>)\n\n  <math|<rep|<text|<samp|'parse-lock'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|parse-lock>> :<2><rsup|32>\\<vdash\\><2><rsup|32>+<2><rsup|32>>\n\n  <subsubsection|<samp|parse-sequence>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'parse-sequence'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|parse-sequence>> :<2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|16>+<2><rsup|16>|)>>\n\n  <subsubsection|<samp|tapdata-init>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tapdata-init'>>|>\\<assign\\><verbatim|<around*|[|110|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|tapdata-init>> :<1>\\<vdash\\>Ctx8>\n\n  \\;\n\n  Creates a Sha256 context initialized with a \\PTapData\\Q tag.\n\n  <section|<verbatim|111...: >Bitcoin Jets>\n\n  <subsection|Signature Hash Modes>\n\n  <\\itemize>\n    <item><math|<text|<samp|sighash-all>>\\<of\\><1>\\<vdash\\><2><rsup|256>>\n\n    <item><math|<text|<samp|sighash-single>>\\<of\\><1>\\<vdash\\><2><rsup|256>>\n    (anyone can pay)\n\n    <item><math|<text|<samp|sighash-outputs>>\\<of\\>Index\\<times\\><2><rsup|32>\\<vdash\\><2><rsup|256>>\n    (anyone can pay)\n  </itemize>\n\n  <subsection|Time Locks>\n\n  In this section we define <math|Height\\<assign\\><2><rsup|32>>,\n  <math|Time\\<assign\\><2><rsup|32>>, <math|Distance\\<assign\\><2><rsup|16>>,\n  and <math|Duration = <2><rsup|16>>.\n\n  <subsubsection|<samp|check-lock-height>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-height'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|check-lock-height>>> :Height\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'tx-lock-height'> is greater than\n  or equal to the input.\n\n  <subsubsection|<samp|check-lock-time>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-time'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|check-lock-time>'>> :Time\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'tx-lock-time'> is greater than or\n  equal to the input.\n\n  <subsubsection|<samp|check-lock-distance>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-distance'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|check-lock-distance>'>> :Distance\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'check-lock-distance'> is greater\n  than or equal to the input.\n\n  <subsubsection|<samp|check-lock-duration>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-duration'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|check-lock-duration>'>> :Duration\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'check-lock-duration'> is greater\n  than or equal to the input.\n\n  <subsubsection|<samp|tx-height-lock>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-height-lock'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|tx-height-lock>>> :<1>\\<vdash\\>Height>\n\n  \\;\n\n  Returns <math|x> when <samp|is-final> returns <math|<math-tt|0><rsub|<2>>>\n  and <math|<around*|\\<llbracket\\>|<text|<samp|parse-lock>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|lockTime>>|\\<rrbracket\\>>>\n  returns <math|<injl|<around*|(|x|)>>>.\n\n  Otherwise returns <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|32>>.\n\n  <subsubsection|<samp|tx-time-lock>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-time-lock'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|tx-time-lock>'>> :<1>\\<vdash\\>Time>\n\n  \\;\n\n  Returns <math|x> when <samp|is-final> returns <math|<math-tt|0><rsub|<2>>>\n  and <math|<around*|\\<llbracket\\>|<text|<samp|parse-lock>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|lockTime>>|\\<rrbracket\\>>>\n  returns <math|<injr|<around*|(|x|)>>>.\n\n  Otherwise returns <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|32>>.\n\n  <subsubsection|<samp|tx-distance-lock>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-distance-lock'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|tx-distance-lock>'>> :<1>\\<vdash\\>Distance>\n\n  \\;\n\n  When <samp|<math|2\\<leq\\><around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|version>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|32>>>>,\n  returns the greatest <math|x> of values\n  <math|\\<eta\\><rsup|S><around*|(|<injl|<around*|(|x|)>>|)>> returned by\n  <math|<around*|(|<maybe><around*|\\<llbracket\\>|<text|<samp|parse-sequence>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|inputSequence>>|\\<rrbracket\\>>|)><around*|(|i|)>>\n  for any input <math|i>, if there are any. \\ Otherwise returns\n  <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|16>>.\n\n  <subsubsection|<samp|tx-duration-lock>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-duration-lock'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|tx-duration-lock>'>> :<1>\\<vdash\\>Duration>\n\n  \\;\n\n  When <samp|<math|2\\<leq\\><around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|version>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|32>>>>,\n  returns the greatest <math|x> of values\n  \\<eta\\><rsup|S><around*|(|<injr|<around*|(|x|)>>|)> returned by\n  <math|<around*|(|<maybe><around*|\\<llbracket\\>|<text|<samp|parse-sequence>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|inputSequence>>|\\<rrbracket\\>>|)><around*|(|i|)>>\n  for any input <math|i>, if there are any. \\ Otherwise returns\n  <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|16>>.\n\n  <subsubsection|<samp|is-final>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'is-final'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|is-final>'>> :<1>\\<vdash\\><2>>\n\n  \\;\n\n  Returns <math|<math-tt|1><rsub|<2>>> when all the sequence numbers of the\n  transaction inputs are at their maximum value.\n\n  Otherwise returns <math|<math-tt|0><rsub|<2>>>.\n\n  <subsection|Transaction>\n\n  <subsubsection|<samp|script-cmr>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'script-cmr'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|script-cmr>> \\<of\\> <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|internal-key>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'internal-key'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|internal-key>> \\<of\\> <value|1>\\<vdash\\>PubKey>\n\n  <subsubsection|<samp|current-index>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-index'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-index>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|num-inputs>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'num-inputs'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|num-inputs>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|num-outputs>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'num-outputs'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|num-outputs>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|lock-time>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'lock-time'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|lock-time>> \\<of\\> <value|1>\\<vdash\\>Lock>\n\n  <subsubsection|<samp|fee>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'fee'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|fee>> \\<of\\> <value|1>\\<vdash\\><2><rsup|64>>\n\n  <subsubsection|<samp|output-value>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-value'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-value>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|64>|)>>\n\n  <subsubsection|<samp|output-script-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-script-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-script-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|total-output-value>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'total-output-value'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|total-output-value>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|64>>\n\n  <subsubsection|<samp|current-prev-outpoint>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-prev-outpoint'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-prev-outpoint>> \\<of\\>\n  <value|1>\\<vdash\\>Outpoint>\n\n  <subsubsection|<samp|current-value>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-value'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-value>> \\<of\\> <value|1>\\<vdash\\><2><rsup|64>>\n\n  <subsubsection|<samp|current-script-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-script-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-script-hash>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|current-sequence>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-sequence'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-sequence>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|current-annex-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-annex-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-annex-hash>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|current-script-sig-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-script-sig-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-script-sig-hash>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|input-prev-outpoint>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-prev-outpoint'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-prev-outpoint>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|Outpoint|)>>\n\n  <subsubsection|<samp|input-value>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-value'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-value>> \\<of\\> <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|64>|)>>\n\n  <subsubsection|<samp|input-script-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-script-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-script-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|input-sequence>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-sequence'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-sequence>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|32>|)>>\n\n  <subsubsection|<samp|input-annex-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-annex-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-annex-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>\n\n  <subsubsection|<samp|input-script-sig-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-script-sig-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-script-sig-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|total-input-value>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'total-input-value'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|total-input-value>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|64>>\n\n  <subsubsection|<samp|tapleaf-version>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tapleaf-version'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|tapleaf-version>> \\<of\\> <value|1>\\<vdash\\><2><rsup|8>>\n\n  <subsubsection|<samp|tappath>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tappath'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|tappath>> \\<of\\> <2><rsup|8>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|version>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'version'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|version>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  \\;\n\n  <em|><section|<verbatim|111...: >Elements Jets>\n\n  <subsection|Signature Hash Modes>\n\n  <subsubsection|<samp|sig-all-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'sig-all-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|sig-all-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The result of <samp|genesis-block-hash> (32 bytes).\n\n    <item>The result of <samp|genesis-block-hash> again (32 bytes).\n\n    <item>The result of <samp|tx-hash> (32 bytes).\n\n    <item>The result of <samp|tap-env-hash> (32 bytes).\n\n    <item>The result of <samp|current-index> (Note: this is in big endian\n    format) (4 bytes).\n  </itemize-dot>\n\n  \\;\n\n  Note: the two copies of the <samp|genesis-block-hash> values effectively\n  makes this result a BIP-340 style tagged hash.\n\n  <subsubsection|<samp|tx-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|tx-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The result of <samp|version> (Note: this is in big endian format)\n    (4 bytes).\n\n    <item>The result of <samp|lock> (Note: this is in big endian format) (4\n    bytes).\n\n    <item>The result of <samp|inputs-hash> (32 bytes).\n\n    <item>The result of <samp|outputs-hash> (32 bytes).\n\n    <item>The result of <samp|issuances-hash> (32 bytes).\n\n    <item>The result of <samp|output-surjection-proofs-hash> (32 bytes).\n\n    <item>The result of <samp|input-utxos-hash> (32 bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|tap-env-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tap-env-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|tap-env-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The result of <samp|tapleaf-hash> (32 bytes).\n\n    <item>The result of <samp|tappath-hash> (32 bytes).\n\n    <item>The result of <samp|internal-key> (32 bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|outputs-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'outputs-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|outputs-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The result of <samp|output-amounts-hash> (32 bytes).\n\n    <item>The result of <samp|output-nonces-hash> (32 bytes).\n\n    <item>The result of <samp|output-scripts-hash> (32 bytes).\n\n    <item>The result of <samp|output-range-proofs-hash> (32 bytes).\n  </itemize-dot>\n\n  \\;\n\n  Note: the result of <samp|output-surjection-proofs-hash> is specifically\n  excluded because surjection proofs are dependent on the inputs as well as\n  the output. See also <samp|tx-hash>.\n\n  <subsubsection|<samp|inputs-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'inputs-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|inputs-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The result of <samp|input-outpoints-hash> (32 bytes).\n\n    <item>The result of <samp|input-sequences-hash> (32 bytes).\n\n    <item>The result of <samp|input-annexes-hash> (32 bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|issuances-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuances-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|issuances-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The result of <samp|issuance-asset-amounts-hash> (32 bytes).\n\n    <item>The result of <samp|issuance-token-amounts-hash> (32 bytes).\n\n    <item>The result of <samp|issuance-range-proofs-hash> (32 bytes).\n\n    <item>The result of <samp|issuance-blinding-entropy-hash> (32 bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|input-utxos-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-utxos-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-utxos-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The result of <samp|input-amounts-hash> (32 bytes).\n\n    <item>The result of <samp|input-scripts-hash> (32 bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|output-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|output-hash>>> :<2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  \\;\n\n  If the input value is a valid output index, then\n  <math|<text|<samp|<samp|output-hash>>> >returns\n  <math|\\<eta\\><rsup|<maybe>>> of the SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The serialization of the output's asset and amount fields.\n\n    <item>The serialization of the output's nonce field.\n\n    <item>The SHA256 hash of the output's scriptPubKey.\n\n    <item>The SHA256 hash of the output's range proof..\n  </itemize-dot>\n\n  Otherwise if the input value is not a valid output index then\n  <math|<text|<samp|<samp|output-hash>>> >returns\n  <math|\\<emptyset\\><rsup|<maybe>>>.\n\n  \\;\n\n  Note: the result of <samp|output-surjection-proof> is specifically excluded\n  because surjection proofs are dependent on the inputs as well as the\n  output.\n\n  <subsubsection|<samp|output-amounts-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-amounts-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|output-amounts-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the serialization of each output's asset and\n  amount fields.\n\n  \\;\n\n  <with|font-series|bold|><subsubsection|<samp|output-scripts-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-scripts-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|output-scripts-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the concatenation of the SHA256 hash of each\n  output's scriptPubKey.\n\n  \\;\n\n  <subsubsection|<samp|output-nonces-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-nonces-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|output-nonces-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the serialization of each output's nonce field.\n\n  \\;\n\n  <subsubsection|<samp|output-range-proofs-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-range-proofs-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|output-range-proofs-hash>>>\n  :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the concatenation of the SHA256 hash of each\n  output's range proof.\n\n  \\;\n\n  Note that if the output's amount is explicit then the range proof is\n  considered the empty string.\n\n  <subsubsection|<samp|output-surjection-proofs-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-surjection-proofs-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|output-surjection-proofs-hash>>>\n  :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the concatenation of the SHA256 hash of each\n  output's surjection proof.\n\n  \\;\n\n  Note that if the output's asset is explicit then the surjection proof is\n  considered the empty string.\n\n  <subsubsection|<samp|input-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-hash>>> :<2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  \\;\n\n  If the input value is a valid input index, then\n  <math|<text|<samp|<samp|input-hash>>> >returns <math|\\<eta\\><rsup|<maybe>>>\n  of the SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>If the input is not a pegin, then the byte <verbatim|0x00>.\n\n    <item>If the input is a pegin, then the byte <verbatim|0x01> followed by\n    the parent chain's genesis hash (32 bytes).\n\n    <item>The input's serialized previous transaction id (32 bytes).\n\n    <item>The input's previous transaction index in big endian format (4\n    bytes).\n\n    <item>The inputs sequence number in big endian format (4 bytes).\n\n    <item>If the input has no annex, or isn't a taproot spend, then the byte\n    <verbatim|0x00>.\n\n    <item>If the input has an annex, then the byte <verbatim|0x01> followed\n    by a SHA256 hash of the annex (32 bytes).\n  </itemize-dot>\n\n  Otherwise if the input value is not a valid input index then\n  <math|<text|<samp|<samp|input-hash>>> >returns\n  <math|\\<emptyset\\><rsup|<maybe>>>.\n\n  <subsubsection|<samp|input-outpoints-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-outpoints-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-outpoints-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the concatenation of the following for every\n  input.\n\n  <\\itemize-dot>\n    <item>If the input is not a pegin, then the byte <verbatim|0x00>.\n\n    <item>If the input is a pegin, then the byte <verbatim|0x01> followed by\n    the parent chain's genesis hash (32 bytes).\n\n    <item>The input's serialized previous transaction id (32 bytes).\n\n    <item>The input's previous transaction index in big endian format (4\n    bytes).\n  </itemize-dot>\n\n  \\;\n\n  IMPORTANT: the index is serialized in big endian format rather than little\n  endian format.\n\n  <subsubsection|<samp|input-sequences-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-sequences-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-sequences-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the concatenation of the following for every\n  input.\n\n  <\\itemize-dot>\n    <item>The inputs sequence number in big endian format (4 bytes).\n  </itemize-dot>\n\n  \\;\n\n  IMPORTANT, the sequence number is serialized in big endian format rather\n  than little endian format.\n\n  <subsubsection|<samp|input-annexes-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-annexes-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-annexes-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the concatenation of the following for every\n  input.\n\n  <\\itemize-dot>\n    <item>If the input has no annex, or isn't a taproot spend, then the byte\n    <verbatim|0x00>.\n\n    <item>If the input has an annex, then the byte <verbatim|0x01> followed\n    by a SHA256 hash of the annex (32 bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|input-script-sigs-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-script-sigs-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-script-sigs-hash>>>\n  :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the concatenation of the SHA256 hash of each\n  input's scriptSig.\n\n  \\;\n\n  Note that if an input's UTXO uses segwit, then it's scriptSig will\n  necessarily be the empty string. \\ In such cases we still use the SHA256\n  hash of the empty string.\n\n  <subsubsection|<samp|issuance-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|issuance-hash>>>\n  :<2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  \\;\n\n  If the input value is a valid input index, then <samp|<samp|issuance-hash>>\n  returns <math|\\<eta\\><rsup|<maybe>>> of the SHA256 hash of the following:\n\n  <\\enumerate>\n    <item>The asset issuance:\n\n    <\\itemize-dot>\n      <item>If the input has no issuance then two bytes <verbatim|0x00>\n      <verbatim|0x00>.\n\n      <item>If the input is has a new issuance then the byte <verbatim|0x01>\n      followed by a serialization of the calculated issued asset id (32\n      bytes) followed by the serialization of the (possibly confidential)\n      issued asset amount (9 bytes or 33 bytes).\n\n      <item>If the input is has a reissuance then the byte <verbatim|0x01>\n      followed by a serialization of the issued asset id (32 bytes), followed\n      by the serialization of the (possibly confidential) issued asset amount\n      (9 bytes or 33 bytes).\n    </itemize-dot>\n\n    <item>The token issuance:\n\n    <\\itemize-dot>\n      <item>If the input has no issuance then another two bytes\n      <verbatim|0x00> <verbatim|0x00>.\n\n      <item>If the input is has a new issuance then the byte <verbatim|0x01>\n      followed by a serialization of the calculated issued token id (32\n      bytes) followed by the serialization of the (possibly confidential)\n      issued token amount (9 bytes or 33 bytes).\n\n      <item>If the input is has a reissuance then the byte <verbatim|0x01>\n      followed by a serialization of the issued token id (32 bytes), followed\n      by the serialization of the explicit 0 amount (i.e <verbatim|0x01 0x00\n      0x00 0x00 0x00 0x00 0x00 0x00 0x00>) \\ (9 bytes).\n    </itemize-dot>\n\n    <item>The range proofs:\n\n    <\\itemize-dot>\n      <item>The SHA256 hash of the range proof of the input's issuance asset\n      amount (32 bytes).\n\n      <item>The SHA256 hash of the range proof of the input's issuance token\n      amount (32 bytes).\n    </itemize-dot>\n\n    These will be the hashes of the empty proof in case there is no issuance.\n\n    <item>The blinding entropy:\n\n    <\\itemize-dot>\n      <item>If the input has no issuance then another <verbatim|0x00> byte.\n\n      <item>If the input is has a new issuance then the byte <verbatim|0x01>\n      followed by 32 <verbatim|0x00> bytes and the new issuance's contract\n      hash field (32 bytes).\n\n      <item>If the input is has reissuance then the byte <verbatim|0x01>\n      followed by a serializaiton of the reissuance's blinding nonce field\n      (32 bytes) and the reissuance's entropy field (32 bytes).\n    </itemize-dot>\n  </enumerate>\n\n  Otherwise if the input value is not a valid input index then\n  <math|<text|<samp|<samp|issuance-hash>>>> returns\n  <math|\\<emptyset\\><rsup|<maybe>>>.\n\n  <subsubsection|<samp|issuance-asset-amounts-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-asset-amounts-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|issuance-asset-amounts-hash>>>\n  :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the concatenation of the following for every\n  input.\n\n  <\\itemize-dot>\n    <item>If the input has no issuance then two bytes <verbatim|0x00>\n    <verbatim|0x00>.\n\n    <item>If the input is has a new issuance then the byte <verbatim|0x01>\n    followed by a serialization of the calculated issued asset id (32 bytes)\n    followed by the serialization of the (possibly confidential) issued asset\n    amount (9 bytes or 33 bytes).\n\n    <item>If the input is has a reissuance then the byte <verbatim|0x01>\n    followed by a serialization of the issued asset id (32 bytes), followed\n    by the serialization of the (possibly confidential) issued asset amount\n    (9 bytes or 33 bytes).\n  </itemize-dot>\n\n  \\;\n\n  IMPORTANT: If there is an issuance but there are no asset issued (i.e. the\n  amount is null) we serialize the vase as the explicit 0 amount, (i.e.\n  <verbatim|0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00>).\n\n  \\;\n\n  Note, the issuance asset id is serialized in the same format as an explicit\n  asset id would be.\n\n  <subsubsection|<samp|issuance-token-amounts-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-token-amounts-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|issuance-token-amounts-hash>>>\n  :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the concatenation of the following for every\n  input.\n\n  <\\itemize-dot>\n    <item>If the input has no issuance then two bytes <verbatim|0x00>\n    <verbatim|0x00>.\n\n    <item>If the input is has a new issuance then the byte <verbatim|0x01>\n    followed by a serialization of the calculated issued token id (32 bytes)\n    followed by the serialization of the (possibly confidential) issued token\n    amount (9 bytes or 33 bytes).\n\n    <item>If the input is has a reissuance then the byte <verbatim|0x01>\n    followed by a serialization of the issued token id (32 bytes), followed\n    by the serialization of the explicit 0 amount (i.e <verbatim|0x01 0x00\n    0x00 0x00 0x00 0x00 0x00 0x00 0x00>) \\ (9 bytes).\n  </itemize-dot>\n\n  \\;\n\n  IMPORTANT: If there is an issuance but there are no tokens issued (i.e. the\n  amount is null) we serialize the vase as the explicit 0 amount, (i.e.\n  <verbatim|0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00>).\n\n  \\;\n\n  Note, the issuance token id is serialized in the same format as an explicit\n  asset id would be.\n\n  <subsubsection|<samp|issuance-range-proofs-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-range-proofs-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|issuance-range-proofs-hash>>>\n  :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the concatenation of the following for every\n  input.\n\n  <\\itemize-dot>\n    <item>The SHA256 hash of the range proof of the input's issuance asset\n    amount (32 bytes).\n\n    <item>The SHA256 hash of the range proof of the input's issuance token\n    amount (32 bytes).\n  </itemize-dot>\n\n  Note that each the range proof is considered to be the empty string in the\n  case there is no issuance, or if the asset or token amount doesn't exist\n  (i.e is null). The SHA256 hash of the empty string is still used in these\n  cases.\n\n  \\;\n\n  <subsubsection|<samp|issuance-blinding-entropy-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-blinding-entropy-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|issuance-blinding-entropy-hash>>>\n  :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the concatenation of the following for every\n  input.\n\n  <\\itemize-dot>\n    <item>If the input has no issuance then the byte <verbatim|0x00>.\n\n    <item>If the input is has a new issuance then the byte <verbatim|0x01>\n    followed by 32 <verbatim|0x00> bytes and the new issuance's contract hash\n    field (32 bytes).\n\n    <item>If the input is has reissuance then the byte <verbatim|0x01>\n    followed by a serializaiton of the reissuance's blinding nonce field (32\n    bytes) and the reissuance's entropy field (32 bytes).\n  </itemize-dot>\n\n  \\;\n\n  Note that if the issuance is a new issuance then the blinding nonce field\n  is 32 <verbatim|0x00> bytes and new issuance's contract hash\n\n  <subsubsection|<samp|input-utxo-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-utxo-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-utxo-hash>>>\n  :<2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  \\;\n\n  If the input value is a valid input index, then\n  <math|<text|<samp|<samp|input-utxo-hash>>> >returns\n  <math|\\<eta\\><rsup|<maybe>>> of the SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The serialization of the input UTXO's asset and amount fields.\n\n    <item>The SHA256 hash of the input UTXO's scriptPubKey.\n  </itemize-dot>\n\n  Otherwise if the input value is not a valid input index then\n  <math|<text|<samp|<samp|input-utxo-hash>>> >returns\n  <math|\\<emptyset\\><rsup|<maybe>>>.\n\n  <subsubsection|<samp|input-amounts-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-amounts-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-amounts-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the serialization of each input UTXO's asset and\n  amount fields.\n\n  <subsubsection|<samp|input-scripts-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-scripts-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|input-scripts-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns the SHA256 hash of the concatenation of the SHA256 hash of each\n  input UTXO's scriptPubKey.\n\n  \\;\n\n  <subsubsection|<samp|tapleaf-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tapleaf-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|tapleaf-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The hash of the ASCII string <verbatim|TapLeaf/elements> (32\n    bytes).\n\n    <item>The hash of the ASCII string <verbatim|TapLeaf/elements> again (32\n    bytes).\n\n    <item>The result of <samp|tapleaf-version> (1 byte).\n\n    <item>The byte <verbatim|0x20> (1 byte).\n\n    <item>The result of <samp|scriptCMR> (32 bytes).\n  </itemize-dot>\n\n  \\;\n\n  Note: this matches Element's modified BIP-0341 definition of tapleaf hash.\n\n  <subsubsection|<samp|tappath-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tappath-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|tappath-hash>>> :<1>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Returns a hash of the current input's control block excluding the leaf\n  version and the taproot internal key. \\ Using the notation of BIP-0341, it\n  returns the SHA256 hash of <math|c<around*|[|33:33+32m|]>>.\n\n  <subsubsection|<samp|outpoint-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'outpoint-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <\\math>\n    <text|<samp|<samp|outpoint-hash>>> :Ctx8\\<times\\><around*|(|<maybe><around*|(|<2><rsup|256>|)>\\<times\\>Outpoint|)>\\<vdash\\>Ctx8\n  </math>\n\n  \\;\n\n  Continues a SHA256 hash with an optional pegin and an outpoint by appending\n  the following:\n\n  <\\itemize-dot>\n    <item>If the input is not a pegin, then the byte <verbatim|0x00>.\n\n    <item>If the input is a pegin, then the byte <verbatim|0x01> followed by\n    the given parent genesis hash (32 bytes).\n\n    <item>The input's previous transaction id (32 bytes).\n\n    <item>The input's previous transaction index in big endian format (4\n    bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|asset-amount-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'asset-amount-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <\\math>\n    <text|<samp|<samp|asset-amount-hash>>>\n    :Ctx8\\<times\\><around*|(|Asset\\<times\\>Amount|)>\\<vdash\\>Ctx8\n\n    \\;\n  </math>\n\n  Continues a SHA256 hash with the serialization of a confidential asset\n  followed by the serialization of a confidential amount.\n\n  <subsubsection|<samp|nonce-hash>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'nonce-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\n  </math>\n\n  <\\math>\n    <text|<samp|<samp|nonce-hash>>> :Ctx8\\<times\\><around*|(|<maybe><around*|(|Nonce|)>|)>\\<vdash\\>Ctx8\n  </math>\n\n  \\;\n\n  Continues a SHA256 hash with the serialization of an optional nonce.\n\n  <subsubsection|<samp|annex-hash>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'annex-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\n  </math>\n\n  <\\math>\n    <text|<samp|<samp|annex-hash>>> :Ctx8\\<times\\><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>\\<vdash\\>Ctx8\n  </math>\n\n  \\;\n\n  Continues a SHA256 hash with an optional hash by appending the following:\n\n  <\\itemize-dot>\n    <item>If there is no hash, then the byte <verbatim|0x00>.\n\n    <item>If there is a hash, then the byte <verbatim|0x01> followed by the\n    given hash (32 bytes).\n  </itemize-dot>\n\n  <subsubsection|<samp|build-tapleaf-simplicity>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'build-tapleaf-simplicity'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\n  </math>\n\n  <\\math>\n    <text|<samp|<samp|build-tapleaf-simplicity>>>\n    :<2><rsup|256>\\<vdash\\><2><rsup|256>\n  </math>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The hash of the ASCII string <verbatim|TapLeaf/elements> (32\n    bytes).\n\n    <item>The hash of the ASCII string <verbatim|TapLeaf/elements> again (32\n    bytes).\n\n    <item>The byte <verbatim|0xbe> (1 byte) for the Simplicity tapleaf\n    version number.\n\n    <item>The byte <verbatim|0x20> (1 byte).\n\n    <item>The input (32 bytes) which should be the CMR of a Simplicity\n    program.\n  </itemize-dot>\n\n  <subsubsection|<samp|build-tapbranch>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'build-tapbranch'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\n  </math>\n\n  <\\math>\n    <text|<samp|<samp|build-tapbranch>>> :<2><rsup|256>\\<times\\><2><rsup|256>\\<vdash\\><2><rsup|256>\n  </math>\n\n  \\;\n\n  Returns a SHA256 hash of the following:\n\n  <\\itemize-dot>\n    <item>The hash of the ASCII string <verbatim|TapBranch/elements> (32\n    bytes).\n\n    <item>The hash of the ASCII string <verbatim|TapBranch/elements> again\n    (32 bytes).\n\n    <item>The lexicographically smaller of the two inputs (32 bytes).\n\n    <item>The lexicographically larger of the two inputs (32 bytes).\n  </itemize-dot>\n\n  This builds a taproot from two branches.\n\n  <subsubsection|<samp|build-taptweak>>\n\n  \\;\n\n  <\\math>\n    <rep|<text|<samp|'build-taptweak-simplicity'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>\n  </math>\n\n  <\\math>\n    <text|<samp|<samp|build-taptweak>>> :Pubkey\\<times\\><2><rsup|256>\\<vdash\\><2><rsup|256>\n  </math>\n\n  \\;\n\n  This implements <verbatim|<code|taproot_tweak_pubkey>> from BIP-0341.\n\n  Note that this jet can fail in the following situations:\n\n  <\\enumerate>\n    <item>The input x-only public key is off curve or exceeds the field size.\n\n    <item>The internal hash value <math|t> exceeds the secp256k1 group order.\n\n    <item>The generated tweaked point is infinity, and thus has no valid\n    x-only public key.\n  </enumerate>\n\n  Note that situations 2 and 3 are cryptographically impossible to occur.\n\n  <subsection|Time Locks>\n\n  In this section we define <math|Height\\<assign\\><2><rsup|32>>,\n  <math|Time\\<assign\\><2><rsup|32>>, <math|Distance\\<assign\\><2><rsup|16>>,\n  and <math|Duration = <2><rsup|16>>.\n\n  <subsubsection|<samp|check-lock-height>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-height'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|check-lock-height>>> :Height\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'tx-lock-height'> is greater than\n  or equal to the input.\n\n  <subsubsection|<samp|check-lock-time>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-time'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|check-lock-time>'>> :Time\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'tx-lock-time'> is greater than or\n  equal to the input.\n\n  <subsubsection|<samp|check-lock-distance>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-distance'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|check-lock-distance>'>> :Distance\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'check-lock-distance'> is greater\n  than or equal to the input.\n\n  <subsubsection|<samp|check-lock-duration>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'check-lock-duration'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|check-lock-duration>'>> :Duration\\<vdash\\><1>>\n\n  \\;\n\n  Asserts that the value returned by <samp|'check-lock-duration'> is greater\n  than or equal to the input.\n\n  <subsubsection|<samp|tx-lock-height>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-lock-height'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|<samp|tx-lock-height>>> :<1>\\<vdash\\>Height>\n\n  \\;\n\n  Returns <math|x> when <samp|is-final> returns <math|<math-tt|0><rsub|<2>>>\n  and <math|<around*|\\<llbracket\\>|<text|<samp|parse-lock>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|lockTime>>|\\<rrbracket\\>>>\n  returns <math|<injl|<around*|(|x|)>>>.\n\n  Otherwise returns <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|32>>.\n\n  <subsubsection|<samp|tx-lock-time>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-lock-time'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|tx-lock-time>'>> :<1>\\<vdash\\>Time>\n\n  \\;\n\n  Returns <math|x> when <samp|is-final> returns <math|<math-tt|0><rsub|<2>>>\n  and <math|<around*|\\<llbracket\\>|<text|<samp|parse-lock>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|lockTime>>|\\<rrbracket\\>>>\n  returns <math|<injr|<around*|(|x|)>>>.\n\n  Otherwise returns <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|32>>.\n\n  <subsubsection|<samp|tx-lock-distance>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-lock-distance'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|tx-lock-distance>'>> :<1>\\<vdash\\>Distance>\n\n  \\;\n\n  When <samp|<math|2\\<leq\\><around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|version>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|32>>>>,\n  returns the greatest <math|x> of values\n  <math|\\<eta\\><rsup|S><around*|(|<injl|<around*|(|x|)>>|)>> returned by\n  <math|<around*|(|<maybe><around*|\\<llbracket\\>|<text|<samp|parse-sequence>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|inputSequence>>|\\<rrbracket\\>>|)><around*|(|i|)>>\n  for any input <math|i>, if there are any. \\ Otherwise returns\n  <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|16>>.\n\n  <subsubsection|<samp|tx-lock-duration>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-lock-duration'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'<samp|tx-lock-duration>'>> :<1>\\<vdash\\>Duration>\n\n  \\;\n\n  When <samp|<math|2\\<leq\\><around*|\\<lceil\\>|<around*|\\<llbracket\\>|<text|<samp|version>>|\\<rrbracket\\>><around*|\\<langle\\>||\\<rangle\\>>|\\<rceil\\>><rsub|2<rsup|32>>>>,\n  returns the greatest <math|x> of values\n  \\<eta\\><rsup|S><around*|(|<injr|<around*|(|x|)>>|)> returned by\n  <math|<around*|(|<maybe><around*|\\<llbracket\\>|<text|<samp|parse-sequence>>|\\<rrbracket\\>>\\<circ\\><around*|\\<llbracket\\>|<text|<samp|inputSequence>>|\\<rrbracket\\>>|)><around*|(|i|)>>\n  for any input <math|i>, if there are any. \\ Otherwise returns\n  <math|<around*|\\<lfloor\\>|0|\\<rfloor\\>><rsub|16>>.\n\n  <subsubsection|<samp|tx-is-final>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tx-is-final'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|'tx-<samp|is-final>'>> :<1>\\<vdash\\><2>>\n\n  \\;\n\n  Returns <math|<math-tt|1><rsub|<2>>> when all the sequence numbers of the\n  transaction inputs are at their maximum value.\n\n  Otherwise returns <math|<math-tt|0><rsub|<2>>>.\n\n  <subsection|Issuance>\n\n  <subsubsection|<samp|issuance>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance>> :Index\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2>|)>|)>>\n\n  \\;\n\n  Returns <math|\\<eta\\><around*|(|\\<eta\\><around*|(|<math-tt|0><rsub|<2>>|)>|)><rsub|>>\n  when the given input has a new issuance. Returns\n  <math|\\<eta\\><around*|(|\\<eta\\><around*|(|<math-tt|1><rsub|<2>>|)>|)><rsub|>>\n  when the given input has a reissuance. Returns\n  <math|\\<eta\\><around*|(|\\<emptyset\\>|)><rsub|>> when the given input has no\n  issuance.\n\n  Otherwise returns <math|\\<emptyset\\>> when there is no input of the given\n  index.\n\n  <subsubsection|<samp|issuance-asset>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-asset'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance-asset>> :Index\\<vdash\\><maybe><around*|(|<maybe><around*|(|ExplicitAsset|)>|)>>\n\n  \\;\n\n  Returns <math|\\<eta\\><around*|(|\\<eta\\><around*|(|x|)>|)><rsub|>> when the\n  given input has an issuance with asset ID <math|x>. Returns\n  <math|\\<eta\\><around*|(|\\<emptyset\\>|)><rsub|>> when the given input has no\n  issuance.\n\n  Otherwise returns <math|\\<emptyset\\>> when there is no input of the given\n  index.\n\n  <subsubsection|<samp|issuance-token>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-token'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance-token>> :Index\\<vdash\\><maybe><around*|(|<maybe><around*|(|ExplicitAsset|)>|)>>\n\n  \\;\n\n  Returns <math|\\<eta\\><around*|(|\\<eta\\><around*|(|x|)>|)><rsub|>> when the\n  given input has an issuance with reissuance token ID <math|x>. Returns\n  <math|\\<eta\\><around*|(|\\<emptyset\\>|)><rsub|>> when the given input has no\n  issuance.\n\n  Otherwise returns <math|\\<emptyset\\>> when there is no input of the given\n  index.\n\n  <subsubsection|<samp|issuance-entropy>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-token'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance-token>> :Index\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>\n\n  \\;\n\n  Returns <math|\\<eta\\><around*|(|\\<eta\\><around*|(|x|)>|)><rsub|>> when the\n  given input has an reissuance with entropy <math|x>, or if there is a new\n  issuance whose computed entropy is <math|x>. Returns\n  <math|\\<eta\\><around*|(|\\<emptyset\\>|)><rsub|>> when the given input has no\n  issuance.\n\n  Otherwise returns <math|\\<emptyset\\>> when there is no input of the given\n  index.\n\n  <subsubsection|<samp|calculate-issuance-entropy>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'calculate-issuance-entropy'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|calculate-issuance-entropy>>\n  :Outpoint\\<times\\><2><rsup|256>\\<vdash\\><2><rsup|256>>\n\n  \\;\n\n  Calculate the entropy value from a given ouptoint and contract hash. \\ This\n  entropy value is used to compute issued asset and token IDs (see below).\n\n  <subsubsection|<samp|calculate-asset>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'calculate-asset'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|calculate-asset>> :<2><rsup|256>\\<vdash\\>ExplicitAsset>\n\n  \\;\n\n  Calculate the issued asset id from a given entropy value.\n\n  <subsubsection|<samp|calculate-explicit-token>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'calculate-explict-token'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|calculate-explict-token>>\n  :<2><rsup|256>\\<vdash\\>ExplicitAsset>\n\n  \\;\n\n  Calculate the reissuance token id from a given entropy value for assets\n  with explicit issued amounts.\n\n  <subsubsection|<samp|calculate-confidential-token>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'calculate-confidential-token'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|calculate-confidential-token>>\n  :<2><rsup|256>\\<vdash\\>ExplicitAsset>\n\n  \\;\n\n  Calculate the reissuance token id from a given entropy value for assets\n  with confidential issued amounts.\n\n  <subsubsection|<samp|lbtc-asset>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'lbtc-asset'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|lbtc-asset>> :<value|1>\\<vdash\\>ExplicitAsset>\n\n  \\;\n\n  Returns the asset for liquid BTC.\n\n  <subsection|Transaction>\n\n  <subsubsection|<samp|script-cmr>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'script-cmr'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|script-cmr>> \\<of\\> <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|internal-key>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'internal-key'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|internal-key>> \\<of\\> <value|1>\\<vdash\\>PubKey>\n\n  <subsubsection|<samp|current-index>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-index'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-index>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|num-inputs>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'num-inputs'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|num-inputs>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|num-outputs>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'num-outputs'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|num-outputs>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|lock-time>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'lock-time'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|lock-time>> \\<of\\> <value|1>\\<vdash\\>Lock>\n\n  <subsubsection|<samp|output-asset>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-asset'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-asset>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|Asset|)>>\n\n  <subsubsection|<samp|output-amount>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-amount'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-amount>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|Asset\\<times\\>Amount|)>>\n\n  <subsubsection|<samp|output-nonce>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-nonce'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-nonce>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|Nonce|)>|)>>\n\n  <subsubsection|<samp|output-script-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-script-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-script-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|output-null-datum>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-null-datum'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-null-datum>> \\<of\\>\n  <2><rsup|32>\\<times\\><2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|2>\\<times\\><2><rsup|256>+<around*|(|<2>+<2><rsup|4>|)>|)>|)>>\n\n  <subsubsection|<samp|output-is-fee>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-is-fee'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-is-fee>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2>|)>>\n\n  <subsubsection|<samp|output-surjection-proof>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-surjection-proof'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-surjection-proof>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|output-range-proof>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'output-range-proof'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|output-range-proof>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|total-fee>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'total-fee'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|total-fee>> \\<of\\> ExplicitAsset\\<vdash\\>ExplicitAmount>\n\n  <subsubsection|<samp|current-pegin>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-pegin'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-pegin>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|current-prev-outpoint>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-prev-outpoint'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-prev-outpoint>> \\<of\\>\n  <value|1>\\<vdash\\>Outpoint>\n\n  <subsubsection|<samp|current-asset>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-asset'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-asset>> \\<of\\> <value|1>\\<vdash\\>Asset>\n\n  <subsubsection|<samp|current-amount>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-amount'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-amount>> \\<of\\>\n  <value|1>\\<vdash\\>Asset\\<times\\>Amount>\n\n  <subsubsection|<samp|current-script-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-script-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-script-hash>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|current-sequence>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-sequence'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-sequence>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|current-annex-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-annex-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-annex-hash>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|current-script-sig-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-script-sig-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-script-sig-hash>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|current-reissuance-blinding>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-reissuance-blinding'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-reissuance-blinding>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|ExplicitNonce|)>>\n\n  <subsubsection|<samp|current-new-issuance-contract>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-new-issuance-contract'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-new-issuance-contract>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|current-reissuance-entropy>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-reissuance-entropy'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-reissuance-entropy>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|current-issuance-asset-amount>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-issuance-asset-amount'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-issuance-asset-amount>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|Amount|)>>\n\n  <subsubsection|<samp|current-issuance-token-amount>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-issuance-token-amount'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-issuance-token-amount>> \\<of\\>\n  <value|1>\\<vdash\\><maybe><around*|(|Amount|)>>\n\n  <subsubsection|<samp|current-issuance-asset-proof>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-issuance-asset-proof'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-issuance-asset-proof>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|current-issuance-token-proof>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'current-issuance-token-proof'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|current-issuance-token-proof>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|input-pegin>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-pegin'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-pegin>> \\<of\\> <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>\n\n  <subsubsection|<samp|input-prev-outpoint>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-prev-outpoint'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-prev-outpoint>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|Outpoint|)>>\n\n  <subsubsection|<samp|input-asset>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-asset'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-asset>> \\<of\\> <2><rsup|32>\\<vdash\\><maybe><around*|(|Asset|)>>\n\n  <subsubsection|<samp|input-amount>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-amount'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-amount>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|Asset\\<times\\>Amount|)>>\n\n  <subsubsection|<samp|input-script-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-script-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-script-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|input-sequence>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-sequence'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-sequence>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|32>|)>>\n\n  <subsubsection|<samp|input-annex-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-annex-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-annex-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>\n\n  <subsubsection|<samp|input-script-sig-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'input-script-sig-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|input-script-sig-hash>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|reissuance-blinding>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'reissuance-blinding'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|reissuance-blinding>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|ExplicitNonce|)>|)>>\n\n  <subsubsection|<samp|new-issuance-contract>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'new-issuance-contract'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|new-issuance-contract>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>\n\n  <subsubsection|<samp|reissuance-entropy>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'reissuance-entropy'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|reissuance-entropy>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|<2><rsup|256>|)>|)>>\n\n  <subsubsection|<samp|issuance-asset-amount>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-asset-amount'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance-asset-amount>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|Amount|)>|)>>\n\n  <subsubsection|<samp|issuance-token-amount>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-token-amount'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance-token-amount>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<maybe><around*|(|TokenAmount|)>|)>>\n\n  <subsubsection|<samp|issuance-asset-proof>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-asset-proof'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance-asset-proof>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|issuance-token-proof>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'issuance-token-proof'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|issuance-token-proof>> \\<of\\>\n  <2><rsup|32>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  \\;\n\n  <subsubsection|<samp|tapleaf-version>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tapleaf-version'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|tapleaf-version>> \\<of\\> <value|1>\\<vdash\\><2><rsup|8>>\n\n  <subsubsection|<samp|tappath>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'tappath'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|tappath>> \\<of\\> <2><rsup|8>\\<vdash\\><maybe><around*|(|<2><rsup|256>|)>>\n\n  <subsubsection|<samp|version>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'version'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|version>> \\<of\\> <value|1>\\<vdash\\><2><rsup|32>>\n\n  <subsubsection|<samp|genesis-block-hash>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'genesis-block-hash'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|genesis-block-hash>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>>\n\n  <subsubsection|<samp|transaction-id>>\n\n  \\;\n\n  <math|<rep|<text|<samp|'transaction-id'>>|>\\<assign\\><verbatim|<around*|[|111|]>><rsub|<2>>\\<cdummy\\><rep|<value|subsection-nr>|>\\<cdummy\\><rep|<value|subsubsection-nr>|>>\n\n  <math|<text|<samp|transaction-id>> \\<of\\>\n  <value|1>\\<vdash\\><2><rsup|256>><appendix|Alternative Serialization of\n  Simplicity DAGs><label|app:AltSerialization>\n\n  <with|color|red|DEPRECATED>\n\n  This appendix presents an alternative, byte-oriented prefix code for\n  Simplicity DAGs. This code is not as compact as the bit-oriented code\n  presented in Section<nbsp><reference|ss:Serialization> and it imposes some\n  arbitrary limits on the size of the DAG and witness values. Its only\n  advantage is that it might be faster to decode. This code probably should\n  not be used by any application and maybe should be removed from this\n  report.\n\n  First we define a byte-string serialization for numbers <math|i> known to\n  be less than a bound <math|b> by determining the minimum number of bytes\n  needed to fit a number less than <math|b>.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|byteCode<around*|(|1,0|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|b,i|)>>|<cell|\\<assign\\>>|<cell|byteCode<around*|(|2<rsup|*8*n>,q|)>\\<cdummy\\>BE<around*|(|<around*|\\<lfloor\\>|i|\\<rfloor\\>><rsub|8>|)><htab|5mm>where\n    2<rsup|8>*q\\<leq\\>i\\<less\\>2<rsup|8><around*|(|q+1|)> and\n    2<rsup|8*n>\\<less\\>b\\<leq\\>2<rsup|8*<around*|(|n+1|)>> and i\\<less\\>b>>>>\n  </eqnarray*>\n\n  \\;\n\n  For witness data, which is a bit-string, we group the bits into bytes to\n  form a byte-string, padding the least significant bits with zero bits.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|bytePad<around*|(|\\<epsilon\\>|)>>|<cell|\\<assign\\>>|<cell|\\<epsilon\\><rsub|<2><rsup|8>>>>|<row|<cell|bytePad<around*|(|b<rsub|0>\\<blacktriangleleft\\>b<rsub|1>\\<blacktriangleleft\\>b<rsub|2>\\<blacktriangleleft\\>b<rsub|3>\\<blacktriangleleft\\>b<rsub|4>\\<blacktriangleleft\\>b<rsub|5>\\<blacktriangleleft\\>b<rsub|6>\\<blacktriangleleft\\>b<rsub|7>\\<blacktriangleleft\\>v|)>>|<cell|\\<assign\\>>|<cell|<around*|\\<langle\\>|<around*|\\<langle\\>|<around*|\\<langle\\>|b<rsub|0>,b<rsub|1>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|2>,b<rsub|3>|\\<rangle\\>>|\\<rangle\\>>,<around*|\\<langle\\>|<around*|\\<langle\\>|b<rsub|4>,b<rsub|5>|\\<rangle\\>>,<around*|\\<langle\\>|b<rsub|6>,b<rsub|7>|\\<rangle\\>>|\\<rangle\\>>|\\<rangle\\>>\\<blacktriangleleft\\>bytePad<around*|(|v|)>>>|<row|<cell|bytePad<around*|(|v|)>>|<cell|\\<assign\\>>|<cell|bytePad<around*|(|v\\<cdummy\\><verbatim|<around*|[|0|]>><rsup|8-<around*|\\||v|\\|>>|)><htab|5mm>when\n    0\\<less\\><around*|\\||v|\\|>\\<less\\>8>>>>\n  </eqnarray*>\n\n  Note that by itself <math|bytePad> is not a prefix code and forgets how\n  many bits where in the vector. Both issues are addressed by prefixing this\n  encoding with the length of the number of bits in the original bit-string.\n\n  Next we define a byte-string serialization for Node,\n  <math|byteCode\\<of\\>\\<bbb-N\\>\\<times\\>Node\\<rightarrow\\><around*|(|<2><rsup|8>|)><rsup|\\<ast\\>>>.\n  The first parameter to <math|byteCode>, <math|k>, is the index at which the\n  Node occurs in the Dag. It is used to determine the bound on the size of\n  the sub-expression offsets for serialization of those values.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|byteCode<around*|(|k,<text|<samp|`comp'>> 1\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|00>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`case'>>\n    1 1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|01>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`pair'>>\n    1 1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|02>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`disconnect'>>\n    1 1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|03>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`comp'>>\n    1 j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|04>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`case'>> 1\n    j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|05>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`pair'>> 1\n    j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|06>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`disconnect'>> 1\n    j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|07>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`comp'>> i\n    1|)>>|=|<cell|<verbatim|<around*|[|<math-tt|08>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`case'>> i\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|09>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`pair'>> i\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|0a>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`disconnect'>> i\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|0b>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`comp'>> i\n    j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|0c>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>i and 1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`case'>>\n    i j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|0d>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>i and 1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`pair'>>\n    i j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|0e>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>i and 1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`disconnect'>>\n    i j|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|0f>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)>\\<cdummy\\>byteCode<around*|(|k-1,j-2|)><htab|5mm>where\n    1\\<less\\>i and 1\\<less\\>j>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`injl'>>\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|10>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`injr'>>\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|11>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`take'>>\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|12>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`drop'>>\n    1|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|13>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`injl'>>\n    i|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|18>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`injr'>>\n    i|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|19>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`take'>>\n    i|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|1a>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`drop'>>\n    i|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|1b>|]>><rsub|<2><rsup|8>>\\<cdummy\\>byteCode<around*|(|k-1,i-2|)><htab|5mm>where\n    1\\<less\\>i>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`iden'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|20|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`unit'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|21|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`fail'>>\n    b|)>>|<cell|=>|<cell|<verbatim|<around*|[|22|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsup|><around*|(|b|)>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`hidden'>>\n    h|)>>|<cell|=>|<cell|<verbatim|<around*|[|23|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<rsup|><around*|(|h|)>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`witness'>>\n    v|)>>|<cell|=>|<cell|BE<around*|(|<around*|\\<lfloor\\>|<math-tt|80><rsub|<2><rsup|8>>+<around*|\\||v|\\|>|\\<rfloor\\>><rsub|8>|)>\\<cdummy\\>bytePad<around*|(|v|)><htab|5mm>where\n    <around*|\\||v|\\|>\\<less\\>127>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`witness'>>\n    v|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|ff>|]>><rsub|<2><rsup|8>>\\<cdummy\\>BE<around*|(|<around*|\\<lfloor\\>|<around*|\\||v|\\|>|\\<rfloor\\>><rsub|16>|)><rsub|>\\<cdummy\\>bytePad<around*|(|v|)><htab|5mm>where\n    127 \\<leq\\><around*|\\||v|\\|>\\<less\\>2<rsup|16>>>>>\n  </eqnarray*>\n\n  The byte codes for primitives begin with a byte between\n  <math|<verbatim|[24]><rsub|<2><rsup|8>>> and\n  <math|<verbatim|[<math-tt|3f>]><rsub|<2><rsup|8>>> inclusive. The codes can\n  contain multiple bytes. However, for the Bitcoin primitives, we only need\n  to use one byte per primitive.\n\n  <\\eqnarray*>\n    <tformat|<table|<row|<cell|byteCode<around*|(|k,<text|<samp|`version'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|24>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`lockTime'>>|)>>|<cell|=>|<cell|<verbatim|<verbatim|<around*|[|<math-tt|25>|]>>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`inputsHash'>>|)>>|<cell|=>|<cell|<verbatim|<verbatim|<around*|[|<math-tt|26>|]>>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`outputsHash'>>|)>>|<cell|=>|<cell|<verbatim|<verbatim|<around*|[|<math-tt|27>|]>>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`numInputs'>>|)>>|<cell|=>|<verbatim|<verbatim|<around*|[|<math-tt|28>|]>>><rsub|<2><rsup|8>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`totalnputValue'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|29>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`currentPrevOutpoint'>>|)>>|<cell|=>|<cell|<verbatim|<verbatim|<around*|[|<math-tt|2a>|]>>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`currentValue'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|2b>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`currentSequence'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|2c>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`currentIndex'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|2d>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`inputPrevOutpoint'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|2e>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`inputValue'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|2f>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`inputSequence'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|30>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`numOutputs'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|31>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`totalOutputValue'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|32>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`outputValue'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|33>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`outputScriptHash'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|34>|]>><rsub|<2><rsup|8>>>>|<row|<cell|byteCode<around*|(|k,<text|<samp|`scriptCMR'>>|)>>|<cell|=>|<cell|<verbatim|<around*|[|<math-tt|35>|]>><rsub|<2><rsup|8>>>>>>\n  </eqnarray*>\n\n  We define a byte-string prefix code for Simplicity DAGs as a concatenation\n  of byte-string codes of its nodes, terminated by a sentinel value that has\n  been reserved as an end-of-stream byte.\n\n  <\\equation*>\n    byteCode<around*|(|l|)>\\<assign\\><around*|(|<around*|(|\\<mu\\><rsup|\\<ast\\>>\\<circ\\>\\<eta\\><rsup|<maybe>>\\<circ\\>byteCode<rsup|+>\\<circ\\>indexed|)><around*|(|l|)>|)>\\<cdummy\\><verbatim|<around*|[|<math-tt|1f>|]>><rsub|<2><rsup|8>>\n  </equation*>\n\n  Notice that while <math|byteCode<around*|(|0,x|)>> for <math|x\\<of\\>Node>\n  seems like it could call <math|byteCode<around*|(|-1,n|)>> for some\n  <math|n:\\<bbb-N\\>>, this can never happen for Simplicity DAGs. Recall from\n  Section<nbsp><reference|ss:DAGs>, that a well-formed Simplicity DAG,\n  <math|l\\<of\\>Node<rsup|+>>, satisfies the condition\n\n  <\\equation*>\n    \\<forall\\><around*|\\<langle\\>|i,a|\\<rangle\\>>\\<in\\>indexed<around*|(|l|)>\\<point\\>\\<forall\\>j\\<in\\>ref<around*|(|a|)>\\<point\\>0\\<less\\>j\\<leq\\>i<text|.>\n  </equation*>\n\n  The condition on DAGs implies that <math|<around*|\\||ref<around*|(|l<around*|[|0|]>|)>|\\|>=0>.\n  This condition means that <math|byteCode<around*|(|-1,n|)>> never occurs\n  for any <math|n:\\<bbb-N\\>>.\n\n  <\\the-glossary|gly>\n    <glossary-2|lb|The ISO 31-11 notation for the base 2\n    logarithm.|<pageref|auto-206>, <pageref|auto-223>>\n  </the-glossary>\n\n  <\\bibliography|bib|tm-plain|Simplicity.bib>\n    <\\bib-list|18>\n      <bibitem*|1><label|bib-Appel:2015>A.<nbsp>W.<nbsp>Appel.\n      <newblock>Verification of a cryptographic primitive: SHA-256.\n      <newblock><with|font-shape|italic|ACM Trans. Program. Lang. Syst.>,\n      37(2):7\\U1, apr 2015.<newblock>\n\n      <bibitem*|2><label|bib-script>Bitcoinwiki. <newblock>Script.\n      <newblock><slink|https://en.bitcoin.it/w/index.php?title=Scriptoldid=61707>,\n      2016.<newblock>\n\n      <bibitem*|3><label|bib-Carette:2009>J.<nbsp>Carette,\n      O.<nbsp>Kiselyov<localize|, and >C.<nbsp>Shan. <newblock>Finally\n      tagless, partially evaluated: tagless staged interpreters for simpler\n      typed languages. <newblock><with|font-shape|italic|J. Funct. Program.>,\n      19(5):509\\U543, sep 2009.<newblock>\n\n      <bibitem*|4><label|bib-sec2>Certicom Research. <newblock>Standards for\n      Efficient Cryptography 2: Recommended Elliptic Curve Domain Parameters.\n      <newblock>Standard SEC2, Certicom Corp., Mississauga, ON, USA, Sep\n      2000.<newblock>\n\n      <bibitem*|5><label|bib-Coq:manual>The Coq Development Team.\n      <newblock><with|font-shape|italic|The Coq Proof Assistant Reference\n      Manual, version 8.7>. <newblock>Oct 2017.<newblock>\n\n      <bibitem*|6><label|bib-garillot:2009>F.<nbsp>Garillot,\n      G.<nbsp>Gonthier, A.<nbsp>Mahboubi<localize|, and >L.<nbsp>Rideau.\n      <newblock>Packaging Mathematical Structures. <newblock><localize|In\n      >Tobias Nipkow<localize| and >Christian Urban<localize|, editors>,\n      <with|font-shape|italic|Theorem Proving in Higher Order Logics>,\n      <localize|volume> 5674<localize| of ><with|font-shape|italic|Lecture\n      Notes in Computer Science>. Munich, Germany, 2009. Springer.<newblock>\n\n      <bibitem*|7><label|bib-gentzen>G.<nbsp>Gentzen.\n      <newblock>Investigations into logical deduction. <newblock><localize|In\n      >M.E.<nbsp>Szabo<localize|, editor>, <with|font-shape|italic|The\n      collected papers of Gerhard Gentzen>, Studies in logic and the\n      foundations of mathematics, <localize|chapter> 3. \\ North-Holland Pub.\n      Co., 1969.<newblock>\n\n      <bibitem*|8><label|bib-King1993>D.<nbsp>J.<nbsp>King<localize| and\n      >P.<nbsp>Wadler. <newblock><with|font-shape|italic|Combining Monads>,\n      <localize|pages >134\\U143. <newblock>Springer London, London,\n      1993.<newblock>\n\n      <bibitem*|9><label|bib-Mahboubi:2013>A.<nbsp>Mahboubi<localize| and\n      >E.<nbsp>Tassi. <newblock>Canonical structures for the working Coq\n      user. <newblock><localize|In ><with|font-shape|italic|Proceedings of\n      the 4th International Conference on Interactive Theorem Proving>,\n      ITP'13, <localize|pages >19\\U34. Berlin, Heidelberg, 2013.\n      Springer-Verlag.<newblock>\n\n      <bibitem*|10><label|bib-Mairson:1989>H.<nbsp>G.<nbsp>Mairson.\n      <newblock>Deciding ML typability is complete for deterministic\n      exponential time. <newblock><localize|In\n      ><with|font-shape|italic|Proceedings of the 17th ACM SIGPLAN-SIGACT\n      Symposium on Principles of Programming Languages>, POPL '90,\n      <localize|pages >382\\U401. New York, NY, USA, 1990. ACM.<newblock>\n\n      <bibitem*|11><label|bib-bitcoin>S.<nbsp>Nakamoto. <newblock>Bitcoin: A\n      peer-to-peer electronic cash system.\n      <newblock><slink|http://bitcoin.org/bitcoin.pdf>, Nov 2008.<newblock>\n\n      <bibitem*|12><label|bib-satoshiScript>S.<nbsp>Nakamoto. <newblock>Re:\n      Transactions and Scripts: DUP HASH160 ... EQUALVERIFY CHECKSIG.\n      <newblock><slink|https://bitcointalk.org/index.php?topic=195.msg1611#msg1611>,\n      Jun 2010.<newblock>\n\n      <bibitem*|13><label|bib-sha>National institute of standards and\n      technology. <newblock>FIPS 180-4, secure hash standard, federal\n      information processing standard (FIPS), publication 180-4.\n      <newblock><localize|Technical Report>, DEPARTMENT OF COMMERCE, aug\n      2015.<newblock>\n\n      <bibitem*|14><label|bib-oconnor2014>R.<nbsp>O'Connor. <newblock>Van\n      Laarhoven free monad. <newblock>Feb 2014. <newblock>Blog post,\n      <slink|http://r6.ca/blog/20140210T181244Z.html>.<newblock>\n\n      <bibitem*|15><label|bib-unification>M.<nbsp>S.<nbsp>Paterson<localize|\n      and >M.<nbsp>N.<nbsp>Wegman. <newblock>Linear unification.\n      <newblock><with|font-shape|italic|Journal of Computer and System\n      Sciences>, 16(2):158\\U167, 1978.<newblock>\n\n      <bibitem*|16><label|bib-f-algebra>Wikipedia contributors.\n      <newblock>F-algebra \\V Wikipedia, the free encyclopedia.\n      <newblock><slink|https://en.wikipedia.org/w/index.php?title=F-algebraoldid=814231684>,\n      2017.<newblock>\n\n      <bibitem*|17><label|bib-libsecp256k1>P.<nbsp>Wuille.\n      <newblock>Libsecp256k1. <newblock><slink|https://github.com/bitcoin-core/secp256k1/tree/1e6f1f5ad5e7f1e3ef79313ec02023902bf8175c>,\n      May 2018.<newblock>\n\n      <bibitem*|18><label|bib-bip-0340>P.<nbsp>Wuille,\n      J.<nbsp>Nick<localize|, and >T.<nbsp>Ruffing. <newblock>Bip-0340.\n      <newblock>2020. <newblock><slink|https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki>.<newblock>\n    </bib-list>\n  </bibliography>\n</body>\n\n<\\initial>\n  <\\collection>\n    <associate|page-medium|papyrus>\n    <associate|page-type|letter>\n    <associate|par-mode|justify>\n    <associate|preamble|false>\n  </collection>\n</initial>\n\n<\\references>\n  <\\collection>\n    <associate|SS:Coq:MerkleRoots|<tuple|8.5|?>>\n    <associate|app:AltSerialization|<tuple|C|?>>\n    <associate|app:ElementsTransactions|<tuple|A|?>>\n    <associate|app:cat-jets|<tuple|B|?>>\n    <associate|auto-1|<tuple|1|?>>\n    <associate|auto-10|<tuple|2.2|?>>\n    <associate|auto-100|<tuple|7|?>>\n    <associate|auto-101|<tuple|7.1|?>>\n    <associate|auto-102|<tuple|7.1.1|?>>\n    <associate|auto-103|<tuple|7.1.2|?>>\n    <associate|auto-104|<tuple|7.1.2.1|?>>\n    <associate|auto-105|<tuple|7.1.2.2|?>>\n    <associate|auto-106|<tuple|7.2|?>>\n    <associate|auto-107|<tuple|7.2.1|?>>\n    <associate|auto-108|<tuple|7.2.2|?>>\n    <associate|auto-109|<tuple|7.2.2.1|?>>\n    <associate|auto-11|<tuple|2.2.1|?>>\n    <associate|auto-110|<tuple|7.2.3|?>>\n    <associate|auto-111|<tuple|8|?>>\n    <associate|auto-112|<tuple|8.1|?>>\n    <associate|auto-113|<tuple|8.2|?>>\n    <associate|auto-114|<tuple|8.2.1|?>>\n    <associate|auto-115|<tuple|8.2.2|?>>\n    <associate|auto-116|<tuple|8.2.2.1|?>>\n    <associate|auto-117|<tuple|8.2.2.2|?>>\n    <associate|auto-118|<tuple|8.2.2.3|?>>\n    <associate|auto-119|<tuple|8.2.3|?>>\n    <associate|auto-12|<tuple|2.2.2|?>>\n    <associate|auto-120|<tuple|8.3|?>>\n    <associate|auto-121|<tuple|8.3.1|?>>\n    <associate|auto-122|<tuple|8.3.2|?>>\n    <associate|auto-123|<tuple|8.3.3|?>>\n    <associate|auto-124|<tuple|8.4|?>>\n    <associate|auto-125|<tuple|8.1|?>>\n    <associate|auto-126|<tuple|8.4.1|?>>\n    <associate|auto-127|<tuple|8.4.2|?>>\n    <associate|auto-128|<tuple|8.4.3|?>>\n    <associate|auto-129|<tuple|8.4.4|?>>\n    <associate|auto-13|<tuple|2.2.3|?>>\n    <associate|auto-130|<tuple|8.4.4.1|?>>\n    <associate|auto-131|<tuple|8.4.5|?>>\n    <associate|auto-132|<tuple|8.4.6|?>>\n    <associate|auto-133|<tuple|8.5|?>>\n    <associate|auto-134|<tuple|8.6|?>>\n    <associate|auto-135|<tuple|8.6.1|?>>\n    <associate|auto-136|<tuple|8.6.1.1|?>>\n    <associate|auto-137|<tuple|8.6.2|?>>\n    <associate|auto-138|<tuple|8.6.3|?>>\n    <associate|auto-139|<tuple|9|?>>\n    <associate|auto-14|<tuple|2.3|?>>\n    <associate|auto-140|<tuple|9.1|?>>\n    <associate|auto-141|<tuple|9.1.1|?>>\n    <associate|auto-142|<tuple|9.1.2|?>>\n    <associate|auto-143|<tuple|9.1.3|?>>\n    <associate|auto-144|<tuple|9.1.4|?>>\n    <associate|auto-145|<tuple|9.1.5|?>>\n    <associate|auto-146|<tuple|9.1.5.1|?>>\n    <associate|auto-147|<tuple|9.1.5.2|?>>\n    <associate|auto-148|<tuple|9.1.5.3|?>>\n    <associate|auto-149|<tuple|9.1.5.4|?>>\n    <associate|auto-15|<tuple|2.3.1|?>>\n    <associate|auto-150|<tuple|9.1.5.5|?>>\n    <associate|auto-151|<tuple|9.1.6|?>>\n    <associate|auto-152|<tuple|9.1.6.1|?>>\n    <associate|auto-153|<tuple|9.1.6.2|?>>\n    <associate|auto-154|<tuple|9.1.6.3|?>>\n    <associate|auto-155|<tuple|9.1.7|?>>\n    <associate|auto-156|<tuple|9.1.7.1|?>>\n    <associate|auto-157|<tuple|9.1.7.2|?>>\n    <associate|auto-158|<tuple|9.1.7.3|?>>\n    <associate|auto-159|<tuple|9.2|?>>\n    <associate|auto-16|<tuple|2.3.2|?>>\n    <associate|auto-160|<tuple|9.2.1|?>>\n    <associate|auto-161|<tuple|9.2.2|?>>\n    <associate|auto-162|<tuple|9.2.3|?>>\n    <associate|auto-163|<tuple|9.2.4|?>>\n    <associate|auto-164|<tuple|9.2.5|?>>\n    <associate|auto-165|<tuple|9.2.6|?>>\n    <associate|auto-166|<tuple|9.2.6.1|?>>\n    <associate|auto-167|<tuple|9.2.6.2|?>>\n    <associate|auto-168|<tuple|9.2.7|?>>\n    <associate|auto-169|<tuple|9.3|?>>\n    <associate|auto-17|<tuple|2.3.3|?>>\n    <associate|auto-170|<tuple|9.4|?>>\n    <associate|auto-171|<tuple|9.4.1|?>>\n    <associate|auto-172|<tuple|9.4.2|?>>\n    <associate|auto-173|<tuple|9.5|?>>\n    <associate|auto-174|<tuple|10|?>>\n    <associate|auto-175|<tuple|A|?>>\n    <associate|auto-176|<tuple|A.1|?>>\n    <associate|auto-177|<tuple|A.1.1|?>>\n    <associate|auto-178|<tuple|A.1.2|?>>\n    <associate|auto-179|<tuple|B|?>>\n    <associate|auto-18|<tuple|2.3.4|?>>\n    <associate|auto-180|<tuple|B.1|?>>\n    <associate|auto-181|<tuple|B.1.1|?>>\n    <associate|auto-182|<tuple|B.1.1.1|?>>\n    <associate|auto-183|<tuple|B.1.1.2|?>>\n    <associate|auto-184|<tuple|B.1.1.3|?>>\n    <associate|auto-185|<tuple|B.1.1.4|?>>\n    <associate|auto-186|<tuple|B.1.1.5|?>>\n    <associate|auto-187|<tuple|B.1.1.6|?>>\n    <associate|auto-188|<tuple|B.1.1.7|?>>\n    <associate|auto-189|<tuple|B.1.1.8|?>>\n    <associate|auto-19|<tuple|2.3.4.1|?>>\n    <associate|auto-190|<tuple|B.1.1.9|?>>\n    <associate|auto-191|<tuple|B.1.1.10|?>>\n    <associate|auto-192|<tuple|B.1.1.11|?>>\n    <associate|auto-193|<tuple|B.1.1.12|?>>\n    <associate|auto-194|<tuple|B.1.1.13|?>>\n    <associate|auto-195|<tuple|B.1.1.14|?>>\n    <associate|auto-196|<tuple|B.1.1.15|?>>\n    <associate|auto-197|<tuple|B.1.1.16|?>>\n    <associate|auto-198|<tuple|B.1.1.17|?>>\n    <associate|auto-199|<tuple|B.1.1.18|?>>\n    <associate|auto-2|<tuple|1.1|?>>\n    <associate|auto-20|<tuple|2.4|?>>\n    <associate|auto-200|<tuple|B.1.1.19|?>>\n    <associate|auto-201|<tuple|B.1.1.20|?>>\n    <associate|auto-202|<tuple|B.1.1.21|?>>\n    <associate|auto-203|<tuple|B.1.1.22|?>>\n    <associate|auto-204|<tuple|B.1.1.23|?>>\n    <associate|auto-205|<tuple|B.1.1.24|?>>\n    <associate|auto-206|<tuple|lb|?>>\n    <associate|auto-207|<tuple|B.1.1.25|?>>\n    <associate|auto-208|<tuple|B.1.1.26|?>>\n    <associate|auto-209|<tuple|B.1.1.27|?>>\n    <associate|auto-21|<tuple|2.4.1|?>>\n    <associate|auto-210|<tuple|B.1.1.28|?>>\n    <associate|auto-211|<tuple|B.1.1.29|?>>\n    <associate|auto-212|<tuple|B.1.1.30|?>>\n    <associate|auto-213|<tuple|B.1.1.31|?>>\n    <associate|auto-214|<tuple|B.1.1.32|?>>\n    <associate|auto-215|<tuple|B.1.1.33|?>>\n    <associate|auto-216|<tuple|B.1.2|?>>\n    <associate|auto-217|<tuple|B.1.2.1|?>>\n    <associate|auto-218|<tuple|B.1.2.2|?>>\n    <associate|auto-219|<tuple|B.1.2.3|?>>\n    <associate|auto-22|<tuple|2.4.2|?>>\n    <associate|auto-220|<tuple|B.1.2.4|?>>\n    <associate|auto-221|<tuple|B.1.2.5|?>>\n    <associate|auto-222|<tuple|B.1.2.6|?>>\n    <associate|auto-223|<tuple|lb|?>>\n    <associate|auto-224|<tuple|B.1.2.7|?>>\n    <associate|auto-225|<tuple|B.1.2.8|?>>\n    <associate|auto-226|<tuple|B.1.2.9|?>>\n    <associate|auto-227|<tuple|B.1.2.10|?>>\n    <associate|auto-228|<tuple|B.1.2.11|?>>\n    <associate|auto-229|<tuple|B.1.2.12|?>>\n    <associate|auto-23|<tuple|3|?>>\n    <associate|auto-230|<tuple|B.1.2.13|?>>\n    <associate|auto-231|<tuple|B.1.2.14|?>>\n    <associate|auto-232|<tuple|B.1.2.15|?>>\n    <associate|auto-233|<tuple|B.1.2.16|?>>\n    <associate|auto-234|<tuple|B.1.2.17|?>>\n    <associate|auto-235|<tuple|B.1.2.18|?>>\n    <associate|auto-236|<tuple|B.1.2.19|?>>\n    <associate|auto-237|<tuple|B.1.2.20|?>>\n    <associate|auto-238|<tuple|B.1.2.21|?>>\n    <associate|auto-239|<tuple|B.1.2.22|?>>\n    <associate|auto-24|<tuple|3.1|?>>\n    <associate|auto-240|<tuple|B.1.2.23|?>>\n    <associate|auto-241|<tuple|B.1.2.24|?>>\n    <associate|auto-242|<tuple|B.1.2.25|?>>\n    <associate|auto-243|<tuple|B.1.2.26|?>>\n    <associate|auto-244|<tuple|B.1.2.27|?>>\n    <associate|auto-245|<tuple|B.1.2.28|?>>\n    <associate|auto-246|<tuple|B.1.2.29|?>>\n    <associate|auto-247|<tuple|B.1.2.30|?>>\n    <associate|auto-248|<tuple|B.1.2.31|?>>\n    <associate|auto-249|<tuple|B.1.2.32|?>>\n    <associate|auto-25|<tuple|3.1.1|?>>\n    <associate|auto-250|<tuple|B.1.2.33|?>>\n    <associate|auto-251|<tuple|B.1.2.34|?>>\n    <associate|auto-252|<tuple|B.1.2.35|?>>\n    <associate|auto-253|<tuple|B.1.2.36|?>>\n    <associate|auto-254|<tuple|B.1.2.37|?>>\n    <associate|auto-255|<tuple|B.1.2.38|?>>\n    <associate|auto-256|<tuple|B.1.2.39|?>>\n    <associate|auto-257|<tuple|B.1.2.40|?>>\n    <associate|auto-258|<tuple|B.1.2.41|?>>\n    <associate|auto-259|<tuple|B.1.2.42|?>>\n    <associate|auto-26|<tuple|3.1.2|?>>\n    <associate|auto-260|<tuple|B.1.2.43|?>>\n    <associate|auto-261|<tuple|B.1.3|?>>\n    <associate|auto-262|<tuple|B.1.3.1|?>>\n    <associate|auto-263|<tuple|B.1.3.1.1|?>>\n    <associate|auto-264|<tuple|B.1.3.1.2|?>>\n    <associate|auto-265|<tuple|B.1.3.1.3|?>>\n    <associate|auto-266|<tuple|B.1.3.1.4|?>>\n    <associate|auto-267|<tuple|B.1.3.1.5|?>>\n    <associate|auto-268|<tuple|B.1.3.1.6|?>>\n    <associate|auto-269|<tuple|B.1.3.2|?>>\n    <associate|auto-27|<tuple|3.1.3|?>>\n    <associate|auto-270|<tuple|B.1.3.2.1|?>>\n    <associate|auto-271|<tuple|B.1.3.2.2|?>>\n    <associate|auto-272|<tuple|B.1.3.2.3|?>>\n    <associate|auto-273|<tuple|B.1.3.2.4|?>>\n    <associate|auto-274|<tuple|B.1.3.2.5|?>>\n    <associate|auto-275|<tuple|B.1.3.2.6|?>>\n    <associate|auto-276|<tuple|B.1.3.3|?>>\n    <associate|auto-277|<tuple|B.1.3.4|?>>\n    <associate|auto-278|<tuple|B.1.4|?>>\n    <associate|auto-279|<tuple|B.1.4.1|?>>\n    <associate|auto-28|<tuple|3.2|?>>\n    <associate|auto-280|<tuple|B.1.4.1.1|?>>\n    <associate|auto-281|<tuple|B.1.4.1.2|?>>\n    <associate|auto-282|<tuple|B.1.4.1.3|?>>\n    <associate|auto-283|<tuple|B.1.4.1.4|?>>\n    <associate|auto-284|<tuple|B.1.4.1.5|?>>\n    <associate|auto-285|<tuple|B.1.4.1.6|?>>\n    <associate|auto-286|<tuple|B.1.4.1.7|?>>\n    <associate|auto-287|<tuple|B.1.4.1.8|?>>\n    <associate|auto-288|<tuple|B.1.4.1.9|?>>\n    <associate|auto-289|<tuple|B.1.4.1.10|?>>\n    <associate|auto-29|<tuple|3.2.1|?>>\n    <associate|auto-290|<tuple|B.1.4.1.11|?>>\n    <associate|auto-291|<tuple|B.1.4.1.12|?>>\n    <associate|auto-292|<tuple|B.1.4.1.13|?>>\n    <associate|auto-293|<tuple|B.1.4.1.14|?>>\n    <associate|auto-294|<tuple|B.1.4.1.15|?>>\n    <associate|auto-295|<tuple|B.1.4.1.16|?>>\n    <associate|auto-296|<tuple|B.1.4.1.17|?>>\n    <associate|auto-297|<tuple|B.1.4.1.18|?>>\n    <associate|auto-298|<tuple|B.1.4.1.19|?>>\n    <associate|auto-299|<tuple|B.1.4.1.20|?>>\n    <associate|auto-3|<tuple|1.2|?>>\n    <associate|auto-30|<tuple|3.2.2|?>>\n    <associate|auto-300|<tuple|B.1.4.1.21|?>>\n    <associate|auto-301|<tuple|B.1.4.1.22|?>>\n    <associate|auto-302|<tuple|B.1.4.1.23|?>>\n    <associate|auto-303|<tuple|B.1.4.1.24|?>>\n    <associate|auto-304|<tuple|B.1.4.1.25|?>>\n    <associate|auto-305|<tuple|B.1.4.1.26|?>>\n    <associate|auto-306|<tuple|B.1.4.1.27|?>>\n    <associate|auto-307|<tuple|B.1.4.1.28|?>>\n    <associate|auto-308|<tuple|B.1.4.1.29|?>>\n    <associate|auto-309|<tuple|B.1.4.1.30|?>>\n    <associate|auto-31|<tuple|3.2.3|?>>\n    <associate|auto-310|<tuple|B.1.4.1.31|?>>\n    <associate|auto-311|<tuple|B.1.4.1.32|?>>\n    <associate|auto-312|<tuple|B.1.4.1.33|?>>\n    <associate|auto-313|<tuple|B.1.4.1.34|?>>\n    <associate|auto-314|<tuple|B.1.4.1.35|?>>\n    <associate|auto-315|<tuple|B.1.4.1.36|?>>\n    <associate|auto-316|<tuple|B.1.4.1.37|?>>\n    <associate|auto-317|<tuple|B.1.4.1.38|?>>\n    <associate|auto-318|<tuple|B.1.4.1.39|?>>\n    <associate|auto-319|<tuple|B.1.4.1.40|?>>\n    <associate|auto-32|<tuple|3.2.4|?>>\n    <associate|auto-320|<tuple|B.1.4.1.41|?>>\n    <associate|auto-321|<tuple|B.1.4.1.42|?>>\n    <associate|auto-322|<tuple|B.1.4.1.43|?>>\n    <associate|auto-323|<tuple|B.1.4.1.44|?>>\n    <associate|auto-324|<tuple|B.1.4.1.45|?>>\n    <associate|auto-325|<tuple|B.1.4.1.46|?>>\n    <associate|auto-326|<tuple|B.1.4.1.47|?>>\n    <associate|auto-327|<tuple|B.1.5|?>>\n    <associate|auto-328|<tuple|B.1.5.1|?>>\n    <associate|auto-329|<tuple|B.1.5.1.1|?>>\n    <associate|auto-33|<tuple|3.2.5|?>>\n    <associate|auto-330|<tuple|B.1.5.1.2|?>>\n    <associate|auto-331|<tuple|B.1.5.1.3|?>>\n    <associate|auto-332|<tuple|B.1.5.1.4|?>>\n    <associate|auto-333|<tuple|B.1.5.1.5|?>>\n    <associate|auto-334|<tuple|B.1.5.1.6|?>>\n    <associate|auto-335|<tuple|B.1.5.1.7|?>>\n    <associate|auto-336|<tuple|B.1.5.1.8|?>>\n    <associate|auto-337|<tuple|B.1.6|?>>\n    <associate|auto-338|<tuple|B.1.6.1|?>>\n    <associate|auto-339|<tuple|B.1.6.1.1|?>>\n    <associate|auto-34|<tuple|3.2.6|?>>\n    <associate|auto-340|<tuple|B.1.6.1.2|?>>\n    <associate|auto-341|<tuple|B.1.6.1.3|?>>\n    <associate|auto-342|<tuple|B.1.6.1.4|?>>\n    <associate|auto-343|<tuple|B.1.6.1.5|?>>\n    <associate|auto-344|<tuple|B.1.6.1.6|?>>\n    <associate|auto-345|<tuple|B.1.6.1.7|?>>\n    <associate|auto-346|<tuple|B.1.6.1.8|?>>\n    <associate|auto-347|<tuple|B.1.6.1.9|?>>\n    <associate|auto-348|<tuple|B.1.6.1.10|?>>\n    <associate|auto-349|<tuple|B.1.6.1.11|?>>\n    <associate|auto-35|<tuple|3.2.7|?>>\n    <associate|auto-350|<tuple|B.1.6.1.12|?>>\n    <associate|auto-351|<tuple|B.1.6.1.13|?>>\n    <associate|auto-352|<tuple|B.1.6.1.14|?>>\n    <associate|auto-353|<tuple|B.1.7|?>>\n    <associate|auto-354|<tuple|B.1.7.1|?>>\n    <associate|auto-355|<tuple|B.1.7.2|?>>\n    <associate|auto-356|<tuple|B.1.7.3|?>>\n    <associate|auto-357|<tuple|B.2|?>>\n    <associate|auto-358|<tuple|B.2.1|?>>\n    <associate|auto-359|<tuple|B.2.2|?>>\n    <associate|auto-36|<tuple|3.2.8|?>>\n    <associate|auto-360|<tuple|B.2.2.1|?>>\n    <associate|auto-361|<tuple|B.2.2.2|?>>\n    <associate|auto-362|<tuple|B.2.2.3|?>>\n    <associate|auto-363|<tuple|B.2.2.4|?>>\n    <associate|auto-364|<tuple|B.2.2.5|?>>\n    <associate|auto-365|<tuple|B.2.2.6|?>>\n    <associate|auto-366|<tuple|B.2.2.7|?>>\n    <associate|auto-367|<tuple|B.2.2.8|?>>\n    <associate|auto-368|<tuple|B.2.2.9|?>>\n    <associate|auto-369|<tuple|B.2.3|?>>\n    <associate|auto-37|<tuple|3.2.9|?>>\n    <associate|auto-370|<tuple|B.2.3.1|?>>\n    <associate|auto-371|<tuple|B.2.3.2|?>>\n    <associate|auto-372|<tuple|B.2.3.3|?>>\n    <associate|auto-373|<tuple|B.2.3.4|?>>\n    <associate|auto-374|<tuple|B.2.3.5|?>>\n    <associate|auto-375|<tuple|B.2.3.6|?>>\n    <associate|auto-376|<tuple|B.2.3.7|?>>\n    <associate|auto-377|<tuple|B.2.3.8|?>>\n    <associate|auto-378|<tuple|B.2.3.9|?>>\n    <associate|auto-379|<tuple|B.2.3.10|?>>\n    <associate|auto-38|<tuple|3.2.10|?>>\n    <associate|auto-380|<tuple|B.2.3.11|?>>\n    <associate|auto-381|<tuple|B.2.3.12|?>>\n    <associate|auto-382|<tuple|B.2.3.13|?>>\n    <associate|auto-383|<tuple|B.2.3.14|?>>\n    <associate|auto-384|<tuple|B.2.3.15|?>>\n    <associate|auto-385|<tuple|B.2.3.16|?>>\n    <associate|auto-386|<tuple|B.2.3.17|?>>\n    <associate|auto-387|<tuple|B.2.3.18|?>>\n    <associate|auto-388|<tuple|B.2.3.19|?>>\n    <associate|auto-389|<tuple|B.2.3.20|?>>\n    <associate|auto-39|<tuple|3.2.11|?>>\n    <associate|auto-390|<tuple|B.2.3.21|?>>\n    <associate|auto-391|<tuple|B.2.3.22|?>>\n    <associate|auto-392|<tuple|B.2.3.23|?>>\n    <associate|auto-393|<tuple|B.2.3.24|?>>\n    <associate|auto-394|<tuple|B.2.3.25|?>>\n    <associate|auto-395|<tuple|B.2.3.26|?>>\n    <associate|auto-396|<tuple|B.3|?>>\n    <associate|auto-397|<tuple|B.3.1|?>>\n    <associate|auto-398|<tuple|B.3.1.1|?>>\n    <associate|auto-399|<tuple|B.3.1.2|?>>\n    <associate|auto-4|<tuple|1.2.1|?>>\n    <associate|auto-40|<tuple|3.3|?>>\n    <associate|auto-400|<tuple|B.3.1.3|?>>\n    <associate|auto-401|<tuple|B.3.1.4|?>>\n    <associate|auto-402|<tuple|B.3.1.5|?>>\n    <associate|auto-403|<tuple|B.3.1.6|?>>\n    <associate|auto-404|<tuple|B.3.1.7|?>>\n    <associate|auto-405|<tuple|B.3.1.8|?>>\n    <associate|auto-406|<tuple|B.3.1.9|?>>\n    <associate|auto-407|<tuple|B.3.1.10|?>>\n    <associate|auto-408|<tuple|B.3.1.11|?>>\n    <associate|auto-409|<tuple|B.3.1.12|?>>\n    <associate|auto-41|<tuple|3.3.1|?>>\n    <associate|auto-410|<tuple|B.3.1.13|?>>\n    <associate|auto-411|<tuple|B.3.1.14|?>>\n    <associate|auto-412|<tuple|B.3.1.15|?>>\n    <associate|auto-413|<tuple|B.3.1.16|?>>\n    <associate|auto-414|<tuple|B.3.1.17|?>>\n    <associate|auto-415|<tuple|B.3.1.18|?>>\n    <associate|auto-416|<tuple|B.3.1.19|?>>\n    <associate|auto-417|<tuple|B.3.1.20|?>>\n    <associate|auto-418|<tuple|B.3.1.21|?>>\n    <associate|auto-419|<tuple|B.3.1.22|?>>\n    <associate|auto-42|<tuple|3.3.2|?>>\n    <associate|auto-420|<tuple|B.3.1.23|?>>\n    <associate|auto-421|<tuple|B.3.1.24|?>>\n    <associate|auto-422|<tuple|B.3.1.25|?>>\n    <associate|auto-423|<tuple|B.3.1.26|?>>\n    <associate|auto-424|<tuple|B.3.1.27|?>>\n    <associate|auto-425|<tuple|B.3.1.28|?>>\n    <associate|auto-426|<tuple|B.3.1.29|?>>\n    <associate|auto-427|<tuple|B.3.1.30|?>>\n    <associate|auto-428|<tuple|B.3.1.31|?>>\n    <associate|auto-429|<tuple|B.3.1.32|?>>\n    <associate|auto-43|<tuple|3.3.3|?>>\n    <associate|auto-430|<tuple|B.3.1.33|?>>\n    <associate|auto-431|<tuple|B.3.1.34|?>>\n    <associate|auto-432|<tuple|B.3.1.35|?>>\n    <associate|auto-433|<tuple|B.3.2|?>>\n    <associate|auto-434|<tuple|B.3.2.1|?>>\n    <associate|auto-435|<tuple|B.3.2.2|?>>\n    <associate|auto-436|<tuple|B.3.2.3|?>>\n    <associate|auto-437|<tuple|B.3.2.4|?>>\n    <associate|auto-438|<tuple|B.3.2.5|?>>\n    <associate|auto-439|<tuple|B.3.2.6|?>>\n    <associate|auto-44|<tuple|3.3.4|?>>\n    <associate|auto-440|<tuple|B.3.2.7|?>>\n    <associate|auto-441|<tuple|B.3.2.8|?>>\n    <associate|auto-442|<tuple|B.3.2.9|?>>\n    <associate|auto-443|<tuple|B.3.3|?>>\n    <associate|auto-444|<tuple|B.3.3.1|?>>\n    <associate|auto-445|<tuple|B.3.3.2|?>>\n    <associate|auto-446|<tuple|B.3.3.3|?>>\n    <associate|auto-447|<tuple|B.3.3.4|?>>\n    <associate|auto-448|<tuple|B.3.3.5|?>>\n    <associate|auto-449|<tuple|B.3.3.6|?>>\n    <associate|auto-45|<tuple|3.3.5|?>>\n    <associate|auto-450|<tuple|B.3.3.7|?>>\n    <associate|auto-451|<tuple|B.3.3.8|?>>\n    <associate|auto-452|<tuple|B.3.3.9|?>>\n    <associate|auto-453|<tuple|B.3.4|?>>\n    <associate|auto-454|<tuple|B.3.4.1|?>>\n    <associate|auto-455|<tuple|B.3.4.2|?>>\n    <associate|auto-456|<tuple|B.3.4.3|?>>\n    <associate|auto-457|<tuple|B.3.4.4|?>>\n    <associate|auto-458|<tuple|B.3.4.5|?>>\n    <associate|auto-459|<tuple|B.3.4.6|?>>\n    <associate|auto-46|<tuple|3.3.6|?>>\n    <associate|auto-460|<tuple|B.3.4.7|?>>\n    <associate|auto-461|<tuple|B.3.4.8|?>>\n    <associate|auto-462|<tuple|B.3.4.9|?>>\n    <associate|auto-463|<tuple|B.3.4.10|?>>\n    <associate|auto-464|<tuple|B.3.4.11|?>>\n    <associate|auto-465|<tuple|B.3.4.12|?>>\n    <associate|auto-466|<tuple|B.3.4.13|?>>\n    <associate|auto-467|<tuple|B.3.4.14|?>>\n    <associate|auto-468|<tuple|B.3.4.15|?>>\n    <associate|auto-469|<tuple|B.3.4.16|?>>\n    <associate|auto-47|<tuple|3.3.6.1|?>>\n    <associate|auto-470|<tuple|B.3.4.17|?>>\n    <associate|auto-471|<tuple|B.3.4.18|?>>\n    <associate|auto-472|<tuple|B.3.4.19|?>>\n    <associate|auto-473|<tuple|B.3.4.20|?>>\n    <associate|auto-474|<tuple|B.3.4.21|?>>\n    <associate|auto-475|<tuple|B.3.4.22|?>>\n    <associate|auto-476|<tuple|B.3.4.23|?>>\n    <associate|auto-477|<tuple|B.3.4.24|?>>\n    <associate|auto-478|<tuple|B.3.4.25|?>>\n    <associate|auto-479|<tuple|B.3.4.26|?>>\n    <associate|auto-48|<tuple|3.3.7|?>>\n    <associate|auto-480|<tuple|B.3.4.27|?>>\n    <associate|auto-481|<tuple|B.3.4.28|?>>\n    <associate|auto-482|<tuple|B.3.4.29|?>>\n    <associate|auto-483|<tuple|B.3.4.30|?>>\n    <associate|auto-484|<tuple|B.3.4.31|?>>\n    <associate|auto-485|<tuple|B.3.4.32|?>>\n    <associate|auto-486|<tuple|B.3.4.33|?>>\n    <associate|auto-487|<tuple|B.3.4.34|?>>\n    <associate|auto-488|<tuple|B.3.4.35|?>>\n    <associate|auto-489|<tuple|B.3.4.36|?>>\n    <associate|auto-49|<tuple|3.3.7.1|?>>\n    <associate|auto-490|<tuple|B.3.4.37|?>>\n    <associate|auto-491|<tuple|B.3.4.38|?>>\n    <associate|auto-492|<tuple|B.3.4.39|?>>\n    <associate|auto-493|<tuple|B.3.4.40|?>>\n    <associate|auto-494|<tuple|B.3.4.41|?>>\n    <associate|auto-495|<tuple|B.3.4.42|?>>\n    <associate|auto-496|<tuple|B.3.4.43|?>>\n    <associate|auto-497|<tuple|B.3.4.44|?>>\n    <associate|auto-498|<tuple|B.3.4.45|?>>\n    <associate|auto-499|<tuple|B.3.4.46|?>>\n    <associate|auto-5|<tuple|1.2.2|?>>\n    <associate|auto-50|<tuple|3.3.7.2|?>>\n    <associate|auto-500|<tuple|B.3.4.47|?>>\n    <associate|auto-501|<tuple|B.3.4.48|?>>\n    <associate|auto-502|<tuple|B.3.4.49|?>>\n    <associate|auto-503|<tuple|B.3.4.50|?>>\n    <associate|auto-504|<tuple|C|?>>\n    <associate|auto-505|<tuple|C|?>>\n    <associate|auto-506|<tuple|C|?>>\n    <associate|auto-51|<tuple|3.3.7.3|?>>\n    <associate|auto-52|<tuple|3.4|?>>\n    <associate|auto-53|<tuple|3.5|?>>\n    <associate|auto-54|<tuple|3.5.1|?>>\n    <associate|auto-55|<tuple|3.5.2|?>>\n    <associate|auto-56|<tuple|3.1|?>>\n    <associate|auto-57|<tuple|3.5.2.1|?>>\n    <associate|auto-58|<tuple|3.5.2.2|?>>\n    <associate|auto-59|<tuple|3.5.2.3|?>>\n    <associate|auto-6|<tuple|1.2.3|?>>\n    <associate|auto-60|<tuple|3.5.2.4|?>>\n    <associate|auto-61|<tuple|3.5.2.5|?>>\n    <associate|auto-62|<tuple|3.5.2.6|?>>\n    <associate|auto-63|<tuple|3.5.3|?>>\n    <associate|auto-64|<tuple|3.5.3.1|?>>\n    <associate|auto-65|<tuple|3.6|?>>\n    <associate|auto-66|<tuple|3.6.1|?>>\n    <associate|auto-67|<tuple|3.6.1.1|?>>\n    <associate|auto-68|<tuple|3.6.1.2|?>>\n    <associate|auto-69|<tuple|3.6.2|?>>\n    <associate|auto-7|<tuple|2|?>>\n    <associate|auto-70|<tuple|3.7|?>>\n    <associate|auto-71|<tuple|3.8|?>>\n    <associate|auto-72|<tuple|4|?>>\n    <associate|auto-73|<tuple|4.1|?>>\n    <associate|auto-74|<tuple|4.2|?>>\n    <associate|auto-75|<tuple|4.2.1|?>>\n    <associate|auto-76|<tuple|4.2.2|?>>\n    <associate|auto-77|<tuple|4.3|?>>\n    <associate|auto-78|<tuple|4.3.1|?>>\n    <associate|auto-79|<tuple|4.3.2|?>>\n    <associate|auto-8|<tuple|2.1|?>>\n    <associate|auto-80|<tuple|4.3.2.1|?>>\n    <associate|auto-81|<tuple|4.3.2.2|?>>\n    <associate|auto-82|<tuple|4.4|?>>\n    <associate|auto-83|<tuple|4.4.1|?>>\n    <associate|auto-84|<tuple|4.4.1.1|?>>\n    <associate|auto-85|<tuple|4.4.1.2|?>>\n    <associate|auto-86|<tuple|4.5|?>>\n    <associate|auto-87|<tuple|4.5.1|?>>\n    <associate|auto-88|<tuple|4.6|?>>\n    <associate|auto-89|<tuple|4.7|?>>\n    <associate|auto-9|<tuple|2.1.1|?>>\n    <associate|auto-90|<tuple|4.7.1|?>>\n    <associate|auto-91|<tuple|5|?>>\n    <associate|auto-92|<tuple|6|?>>\n    <associate|auto-93|<tuple|6.1|?>>\n    <associate|auto-94|<tuple|6.1.1|?>>\n    <associate|auto-95|<tuple|6.1.1.1|?>>\n    <associate|auto-96|<tuple|6.2|?>>\n    <associate|auto-97|<tuple|6.2.1|?>>\n    <associate|auto-98|<tuple|6.3|?>>\n    <associate|auto-99|<tuple|6.3.1|?>>\n    <associate|bib-Appel:2015|<tuple|1|?>>\n    <associate|bib-Carette:2009|<tuple|3|?>>\n    <associate|bib-Coq:manual|<tuple|5|?>>\n    <associate|bib-King1993|<tuple|8|?>>\n    <associate|bib-Mahboubi:2013|<tuple|9|?>>\n    <associate|bib-Mairson:1989|<tuple|10|?>>\n    <associate|bib-bip-0340|<tuple|18|?>>\n    <associate|bib-bitcoin|<tuple|11|?>>\n    <associate|bib-f-algebra|<tuple|16|?>>\n    <associate|bib-garillot:2009|<tuple|6|?>>\n    <associate|bib-gentzen|<tuple|7|?>>\n    <associate|bib-libsecp256k1|<tuple|17|?>>\n    <associate|bib-oconnor2014|<tuple|14|?>>\n    <associate|bib-satoshiScript|<tuple|12|?>>\n    <associate|bib-script|<tuple|2|?>>\n    <associate|bib-sec2|<tuple|4|?>>\n    <associate|bib-sha|<tuple|13|?>>\n    <associate|bib-unification|<tuple|15|?>>\n    <associate|chapter:preliminaries|<tuple|2|?>>\n    <associate|fig:inheritance|<tuple|8.1|?>>\n    <associate|footnote-2.1|<tuple|2.1|?>>\n    <associate|footnote-3.1|<tuple|3.1|?>>\n    <associate|footnote-3.2|<tuple|3.2|?>>\n    <associate|footnr-2.1|<tuple|2.1|?>>\n    <associate|footnr-3.1|<tuple|3.1|?>>\n    <associate|footnr-3.2|<tuple|3.2|?>>\n    <associate|full-adder-LHS|<tuple|3.3|?>>\n    <associate|full-adder-RHS|<tuple|3.2|?>>\n    <associate|full-adder-spec|<tuple|3.1|?>>\n    <associate|ss:AssertMerkleRoot|<tuple|4.3.2|?>>\n    <associate|ss:BTDenotationalSemantics|<tuple|4.4.1.1|?>>\n    <associate|ss:BTMerkleRoots|<tuple|4.4.1.2|?>>\n    <associate|ss:BitcoinPrimitives|<tuple|9.3|?>>\n    <associate|ss:BitcoinTransactions|<tuple|4.4.1|?>>\n    <associate|ss:DAGs|<tuple|7.1|?>>\n    <associate|ss:DenotationalSemanticsOfFullSimplicity|<tuple|9.2.4|?>>\n    <associate|ss:ELDenotationalSemantics|<tuple|A.1|?>>\n    <associate|ss:FreeMonadicDeserialization|<tuple|9.2.6.1|?>>\n    <associate|ss:Haskell-CheckSigHash|<tuple|9.1.6.3|?>>\n    <associate|ss:Haskell-DAG|<tuple|9.2.6.2|?>>\n    <associate|ss:Haskell-Serialization|<tuple|9.2.6|?>>\n    <associate|ss:IMR|<tuple|7.2.3|?>>\n    <associate|ss:ListFunctors|<tuple|2.2.2|?>>\n    <associate|ss:MonadZero|<tuple|2.3.4|?>>\n    <associate|ss:RepresentingValuesAsCellArrays|<tuple|3.5.1|?>>\n    <associate|ss:Serialization|<tuple|7.2|?>>\n    <associate|ss:UniversalSignatureHashModes|<tuple|6.3|?>>\n    <associate|ss:bitOps|<tuple|3.3.1|?>>\n    <associate|ss:checkSigHashAll|<tuple|4.5.1|?>>\n    <associate|ss:cmr|<tuple|3.7|?>>\n    <associate|ss:coqArith|<tuple|8.3.2|?>>\n    <associate|ss:coqInitial|<tuple|8.2.1|?>>\n    <associate|ss:haskellLoop|<tuple|9.1.5.5|?>>\n    <associate|ss:inflate|<tuple|7.1.2.2|?>>\n    <associate|ss:monadicSemantics|<tuple|4.1|?>>\n    <associate|ss:optionMonad|<tuple|2.3.4.1|?>>\n    <associate|ss:pruning|<tuple|4.3.2.1|?>>\n    <associate|ss:salted|<tuple|4.3.2.2|?>>\n    <associate|ss:typeInference|<tuple|7.1.1|?>>\n    <associate|ss:unboundedLoop|<tuple|6.2|?>>\n    <associate|thm:CSCT|<tuple|3.3|?>>\n  </collection>\n</references>\n\n<\\auxiliary>\n  <\\collection>\n    <\\associate|bib>\n      bitcoin\n\n      satoshiScript\n\n      script\n\n      Coq:manual\n\n      King1993\n\n      gentzen\n\n      sha\n\n      sec2\n\n      libsecp256k1\n\n      bip-0340\n\n      unification\n\n      Mairson:1989\n\n      f-algebra\n\n      Mahboubi:2013\n\n      garillot:2009\n\n      Appel:2015\n\n      Carette:2009\n\n      libsecp256k1\n\n      bip-0340\n\n      oconnor2014\n    </associate>\n    <\\associate|figure>\n      <tuple|normal|<surround|<hidden-binding|<tuple>|3.1>||Example state of\n      the Bit Machine.>|<pageref|auto-56>>\n\n      <tuple|normal|<surround|<hidden-binding|<tuple>|8.1>||The inheritance\n      hierarchy of algebras for Simplicity's partial extensions in\n      Coq.>|<pageref|auto-125>>\n    </associate>\n    <\\associate|gly>\n      <tuple|normal|lb|The ISO 31-11 notation for the base 2\n      logarithm.|<pageref|auto-206>>\n\n      <tuple|dup|lb|<pageref|auto-223>>\n    </associate>\n    <\\associate|toc>\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|1<space|2spc>Introduction>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-1><vspace|0.5fn>\n\n      1.1<space|2spc>Bitcoin Script <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-2>\n\n      1.2<space|2spc>Simplicity's Design Goals\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-3>\n\n      <with|par-left|<quote|1tab>|1.2.1<space|2spc>Static Analysis\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-4>>\n\n      <with|par-left|<quote|1tab>|1.2.2<space|2spc>Pruning and Sharing\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-5>>\n\n      <with|par-left|<quote|1tab>|1.2.3<space|2spc>Formal Semantics\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-6>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|2<space|2spc>Type\n      Theory Preliminaries> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-7><vspace|0.5fn>\n\n      2.1<space|2spc>Algebraic Types <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-8>\n\n      <with|par-left|<quote|1tab>|2.1.1<space|2spc>Records\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-9>>\n\n      2.2<space|2spc>Functors <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-10>\n\n      <with|par-left|<quote|1tab>|2.2.1<space|2spc>Option Functor\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-11>>\n\n      <with|par-left|<quote|1tab>|2.2.2<space|2spc>List Functors\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-12>>\n\n      <with|par-left|<quote|1tab>|2.2.3<space|2spc>Buffers\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-13>>\n\n      2.3<space|2spc>Monads <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-14>\n\n      <with|par-left|<quote|1tab>|2.3.1<space|2spc>Kleisli Morphisms\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-15>>\n\n      <with|par-left|<quote|1tab>|2.3.2<space|2spc>Cartesian Strength\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-16>>\n\n      <with|par-left|<quote|1tab>|2.3.3<space|2spc>Identity Monad\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-17>>\n\n      <with|par-left|<quote|1tab>|2.3.4<space|2spc>Monad Zero\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-18>>\n\n      <with|par-left|<quote|2tab>|2.3.4.1<space|2spc>Option Monad\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-19>>\n\n      2.4<space|2spc>Multi-bit Words <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-20>\n\n      <with|par-left|<quote|1tab>|2.4.1<space|2spc>Byte Strings\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-21>>\n\n      <with|par-left|<quote|1tab>|2.4.2<space|2spc>Bit Strings\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-22>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|3<space|2spc>Core\n      Simplicity> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-23><vspace|0.5fn>\n\n      3.1<space|2spc>Types <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-24>\n\n      <with|par-left|<quote|1tab>|3.1.1<space|2spc>Abstract Syntax\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-25>>\n\n      <with|par-left|<quote|1tab>|3.1.2<space|2spc>Formal Syntax\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-26>>\n\n      <with|par-left|<quote|1tab>|3.1.3<space|2spc>Formal Semantics\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-27>>\n\n      3.2<space|2spc>Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-28>\n\n      <with|par-left|<quote|1tab>|3.2.1<space|2spc>Identity\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-29>>\n\n      <with|par-left|<quote|1tab>|3.2.2<space|2spc>Composition\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-30>>\n\n      <with|par-left|<quote|1tab>|3.2.3<space|2spc>Constant Unit\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-31>>\n\n      <with|par-left|<quote|1tab>|3.2.4<space|2spc>Left Injection\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-32>>\n\n      <with|par-left|<quote|1tab>|3.2.5<space|2spc>Right Injection\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-33>>\n\n      <with|par-left|<quote|1tab>|3.2.6<space|2spc>Case\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-34>>\n\n      <with|par-left|<quote|1tab>|3.2.7<space|2spc>Pair\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-35>>\n\n      <with|par-left|<quote|1tab>|3.2.8<space|2spc>Take\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-36>>\n\n      <with|par-left|<quote|1tab>|3.2.9<space|2spc>Drop\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-37>>\n\n      <with|par-left|<quote|1tab>|3.2.10<space|2spc>Formal Syntax\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-38>>\n\n      <with|par-left|<quote|1tab>|3.2.11<space|2spc>Formal Semantics\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-39>>\n\n      3.3<space|2spc>Example Simplicity <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-40>\n\n      <with|par-left|<quote|1tab>|3.3.1<space|2spc>Bit Operations\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-41>>\n\n      <with|par-left|<quote|1tab>|3.3.2<space|2spc>Simplicity Notation\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-42>>\n\n      <with|par-left|<quote|1tab>|3.3.3<space|2spc>Generic Equality\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-43>>\n\n      <with|par-left|<quote|1tab>|3.3.4<space|2spc>Arithmetic\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-44>>\n\n      <with|par-left|<quote|1tab>|3.3.5<space|2spc>Bitwise Operations\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-45>>\n\n      <with|par-left|<quote|1tab>|3.3.6<space|2spc>SHA-256\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-46>>\n\n      <with|par-left|<quote|2tab>|3.3.6.1<space|2spc>Tagged Hashes\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-47>>\n\n      <with|par-left|<quote|1tab>|3.3.7<space|2spc>Elliptic Curve Operations\n      on secp256k1 <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-48>>\n\n      <with|par-left|<quote|2tab>|3.3.7.1<space|2spc>libsecp256k1\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-49>>\n\n      <with|par-left|<quote|2tab>|3.3.7.2<space|2spc>libsecp256k1 in\n      Simplicity <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-50>>\n\n      <with|par-left|<quote|2tab>|3.3.7.3<space|2spc>Schnorr Signature\n      Validation <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-51>>\n\n      3.4<space|2spc>Completeness Theorem\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-52>\n\n      3.5<space|2spc>Operational Semantics\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-53>\n\n      <with|par-left|<quote|1tab>|3.5.1<space|2spc>Representing Values as\n      Cell Arrays <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-54>>\n\n      <with|par-left|<quote|1tab>|3.5.2<space|2spc>Bit Machine\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-55>>\n\n      <with|par-left|<quote|2tab>|3.5.2.1<space|2spc>Frame Instructions\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-57>>\n\n      <with|par-left|<quote|2tab>|3.5.2.2<space|2spc>Active Write Frame\n      Instructions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-58>>\n\n      <with|par-left|<quote|2tab>|3.5.2.3<space|2spc>Active Read Frame\n      Instructions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-59>>\n\n      <with|par-left|<quote|2tab>|3.5.2.4<space|2spc>Abort Instruction\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-60>>\n\n      <with|par-left|<quote|2tab>|3.5.2.5<space|2spc>Bit Machine Programs\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-61>>\n\n      <with|par-left|<quote|2tab>|3.5.2.6<space|2spc>Crashing the Bit Machine\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-62>>\n\n      <with|par-left|<quote|1tab>|3.5.3<space|2spc>Executing Simplicity\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-63>>\n\n      <with|par-left|<quote|2tab>|3.5.3.1<space|2spc>Tail Composition\n      Optimisation (TCO) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-64>>\n\n      3.6<space|2spc>Static Analysis <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-65>\n\n      <with|par-left|<quote|1tab>|3.6.1<space|2spc>Space Resources\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-66>>\n\n      <with|par-left|<quote|2tab>|3.6.1.1<space|2spc>Maximum Cell Count Bound\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-67>>\n\n      <with|par-left|<quote|2tab>|3.6.1.2<space|2spc>Maximum Frame Count\n      Bound <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-68>>\n\n      <with|par-left|<quote|1tab>|3.6.2<space|2spc>Time Resources\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-69>>\n\n      3.7<space|2spc>Commitment Merkle Root\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-70>\n\n      3.8<space|2spc>Type Merkle Root <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-71>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|4<space|2spc>Simplicity\n      Extensions> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-72><vspace|0.5fn>\n\n      4.1<space|2spc>Monadic Semantics <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-73>\n\n      4.2<space|2spc>Witness <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-74>\n\n      <with|par-left|<quote|1tab>|4.2.1<space|2spc>Elided Computation\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-75>>\n\n      <with|par-left|<quote|1tab>|4.2.2<space|2spc>Type Inference with\n      Witness <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-76>>\n\n      4.3<space|2spc>Assertions and Failure\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-77>\n\n      <with|par-left|<quote|1tab>|4.3.1<space|2spc>Denotational Semantics\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-78>>\n\n      <with|par-left|<quote|1tab>|4.3.2<space|2spc>Merkle Roots\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-79>>\n\n      <with|par-left|<quote|2tab>|4.3.2.1<space|2spc>Pruning Unused\n      <with|font-family|<quote|ss>|case> Branches\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-80>>\n\n      <with|par-left|<quote|2tab>|4.3.2.2<space|2spc>Salted Expressions\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-81>>\n\n      4.4<space|2spc>Blockchain Primitives\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-82>\n\n      <with|par-left|<quote|1tab>|4.4.1<space|2spc>Bitcoin Transactions\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-83>>\n\n      <with|par-left|<quote|2tab>|4.4.1.1<space|2spc>Denotational Semantics\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-84>>\n\n      <with|par-left|<quote|2tab>|4.4.1.2<space|2spc>Merkle Roots\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-85>>\n\n      4.5<space|2spc>Simplicity Programs <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-86>\n\n      <with|par-left|<quote|1tab>|4.5.1<space|2spc>Example:\n      <rigid|<with|mode|<quote|text>|<with|font-family|<quote|ss>|font-shape|<quote|right>|checkSigHashAll>>>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-87>>\n\n      4.6<space|2spc>Schnorr Signature Aggregation\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-88>\n\n      4.7<space|2spc>Malleability <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-89>\n\n      <with|par-left|<quote|1tab>|4.7.1<space|2spc>Transaction Weight\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-90>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|5<space|2spc>Jets>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-91><vspace|0.5fn>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|6<space|2spc>Delegation>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-92><vspace|0.5fn>\n\n      6.1<space|2spc>Implementing <with|font-family|<quote|ss>|disconnect> on\n      the Bit Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-93>\n\n      <with|par-left|<quote|1tab>|6.1.1<space|2spc>Static Analysis of\n      <with|font-family|<quote|ss>|disconnect>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-94>>\n\n      <with|par-left|<quote|2tab>|6.1.1.1<space|2spc>Space Resources\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-95>>\n\n      6.2<space|2spc>Unbounded Loops <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-96>\n\n      <with|par-left|<quote|1tab>|6.2.1<space|2spc>Adding a\n      <with|font-family|<quote|ss>|loop> primitive to Simplicity?\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-97>>\n\n      6.3<space|2spc>Universal Signature Hash Modes\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-98>\n\n      <with|par-left|<quote|1tab>|6.3.1<space|2spc>Side-Effects and\n      Delegation <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-99>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|7<space|2spc>Type\n      Inference and Serialization> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-100><vspace|0.5fn>\n\n      7.1<space|2spc>Explicit Simplicity DAGs\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-101>\n\n      <with|par-left|<quote|1tab>|7.1.1<space|2spc>Type Inference\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-102>>\n\n      <with|par-left|<quote|1tab>|7.1.2<space|2spc>Reconstructing Simplicity\n      Expressions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-103>>\n\n      <with|par-left|<quote|2tab>|7.1.2.1<space|2spc>syncase\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-104>>\n\n      <with|par-left|<quote|2tab>|7.1.2.2<space|2spc>inflate\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-105>>\n\n      7.2<space|2spc>Serialization <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-106>\n\n      <with|par-left|<quote|1tab>|7.2.1<space|2spc>Serialization of Bit\n      Strings and Positive Numbers <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-107>>\n\n      <with|par-left|<quote|1tab>|7.2.2<space|2spc>Serialization of\n      Simplicity <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-108>>\n\n      <with|par-left|<quote|2tab>|7.2.2.1<space|2spc>Serialization of Word\n      Jets <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-109>>\n\n      <with|par-left|<quote|1tab>|7.2.3<space|2spc>Identity Merkle Root\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-110>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|8<space|2spc>Coq\n      Library Guide> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-111><vspace|0.5fn>\n\n      8.1<space|2spc>Simplicity Types <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-112>\n\n      8.2<space|2spc>Simplicity Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-113>\n\n      <with|par-left|<quote|1tab>|8.2.1<space|2spc>The \\PInitial\\Q\n      Representation of Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-114>>\n\n      <with|par-left|<quote|1tab>|8.2.2<space|2spc>The \\PFinal\\Q\n      Representation of Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-115>>\n\n      <with|par-left|<quote|2tab>|8.2.2.1<space|2spc>Simplicity Algebras\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-116>>\n\n      <with|par-left|<quote|2tab>|8.2.2.2<space|2spc>The \\PFinal\\Q\n      Representation <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-117>>\n\n      <with|par-left|<quote|2tab>|8.2.2.3<space|2spc>Constructing \\PFinal\\Q\n      Terms <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-118>>\n\n      <with|par-left|<quote|1tab>|8.2.3<space|2spc>Why two representations of\n      Terms? <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-119>>\n\n      8.3<space|2spc>Example Simplicity Expressions\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-120>\n\n      <with|par-left|<quote|1tab>|8.3.1<space|2spc>Bits\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-121>>\n\n      <with|par-left|<quote|1tab>|8.3.2<space|2spc>Arithmetic\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-122>>\n\n      <with|par-left|<quote|1tab>|8.3.3<space|2spc>SHA256\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-123>>\n\n      8.4<space|2spc>The Hierarchy of Simplicity Language Extensions\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-124>\n\n      <with|par-left|<quote|1tab>|8.4.1<space|2spc>Witness\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-126>>\n\n      <with|par-left|<quote|1tab>|8.4.2<space|2spc>Assertion\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-127>>\n\n      <with|par-left|<quote|1tab>|8.4.3<space|2spc>Delegation\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-128>>\n\n      <with|par-left|<quote|1tab>|8.4.4<space|2spc>Primitives\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-129>>\n\n      <with|par-left|<quote|2tab>|8.4.4.1<space|2spc>Bitcoin\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-130>>\n\n      <with|par-left|<quote|1tab>|8.4.5<space|2spc>Jets\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-131>>\n\n      <with|par-left|<quote|1tab>|8.4.6<space|2spc>Full Simplicity\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-132>>\n\n      8.5<space|2spc>Merkle Roots <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-133>\n\n      8.6<space|2spc>The Bit Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-134>\n\n      <with|par-left|<quote|1tab>|8.6.1<space|2spc>Bit Machine Code\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-135>>\n\n      <with|par-left|<quote|2tab>|8.6.1.1<space|2spc>Bit Machine Programs\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-136>>\n\n      <with|par-left|<quote|1tab>|8.6.2<space|2spc>Translating Simplicity to\n      the Bit Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-137>>\n\n      <with|par-left|<quote|1tab>|8.6.3<space|2spc>Static Analysis\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-138>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|9<space|2spc>Haskell\n      Library Guide> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-139><vspace|0.5fn>\n\n      9.1<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|Simplicity-Core>\n      library <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-140>\n\n      <with|par-left|<quote|1tab>|9.1.1<space|2spc>Simplicity Types\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-141>>\n\n      <with|par-left|<quote|1tab>|9.1.2<space|2spc>Simplicity Terms\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-142>>\n\n      <with|par-left|<quote|1tab>|9.1.3<space|2spc>Merkle Roots\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-143>>\n\n      <with|par-left|<quote|1tab>|9.1.4<space|2spc>Tensors\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-144>>\n\n      <with|par-left|<quote|1tab>|9.1.5<space|2spc>Example Simplicity\n      Expressions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-145>>\n\n      <with|par-left|<quote|2tab>|9.1.5.1<space|2spc>Generic\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-146>>\n\n      <with|par-left|<quote|2tab>|9.1.5.2<space|2spc>Bits\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-147>>\n\n      <with|par-left|<quote|2tab>|9.1.5.3<space|2spc>Multi-bit Words\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-148>>\n\n      <with|par-left|<quote|2tab>|9.1.5.4<space|2spc>Arithmetic\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-149>>\n\n      <with|par-left|<quote|2tab>|9.1.5.5<space|2spc>Loop\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-150>>\n\n      <with|par-left|<quote|1tab>|9.1.6<space|2spc>Libraries of Simplicity\n      Expressions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-151>>\n\n      <with|par-left|<quote|2tab>|9.1.6.1<space|2spc>SHA-256\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-152>>\n\n      <with|par-left|<quote|2tab>|9.1.6.2<space|2spc>LibSecp256k1\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-153>>\n\n      <with|par-left|<quote|2tab>|9.1.6.3<space|2spc>CheckSigHash\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-154>>\n\n      <with|par-left|<quote|1tab>|9.1.7<space|2spc>The Bit Machine\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-155>>\n\n      <with|par-left|<quote|2tab>|9.1.7.1<space|2spc>Translating Simplicity\n      to the Bit Machine <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-156>>\n\n      <with|par-left|<quote|2tab>|9.1.7.2<space|2spc>Static Analysis\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-157>>\n\n      <with|par-left|<quote|2tab>|9.1.7.3<space|2spc>Fast Evaluation with FFI\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-158>>\n\n      9.2<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|Simplicity-Indef>\n      library <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-159>\n\n      <with|par-left|<quote|1tab>|9.2.1<space|2spc>Primitive Signature\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-160>>\n\n      <with|par-left|<quote|1tab>|9.2.2<space|2spc>Primitive Terms\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-161>>\n\n      <with|par-left|<quote|1tab>|9.2.3<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|JetType>\n      class <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-162>>\n\n      <with|par-left|<quote|1tab>|9.2.4<space|2spc>Denotational Semantics of\n      Full Simplicity <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-163>>\n\n      <with|par-left|<quote|1tab>|9.2.5<space|2spc>Type Inference\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-164>>\n\n      <with|par-left|<quote|1tab>|9.2.6<space|2spc>Serialization\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-165>>\n\n      <with|par-left|<quote|2tab>|9.2.6.1<space|2spc>Free Monadic\n      Deserializaiton <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-166>>\n\n      <with|par-left|<quote|2tab>|9.2.6.2<space|2spc>Serialization of\n      Simplicity DAGs <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-167>>\n\n      <with|par-left|<quote|1tab>|9.2.7<space|2spc>Jet Substitution\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-168>>\n\n      9.3<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|Simplicity-Bitcoin>\n      Library <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-169>\n\n      9.4<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|Simplicity>\n      Library <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-170>\n\n      <with|par-left|<quote|1tab>|9.4.1<space|2spc>CheckSigHashAll\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-171>>\n\n      <with|par-left|<quote|1tab>|9.4.2<space|2spc>Known Discounted Jets\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-172>>\n\n      9.5<space|2spc>Simplicity <with|font-family|<quote|tt>|language|<quote|verbatim>|testsuite>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-173>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|10<space|2spc>C\n      Library Guide> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-174><vspace|0.5fn>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Appendix\n      A<space|2spc>Elements Application> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-175><vspace|0.5fn>\n\n      A.1<space|2spc>Denotational Semantics\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-176>\n\n      <with|par-left|<quote|1tab>|A.1.1<space|2spc>Null Data\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-177>>\n\n      <with|par-left|<quote|1tab>|A.1.2<space|2spc>Merkle Roots\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-178>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Appendix\n      B<space|2spc>Catelogue of Jets> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-179><vspace|0.5fn>\n\n      B.1<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110...:\n      >Core Jets <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-180>\n\n      <with|par-left|<quote|1tab>|B.1.1<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|1100...:\n      >Jets for multi-bit logic <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-181>>\n\n      <with|par-left|<quote|2tab>|B.1.1.1<space|2spc>verify\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-182>>\n\n      <with|par-left|<quote|2tab>|B.1.1.2<space|2spc><with|font-family|<quote|ss>|low>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-183>>\n\n      <with|par-left|<quote|2tab>|B.1.1.3<space|2spc><with|font-family|<quote|ss>|high>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-184>>\n\n      <with|par-left|<quote|2tab>|B.1.1.4<space|2spc><with|font-family|<quote|ss>|complement>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-185>>\n\n      <with|par-left|<quote|2tab>|B.1.1.5<space|2spc><with|font-family|<quote|ss>|and>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-186>>\n\n      <with|par-left|<quote|2tab>|B.1.1.6<space|2spc><with|font-family|<quote|ss>|or>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-187>>\n\n      <with|par-left|<quote|2tab>|B.1.1.7<space|2spc><with|font-family|<quote|ss>|xor>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-188>>\n\n      <with|par-left|<quote|2tab>|B.1.1.8<space|2spc><with|font-family|<quote|ss>|maj>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-189>>\n\n      <with|par-left|<quote|2tab>|B.1.1.9<space|2spc><with|font-family|<quote|ss>|xor-xor>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-190>>\n\n      <with|par-left|<quote|2tab>|B.1.1.10<space|2spc><with|font-family|<quote|ss>|ch>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-191>>\n\n      <with|par-left|<quote|2tab>|B.1.1.11<space|2spc><with|font-family|<quote|ss>|some>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-192>>\n\n      <with|par-left|<quote|2tab>|B.1.1.12<space|2spc><with|font-family|<quote|ss>|all>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-193>>\n\n      <with|par-left|<quote|2tab>|B.1.1.13<space|2spc><with|font-family|<quote|ss>|eq>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-194>>\n\n      <with|par-left|<quote|2tab>|B.1.1.14<space|2spc><with|font-family|<quote|ss>|full-left-shift>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-195>>\n\n      <with|par-left|<quote|2tab>|B.1.1.15<space|2spc><with|font-family|<quote|ss>|full-right-shift>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-196>>\n\n      <with|par-left|<quote|2tab>|B.1.1.16<space|2spc><with|font-family|<quote|ss>|leftmost>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-197>>\n\n      <with|par-left|<quote|2tab>|B.1.1.17<space|2spc><with|font-family|<quote|ss>|rightmost>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-198>>\n\n      <with|par-left|<quote|2tab>|B.1.1.18<space|2spc><with|font-family|<quote|ss>|left-pad-low>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-199>>\n\n      <with|par-left|<quote|2tab>|B.1.1.19<space|2spc><with|font-family|<quote|ss>|left-pad-high>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-200>>\n\n      <with|par-left|<quote|2tab>|B.1.1.20<space|2spc><with|font-family|<quote|ss>|left-extend>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-201>>\n\n      <with|par-left|<quote|2tab>|B.1.1.21<space|2spc><with|font-family|<quote|ss>|right-pad-low>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-202>>\n\n      <with|par-left|<quote|2tab>|B.1.1.22<space|2spc><with|font-family|<quote|ss>|right-pad-high>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-203>>\n\n      <with|par-left|<quote|2tab>|B.1.1.23<space|2spc><with|font-family|<quote|ss>|right-extend>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-204>>\n\n      <with|par-left|<quote|2tab>|B.1.1.24<space|2spc><with|font-family|<quote|ss>|left-shift-with>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-205>>\n\n      <with|par-left|<quote|2tab>|B.1.1.25<space|2spc><with|font-family|<quote|ss>|right-shift-with>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-207>>\n\n      <with|par-left|<quote|2tab>|B.1.1.26<space|2spc><with|font-family|<quote|ss>|left-shift>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-208>>\n\n      <with|par-left|<quote|2tab>|B.1.1.27<space|2spc><with|font-family|<quote|ss>|right-shift>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-209>>\n\n      <with|par-left|<quote|2tab>|B.1.1.28<space|2spc><with|font-family|<quote|ss>|left-rotate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-210>>\n\n      <with|par-left|<quote|2tab>|B.1.1.29<space|2spc><with|font-family|<quote|ss>|right-rotate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-211>>\n\n      <with|par-left|<quote|2tab>|B.1.1.30<space|2spc><with|font-family|<quote|ss>|transpose>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-212>>\n\n      <with|par-left|<quote|2tab>|B.1.1.31<space|2spc><with|font-family|<quote|ss>|find-first-high>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-213>>\n\n      <with|par-left|<quote|2tab>|B.1.1.32<space|2spc><with|font-family|<quote|ss>|find-last-high>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-214>>\n\n      <with|par-left|<quote|2tab>|B.1.1.33<space|2spc><with|font-family|<quote|ss>|bit>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-215>>\n\n      <with|par-left|<quote|1tab>|B.1.2<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110100...:\n      >Jets for arithmetic <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-216>>\n\n      <with|par-left|<quote|2tab>|B.1.2.1<space|2spc><with|font-family|<quote|ss>|one>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-217>>\n\n      <with|par-left|<quote|2tab>|B.1.2.2<space|2spc><with|font-family|<quote|ss>|full-add>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-218>>\n\n      <with|par-left|<quote|2tab>|B.1.2.3<space|2spc><with|font-family|<quote|ss>|add>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-219>>\n\n      <with|par-left|<quote|2tab>|B.1.2.4<space|2spc><with|font-family|<quote|ss>|full-increment>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-220>>\n\n      <with|par-left|<quote|2tab>|B.1.2.5<space|2spc><with|font-family|<quote|ss>|increment>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-221>>\n\n      <with|par-left|<quote|2tab>|B.1.2.6<space|2spc><with|font-family|<quote|ss>|popcount>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-222>>\n\n      <with|par-left|<quote|2tab>|B.1.2.7<space|2spc><with|font-family|<quote|ss>|full-subtract>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-224>>\n\n      <with|par-left|<quote|2tab>|B.1.2.8<space|2spc><with|font-family|<quote|ss>|subtract>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-225>>\n\n      <with|par-left|<quote|2tab>|B.1.2.9<space|2spc><with|font-family|<quote|ss>|negate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-226>>\n\n      <with|par-left|<quote|2tab>|B.1.2.10<space|2spc><with|font-family|<quote|ss>|full-decrement>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-227>>\n\n      <with|par-left|<quote|2tab>|B.1.2.11<space|2spc><with|font-family|<quote|ss>|decrement>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-228>>\n\n      <with|par-left|<quote|2tab>|B.1.2.12<space|2spc><with|font-family|<quote|ss>|full-multiply>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-229>>\n\n      <with|par-left|<quote|2tab>|B.1.2.13<space|2spc><with|font-family|<quote|ss>|multiply>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-230>>\n\n      <with|par-left|<quote|2tab>|B.1.2.14<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|><with|font-family|<quote|ss>|is-zero>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-231>>\n\n      <with|par-left|<quote|2tab>|B.1.2.15<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|><with|font-family|<quote|ss>|is-one>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-232>>\n\n      <with|par-left|<quote|2tab>|B.1.2.16<space|2spc><with|font-family|<quote|ss>|le>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-233>>\n\n      <with|par-left|<quote|2tab>|B.1.2.17<space|2spc><with|font-family|<quote|ss>|lt>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-234>>\n\n      <with|par-left|<quote|2tab>|B.1.2.18<space|2spc><with|font-family|<quote|ss>|min>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-235>>\n\n      <with|par-left|<quote|2tab>|B.1.2.19<space|2spc><with|font-family|<quote|ss>|max>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-236>>\n\n      <with|par-left|<quote|2tab>|B.1.2.20<space|2spc><with|font-family|<quote|ss>|median>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-237>>\n\n      <with|par-left|<quote|2tab>|B.1.2.21<space|2spc><with|font-family|<quote|ss>|div2n1n>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-238>>\n\n      <with|par-left|<quote|2tab>|B.1.2.22<space|2spc><with|font-family|<quote|ss>|div-mod>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-239>>\n\n      <with|par-left|<quote|2tab>|B.1.2.23<space|2spc><with|font-family|<quote|ss>|divide>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-240>>\n\n      <with|par-left|<quote|2tab>|B.1.2.24<space|2spc><with|font-family|<quote|ss>|modulo>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-241>>\n\n      <with|par-left|<quote|2tab>|B.1.2.25<space|2spc><with|font-family|<quote|ss>|divides>\n      (unsigned) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-242>>\n\n      <with|par-left|<quote|2tab>|B.1.2.26<space|2spc><with|font-family|<quote|ss>|eea>\n      (unsigned) (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-243>>\n\n      <with|par-left|<quote|2tab>|B.1.2.27<space|2spc><with|font-family|<quote|ss>|bezout>\n      (unsigned) (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-244>>\n\n      <with|par-left|<quote|2tab>|B.1.2.28<space|2spc><with|font-family|<quote|ss>|gcd>\n      (unsigned) (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-245>>\n\n      <with|par-left|<quote|2tab>|B.1.2.29<space|2spc><with|font-family|<quote|ss>|cofactors>\n      (unsigned)<space|0.2spc>(NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-246>>\n\n      <with|par-left|<quote|2tab>|B.1.2.30<space|2spc><with|font-family|<quote|ss>|lcm>\n      (unsigned) (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-247>>\n\n      <with|par-left|<quote|2tab>|B.1.2.31<space|2spc><with|font-family|<quote|ss>|jacobi>\n      (unsigned) (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-248>>\n\n      <with|par-left|<quote|2tab>|B.1.2.32<space|2spc><with|font-family|<quote|ss>|absolute-value>\n      (signed input/unsigned output) (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-249>>\n\n      <with|par-left|<quote|2tab>|B.1.2.33<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|><with|font-family|<quote|ss>|sign>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-250>>\n\n      <with|par-left|<quote|2tab>|B.1.2.34<space|2spc><with|font-family|<quote|ss>|signed-le>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-251>>\n\n      <with|par-left|<quote|2tab>|B.1.2.35<space|2spc><with|font-family|<quote|ss>|signed-lt>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-252>>\n\n      <with|par-left|<quote|2tab>|B.1.2.36<space|2spc><with|font-family|<quote|ss>|signed-min>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-253>>\n\n      <with|par-left|<quote|2tab>|B.1.2.37<space|2spc><with|font-family|<quote|ss>|signed-max>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-254>>\n\n      <with|par-left|<quote|2tab>|B.1.2.38<space|2spc><with|font-family|<quote|ss>|signed-median>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-255>>\n\n      <with|par-left|<quote|2tab>|B.1.2.39<space|2spc><with|font-family|<quote|ss>|signed-right-shift>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-256>>\n\n      <with|par-left|<quote|2tab>|B.1.2.40<space|2spc><with|font-family|<quote|ss>|signed-divmod>\n      (unsigned denominator) (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-257>>\n\n      <with|par-left|<quote|2tab>|B.1.2.41<space|2spc><with|font-family|<quote|ss>|signed-div>\n      (unsigned denominator) (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-258>>\n\n      <with|par-left|<quote|2tab>|B.1.2.42<space|2spc><with|font-family|<quote|ss>|signed-signed-divmod>\n      (signed denominator) (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-259>>\n\n      <with|par-left|<quote|2tab>|B.1.2.43<space|2spc><with|font-family|<quote|ss>|signed-signed-div>\n      (signed denominator) (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-260>>\n\n      <with|par-left|<quote|1tab>|B.1.3<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110101...:\n      >Jets for hash functions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-261>>\n\n      <with|par-left|<quote|2tab>|B.1.3.1<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|1101010...:\n      >Jets for SHA-2 <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-262>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha-256-block>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-263><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha-256-iv>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-264><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha-256-ctx-8-add>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-265><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha-256-ctx-8-add-buffer-511>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-266><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha-256-ctx-8-finalize>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-267><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha-256-ctx-8-init>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-268><vspace|0.15fn>>\n\n      <with|par-left|<quote|2tab>|B.1.3.2<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110101100...:\n      >Jets for SHA-3 (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-269>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha3-zero>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-270><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha3-absorb>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-271><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha3-xor>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-272><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha3-permute>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-273><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha3-squeeze-256>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-274><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sha3-squeeze-512>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-275><vspace|0.15fn>>\n\n      <with|par-left|<quote|2tab>|B.1.3.3<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110101101...:\n      >Jets for RIPEMD (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-276>>\n\n      <with|par-left|<quote|2tab>|B.1.3.4<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110101110000...:\n      >Jets for SHA-1 (RESERVED) (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-277>>\n\n      <with|par-left|<quote|1tab>|B.1.4<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110110000...:\n      >Jets for elliptic curve functions <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-278>>\n\n      <with|par-left|<quote|2tab>|B.1.4.1<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|1101100000...:\n      >Jets for secp256k1 <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-279>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-point-verify>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-280><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-decompress>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-281><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-linear-verify>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-282><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-linear-combination>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-283><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scale>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-284><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-generate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-285><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-infinity>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-286><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-normalize>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-287><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-negate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-288><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-ge-negate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-289><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-double>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-290><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-add>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-291><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-ge-add-ex>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-292><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-ge-add>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-293><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-rescale>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-294><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-is-infinity>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-295><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-equiv>\n      <with|color|<quote|red>|Does not exist in libsecp256k1>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-296><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-ge-equiv>\n      <with|color|<quote|red>|Does not exist in libsecp256k1>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-297><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-x-equiv>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-298><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-y-is-odd>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-299><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-is-on-curve>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-300><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-ge-is-on-curve>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-301><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-normalize>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-302><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-negate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-303><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-add>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-304><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-square>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-305><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-multiply>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-306><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-multiply-lambda>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-307><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-invert>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-308><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-is-zero>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-309><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-ge-scale-lambda>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-310><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-gej-scale-lambda>\n      <with|color|<quote|red>|Consider removing> (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-311><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-scalar-split-lambda>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-312><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-short-scalar>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-313><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-normalize>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-314><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-negate>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-315><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-add>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-316><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-square>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-317><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-multiply>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-318><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-multiply-beta>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-319><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-invert>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-320><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-square-root>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-321><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-is-zero>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-322><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-is-odd>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-323><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-fe-is-quad>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-324><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-hash-to-curve>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-325><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-swu>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-326><vspace|0.15fn>>\n\n      <with|par-left|<quote|1tab>|B.1.5<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110110001...:\n      >Jets for digital signatures <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-327>>\n\n      <with|par-left|<quote|2tab>|B.1.5.1<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|1101100010...:\n      >Jets for secp256k1 based digital signatures\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-328>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|check-sig-verify>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-329><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|bip-0340-verify>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-330><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|bip-0340-challenge-iv>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-331><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|bip-0340-challenge-midstate>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-332><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-signature-unpack>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-333><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-pubkey-unpack>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-334><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-pubkey-unpack-neg>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-335><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|secp256k1-ecdsa>\n      (NOT IMPLEMENTED) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-336><vspace|0.15fn>>\n\n      <with|par-left|<quote|1tab>|B.1.6<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110110010...:\n      >Jets for Simplicity (NOT IMPLEMENTED)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-337>>\n\n      <with|par-left|<quote|2tab>|B.1.6.1<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|11011000100...:\n      >Jets for tagged hash IVs <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-338>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|iden-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-339><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|comp-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-340><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|unit-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-341><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|injl-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-342><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|injr-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-343><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|case-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-344><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|pair-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-345><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|take-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-346><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|drop-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-347><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|witness-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-348><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|disconnect-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-349><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|fail-commitment-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-350><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|signtaure-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-351><vspace|0.15fn>>\n\n      <with|par-left|<quote|4tab>|<with|font-family|<quote|ss>|sighash-tag>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-352><vspace|0.15fn>>\n\n      <with|par-left|<quote|1tab>|B.1.7<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|110110011...:\n      >Jets for Bitcoin (without primitives)\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-353>>\n\n      <with|par-left|<quote|2tab>|B.1.7.1<space|2spc><with|font-family|<quote|ss>|parse-lock>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-354>>\n\n      <with|par-left|<quote|2tab>|B.1.7.2<space|2spc><with|font-family|<quote|ss>|parse-sequence>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-355>>\n\n      <with|par-left|<quote|2tab>|B.1.7.3<space|2spc><with|font-family|<quote|ss>|tapdata-init>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-356>>\n\n      B.2<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|111...:\n      >Bitcoin Jets <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-357>\n\n      <with|par-left|<quote|1tab>|B.2.1<space|2spc>Signature Hash Modes\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-358>>\n\n      <with|par-left|<quote|1tab>|B.2.2<space|2spc>Time Locks\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-359>>\n\n      <with|par-left|<quote|2tab>|B.2.2.1<space|2spc><with|font-family|<quote|ss>|check-lock-height>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-360>>\n\n      <with|par-left|<quote|2tab>|B.2.2.2<space|2spc><with|font-family|<quote|ss>|check-lock-time>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-361>>\n\n      <with|par-left|<quote|2tab>|B.2.2.3<space|2spc><with|font-family|<quote|ss>|check-lock-distance>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-362>>\n\n      <with|par-left|<quote|2tab>|B.2.2.4<space|2spc><with|font-family|<quote|ss>|check-lock-duration>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-363>>\n\n      <with|par-left|<quote|2tab>|B.2.2.5<space|2spc><with|font-family|<quote|ss>|tx-height-lock>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-364>>\n\n      <with|par-left|<quote|2tab>|B.2.2.6<space|2spc><with|font-family|<quote|ss>|tx-time-lock>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-365>>\n\n      <with|par-left|<quote|2tab>|B.2.2.7<space|2spc><with|font-family|<quote|ss>|tx-distance-lock>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-366>>\n\n      <with|par-left|<quote|2tab>|B.2.2.8<space|2spc><with|font-family|<quote|ss>|tx-duration-lock>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-367>>\n\n      <with|par-left|<quote|2tab>|B.2.2.9<space|2spc><with|font-family|<quote|ss>|is-final>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-368>>\n\n      <with|par-left|<quote|1tab>|B.2.3<space|2spc>Transaction\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-369>>\n\n      <with|par-left|<quote|2tab>|B.2.3.1<space|2spc><with|font-family|<quote|ss>|script-cmr>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-370>>\n\n      <with|par-left|<quote|2tab>|B.2.3.2<space|2spc><with|font-family|<quote|ss>|internal-key>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-371>>\n\n      <with|par-left|<quote|2tab>|B.2.3.3<space|2spc><with|font-family|<quote|ss>|current-index>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-372>>\n\n      <with|par-left|<quote|2tab>|B.2.3.4<space|2spc><with|font-family|<quote|ss>|num-inputs>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-373>>\n\n      <with|par-left|<quote|2tab>|B.2.3.5<space|2spc><with|font-family|<quote|ss>|num-outputs>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-374>>\n\n      <with|par-left|<quote|2tab>|B.2.3.6<space|2spc><with|font-family|<quote|ss>|lock-time>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-375>>\n\n      <with|par-left|<quote|2tab>|B.2.3.7<space|2spc><with|font-family|<quote|ss>|fee>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-376>>\n\n      <with|par-left|<quote|2tab>|B.2.3.8<space|2spc><with|font-family|<quote|ss>|output-value>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-377>>\n\n      <with|par-left|<quote|2tab>|B.2.3.9<space|2spc><with|font-family|<quote|ss>|output-script-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-378>>\n\n      <with|par-left|<quote|2tab>|B.2.3.10<space|2spc><with|font-family|<quote|ss>|total-output-value>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-379>>\n\n      <with|par-left|<quote|2tab>|B.2.3.11<space|2spc><with|font-family|<quote|ss>|current-prev-outpoint>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-380>>\n\n      <with|par-left|<quote|2tab>|B.2.3.12<space|2spc><with|font-family|<quote|ss>|current-value>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-381>>\n\n      <with|par-left|<quote|2tab>|B.2.3.13<space|2spc><with|font-family|<quote|ss>|current-script-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-382>>\n\n      <with|par-left|<quote|2tab>|B.2.3.14<space|2spc><with|font-family|<quote|ss>|current-sequence>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-383>>\n\n      <with|par-left|<quote|2tab>|B.2.3.15<space|2spc><with|font-family|<quote|ss>|current-annex-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-384>>\n\n      <with|par-left|<quote|2tab>|B.2.3.16<space|2spc><with|font-family|<quote|ss>|current-script-sig-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-385>>\n\n      <with|par-left|<quote|2tab>|B.2.3.17<space|2spc><with|font-family|<quote|ss>|input-prev-outpoint>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-386>>\n\n      <with|par-left|<quote|2tab>|B.2.3.18<space|2spc><with|font-family|<quote|ss>|input-value>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-387>>\n\n      <with|par-left|<quote|2tab>|B.2.3.19<space|2spc><with|font-family|<quote|ss>|input-script-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-388>>\n\n      <with|par-left|<quote|2tab>|B.2.3.20<space|2spc><with|font-family|<quote|ss>|input-sequence>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-389>>\n\n      <with|par-left|<quote|2tab>|B.2.3.21<space|2spc><with|font-family|<quote|ss>|input-annex-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-390>>\n\n      <with|par-left|<quote|2tab>|B.2.3.22<space|2spc><with|font-family|<quote|ss>|input-script-sig-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-391>>\n\n      <with|par-left|<quote|2tab>|B.2.3.23<space|2spc><with|font-family|<quote|ss>|total-input-value>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-392>>\n\n      <with|par-left|<quote|2tab>|B.2.3.24<space|2spc><with|font-family|<quote|ss>|tapleaf-version>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-393>>\n\n      <with|par-left|<quote|2tab>|B.2.3.25<space|2spc><with|font-family|<quote|ss>|tappath>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-394>>\n\n      <with|par-left|<quote|2tab>|B.2.3.26<space|2spc><with|font-family|<quote|ss>|version>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-395>>\n\n      B.3<space|2spc><with|font-family|<quote|tt>|language|<quote|verbatim>|111...:\n      >Elements Jets <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-396>\n\n      <with|par-left|<quote|1tab>|B.3.1<space|2spc>Signature Hash Modes\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-397>>\n\n      <with|par-left|<quote|2tab>|B.3.1.1<space|2spc><with|font-family|<quote|ss>|sig-all-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-398>>\n\n      <with|par-left|<quote|2tab>|B.3.1.2<space|2spc><with|font-family|<quote|ss>|tx-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-399>>\n\n      <with|par-left|<quote|2tab>|B.3.1.3<space|2spc><with|font-family|<quote|ss>|tap-env-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-400>>\n\n      <with|par-left|<quote|2tab>|B.3.1.4<space|2spc><with|font-family|<quote|ss>|outputs-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-401>>\n\n      <with|par-left|<quote|2tab>|B.3.1.5<space|2spc><with|font-family|<quote|ss>|inputs-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-402>>\n\n      <with|par-left|<quote|2tab>|B.3.1.6<space|2spc><with|font-family|<quote|ss>|issuances-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-403>>\n\n      <with|par-left|<quote|2tab>|B.3.1.7<space|2spc><with|font-family|<quote|ss>|input-utxos-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-404>>\n\n      <with|par-left|<quote|2tab>|B.3.1.8<space|2spc><with|font-family|<quote|ss>|output-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-405>>\n\n      <with|par-left|<quote|2tab>|B.3.1.9<space|2spc><with|font-family|<quote|ss>|output-amounts-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-406>>\n\n      <with|par-left|<quote|2tab>|B.3.1.10<space|2spc><with|font-family|<quote|ss>|output-scripts-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-407>>\n\n      <with|par-left|<quote|2tab>|B.3.1.11<space|2spc><with|font-family|<quote|ss>|output-nonces-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-408>>\n\n      <with|par-left|<quote|2tab>|B.3.1.12<space|2spc><with|font-family|<quote|ss>|output-range-proofs-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-409>>\n\n      <with|par-left|<quote|2tab>|B.3.1.13<space|2spc><with|font-family|<quote|ss>|output-surjection-proofs-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-410>>\n\n      <with|par-left|<quote|2tab>|B.3.1.14<space|2spc><with|font-family|<quote|ss>|input-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-411>>\n\n      <with|par-left|<quote|2tab>|B.3.1.15<space|2spc><with|font-family|<quote|ss>|input-outpoints-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-412>>\n\n      <with|par-left|<quote|2tab>|B.3.1.16<space|2spc><with|font-family|<quote|ss>|input-sequences-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-413>>\n\n      <with|par-left|<quote|2tab>|B.3.1.17<space|2spc><with|font-family|<quote|ss>|input-annexes-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-414>>\n\n      <with|par-left|<quote|2tab>|B.3.1.18<space|2spc><with|font-family|<quote|ss>|input-script-sigs-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-415>>\n\n      <with|par-left|<quote|2tab>|B.3.1.19<space|2spc><with|font-family|<quote|ss>|issuance-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-416>>\n\n      <with|par-left|<quote|2tab>|B.3.1.20<space|2spc><with|font-family|<quote|ss>|issuance-asset-amounts-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-417>>\n\n      <with|par-left|<quote|2tab>|B.3.1.21<space|2spc><with|font-family|<quote|ss>|issuance-token-amounts-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-418>>\n\n      <with|par-left|<quote|2tab>|B.3.1.22<space|2spc><with|font-family|<quote|ss>|issuance-range-proofs-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-419>>\n\n      <with|par-left|<quote|2tab>|B.3.1.23<space|2spc><with|font-family|<quote|ss>|issuance-blinding-entropy-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-420>>\n\n      <with|par-left|<quote|2tab>|B.3.1.24<space|2spc><with|font-family|<quote|ss>|input-utxo-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-421>>\n\n      <with|par-left|<quote|2tab>|B.3.1.25<space|2spc><with|font-family|<quote|ss>|input-amounts-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-422>>\n\n      <with|par-left|<quote|2tab>|B.3.1.26<space|2spc><with|font-family|<quote|ss>|input-scripts-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-423>>\n\n      <with|par-left|<quote|2tab>|B.3.1.27<space|2spc><with|font-family|<quote|ss>|tapleaf-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-424>>\n\n      <with|par-left|<quote|2tab>|B.3.1.28<space|2spc><with|font-family|<quote|ss>|tappath-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-425>>\n\n      <with|par-left|<quote|2tab>|B.3.1.29<space|2spc><with|font-family|<quote|ss>|outpoint-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-426>>\n\n      <with|par-left|<quote|2tab>|B.3.1.30<space|2spc><with|font-family|<quote|ss>|asset-amount-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-427>>\n\n      <with|par-left|<quote|2tab>|B.3.1.31<space|2spc><with|font-family|<quote|ss>|nonce-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-428>>\n\n      <with|par-left|<quote|2tab>|B.3.1.32<space|2spc><with|font-family|<quote|ss>|annex-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-429>>\n\n      <with|par-left|<quote|2tab>|B.3.1.33<space|2spc><with|font-family|<quote|ss>|build-tapleaf-simplicity>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-430>>\n\n      <with|par-left|<quote|2tab>|B.3.1.34<space|2spc><with|font-family|<quote|ss>|build-tapbranch>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-431>>\n\n      <with|par-left|<quote|2tab>|B.3.1.35<space|2spc><with|font-family|<quote|ss>|build-taptweak>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-432>>\n\n      <with|par-left|<quote|1tab>|B.3.2<space|2spc>Time Locks\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-433>>\n\n      <with|par-left|<quote|2tab>|B.3.2.1<space|2spc><with|font-family|<quote|ss>|check-lock-height>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-434>>\n\n      <with|par-left|<quote|2tab>|B.3.2.2<space|2spc><with|font-family|<quote|ss>|check-lock-time>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-435>>\n\n      <with|par-left|<quote|2tab>|B.3.2.3<space|2spc><with|font-family|<quote|ss>|check-lock-distance>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-436>>\n\n      <with|par-left|<quote|2tab>|B.3.2.4<space|2spc><with|font-family|<quote|ss>|check-lock-duration>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-437>>\n\n      <with|par-left|<quote|2tab>|B.3.2.5<space|2spc><with|font-family|<quote|ss>|tx-lock-height>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-438>>\n\n      <with|par-left|<quote|2tab>|B.3.2.6<space|2spc><with|font-family|<quote|ss>|tx-lock-time>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-439>>\n\n      <with|par-left|<quote|2tab>|B.3.2.7<space|2spc><with|font-family|<quote|ss>|tx-lock-distance>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-440>>\n\n      <with|par-left|<quote|2tab>|B.3.2.8<space|2spc><with|font-family|<quote|ss>|tx-lock-duration>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-441>>\n\n      <with|par-left|<quote|2tab>|B.3.2.9<space|2spc><with|font-family|<quote|ss>|tx-is-final>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-442>>\n\n      <with|par-left|<quote|1tab>|B.3.3<space|2spc>Issuance\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-443>>\n\n      <with|par-left|<quote|2tab>|B.3.3.1<space|2spc><with|font-family|<quote|ss>|issuance>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-444>>\n\n      <with|par-left|<quote|2tab>|B.3.3.2<space|2spc><with|font-family|<quote|ss>|issuance-asset>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-445>>\n\n      <with|par-left|<quote|2tab>|B.3.3.3<space|2spc><with|font-family|<quote|ss>|issuance-token>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-446>>\n\n      <with|par-left|<quote|2tab>|B.3.3.4<space|2spc><with|font-family|<quote|ss>|issuance-entropy>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-447>>\n\n      <with|par-left|<quote|2tab>|B.3.3.5<space|2spc><with|font-family|<quote|ss>|calculate-issuance-entropy>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-448>>\n\n      <with|par-left|<quote|2tab>|B.3.3.6<space|2spc><with|font-family|<quote|ss>|calculate-asset>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-449>>\n\n      <with|par-left|<quote|2tab>|B.3.3.7<space|2spc><with|font-family|<quote|ss>|calculate-explicit-token>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-450>>\n\n      <with|par-left|<quote|2tab>|B.3.3.8<space|2spc><with|font-family|<quote|ss>|calculate-confidential-token>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-451>>\n\n      <with|par-left|<quote|2tab>|B.3.3.9<space|2spc><with|font-family|<quote|ss>|lbtc-asset>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-452>>\n\n      <with|par-left|<quote|1tab>|B.3.4<space|2spc>Transaction\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-453>>\n\n      <with|par-left|<quote|2tab>|B.3.4.1<space|2spc><with|font-family|<quote|ss>|script-cmr>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-454>>\n\n      <with|par-left|<quote|2tab>|B.3.4.2<space|2spc><with|font-family|<quote|ss>|internal-key>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-455>>\n\n      <with|par-left|<quote|2tab>|B.3.4.3<space|2spc><with|font-family|<quote|ss>|current-index>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-456>>\n\n      <with|par-left|<quote|2tab>|B.3.4.4<space|2spc><with|font-family|<quote|ss>|num-inputs>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-457>>\n\n      <with|par-left|<quote|2tab>|B.3.4.5<space|2spc><with|font-family|<quote|ss>|num-outputs>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-458>>\n\n      <with|par-left|<quote|2tab>|B.3.4.6<space|2spc><with|font-family|<quote|ss>|lock-time>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-459>>\n\n      <with|par-left|<quote|2tab>|B.3.4.7<space|2spc><with|font-family|<quote|ss>|output-asset>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-460>>\n\n      <with|par-left|<quote|2tab>|B.3.4.8<space|2spc><with|font-family|<quote|ss>|output-amount>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-461>>\n\n      <with|par-left|<quote|2tab>|B.3.4.9<space|2spc><with|font-family|<quote|ss>|output-nonce>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-462>>\n\n      <with|par-left|<quote|2tab>|B.3.4.10<space|2spc><with|font-family|<quote|ss>|output-script-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-463>>\n\n      <with|par-left|<quote|2tab>|B.3.4.11<space|2spc><with|font-family|<quote|ss>|output-null-datum>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-464>>\n\n      <with|par-left|<quote|2tab>|B.3.4.12<space|2spc><with|font-family|<quote|ss>|output-is-fee>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-465>>\n\n      <with|par-left|<quote|2tab>|B.3.4.13<space|2spc><with|font-family|<quote|ss>|output-surjection-proof>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-466>>\n\n      <with|par-left|<quote|2tab>|B.3.4.14<space|2spc><with|font-family|<quote|ss>|output-range-proof>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-467>>\n\n      <with|par-left|<quote|2tab>|B.3.4.15<space|2spc><with|font-family|<quote|ss>|total-fee>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-468>>\n\n      <with|par-left|<quote|2tab>|B.3.4.16<space|2spc><with|font-family|<quote|ss>|current-pegin>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-469>>\n\n      <with|par-left|<quote|2tab>|B.3.4.17<space|2spc><with|font-family|<quote|ss>|current-prev-outpoint>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-470>>\n\n      <with|par-left|<quote|2tab>|B.3.4.18<space|2spc><with|font-family|<quote|ss>|current-asset>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-471>>\n\n      <with|par-left|<quote|2tab>|B.3.4.19<space|2spc><with|font-family|<quote|ss>|current-amount>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-472>>\n\n      <with|par-left|<quote|2tab>|B.3.4.20<space|2spc><with|font-family|<quote|ss>|current-script-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-473>>\n\n      <with|par-left|<quote|2tab>|B.3.4.21<space|2spc><with|font-family|<quote|ss>|current-sequence>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-474>>\n\n      <with|par-left|<quote|2tab>|B.3.4.22<space|2spc><with|font-family|<quote|ss>|current-annex-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-475>>\n\n      <with|par-left|<quote|2tab>|B.3.4.23<space|2spc><with|font-family|<quote|ss>|current-script-sig-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-476>>\n\n      <with|par-left|<quote|2tab>|B.3.4.24<space|2spc><with|font-family|<quote|ss>|current-reissuance-blinding>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-477>>\n\n      <with|par-left|<quote|2tab>|B.3.4.25<space|2spc><with|font-family|<quote|ss>|current-new-issuance-contract>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-478>>\n\n      <with|par-left|<quote|2tab>|B.3.4.26<space|2spc><with|font-family|<quote|ss>|current-reissuance-entropy>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-479>>\n\n      <with|par-left|<quote|2tab>|B.3.4.27<space|2spc><with|font-family|<quote|ss>|current-issuance-asset-amount>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-480>>\n\n      <with|par-left|<quote|2tab>|B.3.4.28<space|2spc><with|font-family|<quote|ss>|current-issuance-token-amount>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-481>>\n\n      <with|par-left|<quote|2tab>|B.3.4.29<space|2spc><with|font-family|<quote|ss>|current-issuance-asset-proof>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-482>>\n\n      <with|par-left|<quote|2tab>|B.3.4.30<space|2spc><with|font-family|<quote|ss>|current-issuance-token-proof>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-483>>\n\n      <with|par-left|<quote|2tab>|B.3.4.31<space|2spc><with|font-family|<quote|ss>|input-pegin>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-484>>\n\n      <with|par-left|<quote|2tab>|B.3.4.32<space|2spc><with|font-family|<quote|ss>|input-prev-outpoint>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-485>>\n\n      <with|par-left|<quote|2tab>|B.3.4.33<space|2spc><with|font-family|<quote|ss>|input-asset>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-486>>\n\n      <with|par-left|<quote|2tab>|B.3.4.34<space|2spc><with|font-family|<quote|ss>|input-amount>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-487>>\n\n      <with|par-left|<quote|2tab>|B.3.4.35<space|2spc><with|font-family|<quote|ss>|input-script-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-488>>\n\n      <with|par-left|<quote|2tab>|B.3.4.36<space|2spc><with|font-family|<quote|ss>|input-sequence>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-489>>\n\n      <with|par-left|<quote|2tab>|B.3.4.37<space|2spc><with|font-family|<quote|ss>|input-annex-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-490>>\n\n      <with|par-left|<quote|2tab>|B.3.4.38<space|2spc><with|font-family|<quote|ss>|input-script-sig-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-491>>\n\n      <with|par-left|<quote|2tab>|B.3.4.39<space|2spc><with|font-family|<quote|ss>|reissuance-blinding>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-492>>\n\n      <with|par-left|<quote|2tab>|B.3.4.40<space|2spc><with|font-family|<quote|ss>|new-issuance-contract>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-493>>\n\n      <with|par-left|<quote|2tab>|B.3.4.41<space|2spc><with|font-family|<quote|ss>|reissuance-entropy>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-494>>\n\n      <with|par-left|<quote|2tab>|B.3.4.42<space|2spc><with|font-family|<quote|ss>|issuance-asset-amount>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-495>>\n\n      <with|par-left|<quote|2tab>|B.3.4.43<space|2spc><with|font-family|<quote|ss>|issuance-token-amount>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-496>>\n\n      <with|par-left|<quote|2tab>|B.3.4.44<space|2spc><with|font-family|<quote|ss>|issuance-asset-proof>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-497>>\n\n      <with|par-left|<quote|2tab>|B.3.4.45<space|2spc><with|font-family|<quote|ss>|issuance-token-proof>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-498>>\n\n      <with|par-left|<quote|2tab>|B.3.4.46<space|2spc><with|font-family|<quote|ss>|tapleaf-version>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-499>>\n\n      <with|par-left|<quote|2tab>|B.3.4.47<space|2spc><with|font-family|<quote|ss>|tappath>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-500>>\n\n      <with|par-left|<quote|2tab>|B.3.4.48<space|2spc><with|font-family|<quote|ss>|version>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-501>>\n\n      <with|par-left|<quote|2tab>|B.3.4.49<space|2spc><with|font-family|<quote|ss>|genesis-block-hash>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-502>>\n\n      <with|par-left|<quote|2tab>|B.3.4.50<space|2spc><with|font-family|<quote|ss>|transaction-id>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-503>>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Appendix\n      C<space|2spc>Alternative Serialization of Simplicity DAGs>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-504><vspace|0.5fn>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Glossary>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-505><vspace|0.5fn>\n\n      <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Bibliography>\n      <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>\n      <no-break><pageref|auto-506><vspace|0.5fn>\n    </associate>\n  </collection>\n</auxiliary>"
  },
  {
    "path": "Simplicity.C.nix",
    "content": "{ lib, stdenv, gcovr ? null, wideMultiply ? null, withCoverage ? false\n, withProfiler ? false, gperftools ? null, graphviz ? null, perl ? null, librsvg ? null\n, withTiming ? true\n, withValgrind ? false, valgrind ? null\n, production ? false\n, enableShaNI ? stdenv.hostPlatform.isx86_64\n, gcov-executable ? if stdenv.cc.isGNU then \"gcov -r\" else\n                    if stdenv.cc.isClang then \"${stdenv.cc.cc.libllvm}/bin/llvm-cov gcov\"\n                    else null\n, doCheck ? true\n}:\nassert wideMultiply == null\n    || wideMultiply == \"int64\"\n    || wideMultiply == \"int128\"\n    || wideMultiply == \"int128_struct\";\nassert withCoverage -> gcovr != null && gcov-executable != null;\nassert withProfiler -> gperftools != null && graphviz != null && perl != null && librsvg != null;\nassert withValgrind -> valgrind != null;\nstdenv.mkDerivation {\n  name = \"libSimplicity-0.0.0\";\n  src = lib.sourceFilesBySuffices ./C [\"Makefile\" \".c\" \".h\" \".inc\"];\n  enableParallelBuilding = true;\n  CPPFLAGS = lib.optional (builtins.isString wideMultiply) \"-DUSE_FORCE_WIDEMUL_${lib.toUpper wideMultiply}=1\";\n  CFLAGS = lib.optional withCoverage \"--coverage\"\n        ++ lib.optional withTiming \"-DTIMING_FLAG\"\n        ++ lib.optional production \"-DPRODUCTION\";\n  LDFLAGS = lib.optional withCoverage \"--coverage\"\n         ++ lib.optional withProfiler \"-lprofiler\";\n  preBuild = lib.optional (enableShaNI) ''\n     makeFlagsArray+=(X86_SHANI_CXXFLAGS=\"-msse4.1 -msha\")\n  '';\n  inherit doCheck;\n  checkInputs = lib.optionals withProfiler [ gperftools ];\n  nativeCheckInputs = lib.optionals withProfiler [ graphviz ]\n                   ++ lib.optionals withValgrind [ valgrind ];\n  postCheck = lib.optional withCoverage ''\n    mkdir -p $out/shared/coverage\n    ${gcovr}/bin/gcovr --gcov-executable \"${gcov-executable}\" --verbose --html --html-details -o $out/shared/coverage/coverage.html\n  '' ++ lib.optional withProfiler ''\n    mkdir -p $out/shared/profile\n    CPUPROFILE=./prof.out CPUPROFILE_FREQUENCY=1000 ./test\n    # Until https://github.com/NixOS/nixpkgs/pull/279623 is resolved, we need to explicitly invoke perl\n    ${perl}/bin/perl ${gperftools}/bin/pprof --svg ./test prof.out > $out/shared/profile/test.svg\n    ${librsvg}/bin/rsvg-convert -f pdf -o $out/shared/profile/test.pdf $out/shared/profile/test.svg\n  '' ++ lib.optional withValgrind ''\n    valgrind  --leak-check=full --error-exitcode=1 ./test --no-timing\n  '';\n  meta = {\n    license = lib.licenses.mit;\n  };\n}\n"
  },
  {
    "path": "Simplicity.Coq.nix",
    "content": "{ coq, safegcd-bounds, lib, vst, stdenv\n, alectryon ? null\n, serapi ? null\n}:\nassert alectryon != null -> serapi != null;\nstdenv.mkDerivation {\n  name = \"Simplicity-coq-0.0.0\";\n  src = lib.sourceFilesBySuffices\n      (lib.sourceByRegex ./Coq [\"_CoqProject\" \"C\" \"C/.*\" \"Simplicity\" \"Simplicity/.*\" \"Util\" \"Util/.*\"])\n    [\"_CoqProject\" \".v\"];\n  outputs = [ \"out\" ] ++ lib.optional (alectryon != null) \"doc\";\n  postConfigure = ''\n    coq_makefile -f _CoqProject -o CoqMakefile\n  '';\n\n  buildInputs = [ coq ];\n  nativeBuildInputs = lib.optional (alectryon != null) serapi;\n  propagatedBuildInputs = [ safegcd-bounds vst ];\n  enableParallelBuilding = true;\n  makefile = \"CoqMakefile\";\n  postBuild = lib.optional (alectryon != null) ''\n    ${alectryon}/bin/alectryon --frontend coq --output-directory $doc --webpage-style windowed -R C C \\\n    C/secp256k1/spec_int128.v C/secp256k1/verif_int128_impl.v \\\n    C/divstep.v C/secp256k1/spec_modinv64.v C/secp256k1/verif_modinv64_impl.v\n  '';\n\n  installFlags = \"COQLIB=$(out)/lib/coq/${coq.coq-version}/\";\n  meta = {\n    license = lib.licenses.mit;\n  };\n}\n"
  },
  {
    "path": "Simplicity.Haskell.nix",
    "content": "{ mkDerivation, base, binary, cereal, lens-family, lib, MemoTrie, mtl, prettyprinter, QuickCheck, stdenv, split, tasty, tasty-hunit, tasty-quickcheck, tardis, unification-fd, vector, entropy\n, doCheck ? true\n, withValgrind ? false, valgrind ? null\n}:\nassert withValgrind -> valgrind != null;\nmkDerivation (rec {\n  pname = \"Simplicity\";\n  version = \"0.0.0\";\n  src = lib.sourceFilesBySuffices\n      (lib.sourceByRegex ./. [\"^LICENSE$\" \"^Simplicity\\.cabal$\" \"^Setup.hs$\" \"^Tests.hs$\" \"^Haskell$\" \"^Haskell/.*\"\n                              \"^Haskell-Generate$\" \"^Haskell-Generate/.*\"\n                              \"^Haskell-Examples$\" \"^Haskell-Examples/.*\"\n                              \"^C$\" \"^C/.*\"])\n    [\"LICENSE\" \".cabal\" \".hs\" \".hsig\" \".h\" \".c\" \".inc\"];\n  libraryHaskellDepends = [ base binary cereal lens-family MemoTrie mtl split tardis unification-fd vector ];\n  executableHaskellDepends = [ prettyprinter entropy ];\n  testHaskellDepends = libraryHaskellDepends ++ [ QuickCheck tasty tasty-hunit tasty-quickcheck ] ++ lib.optionals withValgrind [ valgrind ];\n  enableParallelBuilding = true;\n  inherit doCheck;\n  preCheck = [ ''\n    export GHCRTS=-N$NIX_BUILD_CORES\n  '' ] ++ lib.optional withValgrind ''\n    valgrind --leak-check=yes dist/build/testsuite/testsuite -p '$2==\"C / SPEC\"'\n  '';\n  postCheck = ''\n    unset GHCRTS\n  '';\n  # Uncomment to make testing deterministic.\n  # testFlags = [\"--quickcheck-replay=582534\"];\n\n  # Cabal's haddock doesn't work for Backpack / internal libraries / modules reexports.\n  # Until that is fix we manually generate some documentation pages\n  haddockFlags = [\"--haddock-option='--use-contents=index.html'\"];\n  postHaddock = ''\n    cp ${./manual-index.html} dist/doc/html/Simplicity/index.html\n    cp ${./Simplicity-Primitive.html} dist/doc/html/Simplicity/Simplicity-Primitive.html\n  '';\n\n  license = lib.licenses.mit;\n})\n"
  },
  {
    "path": "Simplicity.bib",
    "content": "@incollection{gentzen,\n  author={Gentzen, G.},\n  title={Investigations into Logical Deduction},\n  booktitle={The collected papers of Gerhard Gentzen},\n  editor={Szabo, M.E.},\n  chapter=3,\n  series={Studies in logic and the foundations of mathematics},\n  year={1969},\n  publisher={North-Holland Pub. Co.}\n}\n\n@misc{appel,\n  author       = {Appel, A. W.},\n  title        = {Verifiable {C}},\n  howpublished = \"\\url{http://vst.cs.princeton.edu/download/VC.pdf}\",\n  month        = Jul,\n  year         = 2016,\n}\n\n@misc{goldfederescrow,\n  title={Escrow protocols for cryptocurrencies: How to buy physical goods using Bitcoin},\n  author={Goldfeder, S. and Bonneau, J. and Gennaro, R. and Narayanan, A.},\n  howpublished = \"\\url{http://fc17.ifca.ai/preproceedings/paper_122.pdf}\",\n  month        = Apr,\n  year         = 2017,\n  note = \"To appear in the proceedings of the 21st International Conference on Financial Cryptography and Data Security\"\n}\n\n@article{Appel:2015,\n author = {Appel, A. W.},\n title = {Verification of a Cryptographic Primitive: {SHA-256}},\n journal = {ACM Trans. Program. Lang. Syst.},\n issue_date = {April 2015},\n volume = {37},\n number = {2},\n month = apr,\n year = {2015},\n issn = {0164-0925},\n pages = {7:1--7:31},\n articleno = {7},\n numpages = {31},\n url = {http://doi.acm.org/10.1145/2701415},\n doi = {10.1145/2701415},\n acmid = {2701415},\n publisher = {ACM},\n address = {New York, NY, USA},\n keywords = {Cryptography},\n}\n\n@article{unification,\ntitle = \"Linear unification\",\njournal = \"Journal of Computer and System Sciences\",\nvolume = \"16\",\nnumber = \"2\",\npages = \"158 - 167\",\nyear = \"1978\",\nnote = \"\",\nissn = \"0022-0000\",\ndoi = \"http://dx.doi.org/10.1016/0022-0000(78)90043-0\",\nurl = \"http://www.sciencedirect.com/science/article/pii/0022000078900430\",\nauthor = \"M. S. Paterson and M. N. Wegman\",\n\n}\n\n@techreport{sec2,\nauthor = \t\"{Certicom Research}\",\ntitle = \t\"{Standards for Efficient Cryptography 2: Recommended Elliptic Curve Domain Parameters}\",\ninstitution = \t\"Certicom Corp.\",\nyear = \t\t2000,\ntype = \t\t\"Standard\",\nnumber = \t\"SEC2\",\naddress = \t\"Mississauga, ON, USA\",\nmonth = \tSep\n}\n\n@manual{Coq:manual,\n  author = {{Coq} {Development} {Team}, The},\n  title  = {The {Coq} Proof Assistant Reference Manual, version 8.7},\n  month  = Oct,\n  year   = {2017},\n  url    = {http://coq.inria.fr}\n}\n\n@misc{oconnor2014,\n  author\t= \"O'Connor, R.\",\n  title\t\t= {{van Laarhoven} Free Monad},\n  year\t\t= 2014,\n  month     = Feb,\n  day       = 02,\n  note\t\t= {Blog post, \\url{http://r6.ca/blog/20140210T181244Z.html}}\n}\n\n@MISC{script,\n    author = {bitcoinwiki},\n    title = {Script},\n    howpublished = \"\\url{https://en.bitcoin.it/w/index.php?title=Script&oldid=61707}\",\n    year = {2016}\n}\n\n@misc{sighash,\n  author\t= \"Bitcoin Developer Guide\",\n  title\t\t= {Signature Hash Types},\n  note\t\t= \"\\url{https://bitcoin.org/en/developer-guide\\string#signature-hash-types}\",\n  year = {2014}\n}\n\n@MISC{bitcoin,\n    author = {Nakamoto, S.},\n    title = {{Bitcoin: A peer-to-peer electronic cash system}},\n    howpublished = \"\\url{http://bitcoin.org/bitcoin.pdf}\",\n    month = Nov,\n    year = {2008}\n}\n\n@misc{libsecp256k1,\n    author = \"Wuille, P.\",\n    title = {{libsecp256k1}},\n    howpublished = \"\\url{https://github.com/bitcoin-core/secp256k1/tree/1e6f1f5ad5e7f1e3ef79313ec02023902bf8175c}\",\n    month = May,\n    year = {2018},\n}\n\n@misc{misc,\n    author = {Nakamoto, S.},\n    title = {{misc changes}},\n    howpublished = \"\\url{https://github.com/bitcoin/bitcoin/commit/4bd188c4383d6e614e18f79dc337fbabe8464c82}\",\n    month = Aug,\n    year = {2010},\n    note = \"\\url{https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@131}\"\n}\n\n@misc{satoshiScript,\n    author = {Nakamoto, S.},\n    title = {{Re: Transactions and Scripts: DUP HASH160 ... EQUALVERIFY CHECKSIG}},\n    howpublished = \"\\url{https://bitcointalk.org/index.php?topic=195.msg1611\\string#msg1611}\",\n    month = Jun,\n    year = {2010},\n}\n\n\n@misc{sidechains,\n  author\t= \"Back, A. and Corallo, M. and Dashjr, L. and Friedenbach, M. and Maxwell, G. and Miller, A. and Poelstra, A. and Tim\\'on, J. and Wuille, P.\",\n  title\t\t= \"Enabling Blockchain Innovations with Pegged Sidechains\",\n  year\t\t= 2014,\n  note\t\t= \"\\url{https://www.blockstream.com/sidechains.pdf}\"\n}\n\n@misc{andresen2012-2,\n  author\t= \"Andresen, G.\",\n  howpublished\t= \"{Bitcoin} Improvement Proposal\",\n  title\t\t= \"{BIP16}: Pay to Script Hash\",\n  note\t\t= \"\\url{https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki}\",\n  year\t\t= 2012\n}\n\n@misc{cltv,\n  author\t= \"Todd, P.\",\n  howpublished\t= \"{Bitcoin} Improvement Proposal\",\n  title\t\t= \"{BIP65}: OP\\_CHECKLOCKTIMEVERIFY\",\n  note\t\t= \"\\url{https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki}\",\n  year\t\t= 2014\n}\n\n@misc{mast,\n  author\t= \"Lau, J.\",\n  howpublished\t= \"{Bitcoin} Improvement Proposal\",\n  title\t\t= \"{BIP114}: Merkelized Abstract Syntax Tree\",\n  note\t\t= \"\\url{https://github.com/bitcoin/bips/blob/master/bip-0114.mediawiki}\",\n  year\t\t= 2016\n}\n\n@misc{csv,\n  author\t= \"BtcDrak and Friedenbach, M. and Lombrozo, E.\",\n  howpublished\t= \"{Bitcoin} Improvement Proposal\",\n  title\t\t= \"{BIP112}: CHECKSEQUENCEVERIFY\",\n  note\t\t= \"\\url{https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki}\",\n  year\t\t= 2015\n}\n\n@misc{bip-0340,\n  author\t= \"Wuille, P. and Nick, J. and Ruffing, T.\",\n  title\t\t= \"bip-0340\",\n  note\t\t= \"\\url{https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki}\",\n  year\t\t= 2020\n}\n\n@misc{zkcp,\n  author\t= \"Maxwell, G.\",\n  title\t\t= {Zero-Knowledge Contingent Payment},\n  year\t\t= 2011,\n  note\t\t= \"\\url{https://en.bitcoin.it/wiki/Zero\\_Knowledge\\_Contingent\\_Payment}\"\n}\n\n@misc{urbit,\n  author\t= \"Yarvin, C. and Monk, P. and Dyudin, A. and Pasco, R.\",\n  title\t\t= {Urbit: A Solid-State Interpreter},\n  month     = May,\n  year\t\t= 2016,\n  note\t\t= \"\\url{http://media.urbit.org/whitepaper.pdf}\"\n}\n\n@article{compcert,\n  author = {Leroy, X.},\n  title = {Formal verification of a realistic compiler},\n  journal = {Communications of the ACM},\n  year = 2009,\n  volume = 52,\n  number = 7,\n  pages = {107--115},\n  url = {http://gallium.inria.fr/~xleroy/publi/compcert-CACM.pdf},\n  urlpublisher = {http://doi.acm.org/10.1145/1538788.1538814},\n  hal = {http://hal.archives-ouvertes.fr/inria-00415861/},\n  pubkind = {journal-int-mono},\n  abstract = {This paper reports on the development and formal verification (proof\nof semantic preservation) of CompCert, a compiler from Clight (a\nlarge subset of the C programming language) to PowerPC assembly code,\nusing the Coq proof assistant both for programming the compiler and\nfor proving its correctness.  Such a verified compiler is useful in\nthe context of critical software and its formal verification: the\nverification of the compiler guarantees that the safety properties\nproved on the source code hold for the executable compiled code as\nwell.}\n}\n\n\n@inproceedings{schnorr1989,\n  author        = \"Schnorr, C. P.\",\n  title         = \"Efficient Identification and Signatures for Smart Cards\",\n  booktitle     = {Proceedings of CRYPTO '89},\n  year          = 1989,\n}\n\n@article{ecdsa,\n    author = {{National institute of standards and technology}},\n    title = {{FIPS} Pub 186-4 Federal Information Processing Standards Publication Digital Signature Standard (DSS)},\n    url = {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.362.5590},\n    year = {2013}\n}\n\n@techreport{sha,\n    author = {{National institute of standards and technology}},\n    day = {26},\n    institution = {DEPARTMENT OF COMMERCE},\n    keywords = {cryptography, hash, standard},\n    month = aug,\n    title = {{FIPS} 180-4, Secure Hash Standard, Federal Information Processing Standard ({FIPS}), Publication 180-4},\n    url = {http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf},\n    year = {2015}\n}\n\n@misc{oconnor2016,\n  author\t= \"O'Connor, R.\",\n  title\t\t= {Covenants in Elements Alpha},\n  year\t\t= 2016,\n  note\t\t= {Blog post, \\url{https://blockstream.com/2016/11/02/covenants-in-elements-alpha.html}}\n}\n\n@Inbook{King1993,\nauthor=\"King, D. J. and Wadler, P.\",\neditor=\"Launchbury, John and Sansom, Patrick\",\ntitle=\"Combining Monads\",\nbookTitle=\"Functional Programming, Glasgow 1992: Proceedings of the 1992 Glasgow Workshop on Functional Programming, Ayr, Scotland, 6--8 July 1992\",\nyear=\"1993\",\npublisher=\"Springer London\",\naddress=\"London\",\npages=\"134--143\",\nabstract=\"Monads provide a way of structuring functional programs. Most real applications require a combination of primitive monads. Here we describe how some monads may be combined with others to yield a combined monad.\",\nisbn=\"978-1-4471-3215-8\",\ndoi=\"10.1007/978-1-4471-3215-8_12\",\nurl=\"https://doi.org/10.1007/978-1-4471-3215-8_12\"\n}\n\n@inproceedings{Mairson:1989,\n author = {Mairson, H. G.},\n title = {Deciding {ML} Typability is Complete for Deterministic Exponential Time},\n booktitle = {Proceedings of the 17th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages},\n series = {POPL '90},\n year = {1990},\n isbn = {0-89791-343-4},\n location = {San Francisco, California, USA},\n pages = {382--401},\n numpages = {20},\n url = {http://doi.acm.org/10.1145/96709.96748},\n doi = {10.1145/96709.96748},\n acmid = {96748},\n publisher = {ACM},\n address = {New York, NY, USA},\n}\n\n@article{Carette:2009,\n author = {Carette, J. and Kiselyov, O. and Shan, C.},\n title = {Finally Tagless, Partially Evaluated: Tagless Staged Interpreters for Simpler Typed Languages},\n journal = {J. Funct. Program.},\n issue_date = {September 2009},\n volume = {19},\n number = {5},\n month = sep,\n year = {2009},\n issn = {0956-7968},\n pages = {509--543},\n numpages = {35},\n url = {http://dx.doi.org/10.1017/S0956796809007205},\n doi = {10.1017/S0956796809007205},\n acmid = {1630626},\n publisher = {Cambridge University Press},\n address = {New York, NY, USA},\n}\n\n@inproceedings{Mahboubi:2013,\n author = {Mahboubi, A. and Tassi, E.},\n title = {Canonical Structures for the Working {Coq} User},\n booktitle = {Proceedings of the 4th International Conference on Interactive Theorem Proving},\n series = {ITP'13},\n year = {2013},\n isbn = {978-3-642-39633-5},\n location = {Rennes, France},\n pages = {19--34},\n numpages = {16},\n url = {http://dx.doi.org/10.1007/978-3-642-39634-2_5},\n doi = {10.1007/978-3-642-39634-2_5},\n acmid = {2529322},\n publisher = {Springer-Verlag},\n address = {Berlin, Heidelberg},\n}\n\n@inproceedings{garillot:2009,\n  TITLE = {{Packaging Mathematical Structures}},\n  AUTHOR = {Garillot, F. and Gonthier, G. and Mahboubi, A. and Rideau, L.},\n  URL = {https://hal.inria.fr/inria-00368403},\n  BOOKTITLE = {{Theorem Proving in Higher Order Logics}},\n  ADDRESS = {Munich, Germany},\n  EDITOR = {Tobias Nipkow and Christian Urban},\n  PUBLISHER = {{Springer}},\n  SERIES = {Lecture Notes in Computer Science},\n  VOLUME = {5674},\n  YEAR = {2009},\n  KEYWORDS = {Formalization of Algebra ; Coercive subtyping ; Type inference ; Coq ; SSReflect},\n  PDF = {https://hal.inria.fr/inria-00368403/file/main.pdf},\n  HAL_ID = {inria-00368403},\n  HAL_VERSION = {v2},\n}\n\n@misc{f-algebra,\n    author = \"{Wikipedia contributors}\",\n    title = \"F-algebra --- {Wikipedia}{,} The Free Encyclopedia\",\n    year = \"2017\",\n    howpublished = \"\\url{https://en.wikipedia.org/w/index.php?title=F-algebra&oldid=814231684}\",\n  }\n"
  },
  {
    "path": "Simplicity.cabal",
    "content": "cabal-version:       2.2\nname:                Simplicity\nversion:             0.0.0\n-- synopsis:\n-- description:\nlicense:             MIT\nlicense-file:        LICENSE\nauthor:              Russell O'Connor\nmaintainer:          roconnor@blockstream.com\ncopyright:           (c) 2018 Blockstream\ncategory:            Language\nbuild-type:          Simple\nextra-source-files:  README.md\ntested-with:         GHC ==8.6.4\n\nlibrary Simplicity-Core\n  C-sources:           C/sha256.c, C/frame.c, C/jets.c, C/jets-secp256k1.c\n                       Haskell/cbits/frame.c, Haskell/cbits/coreJets.c\n  Include-dirs:        C\n  Includes:            sha256.h, frame.h, jets.h\n  exposed-modules:     Simplicity.Ty, Simplicity.Ty.Bit, Simplicity.Ty.Word, Simplicity.Ty.LibSecp256k1, Simplicity.Ty.Sha256,\n                       Simplicity.Term.Core,\n                       Simplicity.CoreJets,\n                       Simplicity.Functor, Simplicity.Tensor,\n                       Simplicity.FFI.Frame, Simplicity.FFI.Jets,\n                       Simplicity.BitMachine, Simplicity.BitMachine.Authentic, Simplicity.BitMachine.Ty,\n                       Simplicity.BitMachine.Translate, Simplicity.BitMachine.Translate.TCO,\n                       Simplicity.BitMachine.StaticAnalysis, Simplicity.BitMachine.StaticAnalysis.TCO,\n                       Simplicity.BitMachine.StaticAnalysis.Cost,\n                       Simplicity.Programs.Bit, Simplicity.Programs.Generic, Simplicity.Programs.Loop,\n                       Simplicity.Programs.Word, Simplicity.Programs.Arith,\n                       Simplicity.Programs.Sha256, Simplicity.Programs.Sha256.Lib,\n                       Simplicity.Programs.LibSecp256k1, Simplicity.Programs.LibSecp256k1.Lib,\n                       Simplicity.Programs.CheckSig, Simplicity.Programs.CheckSig.Lib,\n                       Simplicity.Programs.Bitcoin, Simplicity.Programs.Bitcoin.Lib,\n                       Simplicity.Programs.Elements, Simplicity.Programs.Elements.Lib,\n                       Simplicity.Programs.TimeLock,\n                       Simplicity.Digest, Simplicity.Digest.Pure.SHA,\n                       Simplicity.Tags,\n                       Simplicity.Tree,\n                       Simplicity.MerkleRoot, Simplicity.MerkleRoot.Impl,\n                       Simplicity.Delegator, Simplicity.Delegator.Impl,\n                       Simplicity.Serialization,\n                       Simplicity.Word,\n                       Simplicity.LibSecp256k1.Schnorr,\n                       Simplicity.LibSecp256k1.Spec,\n                       Simplicity.Bitcoin,\n                       Simplicity.Weight\n  other-extensions:    BangPatterns,\n                       FlexibleContexts,\n                       GADTs, StandaloneDeriving, TypeFamilies\n                       NoMonomorphismRestriction,\n                       UndecidableInstances, QuantifiedConstraints, RankNTypes, ExistentialQuantification, TypeOperators, TypeFamilies, DeriveTraversable,\n                       ScopedTypeVariables,\n                       RecordWildCards,\n                       ForeignFunctionInterface\n  hs-source-dirs:      Haskell/Core\n  default-language:    Haskell2010\n  ghc-options:         -O2\n  build-depends:       base >=4.9 && <4.20,\n                       binary >=0.7 && <0.9,\n                       bytestring >=0.10 && <0.13,\n                       containers >=0.5.10 && <0.7,\n                       cereal >=0.5 && <0.6,\n                       lens-family >=2.0 && <2.2,\n                       mtl >=2.2 && <2.4,\n                       MemoTrie >=0.6 && <0.7,\n                       split >=0.2.3 && <0.3,\n                       tardis >=0.4.1 && <0.6,\n                       transformers >=0.5 && <0.7,\n                       unification-fd >=0.10 && <0.12,\n                       vector >=0.12 && <0.14\n\nlibrary Simplicity-Bitcoin\n  exposed-modules:     Simplicity.Bitcoin.Primitive, Simplicity.Bitcoin.DataTypes\n  other-extensions:    GADTs, ScopedTypeVariables\n  hs-source-dirs:      Haskell/Bitcoin\n  default-language:    Haskell2010\n  ghc-options:         -O2\n  build-depends:       Simplicity-Core,\n                       base >=4.9 && <4.20,\n                       bytestring >=0.10 && <0.13,\n                       cereal >=0.5 && <0.6,\n                       vector >=0.12 && <0.14\n\nlibrary Simplicity-Elements\n  exposed-modules:     Simplicity.Elements.Primitive, Simplicity.Elements.DataTypes\n  other-extensions:    GADTs, ScopedTypeVariables\n  hs-source-dirs:      Haskell/Elements\n  default-language:    Haskell2010\n  ghc-options:         -O2\n  build-depends:       Simplicity-Core,\n                       base >=4.9 && <4.20,\n                       bytestring >=0.10 && <0.13,\n                       cereal >=0.5 && <0.6,\n                       containers >=0.5.10 && <0.7,\n                       lens-family >=2.0 && <2.2,\n                       vector >=0.12 && <0.14\n\nlibrary Simplicity-Indef\n  exposed-modules:     Simplicity.Term,\n                       Simplicity.Semantics,\n                       Simplicity.Dag, Simplicity.Inference\n                       Simplicity.JetType,\n                       Simplicity.Serialization.BitString, Simplicity.Serialization.ByteString,\n                       Simplicity.StaticAnalysis.Cost\n  signatures:          Simplicity.Primitive\n  other-extensions:    EmptyCase, EmptyDataDecls, EmptyDataDeriving,\n                       ScopedTypeVariables,\n                       DeriveTraversable, FlexibleInstances, GADTs, TypeFamilies, MultiParamTypeClasses, RankNTypes,\n                       UndecidableInstances\n  hs-source-dirs:      Haskell/Indef\n  default-language:    Haskell2010\n  ghc-options:         -O2\n  build-depends:       Simplicity-Core,\n                       base >=4.9 && <4.20,\n                       bytestring >=0.10 && <0.13,\n                       cereal >=0.5 && <0.6,\n                       containers >=0.5.10 && <0.7,\n                       lens-family >=2.0 && <2.2,\n                       mtl >=2.2 && <2.4,\n                       transformers >=0.5 && <0.7,\n                       unification-fd >=0.10 && <0.12,\n                       vector >=0.12 && <0.14\n\nlibrary\n  C-sources:           C/rsort.c C/elements/elementsJets.c C/elements/ops.c C/elements/env.c C/elements/txEnv.c\n                       C/bitcoin/bitcoinJets.c C/bitcoin/ops.c C/bitcoin/env.c C/bitcoin/txEnv.c\n                       Haskell/cbits/bitcoin/jets.c Haskell/cbits/bitcoin/env.c\n                       Haskell/cbits/elements/jets.c Haskell/cbits/elements/env.c\n  Include-dirs:        C C/include\n  Includes:            elements/elementsJets.h elements/primitive.h simplicity/elements/env.h\n  exposed-modules:     Simplicity.Bitcoin.Programs.SigHash, Simplicity.Bitcoin.Programs.SigHash.Lib,\n                       Simplicity.Bitcoin.Programs.Transaction, Simplicity.Bitcoin.Programs.Transaction.Lib,\n                       Simplicity.Bitcoin.Programs.TimeLock, Simplicity.Elements.Programs.TimeLock,\n                       Simplicity.Bitcoin.Benchmarks,\n                       Simplicity.Elements.Programs.Issuance, Simplicity.Elements.Programs.Issuance.Lib,\n                       Simplicity.Elements.Programs.SigHash, Simplicity.Elements.Programs.SigHash.Lib,\n                       Simplicity.Elements.Programs.Transaction, Simplicity.Elements.Programs.Transaction.Lib,\n                       Simplicity.Elements.Benchmarks,\n                       Simplicity.Bitcoin.Jets, Simplicity.Elements.Jets,\n                       Simplicity.Bitcoin.FFI.Env, Simplicity.Bitcoin.FFI.Jets,\n                       Simplicity.Elements.FFI.Env, Simplicity.Elements.FFI.Jets\n  reexported-modules:  Simplicity.Ty, Simplicity.Ty.Bit, Simplicity.Ty.Word, Simplicity.Ty.LibSecp256k1, Simplicity.Ty.Sha256,\n                       Simplicity.Term.Core,\n                       Simplicity.CoreJets,\n                       Simplicity.Functor, Simplicity.Tensor,\n                       Simplicity.FFI.Jets,\n                       Simplicity.BitMachine, Simplicity.BitMachine.Authentic, Simplicity.BitMachine.Ty,\n                       Simplicity.BitMachine.Translate, Simplicity.BitMachine.Translate.TCO,\n                       Simplicity.BitMachine.StaticAnalysis, Simplicity.BitMachine.StaticAnalysis.TCO,\n                       Simplicity.BitMachine.StaticAnalysis.Cost,\n                       Simplicity.Programs.Bit, Simplicity.Programs.Generic, Simplicity.Programs.Loop,\n                       Simplicity.Programs.Word, Simplicity.Programs.Arith,\n                       Simplicity.Programs.Sha256, Simplicity.Programs.Sha256.Lib,\n                       Simplicity.Programs.LibSecp256k1, Simplicity.Programs.LibSecp256k1.Lib,\n                       Simplicity.Programs.CheckSig, Simplicity.Programs.CheckSig.Lib,\n                       Simplicity.Programs.Bitcoin, Simplicity.Programs.Bitcoin.Lib,\n                       Simplicity.Programs.Elements, Simplicity.Programs.Elements.Lib,\n                       Simplicity.Programs.TimeLock,\n                       Simplicity.Digest,\n                       Simplicity.Tags,\n                       Simplicity.Tree,\n                       Simplicity.MerkleRoot,\n                       Simplicity.Delegator,\n                       Simplicity.Serialization,\n                       Simplicity.Word,\n                       Simplicity.LibSecp256k1.Schnorr,\n                       Simplicity.LibSecp256k1.Spec,\n                       Simplicity.Bitcoin,\n                       Simplicity.Bitcoin.Primitive, Simplicity.Bitcoin.DataTypes,\n                       Simplicity.Bitcoin.Term,\n                       Simplicity.Bitcoin.Semantics,\n                       Simplicity.Bitcoin.Dag,\n                       Simplicity.Bitcoin.Inference,\n                       Simplicity.Bitcoin.JetType,\n                       Simplicity.Bitcoin.Serialization.BitString,\n                       Simplicity.Bitcoin.Serialization.ByteString,\n                       Simplicity.Elements.Primitive, Simplicity.Elements.DataTypes,\n                       Simplicity.Elements.Term,\n                       Simplicity.Elements.Semantics,\n                       Simplicity.Elements.Dag,\n                       Simplicity.Elements.Inference,\n                       Simplicity.Elements.JetType,\n                       Simplicity.Elements.Serialization.BitString,\n                       Simplicity.Elements.Serialization.ByteString,\n                       Simplicity.Elements.StaticAnalysis.Cost,\n                       Simplicity.Weight\n  mixins:              Simplicity-Indef\n                         (Simplicity.Term as Simplicity.Bitcoin.Term,\n                          Simplicity.Semantics as Simplicity.Bitcoin.Semantics,\n                          Simplicity.Dag as Simplicity.Bitcoin.Dag,\n                          Simplicity.Inference as Simplicity.Bitcoin.Inference,\n                          Simplicity.JetType as Simplicity.Bitcoin.JetType,\n                          Simplicity.Serialization.BitString as Simplicity.Bitcoin.Serialization.BitString,\n                          Simplicity.Serialization.ByteString as Simplicity.Bitcoin.Serialization.ByteString,\n                          Simplicity.StaticAnalysis.Cost as Simplicity.Bitcoin.StaticAnalysis.Cost)\n                       requires\n                         (Simplicity.Primitive as Simplicity.Bitcoin.Primitive),\n                       Simplicity-Indef\n                         (Simplicity.Term as Simplicity.Elements.Term,\n                          Simplicity.Semantics as Simplicity.Elements.Semantics,\n                          Simplicity.Dag as Simplicity.Elements.Dag,\n                          Simplicity.Inference as Simplicity.Elements.Inference,\n                          Simplicity.JetType as Simplicity.Elements.JetType,\n                          Simplicity.Serialization.BitString as Simplicity.Elements.Serialization.BitString,\n                          Simplicity.Serialization.ByteString as Simplicity.Elements.Serialization.ByteString,\n                          Simplicity.StaticAnalysis.Cost as Simplicity.Elements.StaticAnalysis.Cost)\n                       requires\n                         (Simplicity.Primitive as Simplicity.Elements.Primitive)\n  other-extensions:    ConstraintKinds, GADTs, StandaloneDeriving, TypeFamilies\n  hs-source-dirs:      Haskell\n  default-language:    Haskell2010\n  ghc-options:         -O2\n  build-depends:       Simplicity-Core, Simplicity-Bitcoin, Simplicity-Elements, Simplicity-Indef,\n                       base >=4.9 && <4.20,\n                       bytestring >=0.10 && <0.13,\n                       cereal >=0.5 && <0.6,\n                       containers >=0.5.10 && <0.7,\n                       lens-family >=2.0 && <2.2,\n                       vector >=0.12 && <0.14\n\nTest-Suite testsuite\n  Type:                exitcode-stdio-1.0\n  main-is:             Tests.hs\n  other-extensions:    RankNTypes,\n                       GADTs,\n                       ScopedTypeVariables\n  hs-source-dirs:      Haskell/Tests\n  default-language:    Haskell2010\n  ghc-options:         -threaded -O0 -with-rtsopts=-c\n  other-modules:       Simplicity.Programs.Example,\n                       Simplicity.Bip0340,\n                       Simplicity.Arbitrary, Simplicity.Ty.Arbitrary, Simplicity.Bitcoin.Arbitrary, Simplicity.Elements.Arbitrary,\n                       Simplicity.BitMachine.StaticAnalysis.Tests, Simplicity.BitMachine.Tests,\n                       Simplicity.Bitcoin.FFI.Primitive,\n                       Simplicity.Bitcoin.TestEval, Simplicity.Bitcoin.Tests, Simplicity.Bitcoin.FFI.Tests,\n                       Simplicity.Bitcoin.Serialization.Tests,\n                       Simplicity.FFI.Bitstream, Simplicity.FFI.Dag,\n                       Simplicity.Elements.FFI.Primitive,\n                       Simplicity.Elements.TestEval, Simplicity.Elements.Tests, Simplicity.Elements.FFI.Tests,\n                       Simplicity.Elements.Regression, Simplicity.Elements.Serialization.Tests,\n                       Simplicity.FFI.Tests,\n                       Simplicity.Programs.Tests,\n                       Simplicity.Serialization.Tests,\n                       Simplicity.TestCoreEval,\n                       Simplicity.Ty.Tests\n  C-sources:           C/rsort.c, C/dag.c, C/bitstream.c\n                       C/bitcoin/primitive.c\n                       C/elements/primitive.c\n                       Haskell/cbits/bitstream.c, Haskell/cbits/dag.c\n  build-depends:       Simplicity,\n                       base >=4.9 && <4.20,\n                       bytestring >=0.10 && <0.13,\n                       cereal >=0.5 && <0.6,\n                       containers >=0.5.10 && <0.7,\n                       lens-family >=2.0 && <2.2,\n                       QuickCheck >=2.10 && <2.16,\n                       mtl >=2.2 && <2.4,\n                       tasty >=0.11 && <1.6,\n                       tasty-hunit >=0.9 && <0.11,\n                       tasty-quickcheck >=0.8 && <0.12,\n                       transformers >=0.5 && <0.7,\n                       vector >=0.12 && <0.14\n\nexecutable GenDecodeJet\n    main-is:          GenDecodeJet.hs\n    ghc-options:      -main-is GenDecodeJet\n\n    -- Modules included in this executable, other than Main.\n    -- other-modules:\n\n    -- LANGUAGE extensions used by modules in this package.\n    -- other-extensions:\n    hs-source-dirs:   Haskell-Generate\n    default-language: Haskell2010\n    other-modules:    NameWrangler\n    build-depends:    Simplicity,\n                      base >=4.9 && <4.20,\n                      prettyprinter >=1.7 && <1.8,\n                      split >=0.2.3 && <0.3,\n\nexecutable GenPrecomputed\n    main-is:          GenPrecomputed.hs\n    ghc-options:      -main-is GenPrecomputed\n\n    -- Modules included in this executable, other than Main.\n    -- other-modules:\n\n    -- LANGUAGE extensions used by modules in this package.\n    -- other-extensions:\n    hs-source-dirs:   Haskell-Generate\n    default-language: Haskell2010\n    build-depends:    Simplicity,\n                      base >=4.9 && <4.20,\n                      prettyprinter >=1.7 && <1.8,\n                      split >=0.2.3 && <0.3,\n\nexecutable GenPrimitive\n    main-is:          GenPrimitive.hs\n    ghc-options:      -main-is GenPrimitives\n\n    -- Modules included in this executable, other than Main.\n    -- other-modules:\n\n    -- LANGUAGE extensions used by modules in this package.\n    -- other-extensions:\n    hs-source-dirs:   Haskell-Generate\n    default-language: Haskell2010\n    other-modules:    NameWrangler\n    build-depends:    Simplicity,\n                      base >=4.9 && <4.20,\n                      containers >=0.5.10 && <0.7,\n                      mtl >=2.2 && <2.4,\n                      split >=0.2.3 && <0.3,\n                      unification-fd >=0.10 && <0.12,\n\nexecutable GenTests\n    main-is:          GenTests.hs\n    ghc-options:      -main-is GenTests\n\n    -- Modules included in this executable, other than Main.\n    -- other-modules:\n\n    -- LANGUAGE extensions used by modules in this package.\n    -- other-extensions:\n    hs-source-dirs:   Haskell-Generate\n    default-language: Haskell2010\n    build-depends:    Simplicity,\n                      base >=4.9 && <4.20,\n                      bytestring >=0.10 && <0.13,\n                      cereal >=0.5 && <0.6,\n                      lens-family >=2.0 && <2.2,\n                      split >=0.2.3 && <0.3,\n                      vector >=0.12 && <0.14,\nexecutable GenRustJets\n    main-is:          GenRustJets.hs\n    ghc-options:      -main-is GenRustJets\n\n    -- Modules included in this executable, other than Main.\n    -- other-modules:\n\n    -- LANGUAGE extensions used by modules in this package.\n    -- other-extensions:\n    hs-source-dirs:   Haskell-Generate\n    default-language: Haskell2010\n    other-modules:    NameWrangler\n    other-extensions: OverloadedStrings\n    build-depends:    Simplicity,\n                      base >=4.9 && <4.20,\n                      containers >=0.5.10 && <0.7,\n                      prettyprinter >=1.7 && <1.8,\n                      split >=0.2.3 && <0.3,\n                      transformers >=0.5 && <0.7,\n                      unification-fd >=0.10 && <0.12,\nexecutable TestnetTransaction\n    main-is:          TestnetTransaction.hs\n    ghc-options:      -main-is TestnetTransaction\n\n    -- Modules included in this executable, other than Main.\n    -- other-modules:\n\n    -- LANGUAGE extensions used by modules in this package.\n    -- other-extensions:\n    hs-source-dirs:   Haskell-Examples\n    default-language: Haskell2010\n    build-depends:    Simplicity,\n                      array >=0.5 && <0.6,\n                      base >=4.9 && <4.20,\n                      bytestring >=0.10 && <0.13,\n                      cereal >=0.5 && <0.6,\n                      entropy >=0.4 && <0.5,\n                      lens-family >=2.0 && <2.2,\n                      vector >=0.12 && <0.14,\n"
  },
  {
    "path": "alectryon/alectryon.css",
    "content": "@charset \"UTF-8\";\n/*\nCopyright © 2019 Clément Pit-Claudel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n/*******************************/\n/* CSS reset for .alectryon-io */\n/*******************************/\n\n.alectryon-io blockquote {\n    line-height: inherit;\n}\n\n.alectryon-io blockquote:after {\n    display: none;\n}\n\n.alectryon-io label {\n    display: inline;\n    font-size: inherit;\n    margin: 0;\n}\n\n/* Undo <small> and <blockquote>, added to improve RSS rendering. */\n\n.alectryon-io small.alectryon-output {\n    font-size: inherit;\n}\n\n.alectryon-io blockquote.alectryon-goal,\n.alectryon-io blockquote.alectryon-message {\n    font-weight: normal;\n    font-size: inherit;\n}\n\n/***************/\n/* Main styles */\n/***************/\n\n.alectryon-coqdoc .doc .code,\n.alectryon-coqdoc .doc .comment,\n.alectryon-coqdoc .doc .inlinecode,\n.alectryon-mref,\n.alectryon-block, .alectryon-io,\n.alectryon-toggle-label, .alectryon-banner {\n    font-family: 'Iosevka Slab Web', 'Iosevka Web', 'Iosevka Slab', 'Iosevka', 'Fira Code', monospace;\n    font-feature-settings: \"COQX\" 1 /* Coq ligatures */, \"XV00\" 1 /* Legacy */, \"calt\" 1 /* Fallback */;\n    line-height: initial;\n}\n\n.alectryon-io, .alectryon-block, .alectryon-toggle-label, .alectryon-banner {\n    overflow: visible;\n    overflow-wrap: break-word;\n    position: relative;\n    white-space: pre-wrap;\n}\n\n/*\nCoqIDE doesn't turn off the unicode bidirectional algorithm (and PG simply\nrespects the user's `bidi-display-reordering` setting), so don't turn it off\nhere either.  But beware unexpected results like `Definition test_אב := 0.`\n\n.alectryon-io span {\n    direction: ltr;\n    unicode-bidi: bidi-override;\n}\n\nIn any case, make an exception for comments:\n\n.highlight .c {\n    direction: embed;\n    unicode-bidi: initial;\n}\n*/\n\n.alectryon-mref,\n.alectryon-mref-marker {\n    align-self: center;\n    box-sizing: border-box;\n    display: inline-block;\n    font-size: 80%;\n    font-weight: bold;\n    line-height: 1;\n    box-shadow: 0 0 0 1pt black;\n    padding: 1pt 0.3em;\n    text-decoration: none;\n}\n\n.alectryon-block .alectryon-mref-marker,\n.alectryon-io .alectryon-mref-marker {\n    user-select: none;\n    margin: -0.25em 0 -0.25em 0.5em;\n}\n\n.alectryon-inline .alectryon-mref-marker {\n    margin: -0.25em 0.15em -0.25em 0.625em; /* 625 = 0.5em / 80% */\n}\n\n.alectryon-mref {\n    color: inherit;\n    margin: -0.5em 0.25em;\n}\n\n.alectryon-goal:target .goal-separator .alectryon-mref-marker,\n:target > .alectryon-mref-marker {\n    animation: blink 0.2s step-start 0s 3 normal none;\n    background-color: #fcaf3e;\n    position: relative;\n}\n\n@keyframes blink {\n    50% {\n        box-shadow: 0 0 0 3pt #fcaf3e, 0 0 0 4pt black;\n        z-index: 10;\n    }\n}\n\n.alectryon-toggle,\n.alectryon-io .alectryon-extra-goal-toggle {\n    display: none;\n}\n\n.alectryon-bubble,\n.alectryon-io label,\n.alectryon-toggle-label {\n    cursor: pointer;\n}\n\n.alectryon-toggle-label {\n    display: block;\n    font-size: 0.8em;\n}\n\n.alectryon-io .alectryon-input {\n    padding: 0.1em 0; /* Enlarge the hitbox slightly to fill interline gaps */\n}\n\n.alectryon-io .alectryon-sentence.alectryon-target .alectryon-input {\n    /* FIXME if keywords were ‘bolder’ we wouldn't need !important */\n    font-weight: bold !important; /* Use !important to avoid a * selector */\n}\n\n.alectryon-bubble:before,\n.alectryon-toggle-label:before,\n.alectryon-io label.alectryon-input:after,\n.alectryon-io .alectryon-goal > label:before {\n    border: 1px solid #babdb6;\n    border-radius: 1em;\n    box-sizing: border-box;\n    content: '';\n    display: inline-block;\n    font-weight: bold;\n    height: 0.25em;\n    margin-bottom: 0.15em;\n    vertical-align: middle;\n    width: 0.75em;\n}\n\n.alectryon-toggle-label:before,\n.alectryon-io .alectryon-goal > label:before {\n    margin-right: 0.25em;\n}\n\n.alectryon-io .alectryon-goal > label:before {\n    margin-top: 0.125em;\n}\n\n.alectryon-io label.alectryon-input {\n    padding-right: 1em; /* Prevent line wraps before the checkbox bubble */\n}\n\n.alectryon-io label.alectryon-input:after {\n    margin-left: 0.25em;\n    margin-right: -1em; /* Compensate for the anti-wrapping space */\n}\n\n.alectryon-failed {\n    /* Underlines are broken in Chrome (they reset at each element boundary)… */\n    /* text-decoration: red wavy underline; */\n    /* … but it isn't too noticeable with dots */\n    text-decoration: red dotted underline;\n    text-decoration-skip-ink: none;\n    /* Chrome prints background images in low resolution, yielding a blurry underline */\n    /* background: bottom / 0.3em auto repeat-x url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyLjY0NiAxLjg1MiIgaGVpZ2h0PSI4IiB3aWR0aD0iMTAiPjxwYXRoIGQ9Ik0wIC4yNjVjLjc5NCAwIC41MyAxLjMyMiAxLjMyMyAxLjMyMi43OTQgMCAuNTMtMS4zMjIgMS4zMjMtMS4zMjIiIGZpbGw9Im5vbmUiIHN0cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48L3N2Zz4=); */\n}\n\n/* Wrapping :hover rules in a media query ensures that tapping a Coq sentence\n   doesn't trigger its :hover state (otherwise, on mobile, tapping a sentence to\n   hide its output causes it to remain visible (its :hover state gets triggered.\n   We only do it for the default style though, since other styles don't put the\n   output over the main text, so showing too much is not an issue. */\n@media (any-hover: hover) {\n    .alectryon-bubble:hover:before,\n    .alectryon-toggle-label:hover:before,\n    .alectryon-io label.alectryon-input:hover:after {\n        background: #eeeeec;\n    }\n\n    .alectryon-io label.alectryon-input:hover {\n        text-decoration: underline dotted #babdb6;\n\t    text-shadow: 0 0 1px rgb(46, 52, 54, 0.3); /* #2e3436 + opacity */\n    }\n\n    .alectryon-io .alectryon-sentence:hover .alectryon-output {\n        z-index: 2; /* Place hovered goals above .alectryon-sentence.alectryon-target ones */\n    }\n}\n\n.alectryon-toggle:checked + .alectryon-toggle-label:before,\n.alectryon-io .alectryon-sentence > .alectryon-toggle:checked + label.alectryon-input:after,\n.alectryon-io .alectryon-extra-goal-toggle:checked + .alectryon-goal > label:before {\n    background-color: #babdb6;\n    border-color: #babdb6;\n}\n\n/* Disable clicks on sentences when the document-wide toggle is set. */\n.alectryon-toggle:checked + label + .alectryon-container label.alectryon-input {\n    cursor: unset;\n    pointer-events: none;\n}\n\n/* Hide individual checkboxes when the document-wide toggle is set. */\n.alectryon-toggle:checked + label + .alectryon-container label.alectryon-input:after {\n    display: none;\n}\n\n/* .alectryon-output is displayed by toggles, :hover, and .alectryon-target rules */\n.alectryon-io .alectryon-output {\n    box-sizing: border-box;\n    display: none;\n    left: 0;\n    right: 0;\n    position: absolute;\n    padding: 0.25em 0;\n    overflow: visible; /* Let box-shadows overflow */\n    z-index: 1; /* Default to an index lower than that used by :hover */\n}\n\n@media (any-hover: hover) { /* See note above about this @media query */\n    .alectryon-io .alectryon-sentence:hover .alectryon-output:not(:hover) {\n        display: block;\n    }\n}\n\n.alectryon-io .alectryon-sentence.alectryon-target .alectryon-output {\n    display: block;\n}\n\n/* Indicate active (hovered or targeted) goals with a shadow. */\n.alectryon-io .alectryon-sentence:hover .alectryon-output:not(:hover) .alectryon-messages,\n.alectryon-io .alectryon-sentence.alectryon-target .alectryon-output  .alectryon-messages,\n.alectryon-io .alectryon-sentence:hover .alectryon-output:not(:hover) .alectryon-goals,\n.alectryon-io .alectryon-sentence.alectryon-target .alectryon-output  .alectryon-goals {\n    box-shadow: 0 0 3px gray;\n}\n\n.alectryon-io .alectryon-extra-goals .alectryon-goal .goal-hyps {\n    display: none;\n}\n\n.alectryon-io .alectryon-extra-goals .alectryon-extra-goal-toggle:not(:checked) + .alectryon-goal label.goal-separator hr {\n    /* Dashes indicate that the hypotheses are hidden */\n    border-top-style: dashed;\n}\n\n\n/* Show just a small preview of the other goals; this is undone by the\n   \"extra-goal\" toggle and by :hover and .alectryon-target in windowed mode. */\n.alectryon-io .alectryon-extra-goals .alectryon-goal .goal-conclusion {\n    max-height: 5.2em;\n    overflow-y: auto;\n    /* Combining ‘overflow-y: auto’ with ‘display: inline-block’ causes extra space\n       to be added below the box. ‘vertical-align: middle’ gets rid of it. */\n    vertical-align: middle;\n}\n\n.alectryon-io .alectryon-goals,\n.alectryon-io .alectryon-messages {\n    background: #eeeeec;\n\tborder: thin solid #d3d7cf; /* Convenient when pre's background is already #EEE */\n    display: block;\n    padding: 0.25em;\n}\n\n.alectryon-message::before {\n    content: '';\n    float: right;\n    /* etc/svg/square-bubble-xl.svg */\n    background: url(\"data:image/svg+xml,%3Csvg width='14' height='14' viewBox='0 0 3.704 3.704' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill-rule='evenodd' stroke='%23000' stroke-width='.264'%3E%3Cpath d='M.794.934h2.115M.794 1.463h1.455M.794 1.992h1.852'/%3E%3C/g%3E%3Cpath d='M.132.14v2.646h.794v.661l.926-.661h1.72V.14z' fill='none' stroke='%23000' stroke-width='.265'/%3E%3C/svg%3E\") top right no-repeat;\n    height: 14px;\n    width: 14px;\n}\n\n.alectryon-toggle:checked + label + .alectryon-container {\n    width: unset;\n}\n\n/* Show goals when a toggle is set */\n.alectryon-toggle:checked + label + .alectryon-container label.alectryon-input + .alectryon-output,\n.alectryon-io .alectryon-sentence > .alectryon-toggle:checked ~ .alectryon-output {\n    display: block;\n    position: static;\n    width: unset;\n    background: unset; /* Override the backgrounds set in floating in windowed mode */\n    padding: 0.25em 0; /* Re-assert so that later :hover rules don't override this padding */\n}\n\n.alectryon-toggle:checked + label + .alectryon-container label.alectryon-input + .alectryon-output .goal-hyps,\n.alectryon-io .alectryon-sentence > .alectryon-toggle:checked ~ .alectryon-output .goal-hyps {\n    /* Overridden back in windowed style */\n    flex-flow: row wrap;\n    justify-content: flex-start;\n}\n\n.alectryon-toggle:checked + label + .alectryon-container .alectryon-sentence .alectryon-output > div,\n.alectryon-io .alectryon-sentence > .alectryon-toggle:checked ~ .alectryon-output > div {\n    display: block;\n}\n\n.alectryon-io .alectryon-extra-goal-toggle:checked + .alectryon-goal .goal-hyps {\n    display: flex;\n}\n\n.alectryon-io .alectryon-extra-goal-toggle:checked + .alectryon-goal .goal-conclusion {\n    max-height: unset;\n    overflow-y: unset;\n}\n\n.alectryon-toggle:checked + label + .alectryon-container .alectryon-sentence > .alectryon-toggle ~ .alectryon-wsp,\n.alectryon-io .alectryon-sentence > .alectryon-toggle:checked ~ .alectryon-wsp {\n    display: none;\n}\n\n.alectryon-io .alectryon-messages,\n.alectryon-io .alectryon-message,\n.alectryon-io .alectryon-goals,\n.alectryon-io .alectryon-goal,\n.alectryon-io .goal-hyps > span,\n.alectryon-io .goal-conclusion {\n    border-radius: 0.15em;\n}\n\n.alectryon-io .alectryon-goal,\n.alectryon-io .alectryon-message {\n    align-items: center;\n    background: #d3d7cf;\n    display: block;\n    flex-direction: column;\n    margin: 0.25em;\n    padding: 0.5em;\n    position: relative;\n}\n\n.alectryon-io .goal-hyps {\n    align-content: space-around;\n    align-items: baseline;\n    display: flex;\n    flex-flow: column nowrap; /* re-stated in windowed mode */\n    justify-content: space-around;\n    /* LATER use a ‘gap’ property instead of margins once supported */\n    margin: -0.15em -0.25em; /* -0.15em to cancel the item spacing */\n    padding-bottom: 0.35em; /* 0.5em-0.15em to cancel the 0.5em of .goal-separator */\n}\n\n.alectryon-io .goal-hyps > br {\n    display: none; /* Only for RSS readers */\n}\n\n.alectryon-io .goal-hyps > span,\n.alectryon-io .goal-conclusion {\n    background: #eeeeec;\n    display: inline-block;\n    padding: 0.15em 0.35em;\n}\n\n.alectryon-io .goal-hyps > span {\n    align-items: baseline;\n    display: inline-flex;\n    margin: 0.15em 0.25em;\n}\n\n.alectryon-block var,\n.alectryon-inline var,\n.alectryon-io .goal-hyps > span > var {\n    font-weight: 600;\n    font-style: unset;\n}\n\n.alectryon-io .goal-hyps > span > var {\n    /* Shrink the list of names, but let it grow as long as space is available. */\n    flex-basis: min-content;\n    flex-grow: 1;\n}\n\n.alectryon-io .goal-hyps > span b {\n    font-weight: 600;\n    margin: 0 0 0 0.5em;\n    white-space: pre;\n}\n\n.alectryon-io .hyp-body,\n.alectryon-io .hyp-type {\n    display: flex;\n    align-items: baseline;\n}\n\n.alectryon-io .goal-separator {\n    align-items: center;\n    display: flex;\n    flex-direction: row;\n    height: 1em; /* Fixed height to ignore goal name and markers */\n    margin-top: -0.5em; /* Compensated in .goal-hyps when shown */\n}\n\n.alectryon-io .goal-separator hr {\n    border: none;\n    border-top: thin solid #555753;\n    display: block;\n    flex-grow: 1;\n    margin: 0;\n}\n\n.alectryon-io .goal-separator .goal-name {\n    font-size: 0.75em;\n    margin-left: 0.5em;\n}\n\n/**********/\n/* Banner */\n/**********/\n\n.alectryon-banner {\n    background: #eeeeec;\n    border: 1px solid #babcbd;\n    font-size: 0.75em;\n    padding: 0.25em;\n    text-align: center;\n    margin: 1em 0;\n}\n\n.alectryon-banner a {\n    cursor: pointer;\n    text-decoration: underline;\n}\n\n.alectryon-banner kbd {\n    background: #d3d7cf;\n    border-radius: 0.15em;\n    border: 1px solid #babdb6;\n    box-sizing: border-box;\n    display: inline-block;\n    font-family: inherit;\n    font-size: 0.9em;\n    height: 1.3em;\n    line-height: 1.2em;\n    margin: -0.25em 0;\n    padding: 0 0.25em;\n    vertical-align: middle;\n}\n\n/**********/\n/* Toggle */\n/**********/\n\n.alectryon-toggle-label {\n    margin: 1rem 0;\n}\n\n/******************/\n/* Floating style */\n/******************/\n\n/* If there's space, display goals to the right of the code, not below it. */\n@media (min-width: 80rem) {\n    /* Unlike the windowed case, we don't want to move output blocks to the side\n       when they are both :checked and -targeted, since it gets confusing as\n       things jump around; hence the commented-output part of the selector,\n       which would otherwise increase specificity */\n    .alectryon-floating .alectryon-sentence.alectryon-target /* > .alectryon-toggle ~ */ .alectryon-output,\n    .alectryon-floating .alectryon-sentence:hover .alectryon-output {\n        top: 0;\n        left: 100%;\n        right: -100%;\n        padding: 0 0.5em;\n        position:  absolute;\n    }\n\n    .alectryon-floating .alectryon-output {\n        min-height: 100%;\n    }\n\n    .alectryon-floating .alectryon-sentence:hover .alectryon-output {\n        background: white; /* Ensure that short goals hide long ones */\n    }\n\n    /* This odd margin-bottom property prevents the sticky div from bumping\n       against the bottom of its container (.alectryon-output).  The alternative\n       would be enlarging .alectryon-output, but that would cause overflows,\n       enlarging scrollbars and yielding scrolling towards the bottom of the\n       page.  Doing things this way instead makes it possible to restrict\n       .alectryon-output to a reasonable size (100%, through top = bottom = 0).\n       See also https://stackoverflow.com/questions/43909940/. */\n    /* See note on specificity above */\n    .alectryon-floating .alectryon-sentence.alectryon-target /* > .alectryon-toggle ~ */ .alectryon-output > div,\n    .alectryon-floating .alectryon-sentence:hover .alectryon-output > div {\n        margin-bottom: -200%;\n        position: sticky;\n        top: 0;\n    }\n\n    .alectryon-floating .alectryon-toggle:checked + label + .alectryon-container .alectryon-sentence .alectryon-output > div,\n    .alectryon-floating .alectryon-io .alectryon-sentence > .alectryon-toggle:checked ~ .alectryon-output > div {\n        margin-bottom: unset; /* Undo the margin */\n    }\n\n    /* Float underneath the current fragment\n    @media (max-width: 80rem) {\n        .alectryon-floating .alectryon-output {\n            top: 100%;\n        }\n    } */\n}\n\n/********************/\n/* Multi-pane style */\n/********************/\n\n.alectryon-windowed {\n    border: 0 solid #2e3436;\n    box-sizing: border-box;\n}\n\n.alectryon-windowed .alectryon-sentence:hover .alectryon-output {\n    background: white; /* Ensure that short goals hide long ones */\n}\n\n.alectryon-windowed .alectryon-output {\n    position: fixed; /* Overwritten by the ‘:checked’ rules */\n}\n\n/* See note about specificity below */\n.alectryon-windowed .alectryon-sentence:hover .alectryon-output,\n.alectryon-windowed .alectryon-sentence.alectryon-target > .alectryon-toggle ~ .alectryon-output {\n    padding: 0.5em;\n    overflow-y: auto; /* Windowed contents may need to scroll */\n}\n\n.alectryon-windowed .alectryon-io .alectryon-sentence:hover .alectryon-output:not(:hover) .alectryon-messages,\n.alectryon-windowed .alectryon-io .alectryon-sentence.alectryon-target .alectryon-output  .alectryon-messages,\n.alectryon-windowed .alectryon-io .alectryon-sentence:hover .alectryon-output:not(:hover) .alectryon-goals,\n.alectryon-windowed .alectryon-io .alectryon-sentence.alectryon-target .alectryon-output  .alectryon-goals {\n    box-shadow: none; /* A shadow is unnecessary here and incompatible with overflow-y set to auto */\n}\n\n.alectryon-windowed .alectryon-io .alectryon-sentence.alectryon-target .alectryon-output .goal-hyps {\n    /* Restated to override the :checked style */\n    flex-flow: column nowrap;\n    justify-content: space-around;\n}\n\n\n.alectryon-windowed .alectryon-sentence.alectryon-target .alectryon-extra-goals .alectryon-goal .goal-conclusion\n/* Like .alectryon-io .alectryon-extra-goal-toggle:checked + .alectryon-goal .goal-conclusion */ {\n    max-height: unset;\n    overflow-y: unset;\n}\n\n.alectryon-windowed .alectryon-output > div {\n    display: flex; /* Put messages after goals */\n    flex-direction: column-reverse;\n}\n\n/*********************/\n/* Standalone styles */\n/*********************/\n\n.alectryon-standalone {\n    font-family: 'IBM Plex Serif', 'PT Serif', 'Merriweather', 'DejaVu Serif', serif;\n    line-height: 1.5;\n}\n\n@media screen and (min-width: 50rem) {\n    html.alectryon-standalone {\n        /* Prevent flickering when hovering a block causes scrollbars to appear. */\n        margin-left: calc(100vw - 100%);\n        margin-right: 0;\n    }\n}\n\n/* Coqdoc */\n\n.alectryon-coqdoc .doc .code,\n.alectryon-coqdoc .doc .inlinecode,\n.alectryon-coqdoc .doc .comment {\n    display: inline;\n}\n\n.alectryon-coqdoc .doc .comment {\n    color: #eeeeec;\n}\n\n.alectryon-coqdoc .doc .paragraph {\n    height: 0.75em;\n}\n\n/* Centered, Floating */\n\n.alectryon-standalone .alectryon-centered,\n.alectryon-standalone .alectryon-floating {\n    max-width: 50rem;\n    margin: auto;\n}\n\n@media (min-width: 80rem) {\n    .alectryon-standalone .alectryon-floating {\n        max-width: 80rem;\n    }\n\n    .alectryon-standalone .alectryon-floating > * {\n        width: 50%;\n        margin-left: 0;\n    }\n}\n\n/* Windowed */\n\n.alectryon-standalone .alectryon-windowed {\n    display: block;\n    margin: 0;\n    overflow-y: auto;\n    position: absolute;\n    padding: 0 1em;\n}\n\n.alectryon-standalone .alectryon-windowed > * {\n    /* Override properties of docutils_basic.css */\n    margin-left: 0;\n    max-width: unset;\n}\n\n.alectryon-standalone .alectryon-windowed .alectryon-io {\n    box-sizing: border-box;\n    width: 100%;\n}\n\n/* No need to predicate the ‘:hover’ rules below on ‘:not(:checked)’, since ‘left’,\n   ‘right’, ‘top’, and ‘bottom’ will be inactived by the :checked rules setting\n   ‘position’ to ‘static’ */\n\n\n/* Specificity: We want the output to stay inline when hovered while unfolded\n   (:checked), but we want it to move when it's targeted (i.e. when the user\n   is browsing goals one by one using the keyboard, in which case we want to\n   goals to appear in consistent locations).  The selectors below ensure\n   that :hover < :checked < -targeted in terms of specificity. */\n/* LATER: Reimplement this stuff with CSS variables */\n.alectryon-windowed .alectryon-sentence.alectryon-target > .alectryon-toggle ~ .alectryon-output {\n    position: fixed;\n}\n\n@media screen and (min-width: 60rem) {\n    .alectryon-standalone .alectryon-windowed {\n        border-right-width: thin;\n        bottom: 0;\n        left: 0;\n        right: 50%;\n        top: 0;\n    }\n\n    .alectryon-standalone .alectryon-windowed .alectryon-sentence:hover .alectryon-output,\n    .alectryon-standalone .alectryon-windowed .alectryon-sentence.alectryon-target .alectryon-output {\n        bottom: 0;\n        left: 50%;\n        right: 0;\n        top: 0;\n    }\n}\n\n@media screen and (max-width: 60rem) {\n    .alectryon-standalone .alectryon-windowed {\n        border-bottom-width: 1px;\n        bottom: 40%;\n        left: 0;\n        right: 0;\n        top: 0;\n    }\n\n    .alectryon-standalone .alectryon-windowed .alectryon-sentence:hover .alectryon-output,\n    .alectryon-standalone .alectryon-windowed .alectryon-sentence.alectryon-target .alectryon-output {\n        bottom: 0;\n        left: 0;\n        right: 0;\n        top: 60%;\n    }\n}\n"
  },
  {
    "path": "alectryon/alectryon.js",
    "content": "var Alectryon;\n(function(Alectryon) {\n    (function (slideshow) {\n        function anchor(sentence) { return \"#\" + sentence.id; }\n\n        function current_sentence() { return slideshow.sentences[slideshow.pos]; }\n\n        function unhighlight() {\n            var sentence = current_sentence();\n            if (sentence) sentence.classList.remove(\"alectryon-target\");\n            slideshow.pos = -1;\n        }\n\n        function highlight(sentence) {\n            sentence.classList.add(\"alectryon-target\");\n        }\n\n        function scroll(sentence) {\n            // Put the top of the current fragment close to the top of the\n            // screen, but scroll it out of view if showing it requires pushing\n            // the sentence past half of the screen.  If sentence is already in\n            // a reasonable position, don't move.\n            var parent = sentence.parentElement;\n            /* We want to scroll the whole document, so start at root… */\n            while (parent && !parent.classList.contains(\"alectryon-root\"))\n                parent = parent.parentElement;\n            /* … and work up from there to find a scrollable element.\n               parent.scrollHeight can be greater than parent.clientHeight\n               without showing scrollbars, so we add a 10px buffer. */\n            while (parent && parent.scrollHeight <= parent.clientHeight + 10)\n                parent = parent.parentElement;\n            /* <body> and <html> elements can have their client rect overflow\n             * the window if their height is unset, so scroll the window\n             * instead */\n            if (parent && (parent.nodeName == \"BODY\" || parent.nodeName == \"HTML\"))\n                parent = null;\n\n            var rect = function(e) { return e.getBoundingClientRect(); };\n            var parent_box = parent ? rect(parent) : { y: 0, height: window.innerHeight },\n                sentence_y = rect(sentence).y - parent_box.y,\n                fragment_y = rect(sentence.parentElement).y - parent_box.y;\n\n            // The assertion below sometimes fails for the first element in a block.\n            // console.assert(sentence_y >= fragment_y);\n\n            if (sentence_y < 0.1 * parent_box.height ||\n                sentence_y > 0.7 * parent_box.height) {\n                (parent || window).scrollBy(\n                    0, Math.max(sentence_y - 0.5 * parent_box.height,\n                                fragment_y - 0.1 * parent_box.height));\n            }\n        }\n\n        function highlighted(pos) {\n            return slideshow.pos == pos;\n        }\n\n        function navigate(pos, inhibitScroll) {\n            unhighlight();\n            slideshow.pos = Math.min(Math.max(pos, 0), slideshow.sentences.length - 1);\n            var sentence = current_sentence();\n            highlight(sentence);\n            if (!inhibitScroll)\n                scroll(sentence);\n        }\n\n        var keys = {\n            PAGE_UP: 33,\n            PAGE_DOWN: 34,\n            ARROW_UP: 38,\n            ARROW_DOWN: 40,\n            h: 72, l: 76, p: 80, n: 78\n        };\n\n        function onkeydown(e) {\n            e = e || window.event;\n            if (e.ctrlKey || e.metaKey) {\n                if (e.keyCode == keys.ARROW_UP)\n                    slideshow.previous();\n                else if (e.keyCode == keys.ARROW_DOWN)\n                    slideshow.next();\n                else\n                    return;\n            } else {\n                // if (e.keyCode == keys.PAGE_UP || e.keyCode == keys.p || e.keyCode == keys.h)\n                //     slideshow.previous();\n                // else if (e.keyCode == keys.PAGE_DOWN || e.keyCode == keys.n || e.keyCode == keys.l)\n                //     slideshow.next();\n                // else\n                return;\n            }\n            e.preventDefault();\n        }\n\n        function start() {\n            slideshow.navigate(0);\n        }\n\n        function toggleHighlight(idx) {\n            if (highlighted(idx))\n                unhighlight();\n            else\n                navigate(idx, true);\n        }\n\n        function handleClick(evt) {\n            if (evt.ctrlKey || evt.metaKey) {\n                var sentence = evt.currentTarget;\n\n                // Ensure that the goal is shown on the side, not inline\n                var checkbox = sentence.getElementsByClassName(\"alectryon-toggle\")[0];\n                if (checkbox)\n                    checkbox.checked = false;\n\n                toggleHighlight(sentence.alectryon_index);\n                evt.preventDefault();\n            }\n        }\n\n        function init() {\n            document.onkeydown = onkeydown;\n            slideshow.pos = -1;\n            slideshow.sentences = Array.from(document.getElementsByClassName(\"alectryon-sentence\"));\n            slideshow.sentences.forEach(function (s, idx) {\n                s.addEventListener('click', handleClick, false);\n                s.alectryon_index = idx;\n            });\n        }\n\n        slideshow.start = start;\n        slideshow.end = unhighlight;\n        slideshow.navigate = navigate;\n        slideshow.next = function() { navigate(slideshow.pos + 1); };\n        slideshow.previous = function() { navigate(slideshow.pos + -1); };\n        window.addEventListener('DOMContentLoaded', init);\n    })(Alectryon.slideshow || (Alectryon.slideshow = {}));\n\n    (function (styles) {\n        var styleNames = [\"centered\", \"floating\", \"windowed\"];\n\n        function className(style) {\n            return \"alectryon-\" + style;\n        }\n\n        function setStyle(style) {\n            var root = document.getElementsByClassName(\"alectryon-root\")[0];\n            styleNames.forEach(function (s) {\n                root.classList.remove(className(s)); });\n            root.classList.add(className(style));\n        }\n\n        function init() {\n            var banner = document.getElementsByClassName(\"alectryon-banner\")[0];\n            if (banner) {\n                banner.append(\" Style: \");\n                styleNames.forEach(function (styleName, idx) {\n                    var s = styleName;\n                    var a = document.createElement(\"a\");\n                    a.onclick = function() { setStyle(s); };\n                    a.append(styleName);\n                    if (idx > 0) banner.append(\"; \");\n                    banner.appendChild(a);\n                });\n                banner.append(\".\");\n            }\n        }\n\n        window.addEventListener('DOMContentLoaded', init);\n\n        styles.setStyle = setStyle;\n    })(Alectryon.styles || (Alectryon.styles = {}));\n})(Alectryon || (Alectryon = {}));\n"
  },
  {
    "path": "alectryon/divstep.v.html",
    "content": "<!DOCTYPE html>\n<html class=\"alectryon-standalone\"><head><title>divstep.v</title><meta charset=\"utf-8\"><meta content=\"Alectryon\" name=\"generator\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><link href=\"alectryon.css\" rel=\"stylesheet\"><link href=\"pygments.css\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/IBM-type/0.5.4/css/ibm-type.min.css\" integrity=\"sha512-sky5cf9Ts6FY1kstGOBHSybfKqdHR41M0Ldb0BjNiv3ifltoQIsg0zIaQ+wwdwgQ0w9vKFW7Js50lxH9vqNSSw==\" crossorigin=\"anonymous\" />\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/firacode/5.2.0/fira_code.min.css\" integrity=\"sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==\" crossorigin=\"anonymous\" /><script src=\"alectryon.js\"></script></head><body><article class=\"alectryon-root alectryon-windowed\"><div class=\"alectryon-banner\">Built with <a href=\"https://github.com/cpitclaudel/alectryon/\">Alectryon</a>, running Coq+SerAPI v8.17.0+0.17.3. Bubbles (<span class=\"alectryon-bubble\"></span>) indicate interactive fragments: hover for details, tap to reveal contents. Use <kbd>Ctrl+↑</kbd> <kbd>Ctrl+↓</kbd> to navigate, <kbd>Ctrl+🖱️</kbd> to focus. On Mac, use <kbd>⌘</kbd> instead of <kbd>Ctrl</kbd>.</div><pre class=\"alectryon-io highlight\"><!-- Generator: Alectryon --><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> ZArith.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> ZArith.Znumtheory.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> ZArith.Zpow_facts.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> Lia.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> List.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> divsteps.divsteps_def.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> extraMath.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> modinv.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Open Scope</span> list_scope.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Open Scope</span> Z_scope.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Arguments</span> Z.add !x !y.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Arguments</span> Z.sub !m !n.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Arguments</span> Z.mul !x !y.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk0\"><span class=\"kn\">Definition</span> <span class=\"nf\">Zodd_irr</span> <span class=\"nv\">z</span> (<span class=\"nv\">Hz1</span> <span class=\"nv\">Hz2</span> : Zodd z) : Hz1 = Hz2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hz1, Hz2</var><span class=\"hyp-type\"><b>: </b><span>Zodd z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Hz1 = Hz2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hz1, Hz2</var><span class=\"hyp-type\"><b>: </b><span>Zodd z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Hz1 = Hz2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2\"><span class=\"nb\">revert</span> Hz1 Hz2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hz1</span> <span class=\"nv\">Hz2</span> : Zodd z, Hz1 = Hz2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> z <span class=\"kr\">as</span> [|p|p]; <span class=\"kp\">try</span> <span class=\"nb\">destruct</span> p; <span class=\"kp\">try</span> <span class=\"bp\">contradiction</span>; <span class=\"nb\">intros</span> [] []; <span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Defined</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Module</span> <span class=\"nf\">Step</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Inductive</span> <span class=\"nf\">Step</span> : <span class=\"kt\">Set</span> :=\n| D : Step\n| S : Step\n| H : Step.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">End</span> <span class=\"nf\">Step</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">Step</span> := Step.Step.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">INC</span> : Z := <span class=\"mi\">1</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Record</span> <span class=\"nf\">State</span> : <span class=\"kt\">Set</span> :=\n { delta : Z\n ; f : Z\n ; g : Z\n ; oddF : Zodd f\n }.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">eta</span> (<span class=\"nv\">st</span> : State) := Z.opp (delta st).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">init</span> <span class=\"nv\">f</span> <span class=\"nv\">g</span> <span class=\"nv\">oddF</span> :=\n{| delta := <span class=\"mi\">1</span>\n ; f := f\n ; g := g\n ; oddF := oddF\n |}.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">step</span> (<span class=\"nv\">st</span> : State) : State * Step :=\n<span class=\"kr\">match</span> Zeven_odd_dec (g st) <span class=\"kr\">with</span>\n| <span class=\"nb\">left</span> _ =&gt; ({| delta := INC + delta st\n              ; f := f st\n              ; g := g st / <span class=\"mi\">2</span>\n              ; oddF := oddF st\n              |}\n            , Step.H)\n| <span class=\"nb\">right</span> oddG =&gt;\n    <span class=\"kr\">if</span> (<span class=\"mi\">0</span> &lt;? delta st)%Z\n    <span class=\"kr\">then</span> ({| delta := INC - delta st\n           ; f := g st\n           ; g := (g st - f st) / <span class=\"mi\">2</span>\n           ; oddF := oddG\n           |}\n         , Step.D)\n    <span class=\"kr\">else</span> ({| delta := INC + delta st\n           ; f := f st\n           ; g := (g st + f st) / <span class=\"mi\">2</span>\n           ; oddF := oddF st\n           |}\n         , Step.S)\n<span class=\"kr\">end</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n<span class=\"c\">(* Last step is first in the list to facilitate matrix multiplication. *)</span>\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Fixpoint</span> <span class=\"nf\">stepN</span> (<span class=\"nv\">n</span> : nat) : State -&gt; State * list Step  :=\n<span class=\"kr\">match</span> n <span class=\"kr\">with</span>\n| O =&gt; <span class=\"kr\">fun</span> <span class=\"nv\">st</span> =&gt; (st, nil)\n| (S n) =&gt; <span class=\"kr\">fun</span> <span class=\"nv\">st</span> =&gt;\n    <span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n    <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span>\n    (st1, x :: xs)\n<span class=\"kr\">end</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Inductive</span> <span class=\"nf\">Spec</span> : State -&gt; (State * Step) -&gt; <span class=\"kt\">Set</span> :=\n| specH : <span class=\"kr\">forall</span> <span class=\"nv\">d</span> <span class=\"nv\">f&#39;</span> <span class=\"nv\">g&#39;</span>, Spec {| delta := d; f := <span class=\"mi\">2</span>*f&#39;+<span class=\"mi\">1</span>; g := <span class=\"mi\">2</span>*g&#39;; oddF := Zodd_2p_plus_1 f&#39; |}\n                               ({| delta := INC + d; f := <span class=\"mi\">2</span>*f&#39;+<span class=\"mi\">1</span>; g := g&#39;; oddF := Zodd_2p_plus_1 f&#39; |}, Step.H)\n| specD : <span class=\"kr\">forall</span> <span class=\"nv\">d</span> <span class=\"nv\">f&#39;</span> <span class=\"nv\">g&#39;</span>, Spec {| delta := Z.pos d; f := <span class=\"mi\">2</span>*f&#39;+<span class=\"mi\">1</span>; g := <span class=\"mi\">2</span>*g&#39;+<span class=\"mi\">1</span>; oddF := Zodd_2p_plus_1 f&#39; |}\n                               ({| delta := INC - Z.pos d; f := <span class=\"mi\">2</span>*g&#39;+<span class=\"mi\">1</span>; g := g&#39; - f&#39;; oddF := Zodd_2p_plus_1 g&#39; |}, Step.D)\n| specS : <span class=\"kr\">forall</span> <span class=\"nv\">d</span> <span class=\"nv\">f&#39;</span> <span class=\"nv\">g&#39;</span>, (d &lt;= <span class=\"mi\">0</span>) -&gt;\n                          Spec {| delta := d; f := <span class=\"mi\">2</span>*f&#39;+<span class=\"mi\">1</span>; g := <span class=\"mi\">2</span>*g&#39;+<span class=\"mi\">1</span>; oddF := Zodd_2p_plus_1 f&#39; |}\n                               ({| delta := INC + d; f := <span class=\"mi\">2</span>*f&#39;+<span class=\"mi\">1</span>; g := g&#39; + f&#39; + <span class=\"mi\">1</span>; oddF := Zodd_2p_plus_1 f&#39; |}, Step.S).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk3\"><span class=\"kn\">Lemma</span> <span class=\"nf\">spec</span> <span class=\"nv\">st</span> : Spec st (step st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec st (step st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk4\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec st (step st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk5\"><span class=\"nb\">destruct</span> st <span class=\"kr\">as</span> [d0 f0 g0 Hf0].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (step\n     {| delta := d0; f := f0; g := g0; oddF := Hf0 |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk6\"><span class=\"nb\">unfold</span> step; <span class=\"nb\">cbn</span> -[Z.div].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  <span class=\"kr\">match</span> Zeven_odd_dec g0 <span class=\"kr\">with</span>\n  | <span class=\"nb\">left</span> _ =&gt;\n      ({|\n         delta := <span class=\"mi\">1</span> + d0;\n         f := f0;\n         g := g0 / <span class=\"mi\">2</span>;\n         oddF := Hf0\n       |}, Step.H)\n  | <span class=\"nb\">right</span> oddG =&gt;\n      <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n      <span class=\"kr\">then</span>\n       ({|\n          delta := <span class=\"mi\">1</span> - d0;\n          f := g0;\n          g := (g0 - f0) / <span class=\"mi\">2</span>;\n          oddF := oddG\n        |}, Step.D)\n      <span class=\"kr\">else</span>\n       ({|\n          delta := <span class=\"mi\">1</span> + d0;\n          f := f0;\n          g := (g0 + f0) / <span class=\"mi\">2</span>;\n          oddF := Hf0\n        |}, Step.S)\n  <span class=\"kr\">end</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk7\"><span class=\"nb\">destruct</span> (Zeven_odd_dec g0) <span class=\"kr\">as</span> [Hg0|Hg0].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := f0;\n     g := g0 / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk8\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk8\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk9\"><span class=\"nb\">generalize</span> Hf0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd f0,\nSpec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := f0;\n     g := g0 / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chka\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chka\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb\"><span class=\"nb\">apply</span> Zodd_bool_iff <span class=\"kr\">in</span> Hf0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd f0,\nSpec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := f0;\n     g := g0 / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chkc\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chkc\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd\"><span class=\"nb\">rewrite</span> (Zdiv2_odd_eqn f0), Hf0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := g0;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := g0 / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chke\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chke\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf\"><span class=\"nb\">rewrite</span> (Zeven_div2 g0) <span class=\"bp\">by</span> <span class=\"nb\">auto</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := <span class=\"mi\">2</span> * Z.div2 g0 / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk10\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk10\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk11\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk11\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> * Z.div2 g0 / <span class=\"mi\">2</span>) <span class=\"kr\">with</span> (Z.div2 g0) <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> Z.mul_comm, Z.div_mul <span class=\"bp\">by</span> <span class=\"bp\">lia</span>; <span class=\"bp\">reflexivity</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0;\n     oddF := Hf0\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk12\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk12\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk13\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk13\"><span class=\"nb\">intros</span> Hf0&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0;\n    oddF := Hf0&#39;\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0;\n     oddF := Hf0&#39;\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk14\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk14\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk15\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk15\"><span class=\"nb\">replace</span> Hf0&#39; <span class=\"kr\">with</span> (Zodd_2p_plus_1 (Z.div2 f0)) <span class=\"bp\">by</span> <span class=\"nb\">apply</span> Zodd_irr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zeven g0</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0;\n    oddF := Zodd_2p_plus_1 (Z.div2 f0)\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0;\n     oddF := Zodd_2p_plus_1 (Z.div2 f0)\n   |}, Step.H)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk16\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk16\"><hr></label><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk17\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk17\"><span class=\"nb\">apply</span> specH.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk18\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk18\"><span class=\"nb\">generalize</span> Hf0 Hg0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd f0) (<span class=\"nv\">Hg0</span> : Zodd g0),\nSpec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk19\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk19\"><span class=\"nb\">apply</span> Zodd_bool_iff <span class=\"kr\">in</span> Hf0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Zodd g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd f0) (<span class=\"nv\">Hg0</span> : Zodd g0),\nSpec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a\"><span class=\"nb\">apply</span> Zodd_bool_iff <span class=\"kr\">in</span> Hg0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd f0) (<span class=\"nv\">Hg0</span> : Zodd g0),\nSpec {| delta := d0; f := f0; g := g0; oddF := Hf0 |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - f0) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := f0;\n       g := (g0 + f0) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b\"><span class=\"nb\">rewrite</span> (Zdiv2_odd_eqn f0), Hf0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>))\n  (<span class=\"nv\">Hg0</span> : Zodd g0),\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := g0;\n    oddF := Hf0\n  |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := g0;\n       g := (g0 - (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n       g := (g0 + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c\"><span class=\"nb\">rewrite</span> (Zdiv2_odd_eqn g0), Hg0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>))\n  (<span class=\"nv\">Hg0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)),\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    ({|\n       delta := <span class=\"mi\">1</span> - d0;\n       f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n       g :=\n         (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       oddF := Hg0\n     |}, Step.D)\n   <span class=\"kr\">else</span>\n    ({|\n       delta := <span class=\"mi\">1</span> + d0;\n       f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n       g :=\n         (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       oddF := Hf0\n     |}, Step.S))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d\"><span class=\"nb\">destruct</span> (<span class=\"mi\">0</span> &lt;? d0) <span class=\"nb\">eqn</span>:Hd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>))\n  (<span class=\"nv\">Hg0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)),\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> - d0;\n     f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hg0\n   |}, Step.D)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1e\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f\"><span class=\"nb\">destruct</span> d0; <span class=\"kp\">try</span> <span class=\"kp\">solve</span> [<span class=\"nb\">cbn</span> <span class=\"kr\">in</span> Hd; <span class=\"bp\">congruence</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? Z.pos p) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>))\n  (<span class=\"nv\">Hg0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)),\nSpec\n  {|\n    delta := Z.pos p;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> - Z.pos p;\n     f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hg0\n   |}, Step.D)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk20\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk20\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk21\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk21\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> ((Z.div2 g0 - Z.div2 f0) * <span class=\"mi\">2</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? Z.pos p) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>))\n  (<span class=\"nv\">Hg0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)),\nSpec\n  {|\n    delta := Z.pos p;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> - Z.pos p;\n     f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n     g := (Z.div2 g0 - Z.div2 f0) * <span class=\"mi\">2</span> / <span class=\"mi\">2</span>;\n     oddF := Hg0\n   |}, Step.D)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk22\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk22\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk23\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk23\"><span class=\"nb\">rewrite</span> Z.div_mul <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? Z.pos p) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>))\n  (<span class=\"nv\">Hg0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)),\nSpec\n  {|\n    delta := Z.pos p;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> - Z.pos p;\n     f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0 - Z.div2 f0;\n     oddF := Hg0\n   |}, Step.D)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk24\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk24\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk25\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk25\"><span class=\"nb\">intros</span> Hf0&#39; Hg0&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? Z.pos p) = true</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hg0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec\n  {|\n    delta := Z.pos p;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0&#39;\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> - Z.pos p;\n     f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0 - Z.div2 f0;\n     oddF := Hg0&#39;\n   |}, Step.D)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk26\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk26\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk27\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk27\"><span class=\"nb\">replace</span> Hf0&#39; <span class=\"kr\">with</span> (Zodd_2p_plus_1 (Z.div2 f0)) <span class=\"bp\">by</span> <span class=\"nb\">apply</span> Zodd_irr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? Z.pos p) = true</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hg0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec\n  {|\n    delta := Z.pos p;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 (Z.div2 f0)\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> - Z.pos p;\n     f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0 - Z.div2 f0;\n     oddF := Hg0&#39;\n   |}, Step.D)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk28\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk28\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk29\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk29\"><span class=\"nb\">replace</span> Hg0&#39; <span class=\"kr\">with</span> (Zodd_2p_plus_1 (Z.div2 g0)) <span class=\"bp\">by</span> <span class=\"nb\">apply</span> Zodd_irr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? Z.pos p) = true</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hg0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec\n  {|\n    delta := Z.pos p;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 (Z.div2 f0)\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> - Z.pos p;\n     f := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0 - Z.div2 f0;\n     oddF := Zodd_2p_plus_1 (Z.div2 g0)\n   |}, Step.D)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk2a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk2a\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2b\"><span class=\"nb\">apply</span> specD.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g :=\n       (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2c\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> ((Z.div2 g0 + Z.div2 f0 + <span class=\"mi\">1</span>) * <span class=\"mi\">2</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := (Z.div2 g0 + Z.div2 f0 + <span class=\"mi\">1</span>) * <span class=\"mi\">2</span> / <span class=\"mi\">2</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2d\"><span class=\"nb\">rewrite</span> Z.div_mul <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">Hf0</span> : Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>),\nZodd (<span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>) -&gt;\nSpec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0 + Z.div2 f0 + <span class=\"mi\">1</span>;\n     oddF := Hf0\n   |}, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2e\"><span class=\"nb\">intros</span> Hf0&#39; _.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Hf0&#39;\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0 + Z.div2 f0 + <span class=\"mi\">1</span>;\n     oddF := Hf0&#39;\n   |}, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2f\"><span class=\"nb\">replace</span> Hf0&#39; <span class=\"kr\">with</span> (Zodd_2p_plus_1 (Z.div2 f0)) <span class=\"bp\">by</span> <span class=\"nb\">apply</span> Zodd_irr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Spec\n  {|\n    delta := d0;\n    f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * Z.div2 g0 + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 (Z.div2 f0)\n  |}\n  ({|\n     delta := <span class=\"mi\">1</span> + d0;\n     f := <span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>;\n     g := Z.div2 g0 + Z.div2 f0 + <span class=\"mi\">1</span>;\n     oddF := Zodd_2p_plus_1 (Z.div2 f0)\n   |}, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk30\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk30\"><span class=\"nb\">apply</span> specS.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>d0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd f0 = true</span></span></span><br><span><var>Hg0</var><span class=\"hyp-type\"><b>: </b><span>Z.odd g0 = true</span></span></span><br><span><var>Hd</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;? d0) = false</span></span></span><br><span><var>Hf0'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * Z.div2 f0 + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">d0 &lt;= <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk31\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk31\"><span class=\"kn\">Lemma</span> <span class=\"nf\">etaBounds</span> <span class=\"nv\">b</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : -b &lt;= eta st &lt; b -&gt;\n  -b - Z.of_nat n &lt;= eta (fst (stepN n st)) &lt; b + Z.of_nat n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- b &lt;= eta st &lt; b -&gt;\n- b - Z.of_nat n &lt;= eta (fst (stepN n st)) &lt;\nb + Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk32\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk32\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- b &lt;= eta st &lt; b -&gt;\n- b - Z.of_nat n &lt;= eta (fst (stepN n st)) &lt;\nb + Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk33\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk33\"><span class=\"nb\">induction</span> n; <span class=\"nb\">simpl</span>; [<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>- b &lt;= eta st &lt; b -&gt;\n- b - Z.of_nat n &lt;= eta (fst (stepN n st)) &lt; b + Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- b &lt;= eta st &lt; b -&gt;\n- b - Z.pos (Pos.of_succ_nat n) &lt;=\neta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) &lt;\nb + Z.pos (Pos.of_succ_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk34\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk34\"><span class=\"nb\">destruct</span> (stepN n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>- b &lt;= eta st &lt; b -&gt; - b - Z.of_nat n &lt;= eta (fst (s, l)) &lt; b + Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- b &lt;= eta st &lt; b -&gt;\n- b - Z.pos (Pos.of_succ_nat n) &lt;=\neta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) &lt;\nb + Z.pos (Pos.of_succ_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk35\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk35\"><span class=\"nb\">rewrite</span> Zpos_P_of_succ_nat.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>- b &lt;= eta st &lt; b -&gt; - b - Z.of_nat n &lt;= eta (fst (s, l)) &lt; b + Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- b &lt;= eta st &lt; b -&gt;\n- b - Z.succ (Z.of_nat n) &lt;=\neta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) &lt;\nb + Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk36\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk36\"><span class=\"nb\">revert</span> IHn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- b &lt;= eta st &lt; b -&gt;\n - b - Z.of_nat n &lt;= eta (fst (s, l)) &lt; b + Z.of_nat n) -&gt;\n- b &lt;= eta st &lt; b -&gt;\n- b - Z.succ (Z.of_nat n) &lt;=\neta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) &lt;\nb + Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">elim</span> (spec s); <span class=\"nb\">intros</span> d f&#39; g&#39;; <span class=\"kp\">try</span> <span class=\"nb\">generalize</span> (Z.pos d); <span class=\"nb\">unfold</span> eta; <span class=\"nb\">cbn</span>; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk37\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk37\"><span class=\"kn\">Lemma</span> <span class=\"nf\">gHs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : (<span class=\"mi\">2</span>^(Z.of_nat n) | g st) -&gt;\n  g (fst (stepN n st)) = g st / <span class=\"mi\">2</span>^(Z.of_nat n).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ng (fst (stepN n st)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk38\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk38\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ng (fst (stepN n st)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk39\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk39\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">intros</span>;<span class=\"nb\">rewrite</span> Z.div_1_r; <span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (stepN n st)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | g st) -&gt;\ng (fst (stepN (S n) st)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk3a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk3a\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.pow_succ_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (stepN n st)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ng (fst (stepN (S n) st)) = g st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk3b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk3b\"><span class=\"nb\">simpl</span> (fst _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (stepN n st)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ng\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk3c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk3c\"><span class=\"nb\">destruct</span> (stepN n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (s, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ng (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk3d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk3d\"><span class=\"nb\">intros</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (s, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk3e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk3e\"><span class=\"nb\">assert</span> (Hdivide : (<span class=\"mi\">2</span> ^ Z.of_nat n | g st)) <span class=\"bp\">by</span> (<span class=\"nb\">etransitivity</span>;[|<span class=\"nb\">apply</span> Hg]; <span class=\"nb\">auto with</span> *).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (s, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk3f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk3f\"><span class=\"nb\">apply</span> Zdivide_mod <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (s, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) = <span class=\"mi\">0</span></span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk40\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk40\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> (<span class=\"kr\">fun</span> <span class=\"nv\">x</span> =&gt; x / <span class=\"mi\">2</span> ^ (Z.of_nat n))) <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (s, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) / <span class=\"mi\">2</span> ^ Z.of_nat n =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk41\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk41\"><span class=\"nb\">rewrite</span> Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (s, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(g st / <span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk42\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk42\"><span class=\"nb\">rewrite</span> &lt;- IHn <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; g (fst (s, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\ng st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk43\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk43\"><span class=\"nb\">destruct</span> (spec s);\n<span class=\"nb\">simpl</span> <span class=\"kr\">in</span> Hg;\n<span class=\"kp\">try</span> <span class=\"kp\">solve</span> [<span class=\"nb\">rewrite</span> Zmod_odd, Z.add_comm, Z.odd_add_mul_2 <span class=\"kr\">in</span> Hg;\n           <span class=\"bp\">discriminate</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ng\n(fst\n({|\ndelta := d; f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>; g := <span class=\"mi\">2</span> * g&#39;; oddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: l)) = g st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk44\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk44\"><span class=\"nb\">simpl</span> (g _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ng\n(fst\n({|\ndelta := d; f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>; g := <span class=\"mi\">2</span> * g&#39;; oddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; = g st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk45\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk45\"><span class=\"nb\">simpl</span> (g _) <span class=\"kr\">in</span> IHn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; <span class=\"mi\">2</span> * g&#39; = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; = g st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk46\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk46\"><span class=\"nb\">apply</span> Z.mul_cancel_l <span class=\"kr\">with</span> <span class=\"mi\">2</span>; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; <span class=\"mi\">2</span> * g&#39; = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> * g&#39; = <span class=\"mi\">2</span> * (g st / (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk47\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk47\"><span class=\"nb\">rewrite</span> !(Z.mul_comm <span class=\"mi\">2</span>), &lt;- Zdiv_Zdiv <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; <span class=\"mi\">2</span> * g&#39; = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; * <span class=\"mi\">2</span> = g st / <span class=\"mi\">2</span> ^ Z.of_nat n / <span class=\"mi\">2</span> * <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk48\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk48\"><span class=\"nb\">rewrite</span> &lt;- IHn <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; <span class=\"mi\">2</span> * g&#39; = g st / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; * <span class=\"mi\">2</span> = <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span> * <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> !(Z.mul_comm <span class=\"mi\">2</span>), Z.div_mul; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk49\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk49\"><span class=\"kn\">Lemma</span> <span class=\"nf\">fHs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : (<span class=\"mi\">2</span>^(Z.of_nat n) | g st) -&gt;\n  f (fst (stepN n st)) = f st.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk4a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk4a\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk4b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk4b\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">intros</span>; <span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | g st) -&gt;\nf (fst (stepN (S n) st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk4c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk4c\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.pow_succ_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nf (fst (stepN (S n) st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk4d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk4d\"><span class=\"nb\">intros</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (stepN (S n) st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk4e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk4e\"><span class=\"nb\">simpl</span> (fst _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\nf st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk4f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk4f\"><span class=\"nb\">assert</span> (Hg&#39; : (<span class=\"mi\">2</span> ^ Z.of_nat n | g st)) <span class=\"bp\">by</span> (<span class=\"nb\">etransitivity</span>;[|<span class=\"nb\">apply</span> Hg]; <span class=\"nb\">auto with</span> *).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\nf st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk50\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk50\"><span class=\"nb\">apply</span> Zdivide_mod <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) = <span class=\"mi\">0</span></span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\nf st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk51\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk51\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> (<span class=\"kr\">fun</span> <span class=\"nv\">x</span> =&gt; x / <span class=\"mi\">2</span> ^ (Z.of_nat n))) <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) / <span class=\"mi\">2</span> ^ Z.of_nat n =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\nf st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk52\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk52\"><span class=\"nb\">rewrite</span> Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(g st / <span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\nf st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk53\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk53\"><span class=\"nb\">rewrite</span> &lt;- gHs <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (stepN n st)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n st)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\nf st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk54\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk54\"><span class=\"nb\">destruct</span> (stepN n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (s, l)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\nf st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk55\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk55\"><span class=\"nb\">rewrite</span> &lt;- IHn <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; f (fst (s, l)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\nf (fst (s, l))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk56\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk56\"><span class=\"nb\">destruct</span> (spec s);\n<span class=\"nb\">simpl</span> <span class=\"kr\">in</span> Hg;\n<span class=\"kp\">try</span> <span class=\"kp\">solve</span> [<span class=\"nb\">rewrite</span> Zmod_odd, Z.add_comm, Z.odd_add_mul_2 <span class=\"kr\">in</span> Hg;\n           <span class=\"bp\">discriminate</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nf\n(fst\n({|\ndelta := d; f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>; g := <span class=\"mi\">2</span> * g&#39;; oddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = f st</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: l)) =\nf\n  (fst\n     ({|\n        delta := d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := <span class=\"mi\">2</span> * g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, l))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk57\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk57\"><span class=\"kn\">Lemma</span> <span class=\"nf\">etaHs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : (<span class=\"mi\">2</span>^(Z.of_nat n) | g st) -&gt;\n  eta (fst (stepN n st)) = eta st - (Z.of_nat n).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\neta (fst (stepN n st)) = eta st - Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk58\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk58\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\neta (fst (stepN n st)) = eta st - Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk59\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk59\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">intros</span>;<span class=\"nb\">cbn</span>;<span class=\"bp\">ring</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | g st) -&gt;\neta (fst (stepN (S n) st)) = eta st - Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk5a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk5a\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.pow_succ_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\neta (fst (stepN (S n) st)) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk5b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk5b\"><span class=\"nb\">intros</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (stepN (S n) st)) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk5c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk5c\"><span class=\"nb\">simpl</span> (fst _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk5d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk5d\"><span class=\"nb\">assert</span> (Hg&#39; : (<span class=\"mi\">2</span> ^ Z.of_nat n | g st)) <span class=\"bp\">by</span> (<span class=\"nb\">etransitivity</span>;[|<span class=\"nb\">apply</span> Hg]; <span class=\"nb\">auto with</span> *).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk5e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk5e\"><span class=\"nb\">apply</span> Zdivide_mod <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) = <span class=\"mi\">0</span></span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk5f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk5f\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> (<span class=\"kr\">fun</span> <span class=\"nv\">x</span> =&gt; x / <span class=\"mi\">2</span> ^ (Z.of_nat n))) <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) / <span class=\"mi\">2</span> ^ Z.of_nat n =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk60\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk60\"><span class=\"nb\">rewrite</span> Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(g st / <span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk61\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk61\"><span class=\"nb\">rewrite</span> &lt;- gHs <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n st)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk62\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk62\"><span class=\"nb\">destruct</span> (stepN n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\neta st - Z.succ (Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk63\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk63\"><span class=\"nb\">replace</span> (eta st - _) <span class=\"kr\">with</span> (eta st - (Z.of_nat n) - <span class=\"mi\">1</span>) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\neta st - Z.of_nat n - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk64\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk64\"><span class=\"nb\">rewrite</span> &lt;- IHn <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt; eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\neta (fst (s, l)) - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk65\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk65\"><span class=\"nb\">destruct</span> (spec s);\n<span class=\"nb\">simpl</span> <span class=\"kr\">in</span> Hg;\n<span class=\"kp\">try</span> <span class=\"kp\">solve</span> [<span class=\"nb\">rewrite</span> Zmod_odd, Z.add_comm, Z.odd_add_mul_2 <span class=\"kr\">in</span> Hg;\n           <span class=\"bp\">discriminate</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\neta\n(fst\n({|\ndelta := d; f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>; g := <span class=\"mi\">2</span> * g&#39;; oddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: l)) =\neta\n  (fst\n     ({|\n        delta := d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := <span class=\"mi\">2</span> * g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, l)) - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk66\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk66\"><span class=\"nb\">unfold</span> eta, INC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\neta\n(fst\n({|\ndelta := d; f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>; g := <span class=\"mi\">2</span> * g&#39;; oddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-\ndelta\n  (fst\n     ({|\n        delta := <span class=\"mi\">1</span> + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: l)) =\n-\ndelta\n  (fst\n     ({|\n        delta := d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := <span class=\"mi\">2</span> * g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, l)) - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk67\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk67\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\neta\n(fst\n({|\ndelta := d; f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>; g := <span class=\"mi\">2</span> * g&#39;; oddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- (<span class=\"mi\">1</span> + d) = - d - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk68\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk68\"><span class=\"kn\">Lemma</span> <span class=\"nf\">etaSs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : <span class=\"mi\">0</span> &lt;= eta st -&gt;\n       Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt;\n       eta (fst (stepN n st)) = eta st - Z.of_nat n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt;\neta (fst (stepN n st)) = eta st - Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk69\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk69\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt;\neta (fst (stepN n st)) = eta st - Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk6a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk6a\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">intros</span>;<span class=\"nb\">cbn</span>;<span class=\"bp\">ring</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat (S n) &lt;= <span class=\"mi\">1</span> + eta st -&gt;\neta (fst (stepN (S n) st)) = eta st - Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk6b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk6b\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, &lt;- Z.add_1_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= eta st -&gt;\n<span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt;\neta (fst (stepN (S n) st)) = eta st - (<span class=\"mi\">1</span> + Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk6c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk6c\"><span class=\"nb\">intros</span> Heta Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (stepN (S n) st)) = eta st - (<span class=\"mi\">1</span> + Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk6d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk6d\"><span class=\"nb\">simpl</span> (fst _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (stepN n st)) = eta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\neta st - (<span class=\"mi\">1</span> + Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk6e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk6e\"><span class=\"nb\">destruct</span> (stepN n st) <span class=\"kr\">as</span> [s l].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\neta st - (<span class=\"mi\">1</span> + Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk6f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk6f\"><span class=\"nb\">transitivity</span> (eta st - Z.of_nat n - <span class=\"mi\">1</span>);[|<span class=\"bp\">ring</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\neta st - Z.of_nat n - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk70\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk70\"><span class=\"nb\">assert</span> (Hs : eta (fst (s, l)) = eta st - Z.of_nat n) <span class=\"bp\">by</span> (<span class=\"nb\">apply</span> IHn; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st</span></span></span><br><span><var>Hs</var><span class=\"hyp-type\"><b>: </b><span>eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\neta st - Z.of_nat n - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk71\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk71\"><span class=\"nb\">rewrite</span> &lt;- Hs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + eta st -&gt; eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= eta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + eta st</span></span></span><br><span><var>Hs</var><span class=\"hyp-type\"><b>: </b><span>eta (fst (s, l)) = eta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\neta (fst (s, l)) - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk72\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk72\"><span class=\"nb\">unfold</span> eta <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= - delta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + - delta st -&gt;\n- delta (fst (s, l)) = - delta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= - delta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + - delta st</span></span></span><br><span><var>Hs</var><span class=\"hyp-type\"><b>: </b><span>- delta (fst (s, l)) = - delta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-\ndelta (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l))) =\n- delta (fst (s, l)) - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk73\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk73\"><span class=\"nb\">destruct</span> (spec s); <span class=\"nb\">cbn</span>; <span class=\"kp\">try</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= - delta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + - delta st -&gt;\n-\ndelta\n(fst\n({|\ndelta := Z.pos d;\nf := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\ng := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\noddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = - delta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= - delta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + - delta st</span></span></span><br><span><var>Hs</var><span class=\"hyp-type\"><b>: </b><span>-\ndelta\n  (fst\n     ({|\n        delta := Z.pos d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, l)) = - delta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- Z.pos_sub <span class=\"mi\">1</span> d = Z.neg (d + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk74\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk74\"><span class=\"nb\">cbn</span> <span class=\"kr\">in</span> Hs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= - delta st -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> + - delta st -&gt;\n-\ndelta\n(fst\n({|\ndelta := Z.pos d;\nf := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\ng := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\noddF := Zodd_2p_plus_1 f&#39;\n|}, l)) = - delta st - Z.of_nat n</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= - delta st</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> + Z.of_nat n &lt;= <span class=\"mi\">1</span> + - delta st</span></span></span><br><span><var>Hs</var><span class=\"hyp-type\"><b>: </b><span>Z.neg d = - delta st - Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- Z.pos_sub <span class=\"mi\">1</span> d = Z.neg (d + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk75\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk75\"><span class=\"kn\">Lemma</span> <span class=\"nf\">stepN_app</span> (<span class=\"nv\">n</span> <span class=\"nv\">m</span> : nat) <span class=\"nv\">st</span> : stepN (n + m) st = <span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n  (fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n (fst (stepN n (fst st1)),\n  snd (stepN n (fst st1)) ++ snd st1))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk76\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk76\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n (fst (stepN n (fst st1)),\n  snd (stepN n (fst st1)) ++ snd st1))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk77\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk77\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">destruct</span> (stepN _ _);<span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n(fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">stepN (S n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n (fst (stepN (S n) (fst st1)),\n  snd (stepN (S n) (fst st1)) ++ snd st1))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk78\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk78\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n(fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN (n + m) st <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)) =\n(fst\n   (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (fst (stepN m st)) <span class=\"kr\">in</span>\n    <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)),\n snd\n   (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (fst (stepN m st)) <span class=\"kr\">in</span>\n    <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)) ++\n snd (stepN m st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk79\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk79\"><span class=\"nb\">rewrite</span> IHn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n(fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) :=\n   <span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n   (fst (stepN n (fst st1)),\n    snd (stepN n (fst st1)) ++ snd st1) <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)) =\n(fst\n   (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (fst (stepN m st)) <span class=\"kr\">in</span>\n    <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)),\n snd\n   (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (fst (stepN m st)) <span class=\"kr\">in</span>\n    <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)) ++\n snd (stepN m st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk7a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk7a\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n(fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n   step (fst (stepN n (fst (stepN m st)))) <span class=\"kr\">in</span>\n (st1,\n  x\n  :: snd (stepN n (fst (stepN m st))) ++\n     snd (stepN m st))) =\n(fst\n   (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (fst (stepN m st)) <span class=\"kr\">in</span>\n    <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)),\n snd\n   (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (fst (stepN m st)) <span class=\"kr\">in</span>\n    <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)) ++\n snd (stepN m st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk7b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk7b\"><span class=\"nb\">destruct</span> (stepN n _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n(fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1))</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step (fst (s, l)) <span class=\"kr\">in</span>\n (st1, x :: snd (s, l) ++ snd (stepN m st))) =\n(fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)),\n snd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)) ++\n snd (stepN m st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk7c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk7c\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n(fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1))</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span>\n (st1, x :: l ++ snd (stepN m st))) =\n(fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)),\n snd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)) ++\n snd (stepN m st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk7d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk7d\"><span class=\"nb\">destruct</span> (step s).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>stepN (n + m) st =\n(<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n(fst (stepN n (fst st1)), snd (stepN n (fst st1)) ++ snd st1))</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>s1</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(s0, s1 :: l ++ snd (stepN m st)) =\n(fst (s0, s1 :: l),\n snd (s0, s1 :: l) ++ snd (stepN m st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk7e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk7e\"><span class=\"kn\">Lemma</span> <span class=\"nf\">stepN_app_fst</span> (<span class=\"nv\">n</span> <span class=\"nv\">m</span> : nat) <span class=\"nv\">st</span> : fst (stepN (n + m) st) = fst (stepN n (fst (stepN m st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">fst (stepN (n + m) st) =\nfst (stepN n (fst (stepN m st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk7f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk7f\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">fst (stepN (n + m) st) =\nfst (stepN n (fst (stepN m st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk80\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk80\"><span class=\"nb\">rewrite</span> stepN_app.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">fst\n  (<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n   (fst (stepN n (fst st1)),\n    snd (stepN n (fst st1)) ++ snd st1)) =\nfst (stepN n (fst (stepN m st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk81\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk81\"><span class=\"kn\">Lemma</span> <span class=\"nf\">stepN_app_snd</span> (<span class=\"nv\">n</span> <span class=\"nv\">m</span> : nat) <span class=\"nv\">st</span> : snd (stepN (n + m) st) = \n  snd (stepN n (fst (stepN m st))) ++ snd (stepN m st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">snd (stepN (n + m) st) =\nsnd (stepN n (fst (stepN m st))) ++ snd (stepN m st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk82\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk82\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">snd (stepN (n + m) st) =\nsnd (stepN n (fst (stepN m st))) ++ snd (stepN m st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk83\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk83\"><span class=\"nb\">rewrite</span> stepN_app.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">snd\n  (<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN m st <span class=\"kr\">in</span>\n   (fst (stepN n (fst st1)),\n    snd (stepN n (fst st1)) ++ snd st1)) =\nsnd (stepN n (fst (stepN m st))) ++ snd (stepN m st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk84\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk84\"><span class=\"kn\">Lemma</span> <span class=\"nf\">etaDs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : Zodd (g st) -&gt; eta st &lt; <span class=\"mi\">0</span> -&gt;\n       <span class=\"mi\">0</span> &lt; Z.of_nat n &lt;= <span class=\"mi\">1</span> - eta st -&gt;\n       eta (fst (stepN n st)) = -eta st - Z.of_nat n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd (g st) -&gt;\neta st &lt; <span class=\"mi\">0</span> -&gt;\n<span class=\"mi\">0</span> &lt; Z.of_nat n &lt;= <span class=\"mi\">1</span> - eta st -&gt;\neta (fst (stepN n st)) = - eta st - Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk85\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk85\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd (g st) -&gt;\neta st &lt; <span class=\"mi\">0</span> -&gt;\n<span class=\"mi\">0</span> &lt; Z.of_nat n &lt;= <span class=\"mi\">1</span> - eta st -&gt;\neta (fst (stepN n st)) = - eta st - Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk86\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk86\"><span class=\"nb\">intros</span> Hodd Heta Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>eta st &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat n &lt;= <span class=\"mi\">1</span> - eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (stepN n st)) = - eta st - Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk87\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk87\"><span class=\"nb\">destruct</span> n;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>eta st &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (stepN (S n) st)) = - eta st - Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk88\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk88\"><span class=\"nb\">rewrite</span> &lt;- Nat.add_1_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>eta st &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (stepN (n + <span class=\"mi\">1</span>) st)) =\n- eta st - Z.of_nat (n + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk89\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk89\"><span class=\"nb\">rewrite</span> stepN_app_fst.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>eta st &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta (fst (stepN n (fst (stepN <span class=\"mi\">1</span> st)))) =\n- eta st - Z.of_nat (n + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk8a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk8a\"><span class=\"nb\">simpl</span> (stepN <span class=\"mi\">1</span> st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>eta st &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - eta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st <span class=\"kr\">in</span> (st1, x :: nil))))) =\n- eta st - Z.of_nat (n + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk8b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk8b\"><span class=\"nb\">destruct</span> (spec st);[<span class=\"nb\">elim</span> (Zodd_not_Zeven _ Hodd); <span class=\"nb\">apply</span> Zeven_2p| |<span class=\"nb\">unfold</span> eta <span class=\"kr\">in</span> *;<span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *;<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd\n  (g\n     {|\n       delta := Z.pos d;\n       f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       oddF := Zodd_2p_plus_1 f&#39;\n     |})</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>eta\n  {|\n    delta := Z.pos d;\n    f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 f&#39;\n  |} &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n) &lt;=\n<span class=\"mi\">1</span> -\neta\n  {|\n    delta := Z.pos d;\n    f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 f&#39;\n  |}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eta\n  (fst\n     (stepN n\n        (fst\n           ({|\n              delta := INC - Z.pos d;\n              f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; - f&#39;;\n              oddF := Zodd_2p_plus_1 g&#39;\n            |}, Step.D :: nil)))) =\n-\neta\n  {|\n    delta := Z.pos d;\n    f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 f&#39;\n  |} - Z.of_nat (n + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk8c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk8c\"><span class=\"nb\">rewrite</span> etaSs; <span class=\"nb\">unfold</span> eta <span class=\"kr\">in</span> *; <span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *; <span class=\"nb\">change</span> (Z.pos_sub <span class=\"mi\">1</span> d) <span class=\"kr\">with</span> (<span class=\"mi\">1</span> - Z.pos d); <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>Z.neg d &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.pos (Pos.of_succ_nat n) &lt;=\nZ.pos\n  <span class=\"kr\">match</span> d <span class=\"kr\">with</span>\n  | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n  | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n  | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n  <span class=\"kr\">end</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.of_nat n &lt;= <span class=\"mi\">1</span> + - (<span class=\"mi\">1</span> - Z.pos d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk8d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk8d\"><span class=\"nb\">change</span> (<span class=\"mi\">0</span> &lt; Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - -(Z.pos d)) <span class=\"kr\">in</span> Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Heta</var><span class=\"hyp-type\"><b>: </b><span>Z.neg d &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - - Z.pos d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.of_nat n &lt;= <span class=\"mi\">1</span> + - (<span class=\"mi\">1</span> - Z.pos d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk8e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk8e\"><span class=\"kn\">Lemma</span> <span class=\"nf\">stepN_mod</span> <span class=\"nv\">n</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> :\n  eqm (<span class=\"mi\">2</span>^Z.of_nat n) (f st1) (f st2) -&gt;\n  eqm (<span class=\"mi\">2</span>^Z.of_nat n) (g st1) (g st2) -&gt;\n  delta st1 = delta st2 -&gt;\n  delta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\n  snd (stepN n st1) = snd (stepN n st2).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk8f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk8f\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk90\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk90\"><span class=\"nb\">revert</span> st1 st2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk91\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk91\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">simpl</span>;<span class=\"kp\">repeat</span> <span class=\"nb\">split</span>;<span class=\"bp\">congruence</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN (S n) st1)) =\ndelta (fst (stepN (S n) st2)) /\\\nsnd (stepN (S n) st1) = snd (stepN (S n) st2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk92\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk92\"><span class=\"nb\">intros</span> st1 st2 Hf Hg Hdelta.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN (S n) st1)) =\ndelta (fst (stepN (S n) st2)) /\\\nsnd (stepN (S n) st1) = snd (stepN (S n) st2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk93\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk93\"><span class=\"nb\">replace</span> (S n) <span class=\"kr\">with</span> (n + <span class=\"mi\">1</span>)%nat <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN (n + <span class=\"mi\">1</span>) st1)) =\ndelta (fst (stepN (n + <span class=\"mi\">1</span>) st2)) /\\\nsnd (stepN (n + <span class=\"mi\">1</span>) st1) = snd (stepN (n + <span class=\"mi\">1</span>) st2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk94\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk94\"><span class=\"nb\">rewrite</span> !stepN_app_fst, !stepN_app_snd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN n (fst (stepN <span class=\"mi\">1</span> st1)))) =\ndelta (fst (stepN n (fst (stepN <span class=\"mi\">1</span> st2)))) /\\\nsnd (stepN n (fst (stepN <span class=\"mi\">1</span> st1))) ++ snd (stepN <span class=\"mi\">1</span> st1) =\nsnd (stepN n (fst (stepN <span class=\"mi\">1</span> st2))) ++ snd (stepN <span class=\"mi\">1</span> st2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk95\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk95\"><span class=\"nb\">simpl</span> (stepN <span class=\"mi\">1</span> st1); <span class=\"nb\">simpl</span> (stepN <span class=\"mi\">1</span> st2).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st1 <span class=\"kr\">in</span>\n            (st1, x :: nil))))) =\ndelta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st2 <span class=\"kr\">in</span>\n            (st1, x :: nil))))) /\\\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st1 <span class=\"kr\">in</span> (st1, x :: nil)))) ++\nsnd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st1 <span class=\"kr\">in</span> (st1, x :: nil)) =\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st2 <span class=\"kr\">in</span> (st1, x :: nil)))) ++\nsnd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st2 <span class=\"kr\">in</span> (st1, x :: nil))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk96\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk96\"><span class=\"nb\">unfold</span> step; <span class=\"nb\">rewrite</span> Hdelta.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n              <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n              | <span class=\"nb\">left</span> _ =&gt;\n                  ({|\n                     delta := INC + delta st2;\n                     f := f st1;\n                     g := g st1 / <span class=\"mi\">2</span>;\n                     oddF := oddF st1\n                   |}, Step.H)\n              | <span class=\"nb\">right</span> oddG =&gt;\n                  <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n                  <span class=\"kr\">then</span>\n                   ({|\n                      delta := INC - delta st2;\n                      f := g st1;\n                      g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n                      oddF := oddG\n                    |}, Step.D)\n                  <span class=\"kr\">else</span>\n                   ({|\n                      delta := INC + delta st2;\n                      f := f st1;\n                      g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n                      oddF := oddF st1\n                    |}, Step.S)\n              <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n            (st1, x :: nil))))) =\ndelta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n              <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n              | <span class=\"nb\">left</span> _ =&gt;\n                  ({|\n                     delta := INC + delta st2;\n                     f := f st2;\n                     g := g st2 / <span class=\"mi\">2</span>;\n                     oddF := oddF st2\n                   |}, Step.H)\n              | <span class=\"nb\">right</span> oddG =&gt;\n                  <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n                  <span class=\"kr\">then</span>\n                   ({|\n                      delta := INC - delta st2;\n                      f := g st2;\n                      g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n                      oddF := oddG\n                    |}, Step.D)\n                  <span class=\"kr\">else</span>\n                   ({|\n                      delta := INC + delta st2;\n                      f := f st2;\n                      g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n                      oddF := oddF st2\n                    |}, Step.S)\n              <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n            (st1, x :: nil))))) /\\\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n           <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n           | <span class=\"nb\">left</span> _ =&gt;\n               ({|\n                  delta := INC + delta st2;\n                  f := f st1;\n                  g := g st1 / <span class=\"mi\">2</span>;\n                  oddF := oddF st1\n                |}, Step.H)\n           | <span class=\"nb\">right</span> oddG =&gt;\n               <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n               <span class=\"kr\">then</span>\n                ({|\n                   delta := INC - delta st2;\n                   f := g st1;\n                   g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n                   oddF := oddG\n                 |}, Step.D)\n               <span class=\"kr\">else</span>\n                ({|\n                   delta := INC + delta st2;\n                   f := f st1;\n                   g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n                   oddF := oddF st1\n                 |}, Step.S)\n           <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n         (st1, x :: nil)))) ++\nsnd\n  (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n     <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n     | <span class=\"nb\">left</span> _ =&gt;\n         ({|\n            delta := INC + delta st2;\n            f := f st1;\n            g := g st1 / <span class=\"mi\">2</span>;\n            oddF := oddF st1\n          |}, Step.H)\n     | <span class=\"nb\">right</span> oddG =&gt;\n         <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n         <span class=\"kr\">then</span>\n          ({|\n             delta := INC - delta st2;\n             f := g st1;\n             g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n             oddF := oddG\n           |}, Step.D)\n         <span class=\"kr\">else</span>\n          ({|\n             delta := INC + delta st2;\n             f := f st1;\n             g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n             oddF := oddF st1\n           |}, Step.S)\n     <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n   (st1, x :: nil)) =\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n           <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n           | <span class=\"nb\">left</span> _ =&gt;\n               ({|\n                  delta := INC + delta st2;\n                  f := f st2;\n                  g := g st2 / <span class=\"mi\">2</span>;\n                  oddF := oddF st2\n                |}, Step.H)\n           | <span class=\"nb\">right</span> oddG =&gt;\n               <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n               <span class=\"kr\">then</span>\n                ({|\n                   delta := INC - delta st2;\n                   f := g st2;\n                   g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n                   oddF := oddG\n                 |}, Step.D)\n               <span class=\"kr\">else</span>\n                ({|\n                   delta := INC + delta st2;\n                   f := f st2;\n                   g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n                   oddF := oddF st2\n                 |}, Step.S)\n           <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n         (st1, x :: nil)))) ++\nsnd\n  (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n     <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n     | <span class=\"nb\">left</span> _ =&gt;\n         ({|\n            delta := INC + delta st2;\n            f := f st2;\n            g := g st2 / <span class=\"mi\">2</span>;\n            oddF := oddF st2\n          |}, Step.H)\n     | <span class=\"nb\">right</span> oddG =&gt;\n         <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n         <span class=\"kr\">then</span>\n          ({|\n             delta := INC - delta st2;\n             f := g st2;\n             g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n             oddF := oddG\n           |}, Step.D)\n         <span class=\"kr\">else</span>\n          ({|\n             delta := INC + delta st2;\n             f := f st2;\n             g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n             oddF := oddF st2\n           |}, Step.S)\n     <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n   (st1, x :: nil))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk97\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk97\"><span class=\"nb\">assert</span> (Hdiv2 : <span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span>, eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt; eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk98\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) =\ndelta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk98\"><hr></label><div class=\"goal-conclusion\">delta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n              <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n              | <span class=\"nb\">left</span> _ =&gt;\n                  ({|\n                     delta := INC + delta st2;\n                     f := f st1;\n                     g := g st1 / <span class=\"mi\">2</span>;\n                     oddF := oddF st1\n                   |}, Step.H)\n              | <span class=\"nb\">right</span> oddG =&gt;\n                  <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n                  <span class=\"kr\">then</span>\n                   ({|\n                      delta := INC - delta st2;\n                      f := g st1;\n                      g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n                      oddF := oddG\n                    |}, Step.D)\n                  <span class=\"kr\">else</span>\n                   ({|\n                      delta := INC + delta st2;\n                      f := f st1;\n                      g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n                      oddF := oddF st1\n                    |}, Step.S)\n              <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n            (st1, x :: nil))))) =\ndelta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n              <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n              | <span class=\"nb\">left</span> _ =&gt;\n                  ({|\n                     delta := INC + delta st2;\n                     f := f st2;\n                     g := g st2 / <span class=\"mi\">2</span>;\n                     oddF := oddF st2\n                   |}, Step.H)\n              | <span class=\"nb\">right</span> oddG =&gt;\n                  <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n                  <span class=\"kr\">then</span>\n                   ({|\n                      delta := INC - delta st2;\n                      f := g st2;\n                      g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n                      oddF := oddG\n                    |}, Step.D)\n                  <span class=\"kr\">else</span>\n                   ({|\n                      delta := INC + delta st2;\n                      f := f st2;\n                      g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n                      oddF := oddF st2\n                    |}, Step.S)\n              <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n            (st1, x :: nil))))) /\\\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n           <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n           | <span class=\"nb\">left</span> _ =&gt;\n               ({|\n                  delta := INC + delta st2;\n                  f := f st1;\n                  g := g st1 / <span class=\"mi\">2</span>;\n                  oddF := oddF st1\n                |}, Step.H)\n           | <span class=\"nb\">right</span> oddG =&gt;\n               <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n               <span class=\"kr\">then</span>\n                ({|\n                   delta := INC - delta st2;\n                   f := g st1;\n                   g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n                   oddF := oddG\n                 |}, Step.D)\n               <span class=\"kr\">else</span>\n                ({|\n                   delta := INC + delta st2;\n                   f := f st1;\n                   g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n                   oddF := oddF st1\n                 |}, Step.S)\n           <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n         (st1, x :: nil)))) ++\nsnd\n  (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n     <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n     | <span class=\"nb\">left</span> _ =&gt;\n         ({|\n            delta := INC + delta st2;\n            f := f st1;\n            g := g st1 / <span class=\"mi\">2</span>;\n            oddF := oddF st1\n          |}, Step.H)\n     | <span class=\"nb\">right</span> oddG =&gt;\n         <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n         <span class=\"kr\">then</span>\n          ({|\n             delta := INC - delta st2;\n             f := g st1;\n             g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n             oddF := oddG\n           |}, Step.D)\n         <span class=\"kr\">else</span>\n          ({|\n             delta := INC + delta st2;\n             f := f st1;\n             g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n             oddF := oddF st1\n           |}, Step.S)\n     <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n   (st1, x :: nil)) =\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n           <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n           | <span class=\"nb\">left</span> _ =&gt;\n               ({|\n                  delta := INC + delta st2;\n                  f := f st2;\n                  g := g st2 / <span class=\"mi\">2</span>;\n                  oddF := oddF st2\n                |}, Step.H)\n           | <span class=\"nb\">right</span> oddG =&gt;\n               <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n               <span class=\"kr\">then</span>\n                ({|\n                   delta := INC - delta st2;\n                   f := g st2;\n                   g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n                   oddF := oddG\n                 |}, Step.D)\n               <span class=\"kr\">else</span>\n                ({|\n                   delta := INC + delta st2;\n                   f := f st2;\n                   g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n                   oddF := oddF st2\n                 |}, Step.S)\n           <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n         (st1, x :: nil)))) ++\nsnd\n  (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n     <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n     | <span class=\"nb\">left</span> _ =&gt;\n         ({|\n            delta := INC + delta st2;\n            f := f st2;\n            g := g st2 / <span class=\"mi\">2</span>;\n            oddF := oddF st2\n          |}, Step.H)\n     | <span class=\"nb\">right</span> oddG =&gt;\n         <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n         <span class=\"kr\">then</span>\n          ({|\n             delta := INC - delta st2;\n             f := g st2;\n             g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n             oddF := oddG\n           |}, Step.D)\n         <span class=\"kr\">else</span>\n          ({|\n             delta := INC + delta st2;\n             f := f st2;\n             g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n             oddF := oddF st2\n           |}, Step.S)\n     <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n   (st1, x :: nil))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk99\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk99\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk9a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk9a\"><span class=\"nb\">intros</span> x y.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>x, y</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk9b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk9b\"><span class=\"nb\">unfold</span> eqm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>x, y</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">x mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = y mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) -&gt;\n(x / <span class=\"mi\">2</span>) mod <span class=\"mi\">2</span> ^ Z.of_nat n =\n(y / <span class=\"mi\">2</span>) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk9c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk9c\"><span class=\"nb\">rewrite</span> &lt;-!Z.land_ones, &lt;-!(Z.shiftr_div_pow2 _ <span class=\"mi\">1</span>) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>x, y</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.land x (Z.ones (Z.of_nat (S n))) =\nZ.land y (Z.ones (Z.of_nat (S n))) -&gt;\nZ.land (Z.shiftr x <span class=\"mi\">1</span>) (Z.ones (Z.of_nat n)) =\nZ.land (Z.shiftr y <span class=\"mi\">1</span>) (Z.ones (Z.of_nat n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk9d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk9d\"><span class=\"nb\">replace</span> (Z.of_nat n) <span class=\"kr\">with</span> (Z.of_nat (S n) - <span class=\"mi\">1</span>) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>x, y</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.land x (Z.ones (Z.of_nat (S n))) =\nZ.land y (Z.ones (Z.of_nat (S n))) -&gt;\nZ.land (Z.shiftr x <span class=\"mi\">1</span>) (Z.ones (Z.of_nat (S n) - <span class=\"mi\">1</span>)) =\nZ.land (Z.shiftr y <span class=\"mi\">1</span>) (Z.ones (Z.of_nat (S n) - <span class=\"mi\">1</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk9e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk9e\"><span class=\"nb\">rewrite</span> &lt;-!extraMath.Z_shiftr_ones, &lt;-!Z.shiftr_land <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>x, y</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.land x (Z.ones (Z.of_nat (S n))) =\nZ.land y (Z.ones (Z.of_nat (S n))) -&gt;\nZ.shiftr (Z.land x (Z.ones (Z.of_nat (S n)))) <span class=\"mi\">1</span> =\nZ.shiftr (Z.land y (Z.ones (Z.of_nat (S n)))) <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">congruence</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk9f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk9f\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n              <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n              | <span class=\"nb\">left</span> _ =&gt;\n                  ({|\n                     delta := INC + delta st2;\n                     f := f st1;\n                     g := g st1 / <span class=\"mi\">2</span>;\n                     oddF := oddF st1\n                   |}, Step.H)\n              | <span class=\"nb\">right</span> oddG =&gt;\n                  <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n                  <span class=\"kr\">then</span>\n                   ({|\n                      delta := INC - delta st2;\n                      f := g st1;\n                      g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n                      oddF := oddG\n                    |}, Step.D)\n                  <span class=\"kr\">else</span>\n                   ({|\n                      delta := INC + delta st2;\n                      f := f st1;\n                      g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n                      oddF := oddF st1\n                    |}, Step.S)\n              <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n            (st1, x :: nil))))) =\ndelta\n  (fst\n     (stepN n\n        (fst\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n              <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n              | <span class=\"nb\">left</span> _ =&gt;\n                  ({|\n                     delta := INC + delta st2;\n                     f := f st2;\n                     g := g st2 / <span class=\"mi\">2</span>;\n                     oddF := oddF st2\n                   |}, Step.H)\n              | <span class=\"nb\">right</span> oddG =&gt;\n                  <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n                  <span class=\"kr\">then</span>\n                   ({|\n                      delta := INC - delta st2;\n                      f := g st2;\n                      g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n                      oddF := oddG\n                    |}, Step.D)\n                  <span class=\"kr\">else</span>\n                   ({|\n                      delta := INC + delta st2;\n                      f := f st2;\n                      g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n                      oddF := oddF st2\n                    |}, Step.S)\n              <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n            (st1, x :: nil))))) /\\\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n           <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n           | <span class=\"nb\">left</span> _ =&gt;\n               ({|\n                  delta := INC + delta st2;\n                  f := f st1;\n                  g := g st1 / <span class=\"mi\">2</span>;\n                  oddF := oddF st1\n                |}, Step.H)\n           | <span class=\"nb\">right</span> oddG =&gt;\n               <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n               <span class=\"kr\">then</span>\n                ({|\n                   delta := INC - delta st2;\n                   f := g st1;\n                   g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n                   oddF := oddG\n                 |}, Step.D)\n               <span class=\"kr\">else</span>\n                ({|\n                   delta := INC + delta st2;\n                   f := f st1;\n                   g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n                   oddF := oddF st1\n                 |}, Step.S)\n           <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n         (st1, x :: nil)))) ++\nsnd\n  (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n     <span class=\"kr\">match</span> Zeven_odd_dec (g st1) <span class=\"kr\">with</span>\n     | <span class=\"nb\">left</span> _ =&gt;\n         ({|\n            delta := INC + delta st2;\n            f := f st1;\n            g := g st1 / <span class=\"mi\">2</span>;\n            oddF := oddF st1\n          |}, Step.H)\n     | <span class=\"nb\">right</span> oddG =&gt;\n         <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n         <span class=\"kr\">then</span>\n          ({|\n             delta := INC - delta st2;\n             f := g st1;\n             g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n             oddF := oddG\n           |}, Step.D)\n         <span class=\"kr\">else</span>\n          ({|\n             delta := INC + delta st2;\n             f := f st1;\n             g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n             oddF := oddF st1\n           |}, Step.S)\n     <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n   (st1, x :: nil)) =\nsnd\n  (stepN n\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n           <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n           | <span class=\"nb\">left</span> _ =&gt;\n               ({|\n                  delta := INC + delta st2;\n                  f := f st2;\n                  g := g st2 / <span class=\"mi\">2</span>;\n                  oddF := oddF st2\n                |}, Step.H)\n           | <span class=\"nb\">right</span> oddG =&gt;\n               <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n               <span class=\"kr\">then</span>\n                ({|\n                   delta := INC - delta st2;\n                   f := g st2;\n                   g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n                   oddF := oddG\n                 |}, Step.D)\n               <span class=\"kr\">else</span>\n                ({|\n                   delta := INC + delta st2;\n                   f := f st2;\n                   g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n                   oddF := oddF st2\n                 |}, Step.S)\n           <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n         (st1, x :: nil)))) ++\nsnd\n  (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n     <span class=\"kr\">match</span> Zeven_odd_dec (g st2) <span class=\"kr\">with</span>\n     | <span class=\"nb\">left</span> _ =&gt;\n         ({|\n            delta := INC + delta st2;\n            f := f st2;\n            g := g st2 / <span class=\"mi\">2</span>;\n            oddF := oddF st2\n          |}, Step.H)\n     | <span class=\"nb\">right</span> oddG =&gt;\n         <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st2\n         <span class=\"kr\">then</span>\n          ({|\n             delta := INC - delta st2;\n             f := g st2;\n             g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n             oddF := oddG\n           |}, Step.D)\n         <span class=\"kr\">else</span>\n          ({|\n             delta := INC + delta st2;\n             f := f st2;\n             g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n             oddF := oddF st2\n           |}, Step.S)\n     <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n   (st1, x :: nil))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chka0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chka0\"><span class=\"nb\">destruct</span> (Zeven_odd_dec (g st1)); <span class=\"nb\">destruct</span> (Zeven_odd_dec (g st2)); \n<span class=\"kp\">try</span> <span class=\"kp\">solve</span>\n[<span class=\"nb\">exfalso</span>;\n<span class=\"nb\">rewrite</span> &lt;-<span class=\"nl\">?Zeven_bool_iff</span>, &lt;-<span class=\"nl\">?Zodd_bool_iff</span>, <span class=\"nl\">?Zeven_mod</span>, <span class=\"nl\">?Zodd_mod</span> <span class=\"kr\">in</span> *;\n<span class=\"nb\">apply</span> Zeq_bool_eq <span class=\"kr\">in</span> z, z0;\n<span class=\"nb\">apply</span> (extraMath.eqm_2_pow_le <span class=\"mi\">1</span>) <span class=\"kr\">in</span> Hg; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>;\n<span class=\"nb\">change</span> (<span class=\"mi\">2</span>^<span class=\"mi\">1</span>) <span class=\"kr\">with</span> <span class=\"mi\">2</span> <span class=\"kr\">in</span> *;\n<span class=\"nb\">rewrite</span> Hg <span class=\"kr\">in</span> z;\n<span class=\"bp\">congruence</span>\n];[|<span class=\"nb\">destruct</span> (<span class=\"mi\">0</span> &lt;? delta st2)];<span class=\"nb\">cbn</span>;\n  <span class=\"nb\">set</span> (st1&#39; := Build_State _ _ _ _);\n  <span class=\"nb\">set</span> (st2&#39; := Build_State _ _ _ _);\n  <span class=\"nb\">destruct</span> (IHn st1&#39; st2&#39;);\n  <span class=\"kp\">try</span> <span class=\"kp\">solve</span> [<span class=\"nb\">cbn</span>; <span class=\"bp\">lia</span>|<span class=\"nb\">split</span>; <span class=\"bp\">congruence</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := g st1 / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := g st2 / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1&#39;) (f st2&#39;)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chka1\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) =\ndelta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := g st1 / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := g st2 / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chka1\"><hr></label><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1&#39;) (g st2&#39;)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chka2\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) =\ndelta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st1;\n  g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n  oddF := z\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st2;\n  g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n  oddF := z0\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chka2\"><hr></label><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1&#39;) (f st2&#39;)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chka3\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) =\ndelta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st1;\n  g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n  oddF := z\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st2;\n  g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n  oddF := z0\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chka3\"><hr></label><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1&#39;) (g st2&#39;)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chka4\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) =\ndelta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chka4\"><hr></label><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1&#39;) (f st2&#39;)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chka5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) =\ndelta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chka5\"><hr></label><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1&#39;) (g st2&#39;)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chka6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chka6\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := g st1 / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := g st2 / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1&#39;) (f st2&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">eapply</span> extraMath.eqm_2_pow_le;[|<span class=\"nb\">apply</span> Hf]; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chka7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chka7\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zeven (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := g st1 / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := g st2 / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1&#39;) (g st2&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Hdiv2; <span class=\"nb\">apply</span> Hg.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chka8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chka8\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st1;\n  g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n  oddF := z\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st2;\n  g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n  oddF := z0\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1&#39;) (f st2&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">eapply</span> extraMath.eqm_2_pow_le;[|<span class=\"nb\">apply</span> Hg]; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chka9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chka9\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st1;\n  g := (g st1 - f st1) / <span class=\"mi\">2</span>;\n  oddF := z\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - delta st2;\n  f := g st2;\n  g := (g st2 - f st2) / <span class=\"mi\">2</span>;\n  oddF := z0\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1&#39;) (g st2&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Hdiv2; <span class=\"nb\">apply</span> Zminus_eqm; <span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkaa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkaa\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1&#39;) (f st2&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">eapply</span> extraMath.eqm_2_pow_le;[|<span class=\"nb\">apply</span> Hf]; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkab\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkab\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st1</span> <span class=\"nv\">st2</span> : State,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (f st1) (f st2) -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1) (g st2) -&gt;\ndelta st1 = delta st2 -&gt;\ndelta (fst (stepN n st1)) = delta (fst (stepN n st2)) /\\\nsnd (stepN n st1) = snd (stepN n st2)</span></span></span><br><span><var>st1, st2</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (f st1) (f st2)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (g st1) (g st2)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st1 = delta st2</span></span></span><br><span><var>Hdiv2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> <span class=\"nv\">y</span> : Z,\neqm (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) x y -&gt;\neqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (x / <span class=\"mi\">2</span>) (y / <span class=\"mi\">2</span>)</span></span></span><br><span><var>z</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st1)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st2)</span></span></span><br><span><var>st1'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st1;\n  g := (g st1 + f st1) / <span class=\"mi\">2</span>;\n  oddF := oddF st1\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st2'</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> + delta st2;\n  f := f st2;\n  g := (g st2 + f st2) / <span class=\"mi\">2</span>;\n  oddF := oddF st2\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n) (g st1&#39;) (g st2&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Hdiv2; <span class=\"nb\">apply</span> Zplus_eqm; <span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkac\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkac\"><span class=\"kn\">Lemma</span> <span class=\"nf\">fStepBounds</span> <span class=\"nv\">st</span> : Z.abs (f (fst (step st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (f (fst (step st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkad\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkad\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (f (fst (step st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (spec st); <span class=\"nb\">cbn</span>;<span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkae\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkae\"><span class=\"kn\">Lemma</span> <span class=\"nf\">gStepBounds</span> <span class=\"nv\">st</span> : <span class=\"mi\">2</span> * Z.abs (g (fst (step st))) &lt;= Z.abs (f st) + Z.abs (g st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> * Z.abs (g (fst (step st))) &lt;=\nZ.abs (f st) + Z.abs (g st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkaf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkaf\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> * Z.abs (g (fst (step st))) &lt;=\nZ.abs (f st) + Z.abs (g st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (spec st); <span class=\"nb\">cbn</span>;<span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb0\"><span class=\"kn\">Lemma</span> <span class=\"nf\">fgBounds</span> <span class=\"nv\">st</span> <span class=\"nv\">n</span> :\n Z.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\n Z.abs (g (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (f (fst (stepN n st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb1\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (f (fst (stepN n st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb2\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">cbn</span>; <span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (f (fst (stepN (S n) st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN (S n) st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb3\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs\n  (f\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb4\"><span class=\"nb\">assert</span> (Hf := fStepBounds (fst (stepN n st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step (fst (stepN n st))))) &lt;=\nZ.max (Z.abs (f (fst (stepN n st))))\n  (Z.abs (g (fst (stepN n st))))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs\n  (f\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb5\"><span class=\"nb\">assert</span> (Hg := gStepBounds (fst (stepN n st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step (fst (stepN n st))))) &lt;=\nZ.max (Z.abs (f (fst (stepN n st))))\n  (Z.abs (g (fst (stepN n st))))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (step (fst (stepN n st))))) &lt;=\nZ.abs (f (fst (stepN n st))) +\nZ.abs (g (fst (stepN n st)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs\n  (f\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb6\"><span class=\"nb\">destruct</span> (stepN n st) <span class=\"kr\">as</span> [st&#39; xs].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (st&#39;, xs))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (st&#39;, xs))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step (fst (st&#39;, xs))))) &lt;=\nZ.max (Z.abs (f (fst (st&#39;, xs))))\n  (Z.abs (g (fst (st&#39;, xs))))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (step (fst (st&#39;, xs))))) &lt;=\nZ.abs (f (fst (st&#39;, xs))) +\nZ.abs (g (fst (st&#39;, xs)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs\n  (f\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb7\"><span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step st&#39;))) &lt;=\nZ.max (Z.abs (f st&#39;)) (Z.abs (g st&#39;))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (step st&#39;))) &lt;=\nZ.abs (f st&#39;) + Z.abs (g st&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs\n  (f\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb8\"><span class=\"nb\">destruct</span> (step st&#39;) <span class=\"kr\">as</span> [st&#39;&#39; xs&#39;].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>st''</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs'</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (st&#39;&#39;, xs&#39;))) &lt;=\nZ.max (Z.abs (f st&#39;)) (Z.abs (g st&#39;))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (st&#39;&#39;, xs&#39;))) &lt;=\nZ.abs (f st&#39;) + Z.abs (g st&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (f (fst (st&#39;&#39;, xs&#39; :: xs))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (st&#39;&#39;, xs&#39; :: xs))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkb9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkb9\"><span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>st''</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs'</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f st&#39;&#39;) &lt;=\nZ.max (Z.abs (f st&#39;)) (Z.abs (g st&#39;))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g st&#39;&#39;) &lt;=\nZ.abs (f st&#39;) + Z.abs (g st&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (f st&#39;&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkba\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkba\"><span class=\"kn\">Lemma</span> <span class=\"nf\">fgBoundsStrict</span> <span class=\"nv\">st</span> <span class=\"nv\">n</span> :\n Z.abs (g st) &lt; Z.abs (f st) -&gt;\n Z.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\n Z.abs (g (fst (stepN n st))) &lt; Z.max (Z.abs (f st)) (Z.abs (g st)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (stepN n st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkbb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkbb\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (stepN n st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkbc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkbc\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">cbn</span>; <span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (stepN (S n) st))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN (S n) st))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkbd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkbd\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs\n  (f\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkbe\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkbe\"><span class=\"nb\">assert</span> (Hf := fStepBounds (fst (stepN n st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step (fst (stepN n st))))) &lt;=\nZ.max (Z.abs (f (fst (stepN n st))))\n  (Z.abs (g (fst (stepN n st))))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs\n  (f\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkbf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkbf\"><span class=\"nb\">assert</span> (Hg := gStepBounds (fst (stepN n st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (stepN n st))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (stepN n st))) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step (fst (stepN n st))))) &lt;=\nZ.max (Z.abs (f (fst (stepN n st))))\n  (Z.abs (g (fst (stepN n st))))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (step (fst (stepN n st))))) &lt;=\nZ.abs (f (fst (stepN n st))) +\nZ.abs (g (fst (stepN n st)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs\n  (f\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc0\"><span class=\"nb\">destruct</span> (stepN n st) <span class=\"kr\">as</span> [st&#39; xs].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (st&#39;, xs))) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (st&#39;, xs))) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step (fst (st&#39;, xs))))) &lt;=\nZ.max (Z.abs (f (fst (st&#39;, xs))))\n  (Z.abs (g (fst (st&#39;, xs))))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (step (fst (st&#39;, xs))))) &lt;=\nZ.abs (f (fst (st&#39;, xs))) +\nZ.abs (g (fst (st&#39;, xs)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs\n  (f\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc1\"><span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (step st&#39;))) &lt;=\nZ.max (Z.abs (f st&#39;)) (Z.abs (g st&#39;))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (step st&#39;))) &lt;=\nZ.abs (f st&#39;) + Z.abs (g st&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs\n  (f\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs\n  (g\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: xs)))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc2\"><span class=\"nb\">destruct</span> (step st&#39;) <span class=\"kr\">as</span> [st&#39;&#39; xs&#39;].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>st''</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs'</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f (fst (st&#39;&#39;, xs&#39;))) &lt;=\nZ.max (Z.abs (f st&#39;)) (Z.abs (g st&#39;))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g (fst (st&#39;&#39;, xs&#39;))) &lt;=\nZ.abs (f st&#39;) + Z.abs (g st&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f (fst (st&#39;&#39;, xs&#39; :: xs))) &lt;=\nZ.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g (fst (st&#39;&#39;, xs&#39; :: xs))) &lt;\nZ.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc3\"><span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st'</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f st&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</span></span></span><br><span><var>st''</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs'</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (f st&#39;&#39;) &lt;=\nZ.max (Z.abs (f st&#39;)) (Z.abs (g st&#39;))</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * Z.abs (g st&#39;&#39;) &lt;=\nZ.abs (f st&#39;) + Z.abs (g st&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (g st) &lt; Z.abs (f st) -&gt;\nZ.abs (f st&#39;&#39;) &lt;= Z.max (Z.abs (f st)) (Z.abs (g st)) /\\\nZ.abs (g st&#39;&#39;) &lt; Z.max (Z.abs (f st)) (Z.abs (g st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc4\"><span class=\"kn\">Lemma</span> <span class=\"nf\">fixed</span> <span class=\"nv\">st</span> <span class=\"nv\">n</span> : g st = <span class=\"mi\">0</span> -&gt;\n f (fst (stepN n st)) = f st /\\ g (fst (stepN n st)) = <span class=\"mi\">0</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g st = <span class=\"mi\">0</span> -&gt;\nf (fst (stepN n st)) = f st /\\\ng (fst (stepN n st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc5\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g st = <span class=\"mi\">0</span> -&gt;\nf (fst (stepN n st)) = f st /\\\ng (fst (stepN n st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc6\"><span class=\"nb\">intros</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (stepN n st)) = f st /\\\ng (fst (stepN n st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc7\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">auto</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n st)) = f st /\\ g (fst (stepN n st)) = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (stepN (S n) st)) = f st /\\\ng (fst (stepN (S n) st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc8\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n st)) = f st /\\ g (fst (stepN n st)) = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\nf st /\\\ng\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkc9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkc9\"><span class=\"nb\">destruct</span> (stepN n st) <span class=\"kr\">as</span> [[eta f g Hf] l].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>divstep.g st = <span class=\"mi\">0</span></span></span></span><br><span><var>eta, f, g</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd f</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>divstep.f (fst ({| delta := eta; f := f; g := g; oddF := Hf |}, l)) =\ndivstep.f st /\\\ndivstep.g (fst ({| delta := eta; f := f; g := g; oddF := Hf |}, l)) = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">divstep.f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        step\n          {|\n            delta := eta; f := f; g := g; oddF := Hf\n          |} <span class=\"kr\">in</span>\n      (st1, x :: l))) = divstep.f st /\\\ndivstep.g\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        step\n          {|\n            delta := eta; f := f; g := g; oddF := Hf\n          |} <span class=\"kr\">in</span>\n      (st1, x :: l))) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkca\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkca\"><span class=\"nb\">unfold</span> step.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>divstep.g st = <span class=\"mi\">0</span></span></span></span><br><span><var>eta, f, g</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd f</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>divstep.f (fst ({| delta := eta; f := f; g := g; oddF := Hf |}, l)) =\ndivstep.f st /\\\ndivstep.g (fst ({| delta := eta; f := f; g := g; oddF := Hf |}, l)) = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">divstep.f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        <span class=\"kr\">match</span>\n          Zeven_odd_dec\n            (divstep.g\n               {|\n                 delta := eta;\n                 f := f;\n                 g := g;\n                 oddF := Hf\n               |})\n        <span class=\"kr\">with</span>\n        | <span class=\"nb\">left</span> _ =&gt;\n            ({|\n               delta :=\n                 INC +\n                 delta\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |};\n               f :=\n                 divstep.f\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |};\n               g :=\n                 divstep.g\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |} / <span class=\"mi\">2</span>;\n               oddF :=\n                 oddF\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |}\n             |}, Step.H)\n        | <span class=\"nb\">right</span> oddG =&gt;\n            <span class=\"kr\">if</span>\n             <span class=\"mi\">0</span> &lt;?\n             delta\n               {|\n                 delta := eta;\n                 f := f;\n                 g := g;\n                 oddF := Hf\n               |}\n            <span class=\"kr\">then</span>\n             ({|\n                delta :=\n                  INC -\n                  delta\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                f :=\n                  divstep.g\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                g :=\n                  (divstep.g\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |} -\n                   divstep.f\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |}) / <span class=\"mi\">2</span>;\n                oddF := oddG\n              |}, Step.D)\n            <span class=\"kr\">else</span>\n             ({|\n                delta :=\n                  INC +\n                  delta\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                f :=\n                  divstep.f\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                g :=\n                  (divstep.g\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |} +\n                   divstep.f\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |}) / <span class=\"mi\">2</span>;\n                oddF :=\n                  oddF\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |}\n              |}, Step.S)\n        <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n      (st1, x :: l))) = divstep.f st /\\\ndivstep.g\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        <span class=\"kr\">match</span>\n          Zeven_odd_dec\n            (divstep.g\n               {|\n                 delta := eta;\n                 f := f;\n                 g := g;\n                 oddF := Hf\n               |})\n        <span class=\"kr\">with</span>\n        | <span class=\"nb\">left</span> _ =&gt;\n            ({|\n               delta :=\n                 INC +\n                 delta\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |};\n               f :=\n                 divstep.f\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |};\n               g :=\n                 divstep.g\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |} / <span class=\"mi\">2</span>;\n               oddF :=\n                 oddF\n                   {|\n                     delta := eta;\n                     f := f;\n                     g := g;\n                     oddF := Hf\n                   |}\n             |}, Step.H)\n        | <span class=\"nb\">right</span> oddG =&gt;\n            <span class=\"kr\">if</span>\n             <span class=\"mi\">0</span> &lt;?\n             delta\n               {|\n                 delta := eta;\n                 f := f;\n                 g := g;\n                 oddF := Hf\n               |}\n            <span class=\"kr\">then</span>\n             ({|\n                delta :=\n                  INC -\n                  delta\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                f :=\n                  divstep.g\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                g :=\n                  (divstep.g\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |} -\n                   divstep.f\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |}) / <span class=\"mi\">2</span>;\n                oddF := oddG\n              |}, Step.D)\n            <span class=\"kr\">else</span>\n             ({|\n                delta :=\n                  INC +\n                  delta\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                f :=\n                  divstep.f\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |};\n                g :=\n                  (divstep.g\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |} +\n                   divstep.f\n                     {|\n                       delta := eta;\n                       f := f;\n                       g := g;\n                       oddF := Hf\n                     |}) / <span class=\"mi\">2</span>;\n                oddF :=\n                  oddF\n                    {|\n                      delta := eta;\n                      f := f;\n                      g := g;\n                      oddF := Hf\n                    |}\n              |}, Step.S)\n        <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n      (st1, x :: l))) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkcb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkcb\"><span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>divstep.g st = <span class=\"mi\">0</span></span></span></span><br><span><var>eta, f, g</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd f</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>f = divstep.f st /\\ g = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">divstep.f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        <span class=\"kr\">match</span> Zeven_odd_dec g <span class=\"kr\">with</span>\n        | <span class=\"nb\">left</span> _ =&gt;\n            ({|\n               delta := <span class=\"mi\">1</span> + eta;\n               f := f;\n               g := g / <span class=\"mi\">2</span>;\n               oddF := Hf\n             |}, Step.H)\n        | <span class=\"nb\">right</span> oddG =&gt;\n            <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? eta\n            <span class=\"kr\">then</span>\n             ({|\n                delta := <span class=\"mi\">1</span> - eta;\n                f := g;\n                g := (g - f) / <span class=\"mi\">2</span>;\n                oddF := oddG\n              |}, Step.D)\n            <span class=\"kr\">else</span>\n             ({|\n                delta := <span class=\"mi\">1</span> + eta;\n                f := f;\n                g := (g + f) / <span class=\"mi\">2</span>;\n                oddF := Hf\n              |}, Step.S)\n        <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n      (st1, x :: l))) = divstep.f st /\\\ndivstep.g\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        <span class=\"kr\">match</span> Zeven_odd_dec g <span class=\"kr\">with</span>\n        | <span class=\"nb\">left</span> _ =&gt;\n            ({|\n               delta := <span class=\"mi\">1</span> + eta;\n               f := f;\n               g := g / <span class=\"mi\">2</span>;\n               oddF := Hf\n             |}, Step.H)\n        | <span class=\"nb\">right</span> oddG =&gt;\n            <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? eta\n            <span class=\"kr\">then</span>\n             ({|\n                delta := <span class=\"mi\">1</span> - eta;\n                f := g;\n                g := (g - f) / <span class=\"mi\">2</span>;\n                oddF := oddG\n              |}, Step.D)\n            <span class=\"kr\">else</span>\n             ({|\n                delta := <span class=\"mi\">1</span> + eta;\n                f := f;\n                g := (g + f) / <span class=\"mi\">2</span>;\n                oddF := Hf\n              |}, Step.S)\n        <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n      (st1, x :: l))) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkcc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkcc\"><span class=\"nb\">destruct</span> IHn <span class=\"kr\">as</span> [-&gt; -&gt;].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br><span><var>eta</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd (f st)</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        <span class=\"kr\">match</span> Zeven_odd_dec <span class=\"mi\">0</span> <span class=\"kr\">with</span>\n        | <span class=\"nb\">left</span> _ =&gt;\n            ({|\n               delta := <span class=\"mi\">1</span> + eta;\n               f := f st;\n               g := <span class=\"mi\">0</span> / <span class=\"mi\">2</span>;\n               oddF := Hf\n             |}, Step.H)\n        | <span class=\"nb\">right</span> oddG =&gt;\n            <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? eta\n            <span class=\"kr\">then</span>\n             ({|\n                delta := <span class=\"mi\">1</span> - eta;\n                f := <span class=\"mi\">0</span>;\n                g := (<span class=\"mi\">0</span> - f st) / <span class=\"mi\">2</span>;\n                oddF := oddG\n              |}, Step.D)\n            <span class=\"kr\">else</span>\n             ({|\n                delta := <span class=\"mi\">1</span> + eta;\n                f := f st;\n                g := (<span class=\"mi\">0</span> + f st) / <span class=\"mi\">2</span>;\n                oddF := Hf\n              |}, Step.S)\n        <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n      (st1, x :: l))) = f st /\\\ng\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) :=\n        <span class=\"kr\">match</span> Zeven_odd_dec <span class=\"mi\">0</span> <span class=\"kr\">with</span>\n        | <span class=\"nb\">left</span> _ =&gt;\n            ({|\n               delta := <span class=\"mi\">1</span> + eta;\n               f := f st;\n               g := <span class=\"mi\">0</span> / <span class=\"mi\">2</span>;\n               oddF := Hf\n             |}, Step.H)\n        | <span class=\"nb\">right</span> oddG =&gt;\n            <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? eta\n            <span class=\"kr\">then</span>\n             ({|\n                delta := <span class=\"mi\">1</span> - eta;\n                f := <span class=\"mi\">0</span>;\n                g := (<span class=\"mi\">0</span> - f st) / <span class=\"mi\">2</span>;\n                oddF := oddG\n              |}, Step.D)\n            <span class=\"kr\">else</span>\n             ({|\n                delta := <span class=\"mi\">1</span> + eta;\n                f := f st;\n                g := (<span class=\"mi\">0</span> + f st) / <span class=\"mi\">2</span>;\n                oddF := Hf\n              |}, Step.S)\n        <span class=\"kr\">end</span> <span class=\"kr\">in</span>\n      (st1, x :: l))) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkcd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkcd\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br><span><var>eta</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd (f st)</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f st = f st /\\ <span class=\"mi\">0</span> = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkce\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkce\"><span class=\"kn\">Lemma</span> <span class=\"nf\">fixed_f</span> <span class=\"nv\">st</span> <span class=\"nv\">n</span> : g st = <span class=\"mi\">0</span> -&gt;\n f (fst (stepN n st)) = f st.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g st = <span class=\"mi\">0</span> -&gt; f (fst (stepN n st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkcf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkcf\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g st = <span class=\"mi\">0</span> -&gt; f (fst (stepN n st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd0\"><span class=\"nb\">intros</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (stepN n st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd1\"><span class=\"nb\">destruct</span> (fixed st n Hg).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n st)) = f st</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n st)) = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (stepN n st)) = f st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd2\"><span class=\"kn\">Lemma</span> <span class=\"nf\">fixed_g</span> <span class=\"nv\">st</span> <span class=\"nv\">n</span> : g st = <span class=\"mi\">0</span> -&gt;\n g (fst (stepN n st)) = <span class=\"mi\">0</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g st = <span class=\"mi\">0</span> -&gt; g (fst (stepN n st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd3\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g st = <span class=\"mi\">0</span> -&gt; g (fst (stepN n st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd4\"><span class=\"nb\">intros</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (stepN n st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd5\"><span class=\"nb\">destruct</span> (fixed st n Hg).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st = <span class=\"mi\">0</span></span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n st)) = f st</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n st)) = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (stepN n st)) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd6\"><span class=\"kn\">Lemma</span> <span class=\"nf\">gcd</span> <span class=\"nv\">st</span> <span class=\"nv\">d</span> <span class=\"nv\">n</span> : Zis_gcd (f st) (g st) d -&gt;\n Zis_gcd (f (fst (stepN n st))) (g (fst (stepN n st))) d.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zis_gcd (f st) (g st) d -&gt;\nZis_gcd (f (fst (stepN n st))) (g (fst (stepN n st)))\n  d</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd7\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zis_gcd (f st) (g st) d -&gt;\nZis_gcd (f (fst (stepN n st))) (g (fst (stepN n st)))\n  d</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd8\"><span class=\"nb\">intros</span> Hgcd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zis_gcd (f (fst (stepN n st))) (g (fst (stepN n st)))\n  d</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkd9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkd9\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">auto</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f (fst (stepN n st)))\n  (g (fst (stepN n st))) d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zis_gcd (f (fst (stepN (S n) st)))\n  (g (fst (stepN (S n) st))) d</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkda\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkda\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f (fst (stepN n st)))\n  (g (fst (stepN n st))) d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zis_gcd\n  (f\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))))\n  (g\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))))\n  d</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkdb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkdb\"><span class=\"nb\">destruct</span> (stepN n st) <span class=\"kr\">as</span> [st0 l].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f (fst (st0, l))) (g (fst (st0, l))) d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zis_gcd\n  (f (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))))\n  (g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))))\n  d</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkdc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkdc\"><span class=\"nb\">cbn</span> <span class=\"kr\">in</span> IHn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st0) (g st0) d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zis_gcd\n  (f (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))))\n  (g (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))))\n  d</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkdd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkdd\"><span class=\"nb\">destruct</span> (spec st0);<span class=\"nb\">cbn</span> <span class=\"kr\">in</span> *;\n  <span class=\"nb\">revert</span> IHn;\n  <span class=\"nb\">apply</span> Zis_gcd_ind;\n  <span class=\"nb\">intros</span> Hd1 Hd2 Hdx;\n  <span class=\"nb\">apply</span> Zis_gcd_intro; <span class=\"kp\">try</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | g&#39;)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chkde\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chkde\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z, (x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | g&#39;) -&gt; (x | d)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chkdf\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chkdf\"><hr></label><div class=\"goal-conclusion\">(d | g&#39; - f&#39;)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chke0\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chke0\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | g&#39; - f&#39;) -&gt; (x | d)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chke1\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chke1\"><hr></label><div class=\"goal-conclusion\">(d | g&#39; + f&#39; + <span class=\"mi\">1</span>)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chke2\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chke2\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | g&#39; + f&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\"> \n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chke3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chke3\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | g&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chke4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chke4\"><span class=\"nb\">assert</span> (Hodd : Z.odd d = true).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chke5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chke5\"><hr></label><div class=\"goal-conclusion\">(d | g&#39;)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chke6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chke6\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chke7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chke7\"><span class=\"nb\">destruct</span> Hd1 <span class=\"kr\">as</span> [z1 Hd1].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g', z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> = z1 * d</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chke8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chke8\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> Z.odd) <span class=\"kr\">in</span> Hd1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g', z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>Z.odd (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) = Z.odd (z1 * d)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chke9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chke9\"><span class=\"nb\">rewrite</span> Z.add_comm, Z.odd_add_mul_2, Z.mul_comm, Z.odd_mul <span class=\"kr\">in</span> Hd1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g', z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>Z.odd <span class=\"mi\">1</span> = (Z.odd d &amp;&amp; Z.odd z1)%bool</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (Z.odd d);<span class=\"nb\">auto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkea\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkea\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | g&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkeb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkeb\"><span class=\"nb\">eapply</span> Gauss;[<span class=\"nb\">apply</span> Hd2|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime d <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkec\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkec\"><span class=\"nb\">apply</span> rel_prime_mod_rev;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (d mod <span class=\"mi\">2</span>) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chked\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chked\"><span class=\"nb\">rewrite</span> Zmod_odd, Hodd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime <span class=\"mi\">1</span> <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> rel_prime_1.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkee\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkee\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z, (x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | g&#39;) -&gt; (x | d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkef\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkef\"><span class=\"nb\">intros</span> x Hxf Hxg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf0\"><span class=\"nb\">apply</span> Hdx; <span class=\"kp\">try</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39;)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39;) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | <span class=\"mi\">2</span> * g&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto with</span> *.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf1\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | g&#39; - f&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf2\"><span class=\"nb\">assert</span> (Hodd : Z.odd d = true).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chkf3\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chkf3\"><hr></label><div class=\"goal-conclusion\">(d | g&#39; - f&#39;)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf4\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf5\"><span class=\"nb\">destruct</span> Hd1 <span class=\"kr\">as</span> [z1 Hd1].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g', z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> = z1 * d</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf6\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> Z.odd) <span class=\"kr\">in</span> Hd1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g', z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>Z.odd (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) = Z.odd (z1 * d)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf7\"><span class=\"nb\">rewrite</span> Z.add_comm, Z.odd_add_mul_2, Z.mul_comm, Z.odd_mul <span class=\"kr\">in</span> Hd1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g', z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>Z.odd <span class=\"mi\">1</span> = (Z.odd d &amp;&amp; Z.odd z1)%bool</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (Z.odd d);<span class=\"nb\">auto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf8\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | g&#39; - f&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkf9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkf9\"><span class=\"nb\">apply</span> Gauss <span class=\"kr\">with</span> <span class=\"mi\">2</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | <span class=\"mi\">2</span> * (g&#39; - f&#39;))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chkfa\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chkfa\"><hr></label><div class=\"goal-conclusion\">rel_prime d <span class=\"mi\">2</span></div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkfb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkfb\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | <span class=\"mi\">2</span> * (g&#39; - f&#39;))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkfc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkfc\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> * (g&#39; - f&#39;)) <span class=\"kr\">with</span> ((<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Z.divide_sub_r; <span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkfd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkfd\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime d <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkfe\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkfe\"><span class=\"nb\">apply</span> rel_prime_mod_rev;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (d mod <span class=\"mi\">2</span>) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chkff\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chkff\"><span class=\"nb\">rewrite</span> Zmod_odd, Hodd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime <span class=\"mi\">1</span> <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> rel_prime_1.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk100\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk100\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | g&#39; - f&#39;) -&gt; (x | d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk101\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk101\"><span class=\"nb\">intros</span> x Hxf Hxg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; - f&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk102\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk102\"><span class=\"nb\">apply</span> Hdx; <span class=\"kp\">try</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; - f&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk103\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk103\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) <span class=\"kr\">with</span> ((<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) - (<span class=\"mi\">2</span>*(g&#39; - f&#39;))) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; - f&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - <span class=\"mi\">2</span> * (g&#39; - f&#39;))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk104\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk104\"><span class=\"nb\">apply</span> Z.divide_sub_r; <span class=\"kp\">try</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; - f&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | <span class=\"mi\">2</span> * (g&#39; - f&#39;))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto with</span> *.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk105\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk105\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | g&#39; + f&#39; + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk106\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk106\"><span class=\"nb\">assert</span> (Hodd : Z.odd d = true).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk107\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk107\"><hr></label><div class=\"goal-conclusion\">(d | g&#39; + f&#39; + <span class=\"mi\">1</span>)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk108\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk108\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk109\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk109\"><span class=\"nb\">destruct</span> Hd1 <span class=\"kr\">as</span> [z1 Hd1].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> = z1 * d</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk10a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk10a\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> Z.odd) <span class=\"kr\">in</span> Hd1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>Z.odd (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) = Z.odd (z1 * d)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk10b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk10b\"><span class=\"nb\">rewrite</span> Z.add_comm, Z.odd_add_mul_2, Z.mul_comm, Z.odd_mul <span class=\"kr\">in</span> Hd1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>z1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>Z.odd <span class=\"mi\">1</span> = (Z.odd d &amp;&amp; Z.odd z1)%bool</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.odd d = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (Z.odd d);<span class=\"nb\">auto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk10c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk10c\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | g&#39; + f&#39; + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk10d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk10d\"><span class=\"nb\">apply</span> Gauss <span class=\"kr\">with</span> <span class=\"mi\">2</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | <span class=\"mi\">2</span> * (g&#39; + f&#39; + <span class=\"mi\">1</span>))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk10e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk10e\"><hr></label><div class=\"goal-conclusion\">rel_prime d <span class=\"mi\">2</span></div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk10f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk10f\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | <span class=\"mi\">2</span> * (g&#39; + f&#39; + <span class=\"mi\">1</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk110\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk110\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> * (g&#39; + f&#39; + <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> ((<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Z.divide_add_r; <span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk111\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk111\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime d <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk112\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk112\"><span class=\"nb\">apply</span> rel_prime_mod_rev;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (d mod <span class=\"mi\">2</span>) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk113\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk113\"><span class=\"nb\">rewrite</span> Zmod_odd, Hodd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd d = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime <span class=\"mi\">1</span> <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> rel_prime_1.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk114\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk114\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | g&#39; + f&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk115\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk115\"><span class=\"nb\">intros</span> x Hxf Hxg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; + f&#39; + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | d)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk116\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk116\"><span class=\"nb\">apply</span> Hdx; <span class=\"kp\">try</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; + f&#39; + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk117\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk117\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) <span class=\"kr\">with</span> ((<span class=\"mi\">2</span>*(g&#39; + f&#39; + <span class=\"mi\">1</span>)) - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; + f&#39; + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | <span class=\"mi\">2</span> * (g&#39; + f&#39; + <span class=\"mi\">1</span>) - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk118\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk118\"><span class=\"nb\">apply</span> Z.divide_sub_r; <span class=\"kp\">try</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span>Zis_gcd (f st) (g st) d</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hd1</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hd2</var><span class=\"hyp-type\"><b>: </b><span>(d | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) -&gt; (x | <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) -&gt; (x | d)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hxf</var><span class=\"hyp-type\"><b>: </b><span>(x | <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxg</var><span class=\"hyp-type\"><b>: </b><span>(x | g&#39; + f&#39; + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x | <span class=\"mi\">2</span> * (g&#39; + f&#39; + <span class=\"mi\">1</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto with</span> *.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk119\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk119\"><span class=\"kn\">Lemma</span> <span class=\"nf\">Translate_divsteps</span> <span class=\"nv\">n</span> <span class=\"nv\">fi</span> <span class=\"nv\">gi</span> (<span class=\"nv\">Hf</span> : Zodd fi) :\n delta (fst (stepN n (init fi gi Hf))) = divsteps.delta (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)) /\\\n f (fst (stepN n (init fi gi Hf))) = divsteps.f (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)) /\\\n g (fst (stepN n (init fi gi Hf))) = divsteps.g (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi)) /\\\nf (fst (stepN n (init fi gi Hf))) =\ndivsteps.f\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi)) /\\\ng (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk11a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk11a\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi)) /\\\nf (fst (stepN n (init fi gi Hf))) =\ndivsteps.f\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi)) /\\\ng (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk11b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk11b\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">cbn</span>;<span class=\"nb\">auto</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)) /\\\nf (fst (stepN n (init fi gi Hf))) =\ndivsteps.f (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)) /\\\ng (fst (stepN n (init fi gi Hf))) =\ndivsteps.g (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.delta\n  (N.iter (N.of_nat (S n)) divsteps.step\n     (divsteps.init fi gi)) /\\\nf (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.f\n  (N.iter (N.of_nat (S n)) divsteps.step\n     (divsteps.init fi gi)) /\\\ng (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat (S n)) divsteps.step\n     (divsteps.init fi gi))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk11c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk11c\"><span class=\"nb\">destruct</span> IHn <span class=\"kr\">as</span> [IHdelta [IHf IHg]].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>IHdelta</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br><span><var>IHf</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n (init fi gi Hf))) =\ndivsteps.f\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br><span><var>IHg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.delta\n  (N.iter (N.of_nat (S n)) divsteps.step\n     (divsteps.init fi gi)) /\\\nf (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.f\n  (N.iter (N.of_nat (S n)) divsteps.step\n     (divsteps.init fi gi)) /\\\ng (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat (S n)) divsteps.step\n     (divsteps.init fi gi))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk11d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk11d\"><span class=\"nb\">rewrite</span> Nnat.Nat2N.inj_succ, N.iter_succ.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>IHdelta</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br><span><var>IHf</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n (init fi gi Hf))) =\ndivsteps.f\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br><span><var>IHg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.delta\n  (divsteps.step\n     (N.iter (N.of_nat n) divsteps.step\n        (divsteps.init fi gi))) /\\\nf (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.f\n  (divsteps.step\n     (N.iter (N.of_nat n) divsteps.step\n        (divsteps.init fi gi))) /\\\ng (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.g\n  (divsteps.step\n     (N.iter (N.of_nat n) divsteps.step\n        (divsteps.init fi gi)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk11e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk11e\"><span class=\"nb\">destruct</span> (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>delta0, f0, g0, d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHdelta</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br><span><var>IHf</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n (init fi gi Hf))) =\ndivsteps.f\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br><span><var>IHg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.delta\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\nf (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.f\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\ng (fst (stepN (S n) (init fi gi Hf))) =\ndivsteps.g\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk11f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk11f\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>delta0, f0, g0, d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHdelta</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br><span><var>IHf</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n (init fi gi Hf))) =\ndivsteps.f\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br><span><var>IHg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (init fi gi Hf) <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\ndivsteps.delta\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\nf\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (init fi gi Hf) <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\ndivsteps.f\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\ng\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n (init fi gi Hf) <span class=\"kr\">in</span>\n      <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs))) =\ndivsteps.g\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk120\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk120\"><span class=\"nb\">destruct</span> (stepN n (init fi gi Hf)) <span class=\"kr\">as</span> [st0 l].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>delta0, f0, g0, d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHdelta</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (st0, l)) =\ndivsteps.delta\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br><span><var>IHf</var><span class=\"hyp-type\"><b>: </b><span>f (fst (st0, l)) =\ndivsteps.f\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br><span><var>IHg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (st0, l)) =\ndivsteps.g\n  {|\n    divsteps.delta := delta0;\n    divsteps.f := f0;\n    divsteps.g := g0;\n    divsteps.d := d;\n    divsteps.e := e;\n    divsteps.modulus := modulus\n  |}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.delta\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\nf (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.f\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\ng (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.g\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk121\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk121\"><span class=\"nb\">simpl</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>delta0, f0, g0, d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st0 = delta0</span></span></span><br><span><var>IHf</var><span class=\"hyp-type\"><b>: </b><span>f st0 = f0</span></span></span><br><span><var>IHg</var><span class=\"hyp-type\"><b>: </b><span>g st0 = g0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.delta\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\nf (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.f\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\ng (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.g\n  (divsteps.step\n     {|\n       divsteps.delta := delta0;\n       divsteps.f := f0;\n       divsteps.g := g0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk122\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk122\"><span class=\"nb\">subst</span> delta0 f0 g0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.delta\n  (divsteps.step\n     {|\n       divsteps.delta := delta st0;\n       divsteps.f := f st0;\n       divsteps.g := g st0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\nf (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.f\n  (divsteps.step\n     {|\n       divsteps.delta := delta st0;\n       divsteps.f := f st0;\n       divsteps.g := g st0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |}) /\\\ng (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: l))) =\ndivsteps.g\n  (divsteps.step\n     {|\n       divsteps.delta := delta st0;\n       divsteps.f := f st0;\n       divsteps.g := g st0;\n       divsteps.d := d;\n       divsteps.e := e;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk123\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk123\"><span class=\"nb\">destruct</span> (spec st0);\n<span class=\"nb\">unfold</span> divsteps.step; <span class=\"nb\">cbn</span> -[Z.div].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> + d0 =\ndivsteps.delta\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39;)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39;;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\n<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> =\ndivsteps.f\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39;)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39;;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\ng&#39; =\ndivsteps.g\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39;)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39;;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |})</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk124\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk124\"><hr></label><div class=\"goal-conclusion\">Z.pos_sub <span class=\"mi\">1</span> d0 =\ndivsteps.delta\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta :=\n        Z.pos\n          <span class=\"kr\">match</span> d0 <span class=\"kr\">with</span>\n          | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n          | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n          | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n          <span class=\"kr\">end</span>;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := Z.pos_sub <span class=\"mi\">1</span> d0;\n      divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}) /\\\n<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> =\ndivsteps.f\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta :=\n        Z.pos\n          <span class=\"kr\">match</span> d0 <span class=\"kr\">with</span>\n          | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n          | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n          | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n          <span class=\"kr\">end</span>;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := Z.pos_sub <span class=\"mi\">1</span> d0;\n      divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}) /\\\ng&#39; - f&#39; =\ndivsteps.g\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta :=\n        Z.pos\n          <span class=\"kr\">match</span> d0 <span class=\"kr\">with</span>\n          | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n          | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n          | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n          <span class=\"kr\">end</span>;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := Z.pos_sub <span class=\"mi\">1</span> d0;\n      divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |})</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk125\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk125\"><hr></label><div class=\"goal-conclusion\"><span class=\"mi\">1</span> + d0 =\ndivsteps.delta\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\n<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> =\ndivsteps.f\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\ng&#39; + f&#39; + <span class=\"mi\">1</span> =\ndivsteps.g\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk126\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk126\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> + d0 =\ndivsteps.delta\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39;)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39;;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\n<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> =\ndivsteps.f\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39;)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39;;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\ng&#39; =\ndivsteps.g\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39;)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39;;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk127\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk127\"><span class=\"nb\">rewrite</span> Z.even_mul; <span class=\"nb\">cbn</span> -[Z.div].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> + d0 = <span class=\"mi\">1</span> + d0 /\\\n<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> = <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> /\\ g&#39; = <span class=\"mi\">2</span> * g&#39; / <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> (Z.mul_comm <span class=\"mi\">2</span> g&#39;), Z.div_mul; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk128\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk128\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.pos_sub <span class=\"mi\">1</span> d0 =\ndivsteps.delta\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta :=\n        Z.pos\n          <span class=\"kr\">match</span> d0 <span class=\"kr\">with</span>\n          | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n          | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n          | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n          <span class=\"kr\">end</span>;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := Z.pos_sub <span class=\"mi\">1</span> d0;\n      divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}) /\\\n<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> =\ndivsteps.f\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta :=\n        Z.pos\n          <span class=\"kr\">match</span> d0 <span class=\"kr\">with</span>\n          | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n          | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n          | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n          <span class=\"kr\">end</span>;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := Z.pos_sub <span class=\"mi\">1</span> d0;\n      divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}) /\\\ng&#39; - f&#39; =\ndivsteps.g\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta :=\n        Z.pos\n          <span class=\"kr\">match</span> d0 <span class=\"kr\">with</span>\n          | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n          | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n          | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n          <span class=\"kr\">end</span>;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := Z.pos_sub <span class=\"mi\">1</span> d0;\n      divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk129\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk129\"><span class=\"nb\">rewrite</span> Z.add_comm, Z.even_add_mul_2; <span class=\"nb\">cbn</span> -[Z.div].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.pos_sub <span class=\"mi\">1</span> d0 = Z.pos_sub <span class=\"mi\">1</span> d0 /\\\n<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; = <span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; /\\\ng&#39; - f&#39; = (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk12a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk12a\"><span class=\"kp\">repeat</span> (<span class=\"nb\">split</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; - f&#39; = (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk12b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk12b\"><span class=\"nb\">replace</span> (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> ((g&#39; - f&#39;) * <span class=\"mi\">2</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; - f&#39; = (g&#39; - f&#39;) * <span class=\"mi\">2</span> / <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Z.div_mul; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk12c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk12c\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> + d0 =\ndivsteps.delta\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\n<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> =\ndivsteps.f\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}) /\\\ng&#39; + f&#39; + <span class=\"mi\">1</span> =\ndivsteps.g\n  (<span class=\"kr\">if</span> Z.even (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd e <span class=\"kr\">then</span> e + modulus <span class=\"kr\">else</span> e) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n    <span class=\"kr\">then</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> - d0;\n       divsteps.f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := e;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e - d)\n          <span class=\"kr\">then</span> e - d + modulus\n          <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |}\n    <span class=\"kr\">else</span>\n     {|\n       divsteps.delta := <span class=\"mi\">1</span> + d0;\n       divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       divsteps.g := (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n       divsteps.d := d;\n       divsteps.e :=\n         (<span class=\"kr\">if</span> Z.odd (e + d)\n          <span class=\"kr\">then</span> e + d + modulus\n          <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n       divsteps.modulus := modulus\n     |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk12d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk12d\"><span class=\"nb\">rewrite</span> (Z.add_comm _ <span class=\"mi\">1</span>), Z.even_add_mul_2; <span class=\"nb\">cbn</span> -[Z.div].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> + d0 =\ndivsteps.delta\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> - d0;\n      divsteps.f := <span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39;;\n      divsteps.g := (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e + d)\n         <span class=\"kr\">then</span> e + d + modulus\n         <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}) /\\\n<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> =\ndivsteps.f\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> - d0;\n      divsteps.f := <span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39;;\n      divsteps.g := (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e + d)\n         <span class=\"kr\">then</span> e + d + modulus\n         <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}) /\\\ng&#39; + f&#39; + <span class=\"mi\">1</span> =\ndivsteps.g\n  (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? d0\n   <span class=\"kr\">then</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> - d0;\n      divsteps.f := <span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39;;\n      divsteps.g := (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := e;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e - d)\n         <span class=\"kr\">then</span> e - d + modulus\n         <span class=\"kr\">else</span> e - d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |}\n   <span class=\"kr\">else</span>\n    {|\n      divsteps.delta := <span class=\"mi\">1</span> + d0;\n      divsteps.f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n      divsteps.g := (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n      divsteps.d := d;\n      divsteps.e :=\n        (<span class=\"kr\">if</span> Z.odd (e + d)\n         <span class=\"kr\">then</span> e + d + modulus\n         <span class=\"kr\">else</span> e + d) / <span class=\"mi\">2</span>;\n      divsteps.modulus := modulus\n    |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk12e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk12e\"><span class=\"nb\">elim</span> Z.ltb_spec;[<span class=\"bp\">lia</span>|<span class=\"nb\">intros</span> _];<span class=\"nb\">cbn</span> -[Z.div].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> + d0 = <span class=\"mi\">1</span> + d0 /\\\n<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> = <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span> /\\\ng&#39; + f&#39; + <span class=\"mi\">1</span> = (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk12f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk12f\"><span class=\"kp\">repeat</span> (<span class=\"nb\">split</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; + f&#39; + <span class=\"mi\">1</span> = (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk130\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk130\"><span class=\"nb\">replace</span> (<span class=\"mi\">1</span> + <span class=\"mi\">2</span> * g&#39; + (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> ((g&#39; + f&#39; + <span class=\"mi\">1</span>) * <span class=\"mi\">2</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>d, e, modulus</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d0, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l0</var><span class=\"hyp-type\"><b>: </b><span>d0 &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g&#39; + f&#39; + <span class=\"mi\">1</span> = (g&#39; + f&#39; + <span class=\"mi\">1</span>) * <span class=\"mi\">2</span> / <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Z.div_mul; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk131\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk131\"><span class=\"kn\">Lemma</span> <span class=\"nf\">Translate_divsteps_g</span> <span class=\"nv\">n</span> <span class=\"nv\">fi</span> <span class=\"nv\">gi</span> (<span class=\"nv\">Hf</span> : Zodd fi) :\n g (fst (stepN n (init fi gi Hf))) = divsteps.g (N.iter (N.of_nat n) divsteps.step (divsteps.init fi gi)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk132\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk132\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk133\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk133\"><span class=\"nb\">destruct</span> (Translate_divsteps n fi gi Hf).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>fi, gi</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>Zodd fi</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n (init fi gi Hf))) =\ndivsteps.delta\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>f (fst (stepN n (init fi gi Hf))) =\ndivsteps.f\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi)) /\\\ng (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">g (fst (stepN n (init fi gi Hf))) =\ndivsteps.g\n  (N.iter (N.of_nat n) divsteps.step\n     (divsteps.init fi gi))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">tauto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Module</span> <span class=\"nf\">Trans</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Record</span> <span class=\"nf\">V2</span> :=\n{ x : Z; y : Z }.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">scale</span> (<span class=\"nv\">c</span> : Z) (<span class=\"nv\">vec</span> : V2) :=\n{| x := c * (x vec)\n ; y := c * (y vec)\n|}.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk134\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk134\"><span class=\"kn\">Lemma</span> <span class=\"nf\">scale_mul</span> <span class=\"nv\">c1</span> <span class=\"nv\">c2</span> <span class=\"nv\">vec</span> : scale (c1 * c2) vec = scale c1 (scale c2 vec).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>c1, c2</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>vec</var><span class=\"hyp-type\"><b>: </b><span>V2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (c1 * c2) vec = scale c1 (scale c2 vec)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk135\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk135\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>c1, c2</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>vec</var><span class=\"hyp-type\"><b>: </b><span>V2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (c1 * c2) vec = scale c1 (scale c2 vec)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk136\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk136\"><span class=\"nb\">destruct</span> vec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>c1, c2, x0, y0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (c1 * c2) {| x := x0; y := y0 |} =\nscale c1 (scale c2 {| x := x0; y := y0 |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">unfold</span> scale; <span class=\"nb\">simpl</span>; <span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Record</span> <span class=\"nf\">M2x2</span> :=\n{ u : Z; v : Z; q : Z; r : Z}.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">I</span> : M2x2 :=\n{| u := <span class=\"mi\">1</span>\n ; v := <span class=\"mi\">0</span>\n ; q := <span class=\"mi\">0</span>\n ; r := <span class=\"mi\">1</span>\n|}.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">ap</span> (<span class=\"nv\">m</span> : M2x2) (<span class=\"nv\">vec</span> : V2) : V2 :=\n{| x := (u m) * (x vec) + (v m) * (y vec)\n ; y := (q m) * (x vec) + (r m) * (y vec)\n|}.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk137\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk137\"><span class=\"kn\">Lemma</span> <span class=\"nf\">ap_scale</span> <span class=\"nv\">m</span> <span class=\"nv\">c</span> <span class=\"nv\">vec</span> : ap m (scale c vec) = scale c (ap m vec).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>c</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>vec</var><span class=\"hyp-type\"><b>: </b><span>V2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ap m (scale c vec) = scale c (ap m vec)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk138\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk138\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>c</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>vec</var><span class=\"hyp-type\"><b>: </b><span>V2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ap m (scale c vec) = scale c (ap m vec)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk139\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk139\"><span class=\"nb\">destruct</span> m, vec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>u0, v0, q0, r0, c, x0, y0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ap {| u := u0; v := v0; q := q0; r := r0 |}\n  (scale c {| x := x0; y := y0 |}) =\nscale c\n  (ap {| u := u0; v := v0; q := q0; r := r0 |}\n     {| x := x0; y := y0 |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">unfold</span> ap, scale; <span class=\"nb\">simpl</span>; <span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">mul</span> (<span class=\"nv\">m1</span> <span class=\"nv\">m2</span>: M2x2) : M2x2 :=\n{| u := (u m1) * (u m2) + (v m1) * (q m2)\n ; v := (u m1) * (v m2) + (v m1) * (r m2)\n ; q := (q m1) * (u m2) + (r m1) * (q m2)\n ; r := (q m1) * (v m2) + (r m1) * (r m2)\n|}.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk13a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk13a\"><span class=\"kn\">Lemma</span> <span class=\"nf\">mul_assoc</span> <span class=\"nv\">m1</span> <span class=\"nv\">m2</span> <span class=\"nv\">m3</span> : mul m1 (mul m2 m3) = mul (mul m1 m2) m3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m1, m2, m3</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul m1 (mul m2 m3) = mul (mul m1 m2) m3</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk13b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk13b\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m1, m2, m3</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul m1 (mul m2 m3) = mul (mul m1 m2) m3</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk13c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk13c\"><span class=\"nb\">destruct</span> m1, m2, m3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>u0, v0, q0, r0, u1, v1, q1, r1, u2, v2, q2, r2</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul {| u := u0; v := v0; q := q0; r := r0 |}\n  (mul {| u := u1; v := v1; q := q1; r := r1 |}\n     {| u := u2; v := v2; q := q2; r := r2 |}) =\nmul\n  (mul {| u := u0; v := v0; q := q0; r := r0 |}\n     {| u := u1; v := v1; q := q1; r := r1 |})\n  {| u := u2; v := v2; q := q2; r := r2 |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">unfold</span> mul; <span class=\"nb\">simpl</span>; <span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk13d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk13d\"><span class=\"kn\">Lemma</span> <span class=\"nf\">ap_mul</span> <span class=\"nv\">m1</span> <span class=\"nv\">m2</span> <span class=\"nv\">vec</span> : ap (mul m1 m2) vec = ap m1 (ap m2 vec).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m1, m2</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>vec</var><span class=\"hyp-type\"><b>: </b><span>V2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ap (mul m1 m2) vec = ap m1 (ap m2 vec)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk13e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk13e\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m1, m2</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>vec</var><span class=\"hyp-type\"><b>: </b><span>V2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ap (mul m1 m2) vec = ap m1 (ap m2 vec)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk13f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk13f\"><span class=\"nb\">destruct</span> m1, m2, vec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>u0, v0, q0, r0, u1, v1, q1, r1, x0, y0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ap\n  (mul {| u := u0; v := v0; q := q0; r := r0 |}\n     {| u := u1; v := v1; q := q1; r := r1 |})\n  {| x := x0; y := y0 |} =\nap {| u := u0; v := v0; q := q0; r := r0 |}\n  (ap {| u := u1; v := v1; q := q1; r := r1 |}\n     {| x := x0; y := y0 |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">unfold</span> ap, mul; <span class=\"nb\">simpl</span>; <span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">det</span> (<span class=\"nv\">m</span>: M2x2) : Z := (u m) * (r m) - (v m) * (q m).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk140\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk140\"><span class=\"kn\">Lemma</span> <span class=\"nf\">det_mul</span> <span class=\"nv\">m1</span> <span class=\"nv\">m2</span> : det (mul m1 m2) = det m1 * det m2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m1, m2</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (mul m1 m2) = det m1 * det m2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk141\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk141\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m1, m2</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (mul m1 m2) = det m1 * det m2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk142\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk142\"><span class=\"nb\">destruct</span> m1, m2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>u0, v0, q0, r0, u1, v1, q1, r1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det\n  (mul {| u := u0; v := v0; q := q0; r := r0 |}\n     {| u := u1; v := v1; q := q1; r := r1 |}) =\ndet {| u := u0; v := v0; q := q0; r := r0 |} *\ndet {| u := u1; v := v1; q := q1; r := r1 |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk143\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk143\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>u0, v0, q0, r0, u1, v1, q1, r1</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(u0 * u1 + v0 * q1) * (q0 * v1 + r0 * r1) -\n(u0 * v1 + v0 * r1) * (q0 * u1 + r0 * q1) =\n(u0 * r0 - v0 * q0) * (u1 * r1 - v1 * q1)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">prod</span> : list M2x2 -&gt; M2x2 := fold_right mul I.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk144\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk144\"><span class=\"kn\">Lemma</span> <span class=\"nf\">prod_app</span> <span class=\"nv\">l1</span> <span class=\"nv\">l2</span> : prod (l1 ++ l2) = mul (prod l1) (prod l2).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod (l1 ++ l2) = mul (prod l1) (prod l2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk145\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk145\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod (l1 ++ l2) = mul (prod l1) (prod l2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk146\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk146\"><span class=\"nb\">induction</span> l1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod (nil ++ l2) = mul (prod nil) (prod l2)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk147\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span>prod (l1 ++ l2) = mul (prod l1) (prod l2)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk147\"><hr></label><div class=\"goal-conclusion\">prod ((a :: l1) ++ l2) =\nmul (prod (a :: l1)) (prod l2)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk148\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk148\"><span class=\"mi\">1</span>:<span class=\"nb\">cbn</span>; <span class=\"nb\">destruct</span> (prod l2); <span class=\"nb\">unfold</span> mul; <span class=\"nb\">cbn</span>; <span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span>prod (l1 ++ l2) = mul (prod l1) (prod l2)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod ((a :: l1) ++ l2) =\nmul (prod (a :: l1)) (prod l2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk149\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk149\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span>prod (l1 ++ l2) = mul (prod l1) (prod l2)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul a (prod (l1 ++ l2)) =\nmul (mul a (prod l1)) (prod l2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk14a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk14a\"><span class=\"nb\">rewrite</span> IHl1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span>prod (l1 ++ l2) = mul (prod l1) (prod l2)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul a (mul (prod l1) (prod l2)) =\nmul (mul a (prod l1)) (prod l2)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (prod l1); <span class=\"nb\">destruct</span> (prod l2); <span class=\"nb\">unfold</span> mul; <span class=\"nb\">cbn</span>; <span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk14b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk14b\"><span class=\"kn\">Lemma</span> <span class=\"nf\">det_prod</span> <span class=\"nv\">ms</span> : det (prod ms) = fold_right Z.mul <span class=\"mi\">1</span> (map det ms).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>ms</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (prod ms) = fold_right Z.mul <span class=\"mi\">1</span> (map det ms)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk14c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk14c\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>ms</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (prod ms) = fold_right Z.mul <span class=\"mi\">1</span> (map det ms)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk14d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk14d\"><span class=\"nb\">induction</span> ms; <span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>ms</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br><span><var>IHms</var><span class=\"hyp-type\"><b>: </b><span>det (prod ms) = fold_right Z.mul <span class=\"mi\">1</span> (map det ms)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (prod (a :: ms)) =\nfold_right Z.mul <span class=\"mi\">1</span> (map det (a :: ms))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk14e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk14e\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>ms</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br><span><var>IHms</var><span class=\"hyp-type\"><b>: </b><span>det (prod ms) = fold_right Z.mul <span class=\"mi\">1</span> (map det ms)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (mul a (prod ms)) =\ndet a * fold_right Z.mul <span class=\"mi\">1</span> (map det ms)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk14f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk14f\"><span class=\"nb\">rewrite</span> det_mul.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>ms</var><span class=\"hyp-type\"><b>: </b><span>list M2x2</span></span></span><br><span><var>IHms</var><span class=\"hyp-type\"><b>: </b><span>det (prod ms) = fold_right Z.mul <span class=\"mi\">1</span> (map det ms)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det a * det (prod ms) =\ndet a * fold_right Z.mul <span class=\"mi\">1</span> (map det ms)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">congruence</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">bounded</span> (<span class=\"nv\">b</span> : Z) (<span class=\"nv\">m</span> : M2x2) :=\n  (Z.abs (u m) + Z.abs (v m) &lt;= b /\\ -b &lt; u m + v m) /\\\n  (Z.abs (q m) + Z.abs (r m) &lt;= b /\\ -b &lt; q m + r m).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk150\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk150\"><span class=\"kn\">Lemma</span> <span class=\"nf\">bounded_I</span> : bounded <span class=\"mi\">1</span> I.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded <span class=\"mi\">1</span> I</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk151\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk151\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded <span class=\"mi\">1</span> I</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk152\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk152\"><span class=\"nb\">unfold</span> bounded.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.abs (u I) + Z.abs (v I) &lt;= <span class=\"mi\">1</span> /\\ - (<span class=\"mi\">1</span>) &lt; u I + v I) /\\\nZ.abs (q I) + Z.abs (r I) &lt;= <span class=\"mi\">1</span> /\\ - (<span class=\"mi\">1</span>) &lt; q I + r I</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk153\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk153\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">1</span> &lt;= <span class=\"mi\">1</span> /\\ -<span class=\"mi\">1</span> &lt; <span class=\"mi\">1</span>) /\\ <span class=\"mi\">1</span> &lt;= <span class=\"mi\">1</span> /\\ -<span class=\"mi\">1</span> &lt; <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">trans</span> (<span class=\"nv\">s</span> : Step) : M2x2 :=\n<span class=\"kr\">match</span> s <span class=\"kr\">with</span>\n| Step.H =&gt; {| u := <span class=\"mi\">2</span>; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}\n| Step.D =&gt; {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">2</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">1</span> |}\n| Step.S =&gt; {| u := <span class=\"mi\">2</span>; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">1</span>; r := <span class=\"mi\">1</span> |}\n<span class=\"kr\">end</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">fg</span> <span class=\"nv\">st</span> := {| x := f st; y := g st |}.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk154\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk154\"><span class=\"kn\">Lemma</span> <span class=\"nf\">trans_step</span> <span class=\"nv\">st</span> :\n  scale <span class=\"mi\">2</span> (fg (fst (step st))) = ap (trans (snd (step st))) (fg st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale <span class=\"mi\">2</span> (fg (fst (step st))) =\nap (trans (snd (step st))) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk155\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk155\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale <span class=\"mi\">2</span> (fg (fst (step st))) =\nap (trans (snd (step st))) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (spec st);\n<span class=\"nb\">unfold</span> scale,ap, fg; <span class=\"nb\">cbn</span>;\n<span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk156\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk156\"><span class=\"kn\">Lemma</span> <span class=\"nf\">det_trans</span> <span class=\"nv\">s</span> : det (trans s) = <span class=\"mi\">2</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (trans s) = <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk157\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk157\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (trans s) = <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> s; <span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk158\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk158\"><span class=\"kn\">Lemma</span> <span class=\"nf\">bounded_mul_trans</span> <span class=\"nv\">b</span> <span class=\"nv\">m</span> <span class=\"nv\">s</span> : bounded b m -&gt; bounded (<span class=\"mi\">2</span>*b) (mul (trans s) m).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>m</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded b m -&gt; bounded (<span class=\"mi\">2</span> * b) (mul (trans s) m)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk159\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk159\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>m</var><span class=\"hyp-type\"><b>: </b><span>M2x2</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded b m -&gt; bounded (<span class=\"mi\">2</span> * b) (mul (trans s) m)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk15a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk15a\"><span class=\"nb\">destruct</span> m <span class=\"kr\">as</span> [u v q r].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b, u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded b {| u := u; v := v; q := q; r := r |} -&gt;\nbounded (<span class=\"mi\">2</span> * b)\n  (mul (trans s) {| u := u; v := v; q := q; r := r |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk15b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk15b\"><span class=\"nb\">intros</span> [Huv Hqr]; <span class=\"nb\">simpl</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>b, u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs u + Z.abs v &lt;= b /\\ - b &lt; u + v</span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs q + Z.abs r &lt;= b /\\ - b &lt; q + r</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded (<span class=\"mi\">2</span> * b)\n  (mul (trans s) {| u := u; v := v; q := q; r := r |})</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> s; <span class=\"nb\">unfold</span> bounded; <span class=\"nb\">simpl</span>; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">transN</span> (<span class=\"nv\">n</span> : nat) (<span class=\"nv\">st</span> : State) : M2x2 :=\n  prod (map trans (snd (stepN n st))).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk15c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk15c\"><span class=\"kn\">Lemma</span> <span class=\"nf\">transN_S</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : {x | transN (S n) st = mul (trans x) (transN n st)}.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{x : Step\n| transN (S n) st = mul (trans x) (transN n st)}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk15d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk15d\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{x : Step\n| transN (S n) st = mul (trans x) (transN n st)}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk15e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk15e\"><span class=\"nb\">unfold</span> transN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{x : Step\n| prod (map trans (snd (stepN (S n) st))) =\n  mul (trans x) (prod (map trans (snd (stepN n st))))}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk15f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk15f\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{x : Step\n| prod\n    (map trans\n       (snd\n          (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n           <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x0) := step st0 <span class=\"kr\">in</span>\n           (st1, x0 :: xs)))) =\n  mul (trans x) (prod (map trans (snd (stepN n st))))}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk160\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk160\"><span class=\"nb\">destruct</span> (stepN n st) <span class=\"kr\">as</span> [st0 xs] <span class=\"nb\">eqn</span>:Hxs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>Hxs</var><span class=\"hyp-type\"><b>: </b><span>stepN n st = (st0, xs)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{x : Step\n| prod\n    (map trans\n       (snd\n          (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x0) := step st0 <span class=\"kr\">in</span>\n           (st1, x0 :: xs)))) =\n  mul (trans x) (prod (map trans (snd (st0, xs))))}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk161\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk161\"><span class=\"nb\">destruct</span> (step st0) <span class=\"kr\">as</span> [st1 x].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>Hxs</var><span class=\"hyp-type\"><b>: </b><span>stepN n st = (st0, xs)</span></span></span><br><span><var>st1</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{x0 : Step\n| prod (map trans (snd (st1, x :: xs))) =\n  mul (trans x0) (prod (map trans (snd (st0, xs))))}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk162\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk162\"><span class=\"kr\">exists</span> <span class=\"nv\">x</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>Hxs</var><span class=\"hyp-type\"><b>: </b><span>stepN n st = (st0, xs)</span></span></span><br><span><var>st1</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod (map trans (snd (st1, x :: xs))) =\nmul (trans x) (prod (map trans (snd (st0, xs))))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk163\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk163\"><span class=\"kn\">Lemma</span> <span class=\"nf\">transN_step</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> :\n  scale (<span class=\"mi\">2</span>^(Z.of_nat n)) (fg (fst (stepN n st))) = ap (transN n st) (fg st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) =\nap (transN n st) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk164\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk164\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) =\nap (transN n st) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk165\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk165\"><span class=\"nb\">induction</span> n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">0</span>) (fg (fst (stepN <span class=\"mi\">0</span> st))) =\nap (transN <span class=\"mi\">0</span> st) (fg st)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk166\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) = ap (transN n st) (fg st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk166\"><hr></label><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (fg (fst (stepN (S n) st))) =\nap (transN (S n) st) (fg st)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk167\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk167\"><span class=\"nb\">rewrite</span> Z.pow_0_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale <span class=\"mi\">1</span> (fg (fst (stepN <span class=\"mi\">0</span> st))) =\nap (transN <span class=\"mi\">0</span> st) (fg st)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk168\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) = ap (transN n st) (fg st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk168\"><hr></label><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (fg (fst (stepN (S n) st))) =\nap (transN (S n) st) (fg st)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk169\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk169\"><span class=\"nb\">destruct</span> st; <span class=\"nb\">unfold</span> scale, fg, ap; <span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>delta0, f0, g0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>oddF0</var><span class=\"hyp-type\"><b>: </b><span>Zodd f0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{| x := <span class=\"mi\">1</span> * f0; y := <span class=\"mi\">1</span> * g0 |} =\n{| x := <span class=\"mi\">1</span> * f0 + <span class=\"mi\">0</span> * g0; y := <span class=\"mi\">0</span> * f0 + <span class=\"mi\">1</span> * g0 |}</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk16a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) =\nap (transN n st) (fg st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk16a\"><hr></label><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (fg (fst (stepN (S n) st))) =\nap (transN (S n) st) (fg st)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk16b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk16b\"><span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) = ap (transN n st) (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (fg (fst (stepN (S n) st))) =\nap (transN (S n) st) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk16c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk16c\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.pow_succ_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) = ap (transN n st) (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN (S n) st))) =\nap (transN (S n) st) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk16d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk16d\"><span class=\"nb\">unfold</span> transN <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) =\nap (prod (map trans (snd (stepN n st)))) (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN (S n) st))) =\nap (prod (map trans (snd (stepN (S n) st)))) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk16e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk16e\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg (fst (stepN n st))) =\nap (prod (map trans (snd (stepN n st)))) (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)\n  (fg\n     (fst\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\nap\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n            <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))))\n  (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk16f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk16f\"><span class=\"nb\">destruct</span> (stepN n st) <span class=\"kr\">as</span> [st0 xs]; <span class=\"nb\">simpl</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg st0) = ap (prod (map trans xs)) (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)\n  (fg\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\nap\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))))\n  (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk170\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk170\"><span class=\"nb\">assert</span> (Htrans := trans_step st0).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg st0) = ap (prod (map trans xs)) (fg st)</span></span></span><br><span><var>Htrans</var><span class=\"hyp-type\"><b>: </b><span>scale <span class=\"mi\">2</span> (fg (fst (step st0))) =\nap (trans (snd (step st0))) (fg st0)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)\n  (fg\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\nap\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))))\n  (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk171\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk171\"><span class=\"nb\">destruct</span> (step st0) <span class=\"kr\">as</span> [st1 x]; <span class=\"nb\">simpl</span> <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg st0) = ap (prod (map trans xs)) (fg st)</span></span></span><br><span><var>st1</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Htrans</var><span class=\"hyp-type\"><b>: </b><span>scale <span class=\"mi\">2</span> (fg st1) = ap (trans x) (fg st0)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) (fg st1) =\nap (mul (trans x) (prod (map trans xs))) (fg st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk172\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk172\"><span class=\"nb\">rewrite</span> ap_mul, &lt;- IHn, ap_scale, Z.mul_comm, scale_mul <span class=\"bp\">by</span> <span class=\"nb\">auto</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg st0) = ap (prod (map trans xs)) (fg st)</span></span></span><br><span><var>st1</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Htrans</var><span class=\"hyp-type\"><b>: </b><span>scale <span class=\"mi\">2</span> (fg st1) = ap (trans x) (fg st0)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (scale <span class=\"mi\">2</span> (fg st1)) =\nscale (<span class=\"mi\">2</span> ^ Z.of_nat n) (ap (trans x) (fg st0))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk173\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk173\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, st0</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>xs</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n) (fg st0) = ap (prod (map trans xs)) (fg st)</span></span></span><br><span><var>st1</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br><span><var>Htrans</var><span class=\"hyp-type\"><b>: </b><span>scale <span class=\"mi\">2</span> (fg st1) = ap (trans x) (fg st0)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">scale <span class=\"mi\">2</span> (fg st1) = ap (trans x) (fg st0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Htrans.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk174\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk174\"><span class=\"kn\">Lemma</span> <span class=\"nf\">det_transN</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : det (transN n st) = <span class=\"mi\">2</span>^(Z.of_nat n).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (transN n st) = <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk175\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk175\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (transN n st) = <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk176\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk176\"><span class=\"nb\">revert</span> st.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">st</span> : State, det (transN n st) = <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk177\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk177\"><span class=\"nb\">induction</span> n; <span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st</span> : State, det (transN n st) = <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">st</span> : State,\ndet (transN (S n) st) = <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk178\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk178\"><span class=\"nb\">intros</span> st.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st</span> : State, det (transN n st) = <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (transN (S n) st) = <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk179\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk179\"><span class=\"nb\">destruct</span> (transN_S n st) <span class=\"kr\">as</span> [x -&gt;].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st</span> : State, det (transN n st) = <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">det (mul (trans x) (transN n st)) = <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk17a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk17a\"><span class=\"nb\">rewrite</span> det_mul, det_trans, Nat2Z.inj_succ, Z.pow_succ_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">st</span> : State, det (transN n st) = <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> * det (transN n st) = <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">congruence</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk17b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk17b\"><span class=\"kn\">Lemma</span> <span class=\"nf\">bounded_transN</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : bounded (<span class=\"mi\">2</span>^(Z.of_nat n)) (transN n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded (<span class=\"mi\">2</span> ^ Z.of_nat n) (transN n st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk17c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk17c\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded (<span class=\"mi\">2</span> ^ Z.of_nat n) (transN n st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk17d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk17d\"><span class=\"nb\">induction</span> n; <span class=\"kp\">try</span> <span class=\"nb\">apply</span> bounded_I.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>bounded (<span class=\"mi\">2</span> ^ Z.of_nat n) (transN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) (transN (S n) st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk17e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk17e\"><span class=\"nb\">destruct</span> (transN_S n st) <span class=\"kr\">as</span> [x -&gt;].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>bounded (<span class=\"mi\">2</span> ^ Z.of_nat n) (transN n st)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded (<span class=\"mi\">2</span> ^ Z.of_nat (S n))\n  (mul (trans x) (transN n st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk17f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk17f\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.pow_succ_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>bounded (<span class=\"mi\">2</span> ^ Z.of_nat n) (transN n st)</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Step</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">bounded (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n)\n  (mul (trans x) (transN n st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto using</span> bounded_mul_trans.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk180\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk180\"><span class=\"kn\">Lemma</span> <span class=\"nf\">transN_stepN</span> (<span class=\"nv\">n</span> <span class=\"nv\">m</span> : nat) (<span class=\"nv\">st</span> : State) :\n  mul (transN n (fst (stepN m st))) (transN m st) = transN (n + m) st.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (transN n (fst (stepN m st))) (transN m st) =\ntransN (n + m) st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk181\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk181\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (transN n (fst (stepN m st))) (transN m st) =\ntransN (n + m) st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk182\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk182\"><span class=\"nb\">unfold</span> transN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod (map trans (snd (stepN n (fst (stepN m st))))))\n  (prod (map trans (snd (stepN m st)))) =\nprod (map trans (snd (stepN (n + m) st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk183\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk183\"><span class=\"nb\">rewrite</span> stepN_app_snd, map_app, prod_app.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n, m</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod (map trans (snd (stepN n (fst (stepN m st))))))\n  (prod (map trans (snd (stepN m st)))) =\nmul\n  (prod (map trans (snd (stepN n (fst (stepN m st))))))\n  (prod (map trans (snd (stepN m st))))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk184\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk184\"><span class=\"kn\">Lemma</span> <span class=\"nf\">transHs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : (<span class=\"mi\">2</span>^(Z.of_nat n) | g st) -&gt;\n  transN n st = {| u := <span class=\"mi\">2</span>^(Z.of_nat n); v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ntransN n st =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk185\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk185\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ntransN n st =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk186\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk186\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">intros</span>; <span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ntransN n st = {| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | g st) -&gt;\ntransN (S n) st =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk187\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk187\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.pow_succ_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ntransN n st = {| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ntransN (S n) st =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk188\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk188\"><span class=\"nb\">intros</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\ntransN n st = {| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN (S n) st =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk189\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk189\"><span class=\"nb\">unfold</span> transN <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (stepN n st))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod (map trans (snd (stepN (S n) st))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk18a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk18a\"><span class=\"nb\">simpl</span> (snd _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (stepN n st))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk18b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk18b\"><span class=\"nb\">assert</span> (Hg&#39; : (<span class=\"mi\">2</span> ^ Z.of_nat n | g st)) <span class=\"bp\">by</span> (<span class=\"nb\">etransitivity</span>;[|<span class=\"nb\">apply</span> Hg]; <span class=\"nb\">auto with</span> *).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (stepN n st))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk18c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk18c\"><span class=\"nb\">apply</span> Zdivide_mod <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (stepN n st))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) = <span class=\"mi\">0</span></span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk18d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk18d\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> (<span class=\"kr\">fun</span> <span class=\"nv\">x</span> =&gt; x / <span class=\"mi\">2</span> ^ (Z.of_nat n))) <span class=\"kr\">in</span> Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (stepN n st))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g st mod (<span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n) / <span class=\"mi\">2</span> ^ Z.of_nat n =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk18e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk18e\"><span class=\"nb\">rewrite</span> Z.mul_comm, Z.rem_mul_r, Z.mul_comm, Z_div_plus_full, Z.mod_div, Z.add_0_l <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (stepN n st))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(g st / <span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> =\n<span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk18f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk18f\"><span class=\"nb\">rewrite</span> &lt;- gHs <span class=\"kr\">in</span> Hg <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (stepN n st))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (stepN n st)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd\n        (<span class=\"kr\">let</span> (<span class=\"nv\">st0</span>, xs) := stepN n st <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st0 <span class=\"kr\">in</span> (st1, x :: xs)))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk190\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk190\"><span class=\"nb\">destruct</span> (stepN n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (s, l))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)))) =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk191\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk191\"><span class=\"nb\">transitivity</span> (mul (trans Step.H) {| u := <span class=\"mi\">2</span>^(Z.of_nat n); v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (s, l))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)))) =\nmul (trans Step.H)\n  {| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk192\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (s, l))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk192\"><hr></label><div class=\"goal-conclusion\">mul (trans Step.H)\n  {| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |} =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk193\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk193\"><span class=\"mi\">2</span>:<span class=\"nb\">unfold</span> mul;<span class=\"nb\">cbn</span>;<span class=\"nb\">f_equal</span>; <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (s, l))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)))) =\nmul (trans Step.H)\n  {| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk194\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk194\"><span class=\"nb\">rewrite</span> &lt;- IHn <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st, s</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod (map trans (snd (s, l))) =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>g (fst (s, l)) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step s <span class=\"kr\">in</span> (st1, x :: l)))) =\nmul (trans Step.H) (prod (map trans (snd (s, l))))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk195\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk195\"><span class=\"nb\">destruct</span> (spec s);\n<span class=\"nb\">simpl</span> <span class=\"kr\">in</span> Hg;\n<span class=\"kp\">try</span> <span class=\"kp\">solve</span> [<span class=\"nb\">rewrite</span> Zmod_odd, Z.add_comm, Z.odd_add_mul_2 <span class=\"kr\">in</span> Hg;\n           <span class=\"bp\">discriminate</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list Step</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st) -&gt;\nprod\n(map trans\n(snd\n({|\ndelta := d;\nf := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\ng := <span class=\"mi\">2</span> * g&#39;;\noddF := Zodd_2p_plus_1 f&#39;\n|}, l))) = {| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := <span class=\"mi\">0</span>; r := <span class=\"mi\">1</span> |}</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> * g&#39;) mod <span class=\"mi\">2</span> = <span class=\"mi\">0</span> / <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prod\n  (map trans\n     (snd\n        ({|\n           delta := INC + d;\n           f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n           g := g&#39;;\n           oddF := Zodd_2p_plus_1 f&#39;\n         |}, Step.H :: l))) =\nmul (trans Step.H)\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := <span class=\"mi\">2</span> * g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, l))))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk196\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk196\"><span class=\"kn\">Lemma</span> <span class=\"nf\">transSs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : delta st &lt;= <span class=\"mi\">0</span> -&gt; Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st -&gt;\n  transN n st = {| u := <span class=\"mi\">2</span>^(Z.of_nat n); v := <span class=\"mi\">0</span>;\n    q := (modInv (-f st) (<span class=\"mi\">2</span>^(Z.of_nat n)) * g st) mod (<span class=\"mi\">2</span>^(Z.of_nat n)); r := <span class=\"mi\">1</span> |}.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta st &lt;= <span class=\"mi\">0</span> -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> - delta st -&gt;\ntransN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk197\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk197\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta st &lt;= <span class=\"mi\">0</span> -&gt;\nZ.of_nat n &lt;= <span class=\"mi\">1</span> - delta st -&gt;\ntransN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk198\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk198\"><span class=\"nb\">intros</span> Hdelta Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk199\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk199\"><span class=\"nb\">assert</span> (Hrel_prime : rel_prime (f st) <span class=\"mi\">2</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st) <span class=\"mi\">2</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk19a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk19a\"><hr></label><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk19b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk19b\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk19c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk19c\"><span class=\"nb\">apply</span> rel_prime_mod_rev; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st mod <span class=\"mi\">2</span>) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk19d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk19d\"><span class=\"nb\">assert</span> (Hfodd := oddF st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hfodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (f st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st mod <span class=\"mi\">2</span>) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk19e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk19e\"><span class=\"nb\">apply</span> &lt;- Zodd_bool_iff <span class=\"kr\">in</span> Hfodd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hfodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd (f st) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st mod <span class=\"mi\">2</span>) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk19f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk19f\"><span class=\"nb\">rewrite</span> Zmod_odd, Hfodd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hfodd</var><span class=\"hyp-type\"><b>: </b><span>Z.odd (f st) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime <span class=\"mi\">1</span> <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> rel_prime_1.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a0\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a1\"><span class=\"nb\">assert</span> (Hgcd : <span class=\"kr\">forall</span> <span class=\"nv\">x</span>, <span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z, <span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1a2\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1a2\"><hr></label><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a3\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z, <span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a4\"><span class=\"nb\">intros</span> x Hx.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a5\"><span class=\"nb\">apply</span> Zgcd_1_rel_prime.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st) (<span class=\"mi\">2</span> ^ x)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a6\"><span class=\"nb\">apply</span> Zpow_facts.rel_prime_Zpower_r; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hx</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a7\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1a8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1a8\"><span class=\"nb\">replace</span> ((modInv (-f st) (<span class=\"mi\">2</span> ^ Z.of_nat n)\n                     * g st) mod <span class=\"mi\">2</span> ^ Z.of_nat n)\n <span class=\"kr\">with</span> ((-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n)\n                     * g st) mod <span class=\"mi\">2</span> ^ Z.of_nat n).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1a9\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1a9\"><hr></label><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n(modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1aa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1aa\"><span class=\"mi\">2</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n(modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ab\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ab\"><span class=\"nb\">apply</span> Zmult_eqm;[|<span class=\"bp\">reflexivity</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm (<span class=\"mi\">2</span> ^ Z.of_nat n)\n  (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n))\n  (modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ac\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ac\"><span class=\"nb\">unfold</span> eqm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n =\nmodInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ad\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ad\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n =\n- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ae\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ae\"><span class=\"nb\">rewrite</span> &lt;- (Z.mul_1_l (modInv _ _)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">1</span> * modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n))\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1af\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1af\"><span class=\"nb\">rewrite</span> &lt;- (Hgcd (Z.of_nat n)), &lt;- Zmult_mod_idemp_l, &lt;- modInv_mul_l, Zmult_mod_idemp_l, &lt;- Z.mul_assoc <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) *\n (f st * modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n)))\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b0\"><span class=\"nb\">rewrite</span> &lt;- (Z.opp_involutive (f st)) <span class=\"nb\">at</span> <span class=\"mi\">2</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) *\n (- - f st * modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n)))\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b1\"><span class=\"nb\">rewrite</span> Z.mul_opp_l, Z.mul_opp_r, &lt;- Z.mul_opp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) *\n (- f st * modInv (- f st) (<span class=\"mi\">2</span> ^ Z.of_nat n)))\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b2\"><span class=\"nb\">rewrite</span> &lt;- Zmult_mod_idemp_r, modInv_mul_r, Z.gcd_opp_l, Hgcd, Zmult_mod_idemp_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * <span class=\"mi\">1</span>)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b3\"><span class=\"nb\">rewrite</span> Z.mul_1_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n =\n- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) mod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b4\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b5\"><span class=\"nb\">set</span> (w := _ mod _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b6\"><span class=\"nb\">apply</span> proj1 <span class=\"kr\">with</span> ( (<span class=\"mi\">2</span>^(Z.of_nat n) | f st * w + g st)\n                /\\ (delta (fst (stepN n st)) = Z.of_nat n + delta st)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w + g st) /\\\ndelta (fst (stepN n st)) = Z.of_nat n + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b7\"><span class=\"nb\">revert</span> w Hn; <span class=\"nb\">induction</span> n; <span class=\"nb\">intros</span> w Hn;\n[<span class=\"kp\">repeat</span> <span class=\"nb\">split</span>;[<span class=\"nb\">unfold</span> w;<span class=\"nb\">rewrite</span> Z.mod_1_r;<span class=\"bp\">reflexivity</span>|<span class=\"nb\">apply</span> Z.divide_1_l]|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">let</span> <span class=\"nv\">w</span> :=\n  (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n  mod <span class=\"mi\">2</span> ^ Z.of_nat n <span class=\"kr\">in</span>\nZ.of_nat n &lt;= <span class=\"mi\">1</span> - delta st -&gt;\ntransN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span>\n|} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w + g st) /\\\ndelta (fst (stepN n st)) = Z.of_nat n + delta st</span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN (S n) st =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta (fst (stepN (S n) st)) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b8\"><span class=\"nb\">destruct</span> IHn <span class=\"kr\">as</span> [IHn1 [IHn2 IHn3]];[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN (S n) st =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta (fst (stepN (S n) st)) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1b9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1b9\"><span class=\"nb\">rewrite</span> &lt;- (transN_stepN <span class=\"mi\">1</span> n), IHn1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (transN <span class=\"mi\">1</span> (fst (stepN n st)))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta (fst (stepN (S n) st)) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ba\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ba\"><span class=\"nb\">change</span> (stepN (S n) st) <span class=\"kr\">with</span> (stepN (<span class=\"mi\">1</span> + n) st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (transN <span class=\"mi\">1</span> (fst (stepN n st)))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta (fst (stepN (<span class=\"mi\">1</span> + n) st)) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1bb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1bb\"><span class=\"nb\">rewrite</span> stepN_app.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (transN <span class=\"mi\">1</span> (fst (stepN n st)))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     (<span class=\"kr\">let</span> <span class=\"nv\">st1</span> := stepN n st <span class=\"kr\">in</span>\n      (fst (stepN <span class=\"mi\">1</span> (fst st1)),\n       snd (stepN <span class=\"mi\">1</span> (fst st1)) ++ snd st1))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1bc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1bc\"><span class=\"nb\">unfold</span> transN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod (map trans (snd (stepN <span class=\"mi\">1</span> (fst (stepN n st))))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     (fst (stepN <span class=\"mi\">1</span> (fst (stepN n st))),\n      snd (stepN <span class=\"mi\">1</span> (fst (stepN n st))) ++\n      snd (stepN n st))) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1bd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1bd\"><span class=\"nb\">simpl</span> (fst (_,_)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod (map trans (snd (stepN <span class=\"mi\">1</span> (fst (stepN n st))))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step (fst (stepN n st)) <span class=\"kr\">in</span>\n      (st1, x :: nil))) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1be\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1be\"><span class=\"nb\">simpl</span> (stepN <span class=\"mi\">1</span> _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step (fst (stepN n st)) <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step (fst (stepN n st)) <span class=\"kr\">in</span>\n      (st1, x :: nil))) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1bf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1bf\"><span class=\"nb\">set</span> (st&#39; := fst _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: nil))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c0\"><span class=\"nb\">assert</span> (Hst&#39; := eq_refl st&#39;).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>st&#39; = st&#39;</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: nil))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c1\"><span class=\"nb\">revert</span> Hst&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">st&#39; = st&#39; -&gt;\nmul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: nil))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c2\"><span class=\"nb\">unfold</span> st&#39; <span class=\"nb\">at</span> <span class=\"mi\">2</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">st&#39; = fst (stepN n st) -&gt;\nmul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: nil))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c3\"><span class=\"nb\">assert</span> (Hbound : <span class=\"kr\">forall</span> <span class=\"nv\">a</span>, <span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n) <span class=\"bp\">by</span>\n <span class=\"nb\">auto using</span> Z.mod_pos_bound <span class=\"kr\">with</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">st&#39; = fst (stepN n st) -&gt;\nmul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: nil))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c4\"><span class=\"nb\">assert</span> (Hdivide: (<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1c5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1c5\"><hr></label><div class=\"goal-conclusion\">st&#39; = fst (stepN n st) -&gt;\nmul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: nil))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c6\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c7\"><span class=\"nb\">apply</span> Z.mod_divide; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(f st * w + g st) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c8\"><span class=\"nb\">unfold</span> w.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(f st *\n ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\n  mod <span class=\"mi\">2</span> ^ Z.of_nat (S n)) + g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1c9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1c9\"><span class=\"nb\">rewrite</span> &lt;- Zplus_mod_idemp_l, Zmult_mod_idemp_r, Z.mul_assoc,\n          Z.mul_opp_r, Z.mul_opp_l, &lt;-Z.mul_opp_r,\n          &lt;- Zmult_mod_idemp_l, modInv_mul_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((Z.gcd (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n))\n  mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) * - g st)\n mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) + g st) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) =\n<span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ca\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ca\"><span class=\"nb\">replace</span> (Z.gcd _ _) <span class=\"kr\">with</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) * - g st)\n mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) + g st) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) =\n<span class=\"mi\">0</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1cb\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1cb\"><hr></label><div class=\"goal-conclusion\"><span class=\"mi\">1</span> = Z.gcd (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1cc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1cc\"><span class=\"mi\">2</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> = Z.gcd (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1cd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1cd\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.gcd (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) = <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ce\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ce\"><span class=\"nb\">apply</span> Zgcd_1_rel_prime.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> \n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1cf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1cf\"><span class=\"nb\">apply</span> Zpow_facts.rel_prime_Zpower_r; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (f st) <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d0\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) * - g st)\n mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) + g st) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) =\n<span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d1\"><span class=\"nb\">rewrite</span> Zmult_mod_idemp_l, Zplus_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">1</span> * - g st + g st) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d2\"><span class=\"nb\">ring_simplify</span> (<span class=\"mi\">1</span> * -g st + g st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d3\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">st&#39; = fst (stepN n st) -&gt;\nmul\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span>\n            (st1, x :: nil)))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st&#39; <span class=\"kr\">in</span> (st1, x :: nil))) =\nZ.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d4\"><span class=\"nb\">elim</span> (spec);<span class=\"nb\">intros</span> d f&#39; g&#39; Hst&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.H :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: nil)) = Z.of_nat (S n) + delta st</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1d5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := Z.pos d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1d5\"><hr></label><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC - Z.pos d;\n              f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; - f&#39;;\n              oddF := Zodd_2p_plus_1 g&#39;\n            |}, Step.D :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC - Z.pos d;\n        f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; - f&#39;;\n        oddF := Zodd_2p_plus_1 g&#39;\n      |}, Step.D :: nil)) = \nZ.of_nat (S n) + delta st</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1d6\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1d6\"><hr></label><div class=\"goal-conclusion\">{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st) -&gt;\nmul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.S :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.S :: nil)) = \nZ.of_nat (S n) + delta st</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d7\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.H :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: nil)) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1d8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1d8\"><span class=\"kp\">repeat</span> <span class=\"nb\">split</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.H :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |}</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1d9\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1d9\"><hr></label><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1da\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1da\"><hr></label><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: nil)) = \nZ.of_nat (S n) + delta st</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1db\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1db\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.H :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1dc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1dc\"><span class=\"nb\">replace</span> (Z.of_nat (S n)) <span class=\"kr\">with</span> (<span class=\"mi\">1</span> + Z.of_nat n) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.H :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{|\n  u := <span class=\"mi\">2</span> ^ (<span class=\"mi\">1</span> + Z.of_nat n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1dd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1dd\"><span class=\"nb\">rewrite</span> Z.pow_add_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.H :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{|\n  u := <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1de\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1de\"><span class=\"nb\">unfold</span> mul; <span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{|\n  u :=\n    <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n +\n    <span class=\"mi\">0</span> *\n    ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n     mod <span class=\"mi\">2</span> ^ Z.of_nat n);\n  v := <span class=\"mi\">0</span>;\n  q :=\n    <span class=\"mi\">0</span> * <span class=\"mi\">2</span> ^ Z.of_nat n +\n    <span class=\"mi\">1</span> *\n    ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n     mod <span class=\"mi\">2</span> ^ Z.of_nat n);\n  r := <span class=\"mi\">1</span>\n|} =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1df\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1df\"><span class=\"nb\">f_equal</span>; <span class=\"kp\">try</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> * <span class=\"mi\">2</span> ^ Z.of_nat n +\n<span class=\"mi\">1</span> *\n((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n mod <span class=\"mi\">2</span> ^ Z.of_nat n) = w</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e0\"><span class=\"nb\">ring_simplify</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n = w</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e1\"><span class=\"nb\">unfold</span> w.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e2\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) =\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e3\"><span class=\"nb\">apply</span> Zdivide_mod_minus.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk1e4\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk1e4\"><hr></label><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n)\n| - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n  (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n  mod <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e5\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e6\"><span class=\"nb\">specialize</span> (Hbound ((-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e7\"><span class=\"nb\">replace</span> (Z.of_nat (S n)) <span class=\"kr\">with</span> (<span class=\"mi\">1</span> + Z.of_nat n) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ (<span class=\"mi\">1</span> + Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Z.pow_add_r; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e8\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n)\n| - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n  (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n  mod <span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1e9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1e9\"><span class=\"nb\">set</span> (w0 := (-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st) mod <span class=\"mi\">2</span> ^ Z.of_nat n) <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n)\n| - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st - w0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ea\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ea\"><span class=\"nb\">apply</span> Z.mod_divide; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st - w0)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1eb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1eb\"><span class=\"nb\">rewrite</span> &lt;- Zminus_mod_idemp_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n w0 mod <span class=\"mi\">2</span> ^ Z.of_nat (S n)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ec\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ec\"><span class=\"nb\">replace</span> w0 <span class=\"kr\">with</span> (<span class=\"mi\">1</span> * w0) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n (<span class=\"mi\">1</span> * w0) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n))\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ed\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ed\"><span class=\"nb\">rewrite</span> &lt;- Zmult_mod_idemp_l, &lt;- (Hgcd (Z.of_nat (S n))) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n (Z.gcd (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n))\n  mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) * w0) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n))\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ee\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ee\"><span class=\"nb\">rewrite</span> &lt;- modInv_mul_l, Zmult_mod_idemp_l, Zminus_mod_idemp_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * f st * w0)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ef\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ef\"><span class=\"nb\">replace</span> (-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st\n       - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n))\n       * f st\n       * w0) <span class=\"kr\">with</span>\n       (-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n        (w0 * f st + <span class=\"mi\">1</span> * g st))\n       <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (w0 * f st + <span class=\"mi\">1</span> * g st)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f0\"><span class=\"nb\">assert</span> (HtransN := transN_step n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>HtransN</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n)\n  (fg (fst (stepN n st))) =\nap (transN n st) (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (w0 * f st + <span class=\"mi\">1</span> * g st)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f1\"><span class=\"nb\">rewrite</span> &lt;- Hst&#39;, IHn1 <span class=\"kr\">in</span> HtransN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>HtransN</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n)\n  (fg\n     {|\n       delta := d;\n       f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       g := <span class=\"mi\">2</span> * g&#39;;\n       oddF := Zodd_2p_plus_1 f&#39;\n     |}) =\nap\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q := w0;\n    r := <span class=\"mi\">1</span>\n  |} (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (w0 * f st + <span class=\"mi\">1</span> * g st)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f2\"><span class=\"nb\">unfold</span> fg, scale, ap <span class=\"kr\">in</span> HtransN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>HtransN</var><span class=\"hyp-type\"><b>: </b><span>{|\n  x :=\n    <span class=\"mi\">2</span> ^ Z.of_nat n *\n    x\n      {|\n        x :=\n          f\n            {|\n              delta := d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := <span class=\"mi\">2</span> * g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |};\n        y :=\n          g\n            {|\n              delta := d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := <span class=\"mi\">2</span> * g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}\n      |};\n  y :=\n    <span class=\"mi\">2</span> ^ Z.of_nat n *\n    y\n      {|\n        x :=\n          f\n            {|\n              delta := d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := <span class=\"mi\">2</span> * g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |};\n        y :=\n          g\n            {|\n              delta := d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := <span class=\"mi\">2</span> * g&#39;;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}\n      |}\n|} =\n{|\n  x :=\n    u\n      {|\n        u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n        v := <span class=\"mi\">0</span>;\n        q := w0;\n        r := <span class=\"mi\">1</span>\n      |} * x {| x := f st; y := g st |} +\n    v\n      {|\n        u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n        v := <span class=\"mi\">0</span>;\n        q := w0;\n        r := <span class=\"mi\">1</span>\n      |} * y {| x := f st; y := g st |};\n  y :=\n    q\n      {|\n        u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n        v := <span class=\"mi\">0</span>;\n        q := w0;\n        r := <span class=\"mi\">1</span>\n      |} * x {| x := f st; y := g st |} +\n    r\n      {|\n        u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n        v := <span class=\"mi\">0</span>;\n        q := w0;\n        r := <span class=\"mi\">1</span>\n      |} * y {| x := f st; y := g st |}\n|}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (w0 * f st + <span class=\"mi\">1</span> * g st)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f3\"><span class=\"nb\">simpl</span> <span class=\"kr\">in</span> HtransN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>HtransN</var><span class=\"hyp-type\"><b>: </b><span>{|\n  x := <span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>);\n  y := <span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;)\n|} =\n{|\n  x := <span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st;\n  y := w0 * f st + <span class=\"mi\">1</span> * g st\n|}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (w0 * f st + <span class=\"mi\">1</span> * g st)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f4\"><span class=\"nb\">injection</span> HtransN; <span class=\"nb\">clear</span> HtransN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;) = w0 * f st + <span class=\"mi\">1</span> * g st -&gt;\n<span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st -&gt;\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (w0 * f st + <span class=\"mi\">1</span> * g st)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f5\"><span class=\"nb\">intros</span> Hg&#39; Hf&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;) = w0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (w0 * f st + <span class=\"mi\">1</span> * g st)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f6\"><span class=\"nb\">rewrite</span> &lt;- Hg&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;) = w0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;))) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) =\n<span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f7\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;)) <span class=\"kr\">with</span> (g&#39; * (<span class=\"mi\">2</span> ^ Z.of_nat n * <span class=\"mi\">2</span>^<span class=\"mi\">1</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;) = w0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (g&#39; * (<span class=\"mi\">2</span> ^ Z.of_nat n * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>)))\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f8\"><span class=\"nb\">rewrite</span> &lt;- Z.pow_add_r, Z.mul_assoc <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;) = w0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g&#39; *\n <span class=\"mi\">2</span> ^ (Z.of_nat n + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1f9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1f9\"><span class=\"nb\">replace</span> (Z.of_nat n + <span class=\"mi\">1</span>) <span class=\"kr\">with</span> (Z.of_nat (S n)) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39;) = w0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g&#39; *\n <span class=\"mi\">2</span> ^ Z.of_nat (S n)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Z_mod_mult.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1fa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1fa\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1fb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1fb\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: nil)) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1fc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1fc\"><span class=\"nb\">replace</span> (Z.of_nat (S n) + delta st)\n    <span class=\"kr\">with</span> (<span class=\"mi\">1</span> + (Z.of_nat n + delta st)) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: nil)) =\n<span class=\"mi\">1</span> + (Z.of_nat n + delta st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1fd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1fd\"><span class=\"nb\">rewrite</span> &lt;- IHn3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39;;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.H :: nil)) =\n<span class=\"mi\">1</span> + delta (fst (stepN n st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1fe\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1fe\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">INC + d = <span class=\"mi\">1</span> + delta (fst (stepN n st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk1ff\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk1ff\"><span class=\"nb\">rewrite</span> &lt;- Hst&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39;;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">INC + d =\n<span class=\"mi\">1</span> +\ndelta\n  {|\n    delta := d;\n    f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * g&#39;;\n    oddF := Zodd_2p_plus_1 f&#39;\n  |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk200\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk200\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := Z.pos d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC - Z.pos d;\n              f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; - f&#39;;\n              oddF := Zodd_2p_plus_1 g&#39;\n            |}, Step.D :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC - Z.pos d;\n        f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; - f&#39;;\n        oddF := Zodd_2p_plus_1 g&#39;\n      |}, Step.D :: nil)) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk201\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk201\"><span class=\"nb\">rewrite</span> &lt;- Hst&#39; <span class=\"kr\">in</span> IHn3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta\n  {|\n    delta := Z.pos d;\n    f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 f&#39;\n  |} = Z.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := Z.pos d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC - Z.pos d;\n              f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; - f&#39;;\n              oddF := Zodd_2p_plus_1 g&#39;\n            |}, Step.D :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC - Z.pos d;\n        f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; - f&#39;;\n        oddF := Zodd_2p_plus_1 g&#39;\n      |}, Step.D :: nil)) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk202\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk202\"><span class=\"nb\">unfold</span> delta <span class=\"nb\">at</span> <span class=\"mi\">1</span> <span class=\"kr\">in</span> IHn3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>Z.pos d = Z.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := Z.pos d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC - Z.pos d;\n              f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; - f&#39;;\n              oddF := Zodd_2p_plus_1 g&#39;\n            |}, Step.D :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC - Z.pos d;\n        f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; - f&#39;;\n        oddF := Zodd_2p_plus_1 g&#39;\n      |}, Step.D :: nil)) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk203\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk203\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st) -&gt;\nmul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.S :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |} /\\\n(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st) /\\\ndelta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.S :: nil)) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk204\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk204\"><span class=\"kp\">repeat</span> <span class=\"nb\">split</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.S :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |}</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk205\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk205\"><hr></label><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk206\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk206\"><hr></label><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.S :: nil)) = \nZ.of_nat (S n) + delta st</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk207\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk207\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.S :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{| u := <span class=\"mi\">2</span> ^ Z.of_nat (S n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk208\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk208\"><span class=\"nb\">replace</span> (Z.of_nat (S n)) <span class=\"kr\">with</span> (<span class=\"mi\">1</span> + Z.of_nat n) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.S :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{|\n  u := <span class=\"mi\">2</span> ^ (<span class=\"mi\">1</span> + Z.of_nat n); v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk209\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk209\"><span class=\"nb\">rewrite</span> Z.pow_add_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (prod\n     (map trans\n        (snd\n           ({|\n              delta := INC + d;\n              f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n              g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n              oddF := Zodd_2p_plus_1 f&#39;\n            |}, Step.S :: nil))))\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n      mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n    r := <span class=\"mi\">1</span>\n  |} =\n{|\n  u := <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span>\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk20a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk20a\"><span class=\"nb\">unfold</span> mul; <span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{|\n  u :=\n    <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n +\n    <span class=\"mi\">0</span> *\n    ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n     mod <span class=\"mi\">2</span> ^ Z.of_nat n);\n  v := <span class=\"mi\">0</span>;\n  q :=\n    <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ Z.of_nat n +\n    <span class=\"mi\">1</span> *\n    ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n     mod <span class=\"mi\">2</span> ^ Z.of_nat n);\n  r := <span class=\"mi\">1</span>\n|} =\n{| u := <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w; r := <span class=\"mi\">1</span> |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk20b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk20b\"><span class=\"nb\">f_equal</span>; <span class=\"kp\">try</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ Z.of_nat n +\n<span class=\"mi\">1</span> *\n((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n mod <span class=\"mi\">2</span> ^ Z.of_nat n) = w</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk20c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk20c\"><span class=\"nb\">ring_simplify</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ Z.of_nat n +\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n = w</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk20d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk20d\"><span class=\"nb\">unfold</span> w.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ Z.of_nat n +\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n =\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk20e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk20e\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) =\n<span class=\"mi\">2</span> ^ Z.of_nat n +\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk20f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk20f\"><span class=\"nb\">apply</span> Zdivide_mod_minus.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n<span class=\"mi\">2</span> ^ Z.of_nat n +\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk210\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk210\"><hr></label><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n)\n| - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n  (<span class=\"mi\">2</span> ^ Z.of_nat n +\n   (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk211\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk211\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n<span class=\"mi\">2</span> ^ Z.of_nat n +\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk212\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk212\"><span class=\"nb\">specialize</span> (Hbound ((-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n<span class=\"mi\">2</span> ^ Z.of_nat n +\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk213\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk213\"><span class=\"nb\">replace</span> (Z.of_nat (S n)) <span class=\"kr\">with</span> (<span class=\"mi\">1</span> + Z.of_nat n) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;=\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\n<span class=\"mi\">2</span> ^ Z.of_nat n +\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ (<span class=\"mi\">1</span> + Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Z.pow_add_r; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk214\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk214\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n)\n| - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n  (<span class=\"mi\">2</span> ^ Z.of_nat n +\n   (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk215\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk215\"><span class=\"nb\">set</span> (w0 := (-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st) mod <span class=\"mi\">2</span> ^ Z.of_nat n) <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n)\n| - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n  (<span class=\"mi\">2</span> ^ Z.of_nat n + w0))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk216\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk216\"><span class=\"nb\">apply</span> Z.mod_divide; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n (<span class=\"mi\">2</span> ^ Z.of_nat n + w0)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk217\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk217\"><span class=\"nb\">rewrite</span> &lt;- Zminus_mod_idemp_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n (<span class=\"mi\">2</span> ^ Z.of_nat n + w0) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n))\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk218\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk218\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> ^ Z.of_nat n + w0) <span class=\"kr\">with</span> (<span class=\"mi\">1</span> * (<span class=\"mi\">2</span> ^ Z.of_nat n + w0)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n (<span class=\"mi\">1</span> * (<span class=\"mi\">2</span> ^ Z.of_nat n + w0)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n))\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk219\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk219\"><span class=\"nb\">rewrite</span> &lt;- Zmult_mod_idemp_l, &lt;- (Hgcd (Z.of_nat (S n))) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n (Z.gcd (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n))\n  mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) * (<span class=\"mi\">2</span> ^ Z.of_nat n + w0))\n mod <span class=\"mi\">2</span> ^ Z.of_nat (S n)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk21a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk21a\"><span class=\"nb\">rewrite</span> &lt;- modInv_mul_l, Zmult_mod_idemp_l, Zminus_mod_idemp_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st -\n modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * f st *\n (<span class=\"mi\">2</span> ^ Z.of_nat n + w0)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk21b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk21b\"><span class=\"nb\">replace</span> (-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st\n   - modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * f st\n       * (<span class=\"mi\">2</span> ^ Z.of_nat n + w0)) <span class=\"kr\">with</span>\n       (-modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n        (<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st + (w0 * f st + <span class=\"mi\">1</span> * g st)))\n       <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st +\n  (w0 * f st + <span class=\"mi\">1</span> * g st))) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk21c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk21c\"><span class=\"nb\">assert</span> (HtransN := transN_step n st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>HtransN</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n)\n  (fg (fst (stepN n st))) =\nap (transN n st) (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st +\n  (w0 * f st + <span class=\"mi\">1</span> * g st))) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk21d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk21d\"><span class=\"nb\">rewrite</span> &lt;- Hst&#39;0, IHn1 <span class=\"kr\">in</span> HtransN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>HtransN</var><span class=\"hyp-type\"><b>: </b><span>scale (<span class=\"mi\">2</span> ^ Z.of_nat n)\n  (fg\n     {|\n       delta := d;\n       f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n       g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       oddF := Zodd_2p_plus_1 f&#39;\n     |}) =\nap\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n    v := <span class=\"mi\">0</span>;\n    q := w0;\n    r := <span class=\"mi\">1</span>\n  |} (fg st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st +\n  (w0 * f st + <span class=\"mi\">1</span> * g st))) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk21e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk21e\"><span class=\"nb\">unfold</span> fg, scale, ap <span class=\"kr\">in</span> HtransN;\n      <span class=\"nb\">simpl</span> <span class=\"kr\">in</span> HtransN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>HtransN</var><span class=\"hyp-type\"><b>: </b><span>{|\n  x := <span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>);\n  y := <span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)\n|} =\n{|\n  x := <span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st;\n  y := w0 * f st + <span class=\"mi\">1</span> * g st\n|}</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st +\n  (w0 * f st + <span class=\"mi\">1</span> * g st))) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk21f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk21f\"><span class=\"nb\">injection</span> HtransN; <span class=\"nb\">clear</span> HtransN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) = w0 * f st + <span class=\"mi\">1</span> * g st -&gt;\n<span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st -&gt;\n(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st +\n  (w0 * f st + <span class=\"mi\">1</span> * g st))) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk220\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk220\"><span class=\"nb\">intros</span> Hg&#39; Hf&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) =\nw0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st +\n  (w0 * f st + <span class=\"mi\">1</span> * g st))) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk221\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk221\"><span class=\"nb\">rewrite</span> &lt;- Hg&#39;, &lt;- Hf&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) =\nw0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n (<span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) +\n  <span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)))\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk222\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk222\"><span class=\"nb\">replace</span> (<span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) + <span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>))\n         <span class=\"kr\">with</span> ((f&#39; + g&#39; + <span class=\"mi\">1</span>) * (<span class=\"mi\">2</span> ^ Z.of_nat n * <span class=\"mi\">2</span>^<span class=\"mi\">1</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) =\nw0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) *\n ((f&#39; + g&#39; + <span class=\"mi\">1</span>) * (<span class=\"mi\">2</span> ^ Z.of_nat n * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>)))\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk223\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk223\"><span class=\"nb\">rewrite</span> &lt;- Z.pow_add_r, Z.mul_assoc <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) =\nw0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * (f&#39; + g&#39; + <span class=\"mi\">1</span>) *\n <span class=\"mi\">2</span> ^ (Z.of_nat n + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk224\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk224\"><span class=\"nb\">replace</span> (Z.of_nat n + <span class=\"mi\">1</span>) <span class=\"kr\">with</span> (Z.of_nat (S n)) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>w0</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat n</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n; v := <span class=\"mi\">0</span>; q := w0; r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n | f st * w0 + g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br><span><var>Hg'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>) =\nw0 * f st + <span class=\"mi\">1</span> * g st</span></span></span><br><span><var>Hf'</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>) =\n<span class=\"mi\">2</span> ^ Z.of_nat n * f st + <span class=\"mi\">0</span> * g st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * (f&#39; + g&#39; + <span class=\"mi\">1</span>) *\n <span class=\"mi\">2</span> ^ Z.of_nat (S n)) mod <span class=\"mi\">2</span> ^ Z.of_nat (S n) = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Z_mod_mult.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk225\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk225\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk226\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk226\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.S :: nil)) = Z.of_nat (S n) + delta st</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk227\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk227\"><span class=\"nb\">replace</span> (Z.of_nat (S n) + delta st)\n    <span class=\"kr\">with</span> (<span class=\"mi\">1</span> + (Z.of_nat n + delta st)) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.S :: nil)) =\n<span class=\"mi\">1</span> + (Z.of_nat n + delta st)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk228\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk228\"><span class=\"nb\">rewrite</span> &lt;- IHn3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">delta\n  (fst\n     ({|\n        delta := INC + d;\n        f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n        g := g&#39; + f&#39; + <span class=\"mi\">1</span>;\n        oddF := Zodd_2p_plus_1 f&#39;\n      |}, Step.S :: nil)) =\n<span class=\"mi\">1</span> + delta (fst (stepN n st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk229\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk229\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">INC + d = <span class=\"mi\">1</span> + delta (fst (stepN n st))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk22a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk22a\"><span class=\"nb\">rewrite</span> &lt;- Hst&#39;0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span>delta st &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hrel_prime</var><span class=\"hyp-type\"><b>: </b><span>rel_prime (f st) <span class=\"mi\">2</span></span></span></span><br><span><var>Hgcd</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : Z,\n<span class=\"mi\">0</span> &lt;= x -&gt; Z.gcd (f st) (<span class=\"mi\">2</span> ^ x) = <span class=\"mi\">1</span></span></span></span><br><span><var>w</var><span><span class=\"hyp-body\"><b>:= </b><span>(- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * g st)\nmod <span class=\"mi\">2</span> ^ Z.of_nat (S n)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> - delta st</span></span></span><br><span><var>IHn1</var><span class=\"hyp-type\"><b>: </b><span>transN n st =\n{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  v := <span class=\"mi\">0</span>;\n  q :=\n    (- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n;\n  r := <span class=\"mi\">1</span>\n|}</span></span></span><br><span><var>IHn2</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat n\n| f st *\n  ((- modInv (f st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * g st)\n   mod <span class=\"mi\">2</span> ^ Z.of_nat n) + \n  g st)</span></span></span><br><span><var>IHn3</var><span class=\"hyp-type\"><b>: </b><span>delta (fst (stepN n st)) =\nZ.of_nat n + delta st</span></span></span><br><span><var>st'</var><span><span class=\"hyp-body\"><b>:= </b><span>fst (stepN n st)</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hbound</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n<span class=\"mi\">0</span> &lt;= a mod <span class=\"mi\">2</span> ^ Z.of_nat n &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> ^ Z.of_nat (S n) | f st * w + g st)</span></span></span><br><span><var>d, f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hst'</var><span class=\"hyp-type\"><b>: </b><span>d &lt;= <span class=\"mi\">0</span></span></span></span><br><span><var>Hst'0</var><span class=\"hyp-type\"><b>: </b><span>{|\n  delta := d;\n  f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n  g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 f&#39;\n|} = fst (stepN n st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">INC + d =\n<span class=\"mi\">1</span> +\ndelta\n  {|\n    delta := d;\n    f := <span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>;\n    g := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n    oddF := Zodd_2p_plus_1 f&#39;\n  |}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk22b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk22b\"><span class=\"kn\">Lemma</span> <span class=\"nf\">transDs</span> <span class=\"nv\">n</span> <span class=\"nv\">st</span> : Zodd (g st) -&gt; <span class=\"mi\">0</span> &lt; delta st -&gt; <span class=\"mi\">0</span> &lt; Z.of_nat n &lt;= <span class=\"mi\">1</span> + delta st -&gt;\n  transN n st = {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">2</span>^(Z.of_nat n); \n    q := -<span class=\"mi\">1</span>; r := (modInv (-g st) (<span class=\"mi\">2</span>^(Z.of_nat n)) * (-f st)) mod (<span class=\"mi\">2</span>^(Z.of_nat n)) |}.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd (g st) -&gt;\n<span class=\"mi\">0</span> &lt; delta st -&gt;\n<span class=\"mi\">0</span> &lt; Z.of_nat n &lt;= <span class=\"mi\">1</span> + delta st -&gt;\ntransN n st =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- g st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * - f st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk22c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk22c\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd (g st) -&gt;\n<span class=\"mi\">0</span> &lt; delta st -&gt;\n<span class=\"mi\">0</span> &lt; Z.of_nat n &lt;= <span class=\"mi\">1</span> + delta st -&gt;\ntransN n st =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- g st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * - f st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk22d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk22d\"><span class=\"nb\">intros</span> Hodd Hdelta [Hn0 Hn].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; delta st</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat n</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt;= <span class=\"mi\">1</span> + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN n st =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat n;\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- g st) (<span class=\"mi\">2</span> ^ Z.of_nat n) * - f st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat n\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk22e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk22e\"><span class=\"nb\">destruct</span> n;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; delta st</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">transN (S n) st =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (S n);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- g st) (<span class=\"mi\">2</span> ^ Z.of_nat (S n)) * - f st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat (S n)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk22f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk22f\"><span class=\"nb\">rewrite</span> &lt;- Nat.add_1_r, &lt;- transN_stepN.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; delta st</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (transN n (fst (stepN <span class=\"mi\">1</span> st))) (transN <span class=\"mi\">1</span> st) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- g st) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) * - f st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk230\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk230\"><span class=\"nb\">unfold</span> transN <span class=\"nb\">at</span> <span class=\"mi\">2</span>; <span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; delta st</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + delta st</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (transN n\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st <span class=\"kr\">in</span> (st1, x :: nil))))\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st <span class=\"kr\">in</span> (st1, x :: nil))))) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- g st) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) * - f st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk231\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk231\"><span class=\"nb\">revert</span> Hodd Hdelta Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd (g st) -&gt;\n<span class=\"mi\">0</span> &lt; delta st -&gt;\nZ.of_nat (S n) &lt;= <span class=\"mi\">1</span> + delta st -&gt;\nmul\n  (transN n\n     (fst (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st <span class=\"kr\">in</span> (st1, x :: nil))))\n  (prod\n     (map trans\n        (snd\n           (<span class=\"kr\">let</span> (<span class=\"nv\">st1</span>, x) := step st <span class=\"kr\">in</span> (st1, x :: nil))))) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- g st) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) * - f st)\n    mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk232\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk232\"><span class=\"nb\">elim</span> (spec);<span class=\"nb\">cbn</span>;<span class=\"nb\">intros</span> d f&#39; g&#39; Hodd Hdelta Hn;\n[<span class=\"nb\">elim</span> (Zeven_not_Zodd _ (Zeven_2p _) Hodd)| |<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.pos d</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.pos (Pos.of_succ_nat n) &lt;=\nZ.pos\n  <span class=\"kr\">match</span> d <span class=\"kr\">with</span>\n  | q~<span class=\"mi\">1</span> =&gt; (Pos.succ q)~<span class=\"mi\">0</span>\n  | q~<span class=\"mi\">0</span> =&gt; q~<span class=\"mi\">1</span>\n  | <span class=\"mi\">1</span> =&gt; <span class=\"mi\">2</span>\n  <span class=\"kr\">end</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (transN n\n     {|\n       delta := Z.pos_sub <span class=\"mi\">1</span> d;\n       f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       g := g&#39; - f&#39;;\n       oddF := Zodd_2p_plus_1 g&#39;\n     |}) (mul {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">2</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">1</span> |} I) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk233\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk233\"><span class=\"nb\">change</span> (Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + Z.pos d) <span class=\"kr\">in</span> Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.pos d</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + Z.pos d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (transN n\n     {|\n       delta := Z.pos_sub <span class=\"mi\">1</span> d;\n       f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       g := g&#39; - f&#39;;\n       oddF := Zodd_2p_plus_1 g&#39;\n     |}) (mul {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">2</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">1</span> |} I) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk234\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk234\"><span class=\"nb\">change</span> (Z.pos_sub <span class=\"mi\">1</span> d) <span class=\"kr\">with</span> (<span class=\"mi\">1</span> - Z.pos d).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>positive</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.pos d</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + Z.pos d</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (transN n\n     {|\n       delta := <span class=\"mi\">1</span> - Z.pos d;\n       f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       g := g&#39; - f&#39;;\n       oddF := Zodd_2p_plus_1 g&#39;\n     |}) (mul {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">2</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">1</span> |} I) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk235\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk235\"><span class=\"nb\">set</span> (dZ := Z.pos d) <span class=\"kr\">in</span> *; <span class=\"nb\">clearbody</span> dZ; <span class=\"nb\">clear</span> d.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (transN n\n     {|\n       delta := <span class=\"mi\">1</span> - dZ;\n       f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       g := g&#39; - f&#39;;\n       oddF := Zodd_2p_plus_1 g&#39;\n     |}) (mul {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">2</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">1</span> |} I) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk236\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk236\"><span class=\"nb\">change</span> (mul {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">2</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">1</span> |} I)\n <span class=\"kr\">with</span> (mul (trans Step.S) {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |}).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (transN n\n     {|\n       delta := <span class=\"mi\">1</span> - dZ;\n       f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n       g := g&#39; - f&#39;;\n       oddF := Zodd_2p_plus_1 g&#39;\n     |})\n  (mul (trans Step.S)\n     {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |}) =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk237\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk237\"><span class=\"nb\">rewrite</span> !mul_assoc.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (mul\n     (transN n\n        {|\n          delta := <span class=\"mi\">1</span> - dZ;\n          f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n          g := g&#39; - f&#39;;\n          oddF := Zodd_2p_plus_1 g&#39;\n        |}) (trans Step.S))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk238\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk238\"><span class=\"nb\">clear</span> st.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (mul\n     (transN n\n        {|\n          delta := <span class=\"mi\">1</span> - dZ;\n          f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n          g := g&#39; - f&#39;;\n          oddF := Zodd_2p_plus_1 g&#39;\n        |}) (trans Step.S))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk239\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk239\"><span class=\"nb\">pose</span> (st0 := {| delta := - dZ;\n                f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n                g := - <span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n                oddF := Zodd_2p_plus_1 g&#39; |}).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (mul\n     (transN n\n        {|\n          delta := <span class=\"mi\">1</span> - dZ;\n          f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n          g := g&#39; - f&#39;;\n          oddF := Zodd_2p_plus_1 g&#39;\n        |}) (trans Step.S))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk23a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk23a\"><span class=\"nb\">set</span> (st1 := Build_State _ _ _ _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (mul (transN n st1) (trans Step.S))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk23b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk23b\"><span class=\"nb\">assert</span> (Hst01 : step st0 = (st1, Step.S)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">step st0 = (st1, Step.S)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk23c\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk23c\"><hr></label><div class=\"goal-conclusion\">mul (mul (transN n st1) (trans Step.S))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod \n    <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk23d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk23d\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">step st0 = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk23e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk23e\"><span class=\"nb\">unfold</span> step.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">match</span> Zeven_odd_dec (g st0) <span class=\"kr\">with</span>\n| <span class=\"nb\">left</span> _ =&gt;\n    ({|\n       delta := INC + delta st0;\n       f := f st0;\n       g := g st0 / <span class=\"mi\">2</span>;\n       oddF := oddF st0\n     |}, Step.H)\n| <span class=\"nb\">right</span> oddG =&gt;\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st0\n    <span class=\"kr\">then</span>\n     ({|\n        delta := INC - delta st0;\n        f := g st0;\n        g := (g st0 - f st0) / <span class=\"mi\">2</span>;\n        oddF := oddG\n      |}, Step.D)\n    <span class=\"kr\">else</span>\n     ({|\n        delta := INC + delta st0;\n        f := f st0;\n        g := (g st0 + f st0) / <span class=\"mi\">2</span>;\n        oddF := oddF st0\n      |}, Step.S)\n<span class=\"kr\">end</span> = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk23f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk23f\"><span class=\"nb\">assert</span> (Hoddg : Zodd (g st0)) <span class=\"bp\">by</span>\n   (<span class=\"nb\">replace</span> (g st0) <span class=\"kr\">with</span> (<span class=\"mi\">2</span>*(-f&#39; - <span class=\"mi\">1</span>) + <span class=\"mi\">1</span>) <span class=\"bp\">by</span> (<span class=\"nb\">cbn</span>;<span class=\"bp\">ring</span>); <span class=\"nb\">apply</span> Zodd_2p_plus_1).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hoddg</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st0)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">match</span> Zeven_odd_dec (g st0) <span class=\"kr\">with</span>\n| <span class=\"nb\">left</span> _ =&gt;\n    ({|\n       delta := INC + delta st0;\n       f := f st0;\n       g := g st0 / <span class=\"mi\">2</span>;\n       oddF := oddF st0\n     |}, Step.H)\n| <span class=\"nb\">right</span> oddG =&gt;\n    <span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st0\n    <span class=\"kr\">then</span>\n     ({|\n        delta := INC - delta st0;\n        f := g st0;\n        g := (g st0 - f st0) / <span class=\"mi\">2</span>;\n        oddF := oddG\n      |}, Step.D)\n    <span class=\"kr\">else</span>\n     ({|\n        delta := INC + delta st0;\n        f := f st0;\n        g := (g st0 + f st0) / <span class=\"mi\">2</span>;\n        oddF := oddF st0\n      |}, Step.S)\n<span class=\"kr\">end</span> = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk240\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk240\"><span class=\"nb\">destruct</span> Zeven_odd_dec <span class=\"kr\">as</span> [Heveng&#39;|Hoddg&#39;];\n  [<span class=\"nb\">elim</span> (Zodd_not_Zeven _ Hoddg Heveng&#39;)|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hoddg, Hoddg'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st0)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;? delta st0\n <span class=\"kr\">then</span>\n  ({|\n     delta := INC - delta st0;\n     f := g st0;\n     g := (g st0 - f st0) / <span class=\"mi\">2</span>;\n     oddF := Hoddg&#39;\n   |}, Step.D)\n <span class=\"kr\">else</span>\n  ({|\n     delta := INC + delta st0;\n     f := f st0;\n     g := (g st0 + f st0) / <span class=\"mi\">2</span>;\n     oddF := oddF st0\n   |}, Step.S)) = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk241\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk241\"><span class=\"nb\">elim</span> (Z.ltb_spec); <span class=\"nb\">intros</span> Hd0; <span class=\"nb\">cbn</span> <span class=\"kr\">in</span> Hd0; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hoddg, Hoddg'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st0)</span></span></span><br><span><var>Hd0</var><span class=\"hyp-type\"><b>: </b><span>- dZ &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">({|\n   delta := INC + delta st0;\n   f := f st0;\n   g := (g st0 + f st0) / <span class=\"mi\">2</span>;\n   oddF := oddF st0\n |}, Step.S) = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk242\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk242\"><span class=\"nb\">simpl</span> (g st0 + f st0).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hoddg, Hoddg'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st0)</span></span></span><br><span><var>Hd0</var><span class=\"hyp-type\"><b>: </b><span>- dZ &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">({|\n   delta := INC + delta st0;\n   f := f st0;\n   g := (-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) / <span class=\"mi\">2</span>;\n   oddF := oddF st0\n |}, Step.S) = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk243\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk243\"><span class=\"nb\">replace</span> (-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span> + (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> ((g&#39; - f&#39;)*<span class=\"mi\">2</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hoddg, Hoddg'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st0)</span></span></span><br><span><var>Hd0</var><span class=\"hyp-type\"><b>: </b><span>- dZ &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">({|\n   delta := INC + delta st0;\n   f := f st0;\n   g := (g&#39; - f&#39;) * <span class=\"mi\">2</span> / <span class=\"mi\">2</span>;\n   oddF := oddF st0\n |}, Step.S) = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk244\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk244\"><span class=\"nb\">rewrite</span> Z_div_mult <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hoddg, Hoddg'</var><span class=\"hyp-type\"><b>: </b><span>Zodd (g st0)</span></span></span><br><span><var>Hd0</var><span class=\"hyp-type\"><b>: </b><span>- dZ &lt;= <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">({|\n   delta := INC + delta st0;\n   f := f st0;\n   g := g&#39; - f&#39;;\n   oddF := oddF st0\n |}, Step.S) = (st1, Step.S)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk245\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk245\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (mul (transN n st1) (trans Step.S))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk246\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk246\"><span class=\"nb\">replace</span> (trans Step.S) <span class=\"kr\">with</span> (transN <span class=\"mi\">1</span> st0)\n <span class=\"bp\">by</span> (<span class=\"nb\">unfold</span> transN;<span class=\"nb\">cbn</span>;<span class=\"nb\">rewrite</span> Hst01;<span class=\"bp\">reflexivity</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul (mul (transN n st1) (transN <span class=\"mi\">1</span> st0))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk247\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk247\"><span class=\"nb\">replace</span> st1 <span class=\"kr\">with</span> (fst (stepN <span class=\"mi\">1</span> st0)) <span class=\"bp\">by</span> (<span class=\"nb\">unfold</span> transN;<span class=\"nb\">cbn</span>;<span class=\"nb\">rewrite</span> Hst01;<span class=\"bp\">reflexivity</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  (mul (transN n (fst (stepN <span class=\"mi\">1</span> st0))) (transN <span class=\"mi\">1</span> st0))\n  {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk248\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk248\"><span class=\"nb\">rewrite</span> transN_stepN, transSs; <span class=\"nb\">cbn</span>; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mul\n  {|\n    u := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n    v := <span class=\"mi\">0</span>;\n    q :=\n      (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n       (-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n    r := <span class=\"mi\">1</span>\n  |} {| u := <span class=\"mi\">0</span>; v := <span class=\"mi\">1</span>; q := -<span class=\"mi\">1</span>; r := <span class=\"mi\">0</span> |} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk249\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk249\"><span class=\"nb\">unfold</span> mul; <span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">{|\n  u := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>) * <span class=\"mi\">0</span> + <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>) * <span class=\"mi\">1</span> + <span class=\"mi\">0</span>;\n  q :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     (-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>) * <span class=\"mi\">0</span> + -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     (-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>) * <span class=\"mi\">1</span> + <span class=\"mi\">0</span>\n|} =\n{|\n  u := <span class=\"mi\">0</span>;\n  v := <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>);\n  q := -<span class=\"mi\">1</span>;\n  r :=\n    (modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n     - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)\n|}</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk24a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk24a\"><span class=\"nb\">f_equal</span>; <span class=\"kp\">try</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n (-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>) * <span class=\"mi\">1</span> + <span class=\"mi\">0</span> =\n(modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk24b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk24b\"><span class=\"nb\">ring_simplify</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n (-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>) =\n(modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n - (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk24c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk24c\"><span class=\"kp\">do</span> <span class=\"mi\">1</span> <span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; Z.of_nat (S n)</span></span></span><br><span><var>f', g'</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hodd</var><span class=\"hyp-type\"><b>: </b><span>Zodd (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)</span></span></span><br><span><var>dZ</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hdelta</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; dZ</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat (S n) &lt;= <span class=\"mi\">1</span> + dZ</span></span></span><br><span><var>st0</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := -<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>st1</var><span><span class=\"hyp-body\"><b>:= </b><span>{|\n  delta := <span class=\"mi\">1</span> - dZ;\n  f := <span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>;\n  g := g&#39; - f&#39;;\n  oddF := Zodd_2p_plus_1 g&#39;\n|}</span></span><span class=\"hyp-type\"><b>: </b><span>State</span></span></span></span><br><span><var>Hst01</var><span class=\"hyp-type\"><b>: </b><span>step st0 = (st1, Step.S)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">modInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n(-<span class=\"mi\">2</span> * f&#39; - <span class=\"mi\">1</span>) =\nmodInv (- (<span class=\"mi\">2</span> * g&#39; + <span class=\"mi\">1</span>)) (<span class=\"mi\">2</span> ^ Z.of_nat (n + <span class=\"mi\">1</span>)) *\n- (<span class=\"mi\">2</span> * f&#39; + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">End</span> <span class=\"nf\">Trans</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">pre_div62Modulo</span> (<span class=\"nv\">M</span> <span class=\"nv\">a</span> : Z) : Z :=\n  a - (((modInv M (<span class=\"mi\">2</span>^<span class=\"mi\">62</span>))*a) mod <span class=\"mi\">2</span>^<span class=\"mi\">62</span>) * M.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk24d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk24d\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pre_div62Modulo_mod</span> (<span class=\"nv\">M</span> <span class=\"nv\">a</span> : Z) : pre_div62Modulo M a mod M = a mod M.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">pre_div62Modulo M a mod M = a mod M</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk24e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk24e\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">pre_div62Modulo M a mod M = a mod M</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk24f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk24f\"><span class=\"nb\">unfold</span> pre_div62Modulo, Z.sub.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a + - ((modInv M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * M)) mod M =\na mod M</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk250\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk250\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_opp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a + - ((modInv M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * M) mod M =\na mod M</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Z_mod_plus_full.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk251\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk251\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pre_div62Modulo_divide</span> <span class=\"nv\">M</span> <span class=\"nv\">a</span> : Zodd M -&gt; (<span class=\"mi\">2</span>^<span class=\"mi\">62</span> | pre_div62Modulo M a).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd M -&gt; (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> | pre_div62Modulo M a)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk252\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk252\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd M -&gt; (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> | pre_div62Modulo M a)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk253\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk253\"><span class=\"nb\">intros</span> HM.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> | pre_div62Modulo M a)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk254\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk254\"><span class=\"nb\">apply</span> Z.mod_divide;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">pre_div62Modulo M a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk255\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk255\"><span class=\"nb\">unfold</span> pre_div62Modulo.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a - (modInv M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * M)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk256\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk256\"><span class=\"nb\">rewrite</span> &lt;- Zminus_mod_idemp_r, Zmult_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a - (modInv M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * a * M) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk257\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk257\"><span class=\"nb\">replace</span> (modInv M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * a * M) <span class=\"kr\">with</span> (modInv M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * M * a) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a - (modInv M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * M * a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk258\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk258\"><span class=\"nb\">rewrite</span> &lt;- Zmult_mod_idemp_l, modInv_mul_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a - (Z.gcd M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk259\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk259\"><span class=\"nb\">replace</span> (Z.gcd M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) <span class=\"kr\">with</span> <span class=\"mi\">1</span>;\n[<span class=\"nb\">rewrite</span> Z.mul_1_l, Zminus_mod_idemp_r, Z.sub_diag; <span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> = Z.gcd M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk25a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk25a\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.gcd M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) = <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk25b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk25b\"><span class=\"nb\">apply</span> Zgcd_1_rel_prime.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime M (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk25c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk25c\"><span class=\"nb\">apply</span> Zpow_facts.rel_prime_Zpower_r;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime M <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk25d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk25d\"><span class=\"nb\">apply</span> Zgcd_1_rel_prime.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.gcd M <span class=\"mi\">2</span> = <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk25e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk25e\"><span class=\"nb\">apply</span> Z.bezout_1_gcd.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span>Zodd M</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.Bezout M <span class=\"mi\">2</span> <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk25f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk25f\"><span class=\"nb\">apply</span> Zodd_ex_iff <span class=\"kr\">in</span> HM.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HM</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">exists</span> <span class=\"nv\">m</span> : Z, M = <span class=\"mi\">2</span> * m + <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.Bezout M <span class=\"mi\">2</span> <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk260\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk260\"><span class=\"nb\">destruct</span> HM <span class=\"kr\">as</span> [m HMm].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HMm</var><span class=\"hyp-type\"><b>: </b><span>M = <span class=\"mi\">2</span> * m + <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.Bezout M <span class=\"mi\">2</span> <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk261\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk261\"><span class=\"kr\">exists</span> <span class=\"mi\">1</span>; <span class=\"kr\">exists</span> (-m).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>M, a, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>HMm</var><span class=\"hyp-type\"><b>: </b><span>M = <span class=\"mi\">2</span> * m + <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> * M + - m * <span class=\"mi\">2</span> = <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">update_de</span> (<span class=\"nv\">M</span> <span class=\"nv\">d</span> <span class=\"nv\">e</span> : Z) (<span class=\"nv\">mtx</span> : Trans.M2x2) : (Z * Z) :=\n  <span class=\"kr\">let</span> <span class=\"nv\">vec</span> := Trans.ap mtx\n              {| Trans.x := d + <span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> M <span class=\"kr\">else</span> <span class=\"mi\">0</span>\n               ; Trans.y := e + <span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> M <span class=\"kr\">else</span> <span class=\"mi\">0</span>\n               |} <span class=\"kr\">in</span>\n  ( pre_div62Modulo M (Trans.x vec) / <span class=\"mi\">2</span>^<span class=\"mi\">62</span>\n  , pre_div62Modulo M (Trans.y vec) / <span class=\"mi\">2</span>^<span class=\"mi\">62</span>\n  ).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk262\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk262\"><span class=\"kn\">Lemma</span> <span class=\"nf\">update_de_bound</span> <span class=\"nv\">m</span> <span class=\"nv\">d</span> <span class=\"nv\">e</span> <span class=\"nv\">mtx</span> : Zodd m -&gt;\n   Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> -&gt;\n   Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> -&gt;\n   -<span class=\"mi\">2</span> * m &lt; d &lt; m -&gt; -<span class=\"mi\">2</span> * m &lt; e &lt; m -&gt;\n   -<span class=\"mi\">2</span> * m &lt; fst (update_de m d e mtx) &lt; m /\\ -<span class=\"mi\">2</span> * m &lt; snd (update_de m d e mtx) &lt; m.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd m -&gt;\nZ.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> -&gt;\nZ.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> -&gt;\n-<span class=\"mi\">2</span> * m &lt; d &lt; m -&gt;\n-<span class=\"mi\">2</span> * m &lt; e &lt; m -&gt;\n-<span class=\"mi\">2</span> * m &lt; fst (update_de m d e mtx) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt; snd (update_de m d e mtx) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk263\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk263\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd m -&gt;\nZ.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> -&gt;\nZ.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> -&gt;\n-<span class=\"mi\">2</span> * m &lt; d &lt; m -&gt;\n-<span class=\"mi\">2</span> * m &lt; e &lt; m -&gt;\n-<span class=\"mi\">2</span> * m &lt; fst (update_de m d e mtx) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt; snd (update_de m d e mtx) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk264\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk264\"><span class=\"nb\">intros</span> Hoddm Huv Hqr Hmd Hme.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt; fst (update_de m d e mtx) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt; snd (update_de m d e mtx) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk265\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk265\"><span class=\"nb\">unfold</span> update_de.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m\n     (Trans.x\n        (Trans.ap mtx\n           {|\n             Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n             Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n           |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m\n     (Trans.y\n        (Trans.ap mtx\n           {|\n             Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n             Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n           |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m\n     (Trans.x\n        (Trans.ap mtx\n           {|\n             Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n             Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n           |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m\n     (Trans.y\n        (Trans.ap mtx\n           {|\n             Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n             Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n           |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk266\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk266\"><span class=\"nb\">set</span> (x := Trans.x _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m\n     (Trans.y\n        (Trans.ap mtx\n           {|\n             Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n             Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n           |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m\n     (Trans.y\n        (Trans.ap mtx\n           {|\n             Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n             Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n           |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk267\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk267\"><span class=\"nb\">set</span> (y := Trans.y _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk268\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk268\"><span class=\"nb\">assert</span> (Hm1 : <span class=\"mi\">1</span> &lt;= m) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk269\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk269\"><span class=\"nb\">assert</span> (Hxbound : Z.abs x &lt;= <span class=\"mi\">2</span>^<span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk26a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk26a\"><hr></label><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk26b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk26b\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk26c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk26c\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs\n  (Trans.u mtx * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   Trans.v mtx * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) &lt;=\n<span class=\"mi\">4611686018427387904</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk26d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk26d\"><span class=\"nb\">eapply</span> Z.le_trans;[<span class=\"nb\">apply</span> Z.abs_triangle|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (Trans.u mtx * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) +\nZ.abs (Trans.v mtx * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) &lt;=\n<span class=\"mi\">4611686018427387904</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk26e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk26e\"><span class=\"nb\">rewrite</span> !Z.abs_mul.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (Trans.u mtx) *\nZ.abs (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\nZ.abs (Trans.v mtx) *\nZ.abs (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) &lt;=\n<span class=\"mi\">4611686018427387904</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk26f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk26f\"><span class=\"nb\">apply</span> Z.le_trans <span class=\"kr\">with</span> ((Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx))*(m - <span class=\"mi\">1</span>));[|<span class=\"bp\">nia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (Trans.u mtx) *\nZ.abs (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\nZ.abs (Trans.v mtx) *\nZ.abs (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) &lt;=\n(Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx)) * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (Z.ltb_spec0 d <span class=\"mi\">0</span>); <span class=\"nb\">destruct</span> (Z.ltb_spec0 e <span class=\"mi\">0</span>);\n  <span class=\"nb\">rewrite</span> Z.mul_add_distr_r; <span class=\"nb\">apply</span> Z.add_le_mono; <span class=\"nb\">apply</span> Zmult_le_compat_l; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk270\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk270\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk271\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk271\"><span class=\"nb\">assert</span> (Hybound : Z.abs y &lt;= <span class=\"mi\">2</span>^<span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk272\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk272\"><hr></label><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk273\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk273\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk274\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk274\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs\n  (Trans.q mtx * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   Trans.r mtx * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) &lt;=\n<span class=\"mi\">4611686018427387904</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk275\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk275\"><span class=\"nb\">eapply</span> Z.le_trans;[<span class=\"nb\">apply</span> Z.abs_triangle|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (Trans.q mtx * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) +\nZ.abs (Trans.r mtx * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) &lt;=\n<span class=\"mi\">4611686018427387904</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk276\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk276\"><span class=\"nb\">rewrite</span> !Z.abs_mul.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (Trans.q mtx) *\nZ.abs (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\nZ.abs (Trans.r mtx) *\nZ.abs (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) &lt;=\n<span class=\"mi\">4611686018427387904</span> * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk277\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk277\"><span class=\"nb\">apply</span> Z.le_trans <span class=\"kr\">with</span> ((Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx))*(m - <span class=\"mi\">1</span>));[|<span class=\"bp\">nia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.abs (Trans.q mtx) *\nZ.abs (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\nZ.abs (Trans.r mtx) *\nZ.abs (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) &lt;=\n(Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx)) * (m - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">destruct</span> (Z.ltb_spec0 d <span class=\"mi\">0</span>); <span class=\"nb\">destruct</span> (Z.ltb_spec0 e <span class=\"mi\">0</span>);\n  <span class=\"nb\">rewrite</span> Z.mul_add_distr_r; <span class=\"nb\">apply</span> Z.add_le_mono; <span class=\"nb\">apply</span> Zmult_le_compat_l; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk278\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk278\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nfst\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nsnd\n  (pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n   pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk279\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk279\"><span class=\"nb\">cbn</span> -[Z.div Z.pow x y].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt; pre_div62Modulo m x / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt; pre_div62Modulo m y / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk27a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk27a\"><span class=\"nb\">unfold</span> pre_div62Modulo.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\n(x - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\nm /\\\n-<span class=\"mi\">2</span> * m &lt;\n(y - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\nm</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk27b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk27b\"><span class=\"nb\">assert</span> (Hxmod : <span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt; <span class=\"mi\">2</span>^<span class=\"mi\">62</span>) <span class=\"bp\">by</span> (<span class=\"nb\">apply</span> Z.mod_pos_bound;<span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxmod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\n(x - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\nm /\\\n-<span class=\"mi\">2</span> * m &lt;\n(y - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\nm</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk27c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk27c\"><span class=\"nb\">assert</span> (Hymod : <span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt; <span class=\"mi\">2</span>^<span class=\"mi\">62</span>) <span class=\"bp\">by</span> (<span class=\"nb\">apply</span> Z.mod_pos_bound;<span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxmod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hymod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\n(x - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\nm /\\\n-<span class=\"mi\">2</span> * m &lt;\n(y - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\nm</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk27d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk27d\"><span class=\"nb\">rewrite</span> &lt;- !Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxmod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hymod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nZ.shiftr (x - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m)\n  <span class=\"mi\">62</span> &lt; m /\\\n-<span class=\"mi\">2</span> * m &lt;\nZ.shiftr (y - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m)\n  <span class=\"mi\">62</span> &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk27e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk27e\"><span class=\"nb\">split</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxmod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hymod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nZ.shiftr (x - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m)\n  <span class=\"mi\">62</span> &lt; m</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk27f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxmod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hymod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk27f\"><hr></label><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nZ.shiftr (y - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m)\n  <span class=\"mi\">62</span> &lt; m</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk280\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk280\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxmod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hymod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nZ.shiftr (x - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m)\n  <span class=\"mi\">62</span> &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">cut</span> (-<span class=\"mi\">2</span>*m + <span class=\"mi\">1</span> &lt;= Z.shiftr (x - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) <span class=\"mi\">62</span> &lt; m);[<span class=\"bp\">lia</span>|<span class=\"nb\">apply</span> shiftr_bounds;<span class=\"bp\">nia</span>].</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk281\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk281\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>mtx</var><span class=\"hyp-type\"><b>: </b><span>Trans.M2x2</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Huv</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.u mtx) + Z.abs (Trans.v mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hqr</var><span class=\"hyp-type\"><b>: </b><span>Z.abs (Trans.q mtx) + Z.abs (Trans.r mtx) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hmd</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; d &lt; m</span></span></span><br><span><var>Hme</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> * m &lt; e &lt; m</span></span></span><br><span><var>x</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.x\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>y</var><span><span class=\"hyp-body\"><b>:= </b><span>Trans.y\n  (Trans.ap mtx\n     {|\n       Trans.x := d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n       Trans.y := e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n     |})</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hm1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt;= m</span></span></span><br><span><var>Hxbound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs x &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hybound</var><span class=\"hyp-type\"><b>: </b><span>Z.abs y &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (m - <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hxmod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * x) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br><span><var>Hymod</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> * m &lt;\nZ.shiftr (y - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m)\n  <span class=\"mi\">62</span> &lt; m</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">cut</span> (-<span class=\"mi\">2</span>*m + <span class=\"mi\">1</span> &lt;= Z.shiftr (y - (modInv m (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) * y) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * m) <span class=\"mi\">62</span> &lt; m);[<span class=\"bp\">lia</span>|<span class=\"nb\">apply</span> shiftr_bounds;<span class=\"bp\">nia</span>].</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk282\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk282\"><span class=\"kn\">Lemma</span> <span class=\"nf\">update_de_eqm</span> <span class=\"nv\">m</span> <span class=\"nv\">x</span> <span class=\"nv\">d</span> <span class=\"nv\">e</span> <span class=\"nv\">st</span> : Zodd m -&gt;\n  eqm m (x * d) (f st) -&gt;\n  eqm m (x * e) (g st) -&gt;\n  eqm m (x * fst (update_de m d e (Trans.transN <span class=\"mi\">62</span> st))) (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\n  eqm m (x * snd (update_de m d e (Trans.transN <span class=\"mi\">62</span> st))) (g (fst (stepN <span class=\"mi\">62</span> st))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd m -&gt;\neqm m (x * d) (f st) -&gt;\neqm m (x * e) (g st) -&gt;\neqm m (x * fst (update_de m d e (Trans.transN <span class=\"mi\">62</span> st)))\n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m (x * snd (update_de m d e (Trans.transN <span class=\"mi\">62</span> st)))\n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk283\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk283\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zodd m -&gt;\neqm m (x * d) (f st) -&gt;\neqm m (x * e) (g st) -&gt;\neqm m (x * fst (update_de m d e (Trans.transN <span class=\"mi\">62</span> st)))\n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m (x * snd (update_de m d e (Trans.transN <span class=\"mi\">62</span> st)))\n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk284\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk284\"><span class=\"nb\">intros</span> Hoddm Hf Hg.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m (x * fst (update_de m d e (Trans.transN <span class=\"mi\">62</span> st)))\n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m (x * snd (update_de m d e (Trans.transN <span class=\"mi\">62</span> st)))\n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk285\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk285\"><span class=\"nb\">unfold</span> update_de.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk286\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk286\"><span class=\"nb\">generalize</span> (<span class=\"kr\">fun</span> <span class=\"nv\">a</span> =&gt; pre_div62Modulo_divide m a Hoddm).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> | pre_div62Modulo m a)) -&gt;\neqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk287\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk287\"><span class=\"nb\">generalize</span> (pre_div62Modulo_mod m).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, pre_div62Modulo m a mod m = a mod m) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> | pre_div62Modulo m a)) -&gt;\neqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk288\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk288\"><span class=\"nb\">generalize</span> (Trans.transN_step <span class=\"mi\">62</span> st).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Trans.scale (<span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">62</span>)\n  (Trans.fg (fst (stepN <span class=\"mi\">62</span> st))) =\nTrans.ap (Trans.transN <span class=\"mi\">62</span> st) (Trans.fg st) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, pre_div62Modulo m a mod m = a mod m) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> | pre_div62Modulo m a)) -&gt;\neqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) \n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk289\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk289\"><span class=\"nb\">change</span> (<span class=\"mi\">2</span>^<span class=\"mi\">62</span>) <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^Z.of_nat <span class=\"mi\">62</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Trans.scale (<span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">62</span>)\n  (Trans.fg (fst (stepN <span class=\"mi\">62</span> st))) =\nTrans.ap (Trans.transN <span class=\"mi\">62</span> st) (Trans.fg st) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, pre_div62Modulo m a mod m = a mod m) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, (<span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">62</span> | pre_div62Modulo m a)) -&gt;\neqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">62</span>))\n  (f (fst (stepN <span class=\"mi\">62</span> st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">62</span>,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN <span class=\"mi\">62</span> st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat <span class=\"mi\">62</span>))\n  (g (fst (stepN <span class=\"mi\">62</span> st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk28a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk28a\"><span class=\"nb\">generalize</span> <span class=\"mi\">62</span>%nat; <span class=\"nb\">intros</span> n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Trans.scale (<span class=\"mi\">2</span> ^ Z.of_nat n)\n  (Trans.fg (fst (stepN n st))) =\nTrans.ap (Trans.transN n st) (Trans.fg st) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, pre_div62Modulo m a mod m = a mod m) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, (<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)) -&gt;\neqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (g (fst (stepN n st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk28b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk28b\"><span class=\"nb\">intros</span> X; <span class=\"nb\">injection</span> X; <span class=\"nb\">clear</span> X.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nTrans.q (Trans.transN n st) * f st +\nTrans.r (Trans.transN n st) * g st -&gt;\n<span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nTrans.u (Trans.transN n st) * f st +\nTrans.v (Trans.transN n st) * g st -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, pre_div62Modulo m a mod m = a mod m) -&gt;\n(<span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, (<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)) -&gt;\neqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (g (fst (stepN n st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk28c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk28c\"><span class=\"nb\">intros</span> Hgqr Hfuv Hpre1 Hpre2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nTrans.q (Trans.transN n st) * f st +\nTrans.r (Trans.transN n st) * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nTrans.u (Trans.transN n st) * f st +\nTrans.v (Trans.transN n st) * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap (Trans.transN n st)\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (g (fst (stepN n st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk28d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk28d\"><span class=\"nb\">destruct</span> (Trans.transN n st) <span class=\"kr\">as</span> [u v q r].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nTrans.q\n  {|\n    Trans.u := u;\n    Trans.v := v;\n    Trans.q := q;\n    Trans.r := r\n  |} * f st +\nTrans.r\n  {|\n    Trans.u := u;\n    Trans.v := v;\n    Trans.q := q;\n    Trans.r := r\n  |} * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nTrans.u\n  {|\n    Trans.u := u;\n    Trans.v := v;\n    Trans.q := q;\n    Trans.r := r\n  |} * f st +\nTrans.v\n  {|\n    Trans.u := u;\n    Trans.v := v;\n    Trans.q := q;\n    Trans.r := r\n  |} * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m\n  (x *\n   fst\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap\n              {|\n                Trans.u := u;\n                Trans.v := v;\n                Trans.q := q;\n                Trans.r := r\n              |}\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap\n              {|\n                Trans.u := u;\n                Trans.v := v;\n                Trans.q := q;\n                Trans.r := r\n              |}\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   snd\n     (pre_div62Modulo m\n        (Trans.x\n           (Trans.ap\n              {|\n                Trans.u := u;\n                Trans.v := v;\n                Trans.q := q;\n                Trans.r := r\n              |}\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n,\n      pre_div62Modulo m\n        (Trans.y\n           (Trans.ap\n              {|\n                Trans.u := u;\n                Trans.v := v;\n                Trans.q := q;\n                Trans.r := r\n              |}\n              {|\n                Trans.x :=\n                  d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>);\n                Trans.y :=\n                  e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)\n              |})) / <span class=\"mi\">2</span> ^ Z.of_nat n))\n  (g (fst (stepN n st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk28e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk28e\"><span class=\"nb\">cbn</span> -[Z.div pre_div62Modulo] <span class=\"kr\">in</span> *.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m\n  (x *\n   (pre_div62Modulo m\n      (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   (pre_div62Modulo m\n      (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (g (fst (stepN n st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk28f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk28f\"><span class=\"nb\">assert</span> (Hn : <span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span>^Z.of_nat n) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m\n  (x *\n   (pre_div62Modulo m\n      (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   (pre_div62Modulo m\n      (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (g (fst (stepN n st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk290\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk290\"><span class=\"nb\">assert</span> (Hinv : modInv (<span class=\"mi\">2</span>^Z.of_nat n) m * (<span class=\"mi\">2</span>^Z.of_nat n) mod m = <span class=\"mi\">1</span> mod m).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n) mod m =\n<span class=\"mi\">1</span> mod m</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk291\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk291\"><hr></label><div class=\"goal-conclusion\">eqm m\n  (x *\n   (pre_div62Modulo m\n      (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   (pre_div62Modulo m\n      (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (g (fst (stepN n st)))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk292\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk292\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n) mod m =\n<span class=\"mi\">1</span> mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk293\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk293\"><span class=\"nb\">rewrite</span> modInv_mul_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.gcd (<span class=\"mi\">2</span> ^ Z.of_nat n) m mod m = <span class=\"mi\">1</span> mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk294\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk294\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.gcd (<span class=\"mi\">2</span> ^ Z.of_nat n) m = <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk295\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk295\"><span class=\"nb\">rewrite</span> Zgcd_1_rel_prime.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime (<span class=\"mi\">2</span> ^ Z.of_nat n) m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk296\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk296\"><span class=\"nb\">apply</span> rel_prime_sym.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime m (<span class=\"mi\">2</span> ^ Z.of_nat n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk297\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk297\"><span class=\"nb\">apply</span> Zpow_facts.rel_prime_Zpower_r;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime m <span class=\"mi\">2</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk298\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk298\"><span class=\"nb\">apply</span> rel_prime_sym.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime <span class=\"mi\">2</span> m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk299\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk299\"><span class=\"nb\">apply</span> prime_rel_prime;[<span class=\"nb\">apply</span> prime_2|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">~ (<span class=\"mi\">2</span> | m)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk29a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk29a\"><span class=\"nb\">rewrite</span> Zodd_equiv <span class=\"kr\">in</span> Hoddm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">~ (<span class=\"mi\">2</span> | m)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk29b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk29b\"><span class=\"nb\">destruct</span> Hoddm <span class=\"kr\">as</span> [b -&gt;].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * e) (g st)</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * d) (f st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n\n| pre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a)</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) =\na mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">~ (<span class=\"mi\">2</span> | <span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk29c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk29c\"><span class=\"nb\">intros</span> Hdivide.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * e) (g st)</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * d) (f st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n\n| pre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a)</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) =\na mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> | <span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kt\">False</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk29d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk29d\"><span class=\"nb\">apply</span> (Z.divide_add_cancel_r _ _ _ (Z.divide_factor_l _ _)) <span class=\"kr\">in</span> Hdivide.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * e) (g st)</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * d) (f st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n\n| pre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a)</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) =\na mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">2</span> | <span class=\"mi\">1</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kt\">False</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk29e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk29e\"><span class=\"nb\">apply</span> Z.divide_1_r_abs <span class=\"kr\">in</span> Hdivide.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * e) (g st)</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) (x * d) (f st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n\n| pre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a)</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) a mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>) =\na mod (<span class=\"mi\">2</span> * b + <span class=\"mi\">1</span>)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hdivide</var><span class=\"hyp-type\"><b>: </b><span>Z.abs <span class=\"mi\">2</span> = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kt\">False</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">discriminate</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk29f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk29f\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m\n  (x *\n   (pre_div62Modulo m\n      (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (f (fst (stepN n st))) /\\\neqm m\n  (x *\n   (pre_div62Modulo m\n      (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n       r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n    <span class=\"mi\">2</span> ^ Z.of_nat n)) (g (fst (stepN n st)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a0\"><span class=\"nb\">unfold</span> eqm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x *\n (pre_div62Modulo m\n    (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \nf (fst (stepN n st)) mod m /\\\n(x *\n (pre_div62Modulo m\n    (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a1\"><span class=\"nb\">rewrite</span> &lt;- !(Zmult_mod_idemp_l x).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x mod m *\n (pre_div62Modulo m\n    (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \nf (fst (stepN n st)) mod m /\\\n(x mod m *\n (pre_div62Modulo m\n    (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a2\"><span class=\"nb\">replace</span> x <span class=\"kr\">with</span> (x*<span class=\"mi\">1</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((x * <span class=\"mi\">1</span>) mod m *\n (pre_div62Modulo m\n    (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \nf (fst (stepN n st)) mod m /\\\n((x * <span class=\"mi\">1</span>) mod m *\n (pre_div62Modulo m\n    (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a3\"><span class=\"nb\">rewrite</span> &lt;- !(Zmult_mod_idemp_r <span class=\"mi\">1</span>), &lt;-Hinv, !Zmult_mod_idemp_r, !Zmult_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x * (modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n) *\n (pre_div62Modulo m\n    (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \nf (fst (stepN n st)) mod m /\\\n(x * (modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n) *\n (pre_div62Modulo m\n    (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) /\n  <span class=\"mi\">2</span> ^ Z.of_nat n)) mod m = \ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a4\"><span class=\"nb\">rewrite</span> &lt;-!Z.mul_assoc, &lt;-!Zdivide_Zdiv_eq <span class=\"bp\">by</span> <span class=\"nb\">auto</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x *\n (modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n  pre_div62Modulo m\n    (u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))))) mod m =\nf (fst (stepN n st)) mod m /\\\n(x *\n (modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n  pre_div62Modulo m\n    (q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n     r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))))) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a5\"><span class=\"nb\">rewrite</span> !Z.mul_assoc, &lt;-!(Zmult_mod_idemp_r (pre_div62Modulo m _)), !Hpre1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n ((u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) mod m)) mod m =\nf (fst (stepN n st)) mod m /\\\n(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n ((q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) mod m)) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a6\"><span class=\"nb\">assert</span> (Hab : <span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span>, eqm m (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) + b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) (a*d + b*e)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"divstep-v-chk2a7\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><label class=\"goal-separator\" for=\"divstep-v-chk2a7\"><hr></label><div class=\"goal-conclusion\">(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n ((u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) mod m)) mod m =\nf (fst (stepN n st)) mod m /\\\n(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n ((q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) mod m)) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a8\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2a9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2a9\"><span class=\"nb\">intros</span> a b.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">eqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Zplus_eqm;<span class=\"nb\">apply</span> Zmult_eqm;<span class=\"kp\">try</span> <span class=\"nb\">apply</span> eqm_refl;<span class=\"nb\">destruct</span> (Z.ltb _ _);<span class=\"nb\">unfold</span> eqm;\n  <span class=\"nb\">rewrite</span> &lt;-Zplus_mod_idemp_r, <span class=\"nl\">?Z_mod_same_full</span>, <span class=\"nl\">?Zmod_0_l</span>;<span class=\"nb\">f_equal</span>;<span class=\"kp\">try</span> <span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2aa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2aa\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n ((u * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   v * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) mod m)) mod m =\nf (fst (stepN n st)) mod m /\\\n(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m *\n ((q * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   r * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>))) mod m)) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2ab\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2ab\"><span class=\"nb\">rewrite</span> !Hab, !Zmult_mod_idemp_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * (u * d + v * e))\nmod m = f (fst (stepN n st)) mod m /\\\n(x * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * (q * d + r * e))\nmod m = g (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2ac\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2ac\"><span class=\"nb\">rewrite</span> !(Z.mul_comm (x * _)), !Z.mul_assoc, !(Z.mul_add_distr_r _ _ x).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((u * d * x + v * e * x) * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m)\nmod m = f (fst (stepN n st)) mod m /\\\n((q * d * x + r * e * x) * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m)\nmod m = g (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2ad\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2ad\"><span class=\"nb\">rewrite</span> &lt;-!Z.mul_assoc, !(Z.mul_comm _ x).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((u * (x * d) + v * (x * e)) *\n modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m) mod m =\nf (fst (stepN n st)) mod m /\\\n((q * (x * d) + r * (x * e)) *\n modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2ae\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2ae\"><span class=\"nb\">rewrite</span> &lt;-!(Zmult_mod_idemp_l (_ + _)), !(Zplus_mod (_ * (x * d))), &lt;- !(Zmult_mod_idemp_r (x * _)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(((u * ((x * d) mod m)) mod m +\n  (v * ((x * e) mod m)) mod m) mod m *\n modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m) mod m =\nf (fst (stepN n st)) mod m /\\\n(((q * ((x * d) mod m)) mod m +\n  (r * ((x * e) mod m)) mod m) mod m *\n modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2af\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2af\"><span class=\"nb\">rewrite</span> Hf, Hg, !Zmult_mod_idemp_r, &lt;-!Zplus_mod, !Zmult_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((u * f st + v * g st) * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m)\nmod m = f (fst (stepN n st)) mod m /\\\n((q * f st + r * g st) * modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m)\nmod m = g (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2b0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2b0\"><span class=\"nb\">rewrite</span> !(Z.mul_comm (_ + _)), &lt;-Hfuv, &lt;-Hgqr, !Z.mul_assoc.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n *\n f (fst (stepN n st))) mod m =\nf (fst (stepN n st)) mod m /\\\n(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n *\n g (fst (stepN n st))) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"divstep-v-chk2b1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"divstep-v-chk2b1\"><span class=\"nb\">rewrite</span> &lt;-!(Zmult_mod_idemp_l (_ * _)), Hinv, !Zmult_mod_idemp_l, !Z.mul_1_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>m, x, d, e</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>st</var><span class=\"hyp-type\"><b>: </b><span>State</span></span></span><br><span><var>Hoddm</var><span class=\"hyp-type\"><b>: </b><span>Zodd m</span></span></span><br><span><var>Hf</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * d) (f st)</span></span></span><br><span><var>Hg</var><span class=\"hyp-type\"><b>: </b><span>eqm m (x * e) (g st)</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>u, v, q, r</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hgqr</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * g (fst (stepN n st)) =\nq * f st + r * g st</span></span></span><br><span><var>Hfuv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ Z.of_nat n * f (fst (stepN n st)) =\nu * f st + v * g st</span></span></span><br><span><var>Hpre1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\npre_div62Modulo m a mod m = a mod m</span></span></span><br><span><var>Hpre2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">2</span> ^ Z.of_nat n | pre_div62Modulo m a)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; <span class=\"mi\">2</span> ^ Z.of_nat n</span></span></span><br><span><var>Hinv</var><span class=\"hyp-type\"><b>: </b><span>(modInv (<span class=\"mi\">2</span> ^ Z.of_nat n) m * <span class=\"mi\">2</span> ^ Z.of_nat n)\nmod m = <span class=\"mi\">1</span> mod m</span></span></span><br><span><var>Hab</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">b</span> : Z,\neqm m\n  (a * (d + (<span class=\"kr\">if</span> d &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) +\n   b * (e + (<span class=\"kr\">if</span> e &lt;? <span class=\"mi\">0</span> <span class=\"kr\">then</span> m <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  (a * d + b * e)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f (fst (stepN n st)) mod m =\nf (fst (stepN n st)) mod m /\\\ng (fst (stepN n st)) mod m =\ng (fst (stepN n st)) mod m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span></span></pre></article></body></html>"
  },
  {
    "path": "alectryon/pygments.css",
    "content": "/* Pygments stylesheet generated by Alectryon (style=None) */\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll, .code .hll { background-color: #ffffcc }\n.highlight .c, .code .c { color: #555753; font-style: italic } /* Comment */\n.highlight .err, .code .err { color: #a40000; border: 1px solid #cc0000 } /* Error */\n.highlight .g, .code .g { color: #000000 } /* Generic */\n.highlight .k, .code .k { color: #8f5902 } /* Keyword */\n.highlight .l, .code .l { color: #2e3436 } /* Literal */\n.highlight .n, .code .n { color: #000000 } /* Name */\n.highlight .o, .code .o { color: #000000 } /* Operator */\n.highlight .x, .code .x { color: #2e3436 } /* Other */\n.highlight .p, .code .p { color: #000000 } /* Punctuation */\n.highlight .ch, .code .ch { color: #555753; font-weight: bold; font-style: italic } /* Comment.Hashbang */\n.highlight .cm, .code .cm { color: #555753; font-style: italic } /* Comment.Multiline */\n.highlight .cp, .code .cp { color: #3465a4; font-style: italic } /* Comment.Preproc */\n.highlight .cpf, .code .cpf { color: #555753; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1, .code .c1 { color: #555753; font-style: italic } /* Comment.Single */\n.highlight .cs, .code .cs { color: #3465a4; font-weight: bold; font-style: italic } /* Comment.Special */\n.highlight .gd, .code .gd { color: #a40000 } /* Generic.Deleted */\n.highlight .ge, .code .ge { color: #000000; font-style: italic } /* Generic.Emph */\n.highlight .ges, .code .ges { color: #000000 } /* Generic.EmphStrong */\n.highlight .gr, .code .gr { color: #a40000 } /* Generic.Error */\n.highlight .gh, .code .gh { color: #a40000; font-weight: bold } /* Generic.Heading */\n.highlight .gi, .code .gi { color: #4e9a06 } /* Generic.Inserted */\n.highlight .go, .code .go { color: #000000; font-style: italic } /* Generic.Output */\n.highlight .gp, .code .gp { color: #8f5902 } /* Generic.Prompt */\n.highlight .gs, .code .gs { color: #000000; font-weight: bold } /* Generic.Strong */\n.highlight .gu, .code .gu { color: #000000; font-weight: bold } /* Generic.Subheading */\n.highlight .gt, .code .gt { color: #000000; font-style: italic } /* Generic.Traceback */\n.highlight .kc, .code .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */\n.highlight .kd, .code .kd { color: #4e9a06; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn, .code .kn { color: #4e9a06; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp, .code .kp { color: #204a87 } /* Keyword.Pseudo */\n.highlight .kr, .code .kr { color: #8f5902 } /* Keyword.Reserved */\n.highlight .kt, .code .kt { color: #204a87 } /* Keyword.Type */\n.highlight .ld, .code .ld { color: #2e3436 } /* Literal.Date */\n.highlight .m, .code .m { color: #2e3436 } /* Literal.Number */\n.highlight .s, .code .s { color: #ad7fa8 } /* Literal.String */\n.highlight .na, .code .na { color: #c4a000 } /* Name.Attribute */\n.highlight .nb, .code .nb { color: #75507b } /* Name.Builtin */\n.highlight .nc, .code .nc { color: #204a87 } /* Name.Class */\n.highlight .no, .code .no { color: #ce5c00 } /* Name.Constant */\n.highlight .nd, .code .nd { color: #3465a4; font-weight: bold } /* Name.Decorator */\n.highlight .ni, .code .ni { color: #c4a000; text-decoration: underline } /* Name.Entity */\n.highlight .ne, .code .ne { color: #cc0000 } /* Name.Exception */\n.highlight .nf, .code .nf { color: #a40000 } /* Name.Function */\n.highlight .nl, .code .nl { color: #3465a4; font-weight: bold } /* Name.Label */\n.highlight .nn, .code .nn { color: #000000 } /* Name.Namespace */\n.highlight .nx, .code .nx { color: #000000 } /* Name.Other */\n.highlight .py, .code .py { color: #000000 } /* Name.Property */\n.highlight .nt, .code .nt { color: #a40000 } /* Name.Tag */\n.highlight .nv, .code .nv { color: #ce5c00 } /* Name.Variable */\n.highlight .ow, .code .ow { color: #8f5902 } /* Operator.Word */\n.highlight .pm, .code .pm { color: #000000 } /* Punctuation.Marker */\n.highlight .w, .code .w { color: #d3d7cf; text-decoration: underline } /* Text.Whitespace */\n.highlight .mb, .code .mb { color: #2e3436 } /* Literal.Number.Bin */\n.highlight .mf, .code .mf { color: #2e3436 } /* Literal.Number.Float */\n.highlight .mh, .code .mh { color: #2e3436 } /* Literal.Number.Hex */\n.highlight .mi, .code .mi { color: #2e3436 } /* Literal.Number.Integer */\n.highlight .mo, .code .mo { color: #2e3436 } /* Literal.Number.Oct */\n.highlight .sa, .code .sa { color: #ad7fa8 } /* Literal.String.Affix */\n.highlight .sb, .code .sb { color: #ad7fa8 } /* Literal.String.Backtick */\n.highlight .sc, .code .sc { color: #ad7fa8; font-weight: bold } /* Literal.String.Char */\n.highlight .dl, .code .dl { color: #ad7fa8 } /* Literal.String.Delimiter */\n.highlight .sd, .code .sd { color: #ad7fa8 } /* Literal.String.Doc */\n.highlight .s2, .code .s2 { color: #ad7fa8 } /* Literal.String.Double */\n.highlight .se, .code .se { color: #ad7fa8; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh, .code .sh { color: #ad7fa8; text-decoration: underline } /* Literal.String.Heredoc */\n.highlight .si, .code .si { color: #ce5c00 } /* Literal.String.Interpol */\n.highlight .sx, .code .sx { color: #ad7fa8 } /* Literal.String.Other */\n.highlight .sr, .code .sr { color: #ad7fa8 } /* Literal.String.Regex */\n.highlight .s1, .code .s1 { color: #ad7fa8 } /* Literal.String.Single */\n.highlight .ss, .code .ss { color: #8f5902 } /* Literal.String.Symbol */\n.highlight .bp, .code .bp { color: #5c35cc } /* Name.Builtin.Pseudo */\n.highlight .fm, .code .fm { color: #a40000 } /* Name.Function.Magic */\n.highlight .vc, .code .vc { color: #ce5c00 } /* Name.Variable.Class */\n.highlight .vg, .code .vg { color: #ce5c00; text-decoration: underline } /* Name.Variable.Global */\n.highlight .vi, .code .vi { color: #ce5c00 } /* Name.Variable.Instance */\n.highlight .vm, .code .vm { color: #ce5c00 } /* Name.Variable.Magic */\n.highlight .il, .code .il { color: #2e3436 } /* Literal.Number.Integer.Long */"
  },
  {
    "path": "alectryon/spec_int128.v.html",
    "content": "<!DOCTYPE html>\n<html class=\"alectryon-standalone\"><head><title>spec_int128.v</title><meta charset=\"utf-8\"><meta content=\"Alectryon\" name=\"generator\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><link href=\"alectryon.css\" rel=\"stylesheet\"><link href=\"pygments.css\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/IBM-type/0.5.4/css/ibm-type.min.css\" integrity=\"sha512-sky5cf9Ts6FY1kstGOBHSybfKqdHR41M0Ldb0BjNiv3ifltoQIsg0zIaQ+wwdwgQ0w9vKFW7Js50lxH9vqNSSw==\" crossorigin=\"anonymous\" />\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/firacode/5.2.0/fira_code.min.css\" integrity=\"sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==\" crossorigin=\"anonymous\" /><script src=\"alectryon.js\"></script></head><body><article class=\"alectryon-root alectryon-windowed\"><div class=\"alectryon-banner\">Built with <a href=\"https://github.com/cpitclaudel/alectryon/\">Alectryon</a>, running Coq+SerAPI v8.17.0+0.17.3. Bubbles (<span class=\"alectryon-bubble\"></span>) indicate interactive fragments: hover for details, tap to reveal contents. Use <kbd>Ctrl+↑</kbd> <kbd>Ctrl+↓</kbd> to navigate, <kbd>Ctrl+🖱️</kbd> to focus. On Mac, use <kbd>⌘</kbd> instead of <kbd>Ctrl</kbd>.</div><pre class=\"alectryon-io highlight\"><!-- Generator: Alectryon --><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> VST.floyd.proofauto.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> VST.msl.iter_sepcon.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> jets_secp256k1.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-int128-v-chk0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-int128-v-chk0\">#[export] <span class=\"kn\">Instance</span> <span class=\"nf\">CompSpecs</span> : compspecs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">compspecs</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">make_compspecs prog.</span><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Defined</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">Int128_modulus</span> : Z := <span class=\"mi\">2</span>^<span class=\"mi\">128</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">Int128_max_unsigned</span> : Z := Int128_modulus - <span class=\"mi\">1</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">Int128_max_signed</span> : Z := <span class=\"mi\">2</span>^<span class=\"mi\">127</span> - <span class=\"mi\">1</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">Int128_min_signed</span> : Z := -<span class=\"mi\">2</span>^<span class=\"mi\">127</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">t_secp256k1_uint128</span> := Tstruct _secp256k1_uint128 noattr.</span><span class=\"alectryon-wsp\">  \n</span></span><span class=\"alectryon-wsp\"><span class=\"c\">(* (secp256k1_uint128_at sh x p) says that the structure pointed to by p</span>\n<span class=\"c\"> * is equivalent to x modulo 2^128.</span>\n<span class=\"c\"> *)</span>\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_uint128_at</span> <span class=\"nv\">sh</span> <span class=\"nv\">x</span> :=\n   data_at sh\n     t_secp256k1_uint128 (Vlong (Int64.repr x), Vlong (Int64.repr (Z.shiftr x <span class=\"mi\">64</span>))).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n<span class=\"c\">(*/</span>\n<span class=\"c\">Definition secp256k1_u128_load_spec : ident * funspec :=</span>\n<span class=\"c\">DECLARE _secp256k1_u128_load</span>\n<span class=\"c\">  WITH r : val, sh : share, hi : Z, lo : Z</span>\n<span class=\"c\">  PRE [ tptr t_secp256k1_uint128, tulong, tulong ]</span>\n<span class=\"c\">    PROP(writable_share sh;</span>\n<span class=\"c\">         0 &lt;= lo &lt; Int64.modulus)</span>\n<span class=\"c\">    PARAMS(r; Vlong (Int64.repr hi); Vlong (Int64.repr lo))</span>\n<span class=\"c\">  SEP(data_at_ sh t_secp256k1_uint128 r)</span>\n<span class=\"c\">POST [ tvoid ]</span>\n<span class=\"c\">  PROP()</span>\n<span class=\"c\">  RETURN()</span>\n<span class=\"c\">  SEP(secp256k1_uint128_at sh (Z.shiftl hi 64 + lo) r).</span>\n<span class=\"c\">*)</span>\n\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_mul_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_mul\n  WITH r : val, sh : share, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tulong, tulong ]\n    PROP(writable_share sh;\n         <span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus;\n         <span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (a * b) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_accum_mul_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_accum_mul\n  WITH r : val, sh : share, r0 : Z, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tulong, tulong ]\n    PROP(writable_share sh;\n         <span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus;\n         <span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 + a * b) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_accum_u64_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_accum_u64\n  WITH r : val, sh : share, r0 : Z, a : Z\n  PRE [ tptr t_secp256k1_uint128, tulong ]\n    PROP(writable_share sh;\n         <span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 + a) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_rshift_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_rshift\n  WITH r : val, sh : share, r0 : Z, n : Z\n  PRE [ tptr t_secp256k1_uint128, tuint ]\n    PROP(writable_share sh;\n         <span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus;\n         <span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span>)\n    PARAMS(r; Vint (Int.repr n))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (Z.shiftr r0 n) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_to_u64_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_to_u64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr r0))\n  SEP(secp256k1_uint128_at sh r0 r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_hi_u64_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_hi_u64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))\n  SEP(secp256k1_uint128_at sh r0 r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_from_u64_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_from_u64\n  WITH r : val, sh : share, a : Z\n  PRE [ tptr t_secp256k1_uint128, tulong ]\n    PROP(writable_share sh;\n         <span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus)\n    PARAMS(r; Vlong (Int64.repr a))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh a r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_u128_check_bits_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_u128_check_bits\n  WITH r : val, sh : share, r0 : Z, n : Z\n  PRE [ tptr t_secp256k1_uint128, tuint ]\n    PROP(readable_share sh;\n         <span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span>^<span class=\"mi\">128</span>;\n         <span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span>)\n    PARAMS(r; Vint (Int.repr n))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr (<span class=\"kr\">if</span> r0 &lt;? <span class=\"mi\">2</span>^n <span class=\"kr\">then</span> <span class=\"mi\">1</span> <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  SEP(secp256k1_uint128_at sh r0 r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n<span class=\"c\">(*</span>\n<span class=\"c\">Definition secp256k1_i128_load_spec : ident * funspec :=</span>\n<span class=\"c\">DECLARE _secp256k1_i128_load</span>\n<span class=\"c\">  WITH r : val, sh : share, hi : Z, lo : Z</span>\n<span class=\"c\">  PRE [ tptr t_secp256k1_uint128, tlong, tulong ]</span>\n<span class=\"c\">    PROP(writable_share sh;</span>\n<span class=\"c\">         Int64.min_signed &lt;= hi &lt;= Int64.max_signed;</span>\n<span class=\"c\">         0 &lt;= lo &lt; Int64.modulus)</span>\n<span class=\"c\">    PARAMS(r; Vlong (Int64.repr hi); Vlong (Int64.repr lo))</span>\n<span class=\"c\">  SEP(data_at_ sh t_secp256k1_uint128 r)</span>\n<span class=\"c\">POST [ tvoid ]</span>\n<span class=\"c\">  PROP()</span>\n<span class=\"c\">  RETURN()</span>\n<span class=\"c\">  SEP(secp256k1_uint128_at sh (Z.shiftl hi 64 + lo) r).</span>\n<span class=\"c\">*)</span>\n\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_mul_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_mul\n  WITH r : val, sh : share, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed &lt;= a &lt;= Int64.max_signed;\n         Int64.min_signed &lt;= b &lt;= Int64.max_signed)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (a * b) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_accum_mul_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_accum_mul\n  WITH r : val, sh : share, r0 : Z, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed &lt;= a &lt;= Int64.max_signed;\n         Int64.min_signed &lt;= b &lt;= Int64.max_signed;\n         Int128_min_signed &lt;= r0 &lt;= Int128_max_signed;\n         Int128_min_signed &lt;= r0 + a * b &lt;= Int128_max_signed)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 + a * b) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_dissip_mul_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_dissip_mul\n  WITH r : val, sh : share, r0 : Z, a : Z, b : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed &lt;= a &lt;= Int64.max_signed;\n         Int64.min_signed &lt;= b &lt;= Int64.max_signed;\n         Int128_min_signed &lt;= r0 &lt;= Int128_max_signed;\n         Int128_min_signed &lt;= r0 - a * b &lt;= Int128_max_signed)\n   PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (r0 - a * b) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_det_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_det\n  WITH r : val, sh : share, a : Z, b : Z, c : Z, d : Z\n  PRE [ tptr t_secp256k1_uint128, tlong, tlong, tlong, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed &lt;= a &lt;= Int64.max_signed;\n         Int64.min_signed &lt;= b &lt;= Int64.max_signed;\n         Int64.min_signed &lt;= c &lt;= Int64.max_signed;\n         Int64.min_signed &lt;= d &lt;= Int64.max_signed)\n    PARAMS(r; Vlong (Int64.repr a); Vlong (Int64.repr b);\n              Vlong (Int64.repr c); Vlong (Int64.repr d))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (a * d - b * c) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_rshift_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_rshift\n  WITH r : val, sh : share, r0 : Z, n : Z\n  PRE [ tptr t_secp256k1_uint128, tuint ]\n    PROP(writable_share sh;\n         Int128_min_signed &lt;= r0 &lt;= Int128_max_signed;\n         <span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span>)\n    PARAMS(r; Vint (Int.repr n))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh (Z.shiftr r0 n) r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_to_u64_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_to_u64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr r0))\n  SEP(secp256k1_uint128_at sh r0 r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_to_i64_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_to_i64\n  WITH r : val, sh : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128 ]\n    PROP(readable_share sh;\n         Int64.min_signed &lt;= r0 &lt;= Int64.max_signed)\n    PARAMS(r)\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tlong ]\n  PROP()\n  RETURN(Vlong (Int64.repr r0))\n  SEP(secp256k1_uint128_at sh r0 r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_from_i64_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_from_i64\n  WITH r : val, sh : share, a : Z\n  PRE [ tptr t_secp256k1_uint128, tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed &lt;= a &lt;= Int64.max_signed)\n    PARAMS(r; Vlong (Int64.repr a))\n  SEP(data_at_ sh t_secp256k1_uint128 r)\nPOST [ tvoid ]\n  PROP()\n  RETURN()\n  SEP(secp256k1_uint128_at sh a r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_eq_var_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_eq_var\n  WITH r : val, shr : share, r0 : Z,\n       s : val, shs : share, s0 : Z\n  PRE [ tptr t_secp256k1_uint128, tptr t_secp256k1_uint128 ]\n    PROP(readable_share shr;\n         readable_share shs)\n    PARAMS(r; s)\n  SEP(secp256k1_uint128_at shr r0 r;\n      secp256k1_uint128_at shs s0 s)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr (<span class=\"kr\">if</span> r0 mod <span class=\"mi\">2</span>^<span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span>^<span class=\"mi\">128</span> <span class=\"kr\">then</span> <span class=\"mi\">1</span> <span class=\"kr\">else</span> <span class=\"mi\">0</span>)))\n  SEP(secp256k1_uint128_at shr r0 r\n     ;secp256k1_uint128_at shs s0 s).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_eq_var_spec_alias</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_eq_var\n  WITH r : val, shr : share, r0 : Z\n  PRE [ tptr t_secp256k1_uint128, tptr t_secp256k1_uint128 ]\n    PROP(readable_share shr)\n    PARAMS(r; r)\n  SEP(secp256k1_uint128_at shr r0 r)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr <span class=\"mi\">1</span>))\n  SEP(secp256k1_uint128_at shr r0 r).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_i128_check_pow2_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_i128_check_pow2\n  WITH r : val, sh : share, r0 : Z, n : Z, sign : Z\n  PRE [ tptr t_secp256k1_uint128, tuint, tint ]\n    PROP(readable_share sh;\n         Int128_min_signed &lt;= r0 &lt;= Int128_max_signed;\n         <span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span>;\n         sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span>)\n    PARAMS(r; Vint (Int.repr n); Vint (Int.repr sign))\n  SEP(secp256k1_uint128_at sh r0 r)\nPOST [ tint ]\n  PROP()\n  RETURN(Vint (Int.repr (Z.b2z (r0 =? sign*<span class=\"mi\">2</span>^n))))\n  SEP(secp256k1_uint128_at sh r0 r).</span><span class=\"alectryon-wsp\">\n</span></span></pre></article></body></html>"
  },
  {
    "path": "alectryon/spec_modinv64.v.html",
    "content": "<!DOCTYPE html>\n<html class=\"alectryon-standalone\"><head><title>spec_modinv64.v</title><meta charset=\"utf-8\"><meta content=\"Alectryon\" name=\"generator\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><link href=\"alectryon.css\" rel=\"stylesheet\"><link href=\"pygments.css\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/IBM-type/0.5.4/css/ibm-type.min.css\" integrity=\"sha512-sky5cf9Ts6FY1kstGOBHSybfKqdHR41M0Ldb0BjNiv3ifltoQIsg0zIaQ+wwdwgQ0w9vKFW7Js50lxH9vqNSSw==\" crossorigin=\"anonymous\" />\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/firacode/5.2.0/fira_code.min.css\" integrity=\"sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==\" crossorigin=\"anonymous\" /><script src=\"alectryon.js\"></script></head><body><article class=\"alectryon-root alectryon-windowed\"><div class=\"alectryon-banner\">Built with <a href=\"https://github.com/cpitclaudel/alectryon/\">Alectryon</a>, running Coq+SerAPI v8.17.0+0.17.3. Bubbles (<span class=\"alectryon-bubble\"></span>) indicate interactive fragments: hover for details, tap to reveal contents. Use <kbd>Ctrl+↑</kbd> <kbd>Ctrl+↓</kbd> to navigate, <kbd>Ctrl+🖱️</kbd> to focus. On Mac, use <kbd>⌘</kbd> instead of <kbd>Ctrl</kbd>.</div><pre class=\"alectryon-io highlight\"><!-- Generator: Alectryon --><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> VST.floyd.proofauto.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> jets_secp256k1.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> Coq.Logic.Eqdep_dec.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> extraMath.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> modinv.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require</span> divstep.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk0\">#[export] <span class=\"kn\">Instance</span> <span class=\"nf\">CompSpecs</span> : compspecs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">compspecs</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">make_compspecs prog.</span><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Defined</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Opaque</span> Z.shiftr Z.pow.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">t_secp256k1_modinv64_signed62</span> := Tstruct _secp256k1_modinv64_signed62 noattr.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">t_secp256k1_modinv64_modinfo</span> := Tstruct _secp256k1_modinv64_modinfo noattr.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Module</span> <span class=\"nf\">Signed62</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">max_signed</span> <span class=\"nv\">n</span> : Z := <span class=\"mi\">2</span>^(n*<span class=\"mi\">62</span>)-<span class=\"mi\">1</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">min_signed</span> <span class=\"nv\">n</span> : Z := -<span class=\"mi\">2</span>^(n*<span class=\"mi\">62</span>).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Fixpoint</span> <span class=\"nf\">signed</span> (<span class=\"nv\">l</span> : list int64) : Z :=\n<span class=\"kr\">match</span> l <span class=\"kr\">with</span>\n| [] =&gt; <span class=\"mi\">0</span>\n| (a :: l&#39;) =&gt; Int64.signed a + <span class=\"mi\">2</span>^<span class=\"mi\">62</span> * signed l&#39;\n<span class=\"kr\">end</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk1\"><span class=\"kn\">Lemma</span> <span class=\"nf\">app_signed</span> <span class=\"nv\">l1</span> <span class=\"nv\">l2</span> : signed (l1 ++ l2) = signed l1 + <span class=\"mi\">2</span>^(Zlength l1 * <span class=\"mi\">62</span>) * signed l2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                          * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk2\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l1, l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                          * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk3\"><span class=\"nb\">revert</span> l2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l1</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">l2</span> : list int64,\nsigned (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                          * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk4\"><span class=\"nb\">induction</span> l1; <span class=\"nb\">intros</span> l2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed ([] ++ l2) = signed []\n                      + <span class=\"mi\">2</span> ^ (Zlength [] * <span class=\"mi\">62</span>)\n                          * signed l2</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l1</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">l2</span> : list int64,\nsigned (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                        * signed l2</span></span></span><br><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk5\"><hr></label><div class=\"goal-conclusion\">signed ((a :: l1) ++ l2) = signed (a :: l1)\n                             + <span class=\"mi\">2</span>\n                                 ^ (Zlength (a :: l1)\n                                      * <span class=\"mi\">62</span>)\n                                 * signed l2</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk6\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed ([] ++ l2) = signed []\n                      + <span class=\"mi\">2</span> ^ (Zlength [] * <span class=\"mi\">62</span>)\n                          * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk7\"><span class=\"nb\">rewrite</span> Z.pow_0_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed ([] ++ l2) = signed [] + <span class=\"mi\">1</span> * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk8\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed l2 = <span class=\"mi\">0</span> + <span class=\"mi\">1</span> * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk9\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l1</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">l2</span> : list int64,\nsigned (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                        * signed l2</span></span></span><br><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed ((a :: l1) ++ l2) = signed (a :: l1)\n                             + <span class=\"mi\">2</span>\n                                 ^ (Zlength (a :: l1)\n                                      * <span class=\"mi\">62</span>)\n                                 * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka\"><span class=\"nb\">rewrite</span> Zlength_cons.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l1</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">l2</span> : list int64,\nsigned (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                        * signed l2</span></span></span><br><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed ((a :: l1) ++ l2) = signed (a :: l1)\n                             + <span class=\"mi\">2</span>\n                                 ^ (Z.succ\n                                      (Zlength l1)\n                                      * <span class=\"mi\">62</span>)\n                                 * signed l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l1</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">l2</span> : list int64,\nsigned (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                        * signed l2</span></span></span><br><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed a + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * signed (l1 ++ l2) = Int64.signed\n                                                a\n                                                + \n                                                <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                                                 * \n                                                 signed\n                                                 l1\n                                                + \n                                                <span class=\"mi\">2</span>\n                                                 ^ \n                                                 (Z.succ\n                                                 (Zlength\n                                                 l1)\n                                                 * <span class=\"mi\">62</span>)\n                                                 * \n                                                 signed\n                                                 l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc\"><span class=\"nb\">assert</span> (Hlen := Zlength_nonneg l1).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l1</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>IHl1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">l2</span> : list int64,\nsigned (l1 ++ l2) = signed l1\n                      + <span class=\"mi\">2</span> ^ (Zlength l1 * <span class=\"mi\">62</span>)\n                        * signed l2</span></span></span><br><span><var>l2</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hlen</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Zlength l1</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed a + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * signed (l1 ++ l2) = Int64.signed\n                                                a\n                                                + \n                                                <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                                                 * \n                                                 signed\n                                                 l1\n                                                + \n                                                <span class=\"mi\">2</span>\n                                                 ^ \n                                                 (Z.succ\n                                                 (Zlength\n                                                 l1)\n                                                 * <span class=\"mi\">62</span>)\n                                                 * \n                                                 signed\n                                                 l2</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> IHl1, Z.mul_succ_l, Z.pow_add_r; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Fixpoint</span> <span class=\"nf\">reprn</span> (<span class=\"nv\">n</span> : nat) (<span class=\"nv\">a</span> : Z) : list int64 :=\n<span class=\"kr\">match</span> n <span class=\"kr\">with</span>\n| <span class=\"mi\">0</span>%nat =&gt; []\n| <span class=\"mi\">1</span>%nat =&gt; [Int64.repr a]\n| (S n0) =&gt; Int64.repr (a mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) :: (reprn n0 (Z.shiftr a <span class=\"mi\">62</span>))\n<span class=\"kr\">end</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd\"><span class=\"kn\">Lemma</span> <span class=\"nf\">reprn_length</span> <span class=\"nv\">n</span> : <span class=\"kr\">forall</span> <span class=\"nv\">a</span>, length (reprn n a) = n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, Datatypes.length (reprn n a) = n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, Datatypes.length (reprn n a) = n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf\"><span class=\"nb\">induction</span> n;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, Datatypes.length (reprn n a) = n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, Datatypes.length (reprn (S n) a) = S n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk10\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk10\"><span class=\"nb\">destruct</span> n;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, Datatypes.length (reprn (S n) a) = S n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nDatatypes.length (reprn (S (S n)) a) = S (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">intro</span> a; <span class=\"nb\">simpl</span> <span class=\"kr\">in</span> *; <span class=\"nb\">rewrite</span> IHn; <span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk11\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk11\"><span class=\"kn\">Lemma</span> <span class=\"nf\">reprn_Zlength</span> <span class=\"nv\">n</span> : <span class=\"kr\">forall</span> <span class=\"nv\">a</span>, Zlength (reprn n a) = Z.of_nat n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, Zlength (reprn n a) = Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk12\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk12\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z, Zlength (reprn n a) = Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk13\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk13\"><span class=\"nb\">intros</span> a.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zlength (reprn n a) = Z.of_nat n</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Zlength_correct, Signed62.reprn_length; <span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk14\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk14\"><span class=\"kn\">Lemma</span> <span class=\"nf\">reprn_succ</span> <span class=\"nv\">n</span> <span class=\"nv\">a</span> : reprn (S n) a = \n  reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++ [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">reprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n                [Int64.repr\n                   (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk15\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk15\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">reprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n                [Int64.repr\n                   (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk16\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk16\"><span class=\"nb\">revert</span> a; <span class=\"nb\">induction</span> n; <span class=\"nb\">intros</span> a;[<span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">reprn (S (S n)) a = reprn (S n)\n                      (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n                    [Int64.repr\n                       (Z.shiftr a\n                          (<span class=\"mi\">62</span> * Z.of_nat (S n)))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk17\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk17\"><span class=\"nb\">pattern</span> (S n).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">fun</span> <span class=\"nv\">n</span> : nat =&gt;\n reprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n                 [Int64.repr\n                    (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))])\n  (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk18\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk18\"><span class=\"nb\">simpl</span> (reprn (S _) a).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">fun</span> <span class=\"nv\">n</span> : nat =&gt;\n <span class=\"kr\">match</span> n <span class=\"kr\">with</span>\n | <span class=\"mi\">0</span>%nat =&gt; [Int64.repr a]\n | S _ =&gt;\n     Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n     :: reprn n (Z.shiftr a <span class=\"mi\">62</span>)\n <span class=\"kr\">end</span> = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n       [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))])\n  (S n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk19\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk19\"><span class=\"nb\">cbn</span> beta.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">match</span> S n <span class=\"kr\">with</span>\n| <span class=\"mi\">0</span>%nat =&gt; [Int64.repr a]\n| S _ =&gt;\n    Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n    :: reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>)\n<span class=\"kr\">end</span> = reprn (S n) (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n      [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n)))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk1a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk1a\"><span class=\"nb\">rewrite</span> IHn, Z.shiftr_shiftr, Nat2Z.inj_succ, Z.mul_succ_r, Z.add_comm <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n:: reprn n (Z.shiftr a <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>))] = \nreprn (S n) (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk1b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk1b\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S n) a = reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n:: reprn n (Z.shiftr a <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>))] = \n<span class=\"kr\">match</span> n <span class=\"kr\">with</span>\n| <span class=\"mi\">0</span>%nat =&gt;\n    [Int64.repr (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>))]\n| S _ =&gt;\n    Int64.repr\n      ((a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n    :: reprn n\n         (Z.shiftr (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>))\n            <span class=\"mi\">62</span>)\n<span class=\"kr\">end</span> ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span>))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk1c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk1c\"><span class=\"nb\">destruct</span> n;[<span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S (S n)) a = reprn (S n) (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n)))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n:: reprn (S n)\n     (Z.shiftr a <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))] = \n(Int64.repr\n   ((a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n :: reprn (S n)\n      (Z.shiftr (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))\n         <span class=\"mi\">62</span>)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk1d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk1d\"><span class=\"nb\">rewrite</span> Z.pow_add_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S (S n)) a = reprn (S n) (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n)))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n:: reprn (S n)\n     (Z.shiftr a <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))] = \n(Int64.repr\n   ((a mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n    mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n :: reprn (S n)\n      (Z.shiftr\n         (a mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n         <span class=\"mi\">62</span>)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk1e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk1e\"><span class=\"nb\">rewrite</span> &lt;- Zmod_div_mod, !(Z.shiftr_div_pow2 _ <span class=\"mi\">62</span>) <span class=\"bp\">by</span> (<span class=\"kp\">try</span> <span class=\"bp\">lia</span>; <span class=\"nb\">auto with</span> *).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S (S n)) a = reprn (S n) (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n)))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n:: reprn (S n)\n     ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))] = \n(Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n :: reprn (S n)\n      (a mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n         / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk1f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk1f\"><span class=\"nb\">rewrite</span> (Z.mul_comm _ (<span class=\"mi\">2</span>^<span class=\"mi\">62</span>)), Zaux.Zdiv_mod_mult <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\nreprn (S (S n)) a = reprn (S n) (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n)))]</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n:: reprn (S n)\n     ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n))) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))] = \n(Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n :: reprn (S n)\n      ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)))) ++\n[Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span>))]</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk20\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk20\"><span class=\"kn\">Lemma</span> <span class=\"nf\">reprn_last</span> : <span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">n</span> <span class=\"nv\">d</span>, (<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n  <span class=\"nb\">last</span> (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">n</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr\n                       (Z.shiftr a\n                          (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk21\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk21\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">n</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr\n                       (Z.shiftr a\n                          (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk22\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk22\"><span class=\"nb\">intros</span> a n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">d</span> : int64,\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr\n                       (Z.shiftr a\n                          (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk23\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk23\"><span class=\"nb\">revert</span> a.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr\n                       (Z.shiftr a\n                          (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk24\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk24\"><span class=\"nb\">induction</span> n;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn (S n) a) d = Int64.repr\n                           (Z.shiftr a\n                              (<span class=\"mi\">62</span>\n                                 * (Z.of_nat (S n) - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk25\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk25\"><span class=\"nb\">intros</span> a d Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"nb\">last</span> (reprn (S n) a) d = Int64.repr\n                           (Z.shiftr a\n                              (<span class=\"mi\">62</span>\n                                 * (Z.of_nat (S n) - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk26\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk26\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"nb\">last</span> (reprn (S n) a) d = Int64.repr\n                           (Z.shiftr a\n                              (<span class=\"mi\">62</span>\n                                 * (Z.succ\n                                      (Z.of_nat n)\n                                      - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk27\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk27\"><span class=\"nb\">unfold</span> Z.succ.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"nb\">last</span> (reprn (S n) a) d = Int64.repr\n                           (Z.shiftr a\n                              (<span class=\"mi\">62</span>\n                                 * (Z.of_nat n + <span class=\"mi\">1</span> - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk28\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk28\"><span class=\"nb\">replace</span> (Z.of_nat n + <span class=\"mi\">1</span> - <span class=\"mi\">1</span>) <span class=\"kr\">with</span> (Z.of_nat n) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"nb\">last</span> (reprn (S n) a) d = Int64.repr\n                           (Z.shiftr a\n                              (<span class=\"mi\">62</span> * Z.of_nat n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk29\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk29\"><span class=\"nb\">rewrite</span> reprn_succ.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n<span class=\"nb\">last</span> (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>)))</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"nb\">last</span>\n  (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]) d = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> last_last.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk2a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk2a\"><span class=\"kn\">Lemma</span> <span class=\"nf\">reprn_nth</span> : <span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">n</span> <span class=\"nv\">i</span> <span class=\"nv\">d</span>, (<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\n  nth i (reprn n a) d = Int64.repr ((Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat i))) mod (<span class=\"mi\">2</span>^<span class=\"mi\">62</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">n</span> <span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr\n                        (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i)\n                         mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk2b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk2b\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">n</span> <span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr\n                        (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i)\n                         mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk2c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk2c\"><span class=\"nb\">intros</span> a n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr\n                        (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i)\n                         mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk2d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk2d\"><span class=\"nb\">revert</span> a.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr\n                        (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i)\n                         mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk2e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk2e\"><span class=\"nb\">induction</span> n;[<span class=\"nb\">intros</span>; <span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn (S n) a) d = Int64.repr\n                            (Z.shiftr a\n                               (<span class=\"mi\">62</span> * Z.of_nat i)\n                             mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk2f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk2f\"><span class=\"nb\">intros</span> a i d Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i (reprn (S n) a) d = Int64.repr\n                            (Z.shiftr a\n                               (<span class=\"mi\">62</span> * Z.of_nat i)\n                             mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk30\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk30\"><span class=\"nb\">rewrite</span> reprn_succ.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i\n  (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)) ++\n   [Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat n))]) d = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk31\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk31\"><span class=\"nb\">rewrite</span> app_nth1 <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> reprn_length; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))) d = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk32\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk32\"><span class=\"nb\">destruct</span> (Nat.lt_ge_cases i (n - <span class=\"mi\">1</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))) d = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk33\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk33\"><hr></label><div class=\"goal-conclusion\">nth i (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))) d = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk34\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk34\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))) d = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk35\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk35\"><span class=\"nb\">rewrite</span> IHn, !Z.shiftr_div_pow2, &lt;- (Nat.sub_add i n), Nat2Z.inj_add,\n          Z.mul_add_distr_l, Z.pow_add_r, Z.mul_comm, Zaux.Zdiv_mod_mult <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr\n  (((a / <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i))\n    mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (n - i))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) = \nInt64.repr ((a / <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk36\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk36\"><span class=\"nb\">rewrite</span> !Z.pow_mul_r, &lt;- Zmod_div_mod; <span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> | (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) ^ Z.of_nat (n - i))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk37\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk37\"><span class=\"nb\">apply</span> Zpow_facts.Zpower_divide.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; n - <span class=\"mi\">1</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt; Z.of_nat (n - i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk38\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk38\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))) d = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk39\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk39\"><span class=\"nb\">set</span> (l := (reprn n _)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i l d = Int64.repr\n              (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk3a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk3a\"><span class=\"nb\">replace</span> i <span class=\"kr\">with</span> (n - <span class=\"mi\">1</span>)%nat <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (n - <span class=\"mi\">1</span>) l d = Int64.repr\n                    (Z.shiftr a\n                       (<span class=\"mi\">62</span> * Z.of_nat (n - <span class=\"mi\">1</span>))\n                     mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk3b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk3b\"><span class=\"nb\">replace</span> n <span class=\"kr\">with</span> (length l) <span class=\"nb\">at</span> <span class=\"mi\">1</span> <span class=\"bp\">by</span> <span class=\"nb\">apply</span> reprn_length.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Datatypes.length l - <span class=\"mi\">1</span>) l d = Int64.repr\n                                     (Z.shiftr a\n                                        (<span class=\"mi\">62</span>\n                                           * Z.of_nat\n                                               (n - <span class=\"mi\">1</span>))\n                                      mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk3c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk3c\"><span class=\"nb\">unfold</span> l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth\n  (Datatypes.length\n     (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n)))\n     - <span class=\"mi\">1</span>) (reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))) d = \nInt64.repr\n  (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat (n - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk3d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk3d\"><span class=\"nb\">rewrite</span> nth_last, reprn_last <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr\n  (Z.shiftr (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))\n     (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>))) = Int64.repr\n                                  (Z.shiftr a\n                                     (<span class=\"mi\">62</span>\n                                        * Z.of_nat\n                                            (n - <span class=\"mi\">1</span>))\n                                   mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk3e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk3e\"><span class=\"nb\">replace</span> (<span class=\"mi\">62</span> * Z.of_nat n) <span class=\"kr\">with</span> (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>) + <span class=\"mi\">62</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr\n  (Z.shiftr (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>) + <span class=\"mi\">62</span>))\n     (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>))) = Int64.repr\n                                  (Z.shiftr a\n                                     (<span class=\"mi\">62</span>\n                                        * Z.of_nat\n                                            (n - <span class=\"mi\">1</span>))\n                                   mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk3f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk3f\"><span class=\"nb\">rewrite</span> Z.pow_add_r, !Z.shiftr_div_pow2, Zaux.Zdiv_mod_mult <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr\n  ((a / <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n - <span class=\"mi\">1</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) = \nInt64.repr\n  ((a / <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (n - <span class=\"mi\">1</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk40\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk40\"><span class=\"kp\">repeat</span> <span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat) (<span class=\"nv\">d</span> : int64),\n(<span class=\"mi\">0</span> &lt;= i &lt; n - <span class=\"mi\">1</span>)%nat -&gt;\nnth i (reprn n a) d = Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * Z.of_nat i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>d</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; S n - <span class=\"mi\">1</span>)%nat</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(n - <span class=\"mi\">1</span> &lt;= i)%nat</span></span></span><br><span><var>l</var><span><span class=\"hyp-body\"><b>:= </b><span>reprn n (a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n))</span></span><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.of_nat n - <span class=\"mi\">1</span> = Z.of_nat (n - <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk41\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk41\"><span class=\"kn\">Lemma</span> <span class=\"nf\">reprn_Znth</span> : <span class=\"kr\">forall</span> <span class=\"nv\">a</span> <span class=\"nv\">n</span> <span class=\"nv\">i</span>, <span class=\"mi\">0</span> &lt;= i &lt; Z.of_nat n - <span class=\"mi\">1</span> -&gt;\n  Znth i (reprn n a) = Int64.repr ((Z.shiftr a (<span class=\"mi\">62</span> * i)) mod (<span class=\"mi\">2</span>^<span class=\"mi\">62</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">n</span> : nat) (<span class=\"nv\">i</span> : Z),\n<span class=\"mi\">0</span> &lt;= i &lt; Z.of_nat n - <span class=\"mi\">1</span> -&gt;\nZnth i (reprn n a) = Int64.repr\n                       (Z.shiftr a (<span class=\"mi\">62</span> * i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk42\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk42\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">n</span> : nat) (<span class=\"nv\">i</span> : Z),\n<span class=\"mi\">0</span> &lt;= i &lt; Z.of_nat n - <span class=\"mi\">1</span> -&gt;\nZnth i (reprn n a) = Int64.repr\n                       (Z.shiftr a (<span class=\"mi\">62</span> * i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk43\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk43\"><span class=\"nb\">intros</span> a n i Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Z.of_nat n - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth i (reprn n a) = Int64.repr\n                       (Z.shiftr a (<span class=\"mi\">62</span> * i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk44\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk44\"><span class=\"nb\">rewrite</span> &lt;- nth_Znth <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> reprn_Zlength; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Z.of_nat n - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (reprn n a) Inhabitant_int64 = Int64.repr\n                                                 (Z.shiftr\n                                                 a\n                                                 (<span class=\"mi\">62</span>\n                                                 * i)\n                                                 mod \n                                                 <span class=\"mi\">2</span>\n                                                 ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk45\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk45\"><span class=\"nb\">rewrite</span> reprn_nth, Z2Nat.id <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Z.of_nat n - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * i) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) = Int64.repr\n                                                (Z.shiftr\n                                                 a\n                                                 (<span class=\"mi\">62</span>\n                                                 * i)\n                                                 mod \n                                                 <span class=\"mi\">2</span>\n                                                 ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk46\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk46\"><span class=\"kn\">Lemma</span> <span class=\"nf\">signed_firstn_reprn</span> <span class=\"nv\">a</span> <span class=\"nv\">i</span> <span class=\"nv\">n</span> : (i &lt; n)%nat -&gt; signed (firstn i (reprn n a)) = a mod (<span class=\"mi\">2</span>^(<span class=\"mi\">62</span>*Z.of_nat i)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i, n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(i &lt; n)%nat -&gt;\nsigned (firstn i (reprn n a)) = a\n                                mod <span class=\"mi\">2</span>\n                                      ^ (<span class=\"mi\">62</span>\n                                           * Z.of_nat\n                                               i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk47\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk47\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i, n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(i &lt; n)%nat -&gt;\nsigned (firstn i (reprn n a)) = a\n                                mod <span class=\"mi\">2</span>\n                                      ^ (<span class=\"mi\">62</span>\n                                           * Z.of_nat\n                                               i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk48\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk48\"><span class=\"nb\">revert</span> a i.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; n)%nat -&gt;\nsigned (firstn i (reprn n a)) = a\n                                mod <span class=\"mi\">2</span>\n                                      ^ (<span class=\"mi\">62</span>\n                                           * Z.of_nat\n                                               i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk49\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk49\"><span class=\"nb\">induction</span> n;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; n)%nat -&gt; signed (firstn i (reprn n a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a\n                                    mod <span class=\"mi\">2</span>\n                                          ^ (<span class=\"mi\">62</span>\n                                               * Z.of_nat\n                                                 i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk4a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk4a\"><span class=\"nb\">intros</span> a [|i];[<span class=\"nb\">simpl</span>; <span class=\"nb\">rewrite</span> Z.pow_0_r, Zmod_1_r; <span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; n)%nat -&gt; signed (firstn i (reprn n a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(S i &lt; S n)%nat -&gt;\nsigned (firstn (S i) (reprn (S n) a)) = a\n                                        mod <span class=\"mi\">2</span>\n                                              ^ (<span class=\"mi\">62</span>\n                                                 * Z.of_nat\n                                                 (S i))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk4b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk4b\"><span class=\"nb\">intros</span> Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; n)%nat -&gt; signed (firstn i (reprn n a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(S i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed (firstn (S i) (reprn (S n) a)) = a\n                                        mod <span class=\"mi\">2</span>\n                                              ^ (<span class=\"mi\">62</span>\n                                                 * Z.of_nat\n                                                 (S i))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk4c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk4c\"><span class=\"nb\">apply</span> Nat.succ_lt_mono <span class=\"kr\">in</span> Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; n)%nat -&gt; signed (firstn i (reprn n a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed (firstn (S i) (reprn (S n) a)) = a\n                                        mod <span class=\"mi\">2</span>\n                                              ^ (<span class=\"mi\">62</span>\n                                                 * Z.of_nat\n                                                 (S i))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk4d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk4d\"><span class=\"nb\">destruct</span> n;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed (firstn (S i) (reprn (S (S n)) a)) = a\n                                            mod <span class=\"mi\">2</span>\n                                                 ^ \n                                                 (<span class=\"mi\">62</span>\n                                                 * Z.of_nat\n                                                 (S i))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk4e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk4e\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.mul_succ_r, Z.pow_add_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">signed (firstn (S i) (reprn (S (S n)) a)) = a\n                                            mod (<span class=\"mi\">2</span>\n                                                 ^ (<span class=\"mi\">62</span>\n                                                 * Z.of_nat\n                                                 i)\n                                                 * <span class=\"mi\">2</span>\n                                                 ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk4f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk4f\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n      * signed\n          (firstn i\n             <span class=\"kr\">match</span> n <span class=\"kr\">with</span>\n             | <span class=\"mi\">0</span>%nat =&gt; [Int64.repr (Z.shiftr a <span class=\"mi\">62</span>)]\n             | S _ =&gt;\n                 Int64.repr (Z.shiftr a <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n                 :: reprn n\n                      (Z.shiftr (Z.shiftr a <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n             <span class=\"kr\">end</span>) = a\n                    mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)\n                           * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk50\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk50\"><span class=\"nb\">change</span> (signed _) <span class=\"kr\">with</span> (signed (firstn i (reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>)))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n      * signed\n          (firstn i (reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>))) = \na mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk51\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk51\"><span class=\"nb\">rewrite</span> IHn <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (Z.shiftr a <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)) = \na mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk52\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk52\"><span class=\"nb\">rewrite</span> Int64.signed_repr <span class=\"bp\">by</span> solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (Z.shiftr a <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)) = \na mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk53\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk53\"><span class=\"nb\">rewrite</span> Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)) = \na mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk54\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk54\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">a mod (<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) = a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                                           + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                                               * ((a\n                                                 / <span class=\"mi\">2</span>\n                                                 ^ <span class=\"mi\">62</span>)\n                                                 mod \n                                                 <span class=\"mi\">2</span>\n                                                 ^ (<span class=\"mi\">62</span>\n                                                 * Z.of_nat\n                                                 i))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk55\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk55\"><span class=\"nb\">rewrite</span> Zmod_recombine <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> (<span class=\"nv\">a</span> : Z) (<span class=\"nv\">i</span> : nat),\n(i &lt; S n)%nat -&gt;\nsigned (firstn i (reprn (S n) a)) = a mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i)</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(i &lt; S n)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n  + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                     + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                         * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n                            mod <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat i))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">ring</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk56\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk56\"><span class=\"kn\">Lemma</span> <span class=\"nf\">signed_reprn</span> <span class=\"nv\">a</span> <span class=\"nv\">n</span> : (<span class=\"mi\">1</span> &lt;= n)%nat -&gt; -<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\n signed (reprn n a) = a.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn n a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk57\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk57\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn n a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk58\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk58\"><span class=\"nb\">revert</span> a.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn n a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk59\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk59\"><span class=\"nb\">induction</span> n;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn n a) = a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S n) a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk5a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk5a\"><span class=\"nb\">intros</span> a _.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn n a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S n) a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk5b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk5b\"><span class=\"nb\">rewrite</span> Nat2Z.inj_succ, Z.mul_succ_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn n a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat n + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S n) a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk5c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk5c\"><span class=\"nb\">destruct</span> n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= <span class=\"mi\">0</span>)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn <span class=\"mi\">0</span> a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn <span class=\"mi\">1</span> a) = a</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk5d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk5d\"><hr></label><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S (S n)) a) = a</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk5e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk5e\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= <span class=\"mi\">0</span>)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn <span class=\"mi\">0</span> a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn <span class=\"mi\">1</span> a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk5f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk5f\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= <span class=\"mi\">0</span>)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn <span class=\"mi\">0</span> a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> -&gt;\nInt64.signed (Int64.repr a) + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">0</span> = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk60\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk60\"><span class=\"nb\">intros</span> Ha.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= <span class=\"mi\">0</span>)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat <span class=\"mi\">0</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn <span class=\"mi\">0</span> a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed (Int64.repr a) + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">0</span> = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Int64.signed_repr;[<span class=\"bp\">lia</span>|<span class=\"bp\">assumption</span>].</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk61\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk61\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S (S n)) a) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk62\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk62\"><span class=\"nb\">change</span> (reprn _ a) <span class=\"kr\">with</span> (Int64.repr (a mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) :: (reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned\n  (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n   :: reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>)) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk63\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk63\"><span class=\"nb\">cbn</span> [signed].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) &lt;= a &lt;= <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nsigned (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n) + <span class=\"mi\">62</span> + <span class=\"mi\">1</span>) - <span class=\"mi\">1</span> -&gt;\nInt64.signed (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * signed (reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>)) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk64\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk64\"><span class=\"nb\">rewrite</span> !Z.pow_add_r <span class=\"kr\">in</span> * <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span> -&gt; signed (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span> -&gt;\nInt64.signed (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * signed (reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>)) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk65\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk65\"><span class=\"nb\">intros</span> Ha.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span> -&gt; signed (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;=\na &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * signed (reprn (S n) (Z.shiftr a <span class=\"mi\">62</span>)) = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk66\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk66\"><span class=\"nb\">rewrite</span> IHn <span class=\"bp\">by</span> solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span> -&gt; signed (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;=\na &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.signed (Int64.repr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * Z.shiftr a <span class=\"mi\">62</span> = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk67\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk67\"><span class=\"nb\">rewrite</span> Int64.signed_repr <span class=\"bp\">by</span> solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span> -&gt; signed (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;=\na &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> + <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * Z.shiftr a <span class=\"mi\">62</span> = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk68\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk68\"><span class=\"nb\">rewrite</span> Z.shiftr_div_pow2, Z.add_comm <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span> -&gt; signed (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;=\na &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk69\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk69\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>IHn</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">forall</span> <span class=\"nv\">a</span> : Z,\n(<span class=\"mi\">1</span> &lt;= S n)%nat -&gt;\n-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span> -&gt; signed (reprn (S n) a) = a</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-(<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) &lt;=\na &lt;=\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * Z.of_nat (S n)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">a = <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> Z_div_mod_eq_full.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk6a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk6a\"><span class=\"kn\">Lemma</span> <span class=\"nf\">reprn_shrink</span> <span class=\"nv\">a</span> <span class=\"nv\">n1</span> <span class=\"nv\">n2</span> : (min_signed (Z.of_nat n1) &lt;= a &lt;= max_signed (Z.of_nat n1)) -&gt; (<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat -&gt; \n     (firstn n1\n        (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n           (Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n              (Int64.repr (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))))) =\n     (reprn n1 a).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1) -&gt;\n(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat -&gt;\nfirstn n1\n  (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n     (Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n        (Int64.repr\n           (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))) = \nreprn n1 a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk6b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk6b\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1) -&gt;\n(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat -&gt;\nfirstn n1\n  (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n     (Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n        (Int64.repr\n           (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))) = \nreprn n1 a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk6c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk6c\"><span class=\"nb\">intros</span> Ha Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">firstn n1\n  (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n     (Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n        (Int64.repr\n           (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))) = \nreprn n1 a</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk6d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk6d\"><span class=\"nb\">apply</span> (nth_eq_ext _ default);\n  <span class=\"nb\">rewrite</span> firstn_length, &lt;-ZtoNat_Zlength, Zlength_upd_Znth, ZtoNat_Zlength, !reprn_length;\n[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : nat,\n(<span class=\"mi\">0</span> &lt;= i &lt; Init.Nat.min n1 n2)%nat -&gt;\nnth i\n  (firstn n1\n     (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n        (Int64.or\n           (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n           (Int64.repr\n              (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))))\n  default = nth i (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk6e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk6e\"><span class=\"nb\">replace</span> (Init.Nat.min n1 n2) <span class=\"kr\">with</span> n1 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : nat,\n(<span class=\"mi\">0</span> &lt;= i &lt; n1)%nat -&gt;\nnth i\n  (firstn n1\n     (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n        (Int64.or\n           (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n           (Int64.repr\n              (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))))\n  default = nth i (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk6f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk6f\"><span class=\"nb\">intros</span> i Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i\n  (firstn n1\n     (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n        (Int64.or\n           (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n           (Int64.repr\n              (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))))\n  default = nth i (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk70\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk70\"><span class=\"nb\">rewrite</span> nth_firstn <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= i &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth i\n  (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n     (Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n        (Int64.repr\n           (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))))\n  default = nth i (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk71\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk71\"><span class=\"nb\">destruct</span> (Nat.eq_dec i (n1 - <span class=\"mi\">1</span>)) <span class=\"kr\">as</span> [-&gt;|Hneq];<span class=\"nb\">rewrite</span> nth_Znth&#39;;\n[|<span class=\"nb\">rewrite</span> reprn_nth, Znth_upd_Znth_diff, reprn_Znth <span class=\"bp\">by</span> <span class=\"bp\">lia</span>; <span class=\"bp\">reflexivity</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat (n1 - <span class=\"mi\">1</span>))\n  (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n     (Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n        (Int64.repr\n           (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))) = \nnth (n1 - <span class=\"mi\">1</span>) (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk72\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk72\"><span class=\"nb\">replace</span> (Z.of_nat (n1 - <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> (Z.of_nat n1 - <span class=\"mi\">1</span>) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat n1 - <span class=\"mi\">1</span>)\n  (upd_Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a)\n     (Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n        (Int64.repr\n           (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))) = \nnth (n1 - <span class=\"mi\">1</span>) (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk73\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk73\"><span class=\"nb\">rewrite</span> upd_Znth_same <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> reprn_Zlength; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.or (Znth (Z.of_nat n1 - <span class=\"mi\">1</span>) (reprn n2 a))\n  (Int64.repr\n     (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)) = \nnth (n1 - <span class=\"mi\">1</span>) (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk74\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk74\"><span class=\"nb\">rewrite</span> reprn_Znth <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.or\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr\n     (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)) = \nnth (n1 - <span class=\"mi\">1</span>) (reprn n1 a) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk75\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk75\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (n1 - <span class=\"mi\">1</span>) (reprn n1 a) default = Int64.or\n                                      (Int64.repr\n                                         (Z.shiftr a\n                                            (<span class=\"mi\">62</span>\n                                               * (Z.of_nat\n                                                 n1\n                                                 - <span class=\"mi\">1</span>))\n                                          mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n                                      (Int64.repr\n                                         (Z.shiftl\n                                            (<span class=\"kr\">if</span>\n                                              <span class=\"mi\">0</span> &lt;=? a\n                                             <span class=\"kr\">then</span> <span class=\"mi\">0</span>\n                                             <span class=\"kr\">else</span> -<span class=\"mi\">1</span>)\n                                            <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk76\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk76\"><span class=\"nb\">replace</span> n1 <span class=\"kr\">with</span> (length (reprn n1 a)) <span class=\"nb\">at</span> <span class=\"mi\">1</span> <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> reprn_length;<span class=\"bp\">reflexivity</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Datatypes.length (reprn n1 a) - <span class=\"mi\">1</span>) (reprn n1 a)\n  default = Int64.or\n              (Int64.repr\n                 (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))\n                  mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n              (Int64.repr\n                 (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>)\n                    <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk77\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk77\"><span class=\"nb\">rewrite</span> nth_last.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"nb\">last</span> (reprn n1 a) default = Int64.or\n                              (Int64.repr\n                                 (Z.shiftr a\n                                    (<span class=\"mi\">62</span>\n                                       * (Z.of_nat n1\n                                            - <span class=\"mi\">1</span>))\n                                  mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n                              (Int64.repr\n                                 (Z.shiftl\n                                    (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a\n                                     <span class=\"kr\">then</span> <span class=\"mi\">0</span>\n                                     <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk78\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk78\"><span class=\"nb\">rewrite</span> reprn_last <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>min_signed (Z.of_nat n1) &lt;= a &lt;=\nmax_signed (Z.of_nat n1)</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.or\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr\n     (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk79\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk79\"><span class=\"nb\">unfold</span> min_signed, max_signed <span class=\"kr\">in</span> Ha.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.or\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr\n     (Z.shiftl (<span class=\"kr\">if</span> <span class=\"mi\">0</span> &lt;=? a <span class=\"kr\">then</span> <span class=\"mi\">0</span> <span class=\"kr\">else</span> -<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk7a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk7a\"><span class=\"nb\">elim</span> Z.leb_spec;<span class=\"nb\">intros</span> Ha0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.or\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl <span class=\"mi\">0</span> <span class=\"mi\">62</span>))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk7b\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk7b\"><hr></label><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.or\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk7c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk7c\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.or\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl <span class=\"mi\">0</span> <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk7d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk7d\"><span class=\"nb\">rewrite</span> Int64.or_zero.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.repr\n  (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk7e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk7e\"><span class=\"nb\">symmetry</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr\n  (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) = \nInt64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk7f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk7f\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> = Z.shiftr\n                                                 a\n                                                 (<span class=\"mi\">62</span>\n                                                 * (Z.of_nat\n                                                 n1\n                                                 - <span class=\"mi\">1</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk80\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk80\"><span class=\"nb\">apply</span> Z.mod_small.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk81\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk81\"><span class=\"nb\">apply</span> shiftr_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) * <span class=\"mi\">0</span> &lt;= a &lt;\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk82\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk82\"><span class=\"nb\">rewrite</span> &lt;-Z.pow_add_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) * <span class=\"mi\">0</span> &lt;= a &lt;\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>) + <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk83\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk83\"><span class=\"nb\">replace</span> (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>) + <span class=\"mi\">62</span>) <span class=\"kr\">with</span> (Z.of_nat n1 * <span class=\"mi\">62</span>) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) * <span class=\"mi\">0</span> &lt;= a &lt;\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk84\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk84\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.or\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk85\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk85\"><span class=\"nb\">rewrite</span> &lt;- Int64.add_is_or.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.add\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk86\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk86\"><hr></label><div class=\"goal-conclusion\">Int64.<span class=\"kn\">and</span>\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)) = Int64.zero</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk87\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk87\"><span class=\"mi\">2</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.<span class=\"kn\">and</span>\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)) = Int64.zero</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk88\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk88\"><span class=\"nb\">apply</span> Int64.same_bits_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; Int64.zwordsize -&gt;\nInt64.testbit\n  (Int64.<span class=\"kn\">and</span>\n     (Int64.repr\n        (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))\n         mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))\n  i = Int64.testbit Int64.zero i</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk89\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk89\"><span class=\"nb\">intros</span> j Hj.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>j</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hj</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= j &lt; Int64.zwordsize</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.testbit\n  (Int64.<span class=\"kn\">and</span>\n     (Int64.repr\n        (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))\n         mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)) (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)))\n  j = Int64.testbit Int64.zero j</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk8a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk8a\"><span class=\"nb\">rewrite</span> Int64.bits_zero, and64_repr, Int64.testbit_repr <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>j</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hj</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= j &lt; Int64.zwordsize</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit\n  (Z.land\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>)\n     (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)) j = false</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk8b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk8b\"><span class=\"nb\">rewrite</span> &lt;- Z.land_ones, !Z.land_spec, Z.testbit_ones_nonneg, Z.shiftl_spec <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>j</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hj</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= j &lt; Int64.zwordsize</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.testbit (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) j &amp;&amp;\n (j &lt;? <span class=\"mi\">62</span>) &amp;&amp; Z.testbit (-<span class=\"mi\">1</span>) (j - <span class=\"mi\">62</span>))%bool = false</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk8c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk8c\"><span class=\"nb\">elim</span> Z.ltb_spec;[|<span class=\"nb\">rewrite</span> andb_false_r;<span class=\"bp\">reflexivity</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>j</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hj</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= j &lt; Int64.zwordsize</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">j &lt; <span class=\"mi\">62</span> -&gt;\n(Z.testbit (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) j &amp;&amp;\n true &amp;&amp; Z.testbit (-<span class=\"mi\">1</span>) (j - <span class=\"mi\">62</span>))%bool = false</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">intro</span>; <span class=\"nb\">rewrite</span> (Z.testbit_neg_r _ (j - <span class=\"mi\">62</span>)), !andb_false_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>; <span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk8d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk8d\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.add\n  (Int64.repr\n     (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>))\n  (Int64.repr (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk8e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk8e\"><span class=\"nb\">rewrite</span> add64_repr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) = \nInt64.repr\n  (Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n     + Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk8f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk8f\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) = Z.shiftr a\n                                        (<span class=\"mi\">62</span>\n                                           * (Z.of_nat\n                                                n1\n                                                - <span class=\"mi\">1</span>))\n                                      mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                                        + Z.shiftl\n                                            (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk90\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk90\"><span class=\"nb\">change</span> (Z.shiftl (-<span class=\"mi\">1</span>) <span class=\"mi\">62</span>) <span class=\"kr\">with</span> (-<span class=\"mi\">2</span>^<span class=\"mi\">62</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) = Z.shiftr a\n                                        (<span class=\"mi\">62</span>\n                                           * (Z.of_nat\n                                                n1\n                                                - <span class=\"mi\">1</span>))\n                                      mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>\n                                        + -<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk91\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk91\"><span class=\"nb\">rewrite</span> &lt;- (Z_mod_plus_full _ <span class=\"mi\">1</span>), Z.mod_small;[<span class=\"bp\">ring</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\nZ.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) + <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk92\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk92\"><span class=\"nb\">rewrite</span> strict_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;=\nZ.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) + <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk93\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk93\"><span class=\"nb\">apply</span> unadd_bounds_small.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> - <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;=\nZ.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) &lt;=\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> - <span class=\"mi\">1</span> - <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk94\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk94\"><span class=\"nb\">setoid_rewrite</span> &lt;- strict_bounds&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> - <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> &lt;=\nZ.shiftr a (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) &lt;\n<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> - <span class=\"mi\">1</span> - <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> + <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk95\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk95\"><span class=\"nb\">apply</span> shiftr_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) * (<span class=\"mi\">0</span> - <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt;= a &lt;\n<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))\n  * (<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> - <span class=\"mi\">1</span> - <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> + <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk96\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk96\"><span class=\"nb\">rewrite</span> Z.mul_0_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) * (<span class=\"mi\">0</span> - <span class=\"mi\">1</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>) &lt;= a &lt;\n<span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk97\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk97\"><span class=\"nb\">cut</span> (-(<span class=\"mi\">2</span>^<span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) &lt;= a &lt; <span class=\"mi\">0</span>);[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-(<span class=\"mi\">2</span> ^ <span class=\"mi\">62</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>))) &lt;= a &lt; <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk98\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk98\"><span class=\"nb\">rewrite</span> &lt;-Z.pow_add_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>n1, n2</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Ha</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) &lt;= a &lt;=\n<span class=\"mi\">2</span> ^ (Z.of_nat n1 * <span class=\"mi\">62</span>) - <span class=\"mi\">1</span></span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">1</span> &lt;= n1 &lt; n2)%nat</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"mi\">0</span> &lt;= n1 - <span class=\"mi\">1</span> &lt; n1)%nat</span></span></span><br><span><var>Ha0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ (<span class=\"mi\">62</span> + <span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) &lt;= a &lt; <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">replace</span> (<span class=\"mi\">62</span> + <span class=\"mi\">62</span> * (Z.of_nat n1 - <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> (Z.of_nat n1 * <span class=\"mi\">62</span>); <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">pad</span> (<span class=\"nv\">l</span> : list int64) : list val := map Vlong l ++ <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - length l).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk99\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk99\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad_nth</span> <span class=\"nv\">i</span> (<span class=\"nv\">l</span> : list int64) : <span class=\"mi\">0</span> &lt;= i &lt; Zlength l -&gt; Znth i (pad l) = Vlong (Znth i l).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt; Zlength l -&gt;\nZnth i (pad l) = Vlong (Znth i l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk9a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk9a\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt; Zlength l -&gt;\nZnth i (pad l) = Vlong (Znth i l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk9b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk9b\"><span class=\"nb\">intros</span> Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth i (pad l) = Vlong (Znth i l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk9c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk9c\"><span class=\"nb\">rewrite</span> &lt;- !nth_Znth; <span class=\"kp\">try</span> <span class=\"nb\">auto</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (pad l) Inhabitant_val = Vlong\n                                            (nth\n                                               (Z.to_nat\n                                                 i) l\n                                               Inhabitant_int64)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk9d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk9d\"><hr></label><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt; Zlength (pad l)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk9e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk9e\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (pad l) Inhabitant_val = Vlong\n                                            (nth\n                                               (Z.to_nat\n                                                 i) l\n                                               Inhabitant_int64)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk9f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk9f\"><span class=\"nb\">assert</span> (Z.to_nat i &lt; length l)%nat <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> &lt;- ZtoNat_Zlength, &lt;- Z2Nat.inj_lt; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat i &lt; Datatypes.length l)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (pad l) Inhabitant_val = Vlong\n                                            (nth\n                                               (Z.to_nat\n                                                 i) l\n                                               Inhabitant_int64)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka0\"><span class=\"nb\">unfold</span> pad.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat i &lt; Datatypes.length l)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i)\n  (map Vlong l ++\n   <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l))\n  Inhabitant_val = Vlong\n                     (nth (Z.to_nat i) l\n                        Inhabitant_int64)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka1\"><span class=\"nb\">rewrite</span> app_nth1 <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> map_length; <span class=\"bp\">assumption</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat i &lt; Datatypes.length l)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (map Vlong l) Inhabitant_val = Vlong\n                                                 (nth\n                                                 (Z.to_nat\n                                                 i) l\n                                                 Inhabitant_int64)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka2\"><span class=\"nb\">erewrite</span> nth_indep <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> map_length; <span class=\"bp\">assumption</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat i &lt; Datatypes.length l)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (map Vlong l) <span class=\"nl\">?d&#39;</span> = Vlong\n                                       (nth\n                                          (Z.to_nat i)\n                                          l\n                                          Inhabitant_int64)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> map_nth.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka3\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt; Zlength (pad l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka4\"><span class=\"nb\">unfold</span> pad.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt;\nZlength\n  (map Vlong l ++\n   <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka5\"><span class=\"nb\">rewrite</span> Zlength_app, Zlength_map.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt;\nZlength l\n  + Zlength (<span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka6\"><span class=\"nb\">assert</span> (Hlen := Zlength_nonneg (<span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br><span><var>Hlen</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span>\n  &lt;= Zlength\n       (<span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt;\nZlength l\n  + Zlength (<span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka7\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad_nth_undef</span> <span class=\"nv\">i</span> (<span class=\"nv\">l</span> : list int64) : Zlength l &lt;= i -&gt; Znth i (pad l) = Vundef.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zlength l &lt;= i -&gt; Znth i (pad l) = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka8\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zlength l &lt;= i -&gt; Znth i (pad l) = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chka9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chka9\"><span class=\"nb\">intros</span> Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= i</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth i (pad l) = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkaa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkaa\"><span class=\"nb\">pose</span> (Hl := Zlength_nonneg l).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= i</span></span></span><br><span><var>Hl</var><span><span class=\"hyp-body\"><b>:= </b><span>Zlength_nonneg l</span></span><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Zlength l</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth i (pad l) = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkab\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkab\"><span class=\"nb\">rewrite</span> &lt;- (Z2Nat.id i), &lt;- nth_Znth&#39; <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= i</span></span></span><br><span><var>Hl</var><span><span class=\"hyp-body\"><b>:= </b><span>Zlength_nonneg l</span></span><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Zlength l</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (pad l) default = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkac\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkac\"><span class=\"nb\">rewrite</span> Z2Nat.inj_le, ZtoNat_Zlength <span class=\"kr\">in</span> Hi <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(Datatypes.length l &lt;= Z.to_nat i)%nat</span></span></span><br><span><var>Hl</var><span><span class=\"hyp-body\"><b>:= </b><span>Zlength_nonneg l</span></span><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Zlength l</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i) (pad l) default = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkad\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkad\"><span class=\"nb\">unfold</span> pad.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(Datatypes.length l &lt;= Z.to_nat i)%nat</span></span></span><br><span><var>Hl</var><span><span class=\"hyp-body\"><b>:= </b><span>Zlength_nonneg l</span></span><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Zlength l</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i)\n  (map Vlong l ++\n   <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l)) default = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkae\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkae\"><span class=\"nb\">rewrite</span> app_nth2 <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> map_length; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span>(Datatypes.length l &lt;= Z.to_nat i)%nat</span></span></span><br><span><var>Hl</var><span><span class=\"hyp-body\"><b>:= </b><span>Zlength_nonneg l</span></span><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Zlength l</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth (Z.to_nat i - Datatypes.length (map Vlong l))\n  (<span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l)) default = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> nth_repeat.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkaf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkaf\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad_length</span> <span class=\"nv\">l</span> : (length l &lt;= <span class=\"mi\">5</span>)%nat -&gt; length (pad l) = <span class=\"mi\">5</span>%nat.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Datatypes.length l &lt;= <span class=\"mi\">5</span>)%nat -&gt;\nDatatypes.length (pad l) = <span class=\"mi\">5</span>%nat</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb0\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Datatypes.length l &lt;= <span class=\"mi\">5</span>)%nat -&gt;\nDatatypes.length (pad l) = <span class=\"mi\">5</span>%nat</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb1\"><span class=\"nb\">intros</span> Hl.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Datatypes.length l &lt;= <span class=\"mi\">5</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Datatypes.length (pad l) = <span class=\"mi\">5</span>%nat</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb2\"><span class=\"nb\">unfold</span> pad.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Datatypes.length l &lt;= <span class=\"mi\">5</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Datatypes.length\n  (map Vlong l ++\n   <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l)) = <span class=\"mi\">5</span>%nat</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb3\"><span class=\"nb\">rewrite</span> app_length, map_length, repeat_length.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Datatypes.length l &lt;= <span class=\"mi\">5</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Datatypes.length l + (<span class=\"mi\">5</span> - Datatypes.length l))%nat = <span class=\"mi\">5</span>%nat</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb4\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad_Zlength</span> <span class=\"nv\">l</span> : Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb5\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb6\"><span class=\"nb\">intros</span> Hl.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zlength (pad l) = <span class=\"mi\">5</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Zlength_correct, pad_length <span class=\"kr\">in</span> *; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb7\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad0</span> : pad nil = <span class=\"kp\">repeat</span> Vundef <span class=\"mi\">5</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">pad [] = <span class=\"kp\">repeat</span> Vundef <span class=\"mi\">5</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb8\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">pad [] = <span class=\"kp\">repeat</span> Vundef <span class=\"mi\">5</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkb9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkb9\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad5</span> <span class=\"nv\">l</span> : length l = <span class=\"mi\">5</span>%nat -&gt; pad l = map Vlong l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Datatypes.length l = <span class=\"mi\">5</span>%nat -&gt; pad l = map Vlong l</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkba\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkba\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Datatypes.length l = <span class=\"mi\">5</span>%nat -&gt; pad l = map Vlong l</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkbb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkbb\"><span class=\"nb\">unfold</span> pad.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Datatypes.length l = <span class=\"mi\">5</span>%nat -&gt;\nmap Vlong l ++ <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l) = \nmap Vlong l</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkbc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkbc\"><span class=\"nb\">intros</span> -&gt;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">map Vlong l ++ <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - <span class=\"mi\">5</span>) = map Vlong l</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkbd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkbd\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">map Vlong l ++ [] = map Vlong l</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkbe\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkbe\"><span class=\"nb\">rewrite</span> app_nil_end.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">map Vlong l ++ [] = map Vlong l ++ []</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkbf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkbf\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad_upd_Znth</span> <span class=\"nv\">a</span> <span class=\"nv\">i</span> <span class=\"nv\">l</span> : <span class=\"mi\">0</span> &lt;= i &lt; Zlength l -&gt; upd_Znth i (pad l) (Vlong a) = pad (upd_Znth i l a).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt; Zlength l -&gt;\nupd_Znth i (pad l) (Vlong a) = pad (upd_Znth i l a)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc0\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= i &lt; Zlength l -&gt;\nupd_Znth i (pad l) (Vlong a) = pad (upd_Znth i l a)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc1\"><span class=\"nb\">intros</span> Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">upd_Znth i (pad l) (Vlong a) = pad (upd_Znth i l a)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc2\"><span class=\"nb\">unfold</span> pad.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">upd_Znth i\n  (map Vlong l ++\n   <span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l)) (Vlong a) = \nmap Vlong (upd_Znth i l a) ++\n<span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length (upd_Znth i l a))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc3\"><span class=\"nb\">rewrite</span> upd_Znth_app1 <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> Zlength_map; <span class=\"bp\">assumption</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">upd_Znth i (map Vlong l) (Vlong a) ++\n<span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l) = map Vlong\n                                           (upd_Znth i\n                                              l a) ++\n                                         <span class=\"kp\">repeat</span> Vundef\n                                           (<span class=\"mi\">5</span>\n                                              - Datatypes.length\n                                                 (upd_Znth\n                                                 i l a))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc4\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">upd_Znth i (map Vlong l) (Vlong a) = map Vlong\n                                       (upd_Znth i l a)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chkc5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chkc5\"><hr></label><div class=\"goal-conclusion\"><span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l) = <span class=\"kp\">repeat</span> Vundef\n                                           (<span class=\"mi\">5</span>\n                                              - Datatypes.length\n                                                 (upd_Znth\n                                                 i l a))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc6\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">upd_Znth i (map Vlong l) (Vlong a) = map Vlong\n                                       (upd_Znth i l a)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> upd_Znth_map.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc7\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l) = <span class=\"kp\">repeat</span> Vundef\n                                           (<span class=\"mi\">5</span>\n                                              - Datatypes.length\n                                                 (upd_Znth\n                                                 i l a))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc8\"><span class=\"nb\">rewrite</span> &lt;- (ZtoNat_Zlength (upd_Znth _ _ _)), Zlength_upd_Znth, ZtoNat_Zlength.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kp\">repeat</span> Vundef (<span class=\"mi\">5</span> - Datatypes.length l) = <span class=\"kp\">repeat</span> Vundef\n                                           (<span class=\"mi\">5</span>\n                                              - Datatypes.length\n                                                 l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkc9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkc9\"><span class=\"kn\">Lemma</span> <span class=\"nf\">pad_upd_Znth_end</span> <span class=\"nv\">a</span> <span class=\"nv\">l</span> : (length l &lt;= <span class=\"mi\">4</span>)%nat -&gt; upd_Znth (Zlength l) (pad l) (Vlong a) = pad (l++[a]).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Datatypes.length l &lt;= <span class=\"mi\">4</span>)%nat -&gt;\nupd_Znth (Zlength l) (pad l) (Vlong a) = pad\n                                           (l ++ [a])</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkca\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkca\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Datatypes.length l &lt;= <span class=\"mi\">4</span>)%nat -&gt;\nupd_Znth (Zlength l) (pad l) (Vlong a) = pad\n                                           (l ++ [a])</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkcb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkcb\"><span class=\"nb\">intros</span> Hl.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Datatypes.length l &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">upd_Znth (Zlength l) (pad l) (Vlong a) = pad\n                                           (l ++ [a])</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkcc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkcc\"><span class=\"nb\">rewrite</span> &lt;- ZtoNat_Zlength <span class=\"kr\">in</span> Hl.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">upd_Znth (Zlength l) (pad l) (Vlong a) = pad\n                                           (l ++ [a])</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"><span class=\"c\">(* assert (Hl&#39; : Zlength l &lt;= 4) by lia. *)</span>\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkcd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkcd\"><span class=\"nb\">apply</span> (nth_ext _ _ default default).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Datatypes.length\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Datatypes.length\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chkce\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chkce\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">n</span> : nat,\n(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat -&gt;\nnth n (upd_Znth (Zlength l) (pad l) (Vlong a)) default = \nnth n (pad (l ++ [a])) default</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkcf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkcf\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Datatypes.length\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Datatypes.length\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd0\"><span class=\"nb\">apply</span> Nat2Z.inj.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.of_nat\n  (Datatypes.length\n     (upd_Znth (Zlength l) (pad l) (Vlong a))) = Z.of_nat\n                                                 (Datatypes.length\n                                                 (pad\n                                                 (l ++\n                                                 [a])))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd1\"><span class=\"nb\">rewrite</span> &lt;- !Zlength_correct, Zlength_upd_Znth, !pad_Zlength; <span class=\"nb\">simpl</span>; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Zlength (l ++ [a]) &lt;= <span class=\"mi\">5</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Zlength_app, Zlength_cons; <span class=\"nb\">simpl</span>; <span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">  \n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd2\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">n</span> : nat,\n(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat -&gt;\nnth n (upd_Znth (Zlength l) (pad l) (Vlong a)) default = \nnth n (pad (l ++ [a])) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd3\"><span class=\"nb\">intros</span> n Hn.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">nth n (upd_Znth (Zlength l) (pad l) (Vlong a)) default = \nnth n (pad (l ++ [a])) default</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd4\"><span class=\"nb\">rewrite</span> !nth_Znth&#39;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Znth\n                                               (Z.of_nat\n                                                 n)\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd5\"><span class=\"nb\">pose</span> (Hpad := pad_Zlength l).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Znth\n                                               (Z.of_nat\n                                                 n)\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd6\"><span class=\"nb\">destruct</span> (Z.lt_total (Z.of_nat n) (Zlength l)) <span class=\"kr\">as</span> [Hnl|[Hnl|Hnl]].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Znth\n                                               (Z.of_nat\n                                                 n)\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chkd7\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n = Zlength l</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chkd7\"><hr></label><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = \nZnth (Z.of_nat n) (pad (l ++ [a]))</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chkd8\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt; Z.of_nat n</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chkd8\"><hr></label><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = \nZnth (Z.of_nat n) (pad (l ++ [a]))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkd9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkd9\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Znth\n                                               (Z.of_nat\n                                                 n)\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkda\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkda\"><span class=\"nb\">rewrite</span> Znth_upd_Znth_diff, pad_nth <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong (Znth (Z.of_nat n) l) = Znth (Z.of_nat n)\n                                (pad (l ++ [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkdb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkdb\"><span class=\"nb\">rewrite</span> pad_nth <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> Zlength_app, Zlength_cons; <span class=\"nb\">simpl</span>; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong (Znth (Z.of_nat n) l) = Vlong\n                                (Znth (Z.of_nat n)\n                                   (l ++ [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkdc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkdc\"><span class=\"nb\">rewrite</span> Znth_app1 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n &lt; Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong (Znth (Z.of_nat n) l) = Vlong\n                                (Znth (Z.of_nat n) l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkdd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkdd\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n = Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Znth\n                                               (Z.of_nat\n                                                 n)\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkde\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkde\"><span class=\"nb\">rewrite</span> Znth_upd_Znth_same <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n = Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong a = Znth (Z.of_nat n) (pad (l ++ [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkdf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkdf\"><span class=\"nb\">unfold</span> pad.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n = Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong a = Znth (Z.of_nat n)\n            (map Vlong (l ++ [a]) ++\n             <span class=\"kp\">repeat</span> Vundef\n               (<span class=\"mi\">5</span> - Datatypes.length (l ++ [a])))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke0\"><span class=\"nb\">rewrite</span> map_app, Znth_app1, Znth_app2, Zlength_map, Hnl, Z.sub_diag <span class=\"bp\">by</span>\n      (<span class=\"nb\">rewrite</span> <span class=\"nl\">?Zlength_app</span>, !Zlength_map, <span class=\"nl\">?Zlength_cons</span>; <span class=\"nb\">simpl</span>; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Z.of_nat n = Zlength l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong a = Znth <span class=\"mi\">0</span> (map Vlong [a])</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke1\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt; Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Znth (Z.of_nat n)\n  (upd_Znth (Zlength l) (pad l) (Vlong a)) = Znth\n                                               (Z.of_nat\n                                                 n)\n                                               (pad\n                                                 (l ++\n                                                 [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke2\"><span class=\"nb\">rewrite</span> Znth_upd_Znth_diff, pad_nth_undef <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt; Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vundef = Znth (Z.of_nat n) (pad (l ++ [a]))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke3\"><span class=\"nb\">rewrite</span> pad_nth_undef <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> Zlength_app, Zlength_cons; <span class=\"nb\">simpl</span>; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>int64</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list int64</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>(Z.to_nat (Zlength l) &lt;= <span class=\"mi\">4</span>)%nat</span></span></span><br><span><var>n</var><span class=\"hyp-type\"><b>: </b><span>nat</span></span></span><br><span><var>Hn</var><span class=\"hyp-type\"><b>: </b><span>(n\n   &lt; Datatypes.length\n       (upd_Znth (Zlength l) (pad l) (Vlong a)))%nat</span></span></span><br><span><var>Hpad</var><span><span class=\"hyp-body\"><b>:= </b><span>pad_Zlength l</span></span><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt;= <span class=\"mi\">5</span> -&gt; Zlength (pad l) = <span class=\"mi\">5</span></span></span></span></span><br><span><var>Hnl</var><span class=\"hyp-type\"><b>: </b><span>Zlength l &lt; Z.of_nat n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vundef = Vundef</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">End</span> <span class=\"nf\">Signed62</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">make_modinfo</span> (<span class=\"nv\">m</span> : Z) : (list val * val)%type :=\n  (map Vlong (Signed62.reprn <span class=\"mi\">5</span> m), Vlong (Int64.repr (modInv m (<span class=\"mi\">2</span>^<span class=\"mi\">62</span>)))).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">debruijn64_array</span> (<span class=\"nv\">sh</span>: share) (<span class=\"nv\">gv</span>: globals) : mpred :=\n  <span class=\"kn\">Eval</span> <span class=\"nb\">cbn</span> <span class=\"kr\">in</span>\n  <span class=\"kr\">let</span>\n    <span class=\"nv\">is_all_init_int8</span> := <span class=\"kr\">fix</span> is_all_init_int8 (l : list init_data) :=\n      <span class=\"kr\">match</span> l <span class=\"kr\">with</span>\n      | [] =&gt; <span class=\"kt\">True</span>\n      | Init_int8 _ :: l&#39; =&gt; is_all_init_int8 l&#39;\n      | _ =&gt; <span class=\"kt\">False</span>\n      <span class=\"kr\">end</span>\n  <span class=\"kr\">in</span> <span class=\"kr\">let</span>\n    <span class=\"nv\">uninit_int8s</span> := <span class=\"kr\">fix</span> uninit_int8s (l: list init_data) :\n        is_all_init_int8 l -&gt; list int :=\n      <span class=\"kr\">match</span> l <span class=\"kr\">with</span>\n      | [] =&gt; <span class=\"kr\">fun</span> <span class=\"nv\">_</span> =&gt; []\n      | x :: l&#39; =&gt;\n        <span class=\"kr\">match</span> x <span class=\"kr\">with</span>\n        | Init_int8 i =&gt; <span class=\"kr\">fun</span> <span class=\"nv\">pf</span> =&gt; i :: uninit_int8s l&#39; pf\n        | _ =&gt; False_rec (list int)\n        <span class=\"kr\">end</span>\n      <span class=\"kr\">end</span>\n  <span class=\"kr\">in</span> data_at sh (gvar_info v_debruijn)\n    (map Vint (uninit_int8s (gvar_init v_debruijn) I)) (gv _debruijn).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke4\"><span class=\"kn\">Lemma</span> <span class=\"nf\">data_at_tulong_tlong</span> {<span class=\"nv\">cs</span>: compspecs}: <span class=\"kr\">forall</span> <span class=\"nv\">sh</span> <span class=\"nv\">v</span> <span class=\"nv\">p</span>, data_at sh tulong v p = data_at sh tlong v p.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">sh</span> : Share.t) (<span class=\"nv\">v</span> : reptype tulong) (<span class=\"nv\">p</span> : val),\ndata_at sh tulong v p = data_at sh tlong v p</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke5\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">sh</span> : Share.t) (<span class=\"nv\">v</span> : reptype tulong) (<span class=\"nv\">p</span> : val),\ndata_at sh tulong v p = data_at sh tlong v p</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke6\"><span class=\"nb\">intros</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong v p = data_at sh tlong v p</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke7\"><span class=\"nb\">unfold</span> data_at, field_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">!! field_compatible tulong [] p &amp;&amp;\nat_offset\n  (data_at_rec sh (nested_field_type tulong []) v)\n  (nested_field_offset tulong []) p = !! field_compatible\n                                           tlong [] p &amp;&amp;\n                                      at_offset\n                                        (data_at_rec\n                                           sh\n                                           (nested_field_type\n                                              tlong [])\n                                           v)\n                                        (nested_field_offset\n                                           tlong []) p</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke8\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">!! field_compatible tulong [] p = !! field_compatible\n                                       tlong [] p</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chke9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chke9\"><span class=\"nb\">unfold</span> field_compatible.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">!! (isptr p /\\\n    complete_legal_cosu_type tulong = true /\\\n    size_compatible tulong p /\\\n    align_compatible tulong p /\\\n    legal_nested_field tulong []) = !! (isptr p /\\\n                                        complete_legal_cosu_type\n                                          tlong = true /\\\n                                        size_compatible\n                                          tlong p /\\\n                                        align_compatible\n                                          tlong p /\\\n                                        legal_nested_field\n                                          tlong [])</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkea\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkea\"><span class=\"nb\">apply</span> ND_prop_ext.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">isptr p /\\\ncomplete_legal_cosu_type tulong = true /\\\nsize_compatible tulong p /\\\nalign_compatible tulong p /\\\nlegal_nested_field tulong [] &lt;-&gt;\nisptr p /\\\ncomplete_legal_cosu_type tlong = true /\\\nsize_compatible tlong p /\\\nalign_compatible tlong p /\\\nlegal_nested_field tlong []</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkeb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkeb\"><span class=\"nb\">assert</span> (align_compatible tulong p &lt;-&gt; align_compatible tlong p); [| <span class=\"bp\">tauto</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>p</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible tulong p &lt;-&gt; align_compatible tlong p</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkec\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkec\"><span class=\"nb\">destruct</span> p; <span class=\"nb\">simpl</span>; <span class=\"kp\">try</span> <span class=\"bp\">tauto</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tulong\n  (Ptrofs.unsigned i) &lt;-&gt;\nalign_compatible_rec cenv_cs tlong (Ptrofs.unsigned i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chked\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chked\"><span class=\"nb\">split</span>; <span class=\"nb\">intros</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>align_compatible_rec cenv_cs tulong\n  (Ptrofs.unsigned i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tlong (Ptrofs.unsigned i)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chkee\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>align_compatible_rec cenv_cs tlong\n  (Ptrofs.unsigned i)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chkee\"><hr></label><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tulong\n  (Ptrofs.unsigned i)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkef\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkef\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>align_compatible_rec cenv_cs tulong\n  (Ptrofs.unsigned i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tlong (Ptrofs.unsigned i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf0\"><span class=\"nb\">eapply</span> align_compatible_rec_by_value_inv <span class=\"kr\">in</span> H; [| <span class=\"bp\">reflexivity</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(align_chunk Mint64 | Ptrofs.unsigned i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tlong (Ptrofs.unsigned i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf1\"><span class=\"nb\">eapply</span> align_compatible_rec_by_value; [<span class=\"bp\">reflexivity</span> |].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(align_chunk Mint64 | Ptrofs.unsigned i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(align_chunk Mint64 | Ptrofs.unsigned i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf2\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>align_compatible_rec cenv_cs tlong\n  (Ptrofs.unsigned i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tulong\n  (Ptrofs.unsigned i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf3\"><span class=\"nb\">eapply</span> align_compatible_rec_by_value_inv <span class=\"kr\">in</span> H; [| <span class=\"bp\">reflexivity</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(align_chunk Mint64 | Ptrofs.unsigned i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tulong\n  (Ptrofs.unsigned i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf4\"><span class=\"nb\">eapply</span> align_compatible_rec_by_value; [<span class=\"bp\">reflexivity</span> |].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>cs</var><span class=\"hyp-type\"><b>: </b><span>compspecs</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>Share.t</span></span></span><br><span><var>v</var><span class=\"hyp-type\"><b>: </b><span>reptype tulong</span></span></span><br><span><var>b</var><span class=\"hyp-type\"><b>: </b><span>block</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>ptrofs</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>(align_chunk Mint64 | Ptrofs.unsigned i)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(align_chunk Mint64 | Ptrofs.unsigned i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">auto</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf5\"><span class=\"kn\">Lemma</span> <span class=\"nf\">SECP256K1_SIGNED62_ONE_global</span> <span class=\"nv\">gv</span> : headptr (gv _SECP256K1_SIGNED62_ONE) -&gt;\n   globvar2pred gv (_SECP256K1_SIGNED62_ONE, v_SECP256K1_SIGNED62_ONE) |--\n   data_at Ers t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>)) (gv _SECP256K1_SIGNED62_ONE).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE) -&gt;\nglobvar2pred gv\n  (_SECP256K1_SIGNED62_ONE, v_SECP256K1_SIGNED62_ONE)\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>))\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf6\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE) -&gt;\nglobvar2pred gv\n  (_SECP256K1_SIGNED62_ONE, v_SECP256K1_SIGNED62_ONE)\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>))\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf7\"><span class=\"nb\">intros</span> Hheadptr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">globvar2pred gv\n  (_SECP256K1_SIGNED62_ONE, v_SECP256K1_SIGNED62_ONE)\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>))\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf8\"><span class=\"nb\">unfold</span> globvar2pred.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">if</span>\n  gvar_volatile\n    (snd\n       (_SECP256K1_SIGNED62_ONE,\n        v_SECP256K1_SIGNED62_ONE))\n <span class=\"kr\">then</span> TT\n <span class=\"kr\">else</span>\n  init_data_list2pred gv\n    (gvar_init\n       (snd\n          (_SECP256K1_SIGNED62_ONE,\n           v_SECP256K1_SIGNED62_ONE)))\n    (readonly2share\n       (gvar_readonly\n          (snd\n             (_SECP256K1_SIGNED62_ONE,\n              v_SECP256K1_SIGNED62_ONE))))\n    (gv\n       (fst\n          (_SECP256K1_SIGNED62_ONE,\n           v_SECP256K1_SIGNED62_ONE))))\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>))\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkf9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkf9\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * (mapsto_zeros <span class=\"mi\">32</span> Ers\n       (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n       * emp)\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr (<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n             mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr\n               (Z.shiftr \n                  (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkfa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkfa\"><span class=\"nb\">rewrite</span> sepcon_emp.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr (<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n             mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr\n               (Z.shiftr \n                  (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkfb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkfb\"><span class=\"nb\">change</span> (Z.shiftr <span class=\"mi\">1</span> _) <span class=\"kr\">with</span> <span class=\"mi\">0</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr (<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr <span class=\"mi\">0</span> <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr (Z.shiftr <span class=\"mi\">0</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong\n         (Int64.repr\n            (Z.shiftr (Z.shiftr (Z.shiftr <span class=\"mi\">0</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkfc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkfc\"><span class=\"kp\">repeat</span> <span class=\"nb\">change</span> (Z.shiftr <span class=\"mi\">0</span> _) <span class=\"kr\">with</span> <span class=\"mi\">0</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr (<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkfd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkfd\"><span class=\"nb\">change</span> (<span class=\"mi\">1</span> mod _) <span class=\"kr\">with</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr <span class=\"mi\">1</span>);\n       Vlong (Int64.repr (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkfe\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkfe\"><span class=\"nb\">change</span> (<span class=\"mi\">0</span> mod _) <span class=\"kr\">with</span> <span class=\"mi\">0</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chkff\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chkff\"><span class=\"nb\">unfold</span> t_secp256k1_modinv64_signed62.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers\n      (Tstruct _secp256k1_modinv64_signed62 noattr)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk100\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk100\"><span class=\"nb\">assert</span> (Hptr : isptr (gv _SECP256K1_SIGNED62_ONE)) <span class=\"bp\">by</span> (<span class=\"nb\">apply</span> headptr_isptr; <span class=\"bp\">assumption</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers\n      (Tstruct _secp256k1_modinv64_signed62 noattr)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk101\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk101\"><span class=\"nb\">unfold</span> data_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- field_at Ers\n      (Tstruct _secp256k1_modinv64_signed62 noattr) []\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk102\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk102\"><span class=\"nb\">erewrite</span> field_at_Tstruct;\n[|<span class=\"bp\">reflexivity</span>|<span class=\"nb\">apply</span> JMeq_refl].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- nested_sfieldlist_at Ers\n      (Tstruct _secp256k1_modinv64_signed62 noattr) []\n      (co_members\n         (get_co _secp256k1_modinv64_signed62))\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk103\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk103\"><span class=\"nb\">simpl</span> (co_members (get_co _secp256k1_modinv64_signed62)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- nested_sfieldlist_at Ers\n      (Tstruct _secp256k1_modinv64_signed62 noattr) []\n      [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)]\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk104\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk104\"><span class=\"nb\">cbn</span> -[mapsto].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- withspacer Ers <span class=\"mi\">40</span>\n      (<span class=\"mi\">0</span>\n         + <span class=\"kr\">match</span>\n             Maps.PTree.get\n               _secp256k1_modinv64_signed62\n               (Maps.PTree.Nodes\n                  (Maps.PTree.Node101\n                     (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001 ...)\n                      (Maps.PTree.Node100 ...))))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101 ... ...)\n                      (Maps.PTree.Node001 ...)))))))\n                     (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001 ...)))))))))\n           <span class=\"kr\">with</span>\n           | Some co =&gt; co_sizeof co\n           | None =&gt; <span class=\"mi\">0</span>\n           <span class=\"kr\">end</span>)\n      (field_at Ers\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v)\n         [Vlong (Int64.repr <span class=\"mi\">1</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>)])\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk105\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk105\"><span class=\"nb\">change</span> (<span class=\"mi\">0</span> + _) <span class=\"kr\">with</span> <span class=\"mi\">40</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- withspacer Ers <span class=\"mi\">40</span> <span class=\"mi\">40</span>\n      (field_at Ers\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v)\n         [Vlong (Int64.repr <span class=\"mi\">1</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>); \n          Vlong (Int64.repr <span class=\"mi\">0</span>)])\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk106\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk106\"><span class=\"nb\">unfold</span> withspacer.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- (<span class=\"kr\">if</span> Z.eq_dec (<span class=\"mi\">40</span> - <span class=\"mi\">40</span>) <span class=\"mi\">0</span>\n     <span class=\"kr\">then</span>\n      field_at Ers\n        (Tstruct _secp256k1_modinv64_signed62 noattr)\n        (DOT _v)\n        [Vlong (Int64.repr <span class=\"mi\">1</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>)]\n        (gv _SECP256K1_SIGNED62_ONE)\n     <span class=\"kr\">else</span>\n      field_at Ers\n        (Tstruct _secp256k1_modinv64_signed62 noattr)\n        (DOT _v)\n        [Vlong (Int64.repr <span class=\"mi\">1</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>); \n         Vlong (Int64.repr <span class=\"mi\">0</span>)]\n        (gv _SECP256K1_SIGNED62_ONE)\n        * spacer Ers <span class=\"mi\">40</span> <span class=\"mi\">40</span>\n            (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk107\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk107\"><span class=\"nb\">destruct</span> (Z.eq_dec _ _);[<span class=\"nb\">clear</span> e|<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- field_at Ers\n      (Tstruct _secp256k1_modinv64_signed62 noattr)\n      (DOT _v)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk108\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk108\"><span class=\"nb\">rewrite</span> field_at_data_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers\n      (nested_field_type\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v))\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk109\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk109\"><span class=\"nb\">assert</span> (Hcompat : field_compatible\n          (Tstruct _secp256k1_modinv64_signed62 noattr)\n          (DOT _v) (gv _SECP256K1_SIGNED62_ONE)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">field_compatible\n  (Tstruct _secp256k1_modinv64_signed62 noattr)\n  (DOT _v) (gv _SECP256K1_SIGNED62_ONE)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk10a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk10a\"><hr></label><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers\n      (nested_field_type\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v))\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk10b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk10b\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">field_compatible\n  (Tstruct _secp256k1_modinv64_signed62 noattr)\n  (DOT _v) (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk10c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk10c\"><span class=\"nb\">apply</span> headptr_field_compatible.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk10d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk10d\"><hr></label><div class=\"goal-conclusion\">complete_legal_cosu_type\n  (Tstruct _secp256k1_modinv64_signed62 noattr) = true</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk10e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk10e\"><hr></label><div class=\"goal-conclusion\">legal_nested_field\n  (Tstruct _secp256k1_modinv64_signed62 noattr)\n  (DOT _v)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk10f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk10f\"><hr></label><div class=\"goal-conclusion\">sizeof (Tstruct _secp256k1_modinv64_signed62 noattr)\n  &lt; Ptrofs.modulus</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk110\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk110\"><hr></label><div class=\"goal-conclusion\">align_compatible_rec cenv_cs\n  (Tstruct _secp256k1_modinv64_signed62 noattr) <span class=\"mi\">0</span></div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk111\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk111\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk112\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk112\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">complete_legal_cosu_type\n  (Tstruct _secp256k1_modinv64_signed62 noattr) = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk113\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk113\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">legal_nested_field\n  (Tstruct _secp256k1_modinv64_signed62 noattr)\n  (DOT _v)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> <span class=\"nb\">constructor</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk114\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk114\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">sizeof (Tstruct _secp256k1_modinv64_signed62 noattr)\n  &lt; Ptrofs.modulus</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk115\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk115\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs\n  (Tstruct _secp256k1_modinv64_signed62 noattr) <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk116\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk116\"><span class=\"nb\">eapply</span> align_compatible_rec_Tstruct.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Maps.PTree.get _secp256k1_modinv64_signed62 cenv_cs = \nSome <span class=\"nl\">?co</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk117\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk117\"><hr></label><div class=\"goal-conclusion\">plain_members (co_members <span class=\"nl\">?co</span>) = true</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk118\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk118\"><hr></label><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">i0</span> : ident) (<span class=\"nv\">t0</span> : type) (<span class=\"nv\">z0</span> : Z),\nCtypes.field_type i0 (co_members <span class=\"nl\">?co</span>) = \nErrors.OK t0 -&gt;\nCtypes.field_offset cenv_cs i0 (co_members <span class=\"nl\">?co</span>) = \nErrors.OK (z0, Full) -&gt;\nalign_compatible_rec cenv_cs t0 (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk119\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk119\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Maps.PTree.get _secp256k1_modinv64_signed62 cenv_cs = \nSome <span class=\"nl\">?co</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk11a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk11a\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">plain_members\n  (co_members\n     {|\n       co_su := Struct;\n       co_members :=\n         [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)];\n       co_attr := noattr;\n       co_sizeof := <span class=\"mi\">40</span>;\n       co_alignof := <span class=\"mi\">8</span>;\n       co_rank := <span class=\"mi\">1</span>;\n       co_sizeof_pos := Zgeb0_ge0 <span class=\"mi\">40</span> eq_refl;\n       co_alignof_two_p :=\n         prove_alignof_two_p <span class=\"mi\">8</span> eq_refl;\n       co_sizeof_alignof := prove_Zdivide <span class=\"mi\">8</span> <span class=\"mi\">40</span> eq_refl\n     |}) = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk11b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk11b\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> (<span class=\"nv\">i0</span> : ident) (<span class=\"nv\">t0</span> : type) (<span class=\"nv\">z0</span> : Z),\nCtypes.field_type i0\n  (co_members\n     {|\n       co_su := Struct;\n       co_members :=\n         [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)];\n       co_attr := noattr;\n       co_sizeof := <span class=\"mi\">40</span>;\n       co_alignof := <span class=\"mi\">8</span>;\n       co_rank := <span class=\"mi\">1</span>;\n       co_sizeof_pos := Zgeb0_ge0 <span class=\"mi\">40</span> eq_refl;\n       co_alignof_two_p :=\n         prove_alignof_two_p <span class=\"mi\">8</span> eq_refl;\n       co_sizeof_alignof := prove_Zdivide <span class=\"mi\">8</span> <span class=\"mi\">40</span> eq_refl\n     |}) = Errors.OK t0 -&gt;\nCtypes.field_offset cenv_cs i0\n  (co_members\n     {|\n       co_su := Struct;\n       co_members :=\n         [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)];\n       co_attr := noattr;\n       co_sizeof := <span class=\"mi\">40</span>;\n       co_alignof := <span class=\"mi\">8</span>;\n       co_rank := <span class=\"mi\">1</span>;\n       co_sizeof_pos := Zgeb0_ge0 <span class=\"mi\">40</span> eq_refl;\n       co_alignof_two_p :=\n         prove_alignof_two_p <span class=\"mi\">8</span> eq_refl;\n       co_sizeof_alignof := prove_Zdivide <span class=\"mi\">8</span> <span class=\"mi\">40</span> eq_refl\n     |}) = Errors.OK (z0, Full) -&gt;\nalign_compatible_rec cenv_cs t0 (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk11c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk11c\"><span class=\"nb\">simpl</span>; <span class=\"nb\">intros</span> i0 t0 z0 H0 H1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span></span></span></span><br><span><var>t0</var><span class=\"hyp-type\"><b>: </b><span>type</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>(<span class=\"kr\">if</span> ident_eq i0 _v\n <span class=\"kr\">then</span> Errors.OK (tarray tlong <span class=\"mi\">5</span>)\n <span class=\"kr\">else</span>\n  Errors.Error\n    [Errors.MSG <span class=\"s2\">&quot;Unknown field &quot;</span>; Errors.CTX i0]) = \nErrors.OK t0</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Ctypes.field_offset\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  i0 [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)] = \nErrors.OK (z0, Full)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  t0 (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk11d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk11d\"><span class=\"nb\">destruct</span> (ident_eq _ _) <span class=\"kr\">in</span> H0;[|<span class=\"bp\">discriminate</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span></span></span></span><br><span><var>t0</var><span class=\"hyp-type\"><b>: </b><span>type</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>e</var><span class=\"hyp-type\"><b>: </b><span>i0 = _v</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Errors.OK (tarray tlong <span class=\"mi\">5</span>) = Errors.OK t0</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Ctypes.field_offset\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  i0 [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)] = \nErrors.OK (z0, Full)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  t0 (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk11e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk11e\"><span class=\"nb\">injection</span> H0; <span class=\"nb\">clear</span> H0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span></span></span></span><br><span><var>t0</var><span class=\"hyp-type\"><b>: </b><span>type</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>e</var><span class=\"hyp-type\"><b>: </b><span>i0 = _v</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Ctypes.field_offset\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  i0 [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)] = \nErrors.OK (z0, Full)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">tarray tlong <span class=\"mi\">5</span> = t0 -&gt;\nalign_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 (...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001 (...)))))))))))))\n  t0 (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk11f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk11f\"><span class=\"nb\">intros</span> &lt;-.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span></span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>e</var><span class=\"hyp-type\"><b>: </b><span>i0 = _v</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Ctypes.field_offset\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  i0 [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)] = \nErrors.OK (z0, Full)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  (tarray tlong <span class=\"mi\">5</span>) (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk120\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk120\"><span class=\"nb\">subst</span> i0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Ctypes.field_offset\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  _v [Member_plain _v (tarray tlong <span class=\"mi\">5</span>)] = \nErrors.OK (z0, Full)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  (tarray tlong <span class=\"mi\">5</span>) (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk121\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk121\"><span class=\"nb\">injection</span> H1; <span class=\"nb\">clear</span> H1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>z0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> = z0 -&gt;\nalign_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 (...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001 (...)))))))))))))\n  (tarray tlong <span class=\"mi\">5</span>) (<span class=\"mi\">0</span> + z0)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk122\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk122\"><span class=\"nb\">intros</span> &lt;-.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  (tarray tlong <span class=\"mi\">5</span>) (<span class=\"mi\">0</span> + <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk123\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk123\"><span class=\"nb\">eapply</span> align_compatible_rec_Tarray.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span> -&gt;\nalign_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...)))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001 ...))))))))))))\n  tlong (<span class=\"mi\">0</span> + <span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk124\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk124\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span> -&gt;\nalign_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...)))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001 ...))))))))))))\n  tlong (<span class=\"mi\">0</span> + <span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk125\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk125\"><span class=\"nb\">intros</span> i Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 ...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 ...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 ...)))))))))))))\n  tlong (<span class=\"mi\">0</span> + <span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">        </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk126\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk126\"><span class=\"nb\">cut</span> (i = <span class=\"mi\">0</span> \\/ i = <span class=\"mi\">1</span> \\/ i = <span class=\"mi\">2</span> \\/ i = <span class=\"mi\">3</span> \\/ i = <span class=\"mi\">4</span>);[|<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">i = <span class=\"mi\">0</span> \\/ i = <span class=\"mi\">1</span> \\/ i = <span class=\"mi\">2</span> \\/ i = <span class=\"mi\">3</span> \\/ i = <span class=\"mi\">4</span> -&gt;\nalign_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 (...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001 (...)))))))))))))\n  tlong (<span class=\"mi\">0</span> + <span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">        </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk127\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk127\"><span class=\"nb\">clear</span> Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">i = <span class=\"mi\">0</span> \\/ i = <span class=\"mi\">1</span> \\/ i = <span class=\"mi\">2</span> \\/ i = <span class=\"mi\">3</span> \\/ i = <span class=\"mi\">4</span> -&gt;\nalign_compatible_rec\n  (Maps.PTree.Nodes\n     (Maps.PTree.Node101\n        (Maps.PTree.Node101\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001 (...))))))))))\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node001\n                    (Maps.PTree.Node001\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node101\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100 (...))))\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node100 (...)))))))))))\n        (Maps.PTree.Node001\n           (Maps.PTree.Node001\n              (Maps.PTree.Node001\n                 (Maps.PTree.Node100\n                    (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node100\n                      (Maps.PTree.Node001\n                      (Maps.PTree.Node001 (...)))))))))))))\n  tlong (<span class=\"mi\">0</span> + <span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">        </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">intros</span> [-&gt;|[-&gt;|[-&gt;|[-&gt;| -&gt;]]]];<span class=\"nb\">econstructor</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>;<span class=\"nb\">apply</span> Zmod_divide;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>;<span class=\"nb\">cbn</span>;<span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk128\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk128\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers\n      (nested_field_type\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v))\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk129\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk129\"><span class=\"nb\">rewrite</span> field_address_offset <span class=\"bp\">by</span> <span class=\"bp\">assumption</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers\n      (nested_field_type\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v))\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (offset_val\n         (nested_field_offset\n            (Tstruct _secp256k1_modinv64_signed62\n               noattr) \n            (DOT _v)) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk12a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk12a\"><span class=\"nb\">rewrite</span> isptr_offset_val_zero <span class=\"bp\">by</span> (<span class=\"nb\">apply</span> headptr_isptr; <span class=\"bp\">assumption</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers\n      (nested_field_type\n         (Tstruct _secp256k1_modinv64_signed62 noattr)\n         (DOT _v))\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk12b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk12b\"><span class=\"nb\">simpl</span> (nested_field_type _ _).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (tarray tlong <span class=\"mi\">5</span>)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk12c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk12c\"><span class=\"nb\">unfold</span> tarray.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong <span class=\"mi\">5</span> noattr)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk12d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk12d\"><span class=\"nb\">rewrite</span> (split2_data_at_Tarray _ tlong _ <span class=\"mi\">1</span> _\n   [Vlong (Int64.repr <span class=\"mi\">1</span>); Vlong (Int64.repr <span class=\"mi\">0</span>);\n       Vlong (Int64.repr <span class=\"mi\">0</span>); Vlong (Int64.repr <span class=\"mi\">0</span>);\n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n   [Vlong (Int64.repr <span class=\"mi\">1</span>)] [Vlong (Int64.repr <span class=\"mi\">0</span>);\n       Vlong (Int64.repr <span class=\"mi\">0</span>); Vlong (Int64.repr <span class=\"mi\">0</span>);\n       Vlong (Int64.repr <span class=\"mi\">0</span>)]); <span class=\"kp\">try</span> <span class=\"kp\">solve</span>[<span class=\"nb\">cbn</span>;<span class=\"bp\">lia</span>]; <span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n  * mapsto_zeros <span class=\"mi\">32</span> Ers\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong <span class=\"mi\">1</span> noattr)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)\n      * data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n          [Vlong (Int64.repr <span class=\"mi\">0</span>); \n           Vlong (Int64.repr <span class=\"mi\">0</span>); \n           Vlong (Int64.repr <span class=\"mi\">0</span>); \n           Vlong (Int64.repr <span class=\"mi\">0</span>)]\n          (field_address0 \n             (Tarray tlong <span class=\"mi\">5</span> noattr) \n             (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk12e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk12e\"><span class=\"nb\">apply</span> sepcon_derives.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n|-- data_at Ers (Tarray tlong <span class=\"mi\">1</span> noattr)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk12f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk12f\"><hr></label><div class=\"goal-conclusion\">mapsto_zeros <span class=\"mi\">32</span> Ers\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address0 (Tarray tlong <span class=\"mi\">5</span> noattr) \n         (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk130\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk130\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n|-- data_at Ers (Tarray tlong <span class=\"mi\">1</span> noattr)\n      [Vlong (Int64.repr <span class=\"mi\">1</span>)]\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">  </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk131\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk131\"><span class=\"nb\">eapply</span> derives_trans;[|<span class=\"nb\">apply</span> data_at_singleton_array];[|<span class=\"bp\">reflexivity</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n|-- data_at Ers tlong (Vlong (Int64.repr <span class=\"mi\">1</span>))\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">     </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk132\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk132\"><span class=\"nb\">rewrite</span> &lt;-data_at_tulong_tlong.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto Ers (Tlong Unsigned noattr)\n  (gv _SECP256K1_SIGNED62_ONE) \n  (Vlong (Int64.repr <span class=\"mi\">1</span>))\n|-- data_at Ers tulong \n      (Vlong (Int64.repr <span class=\"mi\">1</span>))\n      (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">     </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk133\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk133\"><span class=\"nb\">erewrite</span> mapsto_data_at&#39;; <span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>; <span class=\"kp\">try</span> <span class=\"nb\">apply</span> JMeq_refl;<span class=\"kp\">try</span> entailer.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">field_compatible (Tlong Unsigned noattr) []\n  (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk134\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk134\"><span class=\"nb\">apply</span> headptr_field_compatible.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk135\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk135\"><hr></label><div class=\"goal-conclusion\">complete_legal_cosu_type (Tlong Unsigned noattr) = true</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk136\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk136\"><hr></label><div class=\"goal-conclusion\">legal_nested_field (Tlong Unsigned noattr) []</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk137\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk137\"><hr></label><div class=\"goal-conclusion\">sizeof (Tlong Unsigned noattr) &lt; Ptrofs.modulus</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk138\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk138\"><hr></label><div class=\"goal-conclusion\">align_compatible_rec cenv_cs (Tlong Unsigned noattr) <span class=\"mi\">0</span></div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk139\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk139\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk13a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk13a\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">complete_legal_cosu_type (Tlong Unsigned noattr) = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk13b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk13b\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">legal_nested_field (Tlong Unsigned noattr) []</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> <span class=\"nb\">constructor</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk13c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk13c\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">sizeof (Tlong Unsigned noattr) &lt; Ptrofs.modulus</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk13d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk13d\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs (Tlong Unsigned noattr) <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">econstructor</span>;[<span class=\"bp\">reflexivity</span>|<span class=\"nb\">apply</span> Z.divide_0_r].</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk13e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk13e\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible\n  (Tstruct _secp256k1_modinv64_signed62\n     noattr) (DOT _v)\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto_zeros <span class=\"mi\">32</span> Ers\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address0 (Tarray tlong <span class=\"mi\">5</span> noattr) \n         (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk13f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk13f\"><span class=\"nb\">clear</span> Hcompat.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto_zeros <span class=\"mi\">32</span> Ers\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address0 (Tarray tlong <span class=\"mi\">5</span> noattr) \n         (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk140\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk140\"><span class=\"nb\">assert</span> (Hcompat : field_compatible (tarray tlong <span class=\"mi\">5</span>) [] (gv _SECP256K1_SIGNED62_ONE)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk141\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk141\"><hr></label><div class=\"goal-conclusion\">mapsto_zeros <span class=\"mi\">32</span> Ers\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address0 (Tarray tlong <span class=\"mi\">5</span> noattr) \n         (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk142\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk142\"><span class=\"mi\">1</span>:{</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">        </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk143\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk143\"><span class=\"nb\">apply</span> headptr_field_compatible.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk144\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk144\"><hr></label><div class=\"goal-conclusion\">complete_legal_cosu_type (tarray tlong <span class=\"mi\">5</span>) = true</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk145\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk145\"><hr></label><div class=\"goal-conclusion\">legal_nested_field (tarray tlong <span class=\"mi\">5</span>) []</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk146\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk146\"><hr></label><div class=\"goal-conclusion\">sizeof (tarray tlong <span class=\"mi\">5</span>) &lt; Ptrofs.modulus</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk147\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk147\"><hr></label><div class=\"goal-conclusion\">align_compatible_rec cenv_cs (tarray tlong <span class=\"mi\">5</span>) <span class=\"mi\">0</span></div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk148\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk148\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">headptr (gv _SECP256K1_SIGNED62_ONE)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk149\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk149\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">complete_legal_cosu_type (tarray tlong <span class=\"mi\">5</span>) = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk14a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk14a\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">legal_nested_field (tarray tlong <span class=\"mi\">5</span>) []</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> <span class=\"nb\">constructor</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk14b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk14b\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">sizeof (tarray tlong <span class=\"mi\">5</span>) &lt; Ptrofs.modulus</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk14c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk14c\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs (tarray tlong <span class=\"mi\">5</span>) <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk14d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk14d\"><span class=\"nb\">eapply</span> align_compatible_rec_Tarray.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span> -&gt;\nalign_compatible_rec cenv_cs tlong\n  (<span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk14e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk14e\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span> -&gt;\nalign_compatible_rec cenv_cs tlong\n  (<span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk14f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk14f\"><span class=\"nb\">intros</span> i Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">align_compatible_rec cenv_cs tlong\n  (<span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">        </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk150\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk150\"><span class=\"nb\">cut</span> (i = <span class=\"mi\">0</span> \\/ i = <span class=\"mi\">1</span> \\/ i = <span class=\"mi\">2</span> \\/ i = <span class=\"mi\">3</span> \\/ i = <span class=\"mi\">4</span>);[|<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">5</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">i = <span class=\"mi\">0</span> \\/ i = <span class=\"mi\">1</span> \\/ i = <span class=\"mi\">2</span> \\/ i = <span class=\"mi\">3</span> \\/ i = <span class=\"mi\">4</span> -&gt;\nalign_compatible_rec cenv_cs tlong\n  (<span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">        </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk151\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk151\"><span class=\"nb\">clear</span> Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">i = <span class=\"mi\">0</span> \\/ i = <span class=\"mi\">1</span> \\/ i = <span class=\"mi\">2</span> \\/ i = <span class=\"mi\">3</span> \\/ i = <span class=\"mi\">4</span> -&gt;\nalign_compatible_rec cenv_cs tlong\n  (<span class=\"mi\">0</span> + Ctypes.sizeof tlong * i)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">        </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">intros</span> [-&gt;|[-&gt;|[-&gt;|[-&gt;| -&gt;]]]];<span class=\"nb\">econstructor</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>;<span class=\"nb\">apply</span> Zmod_divide;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>;<span class=\"nb\">cbn</span>;<span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">       </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk152\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk152\">}</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">mapsto_zeros <span class=\"mi\">32</span> Ers\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address0 (Tarray tlong <span class=\"mi\">5</span> noattr) \n         (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk153\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk153\"><span class=\"nb\">eapply</span> derives_trans;[<span class=\"nb\">apply</span> (mapsto_zero_data_at_zero (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr))|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">readable_share Ers</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk154\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk154\"><hr></label><div class=\"goal-conclusion\">complete_legal_cosu_type (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr) = true</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk155\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk155\"><hr></label><div class=\"goal-conclusion\">fully_nonvolatile\n  (rank_type cenv_cs (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr))\n  (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr) = true</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk156\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk156\"><hr></label><div class=\"goal-conclusion\">field_compatible (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr) []\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk157\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk157\"><hr></label><div class=\"goal-conclusion\">data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n  (zero_val (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr))\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address0 (Tarray tlong <span class=\"mi\">5</span> noattr) \n         (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk158\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk158\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">readable_share Ers</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> readable_Ers.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk159\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk159\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">complete_legal_cosu_type (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr) = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk15a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk15a\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">fully_nonvolatile\n  (rank_type cenv_cs (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr))\n  (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr) = true</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk15b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk15b\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">field_compatible (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr) []\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> (field_compatible0_nested_field_array (Tarray tlong <span class=\"mi\">5</span> noattr) []); <span class=\"kp\">try</span> <span class=\"bp\">lia</span>; <span class=\"nb\">apply</span> arr_field_compatible0; <span class=\"kp\">try</span> <span class=\"bp\">lia</span>; <span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk15c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk15c\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n  (zero_val (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr))\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (field_address0 (Tarray tlong <span class=\"mi\">5</span> noattr) \n         (SUB <span class=\"mi\">1</span>) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk15d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk15d\"><span class=\"nb\">rewrite</span> field_address0_offset <span class=\"bp\">by</span>\n       (<span class=\"nb\">eapply</span> field_compatible0_cons_Tarray;[<span class=\"bp\">reflexivity</span>|<span class=\"bp\">assumption</span>|<span class=\"bp\">lia</span>]).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n  (zero_val (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr))\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (offset_val\n         (nested_field_offset \n            (Tarray tlong <span class=\"mi\">5</span> noattr) \n            (SUB <span class=\"mi\">1</span>)) (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk15e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk15e\"><span class=\"nb\">change</span> (nested_field_offset (Tarray tlong <span class=\"mi\">5</span> noattr) (SUB <span class=\"mi\">1</span>)) <span class=\"kr\">with</span> <span class=\"mi\">8</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n  (zero_val (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr))\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (Tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>) noattr)\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk15f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk15f\"><span class=\"nb\">fold</span> (tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at Ers (tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>))\n  (zero_val (tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>)))\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>))\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk160\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk160\"><span class=\"nb\">rewrite</span> zero_val_tarray, zero_val_tlong.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kn\">ident</span> -&gt; val</span></span></span><br><span><var>Hheadptr</var><span class=\"hyp-type\"><b>: </b><span>headptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hptr</var><span class=\"hyp-type\"><b>: </b><span>isptr (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br><span><var>Hcompat</var><span class=\"hyp-type\"><b>: </b><span>field_compatible (tarray tlong <span class=\"mi\">5</span>) []\n  (gv _SECP256K1_SIGNED62_ONE)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at Ers (tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>))\n  (Zrepeat (Vlong Int64.zero) (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>))\n  (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))\n|-- data_at Ers (tarray tlong (<span class=\"mi\">5</span> - <span class=\"mi\">1</span>))\n      [Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>); \n       Vlong (Int64.repr <span class=\"mi\">0</span>)]\n      (offset_val <span class=\"mi\">8</span> (gv _SECP256K1_SIGNED62_ONE))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">      </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> derives_refl.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_modinv64_signed62_assign_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_modinv64_signed62_assign\n  WITH x : Z, ptr_dst : val, ptr_src : val, sh_dst : share, sh_src : share\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_signed62\n      ]\n    PROP( writable_share sh_dst\n        ; readable_share sh_src\n        )\n    PARAMS(ptr_dst; ptr_src)\n    SEP( data_at_ sh_dst t_secp256k1_modinv64_signed62 ptr_dst\n       ; data_at sh_src t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> x)) ptr_src\n       )\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP( data_at sh_dst t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> x)) ptr_dst\n       ; data_at sh_src t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> x)) ptr_src\n       ).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_modinv64_var_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_modinv64_var\n  WITH x : Z, m : Z, ptrx : val, modinfo : val, shx : share, sh_modinfo : share,\n       sh_debruijn : share, sh_SECP256K1_SIGNED62_ONE : share, gv : globals\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_modinfo\n      ]\n    PROP( Z.Odd m\n        ; <span class=\"mi\">0</span> &lt;= x &lt; m\n        ; <span class=\"mi\">1</span> &lt; m &lt; <span class=\"mi\">2</span>^<span class=\"mi\">256</span>\n        ; x = <span class=\"mi\">0</span> \\/ rel_prime x m\n        ; writable_share shx\n        ; readable_share sh_modinfo\n        ; readable_share sh_debruijn\n        ; readable_share sh_SECP256K1_SIGNED62_ONE\n        )\n    PARAMS(ptrx; modinfo)\n    GLOBALS(gv)\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> x)) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>)) (gv _SECP256K1_SIGNED62_ONE))\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> (modInv x m))) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>)) (gv _SECP256K1_SIGNED62_ONE)).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_modinv64_var_spec_prime</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_modinv64_var\n  WITH x : Z, m : Z, ptrx : val, modinfo : val, shx : share, sh_modinfo : share,\n       sh_debruijn : share, sh_SECP256K1_SIGNED62_ONE : share, gv : globals\n  PRE [ tptr t_secp256k1_modinv64_signed62\n      , tptr t_secp256k1_modinv64_modinfo\n      ]\n    PROP( Z.Odd m\n        ; <span class=\"mi\">0</span> &lt;= x &lt; m\n        ; m &lt; <span class=\"mi\">2</span>^<span class=\"mi\">256</span>\n        ; prime m\n        ; writable_share shx\n        ; readable_share sh_modinfo\n        ; readable_share sh_debruijn\n        ; readable_share sh_SECP256K1_SIGNED62_ONE\n        )\n    PARAMS(ptrx; modinfo)\n    GLOBALS(gv)\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> x)) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>)) (gv _SECP256K1_SIGNED62_ONE))\n  POST [ tvoid ]\n    PROP()\n    RETURN()\n    SEP(data_at shx t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> (modInv x m))) ptrx;\n        data_at sh_modinfo t_secp256k1_modinv64_modinfo (make_modinfo m) modinfo;\n        debruijn64_array sh_debruijn gv;\n        data_at sh_SECP256K1_SIGNED62_ONE t_secp256k1_modinv64_signed62 (map Vlong (Signed62.reprn <span class=\"mi\">5</span> <span class=\"mi\">1</span>)) (gv _SECP256K1_SIGNED62_ONE)).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n<span class=\"c\">(* Use with</span>\n<span class=\"c\">   forward_call secp256k1_modinv64_var_spec_prime_sub (x, m, ptrx, modinfo, shx, sh_modinfo, sh_debruijn, sh_SECP256K1_SIGNED62_ONE, gv)</span>\n<span class=\"c\">*)</span>\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk161\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk161\"><span class=\"kn\">Lemma</span> <span class=\"nf\">secp256k1_modinv64_var_spec_prime_sub</span> :\n  funspec_sub (snd secp256k1_modinv64_var_spec) (snd secp256k1_modinv64_var_spec_prime).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">funspec_sub (snd secp256k1_modinv64_var_spec)\n  (snd secp256k1_modinv64_var_spec_prime)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk162\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk162\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">funspec_sub (snd secp256k1_modinv64_var_spec)\n  (snd secp256k1_modinv64_var_spec_prime)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk163\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk163\">do_funspec_sub.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>w</var><span class=\"hyp-type\"><b>: </b><span>(Z * Z * val * val * share * share * share * share\n   * globals)%type</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := w <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) := p <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n <span class=\"kr\">fun</span> <span class=\"nv\">x0</span> : argsEnviron =&gt;\n !! (Z.Odd m /\\\n     <span class=\"mi\">0</span> &lt;= x &lt; m /\\\n     m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span> /\\\n     prime m /\\\n     writable_share shx /\\\n     readable_share sh_modinfo /\\\n     readable_share sh_debruijn /\\\n     readable_share sh_SECP256K1_SIGNED62_ONE /\\ <span class=\"kt\">True</span>) &amp;&amp;\n (!! (snd x0 = [ptrx; modinfo]) &amp;&amp;\n  (!! (gvars_denote gv\n         (Clight_seplog.mkEnv (fst x0) [] []) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n   (data_at shx t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr (x mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr x <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr ... <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr ... <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr (...) <span class=\"mi\">62</span>))] ptrx\n      * (data_at sh_modinfo\n           t_secp256k1_modinv64_modinfo\n           (make_modinfo m) modinfo\n           * (debruijn64_array sh_debruijn gv\n                * (data_at sh_SECP256K1_SIGNED62_ONE\n                     t_secp256k1_modinv64_signed62\n                     [...; ...; ...; ...; ...] (...)\n                     * emp))))))) (g, args)\n|-- EX (x1 : Z * Z * val * val * share * share * share\n               * share\n               * globals) (F : mpred),\n    F\n      * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := x1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) := p <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n         <span class=\"kr\">fun</span> <span class=\"nv\">x0</span> : argsEnviron =&gt;\n         !! (Z.Odd m /\\\n             <span class=\"mi\">0</span> &lt;= x &lt; m /\\\n             <span class=\"mi\">1</span> &lt; m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span> /\\\n             (x = <span class=\"mi\">0</span> \\/ rel_prime x m) /\\\n             writable_share shx /\\\n             readable_share sh_modinfo /\\\n             readable_share sh_debruijn /\\\n             readable_share sh_SECP256K1_SIGNED62_ONE /\\\n             <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd x0 = [ptrx; modinfo]) &amp;&amp;\n          (!! (gvars_denote gv\n                 (Clight_seplog.mkEnv (fst x0) [] []) /\\\n               <span class=\"kt\">True</span>) &amp;&amp;\n           (data_at shx t_secp256k1_modinv64_signed62\n              [Vlong (Int64.repr ...);\n               Vlong (Int64.repr ...);\n               Vlong (Int64.repr ...);\n               Vlong (Int64.repr ...);\n               Vlong (Int64.repr ...)] ptrx\n              * (data_at sh_modinfo\n                   t_secp256k1_modinv64_modinfo\n                   (make_modinfo m) modinfo\n                   * (debruijn64_array sh_debruijn gv\n                        * (...))))))) (g, args) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (F\n           * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := x1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) :=\n                p <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n              <span class=\"kr\">fun</span> <span class=\"nv\">_</span> : environ =&gt;\n              TT &amp;&amp;\n              (TT &amp;&amp;\n               (data_at shx\n                  t_secp256k1_modinv64_signed62\n                  [...; ...; ...; ...; ...] ptrx\n                  * (... * ...)))) rho&#39;)\n        |-- (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := w <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) :=\n               p <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n             <span class=\"kr\">fun</span> <span class=\"nv\">_</span> : environ =&gt;\n             TT &amp;&amp;\n             (TT &amp;&amp;\n              (data_at shx\n                 t_secp256k1_modinv64_signed62\n                 [Vlong (Int64.repr ...);\n                  Vlong (Int64.repr ...);\n                  Vlong (Int64.repr ...);\n                  Vlong (Int64.repr ...);\n                  Vlong (Int64.repr ...)] ptrx\n                 * (data_at sh_modinfo\n                      t_secp256k1_modinv64_modinfo\n                      (make_modinfo m) modinfo\n                      * (debruijn64_array sh_debruijn\n                           gv\n                           * (...)))))) rho&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk164\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk164\">Exists w emp.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>w</var><span class=\"hyp-type\"><b>: </b><span>(Z * Z * val * val * share * share * share * share\n   * globals)%type</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := w <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) := p <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n <span class=\"kr\">fun</span> <span class=\"nv\">x0</span> : argsEnviron =&gt;\n !! (Z.Odd m /\\\n     <span class=\"mi\">0</span> &lt;= x &lt; m /\\\n     m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span> /\\\n     prime m /\\\n     writable_share shx /\\\n     readable_share sh_modinfo /\\\n     readable_share sh_debruijn /\\\n     readable_share sh_SECP256K1_SIGNED62_ONE /\\ <span class=\"kt\">True</span>) &amp;&amp;\n (!! (snd x0 = [ptrx; modinfo]) &amp;&amp;\n  (!! (gvars_denote gv\n         (Clight_seplog.mkEnv (fst x0) [] []) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n   (data_at shx t_secp256k1_modinv64_signed62\n      [Vlong (Int64.repr (x mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr x <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr ... <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr ... <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n       Vlong (Int64.repr (Z.shiftr (...) <span class=\"mi\">62</span>))] ptrx\n      * (data_at sh_modinfo\n           t_secp256k1_modinv64_modinfo\n           (make_modinfo m) modinfo\n           * (debruijn64_array sh_debruijn gv\n                * (data_at sh_SECP256K1_SIGNED62_ONE\n                     t_secp256k1_modinv64_signed62\n                     [...; ...; ...; ...; ...] \n                     (...)\n                     * emp))))))) (\n  g, args)\n|-- emp\n      * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := w <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) := p <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n         <span class=\"kr\">fun</span> <span class=\"nv\">x0</span> : argsEnviron =&gt;\n         !! (Z.Odd m /\\\n             <span class=\"mi\">0</span> &lt;= x &lt; m /\\\n             <span class=\"mi\">1</span> &lt; m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span> /\\\n             (x = <span class=\"mi\">0</span> \\/ rel_prime x m) /\\\n             writable_share shx /\\\n             readable_share sh_modinfo /\\\n             readable_share sh_debruijn /\\\n             readable_share sh_SECP256K1_SIGNED62_ONE /\\\n             <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd x0 = [ptrx; modinfo]) &amp;&amp;\n          (!! (gvars_denote gv\n                 (Clight_seplog.mkEnv (fst x0) [] []) /\\\n               <span class=\"kt\">True</span>) &amp;&amp;\n           (data_at shx t_secp256k1_modinv64_signed62\n              [Vlong (Int64.repr (...));\n               Vlong (Int64.repr (...));\n               Vlong (Int64.repr (...));\n               Vlong (Int64.repr (...));\n               Vlong (Int64.repr (...))] ptrx\n              * (data_at sh_modinfo\n                   t_secp256k1_modinv64_modinfo\n                   (make_modinfo m) modinfo\n                   * (debruijn64_array sh_debruijn gv\n                        * \n                        (... * emp))))))) (\n          g, args) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (emp\n           * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := w <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) :=\n                p <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n              <span class=\"kr\">fun</span> <span class=\"nv\">_</span> : environ =&gt;\n              TT &amp;&amp;\n              (TT &amp;&amp;\n               (data_at shx\n                  t_secp256k1_modinv64_signed62\n                  [Vlong ...; \n                   Vlong ...; \n                   Vlong ...; \n                   Vlong ...; \n                   Vlong ...] ptrx\n                  * (data_at sh_modinfo\n                       t_secp256k1_modinv64_modinfo\n                       ... modinfo\n                       * \n                       (...))))) rho&#39;)\n        |-- (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, gv) := w <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, sh_SECP256K1_SIGNED62_ONE) :=\n               p <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, sh_debruijn) := p0 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, sh_modinfo) := p1 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p3</span>, shx) := p2 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p4</span>, modinfo) := p3 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">p5</span>, ptrx) := p4 <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">x</span>, m) := p5 <span class=\"kr\">in</span>\n             <span class=\"kr\">fun</span> <span class=\"nv\">_</span> : environ =&gt;\n             TT &amp;&amp;\n             (TT &amp;&amp;\n              (data_at shx\n                 t_secp256k1_modinv64_signed62\n                 [Vlong (Int64.repr (...));\n                  Vlong (Int64.repr (...));\n                  Vlong (Int64.repr (...));\n                  Vlong (Int64.repr (...));\n                  Vlong (Int64.repr (...))] ptrx\n                 * (data_at sh_modinfo\n                      t_secp256k1_modinv64_modinfo\n                      (make_modinfo m) modinfo\n                      * (debruijn64_array sh_debruijn\n                        gv\n                        * (... * emp)))))) rho&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk165\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk165\"><span class=\"nb\">destruct</span> w <span class=\"kr\">as</span> [[[[[[[[x m] ptrx] modinfo] shx] sh_modinfo] sh_debruinj] sh_SECP256K1_SIGNED62_ONE] gv].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">!! (Z.Odd m /\\\n    <span class=\"mi\">0</span> &lt;= x &lt; m /\\\n    m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span> /\\\n    prime m /\\\n    writable_share shx /\\\n    readable_share sh_modinfo /\\\n    readable_share sh_debruinj /\\\n    readable_share sh_SECP256K1_SIGNED62_ONE /\\ <span class=\"kt\">True</span>) &amp;&amp;\n(!! (snd (g, args) = [ptrx; modinfo]) &amp;&amp;\n (!! (gvars_denote gv\n        (Clight_seplog.mkEnv (fst (g, args)) [] []) /\\\n      <span class=\"kt\">True</span>) &amp;&amp;\n  (data_at shx t_secp256k1_modinv64_signed62\n     [Vlong (Int64.repr (x mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n      Vlong (Int64.repr (Z.shiftr x <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n      Vlong\n        (Int64.repr\n           (Z.shiftr (Z.shiftr x <span class=\"mi\">62</span>) <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n      Vlong\n        (Int64.repr\n           (Z.shiftr (Z.shiftr (Z.shiftr x <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n            mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n      Vlong\n        (Int64.repr\n           (Z.shiftr\n              (Z.shiftr (Z.shiftr (Z.shiftr x <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                 <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))] ptrx\n     * (data_at sh_modinfo\n          t_secp256k1_modinv64_modinfo\n          (make_modinfo m) modinfo\n          * (debruijn64_array sh_debruinj gv\n               * (data_at sh_SECP256K1_SIGNED62_ONE\n                    t_secp256k1_modinv64_signed62\n                    [Vlong (Int64.repr (<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                     Vlong\n                       (Int64.repr\n                        (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                     Vlong\n                       (Int64.repr\n                        (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                     Vlong\n                       (Int64.repr\n                        (Z.shiftr\n                        (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                        <span class=\"mi\">62</span> mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                     Vlong\n                       (Int64.repr\n                        (Z.shiftr\n                        (Z.shiftr\n                        (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                        <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))]\n                    (gv _SECP256K1_SIGNED62_ONE)\n                    * emp))))))\n|-- emp\n      * (!! (Z.Odd m /\\\n             <span class=\"mi\">0</span> &lt;= x &lt; m /\\\n             <span class=\"mi\">1</span> &lt; m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span> /\\\n             (x = <span class=\"mi\">0</span> \\/ rel_prime x m) /\\\n             writable_share shx /\\\n             readable_share sh_modinfo /\\\n             readable_share sh_debruinj /\\\n             readable_share sh_SECP256K1_SIGNED62_ONE /\\\n             <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd (g, args) = [ptrx; modinfo]) &amp;&amp;\n          (!! (gvars_denote gv\n                 (Clight_seplog.mkEnv \n                    (fst (g, args)) [] []) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n           (data_at shx t_secp256k1_modinv64_signed62\n              [Vlong (Int64.repr (x mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n               Vlong\n                 (Int64.repr\n                    (Z.shiftr x <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n               Vlong\n                 (Int64.repr\n                    (Z.shiftr (Z.shiftr x <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                     mod \n                     <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n               Vlong\n                 (Int64.repr\n                    (Z.shiftr\n                       (Z.shiftr (Z.shiftr x <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                       <span class=\"mi\">62</span> mod \n                     <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n               Vlong\n                 (Int64.repr\n                    (Z.shiftr\n                       (Z.shiftr\n                        (Z.shiftr (Z.shiftr x <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                        <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))] ptrx\n              * (data_at sh_modinfo\n                   t_secp256k1_modinv64_modinfo\n                   (make_modinfo m) modinfo\n                   * (debruijn64_array sh_debruinj gv\n                        * \n                        (data_at\n                        sh_SECP256K1_SIGNED62_ONE\n                        t_secp256k1_modinv64_signed62\n                        [Vlong\n                        (Int64.repr (<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr (Z.shiftr ... <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr \n                        (Z.shiftr (...) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))]\n                        (gv _SECP256K1_SIGNED62_ONE)\n                        * emp))))))) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (emp\n           * (TT &amp;&amp;\n              (TT &amp;&amp;\n               (data_at shx\n                  t_secp256k1_modinv64_signed62\n                  [Vlong\n                     (Int64.repr\n                        (modInv x m mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                   Vlong\n                     (Int64.repr\n                        (Z.shiftr (modInv x m) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                   Vlong\n                     (Int64.repr\n                        (Z.shiftr\n                        (Z.shiftr (modInv x m) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                   Vlong\n                     (Int64.repr\n                        (Z.shiftr\n                        (Z.shiftr \n                        (Z.shiftr (...) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                   Vlong\n                     (Int64.repr\n                        (Z.shiftr\n                        (Z.shiftr\n                        (Z.shiftr (Z.shiftr ... <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                        <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))] ptrx\n                  * (data_at sh_modinfo\n                       t_secp256k1_modinv64_modinfo\n                       (make_modinfo m) modinfo\n                       * \n                       (debruijn64_array sh_debruinj\n                        gv\n                        * (data_at\n                        sh_SECP256K1_SIGNED62_ONE\n                        t_secp256k1_modinv64_signed62\n                        [Vlong\n                        (Int64.repr (<span class=\"mi\">1</span> mod ...));\n                        Vlong\n                        (Int64.repr (... mod ...));\n                        Vlong\n                        (Int64.repr (... mod ...));\n                        Vlong\n                        (Int64.repr (... mod ...));\n                        Vlong\n                        (Int64.repr (Z.shiftr ... <span class=\"mi\">62</span>))]\n                        (gv _SECP256K1_SIGNED62_ONE)\n                        * emp)))))))\n        |-- TT &amp;&amp;\n            (TT &amp;&amp;\n             (data_at shx\n                t_secp256k1_modinv64_signed62\n                [Vlong\n                   (Int64.repr (modInv x m mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                 Vlong\n                   (Int64.repr\n                      (Z.shiftr (modInv x m) <span class=\"mi\">62</span>\n                       mod \n                       <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                 Vlong\n                   (Int64.repr\n                      (Z.shiftr\n                        (Z.shiftr (modInv x m) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                       mod \n                       <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                 Vlong\n                   (Int64.repr\n                      (Z.shiftr\n                        (Z.shiftr\n                        (Z.shiftr (modInv x m) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                        <span class=\"mi\">62</span> mod \n                       <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                 Vlong\n                   (Int64.repr\n                      (Z.shiftr\n                        (Z.shiftr\n                        (Z.shiftr\n                        (Z.shiftr (modInv x m) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                        <span class=\"mi\">62</span>) <span class=\"mi\">62</span>))] ptrx\n                * (data_at sh_modinfo\n                     t_secp256k1_modinv64_modinfo\n                     (make_modinfo m) modinfo\n                     * (debruijn64_array sh_debruinj\n                        gv\n                        * (data_at\n                        sh_SECP256K1_SIGNED62_ONE\n                        t_secp256k1_modinv64_signed62\n                        [Vlong\n                        (Int64.repr (<span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr (Z.shiftr <span class=\"mi\">1</span> <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr \n                        (Z.shiftr (...) <span class=\"mi\">62</span>) <span class=\"mi\">62</span>\n                        mod \n                        <span class=\"mi\">2</span> ^ <span class=\"mi\">62</span>));\n                        Vlong\n                        (Int64.repr\n                        (Z.shiftr\n                        (Z.shiftr (Z.shiftr ... <span class=\"mi\">62</span>) <span class=\"mi\">62</span>)\n                        <span class=\"mi\">62</span>))]\n                        (gv _SECP256K1_SIGNED62_ONE)\n                        * emp))))))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk166\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk166\">entailer!!.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> &lt; m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span> /\\ (x = <span class=\"mi\">0</span> \\/ rel_prime x m)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk167\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk167\"><span class=\"nb\">split</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> &lt; m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"spec-modinv64-v-chk168\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br></div><label class=\"goal-separator\" for=\"spec-modinv64-v-chk168\"><hr></label><div class=\"goal-conclusion\">x = <span class=\"mi\">0</span> \\/ rel_prime x m</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk169\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk169\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">1</span> &lt; m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk16a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk16a\"><span class=\"nb\">cut</span> (m &lt;&gt; <span class=\"mi\">1</span>);[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">m &lt;&gt; <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk16b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk16b\"><span class=\"nb\">intros</span> Hm; <span class=\"nb\">apply</span> not_prime_1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br><span><var>Hm</var><span class=\"hyp-type\"><b>: </b><span>m = <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">prime <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">congruence</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk16c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk16c\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">x = <span class=\"mi\">0</span> \\/ rel_prime x m</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk16d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk16d\"><span class=\"nb\">destruct</span> (Z.eq_dec x <span class=\"mi\">0</span>) <span class=\"kr\">as</span> [Hx0|Hx0];[<span class=\"bp\">tauto</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br><span><var>Hx0</var><span class=\"hyp-type\"><b>: </b><span>x &lt;&gt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">x = <span class=\"mi\">0</span> \\/ rel_prime x m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"spec-modinv64-v-chk16e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"spec-modinv64-v-chk16e\"><span class=\"nb\">right</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>x, m</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>ptrx, modinfo</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shx, sh_modinfo, sh_debruinj, sh_SECP256K1_SIGNED62_ONE</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>gv</var><span class=\"hyp-type\"><b>: </b><span>globals</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_modinv64_signed62;\n       tptr t_secp256k1_modinv64_modinfo], tvoid))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Z.Odd m</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= x &lt; m</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>m &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">256</span></span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>prime m</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>writable_share shx</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_modinfo</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_debruinj</span></span></span><br><span><var>H7</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh_SECP256K1_SIGNED62_ONE</span></span></span><br><span><var>H8</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [ptrx; modinfo]</span></span></span><br><span><var>H9</var><span class=\"hyp-type\"><b>: </b><span>gvars_denote gv\n  (Clight_seplog.mkEnv (fst (g, args)) [] [])</span></span></span><br><span><var>Hx0</var><span class=\"hyp-type\"><b>: </b><span>x &lt;&gt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">rel_prime x m</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> rel_prime_le_prime;[<span class=\"bp\">assumption</span>|<span class=\"bp\">lia</span>].</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span></pre></article></body></html>"
  },
  {
    "path": "alectryon/verif_int128_impl.v.html",
    "content": "<!DOCTYPE html>\n<html class=\"alectryon-standalone\"><head><title>verif_int128_impl.v</title><meta charset=\"utf-8\"><meta content=\"Alectryon\" name=\"generator\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><link href=\"alectryon.css\" rel=\"stylesheet\"><link href=\"pygments.css\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/IBM-type/0.5.4/css/ibm-type.min.css\" integrity=\"sha512-sky5cf9Ts6FY1kstGOBHSybfKqdHR41M0Ldb0BjNiv3ifltoQIsg0zIaQ+wwdwgQ0w9vKFW7Js50lxH9vqNSSw==\" crossorigin=\"anonymous\" />\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/firacode/5.2.0/fira_code.min.css\" integrity=\"sha512-MbysAYimH1hH2xYzkkMHB6MqxBqfP0megxsCLknbYqHVwXTCg9IqHbk+ZP/vnhO8UEW6PaXAkKe2vQ+SWACxxA==\" crossorigin=\"anonymous\" /><script src=\"alectryon.js\"></script></head><body><article class=\"alectryon-root alectryon-windowed\"><div class=\"alectryon-banner\">Built with <a href=\"https://github.com/cpitclaudel/alectryon/\">Alectryon</a>, running Coq+SerAPI v8.17.0+0.17.3. Bubbles (<span class=\"alectryon-bubble\"></span>) indicate interactive fragments: hover for details, tap to reveal contents. Use <kbd>Ctrl+↑</kbd> <kbd>Ctrl+↓</kbd> to navigate, <kbd>Ctrl+🖱️</kbd> to focus. On Mac, use <kbd>⌘</kbd> instead of <kbd>Ctrl</kbd>.</div><pre class=\"alectryon-io highlight\"><!-- Generator: Alectryon --><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> VST.floyd.proofauto.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> jets_secp256k1.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> spec_int128.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> VST.msl.iter_sepcon.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> extraMath.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Require Import</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Opaque</span> Z.shiftl Z.shiftr Z.pow.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk0\"><span class=\"kn\">Definition</span> <span class=\"nf\">Vprog</span> : varspecs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">varspecs</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">mk_varspecs prog.</span><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Defined</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_umul128_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_umul128\n  WITH a : Z, b : Z, hi : val, sh : share\nPRE [ tulong, tulong, tptr tulong ]\n  PROP(writable_share sh;\n       <span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus;\n       <span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus)\n  PARAMS(Vlong (Int64.repr a); Vlong (Int64.repr b); hi)\n  SEP(data_at_ sh tulong hi)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr (a * b)))\n  SEP(data_at sh tulong (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>))) hi).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">secp256k1_mul128_spec</span> : <span class=\"kn\">ident</span> * funspec :=\nDECLARE _secp256k1_mul128\n  WITH a : Z, b : Z, hi : val, sh : share\n  PRE [ tlong, tlong, tptr tlong ]\n    PROP(writable_share sh;\n         Int64.min_signed &lt;= a &lt;= Int64.max_signed;\n         Int64.min_signed &lt;= b &lt;= Int64.max_signed)\n    PARAMS(Vlong (Int64.repr a); Vlong (Int64.repr b); hi)\n  SEP(data_at_ sh tlong hi)\nPOST [ tulong ]\n  PROP()\n  RETURN(Vlong (Int64.repr (a * b)))\n  SEP(data_at sh tlong (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>))) hi).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1\"><span class=\"kn\">Lemma</span> <span class=\"nf\">iter_sepcon_wand_in</span> <span class=\"nv\">B</span> <span class=\"nv\">f</span> (<span class=\"nv\">x</span> : B) <span class=\"nv\">l</span> (<span class=\"nv\">Hl</span> : In x l) : iter_sepcon f l = (f x * (f x -* iter_sepcon f l))%logic.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>In x l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">iter_sepcon f l = (f x * (f x -* iter_sepcon f l))%logic</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk2\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>In x l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">iter_sepcon f l = (f x * (f x -* iter_sepcon f l))%logic</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk3\"><span class=\"nb\">apply</span> pred_ext;[|<span class=\"nb\">apply</span> wand_frame_elim].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span>In x l</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">iter_sepcon f l |-- f x * (f x -* iter_sepcon f l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk4\"><span class=\"nb\">apply</span> In_Permutation_cons <span class=\"kr\">in</span> Hl.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kr\">exists</span> <span class=\"nv\">l&#39;</span> : list B, Permutation l (x :: l&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">iter_sepcon f l |-- f x * (f x -* iter_sepcon f l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk5\"><span class=\"nb\">destruct</span> Hl <span class=\"kr\">as</span> [l&#39; Hl&#39;].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l, l'</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl'</var><span class=\"hyp-type\"><b>: </b><span>Permutation l (x :: l&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">iter_sepcon f l |-- f x * (f x -* iter_sepcon f l)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk6\"><span class=\"nb\">rewrite</span> (iter_sepcon_permutation _ Hl&#39;).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l, l'</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl'</var><span class=\"hyp-type\"><b>: </b><span>Permutation l (x :: l&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">iter_sepcon f (x :: l&#39;)\n|-- f x * (f x -* iter_sepcon f (x :: l&#39;))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk7\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l, l'</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl'</var><span class=\"hyp-type\"><b>: </b><span>Permutation l (x :: l&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">f x * iter_sepcon f l&#39;\n|-- f x * (f x -* f x * iter_sepcon f l&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk8\">entailer!.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>B</var><span class=\"hyp-type\"><b>: </b><span><span class=\"kt\">Type</span></span></span></span><br><span><var>f</var><span class=\"hyp-type\"><b>: </b><span>B -&gt; mpred</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>B</span></span></span><br><span><var>l, l'</var><span class=\"hyp-type\"><b>: </b><span>list B</span></span></span><br><span><var>Hl'</var><span class=\"hyp-type\"><b>: </b><span>Permutation l (x :: l&#39;)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">iter_sepcon f l&#39; |-- f x -* f x * iter_sepcon f l&#39;</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> wand_frame_intro.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Ltac</span> <span class=\"nf\">unfold_Int128</span> :=\n  <span class=\"nb\">unfold</span> Int128_max_unsigned,\n         Int128_max_signed,\n         Int128_min_signed,\n         Int128_modulus\n  <span class=\"kr\">in</span> *|-*.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Definition</span> <span class=\"nf\">Gprog</span> := <span class=\"kp\">ltac</span>:(with_library prog\n  [secp256k1_umul128_spec\n  ;secp256k1_mul128_spec\n<span class=\"c\">(*   ;secp256k1_u128_load_spec *)</span>\n  ;secp256k1_u128_mul_spec\n  ;secp256k1_u128_accum_mul_spec\n  ;secp256k1_u128_accum_u64_spec\n  ;secp256k1_u128_rshift_spec\n  ;secp256k1_u128_to_u64_spec\n  ;secp256k1_u128_hi_u64_spec\n  ;secp256k1_u128_from_u64_spec\n  ;secp256k1_u128_check_bits_spec\n<span class=\"c\">(*   ;secp256k1_i128_load_spec *)</span>\n  ;secp256k1_i128_mul_spec\n  ;secp256k1_i128_accum_mul_spec\n  ;secp256k1_i128_dissip_mul_spec\n  ;secp256k1_i128_det_spec\n  ;secp256k1_i128_rshift_spec\n  ;secp256k1_i128_to_u64_spec\n  ;secp256k1_i128_to_i64_spec\n  ;secp256k1_i128_from_i64_spec\n  ;secp256k1_i128_eq_var_spec\n  ;secp256k1_i128_check_pow2_spec\n  ]).</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk9\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_umul128</span>: semax_body Vprog Gprog f_secp256k1_umul128 secp256k1_umul128_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_umul128\n  secp256k1_umul128_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_umul128\n  secp256k1_umul128_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)); temp _hi hi)\n   SEP (data_at_ sh tulong hi))\n  (_ll = ((tulong) (tuint) _a * (tuint) _b);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong\n  (Int64.repr\n     ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n         + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n         + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) = \nVlong (Int64.repr (a * b))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkd\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkd\"><hr></label><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n               <span class=\"mi\">32</span>\n           + Z.shiftr (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>))) hi</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chke\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chke\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong\n  (Int64.repr\n     ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n         + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n         + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) = \nVlong (Int64.repr (a * b))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkf\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr\n  ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n      + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n      + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n     * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n     + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) = \nInt64.repr (a * b)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk10\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk10\"><span class=\"nb\">apply</span> Int64.eqm_repr_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eqm\n  ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n      + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n      + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n     * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n     + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n  (Int64.unsigned (Int64.repr (a * b)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk11\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk11\"><span class=\"nb\">eapply</span> Int64.eqm_trans;[<span class=\"nb\">apply</span> Int64.eqm_unsigned_repr|<span class=\"nb\">apply</span> Int64.eqm_refl2].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.unsigned\n  (Int64.repr\n     ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n         + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n         + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) = \nInt64.unsigned (Int64.repr (a * b))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk12\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk12\"><span class=\"nb\">rewrite</span> !Int64.unsigned_repr_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n    + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\nmod Int64.modulus = (a * b) mod Int64.modulus</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk13\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk13\"><span class=\"nb\">change</span> Int64.modulus <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n    + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk14\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk14\"><span class=\"nb\">rewrite</span> !Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk15\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk15\"><span class=\"kr\">match goal with</span>\n   |- (<span class=\"nl\">?x</span> mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) = _ =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n  (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) +\n  <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)  +\n  (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) +\n  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n       * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk16\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk16\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n       * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk17\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk17\"><span class=\"nb\">rewrite</span> &lt;- !(Zmult_mod_distr_l _ _ (<span class=\"mi\">2</span>^<span class=\"mi\">32</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n     mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk18\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk18\"><span class=\"nb\">rewrite</span> &lt;- (Z.mod_small (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)) <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> strict_bounds; solve_bounds).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n     mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk19\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk19\"><span class=\"nb\">change</span> (<span class=\"mi\">2</span>^<span class=\"mi\">32</span> * <span class=\"mi\">2</span>^<span class=\"mi\">32</span>) <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n     mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1a\"><span class=\"nb\">rewrite</span> Zplus_mod_idemp_r, &lt;- Zplus_assoc, Zplus_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n   + ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n        + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1b\"><span class=\"kr\">match goal with</span>\n   |- (<span class=\"nl\">?x</span> mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) = _ =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n  ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> +\n  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n       * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d\"><span class=\"nb\">change</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>) <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^<span class=\"mi\">32</span> * <span class=\"mi\">2</span>^<span class=\"mi\">32</span>) <span class=\"nb\">at</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e\"><span class=\"nb\">rewrite</span> Zmult_mod_distr_l, Zmult_mod_idemp_r, &lt;- Zmult_mod_distr_l, Zplus_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f\"><span class=\"kr\">match goal with</span>\n   |- (<span class=\"nl\">?x</span> mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) = _ =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n  ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) * b) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * b)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk20\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk20\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk21\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk21\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n               <span class=\"mi\">32</span>\n           + Z.shiftr (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>))) hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk22\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk22\"><span class=\"nb\">rewrite</span> &lt;- (Z.shiftr_shiftr _ <span class=\"mi\">32</span> <span class=\"mi\">32</span>), !Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n           + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n               / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk23\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk23\"><span class=\"nb\">rewrite</span> &lt;- Z.div_add_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        (((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n             + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n             + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                 + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                   mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                 + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                   mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk24\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk24\"><span class=\"kr\">match goal with</span>\n   |- <span class=\"kp\">context</span> [Int64.repr (<span class=\"nl\">?x</span> / <span class=\"mi\">2</span>^<span class=\"mi\">32</span>)] =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n   (((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) +\n     (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) +\n    (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) +\n    (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n   ) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                 + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                      * \n                      (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n                       / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n                      + \n                      (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                      mod \n                      <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk25\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk25\"><span class=\"nb\">rewrite</span> &lt;- !Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                 + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk26\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk26\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_add_distr_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n                     + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk27\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk27\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk28\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk28\"><span class=\"nb\">rewrite</span> &lt;- Z.div_add_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        (((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n             + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk29\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk29\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_assoc.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        (((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n             + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk2a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk2a\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_add_distr_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk2b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk2b\"><span class=\"nb\">rewrite</span> (Z.mul_comm _ (<span class=\"mi\">2</span>^<span class=\"mi\">32</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk2c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk2c\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk2d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk2d\"><span class=\"nb\">rewrite</span> Z.add_comm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk2e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk2e\"><span class=\"nb\">rewrite</span> &lt;- Z.div_add_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk2f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk2f\"><span class=\"nb\">rewrite</span> (Z.mul_comm _ (<span class=\"mi\">2</span>^<span class=\"mi\">32</span>)), Z.mul_assoc.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * b + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk30\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk30\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_add_distr_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong\n     (Int64.repr\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * b\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk31\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk31\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tulong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tulong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tulong\n  (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tulong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk32\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk32\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_mul128</span>: semax_body Vprog Gprog f_secp256k1_mul128 secp256k1_mul128_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_mul128\n  secp256k1_mul128_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk33\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk33\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_mul128\n  secp256k1_mul128_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk34\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk34\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)); temp _hi hi)\n   SEP (data_at_ sh tlong hi))\n  (_ll = ((tulong) (tuint) _a * (tuint) _b);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk35\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk35\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong\n  (Int64.repr\n     ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n         + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n         + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) = \nVlong (Int64.repr (a * b))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk36\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk36\"><hr></label><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n               <span class=\"mi\">32</span>\n           + Z.shiftr (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>))) hi</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk37\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk37\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vlong\n  (Int64.repr\n     ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n         + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n         + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) = \nVlong (Int64.repr (a * b))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk38\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk38\"><span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr\n  ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n      + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n      + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n     * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n     + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) = \nInt64.repr (a * b)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk39\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk39\"><span class=\"nb\">apply</span> Int64.eqm_repr_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eqm\n  ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n      + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n      + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n     * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n     + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n  (Int64.unsigned (Int64.repr (a * b)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk3a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk3a\"><span class=\"nb\">eapply</span> Int64.eqm_trans;[<span class=\"nb\">apply</span> Int64.eqm_unsigned_repr|<span class=\"nb\">apply</span> Int64.eqm_refl2].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.unsigned\n  (Int64.repr\n     ((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n         + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n         + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) = \nInt64.unsigned (Int64.repr (a * b))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk3b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk3b\"><span class=\"nb\">rewrite</span> !Int64.unsigned_repr_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n    + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\nmod Int64.modulus = (a * b) mod Int64.modulus</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk3c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk3c\"><span class=\"nb\">change</span> Int64.modulus <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n    + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk3d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk3d\"><span class=\"nb\">rewrite</span> !Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk3e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk3e\"><span class=\"nb\">unfold</span> Int64.Z_mod_modulus.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n    + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk3f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk3f\"><span class=\"kr\">match goal with</span>\n   |- (<span class=\"nl\">?x</span> mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) = _ =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n  (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) +\n  <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)  +\n  (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) +\n  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n       * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n        * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n        + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk40\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk40\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n       * ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk41\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk41\"><span class=\"nb\">rewrite</span> &lt;- !(Zmult_mod_distr_l _ _ (<span class=\"mi\">2</span>^<span class=\"mi\">32</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n     mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk42\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk42\"><span class=\"nb\">rewrite</span> &lt;- (Z.mod_small (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)) <span class=\"bp\">by</span> (<span class=\"nb\">rewrite</span> strict_bounds; solve_bounds).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n     mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk43\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk43\"><span class=\"nb\">change</span> (<span class=\"mi\">2</span>^<span class=\"mi\">32</span> * <span class=\"mi\">2</span>^<span class=\"mi\">32</span>) <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n     mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk44\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk44\"><span class=\"nb\">rewrite</span> Zplus_mod_idemp_r, &lt;- Zplus_assoc, Zplus_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n   + ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n        + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk45\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk45\"><span class=\"kr\">match goal with</span>\n   |- (<span class=\"nl\">?x</span> mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) = _ =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n  ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> +\n  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n       * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk46\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk46\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk47\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk47\"><span class=\"nb\">change</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>) <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^<span class=\"mi\">32</span> * <span class=\"mi\">2</span>^<span class=\"mi\">32</span>) <span class=\"nb\">at</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n   + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk48\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk48\"><span class=\"nb\">rewrite</span> Zmult_mod_distr_l, Zmult_mod_idemp_r, &lt;- Zmult_mod_distr_l, Zplus_mod_idemp_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk49\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk49\"><span class=\"kr\">match goal with</span>\n   |- (<span class=\"nl\">?x</span> mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) = _ =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n  ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) * b) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * b)\nmod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk4a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk4a\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk4b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk4b\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n               <span class=\"mi\">32</span>\n           + Z.shiftr (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>))) hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk4c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk4c\"><span class=\"nb\">rewrite</span> &lt;- (Z.shiftr_shiftr _ <span class=\"mi\">32</span> <span class=\"mi\">32</span>), !Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n           + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n               / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk4d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk4d\"><span class=\"nb\">rewrite</span> &lt;- Z.div_add_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        (((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n             + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n             + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                 + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                   mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                 + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                   mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk4e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk4e\"><span class=\"kr\">match goal with</span>\n   |- <span class=\"kp\">context</span> [Int64.repr (<span class=\"nl\">?x</span> / <span class=\"mi\">2</span>^<span class=\"mi\">32</span>)] =&gt; <span class=\"nb\">replace</span> x <span class=\"kr\">with</span>\n   (((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) +\n     (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) +\n    (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) +\n    (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n   ) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>\n  <span class=\"kr\">end</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            * (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                 + (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                      * \n                      (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n                       / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n                      + \n                      (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                      mod \n                      <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk4f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk4f\"><span class=\"nb\">rewrite</span> &lt;- !Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                 + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk50\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk50\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_add_distr_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n                     + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk51\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk51\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk52\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk52\"><span class=\"nb\">rewrite</span> &lt;- Z.div_add_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        (((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n             + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk53\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk53\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_assoc.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        (((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n             + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk54\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk54\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_add_distr_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk55\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk55\"><span class=\"nb\">rewrite</span> (Z.mul_comm _ (<span class=\"mi\">2</span>^<span class=\"mi\">32</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            * (<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n            / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n            + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk56\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk56\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> + a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk57\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk57\"><span class=\"nb\">rewrite</span> Z.add_comm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk58\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk58\"><span class=\"nb\">rewrite</span> &lt;- Z.div_add_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b * <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk59\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk59\"><span class=\"nb\">rewrite</span> (Z.mul_comm _ (<span class=\"mi\">2</span>^<span class=\"mi\">32</span>)), Z.mul_assoc.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * b + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * b)\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk5a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk5a\"><span class=\"nb\">rewrite</span> &lt;- Z.mul_add_distr_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong\n     (Int64.repr\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) + a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) * b\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n           / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk5b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk5b\"><span class=\"nb\">rewrite</span> &lt;- Z_div_mod_eq <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>PNhi</var><span class=\"hyp-type\"><b>: </b><span>is_pointer_or_null hi</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible tlong [] hi</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>tc_val&#39; tlong\n  (Vlong\n     (Int64.repr\n        (Z.shiftr a <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>\n           + Z.shiftr\n               (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>) <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr a <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n               <span class=\"mi\">32</span>\n           + Z.shiftr\n               (Z.shiftr\n                  (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))\n                  <span class=\"mi\">32</span>\n                  + (a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> * Z.shiftr b <span class=\"mi\">32</span>)\n                    mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>\n                  + (Z.shiftr a <span class=\"mi\">32</span>\n                       * \n                       (b mod <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)) mod \n                    <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>) <span class=\"mi\">32</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh tlong\n  (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>))) hi\n|-- data_at sh tlong\n      (Vlong (Int64.repr (a * b / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">32</span>)))\n      hi</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n<span class=\"c\">(*</span>\n<span class=\"c\">Lemma body_secp256k1_u128_load: semax_body Vprog Gprog f_secp256k1_u128_load secp256k1_u128_load_spec.</span>\n<span class=\"c\">Proof.</span>\n<span class=\"c\">start_function.</span>\n<span class=\"c\">repeat forward.</span>\n<span class=\"c\">entailer!.</span>\n<span class=\"c\">unfold secp256k1_uint128_at.</span>\n<span class=\"c\">rewrite &lt;- (Int64.repr_unsigned (Int64.repr (_ + lo))), Int64.unsigned_repr_eq.</span>\n<span class=\"c\">rewrite Z.shiftl_mul_pow2, &lt;- Zplus_mod_idemp_l, &lt;- Zmult_mod_idemp_r, Z_mod_same_full by lia.</span>\n<span class=\"c\">rewrite Z.mul_0_r, Z.add_0_l.</span>\n<span class=\"c\">clear_mod.</span>\n<span class=\"c\">rewrite Z.shiftr_div_pow2, Z.div_add_l by lia.</span>\n<span class=\"c\">rewrite Z.div_small, Z.add_0_r by solve_bounds.</span>\n<span class=\"c\">entailer!.</span>\n<span class=\"c\">Qed.</span>\n<span class=\"c\">*)</span>\n\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk5c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk5c\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_mul</span>: semax_body Vprog Gprog f_secp256k1_u128_mul secp256k1_u128_mul_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_mul\n  secp256k1_u128_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk5d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk5d\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_mul\n  secp256k1_u128_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk5e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk5e\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ sh t_secp256k1_uint128 r))\n  (_t&#39;1 =\n     _secp256k1_umul128\n     ([(_a)%expr; (_b)%expr; (&amp;(_r -&gt; _hi))%expr]);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk5f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk5f\">unfold_data_at (data_at_ sh t_secp256k1_uint128 r).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (field_at sh t_secp256k1_uint128 \n          (DOT _lo)\n          (fst\n             (default_val\n                (nested_field_type t_secp256k1_uint128\n                   []))) r;\n   field_at sh t_secp256k1_uint128 \n     (DOT _hi)\n     (snd\n        (default_val\n           (nested_field_type t_secp256k1_uint128 [])))\n     r))\n  (_t&#39;1 =\n     _secp256k1_umul128\n     ([(_a)%expr; (_b)%expr; (&amp;(_r -&gt; _hi))%expr]);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk60\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk60\"><span class=\"nb\">simpl</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (field_at sh t_secp256k1_uint128 \n          (DOT _lo) Vundef r;\n   field_at sh t_secp256k1_uint128 (DOT _hi) Vundef r))\n  (_t&#39;1 =\n     _secp256k1_umul128\n     ([(_a)%expr; (_b)%expr; (&amp;(_r -&gt; _hi))%expr]);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk61\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk61\"><span class=\"nb\">rewrite</span> (field_at_data_at _ _ (DOT _hi)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (field_at sh t_secp256k1_uint128 \n          (DOT _lo) Vundef r;\n   data_at sh\n     (nested_field_type t_secp256k1_uint128 (DOT _hi))\n     Vundef\n     (field_address t_secp256k1_uint128 (DOT _hi) r)))\n  (_t&#39;1 =\n     _secp256k1_umul128\n     ([(_a)%expr; (_b)%expr; (&amp;(_r -&gt; _hi))%expr]);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk62\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk62\">assert_PROP (field_compatible t_secp256k1_uint128 (DOT _hi) r) <span class=\"bp\">by</span>\n entailer!.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible t_secp256k1_uint128 (DOT _hi) r</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (field_at sh t_secp256k1_uint128 \n          (DOT _lo) Vundef r;\n   data_at sh\n     (nested_field_type t_secp256k1_uint128 (DOT _hi))\n     Vundef\n     (field_address t_secp256k1_uint128 (DOT _hi) r)))\n  (_t&#39;1 =\n     _secp256k1_umul128\n     ([(_a)%expr; (_b)%expr; (&amp;(_r -&gt; _hi))%expr]);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk63\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk63\">forward_call (a, b, (field_address t_secp256k1_uint128 (DOT _hi) r), sh).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible t_secp256k1_uint128 (DOT _hi) r</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;1 (Vlong (Int64.repr (a * b)));\n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at sh tulong\n          (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n          (field_address t_secp256k1_uint128 \n             (DOT _hi) r);\n   field_at sh t_secp256k1_uint128 (DOT _lo) Vundef r))\n  ((_r -&gt; _lo) = _t&#39;1;) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk64\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk64\">forward.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible t_secp256k1_uint128 (DOT _hi) r</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ENTAIL Delta,\nPROP ( )\nLOCAL (temp _t&#39;1 (Vlong (Int64.repr (a * b)));\ntemp _r r; temp _a (Vlong (Int64.repr a));\ntemp _b (Vlong (Int64.repr b)))\nSEP (data_at sh tulong\n       (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n       (field_address t_secp256k1_uint128 (DOT _hi) r);\nfield_at sh t_secp256k1_uint128 \n  (DOT _lo) (Vlong (Int64.repr (a * b))) r)\n|-- PROP ( )\n    RETURN ( ) SEP (secp256k1_uint128_at sh (a * b) r)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk65\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk65\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible t_secp256k1_uint128 (DOT _hi) r</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ENTAIL Delta,\nPROP ( )\nLOCAL (temp _t&#39;1 (Vlong (Int64.repr (a * b)));\ntemp _r r; temp _a (Vlong (Int64.repr a));\ntemp _b (Vlong (Int64.repr b)))\nSEP (data_at sh tulong\n       (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n       (field_address t_secp256k1_uint128 (DOT _hi) r);\nfield_at sh t_secp256k1_uint128 \n  (DOT _lo) (Vlong (Int64.repr (a * b))) r)\n|-- PROP ( )\n    RETURN ( ) SEP (data_at sh t_secp256k1_uint128\n                      (Vlong (Int64.repr (a * b)),\n                       Vlong\n                       (Int64.repr\n                       (Z.shiftr (a * b) <span class=\"mi\">64</span>))) r)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk66\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk66\">unfold_data_at (data_at sh t_secp256k1_uint128 _ r).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>field_compatible t_secp256k1_uint128 (DOT _hi) r</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">ENTAIL Delta,\nPROP ( )\nLOCAL (temp _t&#39;1 (Vlong (Int64.repr (a * b)));\ntemp _r r; temp _a (Vlong (Int64.repr a));\ntemp _b (Vlong (Int64.repr b)))\nSEP (data_at sh tulong\n       (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n       (field_address t_secp256k1_uint128 (DOT _hi) r);\nfield_at sh t_secp256k1_uint128 \n  (DOT _lo) (Vlong (Int64.repr (a * b))) r)\n|-- PROP ( )\n    RETURN ( ) SEP (field_at sh t_secp256k1_uint128\n                      (DOT _lo)\n                      (Vlong (Int64.repr (a * b))) r\n                      * \n                      field_at sh t_secp256k1_uint128\n                       (DOT _hi)\n                       (Vlong\n                       (Int64.repr\n                       (Z.shiftr (a * b) <span class=\"mi\">64</span>))) r)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk67\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk67\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_accum_mul</span>: semax_body Vprog Gprog f_secp256k1_u128_accum_mul secp256k1_u128_accum_mul_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_accum_mul\n  secp256k1_u128_accum_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk68\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk68\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_accum_mul\n  secp256k1_u128_accum_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk69\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk69\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tulong v_hi; temp _r r;\n   temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tulong v_hi;\n   secp256k1_uint128_at sh r0 r))\n  ((_t&#39;1 =\n      _secp256k1_umul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    _lo = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk6a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk6a\">forward_call.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tulong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tulong\n          (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n          v_hi; secp256k1_uint128_at sh r0 r))\n  ((_t&#39;5 = (_r -&gt; _lo);\n    (_r -&gt; _lo) = (_t&#39;5 + _lo);)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk6b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk6b\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a * b)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                + Z.b2z\n                    ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                     (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))))) r\n|-- secp256k1_uint128_at sh (r0 + a * b) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk6c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk6c\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a * b)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                + Z.b2z\n                    ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                     (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a * b)),\n       Vlong (Int64.repr (Z.shiftr (r0 + a * b) <span class=\"mi\">64</span>)))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk6d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk6d\"><span class=\"nb\">rewrite</span> Z.add_assoc.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a * b)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span> + Z.shiftr (a * b) <span class=\"mi\">64</span>\n           + Z.b2z\n               ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a * b)),\n       Vlong (Int64.repr (Z.shiftr (r0 + a * b) <span class=\"mi\">64</span>)))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk6e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk6e\"><span class=\"nb\">rewrite</span> &lt;- shiftr_add_carry <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= b &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a * b)),\n   Vlong (Int64.repr (Z.shiftr (r0 + a * b) <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a * b)),\n       Vlong (Int64.repr (Z.shiftr (r0 + a * b) <span class=\"mi\">64</span>)))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk6f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk6f\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_accum_u64</span>: semax_body Vprog Gprog f_secp256k1_u128_accum_u64 secp256k1_u128_accum_u64_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_accum_u64\n  secp256k1_u128_accum_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk70\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk70\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_accum_u64\n  secp256k1_u128_accum_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk71\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk71\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  ((_t&#39;3 = (_r -&gt; _lo);\n    (_r -&gt; _lo) = (_t&#39;3 + _a);)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk72\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk72\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + Z.b2z ((r0 + a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? a)))) r\n|-- secp256k1_uint128_at sh (r0 + a) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk73\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk73\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + Z.b2z ((r0 + a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? a)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a)),\n       Vlong (Int64.repr (Z.shiftr (r0 + a) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk74\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk74\"><span class=\"nb\">rewrite</span> shiftr_add_carry <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + Z.b2z ((r0 + a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? a)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a)),\n       Vlong\n         (Int64.repr\n            (Z.shiftr r0 <span class=\"mi\">64</span> + Z.shiftr a <span class=\"mi\">64</span>\n               + Z.b2z\n                   ((r0 + a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                    a mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk75\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk75\"><span class=\"nb\">rewrite</span> (shiftr_small a), Z.add_0_r, (Z.mod_small a) <span class=\"bp\">by</span> solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + Z.b2z ((r0 + a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? a)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a)),\n       Vlong\n         (Int64.repr\n            (Z.shiftr r0 <span class=\"mi\">64</span>\n               + Z.b2z ((r0 + a) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? a)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk76\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk76\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_rshift</span>: semax_body Vprog Gprog f_secp256k1_u128_rshift secp256k1_u128_rshift_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_rshift\n  secp256k1_u128_rshift_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk77\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk77\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_rshift\n  secp256k1_u128_rshift_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk78\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk78\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     <span class=\"kr\">if</span> (!(_n &lt; (<span class=\"mi\">128</span>))) {\n       <span class=\"kr\">for</span> (;\n       ;\n       break;) {\n         ((_t&#39;5 = _stderr;\n           _fprintf\n             ([(_t&#39;5)%expr; (___stringlit_6)%expr;\n               (___stringlit_159)%expr; ((<span class=\"mi\">79</span>))%expr;\n               (___stringlit_158)%expr]);)\n          _abort([]);)\n       }\n     }\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk79\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk79\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int.repr\n  (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">128</span>))) = Int.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk7a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk7a\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;4 = (_r -&gt; _hi);\n       (_r -&gt; _lo) = _t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>));)\n      (_r -&gt; _hi) = (<span class=\"mi\">0</span>);)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = _t&#39;1 &gt;&gt; _n;)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_u128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk7b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk7b\"><span class=\"nb\">revert</span> H1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">128</span>))) = Int.zero -&gt;\n<span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk7c\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk7c\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;4 = (_r -&gt; _hi);\n       (_r -&gt; _lo) = _t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>));)\n      (_r -&gt; _hi) = (<span class=\"mi\">0</span>);)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = _t&#39;1 &gt;&gt; _n;)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_u128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk7d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk7d\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">128</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk7e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk7e\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;4 = (_r -&gt; _hi);\n       (_r -&gt; _lo) = _t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>));)\n      (_r -&gt; _hi) = (<span class=\"mi\">0</span>);)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = _t&#39;1 &gt;&gt; _n;)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_u128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk7f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk7f\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">128</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk80\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk80\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;4 = (_r -&gt; _hi);\n       (_r -&gt; _lo) = _t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>));)\n      (_r -&gt; _hi) = (<span class=\"mi\">0</span>);)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = _t&#39;1 &gt;&gt; _n;)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_u128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk81\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk81\"><span class=\"nb\">case</span> Z.ltb_spec;[<span class=\"bp\">discriminate</span>|<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;4 = (_r -&gt; _hi);\n       (_r -&gt; _lo) = _t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>));)\n      (_r -&gt; _hi) = (<span class=\"mi\">0</span>);)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = _t&#39;1 &gt;&gt; _n;)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_u128_rshift)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk82\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk82\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; Int128_modulus</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;4 = (_r -&gt; _hi);\n       (_r -&gt; _lo) = _t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>));)\n      (_r -&gt; _hi) = (<span class=\"mi\">0</span>);)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = _t&#39;1 &gt;&gt; _n;)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (data_at sh t_secp256k1_uint128\n                       (Vlong\n                       (Int64.repr (Z.shiftr r0 n)),\n                       Vlong\n                       (Int64.repr\n                       (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>)))\n                       r)\n        * stackframe_of f_secp256k1_u128_rshift)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk83\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk83\">unfold_Int128.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;4 = (_r -&gt; _hi);\n       (_r -&gt; _lo) = _t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>));)\n      (_r -&gt; _hi) = (<span class=\"mi\">0</span>);)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = _t&#39;1 &gt;&gt; _n;)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (data_at sh t_secp256k1_uint128\n                       (Vlong\n                       (Int64.repr (Z.shiftr r0 n)),\n                       Vlong\n                       (Int64.repr\n                       (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>)))\n                       r)\n        * stackframe_of f_secp256k1_u128_rshift)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk84\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk84\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) (n - <span class=\"mi\">64</span>))),\n   Vlong (Int64.repr <span class=\"mi\">0</span>)) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk85\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk85\"><hr></label><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) n))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk86\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk86\"><hr></label><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk87\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk87\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) (n - <span class=\"mi\">64</span>))),\n   Vlong (Int64.repr <span class=\"mi\">0</span>)) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk88\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk88\"><span class=\"nb\">rewrite</span> !Z.shiftr_shiftr <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">64</span> + (n - <span class=\"mi\">64</span>)))),\n   Vlong (Int64.repr <span class=\"mi\">0</span>)) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk89\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk89\"><span class=\"nb\">replace</span> (<span class=\"mi\">64</span> + (n - <span class=\"mi\">64</span>)) <span class=\"kr\">with</span> n <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (Z.shiftr r0 n)),\n   Vlong (Int64.repr <span class=\"mi\">0</span>)) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk8a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk8a\"><span class=\"nb\">rewrite</span> (shiftr_small _ (n + <span class=\"mi\">64</span>));[entailer!|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ (n + <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk8b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk8b\"><span class=\"nb\">cut</span> (<span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span>^<span class=\"mi\">128</span>);[|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> -&gt; <span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ (n + <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk8c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk8c\"><span class=\"nb\">assert</span> (<span class=\"mi\">2</span>^<span class=\"mi\">128</span> &lt;= <span class=\"mi\">2</span>^(n+<span class=\"mi\">64</span>)) <span class=\"bp\">by</span> (<span class=\"nb\">apply</span> Z.pow_le_mono_r;<span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> &lt;= <span class=\"mi\">2</span> ^ (n + <span class=\"mi\">64</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> -&gt; <span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ (n + <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk8d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk8d\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) n))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk8e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk8e\"><span class=\"nb\">rewrite</span> !Z.shiftr_shiftr <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">64</span> + n)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk8f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk8f\"><span class=\"nb\">rewrite</span> Z.add_comm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk90\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk90\"><span class=\"nb\">replace</span> (Int64.repr (Z.lor _ _)) <span class=\"kr\">with</span> (Int64.repr (Z.shiftr r0 n));[entailer!|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 n) = \nInt64.repr\n  (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk91\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk91\"><span class=\"nb\">rewrite</span> &lt;- Z.shiftl_mul_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 n) = \nInt64.repr\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk92\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk92\"><span class=\"nb\">apply</span> Int64.eqm_samerepr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eqm (Z.shiftr r0 n)\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk93\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk93\"><span class=\"nb\">apply</span> Int64.eqm_same_bits.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; Int64.zwordsize -&gt;\nZ.testbit (Z.shiftr r0 n) i = \nZ.testbit\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n)) i</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk94\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk94\"><span class=\"nb\">change</span> Int64.zwordsize <span class=\"kr\">with</span> <span class=\"mi\">64</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span> -&gt;\nZ.testbit (Z.shiftr r0 n) i = \nZ.testbit\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n)) i</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk95\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk95\"><span class=\"nb\">intros</span> i Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit (Z.shiftr r0 n) i = \nZ.testbit\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n)) i</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk96\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk96\"><span class=\"nb\">rewrite</span> Z.lor_spec, !Z.shiftr_spec, Z.shiftl_spec <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk97\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk97\"><span class=\"nb\">destruct</span> (Z.neg_nonneg_cases (i - (<span class=\"mi\">64</span> - n))) <span class=\"kr\">as</span> [Hneg|Hpos].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>i - (<span class=\"mi\">64</span> - n) &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk98\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk98\"><hr></label><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk99\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk99\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>i - (<span class=\"mi\">64</span> - n) &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk9a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk9a\"><span class=\"nb\">rewrite</span> (Z.testbit_neg_r _ _ Hneg).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>i - (<span class=\"mi\">64</span> - n) &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (false\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk9b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk9b\"><span class=\"nb\">rewrite</span> Z.mod_pow2_bits_low <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>i - (<span class=\"mi\">64</span> - n) &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (false || Z.testbit r0 (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk9c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk9c\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk9d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk9d\"><span class=\"nb\">rewrite</span> Z.shiftr_spec <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit r0\n                       (i - (<span class=\"mi\">64</span> - n) + <span class=\"mi\">64</span>)\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk9e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk9e\"><span class=\"nb\">rewrite</span> Z.mod_pow2_bits_high, orb_false_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = Z.testbit r0\n                       (i - (<span class=\"mi\">64</span> - n) + <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk9f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk9f\"><span class=\"nb\">replace</span> (i - (<span class=\"mi\">64</span> - n) + <span class=\"mi\">64</span>) <span class=\"kr\">with</span> (i + n) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = Z.testbit r0 (i + n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka0\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka1\"><span class=\"nb\">replace</span> n <span class=\"kr\">with</span> <span class=\"mi\">0</span> <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">0</span>)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">0</span>) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka2\"><span class=\"nb\">rewrite</span> Z.shiftr_0_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr r0),\n       Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka3\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_to_u64</span>: semax_body Vprog Gprog f_secp256k1_u128_to_u64 secp256k1_u128_to_u64_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_to_u64\n  secp256k1_u128_to_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka4\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_to_u64\n  secp256k1_u128_to_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka5\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = (_a -&gt; _lo);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka6\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;1 = (_a -&gt; _lo);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka7\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_hi_u64</span>: semax_body Vprog Gprog f_secp256k1_u128_hi_u64 secp256k1_u128_hi_u64_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_hi_u64\n  secp256k1_u128_hi_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka8\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_hi_u64\n  secp256k1_u128_hi_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chka9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chka9\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = (_a -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkaa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkaa\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;1 = (_a -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkab\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkab\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_from_u64</span>: semax_body Vprog Gprog f_secp256k1_u128_from_u64 secp256k1_u128_from_u64_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_from_u64\n  secp256k1_u128_from_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkac\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkac\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_from_u64\n  secp256k1_u128_from_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkad\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkad\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; Int64.modulus</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a)))\n   SEP (data_at_ sh t_secp256k1_uint128 r))\n  ((_r -&gt; _hi) = (<span class=\"mi\">0</span>);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkae\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkae\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a), Vlong (Int64.repr <span class=\"mi\">0</span>)) r\n|-- secp256k1_uint128_at sh a r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkaf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkaf\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a), Vlong (Int64.repr <span class=\"mi\">0</span>)) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (Z.shiftr a <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb0\"><span class=\"nb\">replace</span> (Z.shiftr a <span class=\"mi\">64</span>) <span class=\"kr\">with</span> <span class=\"mi\">0</span>;[entailer!|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> = Z.shiftr a <span class=\"mi\">64</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">symmetry</span>; <span class=\"nb\">auto using</span> shiftr_small.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb1\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_u128_check_bits</span>: semax_body Vprog Gprog f_secp256k1_u128_check_bits secp256k1_u128_check_bits_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_check_bits\n  secp256k1_u128_check_bits_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb2\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_u128_check_bits\n  secp256k1_u128_check_bits_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb3\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     <span class=\"kr\">if</span> (!(_n &lt; (<span class=\"mi\">128</span>))) {\n       <span class=\"kr\">for</span> (;\n       ;\n       break;) {\n         ((_t&#39;5 = _stderr;\n           _fprintf\n             ([(_t&#39;5)%expr; (___stringlit_6)%expr;\n               (___stringlit_159)%expr; ((<span class=\"mi\">103</span>))%expr;\n               (___stringlit_158)%expr]);)\n          _abort([]);)\n       }\n     }\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb4\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int.repr\n  (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">128</span>))) = Int.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkb5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkb5\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;4 = (_r -&gt; _hi);\n      _t&#39;1 = (tint) (_t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>)) == (<span class=\"mi\">0</span>));)\n   } <span class=\"kr\">else</span> {\n     (_t&#39;2 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;2 == (<span class=\"mi\">0</span>)) {\n        ((_t&#39;3 = (_r -&gt; _lo);\n          _t&#39;1 = (tbool) (_t&#39;3 &gt;&gt; _n == (<span class=\"mi\">0</span>));)\n         _t&#39;1 = (tint) _t&#39;1;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb6\"><span class=\"nb\">revert</span> H1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">128</span>))) = Int.zero -&gt;\n<span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkb7\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkb7\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;4 = (_r -&gt; _hi);\n      _t&#39;1 = (tint) (_t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>)) == (<span class=\"mi\">0</span>));)\n   } <span class=\"kr\">else</span> {\n     (_t&#39;2 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;2 == (<span class=\"mi\">0</span>)) {\n        ((_t&#39;3 = (_r -&gt; _lo);\n          _t&#39;1 = (tbool) (_t&#39;3 &gt;&gt; _n == (<span class=\"mi\">0</span>));)\n         _t&#39;1 = (tint) _t&#39;1;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkb8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkb8\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">128</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkb9\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkb9\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;4 = (_r -&gt; _hi);\n      _t&#39;1 = (tint) (_t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>)) == (<span class=\"mi\">0</span>));)\n   } <span class=\"kr\">else</span> {\n     (_t&#39;2 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;2 == (<span class=\"mi\">0</span>)) {\n        ((_t&#39;3 = (_r -&gt; _lo);\n          _t&#39;1 = (tbool) (_t&#39;3 &gt;&gt; _n == (<span class=\"mi\">0</span>));)\n         _t&#39;1 = (tint) _t&#39;1;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkba\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkba\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">128</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkbb\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkbb\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;4 = (_r -&gt; _hi);\n      _t&#39;1 = (tint) (_t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>)) == (<span class=\"mi\">0</span>));)\n   } <span class=\"kr\">else</span> {\n     (_t&#39;2 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;2 == (<span class=\"mi\">0</span>)) {\n        ((_t&#39;3 = (_r -&gt; _lo);\n          _t&#39;1 = (tbool) (_t&#39;3 &gt;&gt; _n == (<span class=\"mi\">0</span>));)\n         _t&#39;1 = (tint) _t&#39;1;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkbc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkbc\"><span class=\"nb\">case</span> Z.ltb_spec;[<span class=\"bp\">discriminate</span>|<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;4 = (_r -&gt; _hi);\n      _t&#39;1 = (tint) (_t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>)) == (<span class=\"mi\">0</span>));)\n   } <span class=\"kr\">else</span> {\n     (_t&#39;2 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;2 == (<span class=\"mi\">0</span>)) {\n        ((_t&#39;3 = (_r -&gt; _lo);\n          _t&#39;1 = (tbool) (_t&#39;3 &gt;&gt; _n == (<span class=\"mi\">0</span>));)\n         _t&#39;1 = (tint) _t&#39;1;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkbd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkbd\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;4 = (_r -&gt; _hi);\n      _t&#39;1 = (tint) (_t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>)) == (<span class=\"mi\">0</span>));)\n   } <span class=\"kr\">else</span> {\n     (_t&#39;2 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;2 == (<span class=\"mi\">0</span>)) {\n        ((_t&#39;3 = (_r -&gt; _lo);\n          _t&#39;1 = (tbool) (_t&#39;3 &gt;&gt; _n == (<span class=\"mi\">0</span>));)\n         _t&#39;1 = (tint) _t&#39;1;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkbe\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkbe\"><span class=\"nb\">assert</span> (shiftr_small_eq : (r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)) <span class=\"bp\">by</span>\n  (<span class=\"nb\">case</span> Z.eqb_spec; <span class=\"nb\">intros</span> Heq; <span class=\"nb\">rewrite</span> shiftr_small_iff <span class=\"kr\">in</span> Heq; <span class=\"bp\">lia</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;4 = (_r -&gt; _hi);\n      _t&#39;1 = (tint) (_t&#39;4 &gt;&gt; (_n - (<span class=\"mi\">64</span>)) == (<span class=\"mi\">0</span>));)\n   } <span class=\"kr\">else</span> {\n     (_t&#39;2 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;2 == (<span class=\"mi\">0</span>)) {\n        ((_t&#39;3 = (_r -&gt; _lo);\n          _t&#39;1 = (tbool) (_t&#39;3 &gt;&gt; _n == (<span class=\"mi\">0</span>));)\n         _t&#39;1 = (tint) _t&#39;1;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkbf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkbf\">forward_if (temp _t&#39;1 (Vint (Int.repr (Z.b2z (r0 &lt;? <span class=\"mi\">2</span>^n)))));[| |forward].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkc0\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkc0\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;2 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc1\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc2\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 &lt;? <span class=\"mi\">2</span> ^ n))) = \nVint\n  (Int.repr\n     (Z.b2z (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) (n - <span class=\"mi\">64</span>) =? <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc3\"><span class=\"kp\">do</span> <span class=\"mi\">3</span> <span class=\"nb\">f_equal</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) (n - <span class=\"mi\">64</span>) =?\n                 <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc4\"><span class=\"nb\">rewrite</span> !Z.shiftr_shiftr <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 (<span class=\"mi\">64</span> + (n - <span class=\"mi\">64</span>)) =? <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc5\"><span class=\"nb\">replace</span> (<span class=\"mi\">64</span> + (n - <span class=\"mi\">64</span>)) <span class=\"kr\">with</span> n <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">assumption</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc6\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;2 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc7\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = Int64.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 &lt;? <span class=\"mi\">2</span> ^ n))) = \nVint\n  (Int.repr (Z.b2z (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =? <span class=\"mi\">0</span>)))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkc8\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkc8\"><hr></label><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 &lt;? <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkc9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkc9\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = Int64.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 &lt;? <span class=\"mi\">2</span> ^ n))) = \nVint\n  (Int.repr (Z.b2z (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =? <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkca\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkca\"><span class=\"nb\">rewrite</span> shiftr_small_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = Int64.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (Z.shiftr r0 n =? <span class=\"mi\">0</span>))) = \nVint\n  (Int.repr (Z.b2z (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =? <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkcb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkcb\"><span class=\"nb\">rewrite</span> (Z_div_mod_eq_full r0 (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)) <span class=\"nb\">at</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = Int64.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        (Z.shiftr\n           (<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =?\n         <span class=\"mi\">0</span>))) = Vint\n                  (Int.repr\n                     (Z.b2z\n                       (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =?\n                       <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkcc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkcc\"><span class=\"nb\">rewrite</span> &lt;- Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = Int64.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        (Z.shiftr\n           (<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * Z.shiftr r0 <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =?\n         <span class=\"mi\">0</span>))) = Vint\n                  (Int.repr\n                     (Z.b2z\n                       (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =?\n                       <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkcd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkcd\"><span class=\"nb\">apply</span> (<span class=\"nb\">f_equal</span> Int64.unsigned) <span class=\"kr\">in</span> H2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.unsigned (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)) = \nInt64.unsigned Int64.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        (Z.shiftr\n           (<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * Z.shiftr r0 <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =?\n         <span class=\"mi\">0</span>))) = Vint\n                  (Int.repr\n                     (Z.b2z\n                       (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =?\n                       <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkce\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkce\"><span class=\"nb\">revert</span> H2; convert_C_to_math; <span class=\"nb\">intros</span> -&gt;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        (Z.shiftr (<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">0</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =? <span class=\"mi\">0</span>))) = \nVint\n  (Int.repr (Z.b2z (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =? <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkcf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkcf\"><span class=\"nb\">replace</span> (_ + r0 mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) <span class=\"kr\">with</span> (r0 mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr (Z.b2z (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =? <span class=\"mi\">0</span>))) = \nVint\n  (Int.repr (Z.b2z (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n =? <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd0\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 &lt;? <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd1\"><span class=\"nb\">rewrite</span> shiftr_small_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (Z.shiftr r0 n =? <span class=\"mi\">0</span>))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd2\"><span class=\"nb\">case</span> (Z.eqb_spec);[|<span class=\"bp\">reflexivity</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr r0 n = <span class=\"mi\">0</span> -&gt;\nVint (Int.repr (Z.b2z true)) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd3\"><span class=\"nb\">intros</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 n = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z true)) = Vint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd4\"><span class=\"nb\">elim</span> H2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 n = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = Int64.repr <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd5\"><span class=\"nb\">replace</span> <span class=\"mi\">64</span> <span class=\"kr\">with</span> (n + (<span class=\"mi\">64</span> - n)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 n = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 (n + (<span class=\"mi\">64</span> - n))) = Int64.repr <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd6\"><span class=\"nb\">rewrite</span> &lt;- Z.shiftr_shiftr, Hr0, Z.shiftr_0_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0 &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>shiftr_small_eq</var><span class=\"hyp-type\"><b>: </b><span>(r0 &lt;? <span class=\"mi\">2</span> ^ n) = (Z.shiftr r0 n =? <span class=\"mi\">0</span>)</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt; Int64.repr <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 n = <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr <span class=\"mi\">0</span> = Int64.repr <span class=\"mi\">0</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n<span class=\"c\">(*</span>\n<span class=\"c\">Lemma body_secp256k1_i128_load: semax_body Vprog Gprog f_secp256k1_i128_load secp256k1_i128_load_spec.</span>\n<span class=\"c\">Proof.</span>\n<span class=\"c\">start_function.</span>\n<span class=\"c\">repeat forward.</span>\n<span class=\"c\">entailer!.</span>\n<span class=\"c\">unfold secp256k1_uint128_at.</span>\n<span class=\"c\">rewrite &lt;- (Int64.repr_unsigned (Int64.repr (_ + lo))), Int64.unsigned_repr_eq.</span>\n<span class=\"c\">rewrite Z.shiftl_mul_pow2, &lt;- Zplus_mod_idemp_l, &lt;- Zmult_mod_idemp_r, Z_mod_same_full by lia.</span>\n<span class=\"c\">rewrite Z.mul_0_r, Z.add_0_l.</span>\n<span class=\"c\">clear_mod.</span>\n<span class=\"c\">rewrite Z.shiftr_div_pow2, Z.div_add_l by lia.</span>\n<span class=\"c\">rewrite Z.div_small, Z.add_0_r by solve_bounds.</span>\n<span class=\"c\">entailer!.</span>\n<span class=\"c\">Qed.</span>\n<span class=\"c\">*)</span>\n\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd7\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_mul</span>: semax_body Vprog Gprog f_secp256k1_i128_mul secp256k1_i128_mul_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_mul\n  secp256k1_i128_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd8\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_mul\n  secp256k1_i128_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkd9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkd9\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tlong v_hi; temp _r r;\n   temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tlong v_hi;\n   data_at_ sh t_secp256k1_uint128 r))\n  ((_t&#39;1 =\n      _secp256k1_mul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    (_r -&gt; _lo) = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkda\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkda\">forward_call.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;1 (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n          v_hi; data_at_ sh t_secp256k1_uint128 r))\n  ((_r -&gt; _lo) = _t&#39;1;\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkdb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkdb\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_accum_mul</span>: semax_body Vprog Gprog f_secp256k1_i128_accum_mul secp256k1_i128_accum_mul_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_accum_mul\n  secp256k1_i128_accum_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkdc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkdc\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_accum_mul\n  secp256k1_i128_accum_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkdd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkdd\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 + a * b &lt;=\nInt128_max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tlong v_hi; temp _r r;\n   temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tlong v_hi;\n   secp256k1_uint128_at sh r0 r))\n  ((_t&#39;1 =\n      _secp256k1_mul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    _lo = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkde\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkde\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 + a * b &lt;=\nInt128_max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tlong v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;1 =\n      _secp256k1_mul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    _lo = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkdf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkdf\">unfold_Int128.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tlong v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;1 =\n      _secp256k1_mul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    _lo = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chke0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chke0\">forward_call.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n          v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;18 = (_r -&gt; _lo);\n    (_r -&gt; _lo) = (_t&#39;18 + _lo);)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chke1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chke1\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;14 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;14 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;15 = _hi;\n          _t&#39;2 =\n            (tbool) ((tulong) _t&#39;15\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;2 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;11 = (_r -&gt; _hi);\n      _t&#39;12 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;2\n              &lt;= (_t&#39;11 + (tulong) _t&#39;12\n                    &lt;= (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;13 = _stderr;\n            _fprintf\n              ([(_t&#39;13)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">129</span>))%expr; \n                (___stringlit_160)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chke2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chke2\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;14 = (_r -&gt; _hi);\n    <span class=\"kr\">if</span> (_t&#39;14 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n      (_t&#39;15 = _hi;\n       _t&#39;2 =\n         (tbool) ((tulong) _t&#39;15\n                    &lt;= (<span class=\"mi\">9223372036854775807</span>)LL);)\n    } <span class=\"kr\">else</span> {\n      _t&#39;2 = (<span class=\"mi\">0</span>);\n    })\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chke3\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chke3\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chke4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chke4\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;14\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;14 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;15 = _hi;\n      _t&#39;2 =\n        (tbool) ((tulong) _t&#39;15\n                   &lt;= (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;2 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chke5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chke5\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chke6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chke6\"><span class=\"nb\">set</span> (hi := (_ + Z.b2z _)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;14\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;14 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;15 = _hi;\n      _t&#39;2 =\n        (tbool) ((tulong) _t&#39;15\n                   &lt;= (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;2 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chke7\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chke7\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chke8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chke8\">forward_if (temp _t&#39;2 (Vint (Int.repr (Z.b2z (((Z.shiftr r0 <span class=\"mi\">64</span>) mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> &lt;=? <span class=\"mi\">9223372036854775807</span>) &amp;&amp; (hi mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> &lt;=? <span class=\"mi\">9223372036854775807</span>))%bool))));\n <span class=\"kp\">repeat</span> progressC;\n <span class=\"nb\">revert</span> H3;\n convert_C_to_math;\n <span class=\"kp\">try</span> <span class=\"kp\">solve</span> \n  [<span class=\"kp\">repeat</span> (<span class=\"kp\">first</span>[<span class=\"nb\">case</span> (Z.leb_spec _ _)|<span class=\"nb\">case</span> (Z.ltb_spec _ _)];<span class=\"kp\">try</span> <span class=\"bp\">lia</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>)].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=?\n          <span class=\"mi\">9223372036854775807</span>) &amp;&amp;\n         (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">9223372036854775807</span>))\n      || negb\n           (<span class=\"mi\">9223372036854775807</span> &lt;?\n            (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;12 (Vlong (Int64.repr hi));\n   temp _t&#39;11 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2\n     (Vint\n        (Int.repr\n           (Z.b2z\n              ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=?\n                <span class=\"mi\">9223372036854775807</span>) &amp;&amp;\n               (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">9223372036854775807</span>)))));\n   temp _t&#39;14 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;13 = _stderr;\n       _fprintf\n         ([(_t&#39;13)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">129</span>))%expr; \n           (___stringlit_160)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chke9\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chke9\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkea\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkea\"><span class=\"nb\">case</span> (Z.leb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb\n        (true &amp;&amp;\n         (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">9223372036854775807</span>))\n      || negb\n           (<span class=\"mi\">9223372036854775807</span> &lt;?\n            (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;12 (Vlong (Int64.repr hi));\n   temp _t&#39;11 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2\n     (Vint\n        (Int.repr\n           (Z.b2z\n              (true &amp;&amp;\n               (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">9223372036854775807</span>)))));\n   temp _t&#39;14 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;13 = _stderr;\n       _fprintf\n         ([(_t&#39;13)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">129</span>))%expr; \n           (___stringlit_160)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkeb\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkeb\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkec\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkec\"><span class=\"nb\">case</span> (Z.leb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hhi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb (true &amp;&amp; true)\n      || negb\n           (<span class=\"mi\">9223372036854775807</span> &lt;?\n            (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;12 (Vlong (Int64.repr hi));\n   temp _t&#39;11 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;14 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;13 = _stderr;\n       _fprintf\n         ([(_t&#39;13)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">129</span>))%expr; \n           (___stringlit_160)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chked\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chked\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkee\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkee\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || negb true)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;12 (Vlong (Int64.repr hi));\n   temp _t&#39;11 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;14 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;13 = _stderr;\n       _fprintf\n         ([(_t&#39;13)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">129</span>))%expr; \n           (___stringlit_160)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkef\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkef\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkf0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkf0\"><span class=\"nb\">apply</span> Int64_low_is_nonneg <span class=\"kr\">in</span> Hr0; [|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || negb true)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;12 (Vlong (Int64.repr hi));\n   temp _t&#39;11 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;14 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;13 = _stderr;\n       _fprintf\n         ([(_t&#39;13)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">129</span>))%expr; \n           (___stringlit_160)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkf1\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkf1\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkf2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkf2\"><span class=\"nb\">apply</span> Int64_low_is_nonneg <span class=\"kr\">in</span> Hhi;[|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || negb true)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;12 (Vlong (Int64.repr hi));\n   temp _t&#39;11 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;14 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;13 = _stderr;\n       _fprintf\n         ([(_t&#39;13)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">129</span>))%expr; \n           (___stringlit_160)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkf3\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkf3\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkf4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkf4\"><span class=\"nb\">apply</span> Int64_high_is_neg <span class=\"kr\">in</span> Hr0hi;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> + hi &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkf5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkf5\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkf6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkf6\"><span class=\"nb\">unfold</span> hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;=\nZ.shiftr r0 <span class=\"mi\">64</span>\n  + (Z.shiftr (a * b) <span class=\"mi\">64</span>\n       + Z.b2z\n           ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n            (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) &lt;= Int64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkf7\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkf7\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkf8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkf8\"><span class=\"nb\">rewrite</span> Z.add_assoc, &lt;- shiftr_add_carry <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr (r0 + a * b) <span class=\"mi\">64</span> &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkf9\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkf9\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkfa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkfa\">solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;9 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;10 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;10\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;6 = (_r -&gt; _hi);\n      _t&#39;7 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;6 + (tulong) _t&#39;7\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;8 = _stderr;\n            _fprintf\n              ([(_t&#39;8)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">134</span>))%expr; \n                (___stringlit_161)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkfb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkfb\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;9 = (_r -&gt; _hi);\n    <span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n      (_t&#39;10 = _hi;\n       _t&#39;3 =\n         (tbool) ((tulong) _t&#39;10\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL);)\n    } <span class=\"kr\">else</span> {\n      _t&#39;3 = (<span class=\"mi\">0</span>);\n    })\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkfc\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkfc\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkfd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkfd\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;9\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;10 = _hi;\n      _t&#39;3 =\n        (tbool) ((tulong) _t&#39;10\n                   &gt; (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;3 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chkfe\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chkfe\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chkff\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chkff\"><span class=\"nb\">set</span> (hi := (_ + Z.b2z _)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;9\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;9 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;10 = _hi;\n      _t&#39;3 =\n        (tbool) ((tulong) _t&#39;10\n                   &gt; (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;3 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk100\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk100\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk101\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk101\">forward_if (temp _t&#39;3 (Vint (Int.repr (Z.b2z ((<span class=\"mi\">2</span>^<span class=\"mi\">63</span>-<span class=\"mi\">1</span> &lt;? (Z.shiftr r0 <span class=\"mi\">64</span>) mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) &amp;&amp; (<span class=\"mi\">2</span>^<span class=\"mi\">63</span>-<span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>))%bool))));\n <span class=\"kp\">repeat</span> progressC;\n <span class=\"nb\">revert</span> H3;\n convert_C_to_math;\n <span class=\"kp\">try</span> <span class=\"kp\">solve</span> \n  [<span class=\"kp\">repeat</span> (<span class=\"kp\">first</span>[<span class=\"nb\">case</span> (Z.leb_spec _ _)|<span class=\"nb\">case</span> (Z.ltb_spec _ _)];<span class=\"kp\">try</span> <span class=\"bp\">lia</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>)].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))\n      || (<span class=\"mi\">9223372036854775807</span> &lt;?\n          (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;7 (Vlong (Int64.repr hi));\n   temp _t&#39;6 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3\n     (Vint\n        (Int.repr\n           (Z.b2z\n              ((<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;?\n                Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n               (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))));\n   temp _t&#39;9 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;8 = _stderr;\n       _fprintf\n         ([(_t&#39;8)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">134</span>))%expr; \n           (___stringlit_161)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk102\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk102\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk103\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk103\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb (true &amp;&amp; (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))\n      || (<span class=\"mi\">9223372036854775807</span> &lt;?\n          (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;7 (Vlong (Int64.repr hi));\n   temp _t&#39;6 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3\n     (Vint\n        (Int.repr\n           (Z.b2z\n              (true &amp;&amp; (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))));\n   temp _t&#39;9 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;8 = _stderr;\n       _fprintf\n         ([(_t&#39;8)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">134</span>))%expr; \n           (___stringlit_161)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk104\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk104\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk105\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk105\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hhi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb (true &amp;&amp; true)\n      || (<span class=\"mi\">9223372036854775807</span> &lt;?\n          (Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;7 (Vlong (Int64.repr hi));\n   temp _t&#39;6 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;9 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;8 = _stderr;\n       _fprintf\n         ([(_t&#39;8)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">134</span>))%expr; \n           (___stringlit_161)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk106\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk106\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk107\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk107\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || false)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;7 (Vlong (Int64.repr hi));\n   temp _t&#39;6 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;9 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;8 = _stderr;\n       _fprintf\n         ([(_t&#39;8)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">134</span>))%expr; \n           (___stringlit_161)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk108\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk108\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk109\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk109\"><span class=\"nb\">apply</span> Int64_high_is_neg <span class=\"kr\">in</span> Hr0; [|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || false)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;7 (Vlong (Int64.repr hi));\n   temp _t&#39;6 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;9 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;8 = _stderr;\n       _fprintf\n         ([(_t&#39;8)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">134</span>))%expr; \n           (___stringlit_161)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk10a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk10a\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk10b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk10b\"><span class=\"nb\">apply</span> Int64_high_is_neg <span class=\"kr\">in</span> Hhi;[|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || false)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;7 (Vlong (Int64.repr hi));\n   temp _t&#39;6 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;9 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;8 = _stderr;\n       _fprintf\n         ([(_t&#39;8)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">134</span>))%expr; \n           (___stringlit_161)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk10c\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk10c\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk10d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk10d\"><span class=\"nb\">apply</span> Int64_low_is_nonneg <span class=\"kr\">in</span> Hr0hi;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> + hi &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk10e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk10e\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk10f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk10f\"><span class=\"nb\">unfold</span> hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;=\nZ.shiftr r0 <span class=\"mi\">64</span>\n  + (Z.shiftr (a * b) <span class=\"mi\">64</span>\n       + Z.b2z\n           ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n            (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) &lt;= Int64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk110\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk110\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk111\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk111\"><span class=\"nb\">rewrite</span> Z.add_assoc, &lt;- shiftr_add_carry <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z\n      ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> + hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr (r0 + a * b) <span class=\"mi\">64</span> &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk112\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk112\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk113\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk113\">solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;17 (Vlong (Int64.repr (r0 + a * b)));\n   temp _t&#39;16\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr (r0 + a * b)),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;4 = (_r -&gt; _hi);\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 + a * b) r)\n        * stackframe_of f_secp256k1_i128_accum_mul)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk114\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk114\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a * b)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                + Z.b2z\n                    ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                     (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))))) r\n|-- secp256k1_uint128_at sh (r0 + a * b) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk115\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk115\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a * b)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           + (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                + Z.b2z\n                    ((r0 + a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                     (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a * b)),\n       Vlong (Int64.repr (Z.shiftr (r0 + a * b) <span class=\"mi\">64</span>)))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk116\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk116\"><span class=\"nb\">rewrite</span> Z.add_assoc, &lt;- shiftr_add_carry <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 + a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 + a * b)),\n   Vlong (Int64.repr (Z.shiftr (r0 + a * b) <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 + a * b)),\n       Vlong (Int64.repr (Z.shiftr (r0 + a * b) <span class=\"mi\">64</span>)))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk117\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk117\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_dissip_mul</span>: semax_body Vprog Gprog f_secp256k1_i128_dissip_mul secp256k1_i128_dissip_mul_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_dissip_mul\n  secp256k1_i128_dissip_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk118\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk118\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_dissip_mul\n  secp256k1_i128_dissip_mul_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk119\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk119\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 - a * b &lt;=\nInt128_max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tlong v_hi; temp _r r;\n   temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tlong v_hi;\n   secp256k1_uint128_at sh r0 r))\n  ((_t&#39;1 =\n      _secp256k1_mul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    _lo = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk11a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk11a\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 - a * b &lt;=\nInt128_max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tlong v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;1 =\n      _secp256k1_mul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    _lo = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk11b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk11b\">unfold_Int128.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at_ Tsh tlong v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;1 =\n      _secp256k1_mul128\n      ([(_a)%expr; (_b)%expr; (&amp;_hi)%expr]);\n    _lo = _t&#39;1;)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk11c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk11c\">forward_call.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)))\n          v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;17 = _hi;\n    _t&#39;18 = (_r -&gt; _lo);\n    _hi = (_t&#39;17 + (_t&#39;18 &lt; _lo));)\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk11d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk11d\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;15 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;15 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;16 = _hi;\n          _t&#39;2 =\n            (tbool) ((tulong) _t&#39;16\n                       &gt; \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;2 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;12 = (_r -&gt; _hi);\n      _t&#39;13 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;2\n              &lt;= (_t&#39;12 - (tulong) _t&#39;13\n                    &lt;= (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;14 = _stderr;\n            _fprintf\n              ([(_t&#39;14)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">146</span>))%expr; \n                (___stringlit_162)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk11e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk11e\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;15 = (_r -&gt; _hi);\n    <span class=\"kr\">if</span> (_t&#39;15 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n      (_t&#39;16 = _hi;\n       _t&#39;2 =\n         (tbool) ((tulong) _t&#39;16\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL);)\n    } <span class=\"kr\">else</span> {\n      _t&#39;2 = (<span class=\"mi\">0</span>);\n    })\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk11f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk11f\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk120\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk120\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;15\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;15 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;16 = _hi;\n      _t&#39;2 =\n        (tbool) ((tulong) _t&#39;16\n                   &gt; (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;2 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk121\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk121\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk122\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk122\"><span class=\"nb\">set</span> (hi := (_ + Z.b2z _)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;15\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;15 &lt;= (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;16 = _hi;\n      _t&#39;2 =\n        (tbool) ((tulong) _t&#39;16\n                   &gt; (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;2 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk123\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk123\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk124\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk124\">forward_if (temp _t&#39;2 (Vint (Int.repr (Z.b2z (((Z.shiftr r0 <span class=\"mi\">64</span>) mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> &lt;=? <span class=\"mi\">2</span>^<span class=\"mi\">63</span>-<span class=\"mi\">1</span>) &amp;&amp; (<span class=\"mi\">2</span>^<span class=\"mi\">63</span>-<span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>))%bool))));\n <span class=\"kp\">repeat</span> progressC;\n <span class=\"nb\">revert</span> H3;\n convert_C_to_math;\n <span class=\"kp\">try</span> <span class=\"kp\">solve</span> \n  [<span class=\"kp\">repeat</span> (<span class=\"kp\">first</span>[<span class=\"nb\">case</span> (Z.leb_spec _ _)|<span class=\"nb\">case</span> (Z.ltb_spec _ _)];<span class=\"kp\">try</span> <span class=\"bp\">lia</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>)].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span>) &amp;&amp;\n         (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))\n      || negb\n           (<span class=\"mi\">9223372036854775807</span> &lt;?\n            (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;13 (Vlong (Int64.repr hi));\n   temp _t&#39;12 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2\n     (Vint\n        (Int.repr\n           (Z.b2z\n              ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=?\n                <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span>) &amp;&amp;\n               (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))));\n   temp _t&#39;15 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;14 = _stderr;\n       _fprintf\n         ([(_t&#39;14)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">146</span>))%expr; \n           (___stringlit_162)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk125\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk125\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk126\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk126\"><span class=\"nb\">case</span> (Z.leb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb (true &amp;&amp; (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))\n      || negb\n           (<span class=\"mi\">9223372036854775807</span> &lt;?\n            (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;13 (Vlong (Int64.repr hi));\n   temp _t&#39;12 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2\n     (Vint\n        (Int.repr\n           (Z.b2z\n              (true &amp;&amp; (<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))));\n   temp _t&#39;15 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;14 = _stderr;\n       _fprintf\n         ([(_t&#39;14)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">146</span>))%expr; \n           (___stringlit_162)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk127\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk127\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk128\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk128\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hhi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb (true &amp;&amp; true)\n      || negb\n           (<span class=\"mi\">9223372036854775807</span> &lt;?\n            (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;13 (Vlong (Int64.repr hi));\n   temp _t&#39;12 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;15 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;14 = _stderr;\n       _fprintf\n         ([(_t&#39;14)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">146</span>))%expr; \n           (___stringlit_162)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk129\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk129\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk12a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk12a\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || negb true)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;13 (Vlong (Int64.repr hi));\n   temp _t&#39;12 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;15 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;14 = _stderr;\n       _fprintf\n         ([(_t&#39;14)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">146</span>))%expr; \n           (___stringlit_162)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk12b\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk12b\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk12c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk12c\"><span class=\"nb\">apply</span> Int64_low_is_nonneg <span class=\"kr\">in</span> Hr0; [|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || negb true)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;13 (Vlong (Int64.repr hi));\n   temp _t&#39;12 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;15 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;14 = _stderr;\n       _fprintf\n         ([(_t&#39;14)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">146</span>))%expr; \n           (___stringlit_162)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk12d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk12d\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk12e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk12e\"><span class=\"nb\">apply</span> Int64_high_is_neg <span class=\"kr\">in</span> Hhi;[|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || negb true)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;13 (Vlong (Int64.repr hi));\n   temp _t&#39;12 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;15 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;14 = _stderr;\n       _fprintf\n         ([(_t&#39;14)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">146</span>))%expr; \n           (___stringlit_162)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk12f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk12f\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk130\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk130\"><span class=\"nb\">apply</span> Int64_high_is_neg <span class=\"kr\">in</span> Hr0hi;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> - hi &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk131\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk131\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk132\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk132\"><span class=\"nb\">unfold</span> hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;=\nZ.shiftr r0 <span class=\"mi\">64</span>\n  - (Z.shiftr (a * b) <span class=\"mi\">64</span>\n       + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk133\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk133\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk134\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk134\"><span class=\"nb\">rewrite</span> Z.sub_add_distr, &lt;- shiftr_sub_borrow <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt;= Int64.max_signed</span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= hi &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">9223372036854775807</span>\n  &lt; (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr (r0 - a * b) <span class=\"mi\">64</span> &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk135\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk135\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk136\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk136\">solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     ((_t&#39;10 = (_r -&gt; _hi);\n       <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n         (_t&#39;11 = _hi;\n          _t&#39;3 =\n            (tbool) ((tulong) _t&#39;11\n                       &lt;= \n                       (<span class=\"mi\">9223372036854775807</span>)LL);)\n       } <span class=\"kr\">else</span> {\n         _t&#39;3 = (<span class=\"mi\">0</span>);\n       })\n      _t&#39;7 = (_r -&gt; _hi);\n      _t&#39;8 = _hi;\n      <span class=\"kr\">if</span> (!(_t&#39;3\n              &lt;= (_t&#39;7 - (tulong) _t&#39;8\n                    &gt; (<span class=\"mi\">9223372036854775807</span>)LL))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;9 = _stderr;\n            _fprintf\n              ([(_t&#39;9)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">151</span>))%expr; \n                (___stringlit_163)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk137\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk137\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;10 = (_r -&gt; _hi);\n    <span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n      (_t&#39;11 = _hi;\n       _t&#39;3 =\n         (tbool) ((tulong) _t&#39;11\n                    &lt;= (<span class=\"mi\">9223372036854775807</span>)LL);)\n    } <span class=\"kr\">else</span> {\n      _t&#39;3 = (<span class=\"mi\">0</span>);\n    })\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk138\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk138\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk139\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk139\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;10\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;11 = _hi;\n      _t&#39;3 =\n        (tbool) ((tulong) _t&#39;11\n                   &lt;= (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;3 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk13a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk13a\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk13b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk13b\"><span class=\"nb\">set</span> (hi := (_ + Z.b2z _)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;10\n            (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_t&#39;10 &gt; (<span class=\"mi\">9223372036854775807</span>)LL) {\n     (_t&#39;11 = _hi;\n      _t&#39;3 =\n        (tbool) ((tulong) _t&#39;11\n                   &lt;= (<span class=\"mi\">9223372036854775807</span>)LL);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;3 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk13c\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk13c\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk13d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk13d\">forward_if (temp _t&#39;3 (Vint (Int.repr (Z.b2z ((<span class=\"mi\">2</span>^<span class=\"mi\">63</span>-<span class=\"mi\">1</span> &lt;? (Z.shiftr r0 <span class=\"mi\">64</span>) mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>) &amp;&amp; (hi mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> &lt;=? <span class=\"mi\">2</span>^<span class=\"mi\">63</span>-<span class=\"mi\">1</span>))%bool))));\n <span class=\"kp\">repeat</span> progressC;\n <span class=\"nb\">revert</span> H3;\n convert_C_to_math;\n <span class=\"kp\">try</span> <span class=\"kp\">solve</span> \n  [<span class=\"kp\">repeat</span> (<span class=\"kp\">first</span>[<span class=\"nb\">case</span> (Z.leb_spec _ _)|<span class=\"nb\">case</span> (Z.ltb_spec _ _)];<span class=\"kp\">try</span> <span class=\"bp\">lia</span>;<span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>)].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb\n        ((<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;? Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span>))\n      || (<span class=\"mi\">9223372036854775807</span> &lt;?\n          (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;8 (Vlong (Int64.repr hi));\n   temp _t&#39;7 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3\n     (Vint\n        (Int.repr\n           (Z.b2z\n              ((<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt;?\n                Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n               (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span>)))));\n   temp _t&#39;10 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;9 = _stderr;\n       _fprintf\n         ([(_t&#39;9)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">151</span>))%expr; \n           (___stringlit_163)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk13e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk13e\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk13f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk13f\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb (true &amp;&amp; (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span>))\n      || (<span class=\"mi\">9223372036854775807</span> &lt;?\n          (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;8 (Vlong (Int64.repr hi));\n   temp _t&#39;7 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3\n     (Vint\n        (Int.repr\n           (Z.b2z\n              (true &amp;&amp; (hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;=? <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span>)))));\n   temp _t&#39;10 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;9 = _stderr;\n       _fprintf\n         ([(_t&#39;9)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">151</span>))%expr; \n           (___stringlit_163)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk140\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk140\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk141\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk141\"><span class=\"nb\">case</span> (Z.leb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hhi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (negb (true &amp;&amp; true)\n      || (<span class=\"mi\">9223372036854775807</span> &lt;?\n          (Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;8 (Vlong (Int64.repr hi));\n   temp _t&#39;7 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;10 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;9 = _stderr;\n       _fprintf\n         ([(_t&#39;9)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">151</span>))%expr; \n           (___stringlit_163)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk142\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk142\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk143\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk143\"><span class=\"nb\">case</span> (Z.ltb_spec _ _);<span class=\"kp\">try</span> <span class=\"bp\">discriminate</span>; <span class=\"nb\">intros</span> Hr0hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span> &lt; Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || false)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;8 (Vlong (Int64.repr hi));\n   temp _t&#39;7 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;10 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;9 = _stderr;\n       _fprintf\n         ([(_t&#39;9)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">151</span>))%expr; \n           (___stringlit_163)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk144\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk144\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk145\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk145\"><span class=\"nb\">apply</span> Int64_high_is_neg <span class=\"kr\">in</span> Hr0; [|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span>hi mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || false)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;8 (Vlong (Int64.repr hi));\n   temp _t&#39;7 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;10 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;9 = _stderr;\n       _fprintf\n         ([(_t&#39;9)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">151</span>))%expr; \n           (___stringlit_163)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk146\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk146\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk147\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk147\"><span class=\"nb\">apply</span> Int64_low_is_nonneg <span class=\"kr\">in</span> Hhi;[|solve_bounds].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (negb (true &amp;&amp; true) || false)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;8 (Vlong (Int64.repr hi));\n   temp _t&#39;7 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;3 (Vint (Int.repr (Z.b2z (true &amp;&amp; true))));\n   temp _t&#39;10 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong (Vlong (Int64.repr hi)) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;9 = _stderr;\n       _fprintf\n         ([(_t&#39;9)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">151</span>))%expr; \n           (___stringlit_163)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk148\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk148\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk149\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk149\"><span class=\"nb\">apply</span> Int64_low_is_nonneg <span class=\"kr\">in</span> Hr0hi;[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> - hi &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk14a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk14a\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk14b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk14b\"><span class=\"nb\">unfold</span> hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;=\nZ.shiftr r0 <span class=\"mi\">64</span>\n  - (Z.shiftr (a * b) <span class=\"mi\">64</span>\n       + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk14c\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk14c\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk14d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk14d\"><span class=\"nb\">rewrite</span> Z.sub_add_distr, &lt;- shiftr_sub_borrow <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>hi</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.shiftr (a * b) <span class=\"mi\">64</span>\n  + Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;? (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</span></span><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= Z.shiftr r0 <span class=\"mi\">64</span> &lt; <span class=\"mi\">0</span></span></span></span><br><span><var>Hhi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= hi &lt;= Int64.max_signed</span></span></span><br><span><var>Hr0hi</var><span class=\"hyp-type\"><b>: </b><span>(Z.shiftr r0 <span class=\"mi\">64</span> - hi) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n  &lt;= <span class=\"mi\">9223372036854775807</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.min_signed &lt;= Z.shiftr (r0 - a * b) <span class=\"mi\">64</span> &lt;=\nInt64.max_signed</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk14e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk14e\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk14f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk14f\">solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;18 (Vlong (Int64.repr r0));\n   temp _t&#39;17\n     (Vlong (Int64.repr (Z.shiftr (a * b) <span class=\"mi\">64</span>)));\n   temp _lo (Vlong (Int64.repr (a * b)));\n   lvar _hi tlong v_hi; \n   temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b)))\n   SEP (data_at Tsh tlong\n          (Vlong\n             (Int64.repr\n                (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                   + Z.b2z\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                       (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) v_hi;\n   data_at sh t_secp256k1_uint128\n     (Vlong (Int64.repr r0),\n      Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  ((_t&#39;5 = (_r -&gt; _hi);\n    _t&#39;6 = _hi;\n    (_r -&gt; _hi) = (_t&#39;5 - (tulong) _t&#39;6);)\n   MORE_COMMANDS)\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (r0 - a * b) r)\n        * stackframe_of f_secp256k1_i128_dissip_mul)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk150\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk150\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 - a * b)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           - (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                + Z.b2z\n                    (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                     (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))))) r\n|-- secp256k1_uint128_at sh (r0 - a * b) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk151\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk151\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 - a * b)),\n   Vlong\n     (Int64.repr\n        (Z.shiftr r0 <span class=\"mi\">64</span>\n           - (Z.shiftr (a * b) <span class=\"mi\">64</span>\n                + Z.b2z\n                    (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> &lt;?\n                     (a * b) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 - a * b)),\n       Vlong (Int64.repr (Z.shiftr (r0 - a * b) <span class=\"mi\">64</span>)))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk152\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk152\"><span class=\"nb\">rewrite</span> Z.sub_add_distr, &lt;- shiftr_sub_borrow <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, a, b</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>v_hi</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 - a * b &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (r0 - a * b)),\n   Vlong (Int64.repr (Z.shiftr (r0 - a * b) <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (r0 - a * b)),\n       Vlong (Int64.repr (Z.shiftr (r0 - a * b) <span class=\"mi\">64</span>)))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk153\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk153\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_det</span>: semax_body Vprog Gprog f_secp256k1_i128_det secp256k1_i128_det_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_det\n  secp256k1_i128_det_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk154\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk154\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_det\n  secp256k1_i128_det_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk155\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk155\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b, c, d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= c &lt;= Int64.max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= d &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b));\n   temp _c (Vlong (Int64.repr c));\n   temp _d (Vlong (Int64.repr d)))\n   SEP (data_at_ sh t_secp256k1_uint128 r))\n  (_secp256k1_i128_mul\n     ([(_r)%expr; (_a)%expr; (_d)%expr]);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk156\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk156\">forward_call.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b, c, d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= c &lt;= Int64.max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= d &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a));\n   temp _b (Vlong (Int64.repr b));\n   temp _c (Vlong (Int64.repr c));\n   temp _d (Vlong (Int64.repr d)))\n   SEP (secp256k1_uint128_at sh (a * d) r))\n  (_secp256k1_i128_dissip_mul\n     ([(_r)%expr; (_b)%expr; (_c)%expr]);)\n  POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk157\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk157\">forward_call;[|entailer!].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b, c, d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= c &lt;= Int64.max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= d &lt;= Int64.max_signed</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int128_min_signed &lt;= a * d &lt;= Int128_max_signed /\\\nInt128_min_signed &lt;= a * d - b * c &lt;=\nInt128_max_signed</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk158\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk158\"><span class=\"nb\">unfold</span> Int128_min_signed, Int128_max_signed.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b, c, d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= c &lt;= Int64.max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= d &lt;= Int64.max_signed</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= a * d &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span> /\\\n-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= a * d - b * c &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk159\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk159\"><span class=\"nb\">assert</span> (Htight := mul128_tight _ _ H H2).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b, c, d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= c &lt;= Int64.max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= d &lt;= Int64.max_signed</span></span></span><br><span><var>Htight</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">126</span> + <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a * d &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">126</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= a * d &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span> /\\\n-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= a * d - b * c &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk15a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk15a\"><span class=\"nb\">assert</span> (Htight&#39; := mul128_tight _ _ H0 H1).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a, b, c, d</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= b &lt;= Int64.max_signed</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= c &lt;= Int64.max_signed</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= d &lt;= Int64.max_signed</span></span></span><br><span><var>Htight</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">126</span> + <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a * d &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">126</span></span></span></span><br><span><var>Htight'</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">126</span> + <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= b * c &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">126</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= a * d &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span> /\\\n-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= a * d - b * c &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk15b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk15b\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_rshift</span>: semax_body Vprog Gprog f_secp256k1_i128_rshift secp256k1_i128_rshift_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_rshift\n  secp256k1_i128_rshift_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk15c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk15c\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_rshift\n  secp256k1_i128_rshift_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk15d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk15d\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     <span class=\"kr\">if</span> (!(_n &lt; (<span class=\"mi\">128</span>))) {\n       <span class=\"kr\">for</span> (;\n       ;\n       break;) {\n         ((_t&#39;6 = _stderr;\n           _fprintf\n             ([(_t&#39;6)%expr; (___stringlit_6)%expr;\n               (___stringlit_159)%expr; ((<span class=\"mi\">165</span>))%expr;\n               (___stringlit_158)%expr]);)\n          _abort([]);)\n       }\n     }\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk15e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk15e\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>Int.repr\n  (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">128</span>))) = Int.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk15f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk15f\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;5 = (_r -&gt; _hi);\n       (_r -&gt; _lo) =\n         (tulong) ((tlong) _t&#39;5 &gt;&gt; (_n - (<span class=\"mi\">64</span>)));)\n      _t&#39;4 = (_r -&gt; _hi);\n      (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;4 &gt;&gt; (<span class=\"mi\">63</span>));)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;1 &gt;&gt; _n);)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_i128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk160\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk160\"><span class=\"nb\">revert</span> H1.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">128</span>))) = Int.zero -&gt;\n<span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk161\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk161\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;5 = (_r -&gt; _hi);\n       (_r -&gt; _lo) =\n         (tulong) ((tlong) _t&#39;5 &gt;&gt; (_n - (<span class=\"mi\">64</span>)));)\n      _t&#39;4 = (_r -&gt; _hi);\n      (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;4 &gt;&gt; (<span class=\"mi\">63</span>));)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;1 &gt;&gt; _n);)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_i128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk162\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk162\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">128</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk163\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk163\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;5 = (_r -&gt; _hi);\n       (_r -&gt; _lo) =\n         (tulong) ((tlong) _t&#39;5 &gt;&gt; (_n - (<span class=\"mi\">64</span>)));)\n      _t&#39;4 = (_r -&gt; _hi);\n      (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;4 &gt;&gt; (<span class=\"mi\">63</span>));)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;1 &gt;&gt; _n);)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_i128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk164\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk164\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">128</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk165\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk165\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;5 = (_r -&gt; _hi);\n       (_r -&gt; _lo) =\n         (tulong) ((tlong) _t&#39;5 &gt;&gt; (_n - (<span class=\"mi\">64</span>)));)\n      _t&#39;4 = (_r -&gt; _hi);\n      (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;4 &gt;&gt; (<span class=\"mi\">63</span>));)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;1 &gt;&gt; _n);)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_i128_rshift)%logic)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk166\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk166\"><span class=\"nb\">case</span> Z.ltb_spec;[<span class=\"bp\">discriminate</span>|<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;5 = (_r -&gt; _hi);\n       (_r -&gt; _lo) =\n         (tulong) ((tlong) _t&#39;5 &gt;&gt; (_n - (<span class=\"mi\">64</span>)));)\n      _t&#39;4 = (_r -&gt; _hi);\n      (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;4 &gt;&gt; (<span class=\"mi\">63</span>));)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;1 &gt;&gt; _n);)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (secp256k1_uint128_at sh\n                       (Z.shiftr r0 n) r)\n        * stackframe_of f_secp256k1_i128_rshift)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk167\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk167\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;5 = (_r -&gt; _hi);\n       (_r -&gt; _lo) =\n         (tulong) ((tlong) _t&#39;5 &gt;&gt; (_n - (<span class=\"mi\">64</span>)));)\n      _t&#39;4 = (_r -&gt; _hi);\n      (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;4 &gt;&gt; (<span class=\"mi\">63</span>));)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;1 &gt;&gt; _n);)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (data_at sh t_secp256k1_uint128\n                       (Vlong\n                       (Int64.repr (Z.shiftr r0 n)),\n                       Vlong\n                       (Int64.repr\n                       (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>)))\n                       r)\n        * stackframe_of f_secp256k1_i128_rshift)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk168\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk168\">unfold_Int128.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     ((_t&#39;5 = (_r -&gt; _hi);\n       (_r -&gt; _lo) =\n         (tulong) ((tlong) _t&#39;5 &gt;&gt; (_n - (<span class=\"mi\">64</span>)));)\n      _t&#39;4 = (_r -&gt; _hi);\n      (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;4 &gt;&gt; (<span class=\"mi\">63</span>));)\n   } <span class=\"kr\">else</span> {\n     <span class=\"kr\">if</span> (_n &gt; (<span class=\"mi\">0</span>)) {\n       ((_t&#39;2 = (_r -&gt; _hi);\n         _t&#39;3 = (_r -&gt; _lo);\n         (_r -&gt; _lo) =\n           ((<span class=\"mi\">1</span>) * _t&#39;2) &lt;&lt; ((<span class=\"mi\">64</span>) - _n) | _t&#39;3 &gt;&gt; _n;)\n        _t&#39;1 = (_r -&gt; _hi);\n        (_r -&gt; _hi) = (tulong) ((tlong) _t&#39;1 &gt;&gt; _n);)\n     }\n   })\n  (normal_ret_assert\n     (PROP ( )\n      RETURN ( ) SEP (data_at sh t_secp256k1_uint128\n                       (Vlong\n                       (Int64.repr (Z.shiftr r0 n)),\n                       Vlong\n                       (Int64.repr\n                       (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>)))\n                       r)\n        * stackframe_of f_secp256k1_i128_rshift)%logic)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk169\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk169\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) (n - <span class=\"mi\">64</span>))),\n   Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"mi\">63</span>)))\n  r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk16a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk16a\"><hr></label><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) n))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk16b\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk16b\"><hr></label><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk16c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk16c\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) (n - <span class=\"mi\">64</span>))),\n   Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"mi\">63</span>)))\n  r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk16d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk16d\"><span class=\"nb\">rewrite</span> !Z.shiftr_shiftr <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">64</span> + (n - <span class=\"mi\">64</span>)))),\n   Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">64</span> + <span class=\"mi\">63</span>)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk16e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk16e\"><span class=\"nb\">replace</span> (<span class=\"mi\">64</span> + (n - <span class=\"mi\">64</span>)) <span class=\"kr\">with</span> n <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (Z.shiftr r0 n)),\n   Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">64</span> + <span class=\"mi\">63</span>)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk16f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk16f\"><span class=\"nb\">change</span> (<span class=\"mi\">64</span> + <span class=\"mi\">63</span>) <span class=\"kr\">with</span> <span class=\"mi\">127</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (Z.shiftr r0 n)),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">127</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk170\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk170\"><span class=\"nb\">replace</span> (n + <span class=\"mi\">64</span>) <span class=\"kr\">with</span> (<span class=\"mi\">127</span> + (n - <span class=\"mi\">63</span>)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (Z.shiftr r0 n)),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">127</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr r0 (<span class=\"mi\">127</span> + (n - <span class=\"mi\">63</span>)))))\n      r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk171\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk171\"><span class=\"nb\">rewrite</span> shiftr_small_signed <span class=\"bp\">by</span> solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr (Z.shiftr r0 n)),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">127</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">127</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk172\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk172\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">64</span>) n))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk173\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk173\"><span class=\"nb\">rewrite</span> !Z.shiftr_shiftr <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">64</span> + n)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk174\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk174\"><span class=\"nb\">rewrite</span> Z.add_comm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong\n     (Int64.repr\n        (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n           (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))),\n   Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong (Int64.repr (Z.shiftr r0 (n + <span class=\"mi\">64</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk175\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk175\"><span class=\"nb\">replace</span> (Int64.repr (Z.lor _ _)) <span class=\"kr\">with</span> (Int64.repr (Z.shiftr r0 n));[entailer!|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 n) = \nInt64.repr\n  (Z.lor (Z.shiftr r0 <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk176\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk176\"><span class=\"nb\">rewrite</span> &lt;- Z.shiftl_mul_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 n) = \nInt64.repr\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk177\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk177\"><span class=\"nb\">apply</span> Int64.eqm_samerepr.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eqm (Z.shiftr r0 n)\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk178\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk178\"><span class=\"nb\">apply</span> Int64.eqm_same_bits.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; Int64.zwordsize -&gt;\nZ.testbit (Z.shiftr r0 n) i = \nZ.testbit\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n)) i</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk179\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk179\"><span class=\"nb\">change</span> Int64.zwordsize <span class=\"kr\">with</span> <span class=\"mi\">64</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">i</span> : Z,\n<span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span> -&gt;\nZ.testbit (Z.shiftr r0 n) i = \nZ.testbit\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n)) i</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk17a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk17a\"><span class=\"nb\">intros</span> i Hi.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit (Z.shiftr r0 n) i = \nZ.testbit\n  (Z.lor (Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) (<span class=\"mi\">64</span> - n))\n     (Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) n)) i</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk17b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk17b\"><span class=\"nb\">rewrite</span> Z.lor_spec, !Z.shiftr_spec, Z.shiftl_spec <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk17c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk17c\"><span class=\"nb\">destruct</span> (Z.neg_nonneg_cases (i - (<span class=\"mi\">64</span> - n))) <span class=\"kr\">as</span> [Hneg|Hpos].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>i - (<span class=\"mi\">64</span> - n) &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk17d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk17d\"><hr></label><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk17e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk17e\"><span class=\"nb\">rewrite</span> (Z.testbit_neg_r _ _ Hneg).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>i - (<span class=\"mi\">64</span> - n) &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (false\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk17f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk17f\"><hr></label><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk180\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk180\"><span class=\"nb\">rewrite</span> Z.mod_pow2_bits_low <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>i - (<span class=\"mi\">64</span> - n) &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (false || Z.testbit r0 (i + n))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk181\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk181\"><hr></label><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk182\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk182\"><span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit \n                       (Z.shiftr r0 <span class=\"mi\">64</span>) \n                       (i - (<span class=\"mi\">64</span> - n))\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk183\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk183\"><span class=\"nb\">rewrite</span> Z.shiftr_spec <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = (Z.testbit r0\n                       (i - (<span class=\"mi\">64</span> - n) + <span class=\"mi\">64</span>)\n                       || \n                       Z.testbit \n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) \n                       (i + n))%bool</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk184\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk184\"><span class=\"nb\">rewrite</span> Z.mod_pow2_bits_high, orb_false_r <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = Z.testbit r0\n                       (i - (<span class=\"mi\">64</span> - n) + <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk185\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk185\"><span class=\"nb\">replace</span> (i - (<span class=\"mi\">64</span> - n) + <span class=\"mi\">64</span>) <span class=\"kr\">with</span> (i + n) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt; n</span></span></span><br><span><var>i</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Hi</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= i - (<span class=\"mi\">64</span> - n)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.testbit r0 (i + n) = Z.testbit r0 (i + n)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk186\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk186\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 n)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 n) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk187\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk187\"><span class=\"nb\">replace</span> n <span class=\"kr\">with</span> <span class=\"mi\">0</span> <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">0</span>)),\n       Vlong\n         (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">0</span>) <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk188\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk188\"><span class=\"nb\">rewrite</span> Z.shiftr_0_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">128</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &gt;= n</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr r0),\n       Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk189\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk189\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_to_u64</span>: semax_body Vprog Gprog f_secp256k1_i128_to_u64 secp256k1_i128_to_u64_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_to_u64\n  secp256k1_i128_to_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk18a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk18a\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_to_u64\n  secp256k1_i128_to_u64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk18b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk18b\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = (_a -&gt; _lo);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk18c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk18c\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;1 = (_a -&gt; _lo);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk18d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk18d\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_to_i64</span>: semax_body Vprog Gprog f_secp256k1_i128_to_i64 secp256k1_i128_to_i64_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_to_i64\n  secp256k1_i128_to_i64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk18e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk18e\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_to_i64\n  secp256k1_i128_to_i64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk18f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk18f\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     (_t&#39;2 = (_a -&gt; _hi);\n      _t&#39;3 = (_a -&gt; _lo);\n      <span class=\"kr\">if</span> (!_t&#39;2 == (-_t&#39;3 &gt;&gt; (<span class=\"mi\">63</span>))) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;4 = _stderr;\n            _fprintf\n              ([(_t&#39;4)%expr; (___stringlit_6)%expr;\n                (___stringlit_159)%expr; ((<span class=\"mi\">181</span>))%expr;\n                (___stringlit_164)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk190\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk190\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;2 = (_a -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk191\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk191\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk192\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk192\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>Int.repr\n  (Z.b2z\n     (Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n        (Int64.neg\n           (Int64.shru (Int64.repr r0)\n              (Int64.repr\n                 (Int.unsigned (Int.repr <span class=\"mi\">63</span>))))))) = Int.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk193\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk193\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk194\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk194\"><span class=\"nb\">revert</span> H0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n        (Int64.neg\n           (Int64.shru (Int64.repr r0)\n              (Int64.repr (Int.unsigned (Int.repr <span class=\"mi\">63</span>))))))) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk195\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk195\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk196\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk196\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk197\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk197\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk198\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk198\"><span class=\"nb\">change</span> (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"kr\">with</span> (Z.shiftr r0 (<span class=\"mi\">63</span> + <span class=\"mi\">1</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr r0 (<span class=\"mi\">63</span> + <span class=\"mi\">1</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">63</span> + <span class=\"mi\">1</span>))));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 (<span class=\"mi\">63</span> + <span class=\"mi\">1</span>))))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk199\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk199\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk19a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk19a\"><span class=\"nb\">rewrite</span> &lt;- Z.shiftr_shiftr <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk19b\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk19b\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk19c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk19c\"><span class=\"nb\">destruct</span> (Z.neg_nonneg_cases r0) <span class=\"kr\">as</span> [Hneg|Hpos].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk19d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk19d\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk19e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk19e\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk19f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk19f\"><span class=\"nb\">rewrite</span> &lt;- (Z_mod_plus_full r0 <span class=\"mi\">1</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)), Z.mul_1_l.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr ((r0 + <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span>\n      mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1a0\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1a0\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1a1\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1a1\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1a2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1a2\">clear_mod.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 + <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1a3\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1a3\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1a4\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1a4\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1a5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1a5\"><span class=\"nb\">rewrite</span> !Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     ((r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -((r0 + <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1a6\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1a6\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1a7\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1a7\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1a8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1a8\"><span class=\"nb\">change</span> (r0 + <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"kr\">with</span> (r0 + <span class=\"mi\">2</span> * <span class=\"mi\">2</span>^<span class=\"mi\">63</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     ((r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -((r0 + <span class=\"mi\">2</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1a9\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1a9\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1aa\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1aa\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ab\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ab\"><span class=\"nb\">rewrite</span> Z_div_plus_full <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     ((r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -(r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> + <span class=\"mi\">2</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1ac\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1ac\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1ad\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1ad\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ae\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ae\"><span class=\"nb\">replace</span> (r0 / <span class=\"mi\">2</span>^<span class=\"mi\">63</span>) <span class=\"kr\">with</span> (-<span class=\"mi\">1</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     ((-<span class=\"mi\">1</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? -(-<span class=\"mi\">1</span> + <span class=\"mi\">2</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2 (Vlong (Int64.repr (-<span class=\"mi\">1</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (-<span class=\"mi\">1</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1af\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1af\"><hr></label><div class=\"goal-conclusion\">-<span class=\"mi\">1</span> = r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span></div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1b0\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1b0\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1b1\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1b1\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1b2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1b2\"><span class=\"nb\">rewrite</span> Z.eqb_refl; <span class=\"bp\">discriminate</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hneg</var><span class=\"hyp-type\"><b>: </b><span>r0 &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">1</span> = r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1b3\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1b3\"><hr></label><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1b4\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1b4\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1b5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1b5\"><span class=\"nb\">cut</span> (-<span class=\"mi\">1</span> &lt;= r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt; <span class=\"mi\">0</span>);[|<span class=\"nb\">apply</span> div_bounds];<span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n      -Z.shiftr (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">63</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1b6\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1b6\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1b7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1b7\">clear_mod.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr\n  (Z.b2z\n     (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span> =? -Z.shiftr r0 <span class=\"mi\">63</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2\n     (Vlong (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong\n             (Int64.repr (Z.shiftr (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"mi\">1</span>)))\n          r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1b8\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1b8\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1b9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1b9\"><span class=\"nb\">replace</span> (Z.shiftr r0 <span class=\"mi\">63</span>) <span class=\"kr\">with</span> <span class=\"mi\">0</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (Z.shiftr <span class=\"mi\">0</span> <span class=\"mi\">1</span> =? -<span class=\"mi\">0</span>)) = Int.zero -&gt;\nsemax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3 (Vlong (Int64.repr r0));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr <span class=\"mi\">0</span> <span class=\"mi\">1</span>)));\n   temp _a r)\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr <span class=\"mi\">0</span> <span class=\"mi\">1</span>))) r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   (break;)%C) {\n     ((_t&#39;4 = _stderr;\n       _fprintf\n         ([(_t&#39;4)%expr; \n           (___stringlit_6)%expr;\n           (___stringlit_159)%expr; \n           ((<span class=\"mi\">181</span>))%expr; \n           (___stringlit_164)%expr]);)\n      _abort([]);)\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1ba\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1ba\"><hr></label><div class=\"goal-conclusion\"><span class=\"mi\">0</span> = Z.shiftr r0 <span class=\"mi\">63</span></div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1bb\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1bb\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1bc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1bc\"><span class=\"nb\">rewrite</span> Z.eqb_refl; <span class=\"bp\">discriminate</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> = Z.shiftr r0 <span class=\"mi\">63</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1bd\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1bd\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1be\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1be\"><span class=\"nb\">rewrite</span> !Z.shiftr_div_pow2, Z.div_small <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hpos</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= r0</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> = <span class=\"mi\">0</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1bf\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1bf\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c0\"><span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r)\n   SEP (secp256k1_uint128_at sh r0 r))\n  (_t&#39;1 = _secp256k1_i128_to_u64(_a);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c1\">forward_call.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= r0 &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;1 (Vlong (Int64.repr r0));\n   temp _a r)  SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">return</span> (tlong) _t&#39;1;) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c2\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_from_i64</span>: semax_body Vprog Gprog f_secp256k1_i128_from_i64 secp256k1_i128_from_i64_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_from_i64\n  secp256k1_i128_from_i64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c3\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_from_i64\n  secp256k1_i128_from_i64_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c4\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.min_signed &lt;= a &lt;= Int64.max_signed</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _a (Vlong (Int64.repr a)))\n   SEP (data_at_ sh t_secp256k1_uint128 r))\n  ((_r -&gt; _hi) = (tulong) (_a &gt;&gt; (<span class=\"mi\">63</span>));\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c5\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (Z.shiftr a <span class=\"mi\">63</span>))) r\n|-- secp256k1_uint128_at sh a r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c6\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (Z.shiftr a <span class=\"mi\">63</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (Z.shiftr a <span class=\"mi\">64</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c7\"><span class=\"nb\">change</span> <span class=\"mi\">64</span> <span class=\"kr\">with</span> (<span class=\"mi\">63</span> + <span class=\"mi\">1</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (Z.shiftr a <span class=\"mi\">63</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (Z.shiftr a (<span class=\"mi\">63</span> + <span class=\"mi\">1</span>)))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c8\"><span class=\"nb\">rewrite</span> &lt;- Z.shiftr_shiftr, !Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1c9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1c9\"><span class=\"nb\">destruct</span> (Z.neg_nonneg_cases a).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1ca\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1ca\"><hr></label><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1cb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1cb\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1cc\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1cc\"><span class=\"nb\">replace</span> (a/<span class=\"mi\">2</span>^<span class=\"mi\">63</span>) <span class=\"kr\">with</span> (-<span class=\"mi\">1</span>);[entailer!|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">1</span> = a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1cd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1cd\"><span class=\"nb\">cut</span> (<span class=\"mi\">0</span> = a / <span class=\"mi\">2</span>^<span class=\"mi\">63</span> + <span class=\"mi\">1</span>);[<span class=\"bp\">lia</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> = a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> + <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ce\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ce\"><span class=\"nb\">rewrite</span> &lt;- Z_div_plus, Z.mul_1_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>a &lt; <span class=\"mi\">0</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> = (a + <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>) / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> Zdiv_small;[<span class=\"bp\">reflexivity</span>|rep_lia].</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1cf\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1cf\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>a</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>writable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= a &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= a</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh t_secp256k1_uint128\n  (Vlong (Int64.repr a),\n   Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span>))) r\n|-- data_at sh t_secp256k1_uint128\n      (Vlong (Int64.repr a),\n       Vlong (Int64.repr (a / <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> / <span class=\"mi\">2</span> ^ <span class=\"mi\">1</span>))) r</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">rewrite</span> (Zdiv_small a);[entailer!|rep_lia].</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d0\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_eq_var</span>: semax_body Vprog Gprog f_secp256k1_i128_eq_var secp256k1_i128_eq_var_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_eq_var\n  secp256k1_i128_eq_var_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d1\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_eq_var\n  secp256k1_i128_eq_var_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d2\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _a r; temp _b s)\n   SEP (secp256k1_uint128_at shr r0 r;\n   secp256k1_uint128_at shs s0 s))\n  ((_t&#39;2 = (_a -&gt; _hi);\n    _t&#39;3 = (_b -&gt; _hi);\n    <span class=\"kr\">if</span> (_t&#39;2 == _t&#39;3) {\n      (_t&#39;4 = (_a -&gt; _lo);\n       _t&#39;5 = (_b -&gt; _lo);\n       _t&#39;1 = (tbool) (_t&#39;4 == _t&#39;5);)\n    } <span class=\"kr\">else</span> {\n      _t&#39;1 = (<span class=\"mi\">0</span>);\n    })\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d3\"><span class=\"kp\">do</span> <span class=\"mi\">2</span> forward.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (<span class=\"kr\">if</span> (_t&#39;2 == _t&#39;3) {\n     (_t&#39;4 = (_a -&gt; _lo);\n      _t&#39;5 = (_b -&gt; _lo);\n      _t&#39;1 = (tbool) (_t&#39;4 == _t&#39;5);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;1 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d4\"><span class=\"nb\">assert</span> (Hrs: r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =\n             (((Z.shiftr r0 <span class=\"mi\">64</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (Z.shiftr s0 <span class=\"mi\">64</span>) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n                (r0 mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>))%bool).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1d5\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1d5\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (<span class=\"kr\">if</span> (_t&#39;2 == _t&#39;3) {\n     (_t&#39;4 = (_a -&gt; _lo);\n      _t&#39;5 = (_b -&gt; _lo);\n      _t&#39;1 = (tbool) (_t&#39;4 == _t&#39;5);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;1 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d6\"><span class=\"nb\">change</span> (<span class=\"mi\">2</span>^<span class=\"mi\">128</span>) <span class=\"kr\">with</span> (<span class=\"mi\">2</span>^<span class=\"mi\">64</span> * <span class=\"mi\">2</span>^<span class=\"mi\">64</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) =? s0 mod (<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1d7\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1d7\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (<span class=\"kr\">if</span> (_t&#39;2 == _t&#39;3) {\n     (_t&#39;4 = (_a -&gt; _lo);\n      _t&#39;5 = (_b -&gt; _lo);\n      _t&#39;1 = (tbool) (_t&#39;4 == _t&#39;5);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;1 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1d8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1d8\"><span class=\"nb\">rewrite</span> !Zmod_recombine, &lt;-! Z.shiftl_mul_pow2, &lt;-! Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">64</span>\n   + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftl (Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) <span class=\"mi\">64</span>\n   + s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1d9\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1d9\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (<span class=\"kr\">if</span> (_t&#39;2 == _t&#39;3) {\n     (_t&#39;4 = (_a -&gt; _lo);\n      _t&#39;5 = (_b -&gt; _lo);\n      _t&#39;1 = (tbool) (_t&#39;4 == _t&#39;5);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;1 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1da\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1da\"><span class=\"nb\">apply</span> shiftl_mod_eqb_unique; <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (<span class=\"kr\">if</span> (_t&#39;2 == _t&#39;3) {\n     (_t&#39;4 = (_a -&gt; _lo);\n      _t&#39;5 = (_b -&gt; _lo);\n      _t&#39;1 = (tbool) (_t&#39;4 == _t&#39;5);)\n   } <span class=\"kr\">else</span> {\n     _t&#39;1 = (<span class=\"mi\">0</span>);\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1db\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1db\">forward_if\n  (temp _t&#39;1 (Vint (Int.repr (Z.b2z (r0 mod <span class=\"mi\">2</span>^<span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span>^<span class=\"mi\">128</span>))))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = true</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (_t&#39;4 = (_a -&gt; _lo);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1dc\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1dc\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (_t&#39;1 = (<span class=\"mi\">0</span>);) POSTCONDITION</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1dd\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1dd\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;1\n            (Vint\n               (Int.repr\n                  (Z.b2z\n                     (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>))));\n   temp _t&#39;3 (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (<span class=\"kr\">return</span> _t&#39;1;) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1de\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1de\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = true</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (_t&#39;4 = (_a -&gt; _lo);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1df\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1df\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr (Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>))) = \nbool2val (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e0\"><span class=\"nb\">rewrite</span> Hrs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n          Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nbool2val (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e1\"><span class=\"nb\">revert</span> H.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = true -&gt;\nVint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n          Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nbool2val (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e2\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = true -&gt;\nVint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n          Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nbool2val (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e3\"><span class=\"nb\">intros</span> -&gt;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z (true &amp;&amp; (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nbool2val (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e4\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;3\n            (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (_t&#39;1 = (<span class=\"mi\">0</span>);) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e5\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr (Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e6\"><span class=\"nb\">apply</span> Int64.eq_false <span class=\"kr\">in</span> H.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = false</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr (Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e7\"><span class=\"nb\">rewrite</span> Hrs.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = false</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n          Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e8\"><span class=\"nb\">revert</span> H.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)) = false -&gt;\nVint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n          Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1e9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1e9\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = false -&gt;\nVint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n          Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ea\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ea\"><span class=\"nb\">intros</span> -&gt;.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        (false &amp;&amp; (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">reflexivity</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1eb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1eb\">+</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>s</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shs</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>s0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>SH0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shs</span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>Hrs</var><span class=\"hyp-type\"><b>: </b><span>(r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n  Z.shiftr s0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;1\n            (Vint\n               (Int.repr\n                  (Z.b2z\n                     (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =? s0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>))));\n   temp _t&#39;3 (Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>)));\n   temp _t&#39;2 (Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)));\n   temp _a r; temp _b s)\n   SEP (data_at shr t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r;\n   data_at shs t_secp256k1_uint128\n     (Vlong (Int64.repr s0),\n      Vlong (Int64.repr (Z.shiftr s0 <span class=\"mi\">64</span>))) s))\n  (<span class=\"kr\">return</span> _t&#39;1;) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kp\">repeat</span> progressC.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n<span class=\"c\">(* Use with</span>\n<span class=\"c\">   forward_call secp256k1_i128_eq_var_spec_alias_sub (r, shr, r0)</span>\n<span class=\"c\">*)</span>\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ec\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ec\"><span class=\"kn\">Lemma</span> <span class=\"nf\">secp256k1_i128_eq_var_spec_alias_sub</span> :\n  funspec_sub (snd secp256k1_i128_eq_var_spec) (snd secp256k1_i128_eq_var_spec_alias).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">funspec_sub (snd secp256k1_i128_eq_var_spec)\n  (snd secp256k1_i128_eq_var_spec_alias)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ed\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ed\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">funspec_sub (snd secp256k1_i128_eq_var_spec)\n  (snd secp256k1_i128_eq_var_spec_alias)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ee\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ee\">do_funspec_sub.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>w</var><span class=\"hyp-type\"><b>: </b><span>(val * share * Z)%type</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, r0) := w <span class=\"kr\">in</span>\n <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p <span class=\"kr\">in</span>\n <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : argsEnviron =&gt;\n !! (readable_share shr /\\ <span class=\"kt\">True</span>) &amp;&amp;\n (!! (snd x = [r; r]) &amp;&amp;\n  (TT &amp;&amp; (secp256k1_uint128_at shr r0 r * emp))))\n  (g, args)\n|-- EX (x1 : val * share * Z * val * share * Z)\n    (F : mpred),\n    F\n      * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n         <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : argsEnviron =&gt;\n         !! (readable_share shr /\\\n             readable_share shs /\\ <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd x = [r; s]) &amp;&amp;\n          (TT &amp;&amp;\n           (secp256k1_uint128_at shr r0 r\n              * (secp256k1_uint128_at shs s0 s * emp)))))\n          (g, args) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (F\n           * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n              <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : environ =&gt;\n              TT &amp;&amp;\n              (!! ((Vint (Int.repr ...) = eval_id\n                                            ret_temp x /\\\n                    Vint (...) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n               (secp256k1_uint128_at shr r0 r\n                  * (secp256k1_uint128_at shs s0 s\n                       * emp)))) rho&#39;)\n        |-- (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, r0) := w <span class=\"kr\">in</span>\n             <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p <span class=\"kr\">in</span>\n             <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : environ =&gt;\n             TT &amp;&amp;\n             (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = eval_id\n                                         ret_temp x /\\\n                   Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\\n                  <span class=\"kt\">True</span>) &amp;&amp;\n              (secp256k1_uint128_at shr r0 r * emp)))\n              rho&#39;)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ef\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ef\"><span class=\"nb\">destruct</span> w <span class=\"kr\">as</span> [[r shr] r0].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">!! (readable_share shr /\\ <span class=\"kt\">True</span>) &amp;&amp;\n(!! (snd (g, args) = [r; r]) &amp;&amp;\n (TT &amp;&amp; (secp256k1_uint128_at shr r0 r * emp)))\n|-- EX (x1 : val * share * Z * val * share * Z)\n    (F : mpred),\n    F\n      * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n         <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : argsEnviron =&gt;\n         !! (readable_share shr /\\\n             readable_share shs /\\ <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd x = [r; s]) &amp;&amp;\n          (TT &amp;&amp;\n           (secp256k1_uint128_at shr r0 r\n              * (secp256k1_uint128_at shs s0 s * emp)))))\n          (g, args) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (F\n           * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n              <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : environ =&gt;\n              TT &amp;&amp;\n              (!! ((Vint (Int.repr ...) = \n                    eval_id ret_temp x /\\\n                    Vint (...) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n               (secp256k1_uint128_at shr r0 r\n                  * (secp256k1_uint128_at shs s0 s\n                       * emp)))) rho&#39;)\n        |-- TT &amp;&amp;\n            (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n                  eval_id ret_temp rho&#39; /\\\n                  Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n             (secp256k1_uint128_at shr r0 r * emp)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f0\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f0\">entailer!.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [r; r]</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">secp256k1_uint128_at shr r0 r\n|-- EX (x1 : val * share * Z * val * share * Z)\n    (F : mpred),\n    F\n      * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n         <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : argsEnviron =&gt;\n         !! (readable_share shr /\\\n             readable_share shs /\\ <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd x = [r; s]) &amp;&amp;\n          (TT &amp;&amp;\n           (secp256k1_uint128_at shr r0 r\n              * (secp256k1_uint128_at shs s0 s * emp)))))\n          (g, args) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (F\n           * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n              <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : environ =&gt;\n              TT &amp;&amp;\n              (!! ((Vint (Int.repr ...) = \n                    eval_id ret_temp x /\\\n                    Vint (...) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n               (secp256k1_uint128_at shr r0 r\n                  * (secp256k1_uint128_at shs s0 s\n                       * emp)))) rho&#39;)\n        |-- TT &amp;&amp;\n            (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n                  eval_id ret_temp rho&#39; /\\\n                  Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n             secp256k1_uint128_at shr r0 r))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f1\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f1\"><span class=\"nb\">destruct</span> (slice.split_readable_share _ H0) <span class=\"kr\">as</span> [sh1 [sh2 [Hsh1 [Hsh2 Hsh]]]].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [r; r]</span></span></span><br><span><var>sh1, sh2</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Hsh1</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh1</span></span></span><br><span><var>Hsh2</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh2</span></span></span><br><span><var>Hsh</var><span class=\"hyp-type\"><b>: </b><span>sepalg.join sh1 sh2 shr</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">secp256k1_uint128_at shr r0 r\n|-- EX (x1 : val * share * Z * val * share * Z)\n    (F : mpred),\n    F\n      * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n         <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n         <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : argsEnviron =&gt;\n         !! (readable_share shr /\\\n             readable_share shs /\\ <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd x = [r; s]) &amp;&amp;\n          (TT &amp;&amp;\n           (secp256k1_uint128_at shr r0 r\n              * (secp256k1_uint128_at shs s0 s * emp)))))\n          (g, args) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (F\n           * (<span class=\"kr\">let</span> (<span class=\"nv\">p</span>, s0) := x1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p0</span>, shs) := p <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p1</span>, s) := p0 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">p2</span>, r0) := p1 <span class=\"kr\">in</span>\n              <span class=\"kr\">let</span> (<span class=\"nv\">r</span>, shr) := p2 <span class=\"kr\">in</span>\n              <span class=\"kr\">fun</span> <span class=\"nv\">x</span> : environ =&gt;\n              TT &amp;&amp;\n              (!! ((Vint (Int.repr ...) = \n                    eval_id ret_temp x /\\\n                    Vint (...) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n               (secp256k1_uint128_at shr r0 r\n                  * (secp256k1_uint128_at shs s0 s\n                       * emp)))) rho&#39;)\n        |-- TT &amp;&amp;\n            (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n                  eval_id ret_temp rho&#39; /\\\n                  Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n             secp256k1_uint128_at shr r0 r))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f2\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f2\">Exists (((((r, sh1), r0), r), sh2), r0) emp.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [r; r]</span></span></span><br><span><var>sh1, sh2</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Hsh1</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh1</span></span></span><br><span><var>Hsh2</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh2</span></span></span><br><span><var>Hsh</var><span class=\"hyp-type\"><b>: </b><span>sepalg.join sh1 sh2 shr</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">secp256k1_uint128_at shr r0 r\n|-- emp\n      * (!! (readable_share sh1 /\\\n             readable_share sh2 /\\ <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd (g, args) = [r; r]) &amp;&amp;\n          (TT &amp;&amp;\n           (secp256k1_uint128_at sh1 r0 r\n              * (secp256k1_uint128_at sh2 r0 r * emp))))) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (emp\n           * (TT &amp;&amp;\n              (!! ((Vint\n                      (Int.repr\n                        (<span class=\"kr\">if</span>\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =?\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>\n                        <span class=\"kr\">then</span> <span class=\"mi\">1</span>\n                        <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) = \n                    eval_id ret_temp rho&#39; /\\\n                    Vint\n                      (Int.repr\n                        (<span class=\"kr\">if</span>\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =?\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>\n                        <span class=\"kr\">then</span> <span class=\"mi\">1</span>\n                        <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n               (secp256k1_uint128_at sh1 r0 r\n                  * (secp256k1_uint128_at sh2 r0 r\n                       * emp)))))\n        |-- TT &amp;&amp;\n            (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n                  eval_id ret_temp rho&#39; /\\\n                  Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n             secp256k1_uint128_at shr r0 r))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f3\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f3\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [r; r]</span></span></span><br><span><var>sh1, sh2</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Hsh1</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh1</span></span></span><br><span><var>Hsh2</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh2</span></span></span><br><span><var>Hsh</var><span class=\"hyp-type\"><b>: </b><span>sepalg.join sh1 sh2 shr</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at shr t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- emp\n      * (!! (readable_share sh1 /\\\n             readable_share sh2 /\\ <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd (g, args) = [r; r]) &amp;&amp;\n          (TT &amp;&amp;\n           (data_at sh1 t_secp256k1_uint128\n              (Vlong (Int64.repr r0),\n               Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n              * (data_at sh2 t_secp256k1_uint128\n                   (Vlong (Int64.repr r0),\n                    Vlong\n                      (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n                   * emp))))) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (emp\n           * (TT &amp;&amp;\n              (!! ((Vint\n                      (Int.repr\n                        (<span class=\"kr\">if</span>\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =?\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>\n                        <span class=\"kr\">then</span> <span class=\"mi\">1</span>\n                        <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) = \n                    eval_id ret_temp rho&#39; /\\\n                    Vint\n                      (Int.repr\n                        (<span class=\"kr\">if</span>\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span> =?\n                        r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">128</span>\n                        <span class=\"kr\">then</span> <span class=\"mi\">1</span>\n                        <span class=\"kr\">else</span> <span class=\"mi\">0</span>)) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n               (data_at sh1 t_secp256k1_uint128\n                  (Vlong (Int64.repr r0),\n                   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))\n                  r\n                  * (data_at sh2 t_secp256k1_uint128\n                       (Vlong (Int64.repr r0),\n                        Vlong\n                        (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))\n                       r\n                       * emp)))))\n        |-- TT &amp;&amp;\n            (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n                  eval_id ret_temp rho&#39; /\\\n                  Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n             data_at shr t_secp256k1_uint128\n               (Vlong (Int64.repr r0),\n                Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f4\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f4\"><span class=\"nb\">rewrite</span> &lt;- (data_at_share_join _ _ _ _ _ _ Hsh), Z.eqb_refl.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [r; r]</span></span></span><br><span><var>sh1, sh2</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Hsh1</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh1</span></span></span><br><span><var>Hsh2</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh2</span></span></span><br><span><var>Hsh</var><span class=\"hyp-type\"><b>: </b><span>sepalg.join sh1 sh2 shr</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh1 t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n  * data_at sh2 t_secp256k1_uint128\n      (Vlong (Int64.repr r0),\n       Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- emp\n      * (!! (readable_share sh1 /\\\n             readable_share sh2 /\\ <span class=\"kt\">True</span>) &amp;&amp;\n         (!! (snd (g, args) = [r; r]) &amp;&amp;\n          (TT &amp;&amp;\n           (data_at sh1 t_secp256k1_uint128\n              (Vlong (Int64.repr r0),\n               Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n              * (data_at sh2 t_secp256k1_uint128\n                   (Vlong (Int64.repr r0),\n                    Vlong\n                      (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n                   * emp))))) &amp;&amp;\n    !! (<span class=\"kr\">forall</span> <span class=\"nv\">rho&#39;</span> : environ,\n        !! (ve_of rho&#39; = Map.empty (block * type)) &amp;&amp;\n        (emp\n           * (TT &amp;&amp;\n              (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n                    eval_id ret_temp rho&#39; /\\\n                    Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\\n                   <span class=\"kt\">True</span>) &amp;&amp;\n               (data_at sh1 t_secp256k1_uint128\n                  (Vlong (Int64.repr r0),\n                   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))\n                  r\n                  * (data_at sh2 t_secp256k1_uint128\n                       (Vlong (Int64.repr r0),\n                        Vlong\n                        (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))\n                       r\n                       * emp)))))\n        |-- TT &amp;&amp;\n            (!! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n                  eval_id ret_temp rho&#39; /\\\n                  Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n             (data_at sh1 t_secp256k1_uint128\n                (Vlong (Int64.repr r0),\n                 Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))\n                r\n                * data_at sh2 t_secp256k1_uint128\n                    (Vlong (Int64.repr r0),\n                     Vlong\n                       (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))\n                    r)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f5\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f5\">entailer!.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [r; r]</span></span></span><br><span><var>sh1, sh2</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Hsh1</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh1</span></span></span><br><span><var>Hsh2</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh2</span></span></span><br><span><var>Hsh</var><span class=\"hyp-type\"><b>: </b><span>sepalg.join sh1 sh2 shr</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>field_compatible t_secp256k1_uint128 [] r</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>value_fits t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kr\">forall</span> <span class=\"nv\">x</span> : environ,\nve_of x = Map.empty (block * type) -&gt;\nVint (Int.repr <span class=\"mi\">1</span>) = eval_id ret_temp x -&gt;\ndata_at sh1 t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n  * data_at sh2 t_secp256k1_uint128\n      (Vlong (Int64.repr r0),\n       Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- !! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n         eval_id ret_temp x /\\\n         Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n    (data_at sh1 t_secp256k1_uint128\n       (Vlong (Int64.repr r0),\n        Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n       * data_at sh2 t_secp256k1_uint128\n           (Vlong (Int64.repr r0),\n            Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f6\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f6\"><span class=\"nb\">intros</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>shr</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>g</var><span class=\"hyp-type\"><b>: </b><span>genviron</span></span></span><br><span><var>args</var><span class=\"hyp-type\"><b>: </b><span>list val</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>argsHaveTyps (snd (g, args))\n  (fst\n     ([tptr t_secp256k1_uint128;\n       tptr t_secp256k1_uint128], tint))</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span>readable_share shr</span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>snd (g, args) = [r; r]</span></span></span><br><span><var>sh1, sh2</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>Hsh1</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh1</span></span></span><br><span><var>Hsh2</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh2</span></span></span><br><span><var>Hsh</var><span class=\"hyp-type\"><b>: </b><span>sepalg.join sh1 sh2 shr</span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>field_compatible t_secp256k1_uint128 [] r</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>value_fits t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>)))</span></span></span><br><span><var>H6</var><span class=\"hyp-type\"><b>: </b><span>Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef</span></span></span><br><span><var>x</var><span class=\"hyp-type\"><b>: </b><span>environ</span></span></span><br><span><var>H4</var><span class=\"hyp-type\"><b>: </b><span>ve_of x = Map.empty (block * type)</span></span></span><br><span><var>H5</var><span class=\"hyp-type\"><b>: </b><span>Vint (Int.repr <span class=\"mi\">1</span>) = eval_id ret_temp x</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">data_at sh1 t_secp256k1_uint128\n  (Vlong (Int64.repr r0),\n   Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n  * data_at sh2 t_secp256k1_uint128\n      (Vlong (Int64.repr r0),\n       Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n|-- !! ((Vint (Int.repr <span class=\"mi\">1</span>) = \n         eval_id ret_temp x /\\\n         Vint (Int.repr <span class=\"mi\">1</span>) &lt;&gt; Vundef) /\\ <span class=\"kt\">True</span>) &amp;&amp;\n    (data_at sh1 t_secp256k1_uint128\n       (Vlong (Int64.repr r0),\n        Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r\n       * data_at sh2 t_secp256k1_uint128\n           (Vlong (Int64.repr r0),\n            Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\">entailer!.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">\n</span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f7\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f7\"><span class=\"kn\">Lemma</span> <span class=\"nf\">body_secp256k1_i128_check_pow2</span>: semax_body Vprog Gprog f_secp256k1_i128_check_pow2 secp256k1_i128_check_pow2_spec.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_check_pow2\n  secp256k1_i128_check_pow2_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f8\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f8\"><span class=\"kn\">Proof</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax_body Vprog Gprog f_secp256k1_i128_check_pow2\n  secp256k1_i128_check_pow2_spec</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1f9\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1f9\">start_function.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>Int128_min_signed &lt;= r0 &lt;= Int128_max_signed</span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     <span class=\"kr\">if</span> (!(_n &lt; (<span class=\"mi\">127</span>))) {\n       <span class=\"kr\">for</span> (;\n       ;\n       break;) {\n         ((_t&#39;8 = _stderr;\n           _fprintf\n             ([(_t&#39;8)%expr; (___stringlit_6)%expr;\n               (___stringlit_159)%expr; ((<span class=\"mi\">195</span>))%expr;\n               (___stringlit_165)%expr]);)\n          _abort([]);)\n       }\n     }\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1fa\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1fa\">unfold_Int128.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     <span class=\"kr\">if</span> (!(_n &lt; (<span class=\"mi\">127</span>))) {\n       <span class=\"kr\">for</span> (;\n       ;\n       break;) {\n         ((_t&#39;8 = _stderr;\n           _fprintf\n             ([(_t&#39;8)%expr; \n               (___stringlit_6)%expr;\n               (___stringlit_159)%expr; \n               ((<span class=\"mi\">195</span>))%expr; \n               (___stringlit_165)%expr]);)\n          _abort([]);)\n       }\n     }\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1fb\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1fb\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>Int.repr\n  (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">127</span>))) = Int.zero</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1fc\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1fc\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     (<span class=\"kr\">if</span> (_sign == (<span class=\"mi\">1</span>)) {\n        _t&#39;1 = (<span class=\"mi\">1</span>);\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tbool) (_sign == (-(<span class=\"mi\">1</span>)));\n      }\n      <span class=\"kr\">if</span> (!_t&#39;1) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;7 = _stderr;\n            _fprintf\n              ([(_t&#39;7)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">196</span>))%expr; \n                (___stringlit_166)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1fd\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1fd\"><span class=\"nb\">revert</span> H2.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (Int.ltu (Int.repr n) (Int.repr <span class=\"mi\">127</span>))) = Int.zero -&gt;\n<span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk1fe\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk1fe\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     (<span class=\"kr\">if</span> (_sign == (<span class=\"mi\">1</span>)) {\n        _t&#39;1 = (<span class=\"mi\">1</span>);\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tbool) (_sign == (-(<span class=\"mi\">1</span>)));\n      }\n      <span class=\"kr\">if</span> (!_t&#39;1) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;7 = _stderr;\n            _fprintf\n              ([(_t&#39;7)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">196</span>))%expr; \n                (___stringlit_166)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk1ff\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk1ff\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">127</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk200\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk200\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     (<span class=\"kr\">if</span> (_sign == (<span class=\"mi\">1</span>)) {\n        _t&#39;1 = (<span class=\"mi\">1</span>);\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tbool) (_sign == (-(<span class=\"mi\">1</span>)));\n      }\n      <span class=\"kr\">if</span> (!_t&#39;1) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;7 = _stderr;\n            _fprintf\n              ([(_t&#39;7)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">196</span>))%expr; \n                (___stringlit_166)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk201\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk201\"><span class=\"nb\">cbn</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int.repr (Z.b2z (n &lt;? <span class=\"mi\">127</span>)) = Int.zero -&gt; <span class=\"kt\">False</span></div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk202\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk202\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     (<span class=\"kr\">if</span> (_sign == (<span class=\"mi\">1</span>)) {\n        _t&#39;1 = (<span class=\"mi\">1</span>);\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tbool) (_sign == (-(<span class=\"mi\">1</span>)));\n      }\n      <span class=\"kr\">if</span> (!_t&#39;1) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;7 = _stderr;\n            _fprintf\n              ([(_t&#39;7)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">196</span>))%expr; \n                (___stringlit_166)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk203\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk203\"><span class=\"nb\">case</span> Z.ltb_spec;[<span class=\"bp\">discriminate</span>|<span class=\"bp\">lia</span>].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">for</span> (;\n   ;\n   break;) {\n     (<span class=\"kr\">if</span> (_sign == (<span class=\"mi\">1</span>)) {\n        _t&#39;1 = (<span class=\"mi\">1</span>);\n      } <span class=\"kr\">else</span> {\n        _t&#39;1 = (tbool) (_sign == (-(<span class=\"mi\">1</span>)));\n      }\n      <span class=\"kr\">if</span> (!_t&#39;1) {\n        <span class=\"kr\">for</span> (;\n        ;\n        break;) {\n          ((_t&#39;7 = _stderr;\n            _fprintf\n              ([(_t&#39;7)%expr; \n                (___stringlit_6)%expr;\n                (___stringlit_159)%expr; \n                ((<span class=\"mi\">196</span>))%expr; \n                (___stringlit_166)%expr]);)\n           _abort([]);)\n        }\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk204\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk204\">forward_verify_check.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_sign == (<span class=\"mi\">1</span>)) {\n     _t&#39;1 = (<span class=\"mi\">1</span>);\n   } <span class=\"kr\">else</span> {\n     _t&#39;1 = (tbool) (_sign == (-(<span class=\"mi\">1</span>)));\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk205\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk205\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;5 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;5 == (tulong) _sign &lt;&lt; (_n - (<span class=\"mi\">64</span>))) {\n        ((_t&#39;6 = (_r -&gt; _lo);\n          _t&#39;2 = (tbool) (_t&#39;6 == (<span class=\"mi\">0</span>));)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   } <span class=\"kr\">else</span> {\n     (_t&#39;3 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;3 == (tulong) ((_sign - (<span class=\"mi\">1</span>)) &gt;&gt; (<span class=\"mi\">1</span>))) {\n        ((_t&#39;4 = (_r -&gt; _lo);\n          _t&#39;2 =\n            (tbool) (_t&#39;4 == (tulong) _sign &lt;&lt; _n);)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk206\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk206\">forward_if (temp _t&#39;1 (Vint (Int.repr <span class=\"mi\">1</span>)));\n [forward|forward;<span class=\"nb\">replace</span> sign <span class=\"kr\">with</span> (-<span class=\"mi\">1</span>) <span class=\"bp\">by</span> <span class=\"bp\">lia</span>|]; <span class=\"kp\">try</span> entailer!.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _t&#39;1 (Vint (Int.repr <span class=\"mi\">1</span>)); \n   temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (!_t&#39;1) {\n     <span class=\"kr\">for</span> (;\n     ;\n     break;) {\n       ((_t&#39;7 = _stderr;\n         _fprintf\n           ([(_t&#39;7)%expr; \n             (___stringlit_6)%expr;\n             (___stringlit_159)%expr; \n             ((<span class=\"mi\">196</span>))%expr; \n             (___stringlit_166)%expr]);)\n        _abort([]);)\n     }\n   }) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk207\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk207\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;5 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;5 == (tulong) _sign &lt;&lt; (_n - (<span class=\"mi\">64</span>))) {\n        ((_t&#39;6 = (_r -&gt; _lo);\n          _t&#39;2 = (tbool) (_t&#39;6 == (<span class=\"mi\">0</span>));)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   } <span class=\"kr\">else</span> {\n     (_t&#39;3 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;3 == (tulong) ((_sign - (<span class=\"mi\">1</span>)) &gt;&gt; (<span class=\"mi\">1</span>))) {\n        ((_t&#39;4 = (_r -&gt; _lo);\n          _t&#39;2 =\n            (tbool) (_t&#39;4 == (tulong) _sign &lt;&lt; _n);)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\"> </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk208\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk208\">forward_if;[<span class=\"bp\">discriminate</span>|forward;entailer].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (secp256k1_uint128_at sh r0 r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;5 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;5 == (tulong) _sign &lt;&lt; (_n - (<span class=\"mi\">64</span>))) {\n        ((_t&#39;6 = (_r -&gt; _lo);\n          _t&#39;2 = (tbool) (_t&#39;6 == (<span class=\"mi\">0</span>));)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   } <span class=\"kr\">else</span> {\n     (_t&#39;3 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;3 == (tulong) ((_sign - (<span class=\"mi\">1</span>)) &gt;&gt; (<span class=\"mi\">1</span>))) {\n        ((_t&#39;4 = (_r -&gt; _lo);\n          _t&#39;2 =\n            (tbool) (_t&#39;4 == (tulong) _sign &lt;&lt; _n);)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk209\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk209\"><span class=\"nb\">unfold</span> secp256k1_uint128_at.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (<span class=\"kr\">if</span> (_n &gt;= (<span class=\"mi\">64</span>)) {\n     (_t&#39;5 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;5 == (tulong) _sign &lt;&lt; (_n - (<span class=\"mi\">64</span>))) {\n        ((_t&#39;6 = (_r -&gt; _lo);\n          _t&#39;2 = (tbool) (_t&#39;6 == (<span class=\"mi\">0</span>));)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   } <span class=\"kr\">else</span> {\n     (_t&#39;3 = (_r -&gt; _hi);\n      <span class=\"kr\">if</span> (_t&#39;3 == (tulong) ((_sign - (<span class=\"mi\">1</span>)) &gt;&gt; (<span class=\"mi\">1</span>))) {\n        ((_t&#39;4 = (_r -&gt; _lo);\n          _t&#39;2 =\n            (tbool) (_t&#39;4 == (tulong) _sign &lt;&lt; _n);)\n         _t&#39;2 = (tint) _t&#39;2;)\n      } <span class=\"kr\">else</span> {\n        _t&#39;2 = (tint) (<span class=\"mi\">0</span>);\n      })\n   }\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk20a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk20a\">forward_if (temp _t&#39;2 (Vint (Int.repr (Z.b2z (r0 =? sign*<span class=\"mi\">2</span>^n)))));[| |forward].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk20b\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk20b\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk20c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk20c\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk20d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk20d\"><span class=\"nb\">assert</span> (Hr0: r0 =? sign * <span class=\"mi\">2</span> ^ n =\n             ((Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp; (r0 mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk20e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk20e\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk20f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk20f\"><span class=\"nb\">rewrite</span> (Z_div_mod_eq_full r0 (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)) <span class=\"nb\">at</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                   sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                  (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk210\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk210\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk211\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk211\"><span class=\"nb\">rewrite</span> Z.mul_comm.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ n) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk212\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk212\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk213\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk213\"><span class=\"nb\">replace</span> n <span class=\"kr\">with</span> (n - <span class=\"mi\">64</span> + <span class=\"mi\">64</span>) <span class=\"nb\">at</span> <span class=\"mi\">1</span> <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span> + <span class=\"mi\">64</span>)) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk214\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk214\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk215\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk215\"><span class=\"nb\">rewrite</span> &lt;- (Z.add_0_r (sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span> + <span class=\"mi\">64</span>))).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span> + <span class=\"mi\">64</span>) + <span class=\"mi\">0</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk216\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk216\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk217\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk217\"><span class=\"nb\">change</span> <span class=\"mi\">0</span> <span class=\"kr\">with</span> (<span class=\"mi\">0</span> mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span> + <span class=\"mi\">64</span>) + <span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk218\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk218\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk219\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk219\"><span class=\"nb\">rewrite</span> Z.pow_add_r, Z.mul_assoc, &lt;- !Z.shiftl_mul_pow2, &lt;- Z.shiftr_div_pow2 <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftl (Z.shiftl sign (n - <span class=\"mi\">64</span>)) <span class=\"mi\">64</span> + <span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftl sign (n - <span class=\"mi\">64</span>)) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk21a\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk21a\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk21b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk21b\"><span class=\"nb\">apply</span> shiftl_mod_eqb_unique; <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;5 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk21c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk21c\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.shl (Int64.repr sign)\n     (Int64.repr\n        (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr (Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>)))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk21d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk21d\"><hr></label><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk21e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk21e\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.shl (Int64.repr sign)\n     (Int64.repr\n        (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr (Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk21f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk21f\"><span class=\"nb\">rewrite</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.shl (Int64.repr sign)\n     (Int64.repr\n        (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>)))) = \nVint (Int.repr (Z.b2z (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk220\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk220\"><span class=\"nb\">replace</span> (_ =? sign * <span class=\"mi\">2</span> ^ _) <span class=\"kr\">with</span> true;[<span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.shl (Int64.repr sign)\n     (Int64.repr\n        (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">true = (Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk221\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk221\"><span class=\"nb\">symmetry</span>; <span class=\"nb\">rewrite</span> Z.eqb_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.shl (Int64.repr sign)\n     (Int64.repr\n        (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr r0 <span class=\"mi\">64</span> = sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk222\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk222\"><span class=\"nb\">revert</span> H3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.shl (Int64.repr sign)\n     (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))) = true -&gt;\nZ.shiftr r0 <span class=\"mi\">64</span> = sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk223\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk223\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n (sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = true -&gt;\nZ.shiftr r0 <span class=\"mi\">64</span> = sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk224\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk224\"><span class=\"nb\">rewrite</span> Z.eqb_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = \n(sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> -&gt; Z.shiftr r0 <span class=\"mi\">64</span> = \nsign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk225\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk225\"><span class=\"nb\">apply</span> (Z_mod_eq_bounded (-<span class=\"mi\">2</span>^<span class=\"mi\">63</span>) (<span class=\"mi\">2</span>^<span class=\"mi\">63</span>)); <span class=\"kp\">try</span> solve_bounds.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk226\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk226\"><span class=\"nb\">pose</span> (Hpow := Z.pow_lt_mono_r <span class=\"mi\">2</span> (n-<span class=\"mi\">64</span>) <span class=\"mi\">63</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>Hpow</var><span><span class=\"hyp-body\"><b>:= </b><span>Z.pow_lt_mono_r <span class=\"mi\">2</span> (n - <span class=\"mi\">64</span>) <span class=\"mi\">63</span></span></span><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">1</span> &lt; <span class=\"mi\">2</span> -&gt;\n<span class=\"mi\">0</span> &lt;= <span class=\"mi\">63</span> -&gt; n - <span class=\"mi\">64</span> &lt; <span class=\"mi\">63</span> -&gt; <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>) &lt; <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span></span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">-<span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> &lt;= sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>) &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">63</span> - <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">lia</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk227\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk227\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk228\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk228\"><span class=\"nb\">rewrite</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> =? sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk229\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk229\"><span class=\"nb\">case</span> Z.eqb_spec; <span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr r0 <span class=\"mi\">64</span> = sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>) -&gt;\nVint (Int.repr (Z.b2z (true &amp;&amp; (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk22a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk22a\"><span class=\"nb\">intros</span> Hr0n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</span></span></span><br><span><var>Hr0n</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> = sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (true &amp;&amp; (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk22b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk22b\"><span class=\"nb\">elim</span> H3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</span></span></span><br><span><var>Hr0n</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> = sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = \nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk22c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk22c\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &gt;= <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? <span class=\"mi\">0</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.shl (Int64.repr sign)\n  (Int64.repr (Int.unsigned (Int.repr (n - <span class=\"mi\">64</span>))))</span></span></span><br><span><var>Hr0n</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> = sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>)</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = \nInt64.repr (sign * <span class=\"mi\">2</span> ^ (n - <span class=\"mi\">64</span>))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">congruence</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk22d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk22d\">*</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk22e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk22e\"><span class=\"nb\">assert</span> (Hr0: r0 =? sign * <span class=\"mi\">2</span> ^ n =\n             ((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp; (r0 mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span>^n) mod <span class=\"mi\">2</span>^<span class=\"mi\">64</span>))%bool).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk22f\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk22f\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk230\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk230\"><span class=\"nb\">rewrite</span> (Z_div_mod_eq_full r0 (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)) <span class=\"nb\">at</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                   Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                  (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                   (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk231\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk231\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk232\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk232\"><span class=\"nb\">rewrite</span> (Z_div_mod_eq_full (sign * <span class=\"mi\">2</span>^n) (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)) <span class=\"nb\">at</span> <span class=\"mi\">1</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * (r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * (sign * <span class=\"mi\">2</span> ^ n / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)\n   + (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk233\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk233\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk234\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk234\"><span class=\"nb\">rewrite</span> !(Z.mul_comm (<span class=\"mi\">2</span>^<span class=\"mi\">64</span>)).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(r0 / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n sign * <span class=\"mi\">2</span> ^ n / <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> * <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>\n   + (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk235\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk235\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk236\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk236\"><span class=\"nb\">rewrite</span> &lt;- (Z.shiftl_mul_pow2 _ n), &lt;- !(Z.shiftl_mul_pow2 _ <span class=\"mi\">64</span>), &lt;- !Z.shiftr_div_pow2,\n           Z.shiftr_shiftl_l <span class=\"bp\">by</span> <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftl (Z.shiftl sign (n - <span class=\"mi\">64</span>)) <span class=\"mi\">64</span>\n   + Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk237\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk237\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk238\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk238\"><span class=\"nb\">replace</span> (n - <span class=\"mi\">64</span>) <span class=\"kr\">with</span> (-(<span class=\"mi\">64</span> - n)) <span class=\"bp\">by</span> <span class=\"bp\">ring</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftl (Z.shiftl sign (-(<span class=\"mi\">64</span> - n))) <span class=\"mi\">64</span>\n   + Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk239\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk239\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk23a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk23a\"><span class=\"nb\">rewrite</span> Z.shiftl_opp_r.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftl (Z.shiftr sign (<span class=\"mi\">64</span> - n)) <span class=\"mi\">64</span>\n   + Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk23b\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk23b\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk23c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk23c\"><span class=\"nb\">replace</span> (Z.shiftr sign (<span class=\"mi\">64</span> - n)) <span class=\"kr\">with</span> (Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>).</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftl (Z.shiftr r0 <span class=\"mi\">64</span>) <span class=\"mi\">64</span> + r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftl (Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) <span class=\"mi\">64</span>\n   + Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = \n((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? Z.shiftl sign n mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk23d\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk23d\"><hr></label><div class=\"goal-conclusion\">Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span> = Z.shiftr sign (<span class=\"mi\">64</span> - n)</div></blockquote><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk23e\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk23e\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk23f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk23f\"><span class=\"nb\">apply</span> shiftl_mod_eqb_unique; <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span> = Z.shiftr sign (<span class=\"mi\">64</span> - n)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk240\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk240\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk241\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk241\"><span class=\"nb\">destruct</span> H1 <span class=\"kr\">as</span> [-&gt; | -&gt;];\n   [<span class=\"nb\">rewrite</span> Z_shiftr_neg1_l;[<span class=\"bp\">reflexivity</span>|<span class=\"bp\">lia</span>]|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr (<span class=\"mi\">1</span> - <span class=\"mi\">1</span>) <span class=\"mi\">1</span> = Z.shiftr <span class=\"mi\">1</span> (<span class=\"mi\">64</span> - n)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk242\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk242\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk243\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk243\"><span class=\"nb\">rewrite</span> (shiftr_small <span class=\"mi\">1</span>);[<span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\"><span class=\"mi\">0</span> &lt;= <span class=\"mi\">1</span> &lt; <span class=\"mi\">2</span> ^ (<span class=\"mi\">64</span> - n)</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk244\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk244\"><hr></label><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">   </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk245\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk245\"><span class=\"nb\">split</span>; <span class=\"kp\">try</span> <span class=\"nb\">apply</span> Z.pow_gt_1; <span class=\"bp\">lia</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>Delta</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>tycontext</span></span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>POSTCONDITION</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>ret_assert</span></span></span></span><br><span><var>MORE_COMMANDS</var><span><span class=\"hyp-body\"><b>:= </b><span>abbreviate</span></span><span class=\"hyp-type\"><b>: </b><span>statement</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">semax Delta\n  (PROP ( )\n   LOCAL (temp _r r; temp _n (Vint (Int.repr n));\n   temp _sign (Vint (Int.repr sign)))\n   SEP (data_at sh t_secp256k1_uint128\n          (Vlong (Int64.repr r0),\n           Vlong (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))) r))\n  (_t&#39;3 = (_r -&gt; _hi);\n   MORE_COMMANDS) POSTCONDITION</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk246\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk246\"><span class=\"kp\">repeat</span> progressC.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr\n     (Int.signed\n        (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>))\n           (Int.repr <span class=\"mi\">1</span>)))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint\n  (Int.repr\n     (Z.b2z\n        (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))</div></blockquote><div class=\"alectryon-extra-goals\"><input class=\"alectryon-extra-goal-toggle\" id=\"verif-int128-impl-v-chk247\" style=\"display: none\" type=\"checkbox\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</span></span></span><br></div><label class=\"goal-separator\" for=\"verif-int128-impl-v-chk247\"><hr></label><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk248\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk248\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr\n     (Int.signed\n        (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>))\n           (Int.repr <span class=\"mi\">1</span>)))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint\n  (Int.repr\n     (Z.b2z\n        (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk249\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk249\"><span class=\"nb\">rewrite</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr\n     (Int.signed\n        (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>))\n           (Int.repr <span class=\"mi\">1</span>)))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint\n  (Int.repr\n     (Z.b2z\n        (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk24a\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk24a\"><span class=\"nb\">replace</span> (_ =? Z.shiftr _ _) <span class=\"kr\">with</span> true;[<span class=\"bp\">reflexivity</span>|].</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr\n     (Int.signed\n        (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>))\n           (Int.repr <span class=\"mi\">1</span>)))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">true = (Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk24b\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk24b\"><span class=\"nb\">symmetry</span>; <span class=\"nb\">rewrite</span> Z.eqb_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr\n     (Int.signed\n        (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>))\n           (Int.repr <span class=\"mi\">1</span>)))) = true</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr r0 <span class=\"mi\">64</span> = Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk24c\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk24c\"><span class=\"nb\">revert</span> H3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.eq (Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>))\n  (Int64.repr\n     (Int.signed\n        (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))) = true -&gt;\nZ.shiftr r0 <span class=\"mi\">64</span> = Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk24d\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk24d\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">(Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>) = true -&gt;\nZ.shiftr r0 <span class=\"mi\">64</span> = Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk24e\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk24e\"><span class=\"nb\">rewrite</span> Z.eqb_eq.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr r0 <span class=\"mi\">64</span> mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> = \nZ.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span> mod \n<span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> -&gt; Z.shiftr r0 <span class=\"mi\">64</span> = \nZ.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span></div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"nb\">apply</span> (Z_mod_eq_bounded (-<span class=\"mi\">2</span>^<span class=\"mi\">63</span>) (<span class=\"mi\">2</span>^<span class=\"mi\">63</span>)); solve_bounds.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">  </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk24f\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk24f\">-</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint (Int.repr (Z.b2z (r0 =? sign * <span class=\"mi\">2</span> ^ n))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\"> </span></span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk250\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk250\"><span class=\"nb\">rewrite</span> Hr0.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        ((Z.shiftr r0 <span class=\"mi\">64</span> =? Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk251\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk251\"><span class=\"nb\">case</span> Z.eqb_spec; <span class=\"kp\">try</span> <span class=\"bp\">reflexivity</span>.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Z.shiftr r0 <span class=\"mi\">64</span> = Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span> -&gt;\nVint\n  (Int.repr\n     (Z.b2z\n        (true &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk252\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk252\"><span class=\"nb\">intros</span> Hr0n.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</span></span></span><br><span><var>Hr0n</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> = Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Vint\n  (Int.repr\n     (Z.b2z\n        (true &amp;&amp;\n         (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =? (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>)))) = \nVint (Int.repr <span class=\"mi\">0</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk253\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk253\"><span class=\"nb\">elim</span> H3.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</span></span></span><br><span><var>Hr0n</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> = Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = \nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><input class=\"alectryon-toggle\" id=\"verif-int128-impl-v-chk254\" style=\"display: none\" type=\"checkbox\"><label class=\"alectryon-input\" for=\"verif-int128-impl-v-chk254\">convert_C_to_math.</label><small class=\"alectryon-output\"><div><div class=\"alectryon-goals\"><blockquote class=\"alectryon-goal\"><div class=\"goal-hyps\"><span><var>Espec</var><span class=\"hyp-type\"><b>: </b><span>OracleKind</span></span></span><br><span><var>r</var><span class=\"hyp-type\"><b>: </b><span>val</span></span></span><br><span><var>sh</var><span class=\"hyp-type\"><b>: </b><span>share</span></span></span><br><span><var>r0, n, sign</var><span class=\"hyp-type\"><b>: </b><span>Z</span></span></span><br><span><var>Delta_specs</var><span class=\"hyp-type\"><b>: </b><span>Maps.PTree.t funspec</span></span></span><br><span><var>SH</var><span class=\"hyp-type\"><b>: </b><span>readable_share sh</span></span></span><br><span><var>H</var><span class=\"hyp-type\"><b>: </b><span>-<span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> &lt;= r0 &lt;= <span class=\"mi\">2</span> ^ <span class=\"mi\">127</span> - <span class=\"mi\">1</span></span></span></span><br><span><var>H0</var><span class=\"hyp-type\"><b>: </b><span><span class=\"mi\">0</span> &lt;= n &lt; <span class=\"mi\">127</span></span></span></span><br><span><var>H1</var><span class=\"hyp-type\"><b>: </b><span>sign = -<span class=\"mi\">1</span> \\/ sign = <span class=\"mi\">1</span></span></span></span><br><span><var>H2</var><span class=\"hyp-type\"><b>: </b><span>n &lt; <span class=\"mi\">64</span></span></span></span><br><span><var>Hr0</var><span class=\"hyp-type\"><b>: </b><span>(r0 =? sign * <span class=\"mi\">2</span> ^ n) = ((Z.shiftr r0 <span class=\"mi\">64</span> =?\n                       Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>) &amp;&amp;\n                       (r0 mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span> =?\n                       (sign * <span class=\"mi\">2</span> ^ n) mod <span class=\"mi\">2</span> ^ <span class=\"mi\">64</span>))%bool</span></span></span><br><span><var>H3</var><span class=\"hyp-type\"><b>: </b><span>Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) &lt;&gt;\nInt64.repr\n  (Int.signed\n     (Int.shr (Int.repr (sign - <span class=\"mi\">1</span>)) (Int.repr <span class=\"mi\">1</span>)))</span></span></span><br><span><var>Hr0n</var><span class=\"hyp-type\"><b>: </b><span>Z.shiftr r0 <span class=\"mi\">64</span> = Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span></span></span></span><br></div><span class=\"goal-separator\"><hr></span><div class=\"goal-conclusion\">Int64.repr (Z.shiftr r0 <span class=\"mi\">64</span>) = \nInt64.repr (Z.shiftr (sign - <span class=\"mi\">1</span>) <span class=\"mi\">1</span>)</div></blockquote></div></div></small><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-wsp\">    </span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"bp\">congruence</span>.</span><span class=\"alectryon-wsp\">\n</span></span><span class=\"alectryon-sentence\"><span class=\"alectryon-input\"><span class=\"kn\">Qed</span>.</span><span class=\"alectryon-wsp\">\n</span></span></pre></article></body></html>"
  },
  {
    "path": "compcert-opensource.nix",
    "content": "{ stdenv, lib, fetchurl\n, coq, flocq, ocaml, menhir, menhirLib, findlib\n, ccomp-platform ? if stdenv.isDarwin then \"x86_64-macosx\" else \"x86_64-linux\"\n}:\n\nassert lib.versionAtLeast ocaml.version \"4.05\";\nassert lib.versionAtLeast coq.coq-version \"8.9\";\n\nstdenv.mkDerivation {\n  pname = \"compcert\";\n  version = \"3.14\";\n\n  src = fetchurl {\n    url = \"https://github.com/AbsInt/CompCert/archive/v3.14.tar.gz\";\n    hash = \"sha256-VYh0fbyJeHKu9Hldt8kro/k4T18qwbxFXjsBstPJryA=\";\n  };\n\n  # Unpack only those files that are open source licensed (GPL2 or GPL3).\n  unpackPhase = ''\n    tar -xf $src --wildcards --no-wildcards-match-slash \\\n      'CompCert*/MenhirLib' \\\n      'CompCert*/lib' \\\n      'CompCert*/common' \\\n      'CompCert*/cfrontend/C2C.ml' \\\n      'CompCert*/cfrontend/Clight.v' \\\n      'CompCert*/cfrontend/ClightBigstep.v' \\\n      'CompCert*/cfrontend/Cop.v' \\\n      'CompCert*/cfrontend/CPragmas.ml' \\\n      'CompCert*/cfrontend/Csem.v' \\\n      'CompCert*/cfrontend/Cstrategy.v' \\\n      'CompCert*/cfrontend/Csyntax.v' \\\n      'CompCert*/cfrontend/Ctypes.v' \\\n      'CompCert*/cfrontend/Ctyping.v' \\\n      'CompCert*/cfrontend/PrintClight.ml' \\\n      'CompCert*/cfrontend/PrintCsyntax.ml' \\\n      'CompCert*/backend/Cminor.v' \\\n      'CompCert*/backend/PrintCminor.ml' \\\n      'CompCert*/cparser' \\\n      'CompCert*/export' \\\n      'CompCert*/*/Archi.v' \\\n      'CompCert*/*/Builtins1.v' \\\n      'CompCert*/*/CBuiltins.ml' \\\n      'CompCert*/*/extractionMachdep.v' \\\n      'CompCert*/extraction/extraction.v' \\\n      'CompCert*/configure' \\\n      'CompCert*/Makefile' \\\n      'CompCert*/Makefile.extr' \\\n      'CompCert*/Makefile.menhir' \\\n      'CompCert*/LICENSE' \\\n      'CompCert*/README.md' \\\n      'CompCert*/VERSION'\n    cd CompCert*\n    mkdir doc\n  '';\n\n  patches = [ ./compcert-opensource.patch ];\n\n  buildInputs = [ ocaml findlib coq menhir menhirLib ];\n  propagatedBuildInputs = [ flocq ];\n\n  enableParallelBuilding = true;\n\n  configurePhase = ''\n    ./configure \\\n      -bindir $out/bin \\\n      -libdir $out/lib \\\n      -install-coqdev \\\n      -use-external-Flocq \\\n      -coqdevdir $out/lib/coq/${coq.coq-version}/user-contrib/compcert \\\n      ${ccomp-platform}\n  '';\n\n  preBuild = \"make depend\";\n  buildFlags = [ \"proof\" \"export/Clightdefs.vo\" \"compcert.config\" ];\n\n  meta = with lib; {\n    description = \"Formally verified C compiler\";\n    homepage    = \"http://compcert.inria.fr\";\n    license     = licenses.gpl3; # These particular files are all gpl3 compatible.\n    platforms   = [ \"x86_64-linux\" \"x86_64-darwin\" ];\n  };\n}\n"
  },
  {
    "path": "compcert-opensource.patch",
    "content": "--- CompCert-3.9/Makefile\t2021-05-10 04:11:36.000000000 -0400\n+++ CompCert-3.9-adj/Makefile\t2021-06-19 18:50:59.484683789 -0400\n@@ -28,7 +28,7 @@\n ARCHDIRS=$(ARCH)_$(BITSIZE) $(ARCH)\n endif\n \n-DIRS := lib common $(ARCHDIRS) backend cfrontend driver export cparser\n+DIRS := lib common $(ARCHDIRS) backend cfrontend export cparser\n \n COQINCLUDES := $(foreach d, $(DIRS), -R $(d) compcert.$(d))\n \n@@ -112,41 +112,12 @@\n # Back-end modules (in backend/, $(ARCH)/)\n \n BACKEND=\\\n-  Cminor.v Cminortyping.v Op.v CminorSel.v \\\n-  SelectOp.v SelectDiv.v SplitLong.v SelectLong.v Selection.v \\\n-  SelectOpproof.v SelectDivproof.v SplitLongproof.v \\\n-  SelectLongproof.v Selectionproof.v \\\n-  Registers.v RTL.v \\\n-  RTLgen.v RTLgenspec.v RTLgenproof.v \\\n-  Tailcall.v Tailcallproof.v \\\n-  Inlining.v Inliningspec.v Inliningproof.v \\\n-  Renumber.v Renumberproof.v \\\n-  RTLtyping.v \\\n-  Kildall.v Liveness.v \\\n-  ValueDomain.v ValueAOp.v ValueAnalysis.v \\\n-  ConstpropOp.v Constprop.v ConstpropOpproof.v Constpropproof.v \\\n-  CSEdomain.v CombineOp.v CSE.v CombineOpproof.v CSEproof.v \\\n-  NeedDomain.v NeedOp.v Deadcode.v Deadcodeproof.v \\\n-  Unusedglob.v Unusedglobproof.v \\\n-  Machregs.v Locations.v Conventions1.v Conventions.v LTL.v \\\n-  Allocation.v Allocproof.v \\\n-  Tunneling.v Tunnelingproof.v \\\n-  Linear.v Lineartyping.v \\\n-  Linearize.v Linearizeproof.v \\\n-  CleanupLabels.v CleanupLabelsproof.v \\\n-  Debugvar.v Debugvarproof.v \\\n-  Mach.v \\\n-  Bounds.v Stacklayout.v Stacking.v Stackingproof.v \\\n-  Asm.v Asmgen.v Asmgenproof0.v Asmgenproof1.v Asmgenproof.v\n+  Cminor.v\n \n # C front-end modules (in cfrontend/)\n \n-CFRONTEND=Ctypes.v Cop.v Csyntax.v Csem.v Ctyping.v Cstrategy.v Cexec.v \\\n-  Initializers.v Initializersproof.v \\\n-  SimplExpr.v SimplExprspec.v SimplExprproof.v \\\n-  Clight.v ClightBigstep.v SimplLocals.v SimplLocalsproof.v \\\n-  Cshmgen.v Cshmgenproof.v \\\n-  Csharpminor.v Cminorgen.v Cminorgenproof.v\n+CFRONTEND=Ctypes.v Cop.v Csyntax.v Csem.v Ctyping.v Cstrategy.v \\\n+  Clight.v ClightBigstep.v\n \n # Parser\n \n@@ -162,30 +133,19 @@\n MENHIRLIB=\n endif\n \n-# Putting everything together (in driver/)\n-\n-DRIVER=Compopts.v Compiler.v Complements.v\n-\n # Library for .v files generated by clightgen\n \n ifeq ($(CLIGHTGEN),true)\n EXPORTLIB=Ctypesdefs.v Clightdefs.v Csyntaxdefs.v\n else\n EXPORTLIB=\n endif\n \n # All source files\n \n-FILES=$(VLIB) $(COMMON) $(BACKEND) $(CFRONTEND) $(DRIVER) $(FLOCQ) \\\n+FILES=$(VLIB) $(COMMON) $(BACKEND) $(CFRONTEND) $(FLOCQ) \\\n   $(MENHIRLIB) $(PARSER) $(EXPORTLIB)\n \n-# Generated source files\n-\n-GENERATED=\\\n-  $(ARCH)/ConstpropOp.v $(ARCH)/SelectOp.v $(ARCH)/SelectLong.v \\\n-  backend/SelectDiv.v backend/SplitLong.v \\\n-  cparser/Parser.v\n-\n all:\n \t@test -f .depend || $(MAKE) depend\n \t$(MAKE) proof\n@@ -311,20 +271,13 @@\n \t$(MENHIR) --coq --coq-no-version-check cparser/Parser.vy\n \t@chmod a-w $@\n \n-depend: $(GENERATED) depend1\n+depend: depend1\n \n-depend1: $(FILES) export/Clightdefs.v\n+depend1: $(FILES) export/Ctypesdefs.v export/Clightdefs.v \n \t@echo \"Analyzing Coq dependencies\"\n \t@$(COQDEP) $^ > .depend\n \n install:\n-\tinstall -d $(DESTDIR)$(BINDIR)\n-\tinstall -m 0755 ./ccomp $(DESTDIR)$(BINDIR)\n-\tinstall -d $(DESTDIR)$(SHAREDIR)\n-\tinstall -m 0644 ./compcert.ini $(DESTDIR)$(SHAREDIR)\n-\tinstall -d $(DESTDIR)$(MANDIR)/man1\n-\tinstall -m 0644 ./doc/ccomp.1 $(DESTDIR)$(MANDIR)/man1\n-\t$(MAKE) -C runtime install\n ifeq ($(CLIGHTGEN),true)\n \tinstall -m 0755 ./clightgen $(DESTDIR)$(BINDIR)\n endif\n@@ -348,7 +301,7 @@\n \trm -f compcert.ini compcert.config\n \trm -f extraction/STAMP extraction/*.ml extraction/*.mli .depend.extr\n \trm -f tools/ndfun tools/modorder tools/*.cm? tools/*.o\n-\trm -f $(GENERATED) .depend\n+\trm -f .depend\n \trm -f .lia.cache\n \t$(MAKE) -f Makefile.extr clean\n \t$(MAKE) -C runtime clean\n"
  },
  {
    "path": "default.nix",
    "content": "{ nixpkgs ? import <nixpkgs> {}\n, ghc ? \"ghc98\"\n, coqPackages ? \"coqPackages_8_17\"\n, production ? false\n, secp256k1git ? null\n, wideMultiply ? null\n, withAlectryon ? true\n, withCoverage ? false\n, withProfiler ? false\n, withSafegcdCheat ? false\n, withTiming ? true\n, withValgrind ? false\n, doCheck ? true\n, env ? \"stdenv\"\n}:\nlet hp = nixpkgs.haskell.packages.${ghc};\n    cp = nixpkgs.${coqPackages};\n    pp = nixpkgs.python3Packages;\n in rec\n{\n  haskell = haskellPackages.callPackage ./Simplicity.Haskell.nix {\n    inherit doCheck withValgrind;\n  };\n\n  haskellPackages = hp.override {\n    overrides = self: super: {\n      Simplicity = haskell;\n\n      # Temporary work around for https://github.com/wrengr/unification-fd/issues/70\n      \"unification-fd\" = self.callPackage\n        ({ mkDerivation, base, containers, logict, mtl }:\n        mkDerivation {\n          pname = \"unification-fd\";\n          version = \"0.11.2\";\n          sha256 = \"1lyx3g10llkr7vl7c2j15ddlqrkz2r684d1laza7nvq97amrqnqv\";\n          revision = \"1\";\n          editedCabalFile = \"07xmrqmk99lnp3jyk0dqgnpprm3ghnyjdqva0y13ddh3nw8iiqdj\";\n          libraryHaskellDepends = [ base containers logict mtl ];\n          description = \"Simple generic unification algorithms\";\n          license = nixpkgs.lib.licenses.bsd3;\n          hydraPlatforms = nixpkgs.lib.platforms.none;\n          patches = [ ./unification.patch ];\n        }) {};\n    };\n  };\n\n  coq = nixpkgs.callPackage ./Simplicity.Coq.nix {\n    alectryon = if withAlectryon then pp.alectryon else null;\n    inherit (cp) coq serapi;\n    inherit safegcd-bounds vst;\n  };\n\n  c = nixpkgs.callPackage ./Simplicity.C.nix {\n    inherit doCheck production wideMultiply withCoverage withProfiler withTiming withValgrind;\n    stdenv = nixpkgs.${env};\n  };\n\n  compcert = nixpkgs.callPackage ./compcert-opensource.nix {\n    inherit (cp) coq flocq;\n    inherit (cp.coq.ocamlPackages) ocaml menhir menhirLib findlib;\n    ccomp-platform = \"x86_64-linux\";\n  };\n\n  pdf = nixpkgs.runCommand \"Simplicity-TR\" {} ''\n    export TEXMACS_HOME_PATH=$NIX_BUILD_TOP\n    mkdir -p $out/share/\n\n    cp ${./Simplicity-TR.tm} Simplicity-TR.tm\n    cp ${./Simplicity.bib} Simplicity.bib\n\n    mkdir -p $TEXMACS_HOME_PATH/progs\n    cat <<EOF > $TEXMACS_HOME_PATH/progs/my-init-buffer.scm\n    ; inspired by http://savannah.gnu.org/bugs/?32944\n    (generate-all-aux) (print-to-file \"Simplicity-TR.pdf\") (style-clear-cache)\n    EOF\n\n    ${nixpkgs.xvfb-run}/bin/xvfb-run ${nixpkgs.texmacs}/bin/texmacs -c Simplicity-TR.tm $out/share/Simplicity-TR.pdf -q\n  '';\n\n  vst = nixpkgs.callPackage ./vst.nix {\n    inherit (cp) coq;\n    inherit compcert;\n  };\n\n  safegcd-bounds = nixpkgs.callPackage ./safegcd-bounds.nix {\n    inherit (cp) coq;\n    cheating = withSafegcdCheat;\n  };\n\n  # $ nix-build -A inheritance -o inheritance.Coq.eps\n  inheritance = nixpkgs.runCommand \"inheritance.Coq.eps\" { buildInputs = [ nixpkgs.graphviz ]; } \"dot ${./inheritance.Coq.dot} -Teps -o $out\";\n}\n"
  },
  {
    "path": "inheritance.Coq.dot",
    "content": "digraph {\nnode [fontname=Courier,shape=box]\nrankdir=\"BT\"\n\nCore\nAssertion->Core\nPrimitive->Assertion\nJet->Primitive\nWitness->Core\nAssertionWitness->Assertion\nAssertionWitness->Witness\nFullSimplicity->Jet\nFullSimplicity->AssertionWitness\nDelegation->Witness\nAssertionDelegation->AssertionWitness\nAssertionDelegation->Delegation\nFullSimplicityWithDelegation->FullSimplicity\nFullSimplicityWithDelegation->AssertionDelegation\n\n{rank=same; Assertion Witness}\n{rank=same; Primitive AssertionWitness Delegation}\n{rank=same; FullSimplicity AssertionDelegation}\n}\n"
  },
  {
    "path": "manual-index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n<title>Simplicity-0.0.0</title>\n<link href=\"linuwial.css\" rel=\"stylesheet\" type=\"text/css\" title=\"Linuwial\" />\n<link rel=\"stylesheet\" type=\"text/css\" href=\"quick-jump.css\" />\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://fonts.googleapis.com/css?family=PT+Sans:400,400i,700\" />\n<script src=\"haddock-bundle.min.js\" async=\"async\" type=\"text/javascript\"></script>\n<script type=\"text/x-mathjax-config\">MathJax.Hub.Config({ tex2jax: { processClass: \"mathjax\", ignoreClass: \".*\" } });</script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML\" type=\"text/javascript\"></script></head>\n<body>\n<div id=\"package-header\">\n<span class=\"caption\">Simplicity-0.0.0</span>\n<ul class=\"links\" id=\"page-menu\">\n<li>\n<a href=\"index.html\">Contents</a></li>\n<li>\n<a href=\"doc-index.html\">Index</a></li></ul></div>\n<div id=\"content\">\n<div id=\"description\">\n<h1>Simplicity-0.0.0</h1>\n<div class=\"doc empty\">&nbsp;</div></div>\n<div id=\"module-list\">\n<p class=\"caption\">Signatures</p>\n<ul>\n<li>\n<span class=\"module details-toggle-control details-toggle collapser\" data-details-id=\"n.0\">Simplicity</span>\n<details id=\"n.0\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Primitive.html\">Simplicity.Primitive</a></span></li></ul></details></li></ul></div>\n<div id=\"module-list\">\n<p class=\"caption\">Modules</p>\n<ul>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1\">Simplicity</span>\n<details id=\"n.1\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.0\">&nbsp;</span>\n<a href=\"Simplicity-Bitcoin.html\">Simplicity.Bitcoin</a></span>\n<details id=\"n.1.0\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Bitcoin-DataTypes.html\">Simplicity.Bitcoin.DataTypes</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Bitcoin-Primitive.html\">Simplicity.Bitcoin.Primitive</a></span></li>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1.0.0\">Programs</span>\n<details id=\"n.1.0.0\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Bitcoin-Programs-TimeLock.html\">Simplicity.Bitcoin.Programs.TimeLock</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.04\">&nbsp;</span>\n<a href=\"Simplicity-Bitcoin-Programs-Transaction.html\">Simplicity.Bitcoin.Programs.Transaction</a></span>\n<details id=\"n.1.04\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Bitcoin-Programs-Transaction-Lib.html\">Simplicity.Bitcoin.Programs.Transaction.Lib</a></span></li></ul></details></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Bitcoin-Jets.html\">Simplicity.Bitcoin.Jets</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.1\">&nbsp;</span>\n<a href=\"Simplicity-BitMachine.html\">Simplicity.BitMachine</a></span>\n<details id=\"n.1.1\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-BitMachine-Authentic.html\">Simplicity.BitMachine.Authentic</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.1.2\">&nbsp;</span>\n<a href=\"Simplicity-BitMachine-StaticAnalysis.html\">Simplicity.BitMachine.StaticAnalysis</a></span>\n<details id=\"n.1.1.2\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-BitMachine-StaticAnalysis-TCO.html\">Simplicity.BitMachine.StaticAnalysis.TCO</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.1.3\">&nbsp;</span>\n<a href=\"Simplicity-BitMachine-Translate.html\">Simplicity.BitMachine.Translate</a></span>\n<details id=\"n.1.1.3\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-BitMachine-Translate-TCO.html\">Simplicity.BitMachine.Translate.TCO</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-BitMachine-Ty.html\">Simplicity.BitMachine.Ty</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-CoreJets.html\">Simplicity.CoreJets</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Dag.html\">Simplicity.Dag</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Delegator.html\">Simplicity.Delegator</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.1.044\">&nbsp;</span>\n<a href=\"Simplicity-Digest.html\">Simplicity.Digest</a></span>\n<details id=\"n.1.1.044\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Digest-Pure-SHA.html\">Simplicity.Digest.Pure.SHA</a></span></li></ul></details></li>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1.045\">Elements</span>\n<details id=\"n.1.045\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-DataTypes.html\">Simplicity.Elements.DataTypes</a></span></li>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1.045.0\">FFI</span>\n<details id=\"n.1.045.0\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-FFI-Env.html\">Simplicity.Elements.FFI.Env</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-FFI-Jets.html\">Simplicity.Elements.FFI.Jets</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-Primitive.html\">Simplicity.Elements.Primitive</a></span></li>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1.046.0\">Programs</span>\n<details id=\"n.1.046.0\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.06\">&nbsp;</span>\n<a href=\"Simplicity-Elements-Programs-Issuance.html\">Simplicity.Elements.Programs.Issuance</a></span>\n<details id=\"n.1.06\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-Programs-Issuance-Lib.html\">Simplicity.Elements.Programs.Issuance.Lib</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.065\">&nbsp;</span>\n<a href=\"Simplicity-Elements-Programs-SigHash.html\">Simplicity.Elements.Programs.SigHash</a></span>\n<details id=\"n.1.065\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-Programs-SigHash-Lib.html\">Simplicity.Elements.Programs.SigHash.Lib</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-Programs-TimeLock.html\">Simplicity.Elements.Programs.TimeLock</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.07\">&nbsp;</span>\n<a href=\"Simplicity-Elements-Programs-Transaction.html\">Simplicity.Elements.Programs.Transaction</a></span>\n<details id=\"n.1.07\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-Programs-Transaction-Lib.html\">Simplicity.Elements.Programs.Transaction.Lib</a></span></li></ul></details></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Elements-Jets.html\">Simplicity.Elements.Jets</a></span></li></ul></details></li>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1.05.0\">FFI</span>\n<details id=\"n.1.05.0\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-FFI-Frame.html\">Simplicity.FFI.Frame</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-FFI-Jets.html\">Simplicity.FFI.Jets</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Inference.html\">Simplicity.Inference</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-JetType.html\">Simplicity.JetType</a></span></li>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1.3\">LibSecp256k1</span>\n<details id=\"n.1.3\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-LibSecp256k1-Schnorr.html\">Simplicity.LibSecp256k1.Schnorr</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-LibSecp256k1-Spec.html\">Simplicity.LibSecp256k1.Spec</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-MerkleRoot.html\">Simplicity.MerkleRoot</a></span></li>\n<li>\n<span class=\"module details-toggle-control details-toggle\" data-details-id=\"n.1.5\">Programs</span>\n<details id=\"n.1.5\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-Arith.html\">Simplicity.Programs.Arith</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-Bit.html\">Simplicity.Programs.Bit</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.53\">&nbsp;</span>\n<a href=\"Simplicity-Programs-CheckSig.html\">Simplicity.Programs.CheckSig</a></span>\n<details id=\"n.1.53\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-CheckSig-Lib.html\">Simplicity.Programs.CheckSig.Lib</a></span></li></ul></details></li><li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.54\">&nbsp;</span>\n<a href=\"Simplicity-Programs-Elements.html\">Simplicity.Programs.Elements</a></span>\n<details id=\"n.1.54\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-Elements-Lib.html\">Simplicity.Programs.Elements.Lib</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-Generic.html\">Simplicity.Programs.Generic</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.55\">&nbsp;</span>\n<a href=\"Simplicity-Programs-LibSecp256k1.html\">Simplicity.Programs.LibSecp256k1</a></span>\n<details id=\"n.1.55\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-LibSecp256k1-Lib.html\">Simplicity.Programs.LibSecp256k1.Lib</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-Loop.html\">Simplicity.Programs.Loop</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.56\">&nbsp;</span>\n<a href=\"Simplicity-Programs-Sha256.html\">Simplicity.Programs.Sha256</a></span>\n<details id=\"n.1.56\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-Sha256-Lib.html\">Simplicity.Programs.Sha256.Lib</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-TimeLock.html\">Simplicity.Programs.TimeLock</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Programs-Word.html\">Simplicity.Programs.Word</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Semantics.html\">Simplicity.Semantics</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.85\">&nbsp;</span>\n<a href=\"Simplicity-Serialization.html\">Simplicity.Serialization</a></span>\n<details id=\"n.1.85\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Serialization-BitString.html\">Simplicity.Serialization.BitString</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Serialization-ByteString.html\">Simplicity.Serialization.ByteString</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Tensor.html\">Simplicity.Tensor</a></span></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.8\">&nbsp;</span>\n<a href=\"Simplicity-Term.html\">Simplicity.Term</a></span>\n<details id=\"n.1.8\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Term-Core.html\">Simplicity.Term.Core</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<span class=\"details-toggle-control details-toggle\" data-details-id=\"n.1.9\">&nbsp;</span>\n<a href=\"Simplicity-Ty.html\">Simplicity.Ty</a></span>\n<details id=\"n.1.9\" open=\"open\">\n<summary class=\"hide-when-js-enabled\">Submodules</summary>\n<ul>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Ty-Bit.html\">Simplicity.Ty.Bit</a></span></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Ty-Word.html\">Simplicity.Ty.Word</a></span></li></ul></details></li>\n<li>\n<span class=\"module\">\n<a href=\"Simplicity-Word.html\">Simplicity.Word</a></span></li></ul></details></li></ul></div></div>\n<div id=\"footer\">\n<p>Produced by hand</p></div></body></html>\n"
  },
  {
    "path": "safegcd-bounds.nix",
    "content": "{lib, stdenv, fetchFromGitHub, coq,\n cheating ? true\n} :\nstdenv.mkDerivation {\n  name = \"safegcd-bounds-coq-divsteps\";\n  src = fetchFromGitHub {\n    owner = \"sipa\";\n    repo = \"safegcd-bounds\";\n    rev =\"06abb7f7aba9b00eb4ead96bdd7dbcc04ec45c4f\";\n    sparseCheckout = [\n      \"coq/divsteps\"\n    ];\n    hash = \"sha256-I+1TFBJOQxro09hkHBdCrLptoq06RYaeBz5PbPLzjGA=\";\n    name = \"safegcd-bounds\";\n  };\n  sourceRoot = \"safegcd-bounds/coq/divsteps\";\n\n  ${if cheating then \"postPatch\" else null} = ''\n     substituteInPlace divsteps724.v --replace-fail \"Time Qed.\" \"Admitted.\"\n  '';\n\n  buildInputs = [ coq ];\n\n  enableParallelBuilding = true;\n\n  preBuild = ''\n    coq_makefile -f _CoqProject -o Makefile\n  '';\n\n  installFlags = \"COQLIBINSTALL=$(out)/lib/coq/${coq.coq-version}/user-contrib/\";\n}\n"
  },
  {
    "path": "shell.nix",
    "content": "{ haskell ? true\n, coq     ? true\n, c       ? true\n, nixpkgs ? import <nixpkgs> {}\n, ghc ? \"ghc98\"\n, coqPackages ? \"coqPackages_8_17\"\n, env ? \"stdenv\"\n, withCoverage ? true\n, withProfiler ? true\n, withSafegcdCheat ? true\n, withValgrind ? true\n}:\nlet\n  simplicity      = import ./. {inherit nixpkgs ghc coqPackages env withCoverage withProfiler withSafegcdCheat withValgrind;};\n  optional        = nixpkgs.lib.optional;\n  haskellDevTools = pkgs: with pkgs; [cabal-install hlint hasktags];\n  haskellPkgs     = pkgs: simplicity.haskell.buildInputs ++ simplicity.haskell.propagatedBuildInputs ++ haskellDevTools pkgs;\n  haskellDevEnv   = simplicity.haskellPackages.ghcWithPackages haskellPkgs;\n  coqDevEnv       = [ nixpkgs.python3Packages.alectryon\n                      nixpkgs.${coqPackages}.serapi\n                      nixpkgs.${coqPackages}.coq\n                      nixpkgs.${coqPackages}.coqide\n                    ];\n\nin\n  nixpkgs.mkShell {\n    packages = optional haskell haskellDevEnv\n            ++ optional coq coqDevEnv;\n    inputsFrom = optional coq     simplicity.coq\n              ++ optional c       simplicity.c;\n  }\n"
  },
  {
    "path": "spelling.ignore.txt",
    "content": "alo\nba\ncatche\ncrate\nfro\nfromWord\nhge\nist\niterm\nmemoty\nnd\nolt\noutin\nshiftin\nshs\nthn\ntoWord\nwit\n"
  },
  {
    "path": "unification.patch",
    "content": "--- unification-fd-0.11.2/unification-fd.cabal\t2001-09-08 21:46:40.000000000 -0400\n+++ unification-fd-0.11.2/unification-fd.cabal\t2024-05-21 17:53:32.740519714 -0400\n@@ -70,7 +70,7 @@\n                    -- should be resolved now. Cf.,\n                    -- <https://github.com/Bodigrim/logict/issues/20#issuecomment-774528439>\n                    -- <https://github.com/wrengr/unification-fd/issues/14>\n-    Build-Depends:   logict       >= 0.4 && < 0.8.1\n+    Build-Depends:   logict       >= 0.4 && < 0.8.3\n                    -- N.B., Tasty requires base>=4.5.0.0; which\n                    -- means we aren't CI testing anything older than\n                    -- that anymore, so we might as well just require\n"
  },
  {
    "path": "vst.nix",
    "content": "{lib, stdenv, fetchFromGitHub, coq, compcert,\n ignoreCompcertVersion ? compcert.version==\"3.14\" # Temporarily allow compcert 3.14\n} :\nstdenv.mkDerivation {\n  name = \"vst-sha256-2.14\";\n  src = fetchFromGitHub {\n    owner = \"PrincetonUniversity\";\n    repo = \"VST\";\n    rev =\"v2.14\";\n    hash = \"sha256-NHc1ZQ2VmXZy4lK2+mtyeNz1Qr9Nhj2QLxkPhhQB7Iw\";\n  };\n\n  buildInputs = [ coq ];\n  propagatedBuildInputs = [ compcert ];\n\n  patches = [ ];\n\n  postPatch = ''\n    substituteInPlace util/coqflags \\\n      --replace \"\\`/bin/pwd\\`\" \"$out/lib/coq/${coq.coq-version}/user-contrib/VST\"\n    patchShebangs --build util/*\n  '';\n\n  enableParallelBuilding = true;\n\n  makeFlags =\n    lib.optional ignoreCompcertVersion \"IGNORECOMPCERTVERSION=true\" ++\n  [\n    \"COMPCERT=inst_dir\"\n    \"COMPCERT_INST_DIR=${compcert}/lib/coq/${coq.coq-version}/user-contrib/compcert\"\n    \"INSTALLDIR=$(out)/lib/coq/${coq.coq-version}/user-contrib/VST\"\n  ];\n\n  buildFlags = [ \"default_target\" \"sha\" ];\n\n  postBuild = ''\n    gcc -c sha/sha.c -o sha/sha.o\n  '';\n\n  postInstall = ''\n    install -d \"$out/lib/coq/${coq.coq-version}/user-contrib/sha\"\n    find sha -name \\*.vo -exec sh -c '\n     install -m 0644 -T \"$0\" \"$out/lib/coq/${coq.coq-version}/user-contrib/$0\"\n     install -m 0644 -T \"''${0%.vo}.v\" \"$out/lib/coq/${coq.coq-version}/user-contrib/''${0%.vo}.v\"\n    ' {} \\;\n    install -d \"$out/lib/sha\"\n    install -m 0644 -t \"$out/lib/sha\" \"sha/sha.o\" \"sha/sha.h\"\n    install -d \"$out/share\"\n    install -m 0644 -t \"$out/share\" \"_CoqProject-export\"\n  '';\n}\n"
  }
]